/** * @license * Cesium - https://github.com/CesiumGS/cesium * Version 1.144.0 * * Copyright 2011-2022 Cesium Contributors * * 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. * * Columbus View (Pat. Pend.) * * Portions licensed separately. * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. */ "use strict";var Cesium=(()=>{var BFe=Object.create;var HG=Object.defineProperty;var zFe=Object.getOwnPropertyDescriptor;var HFe=Object.getOwnPropertyNames;var KFe=Object.getPrototypeOf,JFe=Object.prototype.hasOwnProperty;var jFe=(e,t,n)=>t in e?HG(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var HU=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var sm=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(n){throw t=0,n}},QFe=(e,t)=>{for(var n in t)HG(e,n,{get:t[n],enumerable:!0})},Cse=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of HFe(t))!JFe.call(e,o)&&o!==n&&HG(e,o,{get:()=>t[o],enumerable:!(i=zFe(t,o))||i.enumerable});return e};var x=(e,t,n)=>(n=e!=null?BFe(KFe(e)):{},Cse(t||!e||!e.__esModule?HG(n,"default",{value:e,enumerable:!0}):n,e)),qFe=e=>Cse(HG({},"__esModule",{value:!0}),e);var ct=(e,t,n)=>jFe(e,typeof t!="symbol"?t+"":t,n);var T=sm(()=>{"use strict";globalThis.CESIUM_WORKERS=atob("dmFyIENlc2l1bVdvcmtlcnM9KCgpPT57dmFyIFhTPU9iamVjdC5jcmVhdGU7dmFyIGJmPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgWVM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgSlM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIFpTPU9iamVjdC5nZXRQcm90b3R5cGVPZixRUz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciAkUz0obixlLHQpPT5lIGluIG4/YmYobixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSk6bltlXT10O3ZhciBsYT0obj0+dHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dHlwZW9mIFByb3h5PCJ1Ij9uZXcgUHJveHkobix7Z2V0OihlLHQpPT4odHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6ZSlbdF19KTpuKShmdW5jdGlvbihuKXtpZih0eXBlb2YgcmVxdWlyZTwidSIpcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrbisnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxPMT1uPT5lPT57dmFyIHQ9bltlXTtpZih0KXJldHVybiB0KCk7dGhyb3cgbmV3IEVycm9yKCJNb2R1bGUgbm90IGZvdW5kIGluIGJ1bmRsZTogIitlKX07dmFyIFg9KG4sZSx0KT0+KCk9PntpZih0KXRocm93IHRbMF07dHJ5e3JldHVybiBuJiYoZT1uKG49MCkpLGV9Y2F0Y2gobyl7dGhyb3cgdD1bb10sb319O3ZhciBzaT0obixlKT0+KCk9Pnt0cnl7cmV0dXJuIGV8fG4oKGU9e2V4cG9ydHM6e319KS5leHBvcnRzLGUpLGUuZXhwb3J0c31jYXRjaCh0KXt0aHJvdyBlPTAsdH19LCRlPShuLGUpPT57Zm9yKHZhciB0IGluIGUpYmYobix0LHtnZXQ6ZVt0XSxlbnVtZXJhYmxlOiEwfSl9LFMxPShuLGUsdCxvKT0+e2lmKGUmJnR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpZm9yKGxldCBhIG9mIEpTKGUpKSFRUy5jYWxsKG4sYSkmJmEhPT10JiZiZihuLGEse2dldDooKT0+ZVthXSxlbnVtZXJhYmxlOiEobz1ZUyhlLGEpKXx8by5lbnVtZXJhYmxlfSk7cmV0dXJuIG59O3ZhciBoYT0obixlLHQpPT4odD1uIT1udWxsP1hTKFpTKG4pKTp7fSxTMShlfHwhbnx8IW4uX19lc01vZHVsZT9iZih0LCJkZWZhdWx0Iix7dmFsdWU6bixlbnVtZXJhYmxlOiEwfSk6dCxuKSksZUM9bj0+UzEoYmYoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4pO3ZhciBlbD0obixlLHQpPT4kUyhuLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCk7ZnVuY3Rpb24gdEMobil7cmV0dXJuIG4hPW51bGx9dmFyIGcsZmU9WCgoKT0+e2c9dEN9KTtmdW5jdGlvbiBZaShuKXt0aGlzLm5hbWU9IkRldmVsb3BlckVycm9yIix0aGlzLm1lc3NhZ2U9bjtsZXQgZTt0cnl7dGhyb3cgbmV3IEVycm9yfWNhdGNoKHQpe2U9dC5zdGFja310aGlzLnN0YWNrPWV9dmFyIFZ0LEppPVgoKCk9PntmZSgpO2coT2JqZWN0LmNyZWF0ZSkmJihZaS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLFlpLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ZaSk7WWkucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7bGV0IG49YCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9YDtyZXR1cm4gZyh0aGlzLnN0YWNrKSYmKG4rPWAKJHt0aGlzLnN0YWNrLnRvU3RyaW5nKCl9YCksbn07WWkudGhyb3dJbnN0YW50aWF0aW9uRXJyb3I9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgWWkoIlRoaXMgZnVuY3Rpb24gZGVmaW5lcyBhbiBpbnRlcmZhY2UgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiIpfTtWdD1ZaX0pO2Z1bmN0aW9uIG5DKG4pe3JldHVybmAke259IGlzIHJlcXVpcmVkLCBhY3R1YWwgdmFsdWUgd2FzIHVuZGVmaW5lZGB9ZnVuY3Rpb24gS2MobixlLHQpe3JldHVybmBFeHBlY3RlZCAke3R9IHRvIGJlIHR5cGVvZiAke2V9LCBhY3R1YWwgdHlwZW9mIHdhcyAke259YH12YXIgSm4sUm4sSG09WCgoKT0+e2ZlKCk7SmkoKTtKbj17fTtKbi50eXBlT2Y9e307Sm4uZGVmaW5lZD1mdW5jdGlvbihuLGUpe2lmKCFnKGUpKXRocm93IG5ldyBWdChuQyhuKSl9O0puLnR5cGVPZi5mdW5jPWZ1bmN0aW9uKG4sZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFZ0KEtjKHR5cGVvZiBlLCJmdW5jdGlvbiIsbikpfTtKbi50eXBlT2Yuc3RyaW5nPWZ1bmN0aW9uKG4sZSl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBWdChLYyh0eXBlb2YgZSwic3RyaW5nIixuKSl9O0puLnR5cGVPZi5udW1iZXI9ZnVuY3Rpb24obixlKXtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IFZ0KEtjKHR5cGVvZiBlLCJudW1iZXIiLG4pKX07Sm4udHlwZU9mLm51bWJlci5sZXNzVGhhbj1mdW5jdGlvbihuLGUsdCl7aWYoSm4udHlwZU9mLm51bWJlcihuLGUpLGU+PXQpdGhyb3cgbmV3IFZ0KGBFeHBlY3RlZCAke259IHRvIGJlIGxlc3MgdGhhbiAke3R9LCBhY3R1YWwgdmFsdWUgd2FzICR7ZX1gKX07Sm4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKG4sZSx0KXtpZihKbi50eXBlT2YubnVtYmVyKG4sZSksZT50KXRocm93IG5ldyBWdChgRXhwZWN0ZWQgJHtufSB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHt0fSwgYWN0dWFsIHZhbHVlIHdhcyAke2V9YCl9O0puLnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW49ZnVuY3Rpb24obixlLHQpe2lmKEpuLnR5cGVPZi5udW1iZXIobixlKSxlPD10KXRocm93IG5ldyBWdChgRXhwZWN0ZWQgJHtufSB0byBiZSBncmVhdGVyIHRoYW4gJHt0fSwgYWN0dWFsIHZhbHVlIHdhcyAke2V9YCl9O0puLnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscz1mdW5jdGlvbihuLGUsdCl7aWYoSm4udHlwZU9mLm51bWJlcihuLGUpLGU8dCl0aHJvdyBuZXcgVnQoYEV4cGVjdGVkICR7bn0gdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7dH0sIGFjdHVhbCB2YWx1ZSB3YXMgJHtlfWApfTtKbi50eXBlT2Yub2JqZWN0PWZ1bmN0aW9uKG4sZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyBWdChLYyh0eXBlb2YgZSwib2JqZWN0IixuKSl9O0puLnR5cGVPZi5ib29sPWZ1bmN0aW9uKG4sZSl7aWYodHlwZW9mIGUhPSJib29sZWFuIil0aHJvdyBuZXcgVnQoS2ModHlwZW9mIGUsImJvb2xlYW4iLG4pKX07Sm4udHlwZU9mLmJpZ2ludD1mdW5jdGlvbihuLGUpe2lmKHR5cGVvZiBlIT0iYmlnaW50Iil0aHJvdyBuZXcgVnQoS2ModHlwZW9mIGUsImJpZ2ludCIsbikpfTtKbi50eXBlT2YubnVtYmVyLmVxdWFscz1mdW5jdGlvbihuLGUsdCxvKXtpZihKbi50eXBlT2YubnVtYmVyKG4sdCksSm4udHlwZU9mLm51bWJlcihlLG8pLHQhPT1vKXRocm93IG5ldyBWdChgJHtufSBtdXN0IGJlIGVxdWFsIHRvICR7ZX0sIHRoZSBhY3R1YWwgdmFsdWVzIGFyZSAke3R9IGFuZCAke299YCl9O1JuPUpufSk7dmFyIE0xPXNpKCh6RyxDMSk9Pnt2YXIgSXI9ZnVuY3Rpb24obil7bj09bnVsbCYmKG49bmV3IERhdGUoKS5nZXRUaW1lKCkpLHRoaXMuTj02MjQsdGhpcy5NPTM5Nyx0aGlzLk1BVFJJWF9BPTI1Njc0ODM2MTUsdGhpcy5VUFBFUl9NQVNLPTIxNDc0ODM2NDgsdGhpcy5MT1dFUl9NQVNLPTIxNDc0ODM2NDcsdGhpcy5tdD1uZXcgQXJyYXkodGhpcy5OKSx0aGlzLm10aT10aGlzLk4rMSxuLmNvbnN0cnVjdG9yPT1BcnJheT90aGlzLmluaXRfYnlfYXJyYXkobixuLmxlbmd0aCk6dGhpcy5pbml0X3NlZWQobil9O0lyLnByb3RvdHlwZS5pbml0X3NlZWQ9ZnVuY3Rpb24obil7Zm9yKHRoaXMubXRbMF09bj4+PjAsdGhpcy5tdGk9MTt0aGlzLm10aTx0aGlzLk47dGhpcy5tdGkrKyl7dmFyIG49dGhpcy5tdFt0aGlzLm10aS0xXV50aGlzLm10W3RoaXMubXRpLTFdPj4+MzA7dGhpcy5tdFt0aGlzLm10aV09KCgobiY0Mjk0OTAxNzYwKT4+PjE2KSoxODEyNDMzMjUzPDwxNikrKG4mNjU1MzUpKjE4MTI0MzMyNTMrdGhpcy5tdGksdGhpcy5tdFt0aGlzLm10aV0+Pj49MH19O0lyLnByb3RvdHlwZS5pbml0X2J5X2FycmF5PWZ1bmN0aW9uKG4sZSl7dmFyIHQsbyxhO2Zvcih0aGlzLmluaXRfc2VlZCgxOTY1MDIxOCksdD0xLG89MCxhPXRoaXMuTj5lP3RoaXMuTjplO2E7YS0tKXt2YXIgcj10aGlzLm10W3QtMV1edGhpcy5tdFt0LTFdPj4+MzA7dGhpcy5tdFt0XT0odGhpcy5tdFt0XV4oKChyJjQyOTQ5MDE3NjApPj4+MTYpKjE2NjQ1MjU8PDE2KSsociY2NTUzNSkqMTY2NDUyNSkrbltvXStvLHRoaXMubXRbdF0+Pj49MCx0KyssbysrLHQ+PXRoaXMuTiYmKHRoaXMubXRbMF09dGhpcy5tdFt0aGlzLk4tMV0sdD0xKSxvPj1lJiYobz0wKX1mb3IoYT10aGlzLk4tMTthO2EtLSl7dmFyIHI9dGhpcy5tdFt0LTFdXnRoaXMubXRbdC0xXT4+PjMwO3RoaXMubXRbdF09KHRoaXMubXRbdF1eKCgociY0Mjk0OTAxNzYwKT4+PjE2KSoxNTY2MDgzOTQxPDwxNikrKHImNjU1MzUpKjE1NjYwODM5NDEpLXQsdGhpcy5tdFt0XT4+Pj0wLHQrKyx0Pj10aGlzLk4mJih0aGlzLm10WzBdPXRoaXMubXRbdGhpcy5OLTFdLHQ9MSl9dGhpcy5tdFswXT0yMTQ3NDgzNjQ4fTtJci5wcm90b3R5cGUucmFuZG9tX2ludD1mdW5jdGlvbigpe3ZhciBuLGU9bmV3IEFycmF5KDAsdGhpcy5NQVRSSVhfQSk7aWYodGhpcy5tdGk+PXRoaXMuTil7dmFyIHQ7Zm9yKHRoaXMubXRpPT10aGlzLk4rMSYmdGhpcy5pbml0X3NlZWQoNTQ4OSksdD0wO3Q8dGhpcy5OLXRoaXMuTTt0Kyspbj10aGlzLm10W3RdJnRoaXMuVVBQRVJfTUFTS3x0aGlzLm10W3QrMV0mdGhpcy5MT1dFUl9NQVNLLHRoaXMubXRbdF09dGhpcy5tdFt0K3RoaXMuTV1ebj4+PjFeZVtuJjFdO2Zvcig7dDx0aGlzLk4tMTt0Kyspbj10aGlzLm10W3RdJnRoaXMuVVBQRVJfTUFTS3x0aGlzLm10W3QrMV0mdGhpcy5MT1dFUl9NQVNLLHRoaXMubXRbdF09dGhpcy5tdFt0Kyh0aGlzLk0tdGhpcy5OKV1ebj4+PjFeZVtuJjFdO249dGhpcy5tdFt0aGlzLk4tMV0mdGhpcy5VUFBFUl9NQVNLfHRoaXMubXRbMF0mdGhpcy5MT1dFUl9NQVNLLHRoaXMubXRbdGhpcy5OLTFdPXRoaXMubXRbdGhpcy5NLTFdXm4+Pj4xXmVbbiYxXSx0aGlzLm10aT0wfXJldHVybiBuPXRoaXMubXRbdGhpcy5tdGkrK10sbl49bj4+PjExLG5ePW48PDcmMjYzNjkyODY0MCxuXj1uPDwxNSY0MDIyNzMwNzUyLG5ePW4+Pj4xOCxuPj4+MH07SXIucHJvdG90eXBlLnJhbmRvbV9pbnQzMT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJhbmRvbV9pbnQoKT4+PjF9O0lyLnByb3RvdHlwZS5yYW5kb21faW5jbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJhbmRvbV9pbnQoKSooMS80Mjk0OTY3Mjk1KX07SXIucHJvdG90eXBlLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJhbmRvbV9pbnQoKSooMS80Mjk0OTY3Mjk2KX07SXIucHJvdG90eXBlLnJhbmRvbV9leGNsPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmFuZG9tX2ludCgpKy41KSooMS80Mjk0OTY3Mjk2KX07SXIucHJvdG90eXBlLnJhbmRvbV9sb25nPWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5yYW5kb21faW50KCk+Pj41LGU9dGhpcy5yYW5kb21faW50KCk+Pj42O3JldHVybihuKjY3MTA4ODY0K2UpKigxLzkwMDcxOTkyNTQ3NDA5OTIpfTtDMS5leHBvcnRzPUlyfSk7dmFyIEttLFJlLHRsLE4xLGssamU9WCgoKT0+e0ttPWhhKE0xKCksMSksUmU9e307UmUuRVBTSUxPTjE9LjE7UmUuRVBTSUxPTjI9LjAxO1JlLkVQU0lMT04zPS4wMDE7UmUuRVBTSUxPTjQ9MWUtNDtSZS5FUFNJTE9ONT0xZS01O1JlLkVQU0lMT042PTFlLTY7UmUuRVBTSUxPTjc9MWUtNztSZS5FUFNJTE9OOD0xZS04O1JlLkVQU0lMT045PTFlLTk7UmUuRVBTSUxPTjEwPTFlLTEwO1JlLkVQU0lMT04xMT0xZS0xMTtSZS5FUFNJTE9OMTI9MWUtMTI7UmUuRVBTSUxPTjEzPTFlLTEzO1JlLkVQU0lMT04xND0xZS0xNDtSZS5FUFNJTE9OMTU9MWUtMTU7UmUuRVBTSUxPTjE2PTFlLTE2O1JlLkVQU0lMT04xNz0xZS0xNztSZS5FUFNJTE9OMTg9MWUtMTg7UmUuRVBTSUxPTjE5PTFlLTE5O1JlLkVQU0lMT04yMD0xZS0yMDtSZS5FUFNJTE9OMjE9MWUtMjE7UmUuR1JBVklUQVRJT05BTFBBUkFNRVRFUj0zOTg2MDA0NDE4ZTU7UmUuU09MQVJfUkFESVVTPTY5NTVlNTtSZS5MVU5BUl9SQURJVVM9MTczNzQwMDtSZS5TSVhUWV9GT1VSX0tJTE9CWVRFUz02NCoxMDI0O1JlLkZPVVJfR0lHQUJZVEVTPTQqMTAyNCoxMDI0KjEwMjQ7UmUuc2lnbj1NYXRoLnNpZ24/P2Z1bmN0aW9uKGUpe3JldHVybiBlPStlLGU9PT0wfHxlIT09ZT9lOmU+MD8xOi0xfTtSZS5zaWduTm90WmVybz1mdW5jdGlvbihuKXtyZXR1cm4gbjwwPy0xOjF9O1JlLnRvU05vcm09ZnVuY3Rpb24obixlKXtyZXR1cm4gZT1lPz8yNTUsTWF0aC5yb3VuZCgoUmUuY2xhbXAobiwtMSwxKSouNSsuNSkqZSl9O1JlLmZyb21TTm9ybT1mdW5jdGlvbihuLGUpe3JldHVybiBlPWU/PzI1NSxSZS5jbGFtcChuLDAsZSkvZSoyLTF9O1JlLm5vcm1hbGl6ZT1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIHQ9TWF0aC5tYXgodC1lLDApLHQ9PT0wPzA6UmUuY2xhbXAoKG4tZSkvdCwwLDEpfTtSZS5zaW5oPU1hdGguc2luaD8/ZnVuY3Rpb24oZSl7cmV0dXJuKE1hdGguZXhwKGUpLU1hdGguZXhwKC1lKSkvMn07UmUuY29zaD1NYXRoLmNvc2g/P2Z1bmN0aW9uKGUpe3JldHVybihNYXRoLmV4cChlKStNYXRoLmV4cCgtZSkpLzJ9O1JlLmxlcnA9ZnVuY3Rpb24obixlLHQpe3JldHVybigxLXQpKm4rdCplfTtSZS5zbW9vdGhEYW1wPWZ1bmN0aW9uKG4sZSx0LG89MCxhPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxyPTFlLTQsaT17fSl7cj1NYXRoLm1heCgxZS00LHIpO2xldCBmPTIvcixkPWYqbyxjPTEvKDErZCsuNDgqZCpkKy4yMzUqZCpkKmQpLHU9YSpyLGw9bi1lO2w9UmUuY2xhbXAobCwtdSx1KTtsZXQgbT1uLWwsaD0odCtmKmwpKm87cmV0dXJuIHQ9KHQtZipoKSpjLGkudmFsdWU9bSsobCtoKSpjLGkudmVsb2NpdHk9dCxpfTtSZS5QST1NYXRoLlBJO1JlLk9ORV9PVkVSX1BJPTEvTWF0aC5QSTtSZS5QSV9PVkVSX1RXTz1NYXRoLlBJLzI7UmUuUElfT1ZFUl9USFJFRT1NYXRoLlBJLzM7UmUuUElfT1ZFUl9GT1VSPU1hdGguUEkvNDtSZS5QSV9PVkVSX1NJWD1NYXRoLlBJLzY7UmUuVEhSRUVfUElfT1ZFUl9UV089MypNYXRoLlBJLzI7UmUuVFdPX1BJPTIqTWF0aC5QSTtSZS5PTkVfT1ZFUl9UV09fUEk9MS8oMipNYXRoLlBJKTtSZS5SQURJQU5TX1BFUl9ERUdSRUU9TWF0aC5QSS8xODA7UmUuREVHUkVFU19QRVJfUkFESUFOPTE4MC9NYXRoLlBJO1JlLlJBRElBTlNfUEVSX0FSQ1NFQ09ORD1SZS5SQURJQU5TX1BFUl9ERUdSRUUvMzYwMDtSZS50b1JhZGlhbnM9ZnVuY3Rpb24obil7cmV0dXJuIG4qUmUuUkFESUFOU19QRVJfREVHUkVFfTtSZS50b0RlZ3JlZXM9ZnVuY3Rpb24obil7cmV0dXJuIG4qUmUuREVHUkVFU19QRVJfUkFESUFOfTtSZS5jb252ZXJ0TG9uZ2l0dWRlUmFuZ2U9ZnVuY3Rpb24obil7bGV0IGU9UmUuVFdPX1BJLHQ9bi1NYXRoLmZsb29yKG4vZSkqZTtyZXR1cm4gdDwtTWF0aC5QST90K2U6dD49TWF0aC5QST90LWU6dH07UmUuY2xhbXBUb0xhdGl0dWRlUmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIFJlLmNsYW1wKG4sLTEqUmUuUElfT1ZFUl9UV08sUmUuUElfT1ZFUl9UV08pfTtSZS5uZWdhdGl2ZVBpVG9QaT1mdW5jdGlvbihuKXtyZXR1cm4gbj49LVJlLlBJJiZuPD1SZS5QST9uOlJlLnplcm9Ub1R3b1BpKG4rUmUuUEkpLVJlLlBJfTtSZS56ZXJvVG9Ud29QaT1mdW5jdGlvbihuKXtpZihuPj0wJiZuPD1SZS5UV09fUEkpcmV0dXJuIG47bGV0IGU9UmUubW9kKG4sUmUuVFdPX1BJKTtyZXR1cm4gTWF0aC5hYnMoZSk8UmUuRVBTSUxPTjE0JiZNYXRoLmFicyhuKT5SZS5FUFNJTE9OMTQ/UmUuVFdPX1BJOmV9O1JlLm1vZD1mdW5jdGlvbihuLGUpe3JldHVybiBSZS5zaWduKG4pPT09UmUuc2lnbihlKSYmTWF0aC5hYnMobik8TWF0aC5hYnMoZSk/bjoobiVlK2UpJWV9O1JlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24obixlLHQsbyl7dD10Pz8wLG89bz8/dDtsZXQgYT1NYXRoLmFicyhuLWUpO3JldHVybiBhPD1vfHxhPD10Kk1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKGUpKX07UmUubGVzc1RoYW49ZnVuY3Rpb24obixlLHQpe3JldHVybiBuLWU8LXR9O1JlLmxlc3NUaGFuT3JFcXVhbHM9ZnVuY3Rpb24obixlLHQpe3JldHVybiBuLWU8dH07UmUuZ3JlYXRlclRoYW49ZnVuY3Rpb24obixlLHQpe3JldHVybiBuLWU+dH07UmUuZ3JlYXRlclRoYW5PckVxdWFscz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIG4tZT4tdH07dGw9WzFdO1JlLmZhY3RvcmlhbD1mdW5jdGlvbihuKXtsZXQgZT10bC5sZW5ndGg7aWYobj49ZSl7bGV0IHQ9dGxbZS0xXTtmb3IobGV0IG89ZTtvPD1uO28rKyl7bGV0IGE9dCpvO3RsLnB1c2goYSksdD1hfX1yZXR1cm4gdGxbbl19O1JlLmluY3JlbWVudFdyYXA9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0PXQ/PzAsKytuLG4+ZSYmKG49dCksbn07UmUuaXNQb3dlck9mVHdvPWZ1bmN0aW9uKG4pe3JldHVybiBuIT09MCYmKG4mbi0xKT09PTB9O1JlLm5leHRQb3dlck9mVHdvPWZ1bmN0aW9uKG4pe3JldHVybi0tbixufD1uPj4xLG58PW4+PjIsbnw9bj4+NCxufD1uPj44LG58PW4+PjE2LCsrbixufTtSZS5wcmV2aW91c1Bvd2VyT2ZUd289ZnVuY3Rpb24obil7cmV0dXJuIG58PW4+PjEsbnw9bj4+MixufD1uPj40LG58PW4+Pjgsbnw9bj4+MTYsbnw9bj4+MzIsbj0obj4+PjApLShuPj4+MSksbn07UmUuY2xhbXA9ZnVuY3Rpb24obixlLHQpe3JldHVybiBuPGU/ZTpuPnQ/dDpufTtOMT1uZXcgS20uZGVmYXVsdDtSZS5zZXRSYW5kb21OdW1iZXJTZWVkPWZ1bmN0aW9uKG4pe04xPW5ldyBLbS5kZWZhdWx0KG4pfTtSZS5uZXh0UmFuZG9tTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIE4xLnJhbmRvbSgpfTtSZS5yYW5kb21CZXR3ZWVuPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIFJlLm5leHRSYW5kb21OdW1iZXIoKSooZS1uKStufTtSZS5hY29zQ2xhbXBlZD1mdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5hY29zKFJlLmNsYW1wKG4sLTEsMSkpfTtSZS5hc2luQ2xhbXBlZD1mdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5hc2luKFJlLmNsYW1wKG4sLTEsMSkpfTtSZS5jaG9yZExlbmd0aD1mdW5jdGlvbihuLGUpe3JldHVybiAyKmUqTWF0aC5zaW4obiouNSl9O1JlLmxvZ0Jhc2U9ZnVuY3Rpb24obixlKXtyZXR1cm4gTWF0aC5sb2cobikvTWF0aC5sb2coZSl9O1JlLmNicnQ9TWF0aC5jYnJ0Pz9mdW5jdGlvbihlKXtsZXQgdD1NYXRoLnBvdyhNYXRoLmFicyhlKSwuMzMzMzMzMzMzMzMzMzMzMyk7cmV0dXJuIGU8MD8tdDp0fTtSZS5sb2cyPU1hdGgubG9nMj8/ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUpKk1hdGguTE9HMkV9O1JlLmZvZz1mdW5jdGlvbihuLGUpe2xldCB0PW4qZTtyZXR1cm4gMS1NYXRoLmV4cCgtKHQqdCkpfTtSZS5mYXN0QXBwcm94aW1hdGVBdGFuPWZ1bmN0aW9uKG4pe3JldHVybiBuKigtLjE3ODQqTWF0aC5hYnMobiktLjA2NjMqbipuKzEuMDMwMSl9O1JlLmZhc3RBcHByb3hpbWF0ZUF0YW4yPWZ1bmN0aW9uKG4sZSl7bGV0IHQsbz1NYXRoLmFicyhuKTt0PU1hdGguYWJzKGUpO2xldCBhPU1hdGgubWF4KG8sdCk7dD1NYXRoLm1pbihvLHQpO2xldCByPXQvYTtyZXR1cm4gbz1SZS5mYXN0QXBwcm94aW1hdGVBdGFuKHIpLG89TWF0aC5hYnMoZSk+TWF0aC5hYnMobik/UmUuUElfT1ZFUl9UV08tbzpvLG89bjwwP1JlLlBJLW86byxvPWU8MD8tbzpvLG99O2s9UmV9KTt2YXIgZm4sbmwsSTEsb2wscW0sb0MsbWEscWMscyxNZT1YKCgpPT57ZmUoKTtqZSgpO2ZuPWNsYXNzIG57Y29uc3RydWN0b3IoZSx0LG8pe3RoaXMueD1lPz8wLHRoaXMueT10Pz8wLHRoaXMuej1vPz8wfXN0YXRpYyBmcm9tU3BoZXJpY2FsKGUsdCl7Zyh0KXx8KHQ9bmV3IG4pO2xldCBvPWUuY2xvY2ssYT1lLmNvbmUscj1lLm1hZ25pdHVkZT8/MSxpPXIqTWF0aC5zaW4oYSk7cmV0dXJuIHQueD1pKk1hdGguY29zKG8pLHQueT1pKk1hdGguc2luKG8pLHQuej1yKk1hdGguY29zKGEpLHR9c3RhdGljIGZyb21FbGVtZW50cyhlLHQsbyxhKXtyZXR1cm4gZyhhKT8oYS54PWUsYS55PXQsYS56PW8sYSk6bmV3IG4oZSx0LG8pfXN0YXRpYyBjbG9uZShlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQueD1lLngsdC55PWUueSx0Lno9ZS56LHQpOm5ldyBuKGUueCxlLnksZS56KX1zdGF0aWMgcGFjayhlLHQsbyl7cmV0dXJuIG89bz8/MCx0W28rK109ZS54LHRbbysrXT1lLnksdFtvXT1lLnosdH1zdGF0aWMgdW5wYWNrKGUsdCxvKXtyZXR1cm4gdD10Pz8wLGcobyl8fChvPW5ldyBuKSxvLng9ZVt0KytdLG8ueT1lW3QrK10sby56PWVbdF0sb31zdGF0aWMgcGFja0FycmF5KGUsdCl7bGV0IG89ZS5sZW5ndGgsYT1vKjM7Zyh0KT8hQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGghPT1hfHx0Lmxlbmd0aCE9PWEmJih0Lmxlbmd0aD1hKTp0PW5ldyBBcnJheShhKTtmb3IobGV0IHI9MDtyPG87KytyKW4ucGFjayhlW3JdLHQsciozKTtyZXR1cm4gdH1zdGF0aWMgdW5wYWNrQXJyYXkoZSx0KXtsZXQgbz1lLmxlbmd0aDtnKHQpP3QubGVuZ3RoPW8vMzp0PW5ldyBBcnJheShvLzMpO2ZvcihsZXQgYT0wO2E8bzthKz0zKXtsZXQgcj1hLzM7dFtyXT1uLnVucGFjayhlLGEsdFtyXSl9cmV0dXJuIHR9c3RhdGljIG1heGltdW1Db21wb25lbnQoZSl7cmV0dXJuIE1hdGgubWF4KGUueCxlLnksZS56KX1zdGF0aWMgbWluaW11bUNvbXBvbmVudChlKXtyZXR1cm4gTWF0aC5taW4oZS54LGUueSxlLnopfXN0YXRpYyBtaW5pbXVtQnlDb21wb25lbnQoZSx0LG8pe3JldHVybiBvLng9TWF0aC5taW4oZS54LHQueCksby55PU1hdGgubWluKGUueSx0LnkpLG8uej1NYXRoLm1pbihlLnosdC56KSxvfXN0YXRpYyBtYXhpbXVtQnlDb21wb25lbnQoZSx0LG8pe3JldHVybiBvLng9TWF0aC5tYXgoZS54LHQueCksby55PU1hdGgubWF4KGUueSx0LnkpLG8uej1NYXRoLm1heChlLnosdC56KSxvfXN0YXRpYyBjbGFtcChlLHQsbyxhKXtsZXQgcj1rLmNsYW1wKGUueCx0Lngsby54KSxpPWsuY2xhbXAoZS55LHQueSxvLnkpLGY9ay5jbGFtcChlLnosdC56LG8ueik7cmV0dXJuIGEueD1yLGEueT1pLGEuej1mLGF9c3RhdGljIG1hZ25pdHVkZVNxdWFyZWQoZSl7cmV0dXJuIGUueCplLngrZS55KmUueStlLnoqZS56fXN0YXRpYyBtYWduaXR1ZGUoZSl7cmV0dXJuIE1hdGguc3FydChuLm1hZ25pdHVkZVNxdWFyZWQoZSkpfXN0YXRpYyBkaXN0YW5jZShlLHQpe3JldHVybiBuLnN1YnRyYWN0KGUsdCxubCksbi5tYWduaXR1ZGUobmwpfXN0YXRpYyBkaXN0YW5jZVNxdWFyZWQoZSx0KXtyZXR1cm4gbi5zdWJ0cmFjdChlLHQsbmwpLG4ubWFnbml0dWRlU3F1YXJlZChubCl9c3RhdGljIG5vcm1hbGl6ZShlLHQpe2xldCBvPW4ubWFnbml0dWRlKGUpO3JldHVybiB0Lng9ZS54L28sdC55PWUueS9vLHQuej1lLnovbyx0fXN0YXRpYyBkb3QoZSx0KXtyZXR1cm4gZS54KnQueCtlLnkqdC55K2Uueip0Lnp9c3RhdGljIG11bHRpcGx5Q29tcG9uZW50cyhlLHQsbyl7cmV0dXJuIG8ueD1lLngqdC54LG8ueT1lLnkqdC55LG8uej1lLnoqdC56LG99c3RhdGljIGRpdmlkZUNvbXBvbmVudHMoZSx0LG8pe3JldHVybiBvLng9ZS54L3QueCxvLnk9ZS55L3QueSxvLno9ZS56L3QueixvfXN0YXRpYyBhZGQoZSx0LG8pe3JldHVybiBvLng9ZS54K3QueCxvLnk9ZS55K3QueSxvLno9ZS56K3QueixvfXN0YXRpYyBzdWJ0cmFjdChlLHQsbyl7cmV0dXJuIG8ueD1lLngtdC54LG8ueT1lLnktdC55LG8uej1lLnotdC56LG99c3RhdGljIG11bHRpcGx5QnlTY2FsYXIoZSx0LG8pe3JldHVybiBvLng9ZS54KnQsby55PWUueSp0LG8uej1lLnoqdCxvfXN0YXRpYyBkaXZpZGVCeVNjYWxhcihlLHQsbyl7cmV0dXJuIG8ueD1lLngvdCxvLnk9ZS55L3Qsby56PWUuei90LG99c3RhdGljIG5lZ2F0ZShlLHQpe3JldHVybiB0Lng9LWUueCx0Lnk9LWUueSx0Lno9LWUueix0fXN0YXRpYyBhYnMoZSx0KXtyZXR1cm4gdC54PU1hdGguYWJzKGUueCksdC55PU1hdGguYWJzKGUueSksdC56PU1hdGguYWJzKGUueiksdH1zdGF0aWMgbGVycChlLHQsbyxhKXtyZXR1cm4gbi5tdWx0aXBseUJ5U2NhbGFyKHQsbyxJMSksYT1uLm11bHRpcGx5QnlTY2FsYXIoZSwxLW8sYSksbi5hZGQoSTEsYSxhKX1zdGF0aWMgYW5nbGVCZXR3ZWVuKGUsdCl7bi5ub3JtYWxpemUoZSxvbCksbi5ub3JtYWxpemUodCxxbSk7bGV0IG89bi5kb3Qob2wscW0pLGE9bi5tYWduaXR1ZGUobi5jcm9zcyhvbCxxbSxvbCkpO3JldHVybiBNYXRoLmF0YW4yKGEsbyl9c3RhdGljIG1vc3RPcnRob2dvbmFsQXhpcyhlLHQpe2xldCBvPW4ubm9ybWFsaXplKGUsb0MpO3JldHVybiBuLmFicyhvLG8pLG8ueDw9by55P28ueDw9by56P3Q9bi5jbG9uZShuLlVOSVRfWCx0KTp0PW4uY2xvbmUobi5VTklUX1osdCk6by55PD1vLno/dD1uLmNsb25lKG4uVU5JVF9ZLHQpOnQ9bi5jbG9uZShuLlVOSVRfWix0KSx0fXN0YXRpYyBwcm9qZWN0VmVjdG9yKGUsdCxvKXtsZXQgYT1uLmRvdChlLHQpL24uZG90KHQsdCk7cmV0dXJuIG4ubXVsdGlwbHlCeVNjYWxhcih0LGEsbyl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZS54PT09dC54JiZlLnk9PT10LnkmJmUuej09PXQuen1zdGF0aWMgZXF1YWxzQXJyYXkoZSx0LG8pe3JldHVybiBlLng9PT10W29dJiZlLnk9PT10W28rMV0mJmUuej09PXRbbysyXX1zdGF0aWMgZXF1YWxzRXBzaWxvbihlLHQsbyxhKXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmsuZXF1YWxzRXBzaWxvbihlLngsdC54LG8sYSkmJmsuZXF1YWxzRXBzaWxvbihlLnksdC55LG8sYSkmJmsuZXF1YWxzRXBzaWxvbihlLnosdC56LG8sYSl9c3RhdGljIGNyb3NzKGUsdCxvKXtsZXQgYT1lLngscj1lLnksaT1lLnosZj10LngsZD10LnksYz10LnosdT1yKmMtaSpkLGw9aSpmLWEqYyxtPWEqZC1yKmY7cmV0dXJuIG8ueD11LG8ueT1sLG8uej1tLG99c3RhdGljIG1pZHBvaW50KGUsdCxvKXtyZXR1cm4gby54PShlLngrdC54KSouNSxvLnk9KGUueSt0LnkpKi41LG8uej0oZS56K3QueikqLjUsb31zdGF0aWMgZnJvbURlZ3JlZXMoZSx0LG8sYSxyKXtyZXR1cm4gZT1rLnRvUmFkaWFucyhlKSx0PWsudG9SYWRpYW5zKHQpLG4uZnJvbVJhZGlhbnMoZSx0LG8sYSxyKX1zdGF0aWMgZnJvbVJhZGlhbnMoZSx0LG8sYSxyKXtvPW8/PzA7bGV0IGk9ZyhhKT9hLnJhZGlpU3F1YXJlZDpuLl9lbGxpcHNvaWRSYWRpaVNxdWFyZWQsZj1NYXRoLmNvcyh0KTttYS54PWYqTWF0aC5jb3MoZSksbWEueT1mKk1hdGguc2luKGUpLG1hLno9TWF0aC5zaW4odCksbWE9bi5ub3JtYWxpemUobWEsbWEpLG4ubXVsdGlwbHlDb21wb25lbnRzKGksbWEscWMpO2xldCBkPU1hdGguc3FydChuLmRvdChtYSxxYykpO3JldHVybiBxYz1uLmRpdmlkZUJ5U2NhbGFyKHFjLGQscWMpLG1hPW4ubXVsdGlwbHlCeVNjYWxhcihtYSxvLG1hKSxnKHIpfHwocj1uZXcgbiksbi5hZGQocWMsbWEscil9c3RhdGljIGZyb21EZWdyZWVzQXJyYXkoZSx0LG8pe2xldCBhPWUubGVuZ3RoO2cobyk/by5sZW5ndGg9YS8yOm89bmV3IEFycmF5KGEvMik7Zm9yKGxldCByPTA7cjxhO3IrPTIpe2xldCBpPWVbcl0sZj1lW3IrMV0sZD1yLzI7b1tkXT1uLmZyb21EZWdyZWVzKGksZiwwLHQsb1tkXSl9cmV0dXJuIG99c3RhdGljIGZyb21SYWRpYW5zQXJyYXkoZSx0LG8pe2xldCBhPWUubGVuZ3RoO2cobyk/by5sZW5ndGg9YS8yOm89bmV3IEFycmF5KGEvMik7Zm9yKGxldCByPTA7cjxhO3IrPTIpe2xldCBpPWVbcl0sZj1lW3IrMV0sZD1yLzI7b1tkXT1uLmZyb21SYWRpYW5zKGksZiwwLHQsb1tkXSl9cmV0dXJuIG99c3RhdGljIGZyb21EZWdyZWVzQXJyYXlIZWlnaHRzKGUsdCxvKXtsZXQgYT1lLmxlbmd0aDtnKG8pP28ubGVuZ3RoPWEvMzpvPW5ldyBBcnJheShhLzMpO2ZvcihsZXQgcj0wO3I8YTtyKz0zKXtsZXQgaT1lW3JdLGY9ZVtyKzFdLGQ9ZVtyKzJdLGM9ci8zO29bY109bi5mcm9tRGVncmVlcyhpLGYsZCx0LG9bY10pfXJldHVybiBvfXN0YXRpYyBmcm9tUmFkaWFuc0FycmF5SGVpZ2h0cyhlLHQsbyl7bGV0IGE9ZS5sZW5ndGg7ZyhvKT9vLmxlbmd0aD1hLzM6bz1uZXcgQXJyYXkoYS8zKTtmb3IobGV0IHI9MDtyPGE7cis9Myl7bGV0IGk9ZVtyXSxmPWVbcisxXSxkPWVbcisyXSxjPXIvMztvW2NdPW4uZnJvbVJhZGlhbnMoaSxmLGQsdCxvW2NdKX1yZXR1cm4gb31jbG9uZShlKXtyZXR1cm4gbi5jbG9uZSh0aGlzLGUpfWVxdWFscyhlKXtyZXR1cm4gbi5lcXVhbHModGhpcyxlKX1lcXVhbHNFcHNpbG9uKGUsdCxvKXtyZXR1cm4gbi5lcXVhbHNFcHNpbG9uKHRoaXMsZSx0LG8pfXRvU3RyaW5nKCl7cmV0dXJuYCgke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9KWB9fTtmbi5mcm9tQ2FydGVzaWFuND1mbi5jbG9uZTtmbi5wYWNrZWRMZW5ndGg9Mztmbi5mcm9tQXJyYXk9Zm4udW5wYWNrO25sPW5ldyBmbixJMT1uZXcgZm4sb2w9bmV3IGZuLHFtPW5ldyBmbixvQz1uZXcgZm4sbWE9bmV3IGZuLHFjPW5ldyBmbjtmbi5fZWxsaXBzb2lkUmFkaWlTcXVhcmVkPW5ldyBmbig2Mzc4MTM3KjYzNzgxMzcsNjM3ODEzNyo2Mzc4MTM3LDYzNTY3NTIzMTQyNDUxNzllLTkqNjM1Njc1MjMxNDI0NTE3OWUtOSk7Zm4uWkVSTz1PYmplY3QuZnJlZXplKG5ldyBmbigwLDAsMCkpO2ZuLk9ORT1PYmplY3QuZnJlZXplKG5ldyBmbigxLDEsMSkpO2ZuLlVOSVRfWD1PYmplY3QuZnJlZXplKG5ldyBmbigxLDAsMCkpO2ZuLlVOSVRfWT1PYmplY3QuZnJlZXplKG5ldyBmbigwLDEsMCkpO2ZuLlVOSVRfWj1PYmplY3QuZnJlZXplKG5ldyBmbigwLDAsMSkpO3M9Zm59KTtmdW5jdGlvbiBpQyhuLGUsdCxvLGEpe2xldCByPW4ueCxpPW4ueSxmPW4ueixkPWUueCxjPWUueSx1PWUueixsPXIqcipkKmQsbT1pKmkqYypjLGg9ZipmKnUqdSxiPWwrbStoLHA9TWF0aC5zcXJ0KDEvYikseT1zLm11bHRpcGx5QnlTY2FsYXIobixwLGFDKTtpZihiPG8pcmV0dXJuIGlzRmluaXRlKHApP3MuY2xvbmUoeSxhKTp2b2lkIDA7bGV0IFQ9dC54LF89dC55LHc9dC56LEU9ckM7RS54PXkueCpUKjIsRS55PXkueSpfKjIsRS56PXkueip3KjI7bGV0IFI9KDEtcCkqcy5tYWduaXR1ZGUobikvKC41KnMubWFnbml0dWRlKEUpKSxTPTAsQyxJLE0sUCxGLEEseCxOLHYsVSxMO2Rve1ItPVMsTT0xLygxK1IqVCksUD0xLygxK1IqXyksRj0xLygxK1IqdyksQT1NKk0seD1QKlAsTj1GKkYsdj1BKk0sVT14KlAsTD1OKkYsQz1sKkErbSp4K2gqTi0xLEk9bCp2KlQrbSpVKl8raCpMKnc7bGV0IEQ9LTIqSTtTPUMvRH13aGlsZShNYXRoLmFicyhDKT5rLkVQU0lMT04xMik7cmV0dXJuIGcoYSk/KGEueD1yKk0sYS55PWkqUCxhLno9ZipGLGEpOm5ldyBzKHIqTSxpKlAsZipGKX12YXIgYUMsckMsYWwsV209WCgoKT0+e01lKCk7ZmUoKTtqZSgpO2FDPW5ldyBzLHJDPW5ldyBzO2FsPWlDfSk7dmFyIHZvLHBmLGNDLHNDLGZDLGFlLGd0PVgoKCk9PntNZSgpO2ZlKCk7amUoKTtXbSgpO3ZvPWNsYXNzIHZve2NvbnN0cnVjdG9yKGUsdCxvKXt0aGlzLmxvbmdpdHVkZT1lPz8wLHRoaXMubGF0aXR1ZGU9dD8/MCx0aGlzLmhlaWdodD1vPz8wfXN0YXRpYyBmcm9tUmFkaWFucyhlLHQsbyxhKXtyZXR1cm4gbz1vPz8wLGcoYSk/KGEubG9uZ2l0dWRlPWUsYS5sYXRpdHVkZT10LGEuaGVpZ2h0PW8sYSk6bmV3IHZvKGUsdCxvKX1zdGF0aWMgZnJvbURlZ3JlZXMoZSx0LG8sYSl7cmV0dXJuIGU9ay50b1JhZGlhbnMoZSksdD1rLnRvUmFkaWFucyh0KSx2by5mcm9tUmFkaWFucyhlLHQsbyxhKX1zdGF0aWMgZnJvbUNhcnRlc2lhbihlLHQsbyl7bGV0IGE9Zyh0KT90Lm9uZU92ZXJSYWRpaTp2by5fZWxsaXBzb2lkT25lT3ZlclJhZGlpLHI9Zyh0KT90Lm9uZU92ZXJSYWRpaVNxdWFyZWQ6dm8uX2VsbGlwc29pZE9uZU92ZXJSYWRpaVNxdWFyZWQsaT1nKHQpP3QuX2NlbnRlclRvbGVyYW5jZVNxdWFyZWQ6dm8uX2VsbGlwc29pZENlbnRlclRvbGVyYW5jZVNxdWFyZWQsZj1hbChlLGEscixpLHNDKTtpZighZyhmKSlyZXR1cm47bGV0IGQ9cy5tdWx0aXBseUNvbXBvbmVudHMoZixyLGNDKTtkPXMubm9ybWFsaXplKGQsZCk7bGV0IGM9cy5zdWJ0cmFjdChlLGYsZkMpLHU9TWF0aC5hdGFuMihkLnksZC54KSxsPU1hdGguYXNpbihkLnopLG09ay5zaWduKHMuZG90KGMsZSkpKnMubWFnbml0dWRlKGMpO3JldHVybiBnKG8pPyhvLmxvbmdpdHVkZT11LG8ubGF0aXR1ZGU9bCxvLmhlaWdodD1tLG8pOm5ldyB2byh1LGwsbSl9c3RhdGljIHRvQ2FydGVzaWFuKGUsdCxvKXtyZXR1cm4gcy5mcm9tUmFkaWFucyhlLmxvbmdpdHVkZSxlLmxhdGl0dWRlLGUuaGVpZ2h0LHQsbyl9c3RhdGljIGNsb25lKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9ZS5sb25naXR1ZGUsdC5sYXRpdHVkZT1lLmxhdGl0dWRlLHQuaGVpZ2h0PWUuaGVpZ2h0LHQpOm5ldyB2byhlLmxvbmdpdHVkZSxlLmxhdGl0dWRlLGUuaGVpZ2h0KX1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIGU9PT10fHxnKGUpJiZnKHQpJiZlLmxvbmdpdHVkZT09PXQubG9uZ2l0dWRlJiZlLmxhdGl0dWRlPT09dC5sYXRpdHVkZSYmZS5oZWlnaHQ9PT10LmhlaWdodH1zdGF0aWMgZXF1YWxzRXBzaWxvbihlLHQsbyl7cmV0dXJuIG89bz8/MCxlPT09dHx8ZyhlKSYmZyh0KSYmTWF0aC5hYnMoZS5sb25naXR1ZGUtdC5sb25naXR1ZGUpPD1vJiZNYXRoLmFicyhlLmxhdGl0dWRlLXQubGF0aXR1ZGUpPD1vJiZNYXRoLmFicyhlLmhlaWdodC10LmhlaWdodCk8PW99Y2xvbmUoZSl7cmV0dXJuIHZvLmNsb25lKHRoaXMsZSl9ZXF1YWxzKGUpe3JldHVybiB2by5lcXVhbHModGhpcyxlKX1lcXVhbHNFcHNpbG9uKGUsdCl7cmV0dXJuIHZvLmVxdWFsc0Vwc2lsb24odGhpcyxlLHQpfXRvU3RyaW5nKCl7cmV0dXJuYCgke3RoaXMubG9uZ2l0dWRlfSwgJHt0aGlzLmxhdGl0dWRlfSwgJHt0aGlzLmhlaWdodH0pYH19O2VsKHZvLCJfZWxsaXBzb2lkT25lT3ZlclJhZGlpIixuZXcgcygxLzYzNzgxMzcsMS82Mzc4MTM3LDEvNjM1Njc1MjMxNDI0NTE3OWUtOSkpLGVsKHZvLCJfZWxsaXBzb2lkT25lT3ZlclJhZGlpU3F1YXJlZCIsbmV3IHMoMS8oNjM3ODEzNyo2Mzc4MTM3KSwxLyg2Mzc4MTM3KjYzNzgxMzcpLDEvKDYzNTY3NTIzMTQyNDUxNzllLTkqNjM1Njc1MjMxNDI0NTE3OWUtOSkpKSxlbCh2bywiX2VsbGlwc29pZENlbnRlclRvbGVyYW5jZVNxdWFyZWQiLGsuRVBTSUxPTjEpO3BmPXZvO3BmLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgcGYoMCwwLDApKTtjQz1uZXcgcyxzQz1uZXcgcyxmQz1uZXcgcyxhZT1wZn0pO3ZhciBObixybCxQMSxrMSx2MSxkQyxZLHZ0PVgoKCk9PntmZSgpO2plKCk7Tm49Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHQpe3RoaXMueD1lPz8wLHRoaXMueT10Pz8wfXN0YXRpYyBmcm9tRWxlbWVudHMoZSx0LG8pe3JldHVybiBnKG8pPyhvLng9ZSxvLnk9dCxvKTpuZXcgbihlLHQpfXN0YXRpYyBjbG9uZShlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQueD1lLngsdC55PWUueSx0KTpuZXcgbihlLngsZS55KX1zdGF0aWMgcGFjayhlLHQsbyl7cmV0dXJuIG89bz8/MCx0W28rK109ZS54LHRbb109ZS55LHR9c3RhdGljIHVucGFjayhlLHQsbyl7cmV0dXJuIHQ9dD8/MCxnKG8pfHwobz1uZXcgbiksby54PWVbdCsrXSxvLnk9ZVt0XSxvfXN0YXRpYyBwYWNrQXJyYXkoZSx0KXtsZXQgbz1lLmxlbmd0aCxhPW8qMjtnKHQpPyFBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aCE9PWF8fHQubGVuZ3RoIT09YSYmKHQubGVuZ3RoPWEpOnQ9bmV3IEFycmF5KGEpO2ZvcihsZXQgcj0wO3I8bzsrK3Ipbi5wYWNrKGVbcl0sdCxyKjIpO3JldHVybiB0fXN0YXRpYyB1bnBhY2tBcnJheShlLHQpe2xldCBvPWUubGVuZ3RoO2codCk/dC5sZW5ndGg9by8yOnQ9bmV3IEFycmF5KG8vMik7Zm9yKGxldCBhPTA7YTxvO2ErPTIpe2xldCByPWEvMjt0W3JdPW4udW5wYWNrKGUsYSx0W3JdKX1yZXR1cm4gdH1zdGF0aWMgbWF4aW11bUNvbXBvbmVudChlKXtyZXR1cm4gTWF0aC5tYXgoZS54LGUueSl9c3RhdGljIG1pbmltdW1Db21wb25lbnQoZSl7cmV0dXJuIE1hdGgubWluKGUueCxlLnkpfXN0YXRpYyBtaW5pbXVtQnlDb21wb25lbnQoZSx0LG8pe3JldHVybiBvLng9TWF0aC5taW4oZS54LHQueCksby55PU1hdGgubWluKGUueSx0LnkpLG99c3RhdGljIG1heGltdW1CeUNvbXBvbmVudChlLHQsbyl7cmV0dXJuIG8ueD1NYXRoLm1heChlLngsdC54KSxvLnk9TWF0aC5tYXgoZS55LHQueSksb31zdGF0aWMgY2xhbXAoZSx0LG8sYSl7bGV0IHI9ay5jbGFtcChlLngsdC54LG8ueCksaT1rLmNsYW1wKGUueSx0Lnksby55KTtyZXR1cm4gYS54PXIsYS55PWksYX1zdGF0aWMgbWFnbml0dWRlU3F1YXJlZChlKXtyZXR1cm4gZS54KmUueCtlLnkqZS55fXN0YXRpYyBtYWduaXR1ZGUoZSl7cmV0dXJuIE1hdGguc3FydChuLm1hZ25pdHVkZVNxdWFyZWQoZSkpfXN0YXRpYyBkaXN0YW5jZShlLHQpe3JldHVybiBuLnN1YnRyYWN0KGUsdCxybCksbi5tYWduaXR1ZGUocmwpfXN0YXRpYyBkaXN0YW5jZVNxdWFyZWQoZSx0KXtyZXR1cm4gbi5zdWJ0cmFjdChlLHQscmwpLG4ubWFnbml0dWRlU3F1YXJlZChybCl9c3RhdGljIG5vcm1hbGl6ZShlLHQpe2xldCBvPW4ubWFnbml0dWRlKGUpO3JldHVybiB0Lng9ZS54L28sdC55PWUueS9vLHR9c3RhdGljIGRvdChlLHQpe3JldHVybiBlLngqdC54K2UueSp0Lnl9c3RhdGljIGNyb3NzKGUsdCl7cmV0dXJuIGUueCp0LnktZS55KnQueH1zdGF0aWMgbXVsdGlwbHlDb21wb25lbnRzKGUsdCxvKXtyZXR1cm4gby54PWUueCp0Lngsby55PWUueSp0Lnksb31zdGF0aWMgZGl2aWRlQ29tcG9uZW50cyhlLHQsbyl7cmV0dXJuIG8ueD1lLngvdC54LG8ueT1lLnkvdC55LG99c3RhdGljIGFkZChlLHQsbyl7cmV0dXJuIG8ueD1lLngrdC54LG8ueT1lLnkrdC55LG99c3RhdGljIHN1YnRyYWN0KGUsdCxvKXtyZXR1cm4gby54PWUueC10Lngsby55PWUueS10Lnksb31zdGF0aWMgbXVsdGlwbHlCeVNjYWxhcihlLHQsbyl7cmV0dXJuIG8ueD1lLngqdCxvLnk9ZS55KnQsb31zdGF0aWMgZGl2aWRlQnlTY2FsYXIoZSx0LG8pe3JldHVybiBvLng9ZS54L3Qsby55PWUueS90LG99c3RhdGljIG5lZ2F0ZShlLHQpe3JldHVybiB0Lng9LWUueCx0Lnk9LWUueSx0fXN0YXRpYyBhYnMoZSx0KXtyZXR1cm4gdC54PU1hdGguYWJzKGUueCksdC55PU1hdGguYWJzKGUueSksdH1zdGF0aWMgbGVycChlLHQsbyxhKXtyZXR1cm4gbi5tdWx0aXBseUJ5U2NhbGFyKHQsbyxQMSksYT1uLm11bHRpcGx5QnlTY2FsYXIoZSwxLW8sYSksbi5hZGQoUDEsYSxhKX1zdGF0aWMgYW5nbGVCZXR3ZWVuKGUsdCl7cmV0dXJuIG4ubm9ybWFsaXplKGUsazEpLG4ubm9ybWFsaXplKHQsdjEpLGsuYWNvc0NsYW1wZWQobi5kb3QoazEsdjEpKX1zdGF0aWMgbW9zdE9ydGhvZ29uYWxBeGlzKGUsdCl7bGV0IG89bi5ub3JtYWxpemUoZSxkQyk7cmV0dXJuIG4uYWJzKG8sbyksby54PD1vLnk/dD1uLmNsb25lKG4uVU5JVF9YLHQpOnQ9bi5jbG9uZShuLlVOSVRfWSx0KSx0fXN0YXRpYyBlcXVhbHMoZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmUueD09PXQueCYmZS55PT09dC55fXN0YXRpYyBlcXVhbHNBcnJheShlLHQsbyl7cmV0dXJuIGUueD09PXRbb10mJmUueT09PXRbbysxXX1zdGF0aWMgZXF1YWxzRXBzaWxvbihlLHQsbyxhKXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmsuZXF1YWxzRXBzaWxvbihlLngsdC54LG8sYSkmJmsuZXF1YWxzRXBzaWxvbihlLnksdC55LG8sYSl9Y2xvbmUoZSl7cmV0dXJuIG4uY2xvbmUodGhpcyxlKX1lcXVhbHMoZSl7cmV0dXJuIG4uZXF1YWxzKHRoaXMsZSl9ZXF1YWxzRXBzaWxvbihlLHQsbyl7cmV0dXJuIG4uZXF1YWxzRXBzaWxvbih0aGlzLGUsdCxvKX10b1N0cmluZygpe3JldHVybmAoJHt0aGlzLnh9LCAke3RoaXMueX0pYH19O05uLmZyb21DYXJ0ZXNpYW4zPU5uLmNsb25lO05uLmZyb21DYXJ0ZXNpYW40PU5uLmNsb25lO05uLnBhY2tlZExlbmd0aD0yO05uLmZyb21BcnJheT1Obi51bnBhY2s7cmw9bmV3IE5uLFAxPW5ldyBObixrMT1uZXcgTm4sdjE9bmV3IE5uLGRDPW5ldyBObjtObi5aRVJPPU9iamVjdC5mcmVlemUobmV3IE5uKDAsMCkpO05uLk9ORT1PYmplY3QuZnJlZXplKG5ldyBObigxLDEpKTtObi5VTklUX1g9T2JqZWN0LmZyZWV6ZShuZXcgTm4oMSwwKSk7Tm4uVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IE5uKDAsMSkpO1k9Tm59KTtmdW5jdGlvbiBGMShuLGUsdCxvKXtlPWU/PzAsdD10Pz8wLG89bz8/MCxuLl9yYWRpaT1uZXcgcyhlLHQsbyksbi5fcmFkaWlTcXVhcmVkPW5ldyBzKGUqZSx0KnQsbypvKSxuLl9yYWRpaVRvVGhlRm91cnRoPW5ldyBzKGUqZSplKmUsdCp0KnQqdCxvKm8qbypvKSxuLl9vbmVPdmVyUmFkaWk9bmV3IHMoZT09PTA/MDoxL2UsdD09PTA/MDoxL3Qsbz09PTA/MDoxL28pLG4uX29uZU92ZXJSYWRpaVNxdWFyZWQ9bmV3IHMoZT09PTA/MDoxLyhlKmUpLHQ9PT0wPzA6MS8odCp0KSxvPT09MD8wOjEvKG8qbykpLG4uX21pbmltdW1SYWRpdXM9TWF0aC5taW4oZSx0LG8pLG4uX21heGltdW1SYWRpdXM9TWF0aC5tYXgoZSx0LG8pLG4uX2NlbnRlclRvbGVyYW5jZVNxdWFyZWQ9ay5FUFNJTE9OMSxuLl9yYWRpaVNxdWFyZWQueiE9PTAmJihuLl9zcXVhcmVkWE92ZXJTcXVhcmVkWj1uLl9yYWRpaVNxdWFyZWQueC9uLl9yYWRpaVNxdWFyZWQueil9ZnVuY3Rpb24gRDEobixlLHQpe2xldCBvPS41KihlK24pLGE9LjUqKGUtbikscj0wO2ZvcihsZXQgaT0wO2k8NTtpKyspe2xldCBmPWEqZ0NbaV07cis9X0NbaV0qKHQobytmKSt0KG8tZikpfXJldHVybiByKj1hLHJ9dmFyIEZvLHVDLGxDLGhDLG1DLGJDLHBDLGdDLF9DLEssVmU9WCgoKT0+e3Z0KCk7TWUoKTtndCgpO2ZlKCk7amUoKTtXbSgpO0ZvPWNsYXNzIG57Y29uc3RydWN0b3IoZSx0LG8pe3RoaXMuX3JhZGlpPXZvaWQgMCx0aGlzLl9yYWRpaVNxdWFyZWQ9dm9pZCAwLHRoaXMuX3JhZGlpVG9UaGVGb3VydGg9dm9pZCAwLHRoaXMuX29uZU92ZXJSYWRpaT12b2lkIDAsdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZD12b2lkIDAsdGhpcy5fbWluaW11bVJhZGl1cz12b2lkIDAsdGhpcy5fbWF4aW11bVJhZGl1cz12b2lkIDAsdGhpcy5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZD12b2lkIDAsdGhpcy5fc3F1YXJlZFhPdmVyU3F1YXJlZFo9dm9pZCAwLEYxKHRoaXMsZSx0LG8pfWdldCByYWRpaSgpe3JldHVybiB0aGlzLl9yYWRpaX1nZXQgcmFkaWlTcXVhcmVkKCl7cmV0dXJuIHRoaXMuX3JhZGlpU3F1YXJlZH1nZXQgcmFkaWlUb1RoZUZvdXJ0aCgpe3JldHVybiB0aGlzLl9yYWRpaVRvVGhlRm91cnRofWdldCBvbmVPdmVyUmFkaWkoKXtyZXR1cm4gdGhpcy5fb25lT3ZlclJhZGlpfWdldCBvbmVPdmVyUmFkaWlTcXVhcmVkKCl7cmV0dXJuIHRoaXMuX29uZU92ZXJSYWRpaVNxdWFyZWR9Z2V0IG1pbmltdW1SYWRpdXMoKXtyZXR1cm4gdGhpcy5fbWluaW11bVJhZGl1c31nZXQgbWF4aW11bVJhZGl1cygpe3JldHVybiB0aGlzLl9tYXhpbXVtUmFkaXVzfXN0YXRpYyBjbG9uZShlLHQpe2lmKCFnKGUpKXJldHVybjtsZXQgbz1lLl9yYWRpaTtyZXR1cm4gZyh0KT8ocy5jbG9uZShvLHQuX3JhZGlpKSxzLmNsb25lKGUuX3JhZGlpU3F1YXJlZCx0Ll9yYWRpaVNxdWFyZWQpLHMuY2xvbmUoZS5fcmFkaWlUb1RoZUZvdXJ0aCx0Ll9yYWRpaVRvVGhlRm91cnRoKSxzLmNsb25lKGUuX29uZU92ZXJSYWRpaSx0Ll9vbmVPdmVyUmFkaWkpLHMuY2xvbmUoZS5fb25lT3ZlclJhZGlpU3F1YXJlZCx0Ll9vbmVPdmVyUmFkaWlTcXVhcmVkKSx0Ll9taW5pbXVtUmFkaXVzPWUuX21pbmltdW1SYWRpdXMsdC5fbWF4aW11bVJhZGl1cz1lLl9tYXhpbXVtUmFkaXVzLHQuX2NlbnRlclRvbGVyYW5jZVNxdWFyZWQ9ZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZCx0KTpuZXcgbihvLngsby55LG8ueil9c3RhdGljIGZyb21DYXJ0ZXNpYW4zKGUsdCl7cmV0dXJuIGcodCl8fCh0PW5ldyBuKSxnKGUpJiZGMSh0LGUueCxlLnksZS56KSx0fXN0YXRpYyBnZXQgZGVmYXVsdCgpe3JldHVybiBuLl9kZWZhdWx0fXN0YXRpYyBzZXQgZGVmYXVsdChlKXtuLl9kZWZhdWx0PWUscy5fZWxsaXBzb2lkUmFkaWlTcXVhcmVkPWUucmFkaWlTcXVhcmVkLGFlLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWk9ZS5vbmVPdmVyUmFkaWksYWUuX2VsbGlwc29pZE9uZU92ZXJSYWRpaVNxdWFyZWQ9ZS5vbmVPdmVyUmFkaWlTcXVhcmVkLGFlLl9lbGxpcHNvaWRDZW50ZXJUb2xlcmFuY2VTcXVhcmVkPWUuX2NlbnRlclRvbGVyYW5jZVNxdWFyZWR9Y2xvbmUoZSl7cmV0dXJuIG4uY2xvbmUodGhpcyxlKX1zdGF0aWMgcGFjayhlLHQsbyl7cmV0dXJuIG89bz8/MCxzLnBhY2soZS5fcmFkaWksdCxvKSx0fXN0YXRpYyB1bnBhY2soZSx0LG8pe3Q9dD8/MDtsZXQgYT1zLnVucGFjayhlLHQpO3JldHVybiBuLmZyb21DYXJ0ZXNpYW4zKGEsbyl9Z2VvZGV0aWNTdXJmYWNlTm9ybWFsQ2FydG9ncmFwaGljKGUsdCl7bGV0IG89ZS5sb25naXR1ZGUsYT1lLmxhdGl0dWRlLHI9TWF0aC5jb3MoYSksaT1yKk1hdGguY29zKG8pLGY9cipNYXRoLnNpbihvKSxkPU1hdGguc2luKGEpO3JldHVybiBnKHQpfHwodD1uZXcgcyksdC54PWksdC55PWYsdC56PWQscy5ub3JtYWxpemUodCx0KX1nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSx0KXtpZighcy5lcXVhbHNFcHNpbG9uKGUscy5aRVJPLGsuRVBTSUxPTjE0KSlyZXR1cm4gZyh0KXx8KHQ9bmV3IHMpLHQ9cy5tdWx0aXBseUNvbXBvbmVudHMoZSx0aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkLHQpLHMubm9ybWFsaXplKHQsdCl9Y2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZSx0KXtsZXQgbz11QyxhPWxDO3RoaXMuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsQ2FydG9ncmFwaGljKGUsbykscy5tdWx0aXBseUNvbXBvbmVudHModGhpcy5fcmFkaWlTcXVhcmVkLG8sYSk7bGV0IHI9TWF0aC5zcXJ0KHMuZG90KG8sYSkpO3JldHVybiBzLmRpdmlkZUJ5U2NhbGFyKGEscixhKSxzLm11bHRpcGx5QnlTY2FsYXIobyxlLmhlaWdodCxvKSxnKHQpfHwodD1uZXcgcykscy5hZGQoYSxvLHQpfWNhcnRvZ3JhcGhpY0FycmF5VG9DYXJ0ZXNpYW5BcnJheShlLHQpe2xldCBvPWUubGVuZ3RoO2codCk/dC5sZW5ndGg9bzp0PW5ldyBBcnJheShvKTtmb3IobGV0IGE9MDthPG87YSsrKXRbYV09dGhpcy5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihlW2FdLHRbYV0pO3JldHVybiB0fWNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsdCl7bGV0IG89dGhpcy5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGUsbUMpO2lmKCFnKG8pKXJldHVybjtsZXQgYT10aGlzLmdlb2RldGljU3VyZmFjZU5vcm1hbChvLGhDKSxyPXMuc3VidHJhY3QoZSxvLGJDKSxpPU1hdGguYXRhbjIoYS55LGEueCksZj1NYXRoLmFzaW4oYS56KSxkPWsuc2lnbihzLmRvdChyLGUpKSpzLm1hZ25pdHVkZShyKTtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9aSx0LmxhdGl0dWRlPWYsdC5oZWlnaHQ9ZCx0KTpuZXcgYWUoaSxmLGQpfWNhcnRlc2lhbkFycmF5VG9DYXJ0b2dyYXBoaWNBcnJheShlLHQpe2xldCBvPWUubGVuZ3RoO2codCk/dC5sZW5ndGg9bzp0PW5ldyBBcnJheShvKTtmb3IobGV0IGE9MDthPG87KythKXRbYV09dGhpcy5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlW2FdLHRbYV0pO3JldHVybiB0fXNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZSx0KXtyZXR1cm4gYWwoZSx0aGlzLl9vbmVPdmVyUmFkaWksdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkLHQpfXNjYWxlVG9HZW9jZW50cmljU3VyZmFjZShlLHQpe2codCl8fCh0PW5ldyBzKTtsZXQgbz1lLngsYT1lLnkscj1lLnosaT10aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkLGY9MS9NYXRoLnNxcnQobypvKmkueCthKmEqaS55K3IqcippLnopO3JldHVybiBzLm11bHRpcGx5QnlTY2FsYXIoZSxmLHQpfXRyYW5zZm9ybVBvc2l0aW9uVG9TY2FsZWRTcGFjZShlLHQpe3JldHVybiBnKHQpfHwodD1uZXcgcykscy5tdWx0aXBseUNvbXBvbmVudHMoZSx0aGlzLl9vbmVPdmVyUmFkaWksdCl9dHJhbnNmb3JtUG9zaXRpb25Gcm9tU2NhbGVkU3BhY2UoZSx0KXtyZXR1cm4gZyh0KXx8KHQ9bmV3IHMpLHMubXVsdGlwbHlDb21wb25lbnRzKGUsdGhpcy5fcmFkaWksdCl9ZXF1YWxzKGUpe3JldHVybiB0aGlzPT09ZXx8ZyhlKSYmcy5lcXVhbHModGhpcy5fcmFkaWksZS5fcmFkaWkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3JhZGlpLnRvU3RyaW5nKCl9Z2V0U3VyZmFjZU5vcm1hbEludGVyc2VjdGlvbldpdGhaQXhpcyhlLHQsbyl7dD10Pz8wO2xldCBhPXRoaXMuX3NxdWFyZWRYT3ZlclNxdWFyZWRaO2lmKGcobyl8fChvPW5ldyBzKSxvLng9MCxvLnk9MCxvLno9ZS56KigxLWEpLCEoTWF0aC5hYnMoby56KT49dGhpcy5fcmFkaWkuei10KSlyZXR1cm4gb31nZXRMb2NhbEN1cnZhdHVyZShlLHQpe2codCl8fCh0PW5ldyBZKTtsZXQgbz10aGlzLmdldFN1cmZhY2VOb3JtYWxJbnRlcnNlY3Rpb25XaXRoWkF4aXMoZSwwLHBDKSxhPXMuZGlzdGFuY2UoZSxvKSxyPXRoaXMubWluaW11bVJhZGl1cyphL3RoaXMubWF4aW11bVJhZGl1cyoqMixpPWEqcioqMjtyZXR1cm4gWS5mcm9tRWxlbWVudHMoMS9hLDEvaSx0KX1zdXJmYWNlQXJlYShlKXtsZXQgdD1lLndlc3Qsbz1lLmVhc3QsYT1lLnNvdXRoLHI9ZS5ub3J0aDtmb3IoO288dDspbys9ay5UV09fUEk7bGV0IGk9dGhpcy5fcmFkaWlTcXVhcmVkLGY9aS54LGQ9aS55LGM9aS56LHU9ZipkO3JldHVybiBEMShhLHIsZnVuY3Rpb24obCl7bGV0IG09TWF0aC5jb3MobCksaD1NYXRoLnNpbihsKTtyZXR1cm4gTWF0aC5jb3MobCkqRDEodCxvLGZ1bmN0aW9uKGIpe2xldCBwPU1hdGguY29zKGIpLHk9TWF0aC5zaW4oYik7cmV0dXJuIE1hdGguc3FydCh1KmgqaCtjKihkKnAqcCtmKnkqeSkqbSptKX0pfSl9fTtGby5XR1M4ND1PYmplY3QuZnJlZXplKG5ldyBGbyg2Mzc4MTM3LDYzNzgxMzcsNjM1Njc1MjMxNDI0NTE3OWUtOSkpO0ZvLlVOSVRfU1BIRVJFPU9iamVjdC5mcmVlemUobmV3IEZvKDEsMSwxKSk7Rm8uTU9PTj1PYmplY3QuZnJlZXplKG5ldyBGbyhrLkxVTkFSX1JBRElVUyxrLkxVTkFSX1JBRElVUyxrLkxVTkFSX1JBRElVUykpO0ZvLk1BUlM9T2JqZWN0LmZyZWV6ZShuZXcgRm8oMzM5NjE5MCwzMzk2MTkwLDMzNzYyMDApKTtGby5fZGVmYXVsdD1Gby5XR1M4NDtGby5wYWNrZWRMZW5ndGg9cy5wYWNrZWRMZW5ndGg7Rm8ucHJvdG90eXBlLmdlb2NlbnRyaWNTdXJmYWNlTm9ybWFsPXMubm9ybWFsaXplO3VDPW5ldyBzLGxDPW5ldyBzLGhDPW5ldyBzLG1DPW5ldyBzLGJDPW5ldyBzLHBDPW5ldyBzLGdDPVsuMTQ4ODc0MzM4OTgxNjMsLjQzMzM5NTM5NDEyOTI1LC42Nzk0MDk1NjgyOTkwMiwuODY1MDYzMzY2Njg4OTgsLjk3MzkwNjUyODUxNzE3LDBdLF9DPVsuMjk1NTI0MjI0NzE0NzUsLjI2OTI2NjcxOTMwOTk5LC4yMTkwODYzNjI1MTU5OCwuMTQ5NDUxMzQ5MTUwNTgsLjA2NjY3MTM0NDMwODY4NCwwXTtLPUZvfSk7dmFyIFhtLG5vLFByPVgoKCk9PntNZSgpO2d0KCk7ZmUoKTtWZSgpO1htPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuX2VsbGlwc29pZD1lPz9LLmRlZmF1bHQsdGhpcy5fc2VtaW1ham9yQXhpcz10aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcz0xL3RoaXMuX3NlbWltYWpvckF4aXN9Z2V0IGVsbGlwc29pZCgpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9cHJvamVjdChlLHQpe2xldCBvPXRoaXMuX3NlbWltYWpvckF4aXMsYT1lLmxvbmdpdHVkZSpvLHI9ZS5sYXRpdHVkZSpvLGk9ZS5oZWlnaHQ7cmV0dXJuIGcodCk/KHQueD1hLHQueT1yLHQuej1pLHQpOm5ldyBzKGEscixpKX11bnByb2plY3QoZSx0KXtsZXQgbz10aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcyxhPWUueCpvLHI9ZS55Km8saT1lLno7cmV0dXJuIGcodCk/KHQubG9uZ2l0dWRlPWEsdC5sYXRpdHVkZT1yLHQuaGVpZ2h0PWksdCk6bmV3IGFlKGEscixpKX19LG5vPVhtfSk7dmFyIEIxLFRuLFppPVgoKCk9PntCMT17T1VUU0lERTotMSxJTlRFUlNFQ1RJTkc6MCxJTlNJREU6MX07T2JqZWN0LmZyZWV6ZShCMSk7VG49QjF9KTtmdW5jdGlvbiB5QyhuLGUpe3RoaXMuc3RhcnQ9bj8/MCx0aGlzLnN0b3A9ZT8/MH12YXIgX28sZ2Y9WCgoKT0+e19vPXlDfSk7ZnVuY3Rpb24geEMobil7bGV0IGU9MDtmb3IobGV0IHQ9MDt0PDk7Kyt0KXtsZXQgbz1uW3RdO2UrPW8qb31yZXR1cm4gTWF0aC5zcXJ0KGUpfWZ1bmN0aW9uIE9DKG4pe2xldCBlPTA7Zm9yKGxldCB0PTA7dDwzOysrdCl7bGV0IG89bltCdC5nZXRFbGVtZW50SW5kZXgoWm1bdF0sSm1bdF0pXTtlKz0yKm8qb31yZXR1cm4gTWF0aC5zcXJ0KGUpfWZ1bmN0aW9uIFNDKG4sZSl7bGV0IHQ9ay5FUFNJTE9OMTUsbz0wLGE9MTtmb3IobGV0IGM9MDtjPDM7KytjKXtsZXQgdT1NYXRoLmFicyhuW0J0LmdldEVsZW1lbnRJbmRleChabVtjXSxKbVtjXSldKTt1Pm8mJihhPWMsbz11KX1sZXQgcj0xLGk9MCxmPUptW2FdLGQ9Wm1bYV07aWYoTWF0aC5hYnMobltCdC5nZXRFbGVtZW50SW5kZXgoZCxmKV0pPnQpe2xldCBjPW5bQnQuZ2V0RWxlbWVudEluZGV4KGQsZCldLHU9bltCdC5nZXRFbGVtZW50SW5kZXgoZixmKV0sbD1uW0J0LmdldEVsZW1lbnRJbmRleChkLGYpXSxtPShjLXUpLzIvbCxoO208MD9oPS0xLygtbStNYXRoLnNxcnQoMSttKm0pKTpoPTEvKG0rTWF0aC5zcXJ0KDErbSptKSkscj0xL01hdGguc3FydCgxK2gqaCksaT1oKnJ9cmV0dXJuIGU9QnQuY2xvbmUoQnQuSURFTlRJVFksZSksZVtCdC5nZXRFbGVtZW50SW5kZXgoZixmKV09ZVtCdC5nZXRFbGVtZW50SW5kZXgoZCxkKV09cixlW0J0LmdldEVsZW1lbnRJbmRleChkLGYpXT1pLGVbQnQuZ2V0RWxlbWVudEluZGV4KGYsZCldPS1pLGV9dmFyIEJ0LEFDLHdDLFltLFUxLFRDLEVDLGlsLGoxLFJDLEptLFptLFosSW49WCgoKT0+e01lKCk7ZmUoKTtqZSgpO0J0PWNsYXNzIG57Y29uc3RydWN0b3IoZSx0LG8sYSxyLGksZixkLGMpe3RoaXNbMF09ZT8/MCx0aGlzWzFdPWE/PzAsdGhpc1syXT1mPz8wLHRoaXNbM109dD8/MCx0aGlzWzRdPXI/PzAsdGhpc1s1XT1kPz8wLHRoaXNbNl09bz8/MCx0aGlzWzddPWk/PzAsdGhpc1s4XT1jPz8wfXN0YXRpYyBwYWNrKGUsdCxvKXtyZXR1cm4gbz1vPz8wLHRbbysrXT1lWzBdLHRbbysrXT1lWzFdLHRbbysrXT1lWzJdLHRbbysrXT1lWzNdLHRbbysrXT1lWzRdLHRbbysrXT1lWzVdLHRbbysrXT1lWzZdLHRbbysrXT1lWzddLHRbb109ZVs4XSx0fXN0YXRpYyB1bnBhY2soZSx0LG8pe3JldHVybiB0PXQ/PzAsZyhvKXx8KG89bmV3IG4pLG9bMF09ZVt0KytdLG9bMV09ZVt0KytdLG9bMl09ZVt0KytdLG9bM109ZVt0KytdLG9bNF09ZVt0KytdLG9bNV09ZVt0KytdLG9bNl09ZVt0KytdLG9bN109ZVt0KytdLG9bOF09ZVt0XSxvfXN0YXRpYyBwYWNrQXJyYXkoZSx0KXtsZXQgbz1lLmxlbmd0aCxhPW8qOTtnKHQpPyFBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aCE9PWF8fHQubGVuZ3RoIT09YSYmKHQubGVuZ3RoPWEpOnQ9bmV3IEFycmF5KGEpO2ZvcihsZXQgcj0wO3I8bzsrK3Ipbi5wYWNrKGVbcl0sdCxyKjkpO3JldHVybiB0fXN0YXRpYyB1bnBhY2tBcnJheShlLHQpe2xldCBvPWUubGVuZ3RoO2codCk/dC5sZW5ndGg9by85OnQ9bmV3IEFycmF5KG8vOSk7Zm9yKGxldCBhPTA7YTxvO2ErPTkpe2xldCByPWEvOTt0W3JdPW4udW5wYWNrKGUsYSx0W3JdKX1yZXR1cm4gdH1zdGF0aWMgY2xvbmUoZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbOF09ZVs4XSx0KTpuZXcgbihlWzBdLGVbM10sZVs2XSxlWzFdLGVbNF0sZVs3XSxlWzJdLGVbNV0sZVs4XSl9c3RhdGljIGZyb21Db2x1bW5NYWpvckFycmF5KGUsdCl7cmV0dXJuIG4uY2xvbmUoZSx0KX1zdGF0aWMgZnJvbVJvd01ham9yQXJyYXkoZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdCk6bmV3IG4oZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSxlWzddLGVbOF0pfXN0YXRpYyBmcm9tUXVhdGVybmlvbihlLHQpe2xldCBvPWUueCplLngsYT1lLngqZS55LHI9ZS54KmUueixpPWUueCplLncsZj1lLnkqZS55LGQ9ZS55KmUueixjPWUueSplLncsdT1lLnoqZS56LGw9ZS56KmUudyxtPWUudyplLncsaD1vLWYtdSttLGI9MiooYS1sKSxwPTIqKHIrYykseT0yKihhK2wpLFQ9LW8rZi11K20sXz0yKihkLWkpLHc9Miooci1jKSxFPTIqKGQraSksUj0tby1mK3UrbTtyZXR1cm4gZyh0KT8odFswXT1oLHRbMV09eSx0WzJdPXcsdFszXT1iLHRbNF09VCx0WzVdPUUsdFs2XT1wLHRbN109Xyx0WzhdPVIsdCk6bmV3IG4oaCxiLHAseSxULF8sdyxFLFIpfXN0YXRpYyBmcm9tSGVhZGluZ1BpdGNoUm9sbChlLHQpe2xldCBvPU1hdGguY29zKC1lLnBpdGNoKSxhPU1hdGguY29zKC1lLmhlYWRpbmcpLHI9TWF0aC5jb3MoZS5yb2xsKSxpPU1hdGguc2luKC1lLnBpdGNoKSxmPU1hdGguc2luKC1lLmhlYWRpbmcpLGQ9TWF0aC5zaW4oZS5yb2xsKSxjPW8qYSx1PS1yKmYrZCppKmEsbD1kKmYrcippKmEsbT1vKmYsaD1yKmErZCppKmYsYj0tZCphK3IqaSpmLHA9LWkseT1kKm8sVD1yKm87cmV0dXJuIGcodCk/KHRbMF09Yyx0WzFdPW0sdFsyXT1wLHRbM109dSx0WzRdPWgsdFs1XT15LHRbNl09bCx0WzddPWIsdFs4XT1ULHQpOm5ldyBuKGMsdSxsLG0saCxiLHAseSxUKX1zdGF0aWMgZnJvbVNjYWxlKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZS54LHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09ZS55LHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09ZS56LHQpOm5ldyBuKGUueCwwLDAsMCxlLnksMCwwLDAsZS56KX1zdGF0aWMgZnJvbVVuaWZvcm1TY2FsZShlLHQpe3JldHVybiBnKHQpPyh0WzBdPWUsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT1lLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09ZSx0KTpuZXcgbihlLDAsMCwwLGUsMCwwLDAsZSl9c3RhdGljIGZyb21Dcm9zc1Byb2R1Y3QoZSx0KXtyZXR1cm4gZyh0KT8odFswXT0wLHRbMV09ZS56LHRbMl09LWUueSx0WzNdPS1lLnosdFs0XT0wLHRbNV09ZS54LHRbNl09ZS55LHRbN109LWUueCx0WzhdPTAsdCk6bmV3IG4oMCwtZS56LGUueSxlLnosMCwtZS54LC1lLnksZS54LDApfXN0YXRpYyBmcm9tUm90YXRpb25YKGUsdCl7bGV0IG89TWF0aC5jb3MoZSksYT1NYXRoLnNpbihlKTtyZXR1cm4gZyh0KT8odFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09byx0WzVdPWEsdFs2XT0wLHRbN109LWEsdFs4XT1vLHQpOm5ldyBuKDEsMCwwLDAsbywtYSwwLGEsbyl9c3RhdGljIGZyb21Sb3RhdGlvblkoZSx0KXtsZXQgbz1NYXRoLmNvcyhlKSxhPU1hdGguc2luKGUpO3JldHVybiBnKHQpPyh0WzBdPW8sdFsxXT0wLHRbMl09LWEsdFszXT0wLHRbNF09MSx0WzVdPTAsdFs2XT1hLHRbN109MCx0WzhdPW8sdCk6bmV3IG4obywwLGEsMCwxLDAsLWEsMCxvKX1zdGF0aWMgZnJvbVJvdGF0aW9uWihlLHQpe2xldCBvPU1hdGguY29zKGUpLGE9TWF0aC5zaW4oZSk7cmV0dXJuIGcodCk/KHRbMF09byx0WzFdPWEsdFsyXT0wLHRbM109LWEsdFs0XT1vLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0KTpuZXcgbihvLC1hLDAsYSxvLDAsMCwwLDEpfXN0YXRpYyB0b0FycmF5KGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHQpOltlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0sZVs1XSxlWzZdLGVbN10sZVs4XV19c3RhdGljIGdldEVsZW1lbnRJbmRleChlLHQpe3JldHVybiBlKjMrdH1zdGF0aWMgZ2V0Q29sdW1uKGUsdCxvKXtsZXQgYT10KjMscj1lW2FdLGk9ZVthKzFdLGY9ZVthKzJdO3JldHVybiBvLng9cixvLnk9aSxvLno9ZixvfXN0YXRpYyBzZXRDb2x1bW4oZSx0LG8sYSl7YT1uLmNsb25lKGUsYSk7bGV0IHI9dCozO3JldHVybiBhW3JdPW8ueCxhW3IrMV09by55LGFbcisyXT1vLnosYX1zdGF0aWMgZ2V0Um93KGUsdCxvKXtsZXQgYT1lW3RdLHI9ZVt0KzNdLGk9ZVt0KzZdO3JldHVybiBvLng9YSxvLnk9cixvLno9aSxvfXN0YXRpYyBzZXRSb3coZSx0LG8sYSl7cmV0dXJuIGE9bi5jbG9uZShlLGEpLGFbdF09by54LGFbdCszXT1vLnksYVt0KzZdPW8ueixhfXN0YXRpYyBzZXRTY2FsZShlLHQsbyl7bGV0IGE9bi5nZXRTY2FsZShlLEFDKSxyPXQueC9hLngsaT10LnkvYS55LGY9dC56L2EuejtyZXR1cm4gb1swXT1lWzBdKnIsb1sxXT1lWzFdKnIsb1syXT1lWzJdKnIsb1szXT1lWzNdKmksb1s0XT1lWzRdKmksb1s1XT1lWzVdKmksb1s2XT1lWzZdKmYsb1s3XT1lWzddKmYsb1s4XT1lWzhdKmYsb31zdGF0aWMgc2V0VW5pZm9ybVNjYWxlKGUsdCxvKXtsZXQgYT1uLmdldFNjYWxlKGUsd0MpLHI9dC9hLngsaT10L2EueSxmPXQvYS56O3JldHVybiBvWzBdPWVbMF0qcixvWzFdPWVbMV0qcixvWzJdPWVbMl0qcixvWzNdPWVbM10qaSxvWzRdPWVbNF0qaSxvWzVdPWVbNV0qaSxvWzZdPWVbNl0qZixvWzddPWVbN10qZixvWzhdPWVbOF0qZixvfXN0YXRpYyBnZXRTY2FsZShlLHQpe3JldHVybiB0Lng9cy5tYWduaXR1ZGUocy5mcm9tRWxlbWVudHMoZVswXSxlWzFdLGVbMl0sWW0pKSx0Lnk9cy5tYWduaXR1ZGUocy5mcm9tRWxlbWVudHMoZVszXSxlWzRdLGVbNV0sWW0pKSx0Lno9cy5tYWduaXR1ZGUocy5mcm9tRWxlbWVudHMoZVs2XSxlWzddLGVbOF0sWW0pKSx0fXN0YXRpYyBnZXRNYXhpbXVtU2NhbGUoZSl7cmV0dXJuIG4uZ2V0U2NhbGUoZSxVMSkscy5tYXhpbXVtQ29tcG9uZW50KFUxKX1zdGF0aWMgc2V0Um90YXRpb24oZSx0LG8pe2xldCBhPW4uZ2V0U2NhbGUoZSxUQyk7cmV0dXJuIG9bMF09dFswXSphLngsb1sxXT10WzFdKmEueCxvWzJdPXRbMl0qYS54LG9bM109dFszXSphLnksb1s0XT10WzRdKmEueSxvWzVdPXRbNV0qYS55LG9bNl09dFs2XSphLnosb1s3XT10WzddKmEueixvWzhdPXRbOF0qYS56LG99c3RhdGljIGdldFJvdGF0aW9uKGUsdCl7bGV0IG89bi5nZXRTY2FsZShlLEVDKTtyZXR1cm4gdFswXT1lWzBdL28ueCx0WzFdPWVbMV0vby54LHRbMl09ZVsyXS9vLngsdFszXT1lWzNdL28ueSx0WzRdPWVbNF0vby55LHRbNV09ZVs1XS9vLnksdFs2XT1lWzZdL28ueix0WzddPWVbN10vby56LHRbOF09ZVs4XS9vLnosdH1zdGF0aWMgbXVsdGlwbHkoZSx0LG8pe2xldCBhPWVbMF0qdFswXStlWzNdKnRbMV0rZVs2XSp0WzJdLHI9ZVsxXSp0WzBdK2VbNF0qdFsxXStlWzddKnRbMl0saT1lWzJdKnRbMF0rZVs1XSp0WzFdK2VbOF0qdFsyXSxmPWVbMF0qdFszXStlWzNdKnRbNF0rZVs2XSp0WzVdLGQ9ZVsxXSp0WzNdK2VbNF0qdFs0XStlWzddKnRbNV0sYz1lWzJdKnRbM10rZVs1XSp0WzRdK2VbOF0qdFs1XSx1PWVbMF0qdFs2XStlWzNdKnRbN10rZVs2XSp0WzhdLGw9ZVsxXSp0WzZdK2VbNF0qdFs3XStlWzddKnRbOF0sbT1lWzJdKnRbNl0rZVs1XSp0WzddK2VbOF0qdFs4XTtyZXR1cm4gb1swXT1hLG9bMV09cixvWzJdPWksb1szXT1mLG9bNF09ZCxvWzVdPWMsb1s2XT11LG9bN109bCxvWzhdPW0sb31zdGF0aWMgYWRkKGUsdCxvKXtyZXR1cm4gb1swXT1lWzBdK3RbMF0sb1sxXT1lWzFdK3RbMV0sb1syXT1lWzJdK3RbMl0sb1szXT1lWzNdK3RbM10sb1s0XT1lWzRdK3RbNF0sb1s1XT1lWzVdK3RbNV0sb1s2XT1lWzZdK3RbNl0sb1s3XT1lWzddK3RbN10sb1s4XT1lWzhdK3RbOF0sb31zdGF0aWMgc3VidHJhY3QoZSx0LG8pe3JldHVybiBvWzBdPWVbMF0tdFswXSxvWzFdPWVbMV0tdFsxXSxvWzJdPWVbMl0tdFsyXSxvWzNdPWVbM10tdFszXSxvWzRdPWVbNF0tdFs0XSxvWzVdPWVbNV0tdFs1XSxvWzZdPWVbNl0tdFs2XSxvWzddPWVbN10tdFs3XSxvWzhdPWVbOF0tdFs4XSxvfXN0YXRpYyBtdWx0aXBseUJ5VmVjdG9yKGUsdCxvKXtsZXQgYT10Lngscj10LnksaT10LnosZj1lWzBdKmErZVszXSpyK2VbNl0qaSxkPWVbMV0qYStlWzRdKnIrZVs3XSppLGM9ZVsyXSphK2VbNV0qcitlWzhdKmk7cmV0dXJuIG8ueD1mLG8ueT1kLG8uej1jLG99c3RhdGljIG11bHRpcGx5QnlTY2FsYXIoZSx0LG8pe3JldHVybiBvWzBdPWVbMF0qdCxvWzFdPWVbMV0qdCxvWzJdPWVbMl0qdCxvWzNdPWVbM10qdCxvWzRdPWVbNF0qdCxvWzVdPWVbNV0qdCxvWzZdPWVbNl0qdCxvWzddPWVbN10qdCxvWzhdPWVbOF0qdCxvfXN0YXRpYyBtdWx0aXBseUJ5U2NhbGUoZSx0LG8pe3JldHVybiBvWzBdPWVbMF0qdC54LG9bMV09ZVsxXSp0Lngsb1syXT1lWzJdKnQueCxvWzNdPWVbM10qdC55LG9bNF09ZVs0XSp0Lnksb1s1XT1lWzVdKnQueSxvWzZdPWVbNl0qdC56LG9bN109ZVs3XSp0Lnosb1s4XT1lWzhdKnQueixvfXN0YXRpYyBtdWx0aXBseUJ5VW5pZm9ybVNjYWxlKGUsdCxvKXtyZXR1cm4gb1swXT1lWzBdKnQsb1sxXT1lWzFdKnQsb1syXT1lWzJdKnQsb1szXT1lWzNdKnQsb1s0XT1lWzRdKnQsb1s1XT1lWzVdKnQsb1s2XT1lWzZdKnQsb1s3XT1lWzddKnQsb1s4XT1lWzhdKnQsb31zdGF0aWMgbmVnYXRlKGUsdCl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHRbM109LWVbM10sdFs0XT0tZVs0XSx0WzVdPS1lWzVdLHRbNl09LWVbNl0sdFs3XT0tZVs3XSx0WzhdPS1lWzhdLHR9c3RhdGljIHRyYW5zcG9zZShlLHQpe2xldCBvPWVbMF0sYT1lWzNdLHI9ZVs2XSxpPWVbMV0sZj1lWzRdLGQ9ZVs3XSxjPWVbMl0sdT1lWzVdLGw9ZVs4XTtyZXR1cm4gdFswXT1vLHRbMV09YSx0WzJdPXIsdFszXT1pLHRbNF09Zix0WzVdPWQsdFs2XT1jLHRbN109dSx0WzhdPWwsdH1zdGF0aWMgY29tcHV0ZUVpZ2VuRGVjb21wb3NpdGlvbihlLHQpe2xldCBvPWsuRVBTSUxPTjIwLGE9MTAscj0wLGk9MDtnKHQpfHwodD17fSk7bGV0IGY9dC51bml0YXJ5PW4uY2xvbmUobi5JREVOVElUWSx0LnVuaXRhcnkpLGQ9dC5kaWFnb25hbD1uLmNsb25lKGUsdC5kaWFnb25hbCksYz1vKnhDKGQpO2Zvcig7aTxhJiZPQyhkKT5jOylTQyhkLGlsKSxuLnRyYW5zcG9zZShpbCxqMSksbi5tdWx0aXBseShkLGlsLGQpLG4ubXVsdGlwbHkoajEsZCxkKSxuLm11bHRpcGx5KGYsaWwsZiksKytyPjImJigrK2kscj0wKTtyZXR1cm4gdH1zdGF0aWMgYWJzKGUsdCl7cmV0dXJuIHRbMF09TWF0aC5hYnMoZVswXSksdFsxXT1NYXRoLmFicyhlWzFdKSx0WzJdPU1hdGguYWJzKGVbMl0pLHRbM109TWF0aC5hYnMoZVszXSksdFs0XT1NYXRoLmFicyhlWzRdKSx0WzVdPU1hdGguYWJzKGVbNV0pLHRbNl09TWF0aC5hYnMoZVs2XSksdFs3XT1NYXRoLmFicyhlWzddKSx0WzhdPU1hdGguYWJzKGVbOF0pLHR9c3RhdGljIGRldGVybWluYW50KGUpe2xldCB0PWVbMF0sbz1lWzNdLGE9ZVs2XSxyPWVbMV0saT1lWzRdLGY9ZVs3XSxkPWVbMl0sYz1lWzVdLHU9ZVs4XTtyZXR1cm4gdCooaSp1LWMqZikrciooYyphLW8qdSkrZCoobypmLWkqYSl9c3RhdGljIGludmVyc2UoZSx0KXtsZXQgbz1lWzBdLGE9ZVsxXSxyPWVbMl0saT1lWzNdLGY9ZVs0XSxkPWVbNV0sYz1lWzZdLHU9ZVs3XSxsPWVbOF0sbT1uLmRldGVybWluYW50KGUpO3RbMF09ZipsLXUqZCx0WzFdPXUqci1hKmwsdFsyXT1hKmQtZipyLHRbM109YypkLWkqbCx0WzRdPW8qbC1jKnIsdFs1XT1pKnItbypkLHRbNl09aSp1LWMqZix0WzddPWMqYS1vKnUsdFs4XT1vKmYtaSphO2xldCBoPTEvbTtyZXR1cm4gbi5tdWx0aXBseUJ5U2NhbGFyKHQsaCx0KX1zdGF0aWMgaW52ZXJzZVRyYW5zcG9zZShlLHQpe3JldHVybiBuLmludmVyc2Uobi50cmFuc3Bvc2UoZSxSQyksdCl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZVswXT09PXRbMF0mJmVbMV09PT10WzFdJiZlWzJdPT09dFsyXSYmZVszXT09PXRbM10mJmVbNF09PT10WzRdJiZlWzVdPT09dFs1XSYmZVs2XT09PXRbNl0mJmVbN109PT10WzddJiZlWzhdPT09dFs4XX1zdGF0aWMgZXF1YWxzRXBzaWxvbihlLHQsbyl7cmV0dXJuIG89bz8/MCxlPT09dHx8ZyhlKSYmZyh0KSYmTWF0aC5hYnMoZVswXS10WzBdKTw9byYmTWF0aC5hYnMoZVsxXS10WzFdKTw9byYmTWF0aC5hYnMoZVsyXS10WzJdKTw9byYmTWF0aC5hYnMoZVszXS10WzNdKTw9byYmTWF0aC5hYnMoZVs0XS10WzRdKTw9byYmTWF0aC5hYnMoZVs1XS10WzVdKTw9byYmTWF0aC5hYnMoZVs2XS10WzZdKTw9byYmTWF0aC5hYnMoZVs3XS10WzddKTw9byYmTWF0aC5hYnMoZVs4XS10WzhdKTw9b31nZXQgbGVuZ3RoKCl7cmV0dXJuIG4ucGFja2VkTGVuZ3RofWNsb25lKGUpe3JldHVybiBuLmNsb25lKHRoaXMsZSl9ZXF1YWxzKGUpe3JldHVybiBuLmVxdWFscyh0aGlzLGUpfXN0YXRpYyBlcXVhbHNBcnJheShlLHQsbyl7cmV0dXJuIGVbMF09PT10W29dJiZlWzFdPT09dFtvKzFdJiZlWzJdPT09dFtvKzJdJiZlWzNdPT09dFtvKzNdJiZlWzRdPT09dFtvKzRdJiZlWzVdPT09dFtvKzVdJiZlWzZdPT09dFtvKzZdJiZlWzddPT09dFtvKzddJiZlWzhdPT09dFtvKzhdfWVxdWFsc0Vwc2lsb24oZSx0KXtyZXR1cm4gbi5lcXVhbHNFcHNpbG9uKHRoaXMsZSx0KX10b1N0cmluZygpe3JldHVybmAoJHt0aGlzWzBdfSwgJHt0aGlzWzNdfSwgJHt0aGlzWzZdfSkKKCR7dGhpc1sxXX0sICR7dGhpc1s0XX0sICR7dGhpc1s3XX0pCigke3RoaXNbMl19LCAke3RoaXNbNV19LCAke3RoaXNbOF19KWB9fTtCdC5wYWNrZWRMZW5ndGg9OTtCdC5mcm9tQXJyYXk9QnQudW5wYWNrO0J0LklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IEJ0KDEsMCwwLDAsMSwwLDAsMCwxKSk7QnQuWkVSTz1PYmplY3QuZnJlZXplKG5ldyBCdCgwLDAsMCwwLDAsMCwwLDAsMCkpO0J0LkNPTFVNTjBST1cwPTA7QnQuQ09MVU1OMFJPVzE9MTtCdC5DT0xVTU4wUk9XMj0yO0J0LkNPTFVNTjFST1cwPTM7QnQuQ09MVU1OMVJPVzE9NDtCdC5DT0xVTU4xUk9XMj01O0J0LkNPTFVNTjJST1cwPTY7QnQuQ09MVU1OMlJPVzE9NztCdC5DT0xVTU4yUk9XMj04O0FDPW5ldyBzLHdDPW5ldyBzLFltPW5ldyBzLFUxPW5ldyBzLFRDPW5ldyBzLEVDPW5ldyBzLGlsPW5ldyBCdCxqMT1uZXcgQnQsUkM9bmV3IEJ0O0ptPVsxLDAsMF0sWm09WzIsMiwxXTtaPUJ0fSk7dmFyIEhuLGNsLEwxLENDLFFtLHhvLE1DLE5DLHoxLHJ0LGJhPVgoKCk9PntmZSgpO2plKCk7SG49Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHQsbyxhKXt0aGlzLng9ZT8/MCx0aGlzLnk9dD8/MCx0aGlzLno9bz8/MCx0aGlzLnc9YT8/MH1zdGF0aWMgZnJvbUVsZW1lbnRzKGUsdCxvLGEscil7cmV0dXJuIGcocik/KHIueD1lLHIueT10LHIuej1vLHIudz1hLHIpOm5ldyBuKGUsdCxvLGEpfXN0YXRpYyBmcm9tQ29sb3IoZSx0KXtyZXR1cm4gZyh0KT8odC54PWUucmVkLHQueT1lLmdyZWVuLHQuej1lLmJsdWUsdC53PWUuYWxwaGEsdCk6bmV3IG4oZS5yZWQsZS5ncmVlbixlLmJsdWUsZS5hbHBoYSl9c3RhdGljIGNsb25lKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KT8odC54PWUueCx0Lnk9ZS55LHQuej1lLnosdC53PWUudyx0KTpuZXcgbihlLngsZS55LGUueixlLncpfXN0YXRpYyBwYWNrKGUsdCxvKXtyZXR1cm4gbz1vPz8wLHRbbysrXT1lLngsdFtvKytdPWUueSx0W28rK109ZS56LHRbb109ZS53LHR9c3RhdGljIHVucGFjayhlLHQsbyl7cmV0dXJuIHQ9dD8/MCxnKG8pfHwobz1uZXcgbiksby54PWVbdCsrXSxvLnk9ZVt0KytdLG8uej1lW3QrK10sby53PWVbdF0sb31zdGF0aWMgcGFja0FycmF5KGUsdCl7bGV0IG89ZS5sZW5ndGgsYT1vKjQ7Zyh0KT8hQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGghPT1hfHx0Lmxlbmd0aCE9PWEmJih0Lmxlbmd0aD1hKTp0PW5ldyBBcnJheShhKTtmb3IobGV0IHI9MDtyPG87KytyKW4ucGFjayhlW3JdLHQscio0KTtyZXR1cm4gdH1zdGF0aWMgdW5wYWNrQXJyYXkoZSx0KXtsZXQgbz1lLmxlbmd0aDtnKHQpP3QubGVuZ3RoPW8vNDp0PW5ldyBBcnJheShvLzQpO2ZvcihsZXQgYT0wO2E8bzthKz00KXtsZXQgcj1hLzQ7dFtyXT1uLnVucGFjayhlLGEsdFtyXSl9cmV0dXJuIHR9c3RhdGljIG1heGltdW1Db21wb25lbnQoZSl7cmV0dXJuIE1hdGgubWF4KGUueCxlLnksZS56LGUudyl9c3RhdGljIG1pbmltdW1Db21wb25lbnQoZSl7cmV0dXJuIE1hdGgubWluKGUueCxlLnksZS56LGUudyl9c3RhdGljIG1pbmltdW1CeUNvbXBvbmVudChlLHQsbyl7cmV0dXJuIG8ueD1NYXRoLm1pbihlLngsdC54KSxvLnk9TWF0aC5taW4oZS55LHQueSksby56PU1hdGgubWluKGUueix0LnopLG8udz1NYXRoLm1pbihlLncsdC53KSxvfXN0YXRpYyBtYXhpbXVtQnlDb21wb25lbnQoZSx0LG8pe3JldHVybiBvLng9TWF0aC5tYXgoZS54LHQueCksby55PU1hdGgubWF4KGUueSx0LnkpLG8uej1NYXRoLm1heChlLnosdC56KSxvLnc9TWF0aC5tYXgoZS53LHQudyksb31zdGF0aWMgY2xhbXAoZSx0LG8sYSl7bGV0IHI9ay5jbGFtcChlLngsdC54LG8ueCksaT1rLmNsYW1wKGUueSx0Lnksby55KSxmPWsuY2xhbXAoZS56LHQueixvLnopLGQ9ay5jbGFtcChlLncsdC53LG8udyk7cmV0dXJuIGEueD1yLGEueT1pLGEuej1mLGEudz1kLGF9c3RhdGljIG1hZ25pdHVkZVNxdWFyZWQoZSl7cmV0dXJuIGUueCplLngrZS55KmUueStlLnoqZS56K2UudyplLnd9c3RhdGljIG1hZ25pdHVkZShlKXtyZXR1cm4gTWF0aC5zcXJ0KG4ubWFnbml0dWRlU3F1YXJlZChlKSl9c3RhdGljIGRpc3RhbmNlKGUsdCl7cmV0dXJuIG4uc3VidHJhY3QoZSx0LGNsKSxuLm1hZ25pdHVkZShjbCl9c3RhdGljIGRpc3RhbmNlU3F1YXJlZChlLHQpe3JldHVybiBuLnN1YnRyYWN0KGUsdCxjbCksbi5tYWduaXR1ZGVTcXVhcmVkKGNsKX1zdGF0aWMgbm9ybWFsaXplKGUsdCl7bGV0IG89bi5tYWduaXR1ZGUoZSk7cmV0dXJuIHQueD1lLngvbyx0Lnk9ZS55L28sdC56PWUuei9vLHQudz1lLncvbyx0fXN0YXRpYyBkb3QoZSx0KXtyZXR1cm4gZS54KnQueCtlLnkqdC55K2Uueip0LnorZS53KnQud31zdGF0aWMgbXVsdGlwbHlDb21wb25lbnRzKGUsdCxvKXtyZXR1cm4gby54PWUueCp0Lngsby55PWUueSp0Lnksby56PWUueip0Lnosby53PWUudyp0Lncsb31zdGF0aWMgZGl2aWRlQ29tcG9uZW50cyhlLHQsbyl7cmV0dXJuIG8ueD1lLngvdC54LG8ueT1lLnkvdC55LG8uej1lLnovdC56LG8udz1lLncvdC53LG99c3RhdGljIGFkZChlLHQsbyl7cmV0dXJuIG8ueD1lLngrdC54LG8ueT1lLnkrdC55LG8uej1lLnordC56LG8udz1lLncrdC53LG99c3RhdGljIHN1YnRyYWN0KGUsdCxvKXtyZXR1cm4gby54PWUueC10Lngsby55PWUueS10Lnksby56PWUuei10Lnosby53PWUudy10Lncsb31zdGF0aWMgbXVsdGlwbHlCeVNjYWxhcihlLHQsbyl7cmV0dXJuIG8ueD1lLngqdCxvLnk9ZS55KnQsby56PWUueip0LG8udz1lLncqdCxvfXN0YXRpYyBkaXZpZGVCeVNjYWxhcihlLHQsbyl7cmV0dXJuIG8ueD1lLngvdCxvLnk9ZS55L3Qsby56PWUuei90LG8udz1lLncvdCxvfXN0YXRpYyBuZWdhdGUoZSx0KXtyZXR1cm4gdC54PS1lLngsdC55PS1lLnksdC56PS1lLnosdC53PS1lLncsdH1zdGF0aWMgYWJzKGUsdCl7cmV0dXJuIHQueD1NYXRoLmFicyhlLngpLHQueT1NYXRoLmFicyhlLnkpLHQuej1NYXRoLmFicyhlLnopLHQudz1NYXRoLmFicyhlLncpLHR9c3RhdGljIGxlcnAoZSx0LG8sYSl7cmV0dXJuIG4ubXVsdGlwbHlCeVNjYWxhcih0LG8sTDEpLGE9bi5tdWx0aXBseUJ5U2NhbGFyKGUsMS1vLGEpLG4uYWRkKEwxLGEsYSl9c3RhdGljIG1vc3RPcnRob2dvbmFsQXhpcyhlLHQpe2xldCBvPW4ubm9ybWFsaXplKGUsQ0MpO3JldHVybiBuLmFicyhvLG8pLG8ueDw9by55P28ueDw9by56P28ueDw9by53P3Q9bi5jbG9uZShuLlVOSVRfWCx0KTp0PW4uY2xvbmUobi5VTklUX1csdCk6by56PD1vLnc/dD1uLmNsb25lKG4uVU5JVF9aLHQpOnQ9bi5jbG9uZShuLlVOSVRfVyx0KTpvLnk8PW8uej9vLnk8PW8udz90PW4uY2xvbmUobi5VTklUX1ksdCk6dD1uLmNsb25lKG4uVU5JVF9XLHQpOm8uejw9by53P3Q9bi5jbG9uZShuLlVOSVRfWix0KTp0PW4uY2xvbmUobi5VTklUX1csdCksdH1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIGU9PT10fHxnKGUpJiZnKHQpJiZlLng9PT10LngmJmUueT09PXQueSYmZS56PT09dC56JiZlLnc9PT10Lnd9c3RhdGljIGVxdWFsc0FycmF5KGUsdCxvKXtyZXR1cm4gZS54PT09dFtvXSYmZS55PT09dFtvKzFdJiZlLno9PT10W28rMl0mJmUudz09PXRbbyszXX1zdGF0aWMgZXF1YWxzRXBzaWxvbihlLHQsbyxhKXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmsuZXF1YWxzRXBzaWxvbihlLngsdC54LG8sYSkmJmsuZXF1YWxzRXBzaWxvbihlLnksdC55LG8sYSkmJmsuZXF1YWxzRXBzaWxvbihlLnosdC56LG8sYSkmJmsuZXF1YWxzRXBzaWxvbihlLncsdC53LG8sYSl9Y2xvbmUoZSl7cmV0dXJuIG4uY2xvbmUodGhpcyxlKX1lcXVhbHMoZSl7cmV0dXJuIG4uZXF1YWxzKHRoaXMsZSl9ZXF1YWxzRXBzaWxvbihlLHQsbyl7cmV0dXJuIG4uZXF1YWxzRXBzaWxvbih0aGlzLGUsdCxvKX10b1N0cmluZygpe3JldHVybmAoJHt0aGlzLnh9LCAke3RoaXMueX0sICR7dGhpcy56fSwgJHt0aGlzLnd9KWB9c3RhdGljIHBhY2tGbG9hdChlLHQpe3JldHVybiBnKHQpfHwodD1uZXcgbiksUW1bMF09ZSx6MT8odC54PXhvWzBdLHQueT14b1sxXSx0Lno9eG9bMl0sdC53PXhvWzNdKToodC54PXhvWzNdLHQueT14b1syXSx0Lno9eG9bMV0sdC53PXhvWzBdKSx0fXN0YXRpYyB1bnBhY2tGbG9hdChlKXtyZXR1cm4gejE/KHhvWzBdPWUueCx4b1sxXT1lLnkseG9bMl09ZS56LHhvWzNdPWUudyk6KHhvWzBdPWUudyx4b1sxXT1lLnoseG9bMl09ZS55LHhvWzNdPWUueCksUW1bMF19fTtIbi5wYWNrZWRMZW5ndGg9NDtIbi5mcm9tQXJyYXk9SG4udW5wYWNrO2NsPW5ldyBIbixMMT1uZXcgSG4sQ0M9bmV3IEhuO0huLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgSG4oMCwwLDAsMCkpO0huLk9ORT1PYmplY3QuZnJlZXplKG5ldyBIbigxLDEsMSwxKSk7SG4uVU5JVF9YPU9iamVjdC5mcmVlemUobmV3IEhuKDEsMCwwLDApKTtIbi5VTklUX1k9T2JqZWN0LmZyZWV6ZShuZXcgSG4oMCwxLDAsMCkpO0huLlVOSVRfWj1PYmplY3QuZnJlZXplKG5ldyBIbigwLDAsMSwwKSk7SG4uVU5JVF9XPU9iamVjdC5mcmVlemUobmV3IEhuKDAsMCwwLDEpKTtRbT1uZXcgRmxvYXQzMkFycmF5KDEpLHhvPW5ldyBVaW50OEFycmF5KFFtLmJ1ZmZlciksTUM9bmV3IFVpbnQzMkFycmF5KFsyODc0NTQwMjBdKSxOQz1uZXcgVWludDhBcnJheShNQy5idWZmZXIpLHoxPU5DWzBdPT09NjgscnQ9SG59KTt2YXIgJG0sT2Usc3Q9WCgoKT0+eyRtPXt9OyRtLkVNUFRZX09CSkVDVD1PYmplY3QuZnJlZXplKHt9KTskbS5FTVBUWV9BUlJBWT1PYmplY3QuZnJlZXplKFtdKTtPZT0kbX0pO2Z1bmN0aW9uIF9mKG4pe3RoaXMubmFtZT0iUnVudGltZUVycm9yIix0aGlzLm1lc3NhZ2U9bjtsZXQgZTt0cnl7dGhyb3cgbmV3IEVycm9yfWNhdGNoKHQpe2U9dC5zdGFja310aGlzLnN0YWNrPWV9dmFyIG50LHBhPVgoKCk9PntmZSgpO2coT2JqZWN0LmNyZWF0ZSkmJihfZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLF9mLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1fZik7X2YucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7bGV0IG49YCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9YDtyZXR1cm4gZyh0aGlzLnN0YWNrKSYmKG4rPWAKJHt0aGlzLnN0YWNrLnRvU3RyaW5nKCl9YCksbn07bnQ9X2Z9KTt2YXIgZG4sV2MsWGMseWYsSUMsUEMsZWIsRzEsa0MsdkMsRkMsREMsQkMsVUMsakMsUSx1bj1YKCgpPT57TWUoKTtiYSgpO3N0KCk7ZmUoKTtqZSgpO0luKCk7cGEoKTtkbj1jbGFzcyBue2NvbnN0cnVjdG9yKGUsdCxvLGEscixpLGYsZCxjLHUsbCxtLGgsYixwLHkpe3RoaXNbMF09ZT8/MCx0aGlzWzFdPXI/PzAsdGhpc1syXT1jPz8wLHRoaXNbM109aD8/MCx0aGlzWzRdPXQ/PzAsdGhpc1s1XT1pPz8wLHRoaXNbNl09dT8/MCx0aGlzWzddPWI/PzAsdGhpc1s4XT1vPz8wLHRoaXNbOV09Zj8/MCx0aGlzWzEwXT1sPz8wLHRoaXNbMTFdPXA/PzAsdGhpc1sxMl09YT8/MCx0aGlzWzEzXT1kPz8wLHRoaXNbMTRdPW0/PzAsdGhpc1sxNV09eT8/MH1zdGF0aWMgcGFjayhlLHQsbyl7cmV0dXJuIG89bz8/MCx0W28rK109ZVswXSx0W28rK109ZVsxXSx0W28rK109ZVsyXSx0W28rK109ZVszXSx0W28rK109ZVs0XSx0W28rK109ZVs1XSx0W28rK109ZVs2XSx0W28rK109ZVs3XSx0W28rK109ZVs4XSx0W28rK109ZVs5XSx0W28rK109ZVsxMF0sdFtvKytdPWVbMTFdLHRbbysrXT1lWzEyXSx0W28rK109ZVsxM10sdFtvKytdPWVbMTRdLHRbb109ZVsxNV0sdH1zdGF0aWMgdW5wYWNrKGUsdCxvKXtyZXR1cm4gdD10Pz8wLGcobyl8fChvPW5ldyBuKSxvWzBdPWVbdCsrXSxvWzFdPWVbdCsrXSxvWzJdPWVbdCsrXSxvWzNdPWVbdCsrXSxvWzRdPWVbdCsrXSxvWzVdPWVbdCsrXSxvWzZdPWVbdCsrXSxvWzddPWVbdCsrXSxvWzhdPWVbdCsrXSxvWzldPWVbdCsrXSxvWzEwXT1lW3QrK10sb1sxMV09ZVt0KytdLG9bMTJdPWVbdCsrXSxvWzEzXT1lW3QrK10sb1sxNF09ZVt0KytdLG9bMTVdPWVbdF0sb31zdGF0aWMgcGFja0FycmF5KGUsdCl7bGV0IG89ZS5sZW5ndGgsYT1vKjE2O2codCk/IUFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoIT09YXx8dC5sZW5ndGghPT1hJiYodC5sZW5ndGg9YSk6dD1uZXcgQXJyYXkoYSk7Zm9yKGxldCByPTA7cjxvOysrciluLnBhY2soZVtyXSx0LHIqMTYpO3JldHVybiB0fXN0YXRpYyB1bnBhY2tBcnJheShlLHQpe2xldCBvPWUubGVuZ3RoO2codCk/dC5sZW5ndGg9by8xNjp0PW5ldyBBcnJheShvLzE2KTtmb3IobGV0IGE9MDthPG87YSs9MTYpe2xldCByPWEvMTY7dFtyXT1uLnVucGFjayhlLGEsdFtyXSl9cmV0dXJuIHR9c3RhdGljIGNsb25lKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KT8odFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHQpOm5ldyBuKGVbMF0sZVs0XSxlWzhdLGVbMTJdLGVbMV0sZVs1XSxlWzldLGVbMTNdLGVbMl0sZVs2XSxlWzEwXSxlWzE0XSxlWzNdLGVbN10sZVsxMV0sZVsxNV0pfXN0YXRpYyBmcm9tQ29sdW1uTWFqb3JBcnJheShlLHQpe3JldHVybiBuLmNsb25lKGUsdCl9c3RhdGljIGZyb21Sb3dNYWpvckFycmF5KGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZVswXSx0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1lWzFdLHRbNV09ZVs1XSx0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPWVbMl0sdFs5XT1lWzZdLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTRdLHRbMTJdPWVbM10sdFsxM109ZVs3XSx0WzE0XT1lWzExXSx0WzE1XT1lWzE1XSx0KTpuZXcgbihlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0sZVs1XSxlWzZdLGVbN10sZVs4XSxlWzldLGVbMTBdLGVbMTFdLGVbMTJdLGVbMTNdLGVbMTRdLGVbMTVdKX1zdGF0aWMgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oZSx0LG8pe3JldHVybiB0PXQ/P3MuWkVSTyxnKG8pPyhvWzBdPWVbMF0sb1sxXT1lWzFdLG9bMl09ZVsyXSxvWzNdPTAsb1s0XT1lWzNdLG9bNV09ZVs0XSxvWzZdPWVbNV0sb1s3XT0wLG9bOF09ZVs2XSxvWzldPWVbN10sb1sxMF09ZVs4XSxvWzExXT0wLG9bMTJdPXQueCxvWzEzXT10Lnksb1sxNF09dC56LG9bMTVdPTEsbyk6bmV3IG4oZVswXSxlWzNdLGVbNl0sdC54LGVbMV0sZVs0XSxlWzddLHQueSxlWzJdLGVbNV0sZVs4XSx0LnosMCwwLDAsMSl9c3RhdGljIGZyb21UcmFuc2xhdGlvblF1YXRlcm5pb25Sb3RhdGlvblNjYWxlKGUsdCxvLGEpe2coYSl8fChhPW5ldyBuKTtsZXQgcj1vLngsaT1vLnksZj1vLnosZD10LngqdC54LGM9dC54KnQueSx1PXQueCp0LnosbD10LngqdC53LG09dC55KnQueSxoPXQueSp0LnosYj10LnkqdC53LHA9dC56KnQueix5PXQueip0LncsVD10LncqdC53LF89ZC1tLXArVCx3PTIqKGMteSksRT0yKih1K2IpLFI9MiooYyt5KSxTPS1kK20tcCtULEM9MiooaC1sKSxJPTIqKHUtYiksTT0yKihoK2wpLFA9LWQtbStwK1Q7cmV0dXJuIGFbMF09XypyLGFbMV09UipyLGFbMl09SSpyLGFbM109MCxhWzRdPXcqaSxhWzVdPVMqaSxhWzZdPU0qaSxhWzddPTAsYVs4XT1FKmYsYVs5XT1DKmYsYVsxMF09UCpmLGFbMTFdPTAsYVsxMl09ZS54LGFbMTNdPWUueSxhWzE0XT1lLnosYVsxNV09MSxhfXN0YXRpYyBmcm9tVHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlKGUsdCl7cmV0dXJuIG4uZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGUoZS50cmFuc2xhdGlvbixlLnJvdGF0aW9uLGUuc2NhbGUsdCl9c3RhdGljIGZyb21UcmFuc2xhdGlvbihlLHQpe3JldHVybiBuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKFouSURFTlRJVFksZSx0KX1zdGF0aWMgZnJvbVNjYWxlKGUsdCl7cmV0dXJuIGcodCk/KHRbMF09ZS54LHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWUueSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09ZS56LHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0KTpuZXcgbihlLngsMCwwLDAsMCxlLnksMCwwLDAsMCxlLnosMCwwLDAsMCwxKX1zdGF0aWMgZnJvbVVuaWZvcm1TY2FsZShlLHQpe3JldHVybiBnKHQpPyh0WzBdPWUsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09ZSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09ZSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdCk6bmV3IG4oZSwwLDAsMCwwLGUsMCwwLDAsMCxlLDAsMCwwLDAsMSl9c3RhdGljIGZyb21Sb3RhdGlvbihlLHQpe3JldHVybiBnKHQpfHwodD1uZXcgbiksdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT0wLHRbNF09ZVszXSx0WzVdPWVbNF0sdFs2XT1lWzVdLHRbN109MCx0WzhdPWVbNl0sdFs5XT1lWzddLHRbMTBdPWVbOF0sdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9c3RhdGljIGZyb21DYW1lcmEoZSx0KXtsZXQgbz1lLnBvc2l0aW9uLGE9ZS5kaXJlY3Rpb24scj1lLnVwO3Mubm9ybWFsaXplKGEsV2MpLHMubm9ybWFsaXplKHMuY3Jvc3MoV2MscixYYyksWGMpLHMubm9ybWFsaXplKHMuY3Jvc3MoWGMsV2MseWYpLHlmKTtsZXQgaT1YYy54LGY9WGMueSxkPVhjLnosYz1XYy54LHU9V2MueSxsPVdjLnosbT15Zi54LGg9eWYueSxiPXlmLnoscD1vLngseT1vLnksVD1vLnosXz1pKi1wK2YqLXkrZCotVCx3PW0qLXAraCoteStiKi1ULEU9YypwK3UqeStsKlQ7cmV0dXJuIGcodCk/KHRbMF09aSx0WzFdPW0sdFsyXT0tYyx0WzNdPTAsdFs0XT1mLHRbNV09aCx0WzZdPS11LHRbN109MCx0WzhdPWQsdFs5XT1iLHRbMTBdPS1sLHRbMTFdPTAsdFsxMl09Xyx0WzEzXT13LHRbMTRdPUUsdFsxNV09MSx0KTpuZXcgbihpLGYsZCxfLG0saCxiLHcsLWMsLXUsLWwsRSwwLDAsMCwxKX1zdGF0aWMgY29tcHV0ZVBlcnNwZWN0aXZlRmllbGRPZlZpZXcoZSx0LG8sYSxyKXtsZXQgZj0xL01hdGgudGFuKGUqLjUpLGQ9Zi90LGM9KGErbykvKG8tYSksdT0yKmEqby8oby1hKTtyZXR1cm4gclswXT1kLHJbMV09MCxyWzJdPTAsclszXT0wLHJbNF09MCxyWzVdPWYscls2XT0wLHJbN109MCxyWzhdPTAscls5XT0wLHJbMTBdPWMsclsxMV09LTEsclsxMl09MCxyWzEzXT0wLHJbMTRdPXUsclsxNV09MCxyfXN0YXRpYyBjb21wdXRlT3J0aG9ncmFwaGljT2ZmQ2VudGVyKGUsdCxvLGEscixpLGYpe2xldCBkPTEvKHQtZSksYz0xLyhhLW8pLHU9MS8oaS1yKSxsPS0odCtlKSpkLG09LShhK28pKmMsaD0tKGkrcikqdTtyZXR1cm4gZCo9MixjKj0yLHUqPS0yLGZbMF09ZCxmWzFdPTAsZlsyXT0wLGZbM109MCxmWzRdPTAsZls1XT1jLGZbNl09MCxmWzddPTAsZls4XT0wLGZbOV09MCxmWzEwXT11LGZbMTFdPTAsZlsxMl09bCxmWzEzXT1tLGZbMTRdPWgsZlsxNV09MSxmfXN0YXRpYyBjb21wdXRlUGVyc3BlY3RpdmVPZmZDZW50ZXIoZSx0LG8sYSxyLGksZil7bGV0IGQ9MipyLyh0LWUpLGM9MipyLyhhLW8pLHU9KHQrZSkvKHQtZSksbD0oYStvKS8oYS1vKSxtPS0oaStyKS8oaS1yKSxoPS0xLGI9LTIqaSpyLyhpLXIpO3JldHVybiBmWzBdPWQsZlsxXT0wLGZbMl09MCxmWzNdPTAsZls0XT0wLGZbNV09YyxmWzZdPTAsZls3XT0wLGZbOF09dSxmWzldPWwsZlsxMF09bSxmWzExXT1oLGZbMTJdPTAsZlsxM109MCxmWzE0XT1iLGZbMTVdPTAsZn1zdGF0aWMgY29tcHV0ZUluZmluaXRlUGVyc3BlY3RpdmVPZmZDZW50ZXIoZSx0LG8sYSxyLGkpe2xldCBmPTIqci8odC1lKSxkPTIqci8oYS1vKSxjPSh0K2UpLyh0LWUpLHU9KGErbykvKGEtbyksbD0tMSxtPS0xLGg9LTIqcjtyZXR1cm4gaVswXT1mLGlbMV09MCxpWzJdPTAsaVszXT0wLGlbNF09MCxpWzVdPWQsaVs2XT0wLGlbN109MCxpWzhdPWMsaVs5XT11LGlbMTBdPWwsaVsxMV09bSxpWzEyXT0wLGlbMTNdPTAsaVsxNF09aCxpWzE1XT0wLGl9c3RhdGljIGNvbXB1dGVWaWV3cG9ydFRyYW5zZm9ybWF0aW9uKGUsdCxvLGEpe2coYSl8fChhPW5ldyBuKSxlPWU/P09lLkVNUFRZX09CSkVDVDtsZXQgcj1lLng/PzAsaT1lLnk/PzAsZj1lLndpZHRoPz8wLGQ9ZS5oZWlnaHQ/PzA7dD10Pz8wLG89bz8/MTtsZXQgYz1mKi41LHU9ZCouNSxsPShvLXQpKi41LG09YyxoPXUsYj1sLHA9citjLHk9aSt1LFQ9dCtsLF89MTtyZXR1cm4gYVswXT1tLGFbMV09MCxhWzJdPTAsYVszXT0wLGFbNF09MCxhWzVdPWgsYVs2XT0wLGFbN109MCxhWzhdPTAsYVs5XT0wLGFbMTBdPWIsYVsxMV09MCxhWzEyXT1wLGFbMTNdPXksYVsxNF09VCxhWzE1XT1fLGF9c3RhdGljIGNvbXB1dGVWaWV3KGUsdCxvLGEscil7cmV0dXJuIHJbMF09YS54LHJbMV09by54LHJbMl09LXQueCxyWzNdPTAscls0XT1hLnkscls1XT1vLnkscls2XT0tdC55LHJbN109MCxyWzhdPWEueixyWzldPW8ueixyWzEwXT0tdC56LHJbMTFdPTAsclsxMl09LXMuZG90KGEsZSksclsxM109LXMuZG90KG8sZSksclsxNF09cy5kb3QodCxlKSxyWzE1XT0xLHJ9c3RhdGljIHRvQXJyYXkoZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHQpOltlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0sZVs1XSxlWzZdLGVbN10sZVs4XSxlWzldLGVbMTBdLGVbMTFdLGVbMTJdLGVbMTNdLGVbMTRdLGVbMTVdXX1zdGF0aWMgZ2V0RWxlbWVudEluZGV4KGUsdCl7cmV0dXJuIGUqNCt0fXN0YXRpYyBnZXRDb2x1bW4oZSx0LG8pe2xldCBhPXQqNCxyPWVbYV0saT1lW2ErMV0sZj1lW2ErMl0sZD1lW2ErM107cmV0dXJuIG8ueD1yLG8ueT1pLG8uej1mLG8udz1kLG99c3RhdGljIHNldENvbHVtbihlLHQsbyxhKXthPW4uY2xvbmUoZSxhKTtsZXQgcj10KjQ7cmV0dXJuIGFbcl09by54LGFbcisxXT1vLnksYVtyKzJdPW8ueixhW3IrM109by53LGF9c3RhdGljIGdldFJvdyhlLHQsbyl7bGV0IGE9ZVt0XSxyPWVbdCs0XSxpPWVbdCs4XSxmPWVbdCsxMl07cmV0dXJuIG8ueD1hLG8ueT1yLG8uej1pLG8udz1mLG99c3RhdGljIHNldFJvdyhlLHQsbyxhKXtyZXR1cm4gYT1uLmNsb25lKGUsYSksYVt0XT1vLngsYVt0KzRdPW8ueSxhW3QrOF09by56LGFbdCsxMl09by53LGF9c3RhdGljIHNldFRyYW5zbGF0aW9uKGUsdCxvKXtyZXR1cm4gb1swXT1lWzBdLG9bMV09ZVsxXSxvWzJdPWVbMl0sb1szXT1lWzNdLG9bNF09ZVs0XSxvWzVdPWVbNV0sb1s2XT1lWzZdLG9bN109ZVs3XSxvWzhdPWVbOF0sb1s5XT1lWzldLG9bMTBdPWVbMTBdLG9bMTFdPWVbMTFdLG9bMTJdPXQueCxvWzEzXT10Lnksb1sxNF09dC56LG9bMTVdPWVbMTVdLG99c3RhdGljIHNldFNjYWxlKGUsdCxvKXtsZXQgYT1uLmdldFNjYWxlKGUsSUMpLHI9dC54L2EueCxpPXQueS9hLnksZj10LnovYS56O3JldHVybiBvWzBdPWVbMF0qcixvWzFdPWVbMV0qcixvWzJdPWVbMl0qcixvWzNdPWVbM10sb1s0XT1lWzRdKmksb1s1XT1lWzVdKmksb1s2XT1lWzZdKmksb1s3XT1lWzddLG9bOF09ZVs4XSpmLG9bOV09ZVs5XSpmLG9bMTBdPWVbMTBdKmYsb1sxMV09ZVsxMV0sb1sxMl09ZVsxMl0sb1sxM109ZVsxM10sb1sxNF09ZVsxNF0sb1sxNV09ZVsxNV0sb31zdGF0aWMgc2V0VW5pZm9ybVNjYWxlKGUsdCxvKXtsZXQgYT1uLmdldFNjYWxlKGUsUEMpLHI9dC9hLngsaT10L2EueSxmPXQvYS56O3JldHVybiBvWzBdPWVbMF0qcixvWzFdPWVbMV0qcixvWzJdPWVbMl0qcixvWzNdPWVbM10sb1s0XT1lWzRdKmksb1s1XT1lWzVdKmksb1s2XT1lWzZdKmksb1s3XT1lWzddLG9bOF09ZVs4XSpmLG9bOV09ZVs5XSpmLG9bMTBdPWVbMTBdKmYsb1sxMV09ZVsxMV0sb1sxMl09ZVsxMl0sb1sxM109ZVsxM10sb1sxNF09ZVsxNF0sb1sxNV09ZVsxNV0sb31zdGF0aWMgZ2V0U2NhbGUoZSx0KXtyZXR1cm4gdC54PXMubWFnbml0dWRlKHMuZnJvbUVsZW1lbnRzKGVbMF0sZVsxXSxlWzJdLGViKSksdC55PXMubWFnbml0dWRlKHMuZnJvbUVsZW1lbnRzKGVbNF0sZVs1XSxlWzZdLGViKSksdC56PXMubWFnbml0dWRlKHMuZnJvbUVsZW1lbnRzKGVbOF0sZVs5XSxlWzEwXSxlYikpLHR9c3RhdGljIGdldE1heGltdW1TY2FsZShlKXtyZXR1cm4gbi5nZXRTY2FsZShlLEcxKSxzLm1heGltdW1Db21wb25lbnQoRzEpfXN0YXRpYyBzZXRSb3RhdGlvbihlLHQsbyl7bGV0IGE9bi5nZXRTY2FsZShlLGtDKTtyZXR1cm4gb1swXT10WzBdKmEueCxvWzFdPXRbMV0qYS54LG9bMl09dFsyXSphLngsb1szXT1lWzNdLG9bNF09dFszXSphLnksb1s1XT10WzRdKmEueSxvWzZdPXRbNV0qYS55LG9bN109ZVs3XSxvWzhdPXRbNl0qYS56LG9bOV09dFs3XSphLnosb1sxMF09dFs4XSphLnosb1sxMV09ZVsxMV0sb1sxMl09ZVsxMl0sb1sxM109ZVsxM10sb1sxNF09ZVsxNF0sb1sxNV09ZVsxNV0sb31zdGF0aWMgZ2V0Um90YXRpb24oZSx0KXtsZXQgbz1uLmdldFNjYWxlKGUsdkMpO3JldHVybiB0WzBdPWVbMF0vby54LHRbMV09ZVsxXS9vLngsdFsyXT1lWzJdL28ueCx0WzNdPWVbNF0vby55LHRbNF09ZVs1XS9vLnksdFs1XT1lWzZdL28ueSx0WzZdPWVbOF0vby56LHRbN109ZVs5XS9vLnosdFs4XT1lWzEwXS9vLnosdH1zdGF0aWMgbXVsdGlwbHkoZSx0LG8pe2xldCBhPWVbMF0scj1lWzFdLGk9ZVsyXSxmPWVbM10sZD1lWzRdLGM9ZVs1XSx1PWVbNl0sbD1lWzddLG09ZVs4XSxoPWVbOV0sYj1lWzEwXSxwPWVbMTFdLHk9ZVsxMl0sVD1lWzEzXSxfPWVbMTRdLHc9ZVsxNV0sRT10WzBdLFI9dFsxXSxTPXRbMl0sQz10WzNdLEk9dFs0XSxNPXRbNV0sUD10WzZdLEY9dFs3XSxBPXRbOF0seD10WzldLE49dFsxMF0sdj10WzExXSxVPXRbMTJdLEw9dFsxM10sRD10WzE0XSxHPXRbMTVdLFY9YSpFK2QqUittKlMreSpDLE89cipFK2MqUitoKlMrVCpDLEo9aSpFK3UqUitiKlMrXypDLHJlPWYqRStsKlIrcCpTK3cqQyxzZT1hKkkrZCpNK20qUCt5KkYsb2U9cipJK2MqTStoKlArVCpGLGNlPWkqSSt1Kk0rYipQK18qRixtZT1mKkkrbCpNK3AqUCt3KkYsZGU9YSpBK2QqeCttKk4reSp2LHllPXIqQStjKngraCpOK1QqdixsZT1pKkErdSp4K2IqTitfKnYsZWU9ZipBK2wqeCtwKk4rdyp2LEVlPWEqVStkKkwrbSpEK3kqRyxDZT1yKlUrYypMK2gqRCtUKkcsV2U9aSpVK3UqTCtiKkQrXypHLHplPWYqVStsKkwrcCpEK3cqRztyZXR1cm4gb1swXT1WLG9bMV09TyxvWzJdPUosb1szXT1yZSxvWzRdPXNlLG9bNV09b2Usb1s2XT1jZSxvWzddPW1lLG9bOF09ZGUsb1s5XT15ZSxvWzEwXT1sZSxvWzExXT1lZSxvWzEyXT1FZSxvWzEzXT1DZSxvWzE0XT1XZSxvWzE1XT16ZSxvfXN0YXRpYyBhZGQoZSx0LG8pe3JldHVybiBvWzBdPWVbMF0rdFswXSxvWzFdPWVbMV0rdFsxXSxvWzJdPWVbMl0rdFsyXSxvWzNdPWVbM10rdFszXSxvWzRdPWVbNF0rdFs0XSxvWzVdPWVbNV0rdFs1XSxvWzZdPWVbNl0rdFs2XSxvWzddPWVbN10rdFs3XSxvWzhdPWVbOF0rdFs4XSxvWzldPWVbOV0rdFs5XSxvWzEwXT1lWzEwXSt0WzEwXSxvWzExXT1lWzExXSt0WzExXSxvWzEyXT1lWzEyXSt0WzEyXSxvWzEzXT1lWzEzXSt0WzEzXSxvWzE0XT1lWzE0XSt0WzE0XSxvWzE1XT1lWzE1XSt0WzE1XSxvfXN0YXRpYyBzdWJ0cmFjdChlLHQsbyl7cmV0dXJuIG9bMF09ZVswXS10WzBdLG9bMV09ZVsxXS10WzFdLG9bMl09ZVsyXS10WzJdLG9bM109ZVszXS10WzNdLG9bNF09ZVs0XS10WzRdLG9bNV09ZVs1XS10WzVdLG9bNl09ZVs2XS10WzZdLG9bN109ZVs3XS10WzddLG9bOF09ZVs4XS10WzhdLG9bOV09ZVs5XS10WzldLG9bMTBdPWVbMTBdLXRbMTBdLG9bMTFdPWVbMTFdLXRbMTFdLG9bMTJdPWVbMTJdLXRbMTJdLG9bMTNdPWVbMTNdLXRbMTNdLG9bMTRdPWVbMTRdLXRbMTRdLG9bMTVdPWVbMTVdLXRbMTVdLG99c3RhdGljIG11bHRpcGx5VHJhbnNmb3JtYXRpb24oZSx0LG8pe2xldCBhPWVbMF0scj1lWzFdLGk9ZVsyXSxmPWVbNF0sZD1lWzVdLGM9ZVs2XSx1PWVbOF0sbD1lWzldLG09ZVsxMF0saD1lWzEyXSxiPWVbMTNdLHA9ZVsxNF0seT10WzBdLFQ9dFsxXSxfPXRbMl0sdz10WzRdLEU9dFs1XSxSPXRbNl0sUz10WzhdLEM9dFs5XSxJPXRbMTBdLE09dFsxMl0sUD10WzEzXSxGPXRbMTRdLEE9YSp5K2YqVCt1Kl8seD1yKnkrZCpUK2wqXyxOPWkqeStjKlQrbSpfLHY9YSp3K2YqRSt1KlIsVT1yKncrZCpFK2wqUixMPWkqdytjKkUrbSpSLEQ9YSpTK2YqQyt1KkksRz1yKlMrZCpDK2wqSSxWPWkqUytjKkMrbSpJLE89YSpNK2YqUCt1KkYraCxKPXIqTStkKlArbCpGK2IscmU9aSpNK2MqUCttKkYrcDtyZXR1cm4gb1swXT1BLG9bMV09eCxvWzJdPU4sb1szXT0wLG9bNF09dixvWzVdPVUsb1s2XT1MLG9bN109MCxvWzhdPUQsb1s5XT1HLG9bMTBdPVYsb1sxMV09MCxvWzEyXT1PLG9bMTNdPUosb1sxNF09cmUsb1sxNV09MSxvfXN0YXRpYyBtdWx0aXBseUJ5TWF0cml4MyhlLHQsbyl7bGV0IGE9ZVswXSxyPWVbMV0saT1lWzJdLGY9ZVs0XSxkPWVbNV0sYz1lWzZdLHU9ZVs4XSxsPWVbOV0sbT1lWzEwXSxoPXRbMF0sYj10WzFdLHA9dFsyXSx5PXRbM10sVD10WzRdLF89dFs1XSx3PXRbNl0sRT10WzddLFI9dFs4XSxTPWEqaCtmKmIrdSpwLEM9cipoK2QqYitsKnAsST1pKmgrYypiK20qcCxNPWEqeStmKlQrdSpfLFA9cip5K2QqVCtsKl8sRj1pKnkrYypUK20qXyxBPWEqdytmKkUrdSpSLHg9cip3K2QqRStsKlIsTj1pKncrYypFK20qUjtyZXR1cm4gb1swXT1TLG9bMV09QyxvWzJdPUksb1szXT0wLG9bNF09TSxvWzVdPVAsb1s2XT1GLG9bN109MCxvWzhdPUEsb1s5XT14LG9bMTBdPU4sb1sxMV09MCxvWzEyXT1lWzEyXSxvWzEzXT1lWzEzXSxvWzE0XT1lWzE0XSxvWzE1XT1lWzE1XSxvfXN0YXRpYyBtdWx0aXBseUJ5VHJhbnNsYXRpb24oZSx0LG8pe2xldCBhPXQueCxyPXQueSxpPXQueixmPWEqZVswXStyKmVbNF0raSplWzhdK2VbMTJdLGQ9YSplWzFdK3IqZVs1XStpKmVbOV0rZVsxM10sYz1hKmVbMl0rciplWzZdK2kqZVsxMF0rZVsxNF07cmV0dXJuIG9bMF09ZVswXSxvWzFdPWVbMV0sb1syXT1lWzJdLG9bM109ZVszXSxvWzRdPWVbNF0sb1s1XT1lWzVdLG9bNl09ZVs2XSxvWzddPWVbN10sb1s4XT1lWzhdLG9bOV09ZVs5XSxvWzEwXT1lWzEwXSxvWzExXT1lWzExXSxvWzEyXT1mLG9bMTNdPWQsb1sxNF09YyxvWzE1XT1lWzE1XSxvfXN0YXRpYyBtdWx0aXBseUJ5U2NhbGUoZSx0LG8pe2xldCBhPXQueCxyPXQueSxpPXQuejtyZXR1cm4gYT09PTEmJnI9PT0xJiZpPT09MT9uLmNsb25lKGUsbyk6KG9bMF09YSplWzBdLG9bMV09YSplWzFdLG9bMl09YSplWzJdLG9bM109ZVszXSxvWzRdPXIqZVs0XSxvWzVdPXIqZVs1XSxvWzZdPXIqZVs2XSxvWzddPWVbN10sb1s4XT1pKmVbOF0sb1s5XT1pKmVbOV0sb1sxMF09aSplWzEwXSxvWzExXT1lWzExXSxvWzEyXT1lWzEyXSxvWzEzXT1lWzEzXSxvWzE0XT1lWzE0XSxvWzE1XT1lWzE1XSxvKX1zdGF0aWMgbXVsdGlwbHlCeVVuaWZvcm1TY2FsZShlLHQsbyl7cmV0dXJuIG9bMF09ZVswXSp0LG9bMV09ZVsxXSp0LG9bMl09ZVsyXSp0LG9bM109ZVszXSxvWzRdPWVbNF0qdCxvWzVdPWVbNV0qdCxvWzZdPWVbNl0qdCxvWzddPWVbN10sb1s4XT1lWzhdKnQsb1s5XT1lWzldKnQsb1sxMF09ZVsxMF0qdCxvWzExXT1lWzExXSxvWzEyXT1lWzEyXSxvWzEzXT1lWzEzXSxvWzE0XT1lWzE0XSxvWzE1XT1lWzE1XSxvfXN0YXRpYyBtdWx0aXBseUJ5VmVjdG9yKGUsdCxvKXtsZXQgYT10Lngscj10LnksaT10LnosZj10LncsZD1lWzBdKmErZVs0XSpyK2VbOF0qaStlWzEyXSpmLGM9ZVsxXSphK2VbNV0qcitlWzldKmkrZVsxM10qZix1PWVbMl0qYStlWzZdKnIrZVsxMF0qaStlWzE0XSpmLGw9ZVszXSphK2VbN10qcitlWzExXSppK2VbMTVdKmY7cmV0dXJuIG8ueD1kLG8ueT1jLG8uej11LG8udz1sLG99c3RhdGljIG11bHRpcGx5QnlQb2ludEFzVmVjdG9yKGUsdCxvKXtsZXQgYT10Lngscj10LnksaT10LnosZj1lWzBdKmErZVs0XSpyK2VbOF0qaSxkPWVbMV0qYStlWzVdKnIrZVs5XSppLGM9ZVsyXSphK2VbNl0qcitlWzEwXSppO3JldHVybiBvLng9ZixvLnk9ZCxvLno9YyxvfXN0YXRpYyBtdWx0aXBseUJ5UG9pbnQoZSx0LG8pe2xldCBhPXQueCxyPXQueSxpPXQueixmPWVbMF0qYStlWzRdKnIrZVs4XSppK2VbMTJdLGQ9ZVsxXSphK2VbNV0qcitlWzldKmkrZVsxM10sYz1lWzJdKmErZVs2XSpyK2VbMTBdKmkrZVsxNF07cmV0dXJuIG8ueD1mLG8ueT1kLG8uej1jLG99c3RhdGljIG11bHRpcGx5QnlTY2FsYXIoZSx0LG8pe3JldHVybiBvWzBdPWVbMF0qdCxvWzFdPWVbMV0qdCxvWzJdPWVbMl0qdCxvWzNdPWVbM10qdCxvWzRdPWVbNF0qdCxvWzVdPWVbNV0qdCxvWzZdPWVbNl0qdCxvWzddPWVbN10qdCxvWzhdPWVbOF0qdCxvWzldPWVbOV0qdCxvWzEwXT1lWzEwXSp0LG9bMTFdPWVbMTFdKnQsb1sxMl09ZVsxMl0qdCxvWzEzXT1lWzEzXSp0LG9bMTRdPWVbMTRdKnQsb1sxNV09ZVsxNV0qdCxvfXN0YXRpYyBuZWdhdGUoZSx0KXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdFszXT0tZVszXSx0WzRdPS1lWzRdLHRbNV09LWVbNV0sdFs2XT0tZVs2XSx0WzddPS1lWzddLHRbOF09LWVbOF0sdFs5XT0tZVs5XSx0WzEwXT0tZVsxMF0sdFsxMV09LWVbMTFdLHRbMTJdPS1lWzEyXSx0WzEzXT0tZVsxM10sdFsxNF09LWVbMTRdLHRbMTVdPS1lWzE1XSx0fXN0YXRpYyB0cmFuc3Bvc2UoZSx0KXtsZXQgbz1lWzFdLGE9ZVsyXSxyPWVbM10saT1lWzZdLGY9ZVs3XSxkPWVbMTFdO3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09byx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1hLHRbOV09aSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1yLHRbMTNdPWYsdFsxNF09ZCx0WzE1XT1lWzE1XSx0fXN0YXRpYyBhYnMoZSx0KXtyZXR1cm4gdFswXT1NYXRoLmFicyhlWzBdKSx0WzFdPU1hdGguYWJzKGVbMV0pLHRbMl09TWF0aC5hYnMoZVsyXSksdFszXT1NYXRoLmFicyhlWzNdKSx0WzRdPU1hdGguYWJzKGVbNF0pLHRbNV09TWF0aC5hYnMoZVs1XSksdFs2XT1NYXRoLmFicyhlWzZdKSx0WzddPU1hdGguYWJzKGVbN10pLHRbOF09TWF0aC5hYnMoZVs4XSksdFs5XT1NYXRoLmFicyhlWzldKSx0WzEwXT1NYXRoLmFicyhlWzEwXSksdFsxMV09TWF0aC5hYnMoZVsxMV0pLHRbMTJdPU1hdGguYWJzKGVbMTJdKSx0WzEzXT1NYXRoLmFicyhlWzEzXSksdFsxNF09TWF0aC5hYnMoZVsxNF0pLHRbMTVdPU1hdGguYWJzKGVbMTVdKSx0fXN0YXRpYyBlcXVhbHMoZSx0KXtyZXR1cm4gZT09PXR8fGcoZSkmJmcodCkmJmVbMTJdPT09dFsxMl0mJmVbMTNdPT09dFsxM10mJmVbMTRdPT09dFsxNF0mJmVbMF09PT10WzBdJiZlWzFdPT09dFsxXSYmZVsyXT09PXRbMl0mJmVbNF09PT10WzRdJiZlWzVdPT09dFs1XSYmZVs2XT09PXRbNl0mJmVbOF09PT10WzhdJiZlWzldPT09dFs5XSYmZVsxMF09PT10WzEwXSYmZVszXT09PXRbM10mJmVbN109PT10WzddJiZlWzExXT09PXRbMTFdJiZlWzE1XT09PXRbMTVdfXN0YXRpYyBlcXVhbHNFcHNpbG9uKGUsdCxvKXtyZXR1cm4gbz1vPz8wLGU9PT10fHxnKGUpJiZnKHQpJiZNYXRoLmFicyhlWzBdLXRbMF0pPD1vJiZNYXRoLmFicyhlWzFdLXRbMV0pPD1vJiZNYXRoLmFicyhlWzJdLXRbMl0pPD1vJiZNYXRoLmFicyhlWzNdLXRbM10pPD1vJiZNYXRoLmFicyhlWzRdLXRbNF0pPD1vJiZNYXRoLmFicyhlWzVdLXRbNV0pPD1vJiZNYXRoLmFicyhlWzZdLXRbNl0pPD1vJiZNYXRoLmFicyhlWzddLXRbN10pPD1vJiZNYXRoLmFicyhlWzhdLXRbOF0pPD1vJiZNYXRoLmFicyhlWzldLXRbOV0pPD1vJiZNYXRoLmFicyhlWzEwXS10WzEwXSk8PW8mJk1hdGguYWJzKGVbMTFdLXRbMTFdKTw9byYmTWF0aC5hYnMoZVsxMl0tdFsxMl0pPD1vJiZNYXRoLmFicyhlWzEzXS10WzEzXSk8PW8mJk1hdGguYWJzKGVbMTRdLXRbMTRdKTw9byYmTWF0aC5hYnMoZVsxNV0tdFsxNV0pPD1vfXN0YXRpYyBnZXRUcmFuc2xhdGlvbihlLHQpe3JldHVybiB0Lng9ZVsxMl0sdC55PWVbMTNdLHQuej1lWzE0XSx0fXN0YXRpYyBnZXRNYXRyaXgzKGUsdCl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVs0XSx0WzRdPWVbNV0sdFs1XT1lWzZdLHRbNl09ZVs4XSx0WzddPWVbOV0sdFs4XT1lWzEwXSx0fXN0YXRpYyBpbnZlcnNlKGUsdCl7bGV0IG89ZVswXSxhPWVbNF0scj1lWzhdLGk9ZVsxMl0sZj1lWzFdLGQ9ZVs1XSxjPWVbOV0sdT1lWzEzXSxsPWVbMl0sbT1lWzZdLGg9ZVsxMF0sYj1lWzE0XSxwPWVbM10seT1lWzddLFQ9ZVsxMV0sXz1lWzE1XSx3PWgqXyxFPWIqVCxSPW0qXyxTPWIqeSxDPW0qVCxJPWgqeSxNPWwqXyxQPWIqcCxGPWwqVCxBPWgqcCx4PWwqeSxOPW0qcCx2PXcqZCtTKmMrQyp1LShFKmQrUipjK0kqdSksVT1FKmYrTSpjK0EqdS0odypmK1AqYytGKnUpLEw9UipmK1AqZCt4KnUtKFMqZitNKmQrTip1KSxEPUkqZitGKmQrTipjLShDKmYrQSpkK3gqYyksRz1FKmErUipyK0kqaS0odyphK1MqcitDKmkpLFY9dypvK1AqcitGKmktKEUqbytNKnIrQSppKSxPPVMqbytNKmErTippLShSKm8rUCphK3gqaSksSj1DKm8rQSphK3gqci0oSSpvK0YqYStOKnIpO3c9cip1LEU9aSpjLFI9YSp1LFM9aSpkLEM9YSpjLEk9cipkLE09byp1LFA9aSpmLEY9bypjLEE9cipmLHg9bypkLE49YSpmO2xldCByZT13KnkrUypUK0MqXy0oRSp5K1IqVCtJKl8pLHNlPUUqcCtNKlQrQSpfLSh3KnArUCpUK0YqXyksb2U9UipwK1AqeSt4Kl8tKFMqcCtNKnkrTipfKSxjZT1JKnArRip5K04qVC0oQypwK0EqeSt4KlQpLG1lPVIqaCtJKmIrRSptLShDKmIrdyptK1MqaCksZGU9RipiK3cqbCtQKmgtKE0qaCtBKmIrRSpsKSx5ZT1NKm0rTipiK1MqbC0oeCpiK1IqbCtQKm0pLGxlPXgqaCtDKmwrQSptLShGKm0rTipoK0kqbCksZWU9byp2K2EqVStyKkwraSpEO2lmKE1hdGguYWJzKGVlKTxrLkVQU0lMT04yMSl7aWYoWi5lcXVhbHNFcHNpbG9uKG4uZ2V0TWF0cml4MyhlLEZDKSxEQyxrLkVQU0lMT043KSYmcnQuZXF1YWxzKG4uZ2V0Um93KGUsMyxCQyksVUMpKXJldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MCx0WzExXT0wLHRbMTJdPS1lWzEyXSx0WzEzXT0tZVsxM10sdFsxNF09LWVbMTRdLHRbMTVdPTEsdDt0aHJvdyBuZXcgbnQoIm1hdHJpeCBpcyBub3QgaW52ZXJ0aWJsZSBiZWNhdXNlIGl0cyBkZXRlcm1pbmF0ZSBpcyB6ZXJvLiIpfXJldHVybiBlZT0xL2VlLHRbMF09diplZSx0WzFdPVUqZWUsdFsyXT1MKmVlLHRbM109RCplZSx0WzRdPUcqZWUsdFs1XT1WKmVlLHRbNl09TyplZSx0WzddPUoqZWUsdFs4XT1yZSplZSx0WzldPXNlKmVlLHRbMTBdPW9lKmVlLHRbMTFdPWNlKmVlLHRbMTJdPW1lKmVlLHRbMTNdPWRlKmVlLHRbMTRdPXllKmVlLHRbMTVdPWxlKmVlLHR9c3RhdGljIGludmVyc2VUcmFuc2Zvcm1hdGlvbihlLHQpe2xldCBvPWVbMF0sYT1lWzFdLHI9ZVsyXSxpPWVbNF0sZj1lWzVdLGQ9ZVs2XSxjPWVbOF0sdT1lWzldLGw9ZVsxMF0sbT1lWzEyXSxoPWVbMTNdLGI9ZVsxNF0scD0tbyptLWEqaC1yKmIseT0taSptLWYqaC1kKmIsVD0tYyptLXUqaC1sKmI7cmV0dXJuIHRbMF09byx0WzFdPWksdFsyXT1jLHRbM109MCx0WzRdPWEsdFs1XT1mLHRbNl09dSx0WzddPTAsdFs4XT1yLHRbOV09ZCx0WzEwXT1sLHRbMTFdPTAsdFsxMl09cCx0WzEzXT15LHRbMTRdPVQsdFsxNV09MSx0fXN0YXRpYyBpbnZlcnNlVHJhbnNwb3NlKGUsdCl7cmV0dXJuIG4uaW52ZXJzZShuLnRyYW5zcG9zZShlLGpDKSx0KX1nZXQgbGVuZ3RoKCl7cmV0dXJuIG4ucGFja2VkTGVuZ3RofWNsb25lKGUpe3JldHVybiBuLmNsb25lKHRoaXMsZSl9ZXF1YWxzKGUpe3JldHVybiBuLmVxdWFscyh0aGlzLGUpfXN0YXRpYyBlcXVhbHNBcnJheShlLHQsbyl7cmV0dXJuIGVbMF09PT10W29dJiZlWzFdPT09dFtvKzFdJiZlWzJdPT09dFtvKzJdJiZlWzNdPT09dFtvKzNdJiZlWzRdPT09dFtvKzRdJiZlWzVdPT09dFtvKzVdJiZlWzZdPT09dFtvKzZdJiZlWzddPT09dFtvKzddJiZlWzhdPT09dFtvKzhdJiZlWzldPT09dFtvKzldJiZlWzEwXT09PXRbbysxMF0mJmVbMTFdPT09dFtvKzExXSYmZVsxMl09PT10W28rMTJdJiZlWzEzXT09PXRbbysxM10mJmVbMTRdPT09dFtvKzE0XSYmZVsxNV09PT10W28rMTVdfWVxdWFsc0Vwc2lsb24oZSx0KXtyZXR1cm4gbi5lcXVhbHNFcHNpbG9uKHRoaXMsZSx0KX10b1N0cmluZygpe3JldHVybmAoJHt0aGlzWzBdfSwgJHt0aGlzWzRdfSwgJHt0aGlzWzhdfSwgJHt0aGlzWzEyXX0pCigke3RoaXNbMV19LCAke3RoaXNbNV19LCAke3RoaXNbOV19LCAke3RoaXNbMTNdfSkKKCR7dGhpc1syXX0sICR7dGhpc1s2XX0sICR7dGhpc1sxMF19LCAke3RoaXNbMTRdfSkKKCR7dGhpc1szXX0sICR7dGhpc1s3XX0sICR7dGhpc1sxMV19LCAke3RoaXNbMTVdfSlgfX07ZG4ucGFja2VkTGVuZ3RoPTE2O2RuLmZyb21BcnJheT1kbi51bnBhY2s7ZG4uSURFTlRJVFk9T2JqZWN0LmZyZWV6ZShuZXcgZG4oMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSkpO2RuLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgZG4oMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCkpO2RuLkNPTFVNTjBST1cwPTA7ZG4uQ09MVU1OMFJPVzE9MTtkbi5DT0xVTU4wUk9XMj0yO2RuLkNPTFVNTjBST1czPTM7ZG4uQ09MVU1OMVJPVzA9NDtkbi5DT0xVTU4xUk9XMT01O2RuLkNPTFVNTjFST1cyPTY7ZG4uQ09MVU1OMVJPVzM9Nztkbi5DT0xVTU4yUk9XMD04O2RuLkNPTFVNTjJST1cxPTk7ZG4uQ09MVU1OMlJPVzI9MTA7ZG4uQ09MVU1OMlJPVzM9MTE7ZG4uQ09MVU1OM1JPVzA9MTI7ZG4uQ09MVU1OM1JPVzE9MTM7ZG4uQ09MVU1OM1JPVzI9MTQ7ZG4uQ09MVU1OM1JPVzM9MTU7V2M9bmV3IHMsWGM9bmV3IHMseWY9bmV3IHMsSUM9bmV3IHMsUEM9bmV3IHMsZWI9bmV3IHMsRzE9bmV3IHMsa0M9bmV3IHMsdkM9bmV3IHMsRkM9bmV3IFosREM9bmV3IFosQkM9bmV3IHJ0LFVDPW5ldyBydCgwLDAsMCwxKSxqQz1uZXcgZG4sUT1kbn0pO2Z1bmN0aW9uIExDKG4sZSx0KXtsZXQgbz0wLGE9bi5sZW5ndGgtMSxyLGk7Zm9yKDtvPD1hOyl7aWYocj1+figobythKS8yKSxpPXQobltyXSxlKSxpPDApe289cisxO2NvbnRpbnVlfWlmKGk+MCl7YT1yLTE7Y29udGludWV9cmV0dXJuIHJ9cmV0dXJufihhKzEpfXZhciBnYSxzbD1YKCgpPT57Z2E9TEN9KTtmdW5jdGlvbiB6QyhuLGUsdCxvLGEpe3RoaXMueFBvbGVXYW5kZXI9bix0aGlzLnlQb2xlV2FuZGVyPWUsdGhpcy54UG9sZU9mZnNldD10LHRoaXMueVBvbGVPZmZzZXQ9byx0aGlzLnV0MU1pbnVzVXRjPWF9dmFyIEFmLHRiPVgoKCk9PntBZj16Q30pO2Z1bmN0aW9uIEdDKG4pe3JldHVybiBuJTQ9PT0wJiZuJTEwMCE9PTB8fG4lNDAwPT09MH12YXIgd2YsbmI9WCgoKT0+e3dmPUdDfSk7ZnVuY3Rpb24gVkMobixlLHQsbyxhLHIsaSxmKXtuPW4/PzEsZT1lPz8xLHQ9dD8/MSxvPW8/PzAsYT1hPz8wLHI9cj8/MCxpPWk/PzAsZj1mPz8hMSx0aGlzLnllYXI9bix0aGlzLm1vbnRoPWUsdGhpcy5kYXk9dCx0aGlzLmhvdXI9byx0aGlzLm1pbnV0ZT1hLHRoaXMuc2Vjb25kPXIsdGhpcy5taWxsaXNlY29uZD1pLHRoaXMuaXNMZWFwU2Vjb25kPWY7ZnVuY3Rpb24gcCgpe1JuLnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiWWVhciIsbiwxKSxSbi50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIlllYXIiLG4sOTk5OSksUm4udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJNb250aCIsZSwxKSxSbi50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIk1vbnRoIixlLDEyKSxSbi50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIkRheSIsdCwxKSxSbi50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIkRheSIsdCwzMSksUm4udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJIb3VyIixvLDApLFJuLnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiSG91ciIsbywyMyksUm4udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJNaW51dGUiLGEsMCksUm4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJNaW51dGUiLGEsNTkpLFJuLnR5cGVPZi5ib29sKCJJc0xlYXBTZWNvbmQiLGYpLFJuLnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiU2Vjb25kIixyLDApLFJuLnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiU2Vjb25kIixyLGY/NjA6NTkpLFJuLnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiTWlsbGlzZWNvbmQiLGksMCksUm4udHlwZU9mLm51bWJlci5sZXNzVGhhbigiTWlsbGlzZWNvbmQiLGksMWUzKX1mdW5jdGlvbiB5KCl7bGV0IFQ9ZT09PTImJndmKG4pP1YxW2UtMV0rMTpWMVtlLTFdO2lmKHQ+VCl0aHJvdyBuZXcgVnQoIk1vbnRoIGFuZCBEYXkgcmVwcmVzZW50cyBpbnZhbGlkIGRhdGUiKX19dmFyIFYxLG9iLEgxPVgoKCk9PntIbSgpO0ppKCk7bmIoKTtWMT1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO29iPVZDfSk7ZnVuY3Rpb24gSEMobixlKXt0aGlzLmp1bGlhbkRhdGU9bix0aGlzLm9mZnNldD1lfXZhciBXdCxhYj1YKCgpPT57V3Q9SEN9KTt2YXIgSzEsbG4sZmw9WCgoKT0+e0sxPXtTRUNPTkRTX1BFUl9NSUxMSVNFQ09ORDouMDAxLFNFQ09ORFNfUEVSX01JTlVURTo2MCxNSU5VVEVTX1BFUl9IT1VSOjYwLEhPVVJTX1BFUl9EQVk6MjQsU0VDT05EU19QRVJfSE9VUjozNjAwLE1JTlVURVNfUEVSX0RBWToxNDQwLFNFQ09ORFNfUEVSX0RBWTo4NjQwMCxEQVlTX1BFUl9KVUxJQU5fQ0VOVFVSWTozNjUyNSxQSUNPU0VDT05EOjFlLTksTU9ESUZJRURfSlVMSUFOX0RBVEVfRElGRkVSRU5DRToyNDAwMDAwNWUtMX07T2JqZWN0LmZyZWV6ZShLMSk7bG49SzF9KTt2YXIgcTEsaHQsZGw9WCgoKT0+e3ExPXtVVEM6MCxUQUk6MX07T2JqZWN0LmZyZWV6ZShxMSk7aHQ9cTF9KTtmdW5jdGlvbiBzYihuLGUpe3JldHVybiBmdC5jb21wYXJlKG4uanVsaWFuRGF0ZSxlLmp1bGlhbkRhdGUpfWZ1bmN0aW9uIHVsKG4pe1ljLmp1bGlhbkRhdGU9bjtsZXQgZT1mdC5sZWFwU2Vjb25kcyx0PWdhKGUsWWMsc2IpO3Q8MCYmKHQ9fnQpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aC0xKTtsZXQgbz1lW3RdLm9mZnNldDt0PjAmJmZ0LnNlY29uZHNEaWZmZXJlbmNlKGVbdF0uanVsaWFuRGF0ZSxuKT5vJiYodC0tLG89ZVt0XS5vZmZzZXQpLGZ0LmFkZFNlY29uZHMobixvLG4pfWZ1bmN0aW9uIFgxKG4sZSl7WWMuanVsaWFuRGF0ZT1uO2xldCB0PWZ0LmxlYXBTZWNvbmRzLG89Z2EodCxZYyxzYik7aWYobzwwJiYobz1+byksbz09PTApcmV0dXJuIGZ0LmFkZFNlY29uZHMobiwtdFswXS5vZmZzZXQsZSk7aWYobz49dC5sZW5ndGgpcmV0dXJuIGZ0LmFkZFNlY29uZHMobiwtdFtvLTFdLm9mZnNldCxlKTtsZXQgYT1mdC5zZWNvbmRzRGlmZmVyZW5jZSh0W29dLmp1bGlhbkRhdGUsbik7aWYoYT09PTApcmV0dXJuIGZ0LmFkZFNlY29uZHMobiwtdFtvXS5vZmZzZXQsZSk7aWYoIShhPD0xKSlyZXR1cm4gZnQuYWRkU2Vjb25kcyhuLC10W28tMV0ub2Zmc2V0LGUpfWZ1bmN0aW9uIGZpKG4sZSx0KXtsZXQgbz1lL2xuLlNFQ09ORFNfUEVSX0RBWXwwO3JldHVybiBuKz1vLGUtPWxuLlNFQ09ORFNfUEVSX0RBWSpvLGU8MCYmKG4tLSxlKz1sbi5TRUNPTkRTX1BFUl9EQVkpLHQuZGF5TnVtYmVyPW4sdC5zZWNvbmRzT2ZEYXk9ZSx0fWZ1bmN0aW9uIGNiKG4sZSx0LG8sYSxyLGkpe2xldCBmPShlLTE0KS8xMnwwLGQ9bis0ODAwK2YsYz0oMTQ2MSpkLzR8MCkrKDM2NyooZS0yLTEyKmYpLzEyfDApLSgzKigoZCsxMDApLzEwMHwwKS80fDApK3QtMzIwNzU7bz1vLTEyLG88MCYmKG8rPTI0KTtsZXQgdT1yKyhvKmxuLlNFQ09ORFNfUEVSX0hPVVIrYSpsbi5TRUNPTkRTX1BFUl9NSU5VVEUraSpsbi5TRUNPTkRTX1BFUl9NSUxMSVNFQ09ORCk7cmV0dXJuIHU+PTQzMjAwJiYoYy09MSksW2MsdV19dmFyIFcxLHJiLGliLFljLEtDLHFDLFdDLFhDLFlDLGZiLEpDLFpDLFFDLGZ0LGxsLEtuLGhsPVgoKCk9PntzbCgpO2ZlKCk7SDEoKTtuYigpO2FiKCk7ZmwoKTtkbCgpO1cxPW5ldyBvYixyYj1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGliPTI5O1ljPW5ldyBXdDtLQz0vXihcZHs0fSkkLyxxQz0vXihcZHs0fSktKFxkezJ9KSQvLFdDPS9eKFxkezR9KS0/KFxkezN9KSQvLFhDPS9eKFxkezR9KS0/VyhcZHsyfSktPyhcZHsxfSk/JC8sWUM9L14oXGR7NH0pLT8oXGR7Mn0pLT8oXGR7Mn0pJC8sZmI9LyhbWitcLV0pPyhcZHsyfSk/Oj8oXGR7Mn0pPyQvLEpDPS9eKFxkezJ9KShcLlxkKyk/Ly5zb3VyY2UrZmIuc291cmNlLFpDPS9eKFxkezJ9KTo/KFxkezJ9KShcLlxkKyk/Ly5zb3VyY2UrZmIuc291cmNlLFFDPS9eKFxkezJ9KTo/KFxkezJ9KTo/KFxkezJ9KShcLlxkKyk/Ly5zb3VyY2UrZmIuc291cmNlLGZ0PWNsYXNzIG57Y29uc3RydWN0b3IoZSx0LG8pe3RoaXMuZGF5TnVtYmVyPXZvaWQgMCx0aGlzLnNlY29uZHNPZkRheT12b2lkIDAsZT1lPz8wLHQ9dD8/MCxvPW8/P2h0LlVUQztsZXQgYT1lfDA7dD10KyhlLWEpKmxuLlNFQ09ORFNfUEVSX0RBWSxmaShhLHQsdGhpcyksbz09PWh0LlVUQyYmdWwodGhpcyl9c3RhdGljIGZyb21HcmVnb3JpYW5EYXRlKGUsdCl7bGV0IG89Y2IoZS55ZWFyLGUubW9udGgsZS5kYXksZS5ob3VyLGUubWludXRlLGUuc2Vjb25kLGUubWlsbGlzZWNvbmQpO3JldHVybiBnKHQpPyhmaShvWzBdLG9bMV0sdCksdWwodCksdCk6bmV3IG4ob1swXSxvWzFdLGh0LlVUQyl9c3RhdGljIGZyb21EYXRlKGUsdCl7bGV0IG89Y2IoZS5nZXRVVENGdWxsWWVhcigpLGUuZ2V0VVRDTW9udGgoKSsxLGUuZ2V0VVRDRGF0ZSgpLGUuZ2V0VVRDSG91cnMoKSxlLmdldFVUQ01pbnV0ZXMoKSxlLmdldFVUQ1NlY29uZHMoKSxlLmdldFVUQ01pbGxpc2Vjb25kcygpKTtyZXR1cm4gZyh0KT8oZmkob1swXSxvWzFdLHQpLHVsKHQpLHQpOm5ldyBuKG9bMF0sb1sxXSxodC5VVEMpfXN0YXRpYyBmcm9tSXNvODYwMShlLHQpe2U9ZS5yZXBsYWNlKCIsIiwiLiIpO2xldCBvPWUuc3BsaXQoIlQiKSxhLHI9MSxpPTEsZj0wLGQ9MCxjPTAsdT0wLGw9b1swXSxtPW9bMV0saCxiO2lmKG89bC5tYXRjaChZQyksbyE9PW51bGwpYT0rb1sxXSxyPStvWzJdLGk9K29bM107ZWxzZSBpZihvPWwubWF0Y2gocUMpLG8hPT1udWxsKWE9K29bMV0scj0rb1syXTtlbHNlIGlmKG89bC5tYXRjaChLQyksbyE9PW51bGwpYT0rb1sxXTtlbHNle2xldCBfO2lmKG89bC5tYXRjaChXQyksbyE9PW51bGwpYT0rb1sxXSxfPStvWzJdLGI9d2YoYSk7ZWxzZSBpZihvPWwubWF0Y2goWEMpLG8hPT1udWxsKXthPStvWzFdO2xldCB3PStvWzJdLEU9K29bM118fDAsUj1uZXcgRGF0ZShEYXRlLlVUQyhhLDAsNCkpO189dyo3K0UtUi5nZXRVVENEYXkoKS0zfWg9bmV3IERhdGUoRGF0ZS5VVEMoYSwwLDEpKSxoLnNldFVUQ0RhdGUoXykscj1oLmdldFVUQ01vbnRoKCkrMSxpPWguZ2V0VVRDRGF0ZSgpfWI9d2YoYSk7bGV0IHA7aWYoZyhtKSl7bz1tLm1hdGNoKFFDKSxvIT09bnVsbD8oZj0rb1sxXSxkPStvWzJdLGM9K29bM10sdT0rKG9bNF18fDApKjFlMyxwPTUpOihvPW0ubWF0Y2goWkMpLG8hPT1udWxsPyhmPStvWzFdLGQ9K29bMl0sYz0rKG9bM118fDApKjYwLHA9NCk6KG89bS5tYXRjaChKQyksbyE9PW51bGwmJihmPStvWzFdLGQ9KyhvWzJdfHwwKSo2MCxwPTMpKSk7bGV0IF89b1twXSx3PStvW3ArMV0sRT0rKG9bcCsyXXx8MCk7c3dpdGNoKF8pe2Nhc2UiKyI6Zj1mLXcsZD1kLUU7YnJlYWs7Y2FzZSItIjpmPWYrdyxkPWQrRTticmVhaztjYXNlIloiOmJyZWFrO2RlZmF1bHQ6ZD1kK25ldyBEYXRlKERhdGUuVVRDKGEsci0xLGksZixkKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTticmVha319bGV0IHk9Yz09PTYwO2Zvcih5JiZjLS07ZD49NjA7KWQtPTYwLGYrKztmb3IoO2Y+PTI0OylmLT0yNCxpKys7Zm9yKGg9YiYmcj09PTI/aWI6cmJbci0xXTtpPmg7KWktPWgscisrLHI+MTImJihyLT0xMixhKyspLGg9YiYmcj09PTI/aWI6cmJbci0xXTtmb3IoO2Q8MDspZCs9NjAsZi0tO2Zvcig7ZjwwOylmKz0yNCxpLS07Zm9yKDtpPDE7KXItLSxyPDEmJihyKz0xMixhLS0pLGg9YiYmcj09PTI/aWI6cmJbci0xXSxpKz1oO2xldCBUPWNiKGEscixpLGYsZCxjLHUpO3JldHVybiBnKHQpPyhmaShUWzBdLFRbMV0sdCksdWwodCkpOnQ9bmV3IG4oVFswXSxUWzFdLGh0LlVUQykseSYmbi5hZGRTZWNvbmRzKHQsMSx0KSx0fXN0YXRpYyBub3coZSl7cmV0dXJuIG4uZnJvbURhdGUobmV3IERhdGUsZSl9c3RhdGljIHRvR3JlZ29yaWFuRGF0ZShlLHQpe2xldCBvPSExLGE9WDEoZSxsbCk7ZyhhKXx8KG4uYWRkU2Vjb25kcyhlLC0xLGxsKSxhPVgxKGxsLGxsKSxvPSEwKTtsZXQgcj1hLmRheU51bWJlcixpPWEuc2Vjb25kc09mRGF5O2k+PTQzMjAwJiYocis9MSk7bGV0IGY9cis2ODU2OXwwLGQ9NCpmLzE0NjA5N3wwO2Y9Zi0oKDE0NjA5NypkKzMpLzR8MCl8MDtsZXQgYz00ZTMqKGYrMSkvMTQ2MTAwMXwwO2Y9Zi0oMTQ2MSpjLzR8MCkrMzF8MDtsZXQgdT04MCpmLzI0NDd8MCxsPWYtKDI0NDcqdS84MHwwKXwwO2Y9dS8xMXwwO2xldCBtPXUrMi0xMipmfDAsaD0xMDAqKGQtNDkpK2MrZnwwLGI9aS9sbi5TRUNPTkRTX1BFUl9IT1VSfDAscD1pLWIqbG4uU0VDT05EU19QRVJfSE9VUix5PXAvbG4uU0VDT05EU19QRVJfTUlOVVRFfDA7cD1wLXkqbG4uU0VDT05EU19QRVJfTUlOVVRFO2xldCBUPXB8MCxfPShwLVQpL2xuLlNFQ09ORFNfUEVSX01JTExJU0VDT05EO3JldHVybiBiKz0xMixiPjIzJiYoYi09MjQpLG8mJihUKz0xKSxnKHQpPyh0LnllYXI9aCx0Lm1vbnRoPW0sdC5kYXk9bCx0LmhvdXI9Yix0Lm1pbnV0ZT15LHQuc2Vjb25kPVQsdC5taWxsaXNlY29uZD1fLHQuaXNMZWFwU2Vjb25kPW8sdCk6bmV3IG9iKGgsbSxsLGIseSxULF8sbyl9c3RhdGljIHRvRGF0ZShlKXtsZXQgdD1uLnRvR3JlZ29yaWFuRGF0ZShlLFcxKSxvPXQuc2Vjb25kO3JldHVybiB0LmlzTGVhcFNlY29uZCYmKG8tPTEpLG5ldyBEYXRlKERhdGUuVVRDKHQueWVhcix0Lm1vbnRoLTEsdC5kYXksdC5ob3VyLHQubWludXRlLG8sdC5taWxsaXNlY29uZCkpfXN0YXRpYyB0b0lzbzg2MDEoZSx0KXtsZXQgbz1uLnRvR3JlZ29yaWFuRGF0ZShlLFcxKSxhPW8ueWVhcixyPW8ubW9udGgsaT1vLmRheSxmPW8uaG91cixkPW8ubWludXRlLGM9by5zZWNvbmQsdT1vLm1pbGxpc2Vjb25kO2E9PT0xZTQmJnI9PT0xJiZpPT09MSYmZj09PTAmJmQ9PT0wJiZjPT09MCYmdT09PTAmJihhPTk5OTkscj0xMixpPTMxLGY9MjQpO2xldCBsO2lmKCFnKHQpJiZ1IT09MCl7bGV0IG09dSouMDE7cmV0dXJuIGw9bTwxZS02P20udG9GaXhlZCgyMCkucmVwbGFjZSgiLiIsIiIpLnJlcGxhY2UoLzArJC8sIiIpOm0udG9TdHJpbmcoKS5yZXBsYWNlKCIuIiwiIiksYCR7YS50b1N0cmluZygpLnBhZFN0YXJ0KDQsIjAiKX0tJHtyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS0ke2kudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9VCR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtkLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke2MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LiR7bH1aYH1yZXR1cm4hZyh0KXx8dD09PTA/YCR7YS50b1N0cmluZygpLnBhZFN0YXJ0KDQsIjAiKX0tJHtyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS0ke2kudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9VCR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtkLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke2MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9WmA6KGw9KHUqLjAxKS50b0ZpeGVkKHQpLnJlcGxhY2UoIi4iLCIiKS5zbGljZSgwLHQpLGAke2EudG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke2YudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7ZC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtjLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS4ke2x9WmApfXN0YXRpYyBjbG9uZShlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQuZGF5TnVtYmVyPWUuZGF5TnVtYmVyLHQuc2Vjb25kc09mRGF5PWUuc2Vjb25kc09mRGF5LHQpOm5ldyBuKGUuZGF5TnVtYmVyLGUuc2Vjb25kc09mRGF5LGh0LlRBSSl9c3RhdGljIGNvbXBhcmUoZSx0KXtsZXQgbz1lLmRheU51bWJlci10LmRheU51bWJlcjtyZXR1cm4gbyE9PTA/bzplLnNlY29uZHNPZkRheS10LnNlY29uZHNPZkRheX1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIGU9PT10fHxnKGUpJiZnKHQpJiZlLmRheU51bWJlcj09PXQuZGF5TnVtYmVyJiZlLnNlY29uZHNPZkRheT09PXQuc2Vjb25kc09mRGF5fXN0YXRpYyBlcXVhbHNFcHNpbG9uKGUsdCxvKXtyZXR1cm4gbz1vPz8wLGU9PT10fHxnKGUpJiZnKHQpJiZNYXRoLmFicyhuLnNlY29uZHNEaWZmZXJlbmNlKGUsdCkpPD1vfXN0YXRpYyB0b3RhbERheXMoZSl7cmV0dXJuIGUuZGF5TnVtYmVyK2Uuc2Vjb25kc09mRGF5L2xuLlNFQ09ORFNfUEVSX0RBWX1zdGF0aWMgc2Vjb25kc0RpZmZlcmVuY2UoZSx0KXtyZXR1cm4oZS5kYXlOdW1iZXItdC5kYXlOdW1iZXIpKmxuLlNFQ09ORFNfUEVSX0RBWSsoZS5zZWNvbmRzT2ZEYXktdC5zZWNvbmRzT2ZEYXkpfXN0YXRpYyBkYXlzRGlmZmVyZW5jZShlLHQpe2xldCBvPWUuZGF5TnVtYmVyLXQuZGF5TnVtYmVyLGE9KGUuc2Vjb25kc09mRGF5LXQuc2Vjb25kc09mRGF5KS9sbi5TRUNPTkRTX1BFUl9EQVk7cmV0dXJuIG8rYX1zdGF0aWMgY29tcHV0ZVRhaU1pbnVzVXRjKGUpe1ljLmp1bGlhbkRhdGU9ZTtsZXQgdD1uLmxlYXBTZWNvbmRzLG89Z2EodCxZYyxzYik7cmV0dXJuIG88MCYmKG89fm8sLS1vLG88MCYmKG89MCkpLHRbb10ub2Zmc2V0fXN0YXRpYyBhZGRTZWNvbmRzKGUsdCxvKXtyZXR1cm4gZmkoZS5kYXlOdW1iZXIsZS5zZWNvbmRzT2ZEYXkrdCxvKX1zdGF0aWMgYWRkTWludXRlcyhlLHQsbyl7bGV0IGE9ZS5zZWNvbmRzT2ZEYXkrdCpsbi5TRUNPTkRTX1BFUl9NSU5VVEU7cmV0dXJuIGZpKGUuZGF5TnVtYmVyLGEsbyl9c3RhdGljIGFkZEhvdXJzKGUsdCxvKXtsZXQgYT1lLnNlY29uZHNPZkRheSt0KmxuLlNFQ09ORFNfUEVSX0hPVVI7cmV0dXJuIGZpKGUuZGF5TnVtYmVyLGEsbyl9c3RhdGljIGFkZERheXMoZSx0LG8pe2xldCBhPWUuZGF5TnVtYmVyK3Q7cmV0dXJuIGZpKGEsZS5zZWNvbmRzT2ZEYXksbyl9c3RhdGljIGxlc3NUaGFuKGUsdCl7cmV0dXJuIG4uY29tcGFyZShlLHQpPDB9c3RhdGljIGxlc3NUaGFuT3JFcXVhbHMoZSx0KXtyZXR1cm4gbi5jb21wYXJlKGUsdCk8PTB9c3RhdGljIGdyZWF0ZXJUaGFuKGUsdCl7cmV0dXJuIG4uY29tcGFyZShlLHQpPjB9c3RhdGljIGdyZWF0ZXJUaGFuT3JFcXVhbHMoZSx0KXtyZXR1cm4gbi5jb21wYXJlKGUsdCk+PTB9Y2xvbmUoZSl7cmV0dXJuIG4uY2xvbmUodGhpcyxlKX1lcXVhbHMoZSl7cmV0dXJuIG4uZXF1YWxzKHRoaXMsZSl9ZXF1YWxzRXBzaWxvbihlLHQpe3JldHVybiBuLmVxdWFsc0Vwc2lsb24odGhpcyxlLHQpfXRvU3RyaW5nKCl7cmV0dXJuIG4udG9Jc284NjAxKHRoaXMpfX0sbGw9bmV3IGZ0KDAsMCxodC5UQUkpO2Z0LmxlYXBTZWNvbmRzPVtuZXcgV3QobmV3IGZ0KDI0NDEzMTcsNDMyMTAsaHQuVEFJKSwxMCksbmV3IFd0KG5ldyBmdCgyNDQxNDk5LDQzMjExLGh0LlRBSSksMTEpLG5ldyBXdChuZXcgZnQoMjQ0MTY4Myw0MzIxMixodC5UQUkpLDEyKSxuZXcgV3QobmV3IGZ0KDI0NDIwNDgsNDMyMTMsaHQuVEFJKSwxMyksbmV3IFd0KG5ldyBmdCgyNDQyNDEzLDQzMjE0LGh0LlRBSSksMTQpLG5ldyBXdChuZXcgZnQoMjQ0Mjc3OCw0MzIxNSxodC5UQUkpLDE1KSxuZXcgV3QobmV3IGZ0KDI0NDMxNDQsNDMyMTYsaHQuVEFJKSwxNiksbmV3IFd0KG5ldyBmdCgyNDQzNTA5LDQzMjE3LGh0LlRBSSksMTcpLG5ldyBXdChuZXcgZnQoMjQ0Mzg3NCw0MzIxOCxodC5UQUkpLDE4KSxuZXcgV3QobmV3IGZ0KDI0NDQyMzksNDMyMTksaHQuVEFJKSwxOSksbmV3IFd0KG5ldyBmdCgyNDQ0Nzg2LDQzMjIwLGh0LlRBSSksMjApLG5ldyBXdChuZXcgZnQoMjQ0NTE1MSw0MzIyMSxodC5UQUkpLDIxKSxuZXcgV3QobmV3IGZ0KDI0NDU1MTYsNDMyMjIsaHQuVEFJKSwyMiksbmV3IFd0KG5ldyBmdCgyNDQ2MjQ3LDQzMjIzLGh0LlRBSSksMjMpLG5ldyBXdChuZXcgZnQoMjQ0NzE2MSw0MzIyNCxodC5UQUkpLDI0KSxuZXcgV3QobmV3IGZ0KDI0NDc4OTIsNDMyMjUsaHQuVEFJKSwyNSksbmV3IFd0KG5ldyBmdCgyNDQ4MjU3LDQzMjI2LGh0LlRBSSksMjYpLG5ldyBXdChuZXcgZnQoMjQ0ODgwNCw0MzIyNyxodC5UQUkpLDI3KSxuZXcgV3QobmV3IGZ0KDI0NDkxNjksNDMyMjgsaHQuVEFJKSwyOCksbmV3IFd0KG5ldyBmdCgyNDQ5NTM0LDQzMjI5LGh0LlRBSSksMjkpLG5ldyBXdChuZXcgZnQoMjQ1MDA4Myw0MzIzMCxodC5UQUkpLDMwKSxuZXcgV3QobmV3IGZ0KDI0NTA2MzAsNDMyMzEsaHQuVEFJKSwzMSksbmV3IFd0KG5ldyBmdCgyNDUxMTc5LDQzMjMyLGh0LlRBSSksMzIpLG5ldyBXdChuZXcgZnQoMjQ1MzczNiw0MzIzMyxodC5UQUkpLDMzKSxuZXcgV3QobmV3IGZ0KDI0NTQ4MzIsNDMyMzQsaHQuVEFJKSwzNCksbmV3IFd0KG5ldyBmdCgyNDU2MTA5LDQzMjM1LGh0LlRBSSksMzUpLG5ldyBXdChuZXcgZnQoMjQ1NzIwNCw0MzIzNixodC5UQUkpLDM2KSxuZXcgV3QobmV3IGZ0KDI0NTc3NTQsNDMyMzcsaHQuVEFJKSwzNyldO0tuPWZ0fSk7dmFyIFkxPXNpKChKYyxaYyk9PnsvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqLyhmdW5jdGlvbihuKXt2YXIgZT10eXBlb2YgSmM9PSJvYmplY3QiJiZKYyYmIUpjLm5vZGVUeXBlJiZKYyx0PXR5cGVvZiBaYz09Im9iamVjdCImJlpjJiYhWmMubm9kZVR5cGUmJlpjLG89dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbDsoby5nbG9iYWw9PT1vfHxvLndpbmRvdz09PW98fG8uc2VsZj09PW8pJiYobj1vKTt2YXIgYSxyPTIxNDc0ODM2NDcsaT0zNixmPTEsZD0yNixjPTM4LHU9NzAwLGw9NzIsbT0xMjgsaD0iLSIsYj0vXnhuLS0vLHA9L1teXHgyMC1ceDdFXS8seT0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csVD17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sXz1pLWYsdz1NYXRoLmZsb29yLEU9U3RyaW5nLmZyb21DaGFyQ29kZSxSO2Z1bmN0aW9uIFMoRCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoVFtEXSl9ZnVuY3Rpb24gQyhELEcpe2Zvcih2YXIgVj1ELmxlbmd0aCxPPVtdO1YtLTspT1tWXT1HKERbVl0pO3JldHVybiBPfWZ1bmN0aW9uIEkoRCxHKXt2YXIgVj1ELnNwbGl0KCJAIiksTz0iIjtWLmxlbmd0aD4xJiYoTz1WWzBdKyJAIixEPVZbMV0pLEQ9RC5yZXBsYWNlKHksIi4iKTt2YXIgSj1ELnNwbGl0KCIuIikscmU9QyhKLEcpLmpvaW4oIi4iKTtyZXR1cm4gTytyZX1mdW5jdGlvbiBNKEQpe2Zvcih2YXIgRz1bXSxWPTAsTz1ELmxlbmd0aCxKLHJlO1Y8TzspSj1ELmNoYXJDb2RlQXQoVisrKSxKPj01NTI5NiYmSjw9NTYzMTkmJlY8Tz8ocmU9RC5jaGFyQ29kZUF0KFYrKyksKHJlJjY0NTEyKT09NTYzMjA/Ry5wdXNoKCgoSiYxMDIzKTw8MTApKyhyZSYxMDIzKSs2NTUzNik6KEcucHVzaChKKSxWLS0pKTpHLnB1c2goSik7cmV0dXJuIEd9ZnVuY3Rpb24gUChEKXtyZXR1cm4gQyhELGZ1bmN0aW9uKEcpe3ZhciBWPSIiO3JldHVybiBHPjY1NTM1JiYoRy09NjU1MzYsVis9RShHPj4+MTAmMTAyM3w1NTI5NiksRz01NjMyMHxHJjEwMjMpLFYrPUUoRyksVn0pLmpvaW4oIiIpfWZ1bmN0aW9uIEYoRCl7cmV0dXJuIEQtNDg8MTA/RC0yMjpELTY1PDI2P0QtNjU6RC05NzwyNj9ELTk3Oml9ZnVuY3Rpb24gQShELEcpe3JldHVybiBEKzIyKzc1KihEPDI2KS0oKEchPTApPDw1KX1mdW5jdGlvbiB4KEQsRyxWKXt2YXIgTz0wO2ZvcihEPVY/dyhEL3UpOkQ+PjEsRCs9dyhEL0cpO0Q+XypkPj4xO08rPWkpRD13KEQvXyk7cmV0dXJuIHcoTysoXysxKSpELyhEK2MpKX1mdW5jdGlvbiBOKEQpe3ZhciBHPVtdLFY9RC5sZW5ndGgsTyxKPTAscmU9bSxzZT1sLG9lLGNlLG1lLGRlLHllLGxlLGVlLEVlLENlO2ZvcihvZT1ELmxhc3RJbmRleE9mKGgpLG9lPDAmJihvZT0wKSxjZT0wO2NlPG9lOysrY2UpRC5jaGFyQ29kZUF0KGNlKT49MTI4JiZTKCJub3QtYmFzaWMiKSxHLnB1c2goRC5jaGFyQ29kZUF0KGNlKSk7Zm9yKG1lPW9lPjA/b2UrMTowO21lPFY7KXtmb3IoZGU9Six5ZT0xLGxlPWk7bWU+PVYmJlMoImludmFsaWQtaW5wdXQiKSxlZT1GKEQuY2hhckNvZGVBdChtZSsrKSksKGVlPj1pfHxlZT53KChyLUopL3llKSkmJlMoIm92ZXJmbG93IiksSis9ZWUqeWUsRWU9bGU8PXNlP2Y6bGU+PXNlK2Q/ZDpsZS1zZSwhKGVlPEVlKTtsZSs9aSlDZT1pLUVlLHllPncoci9DZSkmJlMoIm92ZXJmbG93IikseWUqPUNlO089Ry5sZW5ndGgrMSxzZT14KEotZGUsTyxkZT09MCksdyhKL08pPnItcmUmJlMoIm92ZXJmbG93IikscmUrPXcoSi9PKSxKJT1PLEcuc3BsaWNlKEorKywwLHJlKX1yZXR1cm4gUChHKX1mdW5jdGlvbiB2KEQpe3ZhciBHLFYsTyxKLHJlLHNlLG9lLGNlLG1lLGRlLHllLGxlPVtdLGVlLEVlLENlLFdlO2ZvcihEPU0oRCksZWU9RC5sZW5ndGgsRz1tLFY9MCxyZT1sLHNlPTA7c2U8ZWU7KytzZSl5ZT1EW3NlXSx5ZTwxMjgmJmxlLnB1c2goRSh5ZSkpO2ZvcihPPUo9bGUubGVuZ3RoLEomJmxlLnB1c2goaCk7TzxlZTspe2ZvcihvZT1yLHNlPTA7c2U8ZWU7KytzZSl5ZT1EW3NlXSx5ZT49RyYmeWU8b2UmJihvZT15ZSk7Zm9yKEVlPU8rMSxvZS1HPncoKHItVikvRWUpJiZTKCJvdmVyZmxvdyIpLFYrPShvZS1HKSpFZSxHPW9lLHNlPTA7c2U8ZWU7KytzZSlpZih5ZT1EW3NlXSx5ZTxHJiYrK1Y+ciYmUygib3ZlcmZsb3ciKSx5ZT09Ryl7Zm9yKGNlPVYsbWU9aTtkZT1tZTw9cmU/ZjptZT49cmUrZD9kOm1lLXJlLCEoY2U8ZGUpO21lKz1pKVdlPWNlLWRlLENlPWktZGUsbGUucHVzaChFKEEoZGUrV2UlQ2UsMCkpKSxjZT13KFdlL0NlKTtsZS5wdXNoKEUoQShjZSwwKSkpLHJlPXgoVixFZSxPPT1KKSxWPTAsKytPfSsrViwrK0d9cmV0dXJuIGxlLmpvaW4oIiIpfWZ1bmN0aW9uIFUoRCl7cmV0dXJuIEkoRCxmdW5jdGlvbihHKXtyZXR1cm4gYi50ZXN0KEcpP04oRy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpHfSl9ZnVuY3Rpb24gTChEKXtyZXR1cm4gSShELGZ1bmN0aW9uKEcpe3JldHVybiBwLnRlc3QoRyk/InhuLS0iK3YoRyk6R30pfWlmKGE9e3ZlcnNpb246IjEuMy4yIix1Y3MyOntkZWNvZGU6TSxlbmNvZGU6UH0sZGVjb2RlOk4sZW5jb2RlOnYsdG9BU0NJSTpMLHRvVW5pY29kZTpVfSx0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZ0eXBlb2YgZGVmaW5lLmFtZD09Im9iamVjdCImJmRlZmluZS5hbWQpZGVmaW5lKCJwdW55Y29kZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO2Vsc2UgaWYoZSYmdClpZihaYy5leHBvcnRzPT1lKXQuZXhwb3J0cz1hO2Vsc2UgZm9yKFIgaW4gYSlhLmhhc093blByb3BlcnR5KFIpJiYoZVtSXT1hW1JdKTtlbHNlIG4ucHVueWNvZGU9YX0pKEpjKX0pO3ZhciBaMT1zaSgoSjEsbWwpPT57LyohCiAqIFVSSS5qcyAtIE11dGF0aW5nIFVSTHMKICogSVB2NiBTdXBwb3J0CiAqCiAqIFZlcnNpb246IDEuMTkuMTEKICoKICogQXV0aG9yOiBSb2RuZXkgUmVobQogKiBXZWI6IGh0dHA6Ly9tZWRpYWxpemUuZ2l0aHViLmlvL1VSSS5qcy8KICoKICogTGljZW5zZWQgdW5kZXIKICogICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlCiAqCiAqLyhmdW5jdGlvbihuLGUpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2YgbWw9PSJvYmplY3QiJiZtbC5leHBvcnRzP21sLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOm4uSVB2Nj1lKG4pfSkoSjEsZnVuY3Rpb24obil7InVzZSBzdHJpY3QiO3ZhciBlPW4mJm4uSVB2NjtmdW5jdGlvbiB0KGEpe3ZhciByPWEudG9Mb3dlckNhc2UoKSxpPXIuc3BsaXQoIjoiKSxmPWkubGVuZ3RoLGQ9ODtpWzBdPT09IiImJmlbMV09PT0iIiYmaVsyXT09PSIiPyhpLnNoaWZ0KCksaS5zaGlmdCgpKTppWzBdPT09IiImJmlbMV09PT0iIj9pLnNoaWZ0KCk6aVtmLTFdPT09IiImJmlbZi0yXT09PSIiJiZpLnBvcCgpLGY9aS5sZW5ndGgsaVtmLTFdLmluZGV4T2YoIi4iKSE9PS0xJiYoZD03KTt2YXIgYztmb3IoYz0wO2M8ZiYmaVtjXSE9PSIiO2MrKyk7aWYoYzxkKWZvcihpLnNwbGljZShjLDEsIjAwMDAiKTtpLmxlbmd0aDxkOylpLnNwbGljZShjLDAsIjAwMDAiKTtmb3IodmFyIHUsbD0wO2w8ZDtsKyspe3U9aVtsXS5zcGxpdCgiIik7Zm9yKHZhciBtPTA7bTwzJiYodVswXT09PSIwIiYmdS5sZW5ndGg+MSk7bSsrKXUuc3BsaWNlKDAsMSk7aVtsXT11LmpvaW4oIiIpfXZhciBoPS0xLGI9MCxwPTAseT0tMSxUPSExO2ZvcihsPTA7bDxkO2wrKylUP2lbbF09PT0iMCI/cCs9MTooVD0hMSxwPmImJihoPXksYj1wKSk6aVtsXT09PSIwIiYmKFQ9ITAseT1sLHA9MSk7cD5iJiYoaD15LGI9cCksYj4xJiZpLnNwbGljZShoLGIsIiIpLGY9aS5sZW5ndGg7dmFyIF89IiI7Zm9yKGlbMF09PT0iIiYmKF89IjoiKSxsPTA7bDxmJiYoXys9aVtsXSxsIT09Zi0xKTtsKyspXys9IjoiO3JldHVybiBpW2YtMV09PT0iIiYmKF8rPSI6IiksX31mdW5jdGlvbiBvKCl7cmV0dXJuIG4uSVB2Nj09PXRoaXMmJihuLklQdjY9ZSksdGhpc31yZXR1cm57YmVzdDp0LG5vQ29uZmxpY3Q6b319KX0pO3ZhciAkMT1zaSgoUTEsYmwpPT57LyohCiAqIFVSSS5qcyAtIE11dGF0aW5nIFVSTHMKICogU2Vjb25kIExldmVsIERvbWFpbiAoU0xEKSBTdXBwb3J0CiAqCiAqIFZlcnNpb246IDEuMTkuMTEKICoKICogQXV0aG9yOiBSb2RuZXkgUmVobQogKiBXZWI6IGh0dHA6Ly9tZWRpYWxpemUuZ2l0aHViLmlvL1VSSS5qcy8KICoKICogTGljZW5zZWQgdW5kZXIKICogICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlCiAqCiAqLyhmdW5jdGlvbihuLGUpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2YgYmw9PSJvYmplY3QiJiZibC5leHBvcnRzP2JsLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOm4uU2Vjb25kTGV2ZWxEb21haW5zPWUobil9KShRMSxmdW5jdGlvbihuKXsidXNlIHN0cmljdCI7dmFyIGU9biYmbi5TZWNvbmRMZXZlbERvbWFpbnMsdD17bGlzdDp7YWM6IiBjb20gZ292IG1pbCBuZXQgb3JnICIsYWU6IiBhYyBjbyBnb3YgbWlsIG5hbWUgbmV0IG9yZyBwcm8gc2NoICIsYWY6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsYWw6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLGFvOiIgY28gZWQgZ3YgaXQgb2cgcGIgIixhcjoiIGNvbSBlZHUgZ29iIGdvdiBpbnQgbWlsIG5ldCBvcmcgdHVyICIsYXQ6IiBhYyBjbyBndiBvciAiLGF1OiIgYXNuIGNvbSBjc2lybyBlZHUgZ292IGlkIG5ldCBvcmcgIixiYToiIGNvIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnIHJzIHVuYmkgdW5tbyB1bnNhIHVudHogdW56ZSAiLGJiOiIgYml6IGNvIGNvbSBlZHUgZ292IGluZm8gbmV0IG9yZyBzdG9yZSB0diAiLGJoOiIgYml6IGNjIGNvbSBlZHUgZ292IGluZm8gbmV0IG9yZyAiLGJuOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGJvOiIgY29tIGVkdSBnb2IgZ292IGludCBtaWwgbmV0IG9yZyB0diAiLGJyOiIgYWRtIGFkdiBhZ3IgYW0gYXJxIGFydCBhdG8gYiBiaW8gYmxvZyBibWQgY2ltIGNuZyBjbnQgY29tIGNvb3AgZWNuIGVkdSBlbmcgZXNwIGV0YyBldGkgZmFyIGZsb2cgZm0gZm5kIGZvdCBmc3QgZzEyIGdnZiBnb3YgaW1iIGluZCBpbmYgam9yIGp1cyBsZWwgbWF0IG1lZCBtaWwgbXVzIG5ldCBub20gbm90IG50ciBvZG8gb3JnIHBwZyBwcm8gcHNjIHBzaSBxc2wgcmVjIHNsZyBzcnYgdG1wIHRyZCB0dXIgdHYgdmV0IHZsb2cgd2lraSB6bGcgIixiczoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixiejoiIGR1IGV0IG9tIG92IHJnICIsY2E6IiBhYiBiYyBtYiBuYiBuZiBubCBucyBudCBudSBvbiBwZSBxYyBzayB5ayAiLGNrOiIgYml6IGNvIGVkdSBnZW4gZ292IGluZm8gbmV0IG9yZyAiLGNuOiIgYWMgYWggYmogY29tIGNxIGVkdSBmaiBnZCBnb3YgZ3MgZ3ggZ3ogaGEgaGIgaGUgaGkgaGwgaG4gamwganMganggbG4gbWlsIG5ldCBubSBueCBvcmcgcWggc2Mgc2Qgc2ggc24gc3ggdGogdHcgeGogeHogeW4gemogIixjbzoiIGNvbSBlZHUgZ292IG1pbCBuZXQgbm9tIG9yZyAiLGNyOiIgYWMgYyBjbyBlZCBmaSBnbyBvciBzYSAiLGN5OiIgYWMgYml6IGNvbSBla2xvZ2VzIGdvdiBsdGQgbmFtZSBuZXQgb3JnIHBhcmxpYW1lbnQgcHJlc3MgcHJvIHRtICIsZG86IiBhcnQgY29tIGVkdSBnb2IgZ292IG1pbCBuZXQgb3JnIHNsZCB3ZWIgIixkejoiIGFydCBhc3NvIGNvbSBlZHUgZ292IG5ldCBvcmcgcG9sICIsZWM6IiBjb20gZWR1IGZpbiBnb3YgaW5mbyBtZWQgbWlsIG5ldCBvcmcgcHJvICIsZWc6IiBjb20gZWR1IGV1biBnb3YgbWlsIG5hbWUgbmV0IG9yZyBzY2kgIixlcjoiIGNvbSBlZHUgZ292IGluZCBtaWwgbmV0IG9yZyByb2NoZXN0IHcgIixlczoiIGNvbSBlZHUgZ29iIG5vbSBvcmcgIixldDoiIGJpeiBjb20gZWR1IGdvdiBpbmZvIG5hbWUgbmV0IG9yZyAiLGZqOiIgYWMgYml6IGNvbSBpbmZvIG1pbCBuYW1lIG5ldCBvcmcgcHJvICIsZms6IiBhYyBjbyBnb3YgbmV0IG5vbSBvcmcgIixmcjoiIGFzc28gY29tIGYgZ291diBub20gcHJkIHByZXNzZSB0bSAiLGdnOiIgY28gbmV0IG9yZyAiLGdoOiIgY29tIGVkdSBnb3YgbWlsIG9yZyAiLGduOiIgYWMgY29tIGdvdiBuZXQgb3JnICIsZ3I6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLGd0OiIgY29tIGVkdSBnb2IgaW5kIG1pbCBuZXQgb3JnICIsZ3U6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsaGs6IiBjb20gZWR1IGdvdiBpZHYgbmV0IG9yZyAiLGh1OiIgMjAwMCBhZ3JhciBib2x0IGNhc2lubyBjaXR5IGNvIGVyb3RpY2EgZXJvdGlrYSBmaWxtIGZvcnVtIGdhbWVzIGhvdGVsIGluZm8gaW5nYXRsYW4gam9nYXN6IGtvbnl2ZWxvIGxha2FzIG1lZGlhIG5ld3Mgb3JnIHByaXYgcmVrbGFtIHNleCBzaG9wIHNwb3J0IHN1bGkgc3pleCB0bSB0b3pzZGUgdXRhemFzIHZpZGVvICIsaWQ6IiBhYyBjbyBnbyBtaWwgbmV0IG9yIHNjaCB3ZWIgIixpbDoiIGFjIGNvIGdvdiBpZGYgazEyIG11bmkgbmV0IG9yZyAiLGluOiIgYWMgY28gZWR1IGVybmV0IGZpcm0gZ2VuIGdvdiBpIGluZCBtaWwgbmV0IG5pYyBvcmcgcmVzICIsaXE6IiBjb20gZWR1IGdvdiBpIG1pbCBuZXQgb3JnICIsaXI6IiBhYyBjbyBkbnNzZWMgZ292IGkgaWQgbmV0IG9yZyBzY2ggIixpdDoiIGVkdSBnb3YgIixqZToiIGNvIG5ldCBvcmcgIixqbzoiIGNvbSBlZHUgZ292IG1pbCBuYW1lIG5ldCBvcmcgc2NoICIsanA6IiBhYyBhZCBjbyBlZCBnbyBnciBsZyBuZSBvciAiLGtlOiIgYWMgY28gZ28gaW5mbyBtZSBtb2JpIG5lIG9yIHNjICIsa2g6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyBwZXIgIixraToiIGJpeiBjb20gZGUgZWR1IGdvdiBpbmZvIG1vYiBuZXQgb3JnIHRlbCAiLGttOiIgYXNzbyBjb20gY29vcCBlZHUgZ291diBrIG1lZGVjaW4gbWlsIG5vbSBub3RhaXJlcyBwaGFybWFjaWVucyBwcmVzc2UgdG0gdmV0ZXJpbmFpcmUgIixrbjoiIGVkdSBnb3YgbmV0IG9yZyAiLGtyOiIgYWMgYnVzYW4gY2h1bmdidWsgY2h1bmduYW0gY28gZGFlZ3UgZGFlamVvbiBlcyBnYW5nd29uIGdvIGd3YW5nanUgZ3llb25nYnVrIGd5ZW9uZ2dpIGd5ZW9uZ25hbSBocyBpbmNoZW9uIGplanUgamVvbmJ1ayBqZW9ubmFtIGsga2cgbWlsIG1zIG5lIG9yIHBlIHJlIHNjIHNlb3VsIHVsc2FuICIsa3c6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsa3k6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsa3o6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLGxiOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGxrOiIgYXNzbiBjb20gZWR1IGdvdiBncnAgaG90ZWwgaW50IGx0ZCBuZXQgbmdvIG9yZyBzY2ggc29jIHdlYiAiLGxyOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGx2OiIgYXNuIGNvbSBjb25mIGVkdSBnb3YgaWQgbWlsIG5ldCBvcmcgIixseToiIGNvbSBlZHUgZ292IGlkIG1lZCBuZXQgb3JnIHBsYyBzY2ggIixtYToiIGFjIGNvIGdvdiBtIG5ldCBvcmcgcHJlc3MgIixtYzoiIGFzc28gdG0gIixtZToiIGFjIGNvIGVkdSBnb3YgaXRzIG5ldCBvcmcgcHJpdiAiLG1nOiIgY29tIGVkdSBnb3YgbWlsIG5vbSBvcmcgcHJkIHRtICIsbWs6IiBjb20gZWR1IGdvdiBpbmYgbmFtZSBuZXQgb3JnIHBybyAiLG1sOiIgY29tIGVkdSBnb3YgbmV0IG9yZyBwcmVzc2UgIixtbjoiIGVkdSBnb3Ygb3JnICIsbW86IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsbXQ6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsbXY6IiBhZXJvIGJpeiBjb20gY29vcCBlZHUgZ292IGluZm8gaW50IG1pbCBtdXNldW0gbmFtZSBuZXQgb3JnIHBybyAiLG13OiIgYWMgY28gY29tIGNvb3AgZWR1IGdvdiBpbnQgbXVzZXVtIG5ldCBvcmcgIixteDoiIGNvbSBlZHUgZ29iIG5ldCBvcmcgIixteToiIGNvbSBlZHUgZ292IG1pbCBuYW1lIG5ldCBvcmcgc2NoICIsbmY6IiBhcnRzIGNvbSBmaXJtIGluZm8gbmV0IG90aGVyIHBlciByZWMgc3RvcmUgd2ViICIsbmc6IiBiaXogY29tIGVkdSBnb3YgbWlsIG1vYmkgbmFtZSBuZXQgb3JnIHNjaCAiLG5pOiIgYWMgY28gY29tIGVkdSBnb2IgbWlsIG5ldCBub20gb3JnICIsbnA6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLG5yOiIgYml6IGNvbSBlZHUgZ292IGluZm8gbmV0IG9yZyAiLG9tOiIgYWMgYml6IGNvIGNvbSBlZHUgZ292IG1lZCBtaWwgbXVzZXVtIG5ldCBvcmcgcHJvIHNjaCAiLHBlOiIgY29tIGVkdSBnb2IgbWlsIG5ldCBub20gb3JnIHNsZCAiLHBoOiIgY29tIGVkdSBnb3YgaSBtaWwgbmV0IG5nbyBvcmcgIixwazoiIGJpeiBjb20gZWR1IGZhbSBnb2IgZ29rIGdvbiBnb3AgZ29zIGdvdiBuZXQgb3JnIHdlYiAiLHBsOiIgYXJ0IGJpYWx5c3RvayBiaXogY29tIGVkdSBnZGEgZ2RhbnNrIGdvcnpvdyBnb3YgaW5mbyBrYXRvd2ljZSBrcmFrb3cgbG9keiBsdWJsaW4gbWlsIG5ldCBuZ28gb2xzenR5biBvcmcgcG96bmFuIHB3ciByYWRvbSBzbHVwc2sgc3pjemVjaW4gdG9ydW4gd2Fyc3phd2Egd2F3IHdyb2Mgd3JvY2xhdyB6Z29yYSAiLHByOiIgYWMgYml6IGNvbSBlZHUgZXN0IGdvdiBpbmZvIGlzbGEgbmFtZSBuZXQgb3JnIHBybyBwcm9mICIscHM6IiBjb20gZWR1IGdvdiBuZXQgb3JnIHBsbyBzZWMgIixwdzoiIGJlbGF1IGNvIGVkIGdvIG5lIG9yICIscm86IiBhcnRzIGNvbSBmaXJtIGluZm8gbm9tIG50IG9yZyByZWMgc3RvcmUgdG0gd3d3ICIscnM6IiBhYyBjbyBlZHUgZ292IGluIG9yZyAiLHNiOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLHNjOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLHNoOiIgY28gY29tIGVkdSBnb3YgbmV0IG5vbSBvcmcgIixzbDoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixzdDoiIGNvIGNvbSBjb25zdWxhZG8gZWR1IGVtYmFpeGFkYSBnb3YgbWlsIG5ldCBvcmcgcHJpbmNpcGUgc2FvdG9tZSBzdG9yZSAiLHN2OiIgY29tIGVkdSBnb2Igb3JnIHJlZCAiLHN6OiIgYWMgY28gb3JnICIsdHI6IiBhdiBiYnMgYmVsIGJpeiBjb20gZHIgZWR1IGdlbiBnb3YgaW5mbyBrMTIgbmFtZSBuZXQgb3JnIHBvbCB0ZWwgdHNrIHR2IHdlYiAiLHR0OiIgYWVybyBiaXogY2F0IGNvIGNvbSBjb29wIGVkdSBnb3YgaW5mbyBpbnQgam9icyBtaWwgbW9iaSBtdXNldW0gbmFtZSBuZXQgb3JnIHBybyB0ZWwgdHJhdmVsICIsdHc6IiBjbHViIGNvbSBlYml6IGVkdSBnYW1lIGdvdiBpZHYgbWlsIG5ldCBvcmcgIixtdToiIGFjIGNvIGNvbSBnb3YgbmV0IG9yIG9yZyAiLG16OiIgYWMgY28gZWR1IGdvdiBvcmcgIixuYToiIGNvIGNvbSAiLG56OiIgYWMgY28gY3JpIGdlZWsgZ2VuIGdvdnQgaGVhbHRoIGl3aSBtYW9yaSBtaWwgbmV0IG9yZyBwYXJsaWFtZW50IHNjaG9vbCAiLHBhOiIgYWJvIGFjIGNvbSBlZHUgZ29iIGluZyBtZWQgbmV0IG5vbSBvcmcgc2xkICIscHQ6IiBjb20gZWR1IGdvdiBpbnQgbmV0IG5vbWUgb3JnIHB1YmwgIixweToiIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnICIscWE6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLHJlOiIgYXNzbyBjb20gbm9tICIscnU6IiBhYyBhZHlnZXlhIGFsdGFpIGFtdXIgYXJraGFuZ2Vsc2sgYXN0cmFraGFuIGJhc2hraXJpYSBiZWxnb3JvZCBiaXIgYnJ5YW5zayBidXJ5YXRpYSBjYmcgY2hlbCBjaGVseWFiaW5zayBjaGl0YSBjaHVrb3RrYSBjaHV2YXNoaWEgY29tIGRhZ2VzdGFuIGUtYnVyZyBlZHUgZ292IGdyb3pueSBpbnQgaXJrdXRzayBpdmFub3ZvIGl6aGV2c2sgamFyIGpvc2hrYXItb2xhIGthbG15a2lhIGthbHVnYSBrYW1jaGF0a2Ega2FyZWxpYSBrYXphbiBrY2hyIGtlbWVyb3ZvIGtoYWJhcm92c2sga2hha2Fzc2lhIGtodiBraXJvdiBrb2VuaWcga29taSBrb3N0cm9tYSBrcmFub3lhcnNrIGt1YmFuIGt1cmdhbiBrdXJzayBsaXBldHNrIG1hZ2FkYW4gbWFyaSBtYXJpLWVsIG1hcmluZSBtaWwgbW9yZG92aWEgbW9zcmVnIG1zayBtdXJtYW5zayBuYWxjaGlrIG5ldCBubm92IG5vdiBub3Zvc2liaXJzayBuc2sgb21zayBvcmVuYnVyZyBvcmcgb3J5b2wgcGVuemEgcGVybSBwcCBwc2tvdiBwdHogcm5kIHJ5YXphbiBzYWtoYWxpbiBzYW1hcmEgc2FyYXRvdiBzaW1iaXJzayBzbW9sZW5zayBzcGIgc3RhdnJvcG9sIHN0diBzdXJndXQgdGFtYm92IHRhdGFyc3RhbiB0b20gdG9tc2sgdHNhcml0c3luIHRzayB0dWxhIHR1dmEgdHZlciB0eXVtZW4gdWRtIHVkbXVydGlhIHVsYW4tdWRlIHZsYWRpa2F2a2F6IHZsYWRpbWlyIHZsYWRpdm9zdG9rIHZvbGdvZ3JhZCB2b2xvZ2RhIHZvcm9uZXpoIHZybiB2eWF0a2EgeWFrdXRpYSB5YW1hbCB5ZWthdGVyaW5idXJnIHl1emhuby1zYWtoYWxpbnNrICIscnc6IiBhYyBjbyBjb20gZWR1IGdvdXYgZ292IGludCBtaWwgbmV0ICIsc2E6IiBjb20gZWR1IGdvdiBtZWQgbmV0IG9yZyBwdWIgc2NoICIsc2Q6IiBjb20gZWR1IGdvdiBpbmZvIG1lZCBuZXQgb3JnIHR2ICIsc2U6IiBhIGFjIGIgYmQgYyBkIGUgZiBnIGggaSBrIGwgbSBuIG8gb3JnIHAgcGFydGkgcHAgcHJlc3MgciBzIHQgdG0gdSB3IHggeSB6ICIsc2c6IiBjb20gZWR1IGdvdiBpZG4gbmV0IG9yZyBwZXIgIixzbjoiIGFydCBjb20gZWR1IGdvdXYgb3JnIHBlcnNvIHVuaXYgIixzeToiIGNvbSBlZHUgZ292IG1pbCBuZXQgbmV3cyBvcmcgIix0aDoiIGFjIGNvIGdvIGluIG1pIG5ldCBvciAiLHRqOiIgYWMgYml6IGNvIGNvbSBlZHUgZ28gZ292IGluZm8gaW50IG1pbCBuYW1lIG5ldCBuaWMgb3JnIHRlc3Qgd2ViICIsdG46IiBhZ3JpbmV0IGNvbSBkZWZlbnNlIGVkdW5ldCBlbnMgZmluIGdvdiBpbmQgaW5mbyBpbnRsIG1pbmNvbSBuYXQgbmV0IG9yZyBwZXJzbyBybnJ0IHJucyBybnUgdG91cmlzbSAiLHR6OiIgYWMgY28gZ28gbmUgb3IgIix1YToiIGJpeiBjaGVya2Fzc3kgY2hlcm5pZ292IGNoZXJub3Z0c3kgY2sgY24gY28gY29tIGNyaW1lYSBjdiBkbiBkbmVwcm9wZXRyb3ZzayBkb25ldHNrIGRwIGVkdSBnb3YgaWYgaW4gaXZhbm8tZnJhbmtpdnNrIGtoIGtoYXJrb3Yga2hlcnNvbiBraG1lbG5pdHNraXkga2lldiBraXJvdm9ncmFkIGttIGtyIGtzIGt2IGxnIGx1Z2Fuc2sgbHV0c2sgbHZpdiBtZSBtayBuZXQgbmlrb2xhZXYgb2Qgb2Rlc3NhIG9yZyBwbCBwb2x0YXZhIHBwIHJvdm5vIHJ2IHNlYmFzdG9wb2wgc3VteSB0ZSB0ZXJub3BpbCB1emhnb3JvZCB2aW5uaWNhIHZuIHphcG9yaXpoemhlIHpoaXRvbWlyIHpwIHp0ICIsdWc6IiBhYyBjbyBnbyBuZSBvciBvcmcgc2MgIix1azoiIGFjIGJsIGJyaXRpc2gtbGlicmFyeSBjbyBjeW0gZ292IGdvdnQgaWNuZXQgamV0IGxlYSBsdGQgbWUgbWlsIG1vZCBuYXRpb25hbC1saWJyYXJ5LXNjb3RsYW5kIG5lbCBuZXQgbmhzIG5pYyBubHMgb3JnIG9yZ24gcGFybGlhbWVudCBwbGMgcG9saWNlIHNjaCBzY290IHNvYyAiLHVzOiIgZG5pIGZlZCBpc2Ega2lkcyBuc24gIix1eToiIGNvbSBlZHUgZ3ViIG1pbCBuZXQgb3JnICIsdmU6IiBjbyBjb20gZWR1IGdvYiBpbmZvIG1pbCBuZXQgb3JnIHdlYiAiLHZpOiIgY28gY29tIGsxMiBuZXQgb3JnICIsdm46IiBhYyBiaXogY29tIGVkdSBnb3YgaGVhbHRoIGluZm8gaW50IG5hbWUgbmV0IG9yZyBwcm8gIix5ZToiIGNvIGNvbSBnb3YgbHRkIG1lIG5ldCBvcmcgcGxjICIseXU6IiBhYyBjbyBlZHUgZ292IG9yZyAiLHphOiIgYWMgYWdyaWMgYWx0IGJvdXJzZSBjaXR5IGNvIGN5YmVybmV0IGRiIGVkdSBnb3YgZ3JvbmRhciBpYWNjZXNzIGltdCBpbmNhIGxhbmRlc2lnbiBsYXcgbWlsIG5ldCBuZ28gbmlzIG5vbSBvbGl2ZXR0aSBvcmcgcGl4IHNjaG9vbCB0bSB3ZWIgIix6bToiIGFjIGNvIGNvbSBlZHUgZ292IG5ldCBvcmcgc2NoICIsY29tOiJhciBiciBjbiBkZSBldSBnYiBnciBodSBqcG4ga3Igbm8gcWMgcnUgc2Egc2UgdWsgdXMgdXkgemEgIixuZXQ6ImdiIGpwIHNlIHVrICIsb3JnOiJhZSIsZGU6ImNvbSAifSxoYXM6ZnVuY3Rpb24obyl7dmFyIGE9by5sYXN0SW5kZXhPZigiLiIpO2lmKGE8PTB8fGE+PW8ubGVuZ3RoLTEpcmV0dXJuITE7dmFyIHI9by5sYXN0SW5kZXhPZigiLiIsYS0xKTtpZihyPD0wfHxyPj1hLTEpcmV0dXJuITE7dmFyIGk9dC5saXN0W28uc2xpY2UoYSsxKV07cmV0dXJuIGk/aS5pbmRleE9mKCIgIitvLnNsaWNlKHIrMSxhKSsiICIpPj0wOiExfSxpczpmdW5jdGlvbihvKXt2YXIgYT1vLmxhc3RJbmRleE9mKCIuIik7aWYoYTw9MHx8YT49by5sZW5ndGgtMSlyZXR1cm4hMTt2YXIgcj1vLmxhc3RJbmRleE9mKCIuIixhLTEpO2lmKHI+PTApcmV0dXJuITE7dmFyIGk9dC5saXN0W28uc2xpY2UoYSsxKV07cmV0dXJuIGk/aS5pbmRleE9mKCIgIitvLnNsaWNlKDAsYSkrIiAiKT49MDohMX0sZ2V0OmZ1bmN0aW9uKG8pe3ZhciBhPW8ubGFzdEluZGV4T2YoIi4iKTtpZihhPD0wfHxhPj1vLmxlbmd0aC0xKXJldHVybiBudWxsO3ZhciByPW8ubGFzdEluZGV4T2YoIi4iLGEtMSk7aWYocjw9MHx8cj49YS0xKXJldHVybiBudWxsO3ZhciBpPXQubGlzdFtvLnNsaWNlKGErMSldO3JldHVybiFpfHxpLmluZGV4T2YoIiAiK28uc2xpY2UocisxLGEpKyIgIik8MD9udWxsOm8uc2xpY2UocisxKX0sbm9Db25mbGljdDpmdW5jdGlvbigpe3JldHVybiBuLlNlY29uZExldmVsRG9tYWlucz09PXRoaXMmJihuLlNlY29uZExldmVsRG9tYWlucz1lKSx0aGlzfX07cmV0dXJuIHR9KX0pO3ZhciBkaT1zaSgoZUEscGwpPT57LyohCiAqIFVSSS5qcyAtIE11dGF0aW5nIFVSTHMKICoKICogVmVyc2lvbjogMS4xOS4xMQogKgogKiBBdXRob3I6IFJvZG5leSBSZWhtCiAqIFdlYjogaHR0cDovL21lZGlhbGl6ZS5naXRodWIuaW8vVVJJLmpzLwogKgogKiBMaWNlbnNlZCB1bmRlcgogKiAgIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UKICoKICovKGZ1bmN0aW9uKG4sZSl7InVzZSBzdHJpY3QiO3R5cGVvZiBwbD09Im9iamVjdCImJnBsLmV4cG9ydHM/cGwuZXhwb3J0cz1lKFkxKCksWjEoKSwkMSgpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbIi4vcHVueWNvZGUiLCIuL0lQdjYiLCIuL1NlY29uZExldmVsRG9tYWlucyJdLGUpOm4uVVJJPWUobi5wdW55Y29kZSxuLklQdjYsbi5TZWNvbmRMZXZlbERvbWFpbnMsbil9KShlQSxmdW5jdGlvbihuLGUsdCxvKXsidXNlIHN0cmljdCI7dmFyIGE9byYmby5VUkk7ZnVuY3Rpb24gcihBLHgpe3ZhciBOPWFyZ3VtZW50cy5sZW5ndGg+PTEsdj1hcmd1bWVudHMubGVuZ3RoPj0yO2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBOP3Y/bmV3IHIoQSx4KTpuZXcgcihBKTpuZXcgcjtpZihBPT09dm9pZCAwKXtpZihOKXRocm93IG5ldyBUeXBlRXJyb3IoInVuZGVmaW5lZCBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgVVJJIik7dHlwZW9mIGxvY2F0aW9uPCJ1Ij9BPWxvY2F0aW9uLmhyZWYrIiI6QT0iIn1pZihBPT09bnVsbCYmTil0aHJvdyBuZXcgVHlwZUVycm9yKCJudWxsIGlzIG5vdCBhIHZhbGlkIGFyZ3VtZW50IGZvciBVUkkiKTtyZXR1cm4gdGhpcy5ocmVmKEEpLHghPT12b2lkIDA/dGhpcy5hYnNvbHV0ZVRvKHgpOnRoaXN9ZnVuY3Rpb24gaShBKXtyZXR1cm4vXlswLTldKyQvLnRlc3QoQSl9ci52ZXJzaW9uPSIxLjE5LjExIjt2YXIgZj1yLnByb3RvdHlwZSxkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gYyhBKXtyZXR1cm4gQS5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8W1xdXC9cXF0pL2csIlxcJDEiKX1mdW5jdGlvbiB1KEEpe3JldHVybiBBPT09dm9pZCAwPyJVbmRlZmluZWQiOlN0cmluZyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQSkpLnNsaWNlKDgsLTEpfWZ1bmN0aW9uIGwoQSl7cmV0dXJuIHUoQSk9PT0iQXJyYXkifWZ1bmN0aW9uIG0oQSx4KXt2YXIgTj17fSx2LFU7aWYodSh4KT09PSJSZWdFeHAiKU49bnVsbDtlbHNlIGlmKGwoeCkpZm9yKHY9MCxVPXgubGVuZ3RoO3Y8VTt2KyspTlt4W3ZdXT0hMDtlbHNlIE5beF09ITA7Zm9yKHY9MCxVPUEubGVuZ3RoO3Y8VTt2Kyspe3ZhciBMPU4mJk5bQVt2XV0hPT12b2lkIDB8fCFOJiZ4LnRlc3QoQVt2XSk7TCYmKEEuc3BsaWNlKHYsMSksVS0tLHYtLSl9cmV0dXJuIEF9ZnVuY3Rpb24gaChBLHgpe3ZhciBOLHY7aWYobCh4KSl7Zm9yKE49MCx2PXgubGVuZ3RoO048djtOKyspaWYoIWgoQSx4W05dKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgVT11KHgpO2ZvcihOPTAsdj1BLmxlbmd0aDtOPHY7TisrKWlmKFU9PT0iUmVnRXhwIil7aWYodHlwZW9mIEFbTl09PSJzdHJpbmciJiZBW05dLm1hdGNoKHgpKXJldHVybiEwfWVsc2UgaWYoQVtOXT09PXgpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gYihBLHgpe2lmKCFsKEEpfHwhbCh4KXx8QS5sZW5ndGghPT14Lmxlbmd0aClyZXR1cm4hMTtBLnNvcnQoKSx4LnNvcnQoKTtmb3IodmFyIE49MCx2PUEubGVuZ3RoO048djtOKyspaWYoQVtOXSE9PXhbTl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcChBKXt2YXIgeD0vXlwvK3xcLyskL2c7cmV0dXJuIEEucmVwbGFjZSh4LCIiKX1yLl9wYXJ0cz1mdW5jdGlvbigpe3JldHVybntwcm90b2NvbDpudWxsLHVzZXJuYW1lOm51bGwscGFzc3dvcmQ6bnVsbCxob3N0bmFtZTpudWxsLHVybjpudWxsLHBvcnQ6bnVsbCxwYXRoOm51bGwscXVlcnk6bnVsbCxmcmFnbWVudDpudWxsLHByZXZlbnRJbnZhbGlkSG9zdG5hbWU6ci5wcmV2ZW50SW52YWxpZEhvc3RuYW1lLGR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVyczpyLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyxlc2NhcGVRdWVyeVNwYWNlOnIuZXNjYXBlUXVlcnlTcGFjZX19LHIucHJldmVudEludmFsaWRIb3N0bmFtZT0hMSxyLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycz0hMSxyLmVzY2FwZVF1ZXJ5U3BhY2U9ITAsci5wcm90b2NvbF9leHByZXNzaW9uPS9eW2Etel1bYS16MC05ListXSokL2ksci5pZG5fZXhwcmVzc2lvbj0vW15hLXowLTlcLl8tXS9pLHIucHVueWNvZGVfZXhwcmVzc2lvbj0vKHhuLS0pL2ksci5pcDRfZXhwcmVzc2lvbj0vXlxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM30kLyxyLmlwNl9leHByZXNzaW9uPS9eXHMqKCgoWzAtOUEtRmEtZl17MSw0fTopezd9KFswLTlBLUZhLWZdezEsNH18OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezZ9KDpbMC05QS1GYS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NH0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOUEtRmEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezN9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNH0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Mn0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsxfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCg6KCgoOlswLTlBLUZhLWZdezEsNH0pezEsN30pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSkpKCUuKyk/XHMqJC8sci5maW5kX3VyaV9leHByZXNzaW9uPS9cYigoPzpbYS16XVtcdy1dKzooPzpcL3sxLDN9fFthLXowLTklXSl8d3d3XGR7MCwzfVsuXXxbYS16MC05LlwtXStbLl1bYS16XXsyLDR9XC8pKD86W15ccygpPD5dK3xcKChbXlxzKCk8Pl0rfChcKFteXHMoKTw+XStcKSkpKlwpKSsoPzpcKChbXlxzKCk8Pl0rfChcKFteXHMoKTw+XStcKSkpKlwpfFteXHNgISgpXFtcXXt9OzonIi4sPD4/wqvCu+KAnOKAneKAmOKAmV0pKS9pZyxyLmZpbmRVcmk9e3N0YXJ0Oi9cYig/OihbYS16XVthLXowLTkuKy1dKjpcL1wvKXx3d3dcLikvZ2ksZW5kOi9bXHNcclxuXXwkLyx0cmltOi9bYCEoKVxbXF17fTs6JyIuLDw+P8KrwrvigJzigJ3igJ7igJjigJldKyQvLHBhcmVuczovKFwoW15cKV0qXCl8XFtbXlxdXSpcXXxce1tefV0qXH18PFtePl0qPikvZ30sci5sZWFkaW5nX3doaXRlc3BhY2VfZXhwcmVzc2lvbj0vXltceDAwLVx4MjBcdTAwYTBcdTE2ODBcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmXSsvLHIuYXNjaWlfdGFiX3doaXRlc3BhY2U9L1tcdTAwMDlcdTAwMEFcdTAwMERdKy9nLHIuZGVmYXVsdFBvcnRzPXtodHRwOiI4MCIsaHR0cHM6IjQ0MyIsZnRwOiIyMSIsZ29waGVyOiI3MCIsd3M6IjgwIix3c3M6IjQ0MyJ9LHIuaG9zdFByb3RvY29scz1bImh0dHAiLCJodHRwcyJdLHIuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzPS9bXmEtekEtWjAtOVwuXC06X10vLHIuZG9tQXR0cmlidXRlcz17YToiaHJlZiIsYmxvY2txdW90ZToiY2l0ZSIsbGluazoiaHJlZiIsYmFzZToiaHJlZiIsc2NyaXB0OiJzcmMiLGZvcm06ImFjdGlvbiIsaW1nOiJzcmMiLGFyZWE6ImhyZWYiLGlmcmFtZToic3JjIixlbWJlZDoic3JjIixzb3VyY2U6InNyYyIsdHJhY2s6InNyYyIsaW5wdXQ6InNyYyIsYXVkaW86InNyYyIsdmlkZW86InNyYyJ9LHIuZ2V0RG9tQXR0cmlidXRlPWZ1bmN0aW9uKEEpe2lmKCEoIUF8fCFBLm5vZGVOYW1lKSl7dmFyIHg9QS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKCEoeD09PSJpbnB1dCImJkEudHlwZSE9PSJpbWFnZSIpKXJldHVybiByLmRvbUF0dHJpYnV0ZXNbeF19fTtmdW5jdGlvbiB5KEEpe3JldHVybiBlc2NhcGUoQSl9ZnVuY3Rpb24gVChBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpKl0vZyx5KS5yZXBsYWNlKC9cKi9nLCIlMkEiKX1yLmVuY29kZT1ULHIuZGVjb2RlPWRlY29kZVVSSUNvbXBvbmVudCxyLmlzbzg4NTk9ZnVuY3Rpb24oKXtyLmVuY29kZT1lc2NhcGUsci5kZWNvZGU9dW5lc2NhcGV9LHIudW5pY29kZT1mdW5jdGlvbigpe3IuZW5jb2RlPVQsci5kZWNvZGU9ZGVjb2RlVVJJQ29tcG9uZW50fSxyLmNoYXJhY3RlcnM9e3BhdGhuYW1lOntlbmNvZGU6e2V4cHJlc3Npb246LyUoMjR8MjZ8MkJ8MkN8M0J8M0R8M0F8NDApL2lnLG1hcDp7IiUyNCI6IiQiLCIlMjYiOiImIiwiJTJCIjoiKyIsIiUyQyI6IiwiLCIlM0IiOiI7IiwiJTNEIjoiPSIsIiUzQSI6IjoiLCIlNDAiOiJAIn19LGRlY29kZTp7ZXhwcmVzc2lvbjovW1wvXD8jXS9nLG1hcDp7Ii8iOiIlMkYiLCI/IjoiJTNGIiwiIyI6IiUyMyJ9fX0scmVzZXJ2ZWQ6e2VuY29kZTp7ZXhwcmVzc2lvbjovJSgyMXwyM3wyNHwyNnwyN3wyOHwyOXwyQXwyQnwyQ3wyRnwzQXwzQnwzRHwzRnw0MHw1Qnw1RCkvaWcsbWFwOnsiJTNBIjoiOiIsIiUyRiI6Ii8iLCIlM0YiOiI/IiwiJTIzIjoiIyIsIiU1QiI6IlsiLCIlNUQiOiJdIiwiJTQwIjoiQCIsIiUyMSI6IiEiLCIlMjQiOiIkIiwiJTI2IjoiJiIsIiUyNyI6IiciLCIlMjgiOiIoIiwiJTI5IjoiKSIsIiUyQSI6IioiLCIlMkIiOiIrIiwiJTJDIjoiLCIsIiUzQiI6IjsiLCIlM0QiOiI9In19fSx1cm5wYXRoOntlbmNvZGU6e2V4cHJlc3Npb246LyUoMjF8MjR8Mjd8Mjh8Mjl8MkF8MkJ8MkN8M0J8M0R8NDApL2lnLG1hcDp7IiUyMSI6IiEiLCIlMjQiOiIkIiwiJTI3IjoiJyIsIiUyOCI6IigiLCIlMjkiOiIpIiwiJTJBIjoiKiIsIiUyQiI6IisiLCIlMkMiOiIsIiwiJTNCIjoiOyIsIiUzRCI6Ij0iLCIlNDAiOiJAIn19LGRlY29kZTp7ZXhwcmVzc2lvbjovW1wvXD8jOl0vZyxtYXA6eyIvIjoiJTJGIiwiPyI6IiUzRiIsIiMiOiIlMjMiLCI6IjoiJTNBIn19fX0sci5lbmNvZGVRdWVyeT1mdW5jdGlvbihBLHgpe3ZhciBOPXIuZW5jb2RlKEErIiIpO3JldHVybiB4PT09dm9pZCAwJiYoeD1yLmVzY2FwZVF1ZXJ5U3BhY2UpLHg/Ti5yZXBsYWNlKC8lMjAvZywiKyIpOk59LHIuZGVjb2RlUXVlcnk9ZnVuY3Rpb24oQSx4KXtBKz0iIix4PT09dm9pZCAwJiYoeD1yLmVzY2FwZVF1ZXJ5U3BhY2UpO3RyeXtyZXR1cm4gci5kZWNvZGUoeD9BLnJlcGxhY2UoL1wrL2csIiUyMCIpOkEpfWNhdGNoe3JldHVybiBBfX07dmFyIF89e2VuY29kZToiZW5jb2RlIixkZWNvZGU6ImRlY29kZSJ9LHcsRT1mdW5jdGlvbihBLHgpe3JldHVybiBmdW5jdGlvbihOKXt0cnl7cmV0dXJuIHJbeF0oTisiIikucmVwbGFjZShyLmNoYXJhY3RlcnNbQV1beF0uZXhwcmVzc2lvbixmdW5jdGlvbih2KXtyZXR1cm4gci5jaGFyYWN0ZXJzW0FdW3hdLm1hcFt2XX0pfWNhdGNoe3JldHVybiBOfX19O2Zvcih3IGluIF8pclt3KyJQYXRoU2VnbWVudCJdPUUoInBhdGhuYW1lIixfW3ddKSxyW3crIlVyblBhdGhTZWdtZW50Il09RSgidXJucGF0aCIsX1t3XSk7dmFyIFI9ZnVuY3Rpb24oQSx4LE4pe3JldHVybiBmdW5jdGlvbih2KXt2YXIgVTtOP1U9ZnVuY3Rpb24oVil7cmV0dXJuIHJbeF0ocltOXShWKSl9OlU9clt4XTtmb3IodmFyIEw9KHYrIiIpLnNwbGl0KEEpLEQ9MCxHPUwubGVuZ3RoO0Q8RztEKyspTFtEXT1VKExbRF0pO3JldHVybiBMLmpvaW4oQSl9fTtyLmRlY29kZVBhdGg9UigiLyIsImRlY29kZVBhdGhTZWdtZW50Iiksci5kZWNvZGVVcm5QYXRoPVIoIjoiLCJkZWNvZGVVcm5QYXRoU2VnbWVudCIpLHIucmVjb2RlUGF0aD1SKCIvIiwiZW5jb2RlUGF0aFNlZ21lbnQiLCJkZWNvZGUiKSxyLnJlY29kZVVyblBhdGg9UigiOiIsImVuY29kZVVyblBhdGhTZWdtZW50IiwiZGVjb2RlIiksci5lbmNvZGVSZXNlcnZlZD1FKCJyZXNlcnZlZCIsImVuY29kZSIpLHIucGFyc2U9ZnVuY3Rpb24oQSx4KXt2YXIgTjtyZXR1cm4geHx8KHg9e3ByZXZlbnRJbnZhbGlkSG9zdG5hbWU6ci5wcmV2ZW50SW52YWxpZEhvc3RuYW1lfSksQT1BLnJlcGxhY2Uoci5sZWFkaW5nX3doaXRlc3BhY2VfZXhwcmVzc2lvbiwiIiksQT1BLnJlcGxhY2Uoci5hc2NpaV90YWJfd2hpdGVzcGFjZSwiIiksTj1BLmluZGV4T2YoIiMiKSxOPi0xJiYoeC5mcmFnbWVudD1BLnN1YnN0cmluZyhOKzEpfHxudWxsLEE9QS5zdWJzdHJpbmcoMCxOKSksTj1BLmluZGV4T2YoIj8iKSxOPi0xJiYoeC5xdWVyeT1BLnN1YnN0cmluZyhOKzEpfHxudWxsLEE9QS5zdWJzdHJpbmcoMCxOKSksQT1BLnJlcGxhY2UoL14oaHR0cHM/fGZ0cHx3c3M/KT86K1svXFxdKi9pLCIkMTovLyIpLEE9QS5yZXBsYWNlKC9eWy9cXF17Mix9L2ksIi8vIiksQS5zdWJzdHJpbmcoMCwyKT09PSIvLyI/KHgucHJvdG9jb2w9bnVsbCxBPUEuc3Vic3RyaW5nKDIpLEE9ci5wYXJzZUF1dGhvcml0eShBLHgpKTooTj1BLmluZGV4T2YoIjoiKSxOPi0xJiYoeC5wcm90b2NvbD1BLnN1YnN0cmluZygwLE4pfHxudWxsLHgucHJvdG9jb2wmJiF4LnByb3RvY29sLm1hdGNoKHIucHJvdG9jb2xfZXhwcmVzc2lvbik/eC5wcm90b2NvbD12b2lkIDA6QS5zdWJzdHJpbmcoTisxLE4rMykucmVwbGFjZSgvXFwvZywiLyIpPT09Ii8vIj8oQT1BLnN1YnN0cmluZyhOKzMpLEE9ci5wYXJzZUF1dGhvcml0eShBLHgpKTooQT1BLnN1YnN0cmluZyhOKzEpLHgudXJuPSEwKSkpLHgucGF0aD1BLHh9LHIucGFyc2VIb3N0PWZ1bmN0aW9uKEEseCl7QXx8KEE9IiIpLEE9QS5yZXBsYWNlKC9cXC9nLCIvIik7dmFyIE49QS5pbmRleE9mKCIvIiksdixVO2lmKE49PT0tMSYmKE49QS5sZW5ndGgpLEEuY2hhckF0KDApPT09IlsiKXY9QS5pbmRleE9mKCJdIikseC5ob3N0bmFtZT1BLnN1YnN0cmluZygxLHYpfHxudWxsLHgucG9ydD1BLnN1YnN0cmluZyh2KzIsTil8fG51bGwseC5wb3J0PT09Ii8iJiYoeC5wb3J0PW51bGwpO2Vsc2V7dmFyIEw9QS5pbmRleE9mKCI6IiksRD1BLmluZGV4T2YoIi8iKSxHPUEuaW5kZXhPZigiOiIsTCsxKTtHIT09LTEmJihEPT09LTF8fEc8RCk/KHguaG9zdG5hbWU9QS5zdWJzdHJpbmcoMCxOKXx8bnVsbCx4LnBvcnQ9bnVsbCk6KFU9QS5zdWJzdHJpbmcoMCxOKS5zcGxpdCgiOiIpLHguaG9zdG5hbWU9VVswXXx8bnVsbCx4LnBvcnQ9VVsxXXx8bnVsbCl9cmV0dXJuIHguaG9zdG5hbWUmJkEuc3Vic3RyaW5nKE4pLmNoYXJBdCgwKSE9PSIvIiYmKE4rKyxBPSIvIitBKSx4LnByZXZlbnRJbnZhbGlkSG9zdG5hbWUmJnIuZW5zdXJlVmFsaWRIb3N0bmFtZSh4Lmhvc3RuYW1lLHgucHJvdG9jb2wpLHgucG9ydCYmci5lbnN1cmVWYWxpZFBvcnQoeC5wb3J0KSxBLnN1YnN0cmluZyhOKXx8Ii8ifSxyLnBhcnNlQXV0aG9yaXR5PWZ1bmN0aW9uKEEseCl7cmV0dXJuIEE9ci5wYXJzZVVzZXJpbmZvKEEseCksci5wYXJzZUhvc3QoQSx4KX0sci5wYXJzZVVzZXJpbmZvPWZ1bmN0aW9uKEEseCl7dmFyIE49QSx2PUEuaW5kZXhPZigiXFwiKTt2IT09LTEmJihBPUEucmVwbGFjZSgvXFwvZywiLyIpKTt2YXIgVT1BLmluZGV4T2YoIi8iKSxMPUEubGFzdEluZGV4T2YoIkAiLFU+LTE/VTpBLmxlbmd0aC0xKSxEO3JldHVybiBMPi0xJiYoVT09PS0xfHxMPFUpPyhEPUEuc3Vic3RyaW5nKDAsTCkuc3BsaXQoIjoiKSx4LnVzZXJuYW1lPURbMF0/ci5kZWNvZGUoRFswXSk6bnVsbCxELnNoaWZ0KCkseC5wYXNzd29yZD1EWzBdP3IuZGVjb2RlKEQuam9pbigiOiIpKTpudWxsLEE9Ti5zdWJzdHJpbmcoTCsxKSk6KHgudXNlcm5hbWU9bnVsbCx4LnBhc3N3b3JkPW51bGwpLEF9LHIucGFyc2VRdWVyeT1mdW5jdGlvbihBLHgpe2lmKCFBKXJldHVybnt9O2lmKEE9QS5yZXBsYWNlKC8mKy9nLCImIikucmVwbGFjZSgvXlw/KiYqfCYrJC9nLCIiKSwhQSlyZXR1cm57fTtmb3IodmFyIE49e30sdj1BLnNwbGl0KCImIiksVT12Lmxlbmd0aCxMLEQsRyxWPTA7VjxVO1YrKylMPXZbVl0uc3BsaXQoIj0iKSxEPXIuZGVjb2RlUXVlcnkoTC5zaGlmdCgpLHgpLEc9TC5sZW5ndGg/ci5kZWNvZGVRdWVyeShMLmpvaW4oIj0iKSx4KTpudWxsLEQhPT0iX19wcm90b19fIiYmKGQuY2FsbChOLEQpPygodHlwZW9mIE5bRF09PSJzdHJpbmcifHxOW0RdPT09bnVsbCkmJihOW0RdPVtOW0RdXSksTltEXS5wdXNoKEcpKTpOW0RdPUcpO3JldHVybiBOfSxyLmJ1aWxkPWZ1bmN0aW9uKEEpe3ZhciB4PSIiLE49ITE7cmV0dXJuIEEucHJvdG9jb2wmJih4Kz1BLnByb3RvY29sKyI6IiksIUEudXJuJiYoeHx8QS5ob3N0bmFtZSkmJih4Kz0iLy8iLE49ITApLHgrPXIuYnVpbGRBdXRob3JpdHkoQSl8fCIiLHR5cGVvZiBBLnBhdGg9PSJzdHJpbmciJiYoQS5wYXRoLmNoYXJBdCgwKSE9PSIvIiYmTiYmKHgrPSIvIikseCs9QS5wYXRoKSx0eXBlb2YgQS5xdWVyeT09InN0cmluZyImJkEucXVlcnkmJih4Kz0iPyIrQS5xdWVyeSksdHlwZW9mIEEuZnJhZ21lbnQ9PSJzdHJpbmciJiZBLmZyYWdtZW50JiYoeCs9IiMiK0EuZnJhZ21lbnQpLHh9LHIuYnVpbGRIb3N0PWZ1bmN0aW9uKEEpe3ZhciB4PSIiO2lmKEEuaG9zdG5hbWUpci5pcDZfZXhwcmVzc2lvbi50ZXN0KEEuaG9zdG5hbWUpP3grPSJbIitBLmhvc3RuYW1lKyJdIjp4Kz1BLmhvc3RuYW1lO2Vsc2UgcmV0dXJuIiI7cmV0dXJuIEEucG9ydCYmKHgrPSI6IitBLnBvcnQpLHh9LHIuYnVpbGRBdXRob3JpdHk9ZnVuY3Rpb24oQSl7cmV0dXJuIHIuYnVpbGRVc2VyaW5mbyhBKStyLmJ1aWxkSG9zdChBKX0sci5idWlsZFVzZXJpbmZvPWZ1bmN0aW9uKEEpe3ZhciB4PSIiO3JldHVybiBBLnVzZXJuYW1lJiYoeCs9ci5lbmNvZGUoQS51c2VybmFtZSkpLEEucGFzc3dvcmQmJih4Kz0iOiIrci5lbmNvZGUoQS5wYXNzd29yZCkpLHgmJih4Kz0iQCIpLHh9LHIuYnVpbGRRdWVyeT1mdW5jdGlvbihBLHgsTil7dmFyIHY9IiIsVSxMLEQsRztmb3IoTCBpbiBBKWlmKEwhPT0iX19wcm90b19fIiYmZC5jYWxsKEEsTCkpaWYobChBW0xdKSlmb3IoVT17fSxEPTAsRz1BW0xdLmxlbmd0aDtEPEc7RCsrKUFbTF1bRF0hPT12b2lkIDAmJlVbQVtMXVtEXSsiIl09PT12b2lkIDAmJih2Kz0iJiIrci5idWlsZFF1ZXJ5UGFyYW1ldGVyKEwsQVtMXVtEXSxOKSx4IT09ITAmJihVW0FbTF1bRF0rIiJdPSEwKSk7ZWxzZSBBW0xdIT09dm9pZCAwJiYodis9IiYiK3IuYnVpbGRRdWVyeVBhcmFtZXRlcihMLEFbTF0sTikpO3JldHVybiB2LnN1YnN0cmluZygxKX0sci5idWlsZFF1ZXJ5UGFyYW1ldGVyPWZ1bmN0aW9uKEEseCxOKXtyZXR1cm4gci5lbmNvZGVRdWVyeShBLE4pKyh4IT09bnVsbD8iPSIrci5lbmNvZGVRdWVyeSh4LE4pOiIiKX0sci5hZGRRdWVyeT1mdW5jdGlvbihBLHgsTil7aWYodHlwZW9mIHg9PSJvYmplY3QiKWZvcih2YXIgdiBpbiB4KWQuY2FsbCh4LHYpJiZyLmFkZFF1ZXJ5KEEsdix4W3ZdKTtlbHNlIGlmKHR5cGVvZiB4PT0ic3RyaW5nIil7aWYoQVt4XT09PXZvaWQgMCl7QVt4XT1OO3JldHVybn1lbHNlIHR5cGVvZiBBW3hdPT0ic3RyaW5nIiYmKEFbeF09W0FbeF1dKTtsKE4pfHwoTj1bTl0pLEFbeF09KEFbeF18fFtdKS5jb25jYXQoTil9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuYWRkUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlciIpfSxyLnNldFF1ZXJ5PWZ1bmN0aW9uKEEseCxOKXtpZih0eXBlb2YgeD09Im9iamVjdCIpZm9yKHZhciB2IGluIHgpZC5jYWxsKHgsdikmJnIuc2V0UXVlcnkoQSx2LHhbdl0pO2Vsc2UgaWYodHlwZW9mIHg9PSJzdHJpbmciKUFbeF09Tj09PXZvaWQgMD9udWxsOk47ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuc2V0UXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlciIpfSxyLnJlbW92ZVF1ZXJ5PWZ1bmN0aW9uKEEseCxOKXt2YXIgdixVLEw7aWYobCh4KSlmb3Iodj0wLFU9eC5sZW5ndGg7djxVO3YrKylBW3hbdl1dPXZvaWQgMDtlbHNlIGlmKHUoeCk9PT0iUmVnRXhwIilmb3IoTCBpbiBBKXgudGVzdChMKSYmKEFbTF09dm9pZCAwKTtlbHNlIGlmKHR5cGVvZiB4PT0ib2JqZWN0Iilmb3IoTCBpbiB4KWQuY2FsbCh4LEwpJiZyLnJlbW92ZVF1ZXJ5KEEsTCx4W0xdKTtlbHNlIGlmKHR5cGVvZiB4PT0ic3RyaW5nIilOIT09dm9pZCAwP3UoTik9PT0iUmVnRXhwIj8hbChBW3hdKSYmTi50ZXN0KEFbeF0pP0FbeF09dm9pZCAwOkFbeF09bShBW3hdLE4pOkFbeF09PT1TdHJpbmcoTikmJighbChOKXx8Ti5sZW5ndGg9PT0xKT9BW3hdPXZvaWQgMDpsKEFbeF0pJiYoQVt4XT1tKEFbeF0sTikpOkFbeF09dm9pZCAwO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLnJlbW92ZVF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZywgUmVnRXhwIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIiKX0sci5oYXNRdWVyeT1mdW5jdGlvbihBLHgsTix2KXtzd2l0Y2godSh4KSl7Y2FzZSJTdHJpbmciOmJyZWFrO2Nhc2UiUmVnRXhwIjpmb3IodmFyIFUgaW4gQSlpZihkLmNhbGwoQSxVKSYmeC50ZXN0KFUpJiYoTj09PXZvaWQgMHx8ci5oYXNRdWVyeShBLFUsTikpKXJldHVybiEwO3JldHVybiExO2Nhc2UiT2JqZWN0Ijpmb3IodmFyIEwgaW4geClpZihkLmNhbGwoeCxMKSYmIXIuaGFzUXVlcnkoQSxMLHhbTF0pKXJldHVybiExO3JldHVybiEwO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyBhIHN0cmluZywgcmVndWxhciBleHByZXNzaW9uIG9yIG9iamVjdCBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKX1zd2l0Y2godShOKSl7Y2FzZSJVbmRlZmluZWQiOnJldHVybiB4IGluIEE7Y2FzZSJCb29sZWFuIjp2YXIgRD0hIShsKEFbeF0pP0FbeF0ubGVuZ3RoOkFbeF0pO3JldHVybiBOPT09RDtjYXNlIkZ1bmN0aW9uIjpyZXR1cm4hIU4oQVt4XSx4LEEpO2Nhc2UiQXJyYXkiOmlmKCFsKEFbeF0pKXJldHVybiExO3ZhciBHPXY/aDpiO3JldHVybiBHKEFbeF0sTik7Y2FzZSJSZWdFeHAiOnJldHVybiBsKEFbeF0pP3Y/aChBW3hdLE4pOiExOiEhKEFbeF0mJkFbeF0ubWF0Y2goTikpO2Nhc2UiTnVtYmVyIjpOPVN0cmluZyhOKTtjYXNlIlN0cmluZyI6cmV0dXJuIGwoQVt4XSk/dj9oKEFbeF0sTik6ITE6QVt4XT09PU47ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuaGFzUXVlcnkoKSBhY2NlcHRzIHVuZGVmaW5lZCwgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIsIFJlZ0V4cCwgRnVuY3Rpb24gYXMgdGhlIHZhbHVlIHBhcmFtZXRlciIpfX0sci5qb2luUGF0aHM9ZnVuY3Rpb24oKXtmb3IodmFyIEE9W10seD1bXSxOPTAsdj0wO3Y8YXJndW1lbnRzLmxlbmd0aDt2Kyspe3ZhciBVPW5ldyByKGFyZ3VtZW50c1t2XSk7QS5wdXNoKFUpO2Zvcih2YXIgTD1VLnNlZ21lbnQoKSxEPTA7RDxMLmxlbmd0aDtEKyspdHlwZW9mIExbRF09PSJzdHJpbmciJiZ4LnB1c2goTFtEXSksTFtEXSYmTisrfWlmKCF4Lmxlbmd0aHx8IU4pcmV0dXJuIG5ldyByKCIiKTt2YXIgRz1uZXcgcigiIikuc2VnbWVudCh4KTtyZXR1cm4oQVswXS5wYXRoKCk9PT0iInx8QVswXS5wYXRoKCkuc2xpY2UoMCwxKT09PSIvIikmJkcucGF0aCgiLyIrRy5wYXRoKCkpLEcubm9ybWFsaXplKCl9LHIuY29tbW9uUGF0aD1mdW5jdGlvbihBLHgpe3ZhciBOPU1hdGgubWluKEEubGVuZ3RoLHgubGVuZ3RoKSx2O2Zvcih2PTA7djxOO3YrKylpZihBLmNoYXJBdCh2KSE9PXguY2hhckF0KHYpKXt2LS07YnJlYWt9cmV0dXJuIHY8MT9BLmNoYXJBdCgwKT09PXguY2hhckF0KDApJiZBLmNoYXJBdCgwKT09PSIvIj8iLyI6IiI6KChBLmNoYXJBdCh2KSE9PSIvInx8eC5jaGFyQXQodikhPT0iLyIpJiYodj1BLnN1YnN0cmluZygwLHYpLmxhc3RJbmRleE9mKCIvIikpLEEuc3Vic3RyaW5nKDAsdisxKSl9LHIud2l0aGluU3RyaW5nPWZ1bmN0aW9uKEEseCxOKXtOfHwoTj17fSk7dmFyIHY9Ti5zdGFydHx8ci5maW5kVXJpLnN0YXJ0LFU9Ti5lbmR8fHIuZmluZFVyaS5lbmQsTD1OLnRyaW18fHIuZmluZFVyaS50cmltLEQ9Ti5wYXJlbnN8fHIuZmluZFVyaS5wYXJlbnMsRz0vW2EtejAtOS1dPVsiJ10/JC9pO2Zvcih2Lmxhc3RJbmRleD0wOzspe3ZhciBWPXYuZXhlYyhBKTtpZighVilicmVhazt2YXIgTz1WLmluZGV4O2lmKE4uaWdub3JlSHRtbCl7dmFyIEo9QS5zbGljZShNYXRoLm1heChPLTMsMCksTyk7aWYoSiYmRy50ZXN0KEopKWNvbnRpbnVlfWZvcih2YXIgcmU9TytBLnNsaWNlKE8pLnNlYXJjaChVKSxzZT1BLnNsaWNlKE8scmUpLG9lPS0xOzspe3ZhciBjZT1ELmV4ZWMoc2UpO2lmKCFjZSlicmVhazt2YXIgbWU9Y2UuaW5kZXgrY2VbMF0ubGVuZ3RoO29lPU1hdGgubWF4KG9lLG1lKX1pZihvZT4tMT9zZT1zZS5zbGljZSgwLG9lKStzZS5zbGljZShvZSkucmVwbGFjZShMLCIiKTpzZT1zZS5yZXBsYWNlKEwsIiIpLCEoc2UubGVuZ3RoPD1WWzBdLmxlbmd0aCkmJiEoTi5pZ25vcmUmJk4uaWdub3JlLnRlc3Qoc2UpKSl7cmU9TytzZS5sZW5ndGg7dmFyIGRlPXgoc2UsTyxyZSxBKTtpZihkZT09PXZvaWQgMCl7di5sYXN0SW5kZXg9cmU7Y29udGludWV9ZGU9U3RyaW5nKGRlKSxBPUEuc2xpY2UoMCxPKStkZStBLnNsaWNlKHJlKSx2Lmxhc3RJbmRleD1PK2RlLmxlbmd0aH19cmV0dXJuIHYubGFzdEluZGV4PTAsQX0sci5lbnN1cmVWYWxpZEhvc3RuYW1lPWZ1bmN0aW9uKEEseCl7dmFyIE49ISFBLHY9ISF4LFU9ITE7aWYodiYmKFU9aChyLmhvc3RQcm90b2NvbHMseCkpLFUmJiFOKXRocm93IG5ldyBUeXBlRXJyb3IoIkhvc3RuYW1lIGNhbm5vdCBiZSBlbXB0eSwgaWYgcHJvdG9jb2wgaXMgIit4KTtpZihBJiZBLm1hdGNoKHIuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzKSl7aWYoIW4pdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tOl9dIGFuZCBQdW55Y29kZS5qcyBpcyBub3QgYXZhaWxhYmxlJyk7aWYobi50b0FTQ0lJKEEpLm1hdGNoKHIuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li06X10nKX19LHIuZW5zdXJlVmFsaWRQb3J0PWZ1bmN0aW9uKEEpe2lmKEEpe3ZhciB4PU51bWJlcihBKTtpZighKGkoeCkmJng+MCYmeDw2NTUzNikpdGhyb3cgbmV3IFR5cGVFcnJvcignUG9ydCAiJytBKyciIGlzIG5vdCBhIHZhbGlkIHBvcnQnKX19LHIubm9Db25mbGljdD1mdW5jdGlvbihBKXtpZihBKXt2YXIgeD17VVJJOnRoaXMubm9Db25mbGljdCgpfTtyZXR1cm4gby5VUklUZW1wbGF0ZSYmdHlwZW9mIG8uVVJJVGVtcGxhdGUubm9Db25mbGljdD09ImZ1bmN0aW9uIiYmKHguVVJJVGVtcGxhdGU9by5VUklUZW1wbGF0ZS5ub0NvbmZsaWN0KCkpLG8uSVB2NiYmdHlwZW9mIG8uSVB2Ni5ub0NvbmZsaWN0PT0iZnVuY3Rpb24iJiYoeC5JUHY2PW8uSVB2Ni5ub0NvbmZsaWN0KCkpLG8uU2Vjb25kTGV2ZWxEb21haW5zJiZ0eXBlb2Ygby5TZWNvbmRMZXZlbERvbWFpbnMubm9Db25mbGljdD09ImZ1bmN0aW9uIiYmKHguU2Vjb25kTGV2ZWxEb21haW5zPW8uU2Vjb25kTGV2ZWxEb21haW5zLm5vQ29uZmxpY3QoKSkseH1lbHNlIG8uVVJJPT09dGhpcyYmKG8uVVJJPWEpO3JldHVybiB0aGlzfSxmLmJ1aWxkPWZ1bmN0aW9uKEEpe3JldHVybiBBPT09ITA/dGhpcy5fZGVmZXJyZWRfYnVpbGQ9ITA6KEE9PT12b2lkIDB8fHRoaXMuX2RlZmVycmVkX2J1aWxkKSYmKHRoaXMuX3N0cmluZz1yLmJ1aWxkKHRoaXMuX3BhcnRzKSx0aGlzLl9kZWZlcnJlZF9idWlsZD0hMSksdGhpc30sZi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzKX0sZi52YWx1ZU9mPWYudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idWlsZCghMSkuX3N0cmluZ307ZnVuY3Rpb24gUyhBKXtyZXR1cm4gZnVuY3Rpb24oeCxOKXtyZXR1cm4geD09PXZvaWQgMD90aGlzLl9wYXJ0c1tBXXx8IiI6KHRoaXMuX3BhcnRzW0FdPXh8fG51bGwsdGhpcy5idWlsZCghTiksdGhpcyl9fWZ1bmN0aW9uIEMoQSx4KXtyZXR1cm4gZnVuY3Rpb24oTix2KXtyZXR1cm4gTj09PXZvaWQgMD90aGlzLl9wYXJ0c1tBXXx8IiI6KE4hPT1udWxsJiYoTj1OKyIiLE4uY2hhckF0KDApPT09eCYmKE49Ti5zdWJzdHJpbmcoMSkpKSx0aGlzLl9wYXJ0c1tBXT1OLHRoaXMuYnVpbGQoIXYpLHRoaXMpfX1mLnByb3RvY29sPVMoInByb3RvY29sIiksZi51c2VybmFtZT1TKCJ1c2VybmFtZSIpLGYucGFzc3dvcmQ9UygicGFzc3dvcmQiKSxmLmhvc3RuYW1lPVMoImhvc3RuYW1lIiksZi5wb3J0PVMoInBvcnQiKSxmLnF1ZXJ5PUMoInF1ZXJ5IiwiPyIpLGYuZnJhZ21lbnQ9QygiZnJhZ21lbnQiLCIjIiksZi5zZWFyY2g9ZnVuY3Rpb24oQSx4KXt2YXIgTj10aGlzLnF1ZXJ5KEEseCk7cmV0dXJuIHR5cGVvZiBOPT0ic3RyaW5nIiYmTi5sZW5ndGg/Ij8iK046Tn0sZi5oYXNoPWZ1bmN0aW9uKEEseCl7dmFyIE49dGhpcy5mcmFnbWVudChBLHgpO3JldHVybiB0eXBlb2YgTj09InN0cmluZyImJk4ubGVuZ3RoPyIjIitOOk59LGYucGF0aG5hbWU9ZnVuY3Rpb24oQSx4KXtpZihBPT09dm9pZCAwfHxBPT09ITApe3ZhciBOPXRoaXMuX3BhcnRzLnBhdGh8fCh0aGlzLl9wYXJ0cy5ob3N0bmFtZT8iLyI6IiIpO3JldHVybiBBPyh0aGlzLl9wYXJ0cy51cm4/ci5kZWNvZGVVcm5QYXRoOnIuZGVjb2RlUGF0aCkoTik6Tn1lbHNlIHJldHVybiB0aGlzLl9wYXJ0cy51cm4/dGhpcy5fcGFydHMucGF0aD1BP3IucmVjb2RlVXJuUGF0aChBKToiIjp0aGlzLl9wYXJ0cy5wYXRoPUE/ci5yZWNvZGVQYXRoKEEpOiIvIix0aGlzLmJ1aWxkKCF4KSx0aGlzfSxmLnBhdGg9Zi5wYXRobmFtZSxmLmhyZWY9ZnVuY3Rpb24oQSx4KXt2YXIgTjtpZihBPT09dm9pZCAwKXJldHVybiB0aGlzLnRvU3RyaW5nKCk7dGhpcy5fc3RyaW5nPSIiLHRoaXMuX3BhcnRzPXIuX3BhcnRzKCk7dmFyIHY9QSBpbnN0YW5jZW9mIHIsVT10eXBlb2YgQT09Im9iamVjdCImJihBLmhvc3RuYW1lfHxBLnBhdGh8fEEucGF0aG5hbWUpO2lmKEEubm9kZU5hbWUpe3ZhciBMPXIuZ2V0RG9tQXR0cmlidXRlKEEpO0E9QVtMXXx8IiIsVT0hMX1pZighdiYmVSYmQS5wYXRobmFtZSE9PXZvaWQgMCYmKEE9QS50b1N0cmluZygpKSx0eXBlb2YgQT09InN0cmluZyJ8fEEgaW5zdGFuY2VvZiBTdHJpbmcpdGhpcy5fcGFydHM9ci5wYXJzZShTdHJpbmcoQSksdGhpcy5fcGFydHMpO2Vsc2UgaWYodnx8VSl7dmFyIEQ9dj9BLl9wYXJ0czpBO2ZvcihOIGluIEQpTiE9PSJxdWVyeSImJmQuY2FsbCh0aGlzLl9wYXJ0cyxOKSYmKHRoaXMuX3BhcnRzW05dPURbTl0pO0QucXVlcnkmJnRoaXMucXVlcnkoRC5xdWVyeSwhMSl9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGlucHV0Iik7cmV0dXJuIHRoaXMuYnVpbGQoIXgpLHRoaXN9LGYuaXM9ZnVuY3Rpb24oQSl7dmFyIHg9ITEsTj0hMSx2PSExLFU9ITEsTD0hMSxEPSExLEc9ITEsVj0hdGhpcy5fcGFydHMudXJuO3N3aXRjaCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSYmKFY9ITEsTj1yLmlwNF9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpLHY9ci5pcDZfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSx4PU58fHYsVT0heCxMPVUmJnQmJnQuaGFzKHRoaXMuX3BhcnRzLmhvc3RuYW1lKSxEPVUmJnIuaWRuX2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSksRz1VJiZyLnB1bnljb2RlX2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkpLEEudG9Mb3dlckNhc2UoKSl7Y2FzZSJyZWxhdGl2ZSI6cmV0dXJuIFY7Y2FzZSJhYnNvbHV0ZSI6cmV0dXJuIVY7Y2FzZSJkb21haW4iOmNhc2UibmFtZSI6cmV0dXJuIFU7Y2FzZSJzbGQiOnJldHVybiBMO2Nhc2UiaXAiOnJldHVybiB4O2Nhc2UiaXA0IjpjYXNlImlwdjQiOmNhc2UiaW5ldDQiOnJldHVybiBOO2Nhc2UiaXA2IjpjYXNlImlwdjYiOmNhc2UiaW5ldDYiOnJldHVybiB2O2Nhc2UiaWRuIjpyZXR1cm4gRDtjYXNlInVybCI6cmV0dXJuIXRoaXMuX3BhcnRzLnVybjtjYXNlInVybiI6cmV0dXJuISF0aGlzLl9wYXJ0cy51cm47Y2FzZSJwdW55Y29kZSI6cmV0dXJuIEd9cmV0dXJuIG51bGx9O3ZhciBJPWYucHJvdG9jb2wsTT1mLnBvcnQsUD1mLmhvc3RuYW1lO2YucHJvdG9jb2w9ZnVuY3Rpb24oQSx4KXtpZihBJiYoQT1BLnJlcGxhY2UoLzooXC9cLyk/JC8sIiIpLCFBLm1hdGNoKHIucHJvdG9jb2xfZXhwcmVzc2lvbikpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3RvY29sICInK0ErYCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuKy1dIG9yIGRvZXNuJ3Qgc3RhcnQgd2l0aCBbQS1aXWApO3JldHVybiBJLmNhbGwodGhpcyxBLHgpfSxmLnNjaGVtZT1mLnByb3RvY29sLGYucG9ydD1mdW5jdGlvbihBLHgpe3JldHVybiB0aGlzLl9wYXJ0cy51cm4/QT09PXZvaWQgMD8iIjp0aGlzOihBIT09dm9pZCAwJiYoQT09PTAmJihBPW51bGwpLEEmJihBKz0iIixBLmNoYXJBdCgwKT09PSI6IiYmKEE9QS5zdWJzdHJpbmcoMSkpLHIuZW5zdXJlVmFsaWRQb3J0KEEpKSksTS5jYWxsKHRoaXMsQSx4KSl9LGYuaG9zdG5hbWU9ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBIT09dm9pZCAwKXt2YXIgTj17cHJldmVudEludmFsaWRIb3N0bmFtZTp0aGlzLl9wYXJ0cy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lfSx2PXIucGFyc2VIb3N0KEEsTik7aWYodiE9PSIvIil0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7QT1OLmhvc3RuYW1lLHRoaXMuX3BhcnRzLnByZXZlbnRJbnZhbGlkSG9zdG5hbWUmJnIuZW5zdXJlVmFsaWRIb3N0bmFtZShBLHRoaXMuX3BhcnRzLnByb3RvY29sKX1yZXR1cm4gUC5jYWxsKHRoaXMsQSx4KX0sZi5vcmlnaW49ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXt2YXIgTj10aGlzLnByb3RvY29sKCksdj10aGlzLmF1dGhvcml0eSgpO3JldHVybiB2PyhOP04rIjovLyI6IiIpK3RoaXMuYXV0aG9yaXR5KCk6IiJ9ZWxzZXt2YXIgVT1yKEEpO3JldHVybiB0aGlzLnByb3RvY29sKFUucHJvdG9jb2woKSkuYXV0aG9yaXR5KFUuYXV0aG9yaXR5KCkpLmJ1aWxkKCF4KSx0aGlzfX0sZi5ob3N0PWZ1bmN0aW9uKEEseCl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMClyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWU/ci5idWlsZEhvc3QodGhpcy5fcGFydHMpOiIiO3ZhciBOPXIucGFyc2VIb3N0KEEsdGhpcy5fcGFydHMpO2lmKE4hPT0iLyIpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO3JldHVybiB0aGlzLmJ1aWxkKCF4KSx0aGlzfSxmLmF1dGhvcml0eT1mdW5jdGlvbihBLHgpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDApcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lP3IuYnVpbGRBdXRob3JpdHkodGhpcy5fcGFydHMpOiIiO3ZhciBOPXIucGFyc2VBdXRob3JpdHkoQSx0aGlzLl9wYXJ0cyk7aWYoTiE9PSIvIil0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7cmV0dXJuIHRoaXMuYnVpbGQoIXgpLHRoaXN9LGYudXNlcmluZm89ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXt2YXIgTj1yLmJ1aWxkVXNlcmluZm8odGhpcy5fcGFydHMpO3JldHVybiBOJiZOLnN1YnN0cmluZygwLE4ubGVuZ3RoLTEpfWVsc2UgcmV0dXJuIEFbQS5sZW5ndGgtMV0hPT0iQCImJihBKz0iQCIpLHIucGFyc2VVc2VyaW5mbyhBLHRoaXMuX3BhcnRzKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfSxmLnJlc291cmNlPWZ1bmN0aW9uKEEseCl7dmFyIE47cmV0dXJuIEE9PT12b2lkIDA/dGhpcy5wYXRoKCkrdGhpcy5zZWFyY2goKSt0aGlzLmhhc2goKTooTj1yLnBhcnNlKEEpLHRoaXMuX3BhcnRzLnBhdGg9Ti5wYXRoLHRoaXMuX3BhcnRzLnF1ZXJ5PU4ucXVlcnksdGhpcy5fcGFydHMuZnJhZ21lbnQ9Ti5mcmFnbWVudCx0aGlzLmJ1aWxkKCF4KSx0aGlzKX0sZi5zdWJkb21haW49ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpcmV0dXJuIiI7dmFyIE49dGhpcy5fcGFydHMuaG9zdG5hbWUubGVuZ3RoLXRoaXMuZG9tYWluKCkubGVuZ3RoLTE7cmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLE4pfHwiIn1lbHNle3ZhciB2PXRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aC10aGlzLmRvbWFpbigpLmxlbmd0aCxVPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLHYpLEw9bmV3IFJlZ0V4cCgiXiIrYyhVKSk7aWYoQSYmQS5jaGFyQXQoQS5sZW5ndGgtMSkhPT0iLiImJihBKz0iLiIpLEEuaW5kZXhPZigiOiIpIT09LTEpdGhyb3cgbmV3IFR5cGVFcnJvcigiRG9tYWlucyBjYW5ub3QgY29udGFpbiBjb2xvbnMiKTtyZXR1cm4gQSYmci5lbnN1cmVWYWxpZEhvc3RuYW1lKEEsdGhpcy5fcGFydHMucHJvdG9jb2wpLHRoaXMuX3BhcnRzLmhvc3RuYW1lPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UoTCxBKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfX0sZi5kb21haW49ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZih0eXBlb2YgQT09ImJvb2xlYW4iJiYoeD1BLEE9dm9pZCAwKSxBPT09dm9pZCAwKXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpcmV0dXJuIiI7dmFyIE49dGhpcy5fcGFydHMuaG9zdG5hbWUubWF0Y2goL1wuL2cpO2lmKE4mJk4ubGVuZ3RoPDIpcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lO3ZhciB2PXRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aC10aGlzLnRsZCh4KS5sZW5ndGgtMTtyZXR1cm4gdj10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sYXN0SW5kZXhPZigiLiIsdi0xKSsxLHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZyh2KXx8IiJ9ZWxzZXtpZighQSl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW5ub3Qgc2V0IGRvbWFpbiBlbXB0eSIpO2lmKEEuaW5kZXhPZigiOiIpIT09LTEpdGhyb3cgbmV3IFR5cGVFcnJvcigiRG9tYWlucyBjYW5ub3QgY29udGFpbiBjb2xvbnMiKTtpZihyLmVuc3VyZVZhbGlkSG9zdG5hbWUoQSx0aGlzLl9wYXJ0cy5wcm90b2NvbCksIXRoaXMuX3BhcnRzLmhvc3RuYW1lfHx0aGlzLmlzKCJJUCIpKXRoaXMuX3BhcnRzLmhvc3RuYW1lPUE7ZWxzZXt2YXIgVT1uZXcgUmVnRXhwKGModGhpcy5kb21haW4oKSkrIiQiKTt0aGlzLl9wYXJ0cy5ob3N0bmFtZT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKFUsQSl9cmV0dXJuIHRoaXMuYnVpbGQoIXgpLHRoaXN9fSxmLnRsZD1mdW5jdGlvbihBLHgpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKHR5cGVvZiBBPT0iYm9vbGVhbiImJih4PUEsQT12b2lkIDApLEE9PT12b2lkIDApe2lmKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZXx8dGhpcy5pcygiSVAiKSlyZXR1cm4iIjt2YXIgTj10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sYXN0SW5kZXhPZigiLiIpLHY9dGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKE4rMSk7cmV0dXJuIHghPT0hMCYmdCYmdC5saXN0W3YudG9Mb3dlckNhc2UoKV0mJnQuZ2V0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKXx8dn1lbHNle3ZhciBVO2lmKEEpaWYoQS5tYXRjaCgvW15hLXpBLVowLTktXS8pKWlmKHQmJnQuaXMoQSkpVT1uZXcgUmVnRXhwKGModGhpcy50bGQoKSkrIiQiKSx0aGlzLl9wYXJ0cy5ob3N0bmFtZT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKFUsQSk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCdUTEQgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOV0nKTtlbHNle2lmKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZXx8dGhpcy5pcygiSVAiKSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoImNhbm5vdCBzZXQgVExEIG9uIG5vbi1kb21haW4gaG9zdCIpO1U9bmV3IFJlZ0V4cChjKHRoaXMudGxkKCkpKyIkIiksdGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShVLEEpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2Fubm90IHNldCBUTEQgZW1wdHkiKTtyZXR1cm4gdGhpcy5idWlsZCgheCksdGhpc319LGYuZGlyZWN0b3J5PWZ1bmN0aW9uKEEseCl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMHx8QT09PSEwKXtpZighdGhpcy5fcGFydHMucGF0aCYmIXRoaXMuX3BhcnRzLmhvc3RuYW1lKXJldHVybiIiO2lmKHRoaXMuX3BhcnRzLnBhdGg9PT0iLyIpcmV0dXJuIi8iO3ZhciBOPXRoaXMuX3BhcnRzLnBhdGgubGVuZ3RoLXRoaXMuZmlsZW5hbWUoKS5sZW5ndGgtMSx2PXRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKDAsTil8fCh0aGlzLl9wYXJ0cy5ob3N0bmFtZT8iLyI6IiIpO3JldHVybiBBP3IuZGVjb2RlUGF0aCh2KTp2fWVsc2V7dmFyIFU9dGhpcy5fcGFydHMucGF0aC5sZW5ndGgtdGhpcy5maWxlbmFtZSgpLmxlbmd0aCxMPXRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKDAsVSksRD1uZXcgUmVnRXhwKCJeIitjKEwpKTtyZXR1cm4gdGhpcy5pcygicmVsYXRpdmUiKXx8KEF8fChBPSIvIiksQS5jaGFyQXQoMCkhPT0iLyImJihBPSIvIitBKSksQSYmQS5jaGFyQXQoQS5sZW5ndGgtMSkhPT0iLyImJihBKz0iLyIpLEE9ci5yZWNvZGVQYXRoKEEpLHRoaXMuX3BhcnRzLnBhdGg9dGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKEQsQSksdGhpcy5idWlsZCgheCksdGhpc319LGYuZmlsZW5hbWU9ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZih0eXBlb2YgQSE9InN0cmluZyIpe2lmKCF0aGlzLl9wYXJ0cy5wYXRofHx0aGlzLl9wYXJ0cy5wYXRoPT09Ii8iKXJldHVybiIiO3ZhciBOPXRoaXMuX3BhcnRzLnBhdGgubGFzdEluZGV4T2YoIi8iKSx2PXRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKE4rMSk7cmV0dXJuIEE/ci5kZWNvZGVQYXRoU2VnbWVudCh2KTp2fWVsc2V7dmFyIFU9ITE7QS5jaGFyQXQoMCk9PT0iLyImJihBPUEuc3Vic3RyaW5nKDEpKSxBLm1hdGNoKC9cLj9cLy8pJiYoVT0hMCk7dmFyIEw9bmV3IFJlZ0V4cChjKHRoaXMuZmlsZW5hbWUoKSkrIiQiKTtyZXR1cm4gQT1yLnJlY29kZVBhdGgoQSksdGhpcy5fcGFydHMucGF0aD10aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UoTCxBKSxVP3RoaXMubm9ybWFsaXplUGF0aCh4KTp0aGlzLmJ1aWxkKCF4KSx0aGlzfX0sZi5zdWZmaXg9ZnVuY3Rpb24oQSx4KXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwfHxBPT09ITApe2lmKCF0aGlzLl9wYXJ0cy5wYXRofHx0aGlzLl9wYXJ0cy5wYXRoPT09Ii8iKXJldHVybiIiO3ZhciBOPXRoaXMuZmlsZW5hbWUoKSx2PU4ubGFzdEluZGV4T2YoIi4iKSxVLEw7cmV0dXJuIHY9PT0tMT8iIjooVT1OLnN1YnN0cmluZyh2KzEpLEw9L15bYS16MC05JV0rJC9pLnRlc3QoVSk/VToiIixBP3IuZGVjb2RlUGF0aFNlZ21lbnQoTCk6TCl9ZWxzZXtBLmNoYXJBdCgwKT09PSIuIiYmKEE9QS5zdWJzdHJpbmcoMSkpO3ZhciBEPXRoaXMuc3VmZml4KCksRztpZihEKUE/Rz1uZXcgUmVnRXhwKGMoRCkrIiQiKTpHPW5ldyBSZWdFeHAoYygiLiIrRCkrIiQiKTtlbHNle2lmKCFBKXJldHVybiB0aGlzO3RoaXMuX3BhcnRzLnBhdGgrPSIuIityLnJlY29kZVBhdGgoQSl9cmV0dXJuIEcmJihBPXIucmVjb2RlUGF0aChBKSx0aGlzLl9wYXJ0cy5wYXRoPXRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShHLEEpKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfX0sZi5zZWdtZW50PWZ1bmN0aW9uKEEseCxOKXt2YXIgdj10aGlzLl9wYXJ0cy51cm4/IjoiOiIvIixVPXRoaXMucGF0aCgpLEw9VS5zdWJzdHJpbmcoMCwxKT09PSIvIixEPVUuc3BsaXQodik7aWYoQSE9PXZvaWQgMCYmdHlwZW9mIEEhPSJudW1iZXIiJiYoTj14LHg9QSxBPXZvaWQgMCksQSE9PXZvaWQgMCYmdHlwZW9mIEEhPSJudW1iZXIiKXRocm93IG5ldyBFcnJvcignQmFkIHNlZ21lbnQgIicrQSsnIiwgbXVzdCBiZSAwLWJhc2VkIGludGVnZXInKTtpZihMJiZELnNoaWZ0KCksQTwwJiYoQT1NYXRoLm1heChELmxlbmd0aCtBLDApKSx4PT09dm9pZCAwKXJldHVybiBBPT09dm9pZCAwP0Q6RFtBXTtpZihBPT09bnVsbHx8RFtBXT09PXZvaWQgMClpZihsKHgpKXtEPVtdO2Zvcih2YXIgRz0wLFY9eC5sZW5ndGg7RzxWO0crKykheFtHXS5sZW5ndGgmJighRC5sZW5ndGh8fCFEW0QubGVuZ3RoLTFdLmxlbmd0aCl8fChELmxlbmd0aCYmIURbRC5sZW5ndGgtMV0ubGVuZ3RoJiZELnBvcCgpLEQucHVzaChwKHhbR10pKSl9ZWxzZSh4fHx0eXBlb2YgeD09InN0cmluZyIpJiYoeD1wKHgpLERbRC5sZW5ndGgtMV09PT0iIj9EW0QubGVuZ3RoLTFdPXg6RC5wdXNoKHgpKTtlbHNlIHg/RFtBXT1wKHgpOkQuc3BsaWNlKEEsMSk7cmV0dXJuIEwmJkQudW5zaGlmdCgiIiksdGhpcy5wYXRoKEQuam9pbih2KSxOKX0sZi5zZWdtZW50Q29kZWQ9ZnVuY3Rpb24oQSx4LE4pe3ZhciB2LFUsTDtpZih0eXBlb2YgQSE9Im51bWJlciImJihOPXgseD1BLEE9dm9pZCAwKSx4PT09dm9pZCAwKXtpZih2PXRoaXMuc2VnbWVudChBLHgsTiksIWwodikpdj12IT09dm9pZCAwP3IuZGVjb2RlKHYpOnZvaWQgMDtlbHNlIGZvcihVPTAsTD12Lmxlbmd0aDtVPEw7VSsrKXZbVV09ci5kZWNvZGUodltVXSk7cmV0dXJuIHZ9aWYoIWwoeCkpeD10eXBlb2YgeD09InN0cmluZyJ8fHggaW5zdGFuY2VvZiBTdHJpbmc/ci5lbmNvZGUoeCk6eDtlbHNlIGZvcihVPTAsTD14Lmxlbmd0aDtVPEw7VSsrKXhbVV09ci5lbmNvZGUoeFtVXSk7cmV0dXJuIHRoaXMuc2VnbWVudChBLHgsTil9O3ZhciBGPWYucXVlcnk7cmV0dXJuIGYucXVlcnk9ZnVuY3Rpb24oQSx4KXtpZihBPT09ITApcmV0dXJuIHIucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtpZih0eXBlb2YgQT09ImZ1bmN0aW9uIil7dmFyIE49ci5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHY9QS5jYWxsKHRoaXMsTik7cmV0dXJuIHRoaXMuX3BhcnRzLnF1ZXJ5PXIuYnVpbGRRdWVyeSh2fHxOLHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfWVsc2UgcmV0dXJuIEEhPT12b2lkIDAmJnR5cGVvZiBBIT0ic3RyaW5nIj8odGhpcy5fcGFydHMucXVlcnk9ci5idWlsZFF1ZXJ5KEEsdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHRoaXMuYnVpbGQoIXgpLHRoaXMpOkYuY2FsbCh0aGlzLEEseCl9LGYuc2V0UXVlcnk9ZnVuY3Rpb24oQSx4LE4pe3ZhciB2PXIucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtpZih0eXBlb2YgQT09InN0cmluZyJ8fEEgaW5zdGFuY2VvZiBTdHJpbmcpdltBXT14IT09dm9pZCAwP3g6bnVsbDtlbHNlIGlmKHR5cGVvZiBBPT0ib2JqZWN0Iilmb3IodmFyIFUgaW4gQSlkLmNhbGwoQSxVKSYmKHZbVV09QVtVXSk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuYWRkUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlciIpO3JldHVybiB0aGlzLl9wYXJ0cy5xdWVyeT1yLmJ1aWxkUXVlcnkodix0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdHlwZW9mIEEhPSJzdHJpbmciJiYoTj14KSx0aGlzLmJ1aWxkKCFOKSx0aGlzfSxmLmFkZFF1ZXJ5PWZ1bmN0aW9uKEEseCxOKXt2YXIgdj1yLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7cmV0dXJuIHIuYWRkUXVlcnkodixBLHg9PT12b2lkIDA/bnVsbDp4KSx0aGlzLl9wYXJ0cy5xdWVyeT1yLmJ1aWxkUXVlcnkodix0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdHlwZW9mIEEhPSJzdHJpbmciJiYoTj14KSx0aGlzLmJ1aWxkKCFOKSx0aGlzfSxmLnJlbW92ZVF1ZXJ5PWZ1bmN0aW9uKEEseCxOKXt2YXIgdj1yLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7cmV0dXJuIHIucmVtb3ZlUXVlcnkodixBLHgpLHRoaXMuX3BhcnRzLnF1ZXJ5PXIuYnVpbGRRdWVyeSh2LHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSx0eXBlb2YgQSE9InN0cmluZyImJihOPXgpLHRoaXMuYnVpbGQoIU4pLHRoaXN9LGYuaGFzUXVlcnk9ZnVuY3Rpb24oQSx4LE4pe3ZhciB2PXIucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtyZXR1cm4gci5oYXNRdWVyeSh2LEEseCxOKX0sZi5zZXRTZWFyY2g9Zi5zZXRRdWVyeSxmLmFkZFNlYXJjaD1mLmFkZFF1ZXJ5LGYucmVtb3ZlU2VhcmNoPWYucmVtb3ZlUXVlcnksZi5oYXNTZWFyY2g9Zi5oYXNRdWVyeSxmLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJ0cy51cm4/dGhpcy5ub3JtYWxpemVQcm90b2NvbCghMSkubm9ybWFsaXplUGF0aCghMSkubm9ybWFsaXplUXVlcnkoITEpLm5vcm1hbGl6ZUZyYWdtZW50KCExKS5idWlsZCgpOnRoaXMubm9ybWFsaXplUHJvdG9jb2woITEpLm5vcm1hbGl6ZUhvc3RuYW1lKCExKS5ub3JtYWxpemVQb3J0KCExKS5ub3JtYWxpemVQYXRoKCExKS5ub3JtYWxpemVRdWVyeSghMSkubm9ybWFsaXplRnJhZ21lbnQoITEpLmJ1aWxkKCl9LGYubm9ybWFsaXplUHJvdG9jb2w9ZnVuY3Rpb24oQSl7cmV0dXJuIHR5cGVvZiB0aGlzLl9wYXJ0cy5wcm90b2NvbD09InN0cmluZyImJih0aGlzLl9wYXJ0cy5wcm90b2NvbD10aGlzLl9wYXJ0cy5wcm90b2NvbC50b0xvd2VyQ2FzZSgpLHRoaXMuYnVpbGQoIUEpKSx0aGlzfSxmLm5vcm1hbGl6ZUhvc3RuYW1lPWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZSYmKHRoaXMuaXMoIklETiIpJiZuP3RoaXMuX3BhcnRzLmhvc3RuYW1lPW4udG9BU0NJSSh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk6dGhpcy5pcygiSVB2NiIpJiZlJiYodGhpcy5fcGFydHMuaG9zdG5hbWU9ZS5iZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSksdGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKSx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVQb3J0PWZ1bmN0aW9uKEEpe3JldHVybiB0eXBlb2YgdGhpcy5fcGFydHMucHJvdG9jb2w9PSJzdHJpbmciJiZ0aGlzLl9wYXJ0cy5wb3J0PT09ci5kZWZhdWx0UG9ydHNbdGhpcy5fcGFydHMucHJvdG9jb2xdJiYodGhpcy5fcGFydHMucG9ydD1udWxsLHRoaXMuYnVpbGQoIUEpKSx0aGlzfSxmLm5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oQSl7dmFyIHg9dGhpcy5fcGFydHMucGF0aDtpZigheClyZXR1cm4gdGhpcztpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIHRoaXMuX3BhcnRzLnBhdGg9ci5yZWNvZGVVcm5QYXRoKHRoaXMuX3BhcnRzLnBhdGgpLHRoaXMuYnVpbGQoIUEpLHRoaXM7aWYodGhpcy5fcGFydHMucGF0aD09PSIvIilyZXR1cm4gdGhpczt4PXIucmVjb2RlUGF0aCh4KTt2YXIgTix2PSIiLFUsTDtmb3IoeC5jaGFyQXQoMCkhPT0iLyImJihOPSEwLHg9Ii8iK3gpLCh4LnNsaWNlKC0zKT09PSIvLi4ifHx4LnNsaWNlKC0yKT09PSIvLiIpJiYoeCs9Ii8iKSx4PXgucmVwbGFjZSgvKFwvKFwuXC8pKyl8KFwvXC4kKS9nLCIvIikucmVwbGFjZSgvXC97Mix9L2csIi8iKSxOJiYodj14LnN1YnN0cmluZygxKS5tYXRjaCgvXihcLlwuXC8pKy8pfHwiIix2JiYodj12WzBdKSk7VT14LnNlYXJjaCgvXC9cLlwuKFwvfCQpLyksVSE9PS0xOyl7aWYoVT09PTApe3g9eC5zdWJzdHJpbmcoMyk7Y29udGludWV9TD14LnN1YnN0cmluZygwLFUpLmxhc3RJbmRleE9mKCIvIiksTD09PS0xJiYoTD1VKSx4PXguc3Vic3RyaW5nKDAsTCkreC5zdWJzdHJpbmcoVSszKX1yZXR1cm4gTiYmdGhpcy5pcygicmVsYXRpdmUiKSYmKHg9dit4LnN1YnN0cmluZygxKSksdGhpcy5fcGFydHMucGF0aD14LHRoaXMuYnVpbGQoIUEpLHRoaXN9LGYubm9ybWFsaXplUGF0aG5hbWU9Zi5ub3JtYWxpemVQYXRoLGYubm9ybWFsaXplUXVlcnk9ZnVuY3Rpb24oQSl7cmV0dXJuIHR5cGVvZiB0aGlzLl9wYXJ0cy5xdWVyeT09InN0cmluZyImJih0aGlzLl9wYXJ0cy5xdWVyeS5sZW5ndGg/dGhpcy5xdWVyeShyLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSkpOnRoaXMuX3BhcnRzLnF1ZXJ5PW51bGwsdGhpcy5idWlsZCghQSkpLHRoaXN9LGYubm9ybWFsaXplRnJhZ21lbnQ9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX3BhcnRzLmZyYWdtZW50fHwodGhpcy5fcGFydHMuZnJhZ21lbnQ9bnVsbCx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVTZWFyY2g9Zi5ub3JtYWxpemVRdWVyeSxmLm5vcm1hbGl6ZUhhc2g9Zi5ub3JtYWxpemVGcmFnbWVudCxmLmlzbzg4NTk9ZnVuY3Rpb24oKXt2YXIgQT1yLmVuY29kZSx4PXIuZGVjb2RlO3IuZW5jb2RlPWVzY2FwZSxyLmRlY29kZT1kZWNvZGVVUklDb21wb25lbnQ7dHJ5e3RoaXMubm9ybWFsaXplKCl9ZmluYWxseXtyLmVuY29kZT1BLHIuZGVjb2RlPXh9cmV0dXJuIHRoaXN9LGYudW5pY29kZT1mdW5jdGlvbigpe3ZhciBBPXIuZW5jb2RlLHg9ci5kZWNvZGU7ci5lbmNvZGU9VCxyLmRlY29kZT11bmVzY2FwZTt0cnl7dGhpcy5ub3JtYWxpemUoKX1maW5hbGx5e3IuZW5jb2RlPUEsci5kZWNvZGU9eH1yZXR1cm4gdGhpc30sZi5yZWFkYWJsZT1mdW5jdGlvbigpe3ZhciBBPXRoaXMuY2xvbmUoKTtBLnVzZXJuYW1lKCIiKS5wYXNzd29yZCgiIikubm9ybWFsaXplKCk7dmFyIHg9IiI7aWYoQS5fcGFydHMucHJvdG9jb2wmJih4Kz1BLl9wYXJ0cy5wcm90b2NvbCsiOi8vIiksQS5fcGFydHMuaG9zdG5hbWUmJihBLmlzKCJwdW55Y29kZSIpJiZuPyh4Kz1uLnRvVW5pY29kZShBLl9wYXJ0cy5ob3N0bmFtZSksQS5fcGFydHMucG9ydCYmKHgrPSI6IitBLl9wYXJ0cy5wb3J0KSk6eCs9QS5ob3N0KCkpLEEuX3BhcnRzLmhvc3RuYW1lJiZBLl9wYXJ0cy5wYXRoJiZBLl9wYXJ0cy5wYXRoLmNoYXJBdCgwKSE9PSIvIiYmKHgrPSIvIikseCs9QS5wYXRoKCEwKSxBLl9wYXJ0cy5xdWVyeSl7Zm9yKHZhciBOPSIiLHY9MCxVPUEuX3BhcnRzLnF1ZXJ5LnNwbGl0KCImIiksTD1VLmxlbmd0aDt2PEw7disrKXt2YXIgRD0oVVt2XXx8IiIpLnNwbGl0KCI9Iik7Tis9IiYiK3IuZGVjb2RlUXVlcnkoRFswXSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKS5yZXBsYWNlKC8mL2csIiUyNiIpLERbMV0hPT12b2lkIDAmJihOKz0iPSIrci5kZWNvZGVRdWVyeShEWzFdLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLnJlcGxhY2UoLyYvZywiJTI2IikpfXgrPSI/IitOLnN1YnN0cmluZygxKX1yZXR1cm4geCs9ci5kZWNvZGVRdWVyeShBLmhhc2goKSwhMCkseH0sZi5hYnNvbHV0ZVRvPWZ1bmN0aW9uKEEpe3ZhciB4PXRoaXMuY2xvbmUoKSxOPVsicHJvdG9jb2wiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiaG9zdG5hbWUiLCJwb3J0Il0sdixVLEw7aWYodGhpcy5fcGFydHMudXJuKXRocm93IG5ldyBFcnJvcigiVVJOcyBkbyBub3QgaGF2ZSBhbnkgZ2VuZXJhbGx5IGRlZmluZWQgaGllcmFyY2hpY2FsIGNvbXBvbmVudHMiKTtpZihBIGluc3RhbmNlb2Ygcnx8KEE9bmV3IHIoQSkpLHguX3BhcnRzLnByb3RvY29sfHwoeC5fcGFydHMucHJvdG9jb2w9QS5fcGFydHMucHJvdG9jb2wsdGhpcy5fcGFydHMuaG9zdG5hbWUpKXJldHVybiB4O2ZvcihVPTA7TD1OW1VdO1UrKyl4Ll9wYXJ0c1tMXT1BLl9wYXJ0c1tMXTtyZXR1cm4geC5fcGFydHMucGF0aD8oeC5fcGFydHMucGF0aC5zdWJzdHJpbmcoLTIpPT09Ii4uIiYmKHguX3BhcnRzLnBhdGgrPSIvIikseC5wYXRoKCkuY2hhckF0KDApIT09Ii8iJiYodj1BLmRpcmVjdG9yeSgpLHY9dnx8KEEucGF0aCgpLmluZGV4T2YoIi8iKT09PTA/Ii8iOiIiKSx4Ll9wYXJ0cy5wYXRoPSh2P3YrIi8iOiIiKSt4Ll9wYXJ0cy5wYXRoLHgubm9ybWFsaXplUGF0aCgpKSk6KHguX3BhcnRzLnBhdGg9QS5fcGFydHMucGF0aCx4Ll9wYXJ0cy5xdWVyeXx8KHguX3BhcnRzLnF1ZXJ5PUEuX3BhcnRzLnF1ZXJ5KSkseC5idWlsZCgpLHh9LGYucmVsYXRpdmVUbz1mdW5jdGlvbihBKXt2YXIgeD10aGlzLmNsb25lKCkubm9ybWFsaXplKCksTix2LFUsTCxEO2lmKHguX3BhcnRzLnVybil0aHJvdyBuZXcgRXJyb3IoIlVSTnMgZG8gbm90IGhhdmUgYW55IGdlbmVyYWxseSBkZWZpbmVkIGhpZXJhcmNoaWNhbCBjb21wb25lbnRzIik7aWYoQT1uZXcgcihBKS5ub3JtYWxpemUoKSxOPXguX3BhcnRzLHY9QS5fcGFydHMsTD14LnBhdGgoKSxEPUEucGF0aCgpLEwuY2hhckF0KDApIT09Ii8iKXRocm93IG5ldyBFcnJvcigiVVJJIGlzIGFscmVhZHkgcmVsYXRpdmUiKTtpZihELmNoYXJBdCgwKSE9PSIvIil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYWxjdWxhdGUgYSBVUkkgcmVsYXRpdmUgdG8gYW5vdGhlciByZWxhdGl2ZSBVUkkiKTtpZihOLnByb3RvY29sPT09di5wcm90b2NvbCYmKE4ucHJvdG9jb2w9bnVsbCksTi51c2VybmFtZSE9PXYudXNlcm5hbWV8fE4ucGFzc3dvcmQhPT12LnBhc3N3b3JkfHxOLnByb3RvY29sIT09bnVsbHx8Ti51c2VybmFtZSE9PW51bGx8fE4ucGFzc3dvcmQhPT1udWxsKXJldHVybiB4LmJ1aWxkKCk7aWYoTi5ob3N0bmFtZT09PXYuaG9zdG5hbWUmJk4ucG9ydD09PXYucG9ydClOLmhvc3RuYW1lPW51bGwsTi5wb3J0PW51bGw7ZWxzZSByZXR1cm4geC5idWlsZCgpO2lmKEw9PT1EKXJldHVybiBOLnBhdGg9IiIseC5idWlsZCgpO2lmKFU9ci5jb21tb25QYXRoKEwsRCksIVUpcmV0dXJuIHguYnVpbGQoKTt2YXIgRz12LnBhdGguc3Vic3RyaW5nKFUubGVuZ3RoKS5yZXBsYWNlKC9bXlwvXSokLywiIikucmVwbGFjZSgvLio/XC8vZywiLi4vIik7cmV0dXJuIE4ucGF0aD1HK04ucGF0aC5zdWJzdHJpbmcoVS5sZW5ndGgpfHwiLi8iLHguYnVpbGQoKX0sZi5lcXVhbHM9ZnVuY3Rpb24oQSl7dmFyIHg9dGhpcy5jbG9uZSgpLE49bmV3IHIoQSksdj17fSxVPXt9LEw9e30sRCxHLFY7aWYoeC5ub3JtYWxpemUoKSxOLm5vcm1hbGl6ZSgpLHgudG9TdHJpbmcoKT09PU4udG9TdHJpbmcoKSlyZXR1cm4hMDtpZihEPXgucXVlcnkoKSxHPU4ucXVlcnkoKSx4LnF1ZXJ5KCIiKSxOLnF1ZXJ5KCIiKSx4LnRvU3RyaW5nKCkhPT1OLnRvU3RyaW5nKCl8fEQubGVuZ3RoIT09Ry5sZW5ndGgpcmV0dXJuITE7dj1yLnBhcnNlUXVlcnkoRCx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSxVPXIucGFyc2VRdWVyeShHLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO2ZvcihWIGluIHYpaWYoZC5jYWxsKHYsVikpe2lmKGwodltWXSkpe2lmKCFiKHZbVl0sVVtWXSkpcmV0dXJuITF9ZWxzZSBpZih2W1ZdIT09VVtWXSlyZXR1cm4hMTtMW1ZdPSEwfWZvcihWIGluIFUpaWYoZC5jYWxsKFUsVikmJiFMW1ZdKXJldHVybiExO3JldHVybiEwfSxmLnByZXZlbnRJbnZhbGlkSG9zdG5hbWU9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX3BhcnRzLnByZXZlbnRJbnZhbGlkSG9zdG5hbWU9ISFBLHRoaXN9LGYuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzPWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnM9ISFBLHRoaXN9LGYuZXNjYXBlUXVlcnlTcGFjZT1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZT0hIUEsdGhpc30scn0pfSk7ZnVuY3Rpb24gJEMobil7cmV0dXJuKG4ubGVuZ3RoPT09MHx8bltuLmxlbmd0aC0xXSE9PSIvIikmJihuPWAke259L2ApLG59dmFyIHRBLG5BPVgoKCk9Pnt0QT0kQ30pO2Z1bmN0aW9uIG9BKG4sZSl7aWYobj09PW51bGx8fHR5cGVvZiBuIT0ib2JqZWN0IilyZXR1cm4gbjtlPWU/PyExO2xldCB0PW5ldyBuLmNvbnN0cnVjdG9yO2ZvcihsZXQgbyBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkobykpe2xldCBhPW5bb107ZSYmKGE9b0EoYSxlKSksdFtvXT1hfXJldHVybiB0fXZhciBRYyxhQT1YKCgpPT57UWM9b0F9KTtmdW5jdGlvbiByQShuLGUsdCl7dD10Pz8hMTtsZXQgbz17fSxhPWcobikscj1nKGUpLGksZixkO2lmKGEpZm9yKGkgaW4gbiluLmhhc093blByb3BlcnR5KGkpJiYoZj1uW2ldLHImJnQmJnR5cGVvZiBmPT0ib2JqZWN0IiYmZS5oYXNPd25Qcm9wZXJ0eShpKT8oZD1lW2ldLHR5cGVvZiBkPT0ib2JqZWN0Ij9vW2ldPXJBKGYsZCx0KTpvW2ldPWYpOm9baV09Zik7aWYocilmb3IoaSBpbiBlKWUuaGFzT3duUHJvcGVydHkoaSkmJiFvLmhhc093blByb3BlcnR5KGkpJiYoZD1lW2ldLG9baV09ZCk7cmV0dXJuIG99dmFyIF9hLGdsPVgoKCk9PntmZSgpO19hPXJBfSk7ZnVuY3Rpb24gZU0oKXtsZXQgbixlLHQ9bmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXtuPW8sZT1hfSk7cmV0dXJue3Jlc29sdmU6bixyZWplY3Q6ZSxwcm9taXNlOnR9fXZhciBRaSxkYj1YKCgpPT57UWk9ZU19KTtmdW5jdGlvbiB1YihuLGUpe2xldCB0O3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiYodD1kb2N1bWVudCksdWIuX2ltcGxlbWVudGF0aW9uKG4sZSx0KX12YXIgaUEsVGYsbGI9WCgoKT0+e2lBPWhhKGRpKCksMSk7ZmUoKTt1Yi5faW1wbGVtZW50YXRpb249ZnVuY3Rpb24obixlLHQpe2lmKCFnKGUpKXtpZih0eXBlb2YgdD4idSIpcmV0dXJuIG47ZT10LmJhc2VVUkk/P3QubG9jYXRpb24uaHJlZn1sZXQgbz1uZXcgaUEuZGVmYXVsdChuKTtyZXR1cm4gby5zY2hlbWUoKSE9PSIiP28udG9TdHJpbmcoKTpvLmFic29sdXRlVG8oZSkudG9TdHJpbmcoKX07VGY9dWJ9KTtmdW5jdGlvbiB0TShuLGUpe2xldCB0PSIiLG89bi5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBvIT09LTEmJih0PW4uc3Vic3RyaW5nKDAsbysxKSksZSYmKG49bmV3IGNBLmRlZmF1bHQobiksbi5xdWVyeSgpLmxlbmd0aCE9PTAmJih0Kz1gPyR7bi5xdWVyeSgpfWApLG4uZnJhZ21lbnQoKS5sZW5ndGghPT0wJiYodCs9YCMke24uZnJhZ21lbnQoKX1gKSksdH12YXIgY0Esc0EsZkE9WCgoKT0+e2NBPWhhKGRpKCksMSk7c0E9dE19KTtmdW5jdGlvbiBuTShuKXtsZXQgZT1uZXcgZEEuZGVmYXVsdChuKTtlLm5vcm1hbGl6ZSgpO2xldCB0PWUucGF0aCgpLG89dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBvIT09LTEmJih0PXQuc3Vic3RyKG8rMSkpLG89dC5sYXN0SW5kZXhPZigiLiIpLG89PT0tMT90PSIiOnQ9dC5zdWJzdHIobysxKSx0fXZhciBkQSx1QSxsQT1YKCgpPT57ZEE9aGEoZGkoKSwxKTt1QT1uTX0pO2Z1bmN0aW9uIG9NKG4sZSx0KXtnKGUpfHwoZT1uLndpZHRoKSxnKHQpfHwodD1uLmhlaWdodCk7bGV0IG89aEFbZV07ZyhvKXx8KG89e30saEFbZV09byk7bGV0IGE9b1t0XTtpZighZyhhKSl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ci53aWR0aD1lLHIuaGVpZ2h0PXQsYT1yLmdldENvbnRleHQoIjJkIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSksYS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImNvcHkiLG9bdF09YX1yZXR1cm4gYS5kcmF3SW1hZ2UobiwwLDAsZSx0KSxhLmdldEltYWdlRGF0YSgwLDAsZSx0KS5kYXRhfXZhciBoQSxoYixtQT1YKCgpPT57ZmUoKTtoQT17fTtoYj1vTX0pO2Z1bmN0aW9uIHJNKG4pe3JldHVybiBhTS50ZXN0KG4pfXZhciBhTSxfbCxtYj1YKCgpPT57YU09L15ibG9iOi9pO19sPXJNfSk7ZnVuY3Rpb24gaU0obil7Zyhlcil8fChlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLGVyLmhyZWY9d2luZG93LmxvY2F0aW9uLmhyZWY7bGV0IGU9ZXIuaG9zdCx0PWVyLnByb3RvY29sO3JldHVybiBlci5ocmVmPW4sZXIuaHJlZj1lci5ocmVmLHQhPT1lci5wcm90b2NvbHx8ZSE9PWVyLmhvc3R9dmFyIGVyLEVmLGJiPVgoKCk9PntmZSgpO0VmPWlNfSk7ZnVuY3Rpb24gc00obil7cmV0dXJuIGNNLnRlc3Qobil9dmFyIGNNLHlsLHBiPVgoKCk9PntjTT0vXmRhdGE6L2k7eWw9c019KTtmdW5jdGlvbiBmTShuKXtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtyZXR1cm4gZS5hc3luYz0hMCxlLnNyYz1uLG5ldyBQcm9taXNlKCh0LG8pPT57d2luZG93LmNyb3NzT3JpZ2luSXNvbGF0ZWQmJmUuc2V0QXR0cmlidXRlKCJjcm9zc29yaWdpbiIsImFub255bW91cyIpO2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07ZS5vbmxvYWQ9ZnVuY3Rpb24oKXtlLm9ubG9hZD12b2lkIDAsYS5yZW1vdmVDaGlsZChlKSx0KCl9LGUub25lcnJvcj1mdW5jdGlvbihyKXtvKHIpfSxhLmFwcGVuZENoaWxkKGUpfSl9dmFyIGJBLHBBPVgoKCk9PntiQT1mTX0pO2Z1bmN0aW9uIGRNKG4pe2xldCBlPSIiO2ZvcihsZXQgdCBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkodCkpe2xldCBvPW5bdF0sYT1gJHtlbmNvZGVVUklDb21wb25lbnQodCl9PWA7aWYoQXJyYXkuaXNBcnJheShvKSlmb3IobGV0IHI9MCxpPW8ubGVuZ3RoO3I8aTsrK3IpZSs9YCR7YStlbmNvZGVVUklDb21wb25lbnQob1tyXSl9JmA7ZWxzZSBlKz1gJHthK2VuY29kZVVSSUNvbXBvbmVudChvKX0mYH1yZXR1cm4gZT1lLnNsaWNlKDAsLTEpLGV9dmFyIGdBLF9BPVgoKCk9PntnQT1kTX0pO2Z1bmN0aW9uIHVNKG4pe2xldCBlPXt9O2lmKG49PT0iIilyZXR1cm4gZTtsZXQgdD1uLnJlcGxhY2UoL1wrL2csIiUyMCIpLnNwbGl0KC9bJjtdLyk7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7KytvKXtsZXQgcj10W29dLnNwbGl0KCI9IiksaT1kZWNvZGVVUklDb21wb25lbnQoclswXSksZj1yWzFdO2coZik/Zj1kZWNvZGVVUklDb21wb25lbnQoZik6Zj0iIjtsZXQgZD1lW2ldO3R5cGVvZiBkPT0ic3RyaW5nIj9lW2ldPVtkLGZdOkFycmF5LmlzQXJyYXkoZCk/ZC5wdXNoKGYpOmVbaV09Zn1yZXR1cm4gZX12YXIgeUEsQUE9WCgoKT0+e2ZlKCk7eUE9dU19KTt2YXIgd0EsRW4sQWw9WCgoKT0+e3dBPXtVTklTU1VFRDowLElTU1VFRDoxLEFDVElWRToyLFJFQ0VJVkVEOjMsQ0FOQ0VMTEVEOjQsRkFJTEVEOjV9O09iamVjdC5mcmVlemUod0EpO0VuPXdBfSk7dmFyIFRBLEVBLFJBPVgoKCk9PntUQT17VEVSUkFJTjowLElNQUdFUlk6MSxUSUxFUzNEOjIsT1RIRVI6M307T2JqZWN0LmZyZWV6ZShUQSk7RUE9VEF9KTtmdW5jdGlvbiB3bChuKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXQgZT1uLnRocm90dGxlQnlTZXJ2ZXI/PyExLHQ9bi50aHJvdHRsZT8/ITE7dGhpcy51cmw9bi51cmwsdGhpcy5yZXF1ZXN0RnVuY3Rpb249bi5yZXF1ZXN0RnVuY3Rpb24sdGhpcy5jYW5jZWxGdW5jdGlvbj1uLmNhbmNlbEZ1bmN0aW9uLHRoaXMucHJpb3JpdHlGdW5jdGlvbj1uLnByaW9yaXR5RnVuY3Rpb24sdGhpcy5wcmlvcml0eT1uLnByaW9yaXR5Pz8wLHRoaXMudGhyb3R0bGU9dCx0aGlzLnRocm90dGxlQnlTZXJ2ZXI9ZSx0aGlzLnR5cGU9bi50eXBlPz9FQS5PVEhFUix0aGlzLnNlcnZlcktleT1uLnNlcnZlcktleSx0aGlzLnN0YXRlPUVuLlVOSVNTVUVELHRoaXMuZGVmZXJyZWQ9dm9pZCAwLHRoaXMuY2FuY2VsbGVkPSExfXZhciB4QSxPQT1YKCgpPT57c3QoKTtmZSgpO0FsKCk7UkEoKTt3bC5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxsZWQ9ITB9O3dsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihuKXtyZXR1cm4gZyhuKT8obi51cmw9dGhpcy51cmwsbi5yZXF1ZXN0RnVuY3Rpb249dGhpcy5yZXF1ZXN0RnVuY3Rpb24sbi5jYW5jZWxGdW5jdGlvbj10aGlzLmNhbmNlbEZ1bmN0aW9uLG4ucHJpb3JpdHlGdW5jdGlvbj10aGlzLnByaW9yaXR5RnVuY3Rpb24sbi5wcmlvcml0eT10aGlzLnByaW9yaXR5LG4udGhyb3R0bGU9dGhpcy50aHJvdHRsZSxuLnRocm90dGxlQnlTZXJ2ZXI9dGhpcy50aHJvdHRsZUJ5U2VydmVyLG4udHlwZT10aGlzLnR5cGUsbi5zZXJ2ZXJLZXk9dGhpcy5zZXJ2ZXJLZXksbi5zdGF0ZT1Fbi5VTklTU1VFRCxuLmRlZmVycmVkPXZvaWQgMCxuLmNhbmNlbGxlZD0hMSxuKTpuZXcgd2wodGhpcyl9O3hBPXdsfSk7ZnVuY3Rpb24gbE0obil7bGV0IGU9e307aWYoIW4pcmV0dXJuIGU7bGV0IHQ9bi5zcGxpdChgXHIKYCk7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDsrK28pe2xldCBhPXRbb10scj1hLmluZGV4T2YoIjogIik7aWYocj4wKXtsZXQgaT1hLnN1YnN0cmluZygwLHIpLGY9YS5zdWJzdHJpbmcocisyKTtlW2ldPWZ9fXJldHVybiBlfXZhciBTQSxDQT1YKCgpPT57U0E9bE19KTtmdW5jdGlvbiBNQShuLGUsdCl7dGhpcy5zdGF0dXNDb2RlPW4sdGhpcy5yZXNwb25zZT1lLHRoaXMucmVzcG9uc2VIZWFkZXJzPXQsdHlwZW9mIHRoaXMucmVzcG9uc2VIZWFkZXJzPT0ic3RyaW5nIiYmKHRoaXMucmVzcG9uc2VIZWFkZXJzPVNBKHRoaXMucmVzcG9uc2VIZWFkZXJzKSl9dmFyIFJmLE5BPVgoKCk9PntmZSgpO0NBKCk7TUEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7bGV0IG49IlJlcXVlc3QgaGFzIGZhaWxlZC4iO3JldHVybiBnKHRoaXMuc3RhdHVzQ29kZSkmJihuKz1gIFN0YXR1cyBDb2RlOiAke3RoaXMuc3RhdHVzQ29kZX1gKSxufTtSZj1NQX0pO2Z1bmN0aW9uIHhmKCl7dGhpcy5fbGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5fdG9SZW1vdmU9bmV3IE1hcCx0aGlzLl90b0FkZD1uZXcgTWFwLHRoaXMuX2ludm9raW5nTGlzdGVuZXJzPSExLHRoaXMuX2xpc3RlbmVyQ291bnQ9MH1mdW5jdGlvbiBfYihuLGUsdCxvKXtlLmhhcyh0KXx8ZS5zZXQodCxuZXcgU2V0KTtsZXQgYT1lLmdldCh0KTtyZXR1cm4gYS5oYXMobyk/ITE6KGEuYWRkKG8pLCEwKX1mdW5jdGlvbiBnYihuLGUsdCxvKXtsZXQgYT1lLmdldCh0KTtpZighYXx8IWEuaGFzKG8pKXJldHVybiExO2lmKG4uX2ludm9raW5nTGlzdGVuZXJzKXtpZighX2IobixuLl90b1JlbW92ZSx0LG8pKXJldHVybiExfWVsc2UgYS5kZWxldGUobyksYS5zaXplPT09MCYmZS5kZWxldGUodCk7cmV0dXJuITB9dmFyIFRsLHliPVgoKCk9PntmZSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHhmLnByb3RvdHlwZSx7bnVtYmVyT2ZMaXN0ZW5lcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saXN0ZW5lckNvdW50fX19KTt4Zi5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihuLGUpe2xldCB0PXRoaXMsbz10Ll9pbnZva2luZ0xpc3RlbmVycz90Ll90b0FkZDp0Ll9saXN0ZW5lcnM7cmV0dXJuIF9iKHRoaXMsbyxuLGUpJiZ0Ll9saXN0ZW5lckNvdW50KyssZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIobixlKX19O3hmLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9Z2IodGhpcyx0aGlzLl9saXN0ZW5lcnMsbixlKSxvPWdiKHRoaXMsdGhpcy5fdG9BZGQsbixlKSxhPXR8fG87cmV0dXJuIGEmJnRoaXMuX2xpc3RlbmVyQ291bnQtLSxhfTt4Zi5wcm90b3R5cGUucmFpc2VFdmVudD1mdW5jdGlvbigpe3RoaXMuX2ludm9raW5nTGlzdGVuZXJzPSEwO2ZvcihsZXRbbixlXW9mIHRoaXMuX2xpc3RlbmVycy5lbnRyaWVzKCkpaWYoZyhuKSlmb3IobGV0IHQgb2YgZSluLmFwcGx5KHQsYXJndW1lbnRzKTt0aGlzLl9pbnZva2luZ0xpc3RlbmVycz0hMTtmb3IobGV0W24sZV1vZiB0aGlzLl90b0FkZC5lbnRyaWVzKCkpZm9yKGxldCB0IG9mIGUpX2IodGhpcyx0aGlzLl9saXN0ZW5lcnMsbix0KTt0aGlzLl90b0FkZC5jbGVhcigpO2ZvcihsZXRbbixlXW9mIHRoaXMuX3RvUmVtb3ZlLmVudHJpZXMoKSlmb3IobGV0IHQgb2YgZSlnYih0aGlzLHRoaXMuX2xpc3RlbmVycyxuLHQpO3RoaXMuX3RvUmVtb3ZlLmNsZWFyKCl9O1RsPXhmfSk7ZnVuY3Rpb24gJGkobil7dGhpcy5fY29tcGFyYXRvcj1uLmNvbXBhcmF0b3IsdGhpcy5fYXJyYXk9W10sdGhpcy5fbGVuZ3RoPTAsdGhpcy5fbWF4aW11bUxlbmd0aD12b2lkIDB9ZnVuY3Rpb24gQWIobixlLHQpe2xldCBvPW5bZV07bltlXT1uW3RdLG5bdF09b312YXIgSUEsUEE9WCgoKT0+e2ZlKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoJGkucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW5ndGh9fSxpbnRlcm5hbEFycmF5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXl9fSxtYXhpbXVtTGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4aW11bUxlbmd0aH0sc2V0OmZ1bmN0aW9uKG4pe2xldCBlPXRoaXMuX2xlbmd0aDtpZihuPGUpe2xldCB0PXRoaXMuX2FycmF5O2ZvcihsZXQgbz1uO288ZTsrK28pdFtvXT12b2lkIDA7dGhpcy5fbGVuZ3RoPW4sdC5sZW5ndGg9bn10aGlzLl9tYXhpbXVtTGVuZ3RoPW59fSxjb21wYXJhdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcGFyYXRvcn19fSk7JGkucHJvdG90eXBlLnJlc2VydmU9ZnVuY3Rpb24obil7bj1uPz90aGlzLl9sZW5ndGgsdGhpcy5fYXJyYXkubGVuZ3RoPW59OyRpLnByb3RvdHlwZS5oZWFwaWZ5PWZ1bmN0aW9uKG4pe249bj8/MDtsZXQgZT10aGlzLl9sZW5ndGgsdD10aGlzLl9jb21wYXJhdG9yLG89dGhpcy5fYXJyYXksYSxyPSEwO2Zvcig7cjspe2xldCBpPTIqKG4rMSksZj1pLTE7ZjxlJiZ0KG9bZl0sb1tuXSk8MD9hPWY6YT1uLGk8ZSYmdChvW2ldLG9bYV0pPDAmJihhPWkpLGEhPT1uPyhBYihvLGEsbiksbj1hKTpyPSExfX07JGkucHJvdG90eXBlLnJlc29ydD1mdW5jdGlvbigpe2xldCBuPXRoaXMuX2xlbmd0aDtmb3IobGV0IGU9TWF0aC5jZWlsKG4vMik7ZT49MDstLWUpdGhpcy5oZWFwaWZ5KGUpfTskaS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKG4pe2xldCBlPXRoaXMuX2FycmF5LHQ9dGhpcy5fY29tcGFyYXRvcixvPXRoaXMuX21heGltdW1MZW5ndGgsYT10aGlzLl9sZW5ndGgrKztmb3IoYTxlLmxlbmd0aD9lW2FdPW46ZS5wdXNoKG4pO2EhPT0wOyl7bGV0IGk9TWF0aC5mbG9vcigoYS0xKS8yKTtpZih0KGVbYV0sZVtpXSk8MClBYihlLGEsaSksYT1pO2Vsc2UgYnJlYWt9bGV0IHI7cmV0dXJuIGcobykmJnRoaXMuX2xlbmd0aD5vJiYocj1lW29dLHRoaXMuX2xlbmd0aD1vKSxyfTskaS5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKG4pe2lmKG49bj8/MCx0aGlzLl9sZW5ndGg9PT0wKXJldHVybjtsZXQgZT10aGlzLl9hcnJheSx0PWVbbl07cmV0dXJuIEFiKGUsbiwtLXRoaXMuX2xlbmd0aCksdGhpcy5oZWFwaWZ5KG4pLGVbdGhpcy5fbGVuZ3RoXT12b2lkIDAsdH07SUE9JGl9KTtmdW5jdGlvbiBoTShuLGUpe3JldHVybiBuLnByaW9yaXR5LWUucHJpb3JpdHl9ZnVuY3Rpb24gX24oKXt9ZnVuY3Rpb24ga0Eobil7ZyhuLnByaW9yaXR5RnVuY3Rpb24pJiYobi5wcmlvcml0eT1uLnByaW9yaXR5RnVuY3Rpb24oKSl9ZnVuY3Rpb24gdkEobil7cmV0dXJuIG4uc3RhdGU9PT1Fbi5VTklTU1VFRCYmKG4uc3RhdGU9RW4uSVNTVUVELG4uZGVmZXJyZWQ9UWkoKSksbi5kZWZlcnJlZC5wcm9taXNlfWZ1bmN0aW9uIGJNKG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihuLnN0YXRlPT09RW4uQ0FOQ0VMTEVEKXJldHVybjtsZXQgdD1uLmRlZmVycmVkOy0tSHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cywtLWtyW24uc2VydmVyS2V5XSxSbC5yYWlzZUV2ZW50KCksbi5zdGF0ZT1Fbi5SRUNFSVZFRCxuLmRlZmVycmVkPXZvaWQgMCx0LnJlc29sdmUoZSl9fWZ1bmN0aW9uIHBNKG4pe3JldHVybiBmdW5jdGlvbihlKXtuLnN0YXRlIT09RW4uQ0FOQ0VMTEVEJiYoKytIdC5udW1iZXJPZkZhaWxlZFJlcXVlc3RzLC0tSHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cywtLWtyW24uc2VydmVyS2V5XSxSbC5yYWlzZUV2ZW50KGUpLG4uc3RhdGU9RW4uRkFJTEVELG4uZGVmZXJyZWQucmVqZWN0KGUpKX19ZnVuY3Rpb24gRkEobil7bGV0IGU9dkEobik7cmV0dXJuIG4uc3RhdGU9RW4uQUNUSVZFLHRyLnB1c2gobiksKytIdC5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLCsrSHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0c0V2ZXIsKytrcltuLnNlcnZlcktleV0sbi5yZXF1ZXN0RnVuY3Rpb24oKS50aGVuKGJNKG4pKS5jYXRjaChwTShuKSksZX1mdW5jdGlvbiBlYyhuKXtsZXQgZT1uLnN0YXRlPT09RW4uQUNUSVZFO2lmKG4uc3RhdGU9RW4uQ0FOQ0VMTEVELCsrSHQubnVtYmVyT2ZDYW5jZWxsZWRSZXF1ZXN0cyxnKG4uZGVmZXJyZWQpKXtsZXQgdD1uLmRlZmVycmVkO3QucHJvbWlzZS5jYXRjaCgoKT0+e30pLG4uZGVmZXJyZWQ9dm9pZCAwLHQucmVqZWN0KG5ldyBudChgUmVxdWVzdCBjYW5jZWxsZWQ6ICIke24udXJsfSJgKSl9ZSYmKC0tSHQubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cywtLWtyW24uc2VydmVyS2V5XSwrK0h0Lm51bWJlck9mQ2FuY2VsbGVkQWN0aXZlUmVxdWVzdHMpLGcobi5jYW5jZWxGdW5jdGlvbikmJm4uY2FuY2VsRnVuY3Rpb24oKX1mdW5jdGlvbiBnTSgpe19uLmRlYnVnU2hvd1N0YXRpc3RpY3MmJihIdC5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzPT09MCYmSHQubGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM+MCYmKEh0Lm51bWJlck9mQXR0ZW1wdGVkUmVxdWVzdHM+MCYmKGNvbnNvbGUubG9nKGBOdW1iZXIgb2YgYXR0ZW1wdGVkIHJlcXVlc3RzOiAke0h0Lm51bWJlck9mQXR0ZW1wdGVkUmVxdWVzdHN9YCksSHQubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cz0wKSxIdC5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzPjAmJihjb25zb2xlLmxvZyhgTnVtYmVyIG9mIGNhbmNlbGxlZCByZXF1ZXN0czogJHtIdC5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzfWApLEh0Lm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM9MCksSHQubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cz4wJiYoY29uc29sZS5sb2coYE51bWJlciBvZiBjYW5jZWxsZWQgYWN0aXZlIHJlcXVlc3RzOiAke0h0Lm51bWJlck9mQ2FuY2VsbGVkQWN0aXZlUmVxdWVzdHN9YCksSHQubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cz0wKSxIdC5udW1iZXJPZkZhaWxlZFJlcXVlc3RzPjAmJihjb25zb2xlLmxvZyhgTnVtYmVyIG9mIGZhaWxlZCByZXF1ZXN0czogJHtIdC5udW1iZXJPZkZhaWxlZFJlcXVlc3RzfWApLEh0Lm51bWJlck9mRmFpbGVkUmVxdWVzdHM9MCkpLEh0Lmxhc3ROdW1iZXJPZkFjdGl2ZVJlcXVlc3RzPUh0Lm51bWJlck9mQWN0aXZlUmVxdWVzdHMpfXZhciBFbCxIdCwkYyxPbyx0cixrcixtTSxSbCx4bCxEQT1YKCgpPT57RWw9aGEoZGkoKSwxKTtkYigpO2ZlKCk7eWIoKTtQQSgpO21iKCk7cGIoKTtBbCgpO3BhKCk7SHQ9e251bWJlck9mQXR0ZW1wdGVkUmVxdWVzdHM6MCxudW1iZXJPZkFjdGl2ZVJlcXVlc3RzOjAsbnVtYmVyT2ZDYW5jZWxsZWRSZXF1ZXN0czowLG51bWJlck9mQ2FuY2VsbGVkQWN0aXZlUmVxdWVzdHM6MCxudW1iZXJPZkZhaWxlZFJlcXVlc3RzOjAsbnVtYmVyT2ZBY3RpdmVSZXF1ZXN0c0V2ZXI6MCxsYXN0TnVtYmVyT2ZBY3RpdmVSZXF1ZXN0czowfSwkYz0yMCxPbz1uZXcgSUEoe2NvbXBhcmF0b3I6aE19KTtPby5tYXhpbXVtTGVuZ3RoPSRjO09vLnJlc2VydmUoJGMpO3RyPVtdLGtyPXt9LG1NPXR5cGVvZiBkb2N1bWVudDwidSI/bmV3IEVsLmRlZmF1bHQoZG9jdW1lbnQubG9jYXRpb24uaHJlZik6bmV3IEVsLmRlZmF1bHQsUmw9bmV3IFRsO19uLm1heGltdW1SZXF1ZXN0cz01MDtfbi5tYXhpbXVtUmVxdWVzdHNQZXJTZXJ2ZXI9MTg7X24ucmVxdWVzdHNCeVNlcnZlcj17fTtfbi50aHJvdHRsZVJlcXVlc3RzPSEwO19uLmRlYnVnU2hvd1N0YXRpc3RpY3M9ITE7X24ucmVxdWVzdENvbXBsZXRlZEV2ZW50PVJsO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF9uLHtzdGF0aXN0aWNzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSHR9fSxwcmlvcml0eUhlYXBMZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiAkY30sc2V0OmZ1bmN0aW9uKG4pe2lmKG48JGMpZm9yKDtPby5sZW5ndGg+bjspe2xldCBlPU9vLnBvcCgpO2VjKGUpfSRjPW4sT28ubWF4aW11bUxlbmd0aD1uLE9vLnJlc2VydmUobil9fX0pO19uLnNlcnZlckhhc09wZW5TbG90cz1mdW5jdGlvbihuLGUpe2U9ZT8/MTtsZXQgdD1fbi5yZXF1ZXN0c0J5U2VydmVyW25dPz9fbi5tYXhpbXVtUmVxdWVzdHNQZXJTZXJ2ZXI7cmV0dXJuIGtyW25dK2U8PXR9O19uLmhlYXBIYXNPcGVuU2xvdHM9ZnVuY3Rpb24obil7cmV0dXJuIE9vLmxlbmd0aCtuPD0kY307X24udXBkYXRlPWZ1bmN0aW9uKCl7bGV0IG4sZSx0PTAsbz10ci5sZW5ndGg7Zm9yKG49MDtuPG87KytuKXtpZihlPXRyW25dLGUuY2FuY2VsbGVkJiZlYyhlKSxlLnN0YXRlIT09RW4uQUNUSVZFKXsrK3Q7Y29udGludWV9dD4wJiYodHJbbi10XT1lKX10ci5sZW5ndGgtPXQ7bGV0IGE9T28uaW50ZXJuYWxBcnJheSxyPU9vLmxlbmd0aDtmb3Iobj0wO248cjsrK24pa0EoYVtuXSk7T28ucmVzb3J0KCk7bGV0IGk9TWF0aC5tYXgoX24ubWF4aW11bVJlcXVlc3RzLXRyLmxlbmd0aCwwKSxmPTA7Zm9yKDtmPGkmJk9vLmxlbmd0aD4wOyl7aWYoZT1Pby5wb3AoKSxlLmNhbmNlbGxlZCl7ZWMoZSk7Y29udGludWV9aWYoZS50aHJvdHRsZUJ5U2VydmVyJiYhX24uc2VydmVySGFzT3BlblNsb3RzKGUuc2VydmVyS2V5KSl7ZWMoZSk7Y29udGludWV9RkEoZSksKytmfWdNKCl9O19uLmdldFNlcnZlcktleT1mdW5jdGlvbihuKXtsZXQgZT1uZXcgRWwuZGVmYXVsdChuKTtlLnNjaGVtZSgpPT09IiImJihlPWUuYWJzb2x1dGVUbyhtTSksZS5ub3JtYWxpemUoKSk7bGV0IHQ9ZS5hdXRob3JpdHkoKTsvOi8udGVzdCh0KXx8KHQ9YCR7dH06JHtlLnNjaGVtZSgpPT09Imh0dHBzIj8iNDQzIjoiODAifWApO2xldCBvPWtyW3RdO3JldHVybiBnKG8pfHwoa3JbdF09MCksdH07X24ucmVxdWVzdD1mdW5jdGlvbihuKXtpZih5bChuLnVybCl8fF9sKG4udXJsKSlyZXR1cm4gUmwucmFpc2VFdmVudCgpLG4uc3RhdGU9RW4uUkVDRUlWRUQsbi5yZXF1ZXN0RnVuY3Rpb24oKTtpZigrK0h0Lm51bWJlck9mQXR0ZW1wdGVkUmVxdWVzdHMsZyhuLnNlcnZlcktleSl8fChuLnNlcnZlcktleT1fbi5nZXRTZXJ2ZXJLZXkobi51cmwpKSxfbi50aHJvdHRsZVJlcXVlc3RzJiZuLnRocm90dGxlQnlTZXJ2ZXImJiFfbi5zZXJ2ZXJIYXNPcGVuU2xvdHMobi5zZXJ2ZXJLZXkpKXJldHVybjtpZighX24udGhyb3R0bGVSZXF1ZXN0c3x8IW4udGhyb3R0bGUpcmV0dXJuIEZBKG4pO2lmKHRyLmxlbmd0aD49X24ubWF4aW11bVJlcXVlc3RzKXJldHVybjtrQShuKTtsZXQgZT1Pby5pbnNlcnQobik7aWYoZyhlKSl7aWYoZT09PW4pcmV0dXJuO2VjKGUpfXJldHVybiB2QShuKX07X24uY2xlYXJGb3JTcGVjcz1mdW5jdGlvbigpe2Zvcig7T28ubGVuZ3RoPjA7KXtsZXQgZT1Pby5wb3AoKTtlYyhlKX1sZXQgbj10ci5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxuOysrZSllYyh0cltlXSk7dHIubGVuZ3RoPTAsa3I9e30sSHQubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cz0wLEh0Lm51bWJlck9mQWN0aXZlUmVxdWVzdHM9MCxIdC5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzPTAsSHQubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cz0wLEh0Lm51bWJlck9mRmFpbGVkUmVxdWVzdHM9MCxIdC5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzRXZlcj0wLEh0Lmxhc3ROdW1iZXJPZkFjdGl2ZVJlcXVlc3RzPTB9O19uLm51bWJlck9mQWN0aXZlUmVxdWVzdHNCeVNlcnZlcj1mdW5jdGlvbihuKXtyZXR1cm4ga3Jbbl19O19uLnJlcXVlc3RIZWFwPU9vO3hsPV9ufSk7ZnVuY3Rpb24gX00obil7bGV0IGU9bmV3IEJBLmRlZmF1bHQobik7ZS5ub3JtYWxpemUoKTtsZXQgdD1lLmF1dGhvcml0eSgpO2lmKHQubGVuZ3RoIT09MCl7aWYoZS5hdXRob3JpdHkodCksdC5pbmRleE9mKCJAIikhPT0tMSYmKHQ9dC5zcGxpdCgiQCIpWzFdKSx0LmluZGV4T2YoIjoiKT09PS0xKXtsZXQgbz1lLnNjaGVtZSgpO2lmKG8ubGVuZ3RoPT09MCYmKG89d2luZG93LmxvY2F0aW9uLnByb3RvY29sLG89by5zdWJzdHJpbmcoMCxvLmxlbmd0aC0xKSksbz09PSJodHRwIil0Kz0iOjgwIjtlbHNlIGlmKG89PT0iaHR0cHMiKXQrPSI6NDQzIjtlbHNlIHJldHVybn1yZXR1cm4gdH19dmFyIEJBLE9mLGVzLHdiLFVBPVgoKCk9PntCQT1oYShkaSgpLDEpO2ZlKCk7T2Y9e30sZXM9e307T2YuYWRkPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9YCR7bi50b0xvd2VyQ2FzZSgpfToke2V9YDtnKGVzW3RdKXx8KGVzW3RdPSEwKX07T2YucmVtb3ZlPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9YCR7bi50b0xvd2VyQ2FzZSgpfToke2V9YDtnKGVzW3RdKSYmZGVsZXRlIGVzW3RdfTtPZi5jb250YWlucz1mdW5jdGlvbihuKXtsZXQgZT1fTShuKTtyZXR1cm4hIShnKGUpJiZnKGVzW2VdKSl9O09mLmNsZWFyPWZ1bmN0aW9uKCl7ZXM9e319O3diPU9mfSk7ZnVuY3Rpb24gdmUobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1QsdHlwZW9mIG49PSJzdHJpbmciJiYobj17dXJsOm59KSx0aGlzLl91cmw9dm9pZCAwLHRoaXMuX3RlbXBsYXRlVmFsdWVzPW5yKG4udGVtcGxhdGVWYWx1ZXMse30pLHRoaXMuX3F1ZXJ5UGFyYW1ldGVycz1ucihuLnF1ZXJ5UGFyYW1ldGVycyx7fSksdGhpcy5oZWFkZXJzPW5yKG4uaGVhZGVycyx7fSksdGhpcy5yZXF1ZXN0PW4ucmVxdWVzdD8/bmV3IHhBLHRoaXMucHJveHk9bi5wcm94eSx0aGlzLnJldHJ5Q2FsbGJhY2s9bi5yZXRyeUNhbGxiYWNrLHRoaXMucmV0cnlBdHRlbXB0cz1uLnJldHJ5QXR0ZW1wdHM/PzAsdGhpcy5fcmV0cnlDb3VudD0wLG4ucGFyc2VVcmw/PyEwP3RoaXMucGFyc2VVcmwobi51cmwsITAsITApOnRoaXMuX3VybD1uLnVybCx0aGlzLl9jcmVkaXRzPW4uY3JlZGl0c31mdW5jdGlvbiBucihuLGUpe3JldHVybiBnKG4pP1FjKG4pOmV9ZnVuY3Rpb24geU0obil7cmV0dXJuIG4ubGVuZ3RoPT09MD97fTpuLmluZGV4T2YoIj0iKT09PS0xP3tbbl06dm9pZCAwfTp5QShuKX1mdW5jdGlvbiBTbChuLGUsdCl7aWYoIXQpcmV0dXJuIF9hKG4sZSk7bGV0IG89UWMobiwhMCk7Zm9yKGxldCBhIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShhKSl7bGV0IHI9b1thXSxpPWVbYV07ZyhyKT8oQXJyYXkuaXNBcnJheShyKXx8KHI9b1thXT1bcl0pLG9bYV09ci5jb25jYXQoaSkpOm9bYV09QXJyYXkuaXNBcnJheShpKT9pLnNsaWNlKCk6aX1yZXR1cm4gb31mdW5jdGlvbiBBTShuKXtsZXQgZT1PYmplY3Qua2V5cyhuKTtyZXR1cm4gZS5sZW5ndGg9PT0wPyIiOmUubGVuZ3RoPT09MSYmIWcobltlWzBdXSk/YD8ke2VbMF19YDpgPyR7Z0Eobil9YH1mdW5jdGlvbiBHQShuLGUsdCl7bGV0IG89e307b1tlXT10LG4uc2V0UXVlcnlQYXJhbWV0ZXJzKG8pO2xldCBhPW4ucmVxdWVzdCxyPW4udXJsO2EudXJsPXIsYS5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgZj1RaSgpO3JldHVybiB3aW5kb3dbdF09ZnVuY3Rpb24oZCl7Zi5yZXNvbHZlKGQpO3RyeXtkZWxldGUgd2luZG93W3RdfWNhdGNoe3dpbmRvd1t0XT12b2lkIDB9fSx2ZS5fSW1wbGVtZW50YXRpb25zLmxvYWRBbmRFeGVjdXRlU2NyaXB0KHIsdCxmKSxmLnByb21pc2V9O2xldCBpPXhsLnJlcXVlc3QoYSk7aWYoZyhpKSlyZXR1cm4gaS5jYXRjaChmdW5jdGlvbihmKXtyZXR1cm4gYS5zdGF0ZSE9PUVuLkZBSUxFRD9Qcm9taXNlLnJlamVjdChmKTpuLnJldHJ5T25FcnJvcihmKS50aGVuKGZ1bmN0aW9uKGQpe3JldHVybiBkPyhhLnN0YXRlPUVuLlVOSVNTVUVELGEuZGVmZXJyZWQ9dm9pZCAwLEdBKG4sZSx0KSk6UHJvbWlzZS5yZWplY3QoZil9KX0pfWZ1bmN0aW9uIFRiKG4pe2lmKG4uc3RhdGU9PT1Fbi5JU1NVRUR8fG4uc3RhdGU9PT1Fbi5BQ1RJVkUpdGhyb3cgbmV3IG50KCJUaGUgUmVzb3VyY2UgaXMgYWxyZWFkeSBiZWluZyBmZXRjaGVkLiIpO24uc3RhdGU9RW4uVU5JU1NVRUQsbi5kZWZlcnJlZD12b2lkIDB9ZnVuY3Rpb24gT2wobixlKXtsZXQgdD1kZWNvZGVVUklDb21wb25lbnQoZSk7cmV0dXJuIG4/YXRvYih0KTp0fWZ1bmN0aW9uIGpBKG4sZSl7bGV0IHQ9T2wobixlKSxvPW5ldyBBcnJheUJ1ZmZlcih0Lmxlbmd0aCksYT1uZXcgVWludDhBcnJheShvKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylhW3JdPXQuY2hhckNvZGVBdChyKTtyZXR1cm4gb31mdW5jdGlvbiBUTShuLGUpe2U9ZT8/IiI7bGV0IHQ9blsxXSxvPSEhblsyXSxhPW5bM10scixpO3N3aXRjaChlKXtjYXNlIiI6Y2FzZSJ0ZXh0IjpyZXR1cm4gT2wobyxhKTtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gakEobyxhKTtjYXNlImJsb2IiOnJldHVybiByPWpBKG8sYSksbmV3IEJsb2IoW3JdLHt0eXBlOnR9KTtjYXNlImRvY3VtZW50IjpyZXR1cm4gaT1uZXcgRE9NUGFyc2VyLGkucGFyc2VGcm9tU3RyaW5nKE9sKG8sYSksdCk7Y2FzZSJqc29uIjpyZXR1cm4gSlNPTi5wYXJzZShPbChvLGEpKTtkZWZhdWx0On19ZnVuY3Rpb24gRU0obixlLHQsbyxhLHIsaSl7ZmV0Y2gobix7bWV0aG9kOnQsaGVhZGVyczphfSkudGhlbihhc3luYyBmPT57aWYoIWYub2spe2xldCBkPXt9O2YuaGVhZGVycy5mb3JFYWNoKChjLHUpPT57ZFt1XT1jfSksci5yZWplY3QobmV3IFJmKGYuc3RhdHVzLGYsZCkpO3JldHVybn1zd2l0Y2goZSl7Y2FzZSJ0ZXh0IjpyLnJlc29sdmUoZi50ZXh0KCkpO2JyZWFrO2Nhc2UianNvbiI6ci5yZXNvbHZlKGYuanNvbigpKTticmVhaztkZWZhdWx0OnIucmVzb2x2ZShuZXcgVWludDhBcnJheShhd2FpdCBmLmFycmF5QnVmZmVyKCkpLmJ1ZmZlcik7YnJlYWt9fSkuY2F0Y2goKCk9PntyLnJlamVjdChuZXcgUmYpfSl9dmFyIExBLHpBLHRzLHdNLFJNLHlhLG5zPVgoKCk9PntMQT1oYShkaSgpLDEpO25BKCk7SG0oKTthQSgpO2dsKCk7c3QoKTtkYigpO2ZlKCk7bGIoKTtmQSgpO2xBKCk7bUEoKTttYigpO2JiKCk7cGIoKTtwQSgpO2plKCk7X0EoKTtBQSgpO09BKCk7TkEoKTtEQSgpO0FsKCk7cGEoKTtVQSgpO3pBPShmdW5jdGlvbigpe3RyeXtsZXQgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIG4ub3BlbigiR0VUIiwiIyIsITApLG4ucmVzcG9uc2VUeXBlPSJibG9iIixuLnJlc3BvbnNlVHlwZT09PSJibG9iIn1jYXRjaHtyZXR1cm4hMX19KSgpO3ZlLmNyZWF0ZUlmTmVlZGVkPWZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgdmU/bi5nZXREZXJpdmVkUmVzb3VyY2Uoe3JlcXVlc3Q6bi5yZXF1ZXN0fSk6dHlwZW9mIG4hPSJzdHJpbmciP246bmV3IHZlKHt1cmw6bn0pfTt2ZS5zdXBwb3J0c0ltYWdlQml0bWFwT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBnKHRzKT90czp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXAhPSJmdW5jdGlvbiI/KHRzPVByb21pc2UucmVzb2x2ZSghMSksdHMpOih0cz12ZS5mZXRjaEJsb2Ioe3VybDoiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FJQUFBQ1FkMVBlQUFBQUJHZEJUVUVBQUU0ZzNyRWlEZ0FBQUNCalNGSk5BQUI2SmdBQWdJUUFBUG9BQUFDQTZBQUFkVEFBQU9wZ0FBQTZtQUFBRjNDY3VsRThBQUFBREVsRVFWUUkxMk5nNkdBQUFBRVVBSW5nRTNaaUFBQUFBRWxGVGtTdVFtQ0MifSkudGhlbihmdW5jdGlvbihlKXtsZXQgdD17aW1hZ2VPcmllbnRhdGlvbjoiZmxpcFkiLHByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn07cmV0dXJuIFByb21pc2UuYWxsKFtjcmVhdGVJbWFnZUJpdG1hcChlLHQpLGNyZWF0ZUltYWdlQml0bWFwKGUpXSl9KS50aGVuKGZ1bmN0aW9uKGUpe2xldCB0PWhiKGVbMF0pLG89aGIoZVsxXSk7cmV0dXJuIHRbMV0hPT1vWzFdfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pLHRzKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModmUse2lzQmxvYlN1cHBvcnRlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHpBfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2ZS5wcm90b3R5cGUse3F1ZXJ5UGFyYW1ldGVyczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1ldGVyc319LHRlbXBsYXRlVmFsdWVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVWYWx1ZXN9fSx1cmw6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFVybENvbXBvbmVudCghMCwhMCl9LHNldDpmdW5jdGlvbihuKXt0aGlzLnBhcnNlVXJsKG4sITEsITEpfX0sZXh0ZW5zaW9uOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdUEodGhpcy5fdXJsKX19LGlzRGF0YVVyaTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHlsKHRoaXMuX3VybCl9fSxpc0Jsb2JVcmk6e2dldDpmdW5jdGlvbigpe3JldHVybiBfbCh0aGlzLl91cmwpfX0saXNDcm9zc09yaWdpblVybDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEVmKHRoaXMuX3VybCl9fSxoYXNIZWFkZXJzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5oZWFkZXJzKS5sZW5ndGg+MH19LGNyZWRpdHM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVkaXRzfX19KTt2ZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRVcmxDb21wb25lbnQoITAsITApfTt2ZS5wcm90b3R5cGUucGFyc2VVcmw9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9bmV3IExBLmRlZmF1bHQobikscj15TShhLnF1ZXJ5KCkpO3RoaXMuX3F1ZXJ5UGFyYW1ldGVycz1lP1NsKHIsdGhpcy5xdWVyeVBhcmFtZXRlcnMsdCk6cixhLnNlYXJjaCgiIiksYS5mcmFnbWVudCgiIiksZyhvKSYmYS5zY2hlbWUoKT09PSIiJiYoYT1hLmFic29sdXRlVG8oVGYobykpKSx0aGlzLl91cmw9YS50b1N0cmluZygpfTt2ZS5wcm90b3R5cGUuZ2V0VXJsQ29tcG9uZW50PWZ1bmN0aW9uKG4sZSl7aWYodGhpcy5pc0RhdGFVcmkpcmV0dXJuIHRoaXMuX3VybDtsZXQgdD10aGlzLl91cmw7biYmKHQ9YCR7dH0ke0FNKHRoaXMucXVlcnlQYXJhbWV0ZXJzKX1gKSx0PXQucmVwbGFjZSgvJTdCL2csInsiKS5yZXBsYWNlKC8lN0QvZywifSIpO2xldCBvPXRoaXMuX3RlbXBsYXRlVmFsdWVzO3JldHVybiBPYmplY3Qua2V5cyhvKS5sZW5ndGg+MCYmKHQ9dC5yZXBsYWNlKC97KC4qPyl9L2csZnVuY3Rpb24oYSxyKXtsZXQgaT1vW3JdO3JldHVybiBnKGkpP2VuY29kZVVSSUNvbXBvbmVudChpKTphfSkpLGUmJmcodGhpcy5wcm94eSkmJih0PXRoaXMucHJveHkuZ2V0VVJMKHQpKSx0fTt2ZS5wcm90b3R5cGUuc2V0UXVlcnlQYXJhbWV0ZXJzPWZ1bmN0aW9uKG4sZSl7ZT90aGlzLl9xdWVyeVBhcmFtZXRlcnM9U2wodGhpcy5fcXVlcnlQYXJhbWV0ZXJzLG4sITEpOnRoaXMuX3F1ZXJ5UGFyYW1ldGVycz1TbChuLHRoaXMuX3F1ZXJ5UGFyYW1ldGVycywhMSl9O3ZlLnByb3RvdHlwZS5hcHBlbmRRdWVyeVBhcmFtZXRlcnM9ZnVuY3Rpb24obil7dGhpcy5fcXVlcnlQYXJhbWV0ZXJzPVNsKG4sdGhpcy5fcXVlcnlQYXJhbWV0ZXJzLCEwKX07dmUucHJvdG90eXBlLnNldFRlbXBsYXRlVmFsdWVzPWZ1bmN0aW9uKG4sZSl7ZT90aGlzLl90ZW1wbGF0ZVZhbHVlcz1fYSh0aGlzLl90ZW1wbGF0ZVZhbHVlcyxuKTp0aGlzLl90ZW1wbGF0ZVZhbHVlcz1fYShuLHRoaXMuX3RlbXBsYXRlVmFsdWVzKX07dmUucHJvdG90eXBlLmdldERlcml2ZWRSZXNvdXJjZT1mdW5jdGlvbihuKXtsZXQgZT10aGlzLmNsb25lKCk7aWYoZS5fcmV0cnlDb3VudD0wLGcobi51cmwpKXtsZXQgdD1uLnByZXNlcnZlUXVlcnlQYXJhbWV0ZXJzPz8hMTtlLnBhcnNlVXJsKG4udXJsLCEwLHQsdGhpcy5fdXJsKX1yZXR1cm4gZyhuLnF1ZXJ5UGFyYW1ldGVycykmJihlLl9xdWVyeVBhcmFtZXRlcnM9X2Eobi5xdWVyeVBhcmFtZXRlcnMsZS5xdWVyeVBhcmFtZXRlcnMpKSxnKG4udGVtcGxhdGVWYWx1ZXMpJiYoZS5fdGVtcGxhdGVWYWx1ZXM9X2Eobi50ZW1wbGF0ZVZhbHVlcyxlLnRlbXBsYXRlVmFsdWVzKSksZyhuLmhlYWRlcnMpJiYoZS5oZWFkZXJzPV9hKG4uaGVhZGVycyxlLmhlYWRlcnMpKSxnKG4ucHJveHkpJiYoZS5wcm94eT1uLnByb3h5KSxnKG4ucmVxdWVzdCkmJihlLnJlcXVlc3Q9bi5yZXF1ZXN0KSxnKG4ucmV0cnlDYWxsYmFjaykmJihlLnJldHJ5Q2FsbGJhY2s9bi5yZXRyeUNhbGxiYWNrKSxnKG4ucmV0cnlBdHRlbXB0cykmJihlLnJldHJ5QXR0ZW1wdHM9bi5yZXRyeUF0dGVtcHRzKSxlfTt2ZS5wcm90b3R5cGUucmV0cnlPbkVycm9yPWZ1bmN0aW9uKG4pe2xldCBlPXRoaXMucmV0cnlDYWxsYmFjaztpZih0eXBlb2YgZSE9ImZ1bmN0aW9uInx8dGhpcy5fcmV0cnlDb3VudD49dGhpcy5yZXRyeUF0dGVtcHRzKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2xldCB0PXRoaXM7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKHRoaXMsbikpLnRoZW4oZnVuY3Rpb24obyl7cmV0dXJuKyt0Ll9yZXRyeUNvdW50LG99KX07dmUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKG4pe3JldHVybiBnKG4pPyhuLl91cmw9dGhpcy5fdXJsLG4uX3F1ZXJ5UGFyYW1ldGVycz1RYyh0aGlzLl9xdWVyeVBhcmFtZXRlcnMpLG4uX3RlbXBsYXRlVmFsdWVzPVFjKHRoaXMuX3RlbXBsYXRlVmFsdWVzKSxuLmhlYWRlcnM9UWModGhpcy5oZWFkZXJzKSxuLnByb3h5PXRoaXMucHJveHksbi5yZXRyeUNhbGxiYWNrPXRoaXMucmV0cnlDYWxsYmFjayxuLnJldHJ5QXR0ZW1wdHM9dGhpcy5yZXRyeUF0dGVtcHRzLG4uX3JldHJ5Q291bnQ9MCxuLnJlcXVlc3Q9dGhpcy5yZXF1ZXN0LmNsb25lKCksbik6bmV3IHZlKHt1cmw6dGhpcy5fdXJsLHF1ZXJ5UGFyYW1ldGVyczp0aGlzLnF1ZXJ5UGFyYW1ldGVycyx0ZW1wbGF0ZVZhbHVlczp0aGlzLnRlbXBsYXRlVmFsdWVzLGhlYWRlcnM6dGhpcy5oZWFkZXJzLHByb3h5OnRoaXMucHJveHkscmV0cnlDYWxsYmFjazp0aGlzLnJldHJ5Q2FsbGJhY2sscmV0cnlBdHRlbXB0czp0aGlzLnJldHJ5QXR0ZW1wdHMscmVxdWVzdDp0aGlzLnJlcXVlc3QuY2xvbmUoKSxwYXJzZVVybDohMSxjcmVkaXRzOmcodGhpcy5jcmVkaXRzKT90aGlzLmNyZWRpdHMuc2xpY2UoKTp2b2lkIDB9KX07dmUucHJvdG90eXBlLmdldEJhc2VVcmk9ZnVuY3Rpb24obil7cmV0dXJuIHNBKHRoaXMuZ2V0VXJsQ29tcG9uZW50KG4pLG4pfTt2ZS5wcm90b3R5cGUuYXBwZW5kRm9yd2FyZFNsYXNoPWZ1bmN0aW9uKCl7dGhpcy5fdXJsPXRBKHRoaXMuX3VybCl9O3ZlLnByb3RvdHlwZS5mZXRjaEFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmV0Y2goe3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIifSl9O3ZlLmZldGNoQXJyYXlCdWZmZXI9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyB2ZShuKS5mZXRjaEFycmF5QnVmZmVyKCl9O3ZlLnByb3RvdHlwZS5mZXRjaEJsb2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJibG9iIn0pfTt2ZS5mZXRjaEJsb2I9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyB2ZShuKS5mZXRjaEJsb2IoKX07dmUucHJvdG90eXBlLmZldGNoSW1hZ2U9ZnVuY3Rpb24obil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5wcmVmZXJJbWFnZUJpdG1hcD8/ITEsdD1uLnByZWZlckJsb2I/PyExLG89bi5mbGlwWT8/ITEsYT1uLnNraXBDb2xvclNwYWNlQ29udmVyc2lvbj8/ITE7aWYoVGIodGhpcy5yZXF1ZXN0KSwhekF8fHRoaXMuaXNEYXRhVXJpfHx0aGlzLmlzQmxvYlVyaXx8IXRoaXMuaGFzSGVhZGVycyYmIXQpcmV0dXJuIHRoaXMuX2ZldGNoSW1hZ2Uoe3Jlc291cmNlOnRoaXMsZmxpcFk6byxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246YSxwcmVmZXJJbWFnZUJpdG1hcDplfSk7bGV0IHI9dGhpcy5mZXRjaEJsb2IoKTtpZighZyhyKSlyZXR1cm47bGV0IGksZixkLGM7cmV0dXJuIHZlLnN1cHBvcnRzSW1hZ2VCaXRtYXBPcHRpb25zKCkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gaT11LGY9aSYmZSxyfSkudGhlbihmdW5jdGlvbih1KXtpZighZyh1KSlyZXR1cm47aWYoYz11LGYpcmV0dXJuIHZlLmNyZWF0ZUltYWdlQml0bWFwRnJvbUJsb2IodSx7ZmxpcFk6byxwcmVtdWx0aXBseUFscGhhOiExLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjphfSk7bGV0IGw9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwodSk7cmV0dXJuIGQ9bmV3IHZlKHt1cmw6bH0pLGQuX2ZldGNoSW1hZ2Uoe2ZsaXBZOm8sc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOmEscHJlZmVySW1hZ2VCaXRtYXA6ITF9KX0pLnRoZW4oZnVuY3Rpb24odSl7aWYoZyh1KSlyZXR1cm4gdS5ibG9iPWMsZnx8d2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoZC51cmwpLHV9KS5jYXRjaChmdW5jdGlvbih1KXtyZXR1cm4gZyhkKSYmd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoZC51cmwpLHUuYmxvYj1jLFByb21pc2UucmVqZWN0KHUpfSl9O3ZlLnByb3RvdHlwZS5fZmV0Y2hJbWFnZT1mdW5jdGlvbihuKXtsZXQgZT10aGlzLHQ9bi5mbGlwWSxvPW4uc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uLGE9bi5wcmVmZXJJbWFnZUJpdG1hcCxyPWUucmVxdWVzdDtyLnVybD1lLnVybCxyLnJlcXVlc3RGdW5jdGlvbj1mdW5jdGlvbigpe2xldCBmPSExOyFlLmlzRGF0YVVyaSYmIWUuaXNCbG9iVXJpJiYoZj1lLmlzQ3Jvc3NPcmlnaW5VcmwpO2xldCBkPVFpKCk7cmV0dXJuIHZlLl9JbXBsZW1lbnRhdGlvbnMuY3JlYXRlSW1hZ2UocixmLGQsdCxvLGEpLGQucHJvbWlzZX07bGV0IGk9eGwucmVxdWVzdChyKTtpZihnKGkpKXJldHVybiBpLmNhdGNoKGZ1bmN0aW9uKGYpe3JldHVybiByLnN0YXRlIT09RW4uRkFJTEVEP1Byb21pc2UucmVqZWN0KGYpOmUucmV0cnlPbkVycm9yKGYpLnRoZW4oZnVuY3Rpb24oZCl7cmV0dXJuIGQ/KHIuc3RhdGU9RW4uVU5JU1NVRUQsci5kZWZlcnJlZD12b2lkIDAsZS5fZmV0Y2hJbWFnZSh7ZmxpcFk6dCxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246byxwcmVmZXJJbWFnZUJpdG1hcDphfSkpOlByb21pc2UucmVqZWN0KGYpfSl9KX07dmUuZmV0Y2hJbWFnZT1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IHZlKG4pLmZldGNoSW1hZ2Uoe2ZsaXBZOm4uZmxpcFksc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOm4uc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uLHByZWZlckJsb2I6bi5wcmVmZXJCbG9iLHByZWZlckltYWdlQml0bWFwOm4ucHJlZmVySW1hZ2VCaXRtYXB9KX07dmUucHJvdG90eXBlLmZldGNoVGV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoKHtyZXNwb25zZVR5cGU6InRleHQifSl9O3ZlLmZldGNoVGV4dD1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IHZlKG4pLmZldGNoVGV4dCgpfTt2ZS5wcm90b3R5cGUuZmV0Y2hKc29uPWZ1bmN0aW9uKCl7bGV0IG49dGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sKi8qO3E9MC4wMSJ9fSk7aWYoZyhuKSlyZXR1cm4gbi50aGVuKGZ1bmN0aW9uKGUpe2lmKGcoZSkpcmV0dXJuIEpTT04ucGFyc2UoZSl9KX07dmUuZmV0Y2hKc29uPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdmUobikuZmV0Y2hKc29uKCl9O3ZlLnByb3RvdHlwZS5mZXRjaFhNTD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoKHtyZXNwb25zZVR5cGU6ImRvY3VtZW50IixvdmVycmlkZU1pbWVUeXBlOiJ0ZXh0L3htbCJ9KX07dmUuZmV0Y2hYTUw9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyB2ZShuKS5mZXRjaFhNTCgpfTt2ZS5wcm90b3R5cGUuZmV0Y2hKc29ucD1mdW5jdGlvbihuKXtuPW4/PyJjYWxsYmFjayIsVGIodGhpcy5yZXF1ZXN0KTtsZXQgZTtkbyBlPWBsb2FkSnNvbnAke2submV4dFJhbmRvbU51bWJlcigpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIsOCl9YDt3aGlsZShnKHdpbmRvd1tlXSkpO3JldHVybiBHQSh0aGlzLG4sZSl9O3ZlLmZldGNoSnNvbnA9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyB2ZShuKS5mZXRjaEpzb25wKG4uY2FsbGJhY2tQYXJhbWV0ZXJOYW1lKX07dmUucHJvdG90eXBlLl9tYWtlUmVxdWVzdD1mdW5jdGlvbihuKXtsZXQgZT10aGlzO1RiKGUucmVxdWVzdCk7bGV0IHQ9ZS5yZXF1ZXN0LG89ZS51cmw7dC51cmw9byx0LnJlcXVlc3RGdW5jdGlvbj1mdW5jdGlvbigpe2xldCByPW4ucmVzcG9uc2VUeXBlLGk9X2Eobi5oZWFkZXJzLGUuaGVhZGVycyksZj1uLm92ZXJyaWRlTWltZVR5cGUsZD1uLm1ldGhvZCxjPW4uZGF0YSx1PVFpKCksbD12ZS5fSW1wbGVtZW50YXRpb25zLmxvYWRXaXRoWGhyKG8scixkLGMsaSx1LGYpO3JldHVybiBnKGwpJiZnKGwuYWJvcnQpJiYodC5jYW5jZWxGdW5jdGlvbj1mdW5jdGlvbigpe2wuYWJvcnQoKX0pLHUucHJvbWlzZX07bGV0IGE9eGwucmVxdWVzdCh0KTtpZihnKGEpKXJldHVybiBhLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FuY2VsRnVuY3Rpb249dm9pZCAwLHJ9KS5jYXRjaChmdW5jdGlvbihyKXtyZXR1cm4gdC5jYW5jZWxGdW5jdGlvbj12b2lkIDAsdC5zdGF0ZSE9PUVuLkZBSUxFRD9Qcm9taXNlLnJlamVjdChyKTplLnJldHJ5T25FcnJvcihyKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBpPyh0LnN0YXRlPUVuLlVOSVNTVUVELHQuZGVmZXJyZWQ9dm9pZCAwLGUuZmV0Y2gobikpOlByb21pc2UucmVqZWN0KHIpfSl9KX07d009L15kYXRhOiguKj8pKDtiYXNlNjQpPywoLiopJC87dmUucHJvdG90eXBlLmZldGNoPWZ1bmN0aW9uKG4pe3JldHVybiBuPW5yKG4se30pLG4ubWV0aG9kPSJHRVQiLHRoaXMuX21ha2VSZXF1ZXN0KG4pfTt2ZS5mZXRjaD1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IHZlKG4pLmZldGNoKHtyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTpuLm92ZXJyaWRlTWltZVR5cGV9KX07dmUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbj1ucihuLHt9KSxuLm1ldGhvZD0iREVMRVRFIix0aGlzLl9tYWtlUmVxdWVzdChuKX07dmUuZGVsZXRlPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdmUobikuZGVsZXRlKHtyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTpuLm92ZXJyaWRlTWltZVR5cGUsZGF0YTpuLmRhdGF9KX07dmUucHJvdG90eXBlLmhlYWQ9ZnVuY3Rpb24obil7cmV0dXJuIG49bnIobix7fSksbi5tZXRob2Q9IkhFQUQiLHRoaXMuX21ha2VSZXF1ZXN0KG4pfTt2ZS5oZWFkPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdmUobikuaGVhZCh7cmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6bi5vdmVycmlkZU1pbWVUeXBlfSl9O3ZlLnByb3RvdHlwZS5vcHRpb25zPWZ1bmN0aW9uKG4pe3JldHVybiBuPW5yKG4se30pLG4ubWV0aG9kPSJPUFRJT05TIix0aGlzLl9tYWtlUmVxdWVzdChuKX07dmUub3B0aW9ucz1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IHZlKG4pLm9wdGlvbnMoe3Jlc3BvbnNlVHlwZTpuLnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOm4ub3ZlcnJpZGVNaW1lVHlwZX0pfTt2ZS5wcm90b3R5cGUucG9zdD1mdW5jdGlvbihuLGUpe3JldHVybiBSbi5kZWZpbmVkKCJkYXRhIixuKSxlPW5yKGUse30pLGUubWV0aG9kPSJQT1NUIixlLmRhdGE9bix0aGlzLl9tYWtlUmVxdWVzdChlKX07dmUucG9zdD1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IHZlKG4pLnBvc3Qobi5kYXRhLHtyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTpuLm92ZXJyaWRlTWltZVR5cGV9KX07dmUucHJvdG90eXBlLnB1dD1mdW5jdGlvbihuLGUpe3JldHVybiBSbi5kZWZpbmVkKCJkYXRhIixuKSxlPW5yKGUse30pLGUubWV0aG9kPSJQVVQiLGUuZGF0YT1uLHRoaXMuX21ha2VSZXF1ZXN0KGUpfTt2ZS5wdXQ9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyB2ZShuKS5wdXQobi5kYXRhLHtyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTpuLm92ZXJyaWRlTWltZVR5cGV9KX07dmUucHJvdG90eXBlLnBhdGNoPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIFJuLmRlZmluZWQoImRhdGEiLG4pLGU9bnIoZSx7fSksZS5tZXRob2Q9IlBBVENIIixlLmRhdGE9bix0aGlzLl9tYWtlUmVxdWVzdChlKX07dmUucGF0Y2g9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyB2ZShuKS5wYXRjaChuLmRhdGEse3Jlc3BvbnNlVHlwZTpuLnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOm4ub3ZlcnJpZGVNaW1lVHlwZX0pfTt2ZS5fSW1wbGVtZW50YXRpb25zPXt9O3ZlLl9JbXBsZW1lbnRhdGlvbnMubG9hZEltYWdlRWxlbWVudD1mdW5jdGlvbihuLGUsdCl7bGV0IG89bmV3IEltYWdlO28ub25sb2FkPWZ1bmN0aW9uKCl7by5uYXR1cmFsV2lkdGg9PT0wJiZvLm5hdHVyYWxIZWlnaHQ9PT0wJiZvLndpZHRoPT09MCYmby5oZWlnaHQ9PT0wJiYoby53aWR0aD0zMDAsby5oZWlnaHQ9MTUwKSx0LnJlc29sdmUobyl9LG8ub25lcnJvcj1mdW5jdGlvbihhKXt0LnJlamVjdChhKX0sZSYmKHdiLmNvbnRhaW5zKG4pP28uY3Jvc3NPcmlnaW49InVzZS1jcmVkZW50aWFscyI6by5jcm9zc09yaWdpbj0iIiksby5zcmM9bn07dmUuX0ltcGxlbWVudGF0aW9ucy5jcmVhdGVJbWFnZT1mdW5jdGlvbihuLGUsdCxvLGEscixpKXtsZXQgZj1uLnVybDt2ZS5zdXBwb3J0c0ltYWdlQml0bWFwT3B0aW9ucygpLnRoZW4oZnVuY3Rpb24oZCl7aWYoIShkJiZyKSl7dmUuX0ltcGxlbWVudGF0aW9ucy5sb2FkSW1hZ2VFbGVtZW50KGYsZSx0KTtyZXR1cm59bGV0IGM9ImJsb2IiLHU9IkdFVCIsbD1RaSgpLG09dmUuX0ltcGxlbWVudGF0aW9ucy5sb2FkV2l0aFhocihmLGMsdSx2b2lkIDAsaSxsLHZvaWQgMCx2b2lkIDAsdm9pZCAwKTtyZXR1cm4gZyhtKSYmZyhtLmFib3J0KSYmKG4uY2FuY2VsRnVuY3Rpb249ZnVuY3Rpb24oKXttLmFib3J0KCl9KSxsLnByb21pc2UudGhlbihmdW5jdGlvbihoKXtpZighZyhoKSl7dC5yZWplY3QobmV3IG50KGBTdWNjZXNzZnVsbHkgcmV0cmlldmVkICR7Zn0gYnV0IGl0IGNvbnRhaW5lZCBubyBjb250ZW50LmApKTtyZXR1cm59cmV0dXJuIHZlLmNyZWF0ZUltYWdlQml0bWFwRnJvbUJsb2IoaCx7ZmxpcFk6byxwcmVtdWx0aXBseUFscGhhOiExLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjphfSl9KS50aGVuKGZ1bmN0aW9uKGgpe3QucmVzb2x2ZShoKX0pfSkuY2F0Y2goZnVuY3Rpb24oZCl7dC5yZWplY3QoZCl9KX07dmUuY3JlYXRlSW1hZ2VCaXRtYXBGcm9tQmxvYj1mdW5jdGlvbihuLGUpe3JldHVybiBSbi5kZWZpbmVkKCJvcHRpb25zIixlKSxSbi50eXBlT2YuYm9vbCgib3B0aW9ucy5mbGlwWSIsZS5mbGlwWSksUm4udHlwZU9mLmJvb2woIm9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSIsZS5wcmVtdWx0aXBseUFscGhhKSxSbi50eXBlT2YuYm9vbCgib3B0aW9ucy5za2lwQ29sb3JTcGFjZUNvbnZlcnNpb24iLGUuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uKSxjcmVhdGVJbWFnZUJpdG1hcChuLHtpbWFnZU9yaWVudGF0aW9uOmUuZmxpcFk/ImZsaXBZIjoibm9uZSIscHJlbXVsdGlwbHlBbHBoYTplLnByZW11bHRpcGx5QWxwaGE/InByZW11bHRpcGx5Ijoibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246ZS5za2lwQ29sb3JTcGFjZUNvbnZlcnNpb24/Im5vbmUiOiJkZWZhdWx0In0pfTtSTT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q+InUiO3ZlLl9JbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHI9ZnVuY3Rpb24obixlLHQsbyxhLHIsaSl7bGV0IGY9d00uZXhlYyhuKTtpZihmIT09bnVsbCl7ci5yZXNvbHZlKFRNKGYsZSkpO3JldHVybn1pZihSTSl7RU0obixlLHQsbyxhLHIsaSk7cmV0dXJufWxldCBkPW5ldyBYTUxIdHRwUmVxdWVzdDtpZih3Yi5jb250YWlucyhuKSYmKGQud2l0aENyZWRlbnRpYWxzPSEwKSxkLm9wZW4odCxuLCEwKSxnKGkpJiZnKGQub3ZlcnJpZGVNaW1lVHlwZSkmJmQub3ZlcnJpZGVNaW1lVHlwZShpKSxnKGEpKWZvcihsZXQgdSBpbiBhKWEuaGFzT3duUHJvcGVydHkodSkmJmQuc2V0UmVxdWVzdEhlYWRlcih1LGFbdV0pO2coZSkmJihkLnJlc3BvbnNlVHlwZT1lKTtsZXQgYz0hMTtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmciJiYoYz1uLmluZGV4T2YoImZpbGU6Ly8iKT09PTB8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubG9jYXRpb24ub3JpZ2luPT09ImZpbGU6Ly8iKSxkLm9ubG9hZD1mdW5jdGlvbigpe2lmKChkLnN0YXR1czwyMDB8fGQuc3RhdHVzPj0zMDApJiYhKGMmJmQuc3RhdHVzPT09MCkpe3IucmVqZWN0KG5ldyBSZihkLnN0YXR1cyxkLnJlc3BvbnNlLGQuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKTtyZXR1cm59bGV0IHU9ZC5yZXNwb25zZSxsPWQucmVzcG9uc2VUeXBlO2lmKHQ9PT0iSEVBRCJ8fHQ9PT0iT1BUSU9OUyIpe2xldCBoPWQuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkudHJpbSgpLnNwbGl0KC9bXHJcbl0rLyksYj17fTtoLmZvckVhY2goZnVuY3Rpb24ocCl7bGV0IHk9cC5zcGxpdCgiOiAiKSxUPXkuc2hpZnQoKTtiW1RdPXkuam9pbigiOiAiKX0pLHIucmVzb2x2ZShiKTtyZXR1cm59aWYoZC5zdGF0dXM9PT0yMDQpci5yZXNvbHZlKHZvaWQgMCk7ZWxzZSBpZihnKHUpJiYoIWcoZSl8fGw9PT1lKSlyLnJlc29sdmUodSk7ZWxzZSBpZihlPT09Impzb24iJiZ0eXBlb2YgdT09InN0cmluZyIpdHJ5e3IucmVzb2x2ZShKU09OLnBhcnNlKHUpKX1jYXRjaChtKXtyLnJlamVjdChtKX1lbHNlKGw9PT0iInx8bD09PSJkb2N1bWVudCIpJiZnKGQucmVzcG9uc2VYTUwpJiZkLnJlc3BvbnNlWE1MLmhhc0NoaWxkTm9kZXMoKT9yLnJlc29sdmUoZC5yZXNwb25zZVhNTCk6KGw9PT0iInx8bD09PSJ0ZXh0IikmJmcoZC5yZXNwb25zZVRleHQpP3IucmVzb2x2ZShkLnJlc3BvbnNlVGV4dCk6ci5yZWplY3QobmV3IG50KCJJbnZhbGlkIFhNTEh0dHBSZXF1ZXN0IHJlc3BvbnNlIHR5cGUuIikpfSxkLm9uZXJyb3I9ZnVuY3Rpb24odSl7ci5yZWplY3QobmV3IFJmKX0sZC5zZW5kKG8pLGR9O3ZlLl9JbXBsZW1lbnRhdGlvbnMubG9hZEFuZEV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24obixlLHQpe3JldHVybiBiQShuLGUpLmNhdGNoKGZ1bmN0aW9uKG8pe3QucmVqZWN0KG8pfSl9O3ZlLl9EZWZhdWx0SW1wbGVtZW50YXRpb25zPXt9O3ZlLl9EZWZhdWx0SW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlPXZlLl9JbXBsZW1lbnRhdGlvbnMuY3JlYXRlSW1hZ2U7dmUuX0RlZmF1bHRJbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHI9dmUuX0ltcGxlbWVudGF0aW9ucy5sb2FkV2l0aFhocjt2ZS5fRGVmYXVsdEltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdD12ZS5fSW1wbGVtZW50YXRpb25zLmxvYWRBbmRFeGVjdXRlU2NyaXB0O3ZlLkRFRkFVTFQ9T2JqZWN0LmZyZWV6ZShuZXcgdmUoe3VybDp0eXBlb2YgZG9jdW1lbnQ+InUiPyIiOmRvY3VtZW50LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXX0pKTt5YT12ZX0pO2Z1bmN0aW9uIENmKG4pe249bj8/T2UuRU1QVFlfT0JKRUNULHRoaXMuX2RhdGVzPXZvaWQgMCx0aGlzLl9zYW1wbGVzPXZvaWQgMCx0aGlzLl9kYXRlQ29sdW1uPS0xLHRoaXMuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj0tMSx0aGlzLl95UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49LTEsdGhpcy5fdXQxTWludXNVdGNTZWNvbmRzQ29sdW1uPS0xLHRoaXMuX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj0tMSx0aGlzLl95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49LTEsdGhpcy5fdGFpTWludXNVdGNTZWNvbmRzQ29sdW1uPS0xLHRoaXMuX2NvbHVtbkNvdW50PTAsdGhpcy5fbGFzdEluZGV4PS0xLHRoaXMuX2FkZE5ld0xlYXBTZWNvbmRzPW4uYWRkTmV3TGVhcFNlY29uZHM/PyEwLGcobi5kYXRhKT9WQSh0aGlzLG4uZGF0YSk6VkEodGhpcyx7Y29sdW1uTmFtZXM6WyJkYXRlSXNvODYwMSIsIm1vZGlmaWVkSnVsaWFuRGF0ZVV0YyIsInhQb2xlV2FuZGVyUmFkaWFucyIsInlQb2xlV2FuZGVyUmFkaWFucyIsInV0MU1pbnVzVXRjU2Vjb25kcyIsImxlbmd0aE9mRGF5Q29ycmVjdGlvblNlY29uZHMiLCJ4Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiLCJ5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiLCJ0YWlNaW51c1V0Y1NlY29uZHMiXSxzYW1wbGVzOltdfSl9ZnVuY3Rpb24geE0obixlKXtyZXR1cm4gS24uY29tcGFyZShuLmp1bGlhbkRhdGUsZSl9ZnVuY3Rpb24gVkEobixlKXtpZighZyhlLmNvbHVtbk5hbWVzKSl0aHJvdyBuZXcgbnQoIkVycm9yIGluIGxvYWRlZCBFT1AgZGF0YTogVGhlIGNvbHVtbk5hbWVzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiIpO2lmKCFnKGUuc2FtcGxlcykpdGhyb3cgbmV3IG50KCJFcnJvciBpbiBsb2FkZWQgRU9QIGRhdGE6IFRoZSBzYW1wbGVzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiIpO2xldCB0PWUuY29sdW1uTmFtZXMuaW5kZXhPZigibW9kaWZpZWRKdWxpYW5EYXRlVXRjIiksbz1lLmNvbHVtbk5hbWVzLmluZGV4T2YoInhQb2xlV2FuZGVyUmFkaWFucyIpLGE9ZS5jb2x1bW5OYW1lcy5pbmRleE9mKCJ5UG9sZVdhbmRlclJhZGlhbnMiKSxyPWUuY29sdW1uTmFtZXMuaW5kZXhPZigidXQxTWludXNVdGNTZWNvbmRzIiksaT1lLmNvbHVtbk5hbWVzLmluZGV4T2YoInhDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFucyIpLGY9ZS5jb2x1bW5OYW1lcy5pbmRleE9mKCJ5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiKSxkPWUuY29sdW1uTmFtZXMuaW5kZXhPZigidGFpTWludXNVdGNTZWNvbmRzIik7aWYodDwwfHxvPDB8fGE8MHx8cjwwfHxpPDB8fGY8MHx8ZDwwKXRocm93IG5ldyBudCgiRXJyb3IgaW4gbG9hZGVkIEVPUCBkYXRhOiBUaGUgY29sdW1uTmFtZXMgcHJvcGVydHkgbXVzdCBpbmNsdWRlIG1vZGlmaWVkSnVsaWFuRGF0ZVV0YywgeFBvbGVXYW5kZXJSYWRpYW5zLCB5UG9sZVdhbmRlclJhZGlhbnMsIHV0MU1pbnVzVXRjU2Vjb25kcywgeENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zLCB5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMsIGFuZCB0YWlNaW51c1V0Y1NlY29uZHMgY29sdW1ucyIpO2xldCBjPW4uX3NhbXBsZXM9ZS5zYW1wbGVzLHU9bi5fZGF0ZXM9W107bi5fZGF0ZUNvbHVtbj10LG4uX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj1vLG4uX3lQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj1hLG4uX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbj1yLG4uX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj1pLG4uX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj1mLG4uX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbj1kLG4uX2NvbHVtbkNvdW50PWUuY29sdW1uTmFtZXMubGVuZ3RoLG4uX2xhc3RJbmRleD12b2lkIDA7bGV0IGwsbT1uLl9hZGROZXdMZWFwU2Vjb25kcztmb3IobGV0IGg9MCxiPWMubGVuZ3RoO2g8YjtoKz1uLl9jb2x1bW5Db3VudCl7bGV0IHA9Y1toK3RdLHk9Y1toK2RdLFQ9cCtsbi5NT0RJRklFRF9KVUxJQU5fREFURV9ESUZGRVJFTkNFLF89bmV3IEtuKFQseSxodC5UQUkpO2lmKHUucHVzaChfKSxtKXtpZih5IT09bCYmZyhsKSl7bGV0IHc9S24ubGVhcFNlY29uZHMsRT1nYSh3LF8seE0pO2lmKEU8MCl7bGV0IFI9bmV3IFd0KF8seSk7dy5zcGxpY2UofkUsMCxSKX19bD15fX19ZnVuY3Rpb24gSEEobixlLHQsbyxhKXtsZXQgcj10Km87YS54UG9sZVdhbmRlcj1lW3Irbi5feFBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSxhLnlQb2xlV2FuZGVyPWVbcituLl95UG9sZVdhbmRlclJhZGlhbnNDb2x1bW5dLGEueFBvbGVPZmZzZXQ9ZVtyK24uX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0sYS55UG9sZU9mZnNldD1lW3Irbi5feUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uXSxhLnV0MU1pbnVzVXRjPWVbcituLl91dDFNaW51c1V0Y1NlY29uZHNDb2x1bW5dfWZ1bmN0aW9uIFNmKG4sZSx0KXtyZXR1cm4gZStuKih0LWUpfWZ1bmN0aW9uIEtBKG4sZSx0LG8sYSxyLGkpe2xldCBmPW4uX2NvbHVtbkNvdW50O2lmKHI+ZS5sZW5ndGgtMSlyZXR1cm4gaS54UG9sZVdhbmRlcj0wLGkueVBvbGVXYW5kZXI9MCxpLnhQb2xlT2Zmc2V0PTAsaS55UG9sZU9mZnNldD0wLGkudXQxTWludXNVdGM9MCxpO2xldCBkPWVbYV0sYz1lW3JdO2lmKGQuZXF1YWxzKGMpfHxvLmVxdWFscyhkKSlyZXR1cm4gSEEobix0LGEsZixpKSxpO2lmKG8uZXF1YWxzKGMpKXJldHVybiBIQShuLHQscixmLGkpLGk7bGV0IHU9S24uc2Vjb25kc0RpZmZlcmVuY2UobyxkKS9Lbi5zZWNvbmRzRGlmZmVyZW5jZShjLGQpLGw9YSpmLG09cipmLGg9dFtsK24uX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbl0sYj10W20rbi5fdXQxTWludXNVdGNTZWNvbmRzQ29sdW1uXSxwPWItaDtpZihwPi41fHxwPC0uNSl7bGV0IHk9dFtsK24uX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbl0sVD10W20rbi5fdGFpTWludXNVdGNTZWNvbmRzQ29sdW1uXTt5IT09VCYmKGMuZXF1YWxzKG8pP2g9YjpiLT1ULXkpfXJldHVybiBpLnhQb2xlV2FuZGVyPVNmKHUsdFtsK24uX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0sdFttK24uX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0pLGkueVBvbGVXYW5kZXI9U2YodSx0W2wrbi5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSx0W20rbi5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSksaS54UG9sZU9mZnNldD1TZih1LHRbbCtuLl94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dLHRbbStuLl94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dKSxpLnlQb2xlT2Zmc2V0PVNmKHUsdFtsK24uX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0sdFttK24uX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0pLGkudXQxTWludXNVdGM9U2YodSxoLGIpLGl9dmFyIHFBLFdBPVgoKCk9PntzbCgpO3N0KCk7ZmUoKTt0YigpO2hsKCk7YWIoKTtucygpO3BhKCk7ZmwoKTtkbCgpO0NmLmZyb21Vcmw9YXN5bmMgZnVuY3Rpb24obixlKXtlPWU/P09lLkVNUFRZX09CSkVDVDtsZXQgdD15YS5jcmVhdGVJZk5lZWRlZChuKSxvO3RyeXtvPWF3YWl0IHQuZmV0Y2hKc29uKCl9Y2F0Y2h7dGhyb3cgbmV3IG50KGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXRyaWV2aW5nIHRoZSBFT1AgZGF0YSBmcm9tIHRoZSBVUkwgJHt0LnVybH0uYCl9cmV0dXJuIG5ldyBDZih7YWRkTmV3TGVhcFNlY29uZHM6ZS5hZGROZXdMZWFwU2Vjb25kcyxkYXRhOm99KX07Q2YuTk9ORT1PYmplY3QuZnJlZXplKHtjb21wdXRlOmZ1bmN0aW9uKG4sZSl7cmV0dXJuIGcoZSk/KGUueFBvbGVXYW5kZXI9MCxlLnlQb2xlV2FuZGVyPTAsZS54UG9sZU9mZnNldD0wLGUueVBvbGVPZmZzZXQ9MCxlLnV0MU1pbnVzVXRjPTApOmU9bmV3IEFmKDAsMCwwLDAsMCksZX19KTtDZi5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlvbihuLGUpe2lmKCFnKHRoaXMuX3NhbXBsZXMpKXJldHVybjtpZihnKGUpfHwoZT1uZXcgQWYoMCwwLDAsMCwwKSksdGhpcy5fc2FtcGxlcy5sZW5ndGg9PT0wKXJldHVybiBlLnhQb2xlV2FuZGVyPTAsZS55UG9sZVdhbmRlcj0wLGUueFBvbGVPZmZzZXQ9MCxlLnlQb2xlT2Zmc2V0PTAsZS51dDFNaW51c1V0Yz0wLGU7bGV0IHQ9dGhpcy5fZGF0ZXMsbz10aGlzLl9sYXN0SW5kZXgsYSxyO2lmKGcobykpe2xldCBmPXRbb10sZD10W28rMV0sYz1Lbi5sZXNzVGhhbk9yRXF1YWxzKGYsbiksdT0hZyhkKSxsPXV8fEtuLmdyZWF0ZXJUaGFuT3JFcXVhbHMoZCxuKTtpZihjJiZsKXJldHVybiBhPW8sIXUmJmQuZXF1YWxzKG4pJiYrK2Escj1hKzEsS0EodGhpcyx0LHRoaXMuX3NhbXBsZXMsbixhLHIsZSksZX1sZXQgaT1nYSh0LG4sS24uY29tcGFyZSx0aGlzLl9kYXRlQ29sdW1uKTtyZXR1cm4gaT49MD8oaTx0Lmxlbmd0aC0xJiZ0W2krMV0uZXF1YWxzKG4pJiYrK2ksYT1pLHI9aSk6KHI9fmksYT1yLTEsYTwwJiYoYT0wKSksdGhpcy5fbGFzdEluZGV4PWEsS0EodGhpcyx0LHRoaXMuX3NhbXBsZXMsbixhLHIsZSksZX07cUE9Q2Z9KTtmdW5jdGlvbiBTbyhuLGUsdCl7dGhpcy5oZWFkaW5nPW4/PzAsdGhpcy5waXRjaD1lPz8wLHRoaXMucm9sbD10Pz8wfXZhciBDbCxYQT1YKCgpPT57ZmUoKTtqZSgpO1NvLmZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKG4sZSl7ZyhlKXx8KGU9bmV3IFNvKTtsZXQgdD0yKihuLncqbi55LW4ueipuLngpLG89MS0yKihuLngqbi54K24ueSpuLnkpLGE9Mioobi53Km4ueCtuLnkqbi56KSxyPTEtMioobi55Km4ueStuLnoqbi56KSxpPTIqKG4udypuLnorbi54Km4ueSk7cmV0dXJuIGUuaGVhZGluZz0tTWF0aC5hdGFuMihpLHIpLGUucm9sbD1NYXRoLmF0YW4yKGEsbyksZS5waXRjaD0tay5hc2luQ2xhbXBlZCh0KSxlfTtTby5mcm9tRGVncmVlcz1mdW5jdGlvbihuLGUsdCxvKXtyZXR1cm4gZyhvKXx8KG89bmV3IFNvKSxvLmhlYWRpbmc9biprLlJBRElBTlNfUEVSX0RFR1JFRSxvLnBpdGNoPWUqay5SQURJQU5TX1BFUl9ERUdSRUUsby5yb2xsPXQqay5SQURJQU5TX1BFUl9ERUdSRUUsb307U28uY2xvbmU9ZnVuY3Rpb24obixlKXtpZihnKG4pKXJldHVybiBnKGUpPyhlLmhlYWRpbmc9bi5oZWFkaW5nLGUucGl0Y2g9bi5waXRjaCxlLnJvbGw9bi5yb2xsLGUpOm5ldyBTbyhuLmhlYWRpbmcsbi5waXRjaCxuLnJvbGwpfTtTby5lcXVhbHM9ZnVuY3Rpb24obixlKXtyZXR1cm4gbj09PWV8fGcobikmJmcoZSkmJm4uaGVhZGluZz09PWUuaGVhZGluZyYmbi5waXRjaD09PWUucGl0Y2gmJm4ucm9sbD09PWUucm9sbH07U28uZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihuLGUsdCxvKXtyZXR1cm4gbj09PWV8fGcobikmJmcoZSkmJmsuZXF1YWxzRXBzaWxvbihuLmhlYWRpbmcsZS5oZWFkaW5nLHQsbykmJmsuZXF1YWxzRXBzaWxvbihuLnBpdGNoLGUucGl0Y2gsdCxvKSYmay5lcXVhbHNFcHNpbG9uKG4ucm9sbCxlLnJvbGwsdCxvKX07U28ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKG4pe3JldHVybiBTby5jbG9uZSh0aGlzLG4pfTtTby5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKG4pe3JldHVybiBTby5lcXVhbHModGhpcyxuKX07U28ucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24obixlLHQpe3JldHVybiBTby5lcXVhbHNFcHNpbG9uKHRoaXMsbixlLHQpfTtTby5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy5oZWFkaW5nfSwgJHt0aGlzLnBpdGNofSwgJHt0aGlzLnJvbGx9KWB9O0NsPVNvfSk7ZnVuY3Rpb24gT00oKXtsZXQgbj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKGxldCBlPTAsdD1uLmxlbmd0aDtlPHQ7KytlKXtsZXQgbz1uW2VdLmdldEF0dHJpYnV0ZSgic3JjIiksYT1KQS5leGVjKG8pO2lmKGEhPT1udWxsKXJldHVybiBhWzFdfX1mdW5jdGlvbiBaQShuKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PiJ1Ij9uOihnKE1sKXx8KE1sPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSksTWwuaHJlZj1uLE1sLmhyZWYpfWZ1bmN0aW9uIFFBKCl7aWYoZyh0YykpcmV0dXJuIHRjO2xldCBuO3JldHVybiB0eXBlb2YgQ0VTSVVNX0JBU0VfVVJMPCJ1Ij9uPUNFU0lVTV9CQVNFX1VSTDpnKFlBPy51cmwpP249VGYoIi4iLFlBLnVybCk6dHlwZW9mIGRlZmluZT09Im9iamVjdCImJmcoZGVmaW5lLmFtZCkmJiFkZWZpbmUuYW1kLnRvVXJsVW5kZWZpbmVkJiZnKGxhLnRvVXJsKT9uPVRmKCIuLiIsbmMoIkNvcmUvYnVpbGRNb2R1bGVVcmwuanMiKSk6bj1PTSgpLHRjPW5ldyB5YSh7dXJsOlpBKG4pfSksdGMuYXBwZW5kRm9yd2FyZFNsYXNoKCksdGN9ZnVuY3Rpb24gU00obil7cmV0dXJuIFpBKGxhLnRvVXJsKGAuLi8ke259YCkpfWZ1bmN0aW9uICRBKG4pe3JldHVybiBRQSgpLmdldERlcml2ZWRSZXNvdXJjZSh7dXJsOm59KS51cmx9ZnVuY3Rpb24gbmMobil7cmV0dXJuIGcoTmwpfHwodHlwZW9mIGRlZmluZT09Im9iamVjdCImJmcoZGVmaW5lLmFtZCkmJiFkZWZpbmUuYW1kLnRvVXJsVW5kZWZpbmVkJiZnKGxhLnRvVXJsKT9ObD1TTTpObD0kQSksTmwobil9dmFyIFlBLEpBLE1sLHRjLE5sLG9yLElsPVgoKCk9PntmZSgpO2xiKCk7bnMoKTtZQT17fSxKQT0vKCg/Oi4qXC8pfF4pQ2VzaXVtXC5qcyg/Olw/fFwjfCQpLztuYy5fY2VzaXVtU2NyaXB0UmVnZXg9SkE7bmMuX2J1aWxkTW9kdWxlVXJsRnJvbUJhc2VVcmw9JEE7bmMuX2NsZWFyQmFzZVJlc291cmNlPWZ1bmN0aW9uKCl7dGM9dm9pZCAwfTtuYy5zZXRCYXNlVXJsPWZ1bmN0aW9uKG4pe3RjPXlhLkRFRkFVTFQuZ2V0RGVyaXZlZFJlc291cmNlKHt1cmw6bn0pfTtuYy5nZXRDZXNpdW1CYXNlVXJsPVFBO29yPW5jfSk7ZnVuY3Rpb24gQ00obixlLHQpe3RoaXMueD1uLHRoaXMueT1lLHRoaXMucz10fXZhciBQbCxFYj1YKCgpPT57UGw9Q019KTtmdW5jdGlvbiBrbChuKXtuPW4/P09lLkVNUFRZX09CSkVDVCx0aGlzLl94eXNGaWxlVXJsVGVtcGxhdGU9eWEuY3JlYXRlSWZOZWVkZWQobi54eXNGaWxlVXJsVGVtcGxhdGUpLHRoaXMuX2ludGVycG9sYXRpb25PcmRlcj1uLmludGVycG9sYXRpb25PcmRlcj8/OSx0aGlzLl9zYW1wbGVaZXJvSnVsaWFuRXBoZW1lcmlzRGF0ZT1uLnNhbXBsZVplcm9KdWxpYW5FcGhlbWVyaXNEYXRlPz8yNDQyMzk2NWUtMSx0aGlzLl9zYW1wbGVaZXJvRGF0ZVRUPW5ldyBLbih0aGlzLl9zYW1wbGVaZXJvSnVsaWFuRXBoZW1lcmlzRGF0ZSwwLGh0LlRBSSksdGhpcy5fc3RlcFNpemVEYXlzPW4uc3RlcFNpemVEYXlzPz8xLHRoaXMuX3NhbXBsZXNQZXJYeXNGaWxlPW4uc2FtcGxlc1Blclh5c0ZpbGU/PzFlMyx0aGlzLl90b3RhbFNhbXBsZXM9bi50b3RhbFNhbXBsZXM/PzI3NDI2LHRoaXMuX3NhbXBsZXM9bmV3IEFycmF5KHRoaXMuX3RvdGFsU2FtcGxlcyozKSx0aGlzLl9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3M9W107bGV0IGU9dGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLHQ9dGhpcy5fZGVub21pbmF0b3JzPW5ldyBBcnJheShlKzEpLG89dGhpcy5feFRhYmxlPW5ldyBBcnJheShlKzEpLGE9TWF0aC5wb3codGhpcy5fc3RlcFNpemVEYXlzLGUpO2ZvcihsZXQgcj0wO3I8PWU7KytyKXt0W3JdPWEsb1tyXT1yKnRoaXMuX3N0ZXBTaXplRGF5cztmb3IobGV0IGk9MDtpPD1lOysraSlpIT09ciYmKHRbcl0qPXItaSk7dFtyXT0xL3Rbcl19dGhpcy5fd29yaz1uZXcgQXJyYXkoZSsxKSx0aGlzLl9jb2VmPW5ldyBBcnJheShlKzEpfWZ1bmN0aW9uIFJiKG4sZSx0KXtsZXQgbz1NTTtyZXR1cm4gby5kYXlOdW1iZXI9ZSxvLnNlY29uZHNPZkRheT10LEtuLmRheXNEaWZmZXJlbmNlKG8sbi5fc2FtcGxlWmVyb0RhdGVUVCl9YXN5bmMgZnVuY3Rpb24gTk0obixlLHQpe3RyeXtsZXQgbz1hd2FpdCBuLmZldGNoSnNvbigpO3QuX3VwZGF0ZUNodW5rRGF0YShlLG8pfWNhdGNoe319ZnVuY3Rpb24geGIobixlKXtpZihnKG4uX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1tlXSkpcmV0dXJuIG4uX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1tlXTtsZXQgdCxvPW4uX3h5c0ZpbGVVcmxUZW1wbGF0ZTtnKG8pP3Q9by5nZXREZXJpdmVkUmVzb3VyY2Uoe3RlbXBsYXRlVmFsdWVzOnswOmV9fSk6dD1uZXcgeWEoe3VybDpvcihgQXNzZXRzL0lBVTIwMDZfWFlTL0lBVTIwMDZfWFlTXyR7ZX0uanNvbmApfSk7bGV0IGE9Tk0odCxlLG4pO3JldHVybiBuLl9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3NbZV09YSxhfXZhciBNTSxldyx0dz1YKCgpPT57SWwoKTtzdCgpO2ZlKCk7RWIoKTtobCgpO25zKCk7ZGwoKTtNTT1uZXcgS24oMCwwLGh0LlRBSSk7a2wucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9UmIodGhpcyxuLGUpLHI9UmIodGhpcyx0LG8pLGk9YS90aGlzLl9zdGVwU2l6ZURheXMtdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLzJ8MDtpPDAmJihpPTApO2xldCBmPXIvdGhpcy5fc3RlcFNpemVEYXlzLXRoaXMuX2ludGVycG9sYXRpb25PcmRlci8yfDArdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyO2Y+PXRoaXMuX3RvdGFsU2FtcGxlcyYmKGY9dGhpcy5fdG90YWxTYW1wbGVzLTEpO2xldCBkPWkvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCxjPWYvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCx1PVtdO2ZvcihsZXQgbD1kO2w8PWM7KytsKXUucHVzaCh4Yih0aGlzLGwpKTtyZXR1cm4gUHJvbWlzZS5hbGwodSl9O2tsLnByb3RvdHlwZS5jb21wdXRlWHlzUmFkaWFucz1mdW5jdGlvbihuLGUsdCl7bGV0IG89UmIodGhpcyxuLGUpO2lmKG88MClyZXR1cm47bGV0IGE9by90aGlzLl9zdGVwU2l6ZURheXN8MDtpZihhPj10aGlzLl90b3RhbFNhbXBsZXMpcmV0dXJuO2xldCByPXRoaXMuX2ludGVycG9sYXRpb25PcmRlcixpPWEtKHIvMnwwKTtpPDAmJihpPTApO2xldCBmPWkrcjtmPj10aGlzLl90b3RhbFNhbXBsZXMmJihmPXRoaXMuX3RvdGFsU2FtcGxlcy0xLGk9Zi1yLGk8MCYmKGk9MCkpO2xldCBkPSExLGM9dGhpcy5fc2FtcGxlcztpZihnKGNbaSozXSl8fCh4Yih0aGlzLGkvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCksZD0hMCksZyhjW2YqM10pfHwoeGIodGhpcyxmL3RoaXMuX3NhbXBsZXNQZXJYeXNGaWxlfDApLGQ9ITApLGQpcmV0dXJuO2codCk/KHQueD0wLHQueT0wLHQucz0wKTp0PW5ldyBQbCgwLDAsMCk7bGV0IHU9by1pKnRoaXMuX3N0ZXBTaXplRGF5cyxsPXRoaXMuX3dvcmssbT10aGlzLl9kZW5vbWluYXRvcnMsaD10aGlzLl9jb2VmLGI9dGhpcy5feFRhYmxlLHAseTtmb3IocD0wO3A8PXI7KytwKWxbcF09dS1iW3BdO2ZvcihwPTA7cDw9cjsrK3Ape2ZvcihoW3BdPTEseT0wO3k8PXI7Kyt5KXkhPT1wJiYoaFtwXSo9bFt5XSk7aFtwXSo9bVtwXTtsZXQgVD0oaStwKSozO3QueCs9aFtwXSpjW1QrK10sdC55Kz1oW3BdKmNbVCsrXSx0LnMrPWhbcF0qY1tUXX1yZXR1cm4gdH07a2wucHJvdG90eXBlLl91cGRhdGVDaHVua0RhdGE9ZnVuY3Rpb24obix7c2FtcGxlczplfSl7dGhpcy5fY2h1bmtEb3dubG9hZHNJblByb2dyZXNzW25dPXZvaWQgMDtsZXQgdD10aGlzLl9zYW1wbGVzUGVyWHlzRmlsZSxvPW4qdCozO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7KythKXRoaXMuX3NhbXBsZXNbbythXT1lW2FdfTtldz1rbH0pO3ZhciB1aSxQbixxbyxudyxvdz1YKCgpPT57ZmUoKTtQbj17cmVxdWVzdEZ1bGxzY3JlZW46dm9pZCAwLGV4aXRGdWxsc2NyZWVuOnZvaWQgMCxmdWxsc2NyZWVuRW5hYmxlZDp2b2lkIDAsZnVsbHNjcmVlbkVsZW1lbnQ6dm9pZCAwLGZ1bGxzY3JlZW5jaGFuZ2U6dm9pZCAwLGZ1bGxzY3JlZW5lcnJvcjp2b2lkIDB9LHFvPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHFvLHtlbGVtZW50OntnZXQ6ZnVuY3Rpb24oKXtpZihxby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gZG9jdW1lbnRbUG4uZnVsbHNjcmVlbkVsZW1lbnRdfX0sY2hhbmdlRXZlbnROYW1lOntnZXQ6ZnVuY3Rpb24oKXtpZihxby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gUG4uZnVsbHNjcmVlbmNoYW5nZX19LGVycm9yRXZlbnROYW1lOntnZXQ6ZnVuY3Rpb24oKXtpZihxby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gUG4uZnVsbHNjcmVlbmVycm9yfX0sZW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7aWYocW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIGRvY3VtZW50W1BuLmZ1bGxzY3JlZW5FbmFibGVkXX19LGZ1bGxzY3JlZW46e2dldDpmdW5jdGlvbigpe2lmKHFvLnN1cHBvcnRzRnVsbHNjcmVlbigpKXJldHVybiBxby5lbGVtZW50IT09bnVsbH19fSk7cW8uc3VwcG9ydHNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7aWYoZyh1aSkpcmV0dXJuIHVpO3VpPSExO2xldCBuPWRvY3VtZW50LmJvZHk7aWYodHlwZW9mIG4ucmVxdWVzdEZ1bGxzY3JlZW49PSJmdW5jdGlvbiIpcmV0dXJuIFBuLnJlcXVlc3RGdWxsc2NyZWVuPSJyZXF1ZXN0RnVsbHNjcmVlbiIsUG4uZXhpdEZ1bGxzY3JlZW49ImV4aXRGdWxsc2NyZWVuIixQbi5mdWxsc2NyZWVuRW5hYmxlZD0iZnVsbHNjcmVlbkVuYWJsZWQiLFBuLmZ1bGxzY3JlZW5FbGVtZW50PSJmdWxsc2NyZWVuRWxlbWVudCIsUG4uZnVsbHNjcmVlbmNoYW5nZT0iZnVsbHNjcmVlbmNoYW5nZSIsUG4uZnVsbHNjcmVlbmVycm9yPSJmdWxsc2NyZWVuZXJyb3IiLHVpPSEwLHVpO2xldCBlPVsid2Via2l0IiwibW96IiwibyIsIm1zIiwia2h0bWwiXSx0O2ZvcihsZXQgbz0wLGE9ZS5sZW5ndGg7bzxhOysrbyl7bGV0IHI9ZVtvXTt0PWAke3J9UmVxdWVzdEZ1bGxzY3JlZW5gLHR5cGVvZiBuW3RdPT0iZnVuY3Rpb24iPyhQbi5yZXF1ZXN0RnVsbHNjcmVlbj10LHVpPSEwKToodD1gJHtyfVJlcXVlc3RGdWxsU2NyZWVuYCx0eXBlb2Ygblt0XT09ImZ1bmN0aW9uIiYmKFBuLnJlcXVlc3RGdWxsc2NyZWVuPXQsdWk9ITApKSx0PWAke3J9RXhpdEZ1bGxzY3JlZW5gLHR5cGVvZiBkb2N1bWVudFt0XT09ImZ1bmN0aW9uIj9Qbi5leGl0RnVsbHNjcmVlbj10Oih0PWAke3J9Q2FuY2VsRnVsbFNjcmVlbmAsdHlwZW9mIGRvY3VtZW50W3RdPT0iZnVuY3Rpb24iJiYoUG4uZXhpdEZ1bGxzY3JlZW49dCkpLHQ9YCR7cn1GdWxsc2NyZWVuRW5hYmxlZGAsZG9jdW1lbnRbdF0hPT12b2lkIDA/UG4uZnVsbHNjcmVlbkVuYWJsZWQ9dDoodD1gJHtyfUZ1bGxTY3JlZW5FbmFibGVkYCxkb2N1bWVudFt0XSE9PXZvaWQgMCYmKFBuLmZ1bGxzY3JlZW5FbmFibGVkPXQpKSx0PWAke3J9RnVsbHNjcmVlbkVsZW1lbnRgLGRvY3VtZW50W3RdIT09dm9pZCAwP1BuLmZ1bGxzY3JlZW5FbGVtZW50PXQ6KHQ9YCR7cn1GdWxsU2NyZWVuRWxlbWVudGAsZG9jdW1lbnRbdF0hPT12b2lkIDAmJihQbi5mdWxsc2NyZWVuRWxlbWVudD10KSksdD1gJHtyfWZ1bGxzY3JlZW5jaGFuZ2VgLGRvY3VtZW50W2BvbiR7dH1gXSE9PXZvaWQgMCYmKHI9PT0ibXMiJiYodD0iTVNGdWxsc2NyZWVuQ2hhbmdlIiksUG4uZnVsbHNjcmVlbmNoYW5nZT10KSx0PWAke3J9ZnVsbHNjcmVlbmVycm9yYCxkb2N1bWVudFtgb24ke3R9YF0hPT12b2lkIDAmJihyPT09Im1zIiYmKHQ9Ik1TRnVsbHNjcmVlbkVycm9yIiksUG4uZnVsbHNjcmVlbmVycm9yPXQpfXJldHVybiB1aX07cW8ucmVxdWVzdEZ1bGxzY3JlZW49ZnVuY3Rpb24obixlKXtxby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSYmbltQbi5yZXF1ZXN0RnVsbHNjcmVlbl0oe3ZyRGlzcGxheTplfSl9O3FvLmV4aXRGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7cW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkmJmRvY3VtZW50W1BuLmV4aXRGdWxsc2NyZWVuXSgpfTtxby5fbmFtZXM9UG47bnc9cW99KTtmdW5jdGlvbiBNZihuKXtsZXQgZT1uLnNwbGl0KCIuIik7Zm9yKGxldCB0PTAsbz1lLmxlbmd0aDt0PG87Kyt0KWVbdF09cGFyc2VJbnQoZVt0XSwxMCk7cmV0dXJuIGV9ZnVuY3Rpb24gTmIoKXtpZighZyh2bCkmJih2bD0hMSwhTGwoKSkpe2xldCBuPS8gQ2hyb21lXC8oW1wuMC05XSspLy5leGVjKEFhLnVzZXJBZ2VudCk7biE9PW51bGwmJih2bD0hMCxhdz1NZihuWzFdKSl9cmV0dXJuIHZsfWZ1bmN0aW9uIElNKCl7cmV0dXJuIE5iKCkmJmF3fWZ1bmN0aW9uIGl3KCl7aWYoIWcoRmwpJiYoRmw9ITEsIU5iKCkmJiFMbCgpJiYvIFNhZmFyaVwvW1wuMC05XSsvLnRlc3QoQWEudXNlckFnZW50KSkpe2xldCBuPS8gVmVyc2lvblwvKFtcLjAtOV0rKS8uZXhlYyhBYS51c2VyQWdlbnQpO24hPT1udWxsJiYoRmw9ITAscnc9TWYoblsxXSkpfXJldHVybiBGbH1mdW5jdGlvbiBQTSgpe3JldHVybiBpdygpJiZyd31mdW5jdGlvbiBjdygpe2lmKCFnKERsKSl7RGw9ITE7bGV0IG49LyBBcHBsZVdlYktpdFwvKFtcLjAtOV0rKShcKz8pLy5leGVjKEFhLnVzZXJBZ2VudCk7biE9PW51bGwmJihEbD0hMCxNYj1NZihuWzFdKSxNYi5pc05pZ2h0bHk9ISFuWzJdKX1yZXR1cm4gRGx9ZnVuY3Rpb24ga00oKXtyZXR1cm4gY3coKSYmTWJ9ZnVuY3Rpb24gTGwoKXtpZighZyhCbCkpe0JsPSExO2xldCBuPS8gRWRnXC8oW1wuMC05XSspLy5leGVjKEFhLnVzZXJBZ2VudCk7biE9PW51bGwmJihCbD0hMCxzdz1NZihuWzFdKSl9cmV0dXJuIEJsfWZ1bmN0aW9uIHZNKCl7cmV0dXJuIExsKCkmJnN3fWZ1bmN0aW9uIHpsKCl7aWYoIWcoVWwpKXtVbD0hMTtsZXQgbj0vRmlyZWZveFwvKFtcLjAtOV0rKS8uZXhlYyhBYS51c2VyQWdlbnQpO24hPT1udWxsJiYoVWw9ITAsSWI9TWYoblsxXSkpfXJldHVybiBVbH1mdW5jdGlvbiBGTSgpe3JldHVybiBnKE9iKXx8KE9iPS9XaW5kb3dzL2kudGVzdChBYS5hcHBWZXJzaW9uKSksT2J9ZnVuY3Rpb24gRE0oKXtyZXR1cm4gZyhTYil8fChTYj1uYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBob25lInx8bmF2aWdhdG9yLnBsYXRmb3JtPT09ImlQb2QifHxuYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBhZCIpLFNifWZ1bmN0aW9uIEJNKCl7cmV0dXJuIHpsKCkmJklifWZ1bmN0aW9uIFVNKCl7cmV0dXJuIGcoQ2IpfHwoQ2I9IXpsKCkmJnR5cGVvZiBQb2ludGVyRXZlbnQ8InUiJiYoIWcoQWEucG9pbnRlckVuYWJsZWQpfHxBYS5wb2ludGVyRW5hYmxlZCkpLENifWZ1bmN0aW9uIGR3KCl7aWYoIWcoamwpKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7aW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7Iik7bGV0IGU9bi5zdHlsZS5pbWFnZVJlbmRlcmluZztqbD1nKGUpJiZlIT09IiIsamwmJihmdz1lKX1yZXR1cm4gamx9ZnVuY3Rpb24gak0oKXtyZXR1cm4gZHcoKT9mdzp2b2lkIDB9ZnVuY3Rpb24gRG8oKXtyZXR1cm4gRG8uX3Jlc3VsdH12YXIgQWEsdmwsYXcsRmwscncsRGwsTWIsQmwsc3csVWwsSWIsT2IsU2IsQ2IsZncsamwsb3Msd2EsYXIsR2w9WCgoKT0+e2ZlKCk7b3coKTt0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9BYT1uYXZpZ2F0b3I6QWE9e307RG8uX3Byb21pc2U9dm9pZCAwO0RvLl9yZXN1bHQ9dm9pZCAwO0RvLmluaXRpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZyhEby5fcHJvbWlzZSl8fChEby5fcHJvbWlzZT1uZXcgUHJvbWlzZShuPT57bGV0IGU9bmV3IEltYWdlO2Uub25sb2FkPWZ1bmN0aW9uKCl7RG8uX3Jlc3VsdD1lLndpZHRoPjAmJmUuaGVpZ2h0PjAsbihEby5fcmVzdWx0KX0sZS5vbmVycm9yPWZ1bmN0aW9uKCl7RG8uX3Jlc3VsdD0hMSxuKERvLl9yZXN1bHQpfSxlLnNyYz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmlJQUFBQlhSVUpRVmxBNElCWUFBQUF3QVFDZEFTb0JBQUVBRHNEK0phUUFBM0FBQUFBQSJ9KSksRG8uX3Byb21pc2V9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvLHtpbml0aWFsaXplZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcoRG8uX3Jlc3VsdCl9fX0pO29zPVtdO3R5cGVvZiBBcnJheUJ1ZmZlcjwidSImJihvcy5wdXNoKEludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZvcy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZvcy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgQmlnSW50NjRBcnJheTwidSImJm9zLnB1c2goQmlnSW50NjRBcnJheSksdHlwZW9mIEJpZ1VpbnQ2NEFycmF5PCJ1IiYmb3MucHVzaChCaWdVaW50NjRBcnJheSkpO3dhPXtpc0Nocm9tZTpOYixjaHJvbWVWZXJzaW9uOklNLGlzU2FmYXJpOml3LHNhZmFyaVZlcnNpb246UE0saXNXZWJraXQ6Y3csd2Via2l0VmVyc2lvbjprTSxpc0VkZ2U6TGwsZWRnZVZlcnNpb246dk0saXNGaXJlZm94OnpsLGZpcmVmb3hWZXJzaW9uOkJNLGlzV2luZG93czpGTSxpc0lQYWRPcklPUzpETSxoYXJkd2FyZUNvbmN1cnJlbmN5OkFhLmhhcmR3YXJlQ29uY3VycmVuY3k/PzMsc3VwcG9ydHNQb2ludGVyRXZlbnRzOlVNLHN1cHBvcnRzSW1hZ2VSZW5kZXJpbmdQaXhlbGF0ZWQ6ZHcsc3VwcG9ydHNXZWJQOkRvLGltYWdlUmVuZGVyaW5nVmFsdWU6ak0sdHlwZWRBcnJheVR5cGVzOm9zfTt3YS5zdXBwb3J0c0Jhc2lzPWZ1bmN0aW9uKG4pe3JldHVybiB3YS5zdXBwb3J0c1dlYkFzc2VtYmx5KCkmJm4uY29udGV4dC5zdXBwb3J0c0Jhc2lzfTt3YS5zdXBwb3J0c0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gbncuc3VwcG9ydHNGdWxsc2NyZWVuKCl9O3dhLnN1cHBvcnRzVHlwZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1In07d2Euc3VwcG9ydHNCaWdJbnQ2NEFycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ2NEFycmF5PCJ1In07d2Euc3VwcG9ydHNCaWdVaW50NjRBcnJheT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgQmlnVWludDY0QXJyYXk8InUifTt3YS5zdXBwb3J0c0JpZ0ludD1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgQmlnSW50PCJ1In07d2Euc3VwcG9ydHNXZWJXb3JrZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXI8InUifTt3YS5zdXBwb3J0c1dlYkFzc2VtYmx5PWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBXZWJBc3NlbWJseTwidSJ9O3dhLnN1cHBvcnRzV2ViZ2wyPWZ1bmN0aW9uKG4pe3JldHVybiBuLmNvbnRleHQud2ViZ2wyfTt3YS5zdXBwb3J0c0VzbVdlYldvcmtlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hemwoKXx8cGFyc2VJbnQoSWIpPj0xMTR9O2FyPXdhfSk7ZnVuY3Rpb24gd2UobixlLHQsbyl7dGhpcy54PW4/PzAsdGhpcy55PWU/PzAsdGhpcy56PXQ/PzAsdGhpcy53PW8/PzB9dmFyIE5mLExNLHpNLHV3LGx3LFBiLGh3LFZsLGtiLFVhLG13LEhsLHZiLGJ3LEZiLERiLEdNLFZNLElmLGFzLEhNLHB3LEtsLHFsLHZyLEZyLFllLFdvPVgoKCk9PntNZSgpO2ZlKCk7R2woKTtqZSgpO0luKCk7TmY9bmV3IHM7d2UuZnJvbUF4aXNBbmdsZT1mdW5jdGlvbihuLGUsdCl7bGV0IG89ZS8yLGE9TWF0aC5zaW4obyk7TmY9cy5ub3JtYWxpemUobixOZik7bGV0IHI9TmYueCphLGk9TmYueSphLGY9TmYueiphLGQ9TWF0aC5jb3Mobyk7cmV0dXJuIGcodCk/KHQueD1yLHQueT1pLHQuej1mLHQudz1kLHQpOm5ldyB3ZShyLGksZixkKX07TE09WzEsMiwwXSx6TT1uZXcgQXJyYXkoMyk7d2UuZnJvbVJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKG4sZSl7bGV0IHQsbyxhLHIsaSxmPW5bWi5DT0xVTU4wUk9XMF0sZD1uW1ouQ09MVU1OMVJPVzFdLGM9bltaLkNPTFVNTjJST1cyXSx1PWYrZCtjO2lmKHU+MCl0PU1hdGguc3FydCh1KzEpLGk9LjUqdCx0PS41L3Qsbz0obltaLkNPTFVNTjFST1cyXS1uW1ouQ09MVU1OMlJPVzFdKSp0LGE9KG5bWi5DT0xVTU4yUk9XMF0tbltaLkNPTFVNTjBST1cyXSkqdCxyPShuW1ouQ09MVU1OMFJPVzFdLW5bWi5DT0xVTU4xUk9XMF0pKnQ7ZWxzZXtsZXQgbD1MTSxtPTA7ZD5mJiYobT0xKSxjPmYmJmM+ZCYmKG09Mik7bGV0IGg9bFttXSxiPWxbaF07dD1NYXRoLnNxcnQobltaLmdldEVsZW1lbnRJbmRleChtLG0pXS1uW1ouZ2V0RWxlbWVudEluZGV4KGgsaCldLW5bWi5nZXRFbGVtZW50SW5kZXgoYixiKV0rMSk7bGV0IHA9ek07cFttXT0uNSp0LHQ9LjUvdCxpPShuW1ouZ2V0RWxlbWVudEluZGV4KGIsaCldLW5bWi5nZXRFbGVtZW50SW5kZXgoaCxiKV0pKnQscFtoXT0obltaLmdldEVsZW1lbnRJbmRleChoLG0pXStuW1ouZ2V0RWxlbWVudEluZGV4KG0saCldKSp0LHBbYl09KG5bWi5nZXRFbGVtZW50SW5kZXgoYixtKV0rbltaLmdldEVsZW1lbnRJbmRleChtLGIpXSkqdCxvPS1wWzBdLGE9LXBbMV0scj0tcFsyXX1yZXR1cm4gZyhlKT8oZS54PW8sZS55PWEsZS56PXIsZS53PWksZSk6bmV3IHdlKG8sYSxyLGkpfTt1dz1uZXcgd2UsbHc9bmV3IHdlLFBiPW5ldyB3ZSxodz1uZXcgd2U7d2UuZnJvbUhlYWRpbmdQaXRjaFJvbGw9ZnVuY3Rpb24obixlKXtyZXR1cm4gaHc9d2UuZnJvbUF4aXNBbmdsZShzLlVOSVRfWCxuLnJvbGwsdXcpLFBiPXdlLmZyb21BeGlzQW5nbGUocy5VTklUX1ksLW4ucGl0Y2gsZSksZT13ZS5tdWx0aXBseShQYixodyxQYiksbHc9d2UuZnJvbUF4aXNBbmdsZShzLlVOSVRfWiwtbi5oZWFkaW5nLHV3KSx3ZS5tdWx0aXBseShsdyxlLGUpfTtWbD1uZXcgcyxrYj1uZXcgcyxVYT1uZXcgd2UsbXc9bmV3IHdlLEhsPW5ldyB3ZTt3ZS5wYWNrZWRMZW5ndGg9NDt3ZS5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gdD10Pz8wLGVbdCsrXT1uLngsZVt0KytdPW4ueSxlW3QrK109bi56LGVbdF09bi53LGV9O3dlLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIGU9ZT8/MCxnKHQpfHwodD1uZXcgd2UpLHQueD1uW2VdLHQueT1uW2UrMV0sdC56PW5bZSsyXSx0Lnc9bltlKzNdLHR9O3dlLnBhY2tlZEludGVycG9sYXRpb25MZW5ndGg9Mzt3ZS5jb252ZXJ0UGFja2VkQXJyYXlGb3JJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKG4sZSx0LG8pe3dlLnVucGFjayhuLHQqNCxIbCksd2UuY29uanVnYXRlKEhsLEhsKTtmb3IobGV0IGE9MCxyPXQtZSsxO2E8cjthKyspe2xldCBpPWEqMzt3ZS51bnBhY2sobiwoZSthKSo0LFVhKSx3ZS5tdWx0aXBseShVYSxIbCxVYSksVWEudzwwJiZ3ZS5uZWdhdGUoVWEsVWEpLHdlLmNvbXB1dGVBeGlzKFVhLFZsKTtsZXQgZj13ZS5jb21wdXRlQW5nbGUoVWEpO2cobyl8fChvPVtdKSxvW2ldPVZsLngqZixvW2krMV09VmwueSpmLG9baSsyXT1WbC56KmZ9fTt3ZS51bnBhY2tJbnRlcnBvbGF0aW9uUmVzdWx0PWZ1bmN0aW9uKG4sZSx0LG8sYSl7ZyhhKXx8KGE9bmV3IHdlKSxzLmZyb21BcnJheShuLDAsa2IpO2xldCByPXMubWFnbml0dWRlKGtiKTtyZXR1cm4gd2UudW5wYWNrKGUsbyo0LG13KSxyPT09MD93ZS5jbG9uZSh3ZS5JREVOVElUWSxVYSk6d2UuZnJvbUF4aXNBbmdsZShrYixyLFVhKSx3ZS5tdWx0aXBseShVYSxtdyxhKX07d2UuY2xvbmU9ZnVuY3Rpb24obixlKXtpZihnKG4pKXJldHVybiBnKGUpPyhlLng9bi54LGUueT1uLnksZS56PW4ueixlLnc9bi53LGUpOm5ldyB3ZShuLngsbi55LG4ueixuLncpfTt3ZS5jb25qdWdhdGU9ZnVuY3Rpb24obixlKXtyZXR1cm4gZS54PS1uLngsZS55PS1uLnksZS56PS1uLnosZS53PW4udyxlfTt3ZS5tYWduaXR1ZGVTcXVhcmVkPWZ1bmN0aW9uKG4pe3JldHVybiBuLngqbi54K24ueSpuLnkrbi56Km4ueituLncqbi53fTt3ZS5tYWduaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIE1hdGguc3FydCh3ZS5tYWduaXR1ZGVTcXVhcmVkKG4pKX07d2Uubm9ybWFsaXplPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9MS93ZS5tYWduaXR1ZGUobiksbz1uLngqdCxhPW4ueSp0LHI9bi56KnQsaT1uLncqdDtyZXR1cm4gZS54PW8sZS55PWEsZS56PXIsZS53PWksZX07d2UuaW52ZXJzZT1mdW5jdGlvbihuLGUpe2xldCB0PXdlLm1hZ25pdHVkZVNxdWFyZWQobik7cmV0dXJuIGU9d2UuY29uanVnYXRlKG4sZSksd2UubXVsdGlwbHlCeVNjYWxhcihlLDEvdCxlKX07d2UuYWRkPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gdC54PW4ueCtlLngsdC55PW4ueStlLnksdC56PW4ueitlLnosdC53PW4udytlLncsdH07d2Uuc3VidHJhY3Q9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0Lng9bi54LWUueCx0Lnk9bi55LWUueSx0Lno9bi56LWUueix0Lnc9bi53LWUudyx0fTt3ZS5uZWdhdGU9ZnVuY3Rpb24obixlKXtyZXR1cm4gZS54PS1uLngsZS55PS1uLnksZS56PS1uLnosZS53PS1uLncsZX07d2UuZG90PWZ1bmN0aW9uKG4sZSl7cmV0dXJuIG4ueCplLngrbi55KmUueStuLnoqZS56K24udyplLnd9O3dlLm11bHRpcGx5PWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1uLngsYT1uLnkscj1uLnosaT1uLncsZj1lLngsZD1lLnksYz1lLnosdT1lLncsbD1pKmYrbyp1K2EqYy1yKmQsbT1pKmQtbypjK2EqdStyKmYsaD1pKmMrbypkLWEqZityKnUsYj1pKnUtbypmLWEqZC1yKmM7cmV0dXJuIHQueD1sLHQueT1tLHQuej1oLHQudz1iLHR9O3dlLm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0Lng9bi54KmUsdC55PW4ueSplLHQuej1uLnoqZSx0Lnc9bi53KmUsdH07d2UuZGl2aWRlQnlTY2FsYXI9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0Lng9bi54L2UsdC55PW4ueS9lLHQuej1uLnovZSx0Lnc9bi53L2UsdH07d2UuY29tcHV0ZUF4aXM9ZnVuY3Rpb24obixlKXtsZXQgdD1uLnc7aWYoTWF0aC5hYnModC0xKTxrLkVQU0lMT042fHxNYXRoLmFicyh0KzEpPGsuRVBTSUxPTjYpcmV0dXJuIGUueD0xLGUueT1lLno9MCxlO2xldCBvPTEvTWF0aC5zcXJ0KDEtdCp0KTtyZXR1cm4gZS54PW4ueCpvLGUueT1uLnkqbyxlLno9bi56Km8sZX07d2UuY29tcHV0ZUFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLmFicyhuLnctMSk8ay5FUFNJTE9ONj8wOjIqTWF0aC5hY29zKG4udyl9O3ZiPW5ldyB3ZTt3ZS5sZXJwPWZ1bmN0aW9uKG4sZSx0LG8pe3JldHVybiB2Yj13ZS5tdWx0aXBseUJ5U2NhbGFyKGUsdCx2Yiksbz13ZS5tdWx0aXBseUJ5U2NhbGFyKG4sMS10LG8pLHdlLmFkZCh2YixvLG8pfTtidz1uZXcgd2UsRmI9bmV3IHdlLERiPW5ldyB3ZTt3ZS5zbGVycD1mdW5jdGlvbihuLGUsdCxvKXtsZXQgYT13ZS5kb3QobixlKSxyPWU7aWYoYTwwJiYoYT0tYSxyPWJ3PXdlLm5lZ2F0ZShlLGJ3KSksMS1hPGsuRVBTSUxPTjYpcmV0dXJuIHdlLmxlcnAobixyLHQsbyk7bGV0IGk9TWF0aC5hY29zKGEpO3JldHVybiBGYj13ZS5tdWx0aXBseUJ5U2NhbGFyKG4sTWF0aC5zaW4oKDEtdCkqaSksRmIpLERiPXdlLm11bHRpcGx5QnlTY2FsYXIocixNYXRoLnNpbih0KmkpLERiKSxvPXdlLmFkZChGYixEYixvKSx3ZS5tdWx0aXBseUJ5U2NhbGFyKG8sMS9NYXRoLnNpbihpKSxvKX07d2UubG9nPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9ay5hY29zQ2xhbXBlZChuLncpLG89MDtyZXR1cm4gdCE9PTAmJihvPXQvTWF0aC5zaW4odCkpLHMubXVsdGlwbHlCeVNjYWxhcihuLG8sZSl9O3dlLmV4cD1mdW5jdGlvbihuLGUpe2xldCB0PXMubWFnbml0dWRlKG4pLG89MDtyZXR1cm4gdCE9PTAmJihvPU1hdGguc2luKHQpL3QpLGUueD1uLngqbyxlLnk9bi55Km8sZS56PW4ueipvLGUudz1NYXRoLmNvcyh0KSxlfTtHTT1uZXcgcyxWTT1uZXcgcyxJZj1uZXcgd2UsYXM9bmV3IHdlO3dlLmNvbXB1dGVJbm5lclF1YWRyYW5nbGU9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9d2UuY29uanVnYXRlKGUsSWYpO3dlLm11bHRpcGx5KGEsdCxhcyk7bGV0IHI9d2UubG9nKGFzLEdNKTt3ZS5tdWx0aXBseShhLG4sYXMpO2xldCBpPXdlLmxvZyhhcyxWTSk7cmV0dXJuIHMuYWRkKHIsaSxyKSxzLm11bHRpcGx5QnlTY2FsYXIociwuMjUscikscy5uZWdhdGUocixyKSx3ZS5leHAocixJZiksd2UubXVsdGlwbHkoZSxJZixvKX07d2Uuc3F1YWQ9ZnVuY3Rpb24obixlLHQsbyxhLHIpe2xldCBpPXdlLnNsZXJwKG4sZSxhLElmKSxmPXdlLnNsZXJwKHQsbyxhLGFzKTtyZXR1cm4gd2Uuc2xlcnAoaSxmLDIqYSooMS1hKSxyKX07SE09bmV3IHdlLHB3PTEuOTAxMTA3NDUzNTE3MzAwMyxLbD1hci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXSxxbD1hci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXSx2cj1hci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXSxGcj1hci5zdXBwb3J0c1R5cGVkQXJyYXlzKCk/bmV3IEZsb2F0MzJBcnJheSg4KTpbXTtmb3IobGV0IG49MDtuPDc7KytuKXtsZXQgZT1uKzEsdD0yKmUrMTtLbFtuXT0xLyhlKnQpLHFsW25dPWUvdH1LbFs3XT1wdy8xMzY7cWxbN109cHcqOC8xNzt3ZS5mYXN0U2xlcnA9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9d2UuZG90KG4sZSkscjthPj0wP3I9MToocj0tMSxhPS1hKTtsZXQgaT1hLTEsZj0xLXQsZD10KnQsYz1mKmY7Zm9yKGxldCBoPTc7aD49MDstLWgpdnJbaF09KEtsW2hdKmQtcWxbaF0pKmksRnJbaF09KEtsW2hdKmMtcWxbaF0pKmk7bGV0IHU9cip0KigxK3ZyWzBdKigxK3ZyWzFdKigxK3ZyWzJdKigxK3ZyWzNdKigxK3ZyWzRdKigxK3ZyWzVdKigxK3ZyWzZdKigxK3ZyWzddKSkpKSkpKSksbD1mKigxK0ZyWzBdKigxK0ZyWzFdKigxK0ZyWzJdKigxK0ZyWzNdKigxK0ZyWzRdKigxK0ZyWzVdKigxK0ZyWzZdKigxK0ZyWzddKSkpKSkpKSksbT13ZS5tdWx0aXBseUJ5U2NhbGFyKG4sbCxITSk7cmV0dXJuIHdlLm11bHRpcGx5QnlTY2FsYXIoZSx1LG8pLHdlLmFkZChtLG8sbyl9O3dlLmZhc3RTcXVhZD1mdW5jdGlvbihuLGUsdCxvLGEscil7bGV0IGk9d2UuZmFzdFNsZXJwKG4sZSxhLElmKSxmPXdlLmZhc3RTbGVycCh0LG8sYSxhcyk7cmV0dXJuIHdlLmZhc3RTbGVycChpLGYsMiphKigxLWEpLHIpfTt3ZS5lcXVhbHM9ZnVuY3Rpb24obixlKXtyZXR1cm4gbj09PWV8fGcobikmJmcoZSkmJm4ueD09PWUueCYmbi55PT09ZS55JiZuLno9PT1lLnomJm4udz09PWUud307d2UuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIHQ9dD8/MCxuPT09ZXx8ZyhuKSYmZyhlKSYmTWF0aC5hYnMobi54LWUueCk8PXQmJk1hdGguYWJzKG4ueS1lLnkpPD10JiZNYXRoLmFicyhuLnotZS56KTw9dCYmTWF0aC5hYnMobi53LWUudyk8PXR9O3dlLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgd2UoMCwwLDAsMCkpO3dlLklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IHdlKDAsMCwwLDEpKTt3ZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24obil7cmV0dXJuIHdlLmNsb25lKHRoaXMsbil9O3dlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24obil7cmV0dXJuIHdlLmVxdWFscyh0aGlzLG4pfTt3ZS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihuLGUpe3JldHVybiB3ZS5lcXVhbHNFcHNpbG9uKHRoaXMsbixlKX07d2UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9LCAke3RoaXMud30pYH07WWU9d2V9KTt2YXIgZHQsQmIscnMsVWIsWG8sbGksaGksbWksS00scU0sV00sWE0sWU0sSk0sWk0sZ3csUU0sJE0sZU4sdE4sbk4sb04sYU4sck4saU4sY04sV2wsemIsc04sZk4sZE4sWGwsdU4sbE4saE4sbU4samIsTGIsYk4scE4sZ04sX04sX3csR2IseU4sQU4sVmIseXcsb28scnI9WCgoKT0+e3Z0KCk7TWUoKTtiYSgpO2d0KCk7ZmUoKTtKaSgpO1dBKCk7dGIoKTtWZSgpO1hBKCk7dHcoKTtFYigpO2hsKCk7amUoKTtJbigpO3VuKCk7V28oKTtmbCgpO2R0PXt9LEJiPXt1cDp7c291dGg6ImVhc3QiLG5vcnRoOiJ3ZXN0Iix3ZXN0OiJzb3V0aCIsZWFzdDoibm9ydGgifSxkb3duOntzb3V0aDoid2VzdCIsbm9ydGg6ImVhc3QiLHdlc3Q6Im5vcnRoIixlYXN0OiJzb3V0aCJ9LHNvdXRoOnt1cDoid2VzdCIsZG93bjoiZWFzdCIsd2VzdDoiZG93biIsZWFzdDoidXAifSxub3J0aDp7dXA6ImVhc3QiLGRvd246Indlc3QiLHdlc3Q6InVwIixlYXN0OiJkb3duIn0sd2VzdDp7dXA6Im5vcnRoIixkb3duOiJzb3V0aCIsbm9ydGg6ImRvd24iLHNvdXRoOiJ1cCJ9LGVhc3Q6e3VwOiJzb3V0aCIsZG93bjoibm9ydGgiLG5vcnRoOiJ1cCIsc291dGg6ImRvd24ifX0scnM9e25vcnRoOlstMSwwLDBdLGVhc3Q6WzAsMSwwXSx1cDpbMCwwLDFdLHNvdXRoOlsxLDAsMF0sd2VzdDpbMCwtMSwwXSxkb3duOlswLDAsLTFdfSxVYj17fSxYbz17ZWFzdDpuZXcgcyxub3J0aDpuZXcgcyx1cDpuZXcgcyx3ZXN0Om5ldyBzLHNvdXRoOm5ldyBzLGRvd246bmV3IHN9LGxpPW5ldyBzLGhpPW5ldyBzLG1pPW5ldyBzO2R0LmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3I9ZnVuY3Rpb24obixlKXtpZighQmIuaGFzT3duUHJvcGVydHkobil8fCFCYltuXS5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgVnQoImZpcnN0QXhpcyBhbmQgc2Vjb25kQXhpcyBtdXN0IGJlIGVhc3QsIG5vcnRoLCB1cCwgd2VzdCwgc291dGggb3IgZG93bi4iKTtsZXQgdD1CYltuXVtlXSxvLGE9bitlO3JldHVybiBnKFViW2FdKT9vPVViW2FdOihvPWZ1bmN0aW9uKHIsaSxmKXtpZihnKGYpfHwoZj1uZXcgUSkscy5lcXVhbHNFcHNpbG9uKHIscy5aRVJPLGsuRVBTSUxPTjE0KSlzLnVucGFjayhyc1tuXSwwLGxpKSxzLnVucGFjayhyc1tlXSwwLGhpKSxzLnVucGFjayhyc1t0XSwwLG1pKTtlbHNlIGlmKGsuZXF1YWxzRXBzaWxvbihyLngsMCxrLkVQU0lMT04xNCkmJmsuZXF1YWxzRXBzaWxvbihyLnksMCxrLkVQU0lMT04xNCkpe2xldCBkPWsuc2lnbihyLnopO3MudW5wYWNrKHJzW25dLDAsbGkpLG4hPT0iZWFzdCImJm4hPT0id2VzdCImJnMubXVsdGlwbHlCeVNjYWxhcihsaSxkLGxpKSxzLnVucGFjayhyc1tlXSwwLGhpKSxlIT09ImVhc3QiJiZlIT09Indlc3QiJiZzLm11bHRpcGx5QnlTY2FsYXIoaGksZCxoaSkscy51bnBhY2socnNbdF0sMCxtaSksdCE9PSJlYXN0IiYmdCE9PSJ3ZXN0IiYmcy5tdWx0aXBseUJ5U2NhbGFyKG1pLGQsbWkpfWVsc2V7aT1pPz9LLmRlZmF1bHQsaS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocixYby51cCk7bGV0IGQ9WG8udXAsYz1Yby5lYXN0O2MueD0tci55LGMueT1yLngsYy56PTAscy5ub3JtYWxpemUoYyxYby5lYXN0KSxzLmNyb3NzKGQsYyxYby5ub3J0aCkscy5tdWx0aXBseUJ5U2NhbGFyKFhvLnVwLC0xLFhvLmRvd24pLHMubXVsdGlwbHlCeVNjYWxhcihYby5lYXN0LC0xLFhvLndlc3QpLHMubXVsdGlwbHlCeVNjYWxhcihYby5ub3J0aCwtMSxYby5zb3V0aCksbGk9WG9bbl0saGk9WG9bZV0sbWk9WG9bdF19cmV0dXJuIGZbMF09bGkueCxmWzFdPWxpLnksZlsyXT1saS56LGZbM109MCxmWzRdPWhpLngsZls1XT1oaS55LGZbNl09aGkueixmWzddPTAsZls4XT1taS54LGZbOV09bWkueSxmWzEwXT1taS56LGZbMTFdPTAsZlsxMl09ci54LGZbMTNdPXIueSxmWzE0XT1yLnosZlsxNV09MSxmfSxVYlthXT1vKSxvfTtkdC5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZT1kdC5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJlYXN0Iiwibm9ydGgiKTtkdC5ub3J0aEVhc3REb3duVG9GaXhlZEZyYW1lPWR0LmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwiZWFzdCIpO2R0Lm5vcnRoVXBFYXN0VG9GaXhlZEZyYW1lPWR0LmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwidXAiKTtkdC5ub3J0aFdlc3RVcFRvRml4ZWRGcmFtZT1kdC5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJub3J0aCIsIndlc3QiKTtLTT1uZXcgWWUscU09bmV3IHMoMSwxLDEpLFdNPW5ldyBRO2R0LmhlYWRpbmdQaXRjaFJvbGxUb0ZpeGVkRnJhbWU9ZnVuY3Rpb24obixlLHQsbyxhKXtvPW8/P2R0LmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lO2xldCByPVllLmZyb21IZWFkaW5nUGl0Y2hSb2xsKGUsS00pLGk9US5mcm9tVHJhbnNsYXRpb25RdWF0ZXJuaW9uUm90YXRpb25TY2FsZShzLlpFUk8scixxTSxXTSk7cmV0dXJuIGE9byhuLHQsYSksUS5tdWx0aXBseShhLGksYSl9O1hNPW5ldyBRLFlNPW5ldyBaO2R0LmhlYWRpbmdQaXRjaFJvbGxRdWF0ZXJuaW9uPWZ1bmN0aW9uKG4sZSx0LG8sYSl7bGV0IHI9ZHQuaGVhZGluZ1BpdGNoUm9sbFRvRml4ZWRGcmFtZShuLGUsdCxvLFhNKSxpPVEuZ2V0TWF0cml4MyhyLFlNKTtyZXR1cm4gWWUuZnJvbVJvdGF0aW9uTWF0cml4KGksYSl9O0pNPW5ldyBzKDEsMSwxKSxaTT1uZXcgcyxndz1uZXcgUSxRTT1uZXcgUSwkTT1uZXcgWixlTj1uZXcgWWU7ZHQuZml4ZWRGcmFtZVRvSGVhZGluZ1BpdGNoUm9sbD1mdW5jdGlvbihuLGUsdCxvKXtlPWU/P0suZGVmYXVsdCx0PXQ/P2R0LmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lLGcobyl8fChvPW5ldyBDbCk7bGV0IGE9US5nZXRUcmFuc2xhdGlvbihuLFpNKTtpZihzLmVxdWFscyhhLHMuWkVSTykpcmV0dXJuIG8uaGVhZGluZz0wLG8ucGl0Y2g9MCxvLnJvbGw9MCxvO2xldCByPVEuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKHQoYSxlLGd3KSxndyksaT1RLnNldFNjYWxlKG4sSk0sUU0pO2k9US5zZXRUcmFuc2xhdGlvbihpLHMuWkVSTyxpKSxyPVEubXVsdGlwbHkocixpLHIpO2xldCBmPVllLmZyb21Sb3RhdGlvbk1hdHJpeChRLmdldE1hdHJpeDMociwkTSksZU4pO3JldHVybiBmPVllLm5vcm1hbGl6ZShmLGYpLENsLmZyb21RdWF0ZXJuaW9uKGYsbyl9O3ROPTYqMzYwMCsyNDYwKzUwLjU0ODQxLG5OPTg2NDAxODQ4MTI4NjZlLTYsb049LjA5MzEwNCxhTj0tNjJlLTcsck49MTE3NzI3NTgzODQ2NjhlLTMyLGlOPTcyOTIxMTU4NTUzZS0xNSxjTj1rLlRXT19QSS84NjQwMCxXbD1uZXcgS247ZHQuY29tcHV0ZUljcmZUb0NlbnRyYWxCb2R5Rml4ZWRNYXRyaXg9ZnVuY3Rpb24obixlKXtsZXQgdD1kdC5jb21wdXRlSWNyZlRvRml4ZWRNYXRyaXgobixlKTtyZXR1cm4gZyh0KXx8KHQ9ZHQuY29tcHV0ZVRlbWVUb1BzZXVkb0ZpeGVkTWF0cml4KG4sZSkpLHR9O2R0LmNvbXB1dGVUZW1lVG9Qc2V1ZG9GaXhlZE1hdHJpeD1mdW5jdGlvbihuLGUpe1dsPUtuLmFkZFNlY29uZHMobiwtS24uY29tcHV0ZVRhaU1pbnVzVXRjKG4pLFdsKTtsZXQgdD1XbC5kYXlOdW1iZXIsbz1XbC5zZWNvbmRzT2ZEYXksYSxyPXQtMjQ1MTU0NTtvPj00MzIwMD9hPShyKy41KS9sbi5EQVlTX1BFUl9KVUxJQU5fQ0VOVFVSWTphPShyLS41KS9sbi5EQVlTX1BFUl9KVUxJQU5fQ0VOVFVSWTtsZXQgZj0odE4rYSoobk4rYSoob04rYSphTikpKSpjTiVrLlRXT19QSSxkPWlOK3JOKih0LTI0NTE1NDU1ZS0xKSxjPShvK2xuLlNFQ09ORFNfUEVSX0RBWSouNSklbG4uU0VDT05EU19QRVJfREFZLHU9ZitkKmMsbD1NYXRoLmNvcyh1KSxtPU1hdGguc2luKHUpO3JldHVybiBnKGUpPyhlWzBdPWwsZVsxXT0tbSxlWzJdPTAsZVszXT1tLGVbNF09bCxlWzVdPTAsZVs2XT0wLGVbN109MCxlWzhdPTEsZSk6bmV3IFoobCxtLDAsLW0sbCwwLDAsMCwxKX07ZHQuaWF1MjAwNlh5c0RhdGE9bmV3IGV3O2R0LmVhcnRoT3JpZW50YXRpb25QYXJhbWV0ZXJzPXFBLk5PTkU7emI9MzIuMTg0LHNOPTI0NTE1NDU7ZHQucHJlbG9hZEljcmZGaXhlZD1mdW5jdGlvbihuKXtsZXQgZT1uLnN0YXJ0LmRheU51bWJlcix0PW4uc3RhcnQuc2Vjb25kc09mRGF5K3piLG89bi5zdG9wLmRheU51bWJlcixhPW4uc3RvcC5zZWNvbmRzT2ZEYXkremI7cmV0dXJuIGR0LmlhdTIwMDZYeXNEYXRhLnByZWxvYWQoZSx0LG8sYSl9O2R0LmNvbXB1dGVJY3JmVG9GaXhlZE1hdHJpeD1mdW5jdGlvbihuLGUpe2coZSl8fChlPW5ldyBaKTtsZXQgdD1kdC5jb21wdXRlRml4ZWRUb0ljcmZNYXRyaXgobixlKTtpZihnKHQpKXJldHVybiBaLnRyYW5zcG9zZSh0LGUpfTtmTj0zMi4xODQsZE49MjQ1MTU0NSxYbD1uZXcgQ2wsdU49bmV3IFosbE49bmV3IEtuO2R0LmNvbXB1dGVNb29uRml4ZWRUb0ljcmZNYXRyaXg9ZnVuY3Rpb24obixlKXtnKGUpfHwoZT1uZXcgWik7bGV0IHQ9S24uYWRkU2Vjb25kcyhuLGZOLGxOKSxvPUtuLnRvdGFsRGF5cyh0KS1kTixhPWsudG9SYWRpYW5zKDEyLjExMiktay50b1JhZGlhbnMoLjA1Mjk5MikqbyxyPWsudG9SYWRpYW5zKDI0LjIyNCktay50b1JhZGlhbnMoLjEwNTk4NCkqbyxpPWsudG9SYWRpYW5zKDIyNy42NDUpK2sudG9SYWRpYW5zKDEzLjAxMikqbyxmPWsudG9SYWRpYW5zKDI2MS4xMDUpK2sudG9SYWRpYW5zKDEzLjM0MDcxNikqbyxkPWsudG9SYWRpYW5zKDM1OCkray50b1JhZGlhbnMoLjk4NTYpKm87cmV0dXJuIFhsLnBpdGNoPWsudG9SYWRpYW5zKDE4MCktay50b1JhZGlhbnMoMy44NzgpKk1hdGguc2luKGEpLWsudG9SYWRpYW5zKC4xMikqTWF0aC5zaW4ocikray50b1JhZGlhbnMoLjA3KSpNYXRoLnNpbihpKS1rLnRvUmFkaWFucyguMDE3KSpNYXRoLnNpbihmKSxYbC5yb2xsPWsudG9SYWRpYW5zKDY2LjUzLTkwKStrLnRvUmFkaWFucygxLjU0MykqTWF0aC5jb3MoYSkray50b1JhZGlhbnMoLjI0KSpNYXRoLmNvcyhyKS1rLnRvUmFkaWFucyguMDI4KSpNYXRoLmNvcyhpKStrLnRvUmFkaWFucyguMDA3KSpNYXRoLmNvcyhmKSxYbC5oZWFkaW5nPWsudG9SYWRpYW5zKDI0NC4zNzUtOTApK2sudG9SYWRpYW5zKDEzLjE3NjM1ODMxKSpvK2sudG9SYWRpYW5zKDMuNTU4KSpNYXRoLnNpbihhKStrLnRvUmFkaWFucyguMTIxKSpNYXRoLnNpbihyKS1rLnRvUmFkaWFucyguMDY0KSpNYXRoLnNpbihpKStrLnRvUmFkaWFucyguMDE2KSpNYXRoLnNpbihmKStrLnRvUmFkaWFucyguMDI1KSpNYXRoLnNpbihkKSxaLmZyb21IZWFkaW5nUGl0Y2hSb2xsKFhsLHVOLGUpfTtkdC5jb21wdXRlSWNyZlRvTW9vbkZpeGVkTWF0cml4PWZ1bmN0aW9uKG4sZSl7ZyhlKXx8KGU9bmV3IFopO2xldCB0PWR0LmNvbXB1dGVNb29uRml4ZWRUb0ljcmZNYXRyaXgobixlKTtpZihnKHQpKXJldHVybiBaLnRyYW5zcG9zZSh0LGUpfTtoTj1uZXcgUGwoMCwwLDApLG1OPW5ldyBBZigwLDAsMCwwLDAsMCksamI9bmV3IFosTGI9bmV3IFo7ZHQuY29tcHV0ZUZpeGVkVG9JY3JmTWF0cml4PWZ1bmN0aW9uKG4sZSl7ZyhlKXx8KGU9bmV3IFopO2xldCB0PWR0LmVhcnRoT3JpZW50YXRpb25QYXJhbWV0ZXJzLmNvbXB1dGUobixtTik7aWYoIWcodCkpcmV0dXJuO2xldCBvPW4uZGF5TnVtYmVyLGE9bi5zZWNvbmRzT2ZEYXkremIscj1kdC5pYXUyMDA2WHlzRGF0YS5jb21wdXRlWHlzUmFkaWFucyhvLGEsaE4pO2lmKCFnKHIpKXJldHVybjtsZXQgaT1yLngrdC54UG9sZU9mZnNldCxmPXIueSt0LnlQb2xlT2Zmc2V0LGQ9MS8oMStNYXRoLnNxcnQoMS1pKmktZipmKSksYz1qYjtjWzBdPTEtZCppKmksY1szXT0tZCppKmYsY1s2XT1pLGNbMV09LWQqaSpmLGNbNF09MS1kKmYqZixjWzddPWYsY1syXT0taSxjWzVdPS1mLGNbOF09MS1kKihpKmkrZipmKTtsZXQgdT1aLmZyb21Sb3RhdGlvblooLXIucyxMYiksbD1aLm11bHRpcGx5KGMsdSxqYiksbT1uLmRheU51bWJlcixoPW4uc2Vjb25kc09mRGF5LUtuLmNvbXB1dGVUYWlNaW51c1V0YyhuKSt0LnV0MU1pbnVzVXRjLGI9bS0yNDUxNTQ1LHA9aC9sbi5TRUNPTkRTX1BFUl9EQVkseT0uNzc5MDU3MjczMjY0K3ArLjAwMjczNzgxMTkxMTM1NDQ4KihiK3ApO3k9eSUxKmsuVFdPX1BJO2xldCBUPVouZnJvbVJvdGF0aW9uWih5LExiKSxfPVoubXVsdGlwbHkobCxULGpiKSx3PU1hdGguY29zKHQueFBvbGVXYW5kZXIpLEU9TWF0aC5jb3ModC55UG9sZVdhbmRlciksUj1NYXRoLnNpbih0LnhQb2xlV2FuZGVyKSxTPU1hdGguc2luKHQueVBvbGVXYW5kZXIpLEM9by1zTithL2xuLlNFQ09ORFNfUEVSX0RBWTtDLz0zNjUyNTtsZXQgST0tNDdlLTYqQyprLlJBRElBTlNfUEVSX0RFR1JFRS8zNjAwLE09TWF0aC5jb3MoSSksUD1NYXRoLnNpbihJKSxGPUxiO3JldHVybiBGWzBdPXcqTSxGWzFdPXcqUCxGWzJdPVIsRlszXT0tRSpQK1MqUipNLEZbNF09RSpNK1MqUipQLEZbNV09LVMqdyxGWzZdPS1TKlAtRSpSKk0sRls3XT1TKk0tRSpSKlAsRls4XT1FKncsWi5tdWx0aXBseShfLEYsZSl9O2JOPW5ldyBydDtkdC5wb2ludFRvV2luZG93Q29vcmRpbmF0ZXM9ZnVuY3Rpb24obixlLHQsbyl7cmV0dXJuIG89ZHQucG9pbnRUb0dMV2luZG93Q29vcmRpbmF0ZXMobixlLHQsbyksby55PTIqZVs1XS1vLnksb307ZHQucG9pbnRUb0dMV2luZG93Q29vcmRpbmF0ZXM9ZnVuY3Rpb24obixlLHQsbyl7ZyhvKXx8KG89bmV3IFkpO2xldCBhPWJOO3JldHVybiBRLm11bHRpcGx5QnlWZWN0b3IobixydC5mcm9tRWxlbWVudHModC54LHQueSx0LnosMSxhKSxhKSxydC5tdWx0aXBseUJ5U2NhbGFyKGEsMS9hLncsYSksUS5tdWx0aXBseUJ5VmVjdG9yKGUsYSxhKSxZLmZyb21DYXJ0ZXNpYW40KGEsbyl9O3BOPW5ldyBzLGdOPW5ldyBzLF9OPW5ldyBzO2R0LnJvdGF0aW9uTWF0cml4RnJvbVBvc2l0aW9uVmVsb2NpdHk9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9KHQ/P0suZGVmYXVsdCkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKG4scE4pLHI9cy5jcm9zcyhlLGEsZ04pO3MuZXF1YWxzRXBzaWxvbihyLHMuWkVSTyxrLkVQU0lMT042KSYmKHI9cy5jbG9uZShzLlVOSVRfWCxyKSk7bGV0IGk9cy5jcm9zcyhyLGUsX04pO3JldHVybiBzLm5vcm1hbGl6ZShpLGkpLHMuY3Jvc3MoZSxpLHIpLHMubmVnYXRlKHIscikscy5ub3JtYWxpemUocixyKSxnKG8pfHwobz1uZXcgWiksb1swXT1lLngsb1sxXT1lLnksb1syXT1lLnosb1szXT1yLngsb1s0XT1yLnksb1s1XT1yLnosb1s2XT1pLngsb1s3XT1pLnksb1s4XT1pLnosb307ZHQuU1dJWlpMRV8zRF9UT18yRF9NQVRSSVg9T2JqZWN0LmZyZWV6ZShuZXcgUSgwLDAsMSwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMCwxKSk7X3c9bmV3IGFlLEdiPW5ldyBzLHlOPW5ldyBzLEFOPW5ldyBaLFZiPW5ldyBRLHl3PW5ldyBRO2R0LmJhc2lzVG8yRD1mdW5jdGlvbihuLGUsdCl7bGV0IG89US5nZXRUcmFuc2xhdGlvbihlLHlOKSxhPW4uZWxsaXBzb2lkLHI7aWYocy5lcXVhbHMobyxzLlpFUk8pKXI9cy5jbG9uZShzLlpFUk8sR2IpO2Vsc2V7bGV0IHU9YS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvLF93KTtyPW4ucHJvamVjdCh1LEdiKSxzLmZyb21FbGVtZW50cyhyLnosci54LHIueSxyKX1sZXQgaT1kdC5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShvLGEsVmIpLGY9US5pbnZlcnNlVHJhbnNmb3JtYXRpb24oaSx5dyksZD1RLmdldE1hdHJpeDMoZSxBTiksYz1RLm11bHRpcGx5QnlNYXRyaXgzKGYsZCx0KTtyZXR1cm4gUS5tdWx0aXBseShkdC5TV0laWkxFXzNEX1RPXzJEX01BVFJJWCxjLHQpLFEuc2V0VHJhbnNsYXRpb24odCxyLHQpLHR9O2R0LmVsbGlwc29pZFRvMkRNb2RlbE1hdHJpeD1mdW5jdGlvbihuLGUsdCl7bGV0IG89bi5lbGxpcHNvaWQsYT1kdC5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShlLG8sVmIpLHI9US5pbnZlcnNlVHJhbnNmb3JtYXRpb24oYSx5dyksaT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsX3cpLGY9bi5wcm9qZWN0KGksR2IpO3MuZnJvbUVsZW1lbnRzKGYueixmLngsZi55LGYpO2xldCBkPVEuZnJvbVRyYW5zbGF0aW9uKGYsVmIpO3JldHVybiBRLm11bHRpcGx5KGR0LlNXSVpaTEVfM0RfVE9fMkRfTUFUUklYLHIsdCksUS5tdWx0aXBseShkLHQsdCksdH07b289ZHR9KTt2YXIgaXMsd04sVE4sRU4sUk4seE4sSGIsT04seGUsaG49WCgoKT0+e01lKCk7Z3QoKTtmZSgpO1ZlKCk7amUoKTtycigpO3VuKCk7aXM9Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHQsbyxhKXt0aGlzLndlc3Q9ZT8/MCx0aGlzLnNvdXRoPXQ/PzAsdGhpcy5lYXN0PW8/PzAsdGhpcy5ub3J0aD1hPz8wfWdldCB3aWR0aCgpe3JldHVybiBuLmNvbXB1dGVXaWR0aCh0aGlzKX1nZXQgaGVpZ2h0KCl7cmV0dXJuIG4uY29tcHV0ZUhlaWdodCh0aGlzKX1zdGF0aWMgcGFjayhlLHQsbyl7cmV0dXJuIG89bz8/MCx0W28rK109ZS53ZXN0LHRbbysrXT1lLnNvdXRoLHRbbysrXT1lLmVhc3QsdFtvXT1lLm5vcnRoLHR9c3RhdGljIHVucGFjayhlLHQsbyl7cmV0dXJuIHQ9dD8/MCxnKG8pfHwobz1uZXcgbiksby53ZXN0PWVbdCsrXSxvLnNvdXRoPWVbdCsrXSxvLmVhc3Q9ZVt0KytdLG8ubm9ydGg9ZVt0XSxvfXN0YXRpYyBjb21wdXRlV2lkdGgoZSl7bGV0IHQ9ZS5lYXN0LG89ZS53ZXN0O3JldHVybiB0PG8mJih0Kz1rLlRXT19QSSksdC1vfXN0YXRpYyBjb21wdXRlSGVpZ2h0KGUpe3JldHVybiBlLm5vcnRoLWUuc291dGh9c3RhdGljIGZyb21EZWdyZWVzKGUsdCxvLGEscil7cmV0dXJuIGU9ay50b1JhZGlhbnMoZT8/MCksdD1rLnRvUmFkaWFucyh0Pz8wKSxvPWsudG9SYWRpYW5zKG8/PzApLGE9ay50b1JhZGlhbnMoYT8/MCksZyhyKT8oci53ZXN0PWUsci5zb3V0aD10LHIuZWFzdD1vLHIubm9ydGg9YSxyKTpuZXcgbihlLHQsbyxhKX1zdGF0aWMgZnJvbVJhZGlhbnMoZSx0LG8sYSxyKXtyZXR1cm4gZyhyKT8oci53ZXN0PWU/PzAsci5zb3V0aD10Pz8wLHIuZWFzdD1vPz8wLHIubm9ydGg9YT8/MCxyKTpuZXcgbihlLHQsbyxhKX1zdGF0aWMgZnJvbUNhcnRvZ3JhcGhpY0FycmF5KGUsdCl7bGV0IG89TnVtYmVyLk1BWF9WQUxVRSxhPS1OdW1iZXIuTUFYX1ZBTFVFLHI9TnVtYmVyLk1BWF9WQUxVRSxpPS1OdW1iZXIuTUFYX1ZBTFVFLGY9TnVtYmVyLk1BWF9WQUxVRSxkPS1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihsZXQgYz0wLHU9ZS5sZW5ndGg7Yzx1O2MrKyl7bGV0IGw9ZVtjXTtvPU1hdGgubWluKG8sbC5sb25naXR1ZGUpLGE9TWF0aC5tYXgoYSxsLmxvbmdpdHVkZSksZj1NYXRoLm1pbihmLGwubGF0aXR1ZGUpLGQ9TWF0aC5tYXgoZCxsLmxhdGl0dWRlKTtsZXQgbT1sLmxvbmdpdHVkZT49MD9sLmxvbmdpdHVkZTpsLmxvbmdpdHVkZStrLlRXT19QSTtyPU1hdGgubWluKHIsbSksaT1NYXRoLm1heChpLG0pfXJldHVybiBhLW8+aS1yJiYobz1yLGE9aSxhPmsuUEkmJihhPWEtay5UV09fUEkpLG8+ay5QSSYmKG89by1rLlRXT19QSSkpLGcodCk/KHQud2VzdD1vLHQuc291dGg9Zix0LmVhc3Q9YSx0Lm5vcnRoPWQsdCk6bmV3IG4obyxmLGEsZCl9c3RhdGljIGZyb21DYXJ0ZXNpYW5BcnJheShlLHQsbyl7dD10Pz9LLmRlZmF1bHQ7bGV0IGE9TnVtYmVyLk1BWF9WQUxVRSxyPS1OdW1iZXIuTUFYX1ZBTFVFLGk9TnVtYmVyLk1BWF9WQUxVRSxmPS1OdW1iZXIuTUFYX1ZBTFVFLGQ9TnVtYmVyLk1BWF9WQUxVRSxjPS1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihsZXQgdT0wLGw9ZS5sZW5ndGg7dTxsO3UrKyl7bGV0IG09dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlW3VdKTthPU1hdGgubWluKGEsbS5sb25naXR1ZGUpLHI9TWF0aC5tYXgocixtLmxvbmdpdHVkZSksZD1NYXRoLm1pbihkLG0ubGF0aXR1ZGUpLGM9TWF0aC5tYXgoYyxtLmxhdGl0dWRlKTtsZXQgaD1tLmxvbmdpdHVkZT49MD9tLmxvbmdpdHVkZTptLmxvbmdpdHVkZStrLlRXT19QSTtpPU1hdGgubWluKGksaCksZj1NYXRoLm1heChmLGgpfXJldHVybiByLWE+Zi1pJiYoYT1pLHI9ZixyPmsuUEkmJihyPXItay5UV09fUEkpLGE+ay5QSSYmKGE9YS1rLlRXT19QSSkpLGcobyk/KG8ud2VzdD1hLG8uc291dGg9ZCxvLmVhc3Q9cixvLm5vcnRoPWMsbyk6bmV3IG4oYSxkLHIsYyl9c3RhdGljIGZyb21Cb3VuZGluZ1NwaGVyZShlLHQsbyl7bGV0IGE9ZS5jZW50ZXIscj1lLnJhZGl1cztpZihnKHQpfHwodD1LLmRlZmF1bHQpLGcobyl8fChvPW5ldyBuKSxzLmVxdWFscyhhLHMuWkVSTykpcmV0dXJuIG4uY2xvbmUobi5NQVhfVkFMVUUsbyksbztsZXQgaT1vby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShhLHQsd04pLGY9US5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihpLHMuVU5JVF9YLFROKTtzLm5vcm1hbGl6ZShmLGYpO2xldCBkPVEubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IoaSxzLlVOSVRfWSxFTik7cy5ub3JtYWxpemUoZCxkKSxzLm11bHRpcGx5QnlTY2FsYXIoZCxyLGQpLHMubXVsdGlwbHlCeVNjYWxhcihmLHIsZik7bGV0IGM9cy5uZWdhdGUoZCx4TiksdT1zLm5lZ2F0ZShmLFJOKSxsPUhiLG09bFswXTtyZXR1cm4gcy5hZGQoYSxkLG0pLG09bFsxXSxzLmFkZChhLHUsbSksbT1sWzJdLHMuYWRkKGEsYyxtKSxtPWxbM10scy5hZGQoYSxmLG0pLGxbNF09YSxuLmZyb21DYXJ0ZXNpYW5BcnJheShsLHQsbyl9c3RhdGljIGNsb25lKGUsdCl7aWYoZyhlKSlyZXR1cm4gZyh0KT8odC53ZXN0PWUud2VzdCx0LnNvdXRoPWUuc291dGgsdC5lYXN0PWUuZWFzdCx0Lm5vcnRoPWUubm9ydGgsdCk6bmV3IG4oZS53ZXN0LGUuc291dGgsZS5lYXN0LGUubm9ydGgpfXN0YXRpYyBlcXVhbHNFcHNpbG9uKGUsdCxvKXtyZXR1cm4gbz1vPz8wLGU9PT10fHxnKGUpJiZnKHQpJiZNYXRoLmFicyhlLndlc3QtdC53ZXN0KTw9byYmTWF0aC5hYnMoZS5zb3V0aC10LnNvdXRoKTw9byYmTWF0aC5hYnMoZS5lYXN0LXQuZWFzdCk8PW8mJk1hdGguYWJzKGUubm9ydGgtdC5ub3J0aCk8PW99Y2xvbmUoZSl7cmV0dXJuIG4uY2xvbmUodGhpcyxlKX1lcXVhbHMoZSl7cmV0dXJuIG4uZXF1YWxzKHRoaXMsZSl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZS53ZXN0PT09dC53ZXN0JiZlLnNvdXRoPT09dC5zb3V0aCYmZS5lYXN0PT09dC5lYXN0JiZlLm5vcnRoPT09dC5ub3J0aH1lcXVhbHNFcHNpbG9uKGUsdCl7cmV0dXJuIG4uZXF1YWxzRXBzaWxvbih0aGlzLGUsdCl9c3RhdGljIF92YWxpZGF0ZShlKXt9c3RhdGljIHNvdXRod2VzdChlLHQpe3JldHVybiBnKHQpPyh0LmxvbmdpdHVkZT1lLndlc3QsdC5sYXRpdHVkZT1lLnNvdXRoLHQuaGVpZ2h0PTAsdCk6bmV3IGFlKGUud2VzdCxlLnNvdXRoKX1zdGF0aWMgbm9ydGh3ZXN0KGUsdCl7cmV0dXJuIGcodCk/KHQubG9uZ2l0dWRlPWUud2VzdCx0LmxhdGl0dWRlPWUubm9ydGgsdC5oZWlnaHQ9MCx0KTpuZXcgYWUoZS53ZXN0LGUubm9ydGgpfXN0YXRpYyBub3J0aGVhc3QoZSx0KXtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9ZS5lYXN0LHQubGF0aXR1ZGU9ZS5ub3J0aCx0LmhlaWdodD0wLHQpOm5ldyBhZShlLmVhc3QsZS5ub3J0aCl9c3RhdGljIHNvdXRoZWFzdChlLHQpe3JldHVybiBnKHQpPyh0LmxvbmdpdHVkZT1lLmVhc3QsdC5sYXRpdHVkZT1lLnNvdXRoLHQuaGVpZ2h0PTAsdCk6bmV3IGFlKGUuZWFzdCxlLnNvdXRoKX1zdGF0aWMgY2VudGVyKGUsdCl7bGV0IG89ZS5lYXN0LGE9ZS53ZXN0O288YSYmKG8rPWsuVFdPX1BJKTtsZXQgcj1rLm5lZ2F0aXZlUGlUb1BpKChhK28pKi41KSxpPShlLnNvdXRoK2Uubm9ydGgpKi41O3JldHVybiBnKHQpPyh0LmxvbmdpdHVkZT1yLHQubGF0aXR1ZGU9aSx0LmhlaWdodD0wLHQpOm5ldyBhZShyLGkpfXN0YXRpYyBpbnRlcnNlY3Rpb24oZSx0LG8pe2xldCBhPWUuZWFzdCxyPWUud2VzdCxpPXQuZWFzdCxmPXQud2VzdDthPHImJmk+MD9hKz1rLlRXT19QSTppPGYmJmE+MCYmKGkrPWsuVFdPX1BJKSxhPHImJmY8MD9mKz1rLlRXT19QSTppPGYmJnI8MCYmKHIrPWsuVFdPX1BJKTtsZXQgZD1rLm5lZ2F0aXZlUGlUb1BpKE1hdGgubWF4KHIsZikpLGM9ay5uZWdhdGl2ZVBpVG9QaShNYXRoLm1pbihhLGkpKTtpZihkPT09ay5QSSYmYzxrLlBJJiYoZD0tay5QSSksKGUud2VzdDxlLmVhc3R8fHQud2VzdDx0LmVhc3QpJiZjPD1kKXJldHVybjtsZXQgdT1NYXRoLm1heChlLnNvdXRoLHQuc291dGgpLGw9TWF0aC5taW4oZS5ub3J0aCx0Lm5vcnRoKTtpZighKHU+PWwpKXJldHVybiBnKG8pPyhvLndlc3Q9ZCxvLnNvdXRoPXUsby5lYXN0PWMsby5ub3J0aD1sLG8pOm5ldyBuKGQsdSxjLGwpfXN0YXRpYyBzaW1wbGVJbnRlcnNlY3Rpb24oZSx0LG8pe2xldCBhPU1hdGgubWF4KGUud2VzdCx0Lndlc3QpLHI9TWF0aC5tYXgoZS5zb3V0aCx0LnNvdXRoKSxpPU1hdGgubWluKGUuZWFzdCx0LmVhc3QpLGY9TWF0aC5taW4oZS5ub3J0aCx0Lm5vcnRoKTtpZighKHI+PWZ8fGE+PWkpKXJldHVybiBnKG8pPyhvLndlc3Q9YSxvLnNvdXRoPXIsby5lYXN0PWksby5ub3J0aD1mLG8pOm5ldyBuKGEscixpLGYpfXN0YXRpYyB1bmlvbihlLHQsbyl7ZyhvKXx8KG89bmV3IG4pO2xldCBhPWUuZWFzdCxyPWUud2VzdCxpPXQuZWFzdCxmPXQud2VzdDthPHImJmk+MD9hKz1rLlRXT19QSTppPGYmJmE+MCYmKGkrPWsuVFdPX1BJKSxhPHImJmY8MD9mKz1rLlRXT19QSTppPGYmJnI8MCYmKHIrPWsuVFdPX1BJKTtsZXQgZD1rLm5lZ2F0aXZlUGlUb1BpKE1hdGgubWluKHIsZikpLGM9ay5uZWdhdGl2ZVBpVG9QaShNYXRoLm1heChhLGkpKTtyZXR1cm4gby53ZXN0PWQsby5zb3V0aD1NYXRoLm1pbihlLnNvdXRoLHQuc291dGgpLG8uZWFzdD1jLG8ubm9ydGg9TWF0aC5tYXgoZS5ub3J0aCx0Lm5vcnRoKSxvfXN0YXRpYyBleHBhbmQoZSx0LG8pe3JldHVybiBnKG8pfHwobz1uZXcgbiksby53ZXN0PU1hdGgubWluKGUud2VzdCx0LmxvbmdpdHVkZSksby5zb3V0aD1NYXRoLm1pbihlLnNvdXRoLHQubGF0aXR1ZGUpLG8uZWFzdD1NYXRoLm1heChlLmVhc3QsdC5sb25naXR1ZGUpLG8ubm9ydGg9TWF0aC5tYXgoZS5ub3J0aCx0LmxhdGl0dWRlKSxvfXN0YXRpYyBjb250YWlucyhlLHQpe2xldCBvPXQubG9uZ2l0dWRlLGE9dC5sYXRpdHVkZSxyPWUud2VzdCxpPWUuZWFzdDtyZXR1cm4gaTxyJiYoaSs9ay5UV09fUEksbzwwJiYobys9ay5UV09fUEkpKSwobz5yfHxrLmVxdWFsc0Vwc2lsb24obyxyLGsuRVBTSUxPTjE0KSkmJihvPGl8fGsuZXF1YWxzRXBzaWxvbihvLGksay5FUFNJTE9OMTQpKSYmYT49ZS5zb3V0aCYmYTw9ZS5ub3J0aH1zdGF0aWMgc3Vic2FtcGxlKGUsdCxvLGEpe3Q9dD8/Sy5kZWZhdWx0LG89bz8/MCxnKGEpfHwoYT1bXSk7bGV0IHI9MCxpPWUubm9ydGgsZj1lLnNvdXRoLGQ9ZS5lYXN0LGM9ZS53ZXN0LHU9T047dS5oZWlnaHQ9byx1LmxvbmdpdHVkZT1jLHUubGF0aXR1ZGU9aSxhW3JdPXQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odSxhW3JdKSxyKyssdS5sb25naXR1ZGU9ZCxhW3JdPXQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odSxhW3JdKSxyKyssdS5sYXRpdHVkZT1mLGFbcl09dC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih1LGFbcl0pLHIrKyx1LmxvbmdpdHVkZT1jLGFbcl09dC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih1LGFbcl0pLHIrKyxpPDA/dS5sYXRpdHVkZT1pOmY+MD91LmxhdGl0dWRlPWY6dS5sYXRpdHVkZT0wO2ZvcihsZXQgbD0xO2w8ODsrK2wpdS5sb25naXR1ZGU9LU1hdGguUEkrbCprLlBJX09WRVJfVFdPLG4uY29udGFpbnMoZSx1KSYmKGFbcl09dC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih1LGFbcl0pLHIrKyk7cmV0dXJuIHUubGF0aXR1ZGU9PT0wJiYodS5sb25naXR1ZGU9YyxhW3JdPXQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odSxhW3JdKSxyKyssdS5sb25naXR1ZGU9ZCxhW3JdPXQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odSxhW3JdKSxyKyspLGEubGVuZ3RoPXIsYX1zdGF0aWMgc3Vic2VjdGlvbihlLHQsbyxhLHIsaSl7aWYoZyhpKXx8KGk9bmV3IG4pLGUud2VzdDw9ZS5lYXN0KXtsZXQgZD1lLmVhc3QtZS53ZXN0O2kud2VzdD1lLndlc3QrdCpkLGkuZWFzdD1lLndlc3QrYSpkfWVsc2V7bGV0IGQ9ay5UV09fUEkrZS5lYXN0LWUud2VzdDtpLndlc3Q9ay5uZWdhdGl2ZVBpVG9QaShlLndlc3QrdCpkKSxpLmVhc3Q9ay5uZWdhdGl2ZVBpVG9QaShlLndlc3QrYSpkKX1sZXQgZj1lLm5vcnRoLWUuc291dGg7cmV0dXJuIGkuc291dGg9ZS5zb3V0aCtvKmYsaS5ub3J0aD1lLnNvdXRoK3IqZix0PT09MSYmKGkud2VzdD1lLmVhc3QpLGE9PT0xJiYoaS5lYXN0PWUuZWFzdCksbz09PTEmJihpLnNvdXRoPWUubm9ydGgpLHI9PT0xJiYoaS5ub3J0aD1lLm5vcnRoKSxpfX07aXMucGFja2VkTGVuZ3RoPTQ7d049bmV3IFEsVE49bmV3IHMsRU49bmV3IHMsUk49bmV3IHMseE49bmV3IHMsSGI9bmV3IEFycmF5KDUpO2ZvcihsZXQgbj0wO248SGIubGVuZ3RoOysrbilIYltuXT1uZXcgcztPTj1uZXcgYWU7aXMuTUFYX1ZBTFVFPU9iamVjdC5mcmVlemUobmV3IGlzKC1NYXRoLlBJLC1rLlBJX09WRVJfVFdPLE1hdGguUEksay5QSV9PVkVSX1RXTykpO3hlPWlzfSk7dmFyIFlsLEtiLHFiLFdiLFhiLFliLEpiLFpiLGZvLFFiLCRiLGVwLHRwLFNOLEF3LENOLE1OLG5wLG9wLE5OLElOLFBOLGtOLHZOLEZOLEROLEJOLFVOLGpOLExOLHd3LHpOLEdOLFZOLEhOLEtOLEV3LFR3LHBlLEV0PVgoKCk9PntNZSgpO2d0KCk7ZmUoKTtWZSgpO1ByKCk7WmkoKTtnZigpO2plKCk7SW4oKTt1bigpO2huKCk7WWw9Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY2VudGVyPXMuY2xvbmUoZT8/cy5aRVJPKSx0aGlzLnJhZGl1cz10Pz8wfXN0YXRpYyBmcm9tUG9pbnRzKGUsdCl7aWYoZyh0KXx8KHQ9bmV3IG4pLCFnKGUpfHxlLmxlbmd0aD09PTApcmV0dXJuIHQuY2VudGVyPXMuY2xvbmUocy5aRVJPLHQuY2VudGVyKSx0LnJhZGl1cz0wLHQ7bGV0IG89cy5jbG9uZShlWzBdLFpiKSxhPXMuY2xvbmUobyxLYikscj1zLmNsb25lKG8scWIpLGk9cy5jbG9uZShvLFdiKSxmPXMuY2xvbmUobyxYYiksZD1zLmNsb25lKG8sWWIpLGM9cy5jbG9uZShvLEpiKSx1PWUubGVuZ3RoLGw7Zm9yKGw9MTtsPHU7bCsrKXtzLmNsb25lKGVbbF0sbyk7bGV0IE09by54LFA9by55LEY9by56O008YS54JiZzLmNsb25lKG8sYSksTT5mLngmJnMuY2xvbmUobyxmKSxQPHIueSYmcy5jbG9uZShvLHIpLFA+ZC55JiZzLmNsb25lKG8sZCksRjxpLnomJnMuY2xvbmUobyxpKSxGPmMueiYmcy5jbG9uZShvLGMpfWxldCBtPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KGYsYSxmbykpLGg9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoZCxyLGZvKSksYj1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChjLGksZm8pKSxwPWEseT1mLFQ9bTtoPlQmJihUPWgscD1yLHk9ZCksYj5UJiYocD1pLHk9Yyk7bGV0IF89UWI7Xy54PShwLngreS54KSouNSxfLnk9KHAueSt5LnkpKi41LF8uej0ocC56K3kueikqLjU7bGV0IHc9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoeSxfLGZvKSksRT1NYXRoLnNxcnQodyksUj0kYjtSLng9YS54LFIueT1yLnksUi56PWkuejtsZXQgUz1lcDtTLng9Zi54LFMueT1kLnksUy56PWMuejtsZXQgQz1zLm1pZHBvaW50KFIsUyx0cCksST0wO2ZvcihsPTA7bDx1O2wrKyl7cy5jbG9uZShlW2xdLG8pO2xldCBNPXMubWFnbml0dWRlKHMuc3VidHJhY3QobyxDLGZvKSk7TT5JJiYoST1NKTtsZXQgUD1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChvLF8sZm8pKTtpZihQPncpe2xldCBGPU1hdGguc3FydChQKTtFPShFK0YpKi41LHc9RSpFO2xldCBBPUYtRTtfLng9KEUqXy54K0Eqby54KS9GLF8ueT0oRSpfLnkrQSpvLnkpL0YsXy56PShFKl8ueitBKm8ueikvRn19cmV0dXJuIEU8ST8ocy5jbG9uZShfLHQuY2VudGVyKSx0LnJhZGl1cz1FKToocy5jbG9uZShDLHQuY2VudGVyKSx0LnJhZGl1cz1JKSx0fXN0YXRpYyBmcm9tUmVjdGFuZ2xlMkQoZSx0LG8pe3JldHVybiBuLmZyb21SZWN0YW5nbGVXaXRoSGVpZ2h0czJEKGUsdCwwLDAsbyl9c3RhdGljIGZyb21SZWN0YW5nbGVXaXRoSGVpZ2h0czJEKGUsdCxvLGEscil7aWYoZyhyKXx8KHI9bmV3IG4pLCFnKGUpKXJldHVybiByLmNlbnRlcj1zLmNsb25lKHMuWkVSTyxyLmNlbnRlciksci5yYWRpdXM9MCxyO0F3Ll9lbGxpcHNvaWQ9Sy5kZWZhdWx0LHQ9dD8/QXcseGUuc291dGh3ZXN0KGUsbnApLG5wLmhlaWdodD1vLHhlLm5vcnRoZWFzdChlLG9wKSxvcC5oZWlnaHQ9YTtsZXQgaT10LnByb2plY3QobnAsQ04pLGY9dC5wcm9qZWN0KG9wLE1OKSxkPWYueC1pLngsYz1mLnktaS55LHU9Zi56LWkuejtyLnJhZGl1cz1NYXRoLnNxcnQoZCpkK2MqYyt1KnUpKi41O2xldCBsPXIuY2VudGVyO3JldHVybiBsLng9aS54K2QqLjUsbC55PWkueStjKi41LGwuej1pLnordSouNSxyfXN0YXRpYyBmcm9tUmVjdGFuZ2xlM0QoZSx0LG8sYSl7aWYodD10Pz9LLmRlZmF1bHQsbz1vPz8wLGcoYSl8fChhPW5ldyBuKSwhZyhlKSlyZXR1cm4gYS5jZW50ZXI9cy5jbG9uZShzLlpFUk8sYS5jZW50ZXIpLGEucmFkaXVzPTAsYTtsZXQgcj14ZS5zdWJzYW1wbGUoZSx0LG8sTk4pO3JldHVybiBuLmZyb21Qb2ludHMocixhKX1zdGF0aWMgZnJvbVZlcnRpY2VzKGUsdCxvLGEpe2lmKGcoYSl8fChhPW5ldyBuKSwhZyhlKXx8ZS5sZW5ndGg9PT0wKXJldHVybiBhLmNlbnRlcj1zLmNsb25lKHMuWkVSTyxhLmNlbnRlciksYS5yYWRpdXM9MCxhO3Q9dD8/cy5aRVJPLG89bz8/MztsZXQgcj1aYjtyLng9ZVswXSt0Lngsci55PWVbMV0rdC55LHIuej1lWzJdK3QuejtsZXQgaT1zLmNsb25lKHIsS2IpLGY9cy5jbG9uZShyLHFiKSxkPXMuY2xvbmUocixXYiksYz1zLmNsb25lKHIsWGIpLHU9cy5jbG9uZShyLFliKSxsPXMuY2xvbmUocixKYiksbT1lLmxlbmd0aCxoO2ZvcihoPTA7aDxtO2grPW8pe2xldCBGPWVbaF0rdC54LEE9ZVtoKzFdK3QueSx4PWVbaCsyXSt0Lno7ci54PUYsci55PUEsci56PXgsRjxpLngmJnMuY2xvbmUocixpKSxGPmMueCYmcy5jbG9uZShyLGMpLEE8Zi55JiZzLmNsb25lKHIsZiksQT51LnkmJnMuY2xvbmUocix1KSx4PGQueiYmcy5jbG9uZShyLGQpLHg+bC56JiZzLmNsb25lKHIsbCl9bGV0IGI9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoYyxpLGZvKSkscD1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdCh1LGYsZm8pKSx5PXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KGwsZCxmbykpLFQ9aSxfPWMsdz1iO3A+dyYmKHc9cCxUPWYsXz11KSx5PncmJihUPWQsXz1sKTtsZXQgRT1RYjtFLng9KFQueCtfLngpKi41LEUueT0oVC55K18ueSkqLjUsRS56PShULnorXy56KSouNTtsZXQgUj1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChfLEUsZm8pKSxTPU1hdGguc3FydChSKSxDPSRiO0MueD1pLngsQy55PWYueSxDLno9ZC56O2xldCBJPWVwO0kueD1jLngsSS55PXUueSxJLno9bC56O2xldCBNPXMubWlkcG9pbnQoQyxJLHRwKSxQPTA7Zm9yKGg9MDtoPG07aCs9byl7ci54PWVbaF0rdC54LHIueT1lW2grMV0rdC55LHIuej1lW2grMl0rdC56O2xldCBGPXMubWFnbml0dWRlKHMuc3VidHJhY3QocixNLGZvKSk7Rj5QJiYoUD1GKTtsZXQgQT1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChyLEUsZm8pKTtpZihBPlIpe2xldCB4PU1hdGguc3FydChBKTtTPShTK3gpKi41LFI9UypTO2xldCBOPXgtUztFLng9KFMqRS54K04qci54KS94LEUueT0oUypFLnkrTipyLnkpL3gsRS56PShTKkUueitOKnIueikveH19cmV0dXJuIFM8UD8ocy5jbG9uZShFLGEuY2VudGVyKSxhLnJhZGl1cz1TKToocy5jbG9uZShNLGEuY2VudGVyKSxhLnJhZGl1cz1QKSxhfXN0YXRpYyBmcm9tRW5jb2RlZENhcnRlc2lhblZlcnRpY2VzKGUsdCxvKXtpZihnKG8pfHwobz1uZXcgbiksIWcoZSl8fCFnKHQpfHxlLmxlbmd0aCE9PXQubGVuZ3RofHxlLmxlbmd0aD09PTApcmV0dXJuIG8uY2VudGVyPXMuY2xvbmUocy5aRVJPLG8uY2VudGVyKSxvLnJhZGl1cz0wLG87bGV0IGE9WmI7YS54PWVbMF0rdFswXSxhLnk9ZVsxXSt0WzFdLGEuej1lWzJdK3RbMl07bGV0IHI9cy5jbG9uZShhLEtiKSxpPXMuY2xvbmUoYSxxYiksZj1zLmNsb25lKGEsV2IpLGQ9cy5jbG9uZShhLFhiKSxjPXMuY2xvbmUoYSxZYiksdT1zLmNsb25lKGEsSmIpLGw9ZS5sZW5ndGgsbTtmb3IobT0wO208bDttKz0zKXtsZXQgUD1lW21dK3RbbV0sRj1lW20rMV0rdFttKzFdLEE9ZVttKzJdK3RbbSsyXTthLng9UCxhLnk9RixhLno9QSxQPHIueCYmcy5jbG9uZShhLHIpLFA+ZC54JiZzLmNsb25lKGEsZCksRjxpLnkmJnMuY2xvbmUoYSxpKSxGPmMueSYmcy5jbG9uZShhLGMpLEE8Zi56JiZzLmNsb25lKGEsZiksQT51LnomJnMuY2xvbmUoYSx1KX1sZXQgaD1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChkLHIsZm8pKSxiPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KGMsaSxmbykpLHA9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QodSxmLGZvKSkseT1yLFQ9ZCxfPWg7Yj5fJiYoXz1iLHk9aSxUPWMpLHA+XyYmKHk9ZixUPXUpO2xldCB3PVFiO3cueD0oeS54K1QueCkqLjUsdy55PSh5LnkrVC55KSouNSx3Lno9KHkueitULnopKi41O2xldCBFPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KFQsdyxmbykpLFI9TWF0aC5zcXJ0KEUpLFM9JGI7Uy54PXIueCxTLnk9aS55LFMuej1mLno7bGV0IEM9ZXA7Qy54PWQueCxDLnk9Yy55LEMuej11Lno7bGV0IEk9cy5taWRwb2ludChTLEMsdHApLE09MDtmb3IobT0wO208bDttKz0zKXthLng9ZVttXSt0W21dLGEueT1lW20rMV0rdFttKzFdLGEuej1lW20rMl0rdFttKzJdO2xldCBQPXMubWFnbml0dWRlKHMuc3VidHJhY3QoYSxJLGZvKSk7UD5NJiYoTT1QKTtsZXQgRj1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChhLHcsZm8pKTtpZihGPkUpe2xldCBBPU1hdGguc3FydChGKTtSPShSK0EpKi41LEU9UipSO2xldCB4PUEtUjt3Lng9KFIqdy54K3gqYS54KS9BLHcueT0oUip3LnkreCphLnkpL0Esdy56PShSKncueit4KmEueikvQX19cmV0dXJuIFI8TT8ocy5jbG9uZSh3LG8uY2VudGVyKSxvLnJhZGl1cz1SKToocy5jbG9uZShJLG8uY2VudGVyKSxvLnJhZGl1cz1NKSxvfXN0YXRpYyBmcm9tQ29ybmVyUG9pbnRzKGUsdCxvKXtnKG8pfHwobz1uZXcgbik7bGV0IGE9cy5taWRwb2ludChlLHQsby5jZW50ZXIpO3JldHVybiBvLnJhZGl1cz1zLmRpc3RhbmNlKGEsdCksb31zdGF0aWMgZnJvbUVsbGlwc29pZChlLHQpe3JldHVybiBnKHQpfHwodD1uZXcgbikscy5jbG9uZShzLlpFUk8sdC5jZW50ZXIpLHQucmFkaXVzPWUubWF4aW11bVJhZGl1cyx0fXN0YXRpYyBmcm9tQm91bmRpbmdTcGhlcmVzKGUsdCl7aWYoZyh0KXx8KHQ9bmV3IG4pLCFnKGUpfHxlLmxlbmd0aD09PTApcmV0dXJuIHQuY2VudGVyPXMuY2xvbmUocy5aRVJPLHQuY2VudGVyKSx0LnJhZGl1cz0wLHQ7bGV0IG89ZS5sZW5ndGg7aWYobz09PTEpcmV0dXJuIG4uY2xvbmUoZVswXSx0KTtpZihvPT09MilyZXR1cm4gbi51bmlvbihlWzBdLGVbMV0sdCk7bGV0IGE9W10scjtmb3Iocj0wO3I8bztyKyspYS5wdXNoKGVbcl0uY2VudGVyKTt0PW4uZnJvbVBvaW50cyhhLHQpO2xldCBpPXQuY2VudGVyLGY9dC5yYWRpdXM7Zm9yKHI9MDtyPG87cisrKXtsZXQgZD1lW3JdO2Y9TWF0aC5tYXgoZixzLmRpc3RhbmNlKGksZC5jZW50ZXIpK2QucmFkaXVzKX1yZXR1cm4gdC5yYWRpdXM9Zix0fXN0YXRpYyBmcm9tT3JpZW50ZWRCb3VuZGluZ0JveChlLHQpe2codCl8fCh0PW5ldyBuKTtsZXQgbz1lLmhhbGZBeGVzLGE9Wi5nZXRDb2x1bW4obywwLElOKSxyPVouZ2V0Q29sdW1uKG8sMSxQTiksaT1aLmdldENvbHVtbihvLDIsa04pO3JldHVybiBzLmFkZChhLHIsYSkscy5hZGQoYSxpLGEpLHQuY2VudGVyPXMuY2xvbmUoZS5jZW50ZXIsdC5jZW50ZXIpLHQucmFkaXVzPXMubWFnbml0dWRlKGEpLHR9c3RhdGljIGZyb21UcmFuc2Zvcm1hdGlvbihlLHQpe2codCl8fCh0PW5ldyBuKTtsZXQgbz1RLmdldFRyYW5zbGF0aW9uKGUsdk4pLGE9US5nZXRTY2FsZShlLEZOKSxyPS41KnMubWFnbml0dWRlKGEpO3JldHVybiB0LmNlbnRlcj1zLmNsb25lKG8sdC5jZW50ZXIpLHQucmFkaXVzPXIsdH1zdGF0aWMgY2xvbmUoZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0LmNlbnRlcj1zLmNsb25lKGUuY2VudGVyLHQuY2VudGVyKSx0LnJhZGl1cz1lLnJhZGl1cyx0KTpuZXcgbihlLmNlbnRlcixlLnJhZGl1cyl9c3RhdGljIHBhY2soZSx0LG8pe289bz8/MDtsZXQgYT1lLmNlbnRlcjtyZXR1cm4gdFtvKytdPWEueCx0W28rK109YS55LHRbbysrXT1hLnosdFtvXT1lLnJhZGl1cyx0fXN0YXRpYyB1bnBhY2soZSx0LG8pe3Q9dD8/MCxnKG8pfHwobz1uZXcgbik7bGV0IGE9by5jZW50ZXI7cmV0dXJuIGEueD1lW3QrK10sYS55PWVbdCsrXSxhLno9ZVt0KytdLG8ucmFkaXVzPWVbdF0sb31zdGF0aWMgdW5pb24oZSx0LG8pe2cobyl8fChvPW5ldyBuKTtsZXQgYT1lLmNlbnRlcixyPWUucmFkaXVzLGk9dC5jZW50ZXIsZj10LnJhZGl1cyxkPXMuc3VidHJhY3QoaSxhLEROKSxjPXMubWFnbml0dWRlKGQpO2lmKHI+PWMrZilyZXR1cm4gZS5jbG9uZShvKSxvO2lmKGY+PWMrcilyZXR1cm4gdC5jbG9uZShvKSxvO2xldCB1PShyK2MrZikqLjUsbD1zLm11bHRpcGx5QnlTY2FsYXIoZCwoLXIrdSkvYyxCTik7cmV0dXJuIHMuYWRkKGwsYSxsKSxzLmNsb25lKGwsby5jZW50ZXIpLG8ucmFkaXVzPXUsb31zdGF0aWMgZXhwYW5kKGUsdCxvKXtvPW4uY2xvbmUoZSxvKTtsZXQgYT1zLm1hZ25pdHVkZShzLnN1YnRyYWN0KHQsby5jZW50ZXIsVU4pKTtyZXR1cm4gYT5vLnJhZGl1cyYmKG8ucmFkaXVzPWEpLG99c3RhdGljIGludGVyc2VjdFBsYW5lKGUsdCl7bGV0IG89ZS5jZW50ZXIsYT1lLnJhZGl1cyxyPXQubm9ybWFsLGk9cy5kb3QocixvKSt0LmRpc3RhbmNlO3JldHVybiBpPC1hP1RuLk9VVFNJREU6aTxhP1RuLklOVEVSU0VDVElORzpUbi5JTlNJREV9c3RhdGljIHRyYW5zZm9ybShlLHQsbyl7cmV0dXJuIGcobyl8fChvPW5ldyBuKSxvLmNlbnRlcj1RLm11bHRpcGx5QnlQb2ludCh0LGUuY2VudGVyLG8uY2VudGVyKSxvLnJhZGl1cz1RLmdldE1heGltdW1TY2FsZSh0KSplLnJhZGl1cyxvfXN0YXRpYyBkaXN0YW5jZVNxdWFyZWRUbyhlLHQpe2xldCBvPXMuc3VidHJhY3QoZS5jZW50ZXIsdCxqTiksYT1zLm1hZ25pdHVkZShvKS1lLnJhZGl1cztyZXR1cm4gYTw9MD8wOmEqYX1zdGF0aWMgdHJhbnNmb3JtV2l0aG91dFNjYWxlKGUsdCxvKXtyZXR1cm4gZyhvKXx8KG89bmV3IG4pLG8uY2VudGVyPVEubXVsdGlwbHlCeVBvaW50KHQsZS5jZW50ZXIsby5jZW50ZXIpLG8ucmFkaXVzPWUucmFkaXVzLG99c3RhdGljIGNvbXB1dGVQbGFuZURpc3RhbmNlcyhlLHQsbyxhKXtnKGEpfHwoYT1uZXcgX28pO2xldCByPXMuc3VidHJhY3QoZS5jZW50ZXIsdCxMTiksaT1zLmRvdChvLHIpO3JldHVybiBhLnN0YXJ0PWktZS5yYWRpdXMsYS5zdG9wPWkrZS5yYWRpdXMsYX1zdGF0aWMgcHJvamVjdFRvMkQoZSx0LG8pe1R3Ll9lbGxpcHNvaWQ9Sy5kZWZhdWx0LHQ9dD8/VHc7bGV0IGE9dC5lbGxpcHNvaWQscj1lLmNlbnRlcixpPWUucmFkaXVzLGY7cy5lcXVhbHMocixzLlpFUk8pP2Y9cy5jbG9uZShzLlVOSVRfWCx3dyk6Zj1hLmdlb2RldGljU3VyZmFjZU5vcm1hbChyLHd3KTtsZXQgZD1zLmNyb3NzKHMuVU5JVF9aLGYsek4pO3Mubm9ybWFsaXplKGQsZCk7bGV0IGM9cy5jcm9zcyhmLGQsR04pO3Mubm9ybWFsaXplKGMsYykscy5tdWx0aXBseUJ5U2NhbGFyKGYsaSxmKSxzLm11bHRpcGx5QnlTY2FsYXIoYyxpLGMpLHMubXVsdGlwbHlCeVNjYWxhcihkLGksZCk7bGV0IHU9cy5uZWdhdGUoYyxITiksbD1zLm5lZ2F0ZShkLFZOKSxtPUV3LGg9bVswXTtzLmFkZChmLGMsaCkscy5hZGQoaCxkLGgpLGg9bVsxXSxzLmFkZChmLGMsaCkscy5hZGQoaCxsLGgpLGg9bVsyXSxzLmFkZChmLHUsaCkscy5hZGQoaCxsLGgpLGg9bVszXSxzLmFkZChmLHUsaCkscy5hZGQoaCxkLGgpLHMubmVnYXRlKGYsZiksaD1tWzRdLHMuYWRkKGYsYyxoKSxzLmFkZChoLGQsaCksaD1tWzVdLHMuYWRkKGYsYyxoKSxzLmFkZChoLGwsaCksaD1tWzZdLHMuYWRkKGYsdSxoKSxzLmFkZChoLGwsaCksaD1tWzddLHMuYWRkKGYsdSxoKSxzLmFkZChoLGQsaCk7bGV0IGI9bS5sZW5ndGg7Zm9yKGxldCBfPTA7XzxiOysrXyl7bGV0IHc9bVtfXTtzLmFkZChyLHcsdyk7bGV0IEU9YS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh3LEtOKTt0LnByb2plY3QoRSx3KX1vPW4uZnJvbVBvaW50cyhtLG8pLHI9by5jZW50ZXI7bGV0IHA9ci54LHk9ci55LFQ9ci56O3JldHVybiByLng9VCxyLnk9cCxyLno9eSxvfXN0YXRpYyBpc09jY2x1ZGVkKGUsdCl7cmV0dXJuIXQuaXNCb3VuZGluZ1NwaGVyZVZpc2libGUoZSl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmcy5lcXVhbHMoZS5jZW50ZXIsdC5jZW50ZXIpJiZlLnJhZGl1cz09PXQucmFkaXVzfWludGVyc2VjdFBsYW5lKGUpe3JldHVybiBuLmludGVyc2VjdFBsYW5lKHRoaXMsZSl9ZGlzdGFuY2VTcXVhcmVkVG8oZSl7cmV0dXJuIG4uZGlzdGFuY2VTcXVhcmVkVG8odGhpcyxlKX1jb21wdXRlUGxhbmVEaXN0YW5jZXMoZSx0LG8pe3JldHVybiBuLmNvbXB1dGVQbGFuZURpc3RhbmNlcyh0aGlzLGUsdCxvKX1pc09jY2x1ZGVkKGUpe3JldHVybiBuLmlzT2NjbHVkZWQodGhpcyxlKX1lcXVhbHMoZSl7cmV0dXJuIG4uZXF1YWxzKHRoaXMsZSl9Y2xvbmUoZSl7cmV0dXJuIG4uY2xvbmUodGhpcyxlKX12b2x1bWUoKXtsZXQgZT10aGlzLnJhZGl1cztyZXR1cm4gU04qZSplKmV9fTtZbC5wYWNrZWRMZW5ndGg9NDtLYj1uZXcgcyxxYj1uZXcgcyxXYj1uZXcgcyxYYj1uZXcgcyxZYj1uZXcgcyxKYj1uZXcgcyxaYj1uZXcgcyxmbz1uZXcgcyxRYj1uZXcgcywkYj1uZXcgcyxlcD1uZXcgcyx0cD1uZXcgcyxTTj00LzMqay5QSSxBdz1uZXcgbm8sQ049bmV3IHMsTU49bmV3IHMsbnA9bmV3IGFlLG9wPW5ldyBhZSxOTj1bXSxJTj1uZXcgcyxQTj1uZXcgcyxrTj1uZXcgcyx2Tj1uZXcgcyxGTj1uZXcgcyxETj1uZXcgcyxCTj1uZXcgcyxVTj1uZXcgcyxqTj1uZXcgcyxMTj1uZXcgcyx3dz1uZXcgcyx6Tj1uZXcgcyxHTj1uZXcgcyxWTj1uZXcgcyxITj1uZXcgcyxLTj1uZXcgYWUsRXc9bmV3IEFycmF5KDgpO2ZvcihsZXQgbj0wO248ODsrK24pRXdbbl09bmV3IHM7VHc9bmV3IG5vLHBlPVlsfSk7dmFyIFJ3LE5lLG9jPVgoKCk9PntSdz17REVQVEhfQlVGRkVSX0JJVDoyNTYsU1RFTkNJTF9CVUZGRVJfQklUOjEwMjQsQ09MT1JfQlVGRkVSX0JJVDoxNjM4NCxQT0lOVFM6MCxMSU5FUzoxLExJTkVfTE9PUDoyLExJTkVfU1RSSVA6MyxUUklBTkdMRVM6NCxUUklBTkdMRV9TVFJJUDo1LFRSSUFOR0xFX0ZBTjo2LFpFUk86MCxPTkU6MSxTUkNfQ09MT1I6NzY4LE9ORV9NSU5VU19TUkNfQ09MT1I6NzY5LFNSQ19BTFBIQTo3NzAsT05FX01JTlVTX1NSQ19BTFBIQTo3NzEsRFNUX0FMUEhBOjc3MixPTkVfTUlOVVNfRFNUX0FMUEhBOjc3MyxEU1RfQ09MT1I6Nzc0LE9ORV9NSU5VU19EU1RfQ09MT1I6Nzc1LFNSQ19BTFBIQV9TQVRVUkFURTo3NzYsRlVOQ19BREQ6MzI3NzQsQkxFTkRfRVFVQVRJT046MzI3NzcsQkxFTkRfRVFVQVRJT05fUkdCOjMyNzc3LEJMRU5EX0VRVUFUSU9OX0FMUEhBOjM0ODc3LEZVTkNfU1VCVFJBQ1Q6MzI3NzgsRlVOQ19SRVZFUlNFX1NVQlRSQUNUOjMyNzc5LEJMRU5EX0RTVF9SR0I6MzI5NjgsQkxFTkRfU1JDX1JHQjozMjk2OSxCTEVORF9EU1RfQUxQSEE6MzI5NzAsQkxFTkRfU1JDX0FMUEhBOjMyOTcxLENPTlNUQU5UX0NPTE9SOjMyNzY5LE9ORV9NSU5VU19DT05TVEFOVF9DT0xPUjozMjc3MCxDT05TVEFOVF9BTFBIQTozMjc3MSxPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6MzI3NzIsQkxFTkRfQ09MT1I6MzI3NzMsQVJSQVlfQlVGRkVSOjM0OTYyLEVMRU1FTlRfQVJSQVlfQlVGRkVSOjM0OTYzLEFSUkFZX0JVRkZFUl9CSU5ESU5HOjM0OTY0LEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6MzQ5NjUsU1RSRUFNX0RSQVc6MzUwNDAsU1RBVElDX0RSQVc6MzUwNDQsRFlOQU1JQ19EUkFXOjM1MDQ4LEJVRkZFUl9TSVpFOjM0NjYwLEJVRkZFUl9VU0FHRTozNDY2MSxDVVJSRU5UX1ZFUlRFWF9BVFRSSUI6MzQzNDIsRlJPTlQ6MTAyOCxCQUNLOjEwMjksRlJPTlRfQU5EX0JBQ0s6MTAzMixDVUxMX0ZBQ0U6Mjg4NCxCTEVORDozMDQyLERJVEhFUjozMDI0LFNURU5DSUxfVEVTVDoyOTYwLERFUFRIX1RFU1Q6MjkyOSxTQ0lTU09SX1RFU1Q6MzA4OSxQT0xZR09OX09GRlNFVF9GSUxMOjMyODIzLFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTozMjkyNixTQU1QTEVfQ09WRVJBR0U6MzI5MjgsTk9fRVJST1I6MCxJTlZBTElEX0VOVU06MTI4MCxJTlZBTElEX1ZBTFVFOjEyODEsSU5WQUxJRF9PUEVSQVRJT046MTI4MixPVVRfT0ZfTUVNT1JZOjEyODUsQ1c6MjMwNCxDQ1c6MjMwNSxMSU5FX1dJRFRIOjI4NDksQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOjMzOTAxLEFMSUFTRURfTElORV9XSURUSF9SQU5HRTozMzkwMixDVUxMX0ZBQ0VfTU9ERToyODg1LEZST05UX0ZBQ0U6Mjg4NixERVBUSF9SQU5HRToyOTI4LERFUFRIX1dSSVRFTUFTSzoyOTMwLERFUFRIX0NMRUFSX1ZBTFVFOjI5MzEsREVQVEhfRlVOQzoyOTMyLFNURU5DSUxfQ0xFQVJfVkFMVUU6Mjk2MSxTVEVOQ0lMX0ZVTkM6Mjk2MixTVEVOQ0lMX0ZBSUw6Mjk2NCxTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoyOTY1LFNURU5DSUxfUEFTU19ERVBUSF9QQVNTOjI5NjYsU1RFTkNJTF9SRUY6Mjk2NyxTVEVOQ0lMX1ZBTFVFX01BU0s6Mjk2MyxTVEVOQ0lMX1dSSVRFTUFTSzoyOTY4LFNURU5DSUxfQkFDS19GVU5DOjM0ODE2LFNURU5DSUxfQkFDS19GQUlMOjM0ODE3LFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6MzQ4MTgsU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzozNDgxOSxTVEVOQ0lMX0JBQ0tfUkVGOjM2MDAzLFNURU5DSUxfQkFDS19WQUxVRV9NQVNLOjM2MDA0LFNURU5DSUxfQkFDS19XUklURU1BU0s6MzYwMDUsVklFV1BPUlQ6Mjk3OCxTQ0lTU09SX0JPWDozMDg4LENPTE9SX0NMRUFSX1ZBTFVFOjMxMDYsQ09MT1JfV1JJVEVNQVNLOjMxMDcsVU5QQUNLX0FMSUdOTUVOVDozMzE3LFBBQ0tfQUxJR05NRU5UOjMzMzMsTUFYX1RFWFRVUkVfU0laRTozMzc5LE1BWF9WSUVXUE9SVF9ESU1TOjMzODYsU1VCUElYRUxfQklUUzozNDA4LFJFRF9CSVRTOjM0MTAsR1JFRU5fQklUUzozNDExLEJMVUVfQklUUzozNDEyLEFMUEhBX0JJVFM6MzQxMyxERVBUSF9CSVRTOjM0MTQsU1RFTkNJTF9CSVRTOjM0MTUsUE9MWUdPTl9PRkZTRVRfVU5JVFM6MTA3NTIsUE9MWUdPTl9PRkZTRVRfRkFDVE9SOjMyODI0LFRFWFRVUkVfQklORElOR18yRDozMjg3MyxTQU1QTEVfQlVGRkVSUzozMjkzNixTQU1QTEVTOjMyOTM3LFNBTVBMRV9DT1ZFUkFHRV9WQUxVRTozMjkzOCxTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOjMyOTM5LENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOjM0NDY3LERPTlRfQ0FSRTo0MzUyLEZBU1RFU1Q6NDM1MyxOSUNFU1Q6NDM1NCxHRU5FUkFURV9NSVBNQVBfSElOVDozMzE3MCxCWVRFOjUxMjAsVU5TSUdORURfQllURTo1MTIxLFNIT1JUOjUxMjIsVU5TSUdORURfU0hPUlQ6NTEyMyxJTlQ6NTEyNCxVTlNJR05FRF9JTlQ6NTEyNSxGTE9BVDo1MTI2LERFUFRIX0NPTVBPTkVOVDo2NDAyLEFMUEhBOjY0MDYsUkdCOjY0MDcsUkdCQTo2NDA4LExVTUlOQU5DRTo2NDA5LExVTUlOQU5DRV9BTFBIQTo2NDEwLFVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6MzI4MTksVU5TSUdORURfU0hPUlRfNV81XzVfMTozMjgyMCxVTlNJR05FRF9TSE9SVF81XzZfNTozMzYzNSxGUkFHTUVOVF9TSEFERVI6MzU2MzIsVkVSVEVYX1NIQURFUjozNTYzMyxNQVhfVkVSVEVYX0FUVFJJQlM6MzQ5MjEsTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6MzYzNDcsTUFYX1ZBUllJTkdfVkVDVE9SUzozNjM0OCxNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzozNTY2MSxNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6MzU2NjAsTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6MzQ5MzAsTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzozNjM0OSxTSEFERVJfVFlQRTozNTY2MyxERUxFVEVfU1RBVFVTOjM1NzEyLExJTktfU1RBVFVTOjM1NzE0LFZBTElEQVRFX1NUQVRVUzozNTcxNSxBVFRBQ0hFRF9TSEFERVJTOjM1NzE3LEFDVElWRV9VTklGT1JNUzozNTcxOCxBQ1RJVkVfQVRUUklCVVRFUzozNTcyMSxTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046MzU3MjQsQ1VSUkVOVF9QUk9HUkFNOjM1NzI1LE5FVkVSOjUxMixMRVNTOjUxMyxFUVVBTDo1MTQsTEVRVUFMOjUxNSxHUkVBVEVSOjUxNixOT1RFUVVBTDo1MTcsR0VRVUFMOjUxOCxBTFdBWVM6NTE5LEtFRVA6NzY4MCxSRVBMQUNFOjc2ODEsSU5DUjo3NjgyLERFQ1I6NzY4MyxJTlZFUlQ6NTM4NixJTkNSX1dSQVA6MzQwNTUsREVDUl9XUkFQOjM0MDU2LFZFTkRPUjo3OTM2LFJFTkRFUkVSOjc5MzcsVkVSU0lPTjo3OTM4LE5FQVJFU1Q6OTcyOCxMSU5FQVI6OTcyOSxORUFSRVNUX01JUE1BUF9ORUFSRVNUOjk5ODQsTElORUFSX01JUE1BUF9ORUFSRVNUOjk5ODUsTkVBUkVTVF9NSVBNQVBfTElORUFSOjk5ODYsTElORUFSX01JUE1BUF9MSU5FQVI6OTk4NyxURVhUVVJFX01BR19GSUxURVI6MTAyNDAsVEVYVFVSRV9NSU5fRklMVEVSOjEwMjQxLFRFWFRVUkVfV1JBUF9TOjEwMjQyLFRFWFRVUkVfV1JBUF9UOjEwMjQzLFRFWFRVUkVfMkQ6MzU1MyxURVhUVVJFOjU4OTAsVEVYVFVSRV9DVUJFX01BUDozNDA2NyxURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6MzQwNjgsVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOjM0MDY5LFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDozNDA3MCxURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6MzQwNzEsVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOjM0MDcyLFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjozNDA3MyxURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6MzQwNzQsTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTozNDA3NixURVhUVVJFMDozMzk4NCxURVhUVVJFMTozMzk4NSxURVhUVVJFMjozMzk4NixURVhUVVJFMzozMzk4NyxURVhUVVJFNDozMzk4OCxURVhUVVJFNTozMzk4OSxURVhUVVJFNjozMzk5MCxURVhUVVJFNzozMzk5MSxURVhUVVJFODozMzk5MixURVhUVVJFOTozMzk5MyxURVhUVVJFMTA6MzM5OTQsVEVYVFVSRTExOjMzOTk1LFRFWFRVUkUxMjozMzk5NixURVhUVVJFMTM6MzM5OTcsVEVYVFVSRTE0OjMzOTk4LFRFWFRVUkUxNTozMzk5OSxURVhUVVJFMTY6MzRlMyxURVhUVVJFMTc6MzQwMDEsVEVYVFVSRTE4OjM0MDAyLFRFWFRVUkUxOTozNDAwMyxURVhUVVJFMjA6MzQwMDQsVEVYVFVSRTIxOjM0MDA1LFRFWFRVUkUyMjozNDAwNixURVhUVVJFMjM6MzQwMDcsVEVYVFVSRTI0OjM0MDA4LFRFWFRVUkUyNTozNDAwOSxURVhUVVJFMjY6MzQwMTAsVEVYVFVSRTI3OjM0MDExLFRFWFRVUkUyODozNDAxMixURVhUVVJFMjk6MzQwMTMsVEVYVFVSRTMwOjM0MDE0LFRFWFRVUkUzMTozNDAxNSxBQ1RJVkVfVEVYVFVSRTozNDAxNixSRVBFQVQ6MTA0OTcsQ0xBTVBfVE9fRURHRTozMzA3MSxNSVJST1JFRF9SRVBFQVQ6MzM2NDgsRkxPQVRfVkVDMjozNTY2NCxGTE9BVF9WRUMzOjM1NjY1LEZMT0FUX1ZFQzQ6MzU2NjYsSU5UX1ZFQzI6MzU2NjcsSU5UX1ZFQzM6MzU2NjgsSU5UX1ZFQzQ6MzU2NjksQk9PTDozNTY3MCxCT09MX1ZFQzI6MzU2NzEsQk9PTF9WRUMzOjM1NjcyLEJPT0xfVkVDNDozNTY3MyxGTE9BVF9NQVQyOjM1Njc0LEZMT0FUX01BVDM6MzU2NzUsRkxPQVRfTUFUNDozNTY3NixTQU1QTEVSXzJEOjM1Njc4LFNBTVBMRVJfQ1VCRTozNTY4MCxWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6MzQzMzgsVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOjM0MzM5LFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOjM0MzQwLFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRTozNDM0MSxWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6MzQ5MjIsVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSOjM0MzczLFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6MzQ5NzUsSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOjM1NzM4LElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOjM1NzM5LENPTVBJTEVfU1RBVFVTOjM1NzEzLExPV19GTE9BVDozNjMzNixNRURJVU1fRkxPQVQ6MzYzMzcsSElHSF9GTE9BVDozNjMzOCxMT1dfSU5UOjM2MzM5LE1FRElVTV9JTlQ6MzYzNDAsSElHSF9JTlQ6MzYzNDEsRlJBTUVCVUZGRVI6MzYxNjAsUkVOREVSQlVGRkVSOjM2MTYxLFJHQkE0OjMyODU0LFJHQjVfQTE6MzI4NTUsUkdCNTY1OjM2MTk0LERFUFRIX0NPTVBPTkVOVDE2OjMzMTg5LFNURU5DSUxfSU5ERVg6NjQwMSxTVEVOQ0lMX0lOREVYODozNjE2OCxERVBUSF9TVEVOQ0lMOjM0MDQxLFJFTkRFUkJVRkZFUl9XSURUSDozNjE2MixSRU5ERVJCVUZGRVJfSEVJR0hUOjM2MTYzLFJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6MzYxNjQsUkVOREVSQlVGRkVSX1JFRF9TSVpFOjM2MTc2LFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOjM2MTc3LFJFTkRFUkJVRkZFUl9CTFVFX1NJWkU6MzYxNzgsUkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6MzYxNzksUkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6MzYxODAsUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRTozNjE4MSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOjM2MDQ4LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6MzYwNDksRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOjM2MDUwLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOjM2MDUxLENPTE9SX0FUVEFDSE1FTlQwOjM2MDY0LERFUFRIX0FUVEFDSE1FTlQ6MzYwOTYsU1RFTkNJTF9BVFRBQ0hNRU5UOjM2MTI4LERFUFRIX1NURU5DSUxfQVRUQUNITUVOVDozMzMwNixOT05FOjAsRlJBTUVCVUZGRVJfQ09NUExFVEU6MzYwNTMsRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOjM2MDU0LEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOjM2MDU1LEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzozNjA1NyxGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDozNjA2MSxGUkFNRUJVRkZFUl9CSU5ESU5HOjM2MDA2LFJFTkRFUkJVRkZFUl9CSU5ESU5HOjM2MDA3LE1BWF9SRU5ERVJCVUZGRVJfU0laRTozNDAyNCxJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoxMjg2LFVOUEFDS19GTElQX1lfV0VCR0w6Mzc0NDAsVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOjM3NDQxLENPTlRFWFRfTE9TVF9XRUJHTDozNzQ0MixVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOjM3NDQzLEJST1dTRVJfREVGQVVMVF9XRUJHTDozNzQ0NCxDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOjMzNzc2LENPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOjMzNzc3LENPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOjMzNzc4LENPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOjMzNzc5LENPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6MzU4NDAsQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzozNTg0MSxDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzozNTg0MixDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzozNTg0MyxDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfV0VCR0w6Mzc4MDgsQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDozNjE5NixDT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STTozNjQ5MixIQUxGX0ZMT0FUX09FUzozNjE5MyxET1VCTEU6NTEzMCxSRUFEX0JVRkZFUjozMDc0LFVOUEFDS19ST1dfTEVOR1RIOjMzMTQsVU5QQUNLX1NLSVBfUk9XUzozMzE1LFVOUEFDS19TS0lQX1BJWEVMUzozMzE2LFBBQ0tfUk9XX0xFTkdUSDozMzMwLFBBQ0tfU0tJUF9ST1dTOjMzMzEsUEFDS19TS0lQX1BJWEVMUzozMzMyLENPTE9SOjYxNDQsREVQVEg6NjE0NSxTVEVOQ0lMOjYxNDYsUkVEOjY0MDMsUkdCODozMjg0OSxSR0JBODozMjg1NixSR0IxMF9BMjozMjg1NyxURVhUVVJFX0JJTkRJTkdfM0Q6MzI4NzQsVU5QQUNLX1NLSVBfSU1BR0VTOjMyODc3LFVOUEFDS19JTUFHRV9IRUlHSFQ6MzI4NzgsVEVYVFVSRV8zRDozMjg3OSxURVhUVVJFX1dSQVBfUjozMjg4MixNQVhfM0RfVEVYVFVSRV9TSVpFOjMyODgzLFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjozMzY0MCxNQVhfRUxFTUVOVFNfVkVSVElDRVM6MzNlMyxNQVhfRUxFTUVOVFNfSU5ESUNFUzozMzAwMSxURVhUVVJFX01JTl9MT0Q6MzMwODIsVEVYVFVSRV9NQVhfTE9EOjMzMDgzLFRFWFRVUkVfQkFTRV9MRVZFTDozMzA4NCxURVhUVVJFX01BWF9MRVZFTDozMzA4NSxNSU46MzI3NzUsTUFYOjMyNzc2LERFUFRIX0NPTVBPTkVOVDI0OjMzMTkwLE1BWF9URVhUVVJFX0xPRF9CSUFTOjM0MDQ1LFRFWFRVUkVfQ09NUEFSRV9NT0RFOjM0ODkyLFRFWFRVUkVfQ09NUEFSRV9GVU5DOjM0ODkzLENVUlJFTlRfUVVFUlk6MzQ5MTcsUVVFUllfUkVTVUxUOjM0OTE4LFFVRVJZX1JFU1VMVF9BVkFJTEFCTEU6MzQ5MTksU1RSRUFNX1JFQUQ6MzUwNDEsU1RSRUFNX0NPUFk6MzUwNDIsU1RBVElDX1JFQUQ6MzUwNDUsU1RBVElDX0NPUFk6MzUwNDYsRFlOQU1JQ19SRUFEOjM1MDQ5LERZTkFNSUNfQ09QWTozNTA1MCxNQVhfRFJBV19CVUZGRVJTOjM0ODUyLERSQVdfQlVGRkVSMDozNDg1MyxEUkFXX0JVRkZFUjE6MzQ4NTQsRFJBV19CVUZGRVIyOjM0ODU1LERSQVdfQlVGRkVSMzozNDg1NixEUkFXX0JVRkZFUjQ6MzQ4NTcsRFJBV19CVUZGRVI1OjM0ODU4LERSQVdfQlVGRkVSNjozNDg1OSxEUkFXX0JVRkZFUjc6MzQ4NjAsRFJBV19CVUZGRVI4OjM0ODYxLERSQVdfQlVGRkVSOTozNDg2MixEUkFXX0JVRkZFUjEwOjM0ODYzLERSQVdfQlVGRkVSMTE6MzQ4NjQsRFJBV19CVUZGRVIxMjozNDg2NSxEUkFXX0JVRkZFUjEzOjM0ODY2LERSQVdfQlVGRkVSMTQ6MzQ4NjcsRFJBV19CVUZGRVIxNTozNDg2OCxNQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOjM1NjU3LE1BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOjM1NjU4LFNBTVBMRVJfM0Q6MzU2NzksU0FNUExFUl8yRF9TSEFET1c6MzU2ODIsRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVDozNTcyMyxQSVhFTF9QQUNLX0JVRkZFUjozNTA1MSxQSVhFTF9VTlBBQ0tfQlVGRkVSOjM1MDUyLFBJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkc6MzUwNTMsUElYRUxfVU5QQUNLX0JVRkZFUl9CSU5ESU5HOjM1MDU1LEZMT0FUX01BVDJ4MzozNTY4NSxGTE9BVF9NQVQyeDQ6MzU2ODYsRkxPQVRfTUFUM3gyOjM1Njg3LEZMT0FUX01BVDN4NDozNTY4OCxGTE9BVF9NQVQ0eDI6MzU2ODksRkxPQVRfTUFUNHgzOjM1NjkwLFNSR0I6MzU5MDQsU1JHQjg6MzU5MDUsU1JHQjhfQUxQSEE4OjM1OTA3LENPTVBBUkVfUkVGX1RPX1RFWFRVUkU6MzQ4OTQsUkdCQTMyRjozNDgzNixSR0IzMkY6MzQ4MzcsUkdCQTE2RjozNDg0MixSR0IxNkY6MzQ4NDMsVkVSVEVYX0FUVFJJQl9BUlJBWV9JTlRFR0VSOjM1MDY5LE1BWF9BUlJBWV9URVhUVVJFX0xBWUVSUzozNTA3MSxNSU5fUFJPR1JBTV9URVhFTF9PRkZTRVQ6MzUwNzYsTUFYX1BST0dSQU1fVEVYRUxfT0ZGU0VUOjM1MDc3LE1BWF9WQVJZSU5HX0NPTVBPTkVOVFM6MzU2NTksVEVYVFVSRV8yRF9BUlJBWTozNTg2NixURVhUVVJFX0JJTkRJTkdfMkRfQVJSQVk6MzU4NjksUjExRl9HMTFGX0IxMEY6MzU4OTgsVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjozNTg5OSxSR0I5X0U1OjM1OTAxLFVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjozNTkwMixUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6MzU5NjcsTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05FTlRTOjM1OTY4LFRSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUzozNTk3MSxUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NUQVJUOjM1OTcyLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU0laRTozNTk3MyxUUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOjM1OTc2LFJBU1RFUklaRVJfRElTQ0FSRDozNTk3NyxNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVOVFM6MzU5NzgsTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9BVFRSSUJTOjM1OTc5LElOVEVSTEVBVkVEX0FUVFJJQlM6MzU5ODAsU0VQQVJBVEVfQVRUUklCUzozNTk4MSxUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOjM1OTgyLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzozNTk4MyxSR0JBMzJVSTozNjIwOCxSR0IzMlVJOjM2MjA5LFJHQkExNlVJOjM2MjE0LFJHQjE2VUk6MzYyMTUsUkdCQThVSTozNjIyMCxSR0I4VUk6MzYyMjEsUkdCQTMySTozNjIyNixSR0IzMkk6MzYyMjcsUkdCQTE2STozNjIzMixSR0IxNkk6MzYyMzMsUkdCQThJOjM2MjM4LFJHQjhJOjM2MjM5LFJFRF9JTlRFR0VSOjM2MjQ0LFJHQl9JTlRFR0VSOjM2MjQ4LFJHQkFfSU5URUdFUjozNjI0OSxTQU1QTEVSXzJEX0FSUkFZOjM2Mjg5LFNBTVBMRVJfMkRfQVJSQVlfU0hBRE9XOjM2MjkyLFNBTVBMRVJfQ1VCRV9TSEFET1c6MzYyOTMsVU5TSUdORURfSU5UX1ZFQzI6MzYyOTQsVU5TSUdORURfSU5UX1ZFQzM6MzYyOTUsVU5TSUdORURfSU5UX1ZFQzQ6MzYyOTYsSU5UX1NBTVBMRVJfMkQ6MzYyOTgsSU5UX1NBTVBMRVJfM0Q6MzYyOTksSU5UX1NBTVBMRVJfQ1VCRTozNjMwMCxJTlRfU0FNUExFUl8yRF9BUlJBWTozNjMwMyxVTlNJR05FRF9JTlRfU0FNUExFUl8yRDozNjMwNixVTlNJR05FRF9JTlRfU0FNUExFUl8zRDozNjMwNyxVTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOjM2MzA4LFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOjM2MzExLERFUFRIX0NPTVBPTkVOVDMyRjozNjAxMixERVBUSDMyRl9TVEVOQ0lMODozNjAxMyxGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY6MzYyNjksRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORzozMzI5NixGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFOjMzMjk3LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkU6MzMyOTgsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9HUkVFTl9TSVpFOjMzMjk5LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQkxVRV9TSVpFOjMzMzAwLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFfU0laRTozMzMwMSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkU6MzMzMDIsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9TVEVOQ0lMX1NJWkU6MzMzMDMsRlJBTUVCVUZGRVJfREVGQVVMVDozMzMwNCxVTlNJR05FRF9JTlRfMjRfODozNDA0MixERVBUSDI0X1NURU5DSUw4OjM1MDU2LFVOU0lHTkVEX05PUk1BTElaRUQ6MzU4NjMsRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HOjM2MDA2LFJFQURfRlJBTUVCVUZGRVI6MzYwMDgsRFJBV19GUkFNRUJVRkZFUjozNjAwOSxSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkc6MzYwMTAsUkVOREVSQlVGRkVSX1NBTVBMRVM6MzYwMTEsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOjM2MDUyLE1BWF9DT0xPUl9BVFRBQ0hNRU5UUzozNjA2MyxDT0xPUl9BVFRBQ0hNRU5UMTozNjA2NSxDT0xPUl9BVFRBQ0hNRU5UMjozNjA2NixDT0xPUl9BVFRBQ0hNRU5UMzozNjA2NyxDT0xPUl9BVFRBQ0hNRU5UNDozNjA2OCxDT0xPUl9BVFRBQ0hNRU5UNTozNjA2OSxDT0xPUl9BVFRBQ0hNRU5UNjozNjA3MCxDT0xPUl9BVFRBQ0hNRU5UNzozNjA3MSxDT0xPUl9BVFRBQ0hNRU5UODozNjA3MixDT0xPUl9BVFRBQ0hNRU5UOTozNjA3MyxDT0xPUl9BVFRBQ0hNRU5UMTA6MzYwNzQsQ09MT1JfQVRUQUNITUVOVDExOjM2MDc1LENPTE9SX0FUVEFDSE1FTlQxMjozNjA3NixDT0xPUl9BVFRBQ0hNRU5UMTM6MzYwNzcsQ09MT1JfQVRUQUNITUVOVDE0OjM2MDc4LENPTE9SX0FUVEFDSE1FTlQxNTozNjA3OSxGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFOjM2MTgyLE1BWF9TQU1QTEVTOjM2MTgzLEhBTEZfRkxPQVQ6NTEzMSxSRzozMzMxOSxSR19JTlRFR0VSOjMzMzIwLFI4OjMzMzIxLFJHODozMzMyMyxSMTZGOjMzMzI1LFIzMkY6MzMzMjYsUkcxNkY6MzMzMjcsUkczMkY6MzMzMjgsUjhJOjMzMzI5LFI4VUk6MzMzMzAsUjE2STozMzMzMSxSMTZVSTozMzMzMixSMzJJOjMzMzMzLFIzMlVJOjMzMzM0LFJHOEk6MzMzMzUsUkc4VUk6MzMzMzYsUkcxNkk6MzMzMzcsUkcxNlVJOjMzMzM4LFJHMzJJOjMzMzM5LFJHMzJVSTozMzM0MCxWRVJURVhfQVJSQVlfQklORElORzozNDIyOSxSOF9TTk9STTozNjc1NixSRzhfU05PUk06MzY3NTcsUkdCOF9TTk9STTozNjc1OCxSR0JBOF9TTk9STTozNjc1OSxTSUdORURfTk9STUFMSVpFRDozNjc2NCxDT1BZX1JFQURfQlVGRkVSOjM2NjYyLENPUFlfV1JJVEVfQlVGRkVSOjM2NjYzLENPUFlfUkVBRF9CVUZGRVJfQklORElORzozNjY2MixDT1BZX1dSSVRFX0JVRkZFUl9CSU5ESU5HOjM2NjYzLFVOSUZPUk1fQlVGRkVSOjM1MzQ1LFVOSUZPUk1fQlVGRkVSX0JJTkRJTkc6MzUzNjgsVU5JRk9STV9CVUZGRVJfU1RBUlQ6MzUzNjksVU5JRk9STV9CVUZGRVJfU0laRTozNTM3MCxNQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTOjM1MzcxLE1BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUzozNTM3MyxNQVhfQ09NQklORURfVU5JRk9STV9CTE9DS1M6MzUzNzQsTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTOjM1Mzc1LE1BWF9VTklGT1JNX0JMT0NLX1NJWkU6MzUzNzYsTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6MzUzNzcsTUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUzozNTM3OSxVTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOjM1MzgwLEFDVElWRV9VTklGT1JNX0JMT0NLUzozNTM4MixVTklGT1JNX1RZUEU6MzUzODMsVU5JRk9STV9TSVpFOjM1Mzg0LFVOSUZPUk1fQkxPQ0tfSU5ERVg6MzUzODYsVU5JRk9STV9PRkZTRVQ6MzUzODcsVU5JRk9STV9BUlJBWV9TVFJJREU6MzUzODgsVU5JRk9STV9NQVRSSVhfU1RSSURFOjM1Mzg5LFVOSUZPUk1fSVNfUk9XX01BSk9SOjM1MzkwLFVOSUZPUk1fQkxPQ0tfQklORElORzozNTM5MSxVTklGT1JNX0JMT0NLX0RBVEFfU0laRTozNTM5MixVTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNUzozNTM5NCxVTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNX0lORElDRVM6MzUzOTUsVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVI6MzUzOTYsVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUjozNTM5OCxJTlZBTElEX0lOREVYOjQyOTQ5NjcyOTUsTUFYX1ZFUlRFWF9PVVRQVVRfQ09NUE9ORU5UUzozNzE1NCxNQVhfRlJBR01FTlRfSU5QVVRfQ09NUE9ORU5UUzozNzE1NyxNQVhfU0VSVkVSX1dBSVRfVElNRU9VVDozNzEzNyxPQkpFQ1RfVFlQRTozNzEzOCxTWU5DX0NPTkRJVElPTjozNzEzOSxTWU5DX1NUQVRVUzozNzE0MCxTWU5DX0ZMQUdTOjM3MTQxLFNZTkNfRkVOQ0U6MzcxNDIsU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEU6MzcxNDMsVU5TSUdOQUxFRDozNzE0NCxTSUdOQUxFRDozNzE0NSxBTFJFQURZX1NJR05BTEVEOjM3MTQ2LFRJTUVPVVRfRVhQSVJFRDozNzE0NyxDT05ESVRJT05fU0FUSVNGSUVEOjM3MTQ4LFdBSVRfRkFJTEVEOjM3MTQ5LFNZTkNfRkxVU0hfQ09NTUFORFNfQklUOjEsVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SOjM1MDcwLEFOWV9TQU1QTEVTX1BBU1NFRDozNTg4NyxBTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOjM2MjAyLFNBTVBMRVJfQklORElORzozNTA5NyxSR0IxMF9BMlVJOjM2OTc1LElOVF8yXzEwXzEwXzEwX1JFVjozNjI1NSxUUkFOU0ZPUk1fRkVFREJBQ0s6MzYzODYsVFJBTlNGT1JNX0ZFRURCQUNLX1BBVVNFRDozNjM4NyxUUkFOU0ZPUk1fRkVFREJBQ0tfQUNUSVZFOjM2Mzg4LFRSQU5TRk9STV9GRUVEQkFDS19CSU5ESU5HOjM2Mzg5LENPTVBSRVNTRURfUjExX0VBQzozNzQ4OCxDT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDOjM3NDg5LENPTVBSRVNTRURfUkcxMV9FQUM6Mzc0OTAsQ09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUM6Mzc0OTEsQ09NUFJFU1NFRF9SR0I4X0VUQzI6Mzc0OTIsQ09NUFJFU1NFRF9TUkdCOF9FVEMyOjM3NDkzLENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6Mzc0OTQsQ09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6Mzc0OTUsQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQzozNzQ5NixDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzozNzQ5NyxURVhUVVJFX0lNTVVUQUJMRV9GT1JNQVQ6MzcxNjcsTUFYX0VMRU1FTlRfSU5ERVg6MzYyMDMsVEVYVFVSRV9JTU1VVEFCTEVfTEVWRUxTOjMzNTAzLE1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDozNDA0N307T2JqZWN0LmZyZWV6ZShSdyk7TmU9Und9KTt2YXIgSGUsbmUsQ3Q9WCgoKT0+e2ZlKCk7b2MoKTtIZT17QllURTpOZS5CWVRFLFVOU0lHTkVEX0JZVEU6TmUuVU5TSUdORURfQllURSxTSE9SVDpOZS5TSE9SVCxVTlNJR05FRF9TSE9SVDpOZS5VTlNJR05FRF9TSE9SVCxJTlQ6TmUuSU5ULFVOU0lHTkVEX0lOVDpOZS5VTlNJR05FRF9JTlQsRkxPQVQ6TmUuRkxPQVQsRE9VQkxFOk5lLkRPVUJMRX07SGUuZ2V0U2l6ZUluQnl0ZXM9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgSGUuQllURTpyZXR1cm4gSW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2UgSGUuVU5TSUdORURfQllURTpyZXR1cm4gVWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIEhlLlNIT1JUOnJldHVybiBJbnQxNkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2UgSGUuVU5TSUdORURfU0hPUlQ6cmV0dXJuIFVpbnQxNkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2UgSGUuSU5UOnJldHVybiBJbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2UgSGUuVU5TSUdORURfSU5UOnJldHVybiBVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIEhlLkZMT0FUOnJldHVybiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBIZS5ET1VCTEU6cmV0dXJuIEZsb2F0NjRBcnJheS5CWVRFU19QRVJfRUxFTUVOVH19O0hlLmZyb21UeXBlZEFycmF5PWZ1bmN0aW9uKG4pe2lmKG4gaW5zdGFuY2VvZiBJbnQ4QXJyYXkpcmV0dXJuIEhlLkJZVEU7aWYobiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIEhlLlVOU0lHTkVEX0JZVEU7aWYobiBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIEhlLlNIT1JUO2lmKG4gaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gSGUuVU5TSUdORURfU0hPUlQ7aWYobiBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuIEhlLklOVDtpZihuIGluc3RhbmNlb2YgVWludDMyQXJyYXkpcmV0dXJuIEhlLlVOU0lHTkVEX0lOVDtpZihuIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiBIZS5GTE9BVDtpZihuIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KXJldHVybiBIZS5ET1VCTEV9O0hlLnZhbGlkYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBnKG4pJiYobj09PUhlLkJZVEV8fG49PT1IZS5VTlNJR05FRF9CWVRFfHxuPT09SGUuU0hPUlR8fG49PT1IZS5VTlNJR05FRF9TSE9SVHx8bj09PUhlLklOVHx8bj09PUhlLlVOU0lHTkVEX0lOVHx8bj09PUhlLkZMT0FUfHxuPT09SGUuRE9VQkxFKX07SGUuY3JlYXRlVHlwZWRBcnJheT1mdW5jdGlvbihuLGUpe3N3aXRjaChuKXtjYXNlIEhlLkJZVEU6cmV0dXJuIG5ldyBJbnQ4QXJyYXkoZSk7Y2FzZSBIZS5VTlNJR05FRF9CWVRFOnJldHVybiBuZXcgVWludDhBcnJheShlKTtjYXNlIEhlLlNIT1JUOnJldHVybiBuZXcgSW50MTZBcnJheShlKTtjYXNlIEhlLlVOU0lHTkVEX1NIT1JUOnJldHVybiBuZXcgVWludDE2QXJyYXkoZSk7Y2FzZSBIZS5JTlQ6cmV0dXJuIG5ldyBJbnQzMkFycmF5KGUpO2Nhc2UgSGUuVU5TSUdORURfSU5UOnJldHVybiBuZXcgVWludDMyQXJyYXkoZSk7Y2FzZSBIZS5GTE9BVDpyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShlKTtjYXNlIEhlLkRPVUJMRTpyZXR1cm4gbmV3IEZsb2F0NjRBcnJheShlKX19O0hlLmNyZWF0ZUFycmF5QnVmZmVyVmlldz1mdW5jdGlvbihuLGUsdCxvKXtzd2l0Y2godD10Pz8wLG89bz8/KGUuYnl0ZUxlbmd0aC10KS9IZS5nZXRTaXplSW5CeXRlcyhuKSxuKXtjYXNlIEhlLkJZVEU6cmV0dXJuIG5ldyBJbnQ4QXJyYXkoZSx0LG8pO2Nhc2UgSGUuVU5TSUdORURfQllURTpyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSx0LG8pO2Nhc2UgSGUuU0hPUlQ6cmV0dXJuIG5ldyBJbnQxNkFycmF5KGUsdCxvKTtjYXNlIEhlLlVOU0lHTkVEX1NIT1JUOnJldHVybiBuZXcgVWludDE2QXJyYXkoZSx0LG8pO2Nhc2UgSGUuSU5UOnJldHVybiBuZXcgSW50MzJBcnJheShlLHQsbyk7Y2FzZSBIZS5VTlNJR05FRF9JTlQ6cmV0dXJuIG5ldyBVaW50MzJBcnJheShlLHQsbyk7Y2FzZSBIZS5GTE9BVDpyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShlLHQsbyk7Y2FzZSBIZS5ET1VCTEU6cmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkoZSx0LG8pfX07SGUuZnJvbU5hbWU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UiQllURSI6cmV0dXJuIEhlLkJZVEU7Y2FzZSJVTlNJR05FRF9CWVRFIjpyZXR1cm4gSGUuVU5TSUdORURfQllURTtjYXNlIlNIT1JUIjpyZXR1cm4gSGUuU0hPUlQ7Y2FzZSJVTlNJR05FRF9TSE9SVCI6cmV0dXJuIEhlLlVOU0lHTkVEX1NIT1JUO2Nhc2UiSU5UIjpyZXR1cm4gSGUuSU5UO2Nhc2UiVU5TSUdORURfSU5UIjpyZXR1cm4gSGUuVU5TSUdORURfSU5UO2Nhc2UiRkxPQVQiOnJldHVybiBIZS5GTE9BVDtjYXNlIkRPVUJMRSI6cmV0dXJuIEhlLkRPVUJMRX19O0hlLmRlcXVhbnRpemU9ZnVuY3Rpb24obixlKXtzd2l0Y2goZSl7Y2FzZSBIZS5CWVRFOnJldHVybiBNYXRoLm1heChuLzEyNywtMSk7Y2FzZSBIZS5VTlNJR05FRF9CWVRFOnJldHVybiBuLzI1NTtjYXNlIEhlLlNIT1JUOnJldHVybiBNYXRoLm1heChuLzMyNzY3LC0xKTtjYXNlIEhlLlVOU0lHTkVEX1NIT1JUOnJldHVybiBuLzY1NTM1O2Nhc2UgSGUuSU5UOnJldHVybiBNYXRoLm1heChuLzIxNDc0ODM2NDcsLTEpO2Nhc2UgSGUuVU5TSUdORURfSU5UOnJldHVybiBuLzQyOTQ5NjcyOTV9fTtPYmplY3QuZnJlZXplKEhlKTtuZT1IZX0pO3ZhciB4dyxEcixKbD1YKCgpPT57eHc9e05PTkU6MCxUUklBTkdMRVM6MSxMSU5FUzoyLFBPTFlMSU5FUzozfTtPYmplY3QuZnJlZXplKHh3KTtEcj14d30pO3ZhciBZbyxxTixXTixPdyxTdyxYTixZTixKbyxQZj1YKCgpPT57dnQoKTtmZSgpO1lvPWNsYXNzIG57Y29uc3RydWN0b3IoZSx0LG8sYSl7dGhpc1swXT1lPz8wLHRoaXNbMV09bz8/MCx0aGlzWzJdPXQ/PzAsdGhpc1szXT1hPz8wfXN0YXRpYyBwYWNrKGUsdCxvKXtyZXR1cm4gbz1vPz8wLHRbbysrXT1lWzBdLHRbbysrXT1lWzFdLHRbbysrXT1lWzJdLHRbb109ZVszXSx0fXN0YXRpYyB1bnBhY2soZSx0LG8pe3JldHVybiB0PXQ/PzAsZyhvKXx8KG89bmV3IG4pLG9bMF09ZVt0KytdLG9bMV09ZVt0KytdLG9bMl09ZVt0KytdLG9bM109ZVt0XSxvfXN0YXRpYyBwYWNrQXJyYXkoZSx0KXtsZXQgbz1lLmxlbmd0aCxhPW8qNDtnKHQpPyFBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aCE9PWF8fHQubGVuZ3RoIT09YSYmKHQubGVuZ3RoPWEpOnQ9bmV3IEFycmF5KGEpO2ZvcihsZXQgcj0wO3I8bzsrK3Ipbi5wYWNrKGVbcl0sdCxyKjQpO3JldHVybiB0fXN0YXRpYyB1bnBhY2tBcnJheShlLHQpe2xldCBvPWUubGVuZ3RoO2codCk/dC5sZW5ndGg9by80OnQ9bmV3IEFycmF5KG8vNCk7Zm9yKGxldCBhPTA7YTxvO2ErPTQpe2xldCByPWEvNDt0W3JdPW4udW5wYWNrKGUsYSx0W3JdKX1yZXR1cm4gdH1zdGF0aWMgY2xvbmUoZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdCk6bmV3IG4oZVswXSxlWzJdLGVbMV0sZVszXSl9c3RhdGljIGZyb21Db2x1bW5NYWpvckFycmF5KGUsdCl7cmV0dXJuIG4uY2xvbmUoZSx0KX1zdGF0aWMgZnJvbVJvd01ham9yQXJyYXkoZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lWzBdLHRbMV09ZVsyXSx0WzJdPWVbMV0sdFszXT1lWzNdLHQpOm5ldyBuKGVbMF0sZVsxXSxlWzJdLGVbM10pfXN0YXRpYyBmcm9tU2NhbGUoZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lLngsdFsxXT0wLHRbMl09MCx0WzNdPWUueSx0KTpuZXcgbihlLngsMCwwLGUueSl9c3RhdGljIGZyb21Vbmlmb3JtU2NhbGUoZSx0KXtyZXR1cm4gZyh0KT8odFswXT1lLHRbMV09MCx0WzJdPTAsdFszXT1lLHQpOm5ldyBuKGUsMCwwLGUpfXN0YXRpYyBmcm9tUm90YXRpb24oZSx0KXtsZXQgbz1NYXRoLmNvcyhlKSxhPU1hdGguc2luKGUpO3JldHVybiBnKHQpPyh0WzBdPW8sdFsxXT1hLHRbMl09LWEsdFszXT1vLHQpOm5ldyBuKG8sLWEsYSxvKX1zdGF0aWMgdG9BcnJheShlLHQpe3JldHVybiBnKHQpPyh0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdCk6W2VbMF0sZVsxXSxlWzJdLGVbM11dfXN0YXRpYyBnZXRFbGVtZW50SW5kZXgoZSx0KXtyZXR1cm4gZSoyK3R9c3RhdGljIGdldENvbHVtbihlLHQsbyl7bGV0IGE9dCoyLHI9ZVthXSxpPWVbYSsxXTtyZXR1cm4gby54PXIsby55PWksb31zdGF0aWMgc2V0Q29sdW1uKGUsdCxvLGEpe2E9bi5jbG9uZShlLGEpO2xldCByPXQqMjtyZXR1cm4gYVtyXT1vLngsYVtyKzFdPW8ueSxhfXN0YXRpYyBnZXRSb3coZSx0LG8pe2xldCBhPWVbdF0scj1lW3QrMl07cmV0dXJuIG8ueD1hLG8ueT1yLG99c3RhdGljIHNldFJvdyhlLHQsbyxhKXtyZXR1cm4gYT1uLmNsb25lKGUsYSksYVt0XT1vLngsYVt0KzJdPW8ueSxhfXN0YXRpYyBzZXRTY2FsZShlLHQsbyl7bGV0IGE9bi5nZXRTY2FsZShlLHFOKSxyPXQueC9hLngsaT10LnkvYS55O3JldHVybiBvWzBdPWVbMF0qcixvWzFdPWVbMV0qcixvWzJdPWVbMl0qaSxvWzNdPWVbM10qaSxvfXN0YXRpYyBzZXRVbmlmb3JtU2NhbGUoZSx0LG8pe2xldCBhPW4uZ2V0U2NhbGUoZSxXTikscj10L2EueCxpPXQvYS55O3JldHVybiBvWzBdPWVbMF0qcixvWzFdPWVbMV0qcixvWzJdPWVbMl0qaSxvWzNdPWVbM10qaSxvfXN0YXRpYyBnZXRTY2FsZShlLHQpe3JldHVybiB0Lng9WS5tYWduaXR1ZGUoWS5mcm9tRWxlbWVudHMoZVswXSxlWzFdLE93KSksdC55PVkubWFnbml0dWRlKFkuZnJvbUVsZW1lbnRzKGVbMl0sZVszXSxPdykpLHR9c3RhdGljIGdldE1heGltdW1TY2FsZShlKXtyZXR1cm4gbi5nZXRTY2FsZShlLFN3KSxZLm1heGltdW1Db21wb25lbnQoU3cpfXN0YXRpYyBzZXRSb3RhdGlvbihlLHQsbyl7bGV0IGE9bi5nZXRTY2FsZShlLFhOKTtyZXR1cm4gb1swXT10WzBdKmEueCxvWzFdPXRbMV0qYS54LG9bMl09dFsyXSphLnksb1szXT10WzNdKmEueSxvfXN0YXRpYyBnZXRSb3RhdGlvbihlLHQpe2xldCBvPW4uZ2V0U2NhbGUoZSxZTik7cmV0dXJuIHRbMF09ZVswXS9vLngsdFsxXT1lWzFdL28ueCx0WzJdPWVbMl0vby55LHRbM109ZVszXS9vLnksdH1zdGF0aWMgbXVsdGlwbHkoZSx0LG8pe2xldCBhPWVbMF0qdFswXStlWzJdKnRbMV0scj1lWzBdKnRbMl0rZVsyXSp0WzNdLGk9ZVsxXSp0WzBdK2VbM10qdFsxXSxmPWVbMV0qdFsyXStlWzNdKnRbM107cmV0dXJuIG9bMF09YSxvWzFdPWksb1syXT1yLG9bM109ZixvfXN0YXRpYyBhZGQoZSx0LG8pe3JldHVybiBvWzBdPWVbMF0rdFswXSxvWzFdPWVbMV0rdFsxXSxvWzJdPWVbMl0rdFsyXSxvWzNdPWVbM10rdFszXSxvfXN0YXRpYyBzdWJ0cmFjdChlLHQsbyl7cmV0dXJuIG9bMF09ZVswXS10WzBdLG9bMV09ZVsxXS10WzFdLG9bMl09ZVsyXS10WzJdLG9bM109ZVszXS10WzNdLG99c3RhdGljIG11bHRpcGx5QnlWZWN0b3IoZSx0LG8pe2xldCBhPWVbMF0qdC54K2VbMl0qdC55LHI9ZVsxXSp0LngrZVszXSp0Lnk7cmV0dXJuIG8ueD1hLG8ueT1yLG99c3RhdGljIG11bHRpcGx5QnlTY2FsYXIoZSx0LG8pe3JldHVybiBvWzBdPWVbMF0qdCxvWzFdPWVbMV0qdCxvWzJdPWVbMl0qdCxvWzNdPWVbM10qdCxvfXN0YXRpYyBtdWx0aXBseUJ5U2NhbGUoZSx0LG8pe3JldHVybiBvWzBdPWVbMF0qdC54LG9bMV09ZVsxXSp0Lngsb1syXT1lWzJdKnQueSxvWzNdPWVbM10qdC55LG99c3RhdGljIG11bHRpcGx5QnlVbmlmb3JtU2NhbGUoZSx0LG8pe3JldHVybiBvWzBdPWVbMF0qdCxvWzFdPWVbMV0qdCxvWzJdPWVbMl0qdCxvWzNdPWVbM10qdCxvfXN0YXRpYyBuZWdhdGUoZSx0KXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdFszXT0tZVszXSx0fXN0YXRpYyB0cmFuc3Bvc2UoZSx0KXtsZXQgbz1lWzBdLGE9ZVsyXSxyPWVbMV0saT1lWzNdO3JldHVybiB0WzBdPW8sdFsxXT1hLHRbMl09cix0WzNdPWksdH1zdGF0aWMgYWJzKGUsdCl7cmV0dXJuIHRbMF09TWF0aC5hYnMoZVswXSksdFsxXT1NYXRoLmFicyhlWzFdKSx0WzJdPU1hdGguYWJzKGVbMl0pLHRbM109TWF0aC5hYnMoZVszXSksdH1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIGU9PT10fHxnKGUpJiZnKHQpJiZlWzBdPT09dFswXSYmZVsxXT09PXRbMV0mJmVbMl09PT10WzJdJiZlWzNdPT09dFszXX1zdGF0aWMgZXF1YWxzQXJyYXkoZSx0LG8pe3JldHVybiBlWzBdPT09dFtvXSYmZVsxXT09PXRbbysxXSYmZVsyXT09PXRbbysyXSYmZVszXT09PXRbbyszXX1zdGF0aWMgZXF1YWxzRXBzaWxvbihlLHQsbyl7cmV0dXJuIG89bz8/MCxlPT09dHx8ZyhlKSYmZyh0KSYmTWF0aC5hYnMoZVswXS10WzBdKTw9byYmTWF0aC5hYnMoZVsxXS10WzFdKTw9byYmTWF0aC5hYnMoZVsyXS10WzJdKTw9byYmTWF0aC5hYnMoZVszXS10WzNdKTw9b31nZXQgbGVuZ3RoKCl7cmV0dXJuIG4ucGFja2VkTGVuZ3RofWNsb25lKGUpe3JldHVybiBuLmNsb25lKHRoaXMsZSl9ZXF1YWxzKGUpe3JldHVybiBuLmVxdWFscyh0aGlzLGUpfWVxdWFsc0Vwc2lsb24oZSx0KXtyZXR1cm4gbi5lcXVhbHNFcHNpbG9uKHRoaXMsZSx0KX10b1N0cmluZygpe3JldHVybmAoJHt0aGlzWzBdfSwgJHt0aGlzWzJdfSkKKCR7dGhpc1sxXX0sICR7dGhpc1szXX0pYH19O1lvLnBhY2tlZExlbmd0aD00O1lvLmZyb21BcnJheT1Zby51bnBhY2s7WW8uSURFTlRJVFk9T2JqZWN0LmZyZWV6ZShuZXcgWW8oMSwwLDAsMSkpO1lvLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgWW8oMCwwLDAsMCkpO1lvLkNPTFVNTjBST1cwPTA7WW8uQ09MVU1OMFJPVzE9MTtZby5DT0xVTU4xUk9XMD0yO1lvLkNPTFVNTjFST1cxPTM7cU49bmV3IFksV049bmV3IFksT3c9bmV3IFksU3c9bmV3IFksWE49bmV3IFksWU49bmV3IFksSm89WW99KTt2YXIgdW8sRmUsdG49WCgoKT0+e29jKCk7dW89e1BPSU5UUzpOZS5QT0lOVFMsTElORVM6TmUuTElORVMsTElORV9MT09QOk5lLkxJTkVfTE9PUCxMSU5FX1NUUklQOk5lLkxJTkVfU1RSSVAsVFJJQU5HTEVTOk5lLlRSSUFOR0xFUyxUUklBTkdMRV9TVFJJUDpOZS5UUklBTkdMRV9TVFJJUCxUUklBTkdMRV9GQU46TmUuVFJJQU5HTEVfRkFOfTt1by5pc0xpbmVzPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09dW8uTElORVN8fG49PT11by5MSU5FX0xPT1B8fG49PT11by5MSU5FX1NUUklQfTt1by5pc1RyaWFuZ2xlcz1mdW5jdGlvbihuKXtyZXR1cm4gbj09PXVvLlRSSUFOR0xFU3x8bj09PXVvLlRSSUFOR0xFX1NUUklQfHxuPT09dW8uVFJJQU5HTEVfRkFOfTt1by52YWxpZGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbj09PXVvLlBPSU5UU3x8bj09PXVvLkxJTkVTfHxuPT09dW8uTElORV9MT09QfHxuPT09dW8uTElORV9TVFJJUHx8bj09PXVvLlRSSUFOR0xFU3x8bj09PXVvLlRSSUFOR0xFX1NUUklQfHxuPT09dW8uVFJJQU5HTEVfRkFOfTtPYmplY3QuZnJlZXplKHVvKTtGZT11b30pO2Z1bmN0aW9uIGFwKG4pe249bj8/T2UuRU1QVFlfT0JKRUNULHRoaXMuYXR0cmlidXRlcz1uLmF0dHJpYnV0ZXMsdGhpcy5pbmRpY2VzPW4uaW5kaWNlcyx0aGlzLnByaW1pdGl2ZVR5cGU9bi5wcmltaXRpdmVUeXBlPz9GZS5UUklBTkdMRVMsdGhpcy5ib3VuZGluZ1NwaGVyZT1uLmJvdW5kaW5nU3BoZXJlLHRoaXMuZ2VvbWV0cnlUeXBlPW4uZ2VvbWV0cnlUeXBlPz9Eci5OT05FLHRoaXMuYm91bmRpbmdTcGhlcmVDVj1uLmJvdW5kaW5nU3BoZXJlQ1YsdGhpcy5vZmZzZXRBdHRyaWJ1dGU9bi5vZmZzZXRBdHRyaWJ1dGV9dmFyIEpOLFpOLEN3LFFOLCROLGVJLHRJLG5JLG9JLGFJLFBlLFh0PVgoKCk9Pnt2dCgpO01lKCk7Z3QoKTtzdCgpO2ZlKCk7SmwoKTtQZigpO0luKCk7dW4oKTt0bigpO1dvKCk7aG4oKTtycigpO2FwLmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzPWZ1bmN0aW9uKG4pe2xldCBlPS0xO2ZvcihsZXQgdCBpbiBuLmF0dHJpYnV0ZXMpaWYobi5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHQpJiZnKG4uYXR0cmlidXRlc1t0XSkmJmcobi5hdHRyaWJ1dGVzW3RdLnZhbHVlcykpe2xldCBvPW4uYXR0cmlidXRlc1t0XTtlPW8udmFsdWVzLmxlbmd0aC9vLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGV9cmV0dXJuIGV9O0pOPW5ldyBhZSxaTj1uZXcgcyxDdz1uZXcgUSxRTj1bbmV3IGFlLG5ldyBhZSxuZXcgYWVdLCROPVtuZXcgWSxuZXcgWSxuZXcgWV0sZUk9W25ldyBZLG5ldyBZLG5ldyBZXSx0ST1uZXcgcyxuST1uZXcgWWUsb0k9bmV3IFEsYUk9bmV3IEpvO2FwLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPWZ1bmN0aW9uKG4sZSx0LG8pe2xldCBhLHI9eGUuY2VudGVyKG8sSk4pLGk9YWUudG9DYXJ0ZXNpYW4ocix0LFpOKSxmPW9vLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKGksdCxDdyksZD1RLmludmVyc2UoZixDdyksYz0kTix1PVFOO3VbMF0ubG9uZ2l0dWRlPW8ud2VzdCx1WzBdLmxhdGl0dWRlPW8uc291dGgsdVsxXS5sb25naXR1ZGU9by53ZXN0LHVbMV0ubGF0aXR1ZGU9by5ub3J0aCx1WzJdLmxvbmdpdHVkZT1vLmVhc3QsdVsyXS5sYXRpdHVkZT1vLnNvdXRoO2xldCBsPXRJO2ZvcihhPTA7YTwzO2ErKylhZS50b0NhcnRlc2lhbih1W2FdLHQsbCksbD1RLm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKGQsbCxsKSxjW2FdLng9bC54LGNbYV0ueT1sLnk7bGV0IG09WWUuZnJvbUF4aXNBbmdsZShzLlVOSVRfWiwtZSxuSSksaD1aLmZyb21RdWF0ZXJuaW9uKG0sb0kpLGI9bi5sZW5ndGgscD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksVD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksXz1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKGE9MDthPGI7YSsrKWw9US5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihkLG5bYV0sbCksbD1aLm11bHRpcGx5QnlWZWN0b3IoaCxsLGwpLHA9TWF0aC5taW4ocCxsLngpLHk9TWF0aC5taW4oeSxsLnkpLFQ9TWF0aC5tYXgoVCxsLngpLF89TWF0aC5tYXgoXyxsLnkpO2xldCB3PUpvLmZyb21Sb3RhdGlvbihlLGFJKSxFPWVJO0VbMF0ueD1wLEVbMF0ueT15LEVbMV0ueD1wLEVbMV0ueT1fLEVbMl0ueD1ULEVbMl0ueT15O2xldCBSPWNbMF0sUz1jWzJdLngtUi54LEM9Y1sxXS55LVIueTtmb3IoYT0wO2E8MzthKyspe2xldCBBPUVbYV07Sm8ubXVsdGlwbHlCeVZlY3Rvcih3LEEsQSksQS54PShBLngtUi54KS9TLEEueT0oQS55LVIueSkvQ31sZXQgST1FWzBdLE09RVsxXSxQPUVbMl0sRj1uZXcgQXJyYXkoNik7cmV0dXJuIFkucGFjayhJLEYpLFkucGFjayhNLEYsMiksWS5wYWNrKFAsRiw0KSxGfTtQZT1hcH0pO2Z1bmN0aW9uIHJJKG4pe249bj8/T2UuRU1QVFlfT0JKRUNULHRoaXMuY29tcG9uZW50RGF0YXR5cGU9bi5jb21wb25lbnREYXRhdHlwZSx0aGlzLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU9bi5jb21wb25lbnRzUGVyQXR0cmlidXRlLHRoaXMubm9ybWFsaXplPW4ubm9ybWFsaXplPz8hMSx0aGlzLnZhbHVlcz1uLnZhbHVlc312YXIgaWUsWXQ9WCgoKT0+e3N0KCk7aWU9ckl9KTtmdW5jdGlvbiBpSShuKXtuPW4/P09lLkVNUFRZX09CSkVDVCx0aGlzLnBvc2l0aW9uPW4ucG9zaXRpb24sdGhpcy5ub3JtYWw9bi5ub3JtYWwsdGhpcy5zdD1uLnN0LHRoaXMuYml0YW5nZW50PW4uYml0YW5nZW50LHRoaXMudGFuZ2VudD1uLnRhbmdlbnQsdGhpcy5jb2xvcj1uLmNvbG9yfXZhciBRZSxybj1YKCgpPT57c3QoKTtRZT1pSX0pO3ZhciBVdCxNdyxOdz1YKCgpPT57dnQoKTtNZSgpO2JhKCk7UGYoKTtJbigpO3VuKCk7VXQ9e1NDQUxBUjoiU0NBTEFSIixWRUMyOiJWRUMyIixWRUMzOiJWRUMzIixWRUM0OiJWRUM0IixNQVQyOiJNQVQyIixNQVQzOiJNQVQzIixNQVQ0OiJNQVQ0In07VXQuZ2V0TWF0aFR5cGU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgVXQuU0NBTEFSOnJldHVybiBOdW1iZXI7Y2FzZSBVdC5WRUMyOnJldHVybiBZO2Nhc2UgVXQuVkVDMzpyZXR1cm4gcztjYXNlIFV0LlZFQzQ6cmV0dXJuIHJ0O2Nhc2UgVXQuTUFUMjpyZXR1cm4gSm87Y2FzZSBVdC5NQVQzOnJldHVybiBaO2Nhc2UgVXQuTUFUNDpyZXR1cm4gUX19O1V0LmdldE51bWJlck9mQ29tcG9uZW50cz1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSBVdC5TQ0FMQVI6cmV0dXJuIDE7Y2FzZSBVdC5WRUMyOnJldHVybiAyO2Nhc2UgVXQuVkVDMzpyZXR1cm4gMztjYXNlIFV0LlZFQzQ6Y2FzZSBVdC5NQVQyOnJldHVybiA0O2Nhc2UgVXQuTUFUMzpyZXR1cm4gOTtjYXNlIFV0Lk1BVDQ6cmV0dXJuIDE2fX07VXQuZ2V0QXR0cmlidXRlTG9jYXRpb25Db3VudD1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSBVdC5TQ0FMQVI6Y2FzZSBVdC5WRUMyOmNhc2UgVXQuVkVDMzpjYXNlIFV0LlZFQzQ6cmV0dXJuIDE7Y2FzZSBVdC5NQVQyOnJldHVybiAyO2Nhc2UgVXQuTUFUMzpyZXR1cm4gMztjYXNlIFV0Lk1BVDQ6cmV0dXJuIDR9fTtVdC5nZXRHbHNsVHlwZT1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSBVdC5TQ0FMQVI6cmV0dXJuImZsb2F0IjtjYXNlIFV0LlZFQzI6cmV0dXJuInZlYzIiO2Nhc2UgVXQuVkVDMzpyZXR1cm4idmVjMyI7Y2FzZSBVdC5WRUM0OnJldHVybiJ2ZWM0IjtjYXNlIFV0Lk1BVDI6cmV0dXJuIm1hdDIiO2Nhc2UgVXQuTUFUMzpyZXR1cm4ibWF0MyI7Y2FzZSBVdC5NQVQ0OnJldHVybiJtYXQ0In19O09iamVjdC5mcmVlemUoVXQpO013PVV0fSk7ZnVuY3Rpb24gWmwobil7cmV0dXJuIFB3WzBdPW4sUHdbMF19ZnVuY3Rpb24gcnAobil7cmV0dXJuIG4+PjFeLShuJjEpfXZhciBJdyxjSSxpcCxKdCxrZixQdyxjcCxqdCxCcj1YKCgpPT57dnQoKTtNZSgpO0N0KCk7ZmUoKTtqZSgpO053KCk7SXc9MS8yNTYsY0k9NjU1MzYsaXA9MjU2LEp0PXt9O0p0Lm9jdEVuY29kZUluUmFuZ2U9ZnVuY3Rpb24obixlLHQpe2lmKHQueD1uLngvKE1hdGguYWJzKG4ueCkrTWF0aC5hYnMobi55KStNYXRoLmFicyhuLnopKSx0Lnk9bi55LyhNYXRoLmFicyhuLngpK01hdGguYWJzKG4ueSkrTWF0aC5hYnMobi56KSksbi56PDApe2xldCBvPXQueCxhPXQueTt0Lng9KDEtTWF0aC5hYnMoYSkpKmsuc2lnbk5vdFplcm8obyksdC55PSgxLU1hdGguYWJzKG8pKSprLnNpZ25Ob3RaZXJvKGEpfXJldHVybiB0Lng9ay50b1NOb3JtKHQueCxlKSx0Lnk9ay50b1NOb3JtKHQueSxlKSx0fTtKdC5vY3RFbmNvZGU9ZnVuY3Rpb24obixlKXtyZXR1cm4gSnQub2N0RW5jb2RlSW5SYW5nZShuLDI1NSxlKX07a2Y9bmV3IFksUHc9bmV3IFVpbnQ4QXJyYXkoMSk7SnQub2N0RW5jb2RlVG9DYXJ0ZXNpYW40PWZ1bmN0aW9uKG4sZSl7cmV0dXJuIEp0Lm9jdEVuY29kZUluUmFuZ2Uobiw2NTUzNSxrZiksZS54PVpsKGtmLngqSXcpLGUueT1abChrZi54KSxlLno9Wmwoa2YueSpJdyksZS53PVpsKGtmLnkpLGV9O0p0Lm9jdERlY29kZUluUmFuZ2U9ZnVuY3Rpb24obixlLHQsbyl7aWYoby54PWsuZnJvbVNOb3JtKG4sdCksby55PWsuZnJvbVNOb3JtKGUsdCksby56PTEtKE1hdGguYWJzKG8ueCkrTWF0aC5hYnMoby55KSksby56PDApe2xldCBhPW8ueDtvLng9KDEtTWF0aC5hYnMoby55KSkqay5zaWduTm90WmVybyhhKSxvLnk9KDEtTWF0aC5hYnMoYSkpKmsuc2lnbk5vdFplcm8oby55KX1yZXR1cm4gcy5ub3JtYWxpemUobyxvKX07SnQub2N0RGVjb2RlPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gSnQub2N0RGVjb2RlSW5SYW5nZShuLGUsMjU1LHQpfTtKdC5vY3REZWNvZGVGcm9tQ2FydGVzaWFuND1mdW5jdGlvbihuLGUpe2xldCB0PW4ueCxvPW4ueSxhPW4ueixyPW4udyxpPXQqaXArbyxmPWEqaXArcjtyZXR1cm4gSnQub2N0RGVjb2RlSW5SYW5nZShpLGYsNjU1MzUsZSl9O0p0Lm9jdFBhY2tGbG9hdD1mdW5jdGlvbihuKXtyZXR1cm4gMjU2Km4ueCtuLnl9O2NwPW5ldyBZO0p0Lm9jdEVuY29kZUZsb2F0PWZ1bmN0aW9uKG4pe3JldHVybiBKdC5vY3RFbmNvZGUobixjcCksSnQub2N0UGFja0Zsb2F0KGNwKX07SnQub2N0RGVjb2RlRmxvYXQ9ZnVuY3Rpb24obixlKXtsZXQgdD1uLzI1NixvPU1hdGguZmxvb3IodCksYT0odC1vKSoyNTY7cmV0dXJuIEp0Lm9jdERlY29kZShvLGEsZSl9O0p0Lm9jdFBhY2s9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9SnQub2N0RW5jb2RlRmxvYXQobikscj1KdC5vY3RFbmNvZGVGbG9hdChlKSxpPUp0Lm9jdEVuY29kZSh0LGNwKTtyZXR1cm4gby54PTY1NTM2KmkueCthLG8ueT02NTUzNippLnkrcixvfTtKdC5vY3RVbnBhY2s9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9bi54LzY1NTM2LHI9TWF0aC5mbG9vcihhKSxpPShhLXIpKjY1NTM2O2E9bi55LzY1NTM2O2xldCBmPU1hdGguZmxvb3IoYSksZD0oYS1mKSo2NTUzNjtKdC5vY3REZWNvZGVGbG9hdChpLGUpLEp0Lm9jdERlY29kZUZsb2F0KGQsdCksSnQub2N0RGVjb2RlKHIsZixvKX07SnQuY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24obil7bGV0IGU9bi54KjQwOTV8MCx0PW4ueSo0MDk1fDA7cmV0dXJuIDQwOTYqZSt0fTtKdC5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9bi80MDk2LG89TWF0aC5mbG9vcih0KTtyZXR1cm4gZS54PW8vNDA5NSxlLnk9KG4tbyo0MDk2KS80MDk1LGV9O0p0LnppZ1phZ0RlbHRhRGVjb2RlPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1uLmxlbmd0aCxhPTAscj0wLGk9MDtmb3IobGV0IGY9MDtmPG87KytmKWErPXJwKG5bZl0pLHIrPXJwKGVbZl0pLG5bZl09YSxlW2ZdPXIsZyh0KSYmKGkrPXJwKHRbZl0pLHRbZl09aSl9O0p0LmRlcXVhbnRpemU9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9TXcuZ2V0TnVtYmVyT2ZDb21wb25lbnRzKHQpLHI7c3dpdGNoKGUpe2Nhc2UgbmUuQllURTpyPTEyNzticmVhaztjYXNlIG5lLlVOU0lHTkVEX0JZVEU6cj0yNTU7YnJlYWs7Y2FzZSBuZS5TSE9SVDpyPTMyNzY3O2JyZWFrO2Nhc2UgbmUuVU5TSUdORURfU0hPUlQ6cj02NTUzNTticmVhaztjYXNlIG5lLklOVDpyPTIxNDc0ODM2NDc7YnJlYWs7Y2FzZSBuZS5VTlNJR05FRF9JTlQ6cj00Mjk0OTY3Mjk1O2JyZWFrfWxldCBpPW5ldyBGbG9hdDMyQXJyYXkobyphKTtmb3IobGV0IGY9MDtmPG87ZisrKWZvcihsZXQgZD0wO2Q8YTtkKyspe2xldCBjPWYqYStkO2lbY109TWF0aC5tYXgobltjXS9yLC0xKX1yZXR1cm4gaX07SnQuZW5jb2RlUkdCOD1mdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZChrLmNsYW1wKG4ucmVkKjI1NSwwLDI1NSkpKmNJK01hdGgucm91bmQoay5jbGFtcChuLmdyZWVuKjI1NSwwLDI1NSkpKmlwK01hdGgucm91bmQoay5jbGFtcChuLmJsdWUqMjU1LDAsMjU1KSl9O0p0LmRlY29kZVJHQjg9ZnVuY3Rpb24obixlKXtyZXR1cm4gbj1NYXRoLmZsb29yKG4pLGUucmVkPShuPj4xNiYyNTUpLzI1NSxlLmdyZWVuPShuPj44JjI1NSkvMjU1LGUuYmx1ZT0obiYyNTUpLzI1NSxlfTtKdC5kZWNvZGVSR0I1NjU9ZnVuY3Rpb24obixlKXtsZXQgdD1uLmxlbmd0aDtnKGUpfHwoZT1uZXcgRmxvYXQzMkFycmF5KHQqMykpO2xldCBvPTMxLGE9NjMscj0xLzMxLGk9MS82Mztmb3IobGV0IGY9MDtmPHQ7ZisrKXtsZXQgZD1uW2ZdLGM9ZD4+MTEsdT1kPj41JmEsbD1kJm8sbT0zKmY7ZVttXT1jKnIsZVttKzFdPXUqaSxlW20rMl09bCpyfXJldHVybiBlfTtqdD1KdH0pO2Z1bmN0aW9uIHNJKG4sZSx0LG8sYSl7ZyhhKXx8KGE9bmV3IHMpO2xldCByLGksZixkLGMsdSxsLG07aWYoZyhlLnopKXtpZihzLmVxdWFsc0Vwc2lsb24obixlLGsuRVBTSUxPTjE0KSlyZXR1cm4gcy5jbG9uZShzLlVOSVRfWCxhKTtpZihzLmVxdWFsc0Vwc2lsb24obix0LGsuRVBTSUxPTjE0KSlyZXR1cm4gcy5jbG9uZShzLlVOSVRfWSxhKTtpZihzLmVxdWFsc0Vwc2lsb24obixvLGsuRVBTSUxPTjE0KSlyZXR1cm4gcy5jbG9uZShzLlVOSVRfWixhKTtyPXMuc3VidHJhY3QodCxlLGt3KSxpPXMuc3VidHJhY3QobyxlLHZ3KSxmPXMuc3VidHJhY3QobixlLEZ3KSxkPXMuZG90KHIsciksYz1zLmRvdChyLGkpLHU9cy5kb3QocixmKSxsPXMuZG90KGksaSksbT1zLmRvdChpLGYpfWVsc2V7aWYoWS5lcXVhbHNFcHNpbG9uKG4sZSxrLkVQU0lMT04xNCkpcmV0dXJuIHMuY2xvbmUocy5VTklUX1gsYSk7aWYoWS5lcXVhbHNFcHNpbG9uKG4sdCxrLkVQU0lMT04xNCkpcmV0dXJuIHMuY2xvbmUocy5VTklUX1ksYSk7aWYoWS5lcXVhbHNFcHNpbG9uKG4sbyxrLkVQU0lMT04xNCkpcmV0dXJuIHMuY2xvbmUocy5VTklUX1osYSk7cj1ZLnN1YnRyYWN0KHQsZSxrdyksaT1ZLnN1YnRyYWN0KG8sZSx2dyksZj1ZLnN1YnRyYWN0KG4sZSxGdyksZD1ZLmRvdChyLHIpLGM9WS5kb3QocixpKSx1PVkuZG90KHIsZiksbD1ZLmRvdChpLGkpLG09WS5kb3QoaSxmKX1hLnk9bCp1LWMqbSxhLno9ZCptLWMqdTtsZXQgaD1kKmwtYypjO2lmKGghPT0wKXJldHVybiBhLnkvPWgsYS56Lz1oLGEueD0xLWEueS1hLnosYX12YXIga3csdncsRncsRHcsQnc9WCgoKT0+e3Z0KCk7TWUoKTtmZSgpO2plKCk7a3c9bmV3IHMsdnc9bmV3IHMsRnc9bmV3IHM7RHc9c0l9KTtmdW5jdGlvbiBpcigpe3RoaXMuaGlnaD1zLmNsb25lKHMuWkVSTyksdGhpcy5sb3c9cy5jbG9uZShzLlpFUk8pfXZhciBVcixzcCxhYyxmcD1YKCgpPT57TWUoKTtmZSgpO2lyLmVuY29kZT1mdW5jdGlvbihuLGUpe2coZSl8fChlPXtoaWdoOjAsbG93OjB9KTtsZXQgdDtyZXR1cm4gbj49MD8odD1NYXRoLmZsb29yKG4vNjU1MzYpKjY1NTM2LGUuaGlnaD10LGUubG93PW4tdCk6KHQ9TWF0aC5mbG9vcigtbi82NTUzNikqNjU1MzYsZS5oaWdoPS10LGUubG93PW4rdCksZX07VXI9e2hpZ2g6MCxsb3c6MH07aXIuZnJvbUNhcnRlc2lhbj1mdW5jdGlvbihuLGUpe2coZSl8fChlPW5ldyBpcik7bGV0IHQ9ZS5oaWdoLG89ZS5sb3c7cmV0dXJuIGlyLmVuY29kZShuLngsVXIpLHQueD1Vci5oaWdoLG8ueD1Vci5sb3csaXIuZW5jb2RlKG4ueSxVciksdC55PVVyLmhpZ2gsby55PVVyLmxvdyxpci5lbmNvZGUobi56LFVyKSx0Lno9VXIuaGlnaCxvLno9VXIubG93LGV9O3NwPW5ldyBpcjtpci53cml0ZUVsZW1lbnRzPWZ1bmN0aW9uKG4sZSx0KXtpci5mcm9tQ2FydGVzaWFuKG4sc3ApO2xldCBvPXNwLmhpZ2gsYT1zcC5sb3c7ZVt0XT1vLngsZVt0KzFdPW8ueSxlW3QrMl09by56LGVbdCszXT1hLngsZVt0KzRdPWEueSxlW3QrNV09YS56fTthYz1pcn0pO3ZhciBabixJZSxadD1YKCgpPT57ZmUoKTtqZSgpO29jKCk7Wm49e1VOU0lHTkVEX0JZVEU6TmUuVU5TSUdORURfQllURSxVTlNJR05FRF9TSE9SVDpOZS5VTlNJR05FRF9TSE9SVCxVTlNJR05FRF9JTlQ6TmUuVU5TSUdORURfSU5UfTtabi5nZXRTaXplSW5CeXRlcz1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSBabi5VTlNJR05FRF9CWVRFOnJldHVybiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2UgWm4uVU5TSUdORURfU0hPUlQ6cmV0dXJuIFVpbnQxNkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2UgWm4uVU5TSUdORURfSU5UOnJldHVybiBVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVH19O1puLmZyb21TaXplSW5CeXRlcz1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSAyOnJldHVybiBabi5VTlNJR05FRF9TSE9SVDtjYXNlIDQ6cmV0dXJuIFpuLlVOU0lHTkVEX0lOVDtjYXNlIDE6cmV0dXJuIFpuLlVOU0lHTkVEX0JZVEV9fTtabi52YWxpZGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gZyhuKSYmKG49PT1abi5VTlNJR05FRF9CWVRFfHxuPT09Wm4uVU5TSUdORURfU0hPUlR8fG49PT1abi5VTlNJR05FRF9JTlQpfTtabi5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKG4sZSl7cmV0dXJuIG4+PWsuU0lYVFlfRk9VUl9LSUxPQllURVM/bmV3IFVpbnQzMkFycmF5KGUpOm5ldyBVaW50MTZBcnJheShlKX07Wm4uY3JlYXRlVHlwZWRBcnJheUZyb21BcnJheUJ1ZmZlcj1mdW5jdGlvbihuLGUsdCxvKXtyZXR1cm4gbj49ay5TSVhUWV9GT1VSX0tJTE9CWVRFUz9uZXcgVWludDMyQXJyYXkoZSx0LG8pOm5ldyBVaW50MTZBcnJheShlLHQsbyl9O1puLmZyb21UeXBlZEFycmF5PWZ1bmN0aW9uKG4pe2lmKG4gaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBabi5VTlNJR05FRF9CWVRFO2lmKG4gaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gWm4uVU5TSUdORURfU0hPUlQ7aWYobiBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KXJldHVybiBabi5VTlNJR05FRF9JTlR9O09iamVjdC5mcmVlemUoWm4pO0llPVpufSk7ZnVuY3Rpb24gVXcobixlLHQpe2xldCBvPW4rZTtyZXR1cm4gay5zaWduKG4pIT09ay5zaWduKGUpJiZNYXRoLmFicyhvL01hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKGUpKSk8dD8wOm99dmFyIGRwLFRhLFFsPVgoKCk9PntqZSgpO2RwPXt9O2RwLmNvbXB1dGVEaXNjcmltaW5hbnQ9ZnVuY3Rpb24obixlLHQpe3JldHVybiBlKmUtNCpuKnR9O2RwLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24obixlLHQpe2xldCBvO2lmKG49PT0wKXJldHVybiBlPT09MD9bXTpbLXQvZV07aWYoZT09PTApe2lmKHQ9PT0wKXJldHVyblswLDBdO2xldCBkPU1hdGguYWJzKHQpLGM9TWF0aC5hYnMobik7aWYoZDxjJiZkL2M8ay5FUFNJTE9OMTQpcmV0dXJuWzAsMF07aWYoZD5jJiZjL2Q8ay5FUFNJTE9OMTQpcmV0dXJuW107aWYobz0tdC9uLG88MClyZXR1cm5bXTtsZXQgdT1NYXRoLnNxcnQobyk7cmV0dXJuWy11LHVdfWVsc2UgaWYodD09PTApcmV0dXJuIG89LWUvbixvPDA/W28sMF06WzAsb107bGV0IGE9ZSplLHI9NCpuKnQsaT1VdyhhLC1yLGsuRVBTSUxPTjE0KTtpZihpPDApcmV0dXJuW107bGV0IGY9LS41KlV3KGUsay5zaWduKGUpKk1hdGguc3FydChpKSxrLkVQU0lMT04xNCk7cmV0dXJuIGU+MD9bZi9uLHQvZl06W3QvZixmL25dfTtUYT1kcH0pO2Z1bmN0aW9uIHVwKG4sZSx0LG8pe2xldCBhPW4scj1lLzMsaT10LzMsZj1vLGQ9YSppLGM9cipmLHU9cipyLGw9aSppLG09YSppLXUsaD1hKmYtcippLGI9cipmLWwscD00Km0qYi1oKmgseSxUO2lmKHA8MCl7bGV0IE8sSixyZTt1KmM+PWQqbD8oTz1hLEo9bSxyZT0tMipyKm0rYSpoKTooTz1mLEo9YixyZT0tZipoKzIqaSpiKTtsZXQgb2U9LShyZTwwPy0xOjEpKk1hdGguYWJzKE8pKk1hdGguc3FydCgtcCk7VD0tcmUrb2U7bGV0IGNlPVQvMixtZT1jZTwwPy1NYXRoLnBvdygtY2UsMS8zKTpNYXRoLnBvdyhjZSwxLzMpLGRlPVQ9PT1vZT8tbWU6LUovbWU7cmV0dXJuIHk9Sjw9MD9tZStkZTotcmUvKG1lKm1lK2RlKmRlK0opLHUqYz49ZCpsP1soeS1yKS9hXTpbLWYvKHkraSldfWxldCBfPW0sdz0tMipyKm0rYSpoLEU9YixSPS1mKmgrMippKmIsUz1NYXRoLnNxcnQocCksQz1NYXRoLnNxcnQoMykvMixJPU1hdGguYWJzKE1hdGguYXRhbjIoYSpTLC13KS8zKTt5PTIqTWF0aC5zcXJ0KC1fKTtsZXQgTT1NYXRoLmNvcyhJKTtUPXkqTTtsZXQgUD15KigtTS8yLUMqTWF0aC5zaW4oSSkpLEY9VCtQPjIqcj9ULXI6UC1yLEE9YSx4PUYvQTtJPU1hdGguYWJzKE1hdGguYXRhbjIoZipTLC1SKS8zKSx5PTIqTWF0aC5zcXJ0KC1FKSxNPU1hdGguY29zKEkpLFQ9eSpNLFA9eSooLU0vMi1DKk1hdGguc2luKEkpKTtsZXQgTj0tZix2PVQrUDwyKmk/VCtpOlAraSxVPU4vdixMPUEqdixEPS1GKnYtQSpOLEc9RipOLFY9KGkqRC1yKkcpLygtcipEK2kqTCk7cmV0dXJuIHg8PVY/eDw9VT9WPD1VP1t4LFYsVV06W3gsVSxWXTpbVSx4LFZdOng8PVU/W1YseCxVXTpWPD1VP1tWLFUseF06W1UsVix4XX12YXIgbHAsJGwsanc9WCgoKT0+e1FsKCk7bHA9e307bHAuY29tcHV0ZURpc2NyaW1pbmFudD1mdW5jdGlvbihuLGUsdCxvKXtsZXQgYT1uKm4scj1lKmUsaT10KnQsZj1vKm87cmV0dXJuIDE4Km4qZSp0Km8rcippLTI3KmEqZi00KihuKmkqdCtyKmUqbyl9O2xwLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGEscjtpZihuPT09MClyZXR1cm4gVGEuY29tcHV0ZVJlYWxSb290cyhlLHQsbyk7aWYoZT09PTApe2lmKHQ9PT0wKXtpZihvPT09MClyZXR1cm5bMCwwLDBdO3I9LW8vbjtsZXQgaT1yPDA/LU1hdGgucG93KC1yLDEvMyk6TWF0aC5wb3cociwxLzMpO3JldHVybltpLGksaV19ZWxzZSBpZihvPT09MClyZXR1cm4gYT1UYS5jb21wdXRlUmVhbFJvb3RzKG4sMCx0KSxhLkxlbmd0aD09PTA/WzBdOlthWzBdLDAsYVsxXV07cmV0dXJuIHVwKG4sMCx0LG8pfWVsc2V7aWYodD09PTApcmV0dXJuIG89PT0wPyhyPS1lL24scjwwP1tyLDAsMF06WzAsMCxyXSk6dXAobixlLDAsbyk7aWYobz09PTApcmV0dXJuIGE9VGEuY29tcHV0ZVJlYWxSb290cyhuLGUsdCksYS5sZW5ndGg9PT0wP1swXTphWzFdPD0wP1thWzBdLGFbMV0sMF06YVswXT49MD9bMCxhWzBdLGFbMV1dOlthWzBdLDAsYVsxXV19cmV0dXJuIHVwKG4sZSx0LG8pfTskbD1scH0pO2Z1bmN0aW9uIGphKG4sZSx0LG8pe2xldCBhPW4qbixyPWUtMyphLzgsaT10LWUqbi8yK2Eqbi84LGY9by10Km4vNCtlKmEvMTYtMyphKmEvMjU2LGQ9JGwuY29tcHV0ZVJlYWxSb290cygxLDIqcixyKnItNCpmLC1pKmkpO2lmKGQubGVuZ3RoPjApe2xldCBjPS1uLzQsdT1kW2QubGVuZ3RoLTFdO2lmKE1hdGguYWJzKHUpPGsuRVBTSUxPTjE0KXtsZXQgbD1UYS5jb21wdXRlUmVhbFJvb3RzKDEscixmKTtpZihsLmxlbmd0aD09PTIpe2xldCBtPWxbMF0saD1sWzFdLGI7aWYobT49MCYmaD49MCl7bGV0IHA9TWF0aC5zcXJ0KG0pLHk9TWF0aC5zcXJ0KGgpO3JldHVybltjLXksYy1wLGMrcCxjK3ldfWVsc2V7aWYobT49MCYmaDwwKXJldHVybiBiPU1hdGguc3FydChtKSxbYy1iLGMrYl07aWYobTwwJiZoPj0wKXJldHVybiBiPU1hdGguc3FydChoKSxbYy1iLGMrYl19fXJldHVybltdfWVsc2UgaWYodT4wKXtsZXQgbD1NYXRoLnNxcnQodSksbT0ocit1LWkvbCkvMixoPShyK3UraS9sKS8yLGI9VGEuY29tcHV0ZVJlYWxSb290cygxLGwsbSkscD1UYS5jb21wdXRlUmVhbFJvb3RzKDEsLWwsaCk7cmV0dXJuIGIubGVuZ3RoIT09MD8oYlswXSs9YyxiWzFdKz1jLHAubGVuZ3RoIT09MD8ocFswXSs9YyxwWzFdKz1jLGJbMV08PXBbMF0/W2JbMF0sYlsxXSxwWzBdLHBbMV1dOnBbMV08PWJbMF0/W3BbMF0scFsxXSxiWzBdLGJbMV1dOmJbMF0+PXBbMF0mJmJbMV08PXBbMV0/W3BbMF0sYlswXSxiWzFdLHBbMV1dOnBbMF0+PWJbMF0mJnBbMV08PWJbMV0/W2JbMF0scFswXSxwWzFdLGJbMV1dOmJbMF0+cFswXSYmYlswXTxwWzFdP1twWzBdLGJbMF0scFsxXSxiWzFdXTpbYlswXSxwWzBdLGJbMV0scFsxXV0pOmIpOnAubGVuZ3RoIT09MD8ocFswXSs9YyxwWzFdKz1jLHApOltdfX1yZXR1cm5bXX1mdW5jdGlvbiB2ZihuLGUsdCxvKXtsZXQgYT10KnQscj1lKmUsaT1uKm4sZj0tMiplLGQ9dCpuK3ItNCpvLGM9aSpvLXQqZSpuK2EsdT0kbC5jb21wdXRlUmVhbFJvb3RzKDEsZixkLGMpO2lmKHUubGVuZ3RoPjApe2xldCBsPXVbMF0sbT1lLWwsaD1tKm0sYj1uLzIscD1tLzIseT1oLTQqbyxUPWgrNCpNYXRoLmFicyhvKSxfPWktNCpsLHc9aSs0Kk1hdGguYWJzKGwpLEUsUjtpZihsPDB8fHkqdzxfKlQpe2xldCBBPU1hdGguc3FydChfKTtFPUEvMixSPUE9PT0wPzA6KG4qcC10KS9BfWVsc2V7bGV0IEE9TWF0aC5zcXJ0KHkpO0U9QT09PTA/MDoobipwLXQpL0EsUj1BLzJ9bGV0IFMsQztiPT09MCYmRT09PTA/KFM9MCxDPTApOmsuc2lnbihiKT09PWsuc2lnbihFKT8oUz1iK0UsQz1sL1MpOihDPWItRSxTPWwvQyk7bGV0IEksTTtwPT09MCYmUj09PTA/KEk9MCxNPTApOmsuc2lnbihwKT09PWsuc2lnbihSKT8oST1wK1IsTT1vL0kpOihNPXAtUixJPW8vTSk7bGV0IFA9VGEuY29tcHV0ZVJlYWxSb290cygxLFMsSSksRj1UYS5jb21wdXRlUmVhbFJvb3RzKDEsQyxNKTtpZihQLmxlbmd0aCE9PTApcmV0dXJuIEYubGVuZ3RoIT09MD9QWzFdPD1GWzBdP1tQWzBdLFBbMV0sRlswXSxGWzFdXTpGWzFdPD1QWzBdP1tGWzBdLEZbMV0sUFswXSxQWzFdXTpQWzBdPj1GWzBdJiZQWzFdPD1GWzFdP1tGWzBdLFBbMF0sUFsxXSxGWzFdXTpGWzBdPj1QWzBdJiZGWzFdPD1QWzFdP1tQWzBdLEZbMF0sRlsxXSxQWzFdXTpQWzBdPkZbMF0mJlBbMF08RlsxXT9bRlswXSxQWzBdLEZbMV0sUFsxXV06W1BbMF0sRlswXSxQWzFdLEZbMV1dOlA7aWYoRi5sZW5ndGghPT0wKXJldHVybiBGfXJldHVybltdfXZhciBocCxMdyx6dz1YKCgpPT57ancoKTtqZSgpO1FsKCk7aHA9e307aHAuY29tcHV0ZURpc2NyaW1pbmFudD1mdW5jdGlvbihuLGUsdCxvLGEpe2xldCByPW4qbixpPXIqbixmPWUqZSxkPWYqZSxjPXQqdCx1PWMqdCxsPW8qbyxtPWwqbyxoPWEqYSxiPWgqYTtyZXR1cm4gZipjKmwtNCpkKm0tNCpuKnUqbCsxOCpuKmUqdCptLTI3KnIqbCpsKzI1NippKmIrYSooMTgqZCp0Km8tNCpmKnUrMTYqbipjKmMtODAqbiplKmMqby02Km4qZipsKzE0NCpyKnQqbCkraCooMTQ0Km4qZip0LTI3KmYqZi0xMjgqcipjLTE5MipyKmUqbyl9O2hwLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24obixlLHQsbyxhKXtpZihNYXRoLmFicyhuKTxrLkVQU0lMT04xNSlyZXR1cm4gJGwuY29tcHV0ZVJlYWxSb290cyhlLHQsbyxhKTtsZXQgcj1lL24saT10L24sZj1vL24sZD1hL24sYz1yPDA/MTowO3N3aXRjaChjKz1pPDA/YysxOmMsYys9ZjwwP2MrMTpjLGMrPWQ8MD9jKzE6YyxjKXtjYXNlIDA6cmV0dXJuIGphKHIsaSxmLGQpO2Nhc2UgMTpyZXR1cm4gdmYocixpLGYsZCk7Y2FzZSAyOnJldHVybiB2ZihyLGksZixkKTtjYXNlIDM6cmV0dXJuIGphKHIsaSxmLGQpO2Nhc2UgNDpyZXR1cm4gamEocixpLGYsZCk7Y2FzZSA1OnJldHVybiB2ZihyLGksZixkKTtjYXNlIDY6cmV0dXJuIGphKHIsaSxmLGQpO2Nhc2UgNzpyZXR1cm4gamEocixpLGYsZCk7Y2FzZSA4OnJldHVybiB2ZihyLGksZixkKTtjYXNlIDk6cmV0dXJuIGphKHIsaSxmLGQpO2Nhc2UgMTA6cmV0dXJuIGphKHIsaSxmLGQpO2Nhc2UgMTE6cmV0dXJuIHZmKHIsaSxmLGQpO2Nhc2UgMTI6cmV0dXJuIGphKHIsaSxmLGQpO2Nhc2UgMTM6cmV0dXJuIGphKHIsaSxmLGQpO2Nhc2UgMTQ6cmV0dXJuIGphKHIsaSxmLGQpO2Nhc2UgMTU6cmV0dXJuIGphKHIsaSxmLGQpO2RlZmF1bHQ6cmV0dXJufX07THc9aHB9KTt2YXIgbXAsY3IsRmY9WCgoKT0+e01lKCk7ZmUoKTttcD1jbGFzcyBue2NvbnN0cnVjdG9yKGUsdCl7dD1zLmNsb25lKHQ/P3MuWkVSTykscy5lcXVhbHModCxzLlpFUk8pfHxzLm5vcm1hbGl6ZSh0LHQpLHRoaXMub3JpZ2luPXMuY2xvbmUoZT8/cy5aRVJPKSx0aGlzLmRpcmVjdGlvbj10fXN0YXRpYyBjbG9uZShlLHQpe2lmKGcoZSkpcmV0dXJuIGcodCk/KHQub3JpZ2luPXMuY2xvbmUoZS5vcmlnaW4pLHQuZGlyZWN0aW9uPXMuY2xvbmUoZS5kaXJlY3Rpb24pLHQpOm5ldyBuKGUub3JpZ2luLGUuZGlyZWN0aW9uKX1zdGF0aWMgZ2V0UG9pbnQoZSx0LG8pe3JldHVybiBnKG8pfHwobz1uZXcgcyksbz1zLm11bHRpcGx5QnlTY2FsYXIoZS5kaXJlY3Rpb24sdCxvKSxzLmFkZChlLm9yaWdpbixvLG8pfX0sY3I9bXB9KTtmdW5jdGlvbiBsSShuLGUsdCxvKXtsZXQgYT1lKmUtNCpuKnQ7aWYoYTwwKXJldHVybjtpZihhPjApe2xldCBpPTEvKDIqbiksZj1NYXRoLnNxcnQoYSksZD0oLWUrZikqaSxjPSgtZS1mKSppO3JldHVybiBkPGM/KG8ucm9vdDA9ZCxvLnJvb3QxPWMpOihvLnJvb3QwPWMsby5yb290MT1kKSxvfWxldCByPS1lLygyKm4pO2lmKHIhPT0wKXJldHVybiBvLnJvb3QwPW8ucm9vdDE9cixvfWZ1bmN0aW9uIEp3KG4sZSx0KXtnKHQpfHwodD1uZXcgX28pO2xldCBvPW4ub3JpZ2luLGE9bi5kaXJlY3Rpb24scj1lLmNlbnRlcixpPWUucmFkaXVzKmUucmFkaXVzLGY9cy5zdWJ0cmFjdChvLHIsWXcpLGQ9cy5kb3QoYSxhKSxjPTIqcy5kb3QoYSxmKSx1PXMubWFnbml0dWRlU3F1YXJlZChmKS1pLGw9bEkoZCxjLHUsaEkpO2lmKGcobCkpcmV0dXJuIHQuc3RhcnQ9bC5yb290MCx0LnN0b3A9bC5yb290MSx0fWZ1bmN0aW9uIGJwKG4sZSx0LG8sYSl7aWYoYS5zdGFydD0odC1uKS9lLGEuc3RvcD0oby1uKS9lLGEuc3RvcDxhLnN0YXJ0KXtsZXQgcj1hLnN0b3A7YS5zdG9wPWEuc3RhcnQsYS5zdGFydD1yfXJldHVybiBhfWZ1bmN0aW9uIHJjKG4sZSx0KXtsZXQgbz1uK2U7cmV0dXJuIGsuc2lnbihuKSE9PWsuc2lnbihlKSYmTWF0aC5hYnMoby9NYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyhlKSkpPHQ/MDpvfXZhciBjbixmSSxkSSxZdyxHdyxWdyx1SSxoSSxtSSxiSSxwSSxnSSxfSSx5SSxwcCxIdyxLdyxlaCxBSSx3SSxUSSxFSSxSSSx4SSxxdyxXdyxYdyxPSSxTSSxDSSxRbixiaT1YKCgpPT57TWUoKTtndCgpO2ZlKCk7Z2YoKTtqZSgpO0luKCk7UWwoKTt6dygpO0ZmKCk7Y249e307Y24ucmF5UGxhbmU9ZnVuY3Rpb24obixlLHQpe2codCl8fCh0PW5ldyBzKTtsZXQgbz1uLm9yaWdpbixhPW4uZGlyZWN0aW9uLHI9ZS5ub3JtYWwsaT1zLmRvdChyLGEpO2lmKE1hdGguYWJzKGkpPGsuRVBTSUxPTjE1KXJldHVybjtsZXQgZj0oLWUuZGlzdGFuY2Utcy5kb3QocixvKSkvaTtpZighKGY8MCkpcmV0dXJuIHQ9cy5tdWx0aXBseUJ5U2NhbGFyKGEsZix0KSxzLmFkZChvLHQsdCl9O2ZJPW5ldyBzLGRJPW5ldyBzLFl3PW5ldyBzLEd3PW5ldyBzLFZ3PW5ldyBzO2NuLnJheVRyaWFuZ2xlUGFyYW1ldHJpYz1mdW5jdGlvbihuLGUsdCxvLGEpe2E9YT8/ITE7bGV0IHI9bi5vcmlnaW4saT1uLmRpcmVjdGlvbixmPXMuc3VidHJhY3QodCxlLGZJKSxkPXMuc3VidHJhY3QobyxlLGRJKSxjPXMuY3Jvc3MoaSxkLFl3KSx1PXMuZG90KGYsYyksbCxtLGgsYixwO2lmKGEpe2lmKHU8ay5FUFNJTE9ONnx8KGw9cy5zdWJ0cmFjdChyLGUsR3cpLGg9cy5kb3QobCxjKSxoPDB8fGg+dSl8fChtPXMuY3Jvc3MobCxmLFZ3KSxiPXMuZG90KGksbSksYjwwfHxoK2I+dSkpcmV0dXJuO3A9cy5kb3QoZCxtKS91fWVsc2V7aWYoTWF0aC5hYnModSk8ay5FUFNJTE9ONilyZXR1cm47bGV0IHk9MS91O2lmKGw9cy5zdWJ0cmFjdChyLGUsR3cpLGg9cy5kb3QobCxjKSp5LGg8MHx8aD4xfHwobT1zLmNyb3NzKGwsZixWdyksYj1zLmRvdChpLG0pKnksYjwwfHxoK2I+MSkpcmV0dXJuO3A9cy5kb3QoZCxtKSp5fXJldHVybiBwfTtjbi5yYXlUcmlhbmdsZT1mdW5jdGlvbihuLGUsdCxvLGEscil7bGV0IGk9Y24ucmF5VHJpYW5nbGVQYXJhbWV0cmljKG4sZSx0LG8sYSk7aWYoISghZyhpKXx8aTwwKSlyZXR1cm4gZyhyKXx8KHI9bmV3IHMpLHMubXVsdGlwbHlCeVNjYWxhcihuLmRpcmVjdGlvbixpLHIpLHMuYWRkKG4ub3JpZ2luLHIscil9O3VJPW5ldyBjcjtjbi5saW5lU2VnbWVudFRyaWFuZ2xlPWZ1bmN0aW9uKG4sZSx0LG8sYSxyLGkpe2xldCBmPXVJO3MuY2xvbmUobixmLm9yaWdpbikscy5zdWJ0cmFjdChlLG4sZi5kaXJlY3Rpb24pLHMubm9ybWFsaXplKGYuZGlyZWN0aW9uLGYuZGlyZWN0aW9uKTtsZXQgZD1jbi5yYXlUcmlhbmdsZVBhcmFtZXRyaWMoZix0LG8sYSxyKTtpZighKCFnKGQpfHxkPDB8fGQ+cy5kaXN0YW5jZShuLGUpKSlyZXR1cm4gZyhpKXx8KGk9bmV3IHMpLHMubXVsdGlwbHlCeVNjYWxhcihmLmRpcmVjdGlvbixkLGkpLHMuYWRkKGYub3JpZ2luLGksaSl9O2hJPXtyb290MDowLHJvb3QxOjB9O2NuLnJheVNwaGVyZT1mdW5jdGlvbihuLGUsdCl7aWYodD1KdyhuLGUsdCksISghZyh0KXx8dC5zdG9wPDApKXJldHVybiB0LnN0YXJ0PU1hdGgubWF4KHQuc3RhcnQsMCksdH07bUk9bmV3IGNyO2NuLmxpbmVTZWdtZW50U3BoZXJlPWZ1bmN0aW9uKG4sZSx0LG8pe2xldCBhPW1JO3MuY2xvbmUobixhLm9yaWdpbik7bGV0IHI9cy5zdWJ0cmFjdChlLG4sYS5kaXJlY3Rpb24pLGk9cy5tYWduaXR1ZGUocik7aWYocy5ub3JtYWxpemUocixyKSxvPUp3KGEsdCxvKSwhKCFnKG8pfHxvLnN0b3A8MHx8by5zdGFydD5pKSlyZXR1cm4gby5zdGFydD1NYXRoLm1heChvLnN0YXJ0LDApLG8uc3RvcD1NYXRoLm1pbihvLnN0b3AsaSksb307Ykk9bmV3IHMscEk9bmV3IHM7Y24ucmF5RWxsaXBzb2lkPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9ZS5vbmVPdmVyUmFkaWksbz1zLm11bHRpcGx5Q29tcG9uZW50cyh0LG4ub3JpZ2luLGJJKSxhPXMubXVsdGlwbHlDb21wb25lbnRzKHQsbi5kaXJlY3Rpb24scEkpLHI9cy5tYWduaXR1ZGVTcXVhcmVkKG8pLGk9cy5kb3QobyxhKSxmLGQsYyx1LGw7aWYocj4xKXtpZihpPj0wKXJldHVybjtsZXQgbT1pKmk7aWYoZj1yLTEsZD1zLm1hZ25pdHVkZVNxdWFyZWQoYSksYz1kKmYsbTxjKXJldHVybjtpZihtPmMpe3U9aSppLWMsbD0taStNYXRoLnNxcnQodSk7bGV0IGI9bC9kLHA9Zi9sO3JldHVybiBiPHA/bmV3IF9vKGIscCk6e3N0YXJ0OnAsc3RvcDpifX1sZXQgaD1NYXRoLnNxcnQoZi9kKTtyZXR1cm4gbmV3IF9vKGgsaCl9ZWxzZSBpZihyPDEpcmV0dXJuIGY9ci0xLGQ9cy5tYWduaXR1ZGVTcXVhcmVkKGEpLGM9ZCpmLHU9aSppLWMsbD0taStNYXRoLnNxcnQodSksbmV3IF9vKDAsbC9kKTtpZihpPDApcmV0dXJuIGQ9cy5tYWduaXR1ZGVTcXVhcmVkKGEpLG5ldyBfbygwLC1pL2QpfTtnST1uZXcgX28sX0k9bmV3IF9vLHlJPW5ldyBfbztjbi5yYXlBeGlzQWxpZ25lZEJvdW5kaW5nQm94PWZ1bmN0aW9uKG4sZSx0KXtnKHQpfHwodD1uZXcgX28pO2xldCBvPWJwKG4ub3JpZ2luLngsbi5kaXJlY3Rpb24ueCxlLm1pbmltdW0ueCxlLm1heGltdW0ueCxnSSksYT1icChuLm9yaWdpbi55LG4uZGlyZWN0aW9uLnksZS5taW5pbXVtLnksZS5tYXhpbXVtLnksX0kpLHI9YnAobi5vcmlnaW4ueixuLmRpcmVjdGlvbi56LGUubWluaW11bS56LGUubWF4aW11bS56LHlJKTtpZih0LnN0YXJ0PW8uc3RhcnQ+YS5zdGFydD9vLnN0YXJ0OmEuc3RhcnQsdC5zdG9wPW8uc3RvcDxhLnN0b3A/by5zdG9wOmEuc3RvcCwhKG8uc3RhcnQ+YS5zdG9wfHxhLnN0YXJ0Pm8uc3RvcCkmJiEodC5zdGFydD5yLnN0b3B8fHIuc3RhcnQ+dC5zdG9wKSlyZXR1cm4gci5zdGFydD50LnN0YXJ0JiYodC5zdGFydD1yLnN0YXJ0KSxyLnN0b3A8dC5zdG9wJiYodC5zdG9wPXIuc3RvcCksdH07Y24ucXVhZHJhdGljVmVjdG9yRXhwcmVzc2lvbj1mdW5jdGlvbihuLGUsdCxvLGEpe2xldCByPW8qbyxpPWEqYSxmPShuW1ouQ09MVU1OMVJPVzFdLW5bWi5DT0xVTU4yUk9XMl0pKmksZD1hKihvKnJjKG5bWi5DT0xVTU4xUk9XMF0sbltaLkNPTFVNTjBST1cxXSxrLkVQU0lMT04xNSkrZS55KSxjPW5bWi5DT0xVTU4wUk9XMF0qcituW1ouQ09MVU1OMlJPVzJdKmkrbyplLngrdCx1PWkqcmMobltaLkNPTFVNTjJST1cxXSxuW1ouQ09MVU1OMVJPVzJdLGsuRVBTSUxPTjE1KSxsPWEqKG8qcmMobltaLkNPTFVNTjJST1cwXSxuW1ouQ09MVU1OMFJPVzJdKStlLnopLG0saD1bXTtpZihsPT09MCYmdT09PTApe2lmKG09VGEuY29tcHV0ZVJlYWxSb290cyhmLGQsYyksbS5sZW5ndGg9PT0wKXJldHVybiBoO2xldCBJPW1bMF0sTT1NYXRoLnNxcnQoTWF0aC5tYXgoMS1JKkksMCkpO2lmKGgucHVzaChuZXcgcyhvLGEqSSxhKi1NKSksaC5wdXNoKG5ldyBzKG8sYSpJLGEqTSkpLG0ubGVuZ3RoPT09Mil7bGV0IFA9bVsxXSxGPU1hdGguc3FydChNYXRoLm1heCgxLVAqUCwwKSk7aC5wdXNoKG5ldyBzKG8sYSpQLGEqLUYpKSxoLnB1c2gobmV3IHMobyxhKlAsYSpGKSl9cmV0dXJuIGh9bGV0IGI9bCpsLHA9dSp1LHk9ZipmLFQ9bCp1LF89eStwLHc9MiooZCpmK1QpLEU9MipjKmYrZCpkLXArYixSPTIqKGMqZC1UKSxTPWMqYy1iO2lmKF89PT0wJiZ3PT09MCYmRT09PTAmJlI9PT0wKXJldHVybiBoO209THcuY29tcHV0ZVJlYWxSb290cyhfLHcsRSxSLFMpO2xldCBDPW0ubGVuZ3RoO2lmKEM9PT0wKXJldHVybiBoO2ZvcihsZXQgST0wO0k8QzsrK0kpe2xldCBNPW1bSV0sUD1NKk0sRj1NYXRoLm1heCgxLVAsMCksQT1NYXRoLnNxcnQoRikseDtrLnNpZ24oZik9PT1rLnNpZ24oYyk/eD1yYyhmKlArYyxkKk0say5FUFNJTE9OMTIpOmsuc2lnbihjKT09PWsuc2lnbihkKk0pP3g9cmMoZipQLGQqTStjLGsuRVBTSUxPTjEyKTp4PXJjKGYqUCtkKk0sYyxrLkVQU0lMT04xMik7bGV0IE49cmModSpNLGwsay5FUFNJTE9OMTUpLHY9eCpOO3Y8MD9oLnB1c2gobmV3IHMobyxhKk0sYSpBKSk6dj4wP2gucHVzaChuZXcgcyhvLGEqTSxhKi1BKSk6QSE9PTA/KGgucHVzaChuZXcgcyhvLGEqTSxhKi1BKSksaC5wdXNoKG5ldyBzKG8sYSpNLGEqQSkpLCsrSSk6aC5wdXNoKG5ldyBzKG8sYSpNLGEqQSkpfXJldHVybiBofTtwcD1uZXcgcyxIdz1uZXcgcyxLdz1uZXcgcyxlaD1uZXcgcyxBST1uZXcgcyx3ST1uZXcgWixUST1uZXcgWixFST1uZXcgWixSST1uZXcgWix4ST1uZXcgWixxdz1uZXcgWixXdz1uZXcgWixYdz1uZXcgcyxPST1uZXcgcyxTST1uZXcgYWU7Y24uZ3JhemluZ0FsdGl0dWRlTG9jYXRpb249ZnVuY3Rpb24obixlKXtsZXQgdD1uLm9yaWdpbixvPW4uZGlyZWN0aW9uO2lmKCFzLmVxdWFscyh0LHMuWkVSTykpe2xldCBTPWUuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHQscHApO2lmKHMuZG90KG8sUyk+PTApcmV0dXJuIHR9bGV0IGE9Zyh0aGlzLnJheUVsbGlwc29pZChuLGUpKSxyPWUudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKG8scHApLGk9cy5ub3JtYWxpemUocixyKSxmPXMubW9zdE9ydGhvZ29uYWxBeGlzKHIsZWgpLGQ9cy5ub3JtYWxpemUocy5jcm9zcyhmLGksSHcpLEh3KSxjPXMubm9ybWFsaXplKHMuY3Jvc3MoaSxkLEt3KSxLdyksdT13STt1WzBdPWkueCx1WzFdPWkueSx1WzJdPWkueix1WzNdPWQueCx1WzRdPWQueSx1WzVdPWQueix1WzZdPWMueCx1WzddPWMueSx1WzhdPWMuejtsZXQgbD1aLnRyYW5zcG9zZSh1LFRJKSxtPVouZnJvbVNjYWxlKGUucmFkaWksRUkpLGg9Wi5mcm9tU2NhbGUoZS5vbmVPdmVyUmFkaWksUkkpLGI9eEk7YlswXT0wLGJbMV09LW8ueixiWzJdPW8ueSxiWzNdPW8ueixiWzRdPTAsYls1XT0tby54LGJbNl09LW8ueSxiWzddPW8ueCxiWzhdPTA7bGV0IHA9Wi5tdWx0aXBseShaLm11bHRpcGx5KGwsaCxxdyksYixxdykseT1aLm11bHRpcGx5KFoubXVsdGlwbHkocCxtLFd3KSx1LFd3KSxUPVoubXVsdGlwbHlCeVZlY3RvcihwLHQsQUkpLF89Y24ucXVhZHJhdGljVmVjdG9yRXhwcmVzc2lvbih5LHMubmVnYXRlKFQscHApLDAsMCwxKSx3LEUsUj1fLmxlbmd0aDtpZihSPjApe2xldCBTPXMuY2xvbmUocy5aRVJPLE9JKSxDPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IobGV0IE09MDtNPFI7KytNKXt3PVoubXVsdGlwbHlCeVZlY3RvcihtLFoubXVsdGlwbHlCeVZlY3Rvcih1LF9bTV0sWHcpLFh3KTtsZXQgUD1zLm5vcm1hbGl6ZShzLnN1YnRyYWN0KHcsdCxlaCksZWgpLEY9cy5kb3QoUCxvKTtGPkMmJihDPUYsUz1zLmNsb25lKHcsUykpfWxldCBJPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoUyxTSSk7cmV0dXJuIEM9ay5jbGFtcChDLDAsMSksRT1zLm1hZ25pdHVkZShzLnN1YnRyYWN0KFMsdCxlaCkpKk1hdGguc3FydCgxLUMqQyksRT1hPy1FOkUsSS5oZWlnaHQ9RSxlLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEksbmV3IHMpfX07Q0k9bmV3IHM7Y24ubGluZVNlZ21lbnRQbGFuZT1mdW5jdGlvbihuLGUsdCxvKXtnKG8pfHwobz1uZXcgcyk7bGV0IGE9cy5zdWJ0cmFjdChlLG4sQ0kpLHI9dC5ub3JtYWwsaT1zLmRvdChyLGEpO2lmKE1hdGguYWJzKGkpPGsuRVBTSUxPTjYpcmV0dXJuO2xldCBmPXMuZG90KHIsbiksZD0tKHQuZGlzdGFuY2UrZikvaTtpZighKGQ8MHx8ZD4xKSlyZXR1cm4gcy5tdWx0aXBseUJ5U2NhbGFyKGEsZCxvKSxzLmFkZChuLG8sbyksb307Y24udHJpYW5nbGVQbGFuZUludGVyc2VjdGlvbj1mdW5jdGlvbihuLGUsdCxvKXtsZXQgYT1vLm5vcm1hbCxyPW8uZGlzdGFuY2UsaT1zLmRvdChhLG4pK3I8MCxmPXMuZG90KGEsZSkrcjwwLGQ9cy5kb3QoYSx0KStyPDAsYz0wO2MrPWk/MTowLGMrPWY/MTowLGMrPWQ/MTowO2xldCB1LGw7aWYoKGM9PT0xfHxjPT09MikmJih1PW5ldyBzLGw9bmV3IHMpLGM9PT0xKXtpZihpKXJldHVybiBjbi5saW5lU2VnbWVudFBsYW5lKG4sZSxvLHUpLGNuLmxpbmVTZWdtZW50UGxhbmUobix0LG8sbCkse3Bvc2l0aW9uczpbbixlLHQsdSxsXSxpbmRpY2VzOlswLDMsNCwxLDIsNCwxLDQsM119O2lmKGYpcmV0dXJuIGNuLmxpbmVTZWdtZW50UGxhbmUoZSx0LG8sdSksY24ubGluZVNlZ21lbnRQbGFuZShlLG4sbyxsKSx7cG9zaXRpb25zOltuLGUsdCx1LGxdLGluZGljZXM6WzEsMyw0LDIsMCw0LDIsNCwzXX07aWYoZClyZXR1cm4gY24ubGluZVNlZ21lbnRQbGFuZSh0LG4sbyx1KSxjbi5saW5lU2VnbWVudFBsYW5lKHQsZSxvLGwpLHtwb3NpdGlvbnM6W24sZSx0LHUsbF0saW5kaWNlczpbMiwzLDQsMCwxLDQsMCw0LDNdfX1lbHNlIGlmKGM9PT0yKWlmKGkpaWYoZil7aWYoIWQpcmV0dXJuIGNuLmxpbmVTZWdtZW50UGxhbmUobix0LG8sdSksY24ubGluZVNlZ21lbnRQbGFuZShlLHQsbyxsKSx7cG9zaXRpb25zOltuLGUsdCx1LGxdLGluZGljZXM6WzAsMSw0LDAsNCwzLDIsMyw0XX19ZWxzZSByZXR1cm4gY24ubGluZVNlZ21lbnRQbGFuZSh0LGUsbyx1KSxjbi5saW5lU2VnbWVudFBsYW5lKG4sZSxvLGwpLHtwb3NpdGlvbnM6W24sZSx0LHUsbF0saW5kaWNlczpbMiwwLDQsMiw0LDMsMSwzLDRdfTtlbHNlIHJldHVybiBjbi5saW5lU2VnbWVudFBsYW5lKGUsbixvLHUpLGNuLmxpbmVTZWdtZW50UGxhbmUodCxuLG8sbCkse3Bvc2l0aW9uczpbbixlLHQsdSxsXSxpbmRpY2VzOlsxLDIsNCwxLDQsMywwLDMsNF19fTtRbj1jbn0pO2Z1bmN0aW9uIGFvKG4sZSl7dGhpcy5ub3JtYWw9cy5jbG9uZShuKSx0aGlzLmRpc3RhbmNlPWV9dmFyIE1JLE5JLElJLFBJLGtJLG5uLHBpPVgoKCk9PntNZSgpO2JhKCk7ZmUoKTt1bigpO2FvLmZyb21Qb2ludE5vcm1hbD1mdW5jdGlvbihuLGUsdCl7bGV0IG89LXMuZG90KGUsbik7cmV0dXJuIGcodCk/KHMuY2xvbmUoZSx0Lm5vcm1hbCksdC5kaXN0YW5jZT1vLHQpOm5ldyBhbyhlLG8pfTtNST1uZXcgczthby5mcm9tQ2FydGVzaWFuND1mdW5jdGlvbihuLGUpe2xldCB0PXMuZnJvbUNhcnRlc2lhbjQobixNSSksbz1uLnc7cmV0dXJuIGcoZSk/KHMuY2xvbmUodCxlLm5vcm1hbCksZS5kaXN0YW5jZT1vLGUpOm5ldyBhbyh0LG8pfTthby5nZXRQb2ludERpc3RhbmNlPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIHMuZG90KG4ubm9ybWFsLGUpK24uZGlzdGFuY2V9O05JPW5ldyBzO2FvLnByb2plY3RQb2ludE9udG9QbGFuZT1mdW5jdGlvbihuLGUsdCl7Zyh0KXx8KHQ9bmV3IHMpO2xldCBvPWFvLmdldFBvaW50RGlzdGFuY2UobixlKSxhPXMubXVsdGlwbHlCeVNjYWxhcihuLm5vcm1hbCxvLE5JKTtyZXR1cm4gcy5zdWJ0cmFjdChlLGEsdCl9O0lJPW5ldyBRLFBJPW5ldyBydCxrST1uZXcgczthby50cmFuc2Zvcm09ZnVuY3Rpb24obixlLHQpe2xldCBvPW4ubm9ybWFsLGE9bi5kaXN0YW5jZSxyPVEuaW52ZXJzZVRyYW5zcG9zZShlLElJKSxpPXJ0LmZyb21FbGVtZW50cyhvLngsby55LG8ueixhLFBJKTtpPVEubXVsdGlwbHlCeVZlY3RvcihyLGksaSk7bGV0IGY9cy5mcm9tQ2FydGVzaWFuNChpLGtJKTtyZXR1cm4gaT1ydC5kaXZpZGVCeVNjYWxhcihpLHMubWFnbml0dWRlKGYpLGkpLGFvLmZyb21DYXJ0ZXNpYW40KGksdCl9O2FvLmNsb25lPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIGcoZSk/KHMuY2xvbmUobi5ub3JtYWwsZS5ub3JtYWwpLGUuZGlzdGFuY2U9bi5kaXN0YW5jZSxlKTpuZXcgYW8obi5ub3JtYWwsbi5kaXN0YW5jZSl9O2FvLmVxdWFscz1mdW5jdGlvbihuLGUpe3JldHVybiBuLmRpc3RhbmNlPT09ZS5kaXN0YW5jZSYmcy5lcXVhbHMobi5ub3JtYWwsZS5ub3JtYWwpfTthby5PUklHSU5fWFlfUExBTkU9T2JqZWN0LmZyZWV6ZShuZXcgYW8ocy5VTklUX1osMCkpO2FvLk9SSUdJTl9ZWl9QTEFORT1PYmplY3QuZnJlZXplKG5ldyBhbyhzLlVOSVRfWCwwKSk7YW8uT1JJR0lOX1pYX1BMQU5FPU9iamVjdC5mcmVlemUobmV3IGFvKHMuVU5JVF9ZLDApKTtubj1hb30pO3ZhciBncCxadyxRdz1YKCgpPT57c3QoKTtmZSgpO2dwPXt9O2dwLmNhbGN1bGF0ZUFDTVI9ZnVuY3Rpb24obil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5pbmRpY2VzLHQ9bi5tYXhpbXVtSW5kZXgsbz1uLmNhY2hlU2l6ZT8/MjQsYT1lLmxlbmd0aDtpZighZyh0KSl7dD0wO2xldCBmPTAsZD1lW2ZdO2Zvcig7ZjxhOylkPnQmJih0PWQpLCsrZixkPWVbZl19bGV0IHI9W107Zm9yKGxldCBmPTA7Zjx0KzE7ZisrKXJbZl09MDtsZXQgaT1vKzE7Zm9yKGxldCBmPTA7ZjxhOysrZilpLXJbZVtmXV0+byYmKHJbZVtmXV09aSwrK2kpO3JldHVybihpLW8rMSkvKGEvMyl9O2dwLnRpcHNpZnk9ZnVuY3Rpb24obil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5pbmRpY2VzLHQ9bi5tYXhpbXVtSW5kZXgsbz1uLmNhY2hlU2l6ZT8/MjQsYTtmdW5jdGlvbiByKEYsQSx4LE4pe2Zvcig7QS5sZW5ndGg+PTE7KXtsZXQgdj1BW0EubGVuZ3RoLTFdO2lmKEEuc3BsaWNlKEEubGVuZ3RoLTEsMSksRlt2XS5udW1MaXZlVHJpYW5nbGVzPjApcmV0dXJuIHZ9Zm9yKDthPE47KXtpZihGW2FdLm51bUxpdmVUcmlhbmdsZXM+MClyZXR1cm4rK2EsYS0xOysrYX1yZXR1cm4tMX1mdW5jdGlvbiBpKEYsQSx4LE4sdixVLEwpe2xldCBEPS0xLEcsVj0tMSxPPTA7Zm9yKDtPPHgubGVuZ3RoOyl7bGV0IEo9eFtPXTtOW0pdLm51bUxpdmVUcmlhbmdsZXMmJihHPTAsdi1OW0pdLnRpbWVTdGFtcCsyKk5bSl0ubnVtTGl2ZVRyaWFuZ2xlczw9QSYmKEc9di1OW0pdLnRpbWVTdGFtcCksKEc+Vnx8Vj09PS0xKSYmKFY9RyxEPUopKSwrK099cmV0dXJuIEQ9PT0tMT9yKE4sVSxGLEwpOkR9bGV0IGY9ZS5sZW5ndGgsZD0wLGM9MCx1PWVbY10sbD1mO2lmKGcodCkpZD10KzE7ZWxzZXtmb3IoO2M8bDspdT5kJiYoZD11KSwrK2MsdT1lW2NdO2lmKGQ9PT0tMSlyZXR1cm4gMDsrK2R9bGV0IG09W10saDtmb3IoaD0wO2g8ZDtoKyspbVtoXT17bnVtTGl2ZVRyaWFuZ2xlczowLHRpbWVTdGFtcDowLHZlcnRleFRyaWFuZ2xlczpbXX07Yz0wO2xldCBiPTA7Zm9yKDtjPGw7KW1bZVtjXV0udmVydGV4VHJpYW5nbGVzLnB1c2goYiksKyttW2VbY11dLm51bUxpdmVUcmlhbmdsZXMsbVtlW2MrMV1dLnZlcnRleFRyaWFuZ2xlcy5wdXNoKGIpLCsrbVtlW2MrMV1dLm51bUxpdmVUcmlhbmdsZXMsbVtlW2MrMl1dLnZlcnRleFRyaWFuZ2xlcy5wdXNoKGIpLCsrbVtlW2MrMl1dLm51bUxpdmVUcmlhbmdsZXMsKytiLGMrPTM7bGV0IHA9MCx5PW8rMTthPTE7bGV0IFQsXz1bXSx3LEUsUj0wLFM9W10sQz1mLzMsST1bXTtmb3IoaD0wO2g8QztoKyspSVtoXT0hMTtsZXQgTSxQO2Zvcig7cCE9PS0xOyl7VD1bXSxFPW1bcF0sUD1FLnZlcnRleFRyaWFuZ2xlcy5sZW5ndGg7Zm9yKGxldCBGPTA7RjxQOysrRilpZihiPUUudmVydGV4VHJpYW5nbGVzW0ZdLCFJW2JdKXtJW2JdPSEwLGM9YitiK2I7Zm9yKGxldCBBPTA7QTwzOysrQSlNPWVbY10sVC5wdXNoKE0pLF8ucHVzaChNKSxTW1JdPU0sKytSLHc9bVtNXSwtLXcubnVtTGl2ZVRyaWFuZ2xlcyx5LXcudGltZVN0YW1wPm8mJih3LnRpbWVTdGFtcD15LCsreSksKytjfXA9aShlLG8sVCxtLHksXyxkKX1yZXR1cm4gU307Wnc9Z3B9KTtmdW5jdGlvbiBjaChuLGUsdCxvLGEpe25bZSsrXT10LG5bZSsrXT1vLG5bZSsrXT1vLG5bZSsrXT1hLG5bZSsrXT1hLG5bZV09dH1mdW5jdGlvbiB2SShuKXtsZXQgZT1uLmxlbmd0aCx0PWUvMyo2LG89SWUuY3JlYXRlVHlwZWRBcnJheShlLHQpLGE9MDtmb3IobGV0IHI9MDtyPGU7cis9MyxhKz02KWNoKG8sYSxuW3JdLG5bcisxXSxuW3IrMl0pO3JldHVybiBvfWZ1bmN0aW9uIEZJKG4pe2xldCBlPW4ubGVuZ3RoO2lmKGU+PTMpe2xldCB0PShlLTIpKjYsbz1JZS5jcmVhdGVUeXBlZEFycmF5KGUsdCk7Y2gobywwLG5bMF0sblsxXSxuWzJdKTtsZXQgYT02O2ZvcihsZXQgcj0zO3I8ZTsrK3IsYSs9NiljaChvLGEsbltyLTFdLG5bcl0sbltyLTJdKTtyZXR1cm4gb31yZXR1cm4gbmV3IFVpbnQxNkFycmF5fWZ1bmN0aW9uIERJKG4pe2lmKG4ubGVuZ3RoPjApe2xldCBlPW4ubGVuZ3RoLTEsdD0oZS0xKSo2LG89SWUuY3JlYXRlVHlwZWRBcnJheShlLHQpLGE9blswXSxyPTA7Zm9yKGxldCBpPTE7aTxlOysraSxyKz02KWNoKG8scixhLG5baV0sbltpKzFdKTtyZXR1cm4gb31yZXR1cm4gbmV3IFVpbnQxNkFycmF5fWZ1bmN0aW9uICR3KG4pe2xldCBlPXt9O2ZvcihsZXQgdCBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkodCkmJmcoblt0XSkmJmcoblt0XS52YWx1ZXMpKXtsZXQgbz1uW3RdO2VbdF09bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpvLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6by5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTpvLm5vcm1hbGl6ZSx2YWx1ZXM6W119KX1yZXR1cm4gZX1mdW5jdGlvbiBCSShuLGUsdCl7Zm9yKGxldCBvIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShvKSYmZyhlW29dKSYmZyhlW29dLnZhbHVlcykpe2xldCBhPWVbb107Zm9yKGxldCByPTA7cjxhLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU7KytyKW5bb10udmFsdWVzLnB1c2goYS52YWx1ZXNbdCphLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUrcl0pfX1mdW5jdGlvbiB5cChuLGUpe2lmKGcoZSkpe2xldCB0PWUudmFsdWVzLG89dC5sZW5ndGg7Zm9yKGxldCBhPTA7YTxvO2ErPTMpcy51bnBhY2sodCxhLHphKSxRLm11bHRpcGx5QnlQb2ludChuLHphLHphKSxzLnBhY2soemEsdCxhKX19ZnVuY3Rpb24gQXAobixlKXtpZihnKGUpKXtsZXQgdD1lLnZhbHVlcyxvPXQubGVuZ3RoO2ZvcihsZXQgYT0wO2E8bzthKz0zKXMudW5wYWNrKHQsYSx6YSksWi5tdWx0aXBseUJ5VmVjdG9yKG4semEsemEpLHphPXMubm9ybWFsaXplKHphLHphKSxzLnBhY2soemEsdCxhKX19ZnVuY3Rpb24gakkobixlKXtsZXQgdD1uLmxlbmd0aCxvPXt9LGE9blswXVtlXS5hdHRyaWJ1dGVzLHI7Zm9yKHIgaW4gYSlpZihhLmhhc093blByb3BlcnR5KHIpJiZnKGFbcl0pJiZnKGFbcl0udmFsdWVzKSl7bGV0IGk9YVtyXSxmPWkudmFsdWVzLmxlbmd0aCxkPSEwO2ZvcihsZXQgYz0xO2M8dDsrK2Mpe2xldCB1PW5bY11bZV0uYXR0cmlidXRlc1tyXTtpZighZyh1KXx8aS5jb21wb25lbnREYXRhdHlwZSE9PXUuY29tcG9uZW50RGF0YXR5cGV8fGkuY29tcG9uZW50c1BlckF0dHJpYnV0ZSE9PXUuY29tcG9uZW50c1BlckF0dHJpYnV0ZXx8aS5ub3JtYWxpemUhPT11Lm5vcm1hbGl6ZSl7ZD0hMTticmVha31mKz11LnZhbHVlcy5sZW5ndGh9ZCYmKG9bcl09bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTppLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6aS5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTppLm5vcm1hbGl6ZSx2YWx1ZXM6bmUuY3JlYXRlVHlwZWRBcnJheShpLmNvbXBvbmVudERhdGF0eXBlLGYpfSkpfXJldHVybiBvfWZ1bmN0aW9uIHdwKG4sZSl7bGV0IHQ9bi5sZW5ndGgsbyxhLHIsaSxmPW5bMF0ubW9kZWxNYXRyaXgsZD1nKG5bMF1bZV0uaW5kaWNlcyksYz1uWzBdW2VdLnByaW1pdGl2ZVR5cGUsdT1qSShuLGUpLGwsbSxoO2ZvcihvIGluIHUpaWYodS5oYXNPd25Qcm9wZXJ0eShvKSlmb3IobD11W29dLnZhbHVlcyxpPTAsYT0wO2E8dDsrK2EpZm9yKG09blthXVtlXS5hdHRyaWJ1dGVzW29dLnZhbHVlcyxoPW0ubGVuZ3RoLHI9MDtyPGg7KytyKWxbaSsrXT1tW3JdO2xldCBiO2lmKGQpe2xldCBfPTA7Zm9yKGE9MDthPHQ7KythKV8rPW5bYV1bZV0uaW5kaWNlcy5sZW5ndGg7bGV0IHc9UGUuY29tcHV0ZU51bWJlck9mVmVydGljZXMobmV3IFBlKHthdHRyaWJ1dGVzOnUscHJpbWl0aXZlVHlwZTpGZS5QT0lOVFN9KSksRT1JZS5jcmVhdGVUeXBlZEFycmF5KHcsXyksUj0wLFM9MDtmb3IoYT0wO2E8dDsrK2Epe2xldCBDPW5bYV1bZV0uaW5kaWNlcyxJPUMubGVuZ3RoO2ZvcihpPTA7aTxJOysraSlFW1IrK109UytDW2ldO1MrPVBlLmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKG5bYV1bZV0pfWI9RX1sZXQgcD1uZXcgcyx5PTAsVDtmb3IoYT0wO2E8dDsrK2Epe2lmKFQ9blthXVtlXS5ib3VuZGluZ1NwaGVyZSwhZyhUKSl7cD12b2lkIDA7YnJlYWt9cy5hZGQoVC5jZW50ZXIscCxwKX1pZihnKHApKWZvcihzLmRpdmlkZUJ5U2NhbGFyKHAsdCxwKSxhPTA7YTx0OysrYSl7VD1uW2FdW2VdLmJvdW5kaW5nU3BoZXJlO2xldCBfPXMubWFnbml0dWRlKHMuc3VidHJhY3QoVC5jZW50ZXIscCxMSSkpK1QucmFkaXVzO18+eSYmKHk9Xyl9cmV0dXJuIG5ldyBQZSh7YXR0cmlidXRlczp1LGluZGljZXM6YixwcmltaXRpdmVUeXBlOmMsYm91bmRpbmdTcGhlcmU6ZyhwKT9uZXcgcGUocCx5KTp2b2lkIDB9KX1mdW5jdGlvbiBWSShuKXtpZihnKG4uaW5kaWNlcykpcmV0dXJuIG47bGV0IGU9UGUuY29tcHV0ZU51bWJlck9mVmVydGljZXMobiksdD1JZS5jcmVhdGVUeXBlZEFycmF5KGUsZSk7Zm9yKGxldCBvPTA7bzxlOysrbyl0W29dPW87cmV0dXJuIG4uaW5kaWNlcz10LG59ZnVuY3Rpb24gSEkobil7bGV0IGU9UGUuY29tcHV0ZU51bWJlck9mVmVydGljZXMobiksdD1JZS5jcmVhdGVUeXBlZEFycmF5KGUsKGUtMikqMyk7dFswXT0xLHRbMV09MCx0WzJdPTI7bGV0IG89Mztmb3IobGV0IGE9MzthPGU7KythKXRbbysrXT1hLTEsdFtvKytdPTAsdFtvKytdPWE7cmV0dXJuIG4uaW5kaWNlcz10LG4ucHJpbWl0aXZlVHlwZT1GZS5UUklBTkdMRVMsbn1mdW5jdGlvbiBLSShuKXtsZXQgZT1QZS5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyhuKSx0PUllLmNyZWF0ZVR5cGVkQXJyYXkoZSwoZS0yKSozKTt0WzBdPTAsdFsxXT0xLHRbMl09MixlPjMmJih0WzNdPTAsdFs0XT0yLHRbNV09Myk7bGV0IG89Njtmb3IobGV0IGE9MzthPGUtMTthKz0yKXRbbysrXT1hLHRbbysrXT1hLTEsdFtvKytdPWErMSxhKzI8ZSYmKHRbbysrXT1hLHRbbysrXT1hKzEsdFtvKytdPWErMik7cmV0dXJuIG4uaW5kaWNlcz10LG4ucHJpbWl0aXZlVHlwZT1GZS5UUklBTkdMRVMsbn1mdW5jdGlvbiBxSShuKXtpZihnKG4uaW5kaWNlcykpcmV0dXJuIG47bGV0IGU9UGUuY29tcHV0ZU51bWJlck9mVmVydGljZXMobiksdD1JZS5jcmVhdGVUeXBlZEFycmF5KGUsZSk7Zm9yKGxldCBvPTA7bzxlOysrbyl0W29dPW87cmV0dXJuIG4uaW5kaWNlcz10LG59ZnVuY3Rpb24gV0kobil7bGV0IGU9UGUuY29tcHV0ZU51bWJlck9mVmVydGljZXMobiksdD1JZS5jcmVhdGVUeXBlZEFycmF5KGUsKGUtMSkqMik7dFswXT0wLHRbMV09MTtsZXQgbz0yO2ZvcihsZXQgYT0yO2E8ZTsrK2EpdFtvKytdPWEtMSx0W28rK109YTtyZXR1cm4gbi5pbmRpY2VzPXQsbi5wcmltaXRpdmVUeXBlPUZlLkxJTkVTLG59ZnVuY3Rpb24gWEkobil7bGV0IGU9UGUuY29tcHV0ZU51bWJlck9mVmVydGljZXMobiksdD1JZS5jcmVhdGVUeXBlZEFycmF5KGUsZSoyKTt0WzBdPTAsdFsxXT0xO2xldCBvPTI7Zm9yKGxldCBhPTI7YTxlOysrYSl0W28rK109YS0xLHRbbysrXT1hO3JldHVybiB0W28rK109ZS0xLHRbb109MCxuLmluZGljZXM9dCxuLnByaW1pdGl2ZVR5cGU9RmUuTElORVMsbn1mdW5jdGlvbiBZSShuKXtzd2l0Y2gobi5wcmltaXRpdmVUeXBlKXtjYXNlIEZlLlRSSUFOR0xFX0ZBTjpyZXR1cm4gSEkobik7Y2FzZSBGZS5UUklBTkdMRV9TVFJJUDpyZXR1cm4gS0kobik7Y2FzZSBGZS5UUklBTkdMRVM6cmV0dXJuIFZJKG4pO2Nhc2UgRmUuTElORV9TVFJJUDpyZXR1cm4gV0kobik7Y2FzZSBGZS5MSU5FX0xPT1A6cmV0dXJuIFhJKG4pO2Nhc2UgRmUuTElORVM6cmV0dXJuIHFJKG4pfXJldHVybiBufWZ1bmN0aW9uIGdpKG4sZSl7TWF0aC5hYnMobi55KTxrLkVQU0lMT042JiYoZT9uLnk9LWsuRVBTSUxPTjY6bi55PWsuRVBTSUxPTjYpfWZ1bmN0aW9uIEpJKG4sZSx0KXtpZihuLnkhPT0wJiZlLnkhPT0wJiZ0LnkhPT0wKXtnaShuLG4ueTwwKSxnaShlLGUueTwwKSxnaSh0LHQueTwwKTtyZXR1cm59bGV0IG89TWF0aC5hYnMobi55KSxhPU1hdGguYWJzKGUueSkscj1NYXRoLmFicyh0LnkpLGk7bz5hP28+cj9pPWsuc2lnbihuLnkpOmk9ay5zaWduKHQueSk6YT5yP2k9ay5zaWduKGUueSk6aT1rLnNpZ24odC55KTtsZXQgZj1pPDA7Z2kobixmKSxnaShlLGYpLGdpKHQsZil9ZnVuY3Rpb24gUmEobixlLHQsbyl7cy5hZGQobixzLm11bHRpcGx5QnlTY2FsYXIocy5zdWJ0cmFjdChlLG4sYVQpLG4ueS8obi55LWUueSksYVQpLHQpLHMuY2xvbmUodCxvKSxnaSh0LCEwKSxnaShvLCExKX1mdW5jdGlvbiBaSShuLGUsdCl7aWYobi54Pj0wfHxlLng+PTB8fHQueD49MClyZXR1cm47SkkobixlLHQpO2xldCBvPW4ueTwwLGE9ZS55PDAscj10Lnk8MCxpPTA7aSs9bz8xOjAsaSs9YT8xOjAsaSs9cj8xOjA7bGV0IGY9VHAuaW5kaWNlcztpPT09MT8oZlsxXT0zLGZbMl09NCxmWzVdPTYsZls3XT02LGZbOF09NSxvPyhSYShuLGUsaWMsc2MpLFJhKG4sdCxjYyxmYyksZlswXT0wLGZbM109MSxmWzRdPTIsZls2XT0xKTphPyhSYShlLHQsaWMsc2MpLFJhKGUsbixjYyxmYyksZlswXT0xLGZbM109MixmWzRdPTAsZls2XT0yKTpyJiYoUmEodCxuLGljLHNjKSxSYSh0LGUsY2MsZmMpLGZbMF09MixmWzNdPTAsZls0XT0xLGZbNl09MCkpOmk9PT0yJiYoZlsyXT00LGZbNF09NCxmWzVdPTMsZls3XT01LGZbOF09NixvP2E/cnx8KFJhKHQsbixpYyxzYyksUmEodCxlLGNjLGZjKSxmWzBdPTAsZlsxXT0xLGZbM109MCxmWzZdPTIpOihSYShlLHQsaWMsc2MpLFJhKGUsbixjYyxmYyksZlswXT0yLGZbMV09MCxmWzNdPTIsZls2XT0xKTooUmEobixlLGljLHNjKSxSYShuLHQsY2MsZmMpLGZbMF09MSxmWzFdPTIsZlszXT0xLGZbNl09MCkpO2xldCBkPVRwLnBvc2l0aW9ucztyZXR1cm4gZFswXT1uLGRbMV09ZSxkWzJdPXQsZC5sZW5ndGg9MywoaT09PTF8fGk9PT0yKSYmKGRbM109aWMsZFs0XT1jYyxkWzVdPXNjLGRbNl09ZmMsZC5sZW5ndGg9NyksVHB9ZnVuY3Rpb24gclQobixlKXtsZXQgdD1uLmF0dHJpYnV0ZXM7aWYodC5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBhIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShhKSYmZyh0W2FdKSYmZyh0W2FdLnZhbHVlcykpe2xldCByPXRbYV07ci52YWx1ZXM9bmUuY3JlYXRlVHlwZWRBcnJheShyLmNvbXBvbmVudERhdGF0eXBlLHIudmFsdWVzKX1sZXQgbz1QZS5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyhuKTtyZXR1cm4gbi5pbmRpY2VzPUllLmNyZWF0ZVR5cGVkQXJyYXkobyxuLmluZGljZXMpLGUmJihuLmJvdW5kaW5nU3BoZXJlPXBlLmZyb21WZXJ0aWNlcyh0LnBvc2l0aW9uLnZhbHVlcykpLG59ZnVuY3Rpb24gZHMobil7bGV0IGU9bi5hdHRyaWJ1dGVzLHQ9e307Zm9yKGxldCBvIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShvKSYmZyhlW29dKSYmZyhlW29dLnZhbHVlcykpe2xldCBhPWVbb107dFtvXT1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOmEuY29tcG9uZW50RGF0YXR5cGUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTphLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsbm9ybWFsaXplOmEubm9ybWFsaXplLHZhbHVlczpbXX0pfXJldHVybiBuZXcgUGUoe2F0dHJpYnV0ZXM6dCxpbmRpY2VzOltdLHByaW1pdGl2ZVR5cGU6bi5wcmltaXRpdmVUeXBlfSl9ZnVuY3Rpb24gT3AobixlLHQpe2xldCBvPWcobi5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSk7ZT1yVChlLG8pLHQ9clQodCxvKSxnKHQpJiYhZyhlKT9uLmdlb21ldHJ5PXQ6IWcodCkmJmcoZSk/bi5nZW9tZXRyeT1lOihuLndlc3RIZW1pc3BoZXJlR2VvbWV0cnk9ZSxuLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnk9dCxuLmdlb21ldHJ5PXZvaWQgMCl9ZnVuY3Rpb24gU3AobixlKXtsZXQgdD1uZXcgbixvPW5ldyBuLGE9bmV3IG47cmV0dXJuIGZ1bmN0aW9uKHIsaSxmLGQsYyx1LGwsbSl7bGV0IGg9bi5mcm9tQXJyYXkoYyxyKmUsdCksYj1uLmZyb21BcnJheShjLGkqZSxvKSxwPW4uZnJvbUFycmF5KGMsZiplLGEpO24ubXVsdGlwbHlCeVNjYWxhcihoLGQueCxoKSxuLm11bHRpcGx5QnlTY2FsYXIoYixkLnksYiksbi5tdWx0aXBseUJ5U2NhbGFyKHAsZC56LHApO2xldCB5PW4uYWRkKGgsYixoKTtuLmFkZCh5LHAseSksbSYmbi5ub3JtYWxpemUoeSx5KSxuLnBhY2soeSx1LGwqZSl9fWZ1bmN0aW9uIGFoKG4sZSx0LG8sYSxyLGksZixkLGMsdSxsLG0saCxiLHApe2lmKCFnKHIpJiYhZyhpKSYmIWcoZikmJiFnKGQpJiYhZyhjKSYmaD09PTApcmV0dXJuO2xldCB5PXMuZnJvbUFycmF5KGEsbiozLFVmKSxUPXMuZnJvbUFycmF5KGEsZSozLEVwKSxfPXMuZnJvbUFycmF5KGEsdCozLFJwKSx3PUR3KG8seSxULF8sZTMpO2lmKGcodykpe2lmKGcocikmJmloKG4sZSx0LHcscixsLm5vcm1hbC52YWx1ZXMscCwhMCksZyhjKSl7bGV0IEU9cy5mcm9tQXJyYXkoYyxuKjMsVWYpLFI9cy5mcm9tQXJyYXkoYyxlKjMsRXApLFM9cy5mcm9tQXJyYXkoYyx0KjMsUnApO3MubXVsdGlwbHlCeVNjYWxhcihFLHcueCxFKSxzLm11bHRpcGx5QnlTY2FsYXIoUix3LnksUikscy5tdWx0aXBseUJ5U2NhbGFyKFMsdy56LFMpO2xldCBDOyFzLmVxdWFscyhFLHMuWkVSTyl8fCFzLmVxdWFscyhSLHMuWkVSTyl8fCFzLmVxdWFscyhTLHMuWkVSTyk/KEM9cy5hZGQoRSxSLEUpLHMuYWRkKEMsUyxDKSxzLm5vcm1hbGl6ZShDLEMpKTooQz1VZixDLng9MCxDLnk9MCxDLno9MCkscy5wYWNrKEMsbC5leHRydWRlRGlyZWN0aW9uLnZhbHVlcyxwKjMpfWlmKGcodSkmJiRJKG4sZSx0LHcsdSxsLmFwcGx5T2Zmc2V0LnZhbHVlcyxwKSxnKGkpJiZpaChuLGUsdCx3LGksbC50YW5nZW50LnZhbHVlcyxwLCEwKSxnKGYpJiZpaChuLGUsdCx3LGYsbC5iaXRhbmdlbnQudmFsdWVzLHAsITApLGcoZCkmJnVUKG4sZSx0LHcsZCxsLnN0LnZhbHVlcyxwKSxoPjApZm9yKGxldCBFPTA7RTxoO0UrKyl7bGV0IFI9bVtFXTt0MyhuLGUsdCx3LHAsYltSXSxsW1JdKX19fWZ1bmN0aW9uIHQzKG4sZSx0LG8sYSxyLGkpe2xldCBmPXIuY29tcG9uZW50c1BlckF0dHJpYnV0ZSxkPXIudmFsdWVzLGM9aS52YWx1ZXM7c3dpdGNoKGYpe2Nhc2UgNDpRSShuLGUsdCxvLGQsYyxhLCExKTticmVhaztjYXNlIDM6aWgobixlLHQsbyxkLGMsYSwhMSk7YnJlYWs7Y2FzZSAyOnVUKG4sZSx0LG8sZCxjLGEsITEpO2JyZWFrO2RlZmF1bHQ6Y1thXT1kW25dKm8ueCtkW2VdKm8ueStkW3RdKm8uen19ZnVuY3Rpb24gc3IobixlLHQsbyxhLHIpe2xldCBpPW4ucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zO2lmKGEhPT0tMSl7bGV0IGY9b1thXSxkPXRbZl07cmV0dXJuIGQ9PT0tMT8odFtmXT1pLG4ucG9zaXRpb24udmFsdWVzLnB1c2goci54LHIueSxyLnopLGUucHVzaChpKSxpKTooZS5wdXNoKGQpLGQpfXJldHVybiBuLnBvc2l0aW9uLnZhbHVlcy5wdXNoKHIueCxyLnksci56KSxlLnB1c2goaSksaX1mdW5jdGlvbiBpVChuKXtsZXQgZT1uLmdlb21ldHJ5LHQ9ZS5hdHRyaWJ1dGVzLG89dC5wb3NpdGlvbi52YWx1ZXMsYT1nKHQubm9ybWFsKT90Lm5vcm1hbC52YWx1ZXM6dm9pZCAwLHI9Zyh0LmJpdGFuZ2VudCk/dC5iaXRhbmdlbnQudmFsdWVzOnZvaWQgMCxpPWcodC50YW5nZW50KT90LnRhbmdlbnQudmFsdWVzOnZvaWQgMCxmPWcodC5zdCk/dC5zdC52YWx1ZXM6dm9pZCAwLGQ9Zyh0LmV4dHJ1ZGVEaXJlY3Rpb24pP3QuZXh0cnVkZURpcmVjdGlvbi52YWx1ZXM6dm9pZCAwLGM9Zyh0LmFwcGx5T2Zmc2V0KT90LmFwcGx5T2Zmc2V0LnZhbHVlczp2b2lkIDAsdT1lLmluZGljZXMsbD1bXTtmb3IobGV0IEMgaW4gdCl0Lmhhc093blByb3BlcnR5KEMpJiYhbjNbQ10mJmcodFtDXSkmJmwucHVzaChDKTtsZXQgbT1sLmxlbmd0aCxoPWRzKGUpLGI9ZHMoZSkscCx5LFQsXyx3LEU9W107RS5sZW5ndGg9by5sZW5ndGgvMztsZXQgUj1bXTtmb3IoUi5sZW5ndGg9by5sZW5ndGgvMyx3PTA7dzxFLmxlbmd0aDsrK3cpRVt3XT0tMSxSW3ddPS0xO2xldCBTPXUubGVuZ3RoO2Zvcih3PTA7dzxTO3crPTMpe2xldCBDPXVbd10sST11W3crMV0sTT11W3crMl0sUD1zLmZyb21BcnJheShvLEMqMyksRj1zLmZyb21BcnJheShvLEkqMyksQT1zLmZyb21BcnJheShvLE0qMykseD1aSShQLEYsQSk7aWYoZyh4KSYmeC5wb3NpdGlvbnMubGVuZ3RoPjMpe2xldCBOPXgucG9zaXRpb25zLHY9eC5pbmRpY2VzLFU9di5sZW5ndGg7Zm9yKGxldCBMPTA7TDxVOysrTCl7bGV0IEQ9dltMXSxHPU5bRF07Ry55PDA/KHA9Yi5hdHRyaWJ1dGVzLHk9Yi5pbmRpY2VzLFQ9RSk6KHA9aC5hdHRyaWJ1dGVzLHk9aC5pbmRpY2VzLFQ9UiksXz1zcihwLHksVCx1LEQ8Mz93K0Q6LTEsRyksYWgoQyxJLE0sRyxvLGEsaSxyLGYsZCxjLHAsbCxtLHQsXyl9fWVsc2UgZyh4KSYmKFA9eC5wb3NpdGlvbnNbMF0sRj14LnBvc2l0aW9uc1sxXSxBPXgucG9zaXRpb25zWzJdKSxQLnk8MD8ocD1iLmF0dHJpYnV0ZXMseT1iLmluZGljZXMsVD1FKToocD1oLmF0dHJpYnV0ZXMseT1oLmluZGljZXMsVD1SKSxfPXNyKHAseSxULHUsdyxQKSxhaChDLEksTSxQLG8sYSxpLHIsZixkLGMscCxsLG0sdCxfKSxfPXNyKHAseSxULHUsdysxLEYpLGFoKEMsSSxNLEYsbyxhLGkscixmLGQsYyxwLGwsbSx0LF8pLF89c3IocCx5LFQsdSx3KzIsQSksYWgoQyxJLE0sQSxvLGEsaSxyLGYsZCxjLHAsbCxtLHQsXyl9T3AobixiLGgpfWZ1bmN0aW9uIGZzKG4sZSx0LG8sYSxyLGkpe2lmKCFnKGkpKXJldHVybjtsZXQgZj1zLmZyb21BcnJheShvLG4qMyxVZik7cy5lcXVhbHNFcHNpbG9uKGYsdCxrLkVQU0lMT04xMCk/ci5hcHBseU9mZnNldC52YWx1ZXNbYV09aVtuXTpyLmFwcGx5T2Zmc2V0LnZhbHVlc1thXT1pW2VdfWZ1bmN0aW9uIGNUKG4pe2xldCBlPW4uZ2VvbWV0cnksdD1lLmF0dHJpYnV0ZXMsbz10LnBvc2l0aW9uLnZhbHVlcyxhPWcodC5hcHBseU9mZnNldCk/dC5hcHBseU9mZnNldC52YWx1ZXM6dm9pZCAwLHI9ZS5pbmRpY2VzLGk9ZHMoZSksZj1kcyhlKSxkLGM9ci5sZW5ndGgsdT1bXTt1Lmxlbmd0aD1vLmxlbmd0aC8zO2xldCBsPVtdO2ZvcihsLmxlbmd0aD1vLmxlbmd0aC8zLGQ9MDtkPHUubGVuZ3RoOysrZCl1W2RdPS0xLGxbZF09LTE7Zm9yKGQ9MDtkPGM7ZCs9Mil7bGV0IG09cltkXSxoPXJbZCsxXSxiPXMuZnJvbUFycmF5KG8sbSozLFVmKSxwPXMuZnJvbUFycmF5KG8saCozLEVwKSx5O01hdGguYWJzKGIueSk8ay5FUFNJTE9ONiYmKGIueTwwP2IueT0tay5FUFNJTE9ONjpiLnk9ay5FUFNJTE9ONiksTWF0aC5hYnMocC55KTxrLkVQU0lMT042JiYocC55PDA/cC55PS1rLkVQU0lMT042OnAueT1rLkVQU0lMT042KTtsZXQgVD1pLmF0dHJpYnV0ZXMsXz1pLmluZGljZXMsdz1sLEU9Zi5hdHRyaWJ1dGVzLFI9Zi5pbmRpY2VzLFM9dSxDPVFuLmxpbmVTZWdtZW50UGxhbmUoYixwLGxULFJwKTtpZihnKEMpKXtsZXQgST1zLm11bHRpcGx5QnlTY2FsYXIocy5VTklUX1ksNSprLkVQU0lMT045LG8zKTtiLnk8MCYmKHMubmVnYXRlKEksSSksVD1mLmF0dHJpYnV0ZXMsXz1mLmluZGljZXMsdz11LEU9aS5hdHRyaWJ1dGVzLFI9aS5pbmRpY2VzLFM9bCk7bGV0IE09cy5hZGQoQyxJLGEzKTt5PXNyKFQsXyx3LHIsZCxiKSxmcyhtLGgsYixvLHksVCxhKSx5PXNyKFQsXyx3LHIsLTEsTSksZnMobSxoLE0sbyx5LFQsYSkscy5uZWdhdGUoSSxJKSxzLmFkZChDLEksTSkseT1zcihFLFIsUyxyLC0xLE0pLGZzKG0saCxNLG8seSxFLGEpLHk9c3IoRSxSLFMscixkKzEscCksZnMobSxoLHAsbyx5LEUsYSl9ZWxzZXtsZXQgSSxNLFA7Yi55PDA/KEk9Zi5hdHRyaWJ1dGVzLE09Zi5pbmRpY2VzLFA9dSk6KEk9aS5hdHRyaWJ1dGVzLE09aS5pbmRpY2VzLFA9bCkseT1zcihJLE0sUCxyLGQsYiksZnMobSxoLGIsbyx5LEksYSkseT1zcihJLE0sUCxyLGQrMSxwKSxmcyhtLGgscCxvLHksSSxhKX19T3AobixmLGkpfWZ1bmN0aW9uIGRUKG4pe2xldCBlPW4uYXR0cmlidXRlcyx0PWUucG9zaXRpb24udmFsdWVzLG89ZS5wcmV2UG9zaXRpb24udmFsdWVzLGE9ZS5uZXh0UG9zaXRpb24udmFsdWVzLHI9dC5sZW5ndGg7Zm9yKGxldCBpPTA7aTxyO2krPTMpe2xldCBmPXMudW5wYWNrKHQsaSxoVCk7aWYoZi54PjApY29udGludWU7bGV0IGQ9cy51bnBhY2sobyxpLG1UKTsoZi55PDAmJmQueT4wfHxmLnk+MCYmZC55PDApJiYoaS0zPjA/KG9baV09dFtpLTNdLG9baSsxXT10W2ktMl0sb1tpKzJdPXRbaS0xXSk6cy5wYWNrKGYsbyxpKSk7bGV0IGM9cy51bnBhY2soYSxpLHhwKTsoZi55PDAmJmMueT4wfHxmLnk+MCYmYy55PDApJiYoaSszPHI/KGFbaV09dFtpKzNdLGFbaSsxXT10W2krNF0sYVtpKzJdPXRbaSs1XSk6cy5wYWNrKGYsYSxpKSl9fWZ1bmN0aW9uIGQzKG4pe2xldCBlPW4uZ2VvbWV0cnksdD1lLmF0dHJpYnV0ZXMsbz10LnBvc2l0aW9uLnZhbHVlcyxhPXQucHJldlBvc2l0aW9uLnZhbHVlcyxyPXQubmV4dFBvc2l0aW9uLnZhbHVlcyxpPXQuZXhwYW5kQW5kV2lkdGgudmFsdWVzLGY9Zyh0LnN0KT90LnN0LnZhbHVlczp2b2lkIDAsZD1nKHQuY29sb3IpP3QuY29sb3IudmFsdWVzOnZvaWQgMCxjPWRzKGUpLHU9ZHMoZSksbCxtLGgsYj0hMSxwPW8ubGVuZ3RoLzM7Zm9yKGw9MDtsPHA7bCs9NCl7bGV0IHk9bCxUPWwrMixfPXMuZnJvbUFycmF5KG8seSozLGhUKSx3PXMuZnJvbUFycmF5KG8sVCozLG1UKTtpZihNYXRoLmFicyhfLnkpPHJoKWZvcihfLnk9cmgqKHcueTwwPy0xOjEpLG9bbCozKzFdPV8ueSxvWyhsKzEpKjMrMV09Xy55LG09eSozO208eSozKzEyO20rPTMpYVttXT1vW2wqM10sYVttKzFdPW9bbCozKzFdLGFbbSsyXT1vW2wqMysyXTtpZihNYXRoLmFicyh3LnkpPHJoKWZvcih3Lnk9cmgqKF8ueTwwPy0xOjEpLG9bKGwrMikqMysxXT13Lnksb1sobCszKSozKzFdPXcueSxtPXkqMzttPHkqMysxMjttKz0zKXJbbV09b1sobCsyKSozXSxyW20rMV09b1sobCsyKSozKzFdLHJbbSsyXT1vWyhsKzIpKjMrMl07bGV0IEU9Yy5hdHRyaWJ1dGVzLFI9Yy5pbmRpY2VzLFM9dS5hdHRyaWJ1dGVzLEM9dS5pbmRpY2VzLEk9UW4ubGluZVNlZ21lbnRQbGFuZShfLHcsbFQsaTMpO2lmKGcoSSkpe2I9ITA7bGV0IE09cy5tdWx0aXBseUJ5U2NhbGFyKHMuVU5JVF9ZLGYzLGMzKTtfLnk8MCYmKHMubmVnYXRlKE0sTSksRT11LmF0dHJpYnV0ZXMsUj11LmluZGljZXMsUz1jLmF0dHJpYnV0ZXMsQz1jLmluZGljZXMpO2xldCBQPXMuYWRkKEksTSxzMyk7RS5wb3NpdGlvbi52YWx1ZXMucHVzaChfLngsXy55LF8ueixfLngsXy55LF8ueiksRS5wb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksRS5wb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksRS5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goYVt5KjNdLGFbeSozKzFdLGFbeSozKzJdKSxFLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChhW3kqMyszXSxhW3kqMys0XSxhW3kqMys1XSksRS5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goXy54LF8ueSxfLnosXy54LF8ueSxfLnopLEUubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxFLm5leHRQb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksRS5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goUC54LFAueSxQLnopLEUubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxzLm5lZ2F0ZShNLE0pLHMuYWRkKEksTSxQKSxTLnBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxTLnBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxTLnBvc2l0aW9uLnZhbHVlcy5wdXNoKHcueCx3Lnksdy56LHcueCx3Lnksdy56KSxTLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksUy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goUC54LFAueSxQLnopLFMucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKFAueCxQLnksUC56KSxTLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChQLngsUC55LFAueiksUy5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2gody54LHcueSx3Lnosdy54LHcueSx3LnopLFMubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHJbVCozXSxyW1QqMysxXSxyW1QqMysyXSksUy5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2gocltUKjMrM10scltUKjMrNF0scltUKjMrNV0pO2xldCBGPVkuZnJvbUFycmF5KGkseSoyLHNUKSxBPU1hdGguYWJzKEYueSk7RS5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSxBLDEsQSksRS5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSwtQSwxLC1BKSxTLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLEEsMSxBKSxTLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLC1BLDEsLUEpO2xldCB4PXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KEksXyx4cCkpO2lmKHgvPXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KHcsXyx4cCkpLGcoZCkpe2xldCBOPXJ0LmZyb21BcnJheShkLHkqNCxmVCksdj1ydC5mcm9tQXJyYXkoZCxUKjQsZlQpLFU9ay5sZXJwKE4ueCx2LngseCksTD1rLmxlcnAoTi55LHYueSx4KSxEPWsubGVycChOLnosdi56LHgpLEc9ay5sZXJwKE4udyx2LncseCk7Zm9yKG09eSo0O208eSo0Kzg7KyttKUUuY29sb3IudmFsdWVzLnB1c2goZFttXSk7Zm9yKEUuY29sb3IudmFsdWVzLnB1c2goVSxMLEQsRyksRS5jb2xvci52YWx1ZXMucHVzaChVLEwsRCxHKSxTLmNvbG9yLnZhbHVlcy5wdXNoKFUsTCxELEcpLFMuY29sb3IudmFsdWVzLnB1c2goVSxMLEQsRyksbT1UKjQ7bTxUKjQrODsrK20pUy5jb2xvci52YWx1ZXMucHVzaChkW21dKX1pZihnKGYpKXtsZXQgTj1ZLmZyb21BcnJheShmLHkqMixzVCksdj1ZLmZyb21BcnJheShmLChsKzMpKjIscjMpLFU9ay5sZXJwKE4ueCx2LngseCk7Zm9yKG09eSoyO208eSoyKzQ7KyttKUUuc3QudmFsdWVzLnB1c2goZlttXSk7Zm9yKEUuc3QudmFsdWVzLnB1c2goVSxOLnkpLEUuc3QudmFsdWVzLnB1c2goVSx2LnkpLFMuc3QudmFsdWVzLnB1c2goVSxOLnkpLFMuc3QudmFsdWVzLnB1c2goVSx2LnkpLG09VCoyO208VCoyKzQ7KyttKVMuc3QudmFsdWVzLnB1c2goZlttXSl9aD1FLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LFIucHVzaChoLGgrMixoKzEpLFIucHVzaChoKzEsaCsyLGgrMyksaD1TLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LEMucHVzaChoLGgrMixoKzEpLEMucHVzaChoKzEsaCsyLGgrMyl9ZWxzZXtsZXQgTSxQO2ZvcihfLnk8MD8oTT11LmF0dHJpYnV0ZXMsUD11LmluZGljZXMpOihNPWMuYXR0cmlidXRlcyxQPWMuaW5kaWNlcyksTS5wb3NpdGlvbi52YWx1ZXMucHVzaChfLngsXy55LF8ueiksTS5wb3NpdGlvbi52YWx1ZXMucHVzaChfLngsXy55LF8ueiksTS5wb3NpdGlvbi52YWx1ZXMucHVzaCh3Lngsdy55LHcueiksTS5wb3NpdGlvbi52YWx1ZXMucHVzaCh3Lngsdy55LHcueiksbT1sKjM7bTxsKjMrMTI7KyttKU0ucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKGFbbV0pLE0ubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHJbbV0pO2ZvcihtPWwqMjttPGwqMis4OysrbSlNLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKGlbbV0pLGcoZikmJk0uc3QudmFsdWVzLnB1c2goZlttXSk7aWYoZyhkKSlmb3IobT1sKjQ7bTxsKjQrMTY7KyttKU0uY29sb3IudmFsdWVzLnB1c2goZFttXSk7aD1NLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LFAucHVzaChoLGgrMixoKzEpLFAucHVzaChoKzEsaCsyLGgrMyl9fWImJihkVCh1KSxkVChjKSksT3Aobix1LGMpfXZhciBCbyxlVCxVSSxfcCx6YSx0aCxuaCxMSSxFYSxEZixjcyxzcyx6SSx0VCxHSSxCZixMYSxuVCxvVCxvaCxhVCxpYyxjYyxzYyxmYyxUcCxRSSxpaCx1VCwkSSxVZixFcCxScCxlMyxuMyxsVCxvMyxhMyxzVCxyMyxoVCxtVCx4cCxpMyxjMyxzMyxmVCxmMyxyaCxMdCxmcj1YKCgpPT57QnIoKTtCdygpO0V0KCk7dnQoKTtNZSgpO2JhKCk7Z3QoKTtDdCgpO2ZlKCk7ZnAoKTtQcigpO1h0KCk7WXQoKTtKbCgpO1p0KCk7WmkoKTtiaSgpO2plKCk7SW4oKTt1bigpO3BpKCk7dG4oKTtRdygpO0JvPXt9O0JvLnRvV2lyZWZyYW1lPWZ1bmN0aW9uKG4pe2xldCBlPW4uaW5kaWNlcztpZihnKGUpKXtzd2l0Y2gobi5wcmltaXRpdmVUeXBlKXtjYXNlIEZlLlRSSUFOR0xFUzpuLmluZGljZXM9dkkoZSk7YnJlYWs7Y2FzZSBGZS5UUklBTkdMRV9TVFJJUDpuLmluZGljZXM9RkkoZSk7YnJlYWs7Y2FzZSBGZS5UUklBTkdMRV9GQU46bi5pbmRpY2VzPURJKGUpO2JyZWFrfW4ucHJpbWl0aXZlVHlwZT1GZS5MSU5FU31yZXR1cm4gbn07Qm8uY3JlYXRlTGluZVNlZ21lbnRzRm9yVmVjdG9ycz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8ibm9ybWFsIix0PXQ/PzFlNDtsZXQgbz1uLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGE9bi5hdHRyaWJ1dGVzW2VdLnZhbHVlcyxyPW8ubGVuZ3RoLGk9bmV3IEZsb2F0NjRBcnJheSgyKnIpLGY9MDtmb3IobGV0IHU9MDt1PHI7dSs9MylpW2YrK109b1t1XSxpW2YrK109b1t1KzFdLGlbZisrXT1vW3UrMl0saVtmKytdPW9bdV0rYVt1XSp0LGlbZisrXT1vW3UrMV0rYVt1KzFdKnQsaVtmKytdPW9bdSsyXSthW3UrMl0qdDtsZXQgZCxjPW4uYm91bmRpbmdTcGhlcmU7cmV0dXJuIGcoYykmJihkPW5ldyBwZShjLmNlbnRlcixjLnJhZGl1cyt0KSksbmV3IFBlKHthdHRyaWJ1dGVzOntwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KX0scHJpbWl0aXZlVHlwZTpGZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpkfSl9O0JvLmNyZWF0ZUF0dHJpYnV0ZUxvY2F0aW9ucz1mdW5jdGlvbihuKXtsZXQgZT1bInBvc2l0aW9uIiwicG9zaXRpb25IaWdoIiwicG9zaXRpb25Mb3ciLCJwb3NpdGlvbjNESGlnaCIsInBvc2l0aW9uM0RMb3ciLCJwb3NpdGlvbjJESGlnaCIsInBvc2l0aW9uMkRMb3ciLCJwaWNrQ29sb3IiLCJub3JtYWwiLCJzdCIsInRhbmdlbnQiLCJiaXRhbmdlbnQiLCJleHRydWRlRGlyZWN0aW9uIiwiY29tcHJlc3NlZEF0dHJpYnV0ZXMiXSx0PW4uYXR0cmlidXRlcyxvPXt9LGE9MCxyLGk9ZS5sZW5ndGg7Zm9yKHI9MDtyPGk7KytyKXtsZXQgZj1lW3JdO2codFtmXSkmJihvW2ZdPWErKyl9Zm9yKGxldCBmIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShmKSYmIWcob1tmXSkmJihvW2ZdPWErKyk7cmV0dXJuIG99O0JvLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZT1mdW5jdGlvbihuKXtsZXQgZT1QZS5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyhuKSx0PW4uaW5kaWNlcztpZihnKHQpKXtsZXQgbz1uZXcgSW50MzJBcnJheShlKTtmb3IobGV0IG09MDttPGU7bSsrKW9bbV09LTE7bGV0IGE9dCxyPWEubGVuZ3RoLGk9SWUuY3JlYXRlVHlwZWRBcnJheShlLHIpLGY9MCxkPTAsYz0wLHU7Zm9yKDtmPHI7KXU9b1thW2ZdXSx1IT09LTE/aVtkXT11Oih1PWFbZl0sb1t1XT1jLGlbZF09YywrK2MpLCsrZiwrK2Q7bi5pbmRpY2VzPWk7bGV0IGw9bi5hdHRyaWJ1dGVzO2ZvcihsZXQgbSBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkobSkmJmcobFttXSkmJmcobFttXS52YWx1ZXMpKXtsZXQgaD1sW21dLGI9aC52YWx1ZXMscD0wLHk9aC5jb21wb25lbnRzUGVyQXR0cmlidXRlLFQ9bmUuY3JlYXRlVHlwZWRBcnJheShoLmNvbXBvbmVudERhdGF0eXBlLGMqeSk7Zm9yKDtwPGU7KXtsZXQgXz1vW3BdO2lmKF8hPT0tMSlmb3IobGV0IHc9MDt3PHk7dysrKVRbeSpfK3ddPWJbeSpwK3ddOysrcH1oLnZhbHVlcz1UfX1yZXR1cm4gbn07Qm8ucmVvcmRlckZvclBvc3RWZXJ0ZXhDYWNoZT1mdW5jdGlvbihuLGUpe2xldCB0PW4uaW5kaWNlcztpZihuLnByaW1pdGl2ZVR5cGU9PT1GZS5UUklBTkdMRVMmJmcodCkpe2xldCBvPXQubGVuZ3RoLGE9MDtmb3IobGV0IHI9MDtyPG87cisrKXRbcl0+YSYmKGE9dFtyXSk7bi5pbmRpY2VzPVp3LnRpcHNpZnkoe2luZGljZXM6dCxtYXhpbXVtSW5kZXg6YSxjYWNoZVNpemU6ZX0pfXJldHVybiBufTtCby5maXRUb1Vuc2lnbmVkU2hvcnRJbmRpY2VzPWZ1bmN0aW9uKG4pe2xldCBlPVtdLHQ9UGUuY29tcHV0ZU51bWJlck9mVmVydGljZXMobik7aWYoZyhuLmluZGljZXMpJiZ0Pj1rLlNJWFRZX0ZPVVJfS0lMT0JZVEVTKXtsZXQgbz1bXSxhPVtdLHI9MCxpPSR3KG4uYXR0cmlidXRlcyksZj1uLmluZGljZXMsZD1mLmxlbmd0aCxjO24ucHJpbWl0aXZlVHlwZT09PUZlLlRSSUFOR0xFUz9jPTM6bi5wcmltaXRpdmVUeXBlPT09RmUuTElORVM/Yz0yOm4ucHJpbWl0aXZlVHlwZT09PUZlLlBPSU5UUyYmKGM9MSk7Zm9yKGxldCB1PTA7dTxkO3UrPWMpe2ZvcihsZXQgbD0wO2w8YzsrK2wpe2xldCBtPWZbdStsXSxoPW9bbV07ZyhoKXx8KGg9cisrLG9bbV09aCxCSShpLG4uYXR0cmlidXRlcyxtKSksYS5wdXNoKGgpfXIrYz49ay5TSVhUWV9GT1VSX0tJTE9CWVRFUyYmKGUucHVzaChuZXcgUGUoe2F0dHJpYnV0ZXM6aSxpbmRpY2VzOmEscHJpbWl0aXZlVHlwZTpuLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6bi5ib3VuZGluZ1NwaGVyZSxib3VuZGluZ1NwaGVyZUNWOm4uYm91bmRpbmdTcGhlcmVDVn0pKSxvPVtdLGE9W10scj0wLGk9JHcobi5hdHRyaWJ1dGVzKSl9YS5sZW5ndGghPT0wJiZlLnB1c2gobmV3IFBlKHthdHRyaWJ1dGVzOmksaW5kaWNlczphLHByaW1pdGl2ZVR5cGU6bi5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOm4uYm91bmRpbmdTcGhlcmUsYm91bmRpbmdTcGhlcmVDVjpuLmJvdW5kaW5nU3BoZXJlQ1Z9KSl9ZWxzZSBlLnB1c2gobik7cmV0dXJuIGV9O2VUPW5ldyBzLFVJPW5ldyBhZTtCby5wcm9qZWN0VG8yRD1mdW5jdGlvbihuLGUsdCxvLGEpe2xldCByPW4uYXR0cmlidXRlc1tlXTthPWcoYSk/YTpuZXcgbm87bGV0IGk9YS5lbGxpcHNvaWQsZj1yLnZhbHVlcyxkPW5ldyBGbG9hdDY0QXJyYXkoZi5sZW5ndGgpLGM9MDtmb3IobGV0IHU9MDt1PGYubGVuZ3RoO3UrPTMpe2xldCBsPXMuZnJvbUFycmF5KGYsdSxlVCksbT1pLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGwsVUkpLGg9YS5wcm9qZWN0KG0sZVQpO2RbYysrXT1oLngsZFtjKytdPWgueSxkW2MrK109aC56fXJldHVybiBuLmF0dHJpYnV0ZXNbdF09cixuLmF0dHJpYnV0ZXNbb109bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpkfSksZGVsZXRlIG4uYXR0cmlidXRlc1tlXSxufTtfcD17aGlnaDowLGxvdzowfTtCby5lbmNvZGVBdHRyaWJ1dGU9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9bi5hdHRyaWJ1dGVzW2VdLHI9YS52YWx1ZXMsaT1yLmxlbmd0aCxmPW5ldyBGbG9hdDMyQXJyYXkoaSksZD1uZXcgRmxvYXQzMkFycmF5KGkpO2ZvcihsZXQgdT0wO3U8aTsrK3UpYWMuZW5jb2RlKHJbdV0sX3ApLGZbdV09X3AuaGlnaCxkW3VdPV9wLmxvdztsZXQgYz1hLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU7cmV0dXJuIG4uYXR0cmlidXRlc1t0XT1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Yyx2YWx1ZXM6Zn0pLG4uYXR0cmlidXRlc1tvXT1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Yyx2YWx1ZXM6ZH0pLGRlbGV0ZSBuLmF0dHJpYnV0ZXNbZV0sbn07emE9bmV3IHM7dGg9bmV3IFEsbmg9bmV3IFo7Qm8udHJhbnNmb3JtVG9Xb3JsZENvb3JkaW5hdGVzPWZ1bmN0aW9uKG4pe2xldCBlPW4ubW9kZWxNYXRyaXg7aWYoUS5lcXVhbHMoZSxRLklERU5USVRZKSlyZXR1cm4gbjtsZXQgdD1uLmdlb21ldHJ5LmF0dHJpYnV0ZXM7eXAoZSx0LnBvc2l0aW9uKSx5cChlLHQucHJldlBvc2l0aW9uKSx5cChlLHQubmV4dFBvc2l0aW9uKSwoZyh0Lm5vcm1hbCl8fGcodC50YW5nZW50KXx8Zyh0LmJpdGFuZ2VudCkpJiYoUS5pbnZlcnNlKGUsdGgpLFEudHJhbnNwb3NlKHRoLHRoKSxRLmdldE1hdHJpeDModGgsbmgpLEFwKG5oLHQubm9ybWFsKSxBcChuaCx0LnRhbmdlbnQpLEFwKG5oLHQuYml0YW5nZW50KSk7bGV0IG89bi5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gZyhvKSYmKG4uZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmU9cGUudHJhbnNmb3JtKG8sZSxvKSksbi5tb2RlbE1hdHJpeD1RLmNsb25lKFEuSURFTlRJVFkpLG59O0xJPW5ldyBzO0JvLmNvbWJpbmVJbnN0YW5jZXM9ZnVuY3Rpb24obil7bGV0IGU9W10sdD1bXSxvPW4ubGVuZ3RoO2ZvcihsZXQgcj0wO3I8bzsrK3Ipe2xldCBpPW5bcl07ZyhpLmdlb21ldHJ5KT9lLnB1c2goaSk6ZyhpLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZnKGkuZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJnQucHVzaChpKX1sZXQgYT1bXTtyZXR1cm4gZS5sZW5ndGg+MCYmYS5wdXNoKHdwKGUsImdlb21ldHJ5IikpLHQubGVuZ3RoPjAmJihhLnB1c2god3AodCwid2VzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSxhLnB1c2god3AodCwiZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSksYX07RWE9bmV3IHMsRGY9bmV3IHMsY3M9bmV3IHMsc3M9bmV3IHM7Qm8uY29tcHV0ZU5vcm1hbD1mdW5jdGlvbihuKXtsZXQgZT1uLmluZGljZXMsdD1uLmF0dHJpYnV0ZXMsbz10LnBvc2l0aW9uLnZhbHVlcyxhPXQucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoci8zKSxkPW5ldyBBcnJheShyKSxjO2ZvcihjPTA7YzxhO2MrKylpW2NdPXtpbmRleE9mZnNldDowLGNvdW50OjAsY3VycmVudENvdW50OjB9O2xldCB1PTA7Zm9yKGM9MDtjPHI7Yys9Myl7bGV0IGI9ZVtjXSxwPWVbYysxXSx5PWVbYysyXSxUPWIqMyxfPXAqMyx3PXkqMztEZi54PW9bVF0sRGYueT1vW1QrMV0sRGYuej1vW1QrMl0sY3MueD1vW19dLGNzLnk9b1tfKzFdLGNzLno9b1tfKzJdLHNzLng9b1t3XSxzcy55PW9bdysxXSxzcy56PW9bdysyXSxpW2JdLmNvdW50KyssaVtwXS5jb3VudCsrLGlbeV0uY291bnQrKyxzLnN1YnRyYWN0KGNzLERmLGNzKSxzLnN1YnRyYWN0KHNzLERmLHNzKSxmW3VdPXMuY3Jvc3MoY3Msc3MsbmV3IHMpLHUrK31sZXQgbD0wO2ZvcihjPTA7YzxhO2MrKylpW2NdLmluZGV4T2Zmc2V0Kz1sLGwrPWlbY10uY291bnQ7dT0wO2xldCBtO2ZvcihjPTA7YzxyO2MrPTMpe209aVtlW2NdXTtsZXQgYj1tLmluZGV4T2Zmc2V0K20uY3VycmVudENvdW50O2RbYl09dSxtLmN1cnJlbnRDb3VudCsrLG09aVtlW2MrMV1dLGI9bS5pbmRleE9mZnNldCttLmN1cnJlbnRDb3VudCxkW2JdPXUsbS5jdXJyZW50Q291bnQrKyxtPWlbZVtjKzJdXSxiPW0uaW5kZXhPZmZzZXQrbS5jdXJyZW50Q291bnQsZFtiXT11LG0uY3VycmVudENvdW50KyssdSsrfWxldCBoPW5ldyBGbG9hdDMyQXJyYXkoYSozKTtmb3IoYz0wO2M8YTtjKyspe2xldCBiPWMqMztpZihtPWlbY10scy5jbG9uZShzLlpFUk8sRWEpLG0uY291bnQ+MCl7Zm9yKHU9MDt1PG0uY291bnQ7dSsrKXMuYWRkKEVhLGZbZFttLmluZGV4T2Zmc2V0K3VdXSxFYSk7cy5lcXVhbHNFcHNpbG9uKHMuWkVSTyxFYSxrLkVQU0lMT04xMCkmJnMuY2xvbmUoZltkW20uaW5kZXhPZmZzZXRdXSxFYSl9cy5lcXVhbHNFcHNpbG9uKHMuWkVSTyxFYSxrLkVQU0lMT04xMCkmJihFYS56PTEpLHMubm9ybWFsaXplKEVhLEVhKSxoW2JdPUVhLngsaFtiKzFdPUVhLnksaFtiKzJdPUVhLnp9cmV0dXJuIG4uYXR0cmlidXRlcy5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmh9KSxufTt6ST1uZXcgcyx0VD1uZXcgcyxHST1uZXcgcztCby5jb21wdXRlVGFuZ2VudEFuZEJpdGFuZ2VudD1mdW5jdGlvbihuKXtsZXQgZT1uLmF0dHJpYnV0ZXMsdD1uLmluZGljZXMsbz1uLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGE9bi5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXMscj1uLmF0dHJpYnV0ZXMuc3QudmFsdWVzLGk9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxmPXQubGVuZ3RoLGQ9bmV3IEFycmF5KGkqMyksYztmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKWRbY109MDtsZXQgdSxsLG07Zm9yKGM9MDtjPGY7Yys9Myl7bGV0IHA9dFtjXSx5PXRbYysxXSxUPXRbYysyXTt1PXAqMyxsPXkqMyxtPVQqMztsZXQgXz1wKjIsdz15KjIsRT1UKjIsUj1vW3VdLFM9b1t1KzFdLEM9b1t1KzJdLEk9cltfXSxNPXJbXysxXSxQPXJbdysxXS1NLEY9cltFKzFdLU0sQT0xLygoclt3XS1JKSpGLShyW0VdLUkpKlApLHg9KEYqKG9bbF0tUiktUCoob1ttXS1SKSkqQSxOPShGKihvW2wrMV0tUyktUCoob1ttKzFdLVMpKSpBLHY9KEYqKG9bbCsyXS1DKS1QKihvW20rMl0tQykpKkE7ZFt1XSs9eCxkW3UrMV0rPU4sZFt1KzJdKz12LGRbbF0rPXgsZFtsKzFdKz1OLGRbbCsyXSs9dixkW21dKz14LGRbbSsxXSs9TixkW20rMl0rPXZ9bGV0IGg9bmV3IEZsb2F0MzJBcnJheShpKjMpLGI9bmV3IEZsb2F0MzJBcnJheShpKjMpO2ZvcihjPTA7YzxpO2MrKyl7dT1jKjMsbD11KzEsbT11KzI7bGV0IHA9cy5mcm9tQXJyYXkoYSx1LHpJKSx5PXMuZnJvbUFycmF5KGQsdSxHSSksVD1zLmRvdChwLHkpO3MubXVsdGlwbHlCeVNjYWxhcihwLFQsdFQpLHMubm9ybWFsaXplKHMuc3VidHJhY3QoeSx0VCx5KSx5KSxoW3VdPXkueCxoW2xdPXkueSxoW21dPXkueixzLm5vcm1hbGl6ZShzLmNyb3NzKHAseSx5KSx5KSxiW3VdPXkueCxiW2xdPXkueSxiW21dPXkuen1yZXR1cm4gbi5hdHRyaWJ1dGVzLnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmh9KSxuLmF0dHJpYnV0ZXMuYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSksbn07QmY9bmV3IFksTGE9bmV3IHMsblQ9bmV3IHMsb1Q9bmV3IHMsb2g9bmV3IFk7Qm8uY29tcHJlc3NWZXJ0aWNlcz1mdW5jdGlvbihuKXtsZXQgZT1uLmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbix0LG87aWYoZyhlKSl7bGV0IFM9ZS52YWx1ZXM7bz1TLmxlbmd0aC8zO2xldCBDPW5ldyBGbG9hdDMyQXJyYXkobyoyKSxJPTA7Zm9yKHQ9MDt0PG87Kyt0KXtpZihzLmZyb21BcnJheShTLHQqMyxMYSkscy5lcXVhbHMoTGEscy5aRVJPKSl7SSs9Mjtjb250aW51ZX1vaD1qdC5vY3RFbmNvZGVJblJhbmdlKExhLDY1NTM1LG9oKSxDW0krK109b2gueCxDW0krK109b2gueX1yZXR1cm4gbi5hdHRyaWJ1dGVzLmNvbXByZXNzZWRBdHRyaWJ1dGVzPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpDfSksZGVsZXRlIG4uYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uLG59bGV0IGE9bi5hdHRyaWJ1dGVzLm5vcm1hbCxyPW4uYXR0cmlidXRlcy5zdCxpPWcoYSksZj1nKHIpO2lmKCFpJiYhZilyZXR1cm4gbjtsZXQgZD1uLmF0dHJpYnV0ZXMudGFuZ2VudCxjPW4uYXR0cmlidXRlcy5iaXRhbmdlbnQsdT1nKGQpLGw9ZyhjKSxtLGgsYixwO2kmJihtPWEudmFsdWVzKSxmJiYoaD1yLnZhbHVlcyksdSYmKGI9ZC52YWx1ZXMpLGwmJihwPWMudmFsdWVzKSxvPShpP20ubGVuZ3RoOmgubGVuZ3RoKS8oaT8zOjIpO2xldCBfPW8sdz1mJiZpPzI6MTt3Kz11fHxsPzE6MCxfKj13O2xldCBFPW5ldyBGbG9hdDMyQXJyYXkoXyksUj0wO2Zvcih0PTA7dDxvOysrdCl7ZiYmKFkuZnJvbUFycmF5KGgsdCoyLEJmKSxFW1IrK109anQuY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoQmYpKTtsZXQgUz10KjM7aSYmZyhiKSYmZyhwKT8ocy5mcm9tQXJyYXkobSxTLExhKSxzLmZyb21BcnJheShiLFMsblQpLHMuZnJvbUFycmF5KHAsUyxvVCksanQub2N0UGFjayhMYSxuVCxvVCxCZiksRVtSKytdPUJmLngsRVtSKytdPUJmLnkpOihpJiYocy5mcm9tQXJyYXkobSxTLExhKSxFW1IrK109anQub2N0RW5jb2RlRmxvYXQoTGEpKSx1JiYocy5mcm9tQXJyYXkoYixTLExhKSxFW1IrK109anQub2N0RW5jb2RlRmxvYXQoTGEpKSxsJiYocy5mcm9tQXJyYXkocCxTLExhKSxFW1IrK109anQub2N0RW5jb2RlRmxvYXQoTGEpKSl9cmV0dXJuIG4uYXR0cmlidXRlcy5jb21wcmVzc2VkQXR0cmlidXRlcz1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6dyx2YWx1ZXM6RX0pLGkmJmRlbGV0ZSBuLmF0dHJpYnV0ZXMubm9ybWFsLGYmJmRlbGV0ZSBuLmF0dHJpYnV0ZXMuc3QsbCYmZGVsZXRlIG4uYXR0cmlidXRlcy5iaXRhbmdlbnQsdSYmZGVsZXRlIG4uYXR0cmlidXRlcy50YW5nZW50LG59O2FUPW5ldyBzO2ljPW5ldyBzLGNjPW5ldyBzLHNjPW5ldyBzLGZjPW5ldyBzLFRwPXtwb3NpdGlvbnM6bmV3IEFycmF5KDcpLGluZGljZXM6bmV3IEFycmF5KDkpfTtRST1TcChydCw0KSxpaD1TcChzLDMpLHVUPVNwKFksMiksJEk9ZnVuY3Rpb24obixlLHQsbyxhLHIsaSl7bGV0IGY9YVtuXSpvLngsZD1hW2VdKm8ueSxjPWFbdF0qby56O3JbaV09ZitkK2M+ay5FUFNJTE9ONj8xOjB9LFVmPW5ldyBzLEVwPW5ldyBzLFJwPW5ldyBzLGUzPW5ldyBzO24zPXtwb3NpdGlvbjohMCxub3JtYWw6ITAsYml0YW5nZW50OiEwLHRhbmdlbnQ6ITAsc3Q6ITAsZXh0cnVkZURpcmVjdGlvbjohMCxhcHBseU9mZnNldDohMH07bFQ9bm4uZnJvbVBvaW50Tm9ybWFsKHMuWkVSTyxzLlVOSVRfWSksbzM9bmV3IHMsYTM9bmV3IHM7c1Q9bmV3IFkscjM9bmV3IFksaFQ9bmV3IHMsbVQ9bmV3IHMseHA9bmV3IHMsaTM9bmV3IHMsYzM9bmV3IHMsczM9bmV3IHMsZlQ9bmV3IHJ0O2YzPTUqay5FUFNJTE9OOSxyaD1rLkVQU0lMT042O0JvLnNwbGl0TG9uZ2l0dWRlPWZ1bmN0aW9uKG4pe2xldCBlPW4uZ2VvbWV0cnksdD1lLmJvdW5kaW5nU3BoZXJlO2lmKGcodCkmJih0LmNlbnRlci54LXQucmFkaXVzPjB8fHBlLmludGVyc2VjdFBsYW5lKHQsbm4uT1JJR0lOX1pYX1BMQU5FKSE9PVRuLklOVEVSU0VDVElORykpcmV0dXJuIG47aWYoZS5nZW9tZXRyeVR5cGUhPT1Eci5OT05FKXN3aXRjaChlLmdlb21ldHJ5VHlwZSl7Y2FzZSBEci5QT0xZTElORVM6ZDMobik7YnJlYWs7Y2FzZSBEci5UUklBTkdMRVM6aVQobik7YnJlYWs7Y2FzZSBEci5MSU5FUzpjVChuKTticmVha31lbHNlIFlJKGUpLGUucHJpbWl0aXZlVHlwZT09PUZlLlRSSUFOR0xFUz9pVChuKTplLnByaW1pdGl2ZVR5cGU9PT1GZS5MSU5FUyYmY1Qobik7cmV0dXJuIG59O0x0PUJvfSk7ZnVuY3Rpb24gamYobixlLHQpe249bj8/MCxlPWU/PzAsdD10Pz8wLHRoaXMudmFsdWU9bmV3IEZsb2F0MzJBcnJheShbbixlLHRdKX12YXIgYlQscFQ9WCgoKT0+e0N0KCk7ZmUoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhqZi5wcm90b3R5cGUse2NvbXBvbmVudERhdGF0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmUuRkxPQVR9fSxjb21wb25lbnRzUGVyQXR0cmlidXRlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gM319LG5vcm1hbGl6ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuITF9fX0pO2pmLmZyb21DYXJ0ZXNpYW4zPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgamYobi54LG4ueSxuLnopfTtqZi50b1ZhbHVlPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIGcoZSl8fChlPW5ldyBGbG9hdDMyQXJyYXkoW24ueCxuLnksbi56XSkpLGVbMF09bi54LGVbMV09bi55LGVbMl09bi56LGV9O2JUPWpmfSk7dmFyIExmLHluLF9pPVgoKCk9PntNZSgpO2d0KCk7ZmUoKTtWZSgpO2plKCk7TGY9Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9lbGxpcHNvaWQ9ZT8/Sy5XR1M4NCx0aGlzLl9zZW1pbWFqb3JBeGlzPXRoaXMuX2VsbGlwc29pZC5tYXhpbXVtUmFkaXVzLHRoaXMuX29uZU92ZXJTZW1pbWFqb3JBeGlzPTEvdGhpcy5fc2VtaW1ham9yQXhpc31nZXQgZWxsaXBzb2lkKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH1zdGF0aWMgbWVyY2F0b3JBbmdsZVRvR2VvZGV0aWNMYXRpdHVkZShlKXtyZXR1cm4gay5QSV9PVkVSX1RXTy0yKk1hdGguYXRhbihNYXRoLmV4cCgtZSkpfXN0YXRpYyBnZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKGUpe2U+bi5NYXhpbXVtTGF0aXR1ZGU/ZT1uLk1heGltdW1MYXRpdHVkZTplPC1uLk1heGltdW1MYXRpdHVkZSYmKGU9LW4uTWF4aW11bUxhdGl0dWRlKTtsZXQgdD1NYXRoLnNpbihlKTtyZXR1cm4gLjUqTWF0aC5sb2coKDErdCkvKDEtdCkpfXByb2plY3QoZSx0KXtsZXQgbz10aGlzLl9zZW1pbWFqb3JBeGlzLGE9ZS5sb25naXR1ZGUqbyxyPW4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShlLmxhdGl0dWRlKSpvLGk9ZS5oZWlnaHQ7cmV0dXJuIGcodCk/KHQueD1hLHQueT1yLHQuej1pLHQpOm5ldyBzKGEscixpKX11bnByb2plY3QoZSx0KXtsZXQgbz10aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcyxhPWUueCpvLHI9bi5tZXJjYXRvckFuZ2xlVG9HZW9kZXRpY0xhdGl0dWRlKGUueSpvKSxpPWUuejtyZXR1cm4gZyh0KT8odC5sb25naXR1ZGU9YSx0LmxhdGl0dWRlPXIsdC5oZWlnaHQ9aSx0KTpuZXcgYWUoYSxyLGkpfX07TGYuTWF4aW11bUxhdGl0dWRlPUxmLm1lcmNhdG9yQW5nbGVUb0dlb2RldGljTGF0aXR1ZGUoTWF0aC5QSSk7eW49TGZ9KTtmdW5jdGlvbiB1MyhuLGUsdCl7bGV0IG89IXQsYT1uLmxlbmd0aCxyO2lmKCFvJiZhPjEpe2xldCBpPW5bMF0ubW9kZWxNYXRyaXg7Zm9yKHI9MTtyPGE7KytyKWlmKCFRLmVxdWFscyhpLG5bcl0ubW9kZWxNYXRyaXgpKXtvPSEwO2JyZWFrfX1pZihvKWZvcihyPTA7cjxhOysrcilnKG5bcl0uZ2VvbWV0cnkpJiZMdC50cmFuc2Zvcm1Ub1dvcmxkQ29vcmRpbmF0ZXMobltyXSk7ZWxzZSBRLm11bHRpcGx5VHJhbnNmb3JtYXRpb24oZSxuWzBdLm1vZGVsTWF0cml4LGUpfWZ1bmN0aW9uIENwKG4sZSl7bGV0IHQ9bi5hdHRyaWJ1dGVzLG89dC5wb3NpdGlvbixhPW8udmFsdWVzLmxlbmd0aC9vLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU7dC5iYXRjaElkPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpuZXcgRmxvYXQzMkFycmF5KGEpfSk7bGV0IHI9dC5iYXRjaElkLnZhbHVlcztmb3IobGV0IGk9MDtpPGE7KytpKXJbaV09ZX1mdW5jdGlvbiBsMyhuKXtsZXQgZT1uLmxlbmd0aDtmb3IobGV0IHQ9MDt0PGU7Kyt0KXtsZXQgbz1uW3RdO2coby5nZW9tZXRyeSk/Q3Aoby5nZW9tZXRyeSx0KTpnKG8ud2VzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJmcoby5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5KSYmKENwKG8ud2VzdEhlbWlzcGhlcmVHZW9tZXRyeSx0KSxDcChvLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnksdCkpfX1mdW5jdGlvbiBoMyhuKXtsZXQgZT1uLmluc3RhbmNlcyx0PW4ucHJvamVjdGlvbixvPW4uZWxlbWVudEluZGV4VWludFN1cHBvcnRlZCxhPW4uc2NlbmUzRE9ubHkscj1uLnZlcnRleENhY2hlT3B0aW1pemUsaT1uLmNvbXByZXNzVmVydGljZXMsZj1uLm1vZGVsTWF0cml4LGQsYyx1LGw9ZS5sZW5ndGg7Zm9yKGQ9MDtkPGw7KytkKWlmKGcoZVtkXS5nZW9tZXRyeSkpe3U9ZVtkXS5nZW9tZXRyeS5wcmltaXRpdmVUeXBlO2JyZWFrfWlmKHUzKGUsZixhKSwhYSlmb3IoZD0wO2Q8bDsrK2QpZyhlW2RdLmdlb21ldHJ5KSYmTHQuc3BsaXRMb25naXR1ZGUoZVtkXSk7aWYobDMoZSkscilmb3IoZD0wO2Q8bDsrK2Qpe2xldCBoPWVbZF07ZyhoLmdlb21ldHJ5KT8oTHQucmVvcmRlckZvclBvc3RWZXJ0ZXhDYWNoZShoLmdlb21ldHJ5KSxMdC5yZW9yZGVyRm9yUHJlVmVydGV4Q2FjaGUoaC5nZW9tZXRyeSkpOmcoaC53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5KSYmZyhoLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiYoTHQucmVvcmRlckZvclBvc3RWZXJ0ZXhDYWNoZShoLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpLEx0LnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZShoLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpLEx0LnJlb3JkZXJGb3JQb3N0VmVydGV4Q2FjaGUoaC5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5KSxMdC5yZW9yZGVyRm9yUHJlVmVydGV4Q2FjaGUoaC5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5KSl9bGV0IG09THQuY29tYmluZUluc3RhbmNlcyhlKTtmb3IobD1tLmxlbmd0aCxkPTA7ZDxsOysrZCl7Yz1tW2RdO2xldCBoPWMuYXR0cmlidXRlcztpZihhKWZvcihsZXQgYiBpbiBoKWguaGFzT3duUHJvcGVydHkoYikmJmhbYl0uY29tcG9uZW50RGF0YXR5cGU9PT1uZS5ET1VCTEUmJkx0LmVuY29kZUF0dHJpYnV0ZShjLGIsYCR7Yn0zREhpZ2hgLGAke2J9M0RMb3dgKTtlbHNlIGZvcihsZXQgYiBpbiBoKWlmKGguaGFzT3duUHJvcGVydHkoYikmJmhbYl0uY29tcG9uZW50RGF0YXR5cGU9PT1uZS5ET1VCTEUpe2xldCBwPWAke2J9M0RgLHk9YCR7Yn0yRGA7THQucHJvamVjdFRvMkQoYyxiLHAseSx0KSxnKGMuYm91bmRpbmdTcGhlcmUpJiZiPT09InBvc2l0aW9uIiYmKGMuYm91bmRpbmdTcGhlcmVDVj1wZS5mcm9tVmVydGljZXMoYy5hdHRyaWJ1dGVzLnBvc2l0aW9uMkQudmFsdWVzKSksTHQuZW5jb2RlQXR0cmlidXRlKGMscCxgJHtwfUhpZ2hgLGAke3B9TG93YCksTHQuZW5jb2RlQXR0cmlidXRlKGMseSxgJHt5fUhpZ2hgLGAke3l9TG93YCl9aSYmTHQuY29tcHJlc3NWZXJ0aWNlcyhjKX1pZighbyl7bGV0IGg9W107Zm9yKGw9bS5sZW5ndGgsZD0wO2Q8bDsrK2QpYz1tW2RdLGg9aC5jb25jYXQoTHQuZml0VG9VbnNpZ25lZFNob3J0SW5kaWNlcyhjKSk7bT1ofXJldHVybiBtfWZ1bmN0aW9uIE1wKG4sZSx0LG8pe2xldCBhLHIsaSxmPW8ubGVuZ3RoLTE7aWYoZj49MCl7bGV0IGM9b1tmXTthPWMub2Zmc2V0K2MuY291bnQsaT1jLmluZGV4LHI9dFtpXS5pbmRpY2VzLmxlbmd0aH1lbHNlIGE9MCxpPTAscj10W2ldLmluZGljZXMubGVuZ3RoO2xldCBkPW4ubGVuZ3RoO2ZvcihsZXQgYz0wO2M8ZDsrK2Mpe2xldCBsPW5bY11bZV07aWYoIWcobCkpY29udGludWU7bGV0IG09bC5pbmRpY2VzLmxlbmd0aDthK20+ciYmKGE9MCxyPXRbKytpXS5pbmRpY2VzLmxlbmd0aCksby5wdXNoKHtpbmRleDppLG9mZnNldDphLGNvdW50Om19KSxhKz1tfX1mdW5jdGlvbiBtMyhuLGUpe2xldCB0PVtdO3JldHVybiBNcChuLCJnZW9tZXRyeSIsZSx0KSxNcChuLCJ3ZXN0SGVtaXNwaGVyZUdlb21ldHJ5IixlLHQpLE1wKG4sImVhc3RIZW1pc3BoZXJlR2VvbWV0cnkiLGUsdCksdH1mdW5jdGlvbiBiMyhuLGUpe2xldCB0PW4uYXR0cmlidXRlcztmb3IobGV0IG8gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG8pKXtsZXQgYT10W29dO2coYSkmJmcoYS52YWx1ZXMpJiZlLnB1c2goYS52YWx1ZXMuYnVmZmVyKX1nKG4uaW5kaWNlcykmJmUucHVzaChuLmluZGljZXMuYnVmZmVyKX1mdW5jdGlvbiBwMyhuLGUpe2xldCB0PW4ubGVuZ3RoO2ZvcihsZXQgbz0wO288dDsrK28pYjMobltvXSxlKX1mdW5jdGlvbiBnMyhuKXtsZXQgZT0xLHQ9bi5sZW5ndGg7Zm9yKGxldCBvPTA7bzx0O28rKyl7bGV0IGE9bltvXTtpZigrK2UsIWcoYSkpY29udGludWU7bGV0IHI9YS5hdHRyaWJ1dGVzO2UrPTcrMipwZS5wYWNrZWRMZW5ndGgrKGcoYS5pbmRpY2VzKT9hLmluZGljZXMubGVuZ3RoOjApO2ZvcihsZXQgaSBpbiByKWlmKHIuaGFzT3duUHJvcGVydHkoaSkmJmcocltpXSkpe2xldCBmPXJbaV07ZSs9NStmLnZhbHVlcy5sZW5ndGh9fXJldHVybiBlfWZ1bmN0aW9uIF8zKG4sZSl7bGV0IHQ9bi5sZW5ndGgsbz1uZXcgRmxvYXQ2NEFycmF5KDErdCoxOSksYT0wO29bYSsrXT10O2ZvcihsZXQgcj0wO3I8dDtyKyspe2xldCBpPW5bcl07aWYoUS5wYWNrKGkubW9kZWxNYXRyaXgsbyxhKSxhKz1RLnBhY2tlZExlbmd0aCxnKGkuYXR0cmlidXRlcykmJmcoaS5hdHRyaWJ1dGVzLm9mZnNldCkpe2xldCBmPWkuYXR0cmlidXRlcy5vZmZzZXQudmFsdWU7b1thXT1mWzBdLG9bYSsxXT1mWzFdLG9bYSsyXT1mWzJdfWErPTN9cmV0dXJuIGUucHVzaChvLmJ1ZmZlciksb31mdW5jdGlvbiB5MyhuKXtsZXQgZT1uLHQ9bmV3IEFycmF5KGVbMF0pLG89MCxhPTE7Zm9yKDthPGUubGVuZ3RoOyl7bGV0IHI9US51bnBhY2soZSxhKSxpO2ErPVEucGFja2VkTGVuZ3RoLGcoZVthXSkmJihpPXtvZmZzZXQ6bmV3IGJUKGVbYV0sZVthKzFdLGVbYSsyXSl9KSxhKz0zLHRbbysrXT17bW9kZWxNYXRyaXg6cixhdHRyaWJ1dGVzOml9fXJldHVybiB0fWZ1bmN0aW9uIGdUKG4pe2xldCBlPW4ubGVuZ3RoLHQ9MSsocGUucGFja2VkTGVuZ3RoKzEpKmUsbz1uZXcgRmxvYXQzMkFycmF5KHQpLGE9MDtvW2ErK109ZTtmb3IobGV0IHI9MDtyPGU7KytyKXtsZXQgaT1uW3JdO2coaSk/KG9bYSsrXT0xLHBlLnBhY2sobltyXSxvLGEpKTpvW2ErK109MCxhKz1wZS5wYWNrZWRMZW5ndGh9cmV0dXJuIG99ZnVuY3Rpb24gX1Qobil7bGV0IGU9bmV3IEFycmF5KG5bMF0pLHQ9MCxvPTE7Zm9yKDtvPG4ubGVuZ3RoOyluW28rK109PT0xJiYoZVt0XT1wZS51bnBhY2sobixvKSksKyt0LG8rPXBlLnBhY2tlZExlbmd0aDtyZXR1cm4gZX12YXIganIsdXMsTnA9WCgoKT0+e0V0KCk7Q3QoKTtmZSgpO1ZlKCk7UHIoKTtYdCgpO1l0KCk7cm4oKTtmcigpO1p0KCk7dW4oKTtwVCgpO19pKCk7anI9e307anIuY29tYmluZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe2xldCBlLHQsbz1uLmluc3RhbmNlcyxhPW8ubGVuZ3RoLHIsaSxmPSExO2E+MCYmKGU9aDMobiksZS5sZW5ndGg+MCYmKHQ9THQuY3JlYXRlQXR0cmlidXRlTG9jYXRpb25zKGVbMF0pLG4uY3JlYXRlUGlja09mZnNldHMmJihyPW0zKG8sZSkpKSxnKG9bMF0uYXR0cmlidXRlcykmJmcob1swXS5hdHRyaWJ1dGVzLm9mZnNldCkmJihpPW5ldyBBcnJheShhKSxmPSEwKSk7bGV0IGQ9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpO2ZvcihsZXQgdT0wO3U8YTsrK3Upe2xldCBsPW9bdV0sbT1sLmdlb21ldHJ5O2cobSkmJihkW3VdPW0uYm91bmRpbmdTcGhlcmUsY1t1XT1tLmJvdW5kaW5nU3BoZXJlQ1YsZiYmKGlbdV09bC5nZW9tZXRyeS5vZmZzZXRBdHRyaWJ1dGUpKTtsZXQgaD1sLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnksYj1sLndlc3RIZW1pc3BoZXJlR2VvbWV0cnk7ZyhoKSYmZyhiKSYmKGcoaC5ib3VuZGluZ1NwaGVyZSkmJmcoYi5ib3VuZGluZ1NwaGVyZSkmJihkW3VdPXBlLnVuaW9uKGguYm91bmRpbmdTcGhlcmUsYi5ib3VuZGluZ1NwaGVyZSkpLGcoaC5ib3VuZGluZ1NwaGVyZUNWKSYmZyhiLmJvdW5kaW5nU3BoZXJlQ1YpJiYoY1t1XT1wZS51bmlvbihoLmJvdW5kaW5nU3BoZXJlQ1YsYi5ib3VuZGluZ1NwaGVyZUNWKSkpfXJldHVybntnZW9tZXRyaWVzOmUsbW9kZWxNYXRyaXg6bi5tb2RlbE1hdHJpeCxhdHRyaWJ1dGVMb2NhdGlvbnM6dCxwaWNrT2Zmc2V0czpyLG9mZnNldEluc3RhbmNlRXh0ZW5kOmksYm91bmRpbmdTcGhlcmVzOmQsYm91bmRpbmdTcGhlcmVzQ1Y6Y319O2pyLnBhY2tDcmVhdGVHZW9tZXRyeVJlc3VsdHM9ZnVuY3Rpb24obixlKXtsZXQgdD1uZXcgRmxvYXQ2NEFycmF5KGczKG4pKSxvPVtdLGE9e30scj1uLmxlbmd0aCxpPTA7dFtpKytdPXI7Zm9yKGxldCBmPTA7ZjxyO2YrKyl7bGV0IGQ9bltmXSxjPWcoZCk7aWYodFtpKytdPWM/MTowLCFjKWNvbnRpbnVlO3RbaSsrXT1kLnByaW1pdGl2ZVR5cGUsdFtpKytdPWQuZ2VvbWV0cnlUeXBlLHRbaSsrXT1kLm9mZnNldEF0dHJpYnV0ZT8/LTE7bGV0IHU9ZyhkLmJvdW5kaW5nU3BoZXJlKT8xOjA7dFtpKytdPXUsdSYmcGUucGFjayhkLmJvdW5kaW5nU3BoZXJlLHQsaSksaSs9cGUucGFja2VkTGVuZ3RoO2xldCBsPWcoZC5ib3VuZGluZ1NwaGVyZUNWKT8xOjA7dFtpKytdPWwsbCYmcGUucGFjayhkLmJvdW5kaW5nU3BoZXJlQ1YsdCxpKSxpKz1wZS5wYWNrZWRMZW5ndGg7bGV0IG09ZC5hdHRyaWJ1dGVzLGg9W107Zm9yKGxldCBwIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShwKSYmZyhtW3BdKSYmKGgucHVzaChwKSxnKGFbcF0pfHwoYVtwXT1vLmxlbmd0aCxvLnB1c2gocCkpKTt0W2krK109aC5sZW5ndGg7Zm9yKGxldCBwPTA7cDxoLmxlbmd0aDtwKyspe2xldCB5PWhbcF0sVD1tW3ldO3RbaSsrXT1hW3ldLHRbaSsrXT1ULmNvbXBvbmVudERhdGF0eXBlLHRbaSsrXT1ULmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsdFtpKytdPVQubm9ybWFsaXplPzE6MCx0W2krK109VC52YWx1ZXMubGVuZ3RoLHQuc2V0KFQudmFsdWVzLGkpLGkrPVQudmFsdWVzLmxlbmd0aH1sZXQgYj1nKGQuaW5kaWNlcyk/ZC5pbmRpY2VzLmxlbmd0aDowO3RbaSsrXT1iLGI+MCYmKHQuc2V0KGQuaW5kaWNlcyxpKSxpKz1iKX1yZXR1cm4gZS5wdXNoKHQuYnVmZmVyKSx7c3RyaW5nVGFibGU6byxwYWNrZWREYXRhOnR9fTtqci51bnBhY2tDcmVhdGVHZW9tZXRyeVJlc3VsdHM9ZnVuY3Rpb24obil7bGV0IGU9bi5zdHJpbmdUYWJsZSx0PW4ucGFja2VkRGF0YSxvLGE9bmV3IEFycmF5KHRbMF0pLHI9MCxpPTE7Zm9yKDtpPHQubGVuZ3RoOyl7aWYoISh0W2krK109PT0xKSl7YVtyKytdPXZvaWQgMDtjb250aW51ZX1sZXQgZD10W2krK10sYz10W2krK10sdT10W2krK107dT09PS0xJiYodT12b2lkIDApO2xldCBsLG07dFtpKytdPT09MSYmKGw9cGUudW5wYWNrKHQsaSkpLGkrPXBlLnBhY2tlZExlbmd0aCx0W2krK109PT0xJiYobT1wZS51bnBhY2sodCxpKSksaSs9cGUucGFja2VkTGVuZ3RoO2xldCBwLHksVCxfPW5ldyBRZSx3PXRbaSsrXTtmb3Iobz0wO288dztvKyspe2xldCBSPWVbdFtpKytdXSxTPXRbaSsrXTtUPXRbaSsrXTtsZXQgQz10W2krK10hPT0wO3A9dFtpKytdLHk9bmUuY3JlYXRlVHlwZWRBcnJheShTLHApO2ZvcihsZXQgST0wO0k8cDtJKyspeVtJXT10W2krK107X1tSXT1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOlMsY29tcG9uZW50c1BlckF0dHJpYnV0ZTpULG5vcm1hbGl6ZTpDLHZhbHVlczp5fSl9bGV0IEU7aWYocD10W2krK10scD4wKXtsZXQgUj15Lmxlbmd0aC9UO2ZvcihFPUllLmNyZWF0ZVR5cGVkQXJyYXkoUixwKSxvPTA7bzxwO28rKylFW29dPXRbaSsrXX1hW3IrK109bmV3IFBlKHtwcmltaXRpdmVUeXBlOmQsZ2VvbWV0cnlUeXBlOmMsYm91bmRpbmdTcGhlcmU6bCxib3VuZGluZ1NwaGVyZUNWOm0saW5kaWNlczpFLGF0dHJpYnV0ZXM6XyxvZmZzZXRBdHRyaWJ1dGU6dX0pfXJldHVybiBhfTtqci5wYWNrQ29tYmluZUdlb21ldHJ5UGFyYW1ldGVycz1mdW5jdGlvbihuLGUpe2xldCB0PW4uY3JlYXRlR2VvbWV0cnlSZXN1bHRzLG89dC5sZW5ndGg7Zm9yKGxldCBhPTA7YTxvO2ErKyllLnB1c2godFthXS5wYWNrZWREYXRhLmJ1ZmZlcik7cmV0dXJue2NyZWF0ZUdlb21ldHJ5UmVzdWx0czpuLmNyZWF0ZUdlb21ldHJ5UmVzdWx0cyxwYWNrZWRJbnN0YW5jZXM6XzMobi5pbnN0YW5jZXMsZSksZWxsaXBzb2lkOm4uZWxsaXBzb2lkLGlzR2VvZ3JhcGhpYzpuLnByb2plY3Rpb24gaW5zdGFuY2VvZiBubyxlbGVtZW50SW5kZXhVaW50U3VwcG9ydGVkOm4uZWxlbWVudEluZGV4VWludFN1cHBvcnRlZCxzY2VuZTNET25seTpuLnNjZW5lM0RPbmx5LHZlcnRleENhY2hlT3B0aW1pemU6bi52ZXJ0ZXhDYWNoZU9wdGltaXplLGNvbXByZXNzVmVydGljZXM6bi5jb21wcmVzc1ZlcnRpY2VzLG1vZGVsTWF0cml4Om4ubW9kZWxNYXRyaXgsY3JlYXRlUGlja09mZnNldHM6bi5jcmVhdGVQaWNrT2Zmc2V0c319O2pyLnVucGFja0NvbWJpbmVHZW9tZXRyeVBhcmFtZXRlcnM9ZnVuY3Rpb24obil7bGV0IGU9eTMobi5wYWNrZWRJbnN0YW5jZXMpLHQ9bi5jcmVhdGVHZW9tZXRyeVJlc3VsdHMsbz10Lmxlbmd0aCxhPTA7Zm9yKGxldCBmPTA7ZjxvO2YrKyl7bGV0IGQ9anIudW5wYWNrQ3JlYXRlR2VvbWV0cnlSZXN1bHRzKHRbZl0pLGM9ZC5sZW5ndGg7Zm9yKGxldCB1PTA7dTxjO3UrKyl7bGV0IGw9ZFt1XSxtPWVbYV07bS5nZW9tZXRyeT1sLCsrYX19bGV0IHI9Sy5jbG9uZShuLmVsbGlwc29pZCksaT1uLmlzR2VvZ3JhcGhpYz9uZXcgbm8ocik6bmV3IHluKHIpO3JldHVybntpbnN0YW5jZXM6ZSxlbGxpcHNvaWQ6cixwcm9qZWN0aW9uOmksZWxlbWVudEluZGV4VWludFN1cHBvcnRlZDpuLmVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQsc2NlbmUzRE9ubHk6bi5zY2VuZTNET25seSx2ZXJ0ZXhDYWNoZU9wdGltaXplOm4udmVydGV4Q2FjaGVPcHRpbWl6ZSxjb21wcmVzc1ZlcnRpY2VzOm4uY29tcHJlc3NWZXJ0aWNlcyxtb2RlbE1hdHJpeDpRLmNsb25lKG4ubW9kZWxNYXRyaXgpLGNyZWF0ZVBpY2tPZmZzZXRzOm4uY3JlYXRlUGlja09mZnNldHN9fTtqci5wYWNrQ29tYmluZUdlb21ldHJ5UmVzdWx0cz1mdW5jdGlvbihuLGUpe2cobi5nZW9tZXRyaWVzKSYmcDMobi5nZW9tZXRyaWVzLGUpO2xldCB0PWdUKG4uYm91bmRpbmdTcGhlcmVzKSxvPWdUKG4uYm91bmRpbmdTcGhlcmVzQ1YpO3JldHVybiBlLnB1c2godC5idWZmZXIsby5idWZmZXIpLHtnZW9tZXRyaWVzOm4uZ2VvbWV0cmllcyxhdHRyaWJ1dGVMb2NhdGlvbnM6bi5hdHRyaWJ1dGVMb2NhdGlvbnMsbW9kZWxNYXRyaXg6bi5tb2RlbE1hdHJpeCxwaWNrT2Zmc2V0czpuLnBpY2tPZmZzZXRzLG9mZnNldEluc3RhbmNlRXh0ZW5kOm4ub2Zmc2V0SW5zdGFuY2VFeHRlbmQsYm91bmRpbmdTcGhlcmVzOnQsYm91bmRpbmdTcGhlcmVzQ1Y6b319O2pyLnVucGFja0NvbWJpbmVHZW9tZXRyeVJlc3VsdHM9ZnVuY3Rpb24obil7cmV0dXJue2dlb21ldHJpZXM6bi5nZW9tZXRyaWVzLGF0dHJpYnV0ZUxvY2F0aW9uczpuLmF0dHJpYnV0ZUxvY2F0aW9ucyxtb2RlbE1hdHJpeDpuLm1vZGVsTWF0cml4LHBpY2tPZmZzZXRzOm4ucGlja09mZnNldHMsb2Zmc2V0SW5zdGFuY2VFeHRlbmQ6bi5vZmZzZXRJbnN0YW5jZUV4dGVuZCxib3VuZGluZ1NwaGVyZXM6X1Qobi5ib3VuZGluZ1NwaGVyZXMpLGJvdW5kaW5nU3BoZXJlc0NWOl9UKG4uYm91bmRpbmdTcGhlcmVzQ1YpfX07dXM9anJ9KTtmdW5jdGlvbiBBMyhuKXtsZXQgZSx0PW4ubmFtZSxvPW4ubWVzc2FnZTtnKHQpJiZnKG8pP2U9YCR7dH06ICR7b31gOmU9bi50b1N0cmluZygpO2xldCBhPW4uc3RhY2s7cmV0dXJuIGcoYSkmJihlKz1gCiR7YX1gKSxlfXZhciB5VCxBVD1YKCgpPT57ZmUoKTt5VD1BM30pO3ZhciBJcD17fTskZShJcCx7ZGVmYXVsdDooKT0+bXR9KTtmdW5jdGlvbiB3MyhuKXthc3luYyBmdW5jdGlvbiBlKHtkYXRhOm99KXtsZXQgYT1bXSxyPXtpZDpvLmlkLHJlc3VsdDp2b2lkIDAsZXJyb3I6dm9pZCAwfTtzZWxmLkNFU0lVTV9CQVNFX1VSTD1vLmJhc2VVcmw7dHJ5e2xldCBpPWF3YWl0IG4oby5wYXJhbWV0ZXJzLGEpO3IucmVzdWx0PWl9Y2F0Y2goaSl7aSBpbnN0YW5jZW9mIEVycm9yP3IuZXJyb3I9e25hbWU6aS5uYW1lLG1lc3NhZ2U6aS5tZXNzYWdlLHN0YWNrOmkuc3RhY2t9OnIuZXJyb3I9aX1vLmNhblRyYW5zZmVyQXJyYXlCdWZmZXJ8fChhLmxlbmd0aD0wKTt0cnl7cG9zdE1lc3NhZ2UocixhKX1jYXRjaChpKXtyLnJlc3VsdD12b2lkIDAsci5lcnJvcj1gcG9zdE1lc3NhZ2UgZmFpbGVkIHdpdGggZXJyb3I6ICR7eVQoaSl9CiAgd2l0aCByZXNwb25zZU1lc3NhZ2U6ICR7SlNPTi5zdHJpbmdpZnkocil9YCxwb3N0TWVzc2FnZShyKX19ZnVuY3Rpb24gdChvKXtwb3N0TWVzc2FnZSh7aWQ6by5kYXRhPy5pZCxlcnJvcjpgcG9zdE1lc3NhZ2UgZmFpbGVkIHdpdGggZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkobyl9YH0pfXJldHVybiBzZWxmLm9ubWVzc2FnZT1lLHNlbGYub25tZXNzYWdlZXJyb3I9dCxzZWxmfXZhciBtdCxrbj1YKCgpPT57QVQoKTttdD13M30pO3ZhciBQcD17fTskZShQcCx7ZGVmYXVsdDooKT0+RTN9KTtmdW5jdGlvbiBUMyhuLGUpe2xldCB0PXVzLnVucGFja0NvbWJpbmVHZW9tZXRyeVBhcmFtZXRlcnMobiksbz11cy5jb21iaW5lR2VvbWV0cnkodCk7cmV0dXJuIHVzLnBhY2tDb21iaW5lR2VvbWV0cnlSZXN1bHRzKG8sZSl9dmFyIEUzLGtwPVgoKCk9PntOcCgpO2tuKCk7RTM9bXQoVDMpfSk7dmFyIHdULG90LFVvPVgoKCk9Pnt3VD17Tk9ORTowLFRPUDoxLEFMTDoyfTtPYmplY3QuZnJlZXplKHdUKTtvdD13VH0pO2Z1bmN0aW9uIHFuKG4pe249bj8/T2UuRU1QVFlfT0JKRUNULHRoaXMucG9zaXRpb249bi5wb3NpdGlvbj8/ITEsdGhpcy5ub3JtYWw9bi5ub3JtYWw/PyExLHRoaXMuc3Q9bi5zdD8/ITEsdGhpcy5iaXRhbmdlbnQ9bi5iaXRhbmdlbnQ/PyExLHRoaXMudGFuZ2VudD1uLnRhbmdlbnQ/PyExLHRoaXMuY29sb3I9bi5jb2xvcj8/ITF9dmFyIGhlLENvPVgoKCk9PntzdCgpO2ZlKCk7cW4uUE9TSVRJT05fT05MWT1PYmplY3QuZnJlZXplKG5ldyBxbih7cG9zaXRpb246ITB9KSk7cW4uUE9TSVRJT05fQU5EX05PUk1BTD1PYmplY3QuZnJlZXplKG5ldyBxbih7cG9zaXRpb246ITAsbm9ybWFsOiEwfSkpO3FuLlBPU0lUSU9OX05PUk1BTF9BTkRfU1Q9T2JqZWN0LmZyZWV6ZShuZXcgcW4oe3Bvc2l0aW9uOiEwLG5vcm1hbDohMCxzdDohMH0pKTtxbi5QT1NJVElPTl9BTkRfU1Q9T2JqZWN0LmZyZWV6ZShuZXcgcW4oe3Bvc2l0aW9uOiEwLHN0OiEwfSkpO3FuLlBPU0lUSU9OX0FORF9DT0xPUj1PYmplY3QuZnJlZXplKG5ldyBxbih7cG9zaXRpb246ITAsY29sb3I6ITB9KSk7cW4uQUxMPU9iamVjdC5mcmVlemUobmV3IHFuKHtwb3NpdGlvbjohMCxub3JtYWw6ITAsc3Q6ITAsdGFuZ2VudDohMCxiaXRhbmdlbnQ6ITB9KSk7cW4uREVGQVVMVD1xbi5QT1NJVElPTl9OT1JNQUxfQU5EX1NUO3FuLnBhY2tlZExlbmd0aD02O3FuLnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0PXQ/PzAsZVt0KytdPW4ucG9zaXRpb24/MTowLGVbdCsrXT1uLm5vcm1hbD8xOjAsZVt0KytdPW4uc3Q/MTowLGVbdCsrXT1uLnRhbmdlbnQ/MTowLGVbdCsrXT1uLmJpdGFuZ2VudD8xOjAsZVt0XT1uLmNvbG9yPzE6MCxlfTtxbi51bnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiBlPWU/PzAsZyh0KXx8KHQ9bmV3IHFuKSx0LnBvc2l0aW9uPW5bZSsrXT09PTEsdC5ub3JtYWw9bltlKytdPT09MSx0LnN0PW5bZSsrXT09PTEsdC50YW5nZW50PW5bZSsrXT09PTEsdC5iaXRhbmdlbnQ9bltlKytdPT09MSx0LmNvbG9yPW5bZV09PT0xLHR9O3FuLmNsb25lPWZ1bmN0aW9uKG4sZSl7aWYoZyhuKSlyZXR1cm4gZyhlKXx8KGU9bmV3IHFuKSxlLnBvc2l0aW9uPW4ucG9zaXRpb24sZS5ub3JtYWw9bi5ub3JtYWwsZS5zdD1uLnN0LGUudGFuZ2VudD1uLnRhbmdlbnQsZS5iaXRhbmdlbnQ9bi5iaXRhbmdlbnQsZS5jb2xvcj1uLmNvbG9yLGV9O2hlPXFufSk7ZnVuY3Rpb24gYWEobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5taW5pbXVtLHQ9bi5tYXhpbXVtLG89bi52ZXJ0ZXhGb3JtYXQ/P2hlLkRFRkFVTFQ7dGhpcy5fbWluaW11bT1zLmNsb25lKGUpLHRoaXMuX21heGltdW09cy5jbG9uZSh0KSx0aGlzLl92ZXJ0ZXhGb3JtYXQ9byx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9bi5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQm94R2VvbWV0cnkifXZhciBSMyxFVCxSVCx4VCxUVCx2cCx6ZixGcD1YKCgpPT57RXQoKTtNZSgpO0N0KCk7c3QoKTtmZSgpO1h0KCk7WXQoKTtybigpO1VvKCk7dG4oKTtDbygpO1IzPW5ldyBzO2FhLmZyb21EaW1lbnNpb25zPWZ1bmN0aW9uKG4pe249bj8/T2UuRU1QVFlfT0JKRUNUO2xldCBlPW4uZGltZW5zaW9ucyx0PXMubXVsdGlwbHlCeVNjYWxhcihlLC41LG5ldyBzKTtyZXR1cm4gbmV3IGFhKHttaW5pbXVtOnMubmVnYXRlKHQsbmV3IHMpLG1heGltdW06dCx2ZXJ0ZXhGb3JtYXQ6bi52ZXJ0ZXhGb3JtYXQsb2Zmc2V0QXR0cmlidXRlOm4ub2Zmc2V0QXR0cmlidXRlfSl9O2FhLmZyb21BeGlzQWxpZ25lZEJvdW5kaW5nQm94PWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgYWEoe21pbmltdW06bi5taW5pbXVtLG1heGltdW06bi5tYXhpbXVtfSl9O2FhLnBhY2tlZExlbmd0aD0yKnMucGFja2VkTGVuZ3RoK2hlLnBhY2tlZExlbmd0aCsxO2FhLnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0PXQ/PzAscy5wYWNrKG4uX21pbmltdW0sZSx0KSxzLnBhY2sobi5fbWF4aW11bSxlLHQrcy5wYWNrZWRMZW5ndGgpLGhlLnBhY2sobi5fdmVydGV4Rm9ybWF0LGUsdCsyKnMucGFja2VkTGVuZ3RoKSxlW3QrMipzLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGhdPW4uX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07RVQ9bmV3IHMsUlQ9bmV3IHMseFQ9bmV3IGhlLFRUPXttaW5pbXVtOkVULG1heGltdW06UlQsdmVydGV4Rm9ybWF0OnhULG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2FhLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvPXMudW5wYWNrKG4sZSxFVCksYT1zLnVucGFjayhuLGUrcy5wYWNrZWRMZW5ndGgsUlQpLHI9aGUudW5wYWNrKG4sZSsyKnMucGFja2VkTGVuZ3RoLHhUKSxpPW5bZSsyKnMucGFja2VkTGVuZ3RoK2hlLnBhY2tlZExlbmd0aF07cmV0dXJuIGcodCk/KHQuX21pbmltdW09cy5jbG9uZShvLHQuX21pbmltdW0pLHQuX21heGltdW09cy5jbG9uZShhLHQuX21heGltdW0pLHQuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShyLHQuX3ZlcnRleEZvcm1hdCksdC5fb2Zmc2V0QXR0cmlidXRlPWk9PT0tMT92b2lkIDA6aSx0KTooVFQub2Zmc2V0QXR0cmlidXRlPWk9PT0tMT92b2lkIDA6aSxuZXcgYWEoVFQpKX07YWEuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7bGV0IGU9bi5fbWluaW11bSx0PW4uX21heGltdW0sbz1uLl92ZXJ0ZXhGb3JtYXQ7aWYocy5lcXVhbHMoZSx0KSlyZXR1cm47bGV0IGE9bmV3IFFlLHIsaTtpZihvLnBvc2l0aW9uJiYoby5zdHx8by5ub3JtYWx8fG8udGFuZ2VudHx8by5iaXRhbmdlbnQpKXtpZihvLnBvc2l0aW9uJiYoaT1uZXcgRmxvYXQ2NEFycmF5KDcyKSxpWzBdPWUueCxpWzFdPWUueSxpWzJdPXQueixpWzNdPXQueCxpWzRdPWUueSxpWzVdPXQueixpWzZdPXQueCxpWzddPXQueSxpWzhdPXQueixpWzldPWUueCxpWzEwXT10LnksaVsxMV09dC56LGlbMTJdPWUueCxpWzEzXT1lLnksaVsxNF09ZS56LGlbMTVdPXQueCxpWzE2XT1lLnksaVsxN109ZS56LGlbMThdPXQueCxpWzE5XT10LnksaVsyMF09ZS56LGlbMjFdPWUueCxpWzIyXT10LnksaVsyM109ZS56LGlbMjRdPXQueCxpWzI1XT1lLnksaVsyNl09ZS56LGlbMjddPXQueCxpWzI4XT10LnksaVsyOV09ZS56LGlbMzBdPXQueCxpWzMxXT10LnksaVszMl09dC56LGlbMzNdPXQueCxpWzM0XT1lLnksaVszNV09dC56LGlbMzZdPWUueCxpWzM3XT1lLnksaVszOF09ZS56LGlbMzldPWUueCxpWzQwXT10LnksaVs0MV09ZS56LGlbNDJdPWUueCxpWzQzXT10LnksaVs0NF09dC56LGlbNDVdPWUueCxpWzQ2XT1lLnksaVs0N109dC56LGlbNDhdPWUueCxpWzQ5XT10LnksaVs1MF09ZS56LGlbNTFdPXQueCxpWzUyXT10LnksaVs1M109ZS56LGlbNTRdPXQueCxpWzU1XT10LnksaVs1Nl09dC56LGlbNTddPWUueCxpWzU4XT10LnksaVs1OV09dC56LGlbNjBdPWUueCxpWzYxXT1lLnksaVs2Ml09ZS56LGlbNjNdPXQueCxpWzY0XT1lLnksaVs2NV09ZS56LGlbNjZdPXQueCxpWzY3XT1lLnksaVs2OF09dC56LGlbNjldPWUueCxpWzcwXT1lLnksaVs3MV09dC56LGEucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczppfSkpLG8ubm9ybWFsKXtsZXQgYz1uZXcgRmxvYXQzMkFycmF5KDcyKTtjWzBdPTAsY1sxXT0wLGNbMl09MSxjWzNdPTAsY1s0XT0wLGNbNV09MSxjWzZdPTAsY1s3XT0wLGNbOF09MSxjWzldPTAsY1sxMF09MCxjWzExXT0xLGNbMTJdPTAsY1sxM109MCxjWzE0XT0tMSxjWzE1XT0wLGNbMTZdPTAsY1sxN109LTEsY1sxOF09MCxjWzE5XT0wLGNbMjBdPS0xLGNbMjFdPTAsY1syMl09MCxjWzIzXT0tMSxjWzI0XT0xLGNbMjVdPTAsY1syNl09MCxjWzI3XT0xLGNbMjhdPTAsY1syOV09MCxjWzMwXT0xLGNbMzFdPTAsY1szMl09MCxjWzMzXT0xLGNbMzRdPTAsY1szNV09MCxjWzM2XT0tMSxjWzM3XT0wLGNbMzhdPTAsY1szOV09LTEsY1s0MF09MCxjWzQxXT0wLGNbNDJdPS0xLGNbNDNdPTAsY1s0NF09MCxjWzQ1XT0tMSxjWzQ2XT0wLGNbNDddPTAsY1s0OF09MCxjWzQ5XT0xLGNbNTBdPTAsY1s1MV09MCxjWzUyXT0xLGNbNTNdPTAsY1s1NF09MCxjWzU1XT0xLGNbNTZdPTAsY1s1N109MCxjWzU4XT0xLGNbNTldPTAsY1s2MF09MCxjWzYxXT0tMSxjWzYyXT0wLGNbNjNdPTAsY1s2NF09LTEsY1s2NV09MCxjWzY2XT0wLGNbNjddPS0xLGNbNjhdPTAsY1s2OV09MCxjWzcwXT0tMSxjWzcxXT0wLGEubm9ybWFsPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpjfSl9aWYoby5zdCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg0OCk7Y1swXT0wLGNbMV09MCxjWzJdPTEsY1szXT0wLGNbNF09MSxjWzVdPTEsY1s2XT0wLGNbN109MSxjWzhdPTEsY1s5XT0wLGNbMTBdPTAsY1sxMV09MCxjWzEyXT0wLGNbMTNdPTEsY1sxNF09MSxjWzE1XT0xLGNbMTZdPTAsY1sxN109MCxjWzE4XT0xLGNbMTldPTAsY1syMF09MSxjWzIxXT0xLGNbMjJdPTAsY1syM109MSxjWzI0XT0xLGNbMjVdPTAsY1syNl09MCxjWzI3XT0wLGNbMjhdPTAsY1syOV09MSxjWzMwXT0xLGNbMzFdPTEsY1szMl09MSxjWzMzXT0wLGNbMzRdPTAsY1szNV09MCxjWzM2XT0wLGNbMzddPTEsY1szOF09MSxjWzM5XT0xLGNbNDBdPTAsY1s0MV09MCxjWzQyXT0xLGNbNDNdPTAsY1s0NF09MSxjWzQ1XT0xLGNbNDZdPTAsY1s0N109MSxhLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpjfSl9aWYoby50YW5nZW50KXtsZXQgYz1uZXcgRmxvYXQzMkFycmF5KDcyKTtjWzBdPTEsY1sxXT0wLGNbMl09MCxjWzNdPTEsY1s0XT0wLGNbNV09MCxjWzZdPTEsY1s3XT0wLGNbOF09MCxjWzldPTEsY1sxMF09MCxjWzExXT0wLGNbMTJdPS0xLGNbMTNdPTAsY1sxNF09MCxjWzE1XT0tMSxjWzE2XT0wLGNbMTddPTAsY1sxOF09LTEsY1sxOV09MCxjWzIwXT0wLGNbMjFdPS0xLGNbMjJdPTAsY1syM109MCxjWzI0XT0wLGNbMjVdPTEsY1syNl09MCxjWzI3XT0wLGNbMjhdPTEsY1syOV09MCxjWzMwXT0wLGNbMzFdPTEsY1szMl09MCxjWzMzXT0wLGNbMzRdPTEsY1szNV09MCxjWzM2XT0wLGNbMzddPS0xLGNbMzhdPTAsY1szOV09MCxjWzQwXT0tMSxjWzQxXT0wLGNbNDJdPTAsY1s0M109LTEsY1s0NF09MCxjWzQ1XT0wLGNbNDZdPS0xLGNbNDddPTAsY1s0OF09LTEsY1s0OV09MCxjWzUwXT0wLGNbNTFdPS0xLGNbNTJdPTAsY1s1M109MCxjWzU0XT0tMSxjWzU1XT0wLGNbNTZdPTAsY1s1N109LTEsY1s1OF09MCxjWzU5XT0wLGNbNjBdPTEsY1s2MV09MCxjWzYyXT0wLGNbNjNdPTEsY1s2NF09MCxjWzY1XT0wLGNbNjZdPTEsY1s2N109MCxjWzY4XT0wLGNbNjldPTEsY1s3MF09MCxjWzcxXT0wLGEudGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfWlmKG8uYml0YW5nZW50KXtsZXQgYz1uZXcgRmxvYXQzMkFycmF5KDcyKTtjWzBdPTAsY1sxXT0xLGNbMl09MCxjWzNdPTAsY1s0XT0xLGNbNV09MCxjWzZdPTAsY1s3XT0xLGNbOF09MCxjWzldPTAsY1sxMF09MSxjWzExXT0wLGNbMTJdPTAsY1sxM109MSxjWzE0XT0wLGNbMTVdPTAsY1sxNl09MSxjWzE3XT0wLGNbMThdPTAsY1sxOV09MSxjWzIwXT0wLGNbMjFdPTAsY1syMl09MSxjWzIzXT0wLGNbMjRdPTAsY1syNV09MCxjWzI2XT0xLGNbMjddPTAsY1syOF09MCxjWzI5XT0xLGNbMzBdPTAsY1szMV09MCxjWzMyXT0xLGNbMzNdPTAsY1szNF09MCxjWzM1XT0xLGNbMzZdPTAsY1szN109MCxjWzM4XT0xLGNbMzldPTAsY1s0MF09MCxjWzQxXT0xLGNbNDJdPTAsY1s0M109MCxjWzQ0XT0xLGNbNDVdPTAsY1s0Nl09MCxjWzQ3XT0xLGNbNDhdPTAsY1s0OV09MCxjWzUwXT0xLGNbNTFdPTAsY1s1Ml09MCxjWzUzXT0xLGNbNTRdPTAsY1s1NV09MCxjWzU2XT0xLGNbNTddPTAsY1s1OF09MCxjWzU5XT0xLGNbNjBdPTAsY1s2MV09MCxjWzYyXT0xLGNbNjNdPTAsY1s2NF09MCxjWzY1XT0xLGNbNjZdPTAsY1s2N109MCxjWzY4XT0xLGNbNjldPTAsY1s3MF09MCxjWzcxXT0xLGEuYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpjfSl9cj1uZXcgVWludDE2QXJyYXkoMzYpLHJbMF09MCxyWzFdPTEsclsyXT0yLHJbM109MCxyWzRdPTIscls1XT0zLHJbNl09NixyWzddPTUscls4XT00LHJbOV09NyxyWzEwXT02LHJbMTFdPTQsclsxMl09OCxyWzEzXT05LHJbMTRdPTEwLHJbMTVdPTgsclsxNl09MTAsclsxN109MTEsclsxOF09MTQsclsxOV09MTMsclsyMF09MTIsclsyMV09MTUsclsyMl09MTQsclsyM109MTIsclsyNF09MTgsclsyNV09MTcsclsyNl09MTYsclsyN109MTksclsyOF09MTgsclsyOV09MTYsclszMF09MjAsclszMV09MjEsclszMl09MjIsclszM109MjAsclszNF09MjIsclszNV09MjN9ZWxzZSBpPW5ldyBGbG9hdDY0QXJyYXkoMjQpLGlbMF09ZS54LGlbMV09ZS55LGlbMl09ZS56LGlbM109dC54LGlbNF09ZS55LGlbNV09ZS56LGlbNl09dC54LGlbN109dC55LGlbOF09ZS56LGlbOV09ZS54LGlbMTBdPXQueSxpWzExXT1lLnosaVsxMl09ZS54LGlbMTNdPWUueSxpWzE0XT10LnosaVsxNV09dC54LGlbMTZdPWUueSxpWzE3XT10LnosaVsxOF09dC54LGlbMTldPXQueSxpWzIwXT10LnosaVsyMV09ZS54LGlbMjJdPXQueSxpWzIzXT10LnosYS5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KSxyPW5ldyBVaW50MTZBcnJheSgzNiksclswXT00LHJbMV09NSxyWzJdPTYsclszXT00LHJbNF09NixyWzVdPTcscls2XT0xLHJbN109MCxyWzhdPTMscls5XT0xLHJbMTBdPTMsclsxMV09MixyWzEyXT0xLHJbMTNdPTYsclsxNF09NSxyWzE1XT0xLHJbMTZdPTIsclsxN109NixyWzE4XT0yLHJbMTldPTMsclsyMF09NyxyWzIxXT0yLHJbMjJdPTcsclsyM109NixyWzI0XT0zLHJbMjVdPTAsclsyNl09NCxyWzI3XT0zLHJbMjhdPTQsclsyOV09NyxyWzMwXT0wLHJbMzFdPTEsclszMl09NSxyWzMzXT0wLHJbMzRdPTUsclszNV09NDtsZXQgZj1zLnN1YnRyYWN0KHQsZSxSMyksZD1zLm1hZ25pdHVkZShmKSouNTtpZihnKG4uX29mZnNldEF0dHJpYnV0ZSkpe2xldCBjPWkubGVuZ3RoLHU9bi5fb2Zmc2V0QXR0cmlidXRlPT09b3QuTk9ORT8wOjEsbD1uZXcgVWludDhBcnJheShjLzMpLmZpbGwodSk7YS5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpsfSl9cmV0dXJuIG5ldyBQZSh7YXR0cmlidXRlczphLGluZGljZXM6cixwcmltaXRpdmVUeXBlOkZlLlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpuZXcgcGUocy5aRVJPLGQpLG9mZnNldEF0dHJpYnV0ZTpuLl9vZmZzZXRBdHRyaWJ1dGV9KX07YWEuZ2V0VW5pdEJveD1mdW5jdGlvbigpe3JldHVybiBnKHZwKXx8KHZwPWFhLmNyZWF0ZUdlb21ldHJ5KGFhLmZyb21EaW1lbnNpb25zKHtkaW1lbnNpb25zOm5ldyBzKDEsMSwxKSx2ZXJ0ZXhGb3JtYXQ6aGUuUE9TSVRJT05fT05MWX0pKSksdnB9O3pmPWFhfSk7dmFyIERwPXt9OyRlKERwLHtkZWZhdWx0OigpPT5PM30pO2Z1bmN0aW9uIHgzKG4sZSl7cmV0dXJuIGcoZSkmJihuPXpmLnVucGFjayhuLGUpKSx6Zi5jcmVhdGVHZW9tZXRyeShuKX12YXIgTzMsQnA9WCgoKT0+e0ZwKCk7ZmUoKTtPMz14M30pO2Z1bmN0aW9uIGRyKG4pe249bj8/T2UuRU1QVFlfT0JKRUNUO2xldCBlPW4ubWluaW11bSx0PW4ubWF4aW11bTt0aGlzLl9taW49cy5jbG9uZShlKSx0aGlzLl9tYXg9cy5jbG9uZSh0KSx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9bi5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQm94T3V0bGluZUdlb21ldHJ5In12YXIgUzMsU1QsQ1QsT1QsVXAsTVQ9WCgoKT0+e0V0KCk7TWUoKTtDdCgpO3N0KCk7ZmUoKTtYdCgpO1l0KCk7cm4oKTtVbygpO3RuKCk7UzM9bmV3IHM7ZHIuZnJvbURpbWVuc2lvbnM9ZnVuY3Rpb24obil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5kaW1lbnNpb25zLHQ9cy5tdWx0aXBseUJ5U2NhbGFyKGUsLjUsbmV3IHMpO3JldHVybiBuZXcgZHIoe21pbmltdW06cy5uZWdhdGUodCxuZXcgcyksbWF4aW11bTp0LG9mZnNldEF0dHJpYnV0ZTpuLm9mZnNldEF0dHJpYnV0ZX0pfTtkci5mcm9tQXhpc0FsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IGRyKHttaW5pbXVtOm4ubWluaW11bSxtYXhpbXVtOm4ubWF4aW11bX0pfTtkci5wYWNrZWRMZW5ndGg9MipzLnBhY2tlZExlbmd0aCsxO2RyLnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0PXQ/PzAscy5wYWNrKG4uX21pbixlLHQpLHMucGFjayhuLl9tYXgsZSx0K3MucGFja2VkTGVuZ3RoKSxlW3Qrcy5wYWNrZWRMZW5ndGgqMl09bi5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtTVD1uZXcgcyxDVD1uZXcgcyxPVD17bWluaW11bTpTVCxtYXhpbXVtOkNULG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2RyLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvPXMudW5wYWNrKG4sZSxTVCksYT1zLnVucGFjayhuLGUrcy5wYWNrZWRMZW5ndGgsQ1QpLHI9bltlK3MucGFja2VkTGVuZ3RoKjJdO3JldHVybiBnKHQpPyh0Ll9taW49cy5jbG9uZShvLHQuX21pbiksdC5fbWF4PXMuY2xvbmUoYSx0Ll9tYXgpLHQuX29mZnNldEF0dHJpYnV0ZT1yPT09LTE/dm9pZCAwOnIsdCk6KE9ULm9mZnNldEF0dHJpYnV0ZT1yPT09LTE/dm9pZCAwOnIsbmV3IGRyKE9UKSl9O2RyLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe2xldCBlPW4uX21pbix0PW4uX21heDtpZihzLmVxdWFscyhlLHQpKXJldHVybjtsZXQgbz1uZXcgUWUsYT1uZXcgVWludDE2QXJyYXkoMjQpLHI9bmV3IEZsb2F0NjRBcnJheSgyNCk7clswXT1lLngsclsxXT1lLnksclsyXT1lLnosclszXT10Lngscls0XT1lLnkscls1XT1lLnoscls2XT10Lngscls3XT10Lnkscls4XT1lLnoscls5XT1lLngsclsxMF09dC55LHJbMTFdPWUueixyWzEyXT1lLngsclsxM109ZS55LHJbMTRdPXQueixyWzE1XT10LngsclsxNl09ZS55LHJbMTddPXQueixyWzE4XT10LngsclsxOV09dC55LHJbMjBdPXQueixyWzIxXT1lLngsclsyMl09dC55LHJbMjNdPXQueixvLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cn0pLGFbMF09NCxhWzFdPTUsYVsyXT01LGFbM109NixhWzRdPTYsYVs1XT03LGFbNl09NyxhWzddPTQsYVs4XT0wLGFbOV09MSxhWzEwXT0xLGFbMTFdPTIsYVsxMl09MixhWzEzXT0zLGFbMTRdPTMsYVsxNV09MCxhWzE2XT0wLGFbMTddPTQsYVsxOF09MSxhWzE5XT01LGFbMjBdPTIsYVsyMV09NixhWzIyXT0zLGFbMjNdPTc7bGV0IGk9cy5zdWJ0cmFjdCh0LGUsUzMpLGY9cy5tYWduaXR1ZGUoaSkqLjU7aWYoZyhuLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgZD1yLmxlbmd0aCxjPW4uX29mZnNldEF0dHJpYnV0ZT09PW90Lk5PTkU/MDoxLHU9bmV3IFVpbnQ4QXJyYXkoZC8zKS5maWxsKGMpO28uYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6dX0pfXJldHVybiBuZXcgUGUoe2F0dHJpYnV0ZXM6byxpbmRpY2VzOmEscHJpbWl0aXZlVHlwZTpGZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpuZXcgcGUocy5aRVJPLGYpLG9mZnNldEF0dHJpYnV0ZTpuLl9vZmZzZXRBdHRyaWJ1dGV9KX07VXA9ZHJ9KTt2YXIganA9e307JGUoanAse2RlZmF1bHQ6KCk9Pk0zfSk7ZnVuY3Rpb24gQzMobixlKXtyZXR1cm4gZyhlKSYmKG49VXAudW5wYWNrKG4sZSkpLFVwLmNyZWF0ZUdlb21ldHJ5KG4pfXZhciBNMyxMcD1YKCgpPT57TVQoKTtmZSgpO00zPUMzfSk7ZnVuY3Rpb24gbHMobixlLHQsbyxhLHIsaSxmLGQsYyl7bGV0IHU9bitlO3MubXVsdGlwbHlCeVNjYWxhcihvLE1hdGguY29zKHUpLHNoKSxzLm11bHRpcGx5QnlTY2FsYXIodCxNYXRoLnNpbih1KSxOVCkscy5hZGQoc2gsTlQsc2gpO2xldCBsPU1hdGguY29zKG4pO2w9bCpsO2xldCBtPU1hdGguc2luKG4pO209bSptO2xldCBiPXIvTWF0aC5zcXJ0KGkqbCthKm0pL2Y7cmV0dXJuIFllLmZyb21BeGlzQW5nbGUoc2gsYixJVCksWi5mcm9tUXVhdGVybmlvbihJVCxQVCksWi5tdWx0aXBseUJ5VmVjdG9yKFBULGQsYykscy5ub3JtYWxpemUoYyxjKSxzLm11bHRpcGx5QnlTY2FsYXIoYyxmLGMpLGN9dmFyIEdwLHNoLE5ULElULFBULGtULHZULHpwLE4zLEkzLFAzLGszLEdhLFZwPVgoKCk9PntNZSgpO2plKCk7SW4oKTtXbygpO0dwPXt9LHNoPW5ldyBzLE5UPW5ldyBzLElUPW5ldyBZZSxQVD1uZXcgWjtrVD1uZXcgcyx2VD1uZXcgcyx6cD1uZXcgcyxOMz1uZXcgcztHcC5yYWlzZVBvc2l0aW9uc1RvSGVpZ2h0PWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1lLmVsbGlwc29pZCxhPWUuaGVpZ2h0LHI9ZS5leHRydWRlZEhlaWdodCxpPXQ/bi5sZW5ndGgvMyoyOm4ubGVuZ3RoLzMsZj1uZXcgRmxvYXQ2NEFycmF5KGkqMyksZD1uLmxlbmd0aCxjPXQ/ZDowO2ZvcihsZXQgdT0wO3U8ZDt1Kz0zKXtsZXQgbD11KzEsbT11KzIsaD1zLmZyb21BcnJheShuLHUsa1QpO28uc2NhbGVUb0dlb2RldGljU3VyZmFjZShoLGgpO2xldCBiPXMuY2xvbmUoaCx2VCkscD1vLmdlb2RldGljU3VyZmFjZU5vcm1hbChoLE4zKSx5PXMubXVsdGlwbHlCeVNjYWxhcihwLGEsenApO3MuYWRkKGgseSxoKSx0JiYocy5tdWx0aXBseUJ5U2NhbGFyKHAscix5KSxzLmFkZChiLHksYiksZlt1K2NdPWIueCxmW2wrY109Yi55LGZbbStjXT1iLnopLGZbdV09aC54LGZbbF09aC55LGZbbV09aC56fXJldHVybiBmfTtJMz1uZXcgcyxQMz1uZXcgcyxrMz1uZXcgcztHcC5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucz1mdW5jdGlvbihuLGUsdCl7bGV0IG89bi5zZW1pTWlub3JBeGlzLGE9bi5zZW1pTWFqb3JBeGlzLHI9bi5yb3RhdGlvbixpPW4uY2VudGVyLGY9bi5ncmFudWxhcml0eSo4LGQ9bypvLGM9YSphLHU9YSpvLGw9cy5tYWduaXR1ZGUoaSksbT1zLm5vcm1hbGl6ZShpLEkzKSxoPXMuY3Jvc3Mocy5VTklUX1osaSxQMyk7aD1zLm5vcm1hbGl6ZShoLGgpO2xldCBiPXMuY3Jvc3MobSxoLGszKSxwPTErTWF0aC5jZWlsKGsuUElfT1ZFUl9UV08vZikseT1rLlBJX09WRVJfVFdPLyhwLTEpLFQ9ay5QSV9PVkVSX1RXTy1wKnk7VDwwJiYocC09TWF0aC5jZWlsKE1hdGguYWJzKFQpL3kpKTtsZXQgXz0yKihwKihwKzIpKSx3PWU/bmV3IEFycmF5KF8qMyk6dm9pZCAwLEU9MCxSPWtULFM9dlQsQz1wKjQqMyxJPUMtMSxNPTAsUD10P25ldyBBcnJheShDKTp2b2lkIDAsRixBLHgsTix2O2ZvcihUPWsuUElfT1ZFUl9UV08sUj1scyhULHIsYixoLGQsdSxjLGwsbSxSKSxlJiYod1tFKytdPVIueCx3W0UrK109Ui55LHdbRSsrXT1SLnopLHQmJihQW0ktLV09Ui56LFBbSS0tXT1SLnksUFtJLS1dPVIueCksVD1rLlBJX09WRVJfVFdPLXksRj0xO0Y8cCsxOysrRil7aWYoUj1scyhULHIsYixoLGQsdSxjLGwsbSxSKSxTPWxzKE1hdGguUEktVCxyLGIsaCxkLHUsYyxsLG0sUyksZSl7Zm9yKHdbRSsrXT1SLngsd1tFKytdPVIueSx3W0UrK109Ui56LHg9MipGKzIsQT0xO0E8eC0xOysrQSlOPUEvKHgtMSksdj1zLmxlcnAoUixTLE4senApLHdbRSsrXT12Lngsd1tFKytdPXYueSx3W0UrK109di56O3dbRSsrXT1TLngsd1tFKytdPVMueSx3W0UrK109Uy56fXQmJihQW0ktLV09Ui56LFBbSS0tXT1SLnksUFtJLS1dPVIueCxQW00rK109Uy54LFBbTSsrXT1TLnksUFtNKytdPVMueiksVD1rLlBJX09WRVJfVFdPLShGKzEpKnl9Zm9yKEY9cDtGPjE7LS1GKXtpZihUPWsuUElfT1ZFUl9UV08tKEYtMSkqeSxSPWxzKC1ULHIsYixoLGQsdSxjLGwsbSxSKSxTPWxzKFQrTWF0aC5QSSxyLGIsaCxkLHUsYyxsLG0sUyksZSl7Zm9yKHdbRSsrXT1SLngsd1tFKytdPVIueSx3W0UrK109Ui56LHg9MiooRi0xKSsyLEE9MTtBPHgtMTsrK0EpTj1BLyh4LTEpLHY9cy5sZXJwKFIsUyxOLHpwKSx3W0UrK109di54LHdbRSsrXT12Lnksd1tFKytdPXYuejt3W0UrK109Uy54LHdbRSsrXT1TLnksd1tFKytdPVMuen10JiYoUFtJLS1dPVIueixQW0ktLV09Ui55LFBbSS0tXT1SLngsUFtNKytdPVMueCxQW00rK109Uy55LFBbTSsrXT1TLnopfVQ9ay5QSV9PVkVSX1RXTyxSPWxzKC1ULHIsYixoLGQsdSxjLGwsbSxSKTtsZXQgVT17fTtyZXR1cm4gZSYmKHdbRSsrXT1SLngsd1tFKytdPVIueSx3W0VdPVIueixVLnBvc2l0aW9ucz13LFUubnVtUHRzPXApLHQmJihQW0ktLV09Ui56LFBbSS0tXT1SLnksUFtJXT1SLngsVS5vdXRlclBvc2l0aW9ucz1QKSxVfTtHYT1HcH0pO2Z1bmN0aW9uIHYzKG4pe249bj8/T2UuRU1QVFlfT0JKRUNULHRoaXMuZ2VvbWV0cnk9bi5nZW9tZXRyeSx0aGlzLm1vZGVsTWF0cml4PVEuY2xvbmUobi5tb2RlbE1hdHJpeD8/US5JREVOVElUWSksdGhpcy5pZD1uLmlkLHRoaXMucGlja1ByaW1pdGl2ZT1uLnBpY2tQcmltaXRpdmUsdGhpcy5hdHRyaWJ1dGVzPW4uYXR0cmlidXRlcz8/e30sdGhpcy53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5PXZvaWQgMCx0aGlzLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnk9dm9pZCAwfXZhciBsbyxkYz1YKCgpPT57c3QoKTt1bigpO2xvPXYzfSk7ZnVuY3Rpb24gVlQobixlLHQpe2xldCBvPWUudmVydGV4Rm9ybWF0LGE9ZS5jZW50ZXIscj1lLnNlbWlNYWpvckF4aXMsaT1lLnNlbWlNaW5vckF4aXMsZj1lLmVsbGlwc29pZCxkPWUuc3RSb3RhdGlvbixjPXQ/bi5sZW5ndGgvMyoyOm4ubGVuZ3RoLzMsdT1lLnNoYWRvd1ZvbHVtZSxsPW8uc3Q/bmV3IEZsb2F0MzJBcnJheShjKjIpOnZvaWQgMCxtPW8ubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoYyozKTp2b2lkIDAsaD1vLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShjKjMpOnZvaWQgMCxiPW8uYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoYyozKTp2b2lkIDAscD11P25ldyBGbG9hdDMyQXJyYXkoYyozKTp2b2lkIDAseT0wLFQ9QlQsXz1VVCx3PWpULEU9bmV3IG5vKGYpLFI9RS5wcm9qZWN0KGYuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoYSx1aCksTFQpLFM9Zi5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGEsaHMpO2YuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKFMsUyk7bGV0IEM9RFQsST1GMztpZihkIT09MCl7bGV0IHY9WWUuZnJvbUF4aXNBbmdsZShTLGQscXApO0M9Wi5mcm9tUXVhdGVybmlvbih2LEMpLHY9WWUuZnJvbUF4aXNBbmdsZShTLC1kLHFwKSxJPVouZnJvbVF1YXRlcm5pb24odixJKX1lbHNlIEM9Wi5jbG9uZShaLklERU5USVRZLEMpLEk9Wi5jbG9uZShaLklERU5USVRZLEkpO2xldCBNPVkuZnJvbUVsZW1lbnRzKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkselQpLFA9WS5mcm9tRWxlbWVudHMoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxHVCksRj1uLmxlbmd0aCxBPXQ/RjowLHg9QS8zKjI7Zm9yKGxldCB2PTA7djxGO3YrPTMpe2xldCBVPXYrMSxMPXYrMixEPXMuZnJvbUFycmF5KG4sdixocyk7aWYoby5zdCl7bGV0IEc9Wi5tdWx0aXBseUJ5VmVjdG9yKEMsRCxIcCksVj1FLnByb2plY3QoZi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhHLHVoKSxLcCk7cy5zdWJ0cmFjdChWLFIsViksJG4ueD0oVi54K3IpLygyKnIpLCRuLnk9KFYueStpKS8oMippKSxNLng9TWF0aC5taW4oJG4ueCxNLngpLE0ueT1NYXRoLm1pbigkbi55LE0ueSksUC54PU1hdGgubWF4KCRuLngsUC54KSxQLnk9TWF0aC5tYXgoJG4ueSxQLnkpLHQmJihsW3kreF09JG4ueCxsW3krMSt4XT0kbi55KSxsW3krK109JG4ueCxsW3krK109JG4ueX0oby5ub3JtYWx8fG8udGFuZ2VudHx8by5iaXRhbmdlbnR8fHUpJiYoVD1mLmdlb2RldGljU3VyZmFjZU5vcm1hbChELFQpLHUmJihwW3YrQV09LVQueCxwW1UrQV09LVQueSxwW0wrQV09LVQueiksKG8ubm9ybWFsfHxvLnRhbmdlbnR8fG8uYml0YW5nZW50KSYmKChvLnRhbmdlbnR8fG8uYml0YW5nZW50KSYmKF89cy5ub3JtYWxpemUocy5jcm9zcyhzLlVOSVRfWixULF8pLF8pLFoubXVsdGlwbHlCeVZlY3RvcihJLF8sXykpLG8ubm9ybWFsJiYobVt2XT1ULngsbVtVXT1ULnksbVtMXT1ULnosdCYmKG1bditBXT0tVC54LG1bVStBXT0tVC55LG1bTCtBXT0tVC56KSksby50YW5nZW50JiYoaFt2XT1fLngsaFtVXT1fLnksaFtMXT1fLnosdCYmKGhbditBXT0tXy54LGhbVStBXT0tXy55LGhbTCtBXT0tXy56KSksby5iaXRhbmdlbnQmJih3PXMubm9ybWFsaXplKHMuY3Jvc3MoVCxfLHcpLHcpLGJbdl09dy54LGJbVV09dy55LGJbTF09dy56LHQmJihiW3YrQV09dy54LGJbVStBXT13LnksYltMK0FdPXcueikpKSl9aWYoby5zdCl7Rj1sLmxlbmd0aDtmb3IobGV0IHY9MDt2PEY7dis9MilsW3ZdPShsW3ZdLU0ueCkvKFAueC1NLngpLGxbdisxXT0obFt2KzFdLU0ueSkvKFAueS1NLnkpfWxldCBOPW5ldyBRZTtpZihvLnBvc2l0aW9uKXtsZXQgdj1HYS5yYWlzZVBvc2l0aW9uc1RvSGVpZ2h0KG4sZSx0KTtOLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6dn0pfWlmKG8uc3QmJihOLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpsfSkpLG8ubm9ybWFsJiYoTi5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSksby50YW5nZW50JiYoTi50YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpofSkpLG8uYml0YW5nZW50JiYoTi5iaXRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmJ9KSksdSYmKE4uZXh0cnVkZURpcmVjdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pKSx0JiZnKGUub2Zmc2V0QXR0cmlidXRlKSl7bGV0IHY9bmV3IFVpbnQ4QXJyYXkoYyk7aWYoZS5vZmZzZXRBdHRyaWJ1dGU9PT1vdC5UT1Apdj12LmZpbGwoMSwwLGMvMik7ZWxzZXtsZXQgVT1lLm9mZnNldEF0dHJpYnV0ZT09PW90Lk5PTkU/MDoxO3Y9di5maWxsKFUpfU4uYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6dn0pfXJldHVybiBOfWZ1bmN0aW9uIEhUKG4pe2xldCBlPW5ldyBBcnJheSgxMioobioobisxKSktNiksdD0wLG8sYSxyLGksZjtmb3Iobz0wLHI9MSxpPTA7aTwzO2krKyllW3QrK109cisrLGVbdCsrXT1vLGVbdCsrXT1yO2ZvcihpPTI7aTxuKzE7KytpKXtmb3Iocj1pKihpKzEpLTEsbz0oaS0xKSppLTEsZVt0KytdPXIrKyxlW3QrK109byxlW3QrK109cixhPTIqaSxmPTA7ZjxhLTE7KytmKWVbdCsrXT1yLGVbdCsrXT1vKyssZVt0KytdPW8sZVt0KytdPXIrKyxlW3QrK109byxlW3QrK109cjtlW3QrK109cisrLGVbdCsrXT1vLGVbdCsrXT1yfWZvcihhPW4qMiwrK3IsKytvLGk9MDtpPGEtMTsrK2kpZVt0KytdPXIsZVt0KytdPW8rKyxlW3QrK109byxlW3QrK109cisrLGVbdCsrXT1vLGVbdCsrXT1yO2ZvcihlW3QrK109cixlW3QrK109bysrLGVbdCsrXT1vLGVbdCsrXT1yKyssZVt0KytdPW8rKyxlW3QrK109bywrK28saT1uLTE7aT4xOy0taSl7Zm9yKGVbdCsrXT1vKyssZVt0KytdPW8sZVt0KytdPXIsYT0yKmksZj0wO2Y8YS0xOysrZillW3QrK109cixlW3QrK109bysrLGVbdCsrXT1vLGVbdCsrXT1yKyssZVt0KytdPW8sZVt0KytdPXI7ZVt0KytdPW8rKyxlW3QrK109bysrLGVbdCsrXT1yKyt9Zm9yKGk9MDtpPDM7aSsrKWVbdCsrXT1vKyssZVt0KytdPW8sZVt0KytdPXI7cmV0dXJuIGV9ZnVuY3Rpb24gRDMobil7bGV0IGU9bi5jZW50ZXI7dWM9cy5tdWx0aXBseUJ5U2NhbGFyKG4uZWxsaXBzb2lkLmdlb2RldGljU3VyZmFjZU5vcm1hbChlLHVjKSxuLmhlaWdodCx1YyksdWM9cy5hZGQoZSx1Yyx1Yyk7bGV0IHQ9bmV3IHBlKHVjLG4uc2VtaU1ham9yQXhpcyksbz1HYS5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyhuLCEwLCExKSxhPW8ucG9zaXRpb25zLHI9by5udW1QdHMsaT1WVChhLG4sITEpLGY9SFQocik7cmV0dXJuIGY9SWUuY3JlYXRlVHlwZWRBcnJheShhLmxlbmd0aC8zLGYpLHtib3VuZGluZ1NwaGVyZTp0LGF0dHJpYnV0ZXM6aSxpbmRpY2VzOmZ9fWZ1bmN0aW9uIEIzKG4sZSl7bGV0IHQ9ZS52ZXJ0ZXhGb3JtYXQsbz1lLmNlbnRlcixhPWUuc2VtaU1ham9yQXhpcyxyPWUuc2VtaU1pbm9yQXhpcyxpPWUuZWxsaXBzb2lkLGY9ZS5oZWlnaHQsZD1lLmV4dHJ1ZGVkSGVpZ2h0LGM9ZS5zdFJvdGF0aW9uLHU9bi5sZW5ndGgvMyoyLGw9bmV3IEZsb2F0NjRBcnJheSh1KjMpLG09dC5zdD9uZXcgRmxvYXQzMkFycmF5KHUqMik6dm9pZCAwLGg9dC5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheSh1KjMpOnZvaWQgMCxiPXQudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHUqMyk6dm9pZCAwLHA9dC5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheSh1KjMpOnZvaWQgMCx5PWUuc2hhZG93Vm9sdW1lLFQ9eT9uZXcgRmxvYXQzMkFycmF5KHUqMyk6dm9pZCAwLF89MCx3PUJULEU9VVQsUj1qVCxTPW5ldyBubyhpKSxDPVMucHJvamVjdChpLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG8sdWgpLExUKSxJPWkuc2NhbGVUb0dlb2RldGljU3VyZmFjZShvLGhzKTtpLmdlb2RldGljU3VyZmFjZU5vcm1hbChJLEkpO2xldCBNPVllLmZyb21BeGlzQW5nbGUoSSxjLHFwKSxQPVouZnJvbVF1YXRlcm5pb24oTSxEVCksRj1ZLmZyb21FbGVtZW50cyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHpUKSxBPVkuZnJvbUVsZW1lbnRzKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksR1QpLHg9bi5sZW5ndGgsTj14LzMqMjtmb3IobGV0IFU9MDtVPHg7VSs9Myl7bGV0IEw9VSsxLEQ9VSsyLEc9cy5mcm9tQXJyYXkobixVLGhzKSxWO2lmKHQuc3Qpe2xldCBKPVoubXVsdGlwbHlCeVZlY3RvcihQLEcsSHApLHJlPVMucHJvamVjdChpLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKEosdWgpLEtwKTtzLnN1YnRyYWN0KHJlLEMscmUpLCRuLng9KHJlLngrYSkvKDIqYSksJG4ueT0ocmUueStyKS8oMipyKSxGLng9TWF0aC5taW4oJG4ueCxGLngpLEYueT1NYXRoLm1pbigkbi55LEYueSksQS54PU1hdGgubWF4KCRuLngsQS54KSxBLnk9TWF0aC5tYXgoJG4ueSxBLnkpLG1bXytOXT0kbi54LG1bXysxK05dPSRuLnksbVtfKytdPSRuLngsbVtfKytdPSRuLnl9Rz1pLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoRyxHKSxWPXMuY2xvbmUoRyxIcCksdz1pLmdlb2RldGljU3VyZmFjZU5vcm1hbChHLHcpLHkmJihUW1UreF09LXcueCxUW0wreF09LXcueSxUW0QreF09LXcueik7bGV0IE89cy5tdWx0aXBseUJ5U2NhbGFyKHcsZixGVCk7aWYoRz1zLmFkZChHLE8sRyksTz1zLm11bHRpcGx5QnlTY2FsYXIodyxkLE8pLFY9cy5hZGQoVixPLFYpLHQucG9zaXRpb24mJihsW1UreF09Vi54LGxbTCt4XT1WLnksbFtEK3hdPVYueixsW1VdPUcueCxsW0xdPUcueSxsW0RdPUcueiksdC5ub3JtYWx8fHQudGFuZ2VudHx8dC5iaXRhbmdlbnQpe1I9cy5jbG9uZSh3LFIpO2xldCBKPXMuZnJvbUFycmF5KG4sKFUrMykleCxGVCk7cy5zdWJ0cmFjdChKLEcsSik7bGV0IHJlPXMuc3VidHJhY3QoVixHLEtwKTt3PXMubm9ybWFsaXplKHMuY3Jvc3MocmUsSix3KSx3KSx0Lm5vcm1hbCYmKGhbVV09dy54LGhbTF09dy55LGhbRF09dy56LGhbVSt4XT13LngsaFtMK3hdPXcueSxoW0QreF09dy56KSx0LnRhbmdlbnQmJihFPXMubm9ybWFsaXplKHMuY3Jvc3MoUix3LEUpLEUpLGJbVV09RS54LGJbTF09RS55LGJbRF09RS56LGJbVSt4XT1FLngsYltVKzEreF09RS55LGJbVSsyK3hdPUUueiksdC5iaXRhbmdlbnQmJihwW1VdPVIueCxwW0xdPVIueSxwW0RdPVIueixwW1UreF09Ui54LHBbTCt4XT1SLnkscFtEK3hdPVIueil9fWlmKHQuc3Qpe3g9bS5sZW5ndGg7Zm9yKGxldCBVPTA7VTx4O1UrPTIpbVtVXT0obVtVXS1GLngpLyhBLngtRi54KSxtW1UrMV09KG1bVSsxXS1GLnkpLyhBLnktRi55KX1sZXQgdj1uZXcgUWU7aWYodC5wb3NpdGlvbiYmKHYucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpsfSkpLHQuc3QmJih2LnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczptfSkpLHQubm9ybWFsJiYodi5ub3JtYWw9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmh9KSksdC50YW5nZW50JiYodi50YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSkpLHQuYml0YW5nZW50JiYodi5iaXRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnB9KSkseSYmKHYuZXh0cnVkZURpcmVjdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6VH0pKSxnKGUub2Zmc2V0QXR0cmlidXRlKSl7bGV0IFU9bmV3IFVpbnQ4QXJyYXkodSk7aWYoZS5vZmZzZXRBdHRyaWJ1dGU9PT1vdC5UT1ApVT1VLmZpbGwoMSwwLHUvMik7ZWxzZXtsZXQgTD1lLm9mZnNldEF0dHJpYnV0ZT09PW90Lk5PTkU/MDoxO1U9VS5maWxsKEwpfXYuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6VX0pfXJldHVybiB2fWZ1bmN0aW9uIFUzKG4pe2xldCBlPW4ubGVuZ3RoLzMsdD1JZS5jcmVhdGVUeXBlZEFycmF5KGUsZSo2KSxvPTA7Zm9yKGxldCBhPTA7YTxlO2ErKyl7bGV0IHI9YSxpPWErZSxmPShyKzEpJWUsZD1mK2U7dFtvKytdPXIsdFtvKytdPWksdFtvKytdPWYsdFtvKytdPWYsdFtvKytdPWksdFtvKytdPWR9cmV0dXJuIHR9ZnVuY3Rpb24gajMobil7bGV0IGU9bi5jZW50ZXIsdD1uLmVsbGlwc29pZCxvPW4uc2VtaU1ham9yQXhpcyxhPXMubXVsdGlwbHlCeVNjYWxhcih0Lmdlb2RldGljU3VyZmFjZU5vcm1hbChlLGhzKSxuLmhlaWdodCxocyk7ZmguY2VudGVyPXMuYWRkKGUsYSxmaC5jZW50ZXIpLGZoLnJhZGl1cz1vLGE9cy5tdWx0aXBseUJ5U2NhbGFyKHQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGUsYSksbi5leHRydWRlZEhlaWdodCxhKSxkaC5jZW50ZXI9cy5hZGQoZSxhLGRoLmNlbnRlciksZGgucmFkaXVzPW87bGV0IHI9R2EuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnMobiwhMCwhMCksaT1yLnBvc2l0aW9ucyxmPXIubnVtUHRzLGQ9ci5vdXRlclBvc2l0aW9ucyxjPXBlLnVuaW9uKGZoLGRoKSx1PVZUKGksbiwhMCksbD1IVChmKSxtPWwubGVuZ3RoO2wubGVuZ3RoPW0qMjtsZXQgaD1pLmxlbmd0aC8zO2ZvcihsZXQgRT0wO0U8bTtFKz0zKWxbRSttXT1sW0UrMl0raCxsW0UrMSttXT1sW0UrMV0raCxsW0UrMittXT1sW0VdK2g7bGV0IGI9SWUuY3JlYXRlVHlwZWRBcnJheShoKjIvMyxsKSxwPW5ldyBQZSh7YXR0cmlidXRlczp1LGluZGljZXM6YixwcmltaXRpdmVUeXBlOkZlLlRSSUFOR0xFU30pLHk9QjMoZCxuKTtsPVUzKGQpO2xldCBUPUllLmNyZWF0ZVR5cGVkQXJyYXkoZC5sZW5ndGgqMi8zLGwpLF89bmV3IFBlKHthdHRyaWJ1dGVzOnksaW5kaWNlczpULHByaW1pdGl2ZVR5cGU6RmUuVFJJQU5HTEVTfSksdz1MdC5jb21iaW5lSW5zdGFuY2VzKFtuZXcgbG8oe2dlb21ldHJ5OnB9KSxuZXcgbG8oe2dlb21ldHJ5Ol99KV0pO3JldHVybntib3VuZGluZ1NwaGVyZTpjLGF0dHJpYnV0ZXM6d1swXS5hdHRyaWJ1dGVzLGluZGljZXM6d1swXS5pbmRpY2VzfX1mdW5jdGlvbiBLVChuLGUsdCxvLGEscixpKXtsZXQgZD1HYS5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyh7Y2VudGVyOm4sc2VtaU1ham9yQXhpczplLHNlbWlNaW5vckF4aXM6dCxyb3RhdGlvbjpvLGdyYW51bGFyaXR5OmF9LCExLCEwKS5vdXRlclBvc2l0aW9ucyxjPWQubGVuZ3RoLzMsdT1uZXcgQXJyYXkoYyk7Zm9yKGxldCBtPTA7bTxjOysrbSl1W21dPXMuZnJvbUFycmF5KGQsbSozKTtsZXQgbD14ZS5mcm9tQ2FydGVzaWFuQXJyYXkodSxyLGkpO3JldHVybiBsLndpZHRoPmsuUEkmJihsLm5vcnRoPWwubm9ydGg+MD9rLlBJX09WRVJfVFdPLWsuRVBTSUxPTjc6bC5ub3J0aCxsLnNvdXRoPWwuc291dGg8MD9rLkVQU0lMT043LWsuUElfT1ZFUl9UV086bC5zb3V0aCxsLmVhc3Q9ay5QSSxsLndlc3Q9LWsuUEkpLGx9ZnVuY3Rpb24gbHIobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5jZW50ZXIsdD1uLmVsbGlwc29pZD8/Sy5kZWZhdWx0LG89bi5zZW1pTWFqb3JBeGlzLGE9bi5zZW1pTWlub3JBeGlzLHI9bi5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsaT1uLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVCxmPW4uaGVpZ2h0Pz8wLGQ9bi5leHRydWRlZEhlaWdodD8/Zjt0aGlzLl9jZW50ZXI9cy5jbG9uZShlKSx0aGlzLl9zZW1pTWFqb3JBeGlzPW8sdGhpcy5fc2VtaU1pbm9yQXhpcz1hLHRoaXMuX2VsbGlwc29pZD1LLmNsb25lKHQpLHRoaXMuX3JvdGF0aW9uPW4ucm90YXRpb24/PzAsdGhpcy5fc3RSb3RhdGlvbj1uLnN0Um90YXRpb24/PzAsdGhpcy5faGVpZ2h0PU1hdGgubWF4KGQsZiksdGhpcy5fZ3JhbnVsYXJpdHk9cix0aGlzLl92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoaSksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4oZCxmKSx0aGlzLl9zaGFkb3dWb2x1bWU9bi5zaGFkb3dWb2x1bWU/PyExLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUVsbGlwc2VHZW9tZXRyeSIsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPW4ub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3JlY3RhbmdsZT12b2lkIDAsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz12b2lkIDB9ZnVuY3Rpb24gTDMobil7bGV0IGU9LW4uX3N0Um90YXRpb247aWYoZT09PTApcmV0dXJuWzAsMCwwLDEsMSwwXTtsZXQgbz1HYS5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyh7Y2VudGVyOm4uX2NlbnRlcixzZW1pTWFqb3JBeGlzOm4uX3NlbWlNYWpvckF4aXMsc2VtaU1pbm9yQXhpczpuLl9zZW1pTWlub3JBeGlzLHJvdGF0aW9uOm4uX3JvdGF0aW9uLGdyYW51bGFyaXR5Om4uX2dyYW51bGFyaXR5fSwhMSwhMCkub3V0ZXJQb3NpdGlvbnMsYT1vLmxlbmd0aC8zLHI9bmV3IEFycmF5KGEpO2ZvcihsZXQgZD0wO2Q8YTsrK2QpcltkXT1zLmZyb21BcnJheShvLGQqMyk7bGV0IGk9bi5fZWxsaXBzb2lkLGY9bi5yZWN0YW5nbGU7cmV0dXJuIFBlLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzKHIsZSxpLGYpfXZhciBocyxIcCxLcCxGVCwkbixEVCxGMyxxcCxCVCxVVCxqVCx1aCxMVCx6VCxHVCx1YyxmaCxkaCxxVCxXVCxYVCx1cixWYSxXcD1YKCgpPT57RXQoKTt2dCgpO01lKCk7Z3QoKTtDdCgpO3N0KCk7ZmUoKTtWcCgpO1ZlKCk7UHIoKTtYdCgpO1l0KCk7cm4oKTtkYygpO1VvKCk7ZnIoKTtadCgpO2plKCk7SW4oKTt0bigpO1dvKCk7aG4oKTtDbygpO2hzPW5ldyBzLEhwPW5ldyBzLEtwPW5ldyBzLEZUPW5ldyBzLCRuPW5ldyBZLERUPW5ldyBaLEYzPW5ldyBaLHFwPW5ldyBZZSxCVD1uZXcgcyxVVD1uZXcgcyxqVD1uZXcgcyx1aD1uZXcgYWUsTFQ9bmV3IHMselQ9bmV3IFksR1Q9bmV3IFk7dWM9bmV3IHM7Zmg9bmV3IHBlLGRoPW5ldyBwZTtsci5wYWNrZWRMZW5ndGg9cy5wYWNrZWRMZW5ndGgrSy5wYWNrZWRMZW5ndGgraGUucGFja2VkTGVuZ3RoKzk7bHIucGFjaz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIHQ9dD8/MCxzLnBhY2sobi5fY2VudGVyLGUsdCksdCs9cy5wYWNrZWRMZW5ndGgsSy5wYWNrKG4uX2VsbGlwc29pZCxlLHQpLHQrPUsucGFja2VkTGVuZ3RoLGhlLnBhY2sobi5fdmVydGV4Rm9ybWF0LGUsdCksdCs9aGUucGFja2VkTGVuZ3RoLGVbdCsrXT1uLl9zZW1pTWFqb3JBeGlzLGVbdCsrXT1uLl9zZW1pTWlub3JBeGlzLGVbdCsrXT1uLl9yb3RhdGlvbixlW3QrK109bi5fc3RSb3RhdGlvbixlW3QrK109bi5faGVpZ2h0LGVbdCsrXT1uLl9ncmFudWxhcml0eSxlW3QrK109bi5fZXh0cnVkZWRIZWlnaHQsZVt0KytdPW4uX3NoYWRvd1ZvbHVtZT8xOjAsZVt0XT1uLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLGV9O3FUPW5ldyBzLFdUPW5ldyBLLFhUPW5ldyBoZSx1cj17Y2VudGVyOnFULGVsbGlwc29pZDpXVCx2ZXJ0ZXhGb3JtYXQ6WFQsc2VtaU1ham9yQXhpczp2b2lkIDAsc2VtaU1pbm9yQXhpczp2b2lkIDAscm90YXRpb246dm9pZCAwLHN0Um90YXRpb246dm9pZCAwLGhlaWdodDp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxzaGFkb3dWb2x1bWU6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2xyLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvPXMudW5wYWNrKG4sZSxxVCk7ZSs9cy5wYWNrZWRMZW5ndGg7bGV0IGE9Sy51bnBhY2sobixlLFdUKTtlKz1LLnBhY2tlZExlbmd0aDtsZXQgcj1oZS51bnBhY2sobixlLFhUKTtlKz1oZS5wYWNrZWRMZW5ndGg7bGV0IGk9bltlKytdLGY9bltlKytdLGQ9bltlKytdLGM9bltlKytdLHU9bltlKytdLGw9bltlKytdLG09bltlKytdLGg9bltlKytdPT09MSxiPW5bZV07cmV0dXJuIGcodCk/KHQuX2NlbnRlcj1zLmNsb25lKG8sdC5fY2VudGVyKSx0Ll9lbGxpcHNvaWQ9Sy5jbG9uZShhLHQuX2VsbGlwc29pZCksdC5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKHIsdC5fdmVydGV4Rm9ybWF0KSx0Ll9zZW1pTWFqb3JBeGlzPWksdC5fc2VtaU1pbm9yQXhpcz1mLHQuX3JvdGF0aW9uPWQsdC5fc3RSb3RhdGlvbj1jLHQuX2hlaWdodD11LHQuX2dyYW51bGFyaXR5PWwsdC5fZXh0cnVkZWRIZWlnaHQ9bSx0Ll9zaGFkb3dWb2x1bWU9aCx0Ll9vZmZzZXRBdHRyaWJ1dGU9Yj09PS0xP3ZvaWQgMDpiLHQpOih1ci5oZWlnaHQ9dSx1ci5leHRydWRlZEhlaWdodD1tLHVyLmdyYW51bGFyaXR5PWwsdXIuc3RSb3RhdGlvbj1jLHVyLnJvdGF0aW9uPWQsdXIuc2VtaU1ham9yQXhpcz1pLHVyLnNlbWlNaW5vckF4aXM9Zix1ci5zaGFkb3dWb2x1bWU9aCx1ci5vZmZzZXRBdHRyaWJ1dGU9Yj09PS0xP3ZvaWQgMDpiLG5ldyBscih1cikpfTtsci5jb21wdXRlUmVjdGFuZ2xlPWZ1bmN0aW9uKG4sZSl7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IHQ9bi5jZW50ZXIsbz1uLmVsbGlwc29pZD8/Sy5kZWZhdWx0LGE9bi5zZW1pTWFqb3JBeGlzLHI9bi5zZW1pTWlub3JBeGlzLGk9bi5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsZj1uLnJvdGF0aW9uPz8wO3JldHVybiBLVCh0LGEscixmLGksbyxlKX07bHIuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7aWYobi5fc2VtaU1ham9yQXhpczw9MHx8bi5fc2VtaU1pbm9yQXhpczw9MClyZXR1cm47bGV0IGU9bi5faGVpZ2h0LHQ9bi5fZXh0cnVkZWRIZWlnaHQsbz0hay5lcXVhbHNFcHNpbG9uKGUsdCwwLGsuRVBTSUxPTjIpO24uX2NlbnRlcj1uLl9lbGxpcHNvaWQuc2NhbGVUb0dlb2RldGljU3VyZmFjZShuLl9jZW50ZXIsbi5fY2VudGVyKTtsZXQgYT17Y2VudGVyOm4uX2NlbnRlcixzZW1pTWFqb3JBeGlzOm4uX3NlbWlNYWpvckF4aXMsc2VtaU1pbm9yQXhpczpuLl9zZW1pTWlub3JBeGlzLGVsbGlwc29pZDpuLl9lbGxpcHNvaWQscm90YXRpb246bi5fcm90YXRpb24saGVpZ2h0OmUsZ3JhbnVsYXJpdHk6bi5fZ3JhbnVsYXJpdHksdmVydGV4Rm9ybWF0Om4uX3ZlcnRleEZvcm1hdCxzdFJvdGF0aW9uOm4uX3N0Um90YXRpb259LHI7aWYobylhLmV4dHJ1ZGVkSGVpZ2h0PXQsYS5zaGFkb3dWb2x1bWU9bi5fc2hhZG93Vm9sdW1lLGEub2Zmc2V0QXR0cmlidXRlPW4uX29mZnNldEF0dHJpYnV0ZSxyPWozKGEpO2Vsc2UgaWYocj1EMyhhKSxnKG4uX29mZnNldEF0dHJpYnV0ZSkpe2xldCBpPXIuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLGY9bi5fb2Zmc2V0QXR0cmlidXRlPT09b3QuTk9ORT8wOjEsZD1uZXcgVWludDhBcnJheShpLzMpLmZpbGwoZik7ci5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmR9KX1yZXR1cm4gbmV3IFBlKHthdHRyaWJ1dGVzOnIuYXR0cmlidXRlcyxpbmRpY2VzOnIuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkZlLlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpyLmJvdW5kaW5nU3BoZXJlLG9mZnNldEF0dHJpYnV0ZTpuLl9vZmZzZXRBdHRyaWJ1dGV9KX07bHIuY3JlYXRlU2hhZG93Vm9sdW1lPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1uLl9ncmFudWxhcml0eSxhPW4uX2VsbGlwc29pZCxyPWUobyxhKSxpPXQobyxhKTtyZXR1cm4gbmV3IGxyKHtjZW50ZXI6bi5fY2VudGVyLHNlbWlNYWpvckF4aXM6bi5fc2VtaU1ham9yQXhpcyxzZW1pTWlub3JBeGlzOm4uX3NlbWlNaW5vckF4aXMsZWxsaXBzb2lkOmEscm90YXRpb246bi5fcm90YXRpb24sc3RSb3RhdGlvbjpuLl9zdFJvdGF0aW9uLGdyYW51bGFyaXR5Om8sZXh0cnVkZWRIZWlnaHQ6cixoZWlnaHQ6aSx2ZXJ0ZXhGb3JtYXQ6aGUuUE9TSVRJT05fT05MWSxzaGFkb3dWb2x1bWU6ITB9KX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobHIucHJvdG90eXBlLHtyZWN0YW5nbGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMuX3JlY3RhbmdsZSl8fCh0aGlzLl9yZWN0YW5nbGU9S1QodGhpcy5fY2VudGVyLHRoaXMuX3NlbWlNYWpvckF4aXMsdGhpcy5fc2VtaU1pbm9yQXhpcyx0aGlzLl9yb3RhdGlvbix0aGlzLl9ncmFudWxhcml0eSx0aGlzLl9lbGxpcHNvaWQpKSx0aGlzLl9yZWN0YW5nbGV9fSx0ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzKXx8KHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9TDModGhpcykpLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHN9fX0pO1ZhPWxyfSk7ZnVuY3Rpb24gTHIobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5yYWRpdXMsdD17Y2VudGVyOm4uY2VudGVyLHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOmUsZWxsaXBzb2lkOm4uZWxsaXBzb2lkLGhlaWdodDpuLmhlaWdodCxleHRydWRlZEhlaWdodDpuLmV4dHJ1ZGVkSGVpZ2h0LGdyYW51bGFyaXR5Om4uZ3JhbnVsYXJpdHksdmVydGV4Rm9ybWF0Om4udmVydGV4Rm9ybWF0LHN0Um90YXRpb246bi5zdFJvdGF0aW9uLHNoYWRvd1ZvbHVtZTpuLnNoYWRvd1ZvbHVtZX07dGhpcy5fZWxsaXBzZUdlb21ldHJ5PW5ldyBWYSh0KSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDaXJjbGVHZW9tZXRyeSJ9dmFyIFlULHlvLFhwLEpUPVgoKCk9PntNZSgpO3N0KCk7ZmUoKTtXcCgpO1ZlKCk7Q28oKTtMci5wYWNrZWRMZW5ndGg9VmEucGFja2VkTGVuZ3RoO0xyLnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiBWYS5wYWNrKG4uX2VsbGlwc2VHZW9tZXRyeSxlLHQpfTtZVD1uZXcgVmEoe2NlbnRlcjpuZXcgcyxzZW1pTWFqb3JBeGlzOjEsc2VtaU1pbm9yQXhpczoxfSkseW89e2NlbnRlcjpuZXcgcyxyYWRpdXM6dm9pZCAwLGVsbGlwc29pZDpLLmNsb25lKEsuZGVmYXVsdCksaGVpZ2h0OnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLHZlcnRleEZvcm1hdDpuZXcgaGUsc3RSb3RhdGlvbjp2b2lkIDAsc2VtaU1ham9yQXhpczp2b2lkIDAsc2VtaU1pbm9yQXhpczp2b2lkIDAsc2hhZG93Vm9sdW1lOnZvaWQgMH07THIudW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1WYS51bnBhY2sobixlLFlUKTtyZXR1cm4geW8uY2VudGVyPXMuY2xvbmUoby5fY2VudGVyLHlvLmNlbnRlcikseW8uZWxsaXBzb2lkPUsuY2xvbmUoby5fZWxsaXBzb2lkLHlvLmVsbGlwc29pZCkseW8uZWxsaXBzb2lkPUsuY2xvbmUoby5fZWxsaXBzb2lkLFlULl9lbGxpcHNvaWQpLHlvLmhlaWdodD1vLl9oZWlnaHQseW8uZXh0cnVkZWRIZWlnaHQ9by5fZXh0cnVkZWRIZWlnaHQseW8uZ3JhbnVsYXJpdHk9by5fZ3JhbnVsYXJpdHkseW8udmVydGV4Rm9ybWF0PWhlLmNsb25lKG8uX3ZlcnRleEZvcm1hdCx5by52ZXJ0ZXhGb3JtYXQpLHlvLnN0Um90YXRpb249by5fc3RSb3RhdGlvbix5by5zaGFkb3dWb2x1bWU9by5fc2hhZG93Vm9sdW1lLGcodCk/KHlvLnNlbWlNYWpvckF4aXM9by5fc2VtaU1ham9yQXhpcyx5by5zZW1pTWlub3JBeGlzPW8uX3NlbWlNaW5vckF4aXMsdC5fZWxsaXBzZUdlb21ldHJ5PW5ldyBWYSh5byksdCk6KHlvLnJhZGl1cz1vLl9zZW1pTWFqb3JBeGlzLG5ldyBMcih5bykpfTtMci5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihuKXtyZXR1cm4gVmEuY3JlYXRlR2VvbWV0cnkobi5fZWxsaXBzZUdlb21ldHJ5KX07THIuY3JlYXRlU2hhZG93Vm9sdW1lPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1uLl9lbGxpcHNlR2VvbWV0cnkuX2dyYW51bGFyaXR5LGE9bi5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQscj1lKG8sYSksaT10KG8sYSk7cmV0dXJuIG5ldyBMcih7Y2VudGVyOm4uX2VsbGlwc2VHZW9tZXRyeS5fY2VudGVyLHJhZGl1czpuLl9lbGxpcHNlR2VvbWV0cnkuX3NlbWlNYWpvckF4aXMsZWxsaXBzb2lkOmEsc3RSb3RhdGlvbjpuLl9lbGxpcHNlR2VvbWV0cnkuX3N0Um90YXRpb24sZ3JhbnVsYXJpdHk6byxleHRydWRlZEhlaWdodDpyLGhlaWdodDppLHZlcnRleEZvcm1hdDpoZS5QT1NJVElPTl9PTkxZLHNoYWRvd1ZvbHVtZTohMH0pfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhMci5wcm90b3R5cGUse3JlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc2VHZW9tZXRyeS5yZWN0YW5nbGV9fSx0ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzZUdlb21ldHJ5LnRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHN9fX0pO1hwPUxyfSk7dmFyIFlwPXt9OyRlKFlwLHtkZWZhdWx0OigpPT5HM30pO2Z1bmN0aW9uIHozKG4sZSl7cmV0dXJuIGcoZSkmJihuPVhwLnVucGFjayhuLGUpKSxuLl9lbGxpcHNlR2VvbWV0cnkuX2NlbnRlcj1zLmNsb25lKG4uX2VsbGlwc2VHZW9tZXRyeS5fY2VudGVyKSxuLl9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZD1LLmNsb25lKG4uX2VsbGlwc2VHZW9tZXRyeS5fZWxsaXBzb2lkKSxYcC5jcmVhdGVHZW9tZXRyeShuKX12YXIgRzMsSnA9WCgoKT0+e01lKCk7SlQoKTtmZSgpO1ZlKCk7RzM9ejN9KTtmdW5jdGlvbiBWMyhuKXtsZXQgZT1uLmNlbnRlcjtsYz1zLm11bHRpcGx5QnlTY2FsYXIobi5lbGxpcHNvaWQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGUsbGMpLG4uaGVpZ2h0LGxjKSxsYz1zLmFkZChlLGxjLGxjKTtsZXQgdD1uZXcgcGUobGMsbi5zZW1pTWFqb3JBeGlzKSxvPUdhLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKG4sITEsITApLm91dGVyUG9zaXRpb25zLGE9bmV3IFFlKHtwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkdhLnJhaXNlUG9zaXRpb25zVG9IZWlnaHQobyxuLCExKX0pfSkscj1vLmxlbmd0aC8zLGk9SWUuY3JlYXRlVHlwZWRBcnJheShyLHIqMiksZj0wO2ZvcihsZXQgZD0wO2Q8cjsrK2QpaVtmKytdPWQsaVtmKytdPShkKzEpJXI7cmV0dXJue2JvdW5kaW5nU3BoZXJlOnQsYXR0cmlidXRlczphLGluZGljZXM6aX19ZnVuY3Rpb24gSDMobil7bGV0IGU9bi5jZW50ZXIsdD1uLmVsbGlwc29pZCxvPW4uc2VtaU1ham9yQXhpcyxhPXMubXVsdGlwbHlCeVNjYWxhcih0Lmdlb2RldGljU3VyZmFjZU5vcm1hbChlLFpUKSxuLmhlaWdodCxaVCk7bGguY2VudGVyPXMuYWRkKGUsYSxsaC5jZW50ZXIpLGxoLnJhZGl1cz1vLGE9cy5tdWx0aXBseUJ5U2NhbGFyKHQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGUsYSksbi5leHRydWRlZEhlaWdodCxhKSxoaC5jZW50ZXI9cy5hZGQoZSxhLGhoLmNlbnRlciksaGgucmFkaXVzPW87bGV0IHI9R2EuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnMobiwhMSwhMCkub3V0ZXJQb3NpdGlvbnMsaT1uZXcgUWUoe3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6R2EucmFpc2VQb3NpdGlvbnNUb0hlaWdodChyLG4sITApfSl9KTtyPWkucG9zaXRpb24udmFsdWVzO2xldCBmPXBlLnVuaW9uKGxoLGhoKSxkPXIubGVuZ3RoLzM7aWYoZyhuLm9mZnNldEF0dHJpYnV0ZSkpe2xldCBiPW5ldyBVaW50OEFycmF5KGQpO2lmKG4ub2Zmc2V0QXR0cmlidXRlPT09b3QuVE9QKWI9Yi5maWxsKDEsMCxkLzIpO2Vsc2V7bGV0IHA9bi5vZmZzZXRBdHRyaWJ1dGU9PT1vdC5OT05FPzA6MTtiPWIuZmlsbChwKX1pLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmJ9KX1sZXQgYz1uLm51bWJlck9mVmVydGljYWxMaW5lcz8/MTY7Yz1rLmNsYW1wKGMsMCxkLzIpO2xldCB1PUllLmNyZWF0ZVR5cGVkQXJyYXkoZCxkKjIrYyoyKTtkLz0yO2xldCBsPTAsbTtmb3IobT0wO208ZDsrK20pdVtsKytdPW0sdVtsKytdPShtKzEpJWQsdVtsKytdPW0rZCx1W2wrK109KG0rMSklZCtkO2xldCBoO2lmKGM+MCl7bGV0IGI9TWF0aC5taW4oYyxkKTtoPU1hdGgucm91bmQoZC9iKTtsZXQgcD1NYXRoLm1pbihoKmMsZCk7Zm9yKG09MDttPHA7bSs9aCl1W2wrK109bSx1W2wrK109bStkfXJldHVybntib3VuZGluZ1NwaGVyZTpmLGF0dHJpYnV0ZXM6aSxpbmRpY2VzOnV9fWZ1bmN0aW9uIG1zKG4pe249bj8/T2UuRU1QVFlfT0JKRUNUO2xldCBlPW4uY2VudGVyLHQ9bi5lbGxpcHNvaWQ/P0suZGVmYXVsdCxvPW4uc2VtaU1ham9yQXhpcyxhPW4uc2VtaU1pbm9yQXhpcyxyPW4uZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLGk9bi5oZWlnaHQ/PzAsZj1uLmV4dHJ1ZGVkSGVpZ2h0Pz9pO3RoaXMuX2NlbnRlcj1zLmNsb25lKGUpLHRoaXMuX3NlbWlNYWpvckF4aXM9byx0aGlzLl9zZW1pTWlub3JBeGlzPWEsdGhpcy5fZWxsaXBzb2lkPUsuY2xvbmUodCksdGhpcy5fcm90YXRpb249bi5yb3RhdGlvbj8/MCx0aGlzLl9oZWlnaHQ9TWF0aC5tYXgoZixpKSx0aGlzLl9ncmFudWxhcml0eT1yLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKGYsaSksdGhpcy5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzPU1hdGgubWF4KG4ubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPz8xNiwwKSx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9bi5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlRWxsaXBzZU91dGxpbmVHZW9tZXRyeSJ9dmFyIFpULGxjLGxoLGhoLFFULCRULHpyLEhhLFpwPVgoKCk9PntFdCgpO01lKCk7Q3QoKTtzdCgpO2ZlKCk7VnAoKTtWZSgpO1h0KCk7WXQoKTtybigpO1VvKCk7WnQoKTtqZSgpO3RuKCk7WlQ9bmV3IHMsbGM9bmV3IHM7bGg9bmV3IHBlLGhoPW5ldyBwZTttcy5wYWNrZWRMZW5ndGg9cy5wYWNrZWRMZW5ndGgrSy5wYWNrZWRMZW5ndGgrODttcy5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gdD10Pz8wLHMucGFjayhuLl9jZW50ZXIsZSx0KSx0Kz1zLnBhY2tlZExlbmd0aCxLLnBhY2sobi5fZWxsaXBzb2lkLGUsdCksdCs9Sy5wYWNrZWRMZW5ndGgsZVt0KytdPW4uX3NlbWlNYWpvckF4aXMsZVt0KytdPW4uX3NlbWlNaW5vckF4aXMsZVt0KytdPW4uX3JvdGF0aW9uLGVbdCsrXT1uLl9oZWlnaHQsZVt0KytdPW4uX2dyYW51bGFyaXR5LGVbdCsrXT1uLl9leHRydWRlZEhlaWdodCxlW3QrK109bi5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzLGVbdF09bi5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtRVD1uZXcgcywkVD1uZXcgSyx6cj17Y2VudGVyOlFULGVsbGlwc29pZDokVCxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLG51bWJlck9mVmVydGljYWxMaW5lczp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07bXMudW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtlPWU/PzA7bGV0IG89cy51bnBhY2sobixlLFFUKTtlKz1zLnBhY2tlZExlbmd0aDtsZXQgYT1LLnVucGFjayhuLGUsJFQpO2UrPUsucGFja2VkTGVuZ3RoO2xldCByPW5bZSsrXSxpPW5bZSsrXSxmPW5bZSsrXSxkPW5bZSsrXSxjPW5bZSsrXSx1PW5bZSsrXSxsPW5bZSsrXSxtPW5bZV07cmV0dXJuIGcodCk/KHQuX2NlbnRlcj1zLmNsb25lKG8sdC5fY2VudGVyKSx0Ll9lbGxpcHNvaWQ9Sy5jbG9uZShhLHQuX2VsbGlwc29pZCksdC5fc2VtaU1ham9yQXhpcz1yLHQuX3NlbWlNaW5vckF4aXM9aSx0Ll9yb3RhdGlvbj1mLHQuX2hlaWdodD1kLHQuX2dyYW51bGFyaXR5PWMsdC5fZXh0cnVkZWRIZWlnaHQ9dSx0Ll9udW1iZXJPZlZlcnRpY2FsTGluZXM9bCx0Ll9vZmZzZXRBdHRyaWJ1dGU9bT09PS0xP3ZvaWQgMDptLHQpOih6ci5oZWlnaHQ9ZCx6ci5leHRydWRlZEhlaWdodD11LHpyLmdyYW51bGFyaXR5PWMsenIucm90YXRpb249Zix6ci5zZW1pTWFqb3JBeGlzPXIsenIuc2VtaU1pbm9yQXhpcz1pLHpyLm51bWJlck9mVmVydGljYWxMaW5lcz1sLHpyLm9mZnNldEF0dHJpYnV0ZT1tPT09LTE/dm9pZCAwOm0sbmV3IG1zKHpyKSl9O21zLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe2lmKG4uX3NlbWlNYWpvckF4aXM8PTB8fG4uX3NlbWlNaW5vckF4aXM8PTApcmV0dXJuO2xldCBlPW4uX2hlaWdodCx0PW4uX2V4dHJ1ZGVkSGVpZ2h0LG89IWsuZXF1YWxzRXBzaWxvbihlLHQsMCxrLkVQU0lMT04yKTtuLl9jZW50ZXI9bi5fZWxsaXBzb2lkLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2Uobi5fY2VudGVyLG4uX2NlbnRlcik7bGV0IGE9e2NlbnRlcjpuLl9jZW50ZXIsc2VtaU1ham9yQXhpczpuLl9zZW1pTWFqb3JBeGlzLHNlbWlNaW5vckF4aXM6bi5fc2VtaU1pbm9yQXhpcyxlbGxpcHNvaWQ6bi5fZWxsaXBzb2lkLHJvdGF0aW9uOm4uX3JvdGF0aW9uLGhlaWdodDplLGdyYW51bGFyaXR5Om4uX2dyYW51bGFyaXR5LG51bWJlck9mVmVydGljYWxMaW5lczpuLl9udW1iZXJPZlZlcnRpY2FsTGluZXN9LHI7aWYobylhLmV4dHJ1ZGVkSGVpZ2h0PXQsYS5vZmZzZXRBdHRyaWJ1dGU9bi5fb2Zmc2V0QXR0cmlidXRlLHI9SDMoYSk7ZWxzZSBpZihyPVYzKGEpLGcobi5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGk9ci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsZj1uLl9vZmZzZXRBdHRyaWJ1dGU9PT1vdC5OT05FPzA6MSxkPW5ldyBVaW50OEFycmF5KGkvMykuZmlsbChmKTtyLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6ZH0pfXJldHVybiBuZXcgUGUoe2F0dHJpYnV0ZXM6ci5hdHRyaWJ1dGVzLGluZGljZXM6ci5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6RmUuTElORVMsYm91bmRpbmdTcGhlcmU6ci5ib3VuZGluZ1NwaGVyZSxvZmZzZXRBdHRyaWJ1dGU6bi5fb2Zmc2V0QXR0cmlidXRlfSl9O0hhPW1zfSk7ZnVuY3Rpb24gYnMobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5yYWRpdXMsdD17Y2VudGVyOm4uY2VudGVyLHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOmUsZWxsaXBzb2lkOm4uZWxsaXBzb2lkLGhlaWdodDpuLmhlaWdodCxleHRydWRlZEhlaWdodDpuLmV4dHJ1ZGVkSGVpZ2h0LGdyYW51bGFyaXR5Om4uZ3JhbnVsYXJpdHksbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOm4ubnVtYmVyT2ZWZXJ0aWNhbExpbmVzfTt0aGlzLl9lbGxpcHNlR2VvbWV0cnk9bmV3IEhhKHQpLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNpcmNsZU91dGxpbmVHZW9tZXRyeSJ9dmFyIEszLHJhLFFwLGVFPVgoKCk9PntNZSgpO3N0KCk7ZmUoKTtacCgpO1ZlKCk7YnMucGFja2VkTGVuZ3RoPUhhLnBhY2tlZExlbmd0aDticy5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gSGEucGFjayhuLl9lbGxpcHNlR2VvbWV0cnksZSx0KX07SzM9bmV3IEhhKHtjZW50ZXI6bmV3IHMsc2VtaU1ham9yQXhpczoxLHNlbWlNaW5vckF4aXM6MX0pLHJhPXtjZW50ZXI6bmV3IHMscmFkaXVzOnZvaWQgMCxlbGxpcHNvaWQ6Sy5jbG9uZShLLlVOSVRfU1BIRVJFKSxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOnZvaWQgMCxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMH07YnMudW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1IYS51bnBhY2sobixlLEszKTtyZXR1cm4gcmEuY2VudGVyPXMuY2xvbmUoby5fY2VudGVyLHJhLmNlbnRlcikscmEuZWxsaXBzb2lkPUsuY2xvbmUoby5fZWxsaXBzb2lkLHJhLmVsbGlwc29pZCkscmEuaGVpZ2h0PW8uX2hlaWdodCxyYS5leHRydWRlZEhlaWdodD1vLl9leHRydWRlZEhlaWdodCxyYS5ncmFudWxhcml0eT1vLl9ncmFudWxhcml0eSxyYS5udW1iZXJPZlZlcnRpY2FsTGluZXM9by5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzLGcodCk/KHJhLnNlbWlNYWpvckF4aXM9by5fc2VtaU1ham9yQXhpcyxyYS5zZW1pTWlub3JBeGlzPW8uX3NlbWlNaW5vckF4aXMsdC5fZWxsaXBzZUdlb21ldHJ5PW5ldyBIYShyYSksdCk6KHJhLnJhZGl1cz1vLl9zZW1pTWFqb3JBeGlzLG5ldyBicyhyYSkpfTticy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihuKXtyZXR1cm4gSGEuY3JlYXRlR2VvbWV0cnkobi5fZWxsaXBzZUdlb21ldHJ5KX07UXA9YnN9KTt2YXIgJHA9e307JGUoJHAse2RlZmF1bHQ6KCk9PlczfSk7ZnVuY3Rpb24gcTMobixlKXtyZXR1cm4gZyhlKSYmKG49UXAudW5wYWNrKG4sZSkpLG4uX2VsbGlwc2VHZW9tZXRyeS5fY2VudGVyPXMuY2xvbmUobi5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXIpLG4uX2VsbGlwc2VHZW9tZXRyeS5fZWxsaXBzb2lkPUsuY2xvbmUobi5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQpLFFwLmNyZWF0ZUdlb21ldHJ5KG4pfXZhciBXMyxlMD1YKCgpPT57TWUoKTtlRSgpO2ZlKCk7VmUoKTtXMz1xM30pO2Z1bmN0aW9uIFgzKG4sZSx0LG8pe2lmKCFnKG4pKXJldHVybjt0PXQ/PyExO2xldCBhPWcobykscj1uLmxlbmd0aDtpZihyPDIpcmV0dXJuIG47bGV0IGksZj1uWzBdLGQsYyx1PTAsbD0tMTtmb3IoaT0xO2k8cjsrK2kpZD1uW2ldLGUoZixkLHRFKT8oZyhjKXx8KGM9bi5zbGljZSgwLGkpLHU9aS0xLGw9MCksYSYmby5wdXNoKGkpKTooZyhjKSYmKGMucHVzaChkKSx1PWksYSYmKGw9by5sZW5ndGgpKSxmPWQpO3JldHVybiB0JiZlKG5bMF0sbltyLTFdLHRFKSYmKGEmJihnKGMpP28uc3BsaWNlKGwsMCx1KTpvLnB1c2goci0xKSksZyhjKT9jLmxlbmd0aC09MTpjPW4uc2xpY2UoMCwtMSkpLGcoYyk/YzpufXZhciB0RSx4bixLYT1YKCgpPT57ZmUoKTtqZSgpO3RFPWsuRVBTSUxPTjEwO3huPVgzfSk7ZnVuY3Rpb24gdm4obixlLHQsbyl7dGhpcy54PW4/PzAsdGhpcy55PWU/PzAsdGhpcy53aWR0aD10Pz8wLHRoaXMuaGVpZ2h0PW8/PzB9dmFyIG5FLFkzLEozLHFhLEdmPVgoKCk9Pnt2dCgpO2d0KCk7ZmUoKTtWZSgpO1ByKCk7WmkoKTtobigpO3ZuLnBhY2tlZExlbmd0aD00O3ZuLnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0PXQ/PzAsZVt0KytdPW4ueCxlW3QrK109bi55LGVbdCsrXT1uLndpZHRoLGVbdF09bi5oZWlnaHQsZX07dm4udW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gZT1lPz8wLGcodCl8fCh0PW5ldyB2biksdC54PW5bZSsrXSx0Lnk9bltlKytdLHQud2lkdGg9bltlKytdLHQuaGVpZ2h0PW5bZV0sdH07dm4uZnJvbVBvaW50cz1mdW5jdGlvbihuLGUpe2lmKGcoZSl8fChlPW5ldyB2biksIWcobil8fG4ubGVuZ3RoPT09MClyZXR1cm4gZS54PTAsZS55PTAsZS53aWR0aD0wLGUuaGVpZ2h0PTAsZTtsZXQgdD1uLmxlbmd0aCxvPW5bMF0ueCxhPW5bMF0ueSxyPW5bMF0ueCxpPW5bMF0ueTtmb3IobGV0IGY9MTtmPHQ7ZisrKXtsZXQgZD1uW2ZdLGM9ZC54LHU9ZC55O289TWF0aC5taW4oYyxvKSxyPU1hdGgubWF4KGMsciksYT1NYXRoLm1pbih1LGEpLGk9TWF0aC5tYXgodSxpKX1yZXR1cm4gZS54PW8sZS55PWEsZS53aWR0aD1yLW8sZS5oZWlnaHQ9aS1hLGV9O25FPW5ldyBubyxZMz1uZXcgYWUsSjM9bmV3IGFlO3ZuLmZyb21SZWN0YW5nbGU9ZnVuY3Rpb24obixlLHQpe2lmKGcodCl8fCh0PW5ldyB2biksIWcobikpcmV0dXJuIHQueD0wLHQueT0wLHQud2lkdGg9MCx0LmhlaWdodD0wLHQ7bkUuX2VsbGlwc29pZD1LLmRlZmF1bHQsZT1lPz9uRTtsZXQgbz1lLnByb2plY3QoeGUuc291dGh3ZXN0KG4sWTMpKSxhPWUucHJvamVjdCh4ZS5ub3J0aGVhc3QobixKMykpO3JldHVybiBZLnN1YnRyYWN0KGEsbyxhKSx0Lng9by54LHQueT1vLnksdC53aWR0aD1hLngsdC5oZWlnaHQ9YS55LHR9O3ZuLmNsb25lPWZ1bmN0aW9uKG4sZSl7aWYoZyhuKSlyZXR1cm4gZyhlKT8oZS54PW4ueCxlLnk9bi55LGUud2lkdGg9bi53aWR0aCxlLmhlaWdodD1uLmhlaWdodCxlKTpuZXcgdm4obi54LG4ueSxuLndpZHRoLG4uaGVpZ2h0KX07dm4udW5pb249ZnVuY3Rpb24obixlLHQpe2codCl8fCh0PW5ldyB2bik7bGV0IG89TWF0aC5taW4obi54LGUueCksYT1NYXRoLm1pbihuLnksZS55KSxyPU1hdGgubWF4KG4ueCtuLndpZHRoLGUueCtlLndpZHRoKSxpPU1hdGgubWF4KG4ueStuLmhlaWdodCxlLnkrZS5oZWlnaHQpO3JldHVybiB0Lng9byx0Lnk9YSx0LndpZHRoPXItbyx0LmhlaWdodD1pLWEsdH07dm4uZXhwYW5kPWZ1bmN0aW9uKG4sZSx0KXt0PXZuLmNsb25lKG4sdCk7bGV0IG89ZS54LXQueCxhPWUueS10Lnk7cmV0dXJuIG8+dC53aWR0aD90LndpZHRoPW86bzwwJiYodC53aWR0aC09byx0Lng9ZS54KSxhPnQuaGVpZ2h0P3QuaGVpZ2h0PWE6YTwwJiYodC5oZWlnaHQtPWEsdC55PWUueSksdH07dm4uaW50ZXJzZWN0PWZ1bmN0aW9uKG4sZSl7bGV0IHQ9bi54LG89bi55LGE9ZS54LHI9ZS55O3JldHVybiB0PmErZS53aWR0aHx8dCtuLndpZHRoPGF8fG8rbi5oZWlnaHQ8cnx8bz5yK2UuaGVpZ2h0P1RuLk9VVFNJREU6VG4uSU5URVJTRUNUSU5HfTt2bi5lcXVhbHM9ZnVuY3Rpb24obixlKXtyZXR1cm4gbj09PWV8fGcobikmJmcoZSkmJm4ueD09PWUueCYmbi55PT09ZS55JiZuLndpZHRoPT09ZS53aWR0aCYmbi5oZWlnaHQ9PT1lLmhlaWdodH07dm4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKG4pe3JldHVybiB2bi5jbG9uZSh0aGlzLG4pfTt2bi5wcm90b3R5cGUuaW50ZXJzZWN0PWZ1bmN0aW9uKG4pe3JldHVybiB2bi5pbnRlcnNlY3QodGhpcyxuKX07dm4ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihuKXtyZXR1cm4gdm4uZXF1YWxzKHRoaXMsbil9O3FhPXZufSk7ZnVuY3Rpb24gaG8obixlLHQpe3RoaXMubWluaW11bT1zLmNsb25lKG4/P3MuWkVSTyksdGhpcy5tYXhpbXVtPXMuY2xvbmUoZT8/cy5aRVJPKSxnKHQpP3Q9cy5jbG9uZSh0KTp0PXMubWlkcG9pbnQodGhpcy5taW5pbXVtLHRoaXMubWF4aW11bSxuZXcgcyksdGhpcy5jZW50ZXI9dH12YXIgbWgscm8seWk9WCgoKT0+e01lKCk7ZmUoKTtaaSgpO2hvLmZyb21Db3JuZXJzPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gZyh0KXx8KHQ9bmV3IGhvKSx0Lm1pbmltdW09cy5jbG9uZShuLHQubWluaW11bSksdC5tYXhpbXVtPXMuY2xvbmUoZSx0Lm1heGltdW0pLHQuY2VudGVyPXMubWlkcG9pbnQobixlLHQuY2VudGVyKSx0fTtoby5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4sZSl7aWYoZyhlKXx8KGU9bmV3IGhvKSwhZyhuKXx8bi5sZW5ndGg9PT0wKXJldHVybiBlLm1pbmltdW09cy5jbG9uZShzLlpFUk8sZS5taW5pbXVtKSxlLm1heGltdW09cy5jbG9uZShzLlpFUk8sZS5tYXhpbXVtKSxlLmNlbnRlcj1zLmNsb25lKHMuWkVSTyxlLmNlbnRlciksZTtsZXQgdD1uWzBdLngsbz1uWzBdLnksYT1uWzBdLnoscj1uWzBdLngsaT1uWzBdLnksZj1uWzBdLnosZD1uLmxlbmd0aDtmb3IobGV0IGw9MTtsPGQ7bCsrKXtsZXQgbT1uW2xdLGg9bS54LGI9bS55LHA9bS56O3Q9TWF0aC5taW4oaCx0KSxyPU1hdGgubWF4KGgsciksbz1NYXRoLm1pbihiLG8pLGk9TWF0aC5tYXgoYixpKSxhPU1hdGgubWluKHAsYSksZj1NYXRoLm1heChwLGYpfWxldCBjPWUubWluaW11bTtjLng9dCxjLnk9byxjLno9YTtsZXQgdT1lLm1heGltdW07cmV0dXJuIHUueD1yLHUueT1pLHUuej1mLGUuY2VudGVyPXMubWlkcG9pbnQoYyx1LGUuY2VudGVyKSxlfTtoby5jbG9uZT1mdW5jdGlvbihuLGUpe2lmKGcobikpcmV0dXJuIGcoZSk/KGUubWluaW11bT1zLmNsb25lKG4ubWluaW11bSxlLm1pbmltdW0pLGUubWF4aW11bT1zLmNsb25lKG4ubWF4aW11bSxlLm1heGltdW0pLGUuY2VudGVyPXMuY2xvbmUobi5jZW50ZXIsZS5jZW50ZXIpLGUpOm5ldyBobyhuLm1pbmltdW0sbi5tYXhpbXVtLG4uY2VudGVyKX07aG8uZXF1YWxzPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIG49PT1lfHxnKG4pJiZnKGUpJiZzLmVxdWFscyhuLmNlbnRlcixlLmNlbnRlcikmJnMuZXF1YWxzKG4ubWluaW11bSxlLm1pbmltdW0pJiZzLmVxdWFscyhuLm1heGltdW0sZS5tYXhpbXVtKX07bWg9bmV3IHM7aG8uaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24obixlKXttaD1zLnN1YnRyYWN0KG4ubWF4aW11bSxuLm1pbmltdW0sbWgpO2xldCB0PXMubXVsdGlwbHlCeVNjYWxhcihtaCwuNSxtaCksbz1lLm5vcm1hbCxhPXQueCpNYXRoLmFicyhvLngpK3QueSpNYXRoLmFicyhvLnkpK3QueipNYXRoLmFicyhvLnopLHI9cy5kb3Qobi5jZW50ZXIsbykrZS5kaXN0YW5jZTtyZXR1cm4gci1hPjA/VG4uSU5TSURFOnIrYTwwP1RuLk9VVFNJREU6VG4uSU5URVJTRUNUSU5HfTtoby5pbnRlcnNlY3RBeGlzQWxpZ25lZEJvdW5kaW5nQm94PWZ1bmN0aW9uKG4sZSl7cmV0dXJuIG4ubWluaW11bS54PD1lLm1heGltdW0ueCYmbi5tYXhpbXVtLng+PWUubWluaW11bS54JiZuLm1pbmltdW0ueTw9ZS5tYXhpbXVtLnkmJm4ubWF4aW11bS55Pj1lLm1pbmltdW0ueSYmbi5taW5pbXVtLno8PWUubWF4aW11bS56JiZuLm1heGltdW0uej49ZS5taW5pbXVtLnp9O2hvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihuKXtyZXR1cm4gaG8uY2xvbmUodGhpcyxuKX07aG8ucHJvdG90eXBlLmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBoby5pbnRlcnNlY3RQbGFuZSh0aGlzLG4pfTtoby5wcm90b3R5cGUuaW50ZXJzZWN0QXhpc0FsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbihuKXtyZXR1cm4gaG8uaW50ZXJzZWN0QXhpc0FsaWduZWRCb3VuZGluZ0JveCh0aGlzLG4pfTtoby5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKG4pe3JldHVybiBoby5lcXVhbHModGhpcyxuKX07cm89aG99KTtmdW5jdGlvbiBocihuLGUpe2U9ZT8/Sy5kZWZhdWx0LG49ZS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKG4pO2xldCB0PW9vLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKG4sZSk7dGhpcy5fZWxsaXBzb2lkPWUsdGhpcy5fb3JpZ2luPW4sdGhpcy5feEF4aXM9cy5mcm9tQ2FydGVzaWFuNChRLmdldENvbHVtbih0LDAsdDApKSx0aGlzLl95QXhpcz1zLmZyb21DYXJ0ZXNpYW40KFEuZ2V0Q29sdW1uKHQsMSx0MCkpO2xldCBvPXMuZnJvbUNhcnRlc2lhbjQoUS5nZXRDb2x1bW4odCwyLHQwKSk7dGhpcy5fcGxhbmU9bm4uZnJvbVBvaW50Tm9ybWFsKG4sbyl9dmFyIHQwLFozLG9FLGJoLFEzLEFvLHBzPVgoKCk9Pnt5aSgpO3Z0KCk7TWUoKTtiYSgpO2ZlKCk7VmUoKTtiaSgpO3VuKCk7cGkoKTtGZigpO3JyKCk7dDA9bmV3IHJ0O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGhyLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX0sb3JpZ2luOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZ2lufX0scGxhbmU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGFuZX19LHhBeGlzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feEF4aXN9fSx5QXhpczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3lBeGlzfX0sekF4aXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGFuZS5ub3JtYWx9fX0pO1ozPW5ldyBybztoci5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9cm8uZnJvbVBvaW50cyhuLFozKTtyZXR1cm4gbmV3IGhyKHQuY2VudGVyLGUpfTtvRT1uZXcgY3IsYmg9bmV3IHM7aHIucHJvdG90eXBlLnByb2plY3RQb2ludE9udG9QbGFuZT1mdW5jdGlvbihuLGUpe2xldCB0PW9FO3Qub3JpZ2luPW4scy5ub3JtYWxpemUobix0LmRpcmVjdGlvbik7bGV0IG89UW4ucmF5UGxhbmUodCx0aGlzLl9wbGFuZSxiaCk7aWYoZyhvKXx8KHMubmVnYXRlKHQuZGlyZWN0aW9uLHQuZGlyZWN0aW9uKSxvPVFuLnJheVBsYW5lKHQsdGhpcy5fcGxhbmUsYmgpKSxnKG8pKXtsZXQgYT1zLnN1YnRyYWN0KG8sdGhpcy5fb3JpZ2luLG8pLHI9cy5kb3QodGhpcy5feEF4aXMsYSksaT1zLmRvdCh0aGlzLl95QXhpcyxhKTtyZXR1cm4gZyhlKT8oZS54PXIsZS55PWksZSk6bmV3IFkocixpKX19O2hyLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzT250b1BsYW5lPWZ1bmN0aW9uKG4sZSl7ZyhlKXx8KGU9W10pO2xldCB0PTAsbz1uLmxlbmd0aDtmb3IobGV0IGE9MDthPG87YSsrKXtsZXQgcj10aGlzLnByb2plY3RQb2ludE9udG9QbGFuZShuW2FdLGVbdF0pO2cocikmJihlW3RdPXIsdCsrKX1yZXR1cm4gZS5sZW5ndGg9dCxlfTtoci5wcm90b3R5cGUucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZT1mdW5jdGlvbihuLGUpe2coZSl8fChlPW5ldyBZKTtsZXQgdD1vRTt0Lm9yaWdpbj1uLHMuY2xvbmUodGhpcy5fcGxhbmUubm9ybWFsLHQuZGlyZWN0aW9uKTtsZXQgbz1Rbi5yYXlQbGFuZSh0LHRoaXMuX3BsYW5lLGJoKTtnKG8pfHwocy5uZWdhdGUodC5kaXJlY3Rpb24sdC5kaXJlY3Rpb24pLG89UW4ucmF5UGxhbmUodCx0aGlzLl9wbGFuZSxiaCkpO2xldCBhPXMuc3VidHJhY3Qobyx0aGlzLl9vcmlnaW4sbykscj1zLmRvdCh0aGlzLl94QXhpcyxhKSxpPXMuZG90KHRoaXMuX3lBeGlzLGEpO3JldHVybiBlLng9cixlLnk9aSxlfTtoci5wcm90b3R5cGUucHJvamVjdFBvaW50c1RvTmVhcmVzdE9uUGxhbmU9ZnVuY3Rpb24obixlKXtnKGUpfHwoZT1bXSk7bGV0IHQ9bi5sZW5ndGg7ZS5sZW5ndGg9dDtmb3IobGV0IG89MDtvPHQ7bysrKWVbb109dGhpcy5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKG5bb10sZVtvXSk7cmV0dXJuIGV9O1EzPW5ldyBzO2hyLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRPbnRvRWxsaXBzb2lkPWZ1bmN0aW9uKG4sZSl7ZyhlKXx8KGU9bmV3IHMpO2xldCB0PXRoaXMuX2VsbGlwc29pZCxvPXRoaXMuX29yaWdpbixhPXRoaXMuX3hBeGlzLHI9dGhpcy5feUF4aXMsaT1RMztyZXR1cm4gcy5tdWx0aXBseUJ5U2NhbGFyKGEsbi54LGkpLGU9cy5hZGQobyxpLGUpLHMubXVsdGlwbHlCeVNjYWxhcihyLG4ueSxpKSxzLmFkZChlLGksZSksdC5zY2FsZVRvR2VvY2VudHJpY1N1cmZhY2UoZSxlKSxlfTtoci5wcm90b3R5cGUucHJvamVjdFBvaW50c09udG9FbGxpcHNvaWQ9ZnVuY3Rpb24obixlKXtsZXQgdD1uLmxlbmd0aDtnKGUpP2UubGVuZ3RoPXQ6ZT1uZXcgQXJyYXkodCk7Zm9yKGxldCBvPTA7bzx0OysrbyllW29dPXRoaXMucHJvamVjdFBvaW50T250b0VsbGlwc29pZChuW29dLGVbb10pO3JldHVybiBlfTtBbz1ocn0pO2Z1bmN0aW9uIFB0KG4sZSl7dGhpcy5jZW50ZXI9cy5jbG9uZShuPz9zLlpFUk8pLHRoaXMuaGFsZkF4ZXM9Wi5jbG9uZShlPz9aLlpFUk8pfWZ1bmN0aW9uIGFFKG4sZSx0LG8sYSxyLGksZixkLGMsdSl7Zyh1KXx8KHU9bmV3IFB0KTtsZXQgbD11LmhhbGZBeGVzO1ouc2V0Q29sdW1uKGwsMCxlLGwpLFouc2V0Q29sdW1uKGwsMSx0LGwpLFouc2V0Q29sdW1uKGwsMixvLGwpO2xldCBtPWZFO20ueD0oYStyKS8yLG0ueT0oaStmKS8yLG0uej0oZCtjKS8yO2xldCBoPWNQO2gueD0oci1hKS8yLGgueT0oZi1pKS8yLGguej0oYy1kKS8yO2xldCBiPXUuY2VudGVyO3JldHVybiBtPVoubXVsdGlwbHlCeVZlY3RvcihsLG0sbSkscy5hZGQobixtLGIpLFoubXVsdGlwbHlCeVNjYWxlKGwsaCxsKSx1fXZhciAkMyxlUCx0UCxuUCxvUCxhUCxyUCxpUCxmRSxjUCxyRSxzUCxmUCxkUCx1UCxsUCxoUCxtUCxpRSxiUCxjRSxwUCxnUCxfUCx5UCxBUCx3UCxUUCxFUCxSUCx4UCxPUCxTUCxDUCxNUCxOUCxkRSx1RSxsRSxJUCxzRSxQUCxrUCx2UCxGUCxEUCxCUCxVUCxqUCxtbixBaT1YKCgpPT57RXQoKTt2dCgpO01lKCk7Z3QoKTtmZSgpO1ZlKCk7cHMoKTtaaSgpO2dmKCk7amUoKTtJbigpO3VuKCk7cGkoKTtobigpO1B0LnBhY2tlZExlbmd0aD1zLnBhY2tlZExlbmd0aCtaLnBhY2tlZExlbmd0aDtQdC5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gdD10Pz8wLHMucGFjayhuLmNlbnRlcixlLHQpLFoucGFjayhuLmhhbGZBeGVzLGUsdCtzLnBhY2tlZExlbmd0aCksZX07UHQudW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gZT1lPz8wLGcodCl8fCh0PW5ldyBQdCkscy51bnBhY2sobixlLHQuY2VudGVyKSxaLnVucGFjayhuLGUrcy5wYWNrZWRMZW5ndGgsdC5oYWxmQXhlcyksdH07JDM9bmV3IHMsZVA9bmV3IHMsdFA9bmV3IHMsblA9bmV3IHMsb1A9bmV3IHMsYVA9bmV3IHMsclA9bmV3IFosaVA9e3VuaXRhcnk6bmV3IFosZGlhZ29uYWw6bmV3IFp9O1B0LmZyb21Qb2ludHM9ZnVuY3Rpb24obixlKXtpZihnKGUpfHwoZT1uZXcgUHQpLCFnKG4pfHxuLmxlbmd0aD09PTApcmV0dXJuIGUuaGFsZkF4ZXM9Wi5aRVJPLGUuY2VudGVyPXMuWkVSTyxlO2xldCB0LG89bi5sZW5ndGgsYT1zLmNsb25lKG5bMF0sJDMpO2Zvcih0PTE7dDxvO3QrKylzLmFkZChhLG5bdF0sYSk7bGV0IHI9MS9vO3MubXVsdGlwbHlCeVNjYWxhcihhLHIsYSk7bGV0IGk9MCxmPTAsZD0wLGM9MCx1PTAsbD0wLG07Zm9yKHQ9MDt0PG87dCsrKW09cy5zdWJ0cmFjdChuW3RdLGEsZVApLGkrPW0ueCptLngsZis9bS54Km0ueSxkKz1tLngqbS56LGMrPW0ueSptLnksdSs9bS55Km0ueixsKz1tLnoqbS56O2kqPXIsZio9cixkKj1yLGMqPXIsdSo9cixsKj1yO2xldCBoPXJQO2hbMF09aSxoWzFdPWYsaFsyXT1kLGhbM109ZixoWzRdPWMsaFs1XT11LGhbNl09ZCxoWzddPXUsaFs4XT1sO2xldCBiPVouY29tcHV0ZUVpZ2VuRGVjb21wb3NpdGlvbihoLGlQKSxwPVouY2xvbmUoYi51bml0YXJ5LGUuaGFsZkF4ZXMpLHk9Wi5nZXRDb2x1bW4ocCwwLG5QKSxUPVouZ2V0Q29sdW1uKHAsMSxvUCksXz1aLmdldENvbHVtbihwLDIsYVApLHc9LU51bWJlci5NQVhfVkFMVUUsRT0tTnVtYmVyLk1BWF9WQUxVRSxSPS1OdW1iZXIuTUFYX1ZBTFVFLFM9TnVtYmVyLk1BWF9WQUxVRSxDPU51bWJlci5NQVhfVkFMVUUsST1OdW1iZXIuTUFYX1ZBTFVFO2Zvcih0PTA7dDxvO3QrKyltPW5bdF0sdz1NYXRoLm1heChzLmRvdCh5LG0pLHcpLEU9TWF0aC5tYXgocy5kb3QoVCxtKSxFKSxSPU1hdGgubWF4KHMuZG90KF8sbSksUiksUz1NYXRoLm1pbihzLmRvdCh5LG0pLFMpLEM9TWF0aC5taW4ocy5kb3QoVCxtKSxDKSxJPU1hdGgubWluKHMuZG90KF8sbSksSSk7eT1zLm11bHRpcGx5QnlTY2FsYXIoeSwuNSooUyt3KSx5KSxUPXMubXVsdGlwbHlCeVNjYWxhcihULC41KihDK0UpLFQpLF89cy5tdWx0aXBseUJ5U2NhbGFyKF8sLjUqKEkrUiksXyk7bGV0IE09cy5hZGQoeSxULGUuY2VudGVyKTtzLmFkZChNLF8sTSk7bGV0IFA9dFA7cmV0dXJuIFAueD13LVMsUC55PUUtQyxQLno9Ui1JLHMubXVsdGlwbHlCeVNjYWxhcihQLC41LFApLFoubXVsdGlwbHlCeVNjYWxlKGUuaGFsZkF4ZXMsUCxlLmhhbGZBeGVzKSxlfTtmRT1uZXcgcyxjUD1uZXcgcztyRT1uZXcgYWUsc1A9bmV3IHMsZlA9bmV3IGFlLGRQPW5ldyBhZSx1UD1uZXcgYWUsbFA9bmV3IGFlLGhQPW5ldyBhZSxtUD1uZXcgcyxpRT1uZXcgcyxiUD1uZXcgcyxjRT1uZXcgcyxwUD1uZXcgcyxnUD1uZXcgWSxfUD1uZXcgWSx5UD1uZXcgWSxBUD1uZXcgWSx3UD1uZXcgWSxUUD1uZXcgcyxFUD1uZXcgcyxSUD1uZXcgcyx4UD1uZXcgcyxPUD1uZXcgWSxTUD1uZXcgcyxDUD1uZXcgcyxNUD1uZXcgcyxOUD1uZXcgbm4ocy5VTklUX1gsMCk7UHQuZnJvbVJlY3RhbmdsZT1mdW5jdGlvbihuLGUsdCxvLGEpe2U9ZT8/MCx0PXQ/PzAsbz1vPz9LLmRlZmF1bHQ7bGV0IHIsaSxmLGQsYyx1LGw7aWYobi53aWR0aDw9ay5QSSl7bGV0IEM9eGUuY2VudGVyKG4sckUpLEk9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihDLHNQKSxNPW5ldyBBbyhJLG8pO2w9TS5wbGFuZTtsZXQgUD1DLmxvbmdpdHVkZSxGPW4uc291dGg8MCYmbi5ub3J0aD4wPzA6Qy5sYXRpdHVkZSxBPWFlLmZyb21SYWRpYW5zKFAsbi5ub3J0aCx0LGZQKSx4PWFlLmZyb21SYWRpYW5zKG4ud2VzdCxuLm5vcnRoLHQsZFApLE49YWUuZnJvbVJhZGlhbnMobi53ZXN0LEYsdCx1UCksdj1hZS5mcm9tUmFkaWFucyhuLndlc3Qsbi5zb3V0aCx0LGxQKSxVPWFlLmZyb21SYWRpYW5zKFAsbi5zb3V0aCx0LGhQKSxMPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oQSxtUCksRD1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHgsaUUpLEc9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihOLGJQKSxWPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odixjRSksTz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFUscFApLEo9TS5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKEwsZ1ApLHJlPU0ucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShELF9QKSxzZT1NLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoRyx5UCksb2U9TS5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKFYsQVApLGNlPU0ucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShPLHdQKTtyZXR1cm4gcj1NYXRoLm1pbihyZS54LHNlLngsb2UueCksaT0tcixkPU1hdGgubWF4KHJlLnksSi55KSxmPU1hdGgubWluKG9lLnksY2UueSkseC5oZWlnaHQ9di5oZWlnaHQ9ZSxEPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oeCxpRSksVj1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHYsY0UpLGM9TWF0aC5taW4obm4uZ2V0UG9pbnREaXN0YW5jZShsLEQpLG5uLmdldFBvaW50RGlzdGFuY2UobCxWKSksdT10LGFFKE0ub3JpZ2luLE0ueEF4aXMsTS55QXhpcyxNLnpBeGlzLHIsaSxmLGQsYyx1LGEpfWxldCBtPW4uc291dGg+MCxoPW4ubm9ydGg8MCxiPW0/bi5zb3V0aDpoP24ubm9ydGg6MCxwPXhlLmNlbnRlcihuLHJFKS5sb25naXR1ZGUseT1zLmZyb21SYWRpYW5zKHAsYix0LG8sVFApO3kuej0wO2xldCBfPU1hdGguYWJzKHkueCk8ay5FUFNJTE9OMTAmJk1hdGguYWJzKHkueSk8ay5FUFNJTE9OMTA/cy5VTklUX1g6cy5ub3JtYWxpemUoeSxFUCksdz1zLlVOSVRfWixFPXMuY3Jvc3MoXyx3LFJQKTtsPW5uLmZyb21Qb2ludE5vcm1hbCh5LF8sTlApO2xldCBSPXMuZnJvbVJhZGlhbnMocCtrLlBJX09WRVJfVFdPLGIsdCxvLHhQKTtpPXMuZG90KG5uLnByb2plY3RQb2ludE9udG9QbGFuZShsLFIsT1ApLEUpLHI9LWksZD1zLmZyb21SYWRpYW5zKDAsbi5ub3J0aCxoP2U6dCxvLFNQKS56LGY9cy5mcm9tUmFkaWFucygwLG4uc291dGgsbT9lOnQsbyxDUCkuejtsZXQgUz1zLmZyb21SYWRpYW5zKG4uZWFzdCxiLHQsbyxNUCk7cmV0dXJuIGM9bm4uZ2V0UG9pbnREaXN0YW5jZShsLFMpLHU9MCxhRSh5LEUsdyxfLHIsaSxmLGQsYyx1LGEpfTtQdC5mcm9tVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24obixlKXtyZXR1cm4gZyhlKXx8KGU9bmV3IFB0KSxlLmNlbnRlcj1RLmdldFRyYW5zbGF0aW9uKG4sZS5jZW50ZXIpLGUuaGFsZkF4ZXM9US5nZXRNYXRyaXgzKG4sZS5oYWxmQXhlcyksZS5oYWxmQXhlcz1aLm11bHRpcGx5QnlTY2FsYXIoZS5oYWxmQXhlcywuNSxlLmhhbGZBeGVzKSxlfTtQdC5jbG9uZT1mdW5jdGlvbihuLGUpe2lmKGcobikpcmV0dXJuIGcoZSk/KHMuY2xvbmUobi5jZW50ZXIsZS5jZW50ZXIpLFouY2xvbmUobi5oYWxmQXhlcyxlLmhhbGZBeGVzKSxlKTpuZXcgUHQobi5jZW50ZXIsbi5oYWxmQXhlcyl9O1B0LmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9bi5jZW50ZXIsbz1lLm5vcm1hbCxhPW4uaGFsZkF4ZXMscj1vLngsaT1vLnksZj1vLnosZD1NYXRoLmFicyhyKmFbWi5DT0xVTU4wUk9XMF0raSphW1ouQ09MVU1OMFJPVzFdK2YqYVtaLkNPTFVNTjBST1cyXSkrTWF0aC5hYnMociphW1ouQ09MVU1OMVJPVzBdK2kqYVtaLkNPTFVNTjFST1cxXStmKmFbWi5DT0xVTU4xUk9XMl0pK01hdGguYWJzKHIqYVtaLkNPTFVNTjJST1cwXStpKmFbWi5DT0xVTU4yUk9XMV0rZiphW1ouQ09MVU1OMlJPVzJdKSxjPXMuZG90KG8sdCkrZS5kaXN0YW5jZTtyZXR1cm4gYzw9LWQ/VG4uT1VUU0lERTpjPj1kP1RuLklOU0lERTpUbi5JTlRFUlNFQ1RJTkd9O2RFPW5ldyBzLHVFPW5ldyBzLGxFPW5ldyBzLElQPW5ldyBzLHNFPW5ldyBzLFBQPW5ldyBzO1B0LmRpc3RhbmNlU3F1YXJlZFRvPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9cy5zdWJ0cmFjdChlLG4uY2VudGVyLGZFKSxvPW4uaGFsZkF4ZXMsYT1aLmdldENvbHVtbihvLDAsZEUpLHI9Wi5nZXRDb2x1bW4obywxLHVFKSxpPVouZ2V0Q29sdW1uKG8sMixsRSksZj1zLm1hZ25pdHVkZShhKSxkPXMubWFnbml0dWRlKHIpLGM9cy5tYWduaXR1ZGUoaSksdT0hMCxsPSEwLG09ITA7Zj4wP3MuZGl2aWRlQnlTY2FsYXIoYSxmLGEpOnU9ITEsZD4wP3MuZGl2aWRlQnlTY2FsYXIocixkLHIpOmw9ITEsYz4wP3MuZGl2aWRlQnlTY2FsYXIoaSxjLGkpOm09ITE7bGV0IGg9IXUrIWwrIW0sYixwLHk7aWYoaD09PTEpe2xldCBFPWE7Yj1yLHA9aSxsP218fChFPWkscD1hKTooRT1yLGI9YSkseT1zLmNyb3NzKGIscCxzRSksRT09PWE/YT15OkU9PT1yP3I9eTpFPT09aSYmKGk9eSl9ZWxzZSBpZihoPT09Mil7Yj1hLGw/Yj1yOm0mJihiPWkpO2xldCBFPXMuVU5JVF9ZO0UuZXF1YWxzRXBzaWxvbihiLGsuRVBTSUxPTjMpJiYoRT1zLlVOSVRfWCkscD1zLmNyb3NzKGIsRSxJUCkscy5ub3JtYWxpemUocCxwKSx5PXMuY3Jvc3MoYixwLHNFKSxzLm5vcm1hbGl6ZSh5LHkpLGI9PT1hPyhyPXAsaT15KTpiPT09cj8oaT1wLGE9eSk6Yj09PWkmJihhPXAscj15KX1lbHNlIGg9PT0zJiYoYT1zLlVOSVRfWCxyPXMuVU5JVF9ZLGk9cy5VTklUX1opO2xldCBUPVBQO1QueD1zLmRvdCh0LGEpLFQueT1zLmRvdCh0LHIpLFQuej1zLmRvdCh0LGkpO2xldCBfPTAsdztyZXR1cm4gVC54PC1mPyh3PVQueCtmLF8rPXcqdyk6VC54PmYmJih3PVQueC1mLF8rPXcqdyksVC55PC1kPyh3PVQueStkLF8rPXcqdyk6VC55PmQmJih3PVQueS1kLF8rPXcqdyksVC56PC1jPyh3PVQueitjLF8rPXcqdyk6VC56PmMmJih3PVQuei1jLF8rPXcqdyksX307a1A9bmV3IHMsdlA9bmV3IHM7UHQuY29tcHV0ZVBsYW5lRGlzdGFuY2VzPWZ1bmN0aW9uKG4sZSx0LG8pe2cobyl8fChvPW5ldyBfbyk7bGV0IGE9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHI9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGk9bi5jZW50ZXIsZj1uLmhhbGZBeGVzLGQ9Wi5nZXRDb2x1bW4oZiwwLGRFKSxjPVouZ2V0Q29sdW1uKGYsMSx1RSksdT1aLmdldENvbHVtbihmLDIsbEUpLGw9cy5hZGQoZCxjLGtQKTtzLmFkZChsLHUsbCkscy5hZGQobCxpLGwpO2xldCBtPXMuc3VidHJhY3QobCxlLHZQKSxoPXMuZG90KHQsbSk7cmV0dXJuIGE9TWF0aC5taW4oaCxhKSxyPU1hdGgubWF4KGgscikscy5hZGQoaSxkLGwpLHMuYWRkKGwsYyxsKSxzLnN1YnRyYWN0KGwsdSxsKSxzLnN1YnRyYWN0KGwsZSxtKSxoPXMuZG90KHQsbSksYT1NYXRoLm1pbihoLGEpLHI9TWF0aC5tYXgoaCxyKSxzLmFkZChpLGQsbCkscy5zdWJ0cmFjdChsLGMsbCkscy5hZGQobCx1LGwpLHMuc3VidHJhY3QobCxlLG0pLGg9cy5kb3QodCxtKSxhPU1hdGgubWluKGgsYSkscj1NYXRoLm1heChoLHIpLHMuYWRkKGksZCxsKSxzLnN1YnRyYWN0KGwsYyxsKSxzLnN1YnRyYWN0KGwsdSxsKSxzLnN1YnRyYWN0KGwsZSxtKSxoPXMuZG90KHQsbSksYT1NYXRoLm1pbihoLGEpLHI9TWF0aC5tYXgoaCxyKSxzLnN1YnRyYWN0KGksZCxsKSxzLmFkZChsLGMsbCkscy5hZGQobCx1LGwpLHMuc3VidHJhY3QobCxlLG0pLGg9cy5kb3QodCxtKSxhPU1hdGgubWluKGgsYSkscj1NYXRoLm1heChoLHIpLHMuc3VidHJhY3QoaSxkLGwpLHMuYWRkKGwsYyxsKSxzLnN1YnRyYWN0KGwsdSxsKSxzLnN1YnRyYWN0KGwsZSxtKSxoPXMuZG90KHQsbSksYT1NYXRoLm1pbihoLGEpLHI9TWF0aC5tYXgoaCxyKSxzLnN1YnRyYWN0KGksZCxsKSxzLnN1YnRyYWN0KGwsYyxsKSxzLmFkZChsLHUsbCkscy5zdWJ0cmFjdChsLGUsbSksaD1zLmRvdCh0LG0pLGE9TWF0aC5taW4oaCxhKSxyPU1hdGgubWF4KGgscikscy5zdWJ0cmFjdChpLGQsbCkscy5zdWJ0cmFjdChsLGMsbCkscy5zdWJ0cmFjdChsLHUsbCkscy5zdWJ0cmFjdChsLGUsbSksaD1zLmRvdCh0LG0pLGE9TWF0aC5taW4oaCxhKSxyPU1hdGgubWF4KGgsciksby5zdGFydD1hLG8uc3RvcD1yLG99O0ZQPW5ldyBzLERQPW5ldyBzLEJQPW5ldyBzO1B0LmNvbXB1dGVDb3JuZXJzPWZ1bmN0aW9uKG4sZSl7ZyhlKXx8KGU9W25ldyBzLG5ldyBzLG5ldyBzLG5ldyBzLG5ldyBzLG5ldyBzLG5ldyBzLG5ldyBzXSk7bGV0IHQ9bi5jZW50ZXIsbz1uLmhhbGZBeGVzLGE9Wi5nZXRDb2x1bW4obywwLEZQKSxyPVouZ2V0Q29sdW1uKG8sMSxEUCksaT1aLmdldENvbHVtbihvLDIsQlApO3JldHVybiBzLmNsb25lKHQsZVswXSkscy5zdWJ0cmFjdChlWzBdLGEsZVswXSkscy5zdWJ0cmFjdChlWzBdLHIsZVswXSkscy5zdWJ0cmFjdChlWzBdLGksZVswXSkscy5jbG9uZSh0LGVbMV0pLHMuc3VidHJhY3QoZVsxXSxhLGVbMV0pLHMuc3VidHJhY3QoZVsxXSxyLGVbMV0pLHMuYWRkKGVbMV0saSxlWzFdKSxzLmNsb25lKHQsZVsyXSkscy5zdWJ0cmFjdChlWzJdLGEsZVsyXSkscy5hZGQoZVsyXSxyLGVbMl0pLHMuc3VidHJhY3QoZVsyXSxpLGVbMl0pLHMuY2xvbmUodCxlWzNdKSxzLnN1YnRyYWN0KGVbM10sYSxlWzNdKSxzLmFkZChlWzNdLHIsZVszXSkscy5hZGQoZVszXSxpLGVbM10pLHMuY2xvbmUodCxlWzRdKSxzLmFkZChlWzRdLGEsZVs0XSkscy5zdWJ0cmFjdChlWzRdLHIsZVs0XSkscy5zdWJ0cmFjdChlWzRdLGksZVs0XSkscy5jbG9uZSh0LGVbNV0pLHMuYWRkKGVbNV0sYSxlWzVdKSxzLnN1YnRyYWN0KGVbNV0scixlWzVdKSxzLmFkZChlWzVdLGksZVs1XSkscy5jbG9uZSh0LGVbNl0pLHMuYWRkKGVbNl0sYSxlWzZdKSxzLmFkZChlWzZdLHIsZVs2XSkscy5zdWJ0cmFjdChlWzZdLGksZVs2XSkscy5jbG9uZSh0LGVbN10pLHMuYWRkKGVbN10sYSxlWzddKSxzLmFkZChlWzddLHIsZVs3XSkscy5hZGQoZVs3XSxpLGVbN10pLGV9O1VQPW5ldyBaO1B0LmNvbXB1dGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihuLGUpe2coZSl8fChlPW5ldyBRKTtsZXQgdD1uLmNlbnRlcixvPVoubXVsdGlwbHlCeVVuaWZvcm1TY2FsZShuLmhhbGZBeGVzLDIsVVApO3JldHVybiBRLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG8sdCxlKX07alA9bmV3IHBlO1B0LmlzT2NjbHVkZWQ9ZnVuY3Rpb24obixlKXtsZXQgdD1wZS5mcm9tT3JpZW50ZWRCb3VuZGluZ0JveChuLGpQKTtyZXR1cm4hZS5pc0JvdW5kaW5nU3BoZXJlVmlzaWJsZSh0KX07UHQucHJvdG90eXBlLmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBQdC5pbnRlcnNlY3RQbGFuZSh0aGlzLG4pfTtQdC5wcm90b3R5cGUuZGlzdGFuY2VTcXVhcmVkVG89ZnVuY3Rpb24obil7cmV0dXJuIFB0LmRpc3RhbmNlU3F1YXJlZFRvKHRoaXMsbil9O1B0LnByb3RvdHlwZS5jb21wdXRlUGxhbmVEaXN0YW5jZXM9ZnVuY3Rpb24obixlLHQpe3JldHVybiBQdC5jb21wdXRlUGxhbmVEaXN0YW5jZXModGhpcyxuLGUsdCl9O1B0LnByb3RvdHlwZS5jb21wdXRlQ29ybmVycz1mdW5jdGlvbihuKXtyZXR1cm4gUHQuY29tcHV0ZUNvcm5lcnModGhpcyxuKX07UHQucHJvdG90eXBlLmNvbXB1dGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gUHQuY29tcHV0ZVRyYW5zZm9ybWF0aW9uKHRoaXMsbil9O1B0LnByb3RvdHlwZS5pc09jY2x1ZGVkPWZ1bmN0aW9uKG4pe3JldHVybiBQdC5pc09jY2x1ZGVkKHRoaXMsbil9O1B0LmVxdWFscz1mdW5jdGlvbihuLGUpe3JldHVybiBuPT09ZXx8ZyhuKSYmZyhlKSYmcy5lcXVhbHMobi5jZW50ZXIsZS5jZW50ZXIpJiZaLmVxdWFscyhuLmhhbGZBeGVzLGUuaGFsZkF4ZXMpfTtQdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24obil7cmV0dXJuIFB0LmNsb25lKHRoaXMsbil9O1B0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24obil7cmV0dXJuIFB0LmVxdWFscyh0aGlzLG4pfTttbj1QdH0pO2Z1bmN0aW9uIGdFKG4sZSx0LG8sYSl7bGV0IHI9cy5zdWJ0cmFjdChuLGUsTFApLGk9cy5kb3QodCxyKSxmPXMuZG90KG8scik7cmV0dXJuIFkuZnJvbUVsZW1lbnRzKGksZixhKX12YXIgVmYsTFAsaEUsbUUsYkUscEUsZ3MsbjA9WCgoKT0+e3Z0KCk7TWUoKTtJbigpO0FpKCk7VmY9e30sTFA9bmV3IHMsaEU9bmV3IHMsbUU9bmV3IHMsYkU9bmV3IHMscEU9bmV3IG1uO1ZmLnZhbGlkT3V0bGluZT1mdW5jdGlvbihuKXtsZXQgdD1tbi5mcm9tUG9pbnRzKG4scEUpLmhhbGZBeGVzLG89Wi5nZXRDb2x1bW4odCwwLGhFKSxhPVouZ2V0Q29sdW1uKHQsMSxtRSkscj1aLmdldENvbHVtbih0LDIsYkUpLGk9cy5tYWduaXR1ZGUobyksZj1zLm1hZ25pdHVkZShhKSxkPXMubWFnbml0dWRlKHIpO3JldHVybiEoaT09PTAmJihmPT09MHx8ZD09PTApfHxmPT09MCYmZD09PTApfTtWZi5jb21wdXRlUHJvamVjdFRvMkRBcmd1bWVudHM9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9bW4uZnJvbVBvaW50cyhuLHBFKSxyPWEuaGFsZkF4ZXMsaT1aLmdldENvbHVtbihyLDAsaEUpLGY9Wi5nZXRDb2x1bW4ociwxLG1FKSxkPVouZ2V0Q29sdW1uKHIsMixiRSksYz1zLm1hZ25pdHVkZShpKSx1PXMubWFnbml0dWRlKGYpLGw9cy5tYWduaXR1ZGUoZCksbT1NYXRoLm1pbihjLHUsbCk7aWYoYz09PTAmJih1PT09MHx8bD09PTApfHx1PT09MCYmbD09PTApcmV0dXJuITE7bGV0IGgsYjtyZXR1cm4obT09PXV8fG09PT1sKSYmKGg9aSksbT09PWM/aD1mOm09PT1sJiYoYj1mKSwobT09PWN8fG09PT11KSYmKGI9ZCkscy5ub3JtYWxpemUoaCx0KSxzLm5vcm1hbGl6ZShiLG8pLHMuY2xvbmUoYS5jZW50ZXIsZSksITB9O1ZmLmNyZWF0ZVByb2plY3RQb2ludHNUbzJERnVuY3Rpb249ZnVuY3Rpb24obixlLHQpe3JldHVybiBmdW5jdGlvbihvKXtsZXQgYT1uZXcgQXJyYXkoby5sZW5ndGgpO2ZvcihsZXQgcj0wO3I8by5sZW5ndGg7cisrKWFbcl09Z0Uob1tyXSxuLGUsdCk7cmV0dXJuIGF9fTtWZi5jcmVhdGVQcm9qZWN0UG9pbnRUbzJERnVuY3Rpb249ZnVuY3Rpb24obixlLHQpe3JldHVybiBmdW5jdGlvbihvLGEpe3JldHVybiBnRShvLG4sZSx0LGEpfX07Z3M9VmZ9KTt2YXIgX0UsYnQsaGM9WCgoKT0+e19FPXtOT05FOjAsR0VPREVTSUM6MSxSSFVNQjoyfTtPYmplY3QuZnJlZXplKF9FKTtidD1fRX0pO2Z1bmN0aW9uIGEwKG4sZSx0KXtpZihuPT09MClyZXR1cm4gZSp0O2xldCBvPW4qbixhPW8qbyxyPWEqbyxpPXIqbyxmPWkqbyxkPWYqbyxjPXQsdT1NYXRoLnNpbigyKmMpLGw9TWF0aC5zaW4oNCpjKSxtPU1hdGguc2luKDYqYyksaD1NYXRoLnNpbig4KmMpLGI9TWF0aC5zaW4oMTAqYykscD1NYXRoLnNpbigxMipjKTtyZXR1cm4gZSooKDEtby80LTMqYS82NC01KnIvMjU2LTE3NSppLzE2Mzg0LTQ0MSpmLzY1NTM2LTQ4NTEqZC8xMDQ4NTc2KSpjLSgzKm8vOCszKmEvMzIrNDUqci8xMDI0KzEwNSppLzQwOTYrMjIwNSpmLzEzMTA3Mis2MjM3KmQvNTI0Mjg4KSp1KygxNSphLzI1Nis0NSpyLzEwMjQrNTI1KmkvMTYzODQrMTU3NSpmLzY1NTM2KzE1NTkyNSpkLzgzODg2MDgpKmwtKDM1KnIvMzA3MisxNzUqaS8xMjI4OCszNjc1KmYvMjYyMTQ0KzEzNDc1KmQvMTA0ODU3NikqbSsoMzE1KmkvMTMxMDcyKzIyMDUqZi81MjQyODgrNDM2NTkqZC84Mzg4NjA4KSpoLSg2OTMqZi8xMzEwNzIwKzYyMzcqZC81MjQyODgwKSpiKzEwMDEqZC84Mzg4NjA4KnApfWZ1bmN0aW9uIHpQKG4sZSx0KXtsZXQgbz1uL3Q7aWYoZT09PTApcmV0dXJuIG87bGV0IGE9bypvLHI9YSpvLGk9cipvLGY9ZSxkPWYqZixjPWQqZCx1PWMqZCxsPXUqZCxtPWwqZCxoPW0qZCxiPU1hdGguc2luKDIqbykscD1NYXRoLmNvcygyKm8pLHk9TWF0aC5zaW4oNCpvKSxUPU1hdGguY29zKDQqbyksXz1NYXRoLnNpbig2Km8pLHc9TWF0aC5jb3MoNipvKSxFPU1hdGguc2luKDgqbyksUj1NYXRoLmNvcyg4Km8pLFM9TWF0aC5zaW4oMTAqbyksQz1NYXRoLmNvcygxMCpvKSxJPU1hdGguc2luKDEyKm8pO3JldHVybiBvK28qZC80KzcqbypjLzY0KzE1Km8qdS8yNTYrNTc5Km8qbC8xNjM4NCsxNTE1Km8qbS82NTUzNisxNjgzNypvKmgvMTA0ODU3NisoMypvKmMvMTYrNDUqbyp1LzI1Ni1vKigzMiphLTU2MSkqbC80MDk2LW8qKDIzMiphLTE2NzcpKm0vMTYzODQrbyooMzk5OTg1LTkwNTYwKmErNTEyKmkpKmgvNTI0Mjg4MCkqcCsoMjEqbyp1LzI1Nis0ODMqbypsLzQwOTYtbyooMjI0KmEtMTk2OSkqbS8xNjM4NC1vKigzMzE1MiphLTExMjU5OSkqaC8xMDQ4NTc2KSpUKygxNTEqbypsLzQwOTYrNDY4MSpvKm0vNjU1MzYrMTQ3OSpvKmgvMTYzODQtNDUzKnIqaC8zMjc2OCkqdysoMTA5NypvKm0vNjU1MzYrNDI3ODMqbypoLzEwNDg1NzYpKlIrODAxMSpvKmgvMTA0ODU3NipDKygzKmQvOCszKmMvMTYrMjEzKnUvMjA0OC0zKmEqdS82NCsyNTUqbC80MDk2LTMzKmEqbC81MTIrMjA4NjEqbS81MjQyODgtMzMqYSptLzUxMitpKm0vMTAyNCsyODI3MypoLzEwNDg1NzYtNDcxKmEqaC84MTkyKzkqaSpoLzQwOTYpKmIrKDIxKmMvMjU2KzIxKnUvMjU2KzUzMypsLzgxOTItMjEqYSpsLzUxMisxOTcqbS80MDk2LTMxNSphKm0vNDA5Nis1ODQwMzkqaC8xNjc3NzIxNi0xMjUxNyphKmgvMTMxMDcyKzcqaSpoLzIwNDgpKnkrKDE1MSp1LzYxNDQrMTUxKmwvNDA5Nis1MDE5Km0vMTMxMDcyLTQ1MyphKm0vMTYzODQrMjY5NjUqaC83ODY0MzItODYwNyphKmgvMTMxMDcyKSpfKygxMDk3KmwvMTMxMDcyKzEwOTcqbS82NTUzNisyMjU3OTcqaC8xMDQ4NTc2MC0xMDk3KmEqaC82NTUzNikqRSsoODAxMSptLzI2MjE0NDArODAxMSpoLzEwNDg1NzYpKlMrMjkzMzkzKmgvMjUxNjU4MjQwKkl9ZnVuY3Rpb24gX3MobixlKXtpZihuPT09MClyZXR1cm4gTWF0aC5sb2coTWF0aC50YW4oLjUqKGsuUElfT1ZFUl9UV08rZSkpKTtsZXQgdD1uKk1hdGguc2luKGUpO3JldHVybiBNYXRoLmxvZyhNYXRoLnRhbiguNSooay5QSV9PVkVSX1RXTytlKSkpLW4vMipNYXRoLmxvZygoMSt0KS8oMS10KSl9ZnVuY3Rpb24gR1AobixlLHQsbyxhKXtsZXQgcj1fcyhuLl9lbGxpcHRpY2l0eSx0KSxpPV9zKG4uX2VsbGlwdGljaXR5LGEpO3JldHVybiBNYXRoLmF0YW4yKGsubmVnYXRpdmVQaVRvUGkoby1lKSxpLXIpfWZ1bmN0aW9uIFZQKG4sZSx0LG8sYSxyLGkpe2xldCBmPW4uX2hlYWRpbmcsZD1yLW8sYztpZihrLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMoZiksay5QSV9PVkVSX1RXTyxrLkVQU0lMT044KSlpZihlPT09dCljPWUqTWF0aC5jb3MoYSkqay5uZWdhdGl2ZVBpVG9QaShkKTtlbHNle2xldCB1PU1hdGguc2luKGEpO2M9ZSpNYXRoLmNvcyhhKSprLm5lZ2F0aXZlUGlUb1BpKGQpL01hdGguc3FydCgxLW4uX2VsbGlwdGljaXR5U3F1YXJlZCp1KnUpfWVsc2V7bGV0IHU9YTAobi5fZWxsaXB0aWNpdHksZSxhKTtjPShhMChuLl9lbGxpcHRpY2l0eSxlLGkpLXUpL01hdGguY29zKGYpfXJldHVybiBNYXRoLmFicyhjKX1mdW5jdGlvbiB5RShuLGUsdCxvKXtsZXQgYT1zLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGUsbzApLEhQKSxyPXMubm9ybWFsaXplKG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odCxvMCksbzApLGk9by5tYXhpbXVtUmFkaXVzLGY9by5taW5pbXVtUmFkaXVzLGQ9aSppLGM9ZipmO24uX2VsbGlwdGljaXR5U3F1YXJlZD0oZC1jKS9kLG4uX2VsbGlwdGljaXR5PU1hdGguc3FydChuLl9lbGxpcHRpY2l0eVNxdWFyZWQpLG4uX3N0YXJ0PWFlLmNsb25lKGUsbi5fc3RhcnQpLG4uX3N0YXJ0LmhlaWdodD0wLG4uX2VuZD1hZS5jbG9uZSh0LG4uX2VuZCksbi5fZW5kLmhlaWdodD0wLG4uX2hlYWRpbmc9R1AobixlLmxvbmdpdHVkZSxlLmxhdGl0dWRlLHQubG9uZ2l0dWRlLHQubGF0aXR1ZGUpLG4uX2Rpc3RhbmNlPVZQKG4sby5tYXhpbXVtUmFkaXVzLG8ubWluaW11bVJhZGl1cyxlLmxvbmdpdHVkZSxlLmxhdGl0dWRlLHQubG9uZ2l0dWRlLHQubGF0aXR1ZGUpfWZ1bmN0aW9uIEFFKG4sZSx0LG8sYSxyKXtpZih0PT09MClyZXR1cm4gYWUuY2xvbmUobixyKTtsZXQgaT1hKmEsZixkLGM7aWYoTWF0aC5hYnMoay5QSV9PVkVSX1RXTy1NYXRoLmFicyhlKSk+ay5FUFNJTE9OOCl7bGV0IHU9YTAoYSxvLG4ubGF0aXR1ZGUpLGw9dCpNYXRoLmNvcyhlKSxtPXUrbDtpZihkPXpQKG0sYSxvKSxNYXRoLmFicyhlKTxrLkVQU0lMT04xMClmPWsubmVnYXRpdmVQaVRvUGkobi5sb25naXR1ZGUpO2Vsc2V7bGV0IGg9X3MoYSxuLmxhdGl0dWRlKSxiPV9zKGEsZCk7Yz1NYXRoLnRhbihlKSooYi1oKSxmPWsubmVnYXRpdmVQaVRvUGkobi5sb25naXR1ZGUrYyl9fWVsc2V7ZD1uLmxhdGl0dWRlO2xldCB1O2lmKGE9PT0wKXU9bypNYXRoLmNvcyhuLmxhdGl0dWRlKTtlbHNle2xldCBsPU1hdGguc2luKG4ubGF0aXR1ZGUpO3U9bypNYXRoLmNvcyhuLmxhdGl0dWRlKS9NYXRoLnNxcnQoMS1pKmwqbCl9Yz10L3UsZT4wP2Y9ay5uZWdhdGl2ZVBpVG9QaShuLmxvbmdpdHVkZStjKTpmPWsubmVnYXRpdmVQaVRvUGkobi5sb25naXR1ZGUtYyl9cmV0dXJuIGcocik/KHIubG9uZ2l0dWRlPWYsci5sYXRpdHVkZT1kLHIuaGVpZ2h0PTAscik6bmV3IGFlKGYsZCwwKX1mdW5jdGlvbiBHcihuLGUsdCl7bGV0IG89dD8/Sy5kZWZhdWx0O3RoaXMuX2VsbGlwc29pZD1vLHRoaXMuX3N0YXJ0PW5ldyBhZSx0aGlzLl9lbmQ9bmV3IGFlLHRoaXMuX2hlYWRpbmc9dm9pZCAwLHRoaXMuX2Rpc3RhbmNlPXZvaWQgMCx0aGlzLl9lbGxpcHRpY2l0eT12b2lkIDAsdGhpcy5fZWxsaXB0aWNpdHlTcXVhcmVkPXZvaWQgMCxnKG4pJiZnKGUpJiZ5RSh0aGlzLG4sZSxvKX12YXIgSFAsbzAsWm8sSGY9WCgoKT0+e01lKCk7Z3QoKTtmZSgpO1ZlKCk7amUoKTtIUD1uZXcgcyxvMD1uZXcgcztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHci5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH19LHN1cmZhY2VEaXN0YW5jZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc3RhbmNlfX0sc3RhcnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydH19LGVuZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuZH19LGhlYWRpbmc6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkaW5nfX19KTtHci5mcm9tU3RhcnRIZWFkaW5nRGlzdGFuY2U9ZnVuY3Rpb24obixlLHQsbyxhKXtsZXQgcj1vPz9LLmRlZmF1bHQsaT1yLm1heGltdW1SYWRpdXMsZj1yLm1pbmltdW1SYWRpdXMsZD1pKmksYz1mKmYsdT1NYXRoLnNxcnQoKGQtYykvZCk7ZT1rLm5lZ2F0aXZlUGlUb1BpKGUpO2xldCBsPUFFKG4sZSx0LHIubWF4aW11bVJhZGl1cyx1KTtyZXR1cm4hZyhhKXx8ZyhvKSYmIW8uZXF1YWxzKGEuZWxsaXBzb2lkKT9uZXcgR3IobixsLHIpOihhLnNldEVuZFBvaW50cyhuLGwpLGEpfTtHci5wcm90b3R5cGUuc2V0RW5kUG9pbnRzPWZ1bmN0aW9uKG4sZSl7eUUodGhpcyxuLGUsdGhpcy5fZWxsaXBzb2lkKX07R3IucHJvdG90eXBlLmludGVycG9sYXRlVXNpbmdGcmFjdGlvbj1mdW5jdGlvbihuLGUpe3JldHVybiB0aGlzLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2Uobip0aGlzLl9kaXN0YW5jZSxlKX07R3IucHJvdG90eXBlLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2U9ZnVuY3Rpb24obixlKXtyZXR1cm4gQUUodGhpcy5fc3RhcnQsdGhpcy5faGVhZGluZyxuLHRoaXMuX2VsbGlwc29pZC5tYXhpbXVtUmFkaXVzLHRoaXMuX2VsbGlwdGljaXR5LGUpfTtHci5wcm90b3R5cGUuZmluZEludGVyc2VjdGlvbldpdGhMb25naXR1ZGU9ZnVuY3Rpb24obixlKXtsZXQgdD10aGlzLl9lbGxpcHRpY2l0eSxvPXRoaXMuX2hlYWRpbmcsYT1NYXRoLmFicyhvKSxyPXRoaXMuX3N0YXJ0O2lmKG49ay5uZWdhdGl2ZVBpVG9QaShuKSxrLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMobiksTWF0aC5QSSxrLkVQU0lMT04xNCkmJihuPWsuc2lnbihyLmxvbmdpdHVkZSkqTWF0aC5QSSksZyhlKXx8KGU9bmV3IGFlKSxNYXRoLmFicyhrLlBJX09WRVJfVFdPLWEpPD1rLkVQU0lMT044KXJldHVybiBlLmxvbmdpdHVkZT1uLGUubGF0aXR1ZGU9ci5sYXRpdHVkZSxlLmhlaWdodD0wLGU7aWYoay5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGsuUElfT1ZFUl9UV08tYSksay5QSV9PVkVSX1RXTyxrLkVQU0lMT044KSlyZXR1cm4gay5lcXVhbHNFcHNpbG9uKG4sci5sb25naXR1ZGUsay5FUFNJTE9OMTIpP3ZvaWQgMDooZS5sb25naXR1ZGU9bixlLmxhdGl0dWRlPWsuUElfT1ZFUl9UV08qay5zaWduKGsuUElfT1ZFUl9UV08tbyksZS5oZWlnaHQ9MCxlKTtsZXQgaT1yLmxhdGl0dWRlLGY9dCpNYXRoLnNpbihpKSxkPU1hdGgudGFuKC41KihrLlBJX09WRVJfVFdPK2kpKSpNYXRoLmV4cCgobi1yLmxvbmdpdHVkZSkvTWF0aC50YW4obykpLGM9KDErZikvKDEtZiksdT1yLmxhdGl0dWRlLGw7ZG97bD11O2xldCBtPXQqTWF0aC5zaW4obCksaD0oMSttKS8oMS1tKTt1PTIqTWF0aC5hdGFuKGQqTWF0aC5wb3coaC9jLHQvMikpLWsuUElfT1ZFUl9UV099d2hpbGUoIWsuZXF1YWxzRXBzaWxvbih1LGwsay5FUFNJTE9OMTIpKTtyZXR1cm4gZS5sb25naXR1ZGU9bixlLmxhdGl0dWRlPXUsZS5oZWlnaHQ9MCxlfTtHci5wcm90b3R5cGUuZmluZEludGVyc2VjdGlvbldpdGhMYXRpdHVkZT1mdW5jdGlvbihuLGUpe2xldCB0PXRoaXMuX2VsbGlwdGljaXR5LG89dGhpcy5faGVhZGluZyxhPXRoaXMuX3N0YXJ0O2lmKGsuZXF1YWxzRXBzaWxvbihNYXRoLmFicyhvKSxrLlBJX09WRVJfVFdPLGsuRVBTSUxPTjgpKXJldHVybjtsZXQgcj1fcyh0LGEubGF0aXR1ZGUpLGk9X3ModCxuKSxmPU1hdGgudGFuKG8pKihpLXIpLGQ9ay5uZWdhdGl2ZVBpVG9QaShhLmxvbmdpdHVkZStmKTtyZXR1cm4gZyhlKT8oZS5sb25naXR1ZGU9ZCxlLmxhdGl0dWRlPW4sZS5oZWlnaHQ9MCxlKTpuZXcgYWUoZCxuLDApfTtabz1Hcn0pO2Z1bmN0aW9uIEtQKG4sZSl7dGhpcy5wb3NpdGlvbnM9ZyhuKT9uOltdLHRoaXMuaG9sZXM9ZyhlKT9lOltdfXZhciB3RSxURT1YKCgpPT57ZmUoKTt3RT1LUH0pO2Z1bmN0aW9uIGMwKG4sZSx0PTIpe2xldCBvPWUmJmUubGVuZ3RoLGE9bz9lWzBdKnQ6bi5sZW5ndGgscj1SRShuLDAsYSx0LCEwKSxpPVtdO2lmKCFyfHxyLm5leHQ9PT1yLnByZXYpcmV0dXJuIGk7bGV0IGYsZCxjO2lmKG8mJihyPUpQKG4sZSxyLHQpKSxuLmxlbmd0aD44MCp0KXtmPW5bMF0sZD1uWzFdO2xldCB1PWYsbD1kO2ZvcihsZXQgbT10O208YTttKz10KXtsZXQgaD1uW21dLGI9blttKzFdO2g8ZiYmKGY9aCksYjxkJiYoZD1iKSxoPnUmJih1PWgpLGI+bCYmKGw9Yil9Yz1NYXRoLm1heCh1LWYsbC1kKSxjPWMhPT0wPzMyNzY3L2M6MH1yZXR1cm4gcWYocixpLHQsZixkLGMsMCksaX1mdW5jdGlvbiBSRShuLGUsdCxvLGEpe2xldCByO2lmKGE9PT1jayhuLGUsdCxvKT4wKWZvcihsZXQgaT1lO2k8dDtpKz1vKXI9RUUoaS9vfDAsbltpXSxuW2krMV0scik7ZWxzZSBmb3IobGV0IGk9dC1vO2k+PWU7aS09bylyPUVFKGkvb3wwLG5baV0sbltpKzFdLHIpO3JldHVybiByJiZ5cyhyLHIubmV4dCkmJihYZihyKSxyPXIubmV4dCkscn1mdW5jdGlvbiBtYyhuLGUpe2lmKCFuKXJldHVybiBuO2V8fChlPW4pO2xldCB0PW4sbztkbyBpZihvPSExLCF0LnN0ZWluZXImJih5cyh0LHQubmV4dCl8fEZuKHQucHJldix0LHQubmV4dCk9PT0wKSl7aWYoWGYodCksdD1lPXQucHJldix0PT09dC5uZXh0KWJyZWFrO289ITB9ZWxzZSB0PXQubmV4dDt3aGlsZShvfHx0IT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gcWYobixlLHQsbyxhLHIsaSl7aWYoIW4pcmV0dXJuOyFpJiZyJiZ0ayhuLG8sYSxyKTtsZXQgZj1uO2Zvcig7bi5wcmV2IT09bi5uZXh0Oyl7bGV0IGQ9bi5wcmV2LGM9bi5uZXh0O2lmKHI/V1AobixvLGEscik6cVAobikpe2UucHVzaChkLmksbi5pLGMuaSksWGYobiksbj1jLm5leHQsZj1jLm5leHQ7Y29udGludWV9aWYobj1jLG49PT1mKXtpP2k9PT0xPyhuPVhQKG1jKG4pLGUpLHFmKG4sZSx0LG8sYSxyLDIpKTppPT09MiYmWVAobixlLHQsbyxhLHIpOnFmKG1jKG4pLGUsdCxvLGEsciwxKTticmVha319fWZ1bmN0aW9uIHFQKG4pe2xldCBlPW4ucHJldix0PW4sbz1uLm5leHQ7aWYoRm4oZSx0LG8pPj0wKXJldHVybiExO2xldCBhPWUueCxyPXQueCxpPW8ueCxmPWUueSxkPXQueSxjPW8ueSx1PU1hdGgubWluKGEscixpKSxsPU1hdGgubWluKGYsZCxjKSxtPU1hdGgubWF4KGEscixpKSxoPU1hdGgubWF4KGYsZCxjKSxiPW8ubmV4dDtmb3IoO2IhPT1lOyl7aWYoYi54Pj11JiZiLng8PW0mJmIueT49bCYmYi55PD1oJiZLZihhLGYscixkLGksYyxiLngsYi55KSYmRm4oYi5wcmV2LGIsYi5uZXh0KT49MClyZXR1cm4hMTtiPWIubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBXUChuLGUsdCxvKXtsZXQgYT1uLnByZXYscj1uLGk9bi5uZXh0O2lmKEZuKGEscixpKT49MClyZXR1cm4hMTtsZXQgZj1hLngsZD1yLngsYz1pLngsdT1hLnksbD1yLnksbT1pLnksaD1NYXRoLm1pbihmLGQsYyksYj1NYXRoLm1pbih1LGwsbSkscD1NYXRoLm1heChmLGQsYykseT1NYXRoLm1heCh1LGwsbSksVD1yMChoLGIsZSx0LG8pLF89cjAocCx5LGUsdCxvKSx3PW4ucHJldlosRT1uLm5leHRaO2Zvcig7dyYmdy56Pj1UJiZFJiZFLno8PV87KXtpZih3Lng+PWgmJncueDw9cCYmdy55Pj1iJiZ3Lnk8PXkmJnchPT1hJiZ3IT09aSYmS2YoZix1LGQsbCxjLG0sdy54LHcueSkmJkZuKHcucHJldix3LHcubmV4dCk+PTB8fCh3PXcucHJldlosRS54Pj1oJiZFLng8PXAmJkUueT49YiYmRS55PD15JiZFIT09YSYmRSE9PWkmJktmKGYsdSxkLGwsYyxtLEUueCxFLnkpJiZGbihFLnByZXYsRSxFLm5leHQpPj0wKSlyZXR1cm4hMTtFPUUubmV4dFp9Zm9yKDt3JiZ3Lno+PVQ7KXtpZih3Lng+PWgmJncueDw9cCYmdy55Pj1iJiZ3Lnk8PXkmJnchPT1hJiZ3IT09aSYmS2YoZix1LGQsbCxjLG0sdy54LHcueSkmJkZuKHcucHJldix3LHcubmV4dCk+PTApcmV0dXJuITE7dz13LnByZXZafWZvcig7RSYmRS56PD1fOyl7aWYoRS54Pj1oJiZFLng8PXAmJkUueT49YiYmRS55PD15JiZFIT09YSYmRSE9PWkmJktmKGYsdSxkLGwsYyxtLEUueCxFLnkpJiZGbihFLnByZXYsRSxFLm5leHQpPj0wKXJldHVybiExO0U9RS5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBYUChuLGUpe2xldCB0PW47ZG97bGV0IG89dC5wcmV2LGE9dC5uZXh0Lm5leHQ7IXlzKG8sYSkmJk9FKG8sdCx0Lm5leHQsYSkmJldmKG8sYSkmJldmKGEsbykmJihlLnB1c2goby5pLHQuaSxhLmkpLFhmKHQpLFhmKHQubmV4dCksdD1uPWEpLHQ9dC5uZXh0fXdoaWxlKHQhPT1uKTtyZXR1cm4gbWModCl9ZnVuY3Rpb24gWVAobixlLHQsbyxhLHIpe2xldCBpPW47ZG97bGV0IGY9aS5uZXh0Lm5leHQ7Zm9yKDtmIT09aS5wcmV2Oyl7aWYoaS5pIT09Zi5pJiZhayhpLGYpKXtsZXQgZD1TRShpLGYpO2k9bWMoaSxpLm5leHQpLGQ9bWMoZCxkLm5leHQpLHFmKGksZSx0LG8sYSxyLDApLHFmKGQsZSx0LG8sYSxyLDApO3JldHVybn1mPWYubmV4dH1pPWkubmV4dH13aGlsZShpIT09bil9ZnVuY3Rpb24gSlAobixlLHQsbyl7bGV0IGE9W107Zm9yKGxldCByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXtsZXQgZj1lW3JdKm8sZD1yPGktMT9lW3IrMV0qbzpuLmxlbmd0aCxjPVJFKG4sZixkLG8sITEpO2M9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLGEucHVzaChvayhjKSl9YS5zb3J0KFpQKTtmb3IobGV0IHI9MDtyPGEubGVuZ3RoO3IrKyl0PVFQKGFbcl0sdCk7cmV0dXJuIHR9ZnVuY3Rpb24gWlAobixlKXtsZXQgdD1uLngtZS54O2lmKHQ9PT0wJiYodD1uLnktZS55LHQ9PT0wKSl7bGV0IG89KG4ubmV4dC55LW4ueSkvKG4ubmV4dC54LW4ueCksYT0oZS5uZXh0LnktZS55KS8oZS5uZXh0LngtZS54KTt0PW8tYX1yZXR1cm4gdH1mdW5jdGlvbiBRUChuLGUpe2xldCB0PSRQKG4sZSk7aWYoIXQpcmV0dXJuIGU7bGV0IG89U0UodCxuKTtyZXR1cm4gbWMobyxvLm5leHQpLG1jKHQsdC5uZXh0KX1mdW5jdGlvbiAkUChuLGUpe2xldCB0PWUsbz1uLngsYT1uLnkscj0tMS8wLGk7aWYoeXMobix0KSlyZXR1cm4gdDtkb3tpZih5cyhuLHQubmV4dCkpcmV0dXJuIHQubmV4dDtpZihhPD10LnkmJmE+PXQubmV4dC55JiZ0Lm5leHQueSE9PXQueSl7bGV0IGw9dC54KyhhLXQueSkqKHQubmV4dC54LXQueCkvKHQubmV4dC55LXQueSk7aWYobDw9byYmbD5yJiYocj1sLGk9dC54PHQubmV4dC54P3Q6dC5uZXh0LGw9PT1vKSlyZXR1cm4gaX10PXQubmV4dH13aGlsZSh0IT09ZSk7aWYoIWkpcmV0dXJuIG51bGw7bGV0IGY9aSxkPWkueCxjPWkueSx1PTEvMDt0PWk7ZG97aWYobz49dC54JiZ0Lng+PWQmJm8hPT10LngmJnhFKGE8Yz9vOnIsYSxkLGMsYTxjP3I6byxhLHQueCx0LnkpKXtsZXQgbD1NYXRoLmFicyhhLXQueSkvKG8tdC54KTtXZih0LG4pJiYobDx1fHxsPT09dSYmKHQueD5pLnh8fHQueD09PWkueCYmZWsoaSx0KSkpJiYoaT10LHU9bCl9dD10Lm5leHR9d2hpbGUodCE9PWYpO3JldHVybiBpfWZ1bmN0aW9uIGVrKG4sZSl7cmV0dXJuIEZuKG4ucHJldixuLGUucHJldik8MCYmRm4oZS5uZXh0LG4sbi5uZXh0KTwwfWZ1bmN0aW9uIHRrKG4sZSx0LG8pe2xldCBhPW47ZG8gYS56PT09MCYmKGEuej1yMChhLngsYS55LGUsdCxvKSksYS5wcmV2Wj1hLnByZXYsYS5uZXh0Wj1hLm5leHQsYT1hLm5leHQ7d2hpbGUoYSE9PW4pO2EucHJldloubmV4dFo9bnVsbCxhLnByZXZaPW51bGwsbmsoYSl9ZnVuY3Rpb24gbmsobil7bGV0IGUsdD0xO2Rve2xldCBvPW4sYTtuPW51bGw7bGV0IHI9bnVsbDtmb3IoZT0wO287KXtlKys7bGV0IGk9byxmPTA7Zm9yKGxldCBjPTA7Yzx0JiYoZisrLGk9aS5uZXh0WiwhIWkpO2MrKyk7bGV0IGQ9dDtmb3IoO2Y+MHx8ZD4wJiZpOylmIT09MCYmKGQ9PT0wfHwhaXx8by56PD1pLnopPyhhPW8sbz1vLm5leHRaLGYtLSk6KGE9aSxpPWkubmV4dFosZC0tKSxyP3IubmV4dFo9YTpuPWEsYS5wcmV2Wj1yLHI9YTtvPWl9ci5uZXh0Wj1udWxsLHQqPTJ9d2hpbGUoZT4xKTtyZXR1cm4gbn1mdW5jdGlvbiByMChuLGUsdCxvLGEpe3JldHVybiBuPShuLXQpKmF8MCxlPShlLW8pKmF8MCxuPShufG48PDgpJjE2NzExOTM1LG49KG58bjw8NCkmMjUyNjQ1MTM1LG49KG58bjw8MikmODU4OTkzNDU5LG49KG58bjw8MSkmMTQzMTY1NTc2NSxlPShlfGU8PDgpJjE2NzExOTM1LGU9KGV8ZTw8NCkmMjUyNjQ1MTM1LGU9KGV8ZTw8MikmODU4OTkzNDU5LGU9KGV8ZTw8MSkmMTQzMTY1NTc2NSxufGU8PDF9ZnVuY3Rpb24gb2sobil7bGV0IGU9bix0PW47ZG8oZS54PHQueHx8ZS54PT09dC54JiZlLnk8dC55KSYmKHQ9ZSksZT1lLm5leHQ7d2hpbGUoZSE9PW4pO3JldHVybiB0fWZ1bmN0aW9uIHhFKG4sZSx0LG8sYSxyLGksZil7cmV0dXJuKGEtaSkqKGUtZik+PShuLWkpKihyLWYpJiYobi1pKSooby1mKT49KHQtaSkqKGUtZikmJih0LWkpKihyLWYpPj0oYS1pKSooby1mKX1mdW5jdGlvbiBLZihuLGUsdCxvLGEscixpLGYpe3JldHVybiEobj09PWkmJmU9PT1mKSYmeEUobixlLHQsbyxhLHIsaSxmKX1mdW5jdGlvbiBhayhuLGUpe3JldHVybiBuLm5leHQuaSE9PWUuaSYmbi5wcmV2LmkhPT1lLmkmJiFyayhuLGUpJiYoV2YobixlKSYmV2YoZSxuKSYmaWsobixlKSYmKEZuKG4ucHJldixuLGUucHJldil8fEZuKG4sZS5wcmV2LGUpKXx8eXMobixlKSYmRm4obi5wcmV2LG4sbi5uZXh0KT4wJiZGbihlLnByZXYsZSxlLm5leHQpPjApfWZ1bmN0aW9uIEZuKG4sZSx0KXtyZXR1cm4oZS55LW4ueSkqKHQueC1lLngpLShlLngtbi54KSoodC55LWUueSl9ZnVuY3Rpb24geXMobixlKXtyZXR1cm4gbi54PT09ZS54JiZuLnk9PT1lLnl9ZnVuY3Rpb24gT0UobixlLHQsbyl7bGV0IGE9Z2goRm4obixlLHQpKSxyPWdoKEZuKG4sZSxvKSksaT1naChGbih0LG8sbikpLGY9Z2goRm4odCxvLGUpKTtyZXR1cm4hIShhIT09ciYmaSE9PWZ8fGE9PT0wJiZwaChuLHQsZSl8fHI9PT0wJiZwaChuLG8sZSl8fGk9PT0wJiZwaCh0LG4sbyl8fGY9PT0wJiZwaCh0LGUsbykpfWZ1bmN0aW9uIHBoKG4sZSx0KXtyZXR1cm4gZS54PD1NYXRoLm1heChuLngsdC54KSYmZS54Pj1NYXRoLm1pbihuLngsdC54KSYmZS55PD1NYXRoLm1heChuLnksdC55KSYmZS55Pj1NYXRoLm1pbihuLnksdC55KX1mdW5jdGlvbiBnaChuKXtyZXR1cm4gbj4wPzE6bjwwPy0xOjB9ZnVuY3Rpb24gcmsobixlKXtsZXQgdD1uO2Rve2lmKHQuaSE9PW4uaSYmdC5uZXh0LmkhPT1uLmkmJnQuaSE9PWUuaSYmdC5uZXh0LmkhPT1lLmkmJk9FKHQsdC5uZXh0LG4sZSkpcmV0dXJuITA7dD10Lm5leHR9d2hpbGUodCE9PW4pO3JldHVybiExfWZ1bmN0aW9uIFdmKG4sZSl7cmV0dXJuIEZuKG4ucHJldixuLG4ubmV4dCk8MD9GbihuLGUsbi5uZXh0KT49MCYmRm4obixuLnByZXYsZSk+PTA6Rm4obixlLG4ucHJldik8MHx8Rm4obixuLm5leHQsZSk8MH1mdW5jdGlvbiBpayhuLGUpe2xldCB0PW4sbz0hMSxhPShuLngrZS54KS8yLHI9KG4ueStlLnkpLzI7ZG8gdC55PnIhPXQubmV4dC55PnImJnQubmV4dC55IT09dC55JiZhPCh0Lm5leHQueC10LngpKihyLXQueSkvKHQubmV4dC55LXQueSkrdC54JiYobz0hbyksdD10Lm5leHQ7d2hpbGUodCE9PW4pO3JldHVybiBvfWZ1bmN0aW9uIFNFKG4sZSl7bGV0IHQ9aTAobi5pLG4ueCxuLnkpLG89aTAoZS5pLGUueCxlLnkpLGE9bi5uZXh0LHI9ZS5wcmV2O3JldHVybiBuLm5leHQ9ZSxlLnByZXY9bix0Lm5leHQ9YSxhLnByZXY9dCxvLm5leHQ9dCx0LnByZXY9byxyLm5leHQ9byxvLnByZXY9cixvfWZ1bmN0aW9uIEVFKG4sZSx0LG8pe2xldCBhPWkwKG4sZSx0KTtyZXR1cm4gbz8oYS5uZXh0PW8ubmV4dCxhLnByZXY9byxvLm5leHQucHJldj1hLG8ubmV4dD1hKTooYS5wcmV2PWEsYS5uZXh0PWEpLGF9ZnVuY3Rpb24gWGYobil7bi5uZXh0LnByZXY9bi5wcmV2LG4ucHJldi5uZXh0PW4ubmV4dCxuLnByZXZaJiYobi5wcmV2Wi5uZXh0Wj1uLm5leHRaKSxuLm5leHRaJiYobi5uZXh0Wi5wcmV2Wj1uLnByZXZaKX1mdW5jdGlvbiBpMChuLGUsdCl7cmV0dXJue2k6bix4OmUseTp0LHByZXY6bnVsbCxuZXh0Om51bGwsejowLHByZXZaOm51bGwsbmV4dFo6bnVsbCxzdGVpbmVyOiExfX1mdW5jdGlvbiBjayhuLGUsdCxvKXtsZXQgYT0wO2ZvcihsZXQgcj1lLGk9dC1vO3I8dDtyKz1vKWErPShuW2ldLW5bcl0pKihuW3IrMV0rbltpKzFdKSxpPXI7cmV0dXJuIGF9dmFyIENFPVgoKCk9Pnt9KTt2YXIgWWYsTW8sYmM9WCgoKT0+e29jKCk7WWY9e0NMT0NLV0lTRTpOZS5DVyxDT1VOVEVSX0NMT0NLV0lTRTpOZS5DQ1d9O1lmLnZhbGlkYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09WWYuQ0xPQ0tXSVNFfHxuPT09WWYuQ09VTlRFUl9DTE9DS1dJU0V9O09iamVjdC5mcmVlemUoWWYpO01vPVlmfSk7dmFyIHNrLGZrLHdpLFBFLGtFLHZFLE1FLE5FLElFLFZyLEZFLERFLEJFLEFzLGRrLHVrLGxrLHMwLHd0LFdhPVgoKCk9PntDRSgpO3Z0KCk7TWUoKTtndCgpO0N0KCk7ZmUoKTtWZSgpO0hmKCk7WHQoKTtZdCgpO2plKCk7dG4oKTtiYygpO3NrPW5ldyBzLGZrPW5ldyBzLHdpPXt9O3dpLmNvbXB1dGVBcmVhMkQ9ZnVuY3Rpb24obil7bGV0IGU9bi5sZW5ndGgsdD0wO2ZvcihsZXQgbz1lLTEsYT0wO2E8ZTtvPWErKyl7bGV0IHI9bltvXSxpPW5bYV07dCs9ci54KmkueS1pLngqci55fXJldHVybiB0Ki41fTt3aS5jb21wdXRlV2luZGluZ09yZGVyMkQ9ZnVuY3Rpb24obil7cmV0dXJuIHdpLmNvbXB1dGVBcmVhMkQobik+MD9Nby5DT1VOVEVSX0NMT0NLV0lTRTpNby5DTE9DS1dJU0V9O3dpLnRyaWFuZ3VsYXRlPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9WS5wYWNrQXJyYXkobik7cmV0dXJuIGMwKHQsZSwyKX07UEU9bmV3IHMsa0U9bmV3IHMsdkU9bmV3IHMsTUU9bmV3IHMsTkU9bmV3IHMsSUU9bmV3IHMsVnI9bmV3IHMsRkU9bmV3IFksREU9bmV3IFksQkU9bmV3IFksQXM9bmV3IFk7d2kuY29tcHV0ZVN1YmRpdmlzaW9uPWZ1bmN0aW9uKG4sZSx0LG8sYSl7YT1hPz9rLlJBRElBTlNfUEVSX0RFR1JFRTtsZXQgcj1nKG8pLGk9dC5zbGljZSgwKSxmLGQ9ZS5sZW5ndGgsYz1uZXcgQXJyYXkoZCozKSx1PW5ldyBBcnJheShkKjIpLGw9MCxtPTA7Zm9yKGY9MDtmPGQ7ZisrKXtsZXQgdz1lW2ZdO2lmKGNbbCsrXT13LngsY1tsKytdPXcueSxjW2wrK109dy56LHIpe2xldCBFPW9bZl07dVttKytdPUUueCx1W20rK109RS55fX1sZXQgaD1bXSxiPXt9LHA9bi5tYXhpbXVtUmFkaXVzLHk9ay5jaG9yZExlbmd0aChhLHApLFQ9eSp5O2Zvcig7aS5sZW5ndGg+MDspe2xldCB3PWkucG9wKCksRT1pLnBvcCgpLFI9aS5wb3AoKSxTPXMuZnJvbUFycmF5KGMsUiozLFBFKSxDPXMuZnJvbUFycmF5KGMsRSozLGtFKSxJPXMuZnJvbUFycmF5KGMsdyozLHZFKSxNLFAsRjtyJiYoTT1ZLmZyb21BcnJheSh1LFIqMixGRSksUD1ZLmZyb21BcnJheSh1LEUqMixERSksRj1ZLmZyb21BcnJheSh1LHcqMixCRSkpO2xldCBBPXMubXVsdGlwbHlCeVNjYWxhcihzLm5vcm1hbGl6ZShTLE1FKSxwLE1FKSx4PXMubXVsdGlwbHlCeVNjYWxhcihzLm5vcm1hbGl6ZShDLE5FKSxwLE5FKSxOPXMubXVsdGlwbHlCeVNjYWxhcihzLm5vcm1hbGl6ZShJLElFKSxwLElFKSx2PXMubWFnbml0dWRlU3F1YXJlZChzLnN1YnRyYWN0KEEseCxWcikpLFU9cy5tYWduaXR1ZGVTcXVhcmVkKHMuc3VidHJhY3QoeCxOLFZyKSksTD1zLm1hZ25pdHVkZVNxdWFyZWQocy5zdWJ0cmFjdChOLEEsVnIpKSxEPU1hdGgubWF4KHYsVSxMKSxHLFYsTztEPlQ/dj09PUQ/KEc9YCR7TWF0aC5taW4oUixFKX0gJHtNYXRoLm1heChSLEUpfWAsZj1iW0ddLGcoZil8fChWPXMuYWRkKFMsQyxWcikscy5tdWx0aXBseUJ5U2NhbGFyKFYsLjUsViksYy5wdXNoKFYueCxWLnksVi56KSxmPWMubGVuZ3RoLzMtMSxiW0ddPWYsciYmKE89WS5hZGQoTSxQLEFzKSxZLm11bHRpcGx5QnlTY2FsYXIoTywuNSxPKSx1LnB1c2goTy54LE8ueSkpKSxpLnB1c2goUixmLHcpLGkucHVzaChmLEUsdykpOlU9PT1EPyhHPWAke01hdGgubWluKEUsdyl9ICR7TWF0aC5tYXgoRSx3KX1gLGY9YltHXSxnKGYpfHwoVj1zLmFkZChDLEksVnIpLHMubXVsdGlwbHlCeVNjYWxhcihWLC41LFYpLGMucHVzaChWLngsVi55LFYueiksZj1jLmxlbmd0aC8zLTEsYltHXT1mLHImJihPPVkuYWRkKFAsRixBcyksWS5tdWx0aXBseUJ5U2NhbGFyKE8sLjUsTyksdS5wdXNoKE8ueCxPLnkpKSksaS5wdXNoKEUsZixSKSxpLnB1c2goZix3LFIpKTpMPT09RCYmKEc9YCR7TWF0aC5taW4odyxSKX0gJHtNYXRoLm1heCh3LFIpfWAsZj1iW0ddLGcoZil8fChWPXMuYWRkKEksUyxWcikscy5tdWx0aXBseUJ5U2NhbGFyKFYsLjUsViksYy5wdXNoKFYueCxWLnksVi56KSxmPWMubGVuZ3RoLzMtMSxiW0ddPWYsciYmKE89WS5hZGQoRixNLEFzKSxZLm11bHRpcGx5QnlTY2FsYXIoTywuNSxPKSx1LnB1c2goTy54LE8ueSkpKSxpLnB1c2godyxmLEUpLGkucHVzaChmLFIsRSkpOihoLnB1c2goUiksaC5wdXNoKEUpLGgucHVzaCh3KSl9bGV0IF89e2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfSxpbmRpY2VzOmgscHJpbWl0aXZlVHlwZTpGZS5UUklBTkdMRVN9O3JldHVybiByJiYoXy5hdHRyaWJ1dGVzLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczp1fSkpLG5ldyBQZShfKX07ZGs9bmV3IGFlLHVrPW5ldyBhZSxsaz1uZXcgYWUsczA9bmV3IGFlO3dpLmNvbXB1dGVSaHVtYkxpbmVTdWJkaXZpc2lvbj1mdW5jdGlvbihuLGUsdCxvLGEpe2E9YT8/ay5SQURJQU5TX1BFUl9ERUdSRUU7bGV0IHI9ZyhvKSxpPXQuc2xpY2UoMCksZixkPWUubGVuZ3RoLGM9bmV3IEFycmF5KGQqMyksdT1uZXcgQXJyYXkoZCoyKSxsPTAsbT0wO2ZvcihmPTA7ZjxkO2YrKyl7bGV0IFI9ZVtmXTtpZihjW2wrK109Ui54LGNbbCsrXT1SLnksY1tsKytdPVIueixyKXtsZXQgUz1vW2ZdO3VbbSsrXT1TLngsdVttKytdPVMueX19bGV0IGg9W10sYj17fSxwPW4ubWF4aW11bVJhZGl1cyx5PWsuY2hvcmRMZW5ndGgoYSxwKSxUPW5ldyBabyh2b2lkIDAsdm9pZCAwLG4pLF89bmV3IFpvKHZvaWQgMCx2b2lkIDAsbiksdz1uZXcgWm8odm9pZCAwLHZvaWQgMCxuKTtmb3IoO2kubGVuZ3RoPjA7KXtsZXQgUj1pLnBvcCgpLFM9aS5wb3AoKSxDPWkucG9wKCksST1zLmZyb21BcnJheShjLEMqMyxQRSksTT1zLmZyb21BcnJheShjLFMqMyxrRSksUD1zLmZyb21BcnJheShjLFIqMyx2RSksRixBLHg7ciYmKEY9WS5mcm9tQXJyYXkodSxDKjIsRkUpLEE9WS5mcm9tQXJyYXkodSxTKjIsREUpLHg9WS5mcm9tQXJyYXkodSxSKjIsQkUpKTtsZXQgTj1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKEksZGspLHY9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhNLHVrKSxVPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoUCxsayk7VC5zZXRFbmRQb2ludHMoTix2KTtsZXQgTD1ULnN1cmZhY2VEaXN0YW5jZTtfLnNldEVuZFBvaW50cyh2LFUpO2xldCBEPV8uc3VyZmFjZURpc3RhbmNlO3cuc2V0RW5kUG9pbnRzKFUsTik7bGV0IEc9dy5zdXJmYWNlRGlzdGFuY2UsVj1NYXRoLm1heChMLEQsRyksTyxKLHJlLHNlLG9lO1Y+eT9MPT09Vj8oTz1gJHtNYXRoLm1pbihDLFMpfSAke01hdGgubWF4KEMsUyl9YCxmPWJbT10sZyhmKXx8KEo9VC5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb24oLjUsczApLHJlPShOLmhlaWdodCt2LmhlaWdodCkqLjUsc2U9cy5mcm9tUmFkaWFucyhKLmxvbmdpdHVkZSxKLmxhdGl0dWRlLHJlLG4sVnIpLGMucHVzaChzZS54LHNlLnksc2UueiksZj1jLmxlbmd0aC8zLTEsYltPXT1mLHImJihvZT1ZLmFkZChGLEEsQXMpLFkubXVsdGlwbHlCeVNjYWxhcihvZSwuNSxvZSksdS5wdXNoKG9lLngsb2UueSkpKSxpLnB1c2goQyxmLFIpLGkucHVzaChmLFMsUikpOkQ9PT1WPyhPPWAke01hdGgubWluKFMsUil9ICR7TWF0aC5tYXgoUyxSKX1gLGY9YltPXSxnKGYpfHwoSj1fLmludGVycG9sYXRlVXNpbmdGcmFjdGlvbiguNSxzMCkscmU9KHYuaGVpZ2h0K1UuaGVpZ2h0KSouNSxzZT1zLmZyb21SYWRpYW5zKEoubG9uZ2l0dWRlLEoubGF0aXR1ZGUscmUsbixWciksYy5wdXNoKHNlLngsc2UueSxzZS56KSxmPWMubGVuZ3RoLzMtMSxiW09dPWYsciYmKG9lPVkuYWRkKEEseCxBcyksWS5tdWx0aXBseUJ5U2NhbGFyKG9lLC41LG9lKSx1LnB1c2gob2UueCxvZS55KSkpLGkucHVzaChTLGYsQyksaS5wdXNoKGYsUixDKSk6Rz09PVYmJihPPWAke01hdGgubWluKFIsQyl9ICR7TWF0aC5tYXgoUixDKX1gLGY9YltPXSxnKGYpfHwoSj13LmludGVycG9sYXRlVXNpbmdGcmFjdGlvbiguNSxzMCkscmU9KFUuaGVpZ2h0K04uaGVpZ2h0KSouNSxzZT1zLmZyb21SYWRpYW5zKEoubG9uZ2l0dWRlLEoubGF0aXR1ZGUscmUsbixWciksYy5wdXNoKHNlLngsc2UueSxzZS56KSxmPWMubGVuZ3RoLzMtMSxiW09dPWYsciYmKG9lPVkuYWRkKHgsRixBcyksWS5tdWx0aXBseUJ5U2NhbGFyKG9lLC41LG9lKSx1LnB1c2gob2UueCxvZS55KSkpLGkucHVzaChSLGYsUyksaS5wdXNoKGYsQyxTKSk6KGgucHVzaChDKSxoLnB1c2goUyksaC5wdXNoKFIpKX1sZXQgRT17YXR0cmlidXRlczp7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpjfSl9LGluZGljZXM6aCxwcmltaXRpdmVUeXBlOkZlLlRSSUFOR0xFU307cmV0dXJuIHImJihFLmF0dHJpYnV0ZXMuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOnV9KSksbmV3IFBlKEUpfTt3aS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQ9ZnVuY3Rpb24obixlLHQsbyl7dD10Pz9LLmRlZmF1bHQ7bGV0IGE9c2sscj1maztpZihlPWU/PzAsbz1vPz8hMCxnKG4pKXtsZXQgaT1uLmxlbmd0aDtmb3IobGV0IGY9MDtmPGk7Zis9MylzLmZyb21BcnJheShuLGYsciksbyYmKHI9dC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHIscikpLGUhPT0wJiYoYT10Lmdlb2RldGljU3VyZmFjZU5vcm1hbChyLGEpLHMubXVsdGlwbHlCeVNjYWxhcihhLGUsYSkscy5hZGQocixhLHIpKSxuW2ZdPXIueCxuW2YrMV09ci55LG5bZisyXT1yLnp9cmV0dXJuIG59O3d0PXdpfSk7ZnVuY3Rpb24gVGkoKXt0aGlzLl9hcnJheT1bXSx0aGlzLl9vZmZzZXQ9MCx0aGlzLl9sZW5ndGg9MH12YXIgZjAsVUU9WCgoKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpLnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGVuZ3RofX19KTtUaS5wcm90b3R5cGUuZW5xdWV1ZT1mdW5jdGlvbihuKXt0aGlzLl9hcnJheS5wdXNoKG4pLHRoaXMuX2xlbmd0aCsrfTtUaS5wcm90b3R5cGUuZGVxdWV1ZT1mdW5jdGlvbigpe2lmKHRoaXMuX2xlbmd0aD09PTApcmV0dXJuO2xldCBuPXRoaXMuX2FycmF5LGU9dGhpcy5fb2Zmc2V0LHQ9bltlXTtyZXR1cm4gbltlXT12b2lkIDAsZSsrLGU+MTAmJmUqMj5uLmxlbmd0aCYmKHRoaXMuX2FycmF5PW4uc2xpY2UoZSksZT0wKSx0aGlzLl9vZmZzZXQ9ZSx0aGlzLl9sZW5ndGgtLSx0fTtUaS5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe2lmKHRoaXMuX2xlbmd0aCE9PTApcmV0dXJuIHRoaXMuX2FycmF5W3RoaXMuX29mZnNldF19O1RpLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fYXJyYXkuaW5kZXhPZihuKSE9PS0xfTtUaS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9hcnJheS5sZW5ndGg9dGhpcy5fb2Zmc2V0PXRoaXMuX2xlbmd0aD0wfTtUaS5wcm90b3R5cGUuc29ydD1mdW5jdGlvbihuKXt0aGlzLl9vZmZzZXQ+MCYmKHRoaXMuX2FycmF5PXRoaXMuX2FycmF5LnNsaWNlKHRoaXMuX29mZnNldCksdGhpcy5fb2Zmc2V0PTApLHRoaXMuX2FycmF5LnNvcnQobil9O2YwPVRpfSk7ZnVuY3Rpb24gekUobixlLHQsbyl7cmV0dXJuIFkuc3VidHJhY3QoZSxuLHBjKSxZLm11bHRpcGx5QnlTY2FsYXIocGMsdC9vLHBjKSxZLmFkZChuLHBjLHBjKSxbcGMueCxwYy55XX1mdW5jdGlvbiBoayhuLGUsdCxvKXtyZXR1cm4gcy5zdWJ0cmFjdChlLG4sRWkpLHMubXVsdGlwbHlCeVNjYWxhcihFaSx0L28sRWkpLHMuYWRkKG4sRWksRWkpLFtFaS54LEVpLnksRWkuel19ZnVuY3Rpb24gd2sobixlLHQpe2xldCBvPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobix5aCksYT10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsQWgpO2lmKE1hdGguc2lnbihvLmxhdGl0dWRlKT09PU1hdGguc2lnbihhLmxhdGl0dWRlKSlyZXR1cm47X2guc2V0RW5kUG9pbnRzKG8sYSk7bGV0IHI9X2guZmluZEludGVyc2VjdGlvbldpdGhMYXRpdHVkZSgwLEFrKTtpZighZyhyKSlyZXR1cm47bGV0IGk9TWF0aC5taW4oby5sb25naXR1ZGUsYS5sb25naXR1ZGUpLGY9TWF0aC5tYXgoby5sb25naXR1ZGUsYS5sb25naXR1ZGUpO2lmKE1hdGguYWJzKGYtaSk+ay5QSSl7bGV0IGQ9aTtpPWYsZj1kfWlmKCEoci5sb25naXR1ZGU8aXx8ci5sb25naXR1ZGU+ZikpcmV0dXJuIHQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4ocil9ZnVuY3Rpb24gVGsobixlLHQsbyl7aWYobz09PWJ0LlJIVU1CKXJldHVybiB3ayhuLGUsdCk7bGV0IGE9UW4ubGluZVNlZ21lbnRQbGFuZShuLGUsbm4uT1JJR0lOX1hZX1BMQU5FKTtpZihnKGEpKXJldHVybiB0LnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoYSxhKX1mdW5jdGlvbiBSayhuLGUsdCl7bGV0IG89W10sYSxyLGksZixkLGM9MDtmb3IoO2M8bi5sZW5ndGg7KXthPW5bY10scj1uWyhjKzEpJW4ubGVuZ3RoXSxpPWsuc2lnbihhLnopLGY9ay5zaWduKHIueik7bGV0IHU9bD0+ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhsLEVrKS5sb25naXR1ZGU7aWYoaT09PTApby5wdXNoKHtwb3NpdGlvbjpjLHR5cGU6aSx2aXNpdGVkOiExLG5leHQ6Zix0aGV0YTp1KGEpfSk7ZWxzZSBpZihmIT09MCl7aWYoZD1UayhhLHIsZSx0KSwrK2MsIWcoZCkpY29udGludWU7bi5zcGxpY2UoYywwLGQpLG8ucHVzaCh7cG9zaXRpb246Yyx0eXBlOmksdmlzaXRlZDohMSxuZXh0OmYsdGhldGE6dShkKX0pfSsrY31yZXR1cm4gb31mdW5jdGlvbiBHRShuLGUsdCxvLGEscixpKXtsZXQgZj1bXSxkPXIsYz1sPT5tPT5tLnBvc2l0aW9uPT09bCx1PVtdO2Rve2xldCBsPXRbZF07Zi5wdXNoKGwpO2xldCBtPW8uZmluZEluZGV4KGMoZCkpLGg9b1ttXTtpZighZyhoKSl7KytkO2NvbnRpbnVlfWxldHt2aXNpdGVkOmIsdHlwZTpwLG5leHQ6eX09aDtpZihoLnZpc2l0ZWQ9ITAscD09PTApe2lmKHk9PT0wKXtsZXQgRT1vW20tKGk/MTotMSldO2lmKEU/LnBvc2l0aW9uPT09ZCsxKUUudmlzaXRlZD0hMDtlbHNleysrZDtjb250aW51ZX19aWYoIWImJmkmJnk+MHx8cj09PWQmJiFpJiZ5PDApeysrZDtjb250aW51ZX19aWYoIShpP3A+PTA6cDw9MCkpeysrZDtjb250aW51ZX1ifHx1LnB1c2goZCk7bGV0IF89bSsoaT8xOi0xKSx3PW9bX107aWYoIWcodykpeysrZDtjb250aW51ZX1kPXcucG9zaXRpb259d2hpbGUoZDx0Lmxlbmd0aCYmZD49MCYmZCE9PXImJmYubGVuZ3RoPHQubGVuZ3RoKTtuLnNwbGljZShlLGEsZik7Zm9yKGxldCBsIG9mIHUpZT1HRShuLGUrMSx0LG8sMCxsLCFpKTtyZXR1cm4gZX12YXIgQW4scGMsRWkseWgsQWgsbWssYmssX2gscGssZ2ssX2sseWssQWssRWsseGssT2ssU2ssQ2ssakUsTEUsTWssTmssaXQsSmY9WCgoKT0+e2hjKCk7S2EoKTt2dCgpO01lKCk7Z3QoKTtDdCgpO2ZlKCk7VmUoKTtIZigpO1h0KCk7WXQoKTtybigpO2ZyKCk7WnQoKTtiaSgpO2plKCk7SW4oKTtwaSgpO1RFKCk7V2EoKTt0bigpO1dvKCk7VUUoKTtiYygpO0FuPXt9O0FuLmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGg9ZnVuY3Rpb24obixlKXtsZXQgdD0wLG89W25dO2Zvcig7by5sZW5ndGg+MDspe2xldCBhPW8ucG9wKCk7aWYoIWcoYSkpY29udGludWU7dCs9MjtsZXQgcj1hLnBvc2l0aW9ucyxpPWEuaG9sZXM7aWYoZyhyKSYmci5sZW5ndGg+MCYmKHQrPXIubGVuZ3RoKmUucGFja2VkTGVuZ3RoKSxnKGkpKXtsZXQgZj1pLmxlbmd0aDtmb3IobGV0IGQ9MDtkPGY7KytkKW8ucHVzaChpW2RdKX19cmV0dXJuIHR9O0FuLnBhY2tQb2x5Z29uSGllcmFyY2h5PWZ1bmN0aW9uKG4sZSx0LG8pe2xldCBhPVtuXTtmb3IoO2EubGVuZ3RoPjA7KXtsZXQgcj1hLnBvcCgpO2lmKCFnKHIpKWNvbnRpbnVlO2xldCBpPXIucG9zaXRpb25zLGY9ci5ob2xlcztpZihlW3QrK109ZyhpKT9pLmxlbmd0aDowLGVbdCsrXT1nKGYpP2YubGVuZ3RoOjAsZyhpKSl7bGV0IGQ9aS5sZW5ndGg7Zm9yKGxldCBjPTA7YzxkOysrYyx0Kz1vLnBhY2tlZExlbmd0aClvLnBhY2soaVtjXSxlLHQpfWlmKGcoZikpe2xldCBkPWYubGVuZ3RoO2ZvcihsZXQgYz0wO2M8ZDsrK2MpYS5wdXNoKGZbY10pfX1yZXR1cm4gdH07QW4udW5wYWNrUG9seWdvbkhpZXJhcmNoeT1mdW5jdGlvbihuLGUsdCl7bGV0IG89bltlKytdLGE9bltlKytdLHI9bmV3IEFycmF5KG8pLGk9YT4wP25ldyBBcnJheShhKTp2b2lkIDA7Zm9yKGxldCBmPTA7ZjxvOysrZixlKz10LnBhY2tlZExlbmd0aClyW2ZdPXQudW5wYWNrKG4sZSk7Zm9yKGxldCBmPTA7ZjxhOysrZilpW2ZdPUFuLnVucGFja1BvbHlnb25IaWVyYXJjaHkobixlLHQpLGU9aVtmXS5zdGFydGluZ0luZGV4LGRlbGV0ZSBpW2ZdLnN0YXJ0aW5nSW5kZXg7cmV0dXJue3Bvc2l0aW9uczpyLGhvbGVzOmksc3RhcnRpbmdJbmRleDplfX07cGM9bmV3IFk7RWk9bmV3IHM7QW4uc3ViZGl2aWRlTGluZUNvdW50PWZ1bmN0aW9uKG4sZSx0KXtsZXQgYT1zLmRpc3RhbmNlKG4sZSkvdCxyPU1hdGgubWF4KDAsTWF0aC5jZWlsKGsubG9nMihhKSkpO3JldHVybiBNYXRoLnBvdygyLHIpfTt5aD1uZXcgYWUsQWg9bmV3IGFlLG1rPW5ldyBhZSxiaz1uZXcgcyxfaD1uZXcgWm87QW4uc3ViZGl2aWRlUmh1bWJMaW5lQ291bnQ9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLHloKSxyPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxBaCksZj1uZXcgWm8oYSxyLG4pLnN1cmZhY2VEaXN0YW5jZS9vLGQ9TWF0aC5tYXgoMCxNYXRoLmNlaWwoay5sb2cyKGYpKSk7cmV0dXJuIE1hdGgucG93KDIsZCl9O0FuLnN1YmRpdmlkZVRleGNvb3JkTGluZT1mdW5jdGlvbihuLGUsdCxvLGEscil7bGV0IGk9QW4uc3ViZGl2aWRlTGluZUNvdW50KHQsbyxhKSxmPVkuZGlzdGFuY2UobixlKSxkPWYvaSxjPXI7Yy5sZW5ndGg9aSoyO2xldCB1PTA7Zm9yKGxldCBsPTA7bDxpO2wrKyl7bGV0IG09ekUobixlLGwqZCxmKTtjW3UrK109bVswXSxjW3UrK109bVsxXX1yZXR1cm4gY307QW4uc3ViZGl2aWRlTGluZT1mdW5jdGlvbihuLGUsdCxvKXtsZXQgYT1Bbi5zdWJkaXZpZGVMaW5lQ291bnQobixlLHQpLHI9cy5kaXN0YW5jZShuLGUpLGk9ci9hO2cobyl8fChvPVtdKTtsZXQgZj1vO2YubGVuZ3RoPWEqMztsZXQgZD0wO2ZvcihsZXQgYz0wO2M8YTtjKyspe2xldCB1PWhrKG4sZSxjKmkscik7ZltkKytdPXVbMF0sZltkKytdPXVbMV0sZltkKytdPXVbMl19cmV0dXJuIGZ9O0FuLnN1YmRpdmlkZVRleGNvb3JkUmh1bWJMaW5lPWZ1bmN0aW9uKG4sZSx0LG8sYSxyLGkpe2xldCBmPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobyx5aCksZD10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGEsQWgpO19oLnNldEVuZFBvaW50cyhmLGQpO2xldCBjPV9oLnN1cmZhY2VEaXN0YW5jZS9yLHU9TWF0aC5tYXgoMCxNYXRoLmNlaWwoay5sb2cyKGMpKSksbD1NYXRoLnBvdygyLHUpLG09WS5kaXN0YW5jZShuLGUpLGg9bS9sLGI9aTtiLmxlbmd0aD1sKjI7bGV0IHA9MDtmb3IobGV0IHk9MDt5PGw7eSsrKXtsZXQgVD16RShuLGUseSpoLG0pO2JbcCsrXT1UWzBdLGJbcCsrXT1UWzFdfXJldHVybiBifTtBbi5zdWJkaXZpZGVSaHVtYkxpbmU9ZnVuY3Rpb24obixlLHQsbyxhKXtsZXQgcj1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUseWgpLGk9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0LEFoKSxmPW5ldyBabyhyLGksbik7aWYoZyhhKXx8KGE9W10pLGYuc3VyZmFjZURpc3RhbmNlPD1vKXJldHVybiBhLmxlbmd0aD0zLGFbMF09ZS54LGFbMV09ZS55LGFbMl09ZS56LGE7bGV0IGQ9Zi5zdXJmYWNlRGlzdGFuY2UvbyxjPU1hdGgubWF4KDAsTWF0aC5jZWlsKGsubG9nMihkKSkpLHU9TWF0aC5wb3coMixjKSxsPWYuc3VyZmFjZURpc3RhbmNlL3UsbT1hO20ubGVuZ3RoPXUqMztsZXQgaD0wO2ZvcihsZXQgYj0wO2I8dTtiKyspe2xldCBwPWYuaW50ZXJwb2xhdGVVc2luZ1N1cmZhY2VEaXN0YW5jZShiKmwsbWspLHk9bi5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihwLGJrKTttW2grK109eS54LG1baCsrXT15LnksbVtoKytdPXkuen1yZXR1cm4gbX07cGs9bmV3IHMsZ2s9bmV3IHMsX2s9bmV3IHMseWs9bmV3IHM7QW4uc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQ9ZnVuY3Rpb24obixlLHQsbyxhKXtvPW8/P0suZGVmYXVsdDtsZXQgcj1wayxpPWdrLGY9X2ssZD15aztpZihnKG4pJiZnKG4uYXR0cmlidXRlcykmJmcobi5hdHRyaWJ1dGVzLnBvc2l0aW9uKSl7bGV0IGM9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyx1PWMubGVuZ3RoLzI7Zm9yKGxldCBsPTA7bDx1O2wrPTMpcy5mcm9tQXJyYXkoYyxsLGYpLG8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGYsciksZD1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZixkKSxpPXMubXVsdGlwbHlCeVNjYWxhcihyLHQsaSksaT1zLmFkZChkLGksaSksY1tsK3VdPWkueCxjW2wrMSt1XT1pLnksY1tsKzIrdV09aS56LGEmJihkPXMuY2xvbmUoZixkKSksaT1zLm11bHRpcGx5QnlTY2FsYXIocixlLGkpLGk9cy5hZGQoZCxpLGkpLGNbbF09aS54LGNbbCsxXT1pLnksY1tsKzJdPWkuen1yZXR1cm4gbn07QW4ucG9seWdvbk91dGxpbmVzRnJvbUhpZXJhcmNoeT1mdW5jdGlvbihuLGUsdCl7bGV0IG89W10sYT1uZXcgZjA7YS5lbnF1ZXVlKG4pO2xldCByLGksZjtmb3IoO2EubGVuZ3RoIT09MDspe2xldCBkPWEuZGVxdWV1ZSgpLGM9ZC5wb3NpdGlvbnM7aWYoZSlmb3IoZj1jLmxlbmd0aCxyPTA7cjxmO3IrKyl0LnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoY1tyXSxjW3JdKTtpZihjPXhuKGMscy5lcXVhbHNFcHNpbG9uLCEwKSxjLmxlbmd0aDwzKWNvbnRpbnVlO2xldCB1PWQuaG9sZXM/ZC5ob2xlcy5sZW5ndGg6MDtmb3Iocj0wO3I8dTtyKyspe2xldCBsPWQuaG9sZXNbcl0sbT1sLnBvc2l0aW9ucztpZihlKWZvcihmPW0ubGVuZ3RoLGk9MDtpPGY7KytpKXQuc2NhbGVUb0dlb2RldGljU3VyZmFjZShtW2ldLG1baV0pO2lmKG09eG4obSxzLmVxdWFsc0Vwc2lsb24sITApLG0ubGVuZ3RoPDMpY29udGludWU7by5wdXNoKG0pO2xldCBoPTA7Zm9yKGcobC5ob2xlcykmJihoPWwuaG9sZXMubGVuZ3RoKSxpPTA7aTxoO2krKylhLmVucXVldWUobC5ob2xlc1tpXSl9by5wdXNoKGMpfXJldHVybiBvfTtBaz1uZXcgYWU7RWs9bmV3IGFlO0FuLnNwbGl0UG9seWdvbnNPbkVxdWF0b3I9ZnVuY3Rpb24obixlLHQsbyl7ZyhvKXx8KG89W10pLG8uc3BsaWNlKDAsMCwuLi5uKSxvLmxlbmd0aD1uLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTxvLmxlbmd0aDspe2xldCByPW9bYV0saT1yLnNsaWNlKCk7aWYoci5sZW5ndGg8Myl7b1thXT1pLCsrYTtjb250aW51ZX1sZXQgZj1SayhpLGUsdCk7aWYoaS5sZW5ndGg9PT1yLmxlbmd0aHx8Zi5sZW5ndGg8PTEpe29bYV09aSwrK2E7Y29udGludWV9Zi5zb3J0KChjLHUpPT5jLnRoZXRhLXUudGhldGEpO2xldCBkPWlbMF0uej49MDthPUdFKG8sYSxpLGYsMSwwLGQpfXJldHVybiBvfTtBbi5wb2x5Z29uc0Zyb21IaWVyYXJjaHk9ZnVuY3Rpb24obixlLHQsbyxhLHIpe2xldCBpPVtdLGY9W10sZD1uZXcgZjA7ZC5lbnF1ZXVlKG4pO2xldCBjPWcocik7Zm9yKDtkLmxlbmd0aCE9PTA7KXtsZXQgdT1kLmRlcXVldWUoKSxsPXUucG9zaXRpb25zLG09dS5ob2xlcyxoLGI7aWYobylmb3IoYj1sLmxlbmd0aCxoPTA7aDxiO2grKylhLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UobFtoXSxsW2hdKTtpZihlfHwobD14bihsLHMuZXF1YWxzRXBzaWxvbiwhMCkpLGwubGVuZ3RoPDMpY29udGludWU7bGV0IHA9dChsKTtpZighZyhwKSljb250aW51ZTtsZXQgeT1bXSxUPXd0LmNvbXB1dGVXaW5kaW5nT3JkZXIyRChwKTtpZihUPT09TW8uQ0xPQ0tXSVNFJiYocC5yZXZlcnNlKCksbD1sLnNsaWNlKCkucmV2ZXJzZSgpKSxjKXtjPSExO2xldCBTPVtsXTtpZihTPXIoUyxTKSxTLmxlbmd0aD4xKXtmb3IobGV0IEMgb2YgUylkLmVucXVldWUobmV3IHdFKEMsbSkpO2NvbnRpbnVlfX1sZXQgXz1sLnNsaWNlKCksdz1nKG0pP20ubGVuZ3RoOjAsRT1bXSxSO2ZvcihoPTA7aDx3O2grKyl7bGV0IFM9bVtoXSxDPVMucG9zaXRpb25zO2lmKG8pZm9yKGI9Qy5sZW5ndGgsUj0wO1I8YjsrK1IpYS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKENbUl0sQ1tSXSk7aWYoZXx8KEM9eG4oQyxzLmVxdWFsc0Vwc2lsb24sITApKSxDLmxlbmd0aDwzKWNvbnRpbnVlO2xldCBJPXQoQyk7aWYoIWcoSSkpY29udGludWU7VD13dC5jb21wdXRlV2luZGluZ09yZGVyMkQoSSksVD09PU1vLkNMT0NLV0lTRSYmKEkucmV2ZXJzZSgpLEM9Qy5zbGljZSgpLnJldmVyc2UoKSksRS5wdXNoKEMpLHkucHVzaChfLmxlbmd0aCksXz1fLmNvbmNhdChDKSxwPXAuY29uY2F0KEkpO2xldCBNPTA7Zm9yKGcoUy5ob2xlcykmJihNPVMuaG9sZXMubGVuZ3RoKSxSPTA7UjxNO1IrKylkLmVucXVldWUoUy5ob2xlc1tSXSl9aS5wdXNoKHtvdXRlclJpbmc6bCxob2xlczpFfSksZi5wdXNoKHtwb3NpdGlvbnM6Xyxwb3NpdGlvbnMyRDpwLGhvbGVzOnl9KX1yZXR1cm57aGllcmFyY2h5OmkscG9seWdvbnM6Zn19O3hrPW5ldyBZLE9rPW5ldyBzLFNrPW5ldyBZZSxDaz1uZXcgWjtBbi5jb21wdXRlQm91bmRpbmdSZWN0YW5nbGU9ZnVuY3Rpb24obixlLHQsbyxhKXtsZXQgcj1ZZS5mcm9tQXhpc0FuZ2xlKG4sbyxTayksaT1aLmZyb21RdWF0ZXJuaW9uKHIsQ2spLGY9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGQ9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHU9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGw9dC5sZW5ndGg7Zm9yKGxldCBtPTA7bTxsOysrbSl7bGV0IGg9cy5jbG9uZSh0W21dLE9rKTtaLm11bHRpcGx5QnlWZWN0b3IoaSxoLGgpO2xldCBiPWUoaCx4ayk7ZyhiKSYmKGY9TWF0aC5taW4oZixiLngpLGQ9TWF0aC5tYXgoZCxiLngpLGM9TWF0aC5taW4oYyxiLnkpLHU9TWF0aC5tYXgodSxiLnkpKX1yZXR1cm4gYS54PWYsYS55PWMsYS53aWR0aD1kLWYsYS5oZWlnaHQ9dS1jLGF9O0FuLmNyZWF0ZUdlb21ldHJ5RnJvbVBvc2l0aW9ucz1mdW5jdGlvbihuLGUsdCxvLGEscixpKXtsZXQgZj13dC50cmlhbmd1bGF0ZShlLnBvc2l0aW9uczJELGUuaG9sZXMpO2YubGVuZ3RoPDMmJihmPVswLDEsMl0pO2xldCBkPWUucG9zaXRpb25zLGM9Zyh0KSx1PWM/dC5wb3NpdGlvbnM6dm9pZCAwO2lmKGEpe2xldCBsPWQubGVuZ3RoLG09bmV3IEFycmF5KGwqMyksaD0wO2ZvcihsZXQgeT0wO3k8bDt5Kyspe2xldCBUPWRbeV07bVtoKytdPVQueCxtW2grK109VC55LG1baCsrXT1ULnp9bGV0IGI9e2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pfSxpbmRpY2VzOmYscHJpbWl0aXZlVHlwZTpGZS5UUklBTkdMRVN9O2MmJihiLmF0dHJpYnV0ZXMuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOlkucGFja0FycmF5KHUpfSkpO2xldCBwPW5ldyBQZShiKTtyZXR1cm4gci5ub3JtYWw/THQuY29tcHV0ZU5vcm1hbChwKTpwfWlmKGk9PT1idC5HRU9ERVNJQylyZXR1cm4gd3QuY29tcHV0ZVN1YmRpdmlzaW9uKG4sZCxmLHUsbyk7aWYoaT09PWJ0LlJIVU1CKXJldHVybiB3dC5jb21wdXRlUmh1bWJMaW5lU3ViZGl2aXNpb24obixkLGYsdSxvKX07akU9W10sTEU9W10sTWs9bmV3IHMsTms9bmV3IHM7QW4uY29tcHV0ZVdhbGxHZW9tZXRyeT1mdW5jdGlvbihuLGUsdCxvLGEscil7bGV0IGksZixkLGMsdSxsLG0saCxiLHA9bi5sZW5ndGgseT0wLFQ9MCxfPWcoZSksdz1fP2UucG9zaXRpb25zOnZvaWQgMDtpZihhKWZvcihmPXAqMyoyLGk9bmV3IEFycmF5KGYqMiksXyYmKGI9cCoyKjIsaD1uZXcgQXJyYXkoYioyKSksZD0wO2Q8cDtkKyspYz1uW2RdLHU9blsoZCsxKSVwXSxpW3ldPWlbeStmXT1jLngsKyt5LGlbeV09aVt5K2ZdPWMueSwrK3ksaVt5XT1pW3krZl09Yy56LCsreSxpW3ldPWlbeStmXT11LngsKyt5LGlbeV09aVt5K2ZdPXUueSwrK3ksaVt5XT1pW3krZl09dS56LCsreSxfJiYobD13W2RdLG09d1soZCsxKSVwXSxoW1RdPWhbVCtiXT1sLngsKytULGhbVF09aFtUK2JdPWwueSwrK1QsaFtUXT1oW1QrYl09bS54LCsrVCxoW1RdPWhbVCtiXT1tLnksKytUKTtlbHNle2xldCBJPWsuY2hvcmRMZW5ndGgobyx0Lm1heGltdW1SYWRpdXMpLE09MDtpZihyPT09YnQuR0VPREVTSUMpZm9yKGQ9MDtkPHA7ZCsrKU0rPUFuLnN1YmRpdmlkZUxpbmVDb3VudChuW2RdLG5bKGQrMSklcF0sSSk7ZWxzZSBpZihyPT09YnQuUkhVTUIpZm9yKGQ9MDtkPHA7ZCsrKU0rPUFuLnN1YmRpdmlkZVJodW1iTGluZUNvdW50KHQsbltkXSxuWyhkKzEpJXBdLEkpO2ZvcihmPShNK3ApKjMsaT1uZXcgQXJyYXkoZioyKSxfJiYoYj0oTStwKSoyLGg9bmV3IEFycmF5KGIqMikpLGQ9MDtkPHA7ZCsrKXtjPW5bZF0sdT1uWyhkKzEpJXBdO2xldCBQLEY7XyYmKGw9d1tkXSxtPXdbKGQrMSklcF0pLHI9PT1idC5HRU9ERVNJQz8oUD1Bbi5zdWJkaXZpZGVMaW5lKGMsdSxJLExFKSxfJiYoRj1Bbi5zdWJkaXZpZGVUZXhjb29yZExpbmUobCxtLGMsdSxJLGpFKSkpOnI9PT1idC5SSFVNQiYmKFA9QW4uc3ViZGl2aWRlUmh1bWJMaW5lKHQsYyx1LEksTEUpLF8mJihGPUFuLnN1YmRpdmlkZVRleGNvb3JkUmh1bWJMaW5lKGwsbSx0LGMsdSxJLGpFKSkpO2xldCBBPVAubGVuZ3RoO2ZvcihsZXQgeD0wO3g8QTsrK3gsKyt5KWlbeV09UFt4XSxpW3krZl09UFt4XTtpZihpW3ldPXUueCxpW3krZl09dS54LCsreSxpW3ldPXUueSxpW3krZl09dS55LCsreSxpW3ldPXUueixpW3krZl09dS56LCsreSxfKXtsZXQgeD1GLmxlbmd0aDtmb3IobGV0IE49MDtOPHg7KytOLCsrVCloW1RdPUZbTl0saFtUK2JdPUZbTl07aFtUXT1tLngsaFtUK2JdPW0ueCwrK1QsaFtUXT1tLnksaFtUK2JdPW0ueSwrK1R9fX1wPWkubGVuZ3RoO2xldCBFPUllLmNyZWF0ZVR5cGVkQXJyYXkocC8zLHAtbi5sZW5ndGgqNiksUj0wO2ZvcihwLz02LGQ9MDtkPHA7ZCsrKXtsZXQgST1kLE09SSsxLFA9SStwLEY9UCsxO2M9cy5mcm9tQXJyYXkoaSxJKjMsTWspLHU9cy5mcm9tQXJyYXkoaSxNKjMsTmspLCFzLmVxdWFsc0Vwc2lsb24oYyx1LGsuRVBTSUxPTjEwLGsuRVBTSUxPTjEwKSYmKEVbUisrXT1JLEVbUisrXT1QLEVbUisrXT1NLEVbUisrXT1NLEVbUisrXT1QLEVbUisrXT1GKX1sZXQgUz17YXR0cmlidXRlczpuZXcgUWUoe3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aX0pfSksaW5kaWNlczpFLHByaW1pdGl2ZVR5cGU6RmUuVFJJQU5HTEVTfTtyZXR1cm4gXyYmKFMuYXR0cmlidXRlcy5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6aH0pKSxuZXcgUGUoUyl9O2l0PUFufSk7ZnVuY3Rpb24gVmsobixlLHQsbyxhLHIsaSxmLGQpe2xldCBjPW4ucG9zaXRpb25zLHU9d3QudHJpYW5ndWxhdGUobi5wb3NpdGlvbnMyRCxuLmhvbGVzKTt1Lmxlbmd0aDwzJiYodT1bMCwxLDJdKTtsZXQgbD1JZS5jcmVhdGVUeXBlZEFycmF5KGMubGVuZ3RoLHUubGVuZ3RoKTtsLnNldCh1KTtsZXQgbT1MaztpZihvIT09MCl7bGV0IEY9WWUuZnJvbUF4aXNBbmdsZShpLG8sVkUpO2lmKG09Wi5mcm9tUXVhdGVybmlvbihGLG0pLGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpe0Y9WWUuZnJvbUF4aXNBbmdsZShpLC1vLFZFKTtsZXQgQT1aLmZyb21RdWF0ZXJuaW9uKEYsemspO2Y9cy5ub3JtYWxpemUoWi5tdWx0aXBseUJ5VmVjdG9yKEEsZixmKSxmKSxlLmJpdGFuZ2VudCYmKGQ9cy5ub3JtYWxpemUocy5jcm9zcyhpLGYsZCksZCkpfX1lbHNlIG09Wi5jbG9uZShaLklERU5USVRZLG0pO2xldCBoPXZrO2Uuc3QmJihoLng9dC54LGgueT10LnkpO2xldCBiPWMubGVuZ3RoLHA9YiozLHk9bmV3IEZsb2F0NjRBcnJheShwKSxUPWUubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkocCk6dm9pZCAwLF89ZS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkocCk6dm9pZCAwLHc9ZS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShwKTp2b2lkIDAsRT1lLnN0P25ldyBGbG9hdDMyQXJyYXkoYioyKTp2b2lkIDAsUj0wLFM9MCxDPTAsST0wLE09MDtmb3IobGV0IEY9MDtGPGI7RisrKXtsZXQgQT1jW0ZdO2lmKHlbUisrXT1BLngseVtSKytdPUEueSx5W1IrK109QS56LGUuc3QpaWYoZyhhKSYmYS5wb3NpdGlvbnMubGVuZ3RoPT09YilFW00rK109YS5wb3NpdGlvbnNbRl0ueCxFW00rK109YS5wb3NpdGlvbnNbRl0ueTtlbHNle2xldCB4PVoubXVsdGlwbHlCeVZlY3RvcihtLEEsSWspLE49cih4LGtrKTtZLnN1YnRyYWN0KE4saCxOKTtsZXQgdj1rLmNsYW1wKE4ueC90LndpZHRoLDAsMSksVT1rLmNsYW1wKE4ueS90LmhlaWdodCwwLDEpO0VbTSsrXT12LEVbTSsrXT1VfWUubm9ybWFsJiYoVFtTKytdPWkueCxUW1MrK109aS55LFRbUysrXT1pLnopLGUudGFuZ2VudCYmKF9bSSsrXT1mLngsX1tJKytdPWYueSxfW0krK109Zi56KSxlLmJpdGFuZ2VudCYmKHdbQysrXT1kLngsd1tDKytdPWQueSx3W0MrK109ZC56KX1sZXQgUD1uZXcgUWU7cmV0dXJuIGUucG9zaXRpb24mJihQLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6eX0pKSxlLm5vcm1hbCYmKFAubm9ybWFsPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSkpLGUudGFuZ2VudCYmKFAudGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6X30pKSxlLmJpdGFuZ2VudCYmKFAuYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp3fSkpLGUuc3QmJihQLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpFfSkpLG5ldyBQZSh7YXR0cmlidXRlczpQLGluZGljZXM6bCxwcmltaXRpdmVUeXBlOkZlLlRSSUFOR0xFU30pfWZ1bmN0aW9uIGdjKG4pe249bj8/T2UuRU1QVFlfT0JKRUNUO2xldCBlPW4ucG9seWdvbkhpZXJhcmNoeSx0PW4udGV4dHVyZUNvb3JkaW5hdGVzLG89bi52ZXJ0ZXhGb3JtYXQ/P2hlLkRFRkFVTFQ7dGhpcy5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKG8pLHRoaXMuX3BvbHlnb25IaWVyYXJjaHk9ZSx0aGlzLl9zdFJvdGF0aW9uPW4uc3RSb3RhdGlvbj8/MCx0aGlzLl9lbGxpcHNvaWQ9Sy5jbG9uZShuLmVsbGlwc29pZD8/Sy5kZWZhdWx0KSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3BsYW5hclBvbHlnb25HZW9tZXRyeSIsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVzPXQsdGhpcy5wYWNrZWRMZW5ndGg9aXQuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChlLHMpK2hlLnBhY2tlZExlbmd0aCtLLnBhY2tlZExlbmd0aCsoZyh0KT9pdC5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKHQsWSk6MSkrMn12YXIgSWssUGssa2ssdmssRmssRGssQmssWmYsVWssamssVkUsTGssemssR2ssSGssS2sscWssZDAsSEU9WCgoKT0+e0thKCk7R2YoKTtFdCgpO3Z0KCk7TWUoKTtDdCgpO24wKCk7c3QoKTtmZSgpO1ZlKCk7WHQoKTtZdCgpO3JuKCk7ZGMoKTtmcigpO1p0KCk7amUoKTtJbigpO0pmKCk7V2EoKTt0bigpO1dvKCk7Q28oKTtJaz1uZXcgcyxQaz1uZXcgcWEsa2s9bmV3IFksdms9bmV3IFksRms9bmV3IHMsRGs9bmV3IHMsQms9bmV3IHMsWmY9bmV3IHMsVWs9bmV3IHMsams9bmV3IHMsVkU9bmV3IFllLExrPW5ldyBaLHprPW5ldyBaLEdrPW5ldyBzO2djLmZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24obil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9e3BvbHlnb25IaWVyYXJjaHk6e3Bvc2l0aW9uczpuLnBvc2l0aW9uc30sdmVydGV4Rm9ybWF0Om4udmVydGV4Rm9ybWF0LHN0Um90YXRpb246bi5zdFJvdGF0aW9uLGVsbGlwc29pZDpuLmVsbGlwc29pZCx0ZXh0dXJlQ29vcmRpbmF0ZXM6bi50ZXh0dXJlQ29vcmRpbmF0ZXN9O3JldHVybiBuZXcgZ2MoZSl9O2djLnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0PXQ/PzAsdD1pdC5wYWNrUG9seWdvbkhpZXJhcmNoeShuLl9wb2x5Z29uSGllcmFyY2h5LGUsdCxzKSxLLnBhY2sobi5fZWxsaXBzb2lkLGUsdCksdCs9Sy5wYWNrZWRMZW5ndGgsaGUucGFjayhuLl92ZXJ0ZXhGb3JtYXQsZSx0KSx0Kz1oZS5wYWNrZWRMZW5ndGgsZVt0KytdPW4uX3N0Um90YXRpb24sZyhuLl90ZXh0dXJlQ29vcmRpbmF0ZXMpP3Q9aXQucGFja1BvbHlnb25IaWVyYXJjaHkobi5fdGV4dHVyZUNvb3JkaW5hdGVzLGUsdCxZKTplW3QrK109LTEsZVt0XT1uLnBhY2tlZExlbmd0aCxlfTtIaz1LLmNsb25lKEsuVU5JVF9TUEhFUkUpLEtrPW5ldyBoZSxxaz17cG9seWdvbkhpZXJhcmNoeTp7fX07Z2MudW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtlPWU/PzA7bGV0IG89aXQudW5wYWNrUG9seWdvbkhpZXJhcmNoeShuLGUscyk7ZT1vLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIG8uc3RhcnRpbmdJbmRleDtsZXQgYT1LLnVucGFjayhuLGUsSGspO2UrPUsucGFja2VkTGVuZ3RoO2xldCByPWhlLnVucGFjayhuLGUsS2spO2UrPWhlLnBhY2tlZExlbmd0aDtsZXQgaT1uW2UrK10sZj1uW2VdPT09LTE/dm9pZCAwOml0LnVucGFja1BvbHlnb25IaWVyYXJjaHkobixlLFkpO2coZik/KGU9Zi5zdGFydGluZ0luZGV4LGRlbGV0ZSBmLnN0YXJ0aW5nSW5kZXgpOmUrKztsZXQgZD1uW2VdO3JldHVybiBnKHQpfHwodD1uZXcgZ2MocWspKSx0Ll9wb2x5Z29uSGllcmFyY2h5PW8sdC5fZWxsaXBzb2lkPUsuY2xvbmUoYSx0Ll9lbGxpcHNvaWQpLHQuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShyLHQuX3ZlcnRleEZvcm1hdCksdC5fc3RSb3RhdGlvbj1pLHQuX3RleHR1cmVDb29yZGluYXRlcz1mLHQucGFja2VkTGVuZ3RoPWQsdH07Z2MuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7bGV0IGU9bi5fdmVydGV4Rm9ybWF0LHQ9bi5fcG9seWdvbkhpZXJhcmNoeSxvPW4uX3N0Um90YXRpb24sYT1uLl90ZXh0dXJlQ29vcmRpbmF0ZXMscj1nKGEpLGk9dC5wb3NpdGlvbnM7aWYoaT14bihpLHMuZXF1YWxzRXBzaWxvbiwhMCksaS5sZW5ndGg8MylyZXR1cm47bGV0IGY9RmssZD1EayxjPUJrLHU9VWssbD1qaztpZighZ3MuY29tcHV0ZVByb2plY3RUbzJEQXJndW1lbnRzKGksWmYsdSxsKSlyZXR1cm47aWYoZj1zLmNyb3NzKHUsbCxmKSxmPXMubm9ybWFsaXplKGYsZiksIXMuZXF1YWxzRXBzaWxvbihaZixzLlpFUk8say5FUFNJTE9ONikpe2xldCBNPW4uX2VsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoWmYsR2spO3MuZG90KGYsTSk8MCYmKGY9cy5uZWdhdGUoZixmKSx1PXMubmVnYXRlKHUsdSkpfWxldCBoPWdzLmNyZWF0ZVByb2plY3RQb2ludHNUbzJERnVuY3Rpb24oWmYsdSxsKSxiPWdzLmNyZWF0ZVByb2plY3RQb2ludFRvMkRGdW5jdGlvbihaZix1LGwpO2UudGFuZ2VudCYmKGQ9cy5jbG9uZSh1LGQpKSxlLmJpdGFuZ2VudCYmKGM9cy5jbG9uZShsLGMpKTtsZXQgcD1pdC5wb2x5Z29uc0Zyb21IaWVyYXJjaHkodCxyLGgsITEpLHk9cC5oaWVyYXJjaHksVD1wLnBvbHlnb25zLF89ZnVuY3Rpb24oTSl7cmV0dXJuIE19LHc9cj9pdC5wb2x5Z29uc0Zyb21IaWVyYXJjaHkoYSwhMCxfLCExKS5wb2x5Z29uczp2b2lkIDA7aWYoeS5sZW5ndGg9PT0wKXJldHVybjtpPXlbMF0ub3V0ZXJSaW5nO2xldCBFPXBlLmZyb21Qb2ludHMoaSksUj1pdC5jb21wdXRlQm91bmRpbmdSZWN0YW5nbGUoZixiLGksbyxQayksUz1bXTtmb3IobGV0IE09MDtNPFQubGVuZ3RoO00rKyl7bGV0IFA9bmV3IGxvKHtnZW9tZXRyeTpWayhUW01dLGUsUixvLHI/d1tNXTp2b2lkIDAsYixmLGQsYyl9KTtTLnB1c2goUCl9bGV0IEM9THQuY29tYmluZUluc3RhbmNlcyhTKVswXTtDLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPW5ldyBGbG9hdDY0QXJyYXkoQy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyksQy5pbmRpY2VzPUllLmNyZWF0ZVR5cGVkQXJyYXkoQy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxDLmluZGljZXMpO2xldCBJPUMuYXR0cmlidXRlcztyZXR1cm4gZS5wb3NpdGlvbnx8ZGVsZXRlIEkucG9zaXRpb24sbmV3IFBlKHthdHRyaWJ1dGVzOkksaW5kaWNlczpDLmluZGljZXMscHJpbWl0aXZlVHlwZTpDLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6RX0pfTtkMD1nY30pO3ZhciB1MD17fTskZSh1MCx7ZGVmYXVsdDooKT0+WGt9KTtmdW5jdGlvbiBXayhuLGUpe3JldHVybiBnKGUpJiYobj1kMC51bnBhY2sobixlKSksZDAuY3JlYXRlR2VvbWV0cnkobil9dmFyIFhrLGwwPVgoKCk9PntIRSgpO2ZlKCk7WGs9V2t9KTtmdW5jdGlvbiBZayhuKXtsZXQgZT1uLmxlbmd0aCx0PW5ldyBGbG9hdDY0QXJyYXkoZSozKSxvPUllLmNyZWF0ZVR5cGVkQXJyYXkoZSxlKjIpLGE9MCxyPTA7Zm9yKGxldCBmPTA7ZjxlO2YrKyl7bGV0IGQ9bltmXTt0W2ErK109ZC54LHRbYSsrXT1kLnksdFthKytdPWQueixvW3IrK109ZixvW3IrK109KGYrMSklZX1sZXQgaT1uZXcgUWUoe3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6dH0pfSk7cmV0dXJuIG5ldyBQZSh7YXR0cmlidXRlczppLGluZGljZXM6byxwcmltaXRpdmVUeXBlOkZlLkxJTkVTfSl9ZnVuY3Rpb24gX2Mobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5wb2x5Z29uSGllcmFyY2h5O3RoaXMuX3BvbHlnb25IaWVyYXJjaHk9ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3BsYW5hclBvbHlnb25PdXRsaW5lR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPWl0LmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgoZSxzKSsxfXZhciBKayxoMCxLRT1YKCgpPT57S2EoKTtFdCgpO01lKCk7Q3QoKTtuMCgpO3N0KCk7ZmUoKTtYdCgpO1l0KCk7cm4oKTtkYygpO2ZyKCk7WnQoKTtKZigpO3RuKCk7X2MuZnJvbVBvc2l0aW9ucz1mdW5jdGlvbihuKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXQgZT17cG9seWdvbkhpZXJhcmNoeTp7cG9zaXRpb25zOm4ucG9zaXRpb25zfX07cmV0dXJuIG5ldyBfYyhlKX07X2MucGFjaz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIHQ9dD8/MCx0PWl0LnBhY2tQb2x5Z29uSGllcmFyY2h5KG4uX3BvbHlnb25IaWVyYXJjaHksZSx0LHMpLGVbdF09bi5wYWNrZWRMZW5ndGgsZX07Sms9e3BvbHlnb25IaWVyYXJjaHk6e319O19jLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvPWl0LnVucGFja1BvbHlnb25IaWVyYXJjaHkobixlLHMpO2U9by5zdGFydGluZ0luZGV4LGRlbGV0ZSBvLnN0YXJ0aW5nSW5kZXg7bGV0IGE9bltlXTtyZXR1cm4gZyh0KXx8KHQ9bmV3IF9jKEprKSksdC5fcG9seWdvbkhpZXJhcmNoeT1vLHQucGFja2VkTGVuZ3RoPWEsdH07X2MuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7bGV0IGU9bi5fcG9seWdvbkhpZXJhcmNoeSx0PWUucG9zaXRpb25zO2lmKHQ9eG4odCxzLmVxdWFsc0Vwc2lsb24sITApLHQubGVuZ3RoPDN8fCFncy52YWxpZE91dGxpbmUodCkpcmV0dXJuO2xldCBhPWl0LnBvbHlnb25PdXRsaW5lc0Zyb21IaWVyYXJjaHkoZSwhMSk7aWYoYS5sZW5ndGg9PT0wKXJldHVybjtsZXQgcj1bXTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7bGV0IGM9bmV3IGxvKHtnZW9tZXRyeTpZayhhW2RdKX0pO3IucHVzaChjKX1sZXQgaT1MdC5jb21iaW5lSW5zdGFuY2VzKHIpWzBdLGY9cGUuZnJvbVBvaW50cyhlLnBvc2l0aW9ucyk7cmV0dXJuIG5ldyBQZSh7YXR0cmlidXRlczppLmF0dHJpYnV0ZXMsaW5kaWNlczppLmluZGljZXMscHJpbWl0aXZlVHlwZTppLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6Zn0pfTtoMD1fY30pO3ZhciBtMD17fTskZShtMCx7ZGVmYXVsdDooKT0+UWt9KTtmdW5jdGlvbiBaayhuLGUpe3JldHVybiBnKGUpJiYobj1oMC51bnBhY2sobixlKSksbi5fZWxsaXBzb2lkPUsuY2xvbmUobi5fZWxsaXBzb2lkKSxoMC5jcmVhdGVHZW9tZXRyeShuKX12YXIgUWssYjA9WCgoKT0+e0tFKCk7ZmUoKTtWZSgpO1FrPVprfSk7dmFyIHFFLHNuLHljPVgoKCk9PntxRT17Uk9VTkRFRDowLE1JVEVSRUQ6MSxCRVZFTEVEOjJ9O09iamVjdC5mcmVlemUocUUpO3NuPXFFfSk7ZnVuY3Rpb24gJGsobil7bGV0IGU9bi5fdVNxdWFyZWQsdD1uLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyxvPW4uX2VsbGlwc29pZC5taW5pbXVtUmFkaXVzLGE9KHQtbykvdCxyPU1hdGguY29zKG4uX3N0YXJ0SGVhZGluZyksaT1NYXRoLnNpbihuLl9zdGFydEhlYWRpbmcpLGY9KDEtYSkqTWF0aC50YW4obi5fc3RhcnQubGF0aXR1ZGUpLGQ9MS9NYXRoLnNxcnQoMStmKmYpLGM9ZCpmLHU9TWF0aC5hdGFuMihmLHIpLGw9ZCppLG09bCpsLGg9MS1tLGI9TWF0aC5zcXJ0KGgpLHA9ZS80LHk9cCpwLFQ9eSpwLF89eSp5LHc9MStwLTMqeS80KzUqVC80LTE3NSpfLzY0LEU9MS1wKzE1KnkvOC0zNSpULzgsUj0xLTMqcCszNSp5LzQsUz0xLTUqcCxDPXcqdS1FKk1hdGguc2luKDIqdSkqcC8yLVIqTWF0aC5zaW4oNCp1KSp5LzE2LVMqTWF0aC5zaW4oNip1KSpULzQ4LU1hdGguc2luKDgqdSkqNSpfLzUxMixJPW4uX2NvbnN0YW50cztJLmE9dCxJLmI9byxJLmY9YSxJLmNvc2luZUhlYWRpbmc9cixJLnNpbmVIZWFkaW5nPWksSS50YW5VPWYsSS5jb3NpbmVVPWQsSS5zaW5lVT1jLEkuc2lnbWE9dSxJLnNpbmVBbHBoYT1sLEkuc2luZVNxdWFyZWRBbHBoYT1tLEkuY29zaW5lU3F1YXJlZEFscGhhPWgsSS5jb3NpbmVBbHBoYT1iLEkudTJPdmVyND1wLEkudTRPdmVyMTY9eSxJLnU2T3ZlcjY0PVQsSS51OE92ZXIyNTY9XyxJLmEwPXcsSS5hMT1FLEkuYTI9UixJLmEzPVMsSS5kaXN0YW5jZVJhdGlvPUN9ZnVuY3Rpb24gZXYobixlKXtyZXR1cm4gbiplKig0K24qKDQtMyplKSkvMTZ9ZnVuY3Rpb24gV0UobixlLHQsbyxhLHIsaSl7bGV0IGY9ZXYobix0KTtyZXR1cm4oMS1mKSpuKmUqKG8rZiphKihpK2YqciooMippKmktMSkpKX1mdW5jdGlvbiB0dihuLGUsdCxvLGEscixpKXtsZXQgZj0oZS10KS9lLGQ9ci1vLGM9TWF0aC5hdGFuKCgxLWYpKk1hdGgudGFuKGEpKSx1PU1hdGguYXRhbigoMS1mKSpNYXRoLnRhbihpKSksbD1NYXRoLmNvcyhjKSxtPU1hdGguc2luKGMpLGg9TWF0aC5jb3ModSksYj1NYXRoLnNpbih1KSxwPWwqaCx5PWwqYixUPW0qYixfPW0qaCx3PWQsRSxSLFMsQyxJLE0sUCxGO2Rve1I9TWF0aC5jb3ModyksUz1NYXRoLnNpbih3KTtsZXQgVj15LV8qUjtNPU1hdGguc3FydChoKmgqUypTK1YqViksST1UK3AqUixDPU1hdGguYXRhbjIoTSxJKTtsZXQgTztNPT09MD8oTz0wLFA9MSk6KE89cCpTL00sUD0xLU8qTyksRT13LEY9SS0yKlQvUCxpc0Zpbml0ZShGKXx8KEY9MCksdz1kK1dFKGYsTyxQLEMsTSxJLEYpfXdoaWxlKE1hdGguYWJzKHctRSk+ay5FUFNJTE9OMTIpO2xldCBBPVAqKGUqZS10KnQpLyh0KnQpLHg9MStBKig0MDk2K0EqKEEqKDMyMC0xNzUqQSktNzY4KSkvMTYzODQsTj1BKigyNTYrQSooQSooNzQtNDcqQSktMTI4KSkvMTAyNCx2PUYqRixVPU4qTSooRitOKihJKigyKnYtMSktTipGKig0Kk0qTS0zKSooNCp2LTMpLzYpLzQpLEw9dCp4KihDLVUpLEQ9TWF0aC5hdGFuMihoKlMseS1fKlIpLEc9TWF0aC5hdGFuMihsKlMseSpSLV8pO24uX2Rpc3RhbmNlPUwsbi5fc3RhcnRIZWFkaW5nPUQsbi5fZW5kSGVhZGluZz1HLG4uX3VTcXVhcmVkPUF9ZnVuY3Rpb24gWEUobixlLHQsbyl7bGV0IGE9cy5ub3JtYWxpemUoby5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihlLHAwKSxudikscj1zLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHQscDApLHAwKTt0dihuLG8ubWF4aW11bVJhZGl1cyxvLm1pbmltdW1SYWRpdXMsZS5sb25naXR1ZGUsZS5sYXRpdHVkZSx0LmxvbmdpdHVkZSx0LmxhdGl0dWRlKSxuLl9zdGFydD1hZS5jbG9uZShlLG4uX3N0YXJ0KSxuLl9lbmQ9YWUuY2xvbmUodCxuLl9lbmQpLG4uX3N0YXJ0LmhlaWdodD0wLG4uX2VuZC5oZWlnaHQ9MCwkayhuKX1mdW5jdGlvbiBRZihuLGUsdCl7bGV0IG89dD8/Sy5kZWZhdWx0O3RoaXMuX2VsbGlwc29pZD1vLHRoaXMuX3N0YXJ0PW5ldyBhZSx0aGlzLl9lbmQ9bmV3IGFlLHRoaXMuX2NvbnN0YW50cz17fSx0aGlzLl9zdGFydEhlYWRpbmc9dm9pZCAwLHRoaXMuX2VuZEhlYWRpbmc9dm9pZCAwLHRoaXMuX2Rpc3RhbmNlPXZvaWQgMCx0aGlzLl91U3F1YXJlZD12b2lkIDAsZyhuKSYmZyhlKSYmWEUodGhpcyxuLGUsbyl9dmFyIG52LHAwLHdoLGcwPVgoKCk9PntNZSgpO2d0KCk7ZmUoKTtWZSgpO2plKCk7bnY9bmV3IHMscDA9bmV3IHM7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUWYucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxzdXJmYWNlRGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXN0YW5jZX19LHN0YXJ0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9fSxlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmR9fSxzdGFydEhlYWRpbmc6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydEhlYWRpbmd9fSxlbmRIZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5kSGVhZGluZ319fSk7UWYucHJvdG90eXBlLnNldEVuZFBvaW50cz1mdW5jdGlvbihuLGUpe1hFKHRoaXMsbixlLHRoaXMuX2VsbGlwc29pZCl9O1FmLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb249ZnVuY3Rpb24obixlKXtyZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKHRoaXMuX2Rpc3RhbmNlKm4sZSl9O1FmLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9dGhpcy5fY29uc3RhbnRzLG89dC5kaXN0YW5jZVJhdGlvK24vdC5iLGE9TWF0aC5jb3MoMipvKSxyPU1hdGguY29zKDQqbyksaT1NYXRoLmNvcyg2Km8pLGY9TWF0aC5zaW4oMipvKSxkPU1hdGguc2luKDQqbyksYz1NYXRoLnNpbig2Km8pLHU9TWF0aC5zaW4oOCpvKSxsPW8qbyxtPW8qbCxoPXQudThPdmVyMjU2LGI9dC51Mk92ZXI0LHA9dC51Nk92ZXI2NCx5PXQudTRPdmVyMTYsVD0yKm0qaCphLzMrbyooMS1iKzcqeS80LTE1KnAvNCs1NzkqaC82NC0oeS0xNSpwLzQrMTg3KmgvMTYpKmEtKDUqcC80LTExNSpoLzE2KSpyLTI5KmgqaS8xNikrKGIvMi15KzcxKnAvMzItODUqaC8xNikqZisoNSp5LzE2LTUqcC80KzM4MypoLzk2KSpkLWwqKChwLTExKmgvMikqZis1KmgqZC8yKSsoMjkqcC85Ni0yOSpoLzE2KSpjKzUzOSpoKnUvMTUzNixfPU1hdGguYXNpbihNYXRoLnNpbihUKSp0LmNvc2luZUFscGhhKSx3PU1hdGguYXRhbih0LmEvdC5iKk1hdGgudGFuKF8pKTtUPVQtdC5zaWdtYTtsZXQgRT1NYXRoLmNvcygyKnQuc2lnbWErVCksUj1NYXRoLnNpbihUKSxTPU1hdGguY29zKFQpLEM9dC5jb3NpbmVVKlMsST10LnNpbmVVKlIsUD1NYXRoLmF0YW4yKFIqdC5zaW5lSGVhZGluZyxDLUkqdC5jb3NpbmVIZWFkaW5nKS1XRSh0LmYsdC5zaW5lQWxwaGEsdC5jb3NpbmVTcXVhcmVkQWxwaGEsVCxSLFMsRSk7cmV0dXJuIGcoZSk/KGUubG9uZ2l0dWRlPXRoaXMuX3N0YXJ0LmxvbmdpdHVkZStQLGUubGF0aXR1ZGU9dyxlLmhlaWdodD0wLGUpOm5ldyBhZSh0aGlzLl9zdGFydC5sb25naXR1ZGUrUCx3LDApfTt3aD1RZn0pO2Z1bmN0aW9uIFFFKG4sZSx0KXtsZXQgbz15MDtvLmxlbmd0aD1uO2xldCBhO2lmKGU9PT10KXtmb3IoYT0wO2E8bjthKyspb1thXT1lO3JldHVybiBvfWxldCBpPSh0LWUpL247Zm9yKGE9MDthPG47YSsrKXtsZXQgZj1lK2EqaTtvW2FdPWZ9cmV0dXJuIG99ZnVuY3Rpb24gdXYobixlLHQsbyxhLHIsaSxmKXtsZXQgZD1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UobixBMCksYz1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZSxkdiksdT1qby5udW1iZXJPZlBvaW50cyhuLGUsdCksbD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGQsRWgpLG09by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhjLFRoKSxoPVFFKHUsYSxyKTtfMC5zZXRFbmRQb2ludHMobCxtKTtsZXQgYj1fMC5zdXJmYWNlRGlzdGFuY2UvdSxwPWY7bC5oZWlnaHQ9YTtsZXQgeT1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGwsUmkpO3MucGFjayh5LGkscCkscCs9Mztmb3IobGV0IFQ9MTtUPHU7VCsrKXtsZXQgXz1fMC5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKFQqYixUaCk7Xy5oZWlnaHQ9aFtUXSx5PW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oXyxSaSkscy5wYWNrKHksaSxwKSxwKz0zfXJldHVybiBwfWZ1bmN0aW9uIGx2KG4sZSx0LG8sYSxyLGksZil7bGV0IGQ9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhuLEVoKSxjPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSxUaCksdT1qby5udW1iZXJPZlBvaW50c1JodW1iTGluZShkLGMsdCk7ZC5oZWlnaHQ9MCxjLmhlaWdodD0wO2xldCBsPVFFKHUsYSxyKTskZi5lbGxpcHNvaWQuZXF1YWxzKG8pfHwoJGY9bmV3IFpvKHZvaWQgMCx2b2lkIDAsbykpLCRmLnNldEVuZFBvaW50cyhkLGMpO2xldCBtPSRmLnN1cmZhY2VEaXN0YW5jZS91LGg9ZjtkLmhlaWdodD1hO2xldCBiPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZCxSaSk7cy5wYWNrKGIsaSxoKSxoKz0zO2ZvcihsZXQgcD0xO3A8dTtwKyspe2xldCB5PSRmLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UocCptLFRoKTt5LmhlaWdodD1sW3BdLGI9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih5LFJpKSxzLnBhY2soYixpLGgpLGgrPTN9cmV0dXJuIGh9dmFyIGpvLG92LGF2LHJ2LFlFLGl2LEpFLGN2LHN2LGZ2LHkwLEVoLFRoLFJpLEEwLGR2LF8wLCRmLFpFLGh2LGJuLHdzPVgoKCk9PntNZSgpO2d0KCk7ZmUoKTtWZSgpO2cwKCk7SGYoKTtiaSgpO2plKCk7dW4oKTtwaSgpO2pvPXt9O2pvLm51bWJlck9mUG9pbnRzPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1zLmRpc3RhbmNlKG4sZSk7cmV0dXJuIE1hdGguY2VpbChvL3QpfTtqby5udW1iZXJPZlBvaW50c1JodW1iTGluZT1mdW5jdGlvbihuLGUsdCl7bGV0IG89TWF0aC5wb3cobi5sb25naXR1ZGUtZS5sb25naXR1ZGUsMikrTWF0aC5wb3cobi5sYXRpdHVkZS1lLmxhdGl0dWRlLDIpO3JldHVybiBNYXRoLm1heCgxLE1hdGguY2VpbChNYXRoLnNxcnQoby8odCp0KSkpKX07b3Y9bmV3IGFlO2pvLmV4dHJhY3RIZWlnaHRzPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9bi5sZW5ndGgsbz1uZXcgQXJyYXkodCk7Zm9yKGxldCBhPTA7YTx0O2ErKyl7bGV0IHI9blthXTtvW2FdPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocixvdikuaGVpZ2h0fXJldHVybiBvfTthdj1uZXcgUSxydj1uZXcgcyxZRT1uZXcgcyxpdj1uZXcgbm4ocy5VTklUX1gsMCksSkU9bmV3IHMsY3Y9bmV3IG5uKHMuVU5JVF9YLDApLHN2PW5ldyBzLGZ2PW5ldyBzLHkwPVtdO0VoPW5ldyBhZSxUaD1uZXcgYWUsUmk9bmV3IHMsQTA9bmV3IHMsZHY9bmV3IHMsXzA9bmV3IHdoLCRmPW5ldyBabztqby53cmFwTG9uZ2l0dWRlPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9W10sbz1bXTtpZihnKG4pJiZuLmxlbmd0aD4wKXtlPWU/P1EuSURFTlRJVFk7bGV0IGE9US5pbnZlcnNlVHJhbnNmb3JtYXRpb24oZSxhdikscj1RLm11bHRpcGx5QnlQb2ludChhLHMuWkVSTyxydiksaT1zLm5vcm1hbGl6ZShRLm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKGEscy5VTklUX1ksWUUpLFlFKSxmPW5uLmZyb21Qb2ludE5vcm1hbChyLGksaXYpLGQ9cy5ub3JtYWxpemUoUS5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihhLHMuVU5JVF9YLEpFKSxKRSksYz1ubi5mcm9tUG9pbnROb3JtYWwocixkLGN2KSx1PTE7dC5wdXNoKHMuY2xvbmUoblswXSkpO2xldCBsPXRbMF0sbT1uLmxlbmd0aDtmb3IobGV0IGg9MTtoPG07KytoKXtsZXQgYj1uW2hdO2lmKG5uLmdldFBvaW50RGlzdGFuY2UoYyxsKTwwfHxubi5nZXRQb2ludERpc3RhbmNlKGMsYik8MCl7bGV0IHA9UW4ubGluZVNlZ21lbnRQbGFuZShsLGIsZixzdik7aWYoZyhwKSl7bGV0IHk9cy5tdWx0aXBseUJ5U2NhbGFyKGksNWUtOSxmdik7bm4uZ2V0UG9pbnREaXN0YW5jZShmLGwpPDAmJnMubmVnYXRlKHkseSksdC5wdXNoKHMuYWRkKHAseSxuZXcgcykpLG8ucHVzaCh1KzEpLHMubmVnYXRlKHkseSksdC5wdXNoKHMuYWRkKHAseSxuZXcgcykpLHU9MX19dC5wdXNoKHMuY2xvbmUobltoXSkpLHUrKyxsPWJ9by5wdXNoKHUpfXJldHVybntwb3NpdGlvbnM6dCxsZW5ndGhzOm99fTtqby5nZW5lcmF0ZUFyYz1mdW5jdGlvbihuKXtnKG4pfHwobj17fSk7bGV0IGU9bi5wb3NpdGlvbnMsdD1lLmxlbmd0aCxvPW4uZWxsaXBzb2lkPz9LLmRlZmF1bHQsYT1uLmhlaWdodD8/MCxyPUFycmF5LmlzQXJyYXkoYSk7aWYodDwxKXJldHVybltdO2lmKHQ9PT0xKXtsZXQgcD1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZVswXSxBMCk7aWYoYT1yP2FbMF06YSxhIT09MCl7bGV0IHk9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocCxSaSk7cy5tdWx0aXBseUJ5U2NhbGFyKHksYSx5KSxzLmFkZChwLHkscCl9cmV0dXJuW3AueCxwLnkscC56XX1sZXQgaT1uLm1pbkRpc3RhbmNlO2lmKCFnKGkpKXtsZXQgcD1uLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRTtpPWsuY2hvcmRMZW5ndGgocCxvLm1heGltdW1SYWRpdXMpfWxldCBmPTAsZDtmb3IoZD0wO2Q8dC0xO2QrKylmKz1qby5udW1iZXJPZlBvaW50cyhlW2RdLGVbZCsxXSxpKTtsZXQgYz0oZisxKSozLHU9bmV3IEFycmF5KGMpLGw9MDtmb3IoZD0wO2Q8dC0xO2QrKyl7bGV0IHA9ZVtkXSx5PWVbZCsxXSxUPXI/YVtkXTphLF89cj9hW2QrMV06YTtsPXV2KHAseSxpLG8sVCxfLHUsbCl9eTAubGVuZ3RoPTA7bGV0IG09ZVt0LTFdLGg9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhtLEVoKTtoLmhlaWdodD1yP2FbdC0xXTphO2xldCBiPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oaCxSaSk7cmV0dXJuIHMucGFjayhiLHUsYy0zKSx1fTtaRT1uZXcgYWUsaHY9bmV3IGFlO2pvLmdlbmVyYXRlUmh1bWJBcmM9ZnVuY3Rpb24obil7ZyhuKXx8KG49e30pO2xldCBlPW4ucG9zaXRpb25zLHQ9ZS5sZW5ndGgsbz1uLmVsbGlwc29pZD8/Sy5kZWZhdWx0LGE9bi5oZWlnaHQ/PzAscj1BcnJheS5pc0FycmF5KGEpO2lmKHQ8MSlyZXR1cm5bXTtpZih0PT09MSl7bGV0IFQ9by5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGVbMF0sQTApO2lmKGE9cj9hWzBdOmEsYSE9PTApe2xldCBfPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKFQsUmkpO3MubXVsdGlwbHlCeVNjYWxhcihfLGEsXykscy5hZGQoVCxfLFQpfXJldHVybltULngsVC55LFQuel19bGV0IGk9bi5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsZj0wLGQsYz1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGVbMF0sWkUpLHU7Zm9yKGQ9MDtkPHQtMTtkKyspdT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGVbZCsxXSxodiksZis9am8ubnVtYmVyT2ZQb2ludHNSaHVtYkxpbmUoYyx1LGkpLGM9YWUuY2xvbmUodSxaRSk7bGV0IGw9KGYrMSkqMyxtPW5ldyBBcnJheShsKSxoPTA7Zm9yKGQ9MDtkPHQtMTtkKyspe2xldCBUPWVbZF0sXz1lW2QrMV0sdz1yP2FbZF06YSxFPXI/YVtkKzFdOmE7aD1sdihULF8saSxvLHcsRSxtLGgpfXkwLmxlbmd0aD0wO2xldCBiPWVbdC0xXSxwPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoYixFaCk7cC5oZWlnaHQ9cj9hW3QtMV06YTtsZXQgeT1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHAsUmkpO3JldHVybiBzLnBhY2soeSxtLGwtMyksbX07am8uZ2VuZXJhdGVDYXJ0ZXNpYW5BcmM9ZnVuY3Rpb24obil7bGV0IGU9am8uZ2VuZXJhdGVBcmMobiksdD1lLmxlbmd0aC8zLG89bmV3IEFycmF5KHQpO2ZvcihsZXQgYT0wO2E8dDthKyspb1thXT1zLnVucGFjayhlLGEqMyk7cmV0dXJuIG99O2pvLmdlbmVyYXRlQ2FydGVzaWFuUmh1bWJBcmM9ZnVuY3Rpb24obil7bGV0IGU9am8uZ2VuZXJhdGVSaHVtYkFyYyhuKSx0PWUubGVuZ3RoLzMsbz1uZXcgQXJyYXkodCk7Zm9yKGxldCBhPTA7YTx0O2ErKylvW2FdPXMudW5wYWNrKGUsYSozKTtyZXR1cm4gb307Ym49am99KTtmdW5jdGlvbiBlZChuLGUpe2coJEVbbl0pfHwoJEVbbl09ITAsY29uc29sZS53YXJuKGU/P24pKX12YXIgJEUsUmgsdzA9WCgoKT0+e2ZlKCk7JEU9e307ZWQuZ2VvbWV0cnlPdXRsaW5lcz0iRW50aXR5IGdlb21ldHJ5IG91dGxpbmVzIGFyZSB1bnN1cHBvcnRlZCBvbiB0ZXJyYWluLiBPdXRsaW5lcyB3aWxsIGJlIGRpc2FibGVkLiBUbyBlbmFibGUgb3V0bGluZXMsIGRpc2FibGUgZ2VvbWV0cnkgdGVycmFpbiBjbGFtcGluZyBieSBleHBsaWNpdGx5IHNldHRpbmcgaGVpZ2h0IHRvIDAuIjtlZC5nZW9tZXRyeVpJbmRleD0iRW50aXR5IGdlb21ldHJ5IHdpdGggekluZGV4IGFyZSB1bnN1cHBvcnRlZCB3aGVuIGhlaWdodCBvciBleHRydWRlZEhlaWdodCBhcmUgZGVmaW5lZC4gIHpJbmRleCB3aWxsIGJlIGlnbm9yZWQiO2VkLmdlb21ldHJ5SGVpZ2h0UmVmZXJlbmNlPSJFbnRpdHkgY29ycmlkb3IsIGVsbGlwc2UsIHBvbHlnb24gb3IgcmVjdGFuZ2xlIHdpdGggaGVpZ2h0UmVmZXJlbmNlIG11c3QgYWxzbyBoYXZlIGEgZGVmaW5lZCBoZWlnaHQuICBoZWlnaHRSZWZlcmVuY2Ugd2lsbCBiZSBpZ25vcmVkIjtlZC5nZW9tZXRyeUV4dHJ1ZGVkSGVpZ2h0UmVmZXJlbmNlPSJFbnRpdHkgY29ycmlkb3IsIGVsbGlwc2UsIHBvbHlnb24gb3IgcmVjdGFuZ2xlIHdpdGggZXh0cnVkZWRIZWlnaHRSZWZlcmVuY2UgbXVzdCBhbHNvIGhhdmUgYSBkZWZpbmVkIGV4dHJ1ZGVkSGVpZ2h0LiAgZXh0cnVkZWRIZWlnaHRSZWZlcmVuY2Ugd2lsbCBiZSBpZ25vcmVkIjtSaD1lZH0pO2Z1bmN0aW9uIEV2KG4sZSl7bGV0IHQ9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl7bGV0IGE9bltvXTtUMD1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGEsVDApLHRbb109VDAuaGVpZ2h0LG5bb109ZS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGEsYSl9cmV0dXJuIHR9ZnVuY3Rpb24gRTAobixlLHQsbyl7bGV0IGE9blswXSxyPW5bMV0saT1zLmFuZ2xlQmV0d2VlbihhLHIpLGY9TWF0aC5jZWlsKGkvbyksZD1uZXcgQXJyYXkoZiksYztpZihlPT09dCl7Zm9yKGM9MDtjPGY7YysrKWRbY109ZTtyZXR1cm4gZC5wdXNoKHQpLGR9bGV0IGw9KHQtZSkvZjtmb3IoYz0xO2M8ZjtjKyspe2xldCBtPWUrYypsO2RbY109bX1yZXR1cm4gZFswXT1lLGQucHVzaCh0KSxkfWZ1bmN0aW9uIFJ2KG4sZSx0LG8pe2xldCBhPW5ldyBBbyh0LG8pLHI9YS5wcm9qZWN0UG9pbnRPbnRvUGxhbmUocy5hZGQodCxuLE9oKSxPaCksaT1hLnByb2plY3RQb2ludE9udG9QbGFuZShzLmFkZCh0LGUsU2gpLFNoKSxmPVkuYW5nbGVCZXR3ZWVuKHIsaSk7cmV0dXJuIGkueCpyLnktaS55KnIueD49MD8tZjpmfWZ1bmN0aW9uIEhyKG4sZSx0LG8sYSxyLGksZil7bGV0IGQ9Q3YsYz1NdjtBYz1vby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShuLGEsQWMpLGQ9US5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihBYyx4dixkKSxkPXMubm9ybWFsaXplKGQsZCk7bGV0IHU9UnYoZCxlLG4sYSk7UjA9Wi5mcm9tUm90YXRpb25aKHUsUjApLGU4Lno9cixBYz1RLm11bHRpcGx5VHJhbnNmb3JtYXRpb24oQWMsUS5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihSMCxlOCxPdiksQWMpO2xldCBsPVN2O2xbMF09aTtmb3IobGV0IG09MDttPGY7bSsrKWZvcihsZXQgaD0wO2g8dC5sZW5ndGg7aCs9MyljPXMuZnJvbUFycmF5KHQsaCxjKSxjPVoubXVsdGlwbHlCeVZlY3RvcihsLGMsYyksYz1RLm11bHRpcGx5QnlQb2ludChBYyxjLGMpLG8ucHVzaChjLngsYy55LGMueik7cmV0dXJuIG99ZnVuY3Rpb24geDAobixlLHQsbyxhLHIsaSl7Zm9yKGxldCBmPTA7ZjxuLmxlbmd0aDtmKz0zKXtsZXQgZD1zLmZyb21BcnJheShuLGYsTnYpO289SHIoZCxlLHQsbyxhLHJbZi8zXSxpLDEpfXJldHVybiBvfWZ1bmN0aW9uIEl2KG4sZSl7bGV0IHQ9bi5sZW5ndGgsbz1uZXcgQXJyYXkodCo2KSxhPTAscj1lLngrZS53aWR0aC8yLGk9ZS55K2UuaGVpZ2h0LzIsZj1uWzBdO29bYSsrXT1mLngtcixvW2ErK109MCxvW2ErK109Zi55LWk7Zm9yKGxldCBkPTE7ZDx0O2QrKyl7Zj1uW2RdO2xldCBjPWYueC1yLHU9Zi55LWk7b1thKytdPWMsb1thKytdPTAsb1thKytdPXUsb1thKytdPWMsb1thKytdPTAsb1thKytdPXV9cmV0dXJuIGY9blswXSxvW2ErK109Zi54LXIsb1thKytdPTAsb1thXT1mLnktaSxvfWZ1bmN0aW9uIHQ4KG4sZSl7bGV0IHQ9bi5sZW5ndGgsbz1uZXcgQXJyYXkodCozKSxhPTAscj1lLngrZS53aWR0aC8yLGk9ZS55K2UuaGVpZ2h0LzI7Zm9yKGxldCBmPTA7Zjx0O2YrKylvW2ErK109bltmXS54LXIsb1thKytdPTAsb1thKytdPW5bZl0ueS1pO3JldHVybiBvfWZ1bmN0aW9uIHI4KG4sZSx0LG8sYSxyLGksZixkLGMpe2xldCB1PXMuYW5nbGVCZXR3ZWVuKHMuc3VidHJhY3QoZSxuLFRzKSxzLnN1YnRyYWN0KHQsbix4aCkpLGw9bz09PXNuLkJFVkVMRUQ/MDpNYXRoLmNlaWwodS9rLnRvUmFkaWFucyg1KSksbTthP209Wi5mcm9tUXVhdGVybmlvbihZZS5mcm9tQXhpc0FuZ2xlKHMubmVnYXRlKG4sVHMpLHUvKGwrMSksbjgpLGE4KTptPVouZnJvbVF1YXRlcm5pb24oWWUuZnJvbUF4aXNBbmdsZShuLHUvKGwrMSksbjgpLGE4KTtsZXQgaCxiO2lmKGU9cy5jbG9uZShlLG84KSxsPjApe2xldCBwPWM/MjoxO2ZvcihsZXQgeT0wO3k8bDt5KyspZT1aLm11bHRpcGx5QnlWZWN0b3IobSxlLGUpLGg9cy5zdWJ0cmFjdChlLG4sVHMpLGg9cy5ub3JtYWxpemUoaCxoKSxhfHwoaD1zLm5lZ2F0ZShoLGgpKSxiPXIuc2NhbGVUb0dlb2RldGljU3VyZmFjZShlLHhoKSxpPUhyKGIsaCxmLGkscixkLDEscCl9ZWxzZSBoPXMuc3VidHJhY3QoZSxuLFRzKSxoPXMubm9ybWFsaXplKGgsaCksYXx8KGg9cy5uZWdhdGUoaCxoKSksYj1yLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZSx4aCksaT1IcihiLGgsZixpLHIsZCwxLDEpLHQ9cy5jbG9uZSh0LG84KSxoPXMuc3VidHJhY3QodCxuLFRzKSxoPXMubm9ybWFsaXplKGgsaCksYXx8KGg9cy5uZWdhdGUoaCxoKSksYj1yLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodCx4aCksaT1IcihiLGgsZixpLHIsZCwxLDEpO3JldHVybiBpfXZhciBtbyxtdixidixwdixndixfdix5dixBdix3dixUdixUcyx4aCx0ZCxUMCxPaCxTaCx4dixBYyxPdixSMCxTdixDdixNdixlOCxOdixuOCxvOCxhOCxQdixrdix4aSxDaD1YKCgpPT57dnQoKTtNZSgpO2JhKCk7Z3QoKTt5YygpO3BzKCk7amUoKTtJbigpO3VuKCk7d3MoKTtXbygpO3JyKCk7dzAoKTttbz1bbmV3IHMsbmV3IHNdLG12PW5ldyBzLGJ2PW5ldyBzLHB2PW5ldyBzLGd2PW5ldyBzLF92PW5ldyBzLHl2PW5ldyBzLEF2PW5ldyBzLHd2PW5ldyBzLFR2PW5ldyBzLFRzPW5ldyBzLHhoPW5ldyBzLHRkPXt9LFQwPW5ldyBhZTtPaD1uZXcgcyxTaD1uZXcgczt4dj1uZXcgcygtMSwwLDApLEFjPW5ldyBRLE92PW5ldyBRLFIwPW5ldyBaLFN2PVouSURFTlRJVFkuY2xvbmUoKSxDdj1uZXcgcyxNdj1uZXcgcnQsZTg9bmV3IHM7TnY9bmV3IHM7bjg9bmV3IFllLG84PW5ldyBzLGE4PW5ldyBaO3RkLnJlbW92ZUR1cGxpY2F0ZXNGcm9tU2hhcGU9ZnVuY3Rpb24obil7bGV0IGU9bi5sZW5ndGgsdD1bXTtmb3IobGV0IG89ZS0xLGE9MDthPGU7bz1hKyspe2xldCByPW5bb10saT1uW2FdO1kuZXF1YWxzKHIsaSl8fHQucHVzaChpKX1yZXR1cm4gdH07dGQuYW5nbGVJc0dyZWF0ZXJUaGFuUGk9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9bmV3IEFvKHQsbykscj1hLnByb2plY3RQb2ludE9udG9QbGFuZShzLmFkZCh0LG4sT2gpLE9oKSxpPWEucHJvamVjdFBvaW50T250b1BsYW5lKHMuYWRkKHQsZSxTaCksU2gpO3JldHVybiBpLngqci55LWkueSpyLng+PTB9O1B2PW5ldyBzLGt2PW5ldyBzO3RkLmNvbXB1dGVQb3NpdGlvbnM9ZnVuY3Rpb24obixlLHQsbyxhKXtsZXQgcj1vLl9lbGxpcHNvaWQsaT1FdihuLHIpLGY9by5fZ3JhbnVsYXJpdHksZD1vLl9jb3JuZXJUeXBlLGM9YT9JdihlLHQpOnQ4KGUsdCksdT1hP3Q4KGUsdCk6dm9pZCAwLGw9dC5oZWlnaHQvMixtPXQud2lkdGgvMixoPW4ubGVuZ3RoLGI9W10scD1hP1tdOnZvaWQgMCx5PW12LFQ9YnYsXz1wdix3PWd2LEU9X3YsUj15dixTPUF2LEM9d3YsST1UdixNPW5bMF0sUD1uWzFdO3c9ci5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoTSx3KSx5PXMuc3VidHJhY3QoUCxNLHkpLHk9cy5ub3JtYWxpemUoeSx5KSxDPXMuY3Jvc3Modyx5LEMpLEM9cy5ub3JtYWxpemUoQyxDKTtsZXQgRj1pWzBdLEE9aVsxXTthJiYocD1IcihNLEMsdSxwLHIsRitsLDEsMSkpLEk9cy5jbG9uZShNLEkpLE09UCxUPXMubmVnYXRlKHksVCk7bGV0IHgsTjtmb3IobGV0IEw9MTtMPGgtMTtMKyspe2xldCBEPWE/MjoxO2lmKFA9bltMKzFdLE0uZXF1YWxzKFApKXtSaCgiUG9zaXRpb25zIGFyZSB0b28gY2xvc2UgYW5kIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgd2l0aCByb3VuZGluZyBlcnJvci4iKTtjb250aW51ZX15PXMuc3VidHJhY3QoUCxNLHkpLHk9cy5ub3JtYWxpemUoeSx5KSx3PXIuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKE0sdyk7bGV0IEc9cy5tdWx0aXBseUJ5U2NhbGFyKHcscy5kb3QoeSx3KSxQdik7cy5zdWJ0cmFjdCh5LEcsRykscy5ub3JtYWxpemUoRyxHKTtsZXQgVj1zLm11bHRpcGx5QnlTY2FsYXIodyxzLmRvdChULHcpLGt2KTtpZihzLnN1YnRyYWN0KFQsVixWKSxzLm5vcm1hbGl6ZShWLFYpLCFrLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMocy5kb3QoRyxWKSksMSxrLkVQU0lMT043KSl7Xz1zLmFkZCh5LFQsXyksXz1zLm5vcm1hbGl6ZShfLF8pLF89cy5jcm9zcyhfLHcsXyksXz1zLmNyb3NzKHcsXyxfKSxfPXMubm9ybWFsaXplKF8sXyk7bGV0IEo9MS9NYXRoLm1heCguMjUscy5tYWduaXR1ZGUocy5jcm9zcyhfLFQsVHMpKSkscmU9dGQuYW5nbGVJc0dyZWF0ZXJUaGFuUGkoeSxULE0scik7cmU/KEU9cy5hZGQoTSxzLm11bHRpcGx5QnlTY2FsYXIoXyxKKm0sXyksRSksUj1zLmFkZChFLHMubXVsdGlwbHlCeVNjYWxhcihDLG0sUiksUiksbW9bMF09cy5jbG9uZShJLG1vWzBdKSxtb1sxXT1zLmNsb25lKFIsbW9bMV0pLHg9RTAobW8sRitsLEErbCxmKSxOPWJuLmdlbmVyYXRlQXJjKHtwb3NpdGlvbnM6bW8sZ3JhbnVsYXJpdHk6ZixlbGxpcHNvaWQ6cn0pLGI9eDAoTixDLGMsYixyLHgsMSksQz1zLmNyb3NzKHcseSxDKSxDPXMubm9ybWFsaXplKEMsQyksUz1zLmFkZChFLHMubXVsdGlwbHlCeVNjYWxhcihDLG0sUyksUyksZD09PXNuLlJPVU5ERUR8fGQ9PT1zbi5CRVZFTEVEP3I4KEUsUixTLGQscmUscixiLGMsQStsLGEpOihfPXMubmVnYXRlKF8sXyksYj1IcihNLF8sYyxiLHIsQStsLEosRCkpLEk9cy5jbG9uZShTLEkpKTooRT1zLmFkZChNLHMubXVsdGlwbHlCeVNjYWxhcihfLEoqbSxfKSxFKSxSPXMuYWRkKEUscy5tdWx0aXBseUJ5U2NhbGFyKEMsLW0sUiksUiksbW9bMF09cy5jbG9uZShJLG1vWzBdKSxtb1sxXT1zLmNsb25lKFIsbW9bMV0pLHg9RTAobW8sRitsLEErbCxmKSxOPWJuLmdlbmVyYXRlQXJjKHtwb3NpdGlvbnM6bW8sZ3JhbnVsYXJpdHk6ZixlbGxpcHNvaWQ6cn0pLGI9eDAoTixDLGMsYixyLHgsMSksQz1zLmNyb3NzKHcseSxDKSxDPXMubm9ybWFsaXplKEMsQyksUz1zLmFkZChFLHMubXVsdGlwbHlCeVNjYWxhcihDLC1tLFMpLFMpLGQ9PT1zbi5ST1VOREVEfHxkPT09c24uQkVWRUxFRD9yOChFLFIsUyxkLHJlLHIsYixjLEErbCxhKTpiPUhyKE0sXyxjLGIscixBK2wsSixEKSxJPXMuY2xvbmUoUyxJKSksVD1zLm5lZ2F0ZSh5LFQpfWVsc2UgYj1IcihJLEMsYyxiLHIsRitsLDEsMSksST1NO0Y9QSxBPWlbTCsxXSxNPVB9bW9bMF09cy5jbG9uZShJLG1vWzBdKSxtb1sxXT1zLmNsb25lKE0sbW9bMV0pLHg9RTAobW8sRitsLEErbCxmKSxOPWJuLmdlbmVyYXRlQXJjKHtwb3NpdGlvbnM6bW8sZ3JhbnVsYXJpdHk6ZixlbGxpcHNvaWQ6cn0pLGI9eDAoTixDLGMsYixyLHgsMSksYSYmKHA9SHIoTSxDLHUscCxyLEErbCwxLDEpKSxoPWIubGVuZ3RoO2xldCB2PWE/aCtwLmxlbmd0aDpoLFU9bmV3IEZsb2F0NjRBcnJheSh2KTtyZXR1cm4gVS5zZXQoYiksYSYmVS5zZXQocCxoKSxVfTt4aT10ZH0pO2Z1bmN0aW9uIE1oKG4sZSx0LG8sYSl7bGV0IHI9cy5hbmdsZUJldHdlZW4ocy5zdWJ0cmFjdChlLG4sRXMpLHMuc3VidHJhY3QodCxuLGQ4KSksaT1vPT09c24uQkVWRUxFRD8xOk1hdGguY2VpbChyL2sudG9SYWRpYW5zKDUpKSsxLGY9aSozLGQ9bmV3IEFycmF5KGYpO2RbZi0zXT10LngsZFtmLTJdPXQueSxkW2YtMV09dC56O2xldCBjO2E/Yz1aLmZyb21RdWF0ZXJuaW9uKFllLmZyb21BeGlzQW5nbGUocy5uZWdhdGUobixFcyksci9pLGM4KSxzOCk6Yz1aLmZyb21RdWF0ZXJuaW9uKFllLmZyb21BeGlzQW5nbGUobixyL2ksYzgpLHM4KTtsZXQgdT0wO2U9cy5jbG9uZShlLEVzKTtmb3IobGV0IGw9MDtsPGk7bCsrKWU9Wi5tdWx0aXBseUJ5VmVjdG9yKGMsZSxlKSxkW3UrK109ZS54LGRbdSsrXT1lLnksZFt1KytdPWUuejtyZXR1cm4gZH1mdW5jdGlvbiBHdihuKXtsZXQgZT11OCx0PWw4LG89aDgsYT1uWzFdO3Q9cy5mcm9tQXJyYXkoblsxXSxhLmxlbmd0aC0zLHQpLG89cy5mcm9tQXJyYXkoblswXSwwLG8pLGU9cy5taWRwb2ludCh0LG8sZSk7bGV0IHI9TWgoZSx0LG8sc24uUk9VTkRFRCwhMSksaT1uLmxlbmd0aC0xLGY9bltpLTFdO2E9bltpXSx0PXMuZnJvbUFycmF5KGYsZi5sZW5ndGgtMyx0KSxvPXMuZnJvbUFycmF5KGEsMCxvKSxlPXMubWlkcG9pbnQodCxvLGUpO2xldCBkPU1oKGUsdCxvLHNuLlJPVU5ERUQsITEpO3JldHVybltyLGRdfWZ1bmN0aW9uIGY4KG4sZSx0LG8pe2xldCBhPUVzO3JldHVybiBvP2E9cy5hZGQobixlLGEpOihlPXMubmVnYXRlKGUsZSksYT1zLmFkZChuLGUsYSkpLFthLngsYS55LGEueix0LngsdC55LHQuel19ZnVuY3Rpb24gTzAobixlLHQsbyl7bGV0IGE9bmV3IEFycmF5KG4ubGVuZ3RoKSxyPW5ldyBBcnJheShuLmxlbmd0aCksaT1zLm11bHRpcGx5QnlTY2FsYXIoZSx0LEVzKSxmPXMubmVnYXRlKGksZDgpLGQ9MCxjPW4ubGVuZ3RoLTE7Zm9yKGxldCB1PTA7dTxuLmxlbmd0aDt1Kz0zKXtsZXQgbD1zLmZyb21BcnJheShuLHUsdnYpLG09cy5hZGQobCxmLGk4KTthW2QrK109bS54LGFbZCsrXT1tLnksYVtkKytdPW0uejtsZXQgaD1zLmFkZChsLGksaTgpO3JbYy0tXT1oLnoscltjLS1dPWgueSxyW2MtLV09aC54fXJldHVybiBvLnB1c2goYSxyKSxvfXZhciBTMCxFcyxkOCx2dixpOCxMbyx1OCxsOCxoOCxGdixEdixCdixVdixqdixMdix6dixjOCxzOCxWdixIdixLdCxDMD1YKCgpPT57TWUoKTt5YygpO2ZlKCk7amUoKTtJbigpO3dzKCk7Q2goKTtXbygpO1MwPXt9LEVzPW5ldyBzLGQ4PW5ldyBzLHZ2PW5ldyBzLGk4PW5ldyBzLExvPVtuZXcgcyxuZXcgc10sdTg9bmV3IHMsbDg9bmV3IHMsaDg9bmV3IHMsRnY9bmV3IHMsRHY9bmV3IHMsQnY9bmV3IHMsVXY9bmV3IHMsanY9bmV3IHMsTHY9bmV3IHMsenY9bmV3IHMsYzg9bmV3IFllLHM4PW5ldyBaO1MwLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLGUsdCxvKXtsZXQgYT1lLngscj1lLnksaT1lLno7Zyh0KSYmKG5bdF09YSxuW3QrMV09cixuW3QrMl09aSksZyhvKSYmKG5bb109aSxuW28tMV09cixuW28tMl09YSl9O1Z2PW5ldyBzLEh2PW5ldyBzO1MwLmNvbXB1dGVQb3NpdGlvbnM9ZnVuY3Rpb24obil7bGV0IGU9bi5ncmFudWxhcml0eSx0PW4ucG9zaXRpb25zLG89bi5lbGxpcHNvaWQsYT1uLndpZHRoLzIscj1uLmNvcm5lclR5cGUsaT1uLnNhdmVBdHRyaWJ1dGVzLGY9dTgsZD1sOCxjPWg4LHU9RnYsbD1EdixtPUJ2LGg9VXYsYj1qdixwPUx2LHk9enYsVD1bXSxfPWk/W106dm9pZCAwLHc9aT9bXTp2b2lkIDAsRT10WzBdLFI9dFsxXTtkPXMubm9ybWFsaXplKHMuc3VidHJhY3QoUixFLGQpLGQpLGY9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoRSxmKSx1PXMubm9ybWFsaXplKHMuY3Jvc3MoZixkLHUpLHUpLGkmJihfLnB1c2godS54LHUueSx1LnopLHcucHVzaChmLngsZi55LGYueikpLGg9cy5jbG9uZShFLGgpLEU9UixjPXMubmVnYXRlKGQsYyk7bGV0IFMsQz1bXSxJLE09dC5sZW5ndGg7Zm9yKEk9MTtJPE0tMTtJKyspe2Y9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoRSxmKSxSPXRbSSsxXSxkPXMubm9ybWFsaXplKHMuc3VidHJhY3QoUixFLGQpLGQpO2xldCBGPXMubXVsdGlwbHlCeVNjYWxhcihmLHMuZG90KGQsZiksVnYpO3Muc3VidHJhY3QoZCxGLEYpLHMubm9ybWFsaXplKEYsRik7bGV0IEE9cy5tdWx0aXBseUJ5U2NhbGFyKGYscy5kb3QoYyxmKSxIdik7aWYocy5zdWJ0cmFjdChjLEEsQSkscy5ub3JtYWxpemUoQSxBKSwhay5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKHMuZG90KEYsQSkpLDEsay5FUFNJTE9ONykpe2w9cy5ub3JtYWxpemUocy5hZGQoZCxjLGwpLGwpLGw9cy5jcm9zcyhsLGYsbCksbD1zLmNyb3NzKGYsbCxsKSxsPXMubm9ybWFsaXplKGwsbCk7bGV0IE49YS9NYXRoLm1heCguMjUscy5tYWduaXR1ZGUocy5jcm9zcyhsLGMsRXMpKSksdj14aS5hbmdsZUlzR3JlYXRlclRoYW5QaShkLGMsRSxvKTtsPXMubXVsdGlwbHlCeVNjYWxhcihsLE4sbCksdj8oYj1zLmFkZChFLGwsYikseT1zLmFkZChiLHMubXVsdGlwbHlCeVNjYWxhcih1LGEseSkseSkscD1zLmFkZChiLHMubXVsdGlwbHlCeVNjYWxhcih1LGEqMixwKSxwKSxMb1swXT1zLmNsb25lKGgsTG9bMF0pLExvWzFdPXMuY2xvbmUoeSxMb1sxXSksUz1ibi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOkxvLGdyYW51bGFyaXR5OmUsZWxsaXBzb2lkOm99KSxUPU8wKFMsdSxhLFQpLGkmJihfLnB1c2godS54LHUueSx1LnopLHcucHVzaChmLngsZi55LGYueikpLG09cy5jbG9uZShwLG0pLHU9cy5ub3JtYWxpemUocy5jcm9zcyhmLGQsdSksdSkscD1zLmFkZChiLHMubXVsdGlwbHlCeVNjYWxhcih1LGEqMixwKSxwKSxoPXMuYWRkKGIscy5tdWx0aXBseUJ5U2NhbGFyKHUsYSxoKSxoKSxyPT09c24uUk9VTkRFRHx8cj09PXNuLkJFVkVMRUQ/Qy5wdXNoKHtsZWZ0UG9zaXRpb25zOk1oKGIsbSxwLHIsdil9KTpDLnB1c2goe2xlZnRQb3NpdGlvbnM6ZjgoRSxzLm5lZ2F0ZShsLGwpLHAsdil9KSk6KHA9cy5hZGQoRSxsLHApLHk9cy5hZGQocCxzLm5lZ2F0ZShzLm11bHRpcGx5QnlTY2FsYXIodSxhLHkpLHkpLHkpLGI9cy5hZGQocCxzLm5lZ2F0ZShzLm11bHRpcGx5QnlTY2FsYXIodSxhKjIsYiksYiksYiksTG9bMF09cy5jbG9uZShoLExvWzBdKSxMb1sxXT1zLmNsb25lKHksTG9bMV0pLFM9Ym4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpMbyxncmFudWxhcml0eTplLGVsbGlwc29pZDpvfSksVD1PMChTLHUsYSxUKSxpJiYoXy5wdXNoKHUueCx1LnksdS56KSx3LnB1c2goZi54LGYueSxmLnopKSxtPXMuY2xvbmUoYixtKSx1PXMubm9ybWFsaXplKHMuY3Jvc3MoZixkLHUpLHUpLGI9cy5hZGQocCxzLm5lZ2F0ZShzLm11bHRpcGx5QnlTY2FsYXIodSxhKjIsYiksYiksYiksaD1zLmFkZChwLHMubmVnYXRlKHMubXVsdGlwbHlCeVNjYWxhcih1LGEsaCksaCksaCkscj09PXNuLlJPVU5ERUR8fHI9PT1zbi5CRVZFTEVEP0MucHVzaCh7cmlnaHRQb3NpdGlvbnM6TWgocCxtLGIscix2KX0pOkMucHVzaCh7cmlnaHRQb3NpdGlvbnM6ZjgoRSxsLGIsdil9KSksYz1zLm5lZ2F0ZShkLGMpfUU9Un1mPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEUsZiksTG9bMF09cy5jbG9uZShoLExvWzBdKSxMb1sxXT1zLmNsb25lKEUsTG9bMV0pLFM9Ym4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpMbyxncmFudWxhcml0eTplLGVsbGlwc29pZDpvfSksVD1PMChTLHUsYSxUKSxpJiYoXy5wdXNoKHUueCx1LnksdS56KSx3LnB1c2goZi54LGYueSxmLnopKTtsZXQgUDtyZXR1cm4gcj09PXNuLlJPVU5ERUQmJihQPUd2KFQpKSx7cG9zaXRpb25zOlQsY29ybmVyczpDLGxlZnRzOl8sbm9ybWFsczp3LGVuZFBvc2l0aW9uczpQfX07S3Q9UzB9KTtmdW5jdGlvbiB5OChuLGUpe2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW5bdF09ZS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKG5bdF0sblt0XSk7cmV0dXJuIG59ZnVuY3Rpb24gWGEobixlLHQsbyxhLHIpe2xldCBpPW4ubm9ybWFscyxmPW4udGFuZ2VudHMsZD1uLmJpdGFuZ2VudHMsYz1zLm5vcm1hbGl6ZShzLmNyb3NzKHQsZSxPaSksT2kpO3Iubm9ybWFsJiZLdC5hZGRBdHRyaWJ1dGUoaSxlLG8sYSksci50YW5nZW50JiZLdC5hZGRBdHRyaWJ1dGUoZixjLG8sYSksci5iaXRhbmdlbnQmJkt0LmFkZEF0dHJpYnV0ZShkLHQsbyxhKX1mdW5jdGlvbiBBOChuLGUsdCl7bGV0IG89bi5wb3NpdGlvbnMsYT1uLmNvcm5lcnMscj1uLmVuZFBvc2l0aW9ucyxpPW4ubGVmdHMsZj1uLm5vcm1hbHMsZD1uZXcgUWUsYz0wLHU9MCxsLG09MCxoO2ZvcihsPTA7bDxvLmxlbmd0aDtsKz0yKWg9b1tsXS5sZW5ndGgtMyxjKz1oLG0rPWgqMix1Kz1vW2wrMV0ubGVuZ3RoLTM7Zm9yKGMrPTMsdSs9MyxsPTA7bDxhLmxlbmd0aDtsKyspe2xldCBvZT1hW2xdLmxlZnRQb3NpdGlvbnM7ZyhvZSk/KGg9b2UubGVuZ3RoLGMrPWgsbSs9aCk6KGg9YVtsXS5yaWdodFBvc2l0aW9ucy5sZW5ndGgsdSs9aCxtKz1oKX1sZXQgYj1nKHIpLHA7YiYmKHA9clswXS5sZW5ndGgtMyxjKz1wLHUrPXAscC89MyxtKz1wKjYpO2xldCB5PWMrdSxUPW5ldyBGbG9hdDY0QXJyYXkoeSksXz1lLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KHkpOnZvaWQgMCx3PWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHkpOnZvaWQgMCxFPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoeSk6dm9pZCAwLFI9e25vcm1hbHM6Xyx0YW5nZW50czp3LGJpdGFuZ2VudHM6RX0sUz0wLEM9eS0xLEksTSxQLEYsQT1wOCx4PWc4LE4sdixVPXAvMixMPUllLmNyZWF0ZVR5cGVkQXJyYXkoeS8zLG0pLEQ9MDtpZihiKXt2PU5oLE49SWg7bGV0IG9lPXJbMF07Zm9yKEE9cy5mcm9tQXJyYXkoZiwwLEEpLHg9cy5mcm9tQXJyYXkoaSwwLHgpLGw9MDtsPFU7bCsrKXY9cy5mcm9tQXJyYXkob2UsKFUtMS1sKSozLHYpLE49cy5mcm9tQXJyYXkob2UsKFUrbCkqMyxOKSxLdC5hZGRBdHRyaWJ1dGUoVCxOLFMpLEt0LmFkZEF0dHJpYnV0ZShULHYsdm9pZCAwLEMpLFhhKFIsQSx4LFMsQyxlKSxNPVMvMyxGPU0rMSxJPShDLTIpLzMsUD1JLTEsTFtEKytdPUksTFtEKytdPU0sTFtEKytdPVAsTFtEKytdPVAsTFtEKytdPU0sTFtEKytdPUYsUys9MyxDLT0zfWxldCBHPTAsVj0wLE89b1tHKytdLEo9b1tHKytdO1Quc2V0KE8sUyksVC5zZXQoSixDLUoubGVuZ3RoKzEpLHg9cy5mcm9tQXJyYXkoaSxWLHgpO2xldCByZSxzZTtmb3IoaD1KLmxlbmd0aC0zLGw9MDtsPGg7bCs9MylyZT10Lmdlb2RldGljU3VyZmFjZU5vcm1hbChzLmZyb21BcnJheShPLGwsT2kpLE9pKSxzZT10Lmdlb2RldGljU3VyZmFjZU5vcm1hbChzLmZyb21BcnJheShKLGgtbCxScyksUnMpLEE9cy5ub3JtYWxpemUocy5hZGQocmUsc2UsQSksQSksWGEoUixBLHgsUyxDLGUpLE09Uy8zLEY9TSsxLEk9KEMtMikvMyxQPUktMSxMW0QrK109SSxMW0QrK109TSxMW0QrK109UCxMW0QrK109UCxMW0QrK109TSxMW0QrK109RixTKz0zLEMtPTM7Zm9yKHJlPXQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHMuZnJvbUFycmF5KE8saCxPaSksT2kpLHNlPXQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHMuZnJvbUFycmF5KEosaCxScyksUnMpLEE9cy5ub3JtYWxpemUocy5hZGQocmUsc2UsQSksQSksVis9MyxsPTA7bDxhLmxlbmd0aDtsKyspe2xldCBvZSxjZT1hW2xdLG1lPWNlLmxlZnRQb3NpdGlvbnMsZGU9Y2UucmlnaHRQb3NpdGlvbnMseWUsbGUsZWU9XzgsRWU9TmgsQ2U9SWg7aWYoQT1zLmZyb21BcnJheShmLFYsQSksZyhtZSkpe2ZvcihYYShSLEEseCx2b2lkIDAsQyxlKSxDLT0zLHllPUYsbGU9UCxvZT0wO29lPG1lLmxlbmd0aC8zO29lKyspZWU9cy5mcm9tQXJyYXkobWUsb2UqMyxlZSksTFtEKytdPXllLExbRCsrXT1sZS1vZS0xLExbRCsrXT1sZS1vZSxLdC5hZGRBdHRyaWJ1dGUoVCxlZSx2b2lkIDAsQyksRWU9cy5mcm9tQXJyYXkoVCwobGUtb2UtMSkqMyxFZSksQ2U9cy5mcm9tQXJyYXkoVCx5ZSozLENlKSx4PXMubm9ybWFsaXplKHMuc3VidHJhY3QoRWUsQ2UseCkseCksWGEoUixBLHgsdm9pZCAwLEMsZSksQy09MztlZT1zLmZyb21BcnJheShULHllKjMsZWUpLEVlPXMuc3VidHJhY3Qocy5mcm9tQXJyYXkoVCxsZSozLEVlKSxlZSxFZSksQ2U9cy5zdWJ0cmFjdChzLmZyb21BcnJheShULChsZS1vZSkqMyxDZSksZWUsQ2UpLHg9cy5ub3JtYWxpemUocy5hZGQoRWUsQ2UseCkseCksWGEoUixBLHgsUyx2b2lkIDAsZSksUys9M31lbHNle2ZvcihYYShSLEEseCxTLHZvaWQgMCxlKSxTKz0zLHllPVAsbGU9RixvZT0wO29lPGRlLmxlbmd0aC8zO29lKyspZWU9cy5mcm9tQXJyYXkoZGUsb2UqMyxlZSksTFtEKytdPXllLExbRCsrXT1sZStvZSxMW0QrK109bGUrb2UrMSxLdC5hZGRBdHRyaWJ1dGUoVCxlZSxTKSxFZT1zLmZyb21BcnJheShULHllKjMsRWUpLENlPXMuZnJvbUFycmF5KFQsKGxlK29lKSozLENlKSx4PXMubm9ybWFsaXplKHMuc3VidHJhY3QoRWUsQ2UseCkseCksWGEoUixBLHgsUyx2b2lkIDAsZSksUys9MztlZT1zLmZyb21BcnJheShULHllKjMsZWUpLEVlPXMuc3VidHJhY3Qocy5mcm9tQXJyYXkoVCwobGUrb2UpKjMsRWUpLGVlLEVlKSxDZT1zLnN1YnRyYWN0KHMuZnJvbUFycmF5KFQsbGUqMyxDZSksZWUsQ2UpLHg9cy5ub3JtYWxpemUocy5uZWdhdGUocy5hZGQoQ2UsRWUseCkseCkseCksWGEoUixBLHgsdm9pZCAwLEMsZSksQy09M31mb3IoTz1vW0crK10sSj1vW0crK10sTy5zcGxpY2UoMCwzKSxKLnNwbGljZShKLmxlbmd0aC0zLDMpLFQuc2V0KE8sUyksVC5zZXQoSixDLUoubGVuZ3RoKzEpLGg9Si5sZW5ndGgtMyxWKz0zLHg9cy5mcm9tQXJyYXkoaSxWLHgpLG9lPTA7b2U8Si5sZW5ndGg7b2UrPTMpcmU9dC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocy5mcm9tQXJyYXkoTyxvZSxPaSksT2kpLHNlPXQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHMuZnJvbUFycmF5KEosaC1vZSxScyksUnMpLEE9cy5ub3JtYWxpemUocy5hZGQocmUsc2UsQSksQSksWGEoUixBLHgsUyxDLGUpLEY9Uy8zLE09Ri0xLFA9KEMtMikvMyxJPVArMSxMW0QrK109SSxMW0QrK109TSxMW0QrK109UCxMW0QrK109UCxMW0QrK109TSxMW0QrK109RixTKz0zLEMtPTM7Uy09MyxDKz0zfWlmKEE9cy5mcm9tQXJyYXkoZixmLmxlbmd0aC0zLEEpLFhhKFIsQSx4LFMsQyxlKSxiKXtTKz0zLEMtPTMsdj1OaCxOPUloO2xldCBvZT1yWzFdO2ZvcihsPTA7bDxVO2wrKyl2PXMuZnJvbUFycmF5KG9lLChwLWwtMSkqMyx2KSxOPXMuZnJvbUFycmF5KG9lLGwqMyxOKSxLdC5hZGRBdHRyaWJ1dGUoVCx2LHZvaWQgMCxDKSxLdC5hZGRBdHRyaWJ1dGUoVCxOLFMpLFhhKFIsQSx4LFMsQyxlKSxGPVMvMyxNPUYtMSxQPShDLTIpLzMsST1QKzEsTFtEKytdPUksTFtEKytdPU0sTFtEKytdPVAsTFtEKytdPVAsTFtEKytdPU0sTFtEKytdPUYsUys9MyxDLT0zfWlmKGQucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSksZS5zdCl7bGV0IG9lPW5ldyBGbG9hdDMyQXJyYXkoeS8zKjIpLGNlLG1lLGRlPTA7aWYoYil7Yy89Myx1Lz0zO2xldCB5ZT1NYXRoLlBJLyhwKzEpO21lPTEvKGMtcCsxKSxjZT0xLyh1LXArMSk7bGV0IGxlLGVlPXAvMjtmb3IobD1lZSsxO2w8cCsxO2wrKylsZT1rLlBJX09WRVJfVFdPK3llKmwsb2VbZGUrK109Y2UqKDErTWF0aC5jb3MobGUpKSxvZVtkZSsrXT0uNSooMStNYXRoLnNpbihsZSkpO2ZvcihsPTE7bDx1LXArMTtsKyspb2VbZGUrK109bCpjZSxvZVtkZSsrXT0wO2ZvcihsPXA7bD5lZTtsLS0pbGU9ay5QSV9PVkVSX1RXTy1sKnllLG9lW2RlKytdPTEtY2UqKDErTWF0aC5jb3MobGUpKSxvZVtkZSsrXT0uNSooMStNYXRoLnNpbihsZSkpO2ZvcihsPWVlO2w+MDtsLS0pbGU9ay5QSV9PVkVSX1RXTy15ZSpsLG9lW2RlKytdPTEtbWUqKDErTWF0aC5jb3MobGUpKSxvZVtkZSsrXT0uNSooMStNYXRoLnNpbihsZSkpO2ZvcihsPWMtcDtsPjA7bC0tKW9lW2RlKytdPWwqbWUsb2VbZGUrK109MTtmb3IobD0xO2w8ZWUrMTtsKyspbGU9ay5QSV9PVkVSX1RXTyt5ZSpsLG9lW2RlKytdPW1lKigxK01hdGguY29zKGxlKSksb2VbZGUrK109LjUqKDErTWF0aC5zaW4obGUpKX1lbHNle2ZvcihjLz0zLHUvPTMsbWU9MS8oYy0xKSxjZT0xLyh1LTEpLGw9MDtsPHU7bCsrKW9lW2RlKytdPWwqY2Usb2VbZGUrK109MDtmb3IobD1jO2w+MDtsLS0pb2VbZGUrK109KGwtMSkqbWUsb2VbZGUrK109MX1kLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpvZX0pfXJldHVybiBlLm5vcm1hbCYmKGQubm9ybWFsPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpSLm5vcm1hbHN9KSksZS50YW5nZW50JiYoZC50YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpSLnRhbmdlbnRzfSkpLGUuYml0YW5nZW50JiYoZC5iaXRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlIuYml0YW5nZW50c30pKSx7YXR0cmlidXRlczpkLGluZGljZXM6TH19ZnVuY3Rpb24gcXYobixlKXtpZighZS5ub3JtYWwmJiFlLnRhbmdlbnQmJiFlLmJpdGFuZ2VudCYmIWUuc3QpcmV0dXJuIG47bGV0IHQ9bi5wb3NpdGlvbi52YWx1ZXMsbyxhOyhlLm5vcm1hbHx8ZS5iaXRhbmdlbnQpJiYobz1uLm5vcm1hbC52YWx1ZXMsYT1uLmJpdGFuZ2VudC52YWx1ZXMpO2xldCByPW4ucG9zaXRpb24udmFsdWVzLmxlbmd0aC8xOCxpPXIqMyxmPXIqMixkPWkqMixjO2lmKGUubm9ybWFsfHxlLmJpdGFuZ2VudHx8ZS50YW5nZW50KXtsZXQgdT1lLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGkqNik6dm9pZCAwLGw9ZS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoaSo2KTp2b2lkIDAsbT1lLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGkqNik6dm9pZCAwLGg9cDgsYj1nOCxwPU5oLHk9SWgsVD1LdixfPV84LHc9ZDtmb3IoYz0wO2M8aTtjKz0zKXtsZXQgRT13K2Q7aD1zLmZyb21BcnJheSh0LGMsaCksYj1zLmZyb21BcnJheSh0LGMraSxiKSxwPXMuZnJvbUFycmF5KHQsKGMrMyklaSxwKSxiPXMuc3VidHJhY3QoYixoLGIpLHA9cy5zdWJ0cmFjdChwLGgscCkseT1zLm5vcm1hbGl6ZShzLmNyb3NzKGIscCx5KSx5KSxlLm5vcm1hbCYmKEt0LmFkZEF0dHJpYnV0ZSh1LHksRSksS3QuYWRkQXR0cmlidXRlKHUseSxFKzMpLEt0LmFkZEF0dHJpYnV0ZSh1LHksdyksS3QuYWRkQXR0cmlidXRlKHUseSx3KzMpKSwoZS50YW5nZW50fHxlLmJpdGFuZ2VudCkmJihfPXMuZnJvbUFycmF5KG8sYyxfKSxlLmJpdGFuZ2VudCYmKEt0LmFkZEF0dHJpYnV0ZShtLF8sRSksS3QuYWRkQXR0cmlidXRlKG0sXyxFKzMpLEt0LmFkZEF0dHJpYnV0ZShtLF8sdyksS3QuYWRkQXR0cmlidXRlKG0sXyx3KzMpKSxlLnRhbmdlbnQmJihUPXMubm9ybWFsaXplKHMuY3Jvc3MoXyx5LFQpLFQpLEt0LmFkZEF0dHJpYnV0ZShsLFQsRSksS3QuYWRkQXR0cmlidXRlKGwsVCxFKzMpLEt0LmFkZEF0dHJpYnV0ZShsLFQsdyksS3QuYWRkQXR0cmlidXRlKGwsVCx3KzMpKSksdys9Nn1pZihlLm5vcm1hbCl7Zm9yKHUuc2V0KG8pLGM9MDtjPGk7Yys9Myl1W2MraV09LW9bY10sdVtjK2krMV09LW9bYysxXSx1W2MraSsyXT0tb1tjKzJdO24ubm9ybWFsLnZhbHVlcz11fWVsc2Ugbi5ub3JtYWw9dm9pZCAwO2lmKGUuYml0YW5nZW50PyhtLnNldChhKSxtLnNldChhLGkpLG4uYml0YW5nZW50LnZhbHVlcz1tKTpuLmJpdGFuZ2VudD12b2lkIDAsZS50YW5nZW50KXtsZXQgRT1uLnRhbmdlbnQudmFsdWVzO2wuc2V0KEUpLGwuc2V0KEUsaSksbi50YW5nZW50LnZhbHVlcz1sfX1pZihlLnN0KXtsZXQgdT1uLnN0LnZhbHVlcyxsPW5ldyBGbG9hdDMyQXJyYXkoZio2KTtsLnNldCh1KSxsLnNldCh1LGYpO2xldCBtPWYqMjtmb3IobGV0IGg9MDtoPDI7aCsrKXtmb3IobFttKytdPXVbMF0sbFttKytdPXVbMV0sYz0yO2M8ZjtjKz0yKXtsZXQgYj11W2NdLHA9dVtjKzFdO2xbbSsrXT1iLGxbbSsrXT1wLGxbbSsrXT1iLGxbbSsrXT1wfWxbbSsrXT11WzBdLGxbbSsrXT11WzFdfW4uc3QudmFsdWVzPWx9cmV0dXJuIG59ZnVuY3Rpb24gTTAobixlLHQpe3RbZSsrXT1uWzBdLHRbZSsrXT1uWzFdLHRbZSsrXT1uWzJdO2ZvcihsZXQgbz0zO288bi5sZW5ndGg7bys9Myl7bGV0IGE9bltvXSxyPW5bbysxXSxpPW5bbysyXTt0W2UrK109YSx0W2UrK109cix0W2UrK109aSx0W2UrK109YSx0W2UrK109cix0W2UrK109aX1yZXR1cm4gdFtlKytdPW5bMF0sdFtlKytdPW5bMV0sdFtlXT1uWzJdLHR9ZnVuY3Rpb24gV3YobixlKXtsZXQgdD1uZXcgaGUoe3Bvc2l0aW9uOmUucG9zaXRpb24sbm9ybWFsOmUubm9ybWFsfHxlLmJpdGFuZ2VudHx8bi5zaGFkb3dWb2x1bWUsdGFuZ2VudDplLnRhbmdlbnQsYml0YW5nZW50OmUubm9ybWFsfHxlLmJpdGFuZ2VudCxzdDplLnN0fSksbz1uLmVsbGlwc29pZCxhPUt0LmNvbXB1dGVQb3NpdGlvbnMobikscj1BOChhLHQsbyksaT1uLmhlaWdodCxmPW4uZXh0cnVkZWRIZWlnaHQsZD1yLmF0dHJpYnV0ZXMsYz1yLmluZGljZXMsdT1kLnBvc2l0aW9uLnZhbHVlcyxsPXUubGVuZ3RoLG09bmV3IEZsb2F0NjRBcnJheShsKjYpLGg9bmV3IEZsb2F0NjRBcnJheShsKTtoLnNldCh1KTtsZXQgYj1uZXcgRmxvYXQ2NEFycmF5KGwqNCk7dT13dC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQodSxpLG8pLGI9TTAodSwwLGIpLGg9d3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KGgsZixvKSxiPU0wKGgsbCoyLGIpLG0uc2V0KHUpLG0uc2V0KGgsbCksbS5zZXQoYixsKjIpLGQucG9zaXRpb24udmFsdWVzPW0sZD1xdihkLGUpO2xldCBwLHk9bC8zO2lmKG4uc2hhZG93Vm9sdW1lKXtsZXQgTT1kLm5vcm1hbC52YWx1ZXM7bD1NLmxlbmd0aDtsZXQgUD1uZXcgRmxvYXQzMkFycmF5KGwqNik7Zm9yKHA9MDtwPGw7cCsrKU1bcF09LU1bcF07UC5zZXQoTSxsKSxQPU0wKE0sbCo0LFApLGQuZXh0cnVkZURpcmVjdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6UH0pLGUubm9ybWFsfHwoZC5ub3JtYWw9dm9pZCAwKX1pZihnKG4ub2Zmc2V0QXR0cmlidXRlKSl7bGV0IE09bmV3IFVpbnQ4QXJyYXkoeSo2KTtpZihuLm9mZnNldEF0dHJpYnV0ZT09PW90LlRPUClNPU0uZmlsbCgxLDAseSkuZmlsbCgxLHkqMix5KjQpO2Vsc2V7bGV0IFA9bi5vZmZzZXRBdHRyaWJ1dGU9PT1vdC5OT05FPzA6MTtNPU0uZmlsbChQKX1kLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOk19KX1sZXQgVD1jLmxlbmd0aCxfPXkreSx3PUllLmNyZWF0ZVR5cGVkQXJyYXkobS5sZW5ndGgvMyxUKjIrXyozKTt3LnNldChjKTtsZXQgRT1UO2ZvcihwPTA7cDxUO3ArPTMpe2xldCBNPWNbcF0sUD1jW3ArMV0sRj1jW3ArMl07d1tFKytdPUYreSx3W0UrK109UCt5LHdbRSsrXT1NK3l9bGV0IFIsUyxDLEk7Zm9yKHA9MDtwPF87cCs9MilSPXArXyxTPVIrXyxDPVIrMSxJPVMrMSx3W0UrK109Uix3W0UrK109Uyx3W0UrK109Qyx3W0UrK109Qyx3W0UrK109Uyx3W0UrK109STtyZXR1cm57YXR0cmlidXRlczpkLGluZGljZXM6d319ZnVuY3Rpb24gYjgobixlLHQsbyxhLHIpe2xldCBpPXMuc3VidHJhY3QoZSxuLG04KTtzLm5vcm1hbGl6ZShpLGkpO2xldCBmPXQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKG4sbmQpLGQ9cy5jcm9zcyhpLGYsbTgpO3MubXVsdGlwbHlCeVNjYWxhcihkLG8sZCk7bGV0IGM9YS5sYXRpdHVkZSx1PWEubG9uZ2l0dWRlLGw9ci5sYXRpdHVkZSxtPXIubG9uZ2l0dWRlO3MuYWRkKG4sZCxuZCksdC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhuZCxPYSk7bGV0IGg9T2EubGF0aXR1ZGUsYj1PYS5sb25naXR1ZGU7Yz1NYXRoLm1pbihjLGgpLHU9TWF0aC5taW4odSxiKSxsPU1hdGgubWF4KGwsaCksbT1NYXRoLm1heChtLGIpLHMuc3VidHJhY3QobixkLG5kKSx0LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG5kLE9hKSxoPU9hLmxhdGl0dWRlLGI9T2EubG9uZ2l0dWRlLGM9TWF0aC5taW4oYyxoKSx1PU1hdGgubWluKHUsYiksbD1NYXRoLm1heChsLGgpLG09TWF0aC5tYXgobSxiKSxhLmxhdGl0dWRlPWMsYS5sb25naXR1ZGU9dSxyLmxhdGl0dWRlPWwsci5sb25naXR1ZGU9bX1mdW5jdGlvbiB3OChuLGUsdCxvLGEpe249eTgobixlKTtsZXQgcj14bihuLHMuZXF1YWxzRXBzaWxvbiksaT1yLmxlbmd0aDtpZihpPDJ8fHQ8PTApcmV0dXJuIG5ldyB4ZTtsZXQgZj10Ki41O1FvLmxhdGl0dWRlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxRby5sb25naXR1ZGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCRvLmxhdGl0dWRlPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSwkby5sb25naXR1ZGU9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2xldCBkLGM7aWYobz09PXNuLlJPVU5ERUQpe2xldCBtPXJbMF07cy5zdWJ0cmFjdChtLHJbMV0seGEpLHMubm9ybWFsaXplKHhhLHhhKSxzLm11bHRpcGx5QnlTY2FsYXIoeGEsZix4YSkscy5hZGQobSx4YSxvZCksZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvZCxPYSksZD1PYS5sYXRpdHVkZSxjPU9hLmxvbmdpdHVkZSxRby5sYXRpdHVkZT1NYXRoLm1pbihRby5sYXRpdHVkZSxkKSxRby5sb25naXR1ZGU9TWF0aC5taW4oUW8ubG9uZ2l0dWRlLGMpLCRvLmxhdGl0dWRlPU1hdGgubWF4KCRvLmxhdGl0dWRlLGQpLCRvLmxvbmdpdHVkZT1NYXRoLm1heCgkby5sb25naXR1ZGUsYyl9Zm9yKGxldCBtPTA7bTxpLTE7KyttKWI4KHJbbV0sclttKzFdLGUsZixRbywkbyk7bGV0IHU9cltpLTFdO3Muc3VidHJhY3QodSxyW2ktMl0seGEpLHMubm9ybWFsaXplKHhhLHhhKSxzLm11bHRpcGx5QnlTY2FsYXIoeGEsZix4YSkscy5hZGQodSx4YSxvZCksYjgodSxvZCxlLGYsUW8sJG8pLG89PT1zbi5ST1VOREVEJiYoZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvZCxPYSksZD1PYS5sYXRpdHVkZSxjPU9hLmxvbmdpdHVkZSxRby5sYXRpdHVkZT1NYXRoLm1pbihRby5sYXRpdHVkZSxkKSxRby5sb25naXR1ZGU9TWF0aC5taW4oUW8ubG9uZ2l0dWRlLGMpLCRvLmxhdGl0dWRlPU1hdGgubWF4KCRvLmxhdGl0dWRlLGQpLCRvLmxvbmdpdHVkZT1NYXRoLm1heCgkby5sb25naXR1ZGUsYykpO2xldCBsPWcoYSk/YTpuZXcgeGU7cmV0dXJuIGwubm9ydGg9JG8ubGF0aXR1ZGUsbC5zb3V0aD1Rby5sYXRpdHVkZSxsLmVhc3Q9JG8ubG9uZ2l0dWRlLGwud2VzdD1Rby5sb25naXR1ZGUsbH1mdW5jdGlvbiBxcihuKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXQgZT1uLnBvc2l0aW9ucyx0PW4ud2lkdGgsbz1uLmhlaWdodD8/MCxhPW4uZXh0cnVkZWRIZWlnaHQ/P287dGhpcy5fcG9zaXRpb25zPWUsdGhpcy5fZWxsaXBzb2lkPUsuY2xvbmUobi5lbGxpcHNvaWQ/P0suZGVmYXVsdCksdGhpcy5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKG4udmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxUKSx0aGlzLl93aWR0aD10LHRoaXMuX2hlaWdodD1NYXRoLm1heChvLGEpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKG8sYSksdGhpcy5fY29ybmVyVHlwZT1uLmNvcm5lclR5cGU/P3NuLlJPVU5ERUQsdGhpcy5fZ3JhbnVsYXJpdHk9bi5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsdGhpcy5fc2hhZG93Vm9sdW1lPW4uc2hhZG93Vm9sdW1lPz8hMSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3JyaWRvckdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9bi5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fcmVjdGFuZ2xlPXZvaWQgMCx0aGlzLnBhY2tlZExlbmd0aD0xK2UubGVuZ3RoKnMucGFja2VkTGVuZ3RoK0sucGFja2VkTGVuZ3RoK2hlLnBhY2tlZExlbmd0aCs3fXZhciBwOCxnOCxOaCxJaCxLdixfOCxPaSxScyxtOCxuZCxPYSx4YSxvZCxRbywkbyxUOCxFOCxLcixOMCxSOD1YKCgpPT57S2EoKTtFdCgpO01lKCk7Z3QoKTtDdCgpO3ljKCk7QzAoKTtzdCgpO2ZlKCk7VmUoKTtYdCgpO1l0KCk7cm4oKTtVbygpO1p0KCk7amUoKTtXYSgpO3RuKCk7aG4oKTtDbygpO3A4PW5ldyBzLGc4PW5ldyBzLE5oPW5ldyBzLEloPW5ldyBzLEt2PW5ldyBzLF84PW5ldyBzLE9pPW5ldyBzLFJzPW5ldyBzO204PW5ldyBzLG5kPW5ldyBzLE9hPW5ldyBhZTt4YT1uZXcgcyxvZD1uZXcgcyxRbz1uZXcgYWUsJG89bmV3IGFlO3FyLnBhY2s9ZnVuY3Rpb24obixlLHQpe3Q9dD8/MDtsZXQgbz1uLl9wb3NpdGlvbnMsYT1vLmxlbmd0aDtlW3QrK109YTtmb3IobGV0IHI9MDtyPGE7KytyLHQrPXMucGFja2VkTGVuZ3RoKXMucGFjayhvW3JdLGUsdCk7cmV0dXJuIEsucGFjayhuLl9lbGxpcHNvaWQsZSx0KSx0Kz1LLnBhY2tlZExlbmd0aCxoZS5wYWNrKG4uX3ZlcnRleEZvcm1hdCxlLHQpLHQrPWhlLnBhY2tlZExlbmd0aCxlW3QrK109bi5fd2lkdGgsZVt0KytdPW4uX2hlaWdodCxlW3QrK109bi5fZXh0cnVkZWRIZWlnaHQsZVt0KytdPW4uX2Nvcm5lclR5cGUsZVt0KytdPW4uX2dyYW51bGFyaXR5LGVbdCsrXT1uLl9zaGFkb3dWb2x1bWU/MTowLGVbdF09bi5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtUOD1LLmNsb25lKEsuVU5JVF9TUEhFUkUpLEU4PW5ldyBoZSxLcj17cG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6VDgsdmVydGV4Rm9ybWF0OkU4LHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxjb3JuZXJUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsc2hhZG93Vm9sdW1lOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtxci51bnBhY2s9ZnVuY3Rpb24obixlLHQpe2U9ZT8/MDtsZXQgbz1uW2UrK10sYT1uZXcgQXJyYXkobyk7Zm9yKGxldCBiPTA7YjxvOysrYixlKz1zLnBhY2tlZExlbmd0aClhW2JdPXMudW5wYWNrKG4sZSk7bGV0IHI9Sy51bnBhY2sobixlLFQ4KTtlKz1LLnBhY2tlZExlbmd0aDtsZXQgaT1oZS51bnBhY2sobixlLEU4KTtlKz1oZS5wYWNrZWRMZW5ndGg7bGV0IGY9bltlKytdLGQ9bltlKytdLGM9bltlKytdLHU9bltlKytdLGw9bltlKytdLG09bltlKytdPT09MSxoPW5bZV07cmV0dXJuIGcodCk/KHQuX3Bvc2l0aW9ucz1hLHQuX2VsbGlwc29pZD1LLmNsb25lKHIsdC5fZWxsaXBzb2lkKSx0Ll92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoaSx0Ll92ZXJ0ZXhGb3JtYXQpLHQuX3dpZHRoPWYsdC5faGVpZ2h0PWQsdC5fZXh0cnVkZWRIZWlnaHQ9Yyx0Ll9jb3JuZXJUeXBlPXUsdC5fZ3JhbnVsYXJpdHk9bCx0Ll9zaGFkb3dWb2x1bWU9bSx0Ll9vZmZzZXRBdHRyaWJ1dGU9aD09PS0xP3ZvaWQgMDpoLHQpOihLci5wb3NpdGlvbnM9YSxLci53aWR0aD1mLEtyLmhlaWdodD1kLEtyLmV4dHJ1ZGVkSGVpZ2h0PWMsS3IuY29ybmVyVHlwZT11LEtyLmdyYW51bGFyaXR5PWwsS3Iuc2hhZG93Vm9sdW1lPW0sS3Iub2Zmc2V0QXR0cmlidXRlPWg9PT0tMT92b2lkIDA6aCxuZXcgcXIoS3IpKX07cXIuY29tcHV0ZVJlY3RhbmdsZT1mdW5jdGlvbihuLGUpe249bj8/T2UuRU1QVFlfT0JKRUNUO2xldCB0PW4ucG9zaXRpb25zLG89bi53aWR0aCxhPW4uZWxsaXBzb2lkPz9LLmRlZmF1bHQscj1uLmNvcm5lclR5cGU/P3NuLlJPVU5ERUQ7cmV0dXJuIHc4KHQsYSxvLHIsZSl9O3FyLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe2xldCBlPW4uX3Bvc2l0aW9ucyx0PW4uX3dpZHRoLG89bi5fZWxsaXBzb2lkO2U9eTgoZSxvKTtsZXQgYT14bihlLHMuZXF1YWxzRXBzaWxvbik7aWYoYS5sZW5ndGg8Mnx8dDw9MClyZXR1cm47bGV0IHI9bi5faGVpZ2h0LGk9bi5fZXh0cnVkZWRIZWlnaHQsZj0hay5lcXVhbHNFcHNpbG9uKHIsaSwwLGsuRVBTSUxPTjIpLGQ9bi5fdmVydGV4Rm9ybWF0LGM9e2VsbGlwc29pZDpvLHBvc2l0aW9uczphLHdpZHRoOnQsY29ybmVyVHlwZTpuLl9jb3JuZXJUeXBlLGdyYW51bGFyaXR5Om4uX2dyYW51bGFyaXR5LHNhdmVBdHRyaWJ1dGVzOiEwfSx1O2lmKGYpYy5oZWlnaHQ9cixjLmV4dHJ1ZGVkSGVpZ2h0PWksYy5zaGFkb3dWb2x1bWU9bi5fc2hhZG93Vm9sdW1lLGMub2Zmc2V0QXR0cmlidXRlPW4uX29mZnNldEF0dHJpYnV0ZSx1PVd2KGMsZCk7ZWxzZXtsZXQgaD1LdC5jb21wdXRlUG9zaXRpb25zKGMpO2lmKHU9QTgoaCxkLG8pLHUuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9d3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KHUuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscixvKSxnKG4uX29mZnNldEF0dHJpYnV0ZSkpe2xldCBiPW4uX29mZnNldEF0dHJpYnV0ZT09PW90Lk5PTkU/MDoxLHA9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgseT1uZXcgVWludDhBcnJheShwLzMpLmZpbGwoYik7dS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnl9KX19bGV0IGw9dS5hdHRyaWJ1dGVzLG09cGUuZnJvbVZlcnRpY2VzKGwucG9zaXRpb24udmFsdWVzLHZvaWQgMCwzKTtyZXR1cm4gZC5wb3NpdGlvbnx8KHUuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9dm9pZCAwKSxuZXcgUGUoe2F0dHJpYnV0ZXM6bCxpbmRpY2VzOnUuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkZlLlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTptLG9mZnNldEF0dHJpYnV0ZTpuLl9vZmZzZXRBdHRyaWJ1dGV9KX07cXIuY3JlYXRlU2hhZG93Vm9sdW1lPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1uLl9ncmFudWxhcml0eSxhPW4uX2VsbGlwc29pZCxyPWUobyxhKSxpPXQobyxhKTtyZXR1cm4gbmV3IHFyKHtwb3NpdGlvbnM6bi5fcG9zaXRpb25zLHdpZHRoOm4uX3dpZHRoLGNvcm5lclR5cGU6bi5fY29ybmVyVHlwZSxlbGxpcHNvaWQ6YSxncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OnIsaGVpZ2h0OmksdmVydGV4Rm9ybWF0OmhlLlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHFyLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLl9yZWN0YW5nbGUpfHwodGhpcy5fcmVjdGFuZ2xlPXc4KHRoaXMuX3Bvc2l0aW9ucyx0aGlzLl9lbGxpcHNvaWQsdGhpcy5fd2lkdGgsdGhpcy5fY29ybmVyVHlwZSkpLHRoaXMuX3JlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVyblswLDAsMCwxLDEsMF19fX0pO04wPXFyfSk7dmFyIEkwPXt9OyRlKEkwLHtkZWZhdWx0OigpPT5Zdn0pO2Z1bmN0aW9uIFh2KG4sZSl7cmV0dXJuIGcoZSkmJihuPU4wLnVucGFjayhuLGUpKSxuLl9lbGxpcHNvaWQ9Sy5jbG9uZShuLl9lbGxpcHNvaWQpLE4wLmNyZWF0ZUdlb21ldHJ5KG4pfXZhciBZdixQMD1YKCgpPT57UjgoKTtmZSgpO1ZlKCk7WXY9WHZ9KTtmdW5jdGlvbiBadihuLGUpe2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW5bdF09ZS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKG5bdF0sblt0XSk7cmV0dXJuIG59ZnVuY3Rpb24gUzgobixlKXtsZXQgdD1bXSxvPW4ucG9zaXRpb25zLGE9bi5jb3JuZXJzLHI9bi5lbmRQb3NpdGlvbnMsaT1uZXcgUWUsZixkPTAsYz0wLHUsbD0wLG07Zm9yKHU9MDt1PG8ubGVuZ3RoO3UrPTIpbT1vW3VdLmxlbmd0aC0zLGQrPW0sbCs9bS8zKjQsYys9b1t1KzFdLmxlbmd0aC0zO2ZvcihkKz0zLGMrPTMsdT0wO3U8YS5sZW5ndGg7dSsrKXtsZXQgdj1hW3VdLmxlZnRQb3NpdGlvbnM7Zyh2KT8obT12Lmxlbmd0aCxkKz1tLGwrPW0vMyoyKToobT1hW3VdLnJpZ2h0UG9zaXRpb25zLmxlbmd0aCxjKz1tLGwrPW0vMyoyKX1sZXQgaD1nKHIpLGI7aCYmKGI9clswXS5sZW5ndGgtMyxkKz1iLGMrPWIsYi89MyxsKz1iKjQpO2xldCBwPWQrYyx5PW5ldyBGbG9hdDY0QXJyYXkocCksVD0wLF89cC0xLHcsRSxSLFMsQyxJLE09Yi8yLFA9SWUuY3JlYXRlVHlwZWRBcnJheShwLzMsbCs0KSxGPTA7aWYoUFtGKytdPVQvMyxQW0YrK109KF8tMikvMyxoKXt0LnB1c2goVC8zKSxJPXg4LEM9Tzg7bGV0IHY9clswXTtmb3IodT0wO3U8TTt1KyspST1zLmZyb21BcnJheSh2LChNLTEtdSkqMyxJKSxDPXMuZnJvbUFycmF5KHYsKE0rdSkqMyxDKSxLdC5hZGRBdHRyaWJ1dGUoeSxDLFQpLEt0LmFkZEF0dHJpYnV0ZSh5LEksdm9pZCAwLF8pLEU9VC8zLFM9RSsxLHc9KF8tMikvMyxSPXctMSxQW0YrK109dyxQW0YrK109UixQW0YrK109RSxQW0YrK109UyxUKz0zLF8tPTN9bGV0IEE9MCx4PW9bQSsrXSxOPW9bQSsrXTtmb3IoeS5zZXQoeCxUKSx5LnNldChOLF8tTi5sZW5ndGgrMSksbT1OLmxlbmd0aC0zLHQucHVzaChULzMsKF8tMikvMyksdT0wO3U8bTt1Kz0zKUU9VC8zLFM9RSsxLHc9KF8tMikvMyxSPXctMSxQW0YrK109dyxQW0YrK109UixQW0YrK109RSxQW0YrK109UyxUKz0zLF8tPTM7Zm9yKHU9MDt1PGEubGVuZ3RoO3UrKyl7bGV0IHY7Zj1hW3VdO2xldCBVPWYubGVmdFBvc2l0aW9ucyxMPWYucmlnaHRQb3NpdGlvbnMsRCxHPUp2O2lmKGcoVSkpe2ZvcihfLT0zLEQ9Uix0LnB1c2goUyksdj0wO3Y8VS5sZW5ndGgvMzt2KyspRz1zLmZyb21BcnJheShVLHYqMyxHKSxQW0YrK109RC12LTEsUFtGKytdPUQtdixLdC5hZGRBdHRyaWJ1dGUoeSxHLHZvaWQgMCxfKSxfLT0zO3QucHVzaChELU1hdGguZmxvb3IoVS5sZW5ndGgvNikpLGU9PT1zbi5CRVZFTEVEJiZ0LnB1c2goKF8tMikvMysxKSxUKz0zfWVsc2V7Zm9yKFQrPTMsRD1TLHQucHVzaChSKSx2PTA7djxMLmxlbmd0aC8zO3YrKylHPXMuZnJvbUFycmF5KEwsdiozLEcpLFBbRisrXT1EK3YsUFtGKytdPUQrdisxLEt0LmFkZEF0dHJpYnV0ZSh5LEcsVCksVCs9Mzt0LnB1c2goRCtNYXRoLmZsb29yKEwubGVuZ3RoLzYpKSxlPT09c24uQkVWRUxFRCYmdC5wdXNoKFQvMy0xKSxfLT0zfWZvcih4PW9bQSsrXSxOPW9bQSsrXSx4LnNwbGljZSgwLDMpLE4uc3BsaWNlKE4ubGVuZ3RoLTMsMykseS5zZXQoeCxUKSx5LnNldChOLF8tTi5sZW5ndGgrMSksdj0wO3Y8Ti5sZW5ndGg7dis9MylTPVQvMyxFPVMtMSxSPShfLTIpLzMsdz1SKzEsUFtGKytdPXcsUFtGKytdPVIsUFtGKytdPUUsUFtGKytdPVMsVCs9MyxfLT0zO1QtPTMsXys9Myx0LnB1c2goVC8zLChfLTIpLzMpfWlmKGgpe1QrPTMsXy09MyxJPXg4LEM9Tzg7bGV0IHY9clsxXTtmb3IodT0wO3U8TTt1KyspST1zLmZyb21BcnJheSh2LChiLXUtMSkqMyxJKSxDPXMuZnJvbUFycmF5KHYsdSozLEMpLEt0LmFkZEF0dHJpYnV0ZSh5LEksdm9pZCAwLF8pLEt0LmFkZEF0dHJpYnV0ZSh5LEMsVCksUz1ULzMsRT1TLTEsUj0oXy0yKS8zLHc9UisxLFBbRisrXT13LFBbRisrXT1SLFBbRisrXT1FLFBbRisrXT1TLFQrPTMsXy09Mzt0LnB1c2goVC8zKX1lbHNlIHQucHVzaChULzMsKF8tMikvMyk7cmV0dXJuIFBbRisrXT1ULzMsUFtGXT0oXy0yKS8zLGkucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp5fSkse2F0dHJpYnV0ZXM6aSxpbmRpY2VzOlAsd2FsbEluZGljZXM6dH19ZnVuY3Rpb24gUXYobil7bGV0IGU9bi5lbGxpcHNvaWQsdD1LdC5jb21wdXRlUG9zaXRpb25zKG4pLG89UzgodCxuLmNvcm5lclR5cGUpLGE9by53YWxsSW5kaWNlcyxyPW4uaGVpZ2h0LGk9bi5leHRydWRlZEhlaWdodCxmPW8uYXR0cmlidXRlcyxkPW8uaW5kaWNlcyxjPWYucG9zaXRpb24udmFsdWVzLHU9Yy5sZW5ndGgsbD1uZXcgRmxvYXQ2NEFycmF5KHUpO2wuc2V0KGMpO2xldCBtPW5ldyBGbG9hdDY0QXJyYXkodSoyKTtpZihjPXd0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChjLHIsZSksbD13dC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQobCxpLGUpLG0uc2V0KGMpLG0uc2V0KGwsdSksZi5wb3NpdGlvbi52YWx1ZXM9bSx1Lz0zLGcobi5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdz1uZXcgVWludDhBcnJheSh1KjIpO2lmKG4ub2Zmc2V0QXR0cmlidXRlPT09b3QuVE9QKXc9dy5maWxsKDEsMCx1KTtlbHNle2xldCBFPW4ub2Zmc2V0QXR0cmlidXRlPT09b3QuTk9ORT8wOjE7dz13LmZpbGwoRSl9Zi5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczp3fSl9bGV0IGgsYj1kLmxlbmd0aCxwPUllLmNyZWF0ZVR5cGVkQXJyYXkobS5sZW5ndGgvMywoYithLmxlbmd0aCkqMik7cC5zZXQoZCk7bGV0IHk9Yjtmb3IoaD0wO2g8YjtoKz0yKXtsZXQgdz1kW2hdLEU9ZFtoKzFdO3BbeSsrXT13K3UscFt5KytdPUUrdX1sZXQgVCxfO2ZvcihoPTA7aDxhLmxlbmd0aDtoKyspVD1hW2hdLF89VCt1LHBbeSsrXT1ULHBbeSsrXT1fO3JldHVybnthdHRyaWJ1dGVzOmYsaW5kaWNlczpwfX1mdW5jdGlvbiBhZChuKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXQgZT1uLnBvc2l0aW9ucyx0PW4ud2lkdGgsbz1uLmhlaWdodD8/MCxhPW4uZXh0cnVkZWRIZWlnaHQ/P287dGhpcy5fcG9zaXRpb25zPWUsdGhpcy5fZWxsaXBzb2lkPUsuY2xvbmUobi5lbGxpcHNvaWQ/P0suZGVmYXVsdCksdGhpcy5fd2lkdGg9dCx0aGlzLl9oZWlnaHQ9TWF0aC5tYXgobyxhKSx0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbihvLGEpLHRoaXMuX2Nvcm5lclR5cGU9bi5jb3JuZXJUeXBlPz9zbi5ST1VOREVELHRoaXMuX2dyYW51bGFyaXR5PW4uZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX29mZnNldEF0dHJpYnV0ZT1uLm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3JyaWRvck91dGxpbmVHZW9tZXRyeSIsdGhpcy5wYWNrZWRMZW5ndGg9MStlLmxlbmd0aCpzLnBhY2tlZExlbmd0aCtLLnBhY2tlZExlbmd0aCs2fXZhciB4OCxPOCxKdixDOCxTaSxrMCxNOD1YKCgpPT57S2EoKTtFdCgpO01lKCk7Q3QoKTt5YygpO0MwKCk7c3QoKTtmZSgpO1ZlKCk7WHQoKTtZdCgpO3JuKCk7VW8oKTtadCgpO2plKCk7V2EoKTt0bigpO3g4PW5ldyBzLE84PW5ldyBzLEp2PW5ldyBzO2FkLnBhY2s9ZnVuY3Rpb24obixlLHQpe3Q9dD8/MDtsZXQgbz1uLl9wb3NpdGlvbnMsYT1vLmxlbmd0aDtlW3QrK109YTtmb3IobGV0IHI9MDtyPGE7KytyLHQrPXMucGFja2VkTGVuZ3RoKXMucGFjayhvW3JdLGUsdCk7cmV0dXJuIEsucGFjayhuLl9lbGxpcHNvaWQsZSx0KSx0Kz1LLnBhY2tlZExlbmd0aCxlW3QrK109bi5fd2lkdGgsZVt0KytdPW4uX2hlaWdodCxlW3QrK109bi5fZXh0cnVkZWRIZWlnaHQsZVt0KytdPW4uX2Nvcm5lclR5cGUsZVt0KytdPW4uX2dyYW51bGFyaXR5LGVbdF09bi5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtDOD1LLmNsb25lKEsuVU5JVF9TUEhFUkUpLFNpPXtwb3NpdGlvbnM6dm9pZCAwLGVsbGlwc29pZDpDOCx3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsY29ybmVyVHlwZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2FkLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvPW5bZSsrXSxhPW5ldyBBcnJheShvKTtmb3IobGV0IG09MDttPG87KyttLGUrPXMucGFja2VkTGVuZ3RoKWFbbV09cy51bnBhY2sobixlKTtsZXQgcj1LLnVucGFjayhuLGUsQzgpO2UrPUsucGFja2VkTGVuZ3RoO2xldCBpPW5bZSsrXSxmPW5bZSsrXSxkPW5bZSsrXSxjPW5bZSsrXSx1PW5bZSsrXSxsPW5bZV07cmV0dXJuIGcodCk/KHQuX3Bvc2l0aW9ucz1hLHQuX2VsbGlwc29pZD1LLmNsb25lKHIsdC5fZWxsaXBzb2lkKSx0Ll93aWR0aD1pLHQuX2hlaWdodD1mLHQuX2V4dHJ1ZGVkSGVpZ2h0PWQsdC5fY29ybmVyVHlwZT1jLHQuX2dyYW51bGFyaXR5PXUsdC5fb2Zmc2V0QXR0cmlidXRlPWw9PT0tMT92b2lkIDA6bCx0KTooU2kucG9zaXRpb25zPWEsU2kud2lkdGg9aSxTaS5oZWlnaHQ9ZixTaS5leHRydWRlZEhlaWdodD1kLFNpLmNvcm5lclR5cGU9YyxTaS5ncmFudWxhcml0eT11LFNpLm9mZnNldEF0dHJpYnV0ZT1sPT09LTE/dm9pZCAwOmwsbmV3IGFkKFNpKSl9O2FkLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe2xldCBlPW4uX3Bvc2l0aW9ucyx0PW4uX3dpZHRoLG89bi5fZWxsaXBzb2lkO2U9WnYoZSxvKTtsZXQgYT14bihlLHMuZXF1YWxzRXBzaWxvbik7aWYoYS5sZW5ndGg8Mnx8dDw9MClyZXR1cm47bGV0IHI9bi5faGVpZ2h0LGk9bi5fZXh0cnVkZWRIZWlnaHQsZj0hay5lcXVhbHNFcHNpbG9uKHIsaSwwLGsuRVBTSUxPTjIpLGQ9e2VsbGlwc29pZDpvLHBvc2l0aW9uczphLHdpZHRoOnQsY29ybmVyVHlwZTpuLl9jb3JuZXJUeXBlLGdyYW51bGFyaXR5Om4uX2dyYW51bGFyaXR5LHNhdmVBdHRyaWJ1dGVzOiExfSxjO2lmKGYpZC5oZWlnaHQ9cixkLmV4dHJ1ZGVkSGVpZ2h0PWksZC5vZmZzZXRBdHRyaWJ1dGU9bi5fb2Zmc2V0QXR0cmlidXRlLGM9UXYoZCk7ZWxzZXtsZXQgbT1LdC5jb21wdXRlUG9zaXRpb25zKGQpO2lmKGM9UzgobSxkLmNvcm5lclR5cGUpLGMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9d3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KGMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscixvKSxnKG4uX29mZnNldEF0dHJpYnV0ZSkpe2xldCBoPWMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLGI9bi5fb2Zmc2V0QXR0cmlidXRlPT09b3QuTk9ORT8wOjEscD1uZXcgVWludDhBcnJheShoLzMpLmZpbGwoYik7Yy5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnB9KX19bGV0IHU9Yy5hdHRyaWJ1dGVzLGw9cGUuZnJvbVZlcnRpY2VzKHUucG9zaXRpb24udmFsdWVzLHZvaWQgMCwzKTtyZXR1cm4gbmV3IFBlKHthdHRyaWJ1dGVzOnUsaW5kaWNlczpjLmluZGljZXMscHJpbWl0aXZlVHlwZTpGZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpsLG9mZnNldEF0dHJpYnV0ZTpuLl9vZmZzZXRBdHRyaWJ1dGV9KX07azA9YWR9KTt2YXIgdjA9e307JGUodjAse2RlZmF1bHQ6KCk9PmU5fSk7ZnVuY3Rpb24gJHYobixlKXtyZXR1cm4gZyhlKSYmKG49azAudW5wYWNrKG4sZSkpLG4uX2VsbGlwc29pZD1LLmNsb25lKG4uX2VsbGlwc29pZCksazAuY3JlYXRlR2VvbWV0cnkobil9dmFyIGU5LEYwPVgoKCk9PntNOCgpO2ZlKCk7VmUoKTtlOT0kdn0pO3ZhciBOOCxQaCxEMD1YKCgpPT57amUoKTtOOD17fTtOOC5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKG4sZSx0LG8sYSl7bGV0IHI9biouNSxpPS1yLGY9bytvLGQ9YT8yKmY6ZixjPW5ldyBGbG9hdDY0QXJyYXkoZCozKSx1LGw9MCxtPTAsaD1hP2YqMzowLGI9YT8oZitvKSozOm8qMztmb3IodT0wO3U8bzt1Kyspe2xldCBwPXUvbyprLlRXT19QSSx5PU1hdGguY29zKHApLFQ9TWF0aC5zaW4ocCksXz15KnQsdz1UKnQsRT15KmUsUj1UKmU7Y1ttK2hdPV8sY1ttK2grMV09dyxjW20raCsyXT1pLGNbbStiXT1FLGNbbStiKzFdPVIsY1ttK2IrMl09cixtKz0zLGEmJihjW2wrK109XyxjW2wrK109dyxjW2wrK109aSxjW2wrK109RSxjW2wrK109UixjW2wrK109cil9cmV0dXJuIGN9O1BoPU44fSk7ZnVuY3Rpb24gV3Iobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5sZW5ndGgsdD1uLnRvcFJhZGl1cyxvPW4uYm90dG9tUmFkaXVzLGE9bi52ZXJ0ZXhGb3JtYXQ/P2hlLkRFRkFVTFQscj1uLnNsaWNlcz8/MTI4O3RoaXMuX2xlbmd0aD1lLHRoaXMuX3RvcFJhZGl1cz10LHRoaXMuX2JvdHRvbVJhZGl1cz1vLHRoaXMuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShhKSx0aGlzLl9zbGljZXM9cix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9bi5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ3lsaW5kZXJHZW9tZXRyeSJ9dmFyIEIwLHQ5LG45LG85LGE5LEk4LHhzLFUwLHJkLGowPVgoKCk9PntFdCgpO3Z0KCk7TWUoKTtDdCgpO0QwKCk7c3QoKTtmZSgpO1h0KCk7WXQoKTtybigpO1VvKCk7WnQoKTtqZSgpO3RuKCk7Q28oKTtCMD1uZXcgWSx0OT1uZXcgcyxuOT1uZXcgcyxvOT1uZXcgcyxhOT1uZXcgcztXci5wYWNrZWRMZW5ndGg9aGUucGFja2VkTGVuZ3RoKzU7V3IucGFjaz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIHQ9dD8/MCxoZS5wYWNrKG4uX3ZlcnRleEZvcm1hdCxlLHQpLHQrPWhlLnBhY2tlZExlbmd0aCxlW3QrK109bi5fbGVuZ3RoLGVbdCsrXT1uLl90b3BSYWRpdXMsZVt0KytdPW4uX2JvdHRvbVJhZGl1cyxlW3QrK109bi5fc2xpY2VzLGVbdF09bi5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtJOD1uZXcgaGUseHM9e3ZlcnRleEZvcm1hdDpJOCxsZW5ndGg6dm9pZCAwLHRvcFJhZGl1czp2b2lkIDAsYm90dG9tUmFkaXVzOnZvaWQgMCxzbGljZXM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O1dyLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvPWhlLnVucGFjayhuLGUsSTgpO2UrPWhlLnBhY2tlZExlbmd0aDtsZXQgYT1uW2UrK10scj1uW2UrK10saT1uW2UrK10sZj1uW2UrK10sZD1uW2VdO3JldHVybiBnKHQpPyh0Ll92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUobyx0Ll92ZXJ0ZXhGb3JtYXQpLHQuX2xlbmd0aD1hLHQuX3RvcFJhZGl1cz1yLHQuX2JvdHRvbVJhZGl1cz1pLHQuX3NsaWNlcz1mLHQuX29mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsdCk6KHhzLmxlbmd0aD1hLHhzLnRvcFJhZGl1cz1yLHhzLmJvdHRvbVJhZGl1cz1pLHhzLnNsaWNlcz1mLHhzLm9mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsbmV3IFdyKHhzKSl9O1dyLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe2xldCBlPW4uX2xlbmd0aCx0PW4uX3RvcFJhZGl1cyxvPW4uX2JvdHRvbVJhZGl1cyxhPW4uX3ZlcnRleEZvcm1hdCxyPW4uX3NsaWNlcztpZihlPD0wfHx0PDB8fG88MHx8dD09PTAmJm89PT0wKXJldHVybjtsZXQgaT1yK3IsZj1yK2ksZD1pK2ksYz1QaC5jb21wdXRlUG9zaXRpb25zKGUsdCxvLHIsITApLHU9YS5zdD9uZXcgRmxvYXQzMkFycmF5KGQqMik6dm9pZCAwLGw9YS5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShkKjMpOnZvaWQgMCxtPWEudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGQqMyk6dm9pZCAwLGg9YS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShkKjMpOnZvaWQgMCxiLHA9YS5ub3JtYWx8fGEudGFuZ2VudHx8YS5iaXRhbmdlbnQ7aWYocCl7bGV0IEM9YS50YW5nZW50fHxhLmJpdGFuZ2VudCxJPTAsTT0wLFA9MCxGPU1hdGguYXRhbjIoby10LGUpLEE9dDk7QS56PU1hdGguc2luKEYpO2xldCB4PU1hdGguY29zKEYpLE49bzksdj1uOTtmb3IoYj0wO2I8cjtiKyspe2xldCBVPWIvciprLlRXT19QSSxMPXgqTWF0aC5jb3MoVSksRD14Kk1hdGguc2luKFUpO3AmJihBLng9TCxBLnk9RCxDJiYoTj1zLm5vcm1hbGl6ZShzLmNyb3NzKHMuVU5JVF9aLEEsTiksTikpLGEubm9ybWFsJiYobFtJKytdPUEueCxsW0krK109QS55LGxbSSsrXT1BLnosbFtJKytdPUEueCxsW0krK109QS55LGxbSSsrXT1BLnopLGEudGFuZ2VudCYmKG1bTSsrXT1OLngsbVtNKytdPU4ueSxtW00rK109Ti56LG1bTSsrXT1OLngsbVtNKytdPU4ueSxtW00rK109Ti56KSxhLmJpdGFuZ2VudCYmKHY9cy5ub3JtYWxpemUocy5jcm9zcyhBLE4sdiksdiksaFtQKytdPXYueCxoW1ArK109di55LGhbUCsrXT12LnosaFtQKytdPXYueCxoW1ArK109di55LGhbUCsrXT12LnopKX1mb3IoYj0wO2I8cjtiKyspYS5ub3JtYWwmJihsW0krK109MCxsW0krK109MCxsW0krK109LTEpLGEudGFuZ2VudCYmKG1bTSsrXT0xLG1bTSsrXT0wLG1bTSsrXT0wKSxhLmJpdGFuZ2VudCYmKGhbUCsrXT0wLGhbUCsrXT0tMSxoW1ArK109MCk7Zm9yKGI9MDtiPHI7YisrKWEubm9ybWFsJiYobFtJKytdPTAsbFtJKytdPTAsbFtJKytdPTEpLGEudGFuZ2VudCYmKG1bTSsrXT0xLG1bTSsrXT0wLG1bTSsrXT0wKSxhLmJpdGFuZ2VudCYmKGhbUCsrXT0wLGhbUCsrXT0xLGhbUCsrXT0wKX1sZXQgeT0xMipyLTEyLFQ9SWUuY3JlYXRlVHlwZWRBcnJheShkLHkpLF89MCx3PTA7Zm9yKGI9MDtiPHItMTtiKyspVFtfKytdPXcsVFtfKytdPXcrMixUW18rK109dyszLFRbXysrXT13LFRbXysrXT13KzMsVFtfKytdPXcrMSx3Kz0yO2ZvcihUW18rK109aS0yLFRbXysrXT0wLFRbXysrXT0xLFRbXysrXT1pLTIsVFtfKytdPTEsVFtfKytdPWktMSxiPTE7YjxyLTE7YisrKVRbXysrXT1pK2IrMSxUW18rK109aStiLFRbXysrXT1pO2ZvcihiPTE7YjxyLTE7YisrKVRbXysrXT1mLFRbXysrXT1mK2IsVFtfKytdPWYrYisxO2xldCBFPTA7aWYoYS5zdCl7bGV0IEM9TWF0aC5tYXgodCxvKTtmb3IoYj0wO2I8ZDtiKyspe2xldCBJPXMuZnJvbUFycmF5KGMsYiozLGE5KTt1W0UrK109KEkueCtDKS8oMipDKSx1W0UrK109KEkueStDKS8oMipDKX19bGV0IFI9bmV3IFFlO2EucG9zaXRpb24mJihSLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pKSxhLm5vcm1hbCYmKFIubm9ybWFsPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpsfSkpLGEudGFuZ2VudCYmKFIudGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxhLmJpdGFuZ2VudCYmKFIuYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpofSkpLGEuc3QmJihSLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczp1fSkpLEIwLng9ZSouNSxCMC55PU1hdGgubWF4KG8sdCk7bGV0IFM9bmV3IHBlKHMuWkVSTyxZLm1hZ25pdHVkZShCMCkpO2lmKGcobi5fb2Zmc2V0QXR0cmlidXRlKSl7ZT1jLmxlbmd0aDtsZXQgQz1uLl9vZmZzZXRBdHRyaWJ1dGU9PT1vdC5OT05FPzA6MSxJPW5ldyBVaW50OEFycmF5KGUvMykuZmlsbChDKTtSLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOkl9KX1yZXR1cm4gbmV3IFBlKHthdHRyaWJ1dGVzOlIsaW5kaWNlczpULHByaW1pdGl2ZVR5cGU6RmUuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOlMsb2Zmc2V0QXR0cmlidXRlOm4uX29mZnNldEF0dHJpYnV0ZX0pfTtXci5nZXRVbml0Q3lsaW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyhVMCl8fChVMD1Xci5jcmVhdGVHZW9tZXRyeShuZXcgV3Ioe3RvcFJhZGl1czoxLGJvdHRvbVJhZGl1czoxLGxlbmd0aDoxLHZlcnRleEZvcm1hdDpoZS5QT1NJVElPTl9PTkxZfSkpKSxVMH07cmQ9V3J9KTt2YXIgTDA9e307JGUoTDAse2RlZmF1bHQ6KCk9Pmk5fSk7ZnVuY3Rpb24gcjkobixlKXtyZXR1cm4gZyhlKSYmKG49cmQudW5wYWNrKG4sZSkpLHJkLmNyZWF0ZUdlb21ldHJ5KG4pfXZhciBpOSx6MD1YKCgpPT57ajAoKTtmZSgpO2k5PXI5fSk7ZnVuY3Rpb24gT3Mobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5sZW5ndGgsdD1uLnRvcFJhZGl1cyxvPW4uYm90dG9tUmFkaXVzLGE9bi5zbGljZXM/PzEyOCxyPU1hdGgubWF4KG4ubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPz8xNiwwKTt0aGlzLl9sZW5ndGg9ZSx0aGlzLl90b3BSYWRpdXM9dCx0aGlzLl9ib3R0b21SYWRpdXM9byx0aGlzLl9zbGljZXM9YSx0aGlzLl9udW1iZXJPZlZlcnRpY2FsTGluZXM9cix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9bi5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ3lsaW5kZXJPdXRsaW5lR2VvbWV0cnkifXZhciBHMCx3YyxWMCxQOD1YKCgpPT57RXQoKTt2dCgpO01lKCk7Q3QoKTtEMCgpO3N0KCk7ZmUoKTtYdCgpO1l0KCk7cm4oKTtVbygpO1p0KCk7dG4oKTtHMD1uZXcgWTtPcy5wYWNrZWRMZW5ndGg9NjtPcy5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gdD10Pz8wLGVbdCsrXT1uLl9sZW5ndGgsZVt0KytdPW4uX3RvcFJhZGl1cyxlW3QrK109bi5fYm90dG9tUmFkaXVzLGVbdCsrXT1uLl9zbGljZXMsZVt0KytdPW4uX251bWJlck9mVmVydGljYWxMaW5lcyxlW3RdPW4uX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07d2M9e2xlbmd0aDp2b2lkIDAsdG9wUmFkaXVzOnZvaWQgMCxib3R0b21SYWRpdXM6dm9pZCAwLHNsaWNlczp2b2lkIDAsbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtPcy51bnBhY2s9ZnVuY3Rpb24obixlLHQpe2U9ZT8/MDtsZXQgbz1uW2UrK10sYT1uW2UrK10scj1uW2UrK10saT1uW2UrK10sZj1uW2UrK10sZD1uW2VdO3JldHVybiBnKHQpPyh0Ll9sZW5ndGg9byx0Ll90b3BSYWRpdXM9YSx0Ll9ib3R0b21SYWRpdXM9cix0Ll9zbGljZXM9aSx0Ll9udW1iZXJPZlZlcnRpY2FsTGluZXM9Zix0Ll9vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLHQpOih3Yy5sZW5ndGg9byx3Yy50b3BSYWRpdXM9YSx3Yy5ib3R0b21SYWRpdXM9cix3Yy5zbGljZXM9aSx3Yy5udW1iZXJPZlZlcnRpY2FsTGluZXM9Zix3Yy5vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG5ldyBPcyh3YykpfTtPcy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihuKXtsZXQgZT1uLl9sZW5ndGgsdD1uLl90b3BSYWRpdXMsbz1uLl9ib3R0b21SYWRpdXMsYT1uLl9zbGljZXMscj1uLl9udW1iZXJPZlZlcnRpY2FsTGluZXM7aWYoZTw9MHx8dDwwfHxvPDB8fHQ9PT0wJiZvPT09MClyZXR1cm47bGV0IGk9YSoyLGY9UGguY29tcHV0ZVBvc2l0aW9ucyhlLHQsbyxhLCExKSxkPWEqMixjO2lmKHI+MCl7bGV0IHA9TWF0aC5taW4ocixhKTtjPU1hdGgucm91bmQoYS9wKSxkKz1wfWxldCB1PUllLmNyZWF0ZVR5cGVkQXJyYXkoaSxkKjIpLGw9MCxtO2ZvcihtPTA7bTxhLTE7bSsrKXVbbCsrXT1tLHVbbCsrXT1tKzEsdVtsKytdPW0rYSx1W2wrK109bSsxK2E7aWYodVtsKytdPWEtMSx1W2wrK109MCx1W2wrK109YSthLTEsdVtsKytdPWEscj4wKWZvcihtPTA7bTxhO20rPWMpdVtsKytdPW0sdVtsKytdPW0rYTtsZXQgaD1uZXcgUWU7aC5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmZ9KSxHMC54PWUqLjUsRzAueT1NYXRoLm1heChvLHQpO2xldCBiPW5ldyBwZShzLlpFUk8sWS5tYWduaXR1ZGUoRzApKTtpZihnKG4uX29mZnNldEF0dHJpYnV0ZSkpe2U9Zi5sZW5ndGg7bGV0IHA9bi5fb2Zmc2V0QXR0cmlidXRlPT09b3QuTk9ORT8wOjEseT1uZXcgVWludDhBcnJheShlLzMpLmZpbGwocCk7aC5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczp5fSl9cmV0dXJuIG5ldyBQZSh7YXR0cmlidXRlczpoLGluZGljZXM6dSxwcmltaXRpdmVUeXBlOkZlLkxJTkVTLGJvdW5kaW5nU3BoZXJlOmIsb2Zmc2V0QXR0cmlidXRlOm4uX29mZnNldEF0dHJpYnV0ZX0pfTtWMD1Pc30pO3ZhciBIMD17fTskZShIMCx7ZGVmYXVsdDooKT0+czl9KTtmdW5jdGlvbiBjOShuLGUpe3JldHVybiBnKGUpJiYobj1WMC51bnBhY2sobixlKSksVjAuY3JlYXRlR2VvbWV0cnkobil9dmFyIHM5LEswPVgoKCk9PntQOCgpO2ZlKCk7czk9Yzl9KTt2YXIgcTA9e307JGUocTAse2RlZmF1bHQ6KCk9PmQ5fSk7ZnVuY3Rpb24gZjkobixlKXtyZXR1cm4gZyhlKSYmKG49VmEudW5wYWNrKG4sZSkpLG4uX2NlbnRlcj1zLmNsb25lKG4uX2NlbnRlciksbi5fZWxsaXBzb2lkPUsuY2xvbmUobi5fZWxsaXBzb2lkKSxWYS5jcmVhdGVHZW9tZXRyeShuKX12YXIgZDksVzA9WCgoKT0+e01lKCk7ZmUoKTtXcCgpO1ZlKCk7ZDk9Zjl9KTt2YXIgWDA9e307JGUoWDAse2RlZmF1bHQ6KCk9Pmw5fSk7ZnVuY3Rpb24gdTkobixlKXtyZXR1cm4gZyhlKSYmKG49SGEudW5wYWNrKG4sZSkpLG4uX2NlbnRlcj1zLmNsb25lKG4uX2NlbnRlciksbi5fZWxsaXBzb2lkPUsuY2xvbmUobi5fZWxsaXBzb2lkKSxIYS5jcmVhdGVHZW9tZXRyeShuKX12YXIgbDksWTA9WCgoKT0+e01lKCk7ZmUoKTtacCgpO1ZlKCk7bDk9dTl9KTtmdW5jdGlvbiBYcihuKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXQgZT1uLnJhZGlpPz9fOSx0PW4uaW5uZXJSYWRpaT8/ZSxvPW4ubWluaW11bUNsb2NrPz8wLGE9bi5tYXhpbXVtQ2xvY2s/P2suVFdPX1BJLHI9bi5taW5pbXVtQ29uZT8/MCxpPW4ubWF4aW11bUNvbmU/P2suUEksZj1NYXRoLnJvdW5kKG4uc3RhY2tQYXJ0aXRpb25zPz82NCksZD1NYXRoLnJvdW5kKG4uc2xpY2VQYXJ0aXRpb25zPz82NCksYz1uLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVDt0aGlzLl9yYWRpaT1zLmNsb25lKGUpLHRoaXMuX2lubmVyUmFkaWk9cy5jbG9uZSh0KSx0aGlzLl9taW5pbXVtQ2xvY2s9byx0aGlzLl9tYXhpbXVtQ2xvY2s9YSx0aGlzLl9taW5pbXVtQ29uZT1yLHRoaXMuX21heGltdW1Db25lPWksdGhpcy5fc3RhY2tQYXJ0aXRpb25zPWYsdGhpcy5fc2xpY2VQYXJ0aXRpb25zPWQsdGhpcy5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKGMpLHRoaXMuX29mZnNldEF0dHJpYnV0ZT1uLm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNvaWRHZW9tZXRyeSJ9dmFyIGg5LG05LGI5LHA5LGc5LF85LGs4LHY4LEY4LEQ4LEI4LENpLEowLGlhLGtoPVgoKCk9PntFdCgpO3Z0KCk7TWUoKTtDdCgpO3N0KCk7ZmUoKTtWZSgpO1h0KCk7WXQoKTtybigpO1VvKCk7WnQoKTtqZSgpO3RuKCk7Q28oKTtoOT1uZXcgcyxtOT1uZXcgcyxiOT1uZXcgcyxwOT1uZXcgcyxnOT1uZXcgcyxfOT1uZXcgcygxLDEsMSksazg9TWF0aC5jb3Msdjg9TWF0aC5zaW47WHIucGFja2VkTGVuZ3RoPTIqcy5wYWNrZWRMZW5ndGgraGUucGFja2VkTGVuZ3RoKzc7WHIucGFjaz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIHQ9dD8/MCxzLnBhY2sobi5fcmFkaWksZSx0KSx0Kz1zLnBhY2tlZExlbmd0aCxzLnBhY2sobi5faW5uZXJSYWRpaSxlLHQpLHQrPXMucGFja2VkTGVuZ3RoLGhlLnBhY2sobi5fdmVydGV4Rm9ybWF0LGUsdCksdCs9aGUucGFja2VkTGVuZ3RoLGVbdCsrXT1uLl9taW5pbXVtQ2xvY2ssZVt0KytdPW4uX21heGltdW1DbG9jayxlW3QrK109bi5fbWluaW11bUNvbmUsZVt0KytdPW4uX21heGltdW1Db25lLGVbdCsrXT1uLl9zdGFja1BhcnRpdGlvbnMsZVt0KytdPW4uX3NsaWNlUGFydGl0aW9ucyxlW3RdPW4uX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07Rjg9bmV3IHMsRDg9bmV3IHMsQjg9bmV3IGhlLENpPXtyYWRpaTpGOCxpbm5lclJhZGlpOkQ4LHZlcnRleEZvcm1hdDpCOCxtaW5pbXVtQ2xvY2s6dm9pZCAwLG1heGltdW1DbG9jazp2b2lkIDAsbWluaW11bUNvbmU6dm9pZCAwLG1heGltdW1Db25lOnZvaWQgMCxzdGFja1BhcnRpdGlvbnM6dm9pZCAwLHNsaWNlUGFydGl0aW9uczp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07WHIudW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtlPWU/PzA7bGV0IG89cy51bnBhY2sobixlLEY4KTtlKz1zLnBhY2tlZExlbmd0aDtsZXQgYT1zLnVucGFjayhuLGUsRDgpO2UrPXMucGFja2VkTGVuZ3RoO2xldCByPWhlLnVucGFjayhuLGUsQjgpO2UrPWhlLnBhY2tlZExlbmd0aDtsZXQgaT1uW2UrK10sZj1uW2UrK10sZD1uW2UrK10sYz1uW2UrK10sdT1uW2UrK10sbD1uW2UrK10sbT1uW2VdO3JldHVybiBnKHQpPyh0Ll9yYWRpaT1zLmNsb25lKG8sdC5fcmFkaWkpLHQuX2lubmVyUmFkaWk9cy5jbG9uZShhLHQuX2lubmVyUmFkaWkpLHQuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShyLHQuX3ZlcnRleEZvcm1hdCksdC5fbWluaW11bUNsb2NrPWksdC5fbWF4aW11bUNsb2NrPWYsdC5fbWluaW11bUNvbmU9ZCx0Ll9tYXhpbXVtQ29uZT1jLHQuX3N0YWNrUGFydGl0aW9ucz11LHQuX3NsaWNlUGFydGl0aW9ucz1sLHQuX29mZnNldEF0dHJpYnV0ZT1tPT09LTE/dm9pZCAwOm0sdCk6KENpLm1pbmltdW1DbG9jaz1pLENpLm1heGltdW1DbG9jaz1mLENpLm1pbmltdW1Db25lPWQsQ2kubWF4aW11bUNvbmU9YyxDaS5zdGFja1BhcnRpdGlvbnM9dSxDaS5zbGljZVBhcnRpdGlvbnM9bCxDaS5vZmZzZXRBdHRyaWJ1dGU9bT09PS0xP3ZvaWQgMDptLG5ldyBYcihDaSkpfTtYci5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihuKXtsZXQgZT1uLl9yYWRpaTtpZihlLng8PTB8fGUueTw9MHx8ZS56PD0wKXJldHVybjtsZXQgdD1uLl9pbm5lclJhZGlpO2lmKHQueDw9MHx8dC55PD0wfHx0Lno8PTApcmV0dXJuO2xldCBvPW4uX21pbmltdW1DbG9jayxhPW4uX21heGltdW1DbG9jayxyPW4uX21pbmltdW1Db25lLGk9bi5fbWF4aW11bUNvbmUsZj1uLl92ZXJ0ZXhGb3JtYXQsZD1uLl9zbGljZVBhcnRpdGlvbnMrMSxjPW4uX3N0YWNrUGFydGl0aW9ucysxO2Q9TWF0aC5yb3VuZChkKk1hdGguYWJzKGEtbykvay5UV09fUEkpLGM9TWF0aC5yb3VuZChjKk1hdGguYWJzKGktcikvay5QSSksZDwyJiYoZD0yKSxjPDImJihjPTIpO2xldCB1LGwsbT0wLGg9W3JdLGI9W29dO2Zvcih1PTA7dTxjO3UrKyloLnB1c2gocit1KihpLXIpLyhjLTEpKTtmb3IoaC5wdXNoKGkpLGw9MDtsPGQ7bCsrKWIucHVzaChvK2wqKGEtbykvKGQtMSkpO2IucHVzaChhKTtsZXQgcD1oLmxlbmd0aCx5PWIubGVuZ3RoLFQ9MCxfPTEsdz10LnghPT1lLnh8fHQueSE9PWUueXx8dC56IT09ZS56LEU9ITEsUj0hMSxTPSExO3cmJihfPTIscj4wJiYoRT0hMCxUKz1kLTEpLGk8TWF0aC5QSSYmKFI9ITAsVCs9ZC0xKSwoYS1vKSVrLlRXT19QST8oUz0hMCxUKz0oYy0xKSoyKzEpOlQrPTEpO2xldCBDPXkqcCpfLEk9bmV3IEZsb2F0NjRBcnJheShDKjMpLE09bmV3IEFycmF5KEMpLmZpbGwoITEpLFA9bmV3IEFycmF5KEMpLmZpbGwoITEpLEY9ZCpjKl8sQT02KihGK1QrMS0oZCtjKSpfKSx4PUllLmNyZWF0ZVR5cGVkQXJyYXkoRixBKSxOPWYubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoQyozKTp2b2lkIDAsdj1mLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShDKjMpOnZvaWQgMCxVPWYuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoQyozKTp2b2lkIDAsTD1mLnN0P25ldyBGbG9hdDMyQXJyYXkoQyoyKTp2b2lkIDAsRD1uZXcgQXJyYXkocCksRz1uZXcgQXJyYXkocCk7Zm9yKHU9MDt1PHA7dSsrKURbdV09djgoaFt1XSksR1t1XT1rOChoW3VdKTtsZXQgVj1uZXcgQXJyYXkoeSksTz1uZXcgQXJyYXkoeSk7Zm9yKGw9MDtsPHk7bCsrKU9bbF09azgoYltsXSksVltsXT12OChiW2xdKTtmb3IodT0wO3U8cDt1KyspZm9yKGw9MDtsPHk7bCsrKUlbbSsrXT1lLngqRFt1XSpPW2xdLElbbSsrXT1lLnkqRFt1XSpWW2xdLElbbSsrXT1lLnoqR1t1XTtsZXQgSj1DLzI7aWYodylmb3IodT0wO3U8cDt1KyspZm9yKGw9MDtsPHk7bCsrKUlbbSsrXT10LngqRFt1XSpPW2xdLElbbSsrXT10LnkqRFt1XSpWW2xdLElbbSsrXT10LnoqR1t1XSxNW0pdPSEwLHU+MCYmdSE9PXAtMSYmbCE9PTAmJmwhPT15LTEmJihQW0pdPSEwKSxKKys7bT0wO2xldCByZSxzZTtmb3IodT0xO3U8cC0yO3UrKylmb3IocmU9dSp5LHNlPSh1KzEpKnksbD0xO2w8eS0yO2wrKyl4W20rK109c2UrbCx4W20rK109c2UrbCsxLHhbbSsrXT1yZStsKzEseFttKytdPXNlK2wseFttKytdPXJlK2wrMSx4W20rK109cmUrbDtpZih3KXtsZXQgWmU9cCp5O2Zvcih1PTE7dTxwLTI7dSsrKWZvcihyZT1aZSt1Knksc2U9WmUrKHUrMSkqeSxsPTE7bDx5LTI7bCsrKXhbbSsrXT1zZStsLHhbbSsrXT1yZStsLHhbbSsrXT1yZStsKzEseFttKytdPXNlK2wseFttKytdPXJlK2wrMSx4W20rK109c2UrbCsxfWxldCBvZSxjZTtpZih3KXtpZihFKWZvcihjZT1wKnksdT0xO3U8eS0yO3UrKyl4W20rK109dSx4W20rK109dSsxLHhbbSsrXT1jZSt1KzEseFttKytdPXUseFttKytdPWNlK3UrMSx4W20rK109Y2UrdTtpZihSKWZvcihvZT1wKnkteSxjZT1wKnkqXy15LHU9MTt1PHktMjt1KyspeFttKytdPW9lK3UrMSx4W20rK109b2UrdSx4W20rK109Y2UrdSx4W20rK109b2UrdSsxLHhbbSsrXT1jZSt1LHhbbSsrXT1jZSt1KzF9aWYoUyl7Zm9yKHU9MTt1PHAtMjt1KyspY2U9eSpwK3kqdSxvZT15KnUseFttKytdPWNlLHhbbSsrXT1vZSt5LHhbbSsrXT1vZSx4W20rK109Y2UseFttKytdPWNlK3kseFttKytdPW9lK3k7Zm9yKHU9MTt1PHAtMjt1KyspY2U9eSpwK3kqKHUrMSktMSxvZT15Kih1KzEpLTEseFttKytdPW9lK3kseFttKytdPWNlLHhbbSsrXT1vZSx4W20rK109b2UreSx4W20rK109Y2UreSx4W20rK109Y2V9bGV0IG1lPW5ldyBRZTtmLnBvc2l0aW9uJiYobWUucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpJfSkpO2xldCBkZT0wLHllPTAsbGU9MCxlZT0wLEVlPUMvMixDZSxXZT1LLmZyb21DYXJ0ZXNpYW4zKGUpLHplPUsuZnJvbUNhcnRlc2lhbjModCk7aWYoZi5zdHx8Zi5ub3JtYWx8fGYudGFuZ2VudHx8Zi5iaXRhbmdlbnQpe2Zvcih1PTA7dTxDO3UrKyl7Q2U9TVt1XT96ZTpXZTtsZXQgWmU9cy5mcm9tQXJyYXkoSSx1KjMsaDkpLEtlPUNlLmdlb2RldGljU3VyZmFjZU5vcm1hbChaZSxtOSk7aWYoUFt1XSYmcy5uZWdhdGUoS2UsS2UpLGYuc3Qpe2xldCBEZT1ZLm5lZ2F0ZShLZSxnOSk7TFtkZSsrXT1NYXRoLmF0YW4yKERlLnksRGUueCkvay5UV09fUEkrLjUsTFtkZSsrXT1NYXRoLmFzaW4oS2UueikvTWF0aC5QSSsuNX1pZihmLm5vcm1hbCYmKE5beWUrK109S2UueCxOW3llKytdPUtlLnksTlt5ZSsrXT1LZS56KSxmLnRhbmdlbnR8fGYuYml0YW5nZW50KXtsZXQgRGU9YjksQmU9MCxldDtpZihNW3VdJiYoQmU9RWUpLCFFJiZ1Pj1CZSYmdTxCZSt5KjI/ZXQ9cy5VTklUX1g6ZXQ9cy5VTklUX1oscy5jcm9zcyhldCxLZSxEZSkscy5ub3JtYWxpemUoRGUsRGUpLGYudGFuZ2VudCYmKHZbbGUrK109RGUueCx2W2xlKytdPURlLnksdltsZSsrXT1EZS56KSxmLmJpdGFuZ2VudCl7bGV0IHFlPXMuY3Jvc3MoS2UsRGUscDkpO3Mubm9ybWFsaXplKHFlLHFlKSxVW2VlKytdPXFlLngsVVtlZSsrXT1xZS55LFVbZWUrK109cWUuen19fWYuc3QmJihtZS5zdD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6TH0pKSxmLm5vcm1hbCYmKG1lLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Tn0pKSxmLnRhbmdlbnQmJihtZS50YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp2fSkpLGYuYml0YW5nZW50JiYobWUuYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpVfSkpfWlmKGcobi5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IFplPUkubGVuZ3RoLEtlPW4uX29mZnNldEF0dHJpYnV0ZT09PW90Lk5PTkU/MDoxLERlPW5ldyBVaW50OEFycmF5KFplLzMpLmZpbGwoS2UpO21lLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOkRlfSl9cmV0dXJuIG5ldyBQZSh7YXR0cmlidXRlczptZSxpbmRpY2VzOngscHJpbWl0aXZlVHlwZTpGZS5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6cGUuZnJvbUVsbGlwc29pZChXZSksb2Zmc2V0QXR0cmlidXRlOm4uX29mZnNldEF0dHJpYnV0ZX0pfTtYci5nZXRVbml0RWxsaXBzb2lkPWZ1bmN0aW9uKCl7cmV0dXJuIGcoSjApfHwoSjA9WHIuY3JlYXRlR2VvbWV0cnkobmV3IFhyKHtyYWRpaTpuZXcgcygxLDEsMSksdmVydGV4Rm9ybWF0OmhlLlBPU0lUSU9OX09OTFl9KSkpLEowfTtpYT1Ycn0pO3ZhciBaMD17fTskZShaMCx7ZGVmYXVsdDooKT0+QTl9KTtmdW5jdGlvbiB5OShuLGUpe3JldHVybiBnKGUpJiYobj1pYS51bnBhY2sobixlKSksaWEuY3JlYXRlR2VvbWV0cnkobil9dmFyIEE5LFEwPVgoKCk9PntmZSgpO2toKCk7QTk9eTl9KTtmdW5jdGlvbiBTcyhuKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXQgZT1uLnJhZGlpPz93OSx0PW4uaW5uZXJSYWRpaT8/ZSxvPW4ubWluaW11bUNsb2NrPz8wLGE9bi5tYXhpbXVtQ2xvY2s/P2suVFdPX1BJLHI9bi5taW5pbXVtQ29uZT8/MCxpPW4ubWF4aW11bUNvbmU/P2suUEksZj1NYXRoLnJvdW5kKG4uc3RhY2tQYXJ0aXRpb25zPz8xMCksZD1NYXRoLnJvdW5kKG4uc2xpY2VQYXJ0aXRpb25zPz84KSxjPU1hdGgucm91bmQobi5zdWJkaXZpc2lvbnM/PzEyOCk7dGhpcy5fcmFkaWk9cy5jbG9uZShlKSx0aGlzLl9pbm5lclJhZGlpPXMuY2xvbmUodCksdGhpcy5fbWluaW11bUNsb2NrPW8sdGhpcy5fbWF4aW11bUNsb2NrPWEsdGhpcy5fbWluaW11bUNvbmU9cix0aGlzLl9tYXhpbXVtQ29uZT1pLHRoaXMuX3N0YWNrUGFydGl0aW9ucz1mLHRoaXMuX3NsaWNlUGFydGl0aW9ucz1kLHRoaXMuX3N1YmRpdmlzaW9ucz1jLHRoaXMuX29mZnNldEF0dHJpYnV0ZT1uLm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNvaWRPdXRsaW5lR2VvbWV0cnkifXZhciB3OSx2aCxGaCxVOCxqOCxZcixZYSwkMD1YKCgpPT57RXQoKTtNZSgpO0N0KCk7c3QoKTtmZSgpO1ZlKCk7WHQoKTtZdCgpO3JuKCk7VW8oKTtadCgpO2plKCk7dG4oKTt3OT1uZXcgcygxLDEsMSksdmg9TWF0aC5jb3MsRmg9TWF0aC5zaW47U3MucGFja2VkTGVuZ3RoPTIqcy5wYWNrZWRMZW5ndGgrODtTcy5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gdD10Pz8wLHMucGFjayhuLl9yYWRpaSxlLHQpLHQrPXMucGFja2VkTGVuZ3RoLHMucGFjayhuLl9pbm5lclJhZGlpLGUsdCksdCs9cy5wYWNrZWRMZW5ndGgsZVt0KytdPW4uX21pbmltdW1DbG9jayxlW3QrK109bi5fbWF4aW11bUNsb2NrLGVbdCsrXT1uLl9taW5pbXVtQ29uZSxlW3QrK109bi5fbWF4aW11bUNvbmUsZVt0KytdPW4uX3N0YWNrUGFydGl0aW9ucyxlW3QrK109bi5fc2xpY2VQYXJ0aXRpb25zLGVbdCsrXT1uLl9zdWJkaXZpc2lvbnMsZVt0XT1uLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLGV9O1U4PW5ldyBzLGo4PW5ldyBzLFlyPXtyYWRpaTpVOCxpbm5lclJhZGlpOmo4LG1pbmltdW1DbG9jazp2b2lkIDAsbWF4aW11bUNsb2NrOnZvaWQgMCxtaW5pbXVtQ29uZTp2b2lkIDAsbWF4aW11bUNvbmU6dm9pZCAwLHN0YWNrUGFydGl0aW9uczp2b2lkIDAsc2xpY2VQYXJ0aXRpb25zOnZvaWQgMCxzdWJkaXZpc2lvbnM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O1NzLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvPXMudW5wYWNrKG4sZSxVOCk7ZSs9cy5wYWNrZWRMZW5ndGg7bGV0IGE9cy51bnBhY2sobixlLGo4KTtlKz1zLnBhY2tlZExlbmd0aDtsZXQgcj1uW2UrK10saT1uW2UrK10sZj1uW2UrK10sZD1uW2UrK10sYz1uW2UrK10sdT1uW2UrK10sbD1uW2UrK10sbT1uW2VdO3JldHVybiBnKHQpPyh0Ll9yYWRpaT1zLmNsb25lKG8sdC5fcmFkaWkpLHQuX2lubmVyUmFkaWk9cy5jbG9uZShhLHQuX2lubmVyUmFkaWkpLHQuX21pbmltdW1DbG9jaz1yLHQuX21heGltdW1DbG9jaz1pLHQuX21pbmltdW1Db25lPWYsdC5fbWF4aW11bUNvbmU9ZCx0Ll9zdGFja1BhcnRpdGlvbnM9Yyx0Ll9zbGljZVBhcnRpdGlvbnM9dSx0Ll9zdWJkaXZpc2lvbnM9bCx0Ll9vZmZzZXRBdHRyaWJ1dGU9bT09PS0xP3ZvaWQgMDptLHQpOihZci5taW5pbXVtQ2xvY2s9cixZci5tYXhpbXVtQ2xvY2s9aSxZci5taW5pbXVtQ29uZT1mLFlyLm1heGltdW1Db25lPWQsWXIuc3RhY2tQYXJ0aXRpb25zPWMsWXIuc2xpY2VQYXJ0aXRpb25zPXUsWXIuc3ViZGl2aXNpb25zPWwsWXIub2Zmc2V0QXR0cmlidXRlPW09PT0tMT92b2lkIDA6bSxuZXcgU3MoWXIpKX07U3MuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7bGV0IGU9bi5fcmFkaWk7aWYoZS54PD0wfHxlLnk8PTB8fGUuejw9MClyZXR1cm47bGV0IHQ9bi5faW5uZXJSYWRpaTtpZih0Lng8PTB8fHQueTw9MHx8dC56PD0wKXJldHVybjtsZXQgbz1uLl9taW5pbXVtQ2xvY2ssYT1uLl9tYXhpbXVtQ2xvY2sscj1uLl9taW5pbXVtQ29uZSxpPW4uX21heGltdW1Db25lLGY9bi5fc3ViZGl2aXNpb25zLGQ9Sy5mcm9tQ2FydGVzaWFuMyhlKSxjPW4uX3NsaWNlUGFydGl0aW9ucysxLHU9bi5fc3RhY2tQYXJ0aXRpb25zKzE7Yz1NYXRoLnJvdW5kKGMqTWF0aC5hYnMoYS1vKS9rLlRXT19QSSksdT1NYXRoLnJvdW5kKHUqTWF0aC5hYnMoaS1yKS9rLlBJKSxjPDImJihjPTIpLHU8MiYmKHU9Mik7bGV0IGw9MCxtPTEsaD10LnghPT1lLnh8fHQueSE9PWUueXx8dC56IT09ZS56LGI9ITEscD0hMTtoJiYobT0yLHI+MCYmKGI9ITAsbCs9YyksaTxNYXRoLlBJJiYocD0hMCxsKz1jKSk7bGV0IHk9ZiptKih1K2MpLFQ9bmV3IEZsb2F0NjRBcnJheSh5KjMpLF89MiooeStsLShjK3UpKm0pLHc9SWUuY3JlYXRlVHlwZWRBcnJheSh5LF8pLEUsUixTLEMsST0wLE09bmV3IEFycmF5KHUpLFA9bmV3IEFycmF5KHUpO2ZvcihFPTA7RTx1O0UrKylDPXIrRSooaS1yKS8odS0xKSxNW0VdPUZoKEMpLFBbRV09dmgoQyk7bGV0IEY9bmV3IEFycmF5KGYpLEE9bmV3IEFycmF5KGYpO2ZvcihFPTA7RTxmO0UrKylTPW8rRSooYS1vKS8oZi0xKSxGW0VdPUZoKFMpLEFbRV09dmgoUyk7Zm9yKEU9MDtFPHU7RSsrKWZvcihSPTA7UjxmO1IrKylUW0krK109ZS54Kk1bRV0qQVtSXSxUW0krK109ZS55Kk1bRV0qRltSXSxUW0krK109ZS56KlBbRV07aWYoaClmb3IoRT0wO0U8dTtFKyspZm9yKFI9MDtSPGY7UisrKVRbSSsrXT10LngqTVtFXSpBW1JdLFRbSSsrXT10LnkqTVtFXSpGW1JdLFRbSSsrXT10LnoqUFtFXTtmb3IoTS5sZW5ndGg9ZixQLmxlbmd0aD1mLEU9MDtFPGY7RSsrKUM9citFKihpLXIpLyhmLTEpLE1bRV09RmgoQyksUFtFXT12aChDKTtmb3IoRi5sZW5ndGg9YyxBLmxlbmd0aD1jLEU9MDtFPGM7RSsrKVM9bytFKihhLW8pLyhjLTEpLEZbRV09RmgoUyksQVtFXT12aChTKTtmb3IoRT0wO0U8ZjtFKyspZm9yKFI9MDtSPGM7UisrKVRbSSsrXT1lLngqTVtFXSpBW1JdLFRbSSsrXT1lLnkqTVtFXSpGW1JdLFRbSSsrXT1lLnoqUFtFXTtpZihoKWZvcihFPTA7RTxmO0UrKylmb3IoUj0wO1I8YztSKyspVFtJKytdPXQueCpNW0VdKkFbUl0sVFtJKytdPXQueSpNW0VdKkZbUl0sVFtJKytdPXQueipQW0VdO2ZvcihJPTAsRT0wO0U8dSptO0UrKyl7bGV0IHY9RSpmO2ZvcihSPTA7UjxmLTE7UisrKXdbSSsrXT12K1Isd1tJKytdPXYrUisxfWxldCB4PXUqZiptO2ZvcihFPTA7RTxjO0UrKylmb3IoUj0wO1I8Zi0xO1IrKyl3W0krK109eCtFK1IqYyx3W0krK109eCtFKyhSKzEpKmM7aWYoaClmb3IoeD11KmYqbStjKmYsRT0wO0U8YztFKyspZm9yKFI9MDtSPGYtMTtSKyspd1tJKytdPXgrRStSKmMsd1tJKytdPXgrRSsoUisxKSpjO2lmKGgpe2xldCB2PXUqZiptLFU9ditmKmM7aWYoYilmb3IoRT0wO0U8YztFKyspd1tJKytdPXYrRSx3W0krK109VStFO2lmKHApZm9yKHYrPWYqYy1jLFUrPWYqYy1jLEU9MDtFPGM7RSsrKXdbSSsrXT12K0Usd1tJKytdPVUrRX1sZXQgTj1uZXcgUWUoe3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6VH0pfSk7aWYoZyhuLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdj1ULmxlbmd0aCxVPW4uX29mZnNldEF0dHJpYnV0ZT09PW90Lk5PTkU/MDoxLEw9bmV3IFVpbnQ4QXJyYXkodi8zKS5maWxsKFUpO04uYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6TH0pfXJldHVybiBuZXcgUGUoe2F0dHJpYnV0ZXM6TixpbmRpY2VzOncscHJpbWl0aXZlVHlwZTpGZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpwZS5mcm9tRWxsaXBzb2lkKGQpLG9mZnNldEF0dHJpYnV0ZTpuLl9vZmZzZXRBdHRyaWJ1dGV9KX07WWE9U3N9KTt2YXIgZWc9e307JGUoZWcse2RlZmF1bHQ6KCk9PkU5fSk7ZnVuY3Rpb24gVDkobixlKXtyZXR1cm4gZyhuLmJ1ZmZlcixlKSYmKG49WWEudW5wYWNrKG4sZSkpLFlhLmNyZWF0ZUdlb21ldHJ5KG4pfXZhciBFOSx0Zz1YKCgpPT57ZmUoKTskMCgpO0U5PVQ5fSk7ZnVuY3Rpb24gU2Eobil7dGhpcy5wbGFuZXM9bj8/W119dmFyIGlkLE1pLFI5LEw4LERoLG5nPVgoKCk9PntNZSgpO2JhKCk7ZmUoKTtaaSgpO3BpKCk7aWQ9W25ldyBzLG5ldyBzLG5ldyBzXTtzLmNsb25lKHMuVU5JVF9YLGlkWzBdKTtzLmNsb25lKHMuVU5JVF9ZLGlkWzFdKTtzLmNsb25lKHMuVU5JVF9aLGlkWzJdKTtNaT1uZXcgcyxSOT1uZXcgcyxMOD1uZXcgbm4obmV3IHMoMSwwLDApLDApO1NhLmZyb21Cb3VuZGluZ1NwaGVyZT1mdW5jdGlvbihuLGUpe2coZSl8fChlPW5ldyBTYSk7bGV0IHQ9aWQubGVuZ3RoLG89ZS5wbGFuZXM7by5sZW5ndGg9Mip0O2xldCBhPW4uY2VudGVyLHI9bi5yYWRpdXMsaT0wO2ZvcihsZXQgZj0wO2Y8dDsrK2Ype2xldCBkPWlkW2ZdLGM9b1tpXSx1PW9baSsxXTtnKGMpfHwoYz1vW2ldPW5ldyBydCksZyh1KXx8KHU9b1tpKzFdPW5ldyBydCkscy5tdWx0aXBseUJ5U2NhbGFyKGQsLXIsTWkpLHMuYWRkKGEsTWksTWkpLGMueD1kLngsYy55PWQueSxjLno9ZC56LGMudz0tcy5kb3QoZCxNaSkscy5tdWx0aXBseUJ5U2NhbGFyKGQscixNaSkscy5hZGQoYSxNaSxNaSksdS54PS1kLngsdS55PS1kLnksdS56PS1kLnosdS53PS1zLmRvdChzLm5lZ2F0ZShkLFI5KSxNaSksaSs9Mn1yZXR1cm4gZX07U2EucHJvdG90eXBlLmNvbXB1dGVWaXNpYmlsaXR5PWZ1bmN0aW9uKG4pe2xldCBlPXRoaXMucGxhbmVzLHQ9ITE7Zm9yKGxldCBvPTAsYT1lLmxlbmd0aDtvPGE7KytvKXtsZXQgcj1uLmludGVyc2VjdFBsYW5lKG5uLmZyb21DYXJ0ZXNpYW40KGVbb10sTDgpKTtpZihyPT09VG4uT1VUU0lERSlyZXR1cm4gVG4uT1VUU0lERTtyPT09VG4uSU5URVJTRUNUSU5HJiYodD0hMCl9cmV0dXJuIHQ/VG4uSU5URVJTRUNUSU5HOlRuLklOU0lERX07U2EucHJvdG90eXBlLmNvbXB1dGVWaXNpYmlsaXR5V2l0aFBsYW5lTWFzaz1mdW5jdGlvbihuLGUpe2lmKGU9PT1TYS5NQVNLX09VVFNJREV8fGU9PT1TYS5NQVNLX0lOU0lERSlyZXR1cm4gZTtsZXQgdD1TYS5NQVNLX0lOU0lERSxvPXRoaXMucGxhbmVzO2ZvcihsZXQgYT0wLHI9by5sZW5ndGg7YTxyOysrYSl7bGV0IGk9YTwzMT8xPDxhOjA7aWYoYTwzMSYmKGUmaSk9PT0wKWNvbnRpbnVlO2xldCBmPW4uaW50ZXJzZWN0UGxhbmUobm4uZnJvbUNhcnRlc2lhbjQob1thXSxMOCkpO2lmKGY9PT1Ubi5PVVRTSURFKXJldHVybiBTYS5NQVNLX09VVFNJREU7Zj09PVRuLklOVEVSU0VDVElORyYmKHR8PWkpfXJldHVybiB0fTtTYS5NQVNLX09VVFNJREU9NDI5NDk2NzI5NTtTYS5NQVNLX0lOU0lERT0wO1NhLk1BU0tfSU5ERVRFUk1JTkFURT0yMTQ3NDgzNjQ3O0RoPVNhfSk7ZnVuY3Rpb24gbXIobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1QsdGhpcy5sZWZ0PW4ubGVmdCx0aGlzLl9sZWZ0PXZvaWQgMCx0aGlzLnJpZ2h0PW4ucmlnaHQsdGhpcy5fcmlnaHQ9dm9pZCAwLHRoaXMudG9wPW4udG9wLHRoaXMuX3RvcD12b2lkIDAsdGhpcy5ib3R0b209bi5ib3R0b20sdGhpcy5fYm90dG9tPXZvaWQgMCx0aGlzLm5lYXI9bi5uZWFyPz8xLHRoaXMuX25lYXI9dGhpcy5uZWFyLHRoaXMuZmFyPW4uZmFyPz81ZTgsdGhpcy5fZmFyPXRoaXMuZmFyLHRoaXMuX2N1bGxpbmdWb2x1bWU9bmV3IERoLHRoaXMuX29ydGhvZ3JhcGhpY01hdHJpeD1uZXcgUX1mdW5jdGlvbiB6OChuKXsobi50b3AhPT1uLl90b3B8fG4uYm90dG9tIT09bi5fYm90dG9tfHxuLmxlZnQhPT1uLl9sZWZ0fHxuLnJpZ2h0IT09bi5fcmlnaHR8fG4ubmVhciE9PW4uX25lYXJ8fG4uZmFyIT09bi5fZmFyKSYmKG4uX2xlZnQ9bi5sZWZ0LG4uX3JpZ2h0PW4ucmlnaHQsbi5fdG9wPW4udG9wLG4uX2JvdHRvbT1uLmJvdHRvbSxuLl9uZWFyPW4ubmVhcixuLl9mYXI9bi5mYXIsbi5fb3J0aG9ncmFwaGljTWF0cml4PVEuY29tcHV0ZU9ydGhvZ3JhcGhpY09mZkNlbnRlcihuLmxlZnQsbi5yaWdodCxuLmJvdHRvbSxuLnRvcCxuLm5lYXIsbi5mYXIsbi5fb3J0aG9ncmFwaGljTWF0cml4KSl9dmFyIHg5LE85LFM5LG9nLEc4LFY4PVgoKCk9PntNZSgpO2JhKCk7bmcoKTtzdCgpO2ZlKCk7amUoKTt1bigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG1yLnByb3RvdHlwZSx7cHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHo4KHRoaXMpLHRoaXMuX29ydGhvZ3JhcGhpY01hdHJpeH19fSk7eDk9bmV3IHMsTzk9bmV3IHMsUzk9bmV3IHMsb2c9bmV3IHM7bXIucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz10aGlzLl9jdWxsaW5nVm9sdW1lLnBsYW5lcyxhPXRoaXMudG9wLHI9dGhpcy5ib3R0b20saT10aGlzLnJpZ2h0LGY9dGhpcy5sZWZ0LGQ9dGhpcy5uZWFyLGM9dGhpcy5mYXIsdT1zLmNyb3NzKGUsdCx4OSk7cy5ub3JtYWxpemUodSx1KTtsZXQgbD1POTtzLm11bHRpcGx5QnlTY2FsYXIoZSxkLGwpLHMuYWRkKG4sbCxsKTtsZXQgbT1TOTtzLm11bHRpcGx5QnlTY2FsYXIodSxmLG0pLHMuYWRkKGwsbSxtKTtsZXQgaD1vWzBdO3JldHVybiBnKGgpfHwoaD1vWzBdPW5ldyBydCksaC54PXUueCxoLnk9dS55LGguej11LnosaC53PS1zLmRvdCh1LG0pLHMubXVsdGlwbHlCeVNjYWxhcih1LGksbSkscy5hZGQobCxtLG0pLGg9b1sxXSxnKGgpfHwoaD1vWzFdPW5ldyBydCksaC54PS11LngsaC55PS11LnksaC56PS11LnosaC53PS1zLmRvdChzLm5lZ2F0ZSh1LG9nKSxtKSxzLm11bHRpcGx5QnlTY2FsYXIodCxyLG0pLHMuYWRkKGwsbSxtKSxoPW9bMl0sZyhoKXx8KGg9b1syXT1uZXcgcnQpLGgueD10LngsaC55PXQueSxoLno9dC56LGgudz0tcy5kb3QodCxtKSxzLm11bHRpcGx5QnlTY2FsYXIodCxhLG0pLHMuYWRkKGwsbSxtKSxoPW9bM10sZyhoKXx8KGg9b1szXT1uZXcgcnQpLGgueD0tdC54LGgueT0tdC55LGguej0tdC56LGgudz0tcy5kb3Qocy5uZWdhdGUodCxvZyksbSksaD1vWzRdLGcoaCl8fChoPW9bNF09bmV3IHJ0KSxoLng9ZS54LGgueT1lLnksaC56PWUueixoLnc9LXMuZG90KGUsbCkscy5tdWx0aXBseUJ5U2NhbGFyKGUsYyxtKSxzLmFkZChuLG0sbSksaD1vWzVdLGcoaCl8fChoPW9bNV09bmV3IHJ0KSxoLng9LWUueCxoLnk9LWUueSxoLno9LWUueixoLnc9LXMuZG90KHMubmVnYXRlKGUsb2cpLG0pLHRoaXMuX2N1bGxpbmdWb2x1bWV9O21yLnByb3RvdHlwZS5nZXRQaXhlbERpbWVuc2lvbnM9ZnVuY3Rpb24obixlLHQsbyxhKXt6OCh0aGlzKTtsZXQgcj10aGlzLnJpZ2h0LXRoaXMubGVmdCxpPXRoaXMudG9wLXRoaXMuYm90dG9tLGY9bypyL24sZD1vKmkvZTtyZXR1cm4gYS54PWYsYS55PWQsYX07bXIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKG4pe3JldHVybiBnKG4pfHwobj1uZXcgbXIpLG4ubGVmdD10aGlzLmxlZnQsbi5yaWdodD10aGlzLnJpZ2h0LG4udG9wPXRoaXMudG9wLG4uYm90dG9tPXRoaXMuYm90dG9tLG4ubmVhcj10aGlzLm5lYXIsbi5mYXI9dGhpcy5mYXIsbi5fbGVmdD12b2lkIDAsbi5fcmlnaHQ9dm9pZCAwLG4uX3RvcD12b2lkIDAsbi5fYm90dG9tPXZvaWQgMCxuLl9uZWFyPXZvaWQgMCxuLl9mYXI9dm9pZCAwLG59O21yLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24obil7cmV0dXJuIGcobikmJm4gaW5zdGFuY2VvZiBtciYmdGhpcy5yaWdodD09PW4ucmlnaHQmJnRoaXMubGVmdD09PW4ubGVmdCYmdGhpcy50b3A9PT1uLnRvcCYmdGhpcy5ib3R0b209PT1uLmJvdHRvbSYmdGhpcy5uZWFyPT09bi5uZWFyJiZ0aGlzLmZhcj09PW4uZmFyfTttci5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIG49PT10aGlzfHxnKG4pJiZuIGluc3RhbmNlb2YgbXImJmsuZXF1YWxzRXBzaWxvbih0aGlzLnJpZ2h0LG4ucmlnaHQsZSx0KSYmay5lcXVhbHNFcHNpbG9uKHRoaXMubGVmdCxuLmxlZnQsZSx0KSYmay5lcXVhbHNFcHNpbG9uKHRoaXMudG9wLG4udG9wLGUsdCkmJmsuZXF1YWxzRXBzaWxvbih0aGlzLmJvdHRvbSxuLmJvdHRvbSxlLHQpJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5uZWFyLG4ubmVhcixlLHQpJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5mYXIsbi5mYXIsZSx0KX07Rzg9bXJ9KTtmdW5jdGlvbiBlYShuKXtuPW4/P09lLkVNUFRZX09CSkVDVCx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtPW5ldyBHOCx0aGlzLndpZHRoPW4ud2lkdGgsdGhpcy5fd2lkdGg9dm9pZCAwLHRoaXMuYXNwZWN0UmF0aW89bi5hc3BlY3RSYXRpbyx0aGlzLl9hc3BlY3RSYXRpbz12b2lkIDAsdGhpcy5uZWFyPW4ubmVhcj8/MSx0aGlzLl9uZWFyPXRoaXMubmVhcix0aGlzLmZhcj1uLmZhcj8/NWU4LHRoaXMuX2Zhcj10aGlzLmZhcn1mdW5jdGlvbiBOaShuKXtsZXQgZT1uLl9vZmZDZW50ZXJGcnVzdHVtO2lmKG4ud2lkdGghPT1uLl93aWR0aHx8bi5hc3BlY3RSYXRpbyE9PW4uX2FzcGVjdFJhdGlvfHxuLm5lYXIhPT1uLl9uZWFyfHxuLmZhciE9PW4uX2Zhcil7bi5fYXNwZWN0UmF0aW89bi5hc3BlY3RSYXRpbyxuLl93aWR0aD1uLndpZHRoLG4uX25lYXI9bi5uZWFyLG4uX2Zhcj1uLmZhcjtsZXQgdD0xL24uYXNwZWN0UmF0aW87ZS5yaWdodD1uLndpZHRoKi41LGUubGVmdD0tZS5yaWdodCxlLnRvcD10KmUucmlnaHQsZS5ib3R0b209LWUudG9wLGUubmVhcj1uLm5lYXIsZS5mYXI9bi5mYXJ9fXZhciBObyxhZz1YKCgpPT57c3QoKTtmZSgpO2plKCk7VjgoKTtlYS5wYWNrZWRMZW5ndGg9NDtlYS5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gdD10Pz8wLGVbdCsrXT1uLndpZHRoLGVbdCsrXT1uLmFzcGVjdFJhdGlvLGVbdCsrXT1uLm5lYXIsZVt0XT1uLmZhcixlfTtlYS51bnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiBlPWU/PzAsZyh0KXx8KHQ9bmV3IGVhKSx0LndpZHRoPW5bZSsrXSx0LmFzcGVjdFJhdGlvPW5bZSsrXSx0Lm5lYXI9bltlKytdLHQuZmFyPW5bZV0sdH07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZWEucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTmkodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5wcm9qZWN0aW9uTWF0cml4fX0sb2ZmQ2VudGVyRnJ1c3R1bTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5pKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW19fX0pO2VhLnByb3RvdHlwZS5jb21wdXRlQ3VsbGluZ1ZvbHVtZT1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIE5pKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY29tcHV0ZUN1bGxpbmdWb2x1bWUobixlLHQpfTtlYS5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKG4sZSx0LG8sYSl7cmV0dXJuIE5pKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uZ2V0UGl4ZWxEaW1lbnNpb25zKG4sZSx0LG8sYSl9O2VhLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihuKXtyZXR1cm4gZyhuKXx8KG49bmV3IGVhKSxuLmFzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sbi53aWR0aD10aGlzLndpZHRoLG4ubmVhcj10aGlzLm5lYXIsbi5mYXI9dGhpcy5mYXIsbi5fYXNwZWN0UmF0aW89dm9pZCAwLG4uX3dpZHRoPXZvaWQgMCxuLl9uZWFyPXZvaWQgMCxuLl9mYXI9dm9pZCAwLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY2xvbmUobi5fb2ZmQ2VudGVyRnJ1c3R1bSksbn07ZWEucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihuKXtyZXR1cm4hZyhuKXx8IShuIGluc3RhbmNlb2YgZWEpPyExOihOaSh0aGlzKSxOaShuKSx0aGlzLndpZHRoPT09bi53aWR0aCYmdGhpcy5hc3BlY3RSYXRpbz09PW4uYXNwZWN0UmF0aW8mJnRoaXMuX29mZkNlbnRlckZydXN0dW0uZXF1YWxzKG4uX29mZkNlbnRlckZydXN0dW0pKX07ZWEucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24obixlLHQpe3JldHVybiFnKG4pfHwhKG4gaW5zdGFuY2VvZiBlYSk/ITE6KE5pKHRoaXMpLE5pKG4pLGsuZXF1YWxzRXBzaWxvbih0aGlzLndpZHRoLG4ud2lkdGgsZSx0KSYmay5lcXVhbHNFcHNpbG9uKHRoaXMuYXNwZWN0UmF0aW8sbi5hc3BlY3RSYXRpbyxlLHQpJiZ0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmVxdWFsc0Vwc2lsb24obi5fb2ZmQ2VudGVyRnJ1c3R1bSxlLHQpKX07Tm89ZWF9KTtmdW5jdGlvbiBicihuKXtuPW4/P09lLkVNUFRZX09CSkVDVCx0aGlzLmxlZnQ9bi5sZWZ0LHRoaXMuX2xlZnQ9dm9pZCAwLHRoaXMucmlnaHQ9bi5yaWdodCx0aGlzLl9yaWdodD12b2lkIDAsdGhpcy50b3A9bi50b3AsdGhpcy5fdG9wPXZvaWQgMCx0aGlzLmJvdHRvbT1uLmJvdHRvbSx0aGlzLl9ib3R0b209dm9pZCAwLHRoaXMubmVhcj1uLm5lYXI/PzEsdGhpcy5fbmVhcj10aGlzLm5lYXIsdGhpcy5mYXI9bi5mYXI/PzVlOCx0aGlzLl9mYXI9dGhpcy5mYXIsdGhpcy5fY3VsbGluZ1ZvbHVtZT1uZXcgRGgsdGhpcy5fcGVyc3BlY3RpdmVNYXRyaXg9bmV3IFEsdGhpcy5faW5maW5pdGVQZXJzcGVjdGl2ZT1uZXcgUX1mdW5jdGlvbiByZyhuKXtsZXR7dG9wOmUsYm90dG9tOnQscmlnaHQ6byxsZWZ0OmEsbmVhcjpyLGZhcjppfT1uOyhlIT09bi5fdG9wfHx0IT09bi5fYm90dG9tfHxhIT09bi5fbGVmdHx8byE9PW4uX3JpZ2h0fHxyIT09bi5fbmVhcnx8aSE9PW4uX2ZhcikmJihuLl9sZWZ0PWEsbi5fcmlnaHQ9byxuLl90b3A9ZSxuLl9ib3R0b209dCxuLl9uZWFyPXIsbi5fZmFyPWksbi5fcGVyc3BlY3RpdmVNYXRyaXg9US5jb21wdXRlUGVyc3BlY3RpdmVPZmZDZW50ZXIoYSxvLHQsZSxyLGksbi5fcGVyc3BlY3RpdmVNYXRyaXgpLG4uX2luZmluaXRlUGVyc3BlY3RpdmU9US5jb21wdXRlSW5maW5pdGVQZXJzcGVjdGl2ZU9mZkNlbnRlcihhLG8sdCxlLHIsbi5faW5maW5pdGVQZXJzcGVjdGl2ZSkpfXZhciBDOSxNOSxOOSxJOSxIOCxLOD1YKCgpPT57TWUoKTtiYSgpO25nKCk7c3QoKTtmZSgpO2plKCk7dW4oKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhici5wcm90b3R5cGUse3Byb2plY3Rpb25NYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiByZyh0aGlzKSx0aGlzLl9wZXJzcGVjdGl2ZU1hdHJpeH19LGluZmluaXRlUHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJnKHRoaXMpLHRoaXMuX2luZmluaXRlUGVyc3BlY3RpdmV9fX0pO0M5PW5ldyBzLE05PW5ldyBzLE45PW5ldyBzLEk5PW5ldyBzO2JyLnByb3RvdHlwZS5jb21wdXRlQ3VsbGluZ1ZvbHVtZT1mdW5jdGlvbihuLGUsdCl7bGV0IG89dGhpcy5fY3VsbGluZ1ZvbHVtZS5wbGFuZXMsYT10aGlzLnRvcCxyPXRoaXMuYm90dG9tLGk9dGhpcy5yaWdodCxmPXRoaXMubGVmdCxkPXRoaXMubmVhcixjPXRoaXMuZmFyLHU9cy5jcm9zcyhlLHQsQzkpLGw9TTk7cy5tdWx0aXBseUJ5U2NhbGFyKGUsZCxsKSxzLmFkZChuLGwsbCk7bGV0IG09Tjk7cy5tdWx0aXBseUJ5U2NhbGFyKGUsYyxtKSxzLmFkZChuLG0sbSk7bGV0IGg9STk7cy5tdWx0aXBseUJ5U2NhbGFyKHUsZixoKSxzLmFkZChsLGgsaCkscy5zdWJ0cmFjdChoLG4saCkscy5ub3JtYWxpemUoaCxoKSxzLmNyb3NzKGgsdCxoKSxzLm5vcm1hbGl6ZShoLGgpO2xldCBiPW9bMF07cmV0dXJuIGcoYil8fChiPW9bMF09bmV3IHJ0KSxiLng9aC54LGIueT1oLnksYi56PWgueixiLnc9LXMuZG90KGgsbikscy5tdWx0aXBseUJ5U2NhbGFyKHUsaSxoKSxzLmFkZChsLGgsaCkscy5zdWJ0cmFjdChoLG4saCkscy5jcm9zcyh0LGgsaCkscy5ub3JtYWxpemUoaCxoKSxiPW9bMV0sZyhiKXx8KGI9b1sxXT1uZXcgcnQpLGIueD1oLngsYi55PWgueSxiLno9aC56LGIudz0tcy5kb3QoaCxuKSxzLm11bHRpcGx5QnlTY2FsYXIodCxyLGgpLHMuYWRkKGwsaCxoKSxzLnN1YnRyYWN0KGgsbixoKSxzLmNyb3NzKHUsaCxoKSxzLm5vcm1hbGl6ZShoLGgpLGI9b1syXSxnKGIpfHwoYj1vWzJdPW5ldyBydCksYi54PWgueCxiLnk9aC55LGIuej1oLnosYi53PS1zLmRvdChoLG4pLHMubXVsdGlwbHlCeVNjYWxhcih0LGEsaCkscy5hZGQobCxoLGgpLHMuc3VidHJhY3QoaCxuLGgpLHMuY3Jvc3MoaCx1LGgpLHMubm9ybWFsaXplKGgsaCksYj1vWzNdLGcoYil8fChiPW9bM109bmV3IHJ0KSxiLng9aC54LGIueT1oLnksYi56PWgueixiLnc9LXMuZG90KGgsbiksYj1vWzRdLGcoYil8fChiPW9bNF09bmV3IHJ0KSxiLng9ZS54LGIueT1lLnksYi56PWUueixiLnc9LXMuZG90KGUsbCkscy5uZWdhdGUoZSxoKSxiPW9bNV0sZyhiKXx8KGI9b1s1XT1uZXcgcnQpLGIueD1oLngsYi55PWgueSxiLno9aC56LGIudz0tcy5kb3QoaCxtKSx0aGlzLl9jdWxsaW5nVm9sdW1lfTtici5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKG4sZSx0LG8sYSl7cmcodGhpcyk7bGV0IHI9MS90aGlzLm5lYXIsaT10aGlzLnRvcCpyLGY9MipvKnQqaS9lO2k9dGhpcy5yaWdodCpyO2xldCBkPTIqbyp0KmkvbjtyZXR1cm4gYS54PWQsYS55PWYsYX07YnIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKG4pe3JldHVybiBnKG4pfHwobj1uZXcgYnIpLG4ucmlnaHQ9dGhpcy5yaWdodCxuLmxlZnQ9dGhpcy5sZWZ0LG4udG9wPXRoaXMudG9wLG4uYm90dG9tPXRoaXMuYm90dG9tLG4ubmVhcj10aGlzLm5lYXIsbi5mYXI9dGhpcy5mYXIsbi5fbGVmdD12b2lkIDAsbi5fcmlnaHQ9dm9pZCAwLG4uX3RvcD12b2lkIDAsbi5fYm90dG9tPXZvaWQgMCxuLl9uZWFyPXZvaWQgMCxuLl9mYXI9dm9pZCAwLG59O2JyLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24obil7cmV0dXJuIGcobikmJm4gaW5zdGFuY2VvZiBiciYmdGhpcy5yaWdodD09PW4ucmlnaHQmJnRoaXMubGVmdD09PW4ubGVmdCYmdGhpcy50b3A9PT1uLnRvcCYmdGhpcy5ib3R0b209PT1uLmJvdHRvbSYmdGhpcy5uZWFyPT09bi5uZWFyJiZ0aGlzLmZhcj09PW4uZmFyfTtici5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIG49PT10aGlzfHxnKG4pJiZuIGluc3RhbmNlb2YgYnImJmsuZXF1YWxzRXBzaWxvbih0aGlzLnJpZ2h0LG4ucmlnaHQsZSx0KSYmay5lcXVhbHNFcHNpbG9uKHRoaXMubGVmdCxuLmxlZnQsZSx0KSYmay5lcXVhbHNFcHNpbG9uKHRoaXMudG9wLG4udG9wLGUsdCkmJmsuZXF1YWxzRXBzaWxvbih0aGlzLmJvdHRvbSxuLmJvdHRvbSxlLHQpJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5uZWFyLG4ubmVhcixlLHQpJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5mYXIsbi5mYXIsZSx0KX07SDg9YnJ9KTtmdW5jdGlvbiB0YShuKXtuPW4/P09lLkVNUFRZX09CSkVDVCx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtPW5ldyBIOCx0aGlzLmZvdj1uLmZvdix0aGlzLl9mb3Y9dm9pZCAwLHRoaXMuX2Zvdnk9dm9pZCAwLHRoaXMuX3NzZURlbm9taW5hdG9yPXZvaWQgMCx0aGlzLmFzcGVjdFJhdGlvPW4uYXNwZWN0UmF0aW8sdGhpcy5fYXNwZWN0UmF0aW89dm9pZCAwLHRoaXMubmVhcj1uLm5lYXI/PzEsdGhpcy5fbmVhcj10aGlzLm5lYXIsdGhpcy5mYXI9bi5mYXI/PzVlOCx0aGlzLl9mYXI9dGhpcy5mYXIsdGhpcy54T2Zmc2V0PW4ueE9mZnNldD8/MCx0aGlzLl94T2Zmc2V0PXRoaXMueE9mZnNldCx0aGlzLnlPZmZzZXQ9bi55T2Zmc2V0Pz8wLHRoaXMuX3lPZmZzZXQ9dGhpcy55T2Zmc2V0fWZ1bmN0aW9uIEphKG4pe2lmKCEobi5mb3YhPT1uLl9mb3Z8fG4uYXNwZWN0UmF0aW8hPT1uLl9hc3BlY3RSYXRpb3x8bi5uZWFyIT09bi5fbmVhcnx8bi5mYXIhPT1uLl9mYXJ8fG4ueE9mZnNldCE9PW4uX3hPZmZzZXR8fG4ueU9mZnNldCE9PW4uX3lPZmZzZXQpKXJldHVybjtuLl9hc3BlY3RSYXRpbz1uLmFzcGVjdFJhdGlvLG4uX2Zvdj1uLmZvdixuLl9mb3Z5PW4uYXNwZWN0UmF0aW88PTE/bi5mb3Y6TWF0aC5hdGFuKE1hdGgudGFuKG4uZm92Ki41KS9uLmFzcGVjdFJhdGlvKSoyLG4uX25lYXI9bi5uZWFyLG4uX2Zhcj1uLmZhcixuLl9zc2VEZW5vbWluYXRvcj0yKk1hdGgudGFuKC41Km4uX2ZvdnkpLG4uX3hPZmZzZXQ9bi54T2Zmc2V0LG4uX3lPZmZzZXQ9bi55T2Zmc2V0O2xldCB0PW4uX29mZkNlbnRlckZydXN0dW07dC50b3A9bi5uZWFyKk1hdGgudGFuKC41Km4uX2ZvdnkpLHQuYm90dG9tPS10LnRvcCx0LnJpZ2h0PW4uYXNwZWN0UmF0aW8qdC50b3AsdC5sZWZ0PS10LnJpZ2h0LHQubmVhcj1uLm5lYXIsdC5mYXI9bi5mYXIsdC5yaWdodCs9bi54T2Zmc2V0LHQubGVmdCs9bi54T2Zmc2V0LHQudG9wKz1uLnlPZmZzZXQsdC5ib3R0b20rPW4ueU9mZnNldH12YXIgSW8saWc9WCgoKT0+e3N0KCk7ZmUoKTtqZSgpO0s4KCk7dGEucGFja2VkTGVuZ3RoPTY7dGEucGFjaz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIHQ9dD8/MCxlW3QrK109bi5mb3YsZVt0KytdPW4uYXNwZWN0UmF0aW8sZVt0KytdPW4ubmVhcixlW3QrK109bi5mYXIsZVt0KytdPW4ueE9mZnNldCxlW3RdPW4ueU9mZnNldCxlfTt0YS51bnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiBlPWU/PzAsZyh0KXx8KHQ9bmV3IHRhKSx0LmZvdj1uW2UrK10sdC5hc3BlY3RSYXRpbz1uW2UrK10sdC5uZWFyPW5bZSsrXSx0LmZhcj1uW2UrK10sdC54T2Zmc2V0PW5bZSsrXSx0LnlPZmZzZXQ9bltlXSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YS5wcm90b3R5cGUse3Byb2plY3Rpb25NYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBKYSh0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLnByb2plY3Rpb25NYXRyaXh9fSxpbmZpbml0ZVByb2plY3Rpb25NYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBKYSh0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmluZmluaXRlUHJvamVjdGlvbk1hdHJpeH19LGZvdnk6e2dldDpmdW5jdGlvbigpe3JldHVybiBKYSh0aGlzKSx0aGlzLl9mb3Z5fX0sc3NlRGVub21pbmF0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiBKYSh0aGlzKSx0aGlzLl9zc2VEZW5vbWluYXRvcn19LG9mZkNlbnRlckZydXN0dW06e2dldDpmdW5jdGlvbigpe3JldHVybiBKYSh0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtfX19KTt0YS5wcm90b3R5cGUuY29tcHV0ZUN1bGxpbmdWb2x1bWU9ZnVuY3Rpb24obixlLHQpe3JldHVybiBKYSh0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmNvbXB1dGVDdWxsaW5nVm9sdW1lKG4sZSx0KX07dGEucHJvdG90eXBlLmdldFBpeGVsRGltZW5zaW9ucz1mdW5jdGlvbihuLGUsdCxvLGEpe3JldHVybiBKYSh0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmdldFBpeGVsRGltZW5zaW9ucyhuLGUsdCxvLGEpfTt0YS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24obil7cmV0dXJuIGcobil8fChuPW5ldyB0YSksbi5hc3BlY3RSYXRpbz10aGlzLmFzcGVjdFJhdGlvLG4uZm92PXRoaXMuZm92LG4ubmVhcj10aGlzLm5lYXIsbi5mYXI9dGhpcy5mYXIsbi5fYXNwZWN0UmF0aW89dm9pZCAwLG4uX2Zvdj12b2lkIDAsbi5fbmVhcj12b2lkIDAsbi5fZmFyPXZvaWQgMCx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmNsb25lKG4uX29mZkNlbnRlckZydXN0dW0pLG59O3RhLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24obil7cmV0dXJuIWcobil8fCEobiBpbnN0YW5jZW9mIHRhKT8hMTooSmEodGhpcyksSmEobiksdGhpcy5mb3Y9PT1uLmZvdiYmdGhpcy5hc3BlY3RSYXRpbz09PW4uYXNwZWN0UmF0aW8mJnRoaXMuX29mZkNlbnRlckZydXN0dW0uZXF1YWxzKG4uX29mZkNlbnRlckZydXN0dW0pKX07dGEucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24obixlLHQpe3JldHVybiFnKG4pfHwhKG4gaW5zdGFuY2VvZiB0YSk/ITE6KEphKHRoaXMpLEphKG4pLGsuZXF1YWxzRXBzaWxvbih0aGlzLmZvdixuLmZvdixlLHQpJiZrLmVxdWFsc0Vwc2lsb24odGhpcy5hc3BlY3RSYXRpbyxuLmFzcGVjdFJhdGlvLGUsdCkmJnRoaXMuX29mZkNlbnRlckZydXN0dW0uZXF1YWxzRXBzaWxvbihuLl9vZmZDZW50ZXJGcnVzdHVtLGUsdCkpfTtJbz10YX0pO2Z1bmN0aW9uIFRjKG4pe2xldCBlPW4uZnJ1c3R1bSx0PW4ub3JpZW50YXRpb24sbz1uLm9yaWdpbixhPW4udmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxULHI9bi5fZHJhd05lYXJQbGFuZT8/ITAsaSxmO2UgaW5zdGFuY2VvZiBJbz8oaT1CaCxmPUlvLnBhY2tlZExlbmd0aCk6ZSBpbnN0YW5jZW9mIE5vJiYoaT1QOSxmPU5vLnBhY2tlZExlbmd0aCksdGhpcy5fZnJ1c3R1bVR5cGU9aSx0aGlzLl9mcnVzdHVtPWUuY2xvbmUoKSx0aGlzLl9vcmlnaW49cy5jbG9uZShvKSx0aGlzLl9vcmllbnRhdGlvbj1ZZS5jbG9uZSh0KSx0aGlzLl9kcmF3TmVhclBsYW5lPXIsdGhpcy5fdmVydGV4Rm9ybWF0PWEsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlRnJ1c3R1bUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD0yK2Yrcy5wYWNrZWRMZW5ndGgrWWUucGFja2VkTGVuZ3RoK2hlLnBhY2tlZExlbmd0aH1mdW5jdGlvbiBDcyhuLGUsdCxvLGEscixpLGYpe2xldCBkPW4vMyoyO2ZvcihsZXQgYz0wO2M8NDsrK2MpZyhlKSYmKGVbbl09ci54LGVbbisxXT1yLnksZVtuKzJdPXIueiksZyh0KSYmKHRbbl09aS54LHRbbisxXT1pLnksdFtuKzJdPWkueiksZyhvKSYmKG9bbl09Zi54LG9bbisxXT1mLnksb1tuKzJdPWYueiksbis9MzthW2RdPTAsYVtkKzFdPTAsYVtkKzJdPTEsYVtkKzNdPTAsYVtkKzRdPTEsYVtkKzVdPTEsYVtkKzZdPTAsYVtkKzddPTF9dmFyIEJoLFA5LGs5LHY5LEY5LEQ5LEI5LFU5LGo5LGNnLHE4LFc4LFg4LEw5LHo5LEc5LElpLGNkLFk4LHNkLHNnPVgoKCk9PntFdCgpO01lKCk7YmEoKTtDdCgpO2ZlKCk7WHQoKTtZdCgpO3JuKCk7SW4oKTt1bigpO2FnKCk7aWcoKTt0bigpO1dvKCk7Q28oKTtCaD0wLFA5PTE7VGMucGFjaz1mdW5jdGlvbihuLGUsdCl7dD10Pz8wO2xldCBvPW4uX2ZydXN0dW1UeXBlLGE9bi5fZnJ1c3R1bTtyZXR1cm4gZVt0KytdPW8sbz09PUJoPyhJby5wYWNrKGEsZSx0KSx0Kz1Jby5wYWNrZWRMZW5ndGgpOihOby5wYWNrKGEsZSx0KSx0Kz1Oby5wYWNrZWRMZW5ndGgpLHMucGFjayhuLl9vcmlnaW4sZSx0KSx0Kz1zLnBhY2tlZExlbmd0aCxZZS5wYWNrKG4uX29yaWVudGF0aW9uLGUsdCksdCs9WWUucGFja2VkTGVuZ3RoLGhlLnBhY2sobi5fdmVydGV4Rm9ybWF0LGUsdCksdCs9aGUucGFja2VkTGVuZ3RoLGVbdF09bi5fZHJhd05lYXJQbGFuZT8xOjAsZX07azk9bmV3IElvLHY5PW5ldyBObyxGOT1uZXcgWWUsRDk9bmV3IHMsQjk9bmV3IGhlO1RjLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvPW5bZSsrXSxhO289PT1CaD8oYT1Jby51bnBhY2sobixlLGs5KSxlKz1Jby5wYWNrZWRMZW5ndGgpOihhPU5vLnVucGFjayhuLGUsdjkpLGUrPU5vLnBhY2tlZExlbmd0aCk7bGV0IHI9cy51bnBhY2sobixlLEQ5KTtlKz1zLnBhY2tlZExlbmd0aDtsZXQgaT1ZZS51bnBhY2sobixlLEY5KTtlKz1ZZS5wYWNrZWRMZW5ndGg7bGV0IGY9aGUudW5wYWNrKG4sZSxCOSk7ZSs9aGUucGFja2VkTGVuZ3RoO2xldCBkPW5bZV09PT0xO2lmKCFnKHQpKXJldHVybiBuZXcgVGMoe2ZydXN0dW06YSxvcmlnaW46cixvcmllbnRhdGlvbjppLHZlcnRleEZvcm1hdDpmLF9kcmF3TmVhclBsYW5lOmR9KTtsZXQgYz1vPT09dC5fZnJ1c3R1bVR5cGU/dC5fZnJ1c3R1bTp2b2lkIDA7cmV0dXJuIHQuX2ZydXN0dW09YS5jbG9uZShjKSx0Ll9mcnVzdHVtVHlwZT1vLHQuX29yaWdpbj1zLmNsb25lKHIsdC5fb3JpZ2luKSx0Ll9vcmllbnRhdGlvbj1ZZS5jbG9uZShpLHQuX29yaWVudGF0aW9uKSx0Ll92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoZix0Ll92ZXJ0ZXhGb3JtYXQpLHQuX2RyYXdOZWFyUGxhbmU9ZCx0fTtVOT1uZXcgWixqOT1uZXcgUSxjZz1uZXcgUSxxOD1uZXcgcyxXOD1uZXcgcyxYOD1uZXcgcyxMOT1uZXcgcyx6OT1uZXcgcyxHOT1uZXcgcyxJaT1uZXcgQXJyYXkoMyksY2Q9bmV3IEFycmF5KDQpO2NkWzBdPW5ldyBydCgtMSwtMSwxLDEpO2NkWzFdPW5ldyBydCgxLC0xLDEsMSk7Y2RbMl09bmV3IHJ0KDEsMSwxLDEpO2NkWzNdPW5ldyBydCgtMSwxLDEsMSk7WTg9bmV3IEFycmF5KDQpO2ZvcihsZXQgbj0wO248NDsrK24pWThbbl09bmV3IHJ0O1RjLl9jb21wdXRlTmVhckZhclBsYW5lcz1mdW5jdGlvbihuLGUsdCxvLGEscixpLGYpe2xldCBkPVouZnJvbVF1YXRlcm5pb24oZSxVOSksYz1yPz9xOCx1PWk/P1c4LGw9Zj8/WDg7Yz1aLmdldENvbHVtbihkLDAsYyksdT1aLmdldENvbHVtbihkLDEsdSksbD1aLmdldENvbHVtbihkLDIsbCkscy5ub3JtYWxpemUoYyxjKSxzLm5vcm1hbGl6ZSh1LHUpLHMubm9ybWFsaXplKGwsbCkscy5uZWdhdGUoYyxjKTtsZXQgbT1RLmNvbXB1dGVWaWV3KG4sbCx1LGMsajkpLGgsYixwPW8ucHJvamVjdGlvbk1hdHJpeDtpZih0PT09Qmgpe2xldCB5PVEubXVsdGlwbHkocCxtLGNnKTtiPVEuaW52ZXJzZSh5LGNnKX1lbHNlIGg9US5pbnZlcnNlVHJhbnNmb3JtYXRpb24obSxjZyk7ZyhiKT8oSWlbMF09by5uZWFyLElpWzFdPW8uZmFyKTooSWlbMF09MCxJaVsxXT1vLm5lYXIsSWlbMl09by5mYXIpO2ZvcihsZXQgeT0wO3k8MjsrK3kpZm9yKGxldCBUPTA7VDw0OysrVCl7bGV0IF89cnQuY2xvbmUoY2RbVF0sWThbVF0pO2lmKGcoYikpe189US5tdWx0aXBseUJ5VmVjdG9yKGIsXyxfKTtsZXQgdz0xL18udztzLm11bHRpcGx5QnlTY2FsYXIoXyx3LF8pLHMuc3VidHJhY3QoXyxuLF8pLHMubm9ybWFsaXplKF8sXyk7bGV0IEU9cy5kb3QobCxfKTtzLm11bHRpcGx5QnlTY2FsYXIoXyxJaVt5XS9FLF8pLHMuYWRkKF8sbixfKX1lbHNle2xldCB3PW8ub2ZmQ2VudGVyRnJ1c3R1bTtnKHcpJiYobz13KTtsZXQgRT1JaVt5XSxSPUlpW3krMV07Xy54PShfLngqKG8ucmlnaHQtby5sZWZ0KStvLmxlZnQrby5yaWdodCkqLjUsXy55PShfLnkqKG8udG9wLW8uYm90dG9tKStvLmJvdHRvbStvLnRvcCkqLjUsXy56PShfLnoqKEUtUiktRS1SKSouNSxfLnc9MSxRLm11bHRpcGx5QnlWZWN0b3IoaCxfLF8pfWFbMTIqeStUKjNdPV8ueCxhWzEyKnkrVCozKzFdPV8ueSxhWzEyKnkrVCozKzJdPV8uen19O1RjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe2xldCBlPW4uX2ZydXN0dW1UeXBlLHQ9bi5fZnJ1c3R1bSxvPW4uX29yaWdpbixhPW4uX29yaWVudGF0aW9uLHI9bi5fZHJhd05lYXJQbGFuZSxpPW4uX3ZlcnRleEZvcm1hdCxmPXI/Njo1LGQ9bmV3IEZsb2F0NjRBcnJheSg3Mik7VGMuX2NvbXB1dGVOZWFyRmFyUGxhbmVzKG8sYSxlLHQsZCk7bGV0IGM9MjQ7ZFtjXT1kWzEyXSxkW2MrMV09ZFsxM10sZFtjKzJdPWRbMTRdLGRbYyszXT1kWzBdLGRbYys0XT1kWzFdLGRbYys1XT1kWzJdLGRbYys2XT1kWzldLGRbYys3XT1kWzEwXSxkW2MrOF09ZFsxMV0sZFtjKzldPWRbMjFdLGRbYysxMF09ZFsyMl0sZFtjKzExXT1kWzIzXSxjKz0xMixkW2NdPWRbMTVdLGRbYysxXT1kWzE2XSxkW2MrMl09ZFsxN10sZFtjKzNdPWRbM10sZFtjKzRdPWRbNF0sZFtjKzVdPWRbNV0sZFtjKzZdPWRbMF0sZFtjKzddPWRbMV0sZFtjKzhdPWRbMl0sZFtjKzldPWRbMTJdLGRbYysxMF09ZFsxM10sZFtjKzExXT1kWzE0XSxjKz0xMixkW2NdPWRbM10sZFtjKzFdPWRbNF0sZFtjKzJdPWRbNV0sZFtjKzNdPWRbMTVdLGRbYys0XT1kWzE2XSxkW2MrNV09ZFsxN10sZFtjKzZdPWRbMThdLGRbYys3XT1kWzE5XSxkW2MrOF09ZFsyMF0sZFtjKzldPWRbNl0sZFtjKzEwXT1kWzddLGRbYysxMV09ZFs4XSxjKz0xMixkW2NdPWRbNl0sZFtjKzFdPWRbN10sZFtjKzJdPWRbOF0sZFtjKzNdPWRbMThdLGRbYys0XT1kWzE5XSxkW2MrNV09ZFsyMF0sZFtjKzZdPWRbMjFdLGRbYys3XT1kWzIyXSxkW2MrOF09ZFsyM10sZFtjKzldPWRbOV0sZFtjKzEwXT1kWzEwXSxkW2MrMTFdPWRbMTFdLHJ8fChkPWQuc3ViYXJyYXkoMTIpKTtsZXQgdT1uZXcgUWUoe3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZH0pfSk7aWYoZyhpLm5vcm1hbCl8fGcoaS50YW5nZW50KXx8ZyhpLmJpdGFuZ2VudCl8fGcoaS5zdCkpe2xldCBtPWcoaS5ub3JtYWwpP25ldyBGbG9hdDMyQXJyYXkoMTIqZik6dm9pZCAwLGg9ZyhpLnRhbmdlbnQpP25ldyBGbG9hdDMyQXJyYXkoMTIqZik6dm9pZCAwLGI9ZyhpLmJpdGFuZ2VudCk/bmV3IEZsb2F0MzJBcnJheSgxMipmKTp2b2lkIDAscD1nKGkuc3QpP25ldyBGbG9hdDMyQXJyYXkoOCpmKTp2b2lkIDAseT1xOCxUPVc4LF89WDgsdz1zLm5lZ2F0ZSh5LEw5KSxFPXMubmVnYXRlKFQsejkpLFI9cy5uZWdhdGUoXyxHOSk7Yz0wLHImJihDcyhjLG0saCxiLHAsUix5LFQpLGMrPTEyKSxDcyhjLG0saCxiLHAsXyx3LFQpLGMrPTEyLENzKGMsbSxoLGIscCx3LFIsVCksYys9MTIsQ3MoYyxtLGgsYixwLEUsUix3KSxjKz0xMixDcyhjLG0saCxiLHAseSxfLFQpLGMrPTEyLENzKGMsbSxoLGIscCxULF8sdyksZyhtKSYmKHUubm9ybWFsPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczptfSkpLGcoaCkmJih1LnRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmh9KSksZyhiKSYmKHUuYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSkpLGcocCkmJih1LnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpwfSkpfWxldCBsPW5ldyBVaW50MTZBcnJheSg2KmYpO2ZvcihsZXQgbT0wO208ZjsrK20pe2xldCBoPW0qNixiPW0qNDtsW2hdPWIsbFtoKzFdPWIrMSxsW2grMl09YisyLGxbaCszXT1iLGxbaCs0XT1iKzIsbFtoKzVdPWIrM31yZXR1cm4gbmV3IFBlKHthdHRyaWJ1dGVzOnUsaW5kaWNlczpsLHByaW1pdGl2ZVR5cGU6RmUuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOnBlLmZyb21WZXJ0aWNlcyhkKX0pfTtzZD1UY30pO3ZhciBmZz17fTskZShmZyx7ZGVmYXVsdDooKT0+SDl9KTtmdW5jdGlvbiBWOShuLGUpe3JldHVybiBnKGUpJiYobj1zZC51bnBhY2sobixlKSksc2QuY3JlYXRlR2VvbWV0cnkobil9dmFyIEg5LGRnPVgoKCk9PntmZSgpO3NnKCk7SDk9Vjl9KTtmdW5jdGlvbiBmZChuKXtsZXQgZT1uLmZydXN0dW0sdD1uLm9yaWVudGF0aW9uLG89bi5vcmlnaW4sYT1uLl9kcmF3TmVhclBsYW5lPz8hMCxyLGk7ZSBpbnN0YW5jZW9mIElvPyhyPXVnLGk9SW8ucGFja2VkTGVuZ3RoKTplIGluc3RhbmNlb2YgTm8mJihyPUs5LGk9Tm8ucGFja2VkTGVuZ3RoKSx0aGlzLl9mcnVzdHVtVHlwZT1yLHRoaXMuX2ZydXN0dW09ZS5jbG9uZSgpLHRoaXMuX29yaWdpbj1zLmNsb25lKG8pLHRoaXMuX29yaWVudGF0aW9uPVllLmNsb25lKHQpLHRoaXMuX2RyYXdOZWFyUGxhbmU9YSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVGcnVzdHVtT3V0bGluZUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD0yK2krcy5wYWNrZWRMZW5ndGgrWWUucGFja2VkTGVuZ3RofXZhciB1ZyxLOSxxOSxXOSxYOSxZOSxsZyxKOD1YKCgpPT57RXQoKTtNZSgpO0N0KCk7ZmUoKTtzZygpO1h0KCk7WXQoKTtybigpO2FnKCk7aWcoKTt0bigpO1dvKCk7dWc9MCxLOT0xO2ZkLnBhY2s9ZnVuY3Rpb24obixlLHQpe3Q9dD8/MDtsZXQgbz1uLl9mcnVzdHVtVHlwZSxhPW4uX2ZydXN0dW07cmV0dXJuIGVbdCsrXT1vLG89PT11Zz8oSW8ucGFjayhhLGUsdCksdCs9SW8ucGFja2VkTGVuZ3RoKTooTm8ucGFjayhhLGUsdCksdCs9Tm8ucGFja2VkTGVuZ3RoKSxzLnBhY2sobi5fb3JpZ2luLGUsdCksdCs9cy5wYWNrZWRMZW5ndGgsWWUucGFjayhuLl9vcmllbnRhdGlvbixlLHQpLHQrPVllLnBhY2tlZExlbmd0aCxlW3RdPW4uX2RyYXdOZWFyUGxhbmU/MTowLGV9O3E5PW5ldyBJbyxXOT1uZXcgTm8sWDk9bmV3IFllLFk5PW5ldyBzO2ZkLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvPW5bZSsrXSxhO289PT11Zz8oYT1Jby51bnBhY2sobixlLHE5KSxlKz1Jby5wYWNrZWRMZW5ndGgpOihhPU5vLnVucGFjayhuLGUsVzkpLGUrPU5vLnBhY2tlZExlbmd0aCk7bGV0IHI9cy51bnBhY2sobixlLFk5KTtlKz1zLnBhY2tlZExlbmd0aDtsZXQgaT1ZZS51bnBhY2sobixlLFg5KTtlKz1ZZS5wYWNrZWRMZW5ndGg7bGV0IGY9bltlXT09PTE7aWYoIWcodCkpcmV0dXJuIG5ldyBmZCh7ZnJ1c3R1bTphLG9yaWdpbjpyLG9yaWVudGF0aW9uOmksX2RyYXdOZWFyUGxhbmU6Zn0pO2xldCBkPW89PT10Ll9mcnVzdHVtVHlwZT90Ll9mcnVzdHVtOnZvaWQgMDtyZXR1cm4gdC5fZnJ1c3R1bT1hLmNsb25lKGQpLHQuX2ZydXN0dW1UeXBlPW8sdC5fb3JpZ2luPXMuY2xvbmUocix0Ll9vcmlnaW4pLHQuX29yaWVudGF0aW9uPVllLmNsb25lKGksdC5fb3JpZW50YXRpb24pLHQuX2RyYXdOZWFyUGxhbmU9Zix0fTtmZC5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihuKXtsZXQgZT1uLl9mcnVzdHVtVHlwZSx0PW4uX2ZydXN0dW0sbz1uLl9vcmlnaW4sYT1uLl9vcmllbnRhdGlvbixyPW4uX2RyYXdOZWFyUGxhbmUsaT1uZXcgRmxvYXQ2NEFycmF5KDI0KTtzZC5fY29tcHV0ZU5lYXJGYXJQbGFuZXMobyxhLGUsdCxpKTtsZXQgZj1uZXcgUWUoe3Bvc2l0aW9uOm5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aX0pfSksZCxjLHU9cj8yOjEsbD1uZXcgVWludDE2QXJyYXkoOCoodSsxKSksbT1yPzA6MTtmb3IoO208MjsrK20pZD1yP20qODowLGM9bSo0LGxbZF09YyxsW2QrMV09YysxLGxbZCsyXT1jKzEsbFtkKzNdPWMrMixsW2QrNF09YysyLGxbZCs1XT1jKzMsbFtkKzZdPWMrMyxsW2QrN109Yztmb3IobT0wO208MjsrK20pZD0odSttKSo4LGM9bSo0LGxbZF09YyxsW2QrMV09Yys0LGxbZCsyXT1jKzEsbFtkKzNdPWMrNSxsW2QrNF09YysyLGxbZCs1XT1jKzYsbFtkKzZdPWMrMyxsW2QrN109Yys3O3JldHVybiBuZXcgUGUoe2F0dHJpYnV0ZXM6ZixpbmRpY2VzOmwscHJpbWl0aXZlVHlwZTpGZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpwZS5mcm9tVmVydGljZXMoaSl9KX07bGc9ZmR9KTt2YXIgaGc9e307JGUoaGcse2RlZmF1bHQ6KCk9Plo5fSk7ZnVuY3Rpb24gSjkobixlKXtyZXR1cm4gZyhlKSYmKG49bGcudW5wYWNrKG4sZSkpLGxnLmNyZWF0ZUdlb21ldHJ5KG4pfXZhciBaOSxtZz1YKCgpPT57ZmUoKTtKOCgpO1o5PUo5fSk7dmFyIGJnLFo4LFE4PVgoKCk9Pnt2dCgpO3N0KCk7ZmUoKTtWZSgpO1ByKCk7amUoKTtobigpO2JnPWNsYXNze2NvbnN0cnVjdG9yKGUpe2U9ZT8/T2UuRU1QVFlfT0JKRUNULHRoaXMuX2VsbGlwc29pZD1lLmVsbGlwc29pZD8/Sy5kZWZhdWx0LHRoaXMuX3JlY3RhbmdsZT1lLnJlY3RhbmdsZT8/eGUuTUFYX1ZBTFVFLHRoaXMuX3Byb2plY3Rpb249bmV3IG5vKHRoaXMuX2VsbGlwc29pZCksdGhpcy5fbnVtYmVyT2ZMZXZlbFplcm9UaWxlc1g9ZS5udW1iZXJPZkxldmVsWmVyb1RpbGVzWD8/Mix0aGlzLl9udW1iZXJPZkxldmVsWmVyb1RpbGVzWT1lLm51bWJlck9mTGV2ZWxaZXJvVGlsZXNZPz8xfWdldCBlbGxpcHNvaWQoKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfWdldCByZWN0YW5nbGUoKXtyZXR1cm4gdGhpcy5fcmVjdGFuZ2xlfWdldCBwcm9qZWN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb2plY3Rpb259Z2V0TnVtYmVyT2ZYVGlsZXNBdExldmVsKGUpe3JldHVybiB0aGlzLl9udW1iZXJPZkxldmVsWmVyb1RpbGVzWDw8ZX1nZXROdW1iZXJPZllUaWxlc0F0TGV2ZWwoZSl7cmV0dXJuIHRoaXMuX251bWJlck9mTGV2ZWxaZXJvVGlsZXNZPDxlfXJlY3RhbmdsZVRvTmF0aXZlUmVjdGFuZ2xlKGUsdCl7bGV0IG89ay50b0RlZ3JlZXMoZS53ZXN0KSxhPWsudG9EZWdyZWVzKGUuc291dGgpLHI9ay50b0RlZ3JlZXMoZS5lYXN0KSxpPWsudG9EZWdyZWVzKGUubm9ydGgpO3JldHVybiBnKHQpPyh0Lndlc3Q9byx0LnNvdXRoPWEsdC5lYXN0PXIsdC5ub3J0aD1pLHQpOm5ldyB4ZShvLGEscixpKX10aWxlWFlUb05hdGl2ZVJlY3RhbmdsZShlLHQsbyxhKXtsZXQgcj10aGlzLnRpbGVYWVRvUmVjdGFuZ2xlKGUsdCxvLGEpO3JldHVybiByLndlc3Q9ay50b0RlZ3JlZXMoci53ZXN0KSxyLnNvdXRoPWsudG9EZWdyZWVzKHIuc291dGgpLHIuZWFzdD1rLnRvRGVncmVlcyhyLmVhc3QpLHIubm9ydGg9ay50b0RlZ3JlZXMoci5ub3J0aCkscn10aWxlWFlUb1JlY3RhbmdsZShlLHQsbyxhKXtsZXQgcj10aGlzLl9yZWN0YW5nbGUsaT10aGlzLmdldE51bWJlck9mWFRpbGVzQXRMZXZlbChvKSxmPXRoaXMuZ2V0TnVtYmVyT2ZZVGlsZXNBdExldmVsKG8pLGQ9ci53aWR0aC9pLGM9ZSpkK3Iud2VzdCx1PShlKzEpKmQrci53ZXN0LGw9ci5oZWlnaHQvZixtPXIubm9ydGgtdCpsLGg9ci5ub3J0aC0odCsxKSpsO3JldHVybiBnKGEpfHwoYT1uZXcgeGUoYyxoLHUsbSkpLGEud2VzdD1jLGEuc291dGg9aCxhLmVhc3Q9dSxhLm5vcnRoPW0sYX1wb3NpdGlvblRvVGlsZVhZKGUsdCxvKXtsZXQgYT10aGlzLl9yZWN0YW5nbGU7aWYoIXhlLmNvbnRhaW5zKGEsZSkpcmV0dXJuO2xldCByPXRoaXMuZ2V0TnVtYmVyT2ZYVGlsZXNBdExldmVsKHQpLGk9dGhpcy5nZXROdW1iZXJPZllUaWxlc0F0TGV2ZWwodCksZj1hLndpZHRoL3IsZD1hLmhlaWdodC9pLGM9ZS5sb25naXR1ZGU7YS5lYXN0PGEud2VzdCYmKGMrPWsuVFdPX1BJKTtsZXQgdT0oYy1hLndlc3QpL2Z8MDt1Pj1yJiYodT1yLTEpO2xldCBsPShhLm5vcnRoLWUubGF0aXR1ZGUpL2R8MDtyZXR1cm4gbD49aSYmKGw9aS0xKSxnKG8pPyhvLng9dSxvLnk9bCxvKTpuZXcgWSh1LGwpfX0sWjg9Ymd9KTtmdW5jdGlvbiBvUihuKXthZS5mcm9tUmFkaWFucyhuLmVhc3Qsbi5ub3J0aCwwLGRkWzBdKSxhZS5mcm9tUmFkaWFucyhuLndlc3Qsbi5ub3J0aCwwLGRkWzFdKSxhZS5mcm9tUmFkaWFucyhuLmVhc3Qsbi5zb3V0aCwwLGRkWzJdKSxhZS5mcm9tUmFkaWFucyhuLndlc3Qsbi5zb3V0aCwwLGRkWzNdKTtsZXQgZT0wLHQ9MCxvPTAsYT0wLHI9em4uX3RlcnJhaW5IZWlnaHRzTWF4TGV2ZWwsaTtmb3IoaT0wO2k8PXI7KytpKXtsZXQgZj0hMTtmb3IobGV0IGQ9MDtkPDQ7KytkKXtsZXQgYz1kZFtkXTtpZigkOS5wb3NpdGlvblRvVGlsZVhZKGMsaSx1ZCksZD09PTApbz11ZC54LGE9dWQueTtlbHNlIGlmKG8hPT11ZC54fHxhIT09dWQueSl7Zj0hMDticmVha319aWYoZilicmVhaztlPW8sdD1hfWlmKGkhPT0wKXJldHVybnt4OmUseTp0LGxldmVsOmk+cj9yOmktMX19dmFyICQ4LGVSLHRSLHBnLFE5LG5SLCQ5LGRkLHVkLHpuLFVoLGdnPVgoKCk9PntFdCgpO0lsKCk7dnQoKTtNZSgpO2d0KCk7ZmUoKTtWZSgpO1E4KCk7aG4oKTtucygpOyQ4PW5ldyBzLGVSPW5ldyBzLHRSPW5ldyBhZSxwZz1uZXcgcyxROT1uZXcgcyxuUj1uZXcgcGUsJDk9bmV3IFo4LGRkPVtuZXcgYWUsbmV3IGFlLG5ldyBhZSxuZXcgYWVdLHVkPW5ldyBZLHpuPXt9O3puLmluaXRpYWxpemU9ZnVuY3Rpb24oKXtsZXQgbj16bi5faW5pdFByb21pc2U7cmV0dXJuIGcobil8fChuPXlhLmZldGNoSnNvbihvcigiQXNzZXRzL2FwcHJveGltYXRlVGVycmFpbkhlaWdodHMuanNvbiIpKS50aGVuKGZ1bmN0aW9uKGUpe3puLl90ZXJyYWluSGVpZ2h0cz1lfSksem4uX2luaXRQcm9taXNlPW4pLG59O3puLmdldE1pbmltdW1NYXhpbXVtSGVpZ2h0cz1mdW5jdGlvbihuLGUpe2U9ZT8/Sy5kZWZhdWx0O2xldCB0PW9SKG4pLG89em4uX2RlZmF1bHRNaW5UZXJyYWluSGVpZ2h0LGE9em4uX2RlZmF1bHRNYXhUZXJyYWluSGVpZ2h0O2lmKGcodCkpe2xldCByPWAke3QubGV2ZWx9LSR7dC54fS0ke3QueX1gLGk9em4uX3RlcnJhaW5IZWlnaHRzW3JdO2coaSkmJihvPWlbMF0sYT1pWzFdKSxlLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHhlLm5vcnRoZWFzdChuLHRSKSwkOCksZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih4ZS5zb3V0aHdlc3Qobix0UiksZVIpLHMubWlkcG9pbnQoZVIsJDgscGcpO2xldCBmPWUuc2NhbGVUb0dlb2RldGljU3VyZmFjZShwZyxROSk7aWYoZyhmKSl7bGV0IGQ9cy5kaXN0YW5jZShwZyxmKTtvPU1hdGgubWluKG8sLWQpfWVsc2Ugbz16bi5fZGVmYXVsdE1pblRlcnJhaW5IZWlnaHR9cmV0dXJuIG89TWF0aC5tYXgoem4uX2RlZmF1bHRNaW5UZXJyYWluSGVpZ2h0LG8pLHttaW5pbXVtVGVycmFpbkhlaWdodDpvLG1heGltdW1UZXJyYWluSGVpZ2h0OmF9fTt6bi5nZXRCb3VuZGluZ1NwaGVyZT1mdW5jdGlvbihuLGUpe2U9ZT8/Sy5kZWZhdWx0O2xldCB0PW9SKG4pLG89em4uX2RlZmF1bHRNYXhUZXJyYWluSGVpZ2h0O2lmKGcodCkpe2xldCByPWAke3QubGV2ZWx9LSR7dC54fS0ke3QueX1gLGk9em4uX3RlcnJhaW5IZWlnaHRzW3JdO2coaSkmJihvPWlbMV0pfWxldCBhPXBlLmZyb21SZWN0YW5nbGUzRChuLGUsMCk7cmV0dXJuIHBlLmZyb21SZWN0YW5nbGUzRChuLGUsbyxuUikscGUudW5pb24oYSxuUixhKX07em4uX3RlcnJhaW5IZWlnaHRzTWF4TGV2ZWw9Njt6bi5fZGVmYXVsdE1heFRlcnJhaW5IZWlnaHQ9OWUzO3puLl9kZWZhdWx0TWluVGVycmFpbkhlaWdodD0tMWU1O3puLl90ZXJyYWluSGVpZ2h0cz12b2lkIDA7em4uX2luaXRQcm9taXNlPXZvaWQgMDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh6bix7aW5pdGlhbGl6ZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBnKHpuLl90ZXJyYWluSGVpZ2h0cyl9fX0pO1VoPXpufSk7ZnVuY3Rpb24ga2kobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5wb3NpdGlvbnM7dGhpcy53aWR0aD1uLndpZHRoPz8xLHRoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuZ3JhbnVsYXJpdHk9bi5ncmFudWxhcml0eT8/OTk5OSx0aGlzLmxvb3A9bi5sb29wPz8hMSx0aGlzLmFyY1R5cGU9bi5hcmNUeXBlPz9idC5HRU9ERVNJQyx0aGlzLl9lbGxpcHNvaWQ9Sy5kZWZhdWx0LHRoaXMuX3Byb2plY3Rpb25JbmRleD0wLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUdyb3VuZFBvbHlsaW5lR2VvbWV0cnkiLHRoaXMuX3NjZW5lM0RPbmx5PSExfWZ1bmN0aW9uIFJnKG4sZSx0LG8sYSl7bGV0IHI9em8obyxuLDAsdEYpLGk9em8obyxuLHQsclIpLGY9em8obyxlLDAsaVIpLGQ9SnIoaSxyLHJSKSxjPUpyKGYscixpUik7cmV0dXJuIHMuY3Jvc3MoYyxkLGEpLHMubm9ybWFsaXplKGEsYSl9ZnVuY3Rpb24gX2cobixlLHQsbyxhLHIsaSxmLGQsYyx1KXtpZihhPT09MClyZXR1cm47bGV0IGw7cj09PWJ0LkdFT0RFU0lDP2w9bmV3IHdoKG4sZSxpKTpyPT09YnQuUkhVTUImJihsPW5ldyBabyhuLGUsaSkpO2xldCBtPWwuc3VyZmFjZURpc3RhbmNlO2lmKG08YSlyZXR1cm47bGV0IGg9UmcobixlLG8saSxyRiksYj1NYXRoLmNlaWwobS9hKSxwPW0vYix5PXAsVD1iLTEsXz1mLmxlbmd0aDtmb3IobGV0IHc9MDt3PFQ7dysrKXtsZXQgRT1sLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoeSxuRiksUj16byhpLEUsdCxvRiksUz16byhpLEUsbyxhRik7cy5wYWNrKGgsZixfKSxzLnBhY2soUixkLF8pLHMucGFjayhTLGMsXyksdS5wdXNoKEUubGF0aXR1ZGUpLHUucHVzaChFLmxvbmdpdHVkZSksXys9Myx5Kz1wfX1mdW5jdGlvbiB6byhuLGUsdCxvKXtyZXR1cm4gYWUuY2xvbmUoZSx5ZykseWcuaGVpZ2h0PXQsYWUudG9DYXJ0ZXNpYW4oeWcsbixvKX1mdW5jdGlvbiBKcihuLGUsdCl7cmV0dXJuIHMuc3VidHJhY3QobixlLHQpLHMubm9ybWFsaXplKHQsdCksdH1mdW5jdGlvbiBjUihuLGUsdCxvKXtyZXR1cm4gbz1KcihuLGUsbyksbz1zLmNyb3NzKG8sdCxvKSxvPXMubm9ybWFsaXplKG8sbyksbz1zLmNyb3NzKHQsbyxvKSxvfWZ1bmN0aW9uIEFnKG4sZSx0LG8sYSl7bGV0IHI9SnIodCxlLE9SKSxpPWNSKG4sZSxyLGlGKSxmPWNSKG8sZSxyLGNGKTtpZihrLmVxdWFsc0Vwc2lsb24ocy5kb3QoaSxmKSxkRixrLkVQU0lMT041KSlyZXR1cm4gYT1zLmNyb3NzKHIsaSxhKSxhPXMubm9ybWFsaXplKGEsYSksYTthPXMuYWRkKGYsaSxhKSxhPXMubm9ybWFsaXplKGEsYSk7bGV0IGQ9cy5jcm9zcyhyLGEsc0YpO3JldHVybiBzLmRvdChmLGQpPGZGJiYoYT1zLm5lZ2F0ZShhLGEpKSxhfWZ1bmN0aW9uIGRSKG4sZSx0LG8pe2xldCBhPUpyKHQsZSxwRikscj1zLmRvdChhLG4pO2lmKHI+RVJ8fHI8YVIpe2xldCBpPUpyKG8sdCxPUiksZj1yPGFSP2suUElfT1ZFUl9UV086LWsuUElfT1ZFUl9UV08sZD1ZZS5mcm9tQXhpc0FuZ2xlKGksZixfRiksYz1aLmZyb21RdWF0ZXJuaW9uKGQsZ0YpO3JldHVybiBaLm11bHRpcGx5QnlWZWN0b3IoYyxuLG4pLCEwfXJldHVybiExfWZ1bmN0aW9uIGxkKG4sZSx0LG8sYSl7bGV0IHI9YWUudG9DYXJ0ZXNpYW4oZSxuLl9lbGxpcHNvaWQseUYpLGk9cy5hZGQocix0LGxSKSxmPSExLGQ9bi5fZWxsaXBzb2lkLGM9ZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhpLHVSKTtNYXRoLmFicyhlLmxvbmdpdHVkZS1jLmxvbmdpdHVkZSk+ay5QSV9PVkVSX1RXTyYmKGY9ITAsaT1zLnN1YnRyYWN0KHIsdCxsUiksYz1kLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGksdVIpKSxjLmhlaWdodD0wO2xldCB1PW4ucHJvamVjdChjLGEpO3JldHVybiBhPXMuc3VidHJhY3QodSxvLGEpLGEuej0wLGE9cy5ub3JtYWxpemUoYSxhKSxmJiZzLm5lZ2F0ZShhLGEpLGF9ZnVuY3Rpb24gbVIobixlLHQsbyxhLHIpe2xldCBpPXMuc3VidHJhY3QoZSxuLEFGKTtzLm5vcm1hbGl6ZShpLGkpO2xldCBmPXQtUlIsZD1zLm11bHRpcGx5QnlTY2FsYXIoaSxmLGhSKTtzLmFkZChuLGQsYSk7bGV0IGM9by14UjtkPXMubXVsdGlwbHlCeVNjYWxhcihpLGMsaFIpLHMuYWRkKGUsZCxyKX1mdW5jdGlvbiB6aChuLGUpe2xldCB0PW5uLmdldFBvaW50RGlzdGFuY2UoR2gsbiksbz1ubi5nZXRQb2ludERpc3RhbmNlKEdoLGUpLGE9d0Y7ay5lcXVhbHNFcHNpbG9uKHQsMCxrLkVQU0lMT04yKT8oYT1KcihlLG4sYSkscy5tdWx0aXBseUJ5U2NhbGFyKGEsay5FUFNJTE9OMixhKSxzLmFkZChuLGEsbikpOmsuZXF1YWxzRXBzaWxvbihvLDAsay5FUFNJTE9OMikmJihhPUpyKG4sZSxhKSxzLm11bHRpcGx5QnlTY2FsYXIoYSxrLkVQU0lMT04yLGEpLHMuYWRkKGUsYSxlKSl9ZnVuY3Rpb24gVEYobixlKXtsZXQgdD1NYXRoLmFicyhuLmxvbmdpdHVkZSksbz1NYXRoLmFicyhlLmxvbmdpdHVkZSk7aWYoay5lcXVhbHNFcHNpbG9uKHQsay5QSSxrLkVQU0lMT04xMSkpe2xldCBhPWsuc2lnbihlLmxvbmdpdHVkZSk7cmV0dXJuIG4ubG9uZ2l0dWRlPWEqKHQtay5FUFNJTE9OMTEpLDF9ZWxzZSBpZihrLmVxdWFsc0Vwc2lsb24obyxrLlBJLGsuRVBTSUxPTjExKSl7bGV0IGE9ay5zaWduKG4ubG9uZ2l0dWRlKTtyZXR1cm4gZS5sb25naXR1ZGU9YSooby1rLkVQU0lMT04xMSksMn1yZXR1cm4gMH1mdW5jdGlvbiB6RihuLGUsdCxvLGEscixpKXtsZXQgZixkLGM9ZS5fZWxsaXBzb2lkLHU9dC5sZW5ndGgvMy0xLGw9dSo4LG09bCo0LGg9dSozNixiPWw+NjU1MzU/bmV3IFVpbnQzMkFycmF5KGgpOm5ldyBVaW50MTZBcnJheShoKSxwPW5ldyBGbG9hdDY0QXJyYXkobCozKSx5PW5ldyBGbG9hdDMyQXJyYXkobSksVD1uZXcgRmxvYXQzMkFycmF5KG0pLF89bmV3IEZsb2F0MzJBcnJheShtKSx3PW5ldyBGbG9hdDMyQXJyYXkobSksRT1uZXcgRmxvYXQzMkFycmF5KG0pLFIsUyxDLEk7aSYmKFI9bmV3IEZsb2F0MzJBcnJheShtKSxTPW5ldyBGbG9hdDMyQXJyYXkobSksQz1uZXcgRmxvYXQzMkFycmF5KG0pLEk9bmV3IEZsb2F0MzJBcnJheShsKjIpKTtsZXQgTT1yLmxlbmd0aC8yLFA9MCxGPVNSO0YuaGVpZ2h0PTA7bGV0IEE9Q1I7QS5oZWlnaHQ9MDtsZXQgeD1iUixOPXdnO2lmKGkpZm9yKGQ9MCxmPTE7ZjxNO2YrKylGLmxhdGl0dWRlPXJbZF0sRi5sb25naXR1ZGU9cltkKzFdLEEubGF0aXR1ZGU9cltkKzJdLEEubG9uZ2l0dWRlPXJbZCszXSx4PWUucHJvamVjdChGLHgpLE49ZS5wcm9qZWN0KEEsTiksUCs9cy5kaXN0YW5jZSh4LE4pLGQrPTI7bGV0IHY9by5sZW5ndGgvMztOPXMudW5wYWNrKG8sMCxOKTtsZXQgVT0wO2ZvcihkPTMsZj0xO2Y8djtmKyspeD1zLmNsb25lKE4seCksTj1zLnVucGFjayhvLGQsTiksVSs9cy5kaXN0YW5jZSh4LE4pLGQrPTM7bGV0IEw7ZD0zO2xldCBEPTAsRz0wLFY9MCxPPTAsSj0hMSxyZT1zLnVucGFjayh0LDAsZ1IpLHNlPXMudW5wYWNrKG8sMCx3Zyksb2U9cy51bnBhY2soYSwwLF9SKTtpZihuKXtsZXQgQ2U9cy51bnBhY2sodCx0Lmxlbmd0aC02LHBSKTtkUihvZSxDZSxyZSxzZSkmJihvZT1zLm5lZ2F0ZShvZSxvZSkpfWxldCBjZT0wLG1lPTAsZGU9MDtmb3IoZj0wO2Y8dTtmKyspe2xldCBDZT1zLmNsb25lKHJlLHBSKSxXZT1zLmNsb25lKHNlLGJSKSx6ZT1zLmNsb25lKG9lLEVGKTtKJiYoemU9cy5uZWdhdGUoemUsemUpKSxyZT1zLnVucGFjayh0LGQsZ1IpLHNlPXMudW5wYWNrKG8sZCx3Zyksb2U9cy51bnBhY2soYSxkLF9SKSxKPWRSKG9lLENlLHJlLHNlKSxGLmxhdGl0dWRlPXJbRF0sRi5sb25naXR1ZGU9cltEKzFdLEEubGF0aXR1ZGU9cltEKzJdLEEubG9uZ2l0dWRlPXJbRCszXTtsZXQgWmUsS2UsRGUsQmU7aWYoaSl7bGV0IHl0PVRGKEYsQSk7WmU9ZS5wcm9qZWN0KEYsTkYpLEtlPWUucHJvamVjdChBLElGKTtsZXQgd249SnIoS2UsWmUsQVIpO3duLnk9TWF0aC5hYnMod24ueSksRGU9VGcsQmU9RWcseXQ9PT0wfHxzLmRvdCh3bixzLlVOSVRfWSk+RVI/KERlPWxkKGUsRix6ZSxaZSxUZyksQmU9bGQoZSxBLG9lLEtlLEVnKSk6eXQ9PT0xPyhCZT1sZChlLEEsb2UsS2UsRWcpLERlLng9MCxEZS55PWsuc2lnbihGLmxvbmdpdHVkZS1NYXRoLmFicyhBLmxvbmdpdHVkZSkpLERlLno9MCk6KERlPWxkKGUsRix6ZSxaZSxUZyksQmUueD0wLEJlLnk9ay5zaWduKEYubG9uZ2l0dWRlLUEubG9uZ2l0dWRlKSxCZS56PTApfWxldCBldD1zLmRpc3RhbmNlKFdlLHNlKSxxZT1hYy5mcm9tQ2FydGVzaWFuKENlLEJGKSxhdD1zLnN1YnRyYWN0KHJlLENlLFBGKSx4dD1zLm5vcm1hbGl6ZShhdCx5UiksVHQ9cy5zdWJ0cmFjdChXZSxDZSxrRik7VHQ9cy5ub3JtYWxpemUoVHQsVHQpO2xldCBjdD1zLmNyb3NzKHh0LFR0LHlSKTtjdD1zLm5vcm1hbGl6ZShjdCxjdCk7bGV0IHp0PXMuY3Jvc3MoVHQsemUsRkYpO3p0PXMubm9ybWFsaXplKHp0LHp0KTtsZXQgT3Q9cy5zdWJ0cmFjdChzZSxyZSx2Rik7T3Q9cy5ub3JtYWxpemUoT3QsT3QpO2xldCBrdD1zLmNyb3NzKG9lLE90LERGKTtrdD1zLm5vcm1hbGl6ZShrdCxrdCk7bGV0IEdlPWV0L1UsTGU9Y2UvVSxfdD0wLE10LEd0LHF0LFF0PTAscG49MDtpZihpKXtfdD1zLmRpc3RhbmNlKFplLEtlKSxNdD1hYy5mcm9tQ2FydGVzaWFuKFplLFVGKSxHdD1zLnN1YnRyYWN0KEtlLFplLEFSKSxxdD1zLm5vcm1hbGl6ZShHdCxqRik7bGV0IHl0PXF0Lng7cXQueD1xdC55LHF0Lnk9LXl0LFF0PV90L1AscG49bWUvUH1mb3IoTD0wO0w8ODtMKyspe2xldCB5dD1PK0wqNCx3bj1HK0wqMixDbj15dCszLHBvPUw8ND8xOi0xLER0PUw9PT0yfHxMPT09M3x8TD09PTZ8fEw9PT03PzE6LTE7cy5wYWNrKHFlLmhpZ2gseSx5dCkseVtDbl09YXQueCxzLnBhY2socWUubG93LFQseXQpLFRbQ25dPWF0Lnkscy5wYWNrKHp0LF8seXQpLF9bQ25dPWF0Lnoscy5wYWNrKGt0LHcseXQpLHdbQ25dPUdlKnBvLHMucGFjayhjdCxFLHl0KTtsZXQgYW49TGUqRHQ7YW49PT0wJiZEdDwwJiYoYW49OSksRVtDbl09YW4saSYmKFJbeXRdPU10LmhpZ2gueCxSW3l0KzFdPU10LmhpZ2gueSxSW3l0KzJdPU10Lmxvdy54LFJbeXQrM109TXQubG93LnksQ1t5dF09LURlLnksQ1t5dCsxXT1EZS54LENbeXQrMl09QmUueSxDW3l0KzNdPS1CZS54LFNbeXRdPUd0LngsU1t5dCsxXT1HdC55LFNbeXQrMl09cXQueCxTW3l0KzNdPXF0LnksSVt3bl09UXQqcG8sYW49cG4qRHQsYW49PT0wJiZEdDwwJiYoYW49OSksSVt3bisxXT1hbil9bGV0IE50PUNGLCR0PU1GLEZ0PU9GLG9uPVNGLFVuPXhlLmZyb21DYXJ0b2dyYXBoaWNBcnJheShSRix4Riksam49VWguZ2V0TWluaW11bU1heGltdW1IZWlnaHRzKFVuLGMpLFNuPWpuLm1pbmltdW1UZXJyYWluSGVpZ2h0LHRvPWpuLm1heGltdW1UZXJyYWluSGVpZ2h0O2RlKz1NYXRoLmFicyhTbiksZGUrPU1hdGguYWJzKHRvKSxtUihDZSxXZSxTbix0byxOdCxGdCksbVIocmUsc2UsU24sdG8sJHQsb24pO2xldCBTdD1zLm11bHRpcGx5QnlTY2FsYXIoY3Qsay5FUFNJTE9ONSx3Uik7cy5hZGQoTnQsU3QsTnQpLHMuYWRkKCR0LFN0LCR0KSxzLmFkZChGdCxTdCxGdCkscy5hZGQob24sU3Qsb24pLHpoKE50LCR0KSx6aChGdCxvbikscy5wYWNrKE50LHAsVikscy5wYWNrKCR0LHAsViszKSxzLnBhY2sob24scCxWKzYpLHMucGFjayhGdCxwLFYrOSksU3Q9cy5tdWx0aXBseUJ5U2NhbGFyKGN0LC0yKmsuRVBTSUxPTjUsd1IpLHMuYWRkKE50LFN0LE50KSxzLmFkZCgkdCxTdCwkdCkscy5hZGQoRnQsU3QsRnQpLHMuYWRkKG9uLFN0LG9uKSx6aChOdCwkdCksemgoRnQsb24pLHMucGFjayhOdCxwLFYrMTIpLHMucGFjaygkdCxwLFYrMTUpLHMucGFjayhvbixwLFYrMTgpLHMucGFjayhGdCxwLFYrMjEpLEQrPTIsZCs9MyxHKz0xNixWKz0yNCxPKz0zMixjZSs9ZXQsbWUrPV90fWQ9MDtsZXQgeWU9MDtmb3IoZj0wO2Y8dTtmKyspe2ZvcihMPTA7TDxUUjtMKyspYltkK0xdPU1SW0xdK3llO3llKz04LGQrPVRSfWxldCBsZT1MRjtwZS5mcm9tVmVydGljZXModCxzLlpFUk8sMyxsZVswXSkscGUuZnJvbVZlcnRpY2VzKG8scy5aRVJPLDMsbGVbMV0pO2xldCBlZT1wZS5mcm9tQm91bmRpbmdTcGhlcmVzKGxlKTtlZS5yYWRpdXMrPWRlLyh1KjIpO2xldCBFZT17cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLG5vcm1hbGl6ZTohMSx2YWx1ZXM6cH0pLHN0YXJ0SGlBbmRGb3J3YXJkT2Zmc2V0WDpQaSh5KSxzdGFydExvQW5kRm9yd2FyZE9mZnNldFk6UGkoVCksc3RhcnROb3JtYWxBbmRGb3J3YXJkT2Zmc2V0WjpQaShfKSxlbmROb3JtYWxBbmRUZXh0dXJlQ29vcmRpbmF0ZU5vcm1hbGl6YXRpb25YOlBpKHcpLHJpZ2h0Tm9ybWFsQW5kVGV4dHVyZUNvb3JkaW5hdGVOb3JtYWxpemF0aW9uWTpQaShFKX07cmV0dXJuIGkmJihFZS5zdGFydEhpTG8yRD1QaShSKSxFZS5vZmZzZXRBbmRSaWdodDJEPVBpKFMpLEVlLnN0YXJ0RW5kTm9ybWFsczJEPVBpKEMpLEVlLnRleGNvb3JkTm9ybWFsaXphdGlvbjJEPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLG5vcm1hbGl6ZTohMSx2YWx1ZXM6SX0pKSxuZXcgUGUoe2F0dHJpYnV0ZXM6RWUsaW5kaWNlczpiLGJvdW5kaW5nU3BoZXJlOmVlfSl9ZnVuY3Rpb24gUGkobil7cmV0dXJuIG5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTo0LG5vcm1hbGl6ZTohMSx2YWx1ZXM6bn0pfXZhciB4ZyxlRixFUixhUixSUix4Uix0RixyUixpUixuRixvRixhRixyRix5ZyxpRixjRixzRixPUixmRixkRixHaCx1RixsRixoRixtRixiRixqaCxMaCxzUixmUixwRixnRixfRix1Uix5RixsUixBRixoUix3RixTUixDUixiUix3ZyxwUixnUixFRixfUixSRix4RixPRixTRixDRixNRixORixJRixUZyxFZyxQRixrRix2Rix5UixGRixERixCRixVRixBUixqRix3UixMRixNUixUUixPZyxOUj1YKCgpPT57Z2coKTtoYygpO0thKCk7RXQoKTtNZSgpO2d0KCk7Q3QoKTtzdCgpO2ZlKCk7VmUoKTtnMCgpO0hmKCk7ZnAoKTtQcigpO1h0KCk7WXQoKTtiaSgpO2plKCk7SW4oKTtwaSgpO1dvKCk7aG4oKTtfaSgpO3hnPVtubyx5bl0sZUY9eGcubGVuZ3RoLEVSPU1hdGguY29zKGsudG9SYWRpYW5zKDMwKSksYVI9TWF0aC5jb3Moay50b1JhZGlhbnMoMTUwKSksUlI9MCx4Uj0xZTM7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoa2kucHJvdG90eXBlLHtwYWNrZWRMZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiAxK3RoaXMuX3Bvc2l0aW9ucy5sZW5ndGgqMysxKzErMStLLnBhY2tlZExlbmd0aCsxKzF9fX0pO2tpLnNldFByb2plY3Rpb25BbmRFbGxpcHNvaWQ9ZnVuY3Rpb24obixlKXtsZXQgdD0wO2ZvcihsZXQgbz0wO288ZUY7bysrKWlmKGUgaW5zdGFuY2VvZiB4Z1tvXSl7dD1vO2JyZWFrfW4uX3Byb2plY3Rpb25JbmRleD10LG4uX2VsbGlwc29pZD1lLmVsbGlwc29pZH07dEY9bmV3IHMsclI9bmV3IHMsaVI9bmV3IHM7bkY9bmV3IGFlLG9GPW5ldyBzLGFGPW5ldyBzLHJGPW5ldyBzO3lnPW5ldyBhZTtraS5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz10Pz8wLGE9bi5fcG9zaXRpb25zLHI9YS5sZW5ndGg7ZVtvKytdPXI7Zm9yKGxldCBpPTA7aTxyOysraSl7bGV0IGY9YVtpXTtzLnBhY2soZixlLG8pLG8rPTN9cmV0dXJuIGVbbysrXT1uLmdyYW51bGFyaXR5LGVbbysrXT1uLmxvb3A/MTowLGVbbysrXT1uLmFyY1R5cGUsSy5wYWNrKG4uX2VsbGlwc29pZCxlLG8pLG8rPUsucGFja2VkTGVuZ3RoLGVbbysrXT1uLl9wcm9qZWN0aW9uSW5kZXgsZVtvXT1uLl9zY2VuZTNET25seT8xOjAsZX07a2kudW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1lPz8wLGE9bltvKytdLHI9bmV3IEFycmF5KGEpO2ZvcihsZXQgbT0wO208YTttKyspclttXT1zLnVucGFjayhuLG8pLG8rPTM7bGV0IGk9bltvKytdLGY9bltvKytdPT09MSxkPW5bbysrXSxjPUsudW5wYWNrKG4sbyk7bys9Sy5wYWNrZWRMZW5ndGg7bGV0IHU9bltvKytdLGw9bltvXT09PTE7cmV0dXJuIGcodCl8fCh0PW5ldyBraSh7cG9zaXRpb25zOnJ9KSksdC5fcG9zaXRpb25zPXIsdC5ncmFudWxhcml0eT1pLHQubG9vcD1mLHQuYXJjVHlwZT1kLHQuX2VsbGlwc29pZD1jLHQuX3Byb2plY3Rpb25JbmRleD11LHQuX3NjZW5lM0RPbmx5PWwsdH07aUY9bmV3IHMsY0Y9bmV3IHMsc0Y9bmV3IHMsT1I9bmV3IHMsZkY9MCxkRj0tMTtHaD1ubi5mcm9tUG9pbnROb3JtYWwocy5aRVJPLHMuVU5JVF9ZKSx1Rj1uZXcgcyxsRj1uZXcgcyxoRj1uZXcgcyxtRj1uZXcgcyxiRj1uZXcgcyxqaD1uZXcgcyxMaD1uZXcgYWUsc1I9bmV3IGFlLGZSPW5ldyBhZTtraS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihuKXtsZXQgZT0hbi5fc2NlbmUzRE9ubHksdD1uLmxvb3Asbz1uLl9lbGxpcHNvaWQsYT1uLmdyYW51bGFyaXR5LHI9bi5hcmNUeXBlLGk9bmV3IHhnW24uX3Byb2plY3Rpb25JbmRleF0obyksZj1SUixkPXhSLGMsdSxsPW4uX3Bvc2l0aW9ucyxtPWwubGVuZ3RoO209PT0yJiYodD0hMSk7bGV0IGgsYixwLHksVD1uZXcgWm8odm9pZCAwLHZvaWQgMCxvKSxfLHcsRSxSPVtsWzBdXTtmb3IodT0wO3U8bS0xO3UrKyloPWxbdV0sYj1sW3UrMV0sXz1Rbi5saW5lU2VnbWVudFBsYW5lKGgsYixHaCxqaCksZyhfKSYmIXMuZXF1YWxzRXBzaWxvbihfLGgsay5FUFNJTE9ONykmJiFzLmVxdWFsc0Vwc2lsb24oXyxiLGsuRVBTSUxPTjcpJiYobi5hcmNUeXBlPT09YnQuR0VPREVTSUM/Ui5wdXNoKHMuY2xvbmUoXykpOm4uYXJjVHlwZT09PWJ0LlJIVU1CJiYoRT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKF8sTGgpLmxvbmdpdHVkZSxwPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoaCxMaCkseT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGIsc1IpLFQuc2V0RW5kUG9pbnRzKHAseSksdz1ULmZpbmRJbnRlcnNlY3Rpb25XaXRoTG9uZ2l0dWRlKEUsZlIpLF89by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih3LGpoKSxnKF8pJiYhcy5lcXVhbHNFcHNpbG9uKF8saCxrLkVQU0lMT043KSYmIXMuZXF1YWxzRXBzaWxvbihfLGIsay5FUFNJTE9ONykmJlIucHVzaChzLmNsb25lKF8pKSkpLFIucHVzaChiKTt0JiYoaD1sW20tMV0sYj1sWzBdLF89UW4ubGluZVNlZ21lbnRQbGFuZShoLGIsR2gsamgpLGcoXykmJiFzLmVxdWFsc0Vwc2lsb24oXyxoLGsuRVBTSUxPTjcpJiYhcy5lcXVhbHNFcHNpbG9uKF8sYixrLkVQU0lMT043KSYmKG4uYXJjVHlwZT09PWJ0LkdFT0RFU0lDP1IucHVzaChzLmNsb25lKF8pKTpuLmFyY1R5cGU9PT1idC5SSFVNQiYmKEU9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhfLExoKS5sb25naXR1ZGUscD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGgsTGgpLHk9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhiLHNSKSxULnNldEVuZFBvaW50cyhwLHkpLHc9VC5maW5kSW50ZXJzZWN0aW9uV2l0aExvbmdpdHVkZShFLGZSKSxfPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odyxqaCksZyhfKSYmIXMuZXF1YWxzRXBzaWxvbihfLGgsay5FUFNJTE9ONykmJiFzLmVxdWFsc0Vwc2lsb24oXyxiLGsuRVBTSUxPTjcpJiZSLnB1c2gocy5jbG9uZShfKSkpKSk7bGV0IFM9Ui5sZW5ndGgsQz1uZXcgQXJyYXkoUyk7Zm9yKHU9MDt1PFM7dSsrKXtsZXQgSj1hZS5mcm9tQ2FydGVzaWFuKFJbdV0sbyk7Si5oZWlnaHQ9MCxDW3VdPUp9aWYoQz14bihDLGFlLmVxdWFsc0Vwc2lsb24pLFM9Qy5sZW5ndGgsUzwyKXJldHVybjtsZXQgST1bXSxNPVtdLFA9W10sRj1bXSxBPXVGLHg9bEYsTj1oRix2PW1GLFU9YkYsTD1DWzBdLEQ9Q1sxXSxHPUNbUy0xXTtmb3IoQT16byhvLEcsZixBKSx2PXpvKG8sRCxmLHYpLHg9em8obyxMLGYseCksTj16byhvLEwsZCxOKSx0P1U9QWcoQSx4LE4sdixVKTpVPVJnKEwsRCxkLG8sVSkscy5wYWNrKFUsTSwwKSxzLnBhY2soeCxQLDApLHMucGFjayhOLEYsMCksSS5wdXNoKEwubGF0aXR1ZGUpLEkucHVzaChMLmxvbmdpdHVkZSksX2coTCxELGYsZCxhLHIsbyxNLFAsRixJKSx1PTE7dTxTLTE7Kyt1KXtBPXMuY2xvbmUoeCxBKSx4PXMuY2xvbmUodix4KTtsZXQgSj1DW3VdO3pvKG8sSixkLE4pLHpvKG8sQ1t1KzFdLGYsdiksQWcoQSx4LE4sdixVKSxjPU0ubGVuZ3RoLHMucGFjayhVLE0sYykscy5wYWNrKHgsUCxjKSxzLnBhY2soTixGLGMpLEkucHVzaChKLmxhdGl0dWRlKSxJLnB1c2goSi5sb25naXR1ZGUpLF9nKENbdV0sQ1t1KzFdLGYsZCxhLHIsbyxNLFAsRixJKX1sZXQgVj1DW1MtMV0sTz1DW1MtMl07aWYoeD16byhvLFYsZix4KSxOPXpvKG8sVixkLE4pLHQpe2xldCBKPUNbMF07QT16byhvLE8sZixBKSx2PXpvKG8sSixmLHYpLFU9QWcoQSx4LE4sdixVKX1lbHNlIFU9UmcoTyxWLGQsbyxVKTtpZihjPU0ubGVuZ3RoLHMucGFjayhVLE0sYykscy5wYWNrKHgsUCxjKSxzLnBhY2soTixGLGMpLEkucHVzaChWLmxhdGl0dWRlKSxJLnB1c2goVi5sb25naXR1ZGUpLHQpe2ZvcihfZyhWLEwsZixkLGEscixvLE0sUCxGLEkpLGM9TS5sZW5ndGgsdT0wO3U8MzsrK3UpTVtjK3VdPU1bdV0sUFtjK3VdPVBbdV0sRltjK3VdPUZbdV07SS5wdXNoKEwubGF0aXR1ZGUpLEkucHVzaChMLmxvbmdpdHVkZSl9cmV0dXJuIHpGKHQsaSxQLEYsTSxJLGUpfTtwRj1uZXcgcyxnRj1uZXcgWixfRj1uZXcgWWU7dVI9bmV3IGFlLHlGPW5ldyBzLGxSPW5ldyBzO0FGPW5ldyBzLGhSPW5ldyBzO3dGPW5ldyBzO1NSPW5ldyBhZSxDUj1uZXcgYWUsYlI9bmV3IHMsd2c9bmV3IHMscFI9bmV3IHMsZ1I9bmV3IHMsRUY9bmV3IHMsX1I9bmV3IHMsUkY9W1NSLENSXSx4Rj1uZXcgeGUsT0Y9bmV3IHMsU0Y9bmV3IHMsQ0Y9bmV3IHMsTUY9bmV3IHMsTkY9bmV3IHMsSUY9bmV3IHMsVGc9bmV3IHMsRWc9bmV3IHMsUEY9bmV3IHMsa0Y9bmV3IHMsdkY9bmV3IHMseVI9bmV3IHMsRkY9bmV3IHMsREY9bmV3IHMsQkY9bmV3IGFjLFVGPW5ldyBhYyxBUj1uZXcgcyxqRj1uZXcgcyx3Uj1uZXcgcyxMRj1bbmV3IHBlLG5ldyBwZV0sTVI9WzAsMiwxLDAsMywyLDAsNywzLDAsNCw3LDAsNSw0LDAsMSw1LDUsNyw0LDUsNiw3LDUsMiw2LDUsMSwyLDMsNiwyLDMsNyw2XSxUUj1NUi5sZW5ndGg7a2kuX3Byb2plY3ROb3JtYWw9bGQ7T2c9a2l9KTt2YXIgU2c9e307JGUoU2cse2RlZmF1bHQ6KCk9PlZGfSk7ZnVuY3Rpb24gR0YobixlKXtyZXR1cm4gVWguaW5pdGlhbGl6ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZyhlKSYmKG49T2cudW5wYWNrKG4sZSkpLE9nLmNyZWF0ZUdlb21ldHJ5KG4pfSl9dmFyIFZGLENnPVgoKCk9PntnZygpO2ZlKCk7TlIoKTtWRj1HRn0pO2Z1bmN0aW9uIE1zKG4pe249bj8/T2UuRU1QVFlfT0JKRUNUO2xldCBlPW4udmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxUO3RoaXMuX3ZlcnRleEZvcm1hdD1lLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBsYW5lR2VvbWV0cnkifXZhciBJUixIRixWaCxIaCxNZyxQUj1YKCgpPT57RXQoKTtNZSgpO0N0KCk7c3QoKTtmZSgpO1h0KCk7WXQoKTtybigpO3RuKCk7Q28oKTtNcy5wYWNrZWRMZW5ndGg9aGUucGFja2VkTGVuZ3RoO01zLnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0PXQ/PzAsaGUucGFjayhuLl92ZXJ0ZXhGb3JtYXQsZSx0KSxlfTtJUj1uZXcgaGUsSEY9e3ZlcnRleEZvcm1hdDpJUn07TXMudW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtlPWU/PzA7bGV0IG89aGUudW5wYWNrKG4sZSxJUik7cmV0dXJuIGcodCk/KHQuX3ZlcnRleEZvcm1hdD1oZS5jbG9uZShvLHQuX3ZlcnRleEZvcm1hdCksdCk6bmV3IE1zKEhGKX07Vmg9bmV3IHMoLS41LC0uNSwwKSxIaD1uZXcgcyguNSwuNSwwKTtNcy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihuKXtsZXQgZT1uLl92ZXJ0ZXhGb3JtYXQsdD1uZXcgUWUsbyxhO2lmKGUucG9zaXRpb24pe2lmKGE9bmV3IEZsb2F0NjRBcnJheSgxMiksYVswXT1WaC54LGFbMV09VmgueSxhWzJdPTAsYVszXT1IaC54LGFbNF09VmgueSxhWzVdPTAsYVs2XT1IaC54LGFbN109SGgueSxhWzhdPTAsYVs5XT1WaC54LGFbMTBdPUhoLnksYVsxMV09MCx0LnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6YX0pLGUubm9ybWFsKXtsZXQgcj1uZXcgRmxvYXQzMkFycmF5KDEyKTtyWzBdPTAsclsxXT0wLHJbMl09MSxyWzNdPTAscls0XT0wLHJbNV09MSxyWzZdPTAscls3XT0wLHJbOF09MSxyWzldPTAsclsxMF09MCxyWzExXT0xLHQubm9ybWFsPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpyfSl9aWYoZS5zdCl7bGV0IHI9bmV3IEZsb2F0MzJBcnJheSg4KTtyWzBdPTAsclsxXT0wLHJbMl09MSxyWzNdPTAscls0XT0xLHJbNV09MSxyWzZdPTAscls3XT0xLHQuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOnJ9KX1pZihlLnRhbmdlbnQpe2xldCByPW5ldyBGbG9hdDMyQXJyYXkoMTIpO3JbMF09MSxyWzFdPTAsclsyXT0wLHJbM109MSxyWzRdPTAscls1XT0wLHJbNl09MSxyWzddPTAscls4XT0wLHJbOV09MSxyWzEwXT0wLHJbMTFdPTAsdC50YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpyfSl9aWYoZS5iaXRhbmdlbnQpe2xldCByPW5ldyBGbG9hdDMyQXJyYXkoMTIpO3JbMF09MCxyWzFdPTEsclsyXT0wLHJbM109MCxyWzRdPTEscls1XT0wLHJbNl09MCxyWzddPTEscls4XT0wLHJbOV09MCxyWzEwXT0xLHJbMTFdPTAsdC5iaXRhbmdlbnQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnJ9KX1vPW5ldyBVaW50MTZBcnJheSg2KSxvWzBdPTAsb1sxXT0xLG9bMl09MixvWzNdPTAsb1s0XT0yLG9bNV09M31yZXR1cm4gbmV3IFBlKHthdHRyaWJ1dGVzOnQsaW5kaWNlczpvLHByaW1pdGl2ZVR5cGU6RmUuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOm5ldyBwZShzLlpFUk8sTWF0aC5zcXJ0KDIpKX0pfTtNZz1Nc30pO3ZhciBOZz17fTskZShOZyx7ZGVmYXVsdDooKT0+cUZ9KTtmdW5jdGlvbiBLRihuLGUpe3JldHVybiBnKGUpJiYobj1NZy51bnBhY2sobixlKSksTWcuY3JlYXRlR2VvbWV0cnkobil9dmFyIHFGLElnPVgoKCk9PntmZSgpO1BSKCk7cUY9S0Z9KTtmdW5jdGlvbiBOcygpe3RoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBsYW5lT3V0bGluZUdlb21ldHJ5In12YXIgdmksS2gsUGcsa1I9WCgoKT0+e0V0KCk7TWUoKTtDdCgpO2ZlKCk7WHQoKTtZdCgpO3JuKCk7dG4oKTtOcy5wYWNrZWRMZW5ndGg9MDtOcy5wYWNrPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIGV9O05zLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIGcodCk/dDpuZXcgTnN9O3ZpPW5ldyBzKC0uNSwtLjUsMCksS2g9bmV3IHMoLjUsLjUsMCk7TnMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oKXtsZXQgbj1uZXcgUWUsZT1uZXcgVWludDE2QXJyYXkoOCksdD1uZXcgRmxvYXQ2NEFycmF5KDEyKTtyZXR1cm4gdFswXT12aS54LHRbMV09dmkueSx0WzJdPXZpLnosdFszXT1LaC54LHRbNF09dmkueSx0WzVdPXZpLnosdFs2XT1LaC54LHRbN109S2gueSx0WzhdPXZpLnosdFs5XT12aS54LHRbMTBdPUtoLnksdFsxMV09dmkueixuLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6dH0pLGVbMF09MCxlWzFdPTEsZVsyXT0xLGVbM109MixlWzRdPTIsZVs1XT0zLGVbNl09MyxlWzddPTAsbmV3IFBlKHthdHRyaWJ1dGVzOm4saW5kaWNlczplLHByaW1pdGl2ZVR5cGU6RmUuTElORVMsYm91bmRpbmdTcGhlcmU6bmV3IHBlKHMuWkVSTyxNYXRoLnNxcnQoMikpfSl9O1BnPU5zfSk7dmFyIGtnPXt9OyRlKGtnLHtkZWZhdWx0OigpPT5YRn0pO2Z1bmN0aW9uIFdGKG4sZSl7cmV0dXJuIGcoZSkmJihuPVBnLnVucGFjayhuLGUpKSxQZy5jcmVhdGVHZW9tZXRyeShuKX12YXIgWEYsdmc9WCgoKT0+e2ZlKCk7a1IoKTtYRj1XRn0pO2Z1bmN0aW9uIERuKG4sZSl7dGhpcy5wb3NpdGlvbj1uLGcodGhpcy5wb3NpdGlvbil8fCh0aGlzLnBvc2l0aW9uPW5ldyBZKSx0aGlzLnRhbmdlbnRQbGFuZT1lLGcodGhpcy50YW5nZW50UGxhbmUpfHwodGhpcy50YW5nZW50UGxhbmU9RG4uTk9SVEhfUE9MRV9UQU5HRU5UX1BMQU5FKX12YXIgSXMsWUYsSkYsWkYsUUYsY2EsdlI9WCgoKT0+e3Z0KCk7TWUoKTtndCgpO2ZlKCk7VmUoKTtwcygpO2JpKCk7amUoKTtGZigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERuLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YW5nZW50UGxhbmUuZWxsaXBzb2lkfX0seDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24ueH19LHk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uLnl9fSxjb25mb3JtYWxMYXRpdHVkZTp7Z2V0OmZ1bmN0aW9uKCl7bGV0IG49WS5tYWduaXR1ZGUodGhpcy5wb3NpdGlvbiksZT0yKnRoaXMuZWxsaXBzb2lkLm1heGltdW1SYWRpdXM7cmV0dXJuIHRoaXMudGFuZ2VudFBsYW5lLnBsYW5lLm5vcm1hbC56KihrLlBJX09WRVJfVFdPLTIqTWF0aC5hdGFuMihuLGUpKX19LGxvbmdpdHVkZTp7Z2V0OmZ1bmN0aW9uKCl7bGV0IG49ay5QSV9PVkVSX1RXTytNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpO3JldHVybiBuPk1hdGguUEkmJihuLT1rLlRXT19QSSksbn19fSk7SXM9bmV3IGFlLFlGPW5ldyBzO0RuLnByb3RvdHlwZS5nZXRMYXRpdHVkZT1mdW5jdGlvbihuKXtnKG4pfHwobj1LLmRlZmF1bHQpLElzLmxhdGl0dWRlPXRoaXMuY29uZm9ybWFsTGF0aXR1ZGUsSXMubG9uZ2l0dWRlPXRoaXMubG9uZ2l0dWRlLElzLmhlaWdodD0wO2xldCBlPXRoaXMuZWxsaXBzb2lkLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKElzLFlGKTtyZXR1cm4gbi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLElzKSxJcy5sYXRpdHVkZX07SkY9bmV3IGNyLFpGPW5ldyBzLFFGPW5ldyBzO0RuLmZyb21DYXJ0ZXNpYW49ZnVuY3Rpb24obixlKXtsZXQgdD1rLnNpZ25Ob3RaZXJvKG4ueiksbz1Ebi5OT1JUSF9QT0xFX1RBTkdFTlRfUExBTkUsYT1Ebi5TT1VUSF9QT0xFO3Q8MCYmKG89RG4uU09VVEhfUE9MRV9UQU5HRU5UX1BMQU5FLGE9RG4uTk9SVEhfUE9MRSk7bGV0IHI9SkY7ci5vcmlnaW49by5lbGxpcHNvaWQuc2NhbGVUb0dlb2NlbnRyaWNTdXJmYWNlKG4sci5vcmlnaW4pLHIuZGlyZWN0aW9uPXMuc3VidHJhY3Qoci5vcmlnaW4sYSxaRikscy5ub3JtYWxpemUoci5kaXJlY3Rpb24sci5kaXJlY3Rpb24pO2xldCBpPVFuLnJheVBsYW5lKHIsby5wbGFuZSxRRiksZj1zLnN1YnRyYWN0KGksYSxpKSxkPXMuZG90KG8ueEF4aXMsZiksYz10KnMuZG90KG8ueUF4aXMsZik7cmV0dXJuIGcoZSk/KGUucG9zaXRpb249bmV3IFkoZCxjKSxlLnRhbmdlbnRQbGFuZT1vLGUpOm5ldyBEbihuZXcgWShkLGMpLG8pfTtEbi5mcm9tQ2FydGVzaWFuQXJyYXk9ZnVuY3Rpb24obixlKXtsZXQgdD1uLmxlbmd0aDtnKGUpP2UubGVuZ3RoPXQ6ZT1uZXcgQXJyYXkodCk7Zm9yKGxldCBvPTA7bzx0O28rKyllW29dPURuLmZyb21DYXJ0ZXNpYW4obltvXSxlW29dKTtyZXR1cm4gZX07RG4uY2xvbmU9ZnVuY3Rpb24obixlKXtpZihnKG4pKXJldHVybiBnKGUpPyhlLnBvc2l0aW9uPW4ucG9zaXRpb24sZS50YW5nZW50UGxhbmU9bi50YW5nZW50UGxhbmUsZSk6bmV3IERuKG4ucG9zaXRpb24sbi50YW5nZW50UGxhbmUpfTtEbi5IQUxGX1VOSVRfU1BIRVJFPU9iamVjdC5mcmVlemUobmV3IEsoLjUsLjUsLjUpKTtEbi5OT1JUSF9QT0xFPU9iamVjdC5mcmVlemUobmV3IHMoMCwwLC41KSk7RG4uU09VVEhfUE9MRT1PYmplY3QuZnJlZXplKG5ldyBzKDAsMCwtLjUpKTtEbi5OT1JUSF9QT0xFX1RBTkdFTlRfUExBTkU9T2JqZWN0LmZyZWV6ZShuZXcgQW8oRG4uTk9SVEhfUE9MRSxEbi5IQUxGX1VOSVRfU1BIRVJFKSk7RG4uU09VVEhfUE9MRV9UQU5HRU5UX1BMQU5FPU9iamVjdC5mcmVlemUobmV3IEFvKERuLlNPVVRIX1BPTEUsRG4uSEFMRl9VTklUX1NQSEVSRSkpO2NhPURufSk7ZnVuY3Rpb24gZUQobixlLHQsbyl7bGV0IHI9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhuLCRGKS5oZWlnaHQsaT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsRlIpO2kuaGVpZ2h0PXIsby5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihpLGUpO2xldCBmPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxGUik7Zi5oZWlnaHQ9ci0xMDAsby5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihmLHQpfWZ1bmN0aW9uIEZnKG4pe2xldCBlPW4udmVydGV4Rm9ybWF0LHQ9bi5nZW9tZXRyeSxvPW4uc2hhZG93Vm9sdW1lLGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxyPWcodC5hdHRyaWJ1dGVzLnN0KT90LmF0dHJpYnV0ZXMuc3QudmFsdWVzOnZvaWQgMCxpPWEubGVuZ3RoLGY9bi53YWxsLGQ9bi50b3B8fGYsYz1uLmJvdHRvbXx8ZjtpZihlLnN0fHxlLm5vcm1hbHx8ZS50YW5nZW50fHxlLmJpdGFuZ2VudHx8byl7bGV0IHU9bi5ib3VuZGluZ1JlY3RhbmdsZSxsPW4ucm90YXRpb25BeGlzLG09bi5wcm9qZWN0VG8yZCxoPW4uZWxsaXBzb2lkLGI9bi5zdFJvdGF0aW9uLHA9bi5wZXJQb3NpdGlvbkhlaWdodCx5PWNEO3kueD11LngseS55PXUueTtsZXQgVD1lLnN0P25ldyBGbG9hdDMyQXJyYXkoMiooaS8zKSk6dm9pZCAwLF87ZS5ub3JtYWwmJihwJiZkJiYhZj9fPXQuYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzOl89bmV3IEZsb2F0MzJBcnJheShpKSk7bGV0IHc9ZS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoaSk6dm9pZCAwLEU9ZS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShpKTp2b2lkIDAsUj1vP25ldyBGbG9hdDMyQXJyYXkoaSk6dm9pZCAwLFM9MCxDPTAsST1uRCxNPW9ELFA9YUQsRj0hMCxBPWRELHg9dUQ7aWYoYiE9PTApe2xldCBVPVllLmZyb21BeGlzQW5nbGUobCxiLEJSKTtBPVouZnJvbVF1YXRlcm5pb24oVSxBKSxVPVllLmZyb21BeGlzQW5nbGUobCwtYixCUikseD1aLmZyb21RdWF0ZXJuaW9uKFUseCl9ZWxzZSBBPVouY2xvbmUoWi5JREVOVElUWSxBKSx4PVouY2xvbmUoWi5JREVOVElUWSx4KTtsZXQgTj0wLHY9MDtkJiZjJiYoTj1pLzIsdj1pLzMsaS89Mik7Zm9yKGxldCBVPTA7VTxpO1UrPTMpe2xldCBMPXMuZnJvbUFycmF5KGEsVSxmRCk7aWYoZS5zdCYmIWcocikpe2xldCBEPVoubXVsdGlwbHlCeVZlY3RvcihBLEwsdEQpO0Q9aC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKEQsRCk7bGV0IEc9bShbRF0sc0QpWzBdO1kuc3VidHJhY3QoRyx5LEcpO2xldCBWPWsuY2xhbXAoRy54L3Uud2lkdGgsMCwxKSxPPWsuY2xhbXAoRy55L3UuaGVpZ2h0LDAsMSk7YyYmKFRbUyt2XT1WLFRbUysxK3ZdPU8pLGQmJihUW1NdPVYsVFtTKzFdPU8pLFMrPTJ9aWYoZS5ub3JtYWx8fGUudGFuZ2VudHx8ZS5iaXRhbmdlbnR8fG8pe2xldCBEPUMrMSxHPUMrMjtpZihmKXtpZihVKzM8aSl7bGV0IFY9cy5mcm9tQXJyYXkoYSxVKzMsckQpO2lmKEYpe2xldCBPPXMuZnJvbUFycmF5KGEsVStpLGlEKTtwJiZlRChMLFYsTyxoKSxzLnN1YnRyYWN0KFYsTCxWKSxzLnN1YnRyYWN0KE8sTCxPKSxJPXMubm9ybWFsaXplKHMuY3Jvc3MoTyxWLEkpLEkpLEY9ITF9cy5lcXVhbHNFcHNpbG9uKFYsTCxrLkVQU0lMT04xMCkmJihGPSEwKX0oZS50YW5nZW50fHxlLmJpdGFuZ2VudCkmJihQPWguZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEwsUCksZS50YW5nZW50JiYoTT1zLm5vcm1hbGl6ZShzLmNyb3NzKFAsSSxNKSxNKSkpfWVsc2UgST1oLmdlb2RldGljU3VyZmFjZU5vcm1hbChMLEkpLChlLnRhbmdlbnR8fGUuYml0YW5nZW50KSYmKHAmJihxaD1zLmZyb21BcnJheShfLEMscWgpLHByPXMuY3Jvc3Mocy5VTklUX1oscWgscHIpLHByPXMubm9ybWFsaXplKFoubXVsdGlwbHlCeVZlY3Rvcih4LHByLHByKSxwciksZS5iaXRhbmdlbnQmJihQcz1zLm5vcm1hbGl6ZShzLmNyb3NzKHFoLHByLFBzKSxQcykpKSxNPXMuY3Jvc3Mocy5VTklUX1osSSxNKSxNPXMubm9ybWFsaXplKFoubXVsdGlwbHlCeVZlY3Rvcih4LE0sTSksTSksZS5iaXRhbmdlbnQmJihQPXMubm9ybWFsaXplKHMuY3Jvc3MoSSxNLFApLFApKSk7ZS5ub3JtYWwmJihuLndhbGw/KF9bQytOXT1JLngsX1tEK05dPUkueSxfW0crTl09SS56KTpjJiYoX1tDK05dPS1JLngsX1tEK05dPS1JLnksX1tHK05dPS1JLnopLChkJiYhcHx8ZikmJihfW0NdPUkueCxfW0RdPUkueSxfW0ddPUkueikpLG8mJihmJiYoST1oLmdlb2RldGljU3VyZmFjZU5vcm1hbChMLEkpKSxSW0MrTl09LUkueCxSW0QrTl09LUkueSxSW0crTl09LUkueiksZS50YW5nZW50JiYobi53YWxsPyh3W0MrTl09TS54LHdbRCtOXT1NLnksd1tHK05dPU0ueik6YyYmKHdbQytOXT0tTS54LHdbRCtOXT0tTS55LHdbRytOXT0tTS56KSxkJiYocD8od1tDXT1wci54LHdbRF09cHIueSx3W0ddPXByLnopOih3W0NdPU0ueCx3W0RdPU0ueSx3W0ddPU0ueikpKSxlLmJpdGFuZ2VudCYmKGMmJihFW0MrTl09UC54LEVbRCtOXT1QLnksRVtHK05dPVAueiksZCYmKHA/KEVbQ109UHMueCxFW0RdPVBzLnksRVtHXT1Qcy56KTooRVtDXT1QLngsRVtEXT1QLnksRVtHXT1QLnopKSksQys9M319ZS5zdCYmIWcocikmJih0LmF0dHJpYnV0ZXMuc3Q9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOlR9KSksZS5ub3JtYWwmJih0LmF0dHJpYnV0ZXMubm9ybWFsPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpffSkpLGUudGFuZ2VudCYmKHQuYXR0cmlidXRlcy50YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp3fSkpLGUuYml0YW5nZW50JiYodC5hdHRyaWJ1dGVzLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6RX0pKSxvJiYodC5hdHRyaWJ1dGVzLmV4dHJ1ZGVEaXJlY3Rpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlJ9KSl9aWYobi5leHRydWRlJiZnKG4ub2Zmc2V0QXR0cmlidXRlKSl7bGV0IHU9YS5sZW5ndGgvMyxsPW5ldyBVaW50OEFycmF5KHUpO2lmKG4ub2Zmc2V0QXR0cmlidXRlPT09b3QuVE9QKWQmJmN8fGY/bD1sLmZpbGwoMSwwLHUvMik6ZCYmKGw9bC5maWxsKDEpKTtlbHNle2xldCBtPW4ub2Zmc2V0QXR0cmlidXRlPT09b3QuTk9ORT8wOjE7bD1sLmZpbGwobSl9dC5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmx9KX1yZXR1cm4gdH1mdW5jdGlvbiBsRChuLGUsdCxvLGEscixpLGYsZCxjKXtsZXQgdT17d2FsbHM6W119LGw7aWYoaXx8Zil7bGV0IF89aXQuY3JlYXRlR2VvbWV0cnlGcm9tUG9zaXRpb25zKG4sZSx0LG8scixkLGMpLHc9Xy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxFPV8uaW5kaWNlcyxSLFM7aWYoaSYmZil7bGV0IEM9dy5jb25jYXQodyk7Uj1DLmxlbmd0aC8zLFM9SWUuY3JlYXRlVHlwZWRBcnJheShSLEUubGVuZ3RoKjIpLFMuc2V0KEUpO2xldCBJPUUubGVuZ3RoLE09Ui8yO2ZvcihsPTA7bDxJO2wrPTMpe2xldCBQPVNbbF0rTSxGPVNbbCsxXStNLEE9U1tsKzJdK007U1tsK0ldPUEsU1tsKzErSV09RixTW2wrMitJXT1QfWlmKF8uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9QyxyJiZkLm5vcm1hbCl7bGV0IFA9Xy5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXM7Xy5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXM9bmV3IEZsb2F0MzJBcnJheShDLmxlbmd0aCksXy5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXMuc2V0KFApfWlmKGQuc3QmJmcodCkpe2xldCBQPV8uYXR0cmlidXRlcy5zdC52YWx1ZXM7Xy5hdHRyaWJ1dGVzLnN0LnZhbHVlcz1uZXcgRmxvYXQzMkFycmF5KFIqMiksXy5hdHRyaWJ1dGVzLnN0LnZhbHVlcz1QLmNvbmNhdChQKX1fLmluZGljZXM9U31lbHNlIGlmKGYpe2ZvcihSPXcubGVuZ3RoLzMsUz1JZS5jcmVhdGVUeXBlZEFycmF5KFIsRS5sZW5ndGgpLGw9MDtsPEUubGVuZ3RoO2wrPTMpU1tsXT1FW2wrMl0sU1tsKzFdPUVbbCsxXSxTW2wrMl09RVtsXTtfLmluZGljZXM9U311LnRvcEFuZEJvdHRvbT1uZXcgbG8oe2dlb21ldHJ5Ol99KX1sZXQgbT1hLm91dGVyUmluZyxoPUFvLmZyb21Qb2ludHMobSxuKSxiPWgucHJvamVjdFBvaW50c09udG9QbGFuZShtLFVSKSxwPXd0LmNvbXB1dGVXaW5kaW5nT3JkZXIyRChiKTtwPT09TW8uQ0xPQ0tXSVNFJiYobT1tLnNsaWNlKCkucmV2ZXJzZSgpKTtsZXQgeT1pdC5jb21wdXRlV2FsbEdlb21ldHJ5KG0sdCxuLG8scixjKTt1LndhbGxzLnB1c2gobmV3IGxvKHtnZW9tZXRyeTp5fSkpO2xldCBUPWEuaG9sZXM7Zm9yKGw9MDtsPFQubGVuZ3RoO2wrKyl7bGV0IF89VFtsXTtiPWgucHJvamVjdFBvaW50c09udG9QbGFuZShfLFVSKSxwPXd0LmNvbXB1dGVXaW5kaW5nT3JkZXIyRChiKSxwPT09TW8uQ09VTlRFUl9DTE9DS1dJU0UmJihfPV8uc2xpY2UoKS5yZXZlcnNlKCkpLHk9aXQuY29tcHV0ZVdhbGxHZW9tZXRyeShfLHQsbixvLHIsYyksdS53YWxscy5wdXNoKG5ldyBsbyh7Z2VvbWV0cnk6eX0pKX1yZXR1cm4gdX1mdW5jdGlvbiBNYShuKXtsZXQgZT1uLnBvbHlnb25IaWVyYXJjaHksdD1uLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVCxvPW4uZWxsaXBzb2lkPz9LLmRlZmF1bHQsYT1uLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxyPW4uc3RSb3RhdGlvbj8/MCxpPW4udGV4dHVyZUNvb3JkaW5hdGVzLGY9bi5wZXJQb3NpdGlvbkhlaWdodD8/ITEsZD1mJiZnKG4uZXh0cnVkZWRIZWlnaHQpLGM9bi5oZWlnaHQ/PzAsdT1uLmV4dHJ1ZGVkSGVpZ2h0Pz9jO2lmKCFkKXtsZXQgbD1NYXRoLm1heChjLHUpO3U9TWF0aC5taW4oYyx1KSxjPWx9dGhpcy5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKHQpLHRoaXMuX2VsbGlwc29pZD1LLmNsb25lKG8pLHRoaXMuX2dyYW51bGFyaXR5PWEsdGhpcy5fc3RSb3RhdGlvbj1yLHRoaXMuX2hlaWdodD1jLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PXUsdGhpcy5fY2xvc2VUb3A9bi5jbG9zZVRvcD8/ITAsdGhpcy5fY2xvc2VCb3R0b209bi5jbG9zZUJvdHRvbT8/ITAsdGhpcy5fcG9seWdvbkhpZXJhcmNoeT1lLHRoaXMuX3BlclBvc2l0aW9uSGVpZ2h0PWYsdGhpcy5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPWQsdGhpcy5fc2hhZG93Vm9sdW1lPW4uc2hhZG93Vm9sdW1lPz8hMSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5Z29uR2VvbWV0cnkiLHRoaXMuX29mZnNldEF0dHJpYnV0ZT1uLm9mZnNldEF0dHJpYnV0ZSx0aGlzLl9hcmNUeXBlPW4uYXJjVHlwZT8/YnQuR0VPREVTSUMsdGhpcy5fcmVjdGFuZ2xlPXZvaWQgMCx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPXZvaWQgMCx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZXM9aSx0aGlzLnBhY2tlZExlbmd0aD1pdC5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKGUscykrSy5wYWNrZWRMZW5ndGgraGUucGFja2VkTGVuZ3RoKyhpP2l0LmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgoaSxZKToxKSsxMn1mdW5jdGlvbiBqUihuLGUsdCxvLGEscil7bGV0IGk9bi5sb25naXR1ZGUsZj1pPj0wP2k6aStrLlRXT19QSTthLndlc3RPdmVySWRsPU1hdGgubWluKGEud2VzdE92ZXJJZGwsZiksYS5lYXN0T3ZlcklkbD1NYXRoLm1heChhLmVhc3RPdmVySWRsLGYpLHIud2VzdD1NYXRoLm1pbihyLndlc3QsaSksci5lYXN0PU1hdGgubWF4KHIuZWFzdCxpKTtsZXQgZD1uLmdldExhdGl0dWRlKHQpLGM9ZDtpZihyLnNvdXRoPU1hdGgubWluKHIuc291dGgsZCksci5ub3J0aD1NYXRoLm1heChyLm5vcnRoLGQpLG8hPT1idC5SSFVNQil7bGV0IG09WS5zdWJ0cmFjdChlLnBvc2l0aW9uLG4ucG9zaXRpb24scEQpLGg9WS5kb3QoZS5wb3NpdGlvbixtKS9ZLmRvdChtLG0pO2lmKGg+MCYmaDwxKXtsZXQgYj1ZLmFkZChlLnBvc2l0aW9uLFkubXVsdGlwbHlCeVNjYWxhcihtLC1oLG0pLGdEKSxwPWNhLmNsb25lKGUsX0QpO3AucG9zaXRpb249YjtsZXQgeT1wLmdldExhdGl0dWRlKHQpO3Iuc291dGg9TWF0aC5taW4oci5zb3V0aCx5KSxyLm5vcnRoPU1hdGgubWF4KHIubm9ydGgseSksTWF0aC5hYnMoZCk+TWF0aC5hYnMoeSkmJihjPXkpfX1sZXQgdT1lLngqbi55LW4ueCplLnksbD1NYXRoLnNpZ24odSk7bCE9PTAmJihsKj1ZLmFuZ2xlQmV0d2VlbihlLnBvc2l0aW9uLG4ucG9zaXRpb24pKSxjPj0wJiYoYS5ub3J0aEFuZ2xlKz1sKSxjPD0wJiYoYS5zb3V0aEFuZ2xlKz1sKX1mdW5jdGlvbiB3RChuLGUsdCl7cmV0dXJuIG4uaGVpZ2h0Pj1rLlBJfHxuLndpZHRoPj1rLlBJP2NhLmZyb21DYXJ0ZXNpYW4oZVswXSxBRCkudGFuZ2VudFBsYW5lOkFvLmZyb21Qb2ludHMoZSx0KX1mdW5jdGlvbiBURChuLGUsdCl7cmV0dXJuKG8sYSk9PntpZihuLmhlaWdodD49ay5QSXx8bi53aWR0aD49ay5QSSl7aWYobi5zb3V0aDwwJiZuLm5vcnRoPjApe2coYSl8fChhPVtdKTtmb3IobGV0IGk9MDtpPG8ubGVuZ3RoOysraSl7bGV0IGY9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvW2ldLHpSKTthW2ldPW5ldyBZKGYubG9uZ2l0dWRlL2suUEksZi5sYXRpdHVkZS9rLlBJX09WRVJfVFdPKX1yZXR1cm4gYS5sZW5ndGg9by5sZW5ndGgsYX1yZXR1cm4gY2EuZnJvbUNhcnRlc2lhbkFycmF5KG8sYSl9cmV0dXJuIEFvLmZyb21Qb2ludHMoZSx0KS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKG8sYSl9fWZ1bmN0aW9uIEVEKG4sZSx0KXtpZihuLmhlaWdodD49ay5QSXx8bi53aWR0aD49ay5QSSlyZXR1cm4oYSxyKT0+e2lmKG4uc291dGg8MCYmbi5ub3J0aD4wKXtsZXQgaT10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGEselIpO3JldHVybiBnKHIpfHwocj1uZXcgWSksci54PWkubG9uZ2l0dWRlL2suUEksci55PWkubGF0aXR1ZGUvay5QSV9PVkVSX1RXTyxyfXJldHVybiBjYS5mcm9tQ2FydGVzaWFuKGEscil9O2xldCBvPUFvLmZyb21Qb2ludHMoZSx0KTtyZXR1cm4oYSxyKT0+by5wcm9qZWN0UG9pbnRzT250b1BsYW5lKGEscil9ZnVuY3Rpb24gUkQobixlLHQsbyl7cmV0dXJuKGEscik9PiFvJiYobi5oZWlnaHQ+PWsuUElfT1ZFUl9UV098fG4ud2lkdGg+PTIqay5QSV9PVkVSX1RIUkVFKT9pdC5zcGxpdFBvbHlnb25zT25FcXVhdG9yKGEsZSx0LHIpOmF9ZnVuY3Rpb24geEQobixlLHQsbyl7aWYoZS5oZWlnaHQ+PWsuUEl8fGUud2lkdGg+PWsuUEkpcmV0dXJuIHFhLmZyb21SZWN0YW5nbGUoZSx2b2lkIDAsRFIpO2xldCBhPW4scj1Bby5mcm9tUG9pbnRzKGEsdCk7cmV0dXJuIGl0LmNvbXB1dGVCb3VuZGluZ1JlY3RhbmdsZShyLnBsYW5lLm5vcm1hbCxyLnByb2plY3RQb2ludE9udG9QbGFuZS5iaW5kKHIpLGEsbyxEUil9ZnVuY3Rpb24gT0Qobil7bGV0IGU9LW4uX3N0Um90YXRpb247aWYoZT09PTApcmV0dXJuWzAsMCwwLDEsMSwwXTtsZXQgdD1uLl9lbGxpcHNvaWQsbz1uLl9wb2x5Z29uSGllcmFyY2h5LnBvc2l0aW9ucyxhPW4ucmVjdGFuZ2xlO3JldHVybiBQZS5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyhvLGUsdCxhKX12YXIgJEYsRlIsRFIsdEQsbkQsb0QsYUQsckQsaUQscWgscHIsUHMsY0Qsc0QsZkQsQlIsZEQsdUQsVVIsaEQsbUQsYkQscEQsZ0QsX0QsTFIseUQsQ2EsQUQselIsRGcsR1I9WCgoKT0+e2hjKCk7R2YoKTtFdCgpO3Z0KCk7TWUoKTtndCgpO0N0KCk7c3QoKTtmZSgpO1ZlKCk7cHMoKTtYdCgpO1l0KCk7ZGMoKTtVbygpO2ZyKCk7WnQoKTtqZSgpO0luKCk7SmYoKTtXYSgpO1dvKCk7aG4oKTt2UigpO0NvKCk7YmMoKTskRj1uZXcgYWUsRlI9bmV3IGFlO0RSPW5ldyBxYSx0RD1uZXcgcyxuRD1uZXcgcyxvRD1uZXcgcyxhRD1uZXcgcyxyRD1uZXcgcyxpRD1uZXcgcyxxaD1uZXcgcyxwcj1uZXcgcyxQcz1uZXcgcyxjRD1uZXcgWSxzRD1uZXcgWSxmRD1uZXcgcyxCUj1uZXcgWWUsZEQ9bmV3IFosdUQ9bmV3IFo7VVI9W107TWEuZnJvbVBvc2l0aW9ucz1mdW5jdGlvbihuKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXQgZT17cG9seWdvbkhpZXJhcmNoeTp7cG9zaXRpb25zOm4ucG9zaXRpb25zfSxoZWlnaHQ6bi5oZWlnaHQsZXh0cnVkZWRIZWlnaHQ6bi5leHRydWRlZEhlaWdodCx2ZXJ0ZXhGb3JtYXQ6bi52ZXJ0ZXhGb3JtYXQsc3RSb3RhdGlvbjpuLnN0Um90YXRpb24sZWxsaXBzb2lkOm4uZWxsaXBzb2lkLGdyYW51bGFyaXR5Om4uZ3JhbnVsYXJpdHkscGVyUG9zaXRpb25IZWlnaHQ6bi5wZXJQb3NpdGlvbkhlaWdodCxjbG9zZVRvcDpuLmNsb3NlVG9wLGNsb3NlQm90dG9tOm4uY2xvc2VCb3R0b20sb2Zmc2V0QXR0cmlidXRlOm4ub2Zmc2V0QXR0cmlidXRlLGFyY1R5cGU6bi5hcmNUeXBlLHRleHR1cmVDb29yZGluYXRlczpuLnRleHR1cmVDb29yZGluYXRlc307cmV0dXJuIG5ldyBNYShlKX07TWEucGFjaz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIHQ9dD8/MCx0PWl0LnBhY2tQb2x5Z29uSGllcmFyY2h5KG4uX3BvbHlnb25IaWVyYXJjaHksZSx0LHMpLEsucGFjayhuLl9lbGxpcHNvaWQsZSx0KSx0Kz1LLnBhY2tlZExlbmd0aCxoZS5wYWNrKG4uX3ZlcnRleEZvcm1hdCxlLHQpLHQrPWhlLnBhY2tlZExlbmd0aCxlW3QrK109bi5faGVpZ2h0LGVbdCsrXT1uLl9leHRydWRlZEhlaWdodCxlW3QrK109bi5fZ3JhbnVsYXJpdHksZVt0KytdPW4uX3N0Um90YXRpb24sZVt0KytdPW4uX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT8xOjAsZVt0KytdPW4uX3BlclBvc2l0aW9uSGVpZ2h0PzE6MCxlW3QrK109bi5fY2xvc2VUb3A/MTowLGVbdCsrXT1uLl9jbG9zZUJvdHRvbT8xOjAsZVt0KytdPW4uX3NoYWRvd1ZvbHVtZT8xOjAsZVt0KytdPW4uX29mZnNldEF0dHJpYnV0ZT8/LTEsZVt0KytdPW4uX2FyY1R5cGUsZyhuLl90ZXh0dXJlQ29vcmRpbmF0ZXMpP3Q9aXQucGFja1BvbHlnb25IaWVyYXJjaHkobi5fdGV4dHVyZUNvb3JkaW5hdGVzLGUsdCxZKTplW3QrK109LTEsZVt0XT1uLnBhY2tlZExlbmd0aCxlfTtoRD1LLmNsb25lKEsuVU5JVF9TUEhFUkUpLG1EPW5ldyBoZSxiRD17cG9seWdvbkhpZXJhcmNoeTp7fX07TWEudW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtlPWU/PzA7bGV0IG89aXQudW5wYWNrUG9seWdvbkhpZXJhcmNoeShuLGUscyk7ZT1vLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIG8uc3RhcnRpbmdJbmRleDtsZXQgYT1LLnVucGFjayhuLGUsaEQpO2UrPUsucGFja2VkTGVuZ3RoO2xldCByPWhlLnVucGFjayhuLGUsbUQpO2UrPWhlLnBhY2tlZExlbmd0aDtsZXQgaT1uW2UrK10sZj1uW2UrK10sZD1uW2UrK10sYz1uW2UrK10sdT1uW2UrK109PT0xLGw9bltlKytdPT09MSxtPW5bZSsrXT09PTEsaD1uW2UrK109PT0xLGI9bltlKytdPT09MSxwPW5bZSsrXSx5PW5bZSsrXSxUPW5bZV09PT0tMT92b2lkIDA6aXQudW5wYWNrUG9seWdvbkhpZXJhcmNoeShuLGUsWSk7ZyhUKT8oZT1ULnN0YXJ0aW5nSW5kZXgsZGVsZXRlIFQuc3RhcnRpbmdJbmRleCk6ZSsrO2xldCBfPW5bZV07cmV0dXJuIGcodCl8fCh0PW5ldyBNYShiRCkpLHQuX3BvbHlnb25IaWVyYXJjaHk9byx0Ll9lbGxpcHNvaWQ9Sy5jbG9uZShhLHQuX2VsbGlwc29pZCksdC5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKHIsdC5fdmVydGV4Rm9ybWF0KSx0Ll9oZWlnaHQ9aSx0Ll9leHRydWRlZEhlaWdodD1mLHQuX2dyYW51bGFyaXR5PWQsdC5fc3RSb3RhdGlvbj1jLHQuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT11LHQuX3BlclBvc2l0aW9uSGVpZ2h0PWwsdC5fY2xvc2VUb3A9bSx0Ll9jbG9zZUJvdHRvbT1oLHQuX3NoYWRvd1ZvbHVtZT1iLHQuX29mZnNldEF0dHJpYnV0ZT1wPT09LTE/dm9pZCAwOnAsdC5fYXJjVHlwZT15LHQuX3RleHR1cmVDb29yZGluYXRlcz1ULHQucGFja2VkTGVuZ3RoPV8sdH07cEQ9bmV3IFksZ0Q9bmV3IFksX0Q9bmV3IGNhO0xSPW5ldyBjYSx5RD1uZXcgY2EsQ2E9e25vcnRoQW5nbGU6MCxzb3V0aEFuZ2xlOjAsd2VzdE92ZXJJZGw6MCxlYXN0T3ZlcklkbDowfTtNYS5jb21wdXRlUmVjdGFuZ2xlRnJvbVBvc2l0aW9ucz1mdW5jdGlvbihuLGUsdCxvKXtpZihnKG8pfHwobz1uZXcgeGUpLG4ubGVuZ3RoPDMpcmV0dXJuIG87by53ZXN0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxvLmVhc3Q9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG8uc291dGg9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG8ubm9ydGg9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLENhLm5vcnRoQW5nbGU9MCxDYS5zb3V0aEFuZ2xlPTAsQ2Eud2VzdE92ZXJJZGw9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLENhLmVhc3RPdmVySWRsPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgYT1uLmxlbmd0aCxyPWNhLmZyb21DYXJ0ZXNpYW4oblswXSx5RCk7Zm9yKGxldCBpPTE7aTxhO2krKyl7bGV0IGY9Y2EuZnJvbUNhcnRlc2lhbihuW2ldLExSKTtqUihmLHIsZSx0LENhLG8pLHI9Y2EuY2xvbmUoZixyKX1yZXR1cm4galIoY2EuZnJvbUNhcnRlc2lhbihuWzBdLExSKSxyLGUsdCxDYSxvKSxvLmVhc3Qtby53ZXN0PkNhLmVhc3RPdmVySWRsLUNhLndlc3RPdmVySWRsJiYoby53ZXN0PUNhLndlc3RPdmVySWRsLG8uZWFzdD1DYS5lYXN0T3ZlcklkbCxvLmVhc3Q+ay5QSSYmKG8uZWFzdD1vLmVhc3Qtay5UV09fUEkpLG8ud2VzdD5rLlBJJiYoby53ZXN0PW8ud2VzdC1rLlRXT19QSSkpLGsuZXF1YWxzRXBzaWxvbihNYXRoLmFicyhDYS5ub3J0aEFuZ2xlKSxrLlRXT19QSSxrLkVQU0lMT04xMCkmJihvLm5vcnRoPWsuUElfT1ZFUl9UV08sby5lYXN0PWsuUEksby53ZXN0PS1rLlBJKSxrLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMoQ2Euc291dGhBbmdsZSksay5UV09fUEksay5FUFNJTE9OMTApJiYoby5zb3V0aD0tay5QSV9PVkVSX1RXTyxvLmVhc3Q9ay5QSSxvLndlc3Q9LWsuUEkpLG99O0FEPW5ldyBjYTt6Uj1uZXcgYWU7TWEuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7bGV0IGU9bi5fdmVydGV4Rm9ybWF0LHQ9bi5fZWxsaXBzb2lkLG89bi5fZ3JhbnVsYXJpdHksYT1uLl9zdFJvdGF0aW9uLHI9bi5fcG9seWdvbkhpZXJhcmNoeSxpPW4uX3BlclBvc2l0aW9uSGVpZ2h0LGY9bi5fY2xvc2VUb3AsZD1uLl9jbG9zZUJvdHRvbSxjPW4uX2FyY1R5cGUsdT1uLl90ZXh0dXJlQ29vcmRpbmF0ZXMsbD1nKHUpLG09ci5wb3NpdGlvbnM7aWYobS5sZW5ndGg8MylyZXR1cm47bGV0IGg9bi5yZWN0YW5nbGUsYj1pdC5wb2x5Z29uc0Zyb21IaWVyYXJjaHkocixsLFREKGgsbSx0KSwhaSx0LFJEKGgsdCxjLGkpKSxwPWIuaGllcmFyY2h5LHk9Yi5wb2x5Z29ucyxUPWZ1bmN0aW9uKE4pe3JldHVybiBOfSxfPWw/aXQucG9seWdvbnNGcm9tSGllcmFyY2h5KHUsITAsVCwhMSx0KS5wb2x5Z29uczp2b2lkIDA7aWYocC5sZW5ndGg9PT0wKXJldHVybjtsZXQgdz1wWzBdLm91dGVyUmluZyxFPXhEKHcsaCx0LGEpLFI9W10sUz1uLl9oZWlnaHQsQz1uLl9leHRydWRlZEhlaWdodCxJPW4uX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZXx8IWsuZXF1YWxzRXBzaWxvbihTLEMsMCxrLkVQU0lMT04yKSxNPXtwZXJQb3NpdGlvbkhlaWdodDppLHZlcnRleEZvcm1hdDplLGdlb21ldHJ5OnZvaWQgMCxyb3RhdGlvbkF4aXM6d0QoaCx3LHQpLnBsYW5lLm5vcm1hbCxwcm9qZWN0VG8yZDpFRChoLHcsdCksYm91bmRpbmdSZWN0YW5nbGU6RSxlbGxpcHNvaWQ6dCxzdFJvdGF0aW9uOmEsdGV4dHVyZUNvb3JkaW5hdGVzOnZvaWQgMCxib3R0b206ITEsdG9wOiEwLHdhbGw6ITEsZXh0cnVkZTohMSxhcmNUeXBlOmN9LFA7aWYoSSlmb3IoTS5leHRydWRlPSEwLE0udG9wPWYsTS5ib3R0b209ZCxNLnNoYWRvd1ZvbHVtZT1uLl9zaGFkb3dWb2x1bWUsTS5vZmZzZXRBdHRyaWJ1dGU9bi5fb2Zmc2V0QXR0cmlidXRlLFA9MDtQPHkubGVuZ3RoO1ArKyl7bGV0IE49bEQodCx5W1BdLGw/X1tQXTp2b2lkIDAsbyxwW1BdLGksZixkLGUsYyksdjtmJiZkPyh2PU4udG9wQW5kQm90dG9tLE0uZ2VvbWV0cnk9aXQuc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQodi5nZW9tZXRyeSxTLEMsdCxpKSk6Zj8odj1OLnRvcEFuZEJvdHRvbSx2Lmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPXd0LnNjYWxlVG9HZW9kZXRpY0hlaWdodCh2Lmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLFMsdCwhaSksTS5nZW9tZXRyeT12Lmdlb21ldHJ5KTpkJiYodj1OLnRvcEFuZEJvdHRvbSx2Lmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPXd0LnNjYWxlVG9HZW9kZXRpY0hlaWdodCh2Lmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLEMsdCwhMCksTS5nZW9tZXRyeT12Lmdlb21ldHJ5KSwoZnx8ZCkmJihNLndhbGw9ITEsdi5nZW9tZXRyeT1GZyhNKSxSLnB1c2godikpO2xldCBVPU4ud2FsbHM7TS53YWxsPSEwO2ZvcihsZXQgTD0wO0w8VS5sZW5ndGg7TCsrKXtsZXQgRD1VW0xdO00uZ2VvbWV0cnk9aXQuc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQoRC5nZW9tZXRyeSxTLEMsdCxpKSxELmdlb21ldHJ5PUZnKE0pLFIucHVzaChEKX19ZWxzZSBmb3IoUD0wO1A8eS5sZW5ndGg7UCsrKXtsZXQgTj1uZXcgbG8oe2dlb21ldHJ5Oml0LmNyZWF0ZUdlb21ldHJ5RnJvbVBvc2l0aW9ucyh0LHlbUF0sbD9fW1BdOnZvaWQgMCxvLGksZSxjKX0pO2lmKE4uZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9d3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KE4uZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsUyx0LCFpKSxNLmdlb21ldHJ5PU4uZ2VvbWV0cnksTi5nZW9tZXRyeT1GZyhNKSxnKG4uX29mZnNldEF0dHJpYnV0ZSkpe2xldCB2PU4uZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLFU9bi5fb2Zmc2V0QXR0cmlidXRlPT09b3QuTk9ORT8wOjEsTD1uZXcgVWludDhBcnJheSh2LzMpLmZpbGwoVSk7Ti5nZW9tZXRyeS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOkx9KX1SLnB1c2goTil9bGV0IEY9THQuY29tYmluZUluc3RhbmNlcyhSKVswXTtGLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPW5ldyBGbG9hdDY0QXJyYXkoRi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyksRi5pbmRpY2VzPUllLmNyZWF0ZVR5cGVkQXJyYXkoRi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxGLmluZGljZXMpO2xldCBBPUYuYXR0cmlidXRlcyx4PXBlLmZyb21WZXJ0aWNlcyhBLnBvc2l0aW9uLnZhbHVlcyk7cmV0dXJuIGUucG9zaXRpb258fGRlbGV0ZSBBLnBvc2l0aW9uLG5ldyBQZSh7YXR0cmlidXRlczpBLGluZGljZXM6Ri5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6Ri5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOngsb2Zmc2V0QXR0cmlidXRlOm4uX29mZnNldEF0dHJpYnV0ZX0pfTtNYS5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24obixlLHQpe2xldCBvPW4uX2dyYW51bGFyaXR5LGE9bi5fZWxsaXBzb2lkLHI9ZShvLGEpLGk9dChvLGEpO3JldHVybiBuZXcgTWEoe3BvbHlnb25IaWVyYXJjaHk6bi5fcG9seWdvbkhpZXJhcmNoeSxlbGxpcHNvaWQ6YSxzdFJvdGF0aW9uOm4uX3N0Um90YXRpb24sZ3JhbnVsYXJpdHk6byxwZXJQb3NpdGlvbkhlaWdodDohMSxleHRydWRlZEhlaWdodDpyLGhlaWdodDppLHZlcnRleEZvcm1hdDpoZS5QT1NJVElPTl9PTkxZLHNoYWRvd1ZvbHVtZTohMCxhcmNUeXBlOm4uX2FyY1R5cGV9KX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWEucHJvdG90eXBlLHtyZWN0YW5nbGU6e2dldDpmdW5jdGlvbigpe2lmKCFnKHRoaXMuX3JlY3RhbmdsZSkpe2xldCBuPXRoaXMuX3BvbHlnb25IaWVyYXJjaHkucG9zaXRpb25zO3RoaXMuX3JlY3RhbmdsZT1NYS5jb21wdXRlUmVjdGFuZ2xlRnJvbVBvc2l0aW9ucyhuLHRoaXMuX2VsbGlwc29pZCx0aGlzLl9hcmNUeXBlKX1yZXR1cm4gdGhpcy5fcmVjdGFuZ2xlfX0sdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyl8fCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPU9EKHRoaXMpKSx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzfX19KTtEZz1NYX0pO3ZhciBCZz17fTskZShCZyx7ZGVmYXVsdDooKT0+Q0R9KTtmdW5jdGlvbiBTRChuLGUpe3JldHVybiBnKGUpJiYobj1EZy51bnBhY2sobixlKSksbi5fZWxsaXBzb2lkPUsuY2xvbmUobi5fZWxsaXBzb2lkKSxEZy5jcmVhdGVHZW9tZXRyeShuKX12YXIgQ0QsVWc9WCgoKT0+e2ZlKCk7VmUoKTtHUigpO0NEPVNEfSk7ZnVuY3Rpb24gTUQobixlLHQsbyxhKXtsZXQgaT1Bby5mcm9tUG9pbnRzKGUsbikucHJvamVjdFBvaW50c09udG9QbGFuZShlLFZSKTt3dC5jb21wdXRlV2luZGluZ09yZGVyMkQoaSk9PT1Nby5DTE9DS1dJU0UmJihpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpO2xldCBkLGMsdT1lLmxlbmd0aCxsPTA7aWYobylmb3IoZD1uZXcgRmxvYXQ2NEFycmF5KHUqMiozKSxjPTA7Yzx1O2MrKyl7bGV0IGI9ZVtjXSxwPWVbKGMrMSkldV07ZFtsKytdPWIueCxkW2wrK109Yi55LGRbbCsrXT1iLnosZFtsKytdPXAueCxkW2wrK109cC55LGRbbCsrXT1wLnp9ZWxzZXtsZXQgYj0wO2lmKGE9PT1idC5HRU9ERVNJQylmb3IoYz0wO2M8dTtjKyspYis9aXQuc3ViZGl2aWRlTGluZUNvdW50KGVbY10sZVsoYysxKSV1XSx0KTtlbHNlIGlmKGE9PT1idC5SSFVNQilmb3IoYz0wO2M8dTtjKyspYis9aXQuc3ViZGl2aWRlUmh1bWJMaW5lQ291bnQobixlW2NdLGVbKGMrMSkldV0sdCk7Zm9yKGQ9bmV3IEZsb2F0NjRBcnJheShiKjMpLGM9MDtjPHU7YysrKXtsZXQgcDthPT09YnQuR0VPREVTSUM/cD1pdC5zdWJkaXZpZGVMaW5lKGVbY10sZVsoYysxKSV1XSx0LFdoKTphPT09YnQuUkhVTUImJihwPWl0LnN1YmRpdmlkZVJodW1iTGluZShuLGVbY10sZVsoYysxKSV1XSx0LFdoKSk7bGV0IHk9cC5sZW5ndGg7Zm9yKGxldCBUPTA7VDx5OysrVClkW2wrK109cFtUXX19dT1kLmxlbmd0aC8zO2xldCBtPXUqMixoPUllLmNyZWF0ZVR5cGVkQXJyYXkodSxtKTtmb3IobD0wLGM9MDtjPHUtMTtjKyspaFtsKytdPWMsaFtsKytdPWMrMTtyZXR1cm4gaFtsKytdPXUtMSxoW2xdPTAsbmV3IGxvKHtnZW9tZXRyeTpuZXcgUGUoe2F0dHJpYnV0ZXM6bmV3IFFlKHtwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmR9KX0pLGluZGljZXM6aCxwcmltaXRpdmVUeXBlOkZlLkxJTkVTfSl9KX1mdW5jdGlvbiBORChuLGUsdCxvLGEpe2xldCBpPUFvLmZyb21Qb2ludHMoZSxuKS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKGUsVlIpO3d0LmNvbXB1dGVXaW5kaW5nT3JkZXIyRChpKT09PU1vLkNMT0NLV0lTRSYmKGkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7bGV0IGQsYyx1PWUubGVuZ3RoLGw9bmV3IEFycmF5KHUpLG09MDtpZihvKWZvcihkPW5ldyBGbG9hdDY0QXJyYXkodSoyKjMqMiksYz0wO2M8dTsrK2Mpe2xbY109bS8zO2xldCB5PWVbY10sVD1lWyhjKzEpJXVdO2RbbSsrXT15LngsZFttKytdPXkueSxkW20rK109eS56LGRbbSsrXT1ULngsZFttKytdPVQueSxkW20rK109VC56fWVsc2V7bGV0IHk9MDtpZihhPT09YnQuR0VPREVTSUMpZm9yKGM9MDtjPHU7YysrKXkrPWl0LnN1YmRpdmlkZUxpbmVDb3VudChlW2NdLGVbKGMrMSkldV0sdCk7ZWxzZSBpZihhPT09YnQuUkhVTUIpZm9yKGM9MDtjPHU7YysrKXkrPWl0LnN1YmRpdmlkZVJodW1iTGluZUNvdW50KG4sZVtjXSxlWyhjKzEpJXVdLHQpO2ZvcihkPW5ldyBGbG9hdDY0QXJyYXkoeSozKjIpLGM9MDtjPHU7KytjKXtsW2NdPW0vMztsZXQgVDthPT09YnQuR0VPREVTSUM/VD1pdC5zdWJkaXZpZGVMaW5lKGVbY10sZVsoYysxKSV1XSx0LFdoKTphPT09YnQuUkhVTUImJihUPWl0LnN1YmRpdmlkZVJodW1iTGluZShuLGVbY10sZVsoYysxKSV1XSx0LFdoKSk7bGV0IF89VC5sZW5ndGg7Zm9yKGxldCB3PTA7dzxfOysrdylkW20rK109VFt3XX19dT1kLmxlbmd0aC82O2xldCBoPWwubGVuZ3RoLGI9KHUqMitoKSoyLHA9SWUuY3JlYXRlVHlwZWRBcnJheSh1K2gsYik7Zm9yKG09MCxjPTA7Yzx1OysrYylwW20rK109YyxwW20rK109KGMrMSkldSxwW20rK109Yyt1LHBbbSsrXT0oYysxKSV1K3U7Zm9yKGM9MDtjPGg7YysrKXtsZXQgeT1sW2NdO3BbbSsrXT15LHBbbSsrXT15K3V9cmV0dXJuIG5ldyBsbyh7Z2VvbWV0cnk6bmV3IFBlKHthdHRyaWJ1dGVzOm5ldyBRZSh7cG9zaXRpb246bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpkfSl9KSxpbmRpY2VzOnAscHJpbWl0aXZlVHlwZTpGZS5MSU5FU30pfSl9ZnVuY3Rpb24gRWMobil7bGV0IGU9bi5wb2x5Z29uSGllcmFyY2h5LHQ9bi5lbGxpcHNvaWQ/P0suZGVmYXVsdCxvPW4uZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLGE9bi5wZXJQb3NpdGlvbkhlaWdodD8/ITEscj1hJiZnKG4uZXh0cnVkZWRIZWlnaHQpLGk9bi5hcmNUeXBlPz9idC5HRU9ERVNJQyxmPW4uaGVpZ2h0Pz8wLGQ9bi5leHRydWRlZEhlaWdodD8/ZjtpZighcil7bGV0IGM9TWF0aC5tYXgoZixkKTtkPU1hdGgubWluKGYsZCksZj1jfXRoaXMuX2VsbGlwc29pZD1LLmNsb25lKHQpLHRoaXMuX2dyYW51bGFyaXR5PW8sdGhpcy5faGVpZ2h0PWYsdGhpcy5fZXh0cnVkZWRIZWlnaHQ9ZCx0aGlzLl9hcmNUeXBlPWksdGhpcy5fcG9seWdvbkhpZXJhcmNoeT1lLHRoaXMuX3BlclBvc2l0aW9uSGVpZ2h0PWEsdGhpcy5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPXIsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPW4ub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBvbHlnb25PdXRsaW5lR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPWl0LmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgoZSxzKStLLnBhY2tlZExlbmd0aCs4fXZhciBWUixXaCxJRCxQRCxqZyxIUj1YKCgpPT57aGMoKTtFdCgpO01lKCk7Q3QoKTtzdCgpO2ZlKCk7VmUoKTtwcygpO1h0KCk7WXQoKTtybigpO2RjKCk7VW8oKTtmcigpO1p0KCk7amUoKTtKZigpO1dhKCk7dG4oKTtiYygpO1ZSPVtdLFdoPVtdO0VjLnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0PXQ/PzAsdD1pdC5wYWNrUG9seWdvbkhpZXJhcmNoeShuLl9wb2x5Z29uSGllcmFyY2h5LGUsdCxzKSxLLnBhY2sobi5fZWxsaXBzb2lkLGUsdCksdCs9Sy5wYWNrZWRMZW5ndGgsZVt0KytdPW4uX2hlaWdodCxlW3QrK109bi5fZXh0cnVkZWRIZWlnaHQsZVt0KytdPW4uX2dyYW51bGFyaXR5LGVbdCsrXT1uLl9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU/MTowLGVbdCsrXT1uLl9wZXJQb3NpdGlvbkhlaWdodD8xOjAsZVt0KytdPW4uX2FyY1R5cGUsZVt0KytdPW4uX29mZnNldEF0dHJpYnV0ZT8/LTEsZVt0XT1uLnBhY2tlZExlbmd0aCxlfTtJRD1LLmNsb25lKEsuVU5JVF9TUEhFUkUpLFBEPXtwb2x5Z29uSGllcmFyY2h5Ont9fTtFYy51bnBhY2s9ZnVuY3Rpb24obixlLHQpe2U9ZT8/MDtsZXQgbz1pdC51bnBhY2tQb2x5Z29uSGllcmFyY2h5KG4sZSxzKTtlPW8uc3RhcnRpbmdJbmRleCxkZWxldGUgby5zdGFydGluZ0luZGV4O2xldCBhPUsudW5wYWNrKG4sZSxJRCk7ZSs9Sy5wYWNrZWRMZW5ndGg7bGV0IHI9bltlKytdLGk9bltlKytdLGY9bltlKytdLGQ9bltlKytdPT09MSxjPW5bZSsrXT09PTEsdT1uW2UrK10sbD1uW2UrK10sbT1uW2VdO3JldHVybiBnKHQpfHwodD1uZXcgRWMoUEQpKSx0Ll9wb2x5Z29uSGllcmFyY2h5PW8sdC5fZWxsaXBzb2lkPUsuY2xvbmUoYSx0Ll9lbGxpcHNvaWQpLHQuX2hlaWdodD1yLHQuX2V4dHJ1ZGVkSGVpZ2h0PWksdC5fZ3JhbnVsYXJpdHk9Zix0Ll9wZXJQb3NpdGlvbkhlaWdodD1jLHQuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT1kLHQuX2FyY1R5cGU9dSx0Ll9vZmZzZXRBdHRyaWJ1dGU9bD09PS0xP3ZvaWQgMDpsLHQucGFja2VkTGVuZ3RoPW0sdH07RWMuZnJvbVBvc2l0aW9ucz1mdW5jdGlvbihuKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXQgZT17cG9seWdvbkhpZXJhcmNoeTp7cG9zaXRpb25zOm4ucG9zaXRpb25zfSxoZWlnaHQ6bi5oZWlnaHQsZXh0cnVkZWRIZWlnaHQ6bi5leHRydWRlZEhlaWdodCxlbGxpcHNvaWQ6bi5lbGxpcHNvaWQsZ3JhbnVsYXJpdHk6bi5ncmFudWxhcml0eSxwZXJQb3NpdGlvbkhlaWdodDpuLnBlclBvc2l0aW9uSGVpZ2h0LGFyY1R5cGU6bi5hcmNUeXBlLG9mZnNldEF0dHJpYnV0ZTpuLm9mZnNldEF0dHJpYnV0ZX07cmV0dXJuIG5ldyBFYyhlKX07RWMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7bGV0IGU9bi5fZWxsaXBzb2lkLHQ9bi5fZ3JhbnVsYXJpdHksbz1uLl9wb2x5Z29uSGllcmFyY2h5LGE9bi5fcGVyUG9zaXRpb25IZWlnaHQscj1uLl9hcmNUeXBlLGk9aXQucG9seWdvbk91dGxpbmVzRnJvbUhpZXJhcmNoeShvLCFhLGUpO2lmKGkubGVuZ3RoPT09MClyZXR1cm47bGV0IGYsZD1bXSxjPWsuY2hvcmRMZW5ndGgodCxlLm1heGltdW1SYWRpdXMpLHU9bi5faGVpZ2h0LGw9bi5fZXh0cnVkZWRIZWlnaHQsbT1uLl9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGV8fCFrLmVxdWFsc0Vwc2lsb24odSxsLDAsay5FUFNJTE9OMiksaCxiO2lmKG0pZm9yKGI9MDtiPGkubGVuZ3RoO2IrKyl7aWYoZj1ORChlLGlbYl0sYyxhLHIpLGYuZ2VvbWV0cnk9aXQuc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQoZi5nZW9tZXRyeSx1LGwsZSxhKSxnKG4uX29mZnNldEF0dHJpYnV0ZSkpe2xldCBUPWYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMsXz1uZXcgVWludDhBcnJheShUKTtuLl9vZmZzZXRBdHRyaWJ1dGU9PT1vdC5UT1A/Xz1fLmZpbGwoMSwwLFQvMik6KGg9bi5fb2Zmc2V0QXR0cmlidXRlPT09b3QuTk9ORT8wOjEsXz1fLmZpbGwoaCkpLGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpffSl9ZC5wdXNoKGYpfWVsc2UgZm9yKGI9MDtiPGkubGVuZ3RoO2IrKyl7aWYoZj1NRChlLGlbYl0sYyxhLHIpLGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9d3Quc2NhbGVUb0dlb2RldGljSGVpZ2h0KGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsdSxlLCFhKSxnKG4uX29mZnNldEF0dHJpYnV0ZSkpe2xldCBUPWYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoO2g9bi5fb2Zmc2V0QXR0cmlidXRlPT09b3QuTk9ORT8wOjE7bGV0IF89bmV3IFVpbnQ4QXJyYXkoVC8zKS5maWxsKGgpO2YuZ2VvbWV0cnkuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpffSl9ZC5wdXNoKGYpfWxldCBwPUx0LmNvbWJpbmVJbnN0YW5jZXMoZClbMF0seT1wZS5mcm9tVmVydGljZXMocC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyk7cmV0dXJuIG5ldyBQZSh7YXR0cmlidXRlczpwLmF0dHJpYnV0ZXMsaW5kaWNlczpwLmluZGljZXMscHJpbWl0aXZlVHlwZTpwLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6eSxvZmZzZXRBdHRyaWJ1dGU6bi5fb2Zmc2V0QXR0cmlidXRlfSl9O2pnPUVjfSk7dmFyIExnPXt9OyRlKExnLHtkZWZhdWx0OigpPT52RH0pO2Z1bmN0aW9uIGtEKG4sZSl7cmV0dXJuIGcoZSkmJihuPWpnLnVucGFjayhuLGUpKSxuLl9lbGxpcHNvaWQ9Sy5jbG9uZShuLl9lbGxpcHNvaWQpLGpnLmNyZWF0ZUdlb21ldHJ5KG4pfXZhciB2RCx6Zz1YKCgpPT57ZmUoKTtWZSgpO0hSKCk7dkQ9a0R9KTtmdW5jdGlvbiBHZyhuLGUsdCl7cmV0dXJuIHQ8MCYmKHQrPTEpLHQ+MSYmKHQtPTEpLHQqNjwxP24rKGUtbikqNip0OnQqMjwxP2U6dCozPDI/bisoZS1uKSooMi8zLXQpKjY6bn12YXIgVyxWZyxIZyxacixGRCxERCxCRCxVRCxKZSxrcz1YKCgpPT57c3QoKTtmZSgpO0dsKCk7amUoKTtXPWNsYXNzIG57Y29uc3RydWN0b3IoZSx0LG8sYSl7dGhpcy5yZWQ9ZT8/MSx0aGlzLmdyZWVuPXQ/PzEsdGhpcy5ibHVlPW8/PzEsdGhpcy5hbHBoYT1hPz8xfXN0YXRpYyBmcm9tQ2FydGVzaWFuNChlLHQpe3JldHVybiBnKHQpPyh0LnJlZD1lLngsdC5ncmVlbj1lLnksdC5ibHVlPWUueix0LmFscGhhPWUudyx0KTpuZXcgbihlLngsZS55LGUueixlLncpfXN0YXRpYyBmcm9tQnl0ZXMoZSx0LG8sYSxyKXtyZXR1cm4gZT1uLmJ5dGVUb0Zsb2F0KGU/PzI1NSksdD1uLmJ5dGVUb0Zsb2F0KHQ/PzI1NSksbz1uLmJ5dGVUb0Zsb2F0KG8/PzI1NSksYT1uLmJ5dGVUb0Zsb2F0KGE/PzI1NSksZyhyKT8oci5yZWQ9ZSxyLmdyZWVuPXQsci5ibHVlPW8sci5hbHBoYT1hLHIpOm5ldyBuKGUsdCxvLGEpfXN0YXRpYyBmcm9tQWxwaGEoZSx0LG8pe3JldHVybiBnKG8pPyhvLnJlZD1lLnJlZCxvLmdyZWVuPWUuZ3JlZW4sby5ibHVlPWUuYmx1ZSxvLmFscGhhPXQsbyk6bmV3IG4oZS5yZWQsZS5ncmVlbixlLmJsdWUsdCl9c3RhdGljIGZyb21SZ2JhKGUsdCl7cmV0dXJuIEhnWzBdPWUsbi5mcm9tQnl0ZXMoWnJbMF0sWnJbMV0sWnJbMl0sWnJbM10sdCl9c3RhdGljIGZyb21Ic2woZSx0LG8sYSxyKXtlPShlPz8wKSUxLHQ9dD8/MCxvPW8/PzAsYT1hPz8xO2xldCBpPW8sZj1vLGQ9bztpZih0IT09MCl7bGV0IGM7bzwuNT9jPW8qKDErdCk6Yz1vK3Qtbyp0O2xldCB1PTIqby1jO2k9R2codSxjLGUrMS8zKSxmPUdnKHUsYyxlKSxkPUdnKHUsYyxlLTEvMyl9cmV0dXJuIGcocik/KHIucmVkPWksci5ncmVlbj1mLHIuYmx1ZT1kLHIuYWxwaGE9YSxyKTpuZXcgbihpLGYsZCxhKX1zdGF0aWMgZnJvbVJhbmRvbShlLHQpe2U9ZT8/T2UuRU1QVFlfT0JKRUNUO2xldCBvPWUucmVkO2lmKCFnKG8pKXtsZXQgZj1lLm1pbmltdW1SZWQ/PzAsZD1lLm1heGltdW1SZWQ/PzE7bz1mK2submV4dFJhbmRvbU51bWJlcigpKihkLWYpfWxldCBhPWUuZ3JlZW47aWYoIWcoYSkpe2xldCBmPWUubWluaW11bUdyZWVuPz8wLGQ9ZS5tYXhpbXVtR3JlZW4/PzE7YT1mK2submV4dFJhbmRvbU51bWJlcigpKihkLWYpfWxldCByPWUuYmx1ZTtpZighZyhyKSl7bGV0IGY9ZS5taW5pbXVtQmx1ZT8/MCxkPWUubWF4aW11bUJsdWU/PzE7cj1mK2submV4dFJhbmRvbU51bWJlcigpKihkLWYpfWxldCBpPWUuYWxwaGE7aWYoIWcoaSkpe2xldCBmPWUubWluaW11bUFscGhhPz8wLGQ9ZS5tYXhpbXVtQWxwaGE/PzE7aT1mK2submV4dFJhbmRvbU51bWJlcigpKihkLWYpfXJldHVybiBnKHQpPyh0LnJlZD1vLHQuZ3JlZW49YSx0LmJsdWU9cix0LmFscGhhPWksdCk6bmV3IG4obyxhLHIsaSl9c3RhdGljIGZyb21Dc3NDb2xvclN0cmluZyhlLHQpe2codCl8fCh0PW5ldyBuKSxlPWUudHJpbSgpO2xldCBvPW5bZS50b1VwcGVyQ2FzZSgpXTtpZihnKG8pKXJldHVybiBuLmNsb25lKG8sdCksdDtsZXQgYT1GRC5leGVjKGUpO3JldHVybiBhIT09bnVsbD8odC5yZWQ9cGFyc2VJbnQoYVsxXSwxNikvMTUsdC5ncmVlbj1wYXJzZUludChhWzJdLDE2KS8xNSx0LmJsdWU9cGFyc2VJbnQoYVszXSwxNikvMTUsdC5hbHBoYT1wYXJzZUludChhWzRdPz8iZiIsMTYpLzE1LHQpOihhPURELmV4ZWMoZSksYSE9PW51bGw/KHQucmVkPXBhcnNlSW50KGFbMV0sMTYpLzI1NSx0LmdyZWVuPXBhcnNlSW50KGFbMl0sMTYpLzI1NSx0LmJsdWU9cGFyc2VJbnQoYVszXSwxNikvMjU1LHQuYWxwaGE9cGFyc2VJbnQoYVs0XT8/ImZmIiwxNikvMjU1LHQpOihhPUJELmV4ZWMoZSksYSE9PW51bGw/KHQucmVkPXBhcnNlRmxvYXQoYVsxXSkvKGFbMV0uc3Vic3RyKC0xKT09PSIlIj8xMDA6MjU1KSx0LmdyZWVuPXBhcnNlRmxvYXQoYVsyXSkvKGFbMl0uc3Vic3RyKC0xKT09PSIlIj8xMDA6MjU1KSx0LmJsdWU9cGFyc2VGbG9hdChhWzNdKS8oYVszXS5zdWJzdHIoLTEpPT09IiUiPzEwMDoyNTUpLHQuYWxwaGE9cGFyc2VGbG9hdChhWzRdPz8iMS4wIiksdCk6KGE9VUQuZXhlYyhlKSxhIT09bnVsbD9uLmZyb21Ic2wocGFyc2VGbG9hdChhWzFdKS8zNjAscGFyc2VGbG9hdChhWzJdKS8xMDAscGFyc2VGbG9hdChhWzNdKS8xMDAscGFyc2VGbG9hdChhWzRdPz8iMS4wIiksdCk6KHQ9dm9pZCAwLHQpKSkpfXN0YXRpYyBwYWNrKGUsdCxvKXtyZXR1cm4gbz1vPz8wLHRbbysrXT1lLnJlZCx0W28rK109ZS5ncmVlbix0W28rK109ZS5ibHVlLHRbb109ZS5hbHBoYSx0fXN0YXRpYyB1bnBhY2soZSx0LG8pe3JldHVybiB0PXQ/PzAsZyhvKXx8KG89bmV3IG4pLG8ucmVkPWVbdCsrXSxvLmdyZWVuPWVbdCsrXSxvLmJsdWU9ZVt0KytdLG8uYWxwaGE9ZVt0XSxvfXN0YXRpYyBieXRlVG9GbG9hdChlKXtyZXR1cm4gZS8yNTV9c3RhdGljIGZsb2F0VG9CeXRlKGUpe3JldHVybiBlPT09MT8yNTU6ZSoyNTZ8MH1zdGF0aWMgY2xvbmUoZSx0KXtpZihnKGUpKXJldHVybiBnKHQpPyh0LnJlZD1lLnJlZCx0LmdyZWVuPWUuZ3JlZW4sdC5ibHVlPWUuYmx1ZSx0LmFscGhhPWUuYWxwaGEsdCk6bmV3IG4oZS5yZWQsZS5ncmVlbixlLmJsdWUsZS5hbHBoYSl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiBlPT09dHx8ZyhlKSYmZyh0KSYmZS5yZWQ9PT10LnJlZCYmZS5ncmVlbj09PXQuZ3JlZW4mJmUuYmx1ZT09PXQuYmx1ZSYmZS5hbHBoYT09PXQuYWxwaGF9c3RhdGljIGVxdWFsc0FycmF5KGUsdCxvKXtyZXR1cm4gZS5yZWQ9PT10W29dJiZlLmdyZWVuPT09dFtvKzFdJiZlLmJsdWU9PT10W28rMl0mJmUuYWxwaGE9PT10W28rM119Y2xvbmUoZSl7cmV0dXJuIG4uY2xvbmUodGhpcyxlKX1lcXVhbHMoZSl7cmV0dXJuIG4uZXF1YWxzKHRoaXMsZSl9ZXF1YWxzRXBzaWxvbihlLHQpe3JldHVybiB0aGlzPT09ZXx8ZyhlKSYmTWF0aC5hYnModGhpcy5yZWQtZS5yZWQpPD10JiZNYXRoLmFicyh0aGlzLmdyZWVuLWUuZ3JlZW4pPD10JiZNYXRoLmFicyh0aGlzLmJsdWUtZS5ibHVlKTw9dCYmTWF0aC5hYnModGhpcy5hbHBoYS1lLmFscGhhKTw9dH10b1N0cmluZygpe3JldHVybmAoJHt0aGlzLnJlZH0sICR7dGhpcy5ncmVlbn0sICR7dGhpcy5ibHVlfSwgJHt0aGlzLmFscGhhfSlgfXRvQ3NzQ29sb3JTdHJpbmcoKXtsZXQgZT1uLmZsb2F0VG9CeXRlKHRoaXMucmVkKSx0PW4uZmxvYXRUb0J5dGUodGhpcy5ncmVlbiksbz1uLmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSk7cmV0dXJuIHRoaXMuYWxwaGE9PT0xP2ByZ2IoJHtlfSwke3R9LCR7b30pYDpgcmdiYSgke2V9LCR7dH0sJHtvfSwke3RoaXMuYWxwaGF9KWB9dG9Dc3NIZXhTdHJpbmcoKXtsZXQgZT1uLmZsb2F0VG9CeXRlKHRoaXMucmVkKS50b1N0cmluZygxNik7ZS5sZW5ndGg8MiYmKGU9YDAke2V9YCk7bGV0IHQ9bi5mbG9hdFRvQnl0ZSh0aGlzLmdyZWVuKS50b1N0cmluZygxNik7dC5sZW5ndGg8MiYmKHQ9YDAke3R9YCk7bGV0IG89bi5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpLnRvU3RyaW5nKDE2KTtpZihvLmxlbmd0aDwyJiYobz1gMCR7b31gKSx0aGlzLmFscGhhPDEpe2xldCBhPW4uZmxvYXRUb0J5dGUodGhpcy5hbHBoYSkudG9TdHJpbmcoMTYpO3JldHVybiBhLmxlbmd0aDwyJiYoYT1gMCR7YX1gKSxgIyR7ZX0ke3R9JHtvfSR7YX1gfXJldHVybmAjJHtlfSR7dH0ke299YH10b0J5dGVzKGUpe2xldCB0PW4uZmxvYXRUb0J5dGUodGhpcy5yZWQpLG89bi5mbG9hdFRvQnl0ZSh0aGlzLmdyZWVuKSxhPW4uZmxvYXRUb0J5dGUodGhpcy5ibHVlKSxyPW4uZmxvYXRUb0J5dGUodGhpcy5hbHBoYSk7cmV0dXJuIGcoZSk/KGVbMF09dCxlWzFdPW8sZVsyXT1hLGVbM109cixlKTpbdCxvLGEscl19c3RhdGljIGJ5dGVzVG9SZ2JhKGUsdCxvLGEpe3JldHVybiBaclswXT1lLFpyWzFdPXQsWnJbMl09byxaclszXT1hLEhnWzBdfXRvUmdiYSgpe3JldHVybiBuLmJ5dGVzVG9SZ2JhKG4uZmxvYXRUb0J5dGUodGhpcy5yZWQpLG4uZmxvYXRUb0J5dGUodGhpcy5ncmVlbiksbi5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpLG4uZmxvYXRUb0J5dGUodGhpcy5hbHBoYSkpfWJyaWdodGVuKGUsdCl7cmV0dXJuIGU9MS1lLHQucmVkPTEtKDEtdGhpcy5yZWQpKmUsdC5ncmVlbj0xLSgxLXRoaXMuZ3JlZW4pKmUsdC5ibHVlPTEtKDEtdGhpcy5ibHVlKSplLHQuYWxwaGE9dGhpcy5hbHBoYSx0fWRhcmtlbihlLHQpe3JldHVybiBlPTEtZSx0LnJlZD10aGlzLnJlZCplLHQuZ3JlZW49dGhpcy5ncmVlbiplLHQuYmx1ZT10aGlzLmJsdWUqZSx0LmFscGhhPXRoaXMuYWxwaGEsdH13aXRoQWxwaGEoZSx0KXtyZXR1cm4gbi5mcm9tQWxwaGEodGhpcyxlLHQpfXN0YXRpYyBhZGQoZSx0LG8pe3JldHVybiBvLnJlZD1lLnJlZCt0LnJlZCxvLmdyZWVuPWUuZ3JlZW4rdC5ncmVlbixvLmJsdWU9ZS5ibHVlK3QuYmx1ZSxvLmFscGhhPWUuYWxwaGErdC5hbHBoYSxvfXN0YXRpYyBzdWJ0cmFjdChlLHQsbyl7cmV0dXJuIG8ucmVkPWUucmVkLXQucmVkLG8uZ3JlZW49ZS5ncmVlbi10LmdyZWVuLG8uYmx1ZT1lLmJsdWUtdC5ibHVlLG8uYWxwaGE9ZS5hbHBoYS10LmFscGhhLG99c3RhdGljIG11bHRpcGx5KGUsdCxvKXtyZXR1cm4gby5yZWQ9ZS5yZWQqdC5yZWQsby5ncmVlbj1lLmdyZWVuKnQuZ3JlZW4sby5ibHVlPWUuYmx1ZSp0LmJsdWUsby5hbHBoYT1lLmFscGhhKnQuYWxwaGEsb31zdGF0aWMgZGl2aWRlKGUsdCxvKXtyZXR1cm4gby5yZWQ9ZS5yZWQvdC5yZWQsby5ncmVlbj1lLmdyZWVuL3QuZ3JlZW4sby5ibHVlPWUuYmx1ZS90LmJsdWUsby5hbHBoYT1lLmFscGhhL3QuYWxwaGEsb31zdGF0aWMgbW9kKGUsdCxvKXtyZXR1cm4gby5yZWQ9ZS5yZWQldC5yZWQsby5ncmVlbj1lLmdyZWVuJXQuZ3JlZW4sby5ibHVlPWUuYmx1ZSV0LmJsdWUsby5hbHBoYT1lLmFscGhhJXQuYWxwaGEsb31zdGF0aWMgbGVycChlLHQsbyxhKXtyZXR1cm4gYS5yZWQ9ay5sZXJwKGUucmVkLHQucmVkLG8pLGEuZ3JlZW49ay5sZXJwKGUuZ3JlZW4sdC5ncmVlbixvKSxhLmJsdWU9ay5sZXJwKGUuYmx1ZSx0LmJsdWUsbyksYS5hbHBoYT1rLmxlcnAoZS5hbHBoYSx0LmFscGhhLG8pLGF9c3RhdGljIG11bHRpcGx5QnlTY2FsYXIoZSx0LG8pe3JldHVybiBvLnJlZD1lLnJlZCp0LG8uZ3JlZW49ZS5ncmVlbip0LG8uYmx1ZT1lLmJsdWUqdCxvLmFscGhhPWUuYWxwaGEqdCxvfXN0YXRpYyBkaXZpZGVCeVNjYWxhcihlLHQsbyl7cmV0dXJuIG8ucmVkPWUucmVkL3Qsby5ncmVlbj1lLmdyZWVuL3Qsby5ibHVlPWUuYmx1ZS90LG8uYWxwaGE9ZS5hbHBoYS90LG99fTthci5zdXBwb3J0c1R5cGVkQXJyYXlzKCkmJihWZz1uZXcgQXJyYXlCdWZmZXIoNCksSGc9bmV3IFVpbnQzMkFycmF5KFZnKSxacj1uZXcgVWludDhBcnJheShWZykpO0ZEPS9eIyhbMC05YS1mXSkoWzAtOWEtZl0pKFswLTlhLWZdKShbMC05YS1mXSk/JC9pLEREPS9eIyhbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSk/JC9pLEJEPS9ecmdiYT9ccypcKFxzKihbMC05Ll0rJT8pXHMqWyxcc10rXHMqKFswLTkuXSslPylccypbLFxzXStccyooWzAtOS5dKyU/KSg/OlxzKlssXHMvXStccyooWzAtOS5dKykpP1xzKlwpJC9pLFVEPS9eaHNsYT9ccypcKFxzKihbMC05Ll0rKVxzKlssXHNdK1xzKihbMC05Ll0rJSlccypbLFxzXStccyooWzAtOS5dKyUpKD86XHMqWyxccy9dK1xzKihbMC05Ll0rKSk/XHMqXCkkL2k7Vy5wYWNrZWRMZW5ndGg9NDtXLkFMSUNFQkxVRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjBGOEZGIikpO1cuQU5USVFVRVdISVRFPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGQUVCRDciKSk7Vy5BUVVBPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZGRkYiKSk7Vy5BUVVBTUFSSU5FPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3RkZGRDQiKSk7Vy5BWlVSRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjBGRkZGIikpO1cuQkVJR0U9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RjVEQyIpKTtXLkJJU1FVRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFNEM0IikpO1cuQkxBQ0s9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDAwMCIpKTtXLkJMQU5DSEVEQUxNT05EPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkVCQ0QiKSk7Vy5CTFVFPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwRkYiKSk7Vy5CTFVFVklPTEVUPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4QTJCRTIiKSk7Vy5CUk9XTj1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTUyQTJBIikpO1cuQlVSTFlXT09EPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNERUI4ODciKSk7Vy5DQURFVEJMVUU9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzVGOUVBMCIpKTtXLkNIQVJUUkVVU0U9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzdGRkYwMCIpKTtXLkNIT0NPTEFURT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRDI2OTFFIikpO1cuQ09SQUw9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGN0Y1MCIpKTtXLkNPUk5GTE9XRVJCTFVFPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2NDk1RUQiKSk7Vy5DT1JOU0lMSz1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGOERDIikpO1cuQ1JJTVNPTj1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjREMxNDNDIikpO1cuQ1lBTj1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBGRkZGIikpO1cuREFSS0JMVUU9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDA4QiIpKTtXLkRBUktDWUFOPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDhCOEIiKSk7Vy5EQVJLR09MREVOUk9EPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCODg2MEIiKSk7Vy5EQVJLR1JBWT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTlBOUE5IikpO1cuREFSS0dSRUVOPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDY0MDAiKSk7Vy5EQVJLR1JFWT1XLkRBUktHUkFZO1cuREFSS0tIQUtJPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCREI3NkIiKSk7Vy5EQVJLTUFHRU5UQT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEIwMDhCIikpO1cuREFSS09MSVZFR1JFRU49T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzU1NkIyRiIpKTtXLkRBUktPUkFOR0U9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGOEMwMCIpKTtXLkRBUktPUkNISUQ9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzk5MzJDQyIpKTtXLkRBUktSRUQ9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzhCMDAwMCIpKTtXLkRBUktTQUxNT049T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0U5OTY3QSIpKTtXLkRBUktTRUFHUkVFTj1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEZCQzhGIikpO1cuREFSS1NMQVRFQkxVRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDgzRDhCIikpO1cuREFSS1NMQVRFR1JBWT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMkY0RjRGIikpO1cuREFSS1NMQVRFR1JFWT1XLkRBUktTTEFURUdSQVk7Vy5EQVJLVFVSUVVPSVNFPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMENFRDEiKSk7Vy5EQVJLVklPTEVUPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5NDAwRDMiKSk7Vy5ERUVQUElOSz1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkYxNDkzIikpO1cuREVFUFNLWUJMVUU9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzAwQkZGRiIpKTtXLkRJTUdSQVk9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzY5Njk2OSIpKTtXLkRJTUdSRVk9Vy5ESU1HUkFZO1cuRE9ER0VSQkxVRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMUU5MEZGIikpO1cuRklSRUJSSUNLPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCMjIyMjIiKSk7Vy5GTE9SQUxXSElURT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGQUYwIikpO1cuRk9SRVNUR1JFRU49T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzIyOEIyMiIpKTtXLkZVQ0hTSUE9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDBGRiIpKTtXLkdBSU5TQk9STz1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRENEQ0RDIikpO1cuR0hPU1RXSElURT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjhGOEZGIikpO1cuR09MRD1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZENzAwIikpO1cuR09MREVOUk9EPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQUE1MjAiKSk7Vy5HUkFZPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4MDgwODAiKSk7Vy5HUkVFTj1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDA4MDAwIikpO1cuR1JFRU5ZRUxMT1c9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0FERkYyRiIpKTtXLkdSRVk9Vy5HUkFZO1cuSE9ORVlERVc9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0YwRkZGMCIpKTtXLkhPVFBJTks9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGNjlCNCIpKTtXLklORElBTlJFRD1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQ0Q1QzVDIikpO1cuSU5ESUdPPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0QjAwODIiKSk7Vy5JVk9SWT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGRkYwIikpO1cuS0hBS0k9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0YwRTY4QyIpKTtXLkxBVkVOREVSPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFNkU2RkEiKSk7Vy5MQVZFTkRBUl9CTFVTSD1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGMEY1IikpO1cuTEFXTkdSRUVOPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3Q0ZDMDAiKSk7Vy5MRU1PTkNISUZGT049T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkFDRCIpKTtXLkxJR0hUQkxVRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQUREOEU2IikpO1cuTElHSFRDT1JBTD1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjA4MDgwIikpO1cuTElHSFRDWUFOPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFMEZGRkYiKSk7Vy5MSUdIVEdPTERFTlJPRFlFTExPVz1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkFGQUQyIikpO1cuTElHSFRHUkFZPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEM0QzRDMiKSk7Vy5MSUdIVEdSRUVOPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5MEVFOTAiKSk7Vy5MSUdIVEdSRVk9Vy5MSUdIVEdSQVk7Vy5MSUdIVFBJTks9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGQjZDMSIpKTtXLkxJR0hUU0VBR1JFRU49T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzIwQjJBQSIpKTtXLkxJR0hUU0tZQkxVRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjODdDRUZBIikpO1cuTElHSFRTTEFURUdSQVk9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzc3ODg5OSIpKTtXLkxJR0hUU0xBVEVHUkVZPVcuTElHSFRTTEFURUdSQVk7Vy5MSUdIVFNURUVMQkxVRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjBDNERFIikpO1cuTElHSFRZRUxMT1c9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkZFMCIpKTtXLkxJTUU9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkYwMCIpKTtXLkxJTUVHUkVFTj1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMzJDRDMyIikpO1cuTElORU49T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZBRjBFNiIpKTtXLk1BR0VOVEE9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDBGRiIpKTtXLk1BUk9PTj1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjODAwMDAwIikpO1cuTUVESVVNQVFVQU1BUklORT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNjZDREFBIikpO1cuTUVESVVNQkxVRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDAwMENEIikpO1cuTUVESVVNT1JDSElEPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCQTU1RDMiKSk7Vy5NRURJVU1QVVJQTEU9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzkzNzBEQiIpKTtXLk1FRElVTVNFQUdSRUVOPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMzQ0IzNzEiKSk7Vy5NRURJVU1TTEFURUJMVUU9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzdCNjhFRSIpKTtXLk1FRElVTVNQUklOR0dSRUVOPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZBOUEiKSk7Vy5NRURJVU1UVVJRVU9JU0U9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzQ4RDFDQyIpKTtXLk1FRElVTVZJT0xFVFJFRD1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQzcxNTg1IikpO1cuTUlETklHSFRCTFVFPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMxOTE5NzAiKSk7Vy5NSU5UQ1JFQU09T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RkZGQSIpKTtXLk1JU1RZUk9TRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFNEUxIikpO1cuTU9DQ0FTSU49T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRTRCNSIpKTtXLk5BVkFKT1dISVRFPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkRFQUQiKSk7Vy5OQVZZPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwODAiKSk7Vy5PTERMQUNFPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGREY1RTYiKSk7Vy5PTElWRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjODA4MDAwIikpO1cuT0xJVkVEUkFCPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2QjhFMjMiKSk7Vy5PUkFOR0U9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGQTUwMCIpKTtXLk9SQU5HRVJFRD1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkY0NTAwIikpO1cuT1JDSElEPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQTcwRDYiKSk7Vy5QQUxFR09MREVOUk9EPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFRUU4QUEiKSk7Vy5QQUxFR1JFRU49T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzk4RkI5OCIpKTtXLlBBTEVUVVJRVU9JU0U9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0FGRUVFRSIpKTtXLlBBTEVWSU9MRVRSRUQ9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0RCNzA5MyIpKTtXLlBBUEFZQVdISVA9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRUZENSIpKTtXLlBFQUNIUFVGRj1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZEQUI5IikpO1cuUEVSVT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQ0Q4NTNGIikpO1cuUElOSz1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZDMENCIikpO1cuUExVTT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRERBMEREIikpO1cuUE9XREVSQkxVRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjBFMEU2IikpO1cuUFVSUExFPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4MDAwODAiKSk7Vy5SRUQ9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDAwMCIpKTtXLlJPU1lCUk9XTj1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQkM4RjhGIikpO1cuUk9ZQUxCTFVFPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0MTY5RTEiKSk7Vy5TQURETEVCUk9XTj1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEI0NTEzIikpO1cuU0FMTU9OPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGQTgwNzIiKSk7Vy5TQU5EWUJST1dOPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGNEE0NjAiKSk7Vy5TRUFHUkVFTj1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMkU4QjU3IikpO1cuU0VBU0hFTEw9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRjVFRSIpKTtXLlNJRU5OQT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTA1MjJEIikpO1cuU0lMVkVSPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNDMEMwQzAiKSk7Vy5TS1lCTFVFPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4N0NFRUIiKSk7Vy5TTEFURUJMVUU9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzZBNUFDRCIpKTtXLlNMQVRFR1JBWT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNzA4MDkwIikpO1cuU0xBVEVHUkVZPVcuU0xBVEVHUkFZO1cuU05PVz1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGQUZBIikpO1cuU1BSSU5HR1JFRU49T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkY3RiIpKTtXLlNURUVMQkxVRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDY4MkI0IikpO1cuVEFOPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEMkI0OEMiKSk7Vy5URUFMPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDgwODAiKSk7Vy5USElTVExFPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEOEJGRDgiKSk7Vy5UT01BVE89T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGNjM0NyIpKTtXLlRVUlFVT0lTRT1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDBFMEQwIikpO1cuVklPTEVUPU9iamVjdC5mcmVlemUoVy5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFRTgyRUUiKSk7Vy5XSEVBVD1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjVERUIzIikpO1cuV0hJVEU9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkZGRiIpKTtXLldISVRFU01PS0U9T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RjVGNSIpKTtXLllFTExPVz1PYmplY3QuZnJlZXplKFcuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGRjAwIikpO1cuWUVMTE9XR1JFRU49T2JqZWN0LmZyZWV6ZShXLmZyb21Dc3NDb2xvclN0cmluZygiIzlBQ0QzMiIpKTtXLlRSQU5TUEFSRU5UPU9iamVjdC5mcmVlemUobmV3IFcoMCwwLDAsMCkpO0plPVd9KTtmdW5jdGlvbiBqRChuLGUsdCxvLGEpe2xldCByPVlSO3IubGVuZ3RoPWE7bGV0IGksZj10LnJlZCxkPXQuZ3JlZW4sYz10LmJsdWUsdT10LmFscGhhLGw9by5yZWQsbT1vLmdyZWVuLGg9by5ibHVlLGI9by5hbHBoYTtpZihKZS5lcXVhbHModCxvKSl7Zm9yKGk9MDtpPGE7aSsrKXJbaV09SmUuY2xvbmUodCk7cmV0dXJuIHJ9bGV0IHA9KGwtZikvYSx5PShtLWQpL2EsVD0oaC1jKS9hLF89KGItdSkvYTtmb3IoaT0wO2k8YTtpKyspcltpXT1uZXcgSmUoZitpKnAsZCtpKnksYytpKlQsdStpKl8pO3JldHVybiByfWZ1bmN0aW9uIGhkKG4pe249bj8/T2UuRU1QVFlfT0JKRUNUO2xldCBlPW4ucG9zaXRpb25zLHQ9bi5jb2xvcnMsbz1uLndpZHRoPz8xLGE9bi5jb2xvcnNQZXJWZXJ0ZXg/PyExO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX2NvbG9ycz10LHRoaXMuX3dpZHRoPW8sdGhpcy5fY29sb3JzUGVyVmVydGV4PWEsdGhpcy5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKG4udmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxUKSx0aGlzLl9hcmNUeXBlPW4uYXJjVHlwZT8/YnQuR0VPREVTSUMsdGhpcy5fZ3JhbnVsYXJpdHk9bi5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsdGhpcy5fZWxsaXBzb2lkPUsuY2xvbmUobi5lbGxpcHNvaWQ/P0suZGVmYXVsdCksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUG9seWxpbmVHZW9tZXRyeSI7bGV0IHI9MStlLmxlbmd0aCpzLnBhY2tlZExlbmd0aDtyKz1nKHQpPzErdC5sZW5ndGgqSmUucGFja2VkTGVuZ3RoOjEsdGhpcy5wYWNrZWRMZW5ndGg9citLLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGgrNH12YXIgWVIsSlIsWlIsUmMsS1IscVIsV1IsWFIsS2csUVI9WCgoKT0+e2hjKCk7S2EoKTtFdCgpO01lKCk7a3MoKTtDdCgpO3N0KCk7ZmUoKTtWZSgpO1h0KCk7WXQoKTtybigpO0psKCk7WnQoKTtqZSgpO3dzKCk7dG4oKTtDbygpO1lSPVtdO2hkLnBhY2s9ZnVuY3Rpb24obixlLHQpe3Q9dD8/MDtsZXQgbyxhPW4uX3Bvc2l0aW9ucyxyPWEubGVuZ3RoO2ZvcihlW3QrK109cixvPTA7bzxyOysrbyx0Kz1zLnBhY2tlZExlbmd0aClzLnBhY2soYVtvXSxlLHQpO2xldCBpPW4uX2NvbG9ycztmb3Iocj1nKGkpP2kubGVuZ3RoOjAsZVt0KytdPXIsbz0wO288cjsrK28sdCs9SmUucGFja2VkTGVuZ3RoKUplLnBhY2soaVtvXSxlLHQpO3JldHVybiBLLnBhY2sobi5fZWxsaXBzb2lkLGUsdCksdCs9Sy5wYWNrZWRMZW5ndGgsaGUucGFjayhuLl92ZXJ0ZXhGb3JtYXQsZSx0KSx0Kz1oZS5wYWNrZWRMZW5ndGgsZVt0KytdPW4uX3dpZHRoLGVbdCsrXT1uLl9jb2xvcnNQZXJWZXJ0ZXg/MTowLGVbdCsrXT1uLl9hcmNUeXBlLGVbdF09bi5fZ3JhbnVsYXJpdHksZX07SlI9Sy5jbG9uZShLLlVOSVRfU1BIRVJFKSxaUj1uZXcgaGUsUmM9e3Bvc2l0aW9uczp2b2lkIDAsY29sb3JzOnZvaWQgMCxlbGxpcHNvaWQ6SlIsdmVydGV4Rm9ybWF0OlpSLHdpZHRoOnZvaWQgMCxjb2xvcnNQZXJWZXJ0ZXg6dm9pZCAwLGFyY1R5cGU6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMH07aGQudW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtlPWU/PzA7bGV0IG8sYT1uW2UrK10scj1uZXcgQXJyYXkoYSk7Zm9yKG89MDtvPGE7KytvLGUrPXMucGFja2VkTGVuZ3RoKXJbb109cy51bnBhY2sobixlKTthPW5bZSsrXTtsZXQgaT1hPjA/bmV3IEFycmF5KGEpOnZvaWQgMDtmb3Iobz0wO288YTsrK28sZSs9SmUucGFja2VkTGVuZ3RoKWlbb109SmUudW5wYWNrKG4sZSk7bGV0IGY9Sy51bnBhY2sobixlLEpSKTtlKz1LLnBhY2tlZExlbmd0aDtsZXQgZD1oZS51bnBhY2sobixlLFpSKTtlKz1oZS5wYWNrZWRMZW5ndGg7bGV0IGM9bltlKytdLHU9bltlKytdPT09MSxsPW5bZSsrXSxtPW5bZV07cmV0dXJuIGcodCk/KHQuX3Bvc2l0aW9ucz1yLHQuX2NvbG9ycz1pLHQuX2VsbGlwc29pZD1LLmNsb25lKGYsdC5fZWxsaXBzb2lkKSx0Ll92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoZCx0Ll92ZXJ0ZXhGb3JtYXQpLHQuX3dpZHRoPWMsdC5fY29sb3JzUGVyVmVydGV4PXUsdC5fYXJjVHlwZT1sLHQuX2dyYW51bGFyaXR5PW0sdCk6KFJjLnBvc2l0aW9ucz1yLFJjLmNvbG9ycz1pLFJjLndpZHRoPWMsUmMuY29sb3JzUGVyVmVydGV4PXUsUmMuYXJjVHlwZT1sLFJjLmdyYW51bGFyaXR5PW0sbmV3IGhkKFJjKSl9O0tSPW5ldyBzLHFSPW5ldyBzLFdSPW5ldyBzLFhSPW5ldyBzO2hkLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe2xldCBlPW4uX3dpZHRoLHQ9bi5fdmVydGV4Rm9ybWF0LG89bi5fY29sb3JzLGE9bi5fY29sb3JzUGVyVmVydGV4LHI9bi5fYXJjVHlwZSxpPW4uX2dyYW51bGFyaXR5LGY9bi5fZWxsaXBzb2lkLGQsYyx1LGw9W10sbT14bihuLl9wb3NpdGlvbnMscy5lcXVhbHNFcHNpbG9uLCExLGwpO2lmKGcobykmJmwubGVuZ3RoPjApe2xldCB2PTAsVT1sWzBdO289by5maWx0ZXIoZnVuY3Rpb24oTCxEKXtsZXQgRztyZXR1cm4gYT9HPUQ9PT1VfHxEPT09MCYmVT09PTE6Rz1EKzE9PT1VLEc/KHYrKyxVPWxbdl0sITEpOiEwfSl9bGV0IGg9bS5sZW5ndGg7aWYoaDwyfHxlPD0wKXJldHVybjtpZihyPT09YnQuR0VPREVTSUN8fHI9PT1idC5SSFVNQil7bGV0IHYsVTtyPT09YnQuR0VPREVTSUM/KHY9ay5jaG9yZExlbmd0aChpLGYubWF4aW11bVJhZGl1cyksVT1ibi5udW1iZXJPZlBvaW50cyk6KHY9aSxVPWJuLm51bWJlck9mUG9pbnRzUmh1bWJMaW5lKTtsZXQgTD1ibi5leHRyYWN0SGVpZ2h0cyhtLGYpO2lmKGcobykpe2xldCBEPTE7Zm9yKGQ9MDtkPGgtMTsrK2QpRCs9VShtW2RdLG1bZCsxXSx2KTtsZXQgRz1uZXcgQXJyYXkoRCksVj0wO2ZvcihkPTA7ZDxoLTE7KytkKXtsZXQgTz1tW2RdLEo9bVtkKzFdLHJlPW9bZF0sc2U9VShPLEosdik7aWYoYSYmZDxEKXtsZXQgb2U9b1tkKzFdLGNlPWpEKE8sSixyZSxvZSxzZSksbWU9Y2UubGVuZ3RoO2ZvcihjPTA7YzxtZTsrK2MpR1tWKytdPWNlW2NdfWVsc2UgZm9yKGM9MDtjPHNlOysrYylHW1YrK109SmUuY2xvbmUocmUpfUdbVl09SmUuY2xvbmUob1tvLmxlbmd0aC0xXSksbz1HLFlSLmxlbmd0aD0wfXI9PT1idC5HRU9ERVNJQz9tPWJuLmdlbmVyYXRlQ2FydGVzaWFuQXJjKHtwb3NpdGlvbnM6bSxtaW5EaXN0YW5jZTp2LGVsbGlwc29pZDpmLGhlaWdodDpMfSk6bT1ibi5nZW5lcmF0ZUNhcnRlc2lhblJodW1iQXJjKHtwb3NpdGlvbnM6bSxncmFudWxhcml0eTp2LGVsbGlwc29pZDpmLGhlaWdodDpMfSl9aD1tLmxlbmd0aDtsZXQgYj1oKjQtNCxwPW5ldyBGbG9hdDY0QXJyYXkoYiozKSx5PW5ldyBGbG9hdDY0QXJyYXkoYiozKSxUPW5ldyBGbG9hdDY0QXJyYXkoYiozKSxfPW5ldyBGbG9hdDMyQXJyYXkoYioyKSx3PXQuc3Q/bmV3IEZsb2F0MzJBcnJheShiKjIpOnZvaWQgMCxFPWcobyk/bmV3IFVpbnQ4QXJyYXkoYio0KTp2b2lkIDAsUj0wLFM9MCxDPTAsST0wLE07Zm9yKGM9MDtjPGg7KytjKXtjPT09MD8oTT1LUixzLnN1YnRyYWN0KG1bMF0sbVsxXSxNKSxzLmFkZChtWzBdLE0sTSkpOk09bVtjLTFdLHMuY2xvbmUoTSxXUikscy5jbG9uZShtW2NdLHFSKSxjPT09aC0xPyhNPUtSLHMuc3VidHJhY3QobVtoLTFdLG1baC0yXSxNKSxzLmFkZChtW2gtMV0sTSxNKSk6TT1tW2MrMV0scy5jbG9uZShNLFhSKTtsZXQgdixVO2coRSkmJihjIT09MCYmIWE/dj1vW2MtMV06dj1vW2NdLGMhPT1oLTEmJihVPW9bY10pKTtsZXQgTD1jPT09MD8yOjAsRD1jPT09aC0xPzI6NDtmb3IodT1MO3U8RDsrK3Upe3MucGFjayhxUixwLFIpLHMucGFjayhXUix5LFIpLHMucGFjayhYUixULFIpLFIrPTM7bGV0IEc9dS0yPDA/LTE6MTtpZihfW1MrK109MioodSUyKS0xLF9bUysrXT1HKmUsdC5zdCYmKHdbQysrXT1jLyhoLTEpLHdbQysrXT1NYXRoLm1heChfW1MtMl0sMCkpLGcoRSkpe2xldCBWPXU8Mj92OlU7RVtJKytdPUplLmZsb2F0VG9CeXRlKFYucmVkKSxFW0krK109SmUuZmxvYXRUb0J5dGUoVi5ncmVlbiksRVtJKytdPUplLmZsb2F0VG9CeXRlKFYuYmx1ZSksRVtJKytdPUplLmZsb2F0VG9CeXRlKFYuYWxwaGEpfX19bGV0IFA9bmV3IFFlO1AucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpwfSksUC5wcmV2UG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp5fSksUC5uZXh0UG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSksUC5leHBhbmRBbmRXaWR0aD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6X30pLHQuc3QmJihQLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczp3fSkpLGcoRSkmJihQLmNvbG9yPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjQsdmFsdWVzOkUsbm9ybWFsaXplOiEwfSkpO2xldCBGPUllLmNyZWF0ZVR5cGVkQXJyYXkoYixoKjYtNiksQT0wLHg9MCxOPWgtMTtmb3IoYz0wO2M8TjsrK2MpRlt4KytdPUEsRlt4KytdPUErMixGW3grK109QSsxLEZbeCsrXT1BKzEsRlt4KytdPUErMixGW3grK109QSszLEErPTQ7cmV0dXJuIG5ldyBQZSh7YXR0cmlidXRlczpQLGluZGljZXM6RixwcmltaXRpdmVUeXBlOkZlLlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpwZS5mcm9tUG9pbnRzKG0pLGdlb21ldHJ5VHlwZTpEci5QT0xZTElORVN9KX07S2c9aGR9KTt2YXIgcWc9e307JGUocWcse2RlZmF1bHQ6KCk9PnpEfSk7ZnVuY3Rpb24gTEQobixlKXtyZXR1cm4gZyhlKSYmKG49S2cudW5wYWNrKG4sZSkpLG4uX2VsbGlwc29pZD1LLmNsb25lKG4uX2VsbGlwc29pZCksS2cuY3JlYXRlR2VvbWV0cnkobil9dmFyIHpELFdnPVgoKCk9PntmZSgpO1ZlKCk7UVIoKTt6RD1MRH0pO2Z1bmN0aW9uIEdEKG4sZSx0LG8pe2xldCBhPW5ldyBRZTtvLnBvc2l0aW9uJiYoYS5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm59KSk7bGV0IHI9ZS5sZW5ndGgsaT1uLmxlbmd0aC8zLGY9KGktcioyKS8ocioyKSxkPXd0LnRyaWFuZ3VsYXRlKGUpLGM9KGYtMSkqcio2K2QubGVuZ3RoKjIsdT1JZS5jcmVhdGVUeXBlZEFycmF5KGksYyksbCxtLGgsYixwLHksVD1yKjIsXz0wO2ZvcihsPTA7bDxmLTE7bCsrKXtmb3IobT0wO208ci0xO20rKyloPW0qMitsKnIqMix5PWgrVCxiPWgrMSxwPWIrVCx1W18rK109Yix1W18rK109aCx1W18rK109cCx1W18rK109cCx1W18rK109aCx1W18rK109eTtoPXIqMi0yK2wqcioyLGI9aCsxLHA9YitULHk9aCtULHVbXysrXT1iLHVbXysrXT1oLHVbXysrXT1wLHVbXysrXT1wLHVbXysrXT1oLHVbXysrXT15fWlmKG8uc3R8fG8udGFuZ2VudHx8by5iaXRhbmdlbnQpe2xldCBSPW5ldyBGbG9hdDMyQXJyYXkoaSoyKSxTPTEvKGYtMSksQz0xL3QuaGVpZ2h0LEk9dC5oZWlnaHQvMixNLFAsRj0wO2ZvcihsPTA7bDxmO2wrKyl7Zm9yKE09bCpTLFA9QyooZVswXS55K0kpLFJbRisrXT1NLFJbRisrXT1QLG09MTttPHI7bSsrKVA9QyooZVttXS55K0kpLFJbRisrXT1NLFJbRisrXT1QLFJbRisrXT1NLFJbRisrXT1QO1A9QyooZVswXS55K0kpLFJbRisrXT1NLFJbRisrXT1QfWZvcihtPTA7bTxyO20rKylNPTAsUD1DKihlW21dLnkrSSksUltGKytdPU0sUltGKytdPVA7Zm9yKG09MDttPHI7bSsrKU09KGYtMSkqUyxQPUMqKGVbbV0ueStJKSxSW0YrK109TSxSW0YrK109UDthLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpuZXcgRmxvYXQzMkFycmF5KFIpfSl9bGV0IHc9aS1yKjI7Zm9yKGw9MDtsPGQubGVuZ3RoO2wrPTMpe2xldCBSPWRbbF0rdyxTPWRbbCsxXSt3LEM9ZFtsKzJdK3c7dVtfKytdPVIsdVtfKytdPVMsdVtfKytdPUMsdVtfKytdPUMrcix1W18rK109UytyLHVbXysrXT1SK3J9bGV0IEU9bmV3IFBlKHthdHRyaWJ1dGVzOmEsaW5kaWNlczp1LGJvdW5kaW5nU3BoZXJlOnBlLmZyb21WZXJ0aWNlcyhuKSxwcmltaXRpdmVUeXBlOkZlLlRSSUFOR0xFU30pO2lmKG8ubm9ybWFsJiYoRT1MdC5jb21wdXRlTm9ybWFsKEUpKSxvLnRhbmdlbnR8fG8uYml0YW5nZW50KXt0cnl7RT1MdC5jb21wdXRlVGFuZ2VudEFuZEJpdGFuZ2VudChFKX1jYXRjaHtSaCgicG9seWxpbmUtdm9sdW1lLXRhbmdlbnQtYml0YW5nZW50IiwiVW5hYmxlIHRvIGNvbXB1dGUgdGFuZ2VudHMgYW5kIGJpdGFuZ2VudHMgZm9yIHBvbHlsaW5lIHZvbHVtZSBnZW9tZXRyeSIpfW8udGFuZ2VudHx8KEUuYXR0cmlidXRlcy50YW5nZW50PXZvaWQgMCksby5iaXRhbmdlbnR8fChFLmF0dHJpYnV0ZXMuYml0YW5nZW50PXZvaWQgMCksby5zdHx8KEUuYXR0cmlidXRlcy5zdD12b2lkIDApfXJldHVybiBFfWZ1bmN0aW9uIGJkKG4pe249bj8/T2UuRU1QVFlfT0JKRUNUO2xldCBlPW4ucG9seWxpbmVQb3NpdGlvbnMsdD1uLnNoYXBlUG9zaXRpb25zO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX3NoYXBlPXQsdGhpcy5fZWxsaXBzb2lkPUsuY2xvbmUobi5lbGxpcHNvaWQ/P0suZGVmYXVsdCksdGhpcy5fY29ybmVyVHlwZT1uLmNvcm5lclR5cGU/P3NuLlJPVU5ERUQsdGhpcy5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKG4udmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxUKSx0aGlzLl9ncmFudWxhcml0eT1uLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5bGluZVZvbHVtZUdlb21ldHJ5IjtsZXQgbz0xK2UubGVuZ3RoKnMucGFja2VkTGVuZ3RoO28rPTErdC5sZW5ndGgqWS5wYWNrZWRMZW5ndGgsdGhpcy5wYWNrZWRMZW5ndGg9bytLLnBhY2tlZExlbmd0aCtoZS5wYWNrZWRMZW5ndGgrMn12YXIgJFIsZTIsbWQsVkQsWGcsdDI9WCgoKT0+e0thKCk7R2YoKTtFdCgpO3Z0KCk7TWUoKTtDdCgpO3ljKCk7c3QoKTtmZSgpO1ZlKCk7WHQoKTtZdCgpO3JuKCk7ZnIoKTtadCgpO2plKCk7dzAoKTtXYSgpO0NoKCk7dG4oKTtDbygpO2JjKCk7YmQucGFjaz1mdW5jdGlvbihuLGUsdCl7dD10Pz8wO2xldCBvLGE9bi5fcG9zaXRpb25zLHI9YS5sZW5ndGg7Zm9yKGVbdCsrXT1yLG89MDtvPHI7KytvLHQrPXMucGFja2VkTGVuZ3RoKXMucGFjayhhW29dLGUsdCk7bGV0IGk9bi5fc2hhcGU7Zm9yKHI9aS5sZW5ndGgsZVt0KytdPXIsbz0wO288cjsrK28sdCs9WS5wYWNrZWRMZW5ndGgpWS5wYWNrKGlbb10sZSx0KTtyZXR1cm4gSy5wYWNrKG4uX2VsbGlwc29pZCxlLHQpLHQrPUsucGFja2VkTGVuZ3RoLGhlLnBhY2sobi5fdmVydGV4Rm9ybWF0LGUsdCksdCs9aGUucGFja2VkTGVuZ3RoLGVbdCsrXT1uLl9jb3JuZXJUeXBlLGVbdF09bi5fZ3JhbnVsYXJpdHksZX07JFI9Sy5jbG9uZShLLlVOSVRfU1BIRVJFKSxlMj1uZXcgaGUsbWQ9e3BvbHlsaW5lUG9zaXRpb25zOnZvaWQgMCxzaGFwZVBvc2l0aW9uczp2b2lkIDAsZWxsaXBzb2lkOiRSLHZlcnRleEZvcm1hdDplMixjb3JuZXJUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDB9O2JkLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvLGE9bltlKytdLHI9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbyxlKz1zLnBhY2tlZExlbmd0aClyW29dPXMudW5wYWNrKG4sZSk7YT1uW2UrK107bGV0IGk9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbyxlKz1ZLnBhY2tlZExlbmd0aClpW29dPVkudW5wYWNrKG4sZSk7bGV0IGY9Sy51bnBhY2sobixlLCRSKTtlKz1LLnBhY2tlZExlbmd0aDtsZXQgZD1oZS51bnBhY2sobixlLGUyKTtlKz1oZS5wYWNrZWRMZW5ndGg7bGV0IGM9bltlKytdLHU9bltlXTtyZXR1cm4gZyh0KT8odC5fcG9zaXRpb25zPXIsdC5fc2hhcGU9aSx0Ll9lbGxpcHNvaWQ9Sy5jbG9uZShmLHQuX2VsbGlwc29pZCksdC5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKGQsdC5fdmVydGV4Rm9ybWF0KSx0Ll9jb3JuZXJUeXBlPWMsdC5fZ3JhbnVsYXJpdHk9dSx0KToobWQucG9seWxpbmVQb3NpdGlvbnM9cixtZC5zaGFwZVBvc2l0aW9ucz1pLG1kLmNvcm5lclR5cGU9YyxtZC5ncmFudWxhcml0eT11LG5ldyBiZChtZCkpfTtWRD1uZXcgcWE7YmQuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7bGV0IGU9bi5fcG9zaXRpb25zLHQ9eG4oZSxzLmVxdWFsc0Vwc2lsb24pLG89bi5fc2hhcGU7aWYobz14aS5yZW1vdmVEdXBsaWNhdGVzRnJvbVNoYXBlKG8pLHQubGVuZ3RoPDJ8fG8ubGVuZ3RoPDMpcmV0dXJuO3d0LmNvbXB1dGVXaW5kaW5nT3JkZXIyRChvKT09PU1vLkNMT0NLV0lTRSYmby5yZXZlcnNlKCk7bGV0IGE9cWEuZnJvbVBvaW50cyhvLFZEKSxyPXhpLmNvbXB1dGVQb3NpdGlvbnModCxvLGEsbiwhMCk7cmV0dXJuIEdEKHIsbyxhLG4uX3ZlcnRleEZvcm1hdCl9O1hnPWJkfSk7dmFyIFlnPXt9OyRlKFlnLHtkZWZhdWx0OigpPT5LRH0pO2Z1bmN0aW9uIEhEKG4sZSl7cmV0dXJuIGcoZSkmJihuPVhnLnVucGFjayhuLGUpKSxuLl9lbGxpcHNvaWQ9Sy5jbG9uZShuLl9lbGxpcHNvaWQpLFhnLmNyZWF0ZUdlb21ldHJ5KG4pfXZhciBLRCxKZz1YKCgpPT57ZmUoKTtWZSgpO3QyKCk7S0Q9SER9KTtmdW5jdGlvbiBxRChuLGUpe2xldCB0PW5ldyBRZTt0LnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bn0pO2xldCBvPWUubGVuZ3RoLGE9dC5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMsaT1uLmxlbmd0aC8zL28sZj1JZS5jcmVhdGVUeXBlZEFycmF5KGEsMipvKihpKzEpKSxkLGMsdT0wO2Q9MDtsZXQgbD1kKm87Zm9yKGM9MDtjPG8tMTtjKyspZlt1KytdPWMrbCxmW3UrK109YytsKzE7Zm9yKGZbdSsrXT1vLTErbCxmW3UrK109bCxkPWktMSxsPWQqbyxjPTA7YzxvLTE7YysrKWZbdSsrXT1jK2wsZlt1KytdPWMrbCsxO2ZvcihmW3UrK109by0xK2wsZlt1KytdPWwsZD0wO2Q8aS0xO2QrKyl7bGV0IGg9bypkLGI9aCtvO2ZvcihjPTA7YzxvO2MrKylmW3UrK109YytoLGZbdSsrXT1jK2J9cmV0dXJuIG5ldyBQZSh7YXR0cmlidXRlczp0LGluZGljZXM6SWUuY3JlYXRlVHlwZWRBcnJheShhLGYpLGJvdW5kaW5nU3BoZXJlOnBlLmZyb21WZXJ0aWNlcyhuKSxwcmltaXRpdmVUeXBlOkZlLkxJTkVTfSl9ZnVuY3Rpb24gZ2Qobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5wb2x5bGluZVBvc2l0aW9ucyx0PW4uc2hhcGVQb3NpdGlvbnM7dGhpcy5fcG9zaXRpb25zPWUsdGhpcy5fc2hhcGU9dCx0aGlzLl9lbGxpcHNvaWQ9Sy5jbG9uZShuLmVsbGlwc29pZD8/Sy5kZWZhdWx0KSx0aGlzLl9jb3JuZXJUeXBlPW4uY29ybmVyVHlwZT8/c24uUk9VTkRFRCx0aGlzLl9ncmFudWxhcml0eT1uLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5bGluZVZvbHVtZU91dGxpbmVHZW9tZXRyeSI7bGV0IG89MStlLmxlbmd0aCpzLnBhY2tlZExlbmd0aDtvKz0xK3QubGVuZ3RoKlkucGFja2VkTGVuZ3RoLHRoaXMucGFja2VkTGVuZ3RoPW8rSy5wYWNrZWRMZW5ndGgrMn12YXIgbjIscGQsV0QsWmcsbzI9WCgoKT0+e0thKCk7R2YoKTtFdCgpO3Z0KCk7TWUoKTtDdCgpO3ljKCk7c3QoKTtmZSgpO1ZlKCk7WHQoKTtZdCgpO3JuKCk7WnQoKTtqZSgpO1dhKCk7Q2goKTt0bigpO2JjKCk7Z2QucGFjaz1mdW5jdGlvbihuLGUsdCl7dD10Pz8wO2xldCBvLGE9bi5fcG9zaXRpb25zLHI9YS5sZW5ndGg7Zm9yKGVbdCsrXT1yLG89MDtvPHI7KytvLHQrPXMucGFja2VkTGVuZ3RoKXMucGFjayhhW29dLGUsdCk7bGV0IGk9bi5fc2hhcGU7Zm9yKHI9aS5sZW5ndGgsZVt0KytdPXIsbz0wO288cjsrK28sdCs9WS5wYWNrZWRMZW5ndGgpWS5wYWNrKGlbb10sZSx0KTtyZXR1cm4gSy5wYWNrKG4uX2VsbGlwc29pZCxlLHQpLHQrPUsucGFja2VkTGVuZ3RoLGVbdCsrXT1uLl9jb3JuZXJUeXBlLGVbdF09bi5fZ3JhbnVsYXJpdHksZX07bjI9Sy5jbG9uZShLLlVOSVRfU1BIRVJFKSxwZD17cG9seWxpbmVQb3NpdGlvbnM6dm9pZCAwLHNoYXBlUG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6bjIsaGVpZ2h0OnZvaWQgMCxjb3JuZXJUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDB9O2dkLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvLGE9bltlKytdLHI9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbyxlKz1zLnBhY2tlZExlbmd0aClyW29dPXMudW5wYWNrKG4sZSk7YT1uW2UrK107bGV0IGk9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbyxlKz1ZLnBhY2tlZExlbmd0aClpW29dPVkudW5wYWNrKG4sZSk7bGV0IGY9Sy51bnBhY2sobixlLG4yKTtlKz1LLnBhY2tlZExlbmd0aDtsZXQgZD1uW2UrK10sYz1uW2VdO3JldHVybiBnKHQpPyh0Ll9wb3NpdGlvbnM9cix0Ll9zaGFwZT1pLHQuX2VsbGlwc29pZD1LLmNsb25lKGYsdC5fZWxsaXBzb2lkKSx0Ll9jb3JuZXJUeXBlPWQsdC5fZ3JhbnVsYXJpdHk9Yyx0KToocGQucG9seWxpbmVQb3NpdGlvbnM9cixwZC5zaGFwZVBvc2l0aW9ucz1pLHBkLmNvcm5lclR5cGU9ZCxwZC5ncmFudWxhcml0eT1jLG5ldyBnZChwZCkpfTtXRD1uZXcgcWE7Z2QuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7bGV0IGU9bi5fcG9zaXRpb25zLHQ9eG4oZSxzLmVxdWFsc0Vwc2lsb24pLG89bi5fc2hhcGU7aWYobz14aS5yZW1vdmVEdXBsaWNhdGVzRnJvbVNoYXBlKG8pLHQubGVuZ3RoPDJ8fG8ubGVuZ3RoPDMpcmV0dXJuO3d0LmNvbXB1dGVXaW5kaW5nT3JkZXIyRChvKT09PU1vLkNMT0NLV0lTRSYmby5yZXZlcnNlKCk7bGV0IGE9cWEuZnJvbVBvaW50cyhvLFdEKSxyPXhpLmNvbXB1dGVQb3NpdGlvbnModCxvLGEsbiwhMSk7cmV0dXJuIHFEKHIsbyl9O1pnPWdkfSk7dmFyIFFnPXt9OyRlKFFnLHtkZWZhdWx0OigpPT5ZRH0pO2Z1bmN0aW9uIFhEKG4sZSl7cmV0dXJuIGcoZSkmJihuPVpnLnVucGFjayhuLGUpKSxuLl9lbGxpcHNvaWQ9Sy5jbG9uZShuLl9lbGxpcHNvaWQpLFpnLmNyZWF0ZUdlb21ldHJ5KG4pfXZhciBZRCwkZz1YKCgpPT57ZmUoKTtWZSgpO28yKCk7WUQ9WER9KTtmdW5jdGlvbiBpMihuLGUsdCxvLGEscixpKXtsZXQgZj1NYXRoLmNvcyhlKSxkPW8qZixjPXQqZix1PU1hdGguc2luKGUpLGw9byp1LG09dCp1O19kLl9lbGxpcHNvaWQ9Sy5kZWZhdWx0LE5hPV9kLnByb2plY3QobixOYSksTmE9cy5zdWJ0cmFjdChOYSxYaCxOYSk7bGV0IGg9Sm8uZnJvbVJvdGF0aW9uKGUsWkQpO05hPUpvLm11bHRpcGx5QnlWZWN0b3IoaCxOYSxOYSksTmE9cy5hZGQoTmEsWGgsTmEpLG49X2QudW5wcm9qZWN0KE5hLG4pLHItPTEsaS09MTtsZXQgYj1uLmxhdGl0dWRlLHA9YityKm0seT1iLWQqaSxUPWItZCppK3IqbSxfPU1hdGgubWF4KGIscCx5LFQpLHc9TWF0aC5taW4oYixwLHksVCksRT1uLmxvbmdpdHVkZSxSPUUrcipjLFM9RStpKmwsQz1FK2kqbCtyKmMsST1NYXRoLm1heChFLFIsUyxDKSxNPU1hdGgubWluKEUsUixTLEMpO3JldHVybntub3J0aDpfLHNvdXRoOncsZWFzdDpJLHdlc3Q6TSxncmFuWUNvczpkLGdyYW5ZU2luOmwsZ3JhblhDb3M6YyxncmFuWFNpbjptLG53Q29ybmVyOm59fXZhciBhMixyMixKRCxlXyxaRCxOYSxRRCxYaCxfZCx3byx0Xz1YKCgpPT57TWUoKTtndCgpO2ZlKCk7VmUoKTtQcigpO2plKCk7UGYoKTtobigpO2EyPU1hdGguY29zLHIyPU1hdGguc2luLEpEPU1hdGguc3FydCxlXz17fTtlXy5jb21wdXRlUG9zaXRpb249ZnVuY3Rpb24obixlLHQsbyxhLHIsaSl7bGV0IGY9ZS5yYWRpaVNxdWFyZWQsZD1uLm53Q29ybmVyLGM9bi5ib3VuZGluZ1JlY3RhbmdsZSx1PWQubGF0aXR1ZGUtbi5ncmFuWUNvcypvK2Eqbi5ncmFuWFNpbixsPWEyKHUpLG09cjIodSksaD1mLnoqbSxiPWQubG9uZ2l0dWRlK28qbi5ncmFuWVNpbithKm4uZ3JhblhDb3MscD1sKmEyKGIpLHk9bCpyMihiKSxUPWYueCpwLF89Zi55Knksdz1KRChUKnArXyp5K2gqbSk7aWYoci54PVQvdyxyLnk9Xy93LHIuej1oL3csdCl7bGV0IEU9bi5zdE53Q29ybmVyO2coRSk/KHU9RS5sYXRpdHVkZS1uLnN0R3JhbllDb3MqbythKm4uc3RHcmFuWFNpbixiPUUubG9uZ2l0dWRlK28qbi5zdEdyYW5ZU2luK2Eqbi5zdEdyYW5YQ29zLGkueD0oYi1uLnN0V2VzdCkqbi5sb25TY2FsYXIsaS55PSh1LW4uc3RTb3V0aCkqbi5sYXRTY2FsYXIpOihpLng9KGItYy53ZXN0KSpuLmxvblNjYWxhcixpLnk9KHUtYy5zb3V0aCkqbi5sYXRTY2FsYXIpfX07WkQ9bmV3IEpvLE5hPW5ldyBzLFFEPW5ldyBhZSxYaD1uZXcgcyxfZD1uZXcgbm87ZV8uY29tcHV0ZU9wdGlvbnM9ZnVuY3Rpb24obixlLHQsbyxhLHIsaSl7bGV0IGY9bi5lYXN0LGQ9bi53ZXN0LGM9bi5ub3J0aCx1PW4uc291dGgsbD0hMSxtPSExO2M9PT1rLlBJX09WRVJfVFdPJiYobD0hMCksdT09PS1rLlBJX09WRVJfVFdPJiYobT0hMCk7bGV0IGgsYj1jLXU7ZD5mP2g9ay5UV09fUEktZCtmOmg9Zi1kO2xldCBwPU1hdGguY2VpbChoL2UpKzEseT1NYXRoLmNlaWwoYi9lKSsxLFQ9aC8ocC0xKSxfPWIvKHktMSksdz14ZS5ub3J0aHdlc3QobixyKSxFPXhlLmNlbnRlcihuLFFEKTsodCE9PTB8fG8hPT0wKSYmKEUubG9uZ2l0dWRlPHcubG9uZ2l0dWRlJiYoRS5sb25naXR1ZGUrPWsuVFdPX1BJKSxfZC5fZWxsaXBzb2lkPUsuZGVmYXVsdCxYaD1fZC5wcm9qZWN0KEUsWGgpKTtsZXQgUj1fLFM9VCxDPTAsST0wLE09eGUuY2xvbmUobixhKSxQPXtncmFuWUNvczpSLGdyYW5ZU2luOkMsZ3JhblhDb3M6UyxncmFuWFNpbjpJLG53Q29ybmVyOncsYm91bmRpbmdSZWN0YW5nbGU6TSx3aWR0aDpwLGhlaWdodDp5LG5vcnRoQ2FwOmwsc291dGhDYXA6bX07aWYodCE9PTApe2xldCBGPWkyKHcsdCxULF8sRSxwLHkpO2M9Ri5ub3J0aCx1PUYuc291dGgsZj1GLmVhc3QsZD1GLndlc3QsUC5ncmFuWUNvcz1GLmdyYW5ZQ29zLFAuZ3JhbllTaW49Ri5ncmFuWVNpbixQLmdyYW5YQ29zPUYuZ3JhblhDb3MsUC5ncmFuWFNpbj1GLmdyYW5YU2luLE0ubm9ydGg9YyxNLnNvdXRoPXUsTS5lYXN0PWYsTS53ZXN0PWR9aWYobyE9PTApe3Q9dC1vO2xldCBGPXhlLm5vcnRod2VzdChNLGkpLEE9aTIoRix0LFQsXyxFLHAseSk7UC5zdEdyYW5ZQ29zPUEuZ3JhbllDb3MsUC5zdEdyYW5YQ29zPUEuZ3JhblhDb3MsUC5zdEdyYW5ZU2luPUEuZ3JhbllTaW4sUC5zdEdyYW5YU2luPUEuZ3JhblhTaW4sUC5zdE53Q29ybmVyPUYsUC5zdFdlc3Q9QS53ZXN0LFAuc3RTb3V0aD1BLnNvdXRofXJldHVybiBQfTt3bz1lX30pO2Z1bmN0aW9uIGgyKG4sZSl7bGV0IHQ9bmV3IFBlKHthdHRyaWJ1dGVzOm5ldyBRZSxwcmltaXRpdmVUeXBlOkZlLlRSSUFOR0xFU30pO3JldHVybiB0LmF0dHJpYnV0ZXMucG9zaXRpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczplLnBvc2l0aW9uc30pLG4ubm9ybWFsJiYodC5hdHRyaWJ1dGVzLm5vcm1hbD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZS5ub3JtYWxzfSkpLG4udGFuZ2VudCYmKHQuYXR0cmlidXRlcy50YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczplLnRhbmdlbnRzfSkpLG4uYml0YW5nZW50JiYodC5hdHRyaWJ1dGVzLmJpdGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZS5iaXRhbmdlbnRzfSkpLHR9ZnVuY3Rpb24gbkIobixlLHQsbyl7bGV0IGE9bi5sZW5ndGgscj1lLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGEpOnZvaWQgMCxpPWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGEpOnZvaWQgMCxmPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoYSk6dm9pZCAwLGQ9MCxjPXUyLHU9ZDIsbD1mMjtpZihlLm5vcm1hbHx8ZS50YW5nZW50fHxlLmJpdGFuZ2VudClmb3IobGV0IG09MDttPGE7bSs9Myl7bGV0IGg9cy5mcm9tQXJyYXkobixtLG5fKSxiPWQrMSxwPWQrMjtsPXQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGgsbCksKGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpJiYocy5jcm9zcyhzLlVOSVRfWixsLHUpLFoubXVsdGlwbHlCeVZlY3RvcihvLHUsdSkscy5ub3JtYWxpemUodSx1KSxlLmJpdGFuZ2VudCYmcy5ub3JtYWxpemUocy5jcm9zcyhsLHUsYyksYykpLGUubm9ybWFsJiYocltkXT1sLngscltiXT1sLnkscltwXT1sLnopLGUudGFuZ2VudCYmKGlbZF09dS54LGlbYl09dS55LGlbcF09dS56KSxlLmJpdGFuZ2VudCYmKGZbZF09Yy54LGZbYl09Yy55LGZbcF09Yy56KSxkKz0zfXJldHVybiBoMihlLHtwb3NpdGlvbnM6bixub3JtYWxzOnIsdGFuZ2VudHM6aSxiaXRhbmdlbnRzOmZ9KX1mdW5jdGlvbiBvQihuLGUsdCl7bGV0IG89bi5sZW5ndGgsYT1lLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KG8pOnZvaWQgMCxyPWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KG8pOnZvaWQgMCxpPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkobyk6dm9pZCAwLGY9MCxkPTAsYz0wLHU9ITAsbD11MixtPWQyLGg9ZjI7aWYoZS5ub3JtYWx8fGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpZm9yKGxldCBiPTA7YjxvO2IrPTYpe2xldCBwPXMuZnJvbUFycmF5KG4sYixuXykseT1zLmZyb21BcnJheShuLChiKzYpJW8sb18pO2lmKHUpe2xldCBUPXMuZnJvbUFycmF5KG4sKGIrMyklbyxtMik7cy5zdWJ0cmFjdCh5LHAseSkscy5zdWJ0cmFjdChULHAsVCksaD1zLm5vcm1hbGl6ZShzLmNyb3NzKFQseSxoKSxoKSx1PSExfXMuZXF1YWxzRXBzaWxvbih5LHAsay5FUFNJTE9OMTApJiYodT0hMCksKGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpJiYobD10Lmdlb2RldGljU3VyZmFjZU5vcm1hbChwLGwpLGUudGFuZ2VudCYmKG09cy5ub3JtYWxpemUocy5jcm9zcyhsLGgsbSksbSkpKSxlLm5vcm1hbCYmKGFbZisrXT1oLngsYVtmKytdPWgueSxhW2YrK109aC56LGFbZisrXT1oLngsYVtmKytdPWgueSxhW2YrK109aC56KSxlLnRhbmdlbnQmJihyW2QrK109bS54LHJbZCsrXT1tLnkscltkKytdPW0ueixyW2QrK109bS54LHJbZCsrXT1tLnkscltkKytdPW0ueiksZS5iaXRhbmdlbnQmJihpW2MrK109bC54LGlbYysrXT1sLnksaVtjKytdPWwueixpW2MrK109bC54LGlbYysrXT1sLnksaVtjKytdPWwueil9cmV0dXJuIGgyKGUse3Bvc2l0aW9uczpuLG5vcm1hbHM6YSx0YW5nZW50czpyLGJpdGFuZ2VudHM6aX0pfWZ1bmN0aW9uIGIyKG4sZSl7bGV0IHQ9bi5fdmVydGV4Rm9ybWF0LG89bi5fZWxsaXBzb2lkLGE9ZS5oZWlnaHQscj1lLndpZHRoLGk9ZS5ub3J0aENhcCxmPWUuc291dGhDYXAsZD0wLGM9YSx1PWEsbD0wO2kmJihkPTEsdS09MSxsKz0xKSxmJiYoYy09MSx1LT0xLGwrPTEpLGwrPXIqdTtsZXQgbT10LnBvc2l0aW9uP25ldyBGbG9hdDY0QXJyYXkobCozKTp2b2lkIDAsaD10LnN0P25ldyBGbG9hdDMyQXJyYXkobCoyKTp2b2lkIDAsYj0wLHA9MCx5PW5fLFQ9JEQsXz1OdW1iZXIuTUFYX1ZBTFVFLHc9TnVtYmVyLk1BWF9WQUxVRSxFPS1OdW1iZXIuTUFYX1ZBTFVFLFI9LU51bWJlci5NQVhfVkFMVUU7Zm9yKGxldCBBPWQ7QTxjOysrQSlmb3IobGV0IHg9MDt4PHI7Kyt4KXdvLmNvbXB1dGVQb3NpdGlvbihlLG8sdC5zdCxBLHgseSxUKSxtW2IrK109eS54LG1bYisrXT15LnksbVtiKytdPXkueix0LnN0JiYoaFtwKytdPVQueCxoW3ArK109VC55LF89TWF0aC5taW4oXyxULngpLHc9TWF0aC5taW4odyxULnkpLEU9TWF0aC5tYXgoRSxULngpLFI9TWF0aC5tYXgoUixULnkpKTtpZihpJiYod28uY29tcHV0ZVBvc2l0aW9uKGUsbyx0LnN0LDAsMCx5LFQpLG1bYisrXT15LngsbVtiKytdPXkueSxtW2IrK109eS56LHQuc3QmJihoW3ArK109VC54LGhbcCsrXT1ULnksXz1ULngsdz1ULnksRT1ULngsUj1ULnkpKSxmJiYod28uY29tcHV0ZVBvc2l0aW9uKGUsbyx0LnN0LGEtMSwwLHksVCksbVtiKytdPXkueCxtW2IrK109eS55LG1bYl09eS56LHQuc3QmJihoW3ArK109VC54LGhbcF09VC55LF89TWF0aC5taW4oXyxULngpLHc9TWF0aC5taW4odyxULnkpLEU9TWF0aC5tYXgoRSxULngpLFI9TWF0aC5tYXgoUixULnkpKSksdC5zdCYmKF88MHx8dzwwfHxFPjF8fFI+MSkpZm9yKGxldCBBPTA7QTxoLmxlbmd0aDtBKz0yKWhbQV09KGhbQV0tXykvKEUtXyksaFtBKzFdPShoW0ErMV0tdykvKFItdyk7bGV0IFM9bkIobSx0LG8sZS50YW5nZW50Um90YXRpb25NYXRyaXgpLEM9Niooci0xKSoodS0xKTtpJiYoQys9Myooci0xKSksZiYmKEMrPTMqKHItMSkpO2xldCBJPUllLmNyZWF0ZVR5cGVkQXJyYXkobCxDKSxNPTAsUD0wLEY7Zm9yKEY9MDtGPHUtMTsrK0Ype2ZvcihsZXQgQT0wO0E8ci0xOysrQSl7bGV0IHg9TSxOPXgrcix2PU4rMSxVPXgrMTtJW1ArK109eCxJW1ArK109TixJW1ArK109VSxJW1ArK109VSxJW1ArK109TixJW1ArK109diwrK019KytNfWlmKGl8fGYpe2xldCBBPWwtMSx4PWwtMTtpJiZmJiYoQT1sLTIpO2xldCBOLHY7aWYoTT0wLGkpZm9yKEY9MDtGPHItMTtGKyspTj1NLHY9TisxLElbUCsrXT1BLElbUCsrXT1OLElbUCsrXT12LCsrTTtpZihmKWZvcihNPSh1LTEpKnIsRj0wO0Y8ci0xO0YrKylOPU0sdj1OKzEsSVtQKytdPU4sSVtQKytdPXgsSVtQKytdPXYsKytNfXJldHVybiBTLmluZGljZXM9SSx0LnN0JiYoUy5hdHRyaWJ1dGVzLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpofSkpLFN9ZnVuY3Rpb24gdnMobixlLHQsbyxhKXtyZXR1cm4gbltlKytdPW9bdF0sbltlKytdPW9bdCsxXSxuW2UrK109b1t0KzJdLG5bZSsrXT1hW3RdLG5bZSsrXT1hW3QrMV0sbltlXT1hW3QrMl0sbn1mdW5jdGlvbiBGcyhuLGUsdCxvKXtyZXR1cm4gbltlKytdPW9bdF0sbltlKytdPW9bdCsxXSxuW2UrK109b1t0XSxuW2VdPW9bdCsxXSxufWZ1bmN0aW9uIGFCKG4sZSl7bGV0IHQ9bi5fc2hhZG93Vm9sdW1lLG89bi5fb2Zmc2V0QXR0cmlidXRlLGE9bi5fdmVydGV4Rm9ybWF0LHI9bi5fZXh0cnVkZWRIZWlnaHQsaT1uLl9zdXJmYWNlSGVpZ2h0LGY9bi5fZWxsaXBzb2lkLGQ9ZS5oZWlnaHQsYz1lLndpZHRoLHU7aWYodCl7bGV0IEJlPWhlLmNsb25lKGEsYV8pO0JlLm5vcm1hbD0hMCxuLl92ZXJ0ZXhGb3JtYXQ9QmV9bGV0IGw9YjIobixlKTt0JiYobi5fdmVydGV4Rm9ybWF0PWEpO2xldCBtPXd0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChsLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGksZiwhMSk7bT1uZXcgRmxvYXQ2NEFycmF5KG0pO2xldCBoPW0ubGVuZ3RoLGI9aCoyLHA9bmV3IEZsb2F0NjRBcnJheShiKTtwLnNldChtKTtsZXQgeT13dC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQobC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxyLGYpO3Auc2V0KHksaCksbC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1wO2xldCBUPWEubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoYik6dm9pZCAwLF89YS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoYik6dm9pZCAwLHc9YS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShiKTp2b2lkIDAsRT1hLnN0P25ldyBGbG9hdDMyQXJyYXkoYi8zKjIpOnZvaWQgMCxSLFM7aWYoYS5ub3JtYWwpe2ZvcihTPWwuYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzLFQuc2V0KFMpLHU9MDt1PGg7dSsrKVNbdV09LVNbdV07VC5zZXQoUyxoKSxsLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcz1UfWlmKHQpe1M9bC5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXMsYS5ub3JtYWx8fChsLmF0dHJpYnV0ZXMubm9ybWFsPXZvaWQgMCk7bGV0IEJlPW5ldyBGbG9hdDMyQXJyYXkoYik7Zm9yKHU9MDt1PGg7dSsrKVNbdV09LVNbdV07QmUuc2V0KFMsaCksbC5hdHRyaWJ1dGVzLmV4dHJ1ZGVEaXJlY3Rpb249bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkJlfSl9bGV0IEMsST1nKG8pO2lmKEkpe2xldCBCZT1oLzMqMixldD1uZXcgVWludDhBcnJheShCZSk7bz09PW90LlRPUD9ldD1ldC5maWxsKDEsMCxCZS8yKTooQz1vPT09b3QuTk9ORT8wOjEsZXQ9ZXQuZmlsbChDKSksbC5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmV0fSl9aWYoYS50YW5nZW50KXtsZXQgQmU9bC5hdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWVzO2ZvcihfLnNldChCZSksdT0wO3U8aDt1KyspQmVbdV09LUJlW3VdO18uc2V0KEJlLGgpLGwuYXR0cmlidXRlcy50YW5nZW50LnZhbHVlcz1ffWlmKGEuYml0YW5nZW50KXtsZXQgQmU9bC5hdHRyaWJ1dGVzLmJpdGFuZ2VudC52YWx1ZXM7dy5zZXQoQmUpLHcuc2V0KEJlLGgpLGwuYXR0cmlidXRlcy5iaXRhbmdlbnQudmFsdWVzPXd9YS5zdCYmKFI9bC5hdHRyaWJ1dGVzLnN0LnZhbHVlcyxFLnNldChSKSxFLnNldChSLGgvMyoyKSxsLmF0dHJpYnV0ZXMuc3QudmFsdWVzPUUpO2xldCBNPWwuaW5kaWNlcyxQPU0ubGVuZ3RoLEY9aC8zLEE9SWUuY3JlYXRlVHlwZWRBcnJheShiLzMsUCoyKTtmb3IoQS5zZXQoTSksdT0wO3U8UDt1Kz0zKUFbdStQXT1NW3UrMl0rRixBW3UrMStQXT1NW3UrMV0rRixBW3UrMitQXT1NW3VdK0Y7bC5pbmRpY2VzPUE7bGV0IHg9ZS5ub3J0aENhcCxOPWUuc291dGhDYXAsdj1kLFU9MixMPTAsRD00LEc9NDt4JiYoVS09MSx2LT0xLEwrPTEsRC09MixHLT0xKSxOJiYoVS09MSx2LT0xLEwrPTEsRC09MixHLT0xKSxMKz1VKmMrMip2LUQ7bGV0IFY9KEwrRykqMixPPW5ldyBGbG9hdDY0QXJyYXkoViozKSxKPXQ/bmV3IEZsb2F0MzJBcnJheShWKjMpOnZvaWQgMCxyZT1JP25ldyBVaW50OEFycmF5KFYpOnZvaWQgMCxzZT1hLnN0P25ldyBGbG9hdDMyQXJyYXkoVioyKTp2b2lkIDAsb2U9bz09PW90LlRPUDtJJiYhb2UmJihDPW89PT1vdC5BTEw/MTowLHJlPXJlLmZpbGwoQykpO2xldCBjZT0wLG1lPTAsZGU9MCx5ZT0wLGxlPWMqdixlZTtmb3IodT0wO3U8bGU7dSs9YyllZT11KjMsTz12cyhPLGNlLGVlLG0seSksY2UrPTYsYS5zdCYmKHNlPUZzKHNlLG1lLHUqMixSKSxtZSs9NCksdCYmKGRlKz0zLEpbZGUrK109U1tlZV0sSltkZSsrXT1TW2VlKzFdLEpbZGUrK109U1tlZSsyXSksb2UmJihyZVt5ZSsrXT0xLHllKz0xKTtpZihOKXtsZXQgQmU9eD9sZSsxOmxlO2ZvcihlZT1CZSozLHU9MDt1PDI7dSsrKU89dnMoTyxjZSxlZSxtLHkpLGNlKz02LGEuc3QmJihzZT1GcyhzZSxtZSxCZSoyLFIpLG1lKz00KSx0JiYoZGUrPTMsSltkZSsrXT1TW2VlXSxKW2RlKytdPVNbZWUrMV0sSltkZSsrXT1TW2VlKzJdKSxvZSYmKHJlW3llKytdPTEseWUrPTEpfWVsc2UgZm9yKHU9bGUtYzt1PGxlO3UrKyllZT11KjMsTz12cyhPLGNlLGVlLG0seSksY2UrPTYsYS5zdCYmKHNlPUZzKHNlLG1lLHUqMixSKSxtZSs9NCksdCYmKGRlKz0zLEpbZGUrK109U1tlZV0sSltkZSsrXT1TW2VlKzFdLEpbZGUrK109U1tlZSsyXSksb2UmJihyZVt5ZSsrXT0xLHllKz0xKTtmb3IodT1sZS0xO3U+MDt1LT1jKWVlPXUqMyxPPXZzKE8sY2UsZWUsbSx5KSxjZSs9NixhLnN0JiYoc2U9RnMoc2UsbWUsdSoyLFIpLG1lKz00KSx0JiYoZGUrPTMsSltkZSsrXT1TW2VlXSxKW2RlKytdPVNbZWUrMV0sSltkZSsrXT1TW2VlKzJdKSxvZSYmKHJlW3llKytdPTEseWUrPTEpO2lmKHgpe2xldCBCZT1sZTtmb3IoZWU9QmUqMyx1PTA7dTwyO3UrKylPPXZzKE8sY2UsZWUsbSx5KSxjZSs9NixhLnN0JiYoc2U9RnMoc2UsbWUsQmUqMixSKSxtZSs9NCksdCYmKGRlKz0zLEpbZGUrK109U1tlZV0sSltkZSsrXT1TW2VlKzFdLEpbZGUrK109U1tlZSsyXSksb2UmJihyZVt5ZSsrXT0xLHllKz0xKX1lbHNlIGZvcih1PWMtMTt1Pj0wO3UtLSllZT11KjMsTz12cyhPLGNlLGVlLG0seSksY2UrPTYsYS5zdCYmKHNlPUZzKHNlLG1lLHUqMixSKSxtZSs9NCksdCYmKGRlKz0zLEpbZGUrK109U1tlZV0sSltkZSsrXT1TW2VlKzFdLEpbZGUrK109U1tlZSsyXSksb2UmJihyZVt5ZSsrXT0xLHllKz0xKTtsZXQgRWU9b0IoTyxhLGYpO2Euc3QmJihFZS5hdHRyaWJ1dGVzLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpzZX0pKSx0JiYoRWUuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpKfSkpLEkmJihFZS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnJlfSkpO2xldCBDZT1JZS5jcmVhdGVUeXBlZEFycmF5KFYsTCo2KSxXZSx6ZSxaZSxLZTtoPU8ubGVuZ3RoLzM7bGV0IERlPTA7Zm9yKHU9MDt1PGgtMTt1Kz0yKXtXZT11LEtlPShXZSsyKSVoO2xldCBCZT1zLmZyb21BcnJheShPLFdlKjMsb18pLGV0PXMuZnJvbUFycmF5KE8sS2UqMyxtMik7cy5lcXVhbHNFcHNpbG9uKEJlLGV0LGsuRVBTSUxPTjEwKXx8KHplPShXZSsxKSVoLFplPSh6ZSsyKSVoLENlW0RlKytdPVdlLENlW0RlKytdPXplLENlW0RlKytdPUtlLENlW0RlKytdPUtlLENlW0RlKytdPXplLENlW0RlKytdPVplKX1yZXR1cm4gRWUuaW5kaWNlcz1DZSxFZT1MdC5jb21iaW5lSW5zdGFuY2VzKFtuZXcgbG8oe2dlb21ldHJ5Omx9KSxuZXcgbG8oe2dlb21ldHJ5OkVlfSldKSxFZVswXX1mdW5jdGlvbiByXyhuLGUsdCxvLGEpe2lmKHQ9PT0wKXJldHVybiB4ZS5jbG9uZShuLGEpO2xldCByPXdvLmNvbXB1dGVPcHRpb25zKG4sZSx0LDAsbDIscDIpLGk9ci5oZWlnaHQsZj1yLndpZHRoLGQ9ckI7cmV0dXJuIHdvLmNvbXB1dGVQb3NpdGlvbihyLG8sITEsMCwwLGRbMF0pLHdvLmNvbXB1dGVQb3NpdGlvbihyLG8sITEsMCxmLTEsZFsxXSksd28uY29tcHV0ZVBvc2l0aW9uKHIsbywhMSxpLTEsMCxkWzJdKSx3by5jb21wdXRlUG9zaXRpb24ocixvLCExLGktMSxmLTEsZFszXSkseGUuZnJvbUNhcnRlc2lhbkFycmF5KGQsbyxhKX1mdW5jdGlvbiBncihuKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXQgZT1uLnJlY3RhbmdsZSx0PW4uaGVpZ2h0Pz8wLG89bi5leHRydWRlZEhlaWdodD8/dDt0aGlzLl9yZWN0YW5nbGU9eGUuY2xvbmUoZSksdGhpcy5fZ3JhbnVsYXJpdHk9bi5ncmFudWxhcml0eT8/ay5SQURJQU5TX1BFUl9ERUdSRUUsdGhpcy5fZWxsaXBzb2lkPUsuY2xvbmUobi5lbGxpcHNvaWQ/P0suZGVmYXVsdCksdGhpcy5fc3VyZmFjZUhlaWdodD1NYXRoLm1heCh0LG8pLHRoaXMuX3JvdGF0aW9uPW4ucm90YXRpb24/PzAsdGhpcy5fc3RSb3RhdGlvbj1uLnN0Um90YXRpb24/PzAsdGhpcy5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKG4udmVydGV4Rm9ybWF0Pz9oZS5ERUZBVUxUKSx0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbih0LG8pLHRoaXMuX3NoYWRvd1ZvbHVtZT1uLnNoYWRvd1ZvbHVtZT8/ITEsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnkiLHRoaXMuX29mZnNldEF0dHJpYnV0ZT1uLm9mZnNldEF0dHJpYnV0ZSx0aGlzLl9yb3RhdGVkUmVjdGFuZ2xlPXZvaWQgMCx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPXZvaWQgMH1mdW5jdGlvbiBsQihuKXtpZihuLl9zdFJvdGF0aW9uPT09MClyZXR1cm5bMCwwLDAsMSwxLDBdO2xldCBlPXhlLmNsb25lKG4uX3JlY3RhbmdsZSxzMiksdD1uLl9ncmFudWxhcml0eSxvPW4uX2VsbGlwc29pZCxhPW4uX3JvdGF0aW9uLW4uX3N0Um90YXRpb24scj1yXyhlLHQsYSxvLHMyKSxpPWZCO2lbMF0ueD1yLndlc3QsaVswXS55PXIuc291dGgsaVsxXS54PXIud2VzdCxpWzFdLnk9ci5ub3J0aCxpWzJdLng9ci5lYXN0LGlbMl0ueT1yLnNvdXRoO2xldCBmPW4ucmVjdGFuZ2xlLGQ9Sm8uZnJvbVJvdGF0aW9uKG4uX3N0Um90YXRpb24sZEIpLGM9eGUuY2VudGVyKGYsdUIpO2ZvcihsZXQgYj0wO2I8MzsrK2Ipe2xldCBwPWlbYl07cC54LT1jLmxvbmdpdHVkZSxwLnktPWMubGF0aXR1ZGUsSm8ubXVsdGlwbHlCeVZlY3RvcihkLHAscCkscC54Kz1jLmxvbmdpdHVkZSxwLnkrPWMubGF0aXR1ZGUscC54PShwLngtZi53ZXN0KS9mLndpZHRoLHAueT0ocC55LWYuc291dGgpL2YuaGVpZ2h0fWxldCB1PWlbMF0sbD1pWzFdLG09aVsyXSxoPW5ldyBBcnJheSg2KTtyZXR1cm4gWS5wYWNrKHUsaCksWS5wYWNrKGwsaCwyKSxZLnBhY2sobSxoLDQpLGh9dmFyIG5fLGYyLGQyLHUyLGwyLCRELGVCLHRCLG9fLG0yLGFfLHJCLHAyLGlCLGcyLF8yLEZpLGNCLGMyLHNCLHMyLGZCLGRCLHVCLGlfLHkyPVgoKCk9PntFdCgpO3Z0KCk7TWUoKTtndCgpO0N0KCk7c3QoKTtmZSgpO1ZlKCk7WHQoKTtZdCgpO3JuKCk7ZGMoKTtVbygpO2ZyKCk7WnQoKTtqZSgpO1BmKCk7SW4oKTtXYSgpO3RuKCk7V28oKTtobigpO3RfKCk7Q28oKTtuXz1uZXcgcyxmMj1uZXcgcyxkMj1uZXcgcyx1Mj1uZXcgcyxsMj1uZXcgeGUsJEQ9bmV3IFksZUI9bmV3IHBlLHRCPW5ldyBwZTtvXz1uZXcgcyxtMj1uZXcgczthXz1uZXcgaGU7ckI9W25ldyBzLG5ldyBzLG5ldyBzLG5ldyBzXSxwMj1uZXcgYWUsaUI9bmV3IGFlO2dyLnBhY2tlZExlbmd0aD14ZS5wYWNrZWRMZW5ndGgrSy5wYWNrZWRMZW5ndGgraGUucGFja2VkTGVuZ3RoKzc7Z3IucGFjaz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIHQ9dD8/MCx4ZS5wYWNrKG4uX3JlY3RhbmdsZSxlLHQpLHQrPXhlLnBhY2tlZExlbmd0aCxLLnBhY2sobi5fZWxsaXBzb2lkLGUsdCksdCs9Sy5wYWNrZWRMZW5ndGgsaGUucGFjayhuLl92ZXJ0ZXhGb3JtYXQsZSx0KSx0Kz1oZS5wYWNrZWRMZW5ndGgsZVt0KytdPW4uX2dyYW51bGFyaXR5LGVbdCsrXT1uLl9zdXJmYWNlSGVpZ2h0LGVbdCsrXT1uLl9yb3RhdGlvbixlW3QrK109bi5fc3RSb3RhdGlvbixlW3QrK109bi5fZXh0cnVkZWRIZWlnaHQsZVt0KytdPW4uX3NoYWRvd1ZvbHVtZT8xOjAsZVt0XT1uLl9vZmZzZXRBdHRyaWJ1dGU/Py0xLGV9O2cyPW5ldyB4ZSxfMj1LLmNsb25lKEsuVU5JVF9TUEhFUkUpLEZpPXtyZWN0YW5nbGU6ZzIsZWxsaXBzb2lkOl8yLHZlcnRleEZvcm1hdDphXyxncmFudWxhcml0eTp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsc3RSb3RhdGlvbjp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLHNoYWRvd1ZvbHVtZTp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07Z3IudW5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtlPWU/PzA7bGV0IG89eGUudW5wYWNrKG4sZSxnMik7ZSs9eGUucGFja2VkTGVuZ3RoO2xldCBhPUsudW5wYWNrKG4sZSxfMik7ZSs9Sy5wYWNrZWRMZW5ndGg7bGV0IHI9aGUudW5wYWNrKG4sZSxhXyk7ZSs9aGUucGFja2VkTGVuZ3RoO2xldCBpPW5bZSsrXSxmPW5bZSsrXSxkPW5bZSsrXSxjPW5bZSsrXSx1PW5bZSsrXSxsPW5bZSsrXT09PTEsbT1uW2VdO3JldHVybiBnKHQpPyh0Ll9yZWN0YW5nbGU9eGUuY2xvbmUobyx0Ll9yZWN0YW5nbGUpLHQuX2VsbGlwc29pZD1LLmNsb25lKGEsdC5fZWxsaXBzb2lkKSx0Ll92ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUocix0Ll92ZXJ0ZXhGb3JtYXQpLHQuX2dyYW51bGFyaXR5PWksdC5fc3VyZmFjZUhlaWdodD1mLHQuX3JvdGF0aW9uPWQsdC5fc3RSb3RhdGlvbj1jLHQuX2V4dHJ1ZGVkSGVpZ2h0PXUsdC5fc2hhZG93Vm9sdW1lPWwsdC5fb2Zmc2V0QXR0cmlidXRlPW09PT0tMT92b2lkIDA6bSx0KTooRmkuZ3JhbnVsYXJpdHk9aSxGaS5oZWlnaHQ9ZixGaS5yb3RhdGlvbj1kLEZpLnN0Um90YXRpb249YyxGaS5leHRydWRlZEhlaWdodD11LEZpLnNoYWRvd1ZvbHVtZT1sLEZpLm9mZnNldEF0dHJpYnV0ZT1tPT09LTE/dm9pZCAwOm0sbmV3IGdyKEZpKSl9O2dyLmNvbXB1dGVSZWN0YW5nbGU9ZnVuY3Rpb24obixlKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXQgdD1uLnJlY3RhbmdsZSxvPW4uZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLGE9bi5lbGxpcHNvaWQ/P0suZGVmYXVsdCxyPW4ucm90YXRpb24/PzA7cmV0dXJuIHJfKHQsbyxyLGEsZSl9O2NCPW5ldyBaLGMyPW5ldyBZZSxzQj1uZXcgYWU7Z3IuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7aWYoay5lcXVhbHNFcHNpbG9uKG4uX3JlY3RhbmdsZS5ub3J0aCxuLl9yZWN0YW5nbGUuc291dGgsay5FUFNJTE9OMTApfHxrLmVxdWFsc0Vwc2lsb24obi5fcmVjdGFuZ2xlLmVhc3Qsbi5fcmVjdGFuZ2xlLndlc3Qsay5FUFNJTE9OMTApKXJldHVybjtsZXQgZT1uLl9yZWN0YW5nbGUsdD1uLl9lbGxpcHNvaWQsbz1uLl9yb3RhdGlvbixhPW4uX3N0Um90YXRpb24scj1uLl92ZXJ0ZXhGb3JtYXQsaT13by5jb21wdXRlT3B0aW9ucyhlLG4uX2dyYW51bGFyaXR5LG8sYSxsMixwMixpQiksZj1jQjtpZihhIT09MHx8byE9PTApe2xldCBoPXhlLmNlbnRlcihlLHNCKSxiPXQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsQ2FydG9ncmFwaGljKGgsb18pO1llLmZyb21BeGlzQW5nbGUoYiwtYSxjMiksWi5mcm9tUXVhdGVybmlvbihjMixmKX1lbHNlIFouY2xvbmUoWi5JREVOVElUWSxmKTtsZXQgZD1uLl9zdXJmYWNlSGVpZ2h0LGM9bi5fZXh0cnVkZWRIZWlnaHQsdT0hay5lcXVhbHNFcHNpbG9uKGQsYywwLGsuRVBTSUxPTjIpO2kubG9uU2NhbGFyPTEvbi5fcmVjdGFuZ2xlLndpZHRoLGkubGF0U2NhbGFyPTEvbi5fcmVjdGFuZ2xlLmhlaWdodCxpLnRhbmdlbnRSb3RhdGlvbk1hdHJpeD1mO2xldCBsLG07aWYoZT1uLl9yZWN0YW5nbGUsdSl7bD1hQihuLGkpO2xldCBoPXBlLmZyb21SZWN0YW5nbGUzRChlLHQsZCx0QiksYj1wZS5mcm9tUmVjdGFuZ2xlM0QoZSx0LGMsZUIpO209cGUudW5pb24oaCxiKX1lbHNle2lmKGw9YjIobixpKSxsLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPXd0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChsLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGQsdCwhMSksZyhuLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgaD1sLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxiPW4uX29mZnNldEF0dHJpYnV0ZT09PW90Lk5PTkU/MDoxLHA9bmV3IFVpbnQ4QXJyYXkoaC8zKS5maWxsKGIpO2wuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpwfSl9bT1wZS5mcm9tUmVjdGFuZ2xlM0QoZSx0LGQpfXJldHVybiByLnBvc2l0aW9ufHxkZWxldGUgbC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG5ldyBQZSh7YXR0cmlidXRlczpsLmF0dHJpYnV0ZXMsaW5kaWNlczpsLmluZGljZXMscHJpbWl0aXZlVHlwZTpsLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6bSxvZmZzZXRBdHRyaWJ1dGU6bi5fb2Zmc2V0QXR0cmlidXRlfSl9O2dyLmNyZWF0ZVNoYWRvd1ZvbHVtZT1mdW5jdGlvbihuLGUsdCl7bGV0IG89bi5fZ3JhbnVsYXJpdHksYT1uLl9lbGxpcHNvaWQscj1lKG8sYSksaT10KG8sYSk7cmV0dXJuIG5ldyBncih7cmVjdGFuZ2xlOm4uX3JlY3RhbmdsZSxyb3RhdGlvbjpuLl9yb3RhdGlvbixlbGxpcHNvaWQ6YSxzdFJvdGF0aW9uOm4uX3N0Um90YXRpb24sZ3JhbnVsYXJpdHk6byxleHRydWRlZEhlaWdodDppLGhlaWdodDpyLHZlcnRleEZvcm1hdDpoZS5QT1NJVElPTl9PTkxZLHNoYWRvd1ZvbHVtZTohMH0pfTtzMj1uZXcgeGUsZkI9W25ldyBZLG5ldyBZLG5ldyBZXSxkQj1uZXcgSm8sdUI9bmV3IGFlO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGdyLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLl9yb3RhdGVkUmVjdGFuZ2xlKXx8KHRoaXMuX3JvdGF0ZWRSZWN0YW5nbGU9cl8odGhpcy5fcmVjdGFuZ2xlLHRoaXMuX2dyYW51bGFyaXR5LHRoaXMuX3JvdGF0aW9uLHRoaXMuX2VsbGlwc29pZCkpLHRoaXMuX3JvdGF0ZWRSZWN0YW5nbGV9fSx0ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzKXx8KHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9bEIodGhpcykpLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHN9fX0pO2lfPWdyfSk7dmFyIGNfPXt9OyRlKGNfLHtkZWZhdWx0OigpPT5tQn0pO2Z1bmN0aW9uIGhCKG4sZSl7cmV0dXJuIGcoZSkmJihuPWlfLnVucGFjayhuLGUpKSxuLl9lbGxpcHNvaWQ9Sy5jbG9uZShuLl9lbGxpcHNvaWQpLG4uX3JlY3RhbmdsZT14ZS5jbG9uZShuLl9yZWN0YW5nbGUpLGlfLmNyZWF0ZUdlb21ldHJ5KG4pfXZhciBtQixzXz1YKCgpPT57ZmUoKTtWZSgpO2huKCk7eTIoKTttQj1oQn0pO2Z1bmN0aW9uIEEyKG4sZSl7bGV0IHQ9bi5fZWxsaXBzb2lkLG89ZS5oZWlnaHQsYT1lLndpZHRoLHI9ZS5ub3J0aENhcCxpPWUuc291dGhDYXAsZj1vLGQ9MixjPTAsdT00O3ImJihkLT0xLGYtPTEsYys9MSx1LT0yKSxpJiYoZC09MSxmLT0xLGMrPTEsdS09MiksYys9ZCphKzIqZi11O2xldCBsPW5ldyBGbG9hdDY0QXJyYXkoYyozKSxtPTAsaD0wLGIscD1nQjtpZihyKXdvLmNvbXB1dGVQb3NpdGlvbihlLHQsITEsaCwwLHApLGxbbSsrXT1wLngsbFttKytdPXAueSxsW20rK109cC56O2Vsc2UgZm9yKGI9MDtiPGE7YisrKXdvLmNvbXB1dGVQb3NpdGlvbihlLHQsITEsaCxiLHApLGxbbSsrXT1wLngsbFttKytdPXAueSxsW20rK109cC56O2ZvcihiPWEtMSxoPTE7aDxvO2grKyl3by5jb21wdXRlUG9zaXRpb24oZSx0LCExLGgsYixwKSxsW20rK109cC54LGxbbSsrXT1wLnksbFttKytdPXAuejtpZihoPW8tMSwhaSlmb3IoYj1hLTI7Yj49MDtiLS0pd28uY29tcHV0ZVBvc2l0aW9uKGUsdCwhMSxoLGIscCksbFttKytdPXAueCxsW20rK109cC55LGxbbSsrXT1wLno7Zm9yKGI9MCxoPW8tMjtoPjA7aC0tKXdvLmNvbXB1dGVQb3NpdGlvbihlLHQsITEsaCxiLHApLGxbbSsrXT1wLngsbFttKytdPXAueSxsW20rK109cC56O2xldCB5PWwubGVuZ3RoLzMqMixUPUllLmNyZWF0ZVR5cGVkQXJyYXkobC5sZW5ndGgvMyx5KSxfPTA7Zm9yKGxldCBFPTA7RTxsLmxlbmd0aC8zLTE7RSsrKVRbXysrXT1FLFRbXysrXT1FKzE7VFtfKytdPWwubGVuZ3RoLzMtMSxUW19dPTA7bGV0IHc9bmV3IFBlKHthdHRyaWJ1dGVzOm5ldyBRZSxwcmltaXRpdmVUeXBlOkZlLkxJTkVTfSk7cmV0dXJuIHcuYXR0cmlidXRlcy5wb3NpdGlvbj1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmx9KSx3LmluZGljZXM9VCx3fWZ1bmN0aW9uIHlCKG4sZSl7bGV0IHQ9bi5fc3VyZmFjZUhlaWdodCxvPW4uX2V4dHJ1ZGVkSGVpZ2h0LGE9bi5fZWxsaXBzb2lkLHI9QTIobixlKSxpPWUuaGVpZ2h0LGY9ZS53aWR0aCxkPXd0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChyLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHQsYSwhMSksYz1kLmxlbmd0aCx1PW5ldyBGbG9hdDY0QXJyYXkoYyoyKTt1LnNldChkKTtsZXQgbD13dC5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxvLGEpO3Uuc2V0KGwsYyksci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz11O2xldCBtPWUubm9ydGhDYXAsaD1lLnNvdXRoQ2FwLGI9NDttJiYoYi09MSksaCYmKGItPTEpO2xldCBwPSh1Lmxlbmd0aC8zK2IpKjIseT1JZS5jcmVhdGVUeXBlZEFycmF5KHUubGVuZ3RoLzMscCk7Yz11Lmxlbmd0aC82O2xldCBUPTA7Zm9yKGxldCB3PTA7dzxjLTE7dysrKXlbVCsrXT13LHlbVCsrXT13KzEseVtUKytdPXcrYyx5W1QrK109dytjKzE7eVtUKytdPWMtMSx5W1QrK109MCx5W1QrK109YytjLTEseVtUKytdPWMseVtUKytdPTAseVtUKytdPWM7bGV0IF87aWYobSlfPWktMTtlbHNle2xldCB3PWYtMTt5W1QrK109dyx5W1QrK109dytjLF89ZitpLTJ9aWYoeVtUKytdPV8seVtUKytdPV8rYywhaCl7bGV0IHc9ZitfLTE7eVtUKytdPXcseVtUXT13K2N9cmV0dXJuIHIuaW5kaWNlcz15LHJ9ZnVuY3Rpb24gQnMobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5yZWN0YW5nbGUsdD1uLmdyYW51bGFyaXR5Pz9rLlJBRElBTlNfUEVSX0RFR1JFRSxvPW4uZWxsaXBzb2lkPz9LLmRlZmF1bHQsYT1uLnJvdGF0aW9uPz8wLHI9bi5oZWlnaHQ/PzAsaT1uLmV4dHJ1ZGVkSGVpZ2h0Pz9yO3RoaXMuX3JlY3RhbmdsZT14ZS5jbG9uZShlKSx0aGlzLl9ncmFudWxhcml0eT10LHRoaXMuX2VsbGlwc29pZD1vLHRoaXMuX3N1cmZhY2VIZWlnaHQ9TWF0aC5tYXgocixpKSx0aGlzLl9yb3RhdGlvbj1hLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKHIsaSksdGhpcy5fb2Zmc2V0QXR0cmlidXRlPW4ub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVJlY3RhbmdsZU91dGxpbmVHZW9tZXRyeSJ9dmFyIGJCLHBCLGdCLF9CLHcyLFQyLERzLEFCLGZfLEUyPVgoKCk9PntFdCgpO01lKCk7Z3QoKTtDdCgpO3N0KCk7ZmUoKTtWZSgpO1h0KCk7WXQoKTtybigpO1VvKCk7WnQoKTtqZSgpO1dhKCk7dG4oKTtobigpO3RfKCk7YkI9bmV3IHBlLHBCPW5ldyBwZSxnQj1uZXcgcyxfQj1uZXcgeGU7QnMucGFja2VkTGVuZ3RoPXhlLnBhY2tlZExlbmd0aCtLLnBhY2tlZExlbmd0aCs1O0JzLnBhY2s9ZnVuY3Rpb24obixlLHQpe3JldHVybiB0PXQ/PzAseGUucGFjayhuLl9yZWN0YW5nbGUsZSx0KSx0Kz14ZS5wYWNrZWRMZW5ndGgsSy5wYWNrKG4uX2VsbGlwc29pZCxlLHQpLHQrPUsucGFja2VkTGVuZ3RoLGVbdCsrXT1uLl9ncmFudWxhcml0eSxlW3QrK109bi5fc3VyZmFjZUhlaWdodCxlW3QrK109bi5fcm90YXRpb24sZVt0KytdPW4uX2V4dHJ1ZGVkSGVpZ2h0LGVbdF09bi5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTt3Mj1uZXcgeGUsVDI9Sy5jbG9uZShLLlVOSVRfU1BIRVJFKSxEcz17cmVjdGFuZ2xlOncyLGVsbGlwc29pZDpUMixncmFudWxhcml0eTp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O0JzLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvPXhlLnVucGFjayhuLGUsdzIpO2UrPXhlLnBhY2tlZExlbmd0aDtsZXQgYT1LLnVucGFjayhuLGUsVDIpO2UrPUsucGFja2VkTGVuZ3RoO2xldCByPW5bZSsrXSxpPW5bZSsrXSxmPW5bZSsrXSxkPW5bZSsrXSxjPW5bZV07cmV0dXJuIGcodCk/KHQuX3JlY3RhbmdsZT14ZS5jbG9uZShvLHQuX3JlY3RhbmdsZSksdC5fZWxsaXBzb2lkPUsuY2xvbmUoYSx0Ll9lbGxpcHNvaWQpLHQuX3N1cmZhY2VIZWlnaHQ9aSx0Ll9yb3RhdGlvbj1mLHQuX2V4dHJ1ZGVkSGVpZ2h0PWQsdC5fb2Zmc2V0QXR0cmlidXRlPWM9PT0tMT92b2lkIDA6Yyx0KTooRHMuZ3JhbnVsYXJpdHk9cixEcy5oZWlnaHQ9aSxEcy5yb3RhdGlvbj1mLERzLmV4dHJ1ZGVkSGVpZ2h0PWQsRHMub2Zmc2V0QXR0cmlidXRlPWM9PT0tMT92b2lkIDA6YyxuZXcgQnMoRHMpKX07QUI9bmV3IGFlO0JzLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe2xldCBlPW4uX3JlY3RhbmdsZSx0PW4uX2VsbGlwc29pZCxvPXdvLmNvbXB1dGVPcHRpb25zKGUsbi5fZ3JhbnVsYXJpdHksbi5fcm90YXRpb24sMCxfQixBQiksYSxyO2lmKGsuZXF1YWxzRXBzaWxvbihlLm5vcnRoLGUuc291dGgsay5FUFNJTE9OMTApfHxrLmVxdWFsc0Vwc2lsb24oZS5lYXN0LGUud2VzdCxrLkVQU0lMT04xMCkpcmV0dXJuO2xldCBpPW4uX3N1cmZhY2VIZWlnaHQsZj1uLl9leHRydWRlZEhlaWdodCxkPSFrLmVxdWFsc0Vwc2lsb24oaSxmLDAsay5FUFNJTE9OMiksYztpZihkKXtpZihhPXlCKG4sbyksZyhuLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgbT1hLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLGg9bmV3IFVpbnQ4QXJyYXkobSk7bi5fb2Zmc2V0QXR0cmlidXRlPT09b3QuVE9QP2g9aC5maWxsKDEsMCxtLzIpOihjPW4uX29mZnNldEF0dHJpYnV0ZT09PW90Lk5PTkU/MDoxLGg9aC5maWxsKGMpKSxhLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6aH0pfWxldCB1PXBlLmZyb21SZWN0YW5nbGUzRChlLHQsaSxwQiksbD1wZS5mcm9tUmVjdGFuZ2xlM0QoZSx0LGYsYkIpO3I9cGUudW5pb24odSxsKX1lbHNle2lmKGE9QTIobixvKSxhLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPXd0LnNjYWxlVG9HZW9kZXRpY0hlaWdodChhLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGksdCwhMSksZyhuLl9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdT1hLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aDtjPW4uX29mZnNldEF0dHJpYnV0ZT09PW90Lk5PTkU/MDoxO2xldCBsPW5ldyBVaW50OEFycmF5KHUvMykuZmlsbChjKTthLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGllKHtjb21wb25lbnREYXRhdHlwZTpuZS5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bH0pfXI9cGUuZnJvbVJlY3RhbmdsZTNEKGUsdCxpKX1yZXR1cm4gbmV3IFBlKHthdHRyaWJ1dGVzOmEuYXR0cmlidXRlcyxpbmRpY2VzOmEuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkZlLkxJTkVTLGJvdW5kaW5nU3BoZXJlOnIsb2Zmc2V0QXR0cmlidXRlOm4uX29mZnNldEF0dHJpYnV0ZX0pfTtmXz1Cc30pO3ZhciBkXz17fTskZShkXyx7ZGVmYXVsdDooKT0+VEJ9KTtmdW5jdGlvbiB3QihuLGUpe3JldHVybiBnKGUpJiYobj1mXy51bnBhY2sobixlKSksbi5fZWxsaXBzb2lkPUsuY2xvbmUobi5fZWxsaXBzb2lkKSxuLl9yZWN0YW5nbGU9eGUuY2xvbmUobi5fcmVjdGFuZ2xlKSxmXy5jcmVhdGVHZW9tZXRyeShuKX12YXIgVEIsdV89WCgoKT0+e2ZlKCk7VmUoKTtobigpO0UyKCk7VEI9d0J9KTtmdW5jdGlvbiBFQihuLGUsdCxvLGEscixpKXtsZXQgZj1ibi5udW1iZXJPZlBvaW50cyhuLGUsYSksZCxjPXQucmVkLHU9dC5ncmVlbixsPXQuYmx1ZSxtPXQuYWxwaGEsaD1vLnJlZCxiPW8uZ3JlZW4scD1vLmJsdWUseT1vLmFscGhhO2lmKEplLmVxdWFscyh0LG8pKXtmb3IoZD0wO2Q8ZjtkKyspcltpKytdPUplLmZsb2F0VG9CeXRlKGMpLHJbaSsrXT1KZS5mbG9hdFRvQnl0ZSh1KSxyW2krK109SmUuZmxvYXRUb0J5dGUobCkscltpKytdPUplLmZsb2F0VG9CeXRlKG0pO3JldHVybiBpfWxldCBUPShoLWMpL2YsXz0oYi11KS9mLHc9KHAtbCkvZixFPSh5LW0pL2YsUj1pO2ZvcihkPTA7ZDxmO2QrKylyW1IrK109SmUuZmxvYXRUb0J5dGUoYytkKlQpLHJbUisrXT1KZS5mbG9hdFRvQnl0ZSh1K2QqXykscltSKytdPUplLmZsb2F0VG9CeXRlKGwrZCp3KSxyW1IrK109SmUuZmxvYXRUb0J5dGUobStkKkUpO3JldHVybiBSfWZ1bmN0aW9uIHlkKG4pe249bj8/T2UuRU1QVFlfT0JKRUNUO2xldCBlPW4ucG9zaXRpb25zLHQ9bi5jb2xvcnMsbz1uLmNvbG9yc1BlclZlcnRleD8/ITE7dGhpcy5fcG9zaXRpb25zPWUsdGhpcy5fY29sb3JzPXQsdGhpcy5fY29sb3JzUGVyVmVydGV4PW8sdGhpcy5fYXJjVHlwZT1uLmFyY1R5cGU/P2J0LkdFT0RFU0lDLHRoaXMuX2dyYW51bGFyaXR5PW4uZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX2VsbGlwc29pZD1uLmVsbGlwc29pZD8/Sy5kZWZhdWx0LHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVNpbXBsZVBvbHlsaW5lR2VvbWV0cnkiO2xldCBhPTErZS5sZW5ndGgqcy5wYWNrZWRMZW5ndGg7YSs9Zyh0KT8xK3QubGVuZ3RoKkplLnBhY2tlZExlbmd0aDoxLHRoaXMucGFja2VkTGVuZ3RoPWErSy5wYWNrZWRMZW5ndGgrM312YXIgWWgsSmgsUkIsbF8sUjI9WCgoKT0+e2hjKCk7RXQoKTtNZSgpO2tzKCk7Q3QoKTtzdCgpO2ZlKCk7VmUoKTtYdCgpO1l0KCk7cm4oKTtadCgpO2plKCk7d3MoKTt0bigpO3lkLnBhY2s9ZnVuY3Rpb24obixlLHQpe3Q9dD8/MDtsZXQgbyxhPW4uX3Bvc2l0aW9ucyxyPWEubGVuZ3RoO2ZvcihlW3QrK109cixvPTA7bzxyOysrbyx0Kz1zLnBhY2tlZExlbmd0aClzLnBhY2soYVtvXSxlLHQpO2xldCBpPW4uX2NvbG9ycztmb3Iocj1nKGkpP2kubGVuZ3RoOjAsZVt0KytdPXIsbz0wO288cjsrK28sdCs9SmUucGFja2VkTGVuZ3RoKUplLnBhY2soaVtvXSxlLHQpO3JldHVybiBLLnBhY2sobi5fZWxsaXBzb2lkLGUsdCksdCs9Sy5wYWNrZWRMZW5ndGgsZVt0KytdPW4uX2NvbG9yc1BlclZlcnRleD8xOjAsZVt0KytdPW4uX2FyY1R5cGUsZVt0XT1uLl9ncmFudWxhcml0eSxlfTt5ZC51bnBhY2s9ZnVuY3Rpb24obixlLHQpe2U9ZT8/MDtsZXQgbyxhPW5bZSsrXSxyPW5ldyBBcnJheShhKTtmb3Iobz0wO288YTsrK28sZSs9cy5wYWNrZWRMZW5ndGgpcltvXT1zLnVucGFjayhuLGUpO2E9bltlKytdO2xldCBpPWE+MD9uZXcgQXJyYXkoYSk6dm9pZCAwO2ZvcihvPTA7bzxhOysrbyxlKz1KZS5wYWNrZWRMZW5ndGgpaVtvXT1KZS51bnBhY2sobixlKTtsZXQgZj1LLnVucGFjayhuLGUpO2UrPUsucGFja2VkTGVuZ3RoO2xldCBkPW5bZSsrXT09PTEsYz1uW2UrK10sdT1uW2VdO3JldHVybiBnKHQpPyh0Ll9wb3NpdGlvbnM9cix0Ll9jb2xvcnM9aSx0Ll9lbGxpcHNvaWQ9Zix0Ll9jb2xvcnNQZXJWZXJ0ZXg9ZCx0Ll9hcmNUeXBlPWMsdC5fZ3JhbnVsYXJpdHk9dSx0KTpuZXcgeWQoe3Bvc2l0aW9uczpyLGNvbG9yczppLGVsbGlwc29pZDpmLGNvbG9yc1BlclZlcnRleDpkLGFyY1R5cGU6YyxncmFudWxhcml0eTp1fSl9O1loPW5ldyBBcnJheSgyKSxKaD1uZXcgQXJyYXkoMiksUkI9e3Bvc2l0aW9uczpZaCxoZWlnaHQ6SmgsZWxsaXBzb2lkOnZvaWQgMCxtaW5EaXN0YW5jZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwfTt5ZC5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihuKXtsZXQgZT1uLl9wb3NpdGlvbnMsdD1uLl9jb2xvcnMsbz1uLl9jb2xvcnNQZXJWZXJ0ZXgsYT1uLl9hcmNUeXBlLHI9bi5fZ3JhbnVsYXJpdHksaT1uLl9lbGxpcHNvaWQsZj1rLmNob3JkTGVuZ3RoKHIsaS5tYXhpbXVtUmFkaXVzKSxkPWcodCkmJiFvLGMsdT1lLmxlbmd0aCxsLG0saCxiLHA9MDtpZihhPT09YnQuR0VPREVTSUN8fGE9PT1idC5SSFVNQil7bGV0IEUsUixTO2E9PT1idC5HRU9ERVNJQz8oRT1rLmNob3JkTGVuZ3RoKHIsaS5tYXhpbXVtUmFkaXVzKSxSPWJuLm51bWJlck9mUG9pbnRzLFM9Ym4uZ2VuZXJhdGVBcmMpOihFPXIsUj1ibi5udW1iZXJPZlBvaW50c1JodW1iTGluZSxTPWJuLmdlbmVyYXRlUmh1bWJBcmMpO2xldCBDPWJuLmV4dHJhY3RIZWlnaHRzKGUsaSksST1SQjtpZihhPT09YnQuR0VPREVTSUM/SS5taW5EaXN0YW5jZT1mOkkuZ3JhbnVsYXJpdHk9cixJLmVsbGlwc29pZD1pLGQpe2xldCBNPTA7Zm9yKGM9MDtjPHUtMTtjKyspTSs9UihlW2NdLGVbYysxXSxFKSsxO2w9bmV3IEZsb2F0NjRBcnJheShNKjMpLGg9bmV3IFVpbnQ4QXJyYXkoTSo0KSxJLnBvc2l0aW9ucz1ZaCxJLmhlaWdodD1KaDtsZXQgUD0wO2ZvcihjPTA7Yzx1LTE7KytjKXtZaFswXT1lW2NdLFloWzFdPWVbYysxXSxKaFswXT1DW2NdLEpoWzFdPUNbYysxXTtsZXQgRj1TKEkpO2lmKGcodCkpe2xldCBBPUYubGVuZ3RoLzM7Yj10W2NdO2ZvcihsZXQgeD0wO3g8QTsrK3gpaFtQKytdPUplLmZsb2F0VG9CeXRlKGIucmVkKSxoW1ArK109SmUuZmxvYXRUb0J5dGUoYi5ncmVlbiksaFtQKytdPUplLmZsb2F0VG9CeXRlKGIuYmx1ZSksaFtQKytdPUplLmZsb2F0VG9CeXRlKGIuYWxwaGEpfWwuc2V0KEYscCkscCs9Ri5sZW5ndGh9fWVsc2UgaWYoSS5wb3NpdGlvbnM9ZSxJLmhlaWdodD1DLGw9bmV3IEZsb2F0NjRBcnJheShTKEkpKSxnKHQpKXtmb3IoaD1uZXcgVWludDhBcnJheShsLmxlbmd0aC8zKjQpLGM9MDtjPHUtMTsrK2Mpe2xldCBQPWVbY10sRj1lW2MrMV0sQT10W2NdLHg9dFtjKzFdO3A9RUIoUCxGLEEseCxmLGgscCl9bGV0IE09dFt1LTFdO2hbcCsrXT1KZS5mbG9hdFRvQnl0ZShNLnJlZCksaFtwKytdPUplLmZsb2F0VG9CeXRlKE0uZ3JlZW4pLGhbcCsrXT1KZS5mbG9hdFRvQnl0ZShNLmJsdWUpLGhbcF09SmUuZmxvYXRUb0J5dGUoTS5hbHBoYSl9fWVsc2V7bT1kP3UqMi0yOnUsbD1uZXcgRmxvYXQ2NEFycmF5KG0qMyksaD1nKHQpP25ldyBVaW50OEFycmF5KG0qNCk6dm9pZCAwO2xldCBFPTAsUj0wO2ZvcihjPTA7Yzx1OysrYyl7bGV0IFM9ZVtjXTtpZihkJiZjPjAmJihzLnBhY2soUyxsLEUpLEUrPTMsYj10W2MtMV0saFtSKytdPUplLmZsb2F0VG9CeXRlKGIucmVkKSxoW1IrK109SmUuZmxvYXRUb0J5dGUoYi5ncmVlbiksaFtSKytdPUplLmZsb2F0VG9CeXRlKGIuYmx1ZSksaFtSKytdPUplLmZsb2F0VG9CeXRlKGIuYWxwaGEpKSxkJiZjPT09dS0xKWJyZWFrO3MucGFjayhTLGwsRSksRSs9MyxnKHQpJiYoYj10W2NdLGhbUisrXT1KZS5mbG9hdFRvQnl0ZShiLnJlZCksaFtSKytdPUplLmZsb2F0VG9CeXRlKGIuZ3JlZW4pLGhbUisrXT1KZS5mbG9hdFRvQnl0ZShiLmJsdWUpLGhbUisrXT1KZS5mbG9hdFRvQnl0ZShiLmFscGhhKSl9fWxldCB5PW5ldyBRZTt5LnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bH0pLGcodCkmJih5LmNvbG9yPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjQsdmFsdWVzOmgsbm9ybWFsaXplOiEwfSkpLG09bC5sZW5ndGgvMztsZXQgVD0obS0xKSoyLF89SWUuY3JlYXRlVHlwZWRBcnJheShtLFQpLHc9MDtmb3IoYz0wO2M8bS0xOysrYylfW3crK109YyxfW3crK109YysxO3JldHVybiBuZXcgUGUoe2F0dHJpYnV0ZXM6eSxpbmRpY2VzOl8scHJpbWl0aXZlVHlwZTpGZS5MSU5FUyxib3VuZGluZ1NwaGVyZTpwZS5mcm9tUG9pbnRzKGUpfSl9O2xfPXlkfSk7dmFyIGhfPXt9OyRlKGhfLHtkZWZhdWx0OigpPT5PQn0pO2Z1bmN0aW9uIHhCKG4sZSl7cmV0dXJuIGcoZSkmJihuPWxfLnVucGFjayhuLGUpKSxuLl9lbGxpcHNvaWQ9Sy5jbG9uZShuLl9lbGxpcHNvaWQpLGxfLmNyZWF0ZUdlb21ldHJ5KG4pfXZhciBPQixtXz1YKCgpPT57ZmUoKTtWZSgpO1IyKCk7T0I9eEJ9KTtmdW5jdGlvbiBVcyhuKXtsZXQgZT1uLnJhZGl1cz8/MSxvPXtyYWRpaTpuZXcgcyhlLGUsZSksc3RhY2tQYXJ0aXRpb25zOm4uc3RhY2tQYXJ0aXRpb25zLHNsaWNlUGFydGl0aW9uczpuLnNsaWNlUGFydGl0aW9ucyx2ZXJ0ZXhGb3JtYXQ6bi52ZXJ0ZXhGb3JtYXR9O3RoaXMuX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBpYShvKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVTcGhlcmVHZW9tZXRyeSJ9dmFyIFNCLERpLGJfLHgyPVgoKCk9PntNZSgpO2ZlKCk7a2goKTtDbygpO1VzLnBhY2tlZExlbmd0aD1pYS5wYWNrZWRMZW5ndGg7VXMucGFjaz1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIGlhLnBhY2sobi5fZWxsaXBzb2lkR2VvbWV0cnksZSx0KX07U0I9bmV3IGlhLERpPXtyYWRpdXM6dm9pZCAwLHJhZGlpOm5ldyBzLHZlcnRleEZvcm1hdDpuZXcgaGUsc3RhY2tQYXJ0aXRpb25zOnZvaWQgMCxzbGljZVBhcnRpdGlvbnM6dm9pZCAwfTtVcy51bnBhY2s9ZnVuY3Rpb24obixlLHQpe2xldCBvPWlhLnVucGFjayhuLGUsU0IpO3JldHVybiBEaS52ZXJ0ZXhGb3JtYXQ9aGUuY2xvbmUoby5fdmVydGV4Rm9ybWF0LERpLnZlcnRleEZvcm1hdCksRGkuc3RhY2tQYXJ0aXRpb25zPW8uX3N0YWNrUGFydGl0aW9ucyxEaS5zbGljZVBhcnRpdGlvbnM9by5fc2xpY2VQYXJ0aXRpb25zLGcodCk/KHMuY2xvbmUoby5fcmFkaWksRGkucmFkaWkpLHQuX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBpYShEaSksdCk6KERpLnJhZGl1cz1vLl9yYWRpaS54LG5ldyBVcyhEaSkpfTtVcy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihuKXtyZXR1cm4gaWEuY3JlYXRlR2VvbWV0cnkobi5fZWxsaXBzb2lkR2VvbWV0cnkpfTtiXz1Vc30pO3ZhciBwXz17fTskZShwXyx7ZGVmYXVsdDooKT0+TUJ9KTtmdW5jdGlvbiBDQihuLGUpe3JldHVybiBnKGUpJiYobj1iXy51bnBhY2sobixlKSksYl8uY3JlYXRlR2VvbWV0cnkobil9dmFyIE1CLGdfPVgoKCk9PntmZSgpO3gyKCk7TUI9Q0J9KTtmdW5jdGlvbiBqcyhuKXtsZXQgZT1uLnJhZGl1cz8/MSxvPXtyYWRpaTpuZXcgcyhlLGUsZSksc3RhY2tQYXJ0aXRpb25zOm4uc3RhY2tQYXJ0aXRpb25zLHNsaWNlUGFydGl0aW9uczpuLnNsaWNlUGFydGl0aW9ucyxzdWJkaXZpc2lvbnM6bi5zdWJkaXZpc2lvbnN9O3RoaXMuX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBZYShvKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVTcGhlcmVPdXRsaW5lR2VvbWV0cnkifXZhciBOQix4YyxfXyxPMj1YKCgpPT57TWUoKTtmZSgpOyQwKCk7anMucGFja2VkTGVuZ3RoPVlhLnBhY2tlZExlbmd0aDtqcy5wYWNrPWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gWWEucGFjayhuLl9lbGxpcHNvaWRHZW9tZXRyeSxlLHQpfTtOQj1uZXcgWWEseGM9e3JhZGl1czp2b2lkIDAscmFkaWk6bmV3IHMsc3RhY2tQYXJ0aXRpb25zOnZvaWQgMCxzbGljZVBhcnRpdGlvbnM6dm9pZCAwLHN1YmRpdmlzaW9uczp2b2lkIDB9O2pzLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7bGV0IG89WWEudW5wYWNrKG4sZSxOQik7cmV0dXJuIHhjLnN0YWNrUGFydGl0aW9ucz1vLl9zdGFja1BhcnRpdGlvbnMseGMuc2xpY2VQYXJ0aXRpb25zPW8uX3NsaWNlUGFydGl0aW9ucyx4Yy5zdWJkaXZpc2lvbnM9by5fc3ViZGl2aXNpb25zLGcodCk/KHMuY2xvbmUoby5fcmFkaWkseGMucmFkaWkpLHQuX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBZYSh4YyksdCk6KHhjLnJhZGl1cz1vLl9yYWRpaS54LG5ldyBqcyh4YykpfTtqcy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbihuKXtyZXR1cm4gWWEuY3JlYXRlR2VvbWV0cnkobi5fZWxsaXBzb2lkR2VvbWV0cnkpfTtfXz1qc30pO3ZhciB5Xz17fTskZSh5Xyx7ZGVmYXVsdDooKT0+UEJ9KTtmdW5jdGlvbiBJQihuLGUpe3JldHVybiBnKGUpJiYobj1fXy51bnBhY2sobixlKSksX18uY3JlYXRlR2VvbWV0cnkobil9dmFyIFBCLEFfPVgoKCk9PntmZSgpO08yKCk7UEI9SUJ9KTt2YXIgd189e307JGUod18se2RlZmF1bHQ6KCk9PlFCfSk7ZnVuY3Rpb24gREIobixlLHQsbyxhLHIsaSl7bGV0IGY9bi5sZW5ndGgsZD1uZXcgRmxvYXQ2NEFycmF5KGYqMyk7Zm9yKGxldCBjPTA7YzxmOysrYyl7bGV0IHU9bltjXSxsPWVbY10sbT10W2NdLGg9ay5sZXJwKG8ud2VzdCxvLmVhc3QsdS9BZCksYj1rLmxlcnAoby5zb3V0aCxvLm5vcnRoLGwvQWQpLHA9ay5sZXJwKGEscixtL0FkKSx5PWFlLmZyb21SYWRpYW5zKGgsYixwLHZCKSxUPWkuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oeSxGQik7cy5wYWNrKFQsZCxjKjMpfXJldHVybiBkfWZ1bmN0aW9uIEJCKG4pe2xldCBlPW4ubGVuZ3RoLHQ9bmV3IFVpbnQzMkFycmF5KGUrMSksbz0wO2ZvcihsZXQgYT0wO2E8ZTsrK2EpdFthXT1vLG8rPW5bYV07cmV0dXJuIHRbZV09byx0fWZ1bmN0aW9uIExCKG4sZSx0LG8pe2xldCBhPW8ubGVuZ3RoLHI9bi5sZW5ndGgsaT1uZXcgVWludDhBcnJheShyKSxmPVVCLGQ9akIsYz0wO2ZvcihsZXQgbD0wO2w8YTtsKyspe2xldCBtPW9bbF0saD1tO2ZvcihsZXQgYj0xO2I8bTtiKyspe2xldCBwPWMrYix5PXAtMTtkLmxvbmdpdHVkZT1uW3BdLGQubGF0aXR1ZGU9ZVtwXSxmLmxvbmdpdHVkZT1uW3ldLGYubGF0aXR1ZGU9ZVt5XSxhZS5lcXVhbHMoZCxmKSYmKGgtLSxpW3ldPTEpfW9bbF09aCxjKz1tfWxldCB1PTA7Zm9yKGxldCBsPTA7bDxyO2wrKylpW2xdIT09MSYmKG5bdV09bltsXSxlW3VdPWVbbF0sdFt1XT10W2xdLHUrKyl9ZnVuY3Rpb24gSTIobil7bGV0IGU9bio4LHQ9ZSozLG89ZSo0O3RoaXMuc3RhcnRFbGxpcHNvaWROb3JtYWxzPW5ldyBGbG9hdDMyQXJyYXkodCksdGhpcy5lbmRFbGxpcHNvaWROb3JtYWxzPW5ldyBGbG9hdDMyQXJyYXkodCksdGhpcy5zdGFydFBvc2l0aW9uQW5kSGVpZ2h0cz1uZXcgRmxvYXQzMkFycmF5KG8pLHRoaXMuc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzPW5ldyBGbG9hdDMyQXJyYXkobyksdGhpcy5lbmRQb3NpdGlvbkFuZEhlaWdodHM9bmV3IEZsb2F0MzJBcnJheShvKSx0aGlzLmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzPW5ldyBGbG9hdDMyQXJyYXkobyksdGhpcy52ZXJ0ZXhCYXRjaElkcz1uZXcgVWludDE2QXJyYXkoZSksdGhpcy5pbmRpY2VzPUllLmNyZWF0ZVR5cGVkQXJyYXkoZSwzNipuKSx0aGlzLnZlYzNPZmZzZXQ9MCx0aGlzLnZlYzRPZmZzZXQ9MCx0aGlzLmJhdGNoSWRPZmZzZXQ9MCx0aGlzLmluZGV4T2Zmc2V0PTAsdGhpcy52b2x1bWVTdGFydEluZGV4PTB9ZnVuY3Rpb24gQzIobixlLHQsbyxhKXtsZXQgcj1zLnN1YnRyYWN0KHQsZSx6QiksaT1zLnN1YnRyYWN0KGUsbixTMik7cmV0dXJuIHMubm9ybWFsaXplKHIscikscy5ub3JtYWxpemUoaSxpKSxzLmRvdChyLGkpPGtCJiYoaT1zLm11bHRpcGx5QnlTY2FsYXIoaSwtMSxTMikpLHMuYWRkKHIsaSxhKSxzLmVxdWFscyhhLHMuWkVSTykmJihhPXMuc3VidHJhY3QobixlKSkscy5jcm9zcyhhLG8sYSkscy5jcm9zcyhvLGEsYSkscy5ub3JtYWxpemUoYSxhKSxhfWZ1bmN0aW9uIFpCKG4sZSl7bGV0IHQ9bmV3IFVpbnQxNkFycmF5KG4ucG9zaXRpb25zKSxvPW5ldyBVaW50MTZBcnJheShuLndpZHRocyksYT1uZXcgVWludDMyQXJyYXkobi5jb3VudHMpLHI9bmV3IFVpbnQxNkFycmF5KG4uYmF0Y2hJZHMpLGk9cUIsZj1XQixkPVhCLGM9bmV3IEZsb2F0NjRBcnJheShuLnBhY2tlZEJ1ZmZlciksdT0wLGw9Y1t1KytdLG09Y1t1KytdO3hlLnVucGFjayhjLHUsaSksdSs9eGUucGFja2VkTGVuZ3RoLEsudW5wYWNrKGMsdSxmKSx1Kz1LLnBhY2tlZExlbmd0aCxzLnVucGFjayhjLHUsZCk7bGV0IGgsYj10Lmxlbmd0aC8zLHA9dC5zdWJhcnJheSgwLGIpLHk9dC5zdWJhcnJheShiLDIqYiksVD10LnN1YmFycmF5KDIqYiwzKmIpO2p0LnppZ1phZ0RlbHRhRGVjb2RlKHAseSxUKSxMQihwLHksVCxhKTtsZXQgXz1hLmxlbmd0aCx3PTA7Zm9yKGg9MDtoPF87aCsrKXtsZXQgRj1hW2hdO3crPUYtMX1sZXQgRT1uZXcgSTIodyksUj1EQihwLHksVCxpLGwsbSxmLGQpO2I9cC5sZW5ndGg7bGV0IFM9bmV3IEZsb2F0MzJBcnJheShiKjMpO2ZvcihoPTA7aDxiOysraClTW2gqM109UltoKjNdLWQueCxTW2gqMysxXT1SW2gqMysxXS1kLnksU1toKjMrMl09UltoKjMrMl0tZC56O2xldCBDPTAsST0wO2ZvcihoPTA7aDxfO2grKyl7bGV0IEY9YVtoXS0xLEE9b1toXSouNSx4PXJbaF0sTj1DO2ZvcihsZXQgdj0wO3Y8Rjt2Kyspe2xldCBVPXMudW5wYWNrKFMsQyxZQiksTD1zLnVucGFjayhTLEMrMyxKQiksRD1UW0ldLEc9VFtJKzFdO0Q9ay5sZXJwKGwsbSxEL0FkKSxHPWsubGVycChsLG0sRy9BZCksSSsrO2xldCBWPVpoLE89UWg7aWYodj09PTApe2xldCBKPU4rRiozLHJlPXMudW5wYWNrKFMsSixaaCk7aWYocy5lcXVhbHMocmUsVSkpcy51bnBhY2soUyxKLTMsVik7ZWxzZXtsZXQgc2U9cy5zdWJ0cmFjdChVLEwsWmgpO1Y9cy5hZGQoc2UsVSxaaCl9fWVsc2Ugcy51bnBhY2soUyxDLTMsVik7aWYodj09PUYtMSl7bGV0IEo9cy51bnBhY2soUyxOLFFoKTtpZihzLmVxdWFscyhKLEwpKXMudW5wYWNrKFMsTiszLE8pO2Vsc2V7bGV0IHJlPXMuc3VidHJhY3QoTCxVLFFoKTtPPXMuYWRkKHJlLEwsUWgpfX1lbHNlIHMudW5wYWNrKFMsQys2LE8pO0UuYWRkVm9sdW1lKFYsVSxMLE8sRCxHLEEseCxkLGYpLEMrPTN9Qys9MyxJKyt9bGV0IE09RS5pbmRpY2VzO2UucHVzaChFLnN0YXJ0RWxsaXBzb2lkTm9ybWFscy5idWZmZXIpLGUucHVzaChFLmVuZEVsbGlwc29pZE5vcm1hbHMuYnVmZmVyKSxlLnB1c2goRS5zdGFydFBvc2l0aW9uQW5kSGVpZ2h0cy5idWZmZXIpLGUucHVzaChFLnN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkcy5idWZmZXIpLGUucHVzaChFLmVuZFBvc2l0aW9uQW5kSGVpZ2h0cy5idWZmZXIpLGUucHVzaChFLmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzLmJ1ZmZlciksZS5wdXNoKEUudmVydGV4QmF0Y2hJZHMuYnVmZmVyKSxlLnB1c2goTS5idWZmZXIpO2xldCBQPXtpbmRleERhdGF0eXBlOk0uQllURVNfUEVSX0VMRU1FTlQ9PT0yP0llLlVOU0lHTkVEX1NIT1JUOkllLlVOU0lHTkVEX0lOVCxzdGFydEVsbGlwc29pZE5vcm1hbHM6RS5zdGFydEVsbGlwc29pZE5vcm1hbHMuYnVmZmVyLGVuZEVsbGlwc29pZE5vcm1hbHM6RS5lbmRFbGxpcHNvaWROb3JtYWxzLmJ1ZmZlcixzdGFydFBvc2l0aW9uQW5kSGVpZ2h0czpFLnN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlcixzdGFydEZhY2VOb3JtYWxBbmRWZXJ0ZXhDb3JuZXJJZHM6RS5zdGFydEZhY2VOb3JtYWxBbmRWZXJ0ZXhDb3JuZXJJZHMuYnVmZmVyLGVuZFBvc2l0aW9uQW5kSGVpZ2h0czpFLmVuZFBvc2l0aW9uQW5kSGVpZ2h0cy5idWZmZXIsZW5kRmFjZU5vcm1hbEFuZEhhbGZXaWR0aHM6RS5lbmRGYWNlTm9ybWFsQW5kSGFsZldpZHRocy5idWZmZXIsdmVydGV4QmF0Y2hJZHM6RS52ZXJ0ZXhCYXRjaElkcy5idWZmZXIsaW5kaWNlczpNLmJ1ZmZlcn07aWYobi5rZWVwRGVjb2RlZFBvc2l0aW9ucyl7bGV0IEY9QkIoYSk7ZS5wdXNoKFIuYnVmZmVyLEYuYnVmZmVyKSxQPV9hKFAse2RlY29kZWRQb3NpdGlvbnM6Ui5idWZmZXIsZGVjb2RlZFBvc2l0aW9uT2Zmc2V0czpGLmJ1ZmZlcn0pfXJldHVybiBQfXZhciBBZCxrQix2QixGQixVQixqQixTMix6QixQMixNMixOMixHQixWQixIQixLQixxQixXQixYQixaaCxZQixKQixRaCxRQixUXz1YKCgpPT57QnIoKTtNZSgpO2d0KCk7Z2woKTtWZSgpO1p0KCk7amUoKTtobigpO2tuKCk7QWQ9MzI3Njcsa0I9TWF0aC5jb3Moay50b1JhZGlhbnMoMTUwKSksdkI9bmV3IGFlLEZCPW5ldyBzO1VCPW5ldyBhZSxqQj1uZXcgYWU7UzI9bmV3IHMsekI9bmV3IHM7UDI9WzAsMiw2LDAsNiw0LDAsMSwzLDAsMywyLDAsNCw1LDAsNSwxLDUsMywxLDUsNywzLDcsNSw0LDcsNCw2LDcsNiwyLDcsMiwzXSxNMj1QMi5sZW5ndGgsTjI9bmV3IHMsR0I9bmV3IHMsVkI9bmV3IHMsSEI9bmV3IHMsS0I9bmV3IHM7STIucHJvdG90eXBlLmFkZFZvbHVtZT1mdW5jdGlvbihuLGUsdCxvLGEscixpLGYsZCxjKXtsZXQgdT1zLmFkZChlLGQsTjIpLGw9Yy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodSxHQik7dT1zLmFkZCh0LGQsTjIpO2xldCBtPWMuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHUsSEIpLGg9QzIobixlLHQsbCxWQiksYj1DMihvLHQsZSxtLEtCKSxwPXRoaXMuc3RhcnRFbGxpcHNvaWROb3JtYWxzLHk9dGhpcy5lbmRFbGxpcHNvaWROb3JtYWxzLFQ9dGhpcy5zdGFydFBvc2l0aW9uQW5kSGVpZ2h0cyxfPXRoaXMuc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzLHc9dGhpcy5lbmRQb3NpdGlvbkFuZEhlaWdodHMsRT10aGlzLmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzLFI9dGhpcy52ZXJ0ZXhCYXRjaElkcyxTPXRoaXMuYmF0Y2hJZE9mZnNldCxDPXRoaXMudmVjM09mZnNldCxJPXRoaXMudmVjNE9mZnNldCxNO2ZvcihNPTA7TTw4O00rKylzLnBhY2sobCxwLEMpLHMucGFjayhtLHksQykscy5wYWNrKGUsVCxJKSxUW0krM109YSxzLnBhY2sodCx3LEkpLHdbSSszXT1yLHMucGFjayhoLF8sSSksX1tJKzNdPU0scy5wYWNrKGIsRSxJKSxFW0krM109aSxSW1MrK109ZixDKz0zLEkrPTQ7dGhpcy5iYXRjaElkT2Zmc2V0PVMsdGhpcy52ZWMzT2Zmc2V0PUMsdGhpcy52ZWM0T2Zmc2V0PUk7bGV0IFA9dGhpcy5pbmRpY2VzLEY9dGhpcy52b2x1bWVTdGFydEluZGV4LEE9dGhpcy5pbmRleE9mZnNldDtmb3IoTT0wO008TTI7TSsrKVBbQStNXT1QMltNXStGO3RoaXMudm9sdW1lU3RhcnRJbmRleCs9OCx0aGlzLmluZGV4T2Zmc2V0Kz1NMn07cUI9bmV3IHhlLFdCPW5ldyBLLFhCPW5ldyBzLFpoPW5ldyBzLFlCPW5ldyBzLEpCPW5ldyBzLFFoPW5ldyBzO1FCPW10KFpCKX0pO2Z1bmN0aW9uICRCKG4pe3RoaXMub2Zmc2V0PW4ub2Zmc2V0LHRoaXMuY291bnQ9bi5jb3VudCx0aGlzLmNvbG9yPW4uY29sb3IsdGhpcy5iYXRjaElkcz1uLmJhdGNoSWRzfXZhciBrMix2Mj1YKCgpPT57azI9JEJ9KTt2YXIgRV89e307JGUoRV8se2RlZmF1bHQ6KCk9PmhVfSk7ZnVuY3Rpb24gYVUobixlKXtsZXQgdD1lKmVVLG89cy51bnBhY2sobix0LGVtKTt0Kz1zLnBhY2tlZExlbmd0aDtsZXQgYT1RLnVucGFjayhuLHQsSWEubW9kZWxNYXRyaXgpO1EubXVsdGlwbHlCeVNjYWxlKGEsbyxhKTtsZXQgcj1JYS5ib3VuZGluZ1ZvbHVtZTtyZXR1cm4gcy5jbG9uZShzLlpFUk8sci5jZW50ZXIpLHIucmFkaXVzPU1hdGguc3FydCgzKSxJYX1mdW5jdGlvbiByVShuLGUpe2xldCB0PWUqdFUsbz1uW3QrK10sYT1uW3QrK10scj1zLmZyb21FbGVtZW50cyhvLG8sYSxlbSksaT1RLnVucGFjayhuLHQsSWEubW9kZWxNYXRyaXgpO1EubXVsdGlwbHlCeVNjYWxlKGkscixpKTtsZXQgZj1JYS5ib3VuZGluZ1ZvbHVtZTtyZXR1cm4gcy5jbG9uZShzLlpFUk8sZi5jZW50ZXIpLGYucmFkaXVzPU1hdGguc3FydCgyKSxJYX1mdW5jdGlvbiBpVShuLGUpe2xldCB0PWUqblUsbz1zLnVucGFjayhuLHQsZW0pO3QrPXMucGFja2VkTGVuZ3RoO2xldCBhPVEudW5wYWNrKG4sdCxJYS5tb2RlbE1hdHJpeCk7US5tdWx0aXBseUJ5U2NhbGUoYSxvLGEpO2xldCByPUlhLmJvdW5kaW5nVm9sdW1lO3JldHVybiBzLmNsb25lKHMuWkVSTyxyLmNlbnRlciksci5yYWRpdXM9MSxJYX1mdW5jdGlvbiBjVShuLGUpe2xldCB0PWUqb1Usbz1uW3QrK10sYT1zLnVucGFjayhuLHQsZW0pLHI9US5mcm9tVHJhbnNsYXRpb24oYSxJYS5tb2RlbE1hdHJpeCk7US5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlKHIsbyxyKTtsZXQgaT1JYS5ib3VuZGluZ1ZvbHVtZTtyZXR1cm4gcy5jbG9uZShzLlpFUk8saS5jZW50ZXIpLGkucmFkaXVzPTEsSWF9ZnVuY3Rpb24gJGgobixlLHQsbyxhKXtpZighZyhlKSlyZXR1cm47bGV0IHI9dC5sZW5ndGgsaT1vLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGY9by5pbmRpY2VzLGQ9bi5wb3NpdGlvbnMsYz1uLnZlcnRleEJhdGNoSWRzLHU9bi5pbmRpY2VzLGw9bi5iYXRjaElkcyxtPW4uYmF0Y2hUYWJsZUNvbG9ycyxoPW4uYmF0Y2hlZEluZGljZXMsYj1uLmluZGV4T2Zmc2V0cyxwPW4uaW5kZXhDb3VudHMseT1uLmJvdW5kaW5nVm9sdW1lcyxUPW4ubW9kZWxNYXRyaXgsXz1uLmNlbnRlcix3PW4ucG9zaXRpb25PZmZzZXQsRT1uLmJhdGNoSWRJbmRleCxSPW4uaW5kZXhPZmZzZXQsUz1uLmJhdGNoZWRJbmRpY2VzT2Zmc2V0O2ZvcihsZXQgQz0wO0M8cjsrK0Mpe2xldCBJPWEoZSxDKSxNPUkubW9kZWxNYXRyaXg7US5tdWx0aXBseShULE0sTSk7bGV0IFA9dFtDXSxGPWkubGVuZ3RoO2ZvcihsZXQgTj0wO048RjtOKz0zKXtsZXQgdj1zLnVucGFjayhpLE4sc1UpO1EubXVsdGlwbHlCeVBvaW50KE0sdix2KSxzLnN1YnRyYWN0KHYsXyx2KSxzLnBhY2sodixkLHcqMytOKSxjW0UrK109UH1sZXQgQT1mLmxlbmd0aDtmb3IobGV0IE49MDtOPEE7KytOKXVbUitOXT1mW05dK3c7bGV0IHg9QytTO2hbeF09bmV3IGsyKHtvZmZzZXQ6Uixjb3VudDpBLGNvbG9yOkplLmZyb21SZ2JhKG1bUF0pLGJhdGNoSWRzOltQXX0pLGxbeF09UCxiW3hdPVIscFt4XT1BLHlbeF09cGUudHJhbnNmb3JtKEkuYm91bmRpbmdWb2x1bWUsTSksdys9Ri8zLFIrPUF9bi5wb3NpdGlvbk9mZnNldD13LG4uYmF0Y2hJZEluZGV4PUUsbi5pbmRleE9mZnNldD1SLG4uYmF0Y2hlZEluZGljZXNPZmZzZXQrPXJ9ZnVuY3Rpb24gZlUobil7bGV0IGU9bmV3IEZsb2F0NjRBcnJheShuKSx0PTA7cy51bnBhY2soZSx0LEYyKSx0Kz1zLnBhY2tlZExlbmd0aCxRLnVucGFjayhlLHQsRDIpfWZ1bmN0aW9uIGRVKG4pe2xldCBlPW4ubGVuZ3RoLHQ9MDtmb3IobGV0IG89MDtvPGU7KytvKXQrPUplLnBhY2tlZExlbmd0aCszK25bb10uYmF0Y2hJZHMubGVuZ3RoO3JldHVybiB0fWZ1bmN0aW9uIHVVKG4sZSx0KXtsZXQgbz10Lmxlbmd0aCxhPTIrbypwZS5wYWNrZWRMZW5ndGgrMStkVShlKSxyPW5ldyBGbG9hdDY0QXJyYXkoYSksaT0wO3JbaSsrXT1uLHJbaSsrXT1vO2ZvcihsZXQgZD0wO2Q8bzsrK2QpcGUucGFjayh0W2RdLHIsaSksaSs9cGUucGFja2VkTGVuZ3RoO2xldCBmPWUubGVuZ3RoO3JbaSsrXT1mO2ZvcihsZXQgZD0wO2Q8ZjsrK2Qpe2xldCBjPWVbZF07SmUucGFjayhjLmNvbG9yLHIsaSksaSs9SmUucGFja2VkTGVuZ3RoLHJbaSsrXT1jLm9mZnNldCxyW2krK109Yy5jb3VudDtsZXQgdT1jLmJhdGNoSWRzLGw9dS5sZW5ndGg7cltpKytdPWw7Zm9yKGxldCBtPTA7bTxsOysrbSlyW2krK109dVttXX1yZXR1cm4gcn1mdW5jdGlvbiBsVShuLGUpe2xldCB0PWcobi5ib3hlcyk/bmV3IEZsb2F0MzJBcnJheShuLmJveGVzKTp2b2lkIDAsbz1nKG4uYm94QmF0Y2hJZHMpP25ldyBVaW50MTZBcnJheShuLmJveEJhdGNoSWRzKTp2b2lkIDAsYT1nKG4uY3lsaW5kZXJzKT9uZXcgRmxvYXQzMkFycmF5KG4uY3lsaW5kZXJzKTp2b2lkIDAscj1nKG4uY3lsaW5kZXJCYXRjaElkcyk/bmV3IFVpbnQxNkFycmF5KG4uY3lsaW5kZXJCYXRjaElkcyk6dm9pZCAwLGk9ZyhuLmVsbGlwc29pZHMpP25ldyBGbG9hdDMyQXJyYXkobi5lbGxpcHNvaWRzKTp2b2lkIDAsZj1nKG4uZWxsaXBzb2lkQmF0Y2hJZHMpP25ldyBVaW50MTZBcnJheShuLmVsbGlwc29pZEJhdGNoSWRzKTp2b2lkIDAsZD1nKG4uc3BoZXJlcyk/bmV3IEZsb2F0MzJBcnJheShuLnNwaGVyZXMpOnZvaWQgMCxjPWcobi5zcGhlcmVCYXRjaElkcyk/bmV3IFVpbnQxNkFycmF5KG4uc3BoZXJlQmF0Y2hJZHMpOnZvaWQgMCx1PWcodCk/by5sZW5ndGg6MCxsPWcoYSk/ci5sZW5ndGg6MCxtPWcoaSk/Zi5sZW5ndGg6MCxoPWcoZCk/Yy5sZW5ndGg6MCxiPXpmLmdldFVuaXRCb3goKSxwPXJkLmdldFVuaXRDeWxpbmRlcigpLHk9aWEuZ2V0VW5pdEVsbGlwc29pZCgpLFQ9Yi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxfPXAuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsdz15LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLEU9VC5sZW5ndGgqdTtFKz1fLmxlbmd0aCpsLEUrPXcubGVuZ3RoKihtK2gpO2xldCBSPWIuaW5kaWNlcyxTPXAuaW5kaWNlcyxDPXkuaW5kaWNlcyxJPVIubGVuZ3RoKnU7SSs9Uy5sZW5ndGgqbCxJKz1DLmxlbmd0aCoobStoKTtsZXQgTT1uZXcgRmxvYXQzMkFycmF5KEUpLFA9bmV3IFVpbnQxNkFycmF5KEUvMyksRj1JZS5jcmVhdGVUeXBlZEFycmF5KEUvMyxJKSxBPXUrbCttK2gseD1uZXcgVWludDE2QXJyYXkoQSksTj1uZXcgQXJyYXkoQSksdj1uZXcgVWludDMyQXJyYXkoQSksVT1uZXcgVWludDMyQXJyYXkoQSksTD1uZXcgQXJyYXkoQSk7ZlUobi5wYWNrZWRCdWZmZXIpO2xldCBEPXtiYXRjaFRhYmxlQ29sb3JzOm5ldyBVaW50MzJBcnJheShuLmJhdGNoVGFibGVDb2xvcnMpLHBvc2l0aW9uczpNLHZlcnRleEJhdGNoSWRzOlAsaW5kaWNlczpGLGJhdGNoSWRzOngsYmF0Y2hlZEluZGljZXM6TixpbmRleE9mZnNldHM6dixpbmRleENvdW50czpVLGJvdW5kaW5nVm9sdW1lczpMLHBvc2l0aW9uT2Zmc2V0OjAsYmF0Y2hJZEluZGV4OjAsaW5kZXhPZmZzZXQ6MCxiYXRjaGVkSW5kaWNlc09mZnNldDowLG1vZGVsTWF0cml4OkQyLGNlbnRlcjpGMn07JGgoRCx0LG8sYixhVSksJGgoRCxhLHIscCxyVSksJGgoRCxpLGYseSxpVSksJGgoRCxkLGMseSxjVSk7bGV0IEc9dVUoRi5CWVRFU19QRVJfRUxFTUVOVCxOLEwpO3JldHVybiBlLnB1c2goTS5idWZmZXIsUC5idWZmZXIsRi5idWZmZXIpLGUucHVzaCh4LmJ1ZmZlcix2LmJ1ZmZlcixVLmJ1ZmZlciksZS5wdXNoKEcuYnVmZmVyKSx7cG9zaXRpb25zOk0uYnVmZmVyLHZlcnRleEJhdGNoSWRzOlAuYnVmZmVyLGluZGljZXM6Ri5idWZmZXIsaW5kZXhPZmZzZXRzOnYuYnVmZmVyLGluZGV4Q291bnRzOlUuYnVmZmVyLGJhdGNoSWRzOnguYnVmZmVyLHBhY2tlZEJ1ZmZlcjpHLmJ1ZmZlcn19dmFyIGVtLGVVLHRVLG5VLG9VLElhLHNVLEYyLEQyLGhVLFJfPVgoKCk9PntFdCgpO0ZwKCk7TWUoKTtrcygpO2owKCk7ZmUoKTtraCgpO1p0KCk7dW4oKTt2MigpO2tuKCk7ZW09bmV3IHMsZVU9US5wYWNrZWRMZW5ndGgrcy5wYWNrZWRMZW5ndGgsdFU9US5wYWNrZWRMZW5ndGgrMixuVT1RLnBhY2tlZExlbmd0aCtzLnBhY2tlZExlbmd0aCxvVT1zLnBhY2tlZExlbmd0aCsxLElhPXttb2RlbE1hdHJpeDpuZXcgUSxib3VuZGluZ1ZvbHVtZTpuZXcgcGV9O3NVPW5ldyBzO0YyPW5ldyBzLEQyPW5ldyBRO2hVPW10KGxVKX0pO3ZhciBPXz17fTskZShPXyx7ZGVmYXVsdDooKT0+X1V9KTtmdW5jdGlvbiBwVShuKXtuPW5ldyBGbG9hdDY0QXJyYXkobik7bGV0IGU9MDt0bS5taW49bltlKytdLHRtLm1heD1uW2UrK10seGUudW5wYWNrKG4sZSxCMiksZSs9eGUucGFja2VkTGVuZ3RoLEsudW5wYWNrKG4sZSxVMil9ZnVuY3Rpb24gZ1UobixlKXtsZXQgdD1uZXcgVWludDE2QXJyYXkobi5wb3NpdGlvbnMpO3BVKG4ucGFja2VkQnVmZmVyKTtsZXQgbz1CMixhPVUyLHI9dG0ubWluLGk9dG0ubWF4LGY9dC5sZW5ndGgvMyxkPXQuc3ViYXJyYXkoMCxmKSxjPXQuc3ViYXJyYXkoZiwyKmYpLHU9dC5zdWJhcnJheSgyKmYsMypmKTtqdC56aWdaYWdEZWx0YURlY29kZShkLGMsdSk7bGV0IGw9bmV3IEZsb2F0NjRBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBtPTA7bTxmOysrbSl7bGV0IGg9ZFttXSxiPWNbbV0scD11W21dLHk9ay5sZXJwKG8ud2VzdCxvLmVhc3QsaC94XyksVD1rLmxlcnAoby5zb3V0aCxvLm5vcnRoLGIveF8pLF89ay5sZXJwKHIsaSxwL3hfKSx3PWFlLmZyb21SYWRpYW5zKHksVCxfLG1VKSxFPWEuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odyxiVSk7cy5wYWNrKEUsbCxtKjMpfXJldHVybiBlLnB1c2gobC5idWZmZXIpLHtwb3NpdGlvbnM6bC5idWZmZXJ9fXZhciB4XyxtVSxiVSxCMixVMix0bSxfVSxTXz1YKCgpPT57QnIoKTtNZSgpO2d0KCk7VmUoKTtqZSgpO2huKCk7a24oKTt4Xz0zMjc2NyxtVT1uZXcgYWUsYlU9bmV3IHMsQjI9bmV3IHhlLFUyPW5ldyBLLHRtPXttaW46dm9pZCAwLG1heDp2b2lkIDB9O19VPW10KGdVKX0pO3ZhciBDXz17fTskZShDXyx7ZGVmYXVsdDooKT0+Q1V9KTtmdW5jdGlvbiB5VShuKXtsZXQgZT1uZXcgRmxvYXQ2NEFycmF5KG4pLHQ9MDtMcy5pbmRleEJ5dGVzUGVyRWxlbWVudD1lW3QrK10sTHMubWluPWVbdCsrXSxMcy5tYXg9ZVt0KytdLHMudW5wYWNrKGUsdCxHMiksdCs9cy5wYWNrZWRMZW5ndGgsSy51bnBhY2soZSx0LFYyKSx0Kz1LLnBhY2tlZExlbmd0aCx4ZS51bnBhY2soZSx0LEgyKX1mdW5jdGlvbiBBVShuKXtsZXQgZT1uLmxlbmd0aCx0PTA7Zm9yKGxldCBvPTA7bzxlOysrbyl0Kz1KZS5wYWNrZWRMZW5ndGgrMytuW29dLmJhdGNoSWRzLmxlbmd0aDtyZXR1cm4gdH1mdW5jdGlvbiB3VShuLGUsdCl7bGV0IG89ZS5sZW5ndGgsYT0yK28qbW4ucGFja2VkTGVuZ3RoKzErQVUodCkscj1uZXcgRmxvYXQ2NEFycmF5KGEpLGk9MDtyW2krK109bixyW2krK109bztmb3IobGV0IGQ9MDtkPG87KytkKW1uLnBhY2soZVtkXSxyLGkpLGkrPW1uLnBhY2tlZExlbmd0aDtsZXQgZj10Lmxlbmd0aDtyW2krK109Zjtmb3IobGV0IGQ9MDtkPGY7KytkKXtsZXQgYz10W2RdO0plLnBhY2soYy5jb2xvcixyLGkpLGkrPUplLnBhY2tlZExlbmd0aCxyW2krK109Yy5vZmZzZXQscltpKytdPWMuY291bnQ7bGV0IHU9Yy5iYXRjaElkcyxsPXUubGVuZ3RoO3JbaSsrXT1sO2ZvcihsZXQgbT0wO208bDsrK20pcltpKytdPXVbbV19cmV0dXJuIHJ9ZnVuY3Rpb24gU1UobixlKXt5VShuLnBhY2tlZEJ1ZmZlcik7bGV0IHQ7THMuaW5kZXhCeXRlc1BlckVsZW1lbnQ9PT0yP3Q9bmV3IFVpbnQxNkFycmF5KG4uaW5kaWNlcyk6dD1uZXcgVWludDMyQXJyYXkobi5pbmRpY2VzKTtsZXQgYT1uZXcgVWludDE2QXJyYXkobi5wb3NpdGlvbnMpLHI9bmV3IFVpbnQzMkFycmF5KG4uY291bnRzKSxpPW5ldyBVaW50MzJBcnJheShuLmluZGV4Q291bnRzKSxmPW5ldyBVaW50MzJBcnJheShuLmJhdGNoSWRzKSxkPW5ldyBVaW50MzJBcnJheShuLmJhdGNoVGFibGVDb2xvcnMpLGM9bmV3IEFycmF5KHIubGVuZ3RoKSx1PUcyLGw9VjIsbT1IMixoPUxzLm1pbixiPUxzLm1heCxwPW4ubWluaW11bUhlaWdodHMseT1uLm1heGltdW1IZWlnaHRzO2cocCkmJmcoeSkmJihwPW5ldyBGbG9hdDMyQXJyYXkocCkseT1uZXcgRmxvYXQzMkFycmF5KHkpKTtsZXQgVCxfLHcsRT1hLmxlbmd0aC8yLFI9YS5zdWJhcnJheSgwLEUpLFM9YS5zdWJhcnJheShFLDIqRSk7anQuemlnWmFnRGVsdGFEZWNvZGUoUixTKTtsZXQgQz1uZXcgRmxvYXQ2NEFycmF5KEUqMyk7Zm9yKFQ9MDtUPEU7KytUKXtsZXQgY2U9UltUXSxtZT1TW1RdLGRlPWsubGVycChtLndlc3QsbS5lYXN0LGNlL2oyKSx5ZT1rLmxlcnAobS5zb3V0aCxtLm5vcnRoLG1lL2oyKSxsZT1hZS5mcm9tUmFkaWFucyhkZSx5ZSwwLHoyKSxlZT1sLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGxlLEwyKTtzLnBhY2soZWUsQyxUKjMpfWxldCBJPXIubGVuZ3RoLE09bmV3IEFycmF5KEkpLFA9bmV3IEFycmF5KEkpLEY9MCxBPTA7Zm9yKFQ9MDtUPEk7KytUKU1bVF09RixQW1RdPUEsRis9cltUXSxBKz1pW1RdO2xldCB4PW5ldyBGbG9hdDMyQXJyYXkoRSozKjIpLE49bmV3IFVpbnQxNkFycmF5KEUqMiksdj1uZXcgVWludDMyQXJyYXkoUC5sZW5ndGgpLFU9bmV3IFVpbnQzMkFycmF5KGkubGVuZ3RoKSxMPVtdLEQ9e307Zm9yKFQ9MDtUPEk7KytUKXc9ZFtUXSxnKERbd10pPyhEW3ddLnBvc2l0aW9uTGVuZ3RoKz1yW1RdLERbd10uaW5kZXhMZW5ndGgrPWlbVF0sRFt3XS5iYXRjaElkcy5wdXNoKFQpKTpEW3ddPXtwb3NpdGlvbkxlbmd0aDpyW1RdLGluZGV4TGVuZ3RoOmlbVF0sb2Zmc2V0OjAsaW5kZXhPZmZzZXQ6MCxiYXRjaElkczpbVF19O2xldCBHLFY9MCxPPTA7Zm9yKHcgaW4gRClpZihELmhhc093blByb3BlcnR5KHcpKXtHPURbd10sRy5vZmZzZXQ9VixHLmluZGV4T2Zmc2V0PU87bGV0IGNlPUcucG9zaXRpb25MZW5ndGgqMixtZT1HLmluZGV4TGVuZ3RoKjIrRy5wb3NpdGlvbkxlbmd0aCo2O1YrPWNlLE8rPW1lLEcuaW5kZXhMZW5ndGg9bWV9bGV0IEo9W107Zm9yKHcgaW4gRClELmhhc093blByb3BlcnR5KHcpJiYoRz1EW3ddLEoucHVzaCh7Y29sb3I6SmUuZnJvbVJnYmEocGFyc2VJbnQodykpLG9mZnNldDpHLmluZGV4T2Zmc2V0LGNvdW50OkcuaW5kZXhMZW5ndGgsYmF0Y2hJZHM6Ry5iYXRjaElkc30pKTtmb3IoVD0wO1Q8STsrK1Qpe3c9ZFtUXSxHPURbd107bGV0IGNlPUcub2Zmc2V0LG1lPWNlKjMsZGU9Y2UseWU9TVtUXSxsZT1yW1RdLGVlPWZbVF0sRWU9aCxDZT1iO2cocCkmJmcoeSkmJihFZT1wW1RdLENlPXlbVF0pO2xldCBXZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksemU9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFplPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxLZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKF89MDtfPGxlOysrXyl7bGV0IHFlPXMudW5wYWNrKEMseWUqMytfKjMsTDIpO2wuc2NhbGVUb0dlb2RldGljU3VyZmFjZShxZSxxZSk7bGV0IGF0PWwuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocWUsejIpLHh0PWF0LmxhdGl0dWRlLFR0PWF0LmxvbmdpdHVkZTtXZT1NYXRoLm1pbih4dCxXZSksemU9TWF0aC5tYXgoeHQsemUpLFplPU1hdGgubWluKFR0LFplKSxLZT1NYXRoLm1heChUdCxLZSk7bGV0IGN0PWwuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHFlLFRVKSx6dD1zLm11bHRpcGx5QnlTY2FsYXIoY3QsRWUsRVUpLE90PXMuYWRkKHFlLHp0LFJVKTt6dD1zLm11bHRpcGx5QnlTY2FsYXIoY3QsQ2UsenQpO2xldCBrdD1zLmFkZChxZSx6dCx4VSk7cy5zdWJ0cmFjdChrdCx1LGt0KSxzLnN1YnRyYWN0KE90LHUsT3QpLHMucGFjayhrdCx4LG1lKSxzLnBhY2soT3QseCxtZSszKSxOW2RlXT1lZSxOW2RlKzFdPWVlLG1lKz02LGRlKz0yfW09T1UsbS53ZXN0PVplLG0uZWFzdD1LZSxtLnNvdXRoPVdlLG0ubm9ydGg9emUsY1tUXT1tbi5mcm9tUmVjdGFuZ2xlKG0saCxiLGwpO2xldCBEZT1HLmluZGV4T2Zmc2V0LEJlPVBbVF0sZXQ9aVtUXTtmb3IodltUXT1EZSxfPTA7XzxldDtfKz0zKXtsZXQgcWU9dFtCZStfXS15ZSxhdD10W0JlK18rMV0teWUseHQ9dFtCZStfKzJdLXllO0xbRGUrK109cWUqMitjZSxMW0RlKytdPWF0KjIrY2UsTFtEZSsrXT14dCoyK2NlLExbRGUrK109eHQqMisxK2NlLExbRGUrK109YXQqMisxK2NlLExbRGUrK109cWUqMisxK2NlfWZvcihfPTA7XzxsZTsrK18pe2xldCBxZT1fLGF0PShfKzEpJWxlO0xbRGUrK109cWUqMisxK2NlLExbRGUrK109YXQqMitjZSxMW0RlKytdPXFlKjIrY2UsTFtEZSsrXT1xZSoyKzErY2UsTFtEZSsrXT1hdCoyKzErY2UsTFtEZSsrXT1hdCoyK2NlfUcub2Zmc2V0Kz1sZSoyLEcuaW5kZXhPZmZzZXQ9RGUsVVtUXT1EZS12W1RdfUw9SWUuY3JlYXRlVHlwZWRBcnJheSh4Lmxlbmd0aC8zLEwpO2xldCByZT1KLmxlbmd0aDtmb3IobGV0IGNlPTA7Y2U8cmU7KytjZSl7bGV0IG1lPUpbY2VdLmJhdGNoSWRzLGRlPTAseWU9bWUubGVuZ3RoO2ZvcihsZXQgbGU9MDtsZTx5ZTsrK2xlKWRlKz1VW21lW2xlXV07SltjZV0uY291bnQ9ZGV9bGV0IHNlPUwuQllURVNfUEVSX0VMRU1FTlQ9PT0yP0llLlVOU0lHTkVEX1NIT1JUOkllLlVOU0lHTkVEX0lOVCxvZT13VShzZSxjLEopO3JldHVybiBlLnB1c2goeC5idWZmZXIsTC5idWZmZXIsdi5idWZmZXIsVS5idWZmZXIsTi5idWZmZXIsb2UuYnVmZmVyKSx7cG9zaXRpb25zOnguYnVmZmVyLGluZGljZXM6TC5idWZmZXIsaW5kZXhPZmZzZXRzOnYuYnVmZmVyLGluZGV4Q291bnRzOlUuYnVmZmVyLGJhdGNoSWRzOk4uYnVmZmVyLHBhY2tlZEJ1ZmZlcjpvZS5idWZmZXJ9fXZhciBHMixWMixIMixMcyxqMixMMixUVSxFVSxSVSx4VSx6MixPVSxDVSxNXz1YKCgpPT57QnIoKTtNZSgpO2d0KCk7a3MoKTtmZSgpO1ZlKCk7WnQoKTtqZSgpO0FpKCk7aG4oKTtrbigpO0cyPW5ldyBzLFYyPW5ldyBLLEgyPW5ldyB4ZSxMcz17bWluOnZvaWQgMCxtYXg6dm9pZCAwLGluZGV4Qnl0ZXNQZXJFbGVtZW50OnZvaWQgMH07ajI9MzI3NjcsTDI9bmV3IHMsVFU9bmV3IHMsRVU9bmV3IHMsUlU9bmV3IHMseFU9bmV3IHMsejI9bmV3IGFlLE9VPW5ldyB4ZTtDVT1tdChTVSl9KTtmdW5jdGlvbiBJVShuLGUsdCxvLGEpe2xldCByPW4ubGVuZ3RoLzMsaT1uLnN1YmFycmF5KDAsciksZj1uLnN1YmFycmF5KHIsMipyKSxkPW4uc3ViYXJyYXkoMipyLDMqcik7anQuemlnWmFnRGVsdGFEZWNvZGUoaSxmLGQpO2xldCBjPW5ldyBGbG9hdDY0QXJyYXkobi5sZW5ndGgpO2ZvcihsZXQgdT0wO3U8cjsrK3Upe2xldCBsPWlbdV0sbT1mW3VdLGg9ZFt1XSxiPWsubGVycChlLndlc3QsZS5lYXN0LGwvTl8pLHA9ay5sZXJwKGUuc291dGgsZS5ub3J0aCxtL05fKSx5PWsubGVycCh0LG8saC9OXyksVD1hZS5mcm9tUmFkaWFucyhiLHAseSxNVSksXz1hLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFQsTlUpO3MucGFjayhfLGMsdSozKX1yZXR1cm4gY312YXIgTl8sTVUsTlUsSzIscTI9WCgoKT0+e0JyKCk7TWUoKTtndCgpO2plKCk7Tl89MzI3NjcsTVU9bmV3IGFlLE5VPW5ldyBzO0syPUlVfSk7dmFyIElfPXt9OyRlKElfLHtkZWZhdWx0OigpPT5EVX0pO2Z1bmN0aW9uIFBVKG4pe249bmV3IEZsb2F0NjRBcnJheShuKTtsZXQgZT0wO25tLm1pbj1uW2UrK10sbm0ubWF4PW5bZSsrXSx4ZS51bnBhY2sobixlLFoyKSxlKz14ZS5wYWNrZWRMZW5ndGgsSy51bnBhY2sobixlLFEyKSxlKz1LLnBhY2tlZExlbmd0aCxzLnVucGFjayhuLGUsJDIpfWZ1bmN0aW9uIGtVKG4pe2xldCBlPW4ubGVuZ3RoLHQ9bmV3IFVpbnQzMkFycmF5KGUrMSksbz0wO2ZvcihsZXQgYT0wO2E8ZTsrK2EpdFthXT1vLG8rPW5bYV07cmV0dXJuIHRbZV09byx0fWZ1bmN0aW9uIEZVKG4sZSl7bGV0IHQ9bmV3IFVpbnQxNkFycmF5KG4ucG9zaXRpb25zKSxvPW5ldyBVaW50MTZBcnJheShuLndpZHRocyksYT1uZXcgVWludDMyQXJyYXkobi5jb3VudHMpLHI9bmV3IFVpbnQxNkFycmF5KG4uYmF0Y2hJZHMpO1BVKG4ucGFja2VkQnVmZmVyKTtsZXQgaT1aMixmPVEyLGQ9JDIsYz1ubS5taW4sdT1ubS5tYXgsbD1LMih0LGksYyx1LGYpLG09bC5sZW5ndGgvMyxoPW0qNC00LGI9bmV3IEZsb2F0MzJBcnJheShoKjMpLHA9bmV3IEZsb2F0MzJBcnJheShoKjMpLHk9bmV3IEZsb2F0MzJBcnJheShoKjMpLFQ9bmV3IEZsb2F0MzJBcnJheShoKjIpLF89bmV3IFVpbnQxNkFycmF5KGgpLHc9MCxFPTAsUj0wLFMsQz0wLEk9YS5sZW5ndGg7Zm9yKFM9MDtTPEk7KytTKXtsZXQgeD1hW1NdLE49b1tTXSx2PXJbU107Zm9yKGxldCBVPTA7VTx4OysrVSl7bGV0IEw7aWYoVT09PTApe2xldCBKPXMudW5wYWNrKGwsQyozLFcyKSxyZT1zLnVucGFjayhsLChDKzEpKjMsWDIpO0w9cy5zdWJ0cmFjdChKLHJlLFkyKSxzLmFkZChKLEwsTCl9ZWxzZSBMPXMudW5wYWNrKGwsKEMrVS0xKSozLFkyKTtsZXQgRD1zLnVucGFjayhsLChDK1UpKjMsdlUpLEc7aWYoVT09PXgtMSl7bGV0IEo9cy51bnBhY2sobCwoQyt4LTEpKjMsVzIpLHJlPXMudW5wYWNrKGwsKEMreC0yKSozLFgyKTtHPXMuc3VidHJhY3QoSixyZSxKMikscy5hZGQoSixHLEcpfWVsc2UgRz1zLnVucGFjayhsLChDK1UrMSkqMyxKMik7cy5zdWJ0cmFjdChMLGQsTCkscy5zdWJ0cmFjdChELGQsRCkscy5zdWJ0cmFjdChHLGQsRyk7bGV0IFY9VT09PTA/MjowLE89VT09PXgtMT8yOjQ7Zm9yKGxldCBKPVY7SjxPOysrSil7cy5wYWNrKEQsYix3KSxzLnBhY2soTCxwLHcpLHMucGFjayhHLHksdyksdys9MztsZXQgcmU9Si0yPDA/LTE6MTtUW0UrK109MiooSiUyKS0xLFRbRSsrXT1yZSpOLF9bUisrXT12fX1DKz14fWxldCBNPUllLmNyZWF0ZVR5cGVkQXJyYXkoaCxtKjYtNiksUD0wLEY9MDtmb3IoST1tLTEsUz0wO1M8STsrK1MpTVtGKytdPVAsTVtGKytdPVArMixNW0YrK109UCsxLE1bRisrXT1QKzEsTVtGKytdPVArMixNW0YrK109UCszLFArPTQ7ZS5wdXNoKGIuYnVmZmVyLHAuYnVmZmVyLHkuYnVmZmVyKSxlLnB1c2goVC5idWZmZXIsXy5idWZmZXIsTS5idWZmZXIpO2xldCBBPXtpbmRleERhdGF0eXBlOk0uQllURVNfUEVSX0VMRU1FTlQ9PT0yP0llLlVOU0lHTkVEX1NIT1JUOkllLlVOU0lHTkVEX0lOVCxjdXJyZW50UG9zaXRpb25zOmIuYnVmZmVyLHByZXZpb3VzUG9zaXRpb25zOnAuYnVmZmVyLG5leHRQb3NpdGlvbnM6eS5idWZmZXIsZXhwYW5kQW5kV2lkdGg6VC5idWZmZXIsYmF0Y2hJZHM6Xy5idWZmZXIsaW5kaWNlczpNLmJ1ZmZlcn07aWYobi5rZWVwRGVjb2RlZFBvc2l0aW9ucyl7bGV0IHg9a1UoYSk7ZS5wdXNoKGwuYnVmZmVyLHguYnVmZmVyKSxBPV9hKEEse2RlY29kZWRQb3NpdGlvbnM6bC5idWZmZXIsZGVjb2RlZFBvc2l0aW9uT2Zmc2V0czp4LmJ1ZmZlcn0pfXJldHVybiBBfXZhciBaMixRMiwkMixubSxXMixYMixZMix2VSxKMixEVSxQXz1YKCgpPT57TWUoKTtnbCgpO3EyKCk7VmUoKTtadCgpO2huKCk7a24oKTtaMj1uZXcgeGUsUTI9bmV3IEssJDI9bmV3IHMsbm09e21pbjp2b2lkIDAsbWF4OnZvaWQgMH07VzI9bmV3IHMsWDI9bmV3IHMsWTI9bmV3IHMsdlU9bmV3IHMsSjI9bmV3IHM7RFU9bXQoRlUpfSk7dmFyIElzZSxleD1YKCgpPT57SXNlPShmdW5jdGlvbigpe3ZhciBuPSJiOUg3OVRlYmJiZTlvazlHZXVldTlHZXViOUdiYjlHcnV1dXV1dXVldTlHdnV1dXV1ZXU5R2R1dWV1OUdsdXV1dWV1OUd2dXV1dXViOUdvdXV1dXV1YjlHbHV1dXViOUdpdXV1ZXVpRThBZGlsdmVvdmVvdnJyd3JyckREb0RyYnFxYmVsdmU5V2VpaXZpZWJlb3dldWVjajpHZGtyOlBsQ285VFc5VDlWVjk1ZGJIOUY5RjkzOUg3OVQ5RjlKOUgyMjlGOUp0OVZWN2JiOEY5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OWM5MTlNOU1XVjltVzRXMmJlOEE5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OWM5MTlNOU1XVmJkOEY5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OWM5MTlNOU1XVjljOVY5MTlVOUtiaUU5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzl3V1Z0Vzk0OXdXVjc5UDlWOVVibFk5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzY5VTlLVzk0OWM5MTlNOU1XVmJ2OEU5VFc3OU85VjlXdDlGVzlVOUo5VjlLVzY5VTlLVzk0OWM5MTlNOU1XVjljOVY5MTlVOUtibzhBOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1c2OVU5S1c5NDl3V1Y3OVA5VjlVYnJFOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1c2OVU5S1c5NDl0V0c5MVc5VTlKV2J3YTlUVzc5TzlWOVd0OUZXOVU5SjlWOUtXNjlVOUtXOTQ5dFdHOTFXOVU5Slc5YzlWOTE5VTlLYkRMOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1dTOVAydFdWOXA5SnRicUs5VFc3OU85VjlXdDlGVzlVOUo5VjlLV1M5UDJ0V1Y5cjkxOUh0YmtMOVRXNzlPOVY5V3Q5Rlc5VTlKOVY5S1dTOVAydFdWVDk0OVdieFk5VFc3OU85VjlXdDlGVzlVOUo5VjlLV1M5UDJ0V1ZKOVYyOVZWYm1FOVRXNzlPOVY5V3Q5RjlWOVd0OVA5VDlQOTZXOXdXVnRXOTRKOUg5SjlPV2J6YTlUVzc5TzlWOVd0OUY5VjlXdDlQOVQ5UDk2Vzl3V1Z0Vzk0SjlIOUo5T1c5dHRWOVA5V2JIYTlUVzc5TzlWOVd0OUY5VjlXdDlQOVQ5UDk2Vzl3V1Z0Vzk0U1d0OUo5TzlzVzlUOUg5V2JPSzlUVzc5TzlWOVd0OUY3OVc5SHQ5UDlIMjl0OVZWdDlzVzlUOUg5V2JBbDc5SVY5UmJYRHdlYmNla2RLWXE6emY4QWRiazt3YWRodWQ5OjhKampqamJjO3F3OVJncjhLampqamJjYmh3ZG5hZVRtYmFiY2J5ZDtpOkk6Y2piYW9hb2NiOWlFZ0RjOkdlVjg2YmJhcmM7YWRmY2JjamR6OnhqampiOEFkbmFpVG1iYXJjO2FkZmFkYWx6OndqampiOEFrYXJjO2FiZmFsZmNiY2JjamRhbDlSYWxjRmUwRXo6eGpqamI4QWFyYzthYmZhcmM7YWRmYWx6OndqampiOEFhcjljYjgzaVVhcjljYjgzaThXYXI5Y2I4M2l5YXI5Y2I4M2lhYXI5Y2I4M2lLYXI5Y2I4M2l6YXI5Y2I4M2l3YXI5Y2I4M2liY2o7YWJhbDlVYztXRmJHY2pkYWxjYTBFaHFkbmFpY2Q2bWJhdmNkOWltYmFEVG1iYWRjZWZoa2FxY2kyZ3hhbDJobWFyYzthbGZjbGZoUGFyYztxbGZjZVZoc2FyYztxb2ZjbFZoemNiaEhpbmNkaE9jYmhBZG5hdmNpNm1iYXI5Y2I4M2k7T29hcjljYjgzaTtHb2FyOWNiODNpO3lvYXI5Y2I4M2k7cW9hZGFIZmdveWJiaENjYmhYaW5jYmh3Y2JoUWRuaW5hb2FsZmhMYW95YmJnS2FDN2FRVmhRYXdjUDBtZWFMaG9hS2hDYXdjZWZnd2FYZmFpNm1ia2tjYmhDYXJjO3FvZmh3aW5jd2hZY3doOEFkbmFRYUM5M2dvY0ZlR2dFY3MwbWJjbGg4QWFFY2kwbWJjZGNiYUVFaDhBa2RuYW9jdzRjRmVHZ0VjczBtYmNsaFlhRWNpMG1iY2RjYmFFRWhZa2FZYThBZmhFYXd5ZGJoM2N3aFljd2g4QWRuYW9jejRjRmVHZzVjczBtYmNsaDhBYTVjaTBtYmNkY2JhNUVoOEFrYUVhM2ZoRWRuYW9jRkZGRmIwbWJjbGhZYW9jRkZGOEYwbWJjYmNkYW9jampqdzZFaFlrYXdhRWE4QWZhWWZCZGJhd2NsZmh3YUNjZWZnQ2N3OWhtYmthTGhvYUtoQ2FYY3pmZ1hhaTZtYmtjYmhvY2Vod2F6aFFpbmF3YW9hUXlkYmFyYztxb2Zhb2NkdGZ5ZGI2RWhvYVFjbGZoUWF3Y2VmZ3djdzlobWJrYW9jbHRoQWNpaE9rY2JoRWFyYztxbGZjYmNqZHo6eGpqamI4QWFyY2JCZDtpbGFyOWNiODNpO2FsYWRoOEVhcWg4RmFraDNpbmFyYztxbGZhZGFFYUVjYjloOVJhbDJmYWx6OndqampiOEFhaWE4RmFpYThGNkVoYWRuYXFhaWFFOVJhRWFxZmFpNkVnS2NzZmM5V0dnb2FLOW5tYmFyYztxb2ZhS2ZjYmFvYUs5Uno6eGpqamI4QWthZGFFYWwyZmhoY2JoZ2luYWdhQVZjbDRoWGFyYzthbGZhZ2NkdGZoOEphSGg4S2NiaDhMaW5hOExhSGZod2RuZG5kbmRuZG5kbmRuYWdQbGJlZGlia2FLVG12YWhhd2Zob2FyYztxbGZhd2ZSYmJoUWFyYztxb2Zod2FhaENpbmF3YW9SYmJnWWFROVJnUWNldGFRY0t0YzhGOTE3ODZiYmF3Y2VmaHdhb2FsZmhvYVloUWFFYUNjdWZnQzlobWJ4dmtrYUtUbWxhOEtjOTpHaG9hOExjaXRjd0doOEFhcmM7cWxmYXdjZVZmUmJiY3d0YXJjO3FsZmF3Yzk6R2ZSYmJWaFFhcmM7cW9maHdhYWhDaW5hd2EzYW9mUmJiY3d0YThFYW9mUmJiVmdZYVE5UmdRY2V0YVFjenRjOEY5MTdjRkZpR2E4QTQ4NmJiYW9hbGZob2F3Y2VmaHdhWWhRYUVhQ2N1ZmdDOWhtYnhsa2thc2E4S2M5OEdnUWZob2EzYVFmaFlhcmM7cWxmYXdjOThHZ1FmUmJiaENjd2h3aW5hb1JiYmF3dGFDVmhDYW9jZWZob2F3Y3dmZ3djYTlobWJ4ZGtrYUtUbWR4ZWthS1RtZWE4TGNpdGg1YWhhUWZoOEFjYmhMaW5hOEFSYmJoUWN3aG9hWWh3aW5hd1JiYmFvdGFRVmhRYXdjZWZod2FvY3dmZ29jYTlobWJrYXJjO3FvZmFMZmFRYUM3YVg5M2E1NDg2YmJhWWFsZmhZYThBYWxmaDhBYVFoQ2FMY2VmZ0xhSzlobWJra2E4SnlkYmg4QWNiaExhcmM7cW9maG9pbmNkaFFjYmh3aW5hUWFvYXdmUmJiY2I5aGZoUWF3Y2VmZ3djejlobWJrY2xoQ2NiaHdpbmFDYW9hd2ZSYmJjZDBmaENhd2NlZmd3Y3o5aG1ia2N3aFljYmh3aW5hWWFvYXdmUmJiY1AwZmhZYXdjZWZnd2N6OWhtYmthUWFDYVFhQzZFZ3dhWWF3YVk2RWd3Y3phd2N6NkVhOEFmaDhBYW9jemZob2FMY3pmZ0xhSzZtYmthOEphOEFCZGJrYThLY2VmaDhLYThMY2VmZzhMY2w5aG1ia2FnY2VmZ2dhTzlobWJrYThFYW1maDhFYThGYXhmaDhGYTNhbWZoM2FFYXhmZ0VhaTZtYmtjYmhvY2Vod2FQaFFpbmF3YW9hUXlkYmFyYzthbGZhb2NkdGZ5ZGI2RWhvYVFjbGZoUWFPYXdjZWZndzlobWJrYXJhSGNkNGZhQWNkVmFvYW9jZFNFODZiYmFIY2xmZ0hhbDZtYmtrYWJhZWZoZ2FiY2VmaG9hbGNkNGc4TWNiYURFaGthZGNlZmg4TmFyYzthYmZjZVZoZWNiaG1kbmRuaW5haWFtOW5tZWFyYztxb2ZjYmNqZHo6eGpqamI4QWFnYW85UmFrNm1kYWRhbWFsMmd3Zmh4Y2JoSGE4TmF3Zmh6YW9jYmFrejp4ampqYmc4RmFrZmgzYXFhaWFtOVJhbWFxZmFpNkVnc2NzZmdvY2w0Y2lmY2Q0aE9hb2M5V0dnOEpUaFBpbmRuZG5kbmRuZG5kbmRuZG5kbmRuYURUbWJhcmFIY2Q0ZlJiYmdRY2lHUGxiZWRsYmthc1RtZGF4YUhmaG9hcmM7YWJmYUhmUmJiaFFhcmM7cW9maHdhc2hDaW5hd2FvUmJiZ1lhUTlSZ1FjZXRhUWNLdGM4RjkxNzg2YmJhd2NlZmh3YW9hbGZob2FZaFFhQ2N1ZmdDbWJ4aWtrYXNUbWlhSGNpdGN3R2g4QWFyYzthYmZhSGNlVmZSYmJjd3RhcmM7YWJmYUhjOTpHZ29mUmJiVmhRYXhhb2Zob2FyYztxb2Zod2FzaENpbmF3YW84VmJiZ1lhUTlSZ1FjZXRhUWN6dGM4RjkxN2NGRmlHYThBNDg2YmJhd2NlZmh3YW9hbGZob2FZaFFhQ2N1ZmdDbWJ4aWtrYWVhSGM5OEdnOEFmaG9hemE4QWZoWWFyYzthYmZhOEFmUmJiaENjd2h3aW5hb1JiYmF3dGFDVmhDYW9jZWZob2F3Y3dmZ3djYTlobWJrYXNUbWRhUWNsNGhLYUhjaXRjS0doRWF4YThBZmg4QWNiaExpbmE4QVJiYmhRY3dob2FZaHdpbmF3UmJiYW90YVFWaFFhd2NlZmh3YW9jd2Znb2NhOWhtYmthcmM7cW9mYUxmYVFhQzdhSzkzYUU0ODZiYmFZYWxmaFlhOEFhbGZoOEFhUWhDYUxjZWZnTGFzOWhtYmtrYURtYmNiaG94bGthOEpUbWJjYmhvZG5pbmFyYztxb2Zhb2Znd2N3ZjhQaWJhdzhQaWI6ZTlxVG1lYW9jemZnb2E4SjlwbWR4YmtrZG5hdm1iY2Vob3hpa2NiaDhBYU9oTGFPaEtpbmFyYztxb2ZhOEFmZ29jd2Y4UGliaHlhbzhQaWJoOFBjZGhRY2Jod2luYVFhb2F3ZlJiYmNiOWhmaFFhd2NlZmd3Y3o5aG1ia2NsaENjYmh3aW5hQ2FvYXdmUmJiY2QwZmhDYXdjZWZnd2N6OWhtYmtjd2hZY2Jod2luYVlhb2F3ZlJiYmNQMGZoWWF3Y2VmZ3djejlobWJrYVFhQ2FRYUM2RWdvYVlhb2FZNkVnb2N6YW9jejZFYUtmaEthb2N1Y2JheWE4UDplOWNiOXNFZ3dhb2F3NkVhTGZoTGE4QWN6Zmc4QWE4SjlwbWR4YmtrYThGYUhjZDRmZ29hb1JiYmNkYUhjZXRjb0d0Vjg2YmJ4aWtkbmFMYXM2bWJhS2FzNm1iYThGYUhjZDRmZ29hb1JiYmNpYUhjZXRjb0d0Vjg2YmJhZ2EzOVJhczZtcmEzYXJjO3FvZmFzejp3ampqYmFzZmgzeGlrYUxhSzlwaG9rYThGYUhjZDRmZ3dhd1JiYmFvYUhjZXRjb0d0Vjg2YmJrYWdhMzlSYU82bWxhM2NiYU96OnhqampiZ2FhT2ZoS2RuZG5hOEptYmFQaG94ZWtkbmFnYUs5UmNLOXBtYmFQaG94ZWthb2NkdGM6cTpHOmNqYmZjajpHOmNqYmFERWczeWR4Z2hjZXRjOzpGRkZlR2hBY3VoRWN1YWh0Y3U3Y0ZlR2g4RWNiaDhLYXJjO3FvZmhRaW5hcmM7cW9mYThLZmhYY3poOEFkbmRuZG5haFBEYmVlZWVlZWVkZWtjdWNiYVhjd2Y4UGliYVg4UGliOmU5Y2I5c0VoOEF4ZWtjYmhvYUFoOEFpbmE4QWE4RWFRYW9mUmJiOW5maDhBYW9jZWZnb2N6OWhtYmtrY2loNWNiaFlpbmN6aHdkbmRuZG5hM2FZY2R0ZnlkYmdMUERiZWVlZWVlZWRla2N1Y2JhWGN3ZjhQaWJhWDhQaWI6ZTljYjlzRWh3eGVrYUxjZXRjOzpGRkZlR2h3Y3VhTHRjdTdjRmVHaENjYmhvaW5hd2FDYVFhb2ZSYmI5bmZod2FvY2VmZ29jejlobWJra2RuZG5hd2E4QTZtYmFMYUU5aG1lYXdhOEE5aG1lYTNhNWNkdGZ5ZGJjd1NtZWthWWg1YXdoOEFrYVljZWZnWWNpOWhtYmthYWE4S2NvNGZnb2FvUmJiYTVhOEtjaTRjb0d0Vjg2YmJkbmRuZG5hM2E1Y2R0ZnlkYmdFUERkYmJiYmJiYmVia2RuY3dhRTlUZzVUbWJjdWFFdGN1N2h3ZG5kbmFFY2VTbWJjYmg4TGFRaFhpbmFYaG9hNWhZY2JoQ2luYW9SYmJnOEFhd2NGZUdnTGE4QWFMNkVhQ2FFdFZoQ2FvY2VmaG9hWWN1ZmdZbWJrYUthQzg2YmJhWGE1ZmhYYUtjZWZoS2E4TGE1Zmc4TGN6Nm1ieGRra2NiaDhMYVFoWGluYVhob2E1aFljYmhDaW5hb1JiYmc4QWF3Y0ZlR2dMYThBYUw2RWFDY2V0VmhDYW9jZWZob2FZY3VmZ1ltYmthS2FDOlQ5Y0ZlOmQ5YzpjOnFqOmJ3OTo5YzpxO2MxOkkxZTpkOWM6YjpjOmUxejk6OWNhMTg4YmJhWGE1ZmhYYUtjZWZoS2E4TGE1Zmc4TGN6Nm1ia2tjYmhvaW5hS2FRYW9mUmJiZ0M4NmJiYUthQ2F3Y0ZlRzlwZmhLYW9jZWZnb2N6OWhtYnhpa2tkbmFFY2VTbWJpbmFLY2I4NmJiYUtjZWZoS3hia2tpbmFLY2I4NmJiYUtjZWZoS3hia2thS2FYOFBidzgzYndhS2FYOFBiYjgzYmJhS2N6ZmhLa2E4S2N6Zmc4S2E4SjlwZ29tZWFRY3pmaFFhZ2FLOVJjSzlwbWJra2FvVG1sYUtoM2FLVG1sa2FIY2VmZ0hhbDlobWJrYXJjO2FiZmF4YXNjdWZhbDJmYWx6OndqampiOEFhc2FtZmhtYTNob2EzbWJrY2Jod3hka2RuYWdhbzlSYWthbGZnd2NLY2FhREVnUWF3YVEwRWdDOXBtYmNiaHd4ZGtkbmF3YVE5cG1iYW9jYmFDYXc5Umd3ejp4ampqYmF3Zmhva2FvYXJjO2FkZmFsejp3ampqYmFsZmhvZG5hRFRtYmFvYXJhOE16OndqampiYThNZmhva2FvYWI5Umh3eGVrY2Jod2thcmM7cXdmOEtqampqYmF3azViYWJhZWFkYWlhbGNkY2J5ZDtpOkk6Y2piejpiampqYms5cmVkdWFlY2Q0Z2RhZWZnaWNhYWljYTBFYWJjajthYmFlOVVjO1dGYkdjamRhZWNhMEVnaWZjdWZhaTlVYWUyYWlhZGZhaWNsNGNpZmNkNGYyZmNlZmttYmNiYWJCZDtpOkk6Y2piaztIUGVMdThKampqamJjO2FlOVJnbDhLampqamJjYmh2ZG5hZWFpY2k5VWdvY0hmNm1iYWJjYnlkO206STpjamJncmM7R2VWODZiYmFsYzthYmZjRmVjamV6OnhqampiOEFhbDljdTgzaVVhbDljdTgzaThXYWw5Y3U4M2l5YWw5Y3U4M2lhYWw5Y3U4M2lLYWw5Y3U4M2l6YWw5Y3U4M2l3YWw5Y3U4M2liYWJhZWZjOVdmaHdhYmNlZmdEYW9maGVkbmFpVG1iY21jc2FyY2I5a2dxRWhrY2JoeGNiaG1jYmhQY2Joc2NiaHppbmRuYWVhdzlubWJjYmh2eGlrYXpjdWZodmFkYVBjZHRmZ0h5ZGJoT2FIY3dmeWRiaEFhSGNsZnlkYmhDY2JoWGRuZG5kbmluYWxjO2FiZmF2Y3NHY2l0ZmdveWRsaFFkbmRuZG5hb3lkYmdvYU85aG1iYVFhQ1NtZWtkbmFvYUM5aG1iYVFhQTlobWJhWGNlZmhYeGVrYW9hQTlobWVhUWFPOWhtZWFYY2RmaFhrYVhjODcwbWRhc2N1Zmh2YUhhWGNkdGdBY3hHZ295ZDo0Okc6Y2piY2R0ZnlkYmhRYUhhb3lkOjA6RzpjamJjZHRmeWRiaENhSGFveWQ6VzpHOmNqYmNkdGZ5ZGJoT2NiaG9kbmluZG5hbGF2Y3NHY2R0ZnlkYmFROWhtYmFvaFh4ZGtjdWhYYXZjdWZodmFvY2VmZ29jejlobWJra2F4YVFheFNndmFYY2U5aWFYYWs5b1Znb0dmaHhkbmRuZG5jYmNzYXZFYVhhb0VndmNzOWhtYmFyY2U5aW1iYVFhUWFtYVFjZWZhbVNndkVnbWNlZlNtZWNtY3NhdkVodmthRGF2YUFjO1dlR1Y4NmJiYXZjczlobWVhUWFtOVJndmNldGF2YzhGOTE3aHZpbmFlY2JjamVhdmNqZTZFYXZjRmJHVjg2YmJhZWNlZmhlYXZjcjRndm1ia2FRaG14dmtjUGh2YURhQWNQVjg2YmJhUWhta2F2VG1pYXZhazlvbWljZGhvY2VoWGF6aEF4bGthdmN1Zmh2YVhjbGZnWGM7YWI5aG1ia2tkbmFIY2VjZGNiYUFheFNFYUNheFNFY2R0Z3Z5ZDpXOkc6Y2piY2R0ZnlkYmdPVGFIYXZ5ZDowOkc6Y2piY2R0ZnlkYmdDY2VTR2FIYXZ5ZDo0Okc6Y2piY2R0ZnlkYmdRY2RTR2F4Y2I5aEdhcUdnTGNlOWhtYmFsOWN1ODNpVWFsOWN1ODNpOFdhbDljdTgzaXlhbDljdTgzaWFhbDljdTgzaUthbDljdTgzaXphbDljdTgzaXdhbDljdTgzaWJjYmh4a2NiaFhhc2N1Zmd2aG9kbmluZG5hbGFvY3NHY2R0ZnlkYmFDOWhtYmFYaEF4ZGtjdWhBYW9jdWZob2FYY2VmZ1hjejlobWJra2NiaG9kbmluZG5hbGF2Y3NHY2R0ZnlkYmFROWhtYmFvaFh4ZGtjdWhYYXZjdWZodmFvY2VmZ29jejlobWJra2F4YU9heFNnS2ZoSGRuZG5hQWNtMG1iYUFjZWZoQXhla2NiY3NhQ2FIU2d2RWhBYUhhdmZoSGtkbmRuYVhjbTBtYmFYY2VmaFh4ZWtjYmNzYVFhSFNndkVoWGFIYXZmaEhrYzk6Y3VhS0VoWWNiaHZhWGFBY2x0Vmc4QWNGZUdob2RuZG5kbmluYXZjO3E6RzpjamJmUmJiYW9TbWVhdmNlZmd2Y3o5aG1ieGRra2FMYU9heDloYXZjbTBWVm1iYURhdmM7V2VWODZiYnhla2FEYVk4NmJiYWVhOEE4NmJiYWVjZWZoZWtkbmFLbWJhT2FtOVJndmNldGF2YzhGOTE3aHZpbmFlY2JjamVhdmNqZTZFYXZjRmJHVjg2YmJhZWNlZmhlYXZjcjRndm1ia2FPaG1rZG5hQWNzOWhtYmFDYW05Umd2Y2V0YXZjOEY5MTdodmluYWVjYmNqZWF2Y2plNkVhdmNGYkdWODZiYmFlY2VmaGVhdmNyNGd2bWJrYUNobWtkbmFYY3M5aG1iYVFhbTlSZ3ZjZXRhdmM4RjkxN2h2aW5hZWNiY2plYXZjamU2RWF2Y0ZiR1Y4NmJiYWVjZWZoZWF2Y3I0Z3ZtYmthUWhta2FsYXNjZHRmYU9CZGJhc2NlZmNzR2h2ZG5kbmFBUHpiZWVlZWVlZWVlZWVlZWViZWthbGF2Y2R0ZmFDQmRiYXNjZGZjc0dodmtkbmRuYVhQemJlZWVlZWVlZWVlZWVlZWJla2FsYXZjZHRmYVFCZGJhdmNlZmNzR2h2a2NpaG9hbGM7YWJmYXpjaXRmZ1hhT0JkbGFYYUNCZGJhemNlZmNzR2hBY2RoWGF2aHNhSGh4eGVrY2Rob2FsYXNjZHRmYVFCZGJjZWhYYXNjZWZjc0doc2F6aEFrYWxjO2FiZmFBY2l0Zmd2YUNCZGxhdmFRQmRiYWxjO2FiZmF6YVhmY3NHY2l0Zmd2YVFCZGxhdmFPQmRiYURjZWZoRGF6YW9mY3NHaHphUGNpZmdQYWk2bWJra2RuYWVhdzlubWJjYmh2eGVrY2JodmluYWVhdmZhdmM7cTpHOmNqYmZSYmI4NmJiYXZjZWZndmN6OWhtYmthZWFiOVJhdmZodmthbGM7YWVmOEtqampqYmF2a1plZXVjYmhkZG5pbmFkY2VmZ2RjOEYwbWVhZWNlYWR0MG1ia2thZGNyZmNGZUdjcjlVY2kyY2RmYWJjaTlVMmNIZmttYmNiYWJCZDttOkk6Y2piazp6ZGVydThKampqamJjejlSaGxjYmh2ZG5hZWFpY3ZmNm1iYWJjYlJiO206STpjamJjO3FlVjg2YmJhbDljYjgzaXdhYmNlZmh2YWJhZWZjOThmaG9kbmFpVG1iY2JoZWNiaHJjYmh3aW5kbmF2YW82bWJjYnNrYWRhd2NkdGZ5ZGJnRGFsY3dmYXJhRGFlOVJnZWFlYzhGOTFnZTdhZTlSYzUwN2dyY2R0ZmdxeWRiOVJnZWM4RTkxYzk6R2FlY2R0N2FyVmhlaW5hdmNiY2plYWVjamU2RWFlY0ZiR1Y4NmJiYXZjZWZodmFlY3I0Z2VtYmthcWFEQmRiYURoZWF3Y2VmZ3dhaTlobWJra2RuYXZhbzlubWJjYnNrYXZjYkJiYmF2YWI5UmNsZmh2a2F2a0JlZXVjYmhkZG5pbmFkY2VmZ2RjOEYwbWVhZWNlYWR0MG1ia2thYmFkY3dmY0ZlR2NyOVUyY3ZmazpkdmxpOTlkdWk5OWx1ZG5hZVRtYmN1YWRjZXRjdWZ0Y3U3OlpodmRuZG5jdWFpY3VmdGN1NzpaZ29KYmJiWk1ncjpsSmJiYjlwOURUbWJhcjpPaHd4ZWtjampqajk0aHdrY2JoaWNiaERpbmFsY2xmSWRiZ3JKYmJiYkpiYmpaYWxJZGJncTpsYXI6bE1hbGN3ZklkYmdrOmxNZ3I6dmFySmJiYmI5QkVnck5oeGFxYXJOaHJhbGN4ZklkYmhxZG5kbmFrSmJiYmI5R1RtYmF4aGt4ZWtKYmJqWmFyOmw6dGdrYWs6bWF4SmJiYmI5R0Voa0piYmpaYXg6bDp0Z3hheDptYXJKYmJiYjlHRWhya2RuZG5hcUpiYmo6O2FxSmJiajo7OUdFZ3hKYmJqWmF4SmJialo5RkVhdk5KYmJiWkpiYmI6O2FxSmJiYmI5R0VNZ3E6bEpiYmI5cDlEVG1iYXE6T2hteGVrY2pqamo5NGhta2RuZG5ha0piYmo6O2FrSmJiajo7OUdFZ3FKYmJqWmFxSmJialo5RkVhb05KYmJiWkpiYmI6O2FrSmJiYmI5R0VNZ3E6bEpiYmI5cDlEVG1iYXE6T2hQeGVrY2pqamo5NGhQa2RuZG5hckpiYmo6O2FySmJiajo7OUdFZ3FKYmJqWmFxSmJialo5RkVhb05KYmJiWkpiYmI6O2FySmJiYmI5R0VNZ3I6bEpiYmI5cDlEVG1iYXI6T2hzeGVrY2pqamo5NGhza2RuZG5hZGNsOWhtYmFiYURmZ3phczg2YmJhemNpZmFtODZiYmF6Y2RmYXc4NmJiYXpjZWZhUDg2YmJ4ZWthYmFpZmd6YXM4N2ViYXpjb2ZhbTg3ZWJhemNsZmF3ODdlYmF6Y2RmYVA4N2Via2FpY3dmaGlhRGNsZmhEYWxjemZobGFlY3VmZ2VtYmtraztobGxkOTlldWQ5OWV1ZG5hZVRtYmRuZG5jdWFpY3VmdGN1NzpaZ3ZKYmJiWk1nbzpsSmJiYjlwOURUbWJhbzpPaGl4ZWtjampqajk0aGlrYWljOzhGaUdocmluYWJjb2ZjaWNkYWxjbGZJZGI6bGFsSWRiOmw5RWdpYWxjd2ZJZGI6bGFsYWljZHRmSWRiOmw5RUVnaWFsY3hmSWRiOmxhbGFpY2R0ZklkYjpsOUVFZ2lhclY4N2ViZG5kbkpiYmo6O0piYmpaYWxhaWNkdGZJZGJKYmJiYjlERWdvYWxhaWNkN2NkdGZJZGJKO1psOjFaTk5nd0piYmo6O2F3SmJiajo7OUdFZ0RKYmJqWmFESmJialo5RkVhdk5KYmJiWkpiYmI6O2F3SmJiYmI5R0VNZ3c6bEpiYmI5cDlEVG1iYXc6T2hxeGVrY2pqamo5NGhxa2FiY2RmYXE4N2ViZG5kbmFsYWljZWZjaUdjZHRmSWRiSjtabDoxWk5hb05nd0piYmo6O2F3SmJiajo7OUdFZ0RKYmJqWmFESmJialo5RkVhdk5KYmJiWkpiYmI6O2F3SmJiYmI5R0VNZ3c6bEpiYmI5cDlEVG1iYXc6T2hxeGVrY2pqamo5NGhxa2FiYXE4N2ViZG5kbmFvYWxhaWN1ZmNpR2NkdGZJZGJKO1psOjFaTk5nb0piYmo6O2FvSmJiajo7OUdFZ3dKYmJqWmF3SmJialo5RkVhdk5KYmJiWkpiYmI6O2FvSmJiYmI5R0VNZ286bEpiYmI5cDlEVG1iYW86T2hpeGVrY2pqamo5NGhpa2FiY2xmYWk4N2ViYWJjd2ZoYmFsY3pmaGxhZWN1ZmdlbWJra2s7Z3ZkRHVlOTk4SmpqampiY2pkOVJnbzhLampqamJkbmRuZG5hZGNkNGdyVG1iYzpDdWNiYXZFaHdhb2hkYXJoRGluYWRhd0JkYmFkY2xmaGRhRGN1ZmdEbWJrYXZjZDlobWJhZVRtYmFyY2R0aHFjYmhrYWxoeGluYW9oZGF4aERhcmh3aW5hZGFkeWRiZ21hRHlkYmNMNGNGZUdjOmN1ZmdQYW1hUDlrRUJkYmFEY2xmaERhZGNsZmhkYXdjdWZnd21ia2F4YXFmaHhha2NlZmdrYWU5aG1ieGRra2FlVG1la2FyY2R0aHhhdmNlOWhocWNiaGtpbmRuZG5kbmFxbWJhclRtZGM6Q3VoRGFsaGRhcmh3aW5hRGFkeWRiY0w0Y0ZlR2M6Y3VmZ21hRGFtOWtFaERhZGNsZmhkYXdjdWZnd21ieGRra2RuZG5kbmRuYXZQbGVkZGJka2FyVG1sYW9oZGFsaERhcmh3aW5hZGNiYUR5ZGJjTDRjRmVHZ21jOmN1ZmdQYVBhbTBFQmRiYWRjbGZoZGFEY2xmaERhd2N1Zmd3bWJ4aWtrYXJUbWljYmhkYXJoRGluZG5hbGFkZklkYmdzSmJiYmI5Qm1iYW9hZGZhczo4Y0w0Y0ZlR2d3YzhBYXdjOEEwRWM6Y3VmQmRia2FkY2xmaGRhRGN1ZmdEbWJ4ZGtrYXJUbWRrYzpDdWhEa2NiaGRhcmhtaW5hRGh3ZG5hdmNlU21iYW9hZGZ5ZGJod2tkbmRuYWxhZGZJZGJnc2Nqamo7OGlhd2FpOVJjZWZnd2NMdDlSOjpOSmJiYlpKYmJiOjthc0piYmJiOUdFTWdzOmxKYmJiOXA5RFRtYmFzOk9oUHhla2NqampqOTRoUGthYmFkZmFQY0ZGRnJHYXdjS3RWQmRiYWRjbGZoZGFtY3VmZ21tYmtrYWJheGZoYmFsYXhmaGxha2NlZmdrYWU5aG1ia2thb2NqZGY4S2pqampiazpPbHZldWU5OWl1ZTk5aXVkbmFlVG1iY2VhaWN1ZnRodmN1YWl0Y3U3Olpob2NiaHJhZGNsOWhod2NiaERpbmRuZG5hbGN3ZklkYmdxSmJiYmJhcUpiYmJiOUdFZ3FKYmJqWmFxSmJialo5RkVhb05KYmJiWk1ncTpsSmJiYjlwOURUbWJhcTpPaGl4ZWtjampqajk0aGlrZG5kbmFsSWRiZ3FKYmJiYmFxSmJiYmI5R0VncUpiYmpaYXFKYmJqWjlGRWFvTkpiYmJaTWdxOmxKYmJiOXA5RFRtYmFxOk9oZHhla2NqampqOTRoZGthZGFpOVJjZDlUZ2thaWZoaWRuZG5hbGNsZklkYmdxSmJiYmJhcUpiYmJiOUdFZ3FKYmJqWmFxSmJialo5RkVhb05KYmJiWk1ncTpsSmJiYjlwOURUbWJhcTpPaGR4ZWtjampqajk0aGRrYWRhaTlSY2Q5VGhkZG5kbmFsY3hmSWRiZ3FKYmJiYmFxSmJiYmI5R0VncUpiYmpaYXFKYmJqWjlGRWFvTkpiYmJaTWdxOmxKYmJiOXA5RFRtYmFxOk9oeHhla2NqampqOTRoeGthZGFpZmhpYXhjZTkxYXZWaHhkbmRuYXdtYmFiYURmZ21haTg2YmJhbWNpZmF4ODZiYmFtY2RmYWQ4NmJiYW1jZWZhazg2YmJ4ZWthYmFyZmdtYWk4N2ViYW1jb2ZheDg3ZWJhbWNsZmFkODdlYmFtY2RmYWs4N2Via2FyY3dmaHJhRGNsZmhEYWxjemZobGFlY3VmZ2VtYmtrazttcWRRdWk5OThKampqamJjOnFkOVJndjhLampqamJhdmM6U2VmY2JjO0tiejp4ampqYjhBZG5hZFRtYmFpVG1iZG5kbmFiYWVTbWJhZWhveGVrYXZjdWFkY2R0Z3JhZGNGRkZGaTBFY2J5ZDtxOkk6Y2piSGpqampiYmdvQmQ6U2VhdmNlQmQ6bWRhb2FlYXJ6OndqampiOEFrYXZjYkJkOk9lYXY5Y2I4M2k6R2VhdmM6R2VmYW9hZGFpYXZjOlNlZno6cGpqamJhdnlkOkdlaHdhZGNpOVVnRGNieWQ7cTpJOmNqYkhqampqYmJoZWF2YzpTZWZhdnlkOm1kZ3FjZHRmYWVCZGJhdmFxY2VmZ3JCZDptZGFlY2JhRHo6eGpqamJoa2F2YzpTZWZhcmNkdGZjdWFpY2R0YWljRkZGRmkwRWNieWQ7cTpJOmNqYkhqampqYmJneEJkYmF2YXFjZGZnbUJkOm1kYWxjO2ViZmhQYXdoZWF4aHJpbmFyYWxJZGJhUGFleWRiZ3Njd2FzY3c2RWNkdGZJZGJNVWRiYWVjbGZoZWFyY2xmaHJhaWN1ZmdpbWJrYXZjOlNlZmFtY2R0ZmN1YURjZHRhZGNGRkZGOTcwRWNieWQ7cTpJOmNqYkhqampqYmJnbUJkYmRuYWRjaTZtYmFvaGVhbWhyYURoaWluYXJheGFleWRiY2R0ZklkYmF4YWVjbGZ5ZGJjZHRmSWRiTWF4YWVjd2Z5ZGJjZHRmSWRiTVVkYmFlY3hmaGVhcmNsZmhyYWljdWZnaW1ia2thcWNpZmh6YWxjO2ViZmhIYXZjO3FiZmhPYXZoZWF2eWQ6S2VoQWF2eWQ6T2VoQ2NiaHNjYmhyY2JoWGNlaFFpbmFlaExhb2FyY3gyZmdLeWRiaFBhS2NsZnlkYmhkYWJhWGN4MmZnZWN3ZmFLY3dmeWRiZ1lCZGJhZWNsZmFkQmRiYWVhUEJkYmFrYXJmY2U4NmJiYU9hWUJkd2FPYWRCZGxhT2FQQmRiYW1hcmNkdGZjYkJkYmNpaDhBZG5hc1RtYmFMaGlpbmFPYThBY2R0ZmFpeWRiZ2VCZGJhOEFhZWFZOWhhZWFQOWhhZWFkOWhHR2ZoOEFhaWNsZmhpYXNjdWZnc21ia2thWGNlZmhYY2Joc2luYUNhQWFLYXNjZHRmeWRiY2R0Z2lmeWRiY2R0ZmdZaGVhd2FpZmdkeWRiZ1BoaWRuYVBUbWJkbmluYWV5ZGJhclNtZWFlY2xmaGVhaWN1ZmdpVG1keGJra2FlYVlhUGNkdGZjOThmeWRiQmRiYWRhZHlkYmN1ZkJkYmthc2NlZmdzY2k5aG1ia2RuZG5kbmE4QVRtYmN1aHJKYmJiYmhFY2JoZGF2eWQ6S2VoWWF2eWQ6T2VoS2luZG5hd2FPYWRjZHRmeWRiY2R0Z3NmeWRiZ2VUbWJheGFzZmdpSWRiaDNhaWFsY3VhZGFkY3MwRWNkdGZjbGZJZGJhSGFlY3dhZWN3NkVjZHRmSWRiTWc1VWRiYTVhMzp0aDVhZWNkdGhpYUthWWFzZnlkYmNkdGZoZWluYW1hZXlkYmdzY2R0ZmdQYTVhUElkYk1nM1VkYmEzYUVhRWEzOURnUEVoRWFzYXJhUEVocmFlY2xmaGVhaWM5OGZnaW1ia2thZGNlZmdkYThBOWhtYmthcmN1OWhtZWthUWFEOXBtZWluZG5ha2FRZlJiYm1iYVFocnhka2FEYVFjZWZnUTlobWJ4ZGtrYThBY3phOEFjejZFaHNhT2hlYUxoT2FyY3U5aG1la2thelRtYmFxY2R0YXZjOlNlZmZjd2ZoZWluYWV5ZGJjYnlkO3U6STpjamJIOmJqampiYmFlYzk4ZmhlYXpjdWZnem1ia2thdmM6cWRmOEtqampqYms6MGxlb3VjdWFpY2R0Z3ZhaWNGRkZGaTBFZ29jYnlkO3E6STpjamJIampqamJiaHJhbGFseWQ5R2d3Y2R0ZmFyQmRiYWxhd2NlZkJkOUdhYmFyQmRiYW9jYnlkO3E6STpjamJIampqamJiaHJhbGFseWQ5R2dvY2R0ZmFyQmRiYWxhb2NlZkJkOUdhYmFyQmRsY3VhZGNkdGFkY0ZGRkZpMEVjYnlkO3E6STpjamJIampqamJiaHJhbGFseWQ5R2dvY2R0ZmFyQmRiYWxhb2NlZkJkOUdhYmFyQmR3YWJ5ZGJjYmF2ejp4ampqYjhBYWJ5ZGJocmFlaGxhZGh2aW5hcmFseWRiY2R0ZmdvYW95ZGJjZWZCZGJhbGNsZmhsYXZjdWZndm1ia2NiaHZhYnlkbGdsaG9hcmh3YWloRGluYW9hdkJkYmFvY2xmaG9hd3lkYmF2Zmh2YXdjbGZod2FEY3VmZ0RtYmthZGNpOVVocWRuYWRjZDlubWJhYnlkd2hvY2JodmluYWVjd2Z5ZGJod2FlY2xmeWRiaERhbGFleWRiY2R0ZmdiYWJ5ZGJnYmNlZkJkYmFvYWJjZHRmYXZCZGJhbGFEY2R0ZmdEYUR5ZGJnRGNlZkJkYmFvYURjZHRmYXZCZGJhbGF3Y2R0Zmd3YXd5ZGJnd2NlZkJkYmFvYXdjZHRmYXZCZGJhZWN4ZmhlYXFhdmNlZmd2OWhtYmtraW5hbGFseWRiYXJ5ZGI5UkJkYmFyY2xmaHJhbGNsZmhsYWljdWZnaW1ia2tRYmFiYWVhZGFpYztHOkc6Y2piejpvampqYmtRYmFiYWVhZGFpYztpOkg6Y2piejpvampqYms5RGVldWFiY0ZlYWljZHR6OnhqampiaGxjYmhiZG5hZFRtYmluZG5hbGFleWRiY2R0ZmdpeWRiY3U5aG1iYWlhYkJkYmFiY2VmaGJrYWVjbGZoZWFkY3VmZ2RtYmtrYWJrOjN2aW91ZDk6ZHU4SmpqampiYztXYTlSZ2w4S2pqampiY2JodmFsY3hmY2JjO0tiejp4ampqYjhBYWxjdWFkY2l0Z29hZGNGRkZGZTBFY2J5ZDtxOkk6Y2piSGpqampiYmdyQmR4YWxjZUJkMmFyYWVhZGFpY2V6TmpqamJhbGN1YW9hZGNqampqb0dFY2J5ZDtxOkk6Y2piSGpqampiYmd3QmR6YWRjZHRoZWRuYWRUbWJhYmhpaW5haWF2QmRiYWljbGZoaWFkYXZjZWZndjlobWJra2F3YWVmaERhbGFiQmR3YWxhd0JkbDljYmhxaW5kbmFkVG1iYXE5Y3E5OmhrYXJodmFEaGlhZGhlaW5haWF2OFBpYmFrMTpOY0ZyRzg3ZWJhdmN3Zmh2YWljZGZoaWFlY3VmZ2VtYmtrYWxjbGZhcTpOY2VHY2R0ZnlkYmh4YWxjbGZhcTljZTk4Z3E6TmNlR2NkdGZ5ZGJobWFsYztXYmZjYmNqYXo6eGpqamI4QWFEaHZhZGhpZG5hZFRtYmluYWxjO1diZmF2OFZlYmNkdGZnZWFleWRiY2VmQmRiYXZjZGZodmFpY3VmZ2ltYmtrY2JodmNiaGlpbmFsYztXYmZhdmZnZXlkYmhvYWVhaUJkYmFvYWlmaGlhdmNsZmd2Y2phOWhtYmthZGh2ZG5kbmFkVG1iaW5hbGM7V2JmYURhbXlkYmdpY2V0ZjhWZWJjZHRmZ2VhZXlkYmdlY2VmQmRiYXhhZWNkdGZhaUJkYmFtY2xmaG1hdmN1Zmd2bWJrYXE5Y3Y5c21kY2JodmluYWJhd3lkYmNkdGZhdkJkYmF3Y2xmaHdhZGF2Y2VmZ3Y5aG1ieGRra2FxOWN2OXNtZWtrY3dodmNiaGlpbmFsY3hmYXZmYzk4ZnlkYmNieWQ7dTpJOmNqYkg6YmpqamJiYWljZUdoZWNsaHZjZWhpYWVUbWJrYWxjO1dhZjhLampqamJrOkF3bGl1bzk5aXVkOTpjYmh2OEpqampqYmNhOVJnb2NieWQ6NDpJOmNqYkJkS2FvY2I4UGQ6VzpJOmNqYjgzaXphb2NieWQ7ZTpJOmNqYkJkd2FvY2I4UGQ6ODpJOmNqYjgzaWJhaWNkNGhyZG5kbmFkbWJKRkZ1Rmh3SkZGdXVoREpGRnV1aHFKRkZ1RmhrSkZGdXVoeEpGRnVGaG14ZWthcmNkdGhQYWVoc2luY2JoaWluYW9jemZhaWZnemFzYWlmSWRiZ3dheklkYmdEYURhdzlFRVVkYmFvYWlmZ3phd2F6SWRiZ0RhRGF3OURFVWRiYWljbGZnaWN4OWhtYmthc2FQZmhzYXZjZWZndmFkOWhtYmthb0lkS2hEYW9JZHdod2FvSWRDaHFhb0lkbGhrYW9JZHpoeGFvSWRiaG1rZG5hZFRtYkpiYmJiSmJGdTloSmJiYmJhbWF4OnRnbWFtSmJiYmI5REVnbWFrYXE6dGdrYWthbTlERWdrYXdhRDp0Z3dhd2FrOURFZ3c6dmF3SmJiYmI5QkVod2RuYWxtYmFyY2R0aG9pbmRuZG5hZWNsZklkYmFxOnRhd05KYmJiWk1nazpsSmJiYjlwOURUbWJhazpPaGl4ZWtjampqajk0aGlrYWk6UzljQzpnaEhkbmRuYWVJZGJheDp0YXdOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hpeGVrY2pqamo5NGhpa2FIYWk6UzplaEhkbmRuYWVjd2ZJZGJhRDp0YXdOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hpeGVrY2pqamo5NGhpa2FiYUhhaTpUOWN5Omc6ZTgzaWJhZWFvZmhlYWJjd2ZoYmFkY3VmZ2RtYnhka2thcmNkdGhvaW5kbmRuYWVJZGJheDp0YXdOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hpeGVrY2pqamo5NGhpa2FpOlNnSDljYTpnYUg5Y3o6ZzljampqOzRzOmQ6ZWFIOWNGZTpkOmU5Y0Y6Ymo7NDpwajthcjpkOWM6YmQ5OjljOnA7RzpkOzRqOkU7YXI6ZDljSDk6OWM7ZDtIOlc6eTptOmc7ZDtIYjpkOWN2OTo5YztqOktNO2o6S007ajpLZDpkaE9kbmRuYWVjbGZJZGJhcTp0YXdOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hpeGVrY2pqamo5NGhpa2FpOlNnSDljYTpnYUg5Y3o6ZzljampqOzRzOmQ6ZWFIOWNGZTpkOmU5Y0Y6Ymo7NDpwajthcjpkOWM6YmQ5OjljOnA7RzpkOzRqOkU7YXI6ZDljSDk6OWM7ZDtIOlc6eTptOmc7ZDtIYjpkOWNxOTo5Y007ajpLTTtqOktNO2psOmRhTzplaE9kbmRuYWVjd2ZJZGJhRDp0YXdOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hpeGVrY2pqamo5NGhpa2FiYU9haTpTZ0g5Y2E6Z2FIOWN6Omc5Y2pqajs0czpkOmVhSDljRmU6ZDplOWNGOmJqOzQ6cGo7YXI6ZDljOmJkOTo5YzpwO0c6ZDs0ajpFO2FyOmQ5Y0g5OjljO2Q7SDpXOnk6bTpnO2Q7SGI6ZDljQzk6OWM6S007ajpLTTtqOktNRDpkOmU4M2liYWVhb2ZoZWFiY3dmaGJhZGN1ZmdkbWJra2s5dGVpdWNiY2J5ZDt5Okk6Y2piZ2VhYmNpZmM5OEdmZ2JCZDt5Okk6Y2piZG5kbmFiWmJjenRnZDlubWJjdWhpYWJhZDlSY0ZGaWZjejRuYmN1U21la2FlaGlrYWlrO0xlZWV1ZG5kbmFlYWJWY2lHVG1iYWJoaXhla2RuZG5hZGN6OXBtYmFiaGl4ZWthYmhpaW5haWFleWRiQmRiYWljbGZhZWNsZnlkYkJkYmFpY3dmYWVjd2Z5ZGJCZGJhaWN4ZmFlY3hmeWRiQmRiYWVjemZoZWFpY3pmaGlhZGM5V2ZnZGNzMG1ia2thZGNsNm1iaW5haWFleWRiQmRiYWVjbGZoZWFpY2xmaGlhZGM5OGZnZGNpMG1ia2tkbmFkVG1iaW5haWFlUmJiODZiYmFpY2VmaGlhZWNlZmhlYWRjdWZnZG1ia2thYms7YWVlZHVkbmRuYWJjaUdUbWJhYmhpeGVrYWVjRmVHYzpiOmM6ZXcyaGxkbmRuYWRjejlwbWJhYmhpeGVrYWJoaWluYWlhbEJkYmFpY3hmYWxCZGJhaWN3ZmFsQmRiYWljbGZhbEJkYmFpY3pmaGlhZGM5V2ZnZGNzMG1ia2thZGNsNm1iaW5haWFsQmRiYWljbGZoaWFkYzk4ZmdkY2kwbWJra2RuYWRUbWJpbmFpYWU4NmJiYWljZWZoaWFkY3VmZ2RtYmtrYWJrOXRlaXVjYmNieWQ7eTpJOmNqYmdlYWJjcmZjOTRHZmdiQmQ7eTpJOmNqYmRuZG5hYlpiY3p0Z2Q5bm1iY3VoaWFiYWQ5UmNGRmlmY3o0bmJjdVNtZWthZWhpa2Fpa1RlZXVjYmFiY2J5ZDt5Okk6Y2piZ2U5UmNpZmM5OEdhZWZnYkJkO3k6STpjamJkbmFiWmJjenRnZTlubWJhYmFlOVJjRkZpZmN6NG5iOEFra2s7U2RkYmNqOkdkaztpZGJiYmJkYmJibGJiYndiYmJiYmJiZWJiYmRiYmJsYmJid2JiYmJiYmJiYmJiYmJiYmJiYmJlYmJiZGJiYmJiYmJlYmJiYmJiYmJiYmJiYmJiYjQ6aDl3OU45NDpQOmdXOmo5Tzp5ZTlQYmJiYmJiOmwyOWhaOzY5OjlrWjtOOzc2WjtyZzk3Wjt6O285eFo4SjtCODVaOzo7dTl5WjtiO2s5SFo6MjtaOURaOWU6bDltWjU5QThLWjpyO1QzWjpBOnpZWjc5T0haO2o0Ojo4OjpZOkQ5Vjg6YmJiYjlzOjQ5Olo4UjpoQlo5TTlNO004Okw7ejtvODo7ODpQRzg5cTt4Oko4NzhSOmhRODo6TTpCO2U4N2JiYmJiYmpaYmJqWmJialo6RTtWO044OjpZOkRzWjlpO0g7Njg6eGQ7Ujg6O2gwODM4OjtXOk5vWmJiYmI6V1Y5Tzg6dWY4ODg6OWk7SDs2ODo5YzlHO0w4OTtuO205bTg5O0Q4S284OmJiYmJmOjh0WjltODM2WlM6MkFaTDt6UFpaODE4RVo5ZTpseFo7VTk4Rjg6ODE5RTs2ODpGRnV1RkZ1dUZGdXVGRnVGRkZ1RkZGdUZiYztpOklka0NlYmJiZWJiYmViYmJkYmJiOUc6cmJiIixlPW5ldyBVaW50OEFycmF5KFszMiwwLDY1LDIsMSwxMDYsMzQsMzMsMywxMjgsMTEsNCwxMyw2NCw2LDI1MywxMCw3LDE1LDExNiwxMjcsNSw4LDEyLDQwLDE2LDE5LDU0LDIwLDksMjcsMjU1LDExMywxNyw0Miw2NywyNCwyMywxNDYsMTQ4LDE4LDE0LDIyLDQ1LDcwLDY5LDU2LDExNCwxMDEsMjEsMjUsNjMsNzUsMTM2LDEwOCwyOCwxMTgsMjksNzMsMTE1XSk7aWYodHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IilyZXR1cm57c3VwcG9ydGVkOiExfTt2YXIgdCxvPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGEobikse30pLnRoZW4oZnVuY3Rpb24oaCl7dD1oLmluc3RhbmNlLHQuZXhwb3J0cy5fX3dhc21fY2FsbF9jdG9ycygpLHQuZXhwb3J0cy5tZXNob3B0X2VuY29kZVZlcnRleFZlcnNpb24oMSksdC5leHBvcnRzLm1lc2hvcHRfZW5jb2RlSW5kZXhWZXJzaW9uKDEpfSk7ZnVuY3Rpb24gYShoKXtmb3IodmFyIGI9bmV3IFVpbnQ4QXJyYXkoaC5sZW5ndGgpLHA9MDtwPGgubGVuZ3RoOysrcCl7dmFyIHk9aC5jaGFyQ29kZUF0KHApO2JbcF09eT45Nj95LTk3Onk+NjQ/eS0zOTp5KzR9Zm9yKHZhciBUPTAscD0wO3A8aC5sZW5ndGg7KytwKWJbVCsrXT1iW3BdPDYwP2VbYltwXV06KGJbcF0tNjApKjY0K2JbKytwXTtyZXR1cm4gYi5idWZmZXIuc2xpY2UoMCxUKX1mdW5jdGlvbiByKGgpe2lmKCFoKXRocm93IG5ldyBFcnJvcigiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGkoaCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGguYnVmZmVyLGguYnl0ZU9mZnNldCxoLmJ5dGVMZW5ndGgpfWZ1bmN0aW9uIGYoaCxiLHAseSl7dmFyIFQ9dC5leHBvcnRzLnNicmssXz1UKGIubGVuZ3RoKjQpLHc9VChwKjQpLEU9bmV3IFVpbnQ4QXJyYXkodC5leHBvcnRzLm1lbW9yeS5idWZmZXIpLFI9aShiKTtFLnNldChSLF8pLHkmJnkoXyxfLGIubGVuZ3RoLHApO3ZhciBTPWgodyxfLGIubGVuZ3RoLHApO0U9bmV3IFVpbnQ4QXJyYXkodC5leHBvcnRzLm1lbW9yeS5idWZmZXIpO3ZhciBDPW5ldyBVaW50MzJBcnJheShwKTtuZXcgVWludDhBcnJheShDLmJ1ZmZlcikuc2V0KEUuc3ViYXJyYXkodyx3K3AqNCkpLFIuc2V0KEUuc3ViYXJyYXkoXyxfK2IubGVuZ3RoKjQpKSxUKF8tVCgwKSk7Zm9yKHZhciBJPTA7STxiLmxlbmd0aDsrK0kpYltJXT1DW2JbSV1dO3JldHVybltDLFNdfWZ1bmN0aW9uIGQoaCxiLHAseSl7dmFyIFQ9dC5leHBvcnRzLnNicmssXz1UKHAqNCksdz1UKHAqeSksRT1uZXcgVWludDhBcnJheSh0LmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7RS5zZXQoaShiKSx3KSxoKF8sdyxwLHkpLEU9bmV3IFVpbnQ4QXJyYXkodC5leHBvcnRzLm1lbW9yeS5idWZmZXIpO3ZhciBSPW5ldyBVaW50MzJBcnJheShwKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoUi5idWZmZXIpLnNldChFLnN1YmFycmF5KF8sXytwKjQpKSxUKF8tVCgwKSksUn1mdW5jdGlvbiBjKGgsYixwLHksVCxfLHcpe3ZhciBFPXQuZXhwb3J0cy5zYnJrLFI9RShiKSxTPUUoeSpUKSxDPW5ldyBVaW50OEFycmF5KHQuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtDLnNldChpKHApLFMpO3ZhciBJPWgoUixiLFMseSxULF8sdyksTT1uZXcgVWludDhBcnJheShJKTtyZXR1cm4gTS5zZXQoQy5zdWJhcnJheShSLFIrSSkpLEUoUi1FKDApKSxNfWZ1bmN0aW9uIHUoaCl7Zm9yKHZhciBiPTAscD0wO3A8aC5sZW5ndGg7KytwKXt2YXIgeT1oW3BdO2I9Yjx5P3k6Yn1yZXR1cm4gYn1mdW5jdGlvbiBsKGgsYil7aWYocihiPT0yfHxiPT00KSxiPT00KXJldHVybiBuZXcgVWludDMyQXJyYXkoaC5idWZmZXIsaC5ieXRlT2Zmc2V0LGguYnl0ZUxlbmd0aC80KTt2YXIgcD1uZXcgVWludDE2QXJyYXkoaC5idWZmZXIsaC5ieXRlT2Zmc2V0LGguYnl0ZUxlbmd0aC8yKTtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KHApfWZ1bmN0aW9uIG0oaCxiLHAseSxULF8sdyl7dmFyIEU9dC5leHBvcnRzLnNicmssUj1FKHAqeSksUz1FKHAqXyksQz1uZXcgVWludDhBcnJheSh0LmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7Qy5zZXQoaShiKSxTKSxoKFIscCx5LFQsUyx3KTt2YXIgST1uZXcgVWludDhBcnJheShwKnkpO3JldHVybiBJLnNldChDLnN1YmFycmF5KFIsUitwKnkpKSxFKFItRSgwKSksSX1yZXR1cm57cmVhZHk6byxzdXBwb3J0ZWQ6ITAscmVvcmRlck1lc2g6ZnVuY3Rpb24oaCxiLHApe3IoaCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fHxoIGluc3RhbmNlb2YgSW50MzJBcnJheSkscighYnx8aC5sZW5ndGglMz09MCk7dmFyIHk9Yj9wP3QuZXhwb3J0cy5tZXNob3B0X29wdGltaXplVmVydGV4Q2FjaGVTdHJpcDp0LmV4cG9ydHMubWVzaG9wdF9vcHRpbWl6ZVZlcnRleENhY2hlOnZvaWQgMDtyZXR1cm4gZih0LmV4cG9ydHMubWVzaG9wdF9vcHRpbWl6ZVZlcnRleEZldGNoUmVtYXAsaCx1KGgpKzEseSl9LHJlb3JkZXJQb2ludHM6ZnVuY3Rpb24oaCxiKXtyZXR1cm4gcihoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKGgubGVuZ3RoJWI9PTApLHIoYj49MyksZCh0LmV4cG9ydHMubWVzaG9wdF9zcGF0aWFsU29ydFJlbWFwLGgsaC5sZW5ndGgvYixiKjQpfSxlbmNvZGVWZXJ0ZXhCdWZmZXI6ZnVuY3Rpb24oaCxiLHApe3IocD4wJiZwPD0yNTYpLHIocCU0PT0wKTt2YXIgeT10LmV4cG9ydHMubWVzaG9wdF9lbmNvZGVWZXJ0ZXhCdWZmZXJCb3VuZChiLHApO3JldHVybiBjKHQuZXhwb3J0cy5tZXNob3B0X2VuY29kZVZlcnRleEJ1ZmZlcix5LGgsYixwKX0sZW5jb2RlVmVydGV4QnVmZmVyTGV2ZWw6ZnVuY3Rpb24oaCxiLHAseSxUKXtyKHA+MCYmcDw9MjU2KSxyKHAlND09MCkscih5Pj0wJiZ5PD0zKSxyKFQ9PT12b2lkIDB8fFQ9PTB8fFQ9PTEpO3ZhciBfPXQuZXhwb3J0cy5tZXNob3B0X2VuY29kZVZlcnRleEJ1ZmZlckJvdW5kKGIscCk7cmV0dXJuIGModC5leHBvcnRzLm1lc2hvcHRfZW5jb2RlVmVydGV4QnVmZmVyTGV2ZWwsXyxoLGIscCx5LFQ9PT12b2lkIDA/LTE6VCl9LGVuY29kZUluZGV4QnVmZmVyOmZ1bmN0aW9uKGgsYixwKXtyKHA9PTJ8fHA9PTQpLHIoYiUzPT0wKTt2YXIgeT1sKGgscCksVD10LmV4cG9ydHMubWVzaG9wdF9lbmNvZGVJbmRleEJ1ZmZlckJvdW5kKGIsdSh5KSsxKTtyZXR1cm4gYyh0LmV4cG9ydHMubWVzaG9wdF9lbmNvZGVJbmRleEJ1ZmZlcixULHksYiw0KX0sZW5jb2RlSW5kZXhTZXF1ZW5jZTpmdW5jdGlvbihoLGIscCl7cihwPT0yfHxwPT00KTt2YXIgeT1sKGgscCksVD10LmV4cG9ydHMubWVzaG9wdF9lbmNvZGVJbmRleFNlcXVlbmNlQm91bmQoYix1KHkpKzEpO3JldHVybiBjKHQuZXhwb3J0cy5tZXNob3B0X2VuY29kZUluZGV4U2VxdWVuY2UsVCx5LGIsNCl9LGVuY29kZUdsdGZCdWZmZXI6ZnVuY3Rpb24oaCxiLHAseSxUKXt2YXIgXz17QVRUUklCVVRFUzp0aGlzLmVuY29kZVZlcnRleEJ1ZmZlckxldmVsLFRSSUFOR0xFUzp0aGlzLmVuY29kZUluZGV4QnVmZmVyLElORElDRVM6dGhpcy5lbmNvZGVJbmRleFNlcXVlbmNlfTtyZXR1cm4gcihfW3ldKSxfW3ldKGgsYixwLDIsVD09PXZvaWQgMD8wOlQpfSxlbmNvZGVGaWx0ZXJPY3Q6ZnVuY3Rpb24oaCxiLHAseSl7cmV0dXJuIHIocD09NHx8cD09OCkscih5Pj0yJiZ5PD0xNiksbSh0LmV4cG9ydHMubWVzaG9wdF9lbmNvZGVGaWx0ZXJPY3QsaCxiLHAseSwxNil9LGVuY29kZUZpbHRlclF1YXQ6ZnVuY3Rpb24oaCxiLHAseSl7cmV0dXJuIHIocD09OCkscih5Pj00JiZ5PD0xNiksbSh0LmV4cG9ydHMubWVzaG9wdF9lbmNvZGVGaWx0ZXJRdWF0LGgsYixwLHksMTYpfSxlbmNvZGVGaWx0ZXJFeHA6ZnVuY3Rpb24oaCxiLHAseSxUKXtyKHA+MCYmcCU0PT0wKSxyKHk+PTEmJnk8PTI0KTt2YXIgXz17U2VwYXJhdGU6MCxTaGFyZWRWZWN0b3I6MSxTaGFyZWRDb21wb25lbnQ6MixDbGFtcGVkOjN9O3JldHVybiByKCFUfHxUIGluIF8pLG0odC5leHBvcnRzLm1lc2hvcHRfZW5jb2RlRmlsdGVyRXhwLGgsYixwLHkscCxUP19bVF06MSl9LGVuY29kZUZpbHRlckNvbG9yOmZ1bmN0aW9uKGgsYixwLHkpe3JldHVybiByKHA9PTR8fHA9PTgpLHIoeT49MiYmeTw9MTYpLG0odC5leHBvcnRzLm1lc2hvcHRfZW5jb2RlRmlsdGVyQ29sb3IsaCxiLHAseSwxNil9fX0pKCl9KTt2YXIgenMsdHg9WCgoKT0+e3pzPShmdW5jdGlvbigpe3ZhciBuPSJiOUg3OVRlYmJiZThGdjlHYmI5R3Z1dXV1dWV1OUdpdXV1YjlHZXVldTlHaXV1dWV1aXhrYmVlZWRkZGRpbGx2aWViZW93ZXVlY2o6R2RrcjtOZXFvOVRXOVQ5VlY5NWRiSDlGOUY5MzlINzlUOUY5SjlIMjI5RjlKdDlWVjdiYjhBOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1c5d1dWdFc5NDljOTE5TTlNV1ZiZVk5VFc3OU85VjlXdDlGOUtXOUo5VjlLVzY5VTlLVzk0OWM5MTlNOU1XVmJkRTlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXNjlVOUtXOTQ5dFdHOTFXOVU5SldiaUw5VFc3OU85VjlXdDlGOUtXOUo5VjlLV1M5UDJ0V1Y5cDlKdGJsSzlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXUzlQMnRXVjlyOTE5SHRidkw5VFc3OU85VjlXdDlGOUtXOUo5VjlLV1M5UDJ0V1ZUOTQ5V2JvWTlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXUzlQMnRXVko5VjI5VlZicmw3OUlWOVJid3ExWmtkYms6a1lpNXVkOTpkdThKampqamJjanE5Umd2OEtqampqYmM5OmhvZG5hbFRtYmN1aG9haVJiYmdyYztXZUdjOkdlOWhtYmFyY3NHZ3djZTBtYmM5OmhvYWxjdWZhZGNkNGNiYXdFZ0RhZGZncmNLY2Fhd0VncWFyYXEwRWdrNm1iYWljZWZoeGNqO2FiYWQ5VWM7V0ZiR2NqZGFkY2EwRWhtYWlhbGZnUGFyOVJnb2FkZmhzYXZhb2FkejpqampqYmd6Y2VWaEhjYmhPZG5kbmluYWVhTzlubWVhUGF4OVJhRDZtZGFtYWVhTzlSYU9hbWZnb2FlNkVnQWNzZmdsYzlXR2hDYUFjZXRoWGF4YURmaGlhT2FlYW9hZWFvNkU5UmhRYWxjbDRjaWZjZDRoTGF6Y2pkZmFBZmhLY2JoWWFiYU9hZDJmZzhBaEVhSGgzaW5jYmg1ZG5hd1RtYmF4YVljZDRmUmJiaDVrY2JoOEVhemNqZGZocWluYWloOEZkbmRuZG5kbmE1YThFY2V0NGNpR2dvYzk6ZlBkZWJka2FQYThGOVJhQTZtcmF6Y2pkZmE4RWFBMmZhOEZhQXo6ampqamI4QWE4RmFBZmhpeGRrYXpjamRmYThFYUEyZmNiYUF6OmtqampiOEFhOEZoaXhla2FQYThGOVJhTDZtdmE4RmFMZmhpZG5hQ1RtYmFQYWk5UmNLNm1iYW9jZHRjOnE6RzpjamJmY2o6RzpjamJhd0VoYWN6aHJjYmhsaW5hcmdvYzlXZmdoYXFmaHJkbmRuZG5kbmRuZG5hYWE4RmFoY280ZlJiYmFsY29HNGNpR2NkdGZ5ZGJQRGJlZHZpdnZ2bHZrYXI5Y2I4M2J3YXI5Y2I4M2JieGxrYXJjYmFpUmJkYWk4WGJiOWM6Yzpxajpidzk6OWM6cTtjMTpJMWU6ZDljOmI6YzplMXo5OmdnOWNqampqano6ZGc4SjlxRTg2YmJhcWFvZmdyY0dmY2JhaWNkZmE4SjljOE4xOk5mZ2hSYmJhZzljampqamp3OmRnOEo5cUU4NmJiYXJjVmZjYmFoYThKOWM4TTE6TmZnaFJiYmFnOWNqampqamw6ZGc4SjlxRTg2YmJhcmM3ZmNiYWhhOEo5YzhMMTpOZmdoUmJiYWc5Y2pqampqZDpkZzhKOXFFODZiYmFyY3RmY2JhaGE4SjljOEsxOk5mZ2hSYmJhZzljampqamplOmRnOEo5cUU4NmJiYXJjOTFmY2JhaGE4SjljOEoxOk5mZ2hSYmJhZzljampqajthYjpkZzhKOXFFODZiYmFyYzRmY2JhaGE4SjljZzE6TmZnaFJiYmFnOWNqampqYTpkZzhKOXFFODZiYmFyYzkzZmNiYWhhOEo5Y2gxOk5mZ2hSYmJhZzljampqano6ZGdnOXFFODZiYmFyYzk0ZmNiYWhhZzljYTE6TmZnaFJiYmFpOFhiZTljOmM6cWo6Ync5OjljOnE7YzE6STFlOmQ5YzpiOmM6ZTF6OTpnZzljampqamp6OmRnOEo5cUU4NmJiYXJjOTVmY2JhaGE4SjljOE4xOk5mZ2lSYmJhZzljampqamp3OmRnOEo5cUU4NmJiYXJjOTZmY2JhaWE4SjljOE0xOk5mZ2lSYmJhZzljampqampsOmRnOEo5cUU4NmJiYXJjOTdmY2JhaWE4SjljOEwxOk5mZ2lSYmJhZzljampqampkOmRnOEo5cUU4NmJiYXJjOThmY2JhaWE4SjljOEsxOk5mZ2lSYmJhZzljampqamplOmRnOEo5cUU4NmJiYXJjOTlmY2JhaWE4SjljOEoxOk5mZ2lSYmJhZzljampqajthYjpkZzhKOXFFODZiYmFyYzk6ZmNiYWlhOEo5Y2cxOk5mZ2lSYmJhZzljampqamE6ZGc4SjlxRTg2YmJhcmN1ZmNiYWlhOEo5Y2gxOk5mZ2lSYmJhZzljampqano6ZGdnOXFFODZiYmFpYWc5Y2ExOk5maGl4aWthcmFpUmJsYWlSYmJnaGNvNGc4S2E4S2NpU2c4S0U4NmJiYXFhb2ZncmNHZmFpY2xmYThLZmc4S1JiYmFoY2w0Y2lHZzhMYThMY2lTZzhMRTg2YmJhcmNWZmE4S2E4TGZnOEtSYmJhaGNkNGNpR2c4TGE4TGNpU2c4TEU4NmJiYXJjN2ZhOEthOExmZzhLUmJiYWhjaUdnaGFoY2lTZ2hFODZiYmFyY3RmYThLYWhmZzhLUmJiYWlSYmVnaGNvNGc4TGE4TGNpU2c4TEU4NmJiYXJjOTFmYThLYThMZmc4S1JiYmFoY2w0Y2lHZzhMYThMY2lTZzhMRTg2YmJhcmM0ZmE4S2E4TGZnOEtSYmJhaGNkNGNpR2c4TGE4TGNpU2c4TEU4NmJiYXJjOTNmYThLYThMZmc4S1JiYmFoY2lHZ2hhaGNpU2doRTg2YmJhcmM5NGZhOEthaGZnOEtSYmJhaVJiZGdoY280ZzhMYThMY2lTZzhMRTg2YmJhcmM5NWZhOEthOExmZzhLUmJiYWhjbDRjaUdnOExhOExjaVNnOExFODZiYmFyYzk2ZmE4S2E4TGZnOEtSYmJhaGNkNGNpR2c4TGE4TGNpU2c4TEU4NmJiYXJjOTdmYThLYThMZmc4S1JiYmFoY2lHZ2hhaGNpU2doRTg2YmJhcmM5OGZhOEthaGZnaFJiYmFpUmJpZ2ljbzRnOEthOEtjaVNnOEtFODZiYmFyYzk5ZmFoYThLZmdoUmJiYWljbDRjaUdnOEthOEtjaVNnOEtFODZiYmFyYzk6ZmFoYThLZmdoUmJiYWljZDRjaUdnOEthOEtjaVNnOEtFODZiYmFyY3VmYWhhOEtmZ3JSYmJhaWNpR2dpYWljaVNnaUU4NmJiYXJhaWZoaXhka2FyYWlSYndhaVJiYmdoY2w0ZzhLYThLY3NTZzhLRTg2YmJhcWFvZmdyY0dmYWljd2ZhOEtmZzhLUmJiYWhjc0dnaGFoY3NTZ2hFODZiYmFyY1ZmYThLYWhmZ2hSYmJhaVJiZWc4S2NsNGc4TGE4TGNzU2c4TEU4NmJiYXJjN2ZhaGE4TGZnaFJiYmE4S2NzR2c4S2E4S2NzU2c4S0U4NmJiYXJjdGZhaGE4S2ZnaFJiYmFpUmJkZzhLY2w0ZzhMYThMY3NTZzhMRTg2YmJhcmM5MWZhaGE4TGZnaFJiYmE4S2NzR2c4S2E4S2NzU2c4S0U4NmJiYXJjNGZhaGE4S2ZnaFJiYmFpUmJpZzhLY2w0ZzhMYThMY3NTZzhMRTg2YmJhcmM5M2ZhaGE4TGZnaFJiYmE4S2NzR2c4S2E4S2NzU2c4S0U4NmJiYXJjOTRmYWhhOEtmZ2hSYmJhaVJibGc4S2NsNGc4TGE4TGNzU2c4TEU4NmJiYXJjOTVmYWhhOExmZ2hSYmJhOEtjc0dnOEthOEtjc1NnOEtFODZiYmFyYzk2ZmFoYThLZmdoUmJiYWlSYnZnOEtjbDRnOExhOExjc1NnOExFODZiYmFyYzk3ZmFoYThMZmdoUmJiYThLY3NHZzhLYThLY3NTZzhLRTg2YmJhcmM5OGZhaGE4S2ZnaFJiYmFpUmJvZzhLY2w0ZzhMYThMY3NTZzhMRTg2YmJhcmM5OWZhaGE4TGZnaFJiYmE4S2NzR2c4S2E4S2NzU2c4S0U4NmJiYXJjOTpmYWhhOEtmZ2hSYmJhaVJicmdpY2w0ZzhLYThLY3NTZzhLRTg2YmJhcmN1ZmFoYThLZmdyUmJiYWljc0dnaWFpY3NTZ2lFODZiYmFyYWlmaGl4ZWthcmFpOFBidzgzYndhcmFpOFBiYjgzYmJhaWN6Zmhpa2RuYW9hQzlwbWJhbGNkZmhsYW9jemZocmFQYWk5UmNMMG1la2thb2FDNm1vYWltZXhva2FDbXZhOEZUbXZrYXFhQWZocWE4RWNlZmc4RWNsOWhtYmtkbmRuZG5kbmF3VG1iYXNhWWNkNGZSYmJnb2NpR1BsYmVkcmJrYUFUbWRhemFZZmg4RmF6Y2pkZmhoY2JoOEVhRWhhaW5hOEZSYmJocmFhaG9jYmhsaW5hb2FoYWxmUmJiZ3FjZTRjYmFxY2VHOVI3YXJmZ3I4NmJiYW9hZGZob2FBYWxjZWZnbDlobWJrYWFjZWZoYWE4RmNlZmg4RmFoYUFmaGhhOEVjZWZnOEVjbDlobWJ4aWtrYUFUbWVhemFZZmhhYXpjamRmaGhjYmhvY2VoOEVhS2g4RmluYUVhb2ZobGFhOFZiYmhyY2Job2luYWxhOEZhb2ZSYmJjd3RhaGFvZlJiYmdxVmM7OkZpR2NlNGNiYXFjZUc5UjdhcmZncjg3YmJhbGFkZmhsYVFhb2NlZmdvZm1ia2E4RmFYZmg4RmNkaG9hYWNkZmhhYWhhWGZoaGE4RWNlR2hsY2JoOEVhbG1ieGRra2FBVG1iYW9jbDRoOEVhemFZZlJiYmhxY3dob2EzaGxpbmFsUmJiYW90YXFWaHFhbGNlZmhsYW9jd2Znb2NhOWhtYmtjYmhoYUVoOEZhS2hhaW5hemNqZGZhaGZSYmJocmN3aG9hYWhsaW5hbFJiYmFvdGFyVmhyYWxhQWZobGFvY3dmZ29jYTlobWJrYXJhOEU5NGFxN2hxY2Job2E4RmhsaW5hbGFxYW80ODZiYmFsY2VmaGxhb2N3ZmdvY2E5aG1ia2E4RmFkZmg4RmFhY2VmaGFhaGNlZmdoYUE5aG1ia2thRWNsZmhFYTNjbGZoM2FZY2xmZ1lhZDZtYmthemE4QWFBY3VmYWQyZmFkejpqampqYjhBYUFhT2ZoT2FpaHhhaW1ia2M5OmhveGRrY2JjOTlhUGF4OVJha1NFaG94ZWtjOTpob2thdmNqcWY4S2pqampiYW9rOnlzZXp1OEpqampqYmM7YWU5Umd2OEtqampqYmM5OmhvZG5hbGFlY2k5VWdyY0hmNm1iY3Vob2FpUmJiZ3djO1dlR2M7R2U5aG1iYXdjc0dnRGNlMG1iYXZjO2FiZmNGZWNqZXo6a2pqamI4QWF2OWN1ODNpVWF2OWN1ODNpOFdhdjljdTgzaXlhdjljdTgzaWFhdjljdTgzaUthdjljdTgzaXphdjljdTgzaXdhdjljdTgzaWJhaWFsZmM5V2ZocWFpY2VmZ3dhcmZobGRuYWVUbWJjbWNzYURjZVNFaGtjYmh4Y2JobWNiaHJjYmhpY2Job2luZG5hbGFxOW5tYmM5OmhveGlrZG5kbmF3UmJiZ0RjO1ZlMG1iYXZjO2FiZmFvYURjdTdnUGNsNGZjc0djaXRmZ3N5ZGxoemFzeWRiaEhkbmRuYURjc0dnc2FrOXBtYmF2YWlhUGZjc0djZHRmeWRiYXhhc0VoRGF4YXNUZ09maHh4ZWtkbmRuYXNjc1NtYmNlaE9hc2M5ODdhc2FtZmZjZWZoRHhla2FsY2VmaERhbDhTYmJnc2NGZUdoUGRuZG5hc2N1OW1tYmFEaGx4ZWthbGN2ZmhsYVBjRmJHaFBjcmhzZG5pbmFEOFNiYmdPY0ZiR2FzdGFQVmhQYU9jdTlrbWVhRGNlZmhEYXNjcmZnc2M4SjlobWJ4ZGtrYURjZWZobGtjZWhPYVBjZTRjYmFQY2VHOVI3YW1maERrYURobWthdmM7YWJmYW9jaXRmZ3NhREJkYmFzYXpCZGxhdmFpY2R0ZmFEQmRiYXZjO2FiZmFvY2VmY3NHY2l0ZmdzYUhCZGJhc2FEQmRsYW9jZGZob2FPYWlmaGlkbmFkY2Q5aG1iYWJhcmNldGZnc2FIODdlYmFzY2xmYUQ4N2ViYXNjZGZhejg3ZWJ4ZGthYmFyY2R0ZmdzYUhCZGJhc2N3ZmFEQmRiYXNjbGZhekJkYnhla2RuYURjcGUwbWJhdmFpYXFhRGNzR2ZSYmJnc2NsNGdQOVJjc0djZHRmeWRiYXhjZWZnT2FQRWhEYXZhaWFzOVJjc0djZHRmeWRiYU9hUFRnemZnT2FzY3NHZ1BFaHNhUFRoUGRuZG5hZGNkOWhtYmFiYXJjZXRmZ0hheDg3ZWJhSGNsZmFzODdlYmFIY2RmYUQ4N2VieGVrYWJhcmNkdGZnSGF4QmRiYUhjd2Zhc0JkYmFIY2xmYURCZGJrYXZhaWNkdGZheEJkYmF2YzthYmZhb2NpdGZnSGFEQmRiYUhheEJkbGF2YWljZWZnaWNzR2NkdGZhREJkYmF2YzthYmZhb2NlZmNzR2NpdGZnSGFzQmRiYUhhREJkbGF2YWlhemZnaWNzR2NkdGZhc0JkYmF2YzthYmZhb2NkZmNzR2NpdGZnRGF4QmRiYURhc0JkbGFvY2lmaG9haWFQZmhpYU9hUGZoeHhla2F4Y2JhbFJiYmdzRWdIYURjOzplU2dEZmhPYXNjc0doQWRuZG5hc2NsNGdDbWJhT2NlZmh6eGVrYU9oemF2YWlhQzlSY3NHY2R0ZnlkYmhPa2RuZG5hQW1iYXpjZWZoeHhla2F6aHhhdmFpYXM5UmNzR2NkdGZ5ZGJoemtkbmRuYURUbWJhbGNlZmhEeGVrYWxjZGZoRGFsOFNiZWdQY0ZlR2hzZG5hUGN1OWttYmFsY29maEhhc2NGYkdoc2NyaGxkbmluYUQ4U2JiZ1BjRmJHYWx0YXNWaHNhUGN1OWttZWFEY2VmaERhbGNyZmdsYzhKOWhtYmthSGhEeGVrYURjZWZoRGthc2NlNGNiYXNjZUc5UjdhbWZnbWhIa2RuZG5hQ2NzU21iYURoc3hla2FEY2VmaHNhRDhTYmJnbGNGZUdoUGRuYWxjdTlrbWJhRGN2ZmhPYVBjRmJHaFBjcmhsZG5pbmFzOFNiYmdEY0ZiR2FsdGFQVmhQYURjdTlrbWVhc2NlZmhzYWxjcmZnbGM4SjlobWJrYU9oc3hla2FzY2VmaHNrYVBjZTRjYmFQY2VHOVI3YW1mZ21oT2tkbmRuYUFjc1NtYmFzaGx4ZWthc2NlZmhsYXM4U2JiZ0RjRmVHaFBkbmFEY3U5a21iYXNjdmZoemFQY0ZiR2hQY3JoRGRuaW5hbDhTYmJnc2NGYkdhRHRhUFZoUGFzY3U5a21lYWxjZWZobGFEY3JmZ0RjOEo5aG1ia2F6aGx4ZWthbGNlZmhsa2FQY2U0Y2JhUGNlRzlSN2FtZmdtaHprZG5kbmFkY2Q5aG1iYWJhcmNldGZnRGFIODdlYmFEY2xmYXo4N2ViYURjZGZhTzg3ZWJ4ZWthYmFyY2R0ZmdEYUhCZGJhRGN3ZmF6QmRiYURjbGZhT0JkYmthdmM7YWJmYW9jaXRmZ0RhT0JkYmFEYUhCZGxhdmFpY2R0ZmFIQmRiYXZjO2FiZmFvY2VmY3NHY2l0ZmdEYXpCZGJhRGFPQmRsYXZhaWNlZmdpY3NHY2R0ZmFPQmRiYXZjO2FiZmFvY2RmY3NHY2l0ZmdEYUhCZGJhRGF6QmRsYXZhaWFDVGFDY3NTVmZnaWNzR2NkdGZhekJkYmFpYUFUYUFjc1NWZmhpYW9jaWZob2thd2NlZmh3YW9jc0dob2FpY3NHaGlhcmNpZmdyYWU2bWJra2NiYzk5YWxhcVNFaG9rYXZjO2FlZjhLampqamJhb2s6Y2xldnU4SmpqampiY3o5Umh2ZG5hbGFlY3ZmOXBtYmM5OnNrZG5haVJiYmM7OmVHYztxZVNtYmN1c2thdjljYjgzaXdhaWNlZmhvYWlhbGZjOThmaHJkbmFlVG1iZG5hZGNkU21iY2Jod2luZG5hb2FyNm1iYzk6c2thb2NlZmhsYW84U2JiZ2ljRmVHaGRkbmRuYWljdTltbWJhbGhveGVrYW9jdmZob2FkY0ZiR2hkY3JoaWRuaW5hbDhTYmJnRGNGYkdhaXRhZFZoZGFEY3U5a21lYWxjZWZobGFpY3JmZ2ljOEo5aG1ieGRra2FsY2VmaG9rYWJhd2NkdGZhZGM4RXRjOEY5MWFkY2Q0N2F2Y3dmYWRjZUdjZHRWZ2x5ZGJmZ2lCZGJhbGFpQmRiYXdjZWZnd2FlOWhtYnhka2tjYmh3aW5kbmFvYXI2bWJjOTpza2FvY2VmaGxhbzhTYmJnaWNGZUdoZGRuZG5haWN1OW1tYmFsaG94ZWthb2N2ZmhvYWRjRmJHaGRjcmhpZG5pbmFsOFNiYmdEY0ZiR2FpdGFkVmhkYURjdTlrbWVhbGNlZmhsYWljcmZnaWM4SjlobWJ4ZGtrYWxjZWZob2thYmF3Y2V0ZmFkYzhFdGM4RjkxYWRjZDQ3YXZjd2ZhZGNlR2NkdFZnbHlkYmZnaTg3ZWJhbGFpQmRiYXdjZWZnd2FlOWhtYmtrY2JjOTlhb2FyU0VrOkx2b2V1ZTk5ZHVkOTlldWQ5OWRuZG5hZGNsOWhtYmFlVG1laW5kbmRuYWJjZGZnZDhTYmI6WWFiOFNiYmdpOllnbDpsOnRhYmNlZmd2OFNiYmdvOllncjpsOnRnd0piYjs6OWNhd2F3TkpiYmJiYXdhd0piYmJiOUdnREVncTptZ2thcWFpY2I5aUVhbE1nd2F3TmFrYXFhb2NiOWlFYXJNZ3FhcU5NTTpyOnZnbE5KYmJiWkpiYmI6O2FERU1ncjpsSmJiYjlwOURUbWJhcjpPaGl4ZWtjampqajk0aGlrYWRhaTg2YmJkbmRuYXFhbE5KYmJiWkpiYmI6O2FxSmJiYmI5R0VNZ3E6bEpiYmI5cDlEVG1iYXE6T2hkeGVrY2pqamo5NGhka2F2YWQ4NmJiZG5kbmF3YWxOSmJiYlpKYmJiOjthd0piYmJiOUdFTWd3OmxKYmJiOXA5RFRtYmF3Ok9oZHhla2NqampqOTRoZGthYmFkODZiYmFiY2xmaGJhZWN1ZmdlbWJ4ZGtrYWVUbWJpbmRuZG5hYmNsZmdkOFVlYjpZYWI4VWViZ2k6WWdsOmw6dGFiY2RmZ3Y4VWViZ286WWdyOmw6dGd3SmI7OkZTYXdhd05KYmJiYmF3YXdKYmJiYjlHZ0RFZ3E6bWdrYXFhaWNiOWlFYWxNZ3dhd05ha2FxYW9jYjlpRWFyTWdxYXFOTU06cjp2Z2xOSmJiYlpKYmJiOjthREVNZ3I6bEpiYmI5cDlEVG1iYXI6T2hpeGVrY2pqamo5NGhpa2FkYWk4N2ViZG5kbmFxYWxOSmJiYlpKYmJiOjthcUpiYmJiOUdFTWdxOmxKYmJiOXA5RFRtYmFxOk9oZHhla2NqampqOTRoZGthdmFkODdlYmRuZG5hd2FsTkpiYmJaSmJiYjo7YXdKYmJiYjlHRU1ndzpsSmJiYjlwOURUbWJhdzpPaGR4ZWtjampqajk0aGRrYWJhZDg3ZWJhYmN3ZmhiYWVjdWZnZW1ia2trOjRpb2l1ZTk5ZHVkOTlkdWQ5OWRuYWVUbWJjYmhpYWJobGluZG5kbmFsOFVlYmd2Ollnb0o6amk6MVNhbGNvZjhVZWJncmNpVmd3Olk6dmdETkpiYmJaSmJiYjo7YXZjdTlrRU1ncTpsSmJiYjlwOURUbWJhcTpPaGt4ZWtjampqajk0aGtrYWxjbGY4VWViaHZhbGNkZjhVZWJoeGFsYXJjZWZjaUdjZXRmYWs4N2ViZG5kbmF4OllncWFETkpiYmJaSmJiYjo7YXhjdTlrRU1nbTpsSmJiYjlwOURUbWJhbTpPaHh4ZWtjampqajk0aHhrYWJhaWFyY2lHZ2tmY2Q3Y2V0ZmF4ODdlYmRuZG5hdjpZZ21hRE5KYmJiWkpiYmI6O2F2Y3U5a0VNZ1A6bEpiYmI5cDlEVG1iYVA6T2h2eGVrY2pqamo5NGh2a2FsYXJjdWZjaUdjZXRmYXY4N2ViZG5kbmF3YXcyOlpnUGFQTWFvYW9OOnRhcWFxTjp0YW1hbU46dGdvSmJiYmJhb0piYmJiOUdFOnJhRE5KYmJiWk1nRDpsSmJiYjlwOURUbWJhRDpPaHJ4ZWtjampqajk0aHJrYWxha2NldGZhcjg3ZWJhbGN3ZmhsYWljbGZoaWFlY3VmZ2VtYmtrazltYmRuYWRjZDRhZTJnZFRtYmluYWJhYnlkYmdlY3d0Y3c5MTpZYWVjZTkxY2pqajk4R2Nqamo7OGlmOjpOVWRiYWJjbGZoYmFkY3VmZ2RtYmtrazpUdmlydWQ5OWV1ZG5kbmFkY2w5aG1iYWVUbWVpbmRuZG5hYlJiYmdpYWJjZWZnbDhTYmJndmFiY2RmZ284U2JiZ3JmOVI6WUpiYnVKYWJjaWZnd1JiYmdkY2U0YWRWZ0RjZDRhRFZnRGNsNGFEVmdEOlo6dmdxTkpiYmJaTWdrOmxKYmJiOXA5RFRtYmFrOk9oeHhla2NqampqOTRoeGthb2F4ODZiYmRuZG5hcmFpZjpZYXFOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hveGVrY2pqamo5NGhva2FsYW84NmJiZG5kbmF2YWlmYXI5UjpZYXFOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hpeGVrY2pqamo5NGhpa2FiYWk4NmJiZG5kbmFEYWRjZXRHYWRjZUdWOlphcU5KYmJiWk1ncTpsSmJiYjlwOURUbWJhcTpPaGR4ZWtjampqajk0aGRrYXdhZDg2YmJhYmNsZmhiYWVjdWZnZW1ieGRra2FlVG1iaW5kbmRuYWI4VmViZ2lhYmNkZmdsOFVlYmd2YWJjbGZnbzhVZWJncmY5UjpZSmJGdTloYWJjb2ZndzhWZWJnZGNlNGFkVmdEY2Q0YURWZ0RjbDRhRFZnRGN3NGFEVmdEOlo6dmdxTkpiYmJaTWdrOmxKYmJiOXA5RFRtYmFrOk9oeHhla2NqampqOTRoeGthb2F4ODdlYmRuZG5hcmFpZjpZYXFOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hveGVrY2pqamo5NGhva2FsYW84N2ViZG5kbmF2YWlmYXI5UjpZYXFOSmJiYlpNZ2s6bEpiYmI5cDlEVG1iYWs6T2hpeGVrY2pqamo5NGhpa2FiYWk4N2ViZG5kbmFEYWRjZXRHYWRjZUdWOlphcU5KYmJiWk1ncTpsSmJiYjlwOURUbWJhcTpPaGR4ZWtjampqajk0aGRrYXdhZDg3ZWJhYmN3ZmhiYWVjdWZnZW1ia2trOXRlaXVjYmNieWQ6SzpHOmNqYmdlYWJjaWZjOThHZmdiQmQ6SzpHOmNqYmRuZG5hYlpiY3p0Z2Q5bm1iY3VoaWFiYWQ5UmNGRmlmY3o0bmJjdVNtZWthZWhpa2FpaztMZWVldWRuZG5hZWFiVmNpR1RtYmFiaGl4ZWtkbmRuYWRjejlwbWJhYmhpeGVrYWJoaWluYWlhZXlkYkJkYmFpY2xmYWVjbGZ5ZGJCZGJhaWN3ZmFlY3dmeWRiQmRiYWljeGZhZWN4ZnlkYkJkYmFlY3pmaGVhaWN6ZmhpYWRjOVdmZ2RjczBtYmtrYWRjbDZtYmluYWlhZXlkYkJkYmFlY2xmaGVhaWNsZmhpYWRjOThmZ2RjaTBtYmtrZG5hZFRtYmluYWlhZVJiYjg2YmJhaWNlZmhpYWVjZWZoZWFkY3VmZ2RtYmtrYWJrO2FlZWR1ZG5kbmFiY2lHVG1iYWJoaXhla2FlY0ZlR2M6YjpjOmV3MmhsZG5kbmFkY3o5cG1iYWJoaXhla2FiaGlpbmFpYWxCZGJhaWN4ZmFsQmRiYWljd2ZhbEJkYmFpY2xmYWxCZGJhaWN6ZmhpYWRjOVdmZ2RjczBtYmtrYWRjbDZtYmluYWlhbEJkYmFpY2xmaGlhZGM5OGZnZGNpMG1ia2tkbmFkVG1iaW5haWFlODZiYmFpY2VmaGlhZGN1ZmdkbWJra2Fia2s4M2RiY2o6R2RrOEtiYmJiZGJiYmxiYmJ3YmJiYmJiYmViYmJkYmJibGJiYndiYmJiYzpLOkdka2w4VzpxYmIiLGU9ImI5SDc5VGViYmJlS2w5R2JiOUd2dXV1dXVldTlHaXV1dWI5R2V1ZXVpeGtiYmViZWVkZGRkaWx2ZTlXZWVldmllYmVvd2V1ZWNqOkdka3I7TmVxbzlUVzlUOVZWOTVkYkg5RjlGOTM5SDc5VDlGOUo5SDIyOUY5SnQ5VlY3YmI4QTlUVzc5TzlWOVd0OUY5S1c5SjlWOUtXOXdXVnRXOTQ5YzkxOU05TVdWYmRZOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1c2OVU5S1c5NDljOTE5TTlNV1ZibEU5VFc3OU85VjlXdDlGOUtXOUo5VjlLVzY5VTlLVzk0OXRXRzkxVzlVOUpXYnZMOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1dTOVAydFdWOXA5SnRib0s5VFc3OU85VjlXdDlGOUtXOUo5VjlLV1M5UDJ0V1Y5cjkxOUh0YnJMOVRXNzlPOVY5V3Q5RjlLVzlKOVY5S1dTOVAydFdWVDk0OVdid1k5VFc3OU85VjlXdDlGOUtXOUo5VjlLV1M5UDJ0V1ZKOVYyOVZWYkRsNzlJVjlSYnFxOjU5RGtsYnppazk0ZXZ1OEpqampqYmN6OVJoYmNiaGVpbmNiaGRjYmhpaW5hYmN3ZmFkZmFpY2p1YWVhZDRjZUdnbEU4NmJiYWlhbGZoaWFkY2VmZ2RjdzlobWJrYWVhaTg2YjpxOlc6Y2piYWVjaXRhYjhQaXc4M2k6cTpHOmNqYmFlY2VmZ2VjamQ5aG1ia2s6U0JsRXVkOTdkdXI5NzhKampqamJjajtrYjlSZ3Y4S2pqampiYzk6aG9kbmFsVG1iY3Vob2FpUmJiZ3JjO1dlR2M6R2U5aG1iYXJjc0dnd2NlMG1iYzk6aG9hbGN1ZmFkY2Q0Y2Jhd0VnRGFkZmdyY0tjYWF3RWdxYXJhcTBFZ2s2bWJhaWFsZmd4YXI5UmhvZG5hZFRnbW1iYXZhb2FkOzhxYmJrYWljZWZoUGNqO2FiYWQ5VWM7V0ZiR2NqZGFkY2EwRWhzZG5kbmRuYWRUbWJhb2FkZmh6Y2JoSGluYWVhSDlubWRheGFQOVJhRDZtaWFiYUhhZDJmZ09hdmNqZGZhc2FlYUg5UmFIYXNmYWU2RWdBYUFjc2Znb2M5V0dnQ1NFaFhhUGFEZmhRYW9jbDRjaWZjZDRoTGF2Y2o7Y2JmYUNjZXRmaEthdmNqO2NiZmFDY2kyZmhZYXZjajtjYmZhQ2ZoOEFjYmhFYW9jO2FiNmgzaW5jYmg1ZG5hd1RtYmFQYUVjZDRmUmJiaDVrY2JoOEVhdmNqO2NiZmg4RmluZG5kbmRuZG5hNWE4RWNldDRjaUdnb2M5OmZQZGViZGtheGFROVJhQzZtd2RuYUNUbWJhdmNqO2NiZmE4RWFDMmZhUWFDOzhxYmJrYVFhQWZoUXhka2FDVG1lYXZjajtjYmZhOEVhQzJmY2JhQzs4a2J4ZWtheGFROVJhTDZtb2FvY2xWY2Jhd0VocmFRYUxmaG9jYmhpZG5hM21iYXhhbzlSYztHYjZtYmNiaGxpbmE4RmFsZmhpZG5kbmRuZG5kbmRuYVFhbGNvNGZSYmJncWNpR2FyZlBEYmVkaWJsZWRpYmthaXB4YmJiYmJiYmJiYmJiYmJiYnBrbGJ4bGthaWFvcGJibGFvcGJiYmdhY2xwOm1lYWFwbWJ6ZUhkT2lBbEN2WG9RckxnYWNkcDptZWFhcG1iemVIZE9pQWxDdlhvUXJMcHhpaWlpaWlpaWlpaWlpaWlpcDlvZ2hweGlpaWlpaWlpaWlpaWlpaWlwOEpnYXA1YjljakY7ODs0O1c7RzthYjk6OWNVMTpOZ2djaXRwYmk6cTpHOmNqYmFnUmI6cTpXOmNqYmdncHNhYXA1ZTljakY7ODs0O1c7RzthYjk6OWNVMTpOZzhKY2l0cGJpOnE6RzpjamJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUGFoYWFwOXNwa2xiYWdhb2NsZmZhOEpSYjpxOlc6Y2piZmhveGlrYWlhb3BiYndhb3BiYmJnYWNscDptZWFhcG1iemVIZE9pQWxDdlhvUXJMcHhzc3Nzc3Nzc3Nzc3Nzc3NzcDlvZ2hweHNzc3Nzc3Nzc3Nzc3Nzc3NwOEpnYXA1YjljakY7ODs0O1c7RzthYjk6OWNVMTpOZ2djaXRwYmk6cTpHOmNqYmFnUmI6cTpXOmNqYmdncHNhYXA1ZTljakY7ODs0O1c7RzthYjk6OWNVMTpOZzhKY2l0cGJpOnE6RzpjamJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUGFoYWFwOXNwa2xiYWdhb2N3ZmZhOEpSYjpxOlc6Y2piZmhveGRrYWlhb3BiYmJwa2xiYW9jemZob3hla2FpYW9wYmJkYW9SYmJnZ2NpdHBiaTpxOkc6Y2piYWdSYjpxOlc6Y2piZ2dwc2FvUmJlZzhKY2l0cGJpOnE6RzpjamJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUHBrbGJhZ2FvY2RmZmE4SlJiOnE6VzpjamJmaG9rZG5kbmRuZG5kbmRuYXFjZDRjaUdhcmZQRGJlZGlibGVkaWJrYWljemZweGJiYmJiYmJiYmJiYmJiYmJwa2xieGxrYWljemZhb3BiYmxhb3BiYmJnYWNscDptZWFhcG1iemVIZE9pQWxDdlhvUXJMZ2FjZHA6bWVhYXBtYnplSGRPaUFsQ3ZYb1FyTHB4aWlpaWlpaWlpaWlpaWlpaXA5b2docHhpaWlpaWlpaWlpaWlpaWlpcDhKZ2FwNWI5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdnY2l0cGJpOnE6RzpjamJhZ1JiOnE6VzpjamJnZ3BzYWFwNWU5Y2pGOzg7NDtXO0c7YWI5OjljVTE6Tmc4SmNpdHBiaTpxOkc6Y2picDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBhaGFhcDlzcGtsYmFnYW9jbGZmYThKUmI6cTpXOmNqYmZob3hpa2FpY3pmYW9wYmJ3YW9wYmJiZ2FjbHA6bWVhYXBtYnplSGRPaUFsQ3ZYb1FyTHB4c3Nzc3Nzc3Nzc3Nzc3Nzc3A5b2docHhzc3Nzc3Nzc3Nzc3Nzc3NzcDhKZ2FwNWI5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdnY2l0cGJpOnE6RzpjamJhZ1JiOnE6VzpjamJnZ3BzYWFwNWU5Y2pGOzg7NDtXO0c7YWI5OjljVTE6Tmc4SmNpdHBiaTpxOkc6Y2picDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBhaGFhcDlzcGtsYmFnYW9jd2ZmYThKUmI6cTpXOmNqYmZob3hka2FpY3pmYW9wYmJicGtsYmFvY3pmaG94ZWthaWN6ZmFvcGJiZGFvUmJiZ2djaXRwYmk6cTpHOmNqYmFnUmI6cTpXOmNqYmdncHNhb1JiZWc4SmNpdHBiaTpxOkc6Y2picDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBwa2xiYWdhb2NkZmZhOEpSYjpxOlc6Y2piZmhva2RuZG5kbmRuZG5kbmFxY2w0Y2lHYXJmUERiZWRpYmxlZGlia2FpY2FmcHhiYmJiYmJiYmJiYmJiYmJicGtsYnhsa2FpY2FmYW9wYmJsYW9wYmJiZ2FjbHA6bWVhYXBtYnplSGRPaUFsQ3ZYb1FyTGdhY2RwOm1lYWFwbWJ6ZUhkT2lBbEN2WG9RckxweGlpaWlpaWlpaWlpaWlpaWlwOW9naHB4aWlpaWlpaWlpaWlpaWlpaXA4SmdhcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nZ2NpdHBiaTpxOkc6Y2piYWdSYjpxOlc6Y2piZ2dwc2FhcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nOEpjaXRwYmk6cTpHOmNqYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQYWhhYXA5c3BrbGJhZ2FvY2xmZmE4SlJiOnE6VzpjamJmaG94aWthaWNhZmFvcGJid2FvcGJiYmdhY2xwOm1lYWFwbWJ6ZUhkT2lBbEN2WG9RckxweHNzc3Nzc3Nzc3Nzc3Nzc3NwOW9naHB4c3Nzc3Nzc3Nzc3Nzc3Nzc3A4SmdhcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nZ2NpdHBiaTpxOkc6Y2piYWdSYjpxOlc6Y2piZ2dwc2FhcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nOEpjaXRwYmk6cTpHOmNqYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQYWhhYXA5c3BrbGJhZ2FvY3dmZmE4SlJiOnE6VzpjamJmaG94ZGthaWNhZmFvcGJiYnBrbGJhb2N6ZmhveGVrYWljYWZhb3BiYmRhb1JiYmdnY2l0cGJpOnE6RzpjamJhZ1JiOnE6VzpjamJnZ3BzYW9SYmVnOEpjaXRwYmk6cTpHOmNqYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQcGtsYmFnYW9jZGZmYThKUmI6cTpXOmNqYmZob2tkbmRuZG5kbmRuZG5hcWNvNGFyZlBEYmVkaWJsZWRpYmthaWM4V2ZweGJiYmJiYmJiYmJiYmJiYmJwa2xieGxrYWljOFdmYW9wYmJsYW9wYmJiZ2FjbHA6bWVhYXBtYnplSGRPaUFsQ3ZYb1FyTGdhY2RwOm1lYWFwbWJ6ZUhkT2lBbEN2WG9RckxweGlpaWlpaWlpaWlpaWlpaWlwOW9naHB4aWlpaWlpaWlpaWlpaWlpaXA4SmdhcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5naWNpdHBiaTpxOkc6Y2piYWlSYjpxOlc6Y2piZ2lwc2FhcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5ncWNpdHBiaTpxOkc6Y2picDlVcG1iZWRpbHZvcnpIT0FDWFFMcFBhaGFhcDlzcGtsYmFpYW9jbGZmYXFSYjpxOlc6Y2piZmhveGlrYWljOFdmYW9wYmJ3YW9wYmJiZ2FjbHA6bWVhYXBtYnplSGRPaUFsQ3ZYb1FyTHB4c3Nzc3Nzc3Nzc3Nzc3Nzc3A5b2docHhzc3Nzc3Nzc3Nzc3Nzc3NzcDhKZ2FwNWI5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdpY2l0cGJpOnE6RzpjamJhaVJiOnE6VzpjamJnaXBzYWFwNWU5Y2pGOzg7NDtXO0c7YWI5OjljVTE6TmdxY2l0cGJpOnE6RzpjamJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUGFoYWFwOXNwa2xiYWlhb2N3ZmZhcVJiOnE6VzpjamJmaG94ZGthaWM4V2Zhb3BiYmJwa2xiYW9jemZob3hla2FpYzhXZmFvcGJiZGFvUmJiZ2ljaXRwYmk6cTpHOmNqYmFpUmI6cTpXOmNqYmdpcHNhb1JiZWdxY2l0cGJpOnE6RzpjamJwOVVwbWJlZGlsdm9yekhPQUNYUUxwUHBrbGJhaWFvY2RmZmFxUmI6cTpXOmNqYmZob2thbGM7YWJmaGlhbGNqZWZhQzBtZWFpaGxheGFvOVJjO0ZiMG1ia2tkbmFpYUM5cG1iYWljaTRobGluYXhhbzlSY0s2bXdhOEZhaWZocWRuZG5kbmRuZG5kbmFRYWljbzRmUmJiYWxjb0c0Y2lHYXJmUERiZWRpYmxlZGlia2FxcHhiYmJiYmJiYmJiYmJiYmJicGtiYnhsa2FxYW9wYmJsYW9wYmJiZ2FjbHA6bWVhYXBtYnplSGRPaUFsQ3ZYb1FyTGdhY2RwOm1lYWFwbWJ6ZUhkT2lBbEN2WG9RckxweGlpaWlpaWlpaWlpaWlpaWlwOW9naHB4aWlpaWlpaWlpaWlpaWlpaXA4SmdhcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nZ2NpdHBiaTpxOkc6Y2piYWdSYjpxOlc6Y2piZ2dwc2FhcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nOEpjaXRwYmk6cTpHOmNqYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQYWhhYXA5c3BrYmJhZ2FvY2xmZmE4SlJiOnE6VzpjamJmaG94aWthcWFvcGJid2FvcGJiYmdhY2xwOm1lYWFwbWJ6ZUhkT2lBbEN2WG9RckxweHNzc3Nzc3Nzc3Nzc3Nzc3NwOW9naHB4c3Nzc3Nzc3Nzc3Nzc3Nzc3A4SmdhcDViOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nZ2NpdHBiaTpxOkc6Y2piYWdSYjpxOlc6Y2piZ2dwc2FhcDVlOWNqRjs4OzQ7VztHO2FiOTo5Y1UxOk5nOEpjaXRwYmk6cTpHOmNqYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQYWhhYXA5c3BrYmJhZ2FvY3dmZmE4SlJiOnE6VzpjamJmaG94ZGthcWFvcGJiYnBrYmJhb2N6ZmhveGVrYXFhb3BiYmRhb1JiYmdnY2l0cGJpOnE6RzpjamJhZ1JiOnE6VzpjamJnZ3BzYW9SYmVnOEpjaXRwYmk6cTpHOmNqYnA5VXBtYmVkaWx2b3J6SE9BQ1hRTHBQcGtiYmFnYW9jZGZmYThKUmI6cTpXOmNqYmZob2thbGNkZmhsYWljemZnaWFDNm1ia2thb2hRYW9UbW9rYThGYUNmaDhGYThFY2VmZzhFY2w5aG1ia2RuZG5kbmRuYXdUbWJhemFFY2Q0ZlJiYmdsY2lHUGxiZWR3YmthQ1RtZGFYYUVmaGxhdmFFZnBiZGJoOEtjYmhvaW5hbGF2Y2o7Y2JmYW9mcGJsYmc4TGE4QWFvZnBibGJnOE1wbWJ6ZUhkT2lBbEN2WG9RckxnOE5hS2FvZnBibGJneWFZYW9mcGJsYmc4UHBtYnplSGRPaUFsQ3ZYb1FyTGdJcG1iZXpIZGlPQWx2Q1hvclFMZ2FjZXA5VGFhcHhlZWVlZWVlZWVlZWVlZWVlZ2hwOW9wOUhwOXJnYWE4S3A5VWc4S3A5QWJiYmFsYWRmZ2xhOEthYWFhcG1sdm9ybHZvcmx2b3Jsdm9ycDlVZzhLcDlBYmJiYWxhZGZnbGE4S2FhYWFwbXdEcWt3RHFrd0Rxa3dEcWtwOVVnOEtwOUFiYmJhbGFkZmdsYThLYWFhYXBteG1Qc3htUHN4bVBzeG1Qc3A5VWc4S3A5QWJiYmFsYWRmZ2xhOEthOE5hSXBtd0RLWXFrOEFFeG0zNVBzOEU4RmdhY2VwOVRhYWFocDlvcDlIcDlyZ2FwOVVnOEtwOUFiYmJhbGFkZmdsYThLYWFhYXBtbHZvcmx2b3Jsdm9ybHZvcnA5VWc4S3A5QWJiYmFsYWRmZ2xhOEthYWFhcG13RHFrd0Rxa3dEcWt3RHFrcDlVZzhLcDlBYmJiYWxhZGZnbGE4S2FhYWFwbXhtUHN4bVBzeG1Qc3htUHNwOVVnOEtwOUFiYmJhbGFkZmdsYThLYThMYThNcG13S0RZcThBa0V4M201UDhFczhGZzhMYXlhOFBwbXdLRFlxOEFrRXgzbTVQOEVzOEZnOE1wbWJlekhkaU9BbHZDWG9yUUxnYWNlcDlUYWFhaHA5b3A5SHA5cmdhcDlVZzhLcDlBYmJiYWxhZGZnbGE4S2FhYWFwbWx2b3Jsdm9ybHZvcmx2b3JwOVVnOEtwOUFiYmJhbGFkZmdsYThLYWFhYXBtd0Rxa3dEcWt3RHFrd0Rxa3A5VWc4S3A5QWJiYmFsYWRmZ2xhOEthYWFhcG14bVBzeG1Qc3htUHN4bVBzcDlVZzhLcDlBYmJiYWxhZGZnbGE4S2E4TGE4TXBtd0RLWXFrOEFFeG0zNVBzOEU4RmdhY2VwOVRhYWFocDlvcDlIcDlyZ2FwOVVnaHA5QWJiYmFsYWRmZ2xhaGFhYWFwbWx2b3Jsdm9ybHZvcmx2b3JwOVVnaHA5QWJiYmFsYWRmZ2xhaGFhYWFwbXdEcWt3RHFrd0Rxa3dEcWtwOVVnaHA5QWJiYmFsYWRmZ2xhaGFhYWFwbXhtUHN4bVBzeG1Qc3htUHNwOVVnOEtwOUFiYmJhbGFkZmhsYW9jemZnb2FDNm1ieGlra2FDVG1lYVhhRWZobGF2YUVmcGJkYmg4S2NiaG9pbmFsYXZjajtjYmZhb2ZwYmxiZzhMYThBYW9mcGJsYmc4TXBtYnplSGRPaUFsQ3ZYb1FyTGc4TmFLYW9mcGJsYmd5YVlhb2ZwYmxiZzhQcG1iemVIZE9pQWxDdlhvUXJMZ0lwbWJlekhkaU9BbHZDWG9yUUxnYWNlcDpuZWFhcHhlYmViZWJlYmViZWJlYmViZ2hwOW9wOmJlcDlyZ2FhOEtwOm9lZzhLcDlBYmJiYWxhZGZnbGE4S2FhYWFwbWx2b3Jsdm9ybHZvcmx2b3JwOm9lZzhLcDlBYmJiYWxhZGZnbGE4S2FhYWFwbXdEcWt3RHFrd0Rxa3dEcWtwOm9lZzhLcDlBYmJiYWxhZGZnbGE4S2FhYWFwbXhtUHN4bVBzeG1Qc3htUHNwOm9lZzhLcDlBYmJiYWxhZGZnbGE4S2E4TmFJcG13REtZcWs4QUV4bTM1UHM4RThGZ2FjZXA6bmVhYWFocDlvcDpiZXA5cmdhcDpvZWc4S3A5QWJiYmFsYWRmZ2xhOEthYWFhcG1sdm9ybHZvcmx2b3Jsdm9ycDpvZWc4S3A5QWJiYmFsYWRmZ2xhOEthYWFhcG13RHFrd0Rxa3dEcWt3RHFrcDpvZWc4S3A5QWJiYmFsYWRmZ2xhOEthYWFhcG14bVBzeG1Qc3htUHN4bVBzcDpvZWc4S3A5QWJiYmFsYWRmZ2xhOEthOExhOE1wbXdLRFlxOEFrRXgzbTVQOEVzOEZnOExheWE4UHBtd0tEWXE4QWtFeDNtNVA4RXM4Rmc4TXBtYmV6SGRpT0FsdkNYb3JRTGdhY2VwOm5lYWFhaHA5b3A6YmVwOXJnYXA6b2VnOEtwOUFiYmJhbGFkZmdsYThLYWFhYXBtbHZvcmx2b3Jsdm9ybHZvcnA6b2VnOEtwOUFiYmJhbGFkZmdsYThLYWFhYXBtd0Rxa3dEcWt3RHFrd0Rxa3A6b2VnOEtwOUFiYmJhbGFkZmdsYThLYWFhYXBteG1Qc3htUHN4bVBzeG1Qc3A6b2VnOEtwOUFiYmJhbGFkZmdsYThLYThMYThNcG13REtZcWs4QUV4bTM1UHM4RThGZ2FjZXA6bmVhYWFocDlvcDpiZXA5cmdhcDpvZWdocDlBYmJiYWxhZGZnbGFoYWFhYXBtbHZvcmx2b3Jsdm9ybHZvcnA6b2VnaHA5QWJiYmFsYWRmZ2xhaGFhYWFwbXdEcWt3RHFrd0Rxa3dEcWtwOm9lZ2hwOUFiYmJhbGFkZmdsYWhhYWFhcG14bVBzeG1Qc3htUHN4bVBzcDpvZWc4S3A5QWJiYmFsYWRmaGxhb2N6ZmdvYUM2bWJ4ZGtrYUNUbWJhWGFFZmhyY2Job2NiYWxjbDRnbDlSYzhGR2hpYXZhRWZwYmRiaGhpbmFyYXZjajtjYmZhb2ZwYmxiZzhLYThBYW9mcGJsYmc4THBtYnplSGRPaUFsQ3ZYb1FyTGc4TWFLYW9mcGJsYmc4TmFZYW9mcGJsYmd5cG1iemVIZE9pQWxDdlhvUXJMZzhQcG1iZXpIZGlPQWx2Q1hvclFMZ2FhaXA6UmVhYWFscDpUZXA5cWdhYWhwOXJnaHA5QWJiYmFyYWRmZ3JhaGFhYWFwbWx2b3Jsdm9ybHZvcmx2b3JwOXJnaHA5QWJiYmFyYWRmZ3JhaGFhYWFwbXdEcWt3RHFrd0Rxa3dEcWtwOXJnaHA5QWJiYmFyYWRmZ3JhaGFhYWFwbXhtUHN4bVBzeG1Qc3htUHNwOXJnaHA5QWJiYmFyYWRmZ3JhaGE4TWE4UHBtd0RLWXFrOEFFeG0zNVBzOEU4RmdhYWlwOlJlYWFhbHA6VGVwOXFnYXA5cmdocDlBYmJiYXJhZGZncmFoYWFhYXBtbHZvcmx2b3Jsdm9ybHZvcnA5cmdocDlBYmJiYXJhZGZncmFoYWFhYXBtd0Rxa3dEcWt3RHFrd0Rxa3A5cmdocDlBYmJiYXJhZGZncmFoYWFhYXBteG1Qc3htUHN4bVBzeG1Qc3A5cmdocDlBYmJiYXJhZGZncmFoYThLYThMcG13S0RZcThBa0V4M201UDhFczhGZzhLYThOYXlwbXdLRFlxOEFrRXgzbTVQOEVzOEZnOExwbWJlekhkaU9BbHZDWG9yUUxnYWFpcDpSZWFhYWxwOlRlcDlxZ2FwOXJnaHA5QWJiYmFyYWRmZ3JhaGFhYWFwbWx2b3Jsdm9ybHZvcmx2b3JwOXJnaHA5QWJiYmFyYWRmZ3JhaGFhYWFwbXdEcWt3RHFrd0Rxa3dEcWtwOXJnaHA5QWJiYmFyYWRmZ3JhaGFhYWFwbXhtUHN4bVBzeG1Qc3htUHNwOXJnaHA5QWJiYmFyYWRmZ3JhaGE4S2E4THBtd0RLWXFrOEFFeG0zNVBzOEU4RmdhYWlwOlJlYWFhbHA6VGVwOXFnYXA5cmdocDlBYmJiYXJhZGZncmFoYWFhYXBtbHZvcmx2b3Jsdm9ybHZvcnA5cmdocDlBYmJiYXJhZGZncmFoYWFhYXBtd0Rxa3dEcWt3RHFrd0Rxa3A5cmdocDlBYmJiYXJhZGZncmFoYWFhYXBteG1Qc3htUHN4bVBzeG1Qc3A5cmdocDlBYmJiYXJhZGZocmFvY3pmZ29hQzZtYmtrYUVjbGZnRWFkNm1ia2RuYVhhdmNqZGY5aG1iYUFhZDJnb1RtYmFPYXZjamRmYW87OHFiYmtkbmFtbWJhdmFYYUFjdWZhZDJmYWQ7OHFiYmthQWFIZmhIYzk6aG9hUWhQYVFtYnhsa2thZVRtYmFEYWxmaHJjYmhvY3VobGluYXJhbGFEOVJnbGZhRDZtZGFzYWVhbzlSYW9hc2ZhZTZFYW9mZ29hZTZtYmthaWFsOVJoUGtjYmM5OWF4YVA5UmFrU0Vob3hla2M5Omhva2F2Y2o7a2JmOEtqampqYmFva3diejpiampqYmtOc2V6dThKampqamJjO2FlOVJndjhLampqamJjOTpob2RuYWxhZWNpOVVncmNIZjZtYmN1aG9haVJiYmd3YztXZUdjO0dlOWhtYmF3Y3NHZ0RjZTBtYmF2YzthYmZjRmVjamU7OGtiYXY5Y3U4M2lVYXY5Y3U4M2k4V2F2OWN1ODNpeWF2OWN1ODNpYWF2OWN1ODNpS2F2OWN1ODNpemF2OWN1ODNpd2F2OWN1ODNpYmFpYWxmYzlXZmhxYWljZWZnd2FyZmhsZG5hZVRtYmNtY3NhRGNlU0Voa2NiaHhjYmhtY2JocmNiaGljYmhvaW5kbmFsYXE5bm1iYzk6aG94aWtkbmRuYXdSYmJnRGM7VmUwbWJhdmM7YWJmYW9hRGN1N2dQY2w0ZmNzR2NpdGZnc3lkbGh6YXN5ZGJoSGRuZG5hRGNzR2dzYWs5cG1iYXZhaWFQZmNzR2NkdGZ5ZGJheGFzRWhEYXhhc1RnT2ZoeHhla2RuZG5hc2NzU21iY2VoT2FzYzk4N2FzYW1mZmNlZmhEeGVrYWxjZWZoRGFsOFNiYmdzY0ZlR2hQZG5kbmFzY3U5bW1iYURobHhla2FsY3ZmaGxhUGNGYkdoUGNyaHNkbmluYUQ4U2JiZ09jRmJHYXN0YVBWaFBhT2N1OWttZWFEY2VmaERhc2NyZmdzYzhKOWhtYnhka2thRGNlZmhsa2NlaE9hUGNlNGNiYVBjZUc5UjdhbWZoRGthRGhta2F2YzthYmZhb2NpdGZnc2FEQmRiYXNhekJkbGF2YWljZHRmYURCZGJhdmM7YWJmYW9jZWZjc0djaXRmZ3NhSEJkYmFzYURCZGxhb2NkZmhvYU9haWZoaWRuYWRjZDlobWJhYmFyY2V0ZmdzYUg4N2ViYXNjbGZhRDg3ZWJhc2NkZmF6ODdlYnhka2FiYXJjZHRmZ3NhSEJkYmFzY3dmYURCZGJhc2NsZmF6QmRieGVrZG5hRGNwZTBtYmF2YWlhcWFEY3NHZlJiYmdzY2w0Z1A5UmNzR2NkdGZ5ZGJheGNlZmdPYVBFaERhdmFpYXM5UmNzR2NkdGZ5ZGJhT2FQVGd6ZmdPYXNjc0dnUEVoc2FQVGhQZG5kbmFkY2Q5aG1iYWJhcmNldGZnSGF4ODdlYmFIY2xmYXM4N2ViYUhjZGZhRDg3ZWJ4ZWthYmFyY2R0ZmdIYXhCZGJhSGN3ZmFzQmRiYUhjbGZhREJkYmthdmFpY2R0ZmF4QmRiYXZjO2FiZmFvY2l0ZmdIYURCZGJhSGF4QmRsYXZhaWNlZmdpY3NHY2R0ZmFEQmRiYXZjO2FiZmFvY2VmY3NHY2l0ZmdIYXNCZGJhSGFEQmRsYXZhaWF6ZmdpY3NHY2R0ZmFzQmRiYXZjO2FiZmFvY2RmY3NHY2l0ZmdEYXhCZGJhRGFzQmRsYW9jaWZob2FpYVBmaGlhT2FQZmh4eGVrYXhjYmFsUmJiZ3NFZ0hhRGM7OmVTZ0RmaE9hc2NzR2hBZG5kbmFzY2w0Z0NtYmFPY2VmaHp4ZWthT2h6YXZhaWFDOVJjc0djZHRmeWRiaE9rZG5kbmFBbWJhemNlZmh4eGVrYXpoeGF2YWlhczlSY3NHY2R0ZnlkYmh6a2RuZG5hRFRtYmFsY2VmaER4ZWthbGNkZmhEYWw4U2JlZ1BjRmVHaHNkbmFQY3U5a21iYWxjb2ZoSGFzY0ZiR2hzY3JobGRuaW5hRDhTYmJnUGNGYkdhbHRhc1Zoc2FQY3U5a21lYURjZWZoRGFsY3JmZ2xjOEo5aG1ia2FIaER4ZWthRGNlZmhEa2FzY2U0Y2Jhc2NlRzlSN2FtZmdtaEhrZG5kbmFDY3NTbWJhRGhzeGVrYURjZWZoc2FEOFNiYmdsY0ZlR2hQZG5hbGN1OWttYmFEY3ZmaE9hUGNGYkdoUGNyaGxkbmluYXM4U2JiZ0RjRmJHYWx0YVBWaFBhRGN1OWttZWFzY2VmaHNhbGNyZmdsYzhKOWhtYmthT2hzeGVrYXNjZWZoc2thUGNlNGNiYVBjZUc5UjdhbWZnbWhPa2RuZG5hQWNzU21iYXNobHhla2FzY2VmaGxhczhTYmJnRGNGZUdoUGRuYURjdTlrbWJhc2N2Zmh6YVBjRmJHaFBjcmhEZG5pbmFsOFNiYmdzY0ZiR2FEdGFQVmhQYXNjdTlrbWVhbGNlZmhsYURjcmZnRGM4SjlobWJrYXpobHhla2FsY2VmaGxrYVBjZTRjYmFQY2VHOVI3YW1mZ21oemtkbmRuYWRjZDlobWJhYmFyY2V0ZmdEYUg4N2ViYURjbGZhejg3ZWJhRGNkZmFPODdlYnhla2FiYXJjZHRmZ0RhSEJkYmFEY3dmYXpCZGJhRGNsZmFPQmRia2F2YzthYmZhb2NpdGZnRGFPQmRiYURhSEJkbGF2YWljZHRmYUhCZGJhdmM7YWJmYW9jZWZjc0djaXRmZ0RhekJkYmFEYU9CZGxhdmFpY2VmZ2ljc0djZHRmYU9CZGJhdmM7YWJmYW9jZGZjc0djaXRmZ0RhSEJkYmFEYXpCZGxhdmFpYUNUYUNjc1NWZmdpY3NHY2R0ZmF6QmRiYWlhQVRhQWNzU1ZmaGlhb2NpZmhva2F3Y2VmaHdhb2NzR2hvYWljc0doaWFyY2lmZ3JhZTZtYmtrY2JjOTlhbGFxU0Vob2thdmM7YWVmOEtqampqYmFvazpjbGV2dThKampqamJjejlSaHZkbmFsYWVjdmY5cG1iYzk6c2tkbmFpUmJiYzs6ZUdjO3FlU21iY3Vza2F2OWNiODNpd2FpY2VmaG9haWFsZmM5OGZocmRuYWVUbWJkbmFkY2RTbWJjYmh3aW5kbmFvYXI2bWJjOTpza2FvY2VmaGxhbzhTYmJnaWNGZUdoZGRuZG5haWN1OW1tYmFsaG94ZWthb2N2ZmhvYWRjRmJHaGRjcmhpZG5pbmFsOFNiYmdEY0ZiR2FpdGFkVmhkYURjdTlrbWVhbGNlZmhsYWljcmZnaWM4SjlobWJ4ZGtrYWxjZWZob2thYmF3Y2R0ZmFkYzhFdGM4RjkxYWRjZDQ3YXZjd2ZhZGNlR2NkdFZnbHlkYmZnaUJkYmFsYWlCZGJhd2NlZmd3YWU5aG1ieGRra2NiaHdpbmRuYW9hcjZtYmM5OnNrYW9jZWZobGFvOFNiYmdpY0ZlR2hkZG5kbmFpY3U5bW1iYWxob3hla2FvY3ZmaG9hZGNGYkdoZGNyaGlkbmluYWw4U2JiZ0RjRmJHYWl0YWRWaGRhRGN1OWttZWFsY2VmaGxhaWNyZmdpYzhKOWhtYnhka2thbGNlZmhva2FiYXdjZXRmYWRjOEV0YzhGOTFhZGNkNDdhdmN3ZmFkY2VHY2R0VmdseWRiZmdpODdlYmFsYWlCZGJhd2NlZmd3YWU5aG1ia2tjYmM5OWFvYXJTRWs7VG9pbzk3ZXVlOTdhZWM5OEdoZWRuZG5hZGNsOWhtYmFlVG1lY2JoZGluYWJhYnBiYmJnaWNLcDpSZWNLcDpTZXA7NmVnbGFpY3dwOlJlY0twOlNlcDs2ZWFscDtHZWFpY3pwOlJlY0twOlNlcDs2ZWd2cDtHZXA7S2VwO0xlZ29weGJiYmJiYmJiYmJiYmJiYmJwOjJlZ3JhbHB4YmJiamJiYmpiYmJqYmJiamd3cDlvcDlycDtLZWdscHhiYjs6OWNiYjs6OWNiYjs6OWNiYjs6OWNhbGFscDtNZWFvYW9wO01lYXZhcmF2YXdwOW9wOXJwO0tlZ2xhbHA7TWVwO0tlcDtLZXA7SmVwO05lZ3ZwO01lcHhiYm4wYmJuMGJibjBiYm4wZ3JwO0tlcHhGYmJiRmJiYkZiYmJGYmJicDlvYWlweGJiYkZiYmJGYmJiRmJiYkZwOW9wOXFhbGF2cDtNZWFycDtLZWN3cDpSZXB4YkZiYmJGYmJiRmJiYkZiYnA5b3A5cWFvYXZwO01lYXJwO0tlY3pwOlJlcHhiYkZiYmJGYmJiRmJiYkZicDlvcDlxcGtiYmFiY3pmaGJhZGNsZmdkYWU2bWJ4ZGtrYWVUbWJjYmhkaW5hYmN6ZmdEYURwYmJiZ2lweGJiYmJiYkZGYmJiYmJiRkZnd3A5b2FicGJiYmdvYWlwbWJlZGl3RHFrekhPQUtZOEFFZ3ZjenA6UmVjenA6U2VwOzZlZ2xhb2FpcG1sdm9yeG1Qc0NYUUwzNThFOEZweEZ1YmJGdWJiRnViYkZ1YmJwOW9wOzZlYXZjenA6U2VwOzZlZ3ZwO0dlYWxwO0dlcDtLZXA7TGVnaXB4YmJiYmJiYmJiYmJiYmJiYnA6MmVncmFscHhiYmJqYmJiamJiYmpiYmJqZ3FwOW9wOXJwO0tlZ2xweGI7OkZTYjs6RlNiOzpGU2I7OkZTYWxhbHA7TWVhaWFpcDtNZWF2YXJhdmFxcDlvcDlycDtLZWdsYWxwO01lcDtLZXA7S2VwO0plcDtOZWd2cDtNZXB4YmJuMGJibjBiYm4wYmJuMGdycDtLZXB4RkZiYkZGYmJGRmJiRkZiYnA5b2FpYXZwO01lYXJwO0tlY3pwOlJlcDlxZ2lhbGF2cDtNZWFycDtLZXB4RkZiYkZGYmJGRmJiRkZiYnA5b2dscG13REtZcWs4QUV4bTM1UHM4RThGcDlxcGtiYmFiYW9hd3A5b2FpYWxwbWJlekhkaU9BbHZDWG9yUUxwOXFwa2JiYWJjYWZoYmFkY2xmZ2RhZTZtYmtrazsyaWxldWU5N2V1bzk3ZG5hZWM5OEdnaVRtYmNiaGVpbmFiY0tmcHg6amk6MVM6amk6MVM6amk6MVM6amk6MVNhYnBiYmJnbGFiY3pmZ3ZwYmJiZ29wbWx2b3J4bVBzQ1hRTDM1OEU4RmdyY3pwOlNlZ3dweGliYmJpYmJiaWJiYmliYmJwOXFwOzZlZ0RwO05lZ3FhRGFEcDtNZWdEYURwO0tlYWxhb3BtYmVkaXdEcWt6SE9BS1k4QUVnRGN6cDpSZWN6cDpTZXA7NmVnbGFscDtNZWFEY3pwOlNlcDs2ZWdvYW9wO01lYXJjenA6UmVjenA6U2VwOzZlZ3JhcnA7TWVwO0tlcDtLZXA7TGVweGJiYmJiYmJiYmJiYmJiYmJwOjRlcDtKZXA7TWVweGJibjBiYm4wYmJuMGJibjBnRHA7S2VweEZGYmJGRmJiRkZiYkZGYmJna3A5b2FxYW9wO01lYURwO0tlY3pwOlJlcDlxZ29hcWFscDtNZWFEcDtLZWFrcDlvYXFhcnA7TWVhRHA7S2VjenA6UmVwOXFnRHBtd0RLWXFrOEFFeG0zNVBzOEU4RmdscDVlYXdjbHA6UmVncXBFaTpUOmo4M2liYXZhbHA1YmFxcEVkOlQ6ajgzaWJhYmN3ZmFvYURwbWJlekhkaU9BbHZDWG9yUUxnRHA1ZWFxcEVlOlQ6ajgzaWJhYmFEcDViYXFwRWI6VDpqODNpYmFiY2FmaGJhZWNsZmdlYWk2bWJra2t1ZWU5N2RuYWRjZDRhZTJjOThHZ2VUbWJjYmhkaW5hYmFicGJiYmdpY3dwOlJlY3dwOlNlcDs2ZWFpY2VwOlNlcHhiYmpGYmJqRmJiakZiYmpGcDlvcHhiYmpaYmJqWmJialpiYmpacDpVZXA7TWVwa2JiYWJjemZoYmFkY2xmZ2RhZTZtYmtrazpTb2R3OTdldWFlYzk4R2hlZG5kbmFkY2w5aG1iYWVUbWVjYmhkaW5hYnB4YmJ1SmJidUpiYnVKYmJ1SmFicGJiYmdpY0twOlRlZ2xhaWNZcDpUZXA5cWd2Y2RwOlRlYXZwOXFndmNscDpUZWF2cDlxZ29wOzZlcDtOZWd2YWljd3A6UmVjS3A6U2VncmFpcHhGYmJiRmJiYkZiYmJGYmJiZ3dwOW9nRHA6VWVwOzZlcDtNZXB4YmJuMGJibjBiYm4wYmJuMGdxcDtLZWN3cDpSZXB4YkZiYmJGYmJiRmJiYkZiYnA5b2F2YURhcnA6WGVhaWN6cDpSZWNLcDpTZWdpcDpVZXA7NmVwO01lYXFwO0tlYXdwOW9wOXFhdmFEYXJhaXA6VWVwOlhlcDs2ZXA7TWVhcXA7S2VjenA6UmVweGJiRmJiYkZiYmJGYmJiRmJwOW9wOXFhdmFvYWxjZXA6UmVwOW9hbHB4ZWJiYmViYmJlYmJiZWJiYnA5b3A5cXA7NmVwO01lYXFwO0tlY0twOlJlcDlxcGtiYmFiY3pmaGJhZGNsZmdkYWU2bWJ4ZGtrYWVUbWJjYmhkaW5hYmN6ZmdrcHhiRnU5aGJGdTloYkZ1OWhiRnU5aGFicGJiYmdsYWtwYmJiZ3JwbWx2b3J4bVBzQ1hRTDM1OEU4Rmd2Y3pwOlRlZ3FhdmNIcDpUZXA5cWdpY2RwOlRlYWlwOXFnaWNscDpUZWFpcDlxZ2ljd3A6VGVhaXA5cWdvcDs2ZXA7TmVnaWFsYXJwbWJlZGl3RHFrekhPQUtZOEFFZ0RweEZGYmJGRmJiRkZiYkZGYmJnbHA5b2dyYURjenA6U2Vnd3A6VWVhdmN6cDpSZWN6cDpTZWdEcDpYZXA7NmVwO01lcHhiYm4wYmJuMGJibjBiYm4wZ3ZwO0tlYWxwOW9haWFyYXdhRHA6VWVwOlhlcDs2ZXA7TWVhdnA7S2VjenA6UmVwOXFnd2FpYW9hcWNlcDpSZXA5b2FxcHhlYmJiZWJiYmViYmJlYmJicDlvcDlxcDs2ZXA7TWVhdnA7S2VjenA6UmVhaWFEYXJwOlVlcDs2ZXA7TWVhdnA7S2VhbHA5b3A5cWdpcG13REtZcWs4QUV4bTM1UHM4RThGcGtiYmFiYXdhaXBtYmV6SGRpT0FsdkNYb3JRTHBrYmJhYmNhZmhiYWRjbGZnZGFlNm1ia2trOXRlaXVjYmNieWRqOkc6Y2piZ2VhYmNpZmM5OEdmZ2JCZGo6RzpjamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWtreGViY2o6R2RrbHo6emJiIix0PW5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDQsMSw5NiwwLDAsMywzLDIsMCwwLDUsMywxLDAsMSwxMiwxLDAsMTAsMjIsMiwxMiwwLDY1LDAsNjUsMCw2NSwwLDI1MiwxMCwwLDAsMTEsNywwLDY1LDAsMjUzLDE1LDI2LDExXSksbz1uZXcgVWludDhBcnJheShbMzIsMCw2NSwyLDEsMTA2LDM0LDMzLDMsMTI4LDExLDQsMTMsNjQsNiwyNTMsMTAsNywxNSwxMTYsMTI3LDUsOCwxMiw0MCwxNiwxOSw1NCwyMCw5LDI3LDI1NSwxMTMsMTcsNDIsNjcsMjQsMjMsMTQ2LDE0OCwxOCwxNCwyMiw0NSw3MCw2OSw1NiwxMTQsMTAxLDIxLDI1LDYzLDc1LDEzNiwxMDgsMjgsMTE4LDI5LDczLDExNV0pO2lmKHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCIpcmV0dXJue3N1cHBvcnRlZDohMX07dmFyIGE9V2ViQXNzZW1ibHkudmFsaWRhdGUodCk/ZihlKTpmKG4pLHIsaT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShhLHt9KS50aGVuKGZ1bmN0aW9uKFQpe3I9VC5pbnN0YW5jZSxyLmV4cG9ydHMuX193YXNtX2NhbGxfY3RvcnMoKX0pO2Z1bmN0aW9uIGYoVCl7Zm9yKHZhciBfPW5ldyBVaW50OEFycmF5KFQubGVuZ3RoKSx3PTA7dzxULmxlbmd0aDsrK3cpe3ZhciBFPVQuY2hhckNvZGVBdCh3KTtfW3ddPUU+OTY/RS05NzpFPjY0P0UtMzk6RSs0fWZvcih2YXIgUj0wLHc9MDt3PFQubGVuZ3RoOysrdylfW1IrK109X1t3XTw2MD9vW19bd11dOihfW3ddLTYwKSo2NCtfWysrd107cmV0dXJuIF8uYnVmZmVyLnNsaWNlKDAsUil9ZnVuY3Rpb24gZChULF8sdyxFLFIsUyxDKXt2YXIgST1ULmV4cG9ydHMuc2JyayxNPUUrMyYtNCxQPUkoTSpSKSxGPUkoUy5sZW5ndGgpLEE9bmV3IFVpbnQ4QXJyYXkoVC5leHBvcnRzLm1lbW9yeS5idWZmZXIpO0Euc2V0KFMsRik7dmFyIHg9XyhQLEUsUixGLFMubGVuZ3RoKTtpZih4PT0wJiZDJiZDKFAsTSxSKSx3LnNldChBLnN1YmFycmF5KFAsUCtFKlIpKSxJKFAtSSgwKSkseCE9MCl0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBidWZmZXIgZGF0YTogIit4KX12YXIgYz17Tk9ORToiIixPQ1RBSEVEUkFMOiJtZXNob3B0X2RlY29kZUZpbHRlck9jdCIsUVVBVEVSTklPTjoibWVzaG9wdF9kZWNvZGVGaWx0ZXJRdWF0IixFWFBPTkVOVElBTDoibWVzaG9wdF9kZWNvZGVGaWx0ZXJFeHAiLENPTE9SOiJtZXNob3B0X2RlY29kZUZpbHRlckNvbG9yIn0sdT17QVRUUklCVVRFUzoibWVzaG9wdF9kZWNvZGVWZXJ0ZXhCdWZmZXIiLFRSSUFOR0xFUzoibWVzaG9wdF9kZWNvZGVJbmRleEJ1ZmZlciIsSU5ESUNFUzoibWVzaG9wdF9kZWNvZGVJbmRleFNlcXVlbmNlIn0sbD1bXSxtPTA7ZnVuY3Rpb24gaChUKXt2YXIgXz17b2JqZWN0Om5ldyBXb3JrZXIoVCkscGVuZGluZzowLHJlcXVlc3RzOnt9fTtyZXR1cm4gXy5vYmplY3Qub25tZXNzYWdlPWZ1bmN0aW9uKHcpe3ZhciBFPXcuZGF0YTtfLnBlbmRpbmctPUUuY291bnQsXy5yZXF1ZXN0c1tFLmlkXVtFLmFjdGlvbl0oRS52YWx1ZSksZGVsZXRlIF8ucmVxdWVzdHNbRS5pZF19LF99ZnVuY3Rpb24gYihUKXtmb3IodmFyIF89InNlbGYucmVhZHkgPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShuZXcgVWludDhBcnJheShbIituZXcgVWludDhBcnJheShhKSsiXSksIHt9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeyByZXN1bHQuaW5zdGFuY2UuZXhwb3J0cy5fX3dhc21fY2FsbF9jdG9ycygpOyByZXR1cm4gcmVzdWx0Lmluc3RhbmNlOyB9KTtzZWxmLm9ubWVzc2FnZSA9ICIreS5uYW1lKyI7IitkLnRvU3RyaW5nKCkreS50b1N0cmluZygpLHc9bmV3IEJsb2IoW19dLHt0eXBlOiJ0ZXh0L2phdmFzY3JpcHQifSksRT1VUkwuY3JlYXRlT2JqZWN0VVJMKHcpLFI9bC5sZW5ndGg7UjxUOysrUilsW1JdPWgoRSk7Zm9yKHZhciBSPVQ7UjxsLmxlbmd0aDsrK1IpbFtSXS5vYmplY3QucG9zdE1lc3NhZ2Uoe30pO2wubGVuZ3RoPVQsVVJMLnJldm9rZU9iamVjdFVSTChFKX1mdW5jdGlvbiBwKFQsXyx3LEUsUil7Zm9yKHZhciBTPWxbMF0sQz0xO0M8bC5sZW5ndGg7KytDKWxbQ10ucGVuZGluZzxTLnBlbmRpbmcmJihTPWxbQ10pO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihJLE0pe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpLEY9KyttO1MucGVuZGluZys9VCxTLnJlcXVlc3RzW0ZdPXtyZXNvbHZlOkkscmVqZWN0Ok19LFMub2JqZWN0LnBvc3RNZXNzYWdlKHtpZDpGLGNvdW50OlQsc2l6ZTpfLHNvdXJjZTpQLG1vZGU6RSxmaWx0ZXI6Un0sW1AuYnVmZmVyXSl9KX1mdW5jdGlvbiB5KFQpe3ZhciBfPVQuZGF0YTtzZWxmLnJlYWR5LnRoZW4oZnVuY3Rpb24odyl7aWYoIV8uaWQpcmV0dXJuIHNlbGYuY2xvc2UoKTt0cnl7dmFyIEU9bmV3IFVpbnQ4QXJyYXkoXy5jb3VudCpfLnNpemUpO2Qodyx3LmV4cG9ydHNbXy5tb2RlXSxFLF8uY291bnQsXy5zaXplLF8uc291cmNlLHcuZXhwb3J0c1tfLmZpbHRlcl0pLHNlbGYucG9zdE1lc3NhZ2Uoe2lkOl8uaWQsY291bnQ6Xy5jb3VudCxhY3Rpb246InJlc29sdmUiLHZhbHVlOkV9LFtFLmJ1ZmZlcl0pfWNhdGNoKFIpe3NlbGYucG9zdE1lc3NhZ2Uoe2lkOl8uaWQsY291bnQ6Xy5jb3VudCxhY3Rpb246InJlamVjdCIsdmFsdWU6Un0pfX0pfXJldHVybntyZWFkeTppLHN1cHBvcnRlZDohMCx1c2VXb3JrZXJzOmZ1bmN0aW9uKFQpe2IoVCl9LGRlY29kZVZlcnRleEJ1ZmZlcjpmdW5jdGlvbihULF8sdyxFLFIpe2QocixyLmV4cG9ydHMubWVzaG9wdF9kZWNvZGVWZXJ0ZXhCdWZmZXIsVCxfLHcsRSxyLmV4cG9ydHNbY1tSXV0pfSxkZWNvZGVJbmRleEJ1ZmZlcjpmdW5jdGlvbihULF8sdyxFKXtkKHIsci5leHBvcnRzLm1lc2hvcHRfZGVjb2RlSW5kZXhCdWZmZXIsVCxfLHcsRSl9LGRlY29kZUluZGV4U2VxdWVuY2U6ZnVuY3Rpb24oVCxfLHcsRSl7ZChyLHIuZXhwb3J0cy5tZXNob3B0X2RlY29kZUluZGV4U2VxdWVuY2UsVCxfLHcsRSl9LGRlY29kZUdsdGZCdWZmZXI6ZnVuY3Rpb24oVCxfLHcsRSxSLFMpe2QocixyLmV4cG9ydHNbdVtSXV0sVCxfLHcsRSxyLmV4cG9ydHNbY1tTXV0pfSxkZWNvZGVHbHRmQnVmZmVyQXN5bmM6ZnVuY3Rpb24oVCxfLHcsRSxSKXtyZXR1cm4gbC5sZW5ndGg+MD9wKFQsXyx3LHVbRV0sY1tSXSk6aS50aGVuKGZ1bmN0aW9uKCl7dmFyIFM9bmV3IFVpbnQ4QXJyYXkoVCpfKTtyZXR1cm4gZChyLHIuZXhwb3J0c1t1W0VdXSxTLFQsXyx3LHIuZXhwb3J0c1tjW1JdXSksU30pfX19KSgpfSk7dmFyIHZzZSxueD1YKCgpPT57dnNlPShmdW5jdGlvbigpe3ZhciBuPSJiOUg3OVRlYmJiZTo2ZU85R2V1ZXU5R2V1YjlHYmI5R3N1dXV1dXV1dXV1dXU5OXV1ZXU5R3Z1dXV1dWI5R3J1dXV1dXV1YjlHb3V1dXV1dWU5OTlHdnV1dXV1ZXU5R3p1dXV1dXV1dXV1dTk5dXV1dWI5R3F1dXV1dXV1OTl1dWV1OUdQdXV1dXV1dXV1dXU5OXV1ZXU5R3F1dXV1dXV1dTk5dWV1OUdydXV1dXV1OTlldTlHd3V1dXV1dTk5dWV1OUdpdXV1ZTk5OUdsdXV1dWV1OUdsdXV1dWI5R2l1dXVldWlMUWRpbHZvcmx3RGlxa3htUHN6YkhIYmVsdmU5V2VpaXZpZWJlb3dldWVjajpHZGtyOkJkeG85VFc5VDlWVjk1ZGJIOUY5RjkzOUg3OVQ5RjlKOUgyMjlGOUp0OVZWN2JiejlUVzc5TzlWOVd0OUY3OVA5VDlXMjlQOU05NWJ3OEU5VFc3OU85VjlXdDlGNzlQOVQ5VzI5UDlNOTU5eDlQdDlPY3R0VjlQOUk5MXRXN2JEOEE5VFc3OU85VjlXdDlGNzlQOVQ5VzI5UDlNOTU5eDlQdDlPOXY5VzlLOUh0V2JxUTlUVzc5TzlWOVd0OUY3OVA5VDlXMjlQOU05NTl0MjlWOVc5Vzk1YmtYOVRXNzlPOVY5V3Q5Rjc5UDlUOVcyOVA5TTk1OXFWOTE5VVdieFE5VFc3OU85VjlXdDlGNzlQOVQ5VzI5UDlNOTU5cTlWOVA5VXQ3Ym1YOVRXNzlPOVY5V3Q5Rjc5UDlUOVcyOVA5TTk1OXQ5SjlIMldiUGE5VFc3OU85VjlXdDlGOVY5V3Q5UDlUOVA5Nlc5d1dWdFc5NFNXdDlKOU85c1c5VDlIOVdiczU5VFc3OU85VjlXdDlGOU5XOVVXVjlIdFc5cTlWNzlQdDlQOVY5VTlzVzlUOUg5V2J6bDc5SVY5UmJIRHdlYmNla2RDWHE7eTtXZVFkYms7cjpoZXJZdWU5OWl1WTk5WHVlOTpEOTk4SmpqampiY2o7c2I5UmdzOEtqampqYmNiaHphc2M6Q2VmY2JjO0tiejp0ampqYjhBZG5hYmFlU21iYWJhZWFkY2R0ek1qampiOEFrZG5hbWNkR1RtYmFsY3JmY2k0Y2J5ZDE6SDpjamJIampqamJiaEhhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmFIQmRiYXNhZWNlZkJkOzhlY2JobGNiaGVkbmFkVG1iYWJoZWFkaE9pbmFIYWV5ZGJjaTRmY2I4NmJiYWVjbGZoZWFPY3VmZ09tYmtjYmhsYWJoZWFkaE9pbmFIYWV5ZGJnQWNpNGZnQ2FDUmJiZ0NjZWFBY3JHZ0F0Vjg2YmJhQ2N1N2FBNGNlR2FsZmhsYWVjbGZoZWFPY3VmZ09tYmtjdWFsY2R0YWxjRkZGRmkwRWhla2FlY2J5ZDE6SDpjamJIampqamJiaHphc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmF6QmRiYXNhZWNlZkJkOzhlYWxjZDRhbGZoT2NlaEhpbmFIZ2VjZXRoSGFlYU82bWJrY2JoWGN1YWVjZHRnT2FlY0ZGRkZpMEVjYnlkMTpIOmNqYkhqampqYmJoSGFzYzpDZWZhc3lkOzhlZ0FjZHRmYUhCZGJhc2FBY2VmQmQ7OGVhSGNGZWFPejp0ampqYmhRZG5hZFRtYmFlY3VmaExjYmhLaW5kbmRuYVFhYmFLY2R0ZmdZeWRiZ0FjOnY7dDtoO0V2MmFMR2dPY2R0ZmdDeWRiZ0hjdVNtYmNlaGVpbmF6YUhjZHRmeWRiYUFTbWRhT2FlZmhIYWVjZWZoZWFRYUhhTEdnT2NkdGZnQ3lkYmdIY3U5aG1ia2themFYY2R0ZmFBQmRiYUNhWEJkYmFYaEhhWGNlZmhYa2FZYUhCZGJhS2NlZmdLYWQ5aG1ia2thUWNieWQ6bTpIOmNqYkg6YmpqamJiYXNhc3lkOzhlY3VmQmQ7OGVrY2JoOEFjdWFsY2VmZ2VjZHRhZWNGRkZGaTBFY2J5ZDE6SDpjamJIampqamJiaExhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmFMQmRiYXNhTEJkTmVhc2FlY2VmQmQ7OGVjdWFkY2l0YWRjRkZGRmUwRWNieWQxOkg6Y2piSGpqampiYmhFYXNjOkNlZmFzeWQ7OGVnZWNkdGZhRUJkYmFzYUVCZDp5ZWFzYWVjZWZCZDs4ZWFzY05lZmFiYWRhbGNiejpjampqYmN1YWxjZHRnZWFsY0ZGRkZpMEVnM2NieWQxOkg6Y2piSGpqampiYmhPYXNjOkNlZmFzeWQ7OGVnSGNkdGZhT0JkYmFzYUhjZWZCZDs4ZWEzY2J5ZDE6SDpjamJIampqamJiaFFhc2M6Q2VmYXN5ZDs4ZWdIY2R0ZmFRQmRiYXNhSGNlZkJkOzhlYU9hUWFpYWxhdmF6YXNjOkNlZno6ZGpqamJhbGNieWQxOkg6Y2piSGpqampiYmhZYXNjOkNlZmFzeWQ7OGVnSGNkdGZhWUJkYmFzYUhjZWZCZDs4ZWEzY2J5ZDE6SDpjamJIampqamJiaEhhc2M6Q2VmYXN5ZDs4ZWdBY2R0ZmFIQmRiYXNhQWNlZkJkOzhlYTNjYnlkMTpIOmNqYkhqampqYmJoQWFzYzpDZWZhc3lkOzhlZ0NjZHRmYUFCZGJhc2FDY2VmQmQ7OGVhSGNGZWFlejp0ampqYmg1YUFjRmVhZXo6dGpqamJoOEVkbmFsVG1iaW5kbmFMYThBZ0FjZWZnOEFjZHRmeWRiZ0NhTGFBY2R0Z2VmeWRiZ0hTbWJhQ2FIOVJoOEZhRWFIY2l0ZmhhYThFYWVmaGhhNWFlZmhLY2JoQ2luZG5kbmFhYUNjaXRmeWRiZ1hhQTlobWJhS2FBQmRiYWhhQUJkYnhla2RuYUxhWGNkdGdnZmdlY2xmeWRiZ0hhZXlkYmdlU21iYUhhZTlSaEhhRWFlY2l0ZmhlaW5hZXlkYmFBU21kYWVjd2ZoZWFIY3VmZ0htYmtrYThFYWdmZ2VhQWFYYWV5ZGJjdVNFQmRiYUthWGFBYUt5ZGJjdVNFQmRia2FDY2VmZ0NhOEY5aG1ia2thOEFhbDlobWJrYU9oSGFRaEFhNWhYYThFaENjYmhlaW5kbmRuYWVhSHlkYmdLOWhtYmRuYWVhQXlkYmdLOWhtYmFYeWRiaEtkbmFDeWRiZzhGY3U5aG1iYUtjdTlobWJhWWFlZmNiODZiYnhpa2RuYThGY3VTbWJhS2N1U21iYWVhOEZTbWJhT2E4RmNkdGZ5ZGJhT2FLY2R0ZnlkYjlobWJhWWFlZmNkODZiYnhpa2FZYWVmaGFkbmFlYThGU21iYWVhS1NtYmFhY2U4NmJieGlrYWFjbDg2YmJ4ZGtkbmFlYVFhS2NkdGc4RmZ5ZGI5aG1iZG5hQ3lkYmdhY3VTbWJhZWFhU21iYVh5ZGJnZ2N1U21iYWVhZ1NtYmE4RWE4RmZ5ZGJnaGN1U21iYWhhS1NtYmE1YThGZnlkYmc4RmN1U21iYThGYUtTbWJkbmFPYWFjZHRmeWRiZ0thT2E4RmNkdGZ5ZGI5aG1iYUthT2FnY2R0ZnlkYmc4RlNtYmE4RmFPYWhjZHRmeWRiOWhtYmFZYWVmY2Q4NmJieGxrYVlhZWZjbDg2YmJ4aWthWWFlZmNsODZiYnhka2FZYWVmY2w4NmJieGVrYVlhZWZhWWFLZlJiYjg2YmJrYUhjbGZoSGFBY2xmaEFhWGNsZmhYYUNjbGZoQ2FsYWVjZWZnZTlobWJrZG5hbWNhR1RtYmNiaDhKaW5kbmRuYVlhOEpmZzhLUmJiZzhMYzk6ZlBpYmViZWtkbmRuZG5hT2E4SmNkdGZ5ZGJnZWE4SjlobWJkbmFxbWJjYmg4Rnhka2RuYXpUbWJjYmg4RmE4SmhlaW5hcWF6YWVjZHRnZWZ5ZGJmUmJiY2U0YThGVmNlR2g4RmFRYWVmeWRiZ2VhOEo5aG1ieGlra2NiaDhGYThKaGVpbmFxYWVmUmJiY2U0YThGVmNlR2g4RmFRYWVjZHRmeWRiZ2VhOEo5aG1ieGRra2FZYWVmUmJiaGV4ZWthOEpoZWluZG5hTGFlY2R0ZzhBZmdlY2xmeWRiZ0hhZXlkYmdlU21iYUhhZTlSaGdhRWFlY2l0ZmhoYU9hOEFmaGFjYmhLaW5haGFLY2l0ZnlkYmdYaGVkbmluZG5hTGFlY2R0Z0NmZ2VjbGZ5ZGJnSGFleWRiZ2VTbWJhSGFlOVJoSGFFYWVjaXRmaGVhYXlkYmhBZG5pbmFPYWV5ZGJjZHRmeWRiYUFTbWVhZWN3ZmhlYUhjdWZnSFRtZHhia2tjYmhleGRrYVFhQ2Z5ZGJnZWFYOWhtYmtjZWhla2E4RmFlVmg4RmFLY2VmZ0thZzlobWJra2FRYThBZnlkYmdlYThKOWhtYmthOExjaWE4RmNlR0VoZWthOEthZTg2YmJrYThKY2VmZzhKYWw5aG1ia2tkbmFxVG1iZG5kbmF6VG1iYXpoZWFPaEhhbGhBaW5kbmFxYWV5ZGJmUmJiY2VHVG1iYVlhSHlkYmZjbDg2YmJrYWVjbGZoZWFIY2xmaEhhQWN1ZmdBbWJ4ZGtrYXFoZWFPaEhhbGhBaW5kbmFlUmJiY2VHVG1iYVlhSHlkYmZjbDg2YmJrYWVjZWZoZWFIY2xmaEhhQWN1ZmdBbWJra2FPaGVhbGhBYVloSGluZG5hWWFleWRiZlJiYmNsOWhtYmFIY2w4NmJia2FlY2xmaGVhSGNlZmhIYUFjdWZnQW1ia2thbWNlR1RtYmFZaGVhbGhIaW5kbmFlUmJiY2U5aG1iYWVjbDg2YmJrYWVjZWZoZWFIY3VmZ0htYmtrY2JoOE1jdWFsY3gyYWxjO3Y6UTt2OlFlMEVjYnlkMTpIOmNqYkhqampqYmJoOE5hc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmE4TkJkYmFzYWVjZWZCZDs4ZWFzY2JCZDpxZWFzOWNiODNpMWVhOE5haWFsYXZhemFzYzFlZno6ZWpqamJoeWRuZG5hRG1iY2JoOFBjYmhDeGVrY2JoQ2F3aGVjYmhIaW5kbmFlSWRiSmJiYmI5RVRtYmFzYUNjZHRmYUhCZGJhQ2NlZmhDa2FlY2xmaGVhRGFIY2VmZ0g5aG1ia2N1YUNhbDJnZWNkdGFlY0ZGRkZpMEVjYnlkMTpIOmNqYkhqampqYmJoOFBhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmE4UEJkYmFzYWVjZWZCZDs4ZWFsVG1iZG5hQ21iY2JoQ3hla2FyY2Q0aGdkbmF6VG1iYUNjZHRoaGNiaDhGYThQaGFpbmFvYXphOEZjZHRmeWRiYWcyY2R0ZmhLYXNoZWFhaEhhQ2hBaW5hSGFLYWV5ZGJjZHRnWGZJZGJhd2FYZklkYk5VZGJhZWNsZmhlYUhjbGZoSGFBY3VmZ0FtYmthYWFoZmhhYThGY2VmZzhGYWw5aG1ieGRra2FDY2R0aGhjYmg4RmE4UGhhaW5hb2E4RmFnMmNkdGZoS2FzaGVhYWhIYUNoQWluYUhhS2FleWRiY2R0Z1hmSWRiYXdhWGZJZGJOVWRiYWVjbGZoZWFIY2xmaEhhQWN1ZmdBbWJrYWFhaGZoYWE4RmNlZmc4RmFsOWhtYmtrY3VhbGM4UzJnSGFsYztEO087ZjhVMEVnWGNieWQxOkg6Y2piSGpqampiYmhlYXNjOkNlZmFzeWQ7OGVnQWNkdGZhZUJkYmFzYUFjZWZCZDs4ZWFlY2JhSHo6dGpqamJoSWNiaDhSY2JoZ2RuYUNUbWJjYmg4TWFYY2J5ZDE6SDpjamJIampqamJiaGdhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmFnQmRiYXNhZWNlZkJkOzhlYWdjYmFIejp0ampqYjhBY3VhQ2FsMmdlY2x0Z0hhZWNGRkZGYjBFY2J5ZDE6SDpjamJIampqamJiaDhSYXNjOkNlZmFzeWQ7OGVnZWNkdGZhOFJCZGJhc2FlY2VmQmQ7OGVhOFJjYmFIejp0ampqYjhBYW1jampqamRHVG1iY3VhbGNsdGdlYWxjRkZGRmIwRWNieWQxOkg6Y2piSGpqampiYmg4TWFzYzpDZWZhc3lkOzhlZ0hjZHRmYThNQmRiYXNhSGNlZkJkOzhlYThNY2JhZXo6dGpqamI4QWtkbmFkVG1iY2JoS2FiaEhpbmE4TmFIY2xmeWRiZzhGY3gyZmdlSWRiYThOYUh5ZGJnYWN4MmZnQUlkYmc4Uzp0Z1JhOE5hSGN3ZnlkYmdoY3gyZmdYSWRsYUFJZGxnOFU6dGc4Vk5hZUlkbGE4VTp0ZzhXYVhJZGJhOFM6dGc4WE46dGc4WWE4WU5hOFdhWElkd2FBSWR3ZzhaOnRnODBOYWVJZHdhOFo6dGc4V2E4Vk46dGc4MWE4MU5hOFdhOFhOYVJhODBOOnRnODBhODBOTU1nOFY6cmhCYThZaDhYYTgwaDhXYTgxaFJkbmE4VkpiYmJiOUVnQVRtYmE4WWFCOnZoOFhhODBhQjp2aDhXYTgxYUI6dmhSa2FJYU9hYWNkdGZ5ZGJnWGM4UzJmZ2VhUmFCOnJnOFZhUk5OZzgzYWVJZGJNVWRiYWVhOFdhOFZhOFdOZ1VOZzg1YWVJZGxNVWRsYWVhOFhhOFZhOFhOZzg2Tmc4N2FlSWR3TVVkd2FlYVJhVU5nVWFlSWR4TVVkeGFlYTg2YVJOZzg4YWVJZHpNVWR6YWVhOFdhODZOZzg5YWVJZENNVWRDYWVhUmE4VmE4WGE4Wk5hUmE4U05hOFVhOFdOTU06bWc4Ok5nODZOZ1JhZUlkS01VZEthZWE4V2E4Nk5nOFdhZUlkM01VZDNhZWE4WGE4Nk5nOFhhZUlkYU1VZGFhZWE4NmE4Ok5nODZhZUlkOEtNVWQ4S2FlYThWYWVJZHlNVWR5YUlhT2E4RmNkdGZ5ZGJnOEZjOFMyZmdlYTgzYWVJZGJNVWRiYWVhODVhZUlkbE1VZGxhZWE4N2FlSWR3TVVkd2FlYVVhZUlkeE1VZHhhZWE4OGFlSWR6TVVkemFlYTg5YWVJZENNVWRDYWVhUmFlSWRLTVVkS2FlYThXYWVJZDNNVWQzYWVhOFhhZUlkYU1VZGFhZWE4NmFlSWQ4S01VZDhLYWVhOFZhZUlkeU1VZHlhSWFPYWhjZHRmeWRiZ2FjOFMyZmdlYTgzYWVJZGJNVWRiYWVhODVhZUlkbE1VZGxhZWE4N2FlSWR3TVVkd2FlYVVhZUlkeE1VZHhhZWE4OGFlSWR6TVVkemFlYTg5YWVJZENNVWRDYWVhUmFlSWRLTVVkS2FlYThXYWVJZDNNVWQzYWVhOFhhZUlkYU1VZGFhZWE4NmFlSWQ4S01VZDhLYWVhOFZhZUlkeU1VZHlkbmE4TVRtYmRuYUFUbWJhOFlhQjp2aDhZYTgwYUI6dmg4MGE4MWFCOnZoODFrYThNYVhjbHRmZ2VhQkpiYmJaTmdSYTgwTmc4VmFlSWRsTVVkbGFlYVJhOFlOZzhXYWVJZHdNVWR3YWVhUmE4MU5nOFhhZUlkYk1VZGJhZWFSYThTOm1hODFOYThVYTgwTjp0YThaYThZTjp0TmdSYWVJZHhNVWR4YThNYThGY2x0ZmdlYThWYWVJZGxNVWRsYWVhOFdhZUlkd01VZHdhZWE4WGFlSWRiTVVkYmFlYVJhZUlkeE1VZHhhOE1hYWNsdGZnZWE4VmFlSWRsTVVkbGFlYThXYWVJZHdNVWR3YWVhOFhhZUlkYk1VZGJhZWFSYWVJZHhNVWR4a2FIY3hmaEhhS2NpZmdLYWQ2bWJra2RuYWxUbWJKcTt4OEo4OEo7bjttO204OUo6djo7O3c4WmFtY3pHRWFtYzthYkdFaDgwY2JoSGFPaFhhemhLYUloZWE4TmhBaW5kbmFIYVh5ZGI5aG1iYUhoOEZkbmF6VG1iYUt5ZGJoOEZrYTgwaFJkbmFxVG1iSmJialphODBhcWE4RmZSYmJjbEdFaFJrYWVjeGZnOEZhOEZJZGJKYmJiYk1VZGJhZWN6Zmc4RmE4RklkYkpiYmJiTVVkYmFlY0NmZzhGYThGSWRiSmJiYmJNVWRiYWVhUmFlY3lmZzhGSWRiZzhZTmdSYWVJZGJNVWRiYWVjbGZnYWFSYWFJZGJNVWRiYWVjd2ZnYWFSYWFJZGJNVWRiYWVjS2ZnYWFhSWRiYUFJZGJnOFdhUk46dFVkYmFBY3dmSWRiaDhWYWVjM2ZnYWFhSWRiYVJhQWNsZklkYmc4WE46dFVkYmFlY2FmZ2FhYUlkYmFSYThWTjp0VWRiYWVjOEtmZ2FJZGJoODFhOEZhOFlhUk1VZGJhYWE4MWFSYThWYThWTmE4V2E4V05hOFhhOFhOTU1OTVVkYmthWGNsZmhYYUtjbGZoS2FlYzhTZmhlYUFjeGZoQWFsYUhjZWZnSDlobWJra2RuYWRUbWJjYmg4QWFiaGFpbmFiYThBY2R0Zmg4RmNiaEhpbmFZYThGYUhjOkc6RzpjamJmeWRiY2R0ZnlkYmdBZlJiYmhlZG5kbmFZYWFhSGZ5ZGJnWGZSYmJnS2M5OWZjRmVHY3BlMG1iYWVjOTlmY0ZlR2M7OmU2bWVrZG5hS2N1ZmNGZUdjZTBtYmE1YVhjZHRmeWRiYUE5aG1la2RuYWVjdWZjRmVHY2UwbWJhOEVhQWNkdGZ5ZGJhWDlobWVrSmJiYWNKYmJhY0piYmJaYWVjRmVHY2VTRWFLY0ZlR2NlU0VoVWRuYThOYThGYUhjOks6RzpjamJmeWRiY2R0ZnlkYmN4MmZnZUlkd2E4TmFYY3gyZmdLSWR3Zzg2OnRnOFNhOE5hQWN4MmZnaElkd2E4Njp0ZzhYYThYTmFoSWRiYUtJZGJnOFU6dGc4MGE4ME5haElkbGFLSWRsZzhaOnRnOFZhOFZOTU1nODFOYThYYThTYThYTmFlSWRiYThVOnRnODNhODBOYThWYWVJZGxhOFo6dGc4NU5NTWc4V046dGc4WWE4WU5hODNhODFOYTgwYThXTjp0Z1JhUk5hODVhODFOYThWYThXTjp0ZzhXYThXTk1NZ0JKYmJiYjlFVG1iYThZYUI6cmdCOnZoOFlhOFdhQjp2aDhXYVJhQjp2aFJrYVVhODE6ck5nQmE4WWE4Nk5hUmE4VU5hOFphOFdOTU06bWc4MU5nODdhODFOaDg4YTgwYTg1TmE4VmE4M046dGc4MWE4MU5hOFZhOFNOYThYYTg1Tjp0ZzhWYThWTmE4WGE4M05hODBhOFNOOnRnOFhhOFhOTU1nODM6cmg4MGE4WWE4N05oODVhOFdhODdOaDg5YVJhODdOaDg3YThXYUJhOFlOZzhTTmg4OmE4U2FSTmhaYVJhQmE4V05nbk5oY2E4WWE4U05oOFlhOFdhbk5oOFdhUmFCYVJOTmg4U2RuYTgzSmJiYmI5RVRtYmE4MWE4MDp2aDgxYThYYTgwOnZoOFhhOFZhODA6dmg4VmthSWFPYVhjZHRmeWRiYzhTMmZnZWFlSWRiYThTYThWYVVhODA6ck5nUmE4Vk5OTWc4ME1VZGJhZWE4V2E4WGFSYThYTmc4U05NZzgzYWVJZGxNVWRsYWVhOFlhODFhUmE4MU5nOFdOTWc4WWFlSWR3TVVkd2FlYWNhOFZhOFNOTWc4U2FlSWR4TVVkeGFlYVphOFdhOFZOTWdVYWVJZHpNVWR6YWVhODphOFhhOFdOTWc4V2FlSWRDTVVkQ2FlYTg3YThWYVJhODFhODZOYThWYThVTmE4WmE4WE5NTWc4NjptTmdSTk1nOFZhZUlkS01VZEthZWE4OWE4WGFSTk1nOFhhZUlkM01VZDNhZWE4NWE4MWFSTk1nODFhZUlkYU1VZGFhZWE4OGE4NmFSTjp0Z1JhZUlkOEtNVWQ4S2FlYUJhZUlkeU1VZHlhSWFPYUFjZHRmeWRiYzhTMmZnZWE4MGFlSWRiTVVkYmFlYTgzYWVJZGxNVWRsYWVhOFlhZUlkd01VZHdhZWE4U2FlSWR4TVVkeGFlYVVhZUlkek1VZHphZWE4V2FlSWRDTVVkQ2FlYThWYWVJZEtNVWRLYWVhOFhhZUlkM01VZDNhZWE4MWFlSWRhTVVkYWFlYVJhZUlkOEtNVWQ4S2FlYUJhZUlkeU1VZHlrYUhjbGZnSGN4OWhtYmthYWN4ZmhhYThBY2lmZzhBYWQ2bWJrYUNUbWJjYmhhaW5KYmJiYmg4MGE4TmFiYWFjZHRmZ2VjbGZ5ZGJnOEZjeDJmZ0hJZHdhOE5hZXlkYmdoY3gyZmdBSWR3ZzhaOnRnOFZhOFZOYUhJZGJhQUlkYmc4Mzp0ZzhXYThXTmFISWRsYUFJZGxnODU6dGc4WGE4WE5NTWc4U2E4TmFlY3dmeWRiZzhBY3gyZmdlSWR3YThaOnRnOFlOYThWYThZTmE4V2FlSWRiYTgzOnRnODFOYThYYWVJZGxhODU6dGdCTk1NZ1JhOFZOOnRKYmJiYkpiYmpaYThTYThZYThZTmE4MWE4MU5hQmFCTk1NZzhVTmFSYVJOOnRnODY6dmE4NkpiYmJiOUJFZzg2Tmg4OGE4VWE4Vk5hUmE4WU46dGE4Nk5oODlhOFNhQk5hUmE4WE46dGE4Nk5oODphOFVhOFhOYVJhQk46dGE4Nk5oWmE4U2E4MU5hUmE4V046dGE4Nk5obmE4VWE4V05hUmE4MU46dGE4Nk5oY2E4V2FCTmE4WGE4MU46dGdSYVJOYThYYThZTmE4VmFCTjp0Z1JhUk5hOFZhODFOYThXYThZTjp0Z1JhUk5NTTpySmJiYlpOaFJhOFBhaGFDMmc4SmNkdGZoSGE4UGE4QWFDMmdEY2R0ZmhBYThQYThGYUMyZzhLY2R0ZmhYYThaOm1oOWNhODU6bWhKYTgzOm1oOWVhc2NqZGZoZWFDaEtKYmJiYmhCSmJiYmJoODZKYmJiYmg4U0piYmJiaDhVSmJiYmJoOFpKYmJiYmg4M0piYmJiaDg1SmJiYmJoODdKYmJiYmhVaW5hZWN3ZmFSYTg5YVhJZGJhSElkYmc4WTp0ZzhYTmE4OGFBSWRiYThZOnRnODFOTWc4Vk5VZGJhZWNsZmFSYVphOFhOYTg6YTgxTk1nOFdOVWRiYWVhUmFjYThYTmFuYTgxTk1nOFhOVWRiYWVjeGZhUmE5Y2E4Vk5hSmE4V05hOFlhOWVhOFhOTU1NZzhZTlVkYmFSYThWYThXTk5hOFpNaDhaYVJhOFZhOFhOTmE4VU1oOFVhUmE4V2E4WE5OYThTTWg4U2FSYThZYThZTk5hVU1oVWFSYThWYThZTk5hODdNaDg3YVJhOFdhOFlOTmE4NU1oODVhUmE4WGE4WU5OYTgzTWg4M2FSYThWYThWTk5hODZNaDg2YVJhOFdhOFdOTmFCTWhCYVJhOFhhOFhOTmE4ME1oODBhSGNsZmhIYVhjbGZoWGFBY2xmaEFhZWN6ZmhlYUtjdWZnS21ia2FnYWhjOFMyZmdlYTgwYWVJZGJNVWRiYWVhQmFlSWRsTVVkbGFlYTg2YWVJZHdNVWR3YWVhOFNhZUlkeE1VZHhhZWE4VWFlSWR6TVVkemFlYThaYWVJZENNVWRDYWVhODNhZUlkS01VZEthZWE4NWFlSWQzTVVkM2FlYTg3YWVJZGFNVWRhYWVhVWFlSWQ4S01VZDhLYWVhUmFlSWR5TVVkeWFnYThGYzhTMmZnZWE4MGFlSWRiTVVkYmFlYUJhZUlkbE1VZGxhZWE4NmFlSWR3TVVkd2FlYThTYWVJZHhNVWR4YWVhOFVhZUlkek1VZHphZWE4WmFlSWRDTVVkQ2FlYTgzYWVJZEtNVWRLYWVhODVhZUlkM01VZDNhZWE4N2FlSWRhTVVkYWFlYVVhZUlkOEtNVWQ4S2FlYVJhZUlkeU1VZHlhZ2E4QWM4UzJmZ2VhODBhZUlkYk1VZGJhZWFCYWVJZGxNVWRsYWVhODZhZUlkd01VZHdhZWE4U2FlSWR4TVVkeGFlYThVYWVJZHpNVWR6YWVhOFphZUlkQ01VZENhZWE4M2FlSWRLTVVkS2FlYTg1YWVJZDNNVWQzYWVhODdhZUlkYU1VZGFhZWFVYWVJZDhLTVVkOEthZWFSYWVJZHlNVWR5YThSYThKY2x0Zmg4RmNiaEhhQ2hYaW5hOEZhSGZnZWFzY2pkZmFIZmdBSWRiYWVJZGJNVWRiYWVjbGZnS2FBY2xmSWRiYUtJZGJNVWRiYWVjd2ZnS2FBY3dmSWRiYUtJZGJNVWRiYWVjeGZnZWFBY3hmSWRiYWVJZGJNVWRiYUhjemZoSGFYY3VmZ1htYmthOFJhOEtjbHRmaDhGY2JoSGFDaFhpbmE4RmFIZmdlYXNjamRmYUhmZ0FJZGJhZUlkYk1VZGJhZWNsZmdLYUFjbGZJZGJhS0lkYk1VZGJhZWN3ZmdLYUFjd2ZJZGJhS0lkYk1VZGJhZWN4ZmdlYUFjeGZJZGJhZUlkYk1VZGJhSGN6ZmhIYVhjdWZnWG1ia2E4UmFEY2x0Zmg4RmNiaEhhQ2hYaW5hOEZhSGZnZWFzY2pkZmFIZmdBSWRiYWVJZGJNVWRiYWVjbGZnS2FBY2xmSWRiYUtJZGJNVWRiYWVjd2ZnS2FBY3dmSWRiYUtJZGJNVWRiYWVjeGZnZWFBY3hmSWRiYWVJZGJNVWRiYUhjemZoSGFYY3VmZ1htYmthYWNpZmdhYWQ2bWJra2NiaEFkbmRuYW1jd0dnVG1iSmJiYmJoOFNjYmhTY2JoOWhjYmg5aXhla2NiaFNhM2NieWQxOkg6Y2piSGpqampiYmg5aWFzYzpDZWZhc3lkOzhlZ2VjZHRmYTlpQmRiYXNhZWNlZkJkOzhlY3VhOWlhbGFiYWRhT3o6ZmpqamJnWGNsdGFYY2pqamppR0VjYnlkMTpIOmNqYkhqampqYmJoOWhhc2M6Q2VmYXN5ZDs4ZWdlY2R0ZmE5aEJkYmFzYWVjZWZCZDs4ZWE5aGFYYTlpYThOYWx6OmdqampiSkZGdXVoOFNhWFRtYmE5aGhlYVhoSGluYWVJZGJnUmE4U2E4U2FSOUVFaDhTYWVjbGZoZWFIY3VmZ0htYmthWGhTa2RuYWxUbWJhTGNsZmhlYUx5ZGJoWGFZaEhhbGhLY2JoQWluY2JhZXlkYmc4RmFYOVJhSFJiYmNwZUdFYUFmaEFhSGNlZmhIYWVjbGZoZWE4RmhYYUtjdWZnS21ia2FBY2U0aEFrY3VhZGFBOVJjaWZnNmN4MmE2Yzt2OlE7djpRZTBFY2J5ZDE6SDpjamJIampqamJiaDlrYXNjOkNlZmFzeWQ7OGVnZWNkdGZhOWtCZGJhc2FlY2VmQmQ7OGVjdWE2Y2R0YTZjRkZGRmkwRWNieWQxOkg6Y2piSGpqampiYmgwYXNjOkNlZmFzeWQ7OGVnZWNkdGZhMEJkYmFzYWVjZWZCZDs4ZWEzY2J5ZDE6SDpjamJIampqamJiaDltYXNjOkNlZmFzeWQ7OGVnZWNkdGZhOW1CZGJhc2FlY2VmQmQ7OGVhbGNieWQxOkg6Y2piSGpqampiYmg5bmFzYzpDZWZhc3lkOzhlZ2VjZHRmYTluQmRiYXNhZWNlZkJkOzhlYXhheE5heUpiYmpaYW1jbEdFZ1phWk46dmg4N0piYmJiaFVkbmFkYWs5bm1iZG5hNmNpNm1iYUNjbHRoOW9hOWtjd2ZoOXBKYmJiYmg4NUpiYmJiaFVpbmFzY05lZmFiYWRhbGFPejpjampqYmFiaDhBY2JoOXFjYmg5cmluYWJhOXJjZHRmaERjYmhlaW5kbmFPYThBYWVmeWRiZ0FjZHRnaGZ5ZGJnWGFPYURhZWM6VzpHOmNqYmZ5ZGJjZHRmeWRiZ0hjZHRnOEpmeWRiZ0tTbWJhWWFIZlJiYmdhY3YyYVlhQWZSYmJnOEZmUmI7YTpHOmNqYmc4TGE4RmN2MmFhZmc4S1JiO2E6RzpjamJnM1ZjRmVHVG1iZG5hS2FYOW5tYmE4S1JiO0c6RzpjamJjRmVHbWVrZG5hOEZjdWZjRmVHY2UwbWJhYVRtYmE1YWhmeWRiYUg5aG1la2RuYThGVG1iYWFjdWZjRmVHY2UwbWJhOEVhOEpmeWRiYUE5aG1la2E5a2E5cWN4MmZnWGFIYUFhM2NGZUdnS0VCZGxhWGFBYUhhS0VCZGJhWGFLYThMR2NiOWhCZHdhOXFjZWZoOXFrYWVjbGZnZWN4OWhtYmtkbmE5cmNpZmc5cmFkOXBtYmE4QWN4Zmg4QWE5cWNpZmE2OW5tZWtrYTlxVG1kY2JoOEtpbmFJYU9hOWthOEtjeDJmZ2h5ZGJnS2NkdGdYZnlkYmc4QWM4UzJmZ2VJZHdhOE5haHlkbGc4RmN4MmZnSElkd2c4V05hZUlkemFISWRiZzhYTmFlSWRhTWdSYVJNTWE4V05hZUlkbGFISWRsZzhZTmFlSWRDYThXTmFlSWQzTWdSYVJNTWE4WU5hZUlkYmE4WE5hZUlkeGE4WU5hZUlkS01nUmFSTU1hOFhOYWVJZDhLTU1NOmxoUkpiYmJiSmJialphZUlkeWc4Vjp2YThWSmJiYmI5QkVoOFZkbmRuYWh5ZHdnRG1iSkZGdXVoODZ4ZWtKYmJiYkpiYmpaYUlhT2E4RmNkdGZ5ZGJjOFMyZmdlSWR5ZzgxOnZhODFKYmJiYjlCRWFlSWR3YThOYUtjeDJmZ0hJZHdnODFOYWVJZHphSElkYmc4ME5hZUlkYU1nQmFCTU1hODFOYWVJZGxhSElkbGdCTmFlSWRDYTgxTmFlSWQzTWc4MWE4MU1NYUJOYWVJZGJhODBOYWVJZHhhQk5hZUlkS01nODFhODFNTWE4ME5hZUlkOEtNTU06bE5oODZrYThWYVJOaEJkbmFDVG1iYWdhS2M4UzJmZ0FJZHdhOFdOYUFJZHphOFhOYUFJZGFNZ1JhUk1NYThXTmFBSWRsYThZTmFBSWRDYThXTmFBSWQzTWdSYVJNTWE4WU5hQUlkYmE4WE5hQUlkeGE4WU5hQUlkS01nUmFSTU1hOFhOYUFJZDhLTU1NaFJhOFBhOEZhQzJnYWNkdGZoSGE4UmFLYUMyZzhKY2x0ZmhlYUFJZHloODFhQ2hBaW5hSElkYmc4VmE4VmE4MU5hZWN4ZklkYmE4V2FlY3dmSWRiTmE4WGFlSWRiTmE4WWFlY2xmSWRiTk1NTWc4VmE4Vk06dE5hUk1oUmFIY2xmaEhhZWN6ZmhlYUFjdWZnQW1ia2RuZG5hRG1iSmJiYmJoOFZ4ZWthZ2E4RmM4UzJmZ0FJZHdhOE5hS2N4MmZnZUlkd2c4WE5hQUlkemFlSWRiZzhZTmFBSWRhTWc4VmE4Vk1NYThYTmFBSWRsYWVJZGxnODFOYUFJZENhOFhOYUFJZDNNZzhWYThWTU1hODFOYUFJZGJhOFlOYUFJZHhhODFOYUFJZEtNZzhWYThWTU1hOFlOYUFJZDhLTU1NaDhWYThQYThKY2R0ZmhIYThSYWFjbHRmaGVhQUlkeWg4MGFDaEFpbmFISWRiZzhXYThXYTgwTmFlY3hmSWRiYThYYWVjd2ZJZGJOYThZYWVJZGJOYTgxYWVjbGZJZGJOTU1NZzhXYThXTTp0TmE4Vk1oOFZhSGNsZmhIYWVjemZoZWFBY3VmZ0FtYmthOFY6bGg4VmthQmFSOmxNaEJhODZhOFZNaDg2ZG5kbmRuYVlhS2ZSYmJjOTpmUGRkYmVrYVFhWGZ5ZGJnWGFLU21iYU9hOEZjZHRmeWRiaDhKaW5kbmRuYTVhWGNkdGdhZnlkYmdlY3VTbWJhT2FlY2R0ZnlkYmE4SlNtZWtkbmE4RWFhZnlkYmdlY3VTbWJhT2FlY2R0ZnlkYmE4SlNtZWthOEZoZWthZ2FYYzhTMmZnQUlkd2E4TmFlY3gyZmdISWR3ZzhXTmFBSWR6YUhJZGJnOFhOYUFJZGFNZ1JhUk1NYThXTmFBSWRsYUhJZGxnOFlOYUFJZENhOFdOYUFJZDNNZ1JhUk1NYThZTmFBSWRiYThYTmFBSWR4YThZTmFBSWRLTWdSYVJNTWE4WE5hQUlkOEtNTU1oUmE4UGFlYUMyY2R0ZmhIYThSYVhhQzJjbHRmaGVhQUlkeWg4MWFDaEFpbmFISWRiZzhWYThWYTgxTmFlY3hmSWRiYThXYWVjd2ZJZGJOYThYYWVJZGJOYThZYWVjbGZJZGJOTU1NZzhWYThWTTp0TmFSTWhSYUhjbGZoSGFlY3pmaGVhQWN1ZmdBbWJrYUJhUjpsTWhCYVFhYWZ5ZGJnWGFLOWhtYmtrYVlhOEZmUmJiY2k5aG1lYURUbWVhUWE4RmNkdGZ5ZGJnWGE4RlNtZWluZG5kbmE1YVhjZHRnYWZ5ZGJnZWN1U21iYU9hZWNkdGZ5ZGJhOEFTbWVrZG5hOEVhYWZ5ZGJnZWN1U21iYU9hZWNkdGZ5ZGJhOEFTbWVrYUtoZWthZ2FYYzhTMmZnQUlkd2E4TmFlY3gyZmdISWR3ZzhXTmFBSWR6YUhJZGJnOFhOYUFJZGFNZ1JhUk1NYThXTmFBSWRsYUhJZGxnOFlOYUFJZENhOFdOYUFJZDNNZ1JhUk1NYThZTmFBSWRiYThYTmFBSWR4YThZTmFBSWRLTWdSYVJNTWE4WE5hQUlkOEtNTU1oUmE4UGFlYUMyY2R0ZmhIYThSYVhhQzJjbHRmaGVhQUlkeWg4MWFDaEFpbmFISWRiZzhWYThWYTgxTmFlY3hmSWRiYThXYWVjd2ZJZGJOYThYYWVJZGJOYThZYWVjbGZJZGJOTU1NZzhWYThWTTp0TmFSTWhSYUhjbGZoSGFlY3pmaGVhQWN1ZmdBbWJrYTg2YVI6bE1oODZhUWFhZnlkYmdYYThGOWhtYnhka2tkbmE4RWE1YTVhWGZ5ZGJhOEZTRWFRYVhmeWRiZ2FjZHRmeWRiZ1hjdTlobWJhUWE4RmNkdGZ5ZGJoWGthZ2FhYzhTMmZnQUlkd2E4TmFYY3gyZmdlSWR3ZzhXTmFBSWR6YWVJZGJnOFhOYUFJZGFNZ1JhUk1NYThXTmFBSWRsYWVJZGxnOFlOYUFJZENhOFdOYUFJZDNNZ1JhUk1NYThZTmFBSWRiYThYTmFBSWR4YThZTmFBSWRLTWdSYVJNTWE4WE5hQUlkOEtNTU1oUmE4UGFYYUMyZzhBY2R0ZmhIYThSYWFhQzJnOEpjbHRmaGVhQUlkeWg4MWFDaEFpbmFISWRiZzhWYThWYTgxTmFlY3hmSWRiYThXYWVjd2ZJZGJOYThYYWVJZGJOYThZYWVjbGZJZGJOTU1NZzhWYThWTTp0TmFSTWhSYUhjbGZoSGFlY3pmaGVhQWN1ZmdBbWJrZG5kbmFEbWJKYmJiYmg4Vnhla2FnYVhjOFMyZmdBSWR3YThOYWFjeDJmZ2VJZHdnOFhOYUFJZHphZUlkYmc4WU5hQUlkYU1nOFZhOFZNTWE4WE5hQUlkbGFlSWRsZzgxTmFBSWRDYThYTmFBSWQzTWc4VmE4Vk1NYTgxTmFBSWRiYThZTmFBSWR4YTgxTmFBSWRLTWc4VmE4Vk1NYThZTmFBSWQ4S01NTWg4VmE4UGE4SmNkdGZoSGE4UmE4QWNsdGZoZWFBSWR5aDgwYUNoQWluYUhJZGJnOFdhOFdhODBOYWVjeGZJZGJhOFhhZWN3ZklkYk5hOFlhZUlkYk5hODFhZWNsZklkYk5NTU1nOFdhOFdNOnROYThWTWg4VmFIY2xmaEhhZWN6ZmhlYUFjdWZnQW1ia2E4VjpsaDhWa2FCYVI6bE1oQmE4NmE4Vk1oODZrYWhhODZhQmE4NmFCOURnZUVVZHdhaGFLYThGYWVhRGNiOWhHZ2VFQmRsYWhhOEZhS2FlRUJkYmE4S2NlZmc4S2E5cTlobWJrYXNjamRmY2JjajtxYno6dGpqamI4QWE5cGhlYTlxaEhpbmFzY2pkZmFleWRiY0E0Y0Y4RkdnQWNGQWFBY0ZBNkVjZHRmZ0FhQXlkYmNlZkJkYmFlY3hmaGVhSGN1ZmdIbWJrY2JoZWNiaEhpbmFzY2pkZmFlZmdBeWRiaFhhQWFIQmRiYVhhSGZoSGFlY2xmZ2VjajtxYjlobWJrY2JoZWE5cGhIaW5hc2NqZGZhSHlkYmNBNGNGOEZHZ0FjRkFhQWNGQTZFY2R0ZmdBYUF5ZGJnQWNlZkJkYmEwYUFjZHRmYWVCZGJhSGN4ZmhIYTlxYWVjZWZnZTlobWJrYWRhazlSZ0FjaTlVaDlzZG5hbFRtYmNiaGVhOW1oSGluYUhhZUJkYmFIY2xmaEhhbGFlY2VmZ2U5aG1ia2tjYmg5dGE5bmNiYWx6OnRqampiaDNhQWNPOVVoOXVhOXNjZTRoOXJjYmg4TGNiaDhLZG5pbmE5a2EwYThLY2R0ZnlkYmN4MmZnOEpJZHdnUmE4NzlFbWVhOExhOXM5cG1lSkZGdXVoOFZkbmE5cmE5cTlwbWJhOWthMGE5cmNkdGZ5ZGJjeDJmSWR3SmJiO2FaTmg4VmtkbmFSYThWOUVUbWJhUmFVOUVUbWJhOExhOXUwbWRrZG5hM2FPYThKeWRsZ0RjZHRnOXZmZzhBeWRiZ0FmZzl3UmJiYTNhT2E4SnlkYmdoY2R0Zzl4ZnlkYmdlZmc5eVJiYlZtYmFZYWhmUmJiaDl6ZG5kbmFMYWVjZHRmZ0hjbGZ5ZGJnWGFIeWRiZ0hTbWJhWGFIOVJoWGE4TmFBY3gyZmg4RmE4TmFlY3gyZmhhYUVhSGNpdGZoZWluZG5hOW1hZXlkYmNkdGZ5ZGJnSGFBU21iYTltYWVjbGZ5ZGJjZHRmeWRiZ0thQVNtYmFIYUtTbWJhOE5hS2N4MmZnS0lkYmE4TmFIY3gyZmdISWRiZzhXOnRnUmFhSWRsYUhJZGxnOFg6dGc4ME5hS0lkbGE4WDp0ZzhWYWFJZGJhOFc6dGdCTjp0ZzhZYVJhOEZJZGxhOFg6dGc4Nk5hOFZhOEZJZGJhOFc6dGc4VU46dGc4WE5hOFZhYUlkd2FISWR3ZzgxOnRnOFpOYUtJZHdhODE6dGc4V2E4ME46dGc4MGE4VmE4Rklkd2E4MTp0ZzgzTmE4V2E4Nk46dGc4Vk5hOFdhQk5hUmE4Wk46dGc4MWE4V2E4VU5hUmE4M046dGdSTk1NYThZYThZTmE4MGE4ME5hODFhODFOTU1hOFhhOFhOYThWYThWTmFSYVJOTU1OOnJKYmJqODpOOUZtaWthZWN3ZmhlYVhjdWZnWG1ia2tkbmRuZG5kbmE5emM5OmZQZGViZGthaGhlaW5hOEF5ZGJoQWRuZG5hNWFlY2R0Z0hmeWRiZ2VjdVNtYmFPYWVjZHRmeWRiYUFTbWVrZG5hOEVhSGZ5ZGJnZWN1U21iYU9hZWNkdGZ5ZGJhQVNtZWthRGhla2E5bWFIZmFlQmRiYVFhSGZ5ZGJnZWFoOWhtYnhpa2tkbmE4RWE1YTVhOXhmeWRiYURTRWFRYTl4ZnlkYmdoY2R0ZnlkYmdlY3U5aG1iYVFhOXZmeWRiaGVrYTltYTl4ZmFEQmRiYWVoRGthOW1haGNkdGZhREJkYmthOXljZTg2YmJhOXdjZTg2YmJhOEpJZHdnUmFVYVVhUjlERWhVYTl0Y2VmaDl0Y2VjZGE5emNlU0VhOExmaDhMeGVrYTlyY2VmaDlya2E4S2NlZmc4S2E5cTlobWJra2E5dFRtZGRuYWxUbWJjYmg4RmNiaGhpbmRuYTltYWhjZHRnZWZ5ZGJnQWFoU21iYU9hQWNkdGZ5ZGJoOEFkbmFoYU9hZWZ5ZGI5aGc4Sm1iYUlhOEFjOFMyZmdlYUlhaGM4UzJmZ0hJZGJhZUlkYk1VZGJhZWFISWRsYWVJZGxNVWRsYWVhSElkd2FlSWR3TVVkd2FlYUhJZHhhZUlkeE1VZHhhZWFISWR6YWVJZHpNVWR6YWVhSElkQ2FlSWRDTVVkQ2FlYUhJZEthZUlkS01VZEthZWFISWQzYWVJZDNNVWQzYWVhSElkYWFlSWRhTVVkYWFlYUhJZDhLYWVJZDhLTVVkOEthZWFISWR5YWVJZHlNVWR5YThNVG1iYThNYThBY2x0ZmdlYThNYWhjbHRmZ0hJZGJhZUlkYk1VZGJhZWFISWRsYWVJZGxNVWRsYWVhSElkd2FlSWR3TVVkd2FlYUhJZHhhZUlkeE1VZHhrYUNUbWJhZ2FBYzhTMmZnZWFnYWhjOFMyZ0RmZ0hJZGJhZUlkYk1VZGJhZWFISWRsYWVJZGxNVWRsYWVhSElkd2FlSWR3TVVkd2FlYUhJZHhhZUlkeE1VZHhhZWFISWR6YWVJZHpNVWR6YWVhSElkQ2FlSWRDTVVkQ2FlYUhJZEthZUlkS01VZEthZWFISWQzYWVJZDNNVWQzYWVhSElkYWFlSWRhTVVkYWFlYUhJZDhLYWVJZDhLTVVkOEthZWFISWR5YWVJZHlNVWR5YTlvYUEyaGFhOFJoSGFDaFhpbmFIYWFmZ2VhSGE4RmZnQUlkYmFlSWRiTVVkYmFlY2xmZ0thQWNsZklkYmFLSWRiTVVkYmFlY3dmZ0thQWN3ZklkYmFLSWRiTVVkYmFlY3hmZ2VhQWN4ZklkYmFlSWRiTVVkYmFIY3pmaEhhWGN1ZmdYbWJrYThKbWJKYmJiYkpiYmpaYUlhRGZnZUlkeWdSOnZhUkpiYmJiOUJFYWVJZHdhOE5hOEFjeDJmZ0hJZHdnUk5hZUlkemFISWRiZzhWTmFlSWRhTWc4V2E4V01NYVJOYWVJZGxhSElkbGc4V05hZUlkQ2FSTmFlSWQzTWdSYVJNTWE4V05hZUlkYmE4Vk5hZUlkeGE4V05hZUlkS01nUmFSTU1hOFZOYWVJZDhLTU1NOmxOZ1JhODVhODVhUjlERWg4NWthOEZhOW9maDhGYWhjZWZnaGFsOWhtYmtjYmhIYTVoZWluZG5hZXlkYmdBY3VTbWJkbmFIYTltYUFjZHRnWGZ5ZGJnQTlobWJjdWhBYTVhWGZ5ZGJnWGN1U21iYTltYVhjZHRmeWRiaEFrYWVhQUJkYmthZWNsZmhlYWxhSGNlZmdIOWhtYmtjYmhIYThFaGVpbmRuYWV5ZGJnQWN1U21iZG5hSGE5bWFBY2R0Z1hmeWRiZ0E5aG1iY3VoQWE4RWFYZnlkYmdYY3VTbWJhOW1hWGNkdGZ5ZGJoQWthZWFBQmRia2FlY2xmaGVhbGFIY2VmZ0g5aG1ia2thODVhVWFDRWg4NWNiaEhhYmhlY2JoQWluZG5hT2E5bWFleWRiY2R0ZnlkYmc4RmNkdGZ5ZGJnWGFPYTltYWVjbGZ5ZGJjZHRmeWRiZ2FjZHRmeWRiZ0tTbWJhWGFPYTltYWVjd2Z5ZGJjZHRmeWRiZzhBY2R0ZnlkYmdoU21iYUthaFNtYmFiYUhjZHRmZ1hhOEZCZGJhWGN3ZmE4QUJkYmFYY2xmYWFCZGJhSGNpZmhIa2FlY3hmaGVhQWNpZmdBYWQ2bWJrZG5kbmFUbWJhSGhkeGVrZG5hSGFrMG1iYUhoZHhla2RuYThTYTg1OUZtYmFIaGR4ZWtKRkZ1dWg4U2NiaGRhYmhlY2JoQWluZG5hOWhhOWlhZXlkYmdYY2R0ZnlkYmNkdGZJZGJnUmE4NTlFVG1iYWVjbGY4UGRiaDlBYWJhZGNkdGZnS2FYQmRiYUtjbGZhOUE4M2RiYVJhOFNhOFNhUjlFRWg4U2FkY2lmaGRrYWVjeGZoZWFBY2lmZ0FhSDZtYmtrYWRhazBtYnhka2thc2NOZWZhYmFkYWxhT3o6Y2pqamJrZG5kbmFkYWswbWJhZGhheGVrZG5hVG1iYWRoYXhla2RuYThTYTg3OUZtYmFkaGF4ZWtjZWhLaW5hOFNKYmI7YVpOZ1JhODdhUmE4NzlERWg4V0piYmJiaFJkbmFTVG1iYTloaGVhU2hIaW5hZUlkYmc4VmFSYThWYThXOUZFYVJhOFZhUjlFRWhSYWVjbGZoZWFIY3VmZ0htYmtrSkZGdXVoOFNjYmhhYWJoZWNiaEhpbmRuYTloYTlpYWV5ZGJnQWNkdGZ5ZGJjZHRmSWRiZzhWYThXOUVUbWJhZWNsZjhQZGJoOUFhYmFhY2R0ZmdYYUFCZGJhWGNsZmE5QTgzZGJhOFZhOFNhOFNhOFY5RUVoOFNhYWNpZmhha2FlY3hmaGVhSGNpZmdIYWQ2bWJrZG5hS2FhYWQ5aFZjZUdtYmFkaGF4ZGthUmFVYVVhUjlERWhVYWFhazlubWVjYmhLYWFoZGE4U2E4NzlGbWJra2RuYW1jampqamRHVG1iYTluY2JhbHo6dGpqamJoOEFkbmFhVG1iYWJoZWFhaEhpbmE4QWFleWRiZ0FmY2U4NmJiYThBYU9hQWNkdGZ5ZGJmY2U4NmJiYWVjbGZoZWFIY3VmZ0htYmtrYXNjTmVmYWJhYWFsYU96OmNqampiZG5kbmFsVG1iY2JoWGluZG5hOEFhWGZSYmJUbWJkbmFZYVhmUmJiZ2VjbDBtYmNlYWV0Y1FHbWVrZG5hT2FYY2R0ZzhGZnlkYmdlYVhTbWJhOE5hWGN4MmZnSGE4TmFlY3gyZmdleWR3QmR3YUhhZThQZGI4M2RieGVrYUlhWGM4UzJmZ0tJZHlnY2FjSkw6MztyVU5nUk1oODdhS0lkd2c5QmFSTWg4U2FLSWRsZzlDYVJNaDhVYUtJZGJnOURhUk1oODFhS0lkYWc5RWFSYThOYVhjeDJmZzhKSWR3Zzg4Tjp0aDhaYUtJZDNnOUZhUmE4SklkbGc4OU46dGg4M2FLSWRLZzlHYThKSWRiZzg6YVJOOnRoODBKYmJiYmhuYUtJZENnOUhKYmJiYk1oODVhS0lkemc5SUpiYmJiTWhCYUtJZHhnOUpKYmJiYk1oODZkbmRuYUNUbWJhWGhBaW5KYmJiYmE4N2FnYUFjOFMyZmdISWR5Z1I6dmFSSmJiYmI5QkVoUmE4UmFBYUMyY2x0ZmhlYUhJZGFhODdOYThaTWg4WmFISWQzYTg3TmE4M01oODNhSElkS2E4N05hODBNaDgwYUhJZENhODdOYTg1TWg4NWFISWR6YTg3TmFCTWhCYUhJZHhhODdOYTg2TWg4NmFISWR3YTg3TmE4U01oOFNhSElkbGE4N05hOFVNaDhVYUhJZGJhODdOYTgxTWg4MWFDaEhpbmE4WmFlY3dmSWRiZzhWYWVjeGZJZGJnOFlOYVJOOnRoOFphODNhZWNsZklkYmc4V2E4WU5hUk46dGg4M2E4NWE4V2E4Vk5hUk46dGg4NWE4MWFlSWRiZzhYYThYTmFSTjp0aDgxYTgwYThYYThZTmFSTjp0aDgwYUJhOFhhOFZOYVJOOnRoQmE4NmE4WGE4V05hUk46dGg4NmE4U2E4VmE4Vk5hUk46dGg4U2E4VWE4V2E4V05hUk46dGg4VWFlY3pmaGVhSGN1ZmdIbWJrYVFhQWNkdGZ5ZGJnQWFYOWhtYmthOE1UbWJhOE1hWGNsdGZnZUlkeGh4YWVJZHdoOWNhZUlkbGhKYWVJZGJoUnhla0piYmJiaHhKYmJiYmg5Y0piYmJiaEpKYmJiYmhSa2FCYTgxOnZnOFdhODBOYThaOnRhODVhQmE4NmE4MTp2ZzhWTjp0ZzhaYThVYTg2YThWTjp0ZzhZOnZnOFhhOFZhODBOYTgzOnRnOFVOOnRoODNhOWNhUmE4V046dGFKYVJhOFZOOnRnODZhOFhOOnRnODVhOFNhQmE4V046dGE4WmE4WE46dGdCOnZnOFM6bWg4WmE4NmE4WTp2ZzljOm1oSmRuSmJiYmJhUmFSYTgxOnZnOWVOOnRhODZhOWNOOnRhODVhOFNOOnRnODY6bGE4N0o6OTgzOmc4MU5nUjlFVG1iYThaYTgzTmFKYThVTmE5ZWE4ME5heDp0TU1hODY6dmhua2E4MTpsYVI5RVRtYmE4WTpsYVI5RVRtYmFCOmxhUjlFVG1iYTllOm1hbk5hOFc6bWE4WmFuTmE4M2FCOnZNZ0JOYThWOm1hSmFuTmE4WDptYUJOYThVYThZOnZNTWc4NU5hODA6bWE4MTp2TU1NaDg3YUxhOEZmZ2VjbGZ5ZGJnSGFleWRiZ2U5UmhoYUVhZWNpdGZoOEZKYmJiYmhSZG5hSGFlU2dEbWJKYmJiYmhSYThGaGVhaGhBaW5hOE5hZWNsZnlkYmN4MmZnSElkd2E4ODp0ZzhWYThWTmFISWRiYTg6OnRnOFZhOFZOYUhJZGxhODk6dGc4VmE4Vk5NTWc4VmE4TmFleWRiY3gyZmdISWR3YTg4OnRnOFdhOFdOYUhJZGJhODo6dGc4V2E4V05hSElkbGE4OTp0ZzhXYThXTk1NZzhXYVJhUmE4VzlERWdSYVJhOFY5REVoUmFlY3dmaGVhQWN1ZmdBbWJrYVI6cmdSYVJOaFJrYUJhODg6dGc4VmE4Vk5hODdhODo6dGc4VmE4Vk5hODVhODk6dGc4VmE4Vk5NTWFSOUVtYmFLSWQ4S2huZG5hRG1iaW5hOE5hOEZjbGZ5ZGJjeDJmZ2VJZGJhOE5hOEZ5ZGJjeDJmZ0hJZGJnOFc6dGdSYTg5YUhJZGxnOFg6dGc4ME5hZUlkbGE4WDp0ZzhWYTg6YThXOnRnODZOOnRnOFlhUmE4NWE4WDp0ZzhTTmE4VmE4N2E4Vzp0ZzhVTjp0ZzhYTmE4VmE4OGFISWR3ZzgxOnRnOFpOYWVJZHdhODE6dGc4V2E4ME46dGc4MGE4VmFCYTgxOnRnODNOYThXYThTTjp0ZzhWTmE4V2E4Nk5hUmE4Wk46dGc4MWE4V2E4VU5hUmE4M046dGdSTk1NYThZYThZTmE4MGE4ME5hODFhODFOTU1hOFhhOFhOYThWYThWTmFSYVJOTU1OOnJKYmJqODpOOUZtZGE4RmN3Zmg4RmFoY3VmZ2htYmtrSmJiYmJKYmJqWmFjOnZhY0piYmJiOUJFZ1JhOUJhQk5hOUlhODdOYTlFTWc4VmE4Vk1NYUJOYTlDYTg1TmE5SGFCTmE5Rk1nOFZhOFZNTWE4NU5hOURhODdOYTlKYTg1TmE5R01nOFZhOFZNTWE4N05hbk1NTTpsTmFSYTlCYTg4TmE5SWE4Ok5hOUVNZzhWYThWTU1hODhOYTlDYTg5TmE5SGE4OE5hOUZNZzhWYThWTU1hODlOYTlEYTg6TmE5SmE4OU5hOUdNZzhWYThWTU1hODpOYW5NTU06bE5KYmI7YVpOSjo5ODM6ZzgxTTlFbWJhOEphQlVkd2E4SmE4NVVkbGE4SmE4N1VkYmthWGNlZmdYYWw5aG1ia2RuYUNtYmNiaEN4ZGtjYmhYaW5kbmE4QWFYZlJiYlRtYmFPYVhjZHRnZWZ5ZGJhWDlobWJhWWFYZmhoYVFhZWZoOEphOE5hWGN4MmZoQWE4UGFYYUMyY2R0ZmhEY2JoRWluY3VoTGRuYWhSYmJjaTlobWJhWGhMYThKeWRiZ2VhWFNtYmE4UGFFY2R0Z0hmaEthRGFIZklkYmhSYVhoTGluYUxoSGN1aExkbmFLYWVhQzJjZHRmSWRiYVI5Q21iYUhjdVNtYmFIaExhZ2FlYzhTMmZJZHlhZ2FIYzhTMmZJZHk5RVRtYmFlaExrYVFhZWNkdGZ5ZGJnZWFYOWhtYmtrYThQYUVjZHRmaEthOFJhRWNsdGZoOEZhWGhlaW5hS2FlYUMyY2R0ZkpiYmJiSmJialphZ2FlYUxhTGN1U0VnSGM4UzJmSWR5Z1I6dmFSSmJiYmI5QkVhOEZhSGFDMmNsdGZnSElkd2FBSWR3TmFISWRiYUFJZGJOYUhJZGxhQUlkbE5NTWFISWR4TU5VZGJhUWFlY2R0ZnlkYmdlYVg5aG1ia2FFY2VmZ0VhQzlobWJra2FYY2VmZ1hhbDlobWJ4ZGtrYUNtYmNiaENrYWlhdmFvYXJhd2FDYWxhOE5hOFBhemFzYXlhc2MxZWZhWWE4QWFxejpoampqYmtkbmFtY2pqampsR1RtYmF6bWJhYVRtYmFiaGVjYmhMaW5hWWFleWRiZ0FmUmJiYzN0aFFhZWN3ZmdYeWRiaEhjampqajk0aENkbmE1YUFjZHRnRWZ5ZGJhZWNsZmdLeWRiZ09TbWJjampqajk0Y2JhOEVhT2NkdGZ5ZGJhQVNFaENrYWVhUWFDVmFBVkJkYmFZYU9mUmJiYzN0aDhGY2pqamo5NGhDY2pqamo5NGhRZG5hNWFPY2R0ZnlkYmFIU21iY2pqamo5NGNiYThFYUhjZHRmeWRiYU9TRWhRa2FLYThGYVFWYU9WQmRiYVlhSGZSYmJjM3RoT2RuYTVhSGNkdGZ5ZGJhQVNtYmNqampqOTRjYmE4RWFFZnlkYmFIU0VoQ2thWGFPYUNWYUhWQmRiYWVjeGZoZWFMY2lmZ0xhYTZtYmtrZG5helRtYmFhVG1iYWFoZWluYWJhemFieWRiY2R0ZnlkYkJkYmFiY2xmaGJhZWN1ZmdlbWJra2RuYVBUbWJhUGFaYVU6ck5VZGJrZG5hc3lkOzhlZ0hUbWJhSGNkdGFzYzpDZWZmYzk4ZmhlaW5hZXlkYmNieWQ6bTpIOmNqYkg6YmpqamJiYWVjOThmaGVhSGN1ZmdIbWJra2FzY2o7c2JmOEtqampqYmFhaztZaWVvdWFieWRsaHZhYnlkYmNsZmNiYWljZHR6OnRqampiaG9hZGNpOVVocmRuYWRUbWJkbmFsVG1iYWVod2FkaERpbmFvYWxhd3lkYmNkdGZ5ZGJjZHRmZ3FhcXlkYmNlZkJkYmF3Y2xmaHdhRGN1ZmdEbWJ4ZGtrYWVod2FkaERpbmFvYXd5ZGJjZHRmZ3FhcXlkYmNlZkJkYmF3Y2xmaHdhRGN1ZmdEbWJra2RuYWlUbWJjYmhEYW9od2luYXd5ZGJocWF3YURCZGJhd2NsZmh3YXFhRGZoRGFpY3VmZ2ltYmtrZG5hZGNpNm1iaW5hZWN3ZnlkYmh3YWVjbGZ5ZGJoRGFleWRiaGlkbmFsVG1iYWxhd2NkdGZ5ZGJod2FsYURjZHRmeWRiaERhbGFpY2R0ZnlkYmhpa2F2YW9haWNkdGZncXlkYmNpdGZhREJkYmF2YXF5ZGJjaXRmYXdCZGxhcWFxeWRiY2VmQmRiYXZhb2FEY2R0ZmdxeWRiY2l0ZmF3QmRiYXZhcXlkYmNpdGZhaUJkbGFxYXF5ZGJjZWZCZGJhdmFvYXdjZHRmZ3d5ZGJjaXRmYWlCZGJhdmF3eWRiY2l0ZmFEQmRsYXdhd3lkYmNlZkJkYmFlY3hmaGVhcmN1ZmdybWJra2FieWRiY2JCZGJrOnRvZER1ZTk5YWljZDRhaWZocmNlaHdpbmF3Z0RjZXRod2FEYXI2bWJrY3VhRGNkdGdyYURjRkZGRmkwRWNieWQxOkg6Y2piSGpqampiYmh3YW9hb3lkOUdncWNlZkJkOUdhb2FxY2R0ZmF3QmRiYXdjRmVhcno6dGpqamJoa2RuYWlUbWJhbGNkNGhsYURjdWZoeGNiaG1pbmFtaERkbmF2VG1iYXZhbWNkdGZ5ZGJoRGtjYmFkYURhbDJjZHRmZ0R5ZGxnd2F3Y2pqamo5NFNFZ3djSDRhdzdjOkY6YjpERDJjYmFEeWRiZ3dhd2NqampqOTRTRWd3Y0g0YXc3YztEO086QjhKMjdjYmFEeWR3Z0RhRGNqampqOTRTRWdEY0g0YUQ3YzozRjtOOE4yN2F4R2h3YW1jZHRoUGRuZG5kbmF2VG1iYWthd2NkdGZncnlkYmdEY3VTbWVhZGF2YVBmeWRiYWwyY2R0ZmdzSWRiaHpjZWhxaW5hcWhyZG5hZGF2YURjZHRmeWRiYWwyY2R0ZmdxSWRiYXo5Q21iYXFJZGxhc0lkbDlDbWJhcUlkd2FzSWR3OUJtbGthcmNlZmhxYWthd2FyZmF4R2d3Y2R0ZmdyeWRiZ0RjdTlobWJ4ZGtrYWthd2NkdGZncnlkYmdEY3VTbWJhZGFtYWwyY2R0ZmdzSWRiaHpjZWhxaW5hcWhyZG5hZGFEYWwyY2R0ZmdxSWRiYXo5Q21iYXFJZGxhc0lkbDlDbWJhcUlkd2FzSWR3OUJtaWthcmNlZmhxYWthd2FyZmF4R2d3Y2R0ZmdyeWRiZ0RjdTlobWJra2FyYW1CZGJhbWhEa2FiYVBmYURCZGJhbWNlZmdtYWk5aG1ia2tha2NieWQ6bTpIOmNqYkg6YmpqamJiYW9hb3lkOUdjdWZCZDlHZG5hZVRtYmFpVG1iY2JoRGFlaHdpbmF3YURCZGJhd2NsZmh3YWlhRGNlZmdEOWhtYmtjYmhEYWVod2luZG5hRGFieWRiZ3JTbWJhd2FlYXJjZHRmZ3J5ZGJCZGJhcmFEQmRia2FiY2xmaGJhd2NsZmh3YWlhRGNlZmdEOWhtYmtrazs6b2R2dXY5OThKampqamJjYTlSZ29jYnlkMTpHOmNqYkJkS2FvY2I4UGRqOkc6Y2piODNpemFvY2J5ZE46RzpjamJCZHdhb2NiOFBkOm06RzpjamI4M2liZG5hZFRtYmFpY2Q0aHJkbmFibWJkbmFsVG1iY2Jod2luYWVhbGF3Y2R0ZnlkYmFyMmNkdGZoRGNiaGlpbmFvY3pmYWlmZ3FhRGFpZklkYmdrYXFJZGJneGF4YWs5RUVVZGJhb2FpZmdxYWthcUlkYmd4YXhhazlERVVkYmFpY2xmZ2ljeDlobWJrYXdjZWZnd2FkOWhtYnhpa2thcmNkdGh3Y2JoRGluY2JoaWluYW9jemZhaWZncWFlYWlmSWRiZ2thcUlkYmd4YXhhazlFRVVkYmFvYWlmZ3Fha2FxSWRiZ3hheGFrOURFVWRiYWljbGZnaWN4OWhtYmthZWF3ZmhlYURjZWZnRGFkOWhtYnhka2tkbmFsVG1iY2Jod2luYWJhd2N4MmZnaWFlYWxhd2NkdGZ5ZGJhcjJjZHRmZ0RJZGJVZGJhaWFESWRsVWRsYWlhRElkd1Vkd2NiaGlpbmFvY3pmYWlmZ3FhRGFpZklkYmdrYXFJZGJneGF4YWs5RUVVZGJhb2FpZmdxYWthcUlkYmd4YXhhazlERVVkYmFpY2xmZ2ljeDlobWJrYXdjZWZnd2FkOWhtYnhka2thcmNkdGhsY2Jod2FlaERpbmFiYXdjeDJmZ2lhZWF3YXIyY2R0ZmdxSWRiVWRiYWlhcUlkbFVkbGFpYXFJZHdVZHdjYmhpaW5hb2N6ZmFpZmdxYURhaWZJZGJna2FxSWRiZ3hheGFrOUVFVWRiYW9haWZncWFrYXFJZGJneGF4YWs5REVVZGJhaWNsZmdpY3g5aG1ia2FEYWxmaERhd2NlZmd3YWQ5aG1ia2tKYmJiYmFvSWRiYW9JZHpneDp0Z2tha0piYmJiOURFZ2thb0lkbGFvSWRDZ206dGdQYVBhazlERWdrYW9JZHdhb0lkS2dQOnRnc2FzYWs5REVoc2RuYWJUbWJhZFRtYkpiYmJiSmJialphczp2YXNKYmJiYjlCRWhraW5hYmFrYWJJZGJheDp0TlVkYmFiY2xmZ29ha2FvSWRiYW06dE5VZGJhYmN3ZmdvYWthb0lkYmFQOnROVWRiYWJjeGZoYmFkY3VmZ2RtYmtrZG5hdlRtYmF2YVBVZHdhdmFtVWRsYXZheFVkYmthc2s6V2xld3VkbmFlVG1iY2JodmFiaG9pbmFvYXZCZGJhb2NsZmhvYWVhdmNlZmd2OWhtYmtrZG5haVRtYmNiaHJpbmFkYXJjZHRmaHdjYmhEaW5hbGF3YURjZHRndnlkOkc6RzpjamJjZHRmeWRiY2R0ZnlkYmhvZG5hbGF3YXZmeWRiY2R0ZnlkYmdxYWJhcWNkdGZna3lkYmd2U21iaW5ha2FiYXZncWNkdGZneHlkYmd2QmRiYXhoa2FxYXY5aG1ia2tkbmFvYWJhb2NkdGZna3lkYmd2U21iaW5ha2FiYXZnb2NkdGZneHlkYmd2QmRiYXhoa2FvYXY5aG1ia2tkbmFxYW9TbWJhYmFxYW9hcWFvMEVjZHRmYXFhb2FxYW82RUJkYmthRGNlZmdEY2k5aG1ia2FyY2lmZ3JhaTZtYmtrZG5hZW1iY2Jza2NiaHhpbmRuYWxheGNkdGd2ZnlkYmF4OWhtYmF4aG9kbmF4YWJhdmZnRHlkYmd2U21iYURocWluYXFhYmF2Z29jZHRmZ2t5ZGJndkJkYmFraHFhb2F2OWhtYmtrYURhb0JkYmtheGNlZmd4YWU5aG1ia2NiaGthYmh2Y2Job2luZG5kbmFvYWx5ZGJncTlobWJkbmFvYXZ5ZGJncTlobWJhdmFrQmRiYWtjZWZoa3hka2F2YWJhcWNkdGZ5ZGJCZGJ4ZWthdmFiYXFjZHRmeWRiQmRia2FsY2xmaGxhdmNsZmh2YWVhb2NlZmdvOWhtYmtha2s7amlpbHVkOTlldWFiY2JhZWNsdHo6dGpqamJodmRuYWxUbWJhZGhvYWlocmFsaHdpbmFyY3dmSWRiaERhcmNsZklkYmhxYXZhb3lkYmNsdGZna2FySWRiYWtJZGJNVWRiYWthcWFrSWRsTVVkbGFrYURha0lkd01VZHdha2FrSWR4SmJialpNVWR4YW9jbGZob2FyY3hmaHJhd2N1Zmd3bWJra2RuYWVUbWJhdmhrYWVocmluYWtjeGZnb0lkYmhEYW9jYkJkYmFrYWtJZGJKYmJiYkpiYmpaYUQ6dmFESmJiYmI5QkVnRE5VZGJha2NsZmdvYURhb0lkYk5VZGJha2N3ZmdvYURhb0lkYk5VZGJha2N6ZmhrYXJjdWZncm1ia2tkbmFsVG1iaW5hdmFkeWRiY2x0ZmdrYWljd2ZJZGJha0lkdzp0Z0RhRE5haUlkYmFrSWRiOnRnRGFETmFpY2xmSWRiYWtJZGw6dGdEYUROTU1nRGFrSWR4Z3FhcWFEOURFVWR4YWRjbGZoZGFpY3hmaGlhbGN1ZmdsbWJra2RuYWVUbWJhdmN4ZmhraW5hYmFrSWRiVWRiYWtjemZoa2FiY2xmaGJhZWN1ZmdlbWJra2s6bW9lcnVkbmFvVG1iYWVjZDRoemRuYXZUbWJhaWNkNGhIYXZjZHRoT2NiaEFpbmRuYVBhQWZSYmJUbWJhQWhlZG5hRFRtYmFEYUFjZHRmeWRiaGVrZG5hc1RtYmFzYWVmUmJiY2VHbWVrZG5hbWFBZlJiYmNsU21iYWJhZWF6MmNkdGZnaWFyYUFjeDJmZ0NJZGJha05heElkYk1VZGJhaWFDSWRsYWtOYXhJZGxNVWRsYWlhQ0lkd2FrTmF4SWR3TVVkd2thZGFlYUgyY2R0ZmhYYXFoZWF3aGlhdmhDaW5hWGFleWRiY2R0Z1FmYWlJZGJhbGFRZklkYjp2VWRiYWVjbGZoZWFpY2xmaGlhQ2N1ZmdDbWJra2F3YU9maHdhQWNlZmdBYW85aG1ieGRra2RuYXNtYmNiaGVhRGhpaW5kbmFQYWVmUmJiVG1iYWVoQ2RuYURUbWJhaXlkYmhDa2FtYWVmUmJiY2xTbWJhYmFDYXoyY2R0ZmdDYXJJZGJha05heElkYk1VZGJhQ2FyY2xmSWRiYWtOYXhJZGxNVWRsYUNhcmN3ZklkYmFrTmF4SWR3TVVkd2thaWNsZmhpYXJjeGZocmFvYWVjZWZnZTlobWJ4ZGtrZG5hRFRtYmluZG5hUFJiYlRtYmFzYUR5ZGJnZWZSYmJjZUdtYmFtUmJiY2xTbWJhYmFlYXoyY2R0ZmdlYXJJZGJha05heElkYk1VZGJhZWFyY2xmSWRiYWtOYXhJZGxNVWRsYWVhcmN3ZklkYmFrTmF4SWR3TVVkd2thUGNlZmhQYURjbGZoRGFtY2VmaG1hcmN4ZmhyYW9jdWZnb21ieGRra2F6Y2R0aGljYmhlaW5kbmFQYWVmUmJiVG1iYXNhZWZSYmJjZUdtYmFtYWVmUmJiY2xTbWJhYmFySWRiYWtOYXhJZGJNVWRiYWJjbGZhcmNsZklkYmFrTmF4SWRsTVVkYmFiY3dmYXJjd2ZJZGJha05heElkd01VZGJrYXJjeGZocmFiYWlmaGJhb2FlY2VmZ2U5aG1ia2trOE1iYWJhZWFkYWlhbGF2Y2JjYmNiY2JjYmFvYXJhd2FEejpiampqYms4TWJhYmFlYWRhaWFsYXZhb2FyYXdhRGFxYWtheGFtYVB6OmJqampia1JiYWJhYmFlYWRhaWFsYXZhb2FyYXdhRGFxYWtheGNqampqZFZhbXo6YmpqamJrOmc4S29xdWU5OWR1ZTk5ZHVxOTk4SmpqampiYztXYjlSZ3E4S2pqampiY2Joa2FxY3hmY2JjO0tiejp0ampqYjhBYXFjdWFsY3gyYWxjO3Y6UTt2OlFlMEVjYnlkMTpIOmNqYkhqampqYmJneEJkeGFxY2VCZDJheGFpYWxhdmNiY2J6OmVqampiOEFhcWN1YWxjZHRhbGNGRkZGaTBFZ21jYnlkMTpIOmNqYkhqampqYmJnaUJkemFxY2RCZDJkbmRuSkZGOTU5ZUpiYmpaYXdKYmJqWmF3SmJialo5REU6dmF3SjlWTzpkODY5REVndzpsSmJiYjlwOURUbWJhdzpPaFB4ZWtjampqajk0aFBrYWRjaTlVaHNhcmNvOVVoemRuZG5hb21iYVBjZDlpbWVrZG5hbFRtYmFQY3VmOllod2RuYW9UbWJjYmh2YWloSGF4aE9pbmRuZG5hb2F2ZlJiYmNlR1RtYmF2Y2pqampsVmhBeGVrZG5kbmFPY2xmSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hBeGVrY2pqamo5NGhBa2FBY3F0aEFkbmRuYU9jd2ZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaFh4ZWtjampqajk0aFhrYUFhWFZoQWRuZG5hT0lkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oWHhla2NqampqOTRoWGthQWFYY0N0VmhBa2FIYUFCZGJhSGNsZmhIYU9jeGZoT2FsYXZjZWZndjlobWJ4ZGtrYXhodmFpaE9hbGhIaW5kbmRuYXZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaEF4ZWtjampqajk0aEFrYUFjQ3RoQWRuZG5hdmNsZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oWHhla2NqampqOTRoWGthWGNxdGFBVmhBZG5kbmF2Y3dmSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hYeGVrY2pqamo5NGhYa2FPYUFhWFZCZGJhdmN4Zmh2YU9jbGZoT2FIY3VmZ0htYmtrYWRUbWJjYmhrYWVodmNiaE9pbmFrYWlhdmNsZnlkYmNkdGZ5ZGJnSGFpYXZjd2Z5ZGJjZHRmeWRiZ0E5aGFpYXZ5ZGJjZHRmeWRiZ1hhSDloYVhhQTloR0dmaGthdmN4Zmh2YU9jaWZnT2FkNm1ia2thcmNpOVVoUWRuZG5hejpaOnJKYmJiWk1ndzpsSmJiYjlwOURUbWJhdzpPaHZ4ZWtjampqajk0aHZrYVE6WmhMY2JoS2M6YndoemRuaW5ha2FROXBtZWF6YVA5UmNkOWltZWF2YXpjdWZnT2F2YU85aUVhUGNlZmF2YVA5a0VoWWRuYWxUbWJhWWN1ZjpZaHdkbmFvVG1iY2JoT2FpaEhheGh2aW5kbmRuYW9hT2ZSYmJjZUdUbWJhT2NqampqbFZoQXhla2RuZG5hdmNsZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oQXhla2NqampqOTRoQWthQWNxdGhBZG5kbmF2Y3dmSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hYeGVrY2pqamo5NGhYa2FBYVhWaEFkbmRuYXZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaFh4ZWtjampqajk0aFhrYUFhWGNDdFZoQWthSGFBQmRiYUhjbGZoSGF2Y3hmaHZhbGFPY2VmZ085aG1ieGRra2F4aHZhaWhPYWxoSGluZG5kbmF2SWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hBeGVrY2pqamo5NGhBa2FBY0N0aEFkbmRuYXZjbGZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaFh4ZWtjampqajk0aFhrYVhjcXRhQVZoQWRuZG5hdmN3ZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oWHhla2NqampqOTRoWGthT2FBYVhWQmRiYXZjeGZodmFPY2xmaE9hSGN1ZmdIbWJra2NiaE9kbmFkVG1iYWVodmNiaEhpbmFPYWlhdmNsZnlkYmNkdGZ5ZGJnQWFpYXZjd2Z5ZGJjZHRmeWRiZ1g5aGFpYXZ5ZGJjZHRmeWRiZ3JhQTloYXJhWDloR0dmaE9hdmN4Zmh2YUhjaWZnSGFkNm1ia2tkbmFzOlpnQ2FMOnRhWTpZZ3dhejpZOnRnOEFOYWs6WmdFYU86WmczOnROYUVhTDp0YXdhUDpZOnRnNU5hM2FDOnROTWc4RUpiYmJiOUJtYmFDYUU6dGE1YThBYTNhTDp0Tk5OYThFOnZhd01od2tkbmRuYU9hUTBtYmFPaGthWWhQeGVrYU9oc2FZaHprZG5kbmFLY2wwbWJkbmF3SmJiYlpNZ3c6bEpiYmI5cDlEVG1iYXc6T2h2eGRrY2pqamo5NGh2eGVrYVBhemZjZDlUaHZrYUtjZWZnS2NzOWhtYmtrZG5kbmRuYWttYkpiYmpaaHdjYmhPY2RodmFEbWV4ZGthbGNkNGFsZmhIY2VoT2luYU9ndmNldGhPYXZhSDZtYmtjYmhPYXFjdWF2Y2R0Z1lhdmNGRkZGaTBFY2J5ZDE6SDpjamJIampqamJiZ0tCZENhcWNpQmQyYXFhbWNieWQxOkg6Y2piSGpqampiYmd6QmRLYXFjbEJkMmRuZG5kbmRuYWxUbWJhUGN1ZjpZaHdhb1RtZWNiaE9haWhBYXhoSGluZG5kbmFvYU9mUmJiY2VHVG1iYU9jampqamxWaFh4ZWtkbmRuYUhjbGZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaFh4ZWtjampqajk0aFhrYVhjcXRoWGRuZG5hSGN3ZklkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9ocnhla2NqampqOTRocmthWGFyVmhYZG5kbmFISWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hyeGVrY2pqamo5NGhya2FYYXJjQ3RWaFhrYUFhWEJkYmFBY2xmaEFhSGN4ZmhIYWxhT2NlZmdPOWhtYnhpa2thS2NGZWFZejp0ampqYjhBY2JoUGNiaHZ4ZGtheGhPYWloSGFsaEFpbmRuZG5hT0lkYmF3TkpiYmJaTWdDOmxKYmJiOXA5RFRtYmFDOk9oWHhla2NqampqOTRoWGthWGNDdGhYZG5kbmFPY2xmSWRiYXdOSmJiYlpNZ0M6bEpiYmI5cDlEVG1iYUM6T2hyeGVrY2pqamo5NGhya2FyY3F0YVhWaFhkbmRuYU9jd2ZJZGJhd05KYmJiWk1nQzpsSmJiYjlwOURUbWJhQzpPaHJ4ZWtjampqajk0aHJrYUhhWGFyVkJkYmFPY3hmaE9hSGNsZmhIYUFjdWZnQW1ia2thS2NGZWFZejp0ampqYmhyYXZjdWZob2NiaFBjYmhZaW5kbmRuZG5hcmFpYVljZHRnS2Z5ZGJnQWNtNGFBN2M6djt0O2g7RXYyZ3ZjczRhdjdhb0dnSGNkdGZnWHlkYmdPY3VTbWJjZWh2aW5haWFPY2R0Z09meWRiYUFTbWRhSGF2ZmhPYXZjZWZodmFyYU9hb0dnSGNkdGZnWHlkYmdPY3U5aG1ia2thWGFZQmRiYVBodmFQY2VmaFB4ZWthemFPZnlkYmh2a2F6YUtmYXZCZGJhWWNlZmdZYWw5aG1ia2N1YVBjOFMyZ09hUGM7RDtPO2Y4VTBFaHZrY2JoWGFxYXZjYnlkMTpIOmNqYkhqampqYmJndkJkM2FxY3ZCZDJhdmNiYU96OnRqampiaE9kbmFkVG1iYWVoaWluYXhhaWNsZnlkYmdyY3gyZmd2SWRiYXhhaXlkYmdvY3gyZmdISWRiZzM6dGdDYXhhaWN3ZnlkYmdZY3gyZmdBSWRsYUhJZGxnOEE6dGd3TmF2SWRsYThBOnRnRWFBSWRiYTM6dGc4RU46dGdMYUxOYUVhQUlkd2FISWR3ZzU6dGc4Rk5hdklkd2E1OnRnRWF3Tjp0Z3dhd05hRWE4RU5hQ2E4Rk46dGdDYUNOTU1nOEU6cmhFSmJibm5KYmJqWmF6YW9jZHRmeWRiZ3ZhemFyY2R0ZnlkYmdBU2F2YXphWWNkdGZ5ZGJnclNHZ0hFaDhGZG5hOEVKYmJiYjlFVG1iYUxhRTp2aExhQ2FFOnZoQ2F3YUU6dmh3a2FPYXZjOFMyZmd2YXZJZGJhd2E4RmFFOnJOZ0Vhd05OZzhGTVVkYmF2YUNhRWFDTmdhTmdoYXZJZGxNVWRsYXZhTGFFYUxOZzhFTmdnYXZJZHdNVWR3YXZhd2FhTmdhYXZJZHhNVWR4YXZhOEVhd05nOEphdklkek1VZHphdmFDYThFTmc4RWF2SWRDTVVkQ2F2YXdhRWFMYTVOYXdhM05hOEFhQ05NTTptZzhBTmczTmd3YXZJZEtNVWRLYXZhQ2EzTmdDYXZJZDNNVWQzYXZhTGEzTmdMYXZJZGFNVWRhYXZhM2E4QU5nM2F2SWQ4S01VZDhLYXZhRWF2SWR5TVVkeWRuYUhtYmFPYUFjOFMyZmd2YThGYXZJZGJNVWRiYXZhaGF2SWRsTVVkbGF2YWdhdklkd01VZHdhdmFhYXZJZHhNVWR4YXZhOEphdklkek1VZHphdmE4RWF2SWRDTVVkQ2F2YXdhdklkS01VZEthdmFDYXZJZDNNVWQzYXZhTGF2SWRhTVVkYWF2YTNhdklkOEtNVWQ4S2F2YUVhdklkeU1VZHlhT2FyYzhTMmZndmE4RmF2SWRiTVVkYmF2YWhhdklkbE1VZGxhdmFnYXZJZHdNVWR3YXZhYWF2SWR4TVVkeGF2YThKYXZJZHpNVWR6YXZhOEVhdklkQ01VZENhdmF3YXZJZEtNVWRLYXZhQ2F2SWQzTVVkM2F2YUxhdklkYU1VZGFhdmEzYXZJZDhLTVVkOEthdmFFYXZJZHlNVWR5a2FpY3hmaGlhWGNpZmdYYWQ2bWJra2NiaEFhcWN1YVBjZHRndmFQY0ZGRkZpMEVnaWNieWQxOkg6Y2piSGpqampiYmdIQmRhYXFjb0JkMmFxYWljYnlkMTpIOmNqYkhqampqYmJnaUJkOEthcWNyQmQyYUhjRmVhdno6dGpqamJoWWRuYWxUbWJhemhIaW5KYmJiYkpiYmpaYU9hSHlkYmdYYzhTMmZndklkeWd3OnZhd0piYmJiOUJFYXZJZHdheGN3ZklkYmd3TmF2SWR6YXhJZGJnQ05hdklkYU1nTGFMTU1hd05hdklkbGF4Y2xmSWRiZ0xOYXZJZENhd05hdklkM01nd2F3TU1hTE5hdklkYmFDTmF2SWR4YUxOYXZJZEtNZ3dhd01NYUNOYXZJZDhLTU1NOmxOaHdkbmRuYVlhWGNkdGd2ZmdYeWRiY3VTbWJhaWF2ZklkYmF3OUVUbWVrYVhhQUJkYmFpYXZmYXdVZGJrYUhjbGZoSGF4Y3hmaHhhbGFBY2VmZ0E5aG1ia2tkbmRuYVBtYkpiYmJiaHd4ZWtKYmJiYmh3aW5haUlkYmdDYXdhd2FDOURFaHdhaWNsZmhpYVBjdWZnUG1ia2F3OnJod2tha2NkNGFrZmhPY2VoaWluYWlndmNldGhpYXZhTzZtYmtjYmhPYXFjdWF2Y2R0Z2lhdmNGRkZGaTBFY2J5ZDE6SDpjamJIampqamJiZ0hCZHlhSGNGZWFpejp0ampqYmhYZG5hZFRtYmF2Y3VmaHJjYmhQY2JoeGluZG5hemFlYXhjZHRmZ3Z5ZGJjZHRmeWRiZ2lhemF2Y2xmeWRiY2R0ZnlkYmdPU21iYWlhemF2Y3dmeWRiY2R0ZnlkYmd2U21iYU9hdlNtYmFZYXZjZHRmeWRiaEFkbmRuYVlhT2NkdGZ5ZGJndmFZYWljZHRmeWRiZ2k5cG1iYXZhQTlwbWJhQWhsYWlob2F2aEF4ZWtkbmFBYWk5cG1iYUFhdjlwbWJhaWhsYXZob3hla2F2aGxhQWhvYWloQWthYmFQY3gyZmd2YUFCZGJhdmN3ZmFvQmRiYXZjbGZhbEJkYmRuYVhhb2M6M0Y7TjhOMmFsYzpGOmI6REQyN2FBYztEO086QjhKMjdhckdnT2NkdGZndnlkYmdpY3VTbWJjZWhIaW5hSGh2ZG5hYmFpY3gyZmdpeWRiYUE5aG1iYWl5ZGxhbDlobWJhaXlkd2FvU21pa2F2Y2VmaEhhWGFPYXZmYXJHZ09jZHRmZ3Z5ZGJnaWN1OWhtYmtrYXZhUEJkYmFQY2VmaFBrYXhjaWZneGFkNm1ia2FQY2kyaE9rY3dodmFEVG1la2FEYXdVZGJrYXZjZHRodmFxY3hmYzk4ZmhpaW5haWF2ZnlkYmNieWQ6bTpIOmNqYkg6YmpqamJiYXZjOThmZ3ZtYmthcWM7V2JmOEtqampqYmFPazozbGRydWU5OjhKampqamJjO1diOVJncjhLampqamJjYmh3YXJjeGZjYmM7S2J6OnRqampiOEFkbmFiYWVTbWJhYmFlYWRjZHR6TWpqamI4QWthcmN1YWxjZHRhbGNGRkZGaTBFZ0RjYnlkMTpIOmNqYkhqampqYmJncUJkeGFyY2VCZDJhcWNiYWlhbGF2Y2JhcmN4Zno6ZGpqamJjdWFsY3gyYWxjO3Y6UTt2OlFlMEVjYnlkMTpIOmNqYkhqampqYmJoa2FyY3hmYXJ5ZDJneGNkdGZha0JkYmFyYXhjZWZnbUJkMmFrYWlhbGF2Y2JjYno6ZWpqamI4QWFyY3hmYW1jZHRmYURjYnlkMTpIOmNqYkhqampqYmJnaUJkYmFyYXhjZGZndkJkMmFyY3hmYXZjZHRmY3VhaWFsYWVhZGFxejpmampqYmdlY2x0YWVjampqamlHRWNieWQxOkg6Y2piSGpqampiYmdxQmRiYXFhZWFpYWthbHo6Z2pqamJheGNpZmhrZG5hZFRtYmFvYW9OaG9jYmh3YWJobGNiaGVpbmRuYXFhaWFseWRiZ3ZjZHRmeWRiY2R0ZklkYmFvOUVUbWJhbGNsZjhQZGJoUGFiYXdjZHRmZ0RhdkJkYmFEY2xmYVA4M2RiYXdjaWZod2thbGN4ZmhsYWVjaWZnZWFkNm1ia2tkbmFrVG1iYXhjZHRhcmN4ZmZjd2ZobGluYWx5ZGJjYnlkOm06SDpjamJIOmJqampiYmFsYzk4ZmhsYWtjdWZna21ia2thcmM7V2JmOEtqampqYmF3azpXQ29EdWQ5OXZ1ZTk5dnV2OTk4SmpqampiYztXYjlSZ3c4S2pqampiZG5kbmFybWJjYmhEeGVrYXdjeGZjYmM7S2J6OnRqampiOEFhd2N1YWRjeDJhZGM7djpRO3Y6UWUwRWNieWQxOkg6Y2piSGpqampiYmdxQmR4YXdjZUJkMmFxYWVhZGFpY2JjYno6ZWpqamI4QWF3Y3VhZGNkdGFkY0ZGRkZpMEVna2NieWQxOkg6Y2piSGpqampiYmd4QmR6YXdjZEJkMmFkY2Q0YWRmaG1jZWhlaW5hZWdpY2V0aGVhaWFtNm1ia2NiaFBhd2N1YWljZHRnc2FpY0ZGRkZpMEVjYnlkMTpIOmNqYkhqampqYmJnekJkQ2F3Y2lCZDJkbmRuYXI6WmdIOnJKYmJiWk1nTzpsSmJiYjlwOURUbWJhTzpPaGV4ZWtjampqajk0aGVrYWljdWZoQWM6YndoQ2NiaFhhZGhRY2JoTGluYWVhQ2N1ZmdpYWVhaTlpRWFQY2VmYWVhUDlrRWhEZG5kbmFkVG1iYURjdWY6WWhPYXFoaWF4aGVhZGhtaW5kbmRuYWlJZGJhT05KYmJiWk1nSzpsSmJiYjlwOURUbWJhSzpPaFl4ZWtjampqajk0aFlrYVljQ3RoWWRuZG5haWNsZklkYmFPTkpiYmJaTWdLOmxKYmJiOXA5RFRtYmFLOk9oOEF4ZWtjampqajk0aDhBa2E4QWNxdGFZVmhZZG5kbmFpY3dmSWRiYU9OSmJiYlpNZ0s6bEpiYmI5cDlEVG1iYUs6T2g4QXhla2NqampqOTRoOEFrYWVhWWE4QVZCZGJhaWN4ZmhpYWVjbGZoZWFtY3VmZ21tYmthemNGZWFzejp0ampqYmhFY2JoM2NiaDVpbmRuYUVheGE1Y2R0ZnlkYmdZY200YVk3Yzp2O3Q7aDtFdjJnaWNzNGFpN2FBR2dtY2R0Zmc4QXlkYmdlY3VTbWJhZWFZU21iY2VoaWluYUVhbWFpZmFBR2dtY2R0Zmc4QXlkYmdlY3VTbWVhaWNlZmhpYWVhWTlobWJra2E4QWFZQmRiYTNhZWN1U2ZoM2E1Y2VmZzVhZDlobWJ4ZGtrYXpjRmVhc3o6dGpqamI4QWNiaDNrZG5hUTpaZ0thSDp0YUQ6WWdPYUM6WTp0ZzhFTmFYOlpnOEZhMzpaZ2E6dE5hOEZhSDp0YU9hUDpZOnRnaE5hYWFLOnROTWdnSmJiYmI5Qm1iYUthOEY6dGFoYThFYWFhSDp0Tk5OYWc6dmFPTWhPa2FQYURhM2FyMGdpRWhQYVhhM2FpRWhYZG5hM2FyU21iYURhQ2FpRWdDYVA5UmNkOWltYmRuZG5hTGNsMG1iZG5hT0piYmJaTWdPOmxKYmJiOXA5RFRtYmFPOk9oZXhka2NqampqOTRoZXhla2FQYUNmY2Q5VGhla2EzYVFhaUVoUWFMY2VmZ0xjczlobWVra2RuZG5hWG1iY2loaWNiaER4ZWtjYmhpYXdha2NieWQxOkg6Y2piSGpqampiYmc1QmRLYXdjbEJkMmFQY3VmOlloS2RuZG5hZFRtYmFxaGlheGhlYWRobWluZG5kbmFpSWRiYUtOSmJiYlpNZ086bEpiYmI5cDlEVG1iYU86T2hZeGVrY2pqamo5NGhZa2FZY0N0aFlkbmRuYWljbGZJZGJhS05KYmJiWk1nTzpsSmJiYjlwOURUbWJhTzpPaDhBeGVrY2pqamo5NGg4QWthOEFjcXRhWVZoWWRuZG5haWN3ZklkYmFLTkpiYmJaTWdPOmxKYmJiOXA5RFRtYmFPOk9oOEF4ZWtjampqajk0aDhBa2FlYVlhOEFWQmRiYWljeGZoaWFlY2xmaGVhbWN1ZmdtbWJrYXpjRmVhc3o6dGpqamJoRWNiaERjYmgzaW5kbmRuZG5hRWF4YTNjZHRnQ2Z5ZGJnWWNtNGFZN2M6djt0O2g7RXYyZ2ljczRhaTdhQUdnbWNkdGZnOEF5ZGJnZWN1U21iY2VoaWluYXhhZWNkdGdlZnlkYmFZU21kYW1haWZoZWFpY2VmaGlhRWFlYUFHZ21jZHRmZzhBeWRiZ2VjdTlobWJra2E4QWEzQmRiYURoaWFEY2VmaER4ZWthNWFlZnlkYmhpa2E1YUNmYWlCZGJhM2NlZmczYWQ5aG1ia2N1YURjMzJnaWFEYztqOktNO2piMEVoZXhla2F6Y0ZlYXN6OnRqampiOEFjYmhEY2JoZWthd2FlY2J5ZDE6SDpjamJIampqamJiZ2VCZDNhd2N2QmQyYWVjYmFpejp0ampqYmg4QWF2Y2Q0aHhkbmFkVG1iZG5hbFRtYmF4Y2R0aEVhNWhZYXFoZWFsaG1hZGhBaW5hOEFhWXlkYmMzMmZnaWFlSWRiYWlJZGJNVWRiYWlhZWNsZklkYmFpSWRsTVVkbGFpYWVjd2ZJZGJhaUlkd01VZHdhaWFtSWRiYWlJZHhNVWR4YWlhbWNsZklkYmFpSWR6TVVkemFpYW1jd2ZJZGJhaUlkQ01VZENhaWFpSWRLSmJialpNVWRLYVljbGZoWWFlY3hmaGVhbWFFZmhtYUFjdWZnQW1ieGRra2E1aG1hcWhlYWRoWWluYThBYW15ZGJjMzJmZ2lhZUlkYmFpSWRiTVVkYmFpYWVjbGZJZGJhaUlkbE1VZGxhaWFlY3dmSWRiYWlJZHdNVWR3YWlhaUlkeEpiYmJiTVVkeGFpYWlJZHpKYmJiYk1VZHphaWFpSWRDSmJiYmJNVWRDYWlhaUlkS0piYmpaTVVkS2FtY2xmaG1hZWN4ZmhlYVljdWZnWW1ia2tkbmFEVG1iYThBaGlhRGhlaW5haWFpSWRiSmJiYmJKYmJqWmFpY0tmSWRiZ086dmFPSmJiYmI5QkVnT05VZGJhaWNsZmdtYU9hbUlkYk5VZGJhaWN3ZmdtYU9hbUlkYk5VZGJhaWN4ZmdtYU9hbUlkYk5VZGJhaWN6ZmdtYU9hbUlkYk5VZGJhaWNDZmdtYU9hbUlkYk5VZGJhaWMzZmhpYWVjdWZnZW1ia2tjYmhZYXdjdWFEY2R0Z0NhRGNGRkZGaTBFZ2ljYnlkMTpIOmNqYkhqampqYmJnZUJkYWF3Y29CZDJhd2FpY2J5ZDE6SDpjamJIampqamJiZ0VCZDhLYWVjRmVhQ3o6dGpqamJoM2RuYWRUbWJhb0piYmpaSmJialphSzp2YVBjZVNFTmdPYU9OaEtheGNkdGh4YWxoZWluYUthZWM7ODpHOmNqYmFsRWdtSWR3YThBYTV5ZGJnQWMzMmZnaUlkQzp0Z09hT05hbUlkYmFpSWR4OnRnT2FPTmFtSWRsYWlJZHo6dGdPYU9OTU1OYXFjd2ZJZGJhaUlkdzp0Z09hT05hcUlkYmFpSWRiOnRnT2FPTmFxY2xmSWRiYWlJZGw6dGdPYU9OTU1NaE9kbmRuYTNhQWNkdGdpZmdteWRiY3VTbWJhRWFpZklkYmFPOUVUbWVrYW1hWUJkYmFFYWlmYU9VZGJrYTVjbGZoNWFxY3hmaHFhZWF4ZmhlYWRhWWNlZmdZOWhtYmtrYWJhM2FDek1qampiOEFjcmhpa2FpY2R0aGlhd2N4ZmM5OGZoZWluYWVhaWZ5ZGJjYnlkOm06SDpjamJIOmJqampiYmFpYzk4ZmdpbWJra2F3YztXYmY4S2pqampiYURrOlBkaWR1aTk5ZHVjYmhpOEpqampqYmNhOVJnbGNieWQxOkc6Y2piQmRLYWxjYjhQZGo6RzpjamI4M2l6YWxjYnlkTjpHOmNqYkJkd2FsY2I4UGQ6bTpHOmNqYjgzaWJkbmRuYWVtYkpiYmpGaHZKYmJqRmhvSmJiakZocnhla2FkY2Q0Y2R0aHdpbmNiaGRpbmFsY3pmYWRmZ0RhYmFkZklkYmd2YURJZGJnb2FvYXY5RUVVZGJhbGFkZmdEYXZhRElkYmdvYW9hdjlERVVkYmFkY2xmZ2RjeDlobWJrYWJhd2ZoYmFpY2VmZ2lhZTlobWJrYWxJZHdhbElkSzp0aHJhbElkbGFsSWRDOnRob2FsSWRiYWxJZHo6dGh2a0piYmJiYXZhdkpiYmJiOURFZ3Zhb2FvYXY5REVndmFyYXJhdjlERWs5RGVldWFiY0ZlYWljZHR6OnRqampiaGxjYmhiZG5hZFRtYmluZG5hbGFleWRiY2R0ZmdpeWRiY3U5aG1iYWlhYkJkYmFiY2VmaGJrYWVjbGZoZWFkY3VmZ2RtYmtrYWJrO0JpZHF1aTk5OEpqampqYmM7V2I5UmdsOEtqampqYmFsY3hmY2JjO0tiejp0ampqYjhBYWRjZDRhZGZodmNlaG9pbmFvZ3JjZXRob2FyYXY2bWJrYWxjdWFyY2R0Z29hcmNGRkZGaTBFY2J5ZDE6SDpjamJIampqamJiZ3ZCZHhhdmNGZWFvejp0ampqYmh3ZG5hZFRtYmFpY2Q0aERhcmN1ZmhxY2Joa2luZG5kbmF3Y2JhZWFrYUQyY2R0ZmdyeWRsZ2lhaWNqampqOTRTRWdvY0g0YW83YzpGOmI6REQyY2JhcnlkYmd4YXhjampqajk0U0Vnb2NINGFvN2M7RDtPOkI4SjI3Y2Jhcnlkd2dtYW1jampqajk0U0VncmNINGFyN2M6M0Y7TjhOMjdhcUdndmNkdGZncnlkYmdvY3VTbWJhbTo6aFBhaTo6aHNheDo6aHpjZWhpaW5haWhyZG5hZWFvYUQyY2R0ZmdpSWRiYXo5Q21iYWlJZGxhczlDbWJhaUlkd2FQOUJtaWthcmNlZmhpYXdhdmFyZmFxR2d2Y2R0ZmdyeWRiZ29jdTlobWJra2FyYWtCZGJha2hva2FiYWtjZHRmYW9CZGJha2NlZmdrYWQ5aG1ia2thbHlkeGNieWQ6bTpIOmNqYkg6YmpqamJiYWxjO1diZjhLampqamJrOXRlaXVjYmNieWQ6cTpIOmNqYmdlYWJjaWZjOThHZmdiQmQ6cTpIOmNqYmRuZG5hYlpiY3p0Z2Q5bm1iY3VoaWFiYWQ5UmNGRmlmY3o0bmJjdVNtZWthZWhpa2FpaztMZWVldWRuZG5hZWFiVmNpR1RtYmFiaGl4ZWtkbmRuYWRjejlwbWJhYmhpeGVrYWJoaWluYWlhZXlkYkJkYmFpY2xmYWVjbGZ5ZGJCZGJhaWN3ZmFlY3dmeWRiQmRiYWljeGZhZWN4ZnlkYkJkYmFlY3pmaGVhaWN6ZmhpYWRjOVdmZ2RjczBtYmtrYWRjbDZtYmluYWlhZXlkYkJkYmFlY2xmaGVhaWNsZmhpYWRjOThmZ2RjaTBtYmtrZG5hZFRtYmluYWlhZVJiYjg2YmJhaWNlZmhpYWVjZWZoZWFkY3VmZ2RtYmtrYWJrO2FlZWR1ZG5kbmFiY2lHVG1iYWJoaXhla2FlY0ZlR2M6YjpjOmV3MmhsZG5kbmFkY3o5cG1iYWJoaXhla2FiaGlpbmFpYWxCZGJhaWN4ZmFsQmRiYWljd2ZhbEJkYmFpY2xmYWxCZGJhaWN6ZmhpYWRjOVdmZ2RjczBtYmtrYWRjbDZtYmluYWlhbEJkYmFpY2xmaGlhZGM5OGZnZGNpMG1ia2tkbmFkVG1iaW5haWFlODZiYmFpY2VmaGlhZGN1ZmdkbWJra2Fiazl0ZWl1Y2JjYnlkOnE6SDpjamJnZWFiY3JmYzk0R2ZnYkJkOnE6SDpjamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWtUZWV1Y2JhYmNieWQ6cTpIOmNqYmdlOVJjaWZjOThHYWVmZ2JCZDpxOkg6Y2piZG5hYlpiY3p0Z2U5bm1iYWJhZTlSY0ZGaWZjejRuYjhBa2trOktlZGJjajpHZGsxZUZGdXVGRnV1RkZ1dUZGdUZGRnVGRkZ1RmJiYmJiYmJiZWJiYmRiYmJiYmJiZWJiYmViYmJkYmJiYmJiYmJiYmJlZWVlZWJlYmJlYmJlYmViYmJlZWJiYmJiYmJiYmJiYmVlZWVlZWJlYmJlZWViZWViYmJiZWJlYmJiYmJiYmJiYmJiYmJiYmJiYzE6SGRreGViYmJkYmJiOkc6cWJiIixlPW5ldyBVaW50OEFycmF5KFszMiwwLDY1LDIsMSwxMDYsMzQsMzMsMywxMjgsMTEsNCwxMyw2NCw2LDI1MywxMCw3LDE1LDExNiwxMjcsNSw4LDEyLDQwLDE2LDE5LDU0LDIwLDksMjcsMjU1LDExMywxNyw0Miw2NywyNCwyMywxNDYsMTQ4LDE4LDE0LDIyLDQ1LDcwLDY5LDU2LDExNCwxMDEsMjEsMjUsNjMsNzUsMTM2LDEwOCwyOCwxMTgsMjksNzMsMTE1XSk7aWYodHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IilyZXR1cm57c3VwcG9ydGVkOiExfTt2YXIgdCxvPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGEobikse30pLnRoZW4oZnVuY3Rpb24oXyl7dD1fLmluc3RhbmNlLHQuZXhwb3J0cy5fX3dhc21fY2FsbF9jdG9ycygpfSk7ZnVuY3Rpb24gYShfKXtmb3IodmFyIHc9bmV3IFVpbnQ4QXJyYXkoXy5sZW5ndGgpLEU9MDtFPF8ubGVuZ3RoOysrRSl7dmFyIFI9Xy5jaGFyQ29kZUF0KEUpO3dbRV09Uj45Nj9SLTk3OlI+NjQ/Ui0zOTpSKzR9Zm9yKHZhciBTPTAsRT0wO0U8Xy5sZW5ndGg7KytFKXdbUysrXT13W0VdPDYwP2Vbd1tFXV06KHdbRV0tNjApKjY0K3dbKytFXTtyZXR1cm4gdy5idWZmZXIuc2xpY2UoMCxTKX1mdW5jdGlvbiByKF8pe2lmKCFfKXRocm93IG5ldyBFcnJvcigiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGkoXyl7cmV0dXJuIG5ldyBVaW50OEFycmF5KF8uYnVmZmVyLF8uYnl0ZU9mZnNldCxfLmJ5dGVMZW5ndGgpfWZ1bmN0aW9uIGYoXyx3LEUsUil7dmFyIFM9dC5leHBvcnRzLnNicmssQz1TKEUqNCksST1TKEUqUio0KSxNPW5ldyBVaW50OEFycmF5KHQuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtNLnNldChpKHcpLEkpLF8oQyxJLEUsUio0KSxNPW5ldyBVaW50OEFycmF5KHQuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTt2YXIgUD1uZXcgVWludDMyQXJyYXkoRSk7cmV0dXJuIG5ldyBVaW50OEFycmF5KFAuYnVmZmVyKS5zZXQoTS5zdWJhcnJheShDLEMrRSo0KSksUyhDLVMoMCkpLFB9ZnVuY3Rpb24gZChfLHcsRSl7dmFyIFI9dC5leHBvcnRzLnNicmssUz1SKHcubGVuZ3RoKjQpLEM9UihFKjQpLEk9bmV3IFVpbnQ4QXJyYXkodC5leHBvcnRzLm1lbW9yeS5idWZmZXIpLE09aSh3KTtJLnNldChNLFMpO3ZhciBQPV8oQyxTLHcubGVuZ3RoLEUpO0k9bmV3IFVpbnQ4QXJyYXkodC5leHBvcnRzLm1lbW9yeS5idWZmZXIpO3ZhciBGPW5ldyBVaW50MzJBcnJheShFKTtuZXcgVWludDhBcnJheShGLmJ1ZmZlcikuc2V0KEkuc3ViYXJyYXkoQyxDK0UqNCkpLFIoUy1SKDApKTtmb3IodmFyIEE9MDtBPHcubGVuZ3RoOysrQSl3W0FdPUZbd1tBXV07cmV0dXJuW0YsUF19ZnVuY3Rpb24gYyhfKXtmb3IodmFyIHc9MCxFPTA7RTxfLmxlbmd0aDsrK0Upe3ZhciBSPV9bRV07dz13PFI/Ujp3fXJldHVybiB3fWZ1bmN0aW9uIHUoXyx3LEUsUixTLEMsSSxNLFApe3ZhciBGPXQuZXhwb3J0cy5zYnJrLEE9Rig0KSx4PUYoRSo0KSxOPUYoUypDKSx2PUYoRSo0KSxVPW5ldyBVaW50OEFycmF5KHQuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtVLnNldChpKFIpLE4pLFUuc2V0KGkodyksdik7dmFyIEw9Xyh4LHYsRSxOLFMsQyxJLE0sUCxBKTtVPW5ldyBVaW50OEFycmF5KHQuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTt2YXIgRD1uZXcgVWludDMyQXJyYXkoTCk7aShEKS5zZXQoVS5zdWJhcnJheSh4LHgrTCo0KSk7dmFyIEc9bmV3IEZsb2F0MzJBcnJheSgxKTtyZXR1cm4gaShHKS5zZXQoVS5zdWJhcnJheShBLEErNCkpLEYoQS1GKDApKSxbRCxHWzBdXX1mdW5jdGlvbiBsKF8sdyxFLFIsUyxDLEksTSxQLEYsQSx4LE4pe3ZhciB2PXQuZXhwb3J0cy5zYnJrLFU9dig0KSxMPXYoRSo0KSxEPXYoUypDKSxHPXYoUypNKSxWPXYoUC5sZW5ndGgqNCksTz12KEUqNCksSj1GP3YoUyk6MCxyZT1uZXcgVWludDhBcnJheSh0LmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7cmUuc2V0KGkoUiksRCkscmUuc2V0KGkoSSksRykscmUuc2V0KGkoUCksVikscmUuc2V0KGkodyksTyksRiYmcmUuc2V0KGkoRiksSik7dmFyIHNlPV8oTCxPLEUsRCxTLEMsRyxNLFYsUC5sZW5ndGgsSixBLHgsTixVKTtyZT1uZXcgVWludDhBcnJheSh0LmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIG9lPW5ldyBVaW50MzJBcnJheShzZSk7aShvZSkuc2V0KHJlLnN1YmFycmF5KEwsTCtzZSo0KSk7dmFyIGNlPW5ldyBGbG9hdDMyQXJyYXkoMSk7cmV0dXJuIGkoY2UpLnNldChyZS5zdWJhcnJheShVLFUrNCkpLHYoVS12KDApKSxbb2UsY2VbMF1dfWZ1bmN0aW9uIG0oXyx3LEUsUixTLEMsSSxNLFAsRixBLHgsTil7dmFyIHY9dC5leHBvcnRzLnNicmssVT12KDQpLEw9dihTKkMpLEQ9dihTKk0pLEc9dihQLmxlbmd0aCo0KSxWPXYoRSo0KSxPPUY/dihTKTowLEo9bmV3IFVpbnQ4QXJyYXkodC5leHBvcnRzLm1lbW9yeS5idWZmZXIpO0ouc2V0KGkoUiksTCksSi5zZXQoaShJKSxEKSxKLnNldChpKFApLEcpLEouc2V0KGkodyksViksRiYmSi5zZXQoaShGKSxPKTt2YXIgcmU9XyhWLEUsTCxTLEMsRCxNLEcsUC5sZW5ndGgsTyxBLHgsTixVKTtKPW5ldyBVaW50OEFycmF5KHQuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKSxpKHcpLnNldChKLnN1YmFycmF5KFYsVityZSo0KSksaShSKS5zZXQoSi5zdWJhcnJheShMLEwrUypDKSksaShJKS5zZXQoSi5zdWJhcnJheShELEQrUypNKSk7dmFyIHNlPW5ldyBGbG9hdDMyQXJyYXkoMSk7cmV0dXJuIGkoc2UpLnNldChKLnN1YmFycmF5KFUsVSs0KSksdihVLXYoMCkpLFtyZSxzZVswXV19ZnVuY3Rpb24gaChfLHcsRSxSKXt2YXIgUz10LmV4cG9ydHMuc2JyayxDPVMoRSpSKSxJPW5ldyBVaW50OEFycmF5KHQuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtJLnNldChpKHcpLEMpO3ZhciBNPV8oQyxFLFIpO3JldHVybiBTKEMtUygwKSksTX1mdW5jdGlvbiBiKF8sdyxFLFIsUyxDLEksTSl7dmFyIFA9dC5leHBvcnRzLnNicmssRj1QKE0qNCksQT1QKEUqUikseD1TP1AoRSpDKTowLE49bmV3IFVpbnQ4QXJyYXkodC5leHBvcnRzLm1lbW9yeS5idWZmZXIpO04uc2V0KGkodyksQSksUyYmTi5zZXQoaShTKSx4KTt2YXIgdj1fKEYsQSxFLFIseCxDLEksTSk7Tj1uZXcgVWludDhBcnJheSh0LmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIFU9bmV3IFVpbnQzMkFycmF5KHYpO3JldHVybiBpKFUpLnNldChOLnN1YmFycmF5KEYsRit2KjQpKSxQKEYtUCgwKSksVX1mdW5jdGlvbiBwKF8sdyxFLFIsUyxDLEksTSxQKXt2YXIgRj10LmV4cG9ydHMuc2JyayxBPUYoNCkseD1GKEUqNCksTj1GKFMqQyksdj1GKEUqNCksVT1JP0YoUyk6MCxMPW5ldyBVaW50OEFycmF5KHQuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtMLnNldChpKFIpLE4pLEwuc2V0KGkodyksdiksSSYmTC5zZXQoaShJKSxVKTt2YXIgRD1fKHgsdixFLE4sUyxDLFUsTSxQLEEpO0w9bmV3IFVpbnQ4QXJyYXkodC5leHBvcnRzLm1lbW9yeS5idWZmZXIpO3ZhciBHPW5ldyBVaW50MzJBcnJheShEKTtpKEcpLnNldChMLnN1YmFycmF5KHgseCtEKjQpKTt2YXIgVj1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBpKFYpLnNldChMLnN1YmFycmF5KEEsQSs0KSksRihBLUYoMCkpLFtHLFZbMF1dfWZ1bmN0aW9uIHkoXyx3LEUsUixTLEMsSSl7dmFyIE09dC5leHBvcnRzLnNicmssUD1NKEUqNCksRj1NKFMqQyksQT1NKEUqNCkseD1uZXcgVWludDhBcnJheSh0LmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7eC5zZXQoaShSKSxGKSx4LnNldChpKHcpLEEpO3ZhciBOPV8oUCxBLEUsRixTLEMsSSk7eD1uZXcgVWludDhBcnJheSh0LmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIHY9bmV3IFVpbnQzMkFycmF5KE4pO3JldHVybiBpKHYpLnNldCh4LnN1YmFycmF5KFAsUCtOKjQpKSxNKFAtTSgwKSksdn12YXIgVD17TG9ja0JvcmRlcjoxLFNwYXJzZToyLEVycm9yQWJzb2x1dGU6NCxQcnVuZTo4LFJlZ3VsYXJpemU6MTYsUGVybWlzc2l2ZTozMixSZWd1bGFyaXplTGlnaHQ6NjQsX0ludGVybmFsRGVidWc6MTw8MzB9O3JldHVybntyZWFkeTpvLHN1cHBvcnRlZDohMCxjb21wYWN0TWVzaDpmdW5jdGlvbihfKXtyKF8gaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIEludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8XyBpbnN0YW5jZW9mIEludDE2QXJyYXkpLHIoXy5sZW5ndGglMz09MCk7dmFyIHc9Xy5CWVRFU19QRVJfRUxFTUVOVD09ND9fOm5ldyBVaW50MzJBcnJheShfKSxFPWQodC5leHBvcnRzLm1lc2hvcHRfb3B0aW1pemVWZXJ0ZXhGZXRjaFJlbWFwLHcsYyhfKSsxKTtpZihfIT09dylmb3IodmFyIFI9MDtSPHcubGVuZ3RoOysrUilfW1JdPXdbUl07cmV0dXJuIEV9LGdlbmVyYXRlUG9zaXRpb25SZW1hcDpmdW5jdGlvbihfLHcpe3JldHVybiByKF8gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoXy5sZW5ndGgldz09MCkscih3Pj0zKSxmKHQuZXhwb3J0cy5tZXNob3B0X2dlbmVyYXRlUG9zaXRpb25SZW1hcCxfLF8ubGVuZ3RoL3csdyl9LHNpbXBsaWZ5OmZ1bmN0aW9uKF8sdyxFLFIsUyxDKXtyKF8gaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIEludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8XyBpbnN0YW5jZW9mIEludDE2QXJyYXkpLHIoXy5sZW5ndGglMz09MCkscih3IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKHcubGVuZ3RoJUU9PTApLHIoRT49MykscihSPj0wJiZSPD1fLmxlbmd0aCkscihSJTM9PTApLHIoUz49MCk7Zm9yKHZhciBJPTAsTT0wO008KEM/Qy5sZW5ndGg6MCk7KytNKXIoQ1tNXWluIFQpLEl8PVRbQ1tNXV07dmFyIFA9Xy5CWVRFU19QRVJfRUxFTUVOVD09ND9fOm5ldyBVaW50MzJBcnJheShfKSxGPXUodC5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnksUCxfLmxlbmd0aCx3LHcubGVuZ3RoL0UsRSo0LFIsUyxJKTtyZXR1cm4gRlswXT1fIGluc3RhbmNlb2YgVWludDMyQXJyYXk/RlswXTpuZXcgXy5jb25zdHJ1Y3RvcihGWzBdKSxGfSxzaW1wbGlmeVdpdGhBdHRyaWJ1dGVzOmZ1bmN0aW9uKF8sdyxFLFIsUyxDLEksTSxQLEYpe3IoXyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fHxfIGluc3RhbmNlb2YgSW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIFVpbnQxNkFycmF5fHxfIGluc3RhbmNlb2YgSW50MTZBcnJheSkscihfLmxlbmd0aCUzPT0wKSxyKHcgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIody5sZW5ndGglRT09MCkscihFPj0zKSxyKFIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoUi5sZW5ndGg9PVMqKHcubGVuZ3RoL0UpKSxyKFM+PTApLHIoST09bnVsbHx8SSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpLHIoST09bnVsbHx8SS5sZW5ndGg9PXcubGVuZ3RoL0UpLHIoTT49MCYmTTw9Xy5sZW5ndGgpLHIoTSUzPT0wKSxyKFA+PTApLHIoQXJyYXkuaXNBcnJheShDKSkscihTPj1DLmxlbmd0aCkscihDLmxlbmd0aDw9MzIpO2Zvcih2YXIgQT0wO0E8Qy5sZW5ndGg7KytBKXIoQ1tBXT49MCk7Zm9yKHZhciB4PTAsQT0wO0E8KEY/Ri5sZW5ndGg6MCk7KytBKXIoRltBXWluIFQpLHh8PVRbRltBXV07dmFyIE49Xy5CWVRFU19QRVJfRUxFTUVOVD09ND9fOm5ldyBVaW50MzJBcnJheShfKSx2PWwodC5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnlXaXRoQXR0cmlidXRlcyxOLF8ubGVuZ3RoLHcsdy5sZW5ndGgvRSxFKjQsUixTKjQsbmV3IEZsb2F0MzJBcnJheShDKSxJLE0sUCx4KTtyZXR1cm4gdlswXT1fIGluc3RhbmNlb2YgVWludDMyQXJyYXk/dlswXTpuZXcgXy5jb25zdHJ1Y3Rvcih2WzBdKSx2fSxzaW1wbGlmeVdpdGhVcGRhdGU6ZnVuY3Rpb24oXyx3LEUsUixTLEMsSSxNLFAsRil7cihfIGluc3RhbmNlb2YgVWludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQzMkFycmF5fHxfIGluc3RhbmNlb2YgVWludDE2QXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQxNkFycmF5KSxyKF8ubGVuZ3RoJTM9PTApLHIodyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscih3Lmxlbmd0aCVFPT0wKSxyKEU+PTMpLHIoUiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihSLmxlbmd0aD09Uyoody5sZW5ndGgvRSkpLHIoUz49MCkscihJPT1udWxsfHxJIGluc3RhbmNlb2YgVWludDhBcnJheSkscihJPT1udWxsfHxJLmxlbmd0aD09dy5sZW5ndGgvRSkscihNPj0wJiZNPD1fLmxlbmd0aCkscihNJTM9PTApLHIoUD49MCkscihBcnJheS5pc0FycmF5KEMpKSxyKFM+PUMubGVuZ3RoKSxyKEMubGVuZ3RoPD0zMik7Zm9yKHZhciBBPTA7QTxDLmxlbmd0aDsrK0EpcihDW0FdPj0wKTtmb3IodmFyIHg9MCxBPTA7QTwoRj9GLmxlbmd0aDowKTsrK0EpcihGW0FdaW4gVCkseHw9VFtGW0FdXTt2YXIgTj1fLkJZVEVTX1BFUl9FTEVNRU5UPT00P186bmV3IFVpbnQzMkFycmF5KF8pLHY9bSh0LmV4cG9ydHMubWVzaG9wdF9zaW1wbGlmeVdpdGhVcGRhdGUsTixfLmxlbmd0aCx3LHcubGVuZ3RoL0UsRSo0LFIsUyo0LG5ldyBGbG9hdDMyQXJyYXkoQyksSSxNLFAseCk7aWYoXyE9PU4pZm9yKHZhciBBPTA7QTx2WzBdOysrQSlfW0FdPU5bQV07cmV0dXJuIHZ9LGdldFNjYWxlOmZ1bmN0aW9uKF8sdyl7cmV0dXJuIHIoXyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihfLmxlbmd0aCV3PT0wKSxyKHc+PTMpLGgodC5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnlTY2FsZSxfLF8ubGVuZ3RoL3csdyo0KX0sc2ltcGxpZnlQb2ludHM6ZnVuY3Rpb24oXyx3LEUsUixTLEMpe3JldHVybiByKF8gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoXy5sZW5ndGgldz09MCkscih3Pj0zKSxyKEU+PTAmJkU8PV8ubGVuZ3RoL3cpLFI/KHIoUiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscihSLmxlbmd0aCVTPT0wKSxyKFM+PTMpLHIoXy5sZW5ndGgvdz09Ui5sZW5ndGgvUyksYih0LmV4cG9ydHMubWVzaG9wdF9zaW1wbGlmeVBvaW50cyxfLF8ubGVuZ3RoL3csdyo0LFIsUyo0LEN8fDAsRSkpOmIodC5leHBvcnRzLm1lc2hvcHRfc2ltcGxpZnlQb2ludHMsXyxfLmxlbmd0aC93LHcqNCx2b2lkIDAsMCwwLEUpfSxzaW1wbGlmeVNsb3BweTpmdW5jdGlvbihfLHcsRSxSLFMsQyl7cihfIGluc3RhbmNlb2YgVWludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQzMkFycmF5fHxfIGluc3RhbmNlb2YgVWludDE2QXJyYXl8fF8gaW5zdGFuY2VvZiBJbnQxNkFycmF5KSxyKF8ubGVuZ3RoJTM9PTApLHIodyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscih3Lmxlbmd0aCVFPT0wKSxyKEU+PTMpLHIoUj09bnVsbHx8UiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpLHIoUj09bnVsbHx8Ui5sZW5ndGg9PXcubGVuZ3RoL0UpLHIoUz49MCYmUzw9Xy5sZW5ndGgpLHIoUyUzPT0wKSxyKEM+PTApO3ZhciBJPV8uQllURVNfUEVSX0VMRU1FTlQ9PTQ/XzpuZXcgVWludDMyQXJyYXkoXyksTT1wKHQuZXhwb3J0cy5tZXNob3B0X3NpbXBsaWZ5U2xvcHB5LEksXy5sZW5ndGgsdyx3Lmxlbmd0aC9FLEUqNCxSLFMsQyk7cmV0dXJuIE1bMF09XyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P01bMF06bmV3IF8uY29uc3RydWN0b3IoTVswXSksTX0sc2ltcGxpZnlQcnVuZTpmdW5jdGlvbihfLHcsRSxSKXtyKF8gaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8XyBpbnN0YW5jZW9mIEludDMyQXJyYXl8fF8gaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8XyBpbnN0YW5jZW9mIEludDE2QXJyYXkpLHIoXy5sZW5ndGglMz09MCkscih3IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKHcubGVuZ3RoJUU9PTApLHIoRT49MykscihSPj0wKTt2YXIgUz1fLkJZVEVTX1BFUl9FTEVNRU5UPT00P186bmV3IFVpbnQzMkFycmF5KF8pLEM9eSh0LmV4cG9ydHMubWVzaG9wdF9zaW1wbGlmeVBydW5lLFMsXy5sZW5ndGgsdyx3Lmxlbmd0aC9FLEUqNCxSKTtyZXR1cm4gQz1fIGluc3RhbmNlb2YgVWludDMyQXJyYXk/QzpuZXcgXy5jb25zdHJ1Y3RvcihDKSxDfX19KSgpfSk7dmFyIERzZSxveD1YKCgpPT57RHNlPShmdW5jdGlvbigpe3ZhciBuPSJiOUg3OVRlYmJiZTpuZVA5R2V1ZXU5R2V1YjlHYmI5R2l1dXVldTlHbXV1dXV1dXV1dXV1OTk5OWV1OUdvdXV1dXV1ZXU5R3J1dXV1dXV1YjlHeHV1dXV1dXV1dXV1dWV1OUd4dXV1dXV1dXV1dXU5OWV1OUdQdXV1dXV1dXV1dXV1dTk5YjlHb3V1dXV1dWI5R3d1dXV1dXV1dWI5R3Z1dXV1dWI5R2x1dXV1YmlRWGRpbHZvcndEcW9rb3F4bWJpaWJlaWx2ZTlXZWlpdmllYmVvd2V1ZWNqOkdka3I7WmVxbzlUVzlUOVZWOTVkYkg5RjlGOTM5SDc5VDlGOUo5SDIyOUY5SnQ5VlY3YmI4QTlUVzc5TzlWOVd0OUY5STkxOVAyOUs5blc3OU8yV3Q3OWM5VjkxOVU5S2JlWTlUVzc5TzlWOVd0OUY5STkxOVAyOUs5blc3OU8yV3Q3UzJXOTRiZDM5VFc3OU85VjlXdDlGOUk5MTlQMjlLOW5XNzlPMld0Nzl0OVc5SHQ5UDlIMmJvMzlUVzc5TzlWOVd0OUY5SjlWOVQ5VzkxdFdKMjkxN3RXVjljOVY5MTlVOUs3YnczOVRXNzlPOVY5V3Q5RjlKOVY5VDlXOTF0VzluVzc5TzJXdDljOVY5MTlVOUs3YmtFOVRXNzlPOVY5V3Q5RjlKOVY5VDlXOTF0Vzl0OVc5T1dWVzljOVY5MTlVOUs3YnhMOVRXNzlPOVY5V3Q5RjlWOVd0OVA5VDlQOTZXOW5XNzlPMld0YlBsNzlJVjlSYnNEd2ViY2VrZE9BcTtXOmxlWGRia0liYWJhZWM5OmZnZWZjdWZhZTlVZ2VhYmNpOVVhZGZjdWZhZDlVZ2JhZWFiMEVrOjg4SkRQdWU5OWV1eDk5ZHVlOTlldW85OWl1OEpqampqYmM6V0Q5UmdtOEtqampqYmRuZG5hbG1iY2JoUHhla2FtYzpDd2ZjYmM7S2J6OnJqampiOEFjdWFvY2R0Z3Nhb2NGRkZGaTBFaHpjYnlkOzA6RzpjamJoSGRuZG5hbGNiOWltYmFvYWw5bm1iYW1hemFISGpqampiYmdIQmQ6Q3dhbWNlQmQ7OHdhbWF6Y2J5ZDswOkc6Y2piSGpqampiYmdPQmQ6R3dhbWNkQmQ7OHdhbWN1YWxjZHRhbGNGRkZGaTBFY2J5ZDswOkc6Y2piSGpqampiYmdBQmQ6S3dhbWNpQmQ7OHdhaWh6YWxoc2luYUhhenlkYmNkdGZjYkJkYmF6Y2xmaHphc2N1ZmdzbWJrYWloemFsaHNpbmFIYXp5ZGJjZHRmZ0NhQ3lkYmNlZkJkYmF6Y2xmaHphc2N1ZmdzbWJrYWloemFsaENjYmhYaW5kbmFIYXp5ZGJjZHRnUWZnc3lkYmNiOWltYmFPYVFmYVhCZGJhc2FzeWRiZ1Fjampqajk0VkJkYmFRYVhmaFhrYXpjbGZoemFDY3VmZ0NtYmthbGNpOVVoTGRuYWxjaTZtYmNiaHphaWhzaW5hc2N3ZnlkYmhDYXNjbGZ5ZGJoWGFPYXN5ZGJjZHRmZ1FhUXlkYmdRY2VmQmRiYUFhUWNkdGZhekJkYmFPYVhjZHRmZ1hhWHlkYmdYY2VmQmRiYUFhWGNkdGZhekJkYmFPYUNjZHRmZ0NhQ3lkYmdDY2VmQmRiYUFhQ2NkdGZhekJkYmFzY3hmaHNhTGF6Y2VmZ3o5aG1ia2thaWh6YWxoc2luZG5hSGF6eWRiY2R0Z0NmZ1h5ZGJnUWN1OWttYmFYYVFjRkZGRnJHZ1FCZGJhT2FDZmdDYUN5ZGJhUTlSQmRia2F6Y2xmaHphc2N1ZmdzbWJ4ZGtrYW1hemFISGpqampiYmdIQmQ6Q3dhbWNlQmQ7OHdhbWF6Y2J5ZDswOkc6Y2piSGpqampiYmdPQmQ6R3dhbWNkQmQ7OHdhbWN1YWxjZHRhbGNGRkZGaTBFY2J5ZDswOkc6Y2piSGpqampiYmdBQmQ6S3dhbWNpQmQ7OHdhSGNiYXN6OnJqampiaFhhaWh6YWxoc2luYVhhenlkYmNkdGZnQ2FDeWRiY2VmQmRiYXpjbGZoemFzY3VmZ3NtYmthbGNpOVVoTGRuYW9UbWJjYmh6YU9oc2FYaENhb2hRaW5hc2F6QmRiYXNjbGZoc2FDeWRiYXpmaHphQ2NsZmhDYVFjdWZnUW1ia2tkbmFsY2k2bWJjYmh6YWloc2luYXNjd2Z5ZGJoQ2FzY2xmeWRiaFFhT2FzeWRiY2R0ZmdLYUt5ZGJnS2NlZkJkYmFBYUtjZHRmYXpCZGJhT2FRY2R0ZmdRYVF5ZGJnUWNlZkJkYmFBYVFjZHRmYXpCZGJhT2FDY2R0ZmdDYUN5ZGJnQ2NlZkJkYmFBYUNjZHRmYXpCZGJhc2N4ZmhzYUxhemNlZmd6OWhtYmtrYW9UbWJjYmh6YW9oc2luYU9hemZnQ2FDeWRiYVhhemZ5ZGI5UkJkYmF6Y2xmaHphc2N1ZmdzbWJra2FtYUxjYnlkOzA6RzpjamJIampqamJiZ3pCZDpPd2FtY2xCZDs4d2F6Y2JhTHo6cmpqamJoWWFtY3VhTGNLMmFsY2pqampkMEVjYnlkOzA6RzpjamJIampqamJiZzhBQmQ6U3dhbWN2QmQ7OHdKYmJiYmhFZG5hbGNpNmczbWJhcmNkNGhLYWloc2E4QWh6YUxockpiYmJiaDVpbmF2YXNjbGZ5ZGJhSzJjZHRmZ0NJZGxoOEVhdmFzeWRiYUsyY2R0ZmdYSWRsaEVhdmFzY3dmeWRiYUsyY2R0ZmdRSWRsaDhGYUNJZHdoYWFYSWR3aGhhUUlkd2hnYXphQ0lkYmc4SmFYSWRiZzhLTWFRSWRiZzhMTUpiYm5uOnZVZGJhemNsZmFYSWRsYUNJZGxNYVFJZGxNSmJibm46dlVkYmFRSWR3aDhNYUNJZHdoOE5hWElkd2h5YXpjeGZhOEVhRTp0ZzhFYWdhaDp0Z2dOYWFhaDp0Z2FhOEZhRTp0Z2hOOnRnRUpiYmJiSmJialphOEphOEs6dGc4RmFoTmE4RWE4TGE4Szp0ZzhLTjp0Z2hhaE5hRWFFTmFhYThLTmE4RmFnTjp0Z0VhRU5NTWc4SzpyZzhFOnZhOEtKYmJiYjlCRWc4S05VZGJhemN6ZmFFYThLTlVkYmF6Y0NmYWhhOEtOVWRiYXpjd2ZhOE1heWE4Tk1NSmJibm46dlVkYmE1YThFTWg1YXNjeGZoc2F6Y0tmaHphcmN1ZmdybWJrYTVhTDpaOnZKYmJiWk5oRWthbWN1YUxjZHRhbGNGRkZGOTcwRWNieWQ7MDpHOmNqYkhqampqYmJnQ0JkOld3YW1jb0JkOzh3YXE6WmhoZG5hM21iY2JoemFDaHNpbmFzYXpCZGJhc2NsZmhzYUxhemNlZmd6OWhtYmtrYUVhaE5oaGFtY3VhTGNsdGFsY0ZGRkZkMEVjYnlkOzA6RzpjamJIampqamJiZzhQQmQ6MHdhbWNyQmQ7OHdjYmE4UGE4QWFDYUxjYno6ZGpqamI4QUpGRnV1aDhNSkZGdXVoOE5KRkZ1dWh5ZG5hbGNpNm1iSkZGdXVoeWE4QWh6YUxoc0pGRnV1aDhOSkZGdXVoOE1pbmF6Y3dmSWRiZ0VhOE1hOE1hRTlFRWg4TWF6Y2xmSWRiZ0VhOE5hOE5hRTlFRWg4TmF6SWRiZ0VheWF5YUU5RUVoeWF6Y0tmaHphc2N1ZmdzbWJra2FoOnJoRWFtYW9jZXRnemN1YW9jdTlrRWNieWQ7MDpHOmNqYkhqampqYmJnQ0JkOjR3ZG5kbmFvYWw5bm1iYWloemFsaHNpbmFDYXp5ZGJjZXRmY0ZGaTg3ZWJhemNsZmh6YXNjdWZnc21ieGRra2FDY0ZlYXp6OnJqampiOEFrYUVKYmJiWk5oOEpjdWhJZG5hbGNpNm1iY2Joc0pGRnV1aEVhOEFoemN1aElpbmF6Y3dmSWRiYThNOnRnaGFoTmF6SWRiYXk6dGdoYWhOYXpjbGZJZGJhOE46dGdoYWhOTU06cmdoYUVhSWN1U2FoYUU5RFZnWEVoRWFzYUlhWEVoSWF6Y0tmaHphTGFzY2VmZ3M5aG1ia2thbWN6ZmNiY2p3ejpyampqYjhBYW05Y2I4M2l3YW05Y2I4M2liYXhhOEpOaDhSSmJialphazp0aDhMY2JoOFNKYmJiYmhSSmJiYmJoOFVKYmJiYmg4VkpiYmJiaDhXSmJiYmJoOFhKYmJiYmg4WWNiaDhaY2JoUGluSmJiYmJoRWRuYThTVG1iSmJialphOFM6Wjp2aEVrSmJiYmJoaGRuYThZYThZTmE4V2E4V05hOFhhOFhOTU1nOEtKYmJiYjlCbWJKYmJqWmE4SzpyOnZoaGthOFZhRU5oOEthOFVhRU5oNWFSYUVOaDhFYUloTGRuZG5kbmRuZG5hOFNhUFZUbWJhbXlkd2c4MFRtZWE4WWFoTmg4RmE4WGFoTmhhYThXYWhOaGdhZWFteWRiY2R0Zmg4MWNiaDNKRkZ1dWhFY3ZoUWN1aExpbmRuYUhhODFhM2NkdGZ5ZGJjZHRnemZ5ZGJndlRtYmFBYU9hemZ5ZGJjZHRmaHNpbmRuZG5hQ2FpYXN5ZGJnS2N4MmZnemNsZnlkYmdyY2V0ZjhWZWJjczRhQ2F6eWRiZ1hjZXRmOFZlYmNzNGZhQ2F6Y3dmeWRiZ2xjZXRmOFZlYmNzNGZnb21iY2Joenhla2NlaHphSGFYY2R0ZnlkYmdYY2VTbWJjZWh6YUhhcmNkdGZ5ZGJncmNlU21iY2VoemFIYWxjZHRmeWRiZ2xjZVNtYmRuYXJjZFNhWGNkU2ZhbGNkU2ZjZDZtYmFvY2VmaHp4ZWthb2NkZmh6a2RuYXphUTlrbWJhOEFhS2NLMmZnWElkd2E4Szp0Z2hhaE5hWElkYmE4RTp0Z2hhaE5hWElkbGE1OnRnaGFoTk1NOnJhOEo6dmE4TE5KYmJqWk1KOVZPOmQ4NkpiYmpaYVhJZENhOEZOYVhJZHhhZ05hYWFYSWR6Tk1NYWtOOnRnaGFoSjlWTzpkODY5REVOZ2hhRWF6YVE2YWhhRTlEVmdYRWhFYUthTGFYRWhMYXphUWFYRWhRa2FzY2xmaHNhdmN1Zmd2bWJra2EzY2VmZzNhODA5aG1ia2thTGN1OWhtZWthbWE4S1VkOk9EYW1hNVVkOktEYW1hOEVVZDpHRGFtY3VCZDpxRGFtY0ZGRjs3ckJkakRhOFBjYmE4QWFZYW1jOkdEZmFtYzpxRGZhbWNqRGZ6OmVqampiYW15ZDpxRGhMZG5kbmF4SmJiYmI5RVRtYmE4U2FENm1iYUxjdVNtZWNlaDNhbUlkakRhOFI5RW1peGRrYUxjdTlobWVrZG5hOFNUbWJhYmFQY2x0ZmdIYW04UGl3ODNkd2FIYW04UGliODNkYmFQY2VmaFBrYzNoSGluYW1jOkN3ZmFIZnlkYmNieWQ7NDpHOmNqYkg6YmpqamJiYUhjOThmZ0hjOTg5aG1ieHZra2NiaDNhOFNhcTlwbWJhbXlkd2FDYWlhTGN4MmZnenlkYmNldGY4VmViY3M0YUNhemN3ZnlkYmNldGY4VmViY3M0ZmFDYXpjbGZ5ZGJjZXRmOFZlYmNzNGZmYXc5bm1la2NiaHpjYmhzZG5hOFpUbWJjYmhzYW1jemZoWGluYW1jemZhc2NkdGZhWHlkYmdRQmRiYVhjbGZoWGFzYVlhUWZSYmJUZmhzYThaY3VmZzhabWJra2FteWR3aGxhbXlkYmhYYW05Y3U4M2k6R0RhbTljdTgzaTpPRGFtOWN1ODNpOnFEYW05Y3U4M2k6eURpbmFtY2pEZmF6ZmNGRkY7N3JCZGJhemNsZmd6Y3o5aG1ia2FzYzs4ZWFzY2xmYzpiZDZFZzhaY2R0aDgwZG5hbFRtYmFlYVhjZHRmaG9jYmhyaW5kbmFIYW9hcmNkdGZ5ZGJjZHRnemZ5ZGJndlRtYmFBYU9hemZ5ZGJjZHRmaHNjdWhRY3VoemluYUhhaWFzeWRiZ0tjeDJmZ1hjbGZ5ZGJjZHRmeWRiYUhhWHlkYmNkdGZ5ZGJmYUhhWGN3ZnlkYmNkdGZ5ZGJmZ1hhemFYYXo2Z1hFaHphS2FRYVhFaFFhc2NsZmhzYXZjdWZndm1ia2FRY3VTbWJhOEFhUWNLMmZnc0lkd2E4TTp0Z0VhRU5hc0lkYmF5OnRnRWFFTmFzSWRsYThOOnRnRWFFTk1NOnJoRWNiaHNpbmRuZG5hemFtYzpxRGZhc2ZndnlkYmdYNm1iYXphWDlobWVhRWFtY2pEZmFzZklkYjlGVG1la2F2YXpCZGJhbWM6R0RmYXNmYVFCZGJhbWNqRGZhc2ZhRVVkYnhka2FzY2xmZ3NjejlobWJra2FyY2VmZ3JhbDlobWJra2FtY3pmYTgwZmhRY2JoemNiaHNpbmRuYW1jOkdEZmF6ZnlkYmdYY3VTbWJhUWFzY2R0ZmFYQmRiYXNjZWZoc2themNsZmd6Y3o5aG1ia2FzYThaZmc4WlRtYkpGRnV1aGhjdWhLYW1jemZoemE4Wmh2Y3VoUWluYThBYXp5ZGJnWGNLMmZnc0lkd2E4TTp0Z0VhRU5hc0lkYmF5OnRnRWFFTmFzSWRsYThOOnRnRWFFTk1NOnJoRWRuZG5hSGFpYVhjeDJmZ3NjbGZ5ZGJjZHRmeWRiYUhhc3lkYmNkdGZ5ZGJmYUhhc2N3ZnlkYmNkdGZ5ZGJmZ3NhUTZtYmFzYVE5aG1lYUVhaDlEVG1la2FFaGhhc2hRYVhoS2themNsZmh6YXZjdWZndm1ia2FLY3VTbWJhS2hMa2RuYW1haWFMY3gyZmdyeWRiYXJjbGZ5ZGJhcmN3ZnlkYmFDYWJhZWFkYVBhd2FxYTN6OmZqampiVG1iYVBjZWZoUEpiYmJiaFJKYmJiYmg4VUpiYmJiaDhWSmJiYmJoOFdKYmJiYmg4WEpiYmJiaDhZa2NiaFhpbmFBYU9hcmFYY2R0ZnlkYmNkdGdzZnlkYmNkdGZnS2h6YUhhc2ZndnlkYmdRaHNkbmFRVG1iZG5pbmF6eWRiYUxTbWVhemNsZmh6YXNjdWZnc1RtZHhia2themFLYVFjZHRmYzk4ZnlkYkJkYmF2YXZ5ZGJjdWZCZGJrYVhjZWZnWGNpOWhtYmthOEFhTGNLMmZneklkYmhFYXpJZGxoaGF6SWR3aDhLYXpJZHhoNWF6SWR6aDhFYXpJZENoOEZhWWFMZmNlODZiYmE4WWE4Rk1oOFlhOFhhOEVNaDhYYThXYTVNaDhXYThWYThLTWg4VmE4VWFoTWg4VWFSYUVNaFJhbXlkeGg4U3hia2thbWM6V0RmOEtqampqYmFQa2pvaXZ1djk5bHU4SmpqampiY2E5UmdvOEtqampqYmRuZG5hbGN3MG1iYWl5ZGJocmFlYWJjaXRmZ3dhbGNkdGNpVkJkbGF3YXJCZGJkbmFsY2Q2bWJhaWNsZmhyYWxjdWZoRGF3Y3hmaHdpbmFyeWRiaHFhd2N1QmRiYXdjOThmYXFCZGJhd2N3Zmh3YXJjbGZocmFEY3VmZ0RtYmtrYWxhYmZod3hla2NiaHFhb2NiQmRLYW85Y2I4M2l6YW9jYkJkd2FvOWNiODNpYkpiYmpaaGtKYmJqWmh4aW5hZGFpYXFjZHRmeWRiY0syZmhEY2Jod2luYW9jemZhd2ZncmFEYXdmSWRiZ21hcklkYmdQOnRnc2F4TmFQTWdQVWRiYW9hd2ZncmFzYW1hUDp0TmFySWRiTVVkYmF3Y2xmZ3djeDlobWJrSmJialpha0piYmpaTWdrOnZoeGFxY2VmZ3FhbDlobWJrY2JocmFkY2JjZWNkYW9JZGxnbWFvSWR3Z1A5R0Vnd2FvSWRiZ3NhUDlHRWF3YXNhbTlHRWd6Y2R0Z3dmaEhhb2N6ZmF3ZklkYmhtYWlod2FsaERpbmFpYXJjZHRmZ3F5ZGJoT2FxYXd5ZGJnQUJkYmF3YU9CZGJhd2NsZmh3YXJhSGFBY0syZklkYmFtOURmaHJhRGN1ZmdEbWJrZG5kbmFyY3Y2bWJhdmM4WDlrbWJhcmFsYzk4ZjZtZWthaXlkYmhyYWVhYmNpdGZnd2FsY2R0Y2lWQmRsYXdhckJkYmFpY2xmaHJhbGN1ZmhEYXdjeGZod2luYXJ5ZGJocWF3Y3VCZGJhd2M5OGZhcUJkYmF3Y3dmaHdhcmNsZmhyYURjdWZnRG1ia2FsYWJmaHd4ZWthZWFiY2l0Zmd3YW1VZGJhd2F3eWRsYzk4R2F6VkJkbGFiY2VmYWVhZGFpYXJhdmNlZmdxejpkampqYmhEYXdhd3lkbGNpR2FEYWJjdTdmY2R0VkJkbGFEYWVhZGFpYXJjZHRmYWxhcjlSYXF6OmRqampiaHdrYW9jYWY4S2pqampiYXdrO09kZHZ1ZTk5ZG5pbmFiYWVjaXRmZ3J5ZGxnd2NkNGdEVG1lZG5hd2NpR2dxY2k5aG1iY2locWRuYXdjbDZtYmFiYWVjaXRmaGJjYmhlYXdocWNlaGtpbmRuYWlhYnlkYmdEZlJiYm1iY2Joa2FkYURjSzJmZ3dJZHdhbElkdzp0Z3hheE5hd0lkYmFsSWRiOnRneGF4TmF3SWRsYWxJZGw6dGd4YXhOTU06cmd4YW9JZGI5RFRtYmFvYXhVZGJhdmFEQmRiYXJ5ZGxocWthYmN3ZmhiYWVjZWZnZWFxY2Q0Nm1ia2FrY2VHVG1pa2FyYXFjaUdCZGxza2RuYWJjYmFEYWxhcWNkdGZJZGJhcklkYjp0Z3hKYmJiYjlGRWd3YUQ3YWVjZWZnRGZnZWNpdGZ5ZGxhYmF3YURmZ0RjaXRmeWRsVmNpMG1iYXJhcUJkbGthYmFEYWRhaWFsYXZhb3o6ZWpqamJheDpsYW9JZGI5Rm1ia2tramxldnVkbmRuYWJ5ZHdneGFsYWRjZXRmZ204VmViY3M0YWxhZWNldGZnUDhWZWJnc2NzNGZhbGFpY2V0Zmd6OFZlYmNzNGZmYUQwbWJha21iY2JoRGFieWR4YXE2bWVrYXZhd2NsdGZneGFiOFBkdzgzZHdheGFiOFBkYjgzZGJhYnlkYmhEZG5hYnlkd2d3VG1iYW9hRGNkdGZoeGF3aHNpbmFsYXh5ZGJjZXRmY0ZGaTg3ZWJheGNsZmh4YXNjdWZnc21ia2thYmFEYXdmQmRiYWJ5ZHhoeGFiOWNiODNkd2FiYWJ5ZGxheGNpMmZCZGxhUDhWZWJoc2NlaERjYmh4a2RuYXNjenRjejkxY3U5a21iYWJheGNlZkJkd2FQYXg4N2ViYW9hYnlkYmNkdGZheGNkdGZhZUJkYmtkbmFtOFVlYmN1OWttYmFiYWJ5ZHdneGNlZkJkd2FtYXg4N2ViYW9hYnlkYmNkdGZheGNkdGZhZEJkYmtkbmF6OFVlYmN1OWttYmFiYWJ5ZHdneGNlZkJkd2F6YXg4N2ViYW9hYnlkYmNkdGZheGNkdGZhaUJkYmthcmFieWRsZmFieWR4Y2kyZmFQUmJiODZiYmFyYWJ5ZGxmYWJ5ZHhjaTJmY2VmYW1SYmI4NmJiYXJhYnlkbGZhYnlkeGNpMmZjZGZhelJiYjg2YmJhYmFieWR4Y2VmQmR4YURrOm1Qckh1ZTk5ZXVlOTlldWU5OWl1OEpqampqYmM7VztHYjlSZ3g4S2pqampiZG5kbmFsbWJjYmhteGVrY2JoUGF4YzptO0diZmNiYztLYno6cmpqamI4QWF4Y3VhbGNpOVVnc2NsdGFzY2pqamppR0VjYnlkOzA6RzpjamJIampqamJiZ3pCZDptOUdheGNlQmQ7UzlHYXhjdWFzY0syZ0hjS2ZhbGNwRkZGZTBFY2J5ZDswOkc6Y2piSGpqampiYmdPQmQ6cTlHYXhjZEJkO1M5R2RuYWxjaTZnQW1iYXJjZDRoQ2FzY2R0aFhhT2hRYXpoTGluYXZhaWFQY3gyZmdyeWR3YUMyY2R0ZmhLYXZhcnlkbGFDMmNkdGZoWWF2YXJ5ZGJhQzJjZHRmaDhBY2JocmFMaEVpbmFRYXJmZ21hOEFhcmZnM0lkYmc1YVlhcmZnOEVJZGJnOEZhNWE4RjlERWc1VWRiYW1hS2FyZmdhSWRiZzhGYTVhOEZhNTlERWc4RlVkYmFtY3hmZ21hM0lkYmc1YThFSWRiZ2hhNWFoOUVFZzVVZGJhbWFhSWRiZ2hhNWFoYTU5RUVnNVVkYmFFYThGYTVNSmJiYlpOVWRiYUVhWGZoRWFyY2xmZ3JjeDlobWJrYVFjS2ZoUWFMY2xmaExhUGNlZmdQYXM5aG1ia2thT2FIZmdyOWNiODNkYmFyOWNiODNkemFyOWNiODNkd2F4Y3Vhc2N4MmdyYWxjOmJqampsMEVjYnlkOzA6RzpjamJIampqamJiZ0hCZE45R2F4Y2lCZDtTOUdhc2NkdGhnYXphcmZodmF4Y3dWaFBheGNsVmhDYUhoOEphemg4S2NiaExpbmF4Y2JjajtHYno6cmpqamJoRWFMYXMyY2R0aGFkbmFBbWJhOEtocmFzaDNpbmFFYXJ5ZGJnbWM4RjkxY2pqamo5NFZhbTdnbWNRNGN4MmZnOEVhOEV5ZHdjZWZCZHdhRWFtY2Q0Y0ZyR2N4MmZnOEVhOEV5ZGJjZWZCZGJhRWFtY3g0Y0ZyR2N4MmZnbWFteWRsY2VmQmRsYXJjbGZocmEzY3VmZzNtYmtrYXphYWZoOEFhSGFhZmhYY2JobWNiaDNjYmg4RWNiaGFpbmFFYW1mZ3J5ZGJoUWFyYTNCZGJhcmN3ZmdLeWRiaFlhS2FhQmRiYXJjbGZncnlkYmhLYXJhOEVCZGJhUWEzZmgzYVlhYWZoYWFLYThFZmg4RWFtY3hmZ21jajtHYjlobWJrZG5hQW1iY2JocmF2aG1pbmFtYXJCZGJhbWNsZmhtYXNhcmNlZmdyOWhtYmthdmhyYXNobWluYUVhOEFhcnlkYmczY2R0ZnlkYmc4RWM4RjkxYThFN2NkNGNGckdjeDJmZzhFYThFeWRiZzhFY2VmQmRiYVhhOEVjZHRmYTNCZGJhcmNsZmhyYW1jdWZnbW1ia2E4SmhyYXNobWluYUNhOEFhcnlkYmczY2R0ZnlkYmc4RWM4RjkxYThFN2N4NGNGckdjeDJmZzhFYThFeWRiZzhFY2VmQmRiYXZhOEVjZHRmYTNCZGJhcmNsZmhyYW1jdWZnbW1ia2F2aHJhc2htaW5hUGE4QWFyeWRiZzNjZHRmeWRiZzhFYzhGOTFjampqajk0VmE4RTdjUTRjeDJmZzhFYThFeWRiZzhFY2VmQmRiYVhhOEVjZHRmYTNCZGJhcmNsZmhyYW1jdWZnbW1ia2thOEphZ2ZoOEphOEthZ2ZoOEthTGNlZmdMY2k5aG1ia2FFYW9jZXRncmN1YW9jdTlrRWNieWQ7MDpHOmNqYkhqampqYmJnS0JkOnk5R2FFY2xCZDtTOUdkbmRuYW9hbDlubWJhaWhyYWxobWluYUthcnlkYmNldGZjRkZpODdlYmFyY2xmaHJhbWN1ZmdtbWJ4ZGtrYUtjRmVhcno6cmpqamI4QWtjYmg4RWFFYXNjYnlkOzA6RzpjamJIampqamJiZzhBQmQ6QzlHYU9hSGFIYXNjZHRmYUhhc2NpdGZhOEFhc2NiYXphS2FpYXdhRGFxYWt6OmhqampiZG5kbmFsY2k2bWJhOEFocmFzaG1pbmE4RWFyUmJiZmg4RWFyY2VmaHJhbWN1ZmdtbWJrYUU5Y2I4M2l3YUU5Y2I4M2liYWxhd2M5OmZncmZjdWZhcjlVZ3Jhc2FEZmN1ZmFEOVVnbWFyYW0wRWhZY2JobWNiaHJhOEVoYWluY2JoM2RuYXJUbWJhOEFhcmZSYmJjZVNoM2thbWFFYWlhSHlkYmN4MmZnUXlkYmFRY2xmeWRiYVFjd2Z5ZGJhS2FiYWVhZGFtYXdhcWEzYTNjZTdhOEVhWTluVmFhYW1mYVk2Vkd6OmZqampiZmhtYUhjbGZoSGFhYThBYXJmUmJiOVJoYWFzYXJjZWZncjlobWJrYUV5ZHhUbWVhYmFtY2x0ZmdyYUU4UGl3ODNkd2FyYUU4UGliODNkYmFtY2VmaG14ZWthRTljYjgzaXdhRTljYjgzaWJjYmhta2N6aHJpbmFFYzptO0diZmFyZnlkYmNieWQ7NDpHOmNqYkg6YmpqamJiYXJjOThmZ3JjOTg5aG1ia2theGM7VztHYmY4S2pqampiYW1rOndLRFF1ZTk5aXVlOTlpdWw5OmV1dzk5aXU4SmpqampiYztxYjlSZ1A4S2pqampiYXhoc2F4aHpkbmRuYXZheDBnSG1iZG5hdlRtYmNiaE9hZWh6YXZoQWluYXdhRGF6eWRiY3gyZmdDY3dmeWRiY2V0ZmdYOFZlYmhRYXdhQ2NsZnlkYmNldGZnTDhWZWJoS2F3YUN5ZGJjZXRmZ0M4VmViaFlhWGNlODdlYmFMY2U4N2ViYUNjZTg3ZWJhT2FLY3M0YVljczRmYVFjczRmZmhPYXpjbGZoemFBY3VmZ0FtYmthZWh6YXZoQWluYXdhRGF6eWRiY3gyZmdDY3dmeWRiY2V0ZmNGRmk4N2ViYXdhQ2NsZnlkYmNldGZjRkZpODdlYmF3YUN5ZGJjZXRmY0ZGaTg3ZWJhemNsZmh6YUFjdWZnQW1ia2NlaHphcWhzYU9hcTBtZWthbGNlODZiYmFsY2VmY2JhdmN1Zno6cmpqamI4QXhla2FQYWlCZHhhUGFkQmR3YVBhZUJkbGF2YWthcWNpOVVnOEFha2E4QWFrNkVhSEVnSzlSaEVheGFLOVJoM2FLY3VmaDVhS2NldGg4RWFLY2R0Z0NjOThmaDhGYXZjaXRnT2FDOVJhcmZjOThmaGFhc2N1ZmhoYXZjdWZoZ2FyYU9maDhKSmJialphczpZOnZoOEtjYmF6Y2Vha2F4U0VnOExjZHRnOE05Umg4TkpGRnV1aHljdWg4UGNiaEljYmg4UmluYVBjbGZhOFJjZHRmeWRiaFFhUGNiOFBkOnk6RzpjamJnOFM4M2k5aWFQY2I4UGQ6cTpHOmNqYmdSODNpbmFQY2I4UGQxOkc6Y2piZzhVODNpVWFQY2I4UGRqOkc6Y2piZzhWODNpOFdhUGE4UzgzaXlhUGFSODNpYWFQYThVODNpS2FQYThWODNpemFRYXZjZHRnWWZoOFdjYmhYaW5hYmFRYVhjZHRnTGZ5ZGJjSzJmaEFjYmh6aW5hUGM4V2ZhemZnQ2FBYXpmZ09JZGJnOFhhQ0lkYmc4WWE4WGE4WTlERVVkYmFDY3pmZ0NhT2N4ZklkYmc4WGFDSWRiZzhZYThYYThZOUVFVWRiYXpjbGZnemN4OWhtYmthYmE4V2FYY3U3Y2R0ZnlkYmNLMmZoQWNiaHphUElkVWg4WmFQSWQ5aWg4MGFQSWQ4MGg4MWFQSWQ5ZWhCYVBJZDhXaDgzYVBJZG5oVWluYVBjemZhemZnQ2FBYXpmZ09JZGJnOFhhQ0lkYmc4WWE4WGE4WTlERVVkYmFDY3pmZ0NhT2N4ZklkYmc4WGFDSWRiZzhZYThYYThZOUVFVWRiYXpjbGZnemN4OWhtYmthcmFMZmd6YTgwYThaOnRnOFhhVWE4Mzp0ZzhZTmE4WWFCYTgxOnRnOFpOYThaYThYTk1NVWRiYXphWWZhUElkeWFQSWRLOnRnOFhhUElkYWFQSWR6OnRnOFlOYThZYVBJZDhLYVBJZEM6dGc4Wk5hOFphOFhOTU1VZGJhWGNlZmdYYXY5aG1ia2NiaDg1ZG5hSG1iY2JoQWFRaHphOEpoQ2F2aFhpbmF3YURhenlkYmN4MmZnT2N3ZnlkYmNldGZnTDhWZWJoOFdhd2FPY2xmeWRiY2V0Zmc4NThWZWJoODZhd2FPeWRiY2V0ZmdPOFZlYmg4N2FMY2U4N2ViYTg1Y2U4N2ViYU9jZTg3ZWJhQ2FBYTg2Y3M0YTg3Y3M0ZmE4V2NzNGZmZ0FCZGJhemNsZmh6YUNjbGZoQ2FYY3VmZ1htYmthdmhDaW5hd2FEYVF5ZGJjeDJmZ3pjd2Z5ZGJjZXRmY0ZGaTg3ZWJhd2F6Y2xmeWRiY2V0ZmNGRmk4N2ViYXdhenlkYmNldGZjRkZpODdlYmFRY2xmaFFhQ2N1ZmdDbWJrYThKaDg1a2RuZG5kbmRuZG5kbmRuZG5kbmRuZG5hdmE4RTZtYmE4RWF4OW5tZWF2YXZhSzlVZ3phSzI5UmF6YTMyMG1kYTVhRTlwbXFhODVUaDg3Y2VoOFdhRWhReHdrYTVhZzlwbURhOEVheDlubWl4b2thdmFLNm1lYTVhRTlwbXdjZWhRYUVoWGE4NVRtaXhsa2E1YWc2bWx4cmthNWFnOXBtb2tjYmhRYWdoWGE4NW1la0pGRnV1aDhYY2JoTGE1aHppbmRuYXpjZWZnQ2FLNm1iYVFhdmFDOVJnT2FLNkdtYmFyYXpjZHRmSWRiZzhZYUM6WU5hcmF2YXo5UmNkdGZhWWZjOTRmSWRiZzhaYU86WU5NZzgwYThYOUVtYmRuZG5hOEthT2FoZjpZTmc4MTpsSmJiYjlwOURUbWJhODE6T2hBeGVrY2pqamo5NGhBa2E4WmFzYUEyYU85UjpZTmg4WmRuZG5hOEthemFzZjpZTmc4MTpsSmJiYjlwOURUbWJhODE6T2hPeGVrY2pqamo5NGhPa2FtYXNhTzJhQzlSOllhOFlOYThaTU5hODBNZzhZYThYYThZYThYOURnT0VoOFhhQ2FMYU9FaExrYXphOExmZ3phWDZtYnhsa2tKRkZ1dWg4WGNiaExhRWhDYWFoQWE4RmhPYUtoemluZG5hemFLNm1iYVFhQ2FLNkdtYmFyYU9mSWRiZzhZYXo6WU5hQUlkYmc4WmFDOllOTWc4MGE4WDlFbWJkbmRuYThLYTg1YU9meWRiZ1lhaGY6WU5nODE6bEpiYmI5cDlEVG1iYTgxOk9oOFd4ZWtjampqajk0aDhXa2FtYXNhOFcyYVk5UjpZZzgxYThZTmE4WmE4MU5NTmE4ME1nOFlhOFhhOFlhOFg5RGdZRWg4WGF6YUxhWUVoTGthQ2E4TDlSaENhQWE4TmZoQWFPYThNZmhPYXphOExmZ3pjdWZhWDZtYnhpa2thODVUaDg3Y2JoOFdhZ2hRa0pGRnV1aDhYY2JoTGFFaENhYWhBYThGaE9hS2h6aW5kbmF6YXphSzlVZ1hhSzI5UmFYYTMyMG1iZG5hOFdUbWJhQ2FDYUs5VWdYYUsyOVJhWGEzMjBtZWthcmFPZklkYmc4WWF6OllOYUFJZGJnOFphQzpZTk1nODBhOFg5RW1iYXpoWGFDaFlkbmE4N21iYTg1YU9meWRiZ1hoWWtkbmRuYThLYVlhaGY6WU5nODE6bEpiYmI5cDlEVG1iYTgxOk9oODZ4ZWtjampqajk0aDg2a2E4WmFzYTg2MmFZOVI6WU5oOFpkbmRuYThLYVhhaGY6WU5nODE6bEpiYmI5cDlEVG1iYTgxOk9oWXhla2NqampqOTRoWWthbWFzYVkyYVg5UjpZYThZTmE4Wk1OYTgwTWc4WWE4WGE4WWE4WDlEZ1hFaDhYYXphTGFYRWhMa2FDYThMOVJoQ2FBYThOZmhBYU9hOE1maE9hemE4TGZnemN1ZmFRNm1ia2thTFRtYmE4WGF5OURUbWJhOFhoeWFMaElhOFJoOFBrYThSY2VmZzhSY2k5aG1ia2RuZG5hb2M4WDlrbWJhOFBjYjlvbWVrYThBY3VmaDg1Y2JoWWluZG5kbmRuYXZhWTlSYXhhWWF4ZmF2MEVnOFdUbWJjYmhBYWVhWWNkdGZnemhDYThXaFhpbmF3YURhQ3lkYmN4MmZnT2N3ZnlkYmNldGZnUThWZWJoYmF3YU9jbGZ5ZGJjZXRmZ0w4VmViaHJhd2FPeWRiY2V0ZmdPOFZlYmhLYVFjZTg3ZWJhTGNlODdlYmFPY2U4N2ViYUFhcmNzNGFLY3M0ZmFiY3M0ZmZoQWFDY2xmaENhWGN1ZmdYbWJrYThXaE9pbmF3YURhenlkYmN4MmZnQ2N3ZnlkYmNldGZjRkZpODdlYmF3YUNjbGZ5ZGJjZXRmY0ZGaTg3ZWJhd2FDeWRiY2V0ZmNGRmk4N2ViYXpjbGZoemFPY3VmZ09tYmthQWFxMG1la2FsYVlmZ3pjZTg2YmJhemNlZmNiYThXY3VmejpyampqYjhBeGVrYWxhWWZnemNlODZiYmF6Y2VmY2JhODV6OnJqampiOEFhOEFoOFdrYThXYVlmZ1lhdjlwbWR4YmtrYXJhdmNkdGc4V2ZoTGRuYUlUbWJhUGNsZmE4UGNkdGZ5ZGJoemFJaENpbmFMYXp5ZGJmY2I4NmJiYXpjbGZoemFDY3VmZ0NtYmtrZG5hdmFJOW5tYmFQY2xmYThQY2R0ZnlkYmFJY2R0Zmh6YXZhSTlSaENpbmFMYXp5ZGJmY2U4NmJiYXpjbGZoemFDY3VmZ0NtYmtrY2JoWWluZG5hWWE4UFNtYmNiaHphcmFQY2xmYVljZHRmeWRiZ0thOFd6OnFqampiaENhdmhYYUloT2luYUthT2F6YUxhQ3lkYmdRZlJiYmdBRWNkdGZhUUJkYmFDY2xmaENhT2FBZmhPYXphQTlSY2VmaHphWGN1ZmdYbWJra2FZY2VmZ1ljaTlobWJrYWJhZWFkYWlhbGFJYW9jZWZnQ2FyYXdhRGFxYWtheGFtejpoampqYmFiYWVhSWNkdGd6ZmFkYXpmYWlhemZhbGFJZmF2YUk5UmFDYXJhd2FEYXFha2F4YW16Omhqampia2FQYztxYmY4S2pqampiazpTZWVydThKampqamJjOnE7YWI5UmdvOEtqampqYmFvYzpxOFdmY0ZlY2p6ejpyampqYjhBY2JocmRuYWRUbWJhZWh3YWRoRGluYW9hcmNkdGZhd3lkYmdxQmRiYW9jOnE4V2ZhcWNGaUdjZHRmZ2t5ZGJoeGFrYXFCZGJhd2NsZmh3YXJheGFxOWhmaHJhRGN1ZmdEbWJra2FiYWVhZGFvYXJhaWF2ejpqampqYmFvYzpxO2FiZjhLampqamJrO1NxbG91ZDk5ZXVEOTk4SmpqampiYzpXO2FiOVJncjhLampqamJkbmRuYWRUbWJhb2NkNGh3Y2JoRGNiaHFpbmRuYXZhZWNsZnlkYmF3MmNkdGZna0lkYmF2YWV5ZGJhdzJjZHRmZ3hJZGJnbTp0Z1BhdmFlY3dmeWRiYXcyY2R0ZmdzSWRsYXhJZGxnejp0Z0hOYWtJZGxhejp0Z09hc0lkYmFtOnRnQU46dGdDYUNOYU9hc0lkd2F4SWR3Z1g6dGdRTmFrSWR3YVg6dGdPYUhOOnRnSGFITmFPYUFOYVBhUU46dGdQYVBOTU1nT0piYmJiOUJtYmFyYzhXZmFEY2x0ZmdrYUNhTzpyZ086dmdDVWR3YWthUGFPOnZnUFVkbGFrYUhhTzp2Z0hVZGJha2FDYVhOYUhhbU5hemFQTk1NOm1VZHhhRGNlZmhEa2FlY3hmaGVhcWNpZmdxYWQ2bWJrYWI5Y2I4M2R5YWI5Y2I4M2RhYWI5Y2I4M2RLYWI5Y2I4M2R6YWI5Y2I4M2R3YWI5Y2I4M2RiYURUbWVhcmNiQmQ4U2FyOWNiODNpS2FyOWNiODNpemFyY3pmYXZhbGFvYXJjOFNmY2JjcmFpejprampqYmFySWRLaFFhcklkQ2hMYXJJZHpoS2FyOWNiODNpd2FyOWNiODNpYmFyYXJjOFdmYURjemFyYzhTZmNiY2ljYno6a2pqamJKYmJiYmhtZG5hcklkd2d6YXpOYXJJZGJnSGFITmFySWRsZ1hhWE5NTWdDSmJiYmI5Qm1iSmJialphQzpyOnZobWthemFtTmhDYVhhbU5oWGFIYW1OaEhKYmJqWmhtYXJjOFdmaGVhRGh2aW5hZWN3ZklkYmFDTmFlSWRiYUhOYVhhZWNsZklkYk5NTWd6YW1hemFtOURFaG1hZWN6ZmhlYXZjdWZndm1ia2FiYVFVZHdhYmFMVWRsYWJhS1VkYmFiYXJJZDNVZHhkbmRuYW1KO247bTttODk5Rm1iSmJiYmJoemFyYzhXZmhlaW5hZWN4ZklkYmFRYWVjd2ZJZGJnUE5hS2FlSWRiZ09OYUxhZWNsZklkYmdBTk1NTWFDYVBOYUhhT05hWGFBTk1NOnZnUGF6YVBhejlFRWh6YWVjemZoZWFEY3VmZ0RtYmthYmFDVWQ4S2FiYVhVZGFhYmFIVWQzYWJhUWFDYXpOOnRVZEthYmFMYVhhek46dFVkQ2FiYUthSGF6Tjp0VWR6YWJKYmJqWmFtYW1OOnQ6cmdtVWR5ZG5kbmFDSmJiajo7YUNKYmJqOjs5R0VnekpiYmpaYXpKYmJqWjlGRUpiYjs6OWNOSmJiYlpKYmJiOjthQ0piYmJiOUdFTWd6OmxKYmJiOXA5RFRtYmF6Ok9oZXhla2NqampqOTRoZWthYmFlODZiOFVkbmRuYVhKYmJqOjthWEpiYmo6OzlHRWd6SmJialphekpiYmpaOUZFSmJiOzo5Y05KYmJiWkpiYmI6O2FYSmJiYmI5R0VNZ3o6bEpiYmI5cDlEVG1iYXo6T2h2eGVrY2pqamo5NGh2a2FiYXY4NmJSZG5kbmFISmJiajo7YUhKYmJqOjs5R0VnekpiYmpaYXpKYmJqWjlGRUpiYjs6OWNOSmJiYlpKYmJiOjthSEpiYmJiOUdFTWd6OmxKYmJiOXA5RFRtYmF6Ok9od3hla2NqampqOTRod2thYmF3ODZiOFNkbmRuYWVjS3RjSzkxOllKYmI7OjljOnZhQzp0OmxhdmNLdGNLOTE6WUpiYjs6OWM6dmFYOnQ6bGF3Y0t0Y0s5MTpZSmJiOzo5Yzp2YUg6dDpsYW1NTU1KYmI7OjljTkpiYmpaTWdtOmxKYmJiOXA5RFRtYmFtOk9oZXhla2NqampqOTRoZWthZWNGYmFlY0ZiOWlFaGV4ZWthYmNqamo7OGlCZHljRmJoZWthYmFlODZiOFZ4ZWthYjljYjgzZHlhYjljYjgzZGFhYjljYjgzZEthYjljYjgzZHphYjljYjgzZHdhYjljYjgzZGJrYXJjOlc7YWJmOEtqampqYms7N3dvRHVvOTlldWU5OWV1djk5OEpqampqYmNqZTlSZ3c4S2pqampiYXdjO2FiZmNiYW9jZHRnRHo6cmpqamI4QWF3YztHYmZjYmFEejpyampqYjhBYXdjYWZoRGF3aHFhb2hraW5hcWNGRkY5N0JkYmFEY0ZGRjs3ckJkYmFxY2xmaHFhRGNsZmhEYWtjdWZna21ia2F2Y2Q0aHhhaWNkNGhtZG5hZFRtYmFvY3gyaFBjYmhzaW5hc2h6ZG5hclRtYmFyYXNjZHRmeWRiaHprYWVhemFtMmNkdGZnRElkd2hIYURJZGxoT2FESWRiaEFhbGF6YXgyY2R0ZklkYmhDY2JoRGF3Y2FmaHFhd2M7R2JmaHZhd2hrYXdjO2FiZmhpaW5hQ2FEYzpPOkc6Y2piZklkYmFITmFEYzpHOkc6Y2piZklkYmFBTmFEYzpLOkc6Y2piZklkYmFPTk1NZ1hNaFFhemhMZG5hWGFDOnRnWGFxSWRiZ0s5RGdZbWJhdnlkYmhMa2F2YUxCZGJhemhMZG5hUWFrSWRiZzhBOUVtYmFpeWRiaExhOEFoUWthaWFMQmRiYWthUVVkYmFxYVhhS2FZRVVkYmFpY2xmaGlha2NsZmhrYXZjbGZodmFxY2xmaHFhUGFEY3hmZ0Q5aG1ia2FzY2VmZ3NhZDlobWJra0piYmJiaFFjYmhMYXdjO0diZmhEYXdjO2FiZmhxY2Joa2luYWxhcXlkYmd2YXgyY2R0ZklkYmFsYUR5ZGJnaWF4MmNkdGZJZGJhZWF2YW0yY2R0Zmd2SWR3YWVhaWFtMmNkdGZnaUlkdzp0Z0NhQ05hdklkYmFpSWRiOnRnQ2FDTmF2SWRsYWlJZGw6dGdDYUNOTU06ck1NZ0NhUWFDYVE5RWd2RWhRYWthTGF2RWhMYXFjbGZocWFEY2xmaERhb2FrY2VmZ2s5aG1ia0piYmJiaENkbmFlYXdjO2FiZmFMY2R0Z3FmeWRiZ2thbTJjZHRmZ0RJZHdhZWF3YztHYmZhcWZ5ZGJndmFtMmNkdGZncUlkd2dIOnRnWGFYTmFESWRiYXFJZGJnQTp0ZzhBYThBTmFESWRsYXFJZGxnRTp0Z09hT05NTWdLSmJiYmI5RVRtYmFLOnJnQ2FsYWtheDJjZHRmSWRiTWFsYXZheDJjZHRmSWRiOnRhQ2FDTTp2aENrYVFKYmJiWk5oS2FYYUNOYUhNaEhhT2FDTmFFTWhPYThBYUNOYUFNaEFkbmFkVG1iY2JocWFyaGtpbmFxaERkbmFyVG1iYWt5ZGJoRGtkbmFsYURheDJjZHRmSWRiZzNhZWFEYW0yY2R0ZmdESWR3YUg6dGdRYVFOYURJZGJhQTp0Z0NhQ05hRElkbGFPOnRnWGFYTk1NZzU6cmdFTWc4RWFLOUVUbWJKYmJiYmg4QWRuYTVKYmJiYjlFVG1iYThFYUs6dGFFYUVNOnZoOEFrYThBYVFOYUhNaEhhOEFhWE5hT01oT2E4QWFDTmFBTWhBYTNhS2FFTU1KYmJiWk5oS2tha2NsZmhrYWRhcWNlZmdxOWhtYmtrYWJhS1VkeGFiYUhVZHdhYmFPVWRsYWJhQVVkYmF3Y2plZjhLampqamJrOnJlZXZ1OEpqampqYmNqOFc5UmdyOEtqampqYmFpY2kyaHdjYmhEZG5haVRtYmFyaGlhd2hxaW5haWFlYWRSYmJna2NkdGZ5ZGJCZGJhRGFrY2VmZ2thRGFrMEVoRGFpY2xmaGlhZGNlZmhkYXFjdWZncW1ia2thYmFyYXdhZWFEYWxhb3o6ampqamJhcmNqOFdmOEtqampqYms6RWVlZXU4SmpqampiY2E5UmdvOEtqampqYmFiOWNiODNkeWFiOWNiODNkYWFiOWNiODNkS2FiOWNiODNkemFiOWNiODNkd2FiOWNiODNkYmRuYWRUbWJhb2NiQmQzYW85Y2I4M2l3YW85Y2I4M2liYW9hZWFkYWlhbGFvYzNmYWxFYXZjYmFsRWNyY2J6OmtqampiYWJhbzhQaWI4M2RiYWJhbzhQaXc4M2R3a2FvY2FmOEtqampqYms6Om1lUXU4SmpqampiY2p6OVJndjhLampqamJjYmhvYXZjalBmY2JhZXo6cmpqamI4QWF2Y2p4ZmNiYWV6OnJqampiOEFkbmFpVG1iYWRob2FpaHJpbmF2Y2p4ZmFvUmJiZmd3YXdSYmJjZWY4NmJiYXZjanhmYW9jZWZSYmJmZ3dhd1JiYmNlZjg2YmJhdmNqeGZhb2NkZlJiYmZnd2F3UmJiY2VmODZiYmFvY2lmaG9hcmN1ZmdybWJrY2JoRGNqZWhvYWRocWNlaGtpbmRuZG5hbFRtYmNiaHhjdWhtYXFocmFraHdjdWhQaW5hd2N1ZmFtYW9hdmNqUGZhcmNlZlJiYmdzZlJiYjlSY0ZlR2d6Y2k2YW9hdmNqUGZhclJiYmdIZlJiYjlSY0ZlR2dPY2k2ZmFvYXZjalBmYXJjZGZSYmJnQWZSYmI5UmNGZUdnQ2NpNmZnWGNPdGFPY0ZyN2F6YUNmOVJjd3RWYXZjanhmYUFmUmJiZ3phdmNqeGZhSGZSYmJnSGF2Y2p4ZmFzZlJiYmdzYUhhczZFZ3NhemFzNkVjRmU3VmdzYVA5a2d6RWhtYVhjZDZnSGF4Y2VmZ09hbDlpVmNlOWhtZGFzYVBhekVoUGF4YU9hSEVoeGFyY2lmaHJhd2FpNmhzYXdjZWZod2FzbWJ4ZGtrY3VobWFxaHJha2h3Y3VoeGluYXdjdWZhbWFvYXZjalBmYXJjZWZSYmJmUmJiOVJjRmVHY2k2YW9hdmNqUGZhclJiYmZSYmI5UmNGZUdjaTZmYW9hdmNqUGZhcmNkZlJiYmZSYmI5UmNGZUdjaTZmZ1BheDlrZ3NFaG1hUGNlMG1lYVBheGFzRWh4YXJjaWZocmF3YWk2aFBhd2NlZmh3YVBtYmtrYWRhbWNpMmZncmNkZlJiYmh3YXJjZWZSYmJoeGFyUmJiaFBhZGFEY2kyZmdyY2lmYXJhbWFEOVJjaTJ6TmpqamI4QWFQYXZjalBmZmFvY2VmZ284NmJiYVBhdmNqeGZmZ21hbVJiYmN1Zjg2YmJheGF2Y2pQZmZhbzg2YmJheGF2Y2p4ZmZnbWFtUmJiY3VmODZiYmFyY2RmYXc4NmJiYXJjZWZheDg2YmJhcmFQODZiYmF3YXZjalBmZmFvODZiYmF3YXZjanhmZmdyYXJSYmJjdWY4NmJiYXFjaWZocWFrY2VmaGthRGNlZmdEYWk5aG1ia2NiaHpkbmFsY2I5bW1iY2Joc2F2Y2pQZmNiYWV6OnJqampiOEFhZGN2ZmhsaW5hZGFzY2kyZmd4Y2VmZ0RSYmJob2F4Y2RmZ3FSYmJocmRuZG5hdmNqUGZheFJiYmdtZlJiYm1iYXZjalBmYXJmUmJiaHdkbmRuZG5hdmNqUGZhb2ZSYmJUbWJhd2NGZUdUbWV4aWthd2NGZUdtZGFzY2VmZ0FhaTlwbWRhc2M5ODBtZGFzY2lmaFFjYmhMYXJjRmVHaENhbWNGZUdoWGFsaHdjYmhLY2JoWWluYXdjdWZSYmJoUGF3UmJiaE9jZWhrZG5kbmF3Yzk6ZlJiYmdIYW85aG1iYVBjRmVHYW1TbWVrZG5hUGNGZUdhbzlobWJhT2NGZUdhbVNtZWthSGFtU2FPY0ZlR2FvU0doa2tjZWg4QWFZY2VHaFlkbmRuYUhhcjlobWJhUGNGZUdhb1NtZWtkbmFQY0ZlR2FyOWhtYmFPY0ZlR2FvU21la2FIYW9TYU9jRmVHYXJTR2g4QWtha2FZVmhZYUxhSGNGZUdnSGFYU2FQY0ZlR2dQYUNTR2FQYVhTYU9jRmVHZ1BhQ1NHVmFIYUNTYVBhWFNHVlZoTGE4QWFLY2VHVmhLZG5hQWNlZmdQYWk5cG1iYXdjaWZod2FBYVE2aEhhUGhBYUhtZWtrYVlUbWVhS21la2FyaHdhb2hQYW9oSGFyaE9hbWhyeGRrZG5hWVRhTFZjZUdUbWJhWWFLVFZhTFZjZUdtZWthbWh3YXJoUGFyaEhhbWhPYW9ocnhla2FvaHdhbWhQYW1oSGFvaE9rYXZjalBmYXJmY2U4NmJiYXZjalBmYXdmY2U4NmJiYXhhSDg2YmJhcWFyODZiYmFEYU84NmJiYXZjalBmYVBmY2U4NmJiYWxjaWZobGFzY2VmZ3NhaTlobWJra2F2Y0ZlYWVjZXR6OnJqampiaHdhaWNpMmhyaW5kbmF3YWRSYmJnbWNldGZneDhVZWJnb2N1OWttYmF4YXo4N2ViYXdjamxmYXpjZHRmYWJhbWNkdGZ5ZGJCZGJhemhvYXpjZWZoemthZGFvODZiYmFkY2VmaGRhcmN1ZmdybWJrYXpjZHRob2thYmF2Y2psZmFvejpxampqYjhBYXZjanpmOEtqampqYmtPYmFiYWlhZWFkY2J6Om5qampiazl0ZWl1Y2JjYnlkOzg6RzpjamJnZWFiY2lmYzk4R2ZnYkJkOzg6RzpjamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWs7TGVlZXVkbmRuYWVhYlZjaUdUbWJhYmhpeGVrZG5kbmFkY3o5cG1iYWJoaXhla2FiaGlpbmFpYWV5ZGJCZGJhaWNsZmFlY2xmeWRiQmRiYWljd2ZhZWN3ZnlkYkJkYmFpY3hmYWVjeGZ5ZGJCZGJhZWN6ZmhlYWljemZoaWFkYzlXZmdkY3MwbWJra2FkY2w2bWJpbmFpYWV5ZGJCZGJhZWNsZmhlYWljbGZoaWFkYzk4ZmdkY2kwbWJra2RuYWRUbWJpbmFpYWVSYmI4NmJiYWljZWZoaWFlY2VmaGVhZGN1ZmdkbWJra2FiazthZWVkdWRuZG5hYmNpR1RtYmFiaGl4ZWthZWNGZUdjOmI6YzpldzJobGRuZG5hZGN6OXBtYmFiaGl4ZWthYmhpaW5haWFsQmRiYWljeGZhbEJkYmFpY3dmYWxCZGJhaWNsZmFsQmRiYWljemZoaWFkYzlXZmdkY3MwbWJra2FkY2w2bWJpbmFpYWxCZGJhaWNsZmhpYWRjOThmZ2RjaTBtYmtrZG5hZFRtYmluYWlhZTg2YmJhaWNlZmhpYWRjdWZnZG1ia2thYms5dGVpdWNiY2J5ZDs4Okc6Y2piZ2VhYmNyZmM5NEdmZ2JCZDs4Okc6Y2piZG5kbmFiWmJjenRnZDlubWJjdWhpYWJhZDlSY0ZGaWZjejRuYmN1U21la2FlaGlrYWlrVGVldWNiYWJjYnlkOzg6RzpjamJnZTlSY2lmYzk4R2FlZmdiQmQ7ODpHOmNqYmRuYWJaYmN6dGdlOW5tYmFiYWU5UmNGRmlmY3o0bmI4QWtrOjNxZWx1ZG5kbmFkY2g2bWJhZFRtZWFiYWVhZDs4cWJiYWJza2FiYWVTbWJkbmFlYWRhYmZnaTlSY2JhZGNldDlSMG1iYWRUbWVhYmFlYWQ7OHFiYmFic2thZWFiN2NpR2hsZG5kbmRuYWJhZTlwbWJkbmFsVG1iYWRodmFiaGl4aWtkbmFiY2lHbWJhZGh2YWJoaXhka2FkVG1pYWJhZVJiYjg2YmJhZGN1Zmh2ZG5hYmNlZmdpY2lHbWJhZWNlZmhleGRrYXZUbWlhYmFlUmJlODZiZWFkYzk6Zmh2ZG5hYmNkZmdpY2lHbWJhZWNkZmhleGRrYXZUbWlhYmFlUmJkODZiZGFkYzk5Zmh2ZG5hYmNpZmdpY2lHbWJhZWNpZmhleGRrYXZUbWlhYmFlUmJpODZiaWFiY2xmaGlhZWNsZmhlYWRjOThmaHZ4ZWtkbmFsbWJkbmFpY2lHVG1iYWRUbWxhYmFkY3VmZ2lmZ2xhZWFpZlJiYjg2YmJkbmFsY2lHbWJhaWhkeGVrYWlUbWxhYmFkYzk6ZmdpZmdsYWVhaWZSYmI4NmJiZG5hbGNpR21iYWloZHhla2FpVG1sYWJhZGM5OWZnaWZnbGFlYWlmUmJiODZiYmRuYWxjaUdtYmFpaGR4ZWthaVRtbGFiYWRjOThmZ2RmYWVhZGZSYmI4NmJia2FkY2w2bWJkbmFkYzk4ZmdvY3hHY3hTbWJhb2NkNGNlZmNpR2hpYWVjOThmaGxhYmM5OGZodmluYXZhZGZhbGFkZnlkYkJkYmFkYzk4ZmhkYWljdWZnaW1ia2thb2N4Nm1iYWVjOVdmaHZhYmM5V2Zob2luYW9hZGZnaWN4ZmF2YWRmZ2xjeGZ5ZGJCZGJhaWN3ZmFsY3dmeWRiQmRiYWljbGZhbGNsZnlkYkJkYmFpYWx5ZGJCZGJhZGM5V2ZnZGNpMG1ia2thZFRtZGFkaGlkbmFkY2lHZ2xUbWJhZWN1Zmh2YWJjdWZob2FkaGlpbmFvYWlmYXZhaWZSYmI4NmJiYWljdWZoaWFsY3VmZ2xtYmtrYWRjbDZtZGFlYzk4ZmhsYWJjOThmaHZpbmF2YWlmZ2VjaWZhbGFpZmdkY2lmUmJiODZiYmFlY2RmYWRjZGZSYmI4NmJiYWVjZWZhZGNlZlJiYjg2YmJhZWFkUmJiODZiYmFpYzk4ZmdpbWJ4aWtrYXZjbDZtYmRuYXZjOThmZ2xjM0djM1NtYmF2YWxjZDRjZWZjckdnZGNkdDlSaHZpbmFpYWV5ZGJCZGJhZWNsZmhlYWljbGZoaWFkY3VmZ2RtYmtrYWxjMzZtYmluYWlhZXlkYkJkYmFpY2xmYWVjbGZ5ZGJCZGJhaWN3ZmFlY3dmeWRiQmRiYWljeGZhZWN4ZnlkYkJkYmFpY3pmYWVjemZ5ZGJCZGJhaWNDZmFlY0NmeWRiQmRiYWljS2ZhZWNLZnlkYkJkYmFpYzNmYWVjM2Z5ZGJCZGJhZWNhZmhlYWljYWZoaWF2YzlHZmd2Y2kwbWJra2F2VG1iZG5kbmF2Y3JHZ2RtYmF2aGx4ZWthdmM5NEdobGluYWlhZVJiYjg2YmJhaWNlZmhpYWVjZWZoZWFkY3VmZ2RtYmtrYXZjdzZtYmluYWlhZVJiYjg2YmJhaWNlZmFlY2VmUmJiODZiYmFpY2RmYWVjZGZSYmI4NmJiYWljaWZhZWNpZlJiYjg2YmJhaWNsZmFlY2xmUmJiODZiYmFpY3ZmYWVjdmZSYmI4NmJiYWljb2ZhZWNvZlJiYjg2YmJhaWNyZmFlY3JmUmJiODZiYmFpY3dmaGlhZWN3ZmhlYWxjOTRmZ2xtYmtrYWJrazpwZWRiY2o6R2RrdEZGdXVGRnV1RkZ1dWJiYmJGRnVGRkZ1RkZGdUZiYmJiYmJqWmJiYmJiYmJiYmJiYmJialpiYmJiYmJiYmJiYmJiYmpaODY7bkFaODY7bkFaODY7bkFaODY7bkE6Ozg2O25BWjg2O25BWjg2O25BWjg2O25BOjs4NjtuQVo4NjtuQVo4NjtuQVo4NjtuQTo7YmM7MDpHZGt4ZWJiYmRiYmJqOnFiYiIsZT1uZXcgVWludDhBcnJheShbMzIsMCw2NSwyLDEsMTA2LDM0LDMzLDMsMTI4LDExLDQsMTMsNjQsNiwyNTMsMTAsNywxNSwxMTYsMTI3LDUsOCwxMiw0MCwxNiwxOSw1NCwyMCw5LDI3LDI1NSwxMTMsMTcsNDIsNjcsMjQsMjMsMTQ2LDE0OCwxOCwxNCwyMiw0NSw3MCw2OSw1NiwxMTQsMTAxLDIxLDI1LDYzLDc1LDEzNiwxMDgsMjgsMTE4LDI5LDczLDExNV0pO2lmKHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCIpcmV0dXJue3N1cHBvcnRlZDohMX07dmFyIHQsbz1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShhKG4pLHt9KS50aGVuKGZ1bmN0aW9uKHApe3Q9cC5pbnN0YW5jZSx0LmV4cG9ydHMuX193YXNtX2NhbGxfY3RvcnMoKX0pO2Z1bmN0aW9uIGEocCl7Zm9yKHZhciB5PW5ldyBVaW50OEFycmF5KHAubGVuZ3RoKSxUPTA7VDxwLmxlbmd0aDsrK1Qpe3ZhciBfPXAuY2hhckNvZGVBdChUKTt5W1RdPV8+OTY/Xy05NzpfPjY0P18tMzk6Xys0fWZvcih2YXIgdz0wLFQ9MDtUPHAubGVuZ3RoOysrVCl5W3crK109eVtUXTw2MD9lW3lbVF1dOih5W1RdLTYwKSo2NCt5WysrVF07cmV0dXJuIHkuYnVmZmVyLnNsaWNlKDAsdyl9ZnVuY3Rpb24gcihwKXtpZighcCl0aHJvdyBuZXcgRXJyb3IoIkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBpKHApe3JldHVybiBuZXcgVWludDhBcnJheShwLmJ1ZmZlcixwLmJ5dGVPZmZzZXQscC5ieXRlTGVuZ3RoKX12YXIgZj00OCxkPTE2O2Z1bmN0aW9uIGMocCx5KXt2YXIgVD1wLm1lc2hsZXRzW3kqNCswXSxfPXAubWVzaGxldHNbeSo0KzFdLHc9cC5tZXNobGV0c1t5KjQrMl0sRT1wLm1lc2hsZXRzW3kqNCszXTtyZXR1cm57dmVydGljZXM6cC52ZXJ0aWNlcy5zdWJhcnJheShULFQrdyksdHJpYW5nbGVzOnAudHJpYW5nbGVzLnN1YmFycmF5KF8sXytFKjMpfX1mdW5jdGlvbiB1KHAseSxULF8sdyxFLFIsUyxDLEkpe3ZhciBNPXQuZXhwb3J0cy5zYnJrLFA9dC5leHBvcnRzLm1lc2hvcHRfYnVpbGRNZXNobGV0c0JvdW5kKHkubGVuZ3RoLEUsUiksRj1NKFAqZCksQT1NKHkubGVuZ3RoKjQpLHg9TSh5Lmxlbmd0aCksTj1NKHkuYnl0ZUxlbmd0aCksdj1NKFQuYnl0ZUxlbmd0aCksVT1uZXcgVWludDhBcnJheSh0LmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7VS5zZXQoaSh5KSxOKSxVLnNldChpKFQpLHYpO3ZhciBMPXAoRixBLHgsTix5Lmxlbmd0aCx2LF8sdyxFLFIsUyxDLEkpO1U9bmV3IFVpbnQ4QXJyYXkodC5leHBvcnRzLm1lbW9yeS5idWZmZXIpO2Zvcih2YXIgRD1VLnN1YmFycmF5KEYsRitMKmQpLEc9bmV3IFVpbnQzMkFycmF5KEQuYnVmZmVyLEQuYnl0ZU9mZnNldCxELmJ5dGVMZW5ndGgvNCkuc2xpY2UoKSxWPTA7VjxMOysrVil7dmFyIE89R1tWKjQrMF0sSj1HW1YqNCsxXSxfPUdbVio0KzJdLHJlPUdbVio0KzNdO3QuZXhwb3J0cy5tZXNob3B0X29wdGltaXplTWVzaGxldChBK08qNCx4K0oscmUsXyl9dmFyIHNlPUw/R1soTC0xKSo0KzBdK0dbKEwtMSkqNCsyXTowLG9lPUw/R1soTC0xKSo0KzFdK0dbKEwtMSkqNCszXSozOjAsY2U9e21lc2hsZXRzOkcsdmVydGljZXM6bmV3IFVpbnQzMkFycmF5KFUuYnVmZmVyLEEsc2UpLnNsaWNlKCksdHJpYW5nbGVzOm5ldyBVaW50OEFycmF5KFUuYnVmZmVyLHgsb2UpLnNsaWNlKCksbWVzaGxldENvdW50Okx9O3JldHVybiBNKEYtTSgwKSksY2V9ZnVuY3Rpb24gbChwKXt2YXIgeT1uZXcgRmxvYXQzMkFycmF5KHQuZXhwb3J0cy5tZW1vcnkuYnVmZmVyLHAsZi80KTtyZXR1cm57Y2VudGVyWDp5WzBdLGNlbnRlclk6eVsxXSxjZW50ZXJaOnlbMl0scmFkaXVzOnlbM10sY29uZUFwZXhYOnlbNF0sY29uZUFwZXhZOnlbNV0sY29uZUFwZXhaOnlbNl0sY29uZUF4aXNYOnlbN10sY29uZUF4aXNZOnlbOF0sY29uZUF4aXNaOnlbOV0sY29uZUN1dG9mZjp5WzEwXX19ZnVuY3Rpb24gbShwLHksVCxfKXt2YXIgdz10LmV4cG9ydHMuc2JyayxFPVtdLFI9dyh5LmJ5dGVMZW5ndGgpLFM9dyhwLnZlcnRpY2VzLmJ5dGVMZW5ndGgpLEM9dyhwLnRyaWFuZ2xlcy5ieXRlTGVuZ3RoKSxJPXcoZiksTT1uZXcgVWludDhBcnJheSh0LmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7TS5zZXQoaSh5KSxSKSxNLnNldChpKHAudmVydGljZXMpLFMpLE0uc2V0KGkocC50cmlhbmdsZXMpLEMpO2Zvcih2YXIgUD0wO1A8cC5tZXNobGV0Q291bnQ7KytQKXt2YXIgRj1wLm1lc2hsZXRzW1AqNCswXSxBPXAubWVzaGxldHNbUCo0KzFdLHg9cC5tZXNobGV0c1tQKjQrM107dC5leHBvcnRzLm1lc2hvcHRfY29tcHV0ZU1lc2hsZXRCb3VuZHMoSSxTK0YqNCxDK0EseCxSLFQsXyksRS5wdXNoKGwoSSkpfXJldHVybiB3KFItdygwKSksRX1mdW5jdGlvbiBoKHAseSxULF8pe3ZhciB3PXQuZXhwb3J0cy5zYnJrLEU9dyhmKSxSPXcocC5ieXRlTGVuZ3RoKSxTPXcoeS5ieXRlTGVuZ3RoKSxDPW5ldyBVaW50OEFycmF5KHQuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtDLnNldChpKHApLFIpLEMuc2V0KGkoeSksUyksdC5leHBvcnRzLm1lc2hvcHRfY29tcHV0ZUNsdXN0ZXJCb3VuZHMoRSxSLHAubGVuZ3RoLFMsVCxfKTt2YXIgST1sKEUpO3JldHVybiB3KEUtdygwKSksSX1mdW5jdGlvbiBiKHAseSxULF8sdyl7dmFyIEU9dC5leHBvcnRzLnNicmssUj1FKGYpLFM9RShwLmJ5dGVMZW5ndGgpLEM9Xz9FKF8uYnl0ZUxlbmd0aCk6MCxJPW5ldyBVaW50OEFycmF5KHQuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtJLnNldChpKHApLFMpLF8mJkkuc2V0KGkoXyksQyksdC5leHBvcnRzLm1lc2hvcHRfY29tcHV0ZVNwaGVyZUJvdW5kcyhSLFMseSxULEMsXz93OjApO3ZhciBNPWwoUik7cmV0dXJuIEUoUi1FKDApKSxNfXJldHVybntyZWFkeTpvLHN1cHBvcnRlZDohMCxidWlsZE1lc2hsZXRzOmZ1bmN0aW9uKHAseSxULF8sdyxFKXtyKHAubGVuZ3RoJTM9PTApLHIoeSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscih5Lmxlbmd0aCVUPT0wKSxyKFQ+PTMpLHIoXz49MyYmXzw9MjU2KSxyKHc+PTEmJnc8PTUxMiksRT1FfHwwO3ZhciBSPXAuQllURVNfUEVSX0VMRU1FTlQ9PTQ/cDpuZXcgVWludDMyQXJyYXkocCk7cmV0dXJuIHUodC5leHBvcnRzLm1lc2hvcHRfYnVpbGRNZXNobGV0c0ZsZXgsUix5LHkubGVuZ3RoL1QsVCo0LF8sdyx3LEUsMCl9LGJ1aWxkTWVzaGxldHNGbGV4OmZ1bmN0aW9uKHAseSxULF8sdyxFLFIsUyl7cihwLmxlbmd0aCUzPT0wKSxyKHkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoeS5sZW5ndGglVD09MCkscihUPj0zKSxyKF8+PTMmJl88PTI1Nikscih3Pj0xJiZFPD01MTIpLHIodzw9RSksUj1SfHwwLFM9U3x8MDt2YXIgQz1wLkJZVEVTX1BFUl9FTEVNRU5UPT00P3A6bmV3IFVpbnQzMkFycmF5KHApO3JldHVybiB1KHQuZXhwb3J0cy5tZXNob3B0X2J1aWxkTWVzaGxldHNGbGV4LEMseSx5Lmxlbmd0aC9ULFQqNCxfLHcsRSxSLFMpfSxidWlsZE1lc2hsZXRzU3BhdGlhbDpmdW5jdGlvbihwLHksVCxfLHcsRSxSKXtyKHAubGVuZ3RoJTM9PTApLHIoeSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscih5Lmxlbmd0aCVUPT0wKSxyKFQ+PTMpLHIoXz49MyYmXzw9MjU2KSxyKHc+PTEmJkU8PTUxMikscih3PD1FKSxSPVJ8fDA7dmFyIFM9cC5CWVRFU19QRVJfRUxFTUVOVD09ND9wOm5ldyBVaW50MzJBcnJheShwKTtyZXR1cm4gdSh0LmV4cG9ydHMubWVzaG9wdF9idWlsZE1lc2hsZXRzU3BhdGlhbCxTLHkseS5sZW5ndGgvVCxUKjQsXyx3LEUsUil9LGV4dHJhY3RNZXNobGV0OmZ1bmN0aW9uKHAseSl7cmV0dXJuIHIoeT49MCYmeTxwLm1lc2hsZXRDb3VudCksYyhwLHkpfSxjb21wdXRlQ2x1c3RlckJvdW5kczpmdW5jdGlvbihwLHksVCl7cihwLmxlbmd0aCUzPT0wKSxyKHAubGVuZ3RoLzM8PTUxMikscih5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKHkubGVuZ3RoJVQ9PTApLHIoVD49Myk7dmFyIF89cC5CWVRFU19QRVJfRUxFTUVOVD09ND9wOm5ldyBVaW50MzJBcnJheShwKTtyZXR1cm4gaChfLHkseS5sZW5ndGgvVCxUKjQpfSxjb21wdXRlTWVzaGxldEJvdW5kczpmdW5jdGlvbihwLHksVCl7cmV0dXJuIHIoeSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscih5Lmxlbmd0aCVUPT0wKSxyKFQ+PTMpLG0ocCx5LHkubGVuZ3RoL1QsVCo0KX0sY29tcHV0ZVNwaGVyZUJvdW5kczpmdW5jdGlvbihwLHksVCxfKXtyZXR1cm4gcihwIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSxyKHAubGVuZ3RoJXk9PTApLHIoeT49MykscighVHx8VCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkscighVHx8VC5sZW5ndGglXz09MCkscighVHx8Xz49MSkscighVHx8cC5sZW5ndGgveT09VC5sZW5ndGgvXyksXz1ffHwwLGIocCxwLmxlbmd0aC95LHkqNCxULF8qNCl9fX0pKCl9KTt2YXIgVXNlLGF4PVgoKCk9PntVc2U9KGZ1bmN0aW9uKCl7dmFyIG49ImI5SDc5VGViYmJlZ3Y5R2V1ZXU5R2V1YjlHYmI5R2t1dXV1dXV1dXV1dWI5R2l1dXVldWlyb2RpYmxiZWx2ZTlXZWlpdmllYmVvd2V1ZWNqOkdka3JubG85VFc5VDlWVjk1ZGJIOUY5RjkzOUg3OVQ5RjlKOUgyMjlGOUp0OVZWN2JiSzlUVzc5TzlWOVd0OUY5Tlc5VVdWOUh0Vzl1OUg5VTlOVzlVdDdiZWw3OUlWOVJiZER3ZWJjZWtkbHZxO204TG9kYms6d2d2T3V3OTlpdXY5OXZ1OEpqampqYmM7V2I5UmdrOEtqampqYmFrY3hmY2JjO0tiejpkampqYjhBYWtjdWFsY2R0Z3hhbGNGRkZGaTBFY2J5ZDpxOkc6Y2piSGpqampiYmdtQmR4YWtjZUJkMmFkY2k5VWhQYWxjZDRhbGZoc2NlaHppbmF6Z0hjZXRoemFIYXM2bWJrYWtjdWFIY2R0Z3phSGNGRkZGaTBFY2J5ZDpxOkc6Y2piSGpqampiYmdzQmR6YWtjZEJkMmFzY0ZlYXp6OmRqampiaE9hRGNkNGhBYXJjZDRoQ2F2Y2Q0aFhkbmFsVG1iYUhjdWZocmNiaHZpbmRuZG5hT2NiYWlhdmFYMmNkdGZnSHlkbGdEYURjampqajk0U0Vnc2NINGNiYW9hdmFDMmNkdGZnenlkbGdRY3M0YVFjampqajk0U0U3YXM3YzpGOmI6REQyY2JhSHlkYmdMYUxjampqajk0U0Vnc2NINGNiYXp5ZGJnS2NzNGFLY2pqamo5NFNFN2FzN2M7RDtPOkI4SjI3Y2JhSHlkd2dZYVljampqajk0U0VnSGNINGNiYXp5ZHdnOEFjczRhOEFjampqajk0U0U3YUg3YzozRjtOOE4yN2F3YXZhQTJjZHRmZ0h5ZGxnRWFIeWRiZzM3Y0ZGRkZyR2dIY200YUg3YzpmampLMjdhckdnc2NkdGZnSHlkYmd6Y3VTbWJhRTo6aDVhMzo6aDhFYThBOjpoOEZhUTo6aGFhSzo6aGhhWTo6aGdhRDo6aDhKYUw6Omg4S2NlaERpbmFEaEhkbmFpYXphWDJjZHRmZ0RJZGJhOEs5Q21iYURJZGxhOEo5Q21iYURJZHdhZzlDbWJhb2F6YUMyY2R0ZmdESWRiYWg5Q21iYURJZGxhYTlDbWJhRElkd2E4RjlDbWJhd2F6YUEyY2R0ZmdESWRiYThFOUNtYmFESWRsYTU5Qm1pa2FIY2VmaERhT2FzYUhmYXJHZ3NjZHRmZ0h5ZGJnemN1OWhtYmtrYUhhdkJkYmF2aHprYW1hdmNkdGZhekJkYmF2Y2VmZ3ZhbDlobWJra2FPY2J5ZE46RzpjamJIOmJqampiYmFrY2VCZDJha2N1YWxjZWZnSGNkdGFIY0ZGRkZpMEVjYnlkOnE6RzpjamJIampqamJiZzhMQmR6YWtjZEJkMmFrY3VhZGNkdGFkY0ZGRkZpMEVnWWNieWQ6cTpHOmNqYkhqampqYmJnOE1CZENha2NpQmQyYThMY2xmY2JheHo6ZGpqamJoemRuYWRUbWJkbmFlVG1iYWVoSGFkaHNpbmF6YW1hSHlkYmNkdGZ5ZGJjZHRmZ0RhRHlkYmNlZkJkYmFIY2xmaEhhc2N1ZmdzbWJ4ZGtrYW1oSGFkaHNpbmF6YUh5ZGJjZHRmZ0RhRHlkYmNlZkJkYmFIY2xmaEhhc2N1ZmdzbWJra2RuYWxUbWJjYmhzYXpoSGFsaERpbmFIeWRiaE9hSGFzQmRiYUhjbGZoSGFPYXNmaHNhRGN1ZmdEbWJra2RuYWRjaTZnUW1iY2Joc2NkaEhhUGhPaW5kbmRuYWVUbWJhbWFlYXNmZ3Z5ZGJjZHRmaERhbWF2Y3dmeWRiY2R0ZmhyYW1hdmNsZnlkYmNkdGZodnhla2FtYXNmZ0Rjd2ZocmFEY2xmaHZrYXJ5ZGJocmF2eWRiaHZhemFEeWRiY2R0ZmdEYUR5ZGJnRGNlZkJkYmE4TWFEY2R0ZmFIYzk6ZkJkYmF6YXZjZHRmZ0RhRHlkYmdEY2VmQmRiYThNYURjZHRmYUhjdWZCZGJhemFyY2R0ZmdEYUR5ZGJnRGNlZkJkYmE4TWFEY2R0ZmFIQmRiYXNjeGZoc2FIY2xmaEhhT2N1ZmdPbWJra2NiaHNhOExjYkJkYmFrY3VhUGNsdGFkY0ZGRkZkMEVjYnlkOnE6RzpjamJIampqamJiZzhOQmRLYWtjbEJkMmRuYVFtYmFlaHphOE5oSGFQaHZpbmRuZG5hZVRtYmF6Y3dmeWRiaERhemNsZnlkYmhPYXp5ZGJocnhla2FzY2RmaERhc2NlZmhPYXNocmtKYmJiYmg4S0piYmJiSmJiYmJKYmJiYkpiYmJiSmJialpKYmJqOjthd2FPYUEyY2R0ZmdRSWRiYXdhcmFBMmNkdGZnTElkYmdoOnRhd2FEYUEyY2R0ZmdLSWRsYUxJZGxnZzp0ZzhKTmFRSWRsYWc6dGdnYUtJZGJhaDp0Tjp0Z2hKYmJiYjlFRWFoSmJiYmI5QkVnOEVhaWFyYVgyY2R0ZmdySWR3Z2hhaWFPYVgyY2R0ZmdPSWR3ZzU5QkVhOEVhcklkbGdhYU9JZGxneTlCRWE4RWFySWRiZzhGYU9JZGJnOFA5QkVnOEVhaGFpYURhWDJjZHRmZ0RJZHdnSTlCRWE4RWFhYURJZGxnOFI5QkVhOEVhOEZhRElkYmc4UzlCRWc4RWE1YUk5QkVhOEVheWE4UjlCRWE4RWE4UGE4UzlCRWg4RWRuYThKYTVhaDp0TmFnYUlhaDp0Tjp0Z2hhaE5hOEphOFBhOEY6dE5hZ2E4U2E4Rjp0Tjp0ZzhGYThGTmE4SmF5YWE6dE5hZ2E4UmFhOnROOnRnOEphOEpOTU1nZ0piYmJiOUJtYmE4RWFnOnI6dmg4S2thSGN4ZmE4RVVkYmFIY3dmYWhhOEtOVWRiYUhjbGZhOEphOEtOVWRiYUhhOEZhOEtOVWRiYXpjeGZoemFIY3pmaEhhc2NpZmhzYXZjdWZndm1ia2tjYmhIYWthWWNieWQ6cTpHOmNqYkhqampqYmJnREJkM2FrY3ZCZDJkbmFkVG1iYURoemluYXphSEJkYmF6Y2xmaHphZGFIY2VmZ0g5aG1ia2tha2N1YVBjZHRhZGNGRkZGOTcwRWNieWQ6cTpHOmNqYkhqampqYmJndkJkYWFrY29CZDJha2FQY2J5ZDpxOkc6Y2piSGpqampiYmc4QUJkOEtha2NyQmQyZG5hZGNpNm1iYThOY3hmaHphdmhzY2JoSGluYXNhSEJkYmE4QWFIZmNkY2JheklkYmc4S0piYmJiOURFYThLSmJiYmI5RVY4NmJiYXNjbGZoc2F6Y3pmaHphUGFIY2VmZ0g5aG1ia2tkbmFsVG1iY2JoUmluYVJjZHRoSGRuYThMYVJjZWZnUmNkdGZ5ZGJnemE4TGFIZnlkYmdIU21iYXphSDlSaExhOE1hSGNkdGZoS2NiaDhVaW5hS2E4VWNkdGZnOFZ5ZGJnSGNkNGc4V2NpMmd4YUhjaUdjZHRnenlkOmU6RzpjamJmaEhheGF6eWRqOkc6Y2piZmh6ZG5hZVRtYmFlYUhjZHRmeWRiaEhhZWF6Y2R0ZnlkYmh6a2RuYThVY2VmZzhVYUw5cG1iYW1hSGNkdGZ5ZGJoWWFtYXpjZHRmeWRiaDNhOEFhOFdmaEVhdmE4V2NkdGZoOFhhOFVod2luYUthd2NkdGZnUXlkYmdIY2Q0Z3pjaTJnQWFIY2lHY2R0Z0h5ZDplOkc6Y2piZmhzYUFhSHlkajpHOmNqYmZoSGRuYWVUbWJhZWFzY2R0ZnlkYmhzYWVhSGNkdGZ5ZGJoSGtkbmRuYW1hSGNkdGZ5ZGJhWVNtYmFtYXNjZHRmeWRiYTM5aG1la2E4QWF6ZlJiYmdIYUVSYmJnc1ZjaVNtYmRuYUhhc0dtYmE4V2hzZG5hOFdhOFh5ZGJnSFNtYmE4WGhPaW5hT2F2YUhnc2NkdGZncnlkYmdIQmRiYXJoT2FzYUg5aG1ia2tkbmF6YXZhemNkdGZnT3lkYmdIU21iaW5hT2F2YUhnemNkdGZncnlkYmdIQmRiYXJoT2F6YUg5aG1ia2thc2F6U21iYThBYXpmZ09SYmJhOEFhc2ZnSFJiYlZjaVNtZWF2YXpjZHRmYXNCZGJhSGFIUmJiYU9SYmJWODZiYmtkbmE4VnlkYmNpR2F4Zmd6YURhemNkdGZnc3lkYmdIU21iaW5hc2FEYUhnemNkdGZnT3lkYmdIQmRiYU9oc2F6YUg5aG1ia2tkbmFReWRiY2lHYUFmZ3NhRGFzY2R0ZmdPeWRiZ0hTbWJpbmFPYURhSGdzY2R0ZmdyeWRiZ0hCZGJhcmhPYXNhSDlobWJra2F6YXNTbWJhRGFzY2R0ZmF6QmRia2F3Y2VmZ3dhTDlobWJra2E4VWFMOWhtYmtrYVJhbDlobWJra2RuYWRUbWJjYmhyaW5hcmh6ZG5hcmFEYXJjZHRmZ3d5ZGJnSFNtYmF3aHNpbmFzYURhSGd6Y2R0ZmdPeWRiZ0hCZGJhT2hzYXphSDlobWJra2F3YXpCZGJhcmNlZmdyYWQ5aG1ia2NiaDhWYWJjYmFkY2x0ejpkampqYmhLZG5hZGNpNm1iYXFjZUdoRWFEaFlhZWgzY2JoOFdpbmRuYThOYThXY2x0ZmdzSWR4SmJiYmI5Qm1iYW1hOFdjeDJnSGZoeGFlYUhmaExjYmh6YThWaHdpbmFLYVlhemZ5ZGJjbHRmaEhkbmRuYWVUbWJhbWFMYXpjOmU6RzpjamJmeWRiY2R0ZnlkYmNkdGZoQWFtYUxhemNqOkc6Y2piZnlkYmNkdGZ5ZGJjZHRmaHJhM2F6ZnlkYmhPeGVrYXhhemM6ZTpHOmNqYmZ5ZGJjZHRmaEFheGF6Y2o6RzpjamJmeWRiY2R0ZmhyYXdoT2thSGFzSWRiZ2dhb2FtYU9jZHRmeWRiZ1FhQzJjZHRmZ09JZGJnOEthc0lkd2c4RmFPSWR3ZzhKTmFnYThLTmFzSWRsZzhFYU9JZGxnZ05NTWdoTjp0Z2FKYmJiYkpiYmpaYThGYThKYWhOOnRnOEZhOEZOYWFhYU5hOEVhZ2FoTjp0Z2hhaE5NTWdhOnI6dmFhSmJiYmI5QkVKO0FzNm5KYmJqWmFpYXJ5ZGJhWDJjZHRmZ09JZHdhaWFRYVgyY2R0ZmdySWR3ZzU6dGdhYThKYWFhOEpOYU9JZGJhcklkYmd5OnRnOFBhOEtOYWdhT0lkbGFySWRsZ0k6dGc4Uk5NTWdhTjp0ZzhFYWlhQXlkYmFYMmNkdGZnT0lkd2E1OnRnNWE4SmE1YThKTmFPSWRiYXk6dGc4U2E4S05hZ2FPSWRsYUk6dGdJTk1NZzVOOnRnOEpOYThQYThLYWFOOnRneWE4U2E4S2E1Tjp0ZzhLTmE4UmFnYWFOOnRnYWFJYWdhNU46dGdnTk1NSmJiYmJKYmJqWmE4RWE4RU5heWF5TmFhYWFOTU1hOEphOEpOYThLYThLTmFnYWdOTU1OZzhLOnJnOEo6dmE4S0piYmJiOUJFTmdnOmxnOEthOEtKYmJqWjlFRWc4S2E4S0o3O0E5czg5Tko6TDl0OXM6Ok1OSjtvYjtqWk1KYmJqWmE4Szp0OnJOZzhLOnRhOEthZ0piYmJiOURFTmc4S2E4SmE4S05hRUVnOEtOYUhJZGJNVWRiYUhhaGE4S05hSElkbE1VZGxhSGE4RmE4S05hSElkd01VZHdhd2NlZmh3YXpjbGZnemN4OWhtYmtrYVljeGZoWWEzY3hmaDNhOFZjaWZoOFZhOFdjZWZnOFdhUDlobWJrY2JocmluYXJoemRuYXJhdmFyY2R0ZmdzeWRiZ0hTbWJpbmFzYXZhSGd6Y2R0ZmdPeWRiZ0hCZGJhT2hzYXphSDlobWJra2FLYXJjOFcyZmdIYzNmSmJialpKYmJqOjthOEFhemZSYmJjZUdFZzhLVWRiYUhjOFNmYThLVWRiYUhhOEtVZHhhcmNlZmdyYVA5aG1ia2thcWNkR2h2Y2JoemFEaHNhS2hIaW5kbmF6YXN5ZGI5aG1iSmJiYmJoOEtkbmFIY3dmZ09JZGJnOEphOEpOYUhJZGJnZ2FnTmFIY2xmZ3JJZGJnaGFoTk1NZ2FKYmJiYjlCbWJKYmJqWmFhOnI6dmg4S2thT2E4SmE4S05VZGJhcmFoYThLTlVkYmFIYWdhOEtOZzhKVWRiYXZtYmFISmJialphOEphOEtKYmJiYjlCRVVkYmthc2NsZmhzYUhjemZoSGFkYXpjZWZnejlobWJrY2JoSGFLaHppbmRuYUhhRHlkYmdzU21iYXphS2FzY2x0ZmdzeWR3QmR3YXphczhQZGI4M2Ria2FEY2xmaERhemN6Zmh6YWRhSGNlZmdIOWhtYmtrZG5ha3lkMmd6VG1iYXpjZHRha2N4ZmZjOThmaEhpbmFIeWRiY2J5ZE46RzpjamJIOmJqampiYmFIYzk4ZmhIYXpjdWZnem1ia2tha2M7V2JmOEtqampqYms5dGVpdWNiY2J5ZDp5Okc6Y2piZ2VhYmNpZmM5OEdmZ2JCZDp5Okc6Y2piZG5kbmFiWmJjenRnZDlubWJjdWhpYWJhZDlSY0ZGaWZjejRuYmN1U21la2FlaGlrYWlrO2FlZWR1ZG5kbmFiY2lHVG1iYWJoaXhla2FlY0ZlR2M6YjpjOmV3MmhsZG5kbmFkY3o5cG1iYWJoaXhla2FiaGlpbmFpYWxCZGJhaWN4ZmFsQmRiYWljd2ZhbEJkYmFpY2xmYWxCZGJhaWN6ZmhpYWRjOVdmZ2RjczBtYmtrYWRjbDZtYmluYWlhbEJkYmFpY2xmaGlhZGM5OGZnZGNpMG1ia2tkbmFkVG1iaW5haWFlODZiYmFpY2VmaGlhZGN1ZmdkbWJra2Fiazl0ZWl1Y2JjYnlkOnk6RzpjamJnZWFiY3JmYzk0R2ZnYkJkOnk6RzpjamJkbmRuYWJaYmN6dGdkOW5tYmN1aGlhYmFkOVJjRkZpZmN6NG5iY3VTbWVrYWVoaWthaWtUZWV1Y2JhYmNieWQ6eTpHOmNqYmdlOVJjaWZjOThHYWVmZ2JCZDp5Okc6Y2piZG5hYlpiY3p0Z2U5bm1iYWJhZTlSY0ZGaWZjejRuYjhBa2trOFJkYmNqOkdka3plYmJiZGJiYmJiYmJlYmJiYmM6cTpHZGt4ZWJiYmRiYmJhOnFiYiIsZT1uZXcgVWludDhBcnJheShbMzIsMCw2NSwyLDEsMTA2LDM0LDMzLDMsMTI4LDExLDQsMTMsNjQsNiwyNTMsMTAsNywxNSwxMTYsMTI3LDUsOCwxMiw0MCwxNiwxOSw1NCwyMCw5LDI3LDI1NSwxMTMsMTcsNDIsNjcsMjQsMjMsMTQ2LDE0OCwxOCwxNCwyMiw0NSw3MCw2OSw1NiwxMTQsMTAxLDIxLDI1LDYzLDc1LDEzNiwxMDgsMjgsMTE4LDI5LDczLDExNV0pO2lmKHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCIpcmV0dXJue3N1cHBvcnRlZDohMX07dmFyIHQsbz1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShhKG4pLHt9KS50aGVuKGZ1bmN0aW9uKGMpe3Q9Yy5pbnN0YW5jZSx0LmV4cG9ydHMuX193YXNtX2NhbGxfY3RvcnMoKX0pO2Z1bmN0aW9uIGEoYyl7Zm9yKHZhciB1PW5ldyBVaW50OEFycmF5KGMubGVuZ3RoKSxsPTA7bDxjLmxlbmd0aDsrK2wpe3ZhciBtPWMuY2hhckNvZGVBdChsKTt1W2xdPW0+OTY/bS05NzptPjY0P20tMzk6bSs0fWZvcih2YXIgaD0wLGw9MDtsPGMubGVuZ3RoOysrbCl1W2grK109dVtsXTw2MD9lW3VbbF1dOih1W2xdLTYwKSo2NCt1WysrbF07cmV0dXJuIHUuYnVmZmVyLnNsaWNlKDAsaCl9ZnVuY3Rpb24gcihjKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoIkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBpKGMpe3JldHVybiBuZXcgVWludDhBcnJheShjLmJ1ZmZlcixjLmJ5dGVPZmZzZXQsYy5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBmKGMsdSxsLG0saCxiLHAseSxULF8pe3ZhciB3PXQuZXhwb3J0cy5zYnJrLEU9dyh1KjE2KSxSPWM/dyhjLmJ5dGVMZW5ndGgpOjAsUz13KGwuYnl0ZUxlbmd0aCksQz13KGIuYnl0ZUxlbmd0aCksST13KHkuYnl0ZUxlbmd0aCksTT1uZXcgVWludDhBcnJheSh0LmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7YyYmTS5zZXQoaShjKSxSKSxNLnNldChpKGwpLFMpLE0uc2V0KGkoYiksQyksTS5zZXQoaSh5KSxJKSx0LmV4cG9ydHMubWVzaG9wdF9nZW5lcmF0ZVRhbmdlbnRzKEUsUix1LFMsbSxoKjQsQyxwKjQsSSxUKjQsXyksTT1uZXcgVWludDhBcnJheSh0LmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7dmFyIFA9bmV3IEZsb2F0MzJBcnJheShNLmJ1ZmZlcixFLHUqNCkuc2xpY2UoKTtyZXR1cm4gdyhFLXcoMCkpLFB9dmFyIGQ9e0NvbXBhdGlibGU6MSxaZXJvRmFsbGJhY2s6Mn07cmV0dXJue3JlYWR5Om8sc3VwcG9ydGVkOiEwLGdlbmVyYXRlVGFuZ2VudHM6ZnVuY3Rpb24oYyx1LGwsbSxoLGIscCx5KXtyKGM9PT1udWxsfHxjIGluc3RhbmNlb2YgVWludDMyQXJyYXl8fGMgaW5zdGFuY2VvZiBJbnQzMkFycmF5fHxjIGluc3RhbmNlb2YgVWludDE2QXJyYXl8fGMgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSxyKGM9PT1udWxsfHxjLmxlbmd0aCUzPT0wKSxyKHUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIodS5sZW5ndGglbD09MCkscihsPj0zKSxyKG0gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIobS5sZW5ndGglaD09MCkscihoPj0zKSxyKGIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpLHIoYi5sZW5ndGglcD09MCkscihwPj0yKSxyKHUubGVuZ3RoL2w9PW0ubGVuZ3RoL2gpLHIodS5sZW5ndGgvbD09Yi5sZW5ndGgvcCkscihjIT09bnVsbHx8dS5sZW5ndGgvbCUzPT0wKTtmb3IodmFyIFQ9MCxfPTA7XzwoeT95Lmxlbmd0aDowKTsrK18pcih5W19daW4gZCksVHw9ZFt5W19dXTt2YXIgdz11Lmxlbmd0aC9sLEU9Yz9jLmxlbmd0aDp3LFI9Yz09PW51bGx8fGMuQllURVNfUEVSX0VMRU1FTlQ9PTQ/YzpuZXcgVWludDMyQXJyYXkoYyk7cmV0dXJuIGYoUixFLHUsdyxsLG0saCxiLHAsVCl9fX0pKCl9KTt2YXIgcng9WCgoKT0+e2V4KCk7dHgoKTtueCgpO294KCk7YXgoKX0pO3ZhciBfcixpeCxjeD1YKCgpPT57SW4oKTt1bigpO19yPXtYOjAsWToxLFo6Mn07X3IuWV9VUF9UT19aX1VQPVEuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oWi5mcm9tQXJyYXkoWzEsMCwwLDAsMCwxLDAsLTEsMF0pKTtfci5aX1VQX1RPX1lfVVA9US5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihaLmZyb21BcnJheShbMSwwLDAsMCwwLC0xLDAsMSwwXSkpO19yLlhfVVBfVE9fWl9VUD1RLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKFouZnJvbUFycmF5KFswLDAsMSwwLDEsMCwtMSwwLDBdKSk7X3IuWl9VUF9UT19YX1VQPVEuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oWi5mcm9tQXJyYXkoWzAsMCwtMSwwLDEsMCwxLDAsMF0pKTtfci5YX1VQX1RPX1lfVVA9US5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihaLmZyb21BcnJheShbMCwxLDAsLTEsMCwwLDAsMCwxXSkpO19yLllfVVBfVE9fWF9VUD1RLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKFouZnJvbUFycmF5KFswLC0xLDAsMSwwLDAsMCwwLDFdKSk7X3IuZnJvbU5hbWU9ZnVuY3Rpb24obil7cmV0dXJuIF9yW25dfTtPYmplY3QuZnJlZXplKF9yKTtpeD1fcn0pO2Z1bmN0aW9uIHlyKG4sZSl7dGhpcy5fZWxsaXBzb2lkPW4sdGhpcy5fY2FtZXJhUG9zaXRpb249bmV3IHMsdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlPW5ldyBzLHRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQ9MCxnKGUpJiYodGhpcy5jYW1lcmFQb3NpdGlvbj1lKX1mdW5jdGlvbiBkeChuLGUsdCl7aWYoZyhlKSYmZTwwJiZuLm1pbmltdW1SYWRpdXM+LWUpe2xldCBvPXMuZnJvbUVsZW1lbnRzKG4ucmFkaWkueCtlLG4ucmFkaWkueStlLG4ucmFkaWkueitlLGpVKTtuPUsuZnJvbUNhcnRlc2lhbjMobyx0KX1yZXR1cm4gbn1mdW5jdGlvbiB1eChuLGUsdCxvKXtnKG8pfHwobz1uZXcgcyk7bGV0IGE9YngobixlKSxyPTA7Zm9yKGxldCBpPTAsZj10Lmxlbmd0aDtpPGY7KytpKXtsZXQgZD10W2ldLGM9aHgobixkLGEpO2lmKGM8MClyZXR1cm47cj1NYXRoLm1heChyLGMpfXJldHVybiBteChhLHIsbyl9ZnVuY3Rpb24gbHgobixlLHQsbyxhLHIpe2cocil8fChyPW5ldyBzKSxvPW8/PzMsYT1hPz9zLlpFUk87bGV0IGk9YngobixlKSxmPTA7Zm9yKGxldCBkPTAsYz10Lmxlbmd0aDtkPGM7ZCs9byl7b20ueD10W2RdK2EueCxvbS55PXRbZCsxXSthLnksb20uej10W2QrMl0rYS56O2xldCB1PWh4KG4sb20saSk7aWYodTwwKXJldHVybjtmPU1hdGgubWF4KGYsdSl9cmV0dXJuIG14KGksZixyKX1mdW5jdGlvbiB2XyhuLGUsdCl7bGV0IG89ZSxhPXQscj1zLnN1YnRyYWN0KG4sbyxzeCksaT0tcy5kb3QocixvKTtyZXR1cm4hKGE8MD9pPjA6aT5hJiZpKmkvcy5tYWduaXR1ZGVTcXVhcmVkKHIpPmEpfWZ1bmN0aW9uIGh4KG4sZSx0KXtsZXQgbz1uLnRyYW5zZm9ybVBvc2l0aW9uVG9TY2FsZWRTcGFjZShlLExVKSxhPXMubWFnbml0dWRlU3F1YXJlZChvKSxyPU1hdGguc3FydChhKSxpPXMuZGl2aWRlQnlTY2FsYXIobyxyLHpVKTthPU1hdGgubWF4KDEsYSkscj1NYXRoLm1heCgxLHIpO2xldCBmPXMuZG90KGksdCksZD1zLm1hZ25pdHVkZShzLmNyb3NzKGksdCxpKSksYz0xL3IsdT1NYXRoLnNxcnQoYS0xKSpjO3JldHVybiAxLyhmKmMtZCp1KX1mdW5jdGlvbiBteChuLGUsdCl7aWYoIShlPD0wfHxlPT09MS8wfHxlIT09ZSkpcmV0dXJuIHMubXVsdGlwbHlCeVNjYWxhcihuLGUsdCl9ZnVuY3Rpb24gYngobixlKXtyZXR1cm4gcy5lcXVhbHMoZSxzLlpFUk8pP2U6KG4udHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKGUsa18pLHMubm9ybWFsaXplKGtfLGtfKSl9dmFyIHN4LEJVLGZ4LFVVLGpVLG9tLExVLHpVLGtfLEFyLEdzPVgoKCk9PntFdCgpO01lKCk7ZmUoKTtWZSgpO2huKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeXIucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxjYW1lcmFQb3NpdGlvbjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbWVyYVBvc2l0aW9ufSxzZXQ6ZnVuY3Rpb24obil7bGV0IHQ9dGhpcy5fZWxsaXBzb2lkLnRyYW5zZm9ybVBvc2l0aW9uVG9TY2FsZWRTcGFjZShuLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZSksbz1zLm1hZ25pdHVkZVNxdWFyZWQodCktMTtzLmNsb25lKG4sdGhpcy5fY2FtZXJhUG9zaXRpb24pLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZT10LHRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQ9b319fSk7c3g9bmV3IHM7eXIucHJvdG90eXBlLmlzUG9pbnRWaXNpYmxlPWZ1bmN0aW9uKG4pe2xldCB0PXRoaXMuX2VsbGlwc29pZC50cmFuc2Zvcm1Qb3NpdGlvblRvU2NhbGVkU3BhY2UobixzeCk7cmV0dXJuIHZfKHQsdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlLHRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQpfTt5ci5wcm90b3R5cGUuaXNTY2FsZWRTcGFjZVBvaW50VmlzaWJsZT1mdW5jdGlvbihuKXtyZXR1cm4gdl8obix0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2UsdGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZCl9O0JVPW5ldyBzO3lyLnByb3RvdHlwZS5pc1NjYWxlZFNwYWNlUG9pbnRWaXNpYmxlUG9zc2libHlVbmRlckVsbGlwc29pZD1mdW5jdGlvbihuLGUpe2xldCB0PXRoaXMuX2VsbGlwc29pZCxvLGE7cmV0dXJuIGcoZSkmJmU8MCYmdC5taW5pbXVtUmFkaXVzPi1lPyhhPUJVLGEueD10aGlzLl9jYW1lcmFQb3NpdGlvbi54Lyh0LnJhZGlpLngrZSksYS55PXRoaXMuX2NhbWVyYVBvc2l0aW9uLnkvKHQucmFkaWkueStlKSxhLno9dGhpcy5fY2FtZXJhUG9zaXRpb24uei8odC5yYWRpaS56K2UpLG89YS54KmEueCthLnkqYS55K2EueiphLnotMSk6KGE9dGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlLG89dGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZCksdl8obixhLG8pfTt5ci5wcm90b3R5cGUuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnQ9ZnVuY3Rpb24obixlLHQpe3JldHVybiB1eCh0aGlzLl9lbGxpcHNvaWQsbixlLHQpfTtmeD1LLmNsb25lKEsuVU5JVF9TUEhFUkUpO3lyLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludFBvc3NpYmx5VW5kZXJFbGxpcHNvaWQ9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9ZHgodGhpcy5fZWxsaXBzb2lkLHQsZngpO3JldHVybiB1eChhLG4sZSxvKX07eXIucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50RnJvbVZlcnRpY2VzPWZ1bmN0aW9uKG4sZSx0LG8sYSl7cmV0dXJuIGx4KHRoaXMuX2VsbGlwc29pZCxuLGUsdCxvLGEpfTt5ci5wcm90b3R5cGUuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRGcm9tVmVydGljZXNQb3NzaWJseVVuZGVyRWxsaXBzb2lkPWZ1bmN0aW9uKG4sZSx0LG8sYSxyKXtsZXQgaT1keCh0aGlzLl9lbGxpcHNvaWQsYSxmeCk7cmV0dXJuIGx4KGksbixlLHQsbyxyKX07VVU9W107eXIucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50RnJvbVJlY3RhbmdsZT1mdW5jdGlvbihuLGUsdCl7bGV0IG89eGUuc3Vic2FtcGxlKG4sZSwwLFVVKSxhPXBlLmZyb21Qb2ludHMobyk7aWYoIShzLm1hZ25pdHVkZShhLmNlbnRlcik8LjEqZS5taW5pbXVtUmFkaXVzKSlyZXR1cm4gdGhpcy5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludChhLmNlbnRlcixvLHQpfTtqVT1uZXcgcztvbT1uZXcgcztMVT1uZXcgcyx6VT1uZXcgcztrXz1uZXcgcztBcj15cn0pO3ZhciBhbSxHVSxPYyxGXz1YKCgpPT57TWUoKTtndCgpO2ZlKCk7YW09e307YW0uZ2V0SGVpZ2h0PWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4obi10KSplK3R9O0dVPW5ldyBhZTthbS5nZXRQb3NpdGlvbj1mdW5jdGlvbihuLGUsdCxvLGEpe2xldCByPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobixHVSk7aWYoIWcocikpcmV0dXJuIHMuY2xvbmUobixhKTtsZXQgaT1hbS5nZXRIZWlnaHQoci5oZWlnaHQsdCxvKTtyZXR1cm4gcy5mcm9tUmFkaWFucyhyLmxvbmdpdHVkZSxyLmxhdGl0dWRlLGksZSxhKX07T2M9YW19KTt2YXIgcHgsUGEsZ3g9WCgoKT0+e3B4PXtOT05FOjAsQklUUzEyOjF9O09iamVjdC5mcmVlemUocHgpO1BhPXB4fSk7ZnVuY3Rpb24gVG8obixlLHQsbyxhLHIsaSxmLGQsYyl7bGV0IHU9UGEuTk9ORSxsLG07aWYoZyhlKSYmZyh0KSYmZyhvKSYmZyhhKSl7bGV0IGg9ZS5taW5pbXVtLGI9ZS5tYXhpbXVtLHA9cy5zdWJ0cmFjdChiLGgsVlUpLHk9by10O01hdGgubWF4KHMubWF4aW11bUNvbXBvbmVudChwKSx5KTxxVS0xP3U9UGEuQklUUzEyOnU9UGEuTk9ORTtsZXQgXz1RLmZyb21TY2FsZShwLEhVKTtfPVEuc2V0VHJhbnNsYXRpb24oXyxoLF8pO2xldCB3PVEuZnJvbVNjYWxlKHMuZnJvbUVsZW1lbnRzKDEvcC54LDEvcC55LDEvcC56LHdkKSxLVSk7dz1RLm11bHRpcGx5QnlUcmFuc2xhdGlvbih3LHMubmVnYXRlKGgsd2QpLHcpLG09US5jbG9uZShhLG5ldyBRKTtsZXQgRT1RLmdldFRyYW5zbGF0aW9uKGEsd2QpO0U9cy5zdWJ0cmFjdChFLG4sd2QpLG09US5zZXRUcmFuc2xhdGlvbihtLEUsbSksbT1RLm11bHRpcGx5KG0sXyxtKSxsPVEuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGEsbmV3IFEpLGw9US5tdWx0aXBseSh3LGwsbCksYT1RLm11bHRpcGx5KGEsXyxuZXcgUSl9dGhpcy5xdWFudGl6YXRpb249dSx0aGlzLm1pbmltdW1IZWlnaHQ9dCx0aGlzLm1heGltdW1IZWlnaHQ9byx0aGlzLmNlbnRlcj1zLmNsb25lKG4pLHRoaXMudG9TY2FsZWRFTlU9bCx0aGlzLmZyb21TY2FsZWRFTlU9YSx0aGlzLm1hdHJpeD1tLHRoaXMuaGFzVmVydGV4Tm9ybWFscz1yPz8hMSx0aGlzLmhhc1dlYk1lcmNhdG9yVD1pPz8hMSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHM9Zj8/ITEsdGhpcy5leGFnZ2VyYXRpb249ZD8/MSx0aGlzLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0PWM/PzAsdGhpcy5zdHJpZGU9MCx0aGlzLl9vZmZzZXRHZW9kZXRpY1N1cmZhY2VOb3JtYWw9MCx0aGlzLl9vZmZzZXRWZXJ0ZXhOb3JtYWw9MCx0aGlzLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCl9dmFyIHdkLFZVLGthLEhVLEtVLHFVLFdVLF94LHJtLGltLG5hLFZzPVgoKCk9PntCcigpO3Z0KCk7TWUoKTtDdCgpO2ZlKCk7amUoKTt1bigpO0ZfKCk7Z3goKTt3ZD1uZXcgcyxWVT1uZXcgcyxrYT1uZXcgWSxIVT1uZXcgUSxLVT1uZXcgUSxxVT1NYXRoLnBvdygyLDEyKTtUby5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKG4sZSx0LG8sYSxyLGksZil7bGV0IGQ9by54LGM9by55O2lmKHRoaXMucXVhbnRpemF0aW9uPT09UGEuQklUUzEyKXt0PVEubXVsdGlwbHlCeVBvaW50KHRoaXMudG9TY2FsZWRFTlUsdCx3ZCksdC54PWsuY2xhbXAodC54LDAsMSksdC55PWsuY2xhbXAodC55LDAsMSksdC56PWsuY2xhbXAodC56LDAsMSk7bGV0IHU9dGhpcy5tYXhpbXVtSGVpZ2h0LXRoaXMubWluaW11bUhlaWdodCxsPWsuY2xhbXAoKGEtdGhpcy5taW5pbXVtSGVpZ2h0KS91LDAsMSk7WS5mcm9tRWxlbWVudHModC54LHQueSxrYSk7bGV0IG09anQuY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoa2EpO1kuZnJvbUVsZW1lbnRzKHQueixsLGthKTtsZXQgaD1qdC5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyhrYSk7WS5mcm9tRWxlbWVudHMoZCxjLGthKTtsZXQgYj1qdC5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyhrYSk7aWYobltlKytdPW0sbltlKytdPWgsbltlKytdPWIsdGhpcy5oYXNXZWJNZXJjYXRvclQpe1kuZnJvbUVsZW1lbnRzKGksMCxrYSk7bGV0IHA9anQuY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoa2EpO25bZSsrXT1wfX1lbHNlIG5bZSsrXT10LngtdGhpcy5jZW50ZXIueCxuW2UrK109dC55LXRoaXMuY2VudGVyLnksbltlKytdPXQuei10aGlzLmNlbnRlci56LG5bZSsrXT1hLG5bZSsrXT1kLG5bZSsrXT1jLHRoaXMuaGFzV2ViTWVyY2F0b3JUJiYobltlKytdPWkpO3JldHVybiB0aGlzLmhhc1ZlcnRleE5vcm1hbHMmJihuW2UrK109anQub2N0UGFja0Zsb2F0KHIpKSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMmJihuW2UrK109Zi54LG5bZSsrXT1mLnksbltlKytdPWYueiksZX07V1U9bmV3IHMsX3g9bmV3IHM7VG8ucHJvdG90eXBlLmFkZEdlb2RldGljU3VyZmFjZU5vcm1hbHM9ZnVuY3Rpb24obixlLHQpe2lmKHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscylyZXR1cm47bGV0IG89dGhpcy5zdHJpZGUsYT1uLmxlbmd0aC9vO3RoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscz0hMCx0aGlzLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCk7bGV0IHI9dGhpcy5zdHJpZGU7Zm9yKGxldCBpPTA7aTxhO2krKyl7Zm9yKGxldCB1PTA7dTxvO3UrKyl7bGV0IGw9aSpvK3UsbT1pKnIrdTtlW21dPW5bbF19bGV0IGY9dGhpcy5kZWNvZGVQb3NpdGlvbihlLGksV1UpLGQ9dC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZixfeCksYz1pKnIrdGhpcy5fb2Zmc2V0R2VvZGV0aWNTdXJmYWNlTm9ybWFsO2VbY109ZC54LGVbYysxXT1kLnksZVtjKzJdPWQuen19O1RvLnByb3RvdHlwZS5yZW1vdmVHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPWZ1bmN0aW9uKG4sZSl7aWYoIXRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscylyZXR1cm47bGV0IHQ9dGhpcy5zdHJpZGUsbz1uLmxlbmd0aC90O3RoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscz0hMSx0aGlzLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCk7bGV0IGE9dGhpcy5zdHJpZGU7Zm9yKGxldCByPTA7cjxvO3IrKylmb3IobGV0IGk9MDtpPGE7aSsrKXtsZXQgZj1yKnQraSxkPXIqYStpO2VbZF09bltmXX19O1RvLnByb3RvdHlwZS5kZWNvZGVQb3NpdGlvbj1mdW5jdGlvbihuLGUsdCl7aWYoZyh0KXx8KHQ9bmV3IHMpLGUqPXRoaXMuc3RyaWRlLHRoaXMucXVhbnRpemF0aW9uPT09UGEuQklUUzEyKXtsZXQgbz1qdC5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKG5bZV0sa2EpO3QueD1vLngsdC55PW8ueTtsZXQgYT1qdC5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKG5bZSsxXSxrYSk7cmV0dXJuIHQuej1hLngsUS5tdWx0aXBseUJ5UG9pbnQodGhpcy5mcm9tU2NhbGVkRU5VLHQsdCl9cmV0dXJuIHQueD1uW2VdLHQueT1uW2UrMV0sdC56PW5bZSsyXSxzLmFkZCh0LHRoaXMuY2VudGVyLHQpfTtUby5wcm90b3R5cGUuZ2V0RXhhZ2dlcmF0ZWRQb3NpdGlvbj1mdW5jdGlvbihuLGUsdCl7dD10aGlzLmRlY29kZVBvc2l0aW9uKG4sZSx0KTtsZXQgbz10aGlzLmV4YWdnZXJhdGlvbixhPXRoaXMuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ7aWYobyE9PTEmJnRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyl7bGV0IGk9dGhpcy5kZWNvZGVHZW9kZXRpY1N1cmZhY2VOb3JtYWwobixlLF94KSxmPXRoaXMuZGVjb2RlSGVpZ2h0KG4sZSksZD1PYy5nZXRIZWlnaHQoZixvLGEpLWY7dC54Kz1pLngqZCx0LnkrPWkueSpkLHQueis9aS56KmR9cmV0dXJuIHR9O1RvLnByb3RvdHlwZS5kZWNvZGVUZXh0dXJlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24obixlLHQpe3JldHVybiBnKHQpfHwodD1uZXcgWSksZSo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT1QYS5CSVRTMTI/anQuZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyhuW2UrMl0sdCk6WS5mcm9tRWxlbWVudHMobltlKzRdLG5bZSs1XSx0KX07VG8ucHJvdG90eXBlLmRlY29kZUhlaWdodD1mdW5jdGlvbihuLGUpe3JldHVybiBlKj10aGlzLnN0cmlkZSx0aGlzLnF1YW50aXphdGlvbj09PVBhLkJJVFMxMj9qdC5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKG5bZSsxXSxrYSkueSoodGhpcy5tYXhpbXVtSGVpZ2h0LXRoaXMubWluaW11bUhlaWdodCkrdGhpcy5taW5pbXVtSGVpZ2h0Om5bZSszXX07VG8ucHJvdG90eXBlLmRlY29kZVdlYk1lcmNhdG9yVD1mdW5jdGlvbihuLGUpe3JldHVybiBlKj10aGlzLnN0cmlkZSx0aGlzLnF1YW50aXphdGlvbj09PVBhLkJJVFMxMj9qdC5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKG5bZSszXSxrYSkueDpuW2UrNl19O1RvLnByb3RvdHlwZS5nZXRPY3RFbmNvZGVkTm9ybWFsPWZ1bmN0aW9uKG4sZSx0KXtlPWUqdGhpcy5zdHJpZGUrdGhpcy5fb2Zmc2V0VmVydGV4Tm9ybWFsO2xldCBvPW5bZV0vMjU2LGE9TWF0aC5mbG9vcihvKSxyPShvLWEpKjI1NjtyZXR1cm4gWS5mcm9tRWxlbWVudHMoYSxyLHQpfTtUby5wcm90b3R5cGUuZGVjb2RlTm9ybWFsPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1lKnRoaXMuc3RyaWRlK3RoaXMuX29mZnNldFZlcnRleE5vcm1hbDtyZXR1cm4ganQub2N0RGVjb2RlRmxvYXQobltvXSx0KX07VG8ucHJvdG90eXBlLmRlY29kZUdlb2RldGljU3VyZmFjZU5vcm1hbD1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIGU9ZSp0aGlzLnN0cmlkZSt0aGlzLl9vZmZzZXRHZW9kZXRpY1N1cmZhY2VOb3JtYWwsdC54PW5bZV0sdC55PW5bZSsxXSx0Lno9bltlKzJdLHR9O1RvLnByb3RvdHlwZS5fY2FsY3VsYXRlU3RyaWRlQW5kT2Zmc2V0cz1mdW5jdGlvbigpe2xldCBuPTA7dGhpcy5xdWFudGl6YXRpb249PT1QYS5CSVRTMTI/bis9MzpuKz02LHRoaXMuaGFzV2ViTWVyY2F0b3JUJiYobis9MSksdGhpcy5oYXNWZXJ0ZXhOb3JtYWxzJiYodGhpcy5fb2Zmc2V0VmVydGV4Tm9ybWFsPW4sbis9MSksdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiYodGhpcy5fb2Zmc2V0R2VvZGV0aWNTdXJmYWNlTm9ybWFsPW4sbis9MyksdGhpcy5zdHJpZGU9bn07cm09e3Bvc2l0aW9uM0RBbmRIZWlnaHQ6MCx0ZXh0dXJlQ29vcmRBbmRFbmNvZGVkTm9ybWFsczoxLGdlb2RldGljU3VyZmFjZU5vcm1hbDoyfSxpbT17Y29tcHJlc3NlZDA6MCxjb21wcmVzc2VkMToxLGdlb2RldGljU3VyZmFjZU5vcm1hbDoyfTtUby5wcm90b3R5cGUuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbihuKXtsZXQgZT1uZS5GTE9BVCx0PW5lLmdldFNpemVJbkJ5dGVzKGUpLG89dGhpcy5zdHJpZGUqdCxhPTAscj1bXTtmdW5jdGlvbiBpKGYsZCl7ci5wdXNoKHtpbmRleDpmLHZlcnRleEJ1ZmZlcjpuLGNvbXBvbmVudERhdGF0eXBlOmUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTpkLG9mZnNldEluQnl0ZXM6YSxzdHJpZGVJbkJ5dGVzOm99KSxhKz1kKnR9aWYodGhpcy5xdWFudGl6YXRpb249PT1QYS5OT05FKXtpKHJtLnBvc2l0aW9uM0RBbmRIZWlnaHQsNCk7bGV0IGY9MjtmKz10aGlzLmhhc1dlYk1lcmNhdG9yVD8xOjAsZis9dGhpcy5oYXNWZXJ0ZXhOb3JtYWxzPzE6MCxpKHJtLnRleHR1cmVDb29yZEFuZEVuY29kZWROb3JtYWxzLGYpLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmaShybS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwsMyl9ZWxzZXtsZXQgZj10aGlzLmhhc1dlYk1lcmNhdG9yVHx8dGhpcy5oYXNWZXJ0ZXhOb3JtYWxzLGQ9dGhpcy5oYXNXZWJNZXJjYXRvclQmJnRoaXMuaGFzVmVydGV4Tm9ybWFscztpKGltLmNvbXByZXNzZWQwLGY/NDozKSxkJiZpKGltLmNvbXByZXNzZWQxLDEpLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmaShpbS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwsMyl9cmV0dXJuIHJ9O1RvLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVMb2NhdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWFudGl6YXRpb249PT1QYS5OT05FP3JtOmltfTtUby5jbG9uZT1mdW5jdGlvbihuLGUpe2lmKGcobikpcmV0dXJuIGcoZSl8fChlPW5ldyBUbyksZS5xdWFudGl6YXRpb249bi5xdWFudGl6YXRpb24sZS5taW5pbXVtSGVpZ2h0PW4ubWluaW11bUhlaWdodCxlLm1heGltdW1IZWlnaHQ9bi5tYXhpbXVtSGVpZ2h0LGUuY2VudGVyPXMuY2xvbmUobi5jZW50ZXIpLGUudG9TY2FsZWRFTlU9US5jbG9uZShuLnRvU2NhbGVkRU5VKSxlLmZyb21TY2FsZWRFTlU9US5jbG9uZShuLmZyb21TY2FsZWRFTlUpLGUubWF0cml4PVEuY2xvbmUobi5tYXRyaXgpLGUuaGFzVmVydGV4Tm9ybWFscz1uLmhhc1ZlcnRleE5vcm1hbHMsZS5oYXNXZWJNZXJjYXRvclQ9bi5oYXNXZWJNZXJjYXRvclQsZS5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPW4uaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyxlLmV4YWdnZXJhdGlvbj1uLmV4YWdnZXJhdGlvbixlLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0PW4uZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQsZS5fY2FsY3VsYXRlU3RyaWRlQW5kT2Zmc2V0cygpLGV9O25hPVRvfSk7dmFyIFRkLGNtLERfPVgoKCk9PntUZD17TU9SUEhJTkc6MCxDT0xVTUJVU19WSUVXOjEsU0NFTkUyRDoyLFNDRU5FM0Q6M307VGQuZ2V0TW9ycGhUaW1lPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09VGQuU0NFTkUzRD8xOm49PT1UZC5NT1JQSElORz92b2lkIDA6MH07T2JqZWN0LmZyZWV6ZShUZCk7Y209VGR9KTtmdW5jdGlvbiBYVSgpe3JldHVybiEwfWZ1bmN0aW9uIFlVKG4sZSl7ZT1lPz8iVGhpcyBvYmplY3Qgd2FzIGRlc3Ryb3llZCwgaS5lLiwgZGVzdHJveSgpIHdhcyBjYWxsZWQuIjtmdW5jdGlvbiB0KCl7fWZvcihsZXQgbyBpbiBuKXR5cGVvZiBuW29dPT0iZnVuY3Rpb24iJiYobltvXT10KTtuLmlzRGVzdHJveWVkPVhVfXZhciB5eCxBeD1YKCgpPT57eXg9WVV9KTtmdW5jdGlvbiBUeCgpe2lmKCFnKGJvLl9jYW5UcmFuc2ZlckFycmF5QnVmZmVyKSl7bGV0IG49al8oInRyYW5zZmVyVHlwZWRBcnJheVRlc3QiKTtuLnBvc3RNZXNzYWdlPW4ud2Via2l0UG9zdE1lc3NhZ2U/P24ucG9zdE1lc3NhZ2U7bGV0IGU9OTksdD1uZXcgSW50OEFycmF5KFtlXSk7dHJ5e24ucG9zdE1lc3NhZ2Uoe2FycmF5OnR9LFt0LmJ1ZmZlcl0pfWNhdGNoe3JldHVybiBiby5fY2FuVHJhbnNmZXJBcnJheUJ1ZmZlcj0hMSxiby5fY2FuVHJhbnNmZXJBcnJheUJ1ZmZlcn1iby5fY2FuVHJhbnNmZXJBcnJheUJ1ZmZlcj1uZXcgUHJvbWlzZShvPT57bi5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7bGV0IHI9YS5kYXRhLmFycmF5LGk9ZyhyKSYmclswXT09PWU7byhpKSxuLnRlcm1pbmF0ZSgpLGJvLl9jYW5UcmFuc2ZlckFycmF5QnVmZmVyPWl9fSl9cmV0dXJuIGJvLl9jYW5UcmFuc2ZlckFycmF5QnVmZmVyfWZ1bmN0aW9uIEJfKG4pe2xldCBlO3RyeXtlPW5ldyBCbG9iKFtuXSx7dHlwZToiYXBwbGljYXRpb24vamF2YXNjcmlwdCJ9KX1jYXRjaHtsZXQgYT13aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcixyPW5ldyBhO3IuYXBwZW5kKG4pLGU9ci5nZXRCbG9iKCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iil9cmV0dXJuKHdpbmRvdy5VUkx8fHdpbmRvdy53ZWJraXRVUkwpLmNyZWF0ZU9iamVjdFVSTChlKX1mdW5jdGlvbiBqXyhuKXtsZXQgZT1uZXcgd3guZGVmYXVsdChuKSx0PWUuc2NoZW1lKCkubGVuZ3RoIT09MCYmZS5mcmFnbWVudCgpLmxlbmd0aD09PTAsbz1uLnJlcGxhY2UoL1wuanMkLywiIiksYT17fSxyLGk7aWYoRWYobikpaT1uO2Vsc2UgaWYoIXQpe2xldCBmPW9yKGAke2JvLl93b3JrZXJNb2R1bGVQcmVmaXh9LyR7b30uanNgKTtFZihmKSYmKGk9Zil9aWYoaSl7bGV0IGY9YGltcG9ydCAiJHtpfSI7YDtyZXR1cm4gcj1CXyhmKSxhLnR5cGU9Im1vZHVsZSIsbmV3IFdvcmtlcihyLGEpfWlmKCF0JiZ0eXBlb2YgQ0VTSVVNX1dPUktFUlM8InUiKXtsZXQgZj1gCiAgICAgIGltcG9ydFNjcmlwdHMoIiR7Ql8oQ0VTSVVNX1dPUktFUlMpfSIpOwogICAgICBDZXNpdW1Xb3JrZXJzWyIke299Il0oKTsKICAgIGA7cmV0dXJuIHI9Ql8oZiksbmV3IFdvcmtlcihyLGEpfWlmKHI9bix0fHwocj1vcihgJHtiby5fd29ya2VyTW9kdWxlUHJlZml4K299LmpzYCkpLCFhci5zdXBwb3J0c0VzbVdlYldvcmtlcnMoKSl0aHJvdyBuZXcgbnQoIlRoaXMgYnJvd3NlciBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3NlciB0byBjb250aW51ZS4iKTtyZXR1cm4gYS50eXBlPSJtb2R1bGUiLG5ldyBXb3JrZXIocixhKX1hc3luYyBmdW5jdGlvbiBKVShuLGUpe2xldCB0PXttb2R1bGVQYXRoOnZvaWQgMCx3YXNtQmluYXJ5RmlsZTp2b2lkIDAsd2FzbUJpbmFyeTp2b2lkIDB9O2lmKCFhci5zdXBwb3J0c1dlYkFzc2VtYmx5KCkpe2lmKCFnKGUuZmFsbGJhY2tNb2R1bGVQYXRoKSl0aHJvdyBuZXcgbnQoYFRoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYiBBc3NlbWJseSwgYW5kIG5vIGJhY2t1cCBtb2R1bGUgd2FzIHByb3ZpZGVkIGZvciAke24uX3dvcmtlclBhdGh9YCk7cmV0dXJuIHQubW9kdWxlUGF0aD1vcihlLmZhbGxiYWNrTW9kdWxlUGF0aCksdH10Lndhc21CaW5hcnlGaWxlPW9yKGUud2FzbUJpbmFyeUZpbGUpO2xldCBvPWF3YWl0IHlhLmZldGNoQXJyYXlCdWZmZXIoe3VybDp0Lndhc21CaW5hcnlGaWxlfSk7cmV0dXJuIHQud2FzbUJpbmFyeT1vLHR9ZnVuY3Rpb24gYm8obixlKXt0aGlzLl93b3JrZXJQYXRoPW4sdGhpcy5fbWF4aW11bUFjdGl2ZVRhc2tzPWU/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSx0aGlzLl9hY3RpdmVUYXNrcz0wLHRoaXMuX25leHRJRD0wLHRoaXMuX3dlYkFzc2VtYmx5UHJvbWlzZT12b2lkIDB9YXN5bmMgZnVuY3Rpb24gJFUobixlLHQpe2xldCBvPWF3YWl0IFByb21pc2UucmVzb2x2ZShUeCgpKTtnKHQpP298fCh0Lmxlbmd0aD0wKTp0PVFVO2xldCBhPW4uX25leHRJRCsrLHI9bmV3IFByb21pc2UoKGksZik9PntuLl93b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsWlUobi5fd29ya2VyLGEsaSxmKSl9KTtyZXR1cm4gbi5fd29ya2VyLnBvc3RNZXNzYWdlKHtpZDphLGJhc2VVcmw6b3IuZ2V0Q2VzaXVtQmFzZVVybCgpLnVybCxwYXJhbWV0ZXJzOmUsY2FuVHJhbnNmZXJBcnJheUJ1ZmZlcjpvfSx0KSxyfWFzeW5jIGZ1bmN0aW9uIGVqKG4sZSx0KXsrK24uX2FjdGl2ZVRhc2tzO3RyeXtsZXQgbz1hd2FpdCAkVShuLGUsdCk7cmV0dXJuLS1uLl9hY3RpdmVUYXNrcyxvfWNhdGNoKG8pe3Rocm93LS1uLl9hY3RpdmVUYXNrcyxvfX12YXIgd3gsVV8sWlUsUVUsRXgsUng9WCgoKT0+e3d4PWhhKGRpKCksMSk7SWwoKTtmZSgpO0F4KCk7SmkoKTt5YigpO0dsKCk7YmIoKTtucygpO3BhKCk7VV89bmV3IFRsO1pVPShuLGUsdCxvKT0+e2xldCBhPSh7ZGF0YTpyfSk9PntpZihyLmlkPT09ZSl7aWYoZyhyLmVycm9yKSl7bGV0IGk9ci5lcnJvcjtpLm5hbWU9PT0iUnVudGltZUVycm9yIj8oaT1uZXcgbnQoci5lcnJvci5tZXNzYWdlKSxpLnN0YWNrPXIuZXJyb3Iuc3RhY2spOmkubmFtZT09PSJEZXZlbG9wZXJFcnJvciI/KGk9bmV3IFZ0KHIuZXJyb3IubWVzc2FnZSksaS5zdGFjaz1yLmVycm9yLnN0YWNrKTppLm5hbWU9PT0iRXJyb3IiJiYoaT1uZXcgRXJyb3Ioci5lcnJvci5tZXNzYWdlKSxpLnN0YWNrPXIuZXJyb3Iuc3RhY2spLFVfLnJhaXNlRXZlbnQoaSksbyhpKX1lbHNlIFVfLnJhaXNlRXZlbnQoKSx0KHIucmVzdWx0KTtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGEpfX07cmV0dXJuIGF9LFFVPVtdO2JvLnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24obixlKXtpZihnKHRoaXMuX3dvcmtlcil8fCh0aGlzLl93b3JrZXI9al8odGhpcy5fd29ya2VyUGF0aCkpLCEodGhpcy5fYWN0aXZlVGFza3M+PXRoaXMuX21heGltdW1BY3RpdmVUYXNrcykpcmV0dXJuIGVqKHRoaXMsbixlKX07Ym8ucHJvdG90eXBlLmluaXRXZWJBc3NlbWJseU1vZHVsZT1hc3luYyBmdW5jdGlvbihuKXtpZihnKHRoaXMuX3dlYkFzc2VtYmx5UHJvbWlzZSkpcmV0dXJuIHRoaXMuX3dlYkFzc2VtYmx5UHJvbWlzZTtsZXQgZT1hc3luYygpPT57bGV0IHQ9dGhpcy5fd29ya2VyPWpfKHRoaXMuX3dvcmtlclBhdGgpLG89YXdhaXQgSlUodGhpcyxuKSxhPWF3YWl0IFByb21pc2UucmVzb2x2ZShUeCgpKSxyLGk9by53YXNtQmluYXJ5O2coaSkmJmEmJihyPVtpXSk7bGV0IGY9bmV3IFByb21pc2UoKGQsYyk9Pnt0Lm9ubWVzc2FnZT1mdW5jdGlvbih7ZGF0YTp1fSl7Zyh1KT9kKHUucmVzdWx0KTpjKG5ldyBudCgiQ291bGQgbm90IGNvbmZpZ3VyZSB3YXNtIG1vZHVsZSIpKX19KTtyZXR1cm4gdC5wb3N0TWVzc2FnZSh7Y2FuVHJhbnNmZXJBcnJheUJ1ZmZlcjphLHBhcmFtZXRlcnM6e3dlYkFzc2VtYmx5Q29uZmlnOm99fSxyKSxmfTtyZXR1cm4gdGhpcy5fd2ViQXNzZW1ibHlQcm9taXNlPWUoKSx0aGlzLl93ZWJBc3NlbWJseVByb21pc2V9O2JvLnByb3RvdHlwZS5pc0Rlc3Ryb3llZD1mdW5jdGlvbigpe3JldHVybiExfTtiby5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuX3dvcmtlcikmJnRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKSx5eCh0aGlzKX07Ym8udGFza0NvbXBsZXRlZEV2ZW50PVVfO2JvLl9kZWZhdWx0V29ya2VyTW9kdWxlUHJlZml4PSJXb3JrZXJzLyI7Ym8uX3dvcmtlck1vZHVsZVByZWZpeD1iby5fZGVmYXVsdFdvcmtlck1vZHVsZVByZWZpeDtiby5fY2FuVHJhbnNmZXJBcnJheUJ1ZmZlcj12b2lkIDA7RXg9Ym99KTtmdW5jdGlvbiBhaihuLGUpe1EuaW52ZXJzZShlLG4uX2ludmVyc2VUcmFuc2Zvcm0pLG4uX25lZWRzUmVidWlsZD0hMTtsZXQgdD1uLl9pbmRpY2VzLmxlbmd0aC8zLG89bmV3IFVpbnQzMkFycmF5KHQpO2ZvcihsZXQgYT0wO2E8dDsrK2Epb1thXT1hO24uX3Jvb3ROb2RlLmludGVyc2VjdGluZ1RyaWFuZ2xlcz1vLG4uX3Jvb3ROb2RlLmNoaWxkcmVuLmxlbmd0aD0wfWZ1bmN0aW9uIHh4KG4sZSx0KXtsZXQgbz0xL01hdGgucG93KDIsdCksYT1zLmZyb21FbGVtZW50cyhuKm8tLjUsZSpvLS41LC0uNSxyaikscj1zLmZyb21FbGVtZW50cygobisxKSpvLS41LChlKzEpKm8tLjUsLjUsaWopO3JldHVybiByby5mcm9tQ29ybmVycyhhLHIpfWZ1bmN0aW9uIGNqKG4sZSx0LG8sYSl7cy5wYWNrKHRbMF0sbiw5KmEpLHMucGFjayh0WzFdLG4sOSphKzMpLHMucGFjayh0WzJdLG4sOSphKzYpLGVbYV09b31mdW5jdGlvbiBPeChuLGUsdCl7bGV0IG89UW4ucmF5QXhpc0FsaWduZWRCb3VuZGluZ0JveChlLG4uYWFiYixzaik7aWYoIWcobykpcmV0dXJuO2lmKCFuLmNoaWxkcmVuLmxlbmd0aHx8bi5idWlsZGluZ0NoaWxkcmVuKXt0LnB1c2goe25vZGU6bixpbnRlcnZhbDpuZXcgX28oby5zdGFydCxvLnN0b3ApfSk7cmV0dXJufWZvcihsZXQgcj0wO3I8bi5jaGlsZHJlbi5sZW5ndGg7cisrKU94KG4uY2hpbGRyZW5bcl0sZSx0KX1mdW5jdGlvbiBmaihuLGUsdCxvLGEscil7bGV0IGk9ZS5zb3J0KGZ1bmN0aW9uKGQsYyl7cmV0dXJuIGQuaW50ZXJ2YWwuc3RhcnQtYy5pbnRlcnZhbC5zdGFydH0pLGY9TnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IGQ9MDtkPGkubGVuZ3RoO2QrKyl7bGV0IGM9aVtkXSx1PWRqKG4sdCxjLm5vZGUsbyxhLHIpO2lmKGY9TWF0aC5taW4odSxmKSxmIT09TnVtYmVyLk1BWF9WQUxVRSlicmVha31pZihmIT09TnVtYmVyLk1BWF9WQUxVRSlyZXR1cm4gY3IuZ2V0UG9pbnQodCxmKX1mdW5jdGlvbiBkaihuLGUsdCxvLGEscil7bGV0IGk9TnVtYmVyLk1BWF9WQUxVRSxmPW4uX2VuY29kaW5nLGQ9bi5faW5kaWNlcyxjPW4uX3ZlcnRpY2VzLHU9dC5pbnRlcnNlY3RpbmdUcmlhbmdsZXMubGVuZ3RoLG09ISh0LmxldmVsPj10aikmJiF0LmJ1aWxkaW5nQ2hpbGRyZW4saCxiO20mJihoPW5ldyBGbG9hdDY0QXJyYXkodSo5KSxiPW5ldyBVaW50MzJBcnJheSh1KSk7Zm9yKGxldCBwPTA7cDx1O3ArKyl7bGV0IHk9dC5pbnRlcnNlY3RpbmdUcmlhbmdsZXNbcF0sVD1MXyhmLGEscixlLGMsZFszKnldLHNtWzBdKSxfPUxfKGYsYSxyLGUsYyxkWzMqeSsxXSxzbVsxXSksdz1MXyhmLGEscixlLGMsZFszKnkrMl0sc21bMl0pLEU9UW4ucmF5VHJpYW5nbGVQYXJhbWV0cmljKGUsVCxfLHcsbyk7ZyhFKSYmRTxpJiZFPj0wJiYoaT1FKSxtJiZjaihoLGIsc20seSxwKX1pZihtKXtmb3IobGV0IHA9MDtwPDQ7cCsrKXQuYWRkQ2hpbGQocCk7bGoobi5faW52ZXJzZVRyYW5zZm9ybSx0LGIsaCl9cmV0dXJuIGl9ZnVuY3Rpb24gTF8obixlLHQsbyxhLHIsaSl7bGV0IGY9bi5nZXRFeGFnZ2VyYXRlZFBvc2l0aW9uKGEscixpKTtpZihlPT09Y20uU0NFTkUzRClyZXR1cm4gZjtsZXQgYz10LmVsbGlwc29pZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhmLHVqKTtmPXQucHJvamVjdChjLGkpLGY9cy5mcm9tRWxlbWVudHMoZi56LGYueCxmLnksaSk7bGV0IHU9ay5UV09fUEkqdC5lbGxpcHNvaWQubWF4aW11bVJhZGl1cyxsPU1hdGgucm91bmQoKG8ub3JpZ2luLnktZi55KS91KTtyZXR1cm4gZi55Kz1sKnUsZn1hc3luYyBmdW5jdGlvbiBsaihuLGUsdCxvKXtlLmJ1aWxkaW5nQ2hpbGRyZW49ITA7bGV0IGE9bmV3IEZsb2F0NjRBcnJheSgxNik7US5wYWNrKG4sYSwwKTtsZXQgcj1uZXcgRmxvYXQ2NEFycmF5KDI0KTtmb3IobGV0IHU9MDt1PDQ7dSsrKXMucGFjayhlLmNoaWxkcmVuW3VdLmFhYmIubWluaW11bSxyLHUqNikscy5wYWNrKGUuY2hpbGRyZW5bdV0uYWFiYi5tYXhpbXVtLHIsdSo2KzMpO2xldCBpPXthYWJiczpyLGludmVyc2VUcmFuc2Zvcm06YSx0cmlhbmdsZUluZGljZXM6dCx0cmlhbmdsZVBvc2l0aW9uczpvfSxmPVtyLmJ1ZmZlcixhLmJ1ZmZlcix0LmJ1ZmZlcixvLmJ1ZmZlcl0sZD1uai5zY2hlZHVsZVRhc2soaSxmKTtpZighZyhkKSl7ZS5idWlsZGluZ0NoaWxkcmVuPSExO3JldHVybn0oYXdhaXQgZCkuaW50ZXJzZWN0aW5nVHJpYW5nbGVzQXJyYXlzLmZvckVhY2goKHUsbCk9PntnKGUuY2hpbGRyZW5bbF0pJiYoZS5jaGlsZHJlbltsXS5pbnRlcnNlY3RpbmdUcmlhbmdsZXM9bmV3IFVpbnQzMkFycmF5KHUpKX0pLGUuaW50ZXJzZWN0aW5nVHJpYW5nbGVzPW5ldyBVaW50MzJBcnJheSgwKSxlLmJ1aWxkaW5nQ2hpbGRyZW49ITF9dmFyIHRqLHpfLG5qLEdfLG9qLHNtLHJqLGlqLHNqLHVqLFN4LEN4PVgoKCk9Pnt5aSgpO01lKCk7ZmUoKTtiaSgpO3VuKCk7RmYoKTtSeCgpO2d0KCk7RF8oKTtnZigpO2plKCk7dGo9Myx6Xz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbyl7dGhpcy5fdmVydGljZXM9ZSx0aGlzLl9pbmRpY2VzPXQsdGhpcy5fZW5jb2Rpbmc9byx0aGlzLl9pbnZlcnNlVHJhbnNmb3JtPW5ldyBRLHRoaXMuX25lZWRzUmVidWlsZD0hMCx0aGlzLl9yb290Tm9kZT1uZXcgR199Z2V0IG5lZWRzUmVidWlsZCgpe3JldHVybiB0aGlzLl9uZWVkc1JlYnVpbGR9c2V0IG5lZWRzUmVidWlsZChlKXt0aGlzLl9uZWVkc1JlYnVpbGQ9ZX1yYXlJbnRlcnNlY3QoZSx0LG8sYSxyKXt0aGlzLl9uZWVkc1JlYnVpbGQmJmFqKHRoaXMsdCk7bGV0IGk9dGhpcy5faW52ZXJzZVRyYW5zZm9ybSxmPW9qO2Yub3JpZ2luPVEubXVsdGlwbHlCeVBvaW50KGksZS5vcmlnaW4sZi5vcmlnaW4pLGYuZGlyZWN0aW9uPVEubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IoaSxlLmRpcmVjdGlvbixmLmRpcmVjdGlvbik7bGV0IGQ9W107cmV0dXJuIE94KHRoaXMuX3Jvb3ROb2RlLGYsZCksZmoodGhpcyxkLGUsbyxhLHIpfX0sbmo9bmV3IEV4KCJpbmNyZW1lbnRhbGx5QnVpbGRUZXJyYWluUGlja2VyIiksR189Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMueD0wLHRoaXMueT0wLHRoaXMubGV2ZWw9MCx0aGlzLmFhYmI9eHgodGhpcy54LHRoaXMueSx0aGlzLmxldmVsKSx0aGlzLmludGVyc2VjdGluZ1RyaWFuZ2xlcz1uZXcgVWludDMyQXJyYXkoMCksdGhpcy5jaGlsZHJlbj1bXSx0aGlzLmJ1aWxkaW5nQ2hpbGRyZW49ITF9YWRkQ2hpbGQoZSl7bGV0IHQ9bmV3IG47dC54PXRoaXMueCoyKyhlJjEpLHQueT10aGlzLnkqMisoZT4+MSYxKSx0LmxldmVsPXRoaXMubGV2ZWwrMSx0LmFhYmI9eHgodC54LHQueSx0LmxldmVsKSx0aGlzLmNoaWxkcmVuW2VdPXR9fSxvaj1uZXcgY3Isc209W25ldyBzLG5ldyBzLG5ldyBzXTtyaj1uZXcgcyxpaj1uZXcgcztzaj1uZXcgX287dWo9bmV3IGFlO1N4PXpffSk7ZnVuY3Rpb24gRWQobixlLHQsbyxhLHIsaSxmLGQsYyx1LGwsbSxoLGIscCx5KXt0aGlzLmNlbnRlcj1uLHRoaXMudmVydGljZXM9ZSx0aGlzLnN0cmlkZT11Pz82LHRoaXMuaW5kaWNlcz10LHRoaXMuaW5kZXhDb3VudFdpdGhvdXRTa2lydHM9byx0aGlzLnZlcnRleENvdW50V2l0aG91dFNraXJ0cz1hLHRoaXMubWluaW11bUhlaWdodD1yLHRoaXMubWF4aW11bUhlaWdodD1pLHRoaXMucmVjdGFuZ2xlPWYsdGhpcy5ib3VuZGluZ1NwaGVyZTNEPWQsdGhpcy5vY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZT1jLHRoaXMub3JpZW50ZWRCb3VuZGluZ0JveD1sLHRoaXMuZW5jb2Rpbmc9bSx0aGlzLndlc3RJbmRpY2VzU291dGhUb05vcnRoPWgsdGhpcy5zb3V0aEluZGljZXNFYXN0VG9XZXN0PWIsdGhpcy5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aD1wLHRoaXMubm9ydGhJbmRpY2VzV2VzdFRvRWFzdD15LHRoaXMuX3RyYW5zZm9ybT1uZXcgUSx0aGlzLl9sYXN0UGlja1NjZW5lTW9kZT12b2lkIDAsdGhpcy5fdGVycmFpblBpY2tlcj1uZXcgU3goZSx0LG0pfWZ1bmN0aW9uIGhqKG4sZSl7bGV0IHQ9bi5lbmNvZGluZy5leGFnZ2VyYXRpb24sbz1uLmVuY29kaW5nLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0LGE9T2MuZ2V0SGVpZ2h0KG4ubWluaW11bUhlaWdodCx0LG8pLHI9T2MuZ2V0SGVpZ2h0KG4ubWF4aW11bUhlaWdodCx0LG8pLGk9bW4uZnJvbVJlY3RhbmdsZShuLnJlY3RhbmdsZSxhLHIsSy5kZWZhdWx0LG4ub3JpZW50ZWRCb3VuZGluZ0JveCk7cmV0dXJuIG1uLmNvbXB1dGVUcmFuc2Zvcm1hdGlvbihpLGUpLFEuZ2V0U2NhbGUoZSxWXykuejw9ay5FUFNJTE9OMTYmJihWXy56PTEsUS5zZXRTY2FsZShlLFZfLGUpKSxlfWZ1bmN0aW9uIEFqKG4sZSx0KXtsZXQgbz1uLmVuY29kaW5nLmV4YWdnZXJhdGlvbixhPW4uZW5jb2RpbmcuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQscj1PYy5nZXRIZWlnaHQobi5taW5pbXVtSGVpZ2h0LG8sYSksaT1PYy5nZXRIZWlnaHQobi5tYXhpbXVtSGVpZ2h0LG8sYSksZj1lLnByb2plY3QoYWUuZnJvbVJhZGlhbnMobi5yZWN0YW5nbGUud2VzdCxuLnJlY3RhbmdsZS5zb3V0aCwwLHBqKSxtaiksZD1lLnByb2plY3QoYWUuZnJvbVJhZGlhbnMobi5yZWN0YW5nbGUuZWFzdCxuLnJlY3RhbmdsZS5ub3J0aCwwLGdqKSxiaiksYz1pLXIsdT1zLmZyb21FbGVtZW50cyhkLngtZi54LGQueS1mLnksYz4wP2M6MSxfaiksbD1zLmZyb21FbGVtZW50cyhmLngrdS54Ki41LGYueSt1LnkqLjUscit1LnoqLjUseWopO3JldHVybiBRLmZyb21UcmFuc2xhdGlvbihsLHQpLFEuc2V0U2NhbGUodCx1LHQpLFEubXVsdGlwbHkob28uU1dJWlpMRV8zRF9UT18yRF9NQVRSSVgsdCx0KSx0fXZhciBtaixiaixwaixnaixfaix5aixWXyxIXyxNeD1YKCgpPT57RF8oKTtNZSgpO2d0KCk7ZmUoKTtWZSgpO2plKCk7dW4oKTtBaSgpO0N4KCk7cnIoKTtGXygpO0VkLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm09ZnVuY3Rpb24obixlKXtyZXR1cm4gdGhpcy5fbGFzdFBpY2tTY2VuZU1vZGU9PT1uP3RoaXMuX3RyYW5zZm9ybToodGhpcy5fdGVycmFpblBpY2tlci5uZWVkc1JlYnVpbGQ9ITAsIWcobil8fG49PT1jbS5TQ0VORTNEP2hqKHRoaXMsdGhpcy5fdHJhbnNmb3JtKTpBaih0aGlzLGUsdGhpcy5fdHJhbnNmb3JtKSl9O21qPW5ldyBzLGJqPW5ldyBzLHBqPW5ldyBhZSxnaj1uZXcgYWUsX2o9bmV3IHMseWo9bmV3IHMsVl89bmV3IHM7RWQucHJvdG90eXBlLnBpY2s9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9dGhpcy5fdGVycmFpblBpY2tlci5yYXlJbnRlcnNlY3Qobix0aGlzLmdldFRyYW5zZm9ybSh0LG8pLGUsdCxvKTtyZXR1cm4gdGhpcy5fbGFzdFBpY2tTY2VuZU1vZGU9dCxhfTtFZC5wcm90b3R5cGUudXBkYXRlRXhhZ2dlcmF0aW9uPWZ1bmN0aW9uKG4sZSl7dGhpcy5fdGVycmFpblBpY2tlci5fdmVydGljZXM9dGhpcy52ZXJ0aWNlcyx0aGlzLl90ZXJyYWluUGlja2VyLm5lZWRzUmVidWlsZD0hMCx0aGlzLl9sYXN0UGlja1NjZW5lTW9kZT12b2lkIDB9O0VkLnByb3RvdHlwZS51cGRhdGVTY2VuZU1vZGU9ZnVuY3Rpb24obil7dGhpcy5fdGVycmFpblBpY2tlci5uZWVkc1JlYnVpbGQ9ITAsdGhpcy5fbGFzdFBpY2tTY2VuZU1vZGU9dm9pZCAwfTtIXz1FZH0pO2Z1bmN0aW9uIEduKCl7VnQudGhyb3dJbnN0YW50aWF0aW9uRXJyb3IoKX1mdW5jdGlvbiBreChuLGUpe2xldCB0PW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShlKSxyPW5ldyBBcnJheShuKSxpO2ZvcihpPTA7aTxuOysraSlyW2ldPWksb1tpXT1uKmUtMS1pO2ZvcihpPTA7aTxlOysraSlhW2ldPShpKzEpKm4tMSx0W2ldPShlLWktMSkqbjtyZXR1cm57d2VzdEluZGljZXNTb3V0aFRvTm9ydGg6dCxzb3V0aEluZGljZXNFYXN0VG9XZXN0Om8sZWFzdEluZGljZXNOb3J0aFRvU291dGg6YSxub3J0aEluZGljZXNXZXN0VG9FYXN0OnJ9fWZ1bmN0aW9uIHZ4KG4sZSx0LG8pe2xldCBhPTA7Zm9yKGxldCByPTA7cjxlLTE7KytyKXtmb3IobGV0IGk9MDtpPG4tMTsrK2kpe2xldCBmPWEsZD1mK24sYz1kKzEsdT1mKzE7dFtvKytdPWYsdFtvKytdPWQsdFtvKytdPXUsdFtvKytdPXUsdFtvKytdPWQsdFtvKytdPWMsKythfSsrYX19ZnVuY3Rpb24gZm0obixlLHQsbyl7bGV0IGE9blswXSxyPW4ubGVuZ3RoO2ZvcihsZXQgaT0xO2k8cjsrK2kpe2xldCBmPW5baV07dFtvKytdPWEsdFtvKytdPWYsdFtvKytdPWUsdFtvKytdPWUsdFtvKytdPWYsdFtvKytdPWUrMSxhPWYsKytlfXJldHVybiBvfXZhciBOeCxJeCxQeCxCaSxLXz1YKCgpPT57ZmUoKTtKaSgpO1p0KCk7amUoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHbi5wcm90b3R5cGUse2Vycm9yRXZlbnQ6e2dldDpWdC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0sY3JlZGl0OntnZXQ6VnQudGhyb3dJbnN0YW50aWF0aW9uRXJyb3J9LHRpbGluZ1NjaGVtZTp7Z2V0OlZ0LnRocm93SW5zdGFudGlhdGlvbkVycm9yfSxoYXNXYXRlck1hc2s6e2dldDpWdC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0saGFzVmVydGV4Tm9ybWFsczp7Z2V0OlZ0LnRocm93SW5zdGFudGlhdGlvbkVycm9yfSxhdmFpbGFiaWxpdHk6e2dldDpWdC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn19KTtOeD1bXTtHbi5nZXRSZWd1bGFyR3JpZEluZGljZXM9ZnVuY3Rpb24obixlKXtsZXQgdD1OeFtuXTtnKHQpfHwoTnhbbl09dD1bXSk7bGV0IG89dFtlXTtyZXR1cm4gZyhvKXx8KG4qZTxrLlNJWFRZX0ZPVVJfS0lMT0JZVEVTP289dFtlXT1uZXcgVWludDE2QXJyYXkoKG4tMSkqKGUtMSkqNik6bz10W2VdPW5ldyBVaW50MzJBcnJheSgobi0xKSooZS0xKSo2KSx2eChuLGUsbywwKSksb307SXg9W107R24uZ2V0UmVndWxhckdyaWRJbmRpY2VzQW5kRWRnZUluZGljZXM9ZnVuY3Rpb24obixlKXtsZXQgdD1JeFtuXTtnKHQpfHwoSXhbbl09dD1bXSk7bGV0IG89dFtlXTtpZighZyhvKSl7bGV0IGE9R24uZ2V0UmVndWxhckdyaWRJbmRpY2VzKG4sZSkscj1reChuLGUpLGk9ci53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxmPXIuc291dGhJbmRpY2VzRWFzdFRvV2VzdCxkPXIuZWFzdEluZGljZXNOb3J0aFRvU291dGgsYz1yLm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q7bz10W2VdPXtpbmRpY2VzOmEsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6aSxzb3V0aEluZGljZXNFYXN0VG9XZXN0OmYsZWFzdEluZGljZXNOb3J0aFRvU291dGg6ZCxub3J0aEluZGljZXNXZXN0VG9FYXN0OmN9fXJldHVybiBvfTtQeD1bXTtHbi5nZXRSZWd1bGFyR3JpZEFuZFNraXJ0SW5kaWNlc0FuZEVkZ2VJbmRpY2VzPWZ1bmN0aW9uKG4sZSl7bGV0IHQ9UHhbbl07Zyh0KXx8KFB4W25dPXQ9W10pO2xldCBvPXRbZV07aWYoIWcobykpe2xldCBhPW4qZSxyPShuLTEpKihlLTEpKjYsaT1uKjIrZSoyLGY9TWF0aC5tYXgoMCxpLTQpKjYsZD1hK2ksYz1yK2YsdT1reChuLGUpLGw9dS53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxtPXUuc291dGhJbmRpY2VzRWFzdFRvV2VzdCxoPXUuZWFzdEluZGljZXNOb3J0aFRvU291dGgsYj11Lm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3QscD1JZS5jcmVhdGVUeXBlZEFycmF5KGQsYyk7dngobixlLHAsMCksR24uYWRkU2tpcnRJbmRpY2VzKGwsbSxoLGIsYSxwLHIpLG89dFtlXT17aW5kaWNlczpwLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOmwsc291dGhJbmRpY2VzRWFzdFRvV2VzdDptLGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOmgsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpiLGluZGV4Q291bnRXaXRob3V0U2tpcnRzOnJ9fXJldHVybiBvfTtHbi5nZXRTa2lydFZlcnRleENvdW50PWZ1bmN0aW9uKG4sZSx0LG8pe3JldHVybiBuLmxlbmd0aCtlLmxlbmd0aCt0Lmxlbmd0aCtvLmxlbmd0aH07R24uZ2V0U2tpcnRJbmRleENvdW50PWZ1bmN0aW9uKG4pe3JldHVybihuLTQpKjIqM307R24uZ2V0U2tpcnRJbmRleENvdW50V2l0aEZpbGxlZENvcm5lcnM9ZnVuY3Rpb24obil7cmV0dXJuKChuLTQpKjIrNCkqM307R24uYWRkU2tpcnRJbmRpY2VzPWZ1bmN0aW9uKG4sZSx0LG8sYSxyLGkpe2xldCBmPWE7aT1mbShuLGYscixpKSxmKz1uLmxlbmd0aCxpPWZtKGUsZixyLGkpLGYrPWUubGVuZ3RoLGk9Zm0odCxmLHIsaSksZis9dC5sZW5ndGgsZm0obyxmLHIsaSl9O0duLmFkZFNraXJ0SW5kaWNlc1dpdGhGaWxsZWRDb3JuZXJzPWZ1bmN0aW9uKG4sZSx0LG8sYSxyLGkpe0duLmFkZFNraXJ0SW5kaWNlcyhuLGUsdCxvLGEscixpKTtsZXQgZj1Hbi5nZXRTa2lydFZlcnRleENvdW50KG4sZSx0LG8pLGQ9R24uZ2V0U2tpcnRJbmRleENvdW50KGYpLGM9aStkLHU9blswXSxsPW9bMF0sbT10WzBdLGg9ZVswXSxiPWEscD1iK24ubGVuZ3RoLTEseT1wKzEsVD15K2UubGVuZ3RoLTEsXz1UKzEsdz1fK3QubGVuZ3RoLTEsRT13KzEsUj1FK28ubGVuZ3RoLTE7cltjKzBdPXUscltjKzFdPWIscltjKzJdPVQscltjKzNdPWgscltjKzRdPXkscltjKzVdPXcscltjKzZdPW0scltjKzddPV8scltjKzhdPVIscltjKzldPWwscltjKzEwXT1FLHJbYysxMV09cH07R24uaGVpZ2h0bWFwVGVycmFpblF1YWxpdHk9LjI1O0duLmdldEVzdGltYXRlZExldmVsWmVyb0dlb21ldHJpY0Vycm9yRm9yQUhlaWdodG1hcD1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIG4ubWF4aW11bVJhZGl1cyoyKk1hdGguUEkqR24uaGVpZ2h0bWFwVGVycmFpblF1YWxpdHkvKGUqdCl9O0duLnByb3RvdHlwZS5yZXF1ZXN0VGlsZUdlb21ldHJ5PVZ0LnRocm93SW5zdGFudGlhdGlvbkVycm9yO0duLnByb3RvdHlwZS5nZXRMZXZlbE1heGltdW1HZW9tZXRyaWNFcnJvcj1WdC50aHJvd0luc3RhbnRpYXRpb25FcnJvcjtHbi5wcm90b3R5cGUuZ2V0VGlsZURhdGFBdmFpbGFibGU9VnQudGhyb3dJbnN0YW50aWF0aW9uRXJyb3I7R24ucHJvdG90eXBlLmxvYWRUaWxlRGF0YUF2YWlsYWJpbGl0eT1WdC50aHJvd0luc3RhbnRpYXRpb25FcnJvcjtCaT1Hbn0pO2Z1bmN0aW9uIHVMKG4pe2xldCBlPW4ubWVzaGVzWzBdLnByaW1pdGl2ZXNbMF0sdD1uLmFjY2Vzc29yc1tlLmF0dHJpYnV0ZXMuUE9TSVRJT05dLG89bi5idWZmZXJWaWV3c1t0LmJ1ZmZlclZpZXddLGE9dC5jb3VudCxyPW8uZXh0ZW5zaW9ucz9vLmV4dGVuc2lvbnMuRVhUX21lc2hvcHRfY29tcHJlc3Npb246dm9pZCAwO2lmKHI9PT12b2lkIDApe2xldCBoPW4uYnVmZmVyc1tvLmJ1ZmZlcl0uZXh0cmFzLl9waXBlbGluZS5zb3VyY2U7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoaC5idWZmZXIsaC5ieXRlT2Zmc2V0KyhvLmJ5dGVPZmZzZXQ/PzApKyh0LmJ5dGVPZmZzZXQ/PzApLGEqMyl9bGV0IGk9bi5idWZmZXJzW3IuYnVmZmVyXS5leHRyYXMuX3BpcGVsaW5lLnNvdXJjZSxmPW5ldyBVaW50OEFycmF5KGkuYnVmZmVyLGkuYnl0ZU9mZnNldCsoci5ieXRlT2Zmc2V0Pz8wKSsodC5ieXRlT2Zmc2V0Pz8wKSxyLmJ5dGVMZW5ndGgpLGQ9ci5ieXRlU3RyaWRlLGM9ZD09PTQ/VWludDhBcnJheTpVaW50MTZBcnJheSx1PW5ldyBjKGEqNCk7enMuZGVjb2RlVmVydGV4QnVmZmVyKG5ldyBVaW50OEFycmF5KHUuYnVmZmVyKSxhLGQsZik7bGV0IGw9KDE8PHUuQllURVNfUEVSX0VMRU1FTlQqOCktMSxtPW5ldyBGbG9hdDMyQXJyYXkoYSozKTtmb3IobGV0IGg9MDtoPGE7aCsrKW1baCozKzBdPXVbaCo0KzBdL2wsbVtoKjMrMV09dVtoKjQrMV0vbCxtW2gqMysyXT11W2gqNCsyXS9sO3JldHVybiBtfWZ1bmN0aW9uIGxMKG4pe2xldCBlPW4ubWVzaGVzWzBdLnByaW1pdGl2ZXNbMF0sdD1uLmFjY2Vzc29yc1tlLmF0dHJpYnV0ZXMuTk9STUFMXSxvPW4uYnVmZmVyVmlld3NbdC5idWZmZXJWaWV3XSxhPXQuY291bnQscj1vLmV4dGVuc2lvbnM/by5leHRlbnNpb25zLkVYVF9tZXNob3B0X2NvbXByZXNzaW9uOnZvaWQgMDtpZihyPT09dm9pZCAwKXtsZXQgbD1uLmJ1ZmZlcnNbby5idWZmZXJdLmV4dHJhcy5fcGlwZWxpbmUuc291cmNlO3JldHVybiBuZXcgRmxvYXQzMkFycmF5KGwuYnVmZmVyLGwuYnl0ZU9mZnNldCsoby5ieXRlT2Zmc2V0Pz8wKSsodC5ieXRlT2Zmc2V0Pz8wKSxhKjMpfWxldCBpPW4uYnVmZmVyc1tyLmJ1ZmZlcl0uZXh0cmFzLl9waXBlbGluZS5zb3VyY2UsZj1uZXcgVWludDhBcnJheShpLmJ1ZmZlcixpLmJ5dGVPZmZzZXQrKHIuYnl0ZU9mZnNldD8/MCkrKHQuYnl0ZU9mZnNldD8/MCksci5ieXRlTGVuZ3RoKSxkPXIuYnl0ZVN0cmlkZSxjPW5ldyBJbnQ4QXJyYXkoYSpkKTt6cy5kZWNvZGVWZXJ0ZXhCdWZmZXIobmV3IFVpbnQ4QXJyYXkoYy5idWZmZXIpLGEsZCxmKTtsZXQgdT1uZXcgRmxvYXQzMkFycmF5KGEqMyk7Zm9yKGxldCBsPTA7bDxhO2wrKyl7bGV0IG09TWF0aC5tYXgoY1tsKjQrMF0vMTI3LC0xKSxoPU1hdGgubWF4KGNbbCo0KzFdLzEyNywtMSksYj0xLShNYXRoLmFicyhtKStNYXRoLmFicyhoKSk7aWYoYjwwKXtsZXQgeT1tLFQ9aDttPSgxLU1hdGguYWJzKFQpKSprLnNpZ25Ob3RaZXJvKHkpLGg9KDEtTWF0aC5hYnMoeSkpKmsuc2lnbk5vdFplcm8oVCl9bGV0IHA9UmQ7cC54PW0scC55PWgscC56PWIscD1zLm5vcm1hbGl6ZShwLFJkKSx1W2wqMyswXT1wLngsdVtsKjMrMV09cC55LHVbbCozKzJdPXAuen1yZXR1cm4gdX1mdW5jdGlvbiBoTChuKXtsZXQgZT1uLm1lc2hlc1swXS5wcmltaXRpdmVzWzBdLHQ9bi5hY2Nlc3NvcnNbZS5pbmRpY2VzXSxvPW4uYnVmZmVyVmlld3NbdC5idWZmZXJWaWV3XSxhPXQuY291bnQscj10LmNvbXBvbmVudFR5cGU9PT1uZS5VTlNJR05FRF9TSE9SVD9VaW50MTZBcnJheTpVaW50MzJBcnJheSxpPW8uZXh0ZW5zaW9ucz9vLmV4dGVuc2lvbnMuRVhUX21lc2hvcHRfY29tcHJlc3Npb246dm9pZCAwO2lmKGk9PT12b2lkIDApe2xldCB1PW4uYnVmZmVyc1tvLmJ1ZmZlcl0uZXh0cmFzLl9waXBlbGluZS5zb3VyY2U7cmV0dXJuIG5ldyByKHUuYnVmZmVyLHUuYnl0ZU9mZnNldCsoby5ieXRlT2Zmc2V0Pz8wKSsodC5ieXRlT2Zmc2V0Pz8wKSxhKX1sZXQgZj1uLmJ1ZmZlcnNbaS5idWZmZXJdLmV4dHJhcy5fcGlwZWxpbmUuc291cmNlLGQ9bmV3IFVpbnQ4QXJyYXkoZi5idWZmZXIsZi5ieXRlT2Zmc2V0KyhpLmJ5dGVPZmZzZXQ/PzApKyh0LmJ5dGVPZmZzZXQ/PzApLGkuYnl0ZUxlbmd0aCksYz1uZXcgcihhKTtyZXR1cm4genMuZGVjb2RlSW5kZXhCdWZmZXIobmV3IFVpbnQ4QXJyYXkoYy5idWZmZXIpLGEsaS5ieXRlU3RyaWRlLGQpLGN9ZnVuY3Rpb24gdW0obixlKXtsZXQgdD1uLm1lc2hlc1swXS5wcmltaXRpdmVzWzBdLG89bi5hY2Nlc3NvcnNbdC5leHRlbnNpb25zLkNFU0lVTV90aWxlX2VkZ2VzW2VdXSxhPW4uYnVmZmVyVmlld3Nbby5idWZmZXJWaWV3XSxyPW8uY291bnQsaT1vLmNvbXBvbmVudFR5cGU9PT1uZS5VTlNJR05FRF9TSE9SVD9VaW50MTZBcnJheTpVaW50MzJBcnJheSxmPWEuZXh0ZW5zaW9ucz9hLmV4dGVuc2lvbnMuRVhUX21lc2hvcHRfY29tcHJlc3Npb246dm9pZCAwO2lmKGY9PT12b2lkIDApe2xldCBtPW4uYnVmZmVyc1thLmJ1ZmZlcl0uZXh0cmFzLl9waXBlbGluZS5zb3VyY2U7cmV0dXJuIG5ldyBpKG0uYnVmZmVyLG0uYnl0ZU9mZnNldCsoYS5ieXRlT2Zmc2V0Pz8wKSsoby5ieXRlT2Zmc2V0Pz8wKSxyKX1sZXQgZD1uLmJ1ZmZlcnNbZi5idWZmZXJdLmV4dHJhcy5fcGlwZWxpbmUuc291cmNlLGM9bmV3IFVpbnQ4QXJyYXkoZC5idWZmZXIsZC5ieXRlT2Zmc2V0KyhmLmJ5dGVPZmZzZXQ/PzApKyhvLmJ5dGVPZmZzZXQ/PzApLGYuYnl0ZUxlbmd0aCksdT1uZXcgaShyKSxsPWYuYnl0ZVN0cmlkZTtyZXR1cm4genMuZGVjb2RlSW5kZXhTZXF1ZW5jZShuZXcgVWludDhBcnJheSh1LmJ1ZmZlcikscixsLGMpLHV9ZnVuY3Rpb24gbUwobixlLHQpe3JldHVybiB0LnBvc2l0aW9ucz11TChuKSx0Lm5vcm1hbHM9ZT9sTChuKTp2b2lkIDAsdC5pbmRpY2VzPWhMKG4pLHQuZWRnZUluZGljZXNXZXN0PXVtKG4sImxlZnQiKSx0LmVkZ2VJbmRpY2VzU291dGg9dW0obiwiYm90dG9tIiksdC5lZGdlSW5kaWNlc0Vhc3Q9dW0obiwicmlnaHQiKSx0LmVkZ2VJbmRpY2VzTm9ydGg9dW0obiwidG9wIiksdH1mdW5jdGlvbiB6eChuLGUsdCxvLGEscixpLGYpe2xldHtlbmNvZGluZzpkfT1uLGM9ZC5zdHJpZGUsdT1uLnZlcnRpY2VzLHtoYXNWZXJ0ZXhOb3JtYWxzOmwsaGFzV2ViTWVyY2F0b3JUOm0sZXhhZ2dlcmF0aW9uOmgsZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ6Yn09ZCx5PWghPT0xLFQ9bi52ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsXz1UKmMsdz11Lmxlbmd0aC9jLEU9dy1ULFI9bi5pbmRpY2VzLFM9bi5pbmRleENvdW50V2l0aG91dFNraXJ0cyxDPW4ud2VzdEluZGljZXNTb3V0aFRvTm9ydGgsST1uLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QsTT1uLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLFA9bi5ub3J0aEluZGljZXNXZXN0VG9FYXN0O0JpLmFkZFNraXJ0SW5kaWNlc1dpdGhGaWxsZWRDb3JuZXJzKEMsSSxNLFAsVCxSLFMpO2xldCBGPTAsQT1GK0MubGVuZ3RoLHg9QStJLmxlbmd0aCxOPXgrTS5sZW5ndGgsdj1bQyxJLE0sUF0sVT1bRixBLHgsTl0sTD1bLTEsMCwxLDBdLEQ9WzAsLTEsMCwxXSxHPXMuY2xvbmUobyxRaiksVj1zLmNsb25lKGEsJGopLE89bi5tYXhpbXVtSGVpZ2h0LEo9bi5taW5pbXVtSGVpZ2h0LWY7Zm9yKGxldCBvZT0wO29lPEU7b2UrKyl7bGV0IGNlO2ZvcihjZT0wO2NlPDMmJiEob2U8VVtjZSsxXSk7Y2UrKyk7bGV0IG1lPXZbY2VdW29lLVVbY2VdXSxkZT1kLmRlY29kZVRleHR1cmVDb29yZGluYXRlcyh1LG1lLER4KSx5ZT0xZS00LGxlPWRlLngrTFtjZV0qeWUsZWU9ZGUueStEW2NlXSp5ZSxFZT1rLmxlcnAoZS53ZXN0LGUuZWFzdCxsZSksQ2U9ay5jbGFtcChrLmxlcnAoZS5zb3V0aCxlLm5vcnRoLGVlKSwtay5QSV9PVkVSX1RXTywray5QSV9PVkVSX1RXTyksemU9ZC5kZWNvZGVIZWlnaHQodSxtZSktZixaZT1hZS5mcm9tUmFkaWFucyhFZSxDZSx6ZSxXaiksS2U9YWUudG9DYXJ0ZXNpYW4oWmUsdCxGeCksRGU7bCYmKERlPWQuZ2V0T2N0RW5jb2RlZE5vcm1hbCh1LG1lLFV4KSk7bGV0IEJlO20mJihCZT1kLmRlY29kZVdlYk1lcmNhdG9yVCh1LG1lKSk7bGV0IGV0O3kmJihldD10Lmdlb2RldGljU3VyZmFjZU5vcm1hbChLZSxqeCkpLF89ZC5lbmNvZGUodSxfLEtlLGRlLHplLERlLEJlLGV0KTtsZXQgcWU9US5tdWx0aXBseUJ5UG9pbnQoaSxLZSxKaik7cy5taW5pbXVtQnlDb21wb25lbnQocWUsRyxHKSxzLm1heGltdW1CeUNvbXBvbmVudChxZSxWLFYpfWxldCByZT1yby5mcm9tQ29ybmVycyhHLFYsc0wpLHNlPW5ldyBuYShkLmNlbnRlcixyZSxKLE8scixkLmhhc1ZlcnRleE5vcm1hbHMsZC5oYXNXZWJNZXJjYXRvclQseSxoLGIpO2lmKGQucXVhbnRpemF0aW9uIT09c2UucXVhbnRpemF0aW9uKXtsZXQgb2U9c2UsY2U9b2Uuc3RyaWRlLG1lPW5ldyBGbG9hdDMyQXJyYXkodypjZSksZGU9MDtmb3IobGV0IHllPTA7eWU8dzt5ZSsrKWRlPW9lLmVuY29kZShtZSxkZSxkLmRlY29kZVBvc2l0aW9uKHUseWUsRngpLGQuZGVjb2RlVGV4dHVyZUNvb3JkaW5hdGVzKHUseWUsRHgpLGQuZGVjb2RlSGVpZ2h0KHUseWUpLGQuaGFzVmVydGV4Tm9ybWFscz9kLmdldE9jdEVuY29kZWROb3JtYWwodSx5ZSxVeCk6dm9pZCAwLGQuaGFzV2ViTWVyY2F0b3JUP2QuZGVjb2RlV2ViTWVyY2F0b3JUKHUseWUpOnZvaWQgMCxkLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHM/ZC5kZWNvZGVHZW9kZXRpY1N1cmZhY2VOb3JtYWwodSx5ZSxqeCk6dm9pZCAwKTtuLnZlcnRpY2VzPW1lLG4uc3RyaWRlPWNlLG4uZW5jb2Rpbmc9b2V9cmV0dXJuIG59ZnVuY3Rpb24gTHgobixlLHQsbyl7c3dpdGNoKHQpe2Nhc2UgV186cmV0dXJuIGsuc2lnbihvLngtbi54KTtjYXNlIFhfOnJldHVybiBrLnNpZ24oZS54LW8ueCk7Y2FzZSBZXzpyZXR1cm4gay5zaWduKG8ueS1uLnkpO2RlZmF1bHQ6cmV0dXJuIGsuc2lnbihlLnktby55KX19ZnVuY3Rpb24gVEwobixlLHQsbyxhLHIpe2xldCBpLGYsZDtzd2l0Y2godCl7Y2FzZSBXXzppPShuLngtby54KS8oYS54LW8ueCksZj1uLngsZD1vLnkrKGEueS1vLnkpKmk7YnJlYWs7Y2FzZSBYXzppPShlLngtby54KS8oYS54LW8ueCksZj1lLngsZD1vLnkrKGEueS1vLnkpKmk7YnJlYWs7Y2FzZSBZXzppPShuLnktby55KS8oYS55LW8ueSksZj1vLngrKGEueC1vLngpKmksZD1uLnk7YnJlYWs7ZGVmYXVsdDppPShlLnktby55KS8oYS55LW8ueSksZj1vLngrKGEueC1vLngpKmksZD1lLnk7YnJlYWt9cmV0dXJuIHMuZnJvbUVsZW1lbnRzKGYsZCxpLHIpfWZ1bmN0aW9uIFJMKG4sZSx0LG8sYSxyLGksZil7bGV0IGQsYz15TCx1PV9MLGw9MyxtPXdMO1kuY2xvbmUoYSxtWzBdKSxZLmNsb25lKHIsbVsxXSksWS5jbG9uZShpLG1bMl0pO2xldCBoPUFMO3MuZnJvbUVsZW1lbnRzKDEsMCwwLGhbMF0pLHMuZnJvbUVsZW1lbnRzKDAsMSwwLGhbMV0pLHMuZnJvbUVsZW1lbnRzKDAsMCwxLGhbMl0pO2ZvcihsZXQgYj0wO2I8ZTtiKyspe2xldCBwPShuK2IpJXBMLHk9YyxUPXU7Yz1tLHU9aCxkPWwsbT15LGg9VCxsPTA7bGV0IF89ZC0xLHc9Y1tfXSxFPXVbX10sUj1MeCh0LG8scCx3KTtmb3IobGV0IFM9MDtTPGQ7UysrKXtsZXQgQz1jW1NdLEk9dVtTXSxNPUx4KHQsbyxwLEMpO2lmKFIqTT09PS0xKXtsZXQgUD1UTCh0LG8scCx3LEMsZ0wpLHt4OkYseTpBLHo6eH09UCxOPTEteCx2PUUueCpOK0kueCp4LFU9RS55Kk4rSS55KngsTD1FLnoqTitJLnoqeDtZLmZyb21FbGVtZW50cyhGLEEsbVtsXSkscy5mcm9tRWxlbWVudHModixVLEwsaFtsXSksbCsrfU0+PTAmJihZLmNsb25lKEMsbVtsXSkscy5jbG9uZShJLGhbbF0pLGwrKyksdz1DLEU9SSxSPU19aWYobD09PTApYnJlYWt9Zi5sZW5ndGg9bDtmb3IobGV0IGI9MDtiPGw7YisrKVkuY2xvbmUobVtiXSxmLmNvb3JkaW5hdGVzW2JdKSxzLmNsb25lKGhbYl0sZi5iYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzW2JdKTtyZXR1cm4gZn1mdW5jdGlvbiB4TChuLGUsdCxvLGEscixpLGYpe3JldHVybiBSTChuP2U/WV86V186ZT9YXzpiTCwyLHQsbyxhLHIsaSxmKX1mdW5jdGlvbiBTTChuLGUsdCxvLGEscixpLGYsZCxjLHUsbCxtLGgsYil7bGV0IHA9e30seT1uPy41OjAsVD1uPzE6LjUsXz1lPy41OjAsdz1lPzE6LjUsRT1EajtFLng9eSxFLnk9XztsZXQgUj1CajtSLng9VCxSLnk9dztsZXQgUz0wO2ZvcihsZXQgQz0wO0M8dDtDKz0zKXtsZXQgST1vW0MrMF0sTT1vW0MrMV0sUD1vW0MrMl0sRj1pLmRlY29kZVRleHR1cmVDb29yZGluYXRlcyhyLEksamopLEE9aS5kZWNvZGVUZXh0dXJlQ29vcmRpbmF0ZXMocixNLExqKSx4PWkuZGVjb2RlVGV4dHVyZUNvb3JkaW5hdGVzKHIsUCx6aiksTj14TChuLGUsRSxSLEYsQSx4LEVMKSx2PU4ubGVuZ3RoO2lmKHY8Myljb250aW51ZTtsZXQgVT1Vajtmb3IobGV0IFY9MDtWPHY7VisrKXtsZXQgTz1OLmJhcnljZW50cmljQ29vcmRpbmF0ZXNbVl0sSj1PLngscmU9Ty55LHNlPU8ueixvZT1NYXRoLmNlaWwoSil8TWF0aC5jZWlsKHJlKTw8MXxNYXRoLmNlaWwoc2UpPDwyLGNlPU9MW29lXSxtZSxkZT0hMTtpZihjZS5sZW5ndGg9PT0xKXtsZXQgeWU9Y2VbMF0sZWU9b1tDK3llXTttZT1wW2VlXSxtZT09PXZvaWQgMCYmKGRlPSEwLG1lPVMrKyxwW2VlXT1tZSl9ZWxzZSBpZihjZS5sZW5ndGg9PT0yKXtsZXQgeWU9Y2VbMF0sbGU9Y2VbMV0sZWU9b1tDK3llXSxFZT1vW0MrbGVdLENlPU4uYmFyeWNlbnRyaWNDb29yZGluYXRlc1soVit2LTEpJXZdLFdlPU1hdGguY2VpbChDZS54KXxNYXRoLmNlaWwoQ2UueSk8PDF8TWF0aC5jZWlsKENlLnopPDwyLHplPW9lPT09V2UsWmU9TWF0aC5taW4oZWUsRWUpLEtlPU1hdGgubWF4KGVlLEVlKSxEZT1hKzIqKFplKmErS2UpLEJlPURlKzAsZXQ9RGUrMSxxZT1wW0JlXSxhdD1wW2V0XSx4dD0hemU9PShxZT09PXZvaWQgMHx8YXQ9PT12b2lkIDApO2lmKG1lPXh0P3FlOmF0LG1lPT09dm9pZCAwKXtkZT0hMCxtZT1TKys7bGV0IFR0PXh0P0JlOmV0O3BbVHRdPW1lfX1lbHNlIGRlPSEwLG1lPVMrKztpZihVW1ZdPW1lLGRlKXtsZXQgeWU9Qy8zO20ucHVzaCh5ZSk7bGV0IGxlPU4uY29vcmRpbmF0ZXNbVl0sZWU9KGxlLngteSkvKFQteSksRWU9KGxlLnktXykvKHctXyk7Yi5wdXNoKGVlLEVlKSxoLnB1c2goSixyZSksZWU9PT0wP2QucHVzaChtZSk6ZWU9PT0xJiZ1LnB1c2gobWUpLEVlPT09MD9jLnB1c2gobWUpOkVlPT09MSYmbC5wdXNoKG1lKX19bGV0IEw9VVswXSxEPVVbMV0sRz1VWzJdO2YucHVzaChMLEQsRyk7Zm9yKGxldCBWPTM7Vjx2O1YrKylEPUcsRz1VW1ZdLGYucHVzaChMLEQsRyl9ZC5zb3J0KGZ1bmN0aW9uKEMsSSl7cmV0dXJuIGJbQyoyKzFdLWJbSSoyKzFdfSksYy5zb3J0KGZ1bmN0aW9uKEMsSSl7cmV0dXJuIGJbSSoyKzBdLWJbQyoyKzBdfSksdS5zb3J0KGZ1bmN0aW9uKEMsSSl7cmV0dXJuIGJbSSoyKzFdLWJbQyoyKzFdfSksbC5zb3J0KGZ1bmN0aW9uKEMsSSl7cmV0dXJuIGJbQyoyKzBdLWJbSSoyKzBdfSl9dmFyIHFfLHdqLFRqLEVqLFJqLHhqLE9qLFNqLENqLE1qLE5qLElqLFBqLFJkLGtqLHZqLEZqLGRtLERqLEJqLFVqLGpqLExqLHpqLEdqLFZqLEhqLEtqLHFqLFdqLFhqLEZ4LFlqLEpqLFpqLFFqLCRqLGVMLHRMLG5MLG9MLER4LGFMLHJMLGlMLGNMLHNMLEJ4LFV4LGZMLGp4LGRMLFdfLGJMLFhfLFlfLHBMLGdMLF9MLHlMLEFMLHdMLEVMLE9MLGxtLEpfPVgoKCk9PntyeCgpO0JyKCk7Y3goKTt5aSgpO3NsKCk7RXQoKTt2dCgpO01lKCk7Z3QoKTtqZSgpO0N0KCk7VmUoKTtHcygpO3N0KCk7dW4oKTtBaSgpO2huKCk7VnMoKTtNeCgpO0tfKCk7cnIoKTtfaSgpO3FfPXt9LHdqPXtwb3NpdGlvbnM6dm9pZCAwLG5vcm1hbHM6dm9pZCAwLGluZGljZXM6dm9pZCAwLGVkZ2VJbmRpY2VzV2VzdDp2b2lkIDAsZWRnZUluZGljZXNTb3V0aDp2b2lkIDAsZWRnZUluZGljZXNFYXN0OnZvaWQgMCxlZGdlSW5kaWNlc05vcnRoOnZvaWQgMH0sVGo9bmV3IGFlLEVqPW5ldyBzLFJqPW5ldyBRLHhqPW5ldyBRLE9qPW5ldyBRLFNqPW5ldyBzLENqPW5ldyBzLE1qPW5ldyBzLE5qPW5ldyBzLElqPW5ldyBhZSxQaj1uZXcgWSxSZD1uZXcgcyxraj1uZXcgWSx2aj1uZXcgcyxGaj1uZXcgcyxkbT1mdW5jdGlvbihuLGUpe3JldHVybiBuLWV9O3FfLmNyZWF0ZU1lc2g9YXN5bmMgZnVuY3Rpb24obil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0e2V4YWdnZXJhdGlvbjplPTEsZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ6dD0wLGhhc1ZlcnRleE5vcm1hbHM6byxoYXNXZWJNZXJjYXRvclQ6YSxnbHRmOnIsbWluaW11bUhlaWdodDppLG1heGltdW1IZWlnaHQ6Zixza2lydEhlaWdodDpkfT1uLHU9ZSE9PTEsbD1wZS5jbG9uZShuLmJvdW5kaW5nU3BoZXJlLG5ldyBwZSksbT1tbi5jbG9uZShuLm9yaWVudGVkQm91bmRpbmdCb3gsbmV3IG1uKSxoPXMuY2xvbmUobi5ob3Jpem9uT2NjbHVzaW9uUG9pbnQsbmV3IHMpLGI9Sy5jbG9uZShuLmVsbGlwc29pZCxuZXcgSykscD14ZS5jbG9uZShuLnJlY3RhbmdsZSxuZXcgeGUpO2F3YWl0KHIuZXh0ZW5zaW9uc1JlcXVpcmVkIT09dm9pZCAwJiZyLmV4dGVuc2lvbnNSZXF1aXJlZC5pbmRleE9mKCJFWFRfbWVzaG9wdF9jb21wcmVzc2lvbiIpIT09LTE/enMucmVhZHk6UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCkpO2xldCBfPXAud2VzdCx3PXAuc291dGgsRT1wLm5vcnRoLFI9cC53aWR0aCxTPXAuaGVpZ2h0LEM9eGUuY2VudGVyKHAsVGopO0MuaGVpZ2h0PS41KihpK2YpO2xldCBJPWFlLnRvQ2FydGVzaWFuKEMsYixFaiksTT1vby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShJLGIsUmopLFA9US5pbnZlcnNlVHJhbnNmb3JtYXRpb24oTSx4aiksRj1RLnVucGFjayhyLm5vZGVzWzBdLm1hdHJpeCwwLE9qKTtGPVEubXVsdGlwbHkoaXguWV9VUF9UT19aX1VQLEYsRik7bGV0IEE9bUwocixvLHdqKSx4PUJpLmdldFNraXJ0VmVydGV4Q291bnQoQS5lZGdlSW5kaWNlc1dlc3QsQS5lZGdlSW5kaWNlc1NvdXRoLEEuZWRnZUluZGljZXNFYXN0LEEuZWRnZUluZGljZXNOb3J0aCksTj1BLnBvc2l0aW9ucyx2PUEubm9ybWFscyxVPUEuaW5kaWNlcyxMPU4ubGVuZ3RoLzMsRD1MK3gsRz1VLmxlbmd0aCxWPUJpLmdldFNraXJ0SW5kZXhDb3VudFdpdGhGaWxsZWRDb3JuZXJzKHgpLE89RDw9NjU1MzU/VWludDE2QXJyYXk6VWludDMyQXJyYXksSj1uZXcgTyhHK1YpO0ouc2V0KFUpO2xldCByZT1uZXcgTyhBLmVkZ2VJbmRpY2VzV2VzdCksc2U9bmV3IE8oQS5lZGdlSW5kaWNlc1NvdXRoKSxvZT1uZXcgTyhBLmVkZ2VJbmRpY2VzRWFzdCksY2U9bmV3IE8oQS5lZGdlSW5kaWNlc05vcnRoKSxtZT1uZXcgTyhyZSkuc29ydCgpLGRlPW5ldyBPKHNlKS5zb3J0KCkseWU9bmV3IE8ob2UpLnNvcnQoKSxsZT1uZXcgTyhjZSkuc29ydCgpLGVlPXluLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUodyksQ2U9MS8oeW4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShFKS1lZSksV2U9cy5mcm9tRWxlbWVudHMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksU2opLHplPXMuZnJvbUVsZW1lbnRzKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLENqKSxaZT1uZXcgbmEobC5jZW50ZXIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLG8sYSx1LGUsdCksS2U9WmUuc3RyaWRlLERlPW5ldyBGbG9hdDMyQXJyYXkoRCpLZSksQmU9MDtmb3IobGV0IHFlPTA7cWU8TDtxZSsrKXtsZXQgYXQ9cy51bnBhY2soTixxZSozLE1qKSx4dD1RLm11bHRpcGx5QnlQb2ludChGLGF0LE5qKSxUdD1hZS5mcm9tQ2FydGVzaWFuKHh0LGIsSWopLHtsb25naXR1ZGU6Y3QsbGF0aXR1ZGU6enQsaGVpZ2h0Ok90fT1UdCxrdD0oY3QtXykvUixHZT0oenQtdykvUztrdD1rLmNsYW1wKGt0LDAsMSksR2U9ay5jbGFtcChHZSwwLDEpLGdhKG1lLHFlLGRtKT49MD9rdD0wOmdhKHllLHFlLGRtKT49MCYmKGt0PTEpLGdhKGRlLHFlLGRtKT49MD9HZT0wOmdhKGxlLHFlLGRtKT49MCYmKEdlPTEpO2xldCBMZT1ZLmZyb21FbGVtZW50cyhrdCxHZSxQaiksX3Q7aWYobyl7bGV0IFF0PXMudW5wYWNrKHYscWUqMyxSZCk7UXQ9US5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihGLFF0LFJkKSxRdD1zLm5vcm1hbGl6ZShRdCxSZCksX3Q9anQub2N0RW5jb2RlKFF0LGtqKX1sZXQgTXQ7YSYmKE10PSh5bi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKHp0KS1lZSkqQ2UpO2xldCBHdDt1JiYoR3Q9Yi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoeHQsdmopKSxCZT1aZS5lbmNvZGUoRGUsQmUseHQsTGUsT3QsX3QsTXQsR3QpO2xldCBxdD1RLm11bHRpcGx5QnlQb2ludChQLHh0LEZqKTtXZT1zLm1pbmltdW1CeUNvbXBvbmVudChxdCxXZSxXZSksemU9cy5tYXhpbXVtQnlDb21wb25lbnQocXQsemUsemUpfWxldCBldD1uZXcgSF8ocy5jbG9uZShaZS5jZW50ZXIsbmV3IHMpLERlLEosRyxMLGksZixwLHBlLmNsb25lKGwsbmV3IHBlKSxzLmNsb25lKGgsbmV3IHMpLEtlLG1uLmNsb25lKG0sbmV3IG1uKSxaZSxyZSxzZSxvZSxjZSk7cmV0dXJuIHp4KGV0LHAsYixXZSx6ZSxNLFAsZCksUHJvbWlzZS5yZXNvbHZlKGV0KX07RGo9bmV3IFksQmo9bmV3IFksVWo9bmV3IEFycmF5KDYpLGpqPW5ldyBZLExqPW5ldyBZLHpqPW5ldyBZLEdqPW5ldyBzLFZqPW5ldyBzLEhqPW5ldyBzLEtqPW5ldyBhZSxxaj1uZXcgcyxXaj1uZXcgYWUsWGo9bmV3IGFlLEZ4PW5ldyBzLFlqPW5ldyBzLEpqPW5ldyBzLFpqPW5ldyBzLFFqPW5ldyBzLCRqPW5ldyBzLGVMPW5ldyBzLHRMPW5ldyBzLG5MPW5ldyBRLG9MPW5ldyBRLER4PW5ldyBZLGFMPW5ldyBZLHJMPW5ldyBzLGlMPW5ldyBwZSxjTD1uZXcgbW4sc0w9bmV3IHJvLEJ4PW5ldyBzLFV4PW5ldyBZLGZMPW5ldyBZLGp4PW5ldyBzLGRMPW5ldyBzO3FfLnVwc2FtcGxlTWVzaD1mdW5jdGlvbihuKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXR7aXNFYXN0Q2hpbGQ6ZSxpc05vcnRoQ2hpbGQ6dCxwYXJlbnRNaW5pbXVtSGVpZ2h0Om8scGFyZW50TWF4aW11bUhlaWdodDphLHNraXJ0SGVpZ2h0OnJ9PW4saT1uLnBhcmVudEluZGV4Q291bnRXaXRob3V0U2tpcnRzLGY9bi5wYXJlbnRJbmRpY2VzLGQ9bi5wYXJlbnRWZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsYz1uLnBhcmVudFZlcnRpY2VzLHU9bmEuY2xvbmUobi5wYXJlbnRFbmNvZGluZyxuZXcgbmEpLGw9dS5oYXNWZXJ0ZXhOb3JtYWxzLG09dS5oYXNXZWJNZXJjYXRvclQsaD11LmV4YWdnZXJhdGlvbixiPXUuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQseT1oIT09MSxUPXhlLmNsb25lKG4ucmVjdGFuZ2xlLG5ldyB4ZSksXz1LLmNsb25lKG4uZWxsaXBzb2lkKSx3PVtdLEU9W10sUj1bXSxTPVtdLEM9W10sST1bXSxNPVtdLFA9W107U0woZSx0LGksZixkLGMsdSxTLEMsSSxNLFAsdyxSLEUpO2xldCBGPXhlLmNlbnRlcihULEtqKTtGLmhlaWdodD0uNSoobythKTtsZXQgQT1hZS50b0NhcnRlc2lhbihGLF8scWopLHg9dy5sZW5ndGgsTj1uZXcgbmEoQSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsbCxtLHksaCxiKSx2PU4uc3RyaWRlLFU9QmkuZ2V0U2tpcnRWZXJ0ZXhDb3VudChDLEksTSxQKSxMPXgrVSxEPVMubGVuZ3RoLEc9QmkuZ2V0U2tpcnRJbmRleENvdW50V2l0aEZpbGxlZENvcm5lcnMoVSksVj1EK0csTz1MPD02NTUzNT9VaW50MTZBcnJheTpVaW50MzJBcnJheSxKPW5ldyBPKFYpO0ouc2V0KFMpO2xldCByZT1uZXcgTyhDKSxzZT1uZXcgTyhJKSxvZT1uZXcgTyhNKSxjZT1uZXcgTyhQKSxtZT1uZXcgRmxvYXQzMkFycmF5KEwqdiksZGU9MCx5ZT1vby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShBLF8sbkwpLGxlPVEuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKHllLG9MKSxlZT1ULndlc3QsRWU9VC5lYXN0LENlPVQuc291dGgsV2U9VC5ub3J0aCx6ZT15bi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKENlKSxLZT0xLyh5bi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKFdlKS16ZSksRGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEJlPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxldD1zLmZyb21FbGVtZW50cyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxlTCkscWU9cy5mcm9tRWxlbWVudHMoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksdEwpO2ZvcihsZXQgT3Q9MDtPdDx4O090Kyspe2xldCBrdD13W090XSxHZT1mW2t0KjMrMF0sTGU9ZltrdCozKzFdLF90PWZba3QqMysyXSxNdD1hTDtNdC54PUVbT3QqMiswXSxNdC55PUVbT3QqMisxXTtsZXQgR3Q9TXQueCxxdD1NdC55LFF0PVJbT3QqMiswXSxwbj1SW090KjIrMV0sTnQ9MS1RdC1wbiwkdD11LmRlY29kZUhlaWdodChjLEdlKSxGdD11LmRlY29kZUhlaWdodChjLExlKSxvbj11LmRlY29kZUhlaWdodChjLF90KSxVbj0kdCpRdCtGdCpwbitvbipOdDtEZT1NYXRoLm1pbihVbixEZSksQmU9TWF0aC5tYXgoVW4sQmUpO2xldCBqbj1rLmxlcnAoZWUsRWUsR3QpLFNuPWsubGVycChDZSxXZSxxdCksdG89YWUuZnJvbVJhZGlhbnMoam4sU24sVW4sWGopLFN0PWFlLnRvQ2FydGVzaWFuKHRvLF8sWWopLHl0PVEubXVsdGlwbHlCeVBvaW50KGxlLFN0LFpqKTtldD1zLm1pbmltdW1CeUNvbXBvbmVudCh5dCxldCxldCkscWU9cy5tYXhpbXVtQnlDb21wb25lbnQoeXQscWUscWUpO2xldCB3bjtpZihsKXtsZXQgRHQ9dS5kZWNvZGVOb3JtYWwoYyxHZSxHaiksYW49dS5kZWNvZGVOb3JtYWwoYyxMZSxWaiksRW89dS5kZWNvZGVOb3JtYWwoYyxfdCxIaiksTW49cy5mcm9tRWxlbWVudHMoRHQueCpRdCthbi54KnBuK0VvLngqTnQsRHQueSpRdCthbi55KnBuK0VvLnkqTnQsRHQueipRdCthbi56KnBuK0VvLnoqTnQsQngpO01uPXMubm9ybWFsaXplKE1uLEJ4KSx3bj1qdC5vY3RFbmNvZGUoTW4sZkwpfWxldCBDbjttJiYoQ249KHluLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoU24pLXplKSpLZSk7bGV0IHBvO3kmJihwbz1fLmdlb2RldGljU3VyZmFjZU5vcm1hbChTdCxkTCkpLGRlPU4uZW5jb2RlKG1lLGRlLFN0LE10LFVuLHduLENuLHBvKX1sZXQgYXQ9bW4uZnJvbVJlY3RhbmdsZShULERlLEJlLF8sY0wpLHh0PXBlLmZyb21WZXJ0aWNlcyhtZSxOLmNlbnRlcix2LGlMKSxjdD1uZXcgQXIoXykuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRGcm9tVmVydGljZXNQb3NzaWJseVVuZGVyRWxsaXBzb2lkKE4uY2VudGVyLG1lLHYsTi5jZW50ZXIsRGUsckwpLHp0PW5ldyBIXyhzLmNsb25lKE4uY2VudGVyLG5ldyBzKSxtZSxKLEQseCxEZSxCZSxULHBlLmNsb25lKHh0KSxzLmNsb25lKGN0KSx2LG1uLmNsb25lKGF0KSxOLHJlLHNlLG9lLGNlKTtyZXR1cm4gengoenQsVCxfLGV0LHFlLHllLGxlLHIpLHp0fTtXXz0wLGJMPTEsWF89MixZXz0zLHBMPTQsZ0w9bmV3IHMsX0w9W25ldyBzLG5ldyBzLG5ldyBzLG5ldyBzLG5ldyBzLG5ldyBzXSx5TD1bbmV3IFksbmV3IFksbmV3IFksbmV3IFksbmV3IFksbmV3IFldLEFMPVtuZXcgcyxuZXcgcyxuZXcgcyxuZXcgcyxuZXcgcyxuZXcgc10sd0w9W25ldyBZLG5ldyBZLG5ldyBZLG5ldyBZLG5ldyBZLG5ldyBZXTtFTD17bGVuZ3RoOjAsY29vcmRpbmF0ZXM6W25ldyBZLG5ldyBZLG5ldyBZLG5ldyBZLG5ldyBZLG5ldyBZXSxiYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzOltuZXcgcyxuZXcgcyxuZXcgcyxuZXcgcyxuZXcgcyxuZXcgc119O09MPVtbXSxbMF0sWzFdLFswLDFdLFsyXSxbMCwyXSxbMSwyXSxbMCwxLDJdXTtsbT1xX30pO3ZhciBaXz17fTskZShaXyx7ZGVmYXVsdDooKT0+TUx9KTtmdW5jdGlvbiBDTChuLGUpe3JldHVybiBsbS5jcmVhdGVNZXNoKG4pLnRoZW4oZnVuY3Rpb24obyl7bGV0IGE9by52ZXJ0aWNlcy5idWZmZXIscj1vLmluZGljZXMuYnVmZmVyLGk9by53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aC5idWZmZXIsZj1vLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QuYnVmZmVyLGQ9by5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aC5idWZmZXIsYz1vLm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3QuYnVmZmVyO3JldHVybiBlLnB1c2goYSxyLGksZixkLGMpLHt2ZXJ0aWNlc0J1ZmZlcjphLGluZGljZXNCdWZmZXI6cix2ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHM6by52ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsaW5kZXhDb3VudFdpdGhvdXRTa2lydHM6by5pbmRleENvdW50V2l0aG91dFNraXJ0cyxlbmNvZGluZzpvLmVuY29kaW5nLHdlc3RJbmRpY2VzQnVmZmVyOmksc291dGhJbmRpY2VzQnVmZmVyOmYsZWFzdEluZGljZXNCdWZmZXI6ZCxub3J0aEluZGljZXNCdWZmZXI6Y319KX12YXIgTUwsUV89WCgoKT0+e0pfKCk7a24oKTtNTD1tdChDTCl9KTt2YXIgZXk9e307JGUoZXkse2RlZmF1bHQ6KCk9PkJMfSk7ZnVuY3Rpb24geGQobixlLHQpe3Q9dD8/aztsZXQgbz1uLmxlbmd0aDtmb3IobGV0IGE9MDthPG87KythKWlmKHQuZXF1YWxzRXBzaWxvbihuW2FdLGUsay5FUFNJTE9OMTIpKXJldHVybiBhO3JldHVybi0xfWZ1bmN0aW9uIFBMKG4sZSl7bi5lbGxpcHNvaWQ9Sy5jbG9uZShuLmVsbGlwc29pZCksbi5yZWN0YW5nbGU9eGUuY2xvbmUobi5yZWN0YW5nbGUpO2xldCB0PURMKG4uYnVmZmVyLG4ucmVsYXRpdmVUb0NlbnRlcixuLmVsbGlwc29pZCxuLnJlY3RhbmdsZSxuLm5hdGl2ZVJlY3RhbmdsZSxuLmV4YWdnZXJhdGlvbixuLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0LG4uc2tpcnRIZWlnaHQsbi5pbmNsdWRlV2ViTWVyY2F0b3JULG4ubmVnYXRpdmVBbHRpdHVkZUV4cG9uZW50QmlhcyxuLm5lZ2F0aXZlRWxldmF0aW9uVGhyZXNob2xkKSxvPXQudmVydGljZXM7ZS5wdXNoKG8uYnVmZmVyKTtsZXQgYT10LmluZGljZXM7cmV0dXJuIGUucHVzaChhLmJ1ZmZlcikse3ZlcnRpY2VzOm8uYnVmZmVyLGluZGljZXM6YS5idWZmZXIsbnVtYmVyT2ZBdHRyaWJ1dGVzOnQuZW5jb2Rpbmcuc3RyaWRlLG1pbmltdW1IZWlnaHQ6dC5taW5pbXVtSGVpZ2h0LG1heGltdW1IZWlnaHQ6dC5tYXhpbXVtSGVpZ2h0LGJvdW5kaW5nU3BoZXJlM0Q6dC5ib3VuZGluZ1NwaGVyZTNELG9yaWVudGVkQm91bmRpbmdCb3g6dC5vcmllbnRlZEJvdW5kaW5nQm94LG9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlOnQub2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2UsZW5jb2Rpbmc6dC5lbmNvZGluZyx2ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHM6dC52ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsaW5kZXhDb3VudFdpdGhvdXRTa2lydHM6dC5pbmRleENvdW50V2l0aG91dFNraXJ0cyx3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDp0Lndlc3RJbmRpY2VzU291dGhUb05vcnRoLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6dC5zb3V0aEluZGljZXNFYXN0VG9XZXN0LGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOnQuZWFzdEluZGljZXNOb3J0aFRvU291dGgsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDp0Lm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3R9fWZ1bmN0aW9uIERMKG4sZSx0LG8sYSxyLGksZixkLGMsdSl7bGV0IGwsbSxoLGIscCx5O2cobyk/KGw9by53ZXN0LG09by5zb3V0aCxoPW8uZWFzdCxiPW8ubm9ydGgscD1vLndpZHRoLHk9by5oZWlnaHQpOihsPWsudG9SYWRpYW5zKGEud2VzdCksbT1rLnRvUmFkaWFucyhhLnNvdXRoKSxoPWsudG9SYWRpYW5zKGEuZWFzdCksYj1rLnRvUmFkaWFucyhhLm5vcnRoKSxwPWsudG9SYWRpYW5zKG8ud2lkdGgpLHk9ay50b1JhZGlhbnMoby5oZWlnaHQpKTtsZXQgVD1bbSxiXSxfPVtsLGhdLHc9b28uZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoZSx0KSxFPVEuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKHcsRkwpLFIsUztkJiYoUj15bi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKG0pLFM9MS8oeW4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShiKS1SKSk7bGV0IEk9ciE9PTEsTT1uZXcgRGF0YVZpZXcobiksUD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksRj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksQT1rTDtBLng9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEEueT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksQS56PU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgeD12TDt4Lng9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHgueT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkseC56PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgTj0wLHY9MCxVPTAsTCxEO2ZvcihEPTA7RDw0OysrRCl7bGV0IEdlPU47TD1NLmdldFVpbnQzMihHZSwhMCksR2UrPSRfO2xldCBMZT1rLnRvUmFkaWFucyhNLmdldEZsb2F0NjQoR2UsITApKjE4MCk7R2UrPVNjLHhkKF8sTGUpPT09LTEmJl8ucHVzaChMZSk7bGV0IF90PWsudG9SYWRpYW5zKE0uZ2V0RmxvYXQ2NChHZSwhMCkqMTgwKTtHZSs9U2MseGQoVCxfdCk9PT0tMSYmVC5wdXNoKF90KSxHZSs9MipTYztsZXQgTXQ9TS5nZXRJbnQzMihHZSwhMCk7R2UrPWhtLHYrPU10LE10PU0uZ2V0SW50MzIoR2UsITApLFUrPU10KjMsTis9TCskX31sZXQgRz1bXSxWPVtdLE89bmV3IEFycmF5KHYpLEo9bmV3IEFycmF5KHYpLHJlPW5ldyBBcnJheSh2KSxzZT1kP25ldyBBcnJheSh2KTpbXSxvZT1JP25ldyBBcnJheSh2KTpbXSxjZT1uZXcgQXJyYXkoVSksbWU9W10sZGU9W10seWU9W10sbGU9W10sZWU9MCxFZT0wO2ZvcihOPTAsRD0wO0Q8NDsrK0Qpe0w9TS5nZXRVaW50MzIoTiwhMCksTis9JF87bGV0IEdlPU4sTGU9ay50b1JhZGlhbnMoTS5nZXRGbG9hdDY0KE4sITApKjE4MCk7Tis9U2M7bGV0IF90PWsudG9SYWRpYW5zKE0uZ2V0RmxvYXQ2NChOLCEwKSoxODApO04rPVNjO2xldCBNdD1rLnRvUmFkaWFucyhNLmdldEZsb2F0NjQoTiwhMCkqMTgwKSxHdD1NdCouNTtOKz1TYztsZXQgcXQ9ay50b1JhZGlhbnMoTS5nZXRGbG9hdDY0KE4sITApKjE4MCksUXQ9cXQqLjU7Tis9U2M7bGV0IHBuPU0uZ2V0SW50MzIoTiwhMCk7Tis9aG07bGV0IE50PU0uZ2V0SW50MzIoTiwhMCk7Tis9aG0sTis9aG07bGV0ICR0PW5ldyBBcnJheShwbik7Zm9yKGxldCBvbj0wO29uPHBuOysrb24pe2xldCBVbj1MZStNLmdldFVpbnQ4KE4rKykqTXQ7UG8ubG9uZ2l0dWRlPVVuO2xldCBqbj1fdCtNLmdldFVpbnQ4KE4rKykqcXQ7UG8ubGF0aXR1ZGU9am47bGV0IFNuPU0uZ2V0RmxvYXQzMihOLCEwKTtpZihOKz1JTCxTbiE9PTAmJlNuPHUmJihTbio9LU1hdGgucG93KDIsYykpLFNuKj02MzcxMDEwLFBvLmhlaWdodD1Tbix4ZChfLFVuKSE9PS0xfHx4ZChULGpuKSE9PS0xKXtsZXQgd249eGQoRyxQbyxhZSk7aWYod249PT0tMSlHLnB1c2goYWUuY2xvbmUoUG8pKSxWLnB1c2goZWUpO2Vsc2V7JHRbb25dPVZbd25dO2NvbnRpbnVlfX0kdFtvbl09ZWUsTWF0aC5hYnMoVW4tbCk8R3Q/bWUucHVzaCh7aW5kZXg6ZWUsY2FydG9ncmFwaGljOmFlLmNsb25lKFBvKX0pOk1hdGguYWJzKFVuLWgpPEd0P3llLnB1c2goe2luZGV4OmVlLGNhcnRvZ3JhcGhpYzphZS5jbG9uZShQbyl9KTpNYXRoLmFicyhqbi1tKTxRdD9kZS5wdXNoKHtpbmRleDplZSxjYXJ0b2dyYXBoaWM6YWUuY2xvbmUoUG8pfSk6TWF0aC5hYnMoam4tYik8UXQmJmxlLnB1c2goe2luZGV4OmVlLGNhcnRvZ3JhcGhpYzphZS5jbG9uZShQbyl9KSxQPU1hdGgubWluKFNuLFApLEY9TWF0aC5tYXgoU24sRikscmVbZWVdPVNuO2xldCB0bz10LmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFBvKTtpZihPW2VlXT10byxkJiYoc2VbZWVdPSh5bi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKGpuKS1SKSpTKSxJKXtsZXQgd249dC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodG8pO29lW2VlXT13bn1RLm11bHRpcGx5QnlQb2ludChFLHRvLEhzKSxzLm1pbmltdW1CeUNvbXBvbmVudChIcyxBLEEpLHMubWF4aW11bUJ5Q29tcG9uZW50KEhzLHgseCk7bGV0IFN0PShVbi1sKS8oaC1sKTtTdD1rLmNsYW1wKFN0LDAsMSk7bGV0IHl0PShqbi1tKS8oYi1tKTt5dD1rLmNsYW1wKHl0LDAsMSksSltlZV09bmV3IFkoU3QseXQpLCsrZWV9bGV0IEZ0PU50KjM7Zm9yKGxldCBvbj0wO29uPEZ0Oysrb24sKytFZSljZVtFZV09JHRbTS5nZXRVaW50MTYoTiwhMCldLE4rPU5MO2lmKEwhPT1OLUdlKXRocm93IG5ldyBudCgiSW52YWxpZCB0ZXJyYWluIHRpbGUuIil9Ty5sZW5ndGg9ZWUsSi5sZW5ndGg9ZWUscmUubGVuZ3RoPWVlLGQmJihzZS5sZW5ndGg9ZWUpLEkmJihvZS5sZW5ndGg9ZWUpO2xldCBDZT1lZSxXZT1FZSx6ZT17aE1pbjpQLGxhc3RCb3JkZXJQb2ludDp2b2lkIDAsc2tpcnRIZWlnaHQ6Zix0b0VOVTpFLGVsbGlwc29pZDp0LG1pbmltdW06QSxtYXhpbXVtOnh9O21lLnNvcnQoZnVuY3Rpb24oR2UsTGUpe3JldHVybiBMZS5jYXJ0b2dyYXBoaWMubGF0aXR1ZGUtR2UuY2FydG9ncmFwaGljLmxhdGl0dWRlfSksZGUuc29ydChmdW5jdGlvbihHZSxMZSl7cmV0dXJuIEdlLmNhcnRvZ3JhcGhpYy5sb25naXR1ZGUtTGUuY2FydG9ncmFwaGljLmxvbmdpdHVkZX0pLHllLnNvcnQoZnVuY3Rpb24oR2UsTGUpe3JldHVybiBHZS5jYXJ0b2dyYXBoaWMubGF0aXR1ZGUtTGUuY2FydG9ncmFwaGljLmxhdGl0dWRlfSksbGUuc29ydChmdW5jdGlvbihHZSxMZSl7cmV0dXJuIExlLmNhcnRvZ3JhcGhpYy5sb25naXR1ZGUtR2UuY2FydG9ncmFwaGljLmxvbmdpdHVkZX0pO2xldCBaZT0xZS01O2lmKG1tKE8scmUsSixzZSxvZSxjZSx6ZSxtZSwtWmUqcCwhMCwtWmUqeSksbW0oTyxyZSxKLHNlLG9lLGNlLHplLGRlLC1aZSp5LCExKSxtbShPLHJlLEosc2Usb2UsY2UsemUseWUsWmUqcCwhMCxaZSp5KSxtbShPLHJlLEosc2Usb2UsY2UsemUsbGUsWmUqeSwhMSksbWUubGVuZ3RoPjAmJmxlLmxlbmd0aD4wKXtsZXQgR2U9bWVbMF0uaW5kZXgsTGU9Q2UsX3Q9bGVbbGUubGVuZ3RoLTFdLmluZGV4LE10PU8ubGVuZ3RoLTE7Y2UucHVzaChfdCxNdCxMZSxMZSxHZSxfdCl9dj1PLmxlbmd0aDtsZXQgS2U9cGUuZnJvbVBvaW50cyhPKSxEZTtnKG8pJiYoRGU9bW4uZnJvbVJlY3RhbmdsZShvLFAsRix0KSk7bGV0IGV0PW5ldyBBcih0KS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludFBvc3NpYmx5VW5kZXJFbGxpcHNvaWQoZSxPLFApLHFlPW5ldyBybyhBLHgsZSksYXQ9bmV3IG5hKGUscWUsemUuaE1pbixGLHcsITEsZCxJLHIsaSkseHQ9bmV3IEZsb2F0MzJBcnJheSh2KmF0LnN0cmlkZSksVHQ9MDtmb3IobGV0IEdlPTA7R2U8djsrK0dlKVR0PWF0LmVuY29kZSh4dCxUdCxPW0dlXSxKW0dlXSxyZVtHZV0sdm9pZCAwLHNlW0dlXSxvZVtHZV0pO2xldCBjdD1tZS5tYXAoZnVuY3Rpb24oR2Upe3JldHVybiBHZS5pbmRleH0pLnJldmVyc2UoKSx6dD1kZS5tYXAoZnVuY3Rpb24oR2Upe3JldHVybiBHZS5pbmRleH0pLnJldmVyc2UoKSxPdD15ZS5tYXAoZnVuY3Rpb24oR2Upe3JldHVybiBHZS5pbmRleH0pLnJldmVyc2UoKSxrdD1sZS5tYXAoZnVuY3Rpb24oR2Upe3JldHVybiBHZS5pbmRleH0pLnJldmVyc2UoKTtyZXR1cm4genQudW5zaGlmdChPdFtPdC5sZW5ndGgtMV0pLHp0LnB1c2goY3RbMF0pLGt0LnVuc2hpZnQoY3RbY3QubGVuZ3RoLTFdKSxrdC5wdXNoKE90WzBdKSx7dmVydGljZXM6eHQsaW5kaWNlczpuZXcgVWludDE2QXJyYXkoY2UpLG1heGltdW1IZWlnaHQ6RixtaW5pbXVtSGVpZ2h0OlAsZW5jb2Rpbmc6YXQsYm91bmRpbmdTcGhlcmUzRDpLZSxvcmllbnRlZEJvdW5kaW5nQm94OkRlLG9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlOmV0LHZlcnRleENvdW50V2l0aG91dFNraXJ0czpDZSxpbmRleENvdW50V2l0aG91dFNraXJ0czpXZSx3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpjdCxzb3V0aEluZGljZXNFYXN0VG9XZXN0Onp0LGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOk90LG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6a3R9fWZ1bmN0aW9uIG1tKG4sZSx0LG8sYSxyLGksZixkLGMsdSl7bGV0IGw9Zi5sZW5ndGg7Zm9yKGxldCBtPTA7bTxsOysrbSl7bGV0IGg9ZlttXSxiPWguY2FydG9ncmFwaGljLHA9aC5pbmRleCx5PW4ubGVuZ3RoLFQ9Yi5sb25naXR1ZGUsXz1iLmxhdGl0dWRlO189ay5jbGFtcChfLC1rLlBJX09WRVJfVFdPLGsuUElfT1ZFUl9UV08pO2xldCB3PWIuaGVpZ2h0LWkuc2tpcnRIZWlnaHQ7aS5oTWluPU1hdGgubWluKGkuaE1pbix3KSxhZS5mcm9tUmFkaWFucyhULF8sdyxQbyksYyYmKFBvLmxvbmdpdHVkZSs9ZCksYz9tPT09bC0xP1BvLmxhdGl0dWRlKz11Om09PT0wJiYoUG8ubGF0aXR1ZGUtPXUpOlBvLmxhdGl0dWRlKz1kO2xldCBFPWkuZWxsaXBzb2lkLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFBvKTtuLnB1c2goRSksZS5wdXNoKHcpLHQucHVzaChZLmNsb25lKHRbcF0pKSxvLmxlbmd0aD4wJiZvLnB1c2gob1twXSksYS5sZW5ndGg+MCYmYS5wdXNoKGFbcF0pLFEubXVsdGlwbHlCeVBvaW50KGkudG9FTlUsRSxIcyk7bGV0IFI9aS5taW5pbXVtLFM9aS5tYXhpbXVtO3MubWluaW11bUJ5Q29tcG9uZW50KEhzLFIsUikscy5tYXhpbXVtQnlDb21wb25lbnQoSHMsUyxTKTtsZXQgQz1pLmxhc3RCb3JkZXJQb2ludDtpZihnKEMpKXtsZXQgST1DLmluZGV4O3IucHVzaChJLHktMSx5LHkscCxJKX1pLmxhc3RCb3JkZXJQb2ludD1ofX12YXIgTkwsaG0sJF8sSUwsU2MsUG8sSHMsa0wsdkwsRkwsQkwsdHk9WCgoKT0+e3lpKCk7RXQoKTt2dCgpO01lKCk7Z3QoKTtmZSgpO1ZlKCk7R3MoKTtqZSgpO3VuKCk7QWkoKTtobigpO3BhKCk7VnMoKTtycigpO19pKCk7a24oKTtOTD1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxobT1JbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCRfPVVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULElMPUZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxTYz1GbG9hdDY0QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7UG89bmV3IGFlLEhzPW5ldyBzLGtMPW5ldyBzLHZMPW5ldyBzLEZMPW5ldyBRO0JMPW10KFBMKX0pO3ZhciBHeCxWeCxIeD1YKCgpPT57R3g9e05PTkU6MCxMRVJDOjF9O09iamVjdC5mcmVlemUoR3gpO1Z4PUd4fSk7dmFyIHdyLG55LFVMLGpMLExMLEt4LHF4PVgoKCk9Pnt5aSgpO0V0KCk7dnQoKTtNZSgpO2ZlKCk7VmUoKTtHcygpO2plKCk7dW4oKTtBaSgpO2huKCk7VnMoKTtycigpO19pKCk7d3I9e307d3IuREVGQVVMVF9TVFJVQ1RVUkU9T2JqZWN0LmZyZWV6ZSh7aGVpZ2h0U2NhbGU6MSxoZWlnaHRPZmZzZXQ6MCxlbGVtZW50c1BlckhlaWdodDoxLHN0cmlkZToxLGVsZW1lbnRNdWx0aXBsaWVyOjI1Nixpc0JpZ0VuZGlhbjohMX0pO255PW5ldyBzLFVMPW5ldyBRLGpMPW5ldyBzLExMPW5ldyBzO3dyLmNvbXB1dGVWZXJ0aWNlcz1mdW5jdGlvbihuKXtsZXQgZT1NYXRoLmNvcyx0PU1hdGguc2luLG89TWF0aC5zcXJ0LGE9TWF0aC5hdGFuLHI9TWF0aC5leHAsaT1rLlBJX09WRVJfVFdPLGY9ay50b1JhZGlhbnMsZD1uLmhlaWdodG1hcCxjPW4ud2lkdGgsdT1uLmhlaWdodCxsPW4uc2tpcnRIZWlnaHQsbT1sPjAsaD1uLmlzR2VvZ3JhcGhpYz8/ITAsYj1uLmVsbGlwc29pZD8/Sy5kZWZhdWx0LHA9MS9iLm1heGltdW1SYWRpdXMseT14ZS5jbG9uZShuLm5hdGl2ZVJlY3RhbmdsZSksVD14ZS5jbG9uZShuLnJlY3RhbmdsZSksXyx3LEUsUjtnKFQpPyhfPVQud2VzdCx3PVQuc291dGgsRT1ULmVhc3QsUj1ULm5vcnRoKTpoPyhfPWYoeS53ZXN0KSx3PWYoeS5zb3V0aCksRT1mKHkuZWFzdCksUj1mKHkubm9ydGgpKTooXz15Lndlc3QqcCx3PWktMiphKHIoLXkuc291dGgqcCkpLEU9eS5lYXN0KnAsUj1pLTIqYShyKC15Lm5vcnRoKnApKSk7bGV0IFM9bi5yZWxhdGl2ZVRvQ2VudGVyLEM9ZyhTKTtTPUM/UzpzLlpFUk87bGV0IEk9bi5pbmNsdWRlV2ViTWVyY2F0b3JUPz8hMSxNPW4uZXhhZ2dlcmF0aW9uPz8xLFA9bi5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodD8/MCxBPU0hPT0xLHg9bi5zdHJ1Y3R1cmU/P3dyLkRFRkFVTFRfU1RSVUNUVVJFLE49eC5oZWlnaHRTY2FsZT8/d3IuREVGQVVMVF9TVFJVQ1RVUkUuaGVpZ2h0U2NhbGUsdj14LmhlaWdodE9mZnNldD8/d3IuREVGQVVMVF9TVFJVQ1RVUkUuaGVpZ2h0T2Zmc2V0LFU9eC5lbGVtZW50c1BlckhlaWdodD8/d3IuREVGQVVMVF9TVFJVQ1RVUkUuZWxlbWVudHNQZXJIZWlnaHQsTD14LnN0cmlkZT8/d3IuREVGQVVMVF9TVFJVQ1RVUkUuc3RyaWRlLEQ9eC5lbGVtZW50TXVsdGlwbGllcj8/d3IuREVGQVVMVF9TVFJVQ1RVUkUuZWxlbWVudE11bHRpcGxpZXIsRz14LmlzQmlnRW5kaWFuPz93ci5ERUZBVUxUX1NUUlVDVFVSRS5pc0JpZ0VuZGlhbixWPXhlLmNvbXB1dGVXaWR0aCh5KSxPPXhlLmNvbXB1dGVIZWlnaHQoeSksSj1WLyhjLTEpLHJlPU8vKHUtMSk7aHx8KFYqPXAsTyo9cCk7bGV0IHNlPWIucmFkaWlTcXVhcmVkLG9lPXNlLngsY2U9c2UueSxtZT1zZS56LGRlPTY1NTM2LHllPS02NTUzNixsZT1vby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShTLGIpLGVlPVEuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGxlLFVMKSxFZSxDZTtJJiYoRWU9eW4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZSh3KSxDZT0xLyh5bi5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKFIpLUVlKSk7bGV0IFdlPWpMO1dlLng9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFdlLnk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFdlLno9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCB6ZT1MTDt6ZS54PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSx6ZS55PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSx6ZS56PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgWmU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEtlPWMqdSxEZT1sPjA/YyoyK3UqMjowLEJlPUtlK0RlLGV0PW5ldyBBcnJheShCZSkscWU9bmV3IEFycmF5KEJlKSxhdD1uZXcgQXJyYXkoQmUpLHh0PUk/bmV3IEFycmF5KEJlKTpbXSxUdD1BP25ldyBBcnJheShCZSk6W10sY3Q9MCx6dD11LE90PTAsa3Q9YzttJiYoLS1jdCwrK3p0LC0tT3QsKytrdCk7bGV0IEdlPTFlLTU7Zm9yKGxldCBOdD1jdDtOdDx6dDsrK050KXtsZXQgJHQ9TnQ7JHQ8MCYmKCR0PTApLCR0Pj11JiYoJHQ9dS0xKTtsZXQgRnQ9eS5ub3J0aC1yZSokdDtoP0Z0PWYoRnQpOkZ0PWktMiphKHIoLUZ0KnApKTtsZXQgb249KEZ0LXcpLyhSLXcpO29uPWsuY2xhbXAob24sMCwxKTtsZXQgVW49TnQ9PT1jdCxqbj1OdD09PXp0LTE7bD4wJiYoVW4/RnQrPUdlKk86am4mJihGdC09R2UqTykpO2xldCBTbj1lKEZ0KSx0bz10KEZ0KSxTdD1tZSp0byx5dDtJJiYoeXQ9KHluLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoRnQpLUVlKSpDZSk7Zm9yKGxldCB3bj1PdDt3bjxrdDsrK3duKXtsZXQgQ249d247Q248MCYmKENuPTApLENuPj1jJiYoQ249Yy0xKTtsZXQgcG89JHQqKGMqTCkrQ24qTCxEdDtpZihVPT09MSlEdD1kW3BvXTtlbHNle0R0PTA7bGV0IGdvO2lmKEcpZm9yKGdvPTA7Z288VTsrK2dvKUR0PUR0KkQrZFtwbytnb107ZWxzZSBmb3IoZ289VS0xO2dvPj0wOy0tZ28pRHQ9RHQqRCtkW3BvK2dvXX1EdD1EdCpOK3YseWU9TWF0aC5tYXgoeWUsRHQpLGRlPU1hdGgubWluKGRlLER0KTtsZXQgYW49eS53ZXN0K0oqQ247aD9hbj1mKGFuKTphbj1hbipwO2xldCBFbz0oYW4tXykvKEUtXyk7RW89ay5jbGFtcChFbywwLDEpO2xldCBNbj0kdCpjK0NuO2lmKGw+MCl7bGV0IGdvPXduPT09T3QsRGE9d249PT1rdC0xLGtjPVVufHxqbnx8Z298fERhO2lmKChVbnx8am4pJiYoZ298fERhKSljb250aW51ZTtrYyYmKER0LT1sLGdvPyhNbj1LZSsodS0kdC0xKSxhbi09R2UqVik6am4/TW49S2UrdSsoYy1Dbi0xKTpEYT8oTW49S2UrdStjKyR0LGFuKz1HZSpWKTpVbiYmKE1uPUtlK3UrYyt1K0NuKSl9bGV0IEhvPVNuKmUoYW4pLHZhPVNuKnQoYW4pLHppPW9lKkhvLEdpPWNlKnZhLEZhPTEvbyh6aSpIbytHaSp2YStTdCp0byksbmk9emkqRmEsVmk9R2kqRmEsT3I9U3QqRmEsY289bmV3IHM7Y28ueD1uaStIbypEdCxjby55PVZpK3ZhKkR0LGNvLno9T3IrdG8qRHQsUS5tdWx0aXBseUJ5UG9pbnQoZWUsY28sbnkpLHMubWluaW11bUJ5Q29tcG9uZW50KG55LFdlLFdlKSxzLm1heGltdW1CeUNvbXBvbmVudChueSx6ZSx6ZSksWmU9TWF0aC5taW4oWmUsRHQpLGV0W01uXT1jbyxhdFtNbl09bmV3IFkoRW8sb24pLHFlW01uXT1EdCxJJiYoeHRbTW5dPXl0KSxBJiYoVHRbTW5dPWIuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGNvKSl9fWxldCBMZT1wZS5mcm9tUG9pbnRzKGV0KSxfdDtnKFQpJiYoX3Q9bW4uZnJvbVJlY3RhbmdsZShULGRlLHllLGIpKTtsZXQgTXQ7QyYmKE10PW5ldyBBcihiKS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludFBvc3NpYmx5VW5kZXJFbGxpcHNvaWQoUyxldCxkZSkpO2xldCBHdD1uZXcgcm8oV2UsemUsUykscXQ9bmV3IG5hKFMsR3QsWmUseWUsbGUsITEsSSxBLE0sUCksUXQ9bmV3IEZsb2F0MzJBcnJheShCZSpxdC5zdHJpZGUpLHBuPTA7Zm9yKGxldCBOdD0wO050PEJlOysrTnQpcG49cXQuZW5jb2RlKFF0LHBuLGV0W050XSxhdFtOdF0scWVbTnRdLHZvaWQgMCx4dFtOdF0sVHRbTnRdKTtyZXR1cm57dmVydGljZXM6UXQsbWF4aW11bUhlaWdodDp5ZSxtaW5pbXVtSGVpZ2h0OmRlLGVuY29kaW5nOnF0LGJvdW5kaW5nU3BoZXJlM0Q6TGUsb3JpZW50ZWRCb3VuZGluZ0JveDpfdCxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpNdH19O0t4PXdyfSk7dmFyIFd4PXNpKChjdWUsYm0pPT57LyogQ29weXJpZ2h0IDIwMTUtMjAxOCBFc3JpLiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEBwcmVzZXJ2ZSAqLyhmdW5jdGlvbigpe3ZhciBuPShmdW5jdGlvbigpe3ZhciBhPXt9O2EuZGVmYXVsdE5vRGF0YVZhbHVlPS0zNDAyNzk5OTM4NzkwMTQ4NGUyMixhLmRlY29kZT1mdW5jdGlvbih1LGwpe2w9bHx8e307dmFyIG09bC5lbmNvZGVkTWFza0RhdGF8fGwuZW5jb2RlZE1hc2tEYXRhPT09bnVsbCxoPWQodSxsLmlucHV0T2Zmc2V0fHwwLG0pLGI9bC5ub0RhdGFWYWx1ZSE9PW51bGw/bC5ub0RhdGFWYWx1ZTphLmRlZmF1bHROb0RhdGFWYWx1ZSxwPXIoaCxsLnBpeGVsVHlwZXx8RmxvYXQzMkFycmF5LGwuZW5jb2RlZE1hc2tEYXRhLGIsbC5yZXR1cm5NYXNrKSx5PXt3aWR0aDpoLndpZHRoLGhlaWdodDpoLmhlaWdodCxwaXhlbERhdGE6cC5yZXN1bHRQaXhlbHMsbWluVmFsdWU6cC5taW5WYWx1ZSxtYXhWYWx1ZTpoLnBpeGVscy5tYXhWYWx1ZSxub0RhdGFWYWx1ZTpifTtyZXR1cm4gcC5yZXN1bHRNYXNrJiYoeS5tYXNrRGF0YT1wLnJlc3VsdE1hc2spLGwucmV0dXJuRW5jb2RlZE1hc2smJmgubWFzayYmKHkuZW5jb2RlZE1hc2tEYXRhPWgubWFzay5iaXRzZXQ/aC5tYXNrLmJpdHNldDpudWxsKSxsLnJldHVybkZpbGVJbmZvJiYoeS5maWxlSW5mbz1pKGgpLGwuY29tcHV0ZVVzZWRCaXREZXB0aHMmJih5LmZpbGVJbmZvLmJpdERlcHRocz1mKGgpKSkseX07dmFyIHI9ZnVuY3Rpb24odSxsLG0saCxiKXt2YXIgcD0wLHk9dS5waXhlbHMubnVtQmxvY2tzWCxUPXUucGl4ZWxzLm51bUJsb2Nrc1ksXz1NYXRoLmZsb29yKHUud2lkdGgveSksdz1NYXRoLmZsb29yKHUuaGVpZ2h0L1QpLEU9Mip1Lm1heFpFcnJvcixSPU51bWJlci5NQVhfVkFMVUUsUzttPW18fCh1Lm1hc2s/dS5tYXNrLmJpdHNldDpudWxsKTt2YXIgQyxJO0M9bmV3IGwodS53aWR0aCp1LmhlaWdodCksYiYmbSYmKEk9bmV3IFVpbnQ4QXJyYXkodS53aWR0aCp1LmhlaWdodCkpO2Zvcih2YXIgTT1uZXcgRmxvYXQzMkFycmF5KF8qdyksUCxGLEE9MDtBPD1UO0ErKyl7dmFyIHg9QSE9PVQ/dzp1LmhlaWdodCVUO2lmKHghPT0wKWZvcih2YXIgTj0wO048PXk7TisrKXt2YXIgdj1OIT09eT9fOnUud2lkdGgleTtpZih2IT09MCl7dmFyIFU9QSp1LndpZHRoKncrTipfLEw9dS53aWR0aC12LEQ9dS5waXhlbHMuYmxvY2tzW3BdLEcsVixPO0QuZW5jb2Rpbmc8Mj8oRC5lbmNvZGluZz09PTA/Rz1ELnJhd0RhdGE6KGMoRC5zdHVmZmVkRGF0YSxELmJpdHNQZXJQaXhlbCxELm51bVZhbGlkUGl4ZWxzLEQub2Zmc2V0LEUsTSx1LnBpeGVscy5tYXhWYWx1ZSksRz1NKSxWPTApOkQuZW5jb2Rpbmc9PT0yP089MDpPPUQub2Zmc2V0O3ZhciBKO2lmKG0pZm9yKEY9MDtGPHg7RisrKXtmb3IoVSY3JiYoSj1tW1U+PjNdLEo8PD1VJjcpLFA9MDtQPHY7UCsrKVUmN3x8KEo9bVtVPj4zXSksSiYxMjg/KEkmJihJW1VdPTEpLFM9RC5lbmNvZGluZzwyP0dbVisrXTpPLFI9Uj5TP1M6UixDW1UrK109Uyk6KEkmJihJW1VdPTApLENbVSsrXT1oKSxKPDw9MTtVKz1MfWVsc2UgaWYoRC5lbmNvZGluZzwyKWZvcihGPTA7Rjx4O0YrKyl7Zm9yKFA9MDtQPHY7UCsrKVM9R1tWKytdLFI9Uj5TP1M6UixDW1UrK109UztVKz1MfWVsc2UgZm9yKFI9Uj5PP086UixGPTA7Rjx4O0YrKyl7Zm9yKFA9MDtQPHY7UCsrKUNbVSsrXT1PO1UrPUx9aWYoRC5lbmNvZGluZz09PTEmJlYhPT1ELm51bVZhbGlkUGl4ZWxzKXRocm93IkJsb2NrIGFuZCBNYXNrIGRvIG5vdCBtYXRjaCI7cCsrfX19cmV0dXJue3Jlc3VsdFBpeGVsczpDLHJlc3VsdE1hc2s6SSxtaW5WYWx1ZTpSfX0saT1mdW5jdGlvbih1KXtyZXR1cm57ZmlsZUlkZW50aWZpZXJTdHJpbmc6dS5maWxlSWRlbnRpZmllclN0cmluZyxmaWxlVmVyc2lvbjp1LmZpbGVWZXJzaW9uLGltYWdlVHlwZTp1LmltYWdlVHlwZSxoZWlnaHQ6dS5oZWlnaHQsd2lkdGg6dS53aWR0aCxtYXhaRXJyb3I6dS5tYXhaRXJyb3IsZW9mT2Zmc2V0OnUuZW9mT2Zmc2V0LG1hc2s6dS5tYXNrP3tudW1CbG9ja3NYOnUubWFzay5udW1CbG9ja3NYLG51bUJsb2Nrc1k6dS5tYXNrLm51bUJsb2Nrc1ksbnVtQnl0ZXM6dS5tYXNrLm51bUJ5dGVzLG1heFZhbHVlOnUubWFzay5tYXhWYWx1ZX06bnVsbCxwaXhlbHM6e251bUJsb2Nrc1g6dS5waXhlbHMubnVtQmxvY2tzWCxudW1CbG9ja3NZOnUucGl4ZWxzLm51bUJsb2Nrc1ksbnVtQnl0ZXM6dS5waXhlbHMubnVtQnl0ZXMsbWF4VmFsdWU6dS5waXhlbHMubWF4VmFsdWUsbm9EYXRhVmFsdWU6dS5ub0RhdGFWYWx1ZX19fSxmPWZ1bmN0aW9uKHUpe2Zvcih2YXIgbD11LnBpeGVscy5udW1CbG9ja3NYKnUucGl4ZWxzLm51bUJsb2Nrc1ksbT17fSxoPTA7aDxsO2grKyl7dmFyIGI9dS5waXhlbHMuYmxvY2tzW2hdO2IuZW5jb2Rpbmc9PT0wP20uZmxvYXQzMj0hMDpiLmVuY29kaW5nPT09MT9tW2IuYml0c1BlclBpeGVsXT0hMDptWzBdPSEwfXJldHVybiBPYmplY3Qua2V5cyhtKX0sZD1mdW5jdGlvbih1LGwsbSl7dmFyIGg9e30sYj1uZXcgVWludDhBcnJheSh1LGwsMTApO2lmKGguZmlsZUlkZW50aWZpZXJTdHJpbmc9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGIpLGguZmlsZUlkZW50aWZpZXJTdHJpbmcudHJpbSgpIT09IkNudFpJbWFnZSIpdGhyb3ciVW5leHBlY3RlZCBmaWxlIGlkZW50aWZpZXIgc3RyaW5nOiAiK2guZmlsZUlkZW50aWZpZXJTdHJpbmc7bCs9MTA7dmFyIHA9bmV3IERhdGFWaWV3KHUsbCwyNCk7aWYoaC5maWxlVmVyc2lvbj1wLmdldEludDMyKDAsITApLGguaW1hZ2VUeXBlPXAuZ2V0SW50MzIoNCwhMCksaC5oZWlnaHQ9cC5nZXRVaW50MzIoOCwhMCksaC53aWR0aD1wLmdldFVpbnQzMigxMiwhMCksaC5tYXhaRXJyb3I9cC5nZXRGbG9hdDY0KDE2LCEwKSxsKz0yNCwhbSlpZihwPW5ldyBEYXRhVmlldyh1LGwsMTYpLGgubWFzaz17fSxoLm1hc2subnVtQmxvY2tzWT1wLmdldFVpbnQzMigwLCEwKSxoLm1hc2subnVtQmxvY2tzWD1wLmdldFVpbnQzMig0LCEwKSxoLm1hc2subnVtQnl0ZXM9cC5nZXRVaW50MzIoOCwhMCksaC5tYXNrLm1heFZhbHVlPXAuZ2V0RmxvYXQzMigxMiwhMCksbCs9MTYsaC5tYXNrLm51bUJ5dGVzPjApe3ZhciB5PW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChoLndpZHRoKmguaGVpZ2h0LzgpKTtwPW5ldyBEYXRhVmlldyh1LGwsaC5tYXNrLm51bUJ5dGVzKTt2YXIgVD1wLmdldEludDE2KDAsITApLF89Mix3PTA7ZG97aWYoVD4wKWZvcig7VC0tOyl5W3crK109cC5nZXRVaW50OChfKyspO2Vsc2V7dmFyIEU9cC5nZXRVaW50OChfKyspO2ZvcihUPS1UO1QtLTspeVt3KytdPUV9VD1wLmdldEludDE2KF8sITApLF8rPTJ9d2hpbGUoXzxoLm1hc2subnVtQnl0ZXMpO2lmKFQhPT0tMzI3Njh8fHc8eS5sZW5ndGgpdGhyb3ciVW5leHBlY3RlZCBlbmQgb2YgbWFzayBSTEUgZW5jb2RpbmciO2gubWFzay5iaXRzZXQ9eSxsKz1oLm1hc2subnVtQnl0ZXN9ZWxzZShoLm1hc2subnVtQnl0ZXN8aC5tYXNrLm51bUJsb2Nrc1l8aC5tYXNrLm1heFZhbHVlKT09PTAmJihoLm1hc2suYml0c2V0PW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChoLndpZHRoKmguaGVpZ2h0LzgpKSk7cD1uZXcgRGF0YVZpZXcodSxsLDE2KSxoLnBpeGVscz17fSxoLnBpeGVscy5udW1CbG9ja3NZPXAuZ2V0VWludDMyKDAsITApLGgucGl4ZWxzLm51bUJsb2Nrc1g9cC5nZXRVaW50MzIoNCwhMCksaC5waXhlbHMubnVtQnl0ZXM9cC5nZXRVaW50MzIoOCwhMCksaC5waXhlbHMubWF4VmFsdWU9cC5nZXRGbG9hdDMyKDEyLCEwKSxsKz0xNjt2YXIgUj1oLnBpeGVscy5udW1CbG9ja3NYLFM9aC5waXhlbHMubnVtQmxvY2tzWSxDPVIrKGgud2lkdGglUj4wPzE6MCksST1TKyhoLmhlaWdodCVTPjA/MTowKTtoLnBpeGVscy5ibG9ja3M9bmV3IEFycmF5KEMqSSk7Zm9yKHZhciBNPTAsUD0wO1A8STtQKyspZm9yKHZhciBGPTA7RjxDO0YrKyl7dmFyIEE9MCx4PXUuYnl0ZUxlbmd0aC1sO3A9bmV3IERhdGFWaWV3KHUsbCxNYXRoLm1pbigxMCx4KSk7dmFyIE49e307aC5waXhlbHMuYmxvY2tzW00rK109Tjt2YXIgdj1wLmdldFVpbnQ4KDApO2lmKEErKyxOLmVuY29kaW5nPXYmNjMsTi5lbmNvZGluZz4zKXRocm93IkludmFsaWQgYmxvY2sgZW5jb2RpbmcgKCIrTi5lbmNvZGluZysiKSI7aWYoTi5lbmNvZGluZz09PTIpe2wrKztjb250aW51ZX1pZih2IT09MCYmdiE9PTIpe2lmKHY+Pj02LE4ub2Zmc2V0VHlwZT12LHY9PT0yKU4ub2Zmc2V0PXAuZ2V0SW50OCgxKSxBKys7ZWxzZSBpZih2PT09MSlOLm9mZnNldD1wLmdldEludDE2KDEsITApLEErPTI7ZWxzZSBpZih2PT09MClOLm9mZnNldD1wLmdldEZsb2F0MzIoMSwhMCksQSs9NDtlbHNlIHRocm93IkludmFsaWQgYmxvY2sgb2Zmc2V0IHR5cGUiO2lmKE4uZW5jb2Rpbmc9PT0xKWlmKHY9cC5nZXRVaW50OChBKSxBKyssTi5iaXRzUGVyUGl4ZWw9diY2Myx2Pj49NixOLm51bVZhbGlkUGl4ZWxzVHlwZT12LHY9PT0yKU4ubnVtVmFsaWRQaXhlbHM9cC5nZXRVaW50OChBKSxBKys7ZWxzZSBpZih2PT09MSlOLm51bVZhbGlkUGl4ZWxzPXAuZ2V0VWludDE2KEEsITApLEErPTI7ZWxzZSBpZih2PT09MClOLm51bVZhbGlkUGl4ZWxzPXAuZ2V0VWludDMyKEEsITApLEErPTQ7ZWxzZSB0aHJvdyJJbnZhbGlkIHZhbGlkIHBpeGVsIGNvdW50IHR5cGUifWlmKGwrPUEsTi5lbmNvZGluZyE9PTMpe3ZhciBVLEw7aWYoTi5lbmNvZGluZz09PTApe3ZhciBEPShoLnBpeGVscy5udW1CeXRlcy0xKS80O2lmKEQhPT1NYXRoLmZsb29yKEQpKXRocm93InVuY29tcHJlc3NlZCBibG9jayBoYXMgaW52YWxpZCBsZW5ndGgiO1U9bmV3IEFycmF5QnVmZmVyKEQqNCksTD1uZXcgVWludDhBcnJheShVKSxMLnNldChuZXcgVWludDhBcnJheSh1LGwsRCo0KSk7dmFyIEc9bmV3IEZsb2F0MzJBcnJheShVKTtOLnJhd0RhdGE9RyxsKz1EKjR9ZWxzZSBpZihOLmVuY29kaW5nPT09MSl7dmFyIFY9TWF0aC5jZWlsKE4ubnVtVmFsaWRQaXhlbHMqTi5iaXRzUGVyUGl4ZWwvOCksTz1NYXRoLmNlaWwoVi80KTtVPW5ldyBBcnJheUJ1ZmZlcihPKjQpLEw9bmV3IFVpbnQ4QXJyYXkoVSksTC5zZXQobmV3IFVpbnQ4QXJyYXkodSxsLFYpKSxOLnN0dWZmZWREYXRhPW5ldyBVaW50MzJBcnJheShVKSxsKz1WfX19cmV0dXJuIGguZW9mT2Zmc2V0PWwsaH0sYz1mdW5jdGlvbih1LGwsbSxoLGIscCx5KXt2YXIgVD0oMTw8bCktMSxfPTAsdyxFPTAsUixTLEM9TWF0aC5jZWlsKCh5LWgpL2IpLEk9dS5sZW5ndGgqNC1NYXRoLmNlaWwobCptLzgpO2Zvcih1W3UubGVuZ3RoLTFdPDw9OCpJLHc9MDt3PG07dysrKXtpZihFPT09MCYmKFM9dVtfKytdLEU9MzIpLEU+PWwpUj1TPj4+RS1sJlQsRS09bDtlbHNle3ZhciBNPWwtRTtSPShTJlQpPDxNJlQsUz11W18rK10sRT0zMi1NLFIrPVM+Pj5FfXBbd109UjxDP2grUipiOnl9cmV0dXJuIHB9O3JldHVybiBhfSkoKSxlPShmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgYT17dW5zdHVmZjpmdW5jdGlvbihkLGMsdSxsLG0saCxiLHApe3ZhciB5PSgxPDx1KS0xLFQ9MCxfLHc9MCxFLFIsUyxDLEk9ZC5sZW5ndGgqNC1NYXRoLmNlaWwodSpsLzgpO2lmKGRbZC5sZW5ndGgtMV08PD04KkksbSlmb3IoXz0wO188bDtfKyspdz09PTAmJihSPWRbVCsrXSx3PTMyKSx3Pj11PyhFPVI+Pj53LXUmeSx3LT11KTooUz11LXcsRT0oUiZ5KTw8UyZ5LFI9ZFtUKytdLHc9MzItUyxFKz1SPj4+dyksY1tfXT1tW0VdO2Vsc2UgZm9yKEM9TWF0aC5jZWlsKChwLWgpL2IpLF89MDtfPGw7XysrKXc9PT0wJiYoUj1kW1QrK10sdz0zMiksdz49dT8oRT1SPj4+dy11Jnksdy09dSk6KFM9dS13LEU9KFImeSk8PFMmeSxSPWRbVCsrXSx3PTMyLVMsRSs9Uj4+PncpLGNbX109RTxDP2grRSpiOnB9LHVuc3R1ZmZMVVQ6ZnVuY3Rpb24oZCxjLHUsbCxtLGgpe3ZhciBiPSgxPDxjKS0xLHA9MCx5PTAsVD0wLF89MCx3PTAsRSxSPVtdLFM9ZC5sZW5ndGgqNC1NYXRoLmNlaWwoYyp1LzgpO2RbZC5sZW5ndGgtMV08PD04KlM7dmFyIEM9TWF0aC5jZWlsKChoLWwpL20pO2Zvcih5PTA7eTx1O3krKylfPT09MCYmKEU9ZFtwKytdLF89MzIpLF8+PWM/KHc9RT4+Pl8tYyZiLF8tPWMpOihUPWMtXyx3PShFJmIpPDxUJmIsRT1kW3ArK10sXz0zMi1ULHcrPUU+Pj5fKSxSW3ldPXc8Qz9sK3cqbTpoO3JldHVybiBSLnVuc2hpZnQobCksUn0sdW5zdHVmZjI6ZnVuY3Rpb24oZCxjLHUsbCxtLGgsYixwKXt2YXIgeT0oMTw8dSktMSxUPTAsXyx3PTAsRT0wLFIsUyxDO2lmKG0pZm9yKF89MDtfPGw7XysrKXc9PT0wJiYoUz1kW1QrK10sdz0zMixFPTApLHc+PXU/KFI9Uz4+PkUmeSx3LT11LEUrPXUpOihDPXUtdyxSPVM+Pj5FJnksUz1kW1QrK10sdz0zMi1DLFJ8PShTJigxPDxDKS0xKTw8dS1DLEU9QyksY1tfXT1tW1JdO2Vsc2V7dmFyIEk9TWF0aC5jZWlsKChwLWgpL2IpO2ZvcihfPTA7XzxsO18rKyl3PT09MCYmKFM9ZFtUKytdLHc9MzIsRT0wKSx3Pj11PyhSPVM+Pj5FJnksdy09dSxFKz11KTooQz11LXcsUj1TPj4+RSZ5LFM9ZFtUKytdLHc9MzItQyxSfD0oUyYoMTw8QyktMSk8PHUtQyxFPUMpLGNbX109UjxJP2grUipiOnB9cmV0dXJuIGN9LHVuc3R1ZmZMVVQyOmZ1bmN0aW9uKGQsYyx1LGwsbSxoKXt2YXIgYj0oMTw8YyktMSxwPTAseT0wLFQ9MCxfPTAsdz0wLEU9MCxSLFM9W10sQz1NYXRoLmNlaWwoKGgtbCkvbSk7Zm9yKHk9MDt5PHU7eSsrKV89PT0wJiYoUj1kW3ArK10sXz0zMixFPTApLF8+PWM/KHc9Uj4+PkUmYixfLT1jLEUrPWMpOihUPWMtXyx3PVI+Pj5FJmIsUj1kW3ArK10sXz0zMi1ULHd8PShSJigxPDxUKS0xKTw8Yy1ULEU9VCksU1t5XT13PEM/bCt3Km06aDtyZXR1cm4gUy51bnNoaWZ0KGwpLFN9LG9yaWdpbmFsVW5zdHVmZjpmdW5jdGlvbihkLGMsdSxsKXt2YXIgbT0oMTw8dSktMSxoPTAsYixwPTAseSxULF8sdz1kLmxlbmd0aCo0LU1hdGguY2VpbCh1KmwvOCk7Zm9yKGRbZC5sZW5ndGgtMV08PD04KncsYj0wO2I8bDtiKyspcD09PTAmJihUPWRbaCsrXSxwPTMyKSxwPj11Pyh5PVQ+Pj5wLXUmbSxwLT11KTooXz11LXAseT0oVCZtKTw8XyZtLFQ9ZFtoKytdLHA9MzItXyx5Kz1UPj4+cCksY1tiXT15O3JldHVybiBjfSxvcmlnaW5hbFVuc3R1ZmYyOmZ1bmN0aW9uKGQsYyx1LGwpe3ZhciBtPSgxPDx1KS0xLGg9MCxiLHA9MCx5PTAsVCxfLHc7Zm9yKGI9MDtiPGw7YisrKXA9PT0wJiYoXz1kW2grK10scD0zMix5PTApLHA+PXU/KFQ9Xz4+PnkmbSxwLT11LHkrPXUpOih3PXUtcCxUPV8+Pj55Jm0sXz1kW2grK10scD0zMi13LFR8PShfJigxPDx3KS0xKTw8dS13LHk9dyksY1tiXT1UO3JldHVybiBjfX0scj17SFVGRk1BTl9MVVRfQklUU19NQVg6MTIsY29tcHV0ZUNoZWNrc3VtRmxldGNoZXIzMjpmdW5jdGlvbihkKXtmb3IodmFyIGM9NjU1MzUsdT02NTUzNSxsPWQubGVuZ3RoLG09TWF0aC5mbG9vcihsLzIpLGg9MDttOyl7dmFyIGI9bT49MzU5PzM1OTptO20tPWI7ZG8gYys9ZFtoKytdPDw4LHUrPWMrPWRbaCsrXTt3aGlsZSgtLWIpO2M9KGMmNjU1MzUpKyhjPj4+MTYpLHU9KHUmNjU1MzUpKyh1Pj4+MTYpfXJldHVybiBsJjEmJih1Kz1jKz1kW2hdPDw4KSxjPShjJjY1NTM1KSsoYz4+PjE2KSx1PSh1JjY1NTM1KSsodT4+PjE2KSwodTw8MTZ8Yyk+Pj4wfSxyZWFkSGVhZGVySW5mbzpmdW5jdGlvbihkLGMpe3ZhciB1PWMucHRyLGw9bmV3IFVpbnQ4QXJyYXkoZCx1LDYpLG09e307aWYobS5maWxlSWRlbnRpZmllclN0cmluZz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbCksbS5maWxlSWRlbnRpZmllclN0cmluZy5sYXN0SW5kZXhPZigiTGVyYzIiLDApIT09MCl0aHJvdyJVbmV4cGVjdGVkIGZpbGUgaWRlbnRpZmllciBzdHJpbmcgKGV4cGVjdCBMZXJjMiApOiAiK20uZmlsZUlkZW50aWZpZXJTdHJpbmc7dSs9Njt2YXIgaD1uZXcgRGF0YVZpZXcoZCx1LDgpLGI9aC5nZXRJbnQzMigwLCEwKTttLmZpbGVWZXJzaW9uPWIsdSs9NCxiPj0zJiYobS5jaGVja3N1bT1oLmdldFVpbnQzMig0LCEwKSx1Kz00KSxoPW5ldyBEYXRhVmlldyhkLHUsMTIpLG0uaGVpZ2h0PWguZ2V0VWludDMyKDAsITApLG0ud2lkdGg9aC5nZXRVaW50MzIoNCwhMCksdSs9OCxiPj00PyhtLm51bURpbXM9aC5nZXRVaW50MzIoOCwhMCksdSs9NCk6bS5udW1EaW1zPTEsaD1uZXcgRGF0YVZpZXcoZCx1LDQwKSxtLm51bVZhbGlkUGl4ZWw9aC5nZXRVaW50MzIoMCwhMCksbS5taWNyb0Jsb2NrU2l6ZT1oLmdldEludDMyKDQsITApLG0uYmxvYlNpemU9aC5nZXRJbnQzMig4LCEwKSxtLmltYWdlVHlwZT1oLmdldEludDMyKDEyLCEwKSxtLm1heFpFcnJvcj1oLmdldEZsb2F0NjQoMTYsITApLG0uek1pbj1oLmdldEZsb2F0NjQoMjQsITApLG0uek1heD1oLmdldEZsb2F0NjQoMzIsITApLHUrPTQwLGMuaGVhZGVySW5mbz1tLGMucHRyPXU7dmFyIHAseTtpZihiPj0zJiYoeT1iPj00PzUyOjQ4LHA9dGhpcy5jb21wdXRlQ2hlY2tzdW1GbGV0Y2hlcjMyKG5ldyBVaW50OEFycmF5KGQsdS15LG0uYmxvYlNpemUtMTQpKSxwIT09bS5jaGVja3N1bSkpdGhyb3ciQ2hlY2tzdW0gZmFpbGVkLiI7cmV0dXJuITB9LGNoZWNrTWluTWF4UmFuZ2VzOmZ1bmN0aW9uKGQsYyl7dmFyIHU9Yy5oZWFkZXJJbmZvLGw9dGhpcy5nZXREYXRhVHlwZUFycmF5KHUuaW1hZ2VUeXBlKSxtPXUubnVtRGltcyp0aGlzLmdldERhdGFUeXBlU2l6ZSh1LmltYWdlVHlwZSksaD10aGlzLnJlYWRTdWJBcnJheShkLGMucHRyLGwsbSksYj10aGlzLnJlYWRTdWJBcnJheShkLGMucHRyK20sbCxtKTtjLnB0cis9MiptO3ZhciBwLHk9ITA7Zm9yKHA9MDtwPHUubnVtRGltcztwKyspaWYoaFtwXSE9PWJbcF0pe3k9ITE7YnJlYWt9cmV0dXJuIHUubWluVmFsdWVzPWgsdS5tYXhWYWx1ZXM9Yix5fSxyZWFkU3ViQXJyYXk6ZnVuY3Rpb24oZCxjLHUsbCl7dmFyIG07aWYodT09PVVpbnQ4QXJyYXkpbT1uZXcgVWludDhBcnJheShkLGMsbCk7ZWxzZXt2YXIgaD1uZXcgQXJyYXlCdWZmZXIobCksYj1uZXcgVWludDhBcnJheShoKTtiLnNldChuZXcgVWludDhBcnJheShkLGMsbCkpLG09bmV3IHUoaCl9cmV0dXJuIG19LHJlYWRNYXNrOmZ1bmN0aW9uKGQsYyl7dmFyIHU9Yy5wdHIsbD1jLmhlYWRlckluZm8sbT1sLndpZHRoKmwuaGVpZ2h0LGg9bC5udW1WYWxpZFBpeGVsLGI9bmV3IERhdGFWaWV3KGQsdSw0KSxwPXt9O2lmKHAubnVtQnl0ZXM9Yi5nZXRVaW50MzIoMCwhMCksdSs9NCwoaD09PTB8fG09PT1oKSYmcC5udW1CeXRlcyE9PTApdGhyb3ciaW52YWxpZCBtYXNrIjt2YXIgeSxUO2lmKGg9PT0wKXk9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKG0vOCkpLHAuYml0c2V0PXksVD1uZXcgVWludDhBcnJheShtKSxjLnBpeGVscy5yZXN1bHRNYXNrPVQsdSs9cC5udW1CeXRlcztlbHNlIGlmKHAubnVtQnl0ZXM+MCl7eT1uZXcgVWludDhBcnJheShNYXRoLmNlaWwobS84KSksYj1uZXcgRGF0YVZpZXcoZCx1LHAubnVtQnl0ZXMpO3ZhciBfPWIuZ2V0SW50MTYoMCwhMCksdz0yLEU9MCxSPTA7ZG97aWYoXz4wKWZvcig7Xy0tOyl5W0UrK109Yi5nZXRVaW50OCh3KyspO2Vsc2UgZm9yKFI9Yi5nZXRVaW50OCh3KyspLF89LV87Xy0tOyl5W0UrK109UjtfPWIuZ2V0SW50MTYodywhMCksdys9Mn13aGlsZSh3PHAubnVtQnl0ZXMpO2lmKF8hPT0tMzI3Njh8fEU8eS5sZW5ndGgpdGhyb3ciVW5leHBlY3RlZCBlbmQgb2YgbWFzayBSTEUgZW5jb2RpbmciO1Q9bmV3IFVpbnQ4QXJyYXkobSk7dmFyIFM9MCxDPTA7Zm9yKEM9MDtDPG07QysrKUMmNz8oUz15W0M+PjNdLFM8PD1DJjcpOlM9eVtDPj4zXSxTJjEyOCYmKFRbQ109MSk7Yy5waXhlbHMucmVzdWx0TWFzaz1ULHAuYml0c2V0PXksdSs9cC5udW1CeXRlc31yZXR1cm4gYy5wdHI9dSxjLm1hc2s9cCwhMH0scmVhZERhdGFPbmVTd2VlcDpmdW5jdGlvbihkLGMsdSl7dmFyIGw9Yy5wdHIsbT1jLmhlYWRlckluZm8saD1tLm51bURpbXMsYj1tLndpZHRoKm0uaGVpZ2h0LHA9bS5pbWFnZVR5cGUseT1tLm51bVZhbGlkUGl4ZWwqci5nZXREYXRhVHlwZVNpemUocCkqaCxULF89Yy5waXhlbHMucmVzdWx0TWFzaztpZih1PT09VWludDhBcnJheSlUPW5ldyBVaW50OEFycmF5KGQsbCx5KTtlbHNle3ZhciB3PW5ldyBBcnJheUJ1ZmZlcih5KSxFPW5ldyBVaW50OEFycmF5KHcpO0Uuc2V0KG5ldyBVaW50OEFycmF5KGQsbCx5KSksVD1uZXcgdSh3KX1pZihULmxlbmd0aD09PWIqaCljLnBpeGVscy5yZXN1bHRQaXhlbHM9VDtlbHNle2MucGl4ZWxzLnJlc3VsdFBpeGVscz1uZXcgdShiKmgpO3ZhciBSPTAsUz0wLEM9MCxJPTA7aWYoaD4xKWZvcihDPTA7QzxoO0MrKylmb3IoST1DKmIsUz0wO1M8YjtTKyspX1tTXSYmKGMucGl4ZWxzLnJlc3VsdFBpeGVsc1tJK1NdPVRbUisrXSk7ZWxzZSBmb3IoUz0wO1M8YjtTKyspX1tTXSYmKGMucGl4ZWxzLnJlc3VsdFBpeGVsc1tTXT1UW1IrK10pfXJldHVybiBsKz15LGMucHRyPWwsITB9LHJlYWRIdWZmbWFuVHJlZTpmdW5jdGlvbihkLGMpe3ZhciB1PXRoaXMuSFVGRk1BTl9MVVRfQklUU19NQVgsbD1uZXcgRGF0YVZpZXcoZCxjLnB0ciwxNik7Yy5wdHIrPTE2O3ZhciBtPWwuZ2V0SW50MzIoMCwhMCk7aWYobTwyKXRocm93InVuc3VwcG9ydGVkIEh1ZmZtYW4gdmVyc2lvbiI7dmFyIGg9bC5nZXRJbnQzMig0LCEwKSxiPWwuZ2V0SW50MzIoOCwhMCkscD1sLmdldEludDMyKDEyLCEwKTtpZihiPj1wKXJldHVybiExO3ZhciB5PW5ldyBVaW50MzJBcnJheShwLWIpO3IuZGVjb2RlQml0cyhkLGMseSk7dmFyIFQ9W10sXyx3LEUsUjtmb3IoXz1iO188cDtfKyspdz1fLShfPGg/MDpoKSxUW3ddPXtmaXJzdDp5W18tYl0sc2Vjb25kOm51bGx9O3ZhciBTPWQuYnl0ZUxlbmd0aC1jLnB0cixDPU1hdGguY2VpbChTLzQpLEk9bmV3IEFycmF5QnVmZmVyKEMqNCksTT1uZXcgVWludDhBcnJheShJKTtNLnNldChuZXcgVWludDhBcnJheShkLGMucHRyLFMpKTt2YXIgUD1uZXcgVWludDMyQXJyYXkoSSksRj0wLEEseD0wO2ZvcihBPVBbMF0sXz1iO188cDtfKyspdz1fLShfPGg/MDpoKSxSPVRbd10uZmlyc3QsUj4wJiYoVFt3XS5zZWNvbmQ9QTw8Rj4+PjMyLVIsMzItRj49Uj8oRis9UixGPT09MzImJihGPTAseCsrLEE9UFt4XSkpOihGKz1SLTMyLHgrKyxBPVBbeF0sVFt3XS5zZWNvbmR8PUE+Pj4zMi1GKSk7dmFyIE49MCx2PTAsVT1uZXcgaTtmb3IoXz0wO188VC5sZW5ndGg7XysrKVRbX10hPT12b2lkIDAmJihOPU1hdGgubWF4KE4sVFtfXS5maXJzdCkpO04+PXU/dj11OnY9TixOPj0zMCYmY29uc29sZS5sb2coIldBUm5pbmcsIGxhcmdlIE5VTSBMVVQgQklUUyBJUyAiK04pO3ZhciBMPVtdLEQsRyxWLE8sSixyZTtmb3IoXz1iO188cDtfKyspaWYodz1fLShfPGg/MDpoKSxSPVRbd10uZmlyc3QsUj4wKWlmKEQ9W1Isd10sUjw9dilmb3IoRz1UW3ddLnNlY29uZDw8di1SLFY9MTw8di1SLEU9MDtFPFY7RSsrKUxbR3xFXT1EO2Vsc2UgZm9yKEc9VFt3XS5zZWNvbmQscmU9VSxPPVItMTtPPj0wO08tLSlKPUc+Pj5PJjEsSj8ocmUucmlnaHR8fChyZS5yaWdodD1uZXcgaSkscmU9cmUucmlnaHQpOihyZS5sZWZ0fHwocmUubGVmdD1uZXcgaSkscmU9cmUubGVmdCksTz09PTAmJiFyZS52YWwmJihyZS52YWw9RFsxXSk7cmV0dXJue2RlY29kZUx1dDpMLG51bUJpdHNMVVRRaWNrOnYsbnVtQml0c0xVVDpOLHRyZWU6VSxzdHVmZmVkRGF0YTpQLHNyY1B0cjp4LGJpdFBvczpGfX0scmVhZEh1ZmZtYW46ZnVuY3Rpb24oZCxjLHUpe3ZhciBsPWMuaGVhZGVySW5mbyxtPWwubnVtRGltcyxoPWMuaGVhZGVySW5mby5oZWlnaHQsYj1jLmhlYWRlckluZm8ud2lkdGgscD1iKmgseT10aGlzLnJlYWRIdWZmbWFuVHJlZShkLGMpLFQ9eS5kZWNvZGVMdXQsXz15LnRyZWUsdz15LnN0dWZmZWREYXRhLEU9eS5zcmNQdHIsUj15LmJpdFBvcyxTPXkubnVtQml0c0xVVFFpY2ssQz15Lm51bUJpdHNMVVQsST1jLmhlYWRlckluZm8uaW1hZ2VUeXBlPT09MD8xMjg6MCxNLFAsRixBPWMucGl4ZWxzLnJlc3VsdE1hc2sseCxOLHYsVSxMLEQsRyxWPTA7Uj4wJiYoRSsrLFI9MCk7dmFyIE89d1tFXSxKPWMuZW5jb2RlTW9kZT09PTEscmU9bmV3IHUocCptKSxzZT1yZSxvZTtmb3Iob2U9MDtvZTxsLm51bURpbXM7b2UrKyl7aWYobT4xJiYoc2U9bmV3IHUocmUuYnVmZmVyLHAqb2UscCksVj0wKSxjLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbD09PWIqaClmb3IoRD0wLFU9MDtVPGg7VSsrKWZvcihMPTA7TDxiO0wrKyxEKyspe2lmKFA9MCx4PU88PFI+Pj4zMi1TLE49eCwzMi1SPFMmJih4fD13W0UrMV0+Pj42NC1SLVMsTj14KSxUW05dKVA9VFtOXVsxXSxSKz1UW05dWzBdO2Vsc2UgZm9yKHg9Tzw8Uj4+PjMyLUMsTj14LDMyLVI8QyYmKHh8PXdbRSsxXT4+PjY0LVItQyxOPXgpLE09XyxHPTA7RzxDO0crKylpZih2PXg+Pj5DLUctMSYxLE09dj9NLnJpZ2h0Ok0ubGVmdCwhKE0ubGVmdHx8TS5yaWdodCkpe1A9TS52YWwsUj1SK0crMTticmVha31SPj0zMiYmKFItPTMyLEUrKyxPPXdbRV0pLEY9UC1JLEo/KEw+MD9GKz1WOlU+MD9GKz1zZVtELWJdOkYrPVYsRiY9MjU1LHNlW0RdPUYsVj1GKTpzZVtEXT1GfWVsc2UgZm9yKEQ9MCxVPTA7VTxoO1UrKylmb3IoTD0wO0w8YjtMKyssRCsrKWlmKEFbRF0pe2lmKFA9MCx4PU88PFI+Pj4zMi1TLE49eCwzMi1SPFMmJih4fD13W0UrMV0+Pj42NC1SLVMsTj14KSxUW05dKVA9VFtOXVsxXSxSKz1UW05dWzBdO2Vsc2UgZm9yKHg9Tzw8Uj4+PjMyLUMsTj14LDMyLVI8QyYmKHh8PXdbRSsxXT4+PjY0LVItQyxOPXgpLE09XyxHPTA7RzxDO0crKylpZih2PXg+Pj5DLUctMSYxLE09dj9NLnJpZ2h0Ok0ubGVmdCwhKE0ubGVmdHx8TS5yaWdodCkpe1A9TS52YWwsUj1SK0crMTticmVha31SPj0zMiYmKFItPTMyLEUrKyxPPXdbRV0pLEY9UC1JLEo/KEw+MCYmQVtELTFdP0YrPVY6VT4wJiZBW0QtYl0/Ris9c2VbRC1iXTpGKz1WLEYmPTI1NSxzZVtEXT1GLFY9Rik6c2VbRF09Rn1jLnB0cj1jLnB0cisoRSsxKSo0KyhSPjA/NDowKX1jLnBpeGVscy5yZXN1bHRQaXhlbHM9cmV9LGRlY29kZUJpdHM6ZnVuY3Rpb24oZCxjLHUsbCxtKXt7dmFyIGg9Yy5oZWFkZXJJbmZvLGI9aC5maWxlVmVyc2lvbixwPTAseT1uZXcgRGF0YVZpZXcoZCxjLnB0ciw1KSxUPXkuZ2V0VWludDgoMCk7cCsrO3ZhciBfPVQ+PjYsdz1fPT09MD80OjMtXyxFPShUJjMyKT4wLFI9VCYzMSxTPTA7aWYodz09PTEpUz15LmdldFVpbnQ4KHApLHArKztlbHNlIGlmKHc9PT0yKVM9eS5nZXRVaW50MTYocCwhMCkscCs9MjtlbHNlIGlmKHc9PT00KVM9eS5nZXRVaW50MzIocCwhMCkscCs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSI7dmFyIEM9MipoLm1heFpFcnJvcixJLE0sUCxGLEEseCxOLHYsVSxMLEQ9aC5udW1EaW1zPjE/aC5tYXhWYWx1ZXNbbV06aC56TWF4O2lmKEUpe2ZvcihjLmNvdW50ZXIubHV0Kyssdj15LmdldFVpbnQ4KHApLFU9UixwKyssRj1NYXRoLmNlaWwoKHYtMSkqUi84KSxBPU1hdGguY2VpbChGLzQpLE09bmV3IEFycmF5QnVmZmVyKEEqNCksUD1uZXcgVWludDhBcnJheShNKSxjLnB0cis9cCxQLnNldChuZXcgVWludDhBcnJheShkLGMucHRyLEYpKSxOPW5ldyBVaW50MzJBcnJheShNKSxjLnB0cis9RixMPTA7di0xPj4+TDspTCsrO0Y9TWF0aC5jZWlsKFMqTC84KSxBPU1hdGguY2VpbChGLzQpLE09bmV3IEFycmF5QnVmZmVyKEEqNCksUD1uZXcgVWludDhBcnJheShNKSxQLnNldChuZXcgVWludDhBcnJheShkLGMucHRyLEYpKSxJPW5ldyBVaW50MzJBcnJheShNKSxjLnB0cis9RixiPj0zP3g9YS51bnN0dWZmTFVUMihOLFIsdi0xLGwsQyxEKTp4PWEudW5zdHVmZkxVVChOLFIsdi0xLGwsQyxEKSxiPj0zP2EudW5zdHVmZjIoSSx1LEwsUyx4KTphLnVuc3R1ZmYoSSx1LEwsUyx4KX1lbHNlIGMuY291bnRlci5iaXRzdHVmZmVyKyssTD1SLGMucHRyKz1wLEw+MCYmKEY9TWF0aC5jZWlsKFMqTC84KSxBPU1hdGguY2VpbChGLzQpLE09bmV3IEFycmF5QnVmZmVyKEEqNCksUD1uZXcgVWludDhBcnJheShNKSxQLnNldChuZXcgVWludDhBcnJheShkLGMucHRyLEYpKSxJPW5ldyBVaW50MzJBcnJheShNKSxjLnB0cis9RixiPj0zP2w9PW51bGw/YS5vcmlnaW5hbFVuc3R1ZmYyKEksdSxMLFMpOmEudW5zdHVmZjIoSSx1LEwsUywhMSxsLEMsRCk6bD09bnVsbD9hLm9yaWdpbmFsVW5zdHVmZihJLHUsTCxTKTphLnVuc3R1ZmYoSSx1LEwsUywhMSxsLEMsRCkpfX0scmVhZFRpbGVzOmZ1bmN0aW9uKGQsYyx1KXt2YXIgbD1jLmhlYWRlckluZm8sbT1sLndpZHRoLGg9bC5oZWlnaHQsYj1sLm1pY3JvQmxvY2tTaXplLHA9bC5pbWFnZVR5cGUseT1yLmdldERhdGFUeXBlU2l6ZShwKSxUPU1hdGguY2VpbChtL2IpLF89TWF0aC5jZWlsKGgvYik7Yy5waXhlbHMubnVtQmxvY2tzWT1fLGMucGl4ZWxzLm51bUJsb2Nrc1g9VCxjLnBpeGVscy5wdHI9MDt2YXIgdz0wLEU9MCxSPTAsUz0wLEM9MCxJPTAsTT0wLFA9MCxGPTAsQT0wLHg9MCxOPTAsdj0wLFU9MCxMPTAsRD0wLEcsVixPLEoscmUsc2Usb2U9bmV3IHUoYipiKSxjZT1oJWJ8fGIsbWU9bSVifHxiLGRlLHllLGxlPWwubnVtRGltcyxlZSxFZT1jLnBpeGVscy5yZXN1bHRNYXNrLENlPWMucGl4ZWxzLnJlc3VsdFBpeGVscztmb3IoUj0wO1I8XztSKyspZm9yKEM9UiE9PV8tMT9iOmNlLFM9MDtTPFQ7UysrKWZvcihJPVMhPT1ULTE/YjptZSx4PVIqbSpiK1MqYixOPW0tSSxlZT0wO2VlPGxlO2VlKyspe2lmKGxlPjEmJihDZT1uZXcgdShjLnBpeGVscy5yZXN1bHRQaXhlbHMuYnVmZmVyLG0qaCplZSp5LG0qaCkpLE09ZC5ieXRlTGVuZ3RoLWMucHRyLEc9bmV3IERhdGFWaWV3KGQsYy5wdHIsTWF0aC5taW4oMTAsTSkpLFY9e30sRD0wLFA9Ry5nZXRVaW50OCgwKSxEKyssRj1QPj42JjI1NSxBPVA+PjImMTUsQSE9PShTKmI+PjMmMTUpKXRocm93ImludGVncml0eSBpc3N1ZSI7aWYoc2U9UCYzLHNlPjMpdGhyb3cgYy5wdHIrPUQsIkludmFsaWQgYmxvY2sgZW5jb2RpbmcgKCIrc2UrIikiO2lmKHNlPT09Mil7Yy5jb3VudGVyLmNvbnN0YW50KyssYy5wdHIrPUQ7Y29udGludWV9ZWxzZSBpZihzZT09PTApe2lmKGMuY291bnRlci51bmNvbXByZXNzZWQrKyxjLnB0cis9RCx2PUMqSSp5LFU9ZC5ieXRlTGVuZ3RoLWMucHRyLHY9djxVP3Y6VSxPPW5ldyBBcnJheUJ1ZmZlcih2JXk9PT0wP3Y6dit5LXYleSksSj1uZXcgVWludDhBcnJheShPKSxKLnNldChuZXcgVWludDhBcnJheShkLGMucHRyLHYpKSxyZT1uZXcgdShPKSxMPTAsRWUpZm9yKHc9MDt3PEM7dysrKXtmb3IoRT0wO0U8STtFKyspRWVbeF0mJihDZVt4XT1yZVtMKytdKSx4Kys7eCs9Tn1lbHNlIGZvcih3PTA7dzxDO3crKyl7Zm9yKEU9MDtFPEk7RSsrKUNlW3grK109cmVbTCsrXTt4Kz1OfWMucHRyKz1MKnl9ZWxzZSBpZihkZT1yLmdldERhdGFUeXBlVXNlZChwLEYpLHllPXIuZ2V0T25lUGl4ZWwoVixELGRlLEcpLEQrPXIuZ2V0RGF0YVR5cGVTaXplKGRlKSxzZT09PTMpaWYoYy5wdHIrPUQsYy5jb3VudGVyLmNvbnN0YW50b2Zmc2V0KyssRWUpZm9yKHc9MDt3PEM7dysrKXtmb3IoRT0wO0U8STtFKyspRWVbeF0mJihDZVt4XT15ZSkseCsrO3grPU59ZWxzZSBmb3Iodz0wO3c8Qzt3Kyspe2ZvcihFPTA7RTxJO0UrKylDZVt4KytdPXllO3grPU59ZWxzZSBpZihjLnB0cis9RCxyLmRlY29kZUJpdHMoZCxjLG9lLHllLGVlKSxEPTAsRWUpZm9yKHc9MDt3PEM7dysrKXtmb3IoRT0wO0U8STtFKyspRWVbeF0mJihDZVt4XT1vZVtEKytdKSx4Kys7eCs9Tn1lbHNlIGZvcih3PTA7dzxDO3crKyl7Zm9yKEU9MDtFPEk7RSsrKUNlW3grK109b2VbRCsrXTt4Kz1OfX19LGZvcm1hdEZpbGVJbmZvOmZ1bmN0aW9uKGQpe3JldHVybntmaWxlSWRlbnRpZmllclN0cmluZzpkLmhlYWRlckluZm8uZmlsZUlkZW50aWZpZXJTdHJpbmcsZmlsZVZlcnNpb246ZC5oZWFkZXJJbmZvLmZpbGVWZXJzaW9uLGltYWdlVHlwZTpkLmhlYWRlckluZm8uaW1hZ2VUeXBlLGhlaWdodDpkLmhlYWRlckluZm8uaGVpZ2h0LHdpZHRoOmQuaGVhZGVySW5mby53aWR0aCxudW1WYWxpZFBpeGVsOmQuaGVhZGVySW5mby5udW1WYWxpZFBpeGVsLG1pY3JvQmxvY2tTaXplOmQuaGVhZGVySW5mby5taWNyb0Jsb2NrU2l6ZSxibG9iU2l6ZTpkLmhlYWRlckluZm8uYmxvYlNpemUsbWF4WkVycm9yOmQuaGVhZGVySW5mby5tYXhaRXJyb3IscGl4ZWxUeXBlOnIuZ2V0UGl4ZWxUeXBlKGQuaGVhZGVySW5mby5pbWFnZVR5cGUpLGVvZk9mZnNldDpkLmVvZk9mZnNldCxtYXNrOmQubWFzaz97bnVtQnl0ZXM6ZC5tYXNrLm51bUJ5dGVzfTpudWxsLHBpeGVsczp7bnVtQmxvY2tzWDpkLnBpeGVscy5udW1CbG9ja3NYLG51bUJsb2Nrc1k6ZC5waXhlbHMubnVtQmxvY2tzWSxtYXhWYWx1ZTpkLmhlYWRlckluZm8uek1heCxtaW5WYWx1ZTpkLmhlYWRlckluZm8uek1pbixub0RhdGFWYWx1ZTpkLm5vRGF0YVZhbHVlfX19LGNvbnN0cnVjdENvbnN0YW50U3VyZmFjZTpmdW5jdGlvbihkKXt2YXIgYz1kLmhlYWRlckluZm8uek1heCx1PWQuaGVhZGVySW5mby5udW1EaW1zLGw9ZC5oZWFkZXJJbmZvLmhlaWdodCpkLmhlYWRlckluZm8ud2lkdGgsbT1sKnUsaD0wLGI9MCxwPTAseT1kLnBpeGVscy5yZXN1bHRNYXNrO2lmKHkpaWYodT4xKWZvcihoPTA7aDx1O2grKylmb3IocD1oKmwsYj0wO2I8bDtiKyspeVtiXSYmKGQucGl4ZWxzLnJlc3VsdFBpeGVsc1twK2JdPWMpO2Vsc2UgZm9yKGI9MDtiPGw7YisrKXlbYl0mJihkLnBpeGVscy5yZXN1bHRQaXhlbHNbYl09Yyk7ZWxzZSBpZihkLnBpeGVscy5yZXN1bHRQaXhlbHMuZmlsbClkLnBpeGVscy5yZXN1bHRQaXhlbHMuZmlsbChjKTtlbHNlIGZvcihiPTA7YjxtO2IrKylkLnBpeGVscy5yZXN1bHRQaXhlbHNbYl09Y30sZ2V0RGF0YVR5cGVBcnJheTpmdW5jdGlvbihkKXt2YXIgYztzd2l0Y2goZCl7Y2FzZSAwOmM9SW50OEFycmF5O2JyZWFrO2Nhc2UgMTpjPVVpbnQ4QXJyYXk7YnJlYWs7Y2FzZSAyOmM9SW50MTZBcnJheTticmVhaztjYXNlIDM6Yz1VaW50MTZBcnJheTticmVhaztjYXNlIDQ6Yz1JbnQzMkFycmF5O2JyZWFrO2Nhc2UgNTpjPVVpbnQzMkFycmF5O2JyZWFrO2Nhc2UgNjpjPUZsb2F0MzJBcnJheTticmVhaztjYXNlIDc6Yz1GbG9hdDY0QXJyYXk7YnJlYWs7ZGVmYXVsdDpjPUZsb2F0MzJBcnJheX1yZXR1cm4gY30sZ2V0UGl4ZWxUeXBlOmZ1bmN0aW9uKGQpe3ZhciBjO3N3aXRjaChkKXtjYXNlIDA6Yz0iUzgiO2JyZWFrO2Nhc2UgMTpjPSJVOCI7YnJlYWs7Y2FzZSAyOmM9IlMxNiI7YnJlYWs7Y2FzZSAzOmM9IlUxNiI7YnJlYWs7Y2FzZSA0OmM9IlMzMiI7YnJlYWs7Y2FzZSA1OmM9IlUzMiI7YnJlYWs7Y2FzZSA2OmM9IkYzMiI7YnJlYWs7Y2FzZSA3OmM9IkY2NCI7YnJlYWs7ZGVmYXVsdDpjPSJGMzIifXJldHVybiBjfSxpc1ZhbGlkUGl4ZWxWYWx1ZTpmdW5jdGlvbihkLGMpe2lmKGM9PW51bGwpcmV0dXJuITE7dmFyIHU7c3dpdGNoKGQpe2Nhc2UgMDp1PWM+PS0xMjgmJmM8PTEyNzticmVhaztjYXNlIDE6dT1jPj0wJiZjPD0yNTU7YnJlYWs7Y2FzZSAyOnU9Yz49LTMyNzY4JiZjPD0zMjc2NzticmVhaztjYXNlIDM6dT1jPj0wJiZjPD02NTUzNjticmVhaztjYXNlIDQ6dT1jPj0tMjE0NzQ4MzY0OCYmYzw9MjE0NzQ4MzY0NzticmVhaztjYXNlIDU6dT1jPj0wJiZjPD00Mjk0OTY3Mjk2O2JyZWFrO2Nhc2UgNjp1PWM+PS0zNDAyNzk5OTM4NzkwMTQ4NGUyMiYmYzw9MzQwMjc5OTkzODc5MDE0ODRlMjI7YnJlYWs7Y2FzZSA3OnU9Yz49NWUtMzI0JiZjPD0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7YnJlYWs7ZGVmYXVsdDp1PSExfXJldHVybiB1fSxnZXREYXRhVHlwZVNpemU6ZnVuY3Rpb24oZCl7dmFyIGM9MDtzd2l0Y2goZCl7Y2FzZSAwOmNhc2UgMTpjPTE7YnJlYWs7Y2FzZSAyOmNhc2UgMzpjPTI7YnJlYWs7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Yz00O2JyZWFrO2Nhc2UgNzpjPTg7YnJlYWs7ZGVmYXVsdDpjPWR9cmV0dXJuIGN9LGdldERhdGFUeXBlVXNlZDpmdW5jdGlvbihkLGMpe3ZhciB1PWQ7c3dpdGNoKGQpe2Nhc2UgMjpjYXNlIDQ6dT1kLWM7YnJlYWs7Y2FzZSAzOmNhc2UgNTp1PWQtMipjO2JyZWFrO2Nhc2UgNjpjPT09MD91PWQ6Yz09PTE/dT0yOnU9MTticmVhaztjYXNlIDc6Yz09PTA/dT1kOnU9ZC0yKmMrMTticmVhaztkZWZhdWx0OnU9ZDticmVha31yZXR1cm4gdX0sZ2V0T25lUGl4ZWw6ZnVuY3Rpb24oZCxjLHUsbCl7dmFyIG09MDtzd2l0Y2godSl7Y2FzZSAwOm09bC5nZXRJbnQ4KGMpO2JyZWFrO2Nhc2UgMTptPWwuZ2V0VWludDgoYyk7YnJlYWs7Y2FzZSAyOm09bC5nZXRJbnQxNihjLCEwKTticmVhaztjYXNlIDM6bT1sLmdldFVpbnQxNihjLCEwKTticmVhaztjYXNlIDQ6bT1sLmdldEludDMyKGMsITApO2JyZWFrO2Nhc2UgNTptPWwuZ2V0VUludDMyKGMsITApO2JyZWFrO2Nhc2UgNjptPWwuZ2V0RmxvYXQzMihjLCEwKTticmVhaztjYXNlIDc6bT1sLmdldEZsb2F0NjQoYywhMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJ0aGUgZGVjb2RlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoaXMgcGl4ZWwgdHlwZSJ9cmV0dXJuIG19fSxpPWZ1bmN0aW9uKGQsYyx1KXt0aGlzLnZhbD1kLHRoaXMubGVmdD1jLHRoaXMucmlnaHQ9dX0sZj17ZGVjb2RlOmZ1bmN0aW9uKGQsYyl7Yz1jfHx7fTt2YXIgdT1jLm5vRGF0YVZhbHVlLGw9MCxtPXt9O2lmKG0ucHRyPWMuaW5wdXRPZmZzZXR8fDAsbS5waXhlbHM9e30sISFyLnJlYWRIZWFkZXJJbmZvKGQsbSkpe3ZhciBoPW0uaGVhZGVySW5mbyxiPWguZmlsZVZlcnNpb24scD1yLmdldERhdGFUeXBlQXJyYXkoaC5pbWFnZVR5cGUpO3IucmVhZE1hc2soZCxtKSxoLm51bVZhbGlkUGl4ZWwhPT1oLndpZHRoKmguaGVpZ2h0JiYhbS5waXhlbHMucmVzdWx0TWFzayYmKG0ucGl4ZWxzLnJlc3VsdE1hc2s9Yy5tYXNrRGF0YSk7dmFyIHk9aC53aWR0aCpoLmhlaWdodDtpZihtLnBpeGVscy5yZXN1bHRQaXhlbHM9bmV3IHAoeSpoLm51bURpbXMpLG0uY291bnRlcj17b25lc3dlZXA6MCx1bmNvbXByZXNzZWQ6MCxsdXQ6MCxiaXRzdHVmZmVyOjAsY29uc3RhbnQ6MCxjb25zdGFudG9mZnNldDowfSxoLm51bVZhbGlkUGl4ZWwhPT0wKWlmKGguek1heD09PWguek1pbilyLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZShtKTtlbHNlIGlmKGI+PTQmJnIuY2hlY2tNaW5NYXhSYW5nZXMoZCxtKSlyLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZShtKTtlbHNle3ZhciBUPW5ldyBEYXRhVmlldyhkLG0ucHRyLDIpLF89VC5nZXRVaW50OCgwKTtpZihtLnB0cisrLF8pci5yZWFkRGF0YU9uZVN3ZWVwKGQsbSxwKTtlbHNlIGlmKGI+MSYmaC5pbWFnZVR5cGU8PTEmJk1hdGguYWJzKGgubWF4WkVycm9yLS41KTwxZS01KXt2YXIgdz1ULmdldFVpbnQ4KDEpO2lmKG0ucHRyKyssbS5lbmNvZGVNb2RlPXcsdz4yfHxiPDQmJnc+MSl0aHJvdyJJbnZhbGlkIEh1ZmZtYW4gZmxhZyAiK3c7dz9yLnJlYWRIdWZmbWFuKGQsbSxwKTpyLnJlYWRUaWxlcyhkLG0scCl9ZWxzZSByLnJlYWRUaWxlcyhkLG0scCl9bS5lb2ZPZmZzZXQ9bS5wdHI7dmFyIEU7Yy5pbnB1dE9mZnNldD8oRT1tLmhlYWRlckluZm8uYmxvYlNpemUrYy5pbnB1dE9mZnNldC1tLnB0cixNYXRoLmFicyhFKT49MSYmKG0uZW9mT2Zmc2V0PWMuaW5wdXRPZmZzZXQrbS5oZWFkZXJJbmZvLmJsb2JTaXplKSk6KEU9bS5oZWFkZXJJbmZvLmJsb2JTaXplLW0ucHRyLE1hdGguYWJzKEUpPj0xJiYobS5lb2ZPZmZzZXQ9bS5oZWFkZXJJbmZvLmJsb2JTaXplKSk7dmFyIFI9e3dpZHRoOmgud2lkdGgsaGVpZ2h0OmguaGVpZ2h0LHBpeGVsRGF0YTptLnBpeGVscy5yZXN1bHRQaXhlbHMsbWluVmFsdWU6aC56TWluLG1heFZhbHVlOmguek1heCx2YWxpZFBpeGVsQ291bnQ6aC5udW1WYWxpZFBpeGVsLGRpbUNvdW50OmgubnVtRGltcyxkaW1TdGF0czp7bWluVmFsdWVzOmgubWluVmFsdWVzLG1heFZhbHVlczpoLm1heFZhbHVlc30sbWFza0RhdGE6bS5waXhlbHMucmVzdWx0TWFza307aWYobS5waXhlbHMucmVzdWx0TWFzayYmci5pc1ZhbGlkUGl4ZWxWYWx1ZShoLmltYWdlVHlwZSx1KSl7dmFyIFM9bS5waXhlbHMucmVzdWx0TWFzaztmb3IobD0wO2w8eTtsKyspU1tsXXx8KFIucGl4ZWxEYXRhW2xdPXUpO1Iubm9EYXRhVmFsdWU9dX1yZXR1cm4gbS5ub0RhdGFWYWx1ZT11LGMucmV0dXJuRmlsZUluZm8mJihSLmZpbGVJbmZvPXIuZm9ybWF0RmlsZUluZm8obSkpLFJ9fSxnZXRCYW5kQ291bnQ6ZnVuY3Rpb24oZCl7dmFyIGM9MCx1PTAsbD17fTtmb3IobC5wdHI9MCxsLnBpeGVscz17fTt1PGQuYnl0ZUxlbmd0aC01ODspci5yZWFkSGVhZGVySW5mbyhkLGwpLHUrPWwuaGVhZGVySW5mby5ibG9iU2l6ZSxjKyssbC5wdHI9dTtyZXR1cm4gY319O3JldHVybiBmfSkoKSx0PShmdW5jdGlvbigpe3ZhciBhPW5ldyBBcnJheUJ1ZmZlcig0KSxyPW5ldyBVaW50OEFycmF5KGEpLGk9bmV3IFVpbnQzMkFycmF5KGEpO3JldHVybiBpWzBdPTEsclswXT09PTF9KSgpLG89e2RlY29kZTpmdW5jdGlvbihhLHIpe2lmKCF0KXRocm93IkJpZyBlbmRpYW4gc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQuIjtyPXJ8fHt9O3ZhciBpPXIuaW5wdXRPZmZzZXR8fDAsZj1uZXcgVWludDhBcnJheShhLGksMTApLGQ9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGYpLGMsdTtpZihkLnRyaW0oKT09PSJDbnRaSW1hZ2UiKWM9bix1PTE7ZWxzZSBpZihkLnN1YnN0cmluZygwLDUpPT09IkxlcmMyIiljPWUsdT0yO2Vsc2UgdGhyb3ciVW5leHBlY3RlZCBmaWxlIGlkZW50aWZpZXIgc3RyaW5nOiAiK2Q7Zm9yKHZhciBsPTAsbT1hLmJ5dGVMZW5ndGgtMTAsaCxiPVtdLHAseSxUPXt3aWR0aDowLGhlaWdodDowLHBpeGVsczpbXSxwaXhlbFR5cGU6ci5waXhlbFR5cGUsbWFzazpudWxsLHN0YXRpc3RpY3M6W119O2k8bTspe3ZhciBfPWMuZGVjb2RlKGEse2lucHV0T2Zmc2V0OmksZW5jb2RlZE1hc2tEYXRhOmgsbWFza0RhdGE6eSxyZXR1cm5NYXNrOmw9PT0wLHJldHVybkVuY29kZWRNYXNrOmw9PT0wLHJldHVybkZpbGVJbmZvOiEwLHBpeGVsVHlwZTpyLnBpeGVsVHlwZXx8bnVsbCxub0RhdGFWYWx1ZTpyLm5vRGF0YVZhbHVlfHxudWxsfSk7aT1fLmZpbGVJbmZvLmVvZk9mZnNldCxsPT09MCYmKGg9Xy5lbmNvZGVkTWFza0RhdGEseT1fLm1hc2tEYXRhLFQud2lkdGg9Xy53aWR0aCxULmhlaWdodD1fLmhlaWdodCxULmRpbUNvdW50PV8uZGltQ291bnR8fDEsVC5waXhlbFR5cGU9Xy5waXhlbFR5cGV8fF8uZmlsZUluZm8ucGl4ZWxUeXBlLFQubWFzaz1fLm1hc2tEYXRhKSx1PjEmJl8uZmlsZUluZm8ubWFzayYmXy5maWxlSW5mby5tYXNrLm51bUJ5dGVzPjAmJmIucHVzaChfLm1hc2tEYXRhKSxsKyssVC5waXhlbHMucHVzaChfLnBpeGVsRGF0YSksVC5zdGF0aXN0aWNzLnB1c2goe21pblZhbHVlOl8ubWluVmFsdWUsbWF4VmFsdWU6Xy5tYXhWYWx1ZSxub0RhdGFWYWx1ZTpfLm5vRGF0YVZhbHVlLGRpbVN0YXRzOl8uZGltU3RhdHN9KX12YXIgdyxFLFI7aWYodT4xJiZiLmxlbmd0aD4xKXtmb3IoUj1ULndpZHRoKlQuaGVpZ2h0LFQuYmFuZE1hc2tzPWIseT1uZXcgVWludDhBcnJheShSKSx5LnNldChiWzBdKSx3PTE7dzxiLmxlbmd0aDt3KyspZm9yKHA9Ylt3XSxFPTA7RTxSO0UrKyl5W0VdPXlbRV0mcFtFXTtULm1hc2tEYXRhPXl9cmV0dXJuIFR9fTt0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBvfSk6dHlwZW9mIGJtPCJ1IiYmYm0uZXhwb3J0cz9ibS5leHBvcnRzPW86dGhpcy5MZXJjPW99KSgpfSk7dmFyIG95PXt9OyRlKG95LHtkZWZhdWx0OigpPT5HTH0pO2Z1bmN0aW9uIHpMKG4sZSl7aWYobi5lbmNvZGluZz09PVZ4LkxFUkMpe2xldCBhO3RyeXthPVh4LmRlZmF1bHQuZGVjb2RlKG4uaGVpZ2h0bWFwKX1jYXRjaChpKXt0aHJvdyBuZXcgbnQoaSl9aWYoYS5zdGF0aXN0aWNzWzBdLm1pblZhbHVlPT09TnVtYmVyLk1BWF9WQUxVRSl0aHJvdyBuZXcgbnQoIkludmFsaWQgdGlsZSBkYXRhIik7bi5oZWlnaHRtYXA9YS5waXhlbHNbMF0sbi53aWR0aD1hLndpZHRoLG4uaGVpZ2h0PWEuaGVpZ2h0fW4uZWxsaXBzb2lkPUsuY2xvbmUobi5lbGxpcHNvaWQpLG4ucmVjdGFuZ2xlPXhlLmNsb25lKG4ucmVjdGFuZ2xlKTtsZXQgdD1LeC5jb21wdXRlVmVydGljZXMobiksbz10LnZlcnRpY2VzO3JldHVybiBlLnB1c2goby5idWZmZXIpLHt2ZXJ0aWNlczpvLmJ1ZmZlcixudW1iZXJPZkF0dHJpYnV0ZXM6dC5lbmNvZGluZy5zdHJpZGUsbWluaW11bUhlaWdodDp0Lm1pbmltdW1IZWlnaHQsbWF4aW11bUhlaWdodDp0Lm1heGltdW1IZWlnaHQsZ3JpZFdpZHRoOm4ud2lkdGgsZ3JpZEhlaWdodDpuLmhlaWdodCxib3VuZGluZ1NwaGVyZTNEOnQuYm91bmRpbmdTcGhlcmUzRCxvcmllbnRlZEJvdW5kaW5nQm94OnQub3JpZW50ZWRCb3VuZGluZ0JveCxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTp0Lm9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlLGVuY29kaW5nOnQuZW5jb2Rpbmcsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6dC53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxzb3V0aEluZGljZXNFYXN0VG9XZXN0OnQuc291dGhJbmRpY2VzRWFzdFRvV2VzdCxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDp0LmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6dC5ub3J0aEluZGljZXNXZXN0VG9FYXN0fX12YXIgWHgsR0wsYXk9WCgoKT0+e1ZlKCk7SHgoKTtxeCgpO2huKCk7cGEoKTtYeD1oYShXeCgpLDEpO2tuKCk7R0w9bXQoekwpfSk7dmFyIGl5PXt9OyRlKGl5LHtkZWZhdWx0OigpPT5xTH0pO2Z1bmN0aW9uIEtMKG4sZSl7bGV0IHQ9bi5xdWFudGl6ZWRWZXJ0aWNlcyxvPXQubGVuZ3RoLzMsYT1uLm9jdEVuY29kZWROb3JtYWxzLHI9bi53ZXN0SW5kaWNlcy5sZW5ndGgrbi5lYXN0SW5kaWNlcy5sZW5ndGgrbi5zb3V0aEluZGljZXMubGVuZ3RoK24ubm9ydGhJbmRpY2VzLmxlbmd0aCxpPW4uaW5jbHVkZVdlYk1lcmNhdG9yVCxmPW4uZXhhZ2dlcmF0aW9uLGQ9bi5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodCx1PWYhPT0xLGw9eGUuY2xvbmUobi5yZWN0YW5nbGUpLG09bC53ZXN0LGg9bC5zb3V0aCxiPWwuZWFzdCxwPWwubm9ydGgseT1LLmNsb25lKG4uZWxsaXBzb2lkKSxUPW4ubWluaW11bUhlaWdodCxfPW4ubWF4aW11bUhlaWdodCx3PW4ucmVsYXRpdmVUb0NlbnRlcixFPW9vLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHcseSksUj1RLmludmVyc2VUcmFuc2Zvcm1hdGlvbihFLG5ldyBRKSxTLEM7aSYmKFM9eW4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShoKSxDPTEvKHluLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUocCktUykpO2xldCBJPXQuc3ViYXJyYXkoMCxvKSxNPXQuc3ViYXJyYXkobywyKm8pLFA9dC5zdWJhcnJheShvKjIsMypvKSxGPWcoYSksQT1uZXcgQXJyYXkobykseD1uZXcgQXJyYXkobyksTj1uZXcgQXJyYXkobyksdj1pP25ldyBBcnJheShvKTpbXSxVPXU/bmV3IEFycmF5KG8pOltdLEw9Vkw7TC54PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxMLnk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEwuej1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IEQ9SEw7RC54PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxELnk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLEQuej1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7bGV0IEc9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFY9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE89TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEo9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2ZvcihsZXQgTGU9MDtMZTxvOysrTGUpe2xldCBfdD1JW0xlXSxNdD1NW0xlXSxHdD1fdC9yeSxxdD1NdC9yeSxRdD1rLmxlcnAoVCxfLFBbTGVdL3J5KTtlby5sb25naXR1ZGU9ay5sZXJwKG0sYixHdCksZW8ubGF0aXR1ZGU9ay5sZXJwKGgscCxxdCksZW8uaGVpZ2h0PVF0LEc9TWF0aC5taW4oZW8ubG9uZ2l0dWRlLEcpLFY9TWF0aC5tYXgoZW8ubG9uZ2l0dWRlLFYpLE89TWF0aC5taW4oZW8ubGF0aXR1ZGUsTyksSj1NYXRoLm1heChlby5sYXRpdHVkZSxKKTtsZXQgcG49eS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihlbyk7QVtMZV09bmV3IFkoR3QscXQpLHhbTGVdPVF0LE5bTGVdPXBuLGkmJih2W0xlXT0oeW4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShlby5sYXRpdHVkZSktUykqQyksdSYmKFVbTGVdPXkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHBuKSksUS5tdWx0aXBseUJ5UG9pbnQoUixwbixPZCkscy5taW5pbXVtQnlDb21wb25lbnQoT2QsTCxMKSxzLm1heGltdW1CeUNvbXBvbmVudChPZCxELEQpfWxldCByZT1fbShuLndlc3RJbmRpY2VzLGZ1bmN0aW9uKExlLF90KXtyZXR1cm4gQVtMZV0ueS1BW190XS55fSksc2U9X20obi5lYXN0SW5kaWNlcyxmdW5jdGlvbihMZSxfdCl7cmV0dXJuIEFbX3RdLnktQVtMZV0ueX0pLG9lPV9tKG4uc291dGhJbmRpY2VzLGZ1bmN0aW9uKExlLF90KXtyZXR1cm4gQVtfdF0ueC1BW0xlXS54fSksY2U9X20obi5ub3J0aEluZGljZXMsZnVuY3Rpb24oTGUsX3Qpe3JldHVybiBBW0xlXS54LUFbX3RdLnh9KSxtZTtUPDAmJihtZT1uZXcgQXIoeSkuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRQb3NzaWJseVVuZGVyRWxsaXBzb2lkKHcsTixUKSk7bGV0IGRlPVQ7ZGU9TWF0aC5taW4oZGUscG0obi53ZXN0SW5kaWNlcyxuLndlc3RTa2lydEhlaWdodCx4LEEsbCx5LFIsTCxEKSksZGU9TWF0aC5taW4oZGUscG0obi5zb3V0aEluZGljZXMsbi5zb3V0aFNraXJ0SGVpZ2h0LHgsQSxsLHksUixMLEQpKSxkZT1NYXRoLm1pbihkZSxwbShuLmVhc3RJbmRpY2VzLG4uZWFzdFNraXJ0SGVpZ2h0LHgsQSxsLHksUixMLEQpKSxkZT1NYXRoLm1pbihkZSxwbShuLm5vcnRoSW5kaWNlcyxuLm5vcnRoU2tpcnRIZWlnaHQseCxBLGwseSxSLEwsRCkpO2xldCB5ZT1uZXcgcm8oTCxELHcpLGxlPW5ldyBuYSh3LHllLGRlLF8sRSxGLGksdSxmLGQpLGVlPWxlLnN0cmlkZSxFZT1vKmVlK3IqZWUsQ2U9bmV3IEZsb2F0MzJBcnJheShFZSksV2U9MDtmb3IobGV0IExlPTA7TGU8bzsrK0xlKXtpZihGKXtsZXQgX3Q9TGUqMjtLcy54PWFbX3RdLEtzLnk9YVtfdCsxXX1XZT1sZS5lbmNvZGUoQ2UsV2UsTltMZV0sQVtMZV0seFtMZV0sS3MsdltMZV0sVVtMZV0pfWxldCB6ZT1NYXRoLm1heCgwLChyLTQpKjIpLFplPW4uaW5kaWNlcy5sZW5ndGgremUqMyxLZT1JZS5jcmVhdGVUeXBlZEFycmF5KG8rcixaZSk7S2Uuc2V0KG4uaW5kaWNlcywwKTtsZXQgRGU9MWUtNCxCZT0oVi1HKSpEZSxldD0oSi1PKSpEZSxxZT0tQmUsYXQ9MCx4dD1CZSxUdD0wLGN0PTAsenQ9ZXQsT3Q9MCxrdD0tZXQsR2U9byplZTtyZXR1cm4gZ20oQ2UsR2UscmUsbGUseCxBLGEseSxsLG4ud2VzdFNraXJ0SGVpZ2h0LFMsQyxxZSxhdCksR2UrPW4ud2VzdEluZGljZXMubGVuZ3RoKmVlLGdtKENlLEdlLG9lLGxlLHgsQSxhLHksbCxuLnNvdXRoU2tpcnRIZWlnaHQsUyxDLE90LGt0KSxHZSs9bi5zb3V0aEluZGljZXMubGVuZ3RoKmVlLGdtKENlLEdlLHNlLGxlLHgsQSxhLHksbCxuLmVhc3RTa2lydEhlaWdodCxTLEMseHQsVHQpLEdlKz1uLmVhc3RJbmRpY2VzLmxlbmd0aCplZSxnbShDZSxHZSxjZSxsZSx4LEEsYSx5LGwsbi5ub3J0aFNraXJ0SGVpZ2h0LFMsQyxjdCx6dCksQmkuYWRkU2tpcnRJbmRpY2VzKHJlLG9lLHNlLGNlLG8sS2Usbi5pbmRpY2VzLmxlbmd0aCksZS5wdXNoKENlLmJ1ZmZlcixLZS5idWZmZXIpLHt2ZXJ0aWNlczpDZS5idWZmZXIsaW5kaWNlczpLZS5idWZmZXIsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6cmUsc291dGhJbmRpY2VzRWFzdFRvV2VzdDpvZSxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDpzZSxub3J0aEluZGljZXNXZXN0VG9FYXN0OmNlLHZlcnRleFN0cmlkZTplZSxjZW50ZXI6dyxtaW5pbXVtSGVpZ2h0OlQsbWF4aW11bUhlaWdodDpfLG9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlOm1lLGVuY29kaW5nOmxlLGluZGV4Q291bnRXaXRob3V0U2tpcnRzOm4uaW5kaWNlcy5sZW5ndGh9fWZ1bmN0aW9uIHBtKG4sZSx0LG8sYSxyLGksZixkKXtsZXQgYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdT1hLm5vcnRoLGw9YS5zb3V0aCxtPWEuZWFzdCxoPWEud2VzdDttPGgmJihtKz1rLlRXT19QSSk7bGV0IGI9bi5sZW5ndGg7Zm9yKGxldCBwPTA7cDxiOysrcCl7bGV0IHk9bltwXSxUPXRbeV0sXz1vW3ldO2VvLmxvbmdpdHVkZT1rLmxlcnAoaCxtLF8ueCksZW8ubGF0aXR1ZGU9ay5sZXJwKGwsdSxfLnkpLGVvLmhlaWdodD1ULWU7bGV0IHc9ci5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihlbyxPZCk7US5tdWx0aXBseUJ5UG9pbnQoaSx3LHcpLHMubWluaW11bUJ5Q29tcG9uZW50KHcsZixmKSxzLm1heGltdW1CeUNvbXBvbmVudCh3LGQsZCksYz1NYXRoLm1pbihjLGVvLmhlaWdodCl9cmV0dXJuIGN9ZnVuY3Rpb24gZ20obixlLHQsbyxhLHIsaSxmLGQsYyx1LGwsbSxoKXtsZXQgYj1nKGkpLHA9ZC5ub3J0aCx5PWQuc291dGgsVD1kLmVhc3QsXz1kLndlc3Q7VDxfJiYoVCs9ay5UV09fUEkpO2xldCB3PXQubGVuZ3RoO2ZvcihsZXQgRT0wO0U8dzsrK0Upe2xldCBSPXRbRV0sUz1hW1JdLEM9cltSXTtlby5sb25naXR1ZGU9ay5sZXJwKF8sVCxDLngpK20sZW8ubGF0aXR1ZGU9ay5sZXJwKHkscCxDLnkpK2gsZW8uaGVpZ2h0PVMtYztsZXQgST1mLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGVvLE9kKTtpZihiKXtsZXQgRj1SKjI7S3MueD1pW0ZdLEtzLnk9aVtGKzFdfWxldCBNO28uaGFzV2ViTWVyY2F0b3JUJiYoTT0oeW4uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShlby5sYXRpdHVkZSktdSkqbCk7bGV0IFA7by5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiYoUD1mLmdlb2RldGljU3VyZmFjZU5vcm1hbChJKSksZT1vLmVuY29kZShuLGUsSSxDLGVvLmhlaWdodCxLcyxNLFApfX1mdW5jdGlvbiBfbShuLGUpe2xldCB0O3JldHVybiB0eXBlb2Ygbi5zbGljZT09ImZ1bmN0aW9uIiYmKHQ9bi5zbGljZSgpLHR5cGVvZiB0LnNvcnQhPSJmdW5jdGlvbiImJih0PXZvaWQgMCkpLGcodCl8fCh0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pKSx0LnNvcnQoZSksdH12YXIgcnksT2QsVkwsSEwsZW8sS3MscUwsY3k9WCgoKT0+e3lpKCk7dnQoKTtNZSgpO2d0KCk7ZmUoKTtWZSgpO0dzKCk7WnQoKTtqZSgpO3VuKCk7aG4oKTtWcygpO0tfKCk7cnIoKTtfaSgpO2tuKCk7cnk9MzI3NjcsT2Q9bmV3IHMsVkw9bmV3IHMsSEw9bmV3IHMsZW89bmV3IGFlLEtzPW5ldyBZO3FMPW10KEtMKX0pO2Z1bmN0aW9uIFdMKG4sZSl7cmV0dXJuIGsuZXF1YWxzRXBzaWxvbihuLmxhdGl0dWRlLGUubGF0aXR1ZGUsay5FUFNJTE9OMTApJiZrLmVxdWFsc0Vwc2lsb24obi5sb25naXR1ZGUsZS5sb25naXR1ZGUsay5FUFNJTE9OMTApfWZ1bmN0aW9uIEpMKG4sZSx0LG8pe2U9eG4oZSxzLmVxdWFsc0Vwc2lsb24pO2xldCBhPWUubGVuZ3RoO2lmKGE8MilyZXR1cm47bGV0IHI9ZyhvKSxpPWcodCksZj1uZXcgQXJyYXkoYSksZD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT1lWzBdO2ZbMF09dTtsZXQgbD1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHUsWEwpO2kmJihsLmhlaWdodD10WzBdKSxkWzBdPWwuaGVpZ2h0LHI/Y1swXT1vWzBdOmNbMF09MDtsZXQgbT1kWzBdLGg9Y1swXSxiPW09PT1oLHA9MTtmb3IobGV0IHk9MTt5PGE7Kyt5KXtsZXQgVD1lW3ldLF89bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhULFlMKTtpJiYoXy5oZWlnaHQ9dFt5XSksYj1iJiZfLmhlaWdodD09PTAsV0wobCxfKT9sLmhlaWdodDxfLmhlaWdodCYmKGRbcC0xXT1fLmhlaWdodCk6KGZbcF09VCxkW3BdPV8uaGVpZ2h0LHI/Y1twXT1vW3ldOmNbcF09MCxiPWImJmRbcF09PT1jW3BdLGFlLmNsb25lKF8sbCksKytwKX1pZighKGJ8fHA8MikpcmV0dXJuIGYubGVuZ3RoPXAsZC5sZW5ndGg9cCxjLmxlbmd0aD1wLHtwb3NpdGlvbnM6Zix0b3BIZWlnaHRzOmQsYm90dG9tSGVpZ2h0czpjfX12YXIgWXgsWEwsWUwsWkwsUUwsJEwseW0sc3k9WCgoKT0+e0thKCk7TWUoKTtndCgpO2ZlKCk7amUoKTt3cygpO1l4PXt9O1hMPW5ldyBhZSxZTD1uZXcgYWU7Wkw9bmV3IEFycmF5KDIpLFFMPW5ldyBBcnJheSgyKSwkTD17cG9zaXRpb25zOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxlbGxpcHNvaWQ6dm9pZCAwfTtZeC5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKG4sZSx0LG8sYSxyKXtsZXQgaT1KTChuLGUsdCxvKTtpZighZyhpKSlyZXR1cm47ZT1pLnBvc2l0aW9ucyx0PWkudG9wSGVpZ2h0cyxvPWkuYm90dG9tSGVpZ2h0cztsZXQgZj1lLmxlbmd0aCxkPWYtMixjLHUsbD1rLmNob3JkTGVuZ3RoKGEsbi5tYXhpbXVtUmFkaXVzKSxtPSRMO2lmKG0ubWluRGlzdGFuY2U9bCxtLmVsbGlwc29pZD1uLHIpe2xldCBoPTAsYjtmb3IoYj0wO2I8Zi0xO2IrKyloKz1ibi5udW1iZXJPZlBvaW50cyhlW2JdLGVbYisxXSxsKSsxO2M9bmV3IEZsb2F0NjRBcnJheShoKjMpLHU9bmV3IEZsb2F0NjRBcnJheShoKjMpO2xldCBwPVpMLHk9UUw7bS5wb3NpdGlvbnM9cCxtLmhlaWdodD15O2xldCBUPTA7Zm9yKGI9MDtiPGYtMTtiKyspe3BbMF09ZVtiXSxwWzFdPWVbYisxXSx5WzBdPXRbYl0seVsxXT10W2IrMV07bGV0IF89Ym4uZ2VuZXJhdGVBcmMobSk7Yy5zZXQoXyxUKSx5WzBdPW9bYl0seVsxXT1vW2IrMV0sdS5zZXQoYm4uZ2VuZXJhdGVBcmMobSksVCksVCs9Xy5sZW5ndGh9fWVsc2UgbS5wb3NpdGlvbnM9ZSxtLmhlaWdodD10LGM9bmV3IEZsb2F0NjRBcnJheShibi5nZW5lcmF0ZUFyYyhtKSksbS5oZWlnaHQ9byx1PW5ldyBGbG9hdDY0QXJyYXkoYm4uZ2VuZXJhdGVBcmMobSkpO3JldHVybntib3R0b21Qb3NpdGlvbnM6dSx0b3BQb3NpdGlvbnM6YyxudW1Db3JuZXJzOmR9fTt5bT1ZeH0pO2Z1bmN0aW9uIENjKG4pe249bj8/T2UuRU1QVFlfT0JKRUNUO2xldCBlPW4ucG9zaXRpb25zLHQ9bi5tYXhpbXVtSGVpZ2h0cyxvPW4ubWluaW11bUhlaWdodHMsYT1uLnZlcnRleEZvcm1hdD8/aGUuREVGQVVMVCxyPW4uZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLGk9bi5lbGxpcHNvaWQ/P0suZGVmYXVsdDt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9taW5pbXVtSGVpZ2h0cz1vLHRoaXMuX21heGltdW1IZWlnaHRzPXQsdGhpcy5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKGEpLHRoaXMuX2dyYW51bGFyaXR5PXIsdGhpcy5fZWxsaXBzb2lkPUsuY2xvbmUoaSksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlV2FsbEdlb21ldHJ5IjtsZXQgZj0xK2UubGVuZ3RoKnMucGFja2VkTGVuZ3RoKzI7ZyhvKSYmKGYrPW8ubGVuZ3RoKSxnKHQpJiYoZis9dC5sZW5ndGgpLHRoaXMucGFja2VkTGVuZ3RoPWYrSy5wYWNrZWRMZW5ndGgraGUucGFja2VkTGVuZ3RoKzF9dmFyIGZ5LEFtLGU0LEp4LHQ0LG40LG80LFp4LFF4LFNkLGR5LCR4PVgoKCk9PntFdCgpO01lKCk7Q3QoKTtzdCgpO2ZlKCk7VmUoKTtYdCgpO1l0KCk7cm4oKTtadCgpO2plKCk7dG4oKTtDbygpO3N5KCk7Znk9bmV3IHMsQW09bmV3IHMsZTQ9bmV3IHMsSng9bmV3IHMsdDQ9bmV3IHMsbjQ9bmV3IHMsbzQ9bmV3IHM7Q2MucGFjaz1mdW5jdGlvbihuLGUsdCl7dD10Pz8wO2xldCBvLGE9bi5fcG9zaXRpb25zLHI9YS5sZW5ndGg7Zm9yKGVbdCsrXT1yLG89MDtvPHI7KytvLHQrPXMucGFja2VkTGVuZ3RoKXMucGFjayhhW29dLGUsdCk7bGV0IGk9bi5fbWluaW11bUhlaWdodHM7aWYocj1nKGkpP2kubGVuZ3RoOjAsZVt0KytdPXIsZyhpKSlmb3Iobz0wO288cjsrK28pZVt0KytdPWlbb107bGV0IGY9bi5fbWF4aW11bUhlaWdodHM7aWYocj1nKGYpP2YubGVuZ3RoOjAsZVt0KytdPXIsZyhmKSlmb3Iobz0wO288cjsrK28pZVt0KytdPWZbb107cmV0dXJuIEsucGFjayhuLl9lbGxpcHNvaWQsZSx0KSx0Kz1LLnBhY2tlZExlbmd0aCxoZS5wYWNrKG4uX3ZlcnRleEZvcm1hdCxlLHQpLHQrPWhlLnBhY2tlZExlbmd0aCxlW3RdPW4uX2dyYW51bGFyaXR5LGV9O1p4PUsuY2xvbmUoSy5VTklUX1NQSEVSRSksUXg9bmV3IGhlLFNkPXtwb3NpdGlvbnM6dm9pZCAwLG1pbmltdW1IZWlnaHRzOnZvaWQgMCxtYXhpbXVtSGVpZ2h0czp2b2lkIDAsZWxsaXBzb2lkOlp4LHZlcnRleEZvcm1hdDpReCxncmFudWxhcml0eTp2b2lkIDB9O0NjLnVucGFjaz1mdW5jdGlvbihuLGUsdCl7ZT1lPz8wO2xldCBvLGE9bltlKytdLHI9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbyxlKz1zLnBhY2tlZExlbmd0aClyW29dPXMudW5wYWNrKG4sZSk7YT1uW2UrK107bGV0IGk7aWYoYT4wKWZvcihpPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbylpW29dPW5bZSsrXTthPW5bZSsrXTtsZXQgZjtpZihhPjApZm9yKGY9bmV3IEFycmF5KGEpLG89MDtvPGE7KytvKWZbb109bltlKytdO2xldCBkPUsudW5wYWNrKG4sZSxaeCk7ZSs9Sy5wYWNrZWRMZW5ndGg7bGV0IGM9aGUudW5wYWNrKG4sZSxReCk7ZSs9aGUucGFja2VkTGVuZ3RoO2xldCB1PW5bZV07cmV0dXJuIGcodCk/KHQuX3Bvc2l0aW9ucz1yLHQuX21pbmltdW1IZWlnaHRzPWksdC5fbWF4aW11bUhlaWdodHM9Zix0Ll9lbGxpcHNvaWQ9Sy5jbG9uZShkLHQuX2VsbGlwc29pZCksdC5fdmVydGV4Rm9ybWF0PWhlLmNsb25lKGMsdC5fdmVydGV4Rm9ybWF0KSx0Ll9ncmFudWxhcml0eT11LHQpOihTZC5wb3NpdGlvbnM9cixTZC5taW5pbXVtSGVpZ2h0cz1pLFNkLm1heGltdW1IZWlnaHRzPWYsU2QuZ3JhbnVsYXJpdHk9dSxuZXcgQ2MoU2QpKX07Q2MuZnJvbUNvbnN0YW50SGVpZ2h0cz1mdW5jdGlvbihuKXtuPW4/P09lLkVNUFRZX09CSkVDVDtsZXQgZT1uLnBvc2l0aW9ucyx0LG8sYT1uLm1pbmltdW1IZWlnaHQscj1uLm1heGltdW1IZWlnaHQsaT1nKGEpLGY9ZyhyKTtpZihpfHxmKXtsZXQgYz1lLmxlbmd0aDt0PWk/bmV3IEFycmF5KGMpOnZvaWQgMCxvPWY/bmV3IEFycmF5KGMpOnZvaWQgMDtmb3IobGV0IHU9MDt1PGM7Kyt1KWkmJih0W3VdPWEpLGYmJihvW3VdPXIpfWxldCBkPXtwb3NpdGlvbnM6ZSxtYXhpbXVtSGVpZ2h0czpvLG1pbmltdW1IZWlnaHRzOnQsZWxsaXBzb2lkOm4uZWxsaXBzb2lkLHZlcnRleEZvcm1hdDpuLnZlcnRleEZvcm1hdH07cmV0dXJuIG5ldyBDYyhkKX07Q2MuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7bGV0IGU9bi5fcG9zaXRpb25zLHQ9bi5fbWluaW11bUhlaWdodHMsbz1uLl9tYXhpbXVtSGVpZ2h0cyxhPW4uX3ZlcnRleEZvcm1hdCxyPW4uX2dyYW51bGFyaXR5LGk9bi5fZWxsaXBzb2lkLGY9eW0uY29tcHV0ZVBvc2l0aW9ucyhpLGUsbyx0LHIsITApO2lmKCFnKGYpKXJldHVybjtsZXQgZD1mLmJvdHRvbVBvc2l0aW9ucyxjPWYudG9wUG9zaXRpb25zLHU9Zi5udW1Db3JuZXJzLGw9Yy5sZW5ndGgsbT1sKjIsaD1hLnBvc2l0aW9uP25ldyBGbG9hdDY0QXJyYXkobSk6dm9pZCAwLGI9YS5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShtKTp2b2lkIDAscD1hLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShtKTp2b2lkIDAseT1hLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KG0pOnZvaWQgMCxUPWEuc3Q/bmV3IEZsb2F0MzJBcnJheShtLzMqMik6dm9pZCAwLF89MCx3PTAsRT0wLFI9MCxTPTAsQz1vNCxJPW40LE09dDQsUD0hMDtsLz0zO2xldCBGLEE9MCx4PTEvKGwtdS0xKTtmb3IoRj0wO0Y8bDsrK0Ype2xldCBEPUYqMyxHPXMuZnJvbUFycmF5KGMsRCxmeSksVj1zLmZyb21BcnJheShkLEQsQW0pO2lmKGEucG9zaXRpb24mJihoW18rK109Vi54LGhbXysrXT1WLnksaFtfKytdPVYueixoW18rK109Ry54LGhbXysrXT1HLnksaFtfKytdPUcueiksYS5zdCYmKFRbUysrXT1BLFRbUysrXT0wLFRbUysrXT1BLFRbUysrXT0xKSxhLm5vcm1hbHx8YS50YW5nZW50fHxhLmJpdGFuZ2VudCl7bGV0IE89cy5jbG9uZShzLlpFUk8sSngpLEo9cy5zdWJ0cmFjdChHLGkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEcsQW0pLEFtKTtpZihGKzE8bCYmKE89cy5mcm9tQXJyYXkoYyxEKzMsSngpKSxQKXtsZXQgcmU9cy5zdWJ0cmFjdChPLEcsZTQpLHNlPXMuc3VidHJhY3QoSixHLGZ5KTtDPXMubm9ybWFsaXplKHMuY3Jvc3Moc2UscmUsQyksQyksUD0hMX1zLmVxdWFsc0Vwc2lsb24oRyxPLGsuRVBTSUxPTjEwKT9QPSEwOihBKz14LGEudGFuZ2VudCYmKEk9cy5ub3JtYWxpemUocy5zdWJ0cmFjdChPLEcsSSksSSkpLGEuYml0YW5nZW50JiYoTT1zLm5vcm1hbGl6ZShzLmNyb3NzKEMsSSxNKSxNKSkpLGEubm9ybWFsJiYoYlt3KytdPUMueCxiW3crK109Qy55LGJbdysrXT1DLnosYlt3KytdPUMueCxiW3crK109Qy55LGJbdysrXT1DLnopLGEudGFuZ2VudCYmKHBbUisrXT1JLngscFtSKytdPUkueSxwW1IrK109SS56LHBbUisrXT1JLngscFtSKytdPUkueSxwW1IrK109SS56KSxhLmJpdGFuZ2VudCYmKHlbRSsrXT1NLngseVtFKytdPU0ueSx5W0UrK109TS56LHlbRSsrXT1NLngseVtFKytdPU0ueSx5W0UrK109TS56KX19bGV0IE49bmV3IFFlO2EucG9zaXRpb24mJihOLnBvc2l0aW9uPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aH0pKSxhLm5vcm1hbCYmKE4ubm9ybWFsPW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSkpLGEudGFuZ2VudCYmKE4udGFuZ2VudD1uZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pKSxhLmJpdGFuZ2VudCYmKE4uYml0YW5nZW50PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp5fSkpLGEuc3QmJihOLnN0PW5ldyBpZSh7Y29tcG9uZW50RGF0YXR5cGU6bmUuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpUfSkpO2xldCB2PW0vMzttLT02Kih1KzEpO2xldCBVPUllLmNyZWF0ZVR5cGVkQXJyYXkodixtKSxMPTA7Zm9yKEY9MDtGPHYtMjtGKz0yKXtsZXQgRD1GLEc9RisyLFY9cy5mcm9tQXJyYXkoaCxEKjMsZnkpLE89cy5mcm9tQXJyYXkoaCxHKjMsQW0pO2lmKHMuZXF1YWxzRXBzaWxvbihWLE8say5FUFNJTE9OMTApKWNvbnRpbnVlO2xldCBKPUYrMSxyZT1GKzM7VVtMKytdPUosVVtMKytdPUQsVVtMKytdPXJlLFVbTCsrXT1yZSxVW0wrK109RCxVW0wrK109R31yZXR1cm4gbmV3IFBlKHthdHRyaWJ1dGVzOk4saW5kaWNlczpVLHByaW1pdGl2ZVR5cGU6RmUuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOnBlLmZyb21WZXJ0aWNlcyhoKX0pfTtkeT1DY30pO3ZhciB1eT17fTskZSh1eSx7ZGVmYXVsdDooKT0+cjR9KTtmdW5jdGlvbiBhNChuLGUpe3JldHVybiBnKGUpJiYobj1keS51bnBhY2sobixlKSksbi5fZWxsaXBzb2lkPUsuY2xvbmUobi5fZWxsaXBzb2lkKSxkeS5jcmVhdGVHZW9tZXRyeShuKX12YXIgcjQsbHk9WCgoKT0+e2ZlKCk7VmUoKTskeCgpO3I0PWE0fSk7ZnVuY3Rpb24gTWMobil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5wb3NpdGlvbnMsdD1uLm1heGltdW1IZWlnaHRzLG89bi5taW5pbXVtSGVpZ2h0cyxhPW4uZ3JhbnVsYXJpdHk/P2suUkFESUFOU19QRVJfREVHUkVFLHI9bi5lbGxpcHNvaWQ/P0suZGVmYXVsdDt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9taW5pbXVtSGVpZ2h0cz1vLHRoaXMuX21heGltdW1IZWlnaHRzPXQsdGhpcy5fZ3JhbnVsYXJpdHk9YSx0aGlzLl9lbGxpcHNvaWQ9Sy5jbG9uZShyKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVXYWxsT3V0bGluZUdlb21ldHJ5IjtsZXQgaT0xK2UubGVuZ3RoKnMucGFja2VkTGVuZ3RoKzI7ZyhvKSYmKGkrPW8ubGVuZ3RoKSxnKHQpJiYoaSs9dC5sZW5ndGgpLHRoaXMucGFja2VkTGVuZ3RoPWkrSy5wYWNrZWRMZW5ndGgrMX12YXIgZU8sdE8sbk8sQ2QsaHksb089WCgoKT0+e0V0KCk7TWUoKTtDdCgpO3N0KCk7ZmUoKTtWZSgpO1h0KCk7WXQoKTtybigpO1p0KCk7amUoKTt0bigpO3N5KCk7ZU89bmV3IHMsdE89bmV3IHM7TWMucGFjaz1mdW5jdGlvbihuLGUsdCl7dD10Pz8wO2xldCBvLGE9bi5fcG9zaXRpb25zLHI9YS5sZW5ndGg7Zm9yKGVbdCsrXT1yLG89MDtvPHI7KytvLHQrPXMucGFja2VkTGVuZ3RoKXMucGFjayhhW29dLGUsdCk7bGV0IGk9bi5fbWluaW11bUhlaWdodHM7aWYocj1nKGkpP2kubGVuZ3RoOjAsZVt0KytdPXIsZyhpKSlmb3Iobz0wO288cjsrK28pZVt0KytdPWlbb107bGV0IGY9bi5fbWF4aW11bUhlaWdodHM7aWYocj1nKGYpP2YubGVuZ3RoOjAsZVt0KytdPXIsZyhmKSlmb3Iobz0wO288cjsrK28pZVt0KytdPWZbb107cmV0dXJuIEsucGFjayhuLl9lbGxpcHNvaWQsZSx0KSx0Kz1LLnBhY2tlZExlbmd0aCxlW3RdPW4uX2dyYW51bGFyaXR5LGV9O25PPUsuY2xvbmUoSy5VTklUX1NQSEVSRSksQ2Q9e3Bvc2l0aW9uczp2b2lkIDAsbWluaW11bUhlaWdodHM6dm9pZCAwLG1heGltdW1IZWlnaHRzOnZvaWQgMCxlbGxpcHNvaWQ6bk8sZ3JhbnVsYXJpdHk6dm9pZCAwfTtNYy51bnBhY2s9ZnVuY3Rpb24obixlLHQpe2U9ZT8/MDtsZXQgbyxhPW5bZSsrXSxyPW5ldyBBcnJheShhKTtmb3Iobz0wO288YTsrK28sZSs9cy5wYWNrZWRMZW5ndGgpcltvXT1zLnVucGFjayhuLGUpO2E9bltlKytdO2xldCBpO2lmKGE+MClmb3IoaT1uZXcgQXJyYXkoYSksbz0wO288YTsrK28paVtvXT1uW2UrK107YT1uW2UrK107bGV0IGY7aWYoYT4wKWZvcihmPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbylmW29dPW5bZSsrXTtsZXQgZD1LLnVucGFjayhuLGUsbk8pO2UrPUsucGFja2VkTGVuZ3RoO2xldCBjPW5bZV07cmV0dXJuIGcodCk/KHQuX3Bvc2l0aW9ucz1yLHQuX21pbmltdW1IZWlnaHRzPWksdC5fbWF4aW11bUhlaWdodHM9Zix0Ll9lbGxpcHNvaWQ9Sy5jbG9uZShkLHQuX2VsbGlwc29pZCksdC5fZ3JhbnVsYXJpdHk9Yyx0KTooQ2QucG9zaXRpb25zPXIsQ2QubWluaW11bUhlaWdodHM9aSxDZC5tYXhpbXVtSGVpZ2h0cz1mLENkLmdyYW51bGFyaXR5PWMsbmV3IE1jKENkKSl9O01jLmZyb21Db25zdGFudEhlaWdodHM9ZnVuY3Rpb24obil7bj1uPz9PZS5FTVBUWV9PQkpFQ1Q7bGV0IGU9bi5wb3NpdGlvbnMsdCxvLGE9bi5taW5pbXVtSGVpZ2h0LHI9bi5tYXhpbXVtSGVpZ2h0LGk9ZyhhKSxmPWcocik7aWYoaXx8Zil7bGV0IGM9ZS5sZW5ndGg7dD1pP25ldyBBcnJheShjKTp2b2lkIDAsbz1mP25ldyBBcnJheShjKTp2b2lkIDA7Zm9yKGxldCB1PTA7dTxjOysrdSlpJiYodFt1XT1hKSxmJiYob1t1XT1yKX1sZXQgZD17cG9zaXRpb25zOmUsbWF4aW11bUhlaWdodHM6byxtaW5pbXVtSGVpZ2h0czp0LGVsbGlwc29pZDpuLmVsbGlwc29pZH07cmV0dXJuIG5ldyBNYyhkKX07TWMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24obil7bGV0IGU9bi5fcG9zaXRpb25zLHQ9bi5fbWluaW11bUhlaWdodHMsbz1uLl9tYXhpbXVtSGVpZ2h0cyxhPW4uX2dyYW51bGFyaXR5LHI9bi5fZWxsaXBzb2lkLGk9eW0uY29tcHV0ZVBvc2l0aW9ucyhyLGUsbyx0LGEsITEpO2lmKCFnKGkpKXJldHVybjtsZXQgZj1pLmJvdHRvbVBvc2l0aW9ucyxkPWkudG9wUG9zaXRpb25zLGM9ZC5sZW5ndGgsdT1jKjIsbD1uZXcgRmxvYXQ2NEFycmF5KHUpLG09MDtjLz0zO2xldCBoO2ZvcihoPTA7aDxjOysraCl7bGV0IF89aCozLHc9cy5mcm9tQXJyYXkoZCxfLGVPKSxFPXMuZnJvbUFycmF5KGYsXyx0Tyk7bFttKytdPUUueCxsW20rK109RS55LGxbbSsrXT1FLnosbFttKytdPXcueCxsW20rK109dy55LGxbbSsrXT13Lnp9bGV0IGI9bmV3IFFlKHtwb3NpdGlvbjpuZXcgaWUoe2NvbXBvbmVudERhdGF0eXBlOm5lLkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmx9KX0pLHA9dS8zO3U9MipwLTQrcDtsZXQgeT1JZS5jcmVhdGVUeXBlZEFycmF5KHAsdSksVD0wO2ZvcihoPTA7aDxwLTI7aCs9Mil7bGV0IF89aCx3PWgrMixFPXMuZnJvbUFycmF5KGwsXyozLGVPKSxSPXMuZnJvbUFycmF5KGwsdyozLHRPKTtpZihzLmVxdWFsc0Vwc2lsb24oRSxSLGsuRVBTSUxPTjEwKSljb250aW51ZTtsZXQgUz1oKzEsQz1oKzM7eVtUKytdPVMseVtUKytdPV8seVtUKytdPVMseVtUKytdPUMseVtUKytdPV8seVtUKytdPXd9cmV0dXJuIHlbVCsrXT1wLTIseVtUXT1wLTEsbmV3IFBlKHthdHRyaWJ1dGVzOmIsaW5kaWNlczp5LHByaW1pdGl2ZVR5cGU6RmUuTElORVMsYm91bmRpbmdTcGhlcmU6cGUuZnJvbVZlcnRpY2VzKGwpfSl9O2h5PU1jfSk7dmFyIG15PXt9OyRlKG15LHtkZWZhdWx0OigpPT5jNH0pO2Z1bmN0aW9uIGk0KG4sZSl7cmV0dXJuIGcoZSkmJihuPWh5LnVucGFjayhuLGUpKSxuLl9lbGxpcHNvaWQ9Sy5jbG9uZShuLl9lbGxpcHNvaWQpLGh5LmNyZWF0ZUdlb21ldHJ5KG4pfXZhciBjNCxieT1YKCgpPT57ZmUoKTtWZSgpO29PKCk7YzQ9aTR9KTt2YXIgX3k9c2koKE1kLGd5KT0+e3ZhciBrZT1rZXx8e307a2Uuc2NvcGU9e307a2UuYXJyYXlJdGVyYXRvckltcGw9ZnVuY3Rpb24obil7dmFyIGU9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZTxuLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTpuW2UrK119Ontkb25lOiEwfX19O2tlLmFycmF5SXRlcmF0b3I9ZnVuY3Rpb24obil7cmV0dXJue25leHQ6a2UuYXJyYXlJdGVyYXRvckltcGwobil9fTtrZS5tYWtlSXRlcmF0b3I9ZnVuY3Rpb24obil7dmFyIGU9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5pdGVyYXRvciYmbltTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBlP2UuY2FsbChuKTprZS5hcnJheUl0ZXJhdG9yKG4pfTtrZS5BU1NVTUVfRVM1PSExO2tlLkFTU1VNRV9OT19OQVRJVkVfTUFQPSExO2tlLkFTU1VNRV9OT19OQVRJVkVfU0VUPSExO2tlLlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITE7a2UuSVNPTEFURV9QT0xZRklMTFM9ITE7a2UuRk9SQ0VfUE9MWUZJTExfUFJPTUlTRT0hMTtrZS5GT1JDRV9QT0xZRklMTF9QUk9NSVNFX1dIRU5fTk9fVU5IQU5ETEVEX1JFSkVDVElPTj0hMTtrZS5nZXRHbG9iYWw9ZnVuY3Rpb24obil7bj1bdHlwZW9mIGdsb2JhbFRoaXM9PSJvYmplY3QiJiZnbG9iYWxUaGlzLG4sdHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdyx0eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYsdHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbF07Zm9yKHZhciBlPTA7ZTxuLmxlbmd0aDsrK2Upe3ZhciB0PW5bZV07aWYodCYmdC5NYXRoPT1NYXRoKXJldHVybiB0fXRocm93IEVycm9yKCJDYW5ub3QgZmluZCBnbG9iYWwgb2JqZWN0Iil9O2tlLmdsb2JhbD1rZS5nZXRHbG9iYWwoTWQpO2tlLmRlZmluZVByb3BlcnR5PWtlLkFTU1VNRV9FUzV8fHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz09ImZ1bmN0aW9uIj9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24obixlLHQpe3JldHVybiBuPT1BcnJheS5wcm90b3R5cGV8fG49PU9iamVjdC5wcm90b3R5cGV8fChuW2VdPXQudmFsdWUpLG59O2tlLklTX1NZTUJPTF9OQVRJVkU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbCgieCIpPT0ic3ltYm9sIjtrZS5UUlVTVF9FUzZfUE9MWUZJTExTPSFrZS5JU09MQVRFX1BPTFlGSUxMU3x8a2UuSVNfU1lNQk9MX05BVElWRTtrZS5wb2x5ZmlsbHM9e307a2UucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sPXt9O2tlLlBPTFlGSUxMX1BSRUZJWD0iJGpzY3AkIjtrZS5wb2x5ZmlsbD1mdW5jdGlvbihuLGUsdCxvKXtlJiYoa2UuSVNPTEFURV9QT0xZRklMTFM/a2UucG9seWZpbGxJc29sYXRlZChuLGUsdCxvKTprZS5wb2x5ZmlsbFVuaXNvbGF0ZWQobixlLHQsbykpfTtrZS5wb2x5ZmlsbFVuaXNvbGF0ZWQ9ZnVuY3Rpb24obixlLHQsbyl7Zm9yKHQ9a2UuZ2xvYmFsLG49bi5zcGxpdCgiLiIpLG89MDtvPG4ubGVuZ3RoLTE7bysrKXt2YXIgYT1uW29dO2lmKCEoYSBpbiB0KSlyZXR1cm47dD10W2FdfW49bltuLmxlbmd0aC0xXSxvPXRbbl0sZT1lKG8pLGUhPW8mJmUhPW51bGwmJmtlLmRlZmluZVByb3BlcnR5KHQsbix7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX07a2UucG9seWZpbGxJc29sYXRlZD1mdW5jdGlvbihuLGUsdCxvKXt2YXIgYT1uLnNwbGl0KCIuIik7bj1hLmxlbmd0aD09PTEsbz1hWzBdLG89IW4mJm8gaW4ga2UucG9seWZpbGxzP2tlLnBvbHlmaWxsczprZS5nbG9iYWw7Zm9yKHZhciByPTA7cjxhLmxlbmd0aC0xO3IrKyl7dmFyIGk9YVtyXTtpZighKGkgaW4gbykpcmV0dXJuO289b1tpXX1hPWFbYS5sZW5ndGgtMV0sdD1rZS5JU19TWU1CT0xfTkFUSVZFJiZ0PT09ImVzNiI/b1thXTpudWxsLGU9ZSh0KSxlIT1udWxsJiYobj9rZS5kZWZpbmVQcm9wZXJ0eShrZS5wb2x5ZmlsbHMsYSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KTplIT09dCYmKGtlLnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFthXT09PXZvaWQgMCYmKHQ9MWU5Kk1hdGgucmFuZG9tKCk+Pj4wLGtlLnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFthXT1rZS5JU19TWU1CT0xfTkFUSVZFP2tlLmdsb2JhbC5TeW1ib2woYSk6a2UuUE9MWUZJTExfUFJFRklYK3QrIiQiK2EpLGtlLmRlZmluZVByb3BlcnR5KG8sa2UucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW2FdLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pKSl9O2tlLnBvbHlmaWxsKCJQcm9taXNlIixmdW5jdGlvbihuKXtmdW5jdGlvbiBlKCl7dGhpcy5iYXRjaF89bnVsbH1mdW5jdGlvbiB0KGkpe3JldHVybiBpIGluc3RhbmNlb2YgYT9pOm5ldyBhKGZ1bmN0aW9uKGYsZCl7ZihpKX0pfWlmKG4mJighKGtlLkZPUkNFX1BPTFlGSUxMX1BST01JU0V8fGtlLkZPUkNFX1BPTFlGSUxMX1BST01JU0VfV0hFTl9OT19VTkhBTkRMRURfUkVKRUNUSU9OJiZ0eXBlb2Yga2UuZ2xvYmFsLlByb21pc2VSZWplY3Rpb25FdmVudD4idSIpfHwha2UuZ2xvYmFsLlByb21pc2V8fGtlLmdsb2JhbC5Qcm9taXNlLnRvU3RyaW5nKCkuaW5kZXhPZigiW25hdGl2ZSBjb2RlXSIpPT09LTEpKXJldHVybiBuO2UucHJvdG90eXBlLmFzeW5jRXhlY3V0ZT1mdW5jdGlvbihpKXtpZih0aGlzLmJhdGNoXz09bnVsbCl7dGhpcy5iYXRjaF89W107dmFyIGY9dGhpczt0aGlzLmFzeW5jRXhlY3V0ZUZ1bmN0aW9uKGZ1bmN0aW9uKCl7Zi5leGVjdXRlQmF0Y2hfKCl9KX10aGlzLmJhdGNoXy5wdXNoKGkpfTt2YXIgbz1rZS5nbG9iYWwuc2V0VGltZW91dDtlLnByb3RvdHlwZS5hc3luY0V4ZWN1dGVGdW5jdGlvbj1mdW5jdGlvbihpKXtvKGksMCl9LGUucHJvdG90eXBlLmV4ZWN1dGVCYXRjaF89ZnVuY3Rpb24oKXtmb3IoO3RoaXMuYmF0Y2hfJiZ0aGlzLmJhdGNoXy5sZW5ndGg7KXt2YXIgaT10aGlzLmJhdGNoXzt0aGlzLmJhdGNoXz1bXTtmb3IodmFyIGY9MDtmPGkubGVuZ3RoOysrZil7dmFyIGQ9aVtmXTtpW2ZdPW51bGw7dHJ5e2QoKX1jYXRjaChjKXt0aGlzLmFzeW5jVGhyb3dfKGMpfX19dGhpcy5iYXRjaF89bnVsbH0sZS5wcm90b3R5cGUuYXN5bmNUaHJvd189ZnVuY3Rpb24oaSl7dGhpcy5hc3luY0V4ZWN1dGVGdW5jdGlvbihmdW5jdGlvbigpe3Rocm93IGl9KX07dmFyIGE9ZnVuY3Rpb24oaSl7dGhpcy5zdGF0ZV89MCx0aGlzLnJlc3VsdF89dm9pZCAwLHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXz1bXSx0aGlzLmlzUmVqZWN0aW9uSGFuZGxlZF89ITE7dmFyIGY9dGhpcy5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0XygpO3RyeXtpKGYucmVzb2x2ZSxmLnJlamVjdCl9Y2F0Y2goZCl7Zi5yZWplY3QoZCl9fTthLnByb3RvdHlwZS5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0Xz1mdW5jdGlvbigpe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe2R8fChkPSEwLGMuY2FsbChmLHUpKX19dmFyIGY9dGhpcyxkPSExO3JldHVybntyZXNvbHZlOmkodGhpcy5yZXNvbHZlVG9fKSxyZWplY3Q6aSh0aGlzLnJlamVjdF8pfX0sYS5wcm90b3R5cGUucmVzb2x2ZVRvXz1mdW5jdGlvbihpKXtpZihpPT09dGhpcyl0aGlzLnJlamVjdF8obmV3IFR5cGVFcnJvcigiQSBQcm9taXNlIGNhbm5vdCByZXNvbHZlIHRvIGl0c2VsZiIpKTtlbHNlIGlmKGkgaW5zdGFuY2VvZiBhKXRoaXMuc2V0dGxlU2FtZUFzUHJvbWlzZV8oaSk7ZWxzZXtlOnN3aXRjaCh0eXBlb2YgaSl7Y2FzZSJvYmplY3QiOnZhciBmPWkhPW51bGw7YnJlYWsgZTtjYXNlImZ1bmN0aW9uIjpmPSEwO2JyZWFrIGU7ZGVmYXVsdDpmPSExfWY/dGhpcy5yZXNvbHZlVG9Ob25Qcm9taXNlT2JqXyhpKTp0aGlzLmZ1bGZpbGxfKGkpfX0sYS5wcm90b3R5cGUucmVzb2x2ZVRvTm9uUHJvbWlzZU9ial89ZnVuY3Rpb24oaSl7dmFyIGY9dm9pZCAwO3RyeXtmPWkudGhlbn1jYXRjaChkKXt0aGlzLnJlamVjdF8oZCk7cmV0dXJufXR5cGVvZiBmPT0iZnVuY3Rpb24iP3RoaXMuc2V0dGxlU2FtZUFzVGhlbmFibGVfKGYsaSk6dGhpcy5mdWxmaWxsXyhpKX0sYS5wcm90b3R5cGUucmVqZWN0Xz1mdW5jdGlvbihpKXt0aGlzLnNldHRsZV8oMixpKX0sYS5wcm90b3R5cGUuZnVsZmlsbF89ZnVuY3Rpb24oaSl7dGhpcy5zZXR0bGVfKDEsaSl9LGEucHJvdG90eXBlLnNldHRsZV89ZnVuY3Rpb24oaSxmKXtpZih0aGlzLnN0YXRlXyE9MCl0aHJvdyBFcnJvcigiQ2Fubm90IHNldHRsZSgiK2krIiwgIitmKyIpOiBQcm9taXNlIGFscmVhZHkgc2V0dGxlZCBpbiBzdGF0ZSIrdGhpcy5zdGF0ZV8pO3RoaXMuc3RhdGVfPWksdGhpcy5yZXN1bHRfPWYsdGhpcy5zdGF0ZV89PT0yJiZ0aGlzLnNjaGVkdWxlVW5oYW5kbGVkUmVqZWN0aW9uQ2hlY2tfKCksdGhpcy5leGVjdXRlT25TZXR0bGVkQ2FsbGJhY2tzXygpfSxhLnByb3RvdHlwZS5zY2hlZHVsZVVuaGFuZGxlZFJlamVjdGlvbkNoZWNrXz1mdW5jdGlvbigpe3ZhciBpPXRoaXM7byhmdW5jdGlvbigpe2lmKGkubm90aWZ5VW5oYW5kbGVkUmVqZWN0aW9uXygpKXt2YXIgZj1rZS5nbG9iYWwuY29uc29sZTt0eXBlb2YgZjwidSImJmYuZXJyb3IoaS5yZXN1bHRfKX19LDEpfSxhLnByb3RvdHlwZS5ub3RpZnlVbmhhbmRsZWRSZWplY3Rpb25fPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1JlamVjdGlvbkhhbmRsZWRfKXJldHVybiExO3ZhciBpPWtlLmdsb2JhbC5DdXN0b21FdmVudCxmPWtlLmdsb2JhbC5FdmVudCxkPWtlLmdsb2JhbC5kaXNwYXRjaEV2ZW50O3JldHVybiB0eXBlb2YgZD4idSI/ITA6KHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k9bmV3IGkoInVuaGFuZGxlZHJlamVjdGlvbiIse2NhbmNlbGFibGU6ITB9KTp0eXBlb2YgZj09ImZ1bmN0aW9uIj9pPW5ldyBmKCJ1bmhhbmRsZWRyZWplY3Rpb24iLHtjYW5jZWxhYmxlOiEwfSk6KGk9a2UuZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLGkuaW5pdEN1c3RvbUV2ZW50KCJ1bmhhbmRsZWRyZWplY3Rpb24iLCExLCEwLGkpKSxpLnByb21pc2U9dGhpcyxpLnJlYXNvbj10aGlzLnJlc3VsdF8sZChpKSl9LGEucHJvdG90eXBlLmV4ZWN1dGVPblNldHRsZWRDYWxsYmFja3NfPWZ1bmN0aW9uKCl7aWYodGhpcy5vblNldHRsZWRDYWxsYmFja3NfIT1udWxsKXtmb3IodmFyIGk9MDtpPHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXy5sZW5ndGg7KytpKXIuYXN5bmNFeGVjdXRlKHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzX1tpXSk7dGhpcy5vblNldHRsZWRDYWxsYmFja3NfPW51bGx9fTt2YXIgcj1uZXcgZTtyZXR1cm4gYS5wcm90b3R5cGUuc2V0dGxlU2FtZUFzUHJvbWlzZV89ZnVuY3Rpb24oaSl7dmFyIGY9dGhpcy5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0XygpO2kuY2FsbFdoZW5TZXR0bGVkXyhmLnJlc29sdmUsZi5yZWplY3QpfSxhLnByb3RvdHlwZS5zZXR0bGVTYW1lQXNUaGVuYWJsZV89ZnVuY3Rpb24oaSxmKXt2YXIgZD10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7dHJ5e2kuY2FsbChmLGQucmVzb2x2ZSxkLnJlamVjdCl9Y2F0Y2goYyl7ZC5yZWplY3QoYyl9fSxhLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGksZil7ZnVuY3Rpb24gZChtLGgpe3JldHVybiB0eXBlb2YgbT09ImZ1bmN0aW9uIj9mdW5jdGlvbihiKXt0cnl7YyhtKGIpKX1jYXRjaChwKXt1KHApfX06aH12YXIgYyx1LGw9bmV3IGEoZnVuY3Rpb24obSxoKXtjPW0sdT1ofSk7cmV0dXJuIHRoaXMuY2FsbFdoZW5TZXR0bGVkXyhkKGksYyksZChmLHUpKSxsfSxhLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCxpKX0sYS5wcm90b3R5cGUuY2FsbFdoZW5TZXR0bGVkXz1mdW5jdGlvbihpLGYpe2Z1bmN0aW9uIGQoKXtzd2l0Y2goYy5zdGF0ZV8pe2Nhc2UgMTppKGMucmVzdWx0Xyk7YnJlYWs7Y2FzZSAyOmYoYy5yZXN1bHRfKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbmV4cGVjdGVkIHN0YXRlOiAiK2Muc3RhdGVfKX19dmFyIGM9dGhpczt0aGlzLm9uU2V0dGxlZENhbGxiYWNrc189PW51bGw/ci5hc3luY0V4ZWN1dGUoZCk6dGhpcy5vblNldHRsZWRDYWxsYmFja3NfLnB1c2goZCksdGhpcy5pc1JlamVjdGlvbkhhbmRsZWRfPSEwfSxhLnJlc29sdmU9dCxhLnJlamVjdD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IGEoZnVuY3Rpb24oZixkKXtkKGkpfSl9LGEucmFjZT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IGEoZnVuY3Rpb24oZixkKXtmb3IodmFyIGM9a2UubWFrZUl0ZXJhdG9yKGkpLHU9Yy5uZXh0KCk7IXUuZG9uZTt1PWMubmV4dCgpKXQodS52YWx1ZSkuY2FsbFdoZW5TZXR0bGVkXyhmLGQpfSl9LGEuYWxsPWZ1bmN0aW9uKGkpe3ZhciBmPWtlLm1ha2VJdGVyYXRvcihpKSxkPWYubmV4dCgpO3JldHVybiBkLmRvbmU/dChbXSk6bmV3IGEoZnVuY3Rpb24oYyx1KXtmdW5jdGlvbiBsKGIpe3JldHVybiBmdW5jdGlvbihwKXttW2JdPXAsaC0tLGg9PTAmJmMobSl9fXZhciBtPVtdLGg9MDtkbyBtLnB1c2godm9pZCAwKSxoKyssdChkLnZhbHVlKS5jYWxsV2hlblNldHRsZWRfKGwobS5sZW5ndGgtMSksdSksZD1mLm5leHQoKTt3aGlsZSghZC5kb25lKX0pfSxhfSwiZXM2IiwiZXMzIik7a2Uub3ducz1mdW5jdGlvbihuLGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixlKX07a2UuYXNzaWduPWtlLlRSVVNUX0VTNl9QT0xZRklMTFMmJnR5cGVvZiBPYmplY3QuYXNzaWduPT0iZnVuY3Rpb24iP09iamVjdC5hc3NpZ246ZnVuY3Rpb24obixlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbz1hcmd1bWVudHNbdF07aWYobylmb3IodmFyIGEgaW4gbylrZS5vd25zKG8sYSkmJihuW2FdPW9bYV0pfXJldHVybiBufTtrZS5wb2x5ZmlsbCgiT2JqZWN0LmFzc2lnbiIsZnVuY3Rpb24obil7cmV0dXJuIG58fGtlLmFzc2lnbn0sImVzNiIsImVzMyIpO2tlLmNoZWNrU3RyaW5nQXJncz1mdW5jdGlvbihuLGUsdCl7aWYobj09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgJ3RoaXMnIHZhbHVlIGZvciBTdHJpbmcucHJvdG90eXBlLiIrdCsiIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cCl0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLiIrdCsiIG11c3Qgbm90IGJlIGEgcmVndWxhciBleHByZXNzaW9uIik7cmV0dXJuIG4rIiJ9O2tlLnBvbHlmaWxsKCJTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgiLGZ1bmN0aW9uKG4pe3JldHVybiBufHxmdW5jdGlvbihlLHQpe3ZhciBvPWtlLmNoZWNrU3RyaW5nQXJncyh0aGlzLGUsInN0YXJ0c1dpdGgiKTtlKz0iIjt2YXIgYT1vLmxlbmd0aCxyPWUubGVuZ3RoO3Q9TWF0aC5tYXgoMCxNYXRoLm1pbih0fDAsby5sZW5ndGgpKTtmb3IodmFyIGk9MDtpPHImJnQ8YTspaWYob1t0KytdIT1lW2krK10pcmV0dXJuITE7cmV0dXJuIGk+PXJ9fSwiZXM2IiwiZXMzIik7a2UucG9seWZpbGwoIkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixmdW5jdGlvbihuKXtmdW5jdGlvbiBlKHQpe3JldHVybiB0PU51bWJlcih0KSx0PT09MS8wfHx0PT09LTEvMD90OnR8MH1yZXR1cm4gbnx8ZnVuY3Rpb24odCxvLGEpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHQ9ZSh0KSxvPWUobyksYT1hPT09dm9pZCAwP3I6ZShhKSx0PTA+dD9NYXRoLm1heChyK3QsMCk6TWF0aC5taW4odCxyKSxvPTA+bz9NYXRoLm1heChyK28sMCk6TWF0aC5taW4obyxyKSxhPTA+YT9NYXRoLm1heChyK2EsMCk6TWF0aC5taW4oYSxyKSx0PG8pZm9yKDtvPGE7KW8gaW4gdGhpcz90aGlzW3QrK109dGhpc1tvKytdOihkZWxldGUgdGhpc1t0KytdLG8rKyk7ZWxzZSBmb3IoYT1NYXRoLm1pbihhLHIrby10KSx0Kz1hLW87YT5vOyktLWEgaW4gdGhpcz90aGlzWy0tdF09dGhpc1thXTpkZWxldGUgdGhpc1stLXRdO3JldHVybiB0aGlzfX0sImVzNiIsImVzMyIpO2tlLnR5cGVkQXJyYXlDb3B5V2l0aGluPWZ1bmN0aW9uKG4pe3JldHVybiBufHxBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbn07a2UucG9seWZpbGwoIkludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsa2UudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO2tlLnBvbHlmaWxsKCJVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixrZS50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7a2UucG9seWZpbGwoIlVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixrZS50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7a2UucG9seWZpbGwoIkludDE2QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLGtlLnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtrZS5wb2x5ZmlsbCgiVWludDE2QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLGtlLnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtrZS5wb2x5ZmlsbCgiSW50MzJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsa2UudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO2tlLnBvbHlmaWxsKCJVaW50MzJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsa2UudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO2tlLnBvbHlmaWxsKCJGbG9hdDMyQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLGtlLnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtrZS5wb2x5ZmlsbCgiRmxvYXQ2NEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixrZS50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7dmFyIHB5PShmdW5jdGlvbigpe3ZhciBuPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiB0eXBlb2YgX19maWxlbmFtZTwidSImJihuPW58fF9fZmlsZW5hbWUpLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoeil7cmV0dXJuIE8ubG9jYXRlRmlsZT9PLmxvY2F0ZUZpbGUoeixsZSk6bGUren1mdW5jdGlvbiBvKHosSCx0ZSl7dmFyIFNlPUgrdGU7Zm9yKHRlPUg7elt0ZV0mJiEodGU+PVNlKTspKyt0ZTtpZigxNjx0ZS1IJiZ6LmJ1ZmZlciYmcWUpcmV0dXJuIHFlLmRlY29kZSh6LnN1YmFycmF5KEgsdGUpKTtmb3IoU2U9IiI7SDx0ZTspe3ZhciB0dD16W0grK107aWYodHQmMTI4KXt2YXIgdXQ9eltIKytdJjYzO2lmKCh0dCYyMjQpPT0xOTIpU2UrPVN0cmluZy5mcm9tQ2hhckNvZGUoKHR0JjMxKTw8Nnx1dCk7ZWxzZXt2YXIgTXI9eltIKytdJjYzO3R0PSh0dCYyNDApPT0yMjQ/KHR0JjE1KTw8MTJ8dXQ8PDZ8TXI6KHR0JjcpPDwxOHx1dDw8MTJ8TXI8PDZ8eltIKytdJjYzLDY1NTM2PnR0P1NlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHR0KToodHQtPTY1NTM2LFNlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHR0Pj4xMCw1NjMyMHx0dCYxMDIzKSl9fWVsc2UgU2UrPVN0cmluZy5mcm9tQ2hhckNvZGUodHQpfXJldHVybiBTZX1mdW5jdGlvbiBhKHosSCl7cmV0dXJuIHo/byh4dCx6LEgpOiIifWZ1bmN0aW9uIHIoKXt2YXIgej1CZS5idWZmZXI7Ty5IRUFQOD1hdD1uZXcgSW50OEFycmF5KHopLE8uSEVBUDE2PW5ldyBJbnQxNkFycmF5KHopLE8uSEVBUDMyPVR0PW5ldyBJbnQzMkFycmF5KHopLE8uSEVBUFU4PXh0PW5ldyBVaW50OEFycmF5KHopLE8uSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoeiksTy5IRUFQVTMyPWN0PW5ldyBVaW50MzJBcnJheSh6KSxPLkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheSh6KSxPLkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheSh6KX1mdW5jdGlvbiBpKHope3Rocm93IE8ub25BYm9ydCYmTy5vbkFib3J0KHopLHo9IkFib3J0ZWQoIit6KyIpIixLZSh6KSxldD0hMCx6PW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoeisiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiIpLHJlKHopLHp9ZnVuY3Rpb24gZih6KXt0cnl7aWYoej09R3QmJkRlKXJldHVybiBuZXcgVWludDhBcnJheShEZSk7aWYoV2UpcmV0dXJuIFdlKHopO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChIKXtpKEgpfX1mdW5jdGlvbiBkKCl7aWYoIURlJiYobWV8fGRlKSl7aWYodHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiYhR3Quc3RhcnRzV2l0aCgiZmlsZTovLyIpKXJldHVybiBmZXRjaChHdCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oeil7aWYoIXoub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitHdCsiJyI7cmV0dXJuIHouYXJyYXlCdWZmZXIoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIGYoR3QpfSk7aWYoemUpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHosSCl7emUoR3QsZnVuY3Rpb24odGUpe3oobmV3IFVpbnQ4QXJyYXkodGUpKX0sSCl9KX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBmKEd0KX0pfWZ1bmN0aW9uIGMoeil7Zm9yKDswPHoubGVuZ3RoOyl6LnNoaWZ0KCkoTyl9ZnVuY3Rpb24gdSh6KXt0aGlzLmV4Y1B0cj16LHRoaXMucHRyPXotMjQsdGhpcy5zZXRfdHlwZT1mdW5jdGlvbihIKXtjdFt0aGlzLnB0cis0Pj4yXT1IfSx0aGlzLmdldF90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGN0W3RoaXMucHRyKzQ+PjJdfSx0aGlzLnNldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKEgpe2N0W3RoaXMucHRyKzg+PjJdPUh9LHRoaXMuZ2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gY3RbdGhpcy5wdHIrOD4+Ml19LHRoaXMuc2V0X3JlZmNvdW50PWZ1bmN0aW9uKEgpe1R0W3RoaXMucHRyPj4yXT1IfSx0aGlzLnNldF9jYXVnaHQ9ZnVuY3Rpb24oSCl7YXRbdGhpcy5wdHIrMTI+PjBdPUg/MTowfSx0aGlzLmdldF9jYXVnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gYXRbdGhpcy5wdHIrMTI+PjBdIT0wfSx0aGlzLnNldF9yZXRocm93bj1mdW5jdGlvbihIKXthdFt0aGlzLnB0cisxMz4+MF09SD8xOjB9LHRoaXMuZ2V0X3JldGhyb3duPWZ1bmN0aW9uKCl7cmV0dXJuIGF0W3RoaXMucHRyKzEzPj4wXSE9MH0sdGhpcy5pbml0PWZ1bmN0aW9uKEgsdGUpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKEgpLHRoaXMuc2V0X2Rlc3RydWN0b3IodGUpLHRoaXMuc2V0X3JlZmNvdW50KDApLHRoaXMuc2V0X2NhdWdodCghMSksdGhpcy5zZXRfcmV0aHJvd24oITEpfSx0aGlzLmFkZF9yZWY9ZnVuY3Rpb24oKXtUdFt0aGlzLnB0cj4+Ml0rPTF9LHRoaXMucmVsZWFzZV9yZWY9ZnVuY3Rpb24oKXt2YXIgSD1UdFt0aGlzLnB0cj4+Ml07cmV0dXJuIFR0W3RoaXMucHRyPj4yXT1ILTEsSD09PTF9LHRoaXMuc2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbihIKXtjdFt0aGlzLnB0cisxNj4+Ml09SH0sdGhpcy5nZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKCl7cmV0dXJuIGN0W3RoaXMucHRyKzE2Pj4yXX0sdGhpcy5nZXRfZXhjZXB0aW9uX3B0cj1mdW5jdGlvbigpe2lmKCR1KHRoaXMuZ2V0X3R5cGUoKSkpcmV0dXJuIGN0W3RoaXMuZXhjUHRyPj4yXTt2YXIgSD10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtyZXR1cm4gSCE9PTA/SDp0aGlzLmV4Y1B0cn19ZnVuY3Rpb24gbCgpe2Z1bmN0aW9uIHooKXtpZighaGYmJihoZj0hMCxPLmNhbGxlZFJ1bj0hMCwhZXQpKXtpZihHZT0hMCxjKE90KSxKKE8pLE8ub25SdW50aW1lSW5pdGlhbGl6ZWQmJk8ub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxPLnBvc3RSdW4pZm9yKHR5cGVvZiBPLnBvc3RSdW49PSJmdW5jdGlvbiImJihPLnBvc3RSdW49W08ucG9zdFJ1bl0pO08ucG9zdFJ1bi5sZW5ndGg7KWt0LnVuc2hpZnQoTy5wb3N0UnVuLnNoaWZ0KCkpO2Moa3QpfX1pZighKDA8TGUpKXtpZihPLnByZVJ1bilmb3IodHlwZW9mIE8ucHJlUnVuPT0iZnVuY3Rpb24iJiYoTy5wcmVSdW49W08ucHJlUnVuXSk7Ty5wcmVSdW4ubGVuZ3RoOyl6dC51bnNoaWZ0KE8ucHJlUnVuLnNoaWZ0KCkpO2MoenQpLDA8TGV8fChPLnNldFN0YXR1cz8oTy5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe08uc2V0U3RhdHVzKCIiKX0sMSkseigpfSwxKSk6eigpKX19ZnVuY3Rpb24gbSgpe31mdW5jdGlvbiBoKHope3JldHVybih6fHxtKS5fX2NhY2hlX199ZnVuY3Rpb24gYih6LEgpe3ZhciB0ZT1oKEgpLFNlPXRlW3pdO3JldHVybiBTZXx8KFNlPU9iamVjdC5jcmVhdGUoKEh8fG0pLnByb3RvdHlwZSksU2UucHRyPXosdGVbel09U2UpfWZ1bmN0aW9uIHAoeil7aWYodHlwZW9mIHo9PSJzdHJpbmciKXtmb3IodmFyIEg9MCx0ZT0wO3RlPHoubGVuZ3RoOysrdGUpe3ZhciBTZT16LmNoYXJDb2RlQXQodGUpOzEyNz49U2U/SCsrOjIwNDc+PVNlP0grPTI6NTUyOTY8PVNlJiY1NzM0Mz49U2U/KEgrPTQsKyt0ZSk6SCs9M31pZihIPUFycmF5KEgrMSksdGU9MCxTZT1ILmxlbmd0aCwwPFNlKXtTZT10ZStTZS0xO2Zvcih2YXIgdHQ9MDt0dDx6Lmxlbmd0aDsrK3R0KXt2YXIgdXQ9ei5jaGFyQ29kZUF0KHR0KTtpZig1NTI5Njw9dXQmJjU3MzQzPj11dCl7dmFyIE1yPXouY2hhckNvZGVBdCgrK3R0KTt1dD02NTUzNisoKHV0JjEwMjMpPDwxMCl8TXImMTAyM31pZigxMjc+PXV0KXtpZih0ZT49U2UpYnJlYWs7SFt0ZSsrXT11dH1lbHNle2lmKDIwNDc+PXV0KXtpZih0ZSsxPj1TZSlicmVhaztIW3RlKytdPTE5Mnx1dD4+Nn1lbHNle2lmKDY1NTM1Pj11dCl7aWYodGUrMj49U2UpYnJlYWs7SFt0ZSsrXT0yMjR8dXQ+PjEyfWVsc2V7aWYodGUrMz49U2UpYnJlYWs7SFt0ZSsrXT0yNDB8dXQ+PjE4LEhbdGUrK109MTI4fHV0Pj4xMiY2M31IW3RlKytdPTEyOHx1dD4+NiY2M31IW3RlKytdPTEyOHx1dCY2M319SFt0ZV09MH1yZXR1cm4gej1BdC5hbGxvYyhILGF0KSxBdC5jb3B5KEgsYXQseiksen1yZXR1cm4gen1mdW5jdGlvbiB5KHope2lmKHR5cGVvZiB6PT0ib2JqZWN0Iil7dmFyIEg9QXQuYWxsb2MoeixhdCk7cmV0dXJuIEF0LmNvcHkoeixhdCxIKSxIfXJldHVybiB6fWZ1bmN0aW9uIFQoKXt0aHJvdyJjYW5ub3QgY29uc3RydWN0IGEgVm9pZFB0ciwgbm8gY29uc3RydWN0b3IgaW4gSURMIn1mdW5jdGlvbiBfKCl7dGhpcy5wdHI9JHQoKSxoKF8pW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIHcoKXt0aGlzLnB0cj1VbigpLGgodylbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gRSgpe3RoaXMucHRyPXRvKCksaChFKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBSKCl7dGhpcy5wdHI9eXQoKSxoKFIpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIFMoKXt0aGlzLnB0cj1HaSgpLGgoUylbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gQygpe3RoaXMucHRyPWNvKCksaChDKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBJKCl7dGhpcy5wdHI9dmMoKSxoKEkpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIE0oKXt0aGlzLnB0cj1vYSgpLGgoTSlbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gUCgpe3RoaXMucHRyPURjKCksaChQKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBGKCl7dGhyb3ciY2Fubm90IGNvbnN0cnVjdCBhIFN0YXR1cywgbm8gY29uc3RydWN0b3IgaW4gSURMIn1mdW5jdGlvbiBBKCl7dGhpcy5wdHI9emQoKSxoKEEpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIHgoKXt0aGlzLnB0cj1CYygpLGgoeClbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gTigpe3RoaXMucHRyPW5mKCksaChOKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiB2KCl7dGhpcy5wdHI9amMoKSxoKHYpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIFUoKXt0aGlzLnB0cj1ZZCgpLGgoVSlbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gTCgpe3RoaXMucHRyPVFkKCksaChMKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBEKCl7dGhpcy5wdHI9aWkoKSxoKEQpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEcoKXt0aGlzLnB0cj1hdSgpLGgoRylbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gVigpe3RoaXMucHRyPXNmKCksaChWKVt0aGlzLnB0cl09dGhpc31lPWU9PT12b2lkIDA/e306ZTt2YXIgTz10eXBlb2YgZTwidSI/ZTp7fSxKLHJlO08ucmVhZHk9bmV3IFByb21pc2UoZnVuY3Rpb24oeixIKXtKPXoscmU9SH0pO3ZhciBzZT0hMSxvZT0hMTtPLm9uUnVudGltZUluaXRpYWxpemVkPWZ1bmN0aW9uKCl7c2U9ITAsb2UmJnR5cGVvZiBPLm9uTW9kdWxlTG9hZGVkPT0iZnVuY3Rpb24iJiZPLm9uTW9kdWxlTG9hZGVkKE8pfSxPLm9uTW9kdWxlUGFyc2VkPWZ1bmN0aW9uKCl7b2U9ITAsc2UmJnR5cGVvZiBPLm9uTW9kdWxlTG9hZGVkPT0iZnVuY3Rpb24iJiZPLm9uTW9kdWxlTG9hZGVkKE8pfSxPLmlzVmVyc2lvblN1cHBvcnRlZD1mdW5jdGlvbih6KXtyZXR1cm4gdHlwZW9mIHohPSJzdHJpbmciPyExOih6PXouc3BsaXQoIi4iKSwyPnoubGVuZ3RofHwzPHoubGVuZ3RoPyExOnpbMF09PTEmJjA8PXpbMV0mJjU+PXpbMV0/ITA6ISh6WzBdIT0wfHwxMDx6WzFdKSl9O3ZhciBjZT1PYmplY3QuYXNzaWduKHt9LE8pLG1lPXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiLGRlPXR5cGVvZiBpbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLHllPXR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlPT0ic3RyaW5nIixsZT0iIjtpZih5ZSl7dmFyIGVlPWxhKCJmcyIpLEVlPWxhKCJwYXRoIik7bGU9ZGU/RWUuZGlybmFtZShsZSkrIi8iOl9fZGlybmFtZSsiLyI7dmFyIENlPWZ1bmN0aW9uKHosSCl7cmV0dXJuIHo9ei5zdGFydHNXaXRoKCJmaWxlOi8vIik/bmV3IFVSTCh6KTpFZS5ub3JtYWxpemUoeiksZWUucmVhZEZpbGVTeW5jKHosSD92b2lkIDA6InV0ZjgiKX0sV2U9ZnVuY3Rpb24oeil7cmV0dXJuIHo9Q2UoeiwhMCksei5idWZmZXJ8fCh6PW5ldyBVaW50OEFycmF5KHopKSx6fSx6ZT1mdW5jdGlvbih6LEgsdGUpe3o9ei5zdGFydHNXaXRoKCJmaWxlOi8vIik/bmV3IFVSTCh6KTpFZS5ub3JtYWxpemUoeiksZWUucmVhZEZpbGUoeixmdW5jdGlvbihTZSx0dCl7U2U/dGUoU2UpOkgodHQuYnVmZmVyKX0pfTsxPHByb2Nlc3MuYXJndi5sZW5ndGgmJnByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXC9nLCIvIikscHJvY2Vzcy5hcmd2LnNsaWNlKDIpLE8uaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9fWVsc2UobWV8fGRlKSYmKGRlP2xlPXNlbGYubG9jYXRpb24uaHJlZjp0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYobGU9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLG4mJihsZT1uKSxsZT1sZS5pbmRleE9mKCJibG9iOiIpIT09MD9sZS5zdWJzdHIoMCxsZS5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOiIiLENlPWZ1bmN0aW9uKHope3ZhciBIPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gSC5vcGVuKCJHRVQiLHosITEpLEguc2VuZChudWxsKSxILnJlc3BvbnNlVGV4dH0sZGUmJihXZT1mdW5jdGlvbih6KXt2YXIgSD1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIEgub3BlbigiR0VUIix6LCExKSxILnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLEguc2VuZChudWxsKSxuZXcgVWludDhBcnJheShILnJlc3BvbnNlKX0pLHplPWZ1bmN0aW9uKHosSCx0ZSl7dmFyIFNlPW5ldyBYTUxIdHRwUmVxdWVzdDtTZS5vcGVuKCJHRVQiLHosITApLFNlLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLFNlLm9ubG9hZD1mdW5jdGlvbigpe1NlLnN0YXR1cz09MjAwfHxTZS5zdGF0dXM9PTAmJlNlLnJlc3BvbnNlP0goU2UucmVzcG9uc2UpOnRlKCl9LFNlLm9uZXJyb3I9dGUsU2Uuc2VuZChudWxsKX0pO3ZhciBaZT1PLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLEtlPU8ucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oTyxjZSksY2U9bnVsbDt2YXIgRGU7Ty53YXNtQmluYXJ5JiYoRGU9Ty53YXNtQmluYXJ5KSx0eXBlb2YgV2ViQXNzZW1ibHkhPSJvYmplY3QiJiZpKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIEJlLGV0PSExLHFlPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwLGF0LHh0LFR0LGN0LHp0PVtdLE90PVtdLGt0PVtdLEdlPSExLExlPTAsX3Q9bnVsbCxNdD1udWxsLEd0PSJkcmFjb19kZWNvZGVyLndhc20iO0d0LnN0YXJ0c1dpdGgoImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiKXx8KEd0PXQoR3QpKTt2YXIgcXQ9MCxRdD1bbnVsbCxbXSxbXV0scG49e2I6ZnVuY3Rpb24oeixILHRlKXt0aHJvdyBuZXcgdSh6KS5pbml0KEgsdGUpLHF0Kyssen0sYTpmdW5jdGlvbigpe2koIiIpfSxnOmZ1bmN0aW9uKHosSCx0ZSl7eHQuY29weVdpdGhpbih6LEgsSCt0ZSl9LGU6ZnVuY3Rpb24oeil7dmFyIEg9eHQubGVuZ3RoO2lmKHo+Pj49MCwyMTQ3NDgzNjQ4PHopcmV0dXJuITE7Zm9yKHZhciB0ZT0xOzQ+PXRlO3RlKj0yKXt2YXIgU2U9SCooMSsuMi90ZSk7U2U9TWF0aC5taW4oU2UseisxMDA2NjMyOTYpO3ZhciB0dD1NYXRoO1NlPU1hdGgubWF4KHosU2UpLHR0PXR0Lm1pbi5jYWxsKHR0LDIxNDc0ODM2NDgsU2UrKDY1NTM2LVNlJTY1NTM2KSU2NTUzNik7ZTp7U2U9QmUuYnVmZmVyO3RyeXtCZS5ncm93KHR0LVNlLmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNikscigpO3ZhciB1dD0xO2JyZWFrIGV9Y2F0Y2h7fXV0PXZvaWQgMH1pZih1dClyZXR1cm4hMH1yZXR1cm4hMX0sZjpmdW5jdGlvbih6KXtyZXR1cm4gNTJ9LGQ6ZnVuY3Rpb24oeixILHRlLFNlLHR0KXtyZXR1cm4gNzB9LGM6ZnVuY3Rpb24oeixILHRlLFNlKXtmb3IodmFyIHR0PTAsdXQ9MDt1dDx0ZTt1dCsrKXt2YXIgTXI9Y3RbSD4+Ml0sSGM9Y3RbSCs0Pj4yXTtIKz04O2Zvcih2YXIgQj0wO0I8SGM7QisrKXt2YXIgaj14dFtNcitCXSxxPVF0W3pdO2o9PT0wfHxqPT09MTA/KCh6PT09MT9aZTpLZSkobyhxLDApKSxxLmxlbmd0aD0wKTpxLnB1c2goail9dHQrPUhjfXJldHVybiBjdFtTZT4+Ml09dHQsMH19OyhmdW5jdGlvbigpe2Z1bmN0aW9uIHoodHQsdXQpe08uYXNtPXR0LmV4cG9ydHMsQmU9Ty5hc20uaCxyKCksT3QudW5zaGlmdChPLmFzbS5pKSxMZS0tLE8ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmTy5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKExlKSxMZT09MCYmKF90IT09bnVsbCYmKGNsZWFySW50ZXJ2YWwoX3QpLF90PW51bGwpLE10JiYodHQ9TXQsTXQ9bnVsbCx0dCgpKSl9ZnVuY3Rpb24gSCh0dCl7eih0dC5pbnN0YW5jZSl9ZnVuY3Rpb24gdGUodHQpe3JldHVybiBkKCkudGhlbihmdW5jdGlvbih1dCl7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHV0LFNlKX0pLnRoZW4oZnVuY3Rpb24odXQpe3JldHVybiB1dH0pLnRoZW4odHQsZnVuY3Rpb24odXQpe0tlKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK3V0KSxpKHV0KX0pfXZhciBTZT17YTpwbn07aWYoTGUrKyxPLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJk8ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhMZSksTy5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBPLmluc3RhbnRpYXRlV2FzbShTZSx6KX1jYXRjaCh0dCl7S2UoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrdHQpLHJlKHR0KX1yZXR1cm4oZnVuY3Rpb24oKXtyZXR1cm4gRGV8fHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyE9ImZ1bmN0aW9uInx8R3Quc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpfHxHdC5zdGFydHNXaXRoKCJmaWxlOi8vIil8fHllfHx0eXBlb2YgZmV0Y2ghPSJmdW5jdGlvbiI/dGUoSCk6ZmV0Y2goR3Qse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKHR0KXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcodHQsU2UpLnRoZW4oSCxmdW5jdGlvbih1dCl7cmV0dXJuIEtlKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIit1dCksS2UoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksdGUoSCl9KX0pfSkoKS5jYXRjaChyZSkse319KSgpO3ZhciBOdD1PLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKE50PU8uX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9Ty5hc20uaykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSwkdD1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9EZWNvZGVyQnVmZmVyXzA9ZnVuY3Rpb24oKXtyZXR1cm4oJHQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfRGVjb2RlckJ1ZmZlcl8wPU8uYXNtLmwpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRnQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfSW5pdF8yPWZ1bmN0aW9uKCl7cmV0dXJuKEZ0PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX0luaXRfMj1PLmFzbS5tKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG9uPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4ob249Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfX19kZXN0cm95X19fMD1PLmFzbS5uKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFVuPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfMD1mdW5jdGlvbigpe3JldHVybihVbj1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhXzA9Ty5hc20ubykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxqbj1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV90cmFuc2Zvcm1fdHlwZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKGpuPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX3RyYW5zZm9ybV90eXBlXzA9Ty5hc20ucCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxTbj1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKFNuPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX19fZGVzdHJveV9fXzA9Ty5hc20ucSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0bz1PLl9lbXNjcmlwdGVuX2JpbmRfR2VvbWV0cnlBdHRyaWJ1dGVfR2VvbWV0cnlBdHRyaWJ1dGVfMD1mdW5jdGlvbigpe3JldHVybih0bz1PLl9lbXNjcmlwdGVuX2JpbmRfR2VvbWV0cnlBdHRyaWJ1dGVfR2VvbWV0cnlBdHRyaWJ1dGVfMD1PLmFzbS5yKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFN0PU8uX2Vtc2NyaXB0ZW5fYmluZF9HZW9tZXRyeUF0dHJpYnV0ZV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKFN0PU8uX2Vtc2NyaXB0ZW5fYmluZF9HZW9tZXRyeUF0dHJpYnV0ZV9fX2Rlc3Ryb3lfX18wPU8uYXNtLnMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seXQ9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX1BvaW50QXR0cmlidXRlXzA9ZnVuY3Rpb24oKXtyZXR1cm4oeXQ9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX1BvaW50QXR0cmlidXRlXzA9Ty5hc20udCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx3bj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHduPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9zaXplXzA9Ty5hc20udSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxDbj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfR2V0QXR0cmlidXRlVHJhbnNmb3JtRGF0YV8wPWZ1bmN0aW9uKCl7cmV0dXJuKENuPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9HZXRBdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhXzA9Ty5hc20udikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxwbz1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYXR0cmlidXRlX3R5cGVfMD1mdW5jdGlvbigpe3JldHVybihwbz1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYXR0cmlidXRlX3R5cGVfMD1PLmFzbS53KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LER0PU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9kYXRhX3R5cGVfMD1mdW5jdGlvbigpe3JldHVybihEdD1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfZGF0YV90eXBlXzA9Ty5hc20ueCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxhbj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfbnVtX2NvbXBvbmVudHNfMD1mdW5jdGlvbigpe3JldHVybihhbj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfbnVtX2NvbXBvbmVudHNfMD1PLmFzbS55KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEVvPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ub3JtYWxpemVkXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRW89Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX25vcm1hbGl6ZWRfMD1PLmFzbS56KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE1uPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ieXRlX3N0cmlkZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKE1uPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ieXRlX3N0cmlkZV8wPU8uYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSG89Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2J5dGVfb2Zmc2V0XzA9ZnVuY3Rpb24oKXtyZXR1cm4oSG89Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2J5dGVfb2Zmc2V0XzA9Ty5hc20uQikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx2YT1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfdW5pcXVlX2lkXzA9ZnVuY3Rpb24oKXtyZXR1cm4odmE9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX3VuaXF1ZV9pZF8wPU8uYXNtLkMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0semk9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oemk9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX19fZGVzdHJveV9fXzA9Ty5hc20uRCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxHaT1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEdpPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtXzA9Ty5hc20uRSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0aT1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX0luaXRGcm9tQXR0cmlidXRlXzE9ZnVuY3Rpb24oKXtyZXR1cm4odGk9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9Jbml0RnJvbUF0dHJpYnV0ZV8xPU8uYXNtLkYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRmE9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9xdWFudGl6YXRpb25fYml0c18wPWZ1bmN0aW9uKCl7cmV0dXJuKEZhPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fcXVhbnRpemF0aW9uX2JpdHNfMD1PLmFzbS5HKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG5pPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fbWluX3ZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4obmk9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9taW5fdmFsdWVfMT1PLmFzbS5IKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFZpPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fcmFuZ2VfMD1mdW5jdGlvbigpe3JldHVybihWaT1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX3JhbmdlXzA9Ty5hc20uSSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxPcj1PLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oT3I9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9fX2Rlc3Ryb3lfX18wPU8uYXNtLkopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sY289Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV8wPWZ1bmN0aW9uKCl7cmV0dXJuKGNvPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fMD1PLmFzbS5LKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGdvPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX0luaXRGcm9tQXR0cmlidXRlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oZ289Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fSW5pdEZyb21BdHRyaWJ1dGVfMT1PLmFzbS5MKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERhPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX3F1YW50aXphdGlvbl9iaXRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRGE9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fcXVhbnRpemF0aW9uX2JpdHNfMD1PLmFzbS5NKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGtjPU8uX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oa2M9Ty5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fX19kZXN0cm95X19fMD1PLmFzbS5OKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHZjPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX1BvaW50Q2xvdWRfMD1mdW5jdGlvbigpe3JldHVybih2Yz1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9Qb2ludENsb3VkXzA9Ty5hc20uTykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMbj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9udW1fYXR0cmlidXRlc18wPWZ1bmN0aW9uKCl7cmV0dXJuKExuPU8uX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX251bV9hdHRyaWJ1dGVzXzA9Ty5hc20uUCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxTcj1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9udW1fcG9pbnRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oU3I9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfbnVtX3BvaW50c18wPU8uYXNtLlEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSXQ9Ty5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihJdD1PLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9fX2Rlc3Ryb3lfX18wPU8uYXNtLlIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sb2E9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfTWVzaF8wPWZ1bmN0aW9uKCl7cmV0dXJuKG9hPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX01lc2hfMD1PLmFzbS5TKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERkPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9mYWNlc18wPWZ1bmN0aW9uKCl7cmV0dXJuKERkPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9mYWNlc18wPU8uYXNtLlQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQmQ9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX2F0dHJpYnV0ZXNfMD1mdW5jdGlvbigpe3JldHVybihCZD1PLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fYXR0cmlidXRlc18wPU8uYXNtLlUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX3BvaW50c18wPWZ1bmN0aW9uKCl7cmV0dXJuKFVkPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9wb2ludHNfMD1PLmFzbS5WKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEZjPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRmM9Ty5fZW1zY3JpcHRlbl9iaW5kX01lc2hfX19kZXN0cm95X19fMD1PLmFzbS5XKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERjPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YV9NZXRhZGF0YV8wPWZ1bmN0aW9uKCl7cmV0dXJuKERjPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YV9NZXRhZGF0YV8wPU8uYXNtLlgpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZWY9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oZWY9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhX19fZGVzdHJveV9fXzA9Ty5hc20uWSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxqZD1PLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX2NvZGVfMD1mdW5jdGlvbigpe3JldHVybihqZD1PLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX2NvZGVfMD1PLmFzbS5aKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHRmPU8uX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfb2tfMD1mdW5jdGlvbigpe3JldHVybih0Zj1PLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX29rXzA9Ty5hc20uXykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxvaT1PLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX2Vycm9yX21zZ18wPWZ1bmN0aW9uKCl7cmV0dXJuKG9pPU8uX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfZXJyb3JfbXNnXzA9Ty5hc20uJCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMZD1PLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTGQ9Ty5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19fX2Rlc3Ryb3lfX18wPU8uYXNtLmFhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHpkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9EcmFjb0Zsb2F0MzJBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHpkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9EcmFjb0Zsb2F0MzJBcnJheV8wPU8uYXNtLmJhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEdkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKEdkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9HZXRWYWx1ZV8xPU8uYXNtLmNhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGFpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oYWk9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X3NpemVfMD1PLmFzbS5kYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxyaT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihyaT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfX19kZXN0cm95X19fMD1PLmFzbS5lYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxCYz1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfRHJhY29JbnQ4QXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihCYz1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfRHJhY29JbnQ4QXJyYXlfMD1PLmFzbS5mYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxWZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihWZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfR2V0VmFsdWVfMT1PLmFzbS5nYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxIZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEhkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9zaXplXzA9Ty5hc20uaGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQmE9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oQmE9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X19fZGVzdHJveV9fXzA9Ty5hc20uaWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sbmY9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9EcmFjb1VJbnQ4QXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihuZj1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X0RyYWNvVUludDhBcnJheV8wPU8uYXNtLmphKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG9mPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihvZj1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X0dldFZhbHVlXzE9Ty5hc20ua2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVWM9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oVWM9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9zaXplXzA9Ty5hc20ubGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sS2Q9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEtkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfX19kZXN0cm95X19fMD1PLmFzbS5tYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxqYz1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X0RyYWNvSW50MTZBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKGpjPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfRHJhY29JbnQxNkFycmF5XzA9Ty5hc20ubmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKHFkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfR2V0VmFsdWVfMT1PLmFzbS5vYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxXZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihXZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X3NpemVfMD1PLmFzbS5wYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxYZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oWGQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9fX2Rlc3Ryb3lfX18wPU8uYXNtLnFhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFlkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X0RyYWNvVUludDE2QXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihZZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9EcmFjb1VJbnQxNkFycmF5XzA9Ty5hc20ucmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSmQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihKZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9HZXRWYWx1ZV8xPU8uYXNtLnNhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFpkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihaZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9zaXplXzA9Ty5hc20udGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYWY9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihhZj1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9fX2Rlc3Ryb3lfX18wPU8uYXNtLnVhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFFkPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfRHJhY29JbnQzMkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oUWQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9EcmFjb0ludDMyQXJyYXlfMD1PLmFzbS52YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSwkZD1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oJGQ9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9HZXRWYWx1ZV8xPU8uYXNtLndhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGV1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKGV1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfc2l6ZV8wPU8uYXNtLnhhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHR1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybih0dT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X19fZGVzdHJveV9fXzA9Ty5hc20ueWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saWk9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfRHJhY29VSW50MzJBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKGlpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X0RyYWNvVUludDMyQXJyYXlfMD1PLmFzbS56YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxudT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKG51PU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X0dldFZhbHVlXzE9Ty5hc20uQWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sb3U9Ty5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKG91PU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X3NpemVfMD1PLmFzbS5CYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxIaT1PLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEhpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X19fZGVzdHJveV9fXzA9Ty5hc20uQ2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYXU9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9NZXRhZGF0YVF1ZXJpZXJfMD1mdW5jdGlvbigpe3JldHVybihhdT1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX01ldGFkYXRhUXVlcmllcl8wPU8uYXNtLkRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHJ1PU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfSGFzRW50cnlfMj1mdW5jdGlvbigpe3JldHVybihydT1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0hhc0VudHJ5XzI9Ty5hc20uRWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZmE9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRJbnRFbnRyeV8yPWZ1bmN0aW9uKCl7cmV0dXJuKGZhPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0SW50RW50cnlfMj1PLmFzbS5GYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxyZj1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEludEVudHJ5QXJyYXlfMz1mdW5jdGlvbigpe3JldHVybihyZj1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEludEVudHJ5QXJyYXlfMz1PLmFzbS5HYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxpdT1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldERvdWJsZUVudHJ5XzI9ZnVuY3Rpb24oKXtyZXR1cm4oaXU9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXREb3VibGVFbnRyeV8yPU8uYXNtLkhhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGN1PU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0U3RyaW5nRW50cnlfMj1mdW5jdGlvbigpe3JldHVybihjdT1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldFN0cmluZ0VudHJ5XzI9Ty5hc20uSWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sc3U9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9OdW1FbnRyaWVzXzE9ZnVuY3Rpb24oKXtyZXR1cm4oc3U9Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9OdW1FbnRyaWVzXzE9Ty5hc20uSmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sS289Ty5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRFbnRyeU5hbWVfMj1mdW5jdGlvbigpe3JldHVybihLbz1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEVudHJ5TmFtZV8yPU8uYXNtLkthKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGNmPU8uX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihjZj1PLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX19fZGVzdHJveV9fXzA9Ty5hc20uTGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sc2Y9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2Rlcl8wPWZ1bmN0aW9uKCl7cmV0dXJuKHNmPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZXJfMD1PLmFzbS5NYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLaT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVBcnJheVRvUG9pbnRDbG91ZF8zPWZ1bmN0aW9uKCl7cmV0dXJuKEtpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUFycmF5VG9Qb2ludENsb3VkXzM9Ty5hc20uTmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZnU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQXJyYXlUb01lc2hfMz1mdW5jdGlvbigpe3JldHVybihmdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVBcnJheVRvTWVzaF8zPU8uYXNtLk9hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LExjPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkXzI9ZnVuY3Rpb24oKXtyZXR1cm4oTGM9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRfMj1PLmFzbS5QYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxkdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZEJ5TmFtZV8yPWZ1bmN0aW9uKCl7cmV0dXJuKGR1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkQnlOYW1lXzI9Ty5hc20uUWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZmY9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRCeU1ldGFkYXRhRW50cnlfMz1mdW5jdGlvbigpe3JldHVybihmZj1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZEJ5TWV0YWRhdGFFbnRyeV8zPU8uYXNtLlJhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGRmPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZV8yPWZ1bmN0aW9uKCl7cmV0dXJuKGRmPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZV8yPU8uYXNtLlNhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHV1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUJ5VW5pcXVlSWRfMj1mdW5jdGlvbigpe3JldHVybih1dT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkXzI9Ty5hc20uVGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sbHU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0TWV0YWRhdGFfMT1mdW5jdGlvbigpe3JldHVybihsdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRNZXRhZGF0YV8xPU8uYXNtLlVhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHpjPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZU1ldGFkYXRhXzI9ZnVuY3Rpb24oKXtyZXR1cm4oemM9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlTWV0YWRhdGFfMj1PLmFzbS5WYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxSbz1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRGYWNlRnJvbU1lc2hfMz1mdW5jdGlvbigpe3JldHVybihSbz1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRGYWNlRnJvbU1lc2hfMz1PLmFzbS5XYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxHYz1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZVN0cmlwc0Zyb21NZXNoXzI9ZnVuY3Rpb24oKXtyZXR1cm4oR2M9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVTdHJpcHNGcm9tTWVzaF8yPU8uYXNtLlhhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGh1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlc1VJbnQxNkFycmF5XzM9ZnVuY3Rpb24oKXtyZXR1cm4oaHU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVzVUludDE2QXJyYXlfMz1PLmFzbS5ZYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxtdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZXNVSW50MzJBcnJheV8zPWZ1bmN0aW9uKCl7cmV0dXJuKG11PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlc1VJbnQzMkFycmF5XzM9Ty5hc20uWmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYnU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRmxvYXRfMz1mdW5jdGlvbigpe3JldHVybihidT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVGbG9hdF8zPU8uYXNtLl9hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGRhPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oZGE9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHNfMz1PLmFzbS4kYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxwdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnRGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihwdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnRGb3JBbGxQb2ludHNfMz1PLmFzbS5hYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxndT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oZ3U9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50OEZvckFsbFBvaW50c18zPU8uYXNtLmJiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LF91PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oX3U9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHNfMz1PLmFzbS5jYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxxaT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKHFpPU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDE2Rm9yQWxsUG9pbnRzXzM9Ty5hc20uZGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oeXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzXzM9Ty5hc20uZWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQ3I9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihDcj1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50c18zPU8uYXNtLmZiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEF1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKEF1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50c18zPU8uYXNtLmdiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHd1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZURhdGFBcnJheUZvckFsbFBvaW50c181PWZ1bmN0aW9uKCl7cmV0dXJuKHd1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZURhdGFBcnJheUZvckFsbFBvaW50c181PU8uYXNtLmhiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFR1PU8uX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX1NraXBBdHRyaWJ1dGVUcmFuc2Zvcm1fMT1mdW5jdGlvbigpe3JldHVybihUdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9Ta2lwQXR0cmlidXRlVHJhbnNmb3JtXzE9Ty5hc20uaWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0RW5jb2RlZEdlb21ldHJ5VHlwZV9EZXByZWNhdGVkXzE9ZnVuY3Rpb24oKXtyZXR1cm4oRXU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0RW5jb2RlZEdlb21ldHJ5VHlwZV9EZXByZWNhdGVkXzE9Ty5hc20uamIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUnU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQnVmZmVyVG9Qb2ludENsb3VkXzI9ZnVuY3Rpb24oKXtyZXR1cm4oUnU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQnVmZmVyVG9Qb2ludENsb3VkXzI9Ty5hc20ua2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seHU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQnVmZmVyVG9NZXNoXzI9ZnVuY3Rpb24oKXtyZXR1cm4oeHU9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQnVmZmVyVG9NZXNoXzI9Ty5hc20ubGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sT3U9Ty5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihPdT1PLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9fX2Rlc3Ryb3lfX18wPU8uYXNtLm1iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFN1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9JTlZBTElEX1RSQU5TRk9STT1mdW5jdGlvbigpe3JldHVybihTdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfSU5WQUxJRF9UUkFOU0ZPUk09Ty5hc20ubmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQ3U9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX05PX1RSQU5TRk9STT1mdW5jdGlvbigpe3JldHVybihDdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfTk9fVFJBTlNGT1JNPU8uYXNtLm9iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE11PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9RVUFOVElaQVRJT05fVFJBTlNGT1JNPWZ1bmN0aW9uKCl7cmV0dXJuKE11PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9RVUFOVElaQVRJT05fVFJBTlNGT1JNPU8uYXNtLnBiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE51PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9PQ1RBSEVEUk9OX1RSQU5TRk9STT1mdW5jdGlvbigpe3JldHVybihOdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfT0NUQUhFRFJPTl9UUkFOU0ZPUk09Ty5hc20ucWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sY2k9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfSU5WQUxJRD1mdW5jdGlvbigpe3JldHVybihjaT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9JTlZBTElEPU8uYXNtLnJiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEl1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX1BPU0lUSU9OPWZ1bmN0aW9uKCl7cmV0dXJuKEl1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX1BPU0lUSU9OPU8uYXNtLnNiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFB1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX05PUk1BTD1mdW5jdGlvbigpe3JldHVybihQdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9OT1JNQUw9Ty5hc20udGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV2k9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfQ09MT1I9ZnVuY3Rpb24oKXtyZXR1cm4oV2k9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfQ09MT1I9Ty5hc20udWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVmM9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfVEVYX0NPT1JEPWZ1bmN0aW9uKCl7cmV0dXJuKFZjPU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX1RFWF9DT09SRD1PLmFzbS52YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxrdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9HRU5FUklDPWZ1bmN0aW9uKCl7cmV0dXJuKGt1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0dFTkVSSUM9Ty5hc20ud2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdWY9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfSU5WQUxJRF9HRU9NRVRSWV9UWVBFPWZ1bmN0aW9uKCl7cmV0dXJuKHVmPU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX0lOVkFMSURfR0VPTUVUUllfVFlQRT1PLmFzbS54YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx2dT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9QT0lOVF9DTE9VRD1mdW5jdGlvbigpe3JldHVybih2dT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9QT0lOVF9DTE9VRD1PLmFzbS55YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxGdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9UUklBTkdVTEFSX01FU0g9ZnVuY3Rpb24oKXtyZXR1cm4oRnU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfVFJJQU5HVUxBUl9NRVNIPU8uYXNtLnpiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LER1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlZBTElEPWZ1bmN0aW9uKCl7cmV0dXJuKER1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlZBTElEPU8uYXNtLkFiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEJ1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQ4PWZ1bmN0aW9uKCl7cmV0dXJuKEJ1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQ4PU8uYXNtLkJiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFV1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UOD1mdW5jdGlvbigpe3JldHVybihVdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDg9Ty5hc20uQ2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sanU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDE2PWZ1bmN0aW9uKCl7cmV0dXJuKGp1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQxNj1PLmFzbS5EYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDE2PWZ1bmN0aW9uKCl7cmV0dXJuKEx1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UMTY9Ty5hc20uRWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0senU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDMyPWZ1bmN0aW9uKCl7cmV0dXJuKHp1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQzMj1PLmFzbS5GYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxsZj1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDMyPWZ1bmN0aW9uKCl7cmV0dXJuKGxmPU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UMzI9Ty5hc20uR2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sR3U9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDY0PWZ1bmN0aW9uKCl7cmV0dXJuKEd1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQ2ND1PLmFzbS5IYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxWdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDY0PWZ1bmN0aW9uKCl7cmV0dXJuKFZ1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UNjQ9Ty5hc20uSWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSHU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0ZMT0FUMzI9ZnVuY3Rpb24oKXtyZXR1cm4oSHU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0ZMT0FUMzI9Ty5hc20uSmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sS3U9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0ZMT0FUNjQ9ZnVuY3Rpb24oKXtyZXR1cm4oS3U9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0ZMT0FUNjQ9Ty5hc20uS2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0JPT0w9ZnVuY3Rpb24oKXtyZXR1cm4ocXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0JPT0w9Ty5hc20uTGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV3U9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1RZUEVTX0NPVU5UPWZ1bmN0aW9uKCl7cmV0dXJuKFd1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9UWVBFU19DT1VOVD1PLmFzbS5NYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxYdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9PSz1mdW5jdGlvbigpe3JldHVybihYdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9PSz1PLmFzbS5OYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxYaT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9EUkFDT19FUlJPUj1mdW5jdGlvbigpe3JldHVybihYaT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9EUkFDT19FUlJPUj1PLmFzbS5PYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxZdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9JT19FUlJPUj1mdW5jdGlvbigpe3JldHVybihZdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9JT19FUlJPUj1PLmFzbS5QYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxKdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9JTlZBTElEX1BBUkFNRVRFUj1mdW5jdGlvbigpe3JldHVybihKdT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9JTlZBTElEX1BBUkFNRVRFUj1PLmFzbS5RYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxadT1PLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9VTlNVUFBPUlRFRF9WRVJTSU9OPWZ1bmN0aW9uKCl7cmV0dXJuKFp1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX1VOU1VQUE9SVEVEX1ZFUlNJT049Ty5hc20uUmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUXU9Ty5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfVU5LTk9XTl9WRVJTSU9OPWZ1bmN0aW9uKCl7cmV0dXJuKFF1PU8uX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX1VOS05PV05fVkVSU0lPTj1PLmFzbS5TYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtPLl9tYWxsb2M9ZnVuY3Rpb24oKXtyZXR1cm4oTy5fbWFsbG9jPU8uYXNtLlRiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE8uX2ZyZWU9ZnVuY3Rpb24oKXtyZXR1cm4oTy5fZnJlZT1PLmFzbS5VYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgJHU9ZnVuY3Rpb24oKXtyZXR1cm4oJHU9Ty5hc20uVmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07Ty5fX19zdGFydF9lbV9qcz0xNTg1NixPLl9fX3N0b3BfZW1fanM9MTU5NTQ7dmFyIGhmO2lmKE10PWZ1bmN0aW9uIHooKXtoZnx8bCgpLGhmfHwoTXQ9eil9LE8ucHJlSW5pdClmb3IodHlwZW9mIE8ucHJlSW5pdD09ImZ1bmN0aW9uIiYmKE8ucHJlSW5pdD1bTy5wcmVJbml0XSk7MDxPLnByZUluaXQubGVuZ3RoOylPLnByZUluaXQucG9wKCkoKTtsKCksbS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksbS5wcm90b3R5cGUuY29uc3RydWN0b3I9bSxtLnByb3RvdHlwZS5fX2NsYXNzX189bSxtLl9fY2FjaGVfXz17fSxPLldyYXBwZXJPYmplY3Q9bSxPLmdldENhY2hlPWgsTy53cmFwUG9pbnRlcj1iLE8uY2FzdE9iamVjdD1mdW5jdGlvbih6LEgpe3JldHVybiBiKHoucHRyLEgpfSxPLk5VTEw9YigwKSxPLmRlc3Ryb3k9ZnVuY3Rpb24oeil7aWYoIXouX19kZXN0cm95X18pdGhyb3ciRXJyb3I6IENhbm5vdCBkZXN0cm95IG9iamVjdC4gKERpZCB5b3UgY3JlYXRlIGl0IHlvdXJzZWxmPykiO3ouX19kZXN0cm95X18oKSxkZWxldGUgaCh6Ll9fY2xhc3NfXylbei5wdHJdfSxPLmNvbXBhcmU9ZnVuY3Rpb24oeixIKXtyZXR1cm4gei5wdHI9PT1ILnB0cn0sTy5nZXRQb2ludGVyPWZ1bmN0aW9uKHope3JldHVybiB6LnB0cn0sTy5nZXRDbGFzcz1mdW5jdGlvbih6KXtyZXR1cm4gei5fX2NsYXNzX199O3ZhciBBdD17YnVmZmVyOjAsc2l6ZTowLHBvczowLHRlbXBzOltdLG5lZWRlZDowLHByZXBhcmU6ZnVuY3Rpb24oKXtpZihBdC5uZWVkZWQpe2Zvcih2YXIgej0wO3o8QXQudGVtcHMubGVuZ3RoO3orKylPLl9mcmVlKEF0LnRlbXBzW3pdKTtBdC50ZW1wcy5sZW5ndGg9MCxPLl9mcmVlKEF0LmJ1ZmZlciksQXQuYnVmZmVyPTAsQXQuc2l6ZSs9QXQubmVlZGVkLEF0Lm5lZWRlZD0wfUF0LmJ1ZmZlcnx8KEF0LnNpemUrPTEyOCxBdC5idWZmZXI9Ty5fbWFsbG9jKEF0LnNpemUpLEF0LmJ1ZmZlcnx8aSh2b2lkIDApKSxBdC5wb3M9MH0sYWxsb2M6ZnVuY3Rpb24oeixIKXtyZXR1cm4gQXQuYnVmZmVyfHxpKHZvaWQgMCksej16Lmxlbmd0aCpILkJZVEVTX1BFUl9FTEVNRU5ULHo9eis3Ji04LEF0LnBvcyt6Pj1BdC5zaXplPygwPHp8fGkodm9pZCAwKSxBdC5uZWVkZWQrPXosSD1PLl9tYWxsb2MoeiksQXQudGVtcHMucHVzaChIKSk6KEg9QXQuYnVmZmVyK0F0LnBvcyxBdC5wb3MrPXopLEh9LGNvcHk6ZnVuY3Rpb24oeixILHRlKXtzd2l0Y2godGU+Pj49MCxILkJZVEVTX1BFUl9FTEVNRU5UKXtjYXNlIDI6dGU+Pj49MTticmVhaztjYXNlIDQ6dGU+Pj49MjticmVhaztjYXNlIDg6dGU+Pj49M31mb3IodmFyIFNlPTA7U2U8ei5sZW5ndGg7U2UrKylIW3RlK1NlXT16W1NlXX19O3JldHVybiBULnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKSxULnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ULFQucHJvdG90eXBlLl9fY2xhc3NfXz1ULFQuX19jYWNoZV9fPXt9LE8uVm9pZFB0cj1ULFQucHJvdG90eXBlLl9fZGVzdHJveV9fPVQucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7TnQodGhpcy5wdHIpfSxfLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKSxfLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1fLF8ucHJvdG90eXBlLl9fY2xhc3NfXz1fLF8uX19jYWNoZV9fPXt9LE8uRGVjb2RlckJ1ZmZlcj1fLF8ucHJvdG90eXBlLkluaXQ9Xy5wcm90b3R5cGUuSW5pdD1mdW5jdGlvbih6LEgpe3ZhciB0ZT10aGlzLnB0cjtBdC5wcmVwYXJlKCksdHlwZW9mIHo9PSJvYmplY3QiJiYoej15KHopKSxIJiZ0eXBlb2YgSD09Im9iamVjdCImJihIPUgucHRyKSxGdCh0ZSx6LEgpfSxfLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1fLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe29uKHRoaXMucHRyKX0sdy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksdy5wcm90b3R5cGUuY29uc3RydWN0b3I9dyx3LnByb3RvdHlwZS5fX2NsYXNzX189dyx3Ll9fY2FjaGVfXz17fSxPLkF0dHJpYnV0ZVRyYW5zZm9ybURhdGE9dyx3LnByb3RvdHlwZS50cmFuc2Zvcm1fdHlwZT13LnByb3RvdHlwZS50cmFuc2Zvcm1fdHlwZT1mdW5jdGlvbigpe3JldHVybiBqbih0aGlzLnB0cil9LHcucHJvdG90eXBlLl9fZGVzdHJveV9fPXcucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7U24odGhpcy5wdHIpfSxFLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKSxFLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FLEUucHJvdG90eXBlLl9fY2xhc3NfXz1FLEUuX19jYWNoZV9fPXt9LE8uR2VvbWV0cnlBdHRyaWJ1dGU9RSxFLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1FLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1N0KHRoaXMucHRyKX0sUi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksUi5wcm90b3R5cGUuY29uc3RydWN0b3I9UixSLnByb3RvdHlwZS5fX2NsYXNzX189UixSLl9fY2FjaGVfXz17fSxPLlBvaW50QXR0cmlidXRlPVIsUi5wcm90b3R5cGUuc2l6ZT1SLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHduKHRoaXMucHRyKX0sUi5wcm90b3R5cGUuR2V0QXR0cmlidXRlVHJhbnNmb3JtRGF0YT1SLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIGIoQ24odGhpcy5wdHIpLHcpfSxSLnByb3RvdHlwZS5hdHRyaWJ1dGVfdHlwZT1SLnByb3RvdHlwZS5hdHRyaWJ1dGVfdHlwZT1mdW5jdGlvbigpe3JldHVybiBwbyh0aGlzLnB0cil9LFIucHJvdG90eXBlLmRhdGFfdHlwZT1SLnByb3RvdHlwZS5kYXRhX3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gRHQodGhpcy5wdHIpfSxSLnByb3RvdHlwZS5udW1fY29tcG9uZW50cz1SLnByb3RvdHlwZS5udW1fY29tcG9uZW50cz1mdW5jdGlvbigpe3JldHVybiBhbih0aGlzLnB0cil9LFIucHJvdG90eXBlLm5vcm1hbGl6ZWQ9Ui5wcm90b3R5cGUubm9ybWFsaXplZD1mdW5jdGlvbigpe3JldHVybiEhRW8odGhpcy5wdHIpfSxSLnByb3RvdHlwZS5ieXRlX3N0cmlkZT1SLnByb3RvdHlwZS5ieXRlX3N0cmlkZT1mdW5jdGlvbigpe3JldHVybiBNbih0aGlzLnB0cil9LFIucHJvdG90eXBlLmJ5dGVfb2Zmc2V0PVIucHJvdG90eXBlLmJ5dGVfb2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIEhvKHRoaXMucHRyKX0sUi5wcm90b3R5cGUudW5pcXVlX2lkPVIucHJvdG90eXBlLnVuaXF1ZV9pZD1mdW5jdGlvbigpe3JldHVybiB2YSh0aGlzLnB0cil9LFIucHJvdG90eXBlLl9fZGVzdHJveV9fPVIucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7emkodGhpcy5wdHIpfSxTLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKSxTLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TLFMucHJvdG90eXBlLl9fY2xhc3NfXz1TLFMuX19jYWNoZV9fPXt9LE8uQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtPVMsUy5wcm90b3R5cGUuSW5pdEZyb21BdHRyaWJ1dGU9Uy5wcm90b3R5cGUuSW5pdEZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oeil7dmFyIEg9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLCEhdGkoSCx6KX0sUy5wcm90b3R5cGUucXVhbnRpemF0aW9uX2JpdHM9Uy5wcm90b3R5cGUucXVhbnRpemF0aW9uX2JpdHM9ZnVuY3Rpb24oKXtyZXR1cm4gRmEodGhpcy5wdHIpfSxTLnByb3RvdHlwZS5taW5fdmFsdWU9Uy5wcm90b3R5cGUubWluX3ZhbHVlPWZ1bmN0aW9uKHope3ZhciBIPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxuaShILHopfSxTLnByb3RvdHlwZS5yYW5nZT1TLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBWaSh0aGlzLnB0cil9LFMucHJvdG90eXBlLl9fZGVzdHJveV9fPVMucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7T3IodGhpcy5wdHIpfSxDLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKSxDLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1DLEMucHJvdG90eXBlLl9fY2xhc3NfXz1DLEMuX19jYWNoZV9fPXt9LE8uQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybT1DLEMucHJvdG90eXBlLkluaXRGcm9tQXR0cmlidXRlPUMucHJvdG90eXBlLkluaXRGcm9tQXR0cmlidXRlPWZ1bmN0aW9uKHope3ZhciBIPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSwhIWdvKEgseil9LEMucHJvdG90eXBlLnF1YW50aXphdGlvbl9iaXRzPUMucHJvdG90eXBlLnF1YW50aXphdGlvbl9iaXRzPWZ1bmN0aW9uKCl7cmV0dXJuIERhKHRoaXMucHRyKX0sQy5wcm90b3R5cGUuX19kZXN0cm95X189Qy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtrYyh0aGlzLnB0cil9LEkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpLEkucHJvdG90eXBlLmNvbnN0cnVjdG9yPUksSS5wcm90b3R5cGUuX19jbGFzc19fPUksSS5fX2NhY2hlX189e30sTy5Qb2ludENsb3VkPUksSS5wcm90b3R5cGUubnVtX2F0dHJpYnV0ZXM9SS5wcm90b3R5cGUubnVtX2F0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gTG4odGhpcy5wdHIpfSxJLnByb3RvdHlwZS5udW1fcG9pbnRzPUkucHJvdG90eXBlLm51bV9wb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gU3IodGhpcy5wdHIpfSxJLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1JLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0l0KHRoaXMucHRyKX0sTS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksTS5wcm90b3R5cGUuY29uc3RydWN0b3I9TSxNLnByb3RvdHlwZS5fX2NsYXNzX189TSxNLl9fY2FjaGVfXz17fSxPLk1lc2g9TSxNLnByb3RvdHlwZS5udW1fZmFjZXM9TS5wcm90b3R5cGUubnVtX2ZhY2VzPWZ1bmN0aW9uKCl7cmV0dXJuIERkKHRoaXMucHRyKX0sTS5wcm90b3R5cGUubnVtX2F0dHJpYnV0ZXM9TS5wcm90b3R5cGUubnVtX2F0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQmQodGhpcy5wdHIpfSxNLnByb3RvdHlwZS5udW1fcG9pbnRzPU0ucHJvdG90eXBlLm51bV9wb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gVWQodGhpcy5wdHIpfSxNLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1NLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0ZjKHRoaXMucHRyKX0sUC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksUC5wcm90b3R5cGUuY29uc3RydWN0b3I9UCxQLnByb3RvdHlwZS5fX2NsYXNzX189UCxQLl9fY2FjaGVfXz17fSxPLk1ldGFkYXRhPVAsUC5wcm90b3R5cGUuX19kZXN0cm95X189UC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtlZih0aGlzLnB0cil9LEYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpLEYucHJvdG90eXBlLmNvbnN0cnVjdG9yPUYsRi5wcm90b3R5cGUuX19jbGFzc19fPUYsRi5fX2NhY2hlX189e30sTy5TdGF0dXM9RixGLnByb3RvdHlwZS5jb2RlPUYucHJvdG90eXBlLmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gamQodGhpcy5wdHIpfSxGLnByb3RvdHlwZS5vaz1GLnByb3RvdHlwZS5vaz1mdW5jdGlvbigpe3JldHVybiEhdGYodGhpcy5wdHIpfSxGLnByb3RvdHlwZS5lcnJvcl9tc2c9Ri5wcm90b3R5cGUuZXJyb3JfbXNnPWZ1bmN0aW9uKCl7cmV0dXJuIGEob2kodGhpcy5wdHIpKX0sRi5wcm90b3R5cGUuX19kZXN0cm95X189Ri5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtMZCh0aGlzLnB0cil9LEEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsQS5wcm90b3R5cGUuX19jbGFzc19fPUEsQS5fX2NhY2hlX189e30sTy5EcmFjb0Zsb2F0MzJBcnJheT1BLEEucHJvdG90eXBlLkdldFZhbHVlPUEucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKHope3ZhciBIPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxHZChILHopfSxBLnByb3RvdHlwZS5zaXplPUEucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gYWkodGhpcy5wdHIpfSxBLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1BLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3JpKHRoaXMucHRyKX0seC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSkseC5wcm90b3R5cGUuY29uc3RydWN0b3I9eCx4LnByb3RvdHlwZS5fX2NsYXNzX189eCx4Ll9fY2FjaGVfXz17fSxPLkRyYWNvSW50OEFycmF5PXgseC5wcm90b3R5cGUuR2V0VmFsdWU9eC5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oeil7dmFyIEg9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLFZkKEgseil9LHgucHJvdG90eXBlLnNpemU9eC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBIZCh0aGlzLnB0cil9LHgucHJvdG90eXBlLl9fZGVzdHJveV9fPXgucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7QmEodGhpcy5wdHIpfSxOLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKSxOLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1OLE4ucHJvdG90eXBlLl9fY2xhc3NfXz1OLE4uX19jYWNoZV9fPXt9LE8uRHJhY29VSW50OEFycmF5PU4sTi5wcm90b3R5cGUuR2V0VmFsdWU9Ti5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oeil7dmFyIEg9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLG9mKEgseil9LE4ucHJvdG90eXBlLnNpemU9Ti5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBVYyh0aGlzLnB0cil9LE4ucHJvdG90eXBlLl9fZGVzdHJveV9fPU4ucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7S2QodGhpcy5wdHIpfSx2LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKSx2LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj12LHYucHJvdG90eXBlLl9fY2xhc3NfXz12LHYuX19jYWNoZV9fPXt9LE8uRHJhY29JbnQxNkFycmF5PXYsdi5wcm90b3R5cGUuR2V0VmFsdWU9di5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oeil7dmFyIEg9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLHFkKEgseil9LHYucHJvdG90eXBlLnNpemU9di5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBXZCh0aGlzLnB0cil9LHYucHJvdG90eXBlLl9fZGVzdHJveV9fPXYucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7WGQodGhpcy5wdHIpfSxVLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKSxVLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VLFUucHJvdG90eXBlLl9fY2xhc3NfXz1VLFUuX19jYWNoZV9fPXt9LE8uRHJhY29VSW50MTZBcnJheT1VLFUucHJvdG90eXBlLkdldFZhbHVlPVUucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKHope3ZhciBIPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxKZChILHopfSxVLnByb3RvdHlwZS5zaXplPVUucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gWmQodGhpcy5wdHIpfSxVLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1VLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe2FmKHRoaXMucHRyKX0sTC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksTC5wcm90b3R5cGUuY29uc3RydWN0b3I9TCxMLnByb3RvdHlwZS5fX2NsYXNzX189TCxMLl9fY2FjaGVfXz17fSxPLkRyYWNvSW50MzJBcnJheT1MLEwucHJvdG90eXBlLkdldFZhbHVlPUwucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKHope3ZhciBIPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSwkZChILHopfSxMLnByb3RvdHlwZS5zaXplPUwucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZXUodGhpcy5wdHIpfSxMLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1MLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3R1KHRoaXMucHRyKX0sRC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksRC5wcm90b3R5cGUuY29uc3RydWN0b3I9RCxELnByb3RvdHlwZS5fX2NsYXNzX189RCxELl9fY2FjaGVfXz17fSxPLkRyYWNvVUludDMyQXJyYXk9RCxELnByb3RvdHlwZS5HZXRWYWx1ZT1ELnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbih6KXt2YXIgSD10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksbnUoSCx6KX0sRC5wcm90b3R5cGUuc2l6ZT1ELnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIG91KHRoaXMucHRyKX0sRC5wcm90b3R5cGUuX19kZXN0cm95X189RC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtIaSh0aGlzLnB0cil9LEcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpLEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUcsRy5wcm90b3R5cGUuX19jbGFzc19fPUcsRy5fX2NhY2hlX189e30sTy5NZXRhZGF0YVF1ZXJpZXI9RyxHLnByb3RvdHlwZS5IYXNFbnRyeT1HLnByb3RvdHlwZS5IYXNFbnRyeT1mdW5jdGlvbih6LEgpe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gQXQucHJlcGFyZSgpLHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLEg9SCYmdHlwZW9mIEg9PSJvYmplY3QiP0gucHRyOnAoSCksISFydSh0ZSx6LEgpfSxHLnByb3RvdHlwZS5HZXRJbnRFbnRyeT1HLnByb3RvdHlwZS5HZXRJbnRFbnRyeT1mdW5jdGlvbih6LEgpe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gQXQucHJlcGFyZSgpLHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLEg9SCYmdHlwZW9mIEg9PSJvYmplY3QiP0gucHRyOnAoSCksZmEodGUseixIKX0sRy5wcm90b3R5cGUuR2V0SW50RW50cnlBcnJheT1HLnByb3RvdHlwZS5HZXRJbnRFbnRyeUFycmF5PWZ1bmN0aW9uKHosSCx0ZSl7dmFyIFNlPXRoaXMucHRyO0F0LnByZXBhcmUoKSx6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxIPUgmJnR5cGVvZiBIPT0ib2JqZWN0Ij9ILnB0cjpwKEgpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSxyZihTZSx6LEgsdGUpfSxHLnByb3RvdHlwZS5HZXREb3VibGVFbnRyeT1HLnByb3RvdHlwZS5HZXREb3VibGVFbnRyeT1mdW5jdGlvbih6LEgpe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4gQXQucHJlcGFyZSgpLHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLEg9SCYmdHlwZW9mIEg9PSJvYmplY3QiP0gucHRyOnAoSCksaXUodGUseixIKX0sRy5wcm90b3R5cGUuR2V0U3RyaW5nRW50cnk9Ry5wcm90b3R5cGUuR2V0U3RyaW5nRW50cnk9ZnVuY3Rpb24oeixIKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIEF0LnByZXBhcmUoKSx6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxIPUgmJnR5cGVvZiBIPT0ib2JqZWN0Ij9ILnB0cjpwKEgpLGEoY3UodGUseixIKSl9LEcucHJvdG90eXBlLk51bUVudHJpZXM9Ry5wcm90b3R5cGUuTnVtRW50cmllcz1mdW5jdGlvbih6KXt2YXIgSD10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksc3UoSCx6KX0sRy5wcm90b3R5cGUuR2V0RW50cnlOYW1lPUcucHJvdG90eXBlLkdldEVudHJ5TmFtZT1mdW5jdGlvbih6LEgpe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksSCYmdHlwZW9mIEg9PSJvYmplY3QiJiYoSD1ILnB0ciksYShLbyh0ZSx6LEgpKX0sRy5wcm90b3R5cGUuX19kZXN0cm95X189Ry5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtjZih0aGlzLnB0cil9LFYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVYsVi5wcm90b3R5cGUuX19jbGFzc19fPVYsVi5fX2NhY2hlX189e30sTy5EZWNvZGVyPVYsVi5wcm90b3R5cGUuRGVjb2RlQXJyYXlUb1BvaW50Q2xvdWQ9Vi5wcm90b3R5cGUuRGVjb2RlQXJyYXlUb1BvaW50Q2xvdWQ9ZnVuY3Rpb24oeixILHRlKXt2YXIgU2U9dGhpcy5wdHI7cmV0dXJuIEF0LnByZXBhcmUoKSx0eXBlb2Ygej09Im9iamVjdCImJih6PXkoeikpLEgmJnR5cGVvZiBIPT0ib2JqZWN0IiYmKEg9SC5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSxiKEtpKFNlLHosSCx0ZSksRil9LFYucHJvdG90eXBlLkRlY29kZUFycmF5VG9NZXNoPVYucHJvdG90eXBlLkRlY29kZUFycmF5VG9NZXNoPWZ1bmN0aW9uKHosSCx0ZSl7dmFyIFNlPXRoaXMucHRyO3JldHVybiBBdC5wcmVwYXJlKCksdHlwZW9mIHo9PSJvYmplY3QiJiYoej15KHopKSxIJiZ0eXBlb2YgSD09Im9iamVjdCImJihIPUgucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksYihmdShTZSx6LEgsdGUpLEYpfSxWLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZD1WLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZD1mdW5jdGlvbih6LEgpe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksSCYmdHlwZW9mIEg9PSJvYmplY3QiJiYoSD1ILnB0ciksTGModGUseixIKX0sVi5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWRCeU5hbWU9Vi5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWRCeU5hbWU9ZnVuY3Rpb24oeixIKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIEF0LnByZXBhcmUoKSx6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxIPUgmJnR5cGVvZiBIPT0ib2JqZWN0Ij9ILnB0cjpwKEgpLGR1KHRlLHosSCl9LFYucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkQnlNZXRhZGF0YUVudHJ5PVYucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkQnlNZXRhZGF0YUVudHJ5PWZ1bmN0aW9uKHosSCx0ZSl7dmFyIFNlPXRoaXMucHRyO3JldHVybiBBdC5wcmVwYXJlKCkseiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksSD1IJiZ0eXBlb2YgSD09Im9iamVjdCI/SC5wdHI6cChIKSx0ZT10ZSYmdHlwZW9mIHRlPT0ib2JqZWN0Ij90ZS5wdHI6cCh0ZSksZmYoU2UseixILHRlKX0sVi5wcm90b3R5cGUuR2V0QXR0cmlidXRlPVYucHJvdG90eXBlLkdldEF0dHJpYnV0ZT1mdW5jdGlvbih6LEgpe3ZhciB0ZT10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksSCYmdHlwZW9mIEg9PSJvYmplY3QiJiYoSD1ILnB0ciksYihkZih0ZSx6LEgpLFIpfSxWLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkPVYucHJvdG90eXBlLkdldEF0dHJpYnV0ZUJ5VW5pcXVlSWQ9ZnVuY3Rpb24oeixIKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLEgmJnR5cGVvZiBIPT0ib2JqZWN0IiYmKEg9SC5wdHIpLGIodXUodGUseixIKSxSKX0sVi5wcm90b3R5cGUuR2V0TWV0YWRhdGE9Vi5wcm90b3R5cGUuR2V0TWV0YWRhdGE9ZnVuY3Rpb24oeil7dmFyIEg9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLGIobHUoSCx6KSxQKX0sVi5wcm90b3R5cGUuR2V0QXR0cmlidXRlTWV0YWRhdGE9Vi5wcm90b3R5cGUuR2V0QXR0cmlidXRlTWV0YWRhdGE9ZnVuY3Rpb24oeixIKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLEgmJnR5cGVvZiBIPT0ib2JqZWN0IiYmKEg9SC5wdHIpLGIoemModGUseixIKSxQKX0sVi5wcm90b3R5cGUuR2V0RmFjZUZyb21NZXNoPVYucHJvdG90eXBlLkdldEZhY2VGcm9tTWVzaD1mdW5jdGlvbih6LEgsdGUpe3ZhciBTZT10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksSCYmdHlwZW9mIEg9PSJvYmplY3QiJiYoSD1ILnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhUm8oU2UseixILHRlKX0sVi5wcm90b3R5cGUuR2V0VHJpYW5nbGVTdHJpcHNGcm9tTWVzaD1WLnByb3RvdHlwZS5HZXRUcmlhbmdsZVN0cmlwc0Zyb21NZXNoPWZ1bmN0aW9uKHosSCl7dmFyIHRlPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxIJiZ0eXBlb2YgSD09Im9iamVjdCImJihIPUgucHRyKSxHYyh0ZSx6LEgpfSxWLnByb3RvdHlwZS5HZXRUcmlhbmdsZXNVSW50MTZBcnJheT1WLnByb3RvdHlwZS5HZXRUcmlhbmdsZXNVSW50MTZBcnJheT1mdW5jdGlvbih6LEgsdGUpe3ZhciBTZT10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksSCYmdHlwZW9mIEg9PSJvYmplY3QiJiYoSD1ILnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhaHUoU2UseixILHRlKX0sVi5wcm90b3R5cGUuR2V0VHJpYW5nbGVzVUludDMyQXJyYXk9Vi5wcm90b3R5cGUuR2V0VHJpYW5nbGVzVUludDMyQXJyYXk9ZnVuY3Rpb24oeixILHRlKXt2YXIgU2U9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLEgmJnR5cGVvZiBIPT0ib2JqZWN0IiYmKEg9SC5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSwhIW11KFNlLHosSCx0ZSl9LFYucHJvdG90eXBlLkdldEF0dHJpYnV0ZUZsb2F0PVYucHJvdG90eXBlLkdldEF0dHJpYnV0ZUZsb2F0PWZ1bmN0aW9uKHosSCx0ZSl7dmFyIFNlPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxIJiZ0eXBlb2YgSD09Im9iamVjdCImJihIPUgucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFidShTZSx6LEgsdGUpfSxWLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50cz1WLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50cz1mdW5jdGlvbih6LEgsdGUpe3ZhciBTZT10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksSCYmdHlwZW9mIEg9PSJvYmplY3QiJiYoSD1ILnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhZGEoU2UseixILHRlKX0sVi5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50Rm9yQWxsUG9pbnRzPVYucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludEZvckFsbFBvaW50cz1mdW5jdGlvbih6LEgsdGUpe3ZhciBTZT10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksSCYmdHlwZW9mIEg9PSJvYmplY3QiJiYoSD1ILnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhcHUoU2UseixILHRlKX0sVi5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50OEZvckFsbFBvaW50cz1WLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKHosSCx0ZSl7dmFyIFNlPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxIJiZ0eXBlb2YgSD09Im9iamVjdCImJihIPUgucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFndShTZSx6LEgsdGUpfSxWLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cz1WLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cz1mdW5jdGlvbih6LEgsdGUpe3ZhciBTZT10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksSCYmdHlwZW9mIEg9PSJvYmplY3QiJiYoSD1ILnB0ciksdGUmJnR5cGVvZiB0ZT09Im9iamVjdCImJih0ZT10ZS5wdHIpLCEhX3UoU2UseixILHRlKX0sVi5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHM9Vi5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHM9ZnVuY3Rpb24oeixILHRlKXt2YXIgU2U9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLEgmJnR5cGVvZiBIPT0ib2JqZWN0IiYmKEg9SC5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSwhIXFpKFNlLHosSCx0ZSl9LFYucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cz1WLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHM9ZnVuY3Rpb24oeixILHRlKXt2YXIgU2U9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLEgmJnR5cGVvZiBIPT0ib2JqZWN0IiYmKEg9SC5wdHIpLHRlJiZ0eXBlb2YgdGU9PSJvYmplY3QiJiYodGU9dGUucHRyKSwhIXl1KFNlLHosSCx0ZSl9LFYucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDMyRm9yQWxsUG9pbnRzPVYucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDMyRm9yQWxsUG9pbnRzPWZ1bmN0aW9uKHosSCx0ZSl7dmFyIFNlPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxIJiZ0eXBlb2YgSD09Im9iamVjdCImJihIPUgucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFDcihTZSx6LEgsdGUpfSxWLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHM9Vi5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzPWZ1bmN0aW9uKHosSCx0ZSl7dmFyIFNlPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxIJiZ0eXBlb2YgSD09Im9iamVjdCImJihIPUgucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksISFBdShTZSx6LEgsdGUpfSxWLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVEYXRhQXJyYXlGb3JBbGxQb2ludHM9Vi5wcm90b3R5cGUuR2V0QXR0cmlidXRlRGF0YUFycmF5Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKHosSCx0ZSxTZSx0dCl7dmFyIHV0PXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxIJiZ0eXBlb2YgSD09Im9iamVjdCImJihIPUgucHRyKSx0ZSYmdHlwZW9mIHRlPT0ib2JqZWN0IiYmKHRlPXRlLnB0ciksU2UmJnR5cGVvZiBTZT09Im9iamVjdCImJihTZT1TZS5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIXd1KHV0LHosSCx0ZSxTZSx0dCl9LFYucHJvdG90eXBlLlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm09Vi5wcm90b3R5cGUuU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybT1mdW5jdGlvbih6KXt2YXIgSD10aGlzLnB0cjt6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxUdShILHopfSxWLnByb3RvdHlwZS5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlX0RlcHJlY2F0ZWQ9Vi5wcm90b3R5cGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZV9EZXByZWNhdGVkPWZ1bmN0aW9uKHope3ZhciBIPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxFdShILHopfSxWLnByb3RvdHlwZS5EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWQ9Vi5wcm90b3R5cGUuRGVjb2RlQnVmZmVyVG9Qb2ludENsb3VkPWZ1bmN0aW9uKHosSCl7dmFyIHRlPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxIJiZ0eXBlb2YgSD09Im9iamVjdCImJihIPUgucHRyKSxiKFJ1KHRlLHosSCksRil9LFYucHJvdG90eXBlLkRlY29kZUJ1ZmZlclRvTWVzaD1WLnByb3RvdHlwZS5EZWNvZGVCdWZmZXJUb01lc2g9ZnVuY3Rpb24oeixIKXt2YXIgdGU9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLEgmJnR5cGVvZiBIPT0ib2JqZWN0IiYmKEg9SC5wdHIpLGIoeHUodGUseixIKSxGKX0sVi5wcm90b3R5cGUuX19kZXN0cm95X189Vi5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtPdSh0aGlzLnB0cil9LChmdW5jdGlvbigpe2Z1bmN0aW9uIHooKXtPLkFUVFJJQlVURV9JTlZBTElEX1RSQU5TRk9STT1TdSgpLE8uQVRUUklCVVRFX05PX1RSQU5TRk9STT1DdSgpLE8uQVRUUklCVVRFX1FVQU5USVpBVElPTl9UUkFOU0ZPUk09TXUoKSxPLkFUVFJJQlVURV9PQ1RBSEVEUk9OX1RSQU5TRk9STT1OdSgpLE8uSU5WQUxJRD1jaSgpLE8uUE9TSVRJT049SXUoKSxPLk5PUk1BTD1QdSgpLE8uQ09MT1I9V2koKSxPLlRFWF9DT09SRD1WYygpLE8uR0VORVJJQz1rdSgpLE8uSU5WQUxJRF9HRU9NRVRSWV9UWVBFPXVmKCksTy5QT0lOVF9DTE9VRD12dSgpLE8uVFJJQU5HVUxBUl9NRVNIPUZ1KCksTy5EVF9JTlZBTElEPUR1KCksTy5EVF9JTlQ4PUJ1KCksTy5EVF9VSU5UOD1VdSgpLE8uRFRfSU5UMTY9anUoKSxPLkRUX1VJTlQxNj1MdSgpLE8uRFRfSU5UMzI9enUoKSxPLkRUX1VJTlQzMj1sZigpLE8uRFRfSU5UNjQ9R3UoKSxPLkRUX1VJTlQ2ND1WdSgpLE8uRFRfRkxPQVQzMj1IdSgpLE8uRFRfRkxPQVQ2ND1LdSgpLE8uRFRfQk9PTD1xdSgpLE8uRFRfVFlQRVNfQ09VTlQ9V3UoKSxPLk9LPVh1KCksTy5EUkFDT19FUlJPUj1YaSgpLE8uSU9fRVJST1I9WXUoKSxPLklOVkFMSURfUEFSQU1FVEVSPUp1KCksTy5VTlNVUFBPUlRFRF9WRVJTSU9OPVp1KCksTy5VTktOT1dOX1ZFUlNJT049UXUoKX1HZT96KCk6T3QudW5zaGlmdCh6KX0pKCksdHlwZW9mIE8ub25Nb2R1bGVQYXJzZWQ9PSJmdW5jdGlvbiImJk8ub25Nb2R1bGVQYXJzZWQoKSxPLkRlY29kZXIucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGU9ZnVuY3Rpb24oeil7aWYoei5fX2NsYXNzX18mJnouX19jbGFzc19fPT09Ty5EZWNvZGVyQnVmZmVyKXJldHVybiBPLkRlY29kZXIucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZCh6KTtpZig4PnouYnl0ZUxlbmd0aClyZXR1cm4gTy5JTlZBTElEX0dFT01FVFJZX1RZUEU7c3dpdGNoKHpbN10pe2Nhc2UgMDpyZXR1cm4gTy5QT0lOVF9DTE9VRDtjYXNlIDE6cmV0dXJuIE8uVFJJQU5HVUxBUl9NRVNIO2RlZmF1bHQ6cmV0dXJuIE8uSU5WQUxJRF9HRU9NRVRSWV9UWVBFfX0sZS5yZWFkeX19KSgpO3R5cGVvZiBNZD09Im9iamVjdCImJnR5cGVvZiBneT09Im9iamVjdCI/Z3kuZXhwb3J0cz1weTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBweX0pOnR5cGVvZiBNZD09Im9iamVjdCImJihNZC5EcmFjb0RlY29kZXJNb2R1bGU9cHkpfSk7dmFyIEF5PXt9OyRlKEF5LHtkZWZhdWx0OigpPT5wNH0pO2Z1bmN0aW9uIHM0KG4sZSl7bGV0IHQ9bi5udW1fcG9pbnRzKCksbz1uLm51bV9mYWNlcygpLGE9bmV3IFJ0LkRyYWNvSW50MzJBcnJheSxyPW8qMyxpPUllLmNyZWF0ZVR5cGVkQXJyYXkodCxyKSxmPTA7Zm9yKGxldCBkPTA7ZDxvOysrZCllLkdldEZhY2VGcm9tTWVzaChuLGQsYSksaVtmKzBdPWEuR2V0VmFsdWUoMCksaVtmKzFdPWEuR2V0VmFsdWUoMSksaVtmKzJdPWEuR2V0VmFsdWUoMiksZis9MztyZXR1cm4gUnQuZGVzdHJveShhKSx7dHlwZWRBcnJheTppLG51bWJlck9mSW5kaWNlczpyfX1mdW5jdGlvbiBmNChuLGUsdCxvLGEpe2xldCByLGk7by5xdWFudGl6YXRpb25CaXRzPD04PyhpPW5ldyBSdC5EcmFjb1VJbnQ4QXJyYXkscj1uZXcgVWludDhBcnJheShhKSxlLkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzKG4sdCxpKSk6by5xdWFudGl6YXRpb25CaXRzPD0xNj8oaT1uZXcgUnQuRHJhY29VSW50MTZBcnJheSxyPW5ldyBVaW50MTZBcnJheShhKSxlLkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cyhuLHQsaSkpOihpPW5ldyBSdC5EcmFjb0Zsb2F0MzJBcnJheSxyPW5ldyBGbG9hdDMyQXJyYXkoYSksZS5HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50cyhuLHQsaSkpO2ZvcihsZXQgZj0wO2Y8YTsrK2YpcltmXT1pLkdldFZhbHVlKGYpO3JldHVybiBSdC5kZXN0cm95KGkpLHJ9ZnVuY3Rpb24gZDQobixlLHQsbyl7bGV0IGEscjtzd2l0Y2godC5kYXRhX3R5cGUoKSl7Y2FzZSAxOmNhc2UgMTE6cj1uZXcgUnQuRHJhY29JbnQ4QXJyYXksYT1uZXcgSW50OEFycmF5KG8pLGUuR2V0QXR0cmlidXRlSW50OEZvckFsbFBvaW50cyhuLHQscik7YnJlYWs7Y2FzZSAyOnI9bmV3IFJ0LkRyYWNvVUludDhBcnJheSxhPW5ldyBVaW50OEFycmF5KG8pLGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHMobix0LHIpO2JyZWFrO2Nhc2UgMzpyPW5ldyBSdC5EcmFjb0ludDE2QXJyYXksYT1uZXcgSW50MTZBcnJheShvKSxlLkdldEF0dHJpYnV0ZUludDE2Rm9yQWxsUG9pbnRzKG4sdCxyKTticmVhaztjYXNlIDQ6cj1uZXcgUnQuRHJhY29VSW50MTZBcnJheSxhPW5ldyBVaW50MTZBcnJheShvKSxlLkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cyhuLHQscik7YnJlYWs7Y2FzZSA1OmNhc2UgNzpyPW5ldyBSdC5EcmFjb0ludDMyQXJyYXksYT1uZXcgSW50MzJBcnJheShvKSxlLkdldEF0dHJpYnV0ZUludDMyRm9yQWxsUG9pbnRzKG4sdCxyKTticmVhaztjYXNlIDY6Y2FzZSA4OnI9bmV3IFJ0LkRyYWNvVUludDMyQXJyYXksYT1uZXcgVWludDMyQXJyYXkobyksZS5HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHMobix0LHIpO2JyZWFrO2Nhc2UgOTpjYXNlIDEwOnI9bmV3IFJ0LkRyYWNvRmxvYXQzMkFycmF5LGE9bmV3IEZsb2F0MzJBcnJheShvKSxlLkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzKG4sdCxyKTticmVha31mb3IobGV0IGk9MDtpPG87KytpKWFbaV09ci5HZXRWYWx1ZShpKTtyZXR1cm4gUnQuZGVzdHJveShyKSxhfWZ1bmN0aW9uIGFPKG4sZSx0KXtsZXQgbz1uLm51bV9wb2ludHMoKSxhPXQubnVtX2NvbXBvbmVudHMoKSxyLGk9bmV3IFJ0LkF0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybTtpZihpLkluaXRGcm9tQXR0cmlidXRlKHQpKXtsZXQgdT1uZXcgQXJyYXkoYSk7Zm9yKGxldCBsPTA7bDxhOysrbCl1W2xdPWkubWluX3ZhbHVlKGwpO3I9e3F1YW50aXphdGlvbkJpdHM6aS5xdWFudGl6YXRpb25fYml0cygpLG1pblZhbHVlczp1LHJhbmdlOmkucmFuZ2UoKSxvY3RFbmNvZGVkOiExfX1SdC5kZXN0cm95KGkpLGk9bmV3IFJ0LkF0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm0saS5Jbml0RnJvbUF0dHJpYnV0ZSh0KSYmKHI9e3F1YW50aXphdGlvbkJpdHM6aS5xdWFudGl6YXRpb25fYml0cygpLG9jdEVuY29kZWQ6ITB9KSxSdC5kZXN0cm95KGkpO2xldCBmPW8qYSxkO2cocik/ZD1mNChuLGUsdCxyLGYpOmQ9ZDQobixlLHQsZik7bGV0IGM9bmUuZnJvbVR5cGVkQXJyYXkoZCk7cmV0dXJue2FycmF5OmQsZGF0YTp7Y29tcG9uZW50c1BlckF0dHJpYnV0ZTphLGNvbXBvbmVudERhdGF0eXBlOmMsYnl0ZU9mZnNldDp0LmJ5dGVfb2Zmc2V0KCksYnl0ZVN0cmlkZTpuZS5nZXRTaXplSW5CeXRlcyhjKSphLG5vcm1hbGl6ZWQ6dC5ub3JtYWxpemVkKCkscXVhbnRpemF0aW9uOnJ9fX1mdW5jdGlvbiB1NChuKXtsZXQgZT1uZXcgUnQuRGVjb2RlcjtuLmRlcXVhbnRpemVJblNoYWRlciYmKGUuU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybShSdC5QT1NJVElPTiksZS5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtKFJ0Lk5PUk1BTCkpO2xldCB0PW5ldyBSdC5EZWNvZGVyQnVmZmVyO2lmKHQuSW5pdChuLmJ1ZmZlcixuLmJ1ZmZlci5sZW5ndGgpLGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZSh0KSE9PVJ0LlBPSU5UX0NMT1VEKXRocm93IG5ldyBudCgiRHJhY28gZ2VvbWV0cnkgdHlwZSBtdXN0IGJlIFBPSU5UX0NMT1VELiIpO2xldCBhPW5ldyBSdC5Qb2ludENsb3VkLHI9ZS5EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWQodCxhKTtpZighci5vaygpfHxhLnB0cj09PTApdGhyb3cgbmV3IG50KGBFcnJvciBkZWNvZGluZyBkcmFjbyBwb2ludCBjbG91ZDogJHtyLmVycm9yX21zZygpfWApO1J0LmRlc3Ryb3kodCk7bGV0IGk9e30sZj1uLnByb3BlcnRpZXM7Zm9yKGxldCBkIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShkKSl7bGV0IGM7aWYoZD09PSJQT1NJVElPTiJ8fGQ9PT0iTk9STUFMIil7bGV0IHU9ZS5HZXRBdHRyaWJ1dGVJZChhLFJ0W2RdKTtjPWUuR2V0QXR0cmlidXRlKGEsdSl9ZWxzZXtsZXQgdT1mW2RdO2M9ZS5HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkKGEsdSl9aVtkXT1hTyhhLGUsYyl9cmV0dXJuIFJ0LmRlc3Ryb3koYSksUnQuZGVzdHJveShlKSxpfWZ1bmN0aW9uIGw0KG4pe2xldCBlPW5ldyBSdC5EZWNvZGVyO2lmKG4uZGVxdWFudGl6ZUluU2hhZGVyKWZvcihsZXQgdT0wO3U8bi5hdHRyaWJ1dGVzVG9Ta2lwVHJhbnNmb3JtLmxlbmd0aDsrK3UpZS5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtKFJ0W24uYXR0cmlidXRlc1RvU2tpcFRyYW5zZm9ybVt1XV0pO2xldCB0PW4uYnVmZmVyVmlldyxvPW5ldyBSdC5EZWNvZGVyQnVmZmVyO2lmKG8uSW5pdChuLmFycmF5LHQuYnl0ZUxlbmd0aCksZS5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlKG8pIT09UnQuVFJJQU5HVUxBUl9NRVNIKXRocm93IG5ldyBudCgiVW5zdXBwb3J0ZWQgZHJhY28gbWVzaCBnZW9tZXRyeSB0eXBlLiIpO2xldCByPW5ldyBSdC5NZXNoLGk9ZS5EZWNvZGVCdWZmZXJUb01lc2gobyxyKTtpZighaS5vaygpfHxyLnB0cj09PTApdGhyb3cgbmV3IG50KGBFcnJvciBkZWNvZGluZyBkcmFjbyBtZXNoIGdlb21ldHJ5OiAke2kuZXJyb3JfbXNnKCl9YCk7UnQuZGVzdHJveShvKTtsZXQgZj17fSxkPW4uY29tcHJlc3NlZEF0dHJpYnV0ZXM7Zm9yKGxldCB1IGluIGQpaWYoZC5oYXNPd25Qcm9wZXJ0eSh1KSl7bGV0IGw9ZFt1XSxtPWUuR2V0QXR0cmlidXRlQnlVbmlxdWVJZChyLGwpO2ZbdV09YU8ocixlLG0pfWxldCBjPXtpbmRleEFycmF5OnM0KHIsZSksYXR0cmlidXRlRGF0YTpmfTtyZXR1cm4gUnQuZGVzdHJveShyKSxSdC5kZXN0cm95KGUpLGN9YXN5bmMgZnVuY3Rpb24gaDQobixlKXtyZXR1cm4gZyhuLmJ1ZmZlclZpZXcpP2w0KG4pOnU0KG4pfWFzeW5jIGZ1bmN0aW9uIG00KG4sZSl7bGV0IHQ9bi53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gZyh0KSYmZyh0Lndhc21CaW5hcnlGaWxlKT9SdD1hd2FpdCgwLHl5LmRlZmF1bHQpKHQpOlJ0PWF3YWl0KDAseXkuZGVmYXVsdCkoKSwhMH1hc3luYyBmdW5jdGlvbiBiNChuLGUpe2xldCB0PW4ud2ViQXNzZW1ibHlDb25maWc7cmV0dXJuIGcodCk/bTQobixlKTpoNChuLGUpfXZhciB5eSxSdCxwNCx3eT1YKCgpPT57Q3QoKTtmZSgpO1p0KCk7cGEoKTtrbigpO3l5PWhhKF95KCksMSk7cDQ9bXQoYjQpfSk7ZnVuY3Rpb24gVHkobixlKXtpZihUeS5wYXNzVGhyb3VnaERhdGFGb3JUZXN0aW5nKXJldHVybiBlO2xldCB0PW4uYnl0ZUxlbmd0aDtpZih0PT09MHx8dCU0IT09MCl0aHJvdyBuZXcgbnQoIlRoZSBsZW5ndGggb2Yga2V5IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgYW5kIGEgbXVsdGlwbGUgb2YgNC4iKTtsZXQgbz1uZXcgRGF0YVZpZXcoZSksYT1vLmdldFVpbnQzMigwLCEwKTtpZihhPT09ZzR8fGE9PT1fNClyZXR1cm4gZTtsZXQgcj1uZXcgRGF0YVZpZXcobiksaT0wLGY9ZS5ieXRlTGVuZ3RoLGQ9Zi1mJTgsYz10LHUsbD04O2Zvcig7aTxkOylmb3IobD0obCs4KSUyNCx1PWw7aTxkJiZ1PGM7KW8uc2V0VWludDMyKGksby5nZXRVaW50MzIoaSwhMCleci5nZXRVaW50MzIodSwhMCksITApLG8uc2V0VWludDMyKGkrNCxvLmdldFVpbnQzMihpKzQsITApXnIuZ2V0VWludDMyKHUrNCwhMCksITApLGkrPTgsdSs9MjQ7aWYoaTxmKWZvcih1Pj1jJiYobD0obCs4KSUyNCx1PWwpO2k8Zjspby5zZXRVaW50OChpLG8uZ2V0VWludDgoaSleci5nZXRVaW50OCh1KSksaSsrLHUrK312YXIgZzQsXzQsck8saU89WCgoKT0+e3BhKCk7ZzQ9MTk1MzAyOTgwNSxfND0yOTE3MDM0MTAwO1R5LnBhc3NUaHJvdWdoRGF0YUZvclRlc3Rpbmc9ITE7ck89VHl9KTtmdW5jdGlvbiB5NChuLGUpe3JldHVybihuJmUpIT09MH12YXIgcXMsY089WCgoKT0+e3FzPXk0fSk7ZnVuY3Rpb24gVHIobixlLHQsbyxhLHIpe3RoaXMuX2JpdHM9bix0aGlzLmNub2RlVmVyc2lvbj1lLHRoaXMuaW1hZ2VyeVZlcnNpb249dCx0aGlzLnRlcnJhaW5WZXJzaW9uPW8sdGhpcy5pbWFnZXJ5UHJvdmlkZXI9YSx0aGlzLnRlcnJhaW5Qcm92aWRlcj1yLHRoaXMuYW5jZXN0b3JIYXNUZXJyYWluPSExLHRoaXMudGVycmFpblN0YXRlPXZvaWQgMH12YXIgQTQsc08sdzQsVDQsRTQsZk8sZE89WCgoKT0+e2ZlKCk7Y08oKTtBND1bMSwyLDQsOF0sc089MTUsdzQ9MTYsVDQ9NjQsRTQ9MTI4O1RyLmNsb25lPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIGcoZSk/KGUuX2JpdHM9bi5fYml0cyxlLmNub2RlVmVyc2lvbj1uLmNub2RlVmVyc2lvbixlLmltYWdlcnlWZXJzaW9uPW4uaW1hZ2VyeVZlcnNpb24sZS50ZXJyYWluVmVyc2lvbj1uLnRlcnJhaW5WZXJzaW9uLGUuaW1hZ2VyeVByb3ZpZGVyPW4uaW1hZ2VyeVByb3ZpZGVyLGUudGVycmFpblByb3ZpZGVyPW4udGVycmFpblByb3ZpZGVyKTplPW5ldyBUcihuLl9iaXRzLG4uY25vZGVWZXJzaW9uLG4uaW1hZ2VyeVZlcnNpb24sbi50ZXJyYWluVmVyc2lvbixuLmltYWdlcnlQcm92aWRlcixuLnRlcnJhaW5Qcm92aWRlciksZS5hbmNlc3Rvckhhc1RlcnJhaW49bi5hbmNlc3Rvckhhc1RlcnJhaW4sZS50ZXJyYWluU3RhdGU9bi50ZXJyYWluU3RhdGUsZX07VHIucHJvdG90eXBlLnNldFBhcmVudD1mdW5jdGlvbihuKXt0aGlzLmFuY2VzdG9ySGFzVGVycmFpbj1uLmFuY2VzdG9ySGFzVGVycmFpbnx8dGhpcy5oYXNUZXJyYWluKCl9O1RyLnByb3RvdHlwZS5oYXNTdWJ0cmVlPWZ1bmN0aW9uKCl7cmV0dXJuIHFzKHRoaXMuX2JpdHMsdzQpfTtUci5wcm90b3R5cGUuaGFzSW1hZ2VyeT1mdW5jdGlvbigpe3JldHVybiBxcyh0aGlzLl9iaXRzLFQ0KX07VHIucHJvdG90eXBlLmhhc1RlcnJhaW49ZnVuY3Rpb24oKXtyZXR1cm4gcXModGhpcy5fYml0cyxFNCl9O1RyLnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiBxcyh0aGlzLl9iaXRzLHNPKX07VHIucHJvdG90eXBlLmhhc0NoaWxkPWZ1bmN0aW9uKG4pe3JldHVybiBxcyh0aGlzLl9iaXRzLEE0W25dKX07VHIucHJvdG90eXBlLmdldENoaWxkQml0bWFzaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iaXRzJnNPfTtmTz1Ucn0pO2Z1bmN0aW9uIFlzKG4pe2xldCBlPW4ubGVuZ3RoO2Zvcig7LS1lPj0wOyluW2VdPTB9ZnVuY3Rpb24gTDQobixlKXtsZXQgdCxvLGEscixpLGYsZCxjLHUsbCxtLGgsYixwLHksVCxfLHcsRSxSLFMsQyxJLE0sUD1uLnN0YXRlO3Q9bi5uZXh0X2luLEk9bi5pbnB1dCxvPXQrKG4uYXZhaWxfaW4tNSksYT1uLm5leHRfb3V0LE09bi5vdXRwdXQscj1hLShlLW4uYXZhaWxfb3V0KSxpPWErKG4uYXZhaWxfb3V0LTI1NyksZj1QLmRtYXgsZD1QLndzaXplLGM9UC53aGF2ZSx1PVAud25leHQsbD1QLndpbmRvdyxtPVAuaG9sZCxoPVAuYml0cyxiPVAubGVuY29kZSxwPVAuZGlzdGNvZGUseT0oMTw8UC5sZW5iaXRzKS0xLFQ9KDE8PFAuZGlzdGJpdHMpLTE7ZTpkb3toPDE1JiYobSs9SVt0KytdPDxoLGgrPTgsbSs9SVt0KytdPDxoLGgrPTgpLF89YlttJnldO3Q6Zm9yKDs7KXtpZih3PV8+Pj4yNCxtPj4+PXcsaC09dyx3PV8+Pj4xNiYyNTUsdz09PTApTVthKytdPV8mNjU1MzU7ZWxzZSBpZih3JjE2KXtFPV8mNjU1MzUsdyY9MTUsdyYmKGg8dyYmKG0rPUlbdCsrXTw8aCxoKz04KSxFKz1tJigxPDx3KS0xLG0+Pj49dyxoLT13KSxoPDE1JiYobSs9SVt0KytdPDxoLGgrPTgsbSs9SVt0KytdPDxoLGgrPTgpLF89cFttJlRdO246Zm9yKDs7KXtpZih3PV8+Pj4yNCxtPj4+PXcsaC09dyx3PV8+Pj4xNiYyNTUsdyYxNil7aWYoUj1fJjY1NTM1LHcmPTE1LGg8dyYmKG0rPUlbdCsrXTw8aCxoKz04LGg8dyYmKG0rPUlbdCsrXTw8aCxoKz04KSksUis9bSYoMTw8dyktMSxSPmYpe24ubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsUC5tb2RlPXdtO2JyZWFrIGV9aWYobT4+Pj13LGgtPXcsdz1hLXIsUj53KXtpZih3PVItdyx3PmMmJlAuc2FuZSl7bi5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixQLm1vZGU9d207YnJlYWsgZX1pZihTPTAsQz1sLHU9PT0wKXtpZihTKz1kLXcsdzxFKXtFLT13O2RvIE1bYSsrXT1sW1MrK107d2hpbGUoLS13KTtTPWEtUixDPU19fWVsc2UgaWYodTx3KXtpZihTKz1kK3Utdyx3LT11LHc8RSl7RS09dztkbyBNW2ErK109bFtTKytdO3doaWxlKC0tdyk7aWYoUz0wLHU8RSl7dz11LEUtPXc7ZG8gTVthKytdPWxbUysrXTt3aGlsZSgtLXcpO1M9YS1SLEM9TX19fWVsc2UgaWYoUys9dS13LHc8RSl7RS09dztkbyBNW2ErK109bFtTKytdO3doaWxlKC0tdyk7Uz1hLVIsQz1NfWZvcig7RT4yOylNW2ErK109Q1tTKytdLE1bYSsrXT1DW1MrK10sTVthKytdPUNbUysrXSxFLT0zO0UmJihNW2ErK109Q1tTKytdLEU+MSYmKE1bYSsrXT1DW1MrK10pKX1lbHNle1M9YS1SO2RvIE1bYSsrXT1NW1MrK10sTVthKytdPU1bUysrXSxNW2ErK109TVtTKytdLEUtPTM7d2hpbGUoRT4yKTtFJiYoTVthKytdPU1bUysrXSxFPjEmJihNW2ErK109TVtTKytdKSl9fWVsc2UgaWYodyY2NCl7bi5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsUC5tb2RlPXdtO2JyZWFrIGV9ZWxzZXtfPXBbKF8mNjU1MzUpKyhtJigxPDx3KS0xKV07Y29udGludWUgbn1icmVha319ZWxzZSBpZih3JjY0KWlmKHcmMzIpe1AubW9kZT1qNDticmVhayBlfWVsc2V7bi5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsUC5tb2RlPXdtO2JyZWFrIGV9ZWxzZXtfPWJbKF8mNjU1MzUpKyhtJigxPDx3KS0xKV07Y29udGludWUgdH1icmVha319d2hpbGUodDxvJiZhPGkpO0U9aD4+Myx0LT1FLGgtPUU8PDMsbSY9KDE8PGgpLTEsbi5uZXh0X2luPXQsbi5uZXh0X291dD1hLG4uYXZhaWxfaW49dDxvPzUrKG8tdCk6NS0odC1vKSxuLmF2YWlsX291dD1hPGk/MjU3KyhpLWEpOjI1Ny0oYS1pKSxQLmhvbGQ9bSxQLmJpdHM9aH1mdW5jdGlvbiBQZChuKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBQZD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sUGQobil9ZnVuY3Rpb24gdDYobixlKXtpZihQZChuKSE9Im9iamVjdCJ8fCFuKXJldHVybiBuO3ZhciB0PW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih0IT09dm9pZCAwKXt2YXIgbz10LmNhbGwobixlfHwiZGVmYXVsdCIpO2lmKFBkKG8pIT0ib2JqZWN0IilyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKGU9PT0ic3RyaW5nIj9TdHJpbmc6TnVtYmVyKShuKX1mdW5jdGlvbiBuNihuKXt2YXIgZT10NihuLCJzdHJpbmciKTtyZXR1cm4gUGQoZSk9PSJzeW1ib2wiP2U6ZSsiIn1mdW5jdGlvbiBVaShuLGUsdCl7cmV0dXJuKGU9bjYoZSkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobixlLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bltlXT10LG59ZnVuY3Rpb24gbVMobixlPXt9KXtsZXQgdD1uZXcgYTYoZSk7aWYodC5wdXNoKG4sITApLHQuZXJyKXRocm93IEVycm9yKHQubXNnKTtsZXQgbz10LnJlc3VsdDtyZXR1cm4gZS50b1RleHQ/bmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG8pOm99dmFyIHVPLGxPLFI0LHp5LEd5LFdPLFhPLFlPLEV5LEpPLFpPLFFPLCRPLHg0LE80LGVTLFM0LHRTLG5TLEZ5LFZ5LG9TLGFTLHJTLHhtLHNhLCRyLEM0LE00LE40LEk0LGlTLGhPLFJ5LG1PLER5LGJPLHBPLFA0LGs0LHY0LEJ5LEY0LE5kLE9tLEQ0LFphLHh5LFduLE95LFJyLGppLEh5LEt5LHF5LEI0LFd5LFhzLFV5LE5jLGp5LGNTLHNTLFU0LFN5LFdzLEVyLHdtLGo0LFRtLGdPLF9PLHlPLEN5LEFPLHo0LEc0LFY0LEg0LElkLEs0LGZTLGRTLENtLHdPLFRPLEVPLFJPLHhPLE9PLFNPLENPLE1PLFNtLFFyLE15LE5PLE55LElPLFBPLGtPLHZPLEVtLFJtLEZPLERPLEJPLFVPLGpPLEl5LExPLHpPLE9uLEx5LHVTLHE0LFc0LEdPLFg0LEpzLFk0LGxTLEo0LFo0LFZPLFB5LGt5LFE0LGhTLHZ5LEhPLEtPLCQ0LGU2LHFPLG82LGE2LGJTPVgoKCk9Pnt1Tz0wLGxPPTE7UjQ9Mjksenk9MjU2LEd5PTMwLFdPPTE5LFhPPTU3MyxZTz0xNSxFeT0xNixKTz0yNTYsWk89MTYsUU89MTcsJE89MTgseDQ9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF0pLE80PW5ldyBVaW50OEFycmF5KFswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSk7bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddKTtlUz1uZXcgVWludDhBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLFM0PTUxMix0Uz1BcnJheSgyODgqMik7WXModFMpO25TPUFycmF5KEd5KjIpO1lzKG5TKTtGeT1BcnJheShTNCk7WXMoRnkpO1Z5PUFycmF5KDI1Nik7WXMoVnkpO29TPUFycmF5KFI0KTtZcyhvUyk7YVM9QXJyYXkoR3kpO1lzKGFTKTtyUz1uPT5uPDI1Nj9GeVtuXTpGeVsyNTYrKG4+Pj43KV0seG09KG4sZSk9PntuLnBlbmRpbmdfYnVmW24ucGVuZGluZysrXT1lJjI1NSxuLnBlbmRpbmdfYnVmW24ucGVuZGluZysrXT1lPj4+OCYyNTV9LHNhPShuLGUsdCk9PntuLmJpX3ZhbGlkPkV5LXQ/KG4uYmlfYnVmfD1lPDxuLmJpX3ZhbGlkJjY1NTM1LHhtKG4sbi5iaV9idWYpLG4uYmlfYnVmPWU+PkV5LW4uYmlfdmFsaWQsbi5iaV92YWxpZCs9dC1FeSk6KG4uYmlfYnVmfD1lPDxuLmJpX3ZhbGlkJjY1NTM1LG4uYmlfdmFsaWQrPXQpfSwkcj0obixlLHQpPT57c2Eobix0W2UqMl0sdFtlKjIrMV0pfSxDND0obixlKT0+e2xldCB0PTA7ZG8gdHw9biYxLG4+Pj49MSx0PDw9MTt3aGlsZSgtLWU+MCk7cmV0dXJuIHQ+Pj4xfSxNND0obixlKT0+e2xldCB0PWUuZHluX3RyZWUsbz1lLm1heF9jb2RlLGE9ZS5zdGF0X2Rlc2Muc3RhdGljX3RyZWUscj1lLnN0YXRfZGVzYy5oYXNfc3RyZWUsaT1lLnN0YXRfZGVzYy5leHRyYV9iaXRzLGY9ZS5zdGF0X2Rlc2MuZXh0cmFfYmFzZSxkPWUuc3RhdF9kZXNjLm1heF9sZW5ndGgsYyx1LGwsbSxoLGIscD0wO2ZvcihtPTA7bTw9WU87bSsrKW4uYmxfY291bnRbbV09MDtmb3IodFtuLmhlYXBbbi5oZWFwX21heF0qMisxXT0wLGM9bi5oZWFwX21heCsxO2M8WE87YysrKXU9bi5oZWFwW2NdLG09dFt0W3UqMisxXSoyKzFdKzEsbT5kJiYobT1kLHArKyksdFt1KjIrMV09bSwhKHU+bykmJihuLmJsX2NvdW50W21dKyssaD0wLHU+PWYmJihoPWlbdS1mXSksYj10W3UqMl0sbi5vcHRfbGVuKz1iKihtK2gpLHImJihuLnN0YXRpY19sZW4rPWIqKGFbdSoyKzFdK2gpKSk7aWYocCE9PTApe2Rve2ZvcihtPWQtMTtuLmJsX2NvdW50W21dPT09MDspbS0tO24uYmxfY291bnRbbV0tLSxuLmJsX2NvdW50W20rMV0rPTIsbi5ibF9jb3VudFtkXS0tLHAtPTJ9d2hpbGUocD4wKTtmb3IobT1kO20hPT0wO20tLSlmb3IodT1uLmJsX2NvdW50W21dO3UhPT0wOylsPW4uaGVhcFstLWNdLCEobD5vKSYmKHRbbCoyKzFdIT09bSYmKG4ub3B0X2xlbis9KG0tdFtsKjIrMV0pKnRbbCoyXSx0W2wqMisxXT1tKSx1LS0pfX0sTjQ9KG4sZSx0KT0+e2xldCBvPUFycmF5KDE2KSxhPTAscixpO2ZvcihyPTE7cjw9WU87cisrKWE9YSt0W3ItMV08PDEsb1tyXT1hO2ZvcihpPTA7aTw9ZTtpKyspe2xldCBmPW5baSoyKzFdO2YhPT0wJiYobltpKjJdPUM0KG9bZl0rKyxmKSl9fSxJND1uPT57bGV0IGU7Zm9yKGU9MDtlPDI4NjtlKyspbi5keW5fbHRyZWVbZSoyXT0wO2ZvcihlPTA7ZTxHeTtlKyspbi5keW5fZHRyZWVbZSoyXT0wO2ZvcihlPTA7ZTxXTztlKyspbi5ibF90cmVlW2UqMl09MDtuLmR5bl9sdHJlZVtKTyoyXT0xLG4ub3B0X2xlbj1uLnN0YXRpY19sZW49MCxuLnN5bV9uZXh0PW4ubWF0Y2hlcz0wfSxpUz1uPT57bi5iaV92YWxpZD44P3htKG4sbi5iaV9idWYpOm4uYmlfdmFsaWQ+MCYmKG4ucGVuZGluZ19idWZbbi5wZW5kaW5nKytdPW4uYmlfYnVmKSxuLmJpX2J1Zj0wLG4uYmlfdmFsaWQ9MH0saE89KG4sZSx0LG8pPT57bGV0IGE9ZSoyLHI9dCoyO3JldHVybiBuW2FdPG5bcl18fG5bYV09PT1uW3JdJiZvW2VdPD1vW3RdfSxSeT0obixlLHQpPT57bGV0IG89bi5oZWFwW3RdLGE9dDw8MTtmb3IoO2E8PW4uaGVhcF9sZW4mJihhPG4uaGVhcF9sZW4mJmhPKGUsbi5oZWFwW2ErMV0sbi5oZWFwW2FdLG4uZGVwdGgpJiZhKyssIWhPKGUsbyxuLmhlYXBbYV0sbi5kZXB0aCkpOyluLmhlYXBbdF09bi5oZWFwW2FdLHQ9YSxhPDw9MTtuLmhlYXBbdF09b30sbU89KG4sZSx0KT0+e2xldCBvLGEscj0wLGksZjtpZihuLnN5bV9uZXh0IT09MClkbyBvPW4ucGVuZGluZ19idWZbbi5zeW1fYnVmK3IrK10mMjU1LG8rPShuLnBlbmRpbmdfYnVmW24uc3ltX2J1ZityKytdJjI1NSk8PDgsYT1uLnBlbmRpbmdfYnVmW24uc3ltX2J1ZityKytdLG89PT0wPyRyKG4sYSxlKTooaT1WeVthXSwkcihuLGkrenkrMSxlKSxmPXg0W2ldLGYhPT0wJiYoYS09b1NbaV0sc2EobixhLGYpKSxvLS0saT1yUyhvKSwkcihuLGksdCksZj1PNFtpXSxmIT09MCYmKG8tPWFTW2ldLHNhKG4sbyxmKSkpO3doaWxlKHI8bi5zeW1fbmV4dCk7JHIobixKTyxlKX0sRHk9KG4sZSk9PntsZXQgdD1lLmR5bl90cmVlLG89ZS5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsYT1lLnN0YXRfZGVzYy5oYXNfc3RyZWUscj1lLnN0YXRfZGVzYy5lbGVtcyxpLGYsZD0tMSxjO2ZvcihuLmhlYXBfbGVuPTAsbi5oZWFwX21heD1YTyxpPTA7aTxyO2krKyl0W2kqMl09PT0wP3RbaSoyKzFdPTA6KG4uaGVhcFsrK24uaGVhcF9sZW5dPWQ9aSxuLmRlcHRoW2ldPTApO2Zvcig7bi5oZWFwX2xlbjwyOyljPW4uaGVhcFsrK24uaGVhcF9sZW5dPWQ8Mj8rK2Q6MCx0W2MqMl09MSxuLmRlcHRoW2NdPTAsbi5vcHRfbGVuLS0sYSYmKG4uc3RhdGljX2xlbi09b1tjKjIrMV0pO2ZvcihlLm1heF9jb2RlPWQsaT1uLmhlYXBfbGVuPj4xO2k+PTE7aS0tKVJ5KG4sdCxpKTtjPXI7ZG8gaT1uLmhlYXBbMV0sbi5oZWFwWzFdPW4uaGVhcFtuLmhlYXBfbGVuLS1dLFJ5KG4sdCwxKSxmPW4uaGVhcFsxXSxuLmhlYXBbLS1uLmhlYXBfbWF4XT1pLG4uaGVhcFstLW4uaGVhcF9tYXhdPWYsdFtjKjJdPXRbaSoyXSt0W2YqMl0sbi5kZXB0aFtjXT0obi5kZXB0aFtpXT49bi5kZXB0aFtmXT9uLmRlcHRoW2ldOm4uZGVwdGhbZl0pKzEsdFtpKjIrMV09dFtmKjIrMV09YyxuLmhlYXBbMV09YysrLFJ5KG4sdCwxKTt3aGlsZShuLmhlYXBfbGVuPj0yKTtuLmhlYXBbLS1uLmhlYXBfbWF4XT1uLmhlYXBbMV0sTTQobixlKSxONCh0LGQsbi5ibF9jb3VudCl9LGJPPShuLGUsdCk9PntsZXQgbyxhPS0xLHIsaT1lWzFdLGY9MCxkPTcsYz00O2ZvcihpPT09MCYmKGQ9MTM4LGM9MyksZVsodCsxKSoyKzFdPTY1NTM1LG89MDtvPD10O28rKylyPWksaT1lWyhvKzEpKjIrMV0sISgrK2Y8ZCYmcj09PWkpJiYoZjxjP24uYmxfdHJlZVtyKjJdKz1mOnI9PT0wP2Y8PTEwP24uYmxfdHJlZVtRTyoyXSsrOm4uYmxfdHJlZVskTyoyXSsrOihyIT09YSYmbi5ibF90cmVlW3IqMl0rKyxuLmJsX3RyZWVbWk8qMl0rKyksZj0wLGE9cixpPT09MD8oZD0xMzgsYz0zKTpyPT09aT8oZD02LGM9Myk6KGQ9NyxjPTQpKX0scE89KG4sZSx0KT0+e2xldCBvLGE9LTEscixpPWVbMV0sZj0wLGQ9NyxjPTQ7Zm9yKGk9PT0wJiYoZD0xMzgsYz0zKSxvPTA7bzw9dDtvKyspaWYocj1pLGk9ZVsobysxKSoyKzFdLCEoKytmPGQmJnI9PT1pKSl7aWYoZjxjKWRvICRyKG4scixuLmJsX3RyZWUpO3doaWxlKC0tZiE9PTApO2Vsc2Ugcj09PTA/Zjw9MTA/KCRyKG4sUU8sbi5ibF90cmVlKSxzYShuLGYtMywzKSk6KCRyKG4sJE8sbi5ibF90cmVlKSxzYShuLGYtMTEsNykpOihyIT09YSYmKCRyKG4scixuLmJsX3RyZWUpLGYtLSksJHIobixaTyxuLmJsX3RyZWUpLHNhKG4sZi0zLDIpKTtmPTAsYT1yLGk9PT0wPyhkPTEzOCxjPTMpOnI9PT1pPyhkPTYsYz0zKTooZD03LGM9NCl9fSxQND1uPT57bGV0IGU7Zm9yKGJPKG4sbi5keW5fbHRyZWUsbi5sX2Rlc2MubWF4X2NvZGUpLGJPKG4sbi5keW5fZHRyZWUsbi5kX2Rlc2MubWF4X2NvZGUpLER5KG4sbi5ibF9kZXNjKSxlPVdPLTE7ZT49MyYmbi5ibF90cmVlW2VTW2VdKjIrMV09PT0wO2UtLSk7cmV0dXJuIG4ub3B0X2xlbis9MyooZSsxKSs1KzUrNCxlfSxrND0obixlLHQsbyk9PntsZXQgYTtmb3Ioc2EobixlLTI1Nyw1KSxzYShuLHQtMSw1KSxzYShuLG8tNCw0KSxhPTA7YTxvO2ErKylzYShuLG4uYmxfdHJlZVtlU1thXSoyKzFdLDMpO3BPKG4sbi5keW5fbHRyZWUsZS0xKSxwTyhuLG4uZHluX2R0cmVlLHQtMSl9LHY0PW49PntsZXQgZT00MDkzNjI0NDQ3LHQ7Zm9yKHQ9MDt0PD0zMTt0KyssZT4+Pj0xKWlmKGUmMSYmbi5keW5fbHRyZWVbdCoyXSE9PTApcmV0dXJuIHVPO2lmKG4uZHluX2x0cmVlWzE4XSE9PTB8fG4uZHluX2x0cmVlWzIwXSE9PTB8fG4uZHluX2x0cmVlWzI2XSE9PTApcmV0dXJuIGxPO2Zvcih0PTMyO3Q8enk7dCsrKWlmKG4uZHluX2x0cmVlW3QqMl0hPT0wKXJldHVybiBsTztyZXR1cm4gdU99LEJ5PShuLGUsdCxvKT0+e3NhKG4sMCsgKyEhbywzKSxpUyhuKSx4bShuLHQpLHhtKG4sfnQpLHQmJm4ucGVuZGluZ19idWYuc2V0KG4ud2luZG93LnN1YmFycmF5KGUsZSt0KSxuLnBlbmRpbmcpLG4ucGVuZGluZys9dH0sRjQ9KG4sZSx0LG8pPT57bGV0IGEscixpPTA7bi5sZXZlbD4wPyhuLnN0cm0uZGF0YV90eXBlPT09MiYmKG4uc3RybS5kYXRhX3R5cGU9djQobikpLER5KG4sbi5sX2Rlc2MpLER5KG4sbi5kX2Rlc2MpLGk9UDQobiksYT1uLm9wdF9sZW4rMys3Pj4+MyxyPW4uc3RhdGljX2xlbiszKzc+Pj4zLHI8PWEmJihhPXIpKTphPXI9dCs1LHQrNDw9YSYmZSE9PS0xP0J5KG4sZSx0LG8pOm4uc3RyYXRlZ3k9PT00fHxyPT09YT8oc2EobiwyKyArISFvLDMpLG1PKG4sdFMsblMpKTooc2Eobiw0KyArISFvLDMpLGs0KG4sbi5sX2Rlc2MubWF4X2NvZGUrMSxuLmRfZGVzYy5tYXhfY29kZSsxLGkrMSksbU8obixuLmR5bl9sdHJlZSxuLmR5bl9kdHJlZSkpLEk0KG4pLG8mJmlTKG4pfSxOZD0obixlLHQpPT4obi5wZW5kaW5nX2J1ZltuLnN5bV9idWYrbi5zeW1fbmV4dCsrXT1lLG4ucGVuZGluZ19idWZbbi5zeW1fYnVmK24uc3ltX25leHQrK109ZT4+OCxuLnBlbmRpbmdfYnVmW24uc3ltX2J1ZituLnN5bV9uZXh0KytdPXQsZT09PTA/bi5keW5fbHRyZWVbdCoyXSsrOihuLm1hdGNoZXMrKyxlLS0sbi5keW5fbHRyZWVbKFZ5W3RdK3p5KzEpKjJdKyssbi5keW5fZHRyZWVbclMoZSkqMl0rKyksbi5zeW1fbmV4dD09PW4uc3ltX2VuZCksT209KG4sZSx0LG8pPT57bGV0IGE9biY2NTUzNXwwLHI9bj4+PjE2JjY1NTM1fDAsaT0wO2Zvcig7dCE9PTA7KXtpPXQ+MmUzPzJlMzp0LHQtPWk7ZG8gYT1hK2VbbysrXXwwLHI9cithfDA7d2hpbGUoLS1pKTthJT02NTUyMSxyJT02NTUyMX1yZXR1cm4gYXxyPDwxNnwwfSxEND1uZXcgVWludDMyQXJyYXkoKCgpPT57bGV0IG4sZT1bXTtmb3IodmFyIHQ9MDt0PDI1Njt0Kyspe249dDtmb3IodmFyIG89MDtvPDg7bysrKW49biYxPzM5ODgyOTIzODRebj4+PjE6bj4+PjE7ZVt0XT1ufXJldHVybiBlfSkoKSksWmE9KG4sZSx0LG8pPT57bGV0IGE9RDQscj1vK3Q7bl49LTE7Zm9yKGxldCBpPW87aTxyO2krKyluPW4+Pj44XmFbKG5eZVtpXSkmMjU1XTtyZXR1cm4gbl4tMX0seHk9ezI6Im5lZWQgZGljdGlvbmFyeSIsMToic3RyZWFtIGVuZCIsMDoiIiwiLTEiOiJmaWxlIGVycm9yIiwiLTIiOiJzdHJlYW0gZXJyb3IiLCItMyI6ImRhdGEgZXJyb3IiLCItNCI6Imluc3VmZmljaWVudCBtZW1vcnkiLCItNSI6ImJ1ZmZlciBlcnJvciIsIi02IjoiaW5jb21wYXRpYmxlIHZlcnNpb24ifSxXbj0zLE95PTI1OCxScj0yNjIsamk9MSxIeT0yLEt5PTMscXk9NCxCND1uPT57bGV0IGUsdCxvLGE9bi53X3NpemU7ZT1uLmhhc2hfc2l6ZSxvPWU7ZG8gdD1uLmhlYWRbLS1vXSxuLmhlYWRbb109dD49YT90LWE6MDt3aGlsZSgtLWUpO2U9YSxvPWU7ZG8gdD1uLnByZXZbLS1vXSxuLnByZXZbb109dD49YT90LWE6MDt3aGlsZSgtLWUpfSxXeT0obixlLHQpPT4oZTw8bi5oYXNoX3NoaWZ0XnQpJm4uaGFzaF9tYXNrLFhzPShuLGUpPT57bGV0IHQ7aWYobi5sZWdhY3lfaGFzaCl0PW4uaW5zX2g9V3kobixuLmluc19oLG4ud2luZG93W2UrV24tMV0pO2Vsc2V7bGV0IGE9bi53aW5kb3cscj1hW2VdfGFbZSsxXTw8OHxhW2UrMl08PDE2fGFbZSszXTw8MjQ7dD1uLmluc19oPU1hdGguaW11bChyLDY2NTIxKSs2NjUyMT4+PjE2Jm4uaGFzaF9tYXNrfWxldCBvPW4ucHJldltlJm4ud19tYXNrXT1uLmhlYWRbdF07cmV0dXJuIG4uaGVhZFt0XT1lLG99LFV5PW49PntsZXQgZT1uLnN0YXRlLHQ9ZS5wZW5kaW5nO3Q+bi5hdmFpbF9vdXQmJih0PW4uYXZhaWxfb3V0KSx0IT09MCYmKG4ub3V0cHV0LnNldChlLnBlbmRpbmdfYnVmLnN1YmFycmF5KGUucGVuZGluZ19vdXQsZS5wZW5kaW5nX291dCt0KSxuLm5leHRfb3V0KSxuLm5leHRfb3V0Kz10LGUucGVuZGluZ19vdXQrPXQsbi50b3RhbF9vdXQrPXQsbi5hdmFpbF9vdXQtPXQsZS5wZW5kaW5nLT10LGUucGVuZGluZz09PTAmJihlLnBlbmRpbmdfb3V0PTApKX0sTmM9KG4sZSk9PntGNChuLG4uYmxvY2tfc3RhcnQ+PTA/bi5ibG9ja19zdGFydDotMSxuLnN0cnN0YXJ0LW4uYmxvY2tfc3RhcnQsZSksbi5ibG9ja19zdGFydD1uLnN0cnN0YXJ0LFV5KG4uc3RybSl9LGp5PShuLGUsdCxvKT0+e2xldCBhPW4uYXZhaWxfaW47cmV0dXJuIGE+byYmKGE9byksYT09PTA/MDoobi5hdmFpbF9pbi09YSxlLnNldChuLmlucHV0LnN1YmFycmF5KG4ubmV4dF9pbixuLm5leHRfaW4rYSksdCksbi5zdGF0ZS53cmFwPT09MT9uLmFkbGVyPU9tKG4uYWRsZXIsZSxhLHQpOm4uc3RhdGUud3JhcD09PTImJihuLmFkbGVyPVphKG4uYWRsZXIsZSxhLHQpKSxuLm5leHRfaW4rPWEsbi50b3RhbF9pbis9YSxhKX0sY1M9KG4sZSk9PntsZXQgdD1uLm1heF9jaGFpbl9sZW5ndGgsbz1uLnN0cnN0YXJ0LGEscixpPW4ucHJldl9sZW5ndGgsZj1uLm5pY2VfbWF0Y2gsZD1uLnN0cnN0YXJ0Pm4ud19zaXplLVJyP24uc3Ryc3RhcnQtKG4ud19zaXplLVJyKTowLGM9bi53aW5kb3csdT1uLndfbWFzayxsPW4ucHJldixtPW4uc3Ryc3RhcnQrT3ksaD1jW28raS0xXSxiPWNbbytpXTtuLnByZXZfbGVuZ3RoPj1uLmdvb2RfbWF0Y2gmJih0Pj49MiksZj5uLmxvb2thaGVhZCYmKGY9bi5sb29rYWhlYWQpO2RvIGlmKGE9ZSwhKGNbYStpXSE9PWJ8fGNbYStpLTFdIT09aHx8Y1thXSE9PWNbb118fGNbKythXSE9PWNbbysxXSkpe28rPTIsYSsrO2RvO3doaWxlKGNbKytvXT09PWNbKythXSYmY1srK29dPT09Y1srK2FdJiZjWysrb109PT1jWysrYV0mJmNbKytvXT09PWNbKythXSYmY1srK29dPT09Y1srK2FdJiZjWysrb109PT1jWysrYV0mJmNbKytvXT09PWNbKythXSYmY1srK29dPT09Y1srK2FdJiZvPG0pO2lmKHI9T3ktKG0tbyksbz1tLU95LHI+aSl7aWYobi5tYXRjaF9zdGFydD1lLGk9cixyPj1mKWJyZWFrO2g9Y1tvK2ktMV0sYj1jW28raV19fXdoaWxlKChlPWxbZSZ1XSk+ZCYmLS10IT09MCk7cmV0dXJuIGk8PW4ubG9va2FoZWFkP2k6bi5sb29rYWhlYWR9LHNTPW49PntsZXQgZT1uLndfc2l6ZSx0LG8sYTtkb3tpZihvPW4ud2luZG93X3NpemUtbi5sb29rYWhlYWQtbi5zdHJzdGFydCxuLnN0cnN0YXJ0Pj1lKyhlLVJyKSYmKG4ud2luZG93LnNldChuLndpbmRvdy5zdWJhcnJheShlLGUrZS1vKSwwKSxuLm1hdGNoX3N0YXJ0LT1lLG4uc3Ryc3RhcnQtPWUsbi5ibG9ja19zdGFydC09ZSxuLmluc2VydD5uLnN0cnN0YXJ0JiYobi5pbnNlcnQ9bi5zdHJzdGFydCksQjQobiksbys9ZSksbi5zdHJtLmF2YWlsX2luPT09MClicmVhaztpZih0PWp5KG4uc3RybSxuLndpbmRvdyxuLnN0cnN0YXJ0K24ubG9va2FoZWFkLG8pLG4ubG9va2FoZWFkKz10LCFuLmxlZ2FjeV9oYXNoKXtpZihuLmxvb2thaGVhZCtuLmluc2VydD5Xbilmb3IoYT1uLnN0cnN0YXJ0LW4uaW5zZXJ0O24uaW5zZXJ0JiYoWHMobixhKSxhKyssbi5pbnNlcnQtLSwhKG4ubG9va2FoZWFkK24uaW5zZXJ0PD1XbikpOyk7fWVsc2UgaWYobi5sb29rYWhlYWQrbi5pbnNlcnQ+PVduKWZvcihhPW4uc3Ryc3RhcnQtbi5pbnNlcnQsbi5pbnNfaD1uLndpbmRvd1thXSxuLmluc19oPVd5KG4sbi5pbnNfaCxuLndpbmRvd1thKzFdKTtuLmluc2VydCYmKFhzKG4sYSksYSsrLG4uaW5zZXJ0LS0sIShuLmxvb2thaGVhZCtuLmluc2VydDxXbikpOyk7fXdoaWxlKG4ubG9va2FoZWFkPFJyJiZuLnN0cm0uYXZhaWxfaW4hPT0wKX0sVTQ9KG4sZSk9PntsZXQgdD1uLnBlbmRpbmdfYnVmX3NpemUtNT5uLndfc2l6ZT9uLndfc2l6ZTpuLnBlbmRpbmdfYnVmX3NpemUtNSxvLGEscixpPTAsZj1uLnN0cm0uYXZhaWxfaW47ZG97aWYobz02NTUzNSxyPW4uYmlfdmFsaWQrNDI+PjMsbi5zdHJtLmF2YWlsX291dDxyfHwocj1uLnN0cm0uYXZhaWxfb3V0LXIsYT1uLnN0cnN0YXJ0LW4uYmxvY2tfc3RhcnQsbz5hK24uc3RybS5hdmFpbF9pbiYmKG89YStuLnN0cm0uYXZhaWxfaW4pLG8+ciYmKG89ciksbzx0JiYobz09PTAmJmUhPT00fHxlPT09MHx8byE9PWErbi5zdHJtLmF2YWlsX2luKSkpYnJlYWs7aT0rKGU9PT00JiZvPT09YStuLnN0cm0uYXZhaWxfaW4pLEJ5KG4sMCwwLGkpLG4ucGVuZGluZ19idWZbbi5wZW5kaW5nLTRdPW8sbi5wZW5kaW5nX2J1ZltuLnBlbmRpbmctM109bz4+OCxuLnBlbmRpbmdfYnVmW24ucGVuZGluZy0yXT1+byxuLnBlbmRpbmdfYnVmW24ucGVuZGluZy0xXT1+bz4+OCxVeShuLnN0cm0pLGEmJihhPm8mJihhPW8pLG4uc3RybS5vdXRwdXQuc2V0KG4ud2luZG93LnN1YmFycmF5KG4uYmxvY2tfc3RhcnQsbi5ibG9ja19zdGFydCthKSxuLnN0cm0ubmV4dF9vdXQpLG4uc3RybS5uZXh0X291dCs9YSxuLnN0cm0uYXZhaWxfb3V0LT1hLG4uc3RybS50b3RhbF9vdXQrPWEsbi5ibG9ja19zdGFydCs9YSxvLT1hKSxvJiYoankobi5zdHJtLG4uc3RybS5vdXRwdXQsbi5zdHJtLm5leHRfb3V0LG8pLG4uc3RybS5uZXh0X291dCs9byxuLnN0cm0uYXZhaWxfb3V0LT1vLG4uc3RybS50b3RhbF9vdXQrPW8pfXdoaWxlKGk9PT0wKTtyZXR1cm4gZi09bi5zdHJtLmF2YWlsX2luLGYmJihmPj1uLndfc2l6ZT8obi5tYXRjaGVzPTIsbi53aW5kb3cuc2V0KG4uc3RybS5pbnB1dC5zdWJhcnJheShuLnN0cm0ubmV4dF9pbi1uLndfc2l6ZSxuLnN0cm0ubmV4dF9pbiksMCksbi5zdHJzdGFydD1uLndfc2l6ZSxuLmluc2VydD1uLnN0cnN0YXJ0KToobi53aW5kb3dfc2l6ZS1uLnN0cnN0YXJ0PD1mJiYobi5zdHJzdGFydC09bi53X3NpemUsbi53aW5kb3cuc2V0KG4ud2luZG93LnN1YmFycmF5KG4ud19zaXplLG4ud19zaXplK24uc3Ryc3RhcnQpLDApLG4ubWF0Y2hlczwyJiZuLm1hdGNoZXMrKyxuLmluc2VydD5uLnN0cnN0YXJ0JiYobi5pbnNlcnQ9bi5zdHJzdGFydCkpLG4ud2luZG93LnNldChuLnN0cm0uaW5wdXQuc3ViYXJyYXkobi5zdHJtLm5leHRfaW4tZixuLnN0cm0ubmV4dF9pbiksbi5zdHJzdGFydCksbi5zdHJzdGFydCs9ZixuLmluc2VydCs9Zj5uLndfc2l6ZS1uLmluc2VydD9uLndfc2l6ZS1uLmluc2VydDpmKSxuLmJsb2NrX3N0YXJ0PW4uc3Ryc3RhcnQpLG4uaGlnaF93YXRlcjxuLnN0cnN0YXJ0JiYobi5oaWdoX3dhdGVyPW4uc3Ryc3RhcnQpLGk/cXk6ZSE9PTAmJmUhPT00JiZuLnN0cm0uYXZhaWxfaW49PT0wJiZuLnN0cnN0YXJ0PT09bi5ibG9ja19zdGFydD9IeToocj1uLndpbmRvd19zaXplLW4uc3Ryc3RhcnQsbi5zdHJtLmF2YWlsX2luPnImJm4uYmxvY2tfc3RhcnQ+PW4ud19zaXplJiYobi5ibG9ja19zdGFydC09bi53X3NpemUsbi5zdHJzdGFydC09bi53X3NpemUsbi53aW5kb3cuc2V0KG4ud2luZG93LnN1YmFycmF5KG4ud19zaXplLG4ud19zaXplK24uc3Ryc3RhcnQpLDApLG4ubWF0Y2hlczwyJiZuLm1hdGNoZXMrKyxyKz1uLndfc2l6ZSxuLmluc2VydD5uLnN0cnN0YXJ0JiYobi5pbnNlcnQ9bi5zdHJzdGFydCkpLHI+bi5zdHJtLmF2YWlsX2luJiYocj1uLnN0cm0uYXZhaWxfaW4pLHImJihqeShuLnN0cm0sbi53aW5kb3csbi5zdHJzdGFydCxyKSxuLnN0cnN0YXJ0Kz1yLG4uaW5zZXJ0Kz1yPm4ud19zaXplLW4uaW5zZXJ0P24ud19zaXplLW4uaW5zZXJ0OnIpLG4uaGlnaF93YXRlcjxuLnN0cnN0YXJ0JiYobi5oaWdoX3dhdGVyPW4uc3Ryc3RhcnQpLHI9bi5iaV92YWxpZCs0Mj4+MyxyPW4ucGVuZGluZ19idWZfc2l6ZS1yPjY1NTM1PzY1NTM1Om4ucGVuZGluZ19idWZfc2l6ZS1yLHQ9cj5uLndfc2l6ZT9uLndfc2l6ZTpyLGE9bi5zdHJzdGFydC1uLmJsb2NrX3N0YXJ0LChhPj10fHwoYXx8ZT09PTQpJiZlIT09MCYmbi5zdHJtLmF2YWlsX2luPT09MCYmYTw9cikmJihvPWE+cj9yOmEsaT0rKGU9PT00JiZuLnN0cm0uYXZhaWxfaW49PT0wJiZvPT09YSksQnkobixuLmJsb2NrX3N0YXJ0LG8saSksbi5ibG9ja19zdGFydCs9byxVeShuLnN0cm0pKSxpP0t5OmppKX0sU3k9KG4sZSk9PntsZXQgdCxvO2Zvcig7Oyl7aWYobi5sb29rYWhlYWQ8UnIpe2lmKHNTKG4pLG4ubG9va2FoZWFkPFJyJiZlPT09MClyZXR1cm4gamk7aWYobi5sb29rYWhlYWQ9PT0wKWJyZWFrfWlmKHQ9MCxuLmxvb2thaGVhZD49V24mJih0PVhzKG4sbi5zdHJzdGFydCkpLHQhPT0wJiZuLnN0cnN0YXJ0LXQ8PW4ud19zaXplLVJyJiYobi5tYXRjaF9sZW5ndGg9Y1Mobix0KSksbi5tYXRjaF9sZW5ndGg+PVduKWlmKG89TmQobixuLnN0cnN0YXJ0LW4ubWF0Y2hfc3RhcnQsbi5tYXRjaF9sZW5ndGgtV24pLG4ubG9va2FoZWFkLT1uLm1hdGNoX2xlbmd0aCxuLm1hdGNoX2xlbmd0aDw9bi5tYXhfbGF6eV9tYXRjaCYmbi5sb29rYWhlYWQ+PVduKXtuLm1hdGNoX2xlbmd0aC0tO2RvIG4uc3Ryc3RhcnQrKyx0PVhzKG4sbi5zdHJzdGFydCk7d2hpbGUoLS1uLm1hdGNoX2xlbmd0aCE9PTApO24uc3Ryc3RhcnQrK31lbHNlIG4uc3Ryc3RhcnQrPW4ubWF0Y2hfbGVuZ3RoLG4ubWF0Y2hfbGVuZ3RoPTAsbi5sZWdhY3lfaGFzaCYmKG4uaW5zX2g9bi53aW5kb3dbbi5zdHJzdGFydF0sbi5pbnNfaD1XeShuLG4uaW5zX2gsbi53aW5kb3dbbi5zdHJzdGFydCsxXSkpO2Vsc2Ugbz1OZChuLDAsbi53aW5kb3dbbi5zdHJzdGFydF0pLG4ubG9va2FoZWFkLS0sbi5zdHJzdGFydCsrO2lmKG8mJihOYyhuLCExKSxuLnN0cm0uYXZhaWxfb3V0PT09MCkpcmV0dXJuIGppfXJldHVybiBuLmluc2VydD1uLnN0cnN0YXJ0PFduLTE/bi5zdHJzdGFydDpXbi0xLGU9PT00PyhOYyhuLCEwKSxuLnN0cm0uYXZhaWxfb3V0PT09MD9LeTpxeSk6bi5zeW1fbmV4dCYmKE5jKG4sITEpLG4uc3RybS5hdmFpbF9vdXQ9PT0wKT9qaTpIeX0sV3M9KG4sZSk9PntsZXQgdCxvLGE7Zm9yKDs7KXtpZihuLmxvb2thaGVhZDxScil7aWYoc1Mobiksbi5sb29rYWhlYWQ8UnImJmU9PT0wKXJldHVybiBqaTtpZihuLmxvb2thaGVhZD09PTApYnJlYWt9aWYodD0wLG4ubG9va2FoZWFkPj1XbiYmKHQ9WHMobixuLnN0cnN0YXJ0KSksbi5wcmV2X2xlbmd0aD1uLm1hdGNoX2xlbmd0aCxuLnByZXZfbWF0Y2g9bi5tYXRjaF9zdGFydCxuLm1hdGNoX2xlbmd0aD1Xbi0xLHQhPT0wJiZuLnByZXZfbGVuZ3RoPG4ubWF4X2xhenlfbWF0Y2gmJm4uc3Ryc3RhcnQtdDw9bi53X3NpemUtUnImJihuLm1hdGNoX2xlbmd0aD1jUyhuLHQpLG4ubWF0Y2hfbGVuZ3RoPD01JiYobi5zdHJhdGVneT09PTF8fG4ubWF0Y2hfbGVuZ3RoPT09V24mJm4uc3Ryc3RhcnQtbi5tYXRjaF9zdGFydD40MDk2KSYmKG4ubWF0Y2hfbGVuZ3RoPVduLTEpKSxuLnByZXZfbGVuZ3RoPj1XbiYmbi5tYXRjaF9sZW5ndGg8PW4ucHJldl9sZW5ndGgpe2E9bi5zdHJzdGFydCtuLmxvb2thaGVhZC1XbixvPU5kKG4sbi5zdHJzdGFydC0xLW4ucHJldl9tYXRjaCxuLnByZXZfbGVuZ3RoLVduKSxuLmxvb2thaGVhZC09bi5wcmV2X2xlbmd0aC0xLG4ucHJldl9sZW5ndGgtPTI7ZG8rK24uc3Ryc3RhcnQ8PWEmJih0PVhzKG4sbi5zdHJzdGFydCkpO3doaWxlKC0tbi5wcmV2X2xlbmd0aCE9PTApO2lmKG4ubWF0Y2hfYXZhaWxhYmxlPTAsbi5tYXRjaF9sZW5ndGg9V24tMSxuLnN0cnN0YXJ0KyssbyYmKE5jKG4sITEpLG4uc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gaml9ZWxzZSBpZihuLm1hdGNoX2F2YWlsYWJsZSl7aWYobz1OZChuLDAsbi53aW5kb3dbbi5zdHJzdGFydC0xXSksbyYmTmMobiwhMSksbi5zdHJzdGFydCsrLG4ubG9va2FoZWFkLS0sbi5zdHJtLmF2YWlsX291dD09PTApcmV0dXJuIGppfWVsc2Ugbi5tYXRjaF9hdmFpbGFibGU9MSxuLnN0cnN0YXJ0Kyssbi5sb29rYWhlYWQtLX1yZXR1cm4gbi5tYXRjaF9hdmFpbGFibGUmJihvPU5kKG4sMCxuLndpbmRvd1tuLnN0cnN0YXJ0LTFdKSxuLm1hdGNoX2F2YWlsYWJsZT0wKSxuLmluc2VydD1uLnN0cnN0YXJ0PFduLTE/bi5zdHJzdGFydDpXbi0xLGU9PT00PyhOYyhuLCEwKSxuLnN0cm0uYXZhaWxfb3V0PT09MD9LeTpxeSk6bi5zeW1fbmV4dCYmKE5jKG4sITEpLG4uc3RybS5hdmFpbF9vdXQ9PT0wKT9qaTpIeX0sRXI9Y2xhc3N7Y29uc3RydWN0b3IobixlLHQsbyxhKXt0aGlzLmdvb2RfbGVuZ3RoPW4sdGhpcy5tYXhfbGF6eT1lLHRoaXMubmljZV9sZW5ndGg9dCx0aGlzLm1heF9jaGFpbj1vLHRoaXMuZnVuYz1hfX07bmV3IEVyKDAsMCwwLDAsVTQpLG5ldyBFcig0LDQsOCw0LFN5KSxuZXcgRXIoNCw1LDE2LDgsU3kpLG5ldyBFcig0LDYsMzIsMzIsU3kpLG5ldyBFcig0LDQsMTYsMTYsV3MpLG5ldyBFcig4LDE2LDMyLDMyLFdzKSxuZXcgRXIoOCwxNiwxMjgsMTI4LFdzKSxuZXcgRXIoOCwzMiwxMjgsMjU2LFdzKSxuZXcgRXIoMzIsMTI4LDI1OCwxMDI0LFdzKSxuZXcgRXIoMzIsMjU4LDI1OCw0MDk2LFdzKTt3bT0xNjIwOSxqND0xNjE5MTtUbT0xNSxnTz04NTIsX089NTkyLHlPPTAsQ3k9MSxBTz0yLHo0PW5ldyBVaW50MTZBcnJheShbMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdKSxHND1uZXcgVWludDhBcnJheShbMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsMTk5LDc1XSksVjQ9bmV3IFVpbnQxNkFycmF5KFsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSksSDQ9bmV3IFVpbnQ4QXJyYXkoWzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XSksSWQ9KG4sZSx0LG8sYSxyLGksZik9PntsZXQgZD1mLmJpdHMsYz0wLHU9MCxsPTAsbT0wLGg9MCxiPTAscD0wLHk9MCxUPTAsXz0wLHcsRSxSLFMsQyxJPW51bGwsTSxQPW5ldyBVaW50MTZBcnJheSgxNiksRj1uZXcgVWludDE2QXJyYXkoMTYpLEE9bnVsbCx4LE4sdjtmb3IoYz0wO2M8PVRtO2MrKylQW2NdPTA7Zm9yKHU9MDt1PG87dSsrKVBbZVt0K3VdXSsrO2ZvcihoPWQsbT1UbTttPj0xJiZQW21dPT09MDttLS0pO2lmKGg+bSYmKGg9bSksbT09PTApcmV0dXJuIGFbcisrXT0yMDk3MTUyMCxhW3IrK109MjA5NzE1MjAsZi5iaXRzPTEsMDtmb3IobD0xO2w8bSYmUFtsXT09PTA7bCsrKTtmb3IoaDxsJiYoaD1sKSx5PTEsYz0xO2M8PVRtO2MrKylpZih5PDw9MSx5LT1QW2NdLHk8MClyZXR1cm4tMTtpZih5PjAmJihuPT09eU98fG0hPT0xKSlyZXR1cm4tMTtmb3IoRlsxXT0wLGM9MTtjPFRtO2MrKylGW2MrMV09RltjXStQW2NdO2Zvcih1PTA7dTxvO3UrKyllW3QrdV0hPT0wJiYoaVtGW2VbdCt1XV0rK109dSk7aWYobj09PXlPPyhJPUE9aSxNPTIwKTpuPT09Q3k/KEk9ejQsQT1HNCxNPTI1Nyk6KEk9VjQsQT1INCxNPTApLF89MCx1PTAsYz1sLEM9cixiPWgscD0wLFI9LTEsVD0xPDxoLFM9VC0xLG49PT1DeSYmVD5nT3x8bj09PUFPJiZUPl9PKXJldHVybiAxO2Zvcig7Oyl7eD1jLXAsaVt1XSsxPE0/KE49MCx2PWlbdV0pOmlbdV0+PU0/KE49QVtpW3VdLU1dLHY9SVtpW3VdLU1dKTooTj05Nix2PTApLHc9MTw8Yy1wLEU9MTw8YixsPUU7ZG8gRS09dyxhW0MrKF8+PnApK0VdPXg8PDI0fE48PDE2fHZ8MDt3aGlsZShFIT09MCk7Zm9yKHc9MTw8Yy0xO18mdzspdz4+PTE7aWYodz09PTA/Xz0wOihfJj13LTEsXys9dyksdSsrLC0tUFtjXT09PTApe2lmKGM9PT1tKWJyZWFrO2M9ZVt0K2lbdV1dfWlmKGM+aCYmKF8mUykhPT1SKXtmb3IocD09PTAmJihwPWgpLEMrPWwsYj1jLXAseT0xPDxiO2IrcDxtJiYoeS09UFtiK3BdLCEoeTw9MCkpOyliKysseTw8PTE7aWYoVCs9MTw8YixuPT09Q3kmJlQ+Z098fG49PT1BTyYmVD5fTylyZXR1cm4gMTtSPV8mUyxhW1JdPWg8PDI0fGI8PDE2fEMtcnwwfX1yZXR1cm4gXyE9PTAmJihhW0MrX109Yy1wPDwyNHw0MTk0MzA0KSxmLmJpdHM9aCwwfSxLND0wLGZTPTEsZFM9MixDbT0xNjE4MCx3Tz0xNjE4MSxUTz0xNjE4MixFTz0xNjE4MyxSTz0xNjE4NCx4Tz0xNjE4NSxPTz0xNjE4NixTTz0xNjE4NyxDTz0xNjE4OCxNTz0xNjE4OSxTbT0xNjE5MCxRcj0xNjE5MSxNeT0xNjE5MixOTz0xNjE5MyxOeT0xNjE5NCxJTz0xNjE5NSxQTz0xNjE5NixrTz0xNjE5Nyx2Tz0xNjE5OCxFbT0xNjE5OSxSbT0xNjIwMCxGTz0xNjIwMSxETz0xNjIwMixCTz0xNjIwMyxVTz0xNjIwNCxqTz0xNjIwNSxJeT0xNjIwNixMTz0xNjIwNyx6Tz0xNjIwOCxPbj0xNjIwOSxMeT0xNjIxMCx1Uz0xNjIxMSxxND04NTIsVzQ9NTkyLEdPPW49PihuPj4+MjQmMjU1KSsobj4+PjgmNjUyODApKygobiY2NTI4MCk8PDgpKygobiYyNTUpPDwyNCksWDQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnN0cm09bnVsbCx0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IFVpbnQxNkFycmF5KDMyMCksdGhpcy53b3JrPW5ldyBVaW50MTZBcnJheSgyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH19LEpzPW49PntpZighbilyZXR1cm4gMTtsZXQgZT1uLnN0YXRlO3JldHVybisoIWV8fGUuc3RybSE9PW58fGUubW9kZTxDbXx8ZS5tb2RlPnVTKX0sWTQ9bj0+e2lmKEpzKG4pKXJldHVybi0yO2xldCBlPW4uc3RhdGU7cmV0dXJuIG4udG90YWxfaW49bi50b3RhbF9vdXQ9ZS50b3RhbD0wLG4ubXNnPSIiLGUud3JhcCYmKG4uYWRsZXI9ZS53cmFwJjEpLGUubW9kZT1DbSxlLmxhc3Q9MCxlLmhhdmVkaWN0PTAsZS5mbGFncz0tMSxlLmRtYXg9MzI3NjgsZS5oZWFkPW51bGwsZS5ob2xkPTAsZS5iaXRzPTAsZS5sZW5jb2RlPWUubGVuZHluPW5ldyBJbnQzMkFycmF5KHE0KSxlLmRpc3Rjb2RlPWUuZGlzdGR5bj1uZXcgSW50MzJBcnJheShXNCksZS5zYW5lPTEsZS5iYWNrPS0xLDB9LGxTPW49PntpZihKcyhuKSlyZXR1cm4tMjtsZXQgZT1uLnN0YXRlO3JldHVybiBlLndzaXplPTAsZS53aGF2ZT0wLGUud25leHQ9MCxZNChuKX0sSjQ9KG4sZSk9PntsZXQgdDtpZihKcyhuKSlyZXR1cm4tMjtsZXQgbz1uLnN0YXRlO3JldHVybiBlPDA/KHQ9MCxlPS1lKToodD0oZT4+NCkrNSxlPDQ4JiYoZSY9MTUpKSxlJiYoZTw4fHxlPjE1KT8tMjooby53aW5kb3chPT1udWxsJiZvLndiaXRzIT09ZSYmKG8ud2luZG93PW51bGwpLG8ud3JhcD10LG8ud2JpdHM9ZSxsUyhuKSl9LFo0PShuLGUpPT57aWYoIW4pcmV0dXJuLTI7bGV0IHQ9bmV3IFg0O24uc3RhdGU9dCx0LnN0cm09bix0LndpbmRvdz1udWxsLHQubW9kZT1DbTtsZXQgbz1KNChuLGUpO3JldHVybiBvIT09MCYmKG4uc3RhdGU9bnVsbCksb30sVk89ITAsUTQ9bj0+e2lmKFZPKXtQeT1uZXcgSW50MzJBcnJheSg1MTIpLGt5PW5ldyBJbnQzMkFycmF5KDMyKTtsZXQgZT0wO2Zvcig7ZTwxNDQ7KW4ubGVuc1tlKytdPTg7Zm9yKDtlPDI1Njspbi5sZW5zW2UrK109OTtmb3IoO2U8MjgwOyluLmxlbnNbZSsrXT03O2Zvcig7ZTwyODg7KW4ubGVuc1tlKytdPTg7Zm9yKElkKGZTLG4ubGVucywwLDI4OCxQeSwwLG4ud29yayx7Yml0czo5fSksZT0wO2U8MzI7KW4ubGVuc1tlKytdPTU7SWQoZFMsbi5sZW5zLDAsMzIsa3ksMCxuLndvcmsse2JpdHM6NX0pLFZPPSExfW4ubGVuY29kZT1QeSxuLmxlbmJpdHM9OSxuLmRpc3Rjb2RlPWt5LG4uZGlzdGJpdHM9NX0saFM9KG4sZSx0LG8pPT57bGV0IGEscj1uLnN0YXRlO3JldHVybiByLndpbmRvdz09PW51bGwmJihyLndpbmRvdz1uZXcgVWludDhBcnJheSgxPDxyLndiaXRzKSksci53c2l6ZT09PTAmJihyLndzaXplPTE8PHIud2JpdHMsci53bmV4dD0wLHIud2hhdmU9MCksbz49ci53c2l6ZT8oci53aW5kb3cuc2V0KGUuc3ViYXJyYXkodC1yLndzaXplLHQpLDApLHIud25leHQ9MCxyLndoYXZlPXIud3NpemUpOihhPXIud3NpemUtci53bmV4dCxhPm8mJihhPW8pLHIud2luZG93LnNldChlLnN1YmFycmF5KHQtbyx0LW8rYSksci53bmV4dCksby09YSxvPyhyLndpbmRvdy5zZXQoZS5zdWJhcnJheSh0LW8sdCksMCksci53bmV4dD1vLHIud2hhdmU9ci53c2l6ZSk6KHIud25leHQrPWEsci53bmV4dD09PXIud3NpemUmJihyLnduZXh0PTApLHIud2hhdmU8ci53c2l6ZSYmKHIud2hhdmUrPWEpKSksMH0sdnk9KG4sZSk9PntsZXQgdCxvLGEscixpLGYsZCxjLHUsbCxtLGgsYixwLHk9MCxULF8sdyxFLFIsUyxDLEksTT1uZXcgVWludDhBcnJheSg0KSxQLEYsQT1uZXcgVWludDhBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pO2lmKEpzKG4pfHwhbi5vdXRwdXR8fCFuLmlucHV0JiZuLmF2YWlsX2luIT09MClyZXR1cm4tMjt0PW4uc3RhdGUsdC5tb2RlPT09UXImJih0Lm1vZGU9TXkpLGk9bi5uZXh0X291dCxhPW4ub3V0cHV0LGQ9bi5hdmFpbF9vdXQscj1uLm5leHRfaW4sbz1uLmlucHV0LGY9bi5hdmFpbF9pbixjPXQuaG9sZCx1PXQuYml0cyxsPWYsbT1kLEk9MDtlOmZvcig7Oylzd2l0Y2godC5tb2RlKXtjYXNlIENtOmlmKHQud3JhcD09PTApe3QubW9kZT1NeTticmVha31mb3IoO3U8MTY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1pZih0LndyYXAmMiYmYz09PTM1NjE1KXt0LndiaXRzPT09MCYmKHQud2JpdHM9MTUpLHQuY2hlY2s9MCxNWzBdPWMmMjU1LE1bMV09Yz4+PjgmMjU1LHQuY2hlY2s9WmEodC5jaGVjayxNLDIsMCksYz0wLHU9MCx0Lm1vZGU9d087YnJlYWt9aWYodC5oZWFkJiYodC5oZWFkLmRvbmU9ITEpLCEodC53cmFwJjEpfHwoKChjJjI1NSk8PDgpKyhjPj44KSklMzEpe24ubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIix0Lm1vZGU9T247YnJlYWt9aWYoKGMmMTUpIT04KXtuLm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLHQubW9kZT1PbjticmVha31pZihjPj4+PTQsdS09NCxDPShjJjE1KSs4LHQud2JpdHM9PT0wJiYodC53Yml0cz1DKSxDPjE1fHxDPnQud2JpdHMpe24ubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIix0Lm1vZGU9T247YnJlYWt9dC5kbWF4PTE8PHQud2JpdHMsdC5mbGFncz0wLG4uYWRsZXI9dC5jaGVjaz0xLHQubW9kZT1jJjUxMj9NTzpRcixjPTAsdT0wO2JyZWFrO2Nhc2Ugd086Zm9yKDt1PDE2Oyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9aWYodC5mbGFncz1jLCh0LmZsYWdzJjI1NSkhPTgpe24ubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsdC5tb2RlPU9uO2JyZWFrfWlmKHQuZmxhZ3MmNTczNDQpe24ubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLHQubW9kZT1PbjticmVha310LmhlYWQmJih0LmhlYWQudGV4dD1jPj44JjEpLHQuZmxhZ3MmNTEyJiZ0LndyYXAmNCYmKE1bMF09YyYyNTUsTVsxXT1jPj4+OCYyNTUsdC5jaGVjaz1aYSh0LmNoZWNrLE0sMiwwKSksYz0wLHU9MCx0Lm1vZGU9VE87Y2FzZSBUTzpmb3IoO3U8MzI7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH10LmhlYWQmJih0LmhlYWQudGltZT1jKSx0LmZsYWdzJjUxMiYmdC53cmFwJjQmJihNWzBdPWMmMjU1LE1bMV09Yz4+PjgmMjU1LE1bMl09Yz4+PjE2JjI1NSxNWzNdPWM+Pj4yNCYyNTUsdC5jaGVjaz1aYSh0LmNoZWNrLE0sNCwwKSksYz0wLHU9MCx0Lm1vZGU9RU87Y2FzZSBFTzpmb3IoO3U8MTY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH10LmhlYWQmJih0LmhlYWQueGZsYWdzPWMmMjU1LHQuaGVhZC5vcz1jPj44KSx0LmZsYWdzJjUxMiYmdC53cmFwJjQmJihNWzBdPWMmMjU1LE1bMV09Yz4+PjgmMjU1LHQuY2hlY2s9WmEodC5jaGVjayxNLDIsMCkpLGM9MCx1PTAsdC5tb2RlPVJPO2Nhc2UgUk86aWYodC5mbGFncyYxMDI0KXtmb3IoO3U8MTY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH10Lmxlbmd0aD1jLHQuaGVhZCYmKHQuaGVhZC5leHRyYV9sZW49YyksdC5mbGFncyY1MTImJnQud3JhcCY0JiYoTVswXT1jJjI1NSxNWzFdPWM+Pj44JjI1NSx0LmNoZWNrPVphKHQuY2hlY2ssTSwyLDApKSxjPTAsdT0wfWVsc2UgdC5oZWFkJiYodC5oZWFkLmV4dHJhPW51bGwpO3QubW9kZT14TztjYXNlIHhPOmlmKHQuZmxhZ3MmMTAyNCYmKGg9dC5sZW5ndGgsaD5mJiYoaD1mKSxoJiYodC5oZWFkJiYoQz10LmhlYWQuZXh0cmFfbGVuLXQubGVuZ3RoLHQuaGVhZC5leHRyYXx8KHQuaGVhZC5leHRyYT1uZXcgVWludDhBcnJheSh0LmhlYWQuZXh0cmFfbGVuKSksdC5oZWFkLmV4dHJhLnNldChvLnN1YmFycmF5KHIscitoKSxDKSksdC5mbGFncyY1MTImJnQud3JhcCY0JiYodC5jaGVjaz1aYSh0LmNoZWNrLG8saCxyKSksZi09aCxyKz1oLHQubGVuZ3RoLT1oKSx0Lmxlbmd0aCkpYnJlYWsgZTt0Lmxlbmd0aD0wLHQubW9kZT1PTztjYXNlIE9POmlmKHQuZmxhZ3MmMjA0OCl7aWYoZj09PTApYnJlYWsgZTtoPTA7ZG8gQz1vW3IraCsrXSx0LmhlYWQmJkMmJnQubGVuZ3RoPDY1NTM2JiYodC5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoQykpO3doaWxlKEMmJmg8Zik7aWYodC5mbGFncyY1MTImJnQud3JhcCY0JiYodC5jaGVjaz1aYSh0LmNoZWNrLG8saCxyKSksZi09aCxyKz1oLEMpYnJlYWsgZX1lbHNlIHQuaGVhZCYmKHQuaGVhZC5uYW1lPW51bGwpO3QubGVuZ3RoPTAsdC5tb2RlPVNPO2Nhc2UgU086aWYodC5mbGFncyY0MDk2KXtpZihmPT09MClicmVhayBlO2g9MDtkbyBDPW9bcitoKytdLHQuaGVhZCYmQyYmdC5sZW5ndGg8NjU1MzYmJih0LmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShDKSk7d2hpbGUoQyYmaDxmKTtpZih0LmZsYWdzJjUxMiYmdC53cmFwJjQmJih0LmNoZWNrPVphKHQuY2hlY2ssbyxoLHIpKSxmLT1oLHIrPWgsQylicmVhayBlfWVsc2UgdC5oZWFkJiYodC5oZWFkLmNvbW1lbnQ9bnVsbCk7dC5tb2RlPUNPO2Nhc2UgQ086aWYodC5mbGFncyY1MTIpe2Zvcig7dTwxNjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWlmKHQud3JhcCY0JiZjIT09KHQuY2hlY2smNjU1MzUpKXtuLm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsdC5tb2RlPU9uO2JyZWFrfWM9MCx1PTB9dC5oZWFkJiYodC5oZWFkLmhjcmM9dC5mbGFncz4+OSYxLHQuaGVhZC5kb25lPSEwKSxuLmFkbGVyPXQuY2hlY2s9MCx0Lm1vZGU9UXI7YnJlYWs7Y2FzZSBNTzpmb3IoO3U8MzI7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1uLmFkbGVyPXQuY2hlY2s9R08oYyksYz0wLHU9MCx0Lm1vZGU9U207Y2FzZSBTbTppZih0LmhhdmVkaWN0PT09MClyZXR1cm4gbi5uZXh0X291dD1pLG4uYXZhaWxfb3V0PWQsbi5uZXh0X2luPXIsbi5hdmFpbF9pbj1mLHQuaG9sZD1jLHQuYml0cz11LDI7bi5hZGxlcj10LmNoZWNrPTEsdC5tb2RlPVFyO2Nhc2UgUXI6aWYoZT09PTV8fGU9PT02KWJyZWFrIGU7Y2FzZSBNeTppZih0Lmxhc3Qpe2M+Pj49dSY3LHUtPXUmNyx0Lm1vZGU9SXk7YnJlYWt9Zm9yKDt1PDM7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1zd2l0Y2godC5sYXN0PWMmMSxjPj4+PTEsLS11LGMmMyl7Y2FzZSAwOnQubW9kZT1OTzticmVhaztjYXNlIDE6aWYoUTQodCksdC5tb2RlPUVtLGU9PT02KXtjPj4+PTIsdS09MjticmVhayBlfWJyZWFrO2Nhc2UgMjp0Lm1vZGU9UE87YnJlYWs7Y2FzZSAzOm4ubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLHQubW9kZT1Pbn1jPj4+PTIsdS09MjticmVhaztjYXNlIE5POmZvcihjPj4+PXUmNyx1LT11Jjc7dTwzMjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWlmKChjJjY1NTM1KSE9KGM+Pj4xNl42NTUzNSkpe24ubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIix0Lm1vZGU9T247YnJlYWt9aWYodC5sZW5ndGg9YyY2NTUzNSxjPTAsdT0wLHQubW9kZT1OeSxlPT09NilicmVhayBlO2Nhc2UgTnk6dC5tb2RlPUlPO2Nhc2UgSU86aWYoaD10Lmxlbmd0aCxoKXtpZihoPmYmJihoPWYpLGg+ZCYmKGg9ZCksaD09PTApYnJlYWsgZTthLnNldChvLnN1YmFycmF5KHIscitoKSxpKSxmLT1oLHIrPWgsZC09aCxpKz1oLHQubGVuZ3RoLT1oO2JyZWFrfXQubW9kZT1RcjticmVhaztjYXNlIFBPOmZvcig7dTwxNDspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWlmKHQubmxlbj0oYyYzMSkrMjU3LGM+Pj49NSx1LT01LHQubmRpc3Q9KGMmMzEpKzEsYz4+Pj01LHUtPTUsdC5uY29kZT0oYyYxNSkrNCxjPj4+PTQsdS09NCx0Lm5sZW4+Mjg2fHx0Lm5kaXN0PjMwKXtuLm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLHQubW9kZT1PbjticmVha310LmhhdmU9MCx0Lm1vZGU9a087Y2FzZSBrTzpmb3IoO3QuaGF2ZTx0Lm5jb2RlOyl7Zm9yKDt1PDM7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH10LmxlbnNbQVt0LmhhdmUrK11dPWMmNyxjPj4+PTMsdS09M31mb3IoO3QuaGF2ZTwxOTspdC5sZW5zW0FbdC5oYXZlKytdXT0wO2lmKHQubGVuY29kZT10LmxlbmR5bix0LmxlbmJpdHM9NyxQPXtiaXRzOnQubGVuYml0c30sST1JZChLNCx0LmxlbnMsMCwxOSx0LmxlbmNvZGUsMCx0LndvcmssUCksdC5sZW5iaXRzPVAuYml0cyxJKXtuLm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0Iix0Lm1vZGU9T247YnJlYWt9dC5oYXZlPTAsdC5tb2RlPXZPO2Nhc2Ugdk86Zm9yKDt0LmhhdmU8dC5ubGVuK3QubmRpc3Q7KXtmb3IoO3k9dC5sZW5jb2RlW2MmKDE8PHQubGVuYml0cyktMV0sVD15Pj4+MjQsXz15Pj4+MTYmMjU1LHc9eSY2NTUzNSwhKFQ8PXUpOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9aWYodzwxNiljPj4+PVQsdS09VCx0LmxlbnNbdC5oYXZlKytdPXc7ZWxzZXtpZih3PT09MTYpe2ZvcihGPVQrMjt1PEY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1pZihjPj4+PVQsdS09VCx0LmhhdmU9PT0wKXtuLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsdC5tb2RlPU9uO2JyZWFrfUM9dC5sZW5zW3QuaGF2ZS0xXSxoPTMrKGMmMyksYz4+Pj0yLHUtPTJ9ZWxzZSBpZih3PT09MTcpe2ZvcihGPVQrMzt1PEY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1jPj4+PVQsdS09VCxDPTAsaD0zKyhjJjcpLGM+Pj49Myx1LT0zfWVsc2V7Zm9yKEY9VCs3O3U8Rjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWM+Pj49VCx1LT1ULEM9MCxoPTExKyhjJjEyNyksYz4+Pj03LHUtPTd9aWYodC5oYXZlK2g+dC5ubGVuK3QubmRpc3Qpe24ubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0Iix0Lm1vZGU9T247YnJlYWt9Zm9yKDtoLS07KXQubGVuc1t0LmhhdmUrK109Q319aWYodC5tb2RlPT09T24pYnJlYWs7aWYodC5sZW5zWzI1Nl09PT0wKXtuLm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIix0Lm1vZGU9T247YnJlYWt9aWYodC5sZW5iaXRzPTksUD17Yml0czp0LmxlbmJpdHN9LEk9SWQoZlMsdC5sZW5zLDAsdC5ubGVuLHQubGVuY29kZSwwLHQud29yayxQKSx0LmxlbmJpdHM9UC5iaXRzLEkpe24ubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLHQubW9kZT1PbjticmVha31pZih0LmRpc3RiaXRzPTYsdC5kaXN0Y29kZT10LmRpc3RkeW4sUD17Yml0czp0LmRpc3RiaXRzfSxJPUlkKGRTLHQubGVucyx0Lm5sZW4sdC5uZGlzdCx0LmRpc3Rjb2RlLDAsdC53b3JrLFApLHQuZGlzdGJpdHM9UC5iaXRzLEkpe24ubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLHQubW9kZT1PbjticmVha31pZih0Lm1vZGU9RW0sZT09PTYpYnJlYWsgZTtjYXNlIEVtOnQubW9kZT1SbTtjYXNlIFJtOmlmKGY+PTYmJmQ+PTI1OCl7bi5uZXh0X291dD1pLG4uYXZhaWxfb3V0PWQsbi5uZXh0X2luPXIsbi5hdmFpbF9pbj1mLHQuaG9sZD1jLHQuYml0cz11LEw0KG4sbSksaT1uLm5leHRfb3V0LGE9bi5vdXRwdXQsZD1uLmF2YWlsX291dCxyPW4ubmV4dF9pbixvPW4uaW5wdXQsZj1uLmF2YWlsX2luLGM9dC5ob2xkLHU9dC5iaXRzLHQubW9kZT09PVFyJiYodC5iYWNrPS0xKTticmVha31mb3IodC5iYWNrPTA7eT10LmxlbmNvZGVbYyYoMTw8dC5sZW5iaXRzKS0xXSxUPXk+Pj4yNCxfPXk+Pj4xNiYyNTUsdz15JjY1NTM1LCEoVDw9dSk7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1pZihfJiYhKF8mMjQwKSl7Zm9yKEU9VCxSPV8sUz13O3k9dC5sZW5jb2RlW1MrKChjJigxPDxFK1IpLTEpPj5FKV0sVD15Pj4+MjQsXz15Pj4+MTYmMjU1LHc9eSY2NTUzNSwhKEUrVDw9dSk7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH1jPj4+PUUsdS09RSx0LmJhY2srPUV9aWYoYz4+Pj1ULHUtPVQsdC5iYWNrKz1ULHQubGVuZ3RoPXcsXz09PTApe3QubW9kZT1qTzticmVha31pZihfJjMyKXt0LmJhY2s9LTEsdC5tb2RlPVFyO2JyZWFrfWlmKF8mNjQpe24ubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLHQubW9kZT1PbjticmVha310LmV4dHJhPV8mMTUsdC5tb2RlPUZPO2Nhc2UgRk86aWYodC5leHRyYSl7Zm9yKEY9dC5leHRyYTt1PEY7KXtpZihmPT09MClicmVhayBlO2YtLSxjKz1vW3IrK108PHUsdSs9OH10Lmxlbmd0aCs9YyYoMTw8dC5leHRyYSktMSxjPj4+PXQuZXh0cmEsdS09dC5leHRyYSx0LmJhY2srPXQuZXh0cmF9dC53YXM9dC5sZW5ndGgsdC5tb2RlPURPO2Nhc2UgRE86Zm9yKDt5PXQuZGlzdGNvZGVbYyYoMTw8dC5kaXN0Yml0cyktMV0sVD15Pj4+MjQsXz15Pj4+MTYmMjU1LHc9eSY2NTUzNSwhKFQ8PXUpOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9aWYoIShfJjI0MCkpe2ZvcihFPVQsUj1fLFM9dzt5PXQuZGlzdGNvZGVbUysoKGMmKDE8PEUrUiktMSk+PkUpXSxUPXk+Pj4yNCxfPXk+Pj4xNiYyNTUsdz15JjY1NTM1LCEoRStUPD11KTspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWM+Pj49RSx1LT1FLHQuYmFjays9RX1pZihjPj4+PVQsdS09VCx0LmJhY2srPVQsXyY2NCl7bi5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsdC5tb2RlPU9uO2JyZWFrfXQub2Zmc2V0PXcsdC5leHRyYT1fJjE1LHQubW9kZT1CTztjYXNlIEJPOmlmKHQuZXh0cmEpe2ZvcihGPXQuZXh0cmE7dTxGOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sYys9b1tyKytdPDx1LHUrPTh9dC5vZmZzZXQrPWMmKDE8PHQuZXh0cmEpLTEsYz4+Pj10LmV4dHJhLHUtPXQuZXh0cmEsdC5iYWNrKz10LmV4dHJhfWlmKHQub2Zmc2V0PnQuZG1heCl7bi5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIix0Lm1vZGU9T247YnJlYWt9dC5tb2RlPVVPO2Nhc2UgVU86aWYoZD09PTApYnJlYWsgZTtpZihoPW0tZCx0Lm9mZnNldD5oKXtpZihoPXQub2Zmc2V0LWgsaD50LndoYXZlJiZ0LnNhbmUpe24ubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsdC5tb2RlPU9uO2JyZWFrfWg+dC53bmV4dD8oaC09dC53bmV4dCxiPXQud3NpemUtaCk6Yj10LnduZXh0LWgsaD50Lmxlbmd0aCYmKGg9dC5sZW5ndGgpLHA9dC53aW5kb3d9ZWxzZSBwPWEsYj1pLXQub2Zmc2V0LGg9dC5sZW5ndGg7aD5kJiYoaD1kKSxkLT1oLHQubGVuZ3RoLT1oO2RvIGFbaSsrXT1wW2IrK107d2hpbGUoLS1oKTt0Lmxlbmd0aD09PTAmJih0Lm1vZGU9Um0pO2JyZWFrO2Nhc2Ugak86aWYoZD09PTApYnJlYWsgZTthW2krK109dC5sZW5ndGgsZC0tLHQubW9kZT1SbTticmVhaztjYXNlIEl5OmlmKHQud3JhcCl7Zm9yKDt1PDMyOyl7aWYoZj09PTApYnJlYWsgZTtmLS0sY3w9b1tyKytdPDx1LHUrPTh9aWYobS09ZCxuLnRvdGFsX291dCs9bSx0LnRvdGFsKz1tLHQud3JhcCY0JiZtJiYobi5hZGxlcj10LmNoZWNrPXQuZmxhZ3M/WmEodC5jaGVjayxhLG0saS1tKTpPbSh0LmNoZWNrLGEsbSxpLW0pKSxtPWQsdC53cmFwJjQmJih0LmZsYWdzP2M6R08oYykpIT09dC5jaGVjayl7bi5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIix0Lm1vZGU9T247YnJlYWt9Yz0wLHU9MH10Lm1vZGU9TE87Y2FzZSBMTzppZih0LndyYXAmJnQuZmxhZ3Mpe2Zvcig7dTwzMjspe2lmKGY9PT0wKWJyZWFrIGU7Zi0tLGMrPW9bcisrXTw8dSx1Kz04fWlmKHQud3JhcCY0JiZjIT09KHQudG90YWwmNDI5NDk2NzI5NSkpe24ubXNnPSJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIix0Lm1vZGU9T247YnJlYWt9Yz0wLHU9MH10Lm1vZGU9ek87Y2FzZSB6TzpJPTE7YnJlYWsgZTtjYXNlIE9uOkk9LTM7YnJlYWsgZTtjYXNlIEx5OnJldHVybi00O2Nhc2UgdVM6ZGVmYXVsdDpyZXR1cm4tMn1yZXR1cm4gbi5uZXh0X291dD1pLG4uYXZhaWxfb3V0PWQsbi5uZXh0X2luPXIsbi5hdmFpbF9pbj1mLHQuaG9sZD1jLHQuYml0cz11LCh0LndzaXplfHxtIT09bi5hdmFpbF9vdXQmJnQubW9kZTxPbiYmKHQubW9kZTxJeXx8ZSE9PTQpKSYmaFMobixuLm91dHB1dCxuLm5leHRfb3V0LG0tbi5hdmFpbF9vdXQpPyh0Lm1vZGU9THksLTQpOihsLT1uLmF2YWlsX2luLG0tPW4uYXZhaWxfb3V0LG4udG90YWxfaW4rPWwsbi50b3RhbF9vdXQrPW0sdC50b3RhbCs9bSx0LndyYXAmNCYmbSYmKG4uYWRsZXI9dC5jaGVjaz10LmZsYWdzP1phKHQuY2hlY2ssYSxtLG4ubmV4dF9vdXQtbSk6T20odC5jaGVjayxhLG0sbi5uZXh0X291dC1tKSksbi5kYXRhX3R5cGU9dC5iaXRzKyh0Lmxhc3Q/NjQ6MCkrKHQubW9kZT09PVFyPzEyODowKSsodC5tb2RlPT09RW18fHQubW9kZT09PU55PzI1NjowKSwobD09PTAmJm09PT0wfHxlPT09NCkmJkk9PT0wJiYoST0tNSksSSl9LEhPPW49PntpZihKcyhuKSlyZXR1cm4tMjtsZXQgZT1uLnN0YXRlO3JldHVybiBlLndpbmRvdyYmKGUud2luZG93PW51bGwpLG4uc3RhdGU9bnVsbCwwfSxLTz0obixlKT0+e2xldCB0PWUubGVuZ3RoLG8sYSxyO3JldHVybiBKcyhuKXx8KG89bi5zdGF0ZSxvLndyYXAhPT0wJiZvLm1vZGUhPT1TbSk/LTI6by5tb2RlPT09U20mJihhPTEsYT1PbShhLGUsdCwwKSxhIT09by5jaGVjayk/LTM6KHI9aFMobixlLHQsdCkscj8oby5tb2RlPUx5LC00KTooby5oYXZlZGljdD0xLDApKX0sJDQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0sZTY9bj0+e2xldCBlPW5ldyBVaW50OEFycmF5KG4ucmVkdWNlKChvLGEpPT5vK2EubGVuZ3RoLDApKSx0PTA7Zm9yKGxldCBvIG9mIG4pZS5zZXQobyx0KSx0Kz1vLmxlbmd0aDtyZXR1cm4gZX07cU89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxvNj17Y2h1bmtTaXplOjEwMjQqNjQsd2luZG93Qml0czoxNSxyYXc6ITEsZGljdGlvbmFyeTpuZXcgVWludDhBcnJheX0sYTY9Y2xhc3N7Y29uc3RydWN0b3Iobj17fSl7VWkodGhpcywib3B0aW9ucyIsdm9pZCAwKSxVaSh0aGlzLCJlcnIiLHZvaWQgMCksVWkodGhpcywibXNnIix2b2lkIDApLFVpKHRoaXMsImVuZGVkIix2b2lkIDApLFVpKHRoaXMsInN0YXJ0ZWQiLHZvaWQgMCksVWkodGhpcywiY2h1bmtzIix2b2lkIDApLFVpKHRoaXMsInN0cm0iLHZvaWQgMCksVWkodGhpcywicmVzdWx0Iix2b2lkIDApLHRoaXMub3B0aW9ucz1PYmplY3QuYXNzaWduKHt9LG82LG4pO2xldCBlPXRoaXMub3B0aW9ucztlLnJhdyYmZS53aW5kb3dCaXRzPj0wJiZlLndpbmRvd0JpdHM8MTYmJihlLndpbmRvd0JpdHM9LWUud2luZG93Qml0cyxlLndpbmRvd0JpdHM9PT0wJiYoZS53aW5kb3dCaXRzPS0xNSkpLGUud2luZG93Qml0cz49MCYmZS53aW5kb3dCaXRzPDE2JiYhbi53aW5kb3dCaXRzJiYoZS53aW5kb3dCaXRzKz0zMiksZS53aW5kb3dCaXRzPjE1JiZlLndpbmRvd0JpdHM8NDgmJihlLndpbmRvd0JpdHMmMTV8fChlLndpbmRvd0JpdHN8PTE1KSksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuc3RhcnRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnJlc3VsdD1uZXcgVWludDhBcnJheSx0aGlzLnN0cm09bmV3ICQ0LHRoaXMuc3RybS5hdmFpbF9vdXQ9MDtsZXQgdD1aNCh0aGlzLnN0cm0sZS53aW5kb3dCaXRzKTtpZih0IT09MCl0aHJvdyBFcnJvcih4eVt0XSk7cU8uY2FsbChlLmRpY3Rpb25hcnkpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIiYmKGUuZGljdGlvbmFyeT1uZXcgVWludDhBcnJheShlLmRpY3Rpb25hcnkpKTtsZXQgbz1lLmRpY3Rpb25hcnk7aWYoZS5yYXcmJm8ubGVuZ3RoJiYodD1LTyh0aGlzLnN0cm0sbyksdCE9PTApKXRocm93IEVycm9yKHh5W3RdKX1wdXNoKG4sZT0hMSl7bGV0IHQ9dGhpcy5zdHJtLG89dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxhLHIsaTtpZih0aGlzLmVuZGVkKXJldHVybiB0aGlzLmVycj09PTA7Zm9yKHI9dHlwZW9mIGU9PSJudW1iZXIiP2U6ZT09PSEwPzQ6MCxxTy5jYWxsKG4pPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIj90LmlucHV0PW5ldyBVaW50OEFycmF5KG4pOnQuaW5wdXQ9bix0Lm5leHRfaW49MCx0LmF2YWlsX2luPXQuaW5wdXQubGVuZ3RoLHRoaXMuc3RhcnRlZHx8KHRoaXMuc3RhcnRlZD0hMCx0aGlzLm9uU3RhcnQodCkpOzspe2lmKHQuYXZhaWxfb3V0PT09MCYmKHQub3V0cHV0PW5ldyBVaW50OEFycmF5KG8pLHQubmV4dF9vdXQ9MCx0LmF2YWlsX291dD1vKSxhPXZ5KHQsciksYT09PTIpe2xldCBmPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5O2YubGVuZ3RoJiYoYT1LTyh0LGYpLGE9PT0wP2E9dnkodCxyKTphPT09LTMmJihhPTIpKX1mb3IoO3QuYXZhaWxfaW4+MCYmYT09PTEmJnQuc3RhdGUud3JhcCYyJiZ0LnN0YXRlLmZsYWdzIT09MCYmdC5pbnB1dFt0Lm5leHRfaW5dIT09MDspbFModCksYT12eSh0LHIpO2lmKGE9PT0tMnx8YT09PS0zfHxhPT09Mnx8YT09PS00KWJyZWFrO2lmKGk9dC5hdmFpbF9vdXQsdC5uZXh0X291dCYmKHQuYXZhaWxfb3V0PT09MHx8YT09PTF8fHI+MCkmJih0aGlzLm9uRGF0YSh0Lm91dHB1dC5sZW5ndGg9PT10Lm5leHRfb3V0P3Qub3V0cHV0OnQub3V0cHV0LnN1YmFycmF5KDAsdC5uZXh0X291dCkpLHQuYXZhaWxfb3V0PTAsdC5uZXh0X291dD0wKSwhKChhPT09MHx8YT09PS01KSYmaT09PTApKXtpZihhPT09MSl7YT1ITyh0aGlzLnN0cm0pO2JyZWFrfWlmKHQuYXZhaWxfaW49PT0wKXtpZihyPT09NCl7YT1ITyh0aGlzLnN0cm0pLGE9PT0wJiYoYT0tNSk7YnJlYWt9cmV0dXJuITB9fX1yZXR1cm4gdGhpcy5lcnI9YSx0aGlzLm1zZz10Lm1zZ3x8eHlbYV0sdGhpcy5lbmRlZD0hMCx0aGlzLm9uRW5kKGEpLGE9PT0wfW9uU3RhcnQobil7fW9uRGF0YShuKXt0aGlzLmNodW5rcy5wdXNoKG4pfW9uRW5kKG4pe249PT0wJiYodGhpcy5yZXN1bHQ9ZTYodGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXX19fSk7dmFyIFh5PXt9OyRlKFh5LHtkZWZhdWx0OigpPT5oNn0pO2Z1bmN0aW9uIHI2KG4sZSl7bGV0IHQ9TGkuZnJvbVN0cmluZyhuLnR5cGUpLG89bi5idWZmZXI7ck8obi5rZXksbyk7bGV0IGE9bDYobyk7bz1hLmJ1ZmZlcjtsZXQgcj1hLmxlbmd0aDtzd2l0Y2godCl7Y2FzZSBMaS5NRVRBREFUQTpyZXR1cm4gYzYobyxyLG4ucXVhZEtleSk7Y2FzZSBMaS5URVJSQUlOOnJldHVybiBkNihvLHIsZSk7Y2FzZSBMaS5EQlJPT1Q6cmV0dXJuIGUucHVzaChvKSx7YnVmZmVyOm99fX1mdW5jdGlvbiBjNihuLGUsdCl7bGV0IG89bmV3IERhdGFWaWV3KG4pLGE9MCxyPW8uZ2V0VWludDMyKGEsITApO2lmKGErPVFzLHIhPT1pNil0aHJvdyBuZXcgbnQoIkludmFsaWQgbWFnaWMiKTtsZXQgaT1vLmdldFVpbnQzMihhLCEwKTtpZihhKz1RcyxpIT09MSl0aHJvdyBuZXcgbnQoIkludmFsaWQgZGF0YSB0eXBlLiBNdXN0IGJlIDEgZm9yIFF1YWRUcmVlUGFja2V0Iik7bGV0IGY9by5nZXRVaW50MzIoYSwhMCk7aWYoYSs9UXMsZiE9PTIpdGhyb3cgbmV3IG50KCJJbnZhbGlkIFF1YWRUcmVlUGFja2V0IHZlcnNpb24uIE9ubHkgdmVyc2lvbiAyIGlzIHN1cHBvcnRlZC4iKTtsZXQgZD1vLmdldEludDMyKGEsITApO2ErPUljO2xldCBjPW8uZ2V0SW50MzIoYSwhMCk7aWYoYSs9SWMsYyE9PTMyKXRocm93IG5ldyBudCgiSW52YWxpZCBpbnN0YW5jZSBzaXplLiIpO2xldCB1PW8uZ2V0SW50MzIoYSwhMCk7YSs9SWM7bGV0IGw9by5nZXRJbnQzMihhLCEwKTthKz1JYztsZXQgbT1vLmdldEludDMyKGEsITApO2lmKGErPUljLHUhPT1kKmMrYSl0aHJvdyBuZXcgbnQoIkludmFsaWQgZGF0YUJ1ZmZlck9mZnNldCIpO2lmKHUrbCttIT09ZSl0aHJvdyBuZXcgbnQoIkludmFsaWQgcGFja2V0IG9mZnNldHMiKTtsZXQgaD1bXTtmb3IobGV0IHc9MDt3PGQ7Kyt3KXtsZXQgRT1vLmdldFVpbnQ4KGEpOysrYSwrK2E7bGV0IFI9by5nZXRVaW50MTYoYSwhMCk7YSs9WnM7bGV0IFM9by5nZXRVaW50MTYoYSwhMCk7YSs9WnM7bGV0IEM9by5nZXRVaW50MTYoYSwhMCk7YSs9WnMsYSs9WnMsYSs9WnMsYSs9SWMsYSs9SWMsYSs9ODtsZXQgST1vLmdldFVpbnQ4KGErKyksTT1vLmdldFVpbnQ4KGErKyk7YSs9WnMsaC5wdXNoKG5ldyBmTyhFLFIsUyxDLEksTSkpfWxldCBiPVtdLHA9MDtmdW5jdGlvbiB5KHcsRSxSKXtsZXQgUz0hMTtpZihSPT09NCl7aWYoRS5oYXNTdWJ0cmVlKCkpcmV0dXJuO1M9ITB9Zm9yKGxldCBDPTA7Qzw0OysrQyl7bGV0IEk9dytDLnRvU3RyaW5nKCk7aWYoUyliW0ldPW51bGw7ZWxzZSBpZihSPDQpaWYoIUUuaGFzQ2hpbGQoQykpYltJXT1udWxsO2Vsc2V7aWYocD09PWQpe2NvbnNvbGUubG9nKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGluc3RhbmNlcyIpO3JldHVybn1sZXQgTT1oW3ArK107YltJXT1NLHkoSSxNLFIrMSl9fX1sZXQgVD0wLF89aFtwKytdO3JldHVybiB0PT09IiI/KytUOmJbdF09Xyx5KHQsXyxUKSxifWZ1bmN0aW9uIGQ2KG4sZSx0KXtsZXQgbz1uZXcgRGF0YVZpZXcobiksYT1mdW5jdGlvbihmKXtmb3IobGV0IGQ9MDtkPGY2OysrZCl7bGV0IGM9by5nZXRVaW50MzIoZiwhMCk7aWYoZis9UXMsZis9YyxmPmUpdGhyb3cgbmV3IG50KCJNYWxmb3JtZWQgdGVycmFpbiBwYWNrZXQgZm91bmQuIil9cmV0dXJuIGZ9LHI9MCxpPVtdO2Zvcig7aS5sZW5ndGg8czY7KXtsZXQgZj1yO3I9YShyKTtsZXQgZD1uLnNsaWNlKGYscik7dC5wdXNoKGQpLGkucHVzaChkKX1yZXR1cm4gaX1mdW5jdGlvbiBsNihuKXtsZXQgZT1uZXcgRGF0YVZpZXcobiksdD0wLG89ZS5nZXRVaW50MzIodCwhMCk7aWYodCs9UXMsbyE9PXBTJiZvIT09dTYpdGhyb3cgbmV3IG50KCJJbnZhbGlkIG1hZ2ljIik7bGV0IGE9ZS5nZXRVaW50MzIodCxvPT09cFMpO3QrPVFzO2xldCByPW5ldyBVaW50OEFycmF5KG4sdCksaT1tUyhyKTtpZihpLmxlbmd0aCE9PWEpdGhyb3cgbmV3IG50KCJTaXplIG9mIHBhY2tldCBkb2Vzbid0IG1hdGNoIGhlYWRlciIpO3JldHVybiBpfXZhciBacyxJYyxRcyxMaSxpNixzNixmNixwUyx1NixoNixZeT1YKCgpPT57aU8oKTtkTygpO3BhKCk7YlMoKTtrbigpO1pzPVVpbnQxNkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULEljPUludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsUXM9VWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsTGk9e01FVEFEQVRBOjAsVEVSUkFJTjoxLERCUk9PVDoyfTtMaS5mcm9tU3RyaW5nPWZ1bmN0aW9uKG4pe2lmKG49PT0iTWV0YWRhdGEiKXJldHVybiBMaS5NRVRBREFUQTtpZihuPT09IlRlcnJhaW4iKXJldHVybiBMaS5URVJSQUlOO2lmKG49PT0iRGJSb290IilyZXR1cm4gTGkuREJST09UfTtpNj0zMjMwMTtzNj01LGY2PTQ7cFM9MTk1MzAyOTgwNSx1Nj0yOTE3MDM0MTAwO2g2PW10KHI2KX0pO2Z1bmN0aW9uIG02KG4pe3JldHVybiBuPD0uMDQwNDU/biouMDc3Mzk5MzgwODA0OTUzNTc6TWF0aC5wb3coKG4rLjA1NSkqLjk0Nzg2NzI5ODU3ODE5OTEsMi40KX12YXIgTW0sZ1M9WCgoKT0+e01tPW02fSk7dmFyICR5PXt9OyRlKCR5LHtkZWZhdWx0OigpPT5MNn0pO2Z1bmN0aW9uIGI2KG4sZSx0LG8sYSxyKXtsZXQgaT10KigxLW4pK28qbixmPWEqKDEtbikrcipuO3JldHVybiBpKigxLWUpK2YqZX1mdW5jdGlvbiBObShuLGUsdCxvKXtsZXQgYT1uK2UqdDtyZXR1cm4gb1thXX1mdW5jdGlvbiBwNihuLGUsdCl7bGV0IG89dC5uYXRpdmVFeHRlbnQsYT0obi1vLndlc3QpLyhvLmVhc3Qtby53ZXN0KSoodC53aWR0aC0xKSxyPShlLW8uc291dGgpLyhvLm5vcnRoLW8uc291dGgpKih0LmhlaWdodC0xKSxpPU1hdGguZmxvb3IoYSksZj1NYXRoLmZsb29yKHIpO2EtPWksci09ZjtsZXQgZD1pPHQud2lkdGg/aSsxOmksYz1mPHQuaGVpZ2h0P2YrMTpmO2Y9dC5oZWlnaHQtMS1mLGM9dC5oZWlnaHQtMS1jO2xldCB1PU5tKGksZix0LndpZHRoLHQuYnVmZmVyKSxsPU5tKGQsZix0LndpZHRoLHQuYnVmZmVyKSxtPU5tKGksYyx0LndpZHRoLHQuYnVmZmVyKSxoPU5tKGQsYyx0LndpZHRoLHQuYnVmZmVyKSxiPWI2KGEscix1LGwsbSxoKTtyZXR1cm4gYj1iKnQuc2NhbGUrdC5vZmZzZXQsYn1mdW5jdGlvbiBfUyhuLGUsdCl7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2xldCBhPXRbb10ubmF0aXZlRXh0ZW50LHI9bmV3IHM7aWYodFtvXS5wcm9qZWN0aW9uVHlwZT09PSJXZWJNZXJjYXRvciIpe2xldCBpPXRbb10ucHJvamVjdGlvbi5fZWxsaXBzb2lkLl9yYWRpaTtyPW5ldyB5bihuZXcgSyhpLngsaS55LGkueikpLnByb2plY3QobmV3IGFlKG4sZSwwKSl9ZWxzZSByLng9bixyLnk9ZTtpZihyLng+YS53ZXN0JiZyLng8YS5lYXN0JiZyLnk+YS5zb3V0aCYmci55PGEubm9ydGgpcmV0dXJuIHA2KHIueCxyLnksdFtvXSl9cmV0dXJuIDB9ZnVuY3Rpb24gZzYobixlLHQsbyxhLHIsaSl7aWYoaSlyZXR1cm47bGV0IGY9X1MoYS5sb25naXR1ZGUsYS5sYXRpdHVkZSxyKTtmb3IobGV0IGQ9MDtkPG47KytkKXtsZXQgYz1fUyhhLmxvbmdpdHVkZStrLnRvUmFkaWFucyh0KmVbZCozXSksYS5sYXRpdHVkZStrLnRvUmFkaWFucyhvKmVbZCozKzFdKSxyKTtlW2QqMysyXSs9Yy1mfX1mdW5jdGlvbiBfNihuLGUsdCxvLGEscixpLGYsZCl7aWYobj09PTB8fCFnKGUpfHxlLmxlbmd0aD09PTApcmV0dXJuO2xldCBjPW5ldyBLKE1hdGguc3FydChpLngpLE1hdGguc3FydChpLnkpLE1hdGguc3FydChpLnopKTtmb3IobGV0IHU9MDt1PG47Kyt1KXtsZXQgbD11KjMsbT1sKzEsaD1sKzIsYj1uZXcgYWU7Yi5sb25naXR1ZGU9by5sb25naXR1ZGUray50b1JhZGlhbnMoZiplW2xdKSxiLmxhdGl0dWRlPW8ubGF0aXR1ZGUray50b1JhZGlhbnMoZCplW21dKSxiLmhlaWdodD1vLmhlaWdodCtlW2hdO2xldCBwPXt9O2MuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYixwKSxwLngtPWEueCxwLnktPWEueSxwLnotPWEuejtsZXQgeT17fTtpZihaLm11bHRpcGx5QnlWZWN0b3IocixwLHkpLGVbbF09eS54LGVbbV09eS55LGVbaF09eS56LGcodCkpe2xldCBUPW5ldyBzKHRbbF0sdFttXSx0W2hdKSxfPXt9O1oubXVsdGlwbHlCeVZlY3RvcihyLFQsXyksdFtsXT1fLngsdFttXT1fLnksdFtoXT1fLnp9fX1mdW5jdGlvbiB5NihuLGUsdCl7Zm9yKGxldCBvPTA7bzxuOysrbyl7bGV0IGE9dFtvKjRdLzY1NTM1LHI9dFtvKjQrMV0vNjU1MzUsaT0odFtvKjQrMl0tdFtvKjRdKS82NTUzNSxmPSh0W28qNCszXS10W28qNCsxXSkvNjU1MzU7ZVtvKjJdKj1pLGVbbyoyXSs9YSxlW28qMisxXSo9ZixlW28qMisxXSs9cn19ZnVuY3Rpb24gQTYobixlLHQsbyl7bGV0IGE9bmV3IFVpbnQzMkFycmF5KG4pLHI9ZyhlKT9mPT5lW2ZdOmY9PmYsaT0wO2lmKG8mJmcodCkpe2xldCBmPWQ9PnRbcihkKSo0KzNdPDI1NTtmb3IobGV0IGQ9MDtkPG47ZCs9MykhZihkKSYmIWYoZCsxKSYmIWYoZCsyKSYmKGFbaSsrXT1yKGQpLGFbaSsrXT1yKGQrMSksYVtpKytdPXIoZCsyKSk7aWYoaT4wKXtsZXQgZD1pO2ZvcihsZXQgYz0wO2M8bjtjKz0zKShmKGMpfHxmKGMrMSl8fGYoYysyKSkmJihhW2QrK109cihjKSxhW2QrK109cihjKzEpLGFbZCsrXT1yKGMrMikpfWVsc2UgZm9yKGxldCBkPTA7ZDxuOysrZClhW2RdPXIoZCl9ZWxzZXtpPW47Zm9yKGxldCBmPTA7ZjxuOysrZilhW2ZdPXIoZil9cmV0dXJue2luZGV4QXJyYXk6YSx0cmFuc3BhcmVudFZlcnRleE9mZnNldDppfX1mdW5jdGlvbiB3NihuLGUsdCl7bGV0IG89ZVt0XTtpZihnKG8pKXJldHVybiBvO2xldCBhPWVbdF09e3Bvc2l0aW9uczp7fSxpbmRpY2VzOnt9LGVkZ2VzOnt9fSxyPW5bdF0/P24uZGVmYXVsdDtyZXR1cm4gYS5oYXNPdXRsaW5lPWcocj8uZWRnZXMpLGF9ZnVuY3Rpb24gVDYobixlLHQsbyl7aWYoIWcoblt0XSkpe2xldCBhPXQqMyxyPWU7Zm9yKGxldCBpPTA7aTwzO2krKyl7bGV0IGY9b1thK2ldO2cocltmXSl8fChyW2ZdPXt9KSxyPXJbZl19ZyhyLmluZGV4KXx8KHIuaW5kZXg9dCksblt0XT1yLmluZGV4fX1mdW5jdGlvbiBFNihuLGUsdCxvLGEscil7bGV0IGksZjtvPGE/KGk9byxmPWEpOihpPWEsZj1vKTtsZXQgZD1uW2ldO2coZCl8fChkPW5baV09e30pO2xldCBjPWRbZl07ZyhjKXx8KGM9ZFtmXT17bm9ybWFsc0luZGV4OltdLG91dGxpbmVzOltdfSksYy5ub3JtYWxzSW5kZXgucHVzaChyKSwoYy5vdXRsaW5lcy5sZW5ndGg9PT0wfHxlIT09b3x8dCE9PWEpJiZjLm91dGxpbmVzLnB1c2goZSx0KX1mdW5jdGlvbiBSNihuLGUsdCxvKXtsZXQgYT1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrPTMpe2xldCBpPWcoZSk/ZVt0W3JdXToiZGVmYXVsdCIsZj13NihuLGEsaSk7aWYoIWYuaGFzT3V0bGluZSljb250aW51ZTtsZXQgZD1mLmluZGljZXMsYz1mLnBvc2l0aW9ucztmb3IobGV0IGw9MDtsPDM7bCsrKXtsZXQgbT10W3IrbF07VDYoZCxjLG0sbyl9bGV0IHU9Zi5lZGdlcztmb3IobGV0IGw9MDtsPDM7bCsrKXtsZXQgbT10W3IrbF0saD10W3IrKGwrMSklM10sYj1kW21dLHA9ZFtoXTtFNih1LG0saCxiLHAscil9fXJldHVybiBhfWZ1bmN0aW9uIHlTKG4sZSx0LG8pe2xldCBhPXRbZV0qMyxyPXRbZSsxXSozLGk9dFtlKzJdKjM7cy5mcm9tQXJyYXkobyxhLHhyKSxzLmZyb21BcnJheShvLHIsSW0pLHMuZnJvbUFycmF5KG8saSxQbSkscy5zdWJ0cmFjdChJbSx4cixJbSkscy5zdWJ0cmFjdChQbSx4cixQbSkscy5jcm9zcyhJbSxQbSx4cik7bGV0IGY9cy5tYWduaXR1ZGUoeHIpO2YhPT0wJiZzLmRpdmlkZUJ5U2NhbGFyKHhyLGYseHIpO2xldCBkPWUqMyxjPShlKzEpKjMsdT0oZSsyKSozO3MucGFjayh4cixuLGQpLHMucGFjayh4cixuLGMpLHMucGFjayh4cixuLHUpfWZ1bmN0aW9uIHg2KG4sZSx0KXtzLmZyb21BcnJheShuLGUsa20pLHMuZnJvbUFycmF5KG4sdCxKeSk7bGV0IG89cy5kb3Qoa20sSnkpLGE9cy5tYWduaXR1ZGUocy5jcm9zcyhrbSxKeSxrbSkpO3JldHVybiBNYXRoLmF0YW4yKGEsbyk8LjI1fWZ1bmN0aW9uIE82KG4sZSx0LG8sYSl7aWYoZS5ub3JtYWxzSW5kZXgubGVuZ3RoPjEpe2xldCByPW8ubGVuZ3RoPT09YS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxlLm5vcm1hbHNJbmRleC5sZW5ndGg7aSsrKXtsZXQgZj1lLm5vcm1hbHNJbmRleFtpXTtpZihnKGFbZiozXSl8fHlTKGEsZix0LG8pLGkhPT0wKWZvcihsZXQgZD0wO2Q8aTtkKyspe2xldCBjPWUubm9ybWFsc0luZGV4W2RdLHU9cj90W2ZdKjM6ZiozLGw9cj90W2NdKjM6YyozO2lmKHg2KGEsdSxsKSlyZXR1cm59fX1uLnB1c2goLi4uZS5vdXRsaW5lcyl9ZnVuY3Rpb24gUzYobixlLHQsbyxhKXtsZXQgcj1PYmplY3Qua2V5cyhlKTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7bGV0IGY9ZVtyW2ldXSxkPU9iamVjdC5rZXlzKGYpO2ZvcihsZXQgYz0wO2M8ZC5sZW5ndGg7YysrKXtsZXQgdT1mW2RbY11dO082KG4sdSx0LG8sYSl9fX1mdW5jdGlvbiBDNihuLGUsdCxvKXtsZXQgYT1bXSxyPU9iamVjdC5rZXlzKG4pO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtsZXQgZj1uW3JbaV1dLmVkZ2VzO1M2KGEsZixlLHQsbyl9cmV0dXJuIGF9ZnVuY3Rpb24gTTYobixlLHQsbyxhKXtpZighZyhuKXx8T2JqZWN0LmtleXMobikubGVuZ3RoPT09MClyZXR1cm47bGV0IHI9UjYobixlLHQsbyk7KCFnKGEpfHx0Lmxlbmd0aCozIT09YS5sZW5ndGgpJiYoYT1bXSk7bGV0IGk9QzYocix0LG8sYSk7cmV0dXJuIGkubGVuZ3RoPjA/bmV3IFVpbnQzMkFycmF5KGkpOnZvaWQgMH1mdW5jdGlvbiBONihuKXtsZXQgZT1uZXcgRmxvYXQzMkFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrPTQpZVt0XT1NbShKZS5ieXRlVG9GbG9hdChuW3RdKSksZVt0KzFdPU1tKEplLmJ5dGVUb0Zsb2F0KG5bdCsxXSkpLGVbdCsyXT1NbShKZS5ieXRlVG9GbG9hdChuW3QrMl0pKSxlW3QrM109SmUuYnl0ZVRvRmxvYXQoblt0KzNdKTtyZXR1cm4gZX1mdW5jdGlvbiBJNihuLGUsdCxvLGEscixpKXtsZXQgZj17bm9ybWFsczp2b2lkIDAscG9zaXRpb25zOnZvaWQgMCx1djBzOnZvaWQgMCxjb2xvcnM6dm9pZCAwLGZlYXR1cmVJbmRleDp2b2lkIDAsdmVydGV4Q291bnQ6dm9pZCAwfTtpZihuPT09MHx8IWcodCl8fHQubGVuZ3RoPT09MHx8ZyhvKSlyZXR1cm4gZjtpZihnKGUpKXtmLnZlcnRleENvdW50PWUubGVuZ3RoLGYucG9zaXRpb25zPW5ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgqMyksZi51djBzPWcoYSk/bmV3IEZsb2F0MzJBcnJheShlLmxlbmd0aCoyKTp2b2lkIDAsZi5jb2xvcnM9ZyhyKT9uZXcgVWludDhBcnJheShlLmxlbmd0aCo0KTp2b2lkIDAsZi5mZWF0dXJlSW5kZXg9ZyhpKT9uZXcgQXJyYXkoZS5sZW5ndGgpOnZvaWQgMDtmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKyl7bGV0IGM9ZVtkXTtmLnBvc2l0aW9uc1tkKjNdPXRbYyozXSxmLnBvc2l0aW9uc1tkKjMrMV09dFtjKjMrMV0sZi5wb3NpdGlvbnNbZCozKzJdPXRbYyozKzJdLGcoZi51djBzKSYmKGYudXYwc1tkKjJdPWFbYyoyXSxmLnV2MHNbZCoyKzFdPWFbYyoyKzFdKSxnKGYuY29sb3JzKSYmKGYuY29sb3JzW2QqNF09cltjKjRdLGYuY29sb3JzW2QqNCsxXT1yW2MqNCsxXSxmLmNvbG9yc1tkKjQrMl09cltjKjQrMl0sZi5jb2xvcnNbZCo0KzNdPXJbYyo0KzNdKSxnKGYuZmVhdHVyZUluZGV4KSYmKGYuZmVhdHVyZUluZGV4W2RdPWlbY10pfW49ZS5sZW5ndGgsdD1mLnBvc2l0aW9uc31lPW5ldyBBcnJheShuKTtmb3IobGV0IGQ9MDtkPG47ZCsrKWVbZF09ZDtmLm5vcm1hbHM9bmV3IEZsb2F0MzJBcnJheShlLmxlbmd0aCozKTtmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrPTMpeVMoZi5ub3JtYWxzLGQsZSx0KTtyZXR1cm4gZn1mdW5jdGlvbiBQNihuLGUsdCxvLGEscixpLGYpe2lmKG49PT0wfHwhZyh0KXx8dC5sZW5ndGg9PT0wKXJldHVybntidWZmZXJzOltdLGJ1ZmZlclZpZXdzOltdLGFjY2Vzc29yczpbXSxtZXNoZXM6W10sbm9kZXM6W10sbm9kZXNJblNjZW5lOltdfTtsZXQgZD1bXSxjPVtdLHU9W10sbD1bXSxtPVtdLGg9W10sYj17fSxwPVtdO2coZSkmJihuPWUubGVuZ3RoKTtsZXR7aW5kZXhBcnJheTp5LHRyYW5zcGFyZW50VmVydGV4T2Zmc2V0OlR9PUE2KG4sZSxyLGYuc3BsaXRHZW9tZXRyeUJ5Q29sb3JUcmFuc3BhcmVuY3kpLF89bmV3IEJsb2IoW3ldLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSksdz1VUkwuY3JlYXRlT2JqZWN0VVJMKF8pLEU9bixSPWYuZW5hYmxlRmVhdHVyZXMmJmcoaSk/bmV3IEZsb2F0MzJBcnJheShpLmxlbmd0aCk6dm9pZCAwLFM9MDtpZihnKFIpKWZvcihsZXQgZWU9MDtlZTxpLmxlbmd0aDsrK2VlKXtSW2VlXT1pW2VlXTtsZXQgRWU9aVtlZV0rMTtTPEVlJiYoUz1FZSl9bGV0IEMsST1NNihmLnN5bWJvbG9neURhdGEsaSx5LHQsbyk7aWYoZyhJKSl7bGV0IGVlPW5ldyBCbG9iKFtJXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO0M9VVJMLmNyZWF0ZU9iamVjdFVSTChlZSl9bGV0IE09dC5zdWJhcnJheSgwLEUqMyksUD1uZXcgQmxvYihbTV0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KSxGPVVSTC5jcmVhdGVPYmplY3RVUkwoUCksQT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksVT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKGxldCBlZT0wO2VlPE0ubGVuZ3RoLzM7ZWUrKylBPU1hdGgubWluKEEsTVtlZSozKzBdKSx4PU1hdGgubWF4KHgsTVtlZSozKzBdKSxOPU1hdGgubWluKE4sTVtlZSozKzFdKSx2PU1hdGgubWF4KHYsTVtlZSozKzFdKSxVPU1hdGgubWluKFUsTVtlZSozKzJdKSxMPU1hdGgubWF4KEwsTVtlZSozKzJdKTtsZXQgRD1vP28uc3ViYXJyYXkoMCxFKjMpOnZvaWQgMCxHO2lmKGcoRCkpe2xldCBlZT1uZXcgQmxvYihbRF0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtHPVVSTC5jcmVhdGVPYmplY3RVUkwoZWUpfWxldCBWPWE/YS5zdWJhcnJheSgwLEUqMik6dm9pZCAwLE87aWYoZyhWKSl7bGV0IGVlPW5ldyBCbG9iKFtWXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO089VVJMLmNyZWF0ZU9iamVjdFVSTChlZSl9bGV0IEo9ZyhyKT9ONihyLnN1YmFycmF5KDAsRSo0KSk6dm9pZCAwLHJlO2lmKGcoSikpe2xldCBlZT1uZXcgQmxvYihbSl0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtyZT1VUkwuY3JlYXRlT2JqZWN0VVJMKGVlKX1sZXQgc2U9ZyhSKT9SLnN1YmFycmF5KDAsRSk6dm9pZCAwLG9lO2lmKGcoc2UpKXtsZXQgZWU9bmV3IEJsb2IoW3NlXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO29lPVVSTC5jcmVhdGVPYmplY3RVUkwoZWUpfWxldCBjZT1nKFIpP25ldyBGbG9hdDMyQXJyYXkoUyk6dm9pZCAwLG1lO2lmKGcoY2UpKXtmb3IobGV0IEVlPTA7RWU8Y2UubGVuZ3RoOysrRWUpY2VbRWVdPUVlO2xldCBlZT1uZXcgQmxvYihbY2VdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSk7bWU9VVJMLmNyZWF0ZU9iamVjdFVSTChlZSl9bGV0IGRlPXt9LHllPXt9O2RlLlBPU0lUSU9OPXUubGVuZ3RoLGQucHVzaCh7dXJpOkYsYnl0ZUxlbmd0aDpNLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjpkLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOk0uYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSx1LnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50Ok0ubGVuZ3RoLzMsdHlwZToiVkVDMyIsbWluOltBLE4sVV0sbWF4Olt4LHYsTF19KSxnKEcpJiYoZGUuTk9STUFMPXUubGVuZ3RoLGQucHVzaCh7dXJpOkcsYnl0ZUxlbmd0aDpELmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjpkLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOkQuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSx1LnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OkQubGVuZ3RoLzMsdHlwZToiVkVDMyJ9KSksZyhPKSYmKGRlLlRFWENPT1JEXzA9dS5sZW5ndGgsZC5wdXNoKHt1cmk6TyxieXRlTGVuZ3RoOlYuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOmQubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6Vi5ieXRlTGVuZ3RoLHRhcmdldDozNDk2Mn0pLHUucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjYsY291bnQ6Vi5sZW5ndGgvMix0eXBlOiJWRUMyIn0pKSxnKHJlKSYmKGRlLkNPTE9SXzA9dS5sZW5ndGgsZC5wdXNoKHt1cmk6cmUsYnl0ZUxlbmd0aDpKLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjpkLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOkouYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSx1LnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OkoubGVuZ3RoLzQsdHlwZToiVkVDNCJ9KSksZyhvZSkmJihkZS5fRkVBVFVSRV9JRF8wPXUubGVuZ3RoLGQucHVzaCh7dXJpOm9lLGJ5dGVMZW5ndGg6c2UuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOmQubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6c2UuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KSx1LnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OnNlLmxlbmd0aCx0eXBlOiJTQ0FMQVIifSkseWUuRVhUX21lc2hfZmVhdHVyZXM9e2ZlYXR1cmVJZHM6W3thdHRyaWJ1dGU6MCxwcm9wZXJ0eVRhYmxlOjAsZmVhdHVyZUNvdW50OlN9XX0scC5wdXNoKCJFWFRfbWVzaF9mZWF0dXJlcyIpKSxnKG1lKSYmKGQucHVzaCh7dXJpOm1lLGJ5dGVMZW5ndGg6Y2UuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOmQubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6Y2UuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KSxiLkVYVF9zdHJ1Y3R1cmFsX21ldGFkYXRhPXtzY2hlbWE6e2lkOiJpM3MtbWV0YWRhdGEtc2NoZW1hLTAwMSIsbmFtZToiSTNTIG1ldGFkYXRhIHNjaGVtYSAwMDEiLGRlc2NyaXB0aW9uOiJUaGUgc2NoZW1hIGZvciBJM1MgbWV0YWRhdGEiLHZlcnNpb246IjEuMCIsY2xhc3Nlczp7ZmVhdHVyZTp7bmFtZToiZmVhdHVyZSIsZGVzY3JpcHRpb246IkZlYXR1cmUgbWV0YWRhdGEiLHByb3BlcnRpZXM6e2luZGV4OntkZXNjcmlwdGlvbjoiVGhlIGZlYXR1cmUgaW5kZXgiLHR5cGU6IlNDQUxBUiIsY29tcG9uZW50VHlwZToiRkxPQVQzMiIscmVxdWlyZWQ6ITB9fX19fSxwcm9wZXJ0eVRhYmxlczpbe25hbWU6ImZlYXR1cmUtaW5kaWNlcy1tYXBwaW5nIixjbGFzczoiZmVhdHVyZSIsY291bnQ6Uyxwcm9wZXJ0aWVzOntpbmRleDp7dmFsdWVzOmMubGVuZ3RoLTF9fX1dfSxwLnB1c2goIkVYVF9zdHJ1Y3R1cmFsX21ldGFkYXRhIikpLGcoQykmJihkLnB1c2goe3VyaTpDLGJ5dGVMZW5ndGg6SS5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6ZC5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpJLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYzfSksdS5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNSxjb3VudDpJLmxlbmd0aCx0eXBlOiJTQ0FMQVIifSkseWUuQ0VTSVVNX3ByaW1pdGl2ZV9vdXRsaW5lPXtpbmRpY2VzOnUubGVuZ3RoLTF9LHAucHVzaCgiQ0VTSVVNX3ByaW1pdGl2ZV9vdXRsaW5lIikpLGQucHVzaCh7dXJpOncsYnl0ZUxlbmd0aDp5LmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjpkLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOnkuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KTtsZXQgbGU9W107cmV0dXJuIFQ+MCYmKHUucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjUsY291bnQ6VCx0eXBlOiJTQ0FMQVIifSksbGUucHVzaCh7YXR0cmlidXRlczpkZSxpbmRpY2VzOnUubGVuZ3RoLTEsbWF0ZXJpYWw6bGUubGVuZ3RoLGV4dGVuc2lvbnM6eWV9KSksVDxuJiYodS5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDo0KlQsY29tcG9uZW50VHlwZTo1MTI1LGNvdW50Om4tVCx0eXBlOiJTQ0FMQVIifSksbGUucHVzaCh7YXR0cmlidXRlczpkZSxpbmRpY2VzOnUubGVuZ3RoLTEsbWF0ZXJpYWw6bGUubGVuZ3RoLGV4dGVuc2lvbnM6eWUsZXh0cmE6e2lzVHJhbnNwYXJlbnQ6ITB9fSkpLGwucHVzaCh7cHJpbWl0aXZlczpsZX0pLGgucHVzaCgwKSxtLnB1c2goe21lc2g6MH0pLHtidWZmZXJzOmQsYnVmZmVyVmlld3M6YyxhY2Nlc3NvcnM6dSxtZXNoZXM6bCxub2RlczptLG5vZGVzSW5TY2VuZTpoLHJvb3RFeHRlbnNpb25zOmIsZXh0ZW5zaW9uc1VzZWQ6cH19ZnVuY3Rpb24gazYobixlLHQsbyl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkobiwwLDUpO3JldHVybiBhWzBdPT09NjgmJmFbMV09PT04MiYmYVsyXT09PTY1JiZhWzNdPT09NjcmJmFbNF09PT03OT92NihuLHQpOkQ2KG4sZSx0LG8pfWZ1bmN0aW9uIHY2KG4pe2xldCBlPVF5LHQ9bmV3IGUuRGVjb2RlckJ1ZmZlcixvPW5ldyBVaW50OEFycmF5KG4pO3QuSW5pdChvLG8ubGVuZ3RoKTtsZXQgYT1uZXcgZS5EZWNvZGVyLHI9YS5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlKHQpLGk9bmV3IGUuTWV0YWRhdGFRdWVyaWVyLGYsZDtyPT09ZS5UUklBTkdVTEFSX01FU0gmJihmPW5ldyBlLk1lc2gsZD1hLkRlY29kZUJ1ZmZlclRvTWVzaCh0LGYpKTtsZXQgYz17dmVydGV4Q291bnQ6WzBdLGZlYXR1cmVDb3VudDowfTtpZihnKGQpJiZkLm9rKCkmJmYucHRyIT09MCl7bGV0IHU9Zi5udW1fZmFjZXMoKSxsPWYubnVtX2F0dHJpYnV0ZXMoKSxtPWYubnVtX3BvaW50cygpO2MuaW5kaWNlcz1uZXcgVWludDMyQXJyYXkodSozKTtsZXQgaD1jLmluZGljZXM7Yy52ZXJ0ZXhDb3VudFswXT1tLGMuc2NhbGVfeD0xLGMuc2NhbGVfeT0xO2xldCBiPW5ldyBlLkRyYWNvSW50MzJBcnJheSgzKTtmb3IobGV0IHA9MDtwPHU7KytwKWEuR2V0RmFjZUZyb21NZXNoKGYscCxiKSxoW3AqM109Yi5HZXRWYWx1ZSgwKSxoW3AqMysxXT1iLkdldFZhbHVlKDEpLGhbcCozKzJdPWIuR2V0VmFsdWUoMik7ZS5kZXN0cm95KGIpO2ZvcihsZXQgcD0wO3A8bDsrK3Ape2xldCB5PWEuR2V0QXR0cmlidXRlKGYscCksVD1GNihlLGEsZix5LG0pLF89eS5hdHRyaWJ1dGVfdHlwZSgpLHc9InVua25vd24iO189PT1lLlBPU0lUSU9OP3c9InBvc2l0aW9ucyI6Xz09PWUuTk9STUFMP3c9Im5vcm1hbHMiOl89PT1lLkNPTE9SP3c9ImNvbG9ycyI6Xz09PWUuVEVYX0NPT1JEJiYodz0idXYwcyIpO2xldCBFPWEuR2V0QXR0cmlidXRlTWV0YWRhdGEoZixwKTtpZihFLnB0ciE9PTApe2xldCBSPWkuTnVtRW50cmllcyhFKTtmb3IobGV0IFM9MDtTPFI7KytTKXtsZXQgQz1pLkdldEVudHJ5TmFtZShFLFMpO0M9PT0iaTNzLXNjYWxlX3giP2Muc2NhbGVfeD1pLkdldERvdWJsZUVudHJ5KEUsImkzcy1zY2FsZV94Iik6Qz09PSJpM3Mtc2NhbGVfeSI/Yy5zY2FsZV95PWkuR2V0RG91YmxlRW50cnkoRSwiaTNzLXNjYWxlX3kiKTpDPT09Imkzcy1hdHRyaWJ1dGUtdHlwZSImJih3PWkuR2V0U3RyaW5nRW50cnkoRSwiaTNzLWF0dHJpYnV0ZS10eXBlIikpfX1nKGNbd10pJiZjb25zb2xlLmxvZygiQXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIix3KSxjW3ddPVQsdz09PSJmZWF0dXJlLWluZGV4IiYmYy5mZWF0dXJlQ291bnQrK31lLmRlc3Ryb3koZil9cmV0dXJuIGUuZGVzdHJveShpKSxlLmRlc3Ryb3koYSksY31mdW5jdGlvbiBGNihuLGUsdCxvLGEpe2xldCByPW8ubnVtX2NvbXBvbmVudHMoKSphLGksZD1bZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7aT1uZXcgbi5EcmFjb0ludDhBcnJheShyKSxlLkdldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHModCxvLGkpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IHU9bmV3IEludDhBcnJheShyKTtmb3IobGV0IGw9MDtsPHI7KytsKXVbbF09aS5HZXRWYWx1ZShsKTtyZXR1cm4gdX0sZnVuY3Rpb24oKXtpPW5ldyBuLkRyYWNvSW50OEFycmF5KHIpLGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHModCxvLGkpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IHU9bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl1W2xdPWkuR2V0VmFsdWUobCk7cmV0dXJuIHV9LGZ1bmN0aW9uKCl7aT1uZXcgbi5EcmFjb0ludDE2QXJyYXkociksZS5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cyh0LG8saSl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgdT1uZXcgSW50MTZBcnJheShyKTtmb3IobGV0IGw9MDtsPHI7KytsKXVbbF09aS5HZXRWYWx1ZShsKTtyZXR1cm4gdX0sZnVuY3Rpb24oKXtpPW5ldyBuLkRyYWNvSW50MTZBcnJheShyKSxlLkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cyh0LG8saSl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgdT1uZXcgVWludDE2QXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl1W2xdPWkuR2V0VmFsdWUobCk7cmV0dXJuIHV9LGZ1bmN0aW9uKCl7aT1uZXcgbi5EcmFjb0ludDMyQXJyYXkociksZS5HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50cyh0LG8saSl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgdT1uZXcgSW50MzJBcnJheShyKTtmb3IobGV0IGw9MDtsPHI7KytsKXVbbF09aS5HZXRWYWx1ZShsKTtyZXR1cm4gdX0sZnVuY3Rpb24oKXtpPW5ldyBuLkRyYWNvSW50MzJBcnJheShyKSxlLkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cyh0LG8saSl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgdT1uZXcgVWludDMyQXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl1W2xdPWkuR2V0VmFsdWUobCk7cmV0dXJuIHV9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30sZnVuY3Rpb24oKXtpPW5ldyBuLkRyYWNvRmxvYXQzMkFycmF5KHIpLGUuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHModCxvLGkpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IHU9bmV3IEZsb2F0MzJBcnJheShyKTtmb3IobGV0IGw9MDtsPHI7KytsKXVbbF09aS5HZXRWYWx1ZShsKTtyZXR1cm4gdX0sZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7aT1uZXcgbi5EcmFjb1VJbnQ4QXJyYXkociksZS5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cyh0LG8saSl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgdT1uZXcgVWludDhBcnJheShyKTtmb3IobGV0IGw9MDtsPHI7KytsKXVbbF09aS5HZXRWYWx1ZShsKTtyZXR1cm4gdX1dW28uZGF0YV90eXBlKCldKCk7cmV0dXJuIGcoaSkmJm4uZGVzdHJveShpKSxkfWZ1bmN0aW9uIEQ2KG4sZSx0LG8pe2xldCBhPXt2ZXJ0ZXhDb3VudDowfSxyPW5ldyBEYXRhVmlldyhuKTt0cnl7bGV0IGk9MDtpZihhLnZlcnRleENvdW50PXIuZ2V0VWludDMyKGksMSksaSs9NCxhLmZlYXR1cmVDb3VudD1yLmdldFVpbnQzMihpLDEpLGkrPTQsZyh0KSlmb3IobGV0IGY9MDtmPHQuYXR0cmlidXRlcy5sZW5ndGg7ZisrKWcodm1bdC5hdHRyaWJ1dGVzW2ZdXSk/aT12bVt0LmF0dHJpYnV0ZXNbZl1dKGEsbixpKTpjb25zb2xlLmVycm9yKCJVbmtub3duIGRlY29kZXIgZm9yIix0LmF0dHJpYnV0ZXNbZl0pO2Vsc2V7bGV0IGY9ZS5vcmRlcmluZyxkPWUuZmVhdHVyZUF0dHJpYnV0ZU9yZGVyO2cobykmJmcoby5nZW9tZXRyeURhdGEpJiZnKG8uZ2VvbWV0cnlEYXRhWzBdKSYmZyhvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMpJiYoZj1PYmplY3Qua2V5cyhvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMudmVydGV4QXR0cmlidXRlcyksZD1PYmplY3Qua2V5cyhvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMuZmVhdHVyZUF0dHJpYnV0ZXMpKTtmb3IobGV0IGM9MDtjPGYubGVuZ3RoO2MrKyl7bGV0IHU9dm1bZltjXV07aT11KGEsbixpKX1mb3IobGV0IGM9MDtjPGQubGVuZ3RoO2MrKyl7bGV0IHU9dm1bZFtjXV07aT11KGEsbixpKX19fWNhdGNoKGkpe2NvbnNvbGUuZXJyb3IoaSl9cmV0dXJuIGEuc2NhbGVfeD0xLGEuc2NhbGVfeT0xLGF9ZnVuY3Rpb24gQjYobil7bGV0IGU9azYobi5iaW5hcnlEYXRhLG4uc2NoZW1hLG4uYnVmZmVySW5mbyxuLmZlYXR1cmVEYXRhKTtnKG4uZ2VvaWREYXRhTGlzdCkmJm4uZ2VvaWREYXRhTGlzdC5sZW5ndGg+MCYmZzYoZS52ZXJ0ZXhDb3VudCxlLnBvc2l0aW9ucyxlLnNjYWxlX3gsZS5zY2FsZV95LG4uY2FydG9ncmFwaGljQ2VudGVyLG4uZ2VvaWREYXRhTGlzdCwhMSksXzYoZS52ZXJ0ZXhDb3VudCxlLnBvc2l0aW9ucyxlLm5vcm1hbHMsbi5jYXJ0b2dyYXBoaWNDZW50ZXIsbi5jYXJ0ZXNpYW5DZW50ZXIsbi5wYXJlbnRSb3RhdGlvbixuLmVsbGlwc29pZFJhZGlpU3F1YXJlLGUuc2NhbGVfeCxlLnNjYWxlX3kpLGcoZS51djBzKSYmZyhlWyJ1di1yZWdpb24iXSkmJnk2KGUudmVydGV4Q291bnQsZS51djBzLGVbInV2LXJlZ2lvbiJdKTtsZXQgdDtpZihnKGVbImZlYXR1cmUtaW5kZXgiXSkpdD1lWyJmZWF0dXJlLWluZGV4Il07ZWxzZSBpZihnKGUuZmFjZVJhbmdlKSl7dD1uZXcgQXJyYXkoZS52ZXJ0ZXhDb3VudCk7Zm9yKGxldCBpPTA7aTxlLmZhY2VSYW5nZS5sZW5ndGgtMTtpKz0yKXtsZXQgZj1pLzIsZD1lLmZhY2VSYW5nZVtpXSxjPWUuZmFjZVJhbmdlW2krMV07Zm9yKGxldCB1PWQ7dTw9Yzt1KyspdFt1KjNdPWYsdFt1KjMrMV09Zix0W3UqMysyXT1mfX1pZihuLmNhbGN1bGF0ZU5vcm1hbHMpe2xldCBpPUk2KGUudmVydGV4Q291bnQsZS5pbmRpY2VzLGUucG9zaXRpb25zLGUubm9ybWFscyxlLnV2MHMsZS5jb2xvcnMsdCk7ZyhpLm5vcm1hbHMpJiYoZS5ub3JtYWxzPWkubm9ybWFscyxnKGkudmVydGV4Q291bnQpJiYoZS52ZXJ0ZXhDb3VudD1pLnZlcnRleENvdW50LGUuaW5kaWNlcz1pLmluZGljZXMsZS5wb3NpdGlvbnM9aS5wb3NpdGlvbnMsZS51djBzPWkudXYwcyxlLmNvbG9ycz1pLmNvbG9ycyx0PWkuZmVhdHVyZUluZGV4KSl9bGV0IG89UDYoZS52ZXJ0ZXhDb3VudCxlLmluZGljZXMsZS5wb3NpdGlvbnMsZS5ub3JtYWxzLGUudXYwcyxlLmNvbG9ycyx0LG4pLGE9e3Bvc2l0aW9uczplLnBvc2l0aW9ucyxpbmRpY2VzOmUuaW5kaWNlcyxmZWF0dXJlSW5kZXg6dCxzb3VyY2VVUkw6bi51cmwsY2FydGVzaWFuQ2VudGVyOm4uY2FydGVzaWFuQ2VudGVyLHBhcmVudFJvdGF0aW9uOm4ucGFyZW50Um90YXRpb259O3JldHVybiBvLl9jdXN0b21BdHRyaWJ1dGVzPWEse21lc2hEYXRhOm99fWFzeW5jIGZ1bmN0aW9uIFU2KG4sZSl7bGV0IHQ9bi53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gZyh0KSYmZyh0Lndhc21CaW5hcnlGaWxlKT9ReT1hd2FpdCgwLFp5LmRlZmF1bHQpKHQpOlF5PWF3YWl0KDAsWnkuZGVmYXVsdCkoKSwhMH1mdW5jdGlvbiBqNihuLGUpe2xldCB0PW4ud2ViQXNzZW1ibHlDb25maWc7cmV0dXJuIGcodCk/VTYobixlKTpCNihuLGUpfXZhciBaeSxReSx4cixJbSxQbSxrbSxKeSx2bSxMNixlMT1YKCgpPT57a24oKTtmZSgpO19pKCk7VmUoKTtndCgpO01lKCk7a3MoKTtJbigpO2plKCk7Wnk9aGEoX3koKSwxKTtnUygpO3hyPW5ldyBzLEltPW5ldyBzLFBtPW5ldyBzO2ttPW5ldyBzLEp5PW5ldyBzO3ZtPXtwb3NpdGlvbjpmdW5jdGlvbihuLGUsdCl7bGV0IG89bi52ZXJ0ZXhDb3VudCozO3JldHVybiBuLnBvc2l0aW9ucz1uZXcgRmxvYXQzMkFycmF5KGUsdCxvKSx0Kz1vKjQsdH0sbm9ybWFsOmZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1uLnZlcnRleENvdW50KjM7cmV0dXJuIG4ubm9ybWFscz1uZXcgRmxvYXQzMkFycmF5KGUsdCxvKSx0Kz1vKjQsdH0sdXYwOmZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1uLnZlcnRleENvdW50KjI7cmV0dXJuIG4udXYwcz1uZXcgRmxvYXQzMkFycmF5KGUsdCxvKSx0Kz1vKjQsdH0sY29sb3I6ZnVuY3Rpb24obixlLHQpe2xldCBvPW4udmVydGV4Q291bnQqNDtyZXR1cm4gbi5jb2xvcnM9bmV3IFVpbnQ4QXJyYXkoZSx0LG8pLHQrPW8sdH0sZmVhdHVyZUlkOmZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1uLmZlYXR1cmVDb3VudDtyZXR1cm4gdCs9byo4LHR9LGlkOmZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1uLmZlYXR1cmVDb3VudDtyZXR1cm4gdCs9byo4LHR9LGZhY2VSYW5nZTpmdW5jdGlvbihuLGUsdCl7bGV0IG89bi5mZWF0dXJlQ291bnQqMjtyZXR1cm4gbi5mYWNlUmFuZ2U9bmV3IFVpbnQzMkFycmF5KGUsdCxvKSx0Kz1vKjQsdH0sdXZSZWdpb246ZnVuY3Rpb24obixlLHQpe2xldCBvPW4udmVydGV4Q291bnQqNDtyZXR1cm4gblsidXYtcmVnaW9uIl09bmV3IFVpbnQxNkFycmF5KGUsdCxvKSx0Kz1vKjIsdH0scmVnaW9uOmZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1uLnZlcnRleENvdW50KjQ7cmV0dXJuIG5bInV2LXJlZ2lvbiJdPW5ldyBVaW50MTZBcnJheShlLHQsbyksdCs9byoyLHR9fTtMNj1tdChqNil9KTtmdW5jdGlvbiB6Nigpe3JldHVybihrZD09PW51bGx8fGtkLmJ5dGVMZW5ndGg9PT0wKSYmKGtkPW5ldyBVaW50OEFycmF5KEJuLm1lbW9yeS5idWZmZXIpKSxrZH1mdW5jdGlvbiBBUyhuLGUpe3JldHVybiBuPW4+Pj4wLFRTLmRlY29kZSh6NigpLnN1YmFycmF5KG4sbitlKSl9ZnVuY3Rpb24gRVMoKXtyZXR1cm4odmQ9PT1udWxsfHx2ZC5ieXRlTGVuZ3RoPT09MCkmJih2ZD1uZXcgVWludDMyQXJyYXkoQm4ubWVtb3J5LmJ1ZmZlcikpLHZkfWZ1bmN0aW9uIEc2KG4sZSl7cmV0dXJuIG49bj4+PjAsRVMoKS5zdWJhcnJheShuLzQsbi80K2UpfWZ1bmN0aW9uIFY2KG4sZSl7bGV0IHQ9ZShuLmxlbmd0aCo0LDQpPj4+MDtyZXR1cm4gRVMoKS5zZXQobix0LzQpLFJTPW4ubGVuZ3RoLHR9ZnVuY3Rpb24gdDEobil7bGV0IGU9Qm4uX193YmluZGdlbl9leHBvcnRfMC5nZXQobik7cmV0dXJuIEJuLl9fZXh0ZXJucmVmX3RhYmxlX2RlYWxsb2MobiksZX1mdW5jdGlvbiB4UyhuLGUsdCxvLGEpe2xldCByPUJuLmdlbmVyYXRlX3NwbGF0X3RleHR1cmUobixlLHQsbyxhKTtpZihyWzJdKXRocm93IHQxKHJbMV0pO3JldHVybiBuMS5fX3dyYXAoclswXSl9ZnVuY3Rpb24gT1MobixlLHQpe2xldCBvPUJuLnJhZGl4X3NvcnRfZ2F1c3NpYW5zX2luZGV4ZXMobixlLHQpO2lmKG9bMl0pdGhyb3cgdDEob1sxXSk7cmV0dXJuIHQxKG9bMF0pfWFzeW5jIGZ1bmN0aW9uIEg2KG4sZSl7aWYodHlwZW9mIFJlc3BvbnNlPT0iZnVuY3Rpb24iJiZuIGluc3RhbmNlb2YgUmVzcG9uc2Upe2lmKHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZz09ImZ1bmN0aW9uIil0cnl7cmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKG4sZSl9Y2F0Y2gobyl7aWYobi5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikhPSJhcHBsaWNhdGlvbi93YXNtIiljb25zb2xlLndhcm4oImBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ2AgZmFpbGVkIGJlY2F1c2UgeW91ciBzZXJ2ZXIgZG9lcyBub3Qgc2VydmUgV2FzbSB3aXRoIGBhcHBsaWNhdGlvbi93YXNtYCBNSU1FIHR5cGUuIEZhbGxpbmcgYmFjayB0byBgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVgIHdoaWNoIGlzIHNsb3dlci4gT3JpZ2luYWwgZXJyb3I6XG4iLG8pO2Vsc2UgdGhyb3cgb31sZXQgdD1hd2FpdCBuLmFycmF5QnVmZmVyKCk7cmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsZSl9ZWxzZXtsZXQgdD1hd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShuLGUpO3JldHVybiB0IGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2U/e2luc3RhbmNlOnQsbW9kdWxlOm59OnR9fWZ1bmN0aW9uIFNTKCl7bGV0IG49e307cmV0dXJuIG4ud2JnPXt9LG4ud2JnLl9fd2JnX2J1ZmZlcl82MDljYzNlZWU1MWVkMTU4PWZ1bmN0aW9uKGUpe3JldHVybiBlLmJ1ZmZlcn0sbi53YmcuX193YmdfbGVuZ3RoXzNiNGYwMjIxODhhZThkYjY9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RofSxuLndiZy5fX3diZ19sZW5ndGhfYTQ0NjE5M2RjMjJjMTJmOD1mdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGh9LG4ud2JnLl9fd2JnX25ld183ODBhYmVlNWMxNzM5ZmQ3PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KGUpfSxuLndiZy5fX3diZ19uZXdfYTEyMDAyYTdmOTFjNzViZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSl9LG4ud2JnLl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVWludDMyQXJyYXkoZSl9LG4ud2JnLl9fd2JnX25ld3dpdGhieXRlb2Zmc2V0YW5kbGVuZ3RoX2YxZGVhZDQ0ZDFmYzcyMTI9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBuZXcgVWludDMyQXJyYXkoZSx0Pj4+MCxvPj4+MCl9LG4ud2JnLl9fd2JnX3NldF8xMGJhZDliZWUwZTljNThiPWZ1bmN0aW9uKGUsdCxvKXtlLnNldCh0LG8+Pj4wKX0sbi53YmcuX193Ymdfc2V0XzY1NTk1YmRkODY4YjMwMDk9ZnVuY3Rpb24oZSx0LG8pe2Uuc2V0KHQsbz4+PjApfSxuLndiZy5fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlPWZ1bmN0aW9uKCl7bGV0IGU9Qm4uX193YmluZGdlbl9leHBvcnRfMCx0PWUuZ3Jvdyg0KTtlLnNldCgwLHZvaWQgMCksZS5zZXQodCswLHZvaWQgMCksZS5zZXQodCsxLG51bGwpLGUuc2V0KHQrMiwhMCksZS5zZXQodCszLCExKX0sbi53YmcuX193YmluZGdlbl9tZW1vcnk9ZnVuY3Rpb24oKXtyZXR1cm4gQm4ubWVtb3J5fSxuLndiZy5fX3diaW5kZ2VuX3N0cmluZ19uZXc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQVMoZSx0KX0sbi53YmcuX193YmluZGdlbl90aHJvdz1mdW5jdGlvbihlLHQpe3Rocm93IG5ldyBFcnJvcihBUyhlLHQpKX0sbn1mdW5jdGlvbiBDUyhuLGUpe3JldHVybiBCbj1uLmV4cG9ydHMsSzYuX193YmluZGdlbl93YXNtX21vZHVsZT1lLHZkPW51bGwsa2Q9bnVsbCxCbi5fX3diaW5kZ2VuX3N0YXJ0KCksQm59ZnVuY3Rpb24gRm0obil7aWYoQm4hPT12b2lkIDApcmV0dXJuIEJuO3R5cGVvZiBuPCJ1IiYmKE9iamVjdC5nZXRQcm90b3R5cGVPZihuKT09PU9iamVjdC5wcm90b3R5cGU/e21vZHVsZTpufT1uOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciBgaW5pdFN5bmMoKWA7IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSk7bGV0IGU9U1MoKTtuIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuTW9kdWxlfHwobj1uZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG4pKTtsZXQgdD1uZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobixlKTtyZXR1cm4gQ1ModCxuKX1hc3luYyBmdW5jdGlvbiBLNihuKXtpZihCbiE9PXZvaWQgMClyZXR1cm4gQm47dHlwZW9mIG48InUiJiYoT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pPT09T2JqZWN0LnByb3RvdHlwZT97bW9kdWxlX29yX3BhdGg6bn09bjpjb25zb2xlLndhcm4oInVzaW5nIGRlcHJlY2F0ZWQgcGFyYW1ldGVycyBmb3IgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uOyBwYXNzIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIikpLHR5cGVvZiBuPiJ1IiYmKG49bmV3IFVSTCgid2FzbV9zcGxhdHNfYmcud2FzbSIscTYudXJsKSk7bGV0IGU9U1MoKTsodHlwZW9mIG49PSJzdHJpbmcifHx0eXBlb2YgUmVxdWVzdD09ImZ1bmN0aW9uIiYmbiBpbnN0YW5jZW9mIFJlcXVlc3R8fHR5cGVvZiBVUkw9PSJmdW5jdGlvbiImJm4gaW5zdGFuY2VvZiBVUkwpJiYobj1mZXRjaChuKSk7bGV0e2luc3RhbmNlOnQsbW9kdWxlOm99PWF3YWl0IEg2KGF3YWl0IG4sZSk7cmV0dXJuIENTKHQsbyl9dmFyIHE2LEJuLFRTLGtkLHZkLFJTLHdTLG4xLG8xPVgoKCk9PntxNj17fSxUUz10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtpZ25vcmVCT006ITAsZmF0YWw6ITB9KTp7ZGVjb2RlOigpPT57dGhyb3cgRXJyb3IoIlRleHREZWNvZGVyIG5vdCBhdmFpbGFibGUiKX19O3R5cGVvZiBUZXh0RGVjb2RlcjwidSImJlRTLmRlY29kZSgpO2tkPW51bGw7dmQ9bnVsbDtSUz0wO3dTPXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KG49PkJuLl9fd2JnX3RleHR1cmVkYXRhX2ZyZWUobj4+PjAsMSkpLG4xPWNsYXNzIG57c3RhdGljIF9fd3JhcChlKXtlPWU+Pj4wO2xldCB0PU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO3JldHVybiB0Ll9fd2JnX3B0cj1lLHdTLnJlZ2lzdGVyKHQsdC5fX3diZ19wdHIsdCksdH1fX2Rlc3Ryb3lfaW50b19yYXcoKXtsZXQgZT10aGlzLl9fd2JnX3B0cjtyZXR1cm4gdGhpcy5fX3diZ19wdHI9MCx3Uy51bnJlZ2lzdGVyKHRoaXMpLGV9ZnJlZSgpe2xldCBlPXRoaXMuX19kZXN0cm95X2ludG9fcmF3KCk7Qm4uX193YmdfdGV4dHVyZWRhdGFfZnJlZShlLDApfWdldCBkYXRhKCl7bGV0IGU9Qm4udGV4dHVyZWRhdGFfZGF0YSh0aGlzLl9fd2JnX3B0cik7dmFyIHQ9RzYoZVswXSxlWzFdKS5zbGljZSgpO3JldHVybiBCbi5fX3diaW5kZ2VuX2ZyZWUoZVswXSxlWzFdKjQsNCksdH1nZXQgd2lkdGgoKXtyZXR1cm4gQm4udGV4dHVyZWRhdGFfd2lkdGgodGhpcy5fX3diZ19wdHIpPj4+MH1nZXQgaGVpZ2h0KCl7cmV0dXJuIEJuLnRleHR1cmVkYXRhX2hlaWdodCh0aGlzLl9fd2JnX3B0cik+Pj4wfXN0YXRpYyBuZXcoZSx0LG8pe2xldCBhPVY2KGUsQm4uX193YmluZGdlbl9tYWxsb2MpLHI9UlMsaT1Cbi50ZXh0dXJlZGF0YV9uZXcoYSxyLHQsbyk7cmV0dXJuIG4uX193cmFwKGkpfX19KTt2YXIgYTE9e307JGUoYTEse2RlZmF1bHQ6KCk9Plk2fSk7YXN5bmMgZnVuY3Rpb24gVzYobixlKXtsZXQgdD1uLndlYkFzc2VtYmx5Q29uZmlnO2lmKGcodCkmJmcodC53YXNtQmluYXJ5KSlyZXR1cm4gRm0oe21vZHVsZTp0Lndhc21CaW5hcnl9KSwhMH1mdW5jdGlvbiBYNihuLGUpe2xldCB0PW4ud2ViQXNzZW1ibHlDb25maWc7aWYoZyh0KSlyZXR1cm4gVzYobixlKTtsZXR7cHJpbWl0aXZlOm8sc29ydFR5cGU6YX09bjtpZihhPT09IkluZGV4IilyZXR1cm4gT1Moby5wb3NpdGlvbnMsby5tb2RlbFZpZXcsby5jb3VudCl9dmFyIFk2LHIxPVgoKCk9PntrbigpO2ZlKCk7bzEoKTtZNj1tdChYNil9KTt2YXIgaTE9e307JGUoaTEse2RlZmF1bHQ6KCk9PlE2fSk7YXN5bmMgZnVuY3Rpb24gSjYobixlKXtsZXQgdD1uLndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBnKHQpJiZnKHQud2FzbUJpbmFyeSk/KEZtKHttb2R1bGU6dC53YXNtQmluYXJ5fSksITApOiExfWFzeW5jIGZ1bmN0aW9uIFo2KG4sZSl7bGV0IHQ9bi53ZWJBc3NlbWJseUNvbmZpZztpZihnKHQpKXJldHVybiBKNihuLGUpO2xldHthdHRyaWJ1dGVzOm8sY291bnQ6YX09bixyPXhTKG8ucG9zaXRpb25zLG8uc2NhbGVzLG8ucm90YXRpb25zLG8uY29sb3JzLGEpO3JldHVybntkYXRhOnIuZGF0YSx3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH19dmFyIFE2LGMxPVgoKCk9PntrbigpO2ZlKCk7bzEoKTtRNj1tdChaNil9KTt2YXIgczE9e307JGUoczEse2RlZmF1bHQ6KCk9PmF6fSk7ZnVuY3Rpb24gbnoobixlKXtsZXQgdD1uZXcgRmxvYXQ2NEFycmF5KG4uYWFiYnMpLG89QXJyYXkuZnJvbSh7bGVuZ3RoOjR9LCh1LGwpPT57bGV0IG09cy51bnBhY2sodCxsKjYsJDYpLGg9cy51bnBhY2sodCxsKjYrMyxleik7cmV0dXJuIHJvLmZyb21Db3JuZXJzKG0saCxuZXcgcm8pfSksYT1uZXcgRmxvYXQ2NEFycmF5KG4uaW52ZXJzZVRyYW5zZm9ybSkscj1RLnVucGFjayhhLDAsbmV3IFEpLGk9bmV3IFVpbnQzMkFycmF5KG4udHJpYW5nbGVJbmRpY2VzKSxmPW5ldyBGbG9hdDY0QXJyYXkobi50cmlhbmdsZVBvc2l0aW9ucyksZD1BcnJheS5mcm9tKHtsZW5ndGg6NH0sKCk9PltdKTtmb3IobGV0IHU9MDt1PGkubGVuZ3RoO3UrKyl7cy51bnBhY2soZix1KjksRG1bMF0pLHMudW5wYWNrKGYsdSo5KzMsRG1bMV0pLHMudW5wYWNrKGYsdSo5KzYsRG1bMl0pO2xldCBsPW96KHIsRG0pO2ZvcihsZXQgbT0wO208NDttKyspb1ttXS5pbnRlcnNlY3RBeGlzQWxpZ25lZEJvdW5kaW5nQm94KGwpJiZkW21dLnB1c2goaVt1XSl9cmV0dXJue2ludGVyc2VjdGluZ1RyaWFuZ2xlc0FycmF5czpkLm1hcCh1PT57bGV0IGw9bmV3IFVpbnQzMkFycmF5KHUpO3JldHVybiBlLnB1c2gobC5idWZmZXIpLGwuYnVmZmVyfSl9fWZ1bmN0aW9uIG96KG4sZSl7US5tdWx0aXBseUJ5UG9pbnQobixlWzBdLGVbMF0pLFEubXVsdGlwbHlCeVBvaW50KG4sZVsxXSxlWzFdKSxRLm11bHRpcGx5QnlQb2ludChuLGVbMl0sZVsyXSk7bGV0IHQ9cm8uZnJvbVBvaW50cyhlLHR6KTtyZXR1cm4gcy5jbGFtcCh0Lm1pbmltdW0sTlMsTVMsdC5taW5pbXVtKSxzLmNsYW1wKHQubWF4aW11bSxOUyxNUyx0Lm1heGltdW0pLHR9dmFyICQ2LGV6LERtLHR6LE1TLE5TLGF6LGYxPVgoKCk9PntrbigpO3VuKCk7TWUoKTt5aSgpOyQ2PW5ldyBzLGV6PW5ldyBzLERtPVtuZXcgcyxuZXcgcyxuZXcgc10sdHo9bmV3IHJvLE1TPW5ldyBzKC41LC41LC41KSxOUz1uZXcgcygtLjUsLS41LC0uNSk7YXo9bXQobnopfSk7dmFyIHB0LGlvLGQxPVgoKCk9PntvYygpO3B0PXtVTlNJR05FRF9CWVRFOk5lLlVOU0lHTkVEX0JZVEUsVU5TSUdORURfU0hPUlQ6TmUuVU5TSUdORURfU0hPUlQsVU5TSUdORURfSU5UOk5lLlVOU0lHTkVEX0lOVCxGTE9BVDpOZS5GTE9BVCxIQUxGX0ZMT0FUOk5lLkhBTEZfRkxPQVRfT0VTLFVOU0lHTkVEX0lOVF8yNF84Ok5lLlVOU0lHTkVEX0lOVF8yNF84LFVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6TmUuVU5TSUdORURfU0hPUlRfNF80XzRfNCxVTlNJR05FRF9TSE9SVF81XzVfNV8xOk5lLlVOU0lHTkVEX1NIT1JUXzVfNV81XzEsVU5TSUdORURfU0hPUlRfNV82XzU6TmUuVU5TSUdORURfU0hPUlRfNV82XzV9O3B0LnRvV2ViR0xDb25zdGFudD1mdW5jdGlvbihuLGUpe3N3aXRjaChuKXtjYXNlIHB0LlVOU0lHTkVEX0JZVEU6cmV0dXJuIE5lLlVOU0lHTkVEX0JZVEU7Y2FzZSBwdC5VTlNJR05FRF9TSE9SVDpyZXR1cm4gTmUuVU5TSUdORURfU0hPUlQ7Y2FzZSBwdC5VTlNJR05FRF9JTlQ6cmV0dXJuIE5lLlVOU0lHTkVEX0lOVDtjYXNlIHB0LkZMT0FUOnJldHVybiBOZS5GTE9BVDtjYXNlIHB0LkhBTEZfRkxPQVQ6cmV0dXJuIGUud2ViZ2wyP05lLkhBTEZfRkxPQVQ6TmUuSEFMRl9GTE9BVF9PRVM7Y2FzZSBwdC5VTlNJR05FRF9JTlRfMjRfODpyZXR1cm4gTmUuVU5TSUdORURfSU5UXzI0Xzg7Y2FzZSBwdC5VTlNJR05FRF9TSE9SVF80XzRfNF80OnJldHVybiBOZS5VTlNJR05FRF9TSE9SVF80XzRfNF80O2Nhc2UgcHQuVU5TSUdORURfU0hPUlRfNV81XzVfMTpyZXR1cm4gTmUuVU5TSUdORURfU0hPUlRfNV81XzVfMTtjYXNlIHB0LlVOU0lHTkVEX1NIT1JUXzVfNl81OnJldHVybiBwdC5VTlNJR05FRF9TSE9SVF81XzZfNX19O3B0LmlzUGFja2VkPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09cHQuVU5TSUdORURfSU5UXzI0Xzh8fG49PT1wdC5VTlNJR05FRF9TSE9SVF80XzRfNF80fHxuPT09cHQuVU5TSUdORURfU0hPUlRfNV81XzVfMXx8bj09PXB0LlVOU0lHTkVEX1NIT1JUXzVfNl81fTtwdC5zaXplSW5CeXRlcz1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSBwdC5VTlNJR05FRF9CWVRFOnJldHVybiAxO2Nhc2UgcHQuVU5TSUdORURfU0hPUlQ6Y2FzZSBwdC5VTlNJR05FRF9TSE9SVF80XzRfNF80OmNhc2UgcHQuVU5TSUdORURfU0hPUlRfNV81XzVfMTpjYXNlIHB0LlVOU0lHTkVEX1NIT1JUXzVfNl81OmNhc2UgcHQuSEFMRl9GTE9BVDpyZXR1cm4gMjtjYXNlIHB0LlVOU0lHTkVEX0lOVDpjYXNlIHB0LkZMT0FUOmNhc2UgcHQuVU5TSUdORURfSU5UXzI0Xzg6cmV0dXJuIDR9fTtwdC52YWxpZGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbj09PXB0LlVOU0lHTkVEX0JZVEV8fG49PT1wdC5VTlNJR05FRF9TSE9SVHx8bj09PXB0LlVOU0lHTkVEX0lOVHx8bj09PXB0LkZMT0FUfHxuPT09cHQuSEFMRl9GTE9BVHx8bj09PXB0LlVOU0lHTkVEX0lOVF8yNF84fHxuPT09cHQuVU5TSUdORURfU0hPUlRfNF80XzRfNHx8bj09PXB0LlVOU0lHTkVEX1NIT1JUXzVfNV81XzF8fG49PT1wdC5VTlNJR05FRF9TSE9SVF81XzZfNX07cHQuZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yPWZ1bmN0aW9uKG4pe2xldCBlPXB0LnNpemVJbkJ5dGVzKG4pO3JldHVybiBlPT09VWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVD9VaW50OEFycmF5OmU9PT1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVD9VaW50MTZBcnJheTplPT09RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UJiZuPT09cHQuRkxPQVQ/RmxvYXQzMkFycmF5OlVpbnQzMkFycmF5fTtPYmplY3QuZnJlZXplKHB0KTtpbz1wdH0pO3ZhciBiZSxWbixJUz1YKCgpPT57ZDEoKTtvYygpO2JlPXtERVBUSF9DT01QT05FTlQ6TmUuREVQVEhfQ09NUE9ORU5ULERFUFRIX1NURU5DSUw6TmUuREVQVEhfU1RFTkNJTCxBTFBIQTpOZS5BTFBIQSxSRUQ6TmUuUkVELFJHOk5lLlJHLFJHQjpOZS5SR0IsUkdCQTpOZS5SR0JBLFJFRF9JTlRFR0VSOk5lLlJFRF9JTlRFR0VSLFJHX0lOVEVHRVI6TmUuUkdfSU5URUdFUixSR0JfSU5URUdFUjpOZS5SR0JfSU5URUdFUixSR0JBX0lOVEVHRVI6TmUuUkdCQV9JTlRFR0VSLExVTUlOQU5DRTpOZS5MVU1JTkFOQ0UsTFVNSU5BTkNFX0FMUEhBOk5lLkxVTUlOQU5DRV9BTFBIQSxSR0JfRFhUMTpOZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULFJHQkFfRFhUMTpOZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCxSR0JBX0RYVDM6TmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQsUkdCQV9EWFQ1Ok5lLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhULFJHQl9QVlJUQ180QlBQVjE6TmUuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyxSR0JfUFZSVENfMkJQUFYxOk5lLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUcsUkdCQV9QVlJUQ180QlBQVjE6TmUuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUcsUkdCQV9QVlJUQ18yQlBQVjE6TmUuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcsUkdCQV9BU1RDOk5lLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9XRUJHTCxSR0JfRVRDMTpOZS5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMLFJHQjhfRVRDMjpOZS5DT01QUkVTU0VEX1JHQjhfRVRDMixSR0JBOF9FVEMyX0VBQzpOZS5DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDLFJHQkFfQkM3Ok5lLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNfTtiZS5jb21wb25lbnRzTGVuZ3RoPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIGJlLlJHQjpjYXNlIGJlLlJHQl9JTlRFR0VSOnJldHVybiAzO2Nhc2UgYmUuUkdCQTpjYXNlIGJlLlJHQkFfSU5URUdFUjpyZXR1cm4gNDtjYXNlIGJlLkxVTUlOQU5DRV9BTFBIQTpjYXNlIGJlLlJHOmNhc2UgYmUuUkdfSU5URUdFUjpyZXR1cm4gMjtjYXNlIGJlLkFMUEhBOmNhc2UgYmUuUkVEOmNhc2UgYmUuUkVEX0lOVEVHRVI6Y2FzZSBiZS5MVU1JTkFOQ0U6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gMX19O2JlLnZhbGlkYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09YmUuREVQVEhfQ09NUE9ORU5UfHxuPT09YmUuREVQVEhfU1RFTkNJTHx8bj09PWJlLkFMUEhBfHxuPT09YmUuUkVEfHxuPT09YmUuUkd8fG49PT1iZS5SR0J8fG49PT1iZS5SR0JBfHxuPT09YmUuUkVEX0lOVEVHRVJ8fG49PT1iZS5SR19JTlRFR0VSfHxuPT09YmUuUkdCX0lOVEVHRVJ8fG49PT1iZS5SR0JBX0lOVEVHRVJ8fG49PT1iZS5MVU1JTkFOQ0V8fG49PT1iZS5MVU1JTkFOQ0VfQUxQSEF8fG49PT1iZS5SR0JfRFhUMXx8bj09PWJlLlJHQkFfRFhUMXx8bj09PWJlLlJHQkFfRFhUM3x8bj09PWJlLlJHQkFfRFhUNXx8bj09PWJlLlJHQl9QVlJUQ180QlBQVjF8fG49PT1iZS5SR0JfUFZSVENfMkJQUFYxfHxuPT09YmUuUkdCQV9QVlJUQ180QlBQVjF8fG49PT1iZS5SR0JBX1BWUlRDXzJCUFBWMXx8bj09PWJlLlJHQkFfQVNUQ3x8bj09PWJlLlJHQl9FVEMxfHxuPT09YmUuUkdCOF9FVEMyfHxuPT09YmUuUkdCQThfRVRDMl9FQUN8fG49PT1iZS5SR0JBX0JDN307YmUuaXNDb2xvckZvcm1hdD1mdW5jdGlvbihuKXtyZXR1cm4gbj09PWJlLlJFRHx8bj09PWJlLkFMUEhBfHxuPT09YmUuUkdCfHxuPT09YmUuUkdCQXx8bj09PWJlLkxVTUlOQU5DRXx8bj09PWJlLkxVTUlOQU5DRV9BTFBIQX07YmUuaXNEZXB0aEZvcm1hdD1mdW5jdGlvbihuKXtyZXR1cm4gbj09PWJlLkRFUFRIX0NPTVBPTkVOVHx8bj09PWJlLkRFUFRIX1NURU5DSUx9O2JlLmlzQ29tcHJlc3NlZEZvcm1hdD1mdW5jdGlvbihuKXtyZXR1cm4gbj09PWJlLlJHQl9EWFQxfHxuPT09YmUuUkdCQV9EWFQxfHxuPT09YmUuUkdCQV9EWFQzfHxuPT09YmUuUkdCQV9EWFQ1fHxuPT09YmUuUkdCX1BWUlRDXzRCUFBWMXx8bj09PWJlLlJHQl9QVlJUQ18yQlBQVjF8fG49PT1iZS5SR0JBX1BWUlRDXzRCUFBWMXx8bj09PWJlLlJHQkFfUFZSVENfMkJQUFYxfHxuPT09YmUuUkdCQV9BU1RDfHxuPT09YmUuUkdCX0VUQzF8fG49PT1iZS5SR0I4X0VUQzJ8fG49PT1iZS5SR0JBOF9FVEMyX0VBQ3x8bj09PWJlLlJHQkFfQkM3fTtiZS5pc0RYVEZvcm1hdD1mdW5jdGlvbihuKXtyZXR1cm4gbj09PWJlLlJHQl9EWFQxfHxuPT09YmUuUkdCQV9EWFQxfHxuPT09YmUuUkdCQV9EWFQzfHxuPT09YmUuUkdCQV9EWFQ1fTtiZS5pc1BWUlRDRm9ybWF0PWZ1bmN0aW9uKG4pe3JldHVybiBuPT09YmUuUkdCX1BWUlRDXzRCUFBWMXx8bj09PWJlLlJHQl9QVlJUQ18yQlBQVjF8fG49PT1iZS5SR0JBX1BWUlRDXzRCUFBWMXx8bj09PWJlLlJHQkFfUFZSVENfMkJQUFYxfTtiZS5pc0FTVENGb3JtYXQ9ZnVuY3Rpb24obil7cmV0dXJuIG49PT1iZS5SR0JBX0FTVEN9O2JlLmlzRVRDMUZvcm1hdD1mdW5jdGlvbihuKXtyZXR1cm4gbj09PWJlLlJHQl9FVEMxfTtiZS5pc0VUQzJGb3JtYXQ9ZnVuY3Rpb24obil7cmV0dXJuIG49PT1iZS5SR0I4X0VUQzJ8fG49PT1iZS5SR0JBOF9FVEMyX0VBQ307YmUuaXNCQzdGb3JtYXQ9ZnVuY3Rpb24obil7cmV0dXJuIG49PT1iZS5SR0JBX0JDN307YmUuY29tcHJlc3NlZFRleHR1cmVTaXplSW5CeXRlcz1mdW5jdGlvbihuLGUsdCl7c3dpdGNoKG4pe2Nhc2UgYmUuUkdCX0RYVDE6Y2FzZSBiZS5SR0JBX0RYVDE6Y2FzZSBiZS5SR0JfRVRDMTpjYXNlIGJlLlJHQjhfRVRDMjpyZXR1cm4gTWF0aC5mbG9vcigoZSszKS80KSpNYXRoLmZsb29yKCh0KzMpLzQpKjg7Y2FzZSBiZS5SR0JBX0RYVDM6Y2FzZSBiZS5SR0JBX0RYVDU6Y2FzZSBiZS5SR0JBX0FTVEM6Y2FzZSBiZS5SR0JBOF9FVEMyX0VBQzpyZXR1cm4gTWF0aC5mbG9vcigoZSszKS80KSpNYXRoLmZsb29yKCh0KzMpLzQpKjE2O2Nhc2UgYmUuUkdCX1BWUlRDXzRCUFBWMTpjYXNlIGJlLlJHQkFfUFZSVENfNEJQUFYxOnJldHVybiBNYXRoLmZsb29yKChNYXRoLm1heChlLDgpKk1hdGgubWF4KHQsOCkqNCs3KS84KTtjYXNlIGJlLlJHQl9QVlJUQ18yQlBQVjE6Y2FzZSBiZS5SR0JBX1BWUlRDXzJCUFBWMTpyZXR1cm4gTWF0aC5mbG9vcigoTWF0aC5tYXgoZSwxNikqTWF0aC5tYXgodCw4KSoyKzcpLzgpO2Nhc2UgYmUuUkdCQV9CQzc6cmV0dXJuIE1hdGguY2VpbChlLzQpKk1hdGguY2VpbCh0LzQpKjE2O2RlZmF1bHQ6cmV0dXJuIDB9fTtiZS50ZXh0dXJlU2l6ZUluQnl0ZXM9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9YmUuY29tcG9uZW50c0xlbmd0aChuKTtyZXR1cm4gaW8uaXNQYWNrZWQoZSkmJihhPTEpLGEqaW8uc2l6ZUluQnl0ZXMoZSkqdCpvfTtiZS50ZXh0dXJlM0RTaXplSW5CeXRlcz1mdW5jdGlvbihuLGUsdCxvLGEpe2xldCByPWJlLmNvbXBvbmVudHNMZW5ndGgobik7cmV0dXJuIGlvLmlzUGFja2VkKGUpJiYocj0xKSxyKmlvLnNpemVJbkJ5dGVzKGUpKnQqbyphfTtiZS5hbGlnbm1lbnRJbkJ5dGVzPWZ1bmN0aW9uKG4sZSx0KXtsZXQgbz1iZS50ZXh0dXJlU2l6ZUluQnl0ZXMobixlLHQsMSklNDtyZXR1cm4gbz09PTA/NDpvPT09Mj8yOjF9O2JlLmNyZWF0ZVR5cGVkQXJyYXk9ZnVuY3Rpb24obixlLHQsbyl7bGV0IGE9aW8uZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yKGUpLHI9YmUuY29tcG9uZW50c0xlbmd0aChuKSp0Km87cmV0dXJuIG5ldyBhKHIpfTtiZS5mbGlwWT1mdW5jdGlvbihuLGUsdCxvLGEpe2lmKGE9PT0xKXJldHVybiBuO2xldCByPWJlLmNyZWF0ZVR5cGVkQXJyYXkoZSx0LG8sYSksaT1iZS5jb21wb25lbnRzTGVuZ3RoKGUpLGY9byppO2ZvcihsZXQgZD0wO2Q8YTsrK2Qpe2xldCBjPWQqbyppLHU9KGEtZC0xKSpvKmk7Zm9yKGxldCBsPTA7bDxmOysrbClyW3UrbF09bltjK2xdfXJldHVybiByfTtiZS50b0ludGVybmFsRm9ybWF0PWZ1bmN0aW9uKG4sZSx0KXtpZighdC53ZWJnbDIpcmV0dXJuIG47aWYobj09PWJlLkRFUFRIX1NURU5DSUwpcmV0dXJuIE5lLkRFUFRIMjRfU1RFTkNJTDg7aWYobj09PWJlLkRFUFRIX0NPTVBPTkVOVCl7aWYoZT09PWlvLlVOU0lHTkVEX1NIT1JUKXJldHVybiBOZS5ERVBUSF9DT01QT05FTlQxNjtpZihlPT09aW8uVU5TSUdORURfSU5UKXJldHVybiBOZS5ERVBUSF9DT01QT05FTlQyNH1pZihlPT09aW8uRkxPQVQpc3dpdGNoKG4pe2Nhc2UgYmUuUkdCQTpyZXR1cm4gTmUuUkdCQTMyRjtjYXNlIGJlLlJHQjpyZXR1cm4gTmUuUkdCMzJGO2Nhc2UgYmUuUkc6cmV0dXJuIE5lLlJHMzJGO2Nhc2UgYmUuUkVEOnJldHVybiBOZS5SMzJGfWlmKGU9PT1pby5IQUxGX0ZMT0FUKXN3aXRjaChuKXtjYXNlIGJlLlJHQkE6cmV0dXJuIE5lLlJHQkExNkY7Y2FzZSBiZS5SR0I6cmV0dXJuIE5lLlJHQjE2RjtjYXNlIGJlLlJHOnJldHVybiBOZS5SRzE2RjtjYXNlIGJlLlJFRDpyZXR1cm4gTmUuUjE2Rn1pZihlPT09aW8uVU5TSUdORURfQllURSlzd2l0Y2gobil7Y2FzZSBiZS5SR0JBOnJldHVybiBOZS5SR0JBODtjYXNlIGJlLlJHQjpyZXR1cm4gTmUuUkdCODtjYXNlIGJlLlJHOnJldHVybiBOZS5SRzg7Y2FzZSBiZS5SRUQ6cmV0dXJuIE5lLlI4fWlmKGU9PT1pby5JTlQpc3dpdGNoKG4pe2Nhc2UgYmUuUkdCQV9JTlRFR0VSOnJldHVybiBOZS5SR0JBMzJJO2Nhc2UgYmUuUkdCX0lOVEVHRVI6cmV0dXJuIE5lLlJHQjMySTtjYXNlIGJlLlJHX0lOVEVHRVI6cmV0dXJuIE5lLlJHMzJJO2Nhc2UgYmUuUkVEX0lOVEVHRVI6cmV0dXJuIE5lLlIzMkl9aWYoZT09PWlvLlVOU0lHTkVEX0lOVClzd2l0Y2gobil7Y2FzZSBiZS5SR0JBX0lOVEVHRVI6cmV0dXJuIE5lLlJHQkEzMlVJO2Nhc2UgYmUuUkdCX0lOVEVHRVI6cmV0dXJuIE5lLlJHQjMyVUk7Y2FzZSBiZS5SR19JTlRFR0VSOnJldHVybiBOZS5SRzMyVUk7Y2FzZSBiZS5SRURfSU5URUdFUjpyZXR1cm4gTmUuUjMyVUl9cmV0dXJuIG59O09iamVjdC5mcmVlemUoYmUpO1ZuPWJlfSk7dmFyIFBTLEZkLGtTPVgoKCk9PntQUz17VktfRk9STUFUX1VOREVGSU5FRDowLFZLX0ZPUk1BVF9SNEc0X1VOT1JNX1BBQ0s4OjEsVktfRk9STUFUX1I0RzRCNEE0X1VOT1JNX1BBQ0sxNjoyLFZLX0ZPUk1BVF9CNEc0UjRBNF9VTk9STV9QQUNLMTY6MyxWS19GT1JNQVRfUjVHNkI1X1VOT1JNX1BBQ0sxNjo0LFZLX0ZPUk1BVF9CNUc2UjVfVU5PUk1fUEFDSzE2OjUsVktfRk9STUFUX1I1RzVCNUExX1VOT1JNX1BBQ0sxNjo2LFZLX0ZPUk1BVF9CNUc1UjVBMV9VTk9STV9QQUNLMTY6NyxWS19GT1JNQVRfQTFSNUc1QjVfVU5PUk1fUEFDSzE2OjgsVktfRk9STUFUX1I4X1VOT1JNOjksVktfRk9STUFUX1I4X1NOT1JNOjEwLFZLX0ZPUk1BVF9SOF9VU0NBTEVEOjExLFZLX0ZPUk1BVF9SOF9TU0NBTEVEOjEyLFZLX0ZPUk1BVF9SOF9VSU5UOjEzLFZLX0ZPUk1BVF9SOF9TSU5UOjE0LFZLX0ZPUk1BVF9SOF9TUkdCOjE1LFZLX0ZPUk1BVF9SOEc4X1VOT1JNOjE2LFZLX0ZPUk1BVF9SOEc4X1NOT1JNOjE3LFZLX0ZPUk1BVF9SOEc4X1VTQ0FMRUQ6MTgsVktfRk9STUFUX1I4RzhfU1NDQUxFRDoxOSxWS19GT1JNQVRfUjhHOF9VSU5UOjIwLFZLX0ZPUk1BVF9SOEc4X1NJTlQ6MjEsVktfRk9STUFUX1I4RzhfU1JHQjoyMixWS19GT1JNQVRfUjhHOEI4X1VOT1JNOjIzLFZLX0ZPUk1BVF9SOEc4QjhfU05PUk06MjQsVktfRk9STUFUX1I4RzhCOF9VU0NBTEVEOjI1LFZLX0ZPUk1BVF9SOEc4QjhfU1NDQUxFRDoyNixWS19GT1JNQVRfUjhHOEI4X1VJTlQ6MjcsVktfRk9STUFUX1I4RzhCOF9TSU5UOjI4LFZLX0ZPUk1BVF9SOEc4QjhfU1JHQjoyOSxWS19GT1JNQVRfQjhHOFI4X1VOT1JNOjMwLFZLX0ZPUk1BVF9COEc4UjhfU05PUk06MzEsVktfRk9STUFUX0I4RzhSOF9VU0NBTEVEOjMyLFZLX0ZPUk1BVF9COEc4UjhfU1NDQUxFRDozMyxWS19GT1JNQVRfQjhHOFI4X1VJTlQ6MzQsVktfRk9STUFUX0I4RzhSOF9TSU5UOjM1LFZLX0ZPUk1BVF9COEc4UjhfU1JHQjozNixWS19GT1JNQVRfUjhHOEI4QThfVU5PUk06MzcsVktfRk9STUFUX1I4RzhCOEE4X1NOT1JNOjM4LFZLX0ZPUk1BVF9SOEc4QjhBOF9VU0NBTEVEOjM5LFZLX0ZPUk1BVF9SOEc4QjhBOF9TU0NBTEVEOjQwLFZLX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOjQxLFZLX0ZPUk1BVF9SOEc4QjhBOF9TSU5UOjQyLFZLX0ZPUk1BVF9SOEc4QjhBOF9TUkdCOjQzLFZLX0ZPUk1BVF9COEc4UjhBOF9VTk9STTo0NCxWS19GT1JNQVRfQjhHOFI4QThfU05PUk06NDUsVktfRk9STUFUX0I4RzhSOEE4X1VTQ0FMRUQ6NDYsVktfRk9STUFUX0I4RzhSOEE4X1NTQ0FMRUQ6NDcsVktfRk9STUFUX0I4RzhSOEE4X1VJTlQ6NDgsVktfRk9STUFUX0I4RzhSOEE4X1NJTlQ6NDksVktfRk9STUFUX0I4RzhSOEE4X1NSR0I6NTAsVktfRk9STUFUX0E4QjhHOFI4X1VOT1JNX1BBQ0szMjo1MSxWS19GT1JNQVRfQThCOEc4UjhfU05PUk1fUEFDSzMyOjUyLFZLX0ZPUk1BVF9BOEI4RzhSOF9VU0NBTEVEX1BBQ0szMjo1MyxWS19GT1JNQVRfQThCOEc4UjhfU1NDQUxFRF9QQUNLMzI6NTQsVktfRk9STUFUX0E4QjhHOFI4X1VJTlRfUEFDSzMyOjU1LFZLX0ZPUk1BVF9BOEI4RzhSOF9TSU5UX1BBQ0szMjo1NixWS19GT1JNQVRfQThCOEc4UjhfU1JHQl9QQUNLMzI6NTcsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VOT1JNX1BBQ0szMjo1OCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU05PUk1fUEFDSzMyOjU5LFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9VU0NBTEVEX1BBQ0szMjo2MCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU1NDQUxFRF9QQUNLMzI6NjEsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VJTlRfUEFDSzMyOjYyLFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9TSU5UX1BBQ0szMjo2MyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVU5PUk1fUEFDSzMyOjY0LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TTk9STV9QQUNLMzI6NjUsVktfRk9STUFUX0EyQjEwRzEwUjEwX1VTQ0FMRURfUEFDSzMyOjY2LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TU0NBTEVEX1BBQ0szMjo2NyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVUlOVF9QQUNLMzI6NjgsVktfRk9STUFUX0EyQjEwRzEwUjEwX1NJTlRfUEFDSzMyOjY5LFZLX0ZPUk1BVF9SMTZfVU5PUk06NzAsVktfRk9STUFUX1IxNl9TTk9STTo3MSxWS19GT1JNQVRfUjE2X1VTQ0FMRUQ6NzIsVktfRk9STUFUX1IxNl9TU0NBTEVEOjczLFZLX0ZPUk1BVF9SMTZfVUlOVDo3NCxWS19GT1JNQVRfUjE2X1NJTlQ6NzUsVktfRk9STUFUX1IxNl9TRkxPQVQ6NzYsVktfRk9STUFUX1IxNkcxNl9VTk9STTo3NyxWS19GT1JNQVRfUjE2RzE2X1NOT1JNOjc4LFZLX0ZPUk1BVF9SMTZHMTZfVVNDQUxFRDo3OSxWS19GT1JNQVRfUjE2RzE2X1NTQ0FMRUQ6ODAsVktfRk9STUFUX1IxNkcxNl9VSU5UOjgxLFZLX0ZPUk1BVF9SMTZHMTZfU0lOVDo4MixWS19GT1JNQVRfUjE2RzE2X1NGTE9BVDo4MyxWS19GT1JNQVRfUjE2RzE2QjE2X1VOT1JNOjg0LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU05PUk06ODUsVktfRk9STUFUX1IxNkcxNkIxNl9VU0NBTEVEOjg2LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU1NDQUxFRDo4NyxWS19GT1JNQVRfUjE2RzE2QjE2X1VJTlQ6ODgsVktfRk9STUFUX1IxNkcxNkIxNl9TSU5UOjg5LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU0ZMT0FUOjkwLFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk06OTEsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STTo5MixWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1VTQ0FMRUQ6OTMsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TU0NBTEVEOjk0LFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlOVDo5NSxWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6OTYsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TRkxPQVQ6OTcsVktfRk9STUFUX1IzMl9VSU5UOjk4LFZLX0ZPUk1BVF9SMzJfU0lOVDo5OSxWS19GT1JNQVRfUjMyX1NGTE9BVDoxMDAsVktfRk9STUFUX1IzMkczMl9VSU5UOjEwMSxWS19GT1JNQVRfUjMyRzMyX1NJTlQ6MTAyLFZLX0ZPUk1BVF9SMzJHMzJfU0ZMT0FUOjEwMyxWS19GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6MTA0LFZLX0ZPUk1BVF9SMzJHMzJCMzJfU0lOVDoxMDUsVktfRk9STUFUX1IzMkczMkIzMl9TRkxPQVQ6MTA2LFZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoxMDcsVktfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOjEwOCxWS19GT1JNQVRfUjMyRzMyQjMyQTMyX1NGTE9BVDoxMDksVktfRk9STUFUX1I2NF9VSU5UOjExMCxWS19GT1JNQVRfUjY0X1NJTlQ6MTExLFZLX0ZPUk1BVF9SNjRfU0ZMT0FUOjExMixWS19GT1JNQVRfUjY0RzY0X1VJTlQ6MTEzLFZLX0ZPUk1BVF9SNjRHNjRfU0lOVDoxMTQsVktfRk9STUFUX1I2NEc2NF9TRkxPQVQ6MTE1LFZLX0ZPUk1BVF9SNjRHNjRCNjRfVUlOVDoxMTYsVktfRk9STUFUX1I2NEc2NEI2NF9TSU5UOjExNyxWS19GT1JNQVRfUjY0RzY0QjY0X1NGTE9BVDoxMTgsVktfRk9STUFUX1I2NEc2NEI2NEE2NF9VSU5UOjExOSxWS19GT1JNQVRfUjY0RzY0QjY0QTY0X1NJTlQ6MTIwLFZLX0ZPUk1BVF9SNjRHNjRCNjRBNjRfU0ZMT0FUOjEyMSxWS19GT1JNQVRfQjEwRzExUjExX1VGTE9BVF9QQUNLMzI6MTIyLFZLX0ZPUk1BVF9FNUI5RzlSOV9VRkxPQVRfUEFDSzMyOjEyMyxWS19GT1JNQVRfRDE2X1VOT1JNOjEyNCxWS19GT1JNQVRfWDhfRDI0X1VOT1JNX1BBQ0szMjoxMjUsVktfRk9STUFUX0QzMl9TRkxPQVQ6MTI2LFZLX0ZPUk1BVF9TOF9VSU5UOjEyNyxWS19GT1JNQVRfRDE2X1VOT1JNX1M4X1VJTlQ6MTI4LFZLX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoxMjksVktfRk9STUFUX0QzMl9TRkxPQVRfUzhfVUlOVDoxMzAsVktfRk9STUFUX0JDMV9SR0JfVU5PUk1fQkxPQ0s6MTMxLFZLX0ZPUk1BVF9CQzFfUkdCX1NSR0JfQkxPQ0s6MTMyLFZLX0ZPUk1BVF9CQzFfUkdCQV9VTk9STV9CTE9DSzoxMzMsVktfRk9STUFUX0JDMV9SR0JBX1NSR0JfQkxPQ0s6MTM0LFZLX0ZPUk1BVF9CQzJfVU5PUk1fQkxPQ0s6MTM1LFZLX0ZPUk1BVF9CQzJfU1JHQl9CTE9DSzoxMzYsVktfRk9STUFUX0JDM19VTk9STV9CTE9DSzoxMzcsVktfRk9STUFUX0JDM19TUkdCX0JMT0NLOjEzOCxWS19GT1JNQVRfQkM0X1VOT1JNX0JMT0NLOjEzOSxWS19GT1JNQVRfQkM0X1NOT1JNX0JMT0NLOjE0MCxWS19GT1JNQVRfQkM1X1VOT1JNX0JMT0NLOjE0MSxWS19GT1JNQVRfQkM1X1NOT1JNX0JMT0NLOjE0MixWS19GT1JNQVRfQkM2SF9VRkxPQVRfQkxPQ0s6MTQzLFZLX0ZPUk1BVF9CQzZIX1NGTE9BVF9CTE9DSzoxNDQsVktfRk9STUFUX0JDN19VTk9STV9CTE9DSzoxNDUsVktfRk9STUFUX0JDN19TUkdCX0JMT0NLOjE0NixWS19GT1JNQVRfRVRDMl9SOEc4QjhfVU5PUk1fQkxPQ0s6MTQ3LFZLX0ZPUk1BVF9FVEMyX1I4RzhCOF9TUkdCX0JMT0NLOjE0OCxWS19GT1JNQVRfRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9DSzoxNDksVktfRk9STUFUX0VUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSzoxNTAsVktfRk9STUFUX0VUQzJfUjhHOEI4QThfVU5PUk1fQkxPQ0s6MTUxLFZLX0ZPUk1BVF9FVEMyX1I4RzhCOEE4X1NSR0JfQkxPQ0s6MTUyLFZLX0ZPUk1BVF9FQUNfUjExX1VOT1JNX0JMT0NLOjE1MyxWS19GT1JNQVRfRUFDX1IxMV9TTk9STV9CTE9DSzoxNTQsVktfRk9STUFUX0VBQ19SMTFHMTFfVU5PUk1fQkxPQ0s6MTU1LFZLX0ZPUk1BVF9FQUNfUjExRzExX1NOT1JNX0JMT0NLOjE1NixWS19GT1JNQVRfQVNUQ180eDRfVU5PUk1fQkxPQ0s6MTU3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TUkdCX0JMT0NLOjE1OCxWS19GT1JNQVRfQVNUQ181eDRfVU5PUk1fQkxPQ0s6MTU5LFZLX0ZPUk1BVF9BU1RDXzV4NF9TUkdCX0JMT0NLOjE2MCxWS19GT1JNQVRfQVNUQ181eDVfVU5PUk1fQkxPQ0s6MTYxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TUkdCX0JMT0NLOjE2MixWS19GT1JNQVRfQVNUQ182eDVfVU5PUk1fQkxPQ0s6MTYzLFZLX0ZPUk1BVF9BU1RDXzZ4NV9TUkdCX0JMT0NLOjE2NCxWS19GT1JNQVRfQVNUQ182eDZfVU5PUk1fQkxPQ0s6MTY1LFZLX0ZPUk1BVF9BU1RDXzZ4Nl9TUkdCX0JMT0NLOjE2NixWS19GT1JNQVRfQVNUQ184eDVfVU5PUk1fQkxPQ0s6MTY3LFZLX0ZPUk1BVF9BU1RDXzh4NV9TUkdCX0JMT0NLOjE2OCxWS19GT1JNQVRfQVNUQ184eDZfVU5PUk1fQkxPQ0s6MTY5LFZLX0ZPUk1BVF9BU1RDXzh4Nl9TUkdCX0JMT0NLOjE3MCxWS19GT1JNQVRfQVNUQ184eDhfVU5PUk1fQkxPQ0s6MTcxLFZLX0ZPUk1BVF9BU1RDXzh4OF9TUkdCX0JMT0NLOjE3MixWS19GT1JNQVRfQVNUQ18xMHg1X1VOT1JNX0JMT0NLOjE3MyxWS19GT1JNQVRfQVNUQ18xMHg1X1NSR0JfQkxPQ0s6MTc0LFZLX0ZPUk1BVF9BU1RDXzEweDZfVU5PUk1fQkxPQ0s6MTc1LFZLX0ZPUk1BVF9BU1RDXzEweDZfU1JHQl9CTE9DSzoxNzYsVktfRk9STUFUX0FTVENfMTB4OF9VTk9STV9CTE9DSzoxNzcsVktfRk9STUFUX0FTVENfMTB4OF9TUkdCX0JMT0NLOjE3OCxWS19GT1JNQVRfQVNUQ18xMHgxMF9VTk9STV9CTE9DSzoxNzksVktfRk9STUFUX0FTVENfMTB4MTBfU1JHQl9CTE9DSzoxODAsVktfRk9STUFUX0FTVENfMTJ4MTBfVU5PUk1fQkxPQ0s6MTgxLFZLX0ZPUk1BVF9BU1RDXzEyeDEwX1NSR0JfQkxPQ0s6MTgyLFZLX0ZPUk1BVF9BU1RDXzEyeDEyX1VOT1JNX0JMT0NLOjE4MyxWS19GT1JNQVRfQVNUQ18xMngxMl9TUkdCX0JMT0NLOjE4NCxWS19GT1JNQVRfRzhCOEc4UjhfNDIyX1VOT1JNOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNOjEwMDAxNTYwMDEsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjBfVU5PUk06MTAwMDE1NjAwMixWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIwX1VOT1JNOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk06MTAwMDE1NjAwNCxWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIyX1VOT1JNOjEwMDAxNTYwMDUsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80NDRfVU5PUk06MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2OjEwMDAxNTYwMDcsVktfRk9STUFUX1IxMFg2RzEwWDZfVU5PUk1fMlBBQ0sxNjoxMDAwMTU2MDA4LFZLX0ZPUk1BVF9SMTBYNkcxMFg2QjEwWDZBMTBYNl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTAsVktfRk9STUFUX0IxMFg2RzEwWDZSMTBYNkcxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTEsVktfRk9STUFUX0cxMFg2X0IxMFg2X1IxMFg2XzNQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEzLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNl9SMTBYNl8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNCxWS19GT1JNQVRfRzEwWDZfQjEwWDZSMTBYNl8yUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMTYsVktfRk9STUFUX1IxMlg0X1VOT1JNX1BBQ0sxNjoxMDAwMTU2MDE3LFZLX0ZPUk1BVF9SMTJYNEcxMlg0X1VOT1JNXzJQQUNLMTY6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDE5LFZLX0ZPUk1BVF9HMTJYNEIxMlg0RzEyWDRSMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIwLFZLX0ZPUk1BVF9CMTJYNEcxMlg0UjEyWDRHMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMixWS19GT1JNQVRfRzEyWDRfQjEyWDRSMTJYNF8yUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMyxWS19GT1JNQVRfRzEyWDRfQjEyWDRfUjEyWDRfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjUsVktfRk9STUFUX0cxMlg0X0IxMlg0X1IxMlg0XzNQTEFORV80NDRfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDI2LFZLX0ZPUk1BVF9HMTZCMTZHMTZSMTZfNDIyX1VOT1JNOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk06MTAwMDE1NjAyOCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMF9VTk9STToxMDAwMTU2MDI5LFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjBfVU5PUk06MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STToxMDAwMTU2MDMxLFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjJfVU5PUk06MTAwMDE1NjAzMixWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STToxMDAwMTU2MDMzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NGUzLFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NDAwMSxWS19GT1JNQVRfUFZSVEMyXzJCUFBfVU5PUk1fQkxPQ0tfSU1HOjEwMDAwNTQwMDIsVktfRk9STUFUX1BWUlRDMl80QlBQX1VOT1JNX0JMT0NLX0lNRzoxMDAwMDU0MDAzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA0LFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA1LFZLX0ZPUk1BVF9QVlJUQzJfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA2LFZLX0ZPUk1BVF9QVlJUQzJfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjZlMyxWS19GT1JNQVRfQVNUQ181eDRfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDAxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDIsVktfRk9STUFUX0FTVENfNng1X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwMyxWS19GT1JNQVRfQVNUQ182eDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA0LFZLX0ZPUk1BVF9BU1RDXzh4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDUsVktfRk9STUFUX0FTVENfOHg2X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwNixWS19GT1JNQVRfQVNUQ184eDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA3LFZLX0ZPUk1BVF9BU1RDXzEweDVfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA4LFZLX0ZPUk1BVF9BU1RDXzEweDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA5LFZLX0ZPUk1BVF9BU1RDXzEweDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEwLFZLX0ZPUk1BVF9BU1RDXzEweDEwX1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAxMSxWS19GT1JNQVRfQVNUQ18xMngxMF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMTIsVktfRk9STUFUX0FTVENfMTJ4MTJfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEzLFZLX0ZPUk1BVF9HOEI4RzhSOF80MjJfVU5PUk1fS0hSOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDAxLFZLX0ZPUk1BVF9HOF9COF9SOF8zUExBTkVfNDIwX1VOT1JNX0tIUjoxMDAwMTU2MDAyLFZLX0ZPUk1BVF9HOF9COFI4XzJQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMDQsVktfRk9STUFUX0c4X0I4UjhfMlBMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAwNSxWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQ0NF9VTk9STV9LSFI6MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2X0tIUjoxMDAwMTU2MDA3LFZLX0ZPUk1BVF9SMTBYNkcxMFg2X1VOT1JNXzJQQUNLMTZfS0hSOjEwMDAxNTYwMDgsVktfRk9STUFUX1IxMFg2RzEwWDZCMTBYNkExMFg2X1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDEwLFZLX0ZPUk1BVF9CMTBYNkcxMFg2UjEwWDZHMTBYNl80MjJfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxMSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxMyxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE0LFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjJfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE2LFZLX0ZPUk1BVF9SMTJYNF9VTk9STV9QQUNLMTZfS0hSOjEwMDAxNTYwMTcsVktfRk9STUFUX1IxMlg0RzEyWDRfVU5PUk1fMlBBQ0sxNl9LSFI6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxOSxWS19GT1JNQVRfRzEyWDRCMTJYNEcxMlg0UjEyWDRfNDIyX1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMjAsVktfRk9STUFUX0IxMlg0RzEyWDRSMTJYNEcxMlg0XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjIsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDIzLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDI1LFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDQ0X1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjYsVktfRk9STUFUX0cxNkIxNkcxNlIxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjgsVktfRk9STUFUX0cxNl9CMTZfUjE2XzNQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMjksVktfRk9STUFUX0cxNl9CMTZSMTZfMlBMQU5FXzQyMF9VTk9STV9LSFI6MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAzMSxWS19GT1JNQVRfRzE2X0IxNlIxNl8yUExBTkVfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDMyLFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDQ0X1VOT1JNX0tIUjoxMDAwMTU2MDMzfTtPYmplY3QuZnJlZXplKFBTKTtGZD1QU30pO2Z1bmN0aW9uIHJ6KCl7cmV0dXJue3ZrRm9ybWF0OjAsdHlwZVNpemU6MSxwaXhlbFdpZHRoOjAscGl4ZWxIZWlnaHQ6MCxwaXhlbERlcHRoOjAsbGF5ZXJDb3VudDowLGZhY2VDb3VudDoxLGxldmVsQ291bnQ6MCxzdXBlcmNvbXByZXNzaW9uU2NoZW1lOjAsbGV2ZWxzOltdLGRhdGFGb3JtYXREZXNjcmlwdG9yOlt7dmVuZG9ySWQ6MCxkZXNjcmlwdG9yVHlwZTowLHZlcnNpb25OdW1iZXI6Mixjb2xvck1vZGVsOjAsY29sb3JQcmltYXJpZXM6MSx0cmFuc2ZlckZ1bmN0aW9uOjIsZmxhZ3M6MCx0ZXhlbEJsb2NrRGltZW5zaW9uOlswLDAsMCwwXSxieXRlc1BsYW5lOlswLDAsMCwwLDAsMCwwLDBdLHNhbXBsZXM6W119XSxrZXlWYWx1ZTp7fSxnbG9iYWxEYXRhOm51bGx9fWZ1bmN0aW9uIHZTKG4pe3JldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUobil9ZnVuY3Rpb24gRlMobil7bGV0IGU9bmV3IFVpbnQ4QXJyYXkobi5idWZmZXIsbi5ieXRlT2Zmc2V0LEdvLmxlbmd0aCk7aWYoZVswXSE9PUdvWzBdfHxlWzFdIT09R29bMV18fGVbMl0hPT1Hb1syXXx8ZVszXSE9PUdvWzNdfHxlWzRdIT09R29bNF18fGVbNV0hPT1Hb1s1XXx8ZVs2XSE9PUdvWzZdfHxlWzddIT09R29bN118fGVbOF0hPT1Hb1s4XXx8ZVs5XSE9PUdvWzldfHxlWzEwXSE9PUdvWzEwXXx8ZVsxMV0hPT1Hb1sxMV0pdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIEtUWCAyLjAgaWRlbnRpZmllci4iKTtsZXQgdD1yeigpLG89MTcqVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsYT1uZXcgUGMobixHby5sZW5ndGgsbywhMCk7dC52a0Zvcm1hdD1hLl9uZXh0VWludDMyKCksdC50eXBlU2l6ZT1hLl9uZXh0VWludDMyKCksdC5waXhlbFdpZHRoPWEuX25leHRVaW50MzIoKSx0LnBpeGVsSGVpZ2h0PWEuX25leHRVaW50MzIoKSx0LnBpeGVsRGVwdGg9YS5fbmV4dFVpbnQzMigpLHQubGF5ZXJDb3VudD1hLl9uZXh0VWludDMyKCksdC5mYWNlQ291bnQ9YS5fbmV4dFVpbnQzMigpLHQubGV2ZWxDb3VudD1hLl9uZXh0VWludDMyKCksdC5zdXBlcmNvbXByZXNzaW9uU2NoZW1lPWEuX25leHRVaW50MzIoKTtsZXQgcj1hLl9uZXh0VWludDMyKCksaT1hLl9uZXh0VWludDMyKCksZj1hLl9uZXh0VWludDMyKCksZD1hLl9uZXh0VWludDMyKCksYz1hLl9uZXh0VWludDY0KCksdT1hLl9uZXh0VWludDY0KCksbD1NYXRoLm1heCh0LmxldmVsQ291bnQsMSkqMyo4LG09bmV3IFBjKG4sR28ubGVuZ3RoK28sbCwhMCk7Zm9yKGxldCBsZT0wLGVlPU1hdGgubWF4KHQubGV2ZWxDb3VudCwxKTtsZTxlZTtsZSsrKXQubGV2ZWxzLnB1c2goe2xldmVsRGF0YTpuZXcgVWludDhBcnJheShuLmJ1ZmZlcixuLmJ5dGVPZmZzZXQrbS5fbmV4dFVpbnQ2NCgpLG0uX25leHRVaW50NjQoKSksdW5jb21wcmVzc2VkQnl0ZUxlbmd0aDptLl9uZXh0VWludDY0KCl9KTtsZXQgaD1uZXcgUGMobixyLGksITApO2guX3NraXAoNCk7bGV0IGI9aC5fbmV4dFVpbnQxNigpLHA9aC5fbmV4dFVpbnQxNigpLHk9aC5fbmV4dFVpbnQxNigpLFQ9aC5fbmV4dFVpbnQxNigpLF89aC5fbmV4dFVpbnQ4KCksdz1oLl9uZXh0VWludDgoKSxFPWguX25leHRVaW50OCgpLFI9aC5fbmV4dFVpbnQ4KCksUz1baC5fbmV4dFVpbnQ4KCksaC5fbmV4dFVpbnQ4KCksaC5fbmV4dFVpbnQ4KCksaC5fbmV4dFVpbnQ4KCldLEM9W2guX25leHRVaW50OCgpLGguX25leHRVaW50OCgpLGguX25leHRVaW50OCgpLGguX25leHRVaW50OCgpLGguX25leHRVaW50OCgpLGguX25leHRVaW50OCgpLGguX25leHRVaW50OCgpLGguX25leHRVaW50OCgpXSxNPXt2ZW5kb3JJZDpiLGRlc2NyaXB0b3JUeXBlOnAsdmVyc2lvbk51bWJlcjp5LGNvbG9yTW9kZWw6Xyxjb2xvclByaW1hcmllczp3LHRyYW5zZmVyRnVuY3Rpb246RSxmbGFnczpSLHRleGVsQmxvY2tEaW1lbnNpb246UyxieXRlc1BsYW5lOkMsc2FtcGxlczpbXX0sQT0oVC80LTYpLzQ7Zm9yKGxldCBsZT0wO2xlPEE7bGUrKyl7bGV0IGVlPXtiaXRPZmZzZXQ6aC5fbmV4dFVpbnQxNigpLGJpdExlbmd0aDpoLl9uZXh0VWludDgoKSxjaGFubmVsVHlwZTpoLl9uZXh0VWludDgoKSxzYW1wbGVQb3NpdGlvbjpbaC5fbmV4dFVpbnQ4KCksaC5fbmV4dFVpbnQ4KCksaC5fbmV4dFVpbnQ4KCksaC5fbmV4dFVpbnQ4KCldLHNhbXBsZUxvd2VyOk51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzYW1wbGVVcHBlcjpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9O2VlLmNoYW5uZWxUeXBlJjY0PyhlZS5zYW1wbGVMb3dlcj1oLl9uZXh0SW50MzIoKSxlZS5zYW1wbGVVcHBlcj1oLl9uZXh0SW50MzIoKSk6KGVlLnNhbXBsZUxvd2VyPWguX25leHRVaW50MzIoKSxlZS5zYW1wbGVVcHBlcj1oLl9uZXh0VWludDMyKCkpLE0uc2FtcGxlc1tsZV09ZWV9dC5kYXRhRm9ybWF0RGVzY3JpcHRvci5sZW5ndGg9MCx0LmRhdGFGb3JtYXREZXNjcmlwdG9yLnB1c2goTSk7bGV0IHg9bmV3IFBjKG4sZixkLCEwKTtmb3IoO3guX29mZnNldDxkOyl7bGV0IGxlPXguX25leHRVaW50MzIoKSxlZT14Ll9zY2FuKGxlKSxFZT12UyhlZSk7aWYodC5rZXlWYWx1ZVtFZV09eC5fbmV4dFVpbnQ4QXJyYXkobGUtZWUuYnl0ZUxlbmd0aC0xKSxFZS5tYXRjaCgvXmt0eC9pKSl7bGV0IFdlPXZTKHQua2V5VmFsdWVbRWVdKTt0LmtleVZhbHVlW0VlXT1XZS5zdWJzdHJpbmcoMCxXZS5sYXN0SW5kZXhPZigiXDAiKSl9bGV0IENlPWxlJTQ/NC1sZSU0OjA7eC5fc2tpcChDZSl9aWYodTw9MClyZXR1cm4gdDtsZXQgTj1uZXcgUGMobixjLHUsITApLHY9Ti5fbmV4dFVpbnQxNigpLFU9Ti5fbmV4dFVpbnQxNigpLEw9Ti5fbmV4dFVpbnQzMigpLEQ9Ti5fbmV4dFVpbnQzMigpLEc9Ti5fbmV4dFVpbnQzMigpLFY9Ti5fbmV4dFVpbnQzMigpLE89W107Zm9yKGxldCBsZT0wLGVlPU1hdGgubWF4KHQubGV2ZWxDb3VudCwxKTtsZTxlZTtsZSsrKU8ucHVzaCh7aW1hZ2VGbGFnczpOLl9uZXh0VWludDMyKCkscmdiU2xpY2VCeXRlT2Zmc2V0Ok4uX25leHRVaW50MzIoKSxyZ2JTbGljZUJ5dGVMZW5ndGg6Ti5fbmV4dFVpbnQzMigpLGFscGhhU2xpY2VCeXRlT2Zmc2V0Ok4uX25leHRVaW50MzIoKSxhbHBoYVNsaWNlQnl0ZUxlbmd0aDpOLl9uZXh0VWludDMyKCl9KTtsZXQgSj1jK04uX29mZnNldCxyZT1KK0wsc2U9cmUrRCxvZT1zZStHLGNlPW5ldyBVaW50OEFycmF5KG4uYnVmZmVyLG4uYnl0ZU9mZnNldCtKLEwpLG1lPW5ldyBVaW50OEFycmF5KG4uYnVmZmVyLG4uYnl0ZU9mZnNldCtyZSxEKSxkZT1uZXcgVWludDhBcnJheShuLmJ1ZmZlcixuLmJ5dGVPZmZzZXQrc2UsRykseWU9bmV3IFVpbnQ4QXJyYXkobi5idWZmZXIsbi5ieXRlT2Zmc2V0K29lLFYpO3JldHVybiB0Lmdsb2JhbERhdGE9e2VuZHBvaW50Q291bnQ6dixzZWxlY3RvckNvdW50OlUsaW1hZ2VEZXNjczpPLGVuZHBvaW50c0RhdGE6Y2Usc2VsZWN0b3JzRGF0YTptZSx0YWJsZXNEYXRhOmRlLGV4dGVuZGVkRGF0YTp5ZX0sdH12YXIgUGMsaGhlLEdvLERTPVgoKCk9PntQYz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbyxhKXt0aGlzLl9kYXRhVmlldz12b2lkIDAsdGhpcy5fbGl0dGxlRW5kaWFuPXZvaWQgMCx0aGlzLl9vZmZzZXQ9dm9pZCAwLHRoaXMuX2RhdGFWaWV3PW5ldyBEYXRhVmlldyhlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQrdCxvKSx0aGlzLl9saXR0bGVFbmRpYW49YSx0aGlzLl9vZmZzZXQ9MH1fbmV4dFVpbnQ4KCl7bGV0IGU9dGhpcy5fZGF0YVZpZXcuZ2V0VWludDgodGhpcy5fb2Zmc2V0KTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz0xLGV9X25leHRVaW50MTYoKXtsZXQgZT10aGlzLl9kYXRhVmlldy5nZXRVaW50MTYodGhpcy5fb2Zmc2V0LHRoaXMuX2xpdHRsZUVuZGlhbik7cmV0dXJuIHRoaXMuX29mZnNldCs9MixlfV9uZXh0VWludDMyKCl7bGV0IGU9dGhpcy5fZGF0YVZpZXcuZ2V0VWludDMyKHRoaXMuX29mZnNldCx0aGlzLl9saXR0bGVFbmRpYW4pO3JldHVybiB0aGlzLl9vZmZzZXQrPTQsZX1fbmV4dFVpbnQ2NCgpe2xldCBlPXRoaXMuX2RhdGFWaWV3LmdldFVpbnQzMih0aGlzLl9vZmZzZXQsdGhpcy5fbGl0dGxlRW5kaWFuKSx0PXRoaXMuX2RhdGFWaWV3LmdldFVpbnQzMih0aGlzLl9vZmZzZXQrNCx0aGlzLl9saXR0bGVFbmRpYW4pLG89ZSsyKiozMip0O3JldHVybiB0aGlzLl9vZmZzZXQrPTgsb31fbmV4dEludDMyKCl7bGV0IGU9dGhpcy5fZGF0YVZpZXcuZ2V0SW50MzIodGhpcy5fb2Zmc2V0LHRoaXMuX2xpdHRsZUVuZGlhbik7cmV0dXJuIHRoaXMuX29mZnNldCs9NCxlfV9uZXh0VWludDhBcnJheShlKXtsZXQgdD1uZXcgVWludDhBcnJheSh0aGlzLl9kYXRhVmlldy5idWZmZXIsdGhpcy5fZGF0YVZpZXcuYnl0ZU9mZnNldCt0aGlzLl9vZmZzZXQsZSk7cmV0dXJuIHRoaXMuX29mZnNldCs9ZSx0fV9za2lwKGUpe3JldHVybiB0aGlzLl9vZmZzZXQrPWUsdGhpc31fc2NhbihlLHQ9MCl7bGV0IG89dGhpcy5fb2Zmc2V0LGE9MDtmb3IoO3RoaXMuX2RhdGFWaWV3LmdldFVpbnQ4KHRoaXMuX29mZnNldCkhPT10JiZhPGU7KWErKyx0aGlzLl9vZmZzZXQrKztyZXR1cm4gYTxlJiZ0aGlzLl9vZmZzZXQrKyxuZXcgVWludDhBcnJheSh0aGlzLl9kYXRhVmlldy5idWZmZXIsdGhpcy5fZGF0YVZpZXcuYnl0ZU9mZnNldCtvLGEpfX0saGhlPW5ldyBVaW50OEFycmF5KFswXSksR289WzE3MSw3NSw4NCw4OCwzMiw1MCw0OCwxODcsMTMsMTAsMjYsMTBdfSk7dmFyIEJTPXNpKChCbSxsMSk9Pnt2YXIgdTE9KGZ1bmN0aW9uKCl7dmFyIG49dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzp2b2lkIDA7cmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lPCJ1IiYmKG49bnx8X19maWxlbmFtZSksKGZ1bmN0aW9uKGUpe2U9ZXx8e307dmFyIHQ9dHlwZW9mIGU8InUiP2U6e30sbyxhO3QucmVhZHk9bmV3IFByb21pc2UoZnVuY3Rpb24oQixqKXtvPUIsYT1qfSk7dmFyIHI9e30saTtmb3IoaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihyW2ldPXRbaV0pO3ZhciBmPVtdLGQ9Ii4vdGhpcy5wcm9ncmFtIixjPWZ1bmN0aW9uKEIsail7dGhyb3cgan0sdT0hMSxsPSExLG09ITEsaD0hMTt1PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiLGw9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsbT10eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT09InN0cmluZyIsaD0hdSYmIW0mJiFsO3ZhciBiPSIiO2Z1bmN0aW9uIHAoQil7cmV0dXJuIHQubG9jYXRlRmlsZT90LmxvY2F0ZUZpbGUoQixiKTpiK0J9dmFyIHksVCxfLHcsRSxSO20/KGw/Yj1sYSgicGF0aCIpLmRpcm5hbWUoYikrIi8iOmI9X19kaXJuYW1lKyIvIix5PWZ1bmN0aW9uKGoscSl7cmV0dXJuIEV8fChFPWxhKCJmcyIpKSxSfHwoUj1sYSgicGF0aCIpKSxqPVIubm9ybWFsaXplKGopLEUucmVhZEZpbGVTeW5jKGoscT9udWxsOiJ1dGY4Iil9LF89ZnVuY3Rpb24oail7dmFyIHE9eShqLCEwKTtyZXR1cm4gcS5idWZmZXJ8fChxPW5ldyBVaW50OEFycmF5KHEpKSx2KHEuYnVmZmVyKSxxfSxwcm9jZXNzLmFyZ3YubGVuZ3RoPjEmJihkPXByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXC9nLCIvIikpLGY9cHJvY2Vzcy5hcmd2LnNsaWNlKDIpLHByb2Nlc3Mub24oInVuY2F1Z2h0RXhjZXB0aW9uIixmdW5jdGlvbihCKXtpZighKEIgaW5zdGFuY2VvZiBNcikpdGhyb3cgQn0pLHByb2Nlc3Mub24oInVuaGFuZGxlZFJlamVjdGlvbiIsRnQpLGM9ZnVuY3Rpb24oQil7cHJvY2Vzcy5leGl0KEIpfSx0Lmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iW0Vtc2NyaXB0ZW4gTW9kdWxlIG9iamVjdF0ifSk6aD8odHlwZW9mIHJlYWQ8InUiJiYoeT1mdW5jdGlvbihqKXtyZXR1cm4gcmVhZChqKX0pLF89ZnVuY3Rpb24oail7dmFyIHE7cmV0dXJuIHR5cGVvZiByZWFkYnVmZmVyPT0iZnVuY3Rpb24iP25ldyBVaW50OEFycmF5KHJlYWRidWZmZXIoaikpOihxPXJlYWQoaiwiYmluYXJ5Iiksdih0eXBlb2YgcT09Im9iamVjdCIpLHEpfSx0eXBlb2Ygc2NyaXB0QXJnczwidSI/Zj1zY3JpcHRBcmdzOnR5cGVvZiBhcmd1bWVudHM8InUiJiYoZj1hcmd1bWVudHMpLHR5cGVvZiBxdWl0PT0iZnVuY3Rpb24iJiYoYz1mdW5jdGlvbihCKXtxdWl0KEIpfSksdHlwZW9mIHByaW50PCJ1IiYmKHR5cGVvZiBjb25zb2xlPiJ1IiYmKGNvbnNvbGU9e30pLGNvbnNvbGUubG9nPXByaW50LGNvbnNvbGUud2Fybj1jb25zb2xlLmVycm9yPXR5cGVvZiBwcmludEVycjwidSI/cHJpbnRFcnI6cHJpbnQpKToodXx8bCkmJihsP2I9c2VsZi5sb2NhdGlvbi5ocmVmOnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihiPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSxuJiYoYj1uKSxiLmluZGV4T2YoImJsb2I6IikhPT0wP2I9Yi5zdWJzdHIoMCxiLmxhc3RJbmRleE9mKCIvIikrMSk6Yj0iIix5PWZ1bmN0aW9uKEIpe3ZhciBqPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gai5vcGVuKCJHRVQiLEIsITEpLGouc2VuZChudWxsKSxqLnJlc3BvbnNlVGV4dH0sbCYmKF89ZnVuY3Rpb24oQil7dmFyIGo9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBqLm9wZW4oIkdFVCIsQiwhMSksai5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixqLnNlbmQobnVsbCksbmV3IFVpbnQ4QXJyYXkoai5yZXNwb25zZSl9KSxUPWZ1bmN0aW9uKEIsaixxKXt2YXIgJD1uZXcgWE1MSHR0cFJlcXVlc3Q7JC5vcGVuKCJHRVQiLEIsITApLCQucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsJC5vbmxvYWQ9ZnVuY3Rpb24oKXtpZigkLnN0YXR1cz09MjAwfHwkLnN0YXR1cz09MCYmJC5yZXNwb25zZSl7aigkLnJlc3BvbnNlKTtyZXR1cm59cSgpfSwkLm9uZXJyb3I9cSwkLnNlbmQobnVsbCl9LHc9ZnVuY3Rpb24oQil7ZG9jdW1lbnQudGl0bGU9Qn0pO3ZhciBTPXQucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksQz10LnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IoaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJih0W2ldPXJbaV0pO3I9bnVsbCx0LmFyZ3VtZW50cyYmKGY9dC5hcmd1bWVudHMpLHQudGhpc1Byb2dyYW0mJihkPXQudGhpc1Byb2dyYW0pLHQucXVpdCYmKGM9dC5xdWl0KTt2YXIgST0wLE09ZnVuY3Rpb24oQil7ST1CfSxQO3Qud2FzbUJpbmFyeSYmKFA9dC53YXNtQmluYXJ5KTt2YXIgRj10Lm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJkZ0KCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIEEseD0hMSxOO2Z1bmN0aW9uIHYoQixqKXtCfHxGdCgiQXNzZXJ0aW9uIGZhaWxlZDogIitqKX12YXIgVT10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMDtmdW5jdGlvbiBMKEIsaixxKXtmb3IodmFyICQ9aitxLHVlPWo7Qlt1ZV0mJiEodWU+PSQpOykrK3VlO2lmKHVlLWo+MTYmJkIuc3ViYXJyYXkmJlUpcmV0dXJuIFUuZGVjb2RlKEIuc3ViYXJyYXkoaix1ZSkpO2Zvcih2YXIgQWU9IiI7ajx1ZTspe3ZhciBUZT1CW2orK107aWYoIShUZSYxMjgpKXtBZSs9U3RyaW5nLmZyb21DaGFyQ29kZShUZSk7Y29udGludWV9dmFyIGdlPUJbaisrXSY2MztpZigoVGUmMjI0KT09MTkyKXtBZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoVGUmMzEpPDw2fGdlKTtjb250aW51ZX12YXIgX2U9QltqKytdJjYzO2lmKChUZSYyNDApPT0yMjQ/VGU9KFRlJjE1KTw8MTJ8Z2U8PDZ8X2U6VGU9KFRlJjcpPDwxOHxnZTw8MTJ8X2U8PDZ8QltqKytdJjYzLFRlPDY1NTM2KUFlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFRlKTtlbHNle3ZhciBVZT1UZS02NTUzNjtBZSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxVZT4+MTAsNTYzMjB8VWUmMTAyMyl9fXJldHVybiBBZX1mdW5jdGlvbiBEKEIsail7cmV0dXJuIEI/TChFZSxCLGopOiIifWZ1bmN0aW9uIEcoQixqLHEsJCl7aWYoISgkPjApKXJldHVybiAwO2Zvcih2YXIgdWU9cSxBZT1xKyQtMSxUZT0wO1RlPEIubGVuZ3RoOysrVGUpe3ZhciBnZT1CLmNoYXJDb2RlQXQoVGUpO2lmKGdlPj01NTI5NiYmZ2U8PTU3MzQzKXt2YXIgX2U9Qi5jaGFyQ29kZUF0KCsrVGUpO2dlPTY1NTM2KygoZ2UmMTAyMyk8PDEwKXxfZSYxMDIzfWlmKGdlPD0xMjcpe2lmKHE+PUFlKWJyZWFrO2pbcSsrXT1nZX1lbHNlIGlmKGdlPD0yMDQ3KXtpZihxKzE+PUFlKWJyZWFrO2pbcSsrXT0xOTJ8Z2U+PjYsaltxKytdPTEyOHxnZSY2M31lbHNlIGlmKGdlPD02NTUzNSl7aWYocSsyPj1BZSlicmVhaztqW3ErK109MjI0fGdlPj4xMixqW3ErK109MTI4fGdlPj42JjYzLGpbcSsrXT0xMjh8Z2UmNjN9ZWxzZXtpZihxKzM+PUFlKWJyZWFrO2pbcSsrXT0yNDB8Z2U+PjE4LGpbcSsrXT0xMjh8Z2U+PjEyJjYzLGpbcSsrXT0xMjh8Z2U+PjYmNjMsaltxKytdPTEyOHxnZSY2M319cmV0dXJuIGpbcV09MCxxLXVlfWZ1bmN0aW9uIFYoQixqLHEpe3JldHVybiBHKEIsRWUsaixxKX1mdW5jdGlvbiBPKEIpe2Zvcih2YXIgaj0wLHE9MDtxPEIubGVuZ3RoOysrcSl7dmFyICQ9Qi5jaGFyQ29kZUF0KHEpOyQ+PTU1Mjk2JiYkPD01NzM0MyYmKCQ9NjU1MzYrKCgkJjEwMjMpPDwxMCl8Qi5jaGFyQ29kZUF0KCsrcSkmMTAyMyksJDw9MTI3PysrajokPD0yMDQ3P2orPTI6JDw9NjU1MzU/ais9MzpqKz00fXJldHVybiBqfXZhciBKPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpOnZvaWQgMDtmdW5jdGlvbiByZShCLGope2Zvcih2YXIgcT1CLCQ9cT4+MSx1ZT0kK2ovMjshKCQ+PXVlKSYmV2VbJF07KSsrJDtpZihxPSQ8PDEscS1CPjMyJiZKKXJldHVybiBKLmRlY29kZShFZS5zdWJhcnJheShCLHEpKTtmb3IodmFyIEFlPSIiLFRlPTA7IShUZT49ai8yKTsrK1RlKXt2YXIgZ2U9Q2VbQitUZSoyPj4xXTtpZihnZT09MClicmVhaztBZSs9U3RyaW5nLmZyb21DaGFyQ29kZShnZSl9cmV0dXJuIEFlfWZ1bmN0aW9uIHNlKEIsaixxKXtpZihxPT09dm9pZCAwJiYocT0yMTQ3NDgzNjQ3KSxxPDIpcmV0dXJuIDA7cS09Mjtmb3IodmFyICQ9aix1ZT1xPEIubGVuZ3RoKjI/cS8yOkIubGVuZ3RoLEFlPTA7QWU8dWU7KytBZSl7dmFyIFRlPUIuY2hhckNvZGVBdChBZSk7Q2Vbaj4+MV09VGUsais9Mn1yZXR1cm4gQ2Vbaj4+MV09MCxqLSR9ZnVuY3Rpb24gb2UoQil7cmV0dXJuIEIubGVuZ3RoKjJ9ZnVuY3Rpb24gY2UoQixqKXtmb3IodmFyIHE9MCwkPSIiOyEocT49ai80KTspe3ZhciB1ZT16ZVtCK3EqND4+Ml07aWYodWU9PTApYnJlYWs7aWYoKytxLHVlPj02NTUzNil7dmFyIEFlPXVlLTY1NTM2OyQrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8QWU+PjEwLDU2MzIwfEFlJjEwMjMpfWVsc2UgJCs9U3RyaW5nLmZyb21DaGFyQ29kZSh1ZSl9cmV0dXJuICR9ZnVuY3Rpb24gbWUoQixqLHEpe2lmKHE9PT12b2lkIDAmJihxPTIxNDc0ODM2NDcpLHE8NClyZXR1cm4gMDtmb3IodmFyICQ9aix1ZT0kK3EtNCxBZT0wO0FlPEIubGVuZ3RoOysrQWUpe3ZhciBUZT1CLmNoYXJDb2RlQXQoQWUpO2lmKFRlPj01NTI5NiYmVGU8PTU3MzQzKXt2YXIgZ2U9Qi5jaGFyQ29kZUF0KCsrQWUpO1RlPTY1NTM2KygoVGUmMTAyMyk8PDEwKXxnZSYxMDIzfWlmKHplW2o+PjJdPVRlLGorPTQsais0PnVlKWJyZWFrfXJldHVybiB6ZVtqPj4yXT0wLGotJH1mdW5jdGlvbiBkZShCKXtmb3IodmFyIGo9MCxxPTA7cTxCLmxlbmd0aDsrK3Epe3ZhciAkPUIuY2hhckNvZGVBdChxKTskPj01NTI5NiYmJDw9NTczNDMmJisrcSxqKz00fXJldHVybiBqfWZ1bmN0aW9uIHllKEIsail7cmV0dXJuIEIlaj4wJiYoQis9ai1CJWopLEJ9dmFyIGxlLGVlLEVlLENlLFdlLHplLFplLEtlLERlO2Z1bmN0aW9uIEJlKEIpe2xlPUIsdC5IRUFQOD1lZT1uZXcgSW50OEFycmF5KEIpLHQuSEVBUDE2PUNlPW5ldyBJbnQxNkFycmF5KEIpLHQuSEVBUDMyPXplPW5ldyBJbnQzMkFycmF5KEIpLHQuSEVBUFU4PUVlPW5ldyBVaW50OEFycmF5KEIpLHQuSEVBUFUxNj1XZT1uZXcgVWludDE2QXJyYXkoQiksdC5IRUFQVTMyPVplPW5ldyBVaW50MzJBcnJheShCKSx0LkhFQVBGMzI9S2U9bmV3IEZsb2F0MzJBcnJheShCKSx0LkhFQVBGNjQ9RGU9bmV3IEZsb2F0NjRBcnJheShCKX12YXIgZXQ9dC5JTklUSUFMX01FTU9SWXx8MTY3NzcyMTYscWUsYXQ9W10seHQ9W10sVHQ9W10sY3Q9W10senQ9ITE7ZnVuY3Rpb24gT3QoKXtpZih0LnByZVJ1bilmb3IodHlwZW9mIHQucHJlUnVuPT0iZnVuY3Rpb24iJiYodC5wcmVSdW49W3QucHJlUnVuXSk7dC5wcmVSdW4ubGVuZ3RoOylfdCh0LnByZVJ1bi5zaGlmdCgpKTtwbyhhdCl9ZnVuY3Rpb24ga3QoKXt6dD0hMCxwbyh4dCl9ZnVuY3Rpb24gR2UoKXtwbyhUdCl9ZnVuY3Rpb24gTGUoKXtpZih0LnBvc3RSdW4pZm9yKHR5cGVvZiB0LnBvc3RSdW49PSJmdW5jdGlvbiImJih0LnBvc3RSdW49W3QucG9zdFJ1bl0pO3QucG9zdFJ1bi5sZW5ndGg7KUd0KHQucG9zdFJ1bi5zaGlmdCgpKTtwbyhjdCl9ZnVuY3Rpb24gX3QoQil7YXQudW5zaGlmdChCKX1mdW5jdGlvbiBNdChCKXt4dC51bnNoaWZ0KEIpfWZ1bmN0aW9uIEd0KEIpe2N0LnVuc2hpZnQoQil9dmFyIHF0PTAsUXQ9bnVsbCxwbj1udWxsO2Z1bmN0aW9uIE50KEIpe3F0KyssdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZ0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMocXQpfWZ1bmN0aW9uICR0KEIpe2lmKHF0LS0sdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZ0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMocXQpLHF0PT0wJiYoUXQhPT1udWxsJiYoY2xlYXJJbnRlcnZhbChRdCksUXQ9bnVsbCkscG4pKXt2YXIgaj1wbjtwbj1udWxsLGooKX19dC5wcmVsb2FkZWRJbWFnZXM9e30sdC5wcmVsb2FkZWRBdWRpb3M9e307ZnVuY3Rpb24gRnQoQil7dC5vbkFib3J0JiZ0Lm9uQWJvcnQoQiksQis9IiIsQyhCKSx4PSEwLE49MSxCPSJhYm9ydCgiK0IrIikuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgaj1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKEIpO3Rocm93IGEoaiksan1mdW5jdGlvbiBvbihCLGope3JldHVybiBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGg/Qi5zdGFydHNXaXRoKGopOkIuaW5kZXhPZihqKT09PTB9dmFyIFVuPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIjtmdW5jdGlvbiBqbihCKXtyZXR1cm4gb24oQixVbil9dmFyIFNuPSJmaWxlOi8vIjtmdW5jdGlvbiB0byhCKXtyZXR1cm4gb24oQixTbil9dmFyIFN0PSJiYXNpc190cmFuc2NvZGVyLndhc20iO2puKFN0KXx8KFN0PXAoU3QpKTtmdW5jdGlvbiB5dChCKXt0cnl7aWYoQj09U3QmJlApcmV0dXJuIG5ldyBVaW50OEFycmF5KFApO2lmKF8pcmV0dXJuIF8oQik7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKGope0Z0KGopfX1mdW5jdGlvbiB3bigpe2lmKCFQJiYodXx8bCkpe2lmKHR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmIXRvKFN0KSlyZXR1cm4gZmV0Y2goU3Qse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKEIpe2lmKCFCLm9rKXRocm93ImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyIrU3QrIiciO3JldHVybiBCLmFycmF5QnVmZmVyKCl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiB5dChTdCl9KTtpZihUKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihCLGope1QoU3QsZnVuY3Rpb24ocSl7QihuZXcgVWludDhBcnJheShxKSl9LGopfSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geXQoU3QpfSl9ZnVuY3Rpb24gQ24oKXt2YXIgQj17YTokdX07ZnVuY3Rpb24gaihUZSxnZSl7dmFyIF9lPVRlLmV4cG9ydHM7dC5hc209X2UsQT10LmFzbS5LLEJlKEEuYnVmZmVyKSxxZT10LmFzbS5PLE10KHQuYXNtLkwpLCR0KCJ3YXNtLWluc3RhbnRpYXRlIil9TnQoIndhc20taW5zdGFudGlhdGUiKTtmdW5jdGlvbiBxKFRlKXtqKFRlLmluc3RhbmNlKX1mdW5jdGlvbiAkKFRlKXtyZXR1cm4gd24oKS50aGVuKGZ1bmN0aW9uKGdlKXt2YXIgX2U9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoZ2UsQik7cmV0dXJuIF9lfSkudGhlbihUZSxmdW5jdGlvbihnZSl7QygiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitnZSksRnQoZ2UpfSl9ZnVuY3Rpb24gdWUoKXtyZXR1cm4hUCYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYham4oU3QpJiYhdG8oU3QpJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goU3Qse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKFRlKXt2YXIgZ2U9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoVGUsQik7cmV0dXJuIGdlLnRoZW4ocSxmdW5jdGlvbihfZSl7cmV0dXJuIEMoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK19lKSxDKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLCQocSl9KX0pOiQocSl9aWYodC5pbnN0YW50aWF0ZVdhc20pdHJ5e3ZhciBBZT10Lmluc3RhbnRpYXRlV2FzbShCLGopO3JldHVybiBBZX1jYXRjaChUZSl7cmV0dXJuIEMoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrVGUpLCExfXJldHVybiB1ZSgpLmNhdGNoKGEpLHt9fWZ1bmN0aW9uIHBvKEIpe2Zvcig7Qi5sZW5ndGg+MDspe3ZhciBqPUIuc2hpZnQoKTtpZih0eXBlb2Ygaj09ImZ1bmN0aW9uIil7aih0KTtjb250aW51ZX12YXIgcT1qLmZ1bmM7dHlwZW9mIHE9PSJudW1iZXIiP2ouYXJnPT09dm9pZCAwP3FlLmdldChxKSgpOnFlLmdldChxKShqLmFyZyk6cShqLmFyZz09PXZvaWQgMD9udWxsOmouYXJnKX19dmFyIER0PXt9O2Z1bmN0aW9uIGFuKEIpe2Zvcig7Qi5sZW5ndGg7KXt2YXIgaj1CLnBvcCgpLHE9Qi5wb3AoKTtxKGopfX1mdW5jdGlvbiBFbyhCKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoWmVbQj4+Ml0pfXZhciBNbj17fSxIbz17fSx2YT17fSx6aT00OCxHaT01NztmdW5jdGlvbiB0aShCKXtpZihCPT09dm9pZCAwKXJldHVybiJfdW5rbm93biI7Qj1CLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywiJCIpO3ZhciBqPUIuY2hhckNvZGVBdCgwKTtyZXR1cm4gaj49emkmJmo8PUdpPyJfIitCOkJ9ZnVuY3Rpb24gRmEoQixqKXtyZXR1cm4gQj10aShCKSxuZXcgRnVuY3Rpb24oImJvZHkiLCJyZXR1cm4gZnVuY3Rpb24gIitCK2AoKSB7CiAgICAidXNlIHN0cmljdCI7ICAgIHJldHVybiBib2R5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cn07CmApKGopfWZ1bmN0aW9uIG5pKEIsail7dmFyIHE9RmEoaixmdW5jdGlvbigkKXt0aGlzLm5hbWU9aix0aGlzLm1lc3NhZ2U9JDt2YXIgdWU9bmV3IEVycm9yKCQpLnN0YWNrO3VlIT09dm9pZCAwJiYodGhpcy5zdGFjaz10aGlzLnRvU3RyaW5nKCkrYApgK3VlLnJlcGxhY2UoL15FcnJvcig6W15cbl0qKT9cbi8sIiIpKX0pO3JldHVybiBxLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSxxLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1xLHEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZT09PXZvaWQgMD90aGlzLm5hbWU6dGhpcy5uYW1lKyI6ICIrdGhpcy5tZXNzYWdlfSxxfXZhciBWaT12b2lkIDA7ZnVuY3Rpb24gT3IoQil7dGhyb3cgbmV3IFZpKEIpfWZ1bmN0aW9uIGNvKEIsaixxKXtCLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhW2dlXT1qfSk7ZnVuY3Rpb24gJChnZSl7dmFyIF9lPXEoZ2UpO19lLmxlbmd0aCE9PUIubGVuZ3RoJiZPcigiTWlzbWF0Y2hlZCB0eXBlIGNvbnZlcnRlciBjb3VudCIpO2Zvcih2YXIgVWU9MDtVZTxCLmxlbmd0aDsrK1VlKW9hKEJbVWVdLF9lW1VlXSl9dmFyIHVlPW5ldyBBcnJheShqLmxlbmd0aCksQWU9W10sVGU9MDtqLmZvckVhY2goZnVuY3Rpb24oZ2UsX2Upe0hvLmhhc093blByb3BlcnR5KGdlKT91ZVtfZV09SG9bZ2VdOihBZS5wdXNoKGdlKSxNbi5oYXNPd25Qcm9wZXJ0eShnZSl8fChNbltnZV09W10pLE1uW2dlXS5wdXNoKGZ1bmN0aW9uKCl7dWVbX2VdPUhvW2dlXSwrK1RlLFRlPT09QWUubGVuZ3RoJiYkKHVlKX0pKX0pLEFlLmxlbmd0aD09PTAmJiQodWUpfWZ1bmN0aW9uIGdvKEIpe3ZhciBqPUR0W0JdO2RlbGV0ZSBEdFtCXTt2YXIgcT1qLnJhd0NvbnN0cnVjdG9yLCQ9ai5yYXdEZXN0cnVjdG9yLHVlPWouZmllbGRzLEFlPXVlLm1hcChmdW5jdGlvbihUZSl7cmV0dXJuIFRlLmdldHRlclJldHVyblR5cGV9KS5jb25jYXQodWUubWFwKGZ1bmN0aW9uKFRlKXtyZXR1cm4gVGUuc2V0dGVyQXJndW1lbnRUeXBlfSkpO2NvKFtCXSxBZSxmdW5jdGlvbihUZSl7dmFyIGdlPXt9O3JldHVybiB1ZS5mb3JFYWNoKGZ1bmN0aW9uKF9lLFVlKXt2YXIgWGU9X2UuZmllbGROYW1lLGx0PVRlW1VlXSxlbj1fZS5nZXR0ZXIsZ249X2UuZ2V0dGVyQ29udGV4dCxzbz1UZVtVZSt1ZS5sZW5ndGhdLGtvPV9lLnNldHRlcix1YT1fZS5zZXR0ZXJDb250ZXh0O2dlW1hlXT17cmVhZDpmdW5jdGlvbigkYSl7cmV0dXJuIGx0LmZyb21XaXJlVHlwZShlbihnbiwkYSkpfSx3cml0ZTpmdW5jdGlvbigkYSxtZil7dmFyIE5yPVtdO2tvKHVhLCRhLHNvLnRvV2lyZVR5cGUoTnIsbWYpKSxhbihOcil9fX0pLFt7bmFtZTpqLm5hbWUsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKF9lKXt2YXIgVWU9e307Zm9yKHZhciBYZSBpbiBnZSlVZVtYZV09Z2VbWGVdLnJlYWQoX2UpO3JldHVybiAkKF9lKSxVZX0sdG9XaXJlVHlwZTpmdW5jdGlvbihfZSxVZSl7Zm9yKHZhciBYZSBpbiBnZSlpZighKFhlIGluIFVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXNzaW5nIGZpZWxkOiAgIicrWGUrJyInKTt2YXIgbHQ9cSgpO2ZvcihYZSBpbiBnZSlnZVtYZV0ud3JpdGUobHQsVWVbWGVdKTtyZXR1cm4gX2UhPT1udWxsJiZfZS5wdXNoKCQsbHQpLGx0fSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOkVvLGRlc3RydWN0b3JGdW5jdGlvbjokfV19KX1mdW5jdGlvbiBEYShCKXtzd2l0Y2goQil7Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gMTtjYXNlIDQ6cmV0dXJuIDI7Y2FzZSA4OnJldHVybiAzO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biB0eXBlIHNpemU6ICIrQil9fWZ1bmN0aW9uIGtjKCl7Zm9yKHZhciBCPW5ldyBBcnJheSgyNTYpLGo9MDtqPDI1NjsrK2opQltqXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGopO3ZjPUJ9dmFyIHZjPXZvaWQgMDtmdW5jdGlvbiBMbihCKXtmb3IodmFyIGo9IiIscT1CO0VlW3FdOylqKz12Y1tFZVtxKytdXTtyZXR1cm4gan12YXIgU3I9dm9pZCAwO2Z1bmN0aW9uIEl0KEIpe3Rocm93IG5ldyBTcihCKX1mdW5jdGlvbiBvYShCLGoscSl7aWYocT1xfHx7fSwhKCJhcmdQYWNrQWR2YW5jZSJpbiBqKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWdpc3RlclR5cGUgcmVnaXN0ZXJlZEluc3RhbmNlIHJlcXVpcmVzIGFyZ1BhY2tBZHZhbmNlIik7dmFyICQ9ai5uYW1lO2lmKEJ8fEl0KCd0eXBlICInKyQrJyIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcicpLEhvLmhhc093blByb3BlcnR5KEIpKXtpZihxLmlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnMpcmV0dXJuO0l0KCJDYW5ub3QgcmVnaXN0ZXIgdHlwZSAnIiskKyInIHR3aWNlIil9aWYoSG9bQl09aixkZWxldGUgdmFbQl0sTW4uaGFzT3duUHJvcGVydHkoQikpe3ZhciB1ZT1NbltCXTtkZWxldGUgTW5bQl0sdWUuZm9yRWFjaChmdW5jdGlvbihBZSl7QWUoKX0pfX1mdW5jdGlvbiBEZChCLGoscSwkLHVlKXt2YXIgQWU9RGEocSk7aj1MbihqKSxvYShCLHtuYW1lOmosZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKFRlKXtyZXR1cm4hIVRlfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKFRlLGdlKXtyZXR1cm4gZ2U/JDp1ZX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpmdW5jdGlvbihUZSl7dmFyIGdlO2lmKHE9PT0xKWdlPWVlO2Vsc2UgaWYocT09PTIpZ2U9Q2U7ZWxzZSBpZihxPT09NClnZT16ZTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gYm9vbGVhbiB0eXBlIHNpemU6ICIraik7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGdlW1RlPj5BZV0pfSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfWZ1bmN0aW9uIEJkKEIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEJhKXx8IShCIGluc3RhbmNlb2YgQmEpKXJldHVybiExO2Zvcih2YXIgaj10aGlzLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLHE9dGhpcy4kJC5wdHIsJD1CLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLHVlPUIuJCQucHRyO2ouYmFzZUNsYXNzOylxPWoudXBjYXN0KHEpLGo9ai5iYXNlQ2xhc3M7Zm9yKDskLmJhc2VDbGFzczspdWU9JC51cGNhc3QodWUpLCQ9JC5iYXNlQ2xhc3M7cmV0dXJuIGo9PT0kJiZxPT09dWV9ZnVuY3Rpb24gVWQoQil7cmV0dXJue2NvdW50OkIuY291bnQsZGVsZXRlU2NoZWR1bGVkOkIuZGVsZXRlU2NoZWR1bGVkLHByZXNlcnZlUG9pbnRlck9uRGVsZXRlOkIucHJlc2VydmVQb2ludGVyT25EZWxldGUscHRyOkIucHRyLHB0clR5cGU6Qi5wdHJUeXBlLHNtYXJ0UHRyOkIuc21hcnRQdHIsc21hcnRQdHJUeXBlOkIuc21hcnRQdHJUeXBlfX1mdW5jdGlvbiBGYyhCKXtmdW5jdGlvbiBqKHEpe3JldHVybiBxLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLm5hbWV9SXQoaihCKSsiIGluc3RhbmNlIGFscmVhZHkgZGVsZXRlZCIpfXZhciBEYz0hMTtmdW5jdGlvbiBlZihCKXt9ZnVuY3Rpb24gamQoQil7Qi5zbWFydFB0cj9CLnNtYXJ0UHRyVHlwZS5yYXdEZXN0cnVjdG9yKEIuc21hcnRQdHIpOkIucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MucmF3RGVzdHJ1Y3RvcihCLnB0cil9ZnVuY3Rpb24gdGYoQil7Qi5jb3VudC52YWx1ZS09MTt2YXIgaj1CLmNvdW50LnZhbHVlPT09MDtqJiZqZChCKX1mdW5jdGlvbiBvaShCKXtyZXR1cm4gdHlwZW9mIEZpbmFsaXphdGlvbkdyb3VwPiJ1Ij8ob2k9ZnVuY3Rpb24oail7cmV0dXJuIGp9LEIpOihEYz1uZXcgRmluYWxpemF0aW9uR3JvdXAoZnVuY3Rpb24oail7Zm9yKHZhciBxPWoubmV4dCgpOyFxLmRvbmU7cT1qLm5leHQoKSl7dmFyICQ9cS52YWx1ZTskLnB0cj90ZigkKTpjb25zb2xlLndhcm4oIm9iamVjdCBhbHJlYWR5IGRlbGV0ZWQ6ICIrJC5wdHIpfX0pLG9pPWZ1bmN0aW9uKGope3JldHVybiBEYy5yZWdpc3RlcihqLGouJCQsai4kJCksan0sZWY9ZnVuY3Rpb24oail7RGMudW5yZWdpc3RlcihqLiQkKX0sb2koQikpfWZ1bmN0aW9uIExkKCl7aWYodGhpcy4kJC5wdHJ8fEZjKHRoaXMpLHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUpcmV0dXJuIHRoaXMuJCQuY291bnQudmFsdWUrPTEsdGhpczt2YXIgQj1vaShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7JCQ6e3ZhbHVlOlVkKHRoaXMuJCQpfX0pKTtyZXR1cm4gQi4kJC5jb3VudC52YWx1ZSs9MSxCLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxCfWZ1bmN0aW9uIHpkKCl7dGhpcy4kJC5wdHJ8fEZjKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSYmSXQoIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb24iKSxlZih0aGlzKSx0Zih0aGlzLiQkKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlfHwodGhpcy4kJC5zbWFydFB0cj12b2lkIDAsdGhpcy4kJC5wdHI9dm9pZCAwKX1mdW5jdGlvbiBHZCgpe3JldHVybiF0aGlzLiQkLnB0cn12YXIgYWk9dm9pZCAwLHJpPVtdO2Z1bmN0aW9uIEJjKCl7Zm9yKDtyaS5sZW5ndGg7KXt2YXIgQj1yaS5wb3AoKTtCLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxCLmRlbGV0ZSgpfX1mdW5jdGlvbiBWZCgpe3JldHVybiB0aGlzLiQkLnB0cnx8RmModGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZJdCgiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLHJpLnB1c2godGhpcykscmkubGVuZ3RoPT09MSYmYWkmJmFpKEJjKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMCx0aGlzfWZ1bmN0aW9uIEhkKCl7QmEucHJvdG90eXBlLmlzQWxpYXNPZj1CZCxCYS5wcm90b3R5cGUuY2xvbmU9TGQsQmEucHJvdG90eXBlLmRlbGV0ZT16ZCxCYS5wcm90b3R5cGUuaXNEZWxldGVkPUdkLEJhLnByb3RvdHlwZS5kZWxldGVMYXRlcj1WZH1mdW5jdGlvbiBCYSgpe312YXIgbmY9e307ZnVuY3Rpb24gb2YoQixqLHEpe2lmKEJbal0ub3ZlcmxvYWRUYWJsZT09PXZvaWQgMCl7dmFyICQ9QltqXTtCW2pdPWZ1bmN0aW9uKCl7cmV0dXJuIEJbal0ub3ZlcmxvYWRUYWJsZS5oYXNPd25Qcm9wZXJ0eShhcmd1bWVudHMubGVuZ3RoKXx8SXQoIkZ1bmN0aW9uICciK3ErIicgY2FsbGVkIHdpdGggYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzICgiK2FyZ3VtZW50cy5sZW5ndGgrIikgLSBleHBlY3RzIG9uZSBvZiAoIitCW2pdLm92ZXJsb2FkVGFibGUrIikhIiksQltqXS5vdmVybG9hZFRhYmxlW2FyZ3VtZW50cy5sZW5ndGhdLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sQltqXS5vdmVybG9hZFRhYmxlPVtdLEJbal0ub3ZlcmxvYWRUYWJsZVskLmFyZ0NvdW50XT0kfX1mdW5jdGlvbiBVYyhCLGoscSl7dC5oYXNPd25Qcm9wZXJ0eShCKT8oKHE9PT12b2lkIDB8fHRbQl0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmdFtCXS5vdmVybG9hZFRhYmxlW3FdIT09dm9pZCAwKSYmSXQoIkNhbm5vdCByZWdpc3RlciBwdWJsaWMgbmFtZSAnIitCKyInIHR3aWNlIiksb2YodCxCLEIpLHQuaGFzT3duUHJvcGVydHkocSkmJkl0KCJDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgb3ZlcmxvYWRzIG9mIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgYXJndW1lbnRzICgiK3ErIikhIiksdFtCXS5vdmVybG9hZFRhYmxlW3FdPWopOih0W0JdPWoscSE9PXZvaWQgMCYmKHRbQl0ubnVtQXJndW1lbnRzPXEpKX1mdW5jdGlvbiBLZChCLGoscSwkLHVlLEFlLFRlLGdlKXt0aGlzLm5hbWU9Qix0aGlzLmNvbnN0cnVjdG9yPWosdGhpcy5pbnN0YW5jZVByb3RvdHlwZT1xLHRoaXMucmF3RGVzdHJ1Y3Rvcj0kLHRoaXMuYmFzZUNsYXNzPXVlLHRoaXMuZ2V0QWN0dWFsVHlwZT1BZSx0aGlzLnVwY2FzdD1UZSx0aGlzLmRvd25jYXN0PWdlLHRoaXMucHVyZVZpcnR1YWxGdW5jdGlvbnM9W119ZnVuY3Rpb24gamMoQixqLHEpe2Zvcig7aiE9PXE7KWoudXBjYXN0fHxJdCgiRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAiK3EubmFtZSsiLCBnb3QgYW4gaW5zdGFuY2Ugb2YgIitqLm5hbWUpLEI9ai51cGNhc3QoQiksaj1qLmJhc2VDbGFzcztyZXR1cm4gQn1mdW5jdGlvbiBxZChCLGope2lmKGo9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZJdCgibnVsbCBpcyBub3QgYSB2YWxpZCAiK3RoaXMubmFtZSksMDtqLiQkfHxJdCgnQ2Fubm90IHBhc3MgIicrQ3IoaikrJyIgYXMgYSAnK3RoaXMubmFtZSksai4kJC5wdHJ8fEl0KCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAiK3RoaXMubmFtZSk7dmFyIHE9ai4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcywkPWpjKGouJCQucHRyLHEsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiAkfWZ1bmN0aW9uIFdkKEIsail7dmFyIHE7aWYoaj09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkl0KCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSx0aGlzLmlzU21hcnRQb2ludGVyPyhxPXRoaXMucmF3Q29uc3RydWN0b3IoKSxCIT09bnVsbCYmQi5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvcixxKSxxKTowO2ouJCR8fEl0KCdDYW5ub3QgcGFzcyAiJytDcihqKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxqLiQkLnB0cnx8SXQoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKSwhdGhpcy5pc0NvbnN0JiZqLiQkLnB0clR5cGUuaXNDb25zdCYmSXQoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIisoai4kJC5zbWFydFB0clR5cGU/ai4kJC5zbWFydFB0clR5cGUubmFtZTpqLiQkLnB0clR5cGUubmFtZSkrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7dmFyICQ9ai4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcztpZihxPWpjKGouJCQucHRyLCQsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpLHRoaXMuaXNTbWFydFBvaW50ZXIpc3dpdGNoKGouJCQuc21hcnRQdHI9PT12b2lkIDAmJkl0KCJQYXNzaW5nIHJhdyBwb2ludGVyIHRvIHNtYXJ0IHBvaW50ZXIgaXMgaWxsZWdhbCIpLHRoaXMuc2hhcmluZ1BvbGljeSl7Y2FzZSAwOmouJCQuc21hcnRQdHJUeXBlPT09dGhpcz9xPWouJCQuc21hcnRQdHI6SXQoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIisoai4kJC5zbWFydFB0clR5cGU/ai4kJC5zbWFydFB0clR5cGUubmFtZTpqLiQkLnB0clR5cGUubmFtZSkrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7YnJlYWs7Y2FzZSAxOnE9ai4kJC5zbWFydFB0cjticmVhaztjYXNlIDI6aWYoai4kJC5zbWFydFB0clR5cGU9PT10aGlzKXE9ai4kJC5zbWFydFB0cjtlbHNle3ZhciB1ZT1qLmNsb25lKCk7cT10aGlzLnJhd1NoYXJlKHEsZGEoZnVuY3Rpb24oKXt1ZS5kZWxldGUoKX0pKSxCIT09bnVsbCYmQi5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvcixxKX1icmVhaztkZWZhdWx0Okl0KCJVbnN1cHBvcnRpbmcgc2hhcmluZyBwb2xpY3kiKX1yZXR1cm4gcX1mdW5jdGlvbiBYZChCLGope2lmKGo9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZJdCgibnVsbCBpcyBub3QgYSB2YWxpZCAiK3RoaXMubmFtZSksMDtqLiQkfHxJdCgnQ2Fubm90IHBhc3MgIicrQ3IoaikrJyIgYXMgYSAnK3RoaXMubmFtZSksai4kJC5wdHJ8fEl0KCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAiK3RoaXMubmFtZSksai4kJC5wdHJUeXBlLmlzQ29uc3QmJkl0KCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICIrai4kJC5wdHJUeXBlLm5hbWUrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7dmFyIHE9ai4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcywkPWpjKGouJCQucHRyLHEsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiAkfWZ1bmN0aW9uIFlkKEIpe3JldHVybiB0aGlzLnJhd0dldFBvaW50ZWUmJihCPXRoaXMucmF3R2V0UG9pbnRlZShCKSksQn1mdW5jdGlvbiBKZChCKXt0aGlzLnJhd0Rlc3RydWN0b3ImJnRoaXMucmF3RGVzdHJ1Y3RvcihCKX1mdW5jdGlvbiBaZChCKXtCIT09bnVsbCYmQi5kZWxldGUoKX1mdW5jdGlvbiBhZihCLGoscSl7aWYoaj09PXEpcmV0dXJuIEI7aWYocS5iYXNlQ2xhc3M9PT12b2lkIDApcmV0dXJuIG51bGw7dmFyICQ9YWYoQixqLHEuYmFzZUNsYXNzKTtyZXR1cm4gJD09PW51bGw/bnVsbDpxLmRvd25jYXN0KCQpfWZ1bmN0aW9uIFFkKCl7cmV0dXJuIE9iamVjdC5rZXlzKGlpKS5sZW5ndGh9ZnVuY3Rpb24gJGQoKXt2YXIgQj1bXTtmb3IodmFyIGogaW4gaWkpaWkuaGFzT3duUHJvcGVydHkoaikmJkIucHVzaChpaVtqXSk7cmV0dXJuIEJ9ZnVuY3Rpb24gZXUoQil7YWk9QixyaS5sZW5ndGgmJmFpJiZhaShCYyl9ZnVuY3Rpb24gdHUoKXt0LmdldEluaGVyaXRlZEluc3RhbmNlQ291bnQ9UWQsdC5nZXRMaXZlSW5oZXJpdGVkSW5zdGFuY2VzPSRkLHQuZmx1c2hQZW5kaW5nRGVsZXRlcz1CYyx0LnNldERlbGF5RnVuY3Rpb249ZXV9dmFyIGlpPXt9O2Z1bmN0aW9uIG51KEIsail7Zm9yKGo9PT12b2lkIDAmJkl0KCJwdHIgc2hvdWxkIG5vdCBiZSB1bmRlZmluZWQiKTtCLmJhc2VDbGFzczspaj1CLnVwY2FzdChqKSxCPUIuYmFzZUNsYXNzO3JldHVybiBqfWZ1bmN0aW9uIG91KEIsail7cmV0dXJuIGo9bnUoQixqKSxpaVtqXX1mdW5jdGlvbiBIaShCLGopeyghai5wdHJUeXBlfHwhai5wdHIpJiZPcigibWFrZUNsYXNzSGFuZGxlIHJlcXVpcmVzIHB0ciBhbmQgcHRyVHlwZSIpO3ZhciBxPSEhai5zbWFydFB0clR5cGUsJD0hIWouc21hcnRQdHI7cmV0dXJuIHEhPT0kJiZPcigiQm90aCBzbWFydFB0clR5cGUgYW5kIHNtYXJ0UHRyIG11c3QgYmUgc3BlY2lmaWVkIiksai5jb3VudD17dmFsdWU6MX0sb2koT2JqZWN0LmNyZWF0ZShCLHskJDp7dmFsdWU6an19KSl9ZnVuY3Rpb24gYXUoQil7dmFyIGo9dGhpcy5nZXRQb2ludGVlKEIpO2lmKCFqKXJldHVybiB0aGlzLmRlc3RydWN0b3IoQiksbnVsbDt2YXIgcT1vdSh0aGlzLnJlZ2lzdGVyZWRDbGFzcyxqKTtpZihxIT09dm9pZCAwKXtpZihxLiQkLmNvdW50LnZhbHVlPT09MClyZXR1cm4gcS4kJC5wdHI9aixxLiQkLnNtYXJ0UHRyPUIscS5jbG9uZSgpO3ZhciAkPXEuY2xvbmUoKTtyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKEIpLCR9ZnVuY3Rpb24gdWUoKXtyZXR1cm4gdGhpcy5pc1NtYXJ0UG9pbnRlcj9IaSh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLnBvaW50ZWVUeXBlLHB0cjpqLHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOkJ9KTpIaSh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLHB0cjpCfSl9dmFyIEFlPXRoaXMucmVnaXN0ZXJlZENsYXNzLmdldEFjdHVhbFR5cGUoaiksVGU9bmZbQWVdO2lmKCFUZSlyZXR1cm4gdWUuY2FsbCh0aGlzKTt2YXIgZ2U7dGhpcy5pc0NvbnN0P2dlPVRlLmNvbnN0UG9pbnRlclR5cGU6Z2U9VGUucG9pbnRlclR5cGU7dmFyIF9lPWFmKGosdGhpcy5yZWdpc3RlcmVkQ2xhc3MsZ2UucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gX2U9PT1udWxsP3VlLmNhbGwodGhpcyk6dGhpcy5pc1NtYXJ0UG9pbnRlcj9IaShnZS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6Z2UscHRyOl9lLHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOkJ9KTpIaShnZS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6Z2UscHRyOl9lfSl9ZnVuY3Rpb24gcnUoKXtmYS5wcm90b3R5cGUuZ2V0UG9pbnRlZT1ZZCxmYS5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj1KZCxmYS5wcm90b3R5cGUuYXJnUGFja0FkdmFuY2U9OCxmYS5wcm90b3R5cGUucmVhZFZhbHVlRnJvbVBvaW50ZXI9RW8sZmEucHJvdG90eXBlLmRlbGV0ZU9iamVjdD1aZCxmYS5wcm90b3R5cGUuZnJvbVdpcmVUeXBlPWF1fWZ1bmN0aW9uIGZhKEIsaixxLCQsdWUsQWUsVGUsZ2UsX2UsVWUsWGUpe3RoaXMubmFtZT1CLHRoaXMucmVnaXN0ZXJlZENsYXNzPWosdGhpcy5pc1JlZmVyZW5jZT1xLHRoaXMuaXNDb25zdD0kLHRoaXMuaXNTbWFydFBvaW50ZXI9dWUsdGhpcy5wb2ludGVlVHlwZT1BZSx0aGlzLnNoYXJpbmdQb2xpY3k9VGUsdGhpcy5yYXdHZXRQb2ludGVlPWdlLHRoaXMucmF3Q29uc3RydWN0b3I9X2UsdGhpcy5yYXdTaGFyZT1VZSx0aGlzLnJhd0Rlc3RydWN0b3I9WGUsIXVlJiZqLmJhc2VDbGFzcz09PXZvaWQgMD8kPyh0aGlzLnRvV2lyZVR5cGU9cWQsdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6KHRoaXMudG9XaXJlVHlwZT1YZCx0aGlzLmRlc3RydWN0b3JGdW5jdGlvbj1udWxsKTp0aGlzLnRvV2lyZVR5cGU9V2R9ZnVuY3Rpb24gcmYoQixqLHEpe3QuaGFzT3duUHJvcGVydHkoQil8fE9yKCJSZXBsYWNpbmcgbm9uZXhpc3RhbnQgcHVibGljIHN5bWJvbCIpLHRbQl0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmcSE9PXZvaWQgMD90W0JdLm92ZXJsb2FkVGFibGVbcV09ajoodFtCXT1qLHRbQl0uYXJnQ291bnQ9cSl9ZnVuY3Rpb24gaXUoQixqLHEpe3ZhciAkPXRbImR5bkNhbGxfIitCXTtyZXR1cm4gcSYmcS5sZW5ndGg/JC5hcHBseShudWxsLFtqXS5jb25jYXQocSkpOiQuY2FsbChudWxsLGopfWZ1bmN0aW9uIGN1KEIsaixxKXtyZXR1cm4gQi5pbmRleE9mKCJqIikhPS0xP2l1KEIsaixxKTpxZS5nZXQoaikuYXBwbHkobnVsbCxxKX1mdW5jdGlvbiBzdShCLGope3ZhciBxPVtdO3JldHVybiBmdW5jdGlvbigpe3EubGVuZ3RoPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHZhciAkPTA7JDxhcmd1bWVudHMubGVuZ3RoOyQrKylxWyRdPWFyZ3VtZW50c1skXTtyZXR1cm4gY3UoQixqLHEpfX1mdW5jdGlvbiBLbyhCLGope0I9TG4oQik7ZnVuY3Rpb24gcSgpe3JldHVybiBCLmluZGV4T2YoImoiKSE9LTE/c3UoQixqKTpxZS5nZXQoail9dmFyICQ9cSgpO3JldHVybiB0eXBlb2YgJCE9ImZ1bmN0aW9uIiYmSXQoInVua25vd24gZnVuY3Rpb24gcG9pbnRlciB3aXRoIHNpZ25hdHVyZSAiK0IrIjogIitqKSwkfXZhciBjZj12b2lkIDA7ZnVuY3Rpb24gc2YoQil7dmFyIGo9dGUoQikscT1MbihqKTtyZXR1cm4gSChqKSxxfWZ1bmN0aW9uIEtpKEIsail7dmFyIHE9W10sJD17fTtmdW5jdGlvbiB1ZShBZSl7aWYoISRbQWVdJiYhSG9bQWVdKXtpZih2YVtBZV0pe3ZhW0FlXS5mb3JFYWNoKHVlKTtyZXR1cm59cS5wdXNoKEFlKSwkW0FlXT0hMH19dGhyb3cgai5mb3JFYWNoKHVlKSxuZXcgY2YoQisiOiAiK3EubWFwKHNmKS5qb2luKFsiLCAiXSkpfWZ1bmN0aW9uIGZ1KEIsaixxLCQsdWUsQWUsVGUsZ2UsX2UsVWUsWGUsbHQsZW4pe1hlPUxuKFhlKSxBZT1Lbyh1ZSxBZSksZ2UmJihnZT1LbyhUZSxnZSkpLFVlJiYoVWU9S28oX2UsVWUpKSxlbj1LbyhsdCxlbik7dmFyIGduPXRpKFhlKTtVYyhnbixmdW5jdGlvbigpe0tpKCJDYW5ub3QgY29uc3RydWN0ICIrWGUrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsWyRdKX0pLGNvKFtCLGoscV0sJD9bJF06W10sZnVuY3Rpb24oc28pe3NvPXNvWzBdO3ZhciBrbyx1YTskPyhrbz1zby5yZWdpc3RlcmVkQ2xhc3MsdWE9a28uaW5zdGFuY2VQcm90b3R5cGUpOnVhPUJhLnByb3RvdHlwZTt2YXIgJGE9RmEoZ24sZnVuY3Rpb24oKXtpZihPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykhPT1tZil0aHJvdyBuZXcgU3IoIlVzZSAnbmV3JyB0byBjb25zdHJ1Y3QgIitYZSk7aWYoTnIuY29uc3RydWN0b3JfYm9keT09PXZvaWQgMCl0aHJvdyBuZXcgU3IoWGUrIiBoYXMgbm8gYWNjZXNzaWJsZSBjb25zdHJ1Y3RvciIpO3ZhciB4MT1Oci5jb25zdHJ1Y3Rvcl9ib2R5W2FyZ3VtZW50cy5sZW5ndGhdO2lmKHgxPT09dm9pZCAwKXRocm93IG5ldyBTcigiVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgIitYZSsiIHdpdGggaW52YWxpZCBudW1iZXIgb2YgcGFyYW1ldGVycyAoIithcmd1bWVudHMubGVuZ3RoKyIpIC0gZXhwZWN0ZWQgKCIrT2JqZWN0LmtleXMoTnIuY29uc3RydWN0b3JfYm9keSkudG9TdHJpbmcoKSsiKSBwYXJhbWV0ZXJzIGluc3RlYWQhIik7cmV0dXJuIHgxLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLG1mPU9iamVjdC5jcmVhdGUodWEse2NvbnN0cnVjdG9yOnt2YWx1ZTokYX19KTskYS5wcm90b3R5cGU9bWY7dmFyIE5yPW5ldyBLZChYZSwkYSxtZixlbixrbyxBZSxnZSxVZSksV1M9bmV3IGZhKFhlLE5yLCEwLCExLCExKSxFMT1uZXcgZmEoWGUrIioiLE5yLCExLCExLCExKSxSMT1uZXcgZmEoWGUrIiBjb25zdCoiLE5yLCExLCEwLCExKTtyZXR1cm4gbmZbQl09e3BvaW50ZXJUeXBlOkUxLGNvbnN0UG9pbnRlclR5cGU6UjF9LHJmKGduLCRhKSxbV1MsRTEsUjFdfSl9ZnVuY3Rpb24gTGMoQixqKXtmb3IodmFyIHE9W10sJD0wOyQ8QjskKyspcS5wdXNoKHplWyhqPj4yKSskXSk7cmV0dXJuIHF9ZnVuY3Rpb24gZHUoQixqLHEsJCx1ZSxBZSl7dihqPjApO3ZhciBUZT1MYyhqLHEpO3VlPUtvKCQsdWUpO3ZhciBnZT1bQWVdLF9lPVtdO2NvKFtdLFtCXSxmdW5jdGlvbihVZSl7VWU9VWVbMF07dmFyIFhlPSJjb25zdHJ1Y3RvciAiK1VlLm5hbWU7aWYoVWUucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHk9PT12b2lkIDAmJihVZS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keT1bXSksVWUucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbai0xXSE9PXZvaWQgMCl0aHJvdyBuZXcgU3IoIkNhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBjb25zdHJ1Y3RvcnMgd2l0aCBpZGVudGljYWwgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKCIrKGotMSkrIikgZm9yIGNsYXNzICciK1VlLm5hbWUrIichIE92ZXJsb2FkIHJlc29sdXRpb24gaXMgY3VycmVudGx5IG9ubHkgcGVyZm9ybWVkIHVzaW5nIHRoZSBwYXJhbWV0ZXIgY291bnQsIG5vdCBhY3R1YWwgdHlwZSBpbmZvISIpO3JldHVybiBVZS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtqLTFdPWZ1bmN0aW9uKCl7S2koIkNhbm5vdCBjb25zdHJ1Y3QgIitVZS5uYW1lKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLFRlKX0sY28oW10sVGUsZnVuY3Rpb24obHQpe3JldHVybiBVZS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtqLTFdPWZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aCE9PWotMSYmSXQoWGUrIiBjYWxsZWQgd2l0aCAiK2FyZ3VtZW50cy5sZW5ndGgrIiBhcmd1bWVudHMsIGV4cGVjdGVkICIrKGotMSkpLF9lLmxlbmd0aD0wLGdlLmxlbmd0aD1qO2Zvcih2YXIgZ249MTtnbjxqOysrZ24pZ2VbZ25dPWx0W2duXS50b1dpcmVUeXBlKF9lLGFyZ3VtZW50c1tnbi0xXSk7dmFyIHNvPXVlLmFwcGx5KG51bGwsZ2UpO3JldHVybiBhbihfZSksbHRbMF0uZnJvbVdpcmVUeXBlKHNvKX0sW119KSxbXX0pfWZ1bmN0aW9uIGZmKEIsail7aWYoIShCIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoIm5ld18gY2FsbGVkIHdpdGggY29uc3RydWN0b3IgdHlwZSAiK3R5cGVvZiBCKyIgd2hpY2ggaXMgbm90IGEgZnVuY3Rpb24iKTt2YXIgcT1GYShCLm5hbWV8fCJ1bmtub3duRnVuY3Rpb25OYW1lIixmdW5jdGlvbigpe30pO3EucHJvdG90eXBlPUIucHJvdG90eXBlO3ZhciAkPW5ldyBxLHVlPUIuYXBwbHkoJCxqKTtyZXR1cm4gdWUgaW5zdGFuY2VvZiBPYmplY3Q/dWU6JH1mdW5jdGlvbiBkZihCLGoscSwkLHVlKXt2YXIgQWU9ai5sZW5ndGg7QWU8MiYmSXQoImFyZ1R5cGVzIGFycmF5IHNpemUgbWlzbWF0Y2ghIE11c3QgYXQgbGVhc3QgZ2V0IHJldHVybiB2YWx1ZSBhbmQgJ3RoaXMnIHR5cGVzISIpO2Zvcih2YXIgVGU9alsxXSE9PW51bGwmJnEhPT1udWxsLGdlPSExLF9lPTE7X2U8ai5sZW5ndGg7KytfZSlpZihqW19lXSE9PW51bGwmJmpbX2VdLmRlc3RydWN0b3JGdW5jdGlvbj09PXZvaWQgMCl7Z2U9ITA7YnJlYWt9Zm9yKHZhciBVZT1qWzBdLm5hbWUhPT0idm9pZCIsWGU9IiIsbHQ9IiIsX2U9MDtfZTxBZS0yOysrX2UpWGUrPShfZSE9PTA/IiwgIjoiIikrImFyZyIrX2UsbHQrPShfZSE9PTA/IiwgIjoiIikrImFyZyIrX2UrIldpcmVkIjt2YXIgZW49InJldHVybiBmdW5jdGlvbiAiK3RpKEIpKyIoIitYZStgKSB7CmlmIChhcmd1bWVudHMubGVuZ3RoICE9PSBgKyhBZS0yKStgKSB7CnRocm93QmluZGluZ0Vycm9yKCdmdW5jdGlvbiBgK0IrIiBjYWxsZWQgd2l0aCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLCBleHBlY3RlZCAiKyhBZS0yKStgIGFyZ3MhJyk7Cn0KYDtnZSYmKGVuKz1gdmFyIGRlc3RydWN0b3JzID0gW107CmApO3ZhciBnbj1nZT8iZGVzdHJ1Y3RvcnMiOiJudWxsIixzbz1bInRocm93QmluZGluZ0Vycm9yIiwiaW52b2tlciIsImZuIiwicnVuRGVzdHJ1Y3RvcnMiLCJyZXRUeXBlIiwiY2xhc3NQYXJhbSJdLGtvPVtJdCwkLHVlLGFuLGpbMF0salsxXV07VGUmJihlbis9InZhciB0aGlzV2lyZWQgPSBjbGFzc1BhcmFtLnRvV2lyZVR5cGUoIitnbitgLCB0aGlzKTsKYCk7Zm9yKHZhciBfZT0wO19lPEFlLTI7KytfZSllbis9InZhciBhcmciK19lKyJXaXJlZCA9IGFyZ1R5cGUiK19lKyIudG9XaXJlVHlwZSgiK2duKyIsIGFyZyIrX2UrIik7IC8vICIraltfZSsyXS5uYW1lK2AKYCxzby5wdXNoKCJhcmdUeXBlIitfZSksa28ucHVzaChqW19lKzJdKTtpZihUZSYmKGx0PSJ0aGlzV2lyZWQiKyhsdC5sZW5ndGg+MD8iLCAiOiIiKStsdCksZW4rPShVZT8idmFyIHJ2ID0gIjoiIikrImludm9rZXIoZm4iKyhsdC5sZW5ndGg+MD8iLCAiOiIiKStsdCtgKTsKYCxnZSllbis9YHJ1bkRlc3RydWN0b3JzKGRlc3RydWN0b3JzKTsKYDtlbHNlIGZvcih2YXIgX2U9VGU/MToyO19lPGoubGVuZ3RoOysrX2Upe3ZhciB1YT1fZT09PTE/InRoaXNXaXJlZCI6ImFyZyIrKF9lLTIpKyJXaXJlZCI7altfZV0uZGVzdHJ1Y3RvckZ1bmN0aW9uIT09bnVsbCYmKGVuKz11YSsiX2R0b3IoIit1YSsiKTsgLy8gIitqW19lXS5uYW1lK2AKYCxzby5wdXNoKHVhKyJfZHRvciIpLGtvLnB1c2goaltfZV0uZGVzdHJ1Y3RvckZ1bmN0aW9uKSl9VWUmJihlbis9YHZhciByZXQgPSByZXRUeXBlLmZyb21XaXJlVHlwZShydik7CnJldHVybiByZXQ7CmApLGVuKz1gfQpgLHNvLnB1c2goZW4pO3ZhciAkYT1mZihGdW5jdGlvbixzbykuYXBwbHkobnVsbCxrbyk7cmV0dXJuICRhfWZ1bmN0aW9uIHV1KEIsaixxLCQsdWUsQWUsVGUsZ2Upe3ZhciBfZT1MYyhxLCQpO2o9TG4oaiksQWU9S28odWUsQWUpLGNvKFtdLFtCXSxmdW5jdGlvbihVZSl7VWU9VWVbMF07dmFyIFhlPVVlLm5hbWUrIi4iK2o7Z2UmJlVlLnJlZ2lzdGVyZWRDbGFzcy5wdXJlVmlydHVhbEZ1bmN0aW9ucy5wdXNoKGopO2Z1bmN0aW9uIGx0KCl7S2koIkNhbm5vdCBjYWxsICIrWGUrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsX2UpfXZhciBlbj1VZS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsZ249ZW5bal07cmV0dXJuIGduPT09dm9pZCAwfHxnbi5vdmVybG9hZFRhYmxlPT09dm9pZCAwJiZnbi5jbGFzc05hbWUhPT1VZS5uYW1lJiZnbi5hcmdDb3VudD09PXEtMj8obHQuYXJnQ291bnQ9cS0yLGx0LmNsYXNzTmFtZT1VZS5uYW1lLGVuW2pdPWx0KToob2YoZW4saixYZSksZW5bal0ub3ZlcmxvYWRUYWJsZVtxLTJdPWx0KSxjbyhbXSxfZSxmdW5jdGlvbihzbyl7dmFyIGtvPWRmKFhlLHNvLFVlLEFlLFRlKTtyZXR1cm4gZW5bal0ub3ZlcmxvYWRUYWJsZT09PXZvaWQgMD8oa28uYXJnQ291bnQ9cS0yLGVuW2pdPWtvKTplbltqXS5vdmVybG9hZFRhYmxlW3EtMl09a28sW119KSxbXX0pfWZ1bmN0aW9uIGx1KEIsaixxKXtCPUxuKEIpLGNvKFtdLFtqXSxmdW5jdGlvbigkKXtyZXR1cm4gJD0kWzBdLHRbQl09JC5mcm9tV2lyZVR5cGUocSksW119KX12YXIgemM9W10sUm89W3t9LHt2YWx1ZTp2b2lkIDB9LHt2YWx1ZTpudWxsfSx7dmFsdWU6ITB9LHt2YWx1ZTohMX1dO2Z1bmN0aW9uIEdjKEIpe0I+NCYmLS1Sb1tCXS5yZWZjb3VudD09PTAmJihSb1tCXT12b2lkIDAsemMucHVzaChCKSl9ZnVuY3Rpb24gaHUoKXtmb3IodmFyIEI9MCxqPTU7ajxSby5sZW5ndGg7KytqKVJvW2pdIT09dm9pZCAwJiYrK0I7cmV0dXJuIEJ9ZnVuY3Rpb24gbXUoKXtmb3IodmFyIEI9NTtCPFJvLmxlbmd0aDsrK0IpaWYoUm9bQl0hPT12b2lkIDApcmV0dXJuIFJvW0JdO3JldHVybiBudWxsfWZ1bmN0aW9uIGJ1KCl7dC5jb3VudF9lbXZhbF9oYW5kbGVzPWh1LHQuZ2V0X2ZpcnN0X2VtdmFsPW11fWZ1bmN0aW9uIGRhKEIpe3N3aXRjaChCKXtjYXNlIHZvaWQgMDpyZXR1cm4gMTtjYXNlIG51bGw6cmV0dXJuIDI7Y2FzZSEwOnJldHVybiAzO2Nhc2UhMTpyZXR1cm4gNDtkZWZhdWx0Ont2YXIgaj16Yy5sZW5ndGg/emMucG9wKCk6Um8ubGVuZ3RoO3JldHVybiBSb1tqXT17cmVmY291bnQ6MSx2YWx1ZTpCfSxqfX19ZnVuY3Rpb24gcHUoQixqKXtqPUxuKGopLG9hKEIse25hbWU6aixmcm9tV2lyZVR5cGU6ZnVuY3Rpb24ocSl7dmFyICQ9Um9bcV0udmFsdWU7cmV0dXJuIEdjKHEpLCR9LHRvV2lyZVR5cGU6ZnVuY3Rpb24ocSwkKXtyZXR1cm4gZGEoJCl9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6RW8sZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiBndShCLGoscSl7c3dpdGNoKGope2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oJCl7dmFyIHVlPXE/ZWU6RWU7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHVlWyRdKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbigkKXt2YXIgdWU9cT9DZTpXZTtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUodWVbJD4+MV0pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKCQpe3ZhciB1ZT1xP3plOlplO3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh1ZVskPj4yXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBpbnRlZ2VyIHR5cGU6ICIrQil9fWZ1bmN0aW9uIF91KEIsaixxLCQpe3ZhciB1ZT1EYShxKTtqPUxuKGopO2Z1bmN0aW9uIEFlKCl7fUFlLnZhbHVlcz17fSxvYShCLHtuYW1lOmosY29uc3RydWN0b3I6QWUsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKFRlKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci52YWx1ZXNbVGVdfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKFRlLGdlKXtyZXR1cm4gZ2UudmFsdWV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6Z3Uoaix1ZSwkKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pLFVjKGosQWUpfWZ1bmN0aW9uIHFpKEIsail7dmFyIHE9SG9bQl07cmV0dXJuIHE9PT12b2lkIDAmJkl0KGorIiBoYXMgdW5rbm93biB0eXBlICIrc2YoQikpLHF9ZnVuY3Rpb24geXUoQixqLHEpe3ZhciAkPXFpKEIsImVudW0iKTtqPUxuKGopO3ZhciB1ZT0kLmNvbnN0cnVjdG9yLEFlPU9iamVjdC5jcmVhdGUoJC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUse3ZhbHVlOnt2YWx1ZTpxfSxjb25zdHJ1Y3Rvcjp7dmFsdWU6RmEoJC5uYW1lKyJfIitqLGZ1bmN0aW9uKCl7fSl9fSk7dWUudmFsdWVzW3FdPUFlLHVlW2pdPUFlfWZ1bmN0aW9uIENyKEIpe2lmKEI9PT1udWxsKXJldHVybiJudWxsIjt2YXIgaj10eXBlb2YgQjtyZXR1cm4gaj09PSJvYmplY3QifHxqPT09ImFycmF5Inx8aj09PSJmdW5jdGlvbiI/Qi50b1N0cmluZygpOiIiK0J9ZnVuY3Rpb24gQXUoQixqKXtzd2l0Y2goail7Y2FzZSAyOnJldHVybiBmdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoS2VbcT4+Ml0pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHEpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShEZVtxPj4zXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBmbG9hdCB0eXBlOiAiK0IpfX1mdW5jdGlvbiB3dShCLGoscSl7dmFyICQ9RGEocSk7aj1MbihqKSxvYShCLHtuYW1lOmosZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKHVlKXtyZXR1cm4gdWV9LHRvV2lyZVR5cGU6ZnVuY3Rpb24odWUsQWUpe2lmKHR5cGVvZiBBZSE9Im51bWJlciImJnR5cGVvZiBBZSE9ImJvb2xlYW4iKXRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICInK0NyKEFlKSsnIiB0byAnK3RoaXMubmFtZSk7cmV0dXJuIEFlfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOkF1KGosJCksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiBUdShCLGoscSwkLHVlLEFlKXt2YXIgVGU9TGMoaixxKTtCPUxuKEIpLHVlPUtvKCQsdWUpLFVjKEIsZnVuY3Rpb24oKXtLaSgiQ2Fubm90IGNhbGwgIitCKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLFRlKX0sai0xKSxjbyhbXSxUZSxmdW5jdGlvbihnZSl7dmFyIF9lPVtnZVswXSxudWxsXS5jb25jYXQoZ2Uuc2xpY2UoMSkpO3JldHVybiByZihCLGRmKEIsX2UsbnVsbCx1ZSxBZSksai0xKSxbXX0pfWZ1bmN0aW9uIEV1KEIsaixxKXtzd2l0Y2goail7Y2FzZSAwOnJldHVybiBxP2Z1bmN0aW9uKHVlKXtyZXR1cm4gZWVbdWVdfTpmdW5jdGlvbih1ZSl7cmV0dXJuIEVlW3VlXX07Y2FzZSAxOnJldHVybiBxP2Z1bmN0aW9uKHVlKXtyZXR1cm4gQ2VbdWU+PjFdfTpmdW5jdGlvbih1ZSl7cmV0dXJuIFdlW3VlPj4xXX07Y2FzZSAyOnJldHVybiBxP2Z1bmN0aW9uKHVlKXtyZXR1cm4gemVbdWU+PjJdfTpmdW5jdGlvbih1ZSl7cmV0dXJuIFplW3VlPj4yXX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGludGVnZXIgdHlwZTogIitCKX19ZnVuY3Rpb24gUnUoQixqLHEsJCx1ZSl7aj1MbihqKSx1ZT09PS0xJiYodWU9NDI5NDk2NzI5NSk7dmFyIEFlPURhKHEpLFRlPWZ1bmN0aW9uKFVlKXtyZXR1cm4gVWV9O2lmKCQ9PT0wKXt2YXIgZ2U9MzItOCpxO1RlPWZ1bmN0aW9uKFVlKXtyZXR1cm4gVWU8PGdlPj4+Z2V9fXZhciBfZT1qLmluZGV4T2YoInVuc2lnbmVkIikhPS0xO29hKEIse25hbWU6aixmcm9tV2lyZVR5cGU6VGUsdG9XaXJlVHlwZTpmdW5jdGlvbihVZSxYZSl7aWYodHlwZW9mIFhlIT0ibnVtYmVyIiYmdHlwZW9mIFhlIT0iYm9vbGVhbiIpdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgIicrQ3IoWGUpKyciIHRvICcrdGhpcy5uYW1lKTtpZihYZTwkfHxYZT51ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXNzaW5nIGEgbnVtYmVyICInK0NyKFhlKSsnIiBmcm9tIEpTIHNpZGUgdG8gQy9DKysgc2lkZSB0byBhbiBhcmd1bWVudCBvZiB0eXBlICInK2orJyIsIHdoaWNoIGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIFsnKyQrIiwgIit1ZSsiXSEiKTtyZXR1cm4gX2U/WGU+Pj4wOlhlfDB9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6RXUoaixBZSwkIT09MCksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiB4dShCLGoscSl7dmFyICQ9W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XSx1ZT0kW2pdO2Z1bmN0aW9uIEFlKFRlKXtUZT1UZT4+Mjt2YXIgZ2U9WmUsX2U9Z2VbVGVdLFVlPWdlW1RlKzFdO3JldHVybiBuZXcgdWUobGUsVWUsX2UpfXE9TG4ocSksb2EoQix7bmFtZTpxLGZyb21XaXJlVHlwZTpBZSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOkFlfSx7aWdub3JlRHVwbGljYXRlUmVnaXN0cmF0aW9uczohMH0pfWZ1bmN0aW9uIE91KEIsail7aj1MbihqKTt2YXIgcT1qPT09InN0ZDo6c3RyaW5nIjtvYShCLHtuYW1lOmosZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKCQpe3ZhciB1ZT1aZVskPj4yXSxBZTtpZihxKWZvcih2YXIgVGU9JCs0LGdlPTA7Z2U8PXVlOysrZ2Upe3ZhciBfZT0kKzQrZ2U7aWYoZ2U9PXVlfHxFZVtfZV09PTApe3ZhciBVZT1fZS1UZSxYZT1EKFRlLFVlKTtBZT09PXZvaWQgMD9BZT1YZTooQWUrPSJcMCIsQWUrPVhlKSxUZT1fZSsxfX1lbHNle2Zvcih2YXIgbHQ9bmV3IEFycmF5KHVlKSxnZT0wO2dlPHVlOysrZ2UpbHRbZ2VdPVN0cmluZy5mcm9tQ2hhckNvZGUoRWVbJCs0K2dlXSk7QWU9bHQuam9pbigiIil9cmV0dXJuIEgoJCksQWV9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oJCx1ZSl7dWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmKHVlPW5ldyBVaW50OEFycmF5KHVlKSk7dmFyIEFlLFRlPXR5cGVvZiB1ZT09InN0cmluZyI7VGV8fHVlIGluc3RhbmNlb2YgVWludDhBcnJheXx8dWUgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8dWUgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fEl0KCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIHN0ZDo6c3RyaW5nIikscSYmVGU/QWU9ZnVuY3Rpb24oKXtyZXR1cm4gTyh1ZSl9OkFlPWZ1bmN0aW9uKCl7cmV0dXJuIHVlLmxlbmd0aH07dmFyIGdlPUFlKCksX2U9eig0K2dlKzEpO2lmKFplW19lPj4yXT1nZSxxJiZUZSlWKHVlLF9lKzQsZ2UrMSk7ZWxzZSBpZihUZSlmb3IodmFyIFVlPTA7VWU8Z2U7KytVZSl7dmFyIFhlPXVlLmNoYXJDb2RlQXQoVWUpO1hlPjI1NSYmKEgoX2UpLEl0KCJTdHJpbmcgaGFzIFVURi0xNiBjb2RlIHVuaXRzIHRoYXQgZG8gbm90IGZpdCBpbiA4IGJpdHMiKSksRWVbX2UrNCtVZV09WGV9ZWxzZSBmb3IodmFyIFVlPTA7VWU8Z2U7KytVZSlFZVtfZSs0K1VlXT11ZVtVZV07cmV0dXJuICQhPT1udWxsJiYkLnB1c2goSCxfZSksX2V9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6RW8sZGVzdHJ1Y3RvckZ1bmN0aW9uOmZ1bmN0aW9uKCQpe0goJCl9fSl9ZnVuY3Rpb24gU3UoQixqLHEpe3E9TG4ocSk7dmFyICQsdWUsQWUsVGUsZ2U7aj09PTI/KCQ9cmUsdWU9c2UsVGU9b2UsQWU9ZnVuY3Rpb24oKXtyZXR1cm4gV2V9LGdlPTEpOmo9PT00JiYoJD1jZSx1ZT1tZSxUZT1kZSxBZT1mdW5jdGlvbigpe3JldHVybiBaZX0sZ2U9Miksb2EoQix7bmFtZTpxLGZyb21XaXJlVHlwZTpmdW5jdGlvbihfZSl7Zm9yKHZhciBVZT1aZVtfZT4+Ml0sWGU9QWUoKSxsdCxlbj1fZSs0LGduPTA7Z248PVVlOysrZ24pe3ZhciBzbz1fZSs0K2duKmo7aWYoZ249PVVlfHxYZVtzbz4+Z2VdPT0wKXt2YXIga289c28tZW4sdWE9JChlbixrbyk7bHQ9PT12b2lkIDA/bHQ9dWE6KGx0Kz0iXDAiLGx0Kz11YSksZW49c28ran19cmV0dXJuIEgoX2UpLGx0fSx0b1dpcmVUeXBlOmZ1bmN0aW9uKF9lLFVlKXt0eXBlb2YgVWUhPSJzdHJpbmciJiZJdCgiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBDKysgc3RyaW5nIHR5cGUgIitxKTt2YXIgWGU9VGUoVWUpLGx0PXooNCtYZStqKTtyZXR1cm4gWmVbbHQ+PjJdPVhlPj5nZSx1ZShVZSxsdCs0LFhlK2opLF9lIT09bnVsbCYmX2UucHVzaChILGx0KSxsdH0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpFbyxkZXN0cnVjdG9yRnVuY3Rpb246ZnVuY3Rpb24oX2Upe0goX2UpfX0pfWZ1bmN0aW9uIEN1KEIsaixxLCQsdWUsQWUpe0R0W0JdPXtuYW1lOkxuKGopLHJhd0NvbnN0cnVjdG9yOktvKHEsJCkscmF3RGVzdHJ1Y3RvcjpLbyh1ZSxBZSksZmllbGRzOltdfX1mdW5jdGlvbiBNdShCLGoscSwkLHVlLEFlLFRlLGdlLF9lLFVlKXtEdFtCXS5maWVsZHMucHVzaCh7ZmllbGROYW1lOkxuKGopLGdldHRlclJldHVyblR5cGU6cSxnZXR0ZXI6S28oJCx1ZSksZ2V0dGVyQ29udGV4dDpBZSxzZXR0ZXJBcmd1bWVudFR5cGU6VGUsc2V0dGVyOktvKGdlLF9lKSxzZXR0ZXJDb250ZXh0OlVlfSl9ZnVuY3Rpb24gTnUoQixqKXtqPUxuKGopLG9hKEIse2lzVm9pZDohMCxuYW1lOmosYXJnUGFja0FkdmFuY2U6MCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oKXt9LHRvV2lyZVR5cGU6ZnVuY3Rpb24ocSwkKXt9fSl9ZnVuY3Rpb24gY2koQil7cmV0dXJuIEJ8fEl0KCJDYW5ub3QgdXNlIGRlbGV0ZWQgdmFsLiBoYW5kbGUgPSAiK0IpLFJvW0JdLnZhbHVlfWZ1bmN0aW9uIEl1KEIsaixxKXtCPWNpKEIpLGo9cWkoaiwiZW12YWw6OmFzIik7dmFyICQ9W10sdWU9ZGEoJCk7cmV0dXJuIHplW3E+PjJdPXVlLGoudG9XaXJlVHlwZSgkLEIpfXZhciBQdT17fTtmdW5jdGlvbiBXaShCKXt2YXIgaj1QdVtCXTtyZXR1cm4gaj09PXZvaWQgMD9MbihCKTpqfXZhciBWYz1bXTtmdW5jdGlvbiBrdShCLGoscSwkKXtCPVZjW0JdLGo9Y2koaikscT1XaShxKSxCKGoscSxudWxsLCQpfWZ1bmN0aW9uIHVmKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPT0ib2JqZWN0Ij9nbG9iYWxUaGlzOihmdW5jdGlvbigpe3JldHVybiBGdW5jdGlvbn0pKCkoInJldHVybiB0aGlzIikoKX1mdW5jdGlvbiB2dShCKXtyZXR1cm4gQj09PTA/ZGEodWYoKSk6KEI9V2koQiksZGEodWYoKVtCXSkpfWZ1bmN0aW9uIEZ1KEIpe3ZhciBqPVZjLmxlbmd0aDtyZXR1cm4gVmMucHVzaChCKSxqfWZ1bmN0aW9uIER1KEIsail7Zm9yKHZhciBxPW5ldyBBcnJheShCKSwkPTA7JDxCOysrJClxWyRdPXFpKHplWyhqPj4yKSskXSwicGFyYW1ldGVyICIrJCk7cmV0dXJuIHF9ZnVuY3Rpb24gQnUoQixqKXtmb3IodmFyIHE9RHUoQixqKSwkPXFbMF0sdWU9JC5uYW1lKyJfJCIrcS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oZ24pe3JldHVybiBnbi5uYW1lfSkuam9pbigiXyIpKyIkIixBZT1bInJldFR5cGUiXSxUZT1bJF0sZ2U9IiIsX2U9MDtfZTxCLTE7KytfZSlnZSs9KF9lIT09MD8iLCAiOiIiKSsiYXJnIitfZSxBZS5wdXNoKCJhcmdUeXBlIitfZSksVGUucHVzaChxWzErX2VdKTtmb3IodmFyIFVlPXRpKCJtZXRob2RDYWxsZXJfIit1ZSksWGU9InJldHVybiBmdW5jdGlvbiAiK1VlK2AoaGFuZGxlLCBuYW1lLCBkZXN0cnVjdG9ycywgYXJncykgewpgLGx0PTAsX2U9MDtfZTxCLTE7KytfZSlYZSs9IiAgICB2YXIgYXJnIitfZSsiID0gYXJnVHlwZSIrX2UrIi5yZWFkVmFsdWVGcm9tUG9pbnRlcihhcmdzIisobHQ/IisiK2x0OiIiKStgKTsKYCxsdCs9cVtfZSsxXS5hcmdQYWNrQWR2YW5jZTtYZSs9IiAgICB2YXIgcnYgPSBoYW5kbGVbbmFtZV0oIitnZStgKTsKYDtmb3IodmFyIF9lPTA7X2U8Qi0xOysrX2UpcVtfZSsxXS5kZWxldGVPYmplY3QmJihYZSs9IiAgICBhcmdUeXBlIitfZSsiLmRlbGV0ZU9iamVjdChhcmciK19lK2ApOwpgKTskLmlzVm9pZHx8KFhlKz1gICAgIHJldHVybiByZXRUeXBlLnRvV2lyZVR5cGUoZGVzdHJ1Y3RvcnMsIHJ2KTsKYCksWGUrPWB9OwpgLEFlLnB1c2goWGUpO3ZhciBlbj1mZihGdW5jdGlvbixBZSkuYXBwbHkobnVsbCxUZSk7cmV0dXJuIEZ1KGVuKX1mdW5jdGlvbiBVdShCKXtyZXR1cm4gQj1XaShCKSxkYSh0W0JdKX1mdW5jdGlvbiBqdShCLGope3JldHVybiBCPWNpKEIpLGo9Y2koaiksZGEoQltqXSl9ZnVuY3Rpb24gTHUoQil7Qj40JiYoUm9bQl0ucmVmY291bnQrPTEpfWZ1bmN0aW9uIHp1KEIpe2Zvcih2YXIgaj0iIixxPTA7cTxCOysrcSlqKz0ocSE9PTA/IiwgIjoiIikrImFyZyIrcTtmb3IodmFyICQ9InJldHVybiBmdW5jdGlvbiBlbXZhbF9hbGxvY2F0b3JfIitCK2AoY29uc3RydWN0b3IsIGFyZ1R5cGVzLCBhcmdzKSB7CmAscT0wO3E8QjsrK3EpJCs9InZhciBhcmdUeXBlIitxKyIgPSByZXF1aXJlUmVnaXN0ZXJlZFR5cGUoTW9kdWxlWydIRUFQMzInXVsoYXJnVHlwZXMgPj4+IDIpICsgIitxKyddLCAicGFyYW1ldGVyICcrcStgIik7CnZhciBhcmdgK3ErIiA9IGFyZ1R5cGUiK3ErYC5yZWFkVmFsdWVGcm9tUG9pbnRlcihhcmdzKTsKYXJncyArPSBhcmdUeXBlYCtxK2BbJ2FyZ1BhY2tBZHZhbmNlJ107CmA7cmV0dXJuICQrPSJ2YXIgb2JqID0gbmV3IGNvbnN0cnVjdG9yKCIraitgKTsKcmV0dXJuIF9fZW12YWxfcmVnaXN0ZXIob2JqKTsKfQpgLG5ldyBGdW5jdGlvbigicmVxdWlyZVJlZ2lzdGVyZWRUeXBlIiwiTW9kdWxlIiwiX19lbXZhbF9yZWdpc3RlciIsJCkocWksdCxkYSl9dmFyIGxmPXt9O2Z1bmN0aW9uIEd1KEIsaixxLCQpe0I9Y2koQik7dmFyIHVlPWxmW2pdO3JldHVybiB1ZXx8KHVlPXp1KGopLGxmW2pdPXVlKSx1ZShCLHEsJCl9ZnVuY3Rpb24gVnUoQil7cmV0dXJuIGRhKFdpKEIpKX1mdW5jdGlvbiBIdShCKXt2YXIgaj1Sb1tCXS52YWx1ZTthbihqKSxHYyhCKX1mdW5jdGlvbiBLdSgpe0Z0KCl9ZnVuY3Rpb24gcXUoQixqLHEpe0VlLmNvcHlXaXRoaW4oQixqLGorcSl9ZnVuY3Rpb24gV3UoQil7dHJ5e3JldHVybiBBLmdyb3coQi1sZS5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLEJlKEEuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24gWHUoQil7dmFyIGo9RWUubGVuZ3RoO0I9Qj4+PjA7dmFyIHE9MjE0NzQ4MzY0ODtpZihCPnEpcmV0dXJuITE7Zm9yKHZhciAkPTE7JDw9NDskKj0yKXt2YXIgdWU9aiooMSsuMi8kKTt1ZT1NYXRoLm1pbih1ZSxCKzEwMDY2MzI5Nik7dmFyIEFlPU1hdGgubWluKHEseWUoTWF0aC5tYXgoQix1ZSksNjU1MzYpKSxUZT1XdShBZSk7aWYoVGUpcmV0dXJuITB9cmV0dXJuITF9dmFyIFhpPXttYXBwaW5nczp7fSxidWZmZXJzOltudWxsLFtdLFtdXSxwcmludENoYXI6ZnVuY3Rpb24oQixqKXt2YXIgcT1YaS5idWZmZXJzW0JdO2o9PT0wfHxqPT09MTA/KChCPT09MT9TOkMpKEwocSwwKSkscS5sZW5ndGg9MCk6cS5wdXNoKGopfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtYaS52YXJhcmdzKz00O3ZhciBCPXplW1hpLnZhcmFyZ3MtND4+Ml07cmV0dXJuIEJ9LGdldFN0cjpmdW5jdGlvbihCKXt2YXIgaj1EKEIpO3JldHVybiBqfSxnZXQ2NDpmdW5jdGlvbihCLGope3JldHVybiBCfX07ZnVuY3Rpb24gWXUoQil7cmV0dXJuIDB9ZnVuY3Rpb24gSnUoQixqLHEsJCx1ZSl7fWZ1bmN0aW9uIFp1KEIsaixxLCQpe2Zvcih2YXIgdWU9MCxBZT0wO0FlPHE7QWUrKyl7Zm9yKHZhciBUZT16ZVtqK0FlKjg+PjJdLGdlPXplW2orKEFlKjgrNCk+PjJdLF9lPTA7X2U8Z2U7X2UrKylYaS5wcmludENoYXIoQixFZVtUZStfZV0pO3VlKz1nZX1yZXR1cm4gemVbJD4+Ml09dWUsMH1mdW5jdGlvbiBRdShCKXtNKEJ8MCl9Vmk9dC5JbnRlcm5hbEVycm9yPW5pKEVycm9yLCJJbnRlcm5hbEVycm9yIiksa2MoKSxTcj10LkJpbmRpbmdFcnJvcj1uaShFcnJvciwiQmluZGluZ0Vycm9yIiksSGQoKSxydSgpLHR1KCksY2Y9dC5VbmJvdW5kVHlwZUVycm9yPW5pKEVycm9yLCJVbmJvdW5kVHlwZUVycm9yIiksYnUoKTt2YXIgJHU9e3Q6Z28sSTpEZCx4OmZ1LHc6ZHUsZDp1dSxrOmx1LEg6cHUsbjpfdSxhOnl1LEE6d3UsaTpUdSxqOlJ1LGg6eHUsQjpPdSx2OlN1LHU6Q3UsYzpNdSxKOk51LG06SXUsczprdSxiOkdjLHk6dnUscDpCdSxyOlV1LGU6anUsZzpMdSxxOkd1LGY6VnUsbDpIdSxvOkt1LEU6cXUsRjpYdSxHOll1LEM6SnUsejpadSxEOlF1fSxoZj1DbigpLEF0PXQuX19fd2FzbV9jYWxsX2N0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuKEF0PXQuX19fd2FzbV9jYWxsX2N0b3JzPXQuYXNtLkwpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sej10Ll9tYWxsb2M9ZnVuY3Rpb24oKXtyZXR1cm4oej10Ll9tYWxsb2M9dC5hc20uTSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxIPXQuX2ZyZWU9ZnVuY3Rpb24oKXtyZXR1cm4oSD10Ll9mcmVlPXQuYXNtLk4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdGU9dC5fX19nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybih0ZT10Ll9fX2dldFR5cGVOYW1lPXQuYXNtLlApLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sU2U9dC5fX19lbWJpbmRfcmVnaXN0ZXJfbmF0aXZlX2FuZF9idWlsdGluX3R5cGVzPWZ1bmN0aW9uKCl7cmV0dXJuKFNlPXQuX19fZW1iaW5kX3JlZ2lzdGVyX25hdGl2ZV9hbmRfYnVpbHRpbl90eXBlcz10LmFzbS5RKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHR0PXQuZHluQ2FsbF9qaWppPWZ1bmN0aW9uKCl7cmV0dXJuKHR0PXQuZHluQ2FsbF9qaWppPXQuYXNtLlIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdXQ7ZnVuY3Rpb24gTXIoQil7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitCKyIpIix0aGlzLnN0YXR1cz1CfXBuPWZ1bmN0aW9uIEIoKXt1dHx8SGMoKSx1dHx8KHBuPUIpfTtmdW5jdGlvbiBIYyhCKXtpZihCPUJ8fGYscXQ+MHx8KE90KCkscXQ+MCkpcmV0dXJuO2Z1bmN0aW9uIGooKXt1dHx8KHV0PSEwLHQuY2FsbGVkUnVuPSEwLCF4JiYoa3QoKSxHZSgpLG8odCksdC5vblJ1bnRpbWVJbml0aWFsaXplZCYmdC5vblJ1bnRpbWVJbml0aWFsaXplZCgpLExlKCkpKX10LnNldFN0YXR1cz8odC5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Quc2V0U3RhdHVzKCIiKX0sMSksaigpfSwxKSk6aigpfWlmKHQucnVuPUhjLHQucHJlSW5pdClmb3IodHlwZW9mIHQucHJlSW5pdD09ImZ1bmN0aW9uIiYmKHQucHJlSW5pdD1bdC5wcmVJbml0XSk7dC5wcmVJbml0Lmxlbmd0aD4wOyl0LnByZUluaXQucG9wKCkoKTtyZXR1cm4gSGMoKSxlLnJlYWR5fSl9KSgpO3R5cGVvZiBCbT09Im9iamVjdCImJnR5cGVvZiBsMT09Im9iamVjdCI/bDEuZXhwb3J0cz11MTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiB1MX0pOnR5cGVvZiBCbT09Im9iamVjdCImJihCbS5CQVNJUz11MSl9KTt2YXIgaDE9e307JGUoaDEse2RlZmF1bHQ6KCk9PnV6fSk7ZnVuY3Rpb24gaXoobixlKXtsZXQgdD1uLmt0eDJCdWZmZXIsbz1uLnN1cHBvcnRlZFRhcmdldEZvcm1hdHMsYTt0cnl7YT1GUyh0KX1jYXRjaHt0aHJvdyBuZXcgbnQoIkludmFsaWQgS1RYMiBmaWxlLiIpfWlmKGEubGF5ZXJDb3VudCE9PTApdGhyb3cgbmV3IG50KCJLVFgyIHRleHR1cmUgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkLiIpO2lmKGEucGl4ZWxEZXB0aCE9PTApdGhyb3cgbmV3IG50KCJLVFgyIDNEIHRleHR1cmVzIGFyZSB1bnN1cHBvcnRlZC4iKTtsZXQgcj1hLmRhdGFGb3JtYXREZXNjcmlwdG9yWzBdLGk9bmV3IEFycmF5KGEubGV2ZWxDb3VudCk7cmV0dXJuIGEudmtGb3JtYXQ9PT0wJiYoci5jb2xvck1vZGVsPT09TFN8fHIuY29sb3JNb2RlbD09PXpTKT9zeih0LGEsbyxVbSxlLGkpOihlLnB1c2godC5idWZmZXIpLGN6KGEsaSkpLGl9ZnVuY3Rpb24gY3oobixlKXtsZXQgdD1uLnZrRm9ybWF0PT09RmQuVktfRk9STUFUX1I4RzhCOF9TUkdCP1ZuLlJHQjpWbi5SR0JBLG87bi52a0Zvcm1hdD09PUZkLlZLX0ZPUk1BVF9SOEc4QjhBOF9VTk9STT9vPWlvLlVOU0lHTkVEX0JZVEU6bi52a0Zvcm1hdD09PUZkLlZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU0ZMT0FUP289aW8uSEFMRl9GTE9BVDpuLnZrRm9ybWF0PT09RmQuVktfRk9STUFUX1IzMkczMkIzMkEzMl9TRkxPQVQmJihvPWlvLkZMT0FUKTtmb3IobGV0IGE9MDthPG4ubGV2ZWxzLmxlbmd0aDsrK2Epe2xldCByPXt9O2VbYV09cjtsZXQgaT1uLmxldmVsc1thXS5sZXZlbERhdGEsZj1uLnBpeGVsV2lkdGg+PmEsZD1uLnBpeGVsSGVpZ2h0Pj5hLGM9ZipkKlZuLmNvbXBvbmVudHNMZW5ndGgodCk7Zm9yKGxldCB1PTA7dTxuLmZhY2VDb3VudDsrK3Upe2xldCBsPWkuYnl0ZU9mZnNldCtjKm4udHlwZVNpemUqdSxtOyFnKG8pfHxpby5zaXplSW5CeXRlcyhvKT09PTE/bT1uZXcgVWludDhBcnJheShpLmJ1ZmZlcixsLGMpOmlvLnNpemVJbkJ5dGVzKG8pPT09Mj9tPW5ldyBVaW50MTZBcnJheShpLmJ1ZmZlcixsLGMpOm09bmV3IEZsb2F0MzJBcnJheShpLmJ1ZmZlcixsLGMpLHJbalNbdV1dPXtpbnRlcm5hbEZvcm1hdDp0LGRhdGF0eXBlOm8sd2lkdGg6ZixoZWlnaHQ6ZCxsZXZlbEJ1ZmZlcjptfX19fWZ1bmN0aW9uIHN6KG4sZSx0LG8sYSxyKXtsZXQgaT1uZXcgby5LVFgyRmlsZShuKSxmPWkuZ2V0V2lkdGgoKSxkPWkuZ2V0SGVpZ2h0KCksYz1pLmdldExldmVscygpLHU9aS5nZXRIYXNBbHBoYSgpO2lmKCEoZj4wKXx8IShkPjApfHwhKGM+MCkpdGhyb3cgaS5jbG9zZSgpLGkuZGVsZXRlKCksbmV3IG50KCJJbnZhbGlkIEtUWDIgZmlsZSIpO2xldCBsLG0saD1lLmRhdGFGb3JtYXREZXNjcmlwdG9yWzBdLGI9by50cmFuc2NvZGVyX3RleHR1cmVfZm9ybWF0O2lmKGguY29sb3JNb2RlbD09PUxTKWlmKHQuZXRjKWw9dT9Wbi5SR0JBOF9FVEMyX0VBQzpWbi5SR0I4X0VUQzIsbT11P2IuY1RGRVRDMl9SR0JBOmIuY1RGRVRDMV9SR0I7ZWxzZSBpZih0LmV0YzEmJiF1KWw9Vm4uUkdCX0VUQzEsbT1iLmNURkVUQzFfUkdCO2Vsc2UgaWYodC5zM3RjKWw9dT9Wbi5SR0JBX0RYVDU6Vm4uUkdCX0RYVDEsbT11P2IuY1RGQkMzX1JHQkE6Yi5jVEZCQzFfUkdCO2Vsc2UgaWYodC5wdnJ0YylsPXU/Vm4uUkdCQV9QVlJUQ180QlBQVjE6Vm4uUkdCX1BWUlRDXzRCUFBWMSxtPXU/Yi5jVEZQVlJUQzFfNF9SR0JBOmIuY1RGUFZSVEMxXzRfUkdCO2Vsc2UgaWYodC5hc3RjKWw9Vm4uUkdCQV9BU1RDLG09Yi5jVEZBU1RDXzR4NF9SR0JBO2Vsc2UgaWYodC5iYzcpbD1Wbi5SR0JBX0JDNyxtPWIuY1RGQkM3X1JHQkE7ZWxzZSB0aHJvdyBuZXcgbnQoIk5vIHRyYW5zY29kaW5nIGZvcm1hdCB0YXJnZXQgYXZhaWxhYmxlIGZvciBFVEMxUyBjb21wcmVzc2VkIGt0eDIuIik7ZWxzZSBpZihoLmNvbG9yTW9kZWw9PT16UylpZih0LmFzdGMpbD1Wbi5SR0JBX0FTVEMsbT1iLmNURkFTVENfNHg0X1JHQkE7ZWxzZSBpZih0LmJjNylsPVZuLlJHQkFfQkM3LG09Yi5jVEZCQzdfUkdCQTtlbHNlIGlmKHQuczN0YylsPXU/Vm4uUkdCQV9EWFQ1OlZuLlJHQl9EWFQxLG09dT9iLmNURkJDM19SR0JBOmIuY1RGQkMxX1JHQjtlbHNlIGlmKHQuZXRjKWw9dT9Wbi5SR0JBOF9FVEMyX0VBQzpWbi5SR0I4X0VUQzIsbT11P2IuY1RGRVRDMl9SR0JBOmIuY1RGRVRDMV9SR0I7ZWxzZSBpZih0LmV0YzEmJiF1KWw9Vm4uUkdCX0VUQzEsbT1iLmNURkVUQzFfUkdCO2Vsc2UgaWYodC5wdnJ0YylsPXU/Vm4uUkdCQV9QVlJUQ180QlBQVjE6Vm4uUkdCX1BWUlRDXzRCUFBWMSxtPXU/Yi5jVEZQVlJUQzFfNF9SR0JBOmIuY1RGUFZSVEMxXzRfUkdCO2Vsc2UgdGhyb3cgbmV3IG50KCJObyB0cmFuc2NvZGluZyBmb3JtYXQgdGFyZ2V0IGF2YWlsYWJsZSBmb3IgVUFTVEMgY29tcHJlc3NlZCBrdHgyLiIpO2lmKCFpLnN0YXJ0VHJhbnNjb2RpbmcoKSl0aHJvdyBpLmNsb3NlKCksaS5kZWxldGUoKSxuZXcgbnQoInN0YXJ0VHJhbnNjb2RpbmcoKSBmYWlsZWQiKTtmb3IobGV0IHA9MDtwPGUubGV2ZWxzLmxlbmd0aDsrK3Ape2xldCB5PXt9O3JbcF09eSxmPWUucGl4ZWxXaWR0aD4+cCxkPWUucGl4ZWxIZWlnaHQ+PnA7bGV0IFQ9aS5nZXRJbWFnZVRyYW5zY29kZWRTaXplSW5CeXRlcyhwLDAsMCxtLnZhbHVlKSxfPW5ldyBVaW50OEFycmF5KFQpLHc9aS50cmFuc2NvZGVJbWFnZShfLHAsMCwwLG0udmFsdWUsMCwtMSwtMSk7aWYoIWcodykpdGhyb3cgbmV3IG50KCJ0cmFuc2NvZGVJbWFnZSgpIGZhaWxlZC4iKTthLnB1c2goXy5idWZmZXIpLHlbalNbMF1dPXtpbnRlcm5hbEZvcm1hdDpsLHdpZHRoOmYsaGVpZ2h0OmQsbGV2ZWxCdWZmZXI6X319cmV0dXJuIGkuY2xvc2UoKSxpLmRlbGV0ZSgpLHJ9YXN5bmMgZnVuY3Rpb24gZnoobixlKXtsZXQgdD1uLndlYkFzc2VtYmx5Q29uZmlnLG89VVMuZGVmYXVsdD8/c2VsZi5CQVNJUztyZXR1cm4gZyh0Lndhc21CaW5hcnlGaWxlKT9VbT1hd2FpdCBvKHQpOlVtPWF3YWl0IG8oKSxVbS5pbml0aWFsaXplQmFzaXMoKSwhMH1mdW5jdGlvbiBkeihuLGUpe2xldCB0PW4ud2ViQXNzZW1ibHlDb25maWc7cmV0dXJuIGcodCk/ZnoobixlKTppeihuLGUpfXZhciBVUyxqUyxMUyx6UyxVbSx1eixtMT1YKCgpPT57ZmUoKTtJUygpO3BhKCk7a1MoKTtkMSgpO2tuKCk7RFMoKTtVUz1oYShCUygpLDEpLGpTPVsicG9zaXRpdmVYIiwibmVnYXRpdmVYIiwicG9zaXRpdmVZIiwibmVnYXRpdmVZIiwicG9zaXRpdmVaIiwibmVnYXRpdmVaIl0sTFM9MTYzLHpTPTE2Njt1ej1tdChkeil9KTt2YXIgR1M9e307dmFyIGIxPVgoKCk9PntzZWxmLm9ubWVzc2FnZT1mdW5jdGlvbihuKXtsZXQgZT1uLmRhdGEuYXJyYXksdD1zZWxmLndlYmtpdFBvc3RNZXNzYWdlfHxzZWxmLnBvc3RNZXNzYWdlO3RyeXt0KHthcnJheTplfSxbZS5idWZmZXJdKX1jYXRjaHt0KHt9KX19fSk7dmFyIGptLExtLFZTPVgoKCk9Pnt2dCgpO01lKCk7ZmUoKTtqbT17fTtqbS5jbGlwVHJpYW5nbGVBdEF4aXNBbGlnbmVkVGhyZXNob2xkPWZ1bmN0aW9uKG4sZSx0LG8sYSxyKXtnKHIpP3IubGVuZ3RoPTA6cj1bXTtsZXQgaSxmLGQ7ZT8oaT10PG4sZj1vPG4sZD1hPG4pOihpPXQ+bixmPW8+bixkPWE+bik7bGV0IGM9aStmK2QsdSxsLG0saCxiLHA7cmV0dXJuIGM9PT0xP2k/KHU9KG4tdCkvKG8tdCksbD0obi10KS8oYS10KSxyLnB1c2goMSksci5wdXNoKDIpLGwhPT0xJiYoci5wdXNoKC0xKSxyLnB1c2goMCksci5wdXNoKDIpLHIucHVzaChsKSksdSE9PTEmJihyLnB1c2goLTEpLHIucHVzaCgwKSxyLnB1c2goMSksci5wdXNoKHUpKSk6Zj8obT0obi1vKS8oYS1vKSxoPShuLW8pLyh0LW8pLHIucHVzaCgyKSxyLnB1c2goMCksaCE9PTEmJihyLnB1c2goLTEpLHIucHVzaCgxKSxyLnB1c2goMCksci5wdXNoKGgpKSxtIT09MSYmKHIucHVzaCgtMSksci5wdXNoKDEpLHIucHVzaCgyKSxyLnB1c2gobSkpKTpkJiYoYj0obi1hKS8odC1hKSxwPShuLWEpLyhvLWEpLHIucHVzaCgwKSxyLnB1c2goMSkscCE9PTEmJihyLnB1c2goLTEpLHIucHVzaCgyKSxyLnB1c2goMSksci5wdXNoKHApKSxiIT09MSYmKHIucHVzaCgtMSksci5wdXNoKDIpLHIucHVzaCgwKSxyLnB1c2goYikpKTpjPT09Mj8haSYmdCE9PW4/KGg9KG4tbykvKHQtbyksYj0obi1hKS8odC1hKSxyLnB1c2goMCksci5wdXNoKC0xKSxyLnB1c2goMSksci5wdXNoKDApLHIucHVzaChoKSxyLnB1c2goLTEpLHIucHVzaCgyKSxyLnB1c2goMCksci5wdXNoKGIpKTohZiYmbyE9PW4/KHA9KG4tYSkvKG8tYSksdT0obi10KS8oby10KSxyLnB1c2goMSksci5wdXNoKC0xKSxyLnB1c2goMiksci5wdXNoKDEpLHIucHVzaChwKSxyLnB1c2goLTEpLHIucHVzaCgwKSxyLnB1c2goMSksci5wdXNoKHUpKTohZCYmYSE9PW4mJihsPShuLXQpLyhhLXQpLG09KG4tbykvKGEtbyksci5wdXNoKDIpLHIucHVzaCgtMSksci5wdXNoKDApLHIucHVzaCgyKSxyLnB1c2gobCksci5wdXNoKC0xKSxyLnB1c2goMSksci5wdXNoKDIpLHIucHVzaChtKSk6YyE9PTMmJihyLnB1c2goMCksci5wdXNoKDEpLHIucHVzaCgyKSkscn07am0uY29tcHV0ZUJhcnljZW50cmljQ29vcmRpbmF0ZXM9ZnVuY3Rpb24obixlLHQsbyxhLHIsaSxmLGQpe2xldCBjPXQtaSx1PWktYSxsPXItZixtPW8tZixoPTEvKGwqYyt1Km0pLGI9ZS1mLHA9bi1pLHk9KGwqcCt1KmIpKmgsVD0oLW0qcCtjKmIpKmgsXz0xLXktVDtyZXR1cm4gZyhkKT8oZC54PXksZC55PVQsZC56PV8sZCk6bmV3IHMoeSxULF8pfTtqbS5jb21wdXRlTGluZVNlZ21lbnRMaW5lU2VnbWVudEludGVyc2VjdGlvbj1mdW5jdGlvbihuLGUsdCxvLGEscixpLGYsZCl7bGV0IGM9KGktYSkqKGUtciktKGYtcikqKG4tYSksdT0odC1uKSooZS1yKS0oby1lKSoobi1hKSxsPShmLXIpKih0LW4pLShpLWEpKihvLWUpO2lmKGw9PT0wKXJldHVybjtsZXQgbT1jL2wsaD11L2w7aWYobT49MCYmbTw9MSYmaD49MCYmaDw9MSlyZXR1cm4gZyhkKXx8KGQ9bmV3IFkpLGQueD1uK20qKHQtbiksZC55PWUrbSooby1lKSxkfTtMbT1qbX0pO3ZhciBwMT17fTskZShwMSx7ZGVmYXVsdDooKT0+U3p9KTtmdW5jdGlvbiBSeihuLGUpe2xldCB0PW4uaXNFYXN0Q2hpbGQsbz1uLmlzTm9ydGhDaGlsZCxhPXQ/UWE6MCxyPXQ/WG46UWEsaT1vP1FhOjAsZj1vP1huOlFhLGQ9bXosYz1ieix1PXB6LGw9X3o7ZC5sZW5ndGg9MCxjLmxlbmd0aD0wLHUubGVuZ3RoPTAsbC5sZW5ndGg9MDtsZXQgbT1nejttLmxlbmd0aD0wO2xldCBoPXt9LGI9bi52ZXJ0aWNlcyxwPW4uaW5kaWNlcztwPXAuc3ViYXJyYXkoMCxuLmluZGV4Q291bnRXaXRob3V0U2tpcnRzKTtsZXQgeT1uYS5jbG9uZShuLmVuY29kaW5nKSxUPXkuaGFzVmVydGV4Tm9ybWFscyxfPTAsdz1uLnZlcnRleENvdW50V2l0aG91dFNraXJ0cyxFPW4ubWluaW11bUhlaWdodCxSPW4ubWF4aW11bUhlaWdodCxTPW5ldyBBcnJheSh3KSxDPW5ldyBBcnJheSh3KSxJPW5ldyBBcnJheSh3KSxNPVQ/bmV3IEFycmF5KHcqMik6dm9pZCAwLFA9MjAsRixBLHgsTix2O2ZvcihBPTAseD0wO0E8dzsrK0EseCs9Mil7bGV0IFR0PXkuZGVjb2RlVGV4dHVyZUNvb3JkaW5hdGVzKGIsQSxUeik7aWYoRj15LmRlY29kZUhlaWdodChiLEEpLE49ay5jbGFtcChUdC54KlhufDAsMCxYbiksdj1rLmNsYW1wKFR0LnkqWG58MCwwLFhuKSxJW0FdPWsuY2xhbXAoKEYtRSkvKFItRSkqWG58MCwwLFhuKSxOPFAmJihOPTApLHY8UCYmKHY9MCksWG4tTjxQJiYoTj1YbiksWG4tdjxQJiYodj1YbiksU1tBXT1OLENbQV09dixUKXtsZXQgY3Q9eS5nZXRPY3RFbmNvZGVkTm9ybWFsKGIsQSxFeik7TVt4XT1jdC54LE1beCsxXT1jdC55fSh0JiZOPj1RYXx8IXQmJk48PVFhKSYmKG8mJnY+PVFhfHwhbyYmdjw9UWEpJiYoaFtBXT1fLGQucHVzaChOKSxjLnB1c2godiksdS5wdXNoKElbQV0pLFQmJihsLnB1c2goTVt4XSksbC5wdXNoKE1beCsxXSkpLCsrXyl9bGV0IFU9W107VS5wdXNoKG5ldyBZbiksVS5wdXNoKG5ldyBZbiksVS5wdXNoKG5ldyBZbik7bGV0IEw9W107TC5wdXNoKG5ldyBZbiksTC5wdXNoKG5ldyBZbiksTC5wdXNoKG5ldyBZbik7bGV0IEQsRztmb3IoQT0wO0E8cC5sZW5ndGg7QSs9Myl7bGV0IFR0PXBbQV0sY3Q9cFtBKzFdLHp0PXBbQSsyXSxPdD1TW1R0XSxrdD1TW2N0XSxHZT1TW3p0XTtVWzBdLmluaXRpYWxpemVJbmRleGVkKFMsQyxJLE0sVHQpLFVbMV0uaW5pdGlhbGl6ZUluZGV4ZWQoUyxDLEksTSxjdCksVVsyXS5pbml0aWFsaXplSW5kZXhlZChTLEMsSSxNLHp0KTtsZXQgTGU9TG0uY2xpcFRyaWFuZ2xlQXRBeGlzQWxpZ25lZFRocmVzaG9sZChRYSx0LE90LGt0LEdlLGx6KTtEPTAsIShEPj1MZS5sZW5ndGgpJiYoRD1MWzBdLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdChMZSxELFUpLCEoRD49TGUubGVuZ3RoKSYmKEQ9TFsxXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQoTGUsRCxVKSwhKEQ+PUxlLmxlbmd0aCkmJihEPUxbMl0uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KExlLEQsVSksRz1MbS5jbGlwVHJpYW5nbGVBdEF4aXNBbGlnbmVkVGhyZXNob2xkKFFhLG8sTFswXS5nZXRWKCksTFsxXS5nZXRWKCksTFsyXS5nZXRWKCksSFMpLEtTKGQsYyx1LGwsbSxoLEcsTCxUKSxEPExlLmxlbmd0aCYmKExbMl0uY2xvbmUoTFsxXSksTFsyXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQoTGUsRCxVKSxHPUxtLmNsaXBUcmlhbmdsZUF0QXhpc0FsaWduZWRUaHJlc2hvbGQoUWEsbyxMWzBdLmdldFYoKSxMWzFdLmdldFYoKSxMWzJdLmdldFYoKSxIUyksS1MoZCxjLHUsbCxtLGgsRyxMLFQpKSkpKX1sZXQgVj10Py1YbjowLE89bz8tWG46MCxKPVtdLHJlPVtdLHNlPVtdLG9lPVtdLGNlPU51bWJlci5NQVhfVkFMVUUsbWU9LWNlLGRlPWh6O2RlLmxlbmd0aD0wO2xldCB5ZT1LLmNsb25lKG4uZWxsaXBzb2lkKSxsZT14ZS5jbG9uZShuLmNoaWxkUmVjdGFuZ2xlKSxlZT1sZS5ub3J0aCxFZT1sZS5zb3V0aCxDZT1sZS5lYXN0LFdlPWxlLndlc3Q7Zm9yKENlPFdlJiYoQ2UrPWsuVFdPX1BJKSxBPTA7QTxkLmxlbmd0aDsrK0EpTj1NYXRoLnJvdW5kKGRbQV0pLE48PWE/KEoucHVzaChBKSxOPTApOk4+PXI/KHNlLnB1c2goQSksTj1Ybik6Tj1OKjIrVixkW0FdPU4sdj1NYXRoLnJvdW5kKGNbQV0pLHY8PWk/KHJlLnB1c2goQSksdj0wKTp2Pj1mPyhvZS5wdXNoKEEpLHY9WG4pOnY9dioyK08sY1tBXT12LEY9ay5sZXJwKEUsUix1W0FdL1huKSxGPGNlJiYoY2U9RiksRj5tZSYmKG1lPUYpLHVbQV09Rix6bS5sb25naXR1ZGU9ay5sZXJwKFdlLENlLE4vWG4pLHptLmxhdGl0dWRlPWsubGVycChFZSxlZSx2L1huKSx6bS5oZWlnaHQ9Rix5ZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih6bSxlaSksZGUucHVzaChlaS54KSxkZS5wdXNoKGVpLnkpLGRlLnB1c2goZWkueik7bGV0IHplPXBlLmZyb21WZXJ0aWNlcyhkZSxzLlpFUk8sMyxBeiksWmU9bW4uZnJvbVJlY3RhbmdsZShsZSxjZSxtZSx5ZSx3eiksRGU9bmV3IEFyKHllKS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21WZXJ0aWNlc1Bvc3NpYmx5VW5kZXJFbGxpcHNvaWQoemUuY2VudGVyLGRlLDMsemUuY2VudGVyLGNlLHl6KSxCZT1tZS1jZSxldD1uZXcgVWludDE2QXJyYXkoZC5sZW5ndGgrYy5sZW5ndGgrdS5sZW5ndGgpO2ZvcihBPTA7QTxkLmxlbmd0aDsrK0EpZXRbQV09ZFtBXTtsZXQgcWU9ZC5sZW5ndGg7Zm9yKEE9MDtBPGMubGVuZ3RoOysrQSlldFtxZStBXT1jW0FdO2ZvcihxZSs9Yy5sZW5ndGgsQT0wO0E8dS5sZW5ndGg7KytBKWV0W3FlK0FdPVhuKih1W0FdLWNlKS9CZTtsZXQgYXQ9SWUuY3JlYXRlVHlwZWRBcnJheShkLmxlbmd0aCxtKSx4dDtpZihUKXtsZXQgVHQ9bmV3IFVpbnQ4QXJyYXkobCk7ZS5wdXNoKGV0LmJ1ZmZlcixhdC5idWZmZXIsVHQuYnVmZmVyKSx4dD1UdC5idWZmZXJ9ZWxzZSBlLnB1c2goZXQuYnVmZmVyLGF0LmJ1ZmZlcik7cmV0dXJue3ZlcnRpY2VzOmV0LmJ1ZmZlcixlbmNvZGVkTm9ybWFsczp4dCxpbmRpY2VzOmF0LmJ1ZmZlcixtaW5pbXVtSGVpZ2h0OmNlLG1heGltdW1IZWlnaHQ6bWUsd2VzdEluZGljZXM6Sixzb3V0aEluZGljZXM6cmUsZWFzdEluZGljZXM6c2Usbm9ydGhJbmRpY2VzOm9lLGJvdW5kaW5nU3BoZXJlOnplLG9yaWVudGVkQm91bmRpbmdCb3g6WmUsaG9yaXpvbk9jY2x1c2lvblBvaW50OkRlfX1mdW5jdGlvbiBZbigpe3RoaXMudmVydGV4QnVmZmVyPXZvaWQgMCx0aGlzLmluZGV4PXZvaWQgMCx0aGlzLmZpcnN0PXZvaWQgMCx0aGlzLnNlY29uZD12b2lkIDAsdGhpcy5yYXRpbz12b2lkIDB9ZnVuY3Rpb24gcVMobixlKXsrK0dtO2xldCB0PXh6W0dtXSxvPU96W0dtXTtyZXR1cm4gdD1qdC5vY3REZWNvZGUobi5maXJzdC5nZXROb3JtYWxYKCksbi5maXJzdC5nZXROb3JtYWxZKCksdCksbz1qdC5vY3REZWNvZGUobi5zZWNvbmQuZ2V0Tm9ybWFsWCgpLG4uc2Vjb25kLmdldE5vcm1hbFkoKSxvKSxlaT1zLmxlcnAodCxvLG4ucmF0aW8sZWkpLHMubm9ybWFsaXplKGVpLGVpKSxqdC5vY3RFbmNvZGUoZWksZSksLS1HbSxlfWZ1bmN0aW9uIEtTKG4sZSx0LG8sYSxyLGksZixkKXtpZihpLmxlbmd0aD09PTApcmV0dXJuO2xldCBjPTAsdT0wO2Zvcig7dTxpLmxlbmd0aDspdT1Wb1tjKytdLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdChpLHUsZik7Zm9yKGxldCBsPTA7bDxjOysrbCl7bGV0IG09Vm9bbF07aWYobS5pc0luZGV4ZWQoKSltLm5ld0luZGV4PXJbbS5pbmRleF0sbS51QnVmZmVyPW4sbS52QnVmZmVyPWUsbS5oZWlnaHRCdWZmZXI9dCxkJiYobS5ub3JtYWxCdWZmZXI9byk7ZWxzZXtsZXQgaD1tLmdldEtleSgpO2lmKGcocltoXSkpbS5uZXdJbmRleD1yW2hdO2Vsc2V7bGV0IGI9bi5sZW5ndGg7bi5wdXNoKG0uZ2V0VSgpKSxlLnB1c2gobS5nZXRWKCkpLHQucHVzaChtLmdldEgoKSksZCYmKG8ucHVzaChtLmdldE5vcm1hbFgoKSksby5wdXNoKG0uZ2V0Tm9ybWFsWSgpKSksbS5uZXdJbmRleD1iLHJbaF09Yn19fWM9PT0zPyhhLnB1c2goVm9bMF0ubmV3SW5kZXgpLGEucHVzaChWb1sxXS5uZXdJbmRleCksYS5wdXNoKFZvWzJdLm5ld0luZGV4KSk6Yz09PTQmJihhLnB1c2goVm9bMF0ubmV3SW5kZXgpLGEucHVzaChWb1sxXS5uZXdJbmRleCksYS5wdXNoKFZvWzJdLm5ld0luZGV4KSxhLnB1c2goVm9bMF0ubmV3SW5kZXgpLGEucHVzaChWb1syXS5uZXdJbmRleCksYS5wdXNoKFZvWzNdLm5ld0luZGV4KSl9dmFyIFhuLFFhLGx6LEhTLGh6LHptLGVpLG16LGJ6LHB6LGd6LF96LHl6LEF6LHd6LFR6LEV6LCRzLEdtLHh6LE96LFZvLFN6LGcxPVgoKCk9PntCcigpO0V0KCk7dnQoKTtNZSgpO2d0KCk7ZmUoKTtWZSgpO0dzKCk7WnQoKTtWUygpO2plKCk7QWkoKTtobigpO1ZzKCk7a24oKTtYbj0zMjc2NyxRYT1Ybi8yfDAsbHo9W10sSFM9W10saHo9W10sem09bmV3IGFlLGVpPW5ldyBzLG16PVtdLGJ6PVtdLHB6PVtdLGd6PVtdLF96PVtdLHl6PW5ldyBzLEF6PW5ldyBwZSx3ej1uZXcgbW4sVHo9bmV3IFksRXo9bmV3IHM7WW4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKG4pe3JldHVybiBnKG4pfHwobj1uZXcgWW4pLG4udUJ1ZmZlcj10aGlzLnVCdWZmZXIsbi52QnVmZmVyPXRoaXMudkJ1ZmZlcixuLmhlaWdodEJ1ZmZlcj10aGlzLmhlaWdodEJ1ZmZlcixuLm5vcm1hbEJ1ZmZlcj10aGlzLm5vcm1hbEJ1ZmZlcixuLmluZGV4PXRoaXMuaW5kZXgsbi5maXJzdD10aGlzLmZpcnN0LG4uc2Vjb25kPXRoaXMuc2Vjb25kLG4ucmF0aW89dGhpcy5yYXRpbyxufTtZbi5wcm90b3R5cGUuaW5pdGlhbGl6ZUluZGV4ZWQ9ZnVuY3Rpb24obixlLHQsbyxhKXt0aGlzLnVCdWZmZXI9bix0aGlzLnZCdWZmZXI9ZSx0aGlzLmhlaWdodEJ1ZmZlcj10LHRoaXMubm9ybWFsQnVmZmVyPW8sdGhpcy5pbmRleD1hLHRoaXMuZmlyc3Q9dm9pZCAwLHRoaXMuc2Vjb25kPXZvaWQgMCx0aGlzLnJhdGlvPXZvaWQgMH07WW4ucHJvdG90eXBlLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdD1mdW5jdGlvbihuLGUsdCl7bGV0IG89ZSsxO3JldHVybiBuW2VdIT09LTE/dFtuW2VdXS5jbG9uZSh0aGlzKToodGhpcy52ZXJ0ZXhCdWZmZXI9dm9pZCAwLHRoaXMuaW5kZXg9dm9pZCAwLHRoaXMuZmlyc3Q9dFtuW29dXSwrK28sdGhpcy5zZWNvbmQ9dFtuW29dXSwrK28sdGhpcy5yYXRpbz1uW29dLCsrbyksb307WW4ucHJvdG90eXBlLmdldEtleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5kZXhlZCgpP3RoaXMuaW5kZXg6SlNPTi5zdHJpbmdpZnkoe2ZpcnN0OnRoaXMuZmlyc3QuZ2V0S2V5KCksc2Vjb25kOnRoaXMuc2Vjb25kLmdldEtleSgpLHJhdGlvOnRoaXMucmF0aW99KX07WW4ucHJvdG90eXBlLmlzSW5kZXhlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuaW5kZXgpfTtZbi5wcm90b3R5cGUuZ2V0SD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuaW5kZXgpP3RoaXMuaGVpZ2h0QnVmZmVyW3RoaXMuaW5kZXhdOmsubGVycCh0aGlzLmZpcnN0LmdldEgoKSx0aGlzLnNlY29uZC5nZXRIKCksdGhpcy5yYXRpbyl9O1luLnByb3RvdHlwZS5nZXRVPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5pbmRleCk/dGhpcy51QnVmZmVyW3RoaXMuaW5kZXhdOmsubGVycCh0aGlzLmZpcnN0LmdldFUoKSx0aGlzLnNlY29uZC5nZXRVKCksdGhpcy5yYXRpbyl9O1luLnByb3RvdHlwZS5nZXRWPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5pbmRleCk/dGhpcy52QnVmZmVyW3RoaXMuaW5kZXhdOmsubGVycCh0aGlzLmZpcnN0LmdldFYoKSx0aGlzLnNlY29uZC5nZXRWKCksdGhpcy5yYXRpbyl9OyRzPW5ldyBZLEdtPS0xLHh6PVtuZXcgcyxuZXcgc10sT3o9W25ldyBzLG5ldyBzXTtZbi5wcm90b3R5cGUuZ2V0Tm9ybWFsWD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuaW5kZXgpP3RoaXMubm9ybWFsQnVmZmVyW3RoaXMuaW5kZXgqMl06KCRzPXFTKHRoaXMsJHMpLCRzLngpfTtZbi5wcm90b3R5cGUuZ2V0Tm9ybWFsWT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuaW5kZXgpP3RoaXMubm9ybWFsQnVmZmVyW3RoaXMuaW5kZXgqMisxXTooJHM9cVModGhpcywkcyksJHMueSl9O1ZvPVtdO1ZvLnB1c2gobmV3IFluKTtWby5wdXNoKG5ldyBZbik7Vm8ucHVzaChuZXcgWW4pO1ZvLnB1c2gobmV3IFluKTtTej1tdChSeil9KTt2YXIgXzE9e307JGUoXzEse2RlZmF1bHQ6KCk9Pk16fSk7ZnVuY3Rpb24gQ3oobixlKXtsZXQgdD1sbS51cHNhbXBsZU1lc2gobiksbz10LnZlcnRpY2VzLmJ1ZmZlcixhPXQuaW5kaWNlcy5idWZmZXIscj10Lndlc3RJbmRpY2VzU291dGhUb05vcnRoLmJ1ZmZlcixpPXQuc291dGhJbmRpY2VzRWFzdFRvV2VzdC5idWZmZXIsZj10LmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLmJ1ZmZlcixkPXQubm9ydGhJbmRpY2VzV2VzdFRvRWFzdC5idWZmZXI7cmV0dXJuIGUucHVzaChvLGEscixpLGYsZCkse3ZlcnRpY2VzQnVmZmVyOm8saW5kaWNlc0J1ZmZlcjphLHZlcnRleENvdW50V2l0aG91dFNraXJ0czp0LnZlcnRleENvdW50V2l0aG91dFNraXJ0cyxpbmRleENvdW50V2l0aG91dFNraXJ0czp0LmluZGV4Q291bnRXaXRob3V0U2tpcnRzLGVuY29kaW5nOnQuZW5jb2Rpbmcsd2VzdEluZGljZXNCdWZmZXI6cixzb3V0aEluZGljZXNCdWZmZXI6aSxlYXN0SW5kaWNlc0J1ZmZlcjpmLG5vcnRoSW5kaWNlc0J1ZmZlcjpkLG1pbmltdW1IZWlnaHQ6dC5taW5pbXVtSGVpZ2h0LG1heGltdW1IZWlnaHQ6dC5tYXhpbXVtSGVpZ2h0LGJvdW5kaW5nU3BoZXJlOnQuYm91bmRpbmdTcGhlcmUzRCxvcmllbnRlZEJvdW5kaW5nQm94OnQub3JpZW50ZWRCb3VuZGluZ0JveCxob3Jpem9uT2NjbHVzaW9uUG9pbnQ6dC5ob3Jpem9uT2NjbHVzaW9uUG9pbnR9fXZhciBNeix5MT1YKCgpPT57Sl8oKTtrbigpO016PW10KEN6KX0pO3ZhciBOeixBMT1YKCgpPT57Tno9TzEoeyIuL2NvbWJpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihrcCgpLFBwKSksIi4vY3JlYXRlQm94R2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQnAoKSxEcCkpLCIuL2NyZWF0ZUJveE91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihMcCgpLGpwKSksIi4vY3JlYXRlQ2lyY2xlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSnAoKSxZcCkpLCIuL2NyZWF0ZUNpcmNsZU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihlMCgpLCRwKSksIi4vY3JlYXRlQ29wbGFuYXJQb2x5Z29uR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obDAoKSx1MCkpLCIuL2NyZWF0ZUNvcGxhbmFyUG9seWdvbk91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihiMCgpLG0wKSksIi4vY3JlYXRlQ29ycmlkb3JHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihQMCgpLEkwKSksIi4vY3JlYXRlQ29ycmlkb3JPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oRjAoKSx2MCkpLCIuL2NyZWF0ZUN5bGluZGVyR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oejAoKSxMMCkpLCIuL2NyZWF0ZUN5bGluZGVyT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEswKCksSDApKSwiLi9jcmVhdGVFbGxpcHNlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oVzAoKSxxMCkpLCIuL2NyZWF0ZUVsbGlwc2VPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oWTAoKSxYMCkpLCIuL2NyZWF0ZUVsbGlwc29pZEdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFEwKCksWjApKSwiLi9jcmVhdGVFbGxpcHNvaWRPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4odGcoKSxlZykpLCIuL2NyZWF0ZUZydXN0dW1HZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihkZygpLGZnKSksIi4vY3JlYXRlRnJ1c3R1bU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihtZygpLGhnKSksIi4vY3JlYXRlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oVDEoKSx3MSkpLCIuL2NyZWF0ZUdyb3VuZFBvbHlsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQ2coKSxTZykpLCIuL2NyZWF0ZVBsYW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSWcoKSxOZykpLCIuL2NyZWF0ZVBsYW5lT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHZnKCksa2cpKSwiLi9jcmVhdGVQb2x5Z29uR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oVWcoKSxCZykpLCIuL2NyZWF0ZVBvbHlnb25PdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oemcoKSxMZykpLCIuL2NyZWF0ZVBvbHlsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oV2coKSxxZykpLCIuL2NyZWF0ZVBvbHlsaW5lVm9sdW1lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSmcoKSxZZykpLCIuL2NyZWF0ZVBvbHlsaW5lVm9sdW1lT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KCRnKCksUWcpKSwiLi9jcmVhdGVSZWN0YW5nbGVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihzXygpLGNfKSksIi4vY3JlYXRlUmVjdGFuZ2xlT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHVfKCksZF8pKSwiLi9jcmVhdGVTaW1wbGVQb2x5bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KG1fKCksaF8pKSwiLi9jcmVhdGVTcGhlcmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihnXygpLHBfKSksIi4vY3JlYXRlU3BoZXJlT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEFfKCkseV8pKSwiLi9jcmVhdGVUYXNrUHJvY2Vzc29yV29ya2VyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGtuKCksSXApKSwiLi9jcmVhdGVWZWN0b3JUaWxlQ2xhbXBlZFBvbHlsaW5lcy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihUXygpLHdfKSksIi4vY3JlYXRlVmVjdG9yVGlsZUdlb21ldHJpZXMuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oUl8oKSxFXykpLCIuL2NyZWF0ZVZlY3RvclRpbGVQb2ludHMuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oU18oKSxPXykpLCIuL2NyZWF0ZVZlY3RvclRpbGVQb2x5Z29ucy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihNXygpLENfKSksIi4vY3JlYXRlVmVjdG9yVGlsZVBvbHlsaW5lcy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihQXygpLElfKSksIi4vY3JlYXRlVmVydGljZXNGcm9tQ2VzaXVtM0RUaWxlc1RlcnJhaW4uanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oUV8oKSxaXykpLCIuL2NyZWF0ZVZlcnRpY2VzRnJvbUdvb2dsZUVhcnRoRW50ZXJwcmlzZUJ1ZmZlci5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih0eSgpLGV5KSksIi4vY3JlYXRlVmVydGljZXNGcm9tSGVpZ2h0bWFwLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGF5KCksb3kpKSwiLi9jcmVhdGVWZXJ0aWNlc0Zyb21RdWFudGl6ZWRUZXJyYWluTWVzaC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihjeSgpLGl5KSksIi4vY3JlYXRlV2FsbEdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGx5KCksdXkpKSwiLi9jcmVhdGVXYWxsT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGJ5KCksbXkpKSwiLi9kZWNvZGVEcmFjby5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih3eSgpLEF5KSksIi4vZGVjb2RlR29vZ2xlRWFydGhFbnRlcnByaXNlUGFja2V0LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFl5KCksWHkpKSwiLi9kZWNvZGVJM1MuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZTEoKSwkeSkpLCIuL2dhdXNzaWFuU3BsYXRTb3J0ZXIuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocjEoKSxhMSkpLCIuL2dhdXNzaWFuU3BsYXRUZXh0dXJlR2VuZXJhdG9yLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGMxKCksaTEpKSwiLi9pbmNyZW1lbnRhbGx5QnVpbGRUZXJyYWluUGlja2VyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGYxKCksczEpKSwiLi90cmFuc2NvZGVLVFgyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KG0xKCksaDEpKSwiLi90cmFuc2ZlclR5cGVkQXJyYXlUZXN0LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGIxKCksR1MpKSwiLi91cHNhbXBsZVF1YW50aXplZFRlcnJhaW5NZXNoLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGcxKCkscDEpKSwiLi91cHNhbXBsZVZlcnRpY2VzRnJvbUNlc2l1bTNEVGlsZXNUZXJyYWluLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHkxKCksXzEpKX0pfSk7dmFyIHcxPXt9OyRlKHcxLHtkZWZhdWx0OigpPT5ren0pO2FzeW5jIGZ1bmN0aW9uIEl6KG4sZSl7bGV0IHQ9Vm1bZV0/P1ZtW25dO3JldHVybiBnKHQpP3Q6ZyhlKT8odHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiP3Q9bGEoZSk6dD0oYXdhaXQgaW1wb3J0KGUpKS5kZWZhdWx0LFZtW2VdPXQsdCk6KHR5cGVvZiBleHBvcnRzPT0ib2JqZWN0Ij90PWxhKGBXb3JrZXJzLyR7bn1gKTp0PShnKGUpP2F3YWl0IGltcG9ydChlKTphd2FpdCBOeihgLi8ke259LmpzYCkpLmRlZmF1bHQsVm1bbl09dCx0KX1hc3luYyBmdW5jdGlvbiBQeihuLGUpe2xldCB0PW4uc3ViVGFza3Msbz10Lmxlbmd0aCxhPW5ldyBBcnJheShvKTtmb3IobGV0IHI9MDtyPG87cisrKXtsZXQgaT10W3JdLGY9aS5nZW9tZXRyeSxkPWkubW9kdWxlTmFtZSxjPWkubW9kdWxlUGF0aDtpZihnKGQpJiZnKGMpKXRocm93IG5ldyBWdCgiTXVzdCBvbmx5IHNldCBtb2R1bGVOYW1lIG9yIG1vZHVsZVBhdGgiKTtnKGQpfHxnKGMpP2Fbcl09SXooZCxjKS50aGVuKHU9PnUoZixpLm9mZnNldCkpOmFbcl09Zn1yZXR1cm4gUHJvbWlzZS5hbGwoYSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gdXMucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cyhyLGUpfSl9dmFyIFZtLGt6LFQxPVgoKCk9PntKaSgpO2ZlKCk7TnAoKTtrbigpO0ExKCk7Vm09e307a3o9bXQoUHopfSk7dmFyIGtHPXt9OyRlKGtHLHtjb21iaW5lR2VvbWV0cnk6KCk9PnZ6LGNyZWF0ZUJveEdlb21ldHJ5OigpPT5GeixjcmVhdGVCb3hPdXRsaW5lR2VvbWV0cnk6KCk9PkR6LGNyZWF0ZUNpcmNsZUdlb21ldHJ5OigpPT5CeixjcmVhdGVDaXJjbGVPdXRsaW5lR2VvbWV0cnk6KCk9PlV6LGNyZWF0ZUNvcGxhbmFyUG9seWdvbkdlb21ldHJ5OigpPT5qeixjcmVhdGVDb3BsYW5hclBvbHlnb25PdXRsaW5lR2VvbWV0cnk6KCk9Pkx6LGNyZWF0ZUNvcnJpZG9yR2VvbWV0cnk6KCk9Pnp6LGNyZWF0ZUNvcnJpZG9yT3V0bGluZUdlb21ldHJ5OigpPT5HeixjcmVhdGVDeWxpbmRlckdlb21ldHJ5OigpPT5WeixjcmVhdGVDeWxpbmRlck91dGxpbmVHZW9tZXRyeTooKT0+SHosY3JlYXRlRWxsaXBzZUdlb21ldHJ5OigpPT5LeixjcmVhdGVFbGxpcHNlT3V0bGluZUdlb21ldHJ5OigpPT5xeixjcmVhdGVFbGxpcHNvaWRHZW9tZXRyeTooKT0+V3osY3JlYXRlRWxsaXBzb2lkT3V0bGluZUdlb21ldHJ5OigpPT5YeixjcmVhdGVGcnVzdHVtR2VvbWV0cnk6KCk9Pll6LGNyZWF0ZUZydXN0dW1PdXRsaW5lR2VvbWV0cnk6KCk9Pkp6LGNyZWF0ZUdlb21ldHJ5OigpPT5aeixjcmVhdGVHcm91bmRQb2x5bGluZUdlb21ldHJ5OigpPT5ReixjcmVhdGVQbGFuZUdlb21ldHJ5OigpPT4keixjcmVhdGVQbGFuZU91dGxpbmVHZW9tZXRyeTooKT0+ZUcsY3JlYXRlUG9seWdvbkdlb21ldHJ5OigpPT50RyxjcmVhdGVQb2x5Z29uT3V0bGluZUdlb21ldHJ5OigpPT5uRyxjcmVhdGVQb2x5bGluZUdlb21ldHJ5OigpPT5vRyxjcmVhdGVQb2x5bGluZVZvbHVtZUdlb21ldHJ5OigpPT5hRyxjcmVhdGVQb2x5bGluZVZvbHVtZU91dGxpbmVHZW9tZXRyeTooKT0+ckcsY3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnk6KCk9PmlHLGNyZWF0ZVJlY3RhbmdsZU91dGxpbmVHZW9tZXRyeTooKT0+Y0csY3JlYXRlU2ltcGxlUG9seWxpbmVHZW9tZXRyeTooKT0+c0csY3JlYXRlU3BoZXJlR2VvbWV0cnk6KCk9PmZHLGNyZWF0ZVNwaGVyZU91dGxpbmVHZW9tZXRyeTooKT0+ZEcsY3JlYXRlVGFza1Byb2Nlc3NvcldvcmtlcjooKT0+dUcsY3JlYXRlVmVjdG9yVGlsZUNsYW1wZWRQb2x5bGluZXM6KCk9PmxHLGNyZWF0ZVZlY3RvclRpbGVHZW9tZXRyaWVzOigpPT5oRyxjcmVhdGVWZWN0b3JUaWxlUG9pbnRzOigpPT5tRyxjcmVhdGVWZWN0b3JUaWxlUG9seWdvbnM6KCk9PmJHLGNyZWF0ZVZlY3RvclRpbGVQb2x5bGluZXM6KCk9PnBHLGNyZWF0ZVZlcnRpY2VzRnJvbUNlc2l1bTNEVGlsZXNUZXJyYWluOigpPT5nRyxjcmVhdGVWZXJ0aWNlc0Zyb21Hb29nbGVFYXJ0aEVudGVycHJpc2VCdWZmZXI6KCk9Pl9HLGNyZWF0ZVZlcnRpY2VzRnJvbUhlaWdodG1hcDooKT0+eUcsY3JlYXRlVmVydGljZXNGcm9tUXVhbnRpemVkVGVycmFpbk1lc2g6KCk9PkFHLGNyZWF0ZVdhbGxHZW9tZXRyeTooKT0+d0csY3JlYXRlV2FsbE91dGxpbmVHZW9tZXRyeTooKT0+VEcsZGVjb2RlRHJhY286KCk9PkVHLGRlY29kZUdvb2dsZUVhcnRoRW50ZXJwcmlzZVBhY2tldDooKT0+UkcsZGVjb2RlSTNTOigpPT54RyxnYXVzc2lhblNwbGF0U29ydGVyOigpPT5PRyxnYXVzc2lhblNwbGF0VGV4dHVyZUdlbmVyYXRvcjooKT0+U0csaW5jcmVtZW50YWxseUJ1aWxkVGVycmFpblBpY2tlcjooKT0+Q0csdHJhbnNjb2RlS1RYMjooKT0+TUcsdHJhbnNmZXJUeXBlZEFycmF5VGVzdDooKT0+TkcsdXBzYW1wbGVRdWFudGl6ZWRUZXJyYWluTWVzaDooKT0+SUcsdXBzYW1wbGVWZXJ0aWNlc0Zyb21DZXNpdW0zRFRpbGVzVGVycmFpbjooKT0+UEd9KTt2YXIgdno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5rcCgpKX0sRno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5CcCgpKX0sRHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5McCgpKX0sQno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5KcCgpKX0sVXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5lMCgpKX0sano9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5sMCgpKX0sTHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5iMCgpKX0seno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5QMCgpKX0sR3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5GMCgpKX0sVno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT56MCgpKX0sSHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5LMCgpKX0sS3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5XMCgpKX0scXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ZMCgpKX0sV3o9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5RMCgpKX0sWHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50ZygpKX0sWXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5kZygpKX0sSno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5tZygpKX0sWno9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5UMSgpKX0sUXo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5DZygpKX0sJHo9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5JZygpKX0sZUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT52ZygpKX0sdEc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5VZygpKX0sbkc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT56ZygpKX0sb0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5XZygpKX0sYUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5KZygpKX0sckc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4kZygpKX0saUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5zXygpKX0sY0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT51XygpKX0sc0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5tXygpKX0sZkc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5nXygpKX0sZEc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BXygpKX0sdUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5rbigpKX0sbEc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5UXygpKX0saEc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5SXygpKX0sbUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5TXygpKX0sYkc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5NXygpKX0scEc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5QXygpKX0sZ0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5RXygpKX0sX0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50eSgpKX0seUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5heSgpKX0sQUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5jeSgpKX0sd0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5seSgpKX0sVEc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ieSgpKX0sRUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT53eSgpKX0sUkc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ZeSgpKX0seEc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5lMSgpKX0sT0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5yMSgpKX0sU0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5jMSgpKX0sQ0c9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5mMSgpKX0sTUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5tMSgpKX0sTkc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5iMSgpKX0sSUc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5nMSgpKX0sUEc9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT55MSgpKX07cmV0dXJuIGVDKGtHKTt9KSgpOwo=")});var KU=sm((c9t,Rse)=>{var l9t=x(T()),A0=function(e){e==null&&(e=new Date().getTime()),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,e.constructor==Array?this.init_by_array(e,e.length):this.init_seed(e)};A0.prototype.init_seed=function(e){for(this.mt[0]=e>>>0,this.mti=1;this.mti>>30;this.mt[this.mti]=(((e&4294901760)>>>16)*1812433253<<16)+(e&65535)*1812433253+this.mti,this.mt[this.mti]>>>=0}};A0.prototype.init_by_array=function(e,t){var n,i,o;for(this.init_seed(19650218),n=1,i=0,o=this.N>t?this.N:t;o;o--){var r=this.mt[n-1]^this.mt[n-1]>>>30;this.mt[n]=(this.mt[n]^(((r&4294901760)>>>16)*1664525<<16)+(r&65535)*1664525)+e[i]+i,this.mt[n]>>>=0,n++,i++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1),i>=t&&(i=0)}for(o=this.N-1;o;o--){var r=this.mt[n-1]^this.mt[n-1]>>>30;this.mt[n]=(this.mt[n]^(((r&4294901760)>>>16)*1566083941<<16)+(r&65535)*1566083941)-n,this.mt[n]>>>=0,n++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1)}this.mt[0]=2147483648};A0.prototype.random_int=function(){var e,t=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var n;for(this.mti==this.N+1&&this.init_seed(5489),n=0;n>>1^t[e&1];for(;n>>1^t[e&1];e=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^e>>>1^t[e&1],this.mti=0}return e=this.mt[this.mti++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0};A0.prototype.random_int31=function(){return this.random_int()>>>1};A0.prototype.random_incl=function(){return this.random_int()*(1/4294967295)};A0.prototype.random=function(){return this.random_int()*(1/4294967296)};A0.prototype.random_excl=function(){return(this.random_int()+.5)*(1/4294967296)};A0.prototype.random_long=function(){var e=this.random_int()>>>5,t=this.random_int()>>>6;return(e*67108864+t)*(1/9007199254740992)};Rse.exports=A0});var Bse=sm((lV,dV)=>{var BUt=x(T());/*! https://mths.be/punycode v1.4.0 by @mathias */(function(e){var t=typeof lV=="object"&&lV&&!lV.nodeType&&lV,n=typeof dV=="object"&&dV&&!dV.nodeType&&dV,i=typeof global=="object"&&global;(i.global===i||i.window===i||i.self===i)&&(e=i);var o,r=2147483647,s=36,a=1,c=26,d=38,u=700,m=72,p=128,b="-",f=/^xn--/,y=/[^\x20-\x7E]/,_=/[\x2E\u3002\uFF0E\uFF61]/g,S={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Z=s-a,V=Math.floor,C=String.fromCharCode,G;function E(k){throw new RangeError(S[k])}function v(k,O){for(var w=k.length,z=[];w--;)z[w]=O(k[w]);return z}function F(k,O){var w=k.split("@"),z="";w.length>1&&(z=w[0]+"@",k=w[1]),k=k.replace(_,".");var H=k.split("."),te=v(H,O).join(".");return z+te}function P(k){for(var O=[],w=0,z=k.length,H,te;w=55296&&H<=56319&&w65535&&(O-=65536,w+=C(O>>>10&1023|55296),O=56320|O&1023),w+=C(O),w}).join("")}function g(k){return k-48<10?k-22:k-65<26?k-65:k-97<26?k-97:s}function R(k,O){return k+22+75*(k<26)-((O!=0)<<5)}function A(k,O,w){var z=0;for(k=w?V(k/u):k>>1,k+=V(k/O);k>Z*c>>1;z+=s)k=V(k/Z);return V(z+(Z+1)*k/(k+d))}function W(k){var O=[],w=k.length,z,H=0,te=p,K=m,$,ee,de,_e,ue,Ce,Te,Re,Le;for($=k.lastIndexOf(b),$<0&&($=0),ee=0;ee<$;++ee)k.charCodeAt(ee)>=128&&E("not-basic"),O.push(k.charCodeAt(ee));for(de=$>0?$+1:0;de=w&&E("invalid-input"),Te=g(k.charCodeAt(de++)),(Te>=s||Te>V((r-H)/ue))&&E("overflow"),H+=Te*ue,Re=Ce<=K?a:Ce>=K+c?c:Ce-K,!(TeV(r/Le)&&E("overflow"),ue*=Le;z=O.length+1,K=A(H-_e,z,_e==0),V(H/z)>r-te&&E("overflow"),te+=V(H/z),H%=z,O.splice(H++,0,te)}return N(O)}function X(k){var O,w,z,H,te,K,$,ee,de,_e,ue,Ce=[],Te,Re,Le,Xe;for(k=P(k),Te=k.length,O=p,w=0,te=m,K=0;K=O&&ue<$&&($=ue);for(Re=z+1,$-O>V((r-w)/Re)&&E("overflow"),w+=($-O)*Re,O=$,K=0;Kr&&E("overflow"),ue==O){for(ee=w,de=s;_e=de<=te?a:de>=te+c?c:de-te,!(ee<_e);de+=s)Xe=ee-_e,Le=s-_e,Ce.push(C(R(_e+Xe%Le,0))),ee=V(Xe/Le);Ce.push(C(R(ee,0))),te=A(w,Re,z==H),w=0,++z}++w,++O}return Ce.join("")}function Y(k){return F(k,function(O){return f.test(O)?W(O.slice(4).toLowerCase()):O})}function D(k){return F(k,function(O){return y.test(O)?"xn--"+X(O):O})}if(o={version:"1.3.2",ucs2:{decode:P,encode:N},decode:W,encode:X,toASCII:D,toUnicode:Y},typeof define=="function"&&typeof define.amd=="object"&&define.amd)define("punycode",function(){return o});else if(t&&n)if(dV.exports==t)n.exports=o;else for(G in o)o.hasOwnProperty(G)&&(t[G]=o[G]);else e.punycode=o})(lV)});var Hse=sm((zse,i5)=>{var zUt=x(T());/*! * URI.js - Mutating URLs * IPv6 Support * * Version: 1.19.11 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ * * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * */(function(e,t){"use strict";typeof i5=="object"&&i5.exports?i5.exports=t():typeof define=="function"&&define.amd?define(t):e.IPv6=t(e)})(zse,function(e){"use strict";var t=e&&e.IPv6;function n(o){var r=o.toLowerCase(),s=r.split(":"),a=s.length,c=8;s[0]===""&&s[1]===""&&s[2]===""?(s.shift(),s.shift()):s[0]===""&&s[1]===""?s.shift():s[a-1]===""&&s[a-2]===""&&s.pop(),a=s.length,s[a-1].indexOf(".")!==-1&&(c=7);var d;for(d=0;d1);p++)u.splice(0,1);s[m]=u.join("")}var b=-1,f=0,y=0,_=-1,S=!1;for(m=0;mf&&(b=_,f=y)):s[m]==="0"&&(S=!0,_=m,y=1);y>f&&(b=_,f=y),f>1&&s.splice(b,f,""),a=s.length;var Z="";for(s[0]===""&&(Z=":"),m=0;m{var HUt=x(T());/*! * URI.js - Mutating URLs * Second Level Domain (SLD) Support * * Version: 1.19.11 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ * * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * */(function(e,t){"use strict";typeof o5=="object"&&o5.exports?o5.exports=t():typeof define=="function"&&define.amd?define(t):e.SecondLevelDomains=t(e)})(Kse,function(e){"use strict";var t=e&&e.SecondLevelDomains,n={list:{ac:" com gov mil net org ",ae:" ac co gov mil name net org pro sch ",af:" com edu gov net org ",al:" com edu gov mil net org ",ao:" co ed gv it og pb ",ar:" com edu gob gov int mil net org tur ",at:" ac co gv or ",au:" asn com csiro edu gov id net org ",ba:" co com edu gov mil net org rs unbi unmo unsa untz unze ",bb:" biz co com edu gov info net org store tv ",bh:" biz cc com edu gov info net org ",bn:" com edu gov net org ",bo:" com edu gob gov int mil net org tv ",br:" adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ",bs:" com edu gov net org ",bz:" du et om ov rg ",ca:" ab bc mb nb nf nl ns nt nu on pe qc sk yk ",ck:" biz co edu gen gov info net org ",cn:" ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ",co:" com edu gov mil net nom org ",cr:" ac c co ed fi go or sa ",cy:" ac biz com ekloges gov ltd name net org parliament press pro tm ",do:" art com edu gob gov mil net org sld web ",dz:" art asso com edu gov net org pol ",ec:" com edu fin gov info med mil net org pro ",eg:" com edu eun gov mil name net org sci ",er:" com edu gov ind mil net org rochest w ",es:" com edu gob nom org ",et:" biz com edu gov info name net org ",fj:" ac biz com info mil name net org pro ",fk:" ac co gov net nom org ",fr:" asso com f gouv nom prd presse tm ",gg:" co net org ",gh:" com edu gov mil org ",gn:" ac com gov net org ",gr:" com edu gov mil net org ",gt:" com edu gob ind mil net org ",gu:" com edu gov net org ",hk:" com edu gov idv net org ",hu:" 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ",id:" ac co go mil net or sch web ",il:" ac co gov idf k12 muni net org ",in:" ac co edu ernet firm gen gov i ind mil net nic org res ",iq:" com edu gov i mil net org ",ir:" ac co dnssec gov i id net org sch ",it:" edu gov ",je:" co net org ",jo:" com edu gov mil name net org sch ",jp:" ac ad co ed go gr lg ne or ",ke:" ac co go info me mobi ne or sc ",kh:" com edu gov mil net org per ",ki:" biz com de edu gov info mob net org tel ",km:" asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ",kn:" edu gov net org ",kr:" ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ",kw:" com edu gov net org ",ky:" com edu gov net org ",kz:" com edu gov mil net org ",lb:" com edu gov net org ",lk:" assn com edu gov grp hotel int ltd net ngo org sch soc web ",lr:" com edu gov net org ",lv:" asn com conf edu gov id mil net org ",ly:" com edu gov id med net org plc sch ",ma:" ac co gov m net org press ",mc:" asso tm ",me:" ac co edu gov its net org priv ",mg:" com edu gov mil nom org prd tm ",mk:" com edu gov inf name net org pro ",ml:" com edu gov net org presse ",mn:" edu gov org ",mo:" com edu gov net org ",mt:" com edu gov net org ",mv:" aero biz com coop edu gov info int mil museum name net org pro ",mw:" ac co com coop edu gov int museum net org ",mx:" com edu gob net org ",my:" com edu gov mil name net org sch ",nf:" arts com firm info net other per rec store web ",ng:" biz com edu gov mil mobi name net org sch ",ni:" ac co com edu gob mil net nom org ",np:" com edu gov mil net org ",nr:" biz com edu gov info net org ",om:" ac biz co com edu gov med mil museum net org pro sch ",pe:" com edu gob mil net nom org sld ",ph:" com edu gov i mil net ngo org ",pk:" biz com edu fam gob gok gon gop gos gov net org web ",pl:" art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ",pr:" ac biz com edu est gov info isla name net org pro prof ",ps:" com edu gov net org plo sec ",pw:" belau co ed go ne or ",ro:" arts com firm info nom nt org rec store tm www ",rs:" ac co edu gov in org ",sb:" com edu gov net org ",sc:" com edu gov net org ",sh:" co com edu gov net nom org ",sl:" com edu gov net org ",st:" co com consulado edu embaixada gov mil net org principe saotome store ",sv:" com edu gob org red ",sz:" ac co org ",tr:" av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ",tt:" aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ",tw:" club com ebiz edu game gov idv mil net org ",mu:" ac co com gov net or org ",mz:" ac co edu gov org ",na:" co com ",nz:" ac co cri geek gen govt health iwi maori mil net org parliament school ",pa:" abo ac com edu gob ing med net nom org sld ",pt:" com edu gov int net nome org publ ",py:" com edu gov mil net org ",qa:" com edu gov mil net org ",re:" asso com nom ",ru:" ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ",rw:" ac co com edu gouv gov int mil net ",sa:" com edu gov med net org pub sch ",sd:" com edu gov info med net org tv ",se:" a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ",sg:" com edu gov idn net org per ",sn:" art com edu gouv org perso univ ",sy:" com edu gov mil net news org ",th:" ac co go in mi net or ",tj:" ac biz co com edu go gov info int mil name net nic org test web ",tn:" agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ",tz:" ac co go ne or ",ua:" biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ",ug:" ac co go ne or org sc ",uk:" ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ",us:" dni fed isa kids nsn ",uy:" com edu gub mil net org ",ve:" co com edu gob info mil net org web ",vi:" co com k12 net org ",vn:" ac biz com edu gov health info int name net org pro ",ye:" co com gov ltd me net org plc ",yu:" ac co edu gov org ",za:" ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ",zm:" ac co com edu gov net org sch ",com:"ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ",net:"gb jp se uk ",org:"ae",de:"com "},has:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return!1;var r=i.lastIndexOf(".",o-1);if(r<=0||r>=o-1)return!1;var s=n.list[i.slice(o+1)];return s?s.indexOf(" "+i.slice(r+1,o)+" ")>=0:!1},is:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return!1;var r=i.lastIndexOf(".",o-1);if(r>=0)return!1;var s=n.list[i.slice(o+1)];return s?s.indexOf(" "+i.slice(0,o)+" ")>=0:!1},get:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return null;var r=i.lastIndexOf(".",o-1);if(r<=0||r>=o-1)return null;var s=n.list[i.slice(o+1)];return!s||s.indexOf(" "+i.slice(r+1,o)+" ")<0?null:i.slice(r+1)},noConflict:function(){return e.SecondLevelDomains===this&&(e.SecondLevelDomains=t),this}};return n})});var tu=sm((jse,r5)=>{var KUt=x(T());/*! * URI.js - Mutating URLs * * Version: 1.19.11 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ * * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * */(function(e,t){"use strict";typeof r5=="object"&&r5.exports?r5.exports=t(Bse(),Hse(),Jse()):typeof define=="function"&&define.amd?define(["./punycode","./IPv6","./SecondLevelDomains"],t):e.URI=t(e.punycode,e.IPv6,e.SecondLevelDomains,e)})(jse,function(e,t,n,i){"use strict";var o=i&&i.URI;function r(R,A){var W=arguments.length>=1,X=arguments.length>=2;if(!(this instanceof r))return W?X?new r(R,A):new r(R):new r;if(R===void 0){if(W)throw new TypeError("undefined is not a valid argument for URI");typeof location<"u"?R=location.href+"":R=""}if(R===null&&W)throw new TypeError("null is not a valid argument for URI");return this.href(R),A!==void 0?this.absoluteTo(A):this}function s(R){return/^[0-9]+$/.test(R)}r.version="1.19.11";var a=r.prototype,c=Object.prototype.hasOwnProperty;function d(R){return R.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function u(R){return R===void 0?"Undefined":String(Object.prototype.toString.call(R)).slice(8,-1)}function m(R){return u(R)==="Array"}function p(R,A){var W={},X,Y;if(u(A)==="RegExp")W=null;else if(m(A))for(X=0,Y=A.length;X]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig,r.findUri={start:/\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi,end:/[\s\r\n]|$/,trim:/[`!()\[\]{};:'".,<>?«»“”„‘’]+$/,parens:/(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g},r.leading_whitespace_expression=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,r.ascii_tab_whitespace=/[\u0009\u000A\u000D]+/g,r.defaultPorts={http:"80",https:"443",ftp:"21",gopher:"70",ws:"80",wss:"443"},r.hostProtocols=["http","https"],r.invalid_hostname_characters=/[^a-zA-Z0-9\.\-:_]/,r.domAttributes={a:"href",blockquote:"cite",link:"href",base:"href",script:"src",form:"action",img:"src",area:"href",iframe:"src",embed:"src",source:"src",track:"src",input:"src",audio:"src",video:"src"},r.getDomAttribute=function(R){if(!(!R||!R.nodeName)){var A=R.nodeName.toLowerCase();if(!(A==="input"&&R.type!=="image"))return r.domAttributes[A]}};function _(R){return escape(R)}function S(R){return encodeURIComponent(R).replace(/[!'()*]/g,_).replace(/\*/g,"%2A")}r.encode=S,r.decode=decodeURIComponent,r.iso8859=function(){r.encode=escape,r.decode=unescape},r.unicode=function(){r.encode=S,r.decode=decodeURIComponent},r.characters={pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/ig,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\/\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}},urnpath:{encode:{expression:/%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,map:{"%21":"!","%24":"$","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"=","%40":"@"}},decode:{expression:/[\/\?#:]/g,map:{"/":"%2F","?":"%3F","#":"%23",":":"%3A"}}}},r.encodeQuery=function(R,A){var W=r.encode(R+"");return A===void 0&&(A=r.escapeQuerySpace),A?W.replace(/%20/g,"+"):W},r.decodeQuery=function(R,A){R+="",A===void 0&&(A=r.escapeQuerySpace);try{return r.decode(A?R.replace(/\+/g,"%20"):R)}catch{return R}};var Z={encode:"encode",decode:"decode"},V,C=function(R,A){return function(W){try{return r[A](W+"").replace(r.characters[R][A].expression,function(X){return r.characters[R][A].map[X]})}catch{return W}}};for(V in Z)r[V+"PathSegment"]=C("pathname",Z[V]),r[V+"UrnPathSegment"]=C("urnpath",Z[V]);var G=function(R,A,W){return function(X){var Y;W?Y=function(w){return r[A](r[W](w))}:Y=r[A];for(var D=(X+"").split(R),k=0,O=D.length;k-1&&(A.fragment=R.substring(W+1)||null,R=R.substring(0,W)),W=R.indexOf("?"),W>-1&&(A.query=R.substring(W+1)||null,R=R.substring(0,W)),R=R.replace(/^(https?|ftp|wss?)?:+[/\\]*/i,"$1://"),R=R.replace(/^[/\\]{2,}/i,"//"),R.substring(0,2)==="//"?(A.protocol=null,R=R.substring(2),R=r.parseAuthority(R,A)):(W=R.indexOf(":"),W>-1&&(A.protocol=R.substring(0,W)||null,A.protocol&&!A.protocol.match(r.protocol_expression)?A.protocol=void 0:R.substring(W+1,W+3).replace(/\\/g,"/")==="//"?(R=R.substring(W+3),R=r.parseAuthority(R,A)):(R=R.substring(W+1),A.urn=!0))),A.path=R,A},r.parseHost=function(R,A){R||(R=""),R=R.replace(/\\/g,"/");var W=R.indexOf("/"),X,Y;if(W===-1&&(W=R.length),R.charAt(0)==="[")X=R.indexOf("]"),A.hostname=R.substring(1,X)||null,A.port=R.substring(X+2,W)||null,A.port==="/"&&(A.port=null);else{var D=R.indexOf(":"),k=R.indexOf("/"),O=R.indexOf(":",D+1);O!==-1&&(k===-1||O-1?Y:R.length-1),k;return D>-1&&(Y===-1||D-1?K=K.slice(0,$)+K.slice($).replace(D,""):K=K.replace(D,""),!(K.length<=w[0].length)&&!(W.ignore&&W.ignore.test(K))){te=z+K.length;var _e=A(K,z,te,R);if(_e===void 0){X.lastIndex=te;continue}_e=String(_e),R=R.slice(0,z)+_e+R.slice(te),X.lastIndex=z+_e.length}}return X.lastIndex=0,R},r.ensureValidHostname=function(R,A){var W=!!R,X=!!A,Y=!1;if(X&&(Y=b(r.hostProtocols,A)),Y&&!W)throw new TypeError("Hostname cannot be empty, if protocol is "+A);if(R&&R.match(r.invalid_hostname_characters)){if(!e)throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');if(e.toASCII(R).match(r.invalid_hostname_characters))throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-:_]')}},r.ensureValidPort=function(R){if(R){var A=Number(R);if(!(s(A)&&A>0&&A<65536))throw new TypeError('Port "'+R+'" is not a valid port')}},r.noConflict=function(R){if(R){var A={URI:this.noConflict()};return i.URITemplate&&typeof i.URITemplate.noConflict=="function"&&(A.URITemplate=i.URITemplate.noConflict()),i.IPv6&&typeof i.IPv6.noConflict=="function"&&(A.IPv6=i.IPv6.noConflict()),i.SecondLevelDomains&&typeof i.SecondLevelDomains.noConflict=="function"&&(A.SecondLevelDomains=i.SecondLevelDomains.noConflict()),A}else i.URI===this&&(i.URI=o);return this},a.build=function(R){return R===!0?this._deferred_build=!0:(R===void 0||this._deferred_build)&&(this._string=r.build(this._parts),this._deferred_build=!1),this},a.clone=function(){return new r(this)},a.valueOf=a.toString=function(){return this.build(!1)._string};function E(R){return function(A,W){return A===void 0?this._parts[R]||"":(this._parts[R]=A||null,this.build(!W),this)}}function v(R,A){return function(W,X){return W===void 0?this._parts[R]||"":(W!==null&&(W=W+"",W.charAt(0)===A&&(W=W.substring(1))),this._parts[R]=W,this.build(!X),this)}}a.protocol=E("protocol"),a.username=E("username"),a.password=E("password"),a.hostname=E("hostname"),a.port=E("port"),a.query=v("query","?"),a.fragment=v("fragment","#"),a.search=function(R,A){var W=this.query(R,A);return typeof W=="string"&&W.length?"?"+W:W},a.hash=function(R,A){var W=this.fragment(R,A);return typeof W=="string"&&W.length?"#"+W:W},a.pathname=function(R,A){if(R===void 0||R===!0){var W=this._parts.path||(this._parts.hostname?"/":"");return R?(this._parts.urn?r.decodeUrnPath:r.decodePath)(W):W}else return this._parts.urn?this._parts.path=R?r.recodeUrnPath(R):"":this._parts.path=R?r.recodePath(R):"/",this.build(!A),this},a.path=a.pathname,a.href=function(R,A){var W;if(R===void 0)return this.toString();this._string="",this._parts=r._parts();var X=R instanceof r,Y=typeof R=="object"&&(R.hostname||R.path||R.pathname);if(R.nodeName){var D=r.getDomAttribute(R);R=R[D]||"",Y=!1}if(!X&&Y&&R.pathname!==void 0&&(R=R.toString()),typeof R=="string"||R instanceof String)this._parts=r.parse(String(R),this._parts);else if(X||Y){var k=X?R._parts:R;for(W in k)W!=="query"&&c.call(this._parts,W)&&(this._parts[W]=k[W]);k.query&&this.query(k.query,!1)}else throw new TypeError("invalid input");return this.build(!A),this},a.is=function(R){var A=!1,W=!1,X=!1,Y=!1,D=!1,k=!1,O=!1,w=!this._parts.urn;switch(this._parts.hostname&&(w=!1,W=r.ip4_expression.test(this._parts.hostname),X=r.ip6_expression.test(this._parts.hostname),A=W||X,Y=!A,D=Y&&n&&n.has(this._parts.hostname),k=Y&&r.idn_expression.test(this._parts.hostname),O=Y&&r.punycode_expression.test(this._parts.hostname)),R.toLowerCase()){case"relative":return w;case"absolute":return!w;case"domain":case"name":return Y;case"sld":return D;case"ip":return A;case"ip4":case"ipv4":case"inet4":return W;case"ip6":case"ipv6":case"inet6":return X;case"idn":return k;case"url":return!this._parts.urn;case"urn":return!!this._parts.urn;case"punycode":return O}return null};var F=a.protocol,P=a.port,N=a.hostname;a.protocol=function(R,A){if(R&&(R=R.replace(/:(\/\/)?$/,""),!R.match(r.protocol_expression)))throw new TypeError('Protocol "'+R+`" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]`);return F.call(this,R,A)},a.scheme=a.protocol,a.port=function(R,A){return this._parts.urn?R===void 0?"":this:(R!==void 0&&(R===0&&(R=null),R&&(R+="",R.charAt(0)===":"&&(R=R.substring(1)),r.ensureValidPort(R))),P.call(this,R,A))},a.hostname=function(R,A){if(this._parts.urn)return R===void 0?"":this;if(R!==void 0){var W={preventInvalidHostname:this._parts.preventInvalidHostname},X=r.parseHost(R,W);if(X!=="/")throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-]');R=W.hostname,this._parts.preventInvalidHostname&&r.ensureValidHostname(R,this._parts.protocol)}return N.call(this,R,A)},a.origin=function(R,A){if(this._parts.urn)return R===void 0?"":this;if(R===void 0){var W=this.protocol(),X=this.authority();return X?(W?W+"://":"")+this.authority():""}else{var Y=r(R);return this.protocol(Y.protocol()).authority(Y.authority()).build(!A),this}},a.host=function(R,A){if(this._parts.urn)return R===void 0?"":this;if(R===void 0)return this._parts.hostname?r.buildHost(this._parts):"";var W=r.parseHost(R,this._parts);if(W!=="/")throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-]');return this.build(!A),this},a.authority=function(R,A){if(this._parts.urn)return R===void 0?"":this;if(R===void 0)return this._parts.hostname?r.buildAuthority(this._parts):"";var W=r.parseAuthority(R,this._parts);if(W!=="/")throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-]');return this.build(!A),this},a.userinfo=function(R,A){if(this._parts.urn)return R===void 0?"":this;if(R===void 0){var W=r.buildUserinfo(this._parts);return W&&W.substring(0,W.length-1)}else return R[R.length-1]!=="@"&&(R+="@"),r.parseUserinfo(R,this._parts),this.build(!A),this},a.resource=function(R,A){var W;return R===void 0?this.path()+this.search()+this.hash():(W=r.parse(R),this._parts.path=W.path,this._parts.query=W.query,this._parts.fragment=W.fragment,this.build(!A),this)},a.subdomain=function(R,A){if(this._parts.urn)return R===void 0?"":this;if(R===void 0){if(!this._parts.hostname||this.is("IP"))return"";var W=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0,W)||""}else{var X=this._parts.hostname.length-this.domain().length,Y=this._parts.hostname.substring(0,X),D=new RegExp("^"+d(Y));if(R&&R.charAt(R.length-1)!=="."&&(R+="."),R.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");return R&&r.ensureValidHostname(R,this._parts.protocol),this._parts.hostname=this._parts.hostname.replace(D,R),this.build(!A),this}},a.domain=function(R,A){if(this._parts.urn)return R===void 0?"":this;if(typeof R=="boolean"&&(A=R,R=void 0),R===void 0){if(!this._parts.hostname||this.is("IP"))return"";var W=this._parts.hostname.match(/\./g);if(W&&W.length<2)return this._parts.hostname;var X=this._parts.hostname.length-this.tld(A).length-1;return X=this._parts.hostname.lastIndexOf(".",X-1)+1,this._parts.hostname.substring(X)||""}else{if(!R)throw new TypeError("cannot set domain empty");if(R.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");if(r.ensureValidHostname(R,this._parts.protocol),!this._parts.hostname||this.is("IP"))this._parts.hostname=R;else{var Y=new RegExp(d(this.domain())+"$");this._parts.hostname=this._parts.hostname.replace(Y,R)}return this.build(!A),this}},a.tld=function(R,A){if(this._parts.urn)return R===void 0?"":this;if(typeof R=="boolean"&&(A=R,R=void 0),R===void 0){if(!this._parts.hostname||this.is("IP"))return"";var W=this._parts.hostname.lastIndexOf("."),X=this._parts.hostname.substring(W+1);return A!==!0&&n&&n.list[X.toLowerCase()]&&n.get(this._parts.hostname)||X}else{var Y;if(R)if(R.match(/[^a-zA-Z0-9-]/))if(n&&n.is(R))Y=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(Y,R);else throw new TypeError('TLD "'+R+'" contains characters other than [A-Z0-9]');else{if(!this._parts.hostname||this.is("IP"))throw new ReferenceError("cannot set TLD on non-domain host");Y=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(Y,R)}else throw new TypeError("cannot set TLD empty");return this.build(!A),this}},a.directory=function(R,A){if(this._parts.urn)return R===void 0?"":this;if(R===void 0||R===!0){if(!this._parts.path&&!this._parts.hostname)return"";if(this._parts.path==="/")return"/";var W=this._parts.path.length-this.filename().length-1,X=this._parts.path.substring(0,W)||(this._parts.hostname?"/":"");return R?r.decodePath(X):X}else{var Y=this._parts.path.length-this.filename().length,D=this._parts.path.substring(0,Y),k=new RegExp("^"+d(D));return this.is("relative")||(R||(R="/"),R.charAt(0)!=="/"&&(R="/"+R)),R&&R.charAt(R.length-1)!=="/"&&(R+="/"),R=r.recodePath(R),this._parts.path=this._parts.path.replace(k,R),this.build(!A),this}},a.filename=function(R,A){if(this._parts.urn)return R===void 0?"":this;if(typeof R!="string"){if(!this._parts.path||this._parts.path==="/")return"";var W=this._parts.path.lastIndexOf("/"),X=this._parts.path.substring(W+1);return R?r.decodePathSegment(X):X}else{var Y=!1;R.charAt(0)==="/"&&(R=R.substring(1)),R.match(/\.?\//)&&(Y=!0);var D=new RegExp(d(this.filename())+"$");return R=r.recodePath(R),this._parts.path=this._parts.path.replace(D,R),Y?this.normalizePath(A):this.build(!A),this}},a.suffix=function(R,A){if(this._parts.urn)return R===void 0?"":this;if(R===void 0||R===!0){if(!this._parts.path||this._parts.path==="/")return"";var W=this.filename(),X=W.lastIndexOf("."),Y,D;return X===-1?"":(Y=W.substring(X+1),D=/^[a-z0-9%]+$/i.test(Y)?Y:"",R?r.decodePathSegment(D):D)}else{R.charAt(0)==="."&&(R=R.substring(1));var k=this.suffix(),O;if(k)R?O=new RegExp(d(k)+"$"):O=new RegExp(d("."+k)+"$");else{if(!R)return this;this._parts.path+="."+r.recodePath(R)}return O&&(R=r.recodePath(R),this._parts.path=this._parts.path.replace(O,R)),this.build(!A),this}},a.segment=function(R,A,W){var X=this._parts.urn?":":"/",Y=this.path(),D=Y.substring(0,1)==="/",k=Y.split(X);if(R!==void 0&&typeof R!="number"&&(W=A,A=R,R=void 0),R!==void 0&&typeof R!="number")throw new Error('Bad segment "'+R+'", must be 0-based integer');if(D&&k.shift(),R<0&&(R=Math.max(k.length+R,0)),A===void 0)return R===void 0?k:k[R];if(R===null||k[R]===void 0)if(m(A)){k=[];for(var O=0,w=A.length;O{var Z0n=x(T());/*! * protobuf.js v8.7.1 (c) 2016, daniel wirtz * compiled mon, 13 jul 2026 11:04:12 utc * licensed under the bsd-3-clause license * see: https://github.com/dcodeio/protobuf.js for details */(function(e){"use strict";(function(n,i,o){function r(a){var c=i[a];return c||n[a][0].call(c=i[a]={exports:{}},r,c,c.exports),c.exports}var s=r(o[0]);s.util.global.protobuf=s,typeof define=="function"&&define.amd&&define(["long"],function(a){return a&&a.isLong&&(s.util.Long=a,s.configure()),s}),typeof XE=="object"&&XE&&XE.exports&&(XE.exports=s)})({1:[function(t,n,i){"use strict";i.build="minimal",i.Writer=t(15),i.BufferWriter=t(16),i.Reader=t(2),i.BufferReader=t(3),i.util=t(12),i.rpc=t(5),i.roots=t(4),i.configure=o;function o(){i.util.LongBits._configure(i.util.Long),i.Writer._configure(i.BufferWriter),i.Reader._configure(i.BufferReader)}o()},{12:12,15:15,16:16,2:2,3:3,4:4,5:5}],2:[function(t,n,i){"use strict";n.exports=d;var o=t(12),r,s=o.LongBits,a=o.utf8;function c(Z,V){return RangeError("index out of range: "+Z.pos+" + "+(V||1)+" > "+Z.len)}function d(Z){this.buf=Z,this.pos=0,this.len=Z.length,this.view=null,this.discardUnknown=d.discardUnknown}function u(Z){if(Array.isArray(Z)&&(Z=new Uint8Array(Z)),Z instanceof Uint8Array)return new d(Z);throw Error("illegal buffer")}var m=function(){return o.Buffer?function(C){return(d.create=function(E){return o.Buffer.isBuffer(E)?new r(E):u(E)})(C)}:u};d.create=m(),d.prototype.raw=function(V,C){return this.buf.subarray(V,C)},d.prototype.uint32=function(){var V=this.buf,C=this.pos,G=(V[C]&127)>>>0;if(V[C++]<128)return this.pos=C,G;if(G=(G|(V[C]&127)<<7)>>>0,V[C++]<128)return this.pos=C,G;if(G=(G|(V[C]&127)<<14)>>>0,V[C++]<128)return this.pos=C,G;if(G=(G|(V[C]&127)<<21)>>>0,V[C++]<128)return this.pos=C,G;if(G=(G|(V[C]&15)<<28)>>>0,V[C++]<128)return this.pos=C,G;for(var E=0;E<5;++E){if(C>=this.len)throw this.pos=C,c(this);if(V[C++]<128)return this.pos=C,G}throw this.pos=C,Error("invalid varint encoding")},d.prototype.tag=function(){var V=this.buf,C=this.pos,G=(V[C]&127)>>>0;if(V[C++]<128)return this.pos=C,G;if(G=(G|(V[C]&127)<<7)>>>0,V[C++]<128)return this.pos=C,G;if(G=(G|(V[C]&127)<<14)>>>0,V[C++]<128)return this.pos=C,G;if(G=(G|(V[C]&127)<<21)>>>0,V[C++]<128)return this.pos=C,G;if(G=(G|(V[C]&15)<<28)>>>0,V[C]<128&&(V[C]&112)===0)return this.pos=C+1,G;throw this.pos=C+1,Error("invalid tag encoding")},d.prototype.int32=function(){return this.uint32()|0},d.prototype.sint32=function(){var V=this.uint32();return V>>>1^-(V&1)|0};function p(){var Z=new s(0,0),V=0;if(this.len-this.pos>4){for(;V<4;++V)if(Z.lo=(Z.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return Z;if(Z.lo=(Z.lo|(this.buf[this.pos]&127)<<28)>>>0,Z.hi=(Z.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return Z;V=0}else{for(;V<4;++V){if(this.pos>=this.len)throw c(this);if(Z.lo=(Z.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return Z}throw c(this)}if(this.len-this.pos>4){for(;V<5;++V)if(Z.hi=(Z.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return Z}else for(;V<5;++V){if(this.pos>=this.len)throw c(this);if(Z.hi=(Z.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return Z}throw Error("invalid varint encoding")}d.prototype.bool=function(){for(var V=!1,C,G=0;G<10;++G){if(this.pos>=this.len)throw c(this);if(C=this.buf[this.pos++],C&127&&(V=!0),C<128)return V}throw Error("invalid varint encoding")};function b(Z,V){return(Z[V-4]|Z[V-3]<<8|Z[V-2]<<16|Z[V-1]<<24)>>>0}d.prototype.fixed32=function(){if(this.pos+4>this.len)throw c(this,4);return b(this.buf,this.pos+=4)},d.prototype.sfixed32=function(){if(this.pos+4>this.len)throw c(this,4);return b(this.buf,this.pos+=4)|0};function f(){if(this.pos+8>this.len)throw c(this,8);return new s(b(this.buf,this.pos+=4),b(this.buf,this.pos+=4))}d.prototype.float=function(){if(this.pos+4>this.len)throw c(this,4);var V=o.float.readFloatLE(this.buf,this.pos);return this.pos+=4,V},d.prototype.double=function(){if(this.pos+8>this.len)throw c(this,4);var V=o.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,V},d.prototype.uint32s=function(V){V===e&&(V=[]);for(var C=this.uint32()+this.pos;this.posthis.len)throw c(this,C);var E=C>>>2,v=V.length,F=this.pos;V.length=v+E;var P=S(this,E,_);if(P)for(var N=0;Nthis.len)throw c(this,C);var E=C>>>2,v=V.length,F=this.pos;V.length=v+E;var P=S(this,E,_);if(P)for(var N=0;Nthis.len)throw c(this,C);var E=C>>>2,v=V.length,F=this.pos;V.length=v+E;var P=S(this,E,y);if(P)for(var N=0;Nthis.len)throw c(this,C);var E=C>>>3,v=V.length,F=this.pos;V.length=v+E;var P=S(this,E,y);if(P)for(var N=0;Nthis.len)throw c(this,C);var v=C>>>3;V.length=E+v;for(var F=0;Fthis.len)throw c(this,C);var v=C>>>3;V.length=E+v;for(var F=0;Fthis.len)throw c(this,V);return this.pos=G,this.raw(C,G)},d.prototype.string=function(){var V=this.uint32(),C=this.pos,G=this.pos+V;if(G>this.len)throw c(this,V);return this.pos=G,a.read(this.buf,C,G)},d.prototype.stringVerify=function(){var V=this.uint32(),C=this.pos,G=this.pos+V;if(G>this.len)throw c(this,V);return this.pos=G,a.readStrict(this.buf,C,G)},d.prototype.skip=function(V){if(typeof V=="number"){if(this.pos+V>this.len)throw c(this,V);this.pos+=V}else do if(this.pos>=this.len)throw c(this);while(this.buf[this.pos++]&128);return this},d.recursionLimit=o.recursionLimit,d.discardUnknown=!0,d.prototype.skipType=function(Z,V,C){if(V===e&&(V=0),V>d.recursionLimit)throw Error("max depth exceeded");if(C===0)throw Error("illegal tag: field number 0");switch(Z){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;;){var G=this.tag(),E=G>>>3;if(Z=G&7,!E)throw Error("illegal tag: field number 0");if(Z===4){if(C!==e&&E!==C)throw Error("invalid end group tag");break}this.skipType(Z,V+1,E)}break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+Z+" at offset "+this.pos)}return this},d._configure=function(Z){r=Z,d.create=m(),r._configure();var V=o.Long?"toLong":"toNumber";o.merge(d.prototype,{int64:function(){return p.call(this)[V](!1)},uint64:function(){return p.call(this)[V](!0)},sint64:function(){return p.call(this).zzDecode()[V](!1)},fixed64:function(){return f.call(this)[V](!0)},sfixed64:function(){return f.call(this)[V](!1)}})}},{12:12}],3:[function(t,n,i){"use strict";n.exports=s;var o=t(2);s.prototype=Object.create(o.prototype,{constructor:{value:s,writable:!0,enumerable:!1,configurable:!0}});var r=t(12);function s(a){o.call(this,a)}s._configure=function(){r.Buffer&&(s.prototype._slice=r.Buffer.prototype.slice)},s.prototype.raw=function(c,d){return this._slice.call(this.buf,c,d)},s.prototype.string=function(){var c=this.uint32(),d=this.pos,u=this.pos+c;if(u>this.len)throw RangeError("index out of range: "+this.pos+" + "+c+" > "+this.len);return this.pos=u,this.buf.utf8Slice?this.buf.utf8Slice(d,u):this.buf.toString("utf-8",d,u)},s._configure()},{12:12,2:2}],4:[function(t,n,i){"use strict";n.exports=Object.create(null)},{}],5:[function(t,n,i){"use strict";var o=i;o.Service=t(6)},{6:6}],6:[function(t,n,i){"use strict";n.exports=r;var o=t(12);r.prototype=Object.create(o.EventEmitter.prototype,{constructor:{value:r,writable:!0,enumerable:!1,configurable:!0}});function r(s,a,c){if(typeof s!="function")throw TypeError("rpcImpl must be a function");o.EventEmitter.call(this),this.rpcImpl=s,this.requestDelimited=!!a,this.responseDelimited=!!c}r.prototype.rpcCall=function s(a,c,d,u,m){if(!u)throw TypeError("request must be specified");var p=this;if(!m)return o.asPromise(s,p,a,c,d,u);if(!p.rpcImpl)return setTimeout(function(){m(Error("already ended"))},0),e;try{return p.rpcImpl(a,c[p.requestDelimited?"encodeDelimited":"encode"](u).finish(),function(f,y){if(f)return p.emit("error",f,a),m(f);if(y===null)return p.end(!0),e;if(!(y instanceof d))try{y=d[p.responseDelimited?"decodeDelimited":"decode"](y)}catch(_){return p.emit("error",_,a),m(_)}return p.emit("data",y,a),m(null,y)})}catch(b){return p.emit("error",b,a),setTimeout(function(){m(b)},0),e}},r.prototype.end=function(a){return this.rpcImpl&&(a||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}},{12:12}],7:[function(t,n,i){"use strict";n.exports=o;function o(r,s){for(var a=new Array(arguments.length-1),c=0,d=2,u=!0;d0&&b.charAt(f-1)==="=";)--f;return Math.floor(f*3/4)};for(var r=new Array(64),s=new Array(123),a=0;a<64;)s[r[a]=a<26?a+65:a<52?a+71:a<62?a-4:a-59|43]=a++;s[45]=62,s[95]=63,o.encode=function(b,f,y){for(var _=null,S=[],Z=0,V=0,C;f>2],C=(G&3)<<4,V=1;break;case 1:S[Z++]=r[C|G>>4],C=(G&15)<<2,V=2;break;case 2:S[Z++]=r[C|G>>6],S[Z++]=r[G&63],V=0;break}Z>8191&&((_||(_=[])).push(String.fromCharCode.apply(String,S)),Z=0)}return V&&(S[Z++]=r[C],S[Z++]=61,V===1&&(S[Z++]=61)),_?(Z&&_.push(String.fromCharCode.apply(String,S.slice(0,Z))),_.join("")):String.fromCharCode.apply(String,S.slice(0,Z))};var c="invalid encoding";o.decode=function(b,f,y){for(var _=y,S=0,Z,V=0;V1)break;if((C=s[C])===e)throw Error(c);switch(S){case 0:Z=C,S=1;break;case 1:f[y++]=Z<<2|(C&48)>>4,Z=C,S=2;break;case 2:f[y++]=(Z&15)<<4|(C&60)>>2,Z=C,S=3;break;case 3:f[y++]=(Z&3)<<6|C,S=0;break}}if(S===1)throw Error(c);return y-_};var d=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,u=/[-_]/,m=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}(?:==)?|[A-Za-z0-9_-]{3}=?)?$/;o.test=function(b){return d.test(b)||u.test(b)&&m.test(b)}},{}],9:[function(t,n,i){"use strict";n.exports=o;function o(){this._listeners=Object.create(null)}o.prototype.on=function(s,a,c){return(this._listeners[s]||(this._listeners[s]=[])).push({fn:a,ctx:c||this}),this},o.prototype.off=function(s,a){if(s===e)this._listeners=Object.create(null);else if(a===e)this._listeners[s]=[];else{var c=this._listeners[s];if(!c)return this;for(var d=0;d0?0:2147483648,f,y);else if(isNaN(b))p(2143289344,f,y);else if(b>34028234663852886e22)p((_<<31|2139095040)>>>0,f,y);else if(b<11754943508222875e-54)p((_<<31|Math.round(b/1401298464324817e-60))>>>0,f,y);else{var S=Math.floor(Math.log(b)/Math.LN2),Z=Math.round(b*Math.pow(2,-S)*8388608)&8388607;p((_<<31|S+127<<23|Z)>>>0,f,y)}}d.writeFloatLE=u.bind(null,r),d.writeFloatBE=u.bind(null,s);function m(p,b,f){var y=p(b,f),_=(y>>31)*2+1,S=y>>>23&255,Z=y&8388607;return S===255?Z?NaN:_*(1/0):S===0?_*1401298464324817e-60*Z:_*Math.pow(2,S-150)*(Z+8388608)}d.readFloatLE=m.bind(null,a),d.readFloatBE=m.bind(null,c)})(),typeof Float64Array<"u"?(function(){var u=new Float64Array([-0]),m=new Uint8Array(u.buffer),p=m[7]===128;function b(S,Z,V){u[0]=S,Z[V]=m[0],Z[V+1]=m[1],Z[V+2]=m[2],Z[V+3]=m[3],Z[V+4]=m[4],Z[V+5]=m[5],Z[V+6]=m[6],Z[V+7]=m[7]}function f(S,Z,V){u[0]=S,Z[V]=m[7],Z[V+1]=m[6],Z[V+2]=m[5],Z[V+3]=m[4],Z[V+4]=m[3],Z[V+5]=m[2],Z[V+6]=m[1],Z[V+7]=m[0]}d.writeDoubleLE=p?b:f,d.writeDoubleBE=p?f:b;function y(S,Z){return m[0]=S[Z],m[1]=S[Z+1],m[2]=S[Z+2],m[3]=S[Z+3],m[4]=S[Z+4],m[5]=S[Z+5],m[6]=S[Z+6],m[7]=S[Z+7],u[0]}function _(S,Z){return m[7]=S[Z],m[6]=S[Z+1],m[5]=S[Z+2],m[4]=S[Z+3],m[3]=S[Z+4],m[2]=S[Z+5],m[1]=S[Z+6],m[0]=S[Z+7],u[0]}d.readDoubleLE=p?y:_,d.readDoubleBE=p?_:y})():(function(){function u(p,b,f,y,_,S){var Z=y<0?1:0;if(Z&&(y=-y),y===0)p(0,_,S+b),p(1/y>0?0:2147483648,_,S+f);else if(isNaN(y))p(0,_,S+b),p(2146959360,_,S+f);else if(y>17976931348623157e292)p(0,_,S+b),p((Z<<31|2146435072)>>>0,_,S+f);else{var V;if(y<22250738585072014e-324)V=y/5e-324,p(V>>>0,_,S+b),p((Z<<31|V/4294967296)>>>0,_,S+f);else{var C=Math.floor(Math.log(y)/Math.LN2);C===1024&&(C=1023),V=y*Math.pow(2,-C),p(V*4503599627370496>>>0,_,S+b),p((Z<<31|C+1023<<20|V*1048576&1048575)>>>0,_,S+f)}}}d.writeDoubleLE=u.bind(null,r,0,4),d.writeDoubleBE=u.bind(null,s,4,0);function m(p,b,f,y,_){var S=p(y,_+b),Z=p(y,_+f),V=(Z>>31)*2+1,C=Z>>>20&2047,G=4294967296*(Z&1048575)+S;return C===2047?G?NaN:V*(1/0):C===0?V*5e-324*G:V*Math.pow(2,C-1075)*(G+4503599627370496)}d.readDoubleLE=m.bind(null,a,0,4),d.readDoubleBE=m.bind(null,c,4,0)})(),d}function r(d,u,m){u[m]=d&255,u[m+1]=d>>>8&255,u[m+2]=d>>>16&255,u[m+3]=d>>>24}function s(d,u,m){u[m]=d>>>24,u[m+1]=d>>>16&255,u[m+2]=d>>>8&255,u[m+3]=d&255}function a(d,u){return(d[u]|d[u+1]<<8|d[u+2]<<16|d[u+3]<<24)>>>0}function c(d,u){return(d[u]<<24|d[u+1]<<16|d[u+2]<<8|d[u+3])>>>0}},{}],11:[function(t,n,i){"use strict";n.exports=r;var o;function r(d,u){this.lo=d>>>0,this.hi=u>>>0}var s=r.zero=new r(0,0);s.toNumber=function(){return 0},s.zzEncode=s.zzDecode=function(){return this},s.length=function(){return 1};var a=r.zeroHash="\0\0\0\0\0\0\0\0";r.fromNumber=function(u){if(u===0)return s;var m=u<0;m&&(u=-u);var p=u>>>0,b=(u-p)/4294967296>>>0;return m&&(b=~b>>>0,p=~p>>>0,++p>4294967295&&(p=0,++b>4294967295&&(b=0))),new r(p,b)},r.from=function(u){if(typeof u=="number")return r.fromNumber(u);if(typeof u=="string"||u instanceof String)if(o)u=o.fromString(u);else return r.fromNumber(parseInt(u,10));return u.low||u.high?new r(u.low>>>0,u.high>>>0):s},r.prototype.toNumber=function(u){if(!u&&this.hi>>>31){var m=~this.lo+1>>>0,p=~this.hi>>>0;return m||(p=p+1>>>0),-(m+p*4294967296)}return this.lo+this.hi*4294967296},r.prototype.toLong=function(u){return o?new o(this.lo|0,this.hi|0,!!u):{low:this.lo|0,high:this.hi|0,unsigned:!!u}};var c=String.prototype.charCodeAt;r.fromHash=function(u){return u===a?s:new r((c.call(u,0)|c.call(u,1)<<8|c.call(u,2)<<16|c.call(u,3)<<24)>>>0,(c.call(u,4)|c.call(u,5)<<8|c.call(u,6)<<16|c.call(u,7)<<24)>>>0)},r.prototype.toHash=function(){return String.fromCharCode(this.lo&255,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,this.hi&255,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},r.prototype.zzEncode=function(){var u=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^u)>>>0,this.lo=(this.lo<<1^u)>>>0,this},r.prototype.zzDecode=function(){var u=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^u)>>>0,this.hi=(this.hi>>>1^u)>>>0,this},r.prototype.length=function(){var u=this.lo,m=(this.lo>>>28|this.hi<<4)>>>0,p=this.hi>>>24;return p===0?m===0?u<16384?u<128?1:2:u<2097152?3:4:m<16384?m<128?5:6:m<2097152?7:8:p<128?9:10},r._configure=function(d){o=d}},{}],12:[function(t,n,i){"use strict";var o=i;o.asPromise=t(7),o.base64=t(8),o.EventEmitter=t(9),o.float=t(10),o.utf8=t(14),o.pool=t(13),o.LongBits=t(11);function r(c){return c==="__proto__"||c==="prototype"||c==="constructor"}o.isUnsafeProperty=r,o.isNode=!!(typeof global<"u"&&global&&global.process&&global.process.versions&&global.process.versions.node),o.global=o.isNode&&global||typeof window<"u"&&window||typeof self<"u"&&self||typeof globalThis<"u"&&globalThis||this,o.emptyArray=Object.freeze?Object.freeze([]):[],o.emptyObject=Object.freeze?Object.freeze({}):{},o.isInteger=Number.isInteger||function(d){return typeof d=="number"&&isFinite(d)&&Math.floor(d)===d},o.isString=function(d){return typeof d=="string"||d instanceof String},o.isObject=function(d){return d&&typeof d=="object"},o.isset=o.isSet=function(d,u){var m=d[u];return m!=null&&Object.hasOwnProperty.call(d,u)?typeof m!="object"||(Array.isArray(m)?m.length:Object.keys(m).length)>0:!1},o.Buffer=(function(){try{var c=o.global.Buffer;return c.prototype.utf8Write||o.isNode?c:null}catch{return null}})(),o.newBuffer=function(d){var u=o.Buffer;return typeof d=="number"?u?u.allocUnsafe(d):new Uint8Array(d):u?u.from(d):new Uint8Array(d)},o.rawField=function(d,u,m){var p=[],b=d<<3|u;for(b>>>=0;b>127;)p.push(b&127|128),b>>>=7;p.push(b);for(var f=0;f-1;--b)if(u[p[b]]===1&&this[p[b]]!==e&&this[p[b]]!==null)return p[b]}},o.oneOfSetter=function(d){return function(u){for(var m=0;m>>1,u=null,m=c;return function(b){if(b<1||b>d)return r(b);m+b>c&&(u=r(c),m=0);var f=s.call(u,m,m+=b);return m&7&&(m=(m|7)+1),f}}},{}],14:[function(t,n,i){"use strict";var o=i,r="\uFFFD",s=new TextDecoder("utf-8",{ignoreBOM:!0}),a,c=64;try{a=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0})}catch{a=s}o.length=function(p){for(var b=0,f=0,y=0;y=192&&_<224){var S=(_&31)<<6|m[y++]&63;f+=S>=128?String.fromCharCode(S):r}else if(_>=224&&_<240){var Z=(_&15)<<12|(m[y++]&63)<<6|m[y++]&63;f+=Z>=2048?String.fromCharCode(Z):r}else if(_>=240){var V=(_&7)<<18|(m[y++]&63)<<12|(m[y++]&63)<<6|m[y++]&63;V<65536||V>1114111?f+=r:(V-=65536,f+=String.fromCharCode(55296+(V>>10)),f+=String.fromCharCode(56320+(V&1023)))}}return f}function u(m,p,b,f){var y=b===0&&f===p.length?p:p.subarray(b,f);return m.decode(y)}o.read=function(p,b,f){if(f-b<1)return"";if(f-b>=c)return u(s,p,b,f);for(var y="",_=b,S,Z,V,C,G,E,v,F;_+7=c)return u(a,p,b,f);for(var y="",_=b,S,Z,V,C,G,E,v,F;_+7>6|192,b[f++]=_&63|128):(_&64512)===55296&&((S=p.charCodeAt(Z+1))&64512)===56320?(_=65536+((_&1023)<<10)+(S&1023),++Z,b[f++]=_>>18|240,b[f++]=_>>12&63|128,b[f++]=_>>6&63|128,b[f++]=_&63|128):(b[f++]=_>>12|224,b[f++]=_>>6&63|128,b[f++]=_&63|128);return f-y}},{}],15:[function(t,n,i){"use strict";n.exports=d;var o=t(12),r,s=o.LongBits,a=o.base64,c=o.utf8;function d(){this.pos=0,this.buf=this.constructor.alloc(64),this.view=null,this.states=null}Object.defineProperty(d.prototype,"len",{configurable:!0,enumerable:!0,get:function(){return this.pos}});var u=function(){return o.Buffer?function(){return(d.create=function(){return new r})()}:function(){return new d}};d.create=u(),d.alloc=function(C){return new Uint8Array(C)},d.alloc=o.pool(d.alloc,Uint8Array.prototype.subarray);function m(V){return V<128?1:V<16384?2:V<2097152?3:V<268435456?4:5}d.prototype._reserve=function(C){var G=this.pos+C;if(G>this.buf.length){var E=this.buf.length<<1;E127;)C[G++]=V&127|128,V>>>=7;return C[G]=V,G+1}d.prototype.uint32=function(C){C=C>>>0,this._reserve(5);var G=this.pos;return this.pos=b(C,this.buf,G),this},d.prototype.int32=function(C){return(C|=0)<0?(this._reserve(10),f(s.fromNumber(C),this.buf,this.pos),this.pos+=10,this):this.uint32(C)},d.prototype.sint32=function(C){return this.uint32((C<<1^C>>31)>>>0)};function f(V,C,G){for(var E=V.lo,v=V.hi;v;)C[G++]=E&127|128,E=(E>>>7|v<<25)>>>0,v>>>=7;for(;E>127;)C[G++]=E&127|128,E=E>>>7;return C[G]=E,G+1}d.prototype.uint64=function(C){var G=s.from(C);this._reserve(10);var E=this.pos;return this.pos=f(G,this.buf,E),this},d.prototype.int64=d.prototype.uint64,d.prototype.sint64=function(C){var G=s.from(C).zzEncode();this._reserve(10);var E=this.pos;return this.pos=f(G,this.buf,E),this},d.prototype.bool=function(C){return this._reserve(1),this.buf[this.pos++]=C?1:0,this};function y(V,C,G){C[G]=V&255,C[G+1]=V>>>8&255,C[G+2]=V>>>16&255,C[G+3]=V>>>24}d.prototype.fixed32=function(C){return this._reserve(4),y(C>>>0,this.buf,this.pos),this.pos+=4,this},d.prototype.sfixed32=d.prototype.fixed32,d.prototype.fixed64=function(C){var G=s.from(C);return this._reserve(8),y(G.lo,this.buf,this.pos),y(G.hi,this.buf,this.pos+4),this.pos+=8,this},d.prototype.sfixed64=d.prototype.fixed64,d.prototype.float=function(C){return this._reserve(4),o.float.writeFloatLE(C,this.buf,this.pos),this.pos+=4,this},d.prototype.double=function(C){return this._reserve(8),o.float.writeDoubleLE(C,this.buf,this.pos),this.pos+=8,this},d.prototype.bytes=function(C){var G=C.length>>>0;if(!G)return this._reserve(1),this.buf[this.pos++]=0,this;if(o.isString(C)){var E=d.alloc(G=a.length(C));a.decode(C,E,0),C=E}return this.uint32(G),this._reserve(G),this.buf.set(C,this.pos),this.pos+=G,this},d.prototype.raw=function(C){var G=C.length>>>0;return G?(this._reserve(G),this.buf.set(C,this.pos),this.pos+=G,this):this},d.prototype._delim=function(C,G){var E=m(G);return E>1&&this.buf.copyWithin(C+E,C+1,C+1+G),b(G,this.buf,C),this.pos=C+E+G,this},d.prototype.string=function(C){var G=C.length;if(!G)return this._reserve(1),this.buf[this.pos++]=0,this;if(G<128){this._reserve(G*3+5);var E=this.pos;return this._delim(E,c.write(C,this.buf,E+1))}var v=c.length(C);return this.uint32(v),this._reserve(v),v===C.length?p(C,this.buf,this.pos):c.write(C,this.buf,this.pos),this.pos+=v,this},d.prototype.uint32s=function(C){var G=C.length;this._reserve(G*5+5);for(var E=this.buf,v=this.pos,F=v+1,P=0;P>>0,E,F);return this._delim(v,F-v-1)},d.prototype.int32s=function(C){var G=C.length;this._reserve(G*10+5);for(var E=this.buf,v=this.pos,F=v+1,P,N=0;N>31)>>>0,E,F);return this._delim(v,F-v-1)},d.prototype.uint64s=function(C){var G=C.length;this._reserve(G*10+5);for(var E=this.buf,v=this.pos,F=v+1,P=0;P>>0,!0),v+=4;else{var N=this.buf;for(F=0;F>>0,N,v),v+=4}return this.pos+=E,this},d.prototype.sfixed32s=d.prototype.fixed32s,d.prototype.fixed64s=function(C){var G=C.length,E=G*8;this.uint32(E),this._reserve(E);var v=this.pos,F,P,N=Z(this,G,S);if(N)for(F=0;F1?(this._reserve(E-1),this.buf.copyWithin(v+E,v+1,v+1+G),this.pos+=E-1,b(G,this.buf,v)):this.buf[v]=G}else G=this.pos,E=m(G),this._reserve(E),this.buf.copyWithin(E,0,G),b(G,this.buf,0),this.pos+=E;return this},d.prototype.finish=function(C){if(C)return this.buf.subarray(0,this.pos);var G=this.constructor.alloc(this.pos);return G.set(this.buf.subarray(0,this.pos),0),G},d.prototype.finishInto=function(C,G){return G===e&&(G=0),C.set(this.buf.subarray(0,this.pos),G),C},d._configure=function(V){r=V,d.create=u(),r._configure()}},{12:12}],16:[function(t,n,i){"use strict";n.exports=s;var o=t(15);s.prototype=Object.create(o.prototype,{constructor:{value:s,writable:!0,enumerable:!1,configurable:!0}});var r=t(12);function s(){o.call(this)}var a;s._configure=function(){s.alloc=r.Buffer&&r.Buffer.allocUnsafe,a=r.Buffer&&r.Buffer.prototype.utf8Write?function(d,u,m){return u.utf8Write(d,m)}:function(d,u,m){return u.write(d,m)}},s.prototype.bytes=function(d){r.isString(d)&&(d=r.Buffer.from(d,"base64"));var u=d.length>>>0;return this.uint32(u),u&&(this._reserve(u),this.buf.set(d,this.pos),this.pos+=u),this},s.prototype.string=function(d){var u=d.length;if(!u)return this._reserve(1),this.buf[this.pos++]=0,this;if(u<128){this._reserve(u*3+5);var m=this.pos,p=this.buf;return this._delim(m,u<40?r.utf8.write(d,p,m+1):a(d,p,m+1))}var b=r.Buffer.byteLength(d);return this.uint32(b),this._reserve(b),a(d,this.buf,this.pos),this.pos+=b,this},s._configure()},{12:12,15:15}]},{},[1])})()});var lye=sm((nKn,cye)=>{"use strict";var iKn=x(T());cye.exports=kqe;var FF=1e20;function kqe(e,t){t||(t={});var n=t.cutoff==null?.25:t.cutoff,i=t.radius==null?8:t.radius,o=t.channel||0,r,s,a,c,d,u,m,p,b,f,y;if(ArrayBuffer.isView(e)||Array.isArray(e)){if(!t.width||!t.height)throw Error("For raw data width and height should be provided by options");r=t.width,s=t.height,c=e,t.stride?u=t.stride:u=Math.floor(e.length/r/s)}else window.HTMLCanvasElement&&e instanceof window.HTMLCanvasElement?(p=e,m=p.getContext("2d"),r=p.width,s=p.height,b=m.getImageData(0,0,r,s),c=b.data,u=4):window.CanvasRenderingContext2D&&e instanceof window.CanvasRenderingContext2D?(p=e.canvas,m=e,r=p.width,s=p.height,b=m.getImageData(0,0,r,s),c=b.data,u=4):window.ImageData&&e instanceof window.ImageData&&(b=e,r=e.width,s=e.height,c=b.data,u=4);if(a=Math.max(r,s),window.Uint8ClampedArray&&c instanceof window.Uint8ClampedArray||window.Uint8Array&&c instanceof window.Uint8Array)for(d=c,c=Array(r*s),f=0,y=Math.floor(d.length/u);f{var rKn=x(T());function Uqe(){var e=0,t=1,n=2,i=3,o=4,r=5,s=6,a=7,c=8,d=9,u=10,m=11,p=12,b=13,f=14,y=15,_=16,S=17,Z=0,V=1,C=2,G=3,E=4;function v(g,R){return 55296<=g.charCodeAt(R)&&g.charCodeAt(R)<=56319&&56320<=g.charCodeAt(R+1)&&g.charCodeAt(R+1)<=57343}function F(g,R){R===void 0&&(R=0);var A=g.charCodeAt(R);if(55296<=A&&A<=56319&&R=1){var W=g.charCodeAt(R-1),X=A;return 55296<=W&&W<=56319?(W-55296)*1024+(X-56320)+65536:X}return A}function P(g,R,A){var W=[g].concat(R).concat([A]),X=W[W.length-2],Y=A,D=W.lastIndexOf(f);if(D>1&&W.slice(1,D).every(function(w){return w==i})&&[i,b,S].indexOf(g)==-1)return C;var k=W.lastIndexOf(o);if(k>0&&W.slice(1,k).every(function(w){return w==o})&&[p,o].indexOf(X)==-1)return W.filter(function(w){return w==o}).length%2==1?G:E;if(X==e&&Y==t)return Z;if(X==n||X==e||X==t)return Y==f&&R.every(function(w){return w==i})?C:V;if(Y==n||Y==e||Y==t)return V;if(X==s&&(Y==s||Y==a||Y==d||Y==u))return Z;if((X==d||X==a)&&(Y==a||Y==c))return Z;if((X==u||X==c)&&Y==c)return Z;if(Y==i||Y==y)return Z;if(Y==r)return Z;if(X==p)return Z;var O=W.indexOf(i)!=-1?W.lastIndexOf(i)-1:W.length-2;return[b,S].indexOf(W[O])!=-1&&W.slice(O+1,-1).every(function(w){return w==i})&&Y==f||X==y&&[_,S].indexOf(Y)!=-1?Z:R.indexOf(o)!=-1?C:X==o&&Y==o?Z:V}this.nextBreak=function(g,R){if(R===void 0&&(R=0),R<0)return 0;if(R>=g.length-1)return g.length;for(var A=N(F(g,R)),W=[],X=R+1;X{var Z2o=x(T());/* Copyright 2015-2018 Esri. 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 @preserve */(function(){var e=(function(){var o={};o.defaultNoDataValue=-34027999387901484e22,o.decode=function(u,m){m=m||{};var p=m.encodedMaskData||m.encodedMaskData===null,b=c(u,m.inputOffset||0,p),f=m.noDataValue!==null?m.noDataValue:o.defaultNoDataValue,y=r(b,m.pixelType||Float32Array,m.encodedMaskData,f,m.returnMask),_={width:b.width,height:b.height,pixelData:y.resultPixels,minValue:y.minValue,maxValue:b.pixels.maxValue,noDataValue:f};return y.resultMask&&(_.maskData=y.resultMask),m.returnEncodedMask&&b.mask&&(_.encodedMaskData=b.mask.bitset?b.mask.bitset:null),m.returnFileInfo&&(_.fileInfo=s(b),m.computeUsedBitDepths&&(_.fileInfo.bitDepths=a(b))),_};var r=function(u,m,p,b,f){var y=0,_=u.pixels.numBlocksX,S=u.pixels.numBlocksY,Z=Math.floor(u.width/_),V=Math.floor(u.height/S),C=2*u.maxZError,G=Number.MAX_VALUE,E;p=p||(u.mask?u.mask.bitset:null);var v,F;v=new m(u.width*u.height),f&&p&&(F=new Uint8Array(u.width*u.height));for(var P=new Float32Array(Z*V),N,g,R=0;R<=S;R++){var A=R!==S?V:u.height%S;if(A!==0)for(var W=0;W<=_;W++){var X=W!==_?Z:u.width%_;if(X!==0){var Y=R*u.width*V+W*Z,D=u.width-X,k=u.pixels.blocks[y],O,w,z;k.encoding<2?(k.encoding===0?O=k.rawData:(d(k.stuffedData,k.bitsPerPixel,k.numValidPixels,k.offset,C,P,u.pixels.maxValue),O=P),w=0):k.encoding===2?z=0:z=k.offset;var H;if(p)for(g=0;g>3],H<<=Y&7),N=0;N>3]),H&128?(F&&(F[Y]=1),E=k.encoding<2?O[w++]:z,G=G>E?E:G,v[Y++]=E):(F&&(F[Y]=0),v[Y++]=b),H<<=1;Y+=D}else if(k.encoding<2)for(g=0;gE?E:G,v[Y++]=E;Y+=D}else for(G=G>z?z:G,g=0;g0){var _=new Uint8Array(Math.ceil(b.width*b.height/8));y=new DataView(u,m,b.mask.numBytes);var S=y.getInt16(0,!0),Z=2,V=0;do{if(S>0)for(;S--;)_[V++]=y.getUint8(Z++);else{var C=y.getUint8(Z++);for(S=-S;S--;)_[V++]=C}S=y.getInt16(Z,!0),Z+=2}while(Z0?1:0),F=E+(b.height%E>0?1:0);b.pixels.blocks=new Array(v*F);for(var P=0,N=0;N3)throw"Invalid block encoding ("+W.encoding+")";if(W.encoding===2){m++;continue}if(X!==0&&X!==2){if(X>>=6,W.offsetType=X,X===2)W.offset=y.getInt8(1),R++;else if(X===1)W.offset=y.getInt16(1,!0),R+=2;else if(X===0)W.offset=y.getFloat32(1,!0),R+=4;else throw"Invalid block offset type";if(W.encoding===1)if(X=y.getUint8(R),R++,W.bitsPerPixel=X&63,X>>=6,W.numValidPixelsType=X,X===2)W.numValidPixels=y.getUint8(R),R++;else if(X===1)W.numValidPixels=y.getUint16(R,!0),R+=2;else if(X===0)W.numValidPixels=y.getUint32(R,!0),R+=4;else throw"Invalid valid pixel count type"}if(m+=R,W.encoding!==3){var Y,D;if(W.encoding===0){var k=(b.pixels.numBytes-1)/4;if(k!==Math.floor(k))throw"uncompressed block has invalid length";Y=new ArrayBuffer(k*4),D=new Uint8Array(Y),D.set(new Uint8Array(u,m,k*4));var O=new Float32Array(Y);W.rawData=O,m+=k*4}else if(W.encoding===1){var w=Math.ceil(W.numValidPixels*W.bitsPerPixel/8),z=Math.ceil(w/4);Y=new ArrayBuffer(z*4),D=new Uint8Array(Y),D.set(new Uint8Array(u,m,w)),W.stuffedData=new Uint32Array(Y),m+=w}}}return b.eofOffset=m,b},d=function(u,m,p,b,f,y,_){var S=(1<=m)G=E>>>C-m&S,C-=m;else{var P=m-C;G=(E&S)<>>C}y[V]=G=u?(C=G>>>V-u&_,V-=u):(E=u-V,C=(G&_)<>>V),d[Z]=p[C];else for(v=Math.ceil((y-b)/f),Z=0;Z=u?(C=G>>>V-u&_,V-=u):(E=u-V,C=(G&_)<>>V),d[Z]=C=d?(V=C>>>Z-d&f,Z-=d):(S=d-Z,V=(C&f)<>>Z),G[_]=V=u?(G=E>>>C&_,V-=u,C+=u):(v=u-V,G=E>>>C&_,E=c[S++],V=32-v,G|=(E&(1<=u?(G=E>>>C&_,V-=u,C+=u):(v=u-V,G=E>>>C&_,E=c[S++],V=32-v,G|=(E&(1<=d?(V=G>>>C&f,Z-=d,C+=d):(S=d-Z,V=G>>>C&f,G=c[y++],Z=32-S,V|=(G&(1<=u?(_=S>>>y-u&p,y-=u):(Z=u-y,_=(S&p)<>>y),d[f]=_;return d},originalUnstuff2:function(c,d,u,m){var p=(1<=u?(S=Z>>>_&p,y-=u,_+=u):(V=u-y,S=Z>>>_&p,Z=c[b++],y=32-V,S|=(Z&(1<=359?359:p;p-=f;do d+=c[b++]<<8,u+=d+=c[b++];while(--f);d=(d&65535)+(d>>>16),u=(u&65535)+(u>>>16)}return m&1&&(u+=d+=c[b]<<8),d=(d&65535)+(d>>>16),u=(u&65535)+(u>>>16),(u<<16|d)>>>0},readHeaderInfo:function(c,d){var u=d.ptr,m=new Uint8Array(c,u,6),p={};if(p.fileIdentifierString=String.fromCharCode.apply(null,m),p.fileIdentifierString.lastIndexOf("Lerc2",0)!==0)throw"Unexpected file identifier string (expect Lerc2 ): "+p.fileIdentifierString;u+=6;var b=new DataView(c,u,8),f=b.getInt32(0,!0);p.fileVersion=f,u+=4,f>=3&&(p.checksum=b.getUint32(4,!0),u+=4),b=new DataView(c,u,12),p.height=b.getUint32(0,!0),p.width=b.getUint32(4,!0),u+=8,f>=4?(p.numDims=b.getUint32(8,!0),u+=4):p.numDims=1,b=new DataView(c,u,40),p.numValidPixel=b.getUint32(0,!0),p.microBlockSize=b.getInt32(4,!0),p.blobSize=b.getInt32(8,!0),p.imageType=b.getInt32(12,!0),p.maxZError=b.getFloat64(16,!0),p.zMin=b.getFloat64(24,!0),p.zMax=b.getFloat64(32,!0),u+=40,d.headerInfo=p,d.ptr=u;var y,_;if(f>=3&&(_=f>=4?52:48,y=this.computeChecksumFletcher32(new Uint8Array(c,u-_,p.blobSize-14)),y!==p.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(c,d){var u=d.headerInfo,m=this.getDataTypeArray(u.imageType),p=u.numDims*this.getDataTypeSize(u.imageType),b=this.readSubArray(c,d.ptr,m,p),f=this.readSubArray(c,d.ptr+p,m,p);d.ptr+=2*p;var y,_=!0;for(y=0;y0){_=new Uint8Array(Math.ceil(p/8)),f=new DataView(c,u,y.numBytes);var Z=f.getInt16(0,!0),V=2,C=0,G=0;do{if(Z>0)for(;Z--;)_[C++]=f.getUint8(V++);else for(G=f.getUint8(V++),Z=-Z;Z--;)_[C++]=G;Z=f.getInt16(V,!0),V+=2}while(V>3],E<<=v&7):E=_[v>>3],E&128&&(S[v]=1);d.pixels.resultMask=S,y.bitset=_,u+=y.numBytes}return d.ptr=u,d.mask=y,!0},readDataOneSweep:function(c,d,u){var m=d.ptr,p=d.headerInfo,b=p.numDims,f=p.width*p.height,y=p.imageType,_=p.numValidPixel*r.getDataTypeSize(y)*b,S,Z=d.pixels.resultMask;if(u===Uint8Array)S=new Uint8Array(c,m,_);else{var V=new ArrayBuffer(_),C=new Uint8Array(V);C.set(new Uint8Array(c,m,_)),S=new u(V)}if(S.length===f*b)d.pixels.resultPixels=S;else{d.pixels.resultPixels=new u(f*b);var G=0,E=0,v=0,F=0;if(b>1)for(v=0;v=y)return!1;var _=new Uint32Array(y-f);r.decodeBits(c,d,_);var S=[],Z,V,C,G;for(Z=f;Z0&&(S[V].second=R<>>32-G,32-g>=G?(g+=G,g===32&&(g=0,A++,R=N[A])):(g+=G-32,A++,R=N[A],S[V].second|=R>>>32-g));var W=0,X=0,Y=new s;for(Z=0;Z=u?X=u:X=W,W>=30&&console.log("WARning, large NUM LUT BITS IS "+W);var D=[],k,O,w,z,H,te;for(Z=f;Z0)if(k=[G,V],G<=X)for(O=S[V].second<=0;z--)H=O>>>z&1,H?(te.right||(te.right=new s),te=te.right):(te.left||(te.left=new s),te=te.left),z===0&&!te.val&&(te.val=k[1]);return{decodeLut:D,numBitsLUTQick:X,numBitsLUT:W,tree:Y,stuffedData:N,srcPtr:A,bitPos:g}},readHuffman:function(c,d,u){var m=d.headerInfo,p=m.numDims,b=d.headerInfo.height,f=d.headerInfo.width,y=f*b,_=this.readHuffmanTree(c,d),S=_.decodeLut,Z=_.tree,V=_.stuffedData,C=_.srcPtr,G=_.bitPos,E=_.numBitsLUTQick,v=_.numBitsLUT,F=d.headerInfo.imageType===0?128:0,P,N,g,R=d.pixels.resultMask,A,W,X,Y,D,k,O,w=0;G>0&&(C++,G=0);var z=V[C],H=d.encodeMode===1,te=new u(y*p),K=te,$;for($=0;$1&&(K=new u(te.buffer,y*$,y),w=0),d.headerInfo.numValidPixel===f*b)for(k=0,Y=0;Y>>32-E,W=A,32-G>>64-G-E,W=A),S[W])N=S[W][1],G+=S[W][0];else for(A=z<>>32-v,W=A,32-G>>64-G-v,W=A),P=Z,O=0;O>>v-O-1&1,P=X?P.right:P.left,!(P.left||P.right)){N=P.val,G=G+O+1;break}G>=32&&(G-=32,C++,z=V[C]),g=N-F,H?(D>0?g+=w:Y>0?g+=K[k-f]:g+=w,g&=255,K[k]=g,w=g):K[k]=g}else for(k=0,Y=0;Y>>32-E,W=A,32-G>>64-G-E,W=A),S[W])N=S[W][1],G+=S[W][0];else for(A=z<>>32-v,W=A,32-G>>64-G-v,W=A),P=Z,O=0;O>>v-O-1&1,P=X?P.right:P.left,!(P.left||P.right)){N=P.val,G=G+O+1;break}G>=32&&(G-=32,C++,z=V[C]),g=N-F,H?(D>0&&R[k-1]?g+=w:Y>0&&R[k-f]?g+=K[k-f]:g+=w,g&=255,K[k]=g,w=g):K[k]=g}d.ptr=d.ptr+(C+1)*4+(G>0?4:0)}d.pixels.resultPixels=te},decodeBits:function(c,d,u,m,p){{var b=d.headerInfo,f=b.fileVersion,y=0,_=new DataView(c,d.ptr,5),S=_.getUint8(0);y++;var Z=S>>6,V=Z===0?4:3-Z,C=(S&32)>0,G=S&31,E=0;if(V===1)E=_.getUint8(y),y++;else if(V===2)E=_.getUint16(y,!0),y+=2;else if(V===4)E=_.getUint32(y,!0),y+=4;else throw"Invalid valid pixel count type";var v=2*b.maxZError,F,P,N,g,R,A,W,X,Y,D,k=b.numDims>1?b.maxValues[p]:b.zMax;if(C){for(d.counter.lut++,X=_.getUint8(y),Y=G,y++,g=Math.ceil((X-1)*G/8),R=Math.ceil(g/4),P=new ArrayBuffer(R*4),N=new Uint8Array(P),d.ptr+=y,N.set(new Uint8Array(c,d.ptr,g)),W=new Uint32Array(P),d.ptr+=g,D=0;X-1>>>D;)D++;g=Math.ceil(E*D/8),R=Math.ceil(g/4),P=new ArrayBuffer(R*4),N=new Uint8Array(P),N.set(new Uint8Array(c,d.ptr,g)),F=new Uint32Array(P),d.ptr+=g,f>=3?A=o.unstuffLUT2(W,G,X-1,m,v,k):A=o.unstuffLUT(W,G,X-1,m,v,k),f>=3?o.unstuff2(F,u,D,E,A):o.unstuff(F,u,D,E,A)}else d.counter.bitstuffer++,D=G,d.ptr+=y,D>0&&(g=Math.ceil(E*D/8),R=Math.ceil(g/4),P=new ArrayBuffer(R*4),N=new Uint8Array(P),N.set(new Uint8Array(c,d.ptr,g)),F=new Uint32Array(P),d.ptr+=g,f>=3?m==null?o.originalUnstuff2(F,u,D,E):o.unstuff2(F,u,D,E,!1,m,v,k):m==null?o.originalUnstuff(F,u,D,E):o.unstuff(F,u,D,E,!1,m,v,k))}},readTiles:function(c,d,u){var m=d.headerInfo,p=m.width,b=m.height,f=m.microBlockSize,y=m.imageType,_=r.getDataTypeSize(y),S=Math.ceil(p/f),Z=Math.ceil(b/f);d.pixels.numBlocksY=Z,d.pixels.numBlocksX=S,d.pixels.ptr=0;var V=0,C=0,G=0,E=0,v=0,F=0,P=0,N=0,g=0,R=0,A=0,W=0,X=0,Y=0,D=0,k=0,O,w,z,H,te,K,$=new u(f*f),ee=b%f||f,de=p%f||f,_e,ue,Ce=m.numDims,Te,Re=d.pixels.resultMask,Le=d.pixels.resultPixels;for(G=0;G1&&(Le=new u(d.pixels.resultPixels.buffer,p*b*Te*_,p*b)),P=c.byteLength-d.ptr,O=new DataView(c,d.ptr,Math.min(10,P)),w={},k=0,N=O.getUint8(0),k++,g=N>>6&255,R=N>>2&15,R!==(E*f>>3&15))throw"integrity issue";if(K=N&3,K>3)throw d.ptr+=k,"Invalid block encoding ("+K+")";if(K===2){d.counter.constant++,d.ptr+=k;continue}else if(K===0){if(d.counter.uncompressed++,d.ptr+=k,X=v*F*_,Y=c.byteLength-d.ptr,X=X1)for(b=0;b=-128&&d<=127;break;case 1:u=d>=0&&d<=255;break;case 2:u=d>=-32768&&d<=32767;break;case 3:u=d>=0&&d<=65536;break;case 4:u=d>=-2147483648&&d<=2147483647;break;case 5:u=d>=0&&d<=4294967296;break;case 6:u=d>=-34027999387901484e22&&d<=34027999387901484e22;break;case 7:u=d>=5e-324&&d<=17976931348623157e292;break;default:u=!1}return u},getDataTypeSize:function(c){var d=0;switch(c){case 0:case 1:d=1;break;case 2:case 3:d=2;break;case 4:case 5:case 6:d=4;break;case 7:d=8;break;default:d=c}return d},getDataTypeUsed:function(c,d){var u=c;switch(c){case 2:case 4:u=c-d;break;case 3:case 5:u=c-2*d;break;case 6:d===0?u=c:d===1?u=2:u=1;break;case 7:d===0?u=c:u=c-2*d+1;break;default:u=c;break}return u},getOnePixel:function(c,d,u,m){var p=0;switch(u){case 0:p=m.getInt8(d);break;case 1:p=m.getUint8(d);break;case 2:p=m.getInt16(d,!0);break;case 3:p=m.getUint16(d,!0);break;case 4:p=m.getInt32(d,!0);break;case 5:p=m.getUInt32(d,!0);break;case 6:p=m.getFloat32(d,!0);break;case 7:p=m.getFloat64(d,!0);break;default:throw"the decoder does not understand this pixel type"}return p}},s=function(c,d,u){this.val=c,this.left=d,this.right=u},a={decode:function(c,d){d=d||{};var u=d.noDataValue,m=0,p={};if(p.ptr=d.inputOffset||0,p.pixels={},!!r.readHeaderInfo(c,p)){var b=p.headerInfo,f=b.fileVersion,y=r.getDataTypeArray(b.imageType);r.readMask(c,p),b.numValidPixel!==b.width*b.height&&!p.pixels.resultMask&&(p.pixels.resultMask=d.maskData);var _=b.width*b.height;if(p.pixels.resultPixels=new y(_*b.numDims),p.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0},b.numValidPixel!==0)if(b.zMax===b.zMin)r.constructConstantSurface(p);else if(f>=4&&r.checkMinMaxRanges(c,p))r.constructConstantSurface(p);else{var S=new DataView(c,p.ptr,2),Z=S.getUint8(0);if(p.ptr++,Z)r.readDataOneSweep(c,p,y);else if(f>1&&b.imageType<=1&&Math.abs(b.maxZError-.5)<1e-5){var V=S.getUint8(1);if(p.ptr++,p.encodeMode=V,V>2||f<4&&V>1)throw"Invalid Huffman flag "+V;V?r.readHuffman(c,p,y):r.readTiles(c,p,y)}else r.readTiles(c,p,y)}p.eofOffset=p.ptr;var C;d.inputOffset?(C=p.headerInfo.blobSize+d.inputOffset-p.ptr,Math.abs(C)>=1&&(p.eofOffset=d.inputOffset+p.headerInfo.blobSize)):(C=p.headerInfo.blobSize-p.ptr,Math.abs(C)>=1&&(p.eofOffset=p.headerInfo.blobSize));var G={width:b.width,height:b.height,pixelData:p.pixels.resultPixels,minValue:b.zMin,maxValue:b.zMax,validPixelCount:b.numValidPixel,dimCount:b.numDims,dimStats:{minValues:b.minValues,maxValues:b.maxValues},maskData:p.pixels.resultMask};if(p.pixels.resultMask&&r.isValidPixelValue(b.imageType,u)){var E=p.pixels.resultMask;for(m=0;m<_;m++)E[m]||(G.pixelData[m]=u);G.noDataValue=u}return p.noDataValue=u,d.returnFileInfo&&(G.fileInfo=r.formatFileInfo(p)),G}},getBandCount:function(c){var d=0,u=0,m={};for(m.ptr=0,m.pixels={};u1&&Z.fileInfo.mask&&Z.fileInfo.mask.numBytes>0&&f.push(Z.maskData),m++,S.pixels.push(Z.pixelData),S.statistics.push({minValue:Z.minValue,maxValue:Z.maxValue,noDataValue:Z.noDataValue,dimStats:Z.dimStats})}var V,C,G;if(u>1&&f.length>1){for(G=S.width*S.height,S.bandMasks=f,_=new Uint8Array(G),_.set(f[0]),V=1;V{var _rr=x(T());FFe.exports={webm:"data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4EEQoWBAhhTgGcBAAAAAAAVkhFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsghV17AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU1LjMzLjEwMFdBjUxhdmY1NS4zMy4xMDBzpJBlrrXf3DCDVB8KcgbMpcr+RImIQJBgAAAAAAAWVK5rAQAAAAAAD++uAQAAAAAAADLXgQFzxYEBnIEAIrWcg3VuZIaFVl9WUDiDgQEj44OEAmJaAOABAAAAAAAABrCBsLqBkK4BAAAAAAAPq9eBAnPFgQKcgQAitZyDdW5khohBX1ZPUkJJU4OBAuEBAAAAAAAAEZ+BArWIQOdwAAAAAABiZIEgY6JPbwIeVgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMtAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAxMDExMDEgKFNjaGF1ZmVudWdnZXQpAQAAABUAAABlbmNvZGVyPUxhdmM1NS41Mi4xMDIBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBB9DtnUBAAAAAAAEPueBAKOFggAAgACjzoEAA4BwBwCdASqwAJAAAEcIhYWIhYSIAgIABhwJ7kPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99YAD+/6tQgKOFggADgAqjhYIAD4AOo4WCACSADqOZgQArADECAAEQEAAYABhYL/QACIBDmAYAAKOFggA6gA6jhYIAT4AOo5mBAFMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAGSADqOFggB6gA6jmYEAewAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAj4AOo5mBAKMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAKSADqOFggC6gA6jmYEAywAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAz4AOo4WCAOSADqOZgQDzADECAAEQEAAYABhYL/QACIBDmAYAAKOFggD6gA6jhYIBD4AOo5iBARsAEQIAARAQFGAAYWC/0AAiAQ5gGACjhYIBJIAOo4WCATqADqOZgQFDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggFPgA6jhYIBZIAOo5mBAWsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAXqADqOFggGPgA6jmYEBkwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIBpIAOo4WCAbqADqOZgQG7ADECAAEQEAAYABhYL/QACIBDmAYAAKOFggHPgA6jmYEB4wAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIB5IAOo4WCAfqADqOZgQILADECAAEQEAAYABhYL/QACIBDmAYAAKOFggIPgA6jhYICJIAOo5mBAjMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAjqADqOFggJPgA6jmYECWwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYICZIAOo4WCAnqADqOZgQKDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggKPgA6jhYICpIAOo5mBAqsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCArqADqOFggLPgA6jmIEC0wARAgABEBAUYABhYL/QACIBDmAYAKOFggLkgA6jhYIC+oAOo5mBAvsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAw+ADqOZgQMjADECAAEQEAAYABhYL/QACIBDmAYAAKOFggMkgA6jhYIDOoAOo5mBA0sAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA0+ADqOFggNkgA6jmYEDcwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIDeoAOo4WCA4+ADqOZgQObADECAAEQEAAYABhYL/QACIBDmAYAAKOFggOkgA6jhYIDuoAOo5mBA8MAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA8+ADqOFggPkgA6jhYID+oAOo4WCBA+ADhxTu2sBAAAAAAAAEbuPs4EDt4r3gQHxghEr8IEK",mp4:"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAGF21kYXTeBAAAbGliZmFhYyAxLjI4AABCAJMgBDIARwAAArEGBf//rdxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxNDIgcjIgOTU2YzhkOCAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTQgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0wIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDE6MHgxMTEgbWU9aGV4IHN1Ym1lPTcgcHN5PTEgcHN5X3JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTEgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCB2YnZfbWF4cmF0ZT03NjggdmJ2X2J1ZnNpemU9MzAwMCBjcmZfbWF4PTAuMCBuYWxfaHJkPW5vbmUgZmlsbGVyPTAgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAFZliIQL8mKAAKvMnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiEASZACGQAjgCEASZACGQAjgAAAAAdBmjgX4GSAIQBJkAIZACOAAAAAB0GaVAX4GSAhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGagC/AySEASZACGQAjgAAAAAZBmqAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZrAL8DJIQBJkAIZACOAAAAABkGa4C/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmwAvwMkhAEmQAhkAI4AAAAAGQZsgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGbQC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm2AvwMkhAEmQAhkAI4AAAAAGQZuAL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGboC/AySEASZACGQAjgAAAAAZBm8AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZvgL8DJIQBJkAIZACOAAAAABkGaAC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmiAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpAL8DJIQBJkAIZACOAAAAABkGaYC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmoAvwMkhAEmQAhkAI4AAAAAGQZqgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGawC/AySEASZACGQAjgAAAAAZBmuAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZsAL8DJIQBJkAIZACOAAAAABkGbIC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm0AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZtgL8DJIQBJkAIZACOAAAAABkGbgCvAySEASZACGQAjgCEASZACGQAjgAAAAAZBm6AnwMkhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AAAAhubW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAABDcAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzB0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAA+kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAALAAAACQAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAPpAAAAAAABAAAAAAKobWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAB1MAAAdU5VxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACU21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAhNzdGJsAAAAr3N0c2QAAAAAAAAAAQAAAJ9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAALAAkABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAALWF2Y0MBQsAN/+EAFWdCwA3ZAsTsBEAAAPpAADqYA8UKkgEABWjLg8sgAAAAHHV1aWRraEDyXyRPxbo5pRvPAyPzAAAAAAAAABhzdHRzAAAAAAAAAAEAAAAeAAAD6QAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAADDwAAAAsAAAALAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAiHN0Y28AAAAAAAAAHgAAAEYAAANnAAADewAAA5gAAAO0AAADxwAAA+MAAAP2AAAEEgAABCUAAARBAAAEXQAABHAAAASMAAAEnwAABLsAAATOAAAE6gAABQYAAAUZAAAFNQAABUgAAAVkAAAFdwAABZMAAAWmAAAFwgAABd4AAAXxAAAGDQAABGh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAACAAAAAAAABDcAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAQkAAADcAABAAAAAAPgbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAC7gAAAykBVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAADi21pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAADT3N0YmwAAABnc3RzZAAAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAC7gAAAAAAAM2VzZHMAAAAAA4CAgCIAAgAEgICAFEAVBbjYAAu4AAAADcoFgICAAhGQBoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAADIAAAQAAAAAAQAAAkAAAAFUc3RzYwAAAAAAAAAbAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAwAAAAEAAAABAAAABAAAAAIAAAABAAAABgAAAAEAAAABAAAABwAAAAIAAAABAAAACAAAAAEAAAABAAAACQAAAAIAAAABAAAACgAAAAEAAAABAAAACwAAAAIAAAABAAAADQAAAAEAAAABAAAADgAAAAIAAAABAAAADwAAAAEAAAABAAAAEAAAAAIAAAABAAAAEQAAAAEAAAABAAAAEgAAAAIAAAABAAAAFAAAAAEAAAABAAAAFQAAAAIAAAABAAAAFgAAAAEAAAABAAAAFwAAAAIAAAABAAAAGAAAAAEAAAABAAAAGQAAAAIAAAABAAAAGgAAAAEAAAABAAAAGwAAAAIAAAABAAAAHQAAAAEAAAABAAAAHgAAAAIAAAABAAAAHwAAAAQAAAABAAAA4HN0c3oAAAAAAAAAAAAAADMAAAAaAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAACMc3RjbwAAAAAAAAAfAAAALAAAA1UAAANyAAADhgAAA6IAAAO+AAAD0QAAA+0AAAQAAAAEHAAABC8AAARLAAAEZwAABHoAAASWAAAEqQAABMUAAATYAAAE9AAABRAAAAUjAAAFPwAABVIAAAVuAAAFgQAABZ0AAAWwAAAFzAAABegAAAX7AAAGFwAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTUuMzMuMTAw"}});var XFe=sm((Srr,PFe)=>{var Zrr=x(T()),{webm:Vkt,mp4:Ckt}=IFe(),hse=()=>typeof navigator<"u"&&parseFloat((""+(/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))<10&&!window.MSStream,fse=()=>"wakeLock"in navigator,pse=class{constructor(){if(this.enabled=!1,fse()){this._wakeLock=null;let t=()=>{this._wakeLock!==null&&document.visibilityState==="visible"&&this.enable()};document.addEventListener("visibilitychange",t),document.addEventListener("fullscreenchange",t)}else hse()?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm",Vkt),this._addSourceToVideo(this.noSleepVideo,"mp4",Ckt),this.noSleepVideo.addEventListener("loadedmetadata",()=>{this.noSleepVideo.duration<=1?this.noSleepVideo.setAttribute("loop",""):this.noSleepVideo.addEventListener("timeupdate",()=>{this.noSleepVideo.currentTime>.5&&(this.noSleepVideo.currentTime=Math.random())})}))}_addSourceToVideo(t,n,i){var o=document.createElement("source");o.src=i,o.type=`video/${n}`,t.appendChild(o)}get isEnabled(){return this.enabled}enable(){return fse()?navigator.wakeLock.request("screen").then(t=>{this._wakeLock=t,this.enabled=!0,console.log("Wake Lock active."),this._wakeLock.addEventListener("release",()=>{console.log("Wake Lock released.")})}).catch(t=>{throw this.enabled=!1,console.error(`${t.name}, ${t.message}`),t}):hse()?(this.disable(),console.warn(` NoSleep enabled for older iOS devices. This can interrupt active or long-running network requests from completing successfully. See https://github.com/richtr/NoSleep.js/issues/15 for more details. `),this.noSleepTimer=window.setInterval(()=>{document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))},15e3),this.enabled=!0,Promise.resolve()):this.noSleepVideo.play().then(n=>(this.enabled=!0,n)).catch(n=>{throw this.enabled=!1,n})}disable(){fse()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):hse()?this.noSleepTimer&&(console.warn(` NoSleep now disabled for older iOS devices. `),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}};PFe.exports=pse});var Jkt={};QFe(Jkt,{AlphaMode:()=>bp,AlphaPipelineStage:()=>FP,AnchorPointDirect:()=>YI,AnchorPointIndirect:()=>wI,Animation:()=>sU,AnimationViewModel:()=>aU,Appearance:()=>Co,ApproximateTerrainHeights:()=>Ei,ArcGISTiledElevationTerrainProvider:()=>ej,ArcGisBaseMapType:()=>yf,ArcGisMapServerImageryProvider:()=>Hb,ArcGisMapService:()=>Gu,ArcType:()=>ln,ArticulationStageType:()=>Dc,AssociativeArray:()=>Mt,Atmosphere:()=>cS,AtmospherePipelineStage:()=>hP,AttributeCompression:()=>cn,AttributeType:()=>Dt,AutoExposure:()=>Qw,AutomaticUniforms:()=>pb,Axis:()=>Mi,AxisAlignedBoundingBox:()=>ou,Azure2DImageryProvider:()=>pX,B3dmLoader:()=>tP,B3dmParser:()=>QI,BaseLayerPicker:()=>lU,BaseLayerPickerViewModel:()=>cU,BatchTable:()=>Y_,BatchTableHierarchy:()=>pS,BatchTexture:()=>$l,BatchTexturePipelineStage:()=>IP,Billboard:()=>vo,BillboardCollection:()=>xu,BillboardGraphics:()=>sl,BillboardLoadState:()=>vs,BillboardTexture:()=>Cb,BillboardVisualizer:()=>CF,BingMapsGeocoderService:()=>ij,BingMapsImageryProvider:()=>rX,BingMapsStyle:()=>NC,BlendEquation:()=>Wc,BlendFunction:()=>Ko,BlendOption:()=>Xi,BlendingState:()=>tn,BoundingRectangle:()=>$e,BoundingSphere:()=>le,BoundingSphereState:()=>Lt,BoundingVolumeSemantics:()=>Tx,BoxEmitter:()=>Eoe,BoxGeometry:()=>Cc,BoxGeometryUpdater:()=>uI,BoxGraphics:()=>O_,BoxOutlineGeometry:()=>Rh,BrdfLutGenerator:()=>jY,Buffer:()=>et,BufferLoader:()=>ET,BufferPoint:()=>Pc,BufferPointCollection:()=>Md,BufferPointMaterial:()=>Gf,BufferPolygon:()=>Hr,BufferPolygonCollection:()=>tl,BufferPolygonMaterial:()=>pu,BufferPolyline:()=>ha,BufferPolylineCollection:()=>il,BufferPolylineMaterial:()=>bu,BufferPrimitive:()=>zr,BufferPrimitiveCollection:()=>Ks,BufferPrimitiveMaterial:()=>Xl,BufferUsage:()=>Ie,CPUStylingPipelineStage:()=>YP,CallbackPositionProperty:()=>bY,CallbackProperty:()=>tf,Camera:()=>Ro,CameraEventAggregator:()=>iM,CameraEventType:()=>io,CameraFlightPath:()=>qY,Cartesian2:()=>M,Cartesian3:()=>h,Cartesian4:()=>ce,CartesianRectangle:()=>KC,Cartographic:()=>fe,CartographicGeocoderService:()=>aj,CatmullRomSpline:()=>cj,Cesium3DContentGroup:()=>RS,Cesium3DTile:()=>eh,Cesium3DTileBatchTable:()=>ff,Cesium3DTileColorBlendMode:()=>Id,Cesium3DTileContent:()=>Woe,Cesium3DTileContentFactory:()=>NS,Cesium3DTileContentState:()=>ir,Cesium3DTileContentType:()=>Ta,Cesium3DTileFeature:()=>Qs,Cesium3DTileFeatureTable:()=>hf,Cesium3DTileOptimizationHint:()=>qm,Cesium3DTileOptimizations:()=>nY,Cesium3DTilePass:()=>or,Cesium3DTilePassState:()=>rh,Cesium3DTilePointFeature:()=>eg,Cesium3DTileRefine:()=>br,Cesium3DTileStyle:()=>og,Cesium3DTileStyleEngine:()=>sY,Cesium3DTileVectorFeature:()=>IS,Cesium3DTilesInspector:()=>yU,Cesium3DTilesInspectorViewModel:()=>gU,Cesium3DTilesTerrainData:()=>RA,Cesium3DTilesTerrainGeometryProcessor:()=>WV,Cesium3DTilesTerrainProvider:()=>V4,Cesium3DTilesVoxelProvider:()=>voe,Cesium3DTileset:()=>wr,Cesium3DTilesetBaseTraversal:()=>uY,Cesium3DTilesetCache:()=>iY,Cesium3DTilesetGraphics:()=>Q_,Cesium3DTilesetHeatmap:()=>oY,Cesium3DTilesetMetadata:()=>OS,Cesium3DTilesetMostDetailedTraversal:()=>cY,Cesium3DTilesetSkipTraversal:()=>fY,Cesium3DTilesetStatistics:()=>Ef,Cesium3DTilesetTraversal:()=>ka,Cesium3DTilesetVisualizer:()=>pY,CesiumInspector:()=>fU,CesiumInspectorViewModel:()=>hU,CesiumTerrainProvider:()=>MT,CesiumWidget:()=>mk,Check:()=>Do,CheckerboardMaterialProperty:()=>UR,CircleEmitter:()=>C9,CircleGeometry:()=>H4,CircleOutlineGeometry:()=>K4,ClassificationModelDrawCommand:()=>tN,ClassificationPipelineStage:()=>PP,ClassificationPrimitive:()=>K1,ClassificationType:()=>ei,ClearCommand:()=>mi,ClippingPlane:()=>js,ClippingPlaneCollection:()=>gs,ClippingPolygon:()=>SC,ClippingPolygonCollection:()=>lf,Clock:()=>Xh,ClockRange:()=>as,ClockStep:()=>Xo,ClockViewModel:()=>iU,CloudCollection:()=>Noe,CloudType:()=>LG,Color:()=>U,ColorBlendMode:()=>ll,ColorGeometryInstanceAttribute:()=>Qt,ColorMaterialProperty:()=>Jt,Command:()=>$re,ComponentDatatype:()=>J,Composite3DTileContent:()=>pN,CompositeEntityCollection:()=>dne,CompositeMaterialProperty:()=>OR,CompositePositionProperty:()=>uc,CompositeProperty:()=>hl,CompressedTextureBuffer:()=>IA,ComputeCommand:()=>Yl,ComputeEngine:()=>E2,ConditionsExpression:()=>wN,ConeEmitter:()=>woe,ConstantPositionProperty:()=>zl,ConstantProperty:()=>pi,ConstantSpline:()=>dE,ContentMetadata:()=>JN,Context:()=>W_,ContextLimits:()=>Xt,Controller:()=>Yre,ControllerHost:()=>tw,CoplanarPolygonGeometry:()=>yE,CoplanarPolygonGeometryLibrary:()=>j0,CoplanarPolygonOutlineGeometry:()=>Sm,CornerType:()=>$i,CorrelationGroup:()=>MI,CorridorGeometry:()=>$T,CorridorGeometryLibrary:()=>ao,CorridorGeometryUpdater:()=>mI,CorridorGraphics:()=>z_,CorridorOutlineGeometry:()=>CE,Credit:()=>At,CreditDisplay:()=>iw,CubeMap:()=>Jr,CubeMapFace:()=>W2,CubeMapPanorama:()=>RZ,CubicRealPolynomial:()=>RT,CullFace:()=>ki,CullingVolume:()=>Os,CumulusCloud:()=>em,CustomDataSource:()=>oI,CustomHeightmapTerrainProvider:()=>fQ,CustomShader:()=>c0,CustomShaderMode:()=>zb,CustomShaderPipelineStage:()=>BP,CustomShaderTranslucencyMode:()=>ux,CylinderGeometry:()=>GE,CylinderGeometryLibrary:()=>e_,CylinderGeometryUpdater:()=>hI,CylinderGraphics:()=>H_,CylinderOutlineGeometry:()=>AE,CzmlDataSource:()=>xk,DataSource:()=>bs,DataSourceClock:()=>Yf,DataSourceCollection:()=>O2,DataSourceDisplay:()=>GY,DebugAppearance:()=>Moe,DebugCameraPrimitive:()=>t0,DebugInspector:()=>fM,DebugModelMatrixPrimitive:()=>G9,DefaultProxy:()=>yQ,DepthFunction:()=>ac,DepthPlane:()=>cw,DequantizationPipelineStage:()=>HP,DerivedCommand:()=>Ff,DeveloperError:()=>ge,DeviceOrientationCameraController:()=>lw,DirectionalLight:()=>koe,DiscardEmptyTileImagePolicy:()=>YC,DiscardMissingTileImagePolicy:()=>iX,DistanceDisplayCondition:()=>Ot,DistanceDisplayConditionGeometryInstanceAttribute:()=>$n,DoubleEndedPriorityQueue:()=>N0,DoublyLinkedList:()=>WE,DracoLoader:()=>M0,DrawCommand:()=>ot,DynamicAtmosphereLightingType:()=>Pb,DynamicEnvironmentMapManager:()=>Xb,DynamicGeometryBatch:()=>tS,DynamicGeometryUpdater:()=>Ci,EarthOrientationParameters:()=>rA,EarthOrientationParametersSample:()=>Qg,EasingFunction:()=>ls,EdgeDetectionPipelineStage:()=>JP,EdgeDisplayMode:()=>Um,EdgeFramebuffer:()=>bw,EdgeVisibilityPipelineStage:()=>qP,EllipseGeometry:()=>Ll,EllipseGeometryLibrary:()=>Zd,EllipseGeometryUpdater:()=>fI,EllipseGraphics:()=>K_,EllipseOutlineGeometry:()=>au,Ellipsoid:()=>ie,EllipsoidGeodesic:()=>$0,EllipsoidGeometry:()=>La,EllipsoidGeometryUpdater:()=>bI,EllipsoidGraphics:()=>J_,EllipsoidOutlineGeometry:()=>du,EllipsoidPrimitive:()=>BY,EllipsoidRhumbLine:()=>Ac,EllipsoidSurfaceAppearance:()=>Uoe,EllipsoidTangentPlane:()=>Gs,EllipsoidTerrainProvider:()=>Cp,EllipsoidalOccluder:()=>Zh,Empty3DTileContent:()=>Kp,EncodedCartesian3:()=>Rn,Entity:()=>Jo,EntityCluster:()=>_u,EntityCollection:()=>Pa,EntityView:()=>EY,EquirectangularPanorama:()=>Doe,Event:()=>Se,EventHelper:()=>Ir,Expression:()=>Hm,ExpressionNodeType:()=>Ft,ExtrapolationType:()=>uu,FeatureDetection:()=>hn,FeatureIdPipelineStage:()=>dx,Fog:()=>dw,ForEach:()=>ke,FrameRateMonitor:()=>W9,FrameState:()=>uw,Framebuffer:()=>ps,FramebufferManager:()=>ai,Frozen:()=>B,FrustumCommands:()=>yw,FrustumGeometry:()=>i_,FrustumOutlineGeometry:()=>PE,Fullscreen:()=>Or,FullscreenButton:()=>TU,FullscreenButtonViewModel:()=>xU,GaussianSplat3DTileContent:()=>Cx,GaussianSplatPrimitive:()=>KN,GaussianSplatRenderResources:()=>DN,GaussianSplatSorter:()=>PS,GaussianSplatTextureGenerator:()=>UN,GeoJsonDataSource:()=>Qx,GeoJsonLoader:()=>nP,GeoJsonPrimitive:()=>Hoe,GeocodeType:()=>Fy,Geocoder:()=>SU,GeocoderService:()=>y1,GeocoderViewModel:()=>_U,GeographicProjection:()=>wi,GeographicTilingScheme:()=>Ji,Geometry:()=>Zt,Geometry3DTileContent:()=>gN,GeometryAttribute:()=>Pe,GeometryAttributes:()=>Sn,GeometryFactory:()=>RQ,GeometryInstance:()=>Nt,GeometryInstanceAttribute:()=>Hc,GeometryOffsetAttribute:()=>pn,GeometryPipeline:()=>Bn,GeometryPipelineStage:()=>nX,GeometryType:()=>hm,GeometryUpdater:()=>Ri,GeometryUpdaterSet:()=>sS,GeometryVisualizer:()=>ZI,GetFeatureInfoFormat:()=>xf,Globe:()=>OY,GlobeDepth:()=>xw,GlobeSurfaceShaderSet:()=>FY,GlobeSurfaceTile:()=>ih,GlobeSurfaceTileProvider:()=>PY,GlobeTranslucency:()=>XY,GlobeTranslucencyFramebuffer:()=>Tw,GlobeTranslucencyState:()=>mw,GltfBufferViewLoader:()=>IV,GltfDracoLoader:()=>PV,GltfGpmLoader:()=>UI,GltfGpmLocal:()=>CC,GltfImageLoader:()=>NV,GltfIndexBufferLoader:()=>YV,GltfJsonLoader:()=>MV,GltfLoader:()=>Ru,GltfLoaderUtil:()=>Sd,GltfMeshPrimitiveGpmLoader:()=>zI,GltfSpzLoader:()=>qA,GltfStructuralMetadataLoader:()=>XI,GltfTextureLoader:()=>OV,GltfVertexBufferLoader:()=>BV,Google2DImageryProvider:()=>fX,GoogleEarthEnterpriseImageryProvider:()=>Joe,GoogleEarthEnterpriseMapsProvider:()=>cX,GoogleEarthEnterpriseMetadata:()=>sb,GoogleEarthEnterpriseTerrainData:()=>x1,GoogleEarthEnterpriseTerrainProvider:()=>FQ,GoogleEarthEnterpriseTileInformation:()=>NE,GoogleGeocoderService:()=>PQ,GoogleMaps:()=>ua,GoogleStreetViewCubeMapPanoramaProvider:()=>joe,GpxDataSource:()=>Zk,GregorianDate:()=>E0,GridImageryProvider:()=>Qoe,GridMaterialProperty:()=>zR,GroundGeometryUpdater:()=>ii,GroundPolylineGeometry:()=>r_,GroundPolylinePrimitive:()=>zh,GroundPrimitive:()=>Ol,GroupMetadata:()=>dR,HeadingPitchRange:()=>Gm,HeadingPitchRoll:()=>Tc,Heap:()=>tA,HeightReference:()=>rt,HeightmapEncoding:()=>um,HeightmapTerrainData:()=>Vc,HeightmapTessellator:()=>SV,HermitePolynomialApproximation:()=>wE,HermiteSpline:()=>ly,HilbertOrder:()=>_1,HomeButton:()=>VU,HomeButtonViewModel:()=>ZU,HorizontalOrigin:()=>Di,HybridScreenSpacePanCameraController:()=>Dre,I3SBuildingSceneLayerExplorer:()=>cse,I3SBuildingSceneLayerExplorerViewModel:()=>CU,I3SDataProvider:()=>Qf,I3SDecoder:()=>v9,I3SFeature:()=>F9,I3SField:()=>I9,I3SGeometry:()=>WG,I3SLayer:()=>QZ,I3SNode:()=>vG,I3SStatistics:()=>N9,I3SSublayer:()=>w9,I3SSymbology:()=>X9,I3dmLoader:()=>oP,I3dmParser:()=>iP,ITwinData:()=>tre,ITwinPlatform:()=>zs,Iau2000Orientation:()=>kE,Iau2006XysData:()=>sA,Iau2006XysSample:()=>VT,IauOrientationAxes:()=>UE,IauOrientationParameters:()=>ME,ImageBasedLighting:()=>fS,ImageBasedLightingPipelineStage:()=>pP,ImageMaterialProperty:()=>ox,Imagery:()=>zC,ImageryConfiguration:()=>dN,ImageryCoverage:()=>JC,ImageryFlags:()=>yX,ImageryInput:()=>TX,ImageryLayer:()=>Ts,ImageryLayerCollection:()=>zS,ImageryLayerFeatureInfo:()=>gf,ImageryPipelineStage:()=>_X,ImageryProvider:()=>Au,ImageryState:()=>On,Implicit3DTileContent:()=>eR,ImplicitAvailabilityBitstream:()=>vV,ImplicitMetadataView:()=>FV,ImplicitSubdivisionScheme:()=>Es,ImplicitSubtree:()=>z0,ImplicitSubtreeCache:()=>Z9,ImplicitSubtreeMetadata:()=>LA,ImplicitTileCoordinates:()=>gp,ImplicitTileset:()=>yp,IndexDatatype:()=>De,InfoBox:()=>GU,InfoBoxViewModel:()=>RU,InspectorShared:()=>eu,InstanceAttributeSemantic:()=>Er,InstancingPipelineStage:()=>EP,InterpolationAlgorithm:()=>jQ,InterpolationType:()=>Mh,Intersect:()=>jt,IntersectionTests:()=>di,Intersections2D:()=>Gh,Interval:()=>Dr,InvertClassification:()=>GR,Ion:()=>vh,IonGeocodeProviderType:()=>cb,IonGeocoderService:()=>s_,IonImageryProvider:()=>ed,IonImageryProviderFactory:()=>OC,IonResource:()=>ss,IonWorldImageryStyle:()=>Jb,Iso8601:()=>tt,JobScheduler:()=>hw,JobType:()=>Rc,JsonMetadataTable:()=>Nb,JulianDate:()=>Q,KTX2Transcoder:()=>PA,KeyboardEventModifier:()=>Ho,KeyframeNode:()=>Yo,KmlCamera:()=>Vk,KmlDataSource:()=>DZ,KmlLookAt:()=>d9,KmlTour:()=>u9,KmlTourFlyTo:()=>m9,KmlTourWait:()=>h9,Label:()=>tx,LabelCollection:()=>Yp,LabelGraphics:()=>qh,LabelStyle:()=>fr,LabelVisualizer:()=>VI,LagrangePolynomialApproximation:()=>OE,LeapSecond:()=>mo,Light:()=>nre,LightingModel:()=>Op,LightingPipelineStage:()=>ZX,LinearApproximation:()=>a_,LinearSpline:()=>cy,MVTDataProvider:()=>lre,ManagedArray:()=>Pl,MapMode2D:()=>id,MapProjection:()=>n8,MapboxImageryProvider:()=>lX,MapboxStyleImageryProvider:()=>dre,MappedPositions:()=>xX,Material:()=>no,MaterialAppearance:()=>To,MaterialPipelineStage:()=>GX,MaterialProperty:()=>pr,Math:()=>L,Matrix2:()=>ji,Matrix3:()=>q,Matrix4:()=>I,Megatexture:()=>wM,MeshPrimitiveGpmLocal:()=>BI,MetadataClass:()=>Wh,MetadataClassProperty:()=>hp,MetadataComponentType:()=>Pt,MetadataEntity:()=>Kn,MetadataEnum:()=>tE,MetadataEnumValue:()=>eE,MetadataPicking:()=>fw,MetadataPickingPipelineStage:()=>Wu,MetadataPipelineStage:()=>Om,MetadataSchema:()=>Rl,MetadataSchemaLoader:()=>yy,MetadataSemantic:()=>xm,MetadataTable:()=>fm,MetadataTableProperty:()=>FA,MetadataType:()=>yt,MipmapHint:()=>bm,Model:()=>vu,Model3DTileContent:()=>Iu,ModelAlphaOptions:()=>ZS,ModelAnimation:()=>sP,ModelAnimationChannel:()=>rP,ModelAnimationCollection:()=>aP,ModelAnimationLoop:()=>Pd,ModelAnimationState:()=>pf,ModelArticulation:()=>gP,ModelArticulationStage:()=>bP,ModelClippingPlanesPipelineStage:()=>TP,ModelClippingPolygonsPipelineStage:()=>ZP,ModelColorPipelineStage:()=>lx,ModelComponents:()=>Zn,ModelDrawCommand:()=>nN,ModelDrawCommands:()=>rN,ModelFeature:()=>cP,ModelFeatureTable:()=>lP,ModelGraphics:()=>Eb,ModelImagery:()=>uN,ModelImageryMapping:()=>TS,ModelLightingOptions:()=>qX,ModelMatrixUpdateStage:()=>LP,ModelNode:()=>VP,ModelPrimitiveImagery:()=>_S,ModelReader:()=>ga,ModelRenderResources:()=>BX,ModelRuntimeNode:()=>vP,ModelRuntimePrimitive:()=>DX,ModelSceneGraph:()=>sN,ModelSilhouettePipelineStage:()=>KX,ModelSkin:()=>OX,ModelSplitterPipelineStage:()=>jX,ModelStatistics:()=>aN,ModelType:()=>Yr,ModelUtility:()=>xt,ModelVisualizer:()=>hN,Moon:()=>HY,MorphTargetsPipelineStage:()=>EX,MorphWeightSpline:()=>i8,MortonOrder:()=>xy,MouseButton:()=>Ba,Multiple3DTileContent:()=>qN,MultisampleFramebuffer:()=>X2,NavigationHelpButton:()=>EU,NavigationHelpButtonViewModel:()=>AU,NearFarScalar:()=>Ht,NeverTileDiscardPolicy:()=>mre,NodeRenderResources:()=>QX,NodeStatisticsPipelineStage:()=>WP,NodeTransformationProperty:()=>j_,OIT:()=>Sw,Occluder:()=>BE,OffsetGeometryInstanceAttribute:()=>xo,OpenCageGeocoderService:()=>s8,OpenStreetMapImageryProvider:()=>Og,OrderedGroundPrimitiveCollection:()=>VF,OrientedBoundingBox:()=>$t,OrthographicFrustum:()=>bn,OrthographicOffCenterFrustum:()=>ds,Packable:()=>a8,PackableForInterpolation:()=>c8,Panorama:()=>hre,PanoramaProvider:()=>fre,Particle:()=>NG,ParticleBurst:()=>bre,ParticleEmitter:()=>gre,ParticleSystem:()=>yre,Pass:()=>We,PassState:()=>rc,PathGraphics:()=>Lb,PathMode:()=>jp,PathVisualizer:()=>TY,PeliasGeocoderService:()=>DE,PerInstanceColorAppearance:()=>yn,PerformanceDisplay:()=>yg,PerformanceWatchdog:()=>WU,PerformanceWatchdogViewModel:()=>LU,PerspectiveFrustum:()=>Bi,PerspectiveOffCenterFrustum:()=>Fl,PickDepth:()=>pw,PickDepthFramebuffer:()=>Vw,PickFramebuffer:()=>Cw,PickId:()=>v2,PickedMetadataInfo:()=>BM,Picking:()=>Ww,PickingPipelineStage:()=>LX,PinBuilder:()=>lb,PixelDatatype:()=>Me,PixelFormat:()=>Be,PlanarFillIdFramebuffer:()=>gw,Plane:()=>nn,PlaneGeometry:()=>JE,PlaneGeometryUpdater:()=>gI,PlaneGraphics:()=>jF,PlaneOutlineGeometry:()=>jE,PntsLoader:()=>lN,PntsParser:()=>CS,PointCloud:()=>dk,PointCloudEyeDomeLighting:()=>wb,PointCloudShading:()=>kp,PointCloudStylingPipelineStage:()=>vX,PointGraphics:()=>q_,PointPrimitive:()=>ba,PointPrimitiveCollection:()=>j1,PointVisualizer:()=>SY,PolygonGeometry:()=>db,PolygonGeometryLibrary:()=>qn,PolygonGeometryUpdater:()=>yI,PolygonGraphics:()=>$h,PolygonHierarchy:()=>Ec,PolygonOutlineGeometry:()=>QE,PolygonPipeline:()=>ui,Polyline:()=>Km,PolylineArrowMaterialProperty:()=>KR,PolylineCollection:()=>Vf,PolylineColorAppearance:()=>Ws,PolylineDashMaterialProperty:()=>jR,PolylineGeometry:()=>ub,PolylineGeometryUpdater:()=>VY,PolylineGlowMaterialProperty:()=>qR,PolylineGraphics:()=>al,PolylineMaterialAppearance:()=>sc,PolylineOutlineMaterialProperty:()=>Hx,PolylinePipeline:()=>eo,PolylineVisualizer:()=>RY,PolylineVolumeGeometry:()=>tL,PolylineVolumeGeometryLibrary:()=>Nh,PolylineVolumeGeometryUpdater:()=>xI,PolylineVolumeGraphics:()=>$_,PolylineVolumeOutlineGeometry:()=>oL,PositionProperty:()=>Qh,PositionPropertyArray:()=>Eg,PostProcessStage:()=>Po,PostProcessStageCollection:()=>eM,PostProcessStageComposite:()=>Od,PostProcessStageLibrary:()=>ku,PostProcessStageSampleMode:()=>Mu,PostProcessStageTextureCache:()=>hZ,PpeMetadata:()=>OI,PpeSource:()=>Jre,PpeTexture:()=>DI,Primitive:()=>Nn,PrimitiveCollection:()=>Bl,PrimitiveLoadPlan:()=>mS,PrimitiveOutlineGenerator:()=>uS,PrimitiveOutlinePipelineStage:()=>PX,PrimitivePipeline:()=>w_,PrimitiveRenderResources:()=>$X,PrimitiveState:()=>Qr,PrimitiveStatisticsPipelineStage:()=>XX,PrimitiveType:()=>Fe,ProjectionPicker:()=>FU,ProjectionPickerViewModel:()=>vU,Property:()=>j,PropertyArray:()=>eG,PropertyAttribute:()=>lS,PropertyAttributeProperty:()=>vI,PropertyBag:()=>Kl,PropertyTable:()=>Ql,PropertyTexture:()=>Yb,PropertyTextureProperty:()=>WI,ProviderViewModel:()=>sr,Proxy:()=>d8,QuadraticRealPolynomial:()=>Cl,QuadtreeOccluders:()=>NY,QuadtreePrimitive:()=>DY,QuadtreeTile:()=>YY,QuadtreeTileLoadState:()=>Ua,QuadtreeTileProvider:()=>Tre,QuantizedMeshTerrainData:()=>wT,QuarticRealPolynomial:()=>bA,Quaternion:()=>Ye,QuaternionSpline:()=>rL,Queue:()=>Vy,Ray:()=>fn,Rectangle:()=>re,RectangleCollisionChecker:()=>h_,RectangleGeometry:()=>f_,RectangleGeometryLibrary:()=>ma,RectangleGeometryUpdater:()=>TI,RectangleGraphics:()=>ef,RectangleOutlineGeometry:()=>p_,ReferenceFrame:()=>Ui,ReferenceProperty:()=>fg,RenderState:()=>Oe,Renderbuffer:()=>gu,RenderbufferFormat:()=>Ml,Request:()=>_r,RequestErrorEvent:()=>op,RequestScheduler:()=>Mc,RequestState:()=>Ti,RequestType:()=>ks,Resource:()=>ve,ResourceCache:()=>Pi,ResourceCacheKey:()=>Gl,ResourceCacheStatistics:()=>oE,ResourceLoader:()=>qi,ResourceLoaderState:()=>Tt,Rotation:()=>uh,RuntimeError:()=>ae,S2Cell:()=>mb,SDFSettings:()=>Fa,SampledPositionProperty:()=>mc,SampledProperty:()=>Yu,Sampler:()=>kt,ScaledPositionProperty:()=>Qp,Scene:()=>HM,SceneFramebuffer:()=>aZ,SceneMode:()=>se,SceneMode2DPipelineStage:()=>NX,SceneModePicker:()=>PU,SceneModePickerViewModel:()=>IU,SceneTransforms:()=>co,SceneTransitioner:()=>nM,ScreenSpaceCameraController:()=>sM,ScreenSpaceElevatorCameraController:()=>Q9,ScreenSpaceEventHandler:()=>Hs,ScreenSpaceEventType:()=>dn,ScreenSpaceInputBindings:()=>$f,ScreenSpaceMapCameraController:()=>q9,ScreenSpaceTiltOrbitCameraController:()=>Bre,ScreenSpaceZoomCameraController:()=>Hre,SelectedFeatureIdPipelineStage:()=>mx,SelectionIndicator:()=>YU,SelectionIndicatorViewModel:()=>NU,SensorVolumePortionToDisplay:()=>iG,ShaderBuilder:()=>xb,ShaderCache:()=>F2,ShaderDestination:()=>pe,ShaderFunction:()=>w2,ShaderProgram:()=>en,ShaderSource:()=>ze,ShaderStruct:()=>Y2,ShadowMap:()=>_g,ShadowMapShader:()=>Pf,ShadowMode:()=>Fn,ShadowVolumeAppearance:()=>yu,SharedContext:()=>M2,ShowGeometryInstanceAttribute:()=>vn,Simon1994PlanetaryPositions:()=>Dy,SimplePolylineGeometry:()=>A8,SingleTileImageryProvider:()=>dX,SkinningPipelineStage:()=>wX,SkyAtmosphere:()=>jM,SkyBox:()=>tk,SnapFramebuffer:()=>cM,Snapping:()=>lM,SpatialNode:()=>kM,Spdcf:()=>kI,SpecularEnvironmentCubeMap:()=>mf,SphereEmitter:()=>Sre,SphereGeometry:()=>fL,SphereOutlineGeometry:()=>hb,Spherical:()=>pL,Spline:()=>Zo,SplitDirection:()=>Xr,Splitter:()=>YR,StaticGeometryColorBatch:()=>Mm,StaticGeometryPerMaterialBatch:()=>km,StaticGroundGeometryColorBatch:()=>bC,StaticGroundGeometryPerMaterialBatch:()=>SI,StaticGroundPolylinePerMaterialBatch:()=>CY,StaticOutlineGeometryBatch:()=>xC,StencilConstants:()=>Kt,StencilFunction:()=>ti,StencilOperation:()=>Wt,SteppedSpline:()=>bL,Stereographic:()=>jc,StorageType:()=>sx,StripeMaterialProperty:()=>nG,StripeOrientation:()=>wf,StructuralMetadata:()=>Xa,StyleCommandsNeeded:()=>bf,StyleExpression:()=>Zre,Sun:()=>ak,SunLight:()=>yb,SunPostProcess:()=>mM,SupportedImageFormats:()=>NI,SvgPathBindingHandler:()=>tU,Sync:()=>k2,TaskProcessor:()=>Jn,Terrain:()=>H9,TerrainData:()=>gd,TerrainEncoding:()=>mr,TerrainFillMesh:()=>TR,TerrainMesh:()=>$a,TerrainOffsetProperty:()=>iS,TerrainPicker:()=>_A,TerrainProvider:()=>Oo,TerrainQuantization:()=>Aa,TerrainState:()=>Io,Texture:()=>Ct,Texture3D:()=>U2,TextureAtlas:()=>F_,TextureCache:()=>I2,TextureMagnificationFilter:()=>ni,TextureManager:()=>bM,TextureMinificationFilter:()=>zt,TexturePacker:()=>M1,TextureUniform:()=>yM,TextureWrap:()=>sn,TileAvailability:()=>Ch,TileBoundingRegion:()=>Xu,TileBoundingS2Cell:()=>eY,TileBoundingSphere:()=>lg,TileBoundingVolume:()=>Vre,TileCoordinatesImageryProvider:()=>J9,TileDiscardPolicy:()=>Rre,TileEdge:()=>Ln,TileImagery:()=>HC,TileMapServiceImageryProvider:()=>hx,TileMetadata:()=>jN,TileOrientedBoundingBox:()=>kd,TileProviderError:()=>zo,TileReplacementQueue:()=>wY,TileSelectionResult:()=>hi,TileState:()=>Gre,Tileset3DTileContent:()=>xN,TilesetMetadata:()=>tY,TilesetPipelineStage:()=>dP,TilingScheme:()=>W8,TimeConstants:()=>kn,TimeDynamicImagery:()=>xS,TimeDynamicPointCloud:()=>MR,TimeInterval:()=>Vn,TimeIntervalCollection:()=>fs,TimeIntervalCollectionPositionProperty:()=>pg,TimeIntervalCollectionProperty:()=>Lg,TimeStandard:()=>si,Timeline:()=>kU,TimelineHighlightRange:()=>wU,TimelineTrack:()=>MU,Tipsify:()=>sE,ToggleButtonViewModel:()=>lT,Tonemapper:()=>Zg,TrackingReferenceFrame:()=>fb,Transforms:()=>bt,TranslationRotationScale:()=>By,TranslucentTileClassification:()=>Gw,TridiagonalSystemSolver:()=>AV,TrustedServers:()=>hV,TweenCollection:()=>bZ,UniformState:()=>P2,UniformType:()=>a0,UrlTemplate3DTilesDataProvider:()=>k9,UrlTemplateImageryProvider:()=>xs,VERSION:()=>Kkt,VRButton:()=>DU,VRButtonViewModel:()=>UU,VRTheWorldTerrainProvider:()=>P8,VaryingType:()=>Kre,Vector3DTileBatch:()=>zp,Vector3DTileClampedPolylines:()=>vN,Vector3DTileContent:()=>FN,Vector3DTileGeometry:()=>$b,Vector3DTilePoints:()=>CN,Vector3DTilePolygons:()=>RN,Vector3DTilePolylines:()=>vS,Vector3DTilePrimitive:()=>ES,VectorGltf3DTileContent:()=>Vx,VectorPipeline:()=>$c,VectorProvider:()=>p2,VelocityOrientationProperty:()=>fk,VelocityVectorProperty:()=>bg,VertexArray:()=>Dn,VertexArrayFacade:()=>Tb,VertexAttributeSemantic:()=>st,VertexFormat:()=>we,VerticalExaggeration:()=>ho,VerticalExaggerationPipelineStage:()=>kX,VerticalOrigin:()=>zn,VideoSynchronizer:()=>C7,View:()=>lZ,Viewer:()=>gse,ViewportQuad:()=>Are,Visibility:()=>Pr,Visualizer:()=>Soe,VoxelBoundsCollection:()=>Rg,VoxelBoxShape:()=>SZ,VoxelCell:()=>pM,VoxelContent:()=>_Z,VoxelCylinderShape:()=>ZZ,VoxelEllipsoidShape:()=>VZ,VoxelInspector:()=>BU,VoxelInspectorViewModel:()=>OU,VoxelMetadataOrder:()=>l0,VoxelPrimitive:()=>Dx,VoxelProvider:()=>Lre,VoxelRenderResources:()=>IM,VoxelShape:()=>Wre,VoxelShapeType:()=>pc,VoxelTraversal:()=>UM,VulkanConstants:()=>R7,WallGeometry:()=>g2,WallGeometryLibrary:()=>Z_,WallGeometryUpdater:()=>_I,WallGraphics:()=>Wb,WallOutlineGeometry:()=>x2,WebGLConstants:()=>ne,WebMapServiceImageryProvider:()=>mX,WebMapTileServiceImageryProvider:()=>hX,WebMercatorProjection:()=>fi,WebMercatorTilingScheme:()=>Zr,WindingOrder:()=>Ds,WireframeIndexGenerator:()=>U1,WireframePipelineStage:()=>UX,_shadersAcesTonemappingStage:()=>vw,_shadersAdditiveBlend:()=>dM,_shadersAdjustTranslucentFS:()=>AR,_shadersAllMaterialAppearanceFS:()=>rI,_shadersAllMaterialAppearanceVS:()=>sI,_shadersAmbientOcclusionGenerate:()=>Fw,_shadersAmbientOcclusionModulate:()=>Iw,_shadersAspectRampMaterial:()=>Q2,_shadersAtmosphereCommon:()=>df,_shadersAtmosphereStageFS:()=>uP,_shadersAtmosphereStageVS:()=>mP,_shadersBasicMaterialAppearanceFS:()=>aI,_shadersBasicMaterialAppearanceVS:()=>cI,_shadersBillboardCollectionFS:()=>GF,_shadersBillboardCollectionVS:()=>AF,_shadersBlackAndWhite:()=>Pw,_shadersBloomComposite:()=>Xw,_shadersBrdfLutGeneratorFS:()=>KY,_shadersBrightPass:()=>uM,_shadersBrightness:()=>Nw,_shadersBufferPointMaterialFS:()=>PN,_shadersBufferPointMaterialVS:()=>IN,_shadersBufferPolygonMaterialFS:()=>c2,_shadersBufferPolygonMaterialVS:()=>a2,_shadersBufferPolylineMaterialFS:()=>m2,_shadersBufferPolylineMaterialVS:()=>u2,_shadersBumpMapMaterial:()=>q2,_shadersCPUStylingStageFS:()=>NP,_shadersCPUStylingStageVS:()=>XP,_shadersCheckerboardMaterial:()=>$2,_shadersCloudCollectionFS:()=>g9,_shadersCloudCollectionVS:()=>y9,_shadersCloudNoiseFS:()=>x9,_shadersCloudNoiseVS:()=>T9,_shadersCompareAndPackTranslucentDepth:()=>Rw,_shadersCompositeOITFS:()=>_w,_shadersCompositeTranslucentClassification:()=>cZ,_shadersComputeIrradianceFS:()=>RI,_shadersComputeRadianceMapFS:()=>GI,_shadersConstantLodStageFS:()=>RX,_shadersConstantLodStageVS:()=>CX,_shadersContrastBias:()=>Yw,_shadersConvolveSpecularMapFS:()=>AI,_shadersConvolveSpecularMapVS:()=>EI,_shadersCubeMapPanoramaVS:()=>$M,_shadersCustomShaderStageFS:()=>MP,_shadersCustomShaderStageVS:()=>wP,_shadersCzmBuiltins:()=>T_,_shadersDepthOfField:()=>ww,_shadersDepthPlaneFS:()=>ow,_shadersDepthPlaneVS:()=>rw,_shadersDepthView:()=>Mw,_shadersDepthViewPacked:()=>Xre,_shadersDotMaterial:()=>eF,_shadersEdgeDetection:()=>kw,_shadersEdgeDetectionStageFS:()=>KP,_shadersEdgeVisibilityStageFS:()=>jP,_shadersEdgeVisibilityStageVS:()=>QP,_shadersElevationBandMaterial:()=>tF,_shadersElevationContourMaterial:()=>nF,_shadersElevationRampMaterial:()=>iF,_shadersEllipsoidFS:()=>SR,_shadersEllipsoidSurfaceAppearanceFS:()=>A9,_shadersEllipsoidSurfaceAppearanceVS:()=>E9,_shadersEllipsoidVS:()=>ZR,_shadersFXAA:()=>Ow,_shadersFXAA3_11:()=>jw,_shadersFadeMaterial:()=>oF,_shadersFeatureIdStageFS:()=>kP,_shadersFeatureIdStageVS:()=>UP,_shadersFilmicTonemapping:()=>Uw,_shadersGaussianBlur1D:()=>kx,_shadersGeometryStageFS:()=>$P,_shadersGeometryStageVS:()=>eX,_shadersGlobeFS:()=>LY,_shadersGlobeVS:()=>WY,_shadersGridMaterial:()=>rF,_shadersGroundAtmosphere:()=>gR,_shadersHSBToRGB:()=>xW,_shadersHSLToRGB:()=>TW,_shadersImageBasedLightingStageFS:()=>fP,_shadersInstancingStageCommon:()=>CP,_shadersInstancingStageVS:()=>RP,_shadersIntersectBox:()=>RM,_shadersIntersectCylinder:()=>GM,_shadersIntersectDepth:()=>VM,_shadersIntersectEllipsoid:()=>AM,_shadersIntersectLongitude:()=>IR,_shadersIntersectPlane:()=>CM,_shadersIntersection:()=>TZ,_shadersIntersectionUtils:()=>ZM,_shadersLegacyInstancingStageVS:()=>GP,_shadersLensFlare:()=>Bw,_shadersLightingStageFS:()=>SX,_shadersMaterialStageFS:()=>VX,_shadersMegatexture:()=>FM,_shadersMetadataStageFS:()=>DP,_shadersMetadataStageVS:()=>OP,_shadersModelClippingPlanesStageFS:()=>xP,_shadersModelClippingPolygonsStageFS:()=>SP,_shadersModelClippingPolygonsStageVS:()=>_P,_shadersModelColorStageFS:()=>yP,_shadersModelFS:()=>oN,_shadersModelSilhouetteStageFS:()=>zX,_shadersModelSilhouetteStageVS:()=>HX,_shadersModelSplitterStageFS:()=>JX,_shadersModelVS:()=>iN,_shadersModifiedReinhardTonemapping:()=>zw,_shadersMorphTargetsStageVS:()=>AX,_shadersNightVision:()=>Hw,_shadersNormalMapMaterial:()=>sF,_shadersOctree:()=>vM,_shadersPassThrough:()=>Dd,_shadersPassThroughDepth:()=>Nx,_shadersPbrNeutralTonemapping:()=>Dw,_shadersPerInstanceColorAppearanceFS:()=>_F,_shadersPerInstanceColorAppearanceVS:()=>SF,_shadersPerInstanceFlatColorAppearanceFS:()=>I_,_shadersPerInstanceFlatColorAppearanceVS:()=>ZF,_shadersPointCloudEyeDomeLighting:()=>jI,_shadersPointCloudStylingStageVS:()=>WX,_shadersPointPrimitiveCollectionFS:()=>nx,_shadersPointPrimitiveCollectionVS:()=>IF,_shadersPolygonSignedDistanceFS:()=>CI,_shadersPolylineArrowMaterial:()=>aF,_shadersPolylineColorAppearanceVS:()=>J2,_shadersPolylineCommon:()=>Nl,_shadersPolylineDashMaterial:()=>cF,_shadersPolylineFS:()=>X_,_shadersPolylineGlowMaterial:()=>lF,_shadersPolylineMaterialAppearanceVS:()=>j2,_shadersPolylineOutlineMaterial:()=>dF,_shadersPolylineShadowVolumeFS:()=>B2,_shadersPolylineShadowVolumeMorphFS:()=>z2,_shadersPolylineShadowVolumeMorphVS:()=>H2,_shadersPolylineShadowVolumeVS:()=>K2,_shadersPolylineVS:()=>TN,_shadersPrimitiveGaussianSplatFS:()=>BN,_shadersPrimitiveGaussianSplatVS:()=>ON,_shadersPrimitiveOutlineStageFS:()=>IX,_shadersPrimitiveOutlineStageVS:()=>FX,_shadersRGBToHSB:()=>_W,_shadersRGBToHSL:()=>SW,_shadersRGBToXYZ:()=>ZW,_shadersReinhardTonemapping:()=>Kw,_shadersReprojectWebMercatorFS:()=>bX,_shadersReprojectWebMercatorVS:()=>gX,_shadersRimLightingMaterial:()=>uF,_shadersSelectedFeatureIdStageCommon:()=>IC,_shadersShadowVolumeAppearanceFS:()=>z1,_shadersShadowVolumeAppearanceVS:()=>TF,_shadersShadowVolumeFS:()=>Qy,_shadersSilhouette:()=>Jw,_shadersSkinningStageVS:()=>YX,_shadersSkyAtmosphereCommon:()=>PR,_shadersSkyAtmosphereFS:()=>KM,_shadersSkyAtmosphereVS:()=>JM,_shadersSkyBoxFS:()=>QM,_shadersSkyBoxVS:()=>qM,_shadersSlopeRampMaterial:()=>mF,_shadersStripeMaterial:()=>hF,_shadersSunFS:()=>nk,_shadersSunTextureFS:()=>ik,_shadersSunVS:()=>ok,_shadersTexturedMaterialAppearanceFS:()=>lI,_shadersTexturedMaterialAppearanceVS:()=>dI,_shadersVector3DTileClampedPolylinesFS:()=>LN,_shadersVector3DTileClampedPolylinesVS:()=>EN,_shadersVector3DTilePolylinesVS:()=>GN,_shadersVectorCommon:()=>vY,_shadersVectorTileVS:()=>qC,_shadersVerticalExaggerationStageVS:()=>MX,_shadersViewportQuadFS:()=>_9,_shadersViewportQuadVS:()=>E_,_shadersVoxelFS:()=>_M,_shadersVoxelUtils:()=>TM,_shadersVoxelVS:()=>SM,_shadersWater:()=>pF,_shadersWaterMaskMaterial:()=>fF,_shadersXYZToRGB:()=>VW,_shadersacesTonemapping:()=>CW,_shadersalphaWeight:()=>RW,_shadersantialias:()=>GW,_shadersapplyHSBShift:()=>AW,_shadersapproximateSphericalCoordinates:()=>EW,_shadersapproximateTanh:()=>LW,_shadersbackFacing:()=>WW,_shadersbranchFreeTernary:()=>vW,_shaderscascadeColor:()=>FW,_shaderscascadeDistance:()=>IW,_shaderscascadeMatrix:()=>PW,_shaderscascadeWeights:()=>XW,_shadersclipPolygons:()=>NW,_shaderscolumbusViewMorph:()=>YW,_shaderscomputeAtmosphereColor:()=>wW,_shaderscomputeGroundAtmosphereScattering:()=>MW,_shaderscomputePosition:()=>kW,_shaderscomputeScattering:()=>UW,_shaderscomputeTextureTransform:()=>DW,_shadersconvertLocalToBoxUv:()=>EM,_shadersconvertLocalToCylinderUv:()=>LM,_shadersconvertLocalToEllipsoidUv:()=>WM,_shaderscosineAndSine:()=>OW,_shadersdecodeRGB8:()=>BW,_shadersdecompressTextureCoordinates:()=>zW,_shadersdegreesPerRadian:()=>ZL,_shadersdepthClamp:()=>HW,_shadersdepthRange:()=>VL,_shadersdepthRangeStruct:()=>uW,_shaderseastNorthUpToEyeCoordinates:()=>KW,_shadersellipsoidContainsPoint:()=>JW,_shadersellipsoidTextureCoordinates:()=>jW,_shadersepsilon1:()=>CL,_shadersepsilon2:()=>RL,_shadersepsilon3:()=>GL,_shadersepsilon4:()=>AL,_shadersepsilon5:()=>EL,_shadersepsilon6:()=>LL,_shadersepsilon7:()=>WL,_shadersequalsEpsilon:()=>QW,_shaderseyeOffset:()=>qW,_shaderseyeToWindowCoordinates:()=>$W,_shadersfastApproximateAtan:()=>ev,_shadersfog:()=>tv,_shadersgammaCorrect:()=>nv,_shadersgeodeticSurfaceNormal:()=>iv,_shadersgetDefaultMaterial:()=>ov,_shadersgetDynamicAtmosphereLightDirection:()=>rv,_shadersgetLambertDiffuse:()=>sv,_shadersgetSpecular:()=>av,_shadersgetWaterNoise:()=>cv,_shadershue:()=>lv,_shadersinfinity:()=>vL,_shadersinverseGamma:()=>dv,_shadersisEmpty:()=>uv,_shadersisFull:()=>mv,_shaderslatitudeToWebMercatorFraction:()=>hv,_shaderslineDistance:()=>fv,_shaderslinearToSrgb:()=>pv,_shadersluminance:()=>bv,_shadersmaterial:()=>mW,_shadersmaterialInput:()=>hW,_shadersmaximumComponent:()=>gv,_shadersmetersPerPixel:()=>yv,_shadersmodelMaterial:()=>fW,_shadersmodelToWindowCoordinates:()=>xv,_shadersmodelVertexOutput:()=>pW,_shadersmultiplyWithColorBalance:()=>Tv,_shadersnearFarScalar:()=>_v,_shadersoctDecode:()=>Sv,_shadersoneOverPi:()=>FL,_shadersoneOverTwoPi:()=>IL,_shaderspackDepth:()=>Zv,_shaderspassCesium3DTile:()=>PL,_shaderspassCesium3DTileClassification:()=>XL,_shaderspassCesium3DTileClassificationIgnoreShow:()=>NL,_shaderspassCesium3DTileEdges:()=>YL,_shaderspassCesium3DTileEdgesDirect:()=>wL,_shaderspassCesium3DTilePlanarFillId:()=>ML,_shaderspassClassification:()=>kL,_shaderspassCompute:()=>UL,_shaderspassEnvironment:()=>DL,_shaderspassGaussianSplats:()=>OL,_shaderspassGlobe:()=>BL,_shaderspassOpaque:()=>zL,_shaderspassOverlay:()=>HL,_shaderspassTerrainClassification:()=>KL,_shaderspassTranslucent:()=>JL,_shaderspassVoxels:()=>jL,_shaderspbrLighting:()=>Vv,_shaderspbrNeutralTonemapping:()=>Cv,_shadersphong:()=>Rv,_shaderspi:()=>QL,_shaderspiOverFour:()=>qL,_shaderspiOverSix:()=>$L,_shaderspiOverThree:()=>eW,_shaderspiOverTwo:()=>tW,_shadersplaneDistance:()=>Gv,_shaderspointAlongRay:()=>Av,_shadersradiansPerDegree:()=>nW,_shadersray:()=>bW,_shadersrayEllipsoidIntersectionInterval:()=>Ev,_shadersraySegment:()=>gW,_shadersraySphereIntersectionInterval:()=>Lv,_shadersreadDepth:()=>Wv,_shadersreadNonPerspective:()=>vv,_shadersreverseLogDepth:()=>Fv,_shadersround:()=>Iv,_shaderssaturation:()=>Pv,_shaderssceneMode2D:()=>iW,_shaderssceneMode3D:()=>oW,_shaderssceneModeColumbusView:()=>rW,_shaderssceneModeMorphing:()=>sW,_shadersshadowDepthCompare:()=>Xv,_shadersshadowParameters:()=>yW,_shadersshadowVisibility:()=>Nv,_shaderssignNotZero:()=>Yv,_shaderssolarRadius:()=>aW,_shaderssphericalHarmonics:()=>wv,_shaderssrgbToLinear:()=>Mv,_shaderstangentToEyeSpaceMatrix:()=>kv,_shaderstextureCube:()=>Uv,_shadersthreePiOver2:()=>cW,_shaderstransformPlane:()=>Dv,_shaderstranslateRelativeToEye:()=>Ov,_shaderstranslucentPhong:()=>Bv,_shaderstranspose:()=>zv,_shaderstwoPi:()=>lW,_shadersunpackClippingExtents:()=>Hv,_shadersunpackDepth:()=>Kv,_shadersunpackFloat:()=>Jv,_shadersunpackTexture:()=>jv,_shadersunpackUint:()=>Qv,_shadersvalueTransform:()=>qv,_shadersvertexLogDepth:()=>$v,_shaderswebMercatorMaxLatitude:()=>dW,_shaderswindowToEyeCoordinates:()=>e2,_shaderswriteDepthClamp:()=>t2,_shaderswriteLogDepth:()=>n2,_shaderswriteNonPerspective:()=>i2,addAllToArray:()=>jn,addBuffer:()=>OA,addDefaults:()=>NA,addExtensionsRequired:()=>kA,addExtensionsUsed:()=>pm,addPipelineExtras:()=>fy,addToArray:()=>la,appendForwardSlash:()=>QG,arrayRemoveDuplicates:()=>Wo,assert:()=>X8,barycentricCoordinates:()=>kT,binarySearch:()=>_o,buildModuleUrl:()=>qt,buildVectorGltfFromMVT:()=>U9,buildVoxelCustomShader:()=>FR,buildVoxelDrawCommands:()=>PM,clone:()=>Je,combine:()=>It,computeFlyToLocationForRectangle:()=>QS,createBillboardPointCallback:()=>WS,createColorRamp:()=>T2,createCommand:()=>In,createDefaultImageryProviderViewModels:()=>dU,createDefaultTerrainProviderViewModels:()=>uU,createElevationBandMaterial:()=>vre,createGooglePhotorealistic3DTileset:()=>Fre,createGuid:()=>Qn,createMaterialPropertyDescriptor:()=>tr,createOsmBuildingsAsync:()=>Ire,createPropertyDescriptor:()=>be,createRawPropertyDescriptor:()=>Hl,createTangentSpaceDebugPrimitive:()=>Pre,createTaskProcessorWorker:()=>jre,createUniform:()=>r2,createUniformArray:()=>s2,createVectorTileBuffersFromModelComponents:()=>MN,createWorldBathymetryAsync:()=>_2,createWorldImageryAsync:()=>jb,createWorldTerrainAsync:()=>R_,decodeGoogleEarthEnterpriseData:()=>S2,decodeMVT:()=>O9,decodeVectorPolylinePositions:()=>Z2,defaultPickWorldPosition:()=>qf,defer:()=>hd,defined:()=>l,demodernizeShader:()=>o2,deprecationWarning:()=>Ea,destroyObject:()=>me,exportKml:()=>Goe,findAccessorMinMax:()=>XT,findContentMetadata:()=>YS,findGroupMetadata:()=>wS,findMeshoptExtension:()=>hy,findTileMetadata:()=>QN,forEachTextureInMaterial:()=>wV,formatError:()=>dp,freezeRenderState:()=>O8,getAbsoluteUri:()=>cm,getAccessorByteStride:()=>_d,getBaseUri:()=>qG,getBinaryAccessor:()=>Dm,getClipAndStyleCode:()=>ck,getClippingFunction:()=>qS,getComponentReader:()=>D0,getElement:()=>wn,getExtensionFromUri:()=>L0,getFilenameFromUri:()=>gb,getImageFromTypedArray:()=>V2,getImagePixels:()=>xh,getJsonFromTypedArray:()=>Vr,getMagic:()=>Lh,getMeshPrimitives:()=>HI,getMetadataClassProperty:()=>OM,getMetadataProperty:()=>zM,getStringFromTypedArray:()=>xd,getTimestamp:()=>Tn,hasExtension:()=>Qi,heightReferenceOnEntityPropertyChanged:()=>vb,isBitSet:()=>Kc,isBlobUri:()=>gT,isCrossOriginUrl:()=>$g,isDataUri:()=>Th,isLeapYear:()=>yh,knockout:()=>Ge,knockout_3_5_1:()=>$Z,knockout_es5:()=>eU,loadAndExecuteScript:()=>yT,loadCubeMap:()=>D2,loadImageFromTypedArray:()=>k0,loadKTX2:()=>Td,mergeSort:()=>Pp,moveTechniqueRenderStates:()=>MA,moveTechniquesToExtension:()=>UA,numberOfComponentsForType:()=>su,objectToQuery:()=>xT,oneTimeWarning:()=>gt,parseBatchTable:()=>Ub,parseFeatureMetadataLegacy:()=>PI,parseGlb:()=>PT,parseResponseHeaders:()=>$G,parseStructuralMetadata:()=>II,pickModel:()=>QC,pointInsideTriangle:()=>I7,preprocess3DTileContent:()=>cg,processVoxelProperties:()=>xM,queryToObject:()=>nu,readAccessorPacked:()=>BA,removeExtension:()=>NT,removeExtensionsRequired:()=>YA,removeExtensionsUsed:()=>IT,removePipelineExtras:()=>wA,removeUnusedElements:()=>DA,renderBufferPointCollection:()=>YN,renderBufferPolygonCollection:()=>d2,renderBufferPolylineCollection:()=>f2,resizeImageToNextPowerOfTwo:()=>gy,sampleTerrain:()=>C2,sampleTerrainMostDetailed:()=>G_,scaleToGeodeticSurface:()=>bT,srgbToLinear:()=>A_,subdivideArray:()=>R2,subscribeAndEvaluate:()=>bc,updateAccessorComponentTypes:()=>zA,updateVersion:()=>HA,usesExtension:()=>vr,viewerCesium3DTilesInspectorMixin:()=>yse,viewerCesiumInspectorMixin:()=>xse,viewerDragDropMixin:()=>_se,viewerPerformanceWatchdogMixin:()=>Sse,viewerVoxelInspectorMixin:()=>Vse,webGLConstantToGlslType:()=>N7,wrapFunction:()=>G2,writeTextToCanvas:()=>l_});var Yar=x(T(),1);var iYo=x(T(),1);var XBt=x(T(),1);var pBt=x(T(),1);var p9t=x(T(),1);var a9t=x(T(),1);var e9t=x(T(),1);function $Fe(e){return e!=null}var l=$Fe;var i9t=x(T(),1);function pT(e){this.name="DeveloperError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}l(Object.create)&&(pT.prototype=Object.create(Error.prototype),pT.prototype.constructor=pT);pT.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return l(this.stack)&&(e+=` ${this.stack.toString()}`),e};pT.throwInstantiationError=function(){throw new pT("This function defines an interface and should not be called directly.")};var ge=pT;var sa={};sa.typeOf={};function eIe(e){return`${e} is required, actual value was undefined`}function oV(e,t,n){return`Expected ${n} to be typeof ${t}, actual typeof was ${e}`}sa.defined=function(e,t){if(!l(t))throw new ge(eIe(e))};sa.typeOf.func=function(e,t){if(typeof t!="function")throw new ge(oV(typeof t,"function",e))};sa.typeOf.string=function(e,t){if(typeof t!="string")throw new ge(oV(typeof t,"string",e))};sa.typeOf.number=function(e,t){if(typeof t!="number")throw new ge(oV(typeof t,"number",e))};sa.typeOf.number.lessThan=function(e,t,n){if(sa.typeOf.number(e,t),t>=n)throw new ge(`Expected ${e} to be less than ${n}, actual value was ${t}`)};sa.typeOf.number.lessThanOrEquals=function(e,t,n){if(sa.typeOf.number(e,t),t>n)throw new ge(`Expected ${e} to be less than or equal to ${n}, actual value was ${t}`)};sa.typeOf.number.greaterThan=function(e,t,n){if(sa.typeOf.number(e,t),t<=n)throw new ge(`Expected ${e} to be greater than ${n}, actual value was ${t}`)};sa.typeOf.number.greaterThanOrEquals=function(e,t,n){if(sa.typeOf.number(e,t),t0?1:-1};pt.signNotZero=function(e){return e<0?-1:1};pt.toSNorm=function(e,t){return t=t??255,Math.round((pt.clamp(e,-1,1)*.5+.5)*t)};pt.fromSNorm=function(e,t){return t=t??255,pt.clamp(e,0,t)/t*2-1};pt.normalize=function(e,t,n){return n=Math.max(n-t,0),n===0?0:pt.clamp((e-t)/n,0,1)};pt.sinh=Math.sinh??function(t){return(Math.exp(t)-Math.exp(-t))/2};pt.cosh=Math.cosh??function(t){return(Math.exp(t)+Math.exp(-t))/2};pt.lerp=function(e,t,n){return(1-n)*e+n*t};pt.smoothDamp=function(e,t,n,i=0,o=Number.POSITIVE_INFINITY,r=1e-4,s={}){r=Math.max(1e-4,r);let a=2/r,c=a*i,d=1/(1+c+.48*c*c+.235*c*c*c),u=o*r,m=e-t;m=pt.clamp(m,-u,u);let p=e-m,b=(n+a*m)*i;return n=(n-a*b)*d,s.value=p+(m+b)*d,s.velocity=n,s};pt.PI=Math.PI;pt.ONE_OVER_PI=1/Math.PI;pt.PI_OVER_TWO=Math.PI/2;pt.PI_OVER_THREE=Math.PI/3;pt.PI_OVER_FOUR=Math.PI/4;pt.PI_OVER_SIX=Math.PI/6;pt.THREE_PI_OVER_TWO=3*Math.PI/2;pt.TWO_PI=2*Math.PI;pt.ONE_OVER_TWO_PI=1/(2*Math.PI);pt.RADIANS_PER_DEGREE=Math.PI/180;pt.DEGREES_PER_RADIAN=180/Math.PI;pt.RADIANS_PER_ARCSECOND=pt.RADIANS_PER_DEGREE/3600;pt.toRadians=function(e){return e*pt.RADIANS_PER_DEGREE};pt.toDegrees=function(e){return e*pt.DEGREES_PER_RADIAN};pt.convertLongitudeRange=function(e){let t=pt.TWO_PI,n=e-Math.floor(e/t)*t;return n<-Math.PI?n+t:n>=Math.PI?n-t:n};pt.clampToLatitudeRange=function(e){return pt.clamp(e,-1*pt.PI_OVER_TWO,pt.PI_OVER_TWO)};pt.negativePiToPi=function(e){return e>=-pt.PI&&e<=pt.PI?e:pt.zeroToTwoPi(e+pt.PI)-pt.PI};pt.zeroToTwoPi=function(e){if(e>=0&&e<=pt.TWO_PI)return e;let t=pt.mod(e,pt.TWO_PI);return Math.abs(t)pt.EPSILON14?pt.TWO_PI:t};pt.mod=function(e,t){return pt.sign(e)===pt.sign(t)&&Math.abs(e)n};pt.greaterThanOrEquals=function(e,t,n){return e-t>-n};var JU=[1];pt.factorial=function(e){let t=JU.length;if(e>=t){let n=JU[t-1];for(let i=t;i<=e;i++){let o=n*i;JU.push(o),n=o}}return JU[e]};pt.incrementWrap=function(e,t,n){return n=n??0,++e,e>t&&(e=n),e};pt.isPowerOfTwo=function(e){return e!==0&&(e&e-1)===0};pt.nextPowerOfTwo=function(e){return--e,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e,e};pt.previousPowerOfTwo=function(e){return e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e|=e>>32,e=(e>>>0)-(e>>>1),e};pt.clamp=function(e,t,n){return en?n:e};var Gse=new yK.default;pt.setRandomNumberSeed=function(e){Gse=new yK.default(e)};pt.nextRandomNumber=function(){return Gse.random()};pt.randomBetween=function(e,t){return pt.nextRandomNumber()*(t-e)+e};pt.acosClamped=function(e){return Math.acos(pt.clamp(e,-1,1))};pt.asinClamped=function(e){return Math.asin(pt.clamp(e,-1,1))};pt.chordLength=function(e,t){return 2*t*Math.sin(e*.5)};pt.logBase=function(e,t){return Math.log(e)/Math.log(t)};pt.cbrt=Math.cbrt??function(t){let n=Math.pow(Math.abs(t),.3333333333333333);return t<0?-n:n};pt.log2=Math.log2??function(t){return Math.log(t)*Math.LOG2E};pt.fog=function(e,t){let n=e*t;return 1-Math.exp(-(n*n))};pt.fastApproximateAtan=function(e){return e*(-.1784*Math.abs(e)-.0663*e*e+1.0301)};pt.fastApproximateAtan2=function(e,t){let n,i=Math.abs(e);n=Math.abs(t);let o=Math.max(i,n);n=Math.min(i,n);let r=n/o;return i=pt.fastApproximateAtan(r),i=Math.abs(t)>Math.abs(e)?pt.PI_OVER_TWO-i:i,i=e<0?pt.PI-i:i,i=t<0?-i:i,i};var L=pt;var dr=class e{constructor(t,n,i){this.x=t??0,this.y=n??0,this.z=i??0}static fromSpherical(t,n){l(n)||(n=new e);let i=t.clock,o=t.cone,r=t.magnitude??1,s=r*Math.sin(o);return n.x=s*Math.cos(i),n.y=s*Math.sin(i),n.z=r*Math.cos(o),n}static fromElements(t,n,i,o){return l(o)?(o.x=t,o.y=n,o.z=i,o):new e(t,n,i)}static clone(t,n){if(l(t))return l(n)?(n.x=t.x,n.y=t.y,n.z=t.z,n):new e(t.x,t.y,t.z)}static pack(t,n,i){return i=i??0,n[i++]=t.x,n[i++]=t.y,n[i]=t.z,n}static unpack(t,n,i){return n=n??0,l(i)||(i=new e),i.x=t[n++],i.y=t[n++],i.z=t[n],i}static packArray(t,n){let i=t.length,o=i*3;l(n)?!Array.isArray(n)&&n.length!==o||n.length!==o&&(n.length=o):n=new Array(o);for(let r=0;rL.EPSILON12);return l(o)?(o.x=r*P,o.y=s*N,o.z=a*g,o):new h(r*P,s*N,a*g)}var bT=oIe;var Sl=class Sl{constructor(t,n,i){this.longitude=t??0,this.latitude=n??0,this.height=i??0}static fromRadians(t,n,i,o){return i=i??0,l(o)?(o.longitude=t,o.latitude=n,o.height=i,o):new Sl(t,n,i)}static fromDegrees(t,n,i,o){return t=L.toRadians(t),n=L.toRadians(n),Sl.fromRadians(t,n,i,o)}static fromCartesian(t,n,i){let o=l(n)?n.oneOverRadii:Sl._ellipsoidOneOverRadii,r=l(n)?n.oneOverRadiiSquared:Sl._ellipsoidOneOverRadiiSquared,s=l(n)?n._centerToleranceSquared:Sl._ellipsoidCenterToleranceSquared,a=bT(t,o,r,s,sIe);if(!l(a))return;let c=h.multiplyComponents(a,r,rIe);c=h.normalize(c,c);let d=h.subtract(t,a,aIe),u=Math.atan2(c.y,c.x),m=Math.asin(c.z),p=L.sign(h.dot(d,t))*h.magnitude(d);return l(i)?(i.longitude=u,i.latitude=m,i.height=p,i):new Sl(u,m,p)}static toCartesian(t,n,i){return h.fromRadians(t.longitude,t.latitude,t.height,n,i)}static clone(t,n){if(l(t))return l(n)?(n.longitude=t.longitude,n.latitude=t.latitude,n.height=t.height,n):new Sl(t.longitude,t.latitude,t.height)}static equals(t,n){return t===n||l(t)&&l(n)&&t.longitude===n.longitude&&t.latitude===n.latitude&&t.height===n.height}static equalsEpsilon(t,n,i){return i=i??0,t===n||l(t)&&l(n)&&Math.abs(t.longitude-n.longitude)<=i&&Math.abs(t.latitude-n.latitude)<=i&&Math.abs(t.height-n.height)<=i}clone(t){return Sl.clone(this,t)}equals(t){return Sl.equals(this,t)}equalsEpsilon(t,n){return Sl.equalsEpsilon(this,t,n)}toString(){return`(${this.longitude}, ${this.latitude}, ${this.height})`}};ct(Sl,"_ellipsoidOneOverRadii",new h(1/6378137,1/6378137,1/6356752314245179e-9)),ct(Sl,"_ellipsoidOneOverRadiiSquared",new h(1/(6378137*6378137),1/(6378137*6378137),1/(6356752314245179e-9*6356752314245179e-9))),ct(Sl,"_ellipsoidCenterToleranceSquared",L.EPSILON1);var KG=Sl;KG.ZERO=Object.freeze(new KG(0,0,0));var rIe=new h,sIe=new h,aIe=new h,fe=KG;var w9t=x(T(),1);var W9t=x(T(),1);var is=class e{constructor(t,n){this.x=t??0,this.y=n??0}static fromElements(t,n,i){return l(i)?(i.x=t,i.y=n,i):new e(t,n)}static clone(t,n){if(l(t))return l(n)?(n.x=t.x,n.y=t.y,n):new e(t.x,t.y)}static pack(t,n,i){return i=i??0,n[i++]=t.x,n[i]=t.y,n}static unpack(t,n,i){return n=n??0,l(i)||(i=new e),i.x=t[n++],i.y=t[n],i}static packArray(t,n){let i=t.length,o=i*2;l(n)?!Array.isArray(n)&&n.length!==o||n.length!==o&&(n.length=o):n=new Array(o);for(let r=0;r=this._radii.z-n))return i}getLocalCurvature(t,n){l(n)||(n=new M);let i=this.getSurfaceNormalIntersectionWithZAxis(t,0,fIe),o=h.distance(t,i),r=this.minimumRadius*o/this.maximumRadius**2,s=o*r**2;return M.fromElements(1/o,1/s,n)}surfaceArea(t){let n=t.west,i=t.east,o=t.south,r=t.north;for(;id;)CIe(c,$U),e.transpose($U,Xse),e.multiply(c,$U,c),e.multiply(Xse,c,c),e.multiply(a,$U,a),++r>2&&(++s,r=0);return n}static abs(t,n){return n[0]=Math.abs(t[0]),n[1]=Math.abs(t[1]),n[2]=Math.abs(t[2]),n[3]=Math.abs(t[3]),n[4]=Math.abs(t[4]),n[5]=Math.abs(t[5]),n[6]=Math.abs(t[6]),n[7]=Math.abs(t[7]),n[8]=Math.abs(t[8]),n}static determinant(t){let n=t[0],i=t[3],o=t[6],r=t[1],s=t[4],a=t[7],c=t[2],d=t[5],u=t[8];return n*(s*u-d*a)+r*(d*o-i*u)+c*(i*a-s*o)}static inverse(t,n){let i=t[0],o=t[1],r=t[2],s=t[3],a=t[4],c=t[5],d=t[6],u=t[7],m=t[8],p=e.determinant(t);n[0]=a*m-u*c,n[1]=u*r-o*m,n[2]=o*c-a*r,n[3]=d*c-s*m,n[4]=i*m-d*r,n[5]=s*r-i*c,n[6]=s*u-d*a,n[7]=d*o-i*u,n[8]=i*a-s*o;let b=1/p;return e.multiplyByScalar(n,b,n)}static inverseTranspose(t,n){return e.inverse(e.transpose(t,SIe),n)}static equals(t,n){return t===n||l(t)&&l(n)&&t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]&&t[4]===n[4]&&t[5]===n[5]&&t[6]===n[6]&&t[7]===n[7]&&t[8]===n[8]}static equalsEpsilon(t,n,i){return i=i??0,t===n||l(t)&&l(n)&&Math.abs(t[0]-n[0])<=i&&Math.abs(t[1]-n[1])<=i&&Math.abs(t[2]-n[2])<=i&&Math.abs(t[3]-n[3])<=i&&Math.abs(t[4]-n[4])<=i&&Math.abs(t[5]-n[5])<=i&&Math.abs(t[6]-n[6])<=i&&Math.abs(t[7]-n[7])<=i&&Math.abs(t[8]-n[8])<=i}get length(){return e.packedLength}clone(t){return e.clone(this,t)}equals(t){return e.equals(this,t)}static equalsArray(t,n,i){return t[0]===n[i]&&t[1]===n[i+1]&&t[2]===n[i+2]&&t[3]===n[i+3]&&t[4]===n[i+4]&&t[5]===n[i+5]&&t[6]===n[i+6]&&t[7]===n[i+7]&&t[8]===n[i+8]}equalsEpsilon(t,n){return e.equalsEpsilon(this,t,n)}toString(){return`(${this[0]}, ${this[3]}, ${this[6]}) (${this[1]}, ${this[4]}, ${this[7]}) (${this[2]}, ${this[5]}, ${this[8]})`}};bo.packedLength=9;bo.fromArray=bo.unpack;bo.IDENTITY=Object.freeze(new bo(1,0,0,0,1,0,0,0,1));bo.ZERO=Object.freeze(new bo(0,0,0,0,0,0,0,0,0));bo.COLUMN0ROW0=0;bo.COLUMN0ROW1=1;bo.COLUMN0ROW2=2;bo.COLUMN1ROW0=3;bo.COLUMN1ROW1=4;bo.COLUMN1ROW2=5;bo.COLUMN2ROW0=6;bo.COLUMN2ROW1=7;bo.COLUMN2ROW2=8;var yIe=new h,xIe=new h,_K=new h,Pse=new h,TIe=new h,_Ie=new h,$U=new bo,Xse=new bo,SIe=new bo;function ZIe(e){let t=0;for(let n=0;n<9;++n){let i=e[n];t+=i*i}return Math.sqrt(t)}var SK=[1,0,0],ZK=[2,2,1];function VIe(e){let t=0;for(let n=0;n<3;++n){let i=e[bo.getElementIndex(ZK[n],SK[n])];t+=2*i*i}return Math.sqrt(t)}function CIe(e,t){let n=L.EPSILON15,i=0,o=1;for(let d=0;d<3;++d){let u=Math.abs(e[bo.getElementIndex(ZK[d],SK[d])]);u>i&&(o=d,i=u)}let r=1,s=0,a=SK[o],c=ZK[o];if(Math.abs(e[bo.getElementIndex(c,a)])>n){let d=e[bo.getElementIndex(c,c)],u=e[bo.getElementIndex(a,a)],m=e[bo.getElementIndex(c,a)],p=(d-u)/2/m,b;p<0?b=-1/(-p+Math.sqrt(1+p*p)):b=1/(p+Math.sqrt(1+p*p)),r=1/Math.sqrt(1+b*b),s=b*r}return t=bo.clone(bo.IDENTITY,t),t[bo.getElementIndex(a,a)]=t[bo.getElementIndex(c,c)]=r,t[bo.getElementIndex(c,a)]=s,t[bo.getElementIndex(a,c)]=-s,t}var q=bo;var yUt=x(T(),1);var oUt=x(T(),1);var Ms=class e{constructor(t,n,i,o){this.x=t??0,this.y=n??0,this.z=i??0,this.w=o??0}static fromElements(t,n,i,o,r){return l(r)?(r.x=t,r.y=n,r.z=i,r.w=o,r):new e(t,n,i,o)}static fromColor(t,n){return l(n)?(n.x=t.red,n.y=t.green,n.z=t.blue,n.w=t.alpha,n):new e(t.red,t.green,t.blue,t.alpha)}static clone(t,n){if(l(t))return l(n)?(n.x=t.x,n.y=t.y,n.z=t.z,n.w=t.w,n):new e(t.x,t.y,t.z,t.w)}static pack(t,n,i){return i=i??0,n[i++]=t.x,n[i++]=t.y,n[i++]=t.z,n[i]=t.w,n}static unpack(t,n,i){return n=n??0,l(i)||(i=new e),i.x=t[n++],i.y=t[n++],i.z=t[n++],i.w=t[n],i}static packArray(t,n){let i=t.length,o=i*4;l(n)?!Array.isArray(n)&&n.length!==o||n.length!==o&&(n.length=o):n=new Array(o);for(let r=0;r0){o=r-1;continue}return r}return~(o+1)}var _o=YIe;var SUt=x(T(),1);function wIe(e,t,n,i,o){this.xPoleWander=e,this.yPoleWander=t,this.xPoleOffset=n,this.yPoleOffset=i,this.ut1MinusUtc=o}var Qg=wIe;var OUt=x(T(),1);var EUt=x(T(),1);var VUt=x(T(),1);function MIe(e){return e%4===0&&e%100!==0||e%400===0}var yh=MIe;var Mse=[31,28,31,30,31,30,31,31,30,31,30,31];function kIe(e,t,n,i,o,r,s,a){e=e??1,t=t??1,n=n??1,i=i??0,o=o??0,r=r??0,s=s??0,a=a??!1,this.year=e,this.month=t,this.day=n,this.hour=i,this.minute=o,this.second=r,this.millisecond=s,this.isLeapSecond=a;function y(){Do.typeOf.number.greaterThanOrEquals("Year",e,1),Do.typeOf.number.lessThanOrEquals("Year",e,9999),Do.typeOf.number.greaterThanOrEquals("Month",t,1),Do.typeOf.number.lessThanOrEquals("Month",t,12),Do.typeOf.number.greaterThanOrEquals("Day",n,1),Do.typeOf.number.lessThanOrEquals("Day",n,31),Do.typeOf.number.greaterThanOrEquals("Hour",i,0),Do.typeOf.number.lessThanOrEquals("Hour",i,23),Do.typeOf.number.greaterThanOrEquals("Minute",o,0),Do.typeOf.number.lessThanOrEquals("Minute",o,59),Do.typeOf.bool("IsLeapSecond",a),Do.typeOf.number.greaterThanOrEquals("Second",r,0),Do.typeOf.number.lessThanOrEquals("Second",r,a?60:59),Do.typeOf.number.greaterThanOrEquals("Millisecond",s,0),Do.typeOf.number.lessThan("Millisecond",s,1e3)}function _(){let S=t===2&&yh(e)?Mse[t-1]+1:Mse[t-1];if(n>S)throw new ge("Month and Day represents invalid date")}}var E0=kIe;var WUt=x(T(),1);function UIe(e,t){this.julianDate=e,this.offset=t}var mo=UIe;var FUt=x(T(),1),kse={SECONDS_PER_MILLISECOND:.001,SECONDS_PER_MINUTE:60,MINUTES_PER_HOUR:60,HOURS_PER_DAY:24,SECONDS_PER_HOUR:3600,MINUTES_PER_DAY:1440,SECONDS_PER_DAY:86400,DAYS_PER_JULIAN_CENTURY:36525,PICOSECOND:1e-9,MODIFIED_JULIAN_DATE_DIFFERENCE:24000005e-1};Object.freeze(kse);var kn=kse;var PUt=x(T(),1),Use={UTC:0,TAI:1};Object.freeze(Use);var si=Use;var Dse=new E0,GK=[31,28,31,30,31,30,31,31,30,31,30,31],AK=29;function LK(e,t){return xi.compare(e.julianDate,t.julianDate)}var cV=new mo;function t5(e){cV.julianDate=e;let t=xi.leapSeconds,n=_o(t,cV,LK);n<0&&(n=~n),n>=t.length&&(n=t.length-1);let i=t[n].offset;n>0&&xi.secondsDifference(t[n].julianDate,e)>i&&(n--,i=t[n].offset),xi.addSeconds(e,i,e)}function Ose(e,t){cV.julianDate=e;let n=xi.leapSeconds,i=_o(n,cV,LK);if(i<0&&(i=~i),i===0)return xi.addSeconds(e,-n[0].offset,t);if(i>=n.length)return xi.addSeconds(e,-n[i-1].offset,t);let o=xi.secondsDifference(n[i].julianDate,e);if(o===0)return xi.addSeconds(e,-n[i].offset,t);if(!(o<=1))return xi.addSeconds(e,-n[i-1].offset,t)}function qg(e,t,n){let i=t/kn.SECONDS_PER_DAY|0;return e+=i,t-=kn.SECONDS_PER_DAY*i,t<0&&(e--,t+=kn.SECONDS_PER_DAY),n.dayNumber=e,n.secondsOfDay=t,n}function EK(e,t,n,i,o,r,s){let a=(t-14)/12|0,c=e+4800+a,d=(1461*c/4|0)+(367*(t-2-12*a)/12|0)-(3*((c+100)/100|0)/4|0)+n-32075;i=i-12,i<0&&(i+=24);let u=r+(i*kn.SECONDS_PER_HOUR+o*kn.SECONDS_PER_MINUTE+s*kn.SECONDS_PER_MILLISECOND);return u>=43200&&(d-=1),[d,u]}var DIe=/^(\d{4})$/,OIe=/^(\d{4})-(\d{2})$/,BIe=/^(\d{4})-?(\d{3})$/,zIe=/^(\d{4})-?W(\d{2})-?(\d{1})?$/,HIe=/^(\d{4})-?(\d{2})-?(\d{2})$/,WK=/([Z+\-])?(\d{2})?:?(\d{2})?$/,KIe=/^(\d{2})(\.\d+)?/.source+WK.source,JIe=/^(\d{2}):?(\d{2})(\.\d+)?/.source+WK.source,jIe=/^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source+WK.source;var xi=class e{constructor(t,n,i){this.dayNumber=void 0,this.secondsOfDay=void 0,t=t??0,n=n??0,i=i??si.UTC;let o=t|0;n=n+(t-o)*kn.SECONDS_PER_DAY,qg(o,n,this),i===si.UTC&&t5(this)}static fromGregorianDate(t,n){let i=EK(t.year,t.month,t.day,t.hour,t.minute,t.second,t.millisecond);return l(n)?(qg(i[0],i[1],n),t5(n),n):new e(i[0],i[1],si.UTC)}static fromDate(t,n){let i=EK(t.getUTCFullYear(),t.getUTCMonth()+1,t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),t.getUTCMilliseconds());return l(n)?(qg(i[0],i[1],n),t5(n),n):new e(i[0],i[1],si.UTC)}static fromIso8601(t,n){t=t.replace(",",".");let i=t.split("T"),o,r=1,s=1,a=0,c=0,d=0,u=0,m=i[0],p=i[1],b,f;if(i=m.match(HIe),i!==null)o=+i[1],r=+i[2],s=+i[3];else if(i=m.match(OIe),i!==null)o=+i[1],r=+i[2];else if(i=m.match(DIe),i!==null)o=+i[1];else{let Z;if(i=m.match(BIe),i!==null)o=+i[1],Z=+i[2],f=yh(o);else if(i=m.match(zIe),i!==null){o=+i[1];let V=+i[2],C=+i[3]||0,G=new Date(Date.UTC(o,0,4));Z=V*7+C-G.getUTCDay()-3}b=new Date(Date.UTC(o,0,1)),b.setUTCDate(Z),r=b.getUTCMonth()+1,s=b.getUTCDate()}f=yh(o);let y;if(l(p)){i=p.match(jIe),i!==null?(a=+i[1],c=+i[2],d=+i[3],u=+(i[4]||0)*1e3,y=5):(i=p.match(JIe),i!==null?(a=+i[1],c=+i[2],d=+(i[3]||0)*60,y=4):(i=p.match(KIe),i!==null&&(a=+i[1],c=+(i[2]||0)*60,y=3)));let Z=i[y],V=+i[y+1],C=+(i[y+2]||0);switch(Z){case"+":a=a-V,c=c-C;break;case"-":a=a+V,c=c+C;break;case"Z":break;default:c=c+new Date(Date.UTC(o,r-1,s,a,c)).getTimezoneOffset();break}}let _=d===60;for(_&&d--;c>=60;)c-=60,a++;for(;a>=24;)a-=24,s++;for(b=f&&r===2?AK:GK[r-1];s>b;)s-=b,r++,r>12&&(r-=12,o++),b=f&&r===2?AK:GK[r-1];for(;c<0;)c+=60,a--;for(;a<0;)a+=24,s--;for(;s<1;)r--,r<1&&(r+=12,o--),b=f&&r===2?AK:GK[r-1],s+=b;let S=EK(o,r,s,a,c,d,u);return l(n)?(qg(S[0],S[1],n),t5(n)):n=new e(S[0],S[1],si.UTC),_&&e.addSeconds(n,1,n),n}static now(t){return e.fromDate(new Date,t)}static toGregorianDate(t,n){let i=!1,o=Ose(t,n5);l(o)||(e.addSeconds(t,-1,n5),o=Ose(n5,n5),i=!0);let r=o.dayNumber,s=o.secondsOfDay;s>=43200&&(r+=1);let a=r+68569|0,c=4*a/146097|0;a=a-((146097*c+3)/4|0)|0;let d=4e3*(a+1)/1461001|0;a=a-(1461*d/4|0)+31|0;let u=80*a/2447|0,m=a-(2447*u/80|0)|0;a=u/11|0;let p=u+2-12*a|0,b=100*(c-49)+d+a|0,f=s/kn.SECONDS_PER_HOUR|0,y=s-f*kn.SECONDS_PER_HOUR,_=y/kn.SECONDS_PER_MINUTE|0;y=y-_*kn.SECONDS_PER_MINUTE;let S=y|0,Z=(y-S)/kn.SECONDS_PER_MILLISECOND;return f+=12,f>23&&(f-=24),i&&(S+=1),l(n)?(n.year=b,n.month=p,n.day=m,n.hour=f,n.minute=_,n.second=S,n.millisecond=Z,n.isLeapSecond=i,n):new E0(b,p,m,f,_,S,Z,i)}static toDate(t){let n=e.toGregorianDate(t,Dse),i=n.second;return n.isLeapSecond&&(i-=1),new Date(Date.UTC(n.year,n.month-1,n.day,n.hour,n.minute,i,n.millisecond))}static toIso8601(t,n){let i=e.toGregorianDate(t,Dse),o=i.year,r=i.month,s=i.day,a=i.hour,c=i.minute,d=i.second,u=i.millisecond;o===1e4&&r===1&&s===1&&a===0&&c===0&&d===0&&u===0&&(o=9999,r=12,s=31,a=24);let m;if(!l(n)&&u!==0){let p=u*.01;return m=p<1e-6?p.toFixed(20).replace(".","").replace(/0+$/,""):p.toString().replace(".",""),`${o.toString().padStart(4,"0")}-${r.toString().padStart(2,"0")}-${s.toString().padStart(2,"0")}T${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}:${d.toString().padStart(2,"0")}.${m}Z`}return!l(n)||n===0?`${o.toString().padStart(4,"0")}-${r.toString().padStart(2,"0")}-${s.toString().padStart(2,"0")}T${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}:${d.toString().padStart(2,"0")}Z`:(m=(u*.01).toFixed(n).replace(".","").slice(0,n),`${o.toString().padStart(4,"0")}-${r.toString().padStart(2,"0")}-${s.toString().padStart(2,"0")}T${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}:${d.toString().padStart(2,"0")}.${m}Z`)}static clone(t,n){if(l(t))return l(n)?(n.dayNumber=t.dayNumber,n.secondsOfDay=t.secondsOfDay,n):new e(t.dayNumber,t.secondsOfDay,si.TAI)}static compare(t,n){let i=t.dayNumber-n.dayNumber;return i!==0?i:t.secondsOfDay-n.secondsOfDay}static equals(t,n){return t===n||l(t)&&l(n)&&t.dayNumber===n.dayNumber&&t.secondsOfDay===n.secondsOfDay}static equalsEpsilon(t,n,i){return i=i??0,t===n||l(t)&&l(n)&&Math.abs(e.secondsDifference(t,n))<=i}static totalDays(t){return t.dayNumber+t.secondsOfDay/kn.SECONDS_PER_DAY}static secondsDifference(t,n){return(t.dayNumber-n.dayNumber)*kn.SECONDS_PER_DAY+(t.secondsOfDay-n.secondsOfDay)}static daysDifference(t,n){let i=t.dayNumber-n.dayNumber,o=(t.secondsOfDay-n.secondsOfDay)/kn.SECONDS_PER_DAY;return i+o}static computeTaiMinusUtc(t){cV.julianDate=t;let n=e.leapSeconds,i=_o(n,cV,LK);return i<0&&(i=~i,--i,i<0&&(i=0)),n[i].offset}static addSeconds(t,n,i){return qg(t.dayNumber,t.secondsOfDay+n,i)}static addMinutes(t,n,i){let o=t.secondsOfDay+n*kn.SECONDS_PER_MINUTE;return qg(t.dayNumber,o,i)}static addHours(t,n,i){let o=t.secondsOfDay+n*kn.SECONDS_PER_HOUR;return qg(t.dayNumber,o,i)}static addDays(t,n,i){let o=t.dayNumber+n;return qg(o,t.secondsOfDay,i)}static lessThan(t,n){return e.compare(t,n)<0}static lessThanOrEquals(t,n){return e.compare(t,n)<=0}static greaterThan(t,n){return e.compare(t,n)>0}static greaterThanOrEquals(t,n){return e.compare(t,n)>=0}clone(t){return e.clone(this,t)}equals(t){return e.equals(this,t)}equalsEpsilon(t,n){return e.equalsEpsilon(this,t,n)}toString(){return e.toIso8601(this)}},n5=new xi(0,0,si.TAI);xi.leapSeconds=[new mo(new xi(2441317,43210,si.TAI),10),new mo(new xi(2441499,43211,si.TAI),11),new mo(new xi(2441683,43212,si.TAI),12),new mo(new xi(2442048,43213,si.TAI),13),new mo(new xi(2442413,43214,si.TAI),14),new mo(new xi(2442778,43215,si.TAI),15),new mo(new xi(2443144,43216,si.TAI),16),new mo(new xi(2443509,43217,si.TAI),17),new mo(new xi(2443874,43218,si.TAI),18),new mo(new xi(2444239,43219,si.TAI),19),new mo(new xi(2444786,43220,si.TAI),20),new mo(new xi(2445151,43221,si.TAI),21),new mo(new xi(2445516,43222,si.TAI),22),new mo(new xi(2446247,43223,si.TAI),23),new mo(new xi(2447161,43224,si.TAI),24),new mo(new xi(2447892,43225,si.TAI),25),new mo(new xi(2448257,43226,si.TAI),26),new mo(new xi(2448804,43227,si.TAI),27),new mo(new xi(2449169,43228,si.TAI),28),new mo(new xi(2449534,43229,si.TAI),29),new mo(new xi(2450083,43230,si.TAI),30),new mo(new xi(2450630,43231,si.TAI),31),new mo(new xi(2451179,43232,si.TAI),32),new mo(new xi(2453736,43233,si.TAI),33),new mo(new xi(2454832,43234,si.TAI),34),new mo(new xi(2456109,43235,si.TAI),35),new mo(new xi(2457204,43236,si.TAI),36),new mo(new xi(2457754,43237,si.TAI),37)];var Q=xi;var IDt=x(T(),1),uae=x(tu(),1);var jUt=x(T(),1);function QIe(e){return(e.length===0||e[e.length-1]!=="/")&&(e=`${e}/`),e}var QG=QIe;var qUt=x(T(),1);function Qse(e,t){if(e===null||typeof e!="object")return e;t=t??!1;let n=new e.constructor;for(let i in e)if(e.hasOwnProperty(i)){let o=e[i];t&&(o=Qse(o,t)),n[i]=o}return n}var Je=Qse;var t5t=x(T(),1);function qse(e,t,n){n=n??!1;let i={},o=l(e),r=l(t),s,a,c;if(o)for(s in e)e.hasOwnProperty(s)&&(a=e[s],r&&n&&typeof a=="object"&&t.hasOwnProperty(s)?(c=t[s],typeof c=="object"?i[s]=qse(a,c,n):i[s]=a):i[s]=a);if(r)for(s in t)t.hasOwnProperty(s)&&!i.hasOwnProperty(s)&&(c=t[s],i[s]=c);return i}var It=qse;var i5t=x(T(),1);function qIe(){let e,t,n=new Promise(function(i,o){e=i,t=o});return{resolve:e,reject:t,promise:n}}var hd=qIe;var s5t=x(T(),1),$se=x(tu(),1);function vK(e,t){let n;return typeof document<"u"&&(n=document),vK._implementation(e,t,n)}vK._implementation=function(e,t,n){if(!l(t)){if(typeof n>"u")return e;t=n.baseURI??n.location.href}let i=new $se.default(e);return i.scheme()!==""?i.toString():i.absoluteTo(t).toString()};var cm=vK;var c5t=x(T(),1),eae=x(tu(),1);function $Ie(e,t){let n="",i=e.lastIndexOf("/");return i!==-1&&(n=e.substring(0,i+1)),t&&(e=new eae.default(e),e.query().length!==0&&(n+=`?${e.query()}`),e.fragment().length!==0&&(n+=`#${e.fragment()}`)),n}var qG=$Ie;var d5t=x(T(),1),tae=x(tu(),1);function ePe(e){let t=new tae.default(e);t.normalize();let n=t.path(),i=n.lastIndexOf("/");return i!==-1&&(n=n.substr(i+1)),i=n.lastIndexOf("."),i===-1?n="":n=n.substr(i+1),n}var L0=ePe;var h5t=x(T(),1);var nae={};function tPe(e,t,n){l(t)||(t=e.width),l(n)||(n=e.height);let i=nae[t];l(i)||(i={},nae[t]=i);let o=i[n];if(!l(o)){let r=document.createElement("canvas");r.width=t,r.height=n,o=r.getContext("2d",{willReadFrequently:!0}),o.globalCompositeOperation="copy",i[n]=o}return o.drawImage(e,0,0,t,n),o.getImageData(0,0,t,n).data}var xh=tPe;var p5t=x(T(),1);var nPe=/^blob:/i;function iPe(e){return nPe.test(e)}var gT=iPe;var y5t=x(T(),1);var ip;function oPe(e){l(ip)||(ip=document.createElement("a")),ip.href=window.location.href;let t=ip.host,n=ip.protocol;return ip.href=e,ip.href=ip.href,n!==ip.protocol||t!==ip.host}var $g=oPe;var T5t=x(T(),1);var rPe=/^data:/i;function sPe(e){return rPe.test(e)}var Th=sPe;var S5t=x(T(),1);function aPe(e){let t=document.createElement("script");return t.async=!0,t.src=e,new Promise((n,i)=>{window.crossOriginIsolated&&t.setAttribute("crossorigin","anonymous");let o=document.getElementsByTagName("head")[0];t.onload=function(){t.onload=void 0,o.removeChild(t),n()},t.onerror=function(r){i(r)},o.appendChild(t)})}var yT=aPe;var V5t=x(T(),1);function cPe(e){let t="";for(let n in e)if(e.hasOwnProperty(n)){let i=e[n],o=`${encodeURIComponent(n)}=`;if(Array.isArray(i))for(let r=0,s=i.length;r0){let s=o.substring(0,r),a=o.substring(r+2);t[s]=a}}return t}var $G=dPe;function rae(e,t,n){this.statusCode=e,this.response=t,this.responseHeaders=n,typeof this.responseHeaders=="string"&&(this.responseHeaders=$G(this.responseHeaders))}rae.prototype.toString=function(){let e="Request has failed.";return l(this.statusCode)&&(e+=` Status Code: ${this.statusCode}`),e};var op=rae;var rDt=x(T(),1),a5=x(tu(),1);var z5t=x(T(),1);function eA(){this._listeners=new Map,this._toRemove=new Map,this._toAdd=new Map,this._invokingListeners=!1,this._listenerCount=0}Object.defineProperties(eA.prototype,{numberOfListeners:{get:function(){return this._listenerCount}}});eA.prototype.addEventListener=function(e,t){let n=this,i=n._invokingListeners?n._toAdd:n._listeners;return IK(this,i,e,t)&&n._listenerCount++,function(){n.removeEventListener(e,t)}};function IK(e,t,n,i){t.has(n)||t.set(n,new Set);let o=t.get(n);return o.has(i)?!1:(o.add(i),!0)}eA.prototype.removeEventListener=function(e,t){let n=FK(this,this._listeners,e,t),i=FK(this,this._toAdd,e,t),o=n||i;return o&&this._listenerCount--,o};function FK(e,t,n,i){let o=t.get(n);if(!o||!o.has(i))return!1;if(e._invokingListeners){if(!IK(e,e._toRemove,n,i))return!1}else o.delete(i),o.size===0&&t.delete(n);return!0}eA.prototype.raiseEvent=function(){this._invokingListeners=!0;for(let[e,t]of this._listeners.entries())if(l(e))for(let n of t)e.apply(n,arguments);this._invokingListeners=!1;for(let[e,t]of this._toAdd.entries())for(let n of t)IK(this,this._listeners,e,n);this._toAdd.clear();for(let[e,t]of this._toRemove.entries())for(let n of t)FK(this,this._listeners,e,n);this._toRemove.clear()};var Se=eA;var J5t=x(T(),1);function TT(e){this._comparator=e.comparator,this._array=[],this._length=0,this._maximumLength=void 0}Object.defineProperties(TT.prototype,{length:{get:function(){return this._length}},internalArray:{get:function(){return this._array}},maximumLength:{get:function(){return this._maximumLength},set:function(e){let t=this._length;if(e=0;--t)this.heapify(t)};TT.prototype.insert=function(e){let t=this._array,n=this._comparator,i=this._maximumLength,o=this._length++;for(oi&&(r=t[i],this._length=i),r};TT.prototype.pop=function(e){if(e=e??0,this._length===0)return;let t=this._array,n=t[e];return PK(t,e,--this._length),this.heapify(e),t[this._length]=void 0,n};var tA=TT;function uPe(e,t){return e.priority-t.priority}var So={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},uV=20,wc=new tA({comparator:uPe});wc.maximumLength=uV;wc.reserve(uV);var rp=[],W0={},mPe=typeof document<"u"?new a5.default(document.location.href):new a5.default,c5=new Se;function Sr(){}Sr.maximumRequests=50;Sr.maximumRequestsPerServer=18;Sr.requestsByServer={};Sr.throttleRequests=!0;Sr.debugShowStatistics=!1;Sr.requestCompletedEvent=c5;Object.defineProperties(Sr,{statistics:{get:function(){return So}},priorityHeapLength:{get:function(){return uV},set:function(e){if(ee;){let t=wc.pop();_T(t)}uV=e,wc.maximumLength=e,wc.reserve(e)}}});function sae(e){l(e.priorityFunction)&&(e.priority=e.priorityFunction())}Sr.serverHasOpenSlots=function(e,t){t=t??1;let n=Sr.requestsByServer[e]??Sr.maximumRequestsPerServer;return W0[e]+t<=n};Sr.heapHasOpenSlots=function(e){return wc.length+e<=uV};function aae(e){return e.state===Ti.UNISSUED&&(e.state=Ti.ISSUED,e.deferred=hd()),e.deferred.promise}function hPe(e){return function(t){if(e.state===Ti.CANCELLED)return;let n=e.deferred;--So.numberOfActiveRequests,--W0[e.serverKey],c5.raiseEvent(),e.state=Ti.RECEIVED,e.deferred=void 0,n.resolve(t)}}function fPe(e){return function(t){e.state!==Ti.CANCELLED&&(++So.numberOfFailedRequests,--So.numberOfActiveRequests,--W0[e.serverKey],c5.raiseEvent(t),e.state=Ti.FAILED,e.deferred.reject(t))}}function cae(e){let t=aae(e);return e.state=Ti.ACTIVE,rp.push(e),++So.numberOfActiveRequests,++So.numberOfActiveRequestsEver,++W0[e.serverKey],e.requestFunction().then(hPe(e)).catch(fPe(e)),t}function _T(e){let t=e.state===Ti.ACTIVE;if(e.state=Ti.CANCELLED,++So.numberOfCancelledRequests,l(e.deferred)){let n=e.deferred;n.promise.catch(()=>{}),e.deferred=void 0,n.reject(new ae(`Request cancelled: "${e.url}"`))}t&&(--So.numberOfActiveRequests,--W0[e.serverKey],++So.numberOfCancelledActiveRequests),l(e.cancelFunction)&&e.cancelFunction()}Sr.update=function(){let e,t,n=0,i=rp.length;for(e=0;e0&&(rp[e-n]=t)}rp.length-=n;let o=wc.internalArray,r=wc.length;for(e=0;e0;){if(t=wc.pop(),t.cancelled){_T(t);continue}if(t.throttleByServer&&!Sr.serverHasOpenSlots(t.serverKey)){_T(t);continue}cae(t),++a}pPe()};Sr.getServerKey=function(e){let t=new a5.default(e);t.scheme()===""&&(t=t.absoluteTo(mPe),t.normalize());let n=t.authority();/:/.test(n)||(n=`${n}:${t.scheme()==="https"?"443":"80"}`);let i=W0[n];return l(i)||(W0[n]=0),n};Sr.request=function(e){if(Th(e.url)||gT(e.url))return c5.raiseEvent(),e.state=Ti.RECEIVED,e.requestFunction();if(++So.numberOfAttemptedRequests,l(e.serverKey)||(e.serverKey=Sr.getServerKey(e.url)),Sr.throttleRequests&&e.throttleByServer&&!Sr.serverHasOpenSlots(e.serverKey))return;if(!Sr.throttleRequests||!e.throttle)return cae(e);if(rp.length>=Sr.maximumRequests)return;sae(e);let t=wc.insert(e);if(l(t)){if(t===e)return;_T(t)}return aae(e)};function pPe(){Sr.debugShowStatistics&&(So.numberOfActiveRequests===0&&So.lastNumberOfActiveRequests>0&&(So.numberOfAttemptedRequests>0&&(console.log(`Number of attempted requests: ${So.numberOfAttemptedRequests}`),So.numberOfAttemptedRequests=0),So.numberOfCancelledRequests>0&&(console.log(`Number of cancelled requests: ${So.numberOfCancelledRequests}`),So.numberOfCancelledRequests=0),So.numberOfCancelledActiveRequests>0&&(console.log(`Number of cancelled active requests: ${So.numberOfCancelledActiveRequests}`),So.numberOfCancelledActiveRequests=0),So.numberOfFailedRequests>0&&(console.log(`Number of failed requests: ${So.numberOfFailedRequests}`),So.numberOfFailedRequests=0)),So.lastNumberOfActiveRequests=So.numberOfActiveRequests)}Sr.clearForSpecs=function(){for(;wc.length>0;){let t=wc.pop();_T(t)}let e=rp.length;for(let t=0;t0}},credits:{get:function(){return this._credits}}});Ut.prototype.toString=function(){return this.getUrlComponent(!0,!0)};Ut.prototype.parseUrl=function(e,t,n,i){let o=new uae.default(e),r=gPe(o.query());this._queryParameters=t?d5(r,this.queryParameters,n):r,o.search(""),o.fragment(""),l(i)&&o.scheme()===""&&(o=o.absoluteTo(cm(i))),this._url=o.toString()};function gPe(e){return e.length===0?{}:e.indexOf("=")===-1?{[e]:void 0}:nu(e)}function d5(e,t,n){if(!n)return It(e,t);let i=Je(e,!0);for(let o in t)if(t.hasOwnProperty(o)){let r=i[o],s=t[o];l(r)?(Array.isArray(r)||(r=i[o]=[r]),i[o]=r.concat(s)):i[o]=Array.isArray(s)?s.slice():s}return i}Ut.prototype.getUrlComponent=function(e,t){if(this.isDataUri)return this._url;let n=this._url;e&&(n=`${n}${yPe(this.queryParameters)}`),n=n.replace(/%7B/g,"{").replace(/%7D/g,"}");let i=this._templateValues;return Object.keys(i).length>0&&(n=n.replace(/{(.*?)}/g,function(o,r){let s=i[r];return l(s)?encodeURIComponent(s):o})),t&&l(this.proxy)&&(n=this.proxy.getURL(n)),n};function yPe(e){let t=Object.keys(e);return t.length===0?"":t.length===1&&!l(e[t[0]])?`?${t[0]}`:`?${xT(e)}`}Ut.prototype.setQueryParameters=function(e,t){t?this._queryParameters=d5(this._queryParameters,e,!1):this._queryParameters=d5(e,this._queryParameters,!1)};Ut.prototype.appendQueryParameters=function(e){this._queryParameters=d5(e,this._queryParameters,!0)};Ut.prototype.setTemplateValues=function(e,t){t?this._templateValues=It(this._templateValues,e):this._templateValues=It(e,this._templateValues)};Ut.prototype.getDerivedResource=function(e){let t=this.clone();if(t._retryCount=0,l(e.url)){let n=e.preserveQueryParameters??!1;t.parseUrl(e.url,!0,n,this._url)}return l(e.queryParameters)&&(t._queryParameters=It(e.queryParameters,t.queryParameters)),l(e.templateValues)&&(t._templateValues=It(e.templateValues,t.templateValues)),l(e.headers)&&(t.headers=It(e.headers,t.headers)),l(e.proxy)&&(t.proxy=e.proxy),l(e.request)&&(t.request=e.request),l(e.retryCallback)&&(t.retryCallback=e.retryCallback),l(e.retryAttempts)&&(t.retryAttempts=e.retryAttempts),t};Ut.prototype.retryOnError=function(e){let t=this.retryCallback;if(typeof t!="function"||this._retryCount>=this.retryAttempts)return Promise.resolve(!1);let n=this;return Promise.resolve(t(this,e)).then(function(i){return++n._retryCount,i})};Ut.prototype.clone=function(e){return l(e)?(e._url=this._url,e._queryParameters=Je(this._queryParameters),e._templateValues=Je(this._templateValues),e.headers=Je(this.headers),e.proxy=this.proxy,e.retryCallback=this.retryCallback,e.retryAttempts=this.retryAttempts,e._retryCount=0,e.request=this.request.clone(),e):new Ut({url:this._url,queryParameters:this.queryParameters,templateValues:this.templateValues,headers:this.headers,proxy:this.proxy,retryCallback:this.retryCallback,retryAttempts:this.retryAttempts,request:this.request.clone(),parseUrl:!1,credits:l(this.credits)?this.credits.slice():void 0})};Ut.prototype.getBaseUri=function(e){return qG(this.getUrlComponent(e),e)};Ut.prototype.appendForwardSlash=function(){this._url=QG(this._url)};Ut.prototype.fetchArrayBuffer=function(){return this.fetch({responseType:"arraybuffer"})};Ut.fetchArrayBuffer=function(e){return new Ut(e).fetchArrayBuffer()};Ut.prototype.fetchBlob=function(){return this.fetch({responseType:"blob"})};Ut.fetchBlob=function(e){return new Ut(e).fetchBlob()};Ut.prototype.fetchImage=function(e){e=e??B.EMPTY_OBJECT;let t=e.preferImageBitmap??!1,n=e.preferBlob??!1,i=e.flipY??!1,o=e.skipColorSpaceConversion??!1;if(XK(this.request),!mae||this.isDataUri||this.isBlobUri||!this.hasHeaders&&!n)return this._fetchImage({resource:this,flipY:i,skipColorSpaceConversion:o,preferImageBitmap:t});let r=this.fetchBlob();if(!l(r))return;let s,a,c,d;return Ut.supportsImageBitmapOptions().then(function(u){return s=u,a=s&&t,r}).then(function(u){if(!l(u))return;if(d=u,a)return Ut.createImageBitmapFromBlob(u,{flipY:i,premultiplyAlpha:!1,skipColorSpaceConversion:o});let m=window.URL.createObjectURL(u);return c=new Ut({url:m}),c._fetchImage({flipY:i,skipColorSpaceConversion:o,preferImageBitmap:!1})}).then(function(u){if(l(u))return u.blob=d,a||window.URL.revokeObjectURL(c.url),u}).catch(function(u){return l(c)&&window.URL.revokeObjectURL(c.url),u.blob=d,Promise.reject(u)})};Ut.prototype._fetchImage=function(e){let t=this,n=e.flipY,i=e.skipColorSpaceConversion,o=e.preferImageBitmap,r=t.request;r.url=t.url,r.requestFunction=function(){let a=!1;!t.isDataUri&&!t.isBlobUri&&(a=t.isCrossOriginUrl);let c=hd();return Ut._Implementations.createImage(r,a,c,n,i,o),c.promise};let s=Mc.request(r);if(l(s))return s.catch(function(a){return r.state!==Ti.FAILED?Promise.reject(a):t.retryOnError(a).then(function(c){return c?(r.state=Ti.UNISSUED,r.deferred=void 0,t._fetchImage({flipY:n,skipColorSpaceConversion:i,preferImageBitmap:o})):Promise.reject(a)})})};Ut.fetchImage=function(e){return new Ut(e).fetchImage({flipY:e.flipY,skipColorSpaceConversion:e.skipColorSpaceConversion,preferBlob:e.preferBlob,preferImageBitmap:e.preferImageBitmap})};Ut.prototype.fetchText=function(){return this.fetch({responseType:"text"})};Ut.fetchText=function(e){return new Ut(e).fetchText()};Ut.prototype.fetchJson=function(){let e=this.fetch({responseType:"text",headers:{Accept:"application/json,*/*;q=0.01"}});if(l(e))return e.then(function(t){if(l(t))return JSON.parse(t)})};Ut.fetchJson=function(e){return new Ut(e).fetchJson()};Ut.prototype.fetchXML=function(){return this.fetch({responseType:"document",overrideMimeType:"text/xml"})};Ut.fetchXML=function(e){return new Ut(e).fetchXML()};Ut.prototype.fetchJsonp=function(e){e=e??"callback",XK(this.request);let t;do t=`loadJsonp${L.nextRandomNumber().toString().substring(2,8)}`;while(l(window[t]));return hae(this,e,t)};function hae(e,t,n){let i={};i[t]=n,e.setQueryParameters(i);let o=e.request,r=e.url;o.url=r,o.requestFunction=function(){let a=hd();return window[n]=function(c){a.resolve(c);try{delete window[n]}catch{window[n]=void 0}},Ut._Implementations.loadAndExecuteScript(r,n,a),a.promise};let s=Mc.request(o);if(l(s))return s.catch(function(a){return o.state!==Ti.FAILED?Promise.reject(a):e.retryOnError(a).then(function(c){return c?(o.state=Ti.UNISSUED,o.deferred=void 0,hae(e,t,n)):Promise.reject(a)})})}Ut.fetchJsonp=function(e){return new Ut(e).fetchJsonp(e.callbackParameterName)};Ut.prototype._makeRequest=function(e){let t=this;XK(t.request);let n=t.request,i=t.url;n.url=i,n.requestFunction=function(){let r=e.responseType,s=It(e.headers,t.headers),a=e.overrideMimeType,c=e.method,d=e.data,u=hd(),m=Ut._Implementations.loadWithXhr(i,r,c,d,s,u,a);return l(m)&&l(m.abort)&&(n.cancelFunction=function(){m.abort()}),u.promise};let o=Mc.request(n);if(l(o))return o.then(function(r){return n.cancelFunction=void 0,r}).catch(function(r){return n.cancelFunction=void 0,n.state!==Ti.FAILED?Promise.reject(r):t.retryOnError(r).then(function(s){return s?(n.state=Ti.UNISSUED,n.deferred=void 0,t.fetch(e)):Promise.reject(r)})})};function XK(e){if(e.state===Ti.ISSUED||e.state===Ti.ACTIVE)throw new ae("The Resource is already being fetched.");e.state=Ti.UNISSUED,e.deferred=void 0}var xPe=/^data:(.*?)(;base64)?,(.*)$/;function l5(e,t){let n=decodeURIComponent(t);return e?atob(n):n}function dae(e,t){let n=l5(e,t),i=new ArrayBuffer(n.length),o=new Uint8Array(i);for(let r=0;r{if(!a.ok){let c={};a.headers.forEach((d,u)=>{c[u]=d}),r.reject(new op(a.status,a,c));return}switch(t){case"text":r.resolve(a.text());break;case"json":r.resolve(a.json());break;default:r.resolve(new Uint8Array(await a.arrayBuffer()).buffer);break}}).catch(()=>{r.reject(new op)})}var SPe=typeof XMLHttpRequest>"u";Ut._Implementations.loadWithXhr=function(e,t,n,i,o,r,s){let a=xPe.exec(e);if(a!==null){r.resolve(TPe(a,t));return}if(SPe){_Pe(e,t,n,i,o,r,s);return}let c=new XMLHttpRequest;if(hV.contains(e)&&(c.withCredentials=!0),c.open(n,e,!0),l(s)&&l(c.overrideMimeType)&&c.overrideMimeType(s),l(o))for(let u in o)o.hasOwnProperty(u)&&c.setRequestHeader(u,o[u]);l(t)&&(c.responseType=t);let d=!1;return typeof e=="string"&&(d=e.indexOf("file://")===0||typeof window<"u"&&window.location.origin==="file://"),c.onload=function(){if((c.status<200||c.status>=300)&&!(d&&c.status===0)){r.reject(new op(c.status,c.response,c.getAllResponseHeaders()));return}let u=c.response,m=c.responseType;if(n==="HEAD"||n==="OPTIONS"){let b=c.getAllResponseHeaders().trim().split(/[\r\n]+/),f={};b.forEach(function(y){let _=y.split(": "),S=_.shift();f[S]=_.join(": ")}),r.resolve(f);return}if(c.status===204)r.resolve(void 0);else if(l(u)&&(!l(t)||m===t))r.resolve(u);else if(t==="json"&&typeof u=="string")try{r.resolve(JSON.parse(u))}catch(p){r.reject(p)}else(m===""||m==="document")&&l(c.responseXML)&&c.responseXML.hasChildNodes()?r.resolve(c.responseXML):(m===""||m==="text")&&l(c.responseText)?r.resolve(c.responseText):r.reject(new ae("Invalid XMLHttpRequest response type."))},c.onerror=function(u){r.reject(new op)},c.send(i),c};Ut._Implementations.loadAndExecuteScript=function(e,t,n){return yT(e,t).catch(function(i){n.reject(i)})};Ut._DefaultImplementations={};Ut._DefaultImplementations.createImage=Ut._Implementations.createImage;Ut._DefaultImplementations.loadWithXhr=Ut._Implementations.loadWithXhr;Ut._DefaultImplementations.loadAndExecuteScript=Ut._Implementations.loadAndExecuteScript;Ut.DEFAULT=Object.freeze(new Ut({url:typeof document>"u"?"":document.location.href.split("?")[0]}));var ve=Ut;function oA(e){e=e??B.EMPTY_OBJECT,this._dates=void 0,this._samples=void 0,this._dateColumn=-1,this._xPoleWanderRadiansColumn=-1,this._yPoleWanderRadiansColumn=-1,this._ut1MinusUtcSecondsColumn=-1,this._xCelestialPoleOffsetRadiansColumn=-1,this._yCelestialPoleOffsetRadiansColumn=-1,this._taiMinusUtcSecondsColumn=-1,this._columnCount=0,this._lastIndex=-1,this._addNewLeapSeconds=e.addNewLeapSeconds??!0,l(e.data)?fae(this,e.data):fae(this,{columnNames:["dateIso8601","modifiedJulianDateUtc","xPoleWanderRadians","yPoleWanderRadians","ut1MinusUtcSeconds","lengthOfDayCorrectionSeconds","xCelestialPoleOffsetRadians","yCelestialPoleOffsetRadians","taiMinusUtcSeconds"],samples:[]})}oA.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT;let n=ve.createIfNeeded(e),i;try{i=await n.fetchJson()}catch{throw new ae(`An error occurred while retrieving the EOP data from the URL ${n.url}.`)}return new oA({addNewLeapSeconds:t.addNewLeapSeconds,data:i})};oA.NONE=Object.freeze({compute:function(e,t){return l(t)?(t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0):t=new Qg(0,0,0,0,0),t}});oA.prototype.compute=function(e,t){if(!l(this._samples))return;if(l(t)||(t=new Qg(0,0,0,0,0)),this._samples.length===0)return t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0,t;let n=this._dates,i=this._lastIndex,o,r;if(l(i)){let a=n[i],c=n[i+1],d=Q.lessThanOrEquals(a,e),u=!l(c),m=u||Q.greaterThanOrEquals(c,e);if(d&&m)return o=i,!u&&c.equals(e)&&++o,r=o+1,bae(this,n,this._samples,e,o,r,t),t}let s=_o(n,e,Q.compare,this._dateColumn);return s>=0?(st.length-1)return s.xPoleWander=0,s.yPoleWander=0,s.xPoleOffset=0,s.yPoleOffset=0,s.ut1MinusUtc=0,s;let c=t[o],d=t[r];if(c.equals(d)||i.equals(c))return pae(e,n,o,a,s),s;if(i.equals(d))return pae(e,n,r,a,s),s;let u=Q.secondsDifference(i,c)/Q.secondsDifference(d,c),m=o*a,p=r*a,b=n[m+e._ut1MinusUtcSecondsColumn],f=n[p+e._ut1MinusUtcSecondsColumn],y=f-b;if(y>.5||y<-.5){let _=n[m+e._taiMinusUtcSecondsColumn],S=n[p+e._taiMinusUtcSecondsColumn];_!==S&&(d.equals(i)?b=f:f-=S-_)}return s.xPoleWander=iA(u,n[m+e._xPoleWanderRadiansColumn],n[p+e._xPoleWanderRadiansColumn]),s.yPoleWander=iA(u,n[m+e._yPoleWanderRadiansColumn],n[p+e._yPoleWanderRadiansColumn]),s.xPoleOffset=iA(u,n[m+e._xCelestialPoleOffsetRadiansColumn],n[p+e._xCelestialPoleOffsetRadiansColumn]),s.yPoleOffset=iA(u,n[m+e._yCelestialPoleOffsetRadiansColumn],n[p+e._yCelestialPoleOffsetRadiansColumn]),s.ut1MinusUtc=iA(u,b,f),s}var rA=oA;var jDt=x(T(),1);function kc(e,t,n){this.heading=e??0,this.pitch=t??0,this.roll=n??0}kc.fromQuaternion=function(e,t){l(t)||(t=new kc);let n=2*(e.w*e.y-e.z*e.x),i=1-2*(e.x*e.x+e.y*e.y),o=2*(e.w*e.x+e.y*e.z),r=1-2*(e.y*e.y+e.z*e.z),s=2*(e.w*e.z+e.x*e.y);return t.heading=-Math.atan2(s,r),t.roll=Math.atan2(o,i),t.pitch=-L.asinClamped(n),t};kc.fromDegrees=function(e,t,n,i){return l(i)||(i=new kc),i.heading=e*L.RADIANS_PER_DEGREE,i.pitch=t*L.RADIANS_PER_DEGREE,i.roll=n*L.RADIANS_PER_DEGREE,i};kc.clone=function(e,t){if(l(e))return l(t)?(t.heading=e.heading,t.pitch=e.pitch,t.roll=e.roll,t):new kc(e.heading,e.pitch,e.roll)};kc.equals=function(e,t){return e===t||l(e)&&l(t)&&e.heading===t.heading&&e.pitch===t.pitch&&e.roll===t.roll};kc.equalsEpsilon=function(e,t,n,i){return e===t||l(e)&&l(t)&&L.equalsEpsilon(e.heading,t.heading,n,i)&&L.equalsEpsilon(e.pitch,t.pitch,n,i)&&L.equalsEpsilon(e.roll,t.roll,n,i)};kc.prototype.clone=function(e){return kc.clone(this,e)};kc.prototype.equals=function(e){return kc.equals(this,e)};kc.prototype.equalsEpsilon=function(e,t,n){return kc.equalsEpsilon(this,e,t,n)};kc.prototype.toString=function(){return`(${this.heading}, ${this.pitch}, ${this.roll})`};var Tc=kc;var hOt=x(T(),1);var tOt=x(T(),1);var gae={};var yae=/((?:.*\/)|^)Cesium\.js(?:\?|\#|$)/;function VPe(){let e=document.getElementsByTagName("script");for(let t=0,n=e.length;t"u"?e:(l(u5)||(u5=document.createElement("a")),u5.href=e,u5.href)}var ST;function Tae(){if(l(ST))return ST;let e;return typeof CESIUM_BASE_URL<"u"?e=CESIUM_BASE_URL:l(gae?.url)?e=cm(".",gae.url):typeof define=="object"&&l(define.amd)&&!define.amd.toUrlUndefined&&l(HU.toUrl)?e=cm("..",ZT("Core/buildModuleUrl.js")):e=VPe(),ST=new ve({url:xae(e)}),ST.appendForwardSlash(),ST}function CPe(e){return xae(HU.toUrl(`../${e}`))}function _ae(e){return Tae().getDerivedResource({url:e}).url}var m5;function ZT(e){return l(m5)||(typeof define=="object"&&l(define.amd)&&!define.amd.toUrlUndefined&&l(HU.toUrl)?m5=CPe:m5=_ae),m5(e)}ZT._cesiumScriptRegex=yae;ZT._buildModuleUrlFromBaseUrl=_ae;ZT._clearBaseResource=function(){ST=void 0};ZT.setBaseUrl=function(e){ST=ve.DEFAULT.getDerivedResource({url:e})};ZT.getCesiumBaseUrl=Tae;var qt=ZT;var oOt=x(T(),1);function RPe(e,t,n){this.x=e,this.y=t,this.s=n}var VT=RPe;function h5(e){e=e??B.EMPTY_OBJECT,this._xysFileUrlTemplate=ve.createIfNeeded(e.xysFileUrlTemplate),this._interpolationOrder=e.interpolationOrder??9,this._sampleZeroJulianEphemerisDate=e.sampleZeroJulianEphemerisDate??24423965e-1,this._sampleZeroDateTT=new Q(this._sampleZeroJulianEphemerisDate,0,si.TAI),this._stepSizeDays=e.stepSizeDays??1,this._samplesPerXysFile=e.samplesPerXysFile??1e3,this._totalSamples=e.totalSamples??27426,this._samples=new Array(this._totalSamples*3),this._chunkDownloadsInProgress=[];let t=this._interpolationOrder,n=this._denominators=new Array(t+1),i=this._xTable=new Array(t+1),o=Math.pow(this._stepSizeDays,t);for(let r=0;r<=t;++r){n[r]=o,i[r]=r*this._stepSizeDays;for(let s=0;s<=t;++s)s!==r&&(n[r]*=r-s);n[r]=1/n[r]}this._work=new Array(t+1),this._coef=new Array(t+1)}var GPe=new Q(0,0,si.TAI);function NK(e,t,n){let i=GPe;return i.dayNumber=t,i.secondsOfDay=n,Q.daysDifference(i,e._sampleZeroDateTT)}h5.prototype.preload=function(e,t,n,i){let o=NK(this,e,t),r=NK(this,n,i),s=o/this._stepSizeDays-this._interpolationOrder/2|0;s<0&&(s=0);let a=r/this._stepSizeDays-this._interpolationOrder/2|0+this._interpolationOrder;a>=this._totalSamples&&(a=this._totalSamples-1);let c=s/this._samplesPerXysFile|0,d=a/this._samplesPerXysFile|0,u=[];for(let m=c;m<=d;++m)u.push(YK(this,m));return Promise.all(u)};h5.prototype.computeXysRadians=function(e,t,n){let i=NK(this,e,t);if(i<0)return;let o=i/this._stepSizeDays|0;if(o>=this._totalSamples)return;let r=this._interpolationOrder,s=o-(r/2|0);s<0&&(s=0);let a=s+r;a>=this._totalSamples&&(a=this._totalSamples-1,s=a-r,s<0&&(s=0));let c=!1,d=this._samples;if(l(d[s*3])||(YK(this,s/this._samplesPerXysFile|0),c=!0),l(d[a*3])||(YK(this,a/this._samplesPerXysFile|0),c=!0),c)return;l(n)?(n.x=0,n.y=0,n.s=0):n=new VT(0,0,0);let u=i-s*this._stepSizeDays,m=this._work,p=this._denominators,b=this._coef,f=this._xTable,y,_;for(y=0;y<=r;++y)m[y]=u-f[y];for(y=0;y<=r;++y){for(b[y]=1,_=0;_<=r;++_)_!==y&&(b[y]*=m[_]);b[y]*=p[y];let S=(s+y)*3;n.x+=b[y]*d[S++],n.y+=b[y]*d[S++],n.s+=b[y]*d[S]}return n};h5.prototype._updateChunkData=function(e,{samples:t}){this._chunkDownloadsInProgress[e]=void 0;let n=this._samplesPerXysFile,i=e*n*3;for(let o=0;o{let t=new Image;t.onload=function(){Vl._result=t.width>0&&t.height>0,e(Vl._result)},t.onerror=function(){Vl._result=!1,e(Vl._result)},t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"})),Vl._promise};Object.defineProperties(Vl,{initialized:{get:function(){return l(Vl._result)}}});var pV=[];typeof ArrayBuffer<"u"&&(pV.push(Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array),typeof Uint8ClampedArray<"u"&&pV.push(Uint8ClampedArray),typeof Uint8ClampedArray<"u"&&pV.push(Uint8ClampedArray),typeof BigInt64Array<"u"&&pV.push(BigInt64Array),typeof BigUint64Array<"u"&&pV.push(BigUint64Array));var dm={isChrome:DK,chromeVersion:EPe,isSafari:Vae,safariVersion:LPe,isWebkit:Cae,webkitVersion:WPe,isEdge:T5,edgeVersion:vPe,isFirefox:_5,firefoxVersion:PPe,isWindows:FPe,isIPadOrIOS:IPe,hardwareConcurrency:lm.hardwareConcurrency??3,supportsPointerEvents:XPe,supportsImageRenderingPixelated:Aae,supportsWebP:Vl,imageRenderingValue:NPe,typedArrayTypes:pV};dm.supportsBasis=function(e){return dm.supportsWebAssembly()&&e.context.supportsBasis};dm.supportsFullscreen=function(){return Or.supportsFullscreen()};dm.supportsTypedArrays=function(){return typeof ArrayBuffer<"u"};dm.supportsBigInt64Array=function(){return typeof BigInt64Array<"u"};dm.supportsBigUint64Array=function(){return typeof BigUint64Array<"u"};dm.supportsBigInt=function(){return typeof BigInt<"u"};dm.supportsWebWorkers=function(){return typeof Worker<"u"};dm.supportsWebAssembly=function(){return typeof WebAssembly<"u"};dm.supportsWebgl2=function(e){return e.context.webgl2};dm.supportsEsmWebWorkers=function(){return!_5()||parseInt(OK)>=114};var hn=dm;function lt(e,t,n,i){this.x=e??0,this.y=t??0,this.z=n??0,this.w=i??0}var cA=new h;lt.fromAxisAngle=function(e,t,n){let i=t/2,o=Math.sin(i);cA=h.normalize(e,cA);let r=cA.x*o,s=cA.y*o,a=cA.z*o,c=Math.cos(i);return l(n)?(n.x=r,n.y=s,n.z=a,n.w=c,n):new lt(r,s,a,c)};var YPe=[1,2,0],wPe=new Array(3);lt.fromRotationMatrix=function(e,t){let n,i,o,r,s,a=e[q.COLUMN0ROW0],c=e[q.COLUMN1ROW1],d=e[q.COLUMN2ROW2],u=a+c+d;if(u>0)n=Math.sqrt(u+1),s=.5*n,n=.5/n,i=(e[q.COLUMN1ROW2]-e[q.COLUMN2ROW1])*n,o=(e[q.COLUMN2ROW0]-e[q.COLUMN0ROW2])*n,r=(e[q.COLUMN0ROW1]-e[q.COLUMN1ROW0])*n;else{let m=YPe,p=0;c>a&&(p=1),d>a&&d>c&&(p=2);let b=m[p],f=m[b];n=Math.sqrt(e[q.getElementIndex(p,p)]-e[q.getElementIndex(b,b)]-e[q.getElementIndex(f,f)]+1);let y=wPe;y[p]=.5*n,n=.5/n,s=(e[q.getElementIndex(f,b)]-e[q.getElementIndex(b,f)])*n,y[b]=(e[q.getElementIndex(b,p)]+e[q.getElementIndex(p,b)])*n,y[f]=(e[q.getElementIndex(f,p)]+e[q.getElementIndex(p,f)])*n,i=-y[0],o=-y[1],r=-y[2]}return l(t)?(t.x=i,t.y=o,t.z=r,t.w=s,t):new lt(i,o,r,s)};var Eae=new lt,Lae=new lt,BK=new lt,Wae=new lt;lt.fromHeadingPitchRoll=function(e,t){return Wae=lt.fromAxisAngle(h.UNIT_X,e.roll,Eae),BK=lt.fromAxisAngle(h.UNIT_Y,-e.pitch,t),t=lt.multiply(BK,Wae,BK),Lae=lt.fromAxisAngle(h.UNIT_Z,-e.heading,Eae),lt.multiply(Lae,t,t)};var S5=new h,zK=new h,_h=new lt,vae=new lt,Z5=new lt;lt.packedLength=4;lt.pack=function(e,t,n){return n=n??0,t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t};lt.unpack=function(e,t,n){return t=t??0,l(n)||(n=new lt),n.x=e[t],n.y=e[t+1],n.z=e[t+2],n.w=e[t+3],n};lt.packedInterpolationLength=3;lt.convertPackedArrayForInterpolation=function(e,t,n,i){lt.unpack(e,n*4,Z5),lt.conjugate(Z5,Z5);for(let o=0,r=n-t+1;o=0?r=1:(r=-1,o=-o);let s=o-1,a=1-n,c=n*n,d=a*a;for(let b=7;b>=0;--b)v0[b]=(V5[b]*c-C5[b])*s,F0[b]=(V5[b]*d-C5[b])*s;let u=r*n*(1+v0[0]*(1+v0[1]*(1+v0[2]*(1+v0[3]*(1+v0[4]*(1+v0[5]*(1+v0[6]*(1+v0[7])))))))),m=a*(1+F0[0]*(1+F0[1]*(1+F0[2]*(1+F0[3]*(1+F0[4]*(1+F0[5]*(1+F0[6]*(1+F0[7])))))))),p=lt.multiplyByScalar(e,m,UPe);return lt.multiplyByScalar(t,u,i),lt.add(p,i,i)};lt.fastSquad=function(e,t,n,i,o,r){let s=lt.fastSlerp(e,t,o,lA),a=lt.fastSlerp(n,i,o,bV);return lt.fastSlerp(s,a,2*o*(1-o),r)};lt.equals=function(e,t){return e===t||l(e)&&l(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z&&e.w===t.w};lt.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e.x-t.x)<=n&&Math.abs(e.y-t.y)<=n&&Math.abs(e.z-t.z)<=n&&Math.abs(e.w-t.w)<=n};lt.ZERO=Object.freeze(new lt(0,0,0,0));lt.IDENTITY=Object.freeze(new lt(0,0,0,1));lt.prototype.clone=function(e){return lt.clone(this,e)};lt.prototype.equals=function(e){return lt.equals(this,e)};lt.prototype.equalsEpsilon=function(e,t){return lt.equalsEpsilon(this,e,t)};lt.prototype.toString=function(){return`(${this.x}, ${this.y}, ${this.z}, ${this.w})`};var Ye=lt;var _i={},jK={up:{south:"east",north:"west",west:"south",east:"north"},down:{south:"west",north:"east",west:"north",east:"south"},south:{up:"west",down:"east",west:"down",east:"up"},north:{up:"east",down:"west",west:"up",east:"down"},west:{up:"north",down:"south",north:"down",south:"up"},east:{up:"south",down:"north",north:"up",south:"down"}},gV={north:[-1,0,0],east:[0,1,0],up:[0,0,1],south:[1,0,0],west:[0,-1,0],down:[0,0,-1]},QK={},pd={east:new h,north:new h,up:new h,west:new h,south:new h,down:new h},ty=new h,ny=new h,iy=new h;_i.localFrameToFixedFrameGenerator=function(e,t){if(!jK.hasOwnProperty(e)||!jK[e].hasOwnProperty(t))throw new ge("firstAxis and secondAxis must be east, north, up, west, south or down.");let n=jK[e][t],i,o=e+t;return l(QK[o])?i=QK[o]:(i=function(r,s,a){if(l(a)||(a=new I),h.equalsEpsilon(r,h.ZERO,L.EPSILON14))h.unpack(gV[e],0,ty),h.unpack(gV[t],0,ny),h.unpack(gV[n],0,iy);else if(L.equalsEpsilon(r.x,0,L.EPSILON14)&&L.equalsEpsilon(r.y,0,L.EPSILON14)){let c=L.sign(r.z);h.unpack(gV[e],0,ty),e!=="east"&&e!=="west"&&h.multiplyByScalar(ty,c,ty),h.unpack(gV[t],0,ny),t!=="east"&&t!=="west"&&h.multiplyByScalar(ny,c,ny),h.unpack(gV[n],0,iy),n!=="east"&&n!=="west"&&h.multiplyByScalar(iy,c,iy)}else{s=s??ie.default,s.geodeticSurfaceNormal(r,pd.up);let c=pd.up,d=pd.east;d.x=-r.y,d.y=r.x,d.z=0,h.normalize(d,pd.east),h.cross(c,d,pd.north),h.multiplyByScalar(pd.up,-1,pd.down),h.multiplyByScalar(pd.east,-1,pd.west),h.multiplyByScalar(pd.north,-1,pd.south),ty=pd[e],ny=pd[t],iy=pd[n]}return a[0]=ty.x,a[1]=ty.y,a[2]=ty.z,a[3]=0,a[4]=ny.x,a[5]=ny.y,a[6]=ny.z,a[7]=0,a[8]=iy.x,a[9]=iy.y,a[10]=iy.z,a[11]=0,a[12]=r.x,a[13]=r.y,a[14]=r.z,a[15]=1,a},QK[o]=i),i};_i.eastNorthUpToFixedFrame=_i.localFrameToFixedFrameGenerator("east","north");_i.northEastDownToFixedFrame=_i.localFrameToFixedFrameGenerator("north","east");_i.northUpEastToFixedFrame=_i.localFrameToFixedFrameGenerator("north","up");_i.northWestUpToFixedFrame=_i.localFrameToFixedFrameGenerator("north","west");var DPe=new Ye,OPe=new h(1,1,1),BPe=new I;_i.headingPitchRollToFixedFrame=function(e,t,n,i,o){i=i??_i.eastNorthUpToFixedFrame;let r=Ye.fromHeadingPitchRoll(t,DPe),s=I.fromTranslationQuaternionRotationScale(h.ZERO,r,OPe,BPe);return o=i(e,n,o),I.multiply(o,s,o)};var zPe=new I,HPe=new q;_i.headingPitchRollQuaternion=function(e,t,n,i,o){let r=_i.headingPitchRollToFixedFrame(e,t,n,i,zPe),s=I.getMatrix3(r,HPe);return Ye.fromRotationMatrix(s,o)};var KPe=new h(1,1,1),JPe=new h,Pae=new I,jPe=new I,QPe=new q,qPe=new Ye;_i.fixedFrameToHeadingPitchRoll=function(e,t,n,i){t=t??ie.default,n=n??_i.eastNorthUpToFixedFrame,l(i)||(i=new Tc);let o=I.getTranslation(e,JPe);if(h.equals(o,h.ZERO))return i.heading=0,i.pitch=0,i.roll=0,i;let r=I.inverseTransformation(n(o,t,Pae),Pae),s=I.setScale(e,KPe,jPe);s=I.setTranslation(s,h.ZERO,s),r=I.multiply(r,s,r);let a=Ye.fromRotationMatrix(I.getMatrix3(r,QPe),qPe);return a=Ye.normalize(a,a),Tc.fromQuaternion(a,i)};var $Pe=6*3600+2460+50.54841,eXe=8640184812866e-6,tXe=.093104,nXe=-62e-7,iXe=11772758384668e-32,oXe=72921158553e-15,rXe=L.TWO_PI/86400,R5=new Q;_i.computeIcrfToCentralBodyFixedMatrix=function(e,t){let n=_i.computeIcrfToFixedMatrix(e,t);return l(n)||(n=_i.computeTemeToPseudoFixedMatrix(e,t)),n};_i.computeTemeToPseudoFixedMatrix=function(e,t){R5=Q.addSeconds(e,-Q.computeTaiMinusUtc(e),R5);let n=R5.dayNumber,i=R5.secondsOfDay,o,r=n-2451545;i>=43200?o=(r+.5)/kn.DAYS_PER_JULIAN_CENTURY:o=(r-.5)/kn.DAYS_PER_JULIAN_CENTURY;let a=($Pe+o*(eXe+o*(tXe+o*nXe)))*rXe%L.TWO_PI,c=oXe+iXe*(n-24515455e-1),d=(i+kn.SECONDS_PER_DAY*.5)%kn.SECONDS_PER_DAY,u=a+c*d,m=Math.cos(u),p=Math.sin(u);return l(t)?(t[0]=m,t[1]=-p,t[2]=0,t[3]=p,t[4]=m,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new q(m,p,0,-p,m,0,0,0,1)};_i.iau2006XysData=new sA;_i.earthOrientationParameters=rA.NONE;var eJ=32.184,sXe=2451545;_i.preloadIcrfFixed=function(e){let t=e.start.dayNumber,n=e.start.secondsOfDay+eJ,i=e.stop.dayNumber,o=e.stop.secondsOfDay+eJ;return _i.iau2006XysData.preload(t,n,i,o)};_i.computeIcrfToFixedMatrix=function(e,t){l(t)||(t=new q);let n=_i.computeFixedToIcrfMatrix(e,t);if(l(n))return q.transpose(n,t)};var aXe=32.184,cXe=2451545,G5=new Tc,lXe=new q,dXe=new Q;_i.computeMoonFixedToIcrfMatrix=function(e,t){l(t)||(t=new q);let n=Q.addSeconds(e,aXe,dXe),i=Q.totalDays(n)-cXe,o=L.toRadians(12.112)-L.toRadians(.052992)*i,r=L.toRadians(24.224)-L.toRadians(.105984)*i,s=L.toRadians(227.645)+L.toRadians(13.012)*i,a=L.toRadians(261.105)+L.toRadians(13.340716)*i,c=L.toRadians(358)+L.toRadians(.9856)*i;return G5.pitch=L.toRadians(180)-L.toRadians(3.878)*Math.sin(o)-L.toRadians(.12)*Math.sin(r)+L.toRadians(.07)*Math.sin(s)-L.toRadians(.017)*Math.sin(a),G5.roll=L.toRadians(66.53-90)+L.toRadians(1.543)*Math.cos(o)+L.toRadians(.24)*Math.cos(r)-L.toRadians(.028)*Math.cos(s)+L.toRadians(.007)*Math.cos(a),G5.heading=L.toRadians(244.375-90)+L.toRadians(13.17635831)*i+L.toRadians(3.558)*Math.sin(o)+L.toRadians(.121)*Math.sin(r)-L.toRadians(.064)*Math.sin(s)+L.toRadians(.016)*Math.sin(a)+L.toRadians(.025)*Math.sin(c),q.fromHeadingPitchRoll(G5,lXe,t)};_i.computeIcrfToMoonFixedMatrix=function(e,t){l(t)||(t=new q);let n=_i.computeMoonFixedToIcrfMatrix(e,t);if(l(n))return q.transpose(n,t)};var uXe=new VT(0,0,0),mXe=new Qg(0,0,0,0,0,0),qK=new q,$K=new q;_i.computeFixedToIcrfMatrix=function(e,t){l(t)||(t=new q);let n=_i.earthOrientationParameters.compute(e,mXe);if(!l(n))return;let i=e.dayNumber,o=e.secondsOfDay+eJ,r=_i.iau2006XysData.computeXysRadians(i,o,uXe);if(!l(r))return;let s=r.x+n.xPoleOffset,a=r.y+n.yPoleOffset,c=1/(1+Math.sqrt(1-s*s-a*a)),d=qK;d[0]=1-c*s*s,d[3]=-c*s*a,d[6]=s,d[1]=-c*s*a,d[4]=1-c*a*a,d[7]=a,d[2]=-s,d[5]=-a,d[8]=1-c*(s*s+a*a);let u=q.fromRotationZ(-r.s,$K),m=q.multiply(d,u,qK),p=e.dayNumber,b=e.secondsOfDay-Q.computeTaiMinusUtc(e)+n.ut1MinusUtc,f=p-2451545,y=b/kn.SECONDS_PER_DAY,_=.779057273264+y+.00273781191135448*(f+y);_=_%1*L.TWO_PI;let S=q.fromRotationZ(_,$K),Z=q.multiply(m,S,qK),V=Math.cos(n.xPoleWander),C=Math.cos(n.yPoleWander),G=Math.sin(n.xPoleWander),E=Math.sin(n.yPoleWander),v=i-sXe+o/kn.SECONDS_PER_DAY;v/=36525;let F=-47e-6*v*L.RADIANS_PER_DEGREE/3600,P=Math.cos(F),N=Math.sin(F),g=$K;return g[0]=V*P,g[1]=V*N,g[2]=G,g[3]=-C*N+E*G*P,g[4]=C*P+E*G*N,g[5]=-E*V,g[6]=-E*N-C*G*P,g[7]=E*P-C*G*N,g[8]=C*V,q.multiply(Z,g,t)};var hXe=new ce;_i.pointToWindowCoordinates=function(e,t,n,i){return i=_i.pointToGLWindowCoordinates(e,t,n,i),i.y=2*t[5]-i.y,i};_i.pointToGLWindowCoordinates=function(e,t,n,i){l(i)||(i=new M);let o=hXe;return I.multiplyByVector(e,ce.fromElements(n.x,n.y,n.z,1,o),o),ce.multiplyByScalar(o,1/o.w,o),I.multiplyByVector(t,o,o),M.fromCartesian4(o,i)};var fXe=new h,pXe=new h,bXe=new h;_i.rotationMatrixFromPositionVelocity=function(e,t,n,i){let o=(n??ie.default).geodeticSurfaceNormal(e,fXe),r=h.cross(t,o,pXe);h.equalsEpsilon(r,h.ZERO,L.EPSILON6)&&(r=h.clone(h.UNIT_X,r));let s=h.cross(r,t,bXe);return h.normalize(s,s),h.cross(t,s,r),h.negate(r,r),h.normalize(r,r),l(i)||(i=new q),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=r.x,i[4]=r.y,i[5]=r.z,i[6]=s.x,i[7]=s.y,i[8]=s.z,i};_i.SWIZZLE_3D_TO_2D_MATRIX=Object.freeze(new I(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1));var Xae=new fe,tJ=new h,gXe=new h,yXe=new q,nJ=new I,Nae=new I;_i.basisTo2D=function(e,t,n){let i=I.getTranslation(t,gXe),o=e.ellipsoid,r;if(h.equals(i,h.ZERO))r=h.clone(h.ZERO,tJ);else{let u=o.cartesianToCartographic(i,Xae);r=e.project(u,tJ),h.fromElements(r.z,r.x,r.y,r)}let s=_i.eastNorthUpToFixedFrame(i,o,nJ),a=I.inverseTransformation(s,Nae),c=I.getMatrix3(t,yXe),d=I.multiplyByMatrix3(a,c,n);return I.multiply(_i.SWIZZLE_3D_TO_2D_MATRIX,d,n),I.setTranslation(n,r,n),n};_i.ellipsoidTo2DModelMatrix=function(e,t,n){let i=e.ellipsoid,o=_i.eastNorthUpToFixedFrame(t,i,nJ),r=I.inverseTransformation(o,Nae),s=i.cartesianToCartographic(t,Xae),a=e.project(s,tJ);h.fromElements(a.z,a.x,a.y,a);let c=I.fromTranslation(a,nJ);return I.multiply(_i.SWIZZLE_3D_TO_2D_MATRIX,r,n),I.multiply(c,n,n),n};var bt=_i;var yV=class e{constructor(t,n,i,o){this.west=t??0,this.south=n??0,this.east=i??0,this.north=o??0}get width(){return e.computeWidth(this)}get height(){return e.computeHeight(this)}static pack(t,n,i){return i=i??0,n[i++]=t.west,n[i++]=t.south,n[i++]=t.east,n[i]=t.north,n}static unpack(t,n,i){return n=n??0,l(i)||(i=new e),i.west=t[n++],i.south=t[n++],i.east=t[n++],i.north=t[n],i}static computeWidth(t){let n=t.east,i=t.west;return n=0?m.longitude:m.longitude+L.TWO_PI;r=Math.min(r,p),s=Math.max(s,p)}return o-i>s-r&&(i=r,o=s,o>L.PI&&(o=o-L.TWO_PI),i>L.PI&&(i=i-L.TWO_PI)),l(n)?(n.west=i,n.south=a,n.east=o,n.north=c,n):new e(i,a,o,c)}static fromCartesianArray(t,n,i){n=n??ie.default;let o=Number.MAX_VALUE,r=-Number.MAX_VALUE,s=Number.MAX_VALUE,a=-Number.MAX_VALUE,c=Number.MAX_VALUE,d=-Number.MAX_VALUE;for(let u=0,m=t.length;u=0?p.longitude:p.longitude+L.TWO_PI;s=Math.min(s,b),a=Math.max(a,b)}return r-o>a-s&&(o=s,r=a,r>L.PI&&(r=r-L.TWO_PI),o>L.PI&&(o=o-L.TWO_PI)),l(i)?(i.west=o,i.south=c,i.east=r,i.north=d,i):new e(o,c,r,d)}static fromBoundingSphere(t,n,i){let o=t.center,r=t.radius;if(l(n)||(n=ie.default),l(i)||(i=new e),h.equals(o,h.ZERO))return e.clone(e.MAX_VALUE,i),i;let s=bt.eastNorthUpToFixedFrame(o,n,xXe),a=I.multiplyByPointAsVector(s,h.UNIT_X,TXe);h.normalize(a,a);let c=I.multiplyByPointAsVector(s,h.UNIT_Y,_Xe);h.normalize(c,c),h.multiplyByScalar(c,r,c),h.multiplyByScalar(a,r,a);let d=h.negate(c,ZXe),u=h.negate(a,SXe),m=iJ,p=m[0];return h.add(o,c,p),p=m[1],h.add(o,u,p),p=m[2],h.add(o,d,p),p=m[3],h.add(o,a,p),m[4]=o,e.fromCartesianArray(m,n,i)}static clone(t,n){if(l(t))return l(n)?(n.west=t.west,n.south=t.south,n.east=t.east,n.north=t.north,n):new e(t.west,t.south,t.east,t.north)}static equalsEpsilon(t,n,i){return i=i??0,t===n||l(t)&&l(n)&&Math.abs(t.west-n.west)<=i&&Math.abs(t.south-n.south)<=i&&Math.abs(t.east-n.east)<=i&&Math.abs(t.north-n.north)<=i}clone(t){return e.clone(this,t)}equals(t){return e.equals(this,t)}static equals(t,n){return t===n||l(t)&&l(n)&&t.west===n.west&&t.south===n.south&&t.east===n.east&&t.north===n.north}equalsEpsilon(t,n){return e.equalsEpsilon(this,t,n)}static _validate(t){}static southwest(t,n){return l(n)?(n.longitude=t.west,n.latitude=t.south,n.height=0,n):new fe(t.west,t.south)}static northwest(t,n){return l(n)?(n.longitude=t.west,n.latitude=t.north,n.height=0,n):new fe(t.west,t.north)}static northeast(t,n){return l(n)?(n.longitude=t.east,n.latitude=t.north,n.height=0,n):new fe(t.east,t.north)}static southeast(t,n){return l(n)?(n.longitude=t.east,n.latitude=t.south,n.height=0,n):new fe(t.east,t.south)}static center(t,n){let i=t.east,o=t.west;i0?o+=L.TWO_PI:s0&&(s+=L.TWO_PI),o=m))return l(i)?(i.west=c,i.south=u,i.east=d,i.north=m,i):new e(c,u,d,m)}static simpleIntersection(t,n,i){let o=Math.max(t.west,n.west),r=Math.max(t.south,n.south),s=Math.min(t.east,n.east),a=Math.min(t.north,n.north);if(!(r>=a||o>=s))return l(i)?(i.west=o,i.south=r,i.east=s,i.north=a,i):new e(o,r,s,a)}static union(t,n,i){l(i)||(i=new e);let o=t.east,r=t.west,s=n.east,a=n.west;o0?o+=L.TWO_PI:s0&&(s+=L.TWO_PI),or||L.equalsEpsilon(i,r,L.EPSILON14))&&(i=t.south&&o<=t.north}static subsample(t,n,i,o){n=n??ie.default,i=i??0,l(o)||(o=[]);let r=0,s=t.north,a=t.south,c=t.east,d=t.west,u=VXe;u.height=i,u.longitude=d,u.latitude=s,o[r]=n.cartographicToCartesian(u,o[r]),r++,u.longitude=c,o[r]=n.cartographicToCartesian(u,o[r]),r++,u.latitude=a,o[r]=n.cartographicToCartesian(u,o[r]),r++,u.longitude=d,o[r]=n.cartographicToCartesian(u,o[r]),r++,s<0?u.latitude=s:a>0?u.latitude=a:u.latitude=0;for(let m=1;m<8;++m)u.longitude=-Math.PI+m*L.PI_OVER_TWO,e.contains(t,u)&&(o[r]=n.cartographicToCartesian(u,o[r]),r++);return u.latitude===0&&(u.longitude=d,o[r]=n.cartographicToCartesian(u,o[r]),r++,u.longitude=c,o[r]=n.cartographicToCartesian(u,o[r]),r++),o.length=r,o}static subsection(t,n,i,o,r,s){if(l(s)||(s=new e),t.west<=t.east){let c=t.east-t.west;s.west=t.west+n*c,s.east=t.west+o*c}else{let c=L.TWO_PI+t.east-t.west;s.west=L.negativePiToPi(t.west+n*c),s.east=L.negativePiToPi(t.west+o*c)}let a=t.north-t.south;return s.south=t.south+i*a,s.north=t.south+r*a,n===1&&(s.west=t.east),o===1&&(s.east=t.east),i===1&&(s.south=t.north),r===1&&(s.north=t.north),s}};yV.packedLength=4;var xXe=new I,TXe=new h,_Xe=new h,SXe=new h,ZXe=new h,iJ=new Array(5);for(let e=0;ea.x&&h.clone(i,a),Nc.y&&h.clone(i,c),gd.z&&h.clone(i,d)}let p=h.magnitudeSquared(h.subtract(a,o,Ka)),b=h.magnitudeSquared(h.subtract(c,r,Ka)),f=h.magnitudeSquared(h.subtract(d,s,Ka)),y=o,_=a,S=p;b>S&&(S=b,y=r,_=c),f>S&&(y=s,_=d);let Z=uJ;Z.x=(y.x+_.x)*.5,Z.y=(y.y+_.y)*.5,Z.z=(y.z+_.z)*.5;let V=h.magnitudeSquared(h.subtract(_,Z,Ka)),C=Math.sqrt(V),G=mJ;G.x=o.x,G.y=r.y,G.z=s.z;let E=hJ;E.x=a.x,E.y=c.y,E.z=d.z;let v=h.midpoint(G,E,fJ),F=0;for(m=0;mF&&(F=P);let N=h.magnitudeSquared(h.subtract(i,Z,Ka));if(N>V){let g=Math.sqrt(N);C=(C+g)*.5,V=C*C;let R=g-C;Z.x=(C*Z.x+R*i.x)/g,Z.y=(C*Z.y+R*i.y)/g,Z.z=(C*Z.z+R*i.z)/g}}return Cd.x&&h.clone(r,d),Ru.y&&h.clone(r,u),Am.z&&h.clone(r,m)}let f=h.magnitudeSquared(h.subtract(d,s,Ka)),y=h.magnitudeSquared(h.subtract(u,a,Ka)),_=h.magnitudeSquared(h.subtract(m,c,Ka)),S=s,Z=d,V=f;y>V&&(V=y,S=a,Z=u),_>V&&(S=c,Z=m);let C=uJ;C.x=(S.x+Z.x)*.5,C.y=(S.y+Z.y)*.5,C.z=(S.z+Z.z)*.5;let G=h.magnitudeSquared(h.subtract(Z,C,Ka)),E=Math.sqrt(G),v=mJ;v.x=s.x,v.y=a.y,v.z=c.z;let F=hJ;F.x=d.x,F.y=u.y,F.z=m.z;let P=h.midpoint(v,F,fJ),N=0;for(b=0;bN&&(N=g);let R=h.magnitudeSquared(h.subtract(r,C,Ka));if(R>G){let A=Math.sqrt(R);E=(E+A)*.5,G=E*E;let W=A-E;C.x=(E*C.x+W*r.x)/A,C.y=(E*C.y+W*r.y)/A,C.z=(E*C.z+W*r.z)/A}}return Ec.x&&h.clone(o,c),gd.y&&h.clone(o,d),Ru.z&&h.clone(o,u)}let b=h.magnitudeSquared(h.subtract(c,r,Ka)),f=h.magnitudeSquared(h.subtract(d,s,Ka)),y=h.magnitudeSquared(h.subtract(u,a,Ka)),_=r,S=c,Z=b;f>Z&&(Z=f,_=s,S=d),y>Z&&(_=a,S=u);let V=uJ;V.x=(_.x+S.x)*.5,V.y=(_.y+S.y)*.5,V.z=(_.z+S.z)*.5;let C=h.magnitudeSquared(h.subtract(S,V,Ka)),G=Math.sqrt(C),E=mJ;E.x=r.x,E.y=s.y,E.z=a.z;let v=hJ;v.x=c.x,v.y=d.y,v.z=u.z;let F=h.midpoint(E,v,fJ),P=0;for(p=0;pP&&(P=N);let g=h.magnitudeSquared(h.subtract(o,V,Ka));if(g>C){let R=Math.sqrt(g);G=(G+R)*.5,C=G*G;let A=R-G;V.x=(G*V.x+A*o.x)/R,V.y=(G*V.y+A*o.y)/R,V.z=(G*V.z+A*o.z)/R}}return G=d+a)return t.clone(i),i;if(a>=d+r)return n.clone(i),i;let u=(r+d+a)*.5,m=h.multiplyByScalar(c,(-r+u)/d,PXe);return h.add(m,o,m),h.clone(m,i.center),i.radius=u,i}static expand(t,n,i){i=e.clone(t,i);let o=h.magnitude(h.subtract(n,i.center,XXe));return o>i.radius&&(i.radius=o),i}static intersectPlane(t,n){let i=t.center,o=t.radius,r=n.normal,s=h.dot(r,i)+n.distance;return s<-o?jt.OUTSIDE:s=r&&(u=r-1);let m=(o.north-t.latitude)/c|0;return m>=s&&(m=s-1),l(i)?(i.x=u,i.y=m,i):new M(u,m)}},Ji=gJ;var Uae=new h,Dae=new h,Oae=new fe,yJ=new h,OXe=new h,Bae=new le,BXe=new Ji,dA=[new fe,new fe,new fe,new fe],uA=new M,Rs={};Rs.initialize=function(){let e=Rs._initPromise;return l(e)||(e=ve.fetchJson(qt("Assets/approximateTerrainHeights.json")).then(function(t){Rs._terrainHeights=t}),Rs._initPromise=e),e};Rs.getMinimumMaximumHeights=function(e,t){t=t??ie.default;let n=zae(e),i=Rs._defaultMinTerrainHeight,o=Rs._defaultMaxTerrainHeight;if(l(n)){let r=`${n.level}-${n.x}-${n.y}`,s=Rs._terrainHeights[r];l(s)&&(i=s[0],o=s[1]),t.cartographicToCartesian(re.northeast(e,Oae),Uae),t.cartographicToCartesian(re.southwest(e,Oae),Dae),h.midpoint(Dae,Uae,yJ);let a=t.scaleToGeodeticSurface(yJ,OXe);if(l(a)){let c=h.distance(yJ,a);i=Math.min(i,-c)}else i=Rs._defaultMinTerrainHeight}return i=Math.max(Rs._defaultMinTerrainHeight,i),{minimumTerrainHeight:i,maximumTerrainHeight:o}};Rs.getBoundingSphere=function(e,t){t=t??ie.default;let n=zae(e),i=Rs._defaultMaxTerrainHeight;if(l(n)){let r=`${n.level}-${n.x}-${n.y}`,s=Rs._terrainHeights[r];l(s)&&(i=s[1])}let o=le.fromRectangle3D(e,t,0);return le.fromRectangle3D(e,t,i,Bae),le.union(o,Bae,o)};function zae(e){fe.fromRadians(e.east,e.north,0,dA[0]),fe.fromRadians(e.west,e.north,0,dA[1]),fe.fromRadians(e.east,e.south,0,dA[2]),fe.fromRadians(e.west,e.south,0,dA[3]);let t=0,n=0,i=0,o=0,r=Rs._terrainHeightsMaxLevel,s;for(s=0;s<=r;++s){let a=!1;for(let c=0;c<4;++c){let d=dA[c];if(BXe.positionToTileXY(d,s,uA),c===0)i=uA.x,o=uA.y;else if(i!==uA.x||o!==uA.y){a=!0;break}}if(a)break;t=i,n=o}if(s!==0)return{x:t,y:n,level:s>r?r:s-1}}Rs._terrainHeightsMaxLevel=6;Rs._defaultMaxTerrainHeight=9e3;Rs._defaultMinTerrainHeight=-1e5;Rs._terrainHeights=void 0;Rs._initPromise=void 0;Object.defineProperties(Rs,{initialized:{get:function(){return l(Rs._terrainHeights)}}});var Ei=Rs;var WJt=x(T(),1);var UBt=x(T(),1);var YBt=x(T(),1);/*! @license DOMPurify 3.4.13 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.13/LICENSE */function Hae(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,i=Array(t);n2?i-2:0),r=2;r1?n-1:0),o=1;o"u"?null:aa(BigInt.prototype.toString),$ae=typeof Symbol>"u"?null:aa(Symbol.prototype.toString),ja=aa(Object.prototype.hasOwnProperty),hA=aa(Object.prototype.toString),Ja=aa(RegExp.prototype.test),CT=rNe(TypeError);function aa(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,i=new Array(n>1?n-1:0),o=1;o2&&arguments[2]!==void 0?arguments[2]:fA;if(Kae&&Kae(e,null),!ry(t))return e;let i=t.length;for(;i--;){let o=t[i];if(typeof o=="string"){let r=n(o);r!==o&&(QXe(t)||(t[i]=r),o=r)}e[o]=!0}return e}function sNe(e){for(let t=0;t/g),hNe=Sc(/\${[\w\W]*/g),fNe=Sc(/^data-[\-\w.\u00B7-\uFFFF]+$/),pNe=Sc(/^aria-[\-\w]+$/),oce=Sc(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),bNe=Sc(/^(?:\w+script|data):/i),gNe=Sc(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),yNe=Sc(/^html$/i),xNe=Sc(/^[a-z][.\w]*(-[.\w]+)+$/i),rce=Sc(/<[/\w!]/g),sce=Sc(/<[/\w]/g),TNe=Sc(/<\/no(script|embed|frames)/i),_Ne=Sc(/\/>/i),iu={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},SNe=function(){return typeof window>"u"?null:window},ZNe=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let i=null,o="data-tt-policy-suffix";n&&n.hasAttribute(o)&&(i=n.getAttribute(o));let r="dompurify"+(i?"#"+i:"");try{return t.createPolicy(r,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+r+" could not be created."),null}},ace=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},oy=function(t,n,i,o){return ja(t,n)&&ry(t[n])?go(o.base?Uc(o.base):{},t[n],o.transform):i};function dce(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:SNe(),t=ht=>dce(ht);if(t.version="3.4.13",t.removed=[],!e||!e.document||e.document.nodeType!==iu.document||!e.Element)return t.isSupported=!1,t;let n=e.document,i=n,o=i.currentScript;e.DocumentFragment;let r=e.HTMLTemplateElement,s=e.Node,a=e.Element,c=e.NodeFilter,d=e.NamedNodeMap;d===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let u=e.DOMParser,m=e.trustedTypes,p=a.prototype,b=Sh(p,"cloneNode"),f=Sh(p,"remove"),y=Sh(p,"nextSibling"),_=Sh(p,"childNodes"),S=Sh(p,"parentNode"),Z=Sh(p,"shadowRoot"),V=Sh(p,"attributes"),C=s&&s.prototype?Sh(s.prototype,"nodeType"):null,G=s&&s.prototype?Sh(s.prototype,"nodeName"):null,E=s&&s.prototype?Sh(s.prototype,"ownerDocument"):null;if(typeof r=="function"){let ht=n.createElement("template");ht.content&&ht.content.ownerDocument&&(n=ht.content.ownerDocument)}let v,F="",P,N=!1,g=0,R=function(){if(g>0)throw CT('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},A=function(ye){R(),g++;try{return v.createHTML(ye)}finally{g--}},W=function(ye){R(),g++;try{return v.createScriptURL(ye)}finally{g--}},X=function(){return N||(P=ZNe(m,o),N=!0),P},Y=n,D=Y.implementation,k=Y.createNodeIterator,O=Y.createDocumentFragment,w=Y.getElementsByTagName,z=i.importNode,H=ace();t.isSupported=typeof cce=="function"&&typeof S=="function"&&D&&D.createHTMLDocument!==void 0;let te=uNe,K=mNe,$=hNe,ee=fNe,de=pNe,_e=bNe,ue=gNe,Ce=xNe,Te=oce,Re=null,Le=go({},[...ece,...TJ,..._J,...SJ,...tce]),Xe=null,qe=go({},[...nce,...ZJ,...ice,...E5]),je=Object.seal(_V(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),_t=null,Qe=null,Ee=Object.seal(_V(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),He=!0,Rt=!0,dt=!1,gn=!0,Bt=!1,St=!0,vt=!1,Wn=!1,at=null,ft=null,Ai=!1,En=!1,Ni=!1,fo=!1,Yi=!0,Ki=!1,ci="user-content-",oi=!0,Gn=!1,ri={},Ao=null,Zs=go({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]),ws=null,ia=go({},["audio","video","img","source","image","track"]),oa=null,ar=go({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),yi="http://www.w3.org/1998/Math/MathML",cr="http://www.w3.org/2000/svg",Fi="http://www.w3.org/1999/xhtml",Ur=Fi,Ii=!1,Eo=null,Vs=go({},[yi,cr,Fi],xJ),Lr=_c(["mi","mo","mn","ms","mtext"]),nm=go({},Lr),im=_c(["annotation-xml"]),yc=go({},im),Hg=go({},["title","style","font","a","script"]),Wr=null,Ra=["application/xhtml+xml","text/html"],Kg="text/html",li=null,za=null,Ha=n.createElement("form"),ra=function(ye){return ye instanceof RegExp||ye instanceof Function},Cs=function(){let ye=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(za&&za===ye)return;(!ye||typeof ye!="object")&&(ye={}),ye=Uc(ye),Wr=Ra.indexOf(ye.PARSER_MEDIA_TYPE)===-1?Kg:ye.PARSER_MEDIA_TYPE,li=Wr==="application/xhtml+xml"?xJ:fA,Re=oy(ye,"ALLOWED_TAGS",Le,{transform:li}),Xe=oy(ye,"ALLOWED_ATTR",qe,{transform:li}),Eo=oy(ye,"ALLOWED_NAMESPACES",Vs,{transform:xJ}),oa=oy(ye,"ADD_URI_SAFE_ATTR",ar,{transform:li,base:ar}),ws=oy(ye,"ADD_DATA_URI_TAGS",ia,{transform:li,base:ia}),Ao=oy(ye,"FORBID_CONTENTS",Zs,{transform:li}),_t=oy(ye,"FORBID_TAGS",Uc({}),{transform:li}),Qe=oy(ye,"FORBID_ATTR",Uc({}),{transform:li}),ri=ja(ye,"USE_PROFILES")?ye.USE_PROFILES&&typeof ye.USE_PROFILES=="object"?Uc(ye.USE_PROFILES):ye.USE_PROFILES:!1,He=ye.ALLOW_ARIA_ATTR!==!1,Rt=ye.ALLOW_DATA_ATTR!==!1,dt=ye.ALLOW_UNKNOWN_PROTOCOLS||!1,gn=ye.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Bt=ye.SAFE_FOR_TEMPLATES||!1,St=ye.SAFE_FOR_XML!==!1,vt=ye.WHOLE_DOCUMENT||!1,En=ye.RETURN_DOM||!1,Ni=ye.RETURN_DOM_FRAGMENT||!1,fo=ye.RETURN_TRUSTED_TYPE||!1,Ai=ye.FORCE_BODY||!1,Yi=ye.SANITIZE_DOM!==!1,Ki=ye.SANITIZE_NAMED_PROPS||!1,oi=ye.KEEP_CONTENT!==!1,Gn=ye.IN_PLACE||!1,Te=cNe(ye.ALLOWED_URI_REGEXP)?ye.ALLOWED_URI_REGEXP:oce,Ur=typeof ye.NAMESPACE=="string"?ye.NAMESPACE:Fi,nm=ja(ye,"MATHML_TEXT_INTEGRATION_POINTS")&&ye.MATHML_TEXT_INTEGRATION_POINTS&&typeof ye.MATHML_TEXT_INTEGRATION_POINTS=="object"?Uc(ye.MATHML_TEXT_INTEGRATION_POINTS):go({},Lr),yc=ja(ye,"HTML_INTEGRATION_POINTS")&&ye.HTML_INTEGRATION_POINTS&&typeof ye.HTML_INTEGRATION_POINTS=="object"?Uc(ye.HTML_INTEGRATION_POINTS):go({},im);let Ne=ja(ye,"CUSTOM_ELEMENT_HANDLING")&&ye.CUSTOM_ELEMENT_HANDLING&&typeof ye.CUSTOM_ELEMENT_HANDLING=="object"?Uc(ye.CUSTOM_ELEMENT_HANDLING):_V(null);if(je=_V(null),ja(Ne,"tagNameCheck")&&ra(Ne.tagNameCheck)&&(je.tagNameCheck=Ne.tagNameCheck),ja(Ne,"attributeNameCheck")&&ra(Ne.attributeNameCheck)&&(je.attributeNameCheck=Ne.attributeNameCheck),ja(Ne,"allowCustomizedBuiltInElements")&&typeof Ne.allowCustomizedBuiltInElements=="boolean"&&(je.allowCustomizedBuiltInElements=Ne.allowCustomizedBuiltInElements),Sc(je),Bt&&(Rt=!1),Ni&&(En=!0),ri&&(Re=go({},tce),Xe=_V(null),ri.html===!0&&(go(Re,ece),go(Xe,nce)),ri.svg===!0&&(go(Re,TJ),go(Xe,ZJ),go(Xe,E5)),ri.svgFilters===!0&&(go(Re,_J),go(Xe,ZJ),go(Xe,E5)),ri.mathMl===!0&&(go(Re,SJ),go(Xe,ice),go(Xe,E5))),Ee.tagCheck=null,Ee.attributeCheck=null,ja(ye,"ADD_TAGS")&&(typeof ye.ADD_TAGS=="function"?Ee.tagCheck=ye.ADD_TAGS:ry(ye.ADD_TAGS)&&(Re===Le&&(Re=Uc(Re)),go(Re,ye.ADD_TAGS,li))),ja(ye,"ADD_ATTR")&&(typeof ye.ADD_ATTR=="function"?Ee.attributeCheck=ye.ADD_ATTR:ry(ye.ADD_ATTR)&&(Xe===qe&&(Xe=Uc(Xe)),go(Xe,ye.ADD_ATTR,li))),ja(ye,"ADD_URI_SAFE_ATTR")&&ry(ye.ADD_URI_SAFE_ATTR)&&go(oa,ye.ADD_URI_SAFE_ATTR,li),ja(ye,"FORBID_CONTENTS")&&ry(ye.FORBID_CONTENTS)&&(Ao===Zs&&(Ao=Uc(Ao)),go(Ao,ye.FORBID_CONTENTS,li)),ja(ye,"ADD_FORBID_CONTENTS")&&ry(ye.ADD_FORBID_CONTENTS)&&(Ao===Zs&&(Ao=Uc(Ao)),go(Ao,ye.ADD_FORBID_CONTENTS,li)),oi&&(Re["#text"]=!0),vt&&go(Re,["html","head","body"]),Re.table&&(go(Re,["tbody"]),delete _t.tbody),ye.TRUSTED_TYPES_POLICY){if(typeof ye.TRUSTED_TYPES_POLICY.createHTML!="function")throw CT('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof ye.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw CT('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');let ut=v;v=ye.TRUSTED_TYPES_POLICY;try{F=A("")}catch(rn){throw v=ut,rn}}else ye.TRUSTED_TYPES_POLICY===null?(v=void 0,F=""):(v===void 0&&(v=X()),v&&typeof F=="string"&&(F=A("")));_c&&_c(ye),za=ye},om=go({},[...TJ,..._J,...lNe]),hT=go({},[...SJ,...dNe]),fK=function(ye,Ne,ut){return Ne.namespaceURI===Fi?ye==="svg":Ne.namespaceURI===yi?ye==="svg"&&(ut==="annotation-xml"||nm[ut]):!!om[ye]},DG=function(ye,Ne,ut){return Ne.namespaceURI===Fi?ye==="math":Ne.namespaceURI===cr?ye==="math"&&yc[ut]:!!hT[ye]},pK=function(ye,Ne,ut){return Ne.namespaceURI===cr&&!yc[ut]||Ne.namespaceURI===yi&&!nm[ut]?!1:!hT[ye]&&(Hg[ye]||!om[ye])},bK=function(ye){let Ne=S(ye);(!Ne||!Ne.tagName)&&(Ne={namespaceURI:Ur,tagName:"template"});let ut=fA(ye.tagName),rn=fA(Ne.tagName);return Eo[ye.namespaceURI]?ye.namespaceURI===cr?fK(ut,Ne,rn):ye.namespaceURI===yi?DG(ut,Ne,rn):ye.namespaceURI===Fi?pK(ut,Ne,rn):!!(Wr==="application/xhtml+xml"&&Eo[ye.namespaceURI]):!1},np=function(ye){TV(t.removed,{element:ye});try{S(ye).removeChild(ye)}catch{if(f(ye),!S(ye))throw CT("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},iV=function(ye){Jg(ye);let Ne=_(ye);if(Ne){let rn=[];xV(Ne,An=>{TV(rn,An)}),xV(rn,An=>{try{f(An)}catch{}})}let ut=V(ye);if(ut)for(let rn=ut.length-1;rn>=0;--rn){let An=ut[rn],Pn=An&&An.name;if(typeof Pn=="string")try{ye.removeAttribute(Pn)}catch{}}},C0=function(ye,Ne){try{TV(t.removed,{attribute:Ne.getAttributeNode(ye),from:Ne})}catch{TV(t.removed,{attribute:null,from:Ne})}if(Ne.removeAttribute(ye),ye==="is")if(En||Ni)try{np(Ne)}catch{}else try{Ne.setAttribute(ye,"")}catch{}},OG=function(ye){let Ne=V(ye);if(Ne)for(let ut=Ne.length-1;ut>=0;--ut){let rn=Ne[ut],An=rn&&rn.name;if(!(typeof An!="string"||Xe[li(An)]))try{ye.removeAttribute(An)}catch{}}},Jg=function(ye){let Ne=[ye];for(;Ne.length>0;){let ut=Ne.pop();(C?C(ut):ut.nodeType)===iu.element&&OG(ut);let An=_(ut);if(An)for(let Pn=An.length-1;Pn>=0;--Pn)Ne.push(An[Pn])}},BG=function(ye){if(!St)return;let Ne=[ye];for(;Ne.length>0;){let ut=Ne.pop(),rn=C?C(ut):ut.nodeType;if(rn===iu.processingInstruction||rn===iu.comment&&Ja(sce,ut.data)){try{f(ut)}catch{}continue}if(rn===iu.element){let Pn=ut,po=li(G?G(ut):ut.nodeName);try{Pn.hasAttribute&&Pn.hasAttribute("patchsrc")&&Pn.removeAttribute("patchsrc"),Pn.hasAttribute&&Pn.hasAttribute("for")&&po!=="label"&&po!=="output"&&Pn.removeAttribute("for")}catch{}}let An=_(ut);if(An)for(let Pn=An.length-1;Pn>=0;--Pn)Ne.push(An[Pn])}},zU=function(ye){let Ne=null,ut=null;if(Ai)ye=""+ye;else{let Pn=jae(ye,/^[\r\n\t ]+/);ut=Pn&&Pn[0]}Wr==="application/xhtml+xml"&&Ur===Fi&&(ye=''+ye+"");let rn=v?A(ye):ye;if(Ur===Fi)try{Ne=new u().parseFromString(rn,Wr)}catch{}if(!Ne||!Ne.documentElement){Ne=D.createDocument(Ur,"template",null);try{Ne.documentElement.innerHTML=Ii?F:rn}catch{}}let An=Ne.body||Ne.documentElement;return ye&&ut&&An.insertBefore(n.createTextNode(ut),An.childNodes[0]||null),Ur===Fi?w.call(Ne,vt?"html":"body")[0]:vt?Ne.documentElement:An},zG=function(ye){let Ne=E?E(ye):ye.ownerDocument;return k.call(Ne||ye,ye,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},jg=function(ye){return ye=mA(ye,te," "),ye=mA(ye,K," "),ye=mA(ye,$," "),ye},rm=function(ye){var Ne;ye.normalize();let ut=E?E(ye):ye.ownerDocument,rn=k.call(ut||ye,ye,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null),An=rn.nextNode();for(;An;)An.data=jg(An.data),An=rn.nextNode();let Pn=(Ne=ye.querySelectorAll)===null||Ne===void 0?void 0:Ne.call(ye,"template");Pn&&xV(Pn,po=>{G0(po.content)&&rm(po.content)})},R0=function(ye){let Ne=G?G(ye):null;return typeof Ne!="string"||li(Ne)!=="form"?!1:typeof ye.nodeName!="string"||typeof ye.textContent!="string"||typeof ye.removeChild!="function"||ye.attributes!==V(ye)||typeof ye.removeAttribute!="function"||typeof ye.setAttribute!="function"||typeof ye.namespaceURI!="string"||typeof ye.insertBefore!="function"||typeof ye.hasChildNodes!="function"||ye.nodeType!==C(ye)||ye.childNodes!==_(ye)},G0=function(ye){if(!C||typeof ye!="object"||ye===null)return!1;try{return C(ye)===iu.documentFragment}catch{return!1}},fT=function(ye){if(!C||typeof ye!="object"||ye===null)return!1;try{return typeof C(ye)=="number"}catch{return!1}};function Tl(ht,ye,Ne){ht.length!==0&&xV(ht,ut=>{ut.call(t,ye,Ne,za)})}let he=function(ye,Ne){return!!(St&&ye.hasChildNodes()&&!fT(ye.firstElementChild)&&Ja(rce,ye.textContent)&&Ja(rce,ye.innerHTML)||St&&ye.namespaceURI===Fi&&Ne==="style"&&fT(ye.firstElementChild)||ye.nodeType===iu.processingInstruction||St&&ye.nodeType===iu.comment&&Ja(sce,ye.data))},oe=function(ye,Ne,ut){if(!_t[Ne]&&mt(Ne)&&(je.tagNameCheck instanceof RegExp&&Ja(je.tagNameCheck,Ne)||je.tagNameCheck instanceof Function&&je.tagNameCheck(Ne)))return!1;if(oi&&!Ao[Ne]){let rn=S(ye),An=_(ye);if(An&&rn){let Pn=An.length;for(let po=Pn-1;po>=0;--po){let lr=ye===ut?b(An[po],!0):An[po];rn.insertBefore(lr,y(ye))}}}return np(ye),!0},Ze=function(ye,Ne,ut,rn){return ye.length===0?Ne:Ne===ut||Ne===rn?Uc(Ne):Ne},Ae=function(ye,Ne){if(Tl(H.beforeSanitizeElements,ye,null),ye!==Ne&&S(ye)===null)return Gn&&Jg(ye),!0;if(R0(ye))return np(ye),!0;let ut=li(G?G(ye):ye.nodeName);if(Re=Ze(H.uponSanitizeElement,Re,Le,at),Tl(H.uponSanitizeElement,ye,{tagName:ut,allowedTags:Re}),ye!==Ne&&S(ye)===null)return Gn&&Jg(ye),!0;if(he(ye,ut))return np(ye),!0;if(_t[ut]||!(Ee.tagCheck instanceof Function&&Ee.tagCheck(ut))&&!Re[ut]){let An=oe(ye,ut,Ne);return An===!1&&Tl(H.afterSanitizeElements,ye,null),An}if((C?C(ye):ye.nodeType)===iu.element&&!bK(ye)||(ut==="noscript"||ut==="noembed"||ut==="noframes")&&Ja(TNe,ye.innerHTML))return np(ye),!0;if(Bt&&ye.nodeType===iu.text){let An=jg(ye.textContent);ye.textContent!==An&&(TV(t.removed,{element:ye.cloneNode()}),ye.textContent=An)}return Tl(H.afterSanitizeElements,ye,null),!1},Ke=function(ye,Ne,ut){if(Qe[Ne]||St&&Ne==="patchsrc"||St&&Ne==="for"&&ye!=="label"&&ye!=="output"||Yi&&(Ne==="id"||Ne==="name")&&(ut in n||ut in Ha))return!1;let rn=Xe[Ne]||Ee.attributeCheck instanceof Function&&Ee.attributeCheck(Ne,ye);if(!(Rt&&Ja(ee,Ne))){if(!(He&&Ja(de,Ne))){if(rn){if(!oa[Ne]){if(!Ja(Te,mA(ut,ue,""))){if(!((Ne==="src"||Ne==="xlink:href"||Ne==="href")&&ye!=="script"&&Qae(ut,"data:")===0&&ws[ye])){if(!(dt&&!Ja(_e,mA(ut,ue,"")))){if(ut)return!1}}}}}else if(!(mt(ye)&&(je.tagNameCheck instanceof RegExp&&Ja(je.tagNameCheck,ye)||je.tagNameCheck instanceof Function&&je.tagNameCheck(ye))&&(je.attributeNameCheck instanceof RegExp&&Ja(je.attributeNameCheck,Ne)||je.attributeNameCheck instanceof Function&&je.attributeNameCheck(Ne,ye))||Ne==="is"&&je.allowCustomizedBuiltInElements&&(je.tagNameCheck instanceof RegExp&&Ja(je.tagNameCheck,ut)||je.tagNameCheck instanceof Function&&je.tagNameCheck(ut))))return!1}}return!0},Vt=go({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),mt=function(ye){return!Vt[fA(ye)]&&Ja(Ce,ye)},Gt=function(ye,Ne,ut,rn){if(v&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!ut)switch(m.getAttributeType(ye,Ne)){case"TrustedHTML":return A(rn);case"TrustedScriptURL":return W(rn)}return rn},_n=function(ye,Ne,ut,rn){try{ut?ye.setAttributeNS(ut,Ne,rn):ye.setAttribute(Ne,rn),R0(ye)?np(ye):Jae(t.removed)}catch{C0(Ne,ye)}},Hn=function(ye){Tl(H.beforeSanitizeAttributes,ye,null);let Ne=ye.attributes;if(!Ne||R0(ye))return;Xe=Ze(H.uponSanitizeAttribute,Xe,qe,ft);let ut={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Xe,forceKeepAttr:void 0},rn=Ne.length,An=li(ye.nodeName);for(;rn--;){let Pn=Ne[rn],po=Pn.name,lr=Pn.namespaceURI,xc=Pn.value,md=li(po),gK=xc,_l=po==="value"?gK:nNe(gK);if(ut.attrName=md,ut.attrValue=_l,ut.keepAttr=!0,ut.forceKeepAttr=void 0,Tl(H.uponSanitizeAttribute,ye,ut),_l=ut.attrValue,Ki&&(md==="id"||md==="name")&&Qae(_l,ci)!==0&&(C0(po,ye),_l=ci+_l),St&&Ja(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,_l)){C0(po,ye);continue}if(md==="attributename"&&jae(_l,"href")){C0(po,ye);continue}if(!ut.forceKeepAttr){if(!ut.keepAttr){C0(po,ye);continue}if(!gn&&Ja(_Ne,_l)){C0(po,ye);continue}if(Bt&&(_l=jg(_l)),!Ke(An,md,_l)){C0(po,ye);continue}_l=Gt(An,md,lr,_l),_l!==gK&&_n(ye,po,lr,_l)}}Tl(H.afterSanitizeAttributes,ye,null)},mn=function(ye){let Ne=null,ut=zG(ye);for(Tl(H.beforeSanitizeShadowDOM,ye,null);Ne=ut.nextNode();)if(Tl(H.uponSanitizeShadowNode,Ne,null),Ae(Ne,ye),Hn(Ne),G0(Ne.content)&&mn(Ne.content),(C?C(Ne):Ne.nodeType)===iu.element){let An=Z(Ne);G0(An)&&(qo(An),mn(An))}Tl(H.afterSanitizeShadowDOM,ye,null)},qo=function(ye){let Ne=[{node:ye,shadow:null}];for(;Ne.length>0;){let ut=Ne.pop();if(ut.shadow){mn(ut.shadow);continue}let rn=ut.node,Pn=(C?C(rn):rn.nodeType)===iu.element,po=_(rn);if(po)for(let lr=po.length-1;lr>=0;--lr)Ne.push({node:po[lr],shadow:null});if(Pn){let lr=G?G(rn):null;if(typeof lr=="string"&&li(lr)==="template"){let xc=rn.content;G0(xc)&&Ne.push({node:xc,shadow:null})}}if(Pn){let lr=Z(rn);G0(lr)&&Ne.push({node:null,shadow:lr},{node:lr,shadow:null})}}};return t.sanitize=function(ht){let ye=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ne=null,ut=null,rn=null,An=null;if(Ii=!ht,Ii&&(ht=""),typeof ht!="string"&&!fT(ht)&&(ht=aNe(ht),typeof ht!="string"))throw CT("dirty is not a string, aborting");if(!t.isSupported)return ht;Wn?(Re=at,Xe=ft):Cs(ye),(H.uponSanitizeElement.length>0||H.uponSanitizeAttribute.length>0)&&(Re=Uc(Re)),H.uponSanitizeAttribute.length>0&&(Xe=Uc(Xe)),t.removed=[];let Pn=Gn&&typeof ht!="string"&&fT(ht);if(Pn){BG(ht);let xc=G?G(ht):ht.nodeName;if(typeof xc=="string"){let md=li(xc);if(!Re[md]||_t[md])throw iV(ht),CT("root node is forbidden and cannot be sanitized in-place")}if(R0(ht))throw iV(ht),CT("root node is clobbered and cannot be sanitized in-place");try{qo(ht)}catch(md){throw iV(ht),md}}else if(fT(ht))Ne=zU(""),ut=Ne.ownerDocument.importNode(ht,!0),ut.nodeType===iu.element&&ut.nodeName==="BODY"||ut.nodeName==="HTML"?Ne=ut:Ne.appendChild(ut),qo(ut);else{if(!En&&!Bt&&!vt&&ht.indexOf("<")===-1)return v&&fo?A(ht):ht;if(Ne=zU(ht),!Ne)return En?null:fo?F:""}Ne&&Ai&&np(Ne.firstChild);let po=Pn?ht:Ne;try{let xc=zG(po);for(;rn=xc.nextNode();)Ae(rn,po),Hn(rn),G0(rn.content)&&mn(rn.content)}catch(xc){throw Pn&&(iV(ht),xV(t.removed,md=>{md.element&&Jg(md.element)})),xc}if(Pn)return xV(t.removed,xc=>{xc.element&&Jg(xc.element)}),Bt&&rm(ht),ht;if(En){if(Bt&&rm(Ne),Ni)for(An=O.call(Ne.ownerDocument);Ne.firstChild;)An.appendChild(Ne.firstChild);else An=Ne;return(Xe.shadowroot||Xe.shadowrootmode)&&(An=z.call(i,An,!0)),An}let lr=vt?Ne.outerHTML:Ne.innerHTML;return vt&&Re["!doctype"]&&Ne.ownerDocument&&Ne.ownerDocument.doctype&&Ne.ownerDocument.doctype.name&&Ja(yNe,Ne.ownerDocument.doctype.name)&&(lr=" `+lr),Bt&&(lr=jg(lr)),v&&fo?A(lr):lr},t.setConfig=function(){let ht=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Cs(ht),Wn=!0,at=Re,ft=Xe},t.clearConfig=function(){za=null,Wn=!1,at=null,ft=null,v=P,F=""},t.isValidAttribute=function(ht,ye,Ne){za||Cs({});let ut=li(ht),rn=li(ye);return Ke(ut,rn,Ne)},t.addHook=function(ht,ye){typeof ye=="function"&&ja(H,ht)&&TV(H[ht],ye)},t.removeHook=function(ht,ye){if(ja(H,ht)){if(ye!==void 0){let Ne=eNe(H[ht],ye);return Ne===-1?void 0:tNe(H[ht],Ne,1)[0]}return Jae(H[ht])}},t.removeHooks=function(ht){ja(H,ht)&&(H[ht]=[])},t.removeAllHooks=function(){H=ace()},t}var uce=dce();var VNe=0,RJ={},GJ=class e{constructor(t,n){let i,o=t;l(RJ[o])?i=RJ[o]:(i=VNe++,RJ[o]=i),n=n??!1,this._id=i,this._html=t,this._showOnScreen=n,this._element=void 0}get html(){return this._html}get id(){return this._id}get showOnScreen(){return this._showOnScreen}set showOnScreen(t){this._showOnScreen=t}get element(){if(!l(this._element)){let t=uce.sanitize(this._html),n=document.createElement("div");n.className="cesium-credit-wrapper",n._creditId=this._id,n.style.display="inline",n.innerHTML=t;let i=n.querySelectorAll("a");for(let o=0;o0?jt.INSIDE:r+o<0?jt.OUTSIDE:jt.INTERSECTING};Qa.intersectAxisAlignedBoundingBox=function(e,t){return e.minimum.x<=t.maximum.x&&e.maximum.x>=t.minimum.x&&e.minimum.y<=t.maximum.y&&e.maximum.y>=t.minimum.y&&e.minimum.z<=t.maximum.z&&e.maximum.z>=t.minimum.z};Qa.prototype.clone=function(e){return Qa.clone(this,e)};Qa.prototype.intersectPlane=function(e){return Qa.intersectPlane(this,e)};Qa.prototype.intersectAxisAlignedBoundingBox=function(e){return Qa.intersectAxisAlignedBoundingBox(this,e)};Qa.prototype.equals=function(e){return Qa.equals(this,e)};var ou=Qa;var n3t=x(T(),1);function ap(e,t){this._ellipsoid=e,this._cameraPosition=new h,this._cameraPositionInScaledSpace=new h,this._distanceToLimbInScaledSpaceSquared=0,l(t)&&(this.cameraPosition=t)}Object.defineProperties(ap.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},cameraPosition:{get:function(){return this._cameraPosition},set:function(e){let n=this._ellipsoid.transformPositionToScaledSpace(e,this._cameraPositionInScaledSpace),i=h.magnitudeSquared(n)-1;h.clone(e,this._cameraPosition),this._cameraPositionInScaledSpace=n,this._distanceToLimbInScaledSpaceSquared=i}}});var hce=new h;ap.prototype.isPointVisible=function(e){let n=this._ellipsoid.transformPositionToScaledSpace(e,hce);return EJ(n,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};ap.prototype.isScaledSpacePointVisible=function(e){return EJ(e,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};var CNe=new h;ap.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid=function(e,t){let n=this._ellipsoid,i,o;return l(t)&&t<0&&n.minimumRadius>-t?(o=CNe,o.x=this._cameraPosition.x/(n.radii.x+t),o.y=this._cameraPosition.y/(n.radii.y+t),o.z=this._cameraPosition.z/(n.radii.z+t),i=o.x*o.x+o.y*o.y+o.z*o.z-1):(o=this._cameraPositionInScaledSpace,i=this._distanceToLimbInScaledSpaceSquared),EJ(e,o,i)};ap.prototype.computeHorizonCullingPoint=function(e,t,n){return bce(this._ellipsoid,e,t,n)};var fce=ie.clone(ie.UNIT_SPHERE);ap.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid=function(e,t,n,i){let o=pce(this._ellipsoid,n,fce);return bce(o,e,t,i)};ap.prototype.computeHorizonCullingPointFromVertices=function(e,t,n,i,o){return gce(this._ellipsoid,e,t,n,i,o)};ap.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid=function(e,t,n,i,o,r){let s=pce(this._ellipsoid,o,fce);return gce(s,e,t,n,i,r)};var RNe=[];ap.prototype.computeHorizonCullingPointFromRectangle=function(e,t,n){let i=re.subsample(e,t,0,RNe),o=le.fromPoints(i);if(!(h.magnitude(o.center)<.1*t.minimumRadius))return this.computeHorizonCullingPoint(o.center,i,n)};var GNe=new h;function pce(e,t,n){if(l(t)&&t<0&&e.minimumRadius>-t){let i=h.fromElements(e.radii.x+t,e.radii.y+t,e.radii.z+t,GNe);e=ie.fromCartesian3(i,n)}return e}function bce(e,t,n,i){l(i)||(i=new h);let o=Tce(e,t),r=0;for(let s=0,a=n.length;s0:s>o&&s*s/h.magnitudeSquared(r)>o)}var ANe=new h,ENe=new h;function yce(e,t,n){let i=e.transformPositionToScaledSpace(t,ANe),o=h.magnitudeSquared(i),r=Math.sqrt(o),s=h.divideByScalar(i,r,ENe);o=Math.max(1,o),r=Math.max(1,r);let a=h.dot(s,n),c=h.magnitude(h.cross(s,n,s)),d=1/r,u=Math.sqrt(o-1)*d;return 1/(a*d-c*u)}function xce(e,t,n){if(!(t<=0||t===1/0||t!==t))return h.multiplyByScalar(e,t,n)}var AJ=new h;function Tce(e,t){return h.equals(t,h.ZERO)?t:(e.transformPositionToScaledSpace(t,AJ),h.normalize(AJ,AJ))}var Zh=ap;var lzt=x(T(),1);var H3t=x(T(),1);var A3t=x(T(),1);var r3t=x(T(),1);var LJ={};LJ.computeDiscriminant=function(e,t,n){return t*t-4*e*n};function _ce(e,t,n){let i=e+t;return L.sign(e)!==L.sign(t)&&Math.abs(i/Math.max(Math.abs(e),Math.abs(t)))d&&d/c0?[a/e,n/a]:[n/a,a/e]};var Cl=LJ;var h3t=x(T(),1);var c3t=x(T(),1);var vJ={};vJ.computeDiscriminant=function(e,t,n,i){let o=e*e,r=t*t,s=n*n,a=i*i;return 18*e*t*n*i+r*s-27*o*a-4*(e*s*n+r*t*i)};function WJ(e,t,n,i){let o=e,r=t/3,s=n/3,a=i,c=o*s,d=r*a,u=r*r,m=s*s,p=o*s-u,b=o*a-r*s,f=r*a-m,y=4*p*f-b*b,_,S;if(y<0){let z,H,te;u*d>=c*m?(z=o,H=p,te=-2*r*p+o*b):(z=a,H=f,te=-a*b+2*s*f);let $=-(te<0?-1:1)*Math.abs(z)*Math.sqrt(-y);S=-te+$;let ee=S/2,de=ee<0?-Math.pow(-ee,1/3):Math.pow(ee,1/3),_e=S===$?-de:-H/de;return _=H<=0?de+_e:-te/(de*de+_e*_e+H),u*d>=c*m?[(_-r)/o]:[-a/(_+s)]}let Z=p,V=-2*r*p+o*b,C=f,G=-a*b+2*s*f,E=Math.sqrt(y),v=Math.sqrt(3)/2,F=Math.abs(Math.atan2(o*E,-V)/3);_=2*Math.sqrt(-Z);let P=Math.cos(F);S=_*P;let N=_*(-P/2-v*Math.sin(F)),g=S+N>2*r?S-r:N-r,R=o,A=g/R;F=Math.abs(Math.atan2(a*E,-G)/3),_=2*Math.sqrt(-C),P=Math.cos(F),S=_*P,N=_*(-P/2-v*Math.sin(F));let W=-a,X=S+N<2*s?S+s:N+s,Y=W/X,D=R*X,k=-g*X-R*W,O=g*W,w=(s*k-r*O)/(-r*k+s*D);return A<=w?A<=Y?w<=Y?[A,w,Y]:[A,Y,w]:[Y,A,w]:A<=Y?[w,A,Y]:w<=Y?[w,Y,A]:[Y,w,A]}vJ.computeRealRoots=function(e,t,n,i){let o,r;if(e===0)return Cl.computeRealRoots(t,n,i);if(t===0){if(n===0){if(i===0)return[0,0,0];r=-i/e;let s=r<0?-Math.pow(-r,1/3):Math.pow(r,1/3);return[s,s,s]}else if(i===0)return o=Cl.computeRealRoots(e,0,n),o.Length===0?[0]:[o[0],0,o[1]];return WJ(e,0,n,i)}else{if(n===0)return i===0?(r=-t/e,r<0?[r,0,0]:[0,0,r]):WJ(e,t,0,i);if(i===0)return o=Cl.computeRealRoots(e,t,n),o.length===0?[0]:o[1]<=0?[o[0],o[1],0]:o[0]>=0?[0,o[0],o[1]]:[o[0],0,o[1]]}return WJ(e,t,n,i)};var RT=vJ;var FJ={};FJ.computeDiscriminant=function(e,t,n,i,o){let r=e*e,s=r*e,a=t*t,c=a*t,d=n*n,u=d*n,m=i*i,p=m*i,b=o*o,f=b*o;return a*d*m-4*c*p-4*e*u*m+18*e*t*n*p-27*r*m*m+256*s*f+o*(18*c*n*i-4*a*u+16*e*d*d-80*e*t*d*i-6*e*a*m+144*r*n*m)+b*(144*e*a*n-27*a*a-128*r*d-192*r*t*i)};function Vh(e,t,n,i){let o=e*e,r=t-3*o/8,s=n-t*e/2+o*e/8,a=i-n*e/4+t*o/16-3*o*o/256,c=RT.computeRealRoots(1,2*r,r*r-4*a,-s*s);if(c.length>0){let d=-e/4,u=c[c.length-1];if(Math.abs(u)=0&&b>=0){let y=Math.sqrt(p),_=Math.sqrt(b);return[d-_,d-y,d+y,d+_]}else{if(p>=0&&b<0)return f=Math.sqrt(p),[d-f,d+f];if(p<0&&b>=0)return f=Math.sqrt(b),[d-f,d+f]}}return[]}else if(u>0){let m=Math.sqrt(u),p=(r+u-s/m)/2,b=(r+u+s/m)/2,f=Cl.computeRealRoots(1,m,p),y=Cl.computeRealRoots(1,-m,b);return f.length!==0?(f[0]+=d,f[1]+=d,y.length!==0?(y[0]+=d,y[1]+=d,f[1]<=y[0]?[f[0],f[1],y[0],y[1]]:y[1]<=f[0]?[y[0],y[1],f[0],f[1]]:f[0]>=y[0]&&f[1]<=y[1]?[y[0],f[0],f[1],y[1]]:y[0]>=f[0]&&y[1]<=f[1]?[f[0],y[0],y[1],f[1]]:f[0]>y[0]&&f[0]0){let m=u[0],p=t-m,b=p*p,f=e/2,y=p/2,_=b-4*i,S=b+4*Math.abs(i),Z=s-4*m,V=s+4*Math.abs(m),C,G;if(m<0||_*V=g[0]&&N[1]<=g[1]?[g[0],N[0],N[1],g[1]]:g[0]>=N[0]&&g[1]<=N[1]?[N[0],g[0],g[1],N[1]]:N[0]>g[0]&&N[0]u)||(p=h.cross(m,a,Zce),f=h.dot(s,p),f<0||b+f>u))return;y=h.dot(c,p)/u}else{if(Math.abs(u)1||(p=h.cross(m,a,Zce),f=h.dot(s,p)*_,f<0||b+f>1))return;y=h.dot(c,p)*_}return y};$o.rayTriangle=function(e,t,n,i,o,r){let s=$o.rayTriangleParametric(e,t,n,i,o);if(!(!l(s)||s<0))return l(r)||(r=new h),h.multiplyByScalar(e.direction,s,r),h.add(e.origin,r,r)};var vNe=new fn;$o.lineSegmentTriangle=function(e,t,n,i,o,r,s){let a=vNe;h.clone(e,a.origin),h.subtract(t,e,a.direction),h.normalize(a.direction,a.direction);let c=$o.rayTriangleParametric(a,n,i,o,r);if(!(!l(c)||c<0||c>h.distance(e,t)))return l(s)||(s=new h),h.multiplyByScalar(a.direction,c,s),h.add(a.origin,s,s)};function FNe(e,t,n,i){let o=t*t-4*e*n;if(o<0)return;if(o>0){let s=1/(2*e),a=Math.sqrt(o),c=(-t+a)*s,d=(-t-a)*s;return cs))return i.start=Math.max(i.start,0),i.stop=Math.min(i.stop,s),i};var XNe=new h,NNe=new h;$o.rayEllipsoid=function(e,t){let n=t.oneOverRadii,i=h.multiplyComponents(n,e.origin,XNe),o=h.multiplyComponents(n,e.direction,NNe),r=h.magnitudeSquared(i),s=h.dot(i,o),a,c,d,u,m;if(r>1){if(s>=0)return;let p=s*s;if(a=r-1,c=h.magnitudeSquared(o),d=c*a,pd){u=s*s-d,m=-s+Math.sqrt(u);let f=m/c,y=a/m;return fo.start?i.start:o.start,n.stop=i.stopo.stop||o.start>i.stop)&&!(n.start>r.stop||r.start>n.stop))return r.start>n.start&&(n.start=r.start),r.stop0?b.push(new h(i,o*P,o*-R)):R!==0?(b.push(new h(i,o*P,o*-R)),b.push(new h(i,o*P,o*R)),++F):b.push(new h(i,o*P,o*R))}return b};var XJ=new h,Vce=new h,Cce=new h,v5=new h,kNe=new h,UNe=new q,DNe=new q,ONe=new q,BNe=new q,zNe=new q,Rce=new q,Gce=new q,Ace=new h,HNe=new h,KNe=new fe;$o.grazingAltitudeLocation=function(e,t){let n=e.origin,i=e.direction;if(!h.equals(n,h.ZERO)){let E=t.geodeticSurfaceNormal(n,XJ);if(h.dot(i,E)>=0)return n}let o=l(this.rayEllipsoid(e,t)),r=t.transformPositionToScaledSpace(i,XJ),s=h.normalize(r,r),a=h.mostOrthogonalAxis(r,v5),c=h.normalize(h.cross(a,s,Vce),Vce),d=h.normalize(h.cross(s,c,Cce),Cce),u=UNe;u[0]=s.x,u[1]=s.y,u[2]=s.z,u[3]=c.x,u[4]=c.y,u[5]=c.z,u[6]=d.x,u[7]=d.y,u[8]=d.z;let m=q.transpose(u,DNe),p=q.fromScale(t.radii,ONe),b=q.fromScale(t.oneOverRadii,BNe),f=zNe;f[0]=0,f[1]=-i.z,f[2]=i.y,f[3]=i.z,f[4]=0,f[5]=-i.x,f[6]=-i.y,f[7]=i.x,f[8]=0;let y=q.multiply(q.multiply(m,b,Rce),f,Rce),_=q.multiply(q.multiply(y,p,Gce),u,Gce),S=q.multiplyByVector(y,n,kNe),Z=$o.quadraticVectorExpression(_,h.negate(S,XJ),0,0,1),V,C,G=Z.length;if(G>0){let E=h.clone(h.ZERO,HNe),v=Number.NEGATIVE_INFINITY;for(let P=0;Pv&&(v=g,E=h.clone(V,E))}let F=t.cartesianToCartographic(E,KNe);return v=L.clamp(v,0,1),C=h.magnitude(h.subtract(E,n,v5))*Math.sqrt(1-v*v),C=o?-C:C,F.height=C,t.cartographicToCartesian(F,new h)}};var JNe=new h;$o.lineSegmentPlane=function(e,t,n,i){l(i)||(i=new h);let o=h.subtract(t,e,JNe),r=n.normal,s=h.dot(r,o);if(Math.abs(s)1))return h.multiplyByScalar(o,c,i),h.add(e,i,i),i};$o.trianglePlaneIntersection=function(e,t,n,i){let o=i.normal,r=i.distance,s=h.dot(o,e)+r<0,a=h.dot(o,t)+r<0,c=h.dot(o,n)+r<0,d=0;d+=s?1:0,d+=a?1:0,d+=c?1:0;let u,m;if((d===1||d===2)&&(u=new h,m=new h),d===1){if(s)return $o.lineSegmentPlane(e,t,i,u),$o.lineSegmentPlane(e,n,i,m),{positions:[e,t,n,u,m],indices:[0,3,4,1,2,4,1,4,3]};if(a)return $o.lineSegmentPlane(t,n,i,u),$o.lineSegmentPlane(t,e,i,m),{positions:[e,t,n,u,m],indices:[1,3,4,2,0,4,2,4,3]};if(c)return $o.lineSegmentPlane(n,e,i,u),$o.lineSegmentPlane(n,t,i,m),{positions:[e,t,n,u,m],indices:[2,3,4,0,1,4,0,4,3]}}else if(d===2)if(s)if(a){if(!c)return $o.lineSegmentPlane(e,n,i,u),$o.lineSegmentPlane(t,n,i,m),{positions:[e,t,n,u,m],indices:[0,1,4,0,4,3,2,3,4]}}else return $o.lineSegmentPlane(n,t,i,u),$o.lineSegmentPlane(e,t,i,m),{positions:[e,t,n,u,m],indices:[2,0,4,2,4,3,1,3,4]};else return $o.lineSegmentPlane(t,e,i,u),$o.lineSegmentPlane(n,e,i,m),{positions:[e,t,n,u,m],indices:[1,2,4,1,4,3,0,3,4]}};var di=$o;var I3t=x(T(),1);function Ga(e,t){this.normal=h.clone(e),this.distance=t}Ga.fromPointNormal=function(e,t,n){let i=-h.dot(t,e);return l(n)?(h.clone(t,n.normal),n.distance=i,n):new Ga(t,i)};var jNe=new h;Ga.fromCartesian4=function(e,t){let n=h.fromCartesian4(e,jNe),i=e.w;return l(t)?(h.clone(n,t.normal),t.distance=i,t):new Ga(n,i)};Ga.getPointDistance=function(e,t){return h.dot(e.normal,t)+e.distance};var QNe=new h;Ga.projectPointOntoPlane=function(e,t,n){l(n)||(n=new h);let i=Ga.getPointDistance(e,t),o=h.multiplyByScalar(e.normal,i,QNe);return h.subtract(t,o,n)};var qNe=new I,$Ne=new ce,eYe=new h;Ga.transform=function(e,t,n){let i=e.normal,o=e.distance,r=I.inverseTranspose(t,qNe),s=ce.fromElements(i.x,i.y,i.z,o,$Ne);s=I.multiplyByVector(r,s,s);let a=h.fromCartesian4(s,eYe);return s=ce.divideByScalar(s,h.magnitude(a),s),Ga.fromCartesian4(s,n)};Ga.clone=function(e,t){return l(t)?(h.clone(e.normal,t.normal),t.distance=e.distance,t):new Ga(e.normal,e.distance)};Ga.equals=function(e,t){return e.distance===t.distance&&h.equals(e.normal,t.normal)};Ga.ORIGIN_XY_PLANE=Object.freeze(new Ga(h.UNIT_Z,0));Ga.ORIGIN_YZ_PLANE=Object.freeze(new Ga(h.UNIT_X,0));Ga.ORIGIN_ZX_PLANE=Object.freeze(new Ga(h.UNIT_Y,0));var nn=Ga;var NJ=new ce;function cp(e,t){t=t??ie.default,e=t.scaleToGeodeticSurface(e);let n=bt.eastNorthUpToFixedFrame(e,t);this._ellipsoid=t,this._origin=e,this._xAxis=h.fromCartesian4(I.getColumn(n,0,NJ)),this._yAxis=h.fromCartesian4(I.getColumn(n,1,NJ));let i=h.fromCartesian4(I.getColumn(n,2,NJ));this._plane=nn.fromPointNormal(e,i)}Object.defineProperties(cp.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},origin:{get:function(){return this._origin}},plane:{get:function(){return this._plane}},xAxis:{get:function(){return this._xAxis}},yAxis:{get:function(){return this._yAxis}},zAxis:{get:function(){return this._plane.normal}}});var tYe=new ou;cp.fromPoints=function(e,t){let n=ou.fromPoints(e,tYe);return new cp(n.center,t)};var Wce=new fn,F5=new h;cp.prototype.projectPointOntoPlane=function(e,t){let n=Wce;n.origin=e,h.normalize(e,n.direction);let i=di.rayPlane(n,this._plane,F5);if(l(i)||(h.negate(n.direction,n.direction),i=di.rayPlane(n,this._plane,F5)),l(i)){let o=h.subtract(i,this._origin,i),r=h.dot(this._xAxis,o),s=h.dot(this._yAxis,o);return l(t)?(t.x=r,t.y=s,t):new M(r,s)}};cp.prototype.projectPointsOntoPlane=function(e,t){l(t)||(t=[]);let n=0,i=e.length;for(let o=0;o0?0:v.latitude,R=fe.fromRadians(N,e.north,n,hYe),A=fe.fromRadians(e.west,e.north,n,fYe),W=fe.fromRadians(e.west,g,n,pYe),X=fe.fromRadians(e.west,e.south,n,bYe),Y=fe.fromRadians(N,e.south,n,gYe),D=i.cartographicToCartesian(R,yYe),k=i.cartographicToCartesian(A,Ice),O=i.cartographicToCartesian(W,xYe),w=i.cartographicToCartesian(X,Pce),z=i.cartographicToCartesian(Y,TYe),H=P.projectPointToNearestOnPlane(D,_Ye),te=P.projectPointToNearestOnPlane(k,SYe),K=P.projectPointToNearestOnPlane(O,ZYe),$=P.projectPointToNearestOnPlane(w,VYe),ee=P.projectPointToNearestOnPlane(z,CYe);return r=Math.min(te.x,K.x,$.x),s=-r,c=Math.max(te.y,H.y),a=Math.min($.y,ee.y),A.height=X.height=t,k=i.cartographicToCartesian(A,Ice),w=i.cartographicToCartesian(X,Pce),d=Math.min(nn.getPointDistance(m,k),nn.getPointDistance(m,w)),u=n,vce(P.origin,P.xAxis,P.yAxis,P.zAxis,r,s,a,c,d,u,o)}let p=e.south>0,b=e.north<0,f=p?e.south:b?e.north:0,y=re.center(e,Fce).longitude,_=h.fromRadians(y,f,n,i,RYe);_.z=0;let Z=Math.abs(_.x)=c?jt.INSIDE:jt.INTERSECTING};var Yce=new h,wce=new h,Mce=new h,PYe=new h,Xce=new h,XYe=new h;so.distanceSquaredTo=function(e,t){let n=h.subtract(t,e.center,Nce),i=e.halfAxes,o=q.getColumn(i,0,Yce),r=q.getColumn(i,1,wce),s=q.getColumn(i,2,Mce),a=h.magnitude(o),c=h.magnitude(r),d=h.magnitude(s),u=!0,m=!0,p=!0;a>0?h.divideByScalar(o,a,o):u=!1,c>0?h.divideByScalar(r,c,r):m=!1,d>0?h.divideByScalar(s,d,s):p=!1;let b=!u+!m+!p,f,y,_;if(b===1){let C=o;f=r,y=s,m?p||(C=s,y=o):(C=r,f=o),_=h.cross(f,y,Xce),C===o?o=_:C===r?r=_:C===s&&(s=_)}else if(b===2){f=o,m?f=r:p&&(f=s);let C=h.UNIT_Y;C.equalsEpsilon(f,L.EPSILON3)&&(C=h.UNIT_X),y=h.cross(f,C,PYe),h.normalize(y,y),_=h.cross(f,y,Xce),h.normalize(_,_),f===o?(r=y,s=_):f===r?(s=y,o=_):f===s&&(o=y,r=_)}else b===3&&(o=h.UNIT_X,r=h.UNIT_Y,s=h.UNIT_Z);let S=XYe;S.x=h.dot(n,o),S.y=h.dot(n,r),S.z=h.dot(n,s);let Z=0,V;return S.x<-a?(V=S.x+a,Z+=V*V):S.x>a&&(V=S.x-a,Z+=V*V),S.y<-c?(V=S.y+c,Z+=V*V):S.y>c&&(V=S.y-c,Z+=V*V),S.z<-d?(V=S.z+d,Z+=V*V):S.z>d&&(V=S.z-d,Z+=V*V),Z};var NYe=new h,YYe=new h;so.computePlaneDistances=function(e,t,n,i){l(i)||(i=new Dr);let o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=e.center,a=e.halfAxes,c=q.getColumn(a,0,Yce),d=q.getColumn(a,1,wce),u=q.getColumn(a,2,Mce),m=h.add(c,d,NYe);h.add(m,u,m),h.add(m,s,m);let p=h.subtract(m,t,YYe),b=h.dot(n,p);return o=Math.min(b,o),r=Math.max(b,r),h.add(s,c,m),h.add(m,d,m),h.subtract(m,u,m),h.subtract(m,t,p),b=h.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),h.add(s,c,m),h.subtract(m,d,m),h.add(m,u,m),h.subtract(m,t,p),b=h.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),h.add(s,c,m),h.subtract(m,d,m),h.subtract(m,u,m),h.subtract(m,t,p),b=h.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),h.subtract(s,c,m),h.add(m,d,m),h.add(m,u,m),h.subtract(m,t,p),b=h.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),h.subtract(s,c,m),h.add(m,d,m),h.subtract(m,u,m),h.subtract(m,t,p),b=h.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),h.subtract(s,c,m),h.subtract(m,d,m),h.add(m,u,m),h.subtract(m,t,p),b=h.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),h.subtract(s,c,m),h.subtract(m,d,m),h.subtract(m,u,m),h.subtract(m,t,p),b=h.dot(n,p),o=Math.min(b,o),r=Math.max(b,r),i.start=o,i.stop=r,i};var wYe=new h,MYe=new h,kYe=new h;so.computeCorners=function(e,t){l(t)||(t=[new h,new h,new h,new h,new h,new h,new h,new h]);let n=e.center,i=e.halfAxes,o=q.getColumn(i,0,wYe),r=q.getColumn(i,1,MYe),s=q.getColumn(i,2,kYe);return h.clone(n,t[0]),h.subtract(t[0],o,t[0]),h.subtract(t[0],r,t[0]),h.subtract(t[0],s,t[0]),h.clone(n,t[1]),h.subtract(t[1],o,t[1]),h.subtract(t[1],r,t[1]),h.add(t[1],s,t[1]),h.clone(n,t[2]),h.subtract(t[2],o,t[2]),h.add(t[2],r,t[2]),h.subtract(t[2],s,t[2]),h.clone(n,t[3]),h.subtract(t[3],o,t[3]),h.add(t[3],r,t[3]),h.add(t[3],s,t[3]),h.clone(n,t[4]),h.add(t[4],o,t[4]),h.subtract(t[4],r,t[4]),h.subtract(t[4],s,t[4]),h.clone(n,t[5]),h.add(t[5],o,t[5]),h.subtract(t[5],r,t[5]),h.add(t[5],s,t[5]),h.clone(n,t[6]),h.add(t[6],o,t[6]),h.add(t[6],r,t[6]),h.subtract(t[6],s,t[6]),h.clone(n,t[7]),h.add(t[7],o,t[7]),h.add(t[7],r,t[7]),h.add(t[7],s,t[7]),t};var UYe=new q;so.computeTransformation=function(e,t){l(t)||(t=new I);let n=e.center,i=q.multiplyByUniformScale(e.halfAxes,2,UYe);return I.fromRotationTranslation(i,n,t)};var DYe=new le;so.isOccluded=function(e,t){let n=le.fromOrientedBoundingBox(e,DYe);return!t.isBoundingSphereVisible(n)};so.prototype.intersectPlane=function(e){return so.intersectPlane(this,e)};so.prototype.distanceSquaredTo=function(e){return so.distanceSquaredTo(this,e)};so.prototype.computePlaneDistances=function(e,t,n){return so.computePlaneDistances(this,e,t,n)};so.prototype.computeCorners=function(e){return so.computeCorners(this,e)};so.prototype.computeTransformation=function(e){return so.computeTransformation(this,e)};so.prototype.isOccluded=function(e){return so.isOccluded(this,e)};so.equals=function(e,t){return e===t||l(e)&&l(t)&&h.equals(e.center,t.center)&&q.equals(e.halfAxes,t.halfAxes)};so.prototype.clone=function(e){return so.clone(this,e)};so.prototype.equals=function(e){return so.equals(this,e)};var $t=so;var $zt=x(T(),1);var Pzt=x(T(),1);var pzt=x(T(),1);var uzt=x(T(),1),kce={DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,FUNC_ADD:32774,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,BLEND_COLOR:32773,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,STREAM_DRAW:35040,STATIC_DRAW:35044,DYNAMIC_DRAW:35048,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,CULL_FACE:2884,BLEND:3042,DITHER:3024,STENCIL_TEST:2960,DEPTH_TEST:2929,SCISSOR_TEST:3089,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CW:2304,CCW:2305,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_UNIFORMS:35718,ACTIVE_ATTRIBUTES:35721,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,NOTEQUAL:517,GEQUAL:518,ALWAYS:519,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,VENDOR:7936,RENDERER:7937,VERSION:7938,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,TEXTURE1:33985,TEXTURE2:33986,TEXTURE3:33987,TEXTURE4:33988,TEXTURE5:33989,TEXTURE6:33990,TEXTURE7:33991,TEXTURE8:33992,TEXTURE9:33993,TEXTURE10:33994,TEXTURE11:33995,TEXTURE12:33996,TEXTURE13:33997,TEXTURE14:33998,TEXTURE15:33999,TEXTURE16:34e3,TEXTURE17:34001,TEXTURE18:34002,TEXTURE19:34003,TEXTURE20:34004,TEXTURE21:34005,TEXTURE22:34006,TEXTURE23:34007,TEXTURE24:34008,TEXTURE25:34009,TEXTURE26:34010,TEXTURE27:34011,TEXTURE28:34012,TEXTURE29:34013,TEXTURE30:34014,TEXTURE31:34015,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,COMPILE_STATUS:35713,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,CONTEXT_LOST_WEBGL:37442,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,BROWSER_DEFAULT_WEBGL:37444,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGBA_ASTC_4x4_WEBGL:37808,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGBA_BPTC_UNORM:36492,HALF_FLOAT_OES:36193,DOUBLE:5130,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,COLOR:6144,DEPTH:6145,STENCIL:6146,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,MAX_3D_TEXTURE_SIZE:32883,UNSIGNED_INT_2_10_10_10_REV:33640,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,MAX_TEXTURE_LOD_BIAS:34045,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,VERTEX_ATTRIB_ARRAY_INTEGER:35069,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,UNSIGNED_INT_10F_11F_11F_REV:35899,RGB9_E5:35901,UNSIGNED_INT_5_9_9_9_REV:35902,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,RASTERIZER_DISCARD:35977,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,UNSIGNED_INT_24_8:34042,DEPTH24_STENCIL8:35056,UNSIGNED_NORMALIZED:35863,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,MAX_SAMPLES:36183,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,VERTEX_ARRAY_BINDING:34229,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,SIGNED_NORMALIZED:36764,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,INVALID_INDEX:4294967295,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,SAMPLER_BINDING:35097,RGB10_A2UI:36975,INT_2_10_10_10_REV:36255,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_SRGB8_ETC2:37493,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37494,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37495,COMPRESSED_RGBA8_ETC2_EAC:37496,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37497,TEXTURE_IMMUTABLE_FORMAT:37167,MAX_ELEMENT_INDEX:36203,TEXTURE_IMMUTABLE_LEVELS:33503,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047};Object.freeze(kce);var ne=kce;var xn={BYTE:ne.BYTE,UNSIGNED_BYTE:ne.UNSIGNED_BYTE,SHORT:ne.SHORT,UNSIGNED_SHORT:ne.UNSIGNED_SHORT,INT:ne.INT,UNSIGNED_INT:ne.UNSIGNED_INT,FLOAT:ne.FLOAT,DOUBLE:ne.DOUBLE};xn.getSizeInBytes=function(e){switch(e){case xn.BYTE:return Int8Array.BYTES_PER_ELEMENT;case xn.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case xn.SHORT:return Int16Array.BYTES_PER_ELEMENT;case xn.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case xn.INT:return Int32Array.BYTES_PER_ELEMENT;case xn.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT;case xn.FLOAT:return Float32Array.BYTES_PER_ELEMENT;case xn.DOUBLE:return Float64Array.BYTES_PER_ELEMENT}};xn.fromTypedArray=function(e){if(e instanceof Int8Array)return xn.BYTE;if(e instanceof Uint8Array)return xn.UNSIGNED_BYTE;if(e instanceof Int16Array)return xn.SHORT;if(e instanceof Uint16Array)return xn.UNSIGNED_SHORT;if(e instanceof Int32Array)return xn.INT;if(e instanceof Uint32Array)return xn.UNSIGNED_INT;if(e instanceof Float32Array)return xn.FLOAT;if(e instanceof Float64Array)return xn.DOUBLE};xn.validate=function(e){return l(e)&&(e===xn.BYTE||e===xn.UNSIGNED_BYTE||e===xn.SHORT||e===xn.UNSIGNED_SHORT||e===xn.INT||e===xn.UNSIGNED_INT||e===xn.FLOAT||e===xn.DOUBLE)};xn.createTypedArray=function(e,t){switch(e){case xn.BYTE:return new Int8Array(t);case xn.UNSIGNED_BYTE:return new Uint8Array(t);case xn.SHORT:return new Int16Array(t);case xn.UNSIGNED_SHORT:return new Uint16Array(t);case xn.INT:return new Int32Array(t);case xn.UNSIGNED_INT:return new Uint32Array(t);case xn.FLOAT:return new Float32Array(t);case xn.DOUBLE:return new Float64Array(t)}};xn.createArrayBufferView=function(e,t,n,i){switch(n=n??0,i=i??(t.byteLength-n)/xn.getSizeInBytes(e),e){case xn.BYTE:return new Int8Array(t,n,i);case xn.UNSIGNED_BYTE:return new Uint8Array(t,n,i);case xn.SHORT:return new Int16Array(t,n,i);case xn.UNSIGNED_SHORT:return new Uint16Array(t,n,i);case xn.INT:return new Int32Array(t,n,i);case xn.UNSIGNED_INT:return new Uint32Array(t,n,i);case xn.FLOAT:return new Float32Array(t,n,i);case xn.DOUBLE:return new Float64Array(t,n,i)}};xn.fromName=function(e){switch(e){case"BYTE":return xn.BYTE;case"UNSIGNED_BYTE":return xn.UNSIGNED_BYTE;case"SHORT":return xn.SHORT;case"UNSIGNED_SHORT":return xn.UNSIGNED_SHORT;case"INT":return xn.INT;case"UNSIGNED_INT":return xn.UNSIGNED_INT;case"FLOAT":return xn.FLOAT;case"DOUBLE":return xn.DOUBLE}};xn.dequantize=function(e,t){switch(t){case xn.BYTE:return Math.max(e/127,-1);case xn.UNSIGNED_BYTE:return e/255;case xn.SHORT:return Math.max(e/32767,-1);case xn.UNSIGNED_SHORT:return e/65535;case xn.INT:return Math.max(e/2147483647,-1);case xn.UNSIGNED_INT:return e/4294967295}};Object.freeze(xn);var J=xn;var Gzt=x(T(),1);var xzt=x(T(),1);var bd=class e{constructor(t,n,i,o){this[0]=t??0,this[1]=i??0,this[2]=n??0,this[3]=o??0}static pack(t,n,i){return i=i??0,n[i++]=t[0],n[i++]=t[1],n[i++]=t[2],n[i]=t[3],n}static unpack(t,n,i){return n=n??0,l(i)||(i=new e),i[0]=t[n++],i[1]=t[n++],i[2]=t[n++],i[3]=t[n],i}static packArray(t,n){let i=t.length,o=i*4;l(n)?!Array.isArray(n)&&n.length!==o||n.length!==o&&(n.length=o):n=new Array(o);for(let r=0;r>1^-(e&1)}Lo.zigZagDeltaDecode=function(e,t,n){let i=e.length,o=0,r=0,s=0;for(let a=0;a>16&255)/255,t.green=(e>>8&255)/255,t.blue=(e&255)/255,t};Lo.decodeRGB565=function(e,t){let n=e.length;l(t)||(t=new Float32Array(n*3));let i=31,o=63,r=1/31,s=1/63;for(let a=0;a>11,u=c>>5&o,m=c&i,p=3*a;t[p]=d*r,t[p+1]=u*s,t[p+2]=m*r}return t};var cn=Lo;var Mzt=x(T(),1);var P5={};P5.getHeight=function(e,t,n){return(e-n)*t+n};var JYe=new fe;P5.getPosition=function(e,t,n,i,o){let r=t.cartesianToCartographic(e,JYe);if(!l(r))return h.clone(e,o);let s=P5.getHeight(r.height,n,i);return h.fromRadians(r.longitude,r.latitude,s,t,o)};var ho=P5;var Uzt=x(T(),1),zce={NONE:0,BITS12:1};Object.freeze(zce);var Aa=zce;var yA=new h,jYe=new h,mm=new M,QYe=new I,qYe=new I,$Ye=Math.pow(2,12);function Zc(e,t,n,i,o,r,s,a,c,d){let u=Aa.NONE,m,p;if(l(t)&&l(n)&&l(i)&&l(o)){let b=t.minimum,f=t.maximum,y=h.subtract(f,b,jYe),_=i-n;Math.max(h.maximumComponent(y),_)<$Ye-1?u=Aa.BITS12:u=Aa.NONE;let Z=I.fromScale(y,QYe);Z=I.setTranslation(Z,b,Z);let V=I.fromScale(h.fromElements(1/y.x,1/y.y,1/y.z,yA),qYe);V=I.multiplyByTranslation(V,h.negate(b,yA),V),p=I.clone(o,new I);let C=I.getTranslation(o,yA);C=h.subtract(C,e,yA),p=I.setTranslation(p,C,p),p=I.multiply(p,Z,p),m=I.inverseTransformation(o,new I),m=I.multiply(V,m,m),o=I.multiply(o,Z,new I)}this.quantization=u,this.minimumHeight=n,this.maximumHeight=i,this.center=h.clone(e),this.toScaledENU=m,this.fromScaledENU=o,this.matrix=p,this.hasVertexNormals=r??!1,this.hasWebMercatorT=s??!1,this.hasGeodeticSurfaceNormals=a??!1,this.exaggeration=c??1,this.exaggerationRelativeHeight=d??0,this.stride=0,this._offsetGeodeticSurfaceNormal=0,this._offsetVertexNormal=0,this._calculateStrideAndOffsets()}Zc.prototype.encode=function(e,t,n,i,o,r,s,a){let c=i.x,d=i.y;if(this.quantization===Aa.BITS12){n=I.multiplyByPoint(this.toScaledENU,n,yA),n.x=L.clamp(n.x,0,1),n.y=L.clamp(n.y,0,1),n.z=L.clamp(n.z,0,1);let u=this.maximumHeight-this.minimumHeight,m=L.clamp((o-this.minimumHeight)/u,0,1);M.fromElements(n.x,n.y,mm);let p=cn.compressTextureCoordinates(mm);M.fromElements(n.z,m,mm);let b=cn.compressTextureCoordinates(mm);M.fromElements(c,d,mm);let f=cn.compressTextureCoordinates(mm);if(e[t++]=p,e[t++]=b,e[t++]=f,this.hasWebMercatorT){M.fromElements(s,0,mm);let y=cn.compressTextureCoordinates(mm);e[t++]=y}}else e[t++]=n.x-this.center.x,e[t++]=n.y-this.center.y,e[t++]=n.z-this.center.z,e[t++]=o,e[t++]=c,e[t++]=d,this.hasWebMercatorT&&(e[t++]=s);return this.hasVertexNormals&&(e[t++]=cn.octPackFloat(r)),this.hasGeodeticSurfaceNormals&&(e[t++]=a.x,e[t++]=a.y,e[t++]=a.z),t};var ewe=new h,Hce=new h;Zc.prototype.addGeodeticSurfaceNormals=function(e,t,n){if(this.hasGeodeticSurfaceNormals)return;let i=this.stride,o=e.length/i;this.hasGeodeticSurfaceNormals=!0,this._calculateStrideAndOffsets();let r=this.stride;for(let s=0;se.MaximumLatitude?t=e.MaximumLatitude:t<-e.MaximumLatitude&&(t=-e.MaximumLatitude);let n=Math.sin(t);return .5*Math.log((1+n)/(1-n))}project(t,n){let i=this._semimajorAxis,o=t.longitude*i,r=e.geodeticLatitudeToMercatorAngle(t.latitude)*i,s=t.height;return l(n)?(n.x=o,n.y=r,n.z=s,n):new h(o,r,s)}unproject(t,n){let i=this._oneOverSemimajorAxis,o=t.x*i,r=e.mercatorAngleToGeodeticLatitude(t.y*i),s=t.z;return l(n)?(n.longitude=o,n.latitude=r,n.height=s,n):new fe(o,r,s)}};xA.MaximumLatitude=xA.mercatorAngleToGeodeticLatitude(Math.PI);var fi=xA;var lp={};lp.DEFAULT_STRUCTURE=Object.freeze({heightScale:1,heightOffset:0,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1});var kJ=new h,twe=new I,nwe=new h,iwe=new h;lp.computeVertices=function(e){let t=Math.cos,n=Math.sin,i=Math.sqrt,o=Math.atan,r=Math.exp,s=L.PI_OVER_TWO,a=L.toRadians,c=e.heightmap,d=e.width,u=e.height,m=e.skirtHeight,p=m>0,b=e.isGeographic??!0,f=e.ellipsoid??ie.default,y=1/f.maximumRadius,_=re.clone(e.nativeRectangle),S=re.clone(e.rectangle),Z,V,C,G;l(S)?(Z=S.west,V=S.south,C=S.east,G=S.north):b?(Z=a(_.west),V=a(_.south),C=a(_.east),G=a(_.north)):(Z=_.west*y,V=s-2*o(r(-_.south*y)),C=_.east*y,G=s-2*o(r(-_.north*y)));let E=e.relativeToCenter,v=l(E);E=v?E:h.ZERO;let F=e.includeWebMercatorT??!1,P=e.exaggeration??1,N=e.exaggerationRelativeHeight??0,R=P!==1,A=e.structure??lp.DEFAULT_STRUCTURE,W=A.heightScale??lp.DEFAULT_STRUCTURE.heightScale,X=A.heightOffset??lp.DEFAULT_STRUCTURE.heightOffset,Y=A.elementsPerHeight??lp.DEFAULT_STRUCTURE.elementsPerHeight,D=A.stride??lp.DEFAULT_STRUCTURE.stride,k=A.elementMultiplier??lp.DEFAULT_STRUCTURE.elementMultiplier,O=A.isBigEndian??lp.DEFAULT_STRUCTURE.isBigEndian,w=re.computeWidth(_),z=re.computeHeight(_),H=w/(d-1),te=z/(u-1);b||(w*=y,z*=y);let K=f.radiiSquared,$=K.x,ee=K.y,de=K.z,_e=65536,ue=-65536,Ce=bt.eastNorthUpToFixedFrame(E,f),Te=I.inverseTransformation(Ce,twe),Re,Le;F&&(Re=fi.geodeticLatitudeToMercatorAngle(V),Le=1/(fi.geodeticLatitudeToMercatorAngle(G)-Re));let Xe=nwe;Xe.x=Number.POSITIVE_INFINITY,Xe.y=Number.POSITIVE_INFINITY,Xe.z=Number.POSITIVE_INFINITY;let qe=iwe;qe.x=Number.NEGATIVE_INFINITY,qe.y=Number.NEGATIVE_INFINITY,qe.z=Number.NEGATIVE_INFINITY;let je=Number.POSITIVE_INFINITY,_t=d*u,Qe=m>0?d*2+u*2:0,Ee=_t+Qe,He=new Array(Ee),Rt=new Array(Ee),dt=new Array(Ee),gn=F?new Array(Ee):[],Bt=R?new Array(Ee):[],St=0,vt=u,Wn=0,at=d;p&&(--St,++vt,--Wn,++at);let ft=1e-5;for(let oi=St;oi=u&&(Gn=u-1);let ri=_.north-te*Gn;b?ri=a(ri):ri=s-2*o(r(-ri*y));let Ao=(ri-V)/(G-V);Ao=L.clamp(Ao,0,1);let Zs=oi===St,ws=oi===vt-1;m>0&&(Zs?ri+=ft*z:ws&&(ri-=ft*z));let ia=t(ri),oa=n(ri),ar=de*oa,yi;F&&(yi=(fi.geodeticLatitudeToMercatorAngle(ri)-Re)*Le);for(let cr=Wn;cr=d&&(Fi=d-1);let Ur=Gn*(d*D)+Fi*D,Ii;if(Y===1)Ii=c[Ur];else{Ii=0;let ra;if(O)for(ra=0;ra=0;--ra)Ii=Ii*k+c[Ur+ra]}Ii=Ii*W+X,ue=Math.max(ue,Ii),_e=Math.min(_e,Ii);let Eo=_.west+H*Fi;b?Eo=a(Eo):Eo=Eo*y;let Vs=(Eo-Z)/(C-Z);Vs=L.clamp(Vs,0,1);let Lr=Gn*d+Fi;if(m>0){let ra=cr===Wn,Cs=cr===at-1,om=Zs||ws||ra||Cs;if((Zs||ws)&&(ra||Cs))continue;om&&(Ii-=m,ra?(Lr=_t+(u-Gn-1),Eo-=ft*w):ws?Lr=_t+u+(d-Fi-1):Cs?(Lr=_t+u+d+Gn,Eo+=ft*w):Zs&&(Lr=_t+u+d+u+Fi))}let nm=ia*t(Eo),im=ia*n(Eo),yc=$*nm,Hg=ee*im,Ra=1/i(yc*nm+Hg*im+ar*oa),Kg=yc*Ra,li=Hg*Ra,za=ar*Ra,Ha=new h;Ha.x=Kg+nm*Ii,Ha.y=li+im*Ii,Ha.z=za+oa*Ii,I.multiplyByPoint(Te,Ha,kJ),h.minimumByComponent(kJ,Xe,Xe),h.maximumByComponent(kJ,qe,qe),je=Math.min(je,Ii),He[Lr]=Ha,dt[Lr]=new M(Vs,Ao),Rt[Lr]=Ii,F&&(gn[Lr]=yi),R&&(Bt[Lr]=f.geodeticSurfaceNormal(Ha))}}let Ai=le.fromPoints(He),En;l(S)&&(En=$t.fromRectangle(S,_e,ue,f));let Ni;v&&(Ni=new Zh(f).computeHorizonCullingPointPossiblyUnderEllipsoid(E,He,_e));let fo=new ou(Xe,qe,E),Yi=new mr(E,fo,je,ue,Ce,!1,F,R,P,N),Ki=new Float32Array(Ee*Yi.stride),ci=0;for(let oi=0;oi{e.onmessage=function(o){let r=o.data.array,s=l(r)&&r[0]===t;i(s),e.terminate(),qa._canTransferArrayBuffer=s}})}return qa._canTransferArrayBuffer}var DJ=new Se;function UJ(e){let t;try{t=new Blob([e],{type:"application/javascript"})}catch{let o=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,r=new o;r.append(e),t=r.getBlob("application/javascript")}return(window.URL||window.webkitURL).createObjectURL(t)}function OJ(e){let t=new Kce.default(e),n=t.scheme().length!==0&&t.fragment().length===0,i=e.replace(/\.js$/,""),o={},r,s;if($g(e))s=e;else if(!n){let a=qt(`${qa._workerModulePrefix}/${i}.js`);$g(a)&&(s=a)}if(s){let a=`import "${s}";`;return r=UJ(a),o.type="module",new Worker(r,o)}if(!n&&typeof CESIUM_WORKERS<"u"){let a=` importScripts("${UJ(CESIUM_WORKERS)}"); CesiumWorkers["${i}"](); `;return r=UJ(a),new Worker(r,o)}if(r=e,n||(r=qt(`${qa._workerModulePrefix+i}.js`)),!hn.supportsEsmWebWorkers())throw new ae("This browser is not supported. Please update your browser to continue.");return o.type="module",new Worker(r,o)}async function swe(e,t){let n={modulePath:void 0,wasmBinaryFile:void 0,wasmBinary:void 0};if(!hn.supportsWebAssembly()){if(!l(t.fallbackModulePath))throw new ae(`This browser does not support Web Assembly, and no backup module was provided for ${e._workerPath}`);return n.modulePath=qt(t.fallbackModulePath),n}n.wasmBinaryFile=qt(t.wasmBinaryFile);let i=await ve.fetchArrayBuffer({url:n.wasmBinaryFile});return n.wasmBinary=i,n}function qa(e,t){this._workerPath=e,this._maximumActiveTasks=t??Number.POSITIVE_INFINITY,this._activeTasks=0,this._nextID=0,this._webAssemblyPromise=void 0}var awe=(e,t,n,i)=>{let o=({data:r})=>{if(r.id===t){if(l(r.error)){let s=r.error;s.name==="RuntimeError"?(s=new ae(r.error.message),s.stack=r.error.stack):s.name==="DeveloperError"?(s=new ge(r.error.message),s.stack=r.error.stack):s.name==="Error"&&(s=new Error(r.error.message),s.stack=r.error.stack),DJ.raiseEvent(s),i(s)}else DJ.raiseEvent(),n(r.result);e.removeEventListener("message",o)}};return o},cwe=[];async function lwe(e,t,n){let i=await Promise.resolve(Jce());l(n)?i||(n.length=0):n=cwe;let o=e._nextID++,r=new Promise((s,a)=>{e._worker.addEventListener("message",awe(e._worker,o,s,a))});return e._worker.postMessage({id:o,baseUrl:qt.getCesiumBaseUrl().url,parameters:t,canTransferArrayBuffer:i},n),r}async function dwe(e,t,n){++e._activeTasks;try{let i=await lwe(e,t,n);return--e._activeTasks,i}catch(i){throw--e._activeTasks,i}}qa.prototype.scheduleTask=function(e,t){if(l(this._worker)||(this._worker=OJ(this._workerPath)),!(this._activeTasks>=this._maximumActiveTasks))return dwe(this,e,t)};qa.prototype.initWebAssemblyModule=async function(e){if(l(this._webAssemblyPromise))return this._webAssemblyPromise;let t=async()=>{let n=this._worker=OJ(this._workerPath),i=await swe(this,e),o=await Promise.resolve(Jce()),r,s=i.wasmBinary;l(s)&&o&&(r=[s]);let a=new Promise((c,d)=>{n.onmessage=function({data:u}){l(u)?c(u.result):d(new ae("Could not configure wasm module"))}});return n.postMessage({canTransferArrayBuffer:o,parameters:{webAssemblyConfig:i}},r),a};return this._webAssemblyPromise=t(),this._webAssemblyPromise};qa.prototype.isDestroyed=function(){return!1};qa.prototype.destroy=function(){return l(this._worker)&&this._worker.terminate(),me(this)};qa.taskCompletedEvent=DJ;qa._defaultWorkerModulePrefix="Workers/";qa._workerModulePrefix=qa._defaultWorkerModulePrefix;qa._canTransferArrayBuffer=void 0;var Jn=qa;var YHt=x(T(),1);function sy(){ge.throwInstantiationError()}Object.defineProperties(sy.prototype,{credits:{get:ge.throwInstantiationError},waterMask:{get:ge.throwInstantiationError}});sy.prototype.interpolateHeight=ge.throwInstantiationError;sy.prototype.isChildAvailable=ge.throwInstantiationError;sy.prototype.createMesh=ge.throwInstantiationError;sy.prototype.upsample=ge.throwInstantiationError;sy.prototype.wasCreatedByUpsampling=ge.throwInstantiationError;sy.maximumAsynchronousTasks=5;var gd=sy;var mKt=x(T(),1);var MHt=x(T(),1),TA={MORPHING:0,COLUMBUS_VIEW:1,SCENE2D:2,SCENE3D:3};TA.getMorphTime=function(e){return e===TA.SCENE3D?1:e===TA.MORPHING?void 0:0};Object.freeze(TA);var se=TA;var $Ht=x(T(),1);var uwe=3,zJ=class{constructor(t,n,i){this._vertices=t,this._indices=n,this._encoding=i,this._inverseTransform=new I,this._needsRebuild=!0,this._rootNode=new HJ}get needsRebuild(){return this._needsRebuild}set needsRebuild(t){this._needsRebuild=t}rayIntersect(t,n,i,o,r){this._needsRebuild&&fwe(this,n);let s=this._inverseTransform,a=hwe;a.origin=I.multiplyByPoint(s,t.origin,a.origin),a.direction=I.multiplyByPointAsVector(s,t.direction,a.direction);let c=[];return Qce(this._rootNode,a,c),xwe(this,c,t,i,o,r)}},mwe=new Jn("incrementallyBuildTerrainPicker"),HJ=class e{constructor(){this.x=0,this.y=0,this.level=0,this.aabb=jce(this.x,this.y,this.level),this.intersectingTriangles=new Uint32Array(0),this.children=[],this.buildingChildren=!1}addChild(t){let n=new e;n.x=this.x*2+(t&1),n.y=this.y*2+(t>>1&1),n.level=this.level+1,n.aabb=jce(n.x,n.y,n.level),this.children[t]=n}},hwe=new fn,Y5=[new h,new h,new h];function fwe(e,t){I.inverse(t,e._inverseTransform),e._needsRebuild=!1;let n=e._indices.length/3,i=new Uint32Array(n);for(let o=0;o=uwe)&&!n.buildingChildren,b,f;p&&(b=new Float64Array(u*9),f=new Uint32Array(u));for(let y=0;y=0&&(s=C),p&&gwe(b,f,Y5,_,y)}if(p){for(let y=0;y<4;y++)n.addChild(y);Swe(e._inverseTransform,n,f,b)}return s}var _we=new fe;function BJ(e,t,n,i,o,r,s){let a=e.getExaggeratedPosition(o,r,s);if(t===se.SCENE3D)return a;let d=n.ellipsoid.cartesianToCartographic(a,_we);a=n.project(d,s),a=h.fromElements(a.z,a.x,a.y,s);let u=L.TWO_PI*n.ellipsoid.maximumRadius,m=Math.round((i.origin.y-a.y)/u);return a.y+=m*u,a}async function Swe(e,t,n,i){t.buildingChildren=!0;let o=new Float64Array(16);I.pack(e,o,0);let r=new Float64Array(24);for(let u=0;u<4;u++)h.pack(t.children[u].aabb.minimum,r,u*6),h.pack(t.children[u].aabb.maximum,r,u*6+3);let s={aabbs:r,inverseTransform:o,triangleIndices:n,trianglePositions:i},a=[r.buffer,o.buffer,n.buffer,i.buffer],c=mwe.scheduleTask(s,a);if(!l(c)){t.buildingChildren=!1;return}(await c).intersectingTrianglesArrays.forEach((u,m)=>{l(t.children[m])&&(t.children[m].intersectingTriangles=new Uint32Array(u))}),t.intersectingTriangles=new Uint32Array(0),t.buildingChildren=!1}var _A=zJ;function SA(e,t,n,i,o,r,s,a,c,d,u,m,p,b,f,y,_){this.center=e,this.vertices=t,this.stride=u??6,this.indices=n,this.indexCountWithoutSkirts=i,this.vertexCountWithoutSkirts=o,this.minimumHeight=r,this.maximumHeight=s,this.rectangle=a,this.boundingSphere3D=c,this.occludeePointInScaledSpace=d,this.orientedBoundingBox=m,this.encoding=p,this.westIndicesSouthToNorth=b,this.southIndicesEastToWest=f,this.eastIndicesNorthToSouth=y,this.northIndicesWestToEast=_,this._transform=new I,this._lastPickSceneMode=void 0,this._terrainPicker=new _A(t,n,p)}SA.prototype.getTransform=function(e,t){return this._lastPickSceneMode===e?this._transform:(this._terrainPicker.needsRebuild=!0,!l(e)||e===se.SCENE3D?Zwe(this,this._transform):Lwe(this,t,this._transform))};function Zwe(e,t){let n=e.encoding.exaggeration,i=e.encoding.exaggerationRelativeHeight,o=ho.getHeight(e.minimumHeight,n,i),r=ho.getHeight(e.maximumHeight,n,i),s=$t.fromRectangle(e.rectangle,o,r,ie.default,e.orientedBoundingBox);return $t.computeTransformation(s,t),I.getScale(t,KJ).z<=L.EPSILON16&&(KJ.z=1,I.setScale(t,KJ,t)),t}var Vwe=new h,Cwe=new h,Rwe=new fe,Gwe=new fe,Awe=new h,Ewe=new h,KJ=new h;function Lwe(e,t,n){let i=e.encoding.exaggeration,o=e.encoding.exaggerationRelativeHeight,r=ho.getHeight(e.minimumHeight,i,o),s=ho.getHeight(e.maximumHeight,i,o),a=t.project(fe.fromRadians(e.rectangle.west,e.rectangle.south,0,Rwe),Vwe),c=t.project(fe.fromRadians(e.rectangle.east,e.rectangle.north,0,Gwe),Cwe),d=s-r,u=h.fromElements(c.x-a.x,c.y-a.y,d>0?d:1,Awe),m=h.fromElements(a.x+u.x*.5,a.y+u.y*.5,r+u.z*.5,Ewe);return I.fromTranslation(m,n),I.setScale(n,u,n),I.multiply(bt.SWIZZLE_3D_TO_2D_MATRIX,n,n),n}SA.prototype.pick=function(e,t,n,i){let o=this._terrainPicker.rayIntersect(e,this.getTransform(n,i),t,n,i);return this._lastPickSceneMode=n,o};SA.prototype.updateExaggeration=function(e,t){this._terrainPicker._vertices=this.vertices,this._terrainPicker.needsRebuild=!0,this._lastPickSceneMode=void 0};SA.prototype.updateSceneMode=function(e){this._terrainPicker.needsRebuild=!0,this._lastPickSceneMode=void 0};var $a=SA;var ZKt=x(T(),1);var gKt=x(T(),1);var ca={UNSIGNED_BYTE:ne.UNSIGNED_BYTE,UNSIGNED_SHORT:ne.UNSIGNED_SHORT,UNSIGNED_INT:ne.UNSIGNED_INT};ca.getSizeInBytes=function(e){switch(e){case ca.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case ca.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case ca.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT}};ca.fromSizeInBytes=function(e){switch(e){case 2:return ca.UNSIGNED_SHORT;case 4:return ca.UNSIGNED_INT;case 1:return ca.UNSIGNED_BYTE}};ca.validate=function(e){return l(e)&&(e===ca.UNSIGNED_BYTE||e===ca.UNSIGNED_SHORT||e===ca.UNSIGNED_INT)};ca.createTypedArray=function(e,t){return e>=L.SIXTY_FOUR_KILOBYTES?new Uint32Array(t):new Uint16Array(t)};ca.createTypedArrayFromArrayBuffer=function(e,t,n,i){return e>=L.SIXTY_FOUR_KILOBYTES?new Uint32Array(t,n,i):new Uint16Array(t,n,i)};ca.fromTypedArray=function(e){if(e instanceof Uint8Array)return ca.UNSIGNED_BYTE;if(e instanceof Uint16Array)return ca.UNSIGNED_SHORT;if(e instanceof Uint32Array)return ca.UNSIGNED_INT};Object.freeze(ca);var De=ca;function As(){ge.throwInstantiationError()}Object.defineProperties(As.prototype,{errorEvent:{get:ge.throwInstantiationError},credit:{get:ge.throwInstantiationError},tilingScheme:{get:ge.throwInstantiationError},hasWaterMask:{get:ge.throwInstantiationError},hasVertexNormals:{get:ge.throwInstantiationError},availability:{get:ge.throwInstantiationError}});var qce=[];As.getRegularGridIndices=function(e,t){let n=qce[e];l(n)||(qce[e]=n=[]);let i=n[t];return l(i)||(e*t0?V=Oo.getRegularGridAndSkirtIndicesAndEdgeIndices(Z.gridWidth,Z.gridHeight):V=Oo.getRegularGridIndicesAndEdgeIndices(Z.gridWidth,Z.gridHeight);let C=Z.gridWidth*Z.gridHeight;return S._mesh=new $a(m,new Float32Array(Z.vertices),V.indices,V.indexCountWithoutSkirts,C,Z.minimumHeight,Z.maximumHeight,u,le.clone(Z.boundingSphere3D),h.clone(Z.occludeePointInScaledSpace),Z.numberOfAttributes,$t.clone(Z.orientedBoundingBox),mr.clone(Z.encoding),V.westIndicesSouthToNorth,V.southIndicesEastToWest,V.eastIndicesNorthToSouth,V.northIndicesWestToEast),S._buffer=void 0,S._mesh})};I0.prototype._createMeshSync=function(e){let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=e.exaggeration??1,s=e.exaggerationRelativeHeight??0,a=t.ellipsoid,c=t.tileXYToNativeRectangle(n,i,o),d=t.tileXYToRectangle(n,i,o),u=a.cartographicToCartesian(re.center(d)),m=this._structure,b=Oo.getEstimatedLevelZeroGeometricErrorForAHeightmap(a,this._width,t.getNumberOfXTilesAtLevel(0))/(1<0?y=Oo.getRegularGridAndSkirtIndicesAndEdgeIndices(this._width,this._height):y=Oo.getRegularGridIndicesAndEdgeIndices(this._width,this._height);let _=f.gridWidth*f.gridHeight;return this._mesh=new $a(u,f.vertices,y.indices,y.indexCountWithoutSkirts,_,f.minimumHeight,f.maximumHeight,d,f.boundingSphere3D,f.occludeePointInScaledSpace,f.encoding.stride,f.orientedBoundingBox,f.encoding,y.westIndicesSouthToNorth,y.southIndicesEastToWest,y.eastIndicesNorthToSouth,y.northIndicesWestToEast),this._mesh};I0.prototype.interpolateHeight=function(e,t,n){let i=this._width,o=this._height,r=this._structure,s=r.stride,a=r.elementsPerHeight,c=r.elementMultiplier,d=r.isBigEndian,u=r.heightOffset,m=r.heightScale,p=l(this._mesh),b=this._encoding===um.LERC;if(!p&&b)return;let y;if(p){let _=this._mesh.vertices,S=this._mesh.encoding;y=ole(_,S,u,m,e,i,o,t,n)}else y=Fwe(this._buffer,a,c,s,d,e,i,o,t,n),y=y*m+u;return y};I0.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;if(!l(a))return;let c=this._width,d=this._height,u=this._structure,m=u.stride,p=new this._bufferType(c*d*m),b=a.vertices,f=a.encoding,y=e.tileXYToRectangle(t,n,i),_=e.tileXYToRectangle(o,r,s),S=u.heightOffset,Z=u.heightScale,V=u.elementsPerHeight,C=u.elementMultiplier,G=u.isBigEndian,E=Math.pow(C,V-1);for(let v=0;vu.highestEncodedHeight?u.highestEncodedHeight:g,Iwe(p,V,C,E,m,G,v*c+P,g)}}return Promise.resolve(new I0({buffer:p,width:c,height:d,childTileMask:0,structure:this._structure,createdByUpsampling:!0}))};I0.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<=s&&(b=s-1,p=s-2);let f=m|0,y=f+1;y>=a&&(y=a-1,f=a-2);let _=u-p,S=m-f;f=a-1-f,y=a-1-y;let Z=M5(e,t,n,i,o,f*s+p),V=M5(e,t,n,i,o,f*s+b),C=M5(e,t,n,i,o,y*s+p),G=M5(e,t,n,i,o,y*s+b);return rle(_,S,Z,V,C,G)}function ole(e,t,n,i,o,r,s,a,c){let d=(a-o.west)*(r-1)/(o.east-o.west),u=(c-o.south)*(s-1)/(o.north-o.south),m=d|0,p=m+1;p>=r&&(p=r-1,m=r-2);let b=u|0,f=b+1;f>=s&&(f=s-1,b=s-2);let y=d-m,_=u-b;b=s-1-b,f=s-1-f;let S=(t.decodeHeight(e,b*r+m)-n)/i,Z=(t.decodeHeight(e,b*r+p)-n)/i,V=(t.decodeHeight(e,f*r+m)-n)/i,C=(t.decodeHeight(e,f*r+p)-n)/i;return rle(y,_,S,Z,V,C)}function rle(e,t,n,i,o,r){return t=0;--a)s=s*n+e[r+a];return s}function Iwe(e,t,n,i,o,r,s,a){s*=o;let c;if(r)for(c=0;c0;--c)e[s+c]=a/i|0,a-=e[s+c]*i,i/=n;e[s+c]=a}var Vc=I0;var zKt=x(T(),1);function CV(e,t){this._tilingScheme=e,this._maximumLevel=t,this._rootNodes=[]}var AT=new re;function Pwe(e,t,n,i){let o=i.length;for(let r=0;r=0;--i)if(l(n[i])&&n[i].length===0)return i;return 0};var sle=new fe;CV.prototype.isTileAvailable=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(t,n,e,AT);return re.center(i,sle),this.computeMaximumLevelAtPosition(sle)>=e};CV.prototype.computeChildMaskForTile=function(e,t,n){let i=e+1;if(i>=this._maximumLevel)return 0;let o=0;return o|=this.isTileAvailable(i,2*t,2*n+1)?1:0,o|=this.isTileAvailable(i,2*t+1,2*n+1)?2:0,o|=this.isTileAvailable(i,2*t,2*n)?4:0,o|=this.isTileAvailable(i,2*t+1,2*n)?8:0,o};function ZV(e,t,n,i,o){this.tilingScheme=e,this.parent=t,this.level=n,this.x=i,this.y=o,this.extent=e.tileXYToRectangle(i,o,n),this.rectangles=[],this._sw=void 0,this._se=void 0,this._nw=void 0,this._ne=void 0}Object.defineProperties(ZV.prototype,{nw:{get:function(){return this._nw||(this._nw=new ZV(this.tilingScheme,this,this.level+1,this.x*2,this.y*2)),this._nw}},ne:{get:function(){return this._ne||(this._ne=new ZV(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2)),this._ne}},sw:{get:function(){return this._sw||(this._sw=new ZV(this.tilingScheme,this,this.level+1,this.x*2,this.y*2+1)),this._sw}},se:{get:function(){return this._se||(this._se=new ZV(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2+1)),this._se}}});function Mwe(e,t,n,i,o){this.level=e,this.west=t,this.south=n,this.east=i,this.north=o}function JJ(e,t){let n=Math.max(e.west,t.west),i=Math.max(e.south,t.south),o=Math.min(e.east,t.east),r=Math.min(e.north,t.north);return i=e.west&&t.east<=e.east&&t.south>=e.south&&t.north<=e.north}function VV(e,t){return t.longitude>=e.west&&t.longitude<=e.east&&t.latitude>=e.south&&t.latitude<=e.north}function ZA(e,t,n){let i=0,o=!1;for(;!o;){let r=t._nw&&VV(t._nw.extent,n),s=t._ne&&VV(t._ne.extent,n),a=t._sw&&VV(t._sw.extent,n),c=t._se&&VV(t._se.extent,n);if(r+s+a+c>1){r&&(i=Math.max(i,ZA(t,t._nw,n))),s&&(i=Math.max(i,ZA(t,t._ne,n))),a&&(i=Math.max(i,ZA(t,t._sw,n))),c&&(i=Math.max(i,ZA(t,t._se,n)));break}else r?t=t._nw:s?t=t._ne:a?t=t._sw:c?t=t._se:o=!0}for(;t!==e;){let r=t.rectangles;for(let s=r.length-1;s>=0&&r[s].level>i;--s){let a=r[s];VV(a,n)&&(i=a.level)}t=t.parent}return i}function VA(e,t,n){if(!t)return;let i,o=!1;for(i=0;it.east&&n.push(new re(t.east,o.south,o.east,o.north)),o.southt.north&&n.push(new re(Math.max(t.west,o.west),t.north,Math.min(t.east,o.east),o.north))):n.push(o)}return n}var Ch=CV;var $Kt=x(T(),1);var JKt=x(T(),1);function Owe(e){let t,n=e.name,i=e.message;l(n)&&l(i)?t=`${n}: ${i}`:t=e.toString();let o=e.stack;return l(o)&&(t+=` ${o}`),t}var dp=Owe;function U5(e,t,n,i,o,r,s){this.provider=e,this.message=t,this.x=n,this.y=i,this.level=o,this.timesRetried=r??0,this.retry=!1,this.error=s}U5.reportError=function(e,t,n,i,o,r,s,a){let c=e;return l(e)?(c.provider=t,c.message=i,c.x=o,c.y=r,c.level=s,c.retry=!1,c.error=a,++c.timesRetried):c=new U5(t,i,o,r,s,0,a),l(n)&&n.numberOfListeners>0?n.raiseEvent(c):l(t)&&console.log(`An error occurred in "${t.constructor.name}": ${dp(i)}`),c};U5.reportSuccess=function(e){l(e)&&(e.timesRetried=-1)};var zo=U5;var lJt=x(T(),1);var jJ=new fe,QJ=new fe,ale=new h,cle=new h,qJ=class{constructor(t){ct(this,"_rectangleSouthwestInMeters");ct(this,"_rectangleNortheastInMeters");if(t=t??B.EMPTY_OBJECT,this._ellipsoid=t.ellipsoid??ie.default,this._numberOfLevelZeroTilesX=t.numberOfLevelZeroTilesX??1,this._numberOfLevelZeroTilesY=t.numberOfLevelZeroTilesY??1,this._projection=new fi(this._ellipsoid),l(t.rectangleSouthwestInMeters)&&l(t.rectangleNortheastInMeters))this._rectangleSouthwestInMeters=t.rectangleSouthwestInMeters,this._rectangleNortheastInMeters=t.rectangleNortheastInMeters;else{let o=this._ellipsoid.maximumRadius*Math.PI;this._rectangleSouthwestInMeters=new M(-o,-o),this._rectangleNortheastInMeters=new M(o,o)}let{x:n,y:i}=this._rectangleSouthwestInMeters;h.fromElements(n,i,0,ale),this._projection.unproject(ale,jJ),{x:n,y:i}=this._rectangleNortheastInMeters,h.fromElements(n,i,0,cle),this._projection.unproject(cle,QJ),this._rectangle=new re(jJ.longitude,jJ.latitude,QJ.longitude,QJ.latitude)}get ellipsoid(){return this._ellipsoid}get rectangle(){return this._rectangle}get projection(){return this._projection}getNumberOfXTilesAtLevel(t){return this._numberOfLevelZeroTilesX<=r&&(y=r-1);let _=f/u|0;return _>=s&&(_=s-1),l(i)?(i.x=y,i.y=_,i):new M(y,_)}},Zr=qJ;var Bwe=15;function lle(e){this.ellipsoid=e.ellipsoid??ie.default,this.credit=void 0,this.tilingScheme=void 0,this.height=void 0,this.width=void 0,this.encoding=void 0,this.lodCount=void 0,this.hasAvailability=!1,this.tilesAvailable=void 0,this.tilesAvailabilityLoaded=void 0,this.levelZeroMaximumGeometricError=void 0,this.terrainDataStructure=void 0}lle.prototype.build=function(e){e._credit=this.credit,e._tilingScheme=this.tilingScheme,e._height=this.height,e._width=this.width,e._encoding=this.encoding,e._lodCount=this.lodCount,e._hasAvailability=this.hasAvailability,e._tilesAvailable=this.tilesAvailable,e._tilesAvailabilityLoaded=this.tilesAvailabilityLoaded,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._terrainDataStructure=this.terrainDataStructure};function zwe(e,t){let n=t.copyrightText;l(n)&&(e.credit=new At(n));let i=t.spatialReference,o=i.latestWkid??i.wkid,r=t.extent,s={ellipsoid:e.ellipsoid};if(o===4326)s.rectangle=re.fromDegrees(r.xmin,r.ymin,r.xmax,r.ymax),e.tilingScheme=new Ji(s);else if(o===3857){let d=Math.PI*e.ellipsoid.maximumRadius;t.extent.xmax>d&&(t.extent.xmax=d),t.extent.ymax>d&&(t.extent.ymax=d),t.extent.xmin<-d&&(t.extent.xmin=-d),t.extent.ymin<-d&&(t.extent.ymin=-d),s.rectangleSouthwestInMeters=new M(r.xmin,r.ymin),s.rectangleNortheastInMeters=new M(r.xmax,r.ymax),e.tilingScheme=new Zr(s)}else throw new ae("Invalid spatial reference");let a=t.tileInfo;if(!l(a))throw new ae("tileInfo is required");e.width=a.rows+1,e.height=a.cols+1,e.encoding=a.format==="LERC"?um.LERC:um.NONE,e.lodCount=a.lods.length-1,(e.hasAvailability=t.capabilities.indexOf("Tilemap")!==-1)&&(e.tilesAvailable=new Ch(e.tilingScheme,e.lodCount),e.tilesAvailable.addAvailableTileRange(0,0,0,e.tilingScheme.getNumberOfXTilesAtLevel(0),e.tilingScheme.getNumberOfYTilesAtLevel(0)),e.tilesAvailabilityLoaded=new Ch(e.tilingScheme,e.lodCount)),e.levelZeroMaximumGeometricError=Oo.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.tilingScheme.ellipsoid,e.width,e.tilingScheme.getNumberOfXTilesAtLevel(0)),t.bandCount>1&&console.log("ArcGISTiledElevationTerrainProvider: Terrain data has more than 1 band. Using the first one."),l(t.minValues)&&l(t.maxValues)?e.terrainDataStructure={elementMultiplier:1,lowestEncodedHeight:t.minValues[0],highestEncodedHeight:t.maxValues[0]}:e.terrainDataStructure={elementMultiplier:1}}async function Hwe(e,t,n){try{let i=await t.fetchJson();zwe(e,i)}catch(i){let o=`An error occurred while accessing ${t}.`;throw zo.reportError(void 0,n,l(n)?n._errorEvent:void 0,o),i}}function ay(){this._resource=void 0,this._credit=void 0,this._tilingScheme=void 0,this._levelZeroMaximumGeometricError=void 0,this._maxLevel=void 0,this._terrainDataStructure=void 0,this._width=void 0,this._height=void 0,this._encoding=void 0,this._lodCount=void 0,this._hasAvailability=!1,this._tilesAvailable=void 0,this._tilesAvailabilityLoaded=void 0,this._availableCache={},this._errorEvent=new Se}Object.defineProperties(ay.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){return this._tilesAvailable}}});ay.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT,e=await Promise.resolve(e);let n=ve.createIfNeeded(e);n.appendForwardSlash(),l(t.token)&&(n=n.getDerivedResource({queryParameters:{token:t.token}}));let i=n.getDerivedResource({queryParameters:{f:"pjson"}}),o=new lle(t);await Hwe(o,i);let r=new ay(t);return o.build(r),r._resource=n,r};ay.prototype.requestTileGeometry=function(e,t,n,i){let o=this._resource.getDerivedResource({url:`tile/${n}/${t}/${e}`,request:i}),r=this._hasAvailability,s=Promise.resolve(!0),a;if(r&&!l($J(this,n+1,e*2,t*2))){let m=dle(this,n+1,e*2,t*2);s=m.promise,a=m.request}let c=o.fetchArrayBuffer();if(!l(c)||!l(s))return;let d=this,u=this._tilesAvailable;return Promise.all([c,s]).then(function(m){return new Vc({buffer:m[0],width:d._width,height:d._height,childTileMask:r?u.computeChildMaskForTile(n,e,t):Bwe,structure:d._terrainDataStructure,encoding:d._encoding})}).catch(async function(m){if(l(a)&&a.state===Ti.CANCELLED){i.cancel();try{await i.deferred?.promise}catch{}return i.state=Ti.CANCELLED,Promise.reject(m)}return Promise.reject(m)})};function $J(e,t,n,i){if(!e._hasAvailability)return;let o=e._tilesAvailabilityLoaded,r=e._tilesAvailable;if(t>e._lodCount)return!1;if(r.isTileAvailable(t,n,i))return!0;if(o.isTileAvailable(t,n,i))return!1}ay.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<0;){let c=a.pop(),d=Kwe(c,n,i,o);if(d.value===1){let m=d.range;m.startX+=e,m.endX+=e,m.startY+=t,m.endY+=t,r.push(m)}let u=d.endingIndices;u.length>0&&(a=a.concat(u))}return r}function dle(e,t,n,i){if(!e._hasAvailability)return{};let o=Math.floor(n/128)*128,r=Math.floor(i/128)*128,s=Math.min(1<0&&(this._hash={},t.length=0)}},Mt=tj;var BJt=x(T(),1);var hle="https://dev.virtualearth.net/REST/v1/Locations";function nj(e){e=e??B.EMPTY_OBJECT;let t=e.key;this._key=t;let n={key:t};l(e.culture)&&(n.culture=e.culture),this._resource=new ve({url:hle,queryParameters:n}),this._credit=new At('',!1)}Object.defineProperties(nj.prototype,{url:{get:function(){return hle}},key:{get:function(){return this._key}},credit:{get:function(){return this._credit}}});nj.prototype.geocode=async function(e){return this._resource.getDerivedResource({queryParameters:{query:e}}).fetchJsonp("jsonp").then(function(n){return n.resourceSets.length===0?[]:n.resourceSets[0].resources.map(function(o){let r=o.bbox,s=r[0],a=r[1],c=r[2],d=r[3];return{displayName:o.name,destination:re.fromDegrees(a,s,d,c)}})})};var ij=nj;var ejt=x(T(),1);function rs(e,t,n,i){this.x=e??0,this.y=t??0,this.width=n??0,this.height=i??0}rs.packedLength=4;rs.pack=function(e,t,n){return n=n??0,t[n++]=e.x,t[n++]=e.y,t[n++]=e.width,t[n]=e.height,t};rs.unpack=function(e,t,n){return t=t??0,l(n)||(n=new rs),n.x=e[t++],n.y=e[t++],n.width=e[t++],n.height=e[t],n};rs.fromPoints=function(e,t){if(l(t)||(t=new rs),!l(e)||e.length===0)return t.x=0,t.y=0,t.width=0,t.height=0,t;let n=e.length,i=e[0].x,o=e[0].y,r=e[0].x,s=e[0].y;for(let a=1;an.width?n.width=i:i<0&&(n.width-=i,n.x=t.x),o>n.height?n.height=o:o<0&&(n.height-=o,n.y=t.y),n};rs.intersect=function(e,t){let n=e.x,i=e.y,o=t.x,r=t.y;return n>o+t.width||n+e.widthr+t.height?jt.OUTSIDE:jt.INTERSECTING};rs.equals=function(e,t){return e===t||l(e)&&l(t)&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height};rs.prototype.clone=function(e){return rs.clone(this,e)};rs.prototype.intersect=function(e){return rs.intersect(this,e)};rs.prototype.equals=function(e){return rs.equals(this,e)};var $e=rs;var Bjt=x(T(),1);var Tjt=x(T(),1);var njt=x(T(),1),ple={NONE:0,TRIANGLES:1,LINES:2,POLYLINES:3};Object.freeze(ple);var hm=ple;var rjt=x(T(),1);var ec={POINTS:ne.POINTS,LINES:ne.LINES,LINE_LOOP:ne.LINE_LOOP,LINE_STRIP:ne.LINE_STRIP,TRIANGLES:ne.TRIANGLES,TRIANGLE_STRIP:ne.TRIANGLE_STRIP,TRIANGLE_FAN:ne.TRIANGLE_FAN};ec.isLines=function(e){return e===ec.LINES||e===ec.LINE_LOOP||e===ec.LINE_STRIP};ec.isTriangles=function(e){return e===ec.TRIANGLES||e===ec.TRIANGLE_STRIP||e===ec.TRIANGLE_FAN};ec.validate=function(e){return e===ec.POINTS||e===ec.LINES||e===ec.LINE_LOOP||e===ec.LINE_STRIP||e===ec.TRIANGLES||e===ec.TRIANGLE_STRIP||e===ec.TRIANGLE_FAN};Object.freeze(ec);var Fe=ec;function oj(e){e=e??B.EMPTY_OBJECT,this.attributes=e.attributes,this.indices=e.indices,this.primitiveType=e.primitiveType??Fe.TRIANGLES,this.boundingSphere=e.boundingSphere,this.geometryType=e.geometryType??hm.NONE,this.boundingSphereCV=e.boundingSphereCV,this.offsetAttribute=e.offsetAttribute}oj.computeNumberOfVertices=function(e){let t=-1;for(let n in e.attributes)if(e.attributes.hasOwnProperty(n)&&l(e.attributes[n])&&l(e.attributes[n].values)){let i=e.attributes[n];t=i.values.length/i.componentsPerAttribute}return t};var qwe=new fe,$we=new h,ble=new I,eMe=[new fe,new fe,new fe],tMe=[new M,new M,new M],nMe=[new M,new M,new M],iMe=new h,oMe=new Ye,rMe=new I,sMe=new ji;oj._textureCoordinateRotationPoints=function(e,t,n,i){let o,r=re.center(i,qwe),s=fe.toCartesian(r,n,$we),a=bt.eastNorthUpToFixedFrame(s,n,ble),c=I.inverse(a,ble),d=tMe,u=eMe;u[0].longitude=i.west,u[0].latitude=i.south,u[1].longitude=i.west,u[1].latitude=i.north,u[2].longitude=i.east,u[2].latitude=i.south;let m=iMe;for(o=0;o<3;o++)fe.toCartesian(u[o],n,m),m=I.multiplyByPointAsVector(c,m,m),d[o].x=m.x,d[o].y=m.y;let p=Ye.fromAxisAngle(h.UNIT_Z,-t,oMe),b=q.fromQuaternion(p,rMe),f=e.length,y=Number.POSITIVE_INFINITY,_=Number.POSITIVE_INFINITY,S=Number.NEGATIVE_INFINITY,Z=Number.NEGATIVE_INFINITY;for(o=0;o=n[t]){if(t+1=0&&e>=n[t-1])return t-1;let o;if(e>n[t])for(o=t;o=n[o]&&e=0&&!(e>=n[o]&&en&&(r=Math.floor((e-n)/o)+1,e-=r*o),e};RV.prototype.clampTime=function(e){let t=this.times;return L.clamp(e,t[0],t[t.length-1])};var Zo=RV;function GV(e){e=e??B.EMPTY_OBJECT;let t=e.points,n=e.times;this._times=n,this._points=t,this._pointType=Zo.getPointType(t[0]),this._lastTimeIndex=0}Object.defineProperties(GV.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});GV.prototype.findTimeInterval=Zo.prototype.findTimeInterval;GV.prototype.wrapTime=Zo.prototype.wrapTime;GV.prototype.clampTime=Zo.prototype.clampTime;GV.prototype.evaluate=function(e,t){let n=this.points,i=this.times,o=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),r=(e-i[o])/(i[o+1]-i[o]);return this._pointType===Number?(1-r)*n[o]+r*n[o+1]:(l(t)||(t=new h),h.lerp(n[o],n[o+1],r,t))};var cy=GV;var _4t=x(T(),1);var Cle={};Cle.solve=function(e,t,n,i){let o=new Array(n.length),r=new Array(i.length),s=new Array(i.length),a;for(a=0;a=0;--a)s[a]=h.subtract(r[a],h.multiplyByScalar(s[a+1],o[a],s[a]),s[a]);return s};var AV=Cle;var Rle=[],Gle=[],Ale=[],Ele=[];function uMe(e,t,n){let i=Rle,o=Ale,r=Gle,s=Ele;i.length=o.length=e.length-1,r.length=s.length=e.length;let a;i[0]=r[0]=1,o[0]=0;let c=s[0];for(l(c)||(c=s[0]=new h),h.clone(t,c),a=1;a2&&(l(i)||(i=bMe,h.multiplyByScalar(t[1],2,i),h.subtract(i,t[2],i),h.subtract(i,t[0],i),h.multiplyByScalar(i,.5,i)),!l(o))){let r=t.length-1;o=gMe,h.multiplyByScalar(t[r-1],2,o),h.subtract(t[r],o,o),h.add(o,t[r-2],o),h.multiplyByScalar(o,.5,o)}this._times=n,this._points=t,this._firstTangent=h.clone(i),this._lastTangent=h.clone(o),this._evaluateFunction=pMe(this),this._lastTimeIndex=0}Object.defineProperties(dy.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}},firstTangent:{get:function(){return this._firstTangent}},lastTangent:{get:function(){return this._lastTangent}}});dy.catmullRomCoefficientMatrix=new I(-.5,1,-.5,0,1.5,-2.5,0,1,-1.5,2,.5,0,.5,-.5,0,0);dy.prototype.findTimeInterval=Zo.prototype.findTimeInterval;dy.prototype.wrapTime=Zo.prototype.wrapTime;dy.prototype.clampTime=Zo.prototype.clampTime;dy.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};var cj=dy;var i8t=x(T(),1);var PQt=x(T(),1);var nQt=x(T(),1);var D4t=x(T(),1),k4t=(function(){var e="b9H79Tebbbe9ok9Geueu9Geub9Gbb9Gruuuuuuueu9Gvuuuuueu9Gduueu9Gluuuueu9Gvuuuuub9Gouuuuuub9Gluuuub9GiuuueuiE8AdilveoveovrrwrrrDDoDrbqqbelve9Weiiviebeoweuecj:Gdkr:PlCo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9mW4W2be8A9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWVbd8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9c9V919U9KbiE9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949wWV79P9V9UblY9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWVbv8E9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWV9c9V919U9Kbo8A9TW79O9V9Wt9FW9U9J9V9KW69U9KW949wWV79P9V9UbrE9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JWbwa9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JW9c9V919U9KbDL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9p9JtbqK9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9r919HtbkL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVT949WbxY9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVJ9V29VVbmE9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OWbza9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OW9ttV9P9WbHa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9WbOK9TW79O9V9Wt9F79W9Ht9P9H29t9VVt9sW9T9H9WbAl79IV9RbXDwebcekdKYq:zf8Adbk;wadhud9:8Jjjjjbc;qw9Rgr8KjjjjbcbhwdnaeTmbabcbyd;i:I:cjbaoaocb9iEgDc:GeV86bbarc;adfcbcjdz:xjjjb8AdnaiTmbarc;adfadalz:wjjjb8Akarc;abfalfcbcbcjdal9RalcFe0Ez:xjjjb8Aarc;abfarc;adfalz:wjjjb8Aar9cb83iUar9cb83i8War9cb83iyar9cb83iaar9cb83iKar9cb83izar9cb83iwar9cb83ibcj;abal9Uc;WFbGcjdalca0Ehqdnaicd6mbavcd9imbaDTmbadcefhkaqci2gxal2hmarc;alfclfhParc;qlfceVhsarc;qofclVhzcbhHincdhOcbhAdnavci6mbar9cb83i;Ooar9cb83i;Goar9cb83i;yoar9cb83i;qoadaHfgoybbhCcbhXincbhwcbhQdninaoalfhLaoybbgKaC7aQVhQawcP0meaLhoaKhCawcefgwaXfai6mbkkcbhCarc;qofhwincwhYcwh8AdnaQaC93gocFeGgEcs0mbclh8AaEci0mbcdcbaEEh8Akdnaocw4cFeGgEcs0mbclhYaEci0mbcdcbaEEhYkaYa8AfhEawydbh3cwhYcwh8Adnaocz4cFeGg5cs0mbclh8Aa5ci0mbcdcba5Eh8AkaEa3fhEdnaocFFFFb0mbclhYaocFFF8F0mbcbcdaocjjjw6EhYkawaEa8AfaYfBdbawclfhwaCcefgCcw9hmbkaLhoaKhCaXczfgXai6mbkcbhocehwazhQinawaoaQydbarc;qofaocdtfydb6EhoaQclfhQawcefgwcw9hmbkaoclthAcihOkcbhEarc;qlfcbcjdz:xjjjb8AarcbBd;ilar9cb83i;aladh8Eaqh8Fakh3inarc;qlfadaEaEcb9h9Ral2falz:wjjjb8Aaia8Faia8F6EhadnaqaiaE9RaEaqfai6EgKcsfc9WGgoaK9nmbarc;qofaKfcbaoaK9Rz:xjjjb8AkadaEal2fhhcbhginagaAVcl4hXarc;alfagcdtfh8JaHh8Kcbh8Lina8LaHfhwdndndndndndndnagPlbedibkaKTmvahawfhoarc;qlfawfRbbhQarc;qofhwaahCinawaoRbbgYaQ9RgQcetaQcKtc8F91786bbawcefhwaoalfhoaYhQaEaCcufgC9hmbxvkkaKTmla8Kc9:Ghoa8LcitcwGh8Aarc;qlfawceVfRbbcwtarc;qlfawc9:GfRbbVhQarc;qofhwaahCinawa3aofRbbcwta8EaofRbbVgYaQ9RgQcetaQcztc8F917cFFiGa8A486bbaoalfhoawcefhwaYhQaEaCcufgC9hmbxlkkasa8Kc98GgQfhoa3aQfhYarc;qlfawc98GgQfRbbhCcwhwinaoRbbawtaCVhCaocefhoawcwfgwca9hmbxdkkaKTmdxekaKTmea8Lcith5ahaQfh8AcbhLina8ARbbhQcwhoaYhwinawRbbaotaQVhQawcefhwaocwfgoca9hmbkarc;qofaLfaQaC7aX93a5486bbaYalfhYa8Aalfh8AaQhCaLcefgLaK9hmbkka8Jydbh8AcbhLarc;qofhoincdhQcbhwinaQaoawfRbbcb9hfhQawcefgwcz9hmbkclhCcbhwinaCaoawfRbbcd0fhCawcefgwcz9hmbkcwhYcbhwinaYaoawfRbbcP0fhYawcefgwcz9hmbkaQaCaQaC6EgwaYawaY6Egwczawcz6Ea8Afh8AaoczfhoaLczfgLaK6mbka8Ja8ABdbka8Kcefh8Ka8Lcefg8Lcl9hmbkagcefggaO9hmbka8Eamfh8Ea8Faxfh8Fa3amfh3aEaxfgEai6mbkcbhocehwaPhQinawaoaQydbarc;alfaocdtfydb6EhoaQclfhQaOawcefgw9hmbkaraHcd4faAcdVaoaocdSE86bbaHclfgHal6mbkkabaefhgabcefhoalcd4g8McbaDEhkadcefh8Narc;abfceVhecbhmdndninaiam9nmearc;qofcbcjdz:xjjjb8Aagao9Rak6mdadamal2gwfhxcbhHa8Nawfhzaocbakz:xjjjbg8Fakfh3aqaiam9Ramaqfai6Egscsfgocl4cifcd4hOaoc9WGg8JThPindndndndndndndndndndnaDTmbaraHcd4fRbbgQciGPlbedlbkasTmdaxaHfhoarc;abfaHfRbbhQarc;qofhwashCinawaoRbbgYaQ9RgQcetaQcKtc8F91786bbawcefhwaoalfhoaYhQaCcufgCmbxikkasTmiaHcitcwGh8Aarc;abfaHceVfRbbcwtarc;abfaHc9:GgofRbbVhQaxaofhoarc;qofhwashCinawao8VbbgYaQ9RgQcetaQcztc8F917cFFiGa8A486bbawcefhwaoalfhoaYhQaCcufgCmbxikkaeaHc98Gg8Afhoaza8AfhYarc;abfa8AfRbbhCcwhwinaoRbbawtaCVhCaocefhoawcwfgwca9hmbkasTmdaQcl4hKaHcitcKGhEaxa8Afh8AcbhLina8ARbbhQcwhoaYhwinawRbbaotaQVhQawcefhwaocwfgoca9hmbkarc;qofaLfaQaC7aK93aE486bbaYalfhYa8Aalfh8AaQhCaLcefgLas9hmbkkaDmbcbhoxlka8JTmbcbhodninarc;qofaofgwcwf8Pibaw8Pib:e9qTmeaoczfgoa8J9pmdxbkkdnavmbcehoxikcbh8AaOhLaOhKinarc;qofa8Afgocwf8Pibhyao8Pibh8PcdhQcbhwinaQaoawfRbbcb9hfhQawcefgwcz9hmbkclhCcbhwinaCaoawfRbbcd0fhCawcefgwcz9hmbkcwhYcbhwinaYaoawfRbbcP0fhYawcefgwcz9hmbkaQaCaQaC6EgoaYaoaY6Egoczaocz6EaKfhKaocucbaya8P:e9cb9sEgwaoaw6EaLfhLa8Aczfg8Aa8J9pmdxbkka8FaHcd4fgoaoRbbcdaHcetcoGtV86bbxikdnaLas6mbaKas6mba8FaHcd4fgoaoRbbciaHcetcoGtV86bbaga39Ras6mra3arc;qofasz:wjjjbasfh3xikaLaK9phoka8FaHcd4fgwawRbbaoaHcetcoGtV86bbkaga39RaO6mla3cbaOz:xjjjbgaaOfhKdndna8JmbaPhoxekdnagaK9RcK9pmbaPhoxekaocdtc:q:G:cjbfcj:G:cjbaDEg3ydxghcetc;:FFFeGhAcuhEcuahtcu7cFeGh8Ecbh8Karc;qofhQinarc;qofa8KfhXczh8AdndndnahPDbeeeeeeedekcucbaXcwf8PibaX8Pib:e9cb9sEh8AxekcbhoaAh8Aina8Aa8EaQaofRbb9nfh8Aaocefgocz9hmbkkcih5cbhYinczhwdndndna3aYcdtfydbgLPDbeeeeeeedekcucbaXcwf8PibaX8Pib:e9cb9sEhwxekaLcetc;:FFFeGhwcuaLtcu7cFeGhCcbhoinawaCaQaofRbb9nfhwaocefgocz9hmbkkdndnawa8A6mbaLaE9hmeawa8A9hmea3a5cdtfydbcwSmekaYh5awh8AkaYcefgYci9hmbkaaa8Kco4fgoaoRbba5a8Kci4coGtV86bbdndndna3a5cdtfydbgEPDdbbbbbbbebkdncwaE9Tg5TmbcuaEtcu7hwdndnaEceSmbcbh8LaQhXinaXhoa5hYcbhCinaoRbbg8AawcFeGgLa8AaL6EaCaEtVhCaocefhoaYcufgYmbkaKaC86bbaXa5fhXaKcefhKa8La5fg8Lcz6mbxdkkcbh8LaQhXinaXhoa5hYcbhCinaoRbbg8AawcFeGgLa8AaL6EaCcetVhCaocefhoaYcufgYmbkaKaC:T9cFe:d9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:9ca188bbaXa5fhXaKcefhKa8La5fg8Lcz6mbkkcbhoinaKaQaofRbbgC86bbaKaCawcFeG9pfhKaocefgocz9hmbxikkdnaEceSmbinaKcb86bbaKcefhKxbkkinaKcb86bbaKcefhKxbkkaKaX8Pbw83bwaKaX8Pbb83bbaKczfhKka8Kczfg8Ka8J9pgomeaQczfhQagaK9RcK9pmbkkaoTmlaKh3aKTmlkaHcefgHal9hmbkarc;abfaxascufal2falz:wjjjb8Aasamfhma3hoa3mbkcbhwxdkdnagao9RakalfgwcKcaaDEgQawaQ0EgC9pmbcbhwxdkdnawaQ9pmbaocbaCaw9Rgwz:xjjjbawfhokaoarc;adfalz:wjjjbalfhodnaDTmbaoara8Mz:wjjjba8Mfhokaoab9Rhwxekcbhwkarc;qwf8Kjjjjbawk5babaeadaialcdcbyd;i:I:cjbz:bjjjbk9reduaecd4gdaefgicaaica0Eabcj;abae9Uc;WFbGcjdaeca0Egifcufai9Uae2aiadfaicl4cifcd4f2fcefkmbcbabBd;i:I:cjbk;HPeLu8Jjjjjbc;ae9Rgl8Kjjjjbcbhvdnaeaici9UgocHf6mbabcbyd;m:I:cjbgrc;GeV86bbalc;abfcFecjez:xjjjb8Aal9cu83iUal9cu83i8Wal9cu83iyal9cu83iaal9cu83iKal9cu83izal9cu83iwal9cu83ibabaefc9WfhwabcefgDaofhednaiTmbcmcsarcb9kgqEhkcbhxcbhmcbhPcbhscbhzindnaeaw9nmbcbhvxikazcufhvadaPcdtfgHydbhOaHcwfydbhAaHclfydbhCcbhXdndndninalc;abfavcsGcitfgoydlhQdndndnaoydbgoaO9hmbaQaCSmekdnaoaC9hmbaQaA9hmbaXcefhXxekaoaA9hmeaQaO9hmeaXcdfhXkaXc870mdascufhvaHaXcdtgAcxGgoyd:4:G:cjbcdtfydbhQaHaoyd:0:G:cjbcdtfydbhCaHaoyd:W:G:cjbcdtfydbhOcbhodnindnalavcsGcdtfydbaQ9hmbaohXxdkcuhXavcufhvaocefgocz9hmbkkaxaQaxSgvaXce9iaXak9oVgoGfhxdndndncbcsavEaXaoEgvcs9hmbarce9imbaQaQamaQcefamSgvEgmcefSmecmcsavEhvkaDavaAc;WeGV86bbavcs9hmeaQam9Rgvcetavc8F917hvinaecbcjeavcje6EavcFbGV86bbaecefheavcr4gvmbkaQhmxvkcPhvaDaAcPV86bbaQhmkavTmiavak9omicdhocehXazhAxlkavcufhvaXclfgXc;ab9hmbkkdnaHcecdcbaAaxSEaCaxSEcdtgvyd:W:G:cjbcdtfydbgOTaHavyd:0:G:cjbcdtfydbgCceSGaHavyd:4:G:cjbcdtfydbgQcdSGaxcb9hGaqGgLce9hmbal9cu83iUal9cu83i8Wal9cu83iyal9cu83iaal9cu83iKal9cu83izal9cu83iwal9cu83ibcbhxkcbhXascufgvhodnindnalaocsGcdtfydbaC9hmbaXhAxdkcuhAaocufhoaXcefgXcz9hmbkkcbhodnindnalavcsGcdtfydbaQ9hmbaohXxdkcuhXavcufhvaocefgocz9hmbkkaxaOaxSgKfhHdndnaAcm0mbaAcefhAxekcbcsaCaHSgvEhAaHavfhHkdndnaXcm0mbaXcefhXxekcbcsaQaHSgvEhXaHavfhHkc9:cuaKEhYcbhvaXaAcltVg8AcFeGhodndndninavc;q:G:cjbfRbbaoSmeavcefgvcz9hmbxdkkaLaOax9havcm0VVmbaDavc;WeV86bbxekaDaY86bbaea8A86bbaecefhekdnaKmbaOam9Rgvcetavc8F917hvinaecbcjeavcje6EavcFbGV86bbaecefheavcr4gvmbkaOhmkdnaAcs9hmbaCam9Rgvcetavc8F917hvinaecbcjeavcje6EavcFbGV86bbaecefheavcr4gvmbkaChmkdnaXcs9hmbaQam9Rgvcetavc8F917hvinaecbcjeavcje6EavcFbGV86bbaecefheavcr4gvmbkaQhmkalascdtfaOBdbascefcsGhvdndnaAPzbeeeeeeeeeeeeeebekalavcdtfaCBdbascdfcsGhvkdndnaXPzbeeeeeeeeeeeeeebekalavcdtfaQBdbavcefcsGhvkcihoalc;abfazcitfgXaOBdlaXaCBdbazcefcsGhAcdhXavhsaHhxxekcdhoalascdtfaQBdbcehXascefcsGhsazhAkalc;abfaAcitfgvaCBdlavaQBdbalc;abfazaXfcsGcitfgvaQBdlavaOBdbaDcefhDazaofcsGhzaPcifgPai6mbkkdnaeaw9nmbcbhvxekcbhvinaeavfavc;q:G:cjbfRbb86bbavcefgvcz9hmbkaeab9Ravfhvkalc;aef8KjjjjbavkZeeucbhddninadcefgdc8F0meaeceadt0mbkkadcrfcFeGcr9Uci2cdfabci9U2cHfkmbcbabBd;m:I:cjbk:zderu8Jjjjjbcz9Rhlcbhvdnaeaicvf6mbabcbRb;m:I:cjbc;qeV86bbal9cb83iwabcefhvabaefc98fhodnaiTmbcbhecbhrcbhwindnavao6mbcbskadawcdtfydbgDalcwfaraDae9Rgeaec8F91ge7ae9Rc507grcdtfgqydb9Rgec8E91c9:Gaecdt7arVheinavcbcjeaecje6EaecFbGV86bbavcefhvaecr4gembkaqaDBdbaDheawcefgwai9hmbkkdnavao9nmbcbskavcbBbbavab9RclfhvkavkBeeucbhddninadcefgdc8F0meaeceadt0mbkkabadcwfcFeGcr9U2cvfk:dvli99dui99ludnaeTmbcuadcetcuftcu7:Zhvdndncuaicuftcu7:ZgoJbbbZMgr:lJbbb9p9DTmbar:Ohwxekcjjjj94hwkcbhicbhDinalclfIdbgrJbbbbJbbjZalIdbgq:lar:lMalcwfIdbgk:lMgr:varJbbbb9BEgrNhxaqarNhralcxfIdbhqdndnakJbbbb9GTmbaxhkxekJbbjZar:l:tgkak:maxJbbbb9GEhkJbbjZax:l:tgxax:marJbbbb9GEhrkdndnaqJbbj:;aqJbbj:;9GEgxJbbjZaxJbbjZ9FEavNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohmxekcjjjj94hmkdndnakJbbj:;akJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;akJbbbb9GEMgq:lJbbb9p9DTmbaq:OhPxekcjjjj94hPkdndnarJbbj:;arJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;arJbbbb9GEMgr:lJbbb9p9DTmbar:Ohsxekcjjjj94hskdndnadcl9hmbabaDfgzas86bbazcifam86bbazcdfaw86bbazcefaP86bbxekabaifgzas87ebazcofam87ebazclfaw87ebazcdfaP87ebkaicwfhiaDclfhDalczfhlaecufgembkkk;hlld99eud99eudnaeTmbdndncuaicuftcu7:ZgvJbbbZMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikaic;8FiGhrinabcofcicdalclfIdb:lalIdb:l9EgialcwfIdb:lalaicdtfIdb:l9EEgialcxfIdb:lalaicdtfIdb:l9EEgiarV87ebdndnJbbj:;JbbjZalaicdtfIdbJbbbb9DEgoalaicd7cdtfIdbJ;Zl:1ZNNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabcdfaq87ebdndnalaicefciGcdtfIdbJ;Zl:1ZNaoNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabaq87ebdndnaoalaicufciGcdtfIdbJ;Zl:1ZNNgoJbbj:;aoJbbj:;9GEgwJbbjZawJbbjZ9FEavNJbbbZJbbb:;aoJbbbb9GEMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikabclfai87ebabcwfhbalczfhlaecufgembkkk;gvdDue998Jjjjjbcjd9Rgo8Kjjjjbdndndnadcd4grTmbc:CucbavEhwaohdarhDinadawBdbadclfhdaDcufgDmbkavcd9hmbaeTmbarcdthqcbhkalhxinaohdaxhDarhwinadadydbgmaDydbcL4cFeGc:cufgPamaP9kEBdbaDclfhDadclfhdawcufgwmbkaxaqfhxakcefgkae9hmbxdkkaeTmekarcdthxavce9hhqcbhkindndndnaqmbarTmdc:CuhDalhdarhwinaDadydbcL4cFeGc:cufgmaDam9kEhDadclfhdawcufgwmbxdkkdndndndnavPleddbdkarTmlaohdalhDarhwinadcbaDydbcL4cFeGgmc:cufgPaPam0EBdbadclfhdaDclfhDawcufgwmbxikkarTmicbhdarhDindnaladfIdbgsJbbbb9Bmbaoadfas:8cL4cFeGgwc8Aawc8A0Ec:cufBdbkadclfhdaDcufgDmbxdkkarTmdkc:CuhDkcbhdarhminaDhwdnavceSmbaoadfydbhwkdndnaladfIdbgscjjj;8iawai9RcefgwcLt9R::NJbbbZJbbb:;asJbbbb9GEMgs:lJbbb9p9DTmbas:OhPxekcjjjj94hPkabadfaPcFFFrGawcKtVBdbadclfhdamcufgmmbkkabaxfhbalaxfhlakcefgkae9hmbkkaocjdf8Kjjjjbk:Olveue99iue99iudnaeTmbceaicufthvcuaitcu7:Zhocbhradcl9hhwcbhDindndnalcwfIdbgqJbbbbaqJbbbb9GEgqJbbjZaqJbbjZ9FEaoNJbbbZMgq:lJbbb9p9DTmbaq:Ohixekcjjjj94hikdndnalIdbgqJbbbbaqJbbbb9GEgqJbbjZaqJbbjZ9FEaoNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkadai9Rcd9TgkaifhidndnalclfIdbgqJbbbbaqJbbbb9GEgqJbbjZaqJbbjZ9FEaoNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkadai9Rcd9ThddndnalcxfIdbgqJbbbbaqJbbbb9GEgqJbbjZaqJbbjZ9FEaoNJbbbZMgq:lJbbb9p9DTmbaq:Ohxxekcjjjj94hxkadaifhiaxce91avVhxdndnawmbabaDfgmai86bbamcifax86bbamcdfad86bbamcefak86bbxekabarfgmai87ebamcofax87ebamclfad87ebamcdfak87ebkarcwfhraDclfhDalczfhlaecufgembkkk;mqdQui998Jjjjjbc:qd9Rgv8Kjjjjbavc:Sefcbc;Kbz:xjjjb8AdnadTmbaiTmbdndnabaeSmbaehoxekavcuadcdtgradcFFFFi0Ecbyd;q:I:cjbHjjjjbbgoBd:SeavceBd:mdaoaearz:wjjjb8AkavcbBd:Oeav9cb83i:Geavc:Gefaoadaiavc:Sefz:pjjjbavyd:Gehwadci9UgDcbyd;q:I:cjbHjjjjbbheavc:Sefavyd:mdgqcdtfaeBdbavaqcefgrBd:mdaecbaDz:xjjjbhkavc:SefarcdtfcuaicdtaicFFFFi0Ecbyd;q:I:cjbHjjjjbbgxBdbavaqcdfgmBd:mdalc;ebfhPawheaxhrinaralIdbaPaeydbgscwascw6EcdtfIdbMUdbaeclfhearclfhraicufgimbkavc:SefamcdtfcuaDcdtadcFFFF970Ecbyd;q:I:cjbHjjjjbbgmBdbdnadci6mbaoheamhraDhiinaraxaeydbcdtfIdbaxaeclfydbcdtfIdbMaxaecwfydbcdtfIdbMUdbaecxfhearclfhraicufgimbkkaqcifhzalc;ebfhHavc;qbfhOavheavyd:KehAavyd:OehCcbhscbhrcbhXcehQinaehLaoarcx2fgKydbhPaKclfydbhdabaXcx2fgecwfaKcwfydbgYBdbaeclfadBdbaeaPBdbakarfce86bbaOaYBdwaOadBdlaOaPBdbamarcdtfcbBdbcih8AdnasTmbaLhiinaOa8AcdtfaiydbgeBdba8AaeaY9haeaP9haead9hGGfh8AaiclfhiascufgsmbkkaXcefhXcbhsinaCaAaKascdtfydbcdtgifydbcdtfgYheawaifgdydbgPhidnaPTmbdninaeydbarSmeaeclfheaicufgiTmdxbkkaeaYaPcdtfc98fydbBdbadadydbcufBdbkascefgsci9hmbkdndndna8ATmbcuhrJbbbbhEcbhdavyd:KehYavyd:OehKindnawaOadcdtfydbcdtgsfydbgeTmbaxasfgiIdbh3aialcuadadcs0EcdtfclfIdbaHaecwaecw6EcdtfIdbMg5Udba5a3:th5aecdthiaKaYasfydbcdtfheinamaeydbgscdtfgPa5aPIdbMg3Udba3aEaEa39DgPEhEasaraPEhraeclfheaic98fgimbkkadcefgda8A9hmbkarcu9hmekaQaD9pmeindnakaQfRbbmbaQhrxdkaDaQcefgQ9hmbxdkka8Acza8Acz6EhsaOheaLhOarcu9hmekkazTmbaqcdtavc:Seffcwfheinaeydbcbyd;u:I:cjbH:bjjjbbaec98fheazcufgzmbkkavc:qdf8Kjjjjbk:0leoucuaicdtgvaicFFFFi0Egocbyd;q:I:cjbHjjjjbbhralalyd9GgwcdtfarBdbalawcefBd9GabarBdbaocbyd;q:I:cjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdlcuadcdtadcFFFFi0Ecbyd;q:I:cjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdwabydbcbavz:xjjjb8AabydbhraehladhvinaralydbcdtfgoaoydbcefBdbalclfhlavcufgvmbkcbhvabydlglhoarhwaihDinaoavBdbaoclfhoawydbavfhvawclfhwaDcufgDmbkadci9Uhqdnadcd9nmbabydwhocbhvinaecwfydbhwaeclfydbhDalaeydbcdtfgbabydbgbcefBdbaoabcdtfavBdbalaDcdtfgDaDydbgDcefBdbaoaDcdtfavBdbalawcdtfgwawydbgwcefBdbaoawcdtfavBdbaecxfheaqavcefgv9hmbkkinalalydbarydb9RBdbarclfhralclfhlaicufgimbkkQbabaeadaic;G:G:cjbz:ojjjbkQbabaeadaic;i:H:cjbz:ojjjbk9DeeuabcFeaicdtz:xjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk:3vioud9:du8Jjjjjbc;Wa9Rgl8Kjjjjbcbhvalcxfcbc;Kbz:xjjjb8AalcuadcitgoadcFFFFe0Ecbyd;q:I:cjbHjjjjbbgrBdxalceBd2araeadaicezNjjjbalcuaoadcjjjjoGEcbyd;q:I:cjbHjjjjbbgwBdzadcdthednadTmbabhiinaiavBdbaiclfhiadavcefgv9hmbkkawaefhDalabBdwalawBdl9cbhqindnadTmbaq9cq9:hkarhvaDhiadheinaiav8Pibak1:NcFrG87ebavcwfhvaicdfhiaecufgembkkalclfaq:NceGcdtfydbhxalclfaq9ce98gq:NceGcdtfydbhmalc;Wbfcbcjaz:xjjjb8AaDhvadhidnadTmbinalc;Wbfav8VebcdtfgeaeydbcefBdbavcdfhvaicufgimbkkcbhvcbhiinalc;WbfavfgeydbhoaeaiBdbaoaifhiavclfgvcja9hmbkadhvdndnadTmbinalc;WbfaDamydbgicetf8VebcdtfgeaeydbgecefBdbaxaecdtfaiBdbamclfhmavcufgvmbkaq9cv9smdcbhvinabawydbcdtfavBdbawclfhwadavcefgv9hmbxdkkaq9cv9smekkcwhvcbhiinalcxfavfc98fydbcbyd;u:I:cjbH:bjjjbbaiceGheclhvcehiaeTmbkalc;Waf8Kjjjjbk:Awliuo99iud9:cbhv8Jjjjjbca9Rgocbyd:4:I:cjbBdKaocb8Pd:W:I:cjb83izaocbyd;e:I:cjbBdwaocb8Pd:8:I:cjb83ibaicd4hrdndnadmbJFFuFhwJFFuuhDJFFuuhqJFFuFhkJFFuuhxJFFuFhmxekarcdthPaehsincbhiinaoczfaifgzasaifIdbgwazIdbgDaDaw9EEUdbaoaifgzawazIdbgDaDaw9DEUdbaiclfgicx9hmbkasaPfhsavcefgvad9hmbkaoIdKhDaoIdwhwaoIdChqaoIdlhkaoIdzhxaoIdbhmkdnadTmbJbbbbJbFu9hJbbbbamax:tgmamJbbbb9DEgmakaq:tgkakam9DEgkawaD:tgwawak9DEgw:vawJbbbb9BEhwdnalmbarcdthoindndnaeclfIdbaq:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:S9cC:ghHdndnaeIdbax:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikaHai:S:ehHdndnaecwfIdbaD:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabaHai:T9cy:g:e83ibaeaofheabcwfhbadcufgdmbxdkkarcdthoindndnaeIdbax:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cv9:9c;j:KM;j:KM;j:Kd:dhOdndnaeclfIdbaq:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cq9:9cM;j:KM;j:KM;jl:daO:ehOdndnaecwfIdbaD:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabaOai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cC9:9c:KM;j:KM;j:KMD:d:e83ibaeaofheabcwfhbadcufgdmbkkk9teiucbcbyd;y:I:cjbgeabcifc98GfgbBd;y:I:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;y:I:cjbgeabcrfc94GfgbBd;y:I:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd;y:I:cjbge9Rcifc98GaefgbBd;y:I:cjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akkk;Sddbcj:Gdk;idbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbbbbbbbbbbbbbbbbebbbdbbbbbbbebbbbbbbbbbbbbbbb4:h9w9N94:P:gW:j9O:ye9Pbbbbbb:l29hZ;69:9kZ;N;76Z;rg97Z;z;o9xZ8J;B85Z;:;u9yZ;b;k9HZ:2;Z9DZ9e:l9mZ59A8KZ:r;T3Z:A:zYZ79OHZ;j4::8::Y:D9V8:bbbb9s:49:Z8R:hBZ9M9M;M8:L;z;o8:;8:PG89q;x:J878R:hQ8::M:B;e87bbbbbbjZbbjZbbjZ:E;V;N8::Y:DsZ9i;H;68:xd;R8:;h0838:;W:NoZbbbb:WV9O8:uf888:9i;H;68:9c9G;L89;n;m9m89;D8Ko8:bbbbf:8tZ9m836ZS:2AZL;zPZZ818EZ9e:lxZ;U98F8:819E;68:FFuuFFuuFFuuFFuFFFuFFFuFbc;i:IdkCebbbebbbebbbdbbb9G:rbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(b){n=b.instance,n.exports.__wasm_call_ctors(),n.exports.meshopt_encodeVertexVersion(1),n.exports.meshopt_encodeIndexVersion(1)});function o(b){for(var f=new Uint8Array(b.length),y=0;y96?_-97:_>64?_-39:_+4}for(var S=0,y=0;y=3),c(n.exports.meshopt_spatialSortRemap,b,b.length/f,f*4)},encodeVertexBuffer:function(b,f,y){r(y>0&&y<=256),r(y%4==0);var _=n.exports.meshopt_encodeVertexBufferBound(f,y);return d(n.exports.meshopt_encodeVertexBuffer,_,b,f,y)},encodeVertexBufferLevel:function(b,f,y,_,S){r(y>0&&y<=256),r(y%4==0),r(_>=0&&_<=3),r(S===void 0||S==0||S==1);var Z=n.exports.meshopt_encodeVertexBufferBound(f,y);return d(n.exports.meshopt_encodeVertexBufferLevel,Z,b,f,y,_,S===void 0?-1:S)},encodeIndexBuffer:function(b,f,y){r(y==2||y==4),r(f%3==0);var _=m(b,y),S=n.exports.meshopt_encodeIndexBufferBound(f,u(_)+1);return d(n.exports.meshopt_encodeIndexBuffer,S,_,f,4)},encodeIndexSequence:function(b,f,y){r(y==2||y==4);var _=m(b,y),S=n.exports.meshopt_encodeIndexSequenceBound(f,u(_)+1);return d(n.exports.meshopt_encodeIndexSequence,S,_,f,4)},encodeGltfBuffer:function(b,f,y,_,S){var Z={ATTRIBUTES:this.encodeVertexBufferLevel,TRIANGLES:this.encodeIndexBuffer,INDICES:this.encodeIndexSequence};return r(Z[_]),Z[_](b,f,y,2,S===void 0?0:S)},encodeFilterOct:function(b,f,y,_){return r(y==4||y==8),r(_>=2&&_<=16),p(n.exports.meshopt_encodeFilterOct,b,f,y,_,16)},encodeFilterQuat:function(b,f,y,_){return r(y==8),r(_>=4&&_<=16),p(n.exports.meshopt_encodeFilterQuat,b,f,y,_,16)},encodeFilterExp:function(b,f,y,_,S){r(y>0&&y%4==0),r(_>=1&&_<=24);var Z={Separate:0,SharedVector:1,SharedComponent:2,Clamped:3};return r(!S||S in Z),p(n.exports.meshopt_encodeFilterExp,b,f,y,_,y,S?Z[S]:1)},encodeFilterColor:function(b,f,y,_){return r(y==4||y==8),r(_>=2&&_<=16),p(n.exports.meshopt_encodeFilterColor,b,f,y,_,16)}}})();var B4t=x(T(),1),uy=(function(){var e="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuixkbeeeddddillviebeoweuecj:Gdkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WboY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbrl79IV9Rbwq1Zkdbk:kYi5ud9:du8Jjjjjbcjq9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxcj;abad9Uc;WFbGcjdadca0EhmaialfgPar9Rgoadfhsavaoadz:jjjjbgzceVhHcbhOdndninaeaO9nmeaPax9RaD6mdamaeaO9RaOamfgoae6EgAcsfglc9WGhCaAcethXaxaDfhiaOaeaoaeao6E9RhQalcl4cifcd4hLazcjdfaAfhKcbhYabaOad2fg8AhEaHh3incbh5dnawTmbaxaYcd4fRbbh5kcbh8Eazcjdfhqinaih8Fdndndndna5a8Ecet4ciGgoc9:fPdebdkaPa8F9RaA6mrazcjdfa8EaA2fa8FaAz:jjjjb8Aa8FaAfhixdkazcjdfa8EaA2fcbaAz:kjjjb8Aa8FhixekaPa8F9RaL6mva8FaLfhidnaCTmbaPai9RcK6mbaocdtc:q:G:cjbfcj:G:cjbawEhaczhrcbhlinargoc9Wfghaqfhrdndndndndndnaaa8Fahco4fRbbalcoG4ciGcdtfydbPDbedvivvvlvkar9cb83bwar9cb83bbxlkarcbaiRbdai8Xbb9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbaqaofgrcGfcbaicdfa8J9c8N1:NfghRbbag9cjjjjjw:dg8J9qE86bbarcVfcbaha8J9c8M1:NfghRbbag9cjjjjjl:dg8J9qE86bbarc7fcbaha8J9c8L1:NfghRbbag9cjjjjjd:dg8J9qE86bbarctfcbaha8J9c8K1:NfghRbbag9cjjjjje:dg8J9qE86bbarc91fcbaha8J9c8J1:NfghRbbag9cjjjj;ab:dg8J9qE86bbarc4fcbaha8J9cg1:NfghRbbag9cjjjja:dg8J9qE86bbarc93fcbaha8J9ch1:NfghRbbag9cjjjjz:dgg9qE86bbarc94fcbahag9ca1:NfghRbbai8Xbe9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbarc95fcbaha8J9c8N1:NfgiRbbag9cjjjjjw:dg8J9qE86bbarc96fcbaia8J9c8M1:NfgiRbbag9cjjjjjl:dg8J9qE86bbarc97fcbaia8J9c8L1:NfgiRbbag9cjjjjjd:dg8J9qE86bbarc98fcbaia8J9c8K1:NfgiRbbag9cjjjjje:dg8J9qE86bbarc99fcbaia8J9c8J1:NfgiRbbag9cjjjj;ab:dg8J9qE86bbarc9:fcbaia8J9cg1:NfgiRbbag9cjjjja:dg8J9qE86bbarcufcbaia8J9ch1:NfgiRbbag9cjjjjz:dgg9qE86bbaiag9ca1:NfhixikaraiRblaiRbbghco4g8Ka8KciSg8KE86bbaqaofgrcGfaiclfa8Kfg8KRbbahcl4ciGg8La8LciSg8LE86bbarcVfa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc7fa8Ka8Lfg8KRbbahciGghahciSghE86bbarctfa8Kahfg8KRbbaiRbeghco4g8La8LciSg8LE86bbarc91fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc4fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc93fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc94fa8Kahfg8KRbbaiRbdghco4g8La8LciSg8LE86bbarc95fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc96fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc97fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc98fa8KahfghRbbaiRbigico4g8Ka8KciSg8KE86bbarc99faha8KfghRbbaicl4ciGg8Ka8KciSg8KE86bbarc9:faha8KfghRbbaicd4ciGg8Ka8KciSg8KE86bbarcufaha8KfgrRbbaiciGgiaiciSgiE86bbaraifhixdkaraiRbwaiRbbghcl4g8Ka8KcsSg8KE86bbaqaofgrcGfaicwfa8Kfg8KRbbahcsGghahcsSghE86bbarcVfa8KahfghRbbaiRbeg8Kcl4g8La8LcsSg8LE86bbarc7faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarctfaha8KfghRbbaiRbdg8Kcl4g8La8LcsSg8LE86bbarc91faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc4faha8KfghRbbaiRbig8Kcl4g8La8LcsSg8LE86bbarc93faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc94faha8KfghRbbaiRblg8Kcl4g8La8LcsSg8LE86bbarc95faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc96faha8KfghRbbaiRbvg8Kcl4g8La8LcsSg8LE86bbarc97faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc98faha8KfghRbbaiRbog8Kcl4g8La8LcsSg8LE86bbarc99faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc9:faha8KfghRbbaiRbrgicl4g8Ka8KcsSg8KE86bbarcufaha8KfgrRbbaicsGgiaicsSgiE86bbaraifhixekarai8Pbw83bwarai8Pbb83bbaiczfhikdnaoaC9pmbalcdfhlaoczfhraPai9RcL0mekkaoaC6moaimexokaCmva8FTmvkaqaAfhqa8Ecefg8Ecl9hmbkdndndndnawTmbasaYcd4fRbbgociGPlbedrbkaATmdazaYfh8Fazcjdfhhcbh8EaEhaina8FRbbhraahocbhlinaoahalfRbbgqce4cbaqceG9R7arfgr86bbaoadfhoaAalcefgl9hmbkaacefhaa8Fcefh8FahaAfhha8Ecefg8Ecl9hmbxikkaATmeazaYfhaazcjdfhhcbhoceh8EaKh8FinaEaofhlaa8Vbbhrcbhoinala8FaofRbbcwtahaofRbbgqVc;:FiGce4cbaqceG9R7arfgr87bbaladfhlaQaocefgofmbka8FaXfh8FcdhoaacdfhaahaXfhha8EceGhlcbh8EalmbxdkkaATmbaocl4h8EazaYfRbbhqcwhoa3hlinalRbbaotaqVhqalcefhlaocwfgoca9hmbkcbhhaEh8FaKhainazcjdfahfRbbhrcwhoaahlinalRbbaotarVhralaAfhlaocwfgoca9hmbkara8E94aq7hqcbhoa8Fhlinalaqao486bbalcefhlaocwfgoca9hmbka8Fadfh8FaacefhaahcefghaA9hmbkkaEclfhEa3clfh3aYclfgYad6mbkaza8AaAcufad2fadz:jjjjb8AaAaOfhOaihxaimbkc9:hoxdkcbc99aPax9RakSEhoxekc9:hokavcjqf8Kjjjjbaok:ysezu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnalaeci9UgrcHf6mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:kjjjb8Aav9cu83iUav9cu83i8Wav9cu83iyav9cu83iaav9cu83iKav9cu83izav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbavaiaqaDcsGfRbbgscl4gP9RcsGcdtfydbaxcefgOaPEhDavaias9RcsGcdtfydbaOaPTgzfgOascsGgPEhsaPThPdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiazfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaPfhiaOaPfhxxekaxcbalRbbgsEgHaDc;:eSgDfhOascsGhAdndnascl4gCmbaOcefhzxekaOhzavaiaC9RcsGcdtfydbhOkdndnaAmbazcefhxxekazhxavaias9RcsGcdtfydbhzkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhHascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaHhDxekaDcefhDkasce4cbasceG9R7amfgmhHkdndnaCcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhOaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkaOhsxekascefhskaPce4cbaPceG9R7amfgmhOkdndnaAcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhzaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkazhlxekalcefhlkaPce4cbaPceG9R7amfgmhzkdndnadcd9hmbabarcetfgDaH87ebaDclfaz87ebaDcdfaO87ebxekabarcdtfgDaHBdbaDcwfazBdbaDclfaOBdbkavc;abfaocitfgDaOBdbaDaHBdlavaicdtfaHBdbavc;abfaocefcsGcitfgDazBdbaDaOBdlavaicefgicsGcdtfaOBdbavc;abfaocdfcsGcitfgDaHBdbaDazBdlavaiaCTaCcsSVfgicsGcdtfazBdbaiaATaAcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnalaecvf9pmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk:4ioiue99dud99dud99dnaeTmbcbhiabhlindndnal8Uebgv:YgoJ:ji:1Salcof8UebgrciVgw:Y:vgDNJbbbZJbbb:;avcu9kEMgq:lJbbb9p9DTmbaq:Ohkxekcjjjj94hkkalclf8Uebhvalcdf8UebhxalarcefciGcetfak87ebdndnax:YgqaDNJbbbZJbbb:;axcu9kEMgm:lJbbb9p9DTmbam:Ohxxekcjjjj94hxkabaiarciGgkfcd7cetfax87ebdndnav:YgmaDNJbbbZJbbb:;avcu9kEMgP:lJbbb9p9DTmbaP:Ohvxekcjjjj94hvkalarcufciGcetfav87ebdndnawaw2:ZgPaPMaoaoN:taqaqN:tamamN:tgoJbbbbaoJbbbb9GE:raDNJbbbZMgD:lJbbb9p9DTmbaD:Ohrxekcjjjj94hrkalakcetfar87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk:Tvirud99eudndnadcl9hmbaeTmeindndnabRbbgiabcefgl8Sbbgvabcdfgo8Sbbgrf9R:YJbbuJabcifgwRbbgdce4adVgDcd4aDVgDcl4aDVgD:Z:vgqNJbbbZMgk:lJbbb9p9DTmbak:Ohxxekcjjjj94hxkaoax86bbdndnaraif:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohoxekcjjjj94hokalao86bbdndnavaifar9R:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabai86bbdndnaDadcetGadceGV:ZaqNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkawad86bbabclfhbaecufgembxdkkaeTmbindndnab8Vebgiabcdfgl8Uebgvabclfgo8Uebgrf9R:YJbFu9habcofgw8Vebgdce4adVgDcd4aDVgDcl4aDVgDcw4aDVgD:Z:vgqNJbbbZMgk:lJbbb9p9DTmbak:Ohxxekcjjjj94hxkaoax87ebdndnaraif:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohoxekcjjjj94hokalao87ebdndnavaifar9R:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabai87ebdndnaDadcetGadceGV:ZaqNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkawad87ebabcwfhbaecufgembkkk9teiucbcbyd:K:G:cjbgeabcifc98GfgbBd:K:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkk83dbcj:Gdk8Kbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbc:K:Gdkl8W:qbb",t="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuixkbbebeeddddilve9Weeeviebeoweuecj:Gdkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WbwY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbDl79IV9Rbqq:59Dklbzik94evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaeai86b:q:W:cjbaecitab8Piw83i:q:G:cjbaecefgecjd9hmbkk:SBlEud97dur978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaialfgxar9RhodnadTgmmbavaoad;8qbbkaicefhPcj;abad9Uc;WFbGcjdadca0EhsdndndnadTmbaoadfhzcbhHinaeaH9nmdaxaP9RaD6miabaHad2fgOavcjdfasaeaH9RaHasfae6EgAaAcsfgoc9WGgCSEhXaPaDfhQaocl4cifcd4hLavcj;cbfaCcetfhKavcj;cbfaCci2fhYavcj;cbfaCfh8AcbhEaoc;ab6h3incbh5dnawTmbaPaEcd4fRbbh5kcbh8Eavcj;cbfh8Findndndndna5a8Ecet4ciGgoc9:fPdebdkaxaQ9RaC6mwdnaCTmbavcj;cbfa8EaC2faQaC;8qbbkaQaAfhQxdkaCTmeavcj;cbfa8EaC2fcbaC;8kbxekaxaQ9RaL6moaoclVcbawEhraQaLfhocbhidna3mbaxao9Rc;Gb6mbcbhlina8FalfhidndndndndndnaQalco4fRbbgqciGarfPDbedibledibkaipxbbbbbbbbbbbbbbbbpklbxlkaiaopbblaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLgacdp:meaapmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9oghpxiiiiiiiiiiiiiiiip8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaoclffa8JRb:q:W:cjbfhoxikaiaopbbwaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLpxssssssssssssssssp9oghpxssssssssssssssssp8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaocwffa8JRb:q:W:cjbfhoxdkaiaopbbbpklbaoczfhoxekaiaopbbdaoRbbggcitpbi:q:G:cjbagRb:q:W:cjbggpsaoRbeg8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbagaocdffa8JRb:q:W:cjbfhokdndndndndndnaqcd4ciGarfPDbedibledibkaiczfpxbbbbbbbbbbbbbbbbpklbxlkaiczfaopbblaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLgacdp:meaapmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9oghpxiiiiiiiiiiiiiiiip8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaoclffa8JRb:q:W:cjbfhoxikaiczfaopbbwaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLpxssssssssssssssssp9oghpxssssssssssssssssp8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaocwffa8JRb:q:W:cjbfhoxdkaiczfaopbbbpklbaoczfhoxekaiczfaopbbdaoRbbggcitpbi:q:G:cjbagRb:q:W:cjbggpsaoRbeg8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbagaocdffa8JRb:q:W:cjbfhokdndndndndndnaqcl4ciGarfPDbedibledibkaicafpxbbbbbbbbbbbbbbbbpklbxlkaicafaopbblaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLgacdp:meaapmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9oghpxiiiiiiiiiiiiiiiip8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaoclffa8JRb:q:W:cjbfhoxikaicafaopbbwaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLpxssssssssssssssssp9oghpxssssssssssssssssp8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbagaocwffa8JRb:q:W:cjbfhoxdkaicafaopbbbpklbaoczfhoxekaicafaopbbdaoRbbggcitpbi:q:G:cjbagRb:q:W:cjbggpsaoRbeg8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbagaocdffa8JRb:q:W:cjbfhokdndndndndndnaqco4arfPDbedibledibkaic8Wfpxbbbbbbbbbbbbbbbbpklbxlkaic8Wfaopbblaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLgacdp:meaapmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9oghpxiiiiiiiiiiiiiiiip8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Ngicitpbi:q:G:cjbaiRb:q:W:cjbgipsaap5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbaiaoclffaqRb:q:W:cjbfhoxikaic8Wfaopbbwaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLpxssssssssssssssssp9oghpxssssssssssssssssp8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Ngicitpbi:q:G:cjbaiRb:q:W:cjbgipsaap5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spklbaiaocwffaqRb:q:W:cjbfhoxdkaic8Wfaopbbbpklbaoczfhoxekaic8WfaopbbdaoRbbgicitpbi:q:G:cjbaiRb:q:W:cjbgipsaoRbegqcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpklbaiaocdffaqRb:q:W:cjbfhokalc;abfhialcjefaC0meaihlaxao9Rc;Fb0mbkkdnaiaC9pmbaici4hlinaxao9RcK6mwa8FaifhqdndndndndndnaQaico4fRbbalcoG4ciGarfPDbedibledibkaqpxbbbbbbbbbbbbbbbbpkbbxlkaqaopbblaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLgacdp:meaapmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9oghpxiiiiiiiiiiiiiiiip8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spkbbagaoclffa8JRb:q:W:cjbfhoxikaqaopbbwaopbbbgaclp:meaapmbzeHdOiAlCvXoQrLpxssssssssssssssssp9oghpxssssssssssssssssp8Jgap5b9cjF;8;4;W;G;ab9:9cU1:Nggcitpbi:q:G:cjbagRb:q:W:cjbggpsaap5e9cjF;8;4;W;G;ab9:9cU1:Ng8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPahaap9spkbbagaocwffa8JRb:q:W:cjbfhoxdkaqaopbbbpkbbaoczfhoxekaqaopbbdaoRbbggcitpbi:q:G:cjbagRb:q:W:cjbggpsaoRbeg8Jcitpbi:q:G:cjbp9UpmbedilvorzHOACXQLpPpkbbagaocdffa8JRb:q:W:cjbfhokalcdfhlaiczfgiaC6mbkkaohQaoTmoka8FaCfh8Fa8Ecefg8Ecl9hmbkdndndndnawTmbazaEcd4fRbbglciGPlbedwbkaCTmdaXaEfhlavaEfpbdbh8Kcbhoinalavcj;cbfaofpblbg8La8Aaofpblbg8MpmbzeHdOiAlCvXoQrLg8NaKaofpblbgyaYaofpblbg8PpmbzeHdOiAlCvXoQrLgIpmbezHdiOAlvCXorQLgacep9Taapxeeeeeeeeeeeeeeeeghp9op9Hp9rgaa8Kp9Ug8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp9Ug8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp9Ug8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp9Ug8Kp9Abbbaladfgla8Ka8NaIpmwDKYqk8AExm35Ps8E8Fgacep9Taaahp9op9Hp9rgap9Ug8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp9Ug8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp9Ug8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp9Ug8Kp9Abbbaladfgla8Ka8La8MpmwKDYq8AkEx3m5P8Es8Fg8Laya8PpmwKDYq8AkEx3m5P8Es8Fg8MpmbezHdiOAlvCXorQLgacep9Taaahp9op9Hp9rgap9Ug8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp9Ug8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp9Ug8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp9Ug8Kp9Abbbaladfgla8Ka8La8MpmwDKYqk8AExm35Ps8E8Fgacep9Taaahp9op9Hp9rgap9Ughp9Abbbaladfglahaaaapmlvorlvorlvorlvorp9Ughp9AbbbaladfglahaaaapmwDqkwDqkwDqkwDqkp9Ughp9AbbbaladfglahaaaapmxmPsxmPsxmPsxmPsp9Ug8Kp9AbbbaladfhlaoczfgoaC6mbxikkaCTmeaXaEfhlavaEfpbdbh8Kcbhoinalavcj;cbfaofpblbg8La8Aaofpblbg8MpmbzeHdOiAlCvXoQrLg8NaKaofpblbgyaYaofpblbg8PpmbzeHdOiAlCvXoQrLgIpmbezHdiOAlvCXorQLgacep:neaapxebebebebebebebebghp9op:bep9rgaa8Kp:oeg8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp:oeg8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp:oeg8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp:oeg8Kp9Abbbaladfgla8Ka8NaIpmwDKYqk8AExm35Ps8E8Fgacep:neaaahp9op:bep9rgap:oeg8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp:oeg8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp:oeg8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp:oeg8Kp9Abbbaladfgla8Ka8La8MpmwKDYq8AkEx3m5P8Es8Fg8Laya8PpmwKDYq8AkEx3m5P8Es8Fg8MpmbezHdiOAlvCXorQLgacep:neaaahp9op:bep9rgap:oeg8Kp9Abbbaladfgla8Kaaaapmlvorlvorlvorlvorp:oeg8Kp9Abbbaladfgla8KaaaapmwDqkwDqkwDqkwDqkp:oeg8Kp9Abbbaladfgla8KaaaapmxmPsxmPsxmPsxmPsp:oeg8Kp9Abbbaladfgla8Ka8La8MpmwDKYqk8AExm35Ps8E8Fgacep:neaaahp9op:bep9rgap:oeghp9Abbbaladfglahaaaapmlvorlvorlvorlvorp:oeghp9AbbbaladfglahaaaapmwDqkwDqkwDqkwDqkp:oeghp9AbbbaladfglahaaaapmxmPsxmPsxmPsxmPsp:oeg8Kp9AbbbaladfhlaoczfgoaC6mbxdkkaCTmbaXaEfhrcbhocbalcl4gl9Rc8FGhiavaEfpbdbhhinaravcj;cbfaofpblbg8Ka8Aaofpblbg8LpmbzeHdOiAlCvXoQrLg8MaKaofpblbg8NaYaofpblbgypmbzeHdOiAlCvXoQrLg8PpmbezHdiOAlvCXorQLgaaip:Reaaalp:Tep9qgaahp9rghp9Abbbaradfgrahaaaapmlvorlvorlvorlvorp9rghp9AbbbaradfgrahaaaapmwDqkwDqkwDqkwDqkp9rghp9AbbbaradfgrahaaaapmxmPsxmPsxmPsxmPsp9rghp9Abbbaradfgraha8Ma8PpmwDKYqk8AExm35Ps8E8Fgaaip:Reaaalp:Tep9qgap9rghp9Abbbaradfgrahaaaapmlvorlvorlvorlvorp9rghp9AbbbaradfgrahaaaapmwDqkwDqkwDqkwDqkp9rghp9AbbbaradfgrahaaaapmxmPsxmPsxmPsxmPsp9rghp9Abbbaradfgraha8Ka8LpmwKDYq8AkEx3m5P8Es8Fg8Ka8NaypmwKDYq8AkEx3m5P8Es8Fg8LpmbezHdiOAlvCXorQLgaaip:Reaaalp:Tep9qgap9rghp9Abbbaradfgrahaaaapmlvorlvorlvorlvorp9rghp9AbbbaradfgrahaaaapmwDqkwDqkwDqkwDqkp9rghp9AbbbaradfgrahaaaapmxmPsxmPsxmPsxmPsp9rghp9Abbbaradfgraha8Ka8LpmwDKYqk8AExm35Ps8E8Fgaaip:Reaaalp:Tep9qgap9rghp9Abbbaradfgrahaaaapmlvorlvorlvorlvorp9rghp9AbbbaradfgrahaaaapmwDqkwDqkwDqkwDqkp9rghp9AbbbaradfgrahaaaapmxmPsxmPsxmPsxmPsp9rghp9AbbbaradfhraoczfgoaC6mbkkaEclfgEad6mbkdnaXavcjdf9hmbaAad2goTmbaOavcjdfao;8qbbkdnammbavaXaAcufad2fad;8qbbkaAaHfhHc9:hoaQhPaQmbxlkkaeTmbaDalfhrcbhocuhlinaralaD9RglfaD6mdasaeao9Raoasfae6Eaofgoae6mbkaial9RhPkcbc99axaP9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaokwbz:bjjjbkNsezu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnalaeci9UgrcHf6mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbav9cu83iUav9cu83i8Wav9cu83iyav9cu83iaav9cu83iKav9cu83izav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbavaiaqaDcsGfRbbgscl4gP9RcsGcdtfydbaxcefgOaPEhDavaias9RcsGcdtfydbaOaPTgzfgOascsGgPEhsaPThPdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiazfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaPfhiaOaPfhxxekaxcbalRbbgsEgHaDc;:eSgDfhOascsGhAdndnascl4gCmbaOcefhzxekaOhzavaiaC9RcsGcdtfydbhOkdndnaAmbazcefhxxekazhxavaias9RcsGcdtfydbhzkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhHascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaHhDxekaDcefhDkasce4cbasceG9R7amfgmhHkdndnaCcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhOaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkaOhsxekascefhskaPce4cbaPceG9R7amfgmhOkdndnaAcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhzaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkazhlxekalcefhlkaPce4cbaPceG9R7amfgmhzkdndnadcd9hmbabarcetfgDaH87ebaDclfaz87ebaDcdfaO87ebxekabarcdtfgDaHBdbaDcwfazBdbaDclfaOBdbkavc;abfaocitfgDaOBdbaDaHBdlavaicdtfaHBdbavc;abfaocefcsGcitfgDazBdbaDaOBdlavaicefgicsGcdtfaOBdbavc;abfaocdfcsGcitfgDaHBdbaDazBdlavaiaCTaCcsSVfgicsGcdtfazBdbaiaATaAcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnalaecvf9pmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk;Toio97eue97aec98Ghedndnadcl9hmbaeTmecbhdinababpbbbgicKp:RecKp:Sep;6eglaicwp:RecKp:Sep;6ealp;Geaiczp:RecKp:Sep;6egvp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egralpxbbbjbbbjbbbjbbbjgwp9op9rp;Keglpxbb;:9cbb;:9cbb;:9cbb;:9calalp;Meaoaop;Meavaravawp9op9rp;Keglalp;Mep;Kep;Kep;Jep;Negvp;Mepxbbn0bbn0bbn0bbn0grp;KepxFbbbFbbbFbbbFbbbp9oaipxbbbFbbbFbbbFbbbFp9op9qalavp;Mearp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaoavp;Mearp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbabczfhbadclfgdae6mbxdkkaeTmbcbhdinabczfgDaDpbbbgipxbbbbbbFFbbbbbbFFgwp9oabpbbbgoaipmbediwDqkzHOAKY8AEgvczp:Reczp:Sep;6eglaoaipmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eavczp:Sep;6egvp;Gealp;Gep;Kep;Legipxbbbbbbbbbbbbbbbbp:2egralpxbbbjbbbjbbbjbbbjgqp9op9rp;Keglpxb;:FSb;:FSb;:FSb;:FSalalp;Meaiaip;Meavaravaqp9op9rp;Keglalp;Mep;Kep;Kep;Jep;Negvp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbp9oaiavp;Mearp;Keczp:Rep9qgialavp;Mearp;KepxFFbbFFbbFFbbFFbbp9oglpmwDKYqk8AExm35Ps8E8Fp9qpkbbabaoawp9oaialpmbezHdiOAlvCXorQLp9qpkbbabcafhbadclfgdae6mbkkk;2ileue97euo97dnaec98GgiTmbcbheinabcKfpx:ji:1S:ji:1S:ji:1S:ji:1SabpbbbglabczfgvpbbbgopmlvorxmPsCXQL358E8Fgrczp:Segwpxibbbibbbibbbibbbp9qp;6egDp;NegqaDaDp;MegDaDp;KealaopmbediwDqkzHOAKY8AEgDczp:Reczp:Sep;6eglalp;MeaDczp:Sep;6egoaop;Mearczp:Reczp:Sep;6egrarp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jep;Mepxbbn0bbn0bbn0bbn0gDp;KepxFFbbFFbbFFbbFFbbgkp9oaqaop;MeaDp;Keczp:Rep9qgoaqalp;MeaDp;Keakp9oaqarp;MeaDp;Keczp:Rep9qgDpmwDKYqk8AExm35Ps8E8Fglp5eawclp:RegqpEi:T:j83ibavalp5baqpEd:T:j83ibabcwfaoaDpmbezHdiOAlvCXorQLgDp5eaqpEe:T:j83ibabaDp5baqpEb:T:j83ibabcafhbaeclfgeai6mbkkkuee97dnadcd4ae2c98GgeTmbcbhdinababpbbbgicwp:Recwp:Sep;6eaicep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbabczfhbadclfgdae6mbkkk:Sodw97euaec98Ghedndnadcl9hmbaeTmecbhdinabpxbbuJbbuJbbuJbbuJabpbbbgicKp:TeglaicYp:Tep9qgvcdp:Teavp9qgvclp:Teavp9qgop;6ep;Negvaicwp:RecKp:SegraipxFbbbFbbbFbbbFbbbgwp9ogDp:Uep;6ep;Mepxbbn0bbn0bbn0bbn0gqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9oavaDarp:Xeaiczp:RecKp:Segip:Uep;6ep;Meaqp;Keawp9op9qavaDaraip:Uep:Xep;6ep;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qavaoalcep:Rep9oalpxebbbebbbebbbebbbp9op9qp;6ep;Meaqp;KecKp:Rep9qpkbbabczfhbadclfgdae6mbxdkkaeTmbcbhdinabczfgkpxbFu9hbFu9hbFu9hbFu9habpbbbglakpbbbgrpmlvorxmPsCXQL358E8Fgvczp:TegqavcHp:Tep9qgicdp:Teaip9qgiclp:Teaip9qgicwp:Teaip9qgop;6ep;NegialarpmbediwDqkzHOAKY8AEgDpxFFbbFFbbFFbbFFbbglp9ograDczp:Segwp:Ueavczp:Reczp:SegDp:Xep;6ep;Mepxbbn0bbn0bbn0bbn0gvp;Kealp9oaiarawaDp:Uep:Xep;6ep;Meavp;Keczp:Rep9qgwaiaoaqcep:Rep9oaqpxebbbebbbebbbebbbp9op9qp;6ep;Meavp;Keczp:ReaiaDarp:Uep;6ep;Meavp;Kealp9op9qgipmwDKYqk8AExm35Ps8E8FpkbbabawaipmbezHdiOAlvCXorQLpkbbabcafhbadclfgdae6mbkkk9teiucbcbydj:G:cjbgeabcifc98GfgbBdj:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkxebcj:Gdklz:zbb",n=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),i=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var o=WebAssembly.validate(n)?a(t):a(e),r,s=WebAssembly.instantiate(o,{}).then(function(S){r=S.instance,r.exports.__wasm_call_ctors()});function a(S){for(var Z=new Uint8Array(S.length),V=0;V96?C-97:C>64?C-39:C+4}for(var G=0,V=0;V0?y(S,Z,V,u[C],d[G]):s.then(function(){var E=new Uint8Array(S*Z);return c(r,r.exports[u[C]],E,S,Z,V,r.exports[d[G]]),E})}}})();var K4t=x(T(),1),z4t=(function(){var e="b9H79Tebbbe:6eO9Geueu9Geub9Gbb9Gsuuuuuuuuuuuu99uueu9Gvuuuuub9Gruuuuuuub9Gouuuuuue999Gvuuuuueu9Gzuuuuuuuuuuu99uuuub9Gquuuuuuu99uueu9GPuuuuuuuuuuu99uueu9Gquuuuuuuu99ueu9Gruuuuuu99eu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9Gluuuub9GiuuueuiLQdilvorlwDiqkxmPszbHHbelve9Weiiviebeoweuecj:Gdkr:Bdxo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95bw8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bD8A9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9O9v9W9K9HtWbqQ9TW79O9V9Wt9F79P9T9W29P9M959t29V9W9W95bkX9TW79O9V9Wt9F79P9T9W29P9M959qV919UWbxQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7bmX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2WbPa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9Wbs59TW79O9V9Wt9F9NW9UWV9HtW9q9V79Pt9P9V9U9sW9T9H9Wbzl79IV9RbHDwebcekdCXq;y;WeQdbk;r:herYue99iuY99Xue9:D998Jjjjjbcj;sb9Rgs8Kjjjjbcbhzasc:Cefcbc;Kbz:tjjjb8AdnabaeSmbabaeadcdtzMjjjb8AkdnamcdGTmbalcrfci4cbyd1:H:cjbHjjjjbbhHasc:Cefasyd;8egecdtfaHBdbasaecefBd;8ecbhlcbhednadTmbabheadhOinaHaeydbci4fcb86bbaeclfheaOcufgOmbkcbhlabheadhOinaHaeydbgAci4fgCaCRbbgCceaAcrGgAtV86bbaCcu7aA4ceGalfhlaeclfheaOcufgOmbkcualcdtalcFFFFi0Ehekaecbyd1:H:cjbHjjjjbbhzasc:Cefasyd;8egecdtfazBdbasaecefBd;8ealcd4alfhOcehHinaHgecethHaeaO6mbkcbhXcuaecdtgOaecFFFFi0Ecbyd1:H:cjbHjjjjbbhHasc:Cefasyd;8egAcdtfaHBdbasaAcefBd;8eaHcFeaOz:tjjjbhQdnadTmbaecufhLcbhKindndnaQabaKcdtfgYydbgAc:v;t;h;Ev2aLGgOcdtfgCydbgHcuSmbceheinazaHcdtfydbaASmdaOaefhHaecefheaQaHaLGgOcdtfgCydbgHcu9hmbkkazaXcdtfaABdbaCaXBdbaXhHaXcefhXkaYaHBdbaKcefgKad9hmbkkaQcbyd:m:H:cjbH:bjjjbbasasyd;8ecufBd;8ekcbh8AcualcefgecdtaecFFFFi0Ecbyd1:H:cjbHjjjjbbhLasc:Cefasyd;8egecdtfaLBdbasaLBdNeasaecefBd;8ecuadcitadcFFFFe0Ecbyd1:H:cjbHjjjjbbhEasc:Cefasyd;8egecdtfaEBdbasaEBd:yeasaecefBd;8eascNefabadalcbz:cjjjbcualcdtgealcFFFFi0Eg3cbyd1:H:cjbHjjjjbbhOasc:Cefasyd;8egHcdtfaOBdbasaHcefBd;8ea3cbyd1:H:cjbHjjjjbbhQasc:Cefasyd;8egHcdtfaQBdbasaHcefBd;8eaOaQaialavazasc:Cefz:djjjbalcbyd1:H:cjbHjjjjbbhYasc:Cefasyd;8egHcdtfaYBdbasaHcefBd;8ea3cbyd1:H:cjbHjjjjbbhHasc:Cefasyd;8egAcdtfaHBdbasaAcefBd;8ea3cbyd1:H:cjbHjjjjbbhAasc:Cefasyd;8egCcdtfaABdbasaCcefBd;8eaHcFeaez:tjjjbh5aAcFeaez:tjjjbh8EdnalTmbindnaLa8AgAcefg8AcdtfydbgCaLaAcdtgefydbgHSmbaCaH9Rh8FaEaHcitfhaa8Eaefhha5aefhKcbhCindndnaaaCcitfydbgXaA9hmbaKaABdbahaABdbxekdnaLaXcdtggfgeclfydbgHaeydbgeSmbaHae9RhHaEaecitfheinaeydbaASmdaecwfheaHcufgHmbkka8EagfgeaAaXaeydbcuSEBdbaKaXaAaKydbcuSEBdbkaCcefgCa8F9hmbkka8Aal9hmbkaOhHaQhAa5hXa8EhCcbheindndnaeaHydbgK9hmbdnaeaAydbgK9hmbaXydbhKdnaCydbg8Fcu9hmbaKcu9hmbaYaefcb86bbxikdna8FcuSmbaKcuSmbaea8FSmbaOa8FcdtfydbaOaKcdtfydb9hmbaYaefcd86bbxikaYaefhadnaea8FSmbaeaKSmbaace86bbxikaacl86bbxdkdnaeaQaKcdtg8Ffydb9hmbdnaCydbgacuSmbaeaaSmbaXydbggcuSmbaeagSmba8Ea8FfydbghcuSmbahaKSmba5a8Ffydbg8FcuSmba8FaKSmbdnaOaacdtfydbgKaOa8Fcdtfydb9hmbaKaOagcdtfydbg8FSmba8FaOahcdtfydb9hmbaYaefcd86bbxlkaYaefcl86bbxikaYaefcl86bbxdkaYaefcl86bbxekaYaefaYaKfRbb86bbkaHclfhHaAclfhAaXclfhXaCclfhCalaecefge9hmbkdnamcaGTmbcbh8JindndnaYa8Jfg8KRbbg8Lc9:fPibebekdndndnaOa8Jcdtfydbgea8J9hmbdnaqmbcbh8FxdkdnazTmbcbh8Fa8JheinaqazaecdtgefydbfRbbce4a8FVceGh8FaQaefydbgea8J9hmbxikkcbh8Fa8JheinaqaefRbbce4a8FVceGh8FaQaecdtfydbgea8J9hmbxdkkaYaefRbbhexeka8JheindnaLaecdtg8AfgeclfydbgHaeydbgeSmbaHae9RhgaEaecitfhhaOa8AfhacbhKinahaKcitfydbgXhednindnaLaecdtgCfgeclfydbgHaeydbgeSmbaHae9RhHaEaecitfheaaydbhAdninaOaeydbcdtfydbaASmeaecwfheaHcufgHTmdxbkkcbhexdkaQaCfydbgeaX9hmbkceheka8FaeVh8FaKcefgKag9hmbkkaQa8Afydbgea8J9hmbka8Lcia8FceGEheka8Kae86bbka8Jcefg8Jal9hmbkkdnaqTmbdndnazTmbazheaOhHalhAindnaqaeydbfRbbceGTmbaYaHydbfcl86bbkaeclfheaHclfhHaAcufgAmbxdkkaqheaOhHalhAindnaeRbbceGTmbaYaHydbfcl86bbkaecefheaHclfhHaAcufgAmbkkaOhealhAaYhHindnaYaeydbfRbbcl9hmbaHcl86bbkaeclfheaHcefhHaAcufgAmbkkamceGTmbaYhealhHindnaeRbbce9hmbaecl86bbkaecefheaHcufgHmbkkcbh8Mcualcx2alc;v:Q;v:Qe0Ecbyd1:H:cjbHjjjjbbh8Nasc:Cefasyd;8egecdtfa8NBdbasaecefBd;8eascbBd:qeas9cb83i1ea8Naialavazasc1efz:ejjjbhydndnaDmbcbh8PcbhCxekcbhCawhecbhHindnaeIdbJbbbb9ETmbasaCcdtfaHBdbaCcefhCkaeclfheaDaHcefgH9hmbkcuaCal2gecdtaecFFFFi0Ecbyd1:H:cjbHjjjjbbh8Pasc:Cefasyd;8egecdtfa8PBdbasaecefBd;8ealTmbdnaCmbcbhCxekarcd4hgdnazTmbaCcdthhcbh8Fa8Phainaoaza8Fcdtfydbag2cdtfhKasheaahHaChAinaHaKaeydbcdtgXfIdbawaXfIdbNUdbaeclfheaHclfhHaAcufgAmbkaaahfhaa8Fcefg8Fal9hmbxdkkaCcdthhcbh8Fa8Phainaoa8Fag2cdtfhKasheaahHaChAinaHaKaeydbcdtgXfIdbawaXfIdbNUdbaeclfheaHclfhHaAcufgAmbkaaahfhaa8Fcefg8Fal9hmbkkcualc8S2gHalc;D;O;f8U0EgXcbyd1:H:cjbHjjjjbbheasc:Cefasyd;8egAcdtfaeBdbasaAcefBd;8eaecbaHz:tjjjbhIcbh8RcbhgdnaCTmbcbh8MaXcbyd1:H:cjbHjjjjbbhgasc:Cefasyd;8egecdtfagBdbasaecefBd;8eagcbaHz:tjjjb8AcuaCal2gecltgHaecFFFFb0Ecbyd1:H:cjbHjjjjbbh8Rasc:Cefasyd;8egecdtfa8RBdbasaecefBd;8ea8RcbaHz:tjjjb8AamcjjjjdGTmbcualcltgealcFFFFb0Ecbyd1:H:cjbHjjjjbbh8Masc:Cefasyd;8egHcdtfa8MBdbasaHcefBd;8ea8Mcbaez:tjjjb8AkdnadTmbcbhKabhHina8NaHclfydbg8Fcx2fgeIdba8NaHydbgacx2fgAIdbg8S:tgRa8NaHcwfydbghcx2fgXIdlaAIdlg8U:tg8VNaeIdla8U:tg8WaXIdba8S:tg8XN:tg8Ya8YNa8WaXIdwaAIdwg8Z:tg80NaeIdwa8Z:tg8Wa8VN:tg81a81Na8Wa8XNaRa80N:tg80a80NMMg8V:rhBa8Yh8Xa80h8Wa81hRdna8VJbbbb9EgATmba8YaB:vh8Xa80aB:vh8Wa81aB:vhRkaIaOaacdtfydbgXc8S2fgeaRaB:rg8VaRNNg83aeIdbMUdbaea8Wa8Va8WNgUNg85aeIdlMUdlaea8Xa8Va8XNg86Ng87aeIdwMUdwaeaRaUNgUaeIdxMUdxaea86aRNg88aeIdzMUdzaea8Wa86Ng89aeIdCMUdCaeaRa8Va8Xa8ZNaRa8SNa8Ua8WNMM:mg8:Ng86NgRaeIdKMUdKaea8Wa86Ng8WaeId3MUd3aea8Xa86Ng8XaeIdaMUdaaea86a8:Ng86aeId8KMUd8Kaea8VaeIdyMUdyaIaOa8Fcdtfydbg8Fc8S2fgea83aeIdbMUdbaea85aeIdlMUdlaea87aeIdwMUdwaeaUaeIdxMUdxaea88aeIdzMUdzaea89aeIdCMUdCaeaRaeIdKMUdKaea8WaeId3MUd3aea8XaeIdaMUdaaea86aeId8KMUd8Kaea8VaeIdyMUdyaIaOahcdtfydbgac8S2fgea83aeIdbMUdbaea85aeIdlMUdlaea87aeIdwMUdwaeaUaeIdxMUdxaea88aeIdzMUdzaea89aeIdCMUdCaeaRaeIdKMUdKaea8WaeId3MUd3aea8XaeIdaMUdaaea86aeId8KMUd8Kaea8VaeIdyMUdydna8MTmbdnaATmba8YaB:vh8Ya80aB:vh80a81aB:vh81ka8MaXcltfgeaBJbbbZNgRa80Ng8VaeIdlMUdlaeaRa8YNg8WaeIdwMUdwaeaRa81Ng8XaeIdbMUdbaeaRa8S:ma81Na8Ua80N:ta8Za8YN:tNgRaeIdxMUdxa8Ma8Fcltfgea8VaeIdlMUdlaea8WaeIdwMUdwaea8XaeIdbMUdbaeaRaeIdxMUdxa8Maacltfgea8VaeIdlMUdlaea8WaeIdwMUdwaea8XaeIdbMUdbaeaRaeIdxMUdxkaHcxfhHaKcifgKad6mbkkdnalTmbJq;x8J88J;n;m;m89J:v:;;w8ZamczGEamc;abGEh80cbhHaOhXazhKaIhea8NhAindnaHaXydb9hmbaHh8FdnazTmbaKydbh8Fka80hRdnaqTmbJbbjZa80aqa8FfRbbclGEhRkaecxfg8Fa8FIdbJbbbbMUdbaeczfg8Fa8FIdbJbbbbMUdbaecCfg8Fa8FIdbJbbbbMUdbaeaRaecyfg8FIdbg8YNgRaeIdbMUdbaeclfgaaRaaIdbMUdbaecwfgaaRaaIdbMUdbaecKfgaaaIdbaAIdbg8WaRN:tUdbaAcwfIdbh8Vaec3fgaaaIdbaRaAclfIdbg8XN:tUdbaecafgaaaIdbaRa8VN:tUdbaec8KfgaIdbh81a8Fa8YaRMUdbaaa81aRa8Va8VNa8Wa8WNa8Xa8XNMMNMUdbkaXclfhXaKclfhKaec8SfheaAcxfhAalaHcefgH9hmbkkdnadTmbcbh8Aabhainaba8Acdtfh8FcbhHinaYa8FaHc:G:G:cjbfydbcdtfydbgAfRbbhedndnaYaaaHfydbgXfRbbgKc99fcFeGcpe0mbaec99fcFeGc;:e6mekdnaKcufcFeGce0mba5aXcdtfydbaA9hmekdnaecufcFeGce0mba8EaAcdtfydbaX9hmekJbbacJbbacJbbbZaecFeGceSEaKcFeGceSEhUdna8Na8FaHc:K:G:cjbfydbcdtfydbcx2fgeIdwa8NaXcx2fgKIdwg86:tg8Sa8NaAcx2fghIdwa86:tg8Xa8XNahIdbaKIdbg8U:tg80a80NahIdlaKIdlg8Z:tg8Va8VNMMg81Na8Xa8Sa8XNaeIdba8U:tg83a80Na8VaeIdla8Z:tg85NMMg8WN:tg8Ya8YNa83a81Na80a8WN:tgRaRNa85a81Na8Va8WN:tg8Wa8WNMMgBJbbbb9ETmba8YaB:rgB:vh8Ya8WaB:vh8WaRaB:vhRkaUa81:rNgBa8Ya86NaRa8UNa8Za8WNMM:mg81Ng87a81Nh88a80a85Na8Va83N:tg81a81Na8Va8SNa8Xa85N:tg8Va8VNa8Xa83Na80a8SN:tg8Xa8XNMMg83:rh80a8Ya87Nh85a8Wa87Nh89aRa87Nh87a8WaBa8YNg8SNh8:a8SaRNhZaRaBa8WNgnNhca8Ya8SNh8Ya8WanNh8WaRaBaRNNh8Sdna83Jbbbb9ETmba81a80:vh81a8Xa80:vh8Xa8Va80:vh8VkaIaOaXcdtfydbc8S2fgeaeIdba8Sa8VaUa80:rNgRa8VNNMg80MUdbaea8Wa8XaRa8XNg8SNMg83aeIdlMUdlaea8Ya81aRa81Ng8WNMg8YaeIdwMUdwaeaca8Va8SNMg8SaeIdxMUdxaeaZa8Wa8VNMgUaeIdzMUdzaea8:a8Xa8WNMg8WaeIdCMUdCaea87a8VaRa81a86Na8Va8UNa8Za8XNMMg86:mNgRNMg8VaeIdKMUdKaea89a8XaRNMg8XaeId3MUd3aea85a81aRNMg81aeIdaMUdaaea88a86aRN:tgRaeId8KMUd8KaeaBaeIdyMUdyaIaOaAcdtfydbc8S2fgea80aeIdbMUdbaea83aeIdlMUdlaea8YaeIdwMUdwaea8SaeIdxMUdxaeaUaeIdzMUdzaea8WaeIdCMUdCaea8VaeIdKMUdKaea8XaeId3MUd3aea81aeIdaMUdaaeaRaeId8KMUd8KaeaBaeIdyMUdykaHclfgHcx9hmbkaacxfhaa8Acifg8Aad6mbkaCTmbcbhainJbbbbh80a8Nabaacdtfgeclfydbg8Fcx2fgHIdwa8Naeydbghcx2fgAIdwg8Z:tg8Va8VNaHIdbaAIdbg83:tg8Wa8WNaHIdlaAIdlg85:tg8Xa8XNMMg8Sa8Naecwfydbg8Acx2fgeIdwa8Z:tg8YNa8Va8YNa8WaeIdba83:tg81Na8XaeIdla85:tgBNMMgRa8VN:tJbbbbJbbjZa8Sa8Ya8YNa81a81NaBaBNMMg8UNaRaRN:tg86:va86Jbbbb9BEg86Nh88a8Ua8VNaRa8YN:ta86Nh89a8SaBNaRa8XN:ta86Nh8:a8Ua8XNaRaBN:ta86NhZa8Sa81NaRa8WN:ta86Nhna8Ua8WNaRa81N:ta86Nhca8WaBNa8Xa81N:tgRaRNa8Xa8YNa8VaBN:tgRaRNa8Va81Na8Wa8YN:tgRaRNMM:rJbbbZNhRa8PahaC2g8JcdtfhHa8Pa8AaC2gDcdtfhAa8Pa8FaC2g8KcdtfhXa8Z:mh9ca85:mhJa83:mh9eascjdfheaChKJbbbbhBJbbbbh86Jbbbbh8SJbbbbh8UJbbbbh8ZJbbbbh83Jbbbbh85Jbbbbh87JbbbbhUinaecwfaRa89aXIdbaHIdbg8Y:tg8XNa88aAIdba8Y:tg81NMg8VNUdbaeclfaRaZa8XNa8:a81NMg8WNUdbaeaRaca8XNana81NMg8XNUdbaecxfaRa9ca8VNaJa8WNa8Ya9ea8XNMMMg8YNUdbaRa8Va8WNNa8ZMh8ZaRa8Va8XNNa8UMh8UaRa8Wa8XNNa8SMh8SaRa8Ya8YNNaUMhUaRa8Va8YNNa87Mh87aRa8Wa8YNNa85Mh85aRa8Xa8YNNa83Mh83aRa8Va8VNNa86Mh86aRa8Wa8WNNaBMhBaRa8Xa8XNNa80Mh80aHclfhHaXclfhXaAclfhAaeczfheaKcufgKmbkagahc8S2fgea80aeIdbMUdbaeaBaeIdlMUdlaea86aeIdwMUdwaea8SaeIdxMUdxaea8UaeIdzMUdzaea8ZaeIdCMUdCaea83aeIdKMUdKaea85aeId3MUd3aea87aeIdaMUdaaeaUaeId8KMUd8KaeaRaeIdyMUdyaga8Fc8S2fgea80aeIdbMUdbaeaBaeIdlMUdlaea86aeIdwMUdwaea8SaeIdxMUdxaea8UaeIdzMUdzaea8ZaeIdCMUdCaea83aeIdKMUdKaea85aeId3MUd3aea87aeIdaMUdaaeaUaeId8KMUd8KaeaRaeIdyMUdyaga8Ac8S2fgea80aeIdbMUdbaeaBaeIdlMUdlaea86aeIdwMUdwaea8SaeIdxMUdxaea8UaeIdzMUdzaea8ZaeIdCMUdCaea83aeIdKMUdKaea85aeId3MUd3aea87aeIdaMUdaaeaUaeId8KMUd8KaeaRaeIdyMUdya8Ra8Jcltfh8FcbhHaChXina8FaHfgeascjdfaHfgAIdbaeIdbMUdbaeclfgKaAclfIdbaKIdbMUdbaecwfgKaAcwfIdbaKIdbMUdbaecxfgeaAcxfIdbaeIdbMUdbaHczfhHaXcufgXmbka8Ra8Kcltfh8FcbhHaChXina8FaHfgeascjdfaHfgAIdbaeIdbMUdbaeclfgKaAclfIdbaKIdbMUdbaecwfgKaAcwfIdbaKIdbMUdbaecxfgeaAcxfIdbaeIdbMUdbaHczfhHaXcufgXmbka8RaDcltfh8FcbhHaChXina8FaHfgeascjdfaHfgAIdbaeIdbMUdbaeclfgKaAclfIdbaKIdbMUdbaecwfgKaAcwfIdbaKIdbMUdbaecxfgeaAcxfIdbaeIdbMUdbaHczfhHaXcufgXmbkaacifgaad6mbkkcbhAdndnamcwGgTmbJbbbbh8ScbhScbh9hcbh9ixekcbhSa3cbyd1:H:cjbHjjjjbbh9iasc:Cefasyd;8egecdtfa9iBdbasaecefBd;8ecua9ialabadaOz:fjjjbgXcltaXcjjjjiGEcbyd1:H:cjbHjjjjbbh9hasc:Cefasyd;8egecdtfa9hBdbasaecefBd;8ea9haXa9ia8Nalz:gjjjbJFFuuh8SaXTmba9hheaXhHinaeIdbgRa8Sa8SaR9EEh8SaeclfheaHcufgHmbkaXhSkdnalTmbaLclfheaLydbhXaYhHalhKcbhAincbaeydbg8FaX9RaHRbbcpeGEaAfhAaHcefhHaeclfhea8FhXaKcufgKmbkaAce4hAkcuadaA9Rcifg6cx2a6c;v:Q;v:Qe0Ecbyd1:H:cjbHjjjjbbh9kasc:Cefasyd;8egecdtfa9kBdbasaecefBd;8ecua6cdta6cFFFFi0Ecbyd1:H:cjbHjjjjbbh0asc:Cefasyd;8egecdtfa0BdbasaecefBd;8ea3cbyd1:H:cjbHjjjjbbh9masc:Cefasyd;8egecdtfa9mBdbasaecefBd;8ealcbyd1:H:cjbHjjjjbbh9nasc:Cefasyd;8egecdtfa9nBdbasaecefBd;8eaxaxNayJbbjZamclGEgZaZN:vh87JbbbbhUdnadak9nmbdna6ci6mbaCclth9oa9kcwfh9pJbbbbh85JbbbbhUinascNefabadalaOz:cjjjbabh8Acbh9qcbh9rinaba9rcdtfhDcbheindnaOa8AaefydbgAcdtghfydbgXaOaDaec:W:G:cjbfydbcdtfydbgHcdtg8JfydbgKSmbaYaHfRbbgacv2aYaAfRbbg8FfRb;a:G:cjbg8La8Fcv2aafg8KRb;a:G:cjbg3VcFeGTmbdnaKaX9nmba8KRb;G:G:cjbcFeGmekdna8FcufcFeGce0mbaaTmba5ahfydbaH9hmekdna8FTmbaacufcFeGce0mba8Ea8JfydbaA9hmeka9ka9qcx2fgXaHaAa3cFeGgKEBdlaXaAaHaKEBdbaXaKa8LGcb9hBdwa9qcefh9qkaeclfgecx9hmbkdna9rcifg9rad9pmba8Acxfh8Aa9qcifa69nmekka9qTmdcbh8KinaIaOa9ka8Kcx2fghydbgKcdtgXfydbg8Ac8S2fgeIdwa8Nahydlg8Fcx2fgHIdwg8WNaeIdzaHIdbg8XNaeIdaMgRaRMMa8WNaeIdlaHIdlg8YNaeIdCa8WNaeId3MgRaRMMa8YNaeIdba8XNaeIdxa8YNaeIdKMgRaRMMa8XNaeId8KMMM:lhRJbbbbJbbjZaeIdyg8V:va8VJbbbb9BEh8VdndnahydwgDmbJFFuuh86xekJbbbbJbbjZaIaOa8Fcdtfydbc8S2fgeIdyg81:va81Jbbbb9BEaeIdwa8NaKcx2fgHIdwg81NaeIdzaHIdbg80NaeIdaMgBaBMMa81NaeIdlaHIdlgBNaeIdCa81NaeId3Mg81a81MMaBNaeIdba80NaeIdxaBNaeIdKMg81a81MMa80NaeId8KMMM:lNh86ka8VaRNhBdnaCTmbagaKc8S2fgAIdwa8WNaAIdza8XNaAIdaMgRaRMMa8WNaAIdla8YNaAIdCa8WNaAId3MgRaRMMa8YNaAIdba8XNaAIdxa8YNaAIdKMgRaRMMa8XNaAId8KMMMhRa8Pa8FaC2gacdtfhHa8RaKaC2g8JcltfheaAIdyh81aChAinaHIdbg8Va8Va81NaecxfIdba8WaecwfIdbNa8XaeIdbNa8YaeclfIdbNMMMg8Va8VM:tNaRMhRaHclfhHaeczfheaAcufgAmbkdndnaDmbJbbbbh8Vxekaga8Fc8S2fgAIdwa8NaKcx2fgeIdwg8XNaAIdzaeIdbg8YNaAIdaMg8Va8VMMa8XNaAIdlaeIdlg81NaAIdCa8XNaAId3Mg8Va8VMMa81NaAIdba8YNaAIdxa81NaAIdKMg8Va8VMMa8YNaAId8KMMMh8Va8Pa8JcdtfhHa8RaacltfheaAIdyh80aChAinaHIdbg8Wa8Wa80NaecxfIdba8XaecwfIdbNa8YaeIdbNa81aeclfIdbNMMMg8Wa8WM:tNa8VMh8VaHclfhHaeczfheaAcufgAmbka8V:lh8VkaBaR:lMhBa86a8VMh86dndndnaYaKfRbbc9:fPddbekaQaXfydbgXaKSmbaOa8Fcdtfydbh8Jindndna5aXcdtgafydbgecuSmbaOaecdtfydba8JSmekdna8EaafydbgecuSmbaOaecdtfydba8JSmeka8FhekagaXc8S2fgAIdwa8Naecx2fgHIdwg8WNaAIdzaHIdbg8XNaAIdaMgRaRMMa8WNaAIdlaHIdlg8YNaAIdCa8WNaAId3MgRaRMMa8YNaAIdba8XNaAIdxa8YNaAIdKMgRaRMMa8XNaAId8KMMMhRa8PaeaC2cdtfhHa8RaXaC2cltfheaAIdyh81aChAinaHIdbg8Va8Va81NaecxfIdba8WaecwfIdbNa8XaeIdbNa8YaeclfIdbNMMMg8Va8VM:tNaRMhRaHclfhHaeczfheaAcufgAmbkaBaR:lMhBaQaafydbgXaK9hmbkkaYa8FfRbbci9hmeaDTmeaQa8FcdtfydbgXa8FSmeindndna5aXcdtgafydbgecuSmbaOaecdtfydba8ASmekdna8EaafydbgecuSmbaOaecdtfydba8ASmekaKhekagaXc8S2fgAIdwa8Naecx2fgHIdwg8WNaAIdzaHIdbg8XNaAIdaMgRaRMMa8WNaAIdlaHIdlg8YNaAIdCa8WNaAId3MgRaRMMa8YNaAIdba8XNaAIdxa8YNaAIdKMgRaRMMa8XNaAId8KMMMhRa8PaeaC2cdtfhHa8RaXaC2cltfheaAIdyh81aChAinaHIdbg8Va8Va81NaecxfIdba8WaecwfIdbNa8XaeIdbNa8YaeclfIdbNMMMg8Va8VM:tNaRMhRaHclfhHaeczfheaAcufgAmbka86aR:lMh86aQaafydbgXa8F9hmbxdkkdna8Ea5a5aXfydba8FSEaQaXfydbgacdtfydbgXcu9hmbaQa8FcdtfydbhXkagaac8S2fgAIdwa8NaXcx2fgeIdwg8WNaAIdzaeIdbg8XNaAIdaMgRaRMMa8WNaAIdlaeIdlg8YNaAIdCa8WNaAId3MgRaRMMa8YNaAIdba8XNaAIdxa8YNaAIdKMgRaRMMa8XNaAId8KMMMhRa8PaXaC2g8AcdtfhHa8RaaaC2g8JcltfheaAIdyh81aChAinaHIdbg8Va8Va81NaecxfIdba8WaecwfIdbNa8XaeIdbNa8YaeclfIdbNMMMg8Va8VM:tNaRMhRaHclfhHaeczfheaAcufgAmbkdndnaDmbJbbbbh8VxekagaXc8S2fgAIdwa8Naacx2fgeIdwg8XNaAIdzaeIdbg8YNaAIdaMg8Va8VMMa8XNaAIdlaeIdlg81NaAIdCa8XNaAId3Mg8Va8VMMa81NaAIdba8YNaAIdxa81NaAIdKMg8Va8VMMa8YNaAId8KMMMh8Va8Pa8JcdtfhHa8Ra8AcltfheaAIdyh80aChAinaHIdbg8Wa8Wa80NaecxfIdba8XaecwfIdbNa8YaeIdbNa81aeclfIdbNMMMg8Wa8WM:tNa8VMh8VaHclfhHaeczfheaAcufgAmbka8V:lh8VkaBaR:lMhBa86a8VMh86kaha86aBa86aB9DgeEUdwahaKa8FaeaDcb9hGgeEBdlaha8FaKaeEBdba8Kcefg8Ka9q9hmbkascjdfcbcj;qbz:tjjjb8Aa9phea9qhHinascjdfaeydbcA4cF8FGgAcFAaAcFA6EcdtfgAaAydbcefBdbaecxfheaHcufgHmbkcbhecbhHinascjdfaefgAydbhXaAaHBdbaXaHfhHaeclfgecj;qb9hmbkcbhea9phHinascjdfaHydbcA4cF8FGgAcFAaAcFA6EcdtfgAaAydbgAcefBdba0aAcdtfaeBdbaHcxfhHa9qaecefge9hmbkadak9RgAci9Uh9sdnalTmbcbhea9mhHinaHaeBdbaHclfhHalaecefge9hmbkkcbh9ta9ncbalz:tjjjbh3aAcO9Uh9ua9sce4h9rcbh8Lcbh8Kdnina9ka0a8Kcdtfydbcx2fg8JIdwgRa879Emea8La9s9pmeJFFuuh8Vdna9ra9q9pmba9ka0a9rcdtfydbcx2fIdwJbb;aZNh8VkdnaRa8V9ETmbaRaU9ETmba8La9u0mdkdna3aOa8JydlgDcdtg9vfg8AydbgAfg9wRbba3aOa8Jydbghcdtg9xfydbgefg9yRbbVmbaYahfRbbh9zdndnaLaecdtfgHclfydbgXaHydbgHSmbaXaH9RhXa8NaAcx2fh8Fa8Naecx2fhaaEaHcitfheindna9maeydbcdtfydbgHaASmba9maeclfydbcdtfydbgKaASmbaHaKSmba8NaKcx2fgKIdba8NaHcx2fgHIdbg8W:tgRaaIdlaHIdlg8X:tg80NaKIdla8X:tg8VaaIdba8W:tgBN:tg8YaRa8FIdla8X:tg86Na8Va8FIdba8W:tg8UN:tg8XNa8VaaIdwaHIdwg81:tg8ZNaKIdwa81:tg8Wa80N:tg80a8Va8FIdwa81:tg83Na8Wa86N:tg8VNa8WaBNaRa8ZN:tg81a8Wa8UNaRa83N:tgRNMMa8Ya8YNa80a80Na81a81NMMa8Xa8XNa8Va8VNaRaRNMMN:rJbbj8:N9FmikaecwfheaXcufgXmbkkdndndndna9zc9:fPdebdkahheina8AydbhAdndna5aecdtgHfydbgecuSmbaOaecdtfydbaASmekdna8EaHfydbgecuSmbaOaecdtfydbaASmekaDheka9maHfaeBdbaQaHfydbgeah9hmbxikkdna8Ea5a5a9xfydbaDSEaQa9xfydbghcdtfydbgecu9hmbaQa9vfydbheka9ma9xfaDBdbaehDka9mahcdtfaDBdbka9yce86bba9wce86bba8JIdwgRaUaUaR9DEhUa9tcefh9tcecda9zceSEa8Lfh8Lxeka9rcefh9rka8Kcefg8Ka9q9hmbkka9tTmddnalTmbcbh8Fcbhhindna9mahcdtgefydbgAahSmbaOaAcdtfydbh8AdnahaOaefydb9hg8JmbaIa8Ac8S2fgeaIahc8S2fgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdya8MTmba8Ma8Acltfgea8MahcltfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxkaCTmbagaAc8S2fgeagahc8S2gDfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdya9oaA2haa8RhHaChXinaHaafgeaHa8FfgAIdbaeIdbMUdbaeclfgKaAclfIdbaKIdbMUdbaecwfgKaAcwfIdbaKIdbMUdbaecxfgeaAcxfIdbaeIdbMUdbaHczfhHaXcufgXmbka8JmbJbbbbJbbjZaIaDfgeIdygR:vaRJbbbb9BEaeIdwa8Na8Acx2fgHIdwgRNaeIdzaHIdbg8VNaeIdaMg8Wa8WMMaRNaeIdlaHIdlg8WNaeIdCaRNaeId3MgRaRMMa8WNaeIdba8VNaeIdxa8WNaeIdKMgRaRMMa8VNaeId8KMMM:lNgRa85a85aR9DEh85ka8Fa9ofh8Fahcefghal9hmbkcbhHa5heindnaeydbgAcuSmbdnaHa9maAcdtgXfydbgA9hmbcuhAa5aXfydbgXcuSmba9maXcdtfydbhAkaeaABdbkaeclfhealaHcefgH9hmbkcbhHa8EheindnaeydbgAcuSmbdnaHa9maAcdtgXfydbgA9hmbcuhAa8EaXfydbgXcuSmba9maXcdtfydbhAkaeaABdbkaeclfhealaHcefgH9hmbkka85aUaCEh85cbhHabhecbhAindnaOa9maeydbcdtfydbg8FcdtfydbgXaOa9maeclfydbcdtfydbgacdtfydbgKSmbaXaOa9maecwfydbcdtfydbg8AcdtfydbghSmbaKahSmbabaHcdtfgXa8FBdbaXcwfa8ABdbaXclfaaBdbaHcifhHkaecxfheaAcifgAad6mbkdndnaTmbaHhdxekdnaHak0mbaHhdxekdna8Sa859FmbaHhdxekJFFuuh8ScbhdabhecbhAindna9ha9iaeydbgXcdtfydbcdtfIdbgRa859ETmbaeclf8Pdbh9AabadcdtfgKaXBdbaKclfa9A83dbaRa8Sa8SaR9EEh8SadcifhdkaecxfheaAcifgAaH6mbkkadak0mbxdkkascNefabadalaOz:cjjjbkdndnadak0mbadhaxekdnaTmbadhaxekdna8Sa879FmbadhaxekcehKina8SJbb;aZNgRa87aRa879DEh8WJbbbbhRdnaSTmba9hheaShHinaeIdbg8VaRa8Va8W9FEaRa8VaR9EEhRaeclfheaHcufgHmbkkJFFuuh8ScbhaabhecbhHindna9ha9iaeydbgAcdtfydbcdtfIdbg8Va8W9ETmbaeclf8Pdbh9AabaacdtfgXaABdbaXclfa9A83dba8Va8Sa8Sa8V9EEh8SaacifhakaecxfheaHcifgHad6mbkdnaKaaad9hVceGmbadhaxdkaRaUaUaR9DEhUaaak9nmecbhKaahda8Sa879FmbkkdnamcjjjjdGTmba9ncbalz:tjjjbh8AdnaaTmbabheaahHina8AaeydbgAfce86bba8AaOaAcdtfydbfce86bbaeclfheaHcufgHmbkkascNefabaaalaOz:cjjjbdndnalTmbcbhXindna8AaXfRbbTmbdnaYaXfRbbgecl0mbceaetcQGmekdnaOaXcdtg8FfydbgeaXSmba8NaXcx2fgHa8Naecx2fgeydwBdwaHae8Pdb83dbxekaIaXc8S2fgKIdygcacJL:3;rUNgRMh87aKIdwg9BaRMh8SaKIdlg9CaRMh8UaKIdbg9DaRMh81aKIdag9EaRa8NaXcx2fg8JIdwg88N:th8ZaKId3g9FaRa8JIdlg89N:th83aKIdKg9Ga8JIdbg8:aRN:th80JbbbbhnaKIdCg9HJbbbbMh85aKIdzg9IJbbbbMhBaKIdxg9JJbbbbMh86dndnaCTmbaXhAinJbbbba87agaAc8S2fgHIdygR:vaRJbbbb9BEhRa8RaAaC2cltfheaHIdaa87Na8ZMh8ZaHId3a87Na83Mh83aHIdKa87Na80Mh80aHIdCa87Na85Mh85aHIdza87NaBMhBaHIdxa87Na86Mh86aHIdwa87Na8SMh8SaHIdla87Na8UMh8UaHIdba87Na81Mh81aChHina8ZaecwfIdbg8VaecxfIdbg8YNaRN:th8Za83aeclfIdbg8Wa8YNaRN:th83a85a8Wa8VNaRN:th85a81aeIdbg8Xa8XNaRN:th81a80a8Xa8YNaRN:th80aBa8Xa8VNaRN:thBa86a8Xa8WNaRN:th86a8Sa8Va8VNaRN:th8Sa8Ua8Wa8WNaRN:th8UaeczfheaHcufgHmbkaQaAcdtfydbgAaX9hmbka8MTmba8MaXcltfgeIdxhxaeIdwh9caeIdlhJaeIdbhRxekJbbbbhxJbbbbh9cJbbbbhJJbbbbhRkaBa81:vg8Wa80Na8Z:ta85aBa86a81:vg8VN:tg8Za8Ua86a8VN:tg8Y:vg8Xa8Va80Na83:tg8UN:th83a9caRa8WN:taJaRa8VN:tg86a8XN:tg85a8SaBa8WN:ta8Za8XN:tgB:vg8S:mh8Za86a8Y:vg9c:mhJdnJbbbbaRaRa81:vg9eN:ta86a9cN:ta85a8SN:tg86:la87J:983:g81NgR9ETmba8Za83NaJa8UNa9ea80Nax:tMMa86:vhnka81:laR9ETmba8Y:laR9ETmbaB:laR9ETmba9e:manNa8W:ma8ZanNa83aB:vMgBNa8V:maJanNa8X:maBNa8Ua8Y:vMMg85Na80:ma81:vMMMh87aLa8FfgeclfydbgHaeydbge9RhhaEaecitfh8FJbbbbhRdnaHaeSgDmbJbbbbhRa8FheahhAina8Naeclfydbcx2fgHIdwa88:tg8Va8VNaHIdba8::tg8Va8VNaHIdla89:tg8Va8VNMMg8Va8Naeydbcx2fgHIdwa88:tg8Wa8WNaHIdba8::tg8Wa8WNaHIdla89:tg8Wa8WNMMg8WaRaRa8W9DEgRaRa8V9DEhRaecwfheaAcufgAmbkaR:rgRaRNhRkaBa88:tg8Va8VNa87a8::tg8Va8VNa85a89:tg8Va8VNMMaR9EmbaKId8KhndnaDmbina8Na8Fclfydbcx2fgeIdba8Na8Fydbcx2fgHIdbg8W:tgRa89aHIdlg8X:tg80NaeIdla8X:tg8Va8:a8W:tg86N:tg8YaRa85a8X:tg8SNa8Va87a8W:tg8UN:tg8XNa8Va88aHIdwg81:tg8ZNaeIdwa81:tg8Wa80N:tg80a8VaBa81:tg83Na8Wa8SN:tg8VNa8Wa86NaRa8ZN:tg81a8Wa8UNaRa83N:tgRNMMa8Ya8YNa80a80Na81a81NMMa8Xa8XNa8Va8VNaRaRNMMN:rJbbj8:N9Fmda8Fcwfh8FahcufghmbkkJbbbbJbbjZac:vacJbbbb9BEgRa9BaBNa9Ia87Na9EMg8Va8VMMaBNa9Ca85Na9HaBNa9FMg8Va8VMMa85Na9Da87Na9Ja85Na9GMg8Va8VMMa87NanMMM:lNaRa9Ba88Na9Ia8:Na9EMg8Va8VMMa88Na9Ca89Na9Ha88Na9FMg8Va8VMMa89Na9Da8:Na9Ja89Na9GMg8Va8VMMa8:NanMMM:lNJbb;aZNJ:983:g81M9Emba8JaBUdwa8Ja85Udla8Ja87UdbkaXcefgXal9hmbkdnaCmbcbhCxdkcbhXindna8AaXfRbbTmbaOaXcdtgefydbaX9hmbaYaXfhhaQaefh8Ja8NaXcx2fhAa8PaXaC2cdtfhDcbhEincuhLdnahRbbci9hmbaXhLa8JydbgeaXSmba8PaEcdtgHfhKaDaHfIdbhRaXhLinaLhHcuhLdnaKaeaC2cdtfIdbaR9CmbaHcuSmbaHhLagaec8S2fIdyagaHc8S2fIdy9ETmbaehLkaQaecdtfydbgeaX9hmbkka8PaEcdtfhKa8RaEcltfh8FaXheinaKaeaC2cdtfJbbbbJbbjZagaeaLaLcuSEgHc8S2fIdygR:vaRJbbbb9BEa8FaHaC2cltfgHIdwaAIdwNaHIdbaAIdbNaHIdlaAIdlNMMaHIdxMNUdbaQaecdtfydbgeaX9hmbkaEcefgEaC9hmbkkaXcefgXal9hmbxdkkaCmbcbhCkaiavaoarawaCala8Na8Pazasayasc1efaYa8Aaqz:hjjjbkdnamcjjjjlGTmbazmbaaTmbabhecbhLinaYaeydbgAfRbbc3thQaecwfgXydbhHcjjjj94hCdna5aAcdtgEfydbaeclfgKydbgOSmbcjjjj94cba8EaOcdtfydbaASEhCkaeaQaCVaAVBdbaYaOfRbbc3th8Fcjjjj94hCcjjjj94hQdna5aOcdtfydbaHSmbcjjjj94cba8EaHcdtfydbaOSEhQkaKa8FaQVaOVBdbaYaHfRbbc3thOdna5aHcdtfydbaASmbcjjjj94cba8EaEfydbaHSEhCkaXaOaCVaHVBdbaecxfheaLcifgLaa6mbkkdnazTmbaaTmbaaheinabazabydbcdtfydbBdbabclfhbaecufgembkkdnaPTmbaPaZaU:rNUdbkdnasyd;8egHTmbaHcdtasc:Ceffc98fheinaeydbcbyd:m:H:cjbH:bjjjbbaec98fheaHcufgHmbkkascj;sbf8Kjjjjbaak;Yieouabydlhvabydbclfcbaicdtz:tjjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfhearcufgrmbkkabydbcbBdbk:todDue99aicd4aifhrcehwinawgDcethwaDar6mbkcuaDcdtgraDcFFFFi0Ecbyd1:H:cjbHjjjjbbhwaoaoyd9GgqcefBd9GaoaqcdtfawBdbawcFearz:tjjjbhkdnaiTmbalcd4hlaDcufhxcbhminamhDdnavTmbavamcdtfydbhDkcbadaDal2cdtfgDydlgwawcjjjj94SEgwcH4aw7c:F:b:DD2cbaDydbgwawcjjjj94SEgwcH4aw7c;D;O:B8J27cbaDydwgDaDcjjjj94SEgDcH4aD7c:3F;N8N27axGhwamcdthPdndndnavTmbakawcdtfgrydbgDcuSmeadavaPfydbal2cdtfgsIdbhzcehqinaqhrdnadavaDcdtfydbal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmlkarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbxdkkakawcdtfgrydbgDcuSmbadamal2cdtfgsIdbhzcehqinaqhrdnadaDal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmikarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbkkaramBdbamhDkabaPfaDBdbamcefgmai9hmbkkakcbyd:m:H:cjbH:bjjjbbaoaoyd9GcufBd9GdnaeTmbaiTmbcbhDaehwinawaDBdbawclfhwaiaDcefgD9hmbkcbhDaehwindnaDabydbgrSmbawaearcdtfgrydbBdbaraDBdbkabclfhbawclfhwaiaDcefgD9hmbkkk;:odvuv998Jjjjjbca9Rgocbyd1:G:cjbBdKaocb8Pdj:G:cjb83izaocbydN:G:cjbBdwaocb8Pd:m:G:cjb83ibdnadTmbaicd4hrdnabmbdnalTmbcbhwinaealawcdtfydbar2cdtfhDcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkawcefgwad9hmbxikkarcdthwcbhDincbhiinaoczfaifgqaeaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkaeawfheaDcefgDad9hmbxdkkdnalTmbcbhwinabawcx2fgiaealawcdtfydbar2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkawcefgwad9hmbxdkkarcdthlcbhwaehDinabawcx2fgiaeawar2cdtfgqIdbUdbaiaqIdlUdlaiaqIdwUdwcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkaDalfhDawcefgwad9hmbkkJbbbbaoIdbaoIdzgx:tgkakJbbbb9DEgkaoIdlaoIdCgm:tgPaPak9DEgkaoIdwaoIdKgP:tgsasak9DEhsdnabTmbadTmbJbbbbJbbjZas:vasJbbbb9BEhkinabakabIdbax:tNUdbabclfgoakaoIdbam:tNUdbabcwfgoakaoIdbaP:tNUdbabcxfhbadcufgdmbkkdnavTmbavaPUdwavamUdlavaxUdbkask:WlewudnaeTmbcbhvabhoinaoavBdbaoclfhoaeavcefgv9hmbkkdnaiTmbcbhrinadarcdtfhwcbhDinalawaDcdtgvyd:G:G:cjbcdtfydbcdtfydbhodnalawavfydbcdtfydbgqabaqcdtfgkydbgvSmbinakabavgqcdtfgxydbgvBdbaxhkaqav9hmbkkdnaoabaocdtfgkydbgvSmbinakabavgocdtfgxydbgvBdbaxhkaoav9hmbkkdnaqaoSmbabaqaoaqao0Ecdtfaqaoaqao6EBdbkaDcefgDci9hmbkarcifgrai6mbkkdnaembcbskcbhxindnalaxcdtgvfydbax9hmbaxhodnaxabavfgDydbgvSmbaDhqinaqabavgocdtfgkydbgvBdbakhqaoav9hmbkkaDaoBdbkaxcefgxae9hmbkcbhkabhvcbhoindndnaoalydbgq9hmbdnaoavydbgq9hmbavakBdbakcefhkxdkavabaqcdtfydbBdbxekavabaqcdtfydbBdbkalclfhlavclfhvaeaocefgo9hmbkakk;jiilud99euabcbaecltz:tjjjbhvdnalTmbadhoaihralhwinarcwfIdbhDarclfIdbhqavaoydbcltfgkarIdbakIdbMUdbakaqakIdlMUdlakaDakIdwMUdwakakIdxJbbjZMUdxaoclfhoarcxfhrawcufgwmbkkdnaeTmbavhkaehrinakcxfgoIdbhDaocbBdbakakIdbJbbbbJbbjZaD:vaDJbbbb9BEgDNUdbakclfgoaDaoIdbNUdbakcwfgoaDaoIdbNUdbakczfhkarcufgrmbkkdnalTmbinavadydbcltfgkaicwfIdbakIdw:tgDaDNaiIdbakIdb:tgDaDNaiclfIdbakIdl:tgDaDNMMgDakIdxgqaqaD9DEUdxadclfhdaicxfhialcufglmbkkdnaeTmbavcxfhkinabakIdbUdbakczfhkabclfhbaecufgembkkk:moerudnaoTmbaecd4hzdnavTmbaicd4hHavcdthOcbhAindnaPaAfRbbTmbaAhednaDTmbaDaAcdtfydbhekdnasTmbasaefRbbceGmekdnamaAfRbbclSmbabaeaz2cdtfgiaraAcx2fgCIdbakNaxIdbMUdbaiaCIdlakNaxIdlMUdlaiaCIdwakNaxIdwMUdwkadaeaH2cdtfhXaqheawhiavhCinaXaeydbcdtgQfaiIdbalaQfIdb:vUdbaeclfheaiclfhiaCcufgCmbkkawaOfhwaAcefgAao9hmbxdkkdnasmbcbheaDhiindnaPaefRbbTmbaehCdnaDTmbaiydbhCkamaefRbbclSmbabaCaz2cdtfgCarIdbakNaxIdbMUdbaCarclfIdbakNaxIdlMUdlaCarcwfIdbakNaxIdwMUdwkaiclfhiarcxfhraoaecefge9hmbxdkkdnaDTmbindnaPRbbTmbasaDydbgefRbbceGmbamRbbclSmbabaeaz2cdtfgearIdbakNaxIdbMUdbaearclfIdbakNaxIdlMUdlaearcwfIdbakNaxIdwMUdwkaPcefhPaDclfhDamcefhmarcxfhraocufgombxdkkazcdthicbheindnaPaefRbbTmbasaefRbbceGmbamaefRbbclSmbabarIdbakNaxIdbMUdbabclfarclfIdbakNaxIdlMUdbabcwfarcwfIdbakNaxIdwMUdbkarcxfhrabaifhbaoaecefge9hmbkkk8MbabaeadaialavcbcbcbcbcbaoarawaDz:bjjjbk8MbabaeadaialavaoarawaDaqakaxamaPz:bjjjbkRbababaeadaialavaoarawaDaqakaxcjjjjdVamz:bjjjbk:g8Koque99due99duq998Jjjjjbc;Wb9Rgq8Kjjjjbcbhkaqcxfcbc;Kbz:tjjjb8Aaqcualcx2alc;v:Q;v:Qe0Ecbyd1:H:cjbHjjjjbbgxBdxaqceBd2axaialavcbcbz:ejjjb8AaqcualcdtalcFFFFi0Egmcbyd1:H:cjbHjjjjbbgiBdzaqcdBd2dndnJFF959eJbbjZawJbbjZawJbbjZ9DE:vawJ9VO:d869DEgw:lJbbb9p9DTmbaw:OhPxekcjjjj94hPkadci9Uhsarco9UhzdndnaombaPcd9imekdnalTmbaPcuf:YhwdnaoTmbcbhvaihHaxhOindndnaoavfRbbceGTmbavcjjjjlVhAxekdndnaOclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcqthAdndnaOcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXVhAdndnaOIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXcCtVhAkaHaABdbaHclfhHaOcxfhOalavcefgv9hmbxdkkaxhvaihOalhHindndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcCthAdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqtaAVhAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaOaAaXVBdbavcxfhvaOclfhOaHcufgHmbkkadTmbcbhkaehvcbhOinakaiavclfydbcdtfydbgHaiavcwfydbcdtfydbgA9haiavydbcdtfydbgXaH9haXaA9hGGfhkavcxfhvaOcifgOad6mbkkarci9UhQdndnaz:Z:rJbbbZMgw:lJbbb9p9DTmbaw:Ohvxekcjjjj94hvkaQ:ZhLcbhKc:bwhzdninakaQ9pmeazaP9Rcd9imeavazcufgOavaO9iEaPcefavaP9kEhYdnalTmbaYcuf:YhwdnaoTmbcbhOaihHaxhvindndnaoaOfRbbceGTmbaOcjjjjlVhAxekdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcqthAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXVhAdndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXcCtVhAkaHaABdbaHclfhHavcxfhvalaOcefgO9hmbxdkkaxhvaihOalhHindndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcCthAdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqtaAVhAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaOaAaXVBdbavcxfhvaOclfhOaHcufgHmbkkcbhOdnadTmbaehvcbhHinaOaiavclfydbcdtfydbgAaiavcwfydbcdtfydbgX9haiavydbcdtfydbgraA9haraX9hGGfhOavcxfhvaHcifgHad6mbkkdnas:ZgCaL:taY:Ygwaz:Y:tg8ANak:ZgEaO:Zg3:tNaEaL:tawaP:Y:tg5Na3aC:tNMg8EJbbbb9BmbaCaE:ta5a8Aa3aL:tNNNa8E:vawMhwkdndnaOaQ0mbaOhkaYhPxekaOhsaYhzkdndnaKcl0mbdnawJbbbZMgw:lJbbb9p9DTmbaw:Ohvxdkcjjjj94hvxekaPazfcd9ThvkaKcefgKcs9hmbkkdndndnakmbJbbjZhwcbhOcdhvaDmexdkalcd4alfhHcehOinaOgvcethOavaH6mbkcbhOaqcuavcdtgYavcFFFFi0Ecbyd1:H:cjbHjjjjbbgKBdCaqciBd2aqamcbyd1:H:cjbHjjjjbbgzBdKaqclBd2dndndndnalTmbaPcuf:YhwaoTmecbhOaihAaxhHindndnaoaOfRbbceGTmbaOcjjjjlVhXxekdndnaHclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqthXdndnaHcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaXarVhXdndnaHIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaXarcCtVhXkaAaXBdbaAclfhAaHcxfhHalaOcefgO9hmbxikkaKcFeaYz:tjjjb8AcbhPcbhvxdkaxhOaihHalhAindndnaOIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcCthXdndnaOclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkarcqtaXVhXdndnaOcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaHaXarVBdbaOcxfhOaHclfhHaAcufgAmbkkaKcFeaYz:tjjjbhravcufhocbhPcbhYindndndnaraiaYcdtgKfydbgAcm4aA7c:v;t;h;Ev2gvcs4av7aoGgHcdtfgXydbgOcuSmbcehvinaiaOcdtgOfydbaASmdaHavfhOavcefhvaraOaoGgHcdtfgXydbgOcu9hmbkkaXaYBdbaPhvaPcefhPxekazaOfydbhvkazaKfavBdbaYcefgYal9hmbkcuaPc8S2gOaPc;D;O;f8U0EhvkcbhXaqavcbyd1:H:cjbHjjjjbbgvBd3aqcvBd2avcbaOz:tjjjbhOdnadTmbaehiinaxaiclfydbgrcx2fgvIdbaxaiydbgocx2fgHIdbg3:tgCaxaicwfydbgYcx2fgAIdlaHIdlg8A:tgwNavIdla8A:tgEaAIdba3:tg8EN:tgLaLNaEaAIdwaHIdwg5:tg8FNavIdwa5:tgEawN:tgwawNaEa8ENaCa8FN:tgCaCNMMg8E:rhEJbbnnJbbjZazaocdtfydbgvazarcdtfydbgASavazaYcdtfydbgrSGgHEh8Fdna8EJbbbb9ETmbaLaE:vhLaCaE:vhCawaE:vhwkaOavc8S2fgvavIdbawa8FaE:rNgEawNNg8FMUdbavaCaEaCNgaNghavIdlMUdlavaLaEaLNg8ENggavIdwMUdwavawaaNgaavIdxMUdxava8EawNg8JavIdzMUdzavaCa8ENg8EavIdCMUdCavawaEaLa5Nawa3Na8AaCNMM:mg8ANg3NgwavIdKMUdKavaCa3NgCavId3MUd3avaLa3NgLavIdaMUdaava3a8ANg3avId8KMUd8KavaEavIdyMUdydnaHmbaOaAc8S2fgva8FavIdbMUdbavahavIdlMUdlavagavIdwMUdwavaaavIdxMUdxava8JavIdzMUdzava8EavIdCMUdCavawavIdKMUdKavaCavId3MUd3avaLavIdaMUdaava3avId8KMUd8KavaEavIdyMUdyaOarc8S2fgva8FavIdbMUdbavahavIdlMUdlavagavIdwMUdwavaaavIdxMUdxava8JavIdzMUdzava8EavIdCMUdCavawavIdKMUdKavaCavId3MUd3avaLavIdaMUdaava3avId8KMUd8KavaEavIdyMUdykaicxfhiaXcifgXad6mbkkcbhAaqcuaPcdtgvaPcFFFFi0Egicbyd1:H:cjbHjjjjbbgHBdaaqcoBd2aqaicbyd1:H:cjbHjjjjbbgiBd8KaqcrBd2aHcFeavz:tjjjbhYdnalTmbazhHinJbbbbJbbjZaOaHydbgXc8S2fgvIdygw:vawJbbbb9BEavIdwaxcwfIdbgwNavIdzaxIdbgCNavIdaMgLaLMMawNavIdlaxclfIdbgLNavIdCawNavId3MgwawMMaLNavIdbaCNavIdxaLNavIdKMgwawMMaCNavId8KMMM:lNhwdndnaYaXcdtgvfgXydbcuSmbaiavfIdbaw9ETmekaXaABdbaiavfawUdbkaHclfhHaxcxfhxalaAcefgA9hmbkkdndnaPmbJbbbbhwxekJbbbbhwinaiIdbgCawawaC9DEhwaiclfhiaPcufgPmbkaw:rhwkakcd4akfhOcehiinaigvcethiavaO6mbkcbhOaqcuavcdtgiavcFFFFi0Ecbyd1:H:cjbHjjjjbbgHBdyaHcFeaiz:tjjjbhXdnadTmbavcufhrcbhPcbhxindnazaeaxcdtfgvydbcdtfydbgiazavclfydbcdtfydbgOSmbaiazavcwfydbcdtfydbgvSmbaOavSmbaYavcdtfydbhAdndnaYaOcdtfydbgvaYaicdtfydbgi9pmbavaA9pmbaAhlaihoavhAxekdnaAai9pmbaAav9pmbaihlavhoxekavhlaAhoaihAkabaPcx2fgvaABdbavcwfaoBdbavclfalBdbdnaXaoc:3F;N8N2alc:F:b:DD27aAc;D;O:B8J27arGgOcdtfgvydbgicuSmbcehHinaHhvdnabaicx2fgiydbaA9hmbaiydlal9hmbaiydwaoSmikavcefhHaXaOavfarGgOcdtfgvydbgicu9hmbkkavaPBdbaPcefhPkaxcifgxad6mbkaPci2hOkcwhvaDTmekaDawUdbkavcdthvaqcxfc98fhiinaiavfydbcbyd:m:H:cjbH:bjjjbbavc98fgvmbkaqc;Wbf8KjjjjbaOk:3ldrue9:8Jjjjjbc;Wb9Rgr8Kjjjjbcbhwarcxfcbc;Kbz:tjjjb8AdnabaeSmbabaeadcdtzMjjjb8AkarcualcdtalcFFFFi0EgDcbyd1:H:cjbHjjjjbbgqBdxarceBd2aqcbaialavcbarcxfz:djjjbcualcx2alc;v:Q;v:Qe0Ecbyd1:H:cjbHjjjjbbhkarcxfaryd2gxcdtfakBdbaraxcefgmBd2akaialavcbcbz:ejjjb8AarcxfamcdtfaDcbyd1:H:cjbHjjjjbbgiBdbaraxcdfgvBd2arcxfavcdtfcuaialaeadaqz:fjjjbgecltaecjjjjiGEcbyd1:H:cjbHjjjjbbgqBdbaqaeaiakalz:gjjjbaxcifhkdnadTmbaoaoNhocbhwabhlcbheindnaqaialydbgvcdtfydbcdtfIdbao9ETmbalclf8PdbhPabawcdtfgDavBdbaDclfaP83dbawcifhwkalcxfhlaecifgead6mbkkdnakTmbaxcdtarcxffcwfhlinalydbcbyd:m:H:cjbH:bjjjbbalc98fhlakcufgkmbkkarc;Wbf8Kjjjjbawk:WCoDud99vue99vuv998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcxfcbc;Kbz:tjjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd1:H:cjbHjjjjbbgqBdxawceBd2aqaeadaicbcbz:ejjjb8AawcuadcdtadcFFFFi0Egkcbyd1:H:cjbHjjjjbbgxBdzawcdBd2adcd4adfhmceheinaegicetheaiam6mbkcbhPawcuaicdtgsaicFFFFi0Ecbyd1:H:cjbHjjjjbbgzBdCawciBd2dndnar:ZgH:rJbbbZMgO:lJbbb9p9DTmbaO:Ohexekcjjjj94hekaicufhAc:bwhCcbhXadhQcbhLinaeaCcufgiaeai9iEaPcefaeaP9kEhDdndnadTmbaDcuf:YhOaqhiaxheadhmindndnaiIdbaONJbbbZMgK:lJbbb9p9DTmbaK:OhYxekcjjjj94hYkaYcCthYdndnaiclfIdbaONJbbbZMgK:lJbbb9p9DTmbaK:Oh8Axekcjjjj94h8Aka8AcqtaYVhYdndnaicwfIdbaONJbbbZMgK:lJbbb9p9DTmbaK:Oh8Axekcjjjj94h8AkaeaYa8AVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:tjjjbhEcbh3cbh5indnaEaxa5cdtfydbgYcm4aY7c:v;t;h;Ev2gics4ai7aAGgmcdtfg8AydbgecuSmbaeaYSmbcehiinaEamaifaAGgmcdtfg8AydbgecuSmeaicefhiaeaY9hmbkka8AaYBdba3aecuSfh3a5cefg5ad9hmbxdkkazcFeasz:tjjjb8Acbh3kdnaQ:ZgKaH:taD:YgOaC:Y:tg8ENaX:Zg8Fa3:Zga:tNa8FaH:taOaP:Y:tghNaaaK:tNMggJbbbb9BmbaKa8F:taha8EaaaH:tNNNag:vaOMhOkaPaDa3ar0giEhPaXa3aiEhXdna3arSmbaDaCaiEgCaP9Rcd9imbdndnaLcl0mbdnaOJbbbZMgO:lJbbb9p9DTmbaO:Ohexdkcjjjj94hexekaPaCfcd9Theka3aQaiEhQaLcefgLcs9hmekkdndnaXmbcihicbhDxekcbhiawakcbyd1:H:cjbHjjjjbbg5BdKawclBd2aPcuf:YhKdndnadTmbaqhiaxheadhmindndnaiIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:OhYxekcjjjj94hYkaYcCthYdndnaiclfIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:Oh8Axekcjjjj94h8Aka8AcqtaYVhYdndnaicwfIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:Oh8Axekcjjjj94h8AkaeaYa8AVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:tjjjbhEcbhDcbh3indndndnaEaxa3cdtgCfydbgYcm4aY7c:v;t;h;Ev2gics4ai7aAGgmcdtfg8AydbgecuSmbcehiinaxaecdtgefydbaYSmdamaifheaicefhiaEaeaAGgmcdtfg8Aydbgecu9hmbkka8Aa3BdbaDhiaDcefhDxeka5aefydbhika5aCfaiBdba3cefg3ad9hmbkcuaDc32giaDc;j:KM;jb0EhexekazcFeasz:tjjjb8AcbhDcbhekawaecbyd1:H:cjbHjjjjbbgeBd3awcvBd2aecbaiz:tjjjbh8Aavcd4hxdnadTmbdnalTmbaxcdthEa5hYaqhealhmadhAina8AaYydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiamIdbaiIdxMUdxaiamclfIdbaiIdzMUdzaiamcwfIdbaiIdCMUdCaiaiIdKJbbjZMUdKaYclfhYaecxfheamaEfhmaAcufgAmbxdkka5hmaqheadhYina8Aamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaiIdxJbbbbMUdxaiaiIdzJbbbbMUdzaiaiIdCJbbbbMUdCaiaiIdKJbbjZMUdKamclfhmaecxfheaYcufgYmbkkdnaDTmba8AhiaDheinaiaiIdbJbbbbJbbjZaicKfIdbgO:vaOJbbbb9BEgONUdbaiclfgmaOamIdbNUdbaicwfgmaOamIdbNUdbaicxfgmaOamIdbNUdbaiczfgmaOamIdbNUdbaicCfgmaOamIdbNUdbaic3fhiaecufgembkkcbhYawcuaDcdtgCaDcFFFFi0Egicbyd1:H:cjbHjjjjbbgeBdaawcoBd2awaicbyd1:H:cjbHjjjjbbgEBd8KaecFeaCz:tjjjbh3dnadTmbaoJbbjZJbbjZaK:vaPceSENgOaONhKaxcdthxalheinaKaec;8:G:cjbalEgmIdwa8Aa5ydbgAc32fgiIdC:tgOaONamIdbaiIdx:tgOaONamIdlaiIdz:tgOaONMMNaqcwfIdbaiIdw:tgOaONaqIdbaiIdb:tgOaONaqclfIdbaiIdl:tgOaONMMMhOdndna3aAcdtgifgmydbcuSmbaEaifIdbaO9ETmekamaYBdbaEaifaOUdbka5clfh5aqcxfhqaeaxfheadaYcefgY9hmbkkaba3aCzMjjjb8Acrhikaicdthiawcxfc98fheinaeaifydbcbyd:m:H:cjbH:bjjjbbaic98fgimbkkawc;Wbf8KjjjjbaDk:Pdidui99ducbhi8Jjjjjbca9Rglcbyd1:G:cjbBdKalcb8Pdj:G:cjb83izalcbydN:G:cjbBdwalcb8Pd:m:G:cjb83ibdndnaembJbbjFhvJbbjFhoJbbjFhrxekadcd4cdthwincbhdinalczfadfgDabadfIdbgvaDIdbgoaoav9EEUdbaladfgDavaDIdbgoaoav9DEUdbadclfgdcx9hmbkabawfhbaicefgiae9hmbkalIdwalIdK:thralIdlalIdC:thoalIdbalIdz:thvkJbbbbavavJbbbb9DEgvaoaoav9DEgvararav9DEk9DeeuabcFeaicdtz:tjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk;Bidqui998Jjjjjbc;Wb9Rgl8Kjjjjbalcxfcbc;Kbz:tjjjb8Aadcd4adfhvcehoinaogrcethoarav6mbkalcuarcdtgoarcFFFFi0Ecbyd1:H:cjbHjjjjbbgvBdxavcFeaoz:tjjjbhwdnadTmbaicd4hDarcufhqcbhkindndnawcbaeakaD2cdtfgrydlgiaicjjjj94SEgocH4ao7c:F:b:DD2cbarydbgxaxcjjjj94SEgocH4ao7c;D;O:B8J27cbarydwgmamcjjjj94SEgrcH4ar7c:3F;N8N27aqGgvcdtfgrydbgocuSmbam::hPai::hsax::hzcehiinaihrdnaeaoaD2cdtfgiIdbaz9CmbaiIdlas9CmbaiIdwaP9BmikarcefhiawavarfaqGgvcdtfgrydbgocu9hmbkkarakBdbakhokabakcdtfaoBdbakcefgkad9hmbkkalydxcbyd:m:H:cjbH:bjjjbbalc;Wbf8Kjjjjbk9teiucbcbyd:q:H:cjbgeabcifc98GfgbBd:q:H:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:q:H:cjbgeabcrfc94GfgbBd:q:H:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd:q:H:cjbge9Rcifc98GaefgbBd:q:H:cjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akkk:Kedbcj:Gdk1eFFuuFFuuFFuuFFuFFFuFFFuFbbbbbbbbebbbdbbbbbbbebbbebbbdbbbbbbbbbbbeeeeebebbebbebebbbeebbbbbbbbbbbbeeeeeebebbeeebeebbbbebebbbbbbbbbbbbbbbbbbc1:Hdkxebbbdbbb:G:qbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(Z){n=Z.instance,n.exports.__wasm_call_ctors()});function o(Z){for(var V=new Uint8Array(Z.length),C=0;C96?G-97:G>64?G-39:G+4}for(var E=0,C=0;C=3),a(n.exports.meshopt_generatePositionRemap,Z,Z.length/V,V)},simplify:function(Z,V,C,G,E,v){r(Z instanceof Uint32Array||Z instanceof Int32Array||Z instanceof Uint16Array||Z instanceof Int16Array),r(Z.length%3==0),r(V instanceof Float32Array),r(V.length%C==0),r(C>=3),r(G>=0&&G<=Z.length),r(G%3==0),r(E>=0);for(var F=0,P=0;P<(v?v.length:0);++P)r(v[P]in S),F|=S[v[P]];var N=Z.BYTES_PER_ELEMENT==4?Z:new Uint32Array(Z),g=u(n.exports.meshopt_simplify,N,Z.length,V,V.length/C,C*4,G,E,F);return g[0]=Z instanceof Uint32Array?g[0]:new Z.constructor(g[0]),g},simplifyWithAttributes:function(Z,V,C,G,E,v,F,P,N,g){r(Z instanceof Uint32Array||Z instanceof Int32Array||Z instanceof Uint16Array||Z instanceof Int16Array),r(Z.length%3==0),r(V instanceof Float32Array),r(V.length%C==0),r(C>=3),r(G instanceof Float32Array),r(G.length==E*(V.length/C)),r(E>=0),r(F==null||F instanceof Uint8Array),r(F==null||F.length==V.length/C),r(P>=0&&P<=Z.length),r(P%3==0),r(N>=0),r(Array.isArray(v)),r(E>=v.length),r(v.length<=32);for(var R=0;R=0);for(var A=0,R=0;R<(g?g.length:0);++R)r(g[R]in S),A|=S[g[R]];var W=Z.BYTES_PER_ELEMENT==4?Z:new Uint32Array(Z),X=m(n.exports.meshopt_simplifyWithAttributes,W,Z.length,V,V.length/C,C*4,G,E*4,new Float32Array(v),F,P,N,A);return X[0]=Z instanceof Uint32Array?X[0]:new Z.constructor(X[0]),X},simplifyWithUpdate:function(Z,V,C,G,E,v,F,P,N,g){r(Z instanceof Uint32Array||Z instanceof Int32Array||Z instanceof Uint16Array||Z instanceof Int16Array),r(Z.length%3==0),r(V instanceof Float32Array),r(V.length%C==0),r(C>=3),r(G instanceof Float32Array),r(G.length==E*(V.length/C)),r(E>=0),r(F==null||F instanceof Uint8Array),r(F==null||F.length==V.length/C),r(P>=0&&P<=Z.length),r(P%3==0),r(N>=0),r(Array.isArray(v)),r(E>=v.length),r(v.length<=32);for(var R=0;R=0);for(var A=0,R=0;R<(g?g.length:0);++R)r(g[R]in S),A|=S[g[R]];var W=Z.BYTES_PER_ELEMENT==4?Z:new Uint32Array(Z),X=p(n.exports.meshopt_simplifyWithUpdate,W,Z.length,V,V.length/C,C*4,G,E*4,new Float32Array(v),F,P,N,A);if(Z!==W)for(var R=0;R=3),b(n.exports.meshopt_simplifyScale,Z,Z.length/V,V*4)},simplifyPoints:function(Z,V,C,G,E,v){return r(Z instanceof Float32Array),r(Z.length%V==0),r(V>=3),r(C>=0&&C<=Z.length/V),G?(r(G instanceof Float32Array),r(G.length%E==0),r(E>=3),r(Z.length/V==G.length/E),f(n.exports.meshopt_simplifyPoints,Z,Z.length/V,V*4,G,E*4,v||0,C)):f(n.exports.meshopt_simplifyPoints,Z,Z.length/V,V*4,void 0,0,0,C)},simplifySloppy:function(Z,V,C,G,E,v){r(Z instanceof Uint32Array||Z instanceof Int32Array||Z instanceof Uint16Array||Z instanceof Int16Array),r(Z.length%3==0),r(V instanceof Float32Array),r(V.length%C==0),r(C>=3),r(G==null||G instanceof Uint8Array),r(G==null||G.length==V.length/C),r(E>=0&&E<=Z.length),r(E%3==0),r(v>=0);var F=Z.BYTES_PER_ELEMENT==4?Z:new Uint32Array(Z),P=y(n.exports.meshopt_simplifySloppy,F,Z.length,V,V.length/C,C*4,G,E,v);return P[0]=Z instanceof Uint32Array?P[0]:new Z.constructor(P[0]),P},simplifyPrune:function(Z,V,C,G){r(Z instanceof Uint32Array||Z instanceof Int32Array||Z instanceof Uint16Array||Z instanceof Int16Array),r(Z.length%3==0),r(V instanceof Float32Array),r(V.length%C==0),r(C>=3),r(G>=0);var E=Z.BYTES_PER_ELEMENT==4?Z:new Uint32Array(Z),v=_(n.exports.meshopt_simplifyPrune,E,Z.length,V,V.length/C,C*4,G);return v=Z instanceof Uint32Array?v:new Z.constructor(v),v}}})();var Q4t=x(T(),1),J4t=(function(){var e="b9H79Tebbbe:neP9Geueu9Geub9Gbb9Giuuueu9Gmuuuuuuuuuuu9999eu9Gouuuuuueu9Gruuuuuuub9Gxuuuuuuuuuuuueu9Gxuuuuuuuuuuu99eu9GPuuuuuuuuuuuuu99b9Gouuuuuub9Gwuuuuuuuub9Gvuuuuub9GluuuubiQXdilvorwDqokoqxmbiibeilve9Weiiviebeoweuecj:Gdkr;Zeqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9I919P29K9nW79O2Wt79c9V919U9KbeY9TW79O9V9Wt9F9I919P29K9nW79O2Wt7S2W94bd39TW79O9V9Wt9F9I919P29K9nW79O2Wt79t9W9Ht9P9H2bo39TW79O9V9Wt9F9J9V9T9W91tWJ2917tWV9c9V919U9K7bw39TW79O9V9Wt9F9J9V9T9W91tW9nW79O2Wt9c9V919U9K7bkE9TW79O9V9Wt9F9J9V9T9W91tW9t9W9OWVW9c9V919U9K7bxL9TW79O9V9Wt9F9V9Wt9P9T9P96W9nW79O2WtbPl79IV9RbsDwebcekdOAq;W:leXdbkIbabaec9:fgefcufae9Ugeabci9Uadfcufad9Ugbaeab0Ek:88JDPue99eux99due99euo99iu8Jjjjjbc:WD9Rgm8KjjjjbdndnalmbcbhPxekamc:Cwfcbc;Kbz:rjjjb8AcuaocdtgsaocFFFFi0Ehzcbyd;0:G:cjbhHdndnalcb9imbaoal9nmbamazaHHjjjjbbgHBd:CwamceBd;8wamazcbyd;0:G:cjbHjjjjbbgOBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;0:G:cjbHjjjjbbgABd:KwamciBd;8waihzalhsinaHazydbcdtfcbBdbazclfhzascufgsmbkaihzalhsinaHazydbcdtfgCaCydbcefBdbazclfhzascufgsmbkaihzalhCcbhXindnaHazydbcdtgQfgsydbcb9imbaOaQfaXBdbasasydbgQcjjjj94VBdbaQaXfhXkazclfhzaCcufgCmbkalci9UhLdnalci6mbcbhzaihsinascwfydbhCasclfydbhXaOasydbcdtfgQaQydbgQcefBdbaAaQcdtfazBdbaOaXcdtfgXaXydbgXcefBdbaAaXcdtfazBdbaOaCcdtfgCaCydbgCcefBdbaAaCcdtfazBdbascxfhsaLazcefgz9hmbkkaihzalhsindnaHazydbcdtgCfgXydbgQcu9kmbaXaQcFFFFrGgQBdbaOaCfgCaCydbaQ9RBdbkazclfhzascufgsmbxdkkamazaHHjjjjbbgHBd:CwamceBd;8wamazcbyd;0:G:cjbHjjjjbbgOBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;0:G:cjbHjjjjbbgABd:KwamciBd;8waHcbasz:rjjjbhXaihzalhsinaXazydbcdtfgCaCydbcefBdbazclfhzascufgsmbkalci9UhLdnaoTmbcbhzaOhsaXhCaohQinasazBdbasclfhsaCydbazfhzaCclfhCaQcufgQmbkkdnalci6mbcbhzaihsinascwfydbhCasclfydbhQaOasydbcdtfgKaKydbgKcefBdbaAaKcdtfazBdbaOaQcdtfgQaQydbgQcefBdbaAaQcdtfazBdbaOaCcdtfgCaCydbgCcefBdbaAaCcdtfazBdbascxfhsaLazcefgz9hmbkkaoTmbcbhzaohsinaOazfgCaCydbaXazfydb9RBdbazclfhzascufgsmbkkamaLcbyd;0:G:cjbHjjjjbbgzBd:OwamclBd;8wazcbaLz:rjjjbhYamcuaLcK2alcjjjjd0Ecbyd;0:G:cjbHjjjjbbg8ABd:SwamcvBd;8wJbbbbhEdnalci6g3mbarcd4hKaihsa8AhzaLhrJbbbbh5inavasclfydbaK2cdtfgCIdlh8EavasydbaK2cdtfgXIdlhEavascwfydbaK2cdtfgQIdlh8FaCIdwhaaXIdwhhaQIdwhgazaCIdbg8JaXIdbg8KMaQIdbg8LMJbbnn:vUdbazclfaXIdlaCIdlMaQIdlMJbbnn:vUdbaQIdwh8MaCIdwh8NaXIdwhyazcxfa8EaE:tg8Eagah:tggNaaah:tgaa8FaE:tghN:tgEJbbbbJbbjZa8Ja8K:tg8FahNa8Ea8La8K:tg8KN:tghahNaEaENaaa8KNa8FagN:tgEaENMMg8K:rg8E:va8KJbbbb9BEg8KNUdbazczfaEa8KNUdbazcCfaha8KNUdbazcwfa8Maya8NMMJbbnn:vUdba5a8EMh5ascxfhsazcKfhzarcufgrmbka5aL:Z:vJbbbZNhEkamcuaLcdtalcFFFF970Ecbyd;0:G:cjbHjjjjbbgCBd:WwamcoBd;8waq:Zhhdna3mbcbhzaChsinasazBdbasclfhsaLazcefgz9hmbkkaEahNhhamcuaLcltalcFFFFd0Ecbyd;0:G:cjbHjjjjbbg8PBd:0wamcrBd;8wcba8Pa8AaCaLcbz:djjjb8AJFFuuh8MJFFuuh8NJFFuuhydnalci6mbJFFuuhya8AhzaLhsJFFuuh8NJFFuuh8MinazcwfIdbgEa8Ma8MaE9EEh8MazclfIdbgEa8Na8NaE9EEh8NazIdbgEayayaE9EEhyazcKfhzascufgsmbkkah:rhEamaocetgzcuaocu9kEcbyd;0:G:cjbHjjjjbbgCBd:4wdndnaoal9nmbaihzalhsinaCazydbcetfcFFi87ebazclfhzascufgsmbxdkkaCcFeazz:rjjjb8AkaEJbbbZNh8JcuhIdnalci6mbcbhsJFFuuhEa8AhzcuhIinazcwfIdba8M:tghahNazIdbay:tghahNazclfIdba8N:tghahNMM:rghaEaIcuSahaE9DVgXEhEasaIaXEhIazcKfhzaLascefgs9hmbkkamczfcbcjwz:rjjjb8Aam9cb83iwam9cb83ibaxa8JNh8RJbbjZak:th8Lcbh8SJbbbbhRJbbbbh8UJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8Ycbh8ZcbhPinJbbbbhEdna8STmbJbbjZa8S:Z:vhEkJbbbbhhdna8Ya8YNa8Wa8WNa8Xa8XNMMg8KJbbbb9BmbJbbjZa8K:r:vhhka8VaENh8Ka8UaENh5aRaENh8EaIhLdndndndndna8SaPVTmbamydwg80Tmea8YahNh8Fa8XahNhaa8WahNhgaeamydbcdtfh81cbh3JFFuuhEcvhQcuhLindnaHa81a3cdtfydbcdtgzfydbgvTmbaAaOazfydbcdtfhsindndnaCaiasydbgKcx2fgzclfydbgrcetf8Vebcs4aCazydbgXcetf8Vebcs4faCazcwfydbglcetf8Vebcs4fgombcbhzxekcehzaHaXcdtfydbgXceSmbcehzaHarcdtfydbgrceSmbcehzaHalcdtfydbglceSmbdnarcdSaXcdSfalcdSfcd6mbaocefhzxekaocdfhzkdnazaQ9kmba8AaKcK2fgXIdwa8K:tghahNaXIdba8E:tghahNaXIdla5:tghahNMM:ra8J:va8LNJbbjZMJ9VO:d86JbbjZaXIdCa8FNaXIdxagNaaaXIdzNMMakN:tghahJ9VO:d869DENghaEazaQ6ahaE9DVgXEhEaKaLaXEhLazaQaXEhQkasclfhsavcufgvmbkka3cefg3a809hmbkkaLcu9hmekama8KUd:ODama5Ud:KDama8EUd:GDamcuBd:qDamcFFF;7rBdjDa8Pcba8AaYamc:GDfamc:qDfamcjDfz:ejjjbamyd:qDhLdndnaxJbbbb9ETmba8SaD6mbaLcuSmeceh3amIdjDa8R9EmixdkaLcu9hmekdna8STmbabaPcltfgHam8Piw83dwaHam8Pib83dbaPcefhPkc3hHinamc:CwfaHfydbcbyd;4:G:cjbH:bjjjbbaHc98fgHc989hmbxvkkcbh3a8Saq9pmbamydwaCaiaLcx2fgzydbcetf8Vebcs4aCazcwfydbcetf8Vebcs4faCazclfydbcetf8Vebcs4ffaw9nmekcbhzcbhsdna8ZTmbcbhsamczfhXinamczfascdtfaXydbgQBdbaXclfhXasaYaQfRbbTfhsa8Zcufg8ZmbkkamydwhlamydbhXam9cu83i:GDam9cu83i:ODam9cu83i:qDam9cu83i:yDinamcjDfazfcFFF;7rBdbazclfgzcz9hmbkasc;8easclfc:bd6Eg8Zcdth80dnalTmbaeaXcdtfhocbhrindnaHaoarcdtfydbcdtgzfydbgvTmbaAaOazfydbcdtfhscuhQcuhzinaHaiasydbgKcx2fgXclfydbcdtfydbaHaXydbcdtfydbfaHaXcwfydbcdtfydbfgXazaXaz6gXEhzaKaQaXEhQasclfhsavcufgvmbkaQcuSmba8AaQcK2fgsIdwa8M:tgEaENasIdbay:tgEaENasIdla8N:tgEaENMM:rhEcbhsindndnazamc:qDfasfgvydbgX6mbazaX9hmeaEamcjDfasfIdb9FTmekavazBdbamc:GDfasfaQBdbamcjDfasfaEUdbxdkasclfgscz9hmbkkarcefgral9hmbkkamczfa80fhQcbhzcbhsindnamc:GDfazfydbgXcuSmbaQascdtfaXBdbascefhskazclfgzcz9hmbkasa8Zfg8ZTmbJFFuuhhcuhKamczfhza8ZhvcuhQina8AazydbgXcK2fgsIdwa8M:tgEaENasIdbay:tgEaENasIdla8N:tgEaENMM:rhEdndnaHaiaXcx2fgsclfydbcdtfydbaHasydbcdtfydbfaHascwfydbcdtfydbfgsaQ6mbasaQ9hmeaEah9DTmekaEhhashQaXhKkazclfhzavcufgvmbkaKcuSmbaKhLkdnamaiaLcx2fgrydbarclfydbarcwfydbaCabaeadaPawaqa3z:fjjjbTmbaPcefhPJbbbbhRJbbbbh8UJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8YkcbhXinaAaOaraXcdtfydbcdtgsfydbcdtfgKhzaHasfgvydbgQhsdnaQTmbdninazydbaLSmeazclfhzascufgsTmdxbkkazaKaQcdtfc98fydbBdbavavydbcufBdbkaXcefgXci9hmbka8AaLcK2fgzIdbhEazIdlhhazIdwh8KazIdxh5azIdzh8EazIdCh8FaYaLfce86bba8Ya8FMh8Ya8Xa8EMh8Xa8Wa5Mh8Wa8Va8KMh8Va8UahMh8UaRaEMhRamydxh8Sxbkkamc:WDf8KjjjjbaPkjoivuv99lu8Jjjjjbca9Rgo8Kjjjjbdndnalcw0mbaiydbhraeabcitfgwalcdtciVBdlawarBdbdnalcd6mbaiclfhralcufhDawcxfhwinarydbhqawcuBdbawc98faqBdbawcwfhwarclfhraDcufgDmbkkalabfhwxekcbhqaocbBdKao9cb83izaocbBdwao9cb83ibJbbjZhkJbbjZhxinadaiaqcdtfydbcK2fhDcbhwinaoczfawfgraDawfIdbgmarIdbgP:tgsaxNaPMgPUdbaoawfgrasamaP:tNarIdbMUdbawclfgwcx9hmbkJbbjZakJbbjZMgk:vhxaqcefgqal9hmbkcbhradcbcecdaoIdlgmaoIdwgP9GEgwaoIdbgsaP9GEawasam9GEgzcdtgwfhHaoczfawfIdbhmaihwalhDinaiarcdtfgqydbhOaqawydbgABdbawaOBdbawclfhwaraHaAcK2fIdbam9DfhraDcufgDmbkdndnarcv6mbavc8X9kmbaralc98f6mekaiydbhraeabcitfgwalcdtciVBdlawarBdbaiclfhralcufhDawcxfhwinarydbhqawcuBdbawc98faqBdbawcwfhwarclfhraDcufgDmbkalabfhwxekaeabcitfgwamUdbawawydlc98GazVBdlabcefaeadaiaravcefgqz:djjjbhDawawydlciGaDabcu7fcdtVBdlaDaeadaiarcdtfalar9Raqz:djjjbhwkaocaf8Kjjjjbawk;Oddvue99dninabaecitfgrydlgwcd4gDTmednawciGgqci9hmbcihqdnawcl6mbabaecitfhbcbheawhqcehkindnaiabydbgDfRbbmbcbhkadaDcK2fgwIdwalIdw:tgxaxNawIdbalIdb:tgxaxNawIdlalIdl:tgxaxNMM:rgxaoIdb9DTmbaoaxUdbavaDBdbarydlhqkabcwfhbaecefgeaqcd46mbkakceGTmikaraqciGBdlskdnabcbaDalaqcdtfIdbarIdb:tgxJbbbb9FEgwaD7aecefgDfgecitfydlabawaDfgDcitfydlVci0mbaraqBdlkabaDadaialavaoz:ejjjbax:laoIdb9Fmbkkkjlevudndnabydwgxaladcetfgm8Vebcs4alaecetfgP8Vebgscs4falaicetfgz8Vebcs4ffaD0mbakmbcbhDabydxaq6mekavawcltfgxab8Pdw83dwaxab8Pdb83dbabydbhDdnabydwgwTmbaoaDcdtfhxawhsinalaxydbcetfcFFi87ebaxclfhxascufgsmbkkabaDawfBdbabydxhxab9cb83dwababydlaxci2fBdlaP8VebhscehDcbhxkdnascztcz91cu9kmbabaxcefBdwaPax87ebaoabydbcdtfaxcdtfaeBdbkdnam8Uebcu9kmbababydwgxcefBdwamax87ebaoabydbcdtfaxcdtfadBdbkdnaz8Uebcu9kmbababydwgxcefBdwazax87ebaoabydbcdtfaxcdtfaiBdbkarabydlfabydxci2faPRbb86bbarabydlfabydxci2fcefamRbb86bbarabydlfabydxci2fcdfazRbb86bbababydxcefBdxaDk:mPrHue99eue99eue99iu8Jjjjjbc;W;Gb9Rgx8KjjjjbdndnalmbcbhmxekcbhPaxc:m;Gbfcbc;Kbz:rjjjb8Aaxcualci9UgscltascjjjjiGEcbyd;0:G:cjbHjjjjbbgzBd:m9GaxceBd;S9GaxcuascK2gHcKfalcpFFFe0Ecbyd;0:G:cjbHjjjjbbgOBd:q9GaxcdBd;S9Gdnalci6gAmbarcd4hCascdthXaOhQazhLinavaiaPcx2fgrydwaC2cdtfhKavarydlaC2cdtfhYavarydbaC2cdtfh8AcbhraLhEinaQarfgma8Aarfg3Idbg5aYarfg8EIdbg8Fa5a8F9DEg5UdbamaKarfgaIdbg8Fa5a8Fa59DEg8FUdbamcxfgma3Idbg5a8EIdbgha5ah9EEg5UdbamaaIdbgha5aha59EEg5UdbaEa8Fa5MJbbbZNUdbaEaXfhEarclfgrcx9hmbkaQcKfhQaLclfhLaPcefgPas9hmbkkaOaHfgr9cb83dbar9cb83dzar9cb83dwaxcuascx2gralc:bjjjl0Ecbyd;0:G:cjbHjjjjbbgHBdN9GaxciBd;S9GascdthgazarfhvaxcwVhPaxclVhCaHh8Jazh8KcbhLinaxcbcj;Gbz:rjjjbhEaLas2cdthadnaAmba8Khrash3inaEarydbgmc8F91cjjjj94Vam7gmcQ4cx2fg8Ea8EydwcefBdwaEamcd4cFrGcx2fg8Ea8EydbcefBdbaEamcx4cFrGcx2fgmamydlcefBdlarclfhra3cufg3mbkkazaafh8AaHaafhXcbhmcbh3cbh8EcbhainaEamfgrydbhQara3BdbarcwfgKydbhYaKaaBdbarclfgrydbhKara8EBdbaQa3fh3aYaafhaaKa8Efh8Eamcxfgmcj;Gb9hmbkdnaAmbcbhravhminamarBdbamclfhmasarcefgr9hmbkavhrashminaEa8Aarydbg3cdtfydbg8Ec8F91a8E7cd4cFrGcx2fg8Ea8Eydbg8EcefBdbaXa8Ecdtfa3Bdbarclfhramcufgmmbka8JhrashminaCa8Aarydbg3cdtfydbg8Ec8F91a8E7cx4cFrGcx2fg8Ea8Eydbg8EcefBdbava8Ecdtfa3BdbarclfhramcufgmmbkavhrashminaPa8Aarydbg3cdtfydbg8Ec8F91cjjjj94Va8E7cQ4cx2fg8Ea8Eydbg8EcefBdbaXa8Ecdtfa3Bdbarclfhramcufgmmbkka8Jagfh8Ja8Kagfh8KaLcefgLci9hmbkaEaocetgrcuaocu9kEcbyd;0:G:cjbHjjjjbbgKBd:y9GaEclBd;S9Gdndnaoal9nmbaihralhminaKarydbcetfcFFi87ebarclfhramcufgmmbxdkkaKcFearz:rjjjb8Akcbh8EaEascbyd;0:G:cjbHjjjjbbg8ABd:C9GaOaHaHascdtfaHascitfa8AascbazaKaiawaDaqakz:hjjjbdndnalci6mba8Ahrashmina8EarRbbfh8EarcefhramcufgmmbkaE9cb83iwaE9cb83ibalawc9:fgrfcufar9UgrasaDfcufaD9Ugmaram0EhYcbhmcbhra8Ehaincbh3dnarTmba8AarfRbbceSh3kamaEaiaHydbcx2fgQydbaQclfydbaQcwfydbaKabaeadamawaqa3a3ce7a8EaY9nVaaamfaY6VGz:fjjjbfhmaHclfhHaaa8AarfRbb9Rhaasarcefgr9hmbkaEydxTmeabamcltfgraE8Piw83dwaraE8Pib83dbamcefhmxekaE9cb83iwaE9cb83ibcbhmkczhrinaEc:m;Gbfarfydbcbyd;4:G:cjbH:bjjjbbarc98fgrc989hmbkkaxc;W;Gbf8Kjjjjbamk:wKDQue99iue99iul9:euw99iu8Jjjjjbc;qb9RgP8Kjjjjbaxhsaxhzdndnavax0gHmbdnavTmbcbhOaehzavhAinawaDazydbcx2fgCcwfydbcetfgX8VebhQawaCclfydbcetfgL8VebhKawaCydbcetfgC8VebhYaXce87ebaLce87ebaCce87ebaOaKcs4aYcs4faQcs4ffhOazclfhzaAcufgAmbkaehzavhAinawaDazydbcx2fgCcwfydbcetfcFFi87ebawaCclfydbcetfcFFi87ebawaCydbcetfcFFi87ebazclfhzaAcufgAmbkcehzaqhsaOaq0mekalce86bbalcefcbavcufz:rjjjb8AxekaPaiBdxaPadBdwaPaeBdlavakaqci9Ug8Aaka8Aak6EaHEgK9RhEaxaK9Rh3aKcufh5aKceth8EaKcdtgCc98fh8FavcitgOaC9Rarfc98fhaascufhhavcufhgaraOfh8JJbbjZas:Y:vh8KcbazceakaxSEg8Lcdtg8M9Rh8NJFFuuhycuh8PcbhIcbh8RinaPclfa8RcdtfydbhQaPcb8Pd:y:G:cjbg8S83i9iaPcb8Pd:q:G:cjbgR83inaPcb8Pd1:G:cjbg8U83iUaPcb8Pdj:G:cjbg8V83i8WaPa8S83iyaPaR83iaaPa8U83iKaPa8V83izaQavcdtgYfh8WcbhXinabaQaXcdtgLfydbcK2fhAcbhzinaPc8WfazfgCaAazfgOIdbg8XaCIdbg8Ya8Xa8Y9DEUdbaCczfgCaOcxfIdbg8XaCIdbg8Ya8Xa8Y9EEUdbazclfgzcx9hmbkaba8WaXcu7cdtfydbcK2fhAcbhzaPIdUh8ZaPId9ih80aPId80h81aPId9ehBaPId8Wh83aPIdnhUinaPczfazfgCaAazfgOIdbg8XaCIdbg8Ya8Xa8Y9DEUdbaCczfgCaOcxfIdbg8XaCIdbg8Ya8Xa8Y9EEUdbazclfgzcx9hmbkaraLfgza80a8Z:tg8XaUa83:tg8YNa8YaBa81:tg8ZNa8Za8XNMMUdbazaYfaPIdyaPIdK:tg8XaPIdaaPIdz:tg8YNa8YaPId8KaPIdC:tg8ZNa8Za8XNMMUdbaXcefgXav9hmbkcbh85dnaHmbcbhAaQhza8JhCavhXinawaDazydbcx2fgOcwfydbcetfgL8Vebh8WawaOclfydbcetfg858Vebh86awaOydbcetfgO8Vebh87aLce87eba85ce87ebaOce87ebaCaAa86cs4a87cs4fa8Wcs4ffgABdbazclfhzaCclfhCaXcufgXmbkavhCinawaDaQydbcx2fgzcwfydbcetfcFFi87ebawazclfydbcetfcFFi87ebawazydbcetfcFFi87ebaQclfhQaCcufgCmbka8Jh85kdndndndndndndndndndndnava8E6mba8Eax9nmeavavaK9UgzaK29Raza320mda5aE9pmqa85Th87ceh8WaEhQxwka5ag9pmDa8Eax9nmixokavaK6mea5aE9pmwcehQaEhXa85Tmixlka5ag6mlxrka5ag9pmokcbhQaghXa85mekJFFuuh8XcbhLa5hzindnazcefgCaK6mbaQavaC9RgOaK6GmbarazcdtfIdbg8YaC:YNaravaz9RcdtfaYfc94fIdbg8ZaO:YNMg80a8X9Embdndna8KaOahf:YNg81:lJbbb9p9DTmba81:OhAxekcjjjj94hAka8ZasaA2aO9R:YNh8Zdndna8Kazasf:YNg81:lJbbb9p9DTmba81:OhOxekcjjjj94hOkamasaO2aC9R:Ya8YNa8ZMNa80Mg8Ya8Xa8Ya8X9DgOEh8XaCaLaOEhLkaza8LfgzaX6mbxlkkJFFuuh8XcbhLaEhCaahAa8FhOaKhzindnazaK6mbaQaCaK6GmbaraOfIdbg8Yaz:YNaAIdbg8ZaC:YNMg80a8X9Embdndna8Ka85aOfydbgYahf:YNg81:lJbbb9p9DTmba81:Oh8Wxekcjjjj94h8Wkamasa8W2aY9R:Yg81a8YNa8Za81NMNa80Mg8Ya8Xa8Ya8X9DgYEh8XazaLaYEhLkaCa8L9RhCaAa8NfhAaOa8MfhOaza8LfgzcufaX6mbxikka85Th87cbh8WaghQkJFFuuh8XcbhLaEhCaahAa8FhOaKhzindnazazaK9UgXaK29RaXa320mbdna8WTmbaCaCaK9UgXaK29RaXa320mekaraOfIdbg8Yaz:YNaAIdbg8ZaC:YNMg80a8X9EmbazhXaChYdna87mba85aOfydbgXhYkdndna8KaYahf:YNg81:lJbbb9p9DTmba81:Oh86xekcjjjj94h86ka8Zasa862aY9R:YNh8Zdndna8KaXahf:YNg81:lJbbb9p9DTmba81:OhYxekcjjjj94hYkamasaY2aX9R:Ya8YNa8ZMNa80Mg8Ya8Xa8Ya8X9DgXEh8XazaLaXEhLkaCa8L9RhCaAa8NfhAaOa8MfhOaza8LfgzcufaQ6mbkkaLTmba8Xay9DTmba8XhyaLhIa8Rh8Pka8Rcefg8Rci9hmbkdndnaoc8X9kmba8Pcb9omeka8Acufh85cbhYindndndnavaY9RaxaYaxfav0Eg8WTmbcbhAaeaYcdtfgzhCa8WhXinawaDaCydbcx2fgOcwfydbcetfgQ8VebhbawaOclfydbcetfgL8VebhrawaOydbcetfgO8VebhKaQce87ebaLce87ebaOce87ebaAarcs4aKcs4fabcs4ffhAaCclfhCaXcufgXmbka8WhOinawaDazydbcx2fgCcwfydbcetfcFFi87ebawaCclfydbcetfcFFi87ebawaCydbcetfcFFi87ebazclfhzaOcufgOmbkaAaq0mekalaYfgzce86bbazcefcba8Wcufz:rjjjb8AxekalaYfgzce86bbazcefcba85z:rjjjb8Aa8Ah8Wka8WaYfgYav9pmdxbkkaravcdtg8WfhLdnaITmbaPclfa8PcdtfydbhzaIhCinaLazydbfcb86bbazclfhzaCcufgCmbkkdnavaI9nmbaPclfa8PcdtfydbaIcdtfhzavaI9RhCinaLazydbfce86bbazclfhzaCcufgCmbkkcbhYindnaYa8PSmbcbhzaraPclfaYcdtfydbgKa8Wz:qjjjbhCavhXaIhOinaKaOazaLaCydbgQfRbbgAEcdtfaQBdbaCclfhCaOaAfhOazaA9RcefhzaXcufgXmbkkaYcefgYci9hmbkabaeadaialaIaocefgCarawaDaqakaxamz:hjjjbabaeaIcdtgzfadazfaiazfalaIfavaI9RaCarawaDaqakaxamz:hjjjbkaPc;qbf8Kjjjjbk:Seeru8Jjjjjbc:q;ab9Rgo8Kjjjjbaoc:q8WfcFecjzz:rjjjb8AcbhrdnadTmbaehwadhDinaoarcdtfawydbgqBdbaoc:q8WfaqcFiGcdtfgkydbhxakaqBdbawclfhwaraxaq9hfhraDcufgDmbkkabaeadaoaraiavz:jjjjbaoc:q;abf8Kjjjjbk;Sqloud99euD998Jjjjjbc:W;ab9Rgr8KjjjjbdndnadTmbaocd4hwcbhDcbhqindnavaeclfydbaw2cdtfgkIdbavaeydbaw2cdtfgxIdbgm:tgPavaecwfydbaw2cdtfgsIdlaxIdlgz:tgHNakIdlaz:tgOasIdbam:tgAN:tgCaCNaOasIdwaxIdwgX:tgQNakIdwaX:tgOaHN:tgHaHNaOaANaPaQN:tgPaPNMMgOJbbbb9Bmbarc8WfaDcltfgkaCaO:rgO:vgCUdwakaPaO:vgPUdlakaHaO:vgHUdbakaCaXNaHamNazaPNMM:mUdxaDcefhDkaecxfheaqcifgqad6mbkab9cb83dyab9cb83daab9cb83dKab9cb83dzab9cb83dwab9cb83dbaDTmearcbBd8Sar9cb83iKar9cb83izarczfavalaoarc8Sfcbcraiz:kjjjbarIdKhQarIdChLarIdzhKar9cb83iwar9cb83ibararc8WfaDczarc8Sfcbcicbz:kjjjbJbbbbhmdnarIdwgzazNarIdbgHaHNarIdlgXaXNMMgCJbbbb9BmbJbbjZaC:r:vhmkazamNhCaXamNhXaHamNhHJbbjZhmarc8WfheaDhvinaecwfIdbaCNaeIdbaHNaXaeclfIdbNMMgzamazam9DEhmaeczfheavcufgvmbkabaQUdwabaLUdlabaKUdbabarId3UdxdndnamJ;n;m;m899FmbJbbbbhzarc8WfheinaecxfIdbaQaecwfIdbgPNaKaeIdbgONaLaeclfIdbgANMMMaCaPNaHaONaXaANMM:vgPazaPaz9EEhzaeczfheaDcufgDmbkabaCUd8KabaXUdaabaHUd3abaQaCazN:tUdKabaLaXazN:tUdCabaKaHazN:tUdzabJbbjZamamN:t:rgmUdydndnaCJbbj:;aCJbbj:;9GEgzJbbjZazJbbjZ9FEJbb;:9cNJbbbZJbbb:;aCJbbbb9GEMgz:lJbbb9p9DTmbaz:Ohexekcjjjj94hekabae86b8UdndnaXJbbj:;aXJbbj:;9GEgzJbbjZazJbbjZ9FEJbb;:9cNJbbbZJbbb:;aXJbbbb9GEMgz:lJbbb9p9DTmbaz:Ohvxekcjjjj94hvkabav86bRdndnaHJbbj:;aHJbbj:;9GEgzJbbjZazJbbjZ9FEJbb;:9cNJbbbZJbbb:;aHJbbbb9GEMgz:lJbbb9p9DTmbaz:Ohwxekcjjjj94hwkabaw86b8SdndnaecKtcK91:YJbb;:9c:vaC:t:lavcKtcK91:YJbb;:9c:vaX:t:lawcKtcK91:YJbb;:9c:vaH:t:lamMMMJbb;:9cNJbbjZMgm:lJbbb9p9DTmbam:Ohexekcjjjj94hekaecFbaecFb9iEhexekabcjjj;8iBdycFbhekabae86b8Vxekab9cb83dyab9cb83daab9cb83dKab9cb83dzab9cb83dwab9cb83dbkarc:W;abf8Kjjjjbk;7woDuo99eue99euv998Jjjjjbcje9Rgw8Kjjjjbawc;abfcbaocdtgDz:rjjjb8Aawc;GbfcbaDz:rjjjb8AawcafhDawhqaohkinaqcFFF97BdbaDcFFF;7rBdbaqclfhqaDclfhDakcufgkmbkavcd4hxaicd4hmdnadTmbaocx2hPcbhsinashzdnarTmbarascdtfydbhzkaeazam2cdtfgDIdwhHaDIdlhOaDIdbhAalazax2cdtfIdbhCcbhDawcafhqawc;Gbfhvawhkawc;abfhiinaCaDc:O:G:cjbfIdbaHNaDc:G:G:cjbfIdbaANaDc:K:G:cjbfIdbaONMMgXMhQazhLdnaXaC:tgXaqIdbgK9DgYmbavydbhLkavaLBdbazhLdnaQakIdbg8A9EmbaiydbhLa8AhQkaiaLBdbakaQUdbaqaXaKaYEUdbaiclfhiakclfhkavclfhvaqclfhqaPaDcxfgD9hmbkascefgsad9hmbkkJbbbbhQcbhLawc;GbfhDawc;abfhqcbhkinalaqydbgvax2cdtfIdbalaDydbgiax2cdtfIdbaeavam2cdtfgvIdwaeaiam2cdtfgiIdw:tgCaCNavIdbaiIdb:tgCaCNavIdlaiIdl:tgCaCNMM:rMMgCaQaCaQ9EgvEhQakaLavEhLaqclfhqaDclfhDaoakcefgk9hmbkJbbbbhCdnaeawc;abfaLcdtgqfydbgkam2cdtfgDIdwaeawc;Gbfaqfydbgvam2cdtfgqIdwgH:tgXaXNaDIdbaqIdbgA:tg8Aa8ANaDIdlaqIdlgE:tgOaONMMgKJbbbb9ETmbaK:rgCalakax2cdtfIdbMalavax2cdtfIdb:taCaCM:vhCkaQJbbbZNhKaXaCNaHMhHaOaCNaEMhOa8AaCNaAMhAdnadTmbcbhqarhkinaqhDdnarTmbakydbhDkdnalaDax2cdtfIdbg3aeaDam2cdtfgDIdwaH:tgQaQNaDIdbaA:tgCaCNaDIdlaO:tgXaXNMMg5:rgEMg8EaK9ETmbJbbbbh8Adna5Jbbbb9ETmba8EaK:taEaEM:vh8Aka8AaQNaHMhHa8AaXNaOMhOa8AaCNaAMhAa3aKaEMMJbbbZNhKkakclfhkadaqcefgq9hmbkkabaKUdxabaHUdwabaOUdlabaAUdbawcjef8Kjjjjbk:reevu8Jjjjjbcj8W9Rgr8Kjjjjbaici2hwcbhDdnaiTmbarhiawhqinaiaeadRbbgkcdtfydbBdbaDakcefgkaDak0EhDaiclfhiadcefhdaqcufgqmbkkabarawaeaDalaoz:jjjjbarcj8Wf8Kjjjjbk:Eeeeu8Jjjjjbca9Rgo8Kjjjjbab9cb83dyab9cb83daab9cb83dKab9cb83dzab9cb83dwab9cb83dbdnadTmbaocbBd3ao9cb83iwao9cb83ibaoaeadaialaoc3falEavcbalEcrcbz:kjjjbabao8Pib83dbabao8Piw83dwkaocaf8Kjjjjbk::meQu8Jjjjjbcjz9Rgv8KjjjjbcbhoavcjPfcbaez:rjjjb8Aavcjxfcbaez:rjjjb8AdnaiTmbadhoaihrinavcjxfaoRbbfgwawRbbcef86bbavcjxfaocefRbbfgwawRbbcef86bbavcjxfaocdfRbbfgwawRbbcef86bbaocifhoarcufgrmbkcbhDcjehoadhqcehkindndnalTmbcbhxcuhmaqhrakhwcuhPinawcufamaoavcjPfarcefRbbgsfRbb9RcFeGgzci6aoavcjPfarRbbgHfRbb9RcFeGgOci6faoavcjPfarcdfRbbgAfRbb9RcFeGgCci6fgXcOtaOcFr7azaCf9RcwtVavcjxfaAfRbbgzavcjxfaHfRbbgHavcjxfasfRbbgsaHas6Egsazas6EcFe7VgsaP9kgzEhmaXcd6gHaxcefgOal9iVce9hmdasaPazEhPaxaOaHEhxarcifhrawai6hsawcefhwasmbxdkkcuhmaqhrakhwcuhxinawcufamaoavcjPfarcefRbbfRbb9RcFeGci6aoavcjPfarRbbfRbb9RcFeGci6faoavcjPfarcdfRbbfRbb9RcFeGci6fgPax9kgsEhmaPce0meaPaxasEhxarcifhrawai6hPawcefhwaPmbkkadamci2fgrcdfRbbhwarcefRbbhxarRbbhPadaDci2fgrcifaramaD9Rci2zNjjjb8AaPavcjPffaocefgo86bbaPavcjxffgmamRbbcuf86bbaxavcjPffao86bbaxavcjxffgmamRbbcuf86bbarcdfaw86bbarcefax86bbaraP86bbawavcjPffao86bbawavcjxffgrarRbbcuf86bbaqcifhqakcefhkaDcefgDai9hmbkcbhzdnalcb9mmbcbhsavcjPfcbaez:rjjjb8Aadcvfhlinadasci2fgxcefgDRbbhoaxcdfgqRbbhrdndnavcjPfaxRbbgmfRbbmbavcjPfarfRbbhwdndndnavcjPfaofRbbTmbawcFeGTmexikawcFeGmdascefgAai9pmdasc980mdascifhQcbhLarcFeGhCamcFeGhXalhwcbhKcbhYinawcufRbbhPawRbbhOcehkdndnawc9:fRbbgHao9hmbaPcFeGamSmekdnaPcFeGao9hmbaOcFeGamSmekaHamSaOcFeGaoSGhkkceh8AaYceGhYdndnaHar9hmbaPcFeGaoSmekdnaPcFeGar9hmbaOcFeGaoSmekaHaoSaOcFeGarSGh8AkakaYVhYaLaHcFeGgHaXSaPcFeGgPaCSGaPaXSaOcFeGgPaCSGVaHaCSaPaXSGVVhLa8AaKceGVhKdnaAcefgPai9pmbawcifhwaAaQ6hHaPhAaHmekkaYTmeaKmekarhwaohPaohHarhOamhrxdkdnaYTaLVceGTmbaYaKTVaLVceGmekamhwarhParhHamhOaohrxekaohwamhPamhHaohOkavcjPfarfce86bbavcjPfawfce86bbaxaH86bbaqar86bbaDaO86bbavcjPfaPfce86bbalcifhlascefgsai9hmbkkavcFeaecetz:rjjjbhwaici2hrindnawadRbbgmcetfgx8Uebgocu9kmbaxaz87ebawcjlfazcdtfabamcdtfydbBdbazhoazcefhzkadao86bbadcefhdarcufgrmbkazcdthokabavcjlfaoz:qjjjb8Aavcjzf8KjjjjbkObabaiaeadcbz:njjjbk9teiucbcbyd;8:G:cjbgeabcifc98GfgbBd;8:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;8:G:cjbgeabcrfc94GfgbBd;8:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd;8:G:cjbge9Rcifc98GaefgbBd;8:G:cjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akk:3qeludndnadch6mbadTmeabaead;8qbbabskabaeSmbdnaeadabfgi9Rcbadcet9R0mbadTmeabaead;8qbbabskaeab7ciGhldndndnabae9pmbdnalTmbadhvabhixikdnabciGmbadhvabhixdkadTmiabaeRbb86bbadcufhvdnabcefgiciGmbaecefhexdkavTmiabaeRbe86beadc9:fhvdnabcdfgiciGmbaecdfhexdkavTmiabaeRbd86bdadc99fhvdnabcifgiciGmbaecifhexdkavTmiabaeRbi86biabclfhiaeclfheadc98fhvxekdnalmbdnaiciGTmbadTmlabadcufgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc9:fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc99fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc98fgdfaeadfRbb86bbkadcl6mbdnadc98fgocxGcxSmbaocd4cefciGhiaec98fhlabc98fhvinavadfaladfydbBdbadc98fhdaicufgimbkkaocx6mbaec9Wfhvabc9WfhoinaoadfgicxfavadfglcxfydbBdbaicwfalcwfydbBdbaiclfalclfydbBdbaialydbBdbadc9Wfgdci0mbkkadTmdadhidnadciGglTmbaecufhvabcufhoadhiinaoaifavaifRbb86bbaicufhialcufglmbkkadcl6mdaec98fhlabc98fhvinavaifgecifalaifgdcifRbb86bbaecdfadcdfRbb86bbaecefadcefRbb86bbaeadRbb86bbaic98fgimbxikkavcl6mbdnavc98fglc3Gc3Smbavalcd4cefcrGgdcdt9RhvinaiaeydbBdbaeclfheaiclfhiadcufgdmbkkalc36mbinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfaeczfydbBdbaicCfaecCfydbBdbaicKfaecKfydbBdbaic3faec3fydbBdbaecafheaicafhiavc9Gfgvci0mbkkavTmbdndnavcrGgdmbavhlxekavc94GhlinaiaeRbb86bbaicefhiaecefheadcufgdmbkkavcw6mbinaiaeRbb86bbaicefaecefRbb86bbaicdfaecdfRbb86bbaicifaecifRbb86bbaiclfaeclfRbb86bbaicvfaecvfRbb86bbaicofaecofRbb86bbaicrfaecrfRbb86bbaicwfhiaecwfhealc94fglmbkkabkk:pedbcj:GdktFFuuFFuuFFuubbbbFFuFFFuFFFuFbbbbbbjZbbbbbbbbbbbbbbjZbbbbbbbbbbbbbbjZ86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;bc;0:Gdkxebbbdbbbj:qbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(y){n=y.instance,n.exports.__wasm_call_ctors()});function o(y){for(var _=new Uint8Array(y.length),S=0;S96?Z-97:Z>64?Z-39:Z+4}for(var V=0,S=0;S=3),r(Z>=3&&Z<=256),r(V>=1&&V<=512),C=C||0;var G=y.BYTES_PER_ELEMENT==4?y:new Uint32Array(y);return u(n.exports.meshopt_buildMeshletsFlex,G,_,_.length/S,S*4,Z,V,V,C,0)},buildMeshletsFlex:function(y,_,S,Z,V,C,G,E){r(y.length%3==0),r(_ instanceof Float32Array),r(_.length%S==0),r(S>=3),r(Z>=3&&Z<=256),r(V>=1&&C<=512),r(V<=C),G=G||0,E=E||0;var v=y.BYTES_PER_ELEMENT==4?y:new Uint32Array(y);return u(n.exports.meshopt_buildMeshletsFlex,v,_,_.length/S,S*4,Z,V,C,G,E)},buildMeshletsSpatial:function(y,_,S,Z,V,C,G){r(y.length%3==0),r(_ instanceof Float32Array),r(_.length%S==0),r(S>=3),r(Z>=3&&Z<=256),r(V>=1&&C<=512),r(V<=C),G=G||0;var E=y.BYTES_PER_ELEMENT==4?y:new Uint32Array(y);return u(n.exports.meshopt_buildMeshletsSpatial,E,_,_.length/S,S*4,Z,V,C,G)},extractMeshlet:function(y,_){return r(_>=0&&_=3);var Z=y.BYTES_PER_ELEMENT==4?y:new Uint32Array(y);return b(Z,_,_.length/S,S*4)},computeMeshletBounds:function(y,_,S){return r(_ instanceof Float32Array),r(_.length%S==0),r(S>=3),p(y,_,_.length/S,S*4)},computeSphereBounds:function(y,_,S,Z){return r(y instanceof Float32Array),r(y.length%_==0),r(_>=3),r(!S||S instanceof Float32Array),r(!S||S.length%Z==0),r(!S||Z>=1),r(!S||y.length/_==S.length/Z),Z=Z||0,f(y,y.length/_,_*4,S,Z*4)}}})();var eQt=x(T(),1),q4t=(function(){var e="b9H79Tebbbegv9Geueu9Geub9Gbb9Gkuuuuuuuuuuub9Giuuueuirodiblbelve9Weiiviebeoweuecj:Gdkrnlo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbK9TW79O9V9Wt9F9NW9UWV9HtW9u9H9U9NW9Ut7bel79IV9RbdDwebcekdlvq;m8Lodbk:wgvOuw99iuv99vu8Jjjjjbc;Wb9Rgk8Kjjjjbakcxfcbc;Kbz:djjjb8AakcualcdtgxalcFFFFi0Ecbyd:q:G:cjbHjjjjbbgmBdxakceBd2adci9UhPalcd4alfhscehzinazgHcethzaHas6mbkakcuaHcdtgzaHcFFFFi0Ecbyd:q:G:cjbHjjjjbbgsBdzakcdBd2ascFeazz:djjjbhOaDcd4hAarcd4hCavcd4hXdnalTmbaHcufhrcbhvindndnaOcbaiavaX2cdtfgHydlgDaDcjjjj94SEgscH4cbaoavaC2cdtfgzydlgQcs4aQcjjjj94SE7as7c:F:b:DD2cbaHydbgLaLcjjjj94SEgscH4cbazydbgKcs4aKcjjjj94SE7as7c;D;O:B8J27cbaHydwgYaYcjjjj94SEgHcH4cbazydwg8Acs4a8Acjjjj94SE7aH7c:3F;N8N27awavaA2cdtfgHydlgEaHydbg37cFFFFrGgHcm4aH7c:fjjK27arGgscdtfgHydbgzcuSmbaE::h5a3::h8Ea8A::h8FaQ::haaK::hhaY::hgaD::h8JaL::h8KcehDinaDhHdnaiazaX2cdtfgDIdba8K9CmbaDIdla8J9CmbaDIdwag9CmbaoazaC2cdtfgDIdbah9CmbaDIdlaa9CmbaDIdwa8F9CmbawazaA2cdtfgDIdba8E9CmbaDIdla59BmikaHcefhDaOasaHfarGgscdtfgHydbgzcu9hmbkkaHavBdbavhzkamavcdtfazBdbavcefgval9hmbkkaOcbydN:G:cjbH:bjjjbbakceBd2akcualcefgHcdtaHcFFFFi0Ecbyd:q:G:cjbHjjjjbbg8LBdzakcdBd2akcuadcdtadcFFFFi0EgYcbyd:q:G:cjbHjjjjbbg8MBdCakciBd2a8Lclfcbaxz:djjjbhzdnadTmbdnaeTmbaehHadhsinazamaHydbcdtfydbcdtfgDaDydbcefBdbaHclfhHascufgsmbxdkkamhHadhsinazaHydbcdtfgDaDydbcefBdbaHclfhHascufgsmbkkdnalTmbcbhsazhHalhDinaHydbhOaHasBdbaHclfhHaOasfhsaDcufgDmbkkdnadci6gQmbcbhscdhHaPhOindndnaeTmbamaeasfgvydbcdtfhDamavcwfydbcdtfhramavclfydbcdtfhvxekamasfgDcwfhraDclfhvkarydbhravydbhvazaDydbcdtfgDaDydbgDcefBdba8MaDcdtfaHc9:fBdbazavcdtfgDaDydbgDcefBdba8MaDcdtfaHcufBdbazarcdtfgDaDydbgDcefBdba8MaDcdtfaHBdbascxfhsaHclfhHaOcufgOmbkkcbhsa8LcbBdbakcuaPcltadcFFFFd0Ecbyd:q:G:cjbHjjjjbbg8NBdKakclBd2dnaQmbaehza8NhHaPhvindndnaeTmbazcwfydbhDazclfydbhOazydbhrxekascdfhDascefhOashrkJbbbbh8KJbbbbJbbbbJbbbbJbbbbJbbjZJbbj:;awaOaA2cdtfgQIdbawaraA2cdtfgLIdbgh:tawaDaA2cdtfgKIdlaLIdlgg:tg8JNaQIdlag:tggaKIdbah:tN:tghJbbbb9EEahJbbbb9BEg8EaiaraX2cdtfgrIdwghaiaOaX2cdtfgOIdwg59BEa8EarIdlgaaOIdlgy9BEa8EarIdbg8FaOIdbg8P9BEg8EahaiaDaX2cdtfgDIdwgI9BEa8EaaaDIdlg8R9BEa8Ea8FaDIdbg8S9BEg8Ea5aI9BEa8Eaya8R9BEa8Ea8Pa8S9BEh8Edna8Ja5ah:tNagaIah:tN:tghahNa8Ja8Pa8F:tNaga8Sa8F:tN:tg8Fa8FNa8Jayaa:tNaga8Raa:tN:tg8Ja8JNMMggJbbbb9Bmba8Eag:r:vh8KkaHcxfa8EUdbaHcwfaha8KNUdbaHclfa8Ja8KNUdbaHa8Fa8KNUdbazcxfhzaHczfhHascifhsavcufgvmbkkcbhHakaYcbyd:q:G:cjbHjjjjbbgDBd3akcvBd2dnadTmbaDhzinazaHBdbazclfhzadaHcefgH9hmbkkakcuaPcdtadcFFFF970Ecbyd:q:G:cjbHjjjjbbgvBdaakcoBd2akaPcbyd:q:G:cjbHjjjjbbg8ABd8KakcrBd2dnadci6mba8NcxfhzavhscbhHinasaHBdba8AaHfcdcbazIdbg8KJbbbb9DEa8KJbbbb9EV86bbasclfhsazczfhzaPaHcefgH9hmbkkdnalTmbcbhRinaRcdthHdna8LaRcefgRcdtfydbgza8LaHfydbgHSmbazaH9RhLa8MaHcdtfhKcbh8UinaKa8Ucdtfg8VydbgHcd4g8Wci2gxaHciGcdtgzyd:e:G:cjbfhHaxazydj:G:cjbfhzdnaeTmbaeaHcdtfydbhHaeazcdtfydbhzkdna8Ucefg8UaL9pmbamaHcdtfydbhYamazcdtfydbh3a8Aa8WfhEava8Wcdtfh8Xa8UhwinaKawcdtfgQydbgHcd4gzci2gAaHciGcdtgHyd:e:G:cjbfhsaAaHydj:G:cjbfhHdnaeTmbaeascdtfydbhsaeaHcdtfydbhHkdndnamaHcdtfydbaYSmbamascdtfydba39hmeka8AazfRbbgHaERbbgsVciSmbdnaHasGmba8Whsdna8Wa8XydbgHSmba8XhOinaOavaHgscdtfgrydbgHBdbarhOasaH9hmbkkdnazavazcdtfgOydbgHSmbinaOavaHgzcdtfgrydbgHBdbarhOazaH9hmbkkasazSmba8AazfgORbba8AasfgHRbbVciSmeavazcdtfasBdbaHaHRbbaORbbV86bbkdna8VydbciGaxfgzaDazcdtfgsydbgHSmbinasaDaHgzcdtfgOydbgHBdbaOhsazaH9hmbkkdnaQydbciGaAfgsaDascdtfgOydbgHSmbinaOaDaHgscdtfgrydbgHBdbarhOasaH9hmbkkazasSmbaDascdtfazBdbkawcefgwaL9hmbkka8UaL9hmbkkaRal9hmbkkdnadTmbcbhrinarhzdnaraDarcdtfgwydbgHSmbawhsinasaDaHgzcdtfgOydbgHBdbaOhsazaH9hmbkkawazBdbarcefgrad9hmbkcbh8Vabcbadcltz:djjjbhKdnadci6mbaqceGhEaDhYaeh3cbh8Windna8Na8WcltfgsIdxJbbbb9Bmbama8Wcx2gHfhxaeaHfhLcbhza8VhwinaKaYazfydbcltfhHdndnaeTmbamaLazc:e:G:cjbfydbcdtfydbcdtfhAamaLazcj:G:cjbfydbcdtfydbcdtfhra3azfydbhOxekaxazc:e:G:cjbfydbcdtfhAaxazcj:G:cjbfydbcdtfhrawhOkaHasIdbggaoamaOcdtfydbgQaC2cdtfgOIdbg8KasIdwg8FaOIdwg8JNaga8KNasIdlg8EaOIdlggNMMghN:tgaJbbbbJbbjZa8Fa8JahN:tg8Fa8FNaaaaNa8EagahN:tghahNMMga:r:vaaJbbbb9BEJ;As6nJbbjZaiarydbaX2cdtfgOIdwaiaQaX2cdtfgrIdwg5:tgaa8Jaaa8JNaOIdbarIdbgy:tg8Pa8KNagaOIdlarIdlgI:tg8RNMMgaN:tg8EaiaAydbaX2cdtfgOIdwa5:tg5a8Ja5a8JNaOIdbay:tg8Sa8KNagaOIdlaI:tgINMMg5N:tg8JNa8Pa8KaaN:tgya8Sa8Ka5N:tg8KNa8RagaaN:tgaaIaga5N:tggNMMJbbbbJbbjZa8Ea8ENayayNaaaaNMMa8Ja8JNa8Ka8KNagagNMMNg8K:rg8J:va8KJbbbb9BENgg:lg8Ka8KJbbjZ9EEg8Ka8KJ7;A9s89NJ:L9t9s::MNJ;ob;jZMJbbjZa8K:t:rNg8K:ta8KagJbbbb9DENg8Ka8Ja8KNaEEg8KNaHIdbMUdbaHaha8KNaHIdlMUdlaHa8Fa8KNaHIdwMUdwawcefhwazclfgzcx9hmbkkaYcxfhYa3cxfh3a8Vcifh8Va8Wcefg8WaP9hmbkcbhrinarhzdnaravarcdtfgsydbgHSmbinasavaHgzcdtfgOydbgHBdbaOhsazaH9hmbkkaKarc8W2fgHc3fJbbjZJbbj:;a8AazfRbbceGEg8KUdbaHc8Sfa8KUdbaHa8KUdxarcefgraP9hmbkkaqcdGhvcbhzaDhsaKhHindnazasydb9hmbJbbbbh8KdnaHcwfgOIdbg8Ja8JNaHIdbggagNaHclfgrIdbghahNMMgaJbbbb9BmbJbbjZaa:r:vh8KkaOa8Ja8KNUdbaraha8KNUdbaHaga8KNg8JUdbavmbaHJbbjZa8Ja8KJbbbb9BEUdbkasclfhsaHczfhHadazcefgz9hmbkcbhHaKhzindnaHaDydbgsSmbazaKascltfgsydwBdwazas8Pdb83dbkaDclfhDazczfhzadaHcefgH9hmbkkdnakyd2gzTmbazcdtakcxffc98fhHinaHydbcbydN:G:cjbH:bjjjbbaHc98fhHazcufgzmbkkakc;Wbf8Kjjjjbk9teiucbcbyd:y:G:cjbgeabcifc98GfgbBd:y:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:y:G:cjbgeabcrfc94GfgbBd:y:G:cjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd:y:G:cjbge9Rcifc98GaefgbBd:y:G:cjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akkk8Rdbcj:Gdkzebbbdbbbbbbbebbbbc:q:Gdkxebbbdbbba:qbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(d){n=d.instance,n.exports.__wasm_call_ctors()});function o(d){for(var u=new Uint8Array(d.length),m=0;m96?p-97:p>64?p-39:p+4}for(var b=0,m=0;m=3),r(p instanceof Float32Array),r(p.length%b==0),r(b>=3),r(f instanceof Float32Array),r(f.length%y==0),r(y>=2),r(u.length/m==p.length/b),r(u.length/m==f.length/y),r(d!==null||u.length/m%3==0);for(var S=0,Z=0;Z<(_?_.length:0);++Z)r(_[Z]in c),S|=c[_[Z]];var V=u.length/m,C=d?d.length:V,G=d===null||d.BYTES_PER_ELEMENT==4?d:new Uint32Array(d);return a(G,C,u,V,m,p,b,f,y,S)}}})();var uQt=x(T(),1);var mp={X:0,Y:1,Z:2};mp.Y_UP_TO_Z_UP=I.fromRotationTranslation(q.fromArray([1,0,0,0,0,1,0,-1,0]));mp.Z_UP_TO_Y_UP=I.fromRotationTranslation(q.fromArray([1,0,0,0,0,-1,0,1,0]));mp.X_UP_TO_Z_UP=I.fromRotationTranslation(q.fromArray([0,0,1,0,1,0,-1,0,0]));mp.Z_UP_TO_X_UP=I.fromRotationTranslation(q.fromArray([0,0,-1,0,1,0,1,0,0]));mp.X_UP_TO_Y_UP=I.fromRotationTranslation(q.fromArray([0,1,0,-1,0,0,0,0,1]));mp.Y_UP_TO_X_UP=I.fromRotationTranslation(q.fromArray([0,-1,0,1,0,0,0,0,1]));mp.fromName=function(e){return mp[e]};Object.freeze(mp);var Mi=mp;var lj={},yMe={positions:void 0,normals:void 0,indices:void 0,edgeIndicesWest:void 0,edgeIndicesSouth:void 0,edgeIndicesEast:void 0,edgeIndicesNorth:void 0},xMe=new fe,TMe=new h,_Me=new I,SMe=new I,ZMe=new I,VMe=new h,CMe=new h,RMe=new h,GMe=new h,AMe=new fe,EMe=new M,CA=new h,LMe=new M,WMe=new h,vMe=new h,D5=function(e,t){return e-t};lj.createMesh=async function(e){e=e??B.EMPTY_OBJECT;let{exaggeration:t=1,exaggerationRelativeHeight:n=0,hasVertexNormals:i,hasWebMercatorT:o,gltf:r,minimumHeight:s,maximumHeight:a,skirtHeight:c}=e,u=t!==1,m=le.clone(e.boundingSphere,new le),p=$t.clone(e.orientedBoundingBox,new $t),b=h.clone(e.horizonOcclusionPoint,new h),f=ie.clone(e.ellipsoid,new ie),y=re.clone(e.rectangle,new re);await(r.extensionsRequired!==void 0&&r.extensionsRequired.indexOf("EXT_meshopt_compression")!==-1?uy.ready:Promise.resolve(void 0));let Z=y.west,V=y.south,C=y.north,G=y.width,E=y.height,v=re.center(y,xMe);v.height=.5*(s+a);let F=fe.toCartesian(v,f,TMe),P=bt.eastNorthUpToFixedFrame(F,f,_Me),N=I.inverseTransformation(P,SMe),g=I.unpack(r.nodes[0].matrix,0,ZMe);g=I.multiply(Mi.Y_UP_TO_Z_UP,g,g);let R=uke(r,i,yMe),A=Oo.getSkirtVertexCount(R.edgeIndicesWest,R.edgeIndicesSouth,R.edgeIndicesEast,R.edgeIndicesNorth),W=R.positions,X=R.normals,Y=R.indices,D=W.length/3,k=D+A,O=Y.length,w=Oo.getSkirtIndexCountWithFilledCorners(A),z=k<=65535?Uint16Array:Uint32Array,H=new z(O+w);H.set(Y);let te=new z(R.edgeIndicesWest),K=new z(R.edgeIndicesSouth),$=new z(R.edgeIndicesEast),ee=new z(R.edgeIndicesNorth),de=new z(te).sort(),_e=new z(K).sort(),ue=new z($).sort(),Ce=new z(ee).sort(),Te=fi.geodeticLatitudeToMercatorAngle(V),Le=1/(fi.geodeticLatitudeToMercatorAngle(C)-Te),Xe=h.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,VMe),qe=h.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,CMe),je=new mr(m.center,void 0,void 0,void 0,void 0,i,o,u,t,n),_t=je.stride,Qe=new Float32Array(k*_t),Ee=0;for(let Rt=0;Rt=0?at=0:_o(ue,Rt,D5)>=0&&(at=1),_o(_e,Rt,D5)>=0?ft=0:_o(Ce,Rt,D5)>=0&&(ft=1);let Ai=M.fromElements(at,ft,EMe),En;if(i){let Ki=h.unpack(X,Rt*3,CA);Ki=I.multiplyByPointAsVector(g,Ki,CA),Ki=h.normalize(Ki,CA),En=cn.octEncode(Ki,LMe)}let Ni;o&&(Ni=(fi.geodeticLatitudeToMercatorAngle(vt)-Te)*Le);let fo;u&&(fo=f.geodeticSurfaceNormal(gn,WMe)),Ee=je.encode(Qe,Ee,gn,Ai,Wn,En,Ni,fo);let Yi=I.multiplyByPoint(N,gn,vMe);Xe=h.minimumByComponent(Yi,Xe,Xe),qe=h.maximumByComponent(Yi,qe,qe)}let He=new $a(h.clone(je.center,new h),Qe,H,O,D,s,a,y,le.clone(m,new le),h.clone(b,new h),_t,$t.clone(p,new $t),je,te,K,$,ee);return Nle(He,y,f,Xe,qe,P,N,c),Promise.resolve(He)};var FMe=new M,IMe=new M,PMe=new Array(6),XMe=new M,NMe=new M,YMe=new M,wMe=new h,MMe=new h,kMe=new h,UMe=new fe,DMe=new h,OMe=new fe,BMe=new fe,Wle=new h,zMe=new h,HMe=new h,KMe=new h,JMe=new h,jMe=new h,QMe=new h,qMe=new h,$Me=new I,eke=new I,vle=new M,tke=new M,nke=new h,ike=new le,oke=new $t,rke=new ou,Fle=new h,Ile=new M,ske=new M,Ple=new h,ake=new h;function cke(e){let t=e.meshes[0].primitives[0],n=e.accessors[t.attributes.POSITION],i=e.bufferViews[n.bufferView],o=n.count,r=i.extensions?i.extensions.EXT_meshopt_compression:void 0;if(r===void 0){let b=e.buffers[i.buffer].extras._pipeline.source;return new Float32Array(b.buffer,b.byteOffset+(i.byteOffset??0)+(n.byteOffset??0),o*3)}let s=e.buffers[r.buffer].extras._pipeline.source,a=new Uint8Array(s.buffer,s.byteOffset+(r.byteOffset??0)+(n.byteOffset??0),r.byteLength),c=r.byteStride,d=c===4?Uint8Array:Uint16Array,u=new d(o*4);uy.decodeVertexBuffer(new Uint8Array(u.buffer),o,c,a);let m=(1<=0&&(M.clone(v,p[m]),h.clone(F,b[m]),m++),V=v,C=F,G=P}if(m===0)break}a.length=m;for(let f=0;fe,a=i>e,c=o>e);let d=s+a+c,u,m,p,b,f,y;return d===1?s?(u=(e-n)/(i-n),m=(e-n)/(o-n),r.push(1),r.push(2),m!==1&&(r.push(-1),r.push(0),r.push(2),r.push(m)),u!==1&&(r.push(-1),r.push(0),r.push(1),r.push(u))):a?(p=(e-i)/(o-i),b=(e-i)/(n-i),r.push(2),r.push(0),b!==1&&(r.push(-1),r.push(1),r.push(0),r.push(b)),p!==1&&(r.push(-1),r.push(1),r.push(2),r.push(p))):c&&(f=(e-o)/(n-o),y=(e-o)/(i-o),r.push(0),r.push(1),y!==1&&(r.push(-1),r.push(2),r.push(1),r.push(y)),f!==1&&(r.push(-1),r.push(2),r.push(0),r.push(f))):d===2?!s&&n!==e?(b=(e-i)/(n-i),f=(e-o)/(n-o),r.push(0),r.push(-1),r.push(1),r.push(0),r.push(b),r.push(-1),r.push(2),r.push(0),r.push(f)):!a&&i!==e?(y=(e-o)/(i-o),u=(e-n)/(i-n),r.push(1),r.push(-1),r.push(2),r.push(1),r.push(y),r.push(-1),r.push(0),r.push(1),r.push(u)):!c&&o!==e&&(m=(e-n)/(o-n),p=(e-i)/(o-i),r.push(2),r.push(-1),r.push(0),r.push(2),r.push(m),r.push(-1),r.push(1),r.push(2),r.push(p)):d!==3&&(r.push(0),r.push(1),r.push(2)),r};B5.computeBarycentricCoordinates=function(e,t,n,i,o,r,s,a,c){let d=n-s,u=s-o,m=r-a,p=i-a,b=1/(m*d+u*p),f=t-a,y=e-s,_=(m*y+u*f)*b,S=(-p*y+d*f)*b,Z=1-_-S;return l(c)?(c.x=_,c.y=S,c.z=Z,c):new h(_,S,Z)};B5.computeLineSegmentLineSegmentIntersection=function(e,t,n,i,o,r,s,a,c){let d=(s-o)*(t-r)-(a-r)*(e-o),u=(n-e)*(t-r)-(i-t)*(e-o),m=(a-r)*(n-e)-(s-o)*(i-t);if(m===0)return;let p=d/m,b=u/m;if(p>=0&&p<=1&&b>=0&&b<=1)return l(c)||(c=new M),c.x=e+p*(n-e),c.y=t+p*(i-t),c};var Gh=B5;function X0(e){e=e??B.EMPTY_OBJECT,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._skirtHeight=e.skirtHeight,this._boundingSphere=le.clone(e.boundingSphere,new le),this._orientedBoundingBox=$t.clone(e.orientedBoundingBox,new $t),this._horizonOcclusionPoint=h.clone(e.horizonOcclusionPoint,new h),this._hasVertexNormals=e.requestVertexNormals??!1,this._hasWaterMask=e.requestWaterMask??!1,this._hasWebMercatorT=!0,this._credits=e.credits,this._childTileMask=e.childTileMask??15,this._gltf=e.gltf,this._mesh=void 0,this._waterMask=e.waterMask}Object.defineProperties(X0.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){return this._waterMask}}});X0.prototype.interpolateHeight=function(e,t,n){let i=this._mesh;return i===void 0?void 0:wle(i,e,t,n)};X0.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<1)throw new ge("Upsampling through more than one level at a time is not currently supported.");let p=n*.5,b=r*2!==c,f=s*2===d,y=o.tileXYToRectangle(c,d,u,new re),_=o.ellipsoid,S={isEastChild:b,isNorthChild:f,rectangle:y,ellipsoid:_,skirtHeight:p,parentVertices:t.vertices,parentIndices:t.indices,parentVertexCountWithoutSkirts:t.vertexCountWithoutSkirts,parentIndexCountWithoutSkirts:t.indexCountWithoutSkirts,parentMinimumHeight:t.minimumHeight,parentMaximumHeight:t.maximumHeight,parentEncoding:t.encoding};if(e){let V=WV.upsampleMesh(S),C=new P0({terrainMesh:V,skirtHeight:p,credits:i});return Promise.resolve(C)}let Z=Gke.scheduleTask(S);if(Z!==void 0)return Z.then(function(V){let C=mr.clone(V.encoding,new mr),G=C.stride,E=new Float32Array(V.verticesBuffer),v=E.length/G,F=V.vertexCountWithoutSkirts,P=v<=65535?Uint16Array:Uint32Array,N=new P(V.indicesBuffer),g=new P(V.westIndicesBuffer),R=new P(V.eastIndicesBuffer),A=new P(V.southIndicesBuffer),W=new P(V.northIndicesBuffer),X=V.indexCountWithoutSkirts,Y=V.minimumHeight,D=V.maximumHeight,k=h.clone(C.center,new h),O=le.clone(V.boundingSphere,new le),w=h.clone(V.horizonOcclusionPoint,new h),z=$t.clone(V.orientedBoundingBox,new $t),H=new $a(k,E,N,X,F,Y,D,y,O,w,G,z,C,g,A,R,W),te=new P0({terrainMesh:H,skirtHeight:p,credits:i});return Promise.resolve(te)})}var Ake=new M,Eke=new M,Lke=new M,Wke=new h;function wle(e,t,n,i){let o=L.clamp((n-t.west)/t.width,0,1),r=L.clamp((i-t.south)/t.height,0,1),{vertices:s,encoding:a,indices:c}=e;for(let d=0;d=_&&o<=S&&r>=Z&&r<=V){let C=Gh.computeBarycentricCoordinates(o,r,b.x,b.y,f.x,f.y,y.x,y.y,Wke);if(C.x>=0&&C.y>=0&&C.z>=0){let G=a.decodeHeight(s,u),E=a.decodeHeight(s,m),v=a.decodeHeight(s,p);return C.x*G+C.y*E+C.z*v}}}return 0}var RA=X0;var nsn=x(T(),1);var a8t=x(T(),1);function Ah(e){this._comparator=e.comparator,this._maximumLength=e.maximumLength,this._array=l(e.maximumLength)?new Array(e.maximumLength):[],this._length=0}Object.defineProperties(Ah.prototype,{length:{get:function(){return this._length}},maximumLength:{get:function(){return this._maximumLength},set:function(e){if(l(e)){for(;this._length>e;)this.removeMinimum();this._array.length=e}this._maximumLength=e}},internalArray:{get:function(){return this._array}},comparator:{get:function(){return this._comparator}}});Ah.prototype.clone=function(){let e=this._maximumLength,t=this._comparator,n=this._array,i=this._length,o=new Ah({comparator:t,maximumLength:e});o._length=i;for(let r=0;r=2&&(this._array[0]=this._array[e-1],kle(this,0)),this._array[e-1]=void 0,t};Ah.prototype.removeMaximum=function(){let e=this._length;if(e===0)return;this._length--;let t;if(e<=2)t=this._array[e-1];else{let n=hj(this,1,2)?1:2;t=this._array[n],this._array[n]=this._array[e-1],e>=4&&kle(this,n)}return this._array[e-1]=void 0,t};Ah.prototype.getMinimum=function(){if(this._length!==0)return this._array[0]};Ah.prototype.getMaximum=function(){let e=this._length;if(e!==0)return e<=2?this._array[e-1]:this._array[hj(this,1,2)?1:2]};function H5(e,t,n){let i=e._array,o=i[t];i[t]=i[n],i[n]=o}function GA(e,t,n){return e._comparator(e._array[t],e._array[n])<0}function hj(e,t,n){return e._comparator(e._array[t],e._array[n])>0}function Mle(e,t){if(t===0)return;let n=Math.floor(L.log2(t+1))%2===0,i=Math.floor((t-1)/2),o=GA(e,t,i);for(o!==n&&(H5(e,t,i),t=i);t>=3;){let r=Math.floor((t-3)/4);if(GA(e,t,r)!==o)break;H5(e,t,r),t=r}}function kle(e,t){let n=e._length,i=Math.floor(L.log2(t+1))%2===0,o;for(;(o=2*t+1)>10)+55296,(r&1023)+56320))}return t};function AA(e,t,n){return t<=e&&e<=n}function vke(e){let t=0,n=0,i=0,o=128,r=191,s=[],a=e.length;for(let c=0;c>3,r=i%8;n+=e[o]>>r&1}return n}Object.defineProperties(fj.prototype,{lengthBits:{get:function(){return this._lengthBits}},availableCount:{get:function(){return this._availableCount}}});fj.prototype.getBit=function(e){if(l(this._constant))return this._constant;let t=e>>3,n=e%8;return(this._bitstream[t]>>n&1)===1};var vV=fj;var Z8t=x(T(),1);function Y0(e){e=e??B.EMPTY_OBJECT;let t=e.metadataTable,n=e.class,i=e.entityId,o=e.propertyTableJson;this._class=n,this._metadataTable=t,this._entityId=i,this._extensions=o.extensions,this._extras=o.extras}Object.defineProperties(Y0.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Y0.prototype.hasProperty=function(e){return this._metadataTable.hasProperty(e)};Y0.prototype.hasPropertyBySemantic=function(e){return this._metadataTable.hasPropertyBySemantic(e)};Y0.prototype.getPropertyIds=function(e){return this._metadataTable.getPropertyIds(e)};Y0.prototype.getProperty=function(e){return this._metadataTable.getProperty(this._entityId,e)};Y0.prototype.setProperty=function(e,t){return this._metadataTable.setProperty(this._entityId,e,t)};Y0.prototype.getPropertyBySemantic=function(e){return this._metadataTable.getPropertyBySemantic(this._entityId,e)};Y0.prototype.setPropertyBySemantic=function(e,t){return this._metadataTable.setPropertyBySemantic(this._entityId,e,t)};var FV=Y0;var C8t=x(T(),1);var EA={QUADTREE:"QUADTREE",OCTREE:"OCTREE"};EA.getBranchingFactor=function(e){switch(e){case EA.OCTREE:return 8;case EA.QUADTREE:return 4}};Object.freeze(EA);var Es=EA;var P8t=x(T(),1);var L8t=x(T(),1);function tc(){}Object.defineProperties(tc.prototype,{class:{get:function(){ge.throwInstantiationError()}}});tc.prototype.hasProperty=function(e){ge.throwInstantiationError()};tc.prototype.hasPropertyBySemantic=function(e){ge.throwInstantiationError()};tc.prototype.getPropertyIds=function(e){ge.throwInstantiationError()};tc.prototype.getProperty=function(e){ge.throwInstantiationError()};tc.prototype.setProperty=function(e,t){ge.throwInstantiationError()};tc.prototype.getPropertyBySemantic=function(e){ge.throwInstantiationError()};tc.prototype.setPropertyBySemantic=function(e,t){ge.throwInstantiationError()};tc.hasProperty=function(e,t,n){if(l(t[e]))return!0;let i=n.properties;if(!l(i))return!1;let o=i[e];return!!(l(o)&&l(o.default))};tc.hasPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!l(i))return!1;let o=i[e];return l(o)};tc.getPropertyIds=function(e,t,n){n=l(n)?n:[],n.length=0;for(let o in e)e.hasOwnProperty(o)&&l(e[o])&&n.push(o);let i=t.properties;if(l(i))for(let o in i)i.hasOwnProperty(o)&&!l(e[o])&&l(i[o].default)&&n.push(o);return n};tc.getProperty=function(e,t,n){let i=n.properties[e],o=t[e];Array.isArray(o)&&(o=o.slice());let r=!0;if(o=i.handleNoData(o),!l(o)&&l(i.default))return o=Je(i.default,!0),i.unpackVectorAndMatrixTypes(o,r);if(l(o))return o=i.normalize(o),o=i.applyValueTransform(o),i.unpackVectorAndMatrixTypes(o,r)};tc.setProperty=function(e,t,n,i){if(!l(n[e]))return!1;Array.isArray(t)&&(t=t.slice());let o,r=i.properties;return l(r)&&(o=r[e]),l(o)&&(t=o.packVectorAndMatrixTypes(t,!0),t=o.unapplyValueTransform(t),t=o.unnormalize(t)),n[e]=t,!0};tc.getPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!l(i))return;let o=i[e];if(l(o))return tc.getProperty(o.id,t,n)};tc.setPropertyBySemantic=function(e,t,n,i){let o=i.propertiesBySemantic;if(!l(o))return!1;let r=i.propertiesBySemantic[e];return l(r)?tc.setProperty(r.id,t,n,i):!1};var Kn=tc;function w0(e){e=e??B.EMPTY_OBJECT;let t=e.subtreeMetadata,n=e.class,i=l(t.properties)?t.properties:{};this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(w0.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});w0.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};w0.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};w0.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};w0.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};w0.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};w0.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};w0.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var LA=w0;var I7t=x(T(),1);var G7t=x(T(),1);var Y8t=x(T(),1);var Ule={};function WA(e,t){l(Ule[e])||(Ule[e]=!0,console.warn(t??e))}WA.geometryOutlines="Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0.";WA.geometryZIndex="Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored";WA.geometryHeightReference="Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored";WA.geometryExtrudedHeightReference="Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored";var gt=WA;var O8t=x(T(),1);var un={INT8:"INT8",UINT8:"UINT8",INT16:"INT16",UINT16:"UINT16",INT32:"INT32",UINT32:"UINT32",INT64:"INT64",UINT64:"UINT64",FLOAT32:"FLOAT32",FLOAT64:"FLOAT64"},Oc={INTEGER:"int",UNSIGNED_INTEGER:"uint",FLOAT:"float"};un.typeInfo={INT8:{vectorCompatible:!0,size:1,maximumValue:127,minimumValue:-128,category:Oc.INTEGER},UINT8:{vectorCompatible:!0,size:1,maximumValue:255,minimumValue:0,category:Oc.UNSIGNED_INTEGER},INT16:{vectorCompatible:!0,size:2,maximumValue:32767,minimumValue:-32768,category:Oc.INTEGER},UINT16:{vectorCompatible:!0,size:2,maximumValue:65535,minimumValue:0,category:Oc.UNSIGNED_INTEGER},INT32:{vectorCompatible:!0,size:4,maximumValue:2147483647,minimumValue:-2147483648,category:Oc.INTEGER},UINT32:{vectorCompatible:!0,size:4,maximumValue:4294967295,minimumValue:0,category:Oc.UNSIGNED_INTEGER},INT64:{vectorCompatible:!1,size:8,maximumValue:BigInt("9223372036854775807"),minimumValue:BigInt("-9223372036854775808"),category:Oc.INTEGER,downcastFunction:e=>un.clampToLimits(e,un.INT32)},UINT64:{vectorCompatible:!1,size:8,maximumValue:BigInt("18446744073709551615"),minimumValue:BigInt(0),category:Oc.UNSIGNED_INTEGER,downcastFunction:e=>un.clampToLimits(e,un.UINT32)},FLOAT32:{vectorCompatible:!0,size:4,maximumValue:34028234663852886e22,minimumValue:-34028234663852886e22,category:Oc.FLOAT},FLOAT64:{vectorCompatible:!0,size:8,maximumValue:Number.MAX_VALUE,minimumValue:-Number.MAX_VALUE,category:Oc.FLOAT,downcastFunction:e=>Math.fround(e)}};un.getMinimum=function(e){return un.typeInfo[e].minimumValue};un.getMaximum=function(e){return un.typeInfo[e].maximumValue};un.isIntegerType=function(e){return un.typeInfo[e].category!==Oc.FLOAT};un.isUnsignedIntegerType=function(e){return un.typeInfo[e].category===Oc.UNSIGNED_INTEGER};un.isVectorCompatible=function(e){return un.typeInfo[e].vectorCompatible};un.category=function(e){return un.typeInfo[e].category};un.gpuComponentType=function(e){switch(e){case un.INT64:return"INT32";case un.UINT64:return"UINT32";case un.FLOAT64:return"FLOAT32";default:return e}};un.normalize=function(e,t){return Math.max(Number(e)/Number(un.getMaximum(t)),-1)};un.unnormalize=function(e,t){let n=un.getMaximum(t),i=un.isUnsignedIntegerType(t)?0:-n;return e=L.sign(e)*Math.round(Math.abs(e)*Number(n)),(t===un.INT64||t===un.UINT64)&&hn.supportsBigInt()&&(e=BigInt(e)),e>n?n:er?i:Number(e)}return Math.max(n,Math.min(i,e))};un.downcastFunction=function(e){let n=un.typeInfo[e].downcastFunction;return l(n)?n:i=>i};un.fromComponentDatatype=function(e){switch(e){case J.BYTE:return un.INT8;case J.UNSIGNED_BYTE:return un.UINT8;case J.SHORT:return un.INT16;case J.UNSIGNED_SHORT:return un.UINT16;case J.INT:return un.INT32;case J.UNSIGNED_INT:return un.UINT32;case J.FLOAT:return un.FLOAT32;case J.DOUBLE:return un.FLOAT64}};un.toComponentDatatype=function(e){switch(e){case un.INT8:return J.BYTE;case un.UINT8:return J.UNSIGNED_BYTE;case un.INT16:return J.SHORT;case un.UINT16:return J.UNSIGNED_SHORT;case un.INT32:return J.INT;case un.UINT32:return J.UNSIGNED_INT;case un.FLOAT32:return J.FLOAT;case un.FLOAT64:return J.DOUBLE}};un.getDataViewAccessors=function(e,t){return{[un.UINT8]:{get:e.getUint8.bind(e),set:e.setUint8.bind(e)},[un.INT8]:{get:e.getInt8.bind(e),set:e.setInt8.bind(e)},[un.UINT16]:{get:i=>e.getUint16(i,!0),set:(i,o)=>e.setUint16(i,o,!0)},[un.INT16]:{get:i=>e.getInt16(i,!0),set:(i,o)=>e.setInt16(i,o,!0)},[un.UINT32]:{get:i=>e.getUint32(i,!0),set:(i,o)=>e.setUint32(i,o,!0)},[un.INT32]:{get:i=>e.getInt32(i,!0),set:(i,o)=>e.setInt32(i,o,!0)},[un.FLOAT32]:{get:i=>e.getFloat32(i,!0),set:(i,o)=>e.setFloat32(i,o,!0)},[un.FLOAT64]:{get:i=>e.getFloat64(i,!0),set:(i,o)=>e.setFloat64(i,o,!0)},[un.UINT64]:{get:i=>e.getBigUint64(i,!0),set:(i,o)=>e.setBigUint64(i,BigInt(o),!0)},[un.INT64]:{get:i=>e.getBigInt64(i,!0),set:(i,o)=>e.setBigInt64(i,BigInt(o),!0)}}[t]};Object.freeze(un);var Pt=un;var u7t=x(T(),1);var q8t=x(T(),1);var er={SCALAR:"SCALAR",VEC2:"VEC2",VEC3:"VEC3",VEC4:"VEC4",MAT2:"MAT2",MAT3:"MAT3",MAT4:"MAT4",BOOLEAN:"BOOLEAN",STRING:"STRING",ENUM:"ENUM"};er.isVectorType=function(e){switch(e){case er.VEC2:case er.VEC3:case er.VEC4:return!0;default:return!1}};er.isMatrixType=function(e){switch(e){case er.MAT2:case er.MAT3:case er.MAT4:return!0;default:return!1}};er.getComponentCount=function(e){switch(e){case er.SCALAR:case er.STRING:case er.ENUM:case er.BOOLEAN:return 1;case er.VEC2:return 2;case er.VEC3:return 3;case er.VEC4:return 4;case er.MAT2:return 4;case er.MAT3:return 9;case er.MAT4:return 16}};er.getMathType=function(e){switch(e){case er.VEC2:return M;case er.VEC3:return h;case er.VEC4:return ce;case er.MAT2:return ji;case er.MAT3:return q;case er.MAT4:return I;default:return}};Object.freeze(er);var yt=er;function Br(e){e=e??B.EMPTY_OBJECT;let t=e.id,n=e.type,i=e.componentType,o=e.enumType,r=l(i)&&(e.normalized??!1)&&Pt.isIntegerType(i);this._id=t,this._name=e.name,this._description=e.description,this._semantic=e.semantic,this._isLegacyExtension=e.isLegacyExtension,this._type=n,this._componentType=i,this._enumType=o,this._valueType=l(o)?o.valueType:i,this._isArray=e.isArray??!1,this._isVariableLengthArray=e.isVariableLengthArray??!1,this._arrayLength=e.arrayLength,this._min=Je(e.min,!0),this._max=Je(e.max,!0),this._normalized=r;let s=Je(e.offset,!0),a=Je(e.scale,!0),c=l(s)||l(a),d=!0;l(s)||(s=this.expandConstant(0,d)),l(a)||(a=this.expandConstant(1,d)),this._offset=s,this._scale=a,this._hasValueTransform=c,this._noData=Je(e.noData,!0),this._default=Je(e.default,!0),this._required=e.required??!0,this._extras=Je(e.extras,!0),this._extensions=Je(e.extensions,!0)}Br.fromJson=function(e){e=e??B.EMPTY_OBJECT;let t=e.id,n=e.property,i=Xke(n),o=Nke(n,e.enums),r;return l(i)?i?r=l(n.optional)?!n.optional:!0:r=n.required??!1:r=!1,new Br({id:t,type:o.type,componentType:o.componentType,enumType:o.enumType,isArray:o.isArray,isVariableLengthArray:o.isVariableLengthArray,arrayLength:o.arrayLength,normalized:n.normalized,min:n.min,max:n.max,offset:n.offset,scale:n.scale,noData:n.noData,default:n.default,required:r,name:n.name,description:n.description,semantic:n.semantic,extras:n.extras,extensions:n.extensions,isLegacyExtension:i})};Object.defineProperties(Br.prototype,{id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},type:{get:function(){return this._type}},enumType:{get:function(){return this._enumType}},componentType:{get:function(){return this._componentType}},valueType:{get:function(){return this._valueType}},isArray:{get:function(){return this._isArray}},isVariableLengthArray:{get:function(){return this._isVariableLengthArray}},arrayLength:{get:function(){return this._arrayLength}},normalized:{get:function(){return this._normalized}},max:{get:function(){return this._max}},min:{get:function(){return this._min}},noData:{get:function(){return this._noData}},default:{get:function(){return this._default}},required:{get:function(){return this._required}},semantic:{get:function(){return this._semantic}},hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});function Xke(e){if(e.type==="ARRAY")return!0;let t=e.type;if(t===yt.SCALAR||yt.isMatrixType(t)||yt.isVectorType(t))return!1;if(l(Pt[t]))return!0;if(l(e.noData)||l(e.scale)||l(e.offset)||l(e.required)||l(e.count)||l(e.array)||l(e.optional))return!1}function Nke(e,t){let n=e.type,i=e.componentType,o=n==="ARRAY",r,s,a;o?(r=!0,s=e.componentCount,a=!l(s)):e.array?(r=!0,s=e.count,a=!l(e.count)):(r=!1,s=void 0,a=!1);let c;if(l(e.enumType)&&(c=t[e.enumType]),n===yt.ENUM)return{type:n,componentType:void 0,enumType:c,valueType:c.valueType,isArray:r,isVariableLengthArray:a,arrayLength:s};if(o&&i===yt.ENUM)return{type:i,componentType:void 0,enumType:c,valueType:c.valueType,isArray:r,isVariableLengthArray:a,arrayLength:s};if(n===yt.SCALAR||yt.isMatrixType(n)||yt.isVectorType(n))return{type:n,componentType:i,enumType:void 0,valueType:i,isArray:r,isVariableLengthArray:a,arrayLength:s};if(n===yt.BOOLEAN||n===yt.STRING)return{type:n,componentType:void 0,enumType:void 0,valueType:void 0,isArray:r,isVariableLengthArray:a,arrayLength:s};if(o&&(i===yt.BOOLEAN||i===yt.STRING))return{type:i,componentType:void 0,enumType:void 0,valueType:void 0,isArray:r,isVariableLengthArray:a,arrayLength:s};if(l(i)&&l(Pt[i]))return{type:yt.SCALAR,componentType:i,enumType:void 0,valueType:i,isArray:r,isVariableLengthArray:a,arrayLength:s};if(l(Pt[n]))return{type:yt.SCALAR,componentType:n,enumType:void 0,valueType:n,isArray:r,isVariableLengthArray:a,arrayLength:s}}Br.prototype.normalize=function(e){return this._normalized?pj(e,this._valueType,Pt.normalize):e};Br.prototype.unnormalize=function(e){return this._normalized?pj(e,this._valueType,Pt.unnormalize):e};Br.prototype.applyValueTransform=function(e){return!this._hasValueTransform||this._isVariableLengthArray?e:Br.valueTransformInPlace(e,this._offset,this._scale,Pt.applyValueTransform)};Br.prototype.unapplyValueTransform=function(e){return!this._hasValueTransform||this._isVariableLengthArray?e:Br.valueTransformInPlace(e,this._offset,this._scale,Pt.unapplyValueTransform)};Br.prototype.expandConstant=function(e,t){t=t??!1;let n=this._isArray,i=this._arrayLength,o=yt.getComponentCount(this._type),r=n&&o>1;if(!n&&o===1)return e;if(!n)return new Array(o).fill(e);if(!r)return new Array(i).fill(e);if(!t)return new Array(this._arrayLength*o).fill(e);let s=new Array(o).fill(e);return new Array(this._arrayLength).fill(s)};Br.prototype.handleNoData=function(e){let t=this._noData;if(!l(t))return e;if(!zle(e,t))return e};function zle(e,t){if(!Array.isArray(e))return e===t;if(!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n1;return l(n)?t&&r?e.map(function(s){return n.unpack(s)}):i?n.unpackArray(e):n.unpack(e):e};Br.prototype.packVectorAndMatrixTypes=function(e,t){t=t??!1;let n=yt.getMathType(this._type),i=this._isArray,o=yt.getComponentCount(this._type),r=i&&o>1;return l(n)?t&&r?e.map(function(s){return n.pack(s,[])}):i?n.packArray(e,[]):n.pack(e,[]):e};Br.prototype.validate=function(e){if(!(!l(e)&&l(this._default)))return this._required&&!l(e)?"required property must have a value":this._isArray?Yke(this,e):Hle(this,e)};function Yke(e,t){if(!Array.isArray(t))return`value ${t} must be an array`;let n=t.length;if(!e._isVariableLengthArray&&n!==e._arrayLength)return"Array length does not match property.arrayLength";for(let i=0;i1?Dle(e,t,n):void 0}if(ePt.getMaximum(t))return Dle(e,t,n)}function Ble(e,t){return`value ${e} of type ${t} must be finite`}function pj(e,t,n){if(!Array.isArray(e))return n(e,t);for(let i=0;ie)};var bj=[void 0,"float","vec2","vec3","vec4"],Jle=[void 0,"int","ivec2","ivec3","ivec4"],Bke=[void 0,"uint","uvec2","uvec3","uvec4"],zke={[Oc.FLOAT]:"uintBitsToFloat",[Oc.INTEGER]:"int",[Oc.UNSIGNED_INTEGER]:""};Br.prototype.getGlslTypeWebGL1=function(){let e=yt.getComponentCount(this.type);return this.isArray&&(e=this.arrayLength),this.normalized?bj[e]:Jle[e]};Br.prototype.getGlslType=function(){let e=this.valueType,t=yt.getComponentCount(this.type),n=this.isArray?this.arrayLength:1;return t*=n,!Pt.isIntegerType(e)||this.normalized?bj[t]:Pt.isUnsignedIntegerType(e)?Bke[t]:Jle[t]};Br.prototype.unpackTextureInShader=function(e,t,n,i){let o=this.getGlslType(),r=Pt.gpuComponentType(this.valueType),s=t.length,a=this.type,c=yt.getComponentCount(a)*(this.isArray?this.arrayLength:1),d=Math.floor(s/c),u=`${n}_rawChannels`,m=`${n}_rawBits`,p=`${n}_unpackedValue`,b=`${o} ${p};`,f=`uint ${m};`;i.push(b),i.push(f);let y=`${bj[s]} ${u} = ${e};`;i.push(y);let _=zke[Pt.category(r)],S=c>1;for(let Z=0;Z1?`.${V}`:"",G=`${m} = czm_unpackTexture(${u}${C});`,E="";S&&(E=`[${Z}]`);let v="",F="";if(this.normalized){let N=Pt.getMaximum(r);v=` * ${1/Number(N)}`,F="float"}let P=`${p}${E} = ${F}(${_}(${m}))${v};`;i.push(G),i.push(P)}return p};Br.prototype.unpackTextureInShaderWebGL1=function(e){return this.normalized?e:`${this.getGlslTypeWebGL1()}(255.0 * ${e})`};var hp=Br;var f7t=x(T(),1);function Hke(e,t){if(!l(t))return;let n=t.length;if(n===0)return;let i=e.length;e.length+=n;for(let o=0;o>3,i=e%8;return(t.typedArray[n]>>i&1)===1}function qke(e,t,n){let i=e>>3,o=e%8;n?t.typedArray[i]|=1<0,s=!0;for(let a=0;a<8;++a){let c=n.getUint8(i+a);r&&(s?c!==0&&(c=~(c-1)&255,s=!1):c=~c&255),o+=c*Math.pow(256,a)}return r&&(o=-o),o}function e9e(e,t){let n=t.dataView,i=e*8,o=BigInt(0),r=(n.getUint8(i+7)&128)>0,s=!0;for(let a=0;a<8;++a){let c=n.getUint8(i+a);r&&(s?c!==0&&(c=~(c-1)&255,s=!1):c=~c&255),o+=BigInt(c)*(BigInt(1)<{e._error=n}),e._decoderTaskProcessor=t}return e._decoderTaskProcessor}static decodePointCloud(t){let n=e._getDecoderTaskProcessor();if(l(e._error))throw e._error;if(e._taskProcessorReady)return n.scheduleTask(t,[t.buffer.buffer])}static decodeBufferView(t){let n=e._getDecoderTaskProcessor();if(l(e._error))throw e._error;if(e._taskProcessorReady)return n.scheduleTask(t,[t.array.buffer])}};LT._maxDecodingConcurrency=Math.max(hn.hardwareConcurrency-1,1);LT._decoderTaskProcessor=void 0;LT._taskProcessorReady=!1;LT._error=void 0;var M0=LT;var f6t=x(T(),1);var Xn={POSITION:"POSITION",NORMAL:"NORMAL",TANGENT:"TANGENT",TEXCOORD:"TEXCOORD",COLOR:"COLOR",JOINTS:"JOINTS",WEIGHTS:"WEIGHTS",FEATURE_ID:"_FEATURE_ID",SCALE:"KHR_gaussian_splatting:SCALE",ROTATION:"KHR_gaussian_splatting:ROTATION",CUMULATIVE_DISTANCE:"BENTLEY_materials_line_style:CUMULATIVE_DISTANCE"};function h9e(e){switch(e){case Xn.POSITION:return"positionMC";case Xn.NORMAL:return"normalMC";case Xn.TANGENT:return"tangentMC";case Xn.TEXCOORD:return"texCoord";case Xn.COLOR:return"color";case Xn.JOINTS:return"joints";case Xn.WEIGHTS:return"weights";case Xn.FEATURE_ID:return"featureId";case Xn.SCALE:return"scale";case Xn.ROTATION:return"rotation";case Xn.CUMULATIVE_DISTANCE:return"cumulativeDistance"}}Xn.hasSetIndex=function(e){switch(e){case Xn.POSITION:case Xn.NORMAL:case Xn.TANGENT:case Xn.CUMULATIVE_DISTANCE:return!1;case Xn.TEXCOORD:case Xn.COLOR:case Xn.JOINTS:case Xn.WEIGHTS:case Xn.FEATURE_ID:case Xn.SCALE:case Xn.ROTATION:return!0}};Xn.fromGltfSemantic=function(e){let t=e,i=/^(\w+)_\d+$/.exec(e);switch(i!==null&&(t=i[1]),t){case"POSITION":return Xn.POSITION;case"NORMAL":return Xn.NORMAL;case"TANGENT":return Xn.TANGENT;case"TEXCOORD":return Xn.TEXCOORD;case"COLOR":return Xn.COLOR;case"JOINTS":return Xn.JOINTS;case"WEIGHTS":return Xn.WEIGHTS;case"_FEATURE_ID":return Xn.FEATURE_ID;case"KHR_gaussian_splatting:SCALE":case"_SCALE":return Xn.SCALE;case"KHR_gaussian_splatting:ROTATION":case"_ROTATION":return Xn.ROTATION;case"BENTLEY_materials_line_style:CUMULATIVE_DISTANCE":return Xn.CUMULATIVE_DISTANCE}};Xn.fromPntsSemantic=function(e){switch(e){case"POSITION":case"POSITION_QUANTIZED":return Xn.POSITION;case"RGBA":case"RGB":case"RGB565":return Xn.COLOR;case"NORMAL":case"NORMAL_OCT16P":return Xn.NORMAL;case"BATCH_ID":return Xn.FEATURE_ID}};Xn.getGlslType=function(e){switch(e){case Xn.POSITION:case Xn.NORMAL:case Xn.TANGENT:return"vec3";case Xn.TEXCOORD:return"vec2";case Xn.COLOR:return"vec4";case Xn.JOINTS:return"ivec4";case Xn.WEIGHTS:return"vec4";case Xn.FEATURE_ID:return"int";case Xn.SCALE:return"vec3";case Xn.ROTATION:return"vec4";case Xn.CUMULATIVE_DISTANCE:return"float";case Xn.OPACITY:return"float"}};Xn.getVariableName=function(e,t){let n=h9e(e);return l(t)&&(n+=`_${t}`),n};Object.freeze(Xn);var st=Xn;var Tj=class extends qi{constructor(t){super(),t=t??B.EMPTY_OBJECT;let n=t.resourceCache,i=t.gltf,o=t.primitive,r=t.draco,s=t.gltfResource,a=t.baseResource,c=t.cacheKey;this._resourceCache=n,this._gltfResource=s,this._baseResource=a,this._gltf=i,this._primitive=o,this._draco=r,this._cacheKey=c,this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodePromise=void 0,this._decodedData=void 0,this._state=Tt.UNLOADED,this._promise=void 0,this._dracoError=void 0}get cacheKey(){return this._cacheKey}get decodedData(){return this._decodedData}async load(){return l(this._promise)?this._promise:(this._state=Tt.LOADING,this._promise=f9e(this),this._promise)}process(t){if(this._state===Tt.READY)return!0;if(this._state!==Tt.PROCESSING||(l(this._dracoError)&&tde(this,this._dracoError),!l(this._bufferViewTypedArray))||l(this._decodePromise))return!1;let n=this._draco,i=this._primitive,o=this._gltf,r=o.bufferViews,s=n.bufferView,a=r[s],c=n.attributes,d=[];for(let p in i.attributes)if(i.attributes.hasOwnProperty(p)){let b=b9e(p);l(b)&&o.accessors[i.attributes[p]].componentType===J.FLOAT&&(d.includes(b)||d.push(b))}let u={array:new Uint8Array(this._bufferViewTypedArray),bufferView:a,compressedAttributes:c,dequantizeInShader:!0,attributesToSkipTransform:d},m=M0.decodeBufferView(u);if(!l(m))return!1;this._decodePromise=p9e(this,m)}unload(){l(this._bufferViewLoader)&&this._resourceCache.unload(this._bufferViewLoader),this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodedData=void 0,this._gltf=void 0,this._primitive=void 0}};async function f9e(e){let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._draco.bufferView,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoader=n,await n.load(),e.isDestroyed()?void 0:(e._bufferViewTypedArray=n.typedArray,e._state=Tt.PROCESSING,e)}catch(n){if(e.isDestroyed())return;tde(e,n)}}function tde(e,t){throw e.unload(),e._state=Tt.FAILED,e.getError("Failed to load Draco",t)}async function p9e(e,t){try{let n=await t;return e.isDestroyed()?void 0:(e.unload(),e._decodedData={indices:n.indexArray,vertexAttributes:n.attributeData},e._state=Tt.READY,e._baseResource)}catch(n){if(e.isDestroyed())return;e._dracoError=n}}var WT={};WT[st.POSITION]="POSITION";WT[st.NORMAL]="NORMAL";WT[st.COLOR]="COLOR";WT[st.TEXCOORD]="TEX_COORD";function b9e(e){for(let t in WT)if(WT.hasOwnProperty(t)&&e.startsWith(t))return WT[t]}var PV=Tj;var J6t=x(T(),1);var G6t=x(T(),1);function g9e(e){let{uint8Array:t,format:n,request:i}=e,o=e.flipY??!1,r=e.skipColorSpaceConversion??!1,s=new Blob([t],{type:n}),a;return ve.supportsImageBitmapOptions().then(function(c){return c?Promise.resolve(ve.createImageBitmapFromBlob(s,{flipY:o,premultiplyAlpha:!1,skipColorSpaceConversion:r})):(a=window.URL.createObjectURL(s),new ve({url:a,request:i}).fetchImage({flipY:o,skipColorSpaceConversion:r}))}).then(function(c){return l(a)&&window.URL.revokeObjectURL(a),c}).catch(function(c){return l(a)&&window.URL.revokeObjectURL(a),Promise.reject(c)})}var k0=g9e;var M6t=x(T(),1);var X6t=x(T(),1);var L6t=x(T(),1);function XV(e,t,n,i,o){this._format=e,this._datatype=t,this._width=n,this._height=i,this._buffer=o}Object.defineProperties(XV.prototype,{internalFormat:{get:function(){return this._format}},pixelDatatype:{get:function(){return this._datatype}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},bufferView:{get:function(){return this._buffer}},arrayBufferView:{get:function(){return this._buffer}}});XV.clone=function(e){if(l(e))return new XV(e._format,e._datatype,e._width,e._height,e._buffer)};XV.prototype.clone=function(){return XV.clone(this)};var IA=XV;function U0(){}U0._transcodeTaskProcessor=new Jn("transcodeKTX2",Number.POSITIVE_INFINITY);U0._readyPromise=void 0;function y9e(){let e=U0._transcodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/basis_transcoder.wasm"}).then(function(t){if(t)return U0._transcodeTaskProcessor;throw new ae("KTX2 transcoder could not be initialized.")});U0._readyPromise=e}U0.transcode=function(e,t){return l(U0._readyPromise)||y9e(),U0._readyPromise.then(function(n){let i=e;e instanceof ArrayBuffer&&(i=new Uint8Array(e));let o={supportedTargetFormats:t,ktx2Buffer:i};return n.scheduleTask(o,[i.buffer])}).then(function(n){let i=n.length,o=Object.keys(n[0]);for(let r=0;r-1)return i}return e.push(t),e.length-1}var la=v9e;var Yqt=x(T(),1);var Iqt=x(T(),1);function F9e(e,t){return l(e.extensionsUsed)&&e.extensionsUsed.indexOf(t)>=0}var vr=F9e;function on(){}on.objectLegacy=function(e,t){if(l(e)){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)){let i=e[n],o=t(i,n);if(l(o))return o}}};on.object=function(e,t){if(l(e)){let n=e.length;for(let i=0;i0)return i.byteStride}return J.getSizeInBytes(t.componentType)*su(t.type)}var _d=P9e;function X9e(e){ke.accessor(e,function(n){l(n.bufferView)&&(n.byteOffset=n.byteOffset??0)}),ke.bufferView(e,function(n){l(n.buffer)&&(n.byteOffset=n.byteOffset??0)}),ke.mesh(e,function(n){ke.meshPrimitive(n,function(i){if(i.mode=i.mode??ne.TRIANGLES,!l(i.material)){l(e.materials)||(e.materials=[]);let o={name:"default"};i.material=la(e.materials,o)}})}),ke.accessorContainingVertexAttributeData(e,function(n){let i=e.accessors[n],o=i.bufferView;if(i.normalized=i.normalized??!1,l(o)){let r=e.bufferViews[o];r.byteStride=_d(e,i),r.target=ne.ARRAY_BUFFER}}),ke.accessorContainingIndexData(e,function(n){let o=e.accessors[n].bufferView;if(l(o)){let r=e.bufferViews[o];r.target=ne.ELEMENT_ARRAY_BUFFER}}),ke.material(e,function(n){let i=n.extensions??{},o=i.KHR_materials_common;if(l(o)){let c=o.technique,d=l(o.values)?o.values:{};o.values=d,d.ambient=l(d.ambient)?d.ambient:[0,0,0,1],d.emission=l(d.emission)?d.emission:[0,0,0,1],d.transparency=d.transparency??1,c!=="CONSTANT"&&(d.diffuse=l(d.diffuse)?d.diffuse:[0,0,0,1],c!=="LAMBERT"&&(d.specular=l(d.specular)?d.specular:[0,0,0,1],d.shininess=d.shininess??0)),o.transparent=o.transparent??!1,o.doubleSided=o.doubleSided??!1;return}n.emissiveFactor=n.emissiveFactor??[0,0,0],n.alphaMode=n.alphaMode??"OPAQUE",n.doubleSided=n.doubleSided??!1,n.alphaMode==="MASK"&&(n.alphaCutoff=n.alphaCutoff??.5);let r=i.KHR_techniques_webgl;l(r)&&ke.materialValue(n,function(c){l(c.index)&&FT(c)}),FT(n.emissiveTexture),FT(n.normalTexture),FT(n.occlusionTexture);let s=n.pbrMetallicRoughness;l(s)&&(s.baseColorFactor=s.baseColorFactor??[1,1,1,1],s.metallicFactor=s.metallicFactor??1,s.roughnessFactor=s.roughnessFactor??1,FT(s.baseColorTexture),FT(s.metallicRoughnessTexture));let a=i.KHR_materials_pbrSpecularGlossiness;l(a)&&(a.diffuseFactor=a.diffuseFactor??[1,1,1,1],a.specularFactor=a.specularFactor??[1,1,1],a.glossinessFactor=a.glossinessFactor??1,FT(a.specularGlossinessTexture))}),ke.animation(e,function(n){ke.animationSampler(n,function(i){i.interpolation=i.interpolation??"LINEAR"})});let t=N9e(e);return ke.node(e,function(n,i){l(t[i])||l(n.translation)||l(n.rotation)||l(n.scale)?(n.translation=n.translation??[0,0,0],n.rotation=n.rotation??[0,0,0,1],n.scale=n.scale??[1,1,1]):n.matrix=n.matrix??[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}),ke.sampler(e,function(n){n.wrapS=n.wrapS??ne.REPEAT,n.wrapT=n.wrapT??ne.REPEAT}),l(e.scenes)&&!l(e.scene)&&(e.scene=0),e}function N9e(e){let t={};return ke.animation(e,function(n){ke.animationChannel(n,function(i){let o=i.target,r=o.node,s=o.path;(s==="translation"||s==="rotation"||s==="scale")&&(t[r]=!0)})}),t}function FT(e){l(e)&&(e.texCoord=e.texCoord??0)}var NA=X9e;var n$t=x(T(),1);function Y9e(e){return ke.shader(e,function(t){j5(t)}),ke.buffer(e,function(t){j5(t)}),ke.image(e,function(t){j5(t)}),j5(e),e}function j5(e){e.extras=l(e.extras)?e.extras:{},e.extras._pipeline=l(e.extras._pipeline)?e.extras._pipeline:{}}var fy=Y9e;var g$t=x(T(),1);var l$t=x(T(),1);var r$t=x(T(),1);function w9e(e,t){let n=e.extensionsRequired;if(l(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),n.length===0&&delete e.extensionsRequired}}var YA=w9e;function M9e(e,t){let n=e.extensionsUsed;if(l(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),YA(e,t),n.length===0&&delete e.extensionsUsed}}var IT=M9e;var k9e=4;function U9e(e){if(Lh(e)!=="glTF")throw new ae("File is not valid binary glTF");let n=cde(e,0,5),i=n[1];if(i!==1&&i!==2)throw new ae("Binary glTF version is not 1 or 2");return i===1?D9e(e,n):O9e(e,n)}function cde(e,t,n){let i=new DataView(e.buffer),o=new Array(n);for(let r=0;r0){let m=u.binary_glTF??u.KHR_binary_glTF;l(m)&&(m.extras._pipeline.source=d,delete m.uri)}return IT(c,"KHR_binary_glTF"),c}function O9e(e,t){let n=t[2],i=12,o,r;for(;i0){let a=s[0];a.extras._pipeline.source=r}}return o}var PT=U9e;var _$t=x(T(),1);function B9e(e){return ke.shader(e,function(t){Q5(t)}),ke.buffer(e,function(t){Q5(t)}),ke.image(e,function(t){Q5(t)}),Q5(e),e}function Q5(e){l(e.extras)&&(l(e.extras._pipeline)&&delete e.extras._pipeline,Object.keys(e.extras).length===0&&delete e.extras)}var wA=B9e;var $en=x(T(),1);var C$t=x(T(),1);function z9e(e,t){let n=e.extensionsUsed;l(n)||(n=[],e.extensionsUsed=n),la(n,t,!0)}var pm=z9e;var P$t=x(T(),1);var A$t=x(T(),1);function H9e(e){switch(e){case J.BYTE:return function(t,n,i,o,r){for(let s=0;s-1:!1}var Q9e=[ne.ZERO,ne.ONE,ne.SRC_COLOR,ne.ONE_MINUS_SRC_COLOR,ne.SRC_ALPHA,ne.ONE_MINUS_SRC_ALPHA,ne.DST_ALPHA,ne.ONE_MINUS_DST_ALPHA,ne.DST_COLOR,ne.ONE_MINUS_DST_COLOR];function q9e(e,t){if(!l(e))return t;for(let n=0;n<4;n++)if(Q9e.indexOf(e[n])===-1)return t;return e}function $9e(e){let t={},n={},i=e.techniques;return l(i)&&(ke.technique(e,function(o,r){let s=o.states;if(l(s)){let a=n[r]={};if(lde(s,ne.BLEND)){a.alphaMode="BLEND";let c=s.functions;l(c)&&(l(c.blendEquationSeparate)||l(c.blendFuncSeparate))&&(t[r]={blendEquation:c.blendEquationSeparate??J9e,blendFactors:q9e(c.blendFuncSeparate,j9e)})}lde(s,ne.CULL_FACE)||(a.doubleSided=!0),delete o.states}}),Object.keys(t).length>0&&(l(e.extensions)||(e.extensions={}),pm(e,"KHR_blend")),ke.material(e,function(o){if(l(o.technique)){let r=n[o.technique];ke.objectLegacy(r,function(a,c){o[c]=a});let s=t[o.technique];l(s)&&(l(o.extensions)||(o.extensions={}),o.extensions.KHR_blend=s)}})),e}var MA=$9e;var $$t=x(T(),1);var z$t=x(T(),1);function eUe(e,t){let n=e.extensionsRequired;l(n)||(n=[],e.extensionsRequired=n),la(n,t,!0),pm(e,t)}var kA=eUe;function tUe(e){let t=e.techniques,n={},i={},o={};if(l(t)){let r={programs:[],shaders:[],techniques:[]},s=e.glExtensionsUsed;delete e.glExtensionsUsed,ke.technique(e,function(a,c){let d={name:a.name,program:void 0,attributes:{},uniforms:{}},u;if(ke.techniqueAttribute(a,function(m,p){u=a.parameters[m],d.attributes[p]={semantic:u.semantic}}),ke.techniqueUniform(a,function(m,p){u=a.parameters[m],d.uniforms[p]={count:u.count,node:u.node,type:u.type,semantic:u.semantic,value:u.value},l(n[c])||(n[c]={}),n[c][m]=p}),l(o[a.program]))d.program=o[a.program];else{let m=e.programs[a.program],p={name:m.name,fragmentShader:void 0,vertexShader:void 0,glExtensions:s},b=e.shaders[m.fragmentShader];p.fragmentShader=la(r.shaders,b,!0);let f=e.shaders[m.vertexShader];p.vertexShader=la(r.shaders,f,!0),d.program=la(r.programs,p),o[a.program]=d.program}i[c]=la(r.techniques,d)}),r.techniques.length>0&&(l(e.extensions)||(e.extensions={}),e.extensions.KHR_techniques_webgl=r,pm(e,"KHR_techniques_webgl"),kA(e,"KHR_techniques_webgl"))}return ke.material(e,function(r){if(l(r.technique)){let s={technique:i[r.technique]};ke.objectLegacy(r.values,function(a,c){l(s.values)||(s.values={});let d=n[r.technique][c];l(d)&&(s.values[d]=a)}),l(r.extensions)||(r.extensions={}),r.extensions.KHR_techniques_webgl=s}delete r.technique,delete r.values}),delete e.techniques,delete e.programs,delete e.shaders,e}var UA=tUe;var den=x(T(),1);var oen=x(T(),1);function nUe(e,t){Do.typeOf.object("material",e),Do.defined("handler",t);let n=e.pbrMetallicRoughness;if(l(n)){if(l(n.baseColorTexture)){let r=n.baseColorTexture,s=t(r.index,r);if(l(s))return s}if(l(n.metallicRoughnessTexture)){let r=n.metallicRoughnessTexture,s=t(r.index,r);if(l(s))return s}}let{extensions:i}=e;if(l(i)){let r=i.KHR_materials_pbrSpecularGlossiness;if(l(r)){if(l(r.diffuseTexture)){let d=r.diffuseTexture,u=t(d.index,d);if(l(u))return u}if(l(r.specularGlossinessTexture)){let d=r.specularGlossinessTexture,u=t(d.index,d);if(l(u))return u}}let s=i.KHR_materials_specular;if(l(s)){let{specularTexture:d,specularColorTexture:u}=s;if(l(d)){let m=t(d.index,d);if(l(m))return m}if(l(u)){let m=t(u.index,u);if(l(m))return m}}let a=i.KHR_materials_transmission;if(l(a)&&l(a.transmissionTexture)){let d=a.transmissionTexture,u=t(d.index,d);if(l(u))return u}let c=i.KHR_materials_common;if(l(c)&&l(c.values)){let{diffuse:d,ambient:u,emission:m,specular:p}=c.values;if(l(d)&&l(d.index)){let b=t(d.index,d);if(l(b))return b}if(l(u)&&l(u.index)){let b=t(u.index,u);if(l(b))return b}if(l(m)&&l(m.index)){let b=t(m.index,m);if(l(b))return b}if(l(p)&&l(p.index)){let b=t(p.index,p);if(l(b))return b}}}let o=ke.materialValue(e,function(r){if(l(r.index)){let s=t(r.index,r);if(l(s))return s}});if(l(o))return o;if(l(e.emissiveTexture)){let r=e.emissiveTexture,s=t(r.index,r);if(l(s))return s}if(l(e.normalTexture)){let r=e.normalTexture,s=t(r.index,r);if(l(s))return s}if(l(e.occlusionTexture)){let r=e.occlusionTexture,s=t(r.index,r);if(l(s))return s}}var wV=nUe;var dde=["mesh","node","material","accessor","bufferView","buffer","texture","sampler","image"];function iUe(e,t){return t=t??dde,dde.forEach(function(n){t.indexOf(n)>-1&&rUe(e,n)}),e}var oUe={accessor:"accessors",buffer:"buffers",bufferView:"bufferViews",image:"images",node:"nodes",material:"materials",mesh:"meshes",sampler:"samplers",texture:"textures"};function rUe(e,t){let n=oUe[t],i=e[n];if(l(i)){let o=0,r=pp[t](e),s=i.length;for(let a=0;at&&o.attributes[c]--}),ke.meshPrimitiveTarget(o,function(a){ke.meshPrimitiveTargetAttribute(a,function(c,d){c>t&&a[d]--})});let r=o.indices;l(r)&&r>t&&o.indices--;let s=o.extensions;l(s)&&l(s.CESIUM_primitive_outline)&&s.CESIUM_primitive_outline.indices>t&&--s.CESIUM_primitive_outline.indices})}),ke.skin(e,function(i){l(i.inverseBindMatrices)&&i.inverseBindMatrices>t&&i.inverseBindMatrices--}),ke.animation(e,function(i){ke.animationSampler(i,function(o){l(o.input)&&o.input>t&&o.input--,l(o.output)&&o.output>t&&o.output--})})};fp.buffer=function(e,t){e.buffers.splice(t,1),ke.bufferView(e,function(i){l(i.buffer)&&i.buffer>t&&i.buffer--;let o=i.extensions;if(l(o)){let r=o.EXT_meshopt_compression;l(r)&&r.buffer>t&&r.buffer--;let s=o.KHR_meshopt_compression;l(s)&&s.buffer>t&&s.buffer--}})};fp.bufferView=function(e,t){if(e.bufferViews.splice(t,1),ke.accessor(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),ke.shader(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),ke.image(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),vr(e,"KHR_draco_mesh_compression")&&ke.mesh(e,function(i){ke.meshPrimitive(i,function(o){l(o.extensions)&&l(o.extensions.KHR_draco_mesh_compression)&&o.extensions.KHR_draco_mesh_compression.bufferView>t&&o.extensions.KHR_draco_mesh_compression.bufferView--})}),vr(e,"EXT_feature_metadata")){let o=e.extensions.EXT_feature_metadata.featureTables;for(let r in o)if(o.hasOwnProperty(r)){let a=o[r].properties;if(l(a)){for(let c in a)if(a.hasOwnProperty(c)){let d=a[c];l(d.bufferView)&&d.bufferView>t&&d.bufferView--,l(d.arrayOffsetBufferView)&&d.arrayOffsetBufferView>t&&d.arrayOffsetBufferView--,l(d.stringOffsetBufferView)&&d.stringOffsetBufferView>t&&d.stringOffsetBufferView--}}}}if(vr(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTables;if(l(o)){let r=o.length;for(let s=0;st&&u.values--,l(u.arrayOffsets)&&u.arrayOffsets>t&&u.arrayOffsets--,l(u.stringOffsets)&&u.stringOffsets>t&&u.stringOffsets--}}}}};fp.image=function(e,t){e.images.splice(t,1),ke.texture(e,function(i){l(i.source)&&i.source>t&&--i.source;let o=i.extensions;l(o)&&l(o.EXT_texture_webp)&&o.EXT_texture_webp.source>t?--i.extensions.EXT_texture_webp.source:l(o)&&l(o.KHR_texture_basisu)&&o.KHR_texture_basisu.source>t&&--i.extensions.KHR_texture_basisu.source})};fp.mesh=function(e,t){e.meshes.splice(t,1),ke.node(e,function(i){l(i.mesh)&&(i.mesh>t?i.mesh--:i.mesh===t&&delete i.mesh)})};fp.node=function(e,t){e.nodes.splice(t,1),ke.skin(e,function(i){l(i.skeleton)&&i.skeleton>t&&i.skeleton--,i.joints=i.joints.map(function(o){return o>t?o-1:o})}),ke.animation(e,function(i){ke.animationChannel(i,function(o){l(o.target)&&l(o.target.node)&&o.target.node>t&&o.target.node--})}),ke.technique(e,function(i){ke.techniqueUniform(i,function(o){l(o.node)&&o.node>t&&o.node--})}),ke.node(e,function(i){l(i.children)&&(i.children=i.children.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o}))}),ke.scene(e,function(i){i.nodes=i.nodes.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o})})};fp.material=function(e,t){e.materials.splice(t,1),ke.mesh(e,function(i){ke.meshPrimitive(i,function(o){l(o.material)&&o.material>t&&o.material--})})};fp.sampler=function(e,t){e.samplers.splice(t,1),ke.texture(e,function(i){l(i.sampler)&&i.sampler>t&&--i.sampler})};fp.texture=function(e,t){if(e.textures.splice(t,1),ke.material(e,function(i){wV(i,function(o,r){r.index>t&&--r.index})}),vr(e,"EXT_feature_metadata")){ke.mesh(e,function(r){ke.meshPrimitive(r,function(s){let a=s.extensions;if(l(a)&&l(a.EXT_feature_metadata)){let d=a.EXT_feature_metadata.featureIdTextures;if(l(d)){let u=d.length;for(let m=0;mt&&--b.index}}}})});let o=e.extensions.EXT_feature_metadata.featureTextures;for(let r in o)if(o.hasOwnProperty(r)){let a=o[r].properties;if(l(a)){for(let c in a)if(a.hasOwnProperty(c)){let u=a[c].texture;u.index>t&&--u.index}}}}if(vr(e,"EXT_mesh_features")&&ke.mesh(e,function(i){ke.meshPrimitive(i,function(o){let r=o.extensions;if(l(r)&&l(r.EXT_mesh_features)){let a=r.EXT_mesh_features.featureIds;if(l(a)){let c=a.length;for(let d=0;dt&&--u.texture.index}}}})}),vr(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTextures;if(l(o)){let r=o.length;for(let s=0;st&&--u.index}}}}};function pp(){}pp.accessor=function(e){let t={};return ke.mesh(e,function(n){ke.meshPrimitive(n,function(i){ke.meshPrimitiveAttribute(i,function(r){t[r]=!0}),ke.meshPrimitiveTarget(i,function(r){ke.meshPrimitiveTargetAttribute(r,function(s){t[s]=!0})});let o=i.indices;l(o)&&(t[o]=!0)})}),ke.skin(e,function(n){l(n.inverseBindMatrices)&&(t[n.inverseBindMatrices]=!0)}),ke.animation(e,function(n){ke.animationSampler(n,function(i){l(i.input)&&(t[i.input]=!0),l(i.output)&&(t[i.output]=!0)})}),vr(e,"EXT_mesh_gpu_instancing")&&ke.node(e,function(n){l(n.extensions)&&l(n.extensions.EXT_mesh_gpu_instancing)&&Object.keys(n.extensions.EXT_mesh_gpu_instancing.attributes).forEach(function(i){let o=n.extensions.EXT_mesh_gpu_instancing.attributes[i];t[o]=!0})}),vr(e,"CESIUM_primitive_outline")&&ke.mesh(e,function(n){ke.meshPrimitive(n,function(i){let o=i.extensions;if(l(o)&&l(o.CESIUM_primitive_outline)){let s=o.CESIUM_primitive_outline.indices;l(s)&&(t[s]=!0)}})}),t};pp.buffer=function(e){let t={};return ke.bufferView(e,function(n){l(n.buffer)&&(t[n.buffer]=!0);let i=n.extensions;if(l(i)){let o=i.EXT_meshopt_compression;l(o)&&(t[o.buffer]=!0);let r=i.KHR_meshopt_compression;l(r)&&(t[r.buffer]=!0)}}),t};pp.bufferView=function(e){let t={};if(ke.accessor(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),ke.shader(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),ke.image(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),vr(e,"KHR_draco_mesh_compression")&&ke.mesh(e,function(n){ke.meshPrimitive(n,function(i){l(i.extensions)&&l(i.extensions.KHR_draco_mesh_compression)&&(t[i.extensions.KHR_draco_mesh_compression.bufferView]=!0)})}),vr(e,"EXT_feature_metadata")){let i=e.extensions.EXT_feature_metadata.featureTables;for(let o in i)if(i.hasOwnProperty(o)){let s=i[o].properties;if(l(s)){for(let a in s)if(s.hasOwnProperty(a)){let c=s[a];l(c.bufferView)&&(t[c.bufferView]=!0),l(c.arrayOffsetBufferView)&&(t[c.arrayOffsetBufferView]=!0),l(c.stringOffsetBufferView)&&(t[c.stringOffsetBufferView]=!0)}}}}if(vr(e,"EXT_structural_metadata")){let i=e.extensions.EXT_structural_metadata.propertyTables;if(l(i)){let o=i.length;for(let r=0;r0&&(t[n.mesh]=!0)}}),t};function ude(e,t,n){let i=e.nodes[t];return l(i.mesh)||l(i.camera)||l(i.skin)||l(i.weights)||l(i.extras)||l(i.extensions)&&Object.keys(i.extensions).length!==0||l(n[t])?!1:!l(i.children)||i.children.filter(function(o){return!ude(e,o,n)}).length===0}pp.node=function(e){let t={};return ke.skin(e,function(n){l(n.skeleton)&&(t[n.skeleton]=!0),ke.skinJoint(n,function(i){t[i]=!0})}),ke.animation(e,function(n){ke.animationChannel(n,function(i){l(i.target)&&l(i.target.node)&&(t[i.target.node]=!0)})}),ke.technique(e,function(n){ke.techniqueUniform(n,function(i){l(i.node)&&(t[i.node]=!0)})}),ke.node(e,function(n,i){ude(e,i,t)||(t[i]=!0)}),t};pp.material=function(e){let t={};return ke.mesh(e,function(n){ke.meshPrimitive(n,function(i){l(i.material)&&(t[i.material]=!0)})}),t};pp.texture=function(e){let t={};if(ke.material(e,function(n){wV(n,function(i){t[i]=!0})}),vr(e,"EXT_feature_metadata")){ke.mesh(e,function(o){ke.meshPrimitive(o,function(r){let s=r.extensions;if(l(s)&&l(s.EXT_feature_metadata)){let c=s.EXT_feature_metadata.featureIdTextures;if(l(c)){let d=c.length;for(let u=0;u0)for(s.mesh=n.meshes[c[0]],t=1;t0&&l(s.skin)){let u=e.skins[s.skin];u.skeleton=n.nodes[c[0]]}delete s.skeletons}l(s.jointName)&&delete s.jointName}),ke.skin(e,function(s){l(s.inverseBindMatrices)&&(s.inverseBindMatrices=n.accessors[s.inverseBindMatrices]);let a=s.jointNames;if(l(a)){let c=[],d=a.length;for(t=0;t=0&&(a=r.substring(0,s),c=r.substring(s));let d,u=AUe[a];l(u)?(d=u+c,t[r]=d):l(GUe[a])||(d=`_${r}`,t[r]=d)}});for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o)){let r=t[o],s=i.attributes[o];l(s)&&(delete i.attributes[o],i.attributes[r]=s)}})}),ke.technique(e,function(n){ke.techniqueParameter(n,function(i){let o=t[i.semantic];l(o)&&(i.semantic=o)})})}function LUe(e){ke.camera(e,function(t){let n=t.perspective;if(l(n)){let i=n.aspectRatio;l(i)&&i===0&&delete n.aspectRatio;let o=n.yfov;l(o)&&o===0&&(n.yfov=1)}})}function Rj(e,t){return l(t.byteStride)&&t.byteStride!==0?t.byteStride:_d(e,t)}function WUe(e){ke.buffer(e,function(t){l(t.byteLength)||(t.byteLength=t.extras._pipeline.source.length)}),ke.accessor(e,function(t){let n=t.bufferView;if(l(n)){let i=e.bufferViews[n],o=Rj(e,t),r=t.byteOffset+t.count*o;i.byteLength=Math.max(i.byteLength??0,r)}})}function vUe(e){let t,n,i,o=e.bufferViews,r={};ke.accessorContainingVertexAttributeData(e,function(a){let c=e.accessors[a];l(c.bufferView)&&(r[c.bufferView]=!0)});let s={};ke.accessor(e,function(a){l(a.bufferView)&&(s[a.bufferView]=s[a.bufferView]??[],s[a.bufferView].push(a))});for(let a in s)if(Object.prototype.hasOwnProperty.call(s,a)){i=o[a];let c=s[a];c.sort(function(p,b){return p.byteOffset-b.byteOffset});let d=0,u=0,m=c.length;for(t=0;t=0;--r)if(i[r]===t){i.splice(r,1);return}}}),ke.node(e,function(n,i){if(l(n.children)){let o=n.children.indexOf(t);o>-1&&(n.children.splice(o,1),pde(n)&&bde(e,i))}}),delete e.nodes[t]}function IUe(e){return ke.node(e,function(t,n){pde(t)&&bde(e,n)}),e}function PUe(e){ke.animation(e,function(t){ke.animationSampler(t,function(n){let i=e.accessors[n.input];if(!l(i.min)||!l(i.max)){let o=XT(e,i);i.min=o.min,i.max=o.max}})})}function XUe(e){ke.accessor(e,function(t){if(l(t.min)||l(t.max)){let n=XT(e,t);l(t.min)&&(t.min=n.min),l(t.max)&&(t.max=n.max)}})}function NUe(e){e.asset=e.asset??{},e.asset.version="2.0",fde(e),gUe(e),IUe(e),yUe(e),xUe(e),_Ue(e),ZUe(e),WUe(e),vUe(e),FUe(e),PUe(e),XUe(e),VUe(e),CUe(e),RUe(e),EUe(e),zA(e),LUe(e),MA(e),UA(e),TUe(e)}var YUe=["u_tex","u_diffuse","u_emission","u_diffuse_tex"],wUe=["u_diffuse","u_diffuse_mat"];function Gj(e){e.pbrMetallicRoughness=l(e.pbrMetallicRoughness)?e.pbrMetallicRoughness:{},e.pbrMetallicRoughness.roughnessFactor=1,e.pbrMetallicRoughness.metallicFactor=0}function Aj(e){return l(e.index)}function Ej(e){return Array.isArray(e)&&e.length===4}function gde(e){let t=new Array(4);t[3]=e[3];for(let n=0;n<3;n++){let i=e[n];i<=.04045?t[n]=e[n]*.07739938080495357:t[n]=Math.pow((i+.055)*.9478672985781991,2.4)}return t}function MUe(e,t){t=t??{};let n=t.baseColorTextureNames??YUe,i=t.baseColorFactorNames??wUe;ke.material(e,function(o){ke.materialValue(o,function(r,s){n.indexOf(s)!==-1&&Aj(r)?(Gj(o),o.pbrMetallicRoughness.baseColorTexture=r):i.indexOf(s)!==-1&&Ej(r)&&(Gj(o),o.pbrMetallicRoughness.baseColorFactor=gde(r))})}),NT(e,"KHR_techniques_webgl"),NT(e,"KHR_blend")}function Cj(e,t){l(t)&&(Ej(t)?e.pbrMetallicRoughness.baseColorFactor=gde(t):Aj(t)&&(e.pbrMetallicRoughness.baseColorTexture=t))}function hde(e,t){l(t)&&(Ej(t)?e.emissiveFactor=t.slice(0,3):Aj(t)&&(e.emissiveTexture=t))}function kUe(e){ke.material(e,function(t){let n=(t.extensions??{}).KHR_materials_common;if(!l(n))return;let i=n.values??{},o=i.ambient,r=i.diffuse,s=i.emission,a=i.transparency,c=n.doubleSided,d=n.transparent;Gj(t),n.technique==="CONSTANT"?(pm(e,"KHR_materials_unlit"),t.extensions=l(t.extensions)?t.extensions:{},t.extensions.KHR_materials_unlit={},Cj(t,s),Cj(t,o)):(Cj(t,r),hde(t,o),hde(t,s)),l(c)&&(t.doubleSided=c),l(a)&&(l(t.pbrMetallicRoughness.baseColorFactor)?t.pbrMetallicRoughness.baseColorFactor[3]*=a:t.pbrMetallicRoughness.baseColorFactor=[1,1,1,a]),l(d)&&(t.alphaMode=d?"BLEND":"OPAQUE")}),NT(e,"KHR_materials_common")}var HA=uUe;var ptn=x(T(),1);var ntn=x(T(),1);var yde={FRONT:ne.FRONT,BACK:ne.BACK,FRONT_AND_BACK:ne.FRONT_AND_BACK};Object.freeze(yde);var ki=yde;function zc(){}zc.getError=function(e,t,n){let i=`Failed to load ${e}: ${t}`;l(n)&&l(n.message)&&(i+=` ${n.message}`);let o=new ae(i);return l(n)&&(o.stack=`Original stack: ${n.stack} Handler stack: ${o.stack}`),o};zc.getNodeTransform=function(e){return l(e.matrix)?e.matrix:I.fromTranslationQuaternionRotationScale(l(e.translation)?e.translation:h.ZERO,l(e.rotation)?e.rotation:Ye.IDENTITY,l(e.scale)?e.scale:h.ONE)};zc.getAttributeBySemantic=function(e,t,n){let i=e.attributes,o=i.length;for(let r=0;r1&&(n-=1),n*6<1?e+(t-e)*6*n:n*2<1?t:n*3<2?e+(t-e)*(2/3-n)*6:e}var xe=class e{constructor(t,n,i,o){this.red=t??1,this.green=n??1,this.blue=i??1,this.alpha=o??1}static fromCartesian4(t,n){return l(n)?(n.red=t.x,n.green=t.y,n.blue=t.z,n.alpha=t.w,n):new e(t.x,t.y,t.z,t.w)}static fromBytes(t,n,i,o,r){return t=e.byteToFloat(t??255),n=e.byteToFloat(n??255),i=e.byteToFloat(i??255),o=e.byteToFloat(o??255),l(r)?(r.red=t,r.green=n,r.blue=i,r.alpha=o,r):new e(t,n,i,o)}static fromAlpha(t,n,i){return l(i)?(i.red=t.red,i.green=t.green,i.blue=t.blue,i.alpha=n,i):new e(t.red,t.green,t.blue,n)}static fromRgba(t,n){return Ij[0]=t,e.fromBytes(O0[0],O0[1],O0[2],O0[3],n)}static fromHsl(t,n,i,o,r){t=(t??0)%1,n=n??0,i=i??0,o=o??1;let s=i,a=i,c=i;if(n!==0){let d;i<.5?d=i*(1+n):d=i+n-i*n;let u=2*i-d;s=vj(u,d,t+1/3),a=vj(u,d,t),c=vj(u,d,t-1/3)}return l(r)?(r.red=s,r.green=a,r.blue=c,r.alpha=o,r):new e(s,a,c,o)}static fromRandom(t,n){t=t??B.EMPTY_OBJECT;let i=t.red;if(!l(i)){let a=t.minimumRed??0,c=t.maximumRed??1;i=a+L.nextRandomNumber()*(c-a)}let o=t.green;if(!l(o)){let a=t.minimumGreen??0,c=t.maximumGreen??1;o=a+L.nextRandomNumber()*(c-a)}let r=t.blue;if(!l(r)){let a=t.minimumBlue??0,c=t.maximumBlue??1;r=a+L.nextRandomNumber()*(c-a)}let s=t.alpha;if(!l(s)){let a=t.minimumAlpha??0,c=t.maximumAlpha??1;s=a+L.nextRandomNumber()*(c-a)}return l(n)?(n.red=i,n.green=o,n.blue=r,n.alpha=s,n):new e(i,o,r,s)}static fromCssColorString(t,n){l(n)||(n=new e),t=t.trim();let i=e[t.toUpperCase()];if(l(i))return e.clone(i,n),n;let o=JUe.exec(t);return o!==null?(n.red=parseInt(o[1],16)/15,n.green=parseInt(o[2],16)/15,n.blue=parseInt(o[3],16)/15,n.alpha=parseInt(o[4]??"f",16)/15,n):(o=jUe.exec(t),o!==null?(n.red=parseInt(o[1],16)/255,n.green=parseInt(o[2],16)/255,n.blue=parseInt(o[3],16)/255,n.alpha=parseInt(o[4]??"ff",16)/255,n):(o=QUe.exec(t),o!==null?(n.red=parseFloat(o[1])/(o[1].substr(-1)==="%"?100:255),n.green=parseFloat(o[2])/(o[2].substr(-1)==="%"?100:255),n.blue=parseFloat(o[3])/(o[3].substr(-1)==="%"?100:255),n.alpha=parseFloat(o[4]??"1.0"),n):(o=qUe.exec(t),o!==null?e.fromHsl(parseFloat(o[1])/360,parseFloat(o[2])/100,parseFloat(o[3])/100,parseFloat(o[4]??"1.0"),n):(n=void 0,n))))}static pack(t,n,i){return i=i??0,n[i++]=t.red,n[i++]=t.green,n[i++]=t.blue,n[i]=t.alpha,n}static unpack(t,n,i){return n=n??0,l(i)||(i=new e),i.red=t[n++],i.green=t[n++],i.blue=t[n++],i.alpha=t[n],i}static byteToFloat(t){return t/255}static floatToByte(t){return t===1?255:t*256|0}static clone(t,n){if(l(t))return l(n)?(n.red=t.red,n.green=t.green,n.blue=t.blue,n.alpha=t.alpha,n):new e(t.red,t.green,t.blue,t.alpha)}static equals(t,n){return t===n||l(t)&&l(n)&&t.red===n.red&&t.green===n.green&&t.blue===n.blue&&t.alpha===n.alpha}static equalsArray(t,n,i){return t.red===n[i]&&t.green===n[i+1]&&t.blue===n[i+2]&&t.alpha===n[i+3]}clone(t){return e.clone(this,t)}equals(t){return e.equals(this,t)}equalsEpsilon(t,n){return this===t||l(t)&&Math.abs(this.red-t.red)<=n&&Math.abs(this.green-t.green)<=n&&Math.abs(this.blue-t.blue)<=n&&Math.abs(this.alpha-t.alpha)<=n}toString(){return`(${this.red}, ${this.green}, ${this.blue}, ${this.alpha})`}toCssColorString(){let t=e.floatToByte(this.red),n=e.floatToByte(this.green),i=e.floatToByte(this.blue);return this.alpha===1?`rgb(${t},${n},${i})`:`rgba(${t},${n},${i},${this.alpha})`}toCssHexString(){let t=e.floatToByte(this.red).toString(16);t.length<2&&(t=`0${t}`);let n=e.floatToByte(this.green).toString(16);n.length<2&&(n=`0${n}`);let i=e.floatToByte(this.blue).toString(16);if(i.length<2&&(i=`0${i}`),this.alpha<1){let o=e.floatToByte(this.alpha).toString(16);return o.length<2&&(o=`0${o}`),`#${t}${n}${i}${o}`}return`#${t}${n}${i}`}toBytes(t){let n=e.floatToByte(this.red),i=e.floatToByte(this.green),o=e.floatToByte(this.blue),r=e.floatToByte(this.alpha);return l(t)?(t[0]=n,t[1]=i,t[2]=o,t[3]=r,t):[n,i,o,r]}static bytesToRgba(t,n,i,o){return O0[0]=t,O0[1]=n,O0[2]=i,O0[3]=o,Ij[0]}toRgba(){return e.bytesToRgba(e.floatToByte(this.red),e.floatToByte(this.green),e.floatToByte(this.blue),e.floatToByte(this.alpha))}brighten(t,n){return t=1-t,n.red=1-(1-this.red)*t,n.green=1-(1-this.green)*t,n.blue=1-(1-this.blue)*t,n.alpha=this.alpha,n}darken(t,n){return t=1-t,n.red=this.red*t,n.green=this.green*t,n.blue=this.blue*t,n.alpha=this.alpha,n}withAlpha(t,n){return e.fromAlpha(this,t,n)}static add(t,n,i){return i.red=t.red+n.red,i.green=t.green+n.green,i.blue=t.blue+n.blue,i.alpha=t.alpha+n.alpha,i}static subtract(t,n,i){return i.red=t.red-n.red,i.green=t.green-n.green,i.blue=t.blue-n.blue,i.alpha=t.alpha-n.alpha,i}static multiply(t,n,i){return i.red=t.red*n.red,i.green=t.green*n.green,i.blue=t.blue*n.blue,i.alpha=t.alpha*n.alpha,i}static divide(t,n,i){return i.red=t.red/n.red,i.green=t.green/n.green,i.blue=t.blue/n.blue,i.alpha=t.alpha/n.alpha,i}static mod(t,n,i){return i.red=t.red%n.red,i.green=t.green%n.green,i.blue=t.blue%n.blue,i.alpha=t.alpha%n.alpha,i}static lerp(t,n,i,o){return o.red=L.lerp(t.red,n.red,i),o.green=L.lerp(t.green,n.green,i),o.blue=L.lerp(t.blue,n.blue,i),o.alpha=L.lerp(t.alpha,n.alpha,i),o}static multiplyByScalar(t,n,i){return i.red=t.red*n,i.green=t.green*n,i.blue=t.blue*n,i.alpha=t.alpha*n,i}static divideByScalar(t,n,i){return i.red=t.red/n,i.green=t.green/n,i.blue=t.blue/n,i.alpha=t.alpha/n,i}},Fj,Ij,O0;hn.supportsTypedArrays()&&(Fj=new ArrayBuffer(4),Ij=new Uint32Array(Fj),O0=new Uint8Array(Fj));var JUe=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,jUe=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,QUe=/^rgba?\s*\(\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i,qUe=/^hsla?\s*\(\s*([0-9.]+)\s*[,\s]+\s*([0-9.]+%)\s*[,\s]+\s*([0-9.]+%)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i;xe.packedLength=4;xe.ALICEBLUE=Object.freeze(xe.fromCssColorString("#F0F8FF"));xe.ANTIQUEWHITE=Object.freeze(xe.fromCssColorString("#FAEBD7"));xe.AQUA=Object.freeze(xe.fromCssColorString("#00FFFF"));xe.AQUAMARINE=Object.freeze(xe.fromCssColorString("#7FFFD4"));xe.AZURE=Object.freeze(xe.fromCssColorString("#F0FFFF"));xe.BEIGE=Object.freeze(xe.fromCssColorString("#F5F5DC"));xe.BISQUE=Object.freeze(xe.fromCssColorString("#FFE4C4"));xe.BLACK=Object.freeze(xe.fromCssColorString("#000000"));xe.BLANCHEDALMOND=Object.freeze(xe.fromCssColorString("#FFEBCD"));xe.BLUE=Object.freeze(xe.fromCssColorString("#0000FF"));xe.BLUEVIOLET=Object.freeze(xe.fromCssColorString("#8A2BE2"));xe.BROWN=Object.freeze(xe.fromCssColorString("#A52A2A"));xe.BURLYWOOD=Object.freeze(xe.fromCssColorString("#DEB887"));xe.CADETBLUE=Object.freeze(xe.fromCssColorString("#5F9EA0"));xe.CHARTREUSE=Object.freeze(xe.fromCssColorString("#7FFF00"));xe.CHOCOLATE=Object.freeze(xe.fromCssColorString("#D2691E"));xe.CORAL=Object.freeze(xe.fromCssColorString("#FF7F50"));xe.CORNFLOWERBLUE=Object.freeze(xe.fromCssColorString("#6495ED"));xe.CORNSILK=Object.freeze(xe.fromCssColorString("#FFF8DC"));xe.CRIMSON=Object.freeze(xe.fromCssColorString("#DC143C"));xe.CYAN=Object.freeze(xe.fromCssColorString("#00FFFF"));xe.DARKBLUE=Object.freeze(xe.fromCssColorString("#00008B"));xe.DARKCYAN=Object.freeze(xe.fromCssColorString("#008B8B"));xe.DARKGOLDENROD=Object.freeze(xe.fromCssColorString("#B8860B"));xe.DARKGRAY=Object.freeze(xe.fromCssColorString("#A9A9A9"));xe.DARKGREEN=Object.freeze(xe.fromCssColorString("#006400"));xe.DARKGREY=xe.DARKGRAY;xe.DARKKHAKI=Object.freeze(xe.fromCssColorString("#BDB76B"));xe.DARKMAGENTA=Object.freeze(xe.fromCssColorString("#8B008B"));xe.DARKOLIVEGREEN=Object.freeze(xe.fromCssColorString("#556B2F"));xe.DARKORANGE=Object.freeze(xe.fromCssColorString("#FF8C00"));xe.DARKORCHID=Object.freeze(xe.fromCssColorString("#9932CC"));xe.DARKRED=Object.freeze(xe.fromCssColorString("#8B0000"));xe.DARKSALMON=Object.freeze(xe.fromCssColorString("#E9967A"));xe.DARKSEAGREEN=Object.freeze(xe.fromCssColorString("#8FBC8F"));xe.DARKSLATEBLUE=Object.freeze(xe.fromCssColorString("#483D8B"));xe.DARKSLATEGRAY=Object.freeze(xe.fromCssColorString("#2F4F4F"));xe.DARKSLATEGREY=xe.DARKSLATEGRAY;xe.DARKTURQUOISE=Object.freeze(xe.fromCssColorString("#00CED1"));xe.DARKVIOLET=Object.freeze(xe.fromCssColorString("#9400D3"));xe.DEEPPINK=Object.freeze(xe.fromCssColorString("#FF1493"));xe.DEEPSKYBLUE=Object.freeze(xe.fromCssColorString("#00BFFF"));xe.DIMGRAY=Object.freeze(xe.fromCssColorString("#696969"));xe.DIMGREY=xe.DIMGRAY;xe.DODGERBLUE=Object.freeze(xe.fromCssColorString("#1E90FF"));xe.FIREBRICK=Object.freeze(xe.fromCssColorString("#B22222"));xe.FLORALWHITE=Object.freeze(xe.fromCssColorString("#FFFAF0"));xe.FORESTGREEN=Object.freeze(xe.fromCssColorString("#228B22"));xe.FUCHSIA=Object.freeze(xe.fromCssColorString("#FF00FF"));xe.GAINSBORO=Object.freeze(xe.fromCssColorString("#DCDCDC"));xe.GHOSTWHITE=Object.freeze(xe.fromCssColorString("#F8F8FF"));xe.GOLD=Object.freeze(xe.fromCssColorString("#FFD700"));xe.GOLDENROD=Object.freeze(xe.fromCssColorString("#DAA520"));xe.GRAY=Object.freeze(xe.fromCssColorString("#808080"));xe.GREEN=Object.freeze(xe.fromCssColorString("#008000"));xe.GREENYELLOW=Object.freeze(xe.fromCssColorString("#ADFF2F"));xe.GREY=xe.GRAY;xe.HONEYDEW=Object.freeze(xe.fromCssColorString("#F0FFF0"));xe.HOTPINK=Object.freeze(xe.fromCssColorString("#FF69B4"));xe.INDIANRED=Object.freeze(xe.fromCssColorString("#CD5C5C"));xe.INDIGO=Object.freeze(xe.fromCssColorString("#4B0082"));xe.IVORY=Object.freeze(xe.fromCssColorString("#FFFFF0"));xe.KHAKI=Object.freeze(xe.fromCssColorString("#F0E68C"));xe.LAVENDER=Object.freeze(xe.fromCssColorString("#E6E6FA"));xe.LAVENDAR_BLUSH=Object.freeze(xe.fromCssColorString("#FFF0F5"));xe.LAWNGREEN=Object.freeze(xe.fromCssColorString("#7CFC00"));xe.LEMONCHIFFON=Object.freeze(xe.fromCssColorString("#FFFACD"));xe.LIGHTBLUE=Object.freeze(xe.fromCssColorString("#ADD8E6"));xe.LIGHTCORAL=Object.freeze(xe.fromCssColorString("#F08080"));xe.LIGHTCYAN=Object.freeze(xe.fromCssColorString("#E0FFFF"));xe.LIGHTGOLDENRODYELLOW=Object.freeze(xe.fromCssColorString("#FAFAD2"));xe.LIGHTGRAY=Object.freeze(xe.fromCssColorString("#D3D3D3"));xe.LIGHTGREEN=Object.freeze(xe.fromCssColorString("#90EE90"));xe.LIGHTGREY=xe.LIGHTGRAY;xe.LIGHTPINK=Object.freeze(xe.fromCssColorString("#FFB6C1"));xe.LIGHTSEAGREEN=Object.freeze(xe.fromCssColorString("#20B2AA"));xe.LIGHTSKYBLUE=Object.freeze(xe.fromCssColorString("#87CEFA"));xe.LIGHTSLATEGRAY=Object.freeze(xe.fromCssColorString("#778899"));xe.LIGHTSLATEGREY=xe.LIGHTSLATEGRAY;xe.LIGHTSTEELBLUE=Object.freeze(xe.fromCssColorString("#B0C4DE"));xe.LIGHTYELLOW=Object.freeze(xe.fromCssColorString("#FFFFE0"));xe.LIME=Object.freeze(xe.fromCssColorString("#00FF00"));xe.LIMEGREEN=Object.freeze(xe.fromCssColorString("#32CD32"));xe.LINEN=Object.freeze(xe.fromCssColorString("#FAF0E6"));xe.MAGENTA=Object.freeze(xe.fromCssColorString("#FF00FF"));xe.MAROON=Object.freeze(xe.fromCssColorString("#800000"));xe.MEDIUMAQUAMARINE=Object.freeze(xe.fromCssColorString("#66CDAA"));xe.MEDIUMBLUE=Object.freeze(xe.fromCssColorString("#0000CD"));xe.MEDIUMORCHID=Object.freeze(xe.fromCssColorString("#BA55D3"));xe.MEDIUMPURPLE=Object.freeze(xe.fromCssColorString("#9370DB"));xe.MEDIUMSEAGREEN=Object.freeze(xe.fromCssColorString("#3CB371"));xe.MEDIUMSLATEBLUE=Object.freeze(xe.fromCssColorString("#7B68EE"));xe.MEDIUMSPRINGGREEN=Object.freeze(xe.fromCssColorString("#00FA9A"));xe.MEDIUMTURQUOISE=Object.freeze(xe.fromCssColorString("#48D1CC"));xe.MEDIUMVIOLETRED=Object.freeze(xe.fromCssColorString("#C71585"));xe.MIDNIGHTBLUE=Object.freeze(xe.fromCssColorString("#191970"));xe.MINTCREAM=Object.freeze(xe.fromCssColorString("#F5FFFA"));xe.MISTYROSE=Object.freeze(xe.fromCssColorString("#FFE4E1"));xe.MOCCASIN=Object.freeze(xe.fromCssColorString("#FFE4B5"));xe.NAVAJOWHITE=Object.freeze(xe.fromCssColorString("#FFDEAD"));xe.NAVY=Object.freeze(xe.fromCssColorString("#000080"));xe.OLDLACE=Object.freeze(xe.fromCssColorString("#FDF5E6"));xe.OLIVE=Object.freeze(xe.fromCssColorString("#808000"));xe.OLIVEDRAB=Object.freeze(xe.fromCssColorString("#6B8E23"));xe.ORANGE=Object.freeze(xe.fromCssColorString("#FFA500"));xe.ORANGERED=Object.freeze(xe.fromCssColorString("#FF4500"));xe.ORCHID=Object.freeze(xe.fromCssColorString("#DA70D6"));xe.PALEGOLDENROD=Object.freeze(xe.fromCssColorString("#EEE8AA"));xe.PALEGREEN=Object.freeze(xe.fromCssColorString("#98FB98"));xe.PALETURQUOISE=Object.freeze(xe.fromCssColorString("#AFEEEE"));xe.PALEVIOLETRED=Object.freeze(xe.fromCssColorString("#DB7093"));xe.PAPAYAWHIP=Object.freeze(xe.fromCssColorString("#FFEFD5"));xe.PEACHPUFF=Object.freeze(xe.fromCssColorString("#FFDAB9"));xe.PERU=Object.freeze(xe.fromCssColorString("#CD853F"));xe.PINK=Object.freeze(xe.fromCssColorString("#FFC0CB"));xe.PLUM=Object.freeze(xe.fromCssColorString("#DDA0DD"));xe.POWDERBLUE=Object.freeze(xe.fromCssColorString("#B0E0E6"));xe.PURPLE=Object.freeze(xe.fromCssColorString("#800080"));xe.RED=Object.freeze(xe.fromCssColorString("#FF0000"));xe.ROSYBROWN=Object.freeze(xe.fromCssColorString("#BC8F8F"));xe.ROYALBLUE=Object.freeze(xe.fromCssColorString("#4169E1"));xe.SADDLEBROWN=Object.freeze(xe.fromCssColorString("#8B4513"));xe.SALMON=Object.freeze(xe.fromCssColorString("#FA8072"));xe.SANDYBROWN=Object.freeze(xe.fromCssColorString("#F4A460"));xe.SEAGREEN=Object.freeze(xe.fromCssColorString("#2E8B57"));xe.SEASHELL=Object.freeze(xe.fromCssColorString("#FFF5EE"));xe.SIENNA=Object.freeze(xe.fromCssColorString("#A0522D"));xe.SILVER=Object.freeze(xe.fromCssColorString("#C0C0C0"));xe.SKYBLUE=Object.freeze(xe.fromCssColorString("#87CEEB"));xe.SLATEBLUE=Object.freeze(xe.fromCssColorString("#6A5ACD"));xe.SLATEGRAY=Object.freeze(xe.fromCssColorString("#708090"));xe.SLATEGREY=xe.SLATEGRAY;xe.SNOW=Object.freeze(xe.fromCssColorString("#FFFAFA"));xe.SPRINGGREEN=Object.freeze(xe.fromCssColorString("#00FF7F"));xe.STEELBLUE=Object.freeze(xe.fromCssColorString("#4682B4"));xe.TAN=Object.freeze(xe.fromCssColorString("#D2B48C"));xe.TEAL=Object.freeze(xe.fromCssColorString("#008080"));xe.THISTLE=Object.freeze(xe.fromCssColorString("#D8BFD8"));xe.TOMATO=Object.freeze(xe.fromCssColorString("#FF6347"));xe.TURQUOISE=Object.freeze(xe.fromCssColorString("#40E0D0"));xe.VIOLET=Object.freeze(xe.fromCssColorString("#EE82EE"));xe.WHEAT=Object.freeze(xe.fromCssColorString("#F5DEB3"));xe.WHITE=Object.freeze(xe.fromCssColorString("#FFFFFF"));xe.WHITESMOKE=Object.freeze(xe.fromCssColorString("#F5F5F5"));xe.YELLOW=Object.freeze(xe.fromCssColorString("#FFFF00"));xe.YELLOWGREEN=Object.freeze(xe.fromCssColorString("#9ACD32"));xe.TRANSPARENT=Object.freeze(new xe(0,0,0,0));var U=xe;var Jtn=x(T(),1),Fr={_maximumCombinedTextureImageUnits:0,_maximumCubeMapSize:0,_maximumFragmentUniformVectors:0,_maximumTextureImageUnits:0,_maximumRenderbufferSize:0,_maximumTextureSize:0,_maximum3DTextureSize:0,_maximumVaryingVectors:0,_maximumVertexAttributes:0,_maximumVertexTextureImageUnits:0,_maximumVertexUniformVectors:0,_minimumAliasedLineWidth:0,_maximumAliasedLineWidth:0,_minimumAliasedPointSize:0,_maximumAliasedPointSize:0,_maximumViewportWidth:0,_maximumViewportHeight:0,_maximumTextureFilterAnisotropy:0,_maximumDrawBuffers:0,_maximumColorAttachments:0,_maximumSamples:0,_highpFloatSupported:!1,_highpIntSupported:!1};Object.defineProperties(Fr,{maximumCombinedTextureImageUnits:{get:function(){return Fr._maximumCombinedTextureImageUnits}},maximumCubeMapSize:{get:function(){return Fr._maximumCubeMapSize}},maximumFragmentUniformVectors:{get:function(){return Fr._maximumFragmentUniformVectors}},maximumTextureImageUnits:{get:function(){return Fr._maximumTextureImageUnits}},maximumRenderbufferSize:{get:function(){return Fr._maximumRenderbufferSize}},maximumTextureSize:{get:function(){return Fr._maximumTextureSize}},maximum3DTextureSize:{get:function(){return Fr._maximum3DTextureSize}},maximumVaryingVectors:{get:function(){return Fr._maximumVaryingVectors}},maximumVertexAttributes:{get:function(){return Fr._maximumVertexAttributes}},maximumVertexTextureImageUnits:{get:function(){return Fr._maximumVertexTextureImageUnits}},maximumVertexUniformVectors:{get:function(){return Fr._maximumVertexUniformVectors}},minimumAliasedLineWidth:{get:function(){return Fr._minimumAliasedLineWidth}},maximumAliasedLineWidth:{get:function(){return Fr._maximumAliasedLineWidth}},minimumAliasedPointSize:{get:function(){return Fr._minimumAliasedPointSize}},maximumAliasedPointSize:{get:function(){return Fr._maximumAliasedPointSize}},maximumViewportWidth:{get:function(){return Fr._maximumViewportWidth}},maximumViewportHeight:{get:function(){return Fr._maximumViewportHeight}},maximumTextureFilterAnisotropy:{get:function(){return Fr._maximumTextureFilterAnisotropy}},maximumDrawBuffers:{get:function(){return Fr._maximumDrawBuffers}},maximumColorAttachments:{get:function(){return Fr._maximumColorAttachments}},maximumSamples:{get:function(){return Fr._maximumSamples}},highpFloatSupported:{get:function(){return Fr._highpFloatSupported}},highpIntSupported:{get:function(){return Fr._highpIntSupported}}});var Xt=Fr;var qtn=x(T(),1);var KA={DONT_CARE:ne.DONT_CARE,FASTEST:ne.FASTEST,NICEST:ne.NICEST,validate:function(e){return e===KA.DONT_CARE||e===KA.FASTEST||e===KA.NICEST}};Object.freeze(KA);var bm=KA;var fnn=x(T(),1);var tnn=x(T(),1);var JA={NEAREST:ne.NEAREST,LINEAR:ne.LINEAR};JA.validate=function(e){return e===JA.NEAREST||e===JA.LINEAR};Object.freeze(JA);var ni=JA;var onn=x(T(),1);var B0={NEAREST:ne.NEAREST,LINEAR:ne.LINEAR,NEAREST_MIPMAP_NEAREST:ne.NEAREST_MIPMAP_NEAREST,LINEAR_MIPMAP_NEAREST:ne.LINEAR_MIPMAP_NEAREST,NEAREST_MIPMAP_LINEAR:ne.NEAREST_MIPMAP_LINEAR,LINEAR_MIPMAP_LINEAR:ne.LINEAR_MIPMAP_LINEAR};B0.validate=function(e){return e===B0.NEAREST||e===B0.LINEAR||e===B0.NEAREST_MIPMAP_NEAREST||e===B0.LINEAR_MIPMAP_NEAREST||e===B0.NEAREST_MIPMAP_LINEAR||e===B0.LINEAR_MIPMAP_LINEAR};Object.freeze(B0);var zt=B0;var ann=x(T(),1);var jA={CLAMP_TO_EDGE:ne.CLAMP_TO_EDGE,REPEAT:ne.REPEAT,MIRRORED_REPEAT:ne.MIRRORED_REPEAT,validate:function(e){return e===jA.CLAMP_TO_EDGE||e===jA.REPEAT||e===jA.MIRRORED_REPEAT}};Object.freeze(jA);var sn=jA;function QA(e){e=e??B.EMPTY_OBJECT;let{wrapR:t=sn.CLAMP_TO_EDGE,wrapS:n=sn.CLAMP_TO_EDGE,wrapT:i=sn.CLAMP_TO_EDGE,minificationFilter:o=zt.LINEAR,magnificationFilter:r=ni.LINEAR,maximumAnisotropy:s=1}=e;this._wrapR=t,this._wrapS=n,this._wrapT=i,this._minificationFilter=o,this._magnificationFilter=r,this._maximumAnisotropy=s}Object.defineProperties(QA.prototype,{wrapR:{get:function(){return this._wrapR}},wrapS:{get:function(){return this._wrapS}},wrapT:{get:function(){return this._wrapT}},minificationFilter:{get:function(){return this._minificationFilter}},magnificationFilter:{get:function(){return this._magnificationFilter}},maximumAnisotropy:{get:function(){return this._maximumAnisotropy}}});QA.equals=function(e,t){return e===t||l(e)&&l(t)&&e._wrapR===t._wrapR&&e._wrapS===t._wrapS&&e._wrapT===t._wrapT&&e._minificationFilter===t._minificationFilter&&e._magnificationFilter===t._magnificationFilter&&e._maximumAnisotropy===t._maximumAnisotropy};QA.NEAREST=Object.freeze(new QA({wrapR:sn.CLAMP_TO_EDGE,wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:zt.NEAREST,magnificationFilter:ni.NEAREST}));var kt=QA;function gm(e){e=e??B.EMPTY_OBJECT;let{context:t,source:n,pixelFormat:i=Be.RGBA,pixelDatatype:o=Me.UNSIGNED_BYTE,flipY:r=!0,skipColorSpaceConversion:s=!1,sampler:a=new kt}=e,{width:c,height:d}=e;l(n)&&(l(c)||(c=n.videoWidth??n.naturalWidth??n.width),l(d)||(d=n.videoHeight??n.naturalHeight??n.height));let u=e.preMultiplyAlpha||i===Be.RGB||i===Be.LUMINANCE,m=Be.toInternalFormat(i,o,t),p=Be.isCompressedFormat(m),b=t._gl,f=p?Be.compressedTextureSizeInBytes(i,c,d):Be.textureSizeInBytes(i,o,c,d);this._id=e.id??Qn(),this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=b.TEXTURE_2D,this._texture=b.createTexture(),this._internalFormat=m,this._pixelFormat=i,this._pixelDatatype=o,this._width=c,this._height=d,this._dimensions=new M(c,d),this._hasMipmap=!1,this._sizeInBytes=f,this._preMultiplyAlpha=u,this._flipY=r,this._initialized=!1,this._sampler=void 0,this._sampler=a,Vde(this,a),b.activeTexture(b.TEXTURE0),b.bindTexture(this._textureTarget,this._texture),l(n)?(s?b.pixelStorei(b.UNPACK_COLORSPACE_CONVERSION_WEBGL,b.NONE):b.pixelStorei(b.UNPACK_COLORSPACE_CONVERSION_WEBGL,b.BROWSER_DEFAULT_WEBGL),l(n.arrayBufferView)?Be.isCompressedFormat(m)?$Ue(this,n):_de(this,n):l(n.framebuffer)?t5e(this,n):Sde(this,n),this._initialized=!0):Zde(this),b.bindTexture(this._textureTarget,null)}function $Ue(e,t){let i=e._context._gl,o=e._textureTarget,r=e._internalFormat,{width:s,height:a}=e;if(i.pixelStorei(i.UNPACK_ALIGNMENT,4),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1),i.compressedTexImage2D(o,0,r,s,a,0,t.arrayBufferView),l(t.mipLevels)){let c=s,d=a;for(let u=0;uZ5e);var d=he(Ade.url)}var u="./this.program",m=Ade.url;if(c)d("node:fs"),m.startsWith("file:")&&d("node:path").dirname(d("node:url").fileURLToPath(m)),1>8&Ke;return Ae}var _,S,Z,V,C,G,E,v,F,P,N,g,R=!1;function A(){var he=R0.buffer;Z=new Int8Array(he),C=new Int16Array(he),r.HEAPU8=V=new Uint8Array(he),G=new Uint16Array(he),E=new Int32Array(he),v=new Uint32Array(he),r.HEAPF32=F=new Float32Array(he),P=new Float64Array(he),N=new BigInt64Array(he),g=new BigUint64Array(he)}function W(he){var oe;throw(oe=r.onAbort)==null||oe.call(r,he),he="Aborted("+he+")",b(he),f=!0,he=new WebAssembly.RuntimeError(he+". Build with -sASSERTIONS for more info."),S?.(he),he}var X;async function Y(he){return he}async function D(he){var oe=X;try{var Ze=await Y(oe);return await WebAssembly.instantiate(Ze,he)}catch(Ae){b(`failed to asynchronously prepare wasm: ${Ae}`),W(Ae)}}async function k(he){return D(he)}var O=he=>{for(;0{var he=r.preRun.shift();z.push(he)},te={},K=he=>{for(;he.length;){var oe=he.pop();he.pop()(oe)}};function $(he){return this.O(v[he>>2])}var ee={},de={},_e={},ue=class extends Error{constructor(he){super(he),this.name="InternalError"}},Ce=(he,oe,Ze)=>{function Ae(Gt){if(Gt=Ze(Gt),Gt.length!==he.length)throw new ue("Mismatched type converter count");for(var _n=0;_n_e[Gt]=oe);var Ke=Array(oe.length),Vt=[],mt=0;for(let[Gt,_n]of oe.entries())de.hasOwnProperty(_n)?Ke[Gt]=de[_n]:(Vt.push(_n),ee.hasOwnProperty(_n)||(ee[_n]=[]),ee[_n].push(()=>{Ke[Gt]=de[_n],++mt,mt===Vt.length&&Ae(Ke)}));Vt.length===0&&Ae(Ke)},Te=he=>{for(var oe="";;){var Ze=V[he++];if(!Ze)return oe;oe+=String.fromCharCode(Ze)}},Re=class extends Error{constructor(he){super(he),this.name="BindingError"}},Le=he=>{throw new Re(he)};function Xe(he,oe,Ze={}){var Ae=oe.name;if(!he)throw new Re(`type "${Ae}" must have a positive integer typeid pointer`);if(de.hasOwnProperty(he)){if(Ze.Aa)return;throw new Re(`Cannot register type '${Ae}' twice`)}de[he]=oe,delete _e[he],ee.hasOwnProperty(he)&&(oe=ee[he],delete ee[he],oe.forEach(Ke=>Ke()))}function qe(he,oe,Ze={}){return Xe(he,oe,Ze)}var je=(he,oe,Ze)=>{switch(oe){case 1:return Ze?Ae=>Z[Ae]:Ae=>V[Ae];case 2:return Ze?Ae=>C[Ae>>1]:Ae=>G[Ae>>1];case 4:return Ze?Ae=>E[Ae>>2]:Ae=>v[Ae>>2];case 8:return Ze?Ae=>N[Ae>>3]:Ae=>g[Ae>>3];default:throw new TypeError(`invalid integer width (${oe}): ${he}`)}},_t=he=>{throw new Re(he.M.R.N.name+" instance already deleted")},Qe=!1,Ee=()=>{},He=he=>globalThis.FinalizationRegistry?(Qe=new FinalizationRegistry(oe=>{oe=oe.M,--oe.count.value,oe.count.value===0&&(oe.V?oe.Y.Z(oe.V):oe.R.N.Z(oe.P))}),He=oe=>{var Ze=oe.M;return Ze.V&&Qe.register(oe,{M:Ze},oe),oe},Ee=oe=>{Qe.unregister(oe)},He(he)):(He=oe=>oe,he);function Rt(){}var dt=(he,oe)=>Object.defineProperty(oe,"name",{value:he}),gn={},Bt=(he,oe,Ze)=>{if(he[oe].U===void 0){var Ae=he[oe];he[oe]=function(...Ke){if(!he[oe].U.hasOwnProperty(Ke.length))throw new Re(`Function '${Ze}' called with an invalid number of arguments (${Ke.length}) - expects one of (${he[oe].U})!`);return he[oe].U[Ke.length].apply(this,Ke)},he[oe].U=[],he[oe].U[Ae.$]=Ae}},St=(he,oe,Ze)=>{if(r.hasOwnProperty(he)){if(Ze===void 0||r[he].U!==void 0&&r[he].U[Ze]!==void 0)throw new Re(`Cannot register public name '${he}' twice`);if(Bt(r,he,he),r[he].U.hasOwnProperty(Ze))throw new Re(`Cannot register multiple overloads of a function with the same number of arguments (${Ze})!`);r[he].U[Ze]=oe}else r[he]=oe,r[he].$=Ze},vt=he=>{he=he.replace(/[^a-zA-Z0-9_]/g,"$");var oe=he.charCodeAt(0);return 48<=oe&&57>=oe?`_${he}`:he};function Wn(he,oe,Ze,Ae,Ke,Vt,mt,Gt){this.name=he,this.constructor=oe,this.ba=Ze,this.Z=Ae,this.W=Ke,this.va=Vt,this.fa=mt,this.ta=Gt,this.Ca=[]}var at=(he,oe,Ze)=>{for(;oe!==Ze;){if(!oe.fa)throw new Re(`Expected null or instance of ${Ze.name}, got an instance of ${oe.name}`);he=oe.fa(he),oe=oe.W}return he},ft=he=>{if(he===null)return"null";var oe=typeof he;return oe==="object"||oe==="array"||oe==="function"?he.toString():""+he};function Ai(he,oe){if(oe===null){if(this.ia)throw new Re(`null is not a valid ${this.name}`);return 0}if(!oe.M)throw new Re(`Cannot pass "${ft(oe)}" as a ${this.name}`);if(!oe.M.P)throw new Re(`Cannot pass deleted object as a pointer of type ${this.name}`);return at(oe.M.P,oe.M.R.N,this.N)}function En(he,oe){if(oe===null){if(this.ia)throw new Re(`null is not a valid ${this.name}`);if(this.ha){var Ze=this.ka();return he!==null&&he.push(this.Z,Ze),Ze}return 0}if(!oe||!oe.M)throw new Re(`Cannot pass "${ft(oe)}" as a ${this.name}`);if(!oe.M.P)throw new Re(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.ga&&oe.M.R.ga)throw new Re(`Cannot convert argument of type ${oe.M.Y?oe.M.Y.name:oe.M.R.name} to parameter type ${this.name}`);if(Ze=at(oe.M.P,oe.M.R.N,this.N),this.ha){if(oe.M.V===void 0)throw new Re("Passing raw pointer to smart pointer is illegal");switch(this.Ha){case 0:if(oe.M.Y===this)Ze=oe.M.V;else throw new Re(`Cannot convert argument of type ${oe.M.Y?oe.M.Y.name:oe.M.R.name} to parameter type ${this.name}`);break;case 1:Ze=oe.M.V;break;case 2:if(oe.M.Y===this)Ze=oe.M.V;else{var Ae=oe.clone();Ze=this.Da(Ze,Eo(()=>Ae.delete())),he!==null&&he.push(this.Z,Ze)}break;default:throw new Re("Unsupported sharing policy")}}return Ze}function Ni(he,oe){if(oe===null){if(this.ia)throw new Re(`null is not a valid ${this.name}`);return 0}if(!oe.M)throw new Re(`Cannot pass "${ft(oe)}" as a ${this.name}`);if(!oe.M.P)throw new Re(`Cannot pass deleted object as a pointer of type ${this.name}`);if(oe.M.R.ga)throw new Re(`Cannot convert argument of type ${oe.M.R.name} to parameter type ${this.name}`);return at(oe.M.P,oe.M.R.N,this.N)}var fo=(he,oe,Ze)=>oe===Ze?he:Ze.W===void 0?null:(he=fo(he,oe,Ze.W),he===null?null:Ze.ta(he)),Yi={},Ki=(he,oe)=>{if(oe===void 0)throw new Re("ptr should not be undefined");for(;he.W;)oe=he.fa(oe),he=he.W;return Yi[oe]},ci=(he,oe)=>{if(!oe.R||!oe.P)throw new ue("makeClassHandle requires ptr and ptrType");if(!!oe.Y!=!!oe.V)throw new ue("Both smartPtrType and smartPtr must be specified");return oe.count={value:1},He(Object.create(he,{M:{value:oe,writable:!0}}))};function oi(he,oe,Ze,Ae,Ke,Vt,mt,Gt,_n,Hn,mn){this.name=he,this.N=oe,this.ia=Ze,this.ga=Ae,this.ha=Ke,this.Ba=Vt,this.Ha=mt,this.pa=Gt,this.ka=_n,this.Da=Hn,this.Z=mn,Ke||oe.W!==void 0?this.S=En:(this.S=Ae?Ai:Ni,this.T=null)}var Gn=(he,oe,Ze)=>{if(!r.hasOwnProperty(he))throw new ue("Replacing nonexistent public symbol");r[he].U!==void 0&&Ze!==void 0?r[he].U[Ze]=oe:(r[he]=oe,r[he].$=Ze)},ri=(he,oe)=>{he=Te(he);var Ze=G0.get(oe);if(typeof Ze!="function")throw new Re(`unknown function pointer with signature ${he}: ${oe}`);return Ze};class Ao extends Error{}var Zs=he=>{he=zG(he);var oe=Te(he);return rm(he),oe},ws=(he,oe)=>{function Ze(Vt){Ke[Vt]||de[Vt]||(_e[Vt]?_e[Vt].forEach(Ze):(Ae.push(Vt),Ke[Vt]=!0))}var Ae=[],Ke={};throw oe.forEach(Ze),new Ao(`${he}: `+Ae.map(Zs).join([", "]))},ia=(he,oe)=>{for(var Ze=[],Ae=0;Ae>2]);return Ze};function oa(he){for(var oe=1;oemt)throw new Re("argTypes array size mismatch! Must at least get return value and 'this' types!");var Gt=oe[1]!==null&&Ze!==null,_n=oa(oe);Ze=!oe[0].oa;var Hn=oe[0],mn=oe[1];for(Ae=[he,Le,Ae,Ke,K,Hn.O.bind(Hn),mn?.S.bind(mn)],Ke=2;Ke{he=he.trim();let oe=he.indexOf("(");return oe===-1?he:he.slice(0,oe)},cr=[],Fi=[0,1,,1,null,1,!0,1,!1,1],Ur=he=>{9{if(!he)throw new Re(`Cannot use deleted val. handle = ${he}`);return Fi[he]},Eo=he=>{switch(he){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:let oe=cr.pop()||Fi.length;return Fi[oe]=he,Fi[oe+1]=1,oe}},Vs={name:"emscripten::val",O:he=>{var oe=Ii(he);return Ur(he),oe},S:(he,oe)=>Eo(oe),X:$,T:null},Lr=(he,oe,Ze)=>{switch(oe){case 1:return Ze?function(Ae){return this.O(Z[Ae])}:function(Ae){return this.O(V[Ae])};case 2:return Ze?function(Ae){return this.O(C[Ae>>1])}:function(Ae){return this.O(G[Ae>>1])};case 4:return Ze?function(Ae){return this.O(E[Ae>>2])}:function(Ae){return this.O(v[Ae>>2])};default:throw new TypeError(`invalid integer width (${oe}): ${he}`)}},nm=(he,oe)=>{var Ze=de[he];if(Ze===void 0)throw he=`${oe} has unknown type ${Zs(he)}`,new Re(he);return Ze},im=(he,oe)=>{switch(oe){case 4:return function(Ze){return this.O(F[Ze>>2])};case 8:return function(Ze){return this.O(P[Ze>>3])};default:throw new TypeError(`invalid float width (${oe}): ${he}`)}},yc=(he,oe,Ze)=>{let Ae=(Ke,Vt)=>{let mt=0;return{next(){if(mt>=Ke)return{done:!0};let Gt=mt;return mt++,{value:Vt(Gt),done:!1}},[Symbol.iterator](){return this}}};he[Symbol.iterator]||(he[Symbol.iterator]=function(){let Ke=this[oe]();return Ae(Ke,Vt=>this[Ze](Vt))})},Hg=Object.assign({optional:!0},Vs),Wr=(he,oe,Ze)=>{var Ae=V;if(!(0=mt){if(oe>=Ze)break;Ae[oe++]=mt}else if(2047>=mt){if(oe+1>=Ze)break;Ae[oe++]=192|mt>>6,Ae[oe++]=128|mt&63}else if(65535>=mt){if(oe+2>=Ze)break;Ae[oe++]=224|mt>>12,Ae[oe++]=128|mt>>6&63,Ae[oe++]=128|mt&63}else{if(oe+3>=Ze)break;Ae[oe++]=240|mt>>18,Ae[oe++]=128|mt>>12&63,Ae[oe++]=128|mt>>6&63,Ae[oe++]=128|mt&63,Vt++}}return Ae[oe]=0,oe-Ke},Ra=he=>{for(var oe=0,Ze=0;Ze=Ae?oe++:2047>=Ae?oe+=2:55296<=Ae&&57343>=Ae?(oe+=4,++Ze):oe+=3}return oe},Kg=new TextDecoder,li=(he,oe,Ze,Ae)=>{if(Ze=oe+Ze,Ae)return Ze;for(;he[oe]&&!(oe>=Ze);)++oe;return oe},za=new TextDecoder("utf-16le"),Ha=(he,oe,Ze)=>(he>>=1,za.decode(G.subarray(he,li(G,he,oe/2,Ze)))),ra=(he,oe,Ze)=>{if(Ze??(Ze=2147483647),2>Ze)return 0;Ze-=2;var Ae=oe;Ze=Ze<2*he.length?Ze/2:he.length;for(var Ke=0;Ke>1]=he.charCodeAt(Ke),oe+=2;return C[oe>>1]=0,oe-Ae},Cs=he=>2*he.length,om=(he,oe,Ze)=>{var Ae="";he>>=2;for(var Ke=0;!(Ke>=oe/4);Ke++){var Vt=v[he+Ke];if(!Vt&&!Ze)break;Ae+=String.fromCodePoint(Vt)}return Ae},hT=(he,oe,Ze)=>{if(Ze??(Ze=2147483647),4>Ze)return 0;var Ae=oe;Ze=Ae+Ze-4;for(var Ke=0;Ke>2]=Vt,oe+=4,oe+4>Ze)break}return E[oe>>2]=0,oe-Ae},fK=he=>{for(var oe=0,Ze=0;Ze{var oe=DG.length;return DG.push(he),oe},bK=(he,oe)=>{for(var Ze=Array(he),Ae=0;Ae>2],`parameter ${Ae}`);return Ze},np=(he,oe,Ze)=>{var Ae=[];return he=he(Ae,Ze),Ae.length&&(v[oe>>2]=Eo(Ae)),he},iV={},C0=he=>{var oe=iV[he];return oe===void 0?Te(he):oe},OG={},Jg=()=>{var he;if(!BG){var oe={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(((he=globalThis.navigator)==null?void 0:he.language)??"C").replace("-","_")+".UTF-8",_:u||"./this.program"},Ze;for(Ze in OG)OG[Ze]===void 0?delete oe[Ze]:oe[Ze]=OG[Ze];var Ae=[];for(Ze in oe)Ae.push(`${Ze}=${oe[Ze]}`);BG=Ae}return BG},BG,zU=[null,[],[]];if((()=>{let he=Rt.prototype;Object.assign(he,{isAliasOf:function(Ze){if(!(this instanceof Rt&&Ze instanceof Rt))return!1;var Ae=this.M.R.N,Ke=this.M.P;Ze.M=Ze.M;var Vt=Ze.M.R.N;for(Ze=Ze.M.P;Ae.W;)Ke=Ae.fa(Ke),Ae=Ae.W;for(;Vt.W;)Ze=Vt.fa(Ze),Vt=Vt.W;return Ae===Vt&&Ke===Ze},clone:function(){if(this.M.P||_t(this),this.M.ea)return this.M.count.value+=1,this;var Ze=He,Ae=Object,Ke=Ae.create,Vt=Object.getPrototypeOf(this),mt=this.M;return Ze=Ze(Ke.call(Ae,Vt,{M:{value:{count:mt.count,da:mt.da,ea:mt.ea,P:mt.P,R:mt.R,V:mt.V,Y:mt.Y}}})),Ze.M.count.value+=1,Ze.M.da=!1,Ze},delete(){if(this.M.P||_t(this),this.M.da&&!this.M.ea)throw new Re("Object already scheduled for deletion");Ee(this);var Ze=this.M;--Ze.count.value,Ze.count.value===0&&(Ze.V?Ze.Y.Z(Ze.V):Ze.R.N.Z(Ze.P)),this.M.ea||(this.M.V=void 0,this.M.P=void 0)},isDeleted:function(){return!this.M.P},deleteLater:function(){if(this.M.P||_t(this),this.M.da&&!this.M.ea)throw new Re("Object already scheduled for deletion");return this.M.da=!0,this}});let oe=Symbol.dispose;oe&&(he[oe]=he.delete)})(),Object.assign(oi.prototype,{wa(he){return this.pa&&(he=this.pa(he)),he},ma(he){var oe;(oe=this.Z)==null||oe.call(this,he)},X:$,O:function(he){function oe(){return this.ha?ci(this.N.ba,{R:this.Ba,P:Ze,Y:this,V:he}):ci(this.N.ba,{R:this,P:he})}var Ze=this.wa(he);if(!Ze)return this.ma(he),null;var Ae=Ki(this.N,Ze);if(Ae!==void 0)return Ae.M.count.value===0?(Ae.M.P=Ze,Ae.M.V=he,Ae.clone()):(Ae=Ae.clone(),this.ma(he),Ae);if(Ae=this.N.va(Ze),Ae=gn[Ae],!Ae)return oe.call(this);Ae=this.ga?Ae.sa:Ae.pointerType;var Ke=fo(Ze,this.N,Ae.N);return Ke===null?oe.call(this):this.ha?ci(Ae.N.ba,{R:Ae,P:Ke,Y:this,V:he}):ci(Ae.N.ba,{R:Ae,P:Ke})}}),r.print&&(p=r.print),r.printErr&&(b=r.printErr),r.thisProgram&&(u=r.thisProgram),r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);0W(""),r:he=>{var oe=te[he];delete te[he];var Ze=oe.ka,Ae=oe.Z,Ke=oe.na,Vt=Ke.map(mt=>mt.za).concat(Ke.map(mt=>mt.Fa));Ce([he],Vt,mt=>{var Gt={},_n,Hn;for([_n,Hn]of Ke.entries()){let mn=mt[_n],qo=Hn.xa,ht=Hn.ya,ye=mt[_n+Ke.length],Ne=Hn.Ea,ut=Hn.Ga;Gt[Hn.ua]={read:rn=>mn.O(qo(ht,rn)),write:(rn,An)=>{var Pn=[];Ne(ut,rn,ye.S(Pn,An)),K(Pn)},optional:mn.optional}}return[{name:oe.name,O:mn=>{var qo={},ht;for(ht in Gt)qo[ht]=Gt[ht].read(mn);return Ae(mn),qo},S:(mn,qo)=>{for(var ht in Gt)if(!(ht in qo||Gt[ht].optional))throw new TypeError(`Missing field: "${ht}"`);var ye=Ze();for(ht in Gt)Gt[ht].write(ye,qo[ht]);return mn!==null&&mn.push(Ae,ye),ye},X:$,T:Ae}]})},o:(he,oe,Ze,Ae,Ke)=>{oe=Te(oe),Ae=Ae===0n;let Vt=mt=>mt;if(Ae){let mt=8*Ze;Vt=Gt=>BigInt.asUintN(mt,Gt),Ke=Vt(Ke)}qe(he,{name:oe,O:Vt,S:(mt,Gt)=>(typeof Gt=="number"&&(Gt=BigInt(Gt)),Gt),X:je(oe,Ze,!Ae),T:null})},C:(he,oe,Ze,Ae)=>{oe=Te(oe),qe(he,{name:oe,O:function(Ke){return!!Ke},S:function(Ke,Vt){return Vt?Ze:Ae},X:function(Ke){return this.O(V[Ke])},T:null})},k:(he,oe,Ze,Ae,Ke,Vt,mt,Gt,_n,Hn,mn,qo,ht)=>{mn=Te(mn),Vt=ri(Ke,Vt),Gt&&(Gt=ri(mt,Gt)),Hn&&(Hn=ri(_n,Hn)),ht=ri(qo,ht);var ye=vt(mn);St(ye,function(){ws(`Cannot construct ${mn} due to unbound types`,[Ae])}),Ce([he,oe,Ze],Ae?[Ae]:[],Ne=>{if(Ne=Ne[0],Ae)var ut=Ne.N,rn=ut.ba;else rn=Rt.prototype;Ne=dt(mn,function(...lr){if(Object.getPrototypeOf(this)!==An)throw new Re(`Use 'new' to construct ${mn}`);if(Pn.aa===void 0)throw new Re(`${mn} has no accessible constructor`);var xc=Pn.aa[lr.length];if(xc===void 0)throw new Re(`Tried to invoke ctor of ${mn} with invalid number of parameters (${lr.length}) - expected (${Object.keys(Pn.aa).toString()}) parameters instead!`);return xc.apply(this,lr)});var An=Object.create(rn,{constructor:{value:Ne}});Ne.prototype=An;var Pn=new Wn(mn,Ne,An,ht,ut,Vt,Gt,Hn);if(Pn.W){var po;(po=Pn.W).la??(po.la=[]),Pn.W.la.push(Pn)}return ut=new oi(mn,Pn,!0,!1,!1),po=new oi(mn+"*",Pn,!1,!1,!1),rn=new oi(mn+" const*",Pn,!1,!0,!1),gn[he]={pointerType:po,sa:rn},Gn(ye,Ne),[ut,po,rn]})},g:(he,oe,Ze,Ae,Ke,Vt)=>{var mt=ia(oe,Ze);Ke=ri(Ae,Ke),Ce([],[he],Gt=>{Gt=Gt[0];var _n=`constructor ${Gt.name}`;if(Gt.N.aa===void 0&&(Gt.N.aa=[]),Gt.N.aa[oe-1]!==void 0)throw new Re(`Cannot register multiple constructors with identical number of parameters (${oe-1}) for class '${Gt.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return Gt.N.aa[oe-1]=()=>{ws(`Cannot construct ${Gt.name} due to unbound types`,mt)},Ce([],mt,Hn=>(Hn.splice(1,0,null),Gt.N.aa[oe-1]=ar(_n,Hn,null,Ke,Vt),[])),[]})},b:(he,oe,Ze,Ae,Ke,Vt,mt,Gt,_n)=>{var Hn=ia(Ze,Ae);oe=Te(oe),oe=yi(oe),Vt=ri(Ke,Vt),Ce([],[he],mn=>{function qo(){ws(`Cannot call ${ht} due to unbound types`,Hn)}mn=mn[0];var ht=`${mn.name}.${oe}`;oe.startsWith("@@")&&(oe=Symbol[oe.substring(2)]),Gt&&mn.N.Ca.push(oe);var ye=mn.N.ba,Ne=ye[oe];return Ne===void 0||Ne.U===void 0&&Ne.className!==mn.name&&Ne.$===Ze-2?(qo.$=Ze-2,qo.className=mn.name,ye[oe]=qo):(Bt(ye,oe,ht),ye[oe].U[Ze-2]=qo),Ce([],Hn,ut=>(ut=ar(ht,ut,mn,Vt,mt,_n),ye[oe].U===void 0?(ut.$=Ze-2,ye[oe]=ut):ye[oe].U[Ze-2]=ut,[])),[]})},A:he=>qe(he,Vs),s:(he,oe,Ze,Ae,Ke)=>{switch(oe=Te(oe),Ke=Ke===0?"object":Ke===1?"number":"string",Ke){case"object":let mt=function(){};mt.values={},qe(he,{name:oe,constructor:mt,valueType:Ke,O:function(Gt){return this.constructor.values[Gt]},S:(Gt,_n)=>_n.value,X:Lr(oe,Ze,Ae),T:null}),St(oe,mt);break;case"number":var Vt={};qe(he,{name:oe,ja:Vt,valueType:Ke,O:Gt=>Gt,S:(Gt,_n)=>_n,X:Lr(oe,Ze,Ae),T:null}),St(oe,Vt),delete r[oe].$;break;case"string":Vt={},qe(he,{name:oe,ra:{},qa:{},ja:Vt,valueType:Ke,O:function(Gt){return this.qa[Gt]},S:function(Gt,_n){return this.ra[_n]},X:Lr(oe,Ze,Ae),T:null}),St(oe,Vt),delete r[oe].$}},d:(he,oe,Ze)=>{var Ae=nm(he,"enum");switch(oe=Te(oe),Ae.valueType){case"object":he=Ae.constructor,Ae=Object.create(Ae.constructor.prototype,{value:{value:Ze},constructor:{value:dt(`${Ae.name}_${oe}`,function(){})}}),he.values[Ze]=Ae,he[oe]=Ae;break;case"number":Ae.ja[oe]=Ze;break;case"string":Ae.ra[oe]=Ze,Ae.qa[Ze]=oe,Ae.ja[oe]=oe}},n:(he,oe,Ze)=>{oe=Te(oe),qe(he,{name:oe,O:Ae=>Ae,S:(Ae,Ke)=>Ke,X:im(oe,Ze),T:null})},m:(he,oe,Ze,Ae,Ke,Vt,mt)=>{var Gt=ia(oe,Ze);he=Te(he),he=yi(he),Ke=ri(Ae,Ke),St(he,function(){ws(`Cannot call ${he} due to unbound types`,Gt)},oe-1),Ce([],Gt,_n=>(_n=[_n[0],null].concat(_n.slice(1)),Gn(he,ar(he,_n,null,Ke,Vt,mt),oe-1),[]))},c:(he,oe,Ze,Ae,Ke)=>{oe=Te(oe);let Vt=Gt=>Gt;if(Ae===0){var mt=32-8*Ze;Vt=Gt=>Gt<>>mt,Ke=Vt(Ke)}qe(he,{name:oe,O:Vt,S:(Gt,_n)=>_n,X:je(oe,Ze,Ae!==0),T:null})},j:(he,oe,Ze,Ae)=>{Ze=Te(Ze),Ae=Te(Ae),Ce([],[he,oe],Ke=>(yc(Ke[0].N.ba,Ze,Ae),[]))},a:(he,oe,Ze)=>{function Ae(Vt){return new Ke(Z.buffer,v[Vt+4>>2],v[Vt>>2])}var Ke=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][oe];Ze=Te(Ze),qe(he,{name:Ze,O:Ae,X:Ae},{Aa:!0})},h:he=>{qe(he,Hg)},B:(he,oe)=>{oe=Te(oe),qe(he,{name:oe,O(Ze){var Ae=(Ae=Ze+4)?Kg.decode(V.subarray(Ae,li(V,Ae,v[Ze>>2],!0))):"";return rm(Ze),Ae},S(Ze,Ae){Ae instanceof ArrayBuffer&&(Ae=new Uint8Array(Ae));var Ke=typeof Ae=="string";if(!(Ke||ArrayBuffer.isView(Ae)&&Ae.BYTES_PER_ELEMENT==1))throw new Re("Cannot pass non-string to std::string");var Vt=Ke?Ra(Ae):Ae.length,mt=jg(4+Vt+1),Gt=mt+4;return v[mt>>2]=Vt,Ke?Wr(Ae,Gt,Vt+1):V.set(Ae,Gt),Ze!==null&&Ze.push(rm,mt),mt},X:$,T(Ze){rm(Ze)}})},f:(he,oe,Ze)=>{if(Ze=Te(Ze),oe===2)var Ae=Ha,Ke=ra,Vt=Cs;else Ae=om,Ke=hT,Vt=fK;qe(he,{name:Ze,O:mt=>{var Gt=Ae(mt+4,v[mt>>2]*oe,!0);return rm(mt),Gt},S:(mt,Gt)=>{if(typeof Gt!="string")throw new Re(`Cannot pass non-string to C++ string type ${Ze}`);var _n=Vt(Gt),Hn=jg(4+_n+oe);return v[Hn>>2]=_n/oe,Ke(Gt,Hn+4,_n+oe),mt!==null&&mt.push(rm,Hn),Hn},X:$,T(mt){rm(mt)}})},i:(he,oe,Ze,Ae,Ke,Vt)=>{te[he]={name:Te(oe),ka:ri(Ze,Ae),Z:ri(Ke,Vt),na:[]}},e:(he,oe,Ze,Ae,Ke,Vt,mt,Gt,_n,Hn)=>{te[he].na.push({ua:Te(oe),za:Ze,xa:ri(Ae,Ke),ya:Vt,Fa:mt,Ea:ri(Gt,_n),Ga:Hn})},D:(he,oe)=>{oe=Te(oe),qe(he,{oa:!0,name:oe,O:()=>{},S:()=>{}})},q:(he,oe,Ze)=>{var[Ae,...Ke]=bK(he,oe);oe=Ae.S.bind(Ae);var Vt=Ke.map(_n=>_n.X.bind(_n));he--;var mt={toValue:Ii};switch(he=Vt.map((_n,Hn)=>{var mn=`argFromPtr${Hn}`;return mt[mn]=_n,`${mn}(args${Hn?"+"+8*Hn:""})`}),Ze){case 0:var Gt="toValue(handle)";break;case 2:Gt="new (toValue(handle))";break;case 3:Gt="";break;case 1:mt.getStringOrSymbol=C0,Gt="toValue(handle)[getStringOrSymbol(methodName)]"}return Gt+=`(${he})`,Ae.oa||(mt.toReturnWire=oe,mt.emval_returnValue=np,Gt=`return emval_returnValue(toReturnWire, destructorsRef, ${Gt})`),Gt=`return function (handle, methodName, destructorsRef, args) { ${Gt} }`,Ze=new Function(Object.keys(mt),Gt)(...Object.values(mt)),Gt=`methodCaller<(${Ke.map(_n=>_n.name)}) => ${Ae.name}>`,pK(dt(Gt,Ze))},F:Ur,p:(he,oe,Ze,Ae,Ke)=>DG[he](oe,Ze,Ae,Ke),E:he=>{var oe=Ii(he);K(oe),Ur(he)},t:(he,oe,Ze,Ae)=>{var Ke=new Date().getFullYear(),Vt=new Date(Ke,0,1).getTimezoneOffset();Ke=new Date(Ke,6,1).getTimezoneOffset(),v[he>>2]=60*Math.max(Vt,Ke),E[oe>>2]=+(Vt!=Ke),oe=mt=>{var Gt=Math.abs(mt);return`UTC${0<=mt?"-":"+"}${String(Math.floor(Gt/60)).padStart(2,"0")}${String(Gt%60).padStart(2,"0")}`},he=oe(Vt),oe=oe(Ke),Ke{var oe=V.length;if(he>>>=0,2147483648=Ze;Ze*=2){var Ae=oe*(1+.2/Ze);Ae=Math.min(Ae,he+100663296);e:{Ae=(Math.min(2147483648,65536*Math.ceil(Math.max(he,Ae)/65536))-R0.buffer.byteLength+65535)/65536|0;try{R0.grow(Ae),A();var Ke=1;break e}catch{}Ke=void 0}if(Ke)return!0}return!1},u:(he,oe)=>{var Ze=0,Ae=0,Ke;for(Ke of Jg()){var Vt=oe+Ze;v[he+Ae>>2]=Vt,Ze+=Wr(Ke,Vt,1/0)+1,Ae+=4}return 0},v:(he,oe)=>{var Ze=Jg();v[he>>2]=Ze.length,he=0;for(var Ae of Ze)he+=Ra(Ae)+1;return v[oe>>2]=he,0},w:()=>52,x:function(){return 70},l:(he,oe,Ze,Ae)=>{for(var Ke=0,Vt=0;Vt>2],Gt=v[oe+4>>2];oe+=8;for(var _n=0;_n>2]=Ke,0}},Tl;return Tl=await(async function(){function he(Ze){return Ze=Tl=Ze.exports,zG=Ze.J,jg=r._malloc=Ze.K,rm=r._free=Ze.L,R0=Ze.G,G0=Ze.I,A(),Tl}var oe={a:fT};return r.instantiateWasm?new Promise(Ze=>{r.instantiateWasm(oe,(Ae,Ke)=>{Ze(he(Ae))})}):(X??(X=y(`\0asm\0\0\0\xD79\`\x7F\x7F\`\x7F\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\b\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\0\0\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F~~~~\0\`\0\x7F\` \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F~\x7F\`\b\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~~\x7F\0\`\x7F~\x7F~\`\x7F\x7F~\x7F\x7F\0\` \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\f\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\v\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F~\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F~~\x7F\`\x7F\x7F\x7F\x7F~~\x7F\`\x7F\x7F\x7F\x7F|\x7F\`\r\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~~\0\`\x7F\x7F\x7F\x7F\x7F|\`\x7F~\x7F\x7F\x7F\`\x7F~\0\`\x7F|\0\`~~~~\x7F\`~\x7F\x7F\`\x7F\x7F\x7F~\x7F\0\`\x7F\x7F\x7F~~\`~~|\`\x7F|\`\x7F\x7F\x7F|\`\x7F\x7F\x7F}\`\x7F\x7F~\0\`~~}\`\x7F\x7F~\`\x7F~~~\0\`~~~\x7F\`|\x7F|\`\x7F\x7F\x7F}\x7F\`\x7F\x7F\x7F}\0\`\x7F\x7F}\0\xC1 aa\0\x07ab\0ac\0 ad\0\x07ae\0af\0\x07ag\0\vah\0ai\0\vaj\0\bak\0"al\0am\0an\0\x07ao\0#ap\0$aq\0ar\0as\0 at\0\bau\0av\0aw\0\0ax\0%ay\0\raz\0\0aA\0aB\0aC\0\baD\0aE\0aF\0\x8D\x8B\0\0\0\0\r\x07\0\b \0\0\0\0\0\0\0\0\0\0\0&\0\0 \0\0\0'\0\f\f\0\r(\x07\r\x07\0\0\0\0\0)\0 \x07\x07\0\r \0\0\0* \r\0\0 \v\b\x07\0\0  \b\0+\0\0,\x07-\0\r\0\x07\b\0\x07\b\x07\x07\x07\0\0 \f\f \f\f\0 \f\0\0\0\x1B\x1B\0\0 \0\0\x07\v \v\v \v\v\0\r\b./\x07\0012\b34\0 \0\0\0\0\0\0\b\0\b\0 5\0\b\x07678\x07\x07\v\v\v \b\b\b\x07\0\0\0\0\0\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\0\0\0 \0 \f\f\x07 \0 \x07\v\v\0\f\f !  !  \0\b\b \b \0\0\b\0\0\0\0\0\0\0\0\0\0\b\0\r\x07p\xFD\xFD\x07\x82\x80\x80\b\x7FA\xC0\xEC\v\x07\x1BG\0H\0\xAAI\0J\0\xD4K\0/L\0! \xAE\0A\v\xFC\x95\xF3\xEF\xD4\xCD\xC9\x81\xFA\xBE\xB7\xAE\xA5\x9D\x9B\x81\xFA\x91\x87\xFC\xF1\xEF\xEE\xEA\xD8\xD7\xE1\xE0\xDF\xDE\xDD,\xD8\xD7\xD5\xDC\xDB\xD3\xDA\xD9\xD5\xD8\xD7\xD3\xD6\xD5\xCC\xD3\xD28\xA9\xA8\xA7\xA6\xC3\xA3\xC2\xA2\xA1\xA088\x9F\x9E\x9D\xC6\x9C\xC6\xB0\x8C\x8D\x8B\x90\x8F\x8E\x81\xC0\x8A\x89\x88\x87\x95\xC1\x94\x92\x93\x91\x9B\xC5\x9A\x99\x98\xC1\x97\x96K\x86\x85\x84\xA0!\xF2\x8D\x8B\x89\x86\x84\x82\x80\xFE\xFB\xF9\xF7\xF5\xF3\xF0\xF5\xBD\xBC\xF0\xAF\xAD\xAC\xAB\xAA\xF1\xA9\xA8\xA7\xF6\xA4\xA3\xA2\xA1\xA08\x9F\x9E\xE6\x9C\x99\x97\x95\x93\x90\xE5\x9A\x98\x96\x94\x92\x8Fq,,\xBB\xBA\xB9\xB8\xB6\xB5\xB4\xB3\xF1\xB2\xB1\xB0,\xEF\xEF{\xA1\xA1\xA6\xA1,\xEC\xEB{88\xEA\x8B,\xEC\xEB{88\xEA\x8B,\xE9\xE8{88\xE7\x8B,\xE9\xE8{88\xE7\x8Bq,\x83\x82\x81q,\x80\xFF\xFE,\xFD\xFC\xFB\xFA\x9E\x9E\xF9\xF8\xF7\xF6\xF5,\xF4\xF2\xF1\xF0\x97\x97\xEE\xED\xEC\xEB\xEA,\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2,\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDAq,\x8F\xD9\xD8\xD7\xD6\xD5\xD3\x8E\x8A\x85\xF8\xF4\x81\xFDq,\x8F\xD2\xD1\xD0\xCF\xCE\xCC\x8C\x88\x83\xF6\xF2\xFF\xFA\xAE\xE4\xCB\xAE\xE4\xCA,\x8E\x8EFFF\x878[[,\x8E\x8EFFF\x878[[,\x8D\x8DFFF\x868[[,\x8D\x8DFFF\x868[[,\xC8\xC7,\xC6\xC5,\xC4\xC3,\xC2\xC1,\xF7\xC0\xC2,\xF7\xBF\xC2\xA4\xA5q,\xA0\xA0\xDB,\xDB,\xED\xE2\xE5\xEC,\xE3\xE6\xEB,\xE4\xE7\xE9,\xE8\f( \xC9\xCB\b\x8B\0 \0,\0\vA\0H@ \0(\b \0(\0!\v \0\v\x82\f\b\x7F@ \0E\r\0 \0A\bk" \0Ak(\0"Axq"\0j!@ Aq\r\0 AqE\r  (\0"k"A\x8C\xD8(\0I\r \0 j!\0@@@A\x90\xD8(\0 G@ (\f! A\xFFM@  (\b"G\rA\xFC\xD7A\xFC\xD7(\0A~ Avwq6\0\f\v (!\x07  G@ (\b" 6\f  6\b\f\v ("\x7F Aj ("E\r Aj\v!@ ! "Aj! ("\r\0 Aj! ("\r\0\v A\x006\0\f\v ("AqAG\rA\x84\xD8 \x006\0  A~q6  \0Ar6  \x006\0\v  6\f  6\b\f\vA\0!\v \x07E\r\0@ ("At"(\xAC\xDA F@ A\xAC\xDAj 6\0 \rA\x80\xD8A\x80\xD8(\0A~ wq6\0\f\v@  \x07(F@ \x07 6\f\v \x07 6\v E\r\v  \x076 ("@  6  6\v ("E\r\0  6  6\v  O\r\0 ("AqE\r\0@@@@ AqE@A\x94\xD8(\0 F@A\x94\xD8 6\0A\x88\xD8A\x88\xD8(\0 \0j"\x006\0  \0Ar6 A\x90\xD8(\0G\rA\x84\xD8A\x006\0A\x90\xD8A\x006\0\vA\x90\xD8(\0"\x07 F@A\x90\xD8 6\0A\x84\xD8A\x84\xD8(\0 \0j"\x006\0  \0Ar6 \0 j \x006\0\v Axq \0j!\0 (\f! A\xFFM@ (\b" F@A\xFC\xD7A\xFC\xD7(\0A~ Avwq6\0\f\v  6\f  6\b\f\v (!\b  G@ (\b" 6\f  6\b\f\v ("\x7F Aj ("E\r Aj\v!@ ! "Aj! ("\r\0 Aj! ("\r\0\v A\x006\0\f\v  A~q6  \0Ar6 \0 j \x006\0\f\vA\0!\v \bE\r\0@ ("At"(\xAC\xDA F@ A\xAC\xDAj 6\0 \rA\x80\xD8A\x80\xD8(\0A~ wq6\0\f\v@  \b(F@ \b 6\f\v \b 6\v E\r\v  \b6 ("@  6  6\v ("E\r\0  6  6\v  \0Ar6 \0 j \x006\0  \x07G\r\0A\x84\xD8 \x006\0\v \0A\xFFM@ \0A\xF8qA\xA4\xD8j!\x7FA\xFC\xD7(\0"A \0Avt"\0qE@A\xFC\xD7 \0 r6\0 \f\v (\b\v!\0  6\b \0 6\f  6\f  \x006\b\vA! \0A\xFF\xFF\xFF\x07M@ \0A& \0A\bvg"kvAq AtrA>s!\v  6 B\x007 AtA\xAC\xDAj!\x7F@\x7FA\x80\xD8(\0"A t"qE@A\x80\xD8  r6\0  6\0A!A\b\f\v \0A AvkA\0 AG\x1Bt! (\0!@ "(Axq \0F\r Av! At!  Aqj"("\r\0\v  6A! !A\b\v!\0 "\f\v (\b" 6\f  6\bA!\0A\b!A\0\v!  j 6\0  6\f \0 j 6\0A\x9C\xD8A\x9C\xD8(\0Ak"\0A\x7F \0\x1B6\0\v\v\xA0\x7F \0( \0,\0\v" A\0H\x1B" I@  k"@\x7F  \0(\b"A\xFF\xFF\xFF\xFF\x07qAkA \0,\0\v"A\0H"\x1B" \0(  \x1B"kM@ Av\f\v \0   j k  \xA4 \0-\0\v\v! \0(\0 \0 \xC0A\0H\x1B" j! !@ @ A\0:\0\0 Ak! Aj!\f\v\v  j!@ \0,\0\vA\0H@ \0 6\f\v \0 A\xFF\0q:\0\v\v  jA\0:\0\0\v\v@ \0,\0\vA\0H@ \0 6 \0(\0!\0\f\v \0 A\xFF\0q:\0\v\v \0 jA\0:\0\0\v0\x7F@ \0A\xEC\xDEF\r\0 \0 \0("Ak6 \r\0 \0 \0(\0(\b\0\v\v%\0 \0 ("\x006\0 \0A\xEC\xDEG@ \0 \0(Aj6\v\v\x8B\x7F~@ \0)p"PE  \0)x \0(" \0(,"k\xAC|"WqE@#\0Ak"$\0A\x7F!@ \0\xC8\r\0 \0 AjA \0( \0AG\r\0 -\0!\v Aj$\0 "A\0N\r \0(! \0(,!\v \0B\x7F7p \0 6h \0   k\xAC|7xA\x7F\v B|! \0(! \0(\b!@ \0)p"P\r\0  }"  k\xACY\r\0  \xA7j!\v \0 6h \0  \0(,"\0 k\xAC|7x \0 O@ Ak :\0\0\v \v\xB1\x7F@ \xA5" \0(\b"A\xFF\xFF\xFF\xFF\x07qAkA \0,\0\v"A\0H"\x1B"M@ \0(\0 \0 \x1B!@ \x7F At"@   \xFC \0\0\v \0,\0\v Av\v\xC0A\0H@ \0 6\f\v \0 A\xFF\0q:\0\v\v  AtjA\x006\0\f\v \0   k \0(  \x1B"\0A\0 \0  \xDE\v\v\r\0 \0  y\xE0\v\0 \0\xBC \xBCsAs\v\0 \0\xBD \xBDsAs\v\xE5\x7FA\xE8\xDE-\0\0@A\xE4\xDE(\0\v#\0A k"$\0@@@ A\bj" \0At"j\x7FA \0tA\xFF\xFF\xFF\xFF\x07q"ArE@ (\0\f\v \0A\xAFA\xD7 \x1B\xBB\v"6\0 A\x7FF\r \0Aj"\0AG\r\0\vA\0\xBAE@A\xF8\xFC\0! A\xF8\xFC\0AhE\rA\x90\xFD\0! A\x90\xFD\0AhE\rA\0!\0A\xA8\xDC-\0\0E@@ \0At \0A\xD7\xBB6\xF8\xDB \0Aj"\0AG\r\0\vA\xA8\xDCA:\0\0A\x90\xDCA\xF8\xDB(\x006\0\vA\xF8\xDB! A\bj"\0A\xF8\xDBAhE\rA\x90\xDC! \0A\x90\xDCAhE\rA/"E\r\v  )7  )7\b  )\b7\0\f\vA\0!\v A j$\0A\xE8\xDEA:\0\0A\xE4\xDE 6\0 \v\xCB \x7F ~#\0A\xE0\0k"$\0 B\xFF\xFF\xFF\xFF\xFF\xFF?\x83!  \x85B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x83!\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83"\fB \x88! B0\x88\xA7A\xFF\xFFq!\x07@@ B0\x88\xA7A\xFF\xFFq" A\xFF\xFFkA\x82\x80~O@ \x07A\xFF\xFFkA\x81\x80~K\r\v P B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"\rB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T \rB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84!\v\f\v P B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84!\v !\f\v  \rB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@  \x84P@B\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0!\vB\0!\f\v \vB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\vB\0!\f\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@  \r\x84B\0!P@B\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0!\v\f\v \vB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\v\f\v  \r\x84P@B\0!\f\v  \x84P@B\0!\f\v \rB\xFF\xFF\xFF\xFF\xFF\xFF?X@ A\xD0\0j  \f  \f \fP"\x1ByB\xC0\0B\0 \x1B|\xA7"Ak6A k! )X"\fB \x88! )P!\v B\xFF\xFF\xFF\xFF\xFF\xFF?V\r\0 A@k   P"\b\x1ByB\xC0\0B\0 \b\x1B|\xA7"\bAk6  \bkAj! )H! )@!\v \x07 j jA\xFF\xFF\0k!@ B\x86"B \x88B\x80\x80\x80\x80\b\x84" B \x88"~" B\x86"B \x88" B\x80\x80\x84"\r~|" T\xAD  B1\x88 \x84B\xFF\xFF\xFF\xFF\x83" \fB\xFF\xFF\xFF\xFF\x83"\f~|" T\xAD|  \r~|   B\x80\x80\xFE\xFF\x83" \f~"  ~|" T\xAD    B\xFF\xFF\xFF\xFF\x83"~|"V\xAD||"V\xAD|  \r~"  \f~|" T\xADB \x86 B \x88\x84|   B \x86|"V\xAD|  \r ~"\r \f~|"\f  ~|"  ~|"B \x88  V\xAD \f \rT\xAD  \fT\xAD||B \x86\x84|" T\xAD|    ~"\f  ~|"B \x88  \fT\xADB \x86\x84|" T\xAD B \x86|" T\xAD||" T\xAD|  B \x86"  ~|" T\xAD|" T\xAD|" T\xAD|"B\x80\x80\x80\x80\x80\x80\xC0\0\x83PE@ Aj!\f\v B?\x88 B\x86 B?\x88\x84! B\x86 B?\x88\x84! B\x86! B\x86\x84!\v A\xFF\xFFN@ \vB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\vB\0!\f\v~ A\0L@A k"\x07A\xFF\0M@ A0j   A\xFF\0j"6 A j   6 Aj   \x07g    \x07g )0 )8\x84B\0R\xAD ) )\x84\x84! )( )\x84! )\0! )\b\f\vB\0!\f\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83 \xADB0\x86\x84\v \v\x84!\v P B\0Y B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7FQ\x1BE@ \v B|"P\xAD|!\v\f\v  B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x85\x84PE@ !\f\v \v  B\x83|" T\xAD|!\v\v \0 7\0 \0 \v7\b A\xE0\0j$\0\v\0 \0!\vr\x7F#\0Ak"$\0  \x006 \0(\0A\x7FG@  Aj6\f  A\fj6\b A\bj!@ \0(\0AF\r\0\v \0(\0E@ \0A6\0 \xF2 \0A\x7F6\0\v\v \0( Aj$\0Ak\v\xB2\x7F#\0Ak"$\0 \0 \0(Aj6  \x006\f@A\xF8\xDE(\0A\xF4\xDE(\0"\0kAu M\x7F@ Aj"\0A\xF8\xDE(\0A\xF4\xDE(\0"kAu"K@#\0A k"\x07$\0@ \0 k"A\xFC\xDE(\0A\xF8\xDE(\0"kAuM@A\xF4\xDE \xB9\f\v A\xF4\xDE(\0kAu j"\0A\x80\x80\x80\x80O@0\0\vA\xFF\xFF\xFF\xFFA\xFC\xDE(\0A\xF4\xDE(\0k"Au" \0 \0 I\x1B A\xFC\xFF\xFF\xFF\x07O\x1B!A\xF8\xDE(\0A\xF4\xDE(\0kAu!A\0! \x07A\fj"\0A\x80\xDF6 \0A\x006\f @A\x80\xDF \xE3!\v \0 6\0 \0  Atj"6\b \0  Atj6\f \0 6 \0 \xCFA\xF4\xDE \0\x96 \0\xD4 \0(\0"@ \0(\f \0( \xE2\v\v \x07A j$\0\f\v \0 I@A\xF8\xDE  \0Atj6\0\v\vA\xF4\xDE(\0 \0\v Atj(\0"\0E\r\0 \0 \0("Ak6 \r\0 \0 \0(\0(\b\0\v (\f!\0 A\x006\fA\xF4\xDE(\0 Atj \x006\0 (\f!\0 A\x006\f@ \0E\r\0 \0 \0("Ak6 \r\0 \0 \0(\0(\b\0\v Aj$\0\v\xBC(\v\x7F#\0Ak" $\0@@@@@@@@@@ \0A\xF4M@A\xFC\xD7(\0"A \0A\vjA\xF8q \0A\vI\x1B"Av"\0v"Aq@@ A\x7FsAq \0j"At"A\xA4\xD8j"\0 (\xAC\xD8"(\b"F@A\xFC\xD7 A~ wq6\0\f\v  \x006\f \0 6\b\v A\bj!\0  Ar6  j" (Ar6\f\v\v A\x84\xD8(\0"\bM\r @@A \0t"A\0 kr  \0tqh"At"A\xA4\xD8j" (\xAC\xD8"\0(\b"F@A\xFC\xD7 A~ wq"6\0\f\v  6\f  6\b\v \0 Ar6 \0 j"\x07  k"Ar6 \0 j 6\0 \b@ \bAxqA\xA4\xD8j!A\x90\xD8(\0!\x7F A \bAvt"qE@A\xFC\xD7  r6\0 \f\v (\b\v!  6\b  6\f  6\f  6\b\v \0A\bj!\0A\x90\xD8 \x076\0A\x84\xD8 6\0\f\v\vA\x80\xD8(\0"\vE\r \vhAt(\xAC\xDA"(Axq k! !@@ ("\0E@ ("\0E\r\v \0(Axq k"   I"\x1B! \0  \x1B! \0!\f\v\v (!  (\f"\0G@ (\b" \x006\f \0 6\b\f \v ("\x7F Aj ("E\r Aj\v!@ !\x07 "\0Aj! \0("\r\0 \0Aj! \0("\r\0\v \x07A\x006\0\f \vA\x7F! \0A\xBF\x7FK\r\0 \0A\vj"Axq!A\x80\xD8(\0"\x07E\r\0A!\bA\0 k! \0A\xF4\xFF\xFF\x07M@ A& A\bvg"\0kvAq \0AtkA>j!\b\v@@@ \bAt(\xAC\xDA"E@A\0!\0\f\vA\0!\0 A \bAvkA\0 \bAG\x1Bt!@@ (Axq k" O\r\0 ! "\r\0A\0! !\0\f\v \0 ("   AvAqj("F\x1B \0 \x1B!\0 At! \r\0\v\v \0 rE@A\0!A \bt"\0A\0 \0kr \x07q"\0E\r \0hAt(\xAC\xDA!\0\v \0E\r\v@ \0(Axq k" I!   \x1B! \0  \x1B! \0("\x7F  \0(\v"\0\r\0\v\v E\r\0 A\x84\xD8(\0 kO\r\0 (!\b  (\f"\0G@ (\b" \x006\f \0 6\b\f\b\v ("\x7F Aj ("E\r Aj\v!@ ! "\0Aj! \0("\r\0 \0Aj! \0("\r\0\v A\x006\0\f\x07\v A\x84\xD8(\0"M@A\x90\xD8(\0!\0@  k"AO@ \0 j" Ar6 \0 j 6\0 \0 Ar6\f\v \0 Ar6 \0 j" (Ar6A\0!A\0!\vA\x84\xD8 6\0A\x90\xD8 6\0 \0A\bj!\0\f \v A\x88\xD8(\0"I@A\x88\xD8  k"6\0A\x94\xD8A\x94\xD8(\0"\0 j"6\0  Ar6 \0 Ar6 \0A\bj!\0\f \vA\0!\0 A/j"\x7FA\xD4\xDB(\0@A\xDC\xDB(\0\f\vA\xE0\xDBB\x7F7\0A\xD8\xDBB\x80\xA0\x80\x80\x80\x807\0A\xD4\xDB A\fjApqA\xD8\xAA\xD5\xAAs6\0A\xE8\xDBA\x006\0A\xB8\xDBA\x006\0A\x80 \v"j"A\0 k"\x07q" M\r\bA\xB4\xDB(\0"@A\xAC\xDB(\0"\b j" \bM  Ir\r \v@A\xB8\xDB-\0\0AqE@@@@@A\x94\xD8(\0"@A\xBC\xDB!\0@ \0(\0"\b M@  \b \0(jI\r\v \0(\b"\0\r\0\v\vA\0v"A\x7FF\r !A\xD8\xDB(\0"\0Ak" q@  k  jA\0 \0kqj!\v  M\rA\xB4\xDB(\0"\0@A\xAC\xDB(\0" j"\x07 M \0 \x07Ir\r\v v"\0 G\r\f\v  k \x07q"v" \0(\0 \0(jF\r !\0\v \0A\x7FF\r A0j M@ \0!\f\vA\xDC\xDB(\0"  kjA\0 kq"vA\x7FF\r  j! \0!\f\v A\x7FG\r\vA\xB8\xDBA\xB8\xDB(\0Ar6\0\v v"A\x7FFA\0v"\0A\x7FFr \0 Mr\r \0 k" A(jM\r\vA\xAC\xDBA\xAC\xDB(\0 j"\x006\0A\xB0\xDB(\0 \0I@A\xB0\xDB \x006\0\v@A\x94\xD8(\0"@A\xBC\xDB!\0@  \0(\0" \0("jF\r \0(\b"\0\r\0\v\f\vA\x8C\xD8(\0"\0A\0 \0 M\x1BE@A\x8C\xD8 6\0\vA\0!\0A\xC0\xDB 6\0A\xBC\xDB 6\0A\x9C\xD8A\x7F6\0A\xA0\xD8A\xD4\xDB(\x006\0A\xC8\xDBA\x006\0@ \0At" A\xA4\xD8j"6\xAC\xD8  6\xB0\xD8 \0Aj"\0A G\r\0\vA\x88\xD8 A(k"\0Ax kA\x07q"k"6\0A\x94\xD8  j"6\0  Ar6 \0 jA(6A\x98\xD8A\xE4\xDB(\x006\0\f\v  M  Kr\r \0(\fA\bq\r \0  j6A\x94\xD8 Ax kA\x07q"\0j"6\0A\x88\xD8A\x88\xD8(\0 j" \0k"\x006\0  \0Ar6  jA(6A\x98\xD8A\xE4\xDB(\x006\0\f\vA\0!\0\f\vA\0!\0\f\vA\x8C\xD8(\0 K@A\x8C\xD8 6\0\v  j!A\xBC\xDB!\0@@  \0(\0"G@ \0(\b"\0\r\f\v\v \0-\0\fA\bqE\r\vA\xBC\xDB!\0@@ \0(\0" M@   \0(j"I\r\v \0(\b!\0\f\v\vA\x88\xD8 A(k"\0Ax kA\x07q"k"\x076\0A\x94\xD8  j"6\0  \x07Ar6 \0 jA(6A\x98\xD8A\xE4\xDB(\x006\0  A' kA\x07qjA/k"\0 \0 AjI\x1B"A\x1B6 A\xC4\xDB)\x007 A\xBC\xDB)\x007\bA\xC4\xDB A\bj6\0A\xC0\xDB 6\0A\xBC\xDB 6\0A\xC8\xDBA\x006\0 Aj!\0@ \0A\x076 \0A\bj \0Aj!\0 I\r\0\v  F\r\0  (A~q6   k"Ar6  6\0\x7F A\xFFM@ A\xF8qA\xA4\xD8j!\0\x7FA\xFC\xD7(\0"A Avt"qE@A\xFC\xD7  r6\0 \0\f\v \0(\b\v! \0 6\b  6\fA\f!A\b\f\vA!\0 A\xFF\xFF\xFF\x07M@ A& A\bvg"\0kvAq \0AtrA>s!\0\v  \x006 B\x007 \0AtA\xAC\xDAj!@@A\x80\xD8(\0"A \0t"qE@A\x80\xD8  r6\0  6\0\f\v A \0AvkA\0 \0AG\x1Bt!\0 (\0!@ "(Axq F\r \0Av! \0At!\0  Aqj"("\r\0\v  6\v  6A\b! "!\0A\f\f\v (\b"\0 6\f  6\b  \x006\bA\0!\0A!A\f\v j 6\0  j \x006\0\vA\x88\xD8(\0"\0 M\r\0A\x88\xD8 \0 k"6\0A\x94\xD8A\x94\xD8(\0"\0 j"6\0  Ar6 \0 Ar6 \0A\bj!\0\f\vA\xF8\xD7A06\0A\0!\0\f\v \0 6\0 \0 \0( j6 Ax kA\x07qj"\b Ar6 Ax kA\x07qj"  \bj"k!\x07@A\x94\xD8(\0 F@A\x94\xD8 6\0A\x88\xD8A\x88\xD8(\0 \x07j"\x006\0  \0Ar6\f\vA\x90\xD8(\0 F@A\x90\xD8 6\0A\x84\xD8A\x84\xD8(\0 \x07j"\x006\0  \0Ar6 \0 j \x006\0\f\v ("\0AqAF@ \0Axq! (\f!@ \0A\xFFM@ (\b" F@A\xFC\xD7A\xFC\xD7(\0A~ \0Avwq6\0\f\v  6\f  6\b\f\v (!@  G@ (\b"\0 6\f  \x006\b\f\v@ ("\0\x7F Aj ("\0E\r Aj\v!@ ! \0"Aj! \0("\0\r\0 Aj! ("\0\r\0\v A\x006\0\f\vA\0!\v E\r\0@ ("\0At"(\xAC\xDA F@ A\xAC\xDAj 6\0 \rA\x80\xD8A\x80\xD8(\0A~ \0wq6\0\f\v@  (F@  6\f\v  6\v E\r\v  6 ("\0@  \x006 \0 6\v ("\0E\r\0  \x006 \0 6\v \x07 j!\x07  j"(!\0\v  \0A~q6  \x07Ar6  \x07j \x076\0 \x07A\xFFM@ \x07A\xF8qA\xA4\xD8j!\0\x7FA\xFC\xD7(\0"A \x07Avt"qE@A\xFC\xD7  r6\0 \0\f\v \0(\b\v! \0 6\b  6\f  \x006\f  6\b\f\vA! \x07A\xFF\xFF\xFF\x07M@ \x07A& \x07A\bvg"\0kvAq \0AtrA>s!\v  6 B\x007 AtA\xAC\xDAj!\0@@A\x80\xD8(\0"A t"qE@A\x80\xD8  r6\0 \0 6\0\f\v \x07A AvkA\0 AG\x1Bt! \0(\0!@ "\0(Axq \x07F\r Av! At! \0 Aqj"("\r\0\v  6\v  \x006  6\f  6\b\f\v \0(\b" 6\f \0 6\b A\x006  \x006\f  6\b\v \bA\bj!\0\f\v@ \bE\r\0@ ("At"(\xAC\xDA F@ A\xAC\xDAj \x006\0 \0\rA\x80\xD8 \x07A~ wq"\x076\0\f\v@  \b(F@ \b \x006\f\v \b \x006\v \0E\r\v \0 \b6 ("@ \0 6  \x006\v ("E\r\0 \0 6  \x006\v@ AM@   j"\0Ar6 \0 j"\0 \0(Ar6\f\v  Ar6  j" Ar6  j 6\0 A\xFFM@ A\xF8qA\xA4\xD8j!\0\x7FA\xFC\xD7(\0"A Avt"qE@A\xFC\xD7  r6\0 \0\f\v \0(\b\v! \0 6\b  6\f  \x006\f  6\b\f\vA!\0 A\xFF\xFF\xFF\x07M@ A& A\bvg"\0kvAq \0AtrA>s!\0\v  \x006 B\x007 \0AtA\xAC\xDAj!@@ \x07A \0t"qE@A\x80\xD8  \x07r6\0  6\0  6\f\v A \0AvkA\0 \0AG\x1Bt!\0 (\0!@ "(Axq F\r \0Av! \0At!\0  Aqj"\x07("\r\0\v \x07 6  6\v  6\f  6\b\f\v (\b"\0 6\f  6\b A\x006  6\f  \x006\b\v A\bj!\0\f\v@ E\r\0@ ("At"(\xAC\xDA F@ A\xAC\xDAj \x006\0 \0\rA\x80\xD8 \vA~ wq6\0\f\v@  (F@ \x006\f\v \x006\v \0E\r\v \0 6 ("@ \0 6  \x006\v ("E\r\0 \0 6  \x006\v@ AM@   j"\0Ar6 \0 j"\0 \0(Ar6\f\v  Ar6  j" Ar6  j 6\0 \b@ \bAxqA\xA4\xD8j!\0A\x90\xD8(\0!\x7FA \bAvt"\x07 qE@A\xFC\xD7  \x07r6\0 \0\f\v \0(\b\v! \0 6\b  6\f  \x006\f  6\b\vA\x90\xD8 6\0A\x84\xD8 6\0\v A\bj!\0\v Aj$\0 \0\v\0\x9C\0\v;\x7F#\0Ak"$\0  \x006\f (\f"\0(\0"@ \0 6 \0(\b !\v Aj$\0\vu~ \0  ~  ~| B \x88" B \x88"~| B\xFF\xFF\xFF\xFF\x83" B\xFF\xFF\xFF\xFF\x83"~"B \x88  ~|"B \x88|  ~ B\xFF\xFF\xFF\xFF\x83|"B \x88|7\b \0 B\xFF\xFF\xFF\xFF\x83 B \x86\x847\0\v\xC1\x7F \0-\0\0A qE@@ \0("\x7F  \0\xC9\r \0(\v \0("k I@ \0   \0($\0\f\v@@ E \0(PA\0Hr\r\0 !@  j"Ak-\0\0A G@ Ak"\r\f\v\v \0   \0($\0 I\r  k! \0(!\f\v !\v   Y \0 \0( j6\v\v\v\x7FA9" \0(\x006\0 \v\xC0\x7F@  kAH\r\0 \0( \0,\0\v" A\0H\x1BE\r\0  \x8F \0(\0 \0 \0,\0\v"A\0H"\x1B" \0(  \x1Bj! Ak!\0@@@ -\0\0"Ak! \0 M\r\0 A\xFFqA\xFD\0M@ (\0 G\r\v Aj!   kAJj!\f\v\v A\xFFqA\xFD\0K\r \0(\0Ak I\r\v A6\0\v\vP~@ A\xC0\0q@  A@j\xAD\x86!B\0!\f\v E\r\0  \xAD"\x86 A\xC0\0 k\xAD\x88\x84!  \x86!\v \0 7\0 \0 7\b\vi\x7F#\0A\x80k"$\0 A\x80\xC0q  LrE@    k"A\x80 A\x80I"\x1B\xC6 E@@ \0 A\x803 A\x80k"A\xFFK\r\0\v\v \0  3\v A\x80j$\0\v\0A\0\v<\x7FA \0 \0AM\x1B!@@ /"\0\r\0A\xB4\xEC(\0"E\r\0 \r\0\f\v\v \0E@0\0\v \0\v \0 \0(\0C\v \0 \0(\0A\xC0\v\xCD \x7F~#\0A\xF0\0k"$\0 B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83! @@ P" B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83" B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0}B\x80\x80\x80\x80\x80\x80\xC0\x80\x80\x7FT P\x1BE@ B\0R B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0}"\vB\x80\x80\x80\x80\x80\x80\xC0\x80\x80\x7FV \vB\x80\x80\x80\x80\x80\x80\xC0\x80\x80\x7FQ\x1B\r\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84! !\f\v P B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84!\f\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@B\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0   \x85  \x85B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x85\x84P"\x1B!B\0  \x1B!\f\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P\r  \x84P@  \x84B\0R\r  \x83!  \x83!\f\v  \x84PE\r\0 ! !\f\v    T V Q\x1B"\b\x1B!   \b\x1B"\fB\xFF\xFF\xFF\xFF\xFF\xFF?\x83!   \b\x1B"\vB0\x88\xA7A\xFF\xFFq!\x07 \fB0\x88\xA7A\xFF\xFFq"E@ A\xE0\0j P"\x1ByB\xC0\0B\0 \x1B|\xA7"Ak6 )h! )\`! A k!\v   \b\x1B! \vB\xFF\xFF\xFF\xFF\xFF\xFF?\x83! \x07~  A\xD0\0j     P"\x07\x1ByB\xC0\0B\0 \x07\x1B|\xA7"\x07Ak6A \x07k!\x07 )P! )X\vB\x86 B=\x88\x84B\x80\x80\x80\x80\x80\x80\x80\x84! B\x86 B=\x88\x84  \x85!~ B\x86"  \x07F\r\0  \x07k"\x07A\xFF\0K@B\0!B\f\v A@k  A\x80 \x07k6 A0j   \x07g )8! )0 )@ )H\x84B\0R\xAD\x84\v! B\x80\x80\x80\x80\x80\x80\x80\x84!\v B\x86! @ B\0S@B\0!B\0! \x85  \v\x85\x84P\r }! \v } V\xAD}"B\xFF\xFF\xFF\xFF\xFF\xFF\xFFV\r A j     P"\x07\x1ByB\xC0\0B\0 \x07\x1B\x84\xA7A\fk"\x076  \x07k! )(! ) !\f\v |" T\xAD  \v||"B\x80\x80\x80\x80\x80\x80\x80\b\x83P\r\0 B\x83 B?\x86 B\x88\x84\x84! Aj! B\x88!\v \fB\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x83! A\xFF\xFFN@ B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!B\0!\f\vA\0!\x07@ A\0J@ !\x07\f\v Aj   A\xFF\0j6   A kg )\0 ) )\x84B\0R\xAD\x84! )\b!\v B=\x86 B\x88\x84! B\x88B\xFF\xFF\xFF\xFF\xFF\xFF?\x83 \x07\xADB0\x86\x84 \x84!@@ \xA7A\x07q"AG@    AK\xAD|"V\xAD|!\f\v    B\x83|"V\xAD|!\f\v E\r\v\v \0 7\0 \0 7\b A\xF0\0j$\0\v \0 \0A\x9C\xE0^\v \0 \0A\xA4\xE0^\v\x84\x7F~#\0Ak"$\0 \0~ E@B\0\f\v   Au"s k"\xADB\0 g"A\xD1\0j6 )\bB\x80\x80\x80\x80\x80\x80\xC0\0\x85A\x9E\x80 k\xADB0\x86|B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7FB\0 A\0H\x1B\x84! )\0\v7\0 \0 7\b Aj$\0\v1\x7F \0(\f" \0(F@ \0 \0(\0((\0\0\v -\0\0 \0 Aj6\f\v'\x7F \0(\f" \0(F@ \0 \0(\0($\0\0\v -\0\0\v1\x7F \0(\f" \0(F@ \0 \0(\0((\0\0\v (\0 \0 Aj6\f\v'\x7F \0(\f" \0(F@ \0 \0(\0($\0\0\v (\0\v\xAA\f\b\x7F\x7FA\0 E\r\0 \0A\x7Fs! AO@@ AqE\r\0 -\0\0 sA\xFFqAt(\xE03 A\bvs! Ak"\0E Aj"AqErE@ -\0 sA\xFFqAt(\xE03 A\bvs! Ak"\0E Aj"AqErE@ -\0 sA\xFFqAt(\xE03 A\bvs! Ak"\0E Aj"AqErE@ -\0 sA\xFFqAt(\xE03 A\bvs! Aj! Ak!\f\v \0! !\f\v \0! !\f\v \0! !\v An"\bAll! @ \bAk" E@A\0!\f\v !\0A\0!@ \0( \x07s"\x07AvA\xFC\x07q(\xE0S \x07AvA\xFC\x07q(\xE0K \x07AvA\xFC\x07q(\xE0C \x07A\xFFqAt(\xE0;sss!\x07 \0(\f s"AvA\xFC\x07q(\xE0S AvA\xFC\x07q(\xE0K AvA\xFC\x07q(\xE0C A\xFFqAt(\xE0;sss! \0(\b s"AvA\xFC\x07q(\xE0S AvA\xFC\x07q(\xE0K AvA\xFC\x07q(\xE0C A\xFFqAt(\xE0;sss! \0( s"AvA\xFC\x07q(\xE0S AvA\xFC\x07q(\xE0K AvA\xFC\x07q(\xE0C A\xFFqAt(\xE0;sss! \0(\0 s"AvA\xFC\x07q(\xE0S AvA\xFC\x07q(\xE0K AvA\xFC\x07q(\xE0C A\xFFqAt(\xE0;sss! \0Aj!\0 Ak" \r\0\v  \bAljAk!\v  j! ( (\f (\b ( (\0 s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\xFFqAt(\xE03 ss \0A\bvs"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\xFFqAt(\xE03 ss \0A\bvs"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\xFFqAt(\xE03 ss \0A\bvs"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\xFFqAt(\xE03 \x07ss \0A\bvs"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s"\0A\bv \0A\xFFqAt(\xE03s! Aj!\v A\x07K@@ -\0\0 sA\xFFqAt(\xE03 A\bvs"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0 \0sA\xFFqAt(\xE03s"\0A\bv -\0\x07 \0sA\xFFqAt(\xE03s! A\bj! A\bk"A\x07K\r\0\v\v@ E\r\0 -\0\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs! AF\r\0 -\0 sA\xFFqAt(\xE03 A\bvs!\v A\x7Fs\v\v\x97\x7F#\0A@j"$\0 \0 \0(\0"A\bk(\0"j!@ Ak(\0"( (F@A\0  \x1B!\0\f\v \0 N@ B\x007 A\x006  6\f  \x006\b  6 B\x007 B\x007$ B\x007, A\x006< B\x81\x80\x80\x80\x80\x80\x80\x8074  Aj  AA\0 (\0(\v\0 (\r\v B\x007 A\x006 A\x98\xC46\f  \x006\b  6 B\x007 B\x007$ B\x007, B\x007\x003 A\x006< A:\0;  Aj AA\0 (\0( \0A\0!\0@@ ((\0\v (A\0 ($AF\x1BA\0 ( AF\x1BA\0 (,AF\x1B!\0\f\v (AG@ (,\r ( AG\r ($AG\r\v (!\0\v A@k$\0 \0\v\0 \0A\x006\b \0B\x007\0\vc\0 (A\xB0q"A F@ \v@ AG\r\0@@ \0-\0\0"A+k\0\0\v \0Aj\v A0G  \0kAHr\r\0 \0-\0A rA\xF8\0G\r\0 \0Aj!\0\v \0\v1\x7FA\xCC\xCF(\0! \0@A\xCC\xCFA\xD4\xCE \0 \0A\x7FF\x1B6\0\vA\x7F  A\xD4\xCEF\x1B\v\0 \0(\0"\0@ \0H\v\vA\x7F \0 7p \0 \0(, \0("k\xAC7x \0 P  \0(\b"\0 k\xACYr\x7F \0  \xA7j\v6h\vs\x7F \0A\x90\xFC\x006\0 \0(@ \0((!@ @A\0 \0 Ak"At" \0($j(\0 \0( j(\0\x07\0\f\v\v \0Aj\xF3 \0( ! \0($! \0(0! \0(<!\v \0\v\xEC\x7F \0E@A\xC8\xCC(\0@A\xC8\xCC(\0L!\vA\xF8\xCD(\0@A\xF8\xCD(\0L r!\vA\xB0\xCE(\0"\0@@ \0(L \0( \0(G@ \0L r!\v \0(8"\0\r\0\v\v \v \0(LA\0H!@@ \0( \0(F\r\0 \0A\0A\0 \0($\0 \0(\r\0A\x7F!\f\v \0(" \0(\b"G@ \0  k\xACA \0((\0\vA\0! \0A\x006 \0B\x007 \0B\x007 \r\0\v \v-\0 E@ \0( (F\v \0 F@A\v \0( (\x9BE\v\xDB\x7F#\0Ak"$\0  6\fA\0!@ \x7FA \0 A\fj(\r\0A A\xC0\0 \0:" (\0(\f\0E\r\0  A\0 (\0(4\0!@@ \0Q A0k! \0 A\fj( AHr\r\0 A\xC0\0 \0:" (\0(\f\0E\r Ak!  A\0 (\0(4\0 A lj!\f\v\v \0 A\fj(E\rA\v (\0r6\0\v Aj$\0 \v\xF6\x7F#\0Ak"$\0  6\f@@ \0 A\fj)@A\0!A!\f\vA\0!A! \0;"\x07A\0H\r\0 (\b \x07Atj-\0\0A\xC0\0qE\r\0  \x07A\0 (\0($\0!@@ \0S A0k! \0 A\fj) AHr\r\0 \0;"A\0H\r (\b Atj-\0\0A\xC0\0qE\r Ak!  A\0 (\0($\0 A lj!\f\v\v \0 A\fj)E\rA!\v  (\0 r6\0\v Aj$\0 \v\x90\x7F#\0Ak"$\0  6\f  H6\b (\f!#\0Ak"$\0  6\f  6\bA\x7F!@A\0A\0  \x9A"A\0H\r\0 \0 Aj"/"\x006\0 \0E\r\0 \0   (\f\x9A!\v Aj$\0 A\bjI Aj$\0 \v\f\0 \0(\0B \0\v.\0@ \0(A\xCA\0q"\0@ \0A\xC0\0F@A\b\v \0A\bG\rA\vA\0\vA \v\f\0 \0(\0@ \0\v\xCE~\x7F#\0Ak"$\0 \xBD"B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x07\x83! \0~ B4\x88B\xFF\x83"PE@ B\xFFR@ B\x88! B\x80\xF8\0|! B<\x86\f\v B\x88!B\xFF\xFF! B<\x86\f\v P@B\0!B\0\f\v  B\0 y\xA7"\x07A1j6 )\bB\x80\x80\x80\x80\x80\x80\xC0\0\x85!A\x8C\xF8\0 \x07k\xAD! )\0\v7\0 \0 B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x83 B0\x86\x84 \x847\b Aj$\0\v\0 \0A\x80\x80\x80\x80O@A\xBFA\0\xDC\0\v \0At9\v\x85\x7F#\0Ak"\b$\0 \b 6\b \b 6\f \bAj" $ =! \b(# A\x006\0A\0!@@  \x07F r\r@ \bA\fj \bA\bj(\r\0@ (\0A\0 (\0(4\0A%F@ Aj \x07F\rA\0!\x7F@ (A\0 (\0(4\0"A\xC5\0F\r\0A! A\xFFqA0F\r\0 \f\v A\bj \x07F\rA\b! ! (\bA\0 (\0(4\0\v! \b \0 \b(\f \b(\b      \0(\0($\f\x006\f  jAj!\f\v A (\0 (\0(\f\0@@ \x07 Aj"G@ A (\0 (\0(\f\0\r\v\v@ \bA\fj \bA\bj(\r A \b(\fC (\0(\f\0E\r \b(\fB\f\0\v\0\v \b(\fC (\0(\0 (\0 (\0(\0F@ \b(\fB Aj!\f\v A6\0\v (\0!\f\v\v A6\0\v \bA\fj \bA\bj(@  (\0Ar6\0\v \b(\f \bAj$\0\v\xB1\x7F#\0Ak"\b$\0 \b 6\b \b 6\f \bAj" $ >! \b(# A\x006\0A\0!@@  \x07F r\r@ \bA\fj \bA\bj)\r\0@ ,\0\0A\0 (\0($\0A%F@ Aj \x07F\rA\0!\x7F@ ,\0A\0 (\0($\0"A\xC5\0F\r\0A! A\xFFqA0F\r\0 \f\v Aj \x07F\rA! ! ,\0A\0 (\0($\0\v! \b \0 \b(\f \b(\b      \0(\0($\f\x006\f  jAj!\f\v@ ,\0\0"A\0H\r\0 (\b" Atj-\0\0AqE\r\0@@ \x07 Aj"F@ \x07!\f\v ,\0\0"A\0H\r\0  Atj-\0\0Aq\r\v\v@ \bA\fj \bA\bj)\r \b(\fA"A\x80q\r (\b A\xFF\0qAtj-\0\0AqE\r \b(\f@\f\0\v\0\v \b(\fA\xC0 (\0(\f\0 ,\0\0 (\0(\f\0F@ \b(\f@ Aj!\f\v A6\0\v (\0!\f\v\v A6\0\v \bA\fj \bA\bj)@  (\0Ar6\0\v \b(\f \bAj$\0\v<\0 \0,\0\vA\0H@ \0(\b \0(\0!\v \0 (\b6\b \0 )\x007\0 A\0:\0\v A\0:\0\0\v\0 @ \0  \xFC \0\0\v \0\v\xC3\x7F#\0Ak"\x07$\0@ \0E\r\0 (\f!  k"A\0J@ \0   \0(\0(0\0 G\r\v  k" H@ \x07Aj" k" \xE1 \0 \x07(  \x07,\0A\0H\x1B  \0(\0(0\0!    G\r\v  k"A\0J@ \0   \0(\0(0\0 G\r\v A\x006\f \0!\b\v \x07Aj$\0 \b\v\f\0 \0A\x82\x86\x80 6\0\0\v\xCC\x7F#\0Ak"\x07$\0@ \0E\r\0 (\f!  kAu"A\0J@ \0   \0(\0(0\0 G\r\v  kAu" H@ \x07Aj" k" \xDF \0 \x07(  \x07,\0A\0H\x1B  \0(\0(0\0!    G\r\v  kAu"A\0J@ \0   \0(\0(0\0 G\r\v A\x006\f \0!\b\v \x07Aj$\0 \b\v9\x7F#\0Ak"$\0  6\f  H6\b \0A  (\f\x9A A\bjI Aj$\0\vK\x7F \0(\0!\0 -" \0(\f \0(\b"kAuI\x7F  Atj(\0A\0GA\0\vE@0\0\v \0(\b Atj(\0\v\0 \0A F \0A kAIr\v\xD7\x7F@A\x84\xCC(\0"\0A\0N@ \0E\rA\x84\xCF(\0 \0A\xFF\xFF\xFF\xFFqG\r\v@A\x88\xCC(\0A F\r\0A\xCC\xCB(\0"\0A\xC8\xCB(\0F\r\0A\xCC\xCB \0Aj6\0 \0A :\0\0\vA\xB8\xCB\x9F\vA\x84\xCCA\x84\xCC(\0"\0A\xFF\xFF\xFF\xFF \0\x1B6\0@@A\x88\xCC(\0A F\r\0A\xCC\xCB(\0"\0A\xC8\xCB(\0F\r\0A\xCC\xCB \0Aj6\0 \0A :\0\0\f\vA\xB8\xCB\x9F\vA\x84\xCC(\0A\x84\xCCA\x006\0\v+\x7F#\0Ak"$\0  6\fA\xB8\xCB \0 A\0A\0\xD0 Aj$\0\v^\x7F \0A\x006\b \0B\x007\0 (\0! (" k"Au"@ \0 \xA8 \0(! E  FrE@   \xFC \0\0\v \0  j6\v \0\v?\x7F@ \0 F\r\0@ \0 Ak"O\r \0-\0\0! \0 -\0\0:\0\0  :\0\0 \0Aj!\0\f\0\v\0\v\v\xDB\x7F~A!@ \0B\0R B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0V B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1B\r\0 B\0R B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0V B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1B\r\0 \0 \x84  \x84\x84P@A\0\v  \x83B\0Y@ \0 T  S  Q\x1B@A\x7F\v \0 \x85  \x85\x84B\0R\v \0 V  U  Q\x1B@A\x7F\v \0 \x85  \x85\x84B\0R!\v \v'\x7F#\0Ak"$\0  6\f \0A\xE4\0  \x9A Aj$\0\v\xD7\x7F#\0Ak"$\0 \0A\x006#\0Ak"$\0 A\0:\0@ \0 \0(\0"A\fk(\0j"(E@  \0 (H"\x7F \xC4 \0(\0 \vA\fk(\0j(E:\0\f\v A\x99\v Aj$\0A! -\0AF@ \0 \0 \0(\0A\fk(\0j("   (\0( \0"6AA\0  G\x1B!\v \0 \0(\0A\fk(\0j \x99 Aj$\0\vP~@ A\xC0\0q@  A@j\xAD\x88!B\0!\f\v E\r\0 A\xC0\0 k\xAD\x86  \xAD"\x88\x84!  \x88!\v \0 7\0 \0 7\b\vC\x7F@ E\r\0@ \0-\0\0" -\0\0"F@ Aj! \0Aj!\0 Ak"\r\f\v\v  k!\v \v \0A\x97\xD6\0\v\x88\x7F@ \xA5"A\xF7\xFF\xFF\xFFI@@@ AO@ Ar"AjU! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\f\v \0 :\0\v E\r\v At"E\r\0 \0  \xFC \0\0\v \0 AtjA\x006\0\f\v0\0\v\v\xBB\x7F (\0!\x07A\0 \0(\0" \0(A\xE3\0F"\x1BA\x7FA (\0" k"At  F\x1B A\xFF\xFF\xFF\xFF\x07O\x1B"\b\x9D"@@ E@ \0 6\0\f\v \0(\0! @   \xFC \0\0\v \0 6\0 E\r\0  \0(\0 \0(\0!\v \0A\xE4\x006   \x07 kj6\0  \0(\0 \bA|qj6\0\v0\0\vA\x7F#\0Ak"$\0  6\fA\xB0 A\xFC A\xDD,A A\fj"4A\xFC A\xE1,A 4 Aj$\0 \0\v\xFA\x7F#\0Ak" $\0 \x006\f@@@ (\0"\v G\r\0 (\` \0F\x7FA+ \0 (dG\rA-\v!\0  \vAj6\0 \v \0:\0\0\f\v@ \0 G\r\0 ( ,\0\v"\0 \0A\0H\x1BE\r\0A\0!\0 \b(\0" \x07kA\x9FJ\r (\0!\0 \b Aj6\0  \x006\0\f\vA\x7F!\0 A\xE8\0j A\fj\xB1 kAu"AJ\r@@@ A\bk\0\0\v  J\r\f\v AG AHr\r\0 (\0" F  kAJr\r Ak-\0\0A0G\rA\0!\0 A\x006\0  Aj6\0  -\0\xD0\x85:\0\0\f\v  (\0"\0Aj6\0 \0 A\xD0\x85j-\0\0:\0\0  (\0Aj6\0A\0!\0\f\vA\0!\0 A\x006\0\v Aj$\0 \0\v \0 \0A\xE4\xE0^\v\xFC\x7F#\0Ak" $\0 \0:\0@@@ (\0"\v G\r\0 \0A\xFFq"\f -\0F\x7FA+ \f -\0G\rA-\v!\0  \vAj6\0 \v \0:\0\0\f\v@ \0 G\r\0 ( ,\0\v"\0 \0A\0H\x1BE\r\0A\0!\0 \b(\0" \x07kA\x9FJ\r (\0!\0 \b Aj6\0  \x006\0\f\vA\x7F!\0 Aj Aj\xB4 k"AJ\r@@@ A\bk\0\0\v  J\r\f\v AG AHr\r\0 (\0" F  kAJr\r Ak-\0\0A0G\rA\0!\0 A\x006\0  Aj6\0  -\0\xD0\x85:\0\0\f\v  (\0"\0Aj6\0 \0 A\xD0\x85j-\0\0:\0\0  (\0Aj6\0A\0!\0\f\vA\0!\0 A\x006\0\v Aj$\0 \0\v \0 \0A\xDC\xE0^\v\0 \0\vf\x7F~#\0Ak"$\0 \0~ E@B\0\f\v  \xADB\0A\xF0\0 g"Ask6 )\bB\x80\x80\x80\x80\x80\x80\xC0\0\x85A\x9E\x80 k\xADB0\x86|! )\0\v7\0 \0 7\b Aj$\0\v\0 \0A\xDF\0q \0 \0A\xE1\0kAI\x1B\v<\0 \0A\x006\b \0B\x007\0 \0 (\x006\0 \0 (6 \0 (\b6\b A\x006\b B\x007\0\v,\x7F \0A\x006\b \0B\x007\0 \0 (\0" ("  k\xC2 \0\vW\x7F~@A\xCC\xCC(\0"\xAD \0\xADB\x07|B\xF8\xFF\xFF\xFF\x83|"B\xFF\xFF\xFF\xFFX@ \xA7"\0?\0AtM\r \0\r\vA\xF8\xD7A06\0A\x7F\vA\xCC\xCC \x006\0 \v\xA7\x7F \0( \0(\0"kAu" I@#\0A k"$\0@  k" \0(\b \0("kAuM@ \0 \xB9\f\v A\fj \0  \0(\0kAu j\x86 \0( \0(\0kAu \0\xB8" \xCF \0 \x96 \xB5\v A j$\0\v  I@ \0  Atj6\v\vt\x7F~ \0B\x80\x80\x80\x80Z@@ Ak" \0" \0B \x80"\0B ~}\xA7A0r:\0\0 B\xFF\xFF\xFF\xFF\x9FV\r\0\v\v \0PE@ \0\xA7!@ Ak"  A n"A lkA0r:\0\0 A K !\r\0\v\v \v}\x7F@@ \0"AqE\r\0 -\0\0E@A\0\v@ Aj"AqE\r -\0\0\r\0\v\f\v@ "Aj!A\x80\x82\x84\b (\0"k rA\x80\x81\x82\x84xqA\x80\x81\x82\x84xF\r\0\v@ "Aj! -\0\0\r\0\v\v  \0k\v\xBF\x7F \0( \0(\0"k" I@#\0A k"$\0@  k" \0(\b \0("kM@ \0 \x96\f\v  A\fj \0  j \0(\0k\x83 \0( \0(\0k \0\x8C"(\b"j!@  G@ A\0:\0\0 Aj!\f\v\v  6\b \0 \xA9 \x87\v A j$\0\v  I@ \0  j6\v\v\v\0  6\0A\v<\0 \0,\0\vA\0H@ \0(\b \0(\0!\v \0 (\b6\b \0 )\x007\0 A\0:\0\v A\x006\0\vK\x7F#\0Ak"$\0 A\fj" $  n" (\0(\0\x006\0 \0  (\0(\0 (\f# Aj$\0\vD\x7F#\0Ak"$\0 A\fj" \0$ ="\0A\xD0\x85A\xEA\x85  \0(\0(0\0 (\f# Aj$\0 \vK\x7F#\0Ak"$\0 A\fj" $  p" (\0(\0\0:\0\0 \0  (\0(\0 (\f# Aj$\0\v\x7F\x7F@ y"A\xF7\xFF\xFF\xFF\x07I@@@ A\vO@ A\x07r"Aj9! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\f\v \0 :\0\v E\r\v E\r\0 \0  \xFC \0\0\v \0 jA\0:\0\0\f\vi\0\v\vF\x7F \0A\x80\xFA\0(\0"6\0 \0 A\fk(\0jA\xA0\xFA\0(\x006\0 \0A\xA4\xFA\0(\x006\b \0A\fj\xB0 \0A@kK \0\v\xB5\x07\x7F\x7F \0A\xFF\xFFq! \0Av! AF@  -\0\0j"\0A\xF1\xFFk \0 \0A\xF0\xFFK\x1B"\0 j"At"A\x80\x80\x7F A\x80\x80\x80\x80O@\x85\0\vA\xFF\xFF\xFF\xFF \0(\b \0(\0k"\0Au"   I\x1B \0A\xFC\xFF\xFF\xFF\x07O\x1B\v?\x7F \0(! \0(\b!@  G@ \0 Ak"6\b\f\v\v \0(\0"@ \0(\f !\v\vI\x7F \0("A\bu! \0(\0"\0  Aq\x7F (\0 j(\0 \v j A Aq\x1B  \0(\0( \0\v\xF1\x7FA\xF6\xFF\xFF\xFF\x07 k O@A\xF7\xFF\xFF\xFF\x07!\b \0(\0 \0 \0,\0\vA\0H\x1B! A\xF2\xFF\xFF\xFFM@A\v  j" At"\b  \bK\x1B"A\x07rAj A\vI\x1B!\b\v \b9! @  \xFC \0\0\v @  j \x07 \xFC \0\0\v   j" k"\x07E  FrE@  j j  j j \x07\xFC \0\0\v A G@ !\v \0 6\0 \0 \bA\x80\x80\x80\x80xr6\b \0  j \x07j"\x006 \0 jA\0:\0\0\vi\0\v,\x7F \0 A\xC0\x84=n"At/\xC0\xBB;\0\0 \0Aj  A\xC0\x84=lk\xAB\v\0A\v;\0 \0 6 \0 \x7F 9A\0\v"6\0 \0  j"6\b \0  j6\f \0 6 \0\v\b\0A\xFF\xFF\xFF\xFF\x07\v\0A\xFF\0\v?\x7F@ \0 F\r\0@ \0 Ak"O\r \0(\0! \0 (\x006\0  6\0 \0Aj!\0\f\0\v\0\v\v\xCB \x7F#\0Ak" $\0 =! Aj n" (\0(\0@ (\b ,\0"\x07 \x07A\0H\x1BE@ \0   (\0(0\0    \0kAtj"6\0\f\v  6\0@@ \0"\x07-\0\0"\bA+k\0\0\v \b\xC0 (\0(,\0!\x07  (\0"\bAj6\0 \b \x076\0 \0Aj!\x07\v@  \x07kAH\r\0 \x07-\0\0A0G\r\0 \x07-\0A rA\xF8\0G\r\0 A0 (\0(,\0!\b  (\0"\vAj6\0 \v \b6\0 \x07,\0 (\0(,\0!\b  (\0"\vAj6\0 \v \b6\0 \x07Aj!\x07\v \x07 c  (\0(\0\0!A\0!\vA\0!\b \x07!\x7F  M\x7F  \x07 \0kAtj (\0\x8F (\0@ ("\f Aj"\r ,\0A\0H"\x1B \bj-\0\0E\r\0 \v \f \r \x1B \bj,\0\0G\r\0  (\0"\vAj6\0 \v 6\0A\0!\v \b \b (\b ,\0"\f \fA\0H\x1BAkIj!\b\v ,\0\0 (\0(,\0!\f  (\0"\rAj6\0 \r \f6\0 Aj! \vAj!\v\f\v\v!\v     \0kAtj  F\x1B6\0 Aj  Aj$\0\v\xD0\x7F A\x80q@ \0A+:\0\0 \0Aj!\0\v A\x80\bq@ \0A#:\0\0 \0Aj!\0\v A\x84q"A\x84G@ \0A\xAE\xD4\0;\0\0 \0Aj!\0\v A\x80\x80q!@ -\0\0"@ \0 :\0\0 \0Aj!\0 Aj!\f\v\v \0\x7F@ A\x80G@ AG\rA\xC6\0A\xE6\0 \x1B\f\vA\xC5\0A\xE5\0 \x1B\f\vA\xC1\0A\xE1\0 \x1B A\x84F\r\0A\xC7\0A\xE7\0 \x1B\v:\0\0 A\x84G\v\xB4\x7F~@@@@@@ AkAw\b\0\v \0\x7F  k"AL@A= A\xC0\0 B\x84y\xA7kA\xD1 lA\fv"  At)\xD0\xC2TkAjH\r\v\x7F B\xFF\xFF\xFF\xFFX@  \xA7\xAD\f\v B\x80\xC8\xAF\xA0%Z@  B\x80\xC8\xAF\xA0%\x80"B\x80\xC8\xAF\xA0%~}!  \xA7\xAD!\v  B\x80\xC2\xD7/\x80"\xA7At/\xC0\xBB;\0\0 Aj  B\x80\xC2\xD7/~}\xA7\x8A\v!A\0\v6\f\v \0A\xC0\0 B\x84y\xA7k"  kJ\x7FA=  j"!\x7F BT\x7F@ Ak" \xA7Aq-\0\x91:\0\0 B\x88"B\0R\r\0\vA\0 Ak" \xA7AtA! Aj p" (\0(\0@ (\b ,\0"\x07 \x07A\0H\x1BE@ \0   (\0( \0    \0kj"6\0\f\v  6\0@@ \0"\x07-\0\0"\bA+k\0\0\v \b\xC0 (\0(\0!\x07  (\0"\bAj6\0 \b \x07:\0\0 \0Aj!\x07\v@  \x07kAH\r\0 \x07-\0\0A0G\r\0 \x07-\0A rA\xF8\0G\r\0 A0 (\0(\0!\b  (\0"\vAj6\0 \v \b:\0\0 \x07,\0 (\0(\0!\b  (\0"\vAj6\0 \v \b:\0\0 \x07Aj!\x07\v \x07 c  (\0(\0\0!A\0!\vA\0!\b \x07!\x7F  M\x7F  \x07 \0kj (\0c (\0@ ("\f Aj"\r ,\0A\0H"\x1B \bj-\0\0E\r\0 \v \f \r \x1B \bj,\0\0G\r\0  (\0"\vAj6\0 \v :\0\0A\0!\v \b \b (\b ,\0"\f \fA\0H\x1BAkIj!\b\v ,\0\0 (\0(\0!\f  (\0"\rAj6\0 \r \f:\0\0 Aj! \vAj!\v\f\v\v!\v     \0kj  F\x1B6\0 Aj  Aj$\0\v\x9A\x7F@@@@@@ AkAw\b\0\v \0\x7F  k"A L@A= A ArgkA\xD1 lA\fv"  At(\x90\xBBIkAjH\r\v  \xAD!A\0\v6\f\v \0A Argk"  kJ\x7FA=  j"!\x7F AI\x7F@ Ak" Aq-\0\x91:\0\0 Av"\r\0\vA\0 Ak" AtA"\rE\rA!\v\f\v (\0\v!\bA\0!\r \x07/<@A!\v\f\v \x07/:@A\r!\v\f\v \x07/8@A\f!\v\f\v \x07/6@A\v!\v\f\v \x07/4@A !\v\f\v \x07/2@A !\v\f\v \x07/0@A\b!\v\f\v \x07/.@A\x07!\v\f\v \x07/,@A!\v\f\v \x07/*@A!\v\f\v \x07/(@A!\v\f\v \x07/&@A!\v\f\v \x07/$@A!\v\f\v \x07/"@A!\fA!\vA!\bA\0\f\v  (\0"\0Aj6\0 \0A\xC06\0  (\0"\0Aj6\0 \0A\xC06\0A!\f\f\v \b \v \b \vI\x1B!A!\b@@ \x07A j \bAtj/\0\r \bAj"\b \vG\r\0\v \v!\b\v  \b  \bK\x1B!\fA\v! A\x7F! \x07/""AK\rA AtkA\xFE\xFFq \x07/$"k"A\0H\r At \x07/&"k"A\0H\r At \x07/("k"A\0H\r At \x07/*"k"A\0H\r At \x07/,"k"A\0H\r At \x07/."k"A\0H\r At \x07/0"k"A\0H\r At \x07/2"k"A\0H\r At \x07/4"k"A\0H\r At \x07/6"\x1Bk"A\0H\r At \x07/8"k"A\0H\r At \x07/:"k"A\0H\r At \x07/<"k"A\0H\r At" \rI  \rGA\0 \0E r\x1Br\rA\0! \x07A\0; \x07 ; \x07  j"; \x07  j";\b \x07  j"; \x07  j";\f \x07  j"; \x07  j"; \x07  j"; \x07  j"; \x07  j"; \x07  \x1Bj"; \x07  j"; \x07  j"; \x07  j;@ E\r\0 AG@ Aq A~q!A\0! @  Atj/\0"@ \x07 Atj" /\0"Aj;\0  Atj ;\0\v  Ar"Atj/\0"@ \x07 Atj" /\0"Aj;\0  Atj ;\0\v Aj! Aj" G\r\0\vE\r\v  Atj/\0"E\r\0 \x07 Atj" /\0"Aj;\0  Atj ;\0\vA!A\0! "!A\0!@@@ \0\0\vA! \fA K\rA\x81!A\xD0\xED\0!A\x90\xED\0!A!\f\v \0AF!A\0!A\xD0\xEE\0!A\x90\xEE\0! \0AG@\f\vA! \fA K\r\vA \ft"Ak! (\0!A\0! \f! A\0!A\0!\rA\x7F!@A t!@@\x7FA\0   Atj/\0" AjK\r\0 I@A\0! A\xE0\0\f\v  kAt"\0j/\0! \0 j-\0\0\v!\0A\x7F \b k"t!\x1B  \r vAtj! ! @  \x1Bj" Atj" ;  :\0  \0:\0\0 \r\0\vA \bAkt! @ "\0Av! \0 \rq\r\0\v \x07A j \bAtj" /\0Ak" ;\0 \0Ak \rq \0jA\0 \0\x1B!\r Aj! A\xFF\xFFqE@ \b \vF\r   Atj/\0Atj/\0!\b\v \b \fM\r\0 \r q"\0 F\r\0\vA \b  \f \x1B"k" t! \b \vI@ \v k! \b! @@  \x07A j Atj/\0k"A\0L\r At! Aj" j" \vI\r\0\v ! \vA t!\vA!   j"A\xD4Kq  A\xD0Kqr\r (\0" \0Atj" \f:\0 :\0\0  Atj" kAv; \0!\f\v\v \r@  \rAtj"\0A\0; \0 :\0 \0A\xC0\0:\0\0\v  (\0 Atj6\0\v  \f6\0A\0! \v \v\x9C\x7F ,\0\vA\0N@ \0 (\b6\b \0 )\x007\0\v (\0!@@@ ("A M@ \0 :\0\v\f\v A\xF7\xFF\xFF\xFF\x07O\r A\x07r"Aj9! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\v Aj"@ \0  \xFC \0\0\v\f\vi\0\v\v\xCC\x7F@A\xF6\xFF\xFF\xFF\x07 k O@ \0,\0\vA\0H! \0(\0A\xF7\xFF\xFF\xFF\x07! A\xF2\xFF\xFF\xFFM@A\v  j" At"  K\x1B"A\x07rAj A\vI\x1B!\v \0 \x1B! 9! @   \xFC \0\0\v@  F\r\0  k"\x07E\r\0  j  j \x07\xFC \0\0\v A G@ !\v \0 6\0 \0 A\x80\x80\x80\x80xr6\b\f\vi\0\v \0 6\v\0 \0 \0(\0A\fk(\0j"\0 jK \0\vK\x7F \0("A\bu!\x07 \0(\0"\0   Aq\x7F (\0 \x07j(\0 \x07\v j A Aq\x1B  \0(\0(\v\0\v\x9A\0 \0A:\x005@  \0(G\r\0 \0A:\x004@ \0("E@ \0A6$ \0 6 \0 6 AG\r \0(0AF\r\f\v  F@ \0("AF@ \0 6 !\v \0(0AG\r AF\r\f\v \0 \0($Aj6$\v \0A:\x006\v\vv\x7F \0($"E@ \0 6 \0 6 \0A6$ \0 \0(86\v@@ \0( \0(8G\r\0 \0( G\r\0 \0(AG\r \0 6\v \0A:\x006 \0A6 \0 Aj6$\v\v\x8D\x7F ( \0(\0" \0("kj!  k"@   \xFC \0\0\v  6 \0 \0(\0"6 \0 (6\0  6 \0(! \0 (\b6  6\b \0(\b! \0 (\f6\b  6\f  (6\0\v\x85\x7F@@@ \0,\0\v"A\0N@A ! A F\r \0 AjA\xFF\0q:\0\v\f\v \0(" \0(\bA\xFF\xFF\xFF\xFF\x07qAk"G\r\v \0 A  \xA4 !\v \0 Aj6 \0(\0!\0\v \0 j"\0A\0:\0 \0 :\0\0\v,\x7F \0 A\x90\xCE\0n"At/\xC0\xBB;\0\0 \0Aj  A\x90\xCE\0lk\xAC\v4\x7F \0 A\xE4\0n"At/\xC0\xBB;\0\0 \0  A\xE4\0lkAt/\xC0\xBB;\0 \0Aj\v\xE9\x7F A\xBF\x84=M@ A\x8F\xCE\0M@ A\xE3\0M@ A M@ \0 A0r:\0\0 \0Aj\v \0 At/\xC0\xBB;\0\0 \0Aj\v A\xE7\x07M@ \0 A\xFF\xFFqA\xE4\0n"A0r:\0\0 \0  A\xE4\0lkA\xFF\xFFqAt/\xC0\xBB;\0 \0Aj\v \0 \xAC\v A\x9F\x8DM@ \0 A\x90\xCE\0n"A0j:\0\0 \0Aj  A\x90\xCE\0lk\xAC\v \0 \xAB\v A\xFF\xC1\xD7/M@ A\xFF\xAC\xE2M@ \0 A\xC0\x84=n"A0j:\0\0 \0Aj  A\xC0\x84=lk\xAB\v \0 \x8A\v A\xFF\x93\xEB\xDCM@ \0 A\x80\xC2\xD7/n"A0j:\0\0 \0Aj  A\x80\xC2\xD7/lk\x8A\v \0 A\x80\xC2\xD7/n"At/\xC0\xBB;\0\0 \0Aj  A\x80\xC2\xD7/lk\x8A\v\0 \0(\b*G@ \0(\b\xA6\v \0\v+\x7F#\0Ak"$\0  H6\f \0 \xC5 A\fjI Aj$\0\v\0 \0A\xE8\xF5\x006\0 \0A j  \0\xC3\vT\x7F#\0Ak"$\0\x7F (\0!  \0kAu"@@ \0  \0(\0F\r \0Aj!\0 Ak"\r\0\v\vA\0\v"\0  \0\x1B Aj$\0\v\x9F\x7F#\0Ak"\f$\0 \f \x006\f@@ \0 F@ -\0\0AG\rA\0!\0 A\0:\0\0  (\0"Aj6\0 A.:\0\0 \x07( \x07,\0\v" A\0H\x1BE\r (\0" \bkA\x9FJ\r (\0! Aj6\0  6\0\f\v@@ \0 G\r\0 \x07( \x07,\0\v"\0 \0A\0H\x1BE\r\0 -\0\0AG\r (\0"\0 \bkA\x9FJ\r (\0! \0Aj6\0 \0 6\0A\0!\0 A\x006\0\f\v \v \vA\xF0\0j \fA\fj\xB1 \vk"\0Au"A\x1BJ\r A\xD0\x85j,\0\0!@@ \0A{q"\0A\xD8\0G@ \0A\xE0\0G\r  (\0"G@A\x7F!\0 Ak,\0\0s ,\0\0sG\r\v  Aj6\0  :\0\0\f\v A\xD0\0:\0\0\f\v s"\0 ,\0\0G\r\0  \0\xB9:\0\0 -\0\0AG\r\0 A\0:\0\0 \x07( \x07,\0\v"\0 \0A\0H\x1BE\r\0 (\0"\0 \bkA\x9FJ\r\0 (\0! \0Aj6\0 \0 6\0\v  (\0"\0Aj6\0 \0 :\0\0A\0!\0 AJ\r (\0Aj6\0\f\vA\0!\0\f\vA\x7F!\0\v \fAj$\0 \0\vy\x7F#\0Ak"$\0 A\fj" $ ="A\xD0\x85A\xEC\x85  (\0(0\0  n" (\0(\f\0\x006\0   (\0(\0\x006\0 \0  (\0(\0 (\f# Aj$\0\v*\x7F#\0Ak"$\0 \0 ,\0\0  \0k\xCA"\0  \0\x1B Aj$\0\v\x7F \0\xD4 \0(\0"@ \0(\f !\v\v\x97\x7F#\0Ak"\f$\0 \f \0:\0@@ \0 F@ -\0\0AG\rA\0!\0 A\0:\0\0  (\0"Aj6\0 A.:\0\0 \x07( \x07,\0\v" A\0H\x1BE\r (\0" \bkA\x9FJ\r (\0! Aj6\0  6\0\f\v@@ \0 G\r\0 \x07( \x07,\0\v"\0 \0A\0H\x1BE\r\0 -\0\0AG\r (\0"\0 \bkA\x9FJ\r (\0! \0Aj6\0 \0 6\0A\0!\0 A\x006\0\f\v \v \vAj \fAj\xB4 \vk"A\x1BJ\r A\xD0\x85j,\0\0!@@@@ A~qAk\0\v  (\0"G@A\x7F!\0 Ak,\0\0s ,\0\0sG\r\v  Aj6\0  :\0\0\f\v A\xD0\0:\0\0\f\v s"\0 ,\0\0G\r\0  \0\xB9:\0\0 -\0\0AG\r\0 A\0:\0\0 \x07( \x07,\0\v"\0 \0A\0H\x1BE\r\0 (\0"\0 \bkA\x9FJ\r\0 (\0! \0Aj6\0 \0 6\0\v  (\0"\0Aj6\0 \0 :\0\0A\0!\0 AJ\r (\0Aj6\0\f\vA\0!\0\f\vA\x7F!\0\v \fAj$\0 \0\vy\x7F#\0Ak"$\0 A\fj" $ >"A\xD0\x85A\xEC\x85  (\0( \0  p" (\0(\f\0\0:\0\0   (\0(\0\0:\0\0 \0  (\0(\0 (\f# Aj$\0\vI\x7F \0 6 \0A\x006\f @ U!\v \0 6\0 \0  Atj"6\b \0  Atj6\f \0 6 \0\v6\x7F \0(" Atj!@  F@ \0 6 A\x006\0 Aj!\f\v\v\v~\x7F~#\0A\xA0k"$\0  6<  6 A\x7F6 Aj"B\0J   A\xAD )\b! )\0!\x07 @  (\x88  ( (\x7F#\0Ak"$\0  \x006\f\x7F \0AO@A\xAE A\fj\xC7A\0\f\v \0At(\x98-\v Aj$\0\v\x85\x7F@  k"A\xF7\xFF\xFF\xFF\x07I@@ A M@ \0 :\0\v\f\v A\x07r"Aj9! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\v  k"E  FrE@ \0  \xFC \0\0\v \0 jA\0:\0\0\f\vi\0\v\v6\x7F \0(\b" Atj!@  FE@ A\x006\0 Aj!\f\v\v \0 6\b\vD\x7F#\0Ak"$\0 \0(\0!\0  6\b  \x006 A\x9F6\0A\xED\v a\`A\xB0\xF1\0(\0L Aj$\0\v\`\x7F  \0(" k"\x07j! !@  M@ \0 6 \x07E  FrE@  \x07k  \x07\xFC \0\0\v  -\0\0:\0\0 Aj! Aj!\f\v\v\v\0 \0(\0"\0@ \0\v\v\f\0  \0(\0\0\0\v+\x7F \0(! \0(\b!@  G@ \0 Ak"6\b\f\v\v\v\x07\0 \0\0\v\x7F#\0Ak"$\0  \x006\0A\xEC \xDC\0\v\0  \0(\0j 6\0\v\r\0  \0(\0j(\0\vQ\x7F@ E\r\0 A\x8C\xC6E"E\r\0 (\b \0(\bA\x7Fsq\r\0 \0(\f( (\f(G\r\0 \0(( ((F!\v \v{\x7F \0("Aq!\x7F -\x007AF@ A\bu" E\r (\0 j(\0\f\v A\bu E\r\0  \0(\0(68A\0!A\0\v! \0(\0"\0   j A Aq\x1B \0(\0(\b\0\v\r\0 \0( (F\v\xF6\x7F#\0Ak"$\0  6\fA\x94\xC4(\0" \0 \xCB \0y \0jAk-\0\0A G@@@ (L"\0A\0N@ \0E\rA\x84\xCF(\0 \0A\xFF\xFF\xFF\xFFqG\r\v@ (PA F\r\0 ("\0 (F\r\0  \0Aj6 \0A :\0\0\f\v \x9F\f\v  (L"\0A\xFF\xFF\xFF\xFF \0\x1B6L@@ (PA F\r\0 ("\0 (F\r\0  \0Aj6 \0A :\0\0\f\v \x9F\v (L A\x006L\v\v\x9C\0\v\x88\x7F@@@ \0,\0\v"A\0N@A! AF\r \0 AjA\xFF\0q:\0\v\f\v \0(" \0(\bA\xFF\xFF\xFF\xFF\x07qAk"G\r\v \0 A  \xFF !\v \0 Aj6 \0(\0!\0\v \0 Atj"\0A\x006 \0 6\0\v\x9B\x7FA\xF6\xFF\xFF\xFF k O@A\xF7\xFF\xFF\xFF! \0(\0 \0 \0,\0\vA\0H\x1B! A\xF2\xFF\xFF\xFFM@  j" At"  K\x1BArAj! \v U!@ E\r\0 At"\bE\r\0  \b\xFC \0\0\v@ E\r\0 At"\bE\r\0  Atj \x07 \b\xFC \0\0\v   j"\bk!\x07@  \bF\r\0 \x07At"E\r\0  At"\bj Atj \b j Atj \xFC \0\0\v AG@ !\v \0 6\0 \0 A\x80\x80\x80\x80xr6\b \0  j \x07j"\x006  \0AtjA\x006\0\v0\0\v\x8A\x7F A\xF7\xFF\xFF\xFFI@@ AM@ \0 :\0\v\f\v Ar"AjU! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\v ! \0!@ @  6\0 Ak! Aj!\f\v\v \0 AtjA\x006\0\v0\0\v\xA0\x7F \0(\b"A\xFF\xFF\xFF\xFF\x07qAkA \0,\0\v"A\0H"\x1B" O@ \0(\0 \0 \x1B!@ \x7F @   \xFC \0\0\v \0,\0\v Av\v\xC0A\0H@ \0 6\f\v \0 A\xFF\0q:\0\v\v  jA\0:\0\0\v \0   k \0(  \x1B"\0A\0 \0  \x89\v\x87\x7F A\xF7\xFF\xFF\xFF\x07I@@ A M@ \0 :\0\v\f\v A\x07r"Aj9! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\v ! \0!@ @  :\0\0 Ak! Aj!\f\v\v \0 jA\0:\0\0\vi\0\v\0 \0 F@ \0A\0:\0x\v !\v<\x7F#\0Ak"$\0@@ AK\r\0 \0-\0xAq\r\0 \0A:\0x\f\v U!\0\v Aj$\0 \0\v \0 \0\xAE!\v\0 \0A\xF0\x906\0 \0Aj  \0\v\0 \0A\xC8\x906\0 \0A\fj  \0\v\x80\x7F !\0@@  \x07M \0 Or\r\0 \0,\0\0"A\xFFq!\x7FA A\0N\r\0 ABI\r A_M@  \0kAH\r \0-\0A\xC0qA\x80G\rA\f\v AoM@  \0kAH\r \0-\0 \0,\0!@@ A\xEDG@ A\xE0G\r A\`qA\xA0\x7FF\r\f\v A\xA0\x7FN\r\f\v A\xBF\x7FJ\r\vA\xC0qA\x80G\rA\f\v  \0kAH AtKr\r \0-\0! \0-\0!\b \0,\0!@@@@ A\xF0k\0\v A\xF0\0jA\xFFqA0O\r\f\v A\x90\x7FN\r\f\v A\xBF\x7FJ\r\v \bA\xC0qA\x80G A\xC0qA\x80Gr A?q \bAtA\xC0q AtA\x80\x80\xF0\0q A?qA\ftrrrA\xFF\xFF\xC3\0Kr\rA\v! \x07Aj!\x07 \0 j!\0\f\v\v \0 k\v\xB8\x7F#\0Ak"\0$\0\x7F \0 6\f \0 6\b@@@  O  OrE@ ,\0\0"\bA\xFFq!\x7F \bA\0N@ A\xFF\xFF\xC3\0K\rA\f\v \bABI\r \bA_M@A  kAH\rA!\b -\0" A\xC0qA\x80G\r A?q AtA\xC0qr!A\f\v \bAoM@A!\b  k" AH\r ,\0! @@ A\xEDG@ A\xE0G\r A\`qA\xA0\x7FF\r\f\b\v A\xA0\x7FH\r\f\x07\v A\xBF\x7FJ\r\v AF\r -\0"\bA\xC0qA\x80G\r \bA?q A\ftA\x80\xE0q A?qAtrr!A\f\v \bAtK\rA!\b  k" AH\r ,\0! @@@@ A\xF0k\0\v A\xF0\0jA\xFFqA0O\r\x07\f\v A\x90\x7FN\r\f\v A\xBF\x7FJ\r\v AF\r -\0"\vA\xC0qA\x80G\r AF\r -\0" A\xC0qA\x80G\rA!\b A?q \vAtA\xC0q AtA\x80\x80\xF0\0q A?qA\ftrrr"A\xFF\xFF\xC3\0K\rA\v!\b  6\0 \0  \bj"6\f \0 Aj"6\b\f\v\v  I!\b\v \b\f\vA\v  \0(\f6\0 \x07 \0(\b6\0 \0Aj$\0\v\xF5\0#\0Ak"\0$\0\x7F \0 6\f \0 6\b@@@  O@A\0!\f\vA! (\0"A\xFF\xFF\xC3\0K A\x80pqA\x80\xB0Fr\r\0@ A\xFF\0M@A!  \0(\b"kA\0L\r \0 Aj6\b  :\0\0\f\v A\xFFM@  \0(\b"kAH\r \0 Aj6\b  AvA\xC0r:\0\0 \0 \0(\b"Aj6\b  A?qA\x80r:\0\0\f\v  \0(\b"k! A\xFF\xFFM@ AH\r \0 Aj6\b  A\fvA\xE0r:\0\0 \0 \0(\b"Aj6\b  AvA?qA\x80r:\0\0 \0 \0(\b"Aj6\b  A?qA\x80r:\0\0\f\v AH\r \0 Aj6\b  AvA\xF0r:\0\0 \0 \0(\b"Aj6\b  A\fvA?qA\x80r:\0\0 \0 \0(\b"Aj6\b  AvA?qA\x80r:\0\0 \0 \0(\b"Aj6\b  A?qA\x80r:\0\0\v \0 \0(\fAj"6\f\f\v\v \f\vA\v  \0(\f6\0 \x07 \0(\b6\0 \0Aj$\0\v\x92\x7F !\0@@  M \0 Or\r\0\x7F \0Aj \0-\0\0"\xC0A\0N\r\0 A\xC2I\r A\xDFM@  \0kAH\r \0-\0A\xC0qA\x80G\r \0Aj\f\v A\xEFM@  \0kAH\r \0-\0 \0,\0!@@ A\xEDG@ A\xE0G\r A\`qA\xA0\x7FF\r\f\v A\xA0\x7FN\r\f\v A\xBF\x7FJ\r\vA\xC0qA\x80G\r \0Aj\f\v  \0kAH A\xF4Kr  kAIr\r \0-\0!\x07 \0-\0!\b \0,\0!@@@@ A\xF0k\0\v A\xF0\0jA\xFFqA0O\r\f\v A\x90\x7FN\r\f\v A\xBF\x7FJ\r\v \bA\xC0qA\x80G \x07A\xC0qA\x80Gr \x07A?q \bAtA\xC0q AtA\x80\x80\xF0\0q A?qA\ftrrrA\xFF\xFF\xC3\0Kr\r Aj! \0Aj\v!\0 Aj!\f\v\v \0 k\v\x81\x7F#\0Ak"\0$\0\x7F \0 6\f \0 6\b@@@  O  OrE@A! \0\x7F -\0\0"\xC0A\0N@  ;\0A\f\v A\xC2I\r A\xDFM@A  kAH\r -\0"\bA\xC0qA\x80G\r  \bA?q AtA\xC0qr;\0A\f\v A\xEFM@A!  k" AH\r ,\0!\b@@ A\xEDG@ A\xE0G\r \bA\`qA\xA0\x7FG\r\b\f\v \bA\xA0\x7FN\r\x07\f\v \bA\xBF\x7FJ\r\v AF\r -\0" A\xC0qA\x80G\r  A?q \bA?qAt A\ftrr;\0A\f\v A\xF4K\rA!  k" AH\r -\0"\v\xC0!\b@@@@ A\xF0k\0\v \bA\xF0\0jA\xFFqA0O\r\x07\f\v \bA\x90\x7FN\r\f\v \bA\xBF\x7FJ\r\v AF\r -\0"\bA\xC0qA\x80G\r AF\r -\0" A\xC0qA\x80G\r  kAH\rA! A?q" \bAt"\fA\xC0q \vA\ftA\x80\xE0q A\x07q"AtrrrA\xFF\xFF\xC3\0K\r  \fA\xC0\x07qrA\x80\xB8r;  \bAvAq \vAt" A\xC0q A\btr A! Aj p"\f \f(\0(\0  6\0@@ \0"\b-\0\0"A+k\0\0\v \xC0 (\0(\0!  (\0"\x07Aj6\0 \x07 :\0\0 \0Aj!\b\v@@  \b"kAL\r\0 -\0\0A0G\r\0 -\0A rA\xF8\0G\r\0 A0 (\0(\0!\x07  (\0"\bAj6\0 \b \x07:\0\0 ,\0 (\0(\0!\x07  (\0"\bAj6\0 \b \x07:\0\0 Aj"\b!@  M\r ,\0\0*!\xB8E\r Aj!\f\0\v\0\v@  M\r ,\0\0*!\xB7E\r Aj!\f\0\v\0\v@ (\b ,\0"\x07 \x07A\0H\x1BE@ \b  (\0 (\0( \0  (\0  \bkj6\0\f\v \b c \f \f(\0(\0\0! \b!\x07@  \x07M@  \b \0kj (\0c@ (" Aj" ,\0A\0H"\x1B \rj,\0\0A\0L\r\0 \v   \x1B \rj,\0\0G\r\0  (\0"\vAj6\0 \v :\0\0A\0!\v \r \r (\b ,\0" A\0H\x1BAkIj!\r\v \x07,\0\0 (\0(\0!  (\0"Aj6\0  :\0\0 \x07Aj!\x07 \vAj!\v\f\v\v\v@@@  M@ !\x07\f\v Aj!\x07 ,\0\0"A.G\r \f \f(\0(\f\0\0!  (\0"\bAj6\0 \b :\0\0\v \x07  (\0 (\0( \0  (\0  \x07kj"6\0     \0kj  F\x1B6\0 Aj  Aj$\0\v  (\0(\0!  (\0"\bAj6\0 \b :\0\0 \x07!\f\0\v\0\v\xB9\x7F#\0A@j"$\0A\bAA ("A\xCA\0q"\x07A\bF\x1B \x07A\xC0\0F"\b\x1B! A3j!@ E A\x80qEr\r\0 \b@ A0:\x003 A4j!\f\v \x07A\bG\r\0 A0:\x003 A\xD8\0A\xF8\0 A\x80\x80q\x1B:\x004 A5j!\v A(j  A@k  \x94 ((!@ A\x88\x80qA\x88\x80G\r\0@  F\r  -\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 Aj!\f\0\v\0\v A3j"  G! Aj"\x07 $    Aj" A\fj A\bj \x07\x93 (# \0  (\f (\b  Z A@k$\0\v\xED\b\x7F#\0Ak"$\0A\xA5\bAA\xA0 A\xEE AAA\0A\0\fA\x92\fAA\xF4 A\xA8!AAA\0A\0\fA\x88\xCE-\0\0E@A\x88\xCEA:\0\0A\xAC!A\xB8\xC8\x07\vA\xFC A\x9C%A\xD4%A\0A\x8A&AA\x8D&A\0A\x8D&A\0A\x83A\x8F&A\x07 A\xFC AA\x94&A\x98&A"A\b#\0Ak"\0$\0 \0A 6\fA\xFC A\x9CAA\x9C&A\xA8&A# \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A 6\fA\xFC A\xEDAA\xB0&A\xC0&A$ \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A\v6\fA\xFC A\x83AA\xC8&A\xD0&A% \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A\f6\fA\xFC A\xBF AA\xF8&A\x84'A& \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A\r6\fA\xFC A\xBB AA\x90'A\xA0'A' \0A\fj4A\0A\0A\0 \0Aj$\0A\xFC A\xB8\xC8A\x83A\xBF  A\x94\xCE-\0\0E@A\x94\xCEA:\0\0A\xA8'A\xC0\xC7\x07\vA\xB4*A\xE0*A\x98+A\0A\xCE+AA\x8D&A\0A\x8D&A\0A\xD7A\xD1+A A\xB4*AA\xD4+A\xD8+A(A#\0Ak"\0$\0 \0A6\fA\xB4*A\x9CAA\xDC+A\xE8+A) \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A6\fA\xB4*A\xEDAA\xF0+A\x80,A* \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A6\fA\xB4*A\x83AA\x88,A\x90,A+ \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A6\fA\xB4*A\xBF AA\x9C,A\xA8,A, \0A\fj4A\0A\0A\0 \0Aj$\0#\0Ak"\0$\0 \0A6\fA\xB4*A\xBB AA\xB0,A\xC0,A- \0A\fj4A\0A\0A\0 \0Aj$\0A\xB4*A\xC0\xC7A\x83A\xBF  A\xB0 A\xA9A\xC6,AA\xC8,A\b AjA\xEB A\0\x92A\xB6A\x92#\0Ak"\0$\0 \0A\b6\fA\xB0 A\xC2A\xA8\xC7A\xD4,A \0A\fj"4A\xA8\xC7A\xD8,A\x1B 4 \0Aj$\0A\x8A\vA\flA\xDF\vAlA\x94\vA$lA\xE6\vA0lA\xF5 A<lA\xC8A\xC8\0lA\xB0 A\xE8,A\x94AAA\0A\xE8,A\xA3A\0A\xE8,A\xBDAA\xE8,A\xB9AA\xE8,A\xB5AA\xE8,A\xB1AA\xE8,A\x9FAA\xE8,A\x9BAA\xE8,A\x93A\x07A\xE8,A\x8FA\bA\xD0 A\xFC A\x89-AA\x8B-A\b#\0Ak"\0$\0 \0A\x006\fA\xD0 A\x83A\xE8,A\x8E-A \0A\fj"4A\xE8,A\x92-A! 4 \0Aj$\0A\xD0  Aj$\0\v3\x7F  \0("j!@  F@ \0 6 A\0:\0\0 Aj!\f\v\v\v\xF1\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC R!  \0A\xD0j~! \0A\xC4j  \0A\xC4j} \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xCCC   \0A\xB4j \0A\bj \0(\xC4 \0A\xC4j \0Aj \0A\fj m\r\0 \0(\xCCB\f\v\v@ \0(\xC8 \0,\0\xCF" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9D6\0 \0A\xC4j \0Aj \0(\f 5 \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xB8j  \0A\xC4j  \0A\xD0j$\0\v8\x7F#\0Ak"$\0  6\f  H6\b \0A\xEC\r (\f\xA9 A\bjI Aj$\0\v\xB1~\x7F#\0A k"\b$\0@@@  G@A\xF8\xD7(\0!\fA\xF8\xD7A\x006\0#\0Ak" $\0*#\0Ak" $\0#\0Ak"\v$\0 \v  \bAjA\xBA \v)\0! \v)\b7\b 7\0 \vAj$\0 )\0! )\b7\b 7\0 Aj$\0 )\0! \b )\b7 \b 7\b Aj$\0 \b)! \b)\b!A\xF8\xD7(\0"E\r \b( G\r ! !\x07 A\xC4\0G\r\f\v A6\0\f\vA\xF8\xD7 \f6\0 \b( F\r\v A6\0 ! \x07!\v \0 7\0 \0 7\b \bA j$\0\v\xC0\x7F|#\0Ak"$\0@@@ \0 G@A\xF8\xD7(\0!A\xF8\xD7A\x006\0*#\0Ak"$\0  \0 A\fjA\xBA )\0 )\b\xC4! Aj$\0@A\xF8\xD7(\0"\0@ (\f F\r\f\vA\xF8\xD7 6\0 (\f G\r\f\v \0A\xC4\0G\r\f\v A6\0\f\vD\0\0\0\0\0\0\0\0!\v A6\0\v Aj$\0 \v\xBC\x7F}#\0Ak"$\0@@@ \0 G@A\xF8\xD7(\0!A\xF8\xD7A\x006\0*#\0Ak"$\0  \0 A\fjA\0\xBA )\0 )\b\xAB! Aj$\0@A\xF8\xD7(\0"\0@ (\f F\r\f\vA\xF8\xD7 6\0 (\f G\r\f\v \0A\xC4\0G\r\f\v A6\0\f\vC\0\0\0\0!\v A6\0\v Aj$\0 \v\xBD\x7F~#\0Ak"$\0~ \0 G@@@ \0-\0\0"A-G\r\0 \0Aj"\0 G\r\0\f\vA\xF8\xD7(\0!A\xF8\xD7A\x006\0* \0 A\fj \xBB!\x07@A\xF8\xD7(\0"\0@ (\f G\r \0A\xC4\0G\r A6\0B\x7F\f\vA\xF8\xD7 6\0 (\f F\r\0\f\vB\0 \x07} \x07 A-F\x1B\f\v\v A6\0B\0\v Aj$\0\v\xD8\x7F~#\0Ak"$\0\x7F@ \0 G@@@ \0-\0\0"A-G\r\0 \0Aj"\0 G\r\0\f\vA\xF8\xD7(\0!A\xF8\xD7A\x006\0* \0 A\fj \xBB!\x07@A\xF8\xD7(\0"\0@ (\f G\r \0A\xC4\0F \x07B\xFF\xFF\xFF\xFFVr\r\f\vA\xF8\xD7 6\0  (\fG\r \x07B\x80\x80\x80\x80T\r\v A6\0A\x7F\f\v\v A6\0A\0\f\vA\0 \x07\xA7"\0k \0 A-F\x1B\v Aj$\0\v\xE6\0#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC R! \0A\xC8j  \0A\xD7j\x7F \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xDCj \0A\xD8j)\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xDCA\xC0   \0A\xB4j \0A\bj \0,\0\xD7 \0A\xC8j \0Aj \0A\fjA\xD0\x85o\r\0 \0(\xDC@\f\v\v@ \0(\xCC \0,\0\xD3" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9D6\0 \0A\xC8j \0Aj \0(\f 5 \0A\xDCj \0A\xD8j)@  (\0Ar6\0\v \0(\xDC \0A\xB8j  \0A\xC8j  \0A\xE0j$\0\v\xDB\x7F~#\0Ak"$\0\x7F@ \0 G@@@ \0-\0\0"A-G\r\0 \0Aj"\0 G\r\0\f\vA\xF8\xD7(\0!A\xF8\xD7A\x006\0* \0 A\fj \xBB!\x07@A\xF8\xD7(\0"\0@ (\f G\r \0A\xC4\0F \x07B\xFF\xFFVr\r\f\vA\xF8\xD7 6\0  (\fG\r \x07B\x80\x80T\r\v A6\0A\xFF\xFF\f\v\v A6\0A\0\f\vA\0 \x07\xA7"\0k \0 A-F\x1B\v Aj$\0A\xFF\xFFq\v\xAC\x7F~#\0Ak"$\0@ \0 G@A\xF8\xD7(\0!A\xF8\xD7A\x006\0* \0 A\fj \xA3!@A\xF8\xD7(\0"\0@ (\f G\r \0A\xC4\0G\r A6\0B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F B\0U\x1B!\f\vA\xF8\xD7 6\0 (\f F\r\v\v A6\0B\0!\v Aj$\0 \v\xDD\x7F~#\0Ak"$\0\x7F@ \0 G@@A\xF8\xD7(\0!A\xF8\xD7A\x006\0* \0 A\fj \xA3!@A\xF8\xD7(\0"\0@ (\f G\r \0A\xC4\0G\r A6\0A\xFF\xFF\xFF\xFF\x07 B\0U\r\f\vA\xF8\xD7 6\0 (\f F\r\0\f\v B\xFF\xFF\xFF\xFFwW@ A6\0\f\v B\x80\x80\x80\x80\bY@ A6\0A\xFF\xFF\xFF\xFF\x07\f\v \xA7\f\v\v A6\0A\0\f\vA\x80\x80\x80\x80x\v Aj$\0\v\x88\x7F@  kAu"A\xF7\xFF\xFF\xFFI@@ AM@ \0 :\0\v\f\v Ar"AjU! \0 A\xFF\xFF\xFF\xFF\x07k6\b \0 6\0 \0 6 !\0\v  k"E  FrE@ \0  \xFC \0\0\v \0 jA\x006\0\f\v0\0\v\v\0 \0  B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\xBE\v\x86\b\x7F (\0!@@@@@@@\x7F@@@@ E\r\0 (\0"E\r\0 \0E@ !\f\v A\x006\0 !\f\v@A\xCC\xCF(\0(\0E@ \0E\r E\r\f !@ ,\0\0"@ \0 A\xFF\xBFq6\0 \0Aj!\0 Aj! Ak"\r\f\v\v \0A\x006\0 A\x006\0  k\v ! \0E\r\f\v y\vA!\x07\f\vA\0\f\vA\v!\x07@ \x07E@ -\0\0Av"Ak Au jrA\x07K\r\x7F Aj" A\x80\x80\x80qE\r\0 ,\0\0A@N@ Ak!\f\x07\v Aj" A\x80\x80 qE\r\0 ,\0\0A@N@ Ak!\f\x07\v Aj\v! Ak!A!\x07\f\v@@ Aq ,\0\0"A\0Lr\r\0 (\0"A\x81\x82\x84\bk rA\x80\x81\x82\x84xq\r\0@ Ak! "Aj! ("A\x81\x82\x84\bk rA\x80\x81\x82\x84xqE\r\0\v\v \xC0A\0J@ Ak! Aj!\f\v\v A\xFFqA\xC2k"A2K\r Aj! At(\x80\x84!A\0!\x07\f\0\v\0\v@ \x07E@ E\r\x07@@ -\0\0"\x07\xC0"A\0L\r\0 Aq AIrE@@@ (\0"A\x81\x82\x84\bk rA\x80\x81\x82\x84xq\r \0 A\xFFq6\0 \0 -\06 \0 -\06\b \0 -\06\f \0Aj!\0 Aj! Ak"AK\r\0\v -\0\0!\v A\xFFq!\x07 \xC0A\0L\r\v \0 \x076\0 \0Aj!\0 Aj! Ak"\r\f \v\v \x07A\xC2k"A2K\r Aj! At(\x80\x84!A!\x07\f\v -\0\0"\bAv"Ak  AujrA\x07K\r@@\x7F Aj" \bA\x80k Atr"\x07A\0N\r\0 -\0\0A\x80k"A?K\r  \x07At"\br!\x07 Aj" \bA\0N\r\0 -\0\0A\x80k"A?K\r  \x07Atr!\x07 Aj\v! \0 \x076\0 Ak! \0Aj!\0\f\vA\xF8\xD7A6\0 Ak!\f\vA\0!\x07\f\0\v\0\v Ak! \r -\0\0!\v A\xFFq\r\0 \0@ \0A\x006\0 A\x006\0\v  k\vA\xF8\xD7A6\0 \0E\r\v  6\0\vA\x7F\v  6\0 \v#\x7F \0!@ "Aj! (\0\r\0\v  \0kAu\v\0 \0\xBA@ \0!\v\v%\x7F#\0Ak"$\0  6\f \0A\xE9 \xA9 Aj$\0\v3\x7F A\x80\x80\x80\x80O@\x85\0\v \0 U"6 \0 6\0 \0  Atj6\b\v\xC9\x7F~#\0A\x90k"$\0 A\0A\x90\xFC\v\0 A\x7F6L  \x006, A\xE2\x006  \x006T ! !#\0A\xB0k"$\0 (L@@ (E@ \xC8 (E\r\v -\0\0"E\r@@@@@ A\xFFq"\0_@@ "Aj! -\0_\r\0\v B\0J@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v_\r\0\v (! )pB\0Y@  Ak"6\v  (,k\xAC )x ||!\f\v\x7F@@ \0A%F@ -\0"\0A*F\r \0A%G\r\v B\0J@ -\0\0A%F@@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"_\r\0\v Aj!\f\v ("\0 (hG@  \0Aj6 \0-\0\0!\f\v %!\v -\0\0 G@ )pB\0Y@  (Ak6\v A\0N \rr\r \f \v ( (,k\xAC )x ||! !\f\vA\0!\x07 Aj\f\v@ \0A0k"\0A K\r\0 -\0A$G\r\0#\0Ak" 6\f   \0AtjAk  \0AK\x1B"\0Aj6\b \0(\0!\x07 Aj\f\v (\0!\x07 Aj! Aj\v!A\0!\vA\0! -\0\0"A0kA\xFFqA M@@ A l A\xFFqjA0k! -\0! Aj! A0kA\xFFqA I\r\0\v\v A\xFFqA\xED\0G\x7F A\0! \x07A\0G!\v -\0!A\0! Aj\v"Aj!A!\0@@@@@@ A\xFFqA\xC1\0k:        \0      \v Aj  -\0A\xE8\0F"\0\x1B!A~A\x7F \0\x1B!\0\f\v Aj  -\0A\xEC\0F"\0\x1B!AA \0\x1B!\0\f\vA!\0\f\vA!\0\f\vA\0!\0 !\vA \0 -\0\0"\0A/qAF"\x1B!@ \0A r \0 \x1B"\fA\xDB\0F\r\0@ \fA\xEE\0G@ \fA\xE3\0G\rA  AL\x1B!\f\v \x07  \xAA\f\v B\0J@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v_\r\0\v (! )pB\0Y@  Ak"6\v  (,k\xAC )x ||!\v  \xAC"J@ ("\0 (hG@  \0Aj6\f\v %A\0H\r\v )pB\0Y@  (Ak6\vA!@@@@@@@@@@@@ \fA\xD8\0k!\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\0\v \fA\xC1\0k"\0AKA \0tA\xF1\0qEr\r \v A\bj  A\0\xAD )xB\0 ( (,k\xAC}Q\r \x07E\r )! )\b! \x07 \v \fArA\xF3\0F@ A jA\x7FA\x81\xC6 A\0:\0 \fA\xF3\0G\r\b A\0:\0A A\0:\0. A\x006*\f\b\v A j -\0"\0A\xDE\0F"A\x81\xC6 A\0:\0 Aj Aj \x1B!\x7F@@ AA \x1Bj-\0\0"A-G@ A\xDD\0F\r \0A\xDE\0G!\b \f\v  \0A\xDE\0G"\b:\0N\f\v  \0A\xDE\0G"\b:\0~\v Aj\v!@@ -\0\0"\0A-G@ \0E\r \0A\xDD\0F\r \f\vA-!\0 -\0"E A\xDD\0Fr\r\0 Aj!@  Ak-\0\0"M@ !\0\f\v@ Aj" A jj \b:\0\0  -\0\0"\0I\r\0\v\v !\v A j \0j \b:\0 Aj!\f\0\v\0\vA\b!\f\vA !\f\vA\0!\vB\0!A\0!A\0!A\0!#\0Ak"\b$\0@ AG A$MqE@A\xF8\xD7A6\0\f\v@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0_\r\0\v@@ \0A+k\0\0\vA\x7FA\0 \0A-F\x1B! ("\0 (hG@  \0Aj6 \0-\0\0!\0\f\v %!\0\v@@@@ A\0G AGq \0A0GrE@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A_qA\xD8\0F@A!\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A\xF1\x81j-\0\0AI\r )pB\0Y@  (Ak6\v B\0J\f\v \rA\b!\f\v A \x1B" \0A\xF1\x81j-\0\0K\r\0 )pB\0Y@  (Ak6\v B\0JA\xF8\xD7A6\0\f\v A G\r\0 \0A0k"A M@A\0!\0@ \0A l j"\0A\x99\xB3\xE6\xCCI\x7F (" (hG@  Aj6 -\0\0\f\v %\vA0k"A Mq\r\0\v \0\xAD!\v A K\r B ~! \xAD!@@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A0k"A M  |"B\x9A\xB3\xE6\xCC\x99\xB3\xE6\xCCTqE@ A M\r\f\v B ~" \xAD"B\x7F\x85X\r\v\vA !\f\v@@  Akq@  \0A\xF1\x81j-\0\0"K\r\f\v  \0A\xF1\x81j-\0\0"M\r AlAvA\x07q,\0\xF1\x83!@   t"r! \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A\xF1\x81j-\0\0"M"E A\x80\x80\x80\xC0\0Iq\r\0\v \xAD! \rB\x7F \xAD"\x88" T\r@ \xADB\xFF\x83  \x86\x84! \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A\xF1\x81j-\0\0"M\r  X\r\0\v\f\v@   lj! \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A\xF1\x81j-\0\0"M"E A\xC7\xE3\xF18Iq\r\0\v \xAD! \r \xAD!@  ~" \xADB\xFF\x83"B\x7F\x85V\r  |! \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0A\xF1\x81j-\0\0"M\r \b B\0 B\02 \b)\bP\r\0\v\v\v  \0A\xF1\x81j-\0\0M\r\0@ \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\vA\xF1\x81j-\0\0K\r\0\vA\xF8\xD7A\xC4\x006\0A\0!B\x7F!\v )pB\0Y@  (Ak6\v ArE B\x7FQq@A\xF8\xD7A\xC4\x006\0B~!\f\v  \xAC"\x85 }!\v \bAj$\0 )xB\0 ( (,k\xAC}Q\r \x07E \fA\xF0\0GrE@ \x07 >\0\f\v \x07  \xAA\f\v \x07  \xAB8\0\f\v \x07  \xC49\0\f\v \x07 7\0 \x07 7\b\f\vA Aj \fA\xE3\0G"\x1B!\b\x7F AF@ \x07! \v@ \bAt/"E\r\v B\x007\xA8A\0!@@@ !\0@ \x7F (" (hG@  Aj6 -\0\0\f\v %\v"j-\0!E\r  :\0\x1B Aj A\x1BjA A\xA8j\x98"A~F\r\0 A\x7FF@A\0! \f\v \0@ \0 Atj (6\0 Aj!\v \vE  \bGr\r\0\v \0 \bAtAr"\bAt\x9D"\r\0\vA\0! \0! A!\v\f\b\vA\0! \0 A\xA8j\x7F (\xA8A\0\vE\r\v \0! \f\v \v@A\0! \b/"E\r@ !\0@ \x7F (" (hG@  Aj6 -\0\0\f\v %\v"j-\0!E@ \0! A\0\f\v \0 j :\0\0 Aj" \bG\r\0\v \0 \bAtAr"\b\x9D"\r\0\vA\0! \0! A!\v\f\vA\0! \x07@@ \x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v"\0j-\0!@  \x07j \0:\0\0 Aj!\f \x07"\0! A\0\f\v\0\v\0\v@\x7F ("\0 (hG@  \0Aj6 \0-\0\0\f\v %\v j-\0!\r\0\vA\0!\0A\0! A\0\v! (! )pB\0Y@  Ak"6\v )x  (,k\xAC|"P   QrEr\r \v@ \x07 \x006\0\v \fA\xE3\0F\r\0 @ AtjA\x006\0\v E@A\0! \f\v  jA\0:\0\0\v ( (,k\xAC )x ||! \r \x07A\0Gj!\r\v Aj! -\0"\r\f\v\vA!\vA\0! A\0! \v \rA\x7F \r\x1B!\r\v \vE\r ! !\f\vA\x7F!\r\v A\xB0j$\0 A\x90j$\0 \r\vC\0@ \0E\r\0@@@@ Aj\0\v \0 <\0\0\v \0 =\0\v \0 >\0\v \0 7\0\v\v\xE4\x7F~#\0A k"$\0 B\xFF\xFF\xFF\xFF\xFF\xFF?\x83!\x07@ B0\x88B\xFF\xFF\x83"\b\xA7"A\x81\xFF\0kA\xFDM@ \x07B\x88\xA7!@ \0P B\xFF\xFF\xFF\x83"\x07B\x80\x80\x80\bT \x07B\x80\x80\x80\bQ\x1BE@ Aj!\f\v \0 \x07B\x80\x80\x80\b\x85\x84B\0R\r\0 Aq j!\vA\0  A\xFF\xFF\xFFK"\x1B!A\x81\x81\x7FA\x80\x81\x7F \x1B j!\f\v \0 \x07\x84P \bB\xFF\xFFRrE@ \x07B\x88\xA7A\x80\x80\x80r!A\xFF!\f\v A\xFE\x80K@A\xFF!\f\vA\x80\xFF\0A\x81\xFF\0 \bP"\x1B" k"A\xF0\0J@A\0!A\0!\f\v \x07 \x07B\x80\x80\x80\x80\x80\x80\xC0\0\x84 \x1B!\x07A\0!  G@ Aj \0 \x07A\x80 k6 ) )\x84B\0R!\v  \0 \x07 g )\b"\0B\x88\xA7!@ )\0 \xAD\x84"\x07P \0B\xFF\xFF\xFF\x83"\0B\x80\x80\x80\bT \0B\x80\x80\x80\bQ\x1BE@ Aj!\f\v \x07 \0B\x80\x80\x80\b\x85\x84B\0R\r\0 Aq j!\v A\x80\x80\x80s  A\xFF\xFF\xFFK"\x1B!\v A j$\0 B \x88\xA7A\x80\x80\x80\x80xq Atr r\xBE\v\x89\x7F~@@\x7F@@\x7F \0(" \0(hG@ \0 Aj6 -\0\0\f\v \0%\v"A+k\0\0\v A-F E\x7F \0(" \0(hG@ \0 Aj6 -\0\0\f\v \0%\v"A:k"AuKr\r \0)pB\0S\r \0 \0(Ak6\f\v A:k! !A\0\v! AvI\r\0@ A0kA O\r\0A\0!@  A lj\x7F \0(" \0(hG@ \0 Aj6 -\0\0\f\v \0%\v!A0k! A\xCC\x99\xB3\xE6\0H A0k"A Mq\r\0\v \xAC! A O\r\0@ \xAD B ~|!\x7F \0(" \0(hG@ \0 Aj6 -\0\0\f\v \0%\v"A0k"A M B0}"B\xAE\x8F\x85\xD7\xC7\xC2\xEB\xA3Sq\r\0\v A O\r\0@\x7F \0(" \0(hG@ \0 Aj6 -\0\0\f\v \0%\vA0kA I\r\0\v\v \0)pB\0Y@ \0 \0(Ak6\vB\0 }  \x1B!\f\vB\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F! \0)pB\0S\r\0 \0 \0(Ak6B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\v \v\x842\x7F\x07~|#\0A0k"\r$\0@@ AK\r\0 At"(\xDC\x81! (\xD0\x81!@\x7F (" (hG@  Aj6 -\0\0\f\v %\v"_\r\0\vA!\b@@ A+k\0\0\vA\x7FA A-F\x1B!\b (" (hG@  Aj6 -\0\0!\f\v %!\v@@ A_qA\xC9\0F@@ A\x07F\r\x7F (" (hG@  Aj6 -\0\0\f\v %\v! ,\0\xAF\b Aj! A rF\r\0\v\v AG@ A\bF"\f\r E AIr\r \f\r\v )p"B\0Y@  (Ak6\v E AIr\r\0 B\0S!@ E@  (Ak6\v Ak"AK\r\0\v\vB\0!#\0Ak"$\0 \b\xB2C\0\0\x80\x7F\x94\xBC"A\xFF\xFF\xFFq!\b\x7F Av"A\xFFq"@ A\xFFG@ \b\xADB\x86! A\xFFqA\x80\xFF\0j\f\v \b\xADB\x86!A\xFF\xFF\f\vA\0 \bE\r\0  \b\xADB\0 \bg"A\xD1\0j6 )\bB\x80\x80\x80\x80\x80\x80\xC0\0\x85! )\0!A\x89\xFF\0 k\v! \r 7\0 \r \xADB0\x86 Av\xADB?\x86\x84 \x847\b Aj$\0 \r)\b! \r)\0!\f\v@@@@@@ \r\0A\0! A_qA\xCE\0G\r\0@ AF\r\x7F (" (hG@  Aj6 -\0\0\f\v %\v! ,\0\xFC\r Aj! A rF\r\0\v\v \0\v@\x7F (" (hG@  Aj6 -\0\0\f\v %\vA(F@A!\f\vB\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0! )pB\0S\r  (Ak6\f\v@\x7F (" (hG@  Aj6 -\0\0\f\v %\v"A0kA I A\xC1\0kAIr A\xDF\0FrE A\xE1\0kAOqE@ Aj!\f\v\vB\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0! A)F\r )p"B\0Y@  (Ak6\v@ @ \r\f\vA\xF8\xD7A6\0B\0!\f\v@ B\0Y@  (Ak6\v Ak"\r\0\v\f\v )pB\0Y@  (Ak6\vA\xF8\xD7A6\0\v B\0J\f\v@ A0G\r\0\x7F (" (hG@  Aj6 -\0\0\f\v %\vA_qA\xD8\0F@#\0A\xB0k"$\0\x7F (" (hG@  Aj6 -\0\0\f\v %\v!@\x7F@ A0G@@ A.G\r (" (hF\r\0  Aj6 -\0\0\f\v (" (hG\x7FA!  Aj6 -\0\0A! %\v!\f\v\v %\v"A0G@A!\v\f\v@ B}!\x7F (" (hG@  Aj6 -\0\0\f\v %\v"A0F\r\0\vA!\vA!\vB\x80\x80\x80\x80\x80\x80\xC0\xFF?!@@ !@@ A0k"\x07A I\r\0 A.G"\f A r"A\xE1\0kAKq\r \f\r\0 \v\rA!\v !\f\v A\xD7\0k \x07 A9J\x1B!@ B\x07W@  Atj! \f\v BX@ A0j ? A j  B\0B\x80\x80\x80\x80\x80\x80\xC0\xFD?+ Aj )0 )8 ) " )("+  ) )  < )\b! )\0!\f\v E r\r\0 A\xD0\0j  B\0B\x80\x80\x80\x80\x80\x80\x80\xFF?+ A@k )P )X  \0 \b \b \b \v B\0R\x1B \v \bAkA\xFFq"G\x1B  \vF\x1B! \vAk!  \vG\r\0\v Ak! \b! E\r\0\v AkA\xFFq" F@ A\x90j"\b A\xFEjA\xFFqAtj" (\0 At \bj(\0r6\0 !\v A j! A\x90j Atj 6\0\f\v\v@@ AjA\xFFq!\b A\x90j AkA\xFFqAtj!@A A A-J\x1B!@@ !A\0!@@@  jA\xFFq" F\r\0 A\x90j Atj(\0" At(\xA0\x81"I\r\0  I\r Aj"AG\r\v\v A$G\r\0B\0!A\0!B\0!@   jA\xFFq"F@ AjA\xFFq"At jA\x006\x8C\v A\x80j A\x90j Atj(\0r A\xF0j  B\0B\x80\x80\x80\x80\xE5\x9A\xB7\x8E\xC0\0+ A\xE0j )\xF0 )\xF8 )\x80 )\x88< )\xE8! )\xE0! Aj"AG\r\0\v A\xD0j \f? A\xC0j   )\xD0 )\xD8+B\0! )\xC8! )\xC0! A\xF1\0j" k" A\0 A\0J\x1B  H"\b\x1B"\x07A\xF0\0M\r\f\v  j! !  F\r\0\vA\x80\x94\xEB\xDC v!\vA\x7F tA\x7Fs!A\0! !@ A\x90j"\x07 Atj"  (\0" vj"6\0 AjA\xFFq  E  Fq"\x1B! A k \x1B! q \vl! AjA\xFFq" G\r\0\v E\r  \bG@ At \x07j 6\0 \b!\f\v  (\0Ar6\0\f\v\v\v A\x90jA\xE1 \x07k\xC8T A\xB0j )\x90 )\x98 \xB1 )\xB8! )\xB0! A\x80jA\xF1\0 \x07k\xC8T A\xA0j   )\x80 )\x88\xAE A\xF0j   )\xA0" )\xA8"\xBC A\xE0j   )\xF0 )\xF8< )\xE8! )\xE0!\v@ AjA\xFFq" F\r\0@ A\x90j Atj(\0"A\xFF\xC9\xB5\xEEM@ E AjA\xFFq Fq\r A\xF0j \f\xB7D\0\0\0\0\0\0\xD0?\xA2T A\xE0j   )\xF0 )\xF8< )\xE8! )\xE0!\f\v A\x80\xCA\xB5\xEEG@ A\xD0j \f\xB7D\0\0\0\0\0\0\xE8?\xA2T A\xC0j   )\xD0 )\xD8< )\xC8! )\xC0!\f\v \f\xB7!\x1B  AjA\xFFqF@ A\x90j \x1BD\0\0\0\0\0\0\xE0?\xA2T A\x80j   )\x90 )\x98< )\x88! )\x80!\f\v A\xB0j \x1BD\0\0\0\0\0\0\xE8?\xA2T A\xA0j   )\xB0 )\xB8< )\xA8! )\xA0!\v \x07A\xEF\0K\r\0 A\xD0j  B\0B\x80\x80\x80\x80\x80\x80\xC0\xFF?\xAE )\xD0 )\xD8B\0B\0d\r\0 A\xC0j  B\0B\x80\x80\x80\x80\x80\x80\xC0\xFF?< )\xC8! )\xC0!\v A\xB0j    < A\xA0j )\xB0 )\xB8  \xBC )\xA8! )\xA0!@ Ak A\xFF\xFF\xFF\xFF\x07qN\r\0  B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x837\x98  7\x90 A\x80j  B\0B\x80\x80\x80\x80\x80\x80\x80\xFF?+ )\x90 )\x98B\x80\x80\x80\x80\x80\x80\x80\xB8\xC0\0\xB2! )\x88  A\0N"\x1B! )\x80  \x1B! \b \x07 G A\0Hrq  B\0B\0dA\0GqE   j"A\xEE\0jNq\r\0A\xF8\xD7A\xC4\x006\0\v A\xF0j   \xB0 )\xF8! )\xF0\v! \r 7( \r 7 A\x90\xC6\0j$\0 \r)(! \r) !\f\vB\0!\f\vB\0!\v \0 7\0 \0 7\b \rA0j$\0\v\xC0\x7F~#\0A\x80k"$\0@@@  B\0B\0dE\r\0\x7F B\xFF\xFF\xFF\xFF\xFF\xFF?\x83! \x7F B0\x88\xA7A\xFF\xFFq"\x07A\xFF\xFFG@A \x07\rAA  \x84P\x1B\f\v  \x84P\v\vE\r\0 B0\x88\xA7"\bA\xFF\xFFq"A\xFF\xFFG\r\v Aj    +  )" )"  \xAF )\b! )\0!\f\v  B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"  B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83" dA\0L@   d@ !\f\v A\xF0\0j  B\0B\0+ )x! )p!\f\v B0\x88\xA7A\xFF\xFFq!\x07 ~  A\xE0\0j  B\0B\x80\x80\x80\x80\x80\x80\xC0\xBB\xC0\0+ )h" B0\x88\xA7A\xF8\0k! )\`\v! \x07E@ A\xD0\0j  B\0B\x80\x80\x80\x80\x80\x80\xC0\xBB\xC0\0+ )X" B0\x88\xA7A\xF8\0k!\x07 )P!\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83B\x80\x80\x80\x80\x80\x80\xC0\0\x84!\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83B\x80\x80\x80\x80\x80\x80\xC0\0\x84!  \x07J@@~ \v}  V\xAD}" B\0Y@  }"\x84P@ A j  B\0B\0+ )(! ) !\f\v B\x86 B?\x88\x84\f\v B\x86 B?\x88\x84\v! B\x86! Ak" \x07J\r\0\v \x07!\v@ \v}  V\xAD}" B\0S@ ! \f\v  }"\x84B\0R\r\0 A0j  B\0B\0+ )8! )0!\f\v B\xFF\xFF\xFF\xFF\xFF\xFF?X@@ B?\x88 Ak! B\x86! B\x86\x84" B\x80\x80\x80\x80\x80\x80\xC0\0T\r\0\v\v \bA\x80\x80q!\x07 A\0L@ A@k  B\xFF\xFF\xFF\xFF\xFF\xFF?\x83 A\xF8\0j \x07r\xADB0\x86\x84B\0B\x80\x80\x80\x80\x80\x80\xC0\xC3?+ )H! )@!\f\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83  \x07r\xADB0\x86\x84!\v \0 7\0 \0 7\b A\x80j$\0\v\x87\x7F~#\0A\xD0k"$\0 B\xFF\xFF\xFF\xFF\xFF\xFF?\x83!\v B\xFF\xFF\xFF\xFF\xFF\xFF?\x83!  \x85B\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7F\x83!\f B0\x88\xA7A\xFF\xFFq!\x07@@ B0\x88\xA7A\xFF\xFFq"\bA\xFF\xFFkA\x82\x80~O@ \x07A\xFF\xFFkA\x81\x80~K\r\v P B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84!\f\f\v P B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1BE@ B\x80\x80\x80\x80\x80\x80 \x84!\f !\f\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@B\0!B\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0!\f\f\v \fB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\fB\0!\f\v  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x85\x84P@B\0!\f\v  \x84P@B\x80\x80\x80\x80\x80\x80\xE0\xFF\xFF\0 \f  \x84P\x1B!\fB\0!\f\v  \x84P@ \fB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\fB\0!\f\v B\xFF\xFF\xFF\xFF\xFF\xFF?X@ A\xC0j   P"\x1ByB\xC0\0B\0 \x1B|\xA7"Ak6A k! )\xC8! )\xC0!\v B\xFF\xFF\xFF\xFF\xFF\xFF?V\r\0 A\xB0j  \v  \v \vP" \x1ByB\xC0\0B\0 \x1B|\xA7" Ak6  jAk! )\xB8!\v )\xB0!\v A\xA0j \vB\x80\x80\x80\x80\x80\x80\xC0\0\x84"B\x86 B1\x88\x84"B\0B\x80\x80\x80\x80\xB0\xE6\xBC\x82\xF5\0 }"B\02 A\x90jB\0 )\xA8}B\0 B\02 A\x80j )\x98B\x86 )\x90B?\x88\x84"B\0 B\02 A\xF0j B\0B\0 )\x88}B\02 A\xE0j )\xF8B\x86 )\xF0B?\x88\x84"B\0 B\02 A\xD0j B\0B\0 )\xE8}B\02 A\xC0j )\xD8B\x86 )\xD0B?\x88\x84"B\0 B\02 A\xB0j B\0B\0 )\xC8}B\02 A\xA0j B\0 )\xB8B\x86 )\xB0B?\x88\x84B}"B\02 A\x90j B\x86B\0 B\02 A\xF0\0j B\0B\0 )\xA8 )\xA0" )\x98|" T\xAD| BV\xAD|}B\02 A\x80jB }B\0 B\02  \b \x07kj"\bA\xFF\xFF\0j!~ )p"B\x86"\r )\x88"B\x86 )\x80B?\x88\x84|"B\xE7\xEC\0}"B \x88" B\x80\x80\x80\x80\x80\x80\xC0\0\x84"B\x86"B \x88"~" B\x86"B \x88"\v  V\xAD \r V\xAD )xB\x86 B?\x88\x84 B?\x88|||B}"B \x88"~|"\r T\xAD \r \r B\xFF\xFF\xFF\xFF\x83" B?\x88" B\x86\x84B\xFF\xFF\xFF\xFF\x83" ~|"\rV\xAD|  ~|  ~" ~|" T\xADB \x86 B \x88\x84| \r B \x86|" \rT\xAD|   B\xFF\xFF\xFF\xFF\x83" ~"\r  \v~|" \rT\xAD    B\xFE\xFF\xFF\xFF\x83"\r~|"V\xAD||"V\xAD|   ~" \r ~|"  ~|" \v ~|"B \x88 V\xAD  T\xAD  V\xAD||B \x86\x84|" T\xAD|     \r~" \v ~|"B \x88  T\xADB \x86\x84|" T\xAD B \x86|" V\xAD||"V\xAD|   B \x86" \r ~| T\xADB\x7F\x85"V  Rq\xAD|"V\xAD|"B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0X@  \x84! A\xD0\0j  B\x80\x80\x80\x80\x80\x80\xC0\0T"\x07\xAD"\v\x86"  \v\x86 B\x88 \x07A?s\xAD\x88\x84"  2 \bA\xFE\xFF\0j  \x07\x1BAk! B1\x86 )X} )P"B\0R\xAD}!\vB\0 }\f\v A\xE0\0j B?\x86 B\x88\x84" B\x88"  2 B0\x86 )h} )\`"B\0R\xAD}!\v !B\0 }\v! A\xFF\xFFN@ \fB\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x84!\fB\0!\f\v~ A\0J@ \vB\x86 B?\x88\x84! B\xFF\xFF\xFF\xFF\xFF\xFF?\x83 \xADB0\x86\x84!\v B\x86\f\v A\x8F\x7FL@B\0!\f\v A@k A kg A0j   A\xF0\0j6 A j   )@" )H"\v2 )8 )(B\x86 ) "B?\x88\x84} )0" B\x86"T\xAD}!  }\v! Aj  BB\02   BB\02 \v  B\x83" |"T   T\xAD|" V  Q\x1B\xAD|" T\xAD|"   B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T  )V  )"V  Q\x1Bq\xAD|"V\xAD|"  B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0T  )\0V  )\b"V  Q\x1Bq\xAD|" T\xAD| \f\x84!\f\v \0 7\0 \0 \f7\b A\xD0j$\0\v\xBF\x7F#\0A\xD0\0k"$\0@ A\x80\x80N@ A j  B\0B\x80\x80\x80\x80\x80\x80\x80\xFF\xFF\0+ )(! ) ! A\xFF\xFFI@ A\xFF\xFF\0k!\f\v Aj  B\0B\x80\x80\x80\x80\x80\x80\x80\xFF\xFF\0+A\xFD\xFF  A\xFD\xFFO\x1BA\xFE\xFFk! )! )!\f\v A\x81\x80\x7FJ\r\0 A@k  B\0B\x80\x80\x80\x80\x80\x80\x809+ )H! )@! A\xF4\x80~K@ A\x8D\xFF\0j!\f\v A0j  B\0B\x80\x80\x80\x80\x80\x80\x809+A\xE8\x81}  A\xE8\x81}M\x1BA\x9A\xFEj! )8! )0!\v   B\0 A\xFF\xFF\0j\xADB0\x86+ \0 )\b7\b \0 )\x007\0 A\xD0\0j$\0\v<\0 \0 7\0 \0 B\xFF\xFF\xFF\xFF\xFF\xFF?\x83 B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0\x83B0\x88\xA7 B0\x88\xA7A\x80\x80qr\xADB0\x86\x847\b\v\xC0\x7F~A\x7F!@ \0B\0R B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0V B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Q\x1B\r\0 B\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83"B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0V B\x80\x80\x80\x80\x80\x80\xC0\xFF\xFF\0Rq\r\0 \0  \x84\x84P@A\0\v  \x83B\0Y@  R  Sq\r \0  \x85\x84B\0R\v \0B\0R  U  Q\x1B\r\0 \0  \x85\x84B\0R!\v \v8\0 \0A\xD0k \0 \0A\x93\xF1\xFF\xFF\x07J\x1B"\0Aq@A\0\v \0A\xECj"\0A\xE4\0o@A\v \0A\x90oE\v\x85\x7F~#\0A\x80k"\b$\0 @\x7F@@\x7F@@@ -\0\0"A%G@ \r \f\x07\vA\0!A! @ -\0"\x07A-k\0\v \x07A\xDF\0F\r \x07\r\v \0 j :\0\0 Aj\f\v \x07! -\0!\x07A! \vA\0!@\x7F  j \x07"A+Fj" ,\0\0A0kA M@ \bA\fjA B\xFF\xFF\xFF\xFF\xBE\xA7! \b(\f\f\v \b 6\fA\0! \v"\x07-\0\0"A\xC3\0k"\vAKA \vtA\x99\x80\x80qEr\r\0 "\r\0 \x07 G!\v A\xCF\0F A\xC5\0Fr\x7F \x07-\0! \x07Aj \x07\v! \bAj!\x07 ! A\0!#\0A\xD0\0k"\v$\0A\x8A !\rA0!A\xA8\x80\b!\f@ \b\x7F@@@@@@@\x7F@@@@@@@@@~@@@@@@@@@@@@@@@@@@@@@@@@@@ \xC0"A%kV!---------------------------'-\x07\b ---\r---- ------\0&-\b-\v--\f--%-\x1B-\v ("AM\r"\f*\v ("AK\r) A\x87\x80\bj\f"\v ("A\vK\r( A\x8E\x80\bj\f!\v ("A\vK\r' A\x9A\x80\bj\f \v 4B\xEC|B\xE4\0\x7F!\f#\vA\xDF\0!\v 4\f!\f!\vA\xD2!\r\f\v 4"B\xEC|!@ ("AL@  B\xEB| \xBDAF\x1B!\f\v A\xE9I\r\0 B\xED|  \xBDAF\x1B!\v A\xE7\0F\r\f \v 4\b!\f\vA! (\b"E@B\f!\f \v \xAC"B\f}  A\fJ\x1B!\f\v (Aj\xAC!A!\f\v (Aj\xAC!\f\x1B\v 4!\f\v \bA6|A\xD4!\f\vA\xA7\x80\bA\xA6\x80\b (\bA\vJ\x1B\f\vA\xF7!\r\f\vA\0!\fA\0!#\0Ak"$\0 4!~ ("\rA\fO@ \r \rA\fm"A\flk"A\fj  A\0H\x1B!\r  Auj\xAC |!\v A\fj! B}B\x88X@ \xA7"\fA\xC4\0kAu!@ \x7F \fAqE@ Ak! E\rA\f\v E\rA\0\v6\0\v \fA\x80\xE7\x84l A\x80\xA3ljA\x80\xD6\xAF\xE3\x07j\xAC\f\v B\xE4\0}" B\x90\x7F"B\x90~}"B?\x87\xA7 \xA7j!@@@ \xA7"A\x90j  B\0S\x1B"\x7F\x7F A\xC8N@ A\xACO@A!\f A\xACk\f\vA!\f A\xC8k\f\v A\xE4\0k  A\xE3\0J"\f\x1B\v"\rA\0A\v! \r\f\v Av! AqE! E\r\v  6\0\v B\x80\xE7\x84~  \fAl A\xE1\0ljj k\xACB\x80\xA3~|B\x80\xAA\xBA\xC3|\v! \rAtA\x80\xFE\0j(\0"A\x80\xA3j  (\f\x1B  \rAJ\x1B! (\f! 4\b! 4! 4\0 Aj$\0  \xAC| Ak\xACB\x80\xA3~| B\x90~| B<~|| 4$}\f\b\v 4\0!\f\v \bA6|A\xD6!\f\vA\xE4!\r\f\v ("A\x07 \x1B\xAC\f\v ( (kA\x07jA\x07n\xAD!\f\v ( (AjA\x07pkA\x07jA\x07n\xAD!\f\v \xBD\xAD!\f\v 4\v!A!\f\vA\xA9\x80\b!\f\f \vA\xAA\x80\b!\f\f \v 4B\xEC|B\xE4\0\x81" B?\x87"\x85 }!\f \v 4"B\xEC|! B\xA4?S\r \v 70 \b \x07A\x9B \vA0je6| \x07!\f\v ( A\0H@ \bA\x006|A\xD7!\f\v \v ($"A\x90m"A\xE4\0l  A\x90lk\xC1As!\v \0 6 \0B\x007 AtA\xAC\xDAj!@@A\x80\xD8(\0"A t"\x07qE@A\x80\xD8  \x07r6\0  \x006\0 \0 6\f\v A AvkA\0 AG\x1Bt! (\0!@ "(Axq F\r Av! At!  Aqj"\x07("\r\0\v \x07 \x006 \0 6\v \0 \x006\f \0 \x006\b\v (\b" \x006\f  \x006\b \0A\x006 \0 6\f \0 6\b\v\v\0 \0E@A\0\v \0 \xC5\v\0 \0  A4A5\xD0\v-\0 \0A\xCC\0j1 \0A@k1 \0A4j1 \0A(j1 \0Aj1 \0Aj1\v\xBC\0@@@@@@@@@@@ A k\0\b \b  \b \x07\v  (\0"Aj6\0 \0 (\x006\0\v  (\0"Aj6\0 \0 2\x007\0\v  (\0"Aj6\0 \0 3\x007\0\v  (\0"Aj6\0 \0 0\0\x007\0\v  (\0"Aj6\0 \0 1\0\x007\0\v  (\0A\x07jAxq"A\bj6\0 \0 +\x009\0\v \0  \0\v\v  (\0"Aj6\0 \0 4\x007\0\v  (\0"Aj6\0 \0 5\x007\0\v  (\0A\x07jAxq"A\bj6\0 \0 )\x007\0\vo\x7F \0(\0",\0\0A0k"A K@A\0\v@A\x7F! A\xCC\x99\xB3\xE6\0M@A\x7F  A l"j  A\xFF\xFF\xFF\xFF\x07sK\x1B!\v \0 Aj"6\0 ,\0 ! !A0k"A I\r\0\v \v\xF5\x7F~#\0A@j"\b$\0 \b 6< \bA)j! \bA'j! \bA(j!@@@@@A\0!\x07@ !\r \x07 A\xFF\xFF\xFF\xFF\x07sJ\r \x07 j!@@@@ "\x07-\0\0"\v@@@@ \vA\xFFq"E@ \x07!\f\v A%G\r \x07!\v@ \v-\0A%G@ \v!\f\v \x07Aj!\x07 \v-\0 \vAj"!\vA%F\r\0\v\v \x07 \rk"\x07 A\xFF\xFF\xFF\xFF\x07s"J\r \0@ \0 \r \x073\v \x07\r\x07 \b 6< Aj!\x07A\x7F!@ ,\0A0k" A K\r\0 -\0A$G\r\0 Aj!\x07A! !\v \b \x076\b \b \bA\bj"\x0760A\x7F! \x07\v!\vA\0!\x07@@ \v(\0"\rE\r\0 \bAj \r\xCA"\rA\0H\r \r \x07kK\r\0 \vAj!\v \x07 \rj"\x07 I\r\v\vA=! \x07A\0H\r\f \0A  \x07 \f7 \x07E@A\0!\x07\f\vA\0! \b(0!\v@ \v(\0"\rE\r \bAj" \r\xCA"\r j" \x07K\r \0 \r3 \vAj!\v \x07 K\r\0\v\v \0A  \x07 \fA\x80\xC0\0s7  \x07 \x07 H\x1B!\x07\f\b\v  A\0Hq\r A=! \0 \b+0  \f \x07 \0"\x07A\0N\r\x07\f \v \x07-\0!\v \x07Aj!\x07\f\0\v\0\v \0\r E\rA!\x07@  \x07Atj(\0"\0@  \x07Atj \0  \xCDA! \x07Aj"\x07A G\r\f\v\v\v \x07A O@A!\f \v@  \x07Atj(\0\rA! \x07Aj"\x07A G\r\0\v\f \vA! \f\v \b \x07:\0'A! !\r \v!\f\v \rk"\v \vJ\x1B" A\xFF\xFF\xFF\xFF\x07sJ\rA=!   j" H\x1B"\x07 K\r \0A \x07 \f7 \0  3 \0A0 \x07 \fA\x80\x80s7 \0A0  \vA\07 \0 \r \v3 \0A \x07 \fA\x80\xC0\0s7 \b(! ( ,\0\v"\0 \0A\0H"\0\x1B@ (\0  \0\x1B-\0\0 A- (\0(\0A\xFFqF!\x07\v A\x006\xA0 B\x007\x98 A\x006\x90 B\x007\x88 A\x006\x80 B\x007x  \x07 A\xACj A\xA8j A\xA7j A\xA6j A\x98j A\x88j A\xF8\0j A\xF4\0j\xFC@\x7F\x7F ("\v ,\0\v"\b \bA\0H\x1B"\0 (t" J@ \0 kAtj (| ,\0\x83"\0 \0A\0H\x1Bj (\x8C ,\0\x93"\0 \0A\0H\x1BjAj\f\v (| ,\0\x83"\0 \0A\0H\x1Bj (\x8C ,\0\x93"\0 \0A\0H\x1BjAj\v"\0A\xE5\0I@A\0! Aj\f\v \0/"E\r -\0\v!\b (!\v \v"\0 A\fj A\bj ( (\0  \b\xC0A\0H"\x1B"\f \f \v \b \x1Bj \x07 A\xA8j ,\0\xA7 ,\0\xA6 A\x98j" A\x88j"\x07 A\xF8\0j"\b \xFB  \0 (\f (\b  Z ! \b  \x07    (\xAC# A\xB0j$\0\v0\0\v\xDB\b\x7F#\0A\xB0k"\0$\0 \0 7 \0 7 \0 \0A\xC0j"\x076\xBC \0A\xD0j! @ \x07A\xE3 \0Aje"\x07A\xE4\0O@*!\x07 \0 7\0 \0 7\b \0A\xBCj \x07A\xE3 \0P"\x07A\x7FF\r \0(\xBC!\r \x07/"\v! \vE\r\v \0A\xCCj"\b $ \b>" \0(\xBC"\b \x07 \bj (\0( \0 \x07A\0J@ \0(\xBC-\0\0A-F! \v \0A\x006\xC0 \0B\x007\xB8 \0A\x006\xB0 \0B\x007\xA8 \0A\x006\xA0 \0B\x007\x98  \0A\xCCj \0A\xC8j \0A\xC7j \0A\xC6j \0A\xB8j \0A\xA8j \0A\x98j \0A\x94j\xFC@\x7F \0(\x94"\b \x07H@ \b \x07 \bkAtj \0(\x9C \0,\0\xA3" A\0H\x1Bj \0(\xAC \0,\0\xB3" A\0H\x1BjAj\f\v \b \0(\x9C \0,\0\xA3" A\0H\x1Bj \0(\xAC \0,\0\xB3" A\0H\x1BjAj\v"A\xE5\0I@ \0A0j!\f\v /"\f! \fE\r\v  \0A,j \0A(j ( \x07 j  \0A\xC8j \0,\0\xC7 \0,\0\xC6 \0A\xB8j" \0A\xA8j"\x07 \0A\x98j" \b\xFB   \0(, \0((  Z \f!   \x07    \0(\xCC# \v! \r! \0A\xB0j$\0\v0\0\v\xC0\x7F#\0A\xC0k"\0$\0 \0 6\xB8 \0 6\xBC \0A\xE3\x006 \0 \0A j6 \0Aj"\x07 $ \x07=! \0A\0:\0 \0A\xBCj   \x07 (  \0Aj  \0Aj \0Aj \0A\xB0j\x80@@ ,\0\vA\0H@ (\0A\x006\0 A\x006\f\v A\0:\0\v A\x006\0\v \0-\0AF@  A- (\0(,\0\xDD\v A0 (\0(,\0! \0("Ak! \0(!@@  O\r\0 (\0 G\r\0 Aj!\f\v\v#\0Ak"$\0@  F\r\0 ,\0\v! (\b!\b (!\x07  (\0  ,\0\v" A\0H" \x1B"\vO  \v ( \x1BAtjAjIqE@ \x07  A\0H" \x1B"  k"Au" j!\x07 \bA\xFF\xFF\xFF\xFF\x07qAkA \x1B"\b kK@  \b \x07 \bk  \xFF\v At (\0  ,\0\vA\0H\x1Bj! @   \xFC \0\0\v  jA\x006\0 ,\0\vA\0H@  \x076\f\v  \x07A\xFF\0q:\0\v\f\v Aj"\x07  \xA2 ( \x07 ,\0"A\0H" \x1B!@ (\b  \x1B" (\bA\xFF\xFF\xFF\xFF\x07qAkA ,\0\v"\bA\0H"\x1B" ( \b \x1B"kM@ E\r (\0  \bA\0H\x1B!\b At" @ \b Atj  \xFC \0\0\v  j!@ ,\0\vA\0H@  6\f\v  A\xFF\0q:\0\v\v \b AtjA\x006\0\f\v   j k  A\0  \xDE\v \x07 \v Aj$\0\v \0A\xBCj \0A\xB8j(@  (\0Ar6\0\v \0(\xBC \0(# \0(! \0A\x006 @  \0(\0\v \0A\xC0j$\0\v\xDD\x7F#\0A\xF0k"\x07$\0 \x07 6\xE8 \x07 6\xEC \x07A\xE3\x006\xCC \x07 \x07A\xD0j6\xC8 \x07A\xC0j" $ =!\0 \x07A\0:\0\xBF@ \x07A\xECj    (  \x07A\xBFj \0 \x07A\xC8j \x07A\xC4j \x07A\xE0j\x80E\r\0 \x07A\xEE\x1B(\0\x006\0\xB7 \x07A\xE7\x1B)\0\x007\xB0 \0 \x07A\xB0j \x07A\xBAj \x07A\x80j \0(\0(0\0 \x07Aj!\0@ \x07(\xC4" \x07(\xC8"k"A\x89N@ AvAj/"\0!\b \0E\r\v \0! \x07-\0\xBFAF@ \0A-:\0\0 \0Aj!\v \x07A\xA8j!@  M@@ A\0:\0\0 \x07 6\0 \0 \x07\xA7AG\r\0 \b!\f\v  \x07A\xB0j \x07A\x80j"  \xB1 kAuj-\0\0:\0\0 Aj! Aj! \x07(\xC4!\f\v\v0\0\v0\0\v \x07A\xECj \x07A\xE8j(@  (\0Ar6\0\v \x07(\xEC \x07(\xC0# \x07(\xC8!\0 \x07A\x006\xC8 \0@ \0 \x07(\xCC\0\v \x07A\xF0j$\0\v\xAE\x7F#\0A\x90k"\0$\0 \0 6\x88 \0 6\x8C \0A\xE3\x006 \0 \0A j6 \0Aj"\x07 $ \x07>! \0A\0:\0 \0A\x8Cj   \x07 (  \0Aj  \0Aj \0Aj \0A\x84j\x85@@ ,\0\vA\0H@ (\0A\0:\0\0 A\x006\f\v A\0:\0\v A\0:\0\0\v \0-\0AF@  A- (\0(\0\xAA\v A0 (\0(\0 \0("Ak! \0(!A\xFFq!@@  O\r\0 -\0\0 G\r\0 Aj!\f\v\v#\0Ak"$\0@  F\r\0 ,\0\v! (\b!\b (!\x07  (\0  ,\0\v" A\0H" \x1B"\vO  \v ( \x1BjAjIqE@ \x07  A\0H" \x1B"  k"j!\x07  \bA\xFF\xFF\xFF\xFF\x07qAkA \x1B"\b kK@  \b \x07 \bk  \xA4\v (\0  ,\0\vA\0H\x1B j! @   \xFC \0\0\v  jA\0:\0\0 ,\0\vA\0H@  \x076\f\v  \x07A\xFF\0q:\0\v\f\v Aj"\x07  \xCE ( \x07 ,\0"A\0H" \x1B!@ (\b  \x1B" (\bA\xFF\xFF\xFF\xFF\x07qAkA ,\0\v"\bA\0H"\x1B" ( \b \x1B"kM@ E\r (\0  \bA\0H\x1B!\b @  \bj  \xFC \0\0\v  j!@ ,\0\vA\0H@  6\f\v  A\xFF\0q:\0\v\v  \bjA\0:\0\0\f\v   j k  A\0  \x89\v \x07 \v Aj$\0\v \0A\x8Cj \0A\x88j)@  (\0Ar6\0\v \0(\x8C \0(# \0(! \0A\x006 @  \0(\0\v \0A\x90j$\0\v\xD1\x7F#\0A\x90k"\x07$\0 \x07 6\x88 \x07 6\x8C \x07A\xE3\x006\x9C \x07 \x07A\xA0j6\x98 \x07A\x90j" $ >!\0 \x07A\0:\0\x8F@ \x07A\x8Cj    (  \x07A\x8Fj \0 \x07A\x98j \x07A\x94j \x07A\x84j\x85E\r\0 \x07A\xEE\x1B(\0\x006\0\x87 \x07A\xE7\x1B)\0\x007\x80 \0 \x07A\x80j \x07A\x8Aj \x07A\xF6\0j \0(\0( \0 \x07Aj!\0@ \x07(\x94" \x07(\x98"k"A\xE3\0N@ Aj/"\0!\b \0E\r\v \0! \x07-\0\x8FAF@ \0A-:\0\0 \0Aj!\v \x07A\x80j!@  M@@ A\0:\0\0 \x07 6\0 \0 \x07\xA7AG\r\0 \b!\f\v  \x07A\xF6\0j  \xB4 \x07k \x07j-\0 :\0\0 Aj! Aj! \x07(\x94!\f\v\v0\0\v0\0\v \x07A\x8Cj \x07A\x88j)@  (\0Ar6\0\v \x07(\x8C \x07(\x90# \x07(\x98!\0 \x07A\x006\x98 \0@ \0 \x07(\x9C\0\v \x07A\x90j$\0\v\0A\xFC \v\xC7\x7F#\0A\xA0k"\b$\0 \b \bA\xA0j"6\f#\0A\x90k"\x07$\0 \x07 \x07A\x84j6 \0A\bj \x07A j" \x07Aj   \x88 \x07B\x007 \x07 6\f \b(\f \bAj"kAu! \0(\b!\0#\0Ak"$\0  \0H6\f  \x07A\fj  \x07Aj\xA4!\0 A\fjI Aj$\0 \0A\x7FF@0\0\v \b  \0Atj6\f \x07A\x90j$\0 \b(\f!\0#\0Ak"$\0#\0Ak"$\0#\0Ak"$\0  6\f@ \0 G@ A\fj (\0\xBE Aj!\f\v\v  6\b  (\f6\f Aj$\0  )\b7\b Aj$\0 (\f Aj$\0 $\0\v\xB8\0#\0A\x80k"$\0  A\xF4\0j6\f \0A\bj Aj" A\fj   \x88 (\f!\0#\0Ak"$\0#\0Ak"$\0#\0Ak"$\0  6\f@ \0 G@ A\fj ,\0\0\xC0 Aj!\f\v\v  6\b  (\f6\f Aj$\0  )\b7\b Aj$\0 (\f Aj$\0 A\x80j$\0\v\xB8\r\x7F#\0A0k"\x07$\0 \x07 6, A\x006\0 \x07 $ \x07=!\b \x07(\0#\x7F@@@@@@@@@@@@@@@@@@@@@@@@@@ A\xC1\0k9\0\x07 \0\b \v\f\r\v\v \0 Aj \x07A,j   \b\x8B\f\v \0 Aj \x07A,j   \b\x8A\f\v \0A\bj \0(\b(\f\0\0! \x07 \0 \x07(,     (\0  ,\0\v"\0A\0H"\x1B"  ( \0 \x1BAtjV6,\f\v \x07A,j   \bAN!\0@ (\0"Aq \0AkAKrE@  \x006\f\f\v  Ar6\0\v\f\v \x07A\xA8\x86)\x007 \x07A\xA0\x86)\x007 \x07A\x98\x86)\x007\b \x07A\x90\x86)\x007\0 \x07 \0      \x07 \x07A jV6,\f\v \x07A\xC8\x86)\x007 \x07A\xC0\x86)\x007 \x07A\xB8\x86)\x007\b \x07A\xB0\x86)\x007\0 \x07 \0      \x07 \x07A jV6,\f\v \x07A,j   \bAN!\0@ (\0"Aq \0AJrE@  \x006\b\f\v  Ar6\0\v\f\v \x07A,j   \bAN!\0@ (\0"Aq \0AkA\vKrE@  \x006\b\f\v  Ar6\0\v\f\v \x07A,j   \bAN!\0@ (\0"Aq \0A\xEDJrE@  \x006\f\v  Ar6\0\v\f\v \x07A,j   \bAN!\0@ (\0"Aq \0Ak"\0A\vKrE@  \x006\f\v  Ar6\0\v\f\v \x07A,j   \bAN!\0@ (\0"Aq \0A;JrE@  \x006\f\v  Ar6\0\v\f\v \x07A,j!\0#\0Ak"$\0  6\f@@ \0 A\fj(\r\0 \bA \0: \b(\0(\f\0E\r\0 \0Q\f\v\v \0 A\fj(@  (\0Ar6\0\v Aj$\0\f\r\v \x07A,j!@ \0A\bj \0(\b(\b\0\0"\0( \0,\0\v" A\0H\x1BA\0 \0( \0,\0" A\0H\x1BkF@  (\0Ar6\0\f\v   \0 \0Aj \b A\0\x95" \0G (\b"A\fGrE@ A\x006\b\f\v  \0kA\fG A\vJrE@  A\fj6\b\v\v\f\f\v \x07A\xD0\x86A,\xFC \0\0 \x07 \0      \x07 \x07A,jV6,\f\v\v \x07A\x90\x87(\x006 \x07A\x88\x87)\x007\b \x07A\x80\x87)\x007\0 \x07 \0      \x07 \x07AjV6,\f \v \x07A,j   \bAN!\0@ (\0"Aq \0A!\b \x07(\0#\x7F@@@@@@@@@@@@@@@@@@@@@@@@@@ A\xC1\0k9\0\x07 \0\b \v\f\r\v\v \0 Aj \x07A\fj   \b\x8E\f\v \0 Aj \x07A\fj   \b\x8D\f\v \0A\bj \0(\b(\f\0\0! \x07 \0 \x07(\f     (\0  ,\0\v"\0A\0H"\x1B"  ( \0 \x1BjW6\f\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0AkAKrE@  \x006\f\f\v  Ar6\0\v\f\v \x07B\xA5\xDA\xBD\xA9\xC2\xEC\xCB\x92\xF9\x007\0 \x07 \0      \x07 \x07A\bjW6\f\f\v \x07B\xA5\xB2\xB5\xA9\xD2\xAD\xCB\x92\xE4\x007\0 \x07 \0      \x07 \x07A\bjW6\f\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0AJrE@  \x006\b\f\v  Ar6\0\v\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0AkA\vKrE@  \x006\b\f\v  Ar6\0\v\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0A\xEDJrE@  \x006\f\v  Ar6\0\v\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0Ak"\0A\vKrE@  \x006\f\v  Ar6\0\v\f\v \x07A\fj   \bAO!\0@ (\0"Aq \0A;JrE@  \x006\f\v  Ar6\0\v\f\v \x07A\fj!\0#\0Ak"$\0  6\f@@ \0 A\fj)\r\0 \0;"A\0H\r\0 \b(\b Atj-\0\0AqE\r\0 \0S\f\v\v \0 A\fj)@  (\0Ar6\0\v Aj$\0\f\r\v \x07A\fj!@ \0A\bj \0(\b(\b\0\0"\0( \0,\0\v" A\0H\x1BA\0 \0( \0,\0" A\0H\x1BkF@  (\0Ar6\0\f\v   \0 \0Aj \b A\0\x97" \0G (\b"A\fGrE@ A\x006\b\f\v  \0kA\fG A\vJrE@  A\fj6\b\v\v\f\f\v \x07A\xF8\x85(\0\x006\0\x07 \x07A\xF1\x85)\0\x007\0 \x07 \0      \x07 \x07A\vjW6\f\f\v\v \x07A\x80\x86-\0\0:\0 \x07A\xFC\x85(\0\x006\0 \x07 \0      \x07 \x07AjW6\f\f \v \x07A\fj   \bAO!\0@ (\0"Aq \0A! (\b# Aj A\fj   \x8C (\f Aj$\0\vM\x7F#\0Ak"$\0  6\f A\bj" $ >! (\b# \0 Aj A\fj   \x8D (\f Aj$\0\vM\x7F#\0Ak"$\0  6\f A\bj" $ >! (\b# \0 Aj A\fj   \x8E (\f Aj$\0\vC\0 \0      \0A\bj \0(\b(\0\0"\0(\0 \0 \0,\0\v"A\0H"\x1B"  \0(  \x1BjW\v;\x7F#\0Ak"$\0 B\xA5\x90\xE9\xA9\xD2\xC9\xCE\x92\xD3\x007\b \0      A\bj Aj"W $\0\v+\x7F  ("A\xB5\xFB~qA\x88r6    \x91  6\v\xB7\x07\x7F\x7F#\0A\x90k"\0$\0 \0B%7\x88 \0A\x88j"\x07ArA\x82 (\x91!\b \0 \0A\xE0j" 6\xDC*!@\x7F@\x7F@ \b@ (\b!\b \0 70 \0 7( \0 \b6  \x07 \0A j]"AJ\r\f\v \0 7P \0 7X \0A\xE0j  \0A\x88j"\x07 \0A\xD0\0j]"AL\r*! \0 7@ \0 7H \0A\xDCj  \x07 \0A@kP\f\v*! (\b!\x07 \0 7 \0 7\b \0 \x076\0 \0A\xDCj  \0A\x88j \0P\v"A\x7FF\r \0(\xDC\f\vA\0\v \0(\xDC"\x07  \x07j" G!\v@ \0A\xE0j \x07F@ \0A\xF0\0j!A\0!\b\f\v At/"\b! \bE\r\v \0A\xE4\0j"\f $ \x07 \v  \0A\xEC\0j \0A\xE8\0j \f\x90 \0(d#   \0(l \0(h  \\! \b!! \0A\x90j$\0 \f\v0\0\v\v\x9A\x07\x7F\x7F#\0A\xF0k"\0$\0 \0B%7\xE8 \0A\xE8j"ArA\xD7 (\x91!\x07 \0 \0A\xC0j"\b6\xBC*!@\x7F@\x7F@ \x07@ (\b!\x07 \0 9 \0 \x076 \b   \0Aj]"AJ\r\f\v \0 90 \0A\xC0j  \0A\xE8j" \0A0j]"AL\r*! \0 9 \0A\xBCj   \0A jP\f\v*! (\b! \0 9\b \0 6\0 \0A\xBCj  \0A\xE8j \0P\v"A\x7FF\r \0(\xBC\f\vA\0\v \0(\xBC"  j" G! @ \0A\xC0j F@ \0A\xD0\0j!A\0!\x07\f\v At/"\x07! \x07E\r\v \0A\xC4\0j"\v $   \0A\xCC\0j \0A\xC8\0j \v\x90 \0(D#   \0(L \0(H  \\! \x07!! \0A\xF0j$\0 \f\v0\0\v\v\xC7\x7F#\0A\xF0k"\0$\0A\bAA ("A\xCA\0q"\x07A\bF\x1B \x07A\xC0\0F"\b\x1B! \0A\xD0j!@ A\x80qE Pr\r\0 \b@ \0A0:\0\xD0 Ar!\f\v \x07A\bG\r\0 \0A0:\0\xD0 \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0\xD1 \0A\xD0jAr!\v \0A\xC8j  \0A\xE8j  \x92 \0(\xC8!\x07@ A\x88\x80qA\x88\x80G\r\0@  \x07F\r  -\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 Aj!\f\0\v\0\v \0A\xD0j" \x07 G! \0Aj"\b $   \x07 \0Aj" \0A\fj \0A\bj \b\x90 \0(#   \0(\f \0(\b  \\ \0A\xF0j$\0\v\r\0    \x91\v\xA8\x7F~#\0A\xF0k"$\0 A\xD0j!\0~ ("A\xCA\0q"\x07A\bF"\b B\0YrE@  \x07A\xC0\0F\r A-:\0\xD0 \0Ar!\0B\0 }\f\v \v! \b \x07A\xC0\0F" r A\x80qE B\0SrrE@ \0A+:\0\0 \0Aj!\0\vA\bAA \b\x1B \x1B!\b@ A\x80qE Pr\r\0 \x07A\xC0\0F@ \0A0:\0\0 \0Aj!\0\f\v \x07A\bG\r\0 \0A0:\0\0 \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0 \0Aj!\0\v A\xC8j \0 A\xE8j \b\x92@ A\x88\x80qA\x88\x80F@@ \0 (\xC8"F\r \0 \0-\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 \0Aj!\0\f\0\v\0\v (\xC8!\v A\xD0j"\0  G!\x07 Aj"\b $ \0 \x07  Aj"\0 A\fj A\bj \b\x90 (#  \0 (\f (\b  \\ A\xF0j$\0\v\xA5\x7F#\0A\x90k"$\0 A\x83j!\0\x7F ("A\xCA\0q"\x07A\bF"\b A\0NrE@  \x07A\xC0\0F\r A-:\0\x83 A\x84j!\0A\0 k\f\v \v! \b \x07A\xC0\0F" r A\x80qE A\0HrrE@ \0A+:\0\0 \0Aj!\0\vA\bAA \b\x1B \x1B!\b@ E A\x80qEr\r\0 \x07A\xC0\0F@ \0A0:\0\0 \0Aj!\0\f\v \x07A\bG\r\0 \0A0:\0\0 \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0 \0Aj!\0\v A\xF8\0j \0 A\x90j \b\x94@ A\x88\x80qA\x88\x80F@@ \0 (x"F\r \0 \0-\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 \0Aj!\0\f\0\v\0\v (x!\v A\x83j"\0  G! Aj"\x07 $ \0   Aj"\0 A\fj A\bj \x07\x90 (#  \0 (\f (\b  \\ A\x90j$\0\v\xDE\x7F#\0Ak"$\0  6\f@ -\0AqE@ \0     \0(\0( \0!\f\v  $ n!\0 (\0#  \0 \0(\0AA \x1Bj(\0\0 (\0"  ,\0\v"A\0H\x1B!@   \xC0A\0H"\0\x1B ( A\xFFq \0\x1BAtj F@ (\f!   A\fj (\0\xBE Aj! (\0! -\0\v!\f\v\v\v Aj$\0 \v+\x7F  ("A\xB5\xFB~qA\x88r6    \x94  6\v\xB7\x07\x7F\x7F#\0A\xE0k"\0$\0 \0B%7\xD8 \0A\xD8j"\x07ArA\x82 (\x91!\b \0 \0A\xB0j" 6\xAC*!@\x7F@\x7F@ \b@ (\b!\b \0 70 \0 7( \0 \b6  \x07 \0A j]"AJ\r\f\v \0 7P \0 7X \0A\xB0j  \0A\xD8j"\x07 \0A\xD0\0j]"AL\r*! \0 7@ \0 7H \0A\xACj  \x07 \0A@kP\f\v*! (\b!\x07 \0 7 \0 7\b \0 \x076\0 \0A\xACj  \0A\xD8j \0P\v"A\x7FF\r \0(\xAC\f\vA\0\v \0(\xAC"\x07  \x07j" G!\v@ \0A\xB0j \x07F@ \0A\xF0\0j!A\0!\b\f\v At/"\b! \bE\r\v \0A\xE4\0j"\f $ \x07 \v  \0A\xEC\0j \0A\xE8\0j \f\x93 \0(d#   \0(l \0(h  Z! \b!! \0A\xE0j$\0 \f\v0\0\v\v\x9A\x07\x7F\x7F#\0A\xC0k"\0$\0 \0B%7\xB8 \0A\xB8j"ArA\xD7 (\x91!\x07 \0 \0A\x90j"\b6\x8C*!@\x7F@\x7F@ \x07@ (\b!\x07 \0 9 \0 \x076 \b   \0Aj]"AJ\r\f\v \0 90 \0A\x90j  \0A\xB8j" \0A0j]"AL\r*! \0 9 \0A\x8Cj   \0A jP\f\v*! (\b! \0 9\b \0 6\0 \0A\x8Cj  \0A\xB8j \0P\v"A\x7FF\r \0(\x8C\f\vA\0\v \0(\x8C"  j" G! @ \0A\x90j F@ \0A\xD0\0j!A\0!\x07\f\v At/"\x07! \x07E\r\v \0A\xC4\0j"\v $   \0A\xCC\0j \0A\xC8\0j \v\x93 \0(D#   \0(L \0(H  Z! \x07!! \0A\xC0j$\0 \f\v0\0\v\v\xC3\x7F#\0A\xF0\0k"\0$\0A\bAA ("A\xCA\0q"\x07A\bF\x1B \x07A\xC0\0F"\b\x1B! \0A\xD0\0j!@ A\x80qE Pr\r\0 \b@ \0A0:\0P Ar!\f\v \x07A\bG\r\0 \0A0:\0P \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0Q \0A\xD0\0jAr!\v \0A\xC8\0j  \0A\xE8\0j  \x92 \0(H!\x07@ A\x88\x80qA\x88\x80G\r\0@  \x07F\r  -\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 Aj!\f\0\v\0\v \0A\xD0\0j" \x07 G! \0Aj"\b $   \x07 \0Aj" \0A\fj \0A\bj \b\x93 \0(#   \0(\f \0(\b  Z \0A\xF0\0j$\0\v\r\0    \x94\v\xA5\x7F~#\0A\xF0\0k"$\0 A\xD0\0j!\0~ ("A\xCA\0q"\x07A\bF"\b B\0YrE@  \x07A\xC0\0F\r A-:\0P \0Ar!\0B\0 }\f\v \v! \b \x07A\xC0\0F" r A\x80qE B\0SrrE@ \0A+:\0\0 \0Aj!\0\vA\bAA \b\x1B \x1B!\b@ A\x80qE Pr\r\0 \x07A\xC0\0F@ \0A0:\0\0 \0Aj!\0\f\v \x07A\bG\r\0 \0A0:\0\0 \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0 \0Aj!\0\v A\xC8\0j \0 A\xE8\0j \b\x92@ A\x88\x80qA\x88\x80F@@ \0 (H"F\r \0 \0-\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 \0Aj!\0\f\0\v\0\v (H!\v A\xD0\0j"\0  G!\x07 Aj"\b $ \0 \x07  Aj"\0 A\fj A\bj \b\x93 (#  \0 (\f (\b  Z A\xF0\0j$\0\v\x9D\x7F#\0A@j"$\0 A3j!\0\x7F ("A\xCA\0q"\x07A\bF"\b A\0NrE@  \x07A\xC0\0F\r A-:\x003 A4j!\0A\0 k\f\v \v! \b \x07A\xC0\0F" r A\x80qE A\0HrrE@ \0A+:\0\0 \0Aj!\0\vA\bAA \b\x1B \x1B!\b@ E A\x80qEr\r\0 \x07A\xC0\0F@ \0A0:\0\0 \0Aj!\0\f\v \x07A\bG\r\0 \0A0:\0\0 \0A\xD8\0A\xF8\0 A\x80\x80q\x1B:\0 \0Aj!\0\v A(j \0 A@k \b\x94@ A\x88\x80qA\x88\x80F@@ \0 (("F\r \0 \0-\0\0"A k  A\xE1\0kA\xFFqAI\x1B:\0\0 \0Aj!\0\f\0\v\0\v ((!\v A3j"\0  G! Aj"\x07 $ \0   Aj"\0 A\fj A\bj \x07\x93 (#  \0 (\f (\b  Z A@k$\0\v\xDB\x7F#\0Ak"$\0  6\f@ -\0AqE@ \0     \0(\0( \0!\f\v  $ p!\0 (\0#  \0 \0(\0AA \x1Bj(\0\0 (\0"  ,\0\v"A\0H\x1B!@   \xC0A\0H"\0\x1B ( A\xFFq \0\x1Bj F@ (\f!   A\fj ,\0\0\xC0 Aj! (\0! -\0\v!\f\v\v\v Aj$\0 \v\xED\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC \0A\x006\xD8 \0B\x007\xD0 \0Aj" $ ="A\xD0\x85A\xEA\x85 \0A\xE0j (\0(0\0 \0(# \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\xCCCA  \0A\xBCj \0A\bjA\0 \0A\xD0j \0Aj \0A\fj \0A\xE0jm\r\0 \0(\xCCB\f\v\v \0A\xC0j" \0(\xBC k" \0(\xC0 \0,\0\xCB!*! \0 6\0  A\0H\x1B  \0\x98AG@ A6\0\v \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xC0j  \0A\xD0j  \0A\xD0j$\0\v\xBD\x7F~\x7F#\0A\xF0k"\0$\0 \0 6\xE8 \0 6\xEC \0A\xDCj  \0A\xF0j \0A\xECj \0A\xE8j\xB3 \0A\x006\xD8 \0B\x007\xD0 \0A\xD0j"A " \0 \0(\xD0  \0,\0\xDBA\0H\x1B"6\xCC \0 \0A j6 \0A\x006 \0A:\0 \0A\xC5\0:\0A\0!@@@@ \0A\xECj \0A\xE8j(\r\0 \0(\xCC  \0(\xD4 \0,\0\xDB" A\0H\x1B"jF@ \0A\xD0j" At" A \0(\xD8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xDBA\0N\x1B" \0 \0(\xD0  \0,\0\xDBA\0H\x1B" j6\xCC\v \0(\xECC \0Aj \0Aj  \0A\xCCj \0(\xEC \0(\xE8 \0A\xDCj \0A j \0Aj \0Aj \0A\xF0j\xB2\r\0 \rA\0! \0(\xCC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xE0 \0,\0\xE7" A\0H\x1BE\r\0 \0-\0AqE\r\0 \0(" \0A jkA\x9FJ\r\0 \0 Aj6  \0(6\0\v \0  \0(\xCC \x99 \0)\0!\b  \0)\b7\b  \b7\0 \0A\xDCj \0A j \0( 5 \0A\xECj \0A\xE8j(@  (\0Ar6\0\v \0(\xEC \0A\xD0j  \0A\xDCj  \0A\xF0j$\0\f\vA!\v \0(\xECB\f\0\v\0\v\v\xA6\x7F\x7F#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC \0A\xCCj  \0A\xE0j \0A\xDCj \0A\xD8j\xB3 \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 \0Aj6\f \0A\x006\b \0A:\0\x07 \0A\xC5\0:\0A\0!@@@@ \0A\xDCj \0A\xD8j(\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\xDCC \0A\x07j \0Aj  \0A\xBCj \0(\xDC \0(\xD8 \0A\xCCj \0Aj \0A\fj \0A\bj \0A\xE0j\xB2\r\0 \rA\0! \0(\xBC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xD0 \0,\0\xD7" A\0H\x1BE\r\0 \0-\0\x07AqE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xBC \x9A9\0 \0A\xCCj \0Aj \0(\f 5 \0A\xDCj \0A\xD8j(@  (\0Ar6\0\v \0(\xDC \0A\xC0j  \0A\xCCj  \0A\xE0j$\0\f\vA!\v \0(\xDCB\f\0\v\0\v\v\xA6\x7F\x7F#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC \0A\xCCj  \0A\xE0j \0A\xDCj \0A\xD8j\xB3 \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 \0Aj6\f \0A\x006\b \0A:\0\x07 \0A\xC5\0:\0A\0!@@@@ \0A\xDCj \0A\xD8j(\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\xDCC \0A\x07j \0Aj  \0A\xBCj \0(\xDC \0(\xD8 \0A\xCCj \0Aj \0A\fj \0A\bj \0A\xE0j\xB2\r\0 \rA\0! \0(\xBC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xD0 \0,\0\xD7" A\0H\x1BE\r\0 \0-\0\x07AqE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xBC \x9B8\0 \0A\xCCj \0Aj \0(\f 5 \0A\xDCj \0A\xD8j(@  (\0Ar6\0\v \0(\xDC \0A\xC0j  \0A\xCCj  \0A\xE0j$\0\f\vA!\v \0(\xDCB\f\0\v\0\v\v\xF1\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC R!  \0A\xD0j~! \0A\xC4j  \0A\xC4j} \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xCCC   \0A\xB4j \0A\bj \0(\xC4 \0A\xC4j \0Aj \0A\fj m\r\0 \0(\xCCB\f\v\v@ \0(\xC8 \0,\0\xCF" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9C7\0 \0A\xC4j \0Aj \0(\f 5 \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xB8j  \0A\xC4j  \0A\xD0j$\0\v\x07\0 \0(\0\v\xF1\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC R!  \0A\xD0j~! \0A\xC4j  \0A\xC4j} \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xCCC   \0A\xB4j \0A\bj \0(\xC4 \0A\xC4j \0Aj \0A\fj m\r\0 \0(\xCCB\f\v\v@ \0(\xC8 \0,\0\xCF" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9F;\0 \0A\xC4j \0Aj \0(\f 5 \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xB8j  \0A\xC4j  \0A\xD0j$\0\v\xF1\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC R!  \0A\xD0j~! \0A\xC4j  \0A\xC4j} \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xCCC   \0A\xB4j \0A\bj \0(\xC4 \0A\xC4j \0Aj \0A\fj m\r\0 \0(\xCCB\f\v\v@ \0(\xC8 \0,\0\xCF" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \xA07\0 \0A\xC4j \0Aj \0(\f 5 \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xB8j  \0A\xC4j  \0A\xD0j$\0\v\xF1\x7F#\0A\xD0k"\0$\0 \0 6\xC8 \0 6\xCC R!  \0A\xD0j~! \0A\xC4j  \0A\xC4j} \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xCCj \0A\xC8j(\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xCCC   \0A\xB4j \0A\bj \0(\xC4 \0A\xC4j \0Aj \0A\fj m\r\0 \0(\xCCB\f\v\v@ \0(\xC8 \0,\0\xCF" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \xA16\0 \0A\xC4j \0Aj \0(\f 5 \0A\xCCj \0A\xC8j(@  (\0Ar6\0\v \0(\xCC \0A\xB8j  \0A\xC4j  \0A\xD0j$\0\v\x99\x8B.\x7F}|#\0Ak"$\0  6\f A\x006\b B\x007\0    j"  k\xC2#\0A\xE0\0k"%$\0 %A\bj! (\0"! ( k!#\0A\xC0k"$\0 A\x006\xA0 B\x007\x98 A\x006\xB0 B\x007\xA8 A\xB4j"A\x006\b B\x007\0 A\x80\xC0\0\xB6 A\x80\xC0\0\x96 A\fjA\0A0\xFC\v\0  6\b  6@\x7F Aj!\v\x7FAzA\x94-\0\0A1G\r\0A~ \vE\r \vA\x006 \v( "E@ \vA\x006( \vA/6 A/!\v \v($E@ \vA06$\vA| \v((AA\xD07 \0"E\r \v 6 A\x0068  \v6\0 A\xB4\xFE\x006A~!@ \vE\r\0 \v( E\r\0 \v($"E\r\0 \v("E\r\0 (\0 \vG\r\0 (A\xB4\xFE\0kAK\r\0@@ (8"@ ((AG\r\v A6( A6\f\f\v \v((  \0 A\x0068 \v( A6( A6\fE\r\v \v($E\r\0 \v("E\r\0 (\0 \vG\r\0 (A\xB4\xFE\0kAK\r\0A\0! A\x0064 B\x007, A\x006 \vA\x006\b \vB\x007 (\f"@ \v Aq60\v B\x007< A\x006$ A\x80\x806 B\x80\x80\x80\x80p7 B\xB4\xFE\x007 B\x81\x80\x80\x80p7\xC47  A\xB4 j"6p  6T  6P\vA\0 E\r\0 \v((  \v($\0 \vA\x006 \v\vE@ A\x006\xAC@@  (\0"6  ( k6A\0!\v#\0Ak"$\0A~!\x1B@ Aj"\rE\r\0 \r( E\r\0 \r($E\r\0 \r("\x07E\r\0 \x07(\0 \rG\r\0 \x07("A\xB4\xFE\0kAK\r\0 \r(\f"E\r\0 \r(\0"E@ \r(\r\v A\xBF\xFE\0F@ \x07A\xC0\xFE\x006A\xC0\xFE\0!\v \x07A\xDC\0j!- \x07A\xF2\0j!. \x07A\xF4j!" \x07A\xD8\0j!& \x07A\xF0\0j!# \x07A\xB4 j! \x07A\xF4\0j! \x07(@! \x07(\x958\0 \fAj!\f\f\v\v  \fAtj  \fj-\0\0\xB3C\0\0\x80=\x94C\0\0 \xC1\x928\0 \fAj!\f\f\v\v\v \bA\x90j$\0 \xCC %A\xE0\0j$\0 1 Aj$\0\v\x81\x7F#\0A k"$\0  6@ -\0AqE@ A\x7F6\0 \0      \0(\0(\0!@@@ (\0\0\v A\0:\0\0\f\v A:\0\0\f\v A:\0\0 A6\0\f\v  $ =! (\0#  $ n!\0 (\0#  \0 \0(\0(\0 A\fr \0 \0(\0(\0  Aj   Aj"  A\x95 F:\0\0 (!@ A\fk " G\r\0\v\v A j$\0 \v\xEE\x7F#\0A\x90k"\0$\0 \0 6\x88 \0 6\x8C \0A\x006\xD8 \0B\x007\xD0 \0Aj" $ >"A\xD0\x85A\xEA\x85 \0A\xE0j (\0( \0 \0(# \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 6\f \0A\x006\b@@ \0A\x8Cj \0A\x88j)\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\x8CA\xC0A  \0A\xBCj \0A\bjA\0 \0A\xD0j \0Aj \0A\fj \0A\xE0jo\r\0 \0(\x8C@\f\v\v \0A\xC0j" \0(\xBC k" \0(\xC0 \0,\0\xCB!*! \0 6\0  A\0H\x1B  \0\x98AG@ A6\0\v \0A\x8Cj \0A\x88j)@  (\0Ar6\0\v \0(\x8C \0A\xC0j  \0A\xD0j  \0A\x90j$\0\v\xBE\x7F~\x7F#\0A\xA0k"\0$\0 \0 6\x98 \0 6\x9C \0A\xE0j  \0A\xF0j \0A\xEFj \0A\xEEj\xB7 \0A\x006\xD8 \0B\x007\xD0 \0A\xD0j"A " \0 \0(\xD0  \0,\0\xDBA\0H\x1B"6\xCC \0 \0A j6 \0A\x006 \0A:\0 \0A\xC5\0:\0A\0!@@@@ \0A\x9Cj \0A\x98j)\r\0 \0(\xCC  \0(\xD4 \0,\0\xDB" A\0H\x1B"jF@ \0A\xD0j" At" A \0(\xD8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xDBA\0N\x1B" \0 \0(\xD0  \0,\0\xDBA\0H\x1B" j6\xCC\v \0(\x9CA\xC0 \0Aj \0Aj  \0A\xCCj \0,\0\xEF \0,\0\xEE \0A\xE0j \0A j \0Aj \0Aj \0A\xF0j\xB6\r\0 \rA\0! \0(\xCC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xE4 \0,\0\xEB" A\0H\x1BE\r\0 \0-\0AqE\r\0 \0(" \0A jkA\x9FJ\r\0 \0 Aj6  \0(6\0\v \0  \0(\xCC \x99 \0)\0!\b  \0)\b7\b  \b7\0 \0A\xE0j \0A j \0( 5 \0A\x9Cj \0A\x98j)@  (\0Ar6\0\v \0(\x9C \0A\xD0j  \0A\xE0j  \0A\xA0j$\0\f\vA!\v \0(\x9C@\f\0\v\0\v\v\xA7\x7F\x7F#\0A\x90k"\0$\0 \0 6\x88 \0 6\x8C \0A\xD0j  \0A\xE0j \0A\xDFj \0A\xDEj\xB7 \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 \0Aj6\f \0A\x006\b \0A:\0\x07 \0A\xC5\0:\0A\0!@@@@ \0A\x8Cj \0A\x88j)\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\x8CA\xC0 \0A\x07j \0Aj  \0A\xBCj \0,\0\xDF \0,\0\xDE \0A\xD0j \0Aj \0A\fj \0A\bj \0A\xE0j\xB6\r\0 \rA\0! \0(\xBC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xD4 \0,\0\xDB" A\0H\x1BE\r\0 \0-\0\x07AqE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xBC \x9A9\0 \0A\xD0j \0Aj \0(\f 5 \0A\x8Cj \0A\x88j)@  (\0Ar6\0\v \0(\x8C \0A\xC0j  \0A\xD0j  \0A\x90j$\0\f\vA!\v \0(\x8C@\f\0\v\0\v\v\xA7\x7F\x7F#\0A\x90k"\0$\0 \0 6\x88 \0 6\x8C \0A\xD0j  \0A\xE0j \0A\xDFj \0A\xDEj\xB7 \0A\x006\xC8 \0B\x007\xC0 \0A\xC0j"A " \0 \0(\xC0  \0,\0\xCBA\0H\x1B"6\xBC \0 \0Aj6\f \0A\x006\b \0A:\0\x07 \0A\xC5\0:\0A\0!@@@@ \0A\x8Cj \0A\x88j)\r\0 \0(\xBC  \0(\xC4 \0,\0\xCB" A\0H\x1B"jF@ \0A\xC0j" At" A \0(\xC8A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xCBA\0N\x1B" \0 \0(\xC0  \0,\0\xCBA\0H\x1B" j6\xBC\v \0(\x8CA\xC0 \0A\x07j \0Aj  \0A\xBCj \0,\0\xDF \0,\0\xDE \0A\xD0j \0Aj \0A\fj \0A\bj \0A\xE0j\xB6\r\0 \rA\0! \0(\xBC k"A\0L\r@@ -\0\0"A+k"\x07\0\0\v A.F\rA! A0kA\xFFqA I\r\f\v AF\r@ \x07\0\0\v -\0"A.F\rA! A0kA\xFFqA M\r\v@ \0(\xD4 \0,\0\xDB" A\0H\x1BE\r\0 \0-\0\x07AqE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xBC \x9B8\0 \0A\xD0j \0Aj \0(\f 5 \0A\x8Cj \0A\x88j)@  (\0Ar6\0\v \0(\x8C \0A\xC0j  \0A\xD0j  \0A\x90j$\0\f\vA!\v \0(\x8C@\f\0\v\0\v\v\xE6\0#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC R! \0A\xC8j  \0A\xD7j\x7F \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xDCj \0A\xD8j)\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xDCA\xC0   \0A\xB4j \0A\bj \0,\0\xD7 \0A\xC8j \0Aj \0A\fjA\xD0\x85o\r\0 \0(\xDC@\f\v\v@ \0(\xCC \0,\0\xD3" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9C7\0 \0A\xC8j \0Aj \0(\f 5 \0A\xDCj \0A\xD8j)@  (\0Ar6\0\v \0(\xDC \0A\xB8j  \0A\xC8j  \0A\xE0j$\0\v\xE6\0#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC R! \0A\xC8j  \0A\xD7j\x7F \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xDCj \0A\xD8j)\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xDCA\xC0   \0A\xB4j \0A\bj \0,\0\xD7 \0A\xC8j \0Aj \0A\fjA\xD0\x85o\r\0 \0(\xDC@\f\v\v@ \0(\xCC \0,\0\xD3" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \x9F;\0 \0A\xC8j \0Aj \0(\f 5 \0A\xDCj \0A\xD8j)@  (\0Ar6\0\v \0(\xDC \0A\xB8j  \0A\xC8j  \0A\xE0j$\0\v\xE6\0#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC R! \0A\xC8j  \0A\xD7j\x7F \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xDCj \0A\xD8j)\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xDCA\xC0   \0A\xB4j \0A\bj \0,\0\xD7 \0A\xC8j \0Aj \0A\fjA\xD0\x85o\r\0 \0(\xDC@\f\v\v@ \0(\xCC \0,\0\xD3" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \xA07\0 \0A\xC8j \0Aj \0(\f 5 \0A\xDCj \0A\xD8j)@  (\0Ar6\0\v \0(\xDC \0A\xB8j  \0A\xC8j  \0A\xE0j$\0\v\xE6\0#\0A\xE0k"\0$\0 \0 6\xD8 \0 6\xDC R! \0A\xC8j  \0A\xD7j\x7F \0A\x006\xC0 \0B\x007\xB8 \0A\xB8j"A " \0 \0(\xB8  \0,\0\xC3A\0H\x1B"6\xB4 \0 \0Aj6\f \0A\x006\b@@ \0A\xDCj \0A\xD8j)\r\0 \0(\xB4  \0(\xBC \0,\0\xC3" A\0H\x1B"jF@ \0A\xB8j" At" A \0(\xC0A\xFF\xFF\xFF\xFF\x07qAk \0,\0\xC3A\0N\x1B" \0 \0(\xB8  \0,\0\xC3A\0H\x1B" j6\xB4\v \0(\xDCA\xC0   \0A\xB4j \0A\bj \0,\0\xD7 \0A\xC8j \0Aj \0A\fjA\xD0\x85o\r\0 \0(\xDC@\f\v\v@ \0(\xCC \0,\0\xD3" A\0H\x1BE\r\0 \0(\f" \0AjkA\x9FJ\r\0 \0 Aj6\f  \0(\b6\0\v   \0(\xB4  \xA16\0 \0A\xC8j \0Aj \0(\f 5 \0A\xDCj \0A\xD8j)@  (\0Ar6\0\v \0(\xDC \0A\xB8j  \0A\xC8j  \0A\xE0j$\0\v\x81\x7F#\0A k"$\0  6@ -\0AqE@ A\x7F6\0 \0      \0(\0(\0!@@@ (\0\0\v A\0:\0\0\f\v A:\0\0\f\v A:\0\0 A6\0\f\v  $ >! (\0#  $ p!\0 (\0#  \0 \0(\0(\0 A\fr \0 \0(\0(\0  Aj   Aj"  A\x97 F:\0\0 (!@ A\fk " G\r\0\v\v A j$\0 \v@\x7FA\0!\0\x7F  F\x7F \0 (\0 \0Atj"\0A\x80\x80\x80\x80\x7Fq"Av r \0s!\0 Aj!\f\v\v\v\v\0 \0  \xA2\vT\x7F@@  G@A\x7F!\0  F\r (\0" (\0"H\r  J@A Aj! Aj!\f\v\0\v\v  G!\0\v \0\v@\x7FA\0!\0\x7F  F\x7F \0 ,\0\0 \0Atj"\0A\x80\x80\x80\x80\x7Fq"Av r \0s!\0 Aj!\f\v\v\v\v\0 \0  \xCE\v^\x7F   kj!@@  G@A\x7F!\0  F\r ,\0\0" ,\0\0"\x07H\r  \x07J@A Aj! Aj!\f\v\0\v\v  G!\0\v \0\vT\x7F  \0(T" A\0 A\x80j"\xCA" k  \x1B"   K\x1B"Y \0  j"6T \0 6\b \0  j6 \v\xA8\x7F \0(T"(\0! (" \0( \0("\x07k"  I\x1B"@  \x07 Y  (\0 j"6\0  ( k"6\v    K\x1B"@   Y  (\0 j"6\0  ( k6\v A\0:\0\0 \0 \0(,"6 \0 6 \v\b\0 \0K!\v\0 \0 \0(\0A\fk(\0j\xC0\v\0 \0 \0(\0A\fk(\0j\x81\v \0 \0A\bk\xC0\v \0 \0A\bk\x81\v\0 \0  )\bA\0  (\0(\0\v \0 \0\xB0!\v\x95\x7F~ (," ("I@  6, !\vB\x7F! @ Aq"\x07E AF \x07AFqr\r\0 @  ( A j ,\0+A\0H\x1Bk\xAC! \v@@@ \0\v A\bq@ (\f (\bk\xAC!\b\f\v  (k\xAC!\b\f\v !\b\v  \b|"B\0S  Ur\r\0 A\bq!@ P\r\0 @ (\fE\r\v AqE\r\0 E\r\v @  6  (\b \xA7j6\f\v Aq@  ( \xA7j6\v ! \v \0 7\b \0B\x007\0\v\x99\b\x7F A\x7FF@A\0\v \0(\b! \0(\f! \0\x7F \0(" \0(G@ \0(,\f\v \0-\x000AqE@A\x7F\v \0(,!\x07 \0(! \0A j"A\0\xAA A \0((A\xFF\xFF\xFF\xFF\x07qAk \0,\0+A\0N\x1B" \0 \0(  \0,\0+"\bA\0H" \x1B"6 \0  \0($ \b \x1Bj6 \0   kj"6  \x07 kj\v" Aj"  I\x1B"6, \0-\x000A\bq@ \0 6 \0 \0( \0A j \0,\0+A\0H\x1B"6\b \0   kj6\f\v \0 \xC0\xC3\v\x8E\x7F \0(," \0("I@ \0 6, !\v\x7FA\x7F \0(\f" \0(\bM\r\0 A\x7FF@ \0 6 \0 Ak6\fA\0\v \0-\x000AqE@A\x7F Ak-\0\0 A\xFFqG\r\v \0 6 \0 Ak"\x006\f \0 :\0\0 \v\v_\x7F \0(," \0("I@ \0 6, !\vA\x7F!@ \0-\x000A\bqE\r\0  \0("K\x7F \0 6  \v \0(\f"\0M\r\0 \0-\0\0!\v \v\0 \0 \0(\0A\fk(\0j\xC1\v \0 \0A\bk\xC1\v \0 \0A\f\xA5\v\0 \0AjK \0A\bk\v\f\0 \0A\fjK \0\v\0 \0 \0(\0A\fk(\0j\xC1\v \0 \0A\xA5\v\f\0 \0AjK \0\v\0 \0 \0(\0A\fk(\0j\xC5\v \0 \0A\b\xA5\v\f\0 \0A\bjK \0\v\x96\x7F@@  L\r\0 \0(" \0("O@ \0 -\0\0 \0(\0(4\0A\x7FF\r Aj! Aj!\f \0  k"  k"  J\x1B"\x7F @   \xFC \0\0\v \0( \v j6  j!  j!\f\v\0\v\v \v3\x7FA\x7F! \0 \0(\0($\0\0A\x7FG@ \0(\f"-\0\0! \0 Aj6\f\v \v\0A\x7F\v\x91\x7F@@  L\r\0@ \0(\f" \0("I@ \0  k"  k"  J\x1B"\x7F @   \xFC \0\0\v \0(\f \v j6\f\f\v \0 \0(\0((\0\0"A\x7FF\r  :\0\0A!\v  j!  j!\f\v\v \v\0 \0B\x7F7\b \0B\x007\0\v\0 \0B\x7F7\b \0B\x007\0\v\0 \0\v\f\0 \0\xC3 \0!\v\f\0 \0(<\x9E\v;\x7F \0(<#\0Ak"\0$\0  A\xFFq \0A\bj\x9E! \0)\b! \0Aj$\0B\x7F  \x1B\v)\0  (\0A\x07jAxq"Aj6\0 \0 )\0 )\b\xC49\0\v\xB4\x7F|~#\0A\xB0k"\v$\0 \vA\x006,@ \xBD"B\0S@A!A\x9D ! \x9A"\xBD!\f\v A\x80q@A!A\xA0 !\f\vA\xA3 A\x9E Aq"\x1B! E!\v@ B\x80\x80\x80\x80\x80\x80\x80\xF8\xFF\0\x83B\x80\x80\x80\x80\x80\x80\x80\xF8\xFF\0Q@ \0A  Aj" A\xFF\xFF{q7 \0  3 \0A\xFB\rA\xED A q"\x1BA\xCEA\x97 \x1B  b\x1BA3 \0A   A\x80\xC0\0s7    J\x1B!\r\f\v \vAj!@@@  \vA,j\xD1" \xA0"D\0\0\0\0\0\0\0\0b@ \v \v(,"Ak6, A r"A\xE1\0G\r\f\v A r"A\xE1\0F\r \v(,!\f\f\v \v Ak"\f6, D\0\0\0\0\0\0\xB0A\xA2!\vA  A\0H\x1B! \vA0jA\xA0A\0 \fA\0N\x1Bj"!\x07@ \x07 \xFC"6\0 \x07Aj!\x07  \xB8\xA1D\0\0\0\0e\xCD\xCDA\xA2"D\0\0\0\0\0\0\0\0b\r\0\v@ \fA\0L@ \f! \x07! !\b\f\v !\b \f! @A AO\x1B!@ \x07Ak" \bI\r\0 \xAD!\x1BB\0!@  5\0 \x1B\x86 |" B\x80\x94\xEB\xDC\x80"B\x80\x94\xEB\xDC~}>\0 Ak" \bO\r\0\v B\x80\x94\xEB\xDCT\r\0 \bAk"\b >\0\v@ \b \x07"I@ Ak"\x07(\0E\r\v\v \v \v(, k" 6, !\x07 A\0J\r\0\v\v A\0H@ AjA nAj! A\xE6\0F!@A A\0 k" A O\x1B!\r@  \bM@A\0A \b(\0\x1B!\x07\f\vA\x80\x94\xEB\xDC \rv!A\x7F \rtA\x7Fs!A\0! \b!\x07@ \x07 \x07(\0" \rv j6\0  q l! \x07Aj"\x07 I\r\0\vA\0A \b(\0\x1B!\x07 E\r\0  6\0 Aj!\v \v \v(, \rj" 6,  \x07 \bj"\b \x1B" Atj   kAu J\x1B! A\0H\r\0\v\vA\0! @  \bM\r\0  \bkAuA l! A !\x07 \b(\0"A I\r\0@ Aj!  \x07A l"\x07O\r\0\v\v A\0 A\xE6\0G\x1Bk A\xE7\0F A\0Gqk"  kAuA lA kH@ \vA0jA\x84\`A\xA4b \fA\0H\x1Bj A\x80\xC8\0j"\fA m"Atj!\rA !\x07 \f A lk"A\x07L@@ \x07A l!\x07 Aj"A\bG\r\0\v\v@ \r(\0"\f \f \x07n" \x07lk"E \rAj" Fq\r\0@ AqE@D\0\0\0\0\0\0@C! \x07A\x80\x94\xEB\xDCG \b \rOr\r \rAk-\0\0AqE\r\vD\0\0\0\0\0@C!\vD\0\0\0\0\0\0\xE0?D\0\0\0\0\0\0\xF0?D\0\0\0\0\0\0\xF8?  F\x1BD\0\0\0\0\0\0\xF8?  \x07Av"F\x1B  K\x1B!@ \r\0 -\0\0A-G\r\0 \x9A! \x9A!\v \r \f k"6\0  \xA0 a\r\0 \r  \x07j"6\0 A\x80\x94\xEB\xDCO@@ \rA\x006\0 \b \rAk"\rK@ \bAk"\bA\x006\0\v \r \r(\0Aj"6\0 A\xFF\x93\xEB\xDCK\r\0\v\v  \bkAuA l! A !\x07 \b(\0"A I\r\0@ Aj!  \x07A l"\x07O\r\0\v\v \rAj"   I\x1B!\v@ "\f \bM"\x07E@ Ak"(\0E\r\v\v@ A\xE7\0G@ A\bq!\f\v A\x7FsA\x7F A \x1B" J A{Jq"\x1B j! A\x7FA~ \x1B j! A\bq"\r\0Aw!@ \x07\r\0 \fAk(\0"E\r\0A !A\0! A p\r\0@ "\x07Aj!  A l"pE\r\0\v \x07A\x7Fs!\v \f kAuA l! A_qA\xC6\0F@A\0!  jA k"A\0 A\0J\x1B"  J\x1B! \f\vA\0!  j jA k"A\0 A\0J\x1B"  J\x1B! \vA\x7F!\r A\xFD\xFF\xFF\xFF\x07A\xFE\xFF\xFF\xFF\x07 r"\x1BJ\r A\0GjAj!@ A_q"\x07A\xC6\0F@ A\xFF\xFF\xFF\xFF\x07sJ\r A\0 A\0J\x1B!\f\v  Au"s k\xAD x"kAL@@ Ak"A0:\0\0  kAH\r\0\v\v Ak" :\0\0 AkA-A+ A\0H\x1B:\0\0  k" A\xFF\xFF\xFF\xFF\x07sJ\r\v  j" A\xFF\xFF\xFF\xFF\x07sJ\r \0A   j" 7 \0  3 \0A0  A\x80\x80s7@@@ \x07A\xC6\0F@ \vAjA r!  \b \b K\x1B"!\b@ \b5\0 x!@  \bG@  \vAjM\r@ Ak"A0:\0\0  \vAjK\r\0\v\f\v  G\r\0 Ak"A0:\0\0\v \0   k3 \bAj"\b M\r\0\v @ \0A\x9AA3\v A\0L \b \fOr\r@ \b5\0 x" \vAjK@@ Ak"A0:\0\0  \vAjK\r\0\v\v \0 A A N\x1B3 A k! \bAj"\b \fO\r A J ! \r\0\v\f\v@ A\0H\r\0 \f \bAj \b \fI\x1B! \vAjA r!\f \b!\x07@ \f \x075\0 \fx"F@ Ak"A0:\0\0\v@ \x07 \bG@  \vAjM\r@ Ak"A0:\0\0  \vAjK\r\0\v\f\v \0 A3 Aj! rE\r\0 \0A\x9AA3\v \0  \f k"  H\x1B3 k! \x07Aj"\x07 O\r A\0N\r\0\v\v \0A0 AjAA\07 \0   k3\f\v !\v \0A0 A jA A\07\v \0A  A\x80\xC0\0s7   J\x1B!\r\f\v  AtAuA qj! @ A\vK\r\0A\f k!D\0\0\0\0\0\x000@!@ D\0\0\0\0\0\x000@\xA2! Ak"\r\0\v -\0\0A-F@  \x9A \xA1\xA0\x9A!\f\v  \xA0 \xA1!\v  \v(,"\x07 \x07Au"s k\xAD x"F@ Ak"A0:\0\0 \v(,!\x07\v Ar! A q!\f Ak" Aj:\0\0 AkA-A+ \x07A\0H\x1B:\0\0 A\bqE A\0Lq!\b \vAj!\x07@ \x07" \xFC"A\x90\xF5\0j-\0\0 \fr:\0\0  \xB7\xA1D\0\0\0\0\0\x000@\xA2"D\0\0\0\0\0\0\0\0a \bq \x07Aj"\x07 \vAjkAGrE@ A.:\0 Aj!\x07\v D\0\0\0\0\0\0\0\0b\r\0\vA\x7F!\r A\xFD\xFF\xFF\xFF\x07  k"\bj"kJ\r\0 \0A   Aj \x07 \vAj"k"\x07 \x07Ak H\x1B \x07 \x1B"j" 7 \0 3 \0A0   A\x80\x80s7 \0  \x073 \0A0  \x07kA\0A\07 \0  \b3 \0A   A\x80\xC0\0s7    J\x1B!\r\v \vA\xB0j$\0 \r\v\0B\0\v\xD6\x07\x7F#\0A k"$\0  \0("6 \0(!  6  6   k"6  j! Aj!A!\x07\x7F@@@ \0(< A A\fj\v\x9E@ !\f\v@  (\f"F\r A\0H@ !\f\v A\bA\0  ("\bK" \x1Bj"  \bA\0 \x1Bk"\b (\0j6\0 A\fA \x1Bj" (\0 \bk6\0  k! \0(< " \x07 k"\x07 A\fj\v\x9EE\r\0\v\v A\x7FG\r\v \0 \0(,"6 \0 6 \0  \0(0j6 \f\v \0A\x006 \0B\x007 \0 \0(\0A r6\0A\0 \x07AF\r\0  (k\v A j$\0\v\x89\x7F#\0Ak"\0$\0@ \0A\fj \0A\bj\r\0A\xEC\xDB \0(\fAtAj/"6\0 E\r\0 \0(\b/"@A\xEC\xDB(\0" \0(\fAtjA\x006\0  E\r\vA\xEC\xDBA\x006\0\v \0Aj$\0A\x84\xCEA\x006\0A\x80\xCEA6\0\x95A\x84\xCEA\xA0\xCE(\x006\0A\xA0\xCEA\x80\xCE6\0A\xA4\xCEA.6\0A\xA8\xCEA\x006\0\xCCA\xA8\xCEA\xA0\xCE(\x006\0A\xA0\xCEA\xA4\xCE6\0A\xCC\xCFA\xD4\xCE6\0A\xA4\xCFA\x80\x806\0A\xA0\xCFA\xC0\xEC6\0A\x84\xCFA*6\0A\xA8\xCFA\xB0\xCB(\x006\0\v\v\xBF\xBE(\0A\x80\b\v\x940123456789abcdefghijklmnopqrstuvwxyz\0load_spz\0infinity\0February\0January\0July\0Thursday\0Tuesday\0Wednesday\0Saturday\0Sunday\0Monday\0Friday\0May\0%m/%d/%y\0-+ 0X0x\0-0X+0X 0X-0x+0x 0x\0Nov\0Thu\0August\0unsigned short\0unsigned int\0invalid literal/lengths set\0invalid code lengths set\0unknown header flags set\0invalid distances set\0get\0Oct\0float\0invalid bit length repeat\0Sat\0numPoints\0colors\0UnpackOptions\0positions\0rotations\0too many length or distance symbols\0invalid stored block lengths\0scales\0alphas\0[SPZ: ERROR] Check failed: %s:%d: %s\0vf32_ptr\0Apr\0vector\0money_get error\0[SPZ ERROR] deserializePackedGaussians: read error\0October\0November\0September\0December\0unsigned char\0Mar\0/emsdk/emscripten/system/lib/libcxxabi/src/private_typeinfo.cpp\0Sep\0%I:%M:%S %p\0Sun\0Jun\0Mon\0nan\0Jan\0coordinateSystem\0CoordinateSystem\0Jul\0bool\0April\0invalid code -- missing end-of-block\0incorrect header check\0incorrect length check\0incorrect data check\0push_back\0invalid distance too far back\0Fri\0sh\0header crc mismatch\0March\0Aug\0unsigned long long\0unsigned long\0std::wstring\0basic_string\0std::string\0std::u16string\0std::u32string\0inf\x000123456789abcdef\0%.0Lf\0%Lf\0resize\0invalid window size\0true\0Tue\0false\0invalid block type\0June\0double\0shDegree\0bad_array_new_length was thrown in -fno-exceptions mode\0invalid literal/length code\0invalid distance code\0RawGaussianCloud\0unknown compression method\0[SPZ ERROR] deserializePackedGaussians: header not found\0%0*lld\0%*lld\0+%lld\0%+.4ld\0void\0locale not supported\0antialiased\0Wed\0%Y-%m-%d\0[SPZ ERROR] deserializePackedGaussians: Too many points: %d\0[SPZ ERROR] deserializePackedGaussians: Unsupported SH degree: %d\0[SPZ ERROR] deserializePackedGaussians: version not supported: %d\0Dec\0./spz/src/cc/load-spz.cc\0Feb\0%a %b %d %H:%M:%S %Y\0POSIX\0VectorUInt8T\0%H:%M:%S\0NAN\0PM\0AM\0%H:%M\0LC_ALL\0ASCII\0LANG\0RUF\0LUF\0INF\0RDF\0LDF\0UNSPECIFIED\0C\0RUB\0LUB\0RDB\0LDB\0catching a class without an object?\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\0emscripten::memory_view\x000123456789\0C.UTF-8\x0001234567\0VectorFloat32\x0001\x001.3.1\0.\0-\0(packed.alphas.size()) == (numPoints)\0(null)\0(packed.colors.size()) == (numPoints * 3)\0(packed.scales.size()) == (numPoints * 3)\0(packed.sh.size()) == (numPoints * shDim * 3)\0(packed.rotations.size()) == (numPoints * (packed.usesQuaternionSmallestThree ? 4 : 3))\0(packed.positions.size()) == (numPoints * 3 * (usesFloat16 ? 2 : 3))\0%\0length_error was thrown in -fno-exceptions mode with message "%s"\0[SPZ: ERROR] Unsupported SH degree: %d \0 \0\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0\0\x80?\0A\xA0 \v\xB60\0\0\xF0c\0\0\xF0c\0\0P\0\0\xA4d\0\x008\0\0N3spz13GaussianCloudE\0\0\0\xA4d\0\0X\0\0N3spz13UnpackOptionsE\0ppiip\0\xF0c\0\0|\0\0\xA4d\0\0\x84\0\0NSt3__26vectorIfNS_9allocatorIfEEEE\0ipp\0(e\0\0\xD4\0\0\0\0\0\0\0\0\0\xEC\0\0\0\0\0\x008\0\0\0\0\0\0h\0\0\0\0\0\0NSt3__28optionalIfEE\0\0\0\0\xCCd\0\0\xF8\0\0(\0\0NSt3__227__optional_move_assign_baseIfLb1EEE\0\0\0\0\xCCd\0\x004\0\0d\0\0NSt3__227__optional_copy_assign_baseIfLb1EEE\0\0\0\0\xCCd\0\0p\0\0\x98\0\0NSt3__220__optional_move_baseIfLb1EEE\0\0\0\xCCd\0\0\xA4\0\0\xCC\0\0NSt3__220__optional_copy_baseIfLb1EEE\0\0\0\xCCd\0\0\xD8\0\0\0\0NSt3__223__optional_storage_baseIfLb0EEE\0\0\0\0\xA4d\0\0\f\0\0NSt3__224__optional_destruct_baseIfLb1EEE\0\0\0\xA4d\0\0@\0\0NSt3__218__sfinae_ctor_baseILb1ELb1EEE\0\0\xA4d\0\0p\0\0NSt3__220__sfinae_assign_baseILb1ELb1EEE\0\0\0\0\x84e\0\0\xAC\0\0\0\0\0\0|\0\0PNSt3__26vectorIfNS_9allocatorIfEEEE\0\0\0\0\x84e\0\0\xE4\0\0\0\0\0|\0\0PKNSt3__26vectorIfNS_9allocatorIfEEEE\0pp\0v\0vp\0\0\0\x9C\0\0pp\0\0\x98c\0\0|\0\x008d\0\0vppf\0\0\0\0\x98c\0\0|\0\0\xFCc\0\x008d\0\0vppif\0\0\0\xFCc\0\0|\0\0ipp\0\\\0\x008d\0\0\xA4d\0\0d\0\0N10emscripten3valE\0\0\xAC\0\0|\0\0\xFCc\0\0pppi\0\0\0\0\0\0\0\0\xA8c\0\0|\0\0\xFCc\0\x008d\0\0ippif\0\0\0(e\0\0\xD0\0\0\0\0\0\0\0\0\0\xE8\0\0\0\0\0\x008\0\0\0\0\0\0h\0\0\0\0\0\0NSt3__28optionalIhEE\0\0\0\0\xCCd\0\0\xF4\0\0$\0\0NSt3__227__optional_move_assign_baseIhLb1EEE\0\0\0\0\xCCd\0\x000\0\0\`\0\0NSt3__227__optional_copy_assign_baseIhLb1EEE\0\0\0\0\xCCd\0\0l\0\0\x94\0\0NSt3__220__optional_move_baseIhLb1EEE\0\0\0\xCCd\0\0\xA0\0\0\xC8\0\0NSt3__220__optional_copy_baseIhLb1EEE\0\0\0\xCCd\0\0\xD4\0\0\0\0\0NSt3__223__optional_storage_baseIhLb0EEE\0\0\0\0\xA4d\0\0\b\0\0NSt3__224__optional_destruct_baseIhLb1EEE\0\0\0\xA4d\0\0<\0\0NSt3__26vectorIhNS_9allocatorIhEEEE\0\x84e\0\0p\0\0\0\0\0\x004\0\0PNSt3__26vectorIhNS_9allocatorIhEEEE\0\0\0\0\x84e\0\0\xA8\0\0\0\0\x004\0\0PKNSt3__26vectorIhNS_9allocatorIhEEEE\0pp\0vp\0\`\0\0pp\0\0\x98c\0\x004\0\0\xC0c\0\0vppi\0\0\0\0\x98c\0\x004\0\0\xFCc\0\0\xC0c\0\0vppii\0\0\0\xFCc\0\x004\0\0ipp\0\\\0\0\xC0c\0\0\xA8\0\x004\0\0\xFCc\0\0pppi\0\0\0\0\xA8c\0\x004\0\0\xFCc\0\0\xC0c\0\0ippii\0p\0vp\0ipp\0vppi\0ipp\0vppi\0ppp\0vppp\0\0\0Xd\0\0p\0\0N3spz16CoordinateSystemE\0p\0vp\0ipp\0vppi\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\xA4d\0\0\xB0\0\0NSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE\0\0\xA4d\0\0\xF8\0\0NSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE\0\0\xA4d\0\0@\0\0NSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE\0\0\0\xA4d\0\0\x8C\0\0NSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE\0\0\0\xA4d\0\0\xD8\0\0N10emscripten11memory_viewIcEE\0\0\xA4d\0\0\0\0\0N10emscripten11memory_viewIaEE\0\0\xA4d\0\0(\0\0N10emscripten11memory_viewIhEE\0\0\xA4d\0\0P\0\0N10emscripten11memory_viewIsEE\0\0\xA4d\0\0x\0\0N10emscripten11memory_viewItEE\0\0\xA4d\0\0\xA0\0\0N10emscripten11memory_viewIiEE\0\0\xA4d\0\0\xC8\0\0N10emscripten11memory_viewIjEE\0\0\xA4d\0\0\xF0\0\0N10emscripten11memory_viewIlEE\0\0\xA4d\0\0\0\0N10emscripten11memory_viewImEE\0\0\xA4d\0\0@\0\0N10emscripten11memory_viewIxEE\0\0\xA4d\0\0h\0\0N10emscripten11memory_viewIyEE\0\0\xA4d\0\0\x90\0\0N10emscripten11memory_viewIfEE\0\0\xA4d\0\0\xB8\0\0N10emscripten11memory_viewIdEE\0A\xE43\v\xA1(\x960\x07w,a\xEE\xBAQ \x99\xC4m\x07\x8F\xF4jp5\xA5c\xE9\xA3\x95d\x9E2\x88\xDB\xA4\xB8\xDCy\xE9\xD5\xE0\x88\xD9\xD2\x97+L\xB6 \xBD|\xB1~\x07-\xB8\xE7\x91\xBF\x90d\xB7\xF2 \xB0jHq\xB9\xF3\xDEA\xBE\x84}\xD4\xDA\xEB\xE4\xDDmQ\xB5\xD4\xF4\xC7\x85\xD3\x83V\x98l\xC0\xA8kdz\xF9b\xFD\xEC\xC9e\x8AO\\\xD9lcc=\xFA\xF5\r\b\x8D\xC8 n;^iL\xE4A\`\xD5rqg\xA2\xD1\xE4jm\r\xA8Zjz\v\xCF\xE4\x9D\xFF \x93'\xAE\0 \xB1\x9E\x07}D\x93\xF0\xD2\xA3\b\x87h\xF2\xFE\xC2i]Wb\xF7\xCBge\x80q6l\xE7knv\x1B\xD4\xFE\xE0+\xD3\x89Zz\xDA\xCCJ\xDDgo\xDF\xB9\xF9\xF9\xEF\xBE\x8EC\xBE\xB7\xD5\x8E\xB0\`\xE8\xA3\xD6\xD6~\x93\xD1\xA1\xC4\xC2\xD88R\xF2\xDFO\xF1g\xBB\xD1gW\xBC\xA6\xDD\xB5?K6\xB2H\xDA+\r\xD8L\x1B \xAF\xF6J6\`zA\xC3\xEF\`\xDFU\xDFg\xA8\xEF\x8En1y\xBEiF\x8C\xB3a\xCB\x83f\xBC\xA0\xD2o%6\xE2hR\x95w\f\xCCG\v\xBB\xB9"/&U\xBE;\xBA\xC5(\v\xBD\xB2\x92Z\xB4+j\xB3\\\xA7\xFF\xD7\xC21\xCF\xD0\xB5\x8B\x9E\xD9,\xAE\xDE[\xB0\xC2d\x9B&\xF2c\xEC\x9C\xA3ju \x93m\xA9 \x9C?6\xEB\x85g\x07rW\0\x82J\xBF\x95z\xB8\xE2\xAE+\xB1{8\x1B\xB6\f\x9B\x8E\xD2\x92\r\xBE\xD5\xE5\xB7\xEF\xDC|!\xDF\xDB\v\xD4\xD2\xD3\x86B\xE2\xD4\xF1\xF8\xB3\xDDhn\x83\xDA\xCD\xBE\x81[&\xB9\xF6\xE1w\xB0owG\xB7\xE6Z\b\x88pj\xFF\xCA;f\\\v\xFF\x9Ee\x8Fi\xAEb\xF8\xD3\xFFkaE\xCFlx\xE2 \xA0\xEE\xD2\r\xD7T\x83N\xC2\xB39a&g\xA7\xF7\`\xD0MGiI\xDBwn>Jj\xD1\xAE\xDCZ\xD6\xD9f\v\xDF@\xF0;\xD87S\xAE\xBC\xA9\xC5\x9E\xBB\xDE\x7F\xCF\xB2G\xE9\xFF\xB50\xF2\xBD\xBD\x8A\xC2\xBA\xCA0\x93\xB3S\xA6\xA3\xB4$6\xD0\xBA\x93\xD7\xCD)W\xDET\xBFg\xD9#.zf\xB3\xB8Ja\xC4\x1Bh]\x94+o*7\xBE\v\xB4\xA1\x8E\f\xC3\x1B\xDFZ\x8D\xEF-\0\0\0\0F;ge\x8Cv\xCE\xCA\xCAM\xA9\xAFY\xEB\xEDN\xD0\x8A+\xD5\x9D#\x84\x93\xA6D\xE1\xB2\xD6\xDB\x9D\xF4\xED\xBC\xF8>\xA0Wx\x9Br2\xEB=6\xD3\xADQ\xB6gK\xF8!p\x9F|%\xAB\xC6\xE0c\x90\xA1\x85\xA9\xDD\b*\xEF\xE6oO|@+\xAE:{L\xCB\xF06\xE5d\xB6\r\x82\x97}}\xD1Fz\x1B\v\xD3\xB7]0\xB4\xD2\xCE\x96\xF03\x88\xAD\x97VB\xE0>\xF9\xDBY\x9C\vP\xFCMk\x9B\x7F\x87&2\xD0\xC1U\xB5R\xBBT\x80v1\xDE\xCD\xDF\x9E\x98\xF6\xB8\xFB\xB9\x86'\x87\xFF\xBD@\xE25\xF0\xE9Ms\xCB\x8E(\xE0m\xCA\xC9\xA6V\xAD\xACl\x1B* cf.\xFB:\xFAh\xC0]\x9F\xA2\x8D\xF40\xE4\xB6\x93Uw\xD7\xB41+\xB0\xD1\xFBf~\xBD]~\x1B\x9C-\xE1g\xDA\x86[/\xADV\`H\xC8\xC5\xC6\f)\x83\xFDkLI\xB0\xC2\xE3\x8B\xA5\x86\xA0\xF85P\x9B\x9FP\x9A\xD66\xFF\xDC\xEDQ\x9AOK{ pr\xC3=\xDB\xB1\x85\xBC\xD4\xA4v#\xA8\xE2MD\xCD(\0\xEDbn;\x8A\x07\xFD\x9D\xCE\xE6\xBB\xA6\xA9\x83q\xEB\0,7\xD0gI3\v>\xD5u0Y\xB0\xBF}\xF0\xF9F\x97zj\xE0\xD3\x9B,\xDB\xB4\xFE\xE6\x96Q\xA0\xADz4\x81\xDD\xE5H\xC7\xE6\x82-\r\xAB+\x82K\x90L\xE7\xD86\b\x9E\rocT@\xC6\xCC{\xA1\xA9\xF0/[\xCBcJ\x91\x86\xCA\xE5\xD7\xBD\xAD\x80D\x1B\xE9a \x8E\xC8m'\xAB\x8EV@\xCE\xAF&\xDF\xB2\xE9\xB8\xD7#Pxekv\xF6\xCD2\xFC\xB0\xF6U\x99z\xBB\xFC6<\x80\x9BS8[\xC2\xCF~\`\xA5\xAA\xB4-\f\xF2k\`a\xB0/\x81'\x8BH\xE4\xED\xC6\xE1K\xAB\xFD\x86.\x8A\x8DR\xCC\xB6~7\xFB\xD7\x98@\xC0\xB0\xFD\xD3f\xF4\x95]\x93y_:\xD6+]\xB3,@\xF1kj{\x96\xA06?\xA1\xE6\rX\xC4u\xAB%3\x90{@\xF9\xDD\xD2\xEF\xBF\xE6\xB5\x8A\x9E\x96*\xF6\xD8\xADM\x93\xE0\xE4[P&\xDFkA\xBA\xD7&\xE8\x91\x8Fp\xB0m\f\xF6Vwi<\x1B\xDE\xC6z \xB9\xA3\xE9\x86\xFDB\xAF\xBD\x9A'e\xF03\x88#\xCBT\xED:\xE0 ^|\xDBn;\xB6\x96\xC7\x94\xF0\xAD\xA0\xF1c\v\xE4%0\x83u\xEF}*\xDA\xA9FM\xBF\x886\xD2\xC3\xCE\r\xB5\xA6@ B{{l\xD1\xDD?\x8D\x97\xE6X\xE8]\xAB\xF1G\x1B\x90\x96"K\xCF\xBEYp\xA8\xDB\x93=t\xD5fF\xA0"\xF0\0\x9BE\x95\xCA\xD6\xEC:\x8C\xED\x8B_\xAD\x9D#\xEB\xA6sF!\xEB\xDA\xE9g\xD0\xBD\x8C\xF4v\xF9m\xB2M\x9E\bx\x007\xA7>;P\xC21\xB0\xF5Dw\x8B\x92!\xBD\xC6;\x8E\xFB\xFD\\\xEBh[ .\`\x7Fo\xE4-\xD6\xC0\xA2\xB1\xA5\x83f.\xD9\xC5]I\xBC\xE0I+\x87v\xDA\x8D\xC3\x97\x9C\xB6\xA4\xF2V\xFB\r]\xC0j8\x1B3\xA4R T\xC1\x98m\xFDn\xDEV\x9A\vM\xF0\xDE\xEA\v\xCB\xB9\x8F\xC1\x86 \x87\xBDwE\xA6\xCD\xE89\xE0\xF6\x8F\\*\xBB&\xF3l\x80A\x96\xFF&w\xB9bsP\xCB\xBD5k\xAC\xD8\0\0\0\0X\x80\xE2\xD7\xF1\xB4t\xA9\x86V\xA3\xE2\rh\xE9\xBA\x8D\x8A>\v\xDC\x9DK\x8B>J\x85\xA1 \xDD\x9DC\xDEt\x1B},\x9B\xF7\xAAg\xC9\xE0?\x90+7\x96}\x94\xCE\x96\x9FC ;BR\xBB\xA0\xC4\xFB=\xF6g\xA3\xBD\xB0\xE86*\xFA\xB0\xB6\xC8-0\x9E\x8EA\xB0|Y\x8F&\xE3\xD7\xA6\xCD~ Wn&\xA0\xB5\xB9m+\x8B\xF35\xABi$\x9C-?\x87\xC4\xAD\xDDPv\x84&L\xF6f\xF1\xE5p0R\xBD\xF0\xD2\x85\xF6{\xEC\xCF\xAE\xFB\x07}X\xBB_\xFD\xBAl\x91k%/\xC9\xEB\xC7\xF8\`m\x91[8\xEDs\x8CsfM\xC6+\xE6\xAF\x82\`\xF9\xB2\xDA\xE0\x1BeM\xC65F\xCD$\xE2\xEFKrA\xB7\xCB\x90\x96\xFC@\xAE\xDC\xA4\xC0L\v\rF\xA8U\xC6\xF8\x7F\x9BPg<\xC3\xD0\x85\xEBjV\xD3H2\xD61\x9Fy]\xD5!\xDD\xED\x88[\xBB\xA1\xD0\xDBYv(\xEC\bMpl\xEA\x9A\xD9\xEA\xBC9\x81j^\xEE\xCA\xE1\`\xA4\x92a\x82s;\xE7\xD4\xD0cg6\x07\xAD\xF1\xA9D\xF5qK\x93\\\xF70w\xFF\xE7O\xFC\xC1\xAD|#z\xBE\xFAu\xD9\xE6z\x97"\xD7J^zW\xA8\x89\xD3\xD1\xFE*\x8BQ\xFD\xC0\xDA"\xB7\x98Z\xC0\`1\xDC\x96\xC3i\\t\xA7\xCA\xEBW\xFFJ \x80V\xCC_#L\xBD\xF4E\xC7\x83\xBEGai\xB4\xC17\xCA\xECA\xD5<\x9A\x8Ckdn\xBC\xCD\x9C8\x95\xDA\xC8\xDE\x97\xE4\x82\x86U/\x91P\xF6w\xB2!\xB9\x87-b\xE1\x07\xCF\xB5H\x81\x99{\xC1[\x8AE\x8B \xA7\\\xAA\x8C\xF1\xFF\xF2\f(6\xA1\xCExn!,\xAF\xC7\xA7z\f\x9F'\x98\xDB\xD4\xAC\xA6\x91\x8C,DF%\xAA\xE5}*\xF02\xB3\xBCoq\xEB<\x8D\xA6B\xBA\xDB:9\xD2Q\xB1\x07\x98 1\xE5O\xA0\xB7\xB3\xEC\xF87Q;P\xD8\x9A\bX\xF3M\xA1\xDE\xA5\xEE\xF9^G9\xB2\xD5ys\xEAU\x9B\xA4C\xD3\xCD\x07\x1BS/\xD0\xD5\xC5\xB0\x93\x8DERD$\xC3\xE7|C\xE607\xC8\xD8zoH:\xAD\xC6\xCEl\x9EN\x8E\xD9Z\xE3S\x89c\xB1^\xAB\xE5\xE7\xFD\xF3e*\xB8\xEE;\`\xE0n\xD9\xB7I\xE8\x8Fhm\xC3\xDF\xFE\xF2\x80\x87~W.\xF8F\xF4vx\xA4#=\xF3\x9Aiesx\xBE\xCC\xF5.\x94u\xCC\xCAD\xAE\x95\xBC.wk\xB5\xA8!\xC8\xED(\xC3\xA6\xA3\xFDU\xFE#\x82W\xA5I!%\xAB\xF6\xC1\xB34\xB5\x993\xD6b0\xB5\x80\xC1h5b#\xBE\\\\{>\xBE\x8B\xD2\xB8\xE8(\x8A8 \xFFN\x95\xD7\xAF5x\xBF\x93c\xDB\xE7\x81\f\xAC\x98\xBFF\xF4]\x91]\x9E\v2\xE9\xE5\xCB\x88v\xA6\x93\b\x94q:\x8E\xC2\xD2b )\x85Oq\xFC\x98\xD8\x83\xAA;\x80H\xECx4\xD7 \xB4\xFB\0\x892\xAD\xA3\xD1\xB2Ot\x9A9q>\xC2\xB9\x93\xE9k?\xC5J3\xBF'\x9D\xFD)\xB8\xDE\xA5\xA9Z \f/\f\xAAT\xAF\xEE}$\xD07G\xA42\xE0\xEE"dC\xB6\xA2\x86\x94r[\xC4*\x8F\xB9\x83 \xEF\xB0\xDB\x89\rg\x903-\xC8\x82\xD1\xFAa\x87Y9\x84e\x8E\xF7\xFA\xCD\xAF\x92N\xB9^\x94\xACn\x92$M\x9Fp\xF3\xE4&P\xBC\x99\xC4\x87lB\x9D\xF14\xC2\x7F&\x9DD)\x85\xC5\xC4\xCBR\x8EO\xF5\xD6\xCF\xCF\x7FIAl'\xC9\xA3\xBB\xE9_<\xF8\xB1\xDF\xDE/Y\x88\x8C@\xD9j[\vRTS\xD2\xB6\xC6\xFAT\xE0e\xA2\xD4\xB2fy\xDF\xE2>\xF9=5\x97\x7Fk\x96\xCF\xFF\x89A\x84t\xB7\v\xDC\xF4U\xDCur\x7F-\xF2\xE1\xA8\xE3d~\xEB\xBB\xE4\x9C<b\xCA\x9FJ\xE2(HiY\xE9\xF4\xD5\xF0o\xA2v\xA8\xEF@\xA1\0\0\0\0\xE1\xB6R\xEF\x83k\xD4b\xDD\x86\xEA\xD7\xA8\v\xE7a\xFA\xE4\x85\xBC|d .\xE1\f\xAEQ\xED\xF8\x8F\xC5\x85ns\xD7\xFD y\xF9\xEB\xCF\xAB\xF3\x89-h\xA4\x7F\xF6\\\xA3.\xF9\xEA\xF1\xC1\x9B7w+z\x81%\xC4\x8B\v%\xFF=Y\xCA\x9D\xE0\xDF |V\x8D\xCF\xF2\xF29\xF5D\xA0\xD6\x97\x99&\x8D\x88QbP\xC8\xCB\xE7\xB1~\x99\b\xD3\xA3\xE22M\rVc\xEC\xB7\xA91\xD5t\xB7\xE94\xC2\xE5\\f\x9A\xF0\xBD\xD0\xC8\xDF\rN\xF5>\xBBZ\xB12\xFB\xBB\x07\`\xD9\xDA\xE6\xFE8l\xB4H\x94h\xC9\xA9":&\xCB\xFF\xBC\xCC*I\xEE#NC\xC0\xC2\xAF\xF5\x92-\xCD(\xC7,\x9EF(D:9\xDE\xA5\x8Ck1\xC7Q\xED\xDB&\xE7\xBF4B\xED\x91\xD5\xA3[\xC3:\xC1\x86E\xD0 0?\x81\xE6k\xAE\`P9A\x8D\xBF\xAB\xE3;\xEDD\x871\xC3\xA5f\x87\x91JZ\xA0\xE5\xECEO\x8DH:\xB9l\xFEhV#\xEE\xBC\xEF\x95\xBCS\x8B\x9F\x92\xB2j)\xC0]\b\xF4F\xB7\xE9BX\x99\xBA\xC8\x80x\f\x9Ao\xD1\x85\xFBgNj\x9Fm\`\x8B~\xDB2d\xB4\x8E\xFD\xB0\xE6a\x95\x99\x97t\xA2\xCBx\x7FM\x92\xF7\xC9}\x93\xC31\x9Crucs\xA8\xE5\x99\xF1\xB7v\xB1^-\xF3P\xE8\x7F25\xF9\xF6\xD3\x83\xAB\xB7\x89\x85\xF8V?\xD74\xE2Q\xFD\xD5T\xBD\xF0|\xE4\\F.\v>\x9B\xA8\xE1\xDF-\xFA\xBB'\xD4\xEFZ\x91\x86\x008L\0\xEA\xD9\xFAR\xA9\x8E\xDDH\xB4\xDC2*iZ\xD8\xCB\xDF\b7\xAF\xD5&\xD6Nct9,\xBE\xF2\xD3\xCD\b\xA0<\xA5\xAC\xDF\xCAD\x8D%&\xC7\v\xCF\xC7qY \xA3{w\xC1B\xCD%. \xA3\xC4\xC1\xA6\xF1+\xE1\x96\xE6\0 \xB4\xFBb\xFD2\x83K\`\xFE\xE7AN\xF7\xF0d*\x9A\x85\x9C\xC8\xF5\xED8\xB7\f\x8E\xE5\xECnSc\x8F\xE51\xE9\xEB\xEF\b YM\xE7h\x84\xCB\r\x892\x99\xE2\xF9\xCAE:|\xD5z\xA1\x91?\x9B\xC3\xD0\xFF\xED1\xAB\xBF\xDE|v94\x9D\xC0k\xDB\xF5d-\xD2F\xC2v\xC0(\x97\xB9\x92\xC7\xF3\xB3\xBC&\xEE\xC9p\xD8h#\x91n:\xCC\xD1.\xA0I0\x98\xF2\xA6REtL\xB3\xF3&\xA3\xD7\xF9\bB6OZ\xADT\x92\xDCG\xB5$\x8E\xA8\xDD\x80\xF1^<6\xA3\xB1^\xEB%[\xBF]w\xB4\xDBWYU:\xE1\v\xBAX<\x8DP\xB9\x8A\xDF\xBF\xC9rg(\xC4Q\x88J\xD7b\xAB\xAF\x85\x8D\xCF\xA5\xABl.\xF9\x83L\xCE\x7Fi\xADx-\x86\xC5\xDCRp$j\0\x9FF\xB7\x86u\xA7\xD4\x9A\xC3\v\xFA{"\xBD\xA8\x94@\`.~\xA1\xD6|\x91\0\0\0\0C\xCB\xA6\x87\xC7\x90<\xD4\x84[\x9AS\xCF'\bs\x8C\xEC\xAE\xF4\b\xB74\xA7K|\x92 \x9EO\xE6\xDD\x84\xB6aY\xDF,2\x8A\xB5Qh\x95\xA3\xBE\x96\xF8$A\xD53\x82\xC6}\x99Q>R\xF7\x90\xBA m\xC3\xF9\xC2\xCBD\xB2\xBEYd\xF1u\xFF\xE3u.e\xB06\xE5\xC37\xE3\xD6A\xF1\xA0\xE7v$F}%g\x8D\xDB\xA2,\xF1I\x82o:\xEF\xEBauV\xA8\xAA\xD3\xD1\xFA2\xA3.\xB9\xF9\xA9=\xA2\x9F\xFA~i9}5\xAB]v\xDE\r\xDA\xF2\x85\x97\x89\xB1N1d}\xB3\xC8'\xB6O\xA3\xED\x8F\xE0&)\x9B\xABZ\xBB\xBB\xE8\x91\xDC;BN.x\x89\xE8\xA9\xFC\xD2r\xFA\xBF\xD4}j*V\xBB)\xE1\xF0<\xAD\xBAjo\xEEq\xCC\xE8\xA5\r^\xC8\xE6\xC6\xF8Ob\x9Db!V\xC4\x9B\x89\xFCJ\xCA7\xB1\xCDNl+\x9E\r\xA7\x8DF\xDB9\xB9\xBE\x81K#\xED\xC2\x80\x85j\xB3\x07\xACTx\xA1+\xD0#;x\x93\xE8\x9D\xFF\xD8\x94\xDF\x9B_\xA9X3\v\\\xCF\x95\x8CW\xE5sM\x9CC\xF4\xC9\xC7\xD9\xA7\x8A\f\x7F \xC1p\xED\0\x82\xBBK\x87\xE0\xD1\xD4E+wS\x90\xF5\x95\xD3\xD3SW\x88\xC9ACo\xC6_?\xFD\xE6\xF4[a\x98\xAF\xC12\xDBdg\xB5s\xCE\xB4d0\xE3\xB4^\x88\xB0\xF7\x95.7\xBC\xE9\xBC\xFF"\x90{y\x80\xC38\xB2&D\xED\x81\xA4\x82\xAEJ*\x98Vi\xDA>\xD1"\xA6\xAC\xF1am v\xE56\x90%\xA6\xFD6\xA2\xE8\xCB\x8C\xBA\xAB\0*=/[\xB0nl\x90\xE9'\xEC\x84\xC9d'"N\xE0|\xB8\xA3\xB7\x9Av\x84\x9C\\5O:\xDB\xB1\xA0\x88\xF2\xDF\xB9\xA3\x94/\xFAh2\xA8~3\xA8\xFB=\xF8|\x95R\xDD\xAD\xD6\x99{*R\xC2\xE1y G\xFEZu\xD5\xDE\xBEsY\x9D\xE5\xE9 \xDE.O\x8D\v\xCDKH\xD6k\xCC\xCC\x8D\xF1\x9F\x8FFW\xC4:\xC58\x87\xF1c\xBF\xAA\xF9\xEC@a_k\xF9/\x94Q2\x89\xD5i@\x96\xA2\xB5\xC7\xDD\xDE'\xE7\x9E\x81\`N\x1B3Y\x85\xBD\xB4\x8C\xB6?r\xCF}\x99\xF5K&\xA6\b\xED\xA5!C\x917\0Z\x91\x86\x84\v\xD5\xC7\xCA\xADRo\`~\x83,\xAB\xD8\xA8\xF0BW\xEB;\xE4\xD0\xA0Gv\xF0\xE3\x8C\xD0wg\xD7J$$\xEC\xA3\xF1/ne\xB2\xE4\xC8\xE26\xBFR\xB1ut\xF46>\bf}\xC3\xC0\x91\xF9\x98Z\xC2\xBAS\xFCE\xAE\xCA\xE7_el\`\xDB>\xF63\x98\xF5P\xB4\xD3\x89\xC2\x94\x90Bd\xFE@W\xD2X\xC7\x82\xE1\xDA\xC1*|\x86Eq\xE6\xD5\xBA@RM\xC6\xD2r\rt\xF5\x8AV\xEE\xA6\xC9\x9DH!a7\x9B\xF0"\xFC=w\xA6\xA7\xA7$\xE5l\xA3\xAE\x93\x83\xED\xDB5i\x80\xAFW*K \xD0\xFFx\x8B\xBC\xB3-\x918\xE8\xB7\xC2{#E0_\x83es\x94%\xE2\xF7\xCF\xBF\xB1\xB46\xE6\x9Ci\xC9\xA5W\xCFN!\fUb\xC7\xF3\x9A)\xBBa\xBAjp\xC7=\xEE+]n\xAD\xE0\xFB\xE9x\xD3y/;\xDF\xA8\xBFCE\xFB\xFC\x88\xE3|\xB7\xF4q\\\xF4?\xD7\xDBpdM\x883\xAF\xEB\x9B8\xDE\xD8\xCE\x9EY\\\x95 ^\xA2\x8DT"0\xAD\xE9\x96*\x93\xB2\fy\xD0y\xAA\xFEJ(8F\x81\x8E\xBF\xC2\xDA\xEC\x81\xB2k\xCAm K\x89\xA6\x86\xCC\r\xFD\x9FN6\xBA\0\0\0\0\0\b\0\x07\0 \0\0 \0\0\v\0\0\f\0\0\r\0\0\0\0\0A\x90\xDC\0\v\xA2\`\x07\0\0\0\bP\0\0\b\0\bs\0\x07\0\0\bp\0\0\b0\0\0 \xC0\0\x07 \0\0\b\`\0\0\b \0\0 \xA0\0\0\b\0\0\0\b\x80\0\0\b@\0\0 \xE0\0\x07\0\0\bX\0\0\b\0\0 \x90\0\x07;\0\0\bx\0\0\b8\0\0 \xD0\0\x07\0\0\bh\0\0\b(\0\0 \xB0\0\0\b\b\0\0\b\x88\0\0\bH\0\0 \xF0\0\x07\0\0\bT\0\0\b\0\b\xE3\0\x07+\0\0\bt\0\0\b4\0\0 \xC8\0\x07\r\0\0\bd\0\0\b$\0\0 \xA8\0\0\b\0\0\b\x84\0\0\bD\0\0 \xE8\0\x07\b\0\0\b\\\0\0\b\0\0 \x98\0\x07S\0\0\b|\0\0\b<\0\0 \xD8\0\x07\0\0\bl\0\0\b,\0\0 \xB8\0\0\b\f\0\0\b\x8C\0\0\bL\0\0 \xF8\0\x07\0\0\bR\0\0\b\0\b\xA3\0\x07#\0\0\br\0\0\b2\0\0 \xC4\0\x07\v\0\0\bb\0\0\b"\0\0 \xA4\0\0\b\0\0\b\x82\0\0\bB\0\0 \xE4\0\x07\x07\0\0\bZ\0\0\b\0\0 \x94\0\x07C\0\0\bz\0\0\b:\0\0 \xD4\0\x07\0\0\bj\0\0\b*\0\0 \xB4\0\0\b \0\0\b\x8A\0\0\bJ\0\0 \xF4\0\x07\0\0\bV\0\0\b\0@\b\0\0\x073\0\0\bv\0\0\b6\0\0 \xCC\0\x07\0\0\bf\0\0\b&\0\0 \xAC\0\0\b\0\0\b\x86\0\0\bF\0\0 \xEC\0\x07 \0\0\b^\0\0\b\0\0 \x9C\0\x07c\0\0\b~\0\0\b>\0\0 \xDC\0\x07\x1B\0\0\bn\0\0\b.\0\0 \xBC\0\0\b\0\0\b\x8E\0\0\bN\0\0 \xFC\0\`\x07\0\0\0\bQ\0\0\b\0\b\x83\0\x07\0\0\bq\0\0\b1\0\0 \xC2\0\x07 \0\0\ba\0\0\b!\0\0 \xA2\0\0\b\0\0\b\x81\0\0\bA\0\0 \xE2\0\x07\0\0\bY\0\0\b\0\0 \x92\0\x07;\0\0\by\0\0\b9\0\0 \xD2\0\x07\0\0\bi\0\0\b)\0\0 \xB2\0\0\b \0\0\b\x89\0\0\bI\0\0 \xF2\0\x07\0\0\bU\0\0\b\0\b\x07+\0\0\bu\0\0\b5\0\0 \xCA\0\x07\r\0\0\be\0\0\b%\0\0 \xAA\0\0\b\0\0\b\x85\0\0\bE\0\0 \xEA\0\x07\b\0\0\b]\0\0\b\0\0 \x9A\0\x07S\0\0\b}\0\0\b=\0\0 \xDA\0\x07\0\0\bm\0\0\b-\0\0 \xBA\0\0\b\r\0\0\b\x8D\0\0\bM\0\0 \xFA\0\x07\0\0\bS\0\0\b\0\b\xC3\0\x07#\0\0\bs\0\0\b3\0\0 \xC6\0\x07\v\0\0\bc\0\0\b#\0\0 \xA6\0\0\b\0\0\b\x83\0\0\bC\0\0 \xE6\0\x07\x07\0\0\b[\0\0\b\x1B\0\0 \x96\0\x07C\0\0\b{\0\0\b;\0\0 \xD6\0\x07\0\0\bk\0\0\b+\0\0 \xB6\0\0\b\v\0\0\b\x8B\0\0\bK\0\0 \xF6\0\x07\0\0\bW\0\0\b\0@\b\0\0\x073\0\0\bw\0\0\b7\0\0 \xCE\0\x07\0\0\bg\0\0\b'\0\0 \xAE\0\0\b\x07\0\0\b\x87\0\0\bG\0\0 \xEE\0\x07 \0\0\b_\0\0\b\0\0 \x9E\0\x07c\0\0\b\x7F\0\0\b?\0\0 \xDE\0\x07\x1B\0\0\bo\0\0\b/\0\0 \xBE\0\0\b\0\0\b\x8F\0\0\bO\0\0 \xFE\0\`\x07\0\0\0\bP\0\0\b\0\bs\0\x07\0\0\bp\0\0\b0\0\0 \xC1\0\x07 \0\0\b\`\0\0\b \0\0 \xA1\0\0\b\0\0\0\b\x80\0\0\b@\0\0 \xE1\0\x07\0\0\bX\0\0\b\0\0 \x91\0\x07;\0\0\bx\0\0\b8\0\0 \xD1\0\x07\0\0\bh\0\0\b(\0\0 \xB1\0\0\b\b\0\0\b\x88\0\0\bH\0\0 \xF1\0\x07\0\0\bT\0\0\b\0\b\xE3\0\x07+\0\0\bt\0\0\b4\0\0 \xC9\0\x07\r\0\0\bd\0\0\b$\0\0 \xA9\0\0\b\0\0\b\x84\0\0\bD\0\0 \xE9\0\x07\b\0\0\b\\\0\0\b\0\0 \x99\0\x07S\0\0\b|\0\0\b<\0\0 \xD9\0\x07\0\0\bl\0\0\b,\0\0 \xB9\0\0\b\f\0\0\b\x8C\0\0\bL\0\0 \xF9\0\x07\0\0\bR\0\0\b\0\b\xA3\0\x07#\0\0\br\0\0\b2\0\0 \xC5\0\x07\v\0\0\bb\0\0\b"\0\0 \xA5\0\0\b\0\0\b\x82\0\0\bB\0\0 \xE5\0\x07\x07\0\0\bZ\0\0\b\0\0 \x95\0\x07C\0\0\bz\0\0\b:\0\0 \xD5\0\x07\0\0\bj\0\0\b*\0\0 \xB5\0\0\b \0\0\b\x8A\0\0\bJ\0\0 \xF5\0\x07\0\0\bV\0\0\b\0@\b\0\0\x073\0\0\bv\0\0\b6\0\0 \xCD\0\x07\0\0\bf\0\0\b&\0\0 \xAD\0\0\b\0\0\b\x86\0\0\bF\0\0 \xED\0\x07 \0\0\b^\0\0\b\0\0 \x9D\0\x07c\0\0\b~\0\0\b>\0\0 \xDD\0\x07\x1B\0\0\bn\0\0\b.\0\0 \xBD\0\0\b\0\0\b\x8E\0\0\bN\0\0 \xFD\0\`\x07\0\0\0\bQ\0\0\b\0\b\x83\0\x07\0\0\bq\0\0\b1\0\0 \xC3\0\x07 \0\0\ba\0\0\b!\0\0 \xA3\0\0\b\0\0\b\x81\0\0\bA\0\0 \xE3\0\x07\0\0\bY\0\0\b\0\0 \x93\0\x07;\0\0\by\0\0\b9\0\0 \xD3\0\x07\0\0\bi\0\0\b)\0\0 \xB3\0\0\b \0\0\b\x89\0\0\bI\0\0 \xF3\0\x07\0\0\bU\0\0\b\0\b\x07+\0\0\bu\0\0\b5\0\0 \xCB\0\x07\r\0\0\be\0\0\b%\0\0 \xAB\0\0\b\0\0\b\x85\0\0\bE\0\0 \xEB\0\x07\b\0\0\b]\0\0\b\0\0 \x9B\0\x07S\0\0\b}\0\0\b=\0\0 \xDB\0\x07\0\0\bm\0\0\b-\0\0 \xBB\0\0\b\r\0\0\b\x8D\0\0\bM\0\0 \xFB\0\x07\0\0\bS\0\0\b\0\b\xC3\0\x07#\0\0\bs\0\0\b3\0\0 \xC7\0\x07\v\0\0\bc\0\0\b#\0\0 \xA7\0\0\b\0\0\b\x83\0\0\bC\0\0 \xE7\0\x07\x07\0\0\b[\0\0\b\x1B\0\0 \x97\0\x07C\0\0\b{\0\0\b;\0\0 \xD7\0\x07\0\0\bk\0\0\b+\0\0 \xB7\0\0\b\v\0\0\b\x8B\0\0\bK\0\0 \xF7\0\x07\0\0\bW\0\0\b\0@\b\0\0\x073\0\0\bw\0\0\b7\0\0 \xCF\0\x07\0\0\bg\0\0\b'\0\0 \xAF\0\0\b\x07\0\0\b\x87\0\0\bG\0\0 \xEF\0\x07 \0\0\b_\0\0\b\0\0 \x9F\0\x07c\0\0\b\x7F\0\0\b?\0\0 \xDF\0\x07\x1B\0\0\bo\0\0\b/\0\0 \xBF\0\0\b\0\0\b\x8F\0\0\bO\0\0 \xFF\0\0\0\x1B\0A\0@\0!\0  \0\b\x81\0@\0\0\0\x81\0\x1B\x07\0a\0\`\01\00\r\0\f\xC1\0@\0\0\0\0\0\0\x07\0\b\0 \0 \0\v\0\r\0\0\0\0\0\x1B\0\0#\0+\x003\0;\0C\0S\0c\0s\0\x83\0\xA3\0\xC3\0\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xCB\0M\0\0\0\0\0\0\0\0\x07\0 \0\r\0\0\0!\x001\0A\0a\0\x81\0\xC1\0\x81\b\f 0@\`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1B\0\x1B\0\0\0\0\0@\0@\0\xBE\xF3\xF8y\xECa\xF6?\xDE\xAA\x8C\x80\xF7{\xD5\xBF=\x88\xAFJ\xEDq\xF5?\xDBm\xC0\xA7\xF0\xBE\xD2\xBF\xB0\xF0\xF09\x95\xF4?g:Q\x7F\xAE\xD0\xBF\x85\xB8\xB0\x95\xC9\xF3?\xE9$\x82\xA6\xD81\xCB\xBF\xA5d\x88\f\r\xF3?Xw\xC0 OW\xC6\xBF\xA0\x8E\v{"^\xF2?\0\x81\x9C\xC7+\xAA\xC1\xBF?4JJ\xBB\xF1?^\x8C\xCEvN\xBA\xBF\xBA\xE5\x8A\xF0X#\xF1?\xCCaZ<\x97\xB1\xBF\xA7\0\x99A?\x95\xF0?\f\xE18\xF4R\xA2\xBF\0\0\0\0\0\0\xF0?\0\0\0\0\0\0\0\0\xACG\x9A\xFD\x8C\`\xEE?\x84Y\xF2]\xAA\xA5\xAA?\xA0j\xB3\xA4\xEC?\xB4.6\xAAS^\xBC?\xE6\xFCjW6 \xEB?\b\xDB w\xE5&\xC5?-\xAA\xA1c\xD1\xC2\xE9?pG"\r\x86\xC2\xCB?\xEDAx\xE6\x86\xE8?\xE1~\xA0\xC8\x8B\xD1?bHS\xF5\xDCg\xE7? \xEE\xB6W0\xD4?\xEF9\xFA\xFEB.\xE6?4\x83\xB8H\xA3\xD0\xBFj\v\xE0\v[W\xD5?#A \xF2\xFE\xFF\xDF\xBF\xB8e\0A\xC0\xF1\0\vA\0\v\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\v\0\0\0\0\0\0\0\0\0  \x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\x91\xF2\0\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xCB\xF2\0\v\f\0A\xD7\xF2\0\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\x85\xF3\0\v\0A\x91\xF3\0\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xBF\xF3\0\v\0A\xCB\xF3\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\x82\xF4\0\v\0\0\0\0\0\0\0\0\0 \0A\xB3\xF4\0\v\0A\xBF\xF4\0\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xED\xF4\0\v\0A\xF9\xF4\0\v\xB8\x07\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\0\0\0\0X;\0\x006\0\0\x007\0\0\x008\0\0\x009\0\0\0:\0\0\0;\0\0\0<\0\0\0=\0\0\0>\0\0\0?\0\0\0@\0\0\0A\0\0\0B\0\0\0C\0\0\0\0\0\0\0t<\0\0D\0\0\0E\0\0\x008\0\0\x009\0\0\0F\0\0\0G\0\0\0<\0\0\0=\0\0\0>\0\0\0H\0\0\0@\0\0\0I\0\0\0B\0\0\0J\0\0\0\xCCd\0\0,;\0\0>\0\0NSt3__29basic_iosIcNS_11char_traitsIcEEEE\0\0\0\xA4d\0\0\`;\0\0NSt3__215basic_streambufIcNS_11char_traitsIcEEEE\0\0\0\0(e\0\0\xAC;\0\0\0\0\0\0\0\0\0 ;\0\0\xF4\xFF\xFFNSt3__213basic_istreamIcNS_11char_traitsIcEEEE\0\0(e\0\0\xF4;\0\0\0\0\0\0\0\0\0 ;\0\0\xF4\xFF\xFFNSt3__213basic_ostreamIcNS_11char_traitsIcEEEE\0\0(e\0\0D<\0\0\0\0\0\0\0\0\x94;\0\0\0\0\0\xDC;\0\0\b\0\0NSt3__214basic_iostreamIcNS_11char_traitsIcEEEE\0\xCCd\0\0\x80<\0\0X;\0\0NSt3__215basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE\0\0\0@\0\0\0\0\0\0\0\xB4=\0\0K\0\0\0L\0\0\x008\0\0\0\xF8\xFF\xFF\xFF\xB4=\0\0M\0\0\0N\0\0\0\xC0\xFF\xFF\xFF\xC0\xFF\xFF\xFF\xB4=\0\0O\0\0\0P\0\0\0\xD0<\0\x004=\0\0p=\0\0\x84=\0\0\x98=\0\0\xAC=\0\0\\=\0\0H=\0\0\xF8<\0\0\xE4<\0\0@\0\0\0\0\0\0\0$<\0\0Q\0\0\0R\0\0\x008\0\0\0\xF8\xFF\xFF\xFF$<\0\0S\0\0\0T\0\0\0\xC0\xFF\xFF\xFF\xC0\xFF\xFF\xFF$<\0\0U\0\0\0V\0\0\0@\0\0\0\0\0\0\0\x94;\0\0W\0\0\0X\0\0\0\xC0\xFF\xFF\xFF\xC0\xFF\xFF\xFF\x94;\0\0Y\0\0\0Z\0\0\x008\0\0\0\0\0\0\0\xDC;\0\0[\0\0\0\\\0\0\0\xC8\xFF\xFF\xFF\xC8\xFF\xFF\xFF\xDC;\0\0]\0\0\0^\0\0\0\xCCd\0\0\xC0=\0\0$<\0\0NSt3__218basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE\0\0\0\0\0\0\0\0>\0\0_\0\0\0\`\0\0\0\xA4d\0\0 >\0\0NSt3__28ios_baseE\0A\xC0\xFC\0\v#\xDE\x95\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF@>\0\0\0\0\0C.UTF-8\0A\x90\xFD\0\vT>\0A\xB0\xFD\0\vGLC_CTYPE\0\0\0\0LC_NUMERIC\0\0LC_TIME\0\0\0\0\0LC_COLLATE\0\0LC_MONETARY\0LC_MESSAGES\0A\x84\xFE\0\v-\x80\xDE(\0\x80\xC8M\0\0\xA7v\0\x004\x9E\0\x80\xC7\0\x80\x9F\xEE\0\0~\x80\\@\x80\xE9g\0\xC8\x90\0U\xB8.\0A\xC0\xFE\0\v\xD2Sun\0Mon\0Tue\0Wed\0Thu\0Fri\0Sat\0Sunday\0Monday\0Tuesday\0Wednesday\0Thursday\0Friday\0Saturday\0Jan\0Feb\0Mar\0Apr\0May\0Jun\0Jul\0Aug\0Sep\0Oct\0Nov\0Dec\0January\0February\0March\0April\0May\0June\0July\0August\0September\0October\0November\0December\0AM\0PM\0%a %b %e %T %Y\0%m/%d/%y\0%H:%M:%S\0%I:%M:%S %p\0\0\0%m/%d/%y\x000123456789\0%a %b %e %T %Y\0%H:%M:%S\0\0\0\0\0^[yY]\0^[nN]\0yes\0no\0A\xA0\x81\v\xE1\xD1t\x9E\0W\x9D\xBD*\x80pR\xFF\xFF>' \0\0\0d\0\0\0\xE8\0\0'\0\0\xA0\x86\0@B\0\x80\x96\x98\0\0\xE1\xF5\0\0\x005\0\0\0q\0\0\0k\xFF\xFF\xFF\xCE\xFB\xFF\xFF\x92\xBF\xFF\xFF\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x07\b \xFF\xFF\xFF\xFF\xFF\xFF\xFF \v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF \v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x07\0\0\0\0\0\0\0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\x07\0\0\xC0\b\0\0\xC0 \0\0\xC0 \0\0\xC0\v\0\0\xC0\f\0\0\xC0\r\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\x1B\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\0\xB3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\x07\0\0\xC3\b\0\0\xC3 \0\0\xC3 \0\0\xC3\v\0\0\xC3\f\0\0\xC3\r\0\0\xD3\0\0\xC3\0\0\xC3\0\0\f\xBB\0\f\xC3\0\f\xC3\0\f\xC3\0\f\xDB\0\0\0\x000123456789abcdefABCDEFxX+-pPiInN\0%I:%M:%S %p%H:%M\0A\x90\x86\v\x81%\0\0\0m\0\0\0/\0\0\0%\0\0\0d\0\0\0/\0\0\0%\0\0\0y\0\0\0%\0\0\0Y\0\0\0-\0\0\0%\0\0\0m\0\0\0-\0\0\0%\0\0\0d\0\0\0%\0\0\0I\0\0\0:\0\0\0%\0\0\0M\0\0\0:\0\0\0%\0\0\0S\0\0\0 \0\0\0%\0\0\0p\0\0\0\0\0\0\0%\0\0\0H\0\0\0:\0\0\0%\0\0\0M\0A\xA0\x87\ve%\0\0\0H\0\0\0:\0\0\0%\0\0\0M\0\0\0:\0\0\0%\0\0\0S\0\0\0\0\0\0\0\0M\0\0t\0\0\0u\0\0\0v\0\0\0\0\0\0\0dM\0\0w\0\0\0x\0\0\0v\0\0\0y\0\0\0z\0\0\0{\0\0\0|\0\0\0}\0\0\0~\0\0\0\x7F\0\0\0\x80\0A\x90\x88\v\xFD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0B\0\0B\0\0B\0\0B\0\0B\0\0B\0\0B\0\0B\0\0B\0\0B\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0*\0\0*\0\0*\0\0*\0\0*\0\0*\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0*\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\x002\0\x002\0\x002\0\x002\0\x002\0\x002\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\x002\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\x82\0\0\0\0A\x94\x90\v\xED\xBCL\0\0\x81\0\0\0\x82\0\0\0v\0\0\0\x83\0\0\0\x84\0\0\0\x85\0\0\0\x86\0\0\0\x87\0\0\0\x88\0\0\0\x89\0\0\0\0\0\0\0\x98M\0\0\x8A\0\0\0\x8B\0\0\0v\0\0\0\x8C\0\0\0\x8D\0\0\0\x8E\0\0\0\x8F\0\0\0\x90\0\0\0\0\0\0\0\xBCM\0\0\x91\0\0\0\x92\0\0\0v\0\0\0\x93\0\0\0\x94\0\0\0\x95\0\0\0\x96\0\0\0\x97\0\0\0t\0\0\0r\0\0\0u\0\0\0e\0\0\0\0\0\0\0f\0\0\0a\0\0\0l\0\0\0s\0\0\0e\0\0\0\0\0\0\0%\0\0\0m\0\0\0/\0\0\0%\0\0\0d\0\0\0/\0\0\0%\0\0\0y\0\0\0\0\0\0\0%\0\0\0H\0\0\0:\0\0\0%\0\0\0M\0\0\0:\0\0\0%\0\0\0S\0\0\0\0\0\0\0%\0\0\0a\0\0\0 \0\0\0%\0\0\0b\0\0\0 \0\0\0%\0\0\0d\0\0\0 \0\0\0%\0\0\0H\0\0\0:\0\0\0%\0\0\0M\0\0\0:\0\0\0%\0\0\0S\0\0\0 \0\0\0%\0\0\0Y\0\0\0\0\0\0\0%\0\0\0I\0\0\0:\0\0\0%\0\0\0M\0\0\0:\0\0\0%\0\0\0S\0\0\0 \0\0\0%\0\0\0p\0A\x8C\x93\v\xFD'\x9CI\0\0\x98\0\0\0\x99\0\0\0v\0\0\0\xCCd\0\0\xA8I\0\0\xF0a\0\0NSt3__26locale5facetE\0\0\0\0\0\0\0J\0\0\x98\0\0\0\x9A\0\0\0v\0\0\0\x9B\0\0\0\x9C\0\0\0\x9D\0\0\0\x9E\0\0\0\x9F\0\0\0\xA0\0\0\0\xA1\0\0\0\xA2\0\0\0\xA3\0\0\0\xA4\0\0\0\xA5\0\0\0\xA6\0\0\0(e\0\0$J\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\x008J\0\0\0\0\0NSt3__25ctypeIwEE\0\0\0\xA4d\0\0@J\0\0NSt3__210ctype_baseE\0\0\0\0\0\0\0\0\x88J\0\0\x98\0\0\0\xA7\0\0\0v\0\0\0\xA8\0\0\0\xA9\0\0\0\xAA\0\0\0\xAB\0\0\0\xAC\0\0\0\xAD\0\0\0\xAE\0\0\0(e\0\0\xA8J\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0\xCCJ\0\0\0\0\0NSt3__27codecvtIcc11__mbstate_tEE\0\0\0\xA4d\0\0\xD4J\0\0NSt3__212codecvt_baseE\0\0\0\0\0\0K\0\0\x98\0\0\0\xAF\0\0\0v\0\0\0\xB0\0\0\0\xB1\0\0\0\xB2\0\0\0\xB3\0\0\0\xB4\0\0\0\xB5\0\0\0\xB6\0\0\0(e\0\0\0\0?\0\0@\0\0A\0\0B\0\0C\0\0D\0\0E\0\0F\0\0(e\0\0V\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\x000U\0\0\0\0\0NSt3__210moneypunctIwLb0EEE\0\0\0\0\0pV\0\0\x98\0\0\0G\0\0v\0\0\0H\0\0I\0\0J\0\0K\0\0L\0\0M\0\0N\0\0O\0\0P\0\0(e\0\0\x90V\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\x000U\0\0\0\0\0NSt3__210moneypunctIwLb1EEE\0\0\0\0\0\xC8V\0\0\x98\0\0\0Q\0\0v\0\0\0R\0\0S\0\0(e\0\0\xE8V\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\x000W\0\0\0\0\0\0NSt3__29money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE\0\0\0\xA4d\0\x008W\0\0NSt3__211__money_getIcEE\0\0\0\0\0\0\0\0pW\0\0\x98\0\0\0T\0\0v\0\0\0U\0\0V\0\0(e\0\0\x90W\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0\xD8W\0\0\0\0\0\0NSt3__29money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE\0\0\0\xA4d\0\0\xE0W\0\0NSt3__211__money_getIwEE\0\0\0\0\0\0\0\0X\0\0\x98\0\0\0W\0\0v\0\0\0X\0\0Y\0\0(e\0\x008X\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0\x80X\0\0\0\0\0\0NSt3__29money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE\0\0\0\xA4d\0\0\x88X\0\0NSt3__211__money_putIcEE\0\0\0\0\0\0\0\0\xC0X\0\0\x98\0\0\0Z\0\0v\0\0\0[\0\0\\\0\0(e\0\0\xE0X\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0(Y\0\0\0\0\0\0NSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE\0\0\0\xA4d\0\x000Y\0\0NSt3__211__money_putIwEE\0\0\0\0\0\0\0\0lY\0\0\x98\0\0\0]\0\0v\0\0\0^\0\0_\0\0\`\0\0(e\0\0\x8CY\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0\xA4Y\0\0\0\0\0NSt3__28messagesIcEE\0\0\0\0\xA4d\0\0\xACY\0\0NSt3__213messages_baseE\0\0\0\0\0\xE4Y\0\0\x98\0\0\0a\0\0v\0\0\0b\0\0c\0\0d\0\0(e\0\0Z\0\0\0\0\0\0\0\0\0\x9CI\0\0\0\0\0\xA4Y\0\0\0\0\0NSt3__28messagesIwEE\0\0\0\0S\0\0\0u\0\0\0n\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0M\0\0\0o\0\0\0n\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0T\0\0\0u\0\0\0e\0\0\0s\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0W\0\0\0e\0\0\0d\0\0\0n\0\0\0e\0\0\0s\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0T\0\0\0h\0\0\0u\0\0\0r\0\0\0s\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0F\0\0\0r\0\0\0i\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0S\0\0\0a\0\0\0t\0\0\0u\0\0\0r\0\0\0d\0\0\0a\0\0\0y\0\0\0\0\0\0\0S\0\0\0u\0\0\0n\0\0\0\0\0\0\0M\0\0\0o\0\0\0n\0\0\0\0\0\0\0T\0\0\0u\0\0\0e\0\0\0\0\0\0\0W\0\0\0e\0\0\0d\0\0\0\0\0\0\0T\0\0\0h\0\0\0u\0\0\0\0\0\0\0F\0\0\0r\0\0\0i\0\0\0\0\0\0\0S\0\0\0a\0\0\0t\0\0\0\0\0\0\0J\0\0\0a\0\0\0n\0\0\0u\0\0\0a\0\0\0r\0\0\0y\0\0\0\0\0\0\0F\0\0\0e\0\0\0b\0\0\0r\0\0\0u\0\0\0a\0\0\0r\0\0\0y\0\0\0\0\0\0\0M\0\0\0a\0\0\0r\0\0\0c\0\0\0h\0\0\0\0\0\0\0A\0\0\0p\0\0\0r\0\0\0i\0\0\0l\0\0\0\0\0\0\0M\0\0\0a\0\0\0y\0\0\0\0\0\0\0J\0\0\0u\0\0\0n\0\0\0e\0\0\0\0\0\0\0J\0\0\0u\0\0\0l\0\0\0y\0\0\0\0\0\0\0A\0\0\0u\0\0\0g\0\0\0u\0\0\0s\0\0\0t\0\0\0\0\0\0\0S\0\0\0e\0\0\0p\0\0\0t\0\0\0e\0\0\0m\0\0\0b\0\0\0e\0\0\0r\0\0\0\0\0\0\0O\0\0\0c\0\0\0t\0\0\0o\0\0\0b\0\0\0e\0\0\0r\0\0\0\0\0\0\0N\0\0\0o\0\0\0v\0\0\0e\0\0\0m\0\0\0b\0\0\0e\0\0\0r\0\0\0\0\0\0\0D\0\0\0e\0\0\0c\0\0\0e\0\0\0m\0\0\0b\0\0\0e\0\0\0r\0\0\0\0\0\0\0J\0\0\0a\0\0\0n\0\0\0\0\0\0\0F\0\0\0e\0\0\0b\0\0\0\0\0\0\0M\0\0\0a\0\0\0r\0\0\0\0\0\0\0A\0\0\0p\0\0\0r\0\0\0\0\0\0\0J\0\0\0u\0\0\0n\0\0\0\0\0\0\0J\0\0\0u\0\0\0l\0\0\0\0\0\0\0A\0\0\0u\0\0\0g\0\0\0\0\0\0\0S\0\0\0e\0\0\0p\0\0\0\0\0\0\0O\0\0\0c\0\0\0t\0\0\0\0\0\0\0N\0\0\0o\0\0\0v\0\0\0\0\0\0\0D\0\0\0e\0\0\0c\0\0\0\0\0\0\0A\0\0\0M\0\0\0\0\0\0\0P\0\0\0M\0A\x94\xBB\v\x98 \0\0\0d\0\0\0\xE8\0\0'\0\0\xA0\x86\0@B\0\x80\x96\x98\0\0\xE1\xF5\0\xCA\x9A;\0\0\0\0\0\0\0\x0000010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899\0\0\0\0\0\0\0\x00000000010010001101000101011001111000100110101011110011011110111100010203040506071011121314151617202122232425262730313233343536374041424344454647505152535455565760616263646566677071727374757677000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0d\0\0\0\0\0\0\0\xE8\0\0\0\0\0\0'\0\0\0\0\0\0\xA0\x86\0\0\0\0\0@B\0\0\0\0\0\x80\x96\x98\0\0\0\0\0\0\xE1\xF5\0\0\0\0\0\xCA\x9A;\0\0\0\0\0\xE4\vT\0\0\0\0\xE8vH\0\0\0\0\xA5\xD4\xE8\0\0\0\0\xA0rN \0\0\0@z\xF3Z\0\0\0\x80\xC6\xA4~\x8D\0\0\0\xC1o\xF2\x86#\0\0\0\x8A]xEc\0\0d\xA7\xB3\xB6\xE0\r\0\0\xE8\x89#\xC7\x8A\xA4d\0\0\xF8a\0\0NSt3__214__shared_countE\0\0\0\0hf\0\0\xCCd\0\0$b\0\0\x98e\0\0N10__cxxabiv116__shim_type_infoE\0\0\0\0\xCCd\0\0Tb\0\0b\0\0N10__cxxabiv117__class_type_infoE\0\0\0\xCCd\0\0\x84b\0\0b\0\0N10__cxxabiv117__pbase_type_infoE\0\0\0\xCCd\0\0\xB4b\0\0xb\0\0N10__cxxabiv119__pointer_type_infoE\0\xCCd\0\0\xE4b\0\0b\0\0N10__cxxabiv120__function_type_infoE\0\0\0\0\xCCd\0\0c\0\0xb\0\0N10__cxxabiv129__pointer_to_member_type_infoE\0\0\0\0\0\0\0dc\0\0g\0\0h\0\0i\0\0j\0\0k\0\0\xCCd\0\0pc\0\0b\0\0N10__cxxabiv123__fundamental_type_infoE\0Pc\0\0\xA0c\0\0v\0Dn\0\0\0\0Pc\0\0\xB0c\0\0b\0\0\0Pc\0\0\xBCc\0\0c\0\0\0Pc\0\0\xC8c\0\0h\0\0\0Pc\0\0\xD4c\0\0a\0\0\0Pc\0\0\xE0c\0\0s\0\0\0Pc\0\0\xECc\0\0t\0\0\0Pc\0\0\xF8c\0\0i\0\0\0Pc\0\0d\0\0j\0\0\0Pc\0\0d\0\0l\0\0\0Pc\0\0d\0\0m\0\0\0Pc\0\0(d\0\0x\0\0\0Pc\0\x004d\0\0y\0\0\0Pc\0\0@d\0\0f\0\0\0Pc\0\0Ld\0\0d\0\0\0\0\0\0\0ld\0\0g\0\0l\0\0i\0\0j\0\0m\0\0\xCCd\0\0xd\0\0b\0\0N10__cxxabiv116__enum_type_infoE\0\0\0\0\0\0\0\0Hb\0\0g\0\0n\0\0i\0\0j\0\0o\0\0p\0\0q\0\0r\0\0\0\0\0\0\xECd\0\0g\0\0s\0\0i\0\0j\0\0o\0\0t\0\0u\0\0v\0\0\xCCd\0\0\xF8d\0\0Hb\0\0N10__cxxabiv120__si_class_type_infoE\0\0\0\0\0\0\0\0He\0\0g\0\0w\0\0i\0\0j\0\0o\0\0x\0\0y\0\0z\0\0\xCCd\0\0Te\0\0Hb\0\0N10__cxxabiv121__vmi_class_type_infoE\0\0\0\0\0\0\0\xA8b\0\0g\0\0{\0\0i\0\0j\0\0|\0\0\xA4d\0\0\xA0e\0\0St9type_info\0A\xB1\xCB\v\b \0\0\0\0\0\0\0A\xC4\xCB\v1\0A\xDC\xCB\v2\0\0\x003\0\0\0\xF8g\0\0\0\0A\xF4\xCB\v\0A\x84\xCC\v\xFF\xFF\xFF\xFF \0A\xC8\xCC\v!\xB8e\0\0@v\0%m/%d/%y\0\0\0\b%H:%M:%S\0\0\0\b\0A\xF4\xCC\ve\0A\x8C\xCD\v 2\0\0\0f\0\x004v\0A\xA4\xCD\v\0A\xB4\xCD\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xF8\xCD\vhf`)),he((await k(oe)).instance))})(),(function(){function he(){var oe;if(r.calledRun=!0,!f){if(R=!0,Tl.H(),_?.(r),(oe=r.onRuntimeInitialized)==null||oe.call(r),r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;){var Ze=r.postRun.shift();w.push(Ze)}O(w)}}if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)H();O(z),r.setStatus?(r.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>r.setStatus(""),1),he()},1)):he()})(),R?o=r:o=new Promise((he,oe)=>{_=he,S=oe}),o}var zV=(e,t,n)=>{let i=e.vf32_ptr(t),o=t.size(),r=i>>2,s=e.HEAPF32.slice(r,r+o);if(n!==void 0)for(let a=0;a1/(1+Math.exp(-e)),T5e=e=>t=>t*e+.5,_5e=(e,t,n)=>{let i=n?.colorScaleFactor??.282;return{numPoints:t.numPoints,shDegree:t.shDegree,antialiased:t.antialiased,positions:zV(e,t.positions),scales:zV(e,t.scales,Math.exp),rotations:zV(e,t.rotations),alphas:zV(e,t.alphas,x5e),colors:zV(e,t.colors,T5e(i)),sh:zV(e,t.sh)}},S5e=(e,t)=>{e._free(e.vf32_ptr(t.positions)),e._free(e.vf32_ptr(t.scales)),e._free(e.vf32_ptr(t.rotations)),e._free(e.vf32_ptr(t.alphas)),e._free(e.vf32_ptr(t.colors)),e._free(e.vf32_ptr(t.sh))},Ede=async(e,t)=>{var n;let i=await y5e(),o=e instanceof Uint8Array?e:new Uint8Array(e),r=null;try{if(r=i._malloc(Uint8Array.BYTES_PER_ELEMENT*o.length),r===null)throw new Error("couldn't allocate memory");i.HEAPU8.set(o,r/Uint8Array.BYTES_PER_ELEMENT);let s=i.CoordinateSystem[((n=t?.unpackOptions)==null?void 0:n.coordinateSystem)??"UNSPECIFIED"],a=i.load_spz(r,o.length,{coordinateSystem:s}),c=_5e(i,a,t);return S5e(i,a),c}catch(s){throw s}finally{r!==null&&i._free(r)}};var Z5e=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));var V5e=[0,9,24,45],C5e=14,R5e=1.6*1024*1024*1024;function G5e(e,t){let n=t?.attributes;if(!l(n))return;let i=n.POSITION;if(!l(i))return;let o=e?.accessors?.[i];if(!l(o)||o.count<=0)return;let r=0;for(let s in n)if(Object.prototype.hasOwnProperty.call(n,s)){let a=/SH_DEGREE_(\d+)_COEF_/.exec(s);a&&(r=Math.max(r,parseInt(a[1],10)))}return{numPoints:o.count,shDegree:r}}function A5e(e,t){let n=C5e+(V5e[t]??0);return e*n*Float32Array.BYTES_PER_ELEMENT*2}var f4=class extends qi{constructor(t){super(),t=t??B.EMPTY_OBJECT;let n=t.resourceCache,i=t.gltf,o=t.primitive,r=t.spz,s=t.gltfResource,a=t.baseResource,c=t.cacheKey;this._resourceCache=n,this._gltfResource=s,this._baseResource=a,this._gltf=i,this._primitive=o,this._spz=r,this._cacheKey=c,this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodePromise=void 0,this._decodedData=void 0,this._state=Tt.UNLOADED,this._promise=void 0,this._spzError=void 0}get cacheKey(){return this._cacheKey}get decodedData(){return this._decodedData}async load(){return l(this._promise)?this._promise:(this._state=Tt.LOADING,this._promise=E5e(this),this._promise)}process(t){if(this._state===Tt.READY)return!0;if(this._state!==Tt.PROCESSING||(l(this._spzError)&&p4(this,this._spzError),!l(this._bufferViewTypedArray))||l(this._decodePromise))return!1;let n=G5e(this._gltf,this._primitive);if(l(n)){let o=A5e(n.numPoints,n.shDegree);if(o>R5e){let r=Math.round(o/1048576);return p4(this,new ae(`SPZ data too large to decode: ${n.numPoints.toLocaleString()} splats with spherical harmonics degree ${n.shDegree} would require approximately ${r} MB, which exceeds the WASM memory limit. Consider using a lower spherical harmonics degree or splitting the dataset into smaller tiles.`)),!1}}let i=Ede(this._bufferViewTypedArray,{unpackOptions:{coordinateSystem:"UNSPECIFIED"}});if(!l(i))return!1;this._decodePromise=L5e(this,i)}unload(){l(this._bufferViewLoader)&&this._resourceCache.unload(this._bufferViewLoader),this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodedData=void 0,this._gltf=void 0,this._primitive=void 0}};async function E5e(e){let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._spz.bufferView,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoader=n,await n.load(),e.isDestroyed()?void 0:(e._bufferViewTypedArray=n.typedArray,e._state=Tt.PROCESSING,e)}catch(n){if(e.isDestroyed())return;p4(e,n)}}function p4(e,t){throw e.unload(),e._state=Tt.FAILED,e.getError("Failed to load SPZ",t)}async function L5e(e,t){try{let n=await t;return e.isDestroyed()?void 0:(e.unload(),e._decodedData={gcloud:n},e._state=Tt.READY,e._baseResource)}catch(n){if(e.isDestroyed())return;e._spzError=n}}var qA=f4;var mon=x(T(),1);var ron=x(T(),1);var Uin=x(T(),1);function $A(e){e=e??B.EMPTY_OBJECT;let t=e.id,n=e.properties??{},i={};for(let o in n)if(n.hasOwnProperty(o)){let r=n[o];l(r.semantic)&&(i[r.semantic]=r)}this._id=t,this._name=e.name,this._description=e.description,this._properties=n,this._propertiesBySemantic=i,this._extras=Je(e.extras,!0),this._extensions=Je(e.extensions,!0)}$A.fromJson=function(e){e=e??B.EMPTY_OBJECT;let t=e.id,n=e.class,i={};for(let o in n.properties)if(n.properties.hasOwnProperty(o)){let r=hp.fromJson({id:o,property:n.properties[o],enums:e.enums});i[o]=r}return new $A({id:t,name:n.name,description:n.description,properties:i,extras:n.extras,extensions:n.extensions})};Object.defineProperties($A.prototype,{properties:{get:function(){return this._properties}},propertiesBySemantic:{get:function(){return this._propertiesBySemantic}},id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});$A.BATCH_TABLE_CLASS_NAME="_batchTable";var Wh=$A;var qin=x(T(),1);var zin=x(T(),1);function aD(e){e=e??B.EMPTY_OBJECT;let t=e.value,n=e.name;this._value=t,this._name=n,this._description=e.description,this._extras=Je(e.extras,!0),this._extensions=Je(e.extensions,!0)}aD.fromJson=function(e){return new aD({value:e.value,name:e.name,description:e.description,extras:e.extras,extensions:e.extensions})};Object.defineProperties(aD.prototype,{value:{get:function(){return this._value}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var eE=aD;function cD(e){e=e??B.EMPTY_OBJECT;let t=e.id,n=e.values,i={},o={},r=n.length;for(let a=0;a>t};nc.fromSubtreeJson=async function(e,t,n,i,o){let r=new nc(e,i,o),s;l(t)?s={json:t,binary:void 0}:s=P5e(n);let a=s.json;r._subtreeJson=a;let c;if(Qi(a,"3DTILES_metadata"))c=a.extensions["3DTILES_metadata"];else if(l(a.tileMetadata)){let Z=a.tileMetadata;c=a.propertyTables[Z]}let d=[];if(l(a.contentMetadata)){let Z=a.contentMetadata.length;for(let V=0;V0;u=u||m;for(let p=0;p>1)&858993459,e=(e^e>>2)&252645135,e=(e^e>>4)&16711935,e=(e^e>>8)&65535,e}function T4(e){return e&=153391689,e=(e^e>>2)&51130563,e=(e^e>>4)&50393103,e=(e^e>>8)&4278190335,e=(e^e>>16)&1023,e}rE.encode2D=function(e,t){return(Pde(e)|Pde(t)<<1)>>>0};rE.decode2D=function(e,t){return l(t)||(t=new Array(2)),t[0]=Xde(e),t[1]=Xde(e>>1),t};rE.encode3D=function(e,t,n){return x4(e)|x4(t)<<1|x4(n)<<2};rE.decode3D=function(e,t){return l(t)||(t=new Array(3)),t[0]=T4(e),t[1]=T4(e>>1),t[2]=T4(e>>2),t};var xy=rE;function hr(e){this.subdivisionScheme=e.subdivisionScheme,this.subtreeLevels=e.subtreeLevels,this.level=e.level,this.x=e.x,this.y=e.y,this.z=void 0,e.subdivisionScheme===Es.OCTREE&&(this.z=e.z)}Object.defineProperties(hr.prototype,{childIndex:{get:function(){let e=0;return e|=this.x&1,e|=(this.y&1)<<1,this.subdivisionScheme===Es.OCTREE&&(e|=(this.z&1)<<2),e}},mortonIndex:{get:function(){return this.subdivisionScheme===Es.OCTREE?xy.encode3D(this.x,this.y,this.z):xy.encode2D(this.x,this.y)}},tileIndex:{get:function(){let e=this.subdivisionScheme===Es.OCTREE?((1<<3*this.level)-1)/7:((1<<2*this.level)-1)/3,t=this.mortonIndex;return e+t}}});hr.prototype.getDescendantCoordinates=function(e){let t=this.level+e.level,n=(this.x<>t,i=e.y>>t,o=this.x===n,r=this.y===i;if(this.subdivisionScheme===Es.OCTREE){let s=e.z>>t,a=this.z===s;return o&&r&&a}return o&&r};hr.prototype.isEqual=function(e){return this.subdivisionScheme===e.subdivisionScheme&&this.subtreeLevels===e.subtreeLevels&&this.level===e.level&&this.x===e.x&&this.y===e.y&&(this.subdivisionScheme===Es.OCTREE?this.z===e.z:!0)};hr.prototype.isImplicitTilesetRoot=function(){return this.level===0};hr.prototype.isSubtreeRoot=function(){return this.level%this.subtreeLevels===0};hr.prototype.isBottomOfSubtree=function(){return this.level%this.subtreeLevels===this.subtreeLevels-1};hr.prototype.getTemplateValues=function(){let e={level:this.level,x:this.x,y:this.y};return this.subdivisionScheme===Es.OCTREE&&(e.z=this.z),e};var Nde=[0,0,0];hr.fromMortonIndex=function(e,t,n,i){let o;return e===Es.OCTREE?(o=xy.decode3D(i,Nde),new hr({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1],z:o[2]})):(o=xy.decode2D(i,Nde),new hr({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1]}))};hr.fromTileIndex=function(e,t,n){let i,o,r;return e===Es.OCTREE?(i=Math.floor(L.log2(7*n+1)/3),o=((1<<3*i)-1)/7,r=n-o):(i=Math.floor(L.log2(3*n+1)/2),o=((1<<2*i)-1)/3,r=n-o),hr.fromMortonIndex(e,t,i,r)};var gp=hr;var yrn=x(T(),1),S4=x(tu(),1);var drn=x(T(),1);var _4,Yde="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkYjZkM2MyOS1mODRiLTRlMGQtYTYzMy0xNWYyYmNiZjE1NGUiLCJpZCI6MjU5LCJzdWIiOiJDZXNpdW1KUyIsImlzcyI6Imh0dHBzOi8vYXBpLmNlc2l1bS5jb20iLCJhdWQiOiIxLjE0NCBSZWxlYXNlIC0gRGVsZXRlIG9uIE9jdG9iZXIgMSwgMjAyNiIsImlhdCI6MTc4NDk1ODg5MH0.x3Ra1-m0GEx7jwv8wnz-bAt4SSG3_ZCC9zU_MwzfjA4",dD={};dD.defaultAccessToken=Yde;dD.defaultServer=new ve({url:"https://api.cesium.com/"});dD.getDefaultTokenCredit=function(e){if(e===Yde){if(!l(_4)){let t=` This application is using Cesium's default ion access token. Please assign Cesium.Ion.defaultAccessToken with an access token from your ion account before making any Cesium API calls. You can sign up for a free ion account at https://cesium.com.`;_4=new At(t,!0)}return _4}};var vh=dD;function Al(e,t){let n,i=e.externalType,o=l(i);if(!o)n={url:e.url,retryAttempts:1,retryCallback:J5e};else if(i==="3DTILES"||i==="STK_TERRAIN_SERVER")n={url:e.options.url};else throw new ae("Ion.createResource does not support external imagery assets; use IonImageryProvider instead.");ve.call(this,n),this._ionEndpoint=e,this._ionEndpointDomain=o?void 0:new S4.default(e.url).authority(),this._ionEndpointResource=t,this._ionRoot=void 0,this._pendingPromise=void 0,this._credits=void 0,this._isExternal=o,this.refreshCallback=void 0}l(Object.create)&&(Al.prototype=Object.create(ve.prototype),Al.prototype.constructor=Al);Al.fromAssetId=function(e,t){let n=Al._createEndpointResource(e,t);return n.fetchJson().then(function(i){return new Al(i,n)})};Object.defineProperties(Al.prototype,{credits:{get:function(){return l(this._ionRoot)?this._ionRoot.credits:l(this._credits)?this._credits:(this._credits=Al.getCreditsFromEndpoint(this._ionEndpoint,this._ionEndpointResource),this._credits)}}});Al.getCreditsFromEndpoint=function(e,t){let n=e.attributions.map(At.getIonCredit),i=vh.getDefaultTokenCredit(t.queryParameters.access_token);return l(i)&&n.push(At.clone(i)),n};Al.prototype.clone=function(e){let t=this._ionRoot??this;return l(e)||(e=new Al(t._ionEndpoint,t._ionEndpointResource)),e=ve.prototype.clone.call(this,e),e._ionRoot=t,e._isExternal=this._isExternal,e};Al.prototype.fetchImage=function(e){if(!this._isExternal){let t=e;e={preferBlob:!0},l(t)&&(e.flipY=t.flipY,e.preferImageBitmap=t.preferImageBitmap)}return ve.prototype.fetchImage.call(this,e)};Al.prototype._makeRequest=function(e){return this._isExternal||new S4.default(this.url).authority()!==this._ionEndpointDomain?ve.prototype._makeRequest.call(this,e):(e.headers=wde(e.headers),e.headers.Authorization=`Bearer ${this._ionEndpoint.accessToken}`,ve.prototype._makeRequest.call(this,e))};Al._createEndpointResource=function(e,t){t=t??B.EMPTY_OBJECT;let n=t.server??vh.defaultServer,i=t.accessToken??vh.defaultAccessToken;n=ve.createIfNeeded(n);let o={url:`v1/assets/${e}/endpoint`};return l(i)&&(o.queryParameters={access_token:i}),l(t.queryParameters)&&(o.queryParameters={...o.queryParameters,...t.queryParameters}),o.headers=wde(o.headers),n.getDerivedResource(o)};function wde(e={}){return e["X-Cesium-Client"]="CesiumJS",typeof CESIUM_VERSION<"u"&&(e["X-Cesium-Client-Version"]=CESIUM_VERSION),e}function J5e(e,t){let n=e._ionRoot??e,i=n._ionEndpointResource,o=typeof Image<"u";return!l(t)||t.statusCode!==401&&!(o&&t.target instanceof Image)?Promise.resolve(!1):(l(n._pendingPromise)||(n._pendingPromise=i.fetchJson().then(function(r){let s=e.refreshCallback??n.refreshCallback;return l(s)&&s(n,r),n._ionEndpoint=r,n._ionEndpoint}).finally(function(r){return n._pendingPromise=void 0,r})),n._pendingPromise.then(function(r){return e._ionEndpoint=r,!0}))}var ss=Al;var Rrn=x(T(),1);function j5e(e,t,n){let i=Qi(t,"3DTILES_implicit_tiling")?t.extensions["3DTILES_implicit_tiling"]:t.implicitTiling;this.baseResource=e,this.geometricError=t.geometricError,this.metadataSchema=n;let o=t.boundingVolume;if(!l(o.box)&&!l(o.region)&&!Qi(o,"3DTILES_bounding_volume_S2")&&!Qi(o,"3DTILES_bounding_volume_cylinder"))throw new ae("Only box, region, 3DTILES_bounding_volume_S2, and 3DTILES_bounding_volume_cylinder are supported for implicit tiling");this.boundingVolume=o,this.refine=t.refine,this.subtreeUriTemplate=new ve({url:i.subtrees.uri}),this.contentUriTemplates=[],this.contentHeaders=[];let r=Q5e(t);for(let s=0;sPT(new Uint8Array(Z))),S=$5e;S[0]=p,S[1]=_,S[2]=u?_.then(Z=>eDe(Z,f)):void 0;try{let Z=await Promise.all(S),V=Z[0],C=Z[1],G=Z[2],E=V.getTileMetadataView(s),v=E.getPropertyBySemantic(xm.TILE_MINIMUM_HEIGHT),F=E.getPropertyBySemantic(xm.TILE_MAXIMUM_HEIGHT),P=E.getPropertyBySemantic(xm.TILE_BOUNDING_SPHERE),N=le.unpack(P,0,new le),g=E.getPropertyBySemantic(xm.TILE_HORIZON_OCCLUSION_POINT),A=m._tilingScheme.tileXYToRectangle(e,t,n,new re),W=m._ellipsoid,X=$t.fromRectangle(A,v,F,W,new $t),Y=m.getLevelMaximumGeometricError(n)*5,D=uD(r,V,s,0,0),k=uD(r,V,s,1,0),O=uD(r,V,s,0,1),w=uD(r,V,s,1,1),z=(D?1:0)|(k?2:0)|(O?4:0)|(w?8:0),H=new RA({gltf:C,minimumHeight:v,maximumHeight:F,boundingSphere:N,orientedBoundingBox:X,horizonOcclusionPoint:g,skirtHeight:Y,requestVertexNormals:m._requestVertexNormals,childTileMask:z,credits:m._tileCredits,waterMask:G});return Promise.resolve(H)}catch(Z){console.log(`Could not load subtree: ${o} ${a.level} ${a.x} ${a.y}: ${Z}`),console.log(`Could not load tile: ${o} ${s.level} ${s.x} ${s.y}: ${Z}`);return}};xp.prototype.getTileDataAvailable=function(e,t,n){let i=this._subtreeCache,o=Ude(n,e),r=o===0?this._tileset0:this._tileset1,s=Dde(r,n,e,t),a=s.getSubtreeCoordinates(),c=i.find(o,a);if(c!==void 0)return c.tileIsAvailableAtCoordinates(s);if(a.isImplicitTilesetRoot())return s.isSubtreeRoot()?!0:void 0;let d=a.getParentSubtreeCoordinates(),u=i.find(o,d);if(u!==void 0)return u.childSubtreeIsAvailableAtCoordinates(a)?s.isSubtreeRoot()?!0:void 0:!1};function Ude(e,t){let n=1<b.class===r.id);if(!l(a))throw new ge(`Expected a propertyTexture with a class ${r.id}`);let c=a.properties[s.id],d=e.textures[c.index],u=e.images[d.source]?.bufferView,m=Pi.getBufferViewLoader({gltf:e,bufferViewId:u,gltfResource:t,baseResource:t});return await m.load(),await k0({uint8Array:new Uint8Array(m.typedArray),format:"image/png",flipY:!1,skipColorSpaceConversion:!0})}function uD(e,t,n,i,o){let r=n.isBottomOfSubtree(),a=Z4(e,1,i,o),c=n.getDescendantCoordinates(a);return r?t.childSubtreeIsAvailableAtCoordinates(c):t.tileIsAvailableAtCoordinates(c)}function Z4(e,t,n,i){let{subdivisionScheme:o,subtreeLevels:r}=e;return new gp({subdivisionScheme:o,subtreeLevels:r,level:t,x:n,y:i})}xp.prototype.loadTileDataAvailability=function(e,t,n){};xp.prototype.getLevelMaximumGeometricError=function(e){let t=this._ellipsoid;return Oo.getEstimatedLevelZeroGeometricErrorForAHeightmap(t,64,2)/(1<0){let o=i.getParentSubtreeCoordinates(),r=this.find(e,o)}if(this._maximumSubtreeCount>0)for(;this._queue.length>this._maximumSubtreeCount&&this._queue.getMinimum()!==n;)this._queue.removeMinimum()};YT.prototype.find=function(e,t){let n=this._queue,i=n.internalArray,{level:o,x:r,y:s}=t;for(let a=0;a0&&t(e[o-1],e[o])>0;return i?(mD.sort(t),De.createTypedArray(n,mD)):e}var Ode="createVerticesFromQuantizedTerrainMesh",nDe=new Jn(Ode),iDe=new Jn(Ode,gd.maximumAsynchronousTasks);Ty.prototype.createMesh=function(e){e=e??B.EMPTY_OBJECT;let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=e.exaggeration??1,s=e.exaggerationRelativeHeight??0,a=e.throttle??!0,c=t.ellipsoid,d=t.tileXYToRectangle(n,i,o),m=(a?iDe:nDe).scheduleTask({minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,quantizedVertices:this._quantizedVertices,octEncodedNormals:this._encodedNormals,includeWebMercatorT:!0,indices:this._indices,westIndices:this._westIndices,southIndices:this._southIndices,eastIndices:this._eastIndices,northIndices:this._northIndices,westSkirtHeight:this._westSkirtHeight,southSkirtHeight:this._southSkirtHeight,eastSkirtHeight:this._eastSkirtHeight,northSkirtHeight:this._northSkirtHeight,rectangle:d,relativeToCenter:this._boundingSphere.center,ellipsoid:c,exaggeration:r,exaggerationRelativeHeight:s});if(!l(m))return;let p=this;return Promise.resolve(m).then(function(b){let f=p._quantizedVertices.length/3,y=f+p._westIndices.length+p._southIndices.length+p._eastIndices.length+p._northIndices.length,_=De.createTypedArray(y,b.indices),S=new Float32Array(b.vertices),Z=b.center,V=b.minimumHeight,C=b.maximumHeight,G=p._boundingSphere,E=p._orientedBoundingBox,v=h.clone(b.occludeePointInScaledSpace)??p._horizonOcclusionPoint,F=b.vertexStride,P=mr.clone(b.encoding);return p._mesh=new $a(Z,S,_,b.indexCountWithoutSkirts,f,V,C,d,G,v,F,E,P,b.westIndicesSouthToNorth,b.southIndicesEastToWest,b.eastIndicesNorthToSouth,b.northIndicesWestToEast),p._quantizedVertices=void 0,p._encodedNormals=void 0,p._indices=void 0,p._uValues=void 0,p._vValues=void 0,p._heightValues=void 0,p._westIndices=void 0,p._southIndices=void 0,p._eastIndices=void 0,p._northIndices=void 0,p._mesh})};var oDe=new Jn("upsampleQuantizedTerrainMesh",gd.maximumAsynchronousTasks);Ty.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;if(!l(this._mesh))return;let c=t*2!==o,d=n*2===r,u=e.ellipsoid,m=e.tileXYToRectangle(o,r,s),p=oDe.scheduleTask({vertices:a.vertices,vertexCountWithoutSkirts:a.vertexCountWithoutSkirts,indices:a.indices,indexCountWithoutSkirts:a.indexCountWithoutSkirts,encoding:a.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:c,isNorthChild:d,childRectangle:m,ellipsoid:u});if(!l(p))return;let b=Math.min(this._westSkirtHeight,this._eastSkirtHeight);b=Math.min(b,this._southSkirtHeight),b=Math.min(b,this._northSkirtHeight);let f=c?b*.5:this._westSkirtHeight,y=d?b*.5:this._southSkirtHeight,_=c?this._eastSkirtHeight:b*.5,S=d?this._northSkirtHeight:b*.5,Z=this._credits;return Promise.resolve(p).then(function(V){let C=new Uint16Array(V.vertices),G=De.createTypedArray(C.length/3,V.indices),E;return l(V.encodedNormals)&&(E=new Uint8Array(V.encodedNormals)),new Ty({quantizedVertices:C,indices:G,encodedNormals:E,minimumHeight:V.minimumHeight,maximumHeight:V.maximumHeight,boundingSphere:le.clone(V.boundingSphere),orientedBoundingBox:$t.clone(V.orientedBoundingBox),horizonOcclusionPoint:h.clone(V.horizonOcclusionPoint),westIndices:V.westIndices,southIndices:V.southIndices,eastIndices:V.eastIndices,northIndices:V.northIndices,westSkirtHeight:f,southSkirtHeight:y,eastSkirtHeight:_,northSkirtHeight:S,childTileMask:0,credits:Z,createdByUpsampling:!0})})};var C4=32767,Bde=new h;Ty.prototype.interpolateHeight=function(e,t,n){let i=L.clamp((t-e.west)/e.width,0,1);i*=C4;let o=L.clamp((n-e.south)/e.height,0,1);return o*=C4,l(this._mesh)?cDe(this,i,o):lDe(this,i,o)};function zde(e,t,n,i,o,r,s,a){let c=Math.min(n,o,s),d=Math.max(n,o,s),u=Math.min(i,r,a),m=Math.max(i,r,a);return e>=c&&e<=d&&t>=u&&t<=m}var rDe=new M,sDe=new M,aDe=new M;function cDe(e,t,n){let i=e._mesh,o=i.vertices,r=i.encoding,s=i.indices;for(let a=0,c=s.length;a=-1e-15&&y.y>=-1e-15&&y.z>=-1e-15){let _=r.decodeHeight(o,d),S=r.decodeHeight(o,u),Z=r.decodeHeight(o,m);return y.x*_+y.y*S+y.z*Z}}}}function lDe(e,t,n){let i=e._uValues,o=e._vValues,r=e._heightValues,s=e._indices;for(let a=0,c=s.length;a=-1e-15&&Z.y>=-1e-15&&Z.z>=-1e-15){let V=Z.x*r[d]+Z.y*r[u]+Z.z*r[m];return L.lerp(e._minimumHeight,e._maximumHeight,V/C4)}}}}Ty.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<0&&(e.attribution+=" "),e.attribution+=t.attribution),e.layers.push(new dDe({resource:e.lastResource,version:t.version,isHeightmap:a,tileUrlTemplates:c,availability:b,hasVertexNormals:i,hasWaterMask:o,hasMetadata:r,availabilityLevels:m,availabilityTilesLoaded:u,littleEndianExtensionSize:s}));let f=t.parentUrl;return l(f)?l(b)?(e.lastResource=e.lastResource.getDerivedResource({url:f}),e.lastResource.appendForwardSlash(),e.layerJsonResource=e.lastResource.getDerivedResource({url:"layer.json"}),await A4(e),!0):(console.log("A layer.json can't have a parentUrl if it does't have an available array."),!0):!0}function uDe(e,t,n){let i=`An error occurred while accessing ${e.layerJsonResource.url}.`;if(l(t)&&(i+=` ${t.message}`),e.previousError=zo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,i),e.previousError.retry)return A4(e,n);throw new ae(i)}async function mDe(e,t,n){await Jde(e,t,n);let i=e.overallAvailability.length;if(i>0){let o=e.availability=new Ch(e.tilingScheme,e.overallMaxZoom);for(let r=0;r0){let o=new At(e.attribution);e.tileCredits.push(o)}return!0}async function A4(e,t){try{let n=await e.layerJsonResource.fetchJson();return mDe(e,n,t)}catch(n){return l(n)&&n.statusCode===404?(await Jde(e,{tilejson:"2.1.0",format:"heightmap-1.0",version:"1.0.0",scheme:"tms",tiles:["{z}/{x}/{y}.terrain?v={version}"]},t),!0):uDe(e,n,t)}}function Fh(e){e=e??B.EMPTY_OBJECT,this._heightmapWidth=void 0,this._heightmapStructure=void 0,this._hasWaterMask=!1,this._hasVertexNormals=!1,this._hasMetadata=!1,this._scheme=void 0,this._ellipsoid=e.ellipsoid,this._requestVertexNormals=e.requestVertexNormals??!1,this._requestWaterMask=e.requestWaterMask??!1,this._requestMetadata=e.requestMetadata??!0,this._errorEvent=new Se;let t=e.credit;typeof t=="string"&&(t=new At(t)),this._credit=t,this._availability=void 0,this._tilingScheme=void 0,this._levelZeroMaximumGeometricError=void 0,this._layers=void 0,this._tileCredits=void 0}var R4={OCT_VERTEX_NORMALS:1,WATER_MASK:2,METADATA:4};function Hde(e){return!l(e)||e.length===0?{Accept:"application/vnd.quantized-mesh,application/octet-stream;q=0.9,*/*;q=0.01"}:{Accept:`application/vnd.quantized-mesh;extensions=${e.join("-")},application/octet-stream;q=0.9,*/*;q=0.01`}}function hDe(e,t,n,i,o){let r=new Uint16Array(t,0,e._heightmapWidth*e._heightmapWidth);return new Vc({buffer:r,childTileMask:new Uint8Array(t,r.byteLength,1)[0],waterMask:new Uint8Array(t,r.byteLength+1,t.byteLength-r.byteLength-1),width:e._heightmapWidth,height:e._heightmapWidth,structure:e._heightmapStructure,credits:e._tileCredits})}function fDe(e,t,n,i,o,r){let s=r.littleEndianExtensionSize,a=0,c=3,d=c+1,u=Float64Array.BYTES_PER_ELEMENT*c,m=Float64Array.BYTES_PER_ELEMENT*d,b=Uint16Array.BYTES_PER_ELEMENT*3,f=3,y=Uint16Array.BYTES_PER_ELEMENT,_=y*f,S=new DataView(t),Z=new h(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0));a+=u;let V=S.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let C=S.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let G=new le(new h(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0)),S.getFloat64(a+u,!0));a+=m;let E=new h(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0));a+=u;let v=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let F=new Uint16Array(t,a,v*3);a+=v*b,v>64*1024&&(y=Uint32Array.BYTES_PER_ELEMENT,_=y*f);let P=F.subarray(0,v),N=F.subarray(v,2*v),g=F.subarray(v*2,3*v);cn.zigZagDeltaDecode(P,N,g),a%y!==0&&(a+=y-a%y);let R=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let A=De.createTypedArrayFromArrayBuffer(v,t,a,R*f);a+=R*_;let W=0,X=A.length;for(let ue=0;ue0){let Le=Vr(new Uint8Array(t),a+Uint32Array.BYTES_PER_ELEMENT,Te).available;if(l(Le))for(let Xe=0;Xem.promise))}return!l(r)&&a?c.then(()=>new Promise(d=>{setTimeout(()=>{let u=this.requestTileGeometry(e,t,n,i);d(u)},0)})):jde(this,e,t,n,r,i)};function jde(e,t,n,i,o,r){if(!l(o))return Promise.reject(new ae("Terrain tile doesn't exist"));let s=o.tileUrlTemplates;if(s.length===0)return;let a;!e._scheme||e._scheme==="tms"?a=e._tilingScheme.getNumberOfYTilesAtLevel(i)-n-1:a=n;let c=[];e._requestVertexNormals&&o.hasVertexNormals&&c.push(o.littleEndianExtensionSize?"octvertexnormals":"vertexnormals"),e._requestWaterMask&&o.hasWaterMask&&c.push("watermask"),e._requestMetadata&&o.hasMetadata&&c.push("metadata");let d,u,m=s[(t+a+i)%s.length],p=o.resource;l(p._ionEndpoint)&&!l(p._ionEndpoint.externalType)?(c.length!==0&&(u={extensions:c.join("-")}),d=Hde(void 0)):d=Hde(c);let b=p.getDerivedResource({url:m,templateValues:{version:o.version,z:i,x:t,y:a},queryParameters:u,headers:d,request:r}).fetchArrayBuffer();if(l(b))return b.then(function(f){return l(f)?l(e._heightmapStructure)?hDe(e,f,i,t,n):fDe(e,f,i,t,n,o):Promise.reject(new ae("Mesh buffer doesn't exist."))})}Object.defineProperties(Fh.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return this._hasWaterMask&&this._requestWaterMask}},hasVertexNormals:{get:function(){return this._hasVertexNormals&&this._requestVertexNormals}},hasMetadata:{get:function(){return this._hasMetadata&&this._requestMetadata}},requestVertexNormals:{get:function(){return this._requestVertexNormals}},requestWaterMask:{get:function(){return this._requestWaterMask}},requestMetadata:{get:function(){return this._requestMetadata}},availability:{get:function(){return this._availability}}});Fh.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<this._availability._maximumLevel)return!1;if(this._availability.isTileAvailable(n,e,t))return!0;if(!this._hasMetadata)return!1;let i=this._layers,o=i.length;for(let r=0;rthis._availability._maximumLevel||this._availability.isTileAvailable(n,e,t)||!this._hasMetadata)return;let i=this._layers,o=i.length;for(let r=0;r1;--g){if(S=L.PI_OVER_TWO-(g-1)*_,G=JV(-S,r,f,b,c,u,d,m,p,G),E=JV(S+Math.PI,r,f,b,c,u,d,m,p,E),t){for(V[C++]=G.x,V[C++]=G.y,V[C++]=G.z,A=2*(g-1)+2,R=1;R=0?(n=Math.floor(e/65536)*65536,t.high=n,t.low=e-n):(n=Math.floor(-e/65536)*65536,t.high=-n,t.low=e+n),t};var H0={high:0,low:0};Tp.fromCartesian=function(e,t){l(t)||(t=new Tp);let n=t.high,i=t.low;return Tp.encode(e.x,H0),n.x=H0.high,i.x=H0.low,Tp.encode(e.y,H0),n.y=H0.high,i.y=H0.low,Tp.encode(e.z,H0),n.z=H0.high,i.z=H0.low,t};var v4=new Tp;Tp.writeElements=function(e,t,n){Tp.fromCartesian(e,v4);let i=v4.high,o=v4.low;t[n]=i.x,t[n+1]=i.y,t[n+2]=i.z,t[n+3]=o.x,t[n+4]=o.y,t[n+5]=o.z};var Rn=Tp;var man=x(T(),1);var F4={};F4.calculateACMR=function(e){e=e??B.EMPTY_OBJECT;let t=e.indices,n=e.maximumIndex,i=e.cacheSize??24,o=t.length;if(!l(n)){n=0;let a=0,c=t[a];for(;an&&(n=c),++a,c=t[a]}let r=[];for(let a=0;ai&&(r[t[a]]=s,++s);return(s-i+1)/(o/3)};F4.tipsify=function(e){e=e??B.EMPTY_OBJECT;let t=e.indices,n=e.maximumIndex,i=e.cacheSize??24,o;function r(g,R,A,W){for(;R.length>=1;){let X=R[R.length-1];if(R.splice(R.length-1,1),g[X].numLiveTriangles>0)return X}for(;o0)return++o,o-1;++o}return-1}function s(g,R,A,W,X,Y,D){let k=-1,O,w=-1,z=0;for(;zw||w===-1)&&(w=O,k=H)),++z}return k===-1?r(W,Y,g,D):k}let a=t.length,c=0,d=0,u=t[d],m=a;if(l(n))c=n+1;else{for(;dc&&(c=u),++d,u=t[d];if(c===-1)return 0;++c}let p=[],b;for(b=0;bi&&(V.timeStamp=_,++_),++d}y=s(t,i,S,p,_,Z,c)}return E};var sE=F4;var El={};function _D(e,t,n,i,o){e[t++]=n,e[t++]=i,e[t++]=i,e[t++]=o,e[t++]=o,e[t]=n}function _De(e){let t=e.length,n=t/3*6,i=De.createTypedArray(t,n),o=0;for(let r=0;r=3){let n=(t-2)*6,i=De.createTypedArray(t,n);_D(i,0,e[0],e[1],e[2]);let o=6;for(let r=3;r0){let t=e.length-1,n=(t-1)*6,i=De.createTypedArray(t,n),o=e[0],r=0;for(let s=1;so&&(o=n[r]);e.indices=sE.tipsify({indices:n,maximumIndex:o,cacheSize:t})}return e};function rue(e){let t={};for(let n in e)if(e.hasOwnProperty(n)&&l(e[n])&&l(e[n].values)){let i=e[n];t[n]=new Pe({componentDatatype:i.componentDatatype,componentsPerAttribute:i.componentsPerAttribute,normalize:i.normalize,values:[]})}return t}function VDe(e,t,n){for(let i in t)if(t.hasOwnProperty(i)&&l(t[i])&&l(t[i].values)){let o=t[i];for(let r=0;r=L.SIXTY_FOUR_KILOBYTES){let i=[],o=[],r=0,s=rue(e.attributes),a=e.indices,c=a.length,d;e.primitiveType===Fe.TRIANGLES?d=3:e.primitiveType===Fe.LINES?d=2:e.primitiveType===Fe.POINTS&&(d=1);for(let u=0;u=L.SIXTY_FOUR_KILOBYTES&&(t.push(new Zt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV})),i=[],o=[],r=0,s=rue(e.attributes))}o.length!==0&&t.push(new Zt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV}))}else t.push(e);return t};var sue=new h,CDe=new fe;El.projectTo2D=function(e,t,n,i,o){let r=e.attributes[t];o=l(o)?o:new wi;let s=o.ellipsoid,a=r.values,c=new Float64Array(a.length),d=0;for(let u=0;u_&&(_=Z)}return new Zt({attributes:u,indices:f,primitiveType:d,boundingSphere:l(y)?new le(y,_):void 0})}El.combineInstances=function(e){let t=[],n=[],i=e.length;for(let r=0;r0&&o.push(N4(t,"geometry")),n.length>0&&(o.push(N4(n,"westHemisphereGeometry")),o.push(N4(n,"eastHemisphereGeometry"))),o};var Tm=new h,aE=new h,jV=new h,QV=new h;El.computeNormal=function(e){let t=e.indices,n=e.attributes,i=n.position.values,o=n.position.values.length/3,r=t.length,s=new Array(o),a=new Array(r/3),c=new Array(r),d;for(d=0;d0){for(u=0;u3&&(n[3]=0,n[4]=2,n[5]=3);let i=6;for(let o=3;oo?i>r?s=L.sign(e.y):s=L.sign(n.y):o>r?s=L.sign(t.y):s=L.sign(n.y);let a=s<0;_y(e,a),_y(t,a),_y(n,a)}var due=new h;function _m(e,t,n,i){h.add(e,h.multiplyByScalar(h.subtract(t,e,due),e.y/(e.y-t.y),due),n),h.clone(n,i),_y(n,!0),_y(i,!1)}var UT=new h,DT=new h,OT=new h,BT=new h,Y4={positions:new Array(7),indices:new Array(9)};function YDe(e,t,n){if(e.x>=0||t.x>=0||n.x>=0)return;NDe(e,t,n);let i=e.y<0,o=t.y<0,r=n.y<0,s=0;s+=i?1:0,s+=o?1:0,s+=r?1:0;let a=Y4.indices;s===1?(a[1]=3,a[2]=4,a[5]=6,a[7]=6,a[8]=5,i?(_m(e,t,UT,OT),_m(e,n,DT,BT),a[0]=0,a[3]=1,a[4]=2,a[6]=1):o?(_m(t,n,UT,OT),_m(t,e,DT,BT),a[0]=1,a[3]=2,a[4]=0,a[6]=2):r&&(_m(n,e,UT,OT),_m(n,t,DT,BT),a[0]=2,a[3]=0,a[4]=1,a[6]=0)):s===2&&(a[2]=4,a[4]=4,a[5]=3,a[7]=5,a[8]=6,i?o?r||(_m(n,e,UT,OT),_m(n,t,DT,BT),a[0]=0,a[1]=1,a[3]=0,a[6]=2):(_m(t,n,UT,OT),_m(t,e,DT,BT),a[0]=2,a[1]=0,a[3]=2,a[6]=1):(_m(e,t,UT,OT),_m(e,n,DT,BT),a[0]=1,a[1]=2,a[3]=1,a[6]=0));let c=Y4.positions;return c[0]=e,c[1]=t,c[2]=n,c.length=3,(s===1||s===2)&&(c[3]=UT,c[4]=DT,c[5]=OT,c[6]=BT,c.length=7),Y4}function uue(e,t){let n=e.attributes;if(n.position.values.length===0)return;for(let o in n)if(n.hasOwnProperty(o)&&l(n[o])&&l(n[o].values)){let r=n[o];r.values=J.createTypedArray(r.componentDatatype,r.values)}let i=Zt.computeNumberOfVertices(e);return e.indices=De.createTypedArray(i,e.indices),t&&(e.boundingSphere=le.fromVertices(n.position.values)),e}function $V(e){let t=e.attributes,n={};for(let i in t)if(t.hasOwnProperty(i)&&l(t[i])&&l(t[i].values)){let o=t[i];n[i]=new Pe({componentDatatype:o.componentDatatype,componentsPerAttribute:o.componentsPerAttribute,normalize:o.normalize,values:[]})}return new Zt({attributes:n,indices:[],primitiveType:e.primitiveType})}function U4(e,t,n){let i=l(e.geometry.boundingSphere);t=uue(t,i),n=uue(n,i),l(n)&&!l(t)?e.geometry=n:!l(n)&&l(t)?e.geometry=t:(e.westHemisphereGeometry=t,e.eastHemisphereGeometry=n,e.geometry=void 0)}function D4(e,t){let n=new e,i=new e,o=new e;return function(r,s,a,c,d,u,m,p){let b=e.fromArray(d,r*t,n),f=e.fromArray(d,s*t,i),y=e.fromArray(d,a*t,o);e.multiplyByScalar(b,c.x,b),e.multiplyByScalar(f,c.y,f),e.multiplyByScalar(y,c.z,y);let _=e.add(b,f,b);e.add(_,y,_),p&&e.normalize(_,_),e.pack(_,u,m*t)}}var wDe=D4(ce,4),TD=D4(h,3),gue=D4(M,2),MDe=function(e,t,n,i,o,r,s){let a=o[e]*i.x,c=o[t]*i.y,d=o[n]*i.z;r[s]=a+c+d>L.EPSILON6?1:0},lE=new h,w4=new h,M4=new h,kDe=new h;function yD(e,t,n,i,o,r,s,a,c,d,u,m,p,b,f,y){if(!l(r)&&!l(s)&&!l(a)&&!l(c)&&!l(d)&&b===0)return;let _=h.fromArray(o,e*3,lE),S=h.fromArray(o,t*3,w4),Z=h.fromArray(o,n*3,M4),V=kT(i,_,S,Z,kDe);if(l(V)){if(l(r)&&TD(e,t,n,V,r,m.normal.values,y,!0),l(d)){let C=h.fromArray(d,e*3,lE),G=h.fromArray(d,t*3,w4),E=h.fromArray(d,n*3,M4);h.multiplyByScalar(C,V.x,C),h.multiplyByScalar(G,V.y,G),h.multiplyByScalar(E,V.z,E);let v;!h.equals(C,h.ZERO)||!h.equals(G,h.ZERO)||!h.equals(E,h.ZERO)?(v=h.add(C,G,C),h.add(v,E,v),h.normalize(v,v)):(v=lE,v.x=0,v.y=0,v.z=0),h.pack(v,m.extrudeDirection.values,y*3)}if(l(u)&&MDe(e,t,n,V,u,m.applyOffset.values,y),l(s)&&TD(e,t,n,V,s,m.tangent.values,y,!0),l(a)&&TD(e,t,n,V,a,m.bitangent.values,y,!0),l(c)&&gue(e,t,n,V,c,m.st.values,y),b>0)for(let C=0;C3){let W=A.positions,X=A.indices,Y=X.length;for(let D=0;D0)continue;let c=h.unpack(i,s,Tue);(a.y<0&&c.y>0||a.y>0&&c.y<0)&&(s-3>0?(i[s]=n[s-3],i[s+1]=n[s-2],i[s+2]=n[s-1]):h.pack(a,i,s));let d=h.unpack(o,s,k4);(a.y<0&&d.y>0||a.y>0&&d.y<0)&&(s+30||le.intersectPlane(n,nn.ORIGIN_ZX_PLANE)!==jt.INTERSECTING))return e;if(t.geometryType!==hm.NONE)switch(t.geometryType){case hm.POLYLINES:QDe(e);break;case hm.TRIANGLES:mue(e);break;case hm.LINES:hue(e);break}else XDe(t),t.primitiveType===Fe.TRIANGLES?mue(e):t.primitiveType===Fe.LINES&&hue(e);return e};var Bn=El;var e1=new h,O4=new h,B4=new h,_ue=new h,da=new M,Sue=new q,qDe=new q,z4=new Ye,Zue=new h,Vue=new h,Cue=new h,VD=new fe,Rue=new h,Gue=new M,Aue=new M;function Eue(e,t,n){let i=t.vertexFormat,o=t.center,r=t.semiMajorAxis,s=t.semiMinorAxis,a=t.ellipsoid,c=t.stRotation,d=n?e.length/3*2:e.length/3,u=t.shadowVolume,m=i.st?new Float32Array(d*2):void 0,p=i.normal?new Float32Array(d*3):void 0,b=i.tangent?new Float32Array(d*3):void 0,f=i.bitangent?new Float32Array(d*3):void 0,y=u?new Float32Array(d*3):void 0,_=0,S=Zue,Z=Vue,V=Cue,C=new wi(a),G=C.project(a.cartesianToCartographic(o,VD),Rue),E=a.scaleToGeodeticSurface(o,e1);a.geodeticSurfaceNormal(E,E);let v=Sue,F=qDe;if(c!==0){let X=Ye.fromAxisAngle(E,c,z4);v=q.fromQuaternion(X,v),X=Ye.fromAxisAngle(E,-c,z4),F=q.fromQuaternion(X,F)}else v=q.clone(q.IDENTITY,v),F=q.clone(q.IDENTITY,F);let P=M.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Gue),N=M.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Aue),g=e.length,R=n?g:0,A=R/3*2;for(let X=0;X1;--s){for(t[n++]=i++,t[n++]=i,t[n++]=r,o=2*s,a=0;aL.PI&&(m.north=m.north>0?L.PI_OVER_TWO-L.EPSILON7:m.north,m.south=m.south<0?L.EPSILON7-L.PI_OVER_TWO:m.south,m.east=L.PI,m.west=-L.PI),m}function Zp(e){e=e??B.EMPTY_OBJECT;let t=e.center,n=e.ellipsoid??ie.default,i=e.semiMajorAxis,o=e.semiMinorAxis,r=e.granularity??L.RADIANS_PER_DEGREE,s=e.vertexFormat??we.DEFAULT,a=e.height??0,c=e.extrudedHeight??a;this._center=h.clone(t),this._semiMajorAxis=i,this._semiMinorAxis=o,this._ellipsoid=ie.clone(n),this._rotation=e.rotation??0,this._stRotation=e.stRotation??0,this._height=Math.max(c,a),this._granularity=r,this._vertexFormat=we.clone(s),this._extrudedHeight=Math.min(c,a),this._shadowVolume=e.shadowVolume??!1,this._workerName="createEllipseGeometry",this._offsetAttribute=e.offsetAttribute,this._rectangle=void 0,this._textureCoordinateRotationPoints=void 0}Zp.packedLength=h.packedLength+ie.packedLength+we.packedLength+9;Zp.pack=function(e,t,n){return n=n??0,h.pack(e._center,t,n),n+=h.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,we.pack(e._vertexFormat,t,n),n+=we.packedLength,t[n++]=e._semiMajorAxis,t[n++]=e._semiMinorAxis,t[n++]=e._rotation,t[n++]=e._stRotation,t[n++]=e._height,t[n++]=e._granularity,t[n++]=e._extrudedHeight,t[n++]=e._shadowVolume?1:0,t[n]=e._offsetAttribute??-1,t};var vue=new h,Fue=new ie,Iue=new we,Sp={center:vue,ellipsoid:Fue,vertexFormat:Iue,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,stRotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};Zp.unpack=function(e,t,n){t=t??0;let i=h.unpack(e,t,vue);t+=h.packedLength;let o=ie.unpack(e,t,Fue);t+=ie.packedLength;let r=we.unpack(e,t,Iue);t+=we.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],m=e[t++],p=e[t++],b=e[t++]===1,f=e[t];return l(n)?(n._center=h.clone(i,n._center),n._ellipsoid=ie.clone(o,n._ellipsoid),n._vertexFormat=we.clone(r,n._vertexFormat),n._semiMajorAxis=s,n._semiMinorAxis=a,n._rotation=c,n._stRotation=d,n._height=u,n._granularity=m,n._extrudedHeight=p,n._shadowVolume=b,n._offsetAttribute=f===-1?void 0:f,n):(Sp.height=u,Sp.extrudedHeight=p,Sp.granularity=m,Sp.stRotation=d,Sp.rotation=c,Sp.semiMajorAxis=s,Sp.semiMinorAxis=a,Sp.shadowVolume=b,Sp.offsetAttribute=f===-1?void 0:f,new Zp(Sp))};Zp.computeRectangle=function(e,t){e=e??B.EMPTY_OBJECT;let n=e.center,i=e.ellipsoid??ie.default,o=e.semiMajorAxis,r=e.semiMinorAxis,s=e.granularity??L.RADIANS_PER_DEGREE,a=e.rotation??0;return Wue(n,o,r,a,s,i,t)};Zp.createGeometry=function(e){if(e._semiMajorAxis<=0||e._semiMinorAxis<=0)return;let t=e._height,n=e._extrudedHeight,i=!L.equalsEpsilon(t,n,0,L.EPSILON2);e._center=e._ellipsoid.scaleToGeodeticSurface(e._center,e._center);let o={center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:e._ellipsoid,rotation:e._rotation,height:t,granularity:e._granularity,vertexFormat:e._vertexFormat,stRotation:e._stRotation},r;if(i)o.extrudedHeight=n,o.shadowVolume=e._shadowVolume,o.offsetAttribute=e._offsetAttribute,r=nOe(o);else if(r=$De(o),l(e._offsetAttribute)){let s=r.attributes.position.values.length,a=e._offsetAttribute===pn.NONE?0:1,c=new Uint8Array(s/3).fill(a);r.attributes.applyOffset=new Pe({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new Zt({attributes:r.attributes,indices:r.indices,primitiveType:Fe.TRIANGLES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})};Zp.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new Zp({center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:o,rotation:e._rotation,stRotation:e._stRotation,granularity:i,extrudedHeight:r,height:s,vertexFormat:we.POSITION_ONLY,shadowVolume:!0})};function iOe(e){let t=-e._stRotation;if(t===0)return[0,0,0,1,1,0];let i=Zd.computeEllipsePositions({center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,rotation:e._rotation,granularity:e._granularity},!1,!0).outerPositions,o=i.length/3,r=new Array(o);for(let c=0;c0){let f=Math.min(d,c);b=Math.round(c/f);let y=Math.min(b*d,c);for(p=0;pL.EPSILON8){let u=q4(o,i,e.latitude),m=n*Math.cos(t),p=u+m;if(c=lOe(p,o,i),Math.abs(t)0?a=L.negativePiToPi(e.longitude+d):a=L.negativePiToPi(e.longitude-d)}return l(r)?(r.longitude=a,r.latitude=c,r.height=0,r):new fe(a,c,0)}function Q0(e,t,n){let i=n??ie.default;this._ellipsoid=i,this._start=new fe,this._end=new fe,this._heading=void 0,this._distance=void 0,this._ellipticity=void 0,this._ellipticitySquared=void 0,l(e)&&l(t)&&Hue(this,e,t,i)}Object.defineProperties(Q0.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},heading:{get:function(){return this._heading}}});Q0.fromStartHeadingDistance=function(e,t,n,i,o){let r=i??ie.default,s=r.maximumRadius,a=r.minimumRadius,c=s*s,d=a*a,u=Math.sqrt((c-d)/c);t=L.negativePiToPi(t);let m=Kue(e,t,n,r.maximumRadius,u);return!l(o)||l(i)&&!i.equals(o.ellipsoid)?new Q0(e,m,r):(o.setEndPoints(e,m),o)};Q0.prototype.setEndPoints=function(e,t){Hue(this,e,t,this._ellipsoid)};Q0.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(e*this._distance,t)};Q0.prototype.interpolateUsingSurfaceDistance=function(e,t){return Kue(this._start,this._heading,e,this._ellipsoid.maximumRadius,this._ellipticity,t)};Q0.prototype.findIntersectionWithLongitude=function(e,t){let n=this._ellipticity,i=this._heading,o=Math.abs(i),r=this._start;if(e=L.negativePiToPi(e),L.equalsEpsilon(Math.abs(e),Math.PI,L.EPSILON14)&&(e=L.sign(r.longitude)*Math.PI),l(t)||(t=new fe),Math.abs(L.PI_OVER_TWO-o)<=L.EPSILON8)return t.longitude=e,t.latitude=r.latitude,t.height=0,t;if(L.equalsEpsilon(Math.abs(L.PI_OVER_TWO-o),L.PI_OVER_TWO,L.EPSILON8))return L.equalsEpsilon(e,r.longitude,L.EPSILON12)?void 0:(t.longitude=e,t.latitude=L.PI_OVER_TWO*L.sign(L.PI_OVER_TWO-i),t.height=0,t);let s=r.latitude,a=n*Math.sin(s),c=Math.tan(.5*(L.PI_OVER_TWO+s))*Math.exp((e-r.longitude)/Math.tan(i)),d=(1+a)/(1-a),u=r.latitude,m;do{m=u;let p=n*Math.sin(m),b=(1+p)/(1-p);u=2*Math.atan(c*Math.pow(b/d,n/2))-L.PI_OVER_TWO}while(!L.equalsEpsilon(u,m,L.EPSILON12));return t.longitude=e,t.latitude=u,t.height=0,t};Q0.prototype.findIntersectionWithLatitude=function(e,t){let n=this._ellipticity,i=this._heading,o=this._start;if(L.equalsEpsilon(Math.abs(i),L.PI_OVER_TWO,L.EPSILON8))return;let r=r1(n,o.latitude),s=r1(n,e),a=Math.tan(i)*(s-r),c=L.negativePiToPi(o.longitude+a);return l(t)?(t.longitude=c,t.latitude=e,t.height=0,t):new fe(c,e,0)};var Ac=Q0;var Aln=x(T(),1);function hOe(e,t){this.positions=l(e)?e:[],this.holes=l(t)?t:[]}var Ec=hOe;var Kln=x(T(),1);var Lln=x(T(),1);function tQ(e,t,n=2){let i=t&&t.length,o=i?t[0]*n:e.length,r=jue(e,0,o,n,!0),s=[];if(!r||r.next===r.prev)return s;let a,c,d;if(i&&(r=yOe(e,t,r,n)),e.length>80*n){a=e[0],c=e[1];let u=a,m=c;for(let p=n;pu&&(u=b),f>m&&(m=f)}d=Math.max(u-a,m-c),d=d!==0?32767/d:0}return hE(r,s,n,a,c,d,0),s}function jue(e,t,n,i,o){let r;if(o===EOe(e,t,n,i)>0)for(let s=t;s=t;s-=i)r=Jue(s/i|0,e[s],e[s+1],r);return r&&s1(r,r.next)&&(pE(r),r=r.next),r}function KT(e,t){if(!e)return e;t||(t=e);let n=e,i;do if(i=!1,!n.steiner&&(s1(n,n.next)||cs(n.prev,n,n.next)===0)){if(pE(n),n=t=n.prev,n===n.next)break;i=!0}else n=n.next;while(i||n!==t);return t}function hE(e,t,n,i,o,r,s){if(!e)return;!s&&r&&ZOe(e,i,o,r);let a=e;for(;e.prev!==e.next;){let c=e.prev,d=e.next;if(r?pOe(e,i,o,r):fOe(e)){t.push(c.i,e.i,d.i),pE(e),e=d.next,a=d.next;continue}if(e=d,e===a){s?s===1?(e=bOe(KT(e),t),hE(e,t,n,i,o,r,2)):s===2&&gOe(e,t,n,i,o,r):hE(KT(e),t,n,i,o,r,1);break}}}function fOe(e){let t=e.prev,n=e,i=e.next;if(cs(t,n,i)>=0)return!1;let o=t.x,r=n.x,s=i.x,a=t.y,c=n.y,d=i.y,u=Math.min(o,r,s),m=Math.min(a,c,d),p=Math.max(o,r,s),b=Math.max(a,c,d),f=i.next;for(;f!==t;){if(f.x>=u&&f.x<=p&&f.y>=m&&f.y<=b&&mE(o,a,r,c,s,d,f.x,f.y)&&cs(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}function pOe(e,t,n,i){let o=e.prev,r=e,s=e.next;if(cs(o,r,s)>=0)return!1;let a=o.x,c=r.x,d=s.x,u=o.y,m=r.y,p=s.y,b=Math.min(a,c,d),f=Math.min(u,m,p),y=Math.max(a,c,d),_=Math.max(u,m,p),S=$4(b,f,t,n,i),Z=$4(y,_,t,n,i),V=e.prevZ,C=e.nextZ;for(;V&&V.z>=S&&C&&C.z<=Z;){if(V.x>=b&&V.x<=y&&V.y>=f&&V.y<=_&&V!==o&&V!==s&&mE(a,u,c,m,d,p,V.x,V.y)&&cs(V.prev,V,V.next)>=0||(V=V.prevZ,C.x>=b&&C.x<=y&&C.y>=f&&C.y<=_&&C!==o&&C!==s&&mE(a,u,c,m,d,p,C.x,C.y)&&cs(C.prev,C,C.next)>=0))return!1;C=C.nextZ}for(;V&&V.z>=S;){if(V.x>=b&&V.x<=y&&V.y>=f&&V.y<=_&&V!==o&&V!==s&&mE(a,u,c,m,d,p,V.x,V.y)&&cs(V.prev,V,V.next)>=0)return!1;V=V.prevZ}for(;C&&C.z<=Z;){if(C.x>=b&&C.x<=y&&C.y>=f&&C.y<=_&&C!==o&&C!==s&&mE(a,u,c,m,d,p,C.x,C.y)&&cs(C.prev,C,C.next)>=0)return!1;C=C.nextZ}return!0}function bOe(e,t){let n=e;do{let i=n.prev,o=n.next.next;!s1(i,o)&&que(i,n,n.next,o)&&fE(i,o)&&fE(o,i)&&(t.push(i.i,n.i,o.i),pE(n),pE(n.next),n=e=o),n=n.next}while(n!==e);return KT(n)}function gOe(e,t,n,i,o,r){let s=e;do{let a=s.next.next;for(;a!==s.prev;){if(s.i!==a.i&&ROe(s,a)){let c=$ue(s,a);s=KT(s,s.next),c=KT(c,c.next),hE(s,t,n,i,o,r,0),hE(c,t,n,i,o,r,0);return}a=a.next}s=s.next}while(s!==e)}function yOe(e,t,n,i){let o=[];for(let r=0,s=t.length;r=n.next.y&&n.next.y!==n.y){let m=n.x+(o-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(m<=i&&m>r&&(r=m,s=n.x=n.x&&n.x>=c&&i!==n.x&&Que(os.x||n.x===s.x&&SOe(s,n)))&&(s=n,u=m)}n=n.next}while(n!==a);return s}function SOe(e,t){return cs(e.prev,e,t.prev)<0&&cs(t.next,e,e.next)<0}function ZOe(e,t,n,i){let o=e;do o.z===0&&(o.z=$4(o.x,o.y,t,n,i)),o.prevZ=o.prev,o.nextZ=o.next,o=o.next;while(o!==e);o.prevZ.nextZ=null,o.prevZ=null,VOe(o)}function VOe(e){let t,n=1;do{let i=e,o;e=null;let r=null;for(t=0;i;){t++;let s=i,a=0;for(let d=0;d0||c>0&&s;)a!==0&&(c===0||!s||i.z<=s.z)?(o=i,i=i.nextZ,a--):(o=s,s=s.nextZ,c--),r?r.nextZ=o:e=o,o.prevZ=r,r=o;i=s}r.nextZ=null,n*=2}while(t>1);return e}function $4(e,t,n,i,o){return e=(e-n)*o|0,t=(t-i)*o|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function COe(e){let t=e,n=e;do(t.x=(e-s)*(r-a)&&(e-s)*(i-a)>=(n-s)*(t-a)&&(n-s)*(r-a)>=(o-s)*(i-a)}function mE(e,t,n,i,o,r,s,a){return!(e===s&&t===a)&&Que(e,t,n,i,o,r,s,a)}function ROe(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!GOe(e,t)&&(fE(e,t)&&fE(t,e)&&AOe(e,t)&&(cs(e.prev,e,t.prev)||cs(e,t.prev,t))||s1(e,t)&&cs(e.prev,e,e.next)>0&&cs(t.prev,t,t.next)>0)}function cs(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function s1(e,t){return e.x===t.x&&e.y===t.y}function que(e,t,n,i){let o=AD(cs(e,t,n)),r=AD(cs(e,t,i)),s=AD(cs(n,i,e)),a=AD(cs(n,i,t));return!!(o!==r&&s!==a||o===0&&GD(e,n,t)||r===0&&GD(e,i,t)||s===0&&GD(n,e,i)||a===0&&GD(n,t,i))}function GD(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function AD(e){return e>0?1:e<0?-1:0}function GOe(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&que(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function fE(e,t){return cs(e.prev,e,e.next)<0?cs(e,t,e.next)>=0&&cs(e,e.prev,t)>=0:cs(e,t,e.prev)<0||cs(e,e.next,t)<0}function AOe(e,t){let n=e,i=!1,o=(e.x+t.x)/2,r=(e.y+t.y)/2;do n.y>r!=n.next.y>r&&n.next.y!==n.y&&o<(n.next.x-n.x)*(r-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next;while(n!==e);return i}function $ue(e,t){let n=eQ(e.i,e.x,e.y),i=eQ(t.i,t.x,t.y),o=e.next,r=t.prev;return e.next=t,t.prev=e,n.next=o,o.prev=n,i.next=n,n.prev=i,r.next=i,i.prev=r,i}function Jue(e,t,n,i){let o=eQ(e,t,n);return i?(o.next=i.next,o.prev=i,i.next.prev=o,i.next=o):(o.prev=o,o.next=o),o}function pE(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function eQ(e,t,n){return{i:e,x:t,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function EOe(e,t,n,i){let o=0;for(let r=t,s=n-i;r0?Ds.COUNTER_CLOCKWISE:Ds.CLOCKWISE};Sy.triangulate=function(e,t){let n=M.packArray(e);return tQ(n,t,2)};var ime=new h,ome=new h,rme=new h,eme=new h,tme=new h,nme=new h,q0=new h,sme=new M,ame=new M,cme=new M,a1=new M;Sy.computeSubdivision=function(e,t,n,i,o){o=o??L.RADIANS_PER_DEGREE;let r=l(i),s=n.slice(0),a,c=t.length,d=new Array(c*3),u=new Array(c*2),m=0,p=0;for(a=0;a0;){let V=s.pop(),C=s.pop(),G=s.pop(),E=h.fromArray(d,G*3,ime),v=h.fromArray(d,C*3,ome),F=h.fromArray(d,V*3,rme),P,N,g;r&&(P=M.fromArray(u,G*2,sme),N=M.fromArray(u,C*2,ame),g=M.fromArray(u,V*2,cme));let R=h.multiplyByScalar(h.normalize(E,eme),y,eme),A=h.multiplyByScalar(h.normalize(v,tme),y,tme),W=h.multiplyByScalar(h.normalize(F,nme),y,nme),X=h.magnitudeSquared(h.subtract(R,A,q0)),Y=h.magnitudeSquared(h.subtract(A,W,q0)),D=h.magnitudeSquared(h.subtract(W,R,q0)),k=Math.max(X,Y,D),O,w,z;k>S?X===k?(O=`${Math.min(G,C)} ${Math.max(G,C)}`,a=f[O],l(a)||(w=h.add(E,v,q0),h.multiplyByScalar(w,.5,w),d.push(w.x,w.y,w.z),a=d.length/3-1,f[O]=a,r&&(z=M.add(P,N,a1),M.multiplyByScalar(z,.5,z),u.push(z.x,z.y))),s.push(G,a,V),s.push(a,C,V)):Y===k?(O=`${Math.min(C,V)} ${Math.max(C,V)}`,a=f[O],l(a)||(w=h.add(v,F,q0),h.multiplyByScalar(w,.5,w),d.push(w.x,w.y,w.z),a=d.length/3-1,f[O]=a,r&&(z=M.add(N,g,a1),M.multiplyByScalar(z,.5,z),u.push(z.x,z.y))),s.push(C,a,G),s.push(a,V,G)):D===k&&(O=`${Math.min(V,G)} ${Math.max(V,G)}`,a=f[O],l(a)||(w=h.add(F,E,q0),h.multiplyByScalar(w,.5,w),d.push(w.x,w.y,w.z),a=d.length/3-1,f[O]=a,r&&(z=M.add(g,P,a1),M.multiplyByScalar(z,.5,z),u.push(z.x,z.y))),s.push(V,a,C),s.push(a,G,C)):(b.push(G),b.push(C),b.push(V))}let Z={attributes:{position:new Pe({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:d})},indices:b,primitiveType:Fe.TRIANGLES};return r&&(Z.attributes.st=new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:u})),new Zt(Z)};var vOe=new fe,FOe=new fe,IOe=new fe,nQ=new fe;Sy.computeRhumbLineSubdivision=function(e,t,n,i,o){o=o??L.RADIANS_PER_DEGREE;let r=l(i),s=n.slice(0),a,c=t.length,d=new Array(c*3),u=new Array(c*2),m=0,p=0;for(a=0;a0;){let G=s.pop(),E=s.pop(),v=s.pop(),F=h.fromArray(d,v*3,ime),P=h.fromArray(d,E*3,ome),N=h.fromArray(d,G*3,rme),g,R,A;r&&(g=M.fromArray(u,v*2,sme),R=M.fromArray(u,E*2,ame),A=M.fromArray(u,G*2,cme));let W=e.cartesianToCartographic(F,vOe),X=e.cartesianToCartographic(P,FOe),Y=e.cartesianToCartographic(N,IOe);S.setEndPoints(W,X);let D=S.surfaceDistance;Z.setEndPoints(X,Y);let k=Z.surfaceDistance;V.setEndPoints(Y,W);let O=V.surfaceDistance,w=Math.max(D,k,O),z,H,te,K,$;w>_?D===w?(z=`${Math.min(v,E)} ${Math.max(v,E)}`,a=f[z],l(a)||(H=S.interpolateUsingFraction(.5,nQ),te=(W.height+X.height)*.5,K=h.fromRadians(H.longitude,H.latitude,te,e,q0),d.push(K.x,K.y,K.z),a=d.length/3-1,f[z]=a,r&&($=M.add(g,R,a1),M.multiplyByScalar($,.5,$),u.push($.x,$.y))),s.push(v,a,G),s.push(a,E,G)):k===w?(z=`${Math.min(E,G)} ${Math.max(E,G)}`,a=f[z],l(a)||(H=Z.interpolateUsingFraction(.5,nQ),te=(X.height+Y.height)*.5,K=h.fromRadians(H.longitude,H.latitude,te,e,q0),d.push(K.x,K.y,K.z),a=d.length/3-1,f[z]=a,r&&($=M.add(R,A,a1),M.multiplyByScalar($,.5,$),u.push($.x,$.y))),s.push(E,a,v),s.push(a,G,v)):O===w&&(z=`${Math.min(G,v)} ${Math.max(G,v)}`,a=f[z],l(a)||(H=V.interpolateUsingFraction(.5,nQ),te=(Y.height+W.height)*.5,K=h.fromRadians(H.longitude,H.latitude,te,e,q0),d.push(K.x,K.y,K.z),a=d.length/3-1,f[z]=a,r&&($=M.add(A,g,a1),M.multiplyByScalar($,.5,$),u.push($.x,$.y))),s.push(G,a,E),s.push(a,v,E)):(b.push(v),b.push(E),b.push(G))}let C={attributes:{position:new Pe({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:d})},indices:b,primitiveType:Fe.TRIANGLES};return r&&(C.attributes.st=new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:u})),new Zt(C)};Sy.scaleToGeodeticHeight=function(e,t,n,i){n=n??ie.default;let o=LOe,r=WOe;if(t=t??0,i=i??!0,l(e)){let s=e.length;for(let a=0;a10&&t*2>e.length&&(this._array=e.slice(t),t=0),this._offset=t,this._length--,n};Zy.prototype.peek=function(){if(this._length!==0)return this._array[this._offset]};Zy.prototype.contains=function(e){return this._array.indexOf(e)!==-1};Zy.prototype.clear=function(){this._array.length=this._offset=this._length=0};Zy.prototype.sort=function(e){this._offset>0&&(this._array=this._array.slice(this._offset),this._offset=0),this._array.sort(e)};var Vy=Zy;var Cr={};Cr.computeHierarchyPackedLength=function(e,t){let n=0,i=[e];for(;i.length>0;){let o=i.pop();if(!l(o))continue;n+=2;let r=o.positions,s=o.holes;if(l(r)&&r.length>0&&(n+=r.length*t.packedLength),l(s)){let a=s.length;for(let c=0;c0;){let r=o.pop();if(!l(r))continue;let s=r.positions,a=r.holes;if(t[n++]=l(s)?s.length:0,t[n++]=l(a)?a.length:0,l(s)){let c=s.length;for(let d=0;d0?new Array(o):void 0;for(let a=0;aL.PI){let c=s;s=a,a=c}if(!(r.longitudea))return n.cartographicToCartesian(r)}function OOe(e,t,n,i){if(i===ln.RHUMB)return DOe(e,t,n);let o=di.lineSegmentPlane(e,t,nn.ORIGIN_XY_PLANE);if(l(o))return n.scaleToGeodeticSurface(o,o)}var BOe=new fe;function zOe(e,t,n){let i=[],o,r,s,a,c,d=0;for(;dt.cartesianToCartographic(m,BOe).longitude;if(s===0)i.push({position:d,type:s,visited:!1,next:a,theta:u(o)});else if(a!==0){if(c=OOe(o,r,t,n),++d,!l(c))continue;e.splice(d,0,c),i.push({position:d,type:s,visited:!1,next:a,theta:u(c)})}++d}return i}function mme(e,t,n,i,o,r,s){let a=[],c=r,d=m=>p=>p.position===m,u=[];do{let m=n[c];a.push(m);let p=i.findIndex(d(c)),b=i[p];if(!l(b)){++c;continue}let{visited:f,type:y,next:_}=b;if(b.visited=!0,y===0){if(_===0){let C=i[p-(s?1:-1)];if(C?.position===c+1)C.visited=!0;else{++c;continue}}if(!f&&s&&_>0||r===c&&!s&&_<0){++c;continue}}if(!(s?y>=0:y<=0)){++c;continue}f||u.push(c);let Z=p+(s?1:-1),V=i[Z];if(!l(V)){++c;continue}c=V.position}while(c=0&&c!==r&&a.lengthd.theta-u.theta);let c=s[0].z>=0;o=mme(i,o,s,a,1,0,c)}return i};Cr.polygonsFromHierarchy=function(e,t,n,i,o,r){let s=[],a=[],c=new Vy;c.enqueue(e);let d=l(r);for(;c.length!==0;){let u=c.dequeue(),m=u.positions,p=u.holes,b,f;if(i)for(f=m.length,b=0;b1){for(let v of E)c.enqueue(new Ec(v,p));continue}}let Z=m.slice(),V=l(p)?p.length:0,C=[],G;for(b=0;bL.EPSILON12);let R=N*(t*t-n*n)/(n*n),A=1+R*(4096+R*(R*(320-175*R)-768))/16384,W=R*(256+R*(R*(74-47*R)-128))/1024,X=g*g,Y=W*P*(g+W*(F*(2*X-1)-W*g*(4*P*P-3)*(4*X-3)/6)/4),D=n*A*(v-Y),k=Math.atan2(b*E,_-Z*G),O=Math.atan2(m*E,_*G-Z);e._distance=D,e._startHeading=k,e._endHeading=O,e._uSquared=R}var TBe=new h,iQ=new h;function bme(e,t,n,i){let o=h.normalize(i.cartographicToCartesian(t,iQ),TBe),r=h.normalize(i.cartographicToCartesian(n,iQ),iQ);xBe(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude),e._start=fe.clone(t,e._start),e._end=fe.clone(n,e._end),e._start.height=0,e._end.height=0,gBe(e)}function xE(e,t,n){let i=n??ie.default;this._ellipsoid=i,this._start=new fe,this._end=new fe,this._constants={},this._startHeading=void 0,this._endHeading=void 0,this._distance=void 0,this._uSquared=void 0,l(e)&&l(t)&&bme(this,e,t,i)}Object.defineProperties(xE.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},startHeading:{get:function(){return this._startHeading}},endHeading:{get:function(){return this._endHeading}}});xE.prototype.setEndPoints=function(e,t){bme(this,e,t,this._ellipsoid)};xE.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(this._distance*e,t)};xE.prototype.interpolateUsingSurfaceDistance=function(e,t){let n=this._constants,i=n.distanceRatio+e/n.b,o=Math.cos(2*i),r=Math.cos(4*i),s=Math.cos(6*i),a=Math.sin(2*i),c=Math.sin(4*i),d=Math.sin(6*i),u=Math.sin(8*i),m=i*i,p=i*m,b=n.u8Over256,f=n.u2Over4,y=n.u6Over64,_=n.u4Over16,S=2*p*b*o/3+i*(1-f+7*_/4-15*y/4+579*b/64-(_-15*y/4+187*b/16)*o-(5*y/4-115*b/16)*r-29*b*s/16)+(f/2-_+71*y/32-85*b/16)*a+(5*_/16-5*y/4+383*b/96)*c-m*((y-11*b/2)*a+5*b*c/2)+(29*y/96-29*b/16)*d+539*b*u/1536,Z=Math.asin(Math.sin(S)*n.cosineAlpha),V=Math.atan(n.a/n.b*Math.tan(Z));S=S-n.sigma;let C=Math.cos(2*n.sigma+S),G=Math.sin(S),E=Math.cos(S),v=n.cosineU*E,F=n.sineU*G,N=Math.atan2(G*n.sineHeading,v-F*n.cosineHeading)-pme(n.f,n.sineAlpha,n.cosineSquaredAlpha,S,G,E,C);return l(t)?(t.longitude=this._start.longitude+N,t.latitude=V,t.height=0,t):new fe(this._start.longitude+N,V,0)};var $0=xE;var Wl={};Wl.numberOfPoints=function(e,t,n){let i=h.distance(e,t);return Math.ceil(i/n)};Wl.numberOfPointsRhumbLine=function(e,t,n){let i=Math.pow(e.longitude-t.longitude,2)+Math.pow(e.latitude-t.latitude,2);return Math.max(1,Math.ceil(Math.sqrt(i/(n*n))))};var _Be=new fe;Wl.extractHeights=function(e,t){let n=e.length,i=new Array(n);for(let o=0;o0){t=t??I.IDENTITY;let o=I.inverseTransformation(t,SBe),r=I.multiplyByPoint(o,h.ZERO,ZBe),s=h.normalize(I.multiplyByPointAsVector(o,h.UNIT_Y,gme),gme),a=nn.fromPointNormal(r,s,VBe),c=h.normalize(I.multiplyByPointAsVector(o,h.UNIT_X,yme),yme),d=nn.fromPointNormal(r,c,CBe),u=1;n.push(h.clone(e[0]));let m=n[0],p=e.length;for(let b=1;b=0?-a:a}var DBe=new h(-1,0,0),qT=new I,OBe=new I,lQ=new q,BBe=q.IDENTITY.clone(),zBe=new h,HBe=new ce,_me=new h;function eb(e,t,n,i,o,r,s,a){let c=zBe,d=HBe;qT=bt.eastNorthUpToFixedFrame(e,o,qT),c=I.multiplyByPointAsVector(qT,DBe,c),c=h.normalize(c,c);let u=UBe(c,t,e,o);lQ=q.fromRotationZ(u,lQ),_me.z=r,qT=I.multiplyTransformation(qT,I.fromRotationTranslation(lQ,_me,OBe),qT);let m=BBe;m[0]=s;for(let p=0;p0){let y=d?2:1;for(let _=0;_=0};var jBe=new h,QBe=new h;_E.computePositions=function(e,t,n,i,o){let r=i._ellipsoid,s=kBe(e,r),a=i._granularity,c=i._cornerType,d=o?JBe(t,n):Sme(t,n),u=o?Sme(t,n):void 0,m=n.height/2,p=n.width/2,b=e.length,f=[],y=o?[]:void 0,_=vBe,S=FBe,Z=IBe,V=PBe,C=XBe,G=NBe,E=YBe,v=wBe,F=MBe,P=e[0],N=e[1];V=r.geodeticSurfaceNormal(P,V),_=h.subtract(N,P,_),_=h.normalize(_,_),v=h.cross(V,_,v),v=h.normalize(v,v);let g=s[0],R=s[1];o&&(y=eb(P,v,u,y,r,g+m,1,1)),F=h.clone(P,F),P=N,S=h.negate(_,S);let A,W;for(let D=1;DTe;m--)Ce=L.PI_OVER_TWO-m*ue,$[_e++]=1-ee*(1+Math.cos(Ce)),$[_e++]=.5*(1+Math.sin(Ce));for(m=Te;m>0;m--)Ce=L.PI_OVER_TWO-ue*m,$[_e++]=1-de*(1+Math.cos(Ce)),$[_e++]=.5*(1+Math.sin(Ce));for(m=d-y;m>0;m--)$[_e++]=m*de,$[_e++]=1;for(m=1;m0;m--)$[_e++]=(m-1)*de,$[_e++]=1}c.st=new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:$})}return t.normal&&(c.normal=new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:G.normals})),t.tangent&&(c.tangent=new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:G.tangents})),t.bitangent&&(c.bitangent=new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:G.bitangents})),{attributes:c,indices:D}}function d3e(e,t){if(!t.normal&&!t.tangent&&!t.bitangent&&!t.st)return e;let n=e.position.values,i,o;(t.normal||t.bitangent)&&(i=e.normal.values,o=e.bitangent.values);let r=e.position.values.length/18,s=r*3,a=r*2,c=s*2,d;if(t.normal||t.bitangent||t.tangent){let u=t.normal?new Float32Array(s*6):void 0,m=t.tangent?new Float32Array(s*6):void 0,p=t.bitangent?new Float32Array(s*6):void 0,b=Nme,f=Yme,y=YD,_=wD,S=l3e,Z=wme,V=c;for(d=0;d0){let y=Math.min(r,o);d=Math.round(o/y),c+=y}let u=De.createTypedArray(s,c*2),m=0,p;for(p=0;p0)for(p=0;p1e4?1e4:e,{In:function(t){return Math.pow(t,e)},Out:function(t){return 1-Math.pow(1-t,e)},InOut:function(t){return t<.5?Math.pow(t*2,e)/2:(1-Math.pow(2-t*2,e))/2+.5}}}}),vE=function(){return performance.now()},_3e=(function(){function e(){for(var t=[],n=0;n0;){this._tweensAddedDuringUpdate={};for(var o=0;o1?r(e[n],e[n-1],n-i):r(e[o],e[o+1>n?n:o+1],i-o)},Bezier:function(e,t){for(var n=0,i=e.length-1,o=Math.pow,r=f1.Utils.Bernstein,s=0;s<=i;s++)n+=o(1-t,i-s)*o(t,s)*e[s]*r(i,s);return n},CatmullRom:function(e,t){var n=e.length-1,i=n*t,o=Math.floor(i),r=f1.Utils.CatmullRom;return e[0]===e[n]?(t<0&&(o=Math.floor(i=n*(1+t))),r(e[(o-1+n)%n],e[o],e[(o+1)%n],e[(o+2)%n],i-o)):t<0?e[0]-(r(e[0],e[0],e[1],e[1],-i)-e[0]):t>1?e[n]-(r(e[n],e[n],e[n-1],e[n-1],i-n)-e[n]):r(e[o?o-1:0],e[o],e[n1;i--)n*=i;return e[t]=n,n}})(),CatmullRom:function(e,t,n,i,o){var r=(n-e)*.5,s=(i-t)*.5,a=o*o,c=o*a;return(2*t-2*n+r+s)*c+(-3*t+3*n-2*r-s)*a+r*o+t}}},ehe=(function(){function e(){}return e.nextId=function(){return e._nextId++},e._nextId=0,e})(),xQ=new _3e,the=(function(){function e(t,n){this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._isDynamic=!1,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=to.Linear.None,this._interpolationFunction=f1.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=ehe.nextId(),this._isChainStopped=!1,this._propertiesAreSetUp=!1,this._goToEnd=!1,this._object=t,typeof n=="object"?(this._group=n,n.add(this)):n===!0&&(this._group=xQ,xQ.add(this))}return e.prototype.getId=function(){return this._id},e.prototype.isPlaying=function(){return this._isPlaying},e.prototype.isPaused=function(){return this._isPaused},e.prototype.getDuration=function(){return this._duration},e.prototype.to=function(t,n){if(n===void 0&&(n=1e3),this._isPlaying)throw new Error("Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.");return this._valuesEnd=t,this._propertiesAreSetUp=!1,this._duration=n<0?0:n,this},e.prototype.duration=function(t){return t===void 0&&(t=1e3),this._duration=t<0?0:t,this},e.prototype.dynamic=function(t){return t===void 0&&(t=!1),this._isDynamic=t,this},e.prototype.start=function(t,n){if(t===void 0&&(t=vE()),n===void 0&&(n=!1),this._isPlaying)return this;if(this._repeat=this._initialRepeat,this._reversed){this._reversed=!1;for(var i in this._valuesStartRepeat)this._swapEndStartRepeatValues(i),this._valuesStart[i]=this._valuesStartRepeat[i]}if(this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=t,this._startTime+=this._delayTime,!this._propertiesAreSetUp||n){if(this._propertiesAreSetUp=!0,!this._isDynamic){var o={};for(var r in this._valuesEnd)o[r]=this._valuesEnd[r];this._valuesEnd=o}this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat,n)}return this},e.prototype.startFromCurrentValues=function(t){return this.start(t,!0)},e.prototype._setupProperties=function(t,n,i,o,r){for(var s in i){var a=t[s],c=Array.isArray(a),d=c?"array":typeof a,u=!c&&Array.isArray(i[s]);if(!(d==="undefined"||d==="function")){if(u){var m=i[s];if(m.length===0)continue;for(var p=[a],b=0,f=m.length;b"u"||r)&&(n[s]=a),c||(n[s]*=1),u?o[s]=i[s].slice().reverse():o[s]=n[s]||0}}},e.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},e.prototype.end=function(){return this._goToEnd=!0,this.update(this._startTime+this._duration),this},e.prototype.pause=function(t){return t===void 0&&(t=vE()),this._isPaused||!this._isPlaying?this:(this._isPaused=!0,this._pauseStart=t,this)},e.prototype.resume=function(t){return t===void 0&&(t=vE()),!this._isPaused||!this._isPlaying?this:(this._isPaused=!1,this._startTime+=t-this._pauseStart,this._pauseStart=0,this)},e.prototype.stopChainedTweens=function(){for(var t=0,n=this._chainedTweens.length;tc)return 1;var y=Math.trunc(s/a),_=s-y*a,S=Math.min(_/i._duration,1);return S===0&&s===i._duration?1:S},u=d(),m=this._easingFunction(u);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,m),this._onUpdateCallback&&this._onUpdateCallback(this._object,u),this._duration===0||s>=this._duration)if(this._repeat>0){var p=Math.min(Math.trunc((s-this._duration)/a)+1,this._repeat);isFinite(this._repeat)&&(this._repeat-=p);for(r in this._valuesStartRepeat)!this._yoyo&&typeof this._valuesEnd[r]=="string"&&(this._valuesStartRepeat[r]=this._valuesStartRepeat[r]+parseFloat(this._valuesEnd[r])),this._yoyo&&this._swapEndStartRepeatValues(r),this._valuesStart[r]=this._valuesStartRepeat[r];return this._yoyo&&(this._reversed=!this._reversed),this._startTime+=a*p,this._onRepeatCallback&&this._onRepeatCallback(this._object),this._onEveryStartCallbackFired=!1,!0}else{this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var b=0,f=this._chainedTweens.length;b0&&(C=!0,S+=c-1),s0&&u!==y-1&&m!==0&&m!==_-1&&(N[H]=!0),H++;p=0;let te,K;for(u=1;u=Ee&&u0&&(f=!0,m+=d),smF8J\xB4\xDD\xF0.\xDDu\xDA\x8CDt"\xFAa"\f3"So\xAF9D\v\x8C9\xD99L\xB9\xBF\x7F\xAB\\\x8CP_\x9F"ux\xE9\x07q\x91h;\xC1\xC4\x9B\x7F\xF0M\xAA>}\xE6\xCEI\x89\xC6\xE6x\fa1-\xA4O\xA5~q \x88\xEC\r1\xE8N\v\0nPh}=\b\r\x95\xA6n\xA3h\x97$[k\xF3#\xF3\xB6s\xB3\r\v@\xC0\x9F\xD8Q]\xFA".j\xDFI\0\xB9\xA0wU\xC6\xEFj\xBF{GL\x7F\x83\xEE\xDC\xDCF\x85\xA9\xADS\x07+S4\x07\xFF\x94Y\xE48\xE81\x83N\xB9XFk\xCB-#\x86\x92p\x005\x88"\xCF1\xB2&/\xE7\xC3u-6,rt\xB0#G\xB7\xD3\xD1&\x857r\xE2\0\x8CD\xCF\xDA3-\xDE\`\x86i#i*|\xCDKQ\r\x95T9w.)\xEA\x1B\xA6P\xA2j\x8FoP\x99\\>T\xFB\xEFP[\v\x07E\x89m(w7\xDB\x8EJfJo\x99 \xE5p\xE2\xB9q~\fmI-z\xFEr\xC7\xF2Y0\x8F\xBB]s\xE5\xC9 \xEAx\xEC \x90\xF0\x8A\x7FB|G\`\xB0\xBD&\xB7q\xB6\xC7\x9F\xD13\x82=\xD3\xAB\xEEc\x99\xC8+S\xA0D\\q\xC6\xCCD2O<\xCA\xC0)=R\xD3aX\xA9}e\xB4\xDC\xCF\r\xF4=\xF1\b\xA9B\xDA# \xD8\xBF^PI\xF8M\xC0\xCBGLO\xF7{+\xD8\xC51\x92;\xB5o\xDCl\r\x92\x88\xD1\x9E\xDB?\xE2\xE9\xDA_\xD4\x84\xE2FaZ\xDEU\xCF\xA4\0\xBE\xFD\xCEg\xF1Ji\x97\xE6 H\xD8]\x7F~\xAEq N\xAE\xC0V\xA9\x91<\x82r\xE7v\xEC)I\xD6]-\x83\xE3\xDB6\xA9;f\x97\x87j\xD5\xB6=P^R\xB9K\xC7sWx\xC9\xF4.Y\x07\x95\x93o\xD0KW>''\xC7\`\xDB;\xED\x9ASD>?\x8D\x92mw\xA2 \xEB?R\xA8\xC6U^1I7\x85\xF4\xC5&-\xA9\xBF\x8B'T\xDA\xC3j \xE5*x\xB0\xD6\x90pr\xAA\x8Bh\xBD\x88\xF7_H\xB1~\xC0XL?f\xF9>\xE1e\xC0p\xA7\xCF8i\xAF\xF0VldI\x9C'\xADxtO\xC2\x87\xDEV9\0\xDAw\v\xCB-\x1B\x89\xFB5O\xF5\bQ\`\xC1 ZGM&30x\xDA\xC0\x9CFG\xE2[y\`In7gS >\xE9\xECF9\xB2\xF14\r\xC6\x84Sun\xE1\fY\xD9\xDE)\x85{II\xA5wy\xBEIV.6\xE7\v:\xBBOb{\xD2M1\x95/\xBD8{\xA8O!\xE1\xECFpv\x95})"x\x88 \x90\xDD\x9D\\\xDA\xDEQ\xCF\xF0\xFCYRe|3\xDF\xF3H\xDA\xBB*u\xDB\`\xB2\xD4\xFC\xED\x1B\xEC\x7F5\xA8\xFF(1\x07-\xC8\xDC\x88F|\x8A["`);function mu(e){this.imageryPresent=!0,this.protoImagery=void 0,this.terrainPresent=!0,this.negativeAltitudeExponentBias=32,this.negativeAltitudeThreshold=L.EPSILON12,this.providers={},this.key=void 0,this._resource=void 0,this._quadPacketVersion=1,this._tileInfo={},this._subtreePromises={}}Object.defineProperties(mu.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},resource:{get:function(){return this._resource}}});mu.fromUrl=async function(e){let t=e;typeof t!="string"&&!(t instanceof ve)&&(t=e.url);let n=ve.createIfNeeded(t);n.appendForwardSlash();let i=new mu;i._resource=n;try{await cze(i),await i.getQuadTreePacket("",i._quadPacketVersion)}catch(o){let r=`An error occurred while accessing ${xhe(i,"",1).url}: ${o}`;throw new ae(r)}return i};mu.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<=0;--o){let r=1<1;)if(o=i.substring(i.length-1),i=i.substring(0,i.length-1),t=this.getTileInformationFromQuadKey(i),l(t)){!t.hasSubtree()&&!t.hasChild(parseInt(o))&&(n=!1);break}else if(t===null){n=!1;break}return n};var yhe=new Jn("decodeGoogleEarthEnterprisePacket");mu.prototype.getQuadTreePacket=function(e,t,n){t=t??1,e=e??"";let o=xhe(this,e,t,n).fetchArrayBuffer();if(!l(o))return;let r=this._tileInfo,s=this.key;return o.then(function(a){return yhe.scheduleTask({buffer:a,quadKey:e,type:"Metadata",key:s},[a]).then(function(d){let u,m=-1;if(e!==""){m=e.length+1;let f=d[e];u=r[e],u._bits|=f._bits,delete d[e]}let p=Object.keys(d);p.sort(function(f,y){return f.length-y.length});let b=p.length;for(let f=0;f1){let V=r[y.substring(0,y.length-1)];S.setParent(V)}r[y]=S}else r[y]=null}})})};mu.prototype.populateSubtree=function(e,t,n,i){let o=mu.tileXYToQuadKey(e,t,n);return LQ(this,o,i)};function LQ(e,t,n){let i=e._tileInfo,o=t,r=i[o];if(l(r)&&(!r.hasSubtree()||r.hasChildren()))return r;for(;r===void 0&&o.length>1;)o=o.substring(0,o.length-1),r=i[o];let s,a=e._subtreePromises,c=a[o];if(l(c))return c.then(function(){return s=new _r({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),LQ(e,t,s)});if(!l(r)||!r.hasSubtree())return Promise.reject(new ae(`Couldn't load metadata for tile ${t}`));if(c=e.getQuadTreePacket(o,r.cnodeVersion,n),!!l(c))return a[o]=c,c.then(function(){return s=new _r({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),LQ(e,t,s)}).finally(function(){delete a[o]})}mu.prototype.getTileInformation=function(e,t,n){let i=mu.tileXYToQuadKey(e,t,n);return this._tileInfo[i]};mu.prototype.getTileInformationFromQuadKey=function(e){return this._tileInfo[e]};function xhe(e,t,n,i){return e._resource.getDerivedResource({url:`flatfile?q2-0${t}-q.${n.toString()}`,request:i})}var AQ,EQ;function cze(e){let t=e._resource.getDerivedResource({url:"dbRoot.v5",queryParameters:{output:"proto"}});if(!l(EQ)){let n=qt("ThirdParty/google-earth-dbroot-parser.js"),i=window.cesiumGoogleEarthDbRootParser;EQ=yT(n).then(function(){AQ=window.cesiumGoogleEarthDbRootParser(rze),l(i)?window.cesiumGoogleEarthDbRootParser=i:delete window.cesiumGoogleEarthDbRootParser})}return EQ.then(function(){return t.fetchArrayBuffer()}).then(function(n){let i=AQ.EncryptedDbRootProto.decode(new Uint8Array(n)),o=i.encryptionData,r=o.byteOffset,s=r+o.byteLength,a=e.key=o.buffer.slice(r,s);o=i.dbrootData,r=o.byteOffset,s=r+o.byteLength;let c=o.buffer.slice(r,s);return yhe.scheduleTask({buffer:c,type:"DbRoot",key:a},[c])}).then(function(n){let i=AQ.DbRootProto.decode(new Uint8Array(n.buffer));if(e.imageryPresent=i.imageryPresent??e.imageryPresent,e.protoImagery=i.protoImagery,e.terrainPresent=i.terrainPresent??e.terrainPresent,l(i.endSnippet)&&l(i.endSnippet.model)){let a=i.endSnippet.model;e.negativeAltitudeExponentBias=a.negativeAltitudeExponentBias??e.negativeAltitudeExponentBias,e.negativeAltitudeThreshold=a.compressedNegativeAltitudeThreshold??e.negativeAltitudeThreshold}l(i.databaseVersion)&&(e._quadPacketVersion=i.databaseVersion.quadtreeVersion??e._quadPacketVersion);let o=e.providers,r=i.providerInfo??[],s=r.length;for(let a=0;a=-1e-15&&y.y>=-1e-15&&y.z>=-1e-15){let _=r.decodeHeight(o,d),S=r.decodeHeight(o,u),Z=r.decodeHeight(o,m);return y.x*_+y.y*S+y.z*Z}}}var bze=Uint16Array.BYTES_PER_ELEMENT,_he=Uint32Array.BYTES_PER_ELEMENT,WQ=Int32Array.BYTES_PER_ELEMENT,gze=Float32Array.BYTES_PER_ELEMENT,vQ=Float64Array.BYTES_PER_ELEMENT;function yze(e,t,n,i){let o=e._buffer,r=0,s=0,a=0;n>.5?(t>.5?(r=2,s=.5):r=3,a=.5):t>.5&&(r=1,s=.5);let c=new DataView(o),d=0;for(let G=0;G=-1e-15&&W.y>=-1e-15&&W.z>=-1e-15)return W.x*Z[G]+W.y*Z[E]+W.z*Z[v]}}var x1=o_;var Zbn=x(T(),1);var Rm={UNKNOWN:0,NONE:1,SELF:2,PARENT:3},BD=new Q;function zD(){this._terrainCache={},this._lastTidy=Q.now()}zD.prototype.add=function(e,t){this._terrainCache[e]={buffer:t,timestamp:Q.now()}};zD.prototype.get=function(e){let n=this._terrainCache[e];if(l(n))return delete this._terrainCache[e],n.buffer};zD.prototype.tidy=function(){if(Q.now(BD),Q.secondsDifference(BD,this._lastTidy)>10){let e=this._terrainCache,t=Object.keys(e),n=t.length;for(let i=0;i10&&delete e[o]}Q.clone(BD,this._lastTidy)}};function Iy(e){e=e??B.EMPTY_OBJECT,this._tilingScheme=new Ji({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new re(-L.PI,-L.PI,L.PI,L.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new At(t)),this._credit=t,this._levelZeroMaximumGeometricError=40075.16,this._terrainCache=new zD,this._terrainPromises={},this._terrainRequests={},this._errorEvent=new Se}Object.defineProperties(Iy.prototype,{url:{get:function(){return this._metadata.url}},proxy:{get:function(){return this._metadata.proxy}},tilingScheme:{get:function(){return this._tilingScheme}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});Iy.fromMetadata=function(e,t){if(!e.terrainPresent)throw new ae(`The server ${e.url} doesn't have terrain`);let n=new Iy(t);return n._metadata=e,n};var xze=new Jn("decodeGoogleEarthEnterprisePacket");function Vhe(e,t,n){let i=t.getChildBitmask();if(t.terrainState===Rm.PARENT){i=0;for(let o=0;o<4;++o){let r=n.getTileInformationFromQuadKey(e+o.toString());l(r)&&r.hasTerrain()&&(i|=1<0?n:1,e._metadata.resource.getDerivedResource({url:`flatfile?f1c-0${t}-t.${n.toString()}`,request:i})}var FQ=Iy;var Lbn=x(T(),1);var _ze="https://maps.googleapis.com/maps/api/geocode/json",Che='Google';function IQ(e){e=e??B.EMPTY_OBJECT;let t=e.key;this._resource=new ve({url:_ze,queryParameters:{key:t}}),this._credit=new At(Che,!0)}Object.defineProperties(IQ.prototype,{credit:{get:function(){return this._credit}}});IQ.prototype.geocode=async function(e){let n=await this._resource.getDerivedResource({queryParameters:{address:e}}).fetchJson();if(n.status==="ZERO_RESULTS")return[];if(n.status!=="OK")throw new ae(`GoogleGeocoderService got a bad response ${n.status}: ${n.error_message}`);return n.results.map(o=>{let r=o.geometry.viewport.southwest,s=o.geometry.viewport.northeast;return{displayName:o.formatted_address,destination:re.fromDegrees(r.lng,r.lat,s.lng,s.lat),attribution:{html:Che,collapsible:!1}}})};var PQ=IQ;var Ibn=x(T(),1);var T1={};T1.defaultApiKey=void 0;T1.mapTilesApiEndpoint=new ve({url:"https://tile.googleapis.com/"});T1.defaultStreetViewStaticApiKey=void 0;T1.streetViewStaticApiEndpoint=new ve({url:"https://maps.googleapis.com/maps/api/streetview"});T1.getDefaultCredit=function(){return new At('Google',!0)};var ua=T1;var rgn=x(T(),1);var DQ=[wi,fi],Sze=DQ.length,Bhe=Math.cos(L.toRadians(30)),Rhe=Math.cos(L.toRadians(150)),zhe=0,Hhe=1e3;function Xy(e){e=e??B.EMPTY_OBJECT;let t=e.positions;this.width=e.width??1,this._positions=t,this.granularity=e.granularity??9999,this.loop=e.loop??!1,this.arcType=e.arcType??ln.GEODESIC,this._ellipsoid=ie.default,this._projectionIndex=0,this._workerName="createGroundPolylineGeometry",this._scene3DOnly=!1}Object.defineProperties(Xy.prototype,{packedLength:{get:function(){return 1+this._positions.length*3+1+1+1+ie.packedLength+1+1}}});Xy.setProjectionAndEllipsoid=function(e,t){let n=0;for(let i=0;iBhe||rL.PI_OVER_TWO&&(a=!0,s=h.subtract(r,n,Ihe),d=c.cartesianToCartographic(s,Fhe)),d.height=0;let u=e.project(d,o);return o=h.subtract(u,i,o),o.z=0,o=h.normalize(o,o),a&&h.negate(o,o),o}var Uze=new h,Phe=new h;function Xhe(e,t,n,i,o,r){let s=h.subtract(t,e,Uze);h.normalize(s,s);let a=n-zhe,c=h.multiplyByScalar(s,a,Phe);h.add(e,c,o);let d=i-Hhe;c=h.multiplyByScalar(s,d,Phe),h.add(t,c,r)}var Dze=new h;function JD(e,t){let n=nn.getPointDistance(jD,e),i=nn.getPointDistance(jD,t),o=Dze;L.equalsEpsilon(n,0,L.EPSILON2)?(o=ab(t,e,o),h.multiplyByScalar(o,L.EPSILON2,o),h.add(e,o,e)):L.equalsEpsilon(i,0,L.EPSILON2)&&(o=ab(e,t,o),h.multiplyByScalar(o,L.EPSILON2,o),h.add(t,o,t))}function Oze(e,t){let n=Math.abs(e.longitude),i=Math.abs(t.longitude);if(L.equalsEpsilon(n,L.PI,L.EPSILON11)){let o=L.sign(t.longitude);return e.longitude=o*(n-L.EPSILON11),1}else if(L.equalsEpsilon(i,L.PI,L.EPSILON11)){let o=L.sign(e.longitude);return t.longitude=o*(i-L.EPSILON11),2}return 0}var Jhe=new fe,jhe=new fe,Nhe=new h,wQ=new h,Yhe=new h,whe=new h,Bze=new h,Mhe=new h,zze=[Jhe,jhe],Hze=new re,Kze=new h,Jze=new h,jze=new h,Qze=new h,qze=new h,$ze=new h,MQ=new h,kQ=new h,eHe=new h,tHe=new h,nHe=new h,khe=new h,iHe=new h,oHe=new h,rHe=new Rn,sHe=new Rn,Uhe=new h,aHe=new h,Dhe=new h,cHe=[new le,new le],Qhe=[0,2,1,0,3,2,0,7,3,0,4,7,0,5,4,0,1,5,5,7,4,5,6,7,5,2,6,5,1,2,3,6,2,3,7,6],Ohe=Qhe.length;function lHe(e,t,n,i,o,r,s){let a,c,d=t._ellipsoid,u=n.length/3-1,m=u*8,p=m*4,b=u*36,f=m>65535?new Uint32Array(b):new Uint16Array(b),y=new Float64Array(m*3),_=new Float32Array(p),S=new Float32Array(p),Z=new Float32Array(p),V=new Float32Array(p),C=new Float32Array(p),G,E,v,F;s&&(G=new Float32Array(p),E=new Float32Array(p),v=new Float32Array(p),F=new Float32Array(m*2));let P=r.length/2,N=0,g=Jhe;g.height=0;let R=jhe;R.height=0;let A=Nhe,W=wQ;if(s)for(c=0,a=1;aBhe?(Qe=YE(t,g,qe,je,MQ),Ee=YE(t,R,$,_t,kQ)):yi===1?(Ee=YE(t,R,$,_t,kQ),Qe.x=0,Qe.y=L.sign(g.longitude-Math.abs(R.longitude)),Qe.z=0):(Qe=YE(t,g,qe,je,MQ),Ee.x=0,Ee.y=L.sign(g.longitude-R.longitude),Ee.z=0)}let He=h.distance(Xe,K),Rt=Rn.fromCartesian(Le,rHe),dt=h.subtract(te,Le,eHe),gn=h.normalize(dt,khe),Bt=h.subtract(Xe,Le,tHe);Bt=h.normalize(Bt,Bt);let St=h.cross(gn,Bt,khe);St=h.normalize(St,St);let vt=h.cross(Bt,qe,iHe);vt=h.normalize(vt,vt);let Wn=h.subtract(K,te,nHe);Wn=h.normalize(Wn,Wn);let at=h.cross($,Wn,oHe);at=h.normalize(at,at);let ft=He/Y,Ai=ee/Y,En=0,Ni,fo,Yi,Ki=0,ci=0;if(s){En=h.distance(je,_t),Ni=Rn.fromCartesian(je,sHe),fo=h.subtract(_t,je,Uhe),Yi=h.normalize(fo,aHe);let yi=Yi.x;Yi.x=Yi.y,Yi.y=-yi,Ki=En/N,ci=de/N}for(D=0;D<8;D++){let yi=z+D*4,cr=O+D*2,Fi=yi+3,Ur=D<4?1:-1,Ii=D===2||D===3||D===6||D===7?1:-1;h.pack(Rt.high,_,yi),_[Fi]=dt.x,h.pack(Rt.low,S,yi),S[Fi]=dt.y,h.pack(vt,Z,yi),Z[Fi]=dt.z,h.pack(at,V,yi),V[Fi]=ft*Ur,h.pack(St,C,yi);let Eo=Ai*Ii;Eo===0&&Ii<0&&(Eo=9),C[Fi]=Eo,s&&(G[yi]=Ni.high.x,G[yi+1]=Ni.high.y,G[yi+2]=Ni.low.x,G[yi+3]=Ni.low.y,v[yi]=-Qe.y,v[yi+1]=Qe.x,v[yi+2]=Ee.y,v[yi+3]=-Ee.x,E[yi]=fo.x,E[yi+1]=fo.y,E[yi+2]=Yi.x,E[yi+3]=Yi.y,F[cr]=Ki*Ur,Eo=ci*Ii,Eo===0&&Ii<0&&(Eo=9),F[cr+1]=Eo)}let oi=jze,Gn=Qze,ri=Kze,Ao=Jze,Zs=re.fromCartographicArray(zze,Hze),ws=Ei.getMinimumMaximumHeights(Zs,d),ia=ws.minimumTerrainHeight,oa=ws.maximumTerrainHeight;_e+=Math.abs(ia),_e+=Math.abs(oa),Xhe(Le,Xe,ia,oa,oi,ri),Xhe(te,K,ia,oa,Gn,Ao);let ar=h.multiplyByScalar(St,L.EPSILON5,Dhe);h.add(oi,ar,oi),h.add(Gn,ar,Gn),h.add(ri,ar,ri),h.add(Ao,ar,Ao),JD(oi,Gn),JD(ri,Ao),h.pack(oi,y,w),h.pack(Gn,y,w+3),h.pack(Ao,y,w+6),h.pack(ri,y,w+9),ar=h.multiplyByScalar(St,-2*L.EPSILON5,Dhe),h.add(oi,ar,oi),h.add(Gn,ar,Gn),h.add(ri,ar,ri),h.add(Ao,ar,Ao),JD(oi,Gn),JD(ri,Ao),h.pack(oi,y,w+12),h.pack(Gn,y,w+15),h.pack(Ao,y,w+18),h.pack(ri,y,w+21),k+=2,c+=3,O+=16,w+=24,z+=32,ee+=He,de+=En}c=0;let ue=0;for(a=0;a0){for(c=0;c0;a/=2)r=(o.x&a)>0?1:0,s=(o.y&a)>0?1:0,c+=BigInt((3*r^s)*a*a),qhe(i,o,r,s);return c};HQ.decode2D=function(e,t){let n=Math.pow(2,e),i={x:0,y:0},o,r,s,a;for(s=1,a=t;st===e))throw new ge(`Invalid geocodeProviderType: "${e}"`)}var bfe=Object.freeze({[cb.GOOGLE]:"google",[cb.BING]:"bing",[cb.DEFAULT]:void 0});function ZHe(e){return bfe[e]}function VHe(e){return Object.entries(bfe).find(t=>t[1]===e)[0]}function qQ(e){e=e??B.EMPTY_OBJECT;let t=e.geocodeProviderType??cb.DEFAULT,n=e.accessToken??vh.defaultAccessToken,i=ve.createIfNeeded(e.server??vh.defaultServer);i.appendForwardSlash();let o=vh.getDefaultTokenCredit(n);l(o)&&e.scene.frameState.creditDisplay.addStaticCredit(At.clone(o));let r=i.getDerivedResource({url:"v1/geocode"});l(n)&&r.appendQueryParameters({access_token:n}),this._accessToken=n,this._server=i,this._pelias=new DE(r),this.geocodeProviderType=t}Object.defineProperties(qQ.prototype,{credit:{get:function(){}},geocodeProviderType:{get:function(){return VHe(this._pelias.url.queryParameters.geocoder)},set:function(e){SHe(e);let t={...this._pelias.url.queryParameters,geocoder:ZHe(e)};l(t.geocoder)||delete t.geocoder,this._pelias.url.setQueryParameters(t)}}});qQ.prototype.geocode=async function(e,t){return this._pelias.geocode(e,t)};var s_=qQ;var yyn=x(T(),1);var fyn=x(T(),1);function Rr(e){e=e??B.EMPTY_OBJECT,this.start=l(e.start)?Q.clone(e.start):new Q,this.stop=l(e.stop)?Q.clone(e.stop):new Q,this.data=e.data,this.isStartIncluded=e.isStartIncluded??!0,this.isStopIncluded=e.isStopIncluded??!0}Object.defineProperties(Rr.prototype,{isEmpty:{get:function(){let e=Q.compare(this.stop,this.start);return e<0||e===0&&(!this.isStartIncluded||!this.isStopIncluded)}}});var S1={start:void 0,stop:void 0,isStartIncluded:void 0,isStopIncluded:void 0,data:void 0};Rr.fromIso8601=function(e,t){let n=e.iso8601.split("/");if(n.length!==2)throw new ge("options.iso8601 is an invalid ISO 8601 interval.");let i=Q.fromIso8601(n[0]),o=Q.fromIso8601(n[1]),r=e.isStartIncluded??!0,s=e.isStopIncluded??!0,a=e.data;return l(t)?(t.start=i,t.stop=o,t.isStartIncluded=r,t.isStopIncluded=s,t.data=a,t):(S1.start=i,S1.stop=o,S1.isStartIncluded=r,S1.isStopIncluded=s,S1.data=a,new Rr(S1))};Rr.toIso8601=function(e,t){return`${Q.toIso8601(e.start,t)}/${Q.toIso8601(e.stop,t)}`};Rr.clone=function(e,t){if(l(e))return l(t)?(t.start=e.start,t.stop=e.stop,t.isStartIncluded=e.isStartIncluded,t.isStopIncluded=e.isStopIncluded,t.data=e.data,t):new Rr(e)};Rr.equals=function(e,t,n){return e===t||l(e)&&l(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&Q.equals(e.start,t.start)&&Q.equals(e.stop,t.stop)&&(e.data===t.data||l(n)&&n(e.data,t.data)))};Rr.equalsEpsilon=function(e,t,n,i){return n=n??0,e===t||l(e)&&l(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&Q.equalsEpsilon(e.start,t.start,n)&&Q.equalsEpsilon(e.stop,t.stop,n)&&(e.data===t.data||l(i)&&i(e.data,t.data)))};Rr.intersect=function(e,t,n,i){if(!l(t))return Rr.clone(Rr.EMPTY,n);let o=e.start,r=e.stop,s=t.start,a=t.stop,c=Q.greaterThanOrEquals(s,o)&&Q.greaterThanOrEquals(r,s),d=!c&&Q.lessThanOrEquals(s,o)&&Q.lessThanOrEquals(o,a);if(!c&&!d)return Rr.clone(Rr.EMPTY,n);let u=e.isStartIncluded,m=e.isStopIncluded,p=t.isStartIncluded,b=t.isStopIncluded,f=Q.lessThan(r,a);return l(n)||(n=new Rr),n.start=c?s:o,n.isStartIncluded=u&&p||!Q.equals(s,o)&&(c&&p||d&&u),n.stop=f?r:a,n.isStopIncluded=f?m:m&&b||!Q.equals(a,r)&&b,n.data=l(i)?i(e.data,t.data):e.data,n};Rr.contains=function(e,t){if(e.isEmpty)return!1;let n=Q.compare(e.start,t);if(n===0)return e.isStartIncluded;let i=Q.compare(t,e.stop);return i===0?e.isStopIncluded:n<0&&i<0};Rr.prototype.clone=function(e){return Rr.clone(this,e)};Rr.prototype.equals=function(e,t){return Rr.equals(this,e,t)};Rr.prototype.equalsEpsilon=function(e,t,n){return Rr.equalsEpsilon(this,e,t,n)};Rr.prototype.toString=function(){return Rr.toIso8601(this)};Rr.EMPTY=Object.freeze(new Rr({start:new Q,stop:new Q,isStartIncluded:!1,isStopIncluded:!1}));var Vn=Rr;var gfe=Object.freeze(Q.fromIso8601("0000-01-01T00:00:00Z")),yfe=Object.freeze(Q.fromIso8601("9999-12-31T24:00:00Z")),CHe=Object.freeze(new Vn({start:gfe,stop:yfe})),RHe={MINIMUM_VALUE:gfe,MAXIMUM_VALUE:yfe,MAXIMUM_INTERVAL:CHe},tt=RHe;var Tyn=x(T(),1),xfe={SHIFT:0,CTRL:1,ALT:2};Object.freeze(xfe);var Ho=xfe;var Zyn=x(T(),1);var $Q=class{static get type(){return"Lagrange"}static getRequiredDataPoints(t){return Math.max(t+1,2)}static interpolateOrderZero(t,n,i,o,r){l(r)||(r=new Array(o));let s,a,c=n.length;for(s=0;st.length&&(t.length=e);this._length=e}},values:{get:function(){return this._array}}});Ep.prototype.get=function(e){return this._array[e]};Ep.prototype.set=function(e,t){e>=this._length&&(this.length=e+1),this._array[e]=t};Ep.prototype.peek=function(){return this._array[this._length-1]};Ep.prototype.push=function(e){let t=this.length++;this._array[t]=e};Ep.prototype.pop=function(){if(this._length===0)return;let e=this._array[this._length-1];return--this.length,e};Ep.prototype.reserve=function(e){e>this._array.length&&(this._array.length=e)};Ep.prototype.resize=function(e){this.length=e};Ep.prototype.trim=function(e){e=e??this._length,this._array.length=e};var Pl=Ep;var Wyn=x(T(),1);var t8=class{constructor(){ct(this,"ellipsoid")}project(t,n){ge.throwInstantiationError()}unproject(t,n){ge.throwInstantiationError()}},n8=t8;var Nyn=x(T(),1);function Z1(e){e=e??B.EMPTY_OBJECT;let t=e.weights,n=e.times;this._times=n,this._weights=t,this._count=t.length/n.length,this._lastTimeIndex=0}Object.defineProperties(Z1.prototype,{times:{get:function(){return this._times}},weights:{get:function(){return this._weights}}});Z1.prototype.findTimeInterval=Zo.prototype.findTimeInterval;Z1.prototype.wrapTime=Zo.prototype.wrapTime;Z1.prototype.clampTime=Zo.prototype.clampTime;Z1.prototype.evaluate=function(e,t){let n=this.weights,i=this.times,o=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),r=(e-i[o])/(i[o+1]-i[o]);l(t)||(t=new Array(this._count));for(let s=0;si){o=Math.sqrt(n-i),n=1/Math.sqrt(n),r=h.multiplyByScalar(t,n,QD);let a=o*o*n;s=h.add(e,h.multiplyByScalar(r,a,QD),QD)}else o=Number.MAX_VALUE;this._horizonDistance=o,this._horizonPlaneNormal=r,this._horizonPlanePosition=s,this._cameraPosition=e}}});Jc.fromBoundingSphere=function(e,t,n){return l(n)?(h.clone(e.center,n._occluderPosition),n._occluderRadius=e.radius,n.cameraPosition=t,n):new Jc(e,t)};var Sfe=new h;Jc.prototype.isPointVisible=function(e){if(this._horizonDistance!==Number.MAX_VALUE){let t=h.subtract(e,this._occluderPosition,Sfe),n=this._occluderRadius;if(n=h.magnitudeSquared(t)-n*n,n>0)return n=Math.sqrt(n)+this._horizonDistance,t=h.subtract(e,this._cameraPosition,t),n*n>h.magnitudeSquared(t)}return!1};var GHe=new h;Jc.prototype.isBoundingSphereVisible=function(e){let t=h.clone(e.center,GHe),n=e.radius;if(this._horizonDistance!==Number.MAX_VALUE){let i=h.subtract(t,this._occluderPosition,Sfe),o=this._occluderRadius-n;if(o=h.magnitudeSquared(i)-o*o,n0?(o=Math.sqrt(o)+this._horizonDistance,i=h.subtract(t,this._cameraPosition,i),o*o+n*n>h.magnitudeSquared(i)):!1;if(o>0){i=h.subtract(t,this._cameraPosition,i);let r=h.magnitudeSquared(i),s=this._occluderRadius*this._occluderRadius,a=n*n;return(this._horizonDistance*this._horizonDistance+s)*a>r*s?!0:(o=Math.sqrt(o)+this._horizonDistance,o*o+a>r)}return!0}return!1};var AHe=new h;Jc.prototype.computeVisibility=function(e){let t=h.clone(e.center),n=e.radius;if(n>this._occluderRadius)return Pr.FULL;if(this._horizonDistance!==Number.MAX_VALUE){let i=h.subtract(t,this._occluderPosition,AHe),o=this._occluderRadius-n,r=h.magnitudeSquared(i);if(o=r-o*o,o>0){o=Math.sqrt(o)+this._horizonDistance,i=h.subtract(t,this._cameraPosition,i);let s=h.magnitudeSquared(i);return o*o+n*n0?(o=Math.sqrt(o)+this._horizonDistance,s-n?Pr.PARTIAL:Pr.FULL))}}return Pr.NONE};var qD=new h;Jc.computeOccludeePoint=function(e,t,n){let i=h.clone(t),o=h.clone(e.center),r=e.radius,s=n.length,a=h.normalize(h.subtract(i,o,qD),qD),c=-h.dot(a,o),d=Jc._anyRotationVector(o,a,c),u=Jc._horizonToPlaneNormalDotProduct(e,a,c,d,n[0]);if(!u)return;let m;for(let b=1;bi.y?0:1;(o===0&&i.z>i.x||o===1&&i.z>i.y)&&(o=2);let r=new h,s;o===0?(i.x=e.x,i.y=e.y+1,i.z=e.z+1,s=h.UNIT_X):o===1?(i.x=e.x+1,i.y=e.y,i.z=e.z+1,s=h.UNIT_Y):(i.x=e.x+1,i.y=e.y+1,i.z=e.z,s=h.UNIT_Z);let a=(h.dot(t,i)+n)/-h.dot(t,s);return h.normalize(h.subtract(h.add(i,h.multiplyByScalar(s,a,r),i),e,i),i)};var WHe=new h;Jc._rotationVector=function(e,t,n,i,o){let r=h.subtract(i,e,WHe);if(r=h.normalize(r,r),h.dot(t,r)<.9999999847691291){let s=h.cross(t,r,r);if(h.magnitude(s)>L.EPSILON13)return h.normalize(s,new h)}return o};var o8=new h,vHe=new h,$D=new h,_fe=new h;Jc._horizonToPlaneNormalDotProduct=function(e,t,n,i,o){let r=h.clone(o,o8),s=h.clone(e.center,vHe),a=e.radius,c=h.subtract(s,r,$D),d=h.magnitudeSquared(c),u=a*a;if(dOpenStreetMap contributors',!1)}Object.defineProperties(r8.prototype,{url:{get:function(){return this._url}},params:{get:function(){return this._params}},credit:{get:function(){return this._credit}}});r8.prototype.geocode=async function(e){return this._url.getDerivedResource({url:"json",queryParameters:It(this._params,{q:e})}).fetchJson().then(function(n){return n.results.map(function(i){let o,r=i.bounds;if(l(r))o=re.fromDegrees(r.southwest.lng,r.southwest.lat,r.northeast.lng,r.northeast.lat);else{let{lng:s,lat:a}=i.geometry;o=h.fromDegrees(s,a)}return{displayName:i.formatted,destination:o}})})};var s8=r8;var mxn=x(T(),1);var FHe={packedLength:void 0,pack:ge.throwInstantiationError,unpack:ge.throwInstantiationError},a8=FHe;var pxn=x(T(),1);var IHe={packedInterpolationLength:void 0,convertPackedArrayForInterpolation:ge.throwInstantiationError,unpackInterpolationResult:ge.throwInstantiationError},c8=IHe;var Gxn=x(T(),1);var Txn=x(T(),1);function PHe(e,t){let n=e.measureText(t);if(!/\S/.test(t))return{width:n.width,height:0,ascent:0,descent:0,minx:0};let o=Math.round(n.actualBoundingBoxAscent),r=Math.round(n.actualBoundingBoxDescent),s=Math.max(o+r,1);return{width:n.width,height:s,ascent:o,descent:r,minx:-Math.round(n.actualBoundingBoxLeft)}}var c_;function XHe(e,t){if(e==="")return;t=t??B.EMPTY_OBJECT;let n=t.font??"10px sans-serif",i=t.stroke??!1,o=t.fill??!0,r=t.strokeWidth??1,s=t.backgroundColor??U.TRANSPARENT,a=t.padding??0,c=a*2,d=document.createElement("canvas");d.width=1,d.height=1,d.style.font=n;let u=d.getContext("2d",{willReadFrequently:!0});l(c_)||(l(u.imageSmoothingEnabled)?c_="imageSmoothingEnabled":l(u.mozImageSmoothingEnabled)?c_="mozImageSmoothingEnabled":l(u.webkitImageSmoothingEnabled)?c_="webkitImageSmoothingEnabled":l(u.msImageSmoothingEnabled)&&(c_="msImageSmoothingEnabled")),u.font=n,u.lineJoin="round",u.lineWidth=r,u[c_]=!1,d.style.visibility="hidden",document.body.appendChild(d);let m=PHe(u,e);d.dimensions=m,document.body.removeChild(d),d.style.visibility="";let p=!/\S/.test(e),b=i&&!p?Math.ceil(r/2):0,f=b*2,y=-m.minx+b,_=Math.ceil(m.width)+y+c+b,S=m.height+c+f,Z=m.ascent+a+b;if(d.width=_,d.height=S,u.font=n,u.lineJoin="round",u.lineWidth=r,u[c_]=!1,s!==U.TRANSPARENT&&(u.fillStyle=s.toCssColorString(),u.fillRect(0,0,d.width,d.height)),i){let V=t.strokeColor??U.BLACK;u.strokeStyle=V.toCssColorString(),u.strokeText(e,y+a,Z)}if(o){let V=t.fillColor??U.WHITE;u.fillStyle=V.toCssColorString(),u.fillText(e,y+a,Z)}return d}var l_=XHe;function KE(){this._cache={}}KE.prototype.fromColor=function(e,t){return eO(void 0,void 0,e,t,this._cache)};KE.prototype.fromUrl=function(e,t,n){return eO(e,void 0,t,n,this._cache)};KE.prototype.fromMakiIconId=function(e,t,n){return eO(qt(`Assets/Textures/maki/${encodeURIComponent(e)}.png`),void 0,t,n,this._cache)};KE.prototype.fromText=function(e,t,n){return eO(void 0,e,t,n,this._cache)};var NHe=new U;function YHe(e,t,n){e.save(),e.scale(n/24,n/24),e.fillStyle=t.toCssColorString(),e.strokeStyle=t.brighten(.6,NHe).toCssColorString(),e.lineWidth=.846,e.beginPath(),e.moveTo(6.72,.422),e.lineTo(17.28,.422),e.bezierCurveTo(18.553,.422,19.577,1.758,19.577,3.415),e.lineTo(19.577,10.973),e.bezierCurveTo(19.577,12.63,18.553,13.966,17.282,13.966),e.lineTo(14.386,14.008),e.lineTo(11.826,23.578),e.lineTo(9.614,14.008),e.lineTo(6.719,13.965),e.bezierCurveTo(5.446,13.983,4.422,12.629,4.422,10.972),e.lineTo(4.422,3.416),e.bezierCurveTo(4.423,1.76,5.447,.423,6.718,.423),e.closePath(),e.fill(),e.stroke(),e.restore()}function Zfe(e,t,n){let i=n/2.5,o=i,r=i;t.width>t.height?r=i*(t.height/t.width):t.widthMath.PI&&(e-=L.TWO_PI),e}}});var R1=new fe,MHe=new h;us.prototype.getLatitude=function(e){l(e)||(e=ie.default),R1.latitude=this.conformalLatitude,R1.longitude=this.longitude,R1.height=0;let t=this.ellipsoid.cartographicToCartesian(R1,MHe);return e.cartesianToCartographic(t,R1),R1.latitude};var kHe=new fn,UHe=new h,DHe=new h;us.fromCartesian=function(e,t){let n=L.signNotZero(e.z),i=us.NORTH_POLE_TANGENT_PLANE,o=us.SOUTH_POLE;n<0&&(i=us.SOUTH_POLE_TANGENT_PLANE,o=us.NORTH_POLE);let r=kHe;r.origin=i.ellipsoid.scaleToGeocentricSurface(e,r.origin),r.direction=h.subtract(r.origin,o,UHe),h.normalize(r.direction,r.direction);let s=di.rayPlane(r,i.plane,DHe),a=h.subtract(s,o,s),c=h.dot(i.xAxis,a),d=n*h.dot(i.yAxis,a);return l(t)?(t.position=new M(c,d),t.tangentPlane=i,t):new us(new M(c,d),i)};us.fromCartesianArray=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i=0?s:s+L.TWO_PI;o.westOverIdl=Math.min(o.westOverIdl,a),o.eastOverIdl=Math.max(o.eastOverIdl,a),r.west=Math.min(r.west,s),r.east=Math.max(r.east,s);let c=e.getLatitude(n),d=c;if(r.south=Math.min(r.south,c),r.north=Math.max(r.north,c),i!==ln.RHUMB){let p=M.subtract(t.position,e.position,aKe),b=M.dot(t.position,p)/M.dot(p,p);if(b>0&&b<1){let f=M.add(t.position,M.multiplyByScalar(p,-b,p),cKe),y=jc.clone(t,lKe);y.position=f;let _=y.getLatitude(n);r.south=Math.min(r.south,_),r.north=Math.max(r.north,_),Math.abs(c)>Math.abs(_)&&(d=_)}}let u=t.x*e.y-e.x*t.y,m=Math.sign(u);m!==0&&(m*=M.angleBetween(t.position,e.position)),d>=0&&(o.northAngle+=m),d<=0&&(o.southAngle+=m)}var Lfe=new jc,dKe=new jc,Em={northAngle:0,southAngle:0,westOverIdl:0,eastOverIdl:0};Lm.computeRectangleFromPositions=function(e,t,n,i){if(l(i)||(i=new re),e.length<3)return i;i.west=Number.POSITIVE_INFINITY,i.east=Number.NEGATIVE_INFINITY,i.south=Number.POSITIVE_INFINITY,i.north=Number.NEGATIVE_INFINITY,Em.northAngle=0,Em.southAngle=0,Em.westOverIdl=Number.POSITIVE_INFINITY,Em.eastOverIdl=Number.NEGATIVE_INFINITY;let o=e.length,r=jc.fromCartesian(e[0],dKe);for(let s=1;sEm.eastOverIdl-Em.westOverIdl&&(i.west=Em.westOverIdl,i.east=Em.eastOverIdl,i.east>L.PI&&(i.east=i.east-L.TWO_PI),i.west>L.PI&&(i.west=i.west-L.TWO_PI)),L.equalsEpsilon(Math.abs(Em.northAngle),L.TWO_PI,L.EPSILON10)&&(i.north=L.PI_OVER_TWO,i.east=L.PI,i.west=-L.PI),L.equalsEpsilon(Math.abs(Em.southAngle),L.TWO_PI,L.EPSILON10)&&(i.south=-L.PI_OVER_TWO,i.east=L.PI,i.west=-L.PI),i};var uKe=new jc;function mKe(e,t,n){return e.height>=L.PI||e.width>=L.PI?jc.fromCartesian(t[0],uKe).tangentPlane:Gs.fromPoints(t,n)}var Wfe=new fe;function hKe(e,t,n){return(i,o)=>{if(e.height>=L.PI||e.width>=L.PI){if(e.south<0&&e.north>0){l(o)||(o=[]);for(let s=0;s=L.PI||e.width>=L.PI)return(o,r)=>{if(e.south<0&&e.north>0){let s=n.cartesianToCartographic(o,Wfe);return l(r)||(r=new M),r.x=s.longitude/L.PI,r.y=s.latitude/L.PI_OVER_TWO,r}return jc.fromCartesian(o,r)};let i=Gs.fromPoints(t,n);return(o,r)=>i.projectPointsOntoPlane(o,r)}function pKe(e,t,n,i){return(o,r)=>!i&&(e.height>=L.PI_OVER_TWO||e.width>=2*L.PI_OVER_THREE)?qn.splitPolygonsOnEquator(o,t,n,r):o}function bKe(e,t,n,i){if(t.height>=L.PI||t.width>=L.PI)return $e.fromRectangle(t,void 0,Rfe);let o=e,r=Gs.fromPoints(o,n);return qn.computeBoundingRectangle(r.plane.normal,r.projectPointOntoPlane.bind(r),o,i,Rfe)}Lm.createGeometry=function(e){let t=e._vertexFormat,n=e._ellipsoid,i=e._granularity,o=e._stRotation,r=e._polygonHierarchy,s=e._perPositionHeight,a=e._closeTop,c=e._closeBottom,d=e._arcType,u=e._textureCoordinates,m=l(u),p=r.positions;if(p.length<3)return;let b=e.rectangle,f=qn.polygonsFromHierarchy(r,m,hKe(b,p,n),!s,n,pKe(b,n,d,s)),y=f.hierarchy,_=f.polygons,S=function(W){return W},Z=m?qn.polygonsFromHierarchy(u,!0,S,!1,n).polygons:void 0;if(y.length===0)return;let V=y[0].outerRing,C=bKe(V,b,n,o),G=[],E=e._height,v=e._extrudedHeight,F=e._perPositionHeightExtrude||!L.equalsEpsilon(E,v,0,L.EPSILON2),P={perPositionHeight:s,vertexFormat:t,geometry:void 0,rotationAxis:mKe(b,V,n).plane.normal,projectTo2d:fKe(b,V,n),boundingRectangle:C,ellipsoid:n,stRotation:o,textureCoordinates:void 0,bottom:!1,top:!0,wall:!1,extrude:!1,arcType:d},N;if(F)for(P.extrude=!0,P.top=a,P.bottom=c,P.shadowVolume=e._shadowVolume,P.offsetAttribute=e._offsetAttribute,N=0;N<_.length;N++){let W=iKe(n,_[N],m?Z[N]:void 0,i,y[N],s,a,c,t,d),X;a&&c?(X=W.topAndBottom,P.geometry=qn.scaleToGeodeticHeightExtruded(X.geometry,E,v,n,s)):a?(X=W.topAndBottom,X.geometry.attributes.position.values=ui.scaleToGeodeticHeight(X.geometry.attributes.position.values,E,n,!s),P.geometry=X.geometry):c&&(X=W.topAndBottom,X.geometry.attributes.position.values=ui.scaleToGeodeticHeight(X.geometry.attributes.position.values,v,n,!0),P.geometry=X.geometry),(a||c)&&(P.wall=!1,X.geometry=l8(P),G.push(X));let Y=W.walls;P.wall=!0;for(let D=0;D0?new Array(o):void 0;for(i=0;i0){let X=0,Y=m[0];i=i.filter(function(D,k){let O;return o?O=k===Y||k===0&&Y===1:O=k+1===Y,O?(X++,Y=m[X],!1):!0})}let b=p.length;if(b<2||t<=0)return;if(r===ln.GEODESIC||r===ln.RHUMB){let X,Y;r===ln.GEODESIC?(X=L.chordLength(s,a.maximumRadius),Y=eo.numberOfPoints):(X=s,Y=eo.numberOfPointsRhumbLine);let D=eo.extractHeights(p,a);if(l(i)){let k=1;for(c=0;cn;){if(i-n>600){let c=i-n+1,d=t-n+1,u=Math.log(c),m=.5*Math.exp(2*u/3),p=.5*Math.sqrt(u*m*(c-m)/c)*(d-c/2<0?-1:1),b=Math.max(n,Math.floor(t-d*m/c+p)),f=Math.min(i,Math.floor(t+(c-d)*m/c+p));sO(e,t,b,f,o)}let r=e[t],s=n,a=i;for(sL(e,n,t),o(e[i],r)>0&&sL(e,n,i);s0;)a--}o(e[n],r)===0?sL(e,n,a):(a++,sL(e,a,i)),a<=t&&(n=a+1),t<=a&&(i=a-1)}}function sL(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}function AKe(e,t){return et?1:0}var lL=class{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(this._maxEntries*.4)),this.clear()}all(){return this._all(this.data,[])}search(t){let n=this.data,i=[];if(!cO(t,n))return i;let o=this.toBBox,r=[];for(;n;){for(let s=0;s=0&&r[n].children.length>this._maxEntries;)this._split(r,n),n--;this._adjustParentBBoxes(o,r,n)}_split(t,n){let i=t[n],o=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,o);let s=this._chooseSplitIndex(i,r,o),a=L1(i.children.splice(s,i.children.length-s));a.height=i.height,a.leaf=i.leaf,E1(i,this.toBBox),E1(a,this.toBBox),n?t[n-1].children.push(a):this._splitRoot(i,a)}_splitRoot(t,n){this.data=L1([t,n]),this.data.height=t.height+1,this.data.leaf=!1,E1(this.data,this.toBBox)}_chooseSplitIndex(t,n,i){let o,r=1/0,s=1/0;for(let a=n;a<=i-n;a++){let c=aL(t,0,a,this.toBBox),d=aL(t,a,i,this.toBBox),u=FKe(c,d),m=u8(c)+u8(d);u=n;d--){let u=t.children[d];cL(a,t.leaf?r(u):u),c+=aO(a)}return c}_adjustParentBBoxes(t,n,i){for(let o=i;o>=0;o--)cL(n[o],t)}_condense(t){for(let n=t.length-1,i;n>=0;n--)t[n].children.length===0?n>0?(i=t[n-1].children,i.splice(i.indexOf(t[n]),1)):this.clear():E1(t[n],this.toBBox)}};function EKe(e,t,n){if(!n)return t.indexOf(e);for(let i=0;i=e.minX&&t.maxY>=e.minY}function L1(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function Ofe(e,t,n,i,o){let r=[t,n];for(;r.length;){if(n=r.pop(),t=r.pop(),n-t<=i)continue;let s=t+Math.ceil((n-t)/i/2)*i;sO(e,s,t,n,o),r.push(t,s,s,n)}}function lO(){this._tree=new lL}function m_(){this.minX=0,this.minY=0,this.maxX=0,this.maxY=0,this.id=""}m_.fromRectangleAndId=function(e,t,n){return n.minX=t.west,n.minY=t.south,n.maxX=t.east,n.maxY=t.north,n.id=e,n};lO.prototype.insert=function(e,t){let n=m_.fromRectangleAndId(e,t,new m_);this._tree.insert(n)};function IKe(e,t){return e.id===t.id}var PKe=new m_;lO.prototype.remove=function(e,t){let n=m_.fromRectangleAndId(e,t,PKe);this._tree.remove(n,IKe)};var XKe=new m_;lO.prototype.collides=function(e){let t=m_.fromRectangleAndId("",e,XKe);return this._tree.collides(t)};var h_=lO;var mZn=x(T(),1);var MSn=x(T(),1);var Bfe=Math.cos,zfe=Math.sin,NKe=Math.sqrt,h8={};h8.computePosition=function(e,t,n,i,o,r,s){let a=t.radiiSquared,c=e.nwCorner,d=e.boundingRectangle,u=c.latitude-e.granYCos*i+o*e.granXSin,m=Bfe(u),p=zfe(u),b=a.z*p,f=c.longitude+i*e.granYSin+o*e.granXCos,y=m*Bfe(f),_=m*zfe(f),S=a.x*y,Z=a.y*_,V=NKe(S*y+Z*_+b*p);if(r.x=S/V,r.y=Z/V,r.z=b/V,n){let C=e.stNwCorner;l(C)?(u=C.latitude-e.stGranYCos*i+o*e.stGranXSin,f=C.longitude+i*e.stGranYSin+o*e.stGranXCos,s.x=(f-e.stWest)*e.lonScalar,s.y=(u-e.stSouth)*e.latScalar):(s.x=(f-d.west)*e.lonScalar,s.y=(u-d.south)*e.latScalar)}};var YKe=new ji,Wm=new h,wKe=new fe,dO=new h,dL=new wi;function Hfe(e,t,n,i,o,r,s){let a=Math.cos(t),c=i*a,d=n*a,u=Math.sin(t),m=i*u,p=n*u;dL._ellipsoid=ie.default,Wm=dL.project(e,Wm),Wm=h.subtract(Wm,dO,Wm);let b=ji.fromRotation(t,YKe);Wm=ji.multiplyByVector(b,Wm,Wm),Wm=h.add(Wm,dO,Wm),e=dL.unproject(Wm,e),r-=1,s-=1;let f=e.latitude,y=f+r*p,_=f-c*s,S=f-c*s+r*p,Z=Math.max(f,y,_,S),V=Math.min(f,y,_,S),C=e.longitude,G=C+r*d,E=C+s*m,v=C+s*m+r*d,F=Math.max(C,G,E,v),P=Math.min(C,G,E,v);return{north:Z,south:V,east:F,west:P,granYCos:c,granYSin:m,granXCos:d,granXSin:p,nwCorner:e}}h8.computeOptions=function(e,t,n,i,o,r,s){let a=e.east,c=e.west,d=e.north,u=e.south,m=!1,p=!1;d===L.PI_OVER_TWO&&(m=!0),u===-L.PI_OVER_TWO&&(p=!0);let b,f=d-u;c>a?b=L.TWO_PI-c+a:b=a-c;let y=Math.ceil(b/t)+1,_=Math.ceil(f/t)+1,S=b/(y-1),Z=f/(_-1),V=re.northwest(e,r),C=re.center(e,wKe);(n!==0||i!==0)&&(C.longitude1||G>1))for(let R=0;R0;u-=d)Te=u*3,z=W1(z,ee,Te,p,_),ee+=6,o.st&&(K=v1(K,de,u*2,G),de+=4),n&&(_e+=3,H[_e++]=E[Te],H[_e++]=E[Te+1],H[_e++]=E[Te+2]),$&&(te[ue++]=1,ue+=1);if(A){let Ee=Ce;for(Te=Ee*3,u=0;u<2;u++)z=W1(z,ee,Te,p,_),ee+=6,o.st&&(K=v1(K,de,Ee*2,G),de+=4),n&&(_e+=3,H[_e++]=E[Te],H[_e++]=E[Te+1],H[_e++]=E[Te+2]),$&&(te[ue++]=1,ue+=1)}else for(u=d-1;u>=0;u--)Te=u*3,z=W1(z,ee,Te,p,_),ee+=6,o.st&&(K=v1(K,de,u*2,G),de+=4),n&&(_e+=3,H[_e++]=E[Te],H[_e++]=E[Te+1],H[_e++]=E[Te+2]),$&&(te[ue++]=1,ue+=1);let Re=OKe(z,o,a);o.st&&(Re.attributes.st=new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:K})),n&&(Re.attributes.extrudeDirection=new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:H})),F&&(Re.attributes.applyOffset=new Pe({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:te}));let Le=De.createTypedArray(w,D*6),Xe,qe,je,_t;b=z.length/3;let Qe=0;for(u=0;u=0;f--)ma.computePosition(t,n,!1,b,f,y),m[p++]=y.x,m[p++]=y.y,m[p++]=y.z;for(f=0,b=i-2;b>0;b--)ma.computePosition(t,n,!1,b,f,y),m[p++]=y.x,m[p++]=y.y,m[p++]=y.z;let _=m.length/3*2,S=De.createTypedArray(m.length/3,_),Z=0;for(let C=0;C>>0,y8=2*b_+1,wy=4,mpe=[],hpe=[],cJe=[[0,1,3,2],[0,2,3,1],[3,2,0,1],[3,1,0,2]],My=1,P1=2,uO=[My,0,0,My|P1];function Ls(e){if(!hn.supportsBigInt())throw new ae("S2 required BigInt support");this._cellId=e,this._level=Ls.getLevel(e)}Ls.fromToken=function(e){return new Ls(Ls.getIdFromToken(e))};Ls.isValidId=function(e){return!(e<=0||e>>BigInt(y8)>5||!(e&~e+BigInt(1)&BigInt("0x1555555555555555")))};Ls.isValidToken=function(e){return/^[0-9a-fA-F]{1,16}$/.test(e)?Ls.isValidId(Ls.getIdFromToken(e)):!1};Ls.getIdFromToken=function(e){return BigInt("0x"+e+"0".repeat(16-e.length))};Ls.getTokenFromId=function(e){let t=Math.floor(yJe(e)/4),n=e.toString(16).replace(/0*$/,"");return Array(17-t-n.length).join("0")+n};Ls.getLevel=function(e){let t=0;for(;e!==BigInt(0)&&!(e&BigInt(1));)t++,e=e>>BigInt(1);return b_-(t>>1)};Ls.prototype.getChild=function(e){let t=bpe(this._cellId)>>BigInt(2),n=this._cellId+BigInt(2*e+1-4)*t;return new Ls(n)};Ls.prototype.getParent=function(){let e=bpe(this._cellId)<>1&1;return ppe(i[0],o[0][r^n&1],o[1][r])}function uJe(e,t){let n=fpe(e),i=n[0],o=n[1],r=n[2],s=t===30,a=!s&&(BigInt(o)^e>>BigInt(2))&BigInt(1),c=s?1:a?2:0,d=(o<<1)+c,u=(r<<1)+c;return[i,d,u]}function fpe(e){mpe.length===0&&pJe();let t=Number(e>>BigInt(y8)),n=t&My,i=(1<=0;s--){let c=(1<<2*(s===7?b_-7*wy:wy))-1;n+=Number(e>>BigInt(s*2*wy+1)&BigInt(c))<<2,n=hpe[n];let d=s*wy;o+=n>>wy+2<>2&i)<=.5?1/3*(4*e*e-1):1/3*(1-4*(1-e)*(1-e))}function dpe(e){return 1/aJe*e}function hJe(e,t){let n=[[],[]],i=fJe(t);for(let o=0;o<2;++o){let r=e[o]&-i,s=r+i;n[o][0]=mO(upe(r)),n[o][1]=mO(upe(s))}return n}function fJe(e){return 1<>>0}function upe(e){return 1/sJe*e}function ky(e,t,n,i,o,r){if(e===wy){let s=(t<>1),n+(s[0]&1),i,o,r^uO[0]),ky(e,t+(s[1]>>1),n+(s[1]&1),i,o+1,r^uO[1]),ky(e,t+(s[2]>>1),n+(s[2]&1),i,o+2,r^uO[2]),ky(e,t+(s[3]>>1),n+(s[3]&1),i,o+3,r^uO[3])}}function pJe(){ky(0,0,0,0,0,0),ky(0,0,0,My,0,My),ky(0,0,0,P1,0,P1),ky(0,0,0,My|P1,0,My|P1)}function bpe(e){return e&~e+BigInt(1)}function bJe(e){return BigInt(1)<kh.mouseEmulationIgnoreMilliseconds}function Z8(e,t,n){let i=e.x-t.x,o=e.y-t.y;return Math.sqrt(i*i+o*o)0?n=t.detail*-120:n=t.wheelDelta;if(!l(n))return;let i=g_(t),o=e.getInputAction(dn.WHEEL,i);l(o)&&(o(n),t.preventDefault())}function ZJe(e,t){C8(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;iIJe;++r){o=i;let s=o-t*Math.sin(o)-e,a=1-t*Math.cos(o);i=o-s/a}return o=i+n*L.TWO_PI,o}function XJe(e,t){let n=Math.floor(e/L.TWO_PI);e-=n*L.TWO_PI;let i=Math.cos(e)-t,o=Math.sin(e)*Math.sqrt(1-t*t),r=Math.atan2(o,i);return r=L.zeroToTwoPi(r),e<0&&(r-=L.TWO_PI),r+=n*L.TWO_PI,r}function NJe(e,t,n,i){let o=Math.cos(e),r=Math.sin(e),s=Math.cos(t),a=Math.sin(t),c=Math.cos(n),d=Math.sin(n);return l(i)?(i[0]=c*o-d*r*s,i[1]=d*o+c*r*s,i[2]=r*a,i[3]=-c*r-d*o*s,i[4]=-d*r+c*o*s,i[5]=o*a,i[6]=d*a,i[7]=-c*a,i[8]=s):i=new q(c*o-d*r*s,-c*r-d*o*s,d*a,d*o+c*r*s,-d*r+c*o*s,-c*a,r*a,o*a,s),i}var YJe=1.0000010178*Lc,wJe=100.46645683*vm,MJe=129597742283429e-5*fu,Fpe=16002,Ipe=21863,Ppe=32004,Xpe=10931,Npe=14529,Ype=16368,wpe=15318,Mpe=32794,kJe=64*1e-7*Lc,UJe=-152*1e-7*Lc,DJe=62*1e-7*Lc,OJe=-8*1e-7*Lc,BJe=32*1e-7*Lc,zJe=-41*1e-7*Lc,HJe=19*1e-7*Lc,KJe=-11*1e-7*Lc,JJe=-150*1e-7*Lc,jJe=-46*1e-7*Lc,QJe=68*1e-7*Lc,qJe=54*1e-7*Lc,$Je=14*1e-7*Lc,eje=24*1e-7*Lc,tje=-28*1e-7*Lc,nje=22*1e-7*Lc,kpe=10,Upe=16002,Dpe=21863,Ope=10931,Bpe=1473,zpe=32004,Hpe=4387,Kpe=73,ije=-325*1e-7,oje=-322*1e-7,rje=-79*1e-7,sje=232*1e-7,aje=-52*1e-7,cje=97*1e-7,lje=55*1e-7,dje=-41*1e-7,uje=-105*1e-7,mje=-137*1e-7,hje=258*1e-7,fje=35*1e-7,pje=-116*1e-7,bje=-88*1e-7,gje=-112*1e-7,yje=-80*1e-7,X1=new Q(0,0,si.TAI);function xje(e,t){jpe(e,X1);let i=(X1.dayNumber-pO.dayNumber+(X1.secondsOfDay-pO.secondsOfDay)/kn.SECONDS_PER_DAY)/(kn.DAYS_PER_JULIAN_CENTURY*10),o=.3595362*i,r=YJe+kJe*Math.cos(Fpe*o)+JJe*Math.sin(Fpe*o)+UJe*Math.cos(Ipe*o)+jJe*Math.sin(Ipe*o)+DJe*Math.cos(Ppe*o)+QJe*Math.sin(Ppe*o)+OJe*Math.cos(Xpe*o)+qJe*Math.sin(Xpe*o)+BJe*Math.cos(Npe*o)+$Je*Math.sin(Npe*o)+zJe*Math.cos(Ype*o)+eje*Math.sin(Ype*o)+HJe*Math.cos(wpe*o)+tje*Math.sin(wpe*o)+KJe*Math.cos(Mpe*o)+nje*Math.sin(Mpe*o),s=wJe+MJe*i+ije*Math.cos(kpe*o)+uje*Math.sin(kpe*o)+oje*Math.cos(Upe*o)+mje*Math.sin(Upe*o)+rje*Math.cos(Dpe*o)+hje*Math.sin(Dpe*o)+sje*Math.cos(Ope*o)+fje*Math.sin(Ope*o)+aje*Math.cos(Bpe*o)+pje*Math.sin(Bpe*o)+cje*Math.cos(zpe*o)+bje*Math.sin(zpe*o)+lje*Math.cos(Hpe*o)+gje*Math.sin(Hpe*o)+dje*Math.cos(Kpe*o)+yje*Math.sin(Kpe*o),a=.0167086342-.0004203654*i,c=102.93734808*vm+11612.3529*fu*i,d=469.97289*fu*i,u=174.87317577*vm-8679.27034*fu*i;return Qpe(r,a,d,c,u,s,t)}function qpe(e,t){jpe(e,X1);let i=(X1.dayNumber-pO.dayNumber+(X1.secondsOfDay-pO.secondsOfDay)/kn.SECONDS_PER_DAY)/kn.DAYS_PER_JULIAN_CENTURY,o=i*i,r=o*i,s=r*i,a=383397.7725+.004*i,c=.055545526-16e-9*i,d=5.15668983*vm,u=-8e-5*i+.02966*o-42e-6*r-13e-8*s,m=83.35324312*vm,p=146434202669e-4*i-38.2702*o-.045047*r+21301e-8*s,b=125.04455501*vm,f=-69679193631e-4*i+6.3602*o+.007625*r-3586e-8*s,y=218.31664563*vm,_=17325593434847e-4*i-6.391*o+.006588*r-3169e-8*s,S=297.85019547*vm+fu*(1602961601209e-3*i-6.3706*o+.006593*r-3169e-8*s),Z=93.27209062*vm+fu*(17395272628478e-4*i-12.7512*o-.001037*r+417e-8*s),V=134.96340251*vm+fu*(17179159232178e-4*i+31.8792*o+.051635*r-2447e-7*s),C=357.52910918*vm+fu*(1295965810481e-4*i-.5532*o+136e-6*r-1149e-8*s),G=310.17137918*vm-fu*(6967051436e-3*i+6.2068*o+.007618*r-3219e-8*s),E=2*S,v=4*S,F=6*S,P=2*V,N=3*V,g=4*V,R=2*Z;a+=3400.4*Math.cos(E)-635.6*Math.cos(E-V)-235.6*Math.cos(V)+218.1*Math.cos(E-C)+181*Math.cos(E+V),c+=.014216*Math.cos(E-V)+.008551*Math.cos(E-P)-.001383*Math.cos(V)+.001356*Math.cos(E+V)-.001147*Math.cos(v-N)-914e-6*Math.cos(v-P)+869e-6*Math.cos(E-C-V)-627e-6*Math.cos(E)-394e-6*Math.cos(v-g)+282e-6*Math.cos(E-C-P)-279e-6*Math.cos(S-V)-236e-6*Math.cos(P)+231e-6*Math.cos(v)+229e-6*Math.cos(F-g)-201e-6*Math.cos(P-R),u+=486.26*Math.cos(E-R)-40.13*Math.cos(E)+37.51*Math.cos(R)+25.73*Math.cos(P-R)+19.97*Math.cos(E-C-R),p+=-55609*Math.sin(E-V)-34711*Math.sin(E-P)-9792*Math.sin(V)+9385*Math.sin(v-N)+7505*Math.sin(v-P)+5318*Math.sin(E+V)+3484*Math.sin(v-g)-3417*Math.sin(E-C-V)-2530*Math.sin(F-g)-2376*Math.sin(E)-2075*Math.sin(E-N)-1883*Math.sin(P)-1736*Math.sin(F-5*V)+1626*Math.sin(C)-1370*Math.sin(F-N),f+=-5392*Math.sin(E-R)-540*Math.sin(C)-441*Math.sin(E)+423*Math.sin(R)-288*Math.sin(P-R),_+=-3332.9*Math.sin(E)+1197.4*Math.sin(E-V)-662.5*Math.sin(C)+396.3*Math.sin(V)-218*Math.sin(E-C);let A=2*G,W=3*G;u+=46.997*Math.cos(G)*i-.614*Math.cos(E-R+G)*i+.614*Math.cos(E-R-G)*i-.0297*Math.cos(A)*o-.0335*Math.cos(G)*o+.0012*Math.cos(E-R+A)*o-16e-5*Math.cos(G)*r+4e-5*Math.cos(W)*r+4e-5*Math.cos(A)*r;let X=2.116*Math.sin(G)*i-.111*Math.sin(E-R-G)*i-.0015*Math.sin(G)*o;p+=X,_+=X,f+=-520.77*Math.sin(G)*i+13.66*Math.sin(E-R+G)*i+1.12*Math.sin(E-G)*i-1.06*Math.sin(R-G)*i+.66*Math.sin(A)*o+.371*Math.sin(G)*o-.035*Math.sin(E-R+A)*o-.015*Math.sin(E-R+G)*o+.0014*Math.sin(G)*r-.0011*Math.sin(W)*r-9e-4*Math.sin(A)*r,a*=LJe;let Y=d+u*fu,D=m+p*fu,k=y+_*fu,O=b+f*fu;return Qpe(a,c,Y,D,O,k,t)}var Jpe=.012300034,Tje=Jpe/(Jpe+1)*-1;function _je(e,t){return t=qpe(e,t),h.multiplyByScalar(t,Tje,t)}var $pe=new q(1.0000000000000002,5619723173785822e-31,4690511510146299e-34,-5154129427414611e-31,.9174820620691819,-.39777715593191376,-223970096136568e-30,.39777715593191376,.9174820620691819),mL=new h;G8.computeSunPositionInEarthInertialFrame=function(e,t){return l(e)||(e=Q.now()),l(t)||(t=new h),mL=xje(e,mL),t=h.negate(mL,t),_je(e,mL),h.subtract(t,mL,t),q.multiplyByVector($pe,t,t),t};G8.computeMoonPositionInEarthInertialFrame=function(e,t){return l(e)||(e=Q.now()),t=qpe(e,t),q.multiplyByVector($pe,t,t),t};var Dy=G8;var AVn=x(T(),1);function Sje(e,t,n,i,o,r,s){let a=eo.numberOfPoints(e,t,o),c,d=n.red,u=n.green,m=n.blue,p=n.alpha,b=i.red,f=i.green,y=i.blue,_=i.alpha;if(U.equals(n,i)){for(c=0;c0?new Array(o):void 0;for(i=0;i0&&(h.pack(E,m,C),C+=3,f=n[d-1],b[G++]=U.floatToByte(f.red),b[G++]=U.floatToByte(f.green),b[G++]=U.floatToByte(f.blue),b[G++]=U.floatToByte(f.alpha)),c&&d===u-1)break;h.pack(E,m,C),C+=3,l(n)&&(f=n[d],b[G++]=U.floatToByte(f.red),b[G++]=U.floatToByte(f.green),b[G++]=U.floatToByte(f.blue),b[G++]=U.floatToByte(f.alpha))}}let _=new Sn;_.position=new Pe({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:m}),l(n)&&(_.color=new Pe({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:4,values:b,normalize:!0})),p=m.length/3;let S=(p-1)*2,Z=De.createTypedArray(p,S),V=0;for(d=0;da){e.childNode1=new gL({x:i.x,y:i.y,width:t,height:r});let u=s-c;return u>0&&(e.childNode2=new gL({x:i.x+t+c,y:i.y,width:u,height:r})),this._findNode(e.childNode1,{width:t,height:n})}e.childNode1=new gL({x:i.x,y:i.y,width:o,height:n});let d=a-c;return d>0&&(e.childNode2=new gL({x:i.x,y:i.y+n+c,width:o,height:d})),this._findNode(e.childNode1,{width:t,height:n})}return this._findNode(e.childNode1,{width:t,height:n})||this._findNode(e.childNode2,{width:t,height:n})}};var M1=E8;var $Vn=x(T(),1),Rje={WEST:0,NORTH:1,EAST:2,SOUTH:3,NORTHWEST:4,NORTHEAST:5,SOUTHWEST:6,SOUTHEAST:7},Ln=Rje;var n1n=x(T(),1);var L8=class{constructor(t){ct(this,"ellipsoid");ct(this,"rectangle");ct(this,"projection")}getNumberOfXTilesAtLevel(t){ge.throwInstantiationError()}getNumberOfYTilesAtLevel(t){ge.throwInstantiationError()}rectangleToNativeRectangle(t,n){ge.throwInstantiationError()}tileXYToNativeRectangle(t,n,i,o){ge.throwInstantiationError()}tileXYToRectangle(t,n,i,o){ge.throwInstantiationError()}positionToTileXY(t,n,i){ge.throwInstantiationError()}},W8=L8;var f1n=x(T(),1);function I8(e,t){return Q.compare(e.start,t.start)}function hs(e){if(this._intervals=[],this._changedEvent=new Se,l(e)){let t=e.length;for(let n=0;n0&&(this._intervals.length=0,this._changedEvent.raiseEvent(this))};hs.prototype.findIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t]:void 0};hs.prototype.findDataForIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t].data:void 0};hs.prototype.contains=function(e){return this.indexOf(e)>=0};var v8=new Vn;hs.prototype.indexOf=function(e){let t=this._intervals;v8.start=e,v8.stop=e;let n=_o(t,v8,I8);return n>=0?t[n].isStartIncluded?n:n>0&&t[n-1].stop.equals(e)&&t[n-1].isStopIncluded?n-1:~n:(n=~n,n>0&&n-10&&e.isStartIncluded&&n[i-1].isStartIncluded&&n[i-1].start.equals(e.start)?--i:i0&&(o=Q.compare(n[i-1].stop,e.start),(o>0||o===0&&(n[i-1].isStopIncluded||e.isStartIncluded))&&((l(t)?t(n[i-1].data,e.data):n[i-1].data===e.data)?(Q.greaterThan(e.stop,n[i-1].stop)?e=new Vn({start:n[i-1].start,stop:e.stop,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:e.isStopIncluded,data:e.data}):e=new Vn({start:n[i-1].start,stop:n[i-1].stop,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:n[i-1].isStopIncluded||e.stop.equals(n[i-1].stop)&&e.isStopIncluded,data:e.data}),n.splice(i-1,1),--i):(o=Q.compare(n[i-1].stop,e.stop),(o>0||o===0&&n[i-1].isStopIncluded&&!e.isStopIncluded)&&n.splice(i,0,new Vn({start:e.stop,stop:n[i-1].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:n[i-1].isStopIncluded,data:n[i-1].data})),n[i-1]=new Vn({start:n[i-1].start,stop:e.start,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:n[i-1].data}))));i0||o===0&&(e.isStopIncluded||n[i].isStartIncluded));)if(l(t)?t(n[i].data,e.data):n[i].data===e.data)e=new Vn({start:e.start,stop:Q.greaterThan(n[i].stop,e.stop)?n[i].stop:e.stop,isStartIncluded:e.isStartIncluded,isStopIncluded:Q.greaterThan(n[i].stop,e.stop)?n[i].isStopIncluded:e.isStopIncluded,data:e.data}),n.splice(i,1);else if(n[i]=new Vn({start:e.stop,stop:n[i].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:n[i].isStopIncluded,data:n[i].data}),n[i].isEmpty)n.splice(i,1);else break;n.splice(i,0,e),this._changedEvent.raiseEvent(this)};hs.prototype.removeInterval=function(e){if(e.isEmpty)return!1;let t=this._intervals,n=_o(t,e,I8);n<0&&(n=~n);let i=!1;for(n>0&&(Q.greaterThan(t[n-1].stop,e.start)||t[n-1].stop.equals(e.start)&&t[n-1].isStopIncluded&&e.isStartIncluded)&&(i=!0,(Q.greaterThan(t[n-1].stop,e.stop)||t[n-1].isStopIncluded&&!e.isStopIncluded&&t[n-1].stop.equals(e.stop))&&t.splice(n,0,new Vn({start:e.stop,stop:t[n-1].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:t[n-1].isStopIncluded,data:t[n-1].data})),t[n-1]=new Vn({start:t[n-1].start,stop:e.start,isStartIncluded:t[n-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:t[n-1].data})),n=1e3&&(o+=Math.floor(i/1e3),i=i%1e3),o>=60&&(r+=Math.floor(o/60),o=o%60),r>=60&&(s+=Math.floor(r/60),r=r%60),s>=24&&(a+=Math.floor(s/24),s=s%24),yL[2]=yh(d)?29:28;a>yL[c]||c>=13;)a>yL[c]&&(a-=yL[c],++c),c>=13&&(--c,d+=Math.floor(c/12),c=c%12,++c),yL[2]=yh(d)?29:28;return qc.millisecond=i,qc.second=o,qc.minute=r,qc.hour=s,qc.day=a,qc.month=c,qc.year=d,Q.fromGregorianDate(qc,n)}var Gje=new Q,Aje=/P(?:([\d.,]+)Y)?(?:([\d.,]+)M)?(?:([\d.,]+)W)?(?:([\d.,]+)D)?(?:T(?:([\d.,]+)H)?(?:([\d.,]+)M)?(?:([\d.,]+)S)?)?/;function e0e(e,t){if(!l(e)||e.length===0)return!1;if(t.year=0,t.month=0,t.day=0,t.hour=0,t.minute=0,t.second=0,t.millisecond=0,e[0]==="P"){let n=e.match(Aje);if(!l(n))return!1;if(l(n[1])&&(t.year=Number(n[1].replace(",","."))),l(n[2])&&(t.month=Number(n[2].replace(",","."))),l(n[3])&&(t.day=Number(n[3].replace(",","."))*7),l(n[4])&&(t.day+=Number(n[4].replace(",","."))),l(n[5])&&(t.hour=Number(n[5].replace(",","."))),l(n[6])&&(t.minute=Number(n[6].replace(",","."))),l(n[7])){let i=Number(n[7].replace(",","."));t.second=Math.floor(i),t.millisecond=i%1*1e3}}else e[e.length-1]!=="Z"&&(e+="Z"),Q.toGregorianDate(Q.fromIso8601(e,Gje),t);return t.year||t.month||t.day||t.hour||t.minute||t.second||t.millisecond}var xL=new E0;hs.fromIso8601=function(e,t){let n=e.iso8601.split("/"),i=Q.fromIso8601(n[0]),o=Q.fromIso8601(n[1]),r=[];if(!e0e(n[2],xL))r.push(i,o);else{let s=Q.clone(i);for(r.push(s);Q.compare(s,o)<0;)s=F8(s,xL),Q.compare(o,s)<=0&&Q.clone(o,s),r.push(s)}return hs.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};hs.fromIso8601DateArray=function(e,t){return hs.fromJulianDateArray({julianDates:e.iso8601Dates.map(function(n){return Q.fromIso8601(n)}),isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};hs.fromIso8601DurationArray=function(e,t){let n=e.epoch,i=e.iso8601Durations,o=e.relativeToPrevious??!1,r=[],s,a,c=i.length;for(let d=0;dt(this.get(u,s),this.get(m,a)));for(let u=0;uthis._dirtyOffset+this._dirtyCount&&(this._dirtyCount=t+1-this._dirtyOffset)}_makeClean(){this._dirtyCount>0&&(this._dirtyCount=0,this._dirtyOffset=0,this._version++)}_makeDirtyBoundingVolume(){this._boundingVolumeAutoUpdate&&(this._dirtyBoundingVolume=!0)}update(t){t.mode!==se.SCENE3D&>("bufferprim-scenemode","BufferPrimitiveCollection requires SceneMode.SCENE3D."),this._dirtyBoundingVolume&&this._updateBoundingVolume(),this._allowPicking&&this._dirtyCount>0&&this._updatePickIds(t.context)}get primitiveCount(){return this._primitiveCount}get primitiveCountMax(){return this._primitiveCountMax}get byteLength(){return this._primitiveView.byteLength+this._positionView.byteLength+this._materialView.byteLength}get vertexCount(){return this._positionCount}get vertexCountMax(){return this._positionCountMax}get modelMatrix(){return this._modelMatrix}get boundingVolume(){return this._dirtyBoundingVolume&&this._updateBoundingVolume(),this._boundingVolume}get positionDatatype(){return this._positionDatatype}get positionNormalized(){return this._positionNormalized}static _copySubArray(t,n,i){for(let o=0;o0?this.getHoles()[0]:this.vertexCount}getOuterPositions(n){return this._getPositionsRange(0,this.outerVertexCount,n)}get holeOffset(){return this._getUint32(Fm.Layout.HOLE_OFFSET_U32)}get holeCount(){return this._getUint32(Fm.Layout.HOLE_COUNT_U32)}getHoles(n){let{holeOffset:i,holeCount:o}=this,r=this._collection._holeIndexView;if(!l(n)){let s=r.byteOffset+i*r.BYTES_PER_ELEMENT,a=r.constructor;return new a(r.buffer,s,o)}for(let s=0;ss)return!1}return e.x=a+r*m,e.y=c+r*p,t.x=a+s*m,t.y=c+s*p,!0}function Hy(e,t){return Math.max(0,Math.min(t-1,e))}var U8=new Float64Array(512),l0e=new Float64Array(512),d0e={positions:new Float64Array(512),vertexCount:0};function Kje(e,t,n,i,o){U8.length>1,m=(d&1)===0?1:-1,p=d===0?n:d===1?i:d===2?o:r,b=c*4+4,f=(d&1)===0,y=f?l0e:s.positions;y.length=0;for(let C=0;C=0;if(v!==V){let F=u===0?(p-S)/(G-S):(p-Z)/(E-Z);y[_*2]=u===0?p:S+F*(G-S),y[_*2+1]=u===0?Z+F*(E-Z):p,_++}v&&(y[_*2]=G,y[_*2+1]=E,_++),S=G,Z=E,V=v}if(_===0)return s.vertexCount=0,s;a=y,c=_}return s.vertexCount=c,s}function _O(e){let t=L.nextPowerOfTwo(Math.max(1,Math.ceil(Math.sqrt(e)))),n=L.nextPowerOfTwo(Math.max(1,Math.ceil(e/t)));return[t,n]}function m0e(e,t){let[n,i]=_O(t.length),o=new Float32Array(n*i);return o.set(t),new Ct({context:e,pixelFormat:Be.RED,pixelDatatype:Me.FLOAT,source:{width:n,height:i,arrayBufferView:o},sampler:kt.NEAREST,flipY:!1})}function h0e(e,t,n){l(n)||(n=new Float64Array(e._positionCountMax*2));let i=e._positionView,o=e.modelMatrix;for(let r=0;r0&&(i.glVertexAttribDivisor(d,this.instanceDivisor),i._vertexAttribDivisors[d]=this.instanceDivisor,i._previousDrawInstanced=!0)},a.disableVertexAttribArray=function(c){c.disableVertexAttribArray(this.index),this.instanceDivisor>0&&i.glVertexAttribDivisor(n,0)};else{switch(a.componentsPerAttribute){case 1:a.vertexAttrib=function(c){c.vertexAttrib1fv(this.index,this.value)};break;case 2:a.vertexAttrib=function(c){c.vertexAttrib2fv(this.index,this.value)};break;case 3:a.vertexAttrib=function(c){c.vertexAttrib3fv(this.index,this.value)};break;case 4:a.vertexAttrib=function(c){c.vertexAttrib4fv(this.index,this.value)};break}a.disableVertexAttribArray=function(c){}}e.push(a)}function b0e(e,t,n){for(let i=0;i0&&(c=!0),l(s[r].value)&&(d=!0);let m;t.vertexArrayObject&&(m=t.glCreateVertexArray(),t.glBindVertexArray(m),b0e(n,s,o),t.glBindVertexArray(null)),this._numberOfVertices=a,this._hasInstancedAttributes=c,this._hasConstantAttributes=d,this._context=t,this._gl=n,this._vao=m,this._attributes=s,this._indexBuffer=o}function p0e(e){return e.values.length/e.componentsPerAttribute}function jje(e){return J.getSizeInBytes(e.componentDatatype)*e.componentsPerAttribute}function Qje(e){let t,n,i,o=[];for(n in e)e.hasOwnProperty(n)&&l(e[n])&&l(e[n].values)&&(o.push(n),e[n].componentDatatype===J.DOUBLE&&(e[n].componentDatatype=J.FLOAT,e[n].values=J.createTypedArray(J.FLOAT,e[n].values)));let r,s=o.length;if(s>0)for(r=p0e(e[o[0]]),t=1;t0){let d=J.getSizeInBytes(e[o[0]].componentDatatype),u=a%d;u!==0&&(a+=d-u);let m=r*a,p=new ArrayBuffer(m),b={};for(t=0;t=L.SIXTY_FOUR_KILOBYTES&&t.elementIndexUint?p=et.createIndexBuffer({context:t,typedArray:new Uint32Array(b),usage:i,indexDatatype:De.UNSIGNED_INT}):p=et.createIndexBuffer({context:t,typedArray:new Uint16Array(b),usage:i,indexDatatype:De.UNSIGNED_SHORT})),new Dh({context:t,attributes:u,indexBuffer:p})};Object.defineProperties(Dh.prototype,{numberOfAttributes:{get:function(){return this._attributes.length}},numberOfVertices:{get:function(){return this._numberOfVertices}},indexBuffer:{get:function(){return this._indexBuffer}}});Dh.prototype.getAttribute=function(e){return this._attributes[e]};function qje(e){let t=e._context,n=e._hasInstancedAttributes;if(!n&&!t._previousDrawInstanced)return;t._previousDrawInstanced=n;let i=t._vertexAttribDivisors,o=e._attributes,r=Xt.maximumVertexAttributes,s;if(n){let a=o.length;for(s=0;s0&&(t.glVertexAttribDivisor(s,0),i[s]=0)}function $je(e,t){let n=e._attributes,i=n.length;for(let o=0;o1/pi. * * @alias czm_oneOverPi * @glslConstant * * @see CesiumMath.ONE_OVER_PI * * @example * // GLSL declaration * const float czm_oneOverPi = ...; * * // Example * float pi = 1.0 / czm_oneOverPi; */ const float czm_oneOverPi = 0.3183098861837907; `;var sGn=x(T(),1),IL=`/** * A built-in GLSL floating-point constant for 1/2pi. * * @alias czm_oneOverTwoPi * @glslConstant * * @see CesiumMath.ONE_OVER_TWO_PI * * @example * // GLSL declaration * const float czm_oneOverTwoPi = ...; * * // Example * float pi = 2.0 * czm_oneOverTwoPi; */ const float czm_oneOverTwoPi = 0.15915494309189535; `;var cGn=x(T(),1),PL=`/** * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE} * * @name czm_passCesium3DTile * @glslConstant * * @see czm_pass */ const float czm_passCesium3DTile = 6.0; `;var dGn=x(T(),1),XL=`/** * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION} * * @name czm_passCesium3DTileClassification * @glslConstant * * @see czm_pass */ const float czm_passCesium3DTileClassification = 7.0; `;var mGn=x(T(),1),NL=`/** * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW} * * @name czm_passCesium3DTileClassificationIgnoreShow * @glslConstant * * @see czm_pass */ const float czm_passCesium3DTileClassificationIgnoreShow = 8.0; `;var fGn=x(T(),1),YL=`/** * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_EDGES} * * @name czm_passCesium3DTileEdges * @glslConstant * * @see czm_pass */ const float czm_passCesium3DTileEdges = 4.0; `;var bGn=x(T(),1),wL=`/** * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_EDGES_DIRECT} * * @name czm_passCesium3DTileEdgesDirect * @glslConstant * * @see czm_pass */ const float czm_passCesium3DTileEdgesDirect = 12.0; `;var yGn=x(T(),1),ML=`/** * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_PLANAR_FILL_ID} * * @name czm_passCesium3DTilePlanarFillId * @glslConstant * * @see czm_pass */ const float czm_passCesium3DTilePlanarFillId = 5.0; `;var TGn=x(T(),1),kL=`/** * The automatic GLSL constant for {@link Pass#CLASSIFICATION} * * @name czm_passClassification * @glslConstant * * @see czm_pass */ const float czm_passClassification = 8.0; `;var SGn=x(T(),1),UL=`/** * The automatic GLSL constant for {@link Pass#COMPUTE} * * @name czm_passCompute * @glslConstant * * @see czm_pass */ const float czm_passCompute = 1.0; `;var VGn=x(T(),1),DL=`/** * The automatic GLSL constant for {@link Pass#ENVIRONMENT} * * @name czm_passEnvironment * @glslConstant * * @see czm_pass */ const float czm_passEnvironment = 0.0; `;var RGn=x(T(),1),OL=`/** * The automatic GLSL constant for {@link Pass#GAUSSIAN_SPLATS} * * @name czm_passGaussianSplats * @glslConstant * * @see czm_pass */ const float czm_passGaussianSplats = 12.0; `;var AGn=x(T(),1),BL=`/** * The automatic GLSL constant for {@link Pass#GLOBE} * * @name czm_passGlobe * @glslConstant * * @see czm_pass */ const float czm_passGlobe = 2.0; `;var LGn=x(T(),1),zL=`/** * The automatic GLSL constant for {@link Pass#OPAQUE} * * @name czm_passOpaque * @glslConstant * * @see czm_pass */ const float czm_passOpaque = 9.0; `;var vGn=x(T(),1),HL=`/** * The automatic GLSL constant for {@link Pass#OVERLAY} * * @name czm_passOverlay * @glslConstant * * @see czm_pass */ const float czm_passOverlay = 13.0; `;var IGn=x(T(),1),KL=`/** * The automatic GLSL constant for {@link Pass#TERRAIN_CLASSIFICATION} * * @name czm_passTerrainClassification * @glslConstant * * @see czm_pass */ const float czm_passTerrainClassification = 3.0; `;var XGn=x(T(),1),JL=`/** * The automatic GLSL constant for {@link Pass#TRANSLUCENT} * * @name czm_passTranslucent * @glslConstant * * @see czm_pass */ const float czm_passTranslucent = 10.0; `;var YGn=x(T(),1),jL=`/** * The automatic GLSL constant for {@link Pass#VOXELS} * * @name czm_passVoxels * @glslConstant * * @see czm_pass */ const float czm_passVoxels = 11.0; `;var MGn=x(T(),1),QL=`/** * A built-in GLSL floating-point constant for Math.PI. * * @alias czm_pi * @glslConstant * * @see CesiumMath.PI * * @example * // GLSL declaration * const float czm_pi = ...; * * // Example * float twoPi = 2.0 * czm_pi; */ const float czm_pi = 3.141592653589793; `;var UGn=x(T(),1),qL=`/** * A built-in GLSL floating-point constant for pi/4. * * @alias czm_piOverFour * @glslConstant * * @see CesiumMath.PI_OVER_FOUR * * @example * // GLSL declaration * const float czm_piOverFour = ...; * * // Example * float pi = 4.0 * czm_piOverFour; */ const float czm_piOverFour = 0.7853981633974483; `;var OGn=x(T(),1),$L=`/** * A built-in GLSL floating-point constant for pi/6. * * @alias czm_piOverSix * @glslConstant * * @see CesiumMath.PI_OVER_SIX * * @example * // GLSL declaration * const float czm_piOverSix = ...; * * // Example * float pi = 6.0 * czm_piOverSix; */ const float czm_piOverSix = 0.5235987755982988; `;var zGn=x(T(),1),eW=`/** * A built-in GLSL floating-point constant for pi/3. * * @alias czm_piOverThree * @glslConstant * * @see CesiumMath.PI_OVER_THREE * * @example * // GLSL declaration * const float czm_piOverThree = ...; * * // Example * float pi = 3.0 * czm_piOverThree; */ const float czm_piOverThree = 1.0471975511965976; `;var KGn=x(T(),1),tW=`/** * A built-in GLSL floating-point constant for pi/2. * * @alias czm_piOverTwo * @glslConstant * * @see CesiumMath.PI_OVER_TWO * * @example * // GLSL declaration * const float czm_piOverTwo = ...; * * // Example * float pi = 2.0 * czm_piOverTwo; */ const float czm_piOverTwo = 1.5707963267948966; `;var jGn=x(T(),1),nW=`/** * A built-in GLSL floating-point constant for converting degrees to radians. * * @alias czm_radiansPerDegree * @glslConstant * * @see CesiumMath.RADIANS_PER_DEGREE * * @example * // GLSL declaration * const float czm_radiansPerDegree = ...; * * // Example * float rad = czm_radiansPerDegree * deg; */ const float czm_radiansPerDegree = 0.017453292519943295; `;var qGn=x(T(),1),iW=`/** * The constant identifier for the 2D {@link SceneMode} * * @name czm_sceneMode2D * @glslConstant * @see czm_sceneMode * @see czm_sceneModeColumbusView * @see czm_sceneMode3D * @see czm_sceneModeMorphing */ const float czm_sceneMode2D = 2.0; `;var eAn=x(T(),1),oW=`/** * The constant identifier for the 3D {@link SceneMode} * * @name czm_sceneMode3D * @glslConstant * @see czm_sceneMode * @see czm_sceneMode2D * @see czm_sceneModeColumbusView * @see czm_sceneModeMorphing */ const float czm_sceneMode3D = 3.0; `;var nAn=x(T(),1),rW=`/** * The constant identifier for the Columbus View {@link SceneMode} * * @name czm_sceneModeColumbusView * @glslConstant * @see czm_sceneMode * @see czm_sceneMode2D * @see czm_sceneMode3D * @see czm_sceneModeMorphing */ const float czm_sceneModeColumbusView = 1.0; `;var oAn=x(T(),1),sW=`/** * The constant identifier for the Morphing {@link SceneMode} * * @name czm_sceneModeMorphing * @glslConstant * @see czm_sceneMode * @see czm_sceneMode2D * @see czm_sceneModeColumbusView * @see czm_sceneMode3D */ const float czm_sceneModeMorphing = 0.0; `;var sAn=x(T(),1),aW=`/** * A built-in GLSL floating-point constant for one solar radius. * * @alias czm_solarRadius * @glslConstant * * @see CesiumMath.SOLAR_RADIUS * * @example * // GLSL declaration * const float czm_solarRadius = ...; */ const float czm_solarRadius = 695500000.0; `;var cAn=x(T(),1),cW=`/** * A built-in GLSL floating-point constant for 3pi/2. * * @alias czm_threePiOver2 * @glslConstant * * @see CesiumMath.THREE_PI_OVER_TWO * * @example * // GLSL declaration * const float czm_threePiOver2 = ...; * * // Example * float pi = (2.0 / 3.0) * czm_threePiOver2; */ const float czm_threePiOver2 = 4.71238898038469; `;var dAn=x(T(),1),lW=`/** * A built-in GLSL floating-point constant for 2pi. * * @alias czm_twoPi * @glslConstant * * @see CesiumMath.TWO_PI * * @example * // GLSL declaration * const float czm_twoPi = ...; * * // Example * float pi = czm_twoPi / 2.0; */ const float czm_twoPi = 6.283185307179586; `;var mAn=x(T(),1),dW=`/** * The maximum latitude, in radians, both North and South, supported by a Web Mercator * (EPSG:3857) projection. Technically, the Mercator projection is defined * for any latitude up to (but not including) 90 degrees, but it makes sense * to cut it off sooner because it grows exponentially with increasing latitude. * The logic behind this particular cutoff value, which is the one used by * Google Maps, Bing Maps, and Esri, is that it makes the projection * square. That is, the rectangle is equal in the X and Y directions. * * The constant value is computed as follows: * czm_pi * 0.5 - (2.0 * atan(exp(-czm_pi))) * * @name czm_webMercatorMaxLatitude * @glslConstant */ const float czm_webMercatorMaxLatitude = 1.4844222297453324; `;var fAn=x(T(),1),uW=`/** * @name czm_depthRangeStruct * @glslStruct */ struct czm_depthRangeStruct { float near; float far; }; `;var bAn=x(T(),1),mW=`/** * Holds material information that can be used for lighting. Returned by all czm_getMaterial functions. * * @name czm_material * @glslStruct * * @property {vec3} diffuse Incoming light that scatters evenly in all directions. * @property {float} specular Intensity of incoming light reflecting in a single direction. * @property {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight. * @property {vec3} normal Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal. * @property {vec3} emission Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light. * @property {float} alpha Alpha of this material. 0.0 is completely transparent; 1.0 is completely opaque. */ struct czm_material { vec3 diffuse; float specular; float shininess; vec3 normal; vec3 emission; float alpha; }; `;var yAn=x(T(),1),hW=`/** * Used as input to every material's czm_getMaterial function. * * @name czm_materialInput * @glslStruct * * @property {float} s 1D texture coordinates. * @property {vec2} st 2D texture coordinates. * @property {vec3} str 3D texture coordinates. * @property {vec3} normalEC Unperturbed surface normal in eye coordinates. * @property {mat3} tangentToEyeMatrix Matrix for converting a tangent space normal to eye space. * @property {vec3} positionToEyeEC Vector from the fragment to the eye in eye coordinates. The magnitude is the distance in meters from the fragment to the eye. * @property {float} height The height of the terrain in meters above or below the ellipsoid. Only available for globe materials. * @property {float} slope The slope of the terrain in radians. 0 is flat; pi/2 is vertical. Only available for globe materials. * @property {float} aspect The aspect of the terrain in radians. 0 is East, pi/2 is North, pi is West, 3pi/2 is South. Only available for globe materials. * @property {float} waterMask The value of the water mask. 0 is land, 1 is water. Only available for globe materials. */ struct czm_materialInput { float s; vec2 st; vec3 str; vec3 normalEC; mat3 tangentToEyeMatrix; vec3 positionToEyeEC; float height; float slope; float aspect; float waterMask; }; `;var TAn=x(T(),1),fW=`/** * Struct for representing a material for a {@link Model}. The model * rendering pipeline will pass this struct between material, custom shaders, * and lighting stages. This is not to be confused with {@link czm_material} * which is used by the older Fabric materials system, although they are similar. *

* All color values (diffuse, specular, emissive) are in linear color space. *

* * @name czm_modelMaterial * @glslStruct * * @property {vec4} baseColor The base color of the material. * @property {vec3} diffuse Incoming light that scatters evenly in all directions. * @property {float} alpha Alpha of this material. 0.0 is completely transparent; 1.0 is completely opaque. * @property {vec3} specular Color of reflected light at normal incidence in PBR materials. This is sometimes referred to as f0 in the literature. * @property {float} roughness A number from 0.0 to 1.0 representing how rough the surface is. Values near 0.0 produce glossy surfaces, while values near 1.0 produce rough surfaces. * @property {vec3} normalEC Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal. * @property {float} occlusion Ambient occlusion recieved at this point on the material. 1.0 means fully lit, 0.0 means fully occluded. * @property {vec3} emissive Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light. */ struct czm_modelMaterial { vec4 baseColor; vec3 diffuse; float alpha; vec3 specular; float roughness; vec3 normalEC; float occlusion; vec3 emissive; #ifdef USE_SPECULAR float specularWeight; #endif #ifdef USE_ANISOTROPY vec3 anisotropicT; vec3 anisotropicB; float anisotropyStrength; #endif #ifdef USE_CLEARCOAT float clearcoatFactor; float clearcoatRoughness; vec3 clearcoatNormal; // Add clearcoatF0 when KHR_materials_ior is implemented #endif }; `;var SAn=x(T(),1),pW=`/** * Struct for representing the output of a custom vertex shader. * * @name czm_modelVertexOutput * @glslStruct * * @see {@link CustomShader} * @see {@link Model} * * @property {vec3} positionMC The position of the vertex in model coordinates * @property {float} pointSize A custom value for gl_PointSize. This is only used for point primitives. */ struct czm_modelVertexOutput { vec3 positionMC; float pointSize; }; `;var VAn=x(T(),1),bW=`/** * DOC_TBA * * @name czm_ray * @glslStruct */ struct czm_ray { vec3 origin; vec3 direction; }; `;var RAn=x(T(),1),gW=`/** * DOC_TBA * * @name czm_raySegment * @glslStruct */ struct czm_raySegment { float start; float stop; }; /** * DOC_TBA * * @name czm_emptyRaySegment * @glslConstant */ const czm_raySegment czm_emptyRaySegment = czm_raySegment(-czm_infinity, -czm_infinity); /** * DOC_TBA * * @name czm_fullRaySegment * @glslConstant */ const czm_raySegment czm_fullRaySegment = czm_raySegment(0.0, czm_infinity); `;var AAn=x(T(),1),yW=`struct czm_shadowParameters { #ifdef USE_CUBE_MAP_SHADOW vec3 texCoords; #else vec2 texCoords; #endif float depthBias; float depth; float nDotL; vec2 texelStepSize; float normalShadingSmooth; float darkness; }; `;var LAn=x(T(),1),xW=`/** * Converts an HSB color (hue, saturation, brightness) to RGB * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl} * * @name czm_HSBToRGB * @glslFunction * * @param {vec3} hsb The color in HSB. * * @returns {vec3} The color in RGB. * * @example * vec3 hsb = czm_RGBToHSB(rgb); * hsb.z *= 0.1; * rgb = czm_HSBToRGB(hsb); */ const vec4 K_HSB2RGB = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); vec3 czm_HSBToRGB(vec3 hsb) { vec3 p = abs(fract(hsb.xxx + K_HSB2RGB.xyz) * 6.0 - K_HSB2RGB.www); return hsb.z * mix(K_HSB2RGB.xxx, clamp(p - K_HSB2RGB.xxx, 0.0, 1.0), hsb.y); } `;var vAn=x(T(),1),TW=`/** * Converts an HSL color (hue, saturation, lightness) to RGB * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html} * * @name czm_HSLToRGB * @glslFunction * * @param {vec3} rgb The color in HSL. * * @returns {vec3} The color in RGB. * * @example * vec3 hsl = czm_RGBToHSL(rgb); * hsl.z *= 0.1; * rgb = czm_HSLToRGB(hsl); */ vec3 hueToRGB(float hue) { float r = abs(hue * 6.0 - 3.0) - 1.0; float g = 2.0 - abs(hue * 6.0 - 2.0); float b = 2.0 - abs(hue * 6.0 - 4.0); return clamp(vec3(r, g, b), 0.0, 1.0); } vec3 czm_HSLToRGB(vec3 hsl) { vec3 rgb = hueToRGB(hsl.x); float c = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y; return (rgb - 0.5) * c + hsl.z; } `;var IAn=x(T(),1),_W=`/** * Converts an RGB color to HSB (hue, saturation, brightness) * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl} * * @name czm_RGBToHSB * @glslFunction * * @param {vec3} rgb The color in RGB. * * @returns {vec3} The color in HSB. * * @example * vec3 hsb = czm_RGBToHSB(rgb); * hsb.z *= 0.1; * rgb = czm_HSBToRGB(hsb); */ const vec4 K_RGB2HSB = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); vec3 czm_RGBToHSB(vec3 rgb) { vec4 p = mix(vec4(rgb.bg, K_RGB2HSB.wz), vec4(rgb.gb, K_RGB2HSB.xy), step(rgb.b, rgb.g)); vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r)); float d = q.x - min(q.w, q.y); return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + czm_epsilon7)), d / (q.x + czm_epsilon7), q.x); } `;var XAn=x(T(),1),SW=`/** * Converts an RGB color to HSL (hue, saturation, lightness) * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html} * * @name czm_RGBToHSL * @glslFunction * * @param {vec3} rgb The color in RGB. * * @returns {vec3} The color in HSL. * * @example * vec3 hsl = czm_RGBToHSL(rgb); * hsl.z *= 0.1; * rgb = czm_HSLToRGB(hsl); */ vec3 RGBtoHCV(vec3 rgb) { // Based on work by Sam Hocevar and Emil Persson vec4 p = (rgb.g < rgb.b) ? vec4(rgb.bg, -1.0, 2.0 / 3.0) : vec4(rgb.gb, 0.0, -1.0 / 3.0); vec4 q = (rgb.r < p.x) ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx); float c = q.x - min(q.w, q.y); float h = abs((q.w - q.y) / (6.0 * c + czm_epsilon7) + q.z); return vec3(h, c, q.x); } vec3 czm_RGBToHSL(vec3 rgb) { vec3 hcv = RGBtoHCV(rgb); float l = hcv.z - hcv.y * 0.5; float s = hcv.y / (1.0 - abs(l * 2.0 - 1.0) + czm_epsilon7); return vec3(hcv.x, s, l); } `;var YAn=x(T(),1),ZW=`/** * Converts an RGB color to CIE Yxy. *

The conversion is described in * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform} *

* * @name czm_RGBToXYZ * @glslFunction * * @param {vec3} rgb The color in RGB. * * @returns {vec3} The color in CIE Yxy. * * @example * vec3 xyz = czm_RGBToXYZ(rgb); * xyz.x = max(xyz.x - luminanceThreshold, 0.0); * rgb = czm_XYZToRGB(xyz); */ vec3 czm_RGBToXYZ(vec3 rgb) { const mat3 RGB2XYZ = mat3(0.4124, 0.2126, 0.0193, 0.3576, 0.7152, 0.1192, 0.1805, 0.0722, 0.9505); vec3 xyz = RGB2XYZ * rgb; vec3 Yxy; Yxy.r = xyz.g; float temp = dot(vec3(1.0), xyz); Yxy.gb = xyz.rg / temp; return Yxy; } `;var MAn=x(T(),1),VW=`/** * Converts a CIE Yxy color to RGB. *

The conversion is described in * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform} *

* * @name czm_XYZToRGB * @glslFunction * * @param {vec3} Yxy The color in CIE Yxy. * * @returns {vec3} The color in RGB. * * @example * vec3 xyz = czm_RGBToXYZ(rgb); * xyz.x = max(xyz.x - luminanceThreshold, 0.0); * rgb = czm_XYZToRGB(xyz); */ vec3 czm_XYZToRGB(vec3 Yxy) { const mat3 XYZ2RGB = mat3( 3.2405, -0.9693, 0.0556, -1.5371, 1.8760, -0.2040, -0.4985, 0.0416, 1.0572); vec3 xyz; xyz.r = Yxy.r * Yxy.g / Yxy.b; xyz.g = Yxy.r; xyz.b = Yxy.r * (1.0 - Yxy.g - Yxy.b) / Yxy.b; return XYZ2RGB * xyz; } `;var UAn=x(T(),1),CW=`// See: // https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/ vec3 czm_acesTonemapping(vec3 color) { float g = 0.985; float a = 0.065; float b = 0.0001; float c = 0.433; float d = 0.238; color = (color * (color + a) - b) / (color * (g * color + c) + d); color = clamp(color, 0.0, 1.0); return color; } `;var OAn=x(T(),1),RW=`/** * @private */ float czm_alphaWeight(float a) { float z = (gl_FragCoord.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2]; // See Weighted Blended Order-Independent Transparency for examples of different weighting functions: // http://jcgt.org/published/0002/02/09/ return pow(a + 0.01, 4.0) + max(1e-2, min(3.0 * 1e3, 0.003 / (1e-5 + pow(abs(z) / 200.0, 4.0)))); } `;var zAn=x(T(),1),GW=`/** * Procedural anti-aliasing by blurring two colors that meet at a sharp edge. * * @name czm_antialias * @glslFunction * * @param {vec4} color1 The color on one side of the edge. * @param {vec4} color2 The color on the other side of the edge. * @param {vec4} currentcolor The current color, either color1 or color2. * @param {float} dist The distance to the edge in texture coordinates. * @param {float} [fuzzFactor=0.1] Controls the blurriness between the two colors. * @returns {vec4} The anti-aliased color. * * @example * // GLSL declarations * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor); * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist); * * // get the color for a material that has a sharp edge at the line y = 0.5 in texture space * float dist = abs(textureCoordinates.t - 0.5); * vec4 currentColor = mix(bottomColor, topColor, step(0.5, textureCoordinates.t)); * vec4 color = czm_antialias(bottomColor, topColor, currentColor, dist, 0.1); */ vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor) { float val1 = clamp(dist / fuzzFactor, 0.0, 1.0); float val2 = clamp((dist - 0.5) / fuzzFactor, 0.0, 1.0); val1 = val1 * (1.0 - val2); val1 = val1 * val1 * (3.0 - (2.0 * val1)); val1 = pow(val1, 0.5); //makes the transition nicer vec4 midColor = (color1 + color2) * 0.5; return mix(midColor, currentColor, val1); } vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist) { return czm_antialias(color1, color2, currentColor, dist, 0.1); } `;var KAn=x(T(),1),AW=`/** * Apply a HSB color shift to an RGB color. * * @param {vec3} rgb The color in RGB space. * @param {vec3} hsbShift The amount to shift each component. The xyz components correspond to hue, saturation, and brightness. Shifting the hue by +/- 1.0 corresponds to shifting the hue by a full cycle. Saturation and brightness are clamped between 0 and 1 after the adjustment * @param {bool} ignoreBlackPixels If true, black pixels will be unchanged. This is necessary in some shaders such as atmosphere-related effects. * * @return {vec3} The RGB color after shifting in HSB space and clamping saturation and brightness to a valid range. */ vec3 czm_applyHSBShift(vec3 rgb, vec3 hsbShift, bool ignoreBlackPixels) { // Convert rgb color to hsb vec3 hsb = czm_RGBToHSB(rgb); // Perform hsb shift // Hue cycles around so no clamp is needed. hsb.x += hsbShift.x; // hue hsb.y = clamp(hsb.y + hsbShift.y, 0.0, 1.0); // saturation // brightness // // Some shaders such as atmosphere-related effects need to leave black // pixels unchanged if (ignoreBlackPixels) { hsb.z = hsb.z > czm_epsilon7 ? hsb.z + hsbShift.z : 0.0; } else { hsb.z = hsb.z + hsbShift.z; } hsb.z = clamp(hsb.z, 0.0, 1.0); // Convert shifted hsb back to rgb return czm_HSBToRGB(hsb); } `;var jAn=x(T(),1),EW=`/** * Approximately computes spherical coordinates given a normal. * Uses approximate inverse trigonometry for speed and consistency, * since inverse trigonometry can differ from vendor-to-vendor and when compared with the CPU. * * @name czm_approximateSphericalCoordinates * @glslFunction * * @param {vec3} normal arbitrary-length normal. * * @returns {vec2} Approximate latitude and longitude spherical coordinates. */ vec2 czm_approximateSphericalCoordinates(vec3 normal) { // Project into plane with vertical for latitude float latitudeApproximation = czm_fastApproximateAtan(sqrt(normal.x * normal.x + normal.y * normal.y), normal.z); float longitudeApproximation = czm_fastApproximateAtan(normal.x, normal.y); return vec2(latitudeApproximation, longitudeApproximation); } `;var qAn=x(T(),1),LW=`/** * Compute a rational approximation to tanh(x) * * @param {float} x A real number input * @returns {float} An approximation for tanh(x) */ float czm_approximateTanh(float x) { float x2 = x * x; return max(-1.0, min(1.0, x * (27.0 + x2) / (27.0 + 9.0 * x2))); } `;var eEn=x(T(),1),WW=`/** * Determines if the fragment is back facing * * @name czm_backFacing * @glslFunction * * @returns {bool} true if the fragment is back facing; otherwise, false. */ bool czm_backFacing() { // !gl_FrontFacing doesn't work as expected on Mac/Intel so use the more verbose form instead. See https://github.com/CesiumGS/cesium/pull/8494. return gl_FrontFacing == false; } `;var nEn=x(T(),1),vW=`/** * Branchless ternary operator to be used when it's inexpensive to explicitly * evaluate both possibilities for a float expression. * * @name czm_branchFreeTernary * @glslFunction * * @param {bool} comparison A comparison statement * @param {float} a Value to return if the comparison is true. * @param {float} b Value to return if the comparison is false. * * @returns {float} equivalent of comparison ? a : b */ float czm_branchFreeTernary(bool comparison, float a, float b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } /** * Branchless ternary operator to be used when it's inexpensive to explicitly * evaluate both possibilities for a vec2 expression. * * @name czm_branchFreeTernary * @glslFunction * * @param {bool} comparison A comparison statement * @param {vec2} a Value to return if the comparison is true. * @param {vec2} b Value to return if the comparison is false. * * @returns {vec2} equivalent of comparison ? a : b */ vec2 czm_branchFreeTernary(bool comparison, vec2 a, vec2 b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } /** * Branchless ternary operator to be used when it's inexpensive to explicitly * evaluate both possibilities for a vec3 expression. * * @name czm_branchFreeTernary * @glslFunction * * @param {bool} comparison A comparison statement * @param {vec3} a Value to return if the comparison is true. * @param {vec3} b Value to return if the comparison is false. * * @returns {vec3} equivalent of comparison ? a : b */ vec3 czm_branchFreeTernary(bool comparison, vec3 a, vec3 b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } /** * Branchless ternary operator to be used when it's inexpensive to explicitly * evaluate both possibilities for a vec4 expression. * * @name czm_branchFreeTernary * @glslFunction * * @param {bool} comparison A comparison statement * @param {vec3} a Value to return if the comparison is true. * @param {vec3} b Value to return if the comparison is false. * * @returns {vec3} equivalent of comparison ? a : b */ vec4 czm_branchFreeTernary(bool comparison, vec4 a, vec4 b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } `;var oEn=x(T(),1),FW=` vec4 czm_cascadeColor(vec4 weights) { return vec4(1.0, 0.0, 0.0, 1.0) * weights.x + vec4(0.0, 1.0, 0.0, 1.0) * weights.y + vec4(0.0, 0.0, 1.0, 1.0) * weights.z + vec4(1.0, 0.0, 1.0, 1.0) * weights.w; } `;var sEn=x(T(),1),IW=` uniform vec4 shadowMap_cascadeDistances; float czm_cascadeDistance(vec4 weights) { return dot(shadowMap_cascadeDistances, weights); } `;var cEn=x(T(),1),PW=` uniform mat4 shadowMap_cascadeMatrices[4]; mat4 czm_cascadeMatrix(vec4 weights) { return shadowMap_cascadeMatrices[0] * weights.x + shadowMap_cascadeMatrices[1] * weights.y + shadowMap_cascadeMatrices[2] * weights.z + shadowMap_cascadeMatrices[3] * weights.w; } `;var dEn=x(T(),1),XW=` uniform vec4 shadowMap_cascadeSplits[2]; vec4 czm_cascadeWeights(float depthEye) { // One component is set to 1.0 and all others set to 0.0. vec4 near = step(shadowMap_cascadeSplits[0], vec4(depthEye)); vec4 far = step(depthEye, shadowMap_cascadeSplits[1]); return near * far; } `;var mEn=x(T(),1),NW=`float getSignedDistance(vec2 uv, highp sampler2D clippingDistance) { float signedDistance = texture(clippingDistance, uv).r; return (signedDistance - 0.5) * 2.0; } void czm_clipPolygons(highp sampler2D clippingDistance, int extentsLength, vec2 clippingPosition, int regionIndex) { // Position is completely outside of polygons bounds vec2 rectUv = clippingPosition; if (regionIndex < 0 || rectUv.x <= 0.0 || rectUv.y <= 0.0 || rectUv.x >= 1.0 || rectUv.y >= 1.0) { #ifdef CLIPPING_INVERSE discard; #endif return; } vec2 clippingDistanceTextureDimensions = vec2(textureSize(clippingDistance, 0)); vec2 sampleOffset = max(1.0 / clippingDistanceTextureDimensions, vec2(0.005)); float dimension = float(extentsLength); if (extentsLength > 2) { dimension = ceil(log2(float(extentsLength))); } vec2 textureOffset = vec2(mod(float(regionIndex), dimension), floor(float(regionIndex) / dimension)) / dimension; vec2 uv = textureOffset + rectUv / dimension; float signedDistance = getSignedDistance(uv, clippingDistance); #ifdef CLIPPING_INVERSE if (signedDistance > 0.0) { discard; } #else if (signedDistance < 0.0) { discard; } #endif } `;var fEn=x(T(),1),YW=`/** * DOC_TBA * * @name czm_columbusViewMorph * @glslFunction */ vec4 czm_columbusViewMorph(vec4 position2D, vec4 position3D, float time) { // Just linear for now. // We're manually doing the equivalent of a \`mix\` here because, some GPUs // (NVidia GeForce 3070 Ti and Intel Arc A750, to name two), \`mix\` seems to // use an alternate formulation that introduces jitter even when \`time\` is // 0.0 or 1.0. That is, the value of \`p\` won't be exactly \`position2D.xyz\` // when \`time\` is 0.0 and it won't be exactly \`position3D.xyz\` when \`time\` is // 1.0. The "textbook" formulation here, while probably a bit slower, // does not have this problem. vec3 p = position2D.xyz * (1.0 - time) + position3D.xyz * time; return vec4(p, 1.0); } `;var bEn=x(T(),1),wW=`/** * Compute the atmosphere color, applying Rayleigh and Mie scattering. This * builtin uses automatic uniforms so the atmophere settings are synced with the * state of the Scene, even in other contexts like Model. * * @name czm_computeAtmosphereColor * @glslFunction * * @param {vec3} positionWC Position of the fragment in world coords (low precision) * @param {vec3} lightDirection Light direction from the sun or other light source. * @param {vec3} rayleighColor The Rayleigh scattering color computed by a scattering function * @param {vec3} mieColor The Mie scattering color computed by a scattering function * @param {float} opacity The opacity computed by a scattering function. */ vec4 czm_computeAtmosphereColor( vec3 positionWC, vec3 lightDirection, vec3 rayleighColor, vec3 mieColor, float opacity ) { // Setup the primary ray: from the camera position to the vertex position. vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); float cosAngle = dot(cameraToPositionWCDirection, lightDirection); float cosAngleSq = cosAngle * cosAngle; float G = czm_atmosphereMieAnisotropy; float GSq = G * G; // The Rayleigh phase function. float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq); // The Mie phase function. float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq)); // The final color is generated by combining the effects of the Rayleigh and Mie scattering. vec3 rayleigh = rayleighPhase * rayleighColor; vec3 mie = miePhase * mieColor; vec3 color = (rayleigh + mie) * czm_atmosphereLightIntensity; return vec4(color, opacity); } /** * Compute the atmosphere color, applying Rayleigh and Mie scattering. This * builtin uses automatic uniforms so the atmophere settings are synced with the * state of the Scene, even in other contexts like Model. * * @name czm_computeAtmosphereColor * @glslFunction * * @param {czm_ray} primaryRay Ray from the origin to sky fragment to in world coords (low precision) * @param {vec3} lightDirection Light direction from the sun or other light source. * @param {vec3} rayleighColor The Rayleigh scattering color computed by a scattering function * @param {vec3} mieColor The Mie scattering color computed by a scattering function * @param {float} opacity The opacity computed by a scattering function. */ vec4 czm_computeAtmosphereColor( czm_ray primaryRay, vec3 lightDirection, vec3 rayleighColor, vec3 mieColor, float opacity ) { vec3 direction = normalize(primaryRay.direction); float cosAngle = dot(direction, lightDirection); float cosAngleSq = cosAngle * cosAngle; float G = czm_atmosphereMieAnisotropy; float GSq = G * G; // The Rayleigh phase function. float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq); // The Mie phase function. float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq)); // The final color is generated by combining the effects of the Rayleigh and Mie scattering. vec3 rayleigh = rayleighPhase * rayleighColor; vec3 mie = miePhase * mieColor; vec3 color = (rayleigh + mie) * czm_atmosphereLightIntensity; return vec4(color, opacity); } `;var yEn=x(T(),1),MW=`/** * Compute atmosphere scattering for the ground atmosphere and fog. This method * uses automatic uniforms so it is always synced with the scene settings. * * @name czm_computeGroundAtmosphereScattering * @glslfunction * * @param {vec3} positionWC The position of the fragment in world coordinates. * @param {vec3} lightDirection The direction of the light to calculate the scattering from. * @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to. * @param {vec3} mieColor The variable the Mie scattering will be written to. * @param {float} opacity The variable the transmittance will be written to. */ void czm_computeGroundAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity) { vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection); float atmosphereInnerRadius = length(positionWC); czm_computeScattering( primaryRay, length(cameraToPositionWC), lightDirection, atmosphereInnerRadius, rayleighColor, mieColor, opacity ); } `;var TEn=x(T(),1),kW=`/** * Returns a position in model coordinates relative to eye taking into * account the current scene mode: 3D, 2D, or Columbus view. *

* This uses standard position attributes, position3DHigh, * position3DLow, position2DHigh, and position2DLow, * and should be used when writing a vertex shader for an {@link Appearance}. *

* * @name czm_computePosition * @glslFunction * * @returns {vec4} The position relative to eye. * * @example * vec4 p = czm_computePosition(); * v_positionEC = (czm_modelViewRelativeToEye * p).xyz; * gl_Position = czm_modelViewProjectionRelativeToEye * p; * * @see czm_translateRelativeToEye */ vec4 czm_computePosition(); `;var SEn=x(T(),1),UW=`/** * This function computes the colors contributed by Rayliegh and Mie scattering on a given ray, as well as * the transmittance value for the ray. This function uses automatic uniforms * so the atmosphere settings are always synced with the current scene. * * @name czm_computeScattering * @glslfunction * * @param {czm_ray} primaryRay The ray from the camera to the position. * @param {float} primaryRayLength The length of the primary ray. * @param {vec3} lightDirection The direction of the light to calculate the scattering from. * @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to. * @param {vec3} mieColor The variable the Mie scattering will be written to. * @param {float} opacity The variable the transmittance will be written to. */ void czm_computeScattering( czm_ray primaryRay, float primaryRayLength, vec3 lightDirection, float atmosphereInnerRadius, out vec3 rayleighColor, out vec3 mieColor, out float opacity ) { const float ATMOSPHERE_THICKNESS = 111e3; // The thickness of the atmosphere in meters. const int PRIMARY_STEPS_MAX = 16; // Maximum number of times the ray from the camera to the world position (primary ray) is sampled. const int LIGHT_STEPS_MAX = 4; // Maximum number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray. // Initialize the default scattering amounts to 0. rayleighColor = vec3(0.0); mieColor = vec3(0.0); opacity = 0.0; float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS; vec3 origin = vec3(0.0); // Calculate intersection from the camera to the outer ring of the atmosphere. czm_raySegment primaryRayAtmosphereIntersect = czm_raySphereIntersectionInterval(primaryRay, origin, atmosphereOuterRadius); // Return empty colors if no intersection with the atmosphere geometry. if (primaryRayAtmosphereIntersect == czm_emptyRaySegment) { return; } // To deal with smaller values of PRIMARY_STEPS (e.g. 4) // we implement a split strategy: sky or horizon. // For performance reasons, instead of a if/else branch // a soft choice is implemented through a weight 0.0 <= w_stop_gt_lprl <= 1.0 float x = 1e-7 * primaryRayAtmosphereIntersect.stop / length(primaryRayLength); // Value close to 0.0: close to the horizon // Value close to 1.0: above in the sky float w_stop_gt_lprl = 0.5 * (1.0 + czm_approximateTanh(x)); // The ray should start from the first intersection with the outer atmopshere, or from the camera position, if it is inside the atmosphere. float start_0 = primaryRayAtmosphereIntersect.start; primaryRayAtmosphereIntersect.start = max(primaryRayAtmosphereIntersect.start, 0.0); // The ray should end at the exit from the atmosphere or at the distance to the vertex, whichever is smaller. primaryRayAtmosphereIntersect.stop = min(primaryRayAtmosphereIntersect.stop, length(primaryRayLength)); // For the number of ray steps, distinguish inside or outside atmosphere (outer space) // (1) from outer space we have to use more ray steps to get a realistic rendering // (2) within atmosphere we need fewer steps for faster rendering float x_o_a = start_0 - ATMOSPHERE_THICKNESS; // ATMOSPHERE_THICKNESS used as an ad-hoc constant, no precise meaning here, only the order of magnitude matters float w_inside_atmosphere = 1.0 - 0.5 * (1.0 + czm_approximateTanh(x_o_a)); int PRIMARY_STEPS = PRIMARY_STEPS_MAX - int(w_inside_atmosphere * 12.0); // Number of times the ray from the camera to the world position (primary ray) is sampled. int LIGHT_STEPS = LIGHT_STEPS_MAX - int(w_inside_atmosphere * 2.0); // Number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray. // Setup for sampling positions along the ray - starting from the intersection with the outer ring of the atmosphere. float rayPositionLength = primaryRayAtmosphereIntersect.start; // (1) Outside the atmosphere: constant rayStepLength // (2) Inside atmosphere: variable rayStepLength to compensate the rough rendering of the smaller number of ray steps float totalRayLength = primaryRayAtmosphereIntersect.stop - rayPositionLength; float rayStepLengthIncrease = w_inside_atmosphere * ((1.0 - w_stop_gt_lprl) * totalRayLength / (float(PRIMARY_STEPS * (PRIMARY_STEPS + 1)) / 2.0)); float rayStepLength = max(1.0 - w_inside_atmosphere, w_stop_gt_lprl) * totalRayLength / max(7.0 * w_inside_atmosphere, float(PRIMARY_STEPS)); vec3 rayleighAccumulation = vec3(0.0); vec3 mieAccumulation = vec3(0.0); vec2 opticalDepth = vec2(0.0); vec2 heightScale = vec2(czm_atmosphereRayleighScaleHeight, czm_atmosphereMieScaleHeight); // Sample positions on the primary ray. for (int i = 0; i < PRIMARY_STEPS_MAX; ++i) { // The loop should be: for (int i = 0; i < PRIMARY_STEPS; ++i) {...} but WebGL1 cannot // loop with non-constant condition, so it has to break early instead if (i >= PRIMARY_STEPS) { break; } // Calculate sample position along viewpoint ray. vec3 samplePosition = primaryRay.origin + primaryRay.direction * (rayPositionLength + rayStepLength); // Calculate height of sample position above ellipsoid. float sampleHeight = length(samplePosition) - atmosphereInnerRadius; // Calculate and accumulate density of particles at the sample position. vec2 sampleDensity = exp(-sampleHeight / heightScale) * rayStepLength; opticalDepth += sampleDensity; // Generate ray from the sample position segment to the light source, up to the outer ring of the atmosphere. czm_ray lightRay = czm_ray(samplePosition, lightDirection); czm_raySegment lightRayAtmosphereIntersect = czm_raySphereIntersectionInterval(lightRay, origin, atmosphereOuterRadius); float lightStepLength = lightRayAtmosphereIntersect.stop / float(LIGHT_STEPS); float lightPositionLength = 0.0; vec2 lightOpticalDepth = vec2(0.0); // Sample positions along the light ray, to accumulate incidence of light on the latest sample segment. for (int j = 0; j < LIGHT_STEPS_MAX; ++j) { // The loop should be: for (int j = 0; i < LIGHT_STEPS; ++j) {...} but WebGL1 cannot // loop with non-constant condition, so it has to break early instead if (j >= LIGHT_STEPS) { break; } // Calculate sample position along light ray. vec3 lightPosition = samplePosition + lightDirection * (lightPositionLength + lightStepLength * 0.5); // Calculate height of the light sample position above ellipsoid. float lightHeight = length(lightPosition) - atmosphereInnerRadius; // Calculate density of photons at the light sample position. lightOpticalDepth += exp(-lightHeight / heightScale) * lightStepLength; // Increment distance on light ray. lightPositionLength += lightStepLength; } // Compute attenuation via the primary ray and the light ray. vec3 attenuation = exp(-((czm_atmosphereMieCoefficient * (opticalDepth.y + lightOpticalDepth.y)) + (czm_atmosphereRayleighCoefficient * (opticalDepth.x + lightOpticalDepth.x)))); // Accumulate the scattering. rayleighAccumulation += sampleDensity.x * attenuation; mieAccumulation += sampleDensity.y * attenuation; // Increment distance on primary ray. rayPositionLength += (rayStepLength += rayStepLengthIncrease); } // Compute the scattering amount. rayleighColor = czm_atmosphereRayleighCoefficient * rayleighAccumulation; mieColor = czm_atmosphereMieCoefficient * mieAccumulation; // Compute the transmittance i.e. how much light is passing through the atmosphere. opacity = length(exp(-((czm_atmosphereMieCoefficient * opticalDepth.y) + (czm_atmosphereRayleighCoefficient * opticalDepth.x)))); } `;var VEn=x(T(),1),DW=`/** * Applies a 2D texture transformation matrix to texture coordinates. * This function applies translation, rotation, and scaling transformations * as specified by the KHR_texture_transform glTF extension. * * @name czm_computeTextureTransform * @glslFunction * * @param {vec2} texCoord The texture coordinates to transform. * @param {mat3} textureTransform The 3x3 transformation matrix. * * @returns {vec2} The transformed texture coordinates. * * @example * // GLSL declaration * vec2 czm_computeTextureTransform(vec2 texCoord, mat3 textureTransform); * * // Apply texture transform to UV coordinates * vec2 transformedUV = czm_computeTextureTransform(uv, u_textureTransform); */ vec2 czm_computeTextureTransform(vec2 texCoord, mat3 textureTransform) { return vec2(textureTransform * vec3(texCoord, 1.0)); }`;var REn=x(T(),1),OW=`/** * @private */ vec2 cordic(float angle) { // Scale the vector by the appropriate factor for the 24 iterations to follow. vec2 vector = vec2(6.0725293500888267e-1, 0.0); // Iteration 1 float sense = (angle < 0.0) ? -1.0 : 1.0; // float factor = sense * 1.0; // 2^-0 mat2 rotation = mat2(1.0, sense, -sense, 1.0); vector = rotation * vector; angle -= sense * 7.8539816339744828e-1; // atan(2^-0) // Iteration 2 sense = (angle < 0.0) ? -1.0 : 1.0; float factor = sense * 5.0e-1; // 2^-1 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 4.6364760900080609e-1; // atan(2^-1) // Iteration 3 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 2.5e-1; // 2^-2 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 2.4497866312686414e-1; // atan(2^-2) // Iteration 4 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.25e-1; // 2^-3 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.2435499454676144e-1; // atan(2^-3) // Iteration 5 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 6.25e-2; // 2^-4 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 6.2418809995957350e-2; // atan(2^-4) // Iteration 6 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.125e-2; // 2^-5 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.1239833430268277e-2; // atan(2^-5) // Iteration 7 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.5625e-2; // 2^-6 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.5623728620476831e-2; // atan(2^-6) // Iteration 8 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 7.8125e-3; // 2^-7 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 7.8123410601011111e-3; // atan(2^-7) // Iteration 9 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.90625e-3; // 2^-8 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.9062301319669718e-3; // atan(2^-8) // Iteration 10 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.953125e-3; // 2^-9 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.9531225164788188e-3; // atan(2^-9) // Iteration 11 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 9.765625e-4; // 2^-10 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 9.7656218955931946e-4; // atan(2^-10) // Iteration 12 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 4.8828125e-4; // 2^-11 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 4.8828121119489829e-4; // atan(2^-11) // Iteration 13 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 2.44140625e-4; // 2^-12 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 2.4414062014936177e-4; // atan(2^-12) // Iteration 14 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.220703125e-4; // 2^-13 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.2207031189367021e-4; // atan(2^-13) // Iteration 15 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 6.103515625e-5; // 2^-14 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 6.1035156174208773e-5; // atan(2^-14) // Iteration 16 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.0517578125e-5; // 2^-15 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.0517578115526096e-5; // atan(2^-15) // Iteration 17 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.52587890625e-5; // 2^-16 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.5258789061315762e-5; // atan(2^-16) // Iteration 18 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 7.62939453125e-6; // 2^-17 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 7.6293945311019700e-6; // atan(2^-17) // Iteration 19 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.814697265625e-6; // 2^-18 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.8146972656064961e-6; // atan(2^-18) // Iteration 20 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.9073486328125e-6; // 2^-19 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.9073486328101870e-6; // atan(2^-19) // Iteration 21 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 9.5367431640625e-7; // 2^-20 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 9.5367431640596084e-7; // atan(2^-20) // Iteration 22 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 4.76837158203125e-7; // 2^-21 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 4.7683715820308884e-7; // atan(2^-21) // Iteration 23 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 2.384185791015625e-7; // 2^-22 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 2.3841857910155797e-7; // atan(2^-22) // Iteration 24 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.1920928955078125e-7; // 2^-23 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; // angle -= sense * 1.1920928955078068e-7; // atan(2^-23) return vector; } /** * Computes the cosine and sine of the provided angle using the CORDIC algorithm. * * @name czm_cosineAndSine * @glslFunction * * @param {float} angle The angle in radians. * * @returns {vec2} The resulting cosine of the angle (as the x coordinate) and sine of the angle (as the y coordinate). * * @example * vec2 v = czm_cosineAndSine(czm_piOverSix); * float cosine = v.x; * float sine = v.y; */ vec2 czm_cosineAndSine(float angle) { if (angle < -czm_piOverTwo || angle > czm_piOverTwo) { if (angle < 0.0) { return -cordic(angle + czm_pi); } else { return -cordic(angle - czm_pi); } } else { return cordic(angle); } } `;var AEn=x(T(),1),BW=`/** * Decodes RGB values packed into a single float at 8-bit precision. Encoded * representation is equivalent to 0xFFFFFF in JavaScript. * * @name czm_decodeRGB8 * @glslFunction * * @param {float} encoded Float-encoded RGB values. * @returns {vec4} Decoded RGB values. */ vec4 czm_decodeRGB8(float encoded) { const float SHIFT_RIGHT16 = 1.0 / 65536.0; const float SHIFT_RIGHT8 = 1.0 / 256.0; const float SHIFT_LEFT16 = 65536.0; const float SHIFT_LEFT8 = 256.0; vec4 color = vec4(255.0); color.r = floor(encoded * SHIFT_RIGHT16); color.g = floor((encoded - color.r * SHIFT_LEFT16) * SHIFT_RIGHT8); color.b = floor(encoded - color.r * SHIFT_LEFT16 - color.g * SHIFT_LEFT8); return color / 255.0; } `;var LEn=x(T(),1),zW=`/** * Decompresses texture coordinates that were packed into a single float. * * @name czm_decompressTextureCoordinates * @glslFunction * * @param {float} encoded The compressed texture coordinates. * @returns {vec2} The decompressed texture coordinates. */ vec2 czm_decompressTextureCoordinates(float encoded) { float temp = encoded / 4096.0; float xZeroTo4095 = floor(temp); float stx = xZeroTo4095 / 4095.0; float sty = (encoded - xZeroTo4095 * 4096.0) / 4095.0; return vec2(stx, sty); } `;var vEn=x(T(),1),HW=`// emulated noperspective #if (__VERSION__ == 300 || defined(GL_EXT_frag_depth)) && !defined(LOG_DEPTH) out float v_WindowZ; #endif /** * Emulates GL_DEPTH_CLAMP, which is not available in WebGL 1 or 2. * GL_DEPTH_CLAMP clamps geometry that is outside the near and far planes, * capping the shadow volume. More information here: * https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_depth_clamp.txt. * * When GL_EXT_frag_depth is available we emulate GL_DEPTH_CLAMP by ensuring * no geometry gets clipped by setting the clip space z value to 0.0 and then * sending the unaltered screen space z value (using emulated noperspective * interpolation) to the frag shader where it is clamped to [0,1] and then * written with gl_FragDepth (see czm_writeDepthClamp). This technique is based on: * https://stackoverflow.com/questions/5960757/how-to-emulate-gl-depth-clamp-nv. * * When GL_EXT_frag_depth is not available, which is the case on some mobile * devices, we must attempt to fix this only in the vertex shader. * The approach is to clamp the z value to the far plane, which closes the * shadow volume but also distorts the geometry, so there can still be artifacts * on frustum seams. * * @name czm_depthClamp * @glslFunction * * @param {vec4} coords The vertex in clip coordinates. * @returns {vec4} The modified vertex. * * @example * gl_Position = czm_depthClamp(czm_modelViewProjection * vec4(position, 1.0)); * * @see czm_writeDepthClamp */ vec4 czm_depthClamp(vec4 coords) { #ifndef LOG_DEPTH #if __VERSION__ == 300 || defined(GL_EXT_frag_depth) v_WindowZ = (0.5 * (coords.z / coords.w) + 0.5) * coords.w; coords.z = 0.0; #else coords.z = min(coords.z, coords.w); #endif #endif return coords; } `;var IEn=x(T(),1),KW=`/** * Computes a 3x3 rotation matrix that transforms vectors from an ellipsoid's east-north-up coordinate system * to eye coordinates. In east-north-up coordinates, x points east, y points north, and z points along the * surface normal. East-north-up can be used as an ellipsoid's tangent space for operations such as bump mapping. *

* The ellipsoid is assumed to be centered at the model coordinate's origin. * * @name czm_eastNorthUpToEyeCoordinates * @glslFunction * * @param {vec3} positionMC The position on the ellipsoid in model coordinates. * @param {vec3} normalEC The normalized ellipsoid surface normal, at positionMC, in eye coordinates. * * @returns {mat3} A 3x3 rotation matrix that transforms vectors from the east-north-up coordinate system to eye coordinates. * * @example * // Transform a vector defined in the east-north-up coordinate * // system, (0, 0, 1) which is the surface normal, to eye * // coordinates. * mat3 m = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC); * vec3 normalEC = m * vec3(0.0, 0.0, 1.0); */ mat3 czm_eastNorthUpToEyeCoordinates(vec3 positionMC, vec3 normalEC) { vec3 tangentMC = normalize(vec3(-positionMC.y, positionMC.x, 0.0)); // normalized surface tangent in model coordinates vec3 tangentEC = normalize(czm_normal3D * tangentMC); // normalized surface tangent in eye coordinates vec3 bitangentEC = normalize(cross(normalEC, tangentEC)); // normalized surface bitangent in eye coordinates return mat3( tangentEC.x, tangentEC.y, tangentEC.z, bitangentEC.x, bitangentEC.y, bitangentEC.z, normalEC.x, normalEC.y, normalEC.z); } `;var XEn=x(T(),1),JW=`/** * DOC_TBA * * @name czm_ellipsoidContainsPoint * @glslFunction * */ bool czm_ellipsoidContainsPoint(vec3 ellipsoid_inverseRadii, vec3 point) { vec3 scaled = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(point, 1.0)).xyz; return (dot(scaled, scaled) <= 1.0); } `;var YEn=x(T(),1),jW=`/** * Approximate uv coordinates based on the ellipsoid normal. * * @name czm_ellipsoidTextureCoordinates * @glslFunction */ vec2 czm_ellipsoidTextureCoordinates(vec3 normal) { return vec2(atan(normal.y, normal.x) * czm_oneOverTwoPi + 0.5, asin(normal.z) * czm_oneOverPi + 0.5); } `;var MEn=x(T(),1),QW=`/** * Compares left and right componentwise. Returns true * if they are within epsilon and false otherwise. The inputs * left and right can be floats, vec2s, * vec3s, or vec4s. * * @name czm_equalsEpsilon * @glslFunction * * @param {} left The first vector. * @param {} right The second vector. * @param {float} epsilon The epsilon to use for equality testing. * @returns {bool} true if the components are within epsilon and false otherwise. * * @example * // GLSL declarations * bool czm_equalsEpsilon(float left, float right, float epsilon); * bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon); * bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon); * bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon); */ bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon) { return all(lessThanEqual(abs(left - right), vec4(epsilon))); } bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon) { return all(lessThanEqual(abs(left - right), vec3(epsilon))); } bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon) { return all(lessThanEqual(abs(left - right), vec2(epsilon))); } bool czm_equalsEpsilon(float left, float right, float epsilon) { return (abs(left - right) <= epsilon); } `;var UEn=x(T(),1),qW=`/** * DOC_TBA * * @name czm_eyeOffset * @glslFunction * * @param {vec4} positionEC DOC_TBA. * @param {vec3} eyeOffset DOC_TBA. * * @returns {vec4} DOC_TBA. */ vec4 czm_eyeOffset(vec4 positionEC, vec3 eyeOffset) { // This equation is approximate in x and y. vec4 p = positionEC; vec4 zEyeOffset = normalize(p) * eyeOffset.z; p.xy += eyeOffset.xy + zEyeOffset.xy; p.z += zEyeOffset.z; return p; } `;var OEn=x(T(),1),$W=`/** * Transforms a position from eye to window coordinates. The transformation * from eye to clip coordinates is done using {@link czm_projection}. * The transform from normalized device coordinates to window coordinates is * done using {@link czm_viewportTransformation}, which assumes a depth range * of near = 0 and far = 1. *

* This transform is useful when there is a need to manipulate window coordinates * in a vertex shader as done by {@link BillboardCollection}. * * @name czm_eyeToWindowCoordinates * @glslFunction * * @param {vec4} position The position in eye coordinates to transform. * * @returns {vec4} The transformed position in window coordinates. * * @see czm_modelToWindowCoordinates * @see czm_projection * @see czm_viewportTransformation * @see BillboardCollection * * @example * vec4 positionWC = czm_eyeToWindowCoordinates(positionEC); */ vec4 czm_eyeToWindowCoordinates(vec4 positionEC) { vec4 q = czm_projection * positionEC; // clip coordinates q.xyz /= q.w; // normalized device coordinates q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates return q; } `;var zEn=x(T(),1),ev=`/** * Approxiamtes atan over the range [0, 1]. Safe to flip output for negative input. * * Based on Michal Drobot's approximation from ShaderFastLibs, which in turn is based on * "Efficient approximations for the arctangent function," Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006. * Adapted from ShaderFastLibs under MIT License. * * Chosen for the following characteristics over range [0, 1]: * - basically no error at 0 and 1, important for getting around range limit (naive atan2 via atan requires infinite range atan) * - no visible artifacts from first-derivative discontinuities, unlike latitude via range-reduced sqrt asin approximations (at equator) * * The original code is x * (-0.1784 * abs(x) - 0.0663 * x * x + 1.0301); * Removed the abs() in here because it isn't needed, the input range is guaranteed as [0, 1] by how we're approximating atan2. * * @name czm_fastApproximateAtan * @glslFunction * * @param {float} x Value between 0 and 1 inclusive. * * @returns {float} Approximation of atan(x) */ float czm_fastApproximateAtan(float x) { return x * (-0.1784 * x - 0.0663 * x * x + 1.0301); } /** * Approximation of atan2. * * Range reduction math based on nvidia's cg reference implementation for atan2: http://developer.download.nvidia.com/cg/atan2.html * However, we replaced their atan curve with Michael Drobot's (see above). * * @name czm_fastApproximateAtan * @glslFunction * * @param {float} x Value between -1 and 1 inclusive. * @param {float} y Value between -1 and 1 inclusive. * * @returns {float} Approximation of atan2(x, y) */ float czm_fastApproximateAtan(float x, float y) { // atan approximations are usually only reliable over [-1, 1], or, in our case, [0, 1] due to modifications. // So range-reduce using abs and by flipping whether x or y is on top. float t = abs(x); // t used as swap and atan result. float opposite = abs(y); float adjacent = max(t, opposite); opposite = min(t, opposite); t = czm_fastApproximateAtan(opposite / adjacent); // Undo range reduction t = czm_branchFreeTernary(abs(y) > abs(x), czm_piOverTwo - t, t); t = czm_branchFreeTernary(x < 0.0, czm_pi - t, t); t = czm_branchFreeTernary(y < 0.0, -t, t); return t; } `;var KEn=x(T(),1),tv=`/** * Gets the color with fog at a distance from the camera. * * @name czm_fog * @glslFunction * * @param {float} distanceToCamera The distance to the camera in meters. * @param {vec3} color The original color. * @param {vec3} fogColor The color of the fog. * * @returns {vec3} The color adjusted for fog at the distance from the camera. */ vec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor) { float scalar = distanceToCamera * czm_fogDensity; float fog = 1.0 - exp(-(scalar * scalar)); return mix(color, fogColor, fog); } /** * Gets the color with fog at a distance from the camera. * * @name czm_fog * @glslFunction * * @param {float} distanceToCamera The distance to the camera in meters. * @param {vec3} color The original color. * @param {vec3} fogColor The color of the fog. * @param {float} fogModifierConstant A constant to modify the appearance of fog. * * @returns {vec3} The color adjusted for fog at the distance from the camera. */ vec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor, float fogModifierConstant) { float scalar = distanceToCamera * czm_fogDensity; float fog = 1.0 - exp(-((fogModifierConstant * scalar + fogModifierConstant) * (scalar * (1.0 + fogModifierConstant)))); return mix(color, fogColor, fog); } `;var jEn=x(T(),1),nv=`/** * Converts a color from RGB space to linear space. * * @name czm_gammaCorrect * @glslFunction * * @param {vec3} color The color in RGB space. * @returns {vec3} The color in linear space. */ vec3 czm_gammaCorrect(vec3 color) { #ifdef HDR color = pow(color, vec3(czm_gamma)); #endif return color; } vec4 czm_gammaCorrect(vec4 color) { #ifdef HDR color.rgb = pow(color.rgb, vec3(czm_gamma)); #endif return color; } `;var qEn=x(T(),1),iv=`/** * DOC_TBA * * @name czm_geodeticSurfaceNormal * @glslFunction * * @param {vec3} positionOnEllipsoid DOC_TBA * @param {vec3} ellipsoidCenter DOC_TBA * @param {vec3} oneOverEllipsoidRadiiSquared DOC_TBA * * @returns {vec3} DOC_TBA. */ vec3 czm_geodeticSurfaceNormal(vec3 positionOnEllipsoid, vec3 ellipsoidCenter, vec3 oneOverEllipsoidRadiiSquared) { return normalize((positionOnEllipsoid - ellipsoidCenter) * oneOverEllipsoidRadiiSquared); } `;var eLn=x(T(),1),ov=`/** * An czm_material with default values. Every material's czm_getMaterial * should use this default material as a base for the material it returns. * The default normal value is given by materialInput.normalEC. * * @name czm_getDefaultMaterial * @glslFunction * * @param {czm_materialInput} input The input used to construct the default material. * * @returns {czm_material} The default material. * * @see czm_materialInput * @see czm_material * @see czm_getMaterial */ czm_material czm_getDefaultMaterial(czm_materialInput materialInput) { czm_material material; material.diffuse = vec3(0.0); material.specular = 0.0; material.shininess = 1.0; material.normal = materialInput.normalEC; material.emission = vec3(0.0); material.alpha = 1.0; return material; } `;var nLn=x(T(),1),rv=`/** * Select which direction vector to use for dynamic atmosphere lighting based on an enum value * * @name czm_getDynamicAtmosphereLightDirection * @glslfunction * @see DynamicAtmosphereLightingType.js * * @param {vec3} positionWC the position of the vertex/fragment in world coordinates. This is normalized and returned when dynamic lighting is turned off. * @param {float} lightEnum The enum value for selecting between light sources. * @return {vec3} The normalized light direction vector. Depending on the enum value, it is either positionWC, czm_lightDirectionWC or czm_sunDirectionWC */ vec3 czm_getDynamicAtmosphereLightDirection(vec3 positionWC, float lightEnum) { const float NONE = 0.0; const float SCENE_LIGHT = 1.0; const float SUNLIGHT = 2.0; vec3 lightDirection = positionWC * float(lightEnum == NONE) + czm_lightDirectionWC * float(lightEnum == SCENE_LIGHT) + czm_sunDirectionWC * float(lightEnum == SUNLIGHT); return normalize(lightDirection); } `;var oLn=x(T(),1),sv=`/** * Calculates the intensity of diffusely reflected light. * * @name czm_getLambertDiffuse * @glslFunction * * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates. * @param {vec3} normalEC The surface normal in eye coordinates. * * @returns {float} The intensity of the diffuse reflection. * * @see czm_phong * * @example * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC); * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200); * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity); */ float czm_getLambertDiffuse(vec3 lightDirectionEC, vec3 normalEC) { return max(dot(lightDirectionEC, normalEC), 0.0); } `;var sLn=x(T(),1),av=`/** * Calculates the specular intensity of reflected light. * * @name czm_getSpecular * @glslFunction * * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates. * @param {vec3} toEyeEC Unit vector pointing to the eye position in eye coordinates. * @param {vec3} normalEC The surface normal in eye coordinates. * @param {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight. * * @returns {float} The intensity of the specular highlight. * * @see czm_phong * * @example * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC); * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200); * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity); */ float czm_getSpecular(vec3 lightDirectionEC, vec3 toEyeEC, vec3 normalEC, float shininess) { vec3 toReflectedLight = reflect(-lightDirectionEC, normalEC); float specular = max(dot(toReflectedLight, toEyeEC), 0.0); // pow has undefined behavior if both parameters <= 0. // Prevent this by making sure shininess is at least czm_epsilon2. return pow(specular, max(shininess, czm_epsilon2)); } `;var cLn=x(T(),1),cv=`/** * @private */ vec4 czm_getWaterNoise(sampler2D normalMap, vec2 uv, float time, float angleInRadians) { float cosAngle = cos(angleInRadians); float sinAngle = sin(angleInRadians); // time dependent sampling directions vec2 s0 = vec2(1.0/17.0, 0.0); vec2 s1 = vec2(-1.0/29.0, 0.0); vec2 s2 = vec2(1.0/101.0, 1.0/59.0); vec2 s3 = vec2(-1.0/109.0, -1.0/57.0); // rotate sampling direction by specified angle s0 = vec2((cosAngle * s0.x) - (sinAngle * s0.y), (sinAngle * s0.x) + (cosAngle * s0.y)); s1 = vec2((cosAngle * s1.x) - (sinAngle * s1.y), (sinAngle * s1.x) + (cosAngle * s1.y)); s2 = vec2((cosAngle * s2.x) - (sinAngle * s2.y), (sinAngle * s2.x) + (cosAngle * s2.y)); s3 = vec2((cosAngle * s3.x) - (sinAngle * s3.y), (sinAngle * s3.x) + (cosAngle * s3.y)); vec2 uv0 = (uv/103.0) + (time * s0); vec2 uv1 = uv/107.0 + (time * s1) + vec2(0.23); vec2 uv2 = uv/vec2(897.0, 983.0) + (time * s2) + vec2(0.51); vec2 uv3 = uv/vec2(991.0, 877.0) + (time * s3) + vec2(0.71); uv0 = fract(uv0); uv1 = fract(uv1); uv2 = fract(uv2); uv3 = fract(uv3); vec4 noise = (texture(normalMap, uv0)) + (texture(normalMap, uv1)) + (texture(normalMap, uv2)) + (texture(normalMap, uv3)); // average and scale to between -1 and 1 return ((noise / 4.0) - 0.5) * 2.0; } `;var dLn=x(T(),1),lv=`/** * Adjusts the hue of a color. * * @name czm_hue * @glslFunction * * @param {vec3} rgb The color. * @param {float} adjustment The amount to adjust the hue of the color in radians. * * @returns {float} The color with the hue adjusted. * * @example * vec3 adjustHue = czm_hue(color, czm_pi); // The same as czm_hue(color, -czm_pi) */ vec3 czm_hue(vec3 rgb, float adjustment) { const mat3 toYIQ = mat3(0.299, 0.587, 0.114, 0.595716, -0.274453, -0.321263, 0.211456, -0.522591, 0.311135); const mat3 toRGB = mat3(1.0, 0.9563, 0.6210, 1.0, -0.2721, -0.6474, 1.0, -1.107, 1.7046); vec3 yiq = toYIQ * rgb; float hue = atan(yiq.z, yiq.y) + adjustment; float chroma = sqrt(yiq.z * yiq.z + yiq.y * yiq.y); vec3 color = vec3(yiq.x, chroma * cos(hue), chroma * sin(hue)); return toRGB * color; } `;var mLn=x(T(),1),dv=`/** * Converts a color in linear space to RGB space. * * @name czm_inverseGamma * @glslFunction * * @param {vec3} color The color in linear space. * @returns {vec3} The color in RGB space. */ vec3 czm_inverseGamma(vec3 color) { return pow(color, vec3(1.0 / czm_gamma)); } `;var fLn=x(T(),1),uv=`/** * Determines if a time interval is empty. * * @name czm_isEmpty * @glslFunction * * @param {czm_raySegment} interval The interval to test. * * @returns {bool} true if the time interval is empty; otherwise, false. * * @example * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0. */ bool czm_isEmpty(czm_raySegment interval) { return (interval.stop < 0.0); } `;var bLn=x(T(),1),mv=`/** * Determines if a time interval is empty. * * @name czm_isFull * @glslFunction * * @param {czm_raySegment} interval The interval to test. * * @returns {bool} true if the time interval is empty; otherwise, false. * * @example * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0. */ bool czm_isFull(czm_raySegment interval) { return (interval.start == 0.0 && interval.stop == czm_infinity); } `;var yLn=x(T(),1),hv=`/** * Computes the fraction of a Web Wercator rectangle at which a given geodetic latitude is located. * * @name czm_latitudeToWebMercatorFraction * @glslFunction * * @param {float} latitude The geodetic latitude, in radians. * @param {float} southMercatorY The Web Mercator coordinate of the southern boundary of the rectangle. * @param {float} oneOverMercatorHeight The total height of the rectangle in Web Mercator coordinates. * * @returns {float} The fraction of the rectangle at which the latitude occurs. If the latitude is the southern * boundary of the rectangle, the return value will be zero. If it is the northern boundary, the return * value will be 1.0. Latitudes in between are mapped according to the Web Mercator projection. */ float czm_latitudeToWebMercatorFraction(float latitude, float southMercatorY, float oneOverMercatorHeight) { float sinLatitude = sin(latitude); float mercatorY = 0.5 * log((1.0 + sinLatitude) / (1.0 - sinLatitude)); return (mercatorY - southMercatorY) * oneOverMercatorHeight; } `;var TLn=x(T(),1),fv=`/** * Computes distance from an point in 2D to a line in 2D. * * @name czm_lineDistance * @glslFunction * * param {vec2} point1 A point along the line. * param {vec2} point2 A point along the line. * param {vec2} point A point that may or may not be on the line. * returns {float} The distance from the point to the line. */ float czm_lineDistance(vec2 point1, vec2 point2, vec2 point) { return abs((point2.y - point1.y) * point.x - (point2.x - point1.x) * point.y + point2.x * point1.y - point2.y * point1.x) / distance(point2, point1); } `;var SLn=x(T(),1),pv=`/** * Converts a linear RGB color to an sRGB color. * * @param {vec3|vec4} linearIn The color in linear color space. * @returns {vec3|vec4} The color in sRGB color space. The vector type matches the input. */ vec3 czm_linearToSrgb(vec3 linearIn) { return pow(linearIn, vec3(1.0/2.2)); } vec4 czm_linearToSrgb(vec4 linearIn) { vec3 srgbOut = pow(linearIn.rgb, vec3(1.0/2.2)); return vec4(srgbOut, linearIn.a); } `;var VLn=x(T(),1),bv=`/** * Computes the luminance of a color. * * @name czm_luminance * @glslFunction * * @param {vec3} rgb The color. * * @returns {float} The luminance. * * @example * float light = czm_luminance(vec3(0.0)); // 0.0 * float dark = czm_luminance(vec3(1.0)); // ~1.0 */ float czm_luminance(vec3 rgb) { // Algorithm from Chapter 10 of Graphics Shaders. const vec3 W = vec3(0.2125, 0.7154, 0.0721); return dot(rgb, W); } `;var RLn=x(T(),1),gv=`/** * Find the maximum component of a vector. * * @name czm_maximumComponent * @glslFunction * * @param {vec2|vec3|vec4} v The input vector. * @returns {float} The value of the largest component. */ float czm_maximumComponent(vec2 v) { return max(v.x, v.y); } float czm_maximumComponent(vec3 v) { return max(max(v.x, v.y), v.z); } float czm_maximumComponent(vec4 v) { return max(max(max(v.x, v.y), v.z), v.w); } `;var ALn=x(T(),1),yv=`/** * Computes the size of a pixel in meters at a distance from the eye. *

* Use this version when passing in a custom pixel ratio. For example, passing in 1.0 will return meters per native device pixel. *

* @name czm_metersPerPixel * @glslFunction * * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates. * @param {float} pixelRatio The scaling factor from pixel space to coordinate space * * @returns {float} The meters per pixel at positionEC. */ float czm_metersPerPixel(vec4 positionEC, float pixelRatio) { float width = czm_viewport.z; float height = czm_viewport.w; float pixelWidth; float pixelHeight; float top = czm_frustumPlanes.x; float bottom = czm_frustumPlanes.y; float left = czm_frustumPlanes.z; float right = czm_frustumPlanes.w; if (czm_sceneMode == czm_sceneMode2D || czm_orthographicIn3D == 1.0) { float frustumWidth = right - left; float frustumHeight = top - bottom; pixelWidth = frustumWidth / width; pixelHeight = frustumHeight / height; } else { float distanceToPixel = -positionEC.z; float inverseNear = 1.0 / czm_currentFrustum.x; float tanTheta = top * inverseNear; pixelHeight = 2.0 * distanceToPixel * tanTheta / height; tanTheta = right * inverseNear; pixelWidth = 2.0 * distanceToPixel * tanTheta / width; } return max(pixelWidth, pixelHeight) * pixelRatio; } /** * Computes the size of a pixel in meters at a distance from the eye. *

* Use this version when scaling by pixel ratio. *

* @name czm_metersPerPixel * @glslFunction * * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates. * * @returns {float} The meters per pixel at positionEC. */ float czm_metersPerPixel(vec4 positionEC) { return czm_metersPerPixel(positionEC, czm_pixelRatio); } `;var LLn=x(T(),1),xv=`/** * Transforms a position from model to window coordinates. The transformation * from model to clip coordinates is done using {@link czm_modelViewProjection}. * The transform from normalized device coordinates to window coordinates is * done using {@link czm_viewportTransformation}, which assumes a depth range * of near = 0 and far = 1. *

* This transform is useful when there is a need to manipulate window coordinates * in a vertex shader as done by {@link BillboardCollection}. *

* This function should not be confused with {@link czm_viewportOrthographic}, * which is an orthographic projection matrix that transforms from window * coordinates to clip coordinates. * * @name czm_modelToWindowCoordinates * @glslFunction * * @param {vec4} position The position in model coordinates to transform. * * @returns {vec4} The transformed position in window coordinates. * * @see czm_eyeToWindowCoordinates * @see czm_modelViewProjection * @see czm_viewportTransformation * @see czm_viewportOrthographic * @see BillboardCollection * * @example * vec4 positionWC = czm_modelToWindowCoordinates(positionMC); */ vec4 czm_modelToWindowCoordinates(vec4 position) { vec4 positionEC = czm_modelView * position; vec4 q = czm_projection * positionEC; q.xyz /= q.w; // normalized device coordinates q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates return q; } `;var vLn=x(T(),1),Tv=`/** * DOC_TBA * * @name czm_multiplyWithColorBalance * @glslFunction */ vec3 czm_multiplyWithColorBalance(vec3 left, vec3 right) { // Algorithm from Chapter 10 of Graphics Shaders. const vec3 W = vec3(0.2125, 0.7154, 0.0721); vec3 target = left * right; float leftLuminance = dot(left, W); float rightLuminance = dot(right, W); float targetLuminance = dot(target, W); return ((leftLuminance + rightLuminance) / (2.0 * targetLuminance)) * target; } `;var ILn=x(T(),1),_v=`/** * Computes a value that scales with distance. The scaling is clamped at the near and * far distances, and does not extrapolate. This function works with the * {@link NearFarScalar} JavaScript class. * * @name czm_nearFarScalar * @glslFunction * * @param {vec4} nearFarScalar A vector with 4 components: Near distance (x), Near value (y), Far distance (z), Far value (w). * @param {float} cameraDistSq The square of the current distance from the camera. * * @returns {float} The value at this distance. */ float czm_nearFarScalar(vec4 nearFarScalar, float cameraDistSq) { float valueAtMin = nearFarScalar.y; float valueAtMax = nearFarScalar.w; float nearDistanceSq = nearFarScalar.x * nearFarScalar.x; float farDistanceSq = nearFarScalar.z * nearFarScalar.z; float t = (cameraDistSq - nearDistanceSq) / (farDistanceSq - nearDistanceSq); t = pow(clamp(t, 0.0, 1.0), 0.2); return mix(valueAtMin, valueAtMax, t); } `;var XLn=x(T(),1),Sv=` /** * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors", * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/ * * @name czm_octDecode * @param {vec2} encoded The oct-encoded, unit-length vector * @param {float} range The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits. * @returns {vec3} The decoded and normalized vector */ vec3 czm_octDecode(vec2 encoded, float range) { if (encoded.x == 0.0 && encoded.y == 0.0) { return vec3(0.0, 0.0, 0.0); } encoded = encoded / range * 2.0 - 1.0; vec3 v = vec3(encoded.x, encoded.y, 1.0 - abs(encoded.x) - abs(encoded.y)); if (v.z < 0.0) { v.xy = (1.0 - abs(v.yx)) * czm_signNotZero(v.xy); } return normalize(v); } /** * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors", * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/ * * @name czm_octDecode * @param {vec2} encoded The oct-encoded, unit-length vector * @returns {vec3} The decoded and normalized vector */ vec3 czm_octDecode(vec2 encoded) { return czm_octDecode(encoded, 255.0); } /** * Decodes a unit-length vector in 'oct' encoding packed into a floating-point number to a normalized 3-component Cartesian vector. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors", * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/ * * @name czm_octDecode * @param {float} encoded The oct-encoded, unit-length vector * @returns {vec3} The decoded and normalized vector */ vec3 czm_octDecode(float encoded) { float temp = encoded / 256.0; float x = floor(temp); float y = (temp - x) * 256.0; return czm_octDecode(vec2(x, y)); } /** * Decodes three unit-length vectors in 'oct' encoding packed into two floating-point numbers to normalized 3-component Cartesian vectors. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors", * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/ * * @name czm_octDecode * @param {vec2} encoded The packed oct-encoded, unit-length vectors. * @param {vec3} vector1 One decoded and normalized vector. * @param {vec3} vector2 One decoded and normalized vector. * @param {vec3} vector3 One decoded and normalized vector. */ void czm_octDecode(vec2 encoded, out vec3 vector1, out vec3 vector2, out vec3 vector3) { float temp = encoded.x / 65536.0; float x = floor(temp); float encodedFloat1 = (temp - x) * 65536.0; temp = encoded.y / 65536.0; float y = floor(temp); float encodedFloat2 = (temp - y) * 65536.0; vector1 = czm_octDecode(encodedFloat1); vector2 = czm_octDecode(encodedFloat2); vector3 = czm_octDecode(vec2(x, y)); } `;var YLn=x(T(),1),Zv=`/** * Packs a depth value into a vec4 that can be represented by unsigned bytes. * * @name czm_packDepth * @glslFunction * * @param {float} depth The floating-point depth. * @returns {vec4} The packed depth. */ vec4 czm_packDepth(float depth) { // See Aras Pranckevi\u010Dius' post Encoding Floats to RGBA // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/ vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * depth; enc = fract(enc); enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0); return enc; } `;var MLn=x(T(),1),Vv=`vec3 lambertianDiffuse(vec3 diffuseColor) { return diffuseColor / czm_pi; } vec3 fresnelSchlick2(vec3 f0, vec3 f90, float VdotH) { float versine = 1.0 - VdotH; // pow(versine, 5.0) is slow. See https://stackoverflow.com/a/68793086/10082269 float versineSquared = versine * versine; return f0 + (f90 - f0) * versineSquared * versineSquared * versine; } #ifdef USE_ANISOTROPY /** * @param {float} bitangentRoughness Material roughness (along the anisotropy bitangent) * @param {float} tangentialRoughness Anisotropic roughness (along the anisotropy tangent) * @param {vec3} lightDirection The direction from the fragment to the light source, transformed to tangent-bitangent-normal coordinates * @param {vec3} viewDirection The direction from the fragment to the camera, transformed to tangent-bitangent-normal coordinates */ float smithVisibilityGGX_anisotropic(float bitangentRoughness, float tangentialRoughness, vec3 lightDirection, vec3 viewDirection) { vec3 roughnessScale = vec3(tangentialRoughness, bitangentRoughness, 1.0); float GGXV = lightDirection.z * length(roughnessScale * viewDirection); float GGXL = viewDirection.z * length(roughnessScale * lightDirection); float v = 0.5 / (GGXV + GGXL); return clamp(v, 0.0, 1.0); } /** * @param {float} bitangentRoughness Material roughness (along the anisotropy bitangent) * @param {float} tangentialRoughness Anisotropic roughness (along the anisotropy tangent) * @param {vec3} halfwayDirection The unit vector halfway between light and view directions, transformed to tangent-bitangent-normal coordinates */ float GGX_anisotropic(float bitangentRoughness, float tangentialRoughness, vec3 halfwayDirection) { float roughnessSquared = bitangentRoughness * tangentialRoughness; vec3 f = halfwayDirection * vec3(bitangentRoughness, tangentialRoughness, roughnessSquared); float w2 = roughnessSquared / dot(f, f); return roughnessSquared * w2 * w2 / czm_pi; } #endif /** * Estimate the geometric self-shadowing of the microfacets in a surface, * using the Smith Joint GGX visibility function. * Note: Vis = G / (4 * NdotL * NdotV) * see Eric Heitz. 2014. Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs. Journal of Computer Graphics Techniques, 3 * see Real-Time Rendering. Page 331 to 336. * see https://google.github.io/filament/Filament.md.html#materialsystem/specularbrdf/geometricshadowing(specularg) * * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness. * @param {float} NdotL The cosine of the angle between the surface normal and the direction to the light source. * @param {float} NdotV The cosine of the angle between the surface normal and the direction to the camera. */ float smithVisibilityGGX(float alphaRoughness, float NdotL, float NdotV) { float alphaRoughnessSq = alphaRoughness * alphaRoughness; float GGXV = NdotL * sqrt(NdotV * NdotV * (1.0 - alphaRoughnessSq) + alphaRoughnessSq); float GGXL = NdotV * sqrt(NdotL * NdotL * (1.0 - alphaRoughnessSq) + alphaRoughnessSq); float GGX = GGXV + GGXL; if (GGX > 0.0) { return 0.5 / GGX; } return 0.0; } /** * Estimate the fraction of the microfacets in a surface that are aligned with * the halfway vector, which is aligned halfway between the directions from * the fragment to the camera and from the fragment to the light source. * * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness. * @param {float} NdotH The cosine of the angle between the surface normal and the halfway vector. * @return {float} The fraction of microfacets aligned to the halfway vector. */ float GGX(float alphaRoughness, float NdotH) { float alphaRoughnessSquared = alphaRoughness * alphaRoughness; float f = (NdotH * alphaRoughnessSquared - NdotH) * NdotH + 1.0; return alphaRoughnessSquared / (czm_pi * f * f); } /** * Compute the strength of the specular reflection due to direct lighting. * * @param {vec3} normal The surface normal. * @param {vec3} lightDirection The unit vector pointing from the fragment to the light source. * @param {vec3} viewDirection The unit vector pointing from the fragment to the camera. * @param {vec3} halfwayDirection The unit vector pointing from the fragment to halfway between the light source and the camera. * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness. * @return {float} The strength of the specular reflection. */ float computeDirectSpecularStrength(vec3 normal, vec3 lightDirection, vec3 viewDirection, vec3 halfwayDirection, float alphaRoughness) { float NdotL = clamp(dot(normal, lightDirection), 0.0, 1.0); float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0); float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV); float NdotH = clamp(dot(normal, halfwayDirection), 0.0, 1.0); float D = GGX(alphaRoughness, NdotH); return G * D; } /** * Compute the diffuse and specular contributions using physically based * rendering. This function only handles direct lighting. *

* This function only handles the lighting calculations. Metallic/roughness * and specular/glossy must be handled separately. See {@MaterialStageFS} *

* * @name czm_pbrLighting * @glslFunction * * @param {vec3} viewDirectionEC Unit vector pointing from the fragment to the eye position * @param {vec3} normalEC The surface normal in eye coordinates * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates. * @param {czm_modelMaterial} The material properties. * @return {vec3} The computed HDR color */ vec3 czm_pbrLighting(vec3 viewDirectionEC, vec3 normalEC, vec3 lightDirectionEC, czm_modelMaterial material) { vec3 halfwayDirectionEC = normalize(viewDirectionEC + lightDirectionEC); float VdotH = clamp(dot(viewDirectionEC, halfwayDirectionEC), 0.0, 1.0); float NdotL = clamp(dot(normalEC, lightDirectionEC), 0.001, 1.0); vec3 f0 = material.specular; float reflectance = czm_maximumComponent(f0); // Typical dielectrics will have reflectance 0.04, so f90 will be 1.0. // In this case, at grazing angle, all incident energy is reflected. vec3 f90 = vec3(clamp(reflectance * 25.0, 0.0, 1.0)); vec3 F = fresnelSchlick2(f0, f90, VdotH); #if defined(USE_SPECULAR) F *= material.specularWeight; #endif float alphaRoughness = material.roughness * material.roughness; #ifdef USE_ANISOTROPY mat3 tbn = mat3(material.anisotropicT, material.anisotropicB, normalEC); vec3 lightDirection = lightDirectionEC * tbn; vec3 viewDirection = viewDirectionEC * tbn; vec3 halfwayDirection = halfwayDirectionEC * tbn; float anisotropyStrength = material.anisotropyStrength; float tangentialRoughness = mix(alphaRoughness, 1.0, anisotropyStrength * anisotropyStrength); float bitangentRoughness = clamp(alphaRoughness, 0.001, 1.0); float G = smithVisibilityGGX_anisotropic(bitangentRoughness, tangentialRoughness, lightDirection, viewDirection); float D = GGX_anisotropic(bitangentRoughness, tangentialRoughness, halfwayDirection); vec3 specularContribution = F * G * D; #else float specularStrength = computeDirectSpecularStrength(normalEC, lightDirectionEC, viewDirectionEC, halfwayDirectionEC, alphaRoughness); vec3 specularContribution = F * specularStrength; #endif vec3 diffuseColor = material.diffuse; // F here represents the specular contribution vec3 diffuseContribution = (1.0 - F) * lambertianDiffuse(diffuseColor); // Lo = (diffuse + specular) * Li * NdotL return (diffuseContribution + specularContribution) * NdotL; } `;var ULn=x(T(),1),Cv=`// KhronosGroup https://github.com/KhronosGroup/ToneMapping/tree/main/PBR_Neutral // Input color is non-negative and resides in the Linear Rec. 709 color space. // Output color is also Linear Rec. 709, but in the [0, 1] range. vec3 czm_pbrNeutralTonemapping(vec3 color) { const float startCompression = 0.8 - 0.04; const float desaturation = 0.15; float x = min(color.r, min(color.g, color.b)); float offset = czm_branchFreeTernary(x < 0.08, x - 6.25 * x * x, 0.04); color -= offset; float peak = max(color.r, max(color.g, color.b)); if (peak < startCompression) return color; const float d = 1.0 - startCompression; float newPeak = 1.0 - d * d / (peak + d - startCompression); color *= newPeak / peak; float g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0); return mix(color, newPeak * vec3(1.0, 1.0, 1.0), g); } `;var OLn=x(T(),1),Rv=`float czm_private_getLambertDiffuseOfMaterial(vec3 lightDirectionEC, czm_material material) { return czm_getLambertDiffuse(lightDirectionEC, material.normal); } float czm_private_getSpecularOfMaterial(vec3 lightDirectionEC, vec3 toEyeEC, czm_material material) { return czm_getSpecular(lightDirectionEC, toEyeEC, material.normal, material.shininess); } /** * Computes a color using the Phong lighting model. * * @name czm_phong * @glslFunction * * @param {vec3} toEye A normalized vector from the fragment to the eye in eye coordinates. * @param {czm_material} material The fragment's material. * * @returns {vec4} The computed color. * * @example * vec3 positionToEyeEC = // ... * czm_material material = // ... * vec3 lightDirectionEC = // ... * out_FragColor = czm_phong(normalize(positionToEyeEC), material, lightDirectionEC); * * @see czm_getMaterial */ vec4 czm_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC) { // Diffuse from directional light sources at eye (for top-down) float diffuse = czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 0.0, 1.0), material); if (czm_sceneMode == czm_sceneMode3D) { // (and horizon views in 3D) diffuse += czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 1.0, 0.0), material); } float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material); // Temporary workaround for adding ambient. vec3 materialDiffuse = material.diffuse * 0.5; vec3 ambient = materialDiffuse; vec3 color = ambient + material.emission; color += materialDiffuse * diffuse * czm_lightColor; color += material.specular * specular * czm_lightColor; return vec4(color, material.alpha); } vec4 czm_private_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC) { float diffuse = czm_private_getLambertDiffuseOfMaterial(lightDirectionEC, material); float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material); vec3 ambient = vec3(0.0); vec3 color = ambient + material.emission; color += material.diffuse * diffuse * czm_lightColor; color += material.specular * specular * czm_lightColor; return vec4(color, material.alpha); } `;var zLn=x(T(),1),Gv=`/** * Computes distance from a point to a plane. * * @name czm_planeDistance * @glslFunction * * param {vec4} plane A Plane in Hessian Normal Form. See Plane.js * param {vec3} point A point in the same space as the plane. * returns {float} The distance from the point to the plane. */ float czm_planeDistance(vec4 plane, vec3 point) { return (dot(plane.xyz, point) + plane.w); } /** * Computes distance from a point to a plane. * * @name czm_planeDistance * @glslFunction * * param {vec3} planeNormal Normal for a plane in Hessian Normal Form. See Plane.js * param {float} planeDistance Distance for a plane in Hessian Normal form. See Plane.js * param {vec3} point A point in the same space as the plane. * returns {float} The distance from the point to the plane. */ float czm_planeDistance(vec3 planeNormal, float planeDistance, vec3 point) { return (dot(planeNormal, point) + planeDistance); } `;var KLn=x(T(),1),Av=`/** * Computes the point along a ray at the given time. time can be positive, negative, or zero. * * @name czm_pointAlongRay * @glslFunction * * @param {czm_ray} ray The ray to compute the point along. * @param {float} time The time along the ray. * * @returns {vec3} The point along the ray at the given time. * * @example * czm_ray ray = czm_ray(vec3(0.0), vec3(1.0, 0.0, 0.0)); // origin, direction * vec3 v = czm_pointAlongRay(ray, 2.0); // (2.0, 0.0, 0.0) */ vec3 czm_pointAlongRay(czm_ray ray, float time) { return ray.origin + (time * ray.direction); } `;var jLn=x(T(),1),Ev=`/** * DOC_TBA * * @name czm_rayEllipsoidIntersectionInterval * @glslFunction */ czm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, vec3 ellipsoid_center, vec3 ellipsoid_inverseRadii) { // ray and ellipsoid center in eye coordinates. radii in model coordinates. vec3 q = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.origin, 1.0)).xyz; vec3 w = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.direction, 0.0)).xyz; q = q - ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ellipsoid_center, 1.0)).xyz; float q2 = dot(q, q); float qw = dot(q, w); if (q2 > 1.0) // Outside ellipsoid. { if (qw >= 0.0) // Looking outward or tangent (0 intersections). { return czm_emptyRaySegment; } else // qw < 0.0. { float qw2 = qw * qw; float difference = q2 - 1.0; // Positively valued. float w2 = dot(w, w); float product = w2 * difference; if (qw2 < product) // Imaginary roots (0 intersections). { return czm_emptyRaySegment; } else if (qw2 > product) // Distinct roots (2 intersections). { float discriminant = qw * qw - product; float temp = -qw + sqrt(discriminant); // Avoid cancellation. float root0 = temp / w2; float root1 = difference / temp; if (root0 < root1) { czm_raySegment i = czm_raySegment(root0, root1); return i; } else { czm_raySegment i = czm_raySegment(root1, root0); return i; } } else // qw2 == product. Repeated roots (2 intersections). { float root = sqrt(difference / w2); czm_raySegment i = czm_raySegment(root, root); return i; } } } else if (q2 < 1.0) // Inside ellipsoid (2 intersections). { float difference = q2 - 1.0; // Negatively valued. float w2 = dot(w, w); float product = w2 * difference; // Negatively valued. float discriminant = qw * qw - product; float temp = -qw + sqrt(discriminant); // Positively valued. czm_raySegment i = czm_raySegment(0.0, temp / w2); return i; } else // q2 == 1.0. On ellipsoid. { if (qw < 0.0) // Looking inward. { float w2 = dot(w, w); czm_raySegment i = czm_raySegment(0.0, -qw / w2); return i; } else // qw >= 0.0. Looking outward or tangent. { return czm_emptyRaySegment; } } } `;var qLn=x(T(),1),Lv=`/** * Compute the intersection interval of a ray with a sphere. * * @name czm_raySphereIntersectionInterval * @glslFunction * * @param {czm_ray} ray The ray. * @param {vec3} center The center of the sphere. * @param {float} radius The radius of the sphere. * @return {czm_raySegment} The intersection interval of the ray with the sphere. */ czm_raySegment czm_raySphereIntersectionInterval(czm_ray ray, vec3 center, float radius) { vec3 o = ray.origin; vec3 d = ray.direction; vec3 oc = o - center; float a = dot(d, d); float b = 2.0 * dot(d, oc); float c = dot(oc, oc) - (radius * radius); float det = (b * b) - (4.0 * a * c); if (det < 0.0) { return czm_emptyRaySegment; } float sqrtDet = sqrt(det); float t0 = (-b - sqrtDet) / (2.0 * a); float t1 = (-b + sqrtDet) / (2.0 * a); czm_raySegment result = czm_raySegment(t0, t1); return result; } `;var eWn=x(T(),1),Wv=`float czm_readDepth(sampler2D depthTexture, vec2 texCoords) { return czm_reverseLogDepth(texture(depthTexture, texCoords).r); } `;var nWn=x(T(),1),vv=`/** * Reads a value previously transformed with {@link czm_writeNonPerspective} * by dividing it by \`w\`, the value used in the perspective divide. * This function is intended to be called in a fragment shader to access a * \`varying\` that should not be subject to perspective interpolation. * For example, screen-space texture coordinates. The value should have been * previously written in the vertex shader with a call to * {@link czm_writeNonPerspective}. * * @name czm_readNonPerspective * @glslFunction * * @param {float|vec2|vec3|vec4} value The non-perspective value to be read. * @param {float} oneOverW One over the perspective divide value, \`w\`. Usually this is simply \`gl_FragCoord.w\`. * @returns {float|vec2|vec3|vec4} The usable value. */ float czm_readNonPerspective(float value, float oneOverW) { return value * oneOverW; } vec2 czm_readNonPerspective(vec2 value, float oneOverW) { return value * oneOverW; } vec3 czm_readNonPerspective(vec3 value, float oneOverW) { return value * oneOverW; } vec4 czm_readNonPerspective(vec4 value, float oneOverW) { return value * oneOverW; } `;var oWn=x(T(),1),Fv=`float czm_reverseLogDepth(float logZ) { #ifdef LOG_DEPTH float near = czm_currentFrustum.x; float far = czm_currentFrustum.y; float log2Depth = logZ * czm_log2FarDepthFromNearPlusOne; float depthFromNear = exp2(log2Depth) - 1.0; return far * (1.0 - near / (depthFromNear + near)) / (far - near); #endif return logZ; } `;var sWn=x(T(),1),Iv=`/** * Round a floating point value. This function exists because round() doesn't * exist in GLSL 1.00. * * @param {float|vec2|vec3|vec4} value The value to round * @param {float|vec2|vec3|vec3} The rounded value. The type matches the input. */ float czm_round(float value) { return floor(value + 0.5); } vec2 czm_round(vec2 value) { return floor(value + 0.5); } vec3 czm_round(vec3 value) { return floor(value + 0.5); } vec4 czm_round(vec4 value) { return floor(value + 0.5); } `;var cWn=x(T(),1),Pv=`/** * Adjusts the saturation of a color. * * @name czm_saturation * @glslFunction * * @param {vec3} rgb The color. * @param {float} adjustment The amount to adjust the saturation of the color. * * @returns {float} The color with the saturation adjusted. * * @example * vec3 greyScale = czm_saturation(color, 0.0); * vec3 doubleSaturation = czm_saturation(color, 2.0); */ vec3 czm_saturation(vec3 rgb, float adjustment) { // Algorithm from Chapter 16 of OpenGL Shading Language const vec3 W = vec3(0.2125, 0.7154, 0.0721); vec3 intensity = vec3(dot(rgb, W)); return mix(intensity, rgb, adjustment); } `;var dWn=x(T(),1),Xv=` float czm_sampleShadowMap(highp samplerCube shadowMap, vec3 d) { return czm_unpackDepth(czm_textureCube(shadowMap, d)); } float czm_sampleShadowMap(highp sampler2D shadowMap, vec2 uv) { #ifdef USE_SHADOW_DEPTH_TEXTURE return texture(shadowMap, uv).r; #else return czm_unpackDepth(texture(shadowMap, uv)); #endif } float czm_shadowDepthCompare(samplerCube shadowMap, vec3 uv, float depth) { return step(depth, czm_sampleShadowMap(shadowMap, uv)); } float czm_shadowDepthCompare(sampler2D shadowMap, vec2 uv, float depth) { return step(depth, czm_sampleShadowMap(shadowMap, uv)); } `;var mWn=x(T(),1),Nv=` float czm_private_shadowVisibility(float visibility, float nDotL, float normalShadingSmooth, float darkness) { #ifdef USE_NORMAL_SHADING #ifdef USE_NORMAL_SHADING_SMOOTH float strength = clamp(nDotL / normalShadingSmooth, 0.0, 1.0); #else float strength = step(0.0, nDotL); #endif visibility *= strength; #endif visibility = max(visibility, darkness); return visibility; } #ifdef USE_CUBE_MAP_SHADOW float czm_shadowVisibility(samplerCube shadowMap, czm_shadowParameters shadowParameters) { float depthBias = shadowParameters.depthBias; float depth = shadowParameters.depth; float nDotL = shadowParameters.nDotL; float normalShadingSmooth = shadowParameters.normalShadingSmooth; float darkness = shadowParameters.darkness; vec3 uvw = shadowParameters.texCoords; depth -= depthBias; float visibility = czm_shadowDepthCompare(shadowMap, uvw, depth); return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness); } #else float czm_shadowVisibility(sampler2D shadowMap, czm_shadowParameters shadowParameters) { float depthBias = shadowParameters.depthBias; float depth = shadowParameters.depth; float nDotL = shadowParameters.nDotL; float normalShadingSmooth = shadowParameters.normalShadingSmooth; float darkness = shadowParameters.darkness; vec2 uv = shadowParameters.texCoords; depth -= depthBias; #ifdef USE_SOFT_SHADOWS vec2 texelStepSize = shadowParameters.texelStepSize; float radius = 1.0; float dx0 = -texelStepSize.x * radius; float dy0 = -texelStepSize.y * radius; float dx1 = texelStepSize.x * radius; float dy1 = texelStepSize.y * radius; float visibility = ( czm_shadowDepthCompare(shadowMap, uv, depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy0), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy0), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy0), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, 0.0), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, 0.0), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy1), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy1), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy1), depth) ) * (1.0 / 9.0); #else float visibility = czm_shadowDepthCompare(shadowMap, uv, depth); #endif return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness); } #endif `;var fWn=x(T(),1),Yv=`/** * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative. This is similar to the GLSL * built-in function sign except that returns 1.0 instead of 0.0 when the input value is 0.0. * * @name czm_signNotZero * @glslFunction * * @param {} value The value for which to determine the sign. * @returns {} 1.0 if the value is positive or zero, -1.0 if the value is negative. */ float czm_signNotZero(float value) { return value >= 0.0 ? 1.0 : -1.0; } vec2 czm_signNotZero(vec2 value) { return vec2(czm_signNotZero(value.x), czm_signNotZero(value.y)); } vec3 czm_signNotZero(vec3 value) { return vec3(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z)); } vec4 czm_signNotZero(vec4 value) { return vec4(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z), czm_signNotZero(value.w)); } `;var bWn=x(T(),1),wv=`/** * Computes a color from the third order spherical harmonic coefficients and a normalized direction vector. *

* The order of the coefficients is [L00, L1_1, L10, L11, L2_2, L2_1, L20, L21, L22]. *

* * @name czm_sphericalHarmonics * @glslFunction * * @param {vec3} normal The normalized direction. * @param {vec3[9]} coefficients The third order spherical harmonic coefficients. * @returns {vec3} The color at the direction. * * @see https://graphics.stanford.edu/papers/envmap/envmap.pdf */ vec3 czm_sphericalHarmonics(vec3 normal, vec3 coefficients[9]) { vec3 L00 = coefficients[0]; vec3 L1_1 = coefficients[1]; vec3 L10 = coefficients[2]; vec3 L11 = coefficients[3]; vec3 L2_2 = coefficients[4]; vec3 L2_1 = coefficients[5]; vec3 L20 = coefficients[6]; vec3 L21 = coefficients[7]; vec3 L22 = coefficients[8]; float x = normal.x; float y = normal.y; float z = normal.z; vec3 L = L00 + L1_1 * y + L10 * z + L11 * x + L2_2 * (y * x) + L2_1 * (y * z) + L20 * (3.0 * z * z - 1.0) + L21 * (z * x) + L22 * (x * x - y * y); return max(L, vec3(0.0)); } `;var yWn=x(T(),1),Mv=`/** * Converts an sRGB color to a linear RGB color. * * @param {vec3|vec4} srgbIn The color in sRGB space * @returns {vec3|vec4} The color in linear color space. The vector type matches the input. */ vec3 czm_srgbToLinear(vec3 srgbIn) { return pow(srgbIn, vec3(2.2)); } vec4 czm_srgbToLinear(vec4 srgbIn) { vec3 linearOut = pow(srgbIn.rgb, vec3(2.2)); return vec4(linearOut, srgbIn.a); } `;var TWn=x(T(),1),kv=`/** * Creates a matrix that transforms vectors from tangent space to eye space. * * @name czm_tangentToEyeSpaceMatrix * @glslFunction * * @param {vec3} normalEC The normal vector in eye coordinates. * @param {vec3} tangentEC The tangent vector in eye coordinates. * @param {vec3} bitangentEC The bitangent vector in eye coordinates. * * @returns {mat3} The matrix that transforms from tangent space to eye space. * * @example * mat3 tangentToEye = czm_tangentToEyeSpaceMatrix(normalEC, tangentEC, bitangentEC); * vec3 normal = tangentToEye * texture(normalMap, st).xyz; */ mat3 czm_tangentToEyeSpaceMatrix(vec3 normalEC, vec3 tangentEC, vec3 bitangentEC) { vec3 normal = normalize(normalEC); vec3 tangent = normalize(tangentEC); vec3 bitangent = normalize(bitangentEC); return mat3(tangent.x , tangent.y , tangent.z, bitangent.x, bitangent.y, bitangent.z, normal.x , normal.y , normal.z); } `;var SWn=x(T(),1),Uv=`/** * A wrapper around the texture (WebGL2) / textureCube (WebGL1) * function to allow for WebGL 1 support. * * @name czm_textureCube * @glslFunction * * @param {samplerCube} sampler The sampler. * @param {vec3} p The coordinate at which to sample the texture. */ vec4 czm_textureCube(samplerCube sampler, vec3 p) { #if __VERSION__ == 300 return texture(sampler, p); #else return textureCube(sampler, p); #endif } /** * A wrapper around the textureLod (WebGL2) / textureCube (WebGL1) * function to allow for WebGL 1 support in fragment shaders. * * @name czm_textureCubeLod * @glslFunction * * @param {samplerCube} sampler The sampler. * @param {vec3} p The coordinate at which to sample the texture. * @param {float} lod The mipmap level from which to sample. */ vec4 czm_textureCube(samplerCube sampler, vec3 p, float lod) { #if __VERSION__ == 300 return textureLod(sampler, p, lod); #elif defined(GL_EXT_shader_texture_lod) return textureCubeLodEXT(sampler, p, lod); #endif }`;var VWn=x(T(),1),Dv=`/** * Transforms a plane. * * @name czm_transformPlane * @glslFunction * * @param {vec4} plane The plane in Hessian Normal Form. * @param {mat4} transform The inverse-transpose of a transformation matrix. */ vec4 czm_transformPlane(vec4 plane, mat4 transform) { vec4 transformedPlane = transform * plane; // Convert the transformed plane to Hessian Normal Form float normalMagnitude = length(transformedPlane.xyz); return transformedPlane / normalMagnitude; } `;var RWn=x(T(),1),Ov=`/** * Translates a position (or any vec3) that was encoded with {@link EncodedCartesian3}, * and then provided to the shader as separate high and low bits to * be relative to the eye. As shown in the example, the position can then be transformed in eye * or clip coordinates using {@link czm_modelViewRelativeToEye} or {@link czm_modelViewProjectionRelativeToEye}, * respectively. *

* This technique, called GPU RTE, eliminates jittering artifacts when using large coordinates as * described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}. *

* * @name czm_translateRelativeToEye * @glslFunction * * @param {vec3} high The position's high bits. * @param {vec3} low The position's low bits. * @returns {vec3} The position translated to be relative to the camera's position. * * @example * in vec3 positionHigh; * in vec3 positionLow; * * void main() * { * vec4 p = czm_translateRelativeToEye(positionHigh, positionLow); * gl_Position = czm_modelViewProjectionRelativeToEye * p; * } * * @see czm_modelViewRelativeToEye * @see czm_modelViewProjectionRelativeToEye * @see czm_computePosition * @see EncodedCartesian3 */ vec4 czm_translateRelativeToEye(vec3 high, vec3 low) { vec3 highDifference = high - czm_encodedCameraPositionMCHigh; // This check handles the case when NaN values have gotten into \`highDifference\`. // Such a thing could happen on devices running iOS. if (length(highDifference) == 0.0) { highDifference = vec3(0); } vec3 lowDifference = low - czm_encodedCameraPositionMCLow; return vec4(highDifference + lowDifference, 1.0); } `;var AWn=x(T(),1),Bv=`/** * @private */ vec4 czm_translucentPhong(vec3 toEye, czm_material material, vec3 lightDirectionEC) { // Diffuse from directional light sources at eye (for top-down and horizon views) float diffuse = czm_getLambertDiffuse(vec3(0.0, 0.0, 1.0), material.normal); if (czm_sceneMode == czm_sceneMode3D) { // (and horizon views in 3D) diffuse += czm_getLambertDiffuse(vec3(0.0, 1.0, 0.0), material.normal); } diffuse = clamp(diffuse, 0.0, 1.0); float specular = czm_getSpecular(lightDirectionEC, toEye, material.normal, material.shininess); // Temporary workaround for adding ambient. vec3 materialDiffuse = material.diffuse * 0.5; vec3 ambient = materialDiffuse; vec3 color = ambient + material.emission; color += materialDiffuse * diffuse * czm_lightColor; color += material.specular * specular * czm_lightColor; return vec4(color, material.alpha); } `;var LWn=x(T(),1),zv=`/** * Returns the transpose of the matrix. The input matrix can be * a mat2, mat3, or mat4. * * @name czm_transpose * @glslFunction * * @param {} matrix The matrix to transpose. * * @returns {} The transposed matrix. * * @example * // GLSL declarations * mat2 czm_transpose(mat2 matrix); * mat3 czm_transpose(mat3 matrix); * mat4 czm_transpose(mat4 matrix); * * // Transpose a 3x3 rotation matrix to find its inverse. * mat3 eastNorthUpToEye = czm_eastNorthUpToEyeCoordinates( * positionMC, normalEC); * mat3 eyeToEastNorthUp = czm_transpose(eastNorthUpToEye); */ mat2 czm_transpose(mat2 matrix) { return mat2( matrix[0][0], matrix[1][0], matrix[0][1], matrix[1][1]); } mat3 czm_transpose(mat3 matrix) { return mat3( matrix[0][0], matrix[1][0], matrix[2][0], matrix[0][1], matrix[1][1], matrix[2][1], matrix[0][2], matrix[1][2], matrix[2][2]); } mat4 czm_transpose(mat4 matrix) { return mat4( matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0], matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1], matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2], matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]); } `;var vWn=x(T(),1),Hv=`vec2 getLookupUv(vec2 dimensions, int i) { int pixY = i / int(dimensions.x); int pixX = i - (pixY * int(dimensions.x)); float pixelWidth = 1.0 / dimensions.x; float pixelHeight = 1.0 / dimensions.y; float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel float v = (float(pixY) + 0.5) * pixelHeight; return vec2(u, v); } vec4 czm_unpackClippingExtents(highp sampler2D extentsTexture, int index) { vec2 textureDimensions = vec2(textureSize(extentsTexture, 0)); return texture(extentsTexture, getLookupUv(textureDimensions, index)); }`;var IWn=x(T(),1),Kv=`/** * Unpacks a vec4 depth value to a float in [0, 1) range. * * @name czm_unpackDepth * @glslFunction * * @param {vec4} packedDepth The packed depth. * * @returns {float} The floating-point depth in [0, 1) range. */ float czm_unpackDepth(vec4 packedDepth) { // See Aras Pranckevi\u010Dius' post Encoding Floats to RGBA // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/ return dot(packedDepth, vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)); } `;var XWn=x(T(),1),Jv=`/** * Unpack an IEEE 754 single-precision float that is packed as a little-endian unsigned normalized vec4. * * @name czm_unpackFloat * @glslFunction * * @param {vec4} packedFloat The packed float. * * @returns {float} The floating-point depth in arbitrary range. */ float czm_unpackFloat(vec4 packedFloat) { // Convert to [0.0, 255.0] and round to integer packedFloat = floor(packedFloat * 255.0 + 0.5); float sign = 1.0 - step(128.0, packedFloat[3]) * 2.0; float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0; if (exponent == -127.0) { return 0.0; } float mantissa = mod(packedFloat[2], 128.0) * 65536.0 + packedFloat[1] * 256.0 + packedFloat[0] + float(0x800000); float result = sign * exp2(exponent - 23.0) * mantissa; return result; } `;var YWn=x(T(),1),jv=`/** * Useful for reinterpreting texture data as higher-precision values. * Only works correctly in WebGL 2, which supports the uint type and bitwise operations. * * @param {float|vec2|vec3|vec4} 1-4 values from a texture lookup (RGBA channels), normalized to [0.0, 1.0]. * @return {uint} Raw bits as an unsigned integer. */ uint czm_unpackTexture(float packedValue) { float rounded = czm_round(packedValue * 255.0); return uint(rounded); } uint czm_unpackTexture(vec2 packedValue) { vec2 rounded = czm_round(packedValue * 255.0); uint byte0 = uint(rounded.x); uint byte1 = uint(rounded.y); return byte0 | (byte1 << 8); } uint czm_unpackTexture(vec3 packedValue) { vec3 rounded = czm_round(packedValue * 255.0); uint byte0 = uint(rounded.x); uint byte1 = uint(rounded.y); uint byte2 = uint(rounded.z); return byte0 | (byte1 << 8) | (byte2 << 16); } uint czm_unpackTexture(vec4 packedValue) { vec4 rounded = czm_round(packedValue * 255.0); uint byte0 = uint(rounded.x); uint byte1 = uint(rounded.y); uint byte2 = uint(rounded.z); uint byte3 = uint(rounded.w); return byte0 | (byte1 << 8) | (byte2 << 16) | (byte3 << 24); } `;var MWn=x(T(),1),Qv=`/** * Unpack unsigned integers of 1-4 bytes. in WebGL 1, there is no uint type, * so the return value is an int. *

* There are also precision limitations in WebGL 1. highp int is still limited * to 24 bits. Above the value of 2^24 = 16777216, precision loss may occur. *

* * @param {float|vec2|vec3|vec4} packed The packed value. For vectors, the components are listed in little-endian order. * * @return {int} The unpacked value. */ int czm_unpackUint(float packedValue) { float rounded = czm_round(packedValue * 255.0); return int(rounded); } int czm_unpackUint(vec2 packedValue) { vec2 rounded = czm_round(packedValue * 255.0); return int(dot(rounded, vec2(1.0, 256.0))); } int czm_unpackUint(vec3 packedValue) { vec3 rounded = czm_round(packedValue * 255.0); return int(dot(rounded, vec3(1.0, 256.0, 65536.0))); } int czm_unpackUint(vec4 packedValue) { vec4 rounded = czm_round(packedValue * 255.0); return int(dot(rounded, vec4(1.0, 256.0, 65536.0, 16777216.0))); } `;var UWn=x(T(),1),qv=`/** * Transform metadata values following the EXT_structural_metadata spec * by multiplying by scale and adding the offset. Operations are always * performed component-wise, even for matrices. * * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} offset The offset to add * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} scale The scale factor to multiply * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} value The original value. * * @return {float|vec2|vec3|vec4|mat2|mat3|mat4} The transformed value of the same scalar/vector/matrix type as the input. */ float czm_valueTransform(float offset, float scale, float value) { return scale * value + offset; } vec2 czm_valueTransform(vec2 offset, vec2 scale, vec2 value) { return scale * value + offset; } vec3 czm_valueTransform(vec3 offset, vec3 scale, vec3 value) { return scale * value + offset; } vec4 czm_valueTransform(vec4 offset, vec4 scale, vec4 value) { return scale * value + offset; } mat2 czm_valueTransform(mat2 offset, mat2 scale, mat2 value) { return matrixCompMult(scale, value) + offset; } mat3 czm_valueTransform(mat3 offset, mat3 scale, mat3 value) { return matrixCompMult(scale, value) + offset; } mat4 czm_valueTransform(mat4 offset, mat4 scale, mat4 value) { return matrixCompMult(scale, value) + offset; } `;var OWn=x(T(),1),$v=`#ifdef LOG_DEPTH // 1.0 at the near plane, increasing linearly from there. out float v_depthFromNearPlusOne; #ifdef SHADOW_MAP out vec3 v_logPositionEC; #endif #endif vec4 czm_updatePositionDepth(vec4 coords) { #if defined(LOG_DEPTH) #ifdef SHADOW_MAP vec3 logPositionEC = (czm_inverseProjection * coords).xyz; v_logPositionEC = logPositionEC; #endif // With the very high far/near ratios used with the logarithmic depth // buffer, floating point rounding errors can cause linear depth values // to end up on the wrong side of the far plane, even for vertices that // are really nowhere near it. Since we always write a correct logarithmic // depth value in the fragment shader anyway, we just need to make sure // such errors don't cause the primitive to be clipped entirely before // we even get to the fragment shader. coords.z = clamp(coords.z / coords.w, -1.0, 1.0) * coords.w; #endif return coords; } /** * Writes the logarithmic depth to gl_Position using the already computed gl_Position. * * @name czm_vertexLogDepth * @glslFunction */ void czm_vertexLogDepth() { #ifdef LOG_DEPTH v_depthFromNearPlusOne = (gl_Position.w - czm_currentFrustum.x) + 1.0; gl_Position = czm_updatePositionDepth(gl_Position); #endif } /** * Writes the logarithmic depth to gl_Position using the provided clip coordinates. *

* An example use case for this function would be moving the vertex in window coordinates * before converting back to clip coordinates. Use the original vertex clip coordinates. *

* @name czm_vertexLogDepth * @glslFunction * * @param {vec4} clipCoords The vertex in clip coordinates. * * @example * czm_vertexLogDepth(czm_projection * vec4(positionEyeCoordinates, 1.0)); */ void czm_vertexLogDepth(vec4 clipCoords) { #ifdef LOG_DEPTH v_depthFromNearPlusOne = (clipCoords.w - czm_currentFrustum.x) + 1.0; czm_updatePositionDepth(clipCoords); #endif } `;var zWn=x(T(),1),e2=`vec4 czm_screenToEyeCoordinates(vec4 screenCoordinate) { // Reconstruct NDC coordinates float x = 2.0 * screenCoordinate.x - 1.0; float y = 2.0 * screenCoordinate.y - 1.0; float z = (screenCoordinate.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2]; vec4 q = vec4(x, y, z, 1.0); // Reverse the perspective division to obtain clip coordinates. q /= screenCoordinate.w; // Reverse the projection transformation to obtain eye coordinates. if (!(czm_inverseProjection == mat4(0.0))) // IE and Edge sometimes do something weird with != between mat4s { q = czm_inverseProjection * q; } else { float top = czm_frustumPlanes.x; float bottom = czm_frustumPlanes.y; float left = czm_frustumPlanes.z; float right = czm_frustumPlanes.w; float near = czm_currentFrustum.x; float far = czm_currentFrustum.y; q.x = (q.x * (right - left) + left + right) * 0.5; q.y = (q.y * (top - bottom) + bottom + top) * 0.5; q.z = (q.z * (near - far) - near - far) * 0.5; q.w = 1.0; } return q; } /** * Transforms a position from window to eye coordinates. * The transform from window to normalized device coordinates is done using components * of (@link czm_viewport} and {@link czm_viewportTransformation} instead of calculating * the inverse of czm_viewportTransformation. The transformation from * normalized device coordinates to clip coordinates is done using fragmentCoordinate.w, * which is expected to be the scalar used in the perspective divide. The transformation * from clip to eye coordinates is done using {@link czm_inverseProjection}. * * @name czm_windowToEyeCoordinates * @glslFunction * * @param {vec4} fragmentCoordinate The position in window coordinates to transform. * * @returns {vec4} The transformed position in eye coordinates. * * @see czm_modelToWindowCoordinates * @see czm_eyeToWindowCoordinates * @see czm_inverseProjection * @see czm_viewport * @see czm_viewportTransformation * * @example * vec4 positionEC = czm_windowToEyeCoordinates(gl_FragCoord); */ vec4 czm_windowToEyeCoordinates(vec4 fragmentCoordinate) { vec2 screenCoordXY = (fragmentCoordinate.xy - czm_viewport.xy) / czm_viewport.zw; return czm_screenToEyeCoordinates(vec4(screenCoordXY, fragmentCoordinate.zw)); } vec4 czm_screenToEyeCoordinates(vec2 screenCoordinateXY, float depthOrLogDepth) { // See reverseLogDepth.glsl. This is separate to re-use the pow. #if defined(LOG_DEPTH) || defined(LOG_DEPTH_READ_ONLY) float near = czm_currentFrustum.x; float far = czm_currentFrustum.y; float log2Depth = depthOrLogDepth * czm_log2FarDepthFromNearPlusOne; float depthFromNear = exp2(log2Depth) - 1.0; float depthFromCamera = depthFromNear + near; vec4 screenCoord = vec4(screenCoordinateXY, far * (1.0 - near / depthFromCamera) / (far - near), 1.0); vec4 eyeCoordinate = czm_screenToEyeCoordinates(screenCoord); eyeCoordinate.w = 1.0 / depthFromCamera; // Better precision #else vec4 screenCoord = vec4(screenCoordinateXY, depthOrLogDepth, 1.0); vec4 eyeCoordinate = czm_screenToEyeCoordinates(screenCoord); #endif return eyeCoordinate; } /** * Transforms a position given as window x/y and a depth or a log depth from window to eye coordinates. * This function produces more accurate results for window positions with log depth than * conventionally unpacking the log depth using czm_reverseLogDepth and using the standard version * of czm_windowToEyeCoordinates. * * @name czm_windowToEyeCoordinates * @glslFunction * * @param {vec2} fragmentCoordinateXY The XY position in window coordinates to transform. * @param {float} depthOrLogDepth A depth or log depth for the fragment. * * @see czm_modelToWindowCoordinates * @see czm_eyeToWindowCoordinates * @see czm_inverseProjection * @see czm_viewport * @see czm_viewportTransformation * * @returns {vec4} The transformed position in eye coordinates. */ vec4 czm_windowToEyeCoordinates(vec2 fragmentCoordinateXY, float depthOrLogDepth) { vec2 screenCoordXY = (fragmentCoordinateXY.xy - czm_viewport.xy) / czm_viewport.zw; return czm_screenToEyeCoordinates(screenCoordXY, depthOrLogDepth); } `;var KWn=x(T(),1),t2=`// emulated noperspective #if !defined(LOG_DEPTH) in float v_WindowZ; #endif /** * Emulates GL_DEPTH_CLAMP. Clamps a fragment to the near and far plane * by writing the fragment's depth. See czm_depthClamp for more details. * * @name czm_writeDepthClamp * @glslFunction * * @example * out_FragColor = color; * czm_writeDepthClamp(); * * @see czm_depthClamp */ void czm_writeDepthClamp() { #if (!defined(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth))) gl_FragDepth = clamp(v_WindowZ * gl_FragCoord.w, 0.0, 1.0); #endif } `;var jWn=x(T(),1),n2=`#ifdef LOG_DEPTH in float v_depthFromNearPlusOne; #ifdef POLYGON_OFFSET uniform vec2 u_polygonOffset; #endif #endif /** * Writes the fragment depth to the logarithmic depth buffer. *

* Use this when the vertex shader does not call {@link czm_vertexLogDepth}, for example, when * ray-casting geometry using a full screen quad. *

* @name czm_writeLogDepth * @glslFunction * * @param {float} depth The depth coordinate, where 1.0 is on the near plane and * depth increases in eye-space units from there * * @example * czm_writeLogDepth((czm_projection * v_positionEyeCoordinates).w + 1.0); */ void czm_writeLogDepth(float depth) { #if (defined(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth))) // Discard the vertex if it's not between the near and far planes. // We allow a bit of epsilon on the near plane comparison because a 1.0 // from the vertex shader (indicating the vertex should be _on_ the near // plane) will not necessarily come here as exactly 1.0. if (depth <= 0.9999999 || depth > czm_farDepthFromNearPlusOne) { discard; } #ifdef POLYGON_OFFSET // Polygon offset: m * factor + r * units float factor = u_polygonOffset[0]; float units = u_polygonOffset[1]; #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) // This factor doesn't work in IE 10 if (factor != 0.0) { // m = sqrt(dZdX^2 + dZdY^2); float x = dFdx(depth); float y = dFdy(depth); float m = sqrt(x * x + y * y); // Apply the factor before computing the log depth. depth += m * factor; } #endif #endif gl_FragDepth = log2(depth) * czm_oneOverLog2FarDepthFromNearPlusOne; #ifdef POLYGON_OFFSET // Apply the units after the log depth. gl_FragDepth += czm_epsilon7 * units; #endif #endif } /** * Writes the fragment depth to the logarithmic depth buffer. *

* Use this when the vertex shader calls {@link czm_vertexLogDepth}. *

* * @name czm_writeLogDepth * @glslFunction */ void czm_writeLogDepth() { #ifdef LOG_DEPTH czm_writeLogDepth(v_depthFromNearPlusOne); #endif } `;var qWn=x(T(),1),i2=`/** * Transforms a value for non-perspective interpolation by multiplying * it by w, the value used in the perspective divide. This function is * intended to be called in a vertex shader to compute the value of a * \`varying\` that should not be subject to perspective interpolation. * For example, screen-space texture coordinates. The fragment shader * must call {@link czm_readNonPerspective} to retrieve the final * non-perspective value. * * @name czm_writeNonPerspective * @glslFunction * * @param {float|vec2|vec3|vec4} value The value to be interpolated without accounting for perspective. * @param {float} w The perspective divide value. Usually this is the computed \`gl_Position.w\`. * @returns {float|vec2|vec3|vec4} The transformed value, intended to be stored in a \`varying\` and read in the * fragment shader with {@link czm_readNonPerspective}. */ float czm_writeNonPerspective(float value, float w) { return value * w; } vec2 czm_writeNonPerspective(vec2 value, float w) { return value * w; } vec3 czm_writeNonPerspective(vec3 value, float w) { return value * w; } vec4 czm_writeNonPerspective(vec4 value, float w) { return value * w; } `;var T_={czm_degreesPerRadian:ZL,czm_depthRange:VL,czm_epsilon1:CL,czm_epsilon2:RL,czm_epsilon3:GL,czm_epsilon4:AL,czm_epsilon5:EL,czm_epsilon6:LL,czm_epsilon7:WL,czm_infinity:vL,czm_oneOverPi:FL,czm_oneOverTwoPi:IL,czm_passCesium3DTile:PL,czm_passCesium3DTileClassification:XL,czm_passCesium3DTileClassificationIgnoreShow:NL,czm_passCesium3DTileEdges:YL,czm_passCesium3DTileEdgesDirect:wL,czm_passCesium3DTilePlanarFillId:ML,czm_passClassification:kL,czm_passCompute:UL,czm_passEnvironment:DL,czm_passGaussianSplats:OL,czm_passGlobe:BL,czm_passOpaque:zL,czm_passOverlay:HL,czm_passTerrainClassification:KL,czm_passTranslucent:JL,czm_passVoxels:jL,czm_pi:QL,czm_piOverFour:qL,czm_piOverSix:$L,czm_piOverThree:eW,czm_piOverTwo:tW,czm_radiansPerDegree:nW,czm_sceneMode2D:iW,czm_sceneMode3D:oW,czm_sceneModeColumbusView:rW,czm_sceneModeMorphing:sW,czm_solarRadius:aW,czm_threePiOver2:cW,czm_twoPi:lW,czm_webMercatorMaxLatitude:dW,czm_depthRangeStruct:uW,czm_material:mW,czm_materialInput:hW,czm_modelMaterial:fW,czm_modelVertexOutput:pW,czm_ray:bW,czm_raySegment:gW,czm_shadowParameters:yW,czm_HSBToRGB:xW,czm_HSLToRGB:TW,czm_RGBToHSB:_W,czm_RGBToHSL:SW,czm_RGBToXYZ:ZW,czm_XYZToRGB:VW,czm_acesTonemapping:CW,czm_alphaWeight:RW,czm_antialias:GW,czm_applyHSBShift:AW,czm_approximateSphericalCoordinates:EW,czm_approximateTanh:LW,czm_backFacing:WW,czm_branchFreeTernary:vW,czm_cascadeColor:FW,czm_cascadeDistance:IW,czm_cascadeMatrix:PW,czm_cascadeWeights:XW,czm_clipPolygons:NW,czm_columbusViewMorph:YW,czm_computeAtmosphereColor:wW,czm_computeGroundAtmosphereScattering:MW,czm_computePosition:kW,czm_computeScattering:UW,czm_computeTextureTransform:DW,czm_cosineAndSine:OW,czm_decodeRGB8:BW,czm_decompressTextureCoordinates:zW,czm_depthClamp:HW,czm_eastNorthUpToEyeCoordinates:KW,czm_ellipsoidContainsPoint:JW,czm_ellipsoidTextureCoordinates:jW,czm_equalsEpsilon:QW,czm_eyeOffset:qW,czm_eyeToWindowCoordinates:$W,czm_fastApproximateAtan:ev,czm_fog:tv,czm_gammaCorrect:nv,czm_geodeticSurfaceNormal:iv,czm_getDefaultMaterial:ov,czm_getDynamicAtmosphereLightDirection:rv,czm_getLambertDiffuse:sv,czm_getSpecular:av,czm_getWaterNoise:cv,czm_hue:lv,czm_inverseGamma:dv,czm_isEmpty:uv,czm_isFull:mv,czm_latitudeToWebMercatorFraction:hv,czm_lineDistance:fv,czm_linearToSrgb:pv,czm_luminance:bv,czm_maximumComponent:gv,czm_metersPerPixel:yv,czm_modelToWindowCoordinates:xv,czm_multiplyWithColorBalance:Tv,czm_nearFarScalar:_v,czm_octDecode:Sv,czm_packDepth:Zv,czm_pbrLighting:Vv,czm_pbrNeutralTonemapping:Cv,czm_phong:Rv,czm_planeDistance:Gv,czm_pointAlongRay:Av,czm_rayEllipsoidIntersectionInterval:Ev,czm_raySphereIntersectionInterval:Lv,czm_readDepth:Wv,czm_readNonPerspective:vv,czm_reverseLogDepth:Fv,czm_round:Iv,czm_saturation:Pv,czm_shadowDepthCompare:Xv,czm_shadowVisibility:Nv,czm_signNotZero:Yv,czm_sphericalHarmonics:wv,czm_srgbToLinear:Mv,czm_tangentToEyeSpaceMatrix:kv,czm_textureCube:Uv,czm_transformPlane:Dv,czm_translateRelativeToEye:Ov,czm_translucentPhong:Bv,czm_transpose:zv,czm_unpackClippingExtents:Hv,czm_unpackDepth:Kv,czm_unpackFloat:Jv,czm_unpackTexture:jv,czm_unpackUint:Qv,czm_valueTransform:qv,czm_vertexLogDepth:$v,czm_windowToEyeCoordinates:e2,czm_writeDepthClamp:t2,czm_writeLogDepth:n2,czm_writeNonPerspective:i2};var MFn=x(T(),1);var o4e=new h;function Yt(e){this._size=e.size,this._datatype=e.datatype,this.getValue=e.getValue}var oc={};oc[ne.FLOAT]="float";oc[ne.FLOAT_VEC2]="vec2";oc[ne.FLOAT_VEC3]="vec3";oc[ne.FLOAT_VEC4]="vec4";oc[ne.INT]="int";oc[ne.INT_VEC2]="ivec2";oc[ne.INT_VEC3]="ivec3";oc[ne.INT_VEC4]="ivec4";oc[ne.BOOL]="bool";oc[ne.BOOL_VEC2]="bvec2";oc[ne.BOOL_VEC3]="bvec3";oc[ne.BOOL_VEC4]="bvec4";oc[ne.FLOAT_MAT2]="mat2";oc[ne.FLOAT_MAT3]="mat3";oc[ne.FLOAT_MAT4]="mat4";oc[ne.SAMPLER_2D]="sampler2D";oc[ne.SAMPLER_CUBE]="samplerCube";Yt.prototype.getDeclaration=function(e){let t=`uniform ${oc[this._datatype]} ${e}`,n=this._size;return n===1?t+=";":t+=`[${n.toString()}];`,t};var r4e={czm_viewport:new Yt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.viewportCartesian4}}),czm_viewportOrthographic:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.viewportOrthographic}}),czm_viewportTransformation:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.viewportTransformation}}),czm_globeDepthTexture:new Yt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.globeDepthTexture}}),czm_edgeIdTexture:new Yt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.edgeIdTexture}}),czm_edgeColorTexture:new Yt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.edgeColorTexture}}),czm_edgeDepthTexture:new Yt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.edgeDepthTexture}}),czm_planarFillIdTexture:new Yt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.planarFillIdTexture}}),czm_model:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.model}}),czm_inverseModel:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModel}}),czm_view:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.view}}),czm_view3D:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.view3D}}),czm_viewRotation:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.viewRotation}}),czm_viewRotation3D:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.viewRotation3D}}),czm_inverseView:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseView}}),czm_inverseView3D:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseView3D}}),czm_inverseViewRotation:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseViewRotation}}),czm_inverseViewRotation3D:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseViewRotation3D}}),czm_projection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.projection}}),czm_inverseProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseProjection}}),czm_infiniteProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.infiniteProjection}}),czm_modelView:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelView}}),czm_modelView3D:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelView3D}}),czm_modelViewRelativeToEye:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewRelativeToEye}}),czm_inverseModelView:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModelView}}),czm_inverseModelView3D:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModelView3D}}),czm_viewProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.viewProjection}}),czm_inverseViewProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseViewProjection}}),czm_modelViewProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewProjection}}),czm_inverseModelViewProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModelViewProjection}}),czm_modelViewProjectionRelativeToEye:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewProjectionRelativeToEye}}),czm_modelViewInfiniteProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewInfiniteProjection}}),czm_orthographicIn3D:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.orthographicIn3D?1:0}}),czm_normal:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.normal}}),czm_normal3D:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.normal3D}}),czm_inverseNormal:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseNormal}}),czm_inverseNormal3D:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseNormal3D}}),czm_eyeHeight:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.eyeHeight}}),czm_eyeHeight2D:new Yt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.eyeHeight2D}}),czm_eyeEllipsoidNormalEC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.eyeEllipsoidNormalEC}}),czm_eyeEllipsoidCurvature:new Yt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.eyeEllipsoidCurvature}}),czm_modelToEnu:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelToEnu}}),czm_enuToModel:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.enuToModel}}),czm_entireFrustum:new Yt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.entireFrustum}}),czm_currentFrustum:new Yt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.currentFrustum}}),czm_frustumPlanes:new Yt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.frustumPlanes}}),czm_farDepthFromNearPlusOne:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.farDepthFromNearPlusOne}}),czm_log2FarDepthFromNearPlusOne:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.log2FarDepthFromNearPlusOne}}),czm_oneOverLog2FarDepthFromNearPlusOne:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.oneOverLog2FarDepthFromNearPlusOne}}),czm_sunPositionWC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunPositionWC}}),czm_sunPositionColumbusView:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunPositionColumbusView}}),czm_sunDirectionEC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunDirectionEC}}),czm_sunDirectionWC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunDirectionWC}}),czm_moonDirectionEC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.moonDirectionEC}}),czm_lightDirectionEC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightDirectionEC}}),czm_lightDirectionWC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightDirectionWC}}),czm_lightColor:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightColor}}),czm_lightColorHdr:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightColorHdr}}),czm_encodedCameraPositionMCHigh:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.encodedCameraPositionMCHigh}}),czm_encodedCameraPositionMCLow:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.encodedCameraPositionMCLow}}),czm_viewerPositionWC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return I.getTranslation(e.inverseView,o4e)}}),czm_frameNumber:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.frameState.frameNumber}}),czm_morphTime:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.frameState.morphTime}}),czm_sceneMode:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.frameState.mode}}),czm_pass:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.pass}}),czm_backgroundColor:new Yt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.backgroundColor}}),czm_brdfLut:new Yt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.brdfLut}}),czm_environmentMap:new Yt({size:1,datatype:ne.SAMPLER_CUBE,getValue:function(e){return e.environmentMap}}),czm_specularEnvironmentMaps:new Yt({size:1,datatype:ne.SAMPLER_CUBE,getValue:function(e){return e.specularEnvironmentMaps}}),czm_specularEnvironmentMapsMaximumLOD:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.specularEnvironmentMapsMaximumLOD}}),czm_sphericalHarmonicCoefficients:new Yt({size:9,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sphericalHarmonicCoefficients}}),czm_temeToPseudoFixed:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.temeToPseudoFixedMatrix}}),czm_pixelRatio:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.pixelRatio}}),czm_fogDensity:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.fogDensity}}),czm_fogVisualDensityScalar:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.fogVisualDensityScalar}}),czm_fogMinimumBrightness:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.fogMinimumBrightness}}),czm_atmosphereHsbShift:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.atmosphereHsbShift}}),czm_atmosphereLightIntensity:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.atmosphereLightIntensity}}),czm_atmosphereRayleighCoefficient:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.atmosphereRayleighCoefficient}}),czm_atmosphereRayleighScaleHeight:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.atmosphereRayleighScaleHeight}}),czm_atmosphereMieCoefficient:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.atmosphereMieCoefficient}}),czm_atmosphereMieScaleHeight:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.atmosphereMieScaleHeight}}),czm_atmosphereMieAnisotropy:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.atmosphereMieAnisotropy}}),czm_atmosphereDynamicLighting:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.atmosphereDynamicLighting}}),czm_splitPosition:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.splitPosition}}),czm_geometricToleranceOverMeter:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.geometricToleranceOverMeter}}),czm_minimumDisableDepthTestDistance:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.minimumDisableDepthTestDistance}}),czm_invertClassificationColor:new Yt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.invertClassificationColor}}),czm_gamma:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.gamma}}),czm_ellipsoidRadii:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.ellipsoid.radii}}),czm_ellipsoidInverseRadii:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.ellipsoid.oneOverRadii}})},pb=r4e;var UFn=x(T(),1);function s4e(e,t){let n=e;return n=n.replaceAll("version 300 es",""),n=n.replaceAll(/(texture\()/g,"texture2D("),t?(n=n.replaceAll(/\n\s*(in)\s+(vec\d|mat\d|float)/g,` varying $2`),/out_FragData_(\d+)/.test(n)&&(n=`#extension GL_EXT_draw_buffers : enable ${n}`,n=n.replaceAll(/layout\s+\(location\s*=\s*\d+\)\s*out\s+vec4\s+out_FragData_\d+;/g,""),n=n.replaceAll(/out_FragData_(\d+)/g,"gl_FragData[$1]")),n=n.replaceAll(/layout\s+\(location\s*=\s*0\)\s*out\s+vec4\s+out_FragColor;/g,""),n=n.replaceAll(/out_FragColor/g,"gl_FragColor"),n=n.replaceAll(/out_FragColor\[(\d+)\]/g,"gl_FragColor[$1]"),/gl_FragDepth/.test(n)&&(n=`#extension GL_EXT_frag_depth : enable ${n}`,n=n.replaceAll(/gl_FragDepth/g,"gl_FragDepthEXT")),n=`#ifdef GL_EXT_shader_texture_lod #extension GL_EXT_shader_texture_lod : enable #endif ${n}`,n=`#ifdef GL_OES_standard_derivatives #extension GL_OES_standard_derivatives : enable #endif ${n}`):(n=n.replaceAll(/(in)\s+(vec\d|mat\d|float)/g,"attribute $2"),n=n.replaceAll(/(out)\s+(vec\d|mat\d|float)\s+([\w]+);/g,"varying $2 $3;")),n=`#version 100 ${n}`,n}var o2=s4e;function P0e(e){return e=e.replace(/\/\/.*/g,""),e.replace(/\/\*\*[\s\S]*?\*\//gm,function(t){let n=t.match(/\n/gm).length,i="";for(let o=0;o0;){let o=e.pop();n.push(o),o.requiredBy.length===0&&t.push(o)}for(;t.length>0;){let o=t.shift();e.push(o);for(let r=0;r=0;--o)i=`${i+t[o].glslSource} `;return i.replace(n.glslSource,"")}function Y0e(e,t,n){let i="",o=e.sources;if(l(o))for(let b=0;b0&&console.log(`${Ip}Vertex shader compile log: ${c}`),c=e.getShaderInfoLog(r),l(c)&&c.length>0&&console.log(`${Ip}Fragment shader compile log: ${c}`),c=e.getProgramInfoLog(s),l(c)&&c.length>0&&console.log(`${Ip}Shader program link log: ${c}`)),e.deleteShader(o),e.deleteShader(r),s;let d,u=t._debugShaders;throw e.getShaderParameter(r,e.COMPILE_STATUS)?e.getShaderParameter(o,e.COMPILE_STATUS)?(c=e.getProgramInfoLog(s),console.error(`${Ip}Shader program link log: ${c}`),m(o,"vertex"),m(r,"fragment"),d=`Program failed to link. Link log: ${c}`):(c=e.getShaderInfoLog(o),console.error(`${Ip}Vertex shader compile log: ${c}`),console.error(`${Ip} Vertex shader source: ${n}`),d=`Vertex shader failed to compile. Compile log: ${c}`):(c=e.getShaderInfoLog(r),console.error(`${Ip}Fragment shader compile log: ${c}`),console.error(`${Ip} Fragment shader source: ${i}`),d=`Fragment shader failed to compile. Compile log: ${c}`),e.deleteShader(o),e.deleteShader(r),e.deleteProgram(s),new ae(d);function m(p,b){if(!l(u))return;let f=u.getTranslatedShaderSource(p);if(f===""){console.error(`${Ip}${b} shader translation failed.`);return}console.error(`${Ip}Translated ${b} shaderSource: ${f}`)}}function T4e(e,t,n){let i={};for(let o=0;o=0){if(u=n[d.slice(0,f)],!l(u))continue;m=u._locations,m.length<=1&&(p=u.value,b=e.getUniformLocation(t,d),b!==null&&(m.push(b),p.push(e.getUniform(t,b))))}else{m=[];for(let y=0;y 0.0 && abs(denominator) < czm_epsilon7) { // p0 is behind the near plane and the line to p1 is nearly parallel to // the near plane, so cull the segment completely. culledByNearPlane = true; } else if (endPoint0Distance > 0.0) { // p0 is behind the near plane, and the line to p1 is moving distinctly // toward or away from it. // t = (-plane distance - dot(plane normal, ray origin)) / dot(plane normal, ray direction) float t = endPoint0Distance / denominator; if (t < 0.0 || t > magnitude) { // Near plane intersection is not between the two points. // We already confirmed p0 is behind the naer plane, so now // we know the entire segment is behind it. culledByNearPlane = true; } else { // Segment crosses the near plane, update p0 to lie exactly on it. p0 = p0 + t * direction; // Numerical noise might put us a bit on the wrong side of the near plane. // Don't let that happen. p0.z = min(p0.z, -czm_currentFrustum.x); clipped = true; } } clippedPositionEC = vec4(p0, 1.0); positionWC = czm_eyeToWindowCoordinates(clippedPositionEC); } vec4 getPolylineWindowCoordinatesEC(vec4 positionEC, vec4 prevEC, vec4 nextEC, float expandDirection, float width, bool usePrevious, out float angle) { // expandDirection +1 is to the _left_ when looking from positionEC toward nextEC. #ifdef POLYLINE_DASH // Compute the window coordinates of the points. vec4 positionWindow = czm_eyeToWindowCoordinates(positionEC); vec4 previousWindow = czm_eyeToWindowCoordinates(prevEC); vec4 nextWindow = czm_eyeToWindowCoordinates(nextEC); // Determine the relative screen space direction of the line. vec2 lineDir; if (usePrevious) { lineDir = normalize(positionWindow.xy - previousWindow.xy); } else { lineDir = normalize(nextWindow.xy - positionWindow.xy); } angle = atan(lineDir.x, lineDir.y) - 1.570796327; // precomputed atan(1,0) // Quantize the angle so it doesn't change rapidly between segments. angle = floor(angle / czm_piOverFour + 0.5) * czm_piOverFour; #endif vec4 clippedPrevWC, clippedPrevEC; bool prevSegmentClipped, prevSegmentCulled; clipLineSegmentToNearPlane(prevEC.xyz, positionEC.xyz, clippedPrevWC, prevSegmentClipped, prevSegmentCulled, clippedPrevEC); vec4 clippedNextWC, clippedNextEC; bool nextSegmentClipped, nextSegmentCulled; clipLineSegmentToNearPlane(nextEC.xyz, positionEC.xyz, clippedNextWC, nextSegmentClipped, nextSegmentCulled, clippedNextEC); bool segmentClipped, segmentCulled; vec4 clippedPositionWC, clippedPositionEC; clipLineSegmentToNearPlane(positionEC.xyz, usePrevious ? prevEC.xyz : nextEC.xyz, clippedPositionWC, segmentClipped, segmentCulled, clippedPositionEC); if (segmentCulled) { return vec4(0.0, 0.0, 0.0, 1.0); } vec2 directionToPrevWC = normalize(clippedPrevWC.xy - clippedPositionWC.xy); vec2 directionToNextWC = normalize(clippedNextWC.xy - clippedPositionWC.xy); // If a segment was culled, we can't use the corresponding direction // computed above. We should never see both of these be true without // \`segmentCulled\` above also being true. if (prevSegmentCulled) { directionToPrevWC = -directionToNextWC; } else if (nextSegmentCulled) { directionToNextWC = -directionToPrevWC; } vec2 thisSegmentForwardWC, otherSegmentForwardWC; if (usePrevious) { thisSegmentForwardWC = -directionToPrevWC; otherSegmentForwardWC = directionToNextWC; } else { thisSegmentForwardWC = directionToNextWC; otherSegmentForwardWC = -directionToPrevWC; } vec2 thisSegmentLeftWC = vec2(-thisSegmentForwardWC.y, thisSegmentForwardWC.x); vec2 leftWC = thisSegmentLeftWC; float expandWidth = width * 0.5; // When lines are split at the anti-meridian, the position may be at the // same location as the next or previous position, and we need to handle // that to avoid producing NaNs. if (!czm_equalsEpsilon(prevEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1) && !czm_equalsEpsilon(nextEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1)) { vec2 otherSegmentLeftWC = vec2(-otherSegmentForwardWC.y, otherSegmentForwardWC.x); vec2 leftSumWC = thisSegmentLeftWC + otherSegmentLeftWC; float leftSumLength = length(leftSumWC); leftWC = leftSumLength < czm_epsilon6 ? thisSegmentLeftWC : (leftSumWC / leftSumLength); // The sine of the angle between the two vectors is given by the formula // |a x b| = |a||b|sin(theta) // which is // float sinAngle = length(cross(vec3(leftWC, 0.0), vec3(-thisSegmentForwardWC, 0.0))); // Because the z components of both vectors are zero, the x and y coordinate will be zero. // Therefore, the sine of the angle is just the z component of the cross product. vec2 u = -thisSegmentForwardWC; vec2 v = leftWC; float sinAngle = abs(u.x * v.y - u.y * v.x); expandWidth = clamp(expandWidth / sinAngle, 0.0, width * 2.0); } vec2 offset = leftWC * expandDirection * expandWidth * czm_pixelRatio; return vec4(clippedPositionWC.xy + offset, -clippedPositionWC.z, 1.0) * (czm_projection * clippedPositionEC).w; } vec4 getPolylineWindowCoordinates(vec4 position, vec4 previous, vec4 next, float expandDirection, float width, bool usePrevious, out float angle) { vec4 positionEC = czm_modelViewRelativeToEye * position; vec4 prevEC = czm_modelViewRelativeToEye * previous; vec4 nextEC = czm_modelViewRelativeToEye * next; return getPolylineWindowCoordinatesEC(positionEC, prevEC, nextEC, expandDirection, width, usePrevious, angle); } `;var __={positionHigh:0,positionLow:1,prevPositionHigh:2,prevPositionLow:3,nextPositionHigh:4,nextPositionLow:5,pickColor:6,showColorWidthAndTexCoord:7,alpha:8},VO={position:0,prevPosition:1,nextPosition:2,pickColor:3,showColorWidthAndTexCoord:4,alpha:5},nl=new ha,CO=new bu,h2=new U,z0e=new h,H0e=new h,K0e=new h,x7=new Rn,T7=new Rn,_7=new Rn;function G4e(e,t,n){let i=t.context;n=n||{destroy:L4e};let o=e._positionDatatype===J.DOUBLE,r=o?__:VO;if(!l(n.attributeArrays)||!l(n.indexArray)){let c=e.vertexCountMax-e.primitiveCount,d=e.vertexCountMax*2;n.indexArray=De.createTypedArray(d,c*6),n.attributeArrays={...o?{positionHigh:new Float32Array(d*3),positionLow:new Float32Array(d*3),prevPositionHigh:new Float32Array(d*3),prevPositionLow:new Float32Array(d*3),nextPositionHigh:new Float32Array(d*3),nextPositionLow:new Float32Array(d*3)}:{position:J.createTypedArray(e._positionDatatype,d*3),prevPosition:J.createTypedArray(e._positionDatatype,d*3),nextPosition:J.createTypedArray(e._positionDatatype,d*3)},pickColor:new Uint8Array(d*4),showColorWidthAndTexCoord:new Float32Array(d*4),alpha:new Uint8Array(d)}}if(e._dirtyCount>0){let{_dirtyOffset:c,_dirtyCount:d}=e,u=n.indexArray,{pickColor:m,showColorWidthAndTexCoord:p,alpha:b,position:f,prevPosition:y,nextPosition:_,positionHigh:S,positionLow:Z,prevPositionHigh:V,prevPositionLow:C,nextPositionHigh:G,nextPositionLow:E}=n.attributeArrays;for(let v=c,F=c+d;v0){let{indexOffset:c,indexCount:d,vertexOffset:u,vertexCount:m}=E4e(e);n.vertexArray.copyIndexFromRange(n.indexArray,c,d);for(let p in r)if(Object.hasOwn(r,p)){let b=p;n.vertexArray.copyAttributeFromRange(r[b],n.attributeArrays[b],u,m)}}}else{let c=n.attributeArrays;n.vertexArray=new Dn({context:i,indexBuffer:et.createIndexBuffer({context:i,typedArray:n.indexArray,usage:Ie.STATIC_DRAW,indexDatatype:De.fromTypedArray(n.indexArray)}),attributes:[...o?[{index:__.positionHigh,componentDatatype:J.FLOAT,componentsPerAttribute:3,vertexBuffer:et.createVertexBuffer({typedArray:c.positionHigh,context:i,usage:Ie.STATIC_DRAW})},{index:__.positionLow,componentDatatype:J.FLOAT,componentsPerAttribute:3,vertexBuffer:et.createVertexBuffer({typedArray:c.positionLow,context:i,usage:Ie.STATIC_DRAW})},{index:__.prevPositionHigh,componentDatatype:J.FLOAT,componentsPerAttribute:3,vertexBuffer:et.createVertexBuffer({typedArray:c.prevPositionHigh,context:i,usage:Ie.STATIC_DRAW})},{index:__.prevPositionLow,componentDatatype:J.FLOAT,componentsPerAttribute:3,vertexBuffer:et.createVertexBuffer({typedArray:c.prevPositionLow,context:i,usage:Ie.STATIC_DRAW})},{index:__.nextPositionHigh,componentDatatype:J.FLOAT,componentsPerAttribute:3,vertexBuffer:et.createVertexBuffer({typedArray:c.nextPositionHigh,context:i,usage:Ie.STATIC_DRAW})},{index:__.nextPositionLow,componentDatatype:J.FLOAT,componentsPerAttribute:3,vertexBuffer:et.createVertexBuffer({typedArray:c.nextPositionLow,context:i,usage:Ie.STATIC_DRAW})}]:[{index:VO.position,componentDatatype:e._positionDatatype,componentsPerAttribute:3,normalize:e._positionNormalized,vertexBuffer:et.createVertexBuffer({typedArray:c.position,context:i,usage:Ie.STATIC_DRAW})},{index:VO.prevPosition,componentDatatype:e._positionDatatype,componentsPerAttribute:3,normalize:e._positionNormalized,vertexBuffer:et.createVertexBuffer({typedArray:c.prevPosition,context:i,usage:Ie.STATIC_DRAW})},{index:VO.nextPosition,componentDatatype:e._positionDatatype,componentsPerAttribute:3,normalize:e._positionNormalized,vertexBuffer:et.createVertexBuffer({typedArray:c.nextPosition,context:i,usage:Ie.STATIC_DRAW})}],{index:r.pickColor,componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:4,vertexBuffer:et.createVertexBuffer({typedArray:c.pickColor,context:i,usage:Ie.STATIC_DRAW})},{index:r.showColorWidthAndTexCoord,componentDatatype:J.FLOAT,componentsPerAttribute:4,vertexBuffer:et.createVertexBuffer({typedArray:c.showColorWidthAndTexCoord,context:i,usage:Ie.STATIC_DRAW})},{index:r.alpha,componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,vertexBuffer:et.createVertexBuffer({typedArray:c.alpha,context:i,usage:Ie.STATIC_DRAW})}]})}l(n.renderState)||(n.renderState=Oe.fromCache({blending:e._blendOption===Xi.OPAQUE?tn.DISABLED:tn.ALPHA_BLEND,depthTest:{enabled:!0}})),l(n.shaderProgram)||(n.shaderProgram=en.fromCache({context:i,vertexShaderSource:new ze({sources:[Nl,u2],defines:o?["USE_FLOAT64"]:[]}),fragmentShaderSource:new ze({sources:[m2]}),attributeLocations:r}));let s=A4e(e);l(n.command)||(n.command=new ot({vertexArray:n.vertexArray,renderState:n.renderState,shaderProgram:n.shaderProgram,primitiveType:Fe.TRIANGLES,pass:e._blendOption===Xi.OPAQUE?We.OPAQUE:We.TRANSLUCENT,pickId:e._allowPicking?"v_pickColor":void 0,owner:e,count:s,modelMatrix:e.modelMatrix,boundingVolume:e.boundingVolume,debugShowBoundingVolume:e.debugShowBoundingVolume}));let a=n.command;return a.count!==s&&(a.count=s),a.debugShowBoundingVolume!==e.debugShowBoundingVolume&&(a.debugShowBoundingVolume=e.debugShowBoundingVolume),t.commandList.push(a),e._makeClean(),n}function A4e(e){return(e.vertexCount-e.primitiveCount)*6}function E4e(e){let{_dirtyOffset:t,_dirtyCount:n}=e;e.get(t,nl);let i=nl.vertexOffset*2,r=(nl.vertexOffset-t)*6;e.get(t+n-1,nl);let s=(nl.vertexOffset+nl.vertexCount)*2-i,c=(s/2-n)*6;return{indexOffset:r,indexCount:c,vertexOffset:i,vertexCount:s}}function L4e(){let e=this;l(e.vertexArray)&&e.vertexArray.destroy(),l(e.shaderProgram)&&e.shaderProgram.destroy(),l(e.renderState)&&Oe.removeFromCache(e.renderState)}var f2=G4e;var S7=class e extends Ks{_getCollectionClass(){return e}_getPrimitiveClass(){return ha}_getMaterialClass(){return bu}static _cloneEmpty(t){return new e({primitiveCountMax:t.primitiveCountMax,vertexCountMax:t.vertexCountMax,positionDatatype:t.positionDatatype,positionNormalized:t.positionNormalized})}add(t,n=new ha){super.add(t,n);let i=this._positionCount;return n._setUint32(ha.Layout.POSITION_OFFSET_U32,i),n._setUint32(ha.Layout.POSITION_COUNT_U32,0),l(t.positions)&&n.setPositions(t.positions),n}update(t){super.update(t);let n=t.passes;this.show&&(n.render||n.pick)&&(this._renderContext=f2(this,t,this._renderContext))}},il=S7;var W4e=new re,v4e=new re,J0e=new re,V7=new Map;V7.set(il,{packCollectionData:$c.packPolylineCollectionData,packTilePrimitives:$c.packPolylineSegments});V7.set(tl,{packCollectionData:$c.packPolygonCollectionData,packTilePrimitives:$c.packPolygonRings});var Z7=class{constructor(t){this._tilingScheme=t.tilingScheme,this._collections=new Set,this._collectionDataCache=new WeakMap,this._selectedThisFrame=new Set,this._selectionDriven=new Set,this._selectionFrameNumber=-1,this._dirtyRectangles=[]}get tilingScheme(){return this._tilingScheme}set tilingScheme(t){this._tilingScheme=t}get ellipsoid(){return this._tilingScheme.ellipsoid}add(t){let n=this._collections.size;this._collections.add(t),this._collections.size!==n&&this._markCollectionRegionDirty(t)}remove(t){this._selectedThisFrame.delete(t),this._selectionDriven.delete(t),this._collections.delete(t)&&this._markCollectionRegionDirty(t)}markSelected(t,n){n!==this._selectionFrameNumber&&(this._commitSelectedFrame(),this._selectionFrameNumber=n),this._selectedThisFrame.add(t),this._selectionDriven.add(t);let i=this._collections.size;this._collections.add(t),this._collections.size!==i&&this._markCollectionRegionDirty(t)}_commitSelectedFrame(){for(let t of this._selectionDriven)this._selectedThisFrame.has(t)||(this._selectionDriven.delete(t),this._collections.delete(t)&&this._markCollectionRegionDirty(t));this._selectedThisFrame.clear()}_markCollectionRegionDirty(t){let n=re.fromBoundingSphere(t.boundingVolume,this._tilingScheme.ellipsoid,new re);this._dirtyRectangles.push(n)}requestTileData(t,n,i,o){let r=this._tilingScheme,s=r.tileXYToRectangle(t,n,i),a={show:!0};for(let u of this._collections){let m=V7.get(u.constructor);if(!l(m))continue;let p=re.fromBoundingSphere(u.boundingVolume,r.ellipsoid,v4e);if(!!!re.intersection(s,p,J0e))continue;let f=this._getCollectionDataCached(u,m.packCollectionData);m.packTilePrimitives(u,f,s,a)}let c=l(a.polylineSegments)&&a.polylineSegments.length>0,d=l(a.polygonRings)&&a.polygonRings.length>0;return!c&&!d?(a.show=!1,a):(c&&($c.packPolylineGrid(a),$c.packPolylineTextures(o,a)),d&&($c.packPolygonGrid(a),$c.packPolygonTextures(o,a)),$c.packPrimitiveTextures(o,a),a)}releaseTileData(t){$c.freeResources(t)}updateTileData(t,n,i,o,r){let s=this._dirtyRectangles,a=this._tilingScheme;return F4e(t,n,i,s,a)?(l(r)&&this.releaseTileData(r),this.requestTileData(t,n,i,o)):r}makeClean(){this._dirtyRectangles.length=0}update(){for(let t of this._collections){let n=this._collectionDataCache.get(t);!l(n)||!(t._dirtyCount>0||n.version!==t._version)||(l(n.rectangle)&&this._dirtyRectangles.push(re.clone(n.rectangle)),this._markCollectionRegionDirty(t))}}_getCollectionDataCached(t,n){let i=this._collectionDataCache.get(t),o=t._dirtyCount>0,r=i?.version!==t._version;if(l(i)&&!o&&!r)return i;let s=n(t,this._tilingScheme,i);return s.version=t._version+(o?1:0),s.rectangle=re.fromBoundingSphere(t.boundingVolume,this.ellipsoid,s.rectangle),this._collectionDataCache.set(t,s),t._makeClean(),s}};function F4e(e,t,n,i,o){if(i.length===0)return!1;let r=o.tileXYToRectangle(e,t,n,W4e);for(let s=0;sa?c=a:s<0?c=0:c=s;let u=i?this.tolerance??1:.001;Math.abs(c-d)>u&&(this._seeking=!0,t.currentTime=c)};function I4e(e){return function(){e._seeking=!1,e._firstTickAfterSeek=!0}}var C7=S_;var yXn=x(T(),1),j0e={VK_FORMAT_UNDEFINED:0,VK_FORMAT_R4G4_UNORM_PACK8:1,VK_FORMAT_R4G4B4A4_UNORM_PACK16:2,VK_FORMAT_B4G4R4A4_UNORM_PACK16:3,VK_FORMAT_R5G6B5_UNORM_PACK16:4,VK_FORMAT_B5G6R5_UNORM_PACK16:5,VK_FORMAT_R5G5B5A1_UNORM_PACK16:6,VK_FORMAT_B5G5R5A1_UNORM_PACK16:7,VK_FORMAT_A1R5G5B5_UNORM_PACK16:8,VK_FORMAT_R8_UNORM:9,VK_FORMAT_R8_SNORM:10,VK_FORMAT_R8_USCALED:11,VK_FORMAT_R8_SSCALED:12,VK_FORMAT_R8_UINT:13,VK_FORMAT_R8_SINT:14,VK_FORMAT_R8_SRGB:15,VK_FORMAT_R8G8_UNORM:16,VK_FORMAT_R8G8_SNORM:17,VK_FORMAT_R8G8_USCALED:18,VK_FORMAT_R8G8_SSCALED:19,VK_FORMAT_R8G8_UINT:20,VK_FORMAT_R8G8_SINT:21,VK_FORMAT_R8G8_SRGB:22,VK_FORMAT_R8G8B8_UNORM:23,VK_FORMAT_R8G8B8_SNORM:24,VK_FORMAT_R8G8B8_USCALED:25,VK_FORMAT_R8G8B8_SSCALED:26,VK_FORMAT_R8G8B8_UINT:27,VK_FORMAT_R8G8B8_SINT:28,VK_FORMAT_R8G8B8_SRGB:29,VK_FORMAT_B8G8R8_UNORM:30,VK_FORMAT_B8G8R8_SNORM:31,VK_FORMAT_B8G8R8_USCALED:32,VK_FORMAT_B8G8R8_SSCALED:33,VK_FORMAT_B8G8R8_UINT:34,VK_FORMAT_B8G8R8_SINT:35,VK_FORMAT_B8G8R8_SRGB:36,VK_FORMAT_R8G8B8A8_UNORM:37,VK_FORMAT_R8G8B8A8_SNORM:38,VK_FORMAT_R8G8B8A8_USCALED:39,VK_FORMAT_R8G8B8A8_SSCALED:40,VK_FORMAT_R8G8B8A8_UINT:41,VK_FORMAT_R8G8B8A8_SINT:42,VK_FORMAT_R8G8B8A8_SRGB:43,VK_FORMAT_B8G8R8A8_UNORM:44,VK_FORMAT_B8G8R8A8_SNORM:45,VK_FORMAT_B8G8R8A8_USCALED:46,VK_FORMAT_B8G8R8A8_SSCALED:47,VK_FORMAT_B8G8R8A8_UINT:48,VK_FORMAT_B8G8R8A8_SINT:49,VK_FORMAT_B8G8R8A8_SRGB:50,VK_FORMAT_A8B8G8R8_UNORM_PACK32:51,VK_FORMAT_A8B8G8R8_SNORM_PACK32:52,VK_FORMAT_A8B8G8R8_USCALED_PACK32:53,VK_FORMAT_A8B8G8R8_SSCALED_PACK32:54,VK_FORMAT_A8B8G8R8_UINT_PACK32:55,VK_FORMAT_A8B8G8R8_SINT_PACK32:56,VK_FORMAT_A8B8G8R8_SRGB_PACK32:57,VK_FORMAT_A2R10G10B10_UNORM_PACK32:58,VK_FORMAT_A2R10G10B10_SNORM_PACK32:59,VK_FORMAT_A2R10G10B10_USCALED_PACK32:60,VK_FORMAT_A2R10G10B10_SSCALED_PACK32:61,VK_FORMAT_A2R10G10B10_UINT_PACK32:62,VK_FORMAT_A2R10G10B10_SINT_PACK32:63,VK_FORMAT_A2B10G10R10_UNORM_PACK32:64,VK_FORMAT_A2B10G10R10_SNORM_PACK32:65,VK_FORMAT_A2B10G10R10_USCALED_PACK32:66,VK_FORMAT_A2B10G10R10_SSCALED_PACK32:67,VK_FORMAT_A2B10G10R10_UINT_PACK32:68,VK_FORMAT_A2B10G10R10_SINT_PACK32:69,VK_FORMAT_R16_UNORM:70,VK_FORMAT_R16_SNORM:71,VK_FORMAT_R16_USCALED:72,VK_FORMAT_R16_SSCALED:73,VK_FORMAT_R16_UINT:74,VK_FORMAT_R16_SINT:75,VK_FORMAT_R16_SFLOAT:76,VK_FORMAT_R16G16_UNORM:77,VK_FORMAT_R16G16_SNORM:78,VK_FORMAT_R16G16_USCALED:79,VK_FORMAT_R16G16_SSCALED:80,VK_FORMAT_R16G16_UINT:81,VK_FORMAT_R16G16_SINT:82,VK_FORMAT_R16G16_SFLOAT:83,VK_FORMAT_R16G16B16_UNORM:84,VK_FORMAT_R16G16B16_SNORM:85,VK_FORMAT_R16G16B16_USCALED:86,VK_FORMAT_R16G16B16_SSCALED:87,VK_FORMAT_R16G16B16_UINT:88,VK_FORMAT_R16G16B16_SINT:89,VK_FORMAT_R16G16B16_SFLOAT:90,VK_FORMAT_R16G16B16A16_UNORM:91,VK_FORMAT_R16G16B16A16_SNORM:92,VK_FORMAT_R16G16B16A16_USCALED:93,VK_FORMAT_R16G16B16A16_SSCALED:94,VK_FORMAT_R16G16B16A16_UINT:95,VK_FORMAT_R16G16B16A16_SINT:96,VK_FORMAT_R16G16B16A16_SFLOAT:97,VK_FORMAT_R32_UINT:98,VK_FORMAT_R32_SINT:99,VK_FORMAT_R32_SFLOAT:100,VK_FORMAT_R32G32_UINT:101,VK_FORMAT_R32G32_SINT:102,VK_FORMAT_R32G32_SFLOAT:103,VK_FORMAT_R32G32B32_UINT:104,VK_FORMAT_R32G32B32_SINT:105,VK_FORMAT_R32G32B32_SFLOAT:106,VK_FORMAT_R32G32B32A32_UINT:107,VK_FORMAT_R32G32B32A32_SINT:108,VK_FORMAT_R32G32B32A32_SFLOAT:109,VK_FORMAT_R64_UINT:110,VK_FORMAT_R64_SINT:111,VK_FORMAT_R64_SFLOAT:112,VK_FORMAT_R64G64_UINT:113,VK_FORMAT_R64G64_SINT:114,VK_FORMAT_R64G64_SFLOAT:115,VK_FORMAT_R64G64B64_UINT:116,VK_FORMAT_R64G64B64_SINT:117,VK_FORMAT_R64G64B64_SFLOAT:118,VK_FORMAT_R64G64B64A64_UINT:119,VK_FORMAT_R64G64B64A64_SINT:120,VK_FORMAT_R64G64B64A64_SFLOAT:121,VK_FORMAT_B10G11R11_UFLOAT_PACK32:122,VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:123,VK_FORMAT_D16_UNORM:124,VK_FORMAT_X8_D24_UNORM_PACK32:125,VK_FORMAT_D32_SFLOAT:126,VK_FORMAT_S8_UINT:127,VK_FORMAT_D16_UNORM_S8_UINT:128,VK_FORMAT_D24_UNORM_S8_UINT:129,VK_FORMAT_D32_SFLOAT_S8_UINT:130,VK_FORMAT_BC1_RGB_UNORM_BLOCK:131,VK_FORMAT_BC1_RGB_SRGB_BLOCK:132,VK_FORMAT_BC1_RGBA_UNORM_BLOCK:133,VK_FORMAT_BC1_RGBA_SRGB_BLOCK:134,VK_FORMAT_BC2_UNORM_BLOCK:135,VK_FORMAT_BC2_SRGB_BLOCK:136,VK_FORMAT_BC3_UNORM_BLOCK:137,VK_FORMAT_BC3_SRGB_BLOCK:138,VK_FORMAT_BC4_UNORM_BLOCK:139,VK_FORMAT_BC4_SNORM_BLOCK:140,VK_FORMAT_BC5_UNORM_BLOCK:141,VK_FORMAT_BC5_SNORM_BLOCK:142,VK_FORMAT_BC6H_UFLOAT_BLOCK:143,VK_FORMAT_BC6H_SFLOAT_BLOCK:144,VK_FORMAT_BC7_UNORM_BLOCK:145,VK_FORMAT_BC7_SRGB_BLOCK:146,VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:147,VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:148,VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:149,VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:150,VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:151,VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:152,VK_FORMAT_EAC_R11_UNORM_BLOCK:153,VK_FORMAT_EAC_R11_SNORM_BLOCK:154,VK_FORMAT_EAC_R11G11_UNORM_BLOCK:155,VK_FORMAT_EAC_R11G11_SNORM_BLOCK:156,VK_FORMAT_ASTC_4x4_UNORM_BLOCK:157,VK_FORMAT_ASTC_4x4_SRGB_BLOCK:158,VK_FORMAT_ASTC_5x4_UNORM_BLOCK:159,VK_FORMAT_ASTC_5x4_SRGB_BLOCK:160,VK_FORMAT_ASTC_5x5_UNORM_BLOCK:161,VK_FORMAT_ASTC_5x5_SRGB_BLOCK:162,VK_FORMAT_ASTC_6x5_UNORM_BLOCK:163,VK_FORMAT_ASTC_6x5_SRGB_BLOCK:164,VK_FORMAT_ASTC_6x6_UNORM_BLOCK:165,VK_FORMAT_ASTC_6x6_SRGB_BLOCK:166,VK_FORMAT_ASTC_8x5_UNORM_BLOCK:167,VK_FORMAT_ASTC_8x5_SRGB_BLOCK:168,VK_FORMAT_ASTC_8x6_UNORM_BLOCK:169,VK_FORMAT_ASTC_8x6_SRGB_BLOCK:170,VK_FORMAT_ASTC_8x8_UNORM_BLOCK:171,VK_FORMAT_ASTC_8x8_SRGB_BLOCK:172,VK_FORMAT_ASTC_10x5_UNORM_BLOCK:173,VK_FORMAT_ASTC_10x5_SRGB_BLOCK:174,VK_FORMAT_ASTC_10x6_UNORM_BLOCK:175,VK_FORMAT_ASTC_10x6_SRGB_BLOCK:176,VK_FORMAT_ASTC_10x8_UNORM_BLOCK:177,VK_FORMAT_ASTC_10x8_SRGB_BLOCK:178,VK_FORMAT_ASTC_10x10_UNORM_BLOCK:179,VK_FORMAT_ASTC_10x10_SRGB_BLOCK:180,VK_FORMAT_ASTC_12x10_UNORM_BLOCK:181,VK_FORMAT_ASTC_12x10_SRGB_BLOCK:182,VK_FORMAT_ASTC_12x12_UNORM_BLOCK:183,VK_FORMAT_ASTC_12x12_SRGB_BLOCK:184,VK_FORMAT_G8B8G8R8_422_UNORM:1000156e3,VK_FORMAT_B8G8R8G8_422_UNORM:1000156001,VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:1000156002,VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:1000156003,VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:1000156004,VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:1000156005,VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:1000156006,VK_FORMAT_R10X6_UNORM_PACK16:1000156007,VK_FORMAT_R10X6G10X6_UNORM_2PACK16:1000156008,VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:1000156009,VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:1000156010,VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:1000156011,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:1000156012,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:1000156013,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:1000156014,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:1000156015,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:1000156016,VK_FORMAT_R12X4_UNORM_PACK16:1000156017,VK_FORMAT_R12X4G12X4_UNORM_2PACK16:1000156018,VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:1000156019,VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:1000156020,VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:1000156021,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:1000156022,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:1000156023,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:1000156024,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:1000156025,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:1000156026,VK_FORMAT_G16B16G16R16_422_UNORM:1000156027,VK_FORMAT_B16G16R16G16_422_UNORM:1000156028,VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:1000156029,VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:1000156030,VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:1000156031,VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:1000156032,VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:1000156033,VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:1000054e3,VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:1000054001,VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:1000054002,VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:1000054003,VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:1000054004,VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:1000054005,VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:1000054006,VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:1000054007,VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT:1000066e3,VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT:1000066001,VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT:1000066002,VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT:1000066003,VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT:1000066004,VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT:1000066005,VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT:1000066006,VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT:1000066007,VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT:1000066008,VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT:1000066009,VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT:1000066010,VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT:1000066011,VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT:1000066012,VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT:1000066013,VK_FORMAT_G8B8G8R8_422_UNORM_KHR:1000156e3,VK_FORMAT_B8G8R8G8_422_UNORM_KHR:1000156001,VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR:1000156002,VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR:1000156003,VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR:1000156004,VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR:1000156005,VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR:1000156006,VK_FORMAT_R10X6_UNORM_PACK16_KHR:1000156007,VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR:1000156008,VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR:1000156009,VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR:1000156010,VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR:1000156011,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR:1000156012,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR:1000156013,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR:1000156014,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR:1000156015,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR:1000156016,VK_FORMAT_R12X4_UNORM_PACK16_KHR:1000156017,VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR:1000156018,VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR:1000156019,VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR:1000156020,VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR:1000156021,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR:1000156022,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR:1000156023,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR:1000156024,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR:1000156025,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR:1000156026,VK_FORMAT_G16B16G16R16_422_UNORM_KHR:1000156027,VK_FORMAT_B16G16R16G16_422_UNORM_KHR:1000156028,VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR:1000156029,VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR:1000156030,VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR:1000156031,VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR:1000156032,VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR:1000156033};Object.freeze(j0e);var R7=j0e;var UXn=x(T(),1);var RXn=x(T(),1);var Q0e={};function P4e(e,t){return L.equalsEpsilon(e.latitude,t.latitude,L.EPSILON10)&&L.equalsEpsilon(e.longitude,t.longitude,L.EPSILON10)}var X4e=new fe,N4e=new fe;function Y4e(e,t,n,i){t=Wo(t,h.equalsEpsilon);let o=t.length;if(o<2)return;let r=l(i),s=l(n),a=new Array(o),c=new Array(o),d=new Array(o),u=t[0];a[0]=u;let m=e.cartesianToCartographic(u,X4e);s&&(m.height=n[0]),c[0]=m.height,r?d[0]=i[0]:d[0]=0;let p=c[0],b=d[0],f=p===b,y=1;for(let _=1;_0)for(s=new Array(o),i=0;i0)for(a=new Array(o),i=0;i0)for(s=new Array(o),i=0;i0)for(a=new Array(o),i=0;i=d&&(m=(m+8)%24,u=m);s=a||t(b,f,n)<=0)?(e[p]=b,++u):m=o)return;let r=Math.floor((i+o)*.5);F7(e,t,n,i,r),F7(e,t,n,r+1,o),cQe(e,t,n,i,r,o)}function lQe(e,t,n){let i=e.length,o=Math.ceil(i*.5);W7.length=o,v7.length=o,F7(e,t,n,0,i-1),W7.length=0,v7.length=0}var Pp=lQe;var wNn=x(T(),1);var dQe=new h;function uQe(e,t,n,i){let o=kT(e,t,n,i,dQe);return l(o)?o.x>0&&o.y>0&&o.z>0:!1}var I7=uQe;var UNn=x(T(),1);async function mQe(e,t,n,i){return l(i)||(i=!1),pQe(e,t,n,i)}function hQe(e,t,n){let i=e[0],o=i.terrainProvider.requestTileGeometry(i.x,i.y,i.level);if(!o)return!1;let r;return n?r=o.then(sbe(i)):r=o.then(sbe(i)).catch(bQe(i)),e.shift(),t.push(r),!0}function fQe(e){return new Promise(function(t){setTimeout(t,e)})}function P7(e,t,n){return e.length?hQe(e,t,n)?P7(e,t,n):fQe(100).then(()=>P7(e,t,n)):Promise.resolve()}function pQe(e,t,n,i){let o=e.tilingScheme,r,s=[],a={};for(r=0;r0&&await abe(e,a,n),t}var G_=abe;var JNn=x(T(),1);function gQe(e){return e<=.04045?e*.07739938080495357:Math.pow((e+.055)*.9478672985781991,2.4)}var A_=gQe;var QNn=x(T(),1);function yQe(e,t){let n=[],i=e.length,o=0;for(;o-1&&i.derivedKeywords.splice(s,1)}return this.createDerivedShaderProgram(e,t,n)};Bh.prototype.getDerivedShaderProgram=function(e,t){let n=e._cachedShader,i=t+n.keyword,o=this._shaders[i];if(l(o))return o.shaderProgram};Bh.prototype.createDerivedShaderProgram=function(e,t,n){let i=e._cachedShader,o=t+i.keyword,r=n.vertexShaderSource,s=n.fragmentShaderSource,a=n.attributeLocations;typeof r=="string"&&(r=new ze({sources:[r]})),typeof s=="string"&&(s=new ze({sources:[s]}));let c=this._context,d=r.createCombinedVertexShader(c),u=s.createCombinedFragmentShader(c),m=new en({gl:c._gl,logShaderCompilation:c.logShaderCompilation,debugShaders:c.debugShaders,vertexShaderSource:r,vertexShaderText:d,fragmentShaderSource:s,fragmentShaderText:u,attributeLocations:a}),p={cache:this,shaderProgram:m,keyword:o,derivedKeywords:[],count:0};return i.derivedKeywords.push(t),m._cachedShader=p,this._shaders[o]=p,m};function k7(e,t){let n=t.derivedKeywords,i=n.length;for(let o=0;o0&&(e._eyeEllipsoidNormalEC=h.normalize(t.positionWC,e._eyeEllipsoidNormalEC)),i=n.scaleToGeodeticSurface(t.positionWC,dbe)),e._encodedCameraPositionMCDirty=!0,!l(i))return;e._eyeEllipsoidNormalEC=q.multiplyByVector(e._viewRotation,e._eyeEllipsoidNormalEC,e._eyeEllipsoidNormalEC);let r=bt.eastNorthUpToFixedFrame(i,n,IQe);e._enuToModel=I.multiplyTransformation(e.inverseModel,r,e._enuToModel),e._modelToEnu=I.inverseTransformation(e._enuToModel,e._modelToEnu),L.equalsEpsilon(n._radii.x,n._radii.y,L.EPSILON15)&&(e._eyeEllipsoidCurvature=n.getLocalCurvature(i,e._eyeEllipsoidCurvature))}var U7=new q,XQe=new fe;function NQe(e,t){bt.computeIcrfToCentralBodyFixedMatrix(t.time,U7);let n=Dy.computeSunPositionInEarthInertialFrame(t.time,e._sunPositionWC);q.multiplyByVector(U7,n,n),h.normalize(n,e._sunDirectionWC),n=q.multiplyByVector(e.viewRotation3D,n,e._sunDirectionEC),h.normalize(n,n),n=Dy.computeMoonPositionInEarthInertialFrame(t.time,e._moonDirectionEC),q.multiplyByVector(U7,n,n),q.multiplyByVector(e.viewRotation3D,n,n),h.normalize(n,n);let i=t.mapProjection,r=i.ellipsoid.cartesianToCartographic(e._sunPositionWC,XQe);i.project(r,e._sunPositionColumbusView)}D1.prototype.updateCamera=function(e){LQe(this,e.viewMatrix),WQe(this,e.inverseViewMatrix),PQe(this,e),this._entireFrustum.x=e.frustum.near,this._entireFrustum.y=e.frustum.far,this.updateFrustum(e.frustum),this._orthographicIn3D=this._mode!==se.SCENE2D&&e.frustum instanceof bn};D1.prototype.updateFrustum=function(e){vQe(this,e.projectionMatrix),l(e.infiniteProjectionMatrix)&&FQe(this,e.infiniteProjectionMatrix),this._currentFrustum.x=e.near,this._currentFrustum.y=e.far,this._farDepthFromNearPlusOne=e.far-e.near+1,this._log2FarDepthFromNearPlusOne=L.log2(this._farDepthFromNearPlusOne),this._oneOverLog2FarDepthFromNearPlusOne=1/this._log2FarDepthFromNearPlusOne;let t=e.offCenterFrustum;l(t)&&(e=t),this._frustumPlanes.x=e.top,this._frustumPlanes.y=e.bottom,this._frustumPlanes.z=e.left,this._frustumPlanes.w=e.right};D1.prototype.updatePass=function(e){this._pass=e};var YQe=[],wQe=new yb;D1.prototype.update=function(e){this._mode=e.mode,this._mapProjection=e.mapProjection,this._ellipsoid=e.mapProjection.ellipsoid,this._pixelRatio=e.pixelRatio;let t=e.camera;this.updateCamera(t),e.mode===se.SCENE2D?(this._frustum2DWidth=t.frustum.right-t.frustum.left,this._eyeHeight2D.x=this._frustum2DWidth*.5,this._eyeHeight2D.y=this._eyeHeight2D.x*this._eyeHeight2D.x):(this._frustum2DWidth=0,this._eyeHeight2D.x=0,this._eyeHeight2D.y=0),NQe(this,e);let n=e.light??wQe;n instanceof yb?(this._lightDirectionWC=h.clone(this._sunDirectionWC,this._lightDirectionWC),this._lightDirectionEC=h.clone(this._sunDirectionEC,this._lightDirectionEC)):(this._lightDirectionWC=h.normalize(h.negate(n.direction,this._lightDirectionWC),this._lightDirectionWC),this._lightDirectionEC=q.multiplyByVector(this.viewRotation3D,this._lightDirectionWC,this._lightDirectionEC));let i=n.color,o=h.fromElements(i.red,i.green,i.blue,this._lightColorHdr);o=h.multiplyByScalar(o,n.intensity,o);let r=h.maximumComponent(o);r>1?h.divideByScalar(o,r,this._lightColor):h.clone(o,this._lightColor);let s=e.brdfLutGenerator,a=l(s)?s.colorTexture:void 0;this._brdfLut=a,this._environmentMap=e.environmentMap??e.context.defaultCubeMap,this._sphericalHarmonicCoefficients=e.sphericalHarmonicCoefficients??YQe,this._specularEnvironmentMaps=e.specularEnvironmentMaps,this._specularEnvironmentMapsMaximumLOD=e.specularEnvironmentMapsMaximumLOD,this._fogDensity=e.fog.density,this._fogVisualDensityScalar=e.fog.visualDensityScalar,this._fogMinimumBrightness=e.fog.minimumBrightness;let c=e.atmosphere;l(c)&&(this._atmosphereHsbShift=h.fromElements(c.hueShift,c.saturationShift,c.brightnessShift,this._atmosphereHsbShift),this._atmosphereLightIntensity=c.lightIntensity,this._atmosphereRayleighCoefficient=h.clone(c.rayleighCoefficient,this._atmosphereRayleighCoefficient),this._atmosphereRayleighScaleHeight=c.rayleighScaleHeight,this._atmosphereMieCoefficient=h.clone(c.mieCoefficient,this._atmosphereMieCoefficient),this._atmosphereMieScaleHeight=c.mieScaleHeight,this._atmosphereMieAnisotropy=c.mieAnisotropy,this._atmosphereDynamicLighting=c.dynamicLighting),this._invertClassificationColor=e.invertClassificationColor,this._frameState=e,this._temeToPseudoFixed=bt.computeTemeToPseudoFixedMatrix(e.time,this._temeToPseudoFixed),this._splitPosition=e.splitPosition*e.context.drawingBufferWidth;let d=t.frustum.fov,u=this._viewport,m;l(d)?u.height>u.width?m=Math.tan(.5*d)*2/u.height:m=Math.tan(.5*d)*2/u.width:m=1/Math.max(u.width,u.height),this._geometricToleranceOverMeter=m*e.maximumScreenSpaceError,U.clone(e.backgroundColor,this._backgroundColor),this._minimumDisableDepthTestDistance=e.minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance*=this._minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance===Number.POSITIVE_INFINITY&&(this._minimumDisableDepthTestDistance=-1)};function ube(e){if(e._viewportDirty){let t=e._viewport;I.computeOrthographicOffCenter(t.x,t.x+t.width,t.y,t.y+t.height,0,1,e._viewportOrthographicMatrix),I.computeViewportTransformation(t,0,1,e._viewportTransformation),e._viewportDirty=!1}}function MQe(e){e._inverseProjectionDirty&&(e._inverseProjectionDirty=!1,e._mode!==se.SCENE2D&&e._mode!==se.MORPHING&&!e._orthographicIn3D?I.inverse(e._projection,e._inverseProjection):I.clone(I.ZERO,e._inverseProjection))}function kQe(e){e._modelViewDirty&&(e._modelViewDirty=!1,I.multiplyTransformation(e._view,e._model,e._modelView))}function UQe(e){e._modelView3DDirty&&(e._modelView3DDirty=!1,I.multiplyTransformation(e.view3D,e._model,e._modelView3D))}function DQe(e){e._inverseModelViewDirty&&(e._inverseModelViewDirty=!1,I.inverse(e.modelView,e._inverseModelView))}function OQe(e){e._inverseModelView3DDirty&&(e._inverseModelView3DDirty=!1,I.inverse(e.modelView3D,e._inverseModelView3D))}function BQe(e){e._viewProjectionDirty&&(e._viewProjectionDirty=!1,I.multiply(e._projection,e._view,e._viewProjection))}function zQe(e){e._inverseViewProjectionDirty&&(e._inverseViewProjectionDirty=!1,I.inverse(e.viewProjection,e._inverseViewProjection))}function HQe(e){e._modelViewProjectionDirty&&(e._modelViewProjectionDirty=!1,I.multiply(e._projection,e.modelView,e._modelViewProjection))}function KQe(e){if(e._modelViewRelativeToEyeDirty){e._modelViewRelativeToEyeDirty=!1;let t=e.modelView,n=e._modelViewRelativeToEye;n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n[9]=t[9],n[10]=t[10],n[11]=t[11],n[12]=0,n[13]=0,n[14]=0,n[15]=t[15]}}function JQe(e){e._inverseModelViewProjectionDirty&&(e._inverseModelViewProjectionDirty=!1,I.inverse(e.modelViewProjection,e._inverseModelViewProjection))}function jQe(e){e._modelViewProjectionRelativeToEyeDirty&&(e._modelViewProjectionRelativeToEyeDirty=!1,I.multiply(e._projection,e.modelViewRelativeToEye,e._modelViewProjectionRelativeToEye))}function QQe(e){e._modelViewInfiniteProjectionDirty&&(e._modelViewInfiniteProjectionDirty=!1,I.multiply(e._infiniteProjection,e.modelView,e._modelViewInfiniteProjection))}function qQe(e){if(e._normalDirty){e._normalDirty=!1;let t=e._normal;I.getMatrix3(e.inverseModelView,t),q.transpose(t,t)}}function $Qe(e){if(e._normal3DDirty){e._normal3DDirty=!1;let t=e._normal3D;I.getMatrix3(e.inverseModelView3D,t),q.transpose(t,t)}}function e8e(e){if(e._inverseNormalDirty){e._inverseNormalDirty=!1;let t=e._inverseNormal;I.getMatrix3(e.modelView,t),q.transpose(t,t)}}function t8e(e){if(e._inverseNormal3DDirty){e._inverseNormal3DDirty=!1;let t=e._inverseNormal3D;I.getMatrix3(e.modelView3D,t),q.transpose(t,t)}}var mbe=new h;function hbe(e){e._encodedCameraPositionMCDirty&&(e._encodedCameraPositionMCDirty=!1,I.multiplyByPoint(e.inverseModel,e._cameraPosition,mbe),Rn.fromCartesian(mbe,e._encodedCameraPositionMC))}var n8e=new h,i8e=new h,o8e=new h,r8e=new h,s8e=new fe,a8e=new h,c8e=new I;function l8e(e,t,n,i,o,r,s,a){let c=n8e;c.x=e.y,c.y=e.z,c.z=e.x;let d=i8e;d.x=n.y,d.y=n.z,d.z=n.x;let u=o8e;u.x=i.y,u.y=i.z,u.z=i.x;let m=r8e;m.x=t.y,m.y=t.z,m.z=t.x,r===se.SCENE2D&&(c.z=o*.5);let p=s.unproject(c,s8e);p.longitude=L.clamp(p.longitude,-Math.PI,Math.PI),p.latitude=L.clamp(p.latitude,-L.PI_OVER_TWO,L.PI_OVER_TWO);let b=s.ellipsoid,f=b.cartographicToCartesian(p,a8e),y=bt.eastNorthUpToFixedFrame(f,b,c8e);return I.multiplyByPointAsVector(y,d,d),I.multiplyByPointAsVector(y,u,u),I.multiplyByPointAsVector(y,m,m),l(a)||(a=new I),a[0]=d.x,a[1]=u.x,a[2]=-m.x,a[3]=0,a[4]=d.y,a[5]=u.y,a[6]=-m.y,a[7]=0,a[8]=d.z,a[9]=u.z,a[10]=-m.z,a[11]=0,a[12]=-h.dot(d,f),a[13]=-h.dot(u,f),a[14]=h.dot(m,f),a[15]=1,a}function D7(e){e._view3DDirty&&(e._mode===se.SCENE3D?I.clone(e._view,e._view3D):l8e(e._cameraPosition,e._cameraDirection,e._cameraRight,e._cameraUp,e._frustum2DWidth,e._mode,e._mapProjection,e._view3D),I.getMatrix3(e._view3D,e._viewRotation3D),e._view3DDirty=!1)}function fbe(e){e._inverseView3DDirty&&(I.inverseTransformation(e.view3D,e._inverseView3D),I.getMatrix3(e._inverseView3D,e._inverseViewRotation3D),e._inverseView3DDirty=!1)}var P2=D1;function Ad(e,t){let{getWebGLStub:n,requestWebgl1:i,webgl:o={},allowTextureFilterAnisotropic:r=!0}=t??{};o.alpha=o.alpha??!1,o.stencil=o.stencil??!0,o.powerPreference=o.powerPreference??"high-performance";let s=l(n)?n(e,o):d8e(e,o,i),c=typeof WebGL2RenderingContext<"u"&&s instanceof WebGL2RenderingContext;this._canvas=e,this._originalGLContext=s,this._gl=s,this._webgl2=c,this._id=Qn(),this.validateFramebuffer=!1,this.validateShaderProgram=!1,this.logShaderCompilation=!1,this._throwOnWebGLError=!1,this._shaderCache=new F2(this),this._textureCache=new I2;let d=s;this._stencilBits=d.getParameter(d.STENCIL_BITS),Xt._maximumCombinedTextureImageUnits=d.getParameter(d.MAX_COMBINED_TEXTURE_IMAGE_UNITS),Xt._maximumCubeMapSize=d.getParameter(d.MAX_CUBE_MAP_TEXTURE_SIZE),Xt._maximumFragmentUniformVectors=d.getParameter(d.MAX_FRAGMENT_UNIFORM_VECTORS),Xt._maximumTextureImageUnits=d.getParameter(d.MAX_TEXTURE_IMAGE_UNITS),Xt._maximumRenderbufferSize=d.getParameter(d.MAX_RENDERBUFFER_SIZE),Xt._maximumTextureSize=d.getParameter(d.MAX_TEXTURE_SIZE),Xt._maximum3DTextureSize=d.getParameter(d.MAX_3D_TEXTURE_SIZE),Xt._maximumVaryingVectors=d.getParameter(d.MAX_VARYING_VECTORS),Xt._maximumVertexAttributes=d.getParameter(d.MAX_VERTEX_ATTRIBS),Xt._maximumVertexTextureImageUnits=d.getParameter(d.MAX_VERTEX_TEXTURE_IMAGE_UNITS),Xt._maximumVertexUniformVectors=d.getParameter(d.MAX_VERTEX_UNIFORM_VECTORS),Xt._maximumSamples=this._webgl2?d.getParameter(d.MAX_SAMPLES):0;let u=d.getParameter(d.ALIASED_LINE_WIDTH_RANGE);Xt._minimumAliasedLineWidth=u[0],Xt._maximumAliasedLineWidth=u[1];let m=d.getParameter(d.ALIASED_POINT_SIZE_RANGE);Xt._minimumAliasedPointSize=m[0],Xt._maximumAliasedPointSize=m[1];let p=d.getParameter(d.MAX_VIEWPORT_DIMS);Xt._maximumViewportWidth=p[0],Xt._maximumViewportHeight=p[1];let b=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_FLOAT);Xt._highpFloatSupported=b.precision!==0;let f=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_INT);Xt._highpIntSupported=f.rangeMax!==0,this._antialias=d.getContextAttributes().antialias,this._standardDerivatives=!!jr(d,["OES_standard_derivatives"]),this._blendMinmax=!!jr(d,["EXT_blend_minmax"]),this._elementIndexUint=!!jr(d,["OES_element_index_uint"]),this._depthTexture=!!jr(d,["WEBGL_depth_texture","WEBKIT_WEBGL_depth_texture"]),this._fragDepth=!!jr(d,["EXT_frag_depth"]),this._debugShaders=jr(d,["WEBGL_debug_shaders"]),this._textureFloat=!!jr(d,["OES_texture_float"]),this._textureHalfFloat=!!jr(d,["OES_texture_half_float"]),this._textureFloatLinear=!!jr(d,["OES_texture_float_linear"]),this._textureHalfFloatLinear=!!jr(d,["OES_texture_half_float_linear"]),this._supportsTextureLod=!!jr(d,["EXT_shader_texture_lod"]),this._colorBufferFloat=!!jr(d,["EXT_color_buffer_float","WEBGL_color_buffer_float"]),this._floatBlend=!!jr(d,["EXT_float_blend"]),this._colorBufferHalfFloat=!!jr(d,["EXT_color_buffer_half_float"]),this._s3tc=!!jr(d,["WEBGL_compressed_texture_s3tc","MOZ_WEBGL_compressed_texture_s3tc","WEBKIT_WEBGL_compressed_texture_s3tc"]),this._pvrtc=!!jr(d,["WEBGL_compressed_texture_pvrtc","WEBKIT_WEBGL_compressed_texture_pvrtc"]),this._astc=!!jr(d,["WEBGL_compressed_texture_astc"]),this._etc=!!jr(d,["WEBG_compressed_texture_etc"]),this._etc1=!!jr(d,["WEBGL_compressed_texture_etc1"]),this._bc7=!!jr(d,["EXT_texture_compression_bptc"]),Td.setKTX2SupportedFormats(this._s3tc,this._pvrtc,this._astc,this._etc,this._etc1,this._bc7);let y=r?jr(d,["EXT_texture_filter_anisotropic","WEBKIT_EXT_texture_filter_anisotropic"]):void 0;this._textureFilterAnisotropic=y,Xt._maximumTextureFilterAnisotropy=l(y)?d.getParameter(y.MAX_TEXTURE_MAX_ANISOTROPY_EXT):1;let _,S,Z,V,C,G,E,v,F,P;if(c){let A=this;_=function(){return A._gl.createVertexArray()},S=function(W){A._gl.bindVertexArray(W)},Z=function(W){A._gl.deleteVertexArray(W)},V=function(W,X,Y,D,k){d.drawElementsInstanced(W,X,Y,D,k)},C=function(W,X,Y,D){d.drawArraysInstanced(W,X,Y,D)},G=function(W,X){d.vertexAttribDivisor(W,X)},E=function(W){d.drawBuffers(W)}}else v=jr(d,["OES_vertex_array_object"]),l(v)&&(_=function(){return v.createVertexArrayOES()},S=function(A){v.bindVertexArrayOES(A)},Z=function(A){v.deleteVertexArrayOES(A)}),F=jr(d,["ANGLE_instanced_arrays"]),l(F)&&(V=function(A,W,X,Y,D){F.drawElementsInstancedANGLE(A,W,X,Y,D)},C=function(A,W,X,Y){F.drawArraysInstancedANGLE(A,W,X,Y)},G=function(A,W){F.vertexAttribDivisorANGLE(A,W)}),P=jr(d,["WEBGL_draw_buffers"]),l(P)&&(E=function(A){P.drawBuffersWEBGL(A)});this.glCreateVertexArray=_,this.glBindVertexArray=S,this.glDeleteVertexArray=Z,this.glDrawElementsInstanced=V,this.glDrawArraysInstanced=C,this.glVertexAttribDivisor=G,this.glDrawBuffers=E,this._vertexArrayObject=!!v,this._instancedArrays=!!F,this._drawBuffers=!!P,Xt._maximumDrawBuffers=this.drawBuffers?d.getParameter(ne.MAX_DRAW_BUFFERS):1,Xt._maximumColorAttachments=this.drawBuffers?d.getParameter(ne.MAX_COLOR_ATTACHMENTS):1,this._clearColor=new U(0,0,0,0),this._clearDepth=1,this._clearStencil=0;let N=new P2,g=new rc(this),R=Oe.fromCache();this._defaultPassState=g,this._defaultRenderState=R,this._defaultTexture=void 0,this._defaultEmissiveTexture=void 0,this._defaultNormalTexture=void 0,this._defaultCubeMap=void 0,this._us=N,this._currentRenderState=R,this._currentPassState=g,this._currentFramebuffer=void 0,this._maxFrameTextureUnitIndex=0,this._vertexAttribDivisors=[],this._previousDrawInstanced=!1;for(let A=0;A"u")throw new ae("The browser does not support WebGL. Visit http://get.webgl.org.");!n&&!(typeof WebGL2RenderingContext<"u")&&(n=!0);let o=n?"webgl":"webgl2",r=e.getContext(o,t);if(!l(r))throw new ae("The browser supports WebGL, but initialization failed.");return r}function u8e(e,t){let n="WebGL Error: ";switch(t){case e.INVALID_ENUM:n+="INVALID_ENUM";break;case e.INVALID_VALUE:n+="INVALID_VALUE";break;case e.INVALID_OPERATION:n+="INVALID_OPERATION";break;case e.OUT_OF_MEMORY:n+="OUT_OF_MEMORY";break;case e.CONTEXT_LOST_WEBGL:n+="CONTEXT_LOST_WEBGL lost";break;default:n+=`Unknown (${t})`}return n}function m8e(e,t,n,i){let o=`${u8e(e,i)}: ${t.name}(`;for(let r=0;r=8}},antialias:{get:function(){return this._antialias}},msaa:{get:function(){return this._webgl2}},standardDerivatives:{get:function(){return this._standardDerivatives||this._webgl2}},floatBlend:{get:function(){return this._floatBlend}},blendMinmax:{get:function(){return this._blendMinmax||this._webgl2}},elementIndexUint:{get:function(){return this._elementIndexUint||this._webgl2}},depthTexture:{get:function(){return this._depthTexture||this._webgl2}},floatingPointTexture:{get:function(){return this._webgl2||this._textureFloat}},halfFloatingPointTexture:{get:function(){return this._webgl2||this._textureHalfFloat}},textureFloatLinear:{get:function(){return this._textureFloatLinear}},textureHalfFloatLinear:{get:function(){return this._webgl2&&this._textureFloatLinear||!this._webgl2&&this._textureHalfFloatLinear}},supportsTextureLod:{get:function(){return this._webgl2||this._supportsTextureLod}},textureFilterAnisotropic:{get:function(){return!!this._textureFilterAnisotropic}},s3tc:{get:function(){return this._s3tc}},pvrtc:{get:function(){return this._pvrtc}},astc:{get:function(){return this._astc}},etc:{get:function(){return this._etc}},etc1:{get:function(){return this._etc1}},bc7:{get:function(){return this._bc7}},supportsBasis:{get:function(){return this._s3tc||this._pvrtc||this._astc||this._etc||this._etc1||this._bc7}},vertexArrayObject:{get:function(){return this._vertexArrayObject||this._webgl2}},fragmentDepth:{get:function(){return this._fragDepth||this._webgl2}},instancedArrays:{get:function(){return this._instancedArrays||this._webgl2}},colorBufferFloat:{get:function(){return this._colorBufferFloat}},colorBufferHalfFloat:{get:function(){return this._webgl2&&this._colorBufferFloat||!this._webgl2&&this._colorBufferHalfFloat}},drawBuffers:{get:function(){return this._drawBuffers||this._webgl2}},debugShaders:{get:function(){return this._debugShaders}},throwOnWebGLError:{get:function(){return this._throwOnWebGLError},set:function(e){this._throwOnWebGLError=e,this._gl=p8e(this._originalGLContext,e?h8e:void 0)}},defaultTexture:{get:function(){if(this._defaultTexture===void 0){let e=Ct.defaultColor;this._defaultTexture=new Ct({context:this,source:{width:1,height:1,arrayBufferView:new Uint8Array([e.red*255,e.green*255,e.blue*255,e.alpha*255])},flipY:!1})}return this._defaultTexture}},defaultEmissiveTexture:{get:function(){return this._defaultEmissiveTexture===void 0&&(this._defaultEmissiveTexture=new Ct({context:this,pixelFormat:Be.RGB,source:{width:1,height:1,arrayBufferView:new Uint8Array([0,0,0])},flipY:!1})),this._defaultEmissiveTexture}},defaultNormalTexture:{get:function(){return this._defaultNormalTexture===void 0&&(this._defaultNormalTexture=new Ct({context:this,pixelFormat:Be.RGB,source:{width:1,height:1,arrayBufferView:new Uint8Array([128,128,255])},flipY:!1})),this._defaultNormalTexture}},defaultCubeMap:{get:function(){if(this._defaultCubeMap===void 0){let e={width:1,height:1,arrayBufferView:new Uint8Array([255,255,255,255])};this._defaultCubeMap=new Jr({context:this,source:{positiveX:e,negativeX:e,positiveY:e,negativeY:e,positiveZ:e,negativeZ:e},flipY:!1})}return this._defaultCubeMap}},drawingBufferHeight:{get:function(){return this._gl.drawingBufferHeight}},drawingBufferWidth:{get:function(){return this._gl.drawingBufferWidth}},defaultFramebuffer:{get:function(){return b8e}}});function pbe(e,t,n,i){let o=e._currentRenderState,r=e._currentPassState;e._currentRenderState=t,e._currentPassState=n,Oe.partialApply(e._gl,o,t,r,n,i)}var O7;typeof WebGLRenderingContext<"u"&&(O7=[ne.BACK]);function LO(e,t){if(t!==e._currentFramebuffer){e._currentFramebuffer=t;let n=O7;if(l(t))t._bind(),n=t._getActiveColorAttachments();else{let i=e._gl;i.bindFramebuffer(i.FRAMEBUFFER,null)}e.drawBuffers&&e.glDrawBuffers(n)}}var g8e=new mi;Ad.prototype.clear=function(e,t){e=e??g8e,t=t??this._defaultPassState;let n=this._gl,i=0,o=e.color,r=e.depth,s=e.stencil;l(o)&&(U.equals(this._clearColor,o)||(U.clone(o,this._clearColor),n.clearColor(o.red,o.green,o.blue,o.alpha)),i|=n.COLOR_BUFFER_BIT),l(r)&&(r!==this._clearDepth&&(this._clearDepth=r,n.clearDepth(r)),i|=n.DEPTH_BUFFER_BIT),l(s)&&(s!==this._clearStencil&&(this._clearStencil=s,n.clearStencil(s)),i|=n.STENCIL_BUFFER_BIT);let a=e.renderState??this._defaultRenderState;pbe(this,a,t,!0);let c=e.framebuffer??t.framebuffer;LO(this,c),n.clear(i)};function y8e(e,t,n,i,o){LO(e,t),pbe(e,o,n,!1),i._bind(),e._maxFrameTextureUnitIndex=Math.max(e._maxFrameTextureUnitIndex,i.maximumTextureUnitIndex)}function x8e(e,t,n,i){let o=t._primitiveType,r=t._vertexArray,s=t._offset,a=t._count,c=t.instanceCount;e._us.model=t._modelMatrix??I.IDENTITY,n._setUniforms(i,e._us,e.validateShaderProgram),r._bind();let d=r.indexBuffer;l(d)?(s=s*d.bytesPerIndex,l(a)?a=Math.min(a,d.numberOfIndices):a=d.numberOfIndices,c===0?e._gl.drawElements(o,a,d.indexDatatype,s):e.glDrawElementsInstanced(o,a,d.indexDatatype,s,c)):(l(a)?a=Math.min(a,r.numberOfVertices):a=r.numberOfVertices,c===0?e._gl.drawArrays(o,s,a):e.glDrawArraysInstanced(o,s,a,c)),r._unBind()}Ad.prototype.draw=function(e,t,n,i){t=t??this._defaultPassState;let o=e._framebuffer??t.framebuffer,r=e._renderState??this._defaultRenderState;n=n??e._shaderProgram,i=i??e._uniformMap,y8e(this,o,t,n,r),x8e(this,e,n,i)};Ad.prototype.beginFrame=function(){};Ad.prototype.endFrame=function(){let e=this._gl;e.useProgram(null),this._currentFramebuffer=void 0,e.bindFramebuffer(e.FRAMEBUFFER,null);let t=O7;this.drawBuffers&&this.glDrawBuffers(t);let n=this._maxFrameTextureUnitIndex;this._maxFrameTextureUnitIndex=0;for(let i=0;i0&&(a=s.getColorTexture(0).pixelDatatype,c=s.getColorTexture(0).pixelFormat);let d=et.createPixelBuffer({context:this,sizeInBytes:Be.textureSizeInBytes(c,a,o,r),usage:Ie.DYNAMIC_READ});return LO(this,s),d._bind(),t.readPixels(n,i,o,r,c,Me.toWebGLConstant(a,this),0),d._unBind(),d};Ad.prototype.readPixels=function(e){let t=this._gl;e=e??B.EMPTY_OBJECT;let n=Math.max(e.x??0,0),i=Math.max(e.y??0,0),o=e.width??this.drawingBufferWidth,r=e.height??this.drawingBufferHeight,s=e.framebuffer,a=Me.UNSIGNED_BYTE,c=Be.RGBA;l(s)&&s.numberOfColorAttachments>0&&(a=s.getColorTexture(0).pixelDatatype,c=s.getColorTexture(0).pixelFormat);let d=Be.createTypedArray(c,a,o,r);return LO(this,s),t.readPixels(n,i,o,r,Be.RGBA,Me.toWebGLConstant(a,this),d),d};var bbe={position:0,textureCoordinates:1};Ad.prototype.getViewportQuadVertexArray=function(){let e=this.cache.viewportQuad_vertexArray;if(!l(e)){let t=new Zt({attributes:{position:new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1]}),textureCoordinates:new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:[0,0,1,0,1,1,0,1]})},indices:new Uint16Array([0,1,2,0,2,3]),primitiveType:Fe.TRIANGLES});e=Dn.fromGeometry({context:this,geometry:t,attributeLocations:bbe,bufferUsage:Ie.STATIC_DRAW,interleave:!0}),this.cache.viewportQuad_vertexArray=e}return e};Ad.prototype.createViewportQuadCommand=function(e,t){return t=t??B.EMPTY_OBJECT,new ot({vertexArray:this.getViewportQuadVertexArray(),primitiveType:Fe.TRIANGLES,renderState:t.renderState,shaderProgram:en.fromCache({context:this,vertexShaderSource:E_,fragmentShaderSource:e,attributeLocations:bbe}),uniformMap:t.uniformMap,owner:t.owner,framebuffer:t.framebuffer,pass:t.pass})};Ad.prototype.getObjectByPickColor=function(e){return this._pickObjects.get(e)};Ad.prototype.createPickId=function(e){++this._nextPickColor[0];let t=this._nextPickColor[0];if(t===0)throw new ae("Out of unique Pick IDs.");return this._pickObjects.set(t,e),new v2(this._pickObjects,t,U.fromRgba(t))};Ad.prototype.isDestroyed=function(){return!1};Ad.prototype.destroy=function(){let e=this.cache;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];l(n.destroy)&&n.destroy()}return this._shaderCache=this._shaderCache.destroy(),this._textureCache=this._textureCache.destroy(),this._defaultTexture=this._defaultTexture&&this._defaultTexture.destroy(),this._defaultEmissiveTexture=this._defaultEmissiveTexture&&this._defaultEmissiveTexture.destroy(),this._defaultNormalTexture=this._defaultNormalTexture&&this._defaultNormalTexture.destroy(),this._defaultCubeMap=this._defaultCubeMap&&this._defaultCubeMap.destroy(),me(this)};var W_=Ad;var HMn=x(T(),1);var CMn=x(T(),1);function O1(e){e=e??B.EMPTY_OBJECT;let{context:t,width:n,height:i,colorRenderbuffers:o,colorTextures:r,depthStencilRenderbuffer:s,depthStencilTexture:a,destroyAttachments:c}=e;if(this._width=n,this._height=i,l(o)!==l(r))throw new ge("Both color renderbuffer and texture attachments must be provided.");if(l(s)!==l(a))throw new ge("Both depth-stencil renderbuffer and texture attachments must be provided.");this._renderFramebuffer=new ps({context:t,colorRenderbuffers:o,depthStencilRenderbuffer:s,destroyAttachments:c}),this._colorFramebuffer=new ps({context:t,colorTextures:r,depthStencilTexture:a,destroyAttachments:c})}O1.prototype.getRenderFramebuffer=function(){return this._renderFramebuffer};O1.prototype.getColorFramebuffer=function(){return this._colorFramebuffer};O1.prototype.blitFramebuffers=function(e,t){this._renderFramebuffer.bindRead(),this._colorFramebuffer.bindDraw();let n=e._gl,i=0;this._colorFramebuffer._colorTextures.length>0&&(i|=n.COLOR_BUFFER_BIT),l(this._colorFramebuffer.depthStencilTexture)&&(i|=n.DEPTH_BUFFER_BIT|(t?n.STENCIL_BUFFER_BIT:0)),n.blitFramebuffer(0,0,this._width,this._height,0,0,this._width,this._height,i,n.NEAREST),n.bindFramebuffer(n.READ_FRAMEBUFFER,null),n.bindFramebuffer(n.DRAW_FRAMEBUFFER,null)};O1.prototype.isDestroyed=function(){return!1};O1.prototype.destroy=function(){return this._renderFramebuffer.destroy(),this._colorFramebuffer.destroy(),me(this)};var X2=O1;var PMn=x(T(),1);var AMn=x(T(),1);var wl={RGBA4:ne.RGBA4,RGBA8:ne.RGBA8,RGBA16F:ne.RGBA16F,RGBA32F:ne.RGBA32F,RGB5_A1:ne.RGB5_A1,RGB565:ne.RGB565,DEPTH_COMPONENT16:ne.DEPTH_COMPONENT16,STENCIL_INDEX8:ne.STENCIL_INDEX8,DEPTH_STENCIL:ne.DEPTH_STENCIL,DEPTH24_STENCIL8:ne.DEPTH24_STENCIL8,validate:function(e){return e===wl.RGBA4||e===wl.RGBA8||e===wl.RGBA16F||e===wl.RGBA32F||e===wl.RGB5_A1||e===wl.RGB565||e===wl.DEPTH_COMPONENT16||e===wl.STENCIL_INDEX8||e===wl.DEPTH_STENCIL||e===wl.DEPTH24_STENCIL8},getColorFormat:function(e){return e===ne.FLOAT?wl.RGBA32F:e===ne.HALF_FLOAT_OES?wl.RGBA16F:wl.RGBA8}};Object.freeze(wl);var Ml=wl;function N2(e){e=e??B.EMPTY_OBJECT;let t=e.context,n=t._gl,i=Xt.maximumRenderbufferSize,o=e.format??Ml.RGBA4,r=l(e.width)?e.width:t.drawingBufferWidth,s=l(e.height)?e.height:t.drawingBufferHeight,a=e.numSamples??1;this._gl=n,this._format=o,this._width=r,this._height=s,this._renderbuffer=this._gl.createRenderbuffer(),n.bindRenderbuffer(n.RENDERBUFFER,this._renderbuffer),a>1?n.renderbufferStorageMultisample(n.RENDERBUFFER,a,o,r,s):n.renderbufferStorage(n.RENDERBUFFER,o,r,s),n.bindRenderbuffer(n.RENDERBUFFER,null)}Object.defineProperties(N2.prototype,{format:{get:function(){return this._format}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});N2.prototype._getRenderbuffer=function(){return this._renderbuffer};N2.prototype.isDestroyed=function(){return!1};N2.prototype.destroy=function(){return this._gl.deleteRenderbuffer(this._renderbuffer),me(this)};var gu=N2;function pa(e){e=e??B.EMPTY_OBJECT,this._numSamples=e.numSamples??1,this._colorAttachmentsLength=e.colorAttachmentsLength??1,this._color=e.color??!0,this._depth=e.depth??!1,this._depthStencil=e.depthStencil??!1,this._supportsDepthTexture=e.supportsDepthTexture??!1,this._createColorAttachments=e.createColorAttachments??!0,this._createDepthAttachments=e.createDepthAttachments??!0,this._pixelDatatype=e.pixelDatatype,this._pixelFormat=e.pixelFormat,this._width=void 0,this._height=void 0,this._framebuffer=void 0,this._multisampleFramebuffer=void 0,this._colorTextures=void 0,this._color&&(this._colorTextures=new Array(this._colorAttachmentsLength),this._colorRenderbuffers=new Array(this._colorAttachmentsLength)),this._colorRenderbuffer=void 0,this._depthStencilRenderbuffer=void 0,this._depthStencilTexture=void 0,this._depthRenderbuffer=void 0,this._depthTexture=void 0,this._attachmentsDirty=!1}Object.defineProperties(pa.prototype,{framebuffer:{get:function(){return this._numSamples>1?this._multisampleFramebuffer.getRenderFramebuffer():this._framebuffer}},numSamples:{get:function(){return this._numSamples}},status:{get:function(){return this.framebuffer.status}}});pa.prototype.isDirty=function(e,t,n,i,o){n=n??1;let r=this._width!==e||this._height!==t,s=this._numSamples!==n,a=l(i)&&this._pixelDatatype!==i||l(o)&&this._pixelFormat!==o,c=n===1?l(this._framebuffer):l(this._multisampleFramebuffer);return this._attachmentsDirty||r||s||a||!c||this._color&&!l(this._colorTextures[0])};pa.prototype.update=function(e,t,n,i,o,r){if(i=e.msaa?i??1:1,o=o??(this._color?this._pixelDatatype??Me.UNSIGNED_BYTE:void 0),r=r??(this._color?this._pixelFormat??Be.RGBA:void 0),this.isDirty(t,n,i,o,r)){if(this.destroy(),this._width=t,this._height=n,this._numSamples=i,this._pixelDatatype=o,this._pixelFormat=r,this._attachmentsDirty=!1,this._color&&this._createColorAttachments){for(let s=0;s1){let a=Ml.getColorFormat(o);this._colorRenderbuffers[s]=new gu({context:e,width:t,height:n,format:a,numSamples:this._numSamples})}}this._depthStencil&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?(this._depthStencilTexture=new Ct({context:e,width:t,height:n,pixelFormat:Be.DEPTH_STENCIL,pixelDatatype:Me.UNSIGNED_INT_24_8,sampler:kt.NEAREST}),this._numSamples>1&&(this._depthStencilRenderbuffer=new gu({context:e,width:t,height:n,format:Ml.DEPTH24_STENCIL8,numSamples:this._numSamples}))):this._depthStencilRenderbuffer=new gu({context:e,width:t,height:n,format:Ml.DEPTH_STENCIL})),this._depth&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?this._depthTexture=new Ct({context:e,width:t,height:n,pixelFormat:Be.DEPTH_COMPONENT,pixelDatatype:Me.UNSIGNED_INT,sampler:kt.NEAREST}):this._depthRenderbuffer=new gu({context:e,width:t,height:n,format:Ml.DEPTH_COMPONENT16})),this._numSamples>1?this._multisampleFramebuffer=new X2({context:e,width:this._width,height:this._height,colorTextures:this._colorTextures,colorRenderbuffers:this._colorRenderbuffers,depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1}):this._framebuffer=new ps({context:e,colorTextures:this._colorTextures,depthTexture:this._depthTexture,depthRenderbuffer:this._depthRenderbuffer,depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1})}};pa.prototype.getColorTexture=function(e){return e=e??0,this._colorTextures[e]};pa.prototype.setColorTexture=function(e,t){t=t??0,this._attachmentsDirty=e!==this._colorTextures[t],this._colorTextures[t]=e};pa.prototype.getColorRenderbuffer=function(e){return e=e??0,this._colorRenderbuffers[e]};pa.prototype.setColorRenderbuffer=function(e,t){t=t??0,this._attachmentsDirty=e!==this._colorRenderbuffers[t],this._colorRenderbuffers[t]=e};pa.prototype.getDepthRenderbuffer=function(){return this._depthRenderbuffer};pa.prototype.setDepthRenderbuffer=function(e){this._attachmentsDirty=e!==this._depthRenderbuffer,this._depthRenderbuffer=e};pa.prototype.getDepthTexture=function(){return this._depthTexture};pa.prototype.setDepthTexture=function(e){this._attachmentsDirty=e!==this._depthTexture,this._depthTexture=e};pa.prototype.getDepthStencilRenderbuffer=function(){return this._depthStencilRenderbuffer};pa.prototype.setDepthStencilRenderbuffer=function(e){this._attachmentsDirty=e!==this._depthStencilRenderbuffer,this._depthStencilRenderbuffer=e};pa.prototype.getDepthStencilTexture=function(){return this._depthStencilTexture};pa.prototype.setDepthStencilTexture=function(e){this._attachmentsDirty=e!==this._depthStencilTexture,this._depthStencilTexture=e};pa.prototype.prepareTextures=function(e,t){this._numSamples>1&&this._multisampleFramebuffer.blitFramebuffers(e,t)};pa.prototype.clear=function(e,t,n){let i=t.framebuffer;t.framebuffer=this.framebuffer,t.execute(e,n),t.framebuffer=i};pa.prototype.destroyFramebuffer=function(){this._framebuffer=this._framebuffer&&this._framebuffer.destroy(),this._multisampleFramebuffer=this._multisampleFramebuffer&&this._multisampleFramebuffer.destroy()};pa.prototype.destroy=function(){if(this._color){let e=this._colorTextures,t=this._colorRenderbuffers;for(let n=0;n{n.getStatus()===ne.SIGNALED?o():s<=0?r(new ae("Wait for signal timeout")):e(i(o,r,s-1))}}return new Promise((o,r)=>{e(i(o,r,t))})};var k2=v_;var Pkn=x(T(),1);function jy(e){e=e??B.EMPTY_OBJECT;let{context:t,source:n,pixelFormat:i=Be.RGBA,pixelDatatype:o=Me.UNSIGNED_BYTE,flipY:r=!0,skipColorSpaceConversion:s=!1,sampler:a=new kt}=e;if(!t.webgl2&&!l(t.options.getWebGLStub))throw new ge("WebGL1 does not support texture3D. Please use a WebGL2 context.");let{width:c,height:d,depth:u}=e;l(n)&&(l(c)||(c=n.width),l(d)||(d=n.height),l(u)||(u=n.depth));let m=e.preMultiplyAlpha||i===Be.RGB||i===Be.LUMINANCE,p=Be.toInternalFormat(i,o,t),b=Be.isCompressedFormat(p),f=t._gl,y=Be.texture3DSizeInBytes(i,o,c,d,u);if(this._id=e.id??Qn(),this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=f.TEXTURE_3D,this._texture=f.createTexture(),this._internalFormat=p,this._pixelFormat=i,this._pixelDatatype=o,this._width=c,this._height=d,this._depth=u,this._dimensions=new h(c,d,u),this._hasMipmap=!1,this._sizeInBytes=y,this._preMultiplyAlpha=m,this._flipY=r,this._initialized=!1,this._sampler=void 0,this._sampler=a,xbe(this,a),f.activeTexture(f.TEXTURE0),f.bindTexture(this._textureTarget,this._texture),l(n)){if(s?f.pixelStorei(f.UNPACK_COLORSPACE_CONVERSION_WEBGL,f.NONE):f.pixelStorei(f.UNPACK_COLORSPACE_CONVERSION_WEBGL,f.BROWSER_DEFAULT_WEBGL),!l(n.arrayBufferView))throw new ge("For Texture3D, options.source.arrayBufferView must be defined");gbe(this,n),this._initialized=!0}else ybe(this);f.bindTexture(this._textureTarget,null)}function gbe(e,t){let n=e._context,i=n._gl,o=e._textureTarget,r=e._internalFormat,{width:s,height:a,depth:c,pixelFormat:d,pixelDatatype:u,flipY:m}=e,p=Be.alignmentInBytes(d,u,s);i.pixelStorei(i.UNPACK_ALIGNMENT,p),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1);let{arrayBufferView:b}=t;m&&console.warn("texture3D.flipY is not supported.");let f=1;if(t.mipLevels&&t.mipLevels.length&&(f=t.mipLevels.length+1),i.texStorage3D(o,f,r,s,a,c),i.texSubImage3D(o,0,0,0,0,s,a,c,d,Me.toWebGLConstant(u,n),b),f>1){let y=s,_=a,S=c;for(let Z=0;Znew _be({index:S,image:_})).filter((_,S)=>l(_.image)&&!l(c.get(S))),u=0,m=0,p=0;for(let _=t;_=s*a;)s>a?a*=2:s*=2;d.sort(({image:_},{image:S})=>S.height*S.width-_.height*_.width);let b=new Array(this._nextIndex);for(let _ of this._subRegions.keys())l(c.get(_))&&(b[_]=i[_]);let f,y=!1;for(;!y;){f=new M1({height:a,width:s,borderPadding:n});let _;for(_=0;_a?a*=2:s*=2;break}b[S]=V.rectangle}y=_===d.length}this._texturePacker=f,this._texture=this._copyFromTexture(e,s,a,b),r.destroy(),this._rectangles=b,this._guid=Qn()};Ul.prototype.getImageIndex=function(e){return this._indexById.get(e)};Ul.prototype._copyImageToTexture=function({index:e,image:t,resolve:n,reject:i}){let o=this._texture,r=this._rectangles[e];try{o.copyFrom({source:t,xOffset:r.x,yOffset:r.y}),l(n)&&n(e)}catch(s){if(l(i)){i(s);return}}};function _be({index:e,image:t,resolve:n,reject:i}){this.index=e,this.image=t,this.resolve=n,this.reject=i,this.rectangle=void 0}Ul.prototype._addImage=function(e,t){return new Promise((n,i)=>{this._imagesToAddQueue.push(new _be({index:e,image:t,resolve:n,reject:i})),this._imagesToAddQueue.sort(({image:o},{image:r})=>r.height*r.width-o.height*o.width)})};Ul.prototype._processImageQueue=function(e){let t=this._imagesToAddQueue;if(t.length===0)return!1;this._rectangles.length=this._nextIndex;let n,i;for(n=0;n{let a=await V8e(t,e);if(this.isDestroyed()||!l(a))return this._indexPromiseById.delete(e),-1;l(n)&&(a.width=n),l(i)&&(a.height=i);let c=await this._addImage(r,a);return this._indexPromiseById.delete(e),c})(),this._indexPromiseById.set(e,o),o)};Ul.prototype.getCachedImageSubRegion=function(e,t,n){let i=this._indexPromiseById.get(e);for(let[o,r]of this._subRegions.entries())if(n===r&&this._rectangles[o].equals(t))return i?i.then(a=>a===-1?-1:o):o};Ul.prototype.addImageSubRegion=function(e,t){let n=this._indexById.get(e);if(!l(n))throw new ae(`image with id "${e}" not found in the atlas.`);let i=this.getCachedImageSubRegion(e,t,n);return l(i)?i:(i=this._nextIndex++,this._subRegions.set(i,n),this._rectangles[i]=t.clone(),(this._indexPromiseById.get(e)??Promise.resolve(n)).then(r=>{if(r===-1)return-1;let s=this._rectangles[r];return i}))};Ul.prototype.isDestroyed=function(){return!1};Ul.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),this._imagesToAddQueue.forEach(({resolve:e})=>{l(e)&&e(-1)}),me(this)};var F_=Ul;var r9n=x(T(),1);function va(e,t,n,i){let o=va._verifyAttributes(t);n=n??0;let r=[],s={},a,c,d=o.length;for(let m=0;m0?J.getSizeInBytes(e[0].componentDatatype):0,o=i>0?t%i:0,r=o===0?0:i-o;return t+=r,t};va._createArrayViews=function(e,t){let n=[],i=0,o=e.length;for(let r=0;r0){let n=new ArrayBuffer(t*e.vertexSizeInBytes);if(l(e.arrayBuffer)){let r=new Uint8Array(n),s=new Uint8Array(e.arrayBuffer),a=s.length;for(let c=0;c0){t.needsCommit=!1;let n=t.vertexBuffer,i=e._size*t.vertexSizeInBytes,o=l(n);if(!o||n.sizeInBytes0){let i=e.vertexSizeInBytes*t,o=e.vertexSizeInBytes*n;e.vertexBuffer.copyFromArrayView(new Uint8Array(e.arrayBuffer,i,o),i)}}va.prototype.endSubCommits=function(){let e=this._allBuffers;for(let t=0,n=e.length;t halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) { #ifdef DEBUG_SHOW_VOLUME out_FragColor = vec4(1.0, 0.0, 0.0, 0.5); return; #else // DEBUG_SHOW_VOLUME discard; #endif // DEBUG_SHOW_VOLUME } // Check distance of the eye coordinate against start and end planes with normals in the right plane. // For computing unskewed lengthwise texture coordinate. // Can also be used for clipping extremely pointy miters, but in practice unnecessary because of miter breaking. // aligned plane: cross the right plane normal with miter plane normal, then cross the result with right again to point it more "forward" vec3 alignedPlaneNormal; // start aligned plane alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_startPlaneNormalEcAndHalfWidth.xyz); alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz)); distanceFromStart = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, ecStart), eyeCoordinate.xyz); // end aligned plane alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_endPlaneNormalEcAndBatchId.xyz); alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz)); distanceFromEnd = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, v_endEcAndStartEcX.xyz), eyeCoordinate.xyz); #ifdef PER_INSTANCE_COLOR out_FragColor = czm_gammaCorrect(v_color); #else // PER_INSTANCE_COLOR // Clamp - distance to aligned planes may be negative due to mitering, // so fragment texture coordinate might be out-of-bounds. float s = clamp(distanceFromStart / (distanceFromStart + distanceFromEnd), 0.0, 1.0); s = (s * v_texcoordNormalizationAndStartEcYZ.x) + v_texcoordNormalizationAndStartEcYZ.y; float t = (widthwiseDistance + halfMaxWidth) / (2.0 * halfMaxWidth); czm_materialInput materialInput; materialInput.s = s; materialInput.st = vec2(s, t); materialInput.str = vec3(s, t, 0.0); czm_material material = czm_getMaterial(materialInput); out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #endif // PER_INSTANCE_COLOR // Premultiply alpha. Required for classification primitives on translucent globe. out_FragColor.rgb *= out_FragColor.a; czm_writeDepthClamp(); } `;var T9n=x(T(),1),z2=`in vec3 v_forwardDirectionEC; in vec3 v_texcoordNormalizationAndHalfWidth; in float v_batchId; #ifdef PER_INSTANCE_COLOR in vec4 v_color; #else in vec2 v_alignedPlaneDistances; in float v_texcoordT; #endif float rayPlaneDistanceUnsafe(vec3 origin, vec3 direction, vec3 planeNormal, float planeDistance) { // We don't expect the ray to ever be parallel to the plane return (-planeDistance - dot(planeNormal, origin)) / dot(planeNormal, direction); } void main(void) { vec4 eyeCoordinate = gl_FragCoord; eyeCoordinate /= eyeCoordinate.w; #ifdef PER_INSTANCE_COLOR out_FragColor = czm_gammaCorrect(v_color); #else // PER_INSTANCE_COLOR // Use distances for planes aligned with segment to prevent skew in dashing float distanceFromStart = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, -v_forwardDirectionEC, v_forwardDirectionEC.xyz, v_alignedPlaneDistances.x); float distanceFromEnd = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, v_forwardDirectionEC, -v_forwardDirectionEC.xyz, v_alignedPlaneDistances.y); // Clamp - distance to aligned planes may be negative due to mitering distanceFromStart = max(0.0, distanceFromStart); distanceFromEnd = max(0.0, distanceFromEnd); float s = distanceFromStart / (distanceFromStart + distanceFromEnd); s = (s * v_texcoordNormalizationAndHalfWidth.x) + v_texcoordNormalizationAndHalfWidth.y; czm_materialInput materialInput; materialInput.s = s; materialInput.st = vec2(s, v_texcoordT); materialInput.str = vec3(s, v_texcoordT, 0.0); czm_material material = czm_getMaterial(materialInput); out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #endif // PER_INSTANCE_COLOR } `;var S9n=x(T(),1),H2=`in vec3 position3DHigh; in vec3 position3DLow; in vec4 startHiAndForwardOffsetX; in vec4 startLoAndForwardOffsetY; in vec4 startNormalAndForwardOffsetZ; in vec4 endNormalAndTextureCoordinateNormalizationX; in vec4 rightNormalAndTextureCoordinateNormalizationY; in vec4 startHiLo2D; in vec4 offsetAndRight2D; in vec4 startEndNormals2D; in vec2 texcoordNormalization2D; in float batchId; out vec3 v_forwardDirectionEC; out vec3 v_texcoordNormalizationAndHalfWidth; out float v_batchId; // For materials #ifdef WIDTH_VARYING out float v_width; #endif #ifdef ANGLE_VARYING out float v_polylineAngle; #endif #ifdef PER_INSTANCE_COLOR out vec4 v_color; #else out vec2 v_alignedPlaneDistances; out float v_texcoordT; #endif // Morphing planes using SLERP or NLERP doesn't seem to work, so instead draw the material directly on the shadow volume. // Morph views are from very far away and aren't meant to be used precisely, so this should be sufficient. void main() { v_batchId = batchId; // Start position vec4 posRelativeToEye2D = czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw)); vec4 posRelativeToEye3D = czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz); vec4 posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime); vec3 posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz; vec3 posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz; vec3 startEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz; // Start plane vec4 startPlane2D; vec4 startPlane3D; startPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy); startPlane3D.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz; startPlane2D.w = -dot(startPlane2D.xyz, posEc2D); startPlane3D.w = -dot(startPlane3D.xyz, posEc3D); // Right plane vec4 rightPlane2D; vec4 rightPlane3D; rightPlane2D.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw); rightPlane3D.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz; rightPlane2D.w = -dot(rightPlane2D.xyz, posEc2D); rightPlane3D.w = -dot(rightPlane3D.xyz, posEc3D); // End position posRelativeToEye2D = posRelativeToEye2D + vec4(0.0, offsetAndRight2D.xy, 0.0); posRelativeToEye3D = posRelativeToEye3D + vec4(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w, 0.0); posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime); posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz; posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz; vec3 endEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz; vec3 forwardEc3D = czm_normal * normalize(vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w)); vec3 forwardEc2D = czm_normal * normalize(vec3(0.0, offsetAndRight2D.xy)); // End plane vec4 endPlane2D; vec4 endPlane3D; endPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw); endPlane3D.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz; endPlane2D.w = -dot(endPlane2D.xyz, posEc2D); endPlane3D.w = -dot(endPlane3D.xyz, posEc3D); // Forward direction v_forwardDirectionEC = normalize(endEC - startEC); vec2 cleanTexcoordNormalization2D; cleanTexcoordNormalization2D.x = abs(texcoordNormalization2D.x); cleanTexcoordNormalization2D.y = czm_branchFreeTernary(texcoordNormalization2D.y > 1.0, 0.0, abs(texcoordNormalization2D.y)); vec2 cleanTexcoordNormalization3D; cleanTexcoordNormalization3D.x = abs(endNormalAndTextureCoordinateNormalizationX.w); cleanTexcoordNormalization3D.y = rightNormalAndTextureCoordinateNormalizationY.w; cleanTexcoordNormalization3D.y = czm_branchFreeTernary(cleanTexcoordNormalization3D.y > 1.0, 0.0, abs(cleanTexcoordNormalization3D.y)); v_texcoordNormalizationAndHalfWidth.xy = mix(cleanTexcoordNormalization2D, cleanTexcoordNormalization3D, czm_morphTime); #ifdef PER_INSTANCE_COLOR v_color = czm_batchTable_color(batchId); #else // PER_INSTANCE_COLOR // For computing texture coordinates v_alignedPlaneDistances.x = -dot(v_forwardDirectionEC, startEC); v_alignedPlaneDistances.y = -dot(-v_forwardDirectionEC, endEC); #endif // PER_INSTANCE_COLOR #ifdef WIDTH_VARYING float width = czm_batchTable_width(batchId); float halfWidth = width * 0.5; v_width = width; v_texcoordNormalizationAndHalfWidth.z = halfWidth; #else float halfWidth = 0.5 * czm_batchTable_width(batchId); v_texcoordNormalizationAndHalfWidth.z = halfWidth; #endif // Compute a normal along which to "push" the position out, extending the miter depending on view distance. // Position has already been "pushed" by unit length along miter normal, and miter normals are encoded in the planes. // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be. // Since this is morphing, compute both 3D and 2D positions and then blend. // ****** 3D ****** // Check distance to the end plane and start plane, pick the plane that is closer vec4 positionEc3D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position3DHigh, position3DLow); // w = 1.0, see czm_computePosition float absStartPlaneDistance = abs(czm_planeDistance(startPlane3D, positionEc3D.xyz)); float absEndPlaneDistance = abs(czm_planeDistance(endPlane3D, positionEc3D.xyz)); vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane3D.xyz, endPlane3D.xyz); vec3 upOrDown = normalize(cross(rightPlane3D.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane. vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too. // Nudge the top vertex upwards to prevent flickering vec3 geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc3D)); geodeticSurfaceNormal *= float(0.0 <= rightNormalAndTextureCoordinateNormalizationY.w && rightNormalAndTextureCoordinateNormalizationY.w <= 1.0); geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT; positionEc3D.xyz += geodeticSurfaceNormal; // Determine if this vertex is on the "left" or "right" normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w); // A "perfect" implementation would push along normals according to the angle against forward. // In practice, just pushing the normal out by halfWidth is sufficient for morph views. positionEc3D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc3D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera) // ****** 2D ****** // Check distance to the end plane and start plane, pick the plane that is closer vec4 positionEc2D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy); // w = 1.0, see czm_computePosition absStartPlaneDistance = abs(czm_planeDistance(startPlane2D, positionEc2D.xyz)); absEndPlaneDistance = abs(czm_planeDistance(endPlane2D, positionEc2D.xyz)); planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane2D.xyz, endPlane2D.xyz); upOrDown = normalize(cross(rightPlane2D.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane. normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too. // Nudge the top vertex upwards to prevent flickering geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc2D)); geodeticSurfaceNormal *= float(0.0 <= texcoordNormalization2D.y && texcoordNormalization2D.y <= 1.0); geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT; positionEc2D.xyz += geodeticSurfaceNormal; // Determine if this vertex is on the "left" or "right" normalEC *= sign(texcoordNormalization2D.x); #ifndef PER_INSTANCE_COLOR // Use vertex's sidedness to compute its texture coordinate. v_texcoordT = clamp(sign(texcoordNormalization2D.x), 0.0, 1.0); #endif // A "perfect" implementation would push along normals according to the angle against forward. // In practice, just pushing the normal out by halfWidth is sufficient for morph views. positionEc2D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc2D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera) // Blend for actual position gl_Position = czm_projection * mix(positionEc2D, positionEc3D, czm_morphTime); #ifdef ANGLE_VARYING // Approximate relative screen space direction of the line. vec2 approxLineDirection = normalize(vec2(v_forwardDirectionEC.x, -v_forwardDirectionEC.y)); approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y); v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y); #endif } `;var V9n=x(T(),1),K2=`in vec3 position3DHigh; in vec3 position3DLow; // In 2D and in 3D, texture coordinate normalization component signs encodes: // * X sign - sidedness relative to right plane // * Y sign - is negative OR magnitude is greater than 1.0 if vertex is on bottom of volume #ifndef COLUMBUS_VIEW_2D in vec4 startHiAndForwardOffsetX; in vec4 startLoAndForwardOffsetY; in vec4 startNormalAndForwardOffsetZ; in vec4 endNormalAndTextureCoordinateNormalizationX; in vec4 rightNormalAndTextureCoordinateNormalizationY; #else in vec4 startHiLo2D; in vec4 offsetAndRight2D; in vec4 startEndNormals2D; in vec2 texcoordNormalization2D; #endif in float batchId; out vec4 v_startPlaneNormalEcAndHalfWidth; out vec4 v_endPlaneNormalEcAndBatchId; out vec4 v_rightPlaneEC; out vec4 v_endEcAndStartEcX; out vec4 v_texcoordNormalizationAndStartEcYZ; // For materials #ifdef WIDTH_VARYING out float v_width; #endif #ifdef ANGLE_VARYING out float v_polylineAngle; #endif #ifdef PER_INSTANCE_COLOR out vec4 v_color; #endif void main() { #ifdef COLUMBUS_VIEW_2D vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw))).xyz; vec3 forwardDirectionEC = czm_normal * vec3(0.0, offsetAndRight2D.xy); vec3 ecEnd = forwardDirectionEC + ecStart; forwardDirectionEC = normalize(forwardDirectionEC); // Right plane v_rightPlaneEC.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw); v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart); // start plane vec4 startPlaneEC; startPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy); startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart); // end plane vec4 endPlaneEC; endPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw); endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd); v_texcoordNormalizationAndStartEcYZ.x = abs(texcoordNormalization2D.x); v_texcoordNormalizationAndStartEcYZ.y = texcoordNormalization2D.y; #else // COLUMBUS_VIEW_2D vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz)).xyz; vec3 offset = czm_normal * vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w); vec3 ecEnd = ecStart + offset; vec3 forwardDirectionEC = normalize(offset); // start plane vec4 startPlaneEC; startPlaneEC.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz; startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart); // end plane vec4 endPlaneEC; endPlaneEC.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz; endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd); // Right plane v_rightPlaneEC.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz; v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart); v_texcoordNormalizationAndStartEcYZ.x = abs(endNormalAndTextureCoordinateNormalizationX.w); v_texcoordNormalizationAndStartEcYZ.y = rightNormalAndTextureCoordinateNormalizationY.w; #endif // COLUMBUS_VIEW_2D v_endEcAndStartEcX.xyz = ecEnd; v_endEcAndStartEcX.w = ecStart.x; v_texcoordNormalizationAndStartEcYZ.zw = ecStart.yz; #ifdef PER_INSTANCE_COLOR v_color = czm_batchTable_color(batchId); #endif // PER_INSTANCE_COLOR // Compute a normal along which to "push" the position out, extending the miter depending on view distance. // Position has already been "pushed" by unit length along miter normal, and miter normals are encoded in the planes. // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be. vec4 positionRelativeToEye = czm_computePosition(); // Check distance to the end plane and start plane, pick the plane that is closer vec4 positionEC = czm_modelViewRelativeToEye * positionRelativeToEye; // w = 1.0, see czm_computePosition float absStartPlaneDistance = abs(czm_planeDistance(startPlaneEC, positionEC.xyz)); float absEndPlaneDistance = abs(czm_planeDistance(endPlaneEC, positionEC.xyz)); vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlaneEC.xyz, endPlaneEC.xyz); vec3 upOrDown = normalize(cross(v_rightPlaneEC.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane. vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too. // Extrude bottom vertices downward for far view distances, like for GroundPrimitives upOrDown = cross(forwardDirectionEC, normalEC); upOrDown = float(czm_sceneMode == czm_sceneMode3D) * upOrDown; upOrDown = float(v_texcoordNormalizationAndStartEcYZ.y > 1.0 || v_texcoordNormalizationAndStartEcYZ.y < 0.0) * upOrDown; upOrDown = min(GLOBE_MINIMUM_ALTITUDE, czm_geometricToleranceOverMeter * length(positionRelativeToEye.xyz)) * upOrDown; positionEC.xyz += upOrDown; v_texcoordNormalizationAndStartEcYZ.y = czm_branchFreeTernary(v_texcoordNormalizationAndStartEcYZ.y > 1.0, 0.0, abs(v_texcoordNormalizationAndStartEcYZ.y)); // Determine distance along normalEC to push for a volume of appropriate width. // Make volumes about double pixel width for a conservative fit - in practice the // extra cost here is minimal compared to the loose volume heights. // // N = normalEC (guaranteed "right-facing") // R = rightEC // p = angle between N and R // w = distance to push along R if R == N // d = distance to push along N // // N R // { p| } * cos(p) = dot(N, R) = w / d // d | |w * d = w / dot(N, R) // { | } // o---------- polyline segment ----> // float width = czm_batchTable_width(batchId); #ifdef WIDTH_VARYING v_width = width; #endif v_startPlaneNormalEcAndHalfWidth.xyz = startPlaneEC.xyz; v_startPlaneNormalEcAndHalfWidth.w = width * 0.5; v_endPlaneNormalEcAndBatchId.xyz = endPlaneEC.xyz; v_endPlaneNormalEcAndBatchId.w = batchId; width = width * max(0.0, czm_metersPerPixel(positionEC)); // width = distance to push along R width = width / dot(normalEC, v_rightPlaneEC.xyz); // width = distance to push along N // Determine if this vertex is on the "left" or "right" #ifdef COLUMBUS_VIEW_2D normalEC *= sign(texcoordNormalization2D.x); #else normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w); #endif positionEC.xyz += width * normalEC; gl_Position = czm_depthClamp(czm_projection * positionEC); #ifdef ANGLE_VARYING // Approximate relative screen space direction of the line. vec2 approxLineDirection = normalize(vec2(forwardDirectionEC.x, -forwardDirectionEC.y)); approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y); v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y); #endif } `;var R9n=x(T(),1),J7={TERRAIN:0,CESIUM_3D_TILE:1,BOTH:2};J7.NUMBER_OF_CLASSIFICATION_TYPES=3;Object.freeze(J7);var ei=J7;var z9n=x(T(),1);var A9n=x(T(),1),I_=`in vec4 v_color; void main() { out_FragColor = czm_gammaCorrect(v_color); } `;var L9n=x(T(),1),J2=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 prevPosition3DHigh; in vec3 prevPosition3DLow; in vec3 nextPosition3DHigh; in vec3 nextPosition3DLow; in vec2 expandAndWidth; in vec4 color; in float batchId; out vec4 v_color; void main() { float expandDir = expandAndWidth.x; float width = abs(expandAndWidth.y) + 0.5; bool usePrev = expandAndWidth.y < 0.0; vec4 p = czm_computePosition(); vec4 prev = czm_computePrevPosition(); vec4 next = czm_computeNextPosition(); float angle; vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle); gl_Position = czm_viewportOrthographic * positionWC; v_color = color; } `;var Y9n=x(T(),1);function B1(e){e=e??B.EMPTY_OBJECT,this.material=e.material,this.translucent=e.translucent??!0,this._vertexShaderSource=e.vertexShaderSource,this._fragmentShaderSource=e.fragmentShaderSource,this._renderState=e.renderState,this._closed=e.closed??!1}Object.defineProperties(B1.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}}});B1.prototype.getFragmentShaderSource=function(){let e=[];return this.flat&&e.push("#define FLAT"),this.faceForward&&e.push("#define FACE_FORWARD"),l(this.material)&&e.push(this.material.shaderSource),e.push(this.fragmentShaderSource),e.join(` `)};B1.prototype.isTranslucent=function(){return l(this.material)&&this.material.isTranslucent()||!l(this.material)&&this.translucent};B1.prototype.getRenderState=function(){let e=this.isTranslucent(),t=Je(this.renderState,!1);return e?(t.depthMask=!1,t.blending=tn.ALPHA_BLEND):t.depthMask=!0,t};B1.getDefaultRenderState=function(e,t,n){let i={depthTest:{enabled:!0}};return e&&(i.depthMask=!1,i.blending=tn.ALPHA_BLEND),t&&(i.cull={enabled:!0,face:ki.BACK}),l(n)&&(i=It(n,i,!0)),i};var Co=B1;var L8e=`#define CLIP_POLYLINE ${Nl} ${J2}`,W8e=I_;function P_(e){e=e??B.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=P_.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??L8e,this._fragmentShaderSource=e.fragmentShaderSource??W8e,this._renderState=Co.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(P_.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}}});P_.VERTEX_FORMAT=we.POSITION_ONLY;P_.prototype.getFragmentShaderSource=Co.prototype.getFragmentShaderSource;P_.prototype.isTranslucent=Co.prototype.isTranslucent;P_.prototype.getRenderState=Co.prototype.getRenderState;var Ws=P_;var E5n=x(T(),1);var K9n=x(T(),1),j2=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 prevPosition3DHigh; in vec3 prevPosition3DLow; in vec3 nextPosition3DHigh; in vec3 nextPosition3DLow; in vec2 expandAndWidth; in vec2 st; in float batchId; out float v_width; out vec2 v_st; out float v_polylineAngle; void main() { float expandDir = expandAndWidth.x; float width = abs(expandAndWidth.y) + 0.5; bool usePrev = expandAndWidth.y < 0.0; vec4 p = czm_computePosition(); vec4 prev = czm_computePrevPosition(); vec4 next = czm_computeNextPosition(); float angle; vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle); gl_Position = czm_viewportOrthographic * positionWC; v_width = width; v_st.s = st.s; v_st.t = czm_writeNonPerspective(st.t, gl_Position.w); v_polylineAngle = angle; } `;var j9n=x(T(),1),X_=`#ifdef VECTOR_TILE uniform vec4 u_highlightColor; #endif in vec2 v_st; void main() { czm_materialInput materialInput; vec2 st = v_st; st.t = czm_readNonPerspective(st.t, gl_FragCoord.w); materialInput.s = st.s; materialInput.st = st; materialInput.str = vec3(st, 0.0); czm_material material = czm_getMaterial(materialInput); out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #ifdef VECTOR_TILE out_FragColor *= u_highlightColor; #endif czm_writeLogDepth(); } `;var x5n=x(T(),1);var q9n=x(T(),1),Q2=`uniform sampler2D image; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec4 rampColor = texture(image, vec2(materialInput.aspect / (2.0 * czm_pi), 0.5)); rampColor = czm_gammaCorrect(rampColor); material.diffuse = rampColor.rgb; material.alpha = rampColor.a; return material; } `;var eUn=x(T(),1),q2=`uniform sampler2D image; uniform float strength; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; vec2 centerPixel = fract(repeat * st); float centerBump = texture(image, centerPixel).channel; float imageWidth = float(imageDimensions.x); vec2 rightPixel = fract(repeat * (st + vec2(1.0 / imageWidth, 0.0))); float rightBump = texture(image, rightPixel).channel; float imageHeight = float(imageDimensions.y); vec2 leftPixel = fract(repeat * (st + vec2(0.0, 1.0 / imageHeight))); float topBump = texture(image, leftPixel).channel; vec3 normalTangentSpace = normalize(vec3(centerBump - rightBump, centerBump - topBump, clamp(1.0 - strength, 0.1, 1.0))); vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace; material.normal = normalEC; material.diffuse = vec3(0.01); return material; } `;var nUn=x(T(),1),$2=`uniform vec4 lightColor; uniform vec4 darkColor; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights float b = mod(floor(repeat.s * st.s) + floor(repeat.t * st.t), 2.0); // 0.0 or 1.0 // Find the distance from the closest separator (region between two colors) float scaledWidth = fract(repeat.s * st.s); scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5)); float scaledHeight = fract(repeat.t * st.t); scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5)); float value = min(scaledWidth, scaledHeight); vec4 currentColor = mix(lightColor, darkColor, b); vec4 color = czm_antialias(lightColor, darkColor, currentColor, value, 0.03); color = czm_gammaCorrect(color); material.diffuse = color.rgb; material.alpha = color.a; return material; } `;var oUn=x(T(),1),eF=`uniform vec4 lightColor; uniform vec4 darkColor; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights float b = smoothstep(0.3, 0.32, length(fract(repeat * materialInput.st) - 0.5)); // 0.0 or 1.0 vec4 color = mix(lightColor, darkColor, b); color = czm_gammaCorrect(color); material.diffuse = color.rgb; material.alpha = color.a; return material; } `;var sUn=x(T(),1),tF=`uniform sampler2D heights; uniform sampler2D colors; // This material expects heights to be sorted from lowest to highest. float getHeight(int idx, float invTexSize) { vec2 uv = vec2((float(idx) + 0.5) * invTexSize, 0.5); #ifdef OES_texture_float return texture(heights, uv).x; #else return czm_unpackFloat(texture(heights, uv)); #endif } czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); float height = materialInput.height; float invTexSize = 1.0 / float(heightsDimensions.x); float minHeight = getHeight(0, invTexSize); float maxHeight = getHeight(heightsDimensions.x - 1, invTexSize); // early-out when outside the height range if (height < minHeight || height > maxHeight) { material.diffuse = vec3(0.0); material.alpha = 0.0; return material; } // Binary search to find heights above and below. int idxBelow = 0; int idxAbove = heightsDimensions.x; float heightBelow = minHeight; float heightAbove = maxHeight; // while loop not allowed, so use for loop with max iterations. // maxIterations of 16 supports a texture size up to 65536 (2^16). const int maxIterations = 16; for (int i = 0; i < maxIterations; i++) { if (idxBelow >= idxAbove - 1) { break; } int idxMid = (idxBelow + idxAbove) / 2; float heightTex = getHeight(idxMid, invTexSize); if (height > heightTex) { idxBelow = idxMid; heightBelow = heightTex; } else { idxAbove = idxMid; heightAbove = heightTex; } } float lerper = heightBelow == heightAbove ? 1.0 : (height - heightBelow) / (heightAbove - heightBelow); vec2 colorUv = vec2(invTexSize * (float(idxBelow) + 0.5 + lerper), 0.5); vec4 color = texture(colors, colorUv); // undo preumultiplied alpha if (color.a > 0.0) { color.rgb /= color.a; } color.rgb = czm_gammaCorrect(color.rgb); material.diffuse = color.rgb; material.alpha = color.a; return material; } `;var cUn=x(T(),1),nF=`uniform vec4 color; uniform float spacing; uniform float width; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); float distanceToContour = mod(materialInput.height, spacing); #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) float dxc = abs(dFdx(materialInput.height)); float dyc = abs(dFdy(materialInput.height)); float dF = max(dxc, dyc) * czm_pixelRatio * width; float alpha = (distanceToContour < dF) ? 1.0 : 0.0; #else // If no derivatives available (IE 10?), use pixel ratio float alpha = (distanceToContour < (czm_pixelRatio * width)) ? 1.0 : 0.0; #endif vec4 outColor = czm_gammaCorrect(vec4(color.rgb, alpha * color.a)); material.diffuse = outColor.rgb; material.alpha = outColor.a; return material; } `;var dUn=x(T(),1),iF=`uniform sampler2D image; uniform float minimumHeight; uniform float maximumHeight; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); float scaledHeight = clamp((materialInput.height - minimumHeight) / (maximumHeight - minimumHeight), 0.0, 1.0); vec4 rampColor = texture(image, vec2(scaledHeight, 0.5)); rampColor = czm_gammaCorrect(rampColor); material.diffuse = rampColor.rgb; material.alpha = rampColor.a; return material; } `;var mUn=x(T(),1),oF=`uniform vec4 fadeInColor; uniform vec4 fadeOutColor; uniform float maximumDistance; uniform bool repeat; uniform vec2 fadeDirection; uniform vec2 time; float getTime(float t, float coord) { float scalar = 1.0 / maximumDistance; float q = distance(t, coord) * scalar; if (repeat) { float r = distance(t, coord + 1.0) * scalar; float s = distance(t, coord - 1.0) * scalar; q = min(min(r, s), q); } return clamp(q, 0.0, 1.0); } czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; float s = getTime(time.x, st.s) * fadeDirection.s; float t = getTime(time.y, st.t) * fadeDirection.t; float u = length(vec2(s, t)); vec4 color = mix(fadeInColor, fadeOutColor, u); color = czm_gammaCorrect(color); material.emission = color.rgb; material.alpha = color.a; return material; } `;var fUn=x(T(),1),rF=`uniform vec4 color; uniform float cellAlpha; uniform vec2 lineCount; uniform vec2 lineThickness; uniform vec2 lineOffset; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; float scaledWidth = fract(lineCount.s * st.s - lineOffset.s); scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5)); float scaledHeight = fract(lineCount.t * st.t - lineOffset.t); scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5)); float value; // Fuzz Factor - Controls blurriness of lines #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) const float fuzz = 1.2; vec2 thickness = (lineThickness * czm_pixelRatio) - 1.0; // From "3D Engine Design for Virtual Globes" by Cozzi and Ring, Listing 4.13. vec2 dx = abs(dFdx(st)); vec2 dy = abs(dFdy(st)); vec2 dF = vec2(max(dx.s, dy.s), max(dx.t, dy.t)) * lineCount; value = min( smoothstep(dF.s * thickness.s, dF.s * (fuzz + thickness.s), scaledWidth), smoothstep(dF.t * thickness.t, dF.t * (fuzz + thickness.t), scaledHeight)); #else // If no derivatives available (IE 10?), revert to view-dependent fuzz const float fuzz = 0.05; vec2 range = 0.5 - (lineThickness * 0.05); value = min( 1.0 - smoothstep(range.s, range.s + fuzz, scaledWidth), 1.0 - smoothstep(range.t, range.t + fuzz, scaledHeight)); #endif // Edges taken from RimLightingMaterial.glsl // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html float dRim = 1.0 - abs(dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC))); float sRim = smoothstep(0.8, 1.0, dRim); value *= (1.0 - sRim); vec4 halfColor; halfColor.rgb = color.rgb * 0.5; halfColor.a = color.a * (1.0 - ((1.0 - cellAlpha) * value)); halfColor = czm_gammaCorrect(halfColor); material.diffuse = halfColor.rgb; material.emission = halfColor.rgb; material.alpha = halfColor.a; return material; } `;var bUn=x(T(),1),sF=`uniform sampler2D image; uniform float strength; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec4 textureValue = texture(image, fract(repeat * materialInput.st)); vec3 normalTangentSpace = textureValue.channels; normalTangentSpace.xy = normalTangentSpace.xy * 2.0 - 1.0; normalTangentSpace.z = clamp(1.0 - strength, 0.1, 1.0); normalTangentSpace = normalize(normalTangentSpace); vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace; material.normal = normalEC; return material; } `;var yUn=x(T(),1),aF=`uniform vec4 color; float getPointOnLine(vec2 p0, vec2 p1, float x) { float slope = (p0.y - p1.y) / (p0.x - p1.x); return slope * (x - p0.x) + p0.y; } czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) float base = 1.0 - abs(fwidth(st.s)) * 10.0 * czm_pixelRatio; #else // If no derivatives available (IE 10?), 2.5% of the line will be the arrow head float base = 0.975; #endif vec2 center = vec2(1.0, 0.5); float ptOnUpperLine = getPointOnLine(vec2(base, 1.0), center, st.s); float ptOnLowerLine = getPointOnLine(vec2(base, 0.0), center, st.s); float halfWidth = 0.15; float s = step(0.5 - halfWidth, st.t); s *= 1.0 - step(0.5 + halfWidth, st.t); s *= 1.0 - step(base, st.s); float t = step(base, materialInput.st.s); t *= 1.0 - step(ptOnUpperLine, st.t); t *= step(ptOnLowerLine, st.t); // Find the distance from the closest separator (region between two colors) float dist; if (st.s < base) { float d1 = abs(st.t - (0.5 - halfWidth)); float d2 = abs(st.t - (0.5 + halfWidth)); dist = min(d1, d2); } else { float d1 = czm_infinity; if (st.t < 0.5 - halfWidth && st.t > 0.5 + halfWidth) { d1 = abs(st.s - base); } float d2 = abs(st.t - ptOnUpperLine); float d3 = abs(st.t - ptOnLowerLine); dist = min(min(d1, d2), d3); } vec4 outsideColor = vec4(0.0); vec4 currentColor = mix(outsideColor, color, clamp(s + t, 0.0, 1.0)); vec4 outColor = czm_antialias(outsideColor, color, currentColor, dist); outColor = czm_gammaCorrect(outColor); material.diffuse = outColor.rgb; material.alpha = outColor.a; return material; } `;var TUn=x(T(),1),cF=`uniform vec4 color; uniform vec4 gapColor; uniform float dashLength; uniform float dashPattern; in float v_polylineAngle; const float maskLength = 16.0; mat2 rotate(float rad) { float c = cos(rad); float s = sin(rad); return mat2( c, s, -s, c ); } czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 pos = rotate(v_polylineAngle) * gl_FragCoord.xy; // Get the relative position within the dash from 0 to 1 float dashPosition = fract(pos.x / (dashLength * czm_pixelRatio)); // Figure out the mask index. float maskIndex = floor(dashPosition * maskLength); // Test the bit mask. float maskTest = floor(dashPattern / pow(2.0, maskIndex)); vec4 fragColor = (mod(maskTest, 2.0) < 1.0) ? gapColor : color; if (fragColor.a < 0.005) { // matches 0/255 and 1/255 discard; } fragColor = czm_gammaCorrect(fragColor); material.emission = fragColor.rgb; material.alpha = fragColor.a; return material; } `;var SUn=x(T(),1),lF=`uniform vec4 color; uniform float glowPower; uniform float taperPower; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; float glow = glowPower / abs(st.t - 0.5) - (glowPower / 0.5); if (taperPower <= 0.99999) { glow *= min(1.0, taperPower / (0.5 - st.s * 0.5) - (taperPower / 0.5)); } vec4 fragColor; fragColor.rgb = max(vec3(glow - 1.0 + color.rgb), color.rgb); fragColor.a = clamp(glow, 0.0, 1.0) * color.a; fragColor = czm_gammaCorrect(fragColor); material.emission = fragColor.rgb; material.alpha = fragColor.a; return material; } `;var VUn=x(T(),1),dF=`uniform vec4 color; uniform vec4 outlineColor; uniform float outlineWidth; in float v_width; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; float halfInteriorWidth = 0.5 * (v_width - outlineWidth) / v_width; float b = step(0.5 - halfInteriorWidth, st.t); b *= 1.0 - step(0.5 + halfInteriorWidth, st.t); // Find the distance from the closest separator (region between two colors) float d1 = abs(st.t - (0.5 - halfInteriorWidth)); float d2 = abs(st.t - (0.5 + halfInteriorWidth)); float dist = min(d1, d2); vec4 currentColor = mix(outlineColor, color, b); vec4 outColor = czm_antialias(outlineColor, color, currentColor, dist); outColor = czm_gammaCorrect(outColor); material.diffuse = outColor.rgb; material.alpha = outColor.a; return material; } `;var RUn=x(T(),1),uF=`uniform vec4 color; uniform vec4 rimColor; uniform float width; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html float d = 1.0 - dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC)); float s = smoothstep(1.0 - width, 1.0, d); vec4 outColor = czm_gammaCorrect(color); vec4 outRimColor = czm_gammaCorrect(rimColor); material.diffuse = outColor.rgb; material.emission = outRimColor.rgb * s; material.alpha = mix(outColor.a, outRimColor.a, s); return material; } `;var AUn=x(T(),1),mF=`uniform sampler2D image; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec4 rampColor = texture(image, vec2(materialInput.slope / (czm_pi / 2.0), 0.5)); rampColor = czm_gammaCorrect(rampColor); material.diffuse = rampColor.rgb; material.alpha = rampColor.a; return material; } `;var LUn=x(T(),1),hF=`uniform vec4 evenColor; uniform vec4 oddColor; uniform float offset; uniform float repeat; uniform bool horizontal; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); // Based on the Stripes Fragment Shader in the Orange Book (11.1.2) float coord = mix(materialInput.st.s, materialInput.st.t, float(horizontal)); float value = fract((coord - offset) * (repeat * 0.5)); float dist = min(value, min(abs(value - 0.5), 1.0 - value)); vec4 currentColor = mix(evenColor, oddColor, step(0.5, value)); vec4 color = czm_antialias(evenColor, oddColor, currentColor, dist); color = czm_gammaCorrect(color); material.diffuse = color.rgb; material.alpha = color.a; return material; } `;var vUn=x(T(),1),fF=`uniform vec4 waterColor; uniform vec4 landColor; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec4 outColor = mix(landColor, waterColor, materialInput.waterMask); outColor = czm_gammaCorrect(outColor); material.diffuse = outColor.rgb; material.alpha = outColor.a; return material; } `;var IUn=x(T(),1),pF=`// Thanks for the contribution Jonas // http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog uniform sampler2D specularMap; uniform sampler2D normalMap; uniform vec4 baseWaterColor; uniform vec4 blendColor; uniform float frequency; uniform float animationSpeed; uniform float amplitude; uniform float specularIntensity; uniform float fadeFactor; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); float time = czm_frameNumber * animationSpeed; // fade is a function of the distance from the fragment and the frequency of the waves float fade = max(1.0, (length(materialInput.positionToEyeEC) / 10000000000.0) * frequency * fadeFactor); float specularMapValue = texture(specularMap, materialInput.st).r; // note: not using directional motion at this time, just set the angle to 0.0; vec4 noise = czm_getWaterNoise(normalMap, materialInput.st * frequency, time, 0.0); vec3 normalTangentSpace = noise.xyz * vec3(1.0, 1.0, (1.0 / amplitude)); // fade out the normal perturbation as we move further from the water surface normalTangentSpace.xy /= fade; // attempt to fade out the normal perturbation as we approach non water areas (low specular map value) normalTangentSpace = mix(vec3(0.0, 0.0, 50.0), normalTangentSpace, specularMapValue); normalTangentSpace = normalize(normalTangentSpace); // get ratios for alignment of the new normal vector with a vector perpendicular to the tangent plane float tsPerturbationRatio = clamp(dot(normalTangentSpace, vec3(0.0, 0.0, 1.0)), 0.0, 1.0); // fade out water effect as specular map value decreases material.alpha = mix(blendColor.a, baseWaterColor.a, specularMapValue) * specularMapValue; // base color is a blend of the water and non-water color based on the value from the specular map // may need a uniform blend factor to better control this material.diffuse = mix(blendColor.rgb, baseWaterColor.rgb, specularMapValue); // diffuse highlights are based on how perturbed the normal is material.diffuse += (0.1 * tsPerturbationRatio); material.diffuse = material.diffuse; material.normal = normalize(materialInput.tangentToEyeMatrix * normalTangentSpace); material.specular = specularIntensity; material.shininess = 10.0; return material; } `;function nt(e){this.type=void 0,this.shaderSource=void 0,this.materials=void 0,this.uniforms=void 0,this._uniforms=void 0,this.translucent=void 0,this._minificationFilter=e.minificationFilter??zt.LINEAR,this._magnificationFilter=e.magnificationFilter??ni.LINEAR,this._strict=void 0,this._template=void 0,this._count=void 0,this._texturePaths={},this._loadedImages=[],this._loadedCubeMaps=[],this._textures={},this._updateFunctions=[],this._defaultTexture=void 0,this._initializationPromises=[],this._initializationError=void 0,v8e(e,this),Object.defineProperties(this,{type:{value:this.type,writable:!1},minificationFilter:{get:function(){return this._minificationFilter},set:function(t){this._minificationFilter=t}},magnificationFilter:{get:function(){return this._magnificationFilter},set:function(t){this._magnificationFilter=t}}}),l(nt._uniformList[this.type])||(nt._uniformList[this.type]=Object.keys(this._uniforms))}nt._uniformList={};nt.fromType=function(e,t){let n=new nt({fabric:{type:e}});if(l(t))for(let i in t)t.hasOwnProperty(i)&&(n.uniforms[i]=t[i]);return n};nt.fromTypeAsync=async function(e,t){let n=[],i=new nt({fabric:{type:e,uniforms:t}});if(Cbe(i,n),await Promise.all(n),n.length=0,l(i._initializationError))throw i._initializationError;return i};function Cbe(e,t){t.push(...e._initializationPromises);let n=e.materials;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i];Cbe(o,t)}}nt.prototype.isTranslucent=function(){if(l(this.translucent))return typeof this.translucent=="function"?this.translucent():this.translucent;let e=!0,t=this._translucentFunctions,n=t.length;for(let i=0;i-1)return!0;return!1}function Y8e(e){let t=e._template.components,n=e._template.source;if(l(n))e.shaderSource+=`${n} `;else{if(e.shaderSource+=`czm_material czm_getMaterial(czm_materialInput materialInput) { `,e.shaderSource+=`czm_material material = czm_getDefaultMaterial(materialInput); `,l(t)){let i=Object.keys(e._template.materials).length>0;for(let o in t)if(t.hasOwnProperty(o))if(o==="diffuse"||o==="emission"){let s=i&&N8e(t[o],e)?t[o]:`czm_gammaCorrect(${t[o]})`;e.shaderSource+=`material.${o} = ${s}; `}else o==="alpha"?e.shaderSource+=`material.alpha = ${t.alpha}; `:e.shaderSource+=`material.${o} = ${t[o]}; `}e.shaderSource+=`return material; } `}}var Vbe={mat2:ji,mat3:q,mat4:I},w8e=/\.ktx2$/i;function M8e(e){let t;return function(n,i){let o=n.uniforms,r=o[e],s=t!==r,a=!l(r)||r===nt.DefaultImageId;t=r;let c=n._textures[e],d,u;if(r instanceof HTMLVideoElement){if(r.readyState>=2){if(s&&l(c)&&(c!==i.defaultTexture&&c.destroy(),c=void 0),!l(c)||c===i.defaultTexture){let m=new kt({minificationFilter:n._minificationFilter,magnificationFilter:n._magnificationFilter});c=new Ct({context:i,source:r,sampler:m}),n._textures[e]=c;return}c.copyFrom({source:r})}else l(c)||(n._textures[e]=i.defaultTexture);return}if(r instanceof Ct&&r!==c){n._texturePaths[e]=void 0;let m=n._textures[e];l(m)&&m!==n._defaultTexture&&m.destroy(),n._textures[e]=r,d=`${e}Dimensions`,o.hasOwnProperty(d)&&(u=o[d],u.x=r._width,u.y=r._height);return}if(s&&l(c)&&a&&(c!==n._defaultTexture&&c.destroy(),c=void 0,n._texturePaths[e]=void 0),l(c)||(c=n._textures[e]=n._defaultTexture,d=`${e}Dimensions`,o.hasOwnProperty(d)&&(u=o[d],u.x=c._width,u.y=c._height)),!a){if((r instanceof HTMLCanvasElement||r instanceof HTMLImageElement||r instanceof ImageBitmap||r instanceof OffscreenCanvas)&&r!==n._texturePaths[e]){n._loadedImages.push({id:e,image:r}),n._texturePaths[e]=r;return}Rbe(n,e)}}}function Rbe(e,t){let i=e.uniforms[t];if(i===nt.DefaultImageId)return Promise.resolve();let o=ve.createIfNeeded(i);if(!(o instanceof ve))return Promise.resolve();let r=ve.createIfNeeded(e._texturePaths[t]);if(!(!l(r)||r.url!==o.url))return Promise.resolve();let a;return w8e.test(o.url)?a=Td(o.url):a=o.fetchImage(),Promise.resolve(a).then(function(c){e._loadedImages.push({id:t,image:c})}).catch(function(c){e._initializationError=c;let d=e._textures[t];l(d)&&d!==e._defaultTexture&&d.destroy(),e._textures[t]=e._defaultTexture}),e._texturePaths[t]=i,a}function k8e(e){return function(t,n){let i=t.uniforms[e];if(i instanceof Jr){let o=t._textures[e];o!==t._defaultTexture&&o.destroy(),t._texturePaths[e]=void 0,t._textures[e]=i;return}l(t._textures[e])||(t._textures[e]=n.defaultCubeMap),Gbe(t,e)}}function Gbe(e,t){let i=e.uniforms[t];if(i===nt.DefaultCubeMapId)return Promise.resolve();let o=i.positiveX+i.negativeX+i.positiveY+i.negativeY+i.positiveZ+i.negativeZ;if(o===e._texturePaths[t])return Promise.resolve();let r=[ve.createIfNeeded(i.positiveX).fetchImage(),ve.createIfNeeded(i.negativeX).fetchImage(),ve.createIfNeeded(i.positiveY).fetchImage(),ve.createIfNeeded(i.negativeY).fetchImage(),ve.createIfNeeded(i.positiveZ).fetchImage(),ve.createIfNeeded(i.negativeZ).fetchImage()],s=Promise.all(r);return s.then(function(a){e._loadedCubeMaps.push({id:t,images:a})}).catch(function(a){e._initializationError=a}),e._texturePaths[t]=o,s}function U8e(e){let t=e._template.uniforms;for(let n in t)t.hasOwnProperty(n)&&Abe(e,n)}function Abe(e,t){let n=e._strict,i=e._template.uniforms,o=i[t],r=D8e(o),s;if(r==="channels")s=bF(e,t,o,!1);else{if(r==="sampler2D"){let d=`${t}Dimensions`;B8e(e,d)>0&&(i[d]={type:"ivec3",x:1,y:1},Abe(e,d))}if(!new RegExp(`uniform\\s+${r}\\s+${t}\\s*;`).test(e.shaderSource)){let d=`uniform ${r} ${t};`;e.shaderSource=d+e.shaderSource}let c=`${t}_${e._count++}`;if(s=bF(e,t,c),e.uniforms[t]=o,r==="sampler2D")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(M8e(t)),e._initializationPromises.push(Rbe(e,t));else if(r==="samplerCube")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(k8e(t)),e._initializationPromises.push(Gbe(e,t));else if(r.indexOf("mat")!==-1){let d=new Vbe[r];e._uniforms[c]=function(){return Vbe[r].fromColumnMajorArray(e.uniforms[t],d)}}else e._uniforms[c]=function(){return e.uniforms[t]}}}function D8e(e){let t=e.type;if(!l(t)){let n=typeof e;if(n==="number")t="float";else if(n==="boolean")t="bool";else if(n==="string"||e instanceof ve||e instanceof HTMLCanvasElement||e instanceof HTMLImageElement||e instanceof ImageBitmap||e instanceof OffscreenCanvas)/^([rgba]){1,4}$/i.test(e)?t="channels":e===nt.DefaultCubeMapId?t="samplerCube":t="sampler2D";else if(n==="object")if(Array.isArray(e))(e.length===4||e.length===9||e.length===16)&&(t=`mat${Math.sqrt(e.length)}`);else{let i=0;for(let o in e)e.hasOwnProperty(o)&&(i+=1);i>=2&&i<=4?t=`vec${i}`:i===6&&(t="samplerCube")}}return t}function O8e(e){let t=e._strict,n=e._template.materials;for(let i in n)if(n.hasOwnProperty(i)){let o=new nt({strict:t,fabric:n[i],count:e._count});e._count=o._count,e._uniforms=It(e._uniforms,o._uniforms,!0),e.materials[i]=o,e._translucentFunctions=e._translucentFunctions.concat(o._translucentFunctions);let r="czm_getMaterial",s=`${r}_${e._count++}`;bF(o,r,s),e.shaderSource=o.shaderSource+e.shaderSource;let a=`${s}(materialInput)`,c=bF(e,i,a)}}function bF(e,t,n,i){i=i??!0;let o=0,r="([\\w])?",s=`([\\w${i?".":""}])?`,a=new RegExp(s+t+r,"g");return e.shaderSource=e.shaderSource.replace(a,function(c,d,u){return d||u?c:(o+=1,n)}),o}function B8e(e,t,n){return bF(e,t,t,n)}nt._materialCache={_materials:{},addMaterial:function(e,t){this._materials[e]=t},getMaterial:function(e){return this._materials[e]}};nt.DefaultImageId="czm_defaultImage";nt.DefaultCubeMapId="czm_defaultCubeMap";nt.ColorType="Color";nt._materialCache.addMaterial(nt.ColorType,{fabric:{type:nt.ColorType,uniforms:{color:new U(1,0,0,.5)},components:{diffuse:"color.rgb",alpha:"color.a"}},translucent:function(e){return e.uniforms.color.alpha<1}});nt.ImageType="Image";nt._materialCache.addMaterial(nt.ImageType,{fabric:{type:nt.ImageType,uniforms:{image:nt.DefaultImageId,repeat:new M(1,1),color:new U(1,1,1,1)},components:{diffuse:"texture(image, fract(repeat * materialInput.st)).rgb * color.rgb",alpha:"texture(image, fract(repeat * materialInput.st)).a * color.a"}},translucent:function(e){return e.uniforms.color.alpha<1}});nt.DiffuseMapType="DiffuseMap";nt._materialCache.addMaterial(nt.DiffuseMapType,{fabric:{type:nt.DiffuseMapType,uniforms:{image:nt.DefaultImageId,channels:"rgb",repeat:new M(1,1)},components:{diffuse:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});nt.AlphaMapType="AlphaMap";nt._materialCache.addMaterial(nt.AlphaMapType,{fabric:{type:nt.AlphaMapType,uniforms:{image:nt.DefaultImageId,channel:"a",repeat:new M(1,1)},components:{alpha:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!0});nt.SpecularMapType="SpecularMap";nt._materialCache.addMaterial(nt.SpecularMapType,{fabric:{type:nt.SpecularMapType,uniforms:{image:nt.DefaultImageId,channel:"r",repeat:new M(1,1)},components:{specular:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!1});nt.EmissionMapType="EmissionMap";nt._materialCache.addMaterial(nt.EmissionMapType,{fabric:{type:nt.EmissionMapType,uniforms:{image:nt.DefaultImageId,channels:"rgb",repeat:new M(1,1)},components:{emission:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});nt.BumpMapType="BumpMap";nt._materialCache.addMaterial(nt.BumpMapType,{fabric:{type:nt.BumpMapType,uniforms:{image:nt.DefaultImageId,channel:"r",strength:.8,repeat:new M(1,1)},source:q2},translucent:!1});nt.NormalMapType="NormalMap";nt._materialCache.addMaterial(nt.NormalMapType,{fabric:{type:nt.NormalMapType,uniforms:{image:nt.DefaultImageId,channels:"rgb",strength:.8,repeat:new M(1,1)},source:sF},translucent:!1});nt.GridType="Grid";nt._materialCache.addMaterial(nt.GridType,{fabric:{type:nt.GridType,uniforms:{color:new U(0,1,0,1),cellAlpha:.1,lineCount:new M(8,8),lineThickness:new M(1,1),lineOffset:new M(0,0)},source:rF},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.cellAlpha<1}});nt.StripeType="Stripe";nt._materialCache.addMaterial(nt.StripeType,{fabric:{type:nt.StripeType,uniforms:{horizontal:!0,evenColor:new U(1,1,1,.5),oddColor:new U(0,0,1,.5),offset:0,repeat:5},source:hF},translucent:function(e){let t=e.uniforms;return t.evenColor.alpha<1||t.oddColor.alpha<1}});nt.CheckerboardType="Checkerboard";nt._materialCache.addMaterial(nt.CheckerboardType,{fabric:{type:nt.CheckerboardType,uniforms:{lightColor:new U(1,1,1,.5),darkColor:new U(0,0,0,.5),repeat:new M(5,5)},source:$2},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});nt.DotType="Dot";nt._materialCache.addMaterial(nt.DotType,{fabric:{type:nt.DotType,uniforms:{lightColor:new U(1,1,0,.75),darkColor:new U(0,1,1,.75),repeat:new M(5,5)},source:eF},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});nt.WaterType="Water";nt._materialCache.addMaterial(nt.WaterType,{fabric:{type:nt.WaterType,uniforms:{baseWaterColor:new U(.2,.3,.6,1),blendColor:new U(0,1,.699,1),specularMap:nt.DefaultImageId,normalMap:nt.DefaultImageId,frequency:10,animationSpeed:.01,amplitude:1,specularIntensity:.5,fadeFactor:1},source:pF},translucent:function(e){let t=e.uniforms;return t.baseWaterColor.alpha<1||t.blendColor.alpha<1}});nt.RimLightingType="RimLighting";nt._materialCache.addMaterial(nt.RimLightingType,{fabric:{type:nt.RimLightingType,uniforms:{color:new U(1,0,0,.7),rimColor:new U(1,1,1,.4),width:.3},source:uF},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.rimColor.alpha<1}});nt.FadeType="Fade";nt._materialCache.addMaterial(nt.FadeType,{fabric:{type:nt.FadeType,uniforms:{fadeInColor:new U(1,0,0,1),fadeOutColor:new U(0,0,0,0),maximumDistance:.5,repeat:!0,fadeDirection:{x:!0,y:!0},time:new M(.5,.5)},source:oF},translucent:function(e){let t=e.uniforms;return t.fadeInColor.alpha<1||t.fadeOutColor.alpha<1}});nt.PolylineArrowType="PolylineArrow";nt._materialCache.addMaterial(nt.PolylineArrowType,{fabric:{type:nt.PolylineArrowType,uniforms:{color:new U(1,1,1,1)},source:aF},translucent:!0});nt.PolylineDashType="PolylineDash";nt._materialCache.addMaterial(nt.PolylineDashType,{fabric:{type:nt.PolylineDashType,uniforms:{color:new U(1,0,1,1),gapColor:new U(0,0,0,0),dashLength:16,dashPattern:255},source:cF},translucent:!0});nt.PolylineGlowType="PolylineGlow";nt._materialCache.addMaterial(nt.PolylineGlowType,{fabric:{type:nt.PolylineGlowType,uniforms:{color:new U(0,.5,1,1),glowPower:.25,taperPower:1},source:lF},translucent:!0});nt.PolylineOutlineType="PolylineOutline";nt._materialCache.addMaterial(nt.PolylineOutlineType,{fabric:{type:nt.PolylineOutlineType,uniforms:{color:new U(1,1,1,1),outlineColor:new U(1,0,0,1),outlineWidth:1},source:dF},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.outlineColor.alpha<1}});nt.ElevationContourType="ElevationContour";nt._materialCache.addMaterial(nt.ElevationContourType,{fabric:{type:nt.ElevationContourType,uniforms:{spacing:100,color:new U(1,0,0,1),width:1},source:nF},translucent:!1});nt.ElevationRampType="ElevationRamp";nt._materialCache.addMaterial(nt.ElevationRampType,{fabric:{type:nt.ElevationRampType,uniforms:{image:nt.DefaultImageId,minimumHeight:0,maximumHeight:1e4},source:iF},translucent:!1});nt.SlopeRampMaterialType="SlopeRamp";nt._materialCache.addMaterial(nt.SlopeRampMaterialType,{fabric:{type:nt.SlopeRampMaterialType,uniforms:{image:nt.DefaultImageId},source:mF},translucent:!1});nt.AspectRampMaterialType="AspectRamp";nt._materialCache.addMaterial(nt.AspectRampMaterialType,{fabric:{type:nt.AspectRampMaterialType,uniforms:{image:nt.DefaultImageId},source:Q2},translucent:!1});nt.ElevationBandType="ElevationBand";nt._materialCache.addMaterial(nt.ElevationBandType,{fabric:{type:nt.ElevationBandType,uniforms:{heights:nt.DefaultImageId,colors:nt.DefaultImageId},source:tF},translucent:!0});nt.WaterMaskType="WaterMask";nt._materialCache.addMaterial(nt.WaterMaskType,{fabric:{type:nt.WaterMaskType,source:fF,uniforms:{waterColor:new U(1,1,1,1),landColor:new U(0,0,0,0)}},translucent:!1});var no=nt;var z8e=`#define CLIP_POLYLINE ${Nl} ${j2}`,H8e=X_;function N_(e){e=e??B.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=N_.VERTEX_FORMAT;this.material=l(e.material)?e.material:no.fromType(no.ColorType),this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??z8e,this._fragmentShaderSource=e.fragmentShaderSource??H8e,this._renderState=Co.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(N_.prototype,{vertexShaderSource:{get:function(){let e=this._vertexShaderSource;return this.material.shaderSource.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&(e=`#define POLYLINE_DASH ${e}`),e}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}}});N_.VERTEX_FORMAT=we.POSITION_AND_ST;N_.prototype.getFragmentShaderSource=Co.prototype.getFragmentShaderSource;N_.prototype.isTranslucent=Co.prototype.isTranslucent;N_.prototype.getRenderState=Co.prototype.getRenderState;var sc=N_;var qDn=x(T(),1);var D5n=x(T(),1);function _b(e,t,n){if(this._attributes=t,this._numberOfInstances=n,t.length===0)return;let i=K8e(t),o=e.floatingPointTexture,r=i===Me.FLOAT&&!o,s=J8e(t,r),a=j8e(s,t,r),c=Math.floor(Xt.maximumTextureSize/a),d=Math.min(n,c),u=a*d,m=Math.ceil(n/d),p=1/u,b=p*.5,f=1/m,y=f*.5;this._textureDimensions=new M(u,m),this._textureStep=new ce(p,b,f,y),this._pixelDatatype=r?Me.UNSIGNED_BYTE:i,this._packFloats=r,this._offsets=s,this._stride=a,this._texture=void 0;let _=4*u*m;this._batchValues=i===Me.FLOAT&&!r?new Float32Array(_):new Uint8Array(_),this._batchValuesDirty=!1}Object.defineProperties(_b.prototype,{attributes:{get:function(){return this._attributes}},numberOfInstances:{get:function(){return this._numberOfInstances}}});function K8e(e){let t=!1,n=e.length;for(let i=0;i1){let s=e[0].modelMatrix;for(r=1;r=0){let d=i[a];o=d.offset+d.count,s=d.index,r=n[s].indices.length}else o=0,s=0,r=n[s].indices.length;let c=e.length;for(let d=0;dr&&(o=0,r=n[++s].indices.length),i.push({index:s,offset:o,count:p}),o+=p}}function d7e(e,t){let n=[];return q7(e,"geometry",t,n),q7(e,"westHemisphereGeometry",t,n),q7(e,"eastHemisphereGeometry",t,n),n}var Sb={};Sb.combineGeometry=function(e){let t,n,i=e.instances,o=i.length,r,s,a=!1;o>0&&(t=l7e(e),t.length>0&&(n=Bn.createAttributeLocations(t[0]),e.createPickOffsets&&(r=d7e(i,t))),l(i[0].attributes)&&l(i[0].attributes.offset)&&(s=new Array(o),a=!0));let c=new Array(o),d=new Array(o);for(let u=0;u0&&(n.set(c.indices,s),s+=f)}return t.push(n.buffer),{stringTable:i,packedData:n}};Sb.unpackCreateGeometryResults=function(e){let t=e.stringTable,n=e.packedData,i,o=new Array(n[0]),r=0,s=1;for(;s0){let G=_.length/S;for(C=De.createTypedArray(G,y),i=0;i= nearSq && distanceSq <= farSq) ? 1.0 : 0.0; gl_Position *= show; }`,`${i} ${o}`};function Nbe(e,t){if(!e.compressVertices)return t;let n=t.search(/in\s+vec3\s+normal;/g)!==-1,i=t.search(/in\s+vec2\s+st;/g)!==-1;if(!n&&!i)return t;let o=t.search(/in\s+vec3\s+tangent;/g)!==-1,r=t.search(/in\s+vec3\s+bitangent;/g)!==-1,s=i&&n?2:1;s+=o||r?1:0;let a=s>1?`vec${s}`:"float",c="compressedAttributes",d=`in ${a} ${c};`,u="",m="";if(i){u+=`vec2 st; `;let f=s>1?`${c}.x`:c;m+=` st = czm_decompressTextureCoordinates(${f}); `}n&&o&&r?(u+=`vec3 normal; vec3 tangent; vec3 bitangent; `,m+=` czm_octDecode(${c}.${i?"yz":"xy"}, normal, tangent, bitangent); `):(n&&(u+=`vec3 normal; `,m+=` normal = czm_octDecode(${c}${s>1?`.${i?"y":"x"}`:""}); `),o&&(u+=`vec3 tangent; `,m+=` tangent = czm_octDecode(${c}.${i&&n?"z":"y"}); `),r&&(u+=`vec3 bitangent; `,m+=` bitangent = czm_octDecode(${c}.${i&&n?"z":"y"}); `));let p=t;p=p.replace(/in\s+vec3\s+normal;/g,""),p=p.replace(/in\s+vec2\s+st;/g,""),p=p.replace(/in\s+vec3\s+tangent;/g,""),p=p.replace(/in\s+vec3\s+bitangent;/g,""),p=ze.replaceMain(p,"czm_non_compressed_main");let b=`void main() { ${m} czm_non_compressed_main(); }`;return[d,u,p,b].join(` `)}function V7e(e){let t=ze.replaceMain(e,"czm_non_depth_clamp_main");return t+=`void main() { czm_non_depth_clamp_main(); gl_Position = czm_depthClamp(gl_Position);} `,t}function C7e(e){let t=ze.replaceMain(e,"czm_non_depth_clamp_main");return t+=`void main() { czm_non_depth_clamp_main(); #if defined(LOG_DEPTH) czm_writeLogDepth(); #else czm_writeDepthClamp(); #endif } `,t}function Ybe(e,t){let n=e.vertexAttributes}function R7e(e,t){return function(){return e[t]}}var $7=Math.max(hn.hardwareConcurrency-1,1),FO,G7e=new Jn("combineGeometry");function A7e(e,t){let n,i,o,r,s=e._instanceIds;if(e._state===Qr.READY){n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];let a=e._numberOfInstances=n.length,c=[],d=[];for(o=0;o0){let y=new Float64Array(m);for(f=[y.buffer],r=0;r0?(e._recomputeBoundingSpheres=!0,e._state=Qr.COMBINED):xF(e,t,Qr.FAILED,void 0)}).catch(function(m){xF(e,t,Qr.FAILED,m)})}}function E7e(e,t){let n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances],i=e._numberOfInstances=n.length,o=new Array(i),r=e._instanceIds,s,a,c=0;for(a=0;a0?(e._recomputeBoundingSpheres=!0,e._state=Qr.COMBINED):xF(e,t,Qr.FAILED,void 0)}function L7e(e,t){let n=e._batchTableAttributeIndices.offset;if(!e._recomputeBoundingSpheres||!l(n)){e._recomputeBoundingSpheres=!1;return}let i,o=e._offsetInstanceExtend,r=e._instanceBoundingSpheres,s=r.length,a=e._tempBoundingSpheres;if(!l(a)){for(a=new Array(s),i=0;i0||le.intersectPlane(y,nn.ORIGIN_ZX_PLANE)!==jt.INTERSECTING?c.push(y):(d.push(y),u.push(y))}let m=c[0],p=u[0],b=d[0];for(i=1;i0){if(Xt.maximumVertexTextureImageUnits===0)throw new ae("Vertex texture fetch support is required to render primitives with per-instance attributes. The maximum number of vertex texture image units must be greater than zero.");this._batchTable.update(e)}if(this._state!==Qr.COMPLETE&&this._state!==Qr.COMBINED&&(this.asynchronous?A7e(this,e):E7e(this,e)),this._state===Qr.COMBINED&&(W7e(this,e),Mbe(this,e),F7e(this,e)),!this.show||this._state!==Qr.COMPLETE)return;this._batchTableOffsetsUpdated||Mbe(this,e),this._recomputeBoundingSpheres&&L7e(this,e);let n=this.appearance,i=n.material,o=!1,r=!1;this._appearance!==n?(this._appearance=n,this._material=i,o=!0,r=!0):this._material!==i&&(this._material=i,r=!0);let s=this.depthFailAppearance,a=l(s)?s.material:void 0;this._depthFailAppearance!==s?(this._depthFailAppearance=s,this._depthFailMaterial=a,o=!0,r=!0):this._depthFailMaterial!==a&&(this._depthFailMaterial=a,r=!0);let c=this._appearance.isTranslucent();this._translucent!==c&&(this._translucent=c,o=!0),l(this._material)&&this._material.update(t);let d=n.closed&&c;o&&(this._createRenderStatesFunction??I7e)(this,t,n,d),r&&(this._createShaderProgramFunction??P7e)(this,e,n),(o||r)&&(this._createCommandsFunction??X7e)(this,n,i,c,d,this._colorCommands,this._pickCommands,e),(this._updateAndQueueCommandsFunction??N7e)(this,e,this._colorCommands,this._pickCommands,this.modelMatrix,this.cull,this.debugShowBoundingVolume,d)};var Y7e=new le,w7e=new le;function Kbe(e,t,n){if(n===pn.TOP){let i=le.clone(e,Y7e),o=le.clone(e,w7e);o.center=h.add(o.center,t,o.center),e=le.union(i,o,e)}else n===pn.ALL&&(e.center=h.add(e.center,t,e.center));return e}function M7e(e,t,n){return function(){let i=e.getBatchedAttribute(t,n),o=e.attributes[n],r=o.componentsPerAttribute,s=J.createTypedArray(o.componentDatatype,r);return l(i.constructor.pack)?i.constructor.pack(i,s,0):s[0]=i,s}}function k7e(e,t,n,i,o){return function(r){let s=Obe(r);e.setBatchedAttribute(t,n,s),o==="offset"&&(i._recomputeBoundingSpheres=!0,i._batchTableOffsetsUpdated=!1)}}var U7e=new h;function D7e(e,t,n){t.boundingSphere={get:function(){let i=e._instanceBoundingSpheres[n];if(l(i)){i=i.clone();let o=e.modelMatrix,r=t.offset;l(r)&&Kbe(i,h.fromArray(r.get(),0,U7e),e._offsetInstanceExtend[n]),l(o)&&(i=le.transform(i,o))}return i}},t.boundingSphereCV={get:function(){return e._instanceBoundingSpheresCV[n]}}}function O7e(e,t,n){t.pickId={get:function(){return e._pickIds[n]}}}qr.prototype.getGeometryInstanceAttributes=function(e){let t=this._perInstanceAttributeCache.get(e);if(l(t))return t;let n=-1,i=this._lastPerInstanceAttributeIndex,o=this._instanceIds,r=o.length;for(let d=0;d{!this._ready&&l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};Zb.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};Zb.isSupported=function(e){return e.frameState.context.depthTexture};Zb.prototype.isDestroyed=function(){return!1};Zb.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),this._sp=this._sp&&this._sp.destroy(),this._sp2D=void 0,this._spMorph=void 0,me(this)};var zh=Zb;var u3n=x(T(),1);var HBn=x(T(),1);var MOn=x(T(),1),TF=`in vec3 position3DHigh; in vec3 position3DLow; in float batchId; #ifdef EXTRUDED_GEOMETRY in vec3 extrudeDirection; uniform float u_globeMinimumAltitude; #endif // EXTRUDED_GEOMETRY #ifdef PER_INSTANCE_COLOR out vec4 v_color; #endif // PER_INSTANCE_COLOR #ifdef TEXTURE_COORDINATES #ifdef SPHERICAL out vec4 v_sphericalExtents; #else // SPHERICAL out vec2 v_inversePlaneExtents; out vec4 v_westPlane; out vec4 v_southPlane; #endif // SPHERICAL out vec3 v_uvMinAndSphericalLongitudeRotation; out vec3 v_uMaxAndInverseDistance; out vec3 v_vMaxAndInverseDistance; #endif // TEXTURE_COORDINATES void main() { vec4 position = czm_computePosition(); #ifdef EXTRUDED_GEOMETRY float delta = min(u_globeMinimumAltitude, czm_geometricToleranceOverMeter * length(position.xyz)); delta *= czm_sceneMode == czm_sceneMode3D ? 1.0 : 0.0; //extrudeDirection is zero for the top layer position = position + vec4(extrudeDirection * delta, 0.0); #endif #ifdef TEXTURE_COORDINATES #ifdef SPHERICAL v_sphericalExtents = czm_batchTable_sphericalExtents(batchId); v_uvMinAndSphericalLongitudeRotation.z = czm_batchTable_longitudeRotation(batchId); #else // SPHERICAL #ifdef COLUMBUS_VIEW_2D vec4 planes2D_high = czm_batchTable_planes2D_HIGH(batchId); vec4 planes2D_low = czm_batchTable_planes2D_LOW(batchId); // If the primitive is split across the IDL (planes2D_high.x > planes2D_high.w): // - If this vertex is on the east side of the IDL (position3DLow.y > 0.0, comparison with position3DHigh may produce artifacts) // - existing "east" is on the wrong side of the world, far away (planes2D_high/low.w) // - so set "east" as beyond the eastmost extent of the projection (idlSplitNewPlaneHiLow) vec2 idlSplitNewPlaneHiLow = vec2(EAST_MOST_X_HIGH - (WEST_MOST_X_HIGH - planes2D_high.w), EAST_MOST_X_LOW - (WEST_MOST_X_LOW - planes2D_low.w)); bool idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y > 0.0; planes2D_high.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.w); planes2D_low.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.w); // - else, if this vertex is on the west side of the IDL (position3DLow.y < 0.0) // - existing "west" is on the wrong side of the world, far away (planes2D_high/low.x) // - so set "west" as beyond the westmost extent of the projection (idlSplitNewPlaneHiLow) idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y < 0.0; idlSplitNewPlaneHiLow = vec2(WEST_MOST_X_HIGH - (EAST_MOST_X_HIGH - planes2D_high.x), WEST_MOST_X_LOW - (EAST_MOST_X_LOW - planes2D_low.x)); planes2D_high.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.x); planes2D_low.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.x); vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.xy), vec3(0.0, planes2D_low.xy))).xyz; vec3 northWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.x, planes2D_high.z), vec3(0.0, planes2D_low.x, planes2D_low.z))).xyz; vec3 southEastCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.w, planes2D_high.y), vec3(0.0, planes2D_low.w, planes2D_low.y))).xyz; #else // COLUMBUS_VIEW_2D // 3D case has smaller "plane extents," so planes encoded as a 64 bit position and 2 vec3s for distances/direction vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(czm_batchTable_southWest_HIGH(batchId), czm_batchTable_southWest_LOW(batchId))).xyz; vec3 northWestCorner = czm_normal * czm_batchTable_northward(batchId) + southWestCorner; vec3 southEastCorner = czm_normal * czm_batchTable_eastward(batchId) + southWestCorner; #endif // COLUMBUS_VIEW_2D vec3 eastWard = southEastCorner - southWestCorner; float eastExtent = length(eastWard); eastWard /= eastExtent; vec3 northWard = northWestCorner - southWestCorner; float northExtent = length(northWard); northWard /= northExtent; v_westPlane = vec4(eastWard, -dot(eastWard, southWestCorner)); v_southPlane = vec4(northWard, -dot(northWard, southWestCorner)); v_inversePlaneExtents = vec2(1.0 / eastExtent, 1.0 / northExtent); #endif // SPHERICAL vec4 uvMinAndExtents = czm_batchTable_uvMinAndExtents(batchId); vec4 uMaxVmax = czm_batchTable_uMaxVmax(batchId); v_uMaxAndInverseDistance = vec3(uMaxVmax.xy, uvMinAndExtents.z); v_vMaxAndInverseDistance = vec3(uMaxVmax.zw, uvMinAndExtents.w); v_uvMinAndSphericalLongitudeRotation.xy = uvMinAndExtents.xy; #endif // TEXTURE_COORDINATES #ifdef PER_INSTANCE_COLOR v_color = czm_batchTable_color(batchId); #endif gl_Position = czm_depthClamp(czm_modelViewProjectionRelativeToEye * position); } `;var UOn=x(T(),1),Qy=`#ifdef VECTOR_TILE uniform vec4 u_highlightColor; #endif void main(void) { #ifdef VECTOR_TILE out_FragColor = czm_gammaCorrect(u_highlightColor); #else out_FragColor = vec4(1.0); #endif czm_writeDepthClamp(); } `;var iBn=x(T(),1);var OOn=x(T(),1),_F=`in vec3 v_positionEC; in vec3 v_normalEC; in vec4 v_color; void main() { vec3 positionToEyeEC = -v_positionEC; vec3 normalEC = normalize(v_normalEC); #ifdef FACE_FORWARD normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC); #endif vec4 color = czm_gammaCorrect(v_color); czm_materialInput materialInput; materialInput.normalEC = normalEC; materialInput.positionToEyeEC = positionToEyeEC; czm_material material = czm_getDefaultMaterial(materialInput); material.diffuse = color.rgb; material.alpha = color.a; out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC); } `;var zOn=x(T(),1),SF=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 normal; in vec4 color; in float batchId; out vec3 v_positionEC; out vec3 v_normalEC; out vec4 v_color; void main() { vec4 p = czm_computePosition(); v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates v_normalEC = czm_normal * normal; // normal in eye coordinates v_color = color; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;var KOn=x(T(),1),ZF=`in vec3 position3DHigh; in vec3 position3DLow; in vec4 color; in float batchId; out vec4 v_color; void main() { vec4 p = czm_computePosition(); v_color = color; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;function Vb(e){e=e??B.EMPTY_OBJECT;let t=e.translucent??!0,n=e.closed??!1,i=e.flat??!1,o=i?ZF:SF,r=i?I_:_F,s=i?Vb.FLAT_VERTEX_FORMAT:Vb.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??o,this._fragmentShaderSource=e.fragmentShaderSource??r,this._renderState=Co.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=s,this._flat=i,this._faceForward=e.faceForward??!n}Object.defineProperties(Vb.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}}});Vb.VERTEX_FORMAT=we.POSITION_AND_NORMAL;Vb.FLAT_VERTEX_FORMAT=we.POSITION_ONLY;Vb.prototype.getFragmentShaderSource=Co.prototype.getFragmentShaderSource;Vb.prototype.isTranslucent=Co.prototype.isTranslucent;Vb.prototype.getRenderState=Co.prototype.getRenderState;var yn=Vb;var _Bn=x(T(),1);var rBn=x(T(),1),z1=`#ifdef TEXTURE_COORDINATES #ifdef SPHERICAL in vec4 v_sphericalExtents; #else // SPHERICAL in vec2 v_inversePlaneExtents; in vec4 v_westPlane; in vec4 v_southPlane; #endif // SPHERICAL in vec3 v_uvMinAndSphericalLongitudeRotation; in vec3 v_uMaxAndInverseDistance; in vec3 v_vMaxAndInverseDistance; #endif // TEXTURE_COORDINATES #ifdef PER_INSTANCE_COLOR in vec4 v_color; #endif #ifdef NORMAL_EC vec3 getEyeCoordinate3FromWindowCoordinate(vec2 fragCoord, float logDepthOrDepth) { vec4 eyeCoordinate = czm_windowToEyeCoordinates(fragCoord, logDepthOrDepth); return eyeCoordinate.xyz / eyeCoordinate.w; } vec3 vectorFromOffset(vec4 eyeCoordinate, vec2 positiveOffset) { vec2 glFragCoordXY = gl_FragCoord.xy; // Sample depths at both offset and negative offset float upOrRightLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY + positiveOffset) / czm_viewport.zw)); float downOrLeftLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY - positiveOffset) / czm_viewport.zw)); // Explicitly evaluate both paths // Necessary for multifrustum and for edges of the screen bvec2 upOrRightInBounds = lessThan(glFragCoordXY + positiveOffset, czm_viewport.zw); float useUpOrRight = float(upOrRightLogDepth > 0.0 && upOrRightInBounds.x && upOrRightInBounds.y); float useDownOrLeft = float(useUpOrRight == 0.0); vec3 upOrRightEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY + positiveOffset, upOrRightLogDepth); vec3 downOrLeftEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY - positiveOffset, downOrLeftLogDepth); return (upOrRightEC - (eyeCoordinate.xyz / eyeCoordinate.w)) * useUpOrRight + ((eyeCoordinate.xyz / eyeCoordinate.w) - downOrLeftEC) * useDownOrLeft; } #endif // NORMAL_EC void main(void) { #ifdef REQUIRES_EC float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw)); vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); #endif #ifdef REQUIRES_WC vec4 worldCoordinate4 = czm_inverseView * eyeCoordinate; vec3 worldCoordinate = worldCoordinate4.xyz / worldCoordinate4.w; #endif #ifdef TEXTURE_COORDINATES vec2 uv; #ifdef SPHERICAL // Treat world coords as a sphere normal for spherical coordinates vec2 sphericalLatLong = czm_approximateSphericalCoordinates(worldCoordinate); sphericalLatLong.y += v_uvMinAndSphericalLongitudeRotation.z; sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi); uv.x = (sphericalLatLong.y - v_sphericalExtents.y) * v_sphericalExtents.w; uv.y = (sphericalLatLong.x - v_sphericalExtents.x) * v_sphericalExtents.z; #else // SPHERICAL // Unpack planes and transform to eye space uv.x = czm_planeDistance(v_westPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.x; uv.y = czm_planeDistance(v_southPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.y; #endif // SPHERICAL #endif // TEXTURE_COORDINATES #ifdef CULL_FRAGMENTS // When classifying translucent geometry, logDepthOrDepth == 0.0 // indicates a region that should not be classified, possibly due to there // being opaque pixels there in another buffer. if (uv.x <= 0.0 || 1.0 <= uv.x || uv.y <= 0.0 || 1.0 <= uv.y || logDepthOrDepth == 0.0) { discard; } #endif #ifdef PICK out_FragColor.a = 1.0; // Explicitly set the alpha, otherwise this may be discarded by ShaderSource.createPickFragmentShaderSource #ifdef CULL_FRAGMENTS czm_writeDepthClamp(); #endif // CULL_FRAGMENTS #else // PICK #ifdef NORMAL_EC // Compute normal by sampling adjacent pixels in 2x2 block in screen space vec3 downUp = vectorFromOffset(eyeCoordinate, vec2(0.0, 1.0)); vec3 leftRight = vectorFromOffset(eyeCoordinate, vec2(1.0, 0.0)); vec3 normalEC = normalize(cross(leftRight, downUp)); #endif #ifdef PER_INSTANCE_COLOR vec4 color = czm_gammaCorrect(v_color); #ifdef FLAT out_FragColor = color; #else // FLAT czm_materialInput materialInput; materialInput.normalEC = normalEC; materialInput.positionToEyeEC = -eyeCoordinate.xyz; czm_material material = czm_getDefaultMaterial(materialInput); material.diffuse = color.rgb; material.alpha = color.a; out_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC); #endif // FLAT // Premultiply alpha. Required for classification primitives on translucent globe. out_FragColor.rgb *= out_FragColor.a; #else // PER_INSTANCE_COLOR // Material support. // USES_ is distinct from REQUIRES_, because some things are dependencies of each other or // dependencies for culling but might not actually be used by the material. czm_materialInput materialInput; #ifdef USES_NORMAL_EC materialInput.normalEC = normalEC; #endif #ifdef USES_POSITION_TO_EYE_EC materialInput.positionToEyeEC = -eyeCoordinate.xyz; #endif #ifdef USES_TANGENT_TO_EYE materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(worldCoordinate, normalEC); #endif #ifdef USES_ST // Remap texture coordinates from computed (approximately aligned with cartographic space) to the desired // texture coordinate system, which typically forms a tight oriented bounding box around the geometry. // Shader is provided a set of reference points for remapping. materialInput.st.x = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_uMaxAndInverseDistance.xy, uv) * v_uMaxAndInverseDistance.z; materialInput.st.y = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_vMaxAndInverseDistance.xy, uv) * v_vMaxAndInverseDistance.z; #endif czm_material material = czm_getMaterial(materialInput); #ifdef FLAT out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #else // FLAT out_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC); #endif // FLAT // Premultiply alpha. Required for classification primitives on translucent globe. out_FragColor.rgb *= out_FragColor.a; #endif // PER_INSTANCE_COLOR czm_writeDepthClamp(); #endif // PICK } `;function Im(e,t,n){this._projectionExtentDefines={eastMostYhighDefine:"",eastMostYlowDefine:"",westMostYhighDefine:"",westMostYlowDefine:""};let i=new t6;i.requiresTextureCoordinates=e,i.requiresEC=!n.flat;let o=new t6;if(o.requiresTextureCoordinates=e,n instanceof yn)i.requiresNormalEC=!n.flat;else{let r=`${n.material.shaderSource} ${n.fragmentShaderSource}`;i.normalEC=r.indexOf("materialInput.normalEC")!==-1||r.indexOf("czm_getDefaultMaterial")!==-1,i.positionToEyeEC=r.indexOf("materialInput.positionToEyeEC")!==-1,i.tangentToEyeMatrix=r.indexOf("materialInput.tangentToEyeMatrix")!==-1,i.st=r.indexOf("materialInput.st")!==-1}this._colorShaderDependencies=i,this._pickShaderDependencies=o,this._appearance=n,this._extentsCulling=e,this._planarExtents=t}Im.prototype.createFragmentShader=function(e){let t=this._appearance,n=this._colorShaderDependencies,i=[];!e&&!this._planarExtents&&i.push("SPHERICAL"),n.requiresEC&&i.push("REQUIRES_EC"),n.requiresWC&&i.push("REQUIRES_WC"),n.requiresTextureCoordinates&&i.push("TEXTURE_COORDINATES"),this._extentsCulling&&i.push("CULL_FRAGMENTS"),n.requiresNormalEC&&i.push("NORMAL_EC"),t instanceof yn&&i.push("PER_INSTANCE_COLOR"),n.normalEC&&i.push("USES_NORMAL_EC"),n.positionToEyeEC&&i.push("USES_POSITION_TO_EYE_EC"),n.tangentToEyeMatrix&&i.push("USES_TANGENT_TO_EYE"),n.st&&i.push("USES_ST"),t.flat&&i.push("FLAT");let o="";return t instanceof yn||(o=t.material.shaderSource),new ze({defines:i,sources:[o,z1]})};Im.prototype.createPickFragmentShader=function(e){let t=this._pickShaderDependencies,n=["PICK"];return!e&&!this._planarExtents&&n.push("SPHERICAL"),t.requiresEC&&n.push("REQUIRES_EC"),t.requiresWC&&n.push("REQUIRES_WC"),t.requiresTextureCoordinates&&n.push("TEXTURE_COORDINATES"),this._extentsCulling&&n.push("CULL_FRAGMENTS"),new ze({defines:n,sources:[z1],pickColorQualifier:"in"})};Im.prototype.createVertexShader=function(e,t,n,i){return sge(this._colorShaderDependencies,this._planarExtents,n,e,t,this._appearance,i,this._projectionExtentDefines)};Im.prototype.createPickVertexShader=function(e,t,n,i){return sge(this._pickShaderDependencies,this._planarExtents,n,e,t,void 0,i,this._projectionExtentDefines)};var $be=new h,ege=new fe,tge={high:0,low:0};function sge(e,t,n,i,o,r,s,a){let c=i.slice();if(a.eastMostYhighDefine===""){let d=ege;d.longitude=L.PI,d.latitude=0,d.height=0;let u=s.project(d,$be),m=Rn.encode(u.x,tge);a.eastMostYhighDefine=`EAST_MOST_X_HIGH ${m.high.toFixed(`${m.high}`.length+1)}`,a.eastMostYlowDefine=`EAST_MOST_X_LOW ${m.low.toFixed(`${m.low}`.length+1)}`;let p=ege;p.longitude=-L.PI,p.latitude=0,p.height=0;let b=s.project(p,$be);m=Rn.encode(b.x,tge),a.westMostYhighDefine=`WEST_MOST_X_HIGH ${m.high.toFixed(`${m.high}`.length+1)}`,a.westMostYlowDefine=`WEST_MOST_X_LOW ${m.low.toFixed(`${m.low}`.length+1)}`}return n&&(c.push(a.eastMostYhighDefine),c.push(a.eastMostYlowDefine),c.push(a.westMostYhighDefine),c.push(a.westMostYlowDefine)),l(r)&&r instanceof yn&&c.push("PER_INSTANCE_COLOR"),e.requiresTextureCoordinates&&(c.push("TEXTURE_COORDINATES"),t||n||c.push("SPHERICAL"),n&&c.push("COLUMBUS_VIEW_2D")),new ze({defines:c,sources:[o]})}function t6(){this._requiresEC=!1,this._requiresWC=!1,this._requiresNormalEC=!1,this._requiresTextureCoordinates=!1,this._usesNormalEC=!1,this._usesPositionToEyeEC=!1,this._usesTangentToEyeMat=!1,this._usesSt=!1}Object.defineProperties(t6.prototype,{requiresEC:{get:function(){return this._requiresEC},set:function(e){this._requiresEC=e||this._requiresEC}},requiresWC:{get:function(){return this._requiresWC},set:function(e){this._requiresWC=e||this._requiresWC,this.requiresEC=this._requiresWC}},requiresNormalEC:{get:function(){return this._requiresNormalEC},set:function(e){this._requiresNormalEC=e||this._requiresNormalEC,this.requiresEC=this._requiresNormalEC}},requiresTextureCoordinates:{get:function(){return this._requiresTextureCoordinates},set:function(e){this._requiresTextureCoordinates=e||this._requiresTextureCoordinates,this.requiresWC=this._requiresTextureCoordinates}},normalEC:{set:function(e){this.requiresNormalEC=e,this._usesNormalEC=e},get:function(){return this._usesNormalEC}},tangentToEyeMatrix:{set:function(e){this.requiresWC=e,this.requiresNormalEC=e,this._usesTangentToEyeMat=e},get:function(){return this._usesTangentToEyeMat}},positionToEyeEC:{set:function(e){this.requiresEC=e,this._usesPositionToEyeEC=e},get:function(){return this._usesPositionToEyeEC}},st:{set:function(e){this.requiresTextureCoordinates=e,this._usesSt=e},get:function(){return this._usesSt}}});function nge(e,t,n){return Math.abs((t.y-e.y)*n.x-(t.x-e.x)*n.y+t.x*e.y-t.y*e.x)/M.distance(t,e)}var K7e=[new M,new M,new M,new M];function age(e,t){let n=K7e,i=M.unpack(t,0,n[0]),o=M.unpack(t,2,n[1]),r=M.unpack(t,4,n[2]);e.uMaxVmax=new Hc({componentDatatype:J.FLOAT,componentsPerAttribute:4,normalize:!1,value:[o.x,o.y,r.x,r.y]});let s=1/nge(i,o,r),a=1/nge(i,r,o);e.uvMinAndExtents=new Hc({componentDatatype:J.FLOAT,componentsPerAttribute:4,normalize:!1,value:[i.x,i.y,s,a]})}var cge=new fe,lge=new h,J7e=new h,j7e=new h,PO={high:0,low:0};function dge(e,t,n){let i=cge;i.height=0,i.longitude=e.west,i.latitude=e.south;let o=t.project(i,lge);i.latitude=e.north;let r=t.project(i,J7e);i.longitude=e.east,i.latitude=e.south;let s=t.project(i,j7e),a=[0,0,0,0],c=[0,0,0,0],d=Rn.encode(o.x,PO);a[0]=d.high,c[0]=d.low,d=Rn.encode(o.y,PO),a[1]=d.high,c[1]=d.low,d=Rn.encode(r.y,PO),a[2]=d.high,c[2]=d.low,d=Rn.encode(s.x,PO),a[3]=d.high,c[3]=d.low,n.planes2D_HIGH=new Hc({componentDatatype:J.FLOAT,componentsPerAttribute:4,normalize:!1,value:a}),n.planes2D_LOW=new Hc({componentDatatype:J.FLOAT,componentsPerAttribute:4,normalize:!1,value:c})}var Q7e=new I,q7e=new I,ige=new h,$7e=new fe,e6e=[new fe,new fe,new fe,new fe,new fe,new fe,new fe,new fe];function t6e(e,t,n,i,o,r){let s=re.center(e,$7e);s.height=n;let a=fe.toCartesian(s,t,ige),c=bt.eastNorthUpToFixedFrame(a,t,Q7e),d=I.inverse(c,q7e),u=e.west,m=e.east,p=e.north,b=e.south,f=e6e;f[0].latitude=b,f[0].longitude=u,f[1].latitude=p,f[1].longitude=u,f[2].latitude=p,f[2].longitude=m,f[3].latitude=b,f[3].longitude=m;let y=(u+m)*.5,_=(p+b)*.5;f[4].latitude=b,f[4].longitude=y,f[5].latitude=p,f[5].longitude=y,f[6].latitude=_,f[6].longitude=u,f[7].latitude=_,f[7].longitude=m;let S=Number.POSITIVE_INFINITY,Z=Number.NEGATIVE_INFINITY,V=Number.POSITIVE_INFINITY,C=Number.NEGATIVE_INFINITY;for(let F=0;F<8;F++){f[F].height=n;let P=fe.toCartesian(f[F],t,ige);I.multiplyByPoint(d,P,P),P.z=0,S=Math.min(S,P.x),Z=Math.max(Z,P.x),V=Math.min(V,P.y),C=Math.max(C,P.y)}let G=i;G.x=S,G.y=V,G.z=0,I.multiplyByPoint(c,G,G);let E=o;E.x=Z,E.y=V,E.z=0,I.multiplyByPoint(c,E,E),h.subtract(E,G,o);let v=r;v.x=S,v.y=C,v.z=0,I.multiplyByPoint(c,v,v),h.subtract(v,G,r)}var n6e=new h,i6e=new h,o6e=new Rn;Im.getPlanarTextureCoordinateAttributes=function(e,t,n,i,o){let r=lge,s=n6e,a=i6e;t6e(e,n,o??0,r,s,a);let c={};age(c,t);let d=Rn.fromCartesian(r,o6e);return c.southWest_HIGH=new Hc({componentDatatype:J.FLOAT,componentsPerAttribute:3,normalize:!1,value:h.pack(d.high,[0,0,0])}),c.southWest_LOW=new Hc({componentDatatype:J.FLOAT,componentsPerAttribute:3,normalize:!1,value:h.pack(d.low,[0,0,0])}),c.eastward=new Hc({componentDatatype:J.FLOAT,componentsPerAttribute:3,normalize:!1,value:h.pack(s,[0,0,0])}),c.northward=new Hc({componentDatatype:J.FLOAT,componentsPerAttribute:3,normalize:!1,value:h.pack(a,[0,0,0])}),dge(e,i,c),c};var r6e=new h;function oge(e,t,n,i){let o=cge;o.latitude=e,o.longitude=t,o.height=0;let r=fe.toCartesian(o,n,r6e),s=Math.sqrt(r.x*r.x+r.y*r.y),a=L.fastApproximateAtan2(s,r.z),c=L.fastApproximateAtan2(r.x,r.y);return i.x=a,i.y=c,i}var rge=new M;Im.getSphericalExtentGeometryInstanceAttributes=function(e,t,n,i){let o=oge(e.south,e.west,n,rge),r=o.x,s=o.y,a=oge(e.north,e.east,n,rge),c=a.x,d=a.y,u=0;s>d&&(u=L.PI-s,s=-L.PI,d+=u),r-=L.EPSILON5,s-=L.EPSILON5,c+=L.EPSILON5,d+=L.EPSILON5;let m=1/(d-s),p=1/(c-r),b={sphericalExtents:new Hc({componentDatatype:J.FLOAT,componentsPerAttribute:4,normalize:!1,value:[r,s,p,m]}),longitudeRotation:new Hc({componentDatatype:J.FLOAT,componentsPerAttribute:1,normalize:!1,value:[u]})};return age(b,t),dge(e,i,b),b};Im.hasAttributesForTextureCoordinatePlanes=function(e){return l(e.southWest_HIGH)&&l(e.southWest_LOW)&&l(e.northward)&&l(e.eastward)&&l(e.planes2D_HIGH)&&l(e.planes2D_LOW)&&l(e.uMaxVmax)&&l(e.uvMinAndExtents)};Im.hasAttributesForSphericalExtents=function(e){return l(e.sphericalExtents)&&l(e.longitudeRotation)&&l(e.planes2D_HIGH)&&l(e.planes2D_LOW)&&l(e.uMaxVmax)&&l(e.uvMinAndExtents)};function s6e(e){return Math.max(e.width,e.height)>Im.MAX_WIDTH_FOR_PLANAR_EXTENTS}Im.shouldUseSphericalCoordinates=function(e){return s6e(e)};Im.MAX_WIDTH_FOR_PLANAR_EXTENTS=L.toRadians(1);var yu=Im;function M_(e){e=e??B.EMPTY_OBJECT;let t=e.geometryInstances;this.geometryInstances=t,this.show=e.show??!0,this.classificationType=e.classificationType??ei.BOTH,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowShadowVolume=e.debugShowShadowVolume??!1,this._debugShowShadowVolume=!1,this._extruded=e._extruded??!1,this._uniformMap=e._uniformMap,this._sp=void 0,this._spStencil=void 0,this._spPick=void 0,this._spColor=void 0,this._spPick2D=void 0,this._spColor2D=void 0,this._rsStencilDepthPass=void 0,this._rsStencilDepthPass3DTiles=void 0,this._rsColorPass=void 0,this._rsPickPass=void 0,this._commandsIgnoreShow=[],this._ready=!1,this._primitive=void 0,this._pickPrimitive=e._pickPrimitive,this._hasSphericalExtentsAttribute=!1,this._hasPlanarExtentsAttributes=!1,this._hasPerColorAttribute=!1,this.appearance=e.appearance,this._createBoundingVolumeFunction=e._createBoundingVolumeFunction,this._updateAndQueueCommandsFunction=e._updateAndQueueCommandsFunction,this._usePickOffsets=!1,this._primitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:e.vertexCacheOptimize??!1,interleave:e.interleave??!1,releaseGeometryInstances:e.releaseGeometryInstances??!0,allowPicking:e.allowPicking??!0,asynchronous:e.asynchronous??!0,compressVertices:e.compressVertices??!0,_createBoundingVolumeFunction:void 0,_createRenderStatesFunction:void 0,_createShaderProgramFunction:void 0,_createCommandsFunction:void 0,_updateAndQueueCommandsFunction:void 0,_createPickOffsets:!0}}Object.defineProperties(M_.prototype,{vertexCacheOptimize:{get:function(){return this._primitiveOptions.vertexCacheOptimize}},interleave:{get:function(){return this._primitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._primitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._primitiveOptions.allowPicking}},asynchronous:{get:function(){return this._primitiveOptions.asynchronous}},compressVertices:{get:function(){return this._primitiveOptions.compressVertices}},ready:{get:function(){return this._ready}},_needs2DShader:{get:function(){return this._hasPlanarExtentsAttributes||this._hasSphericalExtentsAttribute}}});M_.isSupported=function(e){return e.context.stencilBuffer};function H1(e,t){let n=t?ti.EQUAL:ti.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:e,frontFunction:n,frontOperation:{fail:Wt.KEEP,zFail:Wt.DECREMENT_WRAP,zPass:Wt.KEEP},backFunction:n,backOperation:{fail:Wt.KEEP,zFail:Wt.INCREMENT_WRAP,zPass:Wt.KEEP},reference:Kt.CESIUM_3D_TILE_MASK,mask:Kt.CESIUM_3D_TILE_MASK},stencilMask:Kt.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:ac.LESS_OR_EQUAL},depthMask:!1}}function i6(e){return{stencilTest:{enabled:e,frontFunction:ti.NOT_EQUAL,frontOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},backFunction:ti.NOT_EQUAL,backOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},reference:0,mask:Kt.CLASSIFICATION_MASK},stencilMask:Kt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:tn.PRE_MULTIPLIED_ALPHA_BLEND}}var a6e={stencilTest:{enabled:!0,frontFunction:ti.NOT_EQUAL,frontOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},backFunction:ti.NOT_EQUAL,backOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},reference:0,mask:Kt.CLASSIFICATION_MASK},stencilMask:Kt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function c6e(e,t,n,i){if(l(e._rsStencilDepthPass))return;let o=!e.debugShowShadowVolume;e._rsStencilDepthPass=Oe.fromCache(H1(o,!1)),e._rsStencilDepthPass3DTiles=Oe.fromCache(H1(o,!0)),e._rsColorPass=Oe.fromCache(i6(o,!1)),e._rsPickPass=Oe.fromCache(a6e)}function l6e(e,t){if(!e.compressVertices)return t;if(t.search(/in\s+vec3\s+extrudeDirection;/g)!==-1){let n="compressedAttributes",i=`in vec2 ${n};`,o=`vec3 extrudeDirection; `,r=` extrudeDirection = czm_octDecode(${n}, 65535.0); `,s=t;s=s.replace(/in\s+vec3\s+extrudeDirection;/g,""),s=ze.replaceMain(s,"czm_non_compressed_main");let a=`void main() { ${r} czm_non_compressed_main(); }`;return[i,o,s,a].join(` `)}}function d6e(e,t){let n=t.context,i=e._primitive,o=TF;o=e._primitive._batchTable.getVertexShaderCallback()(o),o=Nn._appendDistanceDisplayConditionToShader(i,o),o=Nn._modifyShaderPosition(e,o,t.scene3DOnly),o=Nn._updateColorAttribute(i,o);let r=e._hasPlanarExtentsAttributes,s=r||e._hasSphericalExtentsAttribute;e._extruded&&(o=l6e(i,o));let a=e._extruded?"EXTRUDED_GEOMETRY":"",c=new ze({defines:[a],sources:[o]}),d=new ze({sources:[Qy]}),u=e._primitive._attributeLocations,m=new yu(s,r,e.appearance);if(e._spStencil=en.replaceCache({context:n,shaderProgram:e._spStencil,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u}),e._primitive.allowPicking){let f=ze.createPickVertexShaderSource(o);f=Nn._appendShowToShader(i,f),f=Nn._updatePickColorAttribute(f);let y=m.createPickFragmentShader(!1),_=m.createPickVertexShader([a],f,!1,t.mapProjection);if(e._spPick=en.replaceCache({context:n,shaderProgram:e._spPick,vertexShaderSource:_,fragmentShaderSource:y,attributeLocations:u}),s){let S=n.shaderCache.getDerivedShaderProgram(e._spPick,"2dPick");if(!l(S)){let Z=m.createPickFragmentShader(!0),V=m.createPickVertexShader([a],f,!0,t.mapProjection);S=n.shaderCache.createDerivedShaderProgram(e._spPick,"2dPick",{vertexShaderSource:V,fragmentShaderSource:Z,attributeLocations:u})}e._spPick2D=S}}else e._spPick=en.fromCache({context:n,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u});o=Nn._appendShowToShader(i,o),c=new ze({defines:[a],sources:[o]}),e._sp=en.replaceCache({context:n,shaderProgram:e._sp,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u});let p=m.createFragmentShader(!1),b=m.createVertexShader([a],o,!1,t.mapProjection);if(e._spColor=en.replaceCache({context:n,shaderProgram:e._spColor,vertexShaderSource:b,fragmentShaderSource:p,attributeLocations:u}),s){let f=n.shaderCache.getDerivedShaderProgram(e._spColor,"2dColor");if(!l(f)){let y=m.createFragmentShader(!0),_=m.createVertexShader([a],o,!0,t.mapProjection);f=n.shaderCache.createDerivedShaderProgram(e._spColor,"2dColor",{vertexShaderSource:_,fragmentShaderSource:y,attributeLocations:u})}e._spColor2D=f}}function u6e(e,t){let n=e._primitive,i=n._va.length*2;t.length=i;let o,r,s,a=0,c=n._batchTable.getUniformMapCallback()(e._uniformMap),d=e._needs2DShader;for(o=0;o0&&(c=o[0].attributes,p=yu.hasAttributesForSphericalExtents(c),b=yu.hasAttributesForTextureCoordinatePlanes(c),m=c.color),s=0;s{l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};M_.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};M_.prototype.isDestroyed=function(){return!1};M_.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._spColor=this._spColor&&this._spColor.destroy(),this._spPick2D=void 0,this._spColor2D=void 0,me(this)};var K1=M_;var p6e={u_globeMinimumAltitude:function(){return 55e3}};function Ld(e){e=e??B.EMPTY_OBJECT;let t=e.appearance,n=e.geometryInstances;if(!l(t)&&l(n)){let o=Array.isArray(n)?n:[n],r=o.length;for(let s=0;s{!this._ready&&l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};Ld.prototype.getBoundingSphere=function(e){let t=this._boundingSpheresKeys.indexOf(e);if(t!==-1)return this._boundingSpheres[t]};Ld.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};Ld.prototype.isDestroyed=function(){return!1};Ld.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};Ld._supportsMaterials=function(e){return e.depthTexture};Ld.supportsMaterials=function(e){return Ld._supportsMaterials(e.frameState.context)};var Ol=Ld;var Z3n=x(T(),1);var y3n=x(T(),1);function cc(e){e=e??B.EMPTY_OBJECT,this._primitives=[],this._guid=Qn(),this._primitiveAdded=new Se,this._primitiveRemoved=new Se,this._zIndex=void 0,this.show=e.show??!0,this.destroyPrimitives=e.destroyPrimitives??!0,this._countReferences=e.countReferences??!1}Object.defineProperties(cc.prototype,{length:{get:function(){return this._primitives.length}},primitiveAdded:{get:function(){return this._primitiveAdded}},primitiveRemoved:{get:function(){return this._primitiveRemoved}}});cc.prototype.add=function(e,t){let n=l(t),i=e._external=e._external||{},o=i._composites=i._composites||{};return o[this._guid]={collection:this},n?this._primitives.splice(t,0,e):this._primitives.push(e),this._countReferences&&(l(i._referenceCount)?++i._referenceCount:i._referenceCount=1),this._primitiveAdded.raiseEvent(e),e};cc.prototype.remove=function(e){if(this.contains(e)){let t=this._primitives.indexOf(e);if(t!==-1)return this._primitives.splice(t,1),delete e._external._composites[this._guid],this._countReferences&&e._external._referenceCount--,this.destroyPrimitives&&(!this._countReferences||e._external._referenceCount<=0)&&e.destroy(),this._primitiveRemoved.raiseEvent(e),!0}return!1};cc.prototype.removeAndDestroy=function(e){let t=this.remove(e);return t&&!this.destroyPrimitives&&e.destroy(),t};cc.prototype.removeAll=function(){let e=this._primitives,t=e.length;for(let n=0;n-1;o--)r=t[o],l(r._billboard)&&l(r._position)&&s.set(r.id,new xge(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._billboard)&&l(r._position)?s.contains(r.id)||s.set(r.id,new xge(r)):(s6(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],s6(s.get(r.id),r,a),s.remove(r.id)};function s6(e,t,n){l(e)&&(e.billboard=void 0,n.removeBillboard(t))}var CF=$y;var u7n=x(T(),1);var tzn=x(T(),1);function YO(){ge.throwInstantiationError()}Object.defineProperties(YO.prototype,{name:{get:ge.throwInstantiationError},clock:{get:ge.throwInstantiationError},entities:{get:ge.throwInstantiationError},isLoading:{get:ge.throwInstantiationError},changedEvent:{get:ge.throwInstantiationError},errorEvent:{get:ge.throwInstantiationError},loadingEvent:{get:ge.throwInstantiationError},show:{get:ge.throwInstantiationError},clustering:{get:ge.throwInstantiationError}});YO.prototype.update=function(e){ge.throwInstantiationError()};YO.setLoading=function(e,t){e._isLoading!==t&&(t?e._entityCollection.suspendEvents():e._entityCollection.resumeEvents(),e._isLoading=t,e._loading.raiseEvent(e,t))};var bs=YO;var YJn=x(T(),1);var zzn=x(T(),1);var azn=x(T(),1);var izn=x(T(),1),O6e=Object.freeze({NONE:0,LOADING:2,LOADED:3,ERROR:4,FAILED:5}),vs=O6e;function Kh(e){this._billboardCollection=e,this._id=void 0,this._loadState=vs.NONE,this._loadError=void 0,this._index=-1,this._width=void 0,this._height=void 0,this._hasSubregion=!1,this.dirty=!1}Object.defineProperties(Kh.prototype,{loadError:{get:function(){return this._loadError}},loadState:{get:function(){return this._loadState}},ready:{get:function(){return this._loadState===vs.LOADED}},hasImage:{get:function(){return this._loadState!==vs.NONE}},id:{get:function(){return this._id}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});Kh.prototype.unload=async function(){this._loadState!==vs.NONE&&(this._id=void 0,this._loadError=void 0,this._loadState=vs.NONE,this._index=-1,this._width=void 0,this._height=void 0,this.dirty=!0)};Kh.prototype.loadImage=async function(e,t,n,i){if(this._id===e)return;let o=this._billboardCollection,r=o.billboardTextureCache,s=r.get(e);if(l(s)&&t.loadState===vs.LOADING||t.loadState===vs.LOADED){Kh.clone(s,this);return}l(s)||(s=new Kh(o),r.set(e,s)),s._id=this._id=e,s._loadState=this._loadState=vs.LOADING,s._loadError=this._loadError=void 0;let a,c=this._billboardCollection.textureAtlas;try{let u=c.addImage(e,t,n,i);typeof u=="number"?a=u:a=await u}catch(u){if(s._loadState=vs.ERROR,s._loadError=u,this._id!==e)return;this._loadState=vs.ERROR,this._loadError=u;return}if(!l(a)||a===-1){if(s._loadState=vs.FAILED,s._index=-1,this._id!==e)return;this._loadState=vs.FAILED,this._index=-1;return}s._index=a,s._loadState=vs.LOADED;let d=c.rectangles[a];s._width=d.width,s._height=d.height,this._id===e&&(this._index=a,this._loadState=vs.LOADED,this._width=d.width,this._height=d.height,this.dirty=!0)};Kh.prototype.addImageSubRegion=function(e,t){this._id=e,this._loadError=void 0,this._hasSubregion=!0;let i=this._billboardCollection.textureAtlas.addImageSubRegion(e,t);if(typeof i=="number"){this.setImageSubRegion(i,t);return}this.loadImageSubRegion(e,t,i)};Kh.prototype.loadImageSubRegion=async function(e,t,n){let i;try{this._loadState=vs.LOADING,i=await n}catch(o){this._loadState=vs.ERROR,this._loadError=o;return}this._id===e&&(this._loadState=vs.LOADED,this.setImageSubRegion(i,t))};Kh.prototype.setImageSubRegion=function(e,t){if(this._index!==e){if(!l(e)||e===-1){this._loadState=vs.FAILED,this._index=-1,this._width=void 0,this._height=void 0;return}this._width=t.width,this._height=t.height,this._index=e,this.dirty=!0}};Kh.prototype.computeTextureCoordinates=function(e){return this._billboardCollection.textureAtlas.computeTextureCoordinates(this._index,e)};Kh.clone=function(e,t){if(t._id=e._id,t._loadState=e._loadState,t._loadError=void 0,t._index=e._index,t._width=e._width,t._height=e._height,t._hasSubregion=e._hasSubregion,e.ready){t.dirty=!0;return}return(async()=>{let i=e._id;await e._billboardCollection.textureAtlas._indexPromiseById.get(i),t._id===i&&(e._hasSubregion&&await Promise.resolve(),t._id=i,t._loadState=e._loadState,t._loadError=e._loadError,t._index=e._index,t._width=e._width,t._height=e._height,t.dirty=!0)})(),t};var Cb=Kh;var _zn=x(T(),1);var vc={},B6e=new ce(0,0,0,1),ol=new ce,z6e=new $e,a6=new M,c6=new M;vc.worldToWindowCoordinates=function(e,t,n){return vc.worldWithEyeOffsetToWindowCoordinates(e,t,h.ZERO,n)};var Tge=new ce,_ge=new h;function RF(e,t,n,i){let o=n.viewMatrix,r=I.multiplyByVector(o,ce.fromElements(e.x,e.y,e.z,1,Tge),Tge),s=h.multiplyComponents(t,h.normalize(r,_ge),_ge);return r.x+=t.x+s.x,r.y+=t.y+s.y,r.z+=s.z,I.multiplyByVector(n.frustum.projectionMatrix,r,i)}var H6e=new fe(Math.PI,L.PI_OVER_TWO),K6e=new h,J6e=new h;vc.worldWithEyeOffsetToWindowCoordinates=function(e,t,n,i){let o=e.frameState,r=vc.computeActualEllipsoidPosition(o,t,B6e);if(!l(r))return;let s=e.canvas,a=z6e;a.x=0,a.y=0,a.width=s.clientWidth,a.height=s.clientHeight;let c=e.camera,d=!1;if(o.mode===se.SCENE2D){let u=e.mapProjection,m=H6e,p=u.project(m,K6e),b=h.clone(c.position,J6e),f=c.frustum.clone(),y=I.computeViewportTransformation(a,0,1,new I),_=c.frustum.projectionMatrix,S=c.positionWC.y,Z=h.fromElements(L.sign(S)*p.x-S,0,-c.positionWC.x),V=bt.pointToGLWindowCoordinates(_,y,Z);if(S===0||V.x<=0||V.x>=s.clientWidth)d=!0;else{if(V.x>s.clientWidth*.5){a.width=V.x,c.frustum.right=p.x-S,ol=RF(r,n,c,ol),vc.clipToGLWindowCoordinates(a,ol,a6),a.x+=V.x,c.position.x=-c.position.x;let C=c.frustum.right;c.frustum.right=-c.frustum.left,c.frustum.left=-C,ol=RF(r,n,c,ol),vc.clipToGLWindowCoordinates(a,ol,c6)}else{a.x+=V.x,a.width-=V.x,c.frustum.left=-p.x-S,ol=RF(r,n,c,ol),vc.clipToGLWindowCoordinates(a,ol,a6),a.x=a.x-a.width,c.position.x=-c.position.x;let C=c.frustum.left;c.frustum.left=-c.frustum.right,c.frustum.right=-C,ol=RF(r,n,c,ol),vc.clipToGLWindowCoordinates(a,ol,c6)}h.clone(b,c.position),c.frustum=f.clone(),i=M.clone(a6,i),(i.x<0||i.x>s.clientWidth)&&(i.x=c6.x)}}if(o.mode!==se.SCENE2D||d){if(ol=RF(r,n,c,ol),ol.z<0&&!(c.frustum instanceof bn)&&!(c.frustum instanceof ds))return;i=vc.clipToGLWindowCoordinates(a,ol,i)}return i.y=s.clientHeight-i.y,i};vc.worldToDrawingBufferCoordinates=function(e,t,n){if(n=vc.worldToWindowCoordinates(e,t,n),!!l(n))return vc.transformWindowToDrawingBuffer(e,n,n)};var Rb=new h,j6e=new fe;vc.computeActualEllipsoidPosition=function(e,t,n){let i=e.mode;if(i===se.SCENE3D)return h.clone(t,n);let o=e.mapProjection,r=o.ellipsoid.cartesianToCartographic(t,j6e);if(!l(r))return;if(o.project(r,Rb),i===se.COLUMBUS_VIEW)return h.fromElements(Rb.z,Rb.x,Rb.y,n);if(i===se.SCENE2D)return h.fromElements(0,Rb.x,Rb.y,n);let s=e.morphTime;return h.fromElements(L.lerp(Rb.z,t.x,s),L.lerp(Rb.x,t.y,s),L.lerp(Rb.y,t.z,s),n)};var Sge=new h,Zge=new h,Vge=new I;vc.clipToGLWindowCoordinates=function(e,t,n){return h.divideByScalar(t,t.w,Sge),I.computeViewportTransformation(e,0,1,Vge),I.multiplyByPoint(Vge,Sge,Zge),M.fromCartesian3(Zge,n)};vc.transformWindowToDrawingBuffer=function(e,t,n){let i=e.canvas,o=e.drawingBufferWidth/i.clientWidth,r=e.drawingBufferHeight/i.clientHeight;return M.fromElements(t.x*o,t.y*r,n)};var Q6e=new ce,Cge=new ce;vc.drawingBufferToWorldCoordinates=function(e,t,n,i){let r=e.context.uniformState,s=r.currentFrustum,a=s.x,c=s.y;if(e.frameState.useLogDepth){let b=n*r.log2FarDepthFromNearPlusOne,f=Math.pow(2,b)-1;n=c*(1-a/(f+a))/(c-a)}let d=e.view.passState.viewport,u=ce.clone(ce.UNIT_W,Q6e);u.x=(t.x-d.x)/d.width*2-1,u.y=(t.y-d.y)/d.height*2-1,u.z=n*2-1,u.w=1;let m,p=e.camera.frustum;if(l(p.fovy)){m=I.multiplyByVector(r.inverseViewProjection,u,Cge);let b=1/m.w;h.multiplyByScalar(m,b,m)}else{let b=p.offCenterFrustum;l(b)&&(p=b),m=Cge,m.x=(u.x*(p.right-p.left)+p.left+p.right)*.5,m.y=(u.y*(p.top-p.bottom)+p.bottom+p.top)*.5,m.z=(u.z*(a-c)-a-c)*.5,m.w=1,m=I.multiplyByVector(r.inverseView,m,m)}return h.fromCartesian4(m,i)};var co=vc;function Wi(e,t){e=e??B.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;l(n)&&(n=Ht.clone(n)),l(i)&&(i=Ht.clone(i)),l(o)&&(o=Ht.clone(o)),l(r)&&(r=Ot.clone(r)),this._show=e.show??!0,this._position=h.clone(e.position??h.ZERO),this._actualPosition=h.clone(this._position),this._pixelOffset=M.clone(e.pixelOffset??M.ZERO),this._translate=new M(0,0),this._eyeOffset=h.clone(e.eyeOffset??h.ZERO),this._heightReference=e.heightReference??rt.NONE,this._verticalOrigin=e.verticalOrigin??zn.CENTER,this._horizontalOrigin=e.horizontalOrigin??Di.CENTER,this._scale=e.scale??1,this._color=U.clone(e.color??U.WHITE),this._rotation=e.rotation??0,this._alignedAxis=h.clone(e.alignedAxis??h.ZERO),this._width=e.width,this._height=e.height,this._scaleByDistance=o,this._translucencyByDistance=n,this._pixelOffsetScaleByDistance=i,this._sizeInMeters=e.sizeInMeters??!1,this._distanceDisplayCondition=r,this._disableDepthTestDistance=e.disableDepthTestDistance,this._id=e.id,this._collection=e.collection??t,this._pickId=void 0,this._pickPrimitive=e._pickPrimitive??this,this._billboardCollection=t,this._dirty=!1,this._index=-1,this._batchIndex=void 0,this._imageTexture=new Cb(t),this._imageId=e.imageId,this._imageWidth=void 0,this._imageHeight=void 0,this._labelDimensions=void 0,this._labelHorizontalOrigin=void 0,this._labelTranslate=void 0;let s=e.image;l(s)&&(this._computeImageTextureProperties(e.imageId,s),this._imageTexture.loadImage(this._imageId,s,this._imageWidth,this._imageHeight)),l(e.imageSubRegion)&&this._imageTexture.addImageSubRegion(this._imageId,e.imageSubRegion),this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=se.SCENE3D,this._clusterShow=!0,this._outlineColor=U.clone(e.outlineColor??U.BLACK),this._outlineWidth=e.outlineWidth??0,this._updateClamping(),this._splitDirection=e.splitDirection??Xr.NONE,this._positionFromParent=!1}var Rge=Wi.SHOW_INDEX=0,MO=Wi.POSITION_INDEX=1,vge=Wi.PIXEL_OFFSET_INDEX=2,q6e=Wi.EYE_OFFSET_INDEX=3,$6e=Wi.HORIZONTAL_ORIGIN_INDEX=4,eqe=Wi.VERTICAL_ORIGIN_INDEX=5,tqe=Wi.SCALE_INDEX=6,Gge=Wi.IMAGE_INDEX_INDEX=7,Age=Wi.COLOR_INDEX=8,nqe=Wi.ROTATION_INDEX=9,iqe=Wi.ALIGNED_AXIS_INDEX=10,oqe=Wi.SCALE_BY_DISTANCE_INDEX=11,rqe=Wi.TRANSLUCENCY_BY_DISTANCE_INDEX=12,sqe=Wi.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX=13,aqe=Wi.DISTANCE_DISPLAY_CONDITION=14,cqe=Wi.DISABLE_DEPTH_DISTANCE=15;Wi.TEXTURE_COORDINATE_BOUNDS=16;var Ege=Wi.SDF_INDEX=17,lqe=Wi.SPLIT_DIRECTION_INDEX=18;Wi.NUMBER_OF_PROPERTIES=19;function Ar(e,t){let n=e._billboardCollection;l(n)&&(n._updateBillboard(e,t),e._dirty=!0)}Object.defineProperties(Wi.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,Ar(this,Rge))}},position:{get:function(){return this._position},set:function(e){let t=this._position;h.equals(t,e)||(h.clone(e,t),h.clone(e,this._actualPosition),this._updateClamping(),Ar(this,MO))}},heightReference:{get:function(){return this._heightReference},set:function(e){let t=this._heightReference;e!==t&&(this._heightReference=e,this._updateClamping(),Ar(this,MO))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){let t=this._pixelOffset;M.equals(t,e)||(M.clone(e,t),Ar(this,vge))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;Ht.equals(t,e)||(this._scaleByDistance=Ht.clone(e,t),Ar(this,oqe))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;Ht.equals(t,e)||(this._translucencyByDistance=Ht.clone(e,t),Ar(this,rqe))}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){let t=this._pixelOffsetScaleByDistance;Ht.equals(t,e)||(this._pixelOffsetScaleByDistance=Ht.clone(e,t),Ar(this,sqe))}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){let t=this._eyeOffset;h.equals(t,e)||(h.clone(e,t),Ar(this,q6e))}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin!==e&&(this._horizontalOrigin=e,Ar(this,$6e))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin!==e&&(this._verticalOrigin=e,Ar(this,eqe))}},scale:{get:function(){return this._scale},set:function(e){this._scale!==e&&(this._scale=e,Ar(this,tqe))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),Ar(this,Age))}},rotation:{get:function(){return this._rotation},set:function(e){this._rotation!==e&&(this._rotation=e,Ar(this,nqe))}},alignedAxis:{get:function(){return this._alignedAxis},set:function(e){let t=this._alignedAxis;h.equals(t,e)||(h.clone(e,t),Ar(this,iqe))}},width:{get:function(){return this._width??this._imageTexture.width},set:function(e){this._width!==e&&(this._width=e,Ar(this,Gge))}},height:{get:function(){return this._height??this._imageTexture.height},set:function(e){this._height!==e&&(this._height=e,Ar(this,Gge))}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters!==e&&(this._sizeInMeters=e,Ar(this,Age))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){Ot.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=Ot.clone(e,this._distanceDisplayCondition),Ar(this,aqe))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,Ar(this,cqe))}},id:{get:function(){return this._id},set:function(e){this._id=e,l(this._pickId)&&(this._pickId.object.id=e)}},pickPrimitive:{get:function(){return this._pickPrimitive},set:function(e){this._pickPrimitive=e,l(this._pickId)&&(this._pickId.object.primitive=e)}},pickId:{get:function(){return this._pickId}},image:{get:function(){return this._imageTexture.id},set:function(e){if(!l(e)){this._imageTexture.unload();return}this._computeImageTextureProperties(void 0,e),this._imageTexture.loadImage(this._imageId,e,this._imageWidth,this._imageHeight)}},ready:{get:function(){return this._imageTexture.ready}},loadError:{get:function(){return this._imageTexture.loadError}},textureDirty:{get:function(){return this._imageTexture.dirty},set:function(e){this._imageTexture.dirty=e}},_clampedPosition:{get:function(){return this._actualClampedPosition},set:function(e){this._actualClampedPosition=h.clone(e,this._actualClampedPosition),Ar(this,MO)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,Ar(this,Rge))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;U.equals(t,e)||(U.clone(e,t),Ar(this,Ege))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,Ar(this,Ege))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,Ar(this,lqe))}}});Wi.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this._pickPrimitive,collection:this._collection,id:this._id})),this._pickId};Wi.prototype._updateClamping=function(){Wi._updateClamping(this._billboardCollection,this)};var kO=new fe;Wi._updateClamping=function(e,t){if(!l(e)||!l(e._scene))return;let n=e._scene,i=n.ellipsoid??ie.default,o=n.frameState.mode,r=o!==t._mode;if(t._mode=o,(t._heightReference===rt.NONE||r)&&l(t._removeCallbackFunc)&&(t._removeCallbackFunc(),t._removeCallbackFunc=void 0,t._clampedPosition=void 0),t._heightReference===rt.NONE||t._positionFromParent||!l(t._position))return;l(t._removeCallbackFunc)&&t._removeCallbackFunc();let s=i.cartesianToCartographic(t._position);if(!l(s)){t._actualClampedPosition=void 0;return}function a(d){let u=i.cartographicToCartesian(d,t._clampedPosition);J1(t._heightReference)&&(t._mode===se.SCENE3D?(d.height+=s.height,i.cartographicToCartesian(d,u)):u.x+=s.height),t._clampedPosition=u}t._removeCallbackFunc=n.updateHeight(s,a,t._heightReference),fe.clone(s,kO);let c=n.getHeight(s,t._heightReference);l(c)&&(kO.height=c),a(kO)};Wi.prototype.computeTextureCoordinates=function(e){return this._imageTexture.computeTextureCoordinates(e)};Wi.prototype.setImage=function(e,t){this._computeImageTextureProperties(e,t),this._imageTexture.loadImage(this._imageId,t,this._imageWidth,this._imageHeight)};Wi.prototype.setImageTexture=function(e){Cb.clone(e,this._imageTexture)};var Lge=512;Wi.prototype._computeImageTextureProperties=function(e,t){if(this._imageWidth=void 0,this._imageHeight=void 0,!l(t)){this._imageId=Qn();return}let n;typeof t=="string"?n=t:t instanceof ve?n=t._url:l(t.src)&&(n=t.src),this._imageId=e??n??Qn(),l(this._width)&&l(this._height)&&!this._sizeInMeters&&dqe(n)&&(this._imageWidth=Math.min(this._width,Lge),this._imageHeight=Math.min(this._height,Lge))};function dqe(e){return l(e)?Th(e)?e.startsWith("data:image/svg+xml"):L0(e)==="svg":!1}Wi.prototype.setImageSubRegion=function(e,t){this._imageTexture.addImageSubRegion(e,t)};Wi.prototype._setTranslate=function(e){let t=this._translate;M.equals(t,e)||(M.clone(e,t),Ar(this,vge))};Wi.prototype._getActualPosition=function(){return l(this._clampedPosition)?this._clampedPosition:this._actualPosition};Wi.prototype._setActualPosition=function(e){l(this._clampedPosition)||h.clone(e,this._actualPosition),Ar(this,MO)};var Wge=new ce;Wi._computeActualPosition=function(e,t,n,i){return l(e._clampedPosition)?(n.mode!==e._mode&&e._updateClamping(),e._clampedPosition):n.mode===se.SCENE3D?t:(I.multiplyByPoint(i,t,Wge),co.computeActualEllipsoidPosition(n,Wge))};var Fge=new h;Wi._computeScreenSpacePosition=function(e,t,n,i,o,r){let s=I.multiplyByPoint(e,t,Fge),a=co.worldWithEyeOffsetToWindowCoordinates(o,s,n,r);if(l(a))return M.add(a,i,a),a};var wO=new M(0,0);Wi.prototype.computeScreenSpacePosition=function(e,t){let n=this._billboardCollection;l(t)||(t=new M),M.clone(this._pixelOffset,wO),M.add(wO,this._translate,wO);let i=n.modelMatrix,o=this._position;if(l(this._clampedPosition)&&(o=this._clampedPosition,e.mode!==se.SCENE3D)){let s=e.mapProjection,a=s.ellipsoid,c=s.unproject(o,kO);o=a.cartographicToCartesian(c,Fge),i=I.IDENTITY}return Wi._computeScreenSpacePosition(i,o,this._eyeOffset,wO,e,t)};Wi.getScreenSpaceBoundingBox=function(e,t,n){let i=e.width,o=e.height,r=e.scale;i*=r,o*=r;let s=t.x;e.horizontalOrigin===Di.RIGHT?s-=i:e.horizontalOrigin===Di.CENTER&&(s-=i*.5);let a=t.y;return e.verticalOrigin===zn.BOTTOM||e.verticalOrigin===zn.BASELINE?a-=o:e.verticalOrigin===zn.CENTER&&(a-=o*.5),l(n)||(n=new $e),n.x=s,n.y=a,n.width=i,n.height=o,n};Wi.prototype.equals=function(e){return this===e||l(e)&&this._id===e._id&&h.equals(this._position,e._position)&&this.image===e.image&&this._show===e._show&&this._scale===e._scale&&this._verticalOrigin===e._verticalOrigin&&this._horizontalOrigin===e._horizontalOrigin&&this._heightReference===e._heightReference&&U.equals(this._color,e._color)&&M.equals(this._pixelOffset,e._pixelOffset)&&M.equals(this._translate,e._translate)&&h.equals(this._eyeOffset,e._eyeOffset)&&Ht.equals(this._scaleByDistance,e._scaleByDistance)&&Ht.equals(this._translucencyByDistance,e._translucencyByDistance)&&Ht.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&Ot.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};Wi.prototype._destroy=function(){l(this._customData)&&(this._billboardCollection._scene.globe._surface.removeTileCustomData(this._customData),this._customData=void 0),l(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this.image=void 0,this._pickId=this._pickId&&this._pickId.destroy(),this._billboardCollection=void 0};var vo=Wi;var NHn=x(T(),1);var Kzn=x(T(),1),GF=`uniform sampler2D u_atlas; uniform float u_coarseDepthTestDistance; uniform float u_threePointDepthTestDistance; #ifdef VECTOR_TILE uniform vec4 u_highlightColor; #endif in vec2 v_textureCoordinates; in vec4 v_pickColor; in vec4 v_color; flat in vec2 v_splitDirectionAndEllipsoidDepthEC; #ifdef SDF in vec4 v_outlineColor; in float v_outlineWidth; #endif in vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize const float SHIFT_LEFT1 = 2.0; const float SHIFT_RIGHT1 = 1.0 / 2.0; float getGlobeDepthAtCoords(vec2 st) { float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, st)); if (logDepthOrDepth == 0.0) { return 0.0; // not on the globe } vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); return eyeCoordinate.z / eyeCoordinate.w; } #ifdef SDF // Get the distance from the edge of a glyph at a given position sampling an SDF texture. float getDistance(vec2 position) { return texture(u_atlas, position).r; } // Samples the sdf texture at the given position and produces a color based on the fill color and the outline. vec4 getSDFColor(vec2 position, float outlineWidth, vec4 outlineColor, float smoothing) { float distance = getDistance(position); if (outlineWidth > 0.0) { // Don't get the outline edge exceed the SDF_EDGE float outlineEdge = clamp(SDF_EDGE - outlineWidth, 0.0, SDF_EDGE); float outlineFactor = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance); vec4 sdfColor = mix(outlineColor, v_color, outlineFactor); float alpha = smoothstep(outlineEdge - smoothing, outlineEdge + smoothing, distance); return vec4(sdfColor.rgb, sdfColor.a * alpha); } else { float alpha = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance); return vec4(v_color.rgb, v_color.a * alpha); } } #endif bool getDepthTestEnabled() { float temp = v_compressed.y; temp = temp * SHIFT_RIGHT1; float temp2 = (temp - floor(temp)) * SHIFT_LEFT1; return temp2 != 0.0; } float getRelativeEyeDepth(float eyeDepth, float distanceToEllipsoid, float epsilon) { float depthDifferential = eyeDepth - distanceToEllipsoid; float depthRatio = abs(depthDifferential / distanceToEllipsoid); if (depthRatio < epsilon) { // The approximations are imprecise, so use an epsilon check for small value differences and assume a value of 0.0 return 0.0; } return depthDifferential; } // Extra manual depth testing is done to allow more control over how a billboard is occluded // by the globe when near and far from the camera. void doDepthTest(float eyeDepth, float globeDepth) { #ifdef VS_THREE_POINT_DEPTH_CHECK // Since discarding vertices is not possible, the vertex shader sets eyeDepth to 0 to indicate the depth test failed. Apply the discard here. if (eyeDepth > -u_threePointDepthTestDistance) { if (eyeDepth == 0.0) { discard; } return; } #endif bool useGlobeDepth = eyeDepth > -u_coarseDepthTestDistance; if (useGlobeDepth && globeDepth == 0.0) { // Pixel is not on the globe, so there is no distance to compare against. Pass. return; } // If the camera is close, compare against the globe depth texture that includes depth from the 3D tile pass. if (useGlobeDepth && getRelativeEyeDepth(eyeDepth, globeDepth, czm_epsilon1) < 0.0) { discard; } } #ifdef LOG_DEPTH void writeDepth(float eyeDepth, float globeDepth, float distanceToEllipsoid) { // If we've made it here, the manual depth test above determined that this fragment should be visible. // But the automatic depth test must still run in order to write the result to the depth buffer, and its results may // disagree with our manual depth test's results. To prefer our manual results when in front of the globe, apply an offset towards the camera. float depthArg = v_depthFromNearPlusOne; if (globeDepth != 0.0 && getRelativeEyeDepth(eyeDepth, distanceToEllipsoid, czm_epsilon3) > 0.0) { float globeDepthFromNearPlusOne = (-globeDepth - czm_currentFrustum.x) + 1.0; float nudge = max(globeDepthFromNearPlusOne * 5e-6, czm_epsilon7); float globeOnTop = max(1.0, globeDepthFromNearPlusOne - nudge); depthArg = min(depthArg, globeOnTop); } czm_writeLogDepth(depthArg); } #endif void main() { if (v_splitDirectionAndEllipsoidDepthEC.x < 0.0 && gl_FragCoord.x > czm_splitPosition) { discard; } if (v_splitDirectionAndEllipsoidDepthEC.x > 0.0 && gl_FragCoord.x < czm_splitPosition) { discard; } if (getDepthTestEnabled()) { vec2 fragSt = gl_FragCoord.xy / czm_viewport.zw; float eyeDepth = v_compressed.x; float globeDepth = getGlobeDepthAtCoords(fragSt); float distanceToEllipsoid = -v_splitDirectionAndEllipsoidDepthEC.y; doDepthTest(eyeDepth, globeDepth); #ifdef LOG_DEPTH writeDepth(eyeDepth, globeDepth, distanceToEllipsoid); #endif } vec4 color = texture(u_atlas, v_textureCoordinates); #ifdef SDF float outlineWidth = v_outlineWidth; vec4 outlineColor = v_outlineColor; // Get the current distance float distance = getDistance(v_textureCoordinates); #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) float smoothing = fwidth(distance); // Get an offset that is approximately half the distance to the neighbor pixels // 0.354 is approximately half of 1/sqrt(2) vec2 sampleOffset = 0.354 * vec2(dFdx(v_textureCoordinates) + dFdy(v_textureCoordinates)); // Sample the center point vec4 center = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing); // Sample the 4 neighbors vec4 color1 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing); vec4 color2 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing); vec4 color3 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing); vec4 color4 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing); // Equally weight the center sample and the 4 neighboring samples color = (center + color1 + color2 + color3 + color4)/5.0; #else // If no derivatives available (IE 10?), just do a single sample float smoothing = 1.0/32.0; color = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing); #endif color = czm_gammaCorrect(color); #else color = czm_gammaCorrect(color); color *= czm_gammaCorrect(v_color); #endif // Fully transparent parts of the billboard are not pickable. #if !defined(OPAQUE) && !defined(TRANSLUCENT) if (color.a < 0.005) // matches 0/255 and 1/255 { discard; } #else // The billboard is rendered twice. The opaque pass discards translucent fragments // and the translucent pass discards opaque fragments. #ifdef OPAQUE if (color.a < 0.995) // matches < 254/255 { discard; } #else if (color.a >= 0.995) // matches 254/255 and 255/255 { discard; } #endif #endif #ifdef VECTOR_TILE color *= u_highlightColor; #endif out_FragColor = color; } `;var jzn=x(T(),1),AF=`uniform float u_threePointDepthTestDistance; in vec2 direction; in vec4 positionHighAndScale; in vec4 positionLowAndRotation; in vec4 compressedAttribute0; // pixel offset, translate, horizontal origin, vertical origin, show, direction, texture coordinates (texture offset) in vec4 compressedAttribute1; // aligned axis, translucency by distance, image width in vec4 compressedAttribute2; // label horizontal origin, image height, color, pick color, size in meters, valid aligned axis, 13 bits free in vec4 eyeOffset; // eye offset in meters, 4 bytes free (texture range) in vec4 scaleByDistance; // near, nearScale, far, farScale in vec4 pixelOffsetScaleByDistance; // near, nearScale, far, farScale in vec4 compressedAttribute3; // distance display condition near, far, disableDepthTestDistanceSq, dimensions in vec2 sdf; // sdf outline color (rgb) and width (w) in float splitDirection; // splitDirection #ifdef VS_THREE_POINT_DEPTH_CHECK in vec4 textureCoordinateBoundsOrLabelTranslate; // the min and max x and y values for the texture coordinates #endif #ifdef VECTOR_TILE in float a_batchId; #endif out vec2 v_textureCoordinates; out vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize out vec4 v_pickColor; out vec4 v_color; flat out vec2 v_splitDirectionAndEllipsoidDepthEC; // x: splitDirection, y: ellipsoid depth in eye coordinates #ifdef SDF out vec4 v_outlineColor; out float v_outlineWidth; #endif const float UPPER_BOUND = 32768.0; const float SHIFT_LEFT16 = 65536.0; const float SHIFT_LEFT12 = 4096.0; const float SHIFT_LEFT8 = 256.0; const float SHIFT_LEFT7 = 128.0; const float SHIFT_LEFT5 = 32.0; const float SHIFT_LEFT3 = 8.0; const float SHIFT_LEFT2 = 4.0; const float SHIFT_LEFT1 = 2.0; const float SHIFT_RIGHT12 = 1.0 / 4096.0; const float SHIFT_RIGHT8 = 1.0 / 256.0; const float SHIFT_RIGHT7 = 1.0 / 128.0; const float SHIFT_RIGHT5 = 1.0 / 32.0; const float SHIFT_RIGHT3 = 1.0 / 8.0; const float SHIFT_RIGHT2 = 1.0 / 4.0; const float SHIFT_RIGHT1 = 1.0 / 2.0; vec4 addScreenSpaceOffset(vec4 positionEC, vec2 imageSize, float scale, vec2 direction, vec2 origin, vec2 translate, vec2 pixelOffset, vec3 alignedAxis, bool validAlignedAxis, float rotation, bool sizeInMeters, out mat2 rotationMatrix, out float mpp) { // Note the halfSize cannot be computed in JavaScript because it is sent via // compressed vertex attributes that coerce it to an integer. vec2 halfSize = imageSize * scale * 0.5; halfSize *= ((direction * 2.0) - 1.0); vec2 originTranslate = origin * abs(halfSize); #if defined(ROTATION) || defined(ALIGNED_AXIS) if (validAlignedAxis || rotation != 0.0) { float angle = rotation; if (validAlignedAxis) { vec4 projectedAlignedAxis = czm_modelView3D * vec4(alignedAxis, 0.0); angle += sign(-projectedAlignedAxis.x) * acos(sign(projectedAlignedAxis.y) * (projectedAlignedAxis.y * projectedAlignedAxis.y) / (projectedAlignedAxis.x * projectedAlignedAxis.x + projectedAlignedAxis.y * projectedAlignedAxis.y)); } float cosTheta = cos(angle); float sinTheta = sin(angle); rotationMatrix = mat2(cosTheta, sinTheta, -sinTheta, cosTheta); halfSize = rotationMatrix * halfSize; } else { rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0); } #endif mpp = czm_metersPerPixel(positionEC); positionEC.xy += (originTranslate + halfSize) * czm_branchFreeTernary(sizeInMeters, 1.0, mpp); positionEC.xy += (translate + pixelOffset) * mpp; return positionEC; } #ifdef VS_THREE_POINT_DEPTH_CHECK float getGlobeDepth(vec4 positionEC) { vec4 posWC = czm_eyeToWindowCoordinates(positionEC); float globeDepth = czm_unpackDepth(texture(czm_globeDepthTexture, posWC.xy / czm_viewport.zw)); if (globeDepth == 0.0) { return 0.0; // not on the globe } vec4 eyeCoordinate = czm_windowToEyeCoordinates(posWC.xy, globeDepth); return eyeCoordinate.z / eyeCoordinate.w; } #endif void main() { // Modifying this shader may also require modifications to Billboard._computeScreenSpacePosition // unpack attributes vec3 positionHigh = positionHighAndScale.xyz; vec3 positionLow = positionLowAndRotation.xyz; float scale = positionHighAndScale.w; #if defined(ROTATION) || defined(ALIGNED_AXIS) float rotation = positionLowAndRotation.w; #else float rotation = 0.0; #endif float compressed = compressedAttribute0.x; vec2 pixelOffset; pixelOffset.x = floor(compressed * SHIFT_RIGHT7); compressed -= pixelOffset.x * SHIFT_LEFT7; pixelOffset.x -= UPPER_BOUND; vec2 origin; origin.x = floor(compressed * SHIFT_RIGHT5); compressed -= origin.x * SHIFT_LEFT5; origin.y = floor(compressed * SHIFT_RIGHT3); compressed -= origin.y * SHIFT_LEFT3; origin -= vec2(1.0); float show = floor(compressed * SHIFT_RIGHT2); compressed -= show * SHIFT_LEFT2; vec2 textureCoordinatesBottomLeft = czm_decompressTextureCoordinates(compressedAttribute0.w); vec2 textureCoordinatesRange = czm_decompressTextureCoordinates(eyeOffset.w); vec2 textureCoordinates = textureCoordinatesBottomLeft + direction * textureCoordinatesRange; float temp = compressedAttribute0.y * SHIFT_RIGHT8; pixelOffset.y = -(floor(temp) - UPPER_BOUND); vec2 translate; translate.y = (temp - floor(temp)) * SHIFT_LEFT16; temp = compressedAttribute0.z * SHIFT_RIGHT8; translate.x = floor(temp) - UPPER_BOUND; translate.x *= SHIFT_RIGHT2; // undo translateX scaling (helps preserve subpixel precision, see BillboardCollection.js attribute writer for more info) translate.y += (temp - floor(temp)) * SHIFT_LEFT8; translate.y -= UPPER_BOUND; translate.y *= SHIFT_RIGHT2; temp = compressedAttribute1.x * SHIFT_RIGHT8; float temp2 = floor(compressedAttribute2.w * SHIFT_RIGHT2); vec2 imageSize = vec2(floor(temp), temp2); #ifdef EYE_DISTANCE_TRANSLUCENCY vec4 translucencyByDistance; translucencyByDistance.x = compressedAttribute1.z; translucencyByDistance.z = compressedAttribute1.w; translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0; temp = compressedAttribute1.y * SHIFT_RIGHT8; translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0; #endif #ifdef VS_THREE_POINT_DEPTH_CHECK temp = compressedAttribute3.w; temp = temp * SHIFT_RIGHT12; vec2 dimensions; dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12; dimensions.x = floor(temp); #endif #ifdef ALIGNED_AXIS vec3 alignedAxis = czm_octDecode(floor(compressedAttribute1.y * SHIFT_RIGHT8)); temp = compressedAttribute2.z * SHIFT_RIGHT5; bool validAlignedAxis = (temp - floor(temp)) * SHIFT_LEFT1 > 0.0; #else vec3 alignedAxis = vec3(0.0); bool validAlignedAxis = false; #endif vec4 color = czm_decodeRGB8(compressedAttribute2.x); vec4 pickColor = czm_decodeRGB8(compressedAttribute2.y); temp = compressedAttribute2.z * SHIFT_RIGHT8; bool sizeInMeters = floor((temp - floor(temp)) * SHIFT_LEFT7) > 0.0; temp = floor(temp) * SHIFT_RIGHT8; pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8; pickColor.a /= 255.0; color.a = floor(temp); color.a /= 255.0; /////////////////////////////////////////////////////////////////////////// vec4 p = czm_translateRelativeToEye(positionHigh, positionLow); vec4 positionEC = czm_modelViewRelativeToEye * p; positionEC = czm_eyeOffset(positionEC, eyeOffset.xyz); positionEC.xyz *= show; /////////////////////////////////////////////////////////////////////////// #if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(EYE_DISTANCE_PIXEL_OFFSET) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE) float lengthSq; if (czm_sceneMode == czm_sceneMode2D) { // 2D camera distance is a special case // treat all billboards as flattened to the z=0.0 plane lengthSq = czm_eyeHeight2D.y; } else { lengthSq = dot(positionEC.xyz, positionEC.xyz); } #endif #ifdef EYE_DISTANCE_SCALING float distanceScale = czm_nearFarScalar(scaleByDistance, lengthSq); scale *= distanceScale; translate *= distanceScale; // push vertex behind near plane for clipping if (scale == 0.0) { positionEC.xyz = vec3(0.0); } #endif float translucency = 1.0; #ifdef EYE_DISTANCE_TRANSLUCENCY translucency = czm_nearFarScalar(translucencyByDistance, lengthSq); // push vertex behind near plane for clipping if (translucency == 0.0) { positionEC.xyz = vec3(0.0); } #endif #ifdef EYE_DISTANCE_PIXEL_OFFSET float pixelOffsetScale = czm_nearFarScalar(pixelOffsetScaleByDistance, lengthSq); pixelOffset *= pixelOffsetScale; #endif #ifdef DISTANCE_DISPLAY_CONDITION float nearSq = compressedAttribute3.x; float farSq = compressedAttribute3.y; if (lengthSq < nearSq || lengthSq > farSq) { positionEC.xyz = vec3(0.0); } #endif mat2 rotationMatrix; float mpp; float enableDepthCheck = 1.0; #ifdef DISABLE_DEPTH_DISTANCE float disableDepthTestDistanceSq = compressedAttribute3.z; if (disableDepthTestDistanceSq == 0.0 && czm_minimumDisableDepthTestDistance != 0.0) { disableDepthTestDistanceSq = czm_minimumDisableDepthTestDistance; } if (lengthSq < disableDepthTestDistanceSq || disableDepthTestDistanceSq < 0.0) { enableDepthCheck = 0.0; } #endif v_splitDirectionAndEllipsoidDepthEC.y = czm_infinity; vec3 ellipsoidCenter = czm_view[3].xyz; vec3 rayDirection = normalize(positionEC.xyz); czm_ray ray = czm_ray(vec3(0.0), rayDirection); vec3 ellipsoid_inverseRadii = czm_ellipsoidInverseRadii; czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoidCenter, ellipsoid_inverseRadii); if (!czm_isEmpty(intersection)) { v_splitDirectionAndEllipsoidDepthEC.y = intersection.start; } v_compressed.y = enableDepthCheck; #ifdef VS_THREE_POINT_DEPTH_CHECK if (lengthSq < (u_threePointDepthTestDistance * u_threePointDepthTestDistance) && (enableDepthCheck == 1.0)) { float depthsilon = 10.0; vec2 depthOrigin; // Horizontal origin for labels comes from a special attribute. If that value is 0, this is a billboard - use the regular origin. // Otherwise, transform the label origin to -1, 0, 1 (right, center, left). depthOrigin.x = floor(compressedAttribute2.w - (temp2 * SHIFT_LEFT2)); depthOrigin.x = czm_branchFreeTernary(depthOrigin.x == 0.0, origin.x, depthOrigin.x - 2.0); depthOrigin.y = origin.y; vec4 pEC1 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0), depthOrigin, vec2(0.0), pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp); float globeDepth1 = getGlobeDepth(pEC1); if (globeDepth1 != 0.0 && pEC1.z + depthsilon < globeDepth1) { vec4 pEC2 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0, 1.0), depthOrigin, vec2(0.0), pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp); float globeDepth2 = getGlobeDepth(pEC2); if (globeDepth2 != 0.0 && pEC2.z + depthsilon < globeDepth2) { vec4 pEC3 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(1.0), depthOrigin, vec2(0.0), pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp); float globeDepth3 = getGlobeDepth(pEC3); if (globeDepth3 != 0.0 && pEC3.z + depthsilon < globeDepth3) { // "Discard" this vertex, as three key points fail depth test. positionEC.xyz = vec3(0.0); } } } } #endif // Write out the eyespace depth before applying the screen space offset, but after potentially "discarding" the vertex // by setting its eyespace position to zero, via the three-point depth test above. v_compressed.x = positionEC.z; positionEC = addScreenSpaceOffset(positionEC, imageSize, scale, direction, origin, translate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp); gl_Position = czm_projection * positionEC; v_textureCoordinates = textureCoordinates; #ifdef LOG_DEPTH czm_vertexLogDepth(); #endif #ifdef DISABLE_DEPTH_DISTANCE if (disableDepthTestDistanceSq != 0.0) { // Don't try to "multiply both sides" by w. Greater/less-than comparisons won't work for negative values of w. float zclip = gl_Position.z / gl_Position.w; bool clipped = (zclip < -1.0 || zclip > 1.0); // disableDepthTestDistanceSq can be less than zero if it's explicitly set to -1 in JS (as a sentinel value equivalent to infinity) if (!clipped && (disableDepthTestDistanceSq < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistanceSq))) { // Position z on the near plane. gl_Position.z = -gl_Position.w; #ifdef LOG_DEPTH v_depthFromNearPlusOne = 1.0; #endif } } #endif #ifdef SDF vec4 outlineColor = czm_decodeRGB8(sdf.x); float outlineWidth; temp = sdf.y; temp = temp * SHIFT_RIGHT8; float temp3 = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; outlineWidth = (temp - floor(temp)) * SHIFT_LEFT8; outlineColor.a = floor(temp); outlineColor.a /= 255.0; v_outlineWidth = outlineWidth / 255.0; v_outlineColor = outlineColor; v_outlineColor.a *= translucency; #endif v_pickColor = pickColor; v_color = color; v_color.a *= translucency; v_splitDirectionAndEllipsoidDepthEC.x = splitDirection; } `;var qzn=x(T(),1),uqe={FONT_SIZE:48,PADDING:10,RADIUS:8,CUTOFF:.25},Fa=Object.freeze(uqe);var mqe=vo.SHOW_INDEX,EF=vo.POSITION_INDEX,Pge=vo.PIXEL_OFFSET_INDEX,Xge=vo.EYE_OFFSET_INDEX,hqe=vo.HORIZONTAL_ORIGIN_INDEX,fqe=vo.VERTICAL_ORIGIN_INDEX,pqe=vo.SCALE_INDEX,k_=vo.IMAGE_INDEX_INDEX,Nge=vo.COLOR_INDEX,bqe=vo.ROTATION_INDEX,gqe=vo.ALIGNED_AXIS_INDEX,Yge=vo.SCALE_BY_DISTANCE_INDEX,wge=vo.TRANSLUCENCY_BY_DISTANCE_INDEX,Mge=vo.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX,kge=vo.DISTANCE_DISPLAY_CONDITION,yqe=vo.DISABLE_DEPTH_DISTANCE,xqe=vo.TEXTURE_COORDINATE_BOUNDS,Uge=vo.SDF_INDEX,Dge=vo.SPLIT_DIRECTION_INDEX,f6=vo.NUMBER_OF_PROPERTIES,No={direction:0,positionHighAndScale:1,positionLowAndRotation:2,compressedAttribute0:3,compressedAttribute1:4,compressedAttribute2:5,eyeOffset:6,scaleByDistance:7,pixelOffsetScaleByDistance:8,compressedAttribute3:9,textureCoordinateBoundsOrLabelTranslate:10,a_batchId:11,sdf:12,splitDirection:13};function Xm(e){e=e??B.EMPTY_OBJECT,this._scene=e.scene,this._batchTable=e.batchTable;let t=e.textureAtlas;l(t)||(t=new F_),this._textureAtlas=t,this._textureAtlasGUID=t.guid,this._destroyTextureAtlas=!0,this._billboardTextureCache=new Map,this._sp=void 0,this._spTranslucent=void 0,this._rsOpaque=void 0,this._rsTranslucent=void 0,this._vaf=void 0,this._billboards=[],this._billboardsToUpdate=[],this._billboardsToUpdateIndex=0,this._billboardsRemoved=!1,this._createVertexArray=!1,this._shaderRotation=!1,this._compiledShaderRotation=!1,this._shaderAlignedAxis=!1,this._compiledShaderAlignedAxis=!1,this._shaderScaleByDistance=!1,this._compiledShaderScaleByDistance=!1,this._shaderTranslucencyByDistance=!1,this._compiledShaderTranslucencyByDistance=!1,this._shaderPixelOffsetScaleByDistance=!1,this._compiledShaderPixelOffsetScaleByDistance=!1,this._shaderDistanceDisplayCondition=!1,this._compiledShaderDistanceDisplayCondition=!1,this._shaderDisableDepthDistance=!1,this._compiledShaderDisableDepthDistance=!1,this._shaderClampToGround=!1,this._compiledShaderClampToGround=!1,this._propertiesChanged=new Uint32Array(f6),this._maxSize=0,this._maxEyeOffset=0,this._maxScale=1,this._maxPixelOffset=0,this._allHorizontalCenter=!0,this._allVerticalCenter=!0,this._allSizedInMeters=!0,this._baseVolume=new le,this._baseVolumeWC=new le,this._baseVolume2D=new le,this._boundingVolume=new le,this._boundingVolumeDirty=!1,this._colorCommands=[],this._allBillboardsReady=!1,this.show=e.show??!0,this.modelMatrix=I.clone(e.modelMatrix??I.IDENTITY),this._modelMatrix=I.clone(I.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowTextureAtlas=e.debugShowTextureAtlas??!1,this.blendOption=e.blendOption??Xi.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=se.SCENE3D,this._buffersUsage=[Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW],this._highlightColor=U.clone(U.WHITE),this._coarseDepthTestDistance=e.coarseDepthTestDistance??ie.default.minimumRadius/10,this._threePointDepthTestDistance=e.threePointDepthTestDistance??ie.default.minimumRadius/1e3,this._uniforms={u_atlas:()=>this.textureAtlas.texture,u_highlightColor:()=>this._highlightColor,u_coarseDepthTestDistance:()=>this._coarseDepthTestDistance,u_threePointDepthTestDistance:()=>this._threePointDepthTestDistance};let n=this._scene;l(n)&&l(n.terrainProviderChanged)&&(this._removeCallbackFunc=n.terrainProviderChanged.addEventListener(function(){let i=this._billboards,o=i.length;for(let r=0;r0)&&(e._shaderDisableDepthDistance=!0,c===Number.POSITIVE_INFINITY&&(c=-1));let u,m;l(i._labelDimensions)?(m=i._labelDimensions.x,u=i._labelDimensions.y):(m=i.width??0,u=i.height??0);let p=Math.floor(L.clamp(m,0,d6)),b=Math.floor(L.clamp(u,0,d6)),f=p*d6+b;o(i._index,r,s,c,f)}function qge(e,t,n,i){if(Wd(i.heightReference)){let a=e._scene,c=t.context,d=t.globeTranslucencyState.translucent,u=l(a.globe)&&a.globe.depthTestAgainstTerrain;e._shaderClampToGround=c.depthTexture&&!d&&u}let o=n[No.textureCoordinateBoundsOrLabelTranslate],r=0,s=0;l(i._labelTranslate)&&(r=i._labelTranslate.x,s=i._labelTranslate.y),o(i._index,r,s,0,0)}function Rqe(e,t,n,i){if(!l(e._batchTable))return;let o=n[No.a_batchId],r=i._batchIndex;o(i._index,r)}function $ge(e,t,n,i){if(!e._sdf)return;let o=n[No.sdf],r=i.outlineColor,s=i.outlineWidth,a=cn.encodeRGB8(r),c=s/Fa.RADIUS,d=U.floatToByte(r.alpha)*b6+U.floatToByte(c)*U_;o(i._index,a,d)}function eye(e,t,n,i){let o=n[No.splitDirection],r=0,s=i.splitDirection;l(s)&&(r=s),o(i._index,r)}function Gqe(e,t,n,i){Bge(e,t,n,i),Hge(e,t,n,i),Kge(e,t,n,i),m6(e,t,n,i),h6(e,t,n,i),Jge(e,t,n,i),jge(e,t,n,i),Qge(e,t,n,i),qge(e,t,n,i),Rqe(e,t,n,i),$ge(e,t,n,i),eye(e,t,n,i)}function u6(e,t,n,i,o,r){let s;i.mode===se.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let c=0;c0))throw new ge("Beginning in CesiumJS 1.140, billboards and labels require device support for WebGL 2, or WebGL 1 with ANGLE_instanced_arrays and MAX_VERTEX_TEXTURE_IMAGE_UNITS > 0. For more information or to share feedback, see: https://github.com/CesiumGS/cesium/issues/13053");let n=this._billboards,i=n.length,o=!0;for(let v=0;v{if(!this.isDestroyed())return r.update(e.context)}),!l(r.texture))return;Aqe(this,e),n=this._billboards,i=n.length;let s=this._billboardsToUpdate,a=this._billboardsToUpdateIndex,c=this._propertiesChanged,d=r.guid,u=this._createVertexArray||this._textureAtlasGUID!==d;this._textureAtlasGUID=d;let m,p=e.passes,b=p.pick;if(u||!b&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(let v=0;v0){this._vaf=_qe(t,i,this._buffersUsage,this._batchTable,this._sdf),m=this._vaf.writers;for(let v=0;v0){let v=Wqe;v.length=0,(c[EF]||c[bqe]||c[pqe])&&v.push(Bge),(c[k_]||c[Pge]||c[hqe]||c[fqe]||c[mqe])&&(v.push(Hge),v.push(h6)),(c[k_]||c[gqe]||c[wge])&&(v.push(Kge),v.push(m6)),(c[k_]||c[Nge])&&v.push(m6),(c[k_]||c[Xge])&&v.push(h6),c[Yge]&&v.push(Jge),c[Mge]&&v.push(jge),(c[kge]||c[yqe]||c[k_]||c[EF])&&v.push(Qge),(c[k_]||c[EF])&&v.push(qge),c[Uge]&&v.push($ge),c[Dge]&&v.push(eye);let F=v.length;if(m=this._vaf.writers,a/i>.1){for(let P=0;Pi*1.5&&(s.length=i),!l(this._vaf)||!l(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,le.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let f,y=I.IDENTITY;e.mode===se.SCENE3D?(y=this.modelMatrix,f=le.clone(this._baseVolumeWC,this._boundingVolume)):f=le.clone(this._baseVolume2D,this._boundingVolume),Eqe(this,e,f);let _=this._blendOption!==this.blendOption;if(this._blendOption=this.blendOption,_){this._blendOption===Xi.OPAQUE||this._blendOption===Xi.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Oe.fromCache({depthTest:{enabled:!0,func:ne.LESS},depthMask:!0}):this._rsOpaque=void 0;let v=this._blendOption===Xi.TRANSLUCENT;this._blendOption===Xi.TRANSLUCENT||this._blendOption===Xi.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Oe.fromCache({depthTest:{enabled:!0,func:v?ne.LEQUAL:ne.LESS},depthMask:v,blending:tn.ALPHA_BLEND}):this._rsTranslucent=void 0}this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let S,Z,V,C,G;if(_||this._shaderRotation!==this._compiledShaderRotation||this._shaderAlignedAxis!==this._compiledShaderAlignedAxis||this._shaderScaleByDistance!==this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance!==this._compiledShaderTranslucencyByDistance||this._shaderPixelOffsetScaleByDistance!==this._compiledShaderPixelOffsetScaleByDistance||this._shaderDistanceDisplayCondition!==this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance||this._shaderClampToGround!==this._compiledShaderClampToGround||this._sdf!==this._compiledSDF){S=AF,Z=GF,G=["INSTANCED"],l(this._batchTable)&&(G.push("VECTOR_TILE"),S=this._batchTable.getVertexShaderCallback(!1,"a_batchId",void 0)(S),Z=this._batchTable.getFragmentShaderCallback(!1,void 0)(Z)),V=new ze({defines:G,sources:[S]}),this._shaderRotation&&V.defines.push("ROTATION"),this._shaderAlignedAxis&&V.defines.push("ALIGNED_AXIS"),this._shaderScaleByDistance&&V.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&V.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderPixelOffsetScaleByDistance&&V.defines.push("EYE_DISTANCE_PIXEL_OFFSET"),this._shaderDistanceDisplayCondition&&V.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&V.defines.push("DISABLE_DEPTH_DISTANCE"),this._shaderClampToGround&&V.defines.push("VS_THREE_POINT_DEPTH_CHECK");let v=1-Fa.CUTOFF;this._sdf&&V.defines.push("SDF");let F=l(this._batchTable)?"VECTOR_TILE":"";this._blendOption===Xi.OPAQUE_AND_TRANSLUCENT&&(C=new ze({defines:["OPAQUE",F],sources:[Z]}),this._shaderClampToGround&&C.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(C.defines.push("SDF"),C.defines.push(`SDF_EDGE ${v}`)),this._sp=en.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:V,fragmentShaderSource:C,attributeLocations:No}),C=new ze({defines:["TRANSLUCENT",F],sources:[Z]}),this._shaderClampToGround&&C.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(C.defines.push("SDF"),C.defines.push(`SDF_EDGE ${v}`)),this._spTranslucent=en.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:V,fragmentShaderSource:C,attributeLocations:No})),this._blendOption===Xi.OPAQUE&&(C=new ze({defines:[F],sources:[Z]}),this._shaderClampToGround&&C.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(C.defines.push("SDF"),C.defines.push(`SDF_EDGE ${v}`)),this._sp=en.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:V,fragmentShaderSource:C,attributeLocations:No})),this._blendOption===Xi.TRANSLUCENT&&(C=new ze({defines:[F],sources:[Z]}),this._shaderClampToGround&&C.defines.push("VS_THREE_POINT_DEPTH_CHECK"),this._sdf&&(C.defines.push("SDF"),C.defines.push(`SDF_EDGE ${v}`)),this._spTranslucent=en.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:V,fragmentShaderSource:C,attributeLocations:No})),this._compiledShaderRotation=this._shaderRotation,this._compiledShaderAlignedAxis=this._shaderAlignedAxis,this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderPixelOffsetScaleByDistance=this._shaderPixelOffsetScaleByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance,this._compiledShaderClampToGround=this._shaderClampToGround,this._compiledSDF=this._sdf}let E=e.commandList;if(p.render||p.pick){let v=this._colorCommands,F=this._blendOption===Xi.OPAQUE,P=this._blendOption===Xi.OPAQUE_AND_TRANSLUCENT,N=this._vaf.va,g=N.length,R=this._uniforms,A;l(this._batchTable)?(R=this._batchTable.getUniformMapCallback()(R),A=this._batchTable.getPickId()):A="v_pickColor",v.length=g;let W=P?g*2:g;for(let X=0;X]/,o=[],r="",s=Js.LTR,a="",c=e.length;for(let d=0;d";case">":return"<"}}var Yqe="\u05D0-\u05EA",wqe="\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF",oye=new RegExp(`[${Yqe}${wqe}]`);function Mqe(e){let t=e.split(` `),n="";for(let i=0;id+1?s[d+1].Type===Js.RTL?(c=m+c,a=0):(c=vF(c,a,u.Word),a+=u.Word.length):c=vF(c,0,m)):u.Type===Js.RTL?c=vF(c,a,m):u.Type===Js.LTR?(c+=u.Word,a=c.length):(u.Type===Js.WEAK||u.Type===Js.BRACKETS)&&(d>0&&s[d-1].Type===Js.RTL?s.length>d+1?s[d+1].Type===Js.RTL?c=vF(c,a,m):(c+=u.Word,a=c.length):c+=u.Word:(c+=u.Word,a=c.length))}n+=c,i0&&E.height>0&&!Jqe.test(b)){let v=(0,hye.default)(E,{cutoff:Fa.CUTOFF,radius:Fa.RADIUS}),F=E.getContext("2d"),P=E.width,N=E.height,g=F.getImageData(0,0,P,N);for(let R=0;R0?V=C.pop():(V=d.add({collection:e}),V._labelDimensions=new M,V._labelTranslate=new M,V._positionFromParent=!0),Z.billboard=V),V.setImageTexture(S),V.show=t._show,V.position=t._position,V.eyeOffset=t._eyeOffset,V.pixelOffset=t._pixelOffset,V.horizontalOrigin=Di.LEFT,V.verticalOrigin=t._verticalOrigin,V.heightReference=t._heightReference,l(t._clampedPosition)&&(V._clampedPosition=t._clampedPosition),V.scale=t.totalScale,V.pickPrimitive=t,V.id=t._id,V.translucencyByDistance=t._translucencyByDistance,V.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,V.scaleByDistance=t._scaleByDistance,V.distanceDisplayCondition=t._distanceDisplayCondition,V.disableDepthTestDistance=t._disableDepthTestDistance,V._batchIndex=t._batchIndex,V.outlineColor=t.outlineColor,t.style===fr.FILL_AND_OUTLINE?(V.color=t._fillColor,V.outlineWidth=t.outlineWidth):t.style===fr.FILL?(V.color=t._fillColor,V.outlineWidth=0):t.style===fr.OUTLINE&&(V.color=U.TRANSPARENT,V.outlineWidth=t.outlineWidth)}t._repositionAllGlyphs=!0}function Qqe(e,t,n){if(!l(n))return;let i=t.show&&t._showBackground&&t._renderedText.split(` `).join("").length>0;if(t.show&&!i){e.remove(n),t._backgroundBillboard=void 0;return}n.color=t._backgroundColor,n.show=t._show,n.position=t._position,n.eyeOffset=t._eyeOffset,n.pixelOffset=t._pixelOffset,n.horizontalOrigin=Di.LEFT,n.verticalOrigin=t._verticalOrigin,n.heightReference=t._heightReference,l(t._clampedPosition)&&(n._clampedPosition=t._clampedPosition),n.scale=t.totalScale,n.pickPrimitive=t,n.id=t._id,n.translucencyByDistance=t._translucencyByDistance,n.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,n.scaleByDistance=t._scaleByDistance,n.distanceDisplayCondition=t._distanceDisplayCondition,n.disableDepthTestDistance=t._disableDepthTestDistance,n.clusterShow=t.clusterShow}function mye(e,t,n){return t===Di.CENTER?-e/2:t===Di.RIGHT?-(e+n.x):n.x}var Nr=new M,qqe=new M;function $qe(e){let t=e._glyphs,n=e._renderedText,i=0,o=0,r=[],s=Number.NEGATIVE_INFINITY,a=0,c=1,d=t.length,u=e._backgroundBillboard,m=M.clone(l(u)?e._backgroundPadding:M.ZERO,qqe);m.x/=e._relativeSize,m.y/=e._relativeSize;for(let P=0;P0&&(f===Di.CENTER?Z=-o/2-m.x:f===Di.RIGHT?Z=-(o+m.x*2):Z=0,Nr.x=Z*b,y===zn.TOP?Nr.y=p-a-s:y===zn.CENTER?Nr.y=(p-a)/2-s:y===zn.BASELINE?Nr.y=-m.y-s:Nr.y=0,Nr.y=Nr.y*b,u.width=G,u.height=E,u._setTranslate(Nr),u._labelTranslate=M.clone(Nr,u._labelTranslate))}function pye(e,t){let n=t._glyphs;for(let i=0,o=n.length;i0?Xi.TRANSLUCENT:this.blendOption;t.blendOption=o,n.blendOption=o,t._highlightColor=this._highlightColor,n._highlightColor=this._highlightColor,this._labelsToUpdate.length=0,n.update(e),t.update(e)};Np.prototype.isDestroyed=function(){return!1};Np.prototype.destroy=function(){return this.removeAll(),this._glyphBillboardCollection=this._glyphBillboardCollection.destroy(),this._backgroundBillboardCollection=this._backgroundBillboardCollection.destroy(),me(this)};var Yp=Np;var MKn=x(T(),1);function $r(e,t){e=e??B.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.scaleByDistance,o=e.distanceDisplayCondition;l(n)&&(n=Ht.clone(n)),l(i)&&(i=Ht.clone(i)),l(o)&&(o=Ot.clone(o)),this._show=e.show??!0,this._position=h.clone(e.position??h.ZERO),this._actualPosition=h.clone(this._position),this._color=U.clone(e.color??U.WHITE),this._outlineColor=U.clone(e.outlineColor??U.TRANSPARENT),this._outlineWidth=e.outlineWidth??0,this._pixelSize=e.pixelSize??10,this._scaleByDistance=i,this._translucencyByDistance=n,this._distanceDisplayCondition=o,this._disableDepthTestDistance=e.disableDepthTestDistance??0,this._id=e.id,this._collection=e.collection??t,this._clusterShow=!0,this._pickId=void 0,this._pointPrimitiveCollection=t,this._dirty=!1,this._index=-1,this._splitDirection=e.splitDirection??Xr.NONE}var bye=$r.SHOW_INDEX=0,xye=$r.POSITION_INDEX=1,e$e=$r.COLOR_INDEX=2,t$e=$r.OUTLINE_COLOR_INDEX=3,n$e=$r.OUTLINE_WIDTH_INDEX=4,i$e=$r.PIXEL_SIZE_INDEX=5,o$e=$r.SCALE_BY_DISTANCE_INDEX=6,r$e=$r.TRANSLUCENCY_BY_DISTANCE_INDEX=7,s$e=$r.DISTANCE_DISPLAY_CONDITION_INDEX=8,a$e=$r.DISABLE_DEPTH_DISTANCE_INDEX=9,c$e=$r.SPLIT_DIRECTION_INDEX=10;$r.NUMBER_OF_PROPERTIES=11;function Tu(e,t){let n=e._pointPrimitiveCollection;l(n)&&(n._updatePointPrimitive(e,t),e._dirty=!0)}Object.defineProperties($r.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,Tu(this,bye))}},position:{get:function(){return this._position},set:function(e){let t=this._position;h.equals(t,e)||(h.clone(e,t),h.clone(e,this._actualPosition),Tu(this,xye))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;Ht.equals(t,e)||(this._scaleByDistance=Ht.clone(e,t),Tu(this,o$e))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;Ht.equals(t,e)||(this._translucencyByDistance=Ht.clone(e,t),Tu(this,r$e))}},pixelSize:{get:function(){return this._pixelSize},set:function(e){this._pixelSize!==e&&(this._pixelSize=e,Tu(this,i$e))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),Tu(this,e$e))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;U.equals(t,e)||(U.clone(e,t),Tu(this,t$e))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,Tu(this,n$e))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){Ot.equals(this._distanceDisplayCondition,e)||(this._distanceDisplayCondition=Ot.clone(e,this._distanceDisplayCondition),Tu(this,s$e))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,Tu(this,a$e))}},id:{get:function(){return this._id},set:function(e){this._id=e,l(this._pickId)&&(this._pickId.object.id=e)}},pickId:{get:function(){return this._pickId}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,Tu(this,bye))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,Tu(this,c$e))}}});$r.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._collection,id:this._id})),this._pickId};$r.prototype._getActualPosition=function(){return this._actualPosition};$r.prototype._setActualPosition=function(e){h.clone(e,this._actualPosition),Tu(this,xye)};var gye=new ce;$r._computeActualPosition=function(e,t,n){return t.mode===se.SCENE3D?e:(I.multiplyByPoint(n,e,gye),co.computeActualEllipsoidPosition(t,gye))};var yye=new ce;$r._computeScreenSpacePosition=function(e,t,n,i){let o=I.multiplyByVector(e,ce.fromElements(t.x,t.y,t.z,1,yye),yye);return co.worldToWindowCoordinates(n,o,i)};$r.prototype.computeScreenSpacePosition=function(e,t){let n=this._pointPrimitiveCollection;l(t)||(t=new M);let i=n.modelMatrix,o=$r._computeScreenSpacePosition(i,this._actualPosition,e,t);if(l(o))return o.y=e.canvas.clientHeight-o.y,o};$r.getScreenSpaceBoundingBox=function(e,t,n){let i=e.pixelSize,o=i*.5,r=t.x-o,s=t.y-o,a=i,c=i;return l(n)||(n=new $e),n.x=r,n.y=s,n.width=a,n.height=c,n};$r.prototype.equals=function(e){return this===e||l(e)&&this._id===e._id&&h.equals(this._position,e._position)&&U.equals(this._color,e._color)&&this._pixelSize===e._pixelSize&&this._outlineWidth===e._outlineWidth&&this._show===e._show&&U.equals(this._outlineColor,e._outlineColor)&&Ht.equals(this._scaleByDistance,e._scaleByDistance)&&Ht.equals(this._translucencyByDistance,e._translucencyByDistance)&&Ot.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};$r.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._pointPrimitiveCollection=void 0};var ba=$r;var yJn=x(T(),1);var UKn=x(T(),1),nx=`in vec4 v_color; in vec4 v_outlineColor; in float v_innerPercent; in float v_pixelDistance; in vec4 v_pickColor; in float v_splitDirection; void main() { if (v_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard; if (v_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard; // The distance in UV space from this fragment to the center of the point, at most 0.5. float distanceToCenter = length(gl_PointCoord - vec2(0.5)); // The max distance stops one pixel shy of the edge to leave space for anti-aliasing. float maxDistance = max(0.0, 0.5 - v_pixelDistance); float wholeAlpha = 1.0 - smoothstep(maxDistance, 0.5, distanceToCenter); float innerAlpha = 1.0 - smoothstep(maxDistance * v_innerPercent, 0.5 * v_innerPercent, distanceToCenter); vec4 color = mix(v_outlineColor, v_color, innerAlpha); color.a *= wholeAlpha; // Fully transparent parts of the billboard are not pickable. #if !defined(OPAQUE) && !defined(TRANSLUCENT) if (color.a < 0.005) // matches 0/255 and 1/255 { discard; } #else // The billboard is rendered twice. The opaque pass discards translucent fragments // and the translucent pass discards opaque fragments. #ifdef OPAQUE if (color.a < 0.995) // matches < 254/255 { discard; } #else if (color.a >= 0.995) // matches 254/255 and 255/255 { discard; } #endif #endif out_FragColor = czm_gammaCorrect(color); czm_writeLogDepth(); } `;var OKn=x(T(),1),IF=`uniform float u_maxTotalPointSize; in vec4 positionHighAndSize; in vec4 positionLowAndOutline; in vec4 compressedAttribute0; // color, outlineColor, pick color in vec4 compressedAttribute1; // show, translucency by distance, some free space in vec4 scaleByDistance; // near, nearScale, far, farScale in vec4 distanceDisplayConditionAndDisableDepthAndSplitDirection; // near, far, disableDepthTestDistance, splitDirection out vec4 v_color; out vec4 v_outlineColor; out float v_innerPercent; out float v_pixelDistance; out vec4 v_pickColor; out float v_splitDirection; const float SHIFT_LEFT8 = 256.0; const float SHIFT_RIGHT8 = 1.0 / 256.0; void main() { // Modifying this shader may also require modifications to PointPrimitive._computeScreenSpacePosition // unpack attributes vec3 positionHigh = positionHighAndSize.xyz; vec3 positionLow = positionLowAndOutline.xyz; float outlineWidthBothSides = 2.0 * positionLowAndOutline.w; float totalSize = positionHighAndSize.w + outlineWidthBothSides; float outlinePercent = outlineWidthBothSides / totalSize; // Scale in response to browser-zoom. totalSize *= czm_pixelRatio; float temp = compressedAttribute1.x * SHIFT_RIGHT8; float show = floor(temp); #ifdef EYE_DISTANCE_TRANSLUCENCY vec4 translucencyByDistance; translucencyByDistance.x = compressedAttribute1.z; translucencyByDistance.z = compressedAttribute1.w; translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0; temp = compressedAttribute1.y * SHIFT_RIGHT8; translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0; #endif /////////////////////////////////////////////////////////////////////////// vec4 color = czm_decodeRGB8(compressedAttribute0.x); vec4 outlineColor = czm_decodeRGB8(compressedAttribute0.y); vec4 pickColor = czm_decodeRGB8(compressedAttribute0.z); vec4 alphaPacked = czm_decodeRGB8(compressedAttribute0.w); color.a = alphaPacked.x; outlineColor.a = alphaPacked.y; pickColor.a = alphaPacked.z; /////////////////////////////////////////////////////////////////////////// vec4 p = czm_translateRelativeToEye(positionHigh, positionLow); vec4 positionEC = czm_modelViewRelativeToEye * p; /////////////////////////////////////////////////////////////////////////// #if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE) float lengthSq; if (czm_sceneMode == czm_sceneMode2D) { // 2D camera distance is a special case // treat all billboards as flattened to the z=0.0 plane lengthSq = czm_eyeHeight2D.y; } else { lengthSq = dot(positionEC.xyz, positionEC.xyz); } #endif #ifdef EYE_DISTANCE_SCALING totalSize *= czm_nearFarScalar(scaleByDistance, lengthSq); #endif if (totalSize > 0.0) { // Add padding for anti-aliasing on both sides. totalSize += 3.0; } // Clamp to max point size. totalSize = min(totalSize, u_maxTotalPointSize); // If size is too small, push vertex behind near plane for clipping. // Note that context.minimumAliasedPointSize "will be at most 1.0". if (totalSize < 1.0) { positionEC.xyz = vec3(0.0); totalSize = 1.0; } float translucency = 1.0; #ifdef EYE_DISTANCE_TRANSLUCENCY translucency = czm_nearFarScalar(translucencyByDistance, lengthSq); // push vertex behind near plane for clipping if (translucency < 0.004) { positionEC.xyz = vec3(0.0); } #endif #ifdef DISTANCE_DISPLAY_CONDITION float nearSq = distanceDisplayConditionAndDisableDepthAndSplitDirection.x; float farSq = distanceDisplayConditionAndDisableDepthAndSplitDirection.y; if (lengthSq < nearSq || lengthSq > farSq) { // push vertex behind camera to force it to be clipped positionEC.xyz = vec3(0.0, 0.0, 1.0); } #endif gl_Position = czm_projection * positionEC; czm_vertexLogDepth(); #ifdef DISABLE_DEPTH_DISTANCE float disableDepthTestDistance = distanceDisplayConditionAndDisableDepthAndSplitDirection.z; if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0) { disableDepthTestDistance = czm_minimumDisableDepthTestDistance; } if (disableDepthTestDistance != 0.0) { // Don't try to "multiply both sides" by w. Greater/less-than comparisons won't work for negative values of w. float zclip = gl_Position.z / gl_Position.w; bool clipped = (zclip < -1.0 || zclip > 1.0); if (!clipped && (disableDepthTestDistance < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistance))) { // Position z on the near plane. gl_Position.z = -gl_Position.w; #ifdef LOG_DEPTH czm_vertexLogDepth(vec4(czm_currentFrustum.x)); #endif } } #endif v_color = color; v_color.a *= translucency * show; v_outlineColor = outlineColor; v_outlineColor.a *= translucency * show; v_innerPercent = 1.0 - outlinePercent; v_pixelDistance = 2.0 / totalSize; gl_PointSize = totalSize * show; gl_Position *= show; v_pickColor = pickColor; v_splitDirection = distanceDisplayConditionAndDisableDepthAndSplitDirection.w; } `;var l$e=ba.SHOW_INDEX,_6=ba.POSITION_INDEX,Tye=ba.COLOR_INDEX,d$e=ba.OUTLINE_COLOR_INDEX,u$e=ba.OUTLINE_WIDTH_INDEX,m$e=ba.PIXEL_SIZE_INDEX,_ye=ba.SCALE_BY_DISTANCE_INDEX,Sye=ba.TRANSLUCENCY_BY_DISTANCE_INDEX,Zye=ba.DISTANCE_DISPLAY_CONDITION_INDEX,h$e=ba.DISABLE_DEPTH_DISTANCE_INDEX,f$e=ba.SPLIT_DIRECTION_INDEX,S6=ba.NUMBER_OF_PROPERTIES,rl={positionHighAndSize:0,positionLowAndOutline:1,compressedAttribute0:2,compressedAttribute1:3,scaleByDistance:4,distanceDisplayConditionAndDisableDepthAndSplitDirection:5};function Nm(e){e=e??B.EMPTY_OBJECT,this._sp=void 0,this._spTranslucent=void 0,this._rsOpaque=void 0,this._rsTranslucent=void 0,this._vaf=void 0,this._pointPrimitives=[],this._pointPrimitivesToUpdate=[],this._pointPrimitivesToUpdateIndex=0,this._pointPrimitivesRemoved=!1,this._createVertexArray=!1,this._shaderScaleByDistance=!1,this._compiledShaderScaleByDistance=!1,this._shaderTranslucencyByDistance=!1,this._compiledShaderTranslucencyByDistance=!1,this._shaderDistanceDisplayCondition=!1,this._compiledShaderDistanceDisplayCondition=!1,this._shaderDisableDepthDistance=!1,this._compiledShaderDisableDepthDistance=!1,this._propertiesChanged=new Uint32Array(S6),this._maxPixelSize=1,this._baseVolume=new le,this._baseVolumeWC=new le,this._baseVolume2D=new le,this._boundingVolume=new le,this._boundingVolumeDirty=!1,this._colorCommands=[],this.show=e.show??!0,this.modelMatrix=I.clone(e.modelMatrix??I.IDENTITY),this._modelMatrix=I.clone(I.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.blendOption=e.blendOption??Xi.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=se.SCENE3D,this._maxTotalPointSize=1,this._buffersUsage=[Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW,Ie.STATIC_DRAW];let t=this;this._uniforms={u_maxTotalPointSize:function(){return t._maxTotalPointSize}}}Object.defineProperties(Nm.prototype,{length:{get:function(){return Z6(this),this._pointPrimitives.length}}});function Vye(e){let t=e.length;for(let n=0;n0&&(e._shaderDisableDepthDistance=!0,d===Number.POSITIVE_INFINITY&&(d=-1));let u=0,m=i.splitDirection;l(m)&&(u=m),r(o,s,a,d,u)}function g$e(e,t,n,i){Cye(e,t,n,i),Rye(e,t,n,i),Gye(e,t,n,i),Aye(e,t,n,i),Eye(e,t,n,i)}function T6(e,t,n,i,o,r){let s;i.mode===se.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let c=0;c0){this._vaf=p$e(c,n,this._buffersUsage),a=this._vaf.writers;for(let G=0;G0){let G=T$e;G.length=0,(r[_6]||r[u$e]||r[m$e])&&G.push(Cye),(r[Tye]||r[d$e])&&G.push(Rye),(r[l$e]||r[Sye])&&G.push(Gye),r[_ye]&&G.push(Aye),(r[Zye]||r[h$e]||r[f$e])&&G.push(Eye);let E=G.length;if(a=this._vaf.writers,o/n>.1){for(let v=0;vn*1.5&&(i.length=n),!l(this._vaf)||!l(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,le.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let m,p=I.IDENTITY;e.mode===se.SCENE3D?(p=this.modelMatrix,m=le.clone(this._baseVolumeWC,this._boundingVolume)):m=le.clone(this._baseVolume2D,this._boundingVolume),x$e(this,e,m);let b=this._blendOption!==this.blendOption;this._blendOption=this.blendOption,b&&(this._blendOption===Xi.OPAQUE||this._blendOption===Xi.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Oe.fromCache({depthTest:{enabled:!0,func:ne.LEQUAL},depthMask:!0}):this._rsOpaque=void 0,this._blendOption===Xi.TRANSLUCENT||this._blendOption===Xi.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Oe.fromCache({depthTest:{enabled:!0,func:ne.LEQUAL},depthMask:!1,blending:tn.ALPHA_BLEND}):this._rsTranslucent=void 0),this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let f,y;(b||this._shaderScaleByDistance&&!this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance&&!this._compiledShaderTranslucencyByDistance||this._shaderDistanceDisplayCondition&&!this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance)&&(f=new ze({sources:[IF]}),this._shaderScaleByDistance&&f.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&f.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderDistanceDisplayCondition&&f.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&f.defines.push("DISABLE_DEPTH_DISTANCE"),this._blendOption===Xi.OPAQUE_AND_TRANSLUCENT&&(y=new ze({defines:["OPAQUE"],sources:[nx]}),this._sp=en.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:rl}),y=new ze({defines:["TRANSLUCENT"],sources:[nx]}),this._spTranslucent=en.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:rl})),this._blendOption===Xi.OPAQUE&&(y=new ze({sources:[nx]}),this._sp=en.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:rl})),this._blendOption===Xi.TRANSLUCENT&&(y=new ze({sources:[nx]}),this._spTranslucent=en.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:rl})),this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance);let _,S,Z,V,C=e.commandList;if(d.render||u){let G=this._colorCommands,E=this._blendOption===Xi.OPAQUE,v=this._blendOption===Xi.OPAQUE_AND_TRANSLUCENT;_=this._vaf.va,S=_.length,G.length=S;let F=v?S*2:S;for(V=0;V>4;if(o!==V6)throw new Error(`Got v${o} data when expected v${V6}.`);let r=Lye[i&15];if(!r)throw new Error("Unrecognized array type.");let[s]=new Uint16Array(t,2,1),[a]=new Uint32Array(t,4,1);return new e(a,s,r,void 0,t)}constructor(t,n=64,i=Float64Array,o=ArrayBuffer,r){if(isNaN(t)||t<0)throw new Error(`Unexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+n,2),65535),this.ArrayType=i,this.IndexArrayType=t<65536?Uint16Array:Uint32Array;let s=Lye.indexOf(this.ArrayType),a=t*2*this.ArrayType.BYTES_PER_ELEMENT,c=t*this.IndexArrayType.BYTES_PER_ELEMENT,d=(8-c%8)%8;if(s<0)throw new Error(`Unexpected typed array class: ${i}.`);if(r)this.data=r,this.ids=new this.IndexArrayType(r,PF,t),this.coords=new i(r,PF+c+d,t*2),this._pos=t*2,this._finished=!0;else{let u=this.data=new o(PF+a+c+d);this.ids=new this.IndexArrayType(u,PF,t),this.coords=new i(u,PF+c+d,t*2),this._pos=0,this._finished=!1,new Uint8Array(u,0,2).set([219,(V6<<4)+s]),new Uint16Array(u,2,1)[0]=n,new Uint32Array(u,4,1)[0]=t}}add(t,n){let i=this._pos>>1;return this.ids[i]=i,this.coords[this._pos++]=t,this.coords[this._pos++]=n,i}finish(){let t=this._pos>>1;if(t!==this.numItems)throw new Error(`Added ${t} items when expected ${this.numItems}.`);return R6(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(t,n,i,o){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");let{ids:r,coords:s,nodeSize:a}=this;es[0]=0,es[1]=r.length-1,es[2]=0;let c=3,d=[];for(;c>0;){let u=es[--c],m=es[--c],p=es[--c];if(m-p<=a){for(let _=p;_<=m;_++){let S=s[2*_],Z=s[2*_+1];S>=t&&S<=i&&Z>=n&&Z<=o&&d.push(r[_])}continue}let b=p+m>>1,f=s[2*b],y=s[2*b+1];f>=t&&f<=i&&y>=n&&y<=o&&d.push(r[b]),(u===0?t<=f:n<=y)&&(es[c++]=p,es[c++]=b-1,es[c++]=1-u),(u===0?i>=f:o>=y)&&(es[c++]=b+1,es[c++]=m,es[c++]=1-u)}return d}within(t,n,i){let o=[];return this.withinInto(t,n,i,o),o}withinInto(t,n,i,o){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");let{ids:r,coords:s,nodeSize:a}=this;es[0]=0,es[1]=r.length-1,es[2]=0;let c=3,d=0,u=i*i;for(;c>0;){let m=es[--c],p=es[--c],b=es[--c];if(p-b<=a){for(let S=b;S<=p;S++)Wye(s[2*S],s[2*S+1],t,n)<=u&&(o[d++]=r[S]);continue}let f=b+p>>1,y=s[2*f],_=s[2*f+1];Wye(y,_,t,n)<=u&&(o[d++]=r[f]),(m===0?t-i<=y:n-i<=_)&&(es[c++]=b,es[c++]=f-1,es[c++]=1-m),(m===0?t+i>=y:n+i>=_)&&(es[c++]=f+1,es[c++]=p,es[c++]=1-m)}return d}};function R6(e,t,n,i,o,r){if(o-i<=n)return;let s=i+o>>1;vye(e,t,s,i,o,r),R6(e,t,n,i,s-1,1-r),R6(e,t,n,s+1,o,1-r)}function vye(e,t,n,i,o,r){for(;o>i;){if(o-i>600){let d=o-i+1,u=n-i+1,m=Math.log(d),p=.5*Math.exp(2*m/3),b=.5*Math.sqrt(m*p*(d-p)/d)*(u-d/2<0?-1:1),f=Math.max(i,Math.floor(n-u*p/d+b)),y=Math.min(o,Math.floor(n+(d-u)*p/d+b));vye(e,t,n,f,y,r)}let s=t[2*n+r],a=i,c=o;for(XF(e,t,i,n),t[2*o+r]>s&&XF(e,t,i,o);as;)c--}t[2*i+r]===s?XF(e,t,i,c):(c++,XF(e,t,c,o)),c<=n&&(i=c+1),n<=c&&(o=c-1)}}function XF(e,t,n,i){C6(e,n,i),C6(t,2*n,2*i),C6(t,2*n+1,2*i+1)}function C6(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}function Wye(e,t,n,i){let o=e-n,r=t-i;return o*o+r*r}function jh(e){e=e??B.EMPTY_OBJECT,this._enabled=e.enabled??!1,this._pixelRange=e.pixelRange??80,this._minimumClusterSize=e.minimumClusterSize??2,this._clusterBillboards=e.clusterBillboards??!0,this._clusterLabels=e.clusterLabels??!0,this._clusterPoints=e.clusterPoints??!0,this._labelCollection=void 0,this._billboardCollection=void 0,this._pointCollection=void 0,this._clusterBillboardCollection=void 0,this._clusterLabelCollection=void 0,this._clusterPointCollection=void 0,this._collectionIndicesByEntity={},this._unusedLabelIndices=[],this._unusedBillboardIndices=[],this._unusedPointIndices=[],this._previousClusters=[],this._previousHeight=void 0,this._enabledDirty=!1,this._clusterDirty=!1,this._cluster=void 0,this._removeEventListener=void 0,this._clusterEvent=new Se,this.show=e.show??!0}function Fye(e,t){e.x-=t,e.y-=t,e.width+=t*2,e.height+=t*2}var _$e=new $e;function Iye(e,t,n,i,o){if(l(e._labelCollection)&&i._clusterLabels?o=tx.getScreenSpaceBoundingBox(e,t,o):l(e._billboardCollection)&&i._clusterBillboards?o=vo.getScreenSpaceBoundingBox(e,t,o):l(e._pointPrimitiveCollection)&&i._clusterPoints&&(o=ba.getScreenSpaceBoundingBox(e,t,o)),Fye(o,n),i._clusterLabels&&!l(e._labelCollection)&&l(e.id)&&Xye(i,e.id.id)&&l(e.id._label)){let r=i._collectionIndicesByEntity[e.id.id].labelIndex,s=i._labelCollection.get(r),a=tx.getScreenSpaceBoundingBox(s,t,_$e);Fye(a,n),o=$e.union(o,a,o)}return o}function S$e(e,t){if(e.clusterShow=!0,!l(e._labelCollection)&&l(e.id)&&Xye(t,e.id.id)&&l(e.id._label)){let n=t._collectionIndicesByEntity[e.id.id].labelIndex,i=t._labelCollection.get(n);i.clusterShow=!0}}function Pye(e,t,n,i){let o={billboard:i._clusterBillboardCollection.add(),label:i._clusterLabelCollection.add(),point:i._clusterPointCollection.add()};o.billboard.show=!1,o.point.show=!1,o.label.show=!0,o.label.text=t.toLocaleString(),o.label.id=n,o.billboard.position=o.label.position=o.point.position=e,i._clusterEvent.raiseEvent(n,o)}function Xye(e,t){return l(e)&&l(e._collectionIndicesByEntity[t])&&l(e._collectionIndicesByEntity[t].labelIndex)}function G6(e,t,n,i,o){if(!l(e))return;let r=e.length;for(let s=0;s0){let X=new NF(Z.length,64,Float64Array);for(let Y=0;Y=u)for(Pye(Y.position,R,g,e),p.push(Y),C=0;C=u){let w=h.multiplyByScalar(O,1/R,O);for(Pye(w,R,g,e),p.push({position:w,width:k.width,height:k.height,minimumWidth:E.width,minimumHeight:E.height}),C=0;C0?(a=d.shift(),c=r.get(a)):(c=r.add(),a=r.length-1),s[i]=a;let u=this;return Promise.resolve().then(function(){u._clusterDirty=!0}),c}}function L6(e,t){let n=e._collectionIndicesByEntity[t];!l(n.billboardIndex)&&!l(n.labelIndex)&&!l(n.pointIndex)&&delete e._collectionIndicesByEntity[t]}jh.prototype.getLabel=E6("_labelCollection",Yp,"_unusedLabelIndices","labelIndex");jh.prototype.removeLabel=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!l(this._labelCollection)||!l(t)||!l(t.labelIndex))return;let n=t.labelIndex;t.labelIndex=void 0,L6(this,e.id);let i=this._labelCollection.get(n);i.show=!1,i.text="",i.id=void 0,this._unusedLabelIndices.push(n),this._clusterDirty=!0};jh.prototype.getBillboard=E6("_billboardCollection",xu,"_unusedBillboardIndices","billboardIndex");jh.prototype.removeBillboard=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!l(this._billboardCollection)||!l(t)||!l(t.billboardIndex))return;let n=t.billboardIndex;t.billboardIndex=void 0,L6(this,e.id);let i=this._billboardCollection.get(n);i.id=void 0,i.show=!1,i.image=void 0,this._unusedBillboardIndices.push(n),this._clusterDirty=!0};jh.prototype.getPoint=E6("_pointCollection",j1,"_unusedPointIndices","pointIndex");jh.prototype.removePoint=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!l(this._pointCollection)||!l(t)||!l(t.pointIndex))return;let n=t.pointIndex;t.pointIndex=void 0,L6(this,e.id);let i=this._pointCollection.get(n);i.show=!1,i.id=void 0,this._unusedPointIndices.push(n),this._clusterDirty=!0};function A6(e){if(!l(e))return;let t=e.length;for(let n=0;n0&&!n.ready&&(t=e.commandList,e.commandList=[],n.update(e),e.commandList=t);let i=this._billboardCollection;l(i)&&i.length>0&&!i.ready&&(t=e.commandList,e.commandList=[],i.update(e),e.commandList=t),this._enabledDirty&&(this._enabledDirty=!1,G$e(this),this._clusterDirty=!0),this._clusterDirty&&(this._cluster(),this._clusterDirty=l(n)&&!n.ready||l(i)&&!i.ready),l(this._clusterLabelCollection)&&this._clusterLabelCollection.update(e),l(this._clusterBillboardCollection)&&this._clusterBillboardCollection.update(e),l(this._clusterPointCollection)&&this._clusterPointCollection.update(e),l(n)&&n.update(e),l(i)&&i.update(e),l(this._pointCollection)&&this._pointCollection.update(e)};jh.prototype.destroy=function(){l(this._removeEventListener)&&(this._removeEventListener(),this._removeEventListener=void 0),this._labelCollection=this._labelCollection&&this._labelCollection.destroy(),this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),this._pointCollection=this._pointCollection&&this._pointCollection.destroy(),this._clusterLabelCollection=this._clusterLabelCollection&&this._clusterLabelCollection.destroy(),this._clusterBillboardCollection=this._clusterBillboardCollection&&this._clusterBillboardCollection.destroy(),this._clusterPointCollection=this._clusterPointCollection&&this._clusterPointCollection.destroy(),this._labelCollection=void 0,this._billboardCollection=void 0,this._pointCollection=void 0,this._clusterBillboardCollection=void 0,this._clusterLabelCollection=void 0,this._clusterPointCollection=void 0,this._collectionIndicesByEntity=void 0,this._unusedLabelIndices=[],this._unusedBillboardIndices=[],this._unusedPointIndices=[],this._previousClusters=[],this._previousHeight=void 0,this._enabledDirty=!1,this._pixelRangeDirty=!1,this._minimumClusterSizeDirty=!1};var _u=jh;var r7n=x(T(),1);var K8n=x(T(),1);var qJn=x(T(),1);var zJn=x(T(),1);var UJn=x(T(),1);function ix(e){this._value=void 0,this._hasClone=!1,this._hasEquals=!1,this._definitionChanged=new Se,this.setValue(e)}Object.defineProperties(ix.prototype,{isConstant:{value:!0},definitionChanged:{get:function(){return this._definitionChanged}}});ix.prototype.getValue=function(e,t){return this._hasClone?this._value.clone(t):this._value};ix.prototype.setValue=function(e){let t=this._value;if(t!==e){let n=l(e),i=n&&typeof e.clone=="function",o=n&&typeof e.equals=="function";(!o||!e.equals(t))&&(this._hasClone=i,this._hasEquals=o,this._value=i?e.clone(this._value):e,this._definitionChanged.raiseEvent(this))}};ix.prototype.equals=function(e){return this===e||e instanceof ix&&(!this._hasEquals&&this._value===e._value||this._hasEquals&&this._value.equals(e._value))};ix.prototype.valueOf=function(){return this._value};ix.prototype.toString=function(){return String(this._value)};var pi=ix;function A$e(e,t,n,i,o){return{configurable:i,get:function(){return this[t]},set:function(r){let s=this[t],a=this[n];l(a)&&(a(),this[n]=void 0),r!==void 0&&(!l(r)||!l(r.getValue))&&l(o)&&(r=o(r)),s!==r&&(this[t]=r,this._definitionChanged.raiseEvent(this,e,r,s)),l(r)&&l(r.definitionChanged)&&(this[n]=r.definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this,e,r,r)},this))}}}function E$e(e){return new pi(e)}function L$e(e,t,n){return A$e(e,`_${e.toString()}`,`_${e.toString()}Subscription`,t??!1,n??E$e)}var be=L$e;function YF(e){this._definitionChanged=new Se,this._show=void 0,this._showSubscription=void 0,this._image=void 0,this._imageSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._pixelOffset=void 0,this._pixelOffsetSubscription=void 0,this._eyeOffset=void 0,this._eyeOffsetSubscription=void 0,this._horizontalOrigin=void 0,this._horizontalOriginSubscription=void 0,this._verticalOrigin=void 0,this._verticalOriginSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._alignedAxis=void 0,this._alignedAxisSubscription=void 0,this._sizeInMeters=void 0,this._sizeInMetersSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._pixelOffsetScaleByDistance=void 0,this._pixelOffsetScaleByDistanceSubscription=void 0,this._imageSubRegion=void 0,this._imageSubRegionSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this._splitDirection=void 0,this._splitDirectionSubscription=void 0,this.merge(e??B.EMPTY_OBJECT)}Object.defineProperties(YF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),image:be("image"),scale:be("scale"),pixelOffset:be("pixelOffset"),eyeOffset:be("eyeOffset"),horizontalOrigin:be("horizontalOrigin"),verticalOrigin:be("verticalOrigin"),heightReference:be("heightReference"),color:be("color"),rotation:be("rotation"),alignedAxis:be("alignedAxis"),sizeInMeters:be("sizeInMeters"),width:be("width"),height:be("height"),scaleByDistance:be("scaleByDistance"),translucencyByDistance:be("translucencyByDistance"),pixelOffsetScaleByDistance:be("pixelOffsetScaleByDistance"),imageSubRegion:be("imageSubRegion"),distanceDisplayCondition:be("distanceDisplayCondition"),disableDepthTestDistance:be("disableDepthTestDistance"),splitDirection:be("splitDirection")});YF.prototype.clone=function(e){return l(e)?(e.show=this._show,e.image=this._image,e.scale=this._scale,e.pixelOffset=this._pixelOffset,e.eyeOffset=this._eyeOffset,e.horizontalOrigin=this._horizontalOrigin,e.verticalOrigin=this._verticalOrigin,e.heightReference=this._heightReference,e.color=this._color,e.rotation=this._rotation,e.alignedAxis=this._alignedAxis,e.sizeInMeters=this._sizeInMeters,e.width=this._width,e.height=this._height,e.scaleByDistance=this._scaleByDistance,e.translucencyByDistance=this._translucencyByDistance,e.pixelOffsetScaleByDistance=this._pixelOffsetScaleByDistance,e.imageSubRegion=this._imageSubRegion,e.distanceDisplayCondition=this._distanceDisplayCondition,e.disableDepthTestDistance=this._disableDepthTestDistance,e.splitDirection=this._splitDirection,e):new YF(this)};YF.prototype.merge=function(e){this.show=this._show??e.show,this.image=this._image??e.image,this.scale=this._scale??e.scale,this.pixelOffset=this._pixelOffset??e.pixelOffset,this.eyeOffset=this._eyeOffset??e.eyeOffset,this.horizontalOrigin=this._horizontalOrigin??e.horizontalOrigin,this.verticalOrigin=this._verticalOrigin??e.verticalOrigin,this.heightReference=this._heightReference??e.heightReference,this.color=this._color??e.color,this.rotation=this._rotation??e.rotation,this.alignedAxis=this._alignedAxis??e.alignedAxis,this.sizeInMeters=this._sizeInMeters??e.sizeInMeters,this.width=this._width??e.width,this.height=this._height??e.height,this.scaleByDistance=this._scaleByDistance??e.scaleByDistance,this.translucencyByDistance=this._translucencyByDistance??e.translucencyByDistance,this.pixelOffsetScaleByDistance=this._pixelOffsetScaleByDistance??e.pixelOffsetScaleByDistance,this.imageSubRegion=this._imageSubRegion??e.imageSubRegion,this.distanceDisplayCondition=this._distanceDisplayCondition??e.distanceDisplayCondition,this.disableDepthTestDistance=this._disableDepthTestDistance??e.disableDepthTestDistance,this.splitDirection=this.splitDirection??e.splitDirection};var sl=YF;var Ljn=x(T(),1);var Zjn=x(T(),1);var sjn=x(T(),1);function Q1(e){this._definitionChanged=new Se,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(Q1.prototype,{isConstant:{get:function(){return j.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color")});Q1.prototype.getType=function(e){return"Color"};var W$e=new Q;Q1.prototype.getValue=function(e,t){return l(e)||(e=Q.now(W$e)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,U.WHITE,t.color),t};Q1.prototype.equals=function(e){return this===e||e instanceof Q1&&j.equals(this._color,e._color)};var Jt=Q1;var bjn=x(T(),1);var v$e=new M(1,1),F$e=!1,I$e=U.WHITE;function q1(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new Se,this._image=void 0,this._imageSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._transparent=void 0,this._transparentSubscription=void 0,this.image=e.image,this.repeat=e.repeat,this.color=e.color,this.transparent=e.transparent}Object.defineProperties(q1.prototype,{isConstant:{get:function(){return j.isConstant(this._image)&&j.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},image:be("image"),repeat:be("repeat"),color:be("color"),transparent:be("transparent")});q1.prototype.getType=function(e){return"Image"};var P$e=new Q;q1.prototype.getValue=function(e,t){return l(e)||(e=Q.now(P$e)),l(t)||(t={}),t.image=j.getValueOrUndefined(this._image,e),t.repeat=j.getValueOrClonedDefault(this._repeat,e,v$e,t.repeat),t.color=j.getValueOrClonedDefault(this._color,e,I$e,t.color),j.getValueOrDefault(this._transparent,e,F$e)&&(t.color.alpha=Math.min(.99,t.color.alpha)),t};q1.prototype.equals=function(e){return this===e||e instanceof q1&&j.equals(this._image,e._image)&&j.equals(this._repeat,e._repeat)&&j.equals(this._color,e._color)&&j.equals(this._transparent,e._transparent)};var ox=q1;function X$e(e){if(e instanceof U)return new Jt(e);if(typeof e=="string"||e instanceof ve||e instanceof HTMLCanvasElement||e instanceof HTMLVideoElement){let t=new ox;return t.image=e,t}}function N$e(e,t){return be(e,t,X$e)}var tr=N$e;function wF(e){this._definitionChanged=new Se,this._show=void 0,this._showSubscription=void 0,this._dimensions=void 0,this._dimensionsSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??B.EMPTY_OBJECT)}Object.defineProperties(wF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),dimensions:be("dimensions"),heightReference:be("heightReference"),fill:be("fill"),material:tr("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition")});wF.prototype.clone=function(e){return l(e)?(e.show=this.show,e.dimensions=this.dimensions,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new wF(this)};wF.prototype.merge=function(e){this.show=this.show??e.show,this.dimensions=this.dimensions??e.dimensions,this.heightReference=this.heightReference??e.heightReference,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var O_=wF;var zjn=x(T(),1);var Yjn=x(T(),1);function $1(){ge.throwInstantiationError()}Object.defineProperties($1.prototype,{isConstant:{get:ge.throwInstantiationError},definitionChanged:{get:ge.throwInstantiationError},referenceFrame:{get:ge.throwInstantiationError}});$1.prototype.getValue=ge.throwInstantiationError;$1.prototype.getValueInReferenceFrame=ge.throwInstantiationError;$1.prototype.equals=ge.throwInstantiationError;var Nye=new q;$1.convertToReferenceFrame=function(e,t,n,i,o){if(!l(t))return t;if(l(o)||(o=new h),n===i)return h.clone(t,o);let r=bt.computeIcrfToCentralBodyFixedMatrix(e,Nye);if(n===Ui.INERTIAL)return q.multiplyByVector(r,t,o);if(n===Ui.FIXED)return q.multiplyByVector(q.transpose(r,Nye),t,o)};var Qh=$1;function B_(e,t){this._definitionChanged=new Se,this._value=h.clone(e),this._referenceFrame=t??Ui.FIXED}Object.defineProperties(B_.prototype,{isConstant:{get:function(){return!l(this._value)||this._referenceFrame===Ui.FIXED}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var Y$e=new Q;B_.prototype.getValue=function(e,t){return l(e)||(e=Q.now(Y$e)),this.getValueInReferenceFrame(e,Ui.FIXED,t)};B_.prototype.setValue=function(e,t){let n=!1;h.equals(this._value,e)||(n=!0,this._value=h.clone(e)),l(t)&&this._referenceFrame!==t&&(n=!0,this._referenceFrame=t),n&&this._definitionChanged.raiseEvent(this)};B_.prototype.getValueInReferenceFrame=function(e,t,n){return Qh.convertToReferenceFrame(e,this._value,this._referenceFrame,t,n)};B_.prototype.equals=function(e){return this===e||e instanceof B_&&h.equals(this._value,e._value)&&this._referenceFrame===e._referenceFrame};var zl=B_;var $jn=x(T(),1);function MF(e){this._definitionChanged=new Se,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._cornerType=void 0,this._cornerTypeSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(e??B.EMPTY_OBJECT)}Object.defineProperties(MF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),positions:be("positions"),width:be("width"),height:be("height"),heightReference:be("heightReference"),extrudedHeight:be("extrudedHeight"),extrudedHeightReference:be("extrudedHeightReference"),cornerType:be("cornerType"),granularity:be("granularity"),fill:be("fill"),material:tr("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition"),classificationType:be("classificationType"),zIndex:be("zIndex")});MF.prototype.clone=function(e){return l(e)?(e.show=this.show,e.positions=this.positions,e.width=this.width,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.cornerType=this.cornerType,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new MF(this)};MF.prototype.merge=function(e){this.show=this.show??e.show,this.positions=this.positions??e.positions,this.width=this.width??e.width,this.height=this.height??e.height,this.heightReference=this.heightReference??e.heightReference,this.extrudedHeight=this.extrudedHeight??e.extrudedHeight,this.extrudedHeightReference=this.extrudedHeightReference??e.extrudedHeightReference,this.cornerType=this.cornerType??e.cornerType,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex};var z_=MF;var n4n=x(T(),1);function w$e(e){return e}function M$e(e,t){return be(e,t,w$e)}var Hl=M$e;var l4n=x(T(),1);function kF(e){this._definitionChanged=new Se,this._show=void 0,this._showSubscription=void 0,this._length=void 0,this._lengthSubscription=void 0,this._topRadius=void 0,this._topRadiusSubscription=void 0,this._bottomRadius=void 0,this._bottomRadiusSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._numberOfVerticalLines=void 0,this._numberOfVerticalLinesSubscription=void 0,this._slices=void 0,this._slicesSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??B.EMPTY_OBJECT)}Object.defineProperties(kF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),length:be("length"),topRadius:be("topRadius"),bottomRadius:be("bottomRadius"),heightReference:be("heightReference"),fill:be("fill"),material:tr("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),numberOfVerticalLines:be("numberOfVerticalLines"),slices:be("slices"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition")});kF.prototype.clone=function(e){return l(e)?(e.show=this.show,e.length=this.length,e.topRadius=this.topRadius,e.bottomRadius=this.bottomRadius,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.numberOfVerticalLines=this.numberOfVerticalLines,e.slices=this.slices,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new kF(this)};kF.prototype.merge=function(e){this.show=this.show??e.show,this.length=this.length??e.length,this.topRadius=this.topRadius??e.topRadius,this.bottomRadius=this.bottomRadius??e.bottomRadius,this.heightReference=this.heightReference??e.heightReference,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.numberOfVerticalLines=this.numberOfVerticalLines??e.numberOfVerticalLines,this.slices=this.slices??e.slices,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var H_=kF;var b4n=x(T(),1);function UF(e){this._definitionChanged=new Se,this._show=void 0,this._showSubscription=void 0,this._semiMajorAxis=void 0,this._semiMajorAxisSubscription=void 0,this._semiMinorAxis=void 0,this._semiMinorAxisSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._numberOfVerticalLines=void 0,this._numberOfVerticalLinesSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(e??B.EMPTY_OBJECT)}Object.defineProperties(UF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),semiMajorAxis:be("semiMajorAxis"),semiMinorAxis:be("semiMinorAxis"),height:be("height"),heightReference:be("heightReference"),extrudedHeight:be("extrudedHeight"),extrudedHeightReference:be("extrudedHeightReference"),rotation:be("rotation"),stRotation:be("stRotation"),granularity:be("granularity"),fill:be("fill"),material:tr("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),numberOfVerticalLines:be("numberOfVerticalLines"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition"),classificationType:be("classificationType"),zIndex:be("zIndex")});UF.prototype.clone=function(e){return l(e)?(e.show=this.show,e.semiMajorAxis=this.semiMajorAxis,e.semiMinorAxis=this.semiMinorAxis,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.rotation=this.rotation,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.numberOfVerticalLines=this.numberOfVerticalLines,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new UF(this)};UF.prototype.merge=function(e){this.show=this.show??e.show,this.semiMajorAxis=this.semiMajorAxis??e.semiMajorAxis,this.semiMinorAxis=this.semiMinorAxis??e.semiMinorAxis,this.height=this.height??e.height,this.heightReference=this.heightReference??e.heightReference,this.extrudedHeight=this.extrudedHeight??e.extrudedHeight,this.extrudedHeightReference=this.extrudedHeightReference??e.extrudedHeightReference,this.rotation=this.rotation??e.rotation,this.stRotation=this.stRotation??e.stRotation,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.numberOfVerticalLines=this.numberOfVerticalLines??e.numberOfVerticalLines,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex};var K_=UF;var Z4n=x(T(),1);function DF(e){this._definitionChanged=new Se,this._show=void 0,this._showSubscription=void 0,this._radii=void 0,this._radiiSubscription=void 0,this._innerRadii=void 0,this._innerRadiiSubscription=void 0,this._minimumClock=void 0,this._minimumClockSubscription=void 0,this._maximumClock=void 0,this._maximumClockSubscription=void 0,this._minimumCone=void 0,this._minimumConeSubscription=void 0,this._maximumCone=void 0,this._maximumConeSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._stackPartitions=void 0,this._stackPartitionsSubscription=void 0,this._slicePartitions=void 0,this._slicePartitionsSubscription=void 0,this._subdivisions=void 0,this._subdivisionsSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??B.EMPTY_OBJECT)}Object.defineProperties(DF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),radii:be("radii"),innerRadii:be("innerRadii"),minimumClock:be("minimumClock"),maximumClock:be("maximumClock"),minimumCone:be("minimumCone"),maximumCone:be("maximumCone"),heightReference:be("heightReference"),fill:be("fill"),material:tr("material"),outline:be("outline"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),stackPartitions:be("stackPartitions"),slicePartitions:be("slicePartitions"),subdivisions:be("subdivisions"),shadows:be("shadows"),distanceDisplayCondition:be("distanceDisplayCondition")});DF.prototype.clone=function(e){return l(e)?(e.show=this.show,e.radii=this.radii,e.innerRadii=this.innerRadii,e.minimumClock=this.minimumClock,e.maximumClock=this.maximumClock,e.minimumCone=this.minimumCone,e.maximumCone=this.maximumCone,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.stackPartitions=this.stackPartitions,e.slicePartitions=this.slicePartitions,e.subdivisions=this.subdivisions,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new DF(this)};DF.prototype.merge=function(e){this.show=this.show??e.show,this.radii=this.radii??e.radii,this.innerRadii=this.innerRadii??e.innerRadii,this.minimumClock=this.minimumClock??e.minimumClock,this.maximumClock=this.maximumClock??e.maximumClock,this.minimumCone=this.minimumCone??e.minimumCone,this.maximumCone=this.maximumCone??e.maximumCone,this.heightReference=this.heightReference??e.heightReference,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.stackPartitions=this.stackPartitions??e.stackPartitions,this.slicePartitions=this.slicePartitions??e.slicePartitions,this.subdivisions=this.subdivisions??e.subdivisions,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var J_=DF;var E4n=x(T(),1);function OF(e){this._definitionChanged=new Se,this._show=void 0,this._showSubscription=void 0,this._text=void 0,this._textSubscription=void 0,this._font=void 0,this._fontSubscription=void 0,this._style=void 0,this._styleSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._showBackground=void 0,this._showBackgroundSubscription=void 0,this._backgroundColor=void 0,this._backgroundColorSubscription=void 0,this._backgroundPadding=void 0,this._backgroundPaddingSubscription=void 0,this._pixelOffset=void 0,this._pixelOffsetSubscription=void 0,this._eyeOffset=void 0,this._eyeOffsetSubscription=void 0,this._horizontalOrigin=void 0,this._horizontalOriginSubscription=void 0,this._verticalOrigin=void 0,this._verticalOriginSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fillColor=void 0,this._fillColorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._pixelOffsetScaleByDistance=void 0,this._pixelOffsetScaleByDistanceSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this.merge(e??B.EMPTY_OBJECT)}Object.defineProperties(OF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:be("show"),text:be("text"),font:be("font"),style:be("style"),scale:be("scale"),showBackground:be("showBackground"),backgroundColor:be("backgroundColor"),backgroundPadding:be("backgroundPadding"),pixelOffset:be("pixelOffset"),eyeOffset:be("eyeOffset"),horizontalOrigin:be("horizontalOrigin"),verticalOrigin:be("verticalOrigin"),heightReference:be("heightReference"),fillColor:be("fillColor"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth"),translucencyByDistance:be("translucencyByDistance"),pixelOffsetScaleByDistance:be("pixelOffsetScaleByDistance"),scaleByDistance:be("scaleByDistance"),distanceDisplayCondition:be("distanceDisplayCondition"),disableDepthTestDistance:be("disableDepthTestDistance")});OF.prototype.clone=function(e){return l(e)?(e.show=this.show,e.text=this.text,e.font=this.font,e.style=this.style,e.scale=this.scale,e.showBackground=this.showBackground,e.backgroundColor=this.backgroundColor,e.backgroundPadding=this.backgroundPadding,e.pixelOffset=this.pixelOffset,e.eyeOffset=this.eyeOffset,e.horizontalOrigin=this.horizontalOrigin,e.verticalOrigin=this.verticalOrigin,e.heightReference=this.heightReference,e.fillColor=this.fillColor,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.translucencyByDistance=this.translucencyByDistance,e.pixelOffsetScaleByDistance=this.pixelOffsetScaleByDistance,e.scaleByDistance=this.scaleByDistance,e.distanceDisplayCondition=this.distanceDisplayCondition,e.disableDepthTestDistance=this.disableDepthTestDistance,e):new OF(this)};OF.prototype.merge=function(e){this.show=this.show??e.show,this.text=this.text??e.text,this.font=this.font??e.font,this.style=this.style??e.style,this.scale=this.scale??e.scale,this.showBackground=this.showBackground??e.showBackground,this.backgroundColor=this.backgroundColor??e.backgroundColor,this.backgroundPadding=this.backgroundPadding??e.backgroundPadding,this.pixelOffset=this.pixelOffset??e.pixelOffset,this.eyeOffset=this.eyeOffset??e.eyeOffset,this.horizontalOrigin=this.horizontalOrigin??e.horizontalOrigin,this.verticalOrigin=this.verticalOrigin??e.verticalOrigin,this.heightReference=this.heightReference??e.heightReference,this.fillColor=this.fillColor??e.fillColor,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.translucencyByDistance=this.translucencyByDistance??e.translucencyByDistance,this.pixelOffsetScaleByDistance=this.pixelOffsetScaleByDistance??e.pixelOffsetScaleByDistance,this.scaleByDistance=this.scaleByDistance??e.scaleByDistance,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.disableDepthTestDistance=this.disableDepthTestDistance??e.disableDepthTestDistance};var qh=OF;var eQn=x(T(),1);var Y4n=x(T(),1);var W6=new By;function BF(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new Se,this._translation=void 0,this._translationSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this.translation=e.translation,this.rotation=e.rotation,this.scale=e.scale}Object.defineProperties(BF.prototype,{isConstant:{get:function(){return j.isConstant(this._translation)&&j.isConstant(this._rotation)&&j.isConstant(this._scale)}},definitionChanged:{get:function(){return this._definitionChanged}},translation:be("translation"),rotation:be("rotation"),scale:be("scale")});var k$e=new Q;BF.prototype.getValue=function(e,t){return l(e)||(e=Q.now(k$e)),l(t)||(t=new By),t.translation=j.getValueOrClonedDefault(this._translation,e,W6.translation,t.translation),t.rotation=j.getValueOrClonedDefault(this._rotation,e,W6.rotation,t.rotation),t.scale=j.getValueOrClonedDefault(this._scale,e,W6.scale,t.scale),t};BF.prototype.equals=function(e){return this===e||e instanceof BF&&j.equals(this._translation,e._translation)&&j.equals(this._rotation,e._rotation)&&j.equals(this._scale,e._scale)};var j_=BF;var z4n=x(T(),1);function Ab(e,t){this._propertyNames=[],this._definitionChanged=new Se,l(e)&&this.merge(e,t)}Object.defineProperties(Ab.prototype,{propertyNames:{get:function(){return this._propertyNames}},isConstant:{get:function(){let e=this._propertyNames;for(let t=0,n=e.length;t{this._terrainHeight=s.height,this.definitionChanged.raiseEvent()};this._removeCallbackFunc=e.updateHeight(i,r,this._heightReference)};var cet=new Q;iC.prototype.getValue=function(e,t){l(e)||(e=Q.now(cet));let n=j.getValueOrDefault(this._heightReference,e,rt.NONE),i=j.getValueOrDefault(this._extrudedHeightReference,e,rt.NONE);if(n===rt.NONE&&!J1(i))return this._position=h.clone(h.ZERO,this._position),h.clone(h.ZERO,t);if(this._positionProperty.isConstant)return h.multiplyByScalar(this._normal,this._terrainHeight,t);let o=this._scene,r=this._positionProperty.getValue(e,Dye);if(!l(r)||h.equals(r,h.ZERO)||!l(o.globe))return h.clone(h.ZERO,t);if(h.equalsEpsilon(this._position,r,L.EPSILON10))return h.multiplyByScalar(this._normal,this._terrainHeight,t);this._position=h.clone(r,this._position),this._updateClamping();let s=o.ellipsoid.geodeticSurfaceNormal(r,this._normal);return h.multiplyByScalar(s,this._terrainHeight,t)};iC.prototype.isDestroyed=function(){return!1};iC.prototype.destroy=function(){return l(this._removeEventListener)&&this._removeEventListener(),l(this._removeModeListener)&&this._removeModeListener(),l(this._removeCallbackFunc)&&this._removeCallbackFunc(),me(this)};var iS=iC;function det(e,t,n,i){if(Ri.prototype._onEntityPropertyChanged.call(this,e,t,n,i),this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!l(o))return;l(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0);let r=o.heightReference;if(l(r)){let s=new tf(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new iS(this._scene,s,r)}}var vb=det;var Oye=h.ZERO,Bye=new h,uet=new h,zye=new U;function met(e){this.id=e,this.vertexFormat=void 0,this.dimensions=void 0,this.offsetAttribute=void 0}function Su(e,t){Ri.call(this,{entity:e,scene:t,geometryOptions:new met(e),geometryPropertyName:"box",observedPropertyNames:["availability","position","orientation","box"]}),this._onEntityPropertyChanged(e,"box",e.box,void 0)}l(Object.create)&&(Su.prototype=Object.create(Ri.prototype),Su.prototype.constructor=Su);Object.defineProperties(Su.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Su.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=$n.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r,color:void 0,offset:void 0};if(this._materialProperty instanceof Jt){let a;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,zye)),l(a)||(a=U.WHITE),s.color=Qt.fromColor(a)}return l(this._options.offsetAttribute)&&(s.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Oye,Bye))),new Nt({id:t,geometry:Cc.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:s})};Su.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,zye),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:$n.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Oye,Bye))),new Nt({id:t,geometry:Rh.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:r})};Su.prototype._computeCenter=function(e,t){return j.getValueOrUndefined(this._entity.position,e,t)};Su.prototype._isHidden=function(e,t){return!l(t.dimensions)||!l(e.position)||Ri.prototype._isHidden.call(this,e,t)};Su.prototype._isDynamic=function(e,t){return!e.position.isConstant||!j.isConstant(e.orientation)||!t.dimensions.isConstant||!j.isConstant(t.outlineWidth)};Su.prototype._setStaticOptions=function(e,t){let n=j.getValueOrDefault(t.heightReference,tt.MINIMUM_VALUE,rt.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Jt?yn.VERTEX_FORMAT:To.MaterialSupport.TEXTURED.vertexFormat,i.dimensions=t.dimensions.getValue(tt.MINIMUM_VALUE,i.dimensions),i.offsetAttribute=n!==rt.NONE?pn.ALL:void 0};Su.prototype._onEntityPropertyChanged=vb;Su.DynamicGeometryUpdater=oC;function oC(e,t,n){Ci.call(this,e,t,n)}l(Object.create)&&(oC.prototype=Object.create(Ci.prototype),oC.prototype.constructor=oC);oC.prototype._isHidden=function(e,t,n){let i=j.getValueOrUndefined(e.position,n,uet),o=this._options.dimensions;return!l(i)||!l(o)||Ci.prototype._isHidden.call(this,e,t,n)};oC.prototype._setOptions=function(e,t,n){let i=j.getValueOrDefault(t.heightReference,n,rt.NONE),o=this._options;o.dimensions=j.getValueOrUndefined(t.dimensions,n,o.dimensions),o.offsetAttribute=i!==rt.NONE?pn.ALL:void 0};var uI=Su;var jqn=x(T(),1);var Gqn=x(T(),1);var het=new pi(0);function jl(e){Ri.call(this,e),this._zIndex=0,this._terrainOffsetProperty=void 0}l(Object.create)&&(jl.prototype=Object.create(Ri.prototype),jl.prototype.constructor=jl);Object.defineProperties(jl.prototype,{zIndex:{get:function(){return this._zIndex}},terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});jl.prototype._isOnTerrain=function(e,t){return this._fillEnabled&&!l(t.height)&&!l(t.extrudedHeight)&&Ol.isSupported(this._scene)};jl.prototype._getIsClosed=function(e){let t=e.height,n=e.extrudedHeight;return t===0||l(n)&&n!==t};jl.prototype._computeCenter=ge.throwInstantiationError;jl.prototype._onEntityPropertyChanged=function(e,t,n,i){if(Ri.prototype._onEntityPropertyChanged.call(this,e,t,n,i),this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!l(o))return;l(o.zIndex)&&(l(o.height)||l(o.extrudedHeight))&>(gt.geometryZIndex),this._zIndex=o.zIndex??het,l(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0);let r=o.heightReference,s=o.extrudedHeightReference;if(l(r)||l(s)){let a=new tf(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new iS(this._scene,a,r,s)}};jl.prototype.destroy=function(){l(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0),Ri.prototype.destroy.call(this)};jl.getGeometryHeight=function(e,t){if(!l(e)){t!==rt.NONE&>(gt.geometryHeightReference);return}return Wd(t)?0:e};jl.getGeometryExtrudedHeight=function(e,t){if(!l(e)){t!==rt.NONE&>(gt.geometryExtrudedHeightReference);return}return Wd(t)?jl.CLAMP_TO_GROUND:e};jl.CLAMP_TO_GROUND="clamp";jl.computeGeometryOffsetAttribute=function(e,t,n,i){(!l(e)||!l(t))&&(t=rt.NONE),(!l(n)||!l(i))&&(i=rt.NONE);let o=0;if(t!==rt.NONE&&o++,i===rt.RELATIVE_TO_GROUND&&o++,o===2)return pn.ALL;if(o===1)return pn.TOP};var ii=jl;var Hye=new U,Kye=h.ZERO,Jye=new h,jye=new re;function fet(e){this.id=e,this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.cornerType=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.offsetAttribute=void 0}function nf(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new fet(e),geometryPropertyName:"corridor",observedPropertyNames:["availability","corridor"]}),this._onEntityPropertyChanged(e,"corridor",e.corridor,void 0)}l(Object.create)&&(nf.prototype=Object.create(ii.prototype),nf.prototype.constructor=nf);nf.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:$n.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof Jt){let o;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,Hye)),l(o)||(o=U.WHITE),i.color=Qt.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Kye,Jye))),new Nt({id:t,geometry:new $T(this._options),attributes:i})};nf.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,Hye),o={show:new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:$n.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0};return l(this._options.offsetAttribute)&&(o.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Kye,Jye))),new Nt({id:t,geometry:new CE(this._options),attributes:o})};nf.prototype._computeCenter=function(e,t){let n=j.getValueOrUndefined(this._entity.corridor.positions,e);if(!(!l(n)||n.length===0))return h.clone(n[Math.floor(n.length/2)],t)};nf.prototype._isHidden=function(e,t){return!l(t.positions)||!l(t.width)||Ri.prototype._isHidden.call(this,e,t)};nf.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!j.isConstant(t.height)||!j.isConstant(t.extrudedHeight)||!j.isConstant(t.granularity)||!j.isConstant(t.width)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.cornerType)||!j.isConstant(t.zIndex)||this._onTerrain&&!j.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Jt)};nf.prototype._setStaticOptions=function(e,t){let n=j.getValueOrUndefined(t.height,tt.MINIMUM_VALUE),i=j.getValueOrDefault(t.heightReference,tt.MINIMUM_VALUE,rt.NONE),o=j.getValueOrUndefined(t.extrudedHeight,tt.MINIMUM_VALUE),r=j.getValueOrDefault(t.extrudedHeightReference,tt.MINIMUM_VALUE,rt.NONE);l(o)&&!l(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof Jt?yn.VERTEX_FORMAT:To.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(tt.MINIMUM_VALUE,s.positions),s.width=t.width.getValue(tt.MINIMUM_VALUE),s.granularity=j.getValueOrUndefined(t.granularity,tt.MINIMUM_VALUE),s.cornerType=j.getValueOrUndefined(t.cornerType,tt.MINIMUM_VALUE),s.offsetAttribute=ii.computeGeometryOffsetAttribute(n,i,o,r),s.height=ii.getGeometryHeight(n,i),o=ii.getGeometryExtrudedHeight(o,r),o===ii.CLAMP_TO_GROUND&&(o=Ei.getMinimumMaximumHeights($T.computeRectangle(s,jye)).minimumTerrainHeight),s.extrudedHeight=o};nf.DynamicGeometryUpdater=rC;function rC(e,t,n){Ci.call(this,e,t,n)}l(Object.create)&&(rC.prototype=Object.create(Ci.prototype),rC.prototype.constructor=rC);rC.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.positions)||!l(i.width)||Ci.prototype._isHidden.call(this,e,t,n)};rC.prototype._setOptions=function(e,t,n){let i=this._options,o=j.getValueOrUndefined(t.height,n),r=j.getValueOrDefault(t.heightReference,n,rt.NONE),s=j.getValueOrUndefined(t.extrudedHeight,n),a=j.getValueOrDefault(t.extrudedHeightReference,n,rt.NONE);l(s)&&!l(o)&&(o=0),i.positions=j.getValueOrUndefined(t.positions,n),i.width=j.getValueOrUndefined(t.width,n),i.granularity=j.getValueOrUndefined(t.granularity,n),i.cornerType=j.getValueOrUndefined(t.cornerType,n),i.offsetAttribute=ii.computeGeometryOffsetAttribute(o,r,s,a),i.height=ii.getGeometryHeight(o,r),s=ii.getGeometryExtrudedHeight(s,a),s===ii.CLAMP_TO_GROUND&&(s=Ei.getMinimumMaximumHeights($T.computeRectangle(i,jye)).minimumTerrainHeight),i.extrudedHeight=s};var mI=nf;var y$n=x(T(),1);var Qye=h.ZERO,qye=new h,pet=new h,$ye=new U;function bet(e){this.id=e,this.vertexFormat=void 0,this.length=void 0,this.topRadius=void 0,this.bottomRadius=void 0,this.slices=void 0,this.numberOfVerticalLines=void 0,this.offsetAttribute=void 0}function Zu(e,t){Ri.call(this,{entity:e,scene:t,geometryOptions:new bet(e),geometryPropertyName:"cylinder",observedPropertyNames:["availability","position","orientation","cylinder"]}),this._onEntityPropertyChanged(e,"cylinder",e.cylinder,void 0)}l(Object.create)&&(Zu.prototype=Object.create(Ri.prototype),Zu.prototype.constructor=Zu);Object.defineProperties(Zu.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Zu.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=$n.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r,color:void 0,offset:void 0};if(this._materialProperty instanceof Jt){let a;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,$ye)),l(a)||(a=U.WHITE),s.color=Qt.fromColor(a)}return l(this._options.offsetAttribute)&&(s.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Qye,qye))),new Nt({id:t,geometry:new GE(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.ellipsoid),attributes:s})};Zu.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,$ye),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:$n.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,Qye,qye))),new Nt({id:t,geometry:new AE(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.ellipsoid),attributes:r})};Zu.prototype._computeCenter=function(e,t){return j.getValueOrUndefined(this._entity.position,e,t)};Zu.prototype._isHidden=function(e,t){return!l(e.position)||!l(t.length)||!l(t.topRadius)||!l(t.bottomRadius)||Ri.prototype._isHidden.call(this,e,t)};Zu.prototype._isDynamic=function(e,t){return!e.position.isConstant||!j.isConstant(e.orientation)||!t.length.isConstant||!t.topRadius.isConstant||!t.bottomRadius.isConstant||!j.isConstant(t.slices)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.numberOfVerticalLines)};Zu.prototype._setStaticOptions=function(e,t){let n=j.getValueOrDefault(t.heightReference,tt.MINIMUM_VALUE,rt.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Jt?yn.VERTEX_FORMAT:To.MaterialSupport.TEXTURED.vertexFormat,i.length=t.length.getValue(tt.MINIMUM_VALUE),i.topRadius=t.topRadius.getValue(tt.MINIMUM_VALUE),i.bottomRadius=t.bottomRadius.getValue(tt.MINIMUM_VALUE),i.slices=j.getValueOrUndefined(t.slices,tt.MINIMUM_VALUE),i.numberOfVerticalLines=j.getValueOrUndefined(t.numberOfVerticalLines,tt.MINIMUM_VALUE),i.offsetAttribute=n!==rt.NONE?pn.ALL:void 0};Zu.prototype._onEntityPropertyChanged=vb;Zu.DynamicGeometryUpdater=sC;function sC(e,t,n){Ci.call(this,e,t,n)}l(Object.create)&&(sC.prototype=Object.create(Ci.prototype),sC.prototype.constructor=sC);sC.prototype._isHidden=function(e,t,n){let i=this._options,o=j.getValueOrUndefined(e.position,n,pet);return!l(o)||!l(i.length)||!l(i.topRadius)||!l(i.bottomRadius)||Ci.prototype._isHidden.call(this,e,t,n)};sC.prototype._setOptions=function(e,t,n){let i=j.getValueOrDefault(t.heightReference,n,rt.NONE),o=this._options;o.length=j.getValueOrUndefined(t.length,n),o.topRadius=j.getValueOrUndefined(t.topRadius,n),o.bottomRadius=j.getValueOrUndefined(t.bottomRadius,n),o.slices=j.getValueOrUndefined(t.slices,n),o.numberOfVerticalLines=j.getValueOrUndefined(t.numberOfVerticalLines,n),o.offsetAttribute=i!==rt.NONE?pn.ALL:void 0};var hI=Zu;var k$n=x(T(),1);var exe=new U,txe=h.ZERO,nxe=new h,ixe=new re;function get(e){this.id=e,this.vertexFormat=void 0,this.center=void 0,this.semiMajorAxis=void 0,this.semiMinorAxis=void 0,this.rotation=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.numberOfVerticalLines=void 0,this.offsetAttribute=void 0}function of(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new get(e),geometryPropertyName:"ellipse",observedPropertyNames:["availability","position","ellipse"]}),this._onEntityPropertyChanged(e,"ellipse",e.ellipse,void 0)}l(Object.create)&&(of.prototype=Object.create(ii.prototype),of.prototype.constructor=of);of.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:$n.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof Jt){let o;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,exe)),l(o)||(o=U.WHITE),i.color=Qt.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,txe,nxe))),new Nt({id:t,geometry:new Ll(this._options),attributes:i})};of.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,exe),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:$n.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,txe,nxe))),new Nt({id:t,geometry:new au(this._options),attributes:r})};of.prototype._computeCenter=function(e,t){return j.getValueOrUndefined(this._entity.position,e,t)};of.prototype._isHidden=function(e,t){let n=e.position;return!l(n)||!l(t.semiMajorAxis)||!l(t.semiMinorAxis)||Ri.prototype._isHidden.call(this,e,t)};of.prototype._isDynamic=function(e,t){return!e.position.isConstant||!t.semiMajorAxis.isConstant||!t.semiMinorAxis.isConstant||!j.isConstant(t.rotation)||!j.isConstant(t.height)||!j.isConstant(t.extrudedHeight)||!j.isConstant(t.granularity)||!j.isConstant(t.stRotation)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.numberOfVerticalLines)||!j.isConstant(t.zIndex)||this._onTerrain&&!j.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Jt)};of.prototype._setStaticOptions=function(e,t){let n=j.getValueOrUndefined(t.height,tt.MINIMUM_VALUE),i=j.getValueOrDefault(t.heightReference,tt.MINIMUM_VALUE,rt.NONE),o=j.getValueOrUndefined(t.extrudedHeight,tt.MINIMUM_VALUE),r=j.getValueOrDefault(t.extrudedHeightReference,tt.MINIMUM_VALUE,rt.NONE);l(o)&&!l(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof Jt?yn.VERTEX_FORMAT:To.MaterialSupport.TEXTURED.vertexFormat,s.center=e.position.getValue(tt.MINIMUM_VALUE,s.center),s.semiMajorAxis=t.semiMajorAxis.getValue(tt.MINIMUM_VALUE,s.semiMajorAxis),s.semiMinorAxis=t.semiMinorAxis.getValue(tt.MINIMUM_VALUE,s.semiMinorAxis),s.rotation=j.getValueOrUndefined(t.rotation,tt.MINIMUM_VALUE),s.granularity=j.getValueOrUndefined(t.granularity,tt.MINIMUM_VALUE),s.stRotation=j.getValueOrUndefined(t.stRotation,tt.MINIMUM_VALUE),s.numberOfVerticalLines=j.getValueOrUndefined(t.numberOfVerticalLines,tt.MINIMUM_VALUE),s.offsetAttribute=ii.computeGeometryOffsetAttribute(n,i,o,r),s.height=ii.getGeometryHeight(n,i),o=ii.getGeometryExtrudedHeight(o,r),o===ii.CLAMP_TO_GROUND&&(o=Ei.getMinimumMaximumHeights(Ll.computeRectangle(s,ixe)).minimumTerrainHeight),s.extrudedHeight=o};of.DynamicGeometryUpdater=aC;function aC(e,t,n){Ci.call(this,e,t,n)}l(Object.create)&&(aC.prototype=Object.create(Ci.prototype),aC.prototype.constructor=aC);aC.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.center)||!l(i.semiMajorAxis)||!l(i.semiMinorAxis)||Ci.prototype._isHidden.call(this,e,t,n)};aC.prototype._setOptions=function(e,t,n){let i=this._options,o=j.getValueOrUndefined(t.height,n),r=j.getValueOrDefault(t.heightReference,n,rt.NONE),s=j.getValueOrUndefined(t.extrudedHeight,n),a=j.getValueOrDefault(t.extrudedHeightReference,n,rt.NONE);l(s)&&!l(o)&&(o=0),i.center=j.getValueOrUndefined(e.position,n,i.center),i.semiMajorAxis=j.getValueOrUndefined(t.semiMajorAxis,n),i.semiMinorAxis=j.getValueOrUndefined(t.semiMinorAxis,n),i.rotation=j.getValueOrUndefined(t.rotation,n),i.granularity=j.getValueOrUndefined(t.granularity,n),i.stRotation=j.getValueOrUndefined(t.stRotation,n),i.numberOfVerticalLines=j.getValueOrUndefined(t.numberOfVerticalLines,n),i.offsetAttribute=ii.computeGeometryOffsetAttribute(o,r,s,a),i.height=ii.getGeometryHeight(o,r),s=ii.getGeometryExtrudedHeight(s,a),s===ii.CLAMP_TO_GROUND&&(s=Ei.getMinimumMaximumHeights(Ll.computeRectangle(i,ixe)).minimumTerrainHeight),i.extrudedHeight=s};var fI=of;var fei=x(T(),1);var yet=new Jt(U.WHITE),P6=h.ZERO,X6=new h,xet=new h,Tet=new h,N6=new U,_et=new h(1,1,1);function Zet(e){this.id=e,this.vertexFormat=void 0,this.radii=void 0,this.innerRadii=void 0,this.minimumClock=void 0,this.maximumClock=void 0,this.minimumCone=void 0,this.maximumCone=void 0,this.stackPartitions=void 0,this.slicePartitions=void 0,this.subdivisions=void 0,this.offsetAttribute=void 0}function Vu(e,t){Ri.call(this,{entity:e,scene:t,geometryOptions:new Zet(e),geometryPropertyName:"ellipsoid",observedPropertyNames:["availability","position","orientation","ellipsoid"]}),this._onEntityPropertyChanged(e,"ellipsoid",e.ellipsoid,void 0)}l(Object.create)&&(Vu.prototype=Object.create(Ri.prototype),Vu.prototype.constructor=Vu);Object.defineProperties(Vu.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Vu.prototype.createFillGeometryInstance=function(e,t,n){let i=this._entity,o=i.isAvailable(e),r,s=new vn(o&&i.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),a=this._distanceDisplayConditionProperty.getValue(e),c=$n.fromDistanceDisplayCondition(a),d={show:s,distanceDisplayCondition:c,color:void 0,offset:void 0};if(this._materialProperty instanceof Jt){let u;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||o)&&(u=this._materialProperty.color.getValue(e,N6)),l(u)||(u=U.WHITE),r=Qt.fromColor(u),d.color=r}return l(this._options.offsetAttribute)&&(d.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,P6,X6))),new Nt({id:i,geometry:new La(this._options),modelMatrix:t?void 0:i.computeModelMatrixForHeightReference(e,i.ellipsoid.heightReference,this._options.radii.z*.5,this._scene.ellipsoid,n),attributes:d})};Vu.prototype.createOutlineGeometryInstance=function(e,t,n){let i=this._entity,o=i.isAvailable(e),r=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,N6),s=this._distanceDisplayConditionProperty.getValue(e),a={show:new vn(o&&i.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(r),distanceDisplayCondition:$n.fromDistanceDisplayCondition(s),offset:void 0};return l(this._options.offsetAttribute)&&(a.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,P6,X6))),new Nt({id:i,geometry:new du(this._options),modelMatrix:t?void 0:i.computeModelMatrixForHeightReference(e,i.ellipsoid.heightReference,this._options.radii.z*.5,this._scene.ellipsoid,n),attributes:a})};Vu.prototype._computeCenter=function(e,t){return j.getValueOrUndefined(this._entity.position,e,t)};Vu.prototype._isHidden=function(e,t){return!l(e.position)||!l(t.radii)||Ri.prototype._isHidden.call(this,e,t)};Vu.prototype._isDynamic=function(e,t){return!e.position.isConstant||!j.isConstant(e.orientation)||!t.radii.isConstant||!j.isConstant(t.innerRadii)||!j.isConstant(t.stackPartitions)||!j.isConstant(t.slicePartitions)||!j.isConstant(t.outlineWidth)||!j.isConstant(t.minimumClock)||!j.isConstant(t.maximumClock)||!j.isConstant(t.minimumCone)||!j.isConstant(t.maximumCone)||!j.isConstant(t.subdivisions)};Vu.prototype._setStaticOptions=function(e,t){let n=j.getValueOrDefault(t.heightReference,tt.MINIMUM_VALUE,rt.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Jt?yn.VERTEX_FORMAT:To.MaterialSupport.TEXTURED.vertexFormat,i.radii=t.radii.getValue(tt.MINIMUM_VALUE,i.radii),i.innerRadii=j.getValueOrUndefined(t.innerRadii,i.radii),i.minimumClock=j.getValueOrUndefined(t.minimumClock,tt.MINIMUM_VALUE),i.maximumClock=j.getValueOrUndefined(t.maximumClock,tt.MINIMUM_VALUE),i.minimumCone=j.getValueOrUndefined(t.minimumCone,tt.MINIMUM_VALUE),i.maximumCone=j.getValueOrUndefined(t.maximumCone,tt.MINIMUM_VALUE),i.stackPartitions=j.getValueOrUndefined(t.stackPartitions,tt.MINIMUM_VALUE),i.slicePartitions=j.getValueOrUndefined(t.slicePartitions,tt.MINIMUM_VALUE),i.subdivisions=j.getValueOrUndefined(t.subdivisions,tt.MINIMUM_VALUE),i.offsetAttribute=n!==rt.NONE?pn.ALL:void 0};Vu.prototype._onEntityPropertyChanged=vb;Vu.DynamicGeometryUpdater=pI;function pI(e,t,n){Ci.call(this,e,t,n),this._scene=e._scene,this._modelMatrix=new I,this._attributes=void 0,this._outlineAttributes=void 0,this._lastSceneMode=void 0,this._lastShow=void 0,this._lastOutlineShow=void 0,this._lastOutlineWidth=void 0,this._lastOutlineColor=void 0,this._lastOffset=new h,this._material={}}l(Object.create)&&(pI.prototype=Object.create(Ci.prototype),pI.prototype.constructor=pI);pI.prototype.update=function(e){let t=this._entity,n=t.ellipsoid;if(!t.isShowing||!t.isAvailable(e)||!j.getValueOrDefault(n.show,e,!0)){l(this._primitive)&&(this._primitive.show=!1),l(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1);return}let i=j.getValueOrUndefined(n.radii,e,xet),o=l(i)?t.computeModelMatrixForHeightReference(e,n.heightReference,i.z*.5,this._scene.ellipsoid,this._modelMatrix):void 0;if(!l(o)||!l(i)){l(this._primitive)&&(this._primitive.show=!1),l(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1);return}let r=j.getValueOrDefault(n.fill,e,!0),s=j.getValueOrDefault(n.outline,e,!1),a=j.getValueOrClonedDefault(n.outlineColor,e,U.BLACK,N6),c=pr.getValue(e,n.material??yet,this._material),d=j.getValueOrUndefined(n.innerRadii,e,Tet),u=j.getValueOrUndefined(n.minimumClock,e),m=j.getValueOrUndefined(n.maximumClock,e),p=j.getValueOrUndefined(n.minimumCone,e),b=j.getValueOrUndefined(n.maximumCone,e),f=j.getValueOrUndefined(n.stackPartitions,e),y=j.getValueOrUndefined(n.slicePartitions,e),_=j.getValueOrUndefined(n.subdivisions,e),S=j.getValueOrDefault(n.outlineWidth,e,1),Z=j.getValueOrDefault(n.heightReference,e,rt.NONE),V=Z!==rt.NONE?pn.ALL:void 0,C=this._scene.mode,G=C===se.SCENE3D&&Z===rt.NONE,E=this._options,v=this._geometryUpdater.shadowsProperty.getValue(e),P=this._geometryUpdater.distanceDisplayConditionProperty.getValue(e),N=j.getValueOrDefault(this._geometryUpdater.terrainOffsetProperty,e,P6,X6);if(!G||this._lastSceneMode!==C||!l(this._primitive)||E.stackPartitions!==f||E.slicePartitions!==y||l(d)&&!h.equals(E.innerRadii!==d)||E.minimumClock!==u||E.maximumClock!==m||E.minimumCone!==p||E.maximumCone!==b||E.subdivisions!==_||this._lastOutlineWidth!==S||E.offsetAttribute!==V){let R=this._primitives;R.removeAndDestroy(this._primitive),R.removeAndDestroy(this._outlinePrimitive),this._primitive=void 0,this._outlinePrimitive=void 0,this._lastSceneMode=C,this._lastOutlineWidth=S,E.stackPartitions=f,E.slicePartitions=y,E.subdivisions=_,E.offsetAttribute=V,E.radii=h.clone(G?_et:i,E.radii),l(d)?G?E.innerRadii=h.fromElements(d.x/i.x,d.y/i.y,d.z/i.z,E.innerRadii):E.innerRadii=h.clone(d,E.innerRadii):E.innerRadii=void 0,E.minimumClock=u,E.maximumClock=m,E.minimumCone=p,E.maximumCone=b;let A=new To({material:c,translucent:c.isTranslucent(),closed:!0});E.vertexFormat=A.vertexFormat;let W=this._geometryUpdater.createFillGeometryInstance(e,G,this._modelMatrix);this._primitive=R.add(new Nn({geometryInstances:W,appearance:A,asynchronous:!1,shadows:v}));let X=this._geometryUpdater.createOutlineGeometryInstance(e,G,this._modelMatrix);this._outlinePrimitive=R.add(new Nn({geometryInstances:X,appearance:new yn({flat:!0,translucent:X.attributes.color.value[3]!==255,renderState:{lineWidth:this._geometryUpdater._scene.clampLineWidth(S)}}),asynchronous:!1,shadows:v})),this._lastShow=r,this._lastOutlineShow=s,this._lastOutlineColor=U.clone(a,this._lastOutlineColor),this._lastDistanceDisplayCondition=P,this._lastOffset=h.clone(N,this._lastOffset)}else if(this._primitive.ready){let R=this._primitive,A=this._outlinePrimitive;R.show=!0,A.show=!0,R.appearance.material=c;let W=this._attributes;l(W)||(W=R.getGeometryInstanceAttributes(t),this._attributes=W),r!==this._lastShow&&(W.show=vn.toValue(r,W.show),this._lastShow=r);let X=this._outlineAttributes;l(X)||(X=A.getGeometryInstanceAttributes(t),this._outlineAttributes=X),s!==this._lastOutlineShow&&(X.show=vn.toValue(s,X.show),this._lastOutlineShow=s),U.equals(a,this._lastOutlineColor)||(X.color=Qt.toValue(a,X.color),U.clone(a,this._lastOutlineColor)),Ot.equals(P,this._lastDistanceDisplayCondition)||(W.distanceDisplayCondition=$n.toValue(P,W.distanceDisplayCondition),X.distanceDisplayCondition=$n.toValue(P,X.distanceDisplayCondition),Ot.clone(P,this._lastDistanceDisplayCondition)),h.equals(N,this._lastOffset)||(W.offset=xo.toValue(N,W.offset),X.offset=xo.toValue(N,W.offset),h.clone(N,this._lastOffset))}G&&(i.x=Math.max(i.x,.001),i.y=Math.max(i.y,.001),i.z=Math.max(i.z,.001),o=I.multiplyByScale(o,i,o),this._primitive.modelMatrix=o,this._outlinePrimitive.modelMatrix=o)};var bI=Vu;var Pei=x(T(),1);var Vet=new h,oxe=new U;function Cet(e){this.id=e,this.vertexFormat=void 0,this.plane=void 0,this.dimensions=void 0}function wm(e,t){Ri.call(this,{entity:e,scene:t,geometryOptions:new Cet(e),geometryPropertyName:"plane",observedPropertyNames:["availability","position","orientation","plane"]}),this._onEntityPropertyChanged(e,"plane",e.plane,void 0)}l(Object.create)&&(wm.prototype=Object.create(Ri.prototype),wm.prototype.constructor=wm);wm.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),s=this._distanceDisplayConditionProperty.getValue(e),a=$n.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof Jt){let b;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(b=this._materialProperty.color.getValue(e,oxe)),l(b)||(b=U.WHITE),o=Qt.fromColor(b),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};let c=t.plane,d=this._options,u=t.computeModelMatrix(e),m=j.getValueOrDefault(c.plane,e,d.plane),p=j.getValueOrUndefined(c.dimensions,e,d.dimensions);return d.plane=m,d.dimensions=p,u=Y6(m,p,u,u),new Nt({id:t,geometry:new JE(this._options),modelMatrix:u,attributes:i})};wm.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,oxe),o=this._distanceDisplayConditionProperty.getValue(e),r=t.plane,s=this._options,a=t.computeModelMatrix(e),c=j.getValueOrDefault(r.plane,e,s.plane),d=j.getValueOrUndefined(r.dimensions,e,s.dimensions);return s.plane=c,s.dimensions=d,a=Y6(c,d,a,a),new Nt({id:t,geometry:new jE,modelMatrix:a,attributes:{show:new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(i),distanceDisplayCondition:$n.fromDistanceDisplayCondition(o)}})};wm.prototype._isHidden=function(e,t){return!l(t.plane)||!l(t.dimensions)||!l(e.position)||Ri.prototype._isHidden.call(this,e,t)};wm.prototype._getIsClosed=function(e){return!1};wm.prototype._isDynamic=function(e,t){return!e.position.isConstant||!j.isConstant(e.orientation)||!t.plane.isConstant||!t.dimensions.isConstant||!j.isConstant(t.outlineWidth)};wm.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof Jt,i=this._options;i.vertexFormat=n?yn.VERTEX_FORMAT:To.MaterialSupport.TEXTURED.vertexFormat,i.plane=t.plane.getValue(tt.MINIMUM_VALUE,i.plane),i.dimensions=t.dimensions.getValue(tt.MINIMUM_VALUE,i.dimensions)};wm.DynamicGeometryUpdater=cC;function cC(e,t,n){Ci.call(this,e,t,n)}l(Object.create)&&(cC.prototype=Object.create(Ci.prototype),cC.prototype.constructor=cC);cC.prototype._isHidden=function(e,t,n){let i=this._options,o=j.getValueOrUndefined(e.position,n,Vet);return!l(o)||!l(i.plane)||!l(i.dimensions)||Ci.prototype._isHidden.call(this,e,t,n)};cC.prototype._setOptions=function(e,t,n){let i=this._options;i.plane=j.getValueOrDefault(t.plane,n,i.plane),i.dimensions=j.getValueOrUndefined(t.dimensions,n,i.dimensions)};var Ret=new h,Get=new h,Aet=new h,Eet=new h,Let=new q,Wet=new q,vet=new I;function Y6(e,t,n,i){let o=e.normal,r=e.distance,s=h.multiplyByScalar(o,-r,Aet),a=h.clone(h.UNIT_Z,Get);L.equalsEpsilon(Math.abs(h.dot(a,o)),1,L.EPSILON8)&&(a=h.clone(h.UNIT_Y,a));let c=h.cross(a,o,Ret);a=h.cross(o,c,a),h.normalize(c,c),h.normalize(a,a);let d=Let;q.setColumn(d,0,c,d),q.setColumn(d,1,a,d),q.setColumn(d,2,o,d);let u=h.fromElements(t.x,t.y,1,Eet),m=q.multiplyByScale(d,u,Wet),p=I.fromRotationTranslation(m,s,vet);return I.multiplyTransformation(n,p,i)}wm.createPrimitiveMatrix=Y6;var gI=wm;var dti=x(T(),1);var rxe="Entity polygons cannot have both height and perPositionHeight. height will be ignored",sxe="heightReference is not supported for entity polygons with perPositionHeight. heightReference will be ignored",axe=new U,cxe=h.ZERO,lxe=new h,dxe=new re,Fet=[],Iet=new M;function Pet(e){this.id=e,this.vertexFormat=void 0,this.polygonHierarchy=void 0,this.perPositionHeight=void 0,this.closeTop=void 0,this.closeBottom=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.offsetAttribute=void 0,this.arcType=void 0,this.textureCoordinates=void 0}function Cu(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new Pet(e),geometryPropertyName:"polygon",observedPropertyNames:["availability","polygon"]}),this._onEntityPropertyChanged(e,"polygon",e.polygon,void 0)}l(Object.create)&&(Cu.prototype=Object.create(ii.prototype),Cu.prototype.constructor=Cu);Cu.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=this._options,o={show:new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:$n.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof Jt){let s;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(s=this._materialProperty.color.getValue(e,axe)),l(s)||(s=U.WHITE),o.color=Qt.fromColor(s)}l(i.offsetAttribute)&&(o.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,cxe,lxe)));let r;return i.perPositionHeight&&!l(i.extrudedHeight)?r=new yE(i):r=new db(i),new Nt({id:t,geometry:r,attributes:o})};Cu.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=this._options,o=j.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,axe),r=this._distanceDisplayConditionProperty.getValue(e),s={show:new vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Qt.fromColor(o),distanceDisplayCondition:$n.fromDistanceDisplayCondition(r),offset:void 0};l(i.offsetAttribute)&&(s.offset=xo.fromCartesian3(j.getValueOrDefault(this._terrainOffsetProperty,e,cxe,lxe)));let a;return i.perPositionHeight&&!l(i.extrudedHeight)?a=new Sm(i):a=new QE(i),new Nt({id:t,geometry:a,attributes:s})};Cu.prototype._computeCenter=function(e,t){let n=j.getValueOrUndefined(this._entity.polygon.hierarchy,e);if(!l(n))return;let i=n.positions;if(i.length===0)return;let o=this._scene.ellipsoid,r=Gs.fromPoints(i,o),s=r.projectPointsOntoPlane(i,Fet),a=s.length,c=0,d=a-1,u=new M;for(let p=0;p{i.raiseEvent(a)}),n[r]=s}this.updaters=n,this.geometryChanged=i,this.eventHelper=o,this._removeEntitySubscription=e.definitionChanged.addEventListener(rS.prototype._onEntityPropertyChanged,this)}rS.prototype._onEntityPropertyChanged=function(e,t,n,i){let o=this.updaters;for(let r=0;r0){l(i)&&(l(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i);let c;if(l(this.depthFailAppearanceType)){l(this.depthFailMaterialProperty)&&(this.depthFailMaterial=pr.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial));let u=this.depthFailAppearanceType;c=new u({material:this.depthFailMaterial,translucent:this.translucent,closed:this.closed})}let d=this.appearanceType;i=new Nn({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new d({translucent:this.translucent,closed:this.closed}),depthFailAppearance:c,shadows:this.shadows}),o.add(i),t=!1}else{l(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;l(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(l(i)&&i.ready){i.show=!0,l(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0),l(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof Jt)&&(this.depthFailMaterial=pr.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r=0;i--){let o=e[i];if(o.remove(t))return o.updaters.length===0&&(e.splice(i,1),o.destroy()),!0}return!1}hC.prototype.remove=function(e){yxe(this._solidItems,e)||yxe(this._translucentItems,e)};function xxe(e,t,n){let i=!1,o=t.length;for(let r=0;r0)for(r=0;r=0;r--){let s=t[r];if(s.invalidated){t.splice(r,1);let a=s.updaters.values,c=a.length;for(let d=0;d0){l(n)&&(l(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=pr.getValue(e,this.materialProperty,this.material);let a;if(l(this.depthFailMaterialProperty)){this.depthFailMaterial=pr.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial);let d=this.depthFailAppearanceType;a=new d({material:this.depthFailMaterial,translucent:this.depthFailMaterial.isTranslucent(),closed:this.closed})}let c=this.appearanceType;n=new Nn({show:!1,asynchronous:!0,geometryInstances:o.slice(),appearance:new c({material:this.material,translucent:this.material.isTranslucent(),closed:this.closed}),depthFailAppearance:a,shadows:this.shadows}),i.add(n),t=!1}else{l(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;l(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(l(n)&&n.ready){n.show=!0,l(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=pr.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material,l(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof Jt)&&(this.depthFailMaterial=pr.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};fC.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];if(r.invalidated){n.splice(t,1);let s=r.updaters.values,a=s.length;for(let c=0;c0)l(i)&&(l(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i),i=new Ol({show:!1,asynchronous:!0,geometryInstances:s.slice(),classificationType:this.classificationType}),o.add(i,this.zIndex),t=!1;else{l(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;l(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(l(i)&&i.ready){i.show=!0,l(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r=0;--t){let s=o[t];s.isDirty&&(i=o[t].update(e)&&i,s.isDirty=!1),s.geometry.length===0&&o.splice(t,1)}return i};pC.prototype.getBoundingSphere=function(e,t){let n=this._batches,i=n.length;for(let o=0;o0){l(n)&&(l(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=pr.getValue(e,this.materialProperty,this.material);let a=this.appearanceType;n=new Ol({show:!1,asynchronous:!0,geometryInstances:o.slice(),appearance:new a({material:this.material}),classificationType:this.classificationType}),i.add(n,this.zIndex),t=!1}else{l(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;l(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(l(n)&&n.ready){n.show=!0,l(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=pr.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material;let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r=0&&!t[i].remove(e);i--);};gC.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];r.updaters.length===0&&(n.splice(t,1),r.destroy())}let o=!0;for(t=0;t0)l(i)&&(l(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i),i=new Nn({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new yn({flat:!0,translucent:this.translucent,renderState:{lineWidth:this.width}}),shadows:this.shadows}),o.add(i),t=!1;else{l(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;l(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(l(i)&&i.ready){i.show=!0,l(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r0)for(m=!0,t=0;t0)for(m=!0,t=0;t-1;a--)c=s[a],d=c.id,u=this._updaterSets.get(d),u.entity===c?u.forEach(function(y){m._removeUpdater(y),m._insertUpdaterIntoBatch(e,y)}):(o.push(c),n.push(c));for(a=o.length-1;a>-1;a--)c=o[a],d=c.id,u=this._updaterSets.get(d),u.forEach(this._removeUpdater.bind(this)),u.destroy(),this._updaterSets.remove(d),this._subscriptions.get(d)(),this._subscriptions.remove(d);for(a=n.length-1;a>-1;a--)c=n[a],d=c.id,u=new sS(c,this._scene),this._updaterSets.set(d,u),u.forEach(function(y){m._insertUpdaterIntoBatch(e,y)}),this._subscriptions.set(d,u.geometryChanged.addEventListener(vd._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let p=!0,b=this._batches,f=b.length;for(a=0;a-1;s--)c=n[s],a=c.id,i.remove(a)||(o.set(a,c),r.remove(a));for(s=t.length-1;s>-1;s--)c=t[s],a=c.id,o.remove(a)?r.set(a,c):i.set(a,c)};var ZI=vd;var voi=x(T(),1);var ltt=1,dtt="30px sans-serif",utt=fr.FILL,mtt=U.WHITE,htt=U.BLACK,ftt=1,ptt=!1,btt=new U(.165,.165,.165,.8),gtt=new M(7,5),ytt=M.ZERO,xtt=h.ZERO,Ttt=rt.NONE,_tt=Di.CENTER,Stt=zn.CENTER,Ztt=new h,Vtt=new U,Ctt=new U,Rtt=new U,Gtt=new M,Att=new h,Ett=new M,Ltt=new Ht,Wtt=new Ht,vtt=new Ht,Ftt=new Ot;function Sxe(e){this.entity=e,this.label=void 0,this.index=void 0}function rx(e,t){t.collectionChanged.addEventListener(rx.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Mt,this._onCollectionChanged(t,t.values,[],[])}rx.prototype.update=function(e){let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i-1;o--)r=t[o],l(r._label)&&l(r._position)&&s.set(r.id,new Sxe(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._label)&&l(r._position)?s.contains(r.id)||s.set(r.id,new Sxe(r)):(w6(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],w6(s.get(r.id),r,a),s.remove(r.id)};function w6(e,t,n){l(e)&&(e.label=void 0,n.removeLabel(t))}var VI=rx;var ovi=x(T(),1);var Poi=x(T(),1);var TC={HIGHLIGHT:0,REPLACE:1,MIX:2};TC.getColorBlend=function(e,t){if(e===TC.HIGHLIGHT)return 0;if(e===TC.REPLACE)return 1;if(e===TC.MIX)return L.clamp(t,L.EPSILON4,1)};Object.freeze(TC);var ll=TC;var YWi=x(T(),1);var rri=x(T(),1);var woi=x(T(),1);function _C(e,t){this._distance=t,this._normal=new Zxe(e,this),this.onChangeCallback=void 0,this.index=-1}Object.defineProperties(_C.prototype,{distance:{get:function(){return this._distance},set:function(e){l(this.onChangeCallback)&&e!==this._distance&&this.onChangeCallback(this.index),this._distance=e}},normal:{get:function(){return this._normal},set:function(e){l(this.onChangeCallback)&&!h.equals(this._normal._cartesian3,e)&&this.onChangeCallback(this.index),h.clone(e,this._normal._cartesian3)}}});_C.fromPlane=function(e,t){return l(t)?(t.normal=e.normal,t.distance=e.distance):t=new _C(e.normal,e.distance),t};_C.clone=function(e,t){return l(t)?(t.normal=e.normal,t.distance=e.distance,t):new _C(e.normal,e.distance)};function Zxe(e,t){this._clippingPlane=t,this._cartesian3=h.clone(e)}Object.defineProperties(Zxe.prototype,{x:{get:function(){return this._cartesian3.x},set:function(e){l(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.x&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.x=e}},y:{get:function(){return this._cartesian3.y},set:function(e){l(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.y&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.y=e}},z:{get:function(){return this._cartesian3.z},set:function(e){l(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.z&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.z=e}}});var js=_C;function dl(e){e=e??B.EMPTY_OBJECT,this._planes=[],this._dirtyIndex=-1,this._multipleDirtyPlanes=!1,this._enabled=e.enabled??!0,this.modelMatrix=I.clone(e.modelMatrix??I.IDENTITY),this.edgeColor=U.clone(e.edgeColor??U.WHITE),this.edgeWidth=e.edgeWidth??0,this.planeAdded=new Se,this.planeRemoved=new Se,this._owner=void 0;let t=e.unionClippingRegions??!1;this._unionClippingRegions=t,this._testIntersection=t?Axe:Exe,this._uint8View=void 0,this._float32View=void 0,this._clippingPlanesTexture=void 0;let n=e.planes;if(l(n)){let i=n.length;for(let o=0;o0&&(r=jt.OUTSIDE);for(let s=0;s 2) { dimension = ceil(log2(float(u_extentsLength))); } int regionIndex = getPolygonIndex(dimension, v_textureCoordinates); if (regionIndex >= u_extentsLength) { return; // done (no polygons in this region) } for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) { ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex); int positionsLength = positionsLengthAndExtents.x; int polygonExtentsIndex = positionsLengthAndExtents.y; lastPolygonIndex += 1; // Read the individual polygon extent (2 pixels: south/west, latRange/lonRange) vec2 extentsSouthWest = getPolygonPosition(lastPolygonIndex); vec2 extentsRange = getPolygonPosition(lastPolygonIndex + 1); vec4 polygonExtent = vec4(extentsSouthWest, extentsRange); lastPolygonIndex += 2; if (polygonExtentsIndex < regionIndex) { lastPolygonIndex += positionsLength; continue; // skip to next (TODO: could optimize further if we knew how many polygons to skip) } else if (polygonExtentsIndex > regionIndex) { break; // done (we know polygons are sorted by regionIndex) } // Only compute signed distance for the relevant part of the atlas float clipAmount = czm_infinity; vec4 extents = getExtents(polygonExtentsIndex); vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension; vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents); // current pixel position // Only consider polygons whos boundingbox includes current pixel (with a slight padding) float padding = 0.05; // 5% of polygon extents float polygonNorth = polygonExtent.x + polygonExtent.z; float polygonEast = polygonExtent.y + polygonExtent.w; float latPadding = padding * polygonExtent.z; // padding as fraction of latitude range float lonPadding = padding * polygonExtent.w; // padding as fraction of longitude range if (p.x < polygonExtent.x - latPadding || p.x > polygonNorth + latPadding || p.y < polygonExtent.y - lonPadding || p.y > polygonEast + lonPadding) { lastPolygonIndex += positionsLength; continue; // skip to next } float s = 1.0; // Check each edge for absolute distance. // Cache the previous vertex to halve the texture reads per iteration. vec2 prev = getPolygonPosition(lastPolygonIndex + positionsLength - 1); for (int i = 0; i < positionsLength; i++) { vec2 a = getPolygonPosition(lastPolygonIndex + i); vec2 b = prev; prev = a; vec2 ab = b - a; vec2 pa = p - a; float t = dot(pa, ab) / dot(ab, ab); t = clamp(t, 0.0, 1.0); vec2 pq = pa - t * ab; float d = length(pq); // Inside / outside computation to determine sign bvec3 cond = bvec3(p.y >= a.y, p.y < b.y, ab.x * pa.y > ab.y * pa.x); if (all(cond) || all(not(cond))) s = -s; if (abs(d) < abs(clipAmount)) { clipAmount = d; } } // Normalize the range to [0,1] vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5; // In the case where we've iterated through multiple polygons, take the minimum out_FragColor = min(out_FragColor, result); lastPolygonIndex += positionsLength; } }`;function Fs(e){e=e??B.EMPTY_OBJECT,this._polygons=[],this._totalPositions=0,this.debugShowDistanceTexture=e.debugShowDistanceTexture??!1,this.enabled=e.enabled??!0,this.inverse=e.inverse??!1,this.quality=e.quality??1,this.polygonAdded=new Se,this.polygonRemoved=new Se,this._owner=void 0,this._float32View=void 0,this._extentsFloat32View=void 0,this._extentsCount=0,this._polygonsTexture=void 0,this._extentsTexture=void 0,this._signedDistanceTexture=void 0,this._signedDistanceComputeCommand=void 0;let t=e.polygons;if(l(t)){let n=t.length;for(let i=0;iSC.equals(t,e))};Fs.prototype.remove=function(e){let t=this._polygons,n=t.findIndex(i=>SC.equals(i,e));return n===-1?!1:(t.splice(n,1),this.polygonRemoved.raiseEvent(e,n),!0)};function Mtt(e,t,n){let i=Math.max(e.height*t,0),o=Math.max(e.width*t,0),r=re.clone(e,n);return r.south-=i,r.west-=o,r.north+=i,r.east+=o,r.south=Math.max(r.south,-Math.PI),r.west=Math.max(r.west,-Math.PI),r.north=Math.min(r.north,Math.PI),r.east=Math.min(r.east,Math.PI),r}function ktt(e,t){let i=[],o=e.length;for(let a=0;aa.extent),s=new Map;return i.forEach((a,c)=>a.polygonIndices.forEach(d=>s.set(d,c))),{extentsList:r,extentsIndexByPolygon:s}}Fs.prototype.removeAll=function(){let e=this._polygons,t=e.length;for(let n=0;nu.computeSphericalExtents()),{extentsList:r,extentsIndexByPolygon:s}=ktt(i,o),a=Array.from(i.keys()).sort((u,m)=>s.get(u)-s.get(m)),c=0;for(let u of a){let m=i[u],p=m.length;t[c++]=p,t[c++]=s.get(u);let b=o[u];t[c++]=b.south,t[c++]=b.west,t[c++]=b.north-b.south,t[c++]=b.east-b.west;for(let f=0;fs+a.length,0);if(n===this.totalPositions||(this._totalPositions=n,this.length===0))return;l(this._signedDistanceComputeCommand)&&(this._signedDistanceComputeCommand.canceled=!0,this._signedDistanceComputeCommand=void 0);let i=this._polygonsTexture,o=this._extentsTexture,r=this._signedDistanceTexture;if(l(i)){let s=i.width*i.height;(s 0.5) { out_FragColor = vec4(dist, 0.0, 0.0, 1.0); } else { out_FragColor = vec4(0.0, dist, 0.0, 1.0); } } `,{uniformMap:{billboard_texture:function(){return e}}});return i.pass=We.OVERLAY,i}Fs.prototype.queueCommands=function(e){l(this._signedDistanceComputeCommand)&&e.commandList.push(this._signedDistanceComputeCommand)};function Ott(e){let t=e._polygonsTexture,n=e._extentsTexture;return new Yl({fragmentShaderSource:CI,outputTexture:e._signedDistanceTexture,uniformMap:{u_polygonsLength:function(){return e.length},u_extentsLength:function(){return e.extentsCount},u_extentsTexture:function(){return n},u_polygonTexture:function(){return t}},persists:!1,owner:e,postExecute:()=>{e._signedDistanceComputeCommand=void 0}})}var Ixe=new re,Btt=new re,ztt=new re;Fs.prototype.computeIntersectionWithBoundingVolume=function(e,t){let n=this._polygons,i=n.length,o=jt.OUTSIDE;this.inverse&&(o=jt.INSIDE);let r=e.rectangle;if(!l(r)&&l(e.boundingVolume?.computeCorners)){let s=e.boundingVolume.computeCorners();r=re.fromCartesianArray(s,t,Ixe)}l(r)||(r=re.fromBoundingSphere(e.boundingSphere,t,Ixe));for(let s=0;s= PRIMARY_STEPS) { break; } // Calculate sample position along viewpoint ray. vec3 samplePosition = primaryRay.origin + primaryRay.direction * (rayPositionLength + rayStepLength); // Calculate height of sample position above ellipsoid. float sampleHeight = length(samplePosition) - atmosphereInnerRadius; // Calculate and accumulate density of particles at the sample position. vec2 sampleDensity = exp(-sampleHeight / heightScale) * rayStepLength; opticalDepth += sampleDensity; // Generate ray from the sample position segment to the light source, up to the outer ring of the atmosphere. czm_ray lightRay = czm_ray(samplePosition, lightDirection); czm_raySegment lightRayAtmosphereIntersect = czm_raySphereIntersectionInterval(lightRay, origin, atmosphereOuterRadius); float lightStepLength = lightRayAtmosphereIntersect.stop / float(LIGHT_STEPS); float lightPositionLength = 0.0; vec2 lightOpticalDepth = vec2(0.0); // Sample positions along the light ray, to accumulate incidence of light on the latest sample segment. for (int j = 0; j < LIGHT_STEPS_MAX; ++j) { // The loop should be: for (int j = 0; i < LIGHT_STEPS; ++j) {...} but WebGL1 cannot // loop with non-constant condition, so it has to break early instead if (j >= LIGHT_STEPS) { break; } // Calculate sample position along light ray. vec3 lightPosition = samplePosition + lightDirection * (lightPositionLength + lightStepLength * 0.5); // Calculate height of the light sample position above ellipsoid. float lightHeight = length(lightPosition) - atmosphereInnerRadius; // Calculate density of photons at the light sample position. lightOpticalDepth += exp(-lightHeight / heightScale) * lightStepLength; // Increment distance on light ray. lightPositionLength += lightStepLength; } // Compute attenuation via the primary ray and the light ray. vec3 attenuation = exp(-((u_atmosphereMieCoefficient * (opticalDepth.y + lightOpticalDepth.y)) + (u_atmosphereRayleighCoefficient * (opticalDepth.x + lightOpticalDepth.x)))); // Accumulate the scattering. rayleighAccumulation += sampleDensity.x * attenuation; mieAccumulation += sampleDensity.y * attenuation; // Increment distance on primary ray. rayPositionLength += (rayStepLength += rayStepLengthIncrease); } // Compute the scattering amount. rayleighColor = u_atmosphereRayleighCoefficient * rayleighAccumulation; mieColor = u_atmosphereMieCoefficient * mieAccumulation; // Compute the transmittance i.e. how much light is passing through the atmosphere. opacity = length(exp(-((u_atmosphereMieCoefficient * opticalDepth.y) + (u_atmosphereRayleighCoefficient * opticalDepth.x)))); } vec4 computeAtmosphereColor( vec3 positionWC, vec3 lightDirection, vec3 rayleighColor, vec3 mieColor, float opacity ) { // Setup the primary ray: from the camera position to the vertex position. vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); float cosAngle = dot(cameraToPositionWCDirection, lightDirection); float cosAngleSq = cosAngle * cosAngle; float G = u_atmosphereMieAnisotropy; float GSq = G * G; // The Rayleigh phase function. float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq); // The Mie phase function. float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq)); // The final color is generated by combining the effects of the Rayleigh and Mie scattering. vec3 rayleigh = rayleighPhase * rayleighColor; vec3 mie = miePhase * mieColor; vec3 color = (rayleigh + mie) * u_atmosphereLightIntensity; return vec4(color, opacity); } `;var jri=x(T(),1),RI=`uniform samplerCube u_radianceMap; in vec2 v_textureCoordinates; const float twoSqrtPi = 2.0 * sqrt(czm_pi); // Coutesy of https://www.ppsloan.org/publications/StupidSH36.pdf float computeShBasis(int index, vec3 s) { if (index == 0) { // l = 0, m = 0 return 1.0 / twoSqrtPi; } if (index == 1) { // l = 1, m = -1 return -sqrt(3.0) * s.y / twoSqrtPi; } if (index == 2) { // l = 1, m = 0 return sqrt(3.0) * s.z / twoSqrtPi; } if (index == 3) { // l = 1, m = 1 return -sqrt(3.0) * s.x / twoSqrtPi; } if (index == 4) { // l = 2, m = -2 return sqrt(15.0) * s.y * s.x / twoSqrtPi; } if (index == 5) { // l = 2, m = -1 return -sqrt(15.0) * s.y * s.z / twoSqrtPi; } if (index == 6) { // l = 2, m = 0 return sqrt(5.0) * (3.0 * s.z * s.z - 1.0) / 2.0 / twoSqrtPi; } if (index == 7) { // l = 2, m = 1 return -sqrt(15.0) * s.x * s.z / twoSqrtPi; } if (index == 8) { // l = 2, m = 2 return sqrt(15.0) * (s.x * s.x - s.y * s.y) / 2.0 / twoSqrtPi; } return 0.0; } float vdcRadicalInverse(int i) { float r; float base = 2.0; float value = 0.0; float invBase = 1.0 / base; float invBi = invBase; for (int x = 0; x < 100; x++) { if (i <= 0) { break; } r = mod(float(i), base); value += r * invBi; invBi *= invBase; i = int(float(i) * invBase); } return value; } vec2 hammersley2D(int i, int N) { return vec2(float(i) / float(N), vdcRadicalInverse(i)); } // Sample count is relatively low for the sake of performance, but should still be enough to capture directionality needed for third-order harmonics const int samples = 256; const float solidAngle = 1.0 / float(samples); void main() { // Get the current coefficient based on the uv vec2 uv = v_textureCoordinates.xy * 3.0; int coefficientIndex = int(floor(uv.y) * 3.0 + floor(uv.x)); for (int i = 0; i < samples; ++i) { vec2 xi = hammersley2D(i, samples); float phi = czm_twoPi * xi.x; float cosTheta = 1.0 - 2.0 * sqrt(1.0 - xi.y * xi.y); float sinTheta = sqrt(1.0 - cosTheta * cosTheta); vec3 direction = normalize(vec3(sinTheta * cos(phi), cosTheta, sinTheta * sin(phi))); // Generate the spherical harmonics basis from the direction float Ylm = computeShBasis(coefficientIndex, direction); vec3 lookupDirection = -direction.xyz; lookupDirection.z = -lookupDirection.z; vec4 color = czm_textureCube(u_radianceMap, lookupDirection, 0.0); // Use the relevant function for this coefficient out_FragColor += Ylm * color * solidAngle * sinTheta; } } `;var qri=x(T(),1),GI=`precision highp float; in vec2 v_textureCoordinates; uniform vec3 u_faceDirection; // Current cubemap face uniform vec3 u_positionWC; uniform mat4 u_enuToFixedFrame; uniform vec4 u_brightnessSaturationGammaIntensity; uniform vec4 u_groundColor; // alpha component represent albedo vec4 getCubeMapDirection(vec2 uv, vec3 faceDir) { vec2 scaledUV = uv * 2.0 - 1.0; if (faceDir.x != 0.0) { return vec4(faceDir.x, scaledUV.x * faceDir.x, -scaledUV.y, 0.0); } else if (faceDir.y != 0.0) { return vec4(scaledUV.x, -scaledUV.y * faceDir.y, faceDir.y, 0.0); } else { return vec4(scaledUV.x * faceDir.z, -faceDir.z, -scaledUV.y, 0.0); } } void main() { float height = length(u_positionWC); float atmosphereInnerRadius = u_radiiAndDynamicAtmosphereColor.y; float ellipsoidHeight = max(height - atmosphereInnerRadius, 0.0); // Scale the position to ensure the sky color is present, even when underground. vec3 positionWC = u_positionWC / height * (ellipsoidHeight + atmosphereInnerRadius); float atmosphereOuterRadius = u_radiiAndDynamicAtmosphereColor.x; float atmosphereHeight = atmosphereOuterRadius - atmosphereInnerRadius; vec3 direction = (u_enuToFixedFrame * getCubeMapDirection(v_textureCoordinates, u_faceDirection)).xyz; vec3 normalizedDirection = normalize(direction); czm_ray ray = czm_ray(positionWC, normalizedDirection); czm_raySegment intersection = czm_raySphereIntersectionInterval(ray, vec3(0.0), atmosphereInnerRadius); if (!czm_isEmpty(intersection)) { intersection = czm_rayEllipsoidIntersectionInterval(ray, vec3(0.0), czm_ellipsoidInverseRadii); } bool onEllipsoid = intersection.start >= 0.0; float rayLength = czm_branchFreeTernary(onEllipsoid, intersection.start, atmosphereOuterRadius); // Compute sky color for each position on a sphere at radius centered around the provided position's origin vec3 skyPositionWC = positionWC + normalizedDirection * rayLength; float lightEnum = u_radiiAndDynamicAtmosphereColor.z; vec3 lightDirectionWC = normalize(czm_getDynamicAtmosphereLightDirection(skyPositionWC, lightEnum)); vec3 mieColor; vec3 rayleighColor; float opacity; czm_computeScattering( ray, rayLength, lightDirectionWC, atmosphereInnerRadius, rayleighColor, mieColor, opacity ); vec4 atmopshereColor = czm_computeAtmosphereColor(ray, lightDirectionWC, rayleighColor, mieColor, opacity); #ifdef ATMOSPHERE_COLOR_CORRECT const bool ignoreBlackPixels = true; atmopshereColor.rgb = czm_applyHSBShift(atmopshereColor.rgb, czm_atmosphereHsbShift, ignoreBlackPixels); #endif vec3 lookupDirection = -normalizedDirection; // Flipping the X vector is a cheap way to get the inverse of czm_temeToPseudoFixed, since that's a rotation about Z. lookupDirection.x = -lookupDirection.x; lookupDirection = -normalize(czm_temeToPseudoFixed * lookupDirection); lookupDirection.x = -lookupDirection.x; // Values outside the atmopshere are rendered as black, when they should be treated as transparent float skyAlpha = clamp((1.0 - ellipsoidHeight / atmosphereHeight) * atmopshereColor.a, 0.0, 1.0); skyAlpha = czm_branchFreeTernary(length(atmopshereColor.rgb) <= czm_epsilon7, 0.0, skyAlpha); // Treat black as transparent // Blend starmap with atmopshere scattering float intensity = u_brightnessSaturationGammaIntensity.w; vec4 sceneSkyBoxColor = czm_textureCube(czm_environmentMap, lookupDirection); vec3 skyBackgroundColor = mix(czm_backgroundColor.rgb, sceneSkyBoxColor.rgb, sceneSkyBoxColor.a); vec4 combinedSkyColor = vec4(mix(skyBackgroundColor, atmopshereColor.rgb * intensity, skyAlpha), 1.0); // Compute ground color based on amount of reflected light, then blend it with ground atmosphere based on height vec3 up = normalize(positionWC); float occlusion = max(dot(lightDirectionWC, up), 0.05); vec4 groundColor = vec4(u_groundColor.rgb * u_groundColor.a * (vec3(intensity * occlusion) + atmopshereColor.rgb), 1.0); vec4 blendedGroundColor = mix(groundColor, atmopshereColor, clamp(ellipsoidHeight / atmosphereHeight, 0.0, 1.0)); vec4 color = czm_branchFreeTernary(onEllipsoid, blendedGroundColor, combinedSkyColor); float brightness = u_brightnessSaturationGammaIntensity.x; float saturation = u_brightnessSaturationGammaIntensity.y; float gamma = u_brightnessSaturationGammaIntensity.z; #ifdef ENVIRONMENT_COLOR_CORRECT color.rgb = mix(vec3(0.0), color.rgb, brightness); color.rgb = czm_saturation(color.rgb, saturation); #endif color.rgb = pow(color.rgb, vec3(gamma)); // Normally this would be in the ifdef above, but there is a precision issue with the atmopshere scattering transmittance (alpha). Having this line is a workaround for that issue, even when gamma is 1.0. color.rgb = czm_gammaCorrect(color.rgb); out_FragColor = color; } `;var esi=x(T(),1),AI=`precision highp float; in vec3 v_textureCoordinates; uniform float u_roughness; uniform samplerCube u_radianceTexture; uniform vec3 u_faceDirection; float vdcRadicalInverse(int i) { float r; float base = 2.0; float value = 0.0; float invBase = 1.0 / base; float invBi = invBase; for (int x = 0; x < 100; x++) { if (i <= 0) { break; } r = mod(float(i), base); value += r * invBi; invBi *= invBase; i = int(float(i) * invBase); } return value; } vec2 hammersley2D(int i, int N) { return vec2(float(i) / float(N), vdcRadicalInverse(i)); } vec3 importanceSampleGGX(vec2 xi, float alphaRoughness, vec3 N) { float alphaRoughnessSquared = alphaRoughness * alphaRoughness; float phi = czm_twoPi * xi.x; float cosTheta = sqrt((1.0 - xi.y) / (1.0 + (alphaRoughnessSquared - 1.0) * xi.y)); float sinTheta = sqrt(1.0 - cosTheta * cosTheta); vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta); vec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); vec3 tangentX = normalize(cross(upVector, N)); vec3 tangentY = cross(N, tangentX); return tangentX * H.x + tangentY * H.y + N * H.z; } // Sample count is relatively low for the sake of performance, but should still be enough to prevent artifacting in lower roughnesses const int samples = 128; void main() { vec3 normal = u_faceDirection; vec3 V = normalize(v_textureCoordinates); float roughness = u_roughness; vec4 color = vec4(0.0); float weight = 0.0; for (int i = 0; i < samples; ++i) { vec2 xi = hammersley2D(i, samples); vec3 H = importanceSampleGGX(xi, roughness, V); vec3 L = 2.0 * dot(V, H) * H - V; // reflected vector float NdotL = max(dot(V, L), 0.0); if (NdotL > 0.0) { color += vec4(czm_textureCube(u_radianceTexture, L).rgb, 1.0) * NdotL; weight += NdotL; } } out_FragColor = color / weight; } `;var nsi=x(T(),1),EI=`in vec3 position; out vec3 v_textureCoordinates; uniform vec3 u_faceDirection; vec3 getCubeMapDirection(vec2 uv, vec3 faceDir) { vec2 scaledUV = uv; if (faceDir.x != 0.0) { return vec3(faceDir.x, scaledUV.y, scaledUV.x * faceDir.x); } else if (faceDir.y != 0.0) { return vec3(scaledUV.x, -faceDir.y, -scaledUV.y * faceDir.y); } else { return vec3(scaledUV.x * faceDir.z, scaledUV.y, -faceDir.z); } } void main() { v_textureCoordinates = getCubeMapDirection(position.xy, u_faceDirection); v_textureCoordinates.y = -v_textureCoordinates.y; v_textureCoordinates.z = -v_textureCoordinates.z; gl_Position = vec4(position, 1.0); } `;function Si(e){this._position=void 0,this._radianceMapDirty=!1,this._radianceCommandsDirty=!1,this._convolutionsCommandsDirty=!1,this._irradianceCommandDirty=!1,this._irradianceTextureDirty=!1,this._sphericalHarmonicCoefficientsDirty=!1,this._shouldRegenerateShaders=!1,this._shouldReset=!1,e=e??B.EMPTY_OBJECT;let t=Math.max(Math.floor(Math.min(e.mipmapLevels??7,Math.log2(Xt.maximumCubeMapSize))),0);this._mipmapLevels=t;let n=Math.max(t-1,0)*6;this._radianceMapComputeCommands=new Array(6),this._convolutionComputeCommands=new Array(n),this._irradianceComputeCommand=void 0,this._radianceMapFS=void 0,this._irradianceMapFS=void 0,this._convolveSP=void 0,this._va=void 0,this._radianceMapTextures=new Array(6),this._specularMapTextures=new Array(n),this._radianceCubeMap=void 0,this._irradianceMapTexture=void 0,this._sphericalHarmonicCoefficients=Si.DEFAULT_SPHERICAL_HARMONIC_COEFFICIENTS.slice(),this._lastTime=new Q;let i=Math.max(Math.pow(2,t-1),1);this._textureDimensions=new M(i,i),this._radiiAndDynamicAtmosphereColor=new h,this._sceneEnvironmentMap=void 0,this._backgroundColor=void 0,this._owner=void 0,this.enabled=e.enabled??!0,this.shouldUpdate=!0,this.maximumSecondsDifference=e.maximumSecondsDifference??3600,this.maximumPositionEpsilon=e.maximumPositionEpsilon??1e3,this.atmosphereScatteringIntensity=e.atmosphereScatteringIntensity??2,this.gamma=e.gamma??1,this.brightness=e.brightness??1,this.saturation=e.saturation??1,this.groundColor=e.groundColor??Si.AVERAGE_EARTH_GROUND_COLOR,this.groundAlbedo=e.groundAlbedo??.31}Object.defineProperties(Si.prototype,{owner:{get:function(){return this._owner}},shouldRegenerateShaders:{get:function(){return this._shouldRegenerateShaders}},position:{get:function(){return this._position},set:function(e){h.equalsEpsilon(e,this._position,0,this.maximumPositionEpsilon)||(this._position=h.clone(e,this._position),this._shouldReset=!0)}},radianceCubeMap:{get:function(){return this._radianceCubeMap}},maximumMipmapLevel:{get:function(){return this._mipmapLevels}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients}}});Si._maximumComputeCommandCount=8;Si._activeComputeCommandCount=0;Si._nextFrameCommandQueue=[];Si._queueCommand=(e,t)=>{if(Si._activeComputeCommandCount>=Si._maximumComputeCommandCount){Si._nextFrameCommandQueue.push(e);return}t.commandList.push(e),Si._activeComputeCommandCount++};Si._updateCommandQueue=e=>{if(Si._maximumComputeCommandCount=Math.log2(Xt.maximumCubeMapSize),Si._nextFrameCommandQueue.length>0&&Si._activeComputeCommandCounts,u_enuToFixedFrame:()=>c,u_faceDirection:()=>Jr.getDirection(m,Xxe),u_positionWC:()=>r,u_brightnessSaturationGammaIntensity:()=>d,u_groundColor:()=>e.groundColor.withAlpha(e.groundAlbedo,qtt)},owner:e});f.postExecute=()=>{if(e.isDestroyed()||f.canceled){Si._activeComputeCommandCount--;return}let y=e._radianceMapComputeCommands;y[b]=void 0;let _=new ps({context:n,colorTextures:[e._radianceMapTextures[b]]});_._bind(),e._radianceCubeMap[m].copyFromFramebuffer(),_._unBind(),_.destroy(),Si._activeComputeCommandCount--,y.some(l)||(e._convolutionsCommandsDirty=!0,e._shouldRegenerateShaders=!0)},e._radianceMapComputeCommands[u]=f,Si._queueCommand(f,t),u++}e._radianceCommandsDirty=!1}}function ent(e,t){let n=e._radianceCubeMap;n.generateMipmap();let i=e._mipmapLevels,o=e._textureDimensions,r=o.x/2,s=o.y/2,a=t.context,c=0,d=()=>{let p=e._specularMapTextures.length;c>=p&&(e._irradianceCommandDirty=!0,i>1&&(n.sampler=new kt({minificationFilter:zt.LINEAR_MIPMAP_LINEAR}),e._shouldRegenerateShaders=!0,e._va.destroy(),e._va=void 0,e._convolveSP.destroy(),e._convolveSP=void 0))},u=(p,b,f,y,_)=>()=>{if(e.isDestroyed()||p.canceled){Si._activeComputeCommandCount--;return}let S=e._convolutionComputeCommands;S[b]=void 0,n.copyFace(t,f,y,_),c++,Si._activeComputeCommandCount--,f.destroy(),e._specularMapTextures[b]=void 0,d()},m=0;for(let p=1;pp/(i-1),u_radianceTexture:()=>n??a.defaultTexture,u_faceDirection:()=>Jr.getDirection(b,Xxe)}});S.postExecute=u(S,m,f,b,p),e._convolutionComputeCommands[m]=S,Si._queueCommand(S,t),++m}r/=2,s/=2}d()}var Nxe=new M(3,3);function tnt(e,t){let n=t.context,i=Nxe,o=e._irradianceMapTexture;l(o)&&!o.isDestroyed()&&o.destroy(),o=new Ct({context:n,width:i.x,height:i.y,pixelDatatype:Me.FLOAT,pixelFormat:Be.RGBA}),e._irradianceMapTexture=o;let r=e._irradianceMapFS;l(r)||(r=new ze({sources:[RI]}),e._irradianceMapFS=r);let s=new Yl({fragmentShaderSource:r,outputTexture:o,owner:e,uniformMap:{u_radianceMap:()=>e._radianceCubeMap??n.defaultTexture}});s.postExecute=()=>{if(e.isDestroyed()||s.canceled){Si._activeComputeCommandCount--;return}e._irradianceTextureDirty=!1,e._irradianceComputeCommand=void 0,e._sphericalHarmonicCoefficientsDirty=!0,e._irradianceMapFS=void 0,Si._activeComputeCommandCount--},e._irradianceComputeCommand=s,Si._queueCommand(s,t),e._irradianceTextureDirty=!0}function nnt(e,t){let n=t.context;if(!l(e._irradianceMapTexture))return;let i=new ps({context:n,colorTextures:[e._irradianceMapTexture],destroyAttachments:!1}),o=Nxe,r=n.readPixels({x:0,y:0,width:o.x,height:o.y,framebuffer:i});for(let s=0;s<9;++s)e._sphericalHarmonicCoefficients[s]=h.unpack(r,s*4),h.multiplyByScalar(e._sphericalHarmonicCoefficients[s],e.atmosphereScatteringIntensity,e._sphericalHarmonicCoefficients[s]);i.destroy(),e._irradianceMapTexture.destroy(),e._irradianceMapTexture=void 0,e._shouldRegenerateShaders=!0}Si.prototype.update=function(e){let t=e.mode;if(!(Si.isDynamicUpdateSupported(e)&&this._mipmapLevels>=1)||!this.enabled||!this.shouldUpdate||!l(this._position)||t===se.MORPHING){this._shouldRegenerateShaders=!1;return}Si._updateCommandQueue(e);let i=e.atmosphere.dynamicLighting,o=Jtt(this,e)||i===Pb.SUNLIGHT&&!Q.equalsEpsilon(e.time,this._lastTime,this.maximumSecondsDifference);if(this._shouldReset||o){this.reset(),this._shouldReset=!1,this._lastTime=Q.clone(e.time,this._lastTime);return}if(this._radianceMapDirty&&($tt(this,e),this._radianceMapDirty=!1),this._convolutionsCommandsDirty&&(ent(this,e),this._convolutionsCommandsDirty=!1),this._irradianceCommandDirty&&(tnt(this,e),this._irradianceCommandDirty=!1),this._irradianceTextureDirty){this._shouldRegenerateShaders=!1;return}if(this._sphericalHarmonicCoefficientsDirty){nnt(this,e),this._sphericalHarmonicCoefficientsDirty=!1;return}this._shouldRegenerateShaders=!1};Si.prototype.isDestroyed=function(){return!1};Si.prototype.destroy=function(){let e=this._radianceMapComputeCommands.length;for(let t=0;tXt.maximumTextureSize||a>Xt.maximumTextureSize){gt("PropertyTableTextureExceedsMaximumSize",`Cannot create a texture for the property table "${e.name}" because it exceeds the maximum texture size of ${Xt.maximumTextureSize}.`);return}let c=cnt(s,r),d=new kt({wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:zt.NEAREST,magnificationFilter:ni.NEAREST});return Ct.create({context:i,pixelFormat:Be.RGBA,pixelDatatype:Me.UNSIGNED_BYTE,sampler:d,flipY:!1,source:{width:r,height:a,arrayBufferView:c}})}function snt(e,t,n,i){let o=[],r=n.properties;for(let[s,a]of Object.entries(r)){if(!a.isGpuCompatible(FI))continue;let c=e[s],d=l(c)?t[c.values]:ant(a,i),u=d.length,m=a.cpuBytesPerElement(),p=u/m;if(p!==i)throw new ae(`Property with ID: "${s}" has (${p}), which does not match number of features in the property table: (${i}).`);o.push({view:d,classProperty:a})}return o}function ant(e,t){let n=e.noData,i=yt.getComponentCount(e.type),o=e.isArray?e.arrayLength:1;e.type===yt.ENUM&&(n=e.enumType.valuesByName[n]),i===1&&(n=[n]),o===1&&(n=[n]);let r=e.cpuBytesPerElement(),s=Pt.getSizeInBytes(e.valueType),a=new ArrayBuffer(r*t),c=new DataView(a),d=Pt.getDataViewAccessors(c,e.valueType);for(let u=0;u=r;)S=o[S-r];o.push(S),s[y]=_}_>Gnt&&(t instanceof Uint16Array||t instanceof Uint8Array)?t=new Uint32Array(t):_>Ant&&t instanceof Uint8Array&&(t=new Uint16Array(t)),y===c?(c=_,t[a]=_):y===d?(d=_,t[a+1]=_):(u=_,t[a+2]=_),y=Dxe(i,c,d,u,p,b,f)}}e._triangleIndices=t,e._outlineCoordinatesTypedArray=new Float32Array(i)}function Dxe(e,t,n,i,o,r,s){let a=s?1:0,c=o?1:0,d=0,u=B6(e,t,a,c,d);if(u===0)return t;let m=0,p=o?1:0,b=r?1:0,f=B6(e,n,m,p,b);if(f===0)return n;let y=s?1:0,_=0,S=r?1:0,Z=B6(e,i,y,_,S);if(Z===0)return i;let V=u&f&Z,C,G,E;if(V&1)C=0,G=1,E=2;else if(V&2)C=0,E=1,G=2;else if(V&4)G=0,C=1,E=2;else if(V&8)G=0,E=1,C=2;else if(V&16)E=0,C=1,G=2;else if(V&32)E=0,G=1,C=2;else{let N=z6(u),g=z6(f),R=z6(Z);return N>1&1)+(e>>2&1)+(e>>3&1)+(e>>4&1)+(e>>5&1)}zO.prototype.updateAttribute=function(e){let t=this._extraVertices,n=e.length,i=n/this._originalVertexCount,o=t.length,r=e.constructor,s=new r(e.length+o*i);s.set(e);for(let a=0;a1;)i>>=1,r.push(Oxe(i));let s=new Ct({context:e,source:{arrayBufferView:o,mipLevels:r},width:n,height:1,pixelFormat:Be.LUMINANCE,sampler:new kt({wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR_MIPMAP_LINEAR,magnificationFilter:ni.LINEAR})});return t.outlineTexture=s,s};function Oxe(e){let t=new Uint8Array(e);return t[e-1]=192,e===8?t[e-1]=96:e===4?t[e-1]=48:e===2?t[e-1]=24:e===1&&(t[e-1]=12),t}function Bxe(e,t){this._originalVertexCount=t,this._edges=new Set;for(let n=0;n{this._resourcesLoaded=!0}).catch(r=>{this._processError=r})),l(this._processError)){this._state=nr.FAILED;let r=this._processError;this._processError=void 0,KO(this,r)}let n=this._textureErrors.pop();if(l(n)){let r=this.getError("Failed to load glTF texture",n);throw r.name="TextureError",r}if(this._state===nr.FAILED)return!1;let i=!1;try{i=this._process(t)}catch(r){this._state=nr.FAILED,KO(this,r)}let o=!1;try{o=this._processTextures(t)}catch(r){this._textureState=nr.FAILED,KO(this,r)}return this._incrementallyLoadTextures?i:i&&o}isUnloaded(){return this._state===nr.UNLOADED}unload(){l(this._gltfJsonLoader)&&!this._gltfJsonLoader.isDestroyed()&&Pi.unload(this._gltfJsonLoader),this._gltfJsonLoader=void 0,Aot(this),iTe(this),Eot(this),Lot(this),Wot(this),vot(this),this._components=void 0,this._typedArray=void 0,this._state=nr.UNLOADED}};async function fit(e){e._state=nr.LOADING,e._textureState=nr.LOADING;try{let t=Pi.getGltfJsonLoader({gltfResource:e._gltfResource,baseResource:e._baseResource,typedArray:e._typedArray,gltfJson:e._gltfJson});return e._gltfJsonLoader=t,await t.load(),e.isDestroyed()||e.isUnloaded()||t.isDestroyed()?void 0:(e._state=nr.LOADED,e._textureState=nr.LOADED,e)}catch(t){if(e.isDestroyed())return;e._state=nr.FAILED,e._textureState=nr.FAILED,KO(e,t)}}async function pit(e,t){hn.supportsWebP.initialized||await hn.supportsWebP.initialize(),e._supportedImageFormats=new NI({webp:hn.supportsWebP(),basis:t.context.supportsBasis});let n=Got(e,t);return e._state=nr.PROCESSING,e._textureState=nr.PROCESSING,l(e._gltfJsonLoader)&&e._releaseGltfJson&&(Pi.unload(e._gltfJsonLoader),e._gltfJsonLoader=void 0),n}function KO(e,t){throw e.unload(),e.getError("Failed to load glTF",t)}function bit(e,t){let n=!0,i=e._geometryLoaders;for(let s=0;s{if(e.isDestroyed())return;let s=j6(o,t,i.typedArray);n.set(s)});return e._loaderPromises.push(r),n}function Fd(e,t){if(l(t))return e===Number?t[0]:e.unpack(t)}function Vit(e){return e===Number?0:new e}function Cit(e){switch(e){case J.BYTE:return 127;case J.UNSIGNED_BYTE:return 255;case J.SHORT:return 32767;case J.UNSIGNED_SHORT:return 65535;default:return 1}}var Rit={VEC2:new M(-1,-1),VEC3:new h(-1,-1,-1),VEC4:new ce(-1,-1,-1,-1)};function Git(e,t){let n=Cit(e.componentDatatype),i=Rit[e.type],o=e.min;l(o)&&(o=t.divideByScalar(o,n,o),o=t.maximumByComponent(o,i,o));let r=e.max;l(r)&&(r=t.divideByScalar(r,n,r),r=t.maximumByComponent(r,i,r)),e.min=o,e.max=r}function Ait(e,t,n){let i=e.decodeMatrix,o=Fd(n,e.decodedMin),r=Fd(n,e.decodedMax);l(o)&&l(r)&&(t.min=o,t.max=r);let s=new Zn.Quantization;s.componentDatatype=t.componentDatatype,s.type=t.type,i.length===4?(s.quantizedVolumeOffset=i[2],s.quantizedVolumeStepSize=i[0]):i.length===9?(s.quantizedVolumeOffset=new M(i[6],i[7]),s.quantizedVolumeStepSize=new M(i[0],i[4])):i.length===16?(s.quantizedVolumeOffset=new h(i[12],i[13],i[14]),s.quantizedVolumeStepSize=new h(i[0],i[5],i[10])):i.length===25&&(s.quantizedVolumeOffset=new ce(i[20],i[21],i[22],i[23]),s.quantizedVolumeStepSize=new ce(i[0],i[6],i[12],i[18])),t.quantization=s}function Eit(e,t,n,i,o){let r=e.accessors[t],s=Dt.getMathType(r.type),a=r.normalized??!1,c=new Dnt;c.name=n,c.semantic=i,c.setIndex=o,c.constant=Vit(s),c.componentDatatype=r.componentType,c.normalized=a,c.count=r.count,c.type=r.type,c.min=Fd(s,r.min),c.max=Fd(s,r.max),c.byteOffset=r.byteOffset,c.byteStride=_d(e,r),Qi(r,"WEB3D_quantized_attributes")&&Ait(r.extensions.WEB3D_quantized_attributes,c,s);let d=c.semantic===st.POSITION||c.semantic===st.NORMAL||c.semantic===st.TANGENT||c.semantic===st.TEXCOORD||c.semantic===st.FEATURE_ID||c.semantic===st.SCALE||c.semantic===st.ROTATION;return e.extensionsRequired?.includes("KHR_mesh_quantization")&&a&&d&&Git(c,s),c}function cTe(e){let n=/^\w+_(\d+)$/.exec(e);if(n!==null)return parseInt(n[1])}var Lit={gltfSemantic:void 0,renamedSemantic:void 0,modelSemantic:void 0};function Q6(e,t,n){let i=n;e._renameBatchIdSemantic&&(n==="_BATCHID"||n==="BATCHID")&&(i="_FEATURE_ID_0");let o=t.fromGltfSemantic(i),r=Lit;return r.gltfSemantic=n,r.renamedSemantic=i,r.modelSemantic=o,r}function Wit(e){let t=e===st.POSITION,n=e===st.FEATURE_ID,i=e===st.TEXCOORD;return t||n||i}function vit(e,t,n,i){if(e.byteOffset=0,e.byteStride=void 0,e.quantization=t.quantization,n&&(e.buffer=t.buffer),i){let o=l(t.quantization)?t.quantization.componentDatatype:e.componentDatatype;e.typedArray=J.createArrayBufferView(o,t.typedArray.buffer)}}function Fit(e,t,n,i){if(e.byteOffset=0,e.byteStride=void 0,n&&(e.buffer=t.buffer),i&&l(t.typedArray)&&(e.typedArray=J.createArrayBufferView(e.componentDatatype,t.typedArray.buffer)),e.semantic===st.POSITION){let o=s=>{let a=1/0,c=-1/0,d=1/0,u=-1/0,m=1/0,p=-1/0;for(let b=0;b{l(o)&&l(o.attributes)&&l(o.attributes[p])?vit(S,Z,s,a):l(r)?Fit(S,Z,s,a):Iit(d,u,S,Z,s,a)},S}function dTe(e,t,n,i,o,r,s,a,c){let d=n.modelSemantic,u=d===st.POSITION,m=d===st.FEATURE_ID,p=u&&!s&&e._loadAttributesFor2D&&!c.scene3DOnly,b=u&&e._enablePick&&!c.context.webgl2,f=e._loadForClassification&&m,y=e._loadAttributesAsTypedArray,_=!y,S=y||p||b||f,C=lTe(e,t,n,i,o,r,a?!1:_,a?!0:S,c),G=new mS.AttributeLoadPlan(C);return G.loadBuffer=_,G.loadTypedArray=S,G}function Pit(e,t,n,i,o){let r=e.gltfJson.accessors,s=l(n.ROTATION),a=l(n.TRANSLATION)&&l(r[n.TRANSLATION].min)&&l(r[n.TRANSLATION].max),c=Q6(e,Er,i),d=c.modelSemantic,u=d===Er.TRANSLATION||d===Er.ROTATION||d===Er.SCALE,m=d===Er.TRANSLATION,p=e._loadAttributesAsTypedArray||s&&u||!o.context.instancedArrays,b=e._enablePick&&!o.context.webgl2,f=!p,y=e._loadAttributesFor2D&&!o.scene3DOnly;return lTe(e,t,c,void 0,void 0,void 0,f,p||m&&(!a||y||b),o)}function Xit(e,t,n,i,o,r){let s=e.gltfJson.accessors[t],a=s.bufferView,c=n.extensions??B.EMPTY_OBJECT,d=c.KHR_draco_mesh_compression,u=l(c.EXT_mesh_primitive_edge_visibility);if(!l(d)&&!l(a))return;let m=new Ont;m.count=s.count;let p=e._loadAttributesAsTypedArray,b=(e._loadIndicesForWireframe||e._enablePick)&&!r.context.webgl2,f=e._loadForClassification&&i,_=!p,S=p||b||f||u,C=Tit(e,t,n,d,o?!1:_,o?!0:S,r),G=e._geometryLoaders.length;e._geometryLoaders.push(C);let E=C.load();e._loaderPromises.push(E),e._geometryCallbacks[G]=()=>{m.indexDatatype=C.indexDatatype,m.buffer=C.buffer,m.typedArray=C.typedArray};let v=new mS.IndicesLoadPlan(m);return v.loadBuffer=_,v.loadTypedArray=S,v}function ql(e,t,n,i){let o=e.gltfJson,r=Sd.getImageIdFromTexture({gltf:o,textureId:t.index,supportedImageFormats:e._supportedImageFormats});if(!l(r))return;let s=Pi.getTextureLoader({gltf:o,textureInfo:t,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:e._supportedImageFormats,frameState:n,asynchronous:e._asynchronous}),a=Sd.createModelTextureReader({textureInfo:t}),c=e._textureLoaders.length;e._textureLoaders.push(s);let d=s.load().catch(u=>{if(!e.isDestroyed()){if(!e._incrementallyLoadTextures)throw u;e._textureState=nr.FAILED,e._textureErrors.push(u)}});return e._texturesPromises.push(d),e._textureCallbacks[c]=()=>{a.texture=s.texture,l(i)&&(a.texture.sampler=i)},a}function Nit(e,t,n){let{diffuseTexture:i,specularGlossinessTexture:o,diffuseFactor:r,specularFactor:s,glossinessFactor:a}=t,c=new ait;return l(i)&&(c.diffuseTexture=ql(e,i,n)),l(o)&&(c.specularGlossinessTexture=ql(e,o,n)),c.diffuseFactor=Fd(ce,r),c.specularFactor=Fd(h,s),c.glossinessFactor=a,c}function Yit(e,t,n){let{baseColorTexture:i,metallicRoughnessTexture:o,baseColorFactor:r,metallicFactor:s,roughnessFactor:a}=t,c=new sit;return l(i)&&(c.baseColorTexture=ql(e,i,n)),l(o)&&(c.metallicRoughnessTexture=ql(e,o,n)),c.baseColorFactor=Fd(ce,r),c.metallicFactor=s,c.roughnessFactor=a,c}function wit(e,t,n){let{specularFactor:i,specularTexture:o,specularColorFactor:r,specularColorTexture:s}=t,a=new cit;return l(o)&&(a.specularTexture=ql(e,o,n)),l(s)&&(a.specularColorTexture=ql(e,s,n)),a.specularFactor=i,a.specularColorFactor=Fd(h,r),a}function Mit(e,t,n){let{anisotropyStrength:i=H6.DEFAULT_ANISOTROPY_STRENGTH,anisotropyRotation:o=H6.DEFAULT_ANISOTROPY_ROTATION,anisotropyTexture:r}=t,s=new H6;return l(r)&&(s.anisotropyTexture=ql(e,r,n)),s.anisotropyStrength=i,s.anisotropyRotation=o,s}function kit(e,t,n){let{clearcoatFactor:i=K6.DEFAULT_CLEARCOAT_FACTOR,clearcoatTexture:o,clearcoatRoughnessFactor:r=K6.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR,clearcoatRoughnessTexture:s,clearcoatNormalTexture:a}=t,c=new K6;return l(o)&&(c.clearcoatTexture=ql(e,o,n)),l(s)&&(c.clearcoatRoughnessTexture=ql(e,s,n)),l(a)&&(c.clearcoatNormalTexture=ql(e,a,n)),c.clearcoatFactor=i,c.clearcoatRoughnessFactor=r,c}function Uit(e){return new lit(e)}function Dit(e){if(!l(e))return;let t=new dit;if(l(e.width)){let n=e.width;n>0&&Math.floor(n)===n&&(t.width=n)}if(l(e.pattern)){let n=e.pattern;n>=0&&n<=65535&&Math.floor(n)===n&&(t.pattern=n)}if(!(!l(t.width)&&!l(t.pattern)))return t}function Oit(e,t,n){let i=new uit,o=t.extensions??B.EMPTY_OBJECT,r=o.KHR_materials_pbrSpecularGlossiness,s=o.KHR_materials_specular,a=o.KHR_materials_anisotropy,c=o.KHR_materials_clearcoat,d=t.pbrMetallicRoughness,u=o.BENTLEY_materials_planar_fill;i.unlit=l(o.KHR_materials_unlit),l(r)?i.specularGlossiness=Nit(e,r,n):(l(d)&&(i.metallicRoughness=Yit(e,d,n)),l(s)&&!i.unlit&&(i.specular=wit(e,s,n)),l(a)&&!i.unlit&&(i.anisotropy=Mit(e,a,n)),l(c)&&!i.unlit&&(i.clearcoat=kit(e,c,n))),l(t.emissiveTexture)&&(i.emissiveTexture=ql(e,t.emissiveTexture,n)),l(t.normalTexture)&&!e._loadForClassification&&(i.normalTexture=ql(e,t.normalTexture,n)),l(t.occlusionTexture)&&(i.occlusionTexture=ql(e,t.occlusionTexture,n)),i.emissiveFactor=Fd(h,t.emissiveFactor),i.alphaMode=t.alphaMode,i.alphaCutoff=t.alphaCutoff,i.doubleSided=t.doubleSided,l(u)&&(i.planarFill=Uit(u));let m=o.BENTLEY_materials_point_style;if(l(m)&&l(m.diameter)){let p=m.diameter;p>=1&&(i.pointDiameter=Math.floor(p))}return i.lineStyle=Dit(o.BENTLEY_materials_line_style),i}function uTe(e,t){let n=new oTe;return n.featureCount=e.featureCount,n.nullFeatureId=e.nullFeatureId,n.propertyTableId=e.propertyTable,n.setIndex=e.attribute,n.label=e.label,n.positionalLabel=t,n}function mTe(e,t,n,i){let o=new oTe,r=e.featureIds;return o.featureCount=n,o.propertyTableId=t,o.setIndex=cTe(r.attribute),o.positionalLabel=i,o}function hTe(e,t){let n=new sTe;return n.propertyTableId=e.propertyTable,n.featureCount=e.featureCount,n.nullFeatureId=e.nullFeatureId,n.label=e.label,n.positionalLabel=t,n.offset=0,n.repeat=1,n}function fTe(e,t,n,i){let o=new sTe,r=e.featureIds;o.propertyTableId=t,o.featureCount=n,o.offset=r.constant??0;let s=r.divisor??0;return o.repeat=s===0?void 0:s,o.positionalLabel=i,o}function Bit(e,t,n,i){let o=new rTe;o.featureCount=t.featureCount,o.nullFeatureId=t.nullFeatureId,o.propertyTableId=t.propertyTable,o.label=t.label,o.positionalLabel=i;let r=t.texture;o.textureReader=ql(e,r,n,kt.NEAREST);let a=(l(r.channels)?r.channels:[0]).map(function(c){return"rgba".charAt(c)}).join("");return o.textureReader.channels=a,o}function zit(e,t,n,i,o,r){let s=new rTe,a=t.featureIds,c=a.texture;return s.featureCount=o,s.propertyTableId=n,s.textureReader=ql(e,c,i,kt.NEAREST),s.textureReader.channels=a.channels,s.positionalLabel=r,s}function Hit(e,t,n,i,o){let r=new Bnt,s=void 0,a=void 0,c=void 0,d=!1;for(let u in t){if(!t.hasOwnProperty(u))continue;let m=t[u],p=Q6(e,st,u),b=dTe(e,m,p,s,a,c,d,n,o);r.attributes.push(b.attribute),i.attributePlans.push(b)}return r}function Kit(e){let i=e?.KHR_gaussian_splatting?.extensions?.KHR_gaussian_splatting_compression_spz_2;if(l(i))return i}function pTe(e,t){if(!l(t))return;let n=e.gltfJson.materials;if(!l(n)||t<0||t>=n.length)return;let i=n[t];if(!l(i))return;let o=i.pbrMetallicRoughness??B.EMPTY_OBJECT,r=Fd(ce,o.baseColorFactor);return l(r)?r:new ce(1,1,1,1)}function Jit(e){switch(e){case J.UNSIGNED_BYTE:return 255;case J.UNSIGNED_SHORT:return 65535;case J.UNSIGNED_INT:return 4294967295;default:throw new ae("EXT_mesh_primitive_edge_visibility line strings indices must use unsigned scalar component types.")}}function jit(e,t,n){if(!l(t)||t.length===0)return;let i=new Array(t.length);for(let o=0;on[s]);let r=t.inverseBindMatrices;if(l(r)){let s=e.gltfJson.accessors[r];i.inverseBindMatrices=KI(e,s)}else i.inverseBindMatrices=new Array(o.length).fill(I.IDENTITY);return i}function hot(e,t){let n=e.gltfJson.skins;if(e._loadForClassification||!l(n))return[];let i=n.map(function(r,s){let a=mot(e,r,t);return a.index=s,a}),o=e.gltfJson.nodes;for(let r=0;r{u[m]=void 0});for(let m=r;m0||this._imageBasedLightingFactor.y>0}},shouldRegenerateShaders:{get:function(){return this._shouldRegenerateShaders}},specularEnvironmentCubeMap:{get:function(){return this._specularEnvironmentCubeMap}},useDefaultSphericalHarmonics:{get:function(){return this._useDefaultSphericalHarmonics}},useDefaultSpecularMaps:{get:function(){return this._useDefaultSpecularMaps}},useSpecularEnvironmentMaps:{get:function(){return l(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.ready||this._useDefaultSpecularMaps}}});function Fot(e,t){if(mf.isSupported(t)){if(e._specularEnvironmentCubeMap=e._specularEnvironmentCubeMap&&e._specularEnvironmentCubeMap.destroy(),l(e._specularEnvironmentMaps)){let n=new mf(e._specularEnvironmentMaps);e._specularEnvironmentCubeMap=n,e._removeErrorListener=n.errorEvent.addEventListener(i=>{console.error(`Error loading specularEnvironmentMaps: ${i}`)})}e._shouldRegenerateShaders=!0}}JI.prototype.update=function(e){if(e.frameNumber===this._previousFrameNumber&&e.context===this._previousFrameContext)return;this._previousFrameNumber=e.frameNumber;let t=this._previousFrameContext=e.context;e.brdfLutGenerator.update(e),this._shouldRegenerateShaders=!1;let n=this._imageBasedLightingFactor,i=this._previousImageBasedLightingFactor;M.equals(n,i)||(this._shouldRegenerateShaders=n.x>0&&i.x===0||n.x===0&&i.x>0,this._shouldRegenerateShaders=this._shouldRegenerateShaders||n.y>0&&i.y===0||n.y===0&&i.y>0,this._previousImageBasedLightingFactor=M.clone(this._imageBasedLightingFactor,this._previousImageBasedLightingFactor)),this._previousSphericalHarmonicCoefficients!==this._sphericalHarmonicCoefficients&&(this._shouldRegenerateShaders=this._shouldRegenerateShaders||l(this._previousSphericalHarmonicCoefficients)!==l(this._sphericalHarmonicCoefficients),this._previousSphericalHarmonicCoefficients=this._sphericalHarmonicCoefficients),this._shouldRegenerateShaders=this._shouldRegenerateShaders||this._previousSpecularEnvironmentMapLoaded!==this._specularEnvironmentMapLoaded,this._previousSpecularEnvironmentMapLoaded=this._specularEnvironmentMapLoaded,this._specularEnvironmentCubeMapDirty&&(Fot(this,t),this._specularEnvironmentCubeMapDirty=!1),l(this._specularEnvironmentCubeMap)&&(this._specularEnvironmentCubeMap.update(e),this._specularEnvironmentCubeMap.ready&&(this._specularEnvironmentMapLoaded=!0));let o=!l(this._specularEnvironmentCubeMap)&&l(e.specularEnvironmentMaps)&&!this._useDefaultSpecularMaps,r=!l(e.specularEnvironmentMaps)&&this._useDefaultSpecularMaps,s=!l(this._sphericalHarmonicCoefficients)&&l(e.sphericalHarmonicCoefficients)&&!this._useDefaultSphericalHarmonics,a=!l(e.sphericalHarmonicCoefficients)&&this._useDefaultSphericalHarmonics;this._shouldRegenerateShaders=this._shouldRegenerateShaders||o||r||s||a,this._useDefaultSpecularMaps=!l(this._specularEnvironmentCubeMap)&&l(e.specularEnvironmentMaps),this._useDefaultSphericalHarmonics=!l(this._sphericalHarmonicCoefficients)&&l(e.sphericalHarmonicCoefficients)};JI.prototype.isDestroyed=function(){return!1};JI.prototype.destroy=function(){return this._specularEnvironmentCubeMap=this._specularEnvironmentCubeMap&&this._specularEnvironmentCubeMap.destroy(),this._removeErrorListener=this._removeErrorListener&&this._removeErrorListener(),me(this)};var fS=JI;var Odi=x(T(),1);var kdi=x(T(),1);var Cdi=x(T(),1),jI=`uniform sampler2D u_pointCloud_colorGBuffer; uniform sampler2D u_pointCloud_depthGBuffer; uniform vec2 u_distanceAndEdlStrength; in vec2 v_textureCoordinates; vec2 neighborContribution(float log2Depth, vec2 offset) { float dist = u_distanceAndEdlStrength.x; vec2 texCoordOrig = v_textureCoordinates + offset * dist; vec2 texCoord0 = v_textureCoordinates + offset * floor(dist); vec2 texCoord1 = v_textureCoordinates + offset * ceil(dist); float depthOrLogDepth0 = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, texCoord0)); float depthOrLogDepth1 = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, texCoord1)); // ignore depth values that are the clear depth if (depthOrLogDepth0 == 0.0 || depthOrLogDepth1 == 0.0) { return vec2(0.0); } // interpolate the two adjacent depth values float depthMix = mix(depthOrLogDepth0, depthOrLogDepth1, fract(dist)); vec4 eyeCoordinate = czm_windowToEyeCoordinates(texCoordOrig, depthMix); return vec2(max(0.0, log2Depth - log2(-eyeCoordinate.z / eyeCoordinate.w)), 1.0); } void main() { float depthOrLogDepth = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, v_textureCoordinates)); vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, depthOrLogDepth); eyeCoordinate /= eyeCoordinate.w; float log2Depth = log2(-eyeCoordinate.z); if (depthOrLogDepth == 0.0) // 0.0 is the clear value for the gbuffer { discard; } vec4 color = texture(u_pointCloud_colorGBuffer, v_textureCoordinates); // sample from neighbors left, right, down, up vec2 texelSize = 1.0 / czm_viewport.zw; vec2 responseAndCount = vec2(0.0); responseAndCount += neighborContribution(log2Depth, vec2(-texelSize.x, 0.0)); responseAndCount += neighborContribution(log2Depth, vec2(+texelSize.x, 0.0)); responseAndCount += neighborContribution(log2Depth, vec2(0.0, -texelSize.y)); responseAndCount += neighborContribution(log2Depth, vec2(0.0, +texelSize.y)); float response = responseAndCount.x / responseAndCount.y; float strength = u_distanceAndEdlStrength.y; float shade = exp(-response * 300.0 * strength); color.rgb *= shade; out_FragColor = vec4(color); // Input and output depth are the same. gl_FragDepth = depthOrLogDepth; } `;function GC(){this._framebuffer=new ai({colorAttachmentsLength:2,depth:!0,supportsDepthTexture:!0}),this._drawCommand=void 0,this._clearCommand=void 0,this._strength=1,this._radius=1}Object.defineProperties(GC.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}},colorGBuffer:{get:function(){return this._framebuffer.getColorTexture(0)}},depthGBuffer:{get:function(){return this._framebuffer.getColorTexture(1)}}});function Iot(e){e._framebuffer.destroy(),e._drawCommand=void 0,e._clearCommand=void 0}var $6=new M;function Pot(e,t){let n=new ze({defines:["LOG_DEPTH_WRITE"],sources:[jI]}),i={u_pointCloud_colorGBuffer:function(){return e.colorGBuffer},u_pointCloud_depthGBuffer:function(){return e.depthGBuffer},u_distanceAndEdlStrength:function(){return $6.x=e._radius,$6.y=e._strength,$6}},o=Oe.fromCache({blending:tn.ALPHA_BLEND,depthMask:!0,depthTest:{enabled:!0},stencilTest:Kt.setCesium3DTileBit(),stencilMask:Kt.CESIUM_3D_TILE_MASK});e._drawCommand=t.createViewportQuadCommand(n,{uniformMap:i,renderState:o,pass:We.CESIUM_3D_TILE,owner:e}),e._clearCommand=new mi({framebuffer:e.framebuffer,color:new U(0,0,0,0),depth:1,renderState:Oe.fromCache(),pass:We.CESIUM_3D_TILE,owner:e})}function Xot(e,t){let n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._framebuffer.update(t,n,i),Pot(e,t)}function bTe(e){return e.drawBuffers&&e.fragmentDepth}GC.isSupported=bTe;function Not(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"EC");if(!l(n)){let i=t._attributeLocations,o=t.fragmentShaderSource.clone();o.sources.splice(0,0,`layout (location = 0) out vec4 out_FragData_0; layout (location = 1) out vec4 out_FragData_1;`),o.sources=o.sources.map(function(r){return r=ze.replaceMain(r,"czm_point_cloud_post_process_main"),r=r.replaceAll(/out_FragColor/g,"out_FragData_0"),r}),o.sources.push(`void main() { czm_point_cloud_post_process_main(); #ifdef LOG_DEPTH czm_writeLogDepth(); out_FragData_1 = czm_packDepth(gl_FragDepth); #else out_FragData_1 = czm_packDepth(gl_FragCoord.z); #endif }`),n=e.shaderCache.createDerivedShaderProgram(t,"EC",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:o,attributeLocations:i})}return n}GC.prototype.update=function(e,t,n,i){if(!bTe(e.context))return;this._strength=n.eyeDomeLightingStrength,this._radius=n.eyeDomeLightingRadius*e.pixelRatio,Xot(this,e.context);let o,r=e.commandList,s=r.length;for(o=t;o=570425344?(t-=Mb*2,m=a,d=c,u=0,a=0,c=0,AC._deprecationWarning("b3dm-legacy-header","This b3dm header is using the legacy format [batchLength] [batchTableByteLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel.")):u>=570425344&&(t-=Mb,m=d,d=a,u=c,a=0,c=0,AC._deprecationWarning("b3dm-legacy-header","This b3dm header is using the legacy format [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel."));let p;a===0?p={BATCH_LENGTH:m??0}:(p=Vr(i,t,a),t+=a);let b=new Uint8Array(e,t,c);t+=c;let f,y;d>0&&(f=Vr(i,t,d),t+=d,u>0&&(y=new Uint8Array(e,t,u),y=new Uint8Array(y),t+=u));let _=n+s-t;if(_===0)throw new ae("glTF byte length must be greater than 0.");let S;return t%4===0?S=new Uint8Array(e,t,_):(AC._deprecationWarning("b3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),S=new Uint8Array(i.subarray(t,t+_))),{batchLength:m,featureTableJson:p,featureTableBinary:b,batchTableJson:f,batchTableBinary:y,gltf:S}};var QI=AC;var $di=x(T(),1);function qI(e,t){this.json=e,this.buffer=t,this._cachedTypedArrays={},this.featuresLength=0}function yTe(e,t,n,i,o,r){let s=e._cachedTypedArrays,a=s[t];return l(a)||(a=J.createArrayBufferView(n,e.buffer.buffer,e.buffer.byteOffset+r,o*i),s[t]=a),a}function Yot(e,t,n,i){let o=e._cachedTypedArrays,r=o[t];return l(r)||(r=J.createTypedArray(n,i),o[t]=r),r}qI.prototype.getGlobalProperty=function(e,t,n){let i=this.json[e];if(l(i))return l(i.byteOffset)?(t=t??J.UNSIGNED_INT,n=n??1,yTe(this,e,t,n,1,i.byteOffset)):i};qI.prototype.hasProperty=function(e){return l(this.json[e])};qI.prototype.getPropertyArray=function(e,t,n){let i=this.json[e];if(l(i))return l(i.byteOffset)?(l(i.componentType)&&(t=J.fromName(i.componentType)),yTe(this,e,t,n,this.featuresLength,i.byteOffset)):Yot(this,e,t,i)};qI.prototype.getProperty=function(e,t,n,i,o){let r=this.json[e];if(!l(r))return;let s=this.getPropertyArray(e,t,n);if(n===1)return s[i];for(let a=0;a0){let o=Math.min(t,Xt.maximumTextureSize),r=Math.ceil(t/Xt.maximumTextureSize),s=1/o,a=s*.5,c=1/r,d=c*.5;n=new M(o,r),i=new ce(s,a,c,d)}this._translucentFeaturesLength=0,this._featuresLength=t,this._textureDimensions=n,this._textureStep=i,this._owner=e.owner,this._statistics=e.statistics,this._colorChangedCallback=e.colorChangedCallback}Object.defineProperties(ul.prototype,{translucentFeaturesLength:{get:function(){return this._translucentFeaturesLength}},byteLength:{get:function(){let e=0;return l(this._pickTexture)&&(e+=this._pickTexture.sizeInBytes),l(this._batchTexture)&&(e+=this._batchTexture.sizeInBytes),e}},textureDimensions:{get:function(){return this._textureDimensions}},textureStep:{get:function(){return this._textureStep}},batchTexture:{get:function(){return this._batchTexture}},defaultTexture:{get:function(){return this._defaultTexture}},pickTexture:{get:function(){return this._pickTexture}}});ul.DEFAULT_COLOR_VALUE=U.WHITE;ul.DEFAULT_SHOW_VALUE=!0;function xTe(e){let t=e._textureDimensions;return t.x*t.y*4}function TTe(e){if(!l(e._batchValues)){let t=xTe(e),n=new Uint8Array(t).fill(255);e._batchValues=n}return e._batchValues}function _Te(e){if(!l(e._showAlphaProperties)){let t=2*e._featuresLength,n=new Uint8Array(t).fill(255);e._showAlphaProperties=n}return e._showAlphaProperties}ul.prototype.setShow=function(e,t){if(t&&!l(this._showAlphaProperties))return;let n=_Te(this),i=e*2,o=t?255:0;if(n[i]!==o){n[i]=o;let r=TTe(this),s=e*4+3;r[s]=t?n[i+1]:0,this._batchValuesDirty=!0}};ul.prototype.setAllShow=function(e){let t=this._featuresLength;for(let n=0;n0){let i=e._pickIds,o=xTe(e),r=new Uint8Array(o),s=e._owner,a=e._statistics;for(let c=0;c0?(s="",e&&(s+=`uniform bool tile_translucentCommand; `),s+=`uniform sampler2D tile_batchTexture; out vec4 tile_featureColor; out vec2 tile_featureSt; void main() { vec2 st = computeSt(${t}); vec4 featureProperties = texture(tile_batchTexture, st); tile_color(featureProperties); float show = ceil(featureProperties.a); gl_Position *= show; `,e&&(s+=` bool isStyleTranslucent = (featureProperties.a != 1.0); if (czm_pass == czm_passTranslucent) { if (!isStyleTranslucent && !tile_translucentCommand) { gl_Position *= 0.0; } } else { if (isStyleTranslucent) { gl_Position *= 0.0; } } `),s+=` tile_featureColor = featureProperties; tile_featureSt = st; }`):s=`out vec2 tile_featureSt; void main() { tile_color(vec4(1.0)); tile_featureSt = computeSt(${t}); }`,`${r} ${Qot(i)}${s}`}};function VTe(e,t){return e=ze.replaceMain(e,"tile_main"),t?`${e}uniform float tile_colorBlend; void tile_color(vec4 tile_featureColor) { tile_main(); tile_featureColor = czm_gammaCorrect(tile_featureColor); out_FragColor.a *= tile_featureColor.a; float highlight = ceil(tile_colorBlend); out_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight); } `:`${e}void tile_color(vec4 tile_featureColor) { tile_main(); } `}function qot(e,t){let n=`texture(${t}`,i=0,o=e.indexOf(n,i),r;for(;o>-1;){let s=0;for(let d=o;d0?(i+=`uniform sampler2D tile_pickTexture; in vec2 tile_featureSt; in vec4 tile_featureColor; void main() { tile_color(tile_featureColor); `,n&&(i+=` out_FragColor.rgb *= out_FragColor.a; `),i+="}"):(e&&(i+=`uniform bool tile_translucentCommand; `),i+=`uniform sampler2D tile_pickTexture; uniform sampler2D tile_batchTexture; in vec2 tile_featureSt; void main() { vec4 featureProperties = texture(tile_batchTexture, tile_featureSt); if (featureProperties.a == 0.0) { discard; } `,e&&(i+=` bool isStyleTranslucent = (featureProperties.a != 1.0); if (czm_pass == czm_passTranslucent) { if (!isStyleTranslucent && !tile_translucentCommand) { discard; } } else { if (isStyleTranslucent) { discard; } } `),i+=` tile_color(featureProperties); `,n&&(i+=` out_FragColor.rgb *= out_FragColor.a; `),i+=`} `),i}};function $ot(e){let t=e._content.tileset,n=t.colorBlendMode,i=t.colorBlendAmount;if(n===Id.HIGHLIGHT)return 0;if(n===Id.REPLACE)return 1;if(n===Id.MIX)return L.clamp(i,L.EPSILON4,1)}Bo.prototype.getUniformMapCallback=function(){if(this.featuresLength===0)return;let e=this;return function(t){return It(t,{tile_batchTexture:function(){return e._batchTexture.batchTexture??e._batchTexture.defaultTexture},tile_textureDimensions:function(){return e._batchTexture.textureDimensions},tile_textureStep:function(){return e._batchTexture.textureStep},tile_colorBlend:function(){return $ot(e)},tile_pickTexture:function(){return e._batchTexture.pickTexture}})}};Bo.prototype.getPickId=function(){return"texture(tile_pickTexture, tile_featureSt)"};var ax={ALL_OPAQUE:0,ALL_TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2};Bo.prototype.addDerivedCommands=function(e,t){let n=e.commandList,i=n.length,o=this._content._tile,r=o._finalResolution,s=o.tileset,a=s.isSkippingLevelOfDetail&&s.hasMixedContent&&e.context.stencilBuffer,c=ert(this);for(let d=t;d>>Kt.SKIP_LOD_BIT_SHIFT}function crt(e){let t=Je(e,!0);return t.cull.enabled=!1,t.depthTest.enabled=!0,t.depthMask=!1,t.blending=tn.ALPHA_BLEND,t.stencilTest=Kt.setCesium3DTileBit(),t.stencilMask=Kt.CESIUM_3D_TILE_MASK,Oe.fromCache(t)}function lrt(e){let t=Je(e,!0);return t.stencilTest=Kt.setCesium3DTileBit(),t.stencilMask=Kt.CESIUM_3D_TILE_MASK,Oe.fromCache(t)}Bo.prototype.update=function(e,t){this._batchTexture.update(e,t)};Bo.prototype.isDestroyed=function(){return!1};Bo.prototype.destroy=function(){return this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),me(this)};var ff=Bo;function kb(e){this._classes=void 0,this._classIds=void 0,this._classIndexes=void 0,this._parentCounts=void 0,this._parentIndexes=void 0,this._parentIds=void 0,this._byteLength=0,drt(this,e.extension,e.binaryBody)}Object.defineProperties(kb.prototype,{byteLength:{get:function(){return this._byteLength}}});function drt(e,t,n){let i,o,r,s=t.instancesLength,a=t.classes,c=t.classIds,d=t.parentCounts,u=t.parentIds,m=s,p=0;l(c.byteOffset)&&(c.componentType=c.componentType??J.UNSIGNED_SHORT,c.type=Dt.SCALAR,r=Dm(c),c=r.createArrayBufferView(n.buffer,n.byteOffset+c.byteOffset,s),p+=c.byteLength);let b;if(l(d)){for(l(d.byteOffset)&&(d.componentType=d.componentType??J.UNSIGNED_SHORT,d.type=Dt.SCALAR,r=Dm(d),d=r.createArrayBufferView(n.buffer,n.byteOffset+d.byteOffset,s),p+=d.byteLength),b=new Uint16Array(s),m=0,i=0;i0;){if(t=u.pop(),c[t]===d)continue;c[t]=d;let m=n(e,t);if(l(m))return m;let p=o[t],b=s[t];for(let f=0;f0&&(f=Vr(i,t,d),t+=d,u>0&&(y=new Uint8Array(e,t,u),y=new Uint8Array(y),t+=u));let _=n+s-t;if(_===0)throw new ae("glTF byte length must be greater than 0.");let S;return t%4===0?S=new Uint8Array(e,t,_):(jO._deprecationWarning("i3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),S=new Uint8Array(i.subarray(t,t+_))),{gltfFormat:m,featureTableJson:p,featureTableBinary:b,batchTableJson:f,batchTableBinary:y,gltf:S}};var iP=jO;var Db={NOT_LOADED:0,LOADING:1,PROCESSING:2,POST_PROCESSING:3,READY:4,FAILED:5,UNLOADED:6},QO=Zn.Attribute,wrt=Zn.FeatureIdAttribute,vTe=Zn.Instances,sq=class extends qi{constructor(t){super(),t=t??B.EMPTY_OBJECT;let n=t.i3dmResource,i=t.arrayBuffer,o=t.baseResource,r=t.byteOffset??0,s=t.releaseGltfJson??!1,a=t.asynchronous??!0,c=t.incrementallyLoadTextures??!0,d=t.upAxis??Mi.Y,u=t.forwardAxis??Mi.X,m=t.loadAttributesAsTypedArray??!1,p=t.loadIndicesForWireframe??!1,b=t.loadPrimitiveOutline??!0,f=t.enablePick??!1;o=l(o)?o:n.clone(),this._i3dmResource=n,this._baseResource=o,this._arrayBuffer=i,this._byteOffset=r,this._releaseGltfJson=s,this._asynchronous=a,this._incrementallyLoadTextures=c,this._upAxis=d,this._forwardAxis=u,this._loadAttributesAsTypedArray=m,this._loadIndicesForWireframe=p,this._loadPrimitiveOutline=b,this._enablePick=f,this._state=Db.NOT_LOADED,this._promise=void 0,this._gltfLoader=void 0,this._buffers=[],this._components=void 0,this._transform=I.IDENTITY,this._batchTable=void 0,this._featureTable=void 0,this._instancesLength=0}get texturesLoaded(){return this._gltfLoader?.texturesLoaded}get cacheKey(){}get components(){return this._components}load(){if(l(this._promise))return this._promise;let t=iP.parse(this._arrayBuffer,this._byteOffset),n=t.featureTableJson,i=t.featureTableBinary,o=t.batchTableJson,r=t.batchTableBinary,s=t.gltfFormat,a=new hf(n,i);this._featureTable=a;let c=a.getGlobalProperty("INSTANCES_LENGTH");if(a.featuresLength=c,!l(c))throw new ae("Feature table global property: INSTANCES_LENGTH must be defined");this._instancesLength=c;let d=a.getGlobalProperty("RTC_CENTER",J.FLOAT,3);l(d)&&(this._transform=I.fromTranslation(h.fromArray(d))),this._batchTable={json:o,binary:r};let u={upAxis:this._upAxis,forwardAxis:this._forwardAxis,releaseGltfJson:this._releaseGltfJson,incrementallyLoadTextures:this._incrementallyLoadTextures,loadAttributesAsTypedArray:this._loadAttributesAsTypedArray,enablePick:this._enablePick,loadIndicesForWireframe:this._loadIndicesForWireframe,loadPrimitiveOutline:this._loadPrimitiveOutline};if(s===0){let p=xd(t.gltf);p=p.replace(/[\s\0]+$/,"");let b=this._baseResource.getDerivedResource({url:p});u.gltfResource=b,u.baseResource=b}else u.gltfResource=this._i3dmResource,u.typedArray=t.gltf;let m=new Ru(u);return this._gltfLoader=m,this._state=Db.LOADING,this._promise=m.load().then(()=>{if(!this.isDestroyed())return this._state=Db.PROCESSING,this}).catch(p=>{if(!this.isDestroyed())throw Mrt(this,p)}),this._promise}process(t){if(this._state===Db.READY)return!0;let n=this._gltfLoader,i=!1;if(this._state===Db.PROCESSING&&(i=n.process(t)),!i)return!1;let o=n.components;return o.transform=I.multiplyTransformation(this._transform,o.transform,o.transform),Drt(this,o,t),krt(this,o),this._components=o,this._arrayBuffer=void 0,this._state=Db.READY,!0}isUnloaded(){return this._state===Db.UNLOADED}unload(){l(this._gltfLoader)&&!this._gltfLoader.isDestroyed()&&this._gltfLoader.unload(),Krt(this),this._components=void 0,this._arrayBuffer=void 0,this._state=Db.UNLOADED}};function Mrt(e,t){return e.unload(),e._state=Db.FAILED,e.getError("Failed to load i3dm",t)}function krt(e,t){let n=e._batchTable,i=e._instancesLength;if(i===0)return;let o;if(l(n.json))o=Ub({count:i,batchTable:n.json,binaryBody:n.binary});else{let r=new Ql({name:Wh.BATCH_TABLE_CLASS_NAME,count:i});o=new Xa({schema:{},propertyTables:[r]})}t.structuralMetadata=o}var qO=new h,aq=new Array(4),Urt=new I;function Drt(e,t,n){let i,o=e._featureTable,r=e._instancesLength;if(r===0)return;let s=o.getGlobalProperty("RTC_CENTER",J.FLOAT,3),a=o.getGlobalProperty("EAST_NORTH_UP"),c=o.hasProperty("NORMAL_UP")||o.hasProperty("NORMAL_UP_OCT32P")||a,d=o.hasProperty("SCALE")||o.hasProperty("SCALE_NON_UNIFORM"),u=Brt(o,r),m;c&&(m=new Float32Array(4*r));let p;d&&(p=new Float32Array(3*r));let b=new Float32Array(r),f=h.unpackArray(u),y,_=new h,S=new h,Z=new h,V=new q,C=new Ye,G=new Array(4),E=new h,v=new Array(3),F=new I;if(!l(s)||h.equals(h.unpack(s),h.ZERO)){let k=le.fromPoints(f);for(i=0;i0&&(k.instances=D?Ort(P):P,D=!0)}}function Ort(e){let t=new vTe;t.transformInWorldSpace=e.transformInWorldSpace;let n=e.attributes,i=n.length;for(let o=0;o0&&e.afterRender.push(a._raiseStartEvent)),a.loop===Pd.REPEAT)b=b-Math.floor(b);else if(a.loop===Pd.MIRRORED_REPEAT){let S=Math.floor(b),Z=b-S;b=S%2===1?1-Z:Z}a.reverse&&(b=1-b);let _=b*d*a.multiplier;_=L.clamp(_,a.localStartTime,a.localStopTime),a.animate(_),a.update.numberOfListeners>0&&(a._updateEventTime=_,e.afterRender.push(a._raiseUpdateEvent)),i=!0,y||(a._state=pf.STOPPED,a.stop.numberOfListeners>0&&e.afterRender.push(a._raiseStopEvent),a.removeOnStop&&$O.push(a))}}n=$O.length;for(let s=0;sL.EPSILON3}};var hP=NTe;var _pi=x(T(),1);var hpi=x(T(),1),fP=`#ifdef DIFFUSE_IBL vec3 sampleDiffuseEnvironment(vec3 cubeDir) { #ifdef CUSTOM_SPHERICAL_HARMONICS return czm_sphericalHarmonics(cubeDir, model_sphericalHarmonicCoefficients); #else return czm_sphericalHarmonics(cubeDir, czm_sphericalHarmonicCoefficients); #endif } #endif #ifdef SPECULAR_IBL vec3 sampleSpecularEnvironment(vec3 cubeDir, float roughness) { #ifdef CUSTOM_SPECULAR_IBL float lod = roughness * model_specularEnvironmentMapsMaximumLOD; return czm_textureCube(model_specularEnvironmentMaps, cubeDir, lod).rgb; #else float lod = roughness * czm_specularEnvironmentMapsMaximumLOD; return czm_textureCube(czm_specularEnvironmentMaps, cubeDir, lod).rgb; #endif } vec3 computeSpecularIBL(vec3 cubeDir, float NdotV, vec3 f0, float roughness) { // see https://bruop.github.io/ibl/ at Single Scattering Results // Roughness dependent fresnel, from Fdez-Aguera vec3 f90 = max(vec3(1.0 - roughness), f0); vec3 F = fresnelSchlick2(f0, f90, NdotV); vec2 brdfLut = texture(czm_brdfLut, vec2(NdotV, roughness)).rg; vec3 specularSample = sampleSpecularEnvironment(cubeDir, roughness); return specularSample * (F * brdfLut.x + brdfLut.y); } #endif #if defined(DIFFUSE_IBL) || defined(SPECULAR_IBL) /** * Compute the light contributions from environment maps and spherical harmonic coefficients. * See Fdez-Aguera, https://www.jcgt.org/published/0008/01/03/paper.pdf, for explanation * of the single- and multi-scattering terms. * * @param {vec3} viewDirectionEC Unit vector pointing from the fragment to the eye position. * @param {vec3} normalEC The surface normal in eye coordinates. * @param {czm_modelMaterial} The material properties. * @return {vec3} The computed HDR color. */ vec3 textureIBL(vec3 viewDirectionEC, vec3 normalEC, czm_modelMaterial material) { vec3 f0 = material.specular; float roughness = material.roughness; float specularWeight = 1.0; #ifdef USE_SPECULAR specularWeight = material.specularWeight; #endif float NdotV = clamp(dot(normalEC, viewDirectionEC), 0.0, 1.0); // see https://bruop.github.io/ibl/ at Single Scattering Results // Roughness dependent fresnel, from Fdez-Aguera vec3 f90 = max(vec3(1.0 - roughness), f0); vec3 singleScatterFresnel = fresnelSchlick2(f0, f90, NdotV); vec2 brdfLut = texture(czm_brdfLut, vec2(NdotV, roughness)).rg; vec3 FssEss = specularWeight * (singleScatterFresnel * brdfLut.x + brdfLut.y); #ifdef DIFFUSE_IBL vec3 normalMC = normalize(model_iblReferenceFrameMatrix * normalEC); vec3 irradiance = sampleDiffuseEnvironment(normalMC); vec3 averageFresnel = f0 + (1.0 - f0) / 21.0; float Ems = specularWeight * (1.0 - brdfLut.x - brdfLut.y); vec3 FmsEms = FssEss * averageFresnel * Ems / (1.0 - averageFresnel * Ems); vec3 dielectricScattering = (1.0 - FssEss - FmsEms) * material.diffuse; vec3 diffuseContribution = irradiance * (FmsEms + dielectricScattering) * model_iblFactor.x; #else vec3 diffuseContribution = vec3(0.0); #endif #ifdef USE_ANISOTROPY // Bend normal to account for anisotropic distortion of specular reflection vec3 anisotropyDirection = material.anisotropicB; vec3 anisotropicTangent = cross(anisotropyDirection, viewDirectionEC); vec3 anisotropicNormal = cross(anisotropicTangent, anisotropyDirection); float bendFactor = 1.0 - material.anisotropyStrength * (1.0 - roughness); float bendFactorPow4 = bendFactor * bendFactor * bendFactor * bendFactor; vec3 bentNormal = normalize(mix(anisotropicNormal, normalEC, bendFactorPow4)); vec3 reflectEC = reflect(-viewDirectionEC, bentNormal); #else vec3 reflectEC = reflect(-viewDirectionEC, normalEC); #endif #ifdef SPECULAR_IBL vec3 reflectMC = normalize(model_iblReferenceFrameMatrix * reflectEC); vec3 radiance = sampleSpecularEnvironment(reflectMC, roughness); vec3 specularContribution = radiance * FssEss * model_iblFactor.y; #else vec3 specularContribution = vec3(0.0); #endif return diffuseContribution + specularContribution; } #endif `;var YTe={name:"ImageBasedLightingPipelineStage"},ost=new M;YTe.process=function(e,t,n){let i=t.imageBasedLighting,o=t.environmentMapManager,r=e.shaderBuilder,s;l(i.specularEnvironmentMaps)||(s=o.radianceCubeMap);let a=i.sphericalHarmonicCoefficients??o.sphericalHarmonicCoefficients;r.addDefine("USE_IBL_LIGHTING",void 0,pe.FRAGMENT),r.addUniform("vec2","model_iblFactor",pe.FRAGMENT),mf.isSupported(n.context)&&((i.useSphericalHarmonics||i.useSpecularEnvironmentMaps||i.enabled)&&r.addUniform("mat3","model_iblReferenceFrameMatrix",pe.FRAGMENT),l(s)&&r.addDefine("COMPUTE_POSITION_WC_ATMOSPHERE",void 0,pe.BOTH),l(a)&&l(a[0])?(r.addDefine("DIFFUSE_IBL",void 0,pe.FRAGMENT),r.addDefine("CUSTOM_SPHERICAL_HARMONICS",void 0,pe.FRAGMENT),r.addUniform("vec3","model_sphericalHarmonicCoefficients[9]",pe.FRAGMENT)):i.useDefaultSphericalHarmonics&&r.addDefine("DIFFUSE_IBL",void 0,pe.FRAGMENT),l(i.specularEnvironmentCubeMap)&&i.specularEnvironmentCubeMap.ready||l(s)?(r.addDefine("SPECULAR_IBL",void 0,pe.FRAGMENT),r.addDefine("CUSTOM_SPECULAR_IBL",void 0,pe.FRAGMENT),r.addUniform("samplerCube","model_specularEnvironmentMaps",pe.FRAGMENT),r.addUniform("float","model_specularEnvironmentMapsMaximumLOD",pe.FRAGMENT)):t.useDefaultSpecularMaps&&r.addDefine("SPECULAR_IBL",void 0,pe.FRAGMENT)),r.addFragmentLines(fP);let c={model_iblFactor:function(){return M.multiplyByScalar(i.imageBasedLightingFactor,o?.intensity||1,ost)},model_iblReferenceFrameMatrix:function(){return t._iblReferenceFrameMatrix},model_sphericalHarmonicCoefficients:function(){return a},model_specularEnvironmentMaps:function(){return i.specularEnvironmentCubeMap.texture},model_specularEnvironmentMapsMaximumLOD:function(){return i.specularEnvironmentCubeMap.maximumMipmapLevel}};l(s)&&(c.model_specularEnvironmentMaps=function(){return s},c.model_specularEnvironmentMapsMaximumLOD=function(){return o.maximumMipmapLevel}),e.uniformMap=It(c,e.uniformMap)};var pP=YTe;var Ppi=x(T(),1);var Epi=x(T(),1);var rst=L.EPSILON16;function hq(e){e=e??B.EMPTY_OBJECT;let t=e.stage,n=e.runtimeArticulation;this._stage=t,this._runtimeArticulation=n,this._name=t.name,this._type=t.type,this._minimumValue=t.minimumValue,this._maximumValue=t.maximumValue,this._currentValue=t.initialValue}Object.defineProperties(hq.prototype,{stage:{get:function(){return this._stage}},runtimeArticulation:{get:function(){return this._runtimeArticulation}},name:{get:function(){return this._name}},type:{get:function(){return this._type}},minimumValue:{get:function(){return this._minimumValue}},maximumValue:{get:function(){return this._maximumValue}},currentValue:{get:function(){return this._currentValue},set:function(e){e=L.clamp(e,this.minimumValue,this.maximumValue),L.equalsEpsilon(this._currentValue,e,rst)||(this._currentValue=e,this.runtimeArticulation._dirty=!0)}}});var sst=new h,mq=new q;hq.prototype.applyStageToMatrix=function(e){let t=this.type,n=this.currentValue,i=sst,o;switch(t){case Dc.XROTATE:o=q.fromRotationX(L.toRadians(n),mq),e=I.multiplyByMatrix3(e,o,e);break;case Dc.YROTATE:o=q.fromRotationY(L.toRadians(n),mq),e=I.multiplyByMatrix3(e,o,e);break;case Dc.ZROTATE:o=q.fromRotationZ(L.toRadians(n),mq),e=I.multiplyByMatrix3(e,o,e);break;case Dc.XTRANSLATE:i.x=n,i.y=0,i.z=0,e=I.multiplyByTranslation(e,i,e);break;case Dc.YTRANSLATE:i.x=0,i.y=n,i.z=0,e=I.multiplyByTranslation(e,i,e);break;case Dc.ZTRANSLATE:i.x=0,i.y=0,i.z=n,e=I.multiplyByTranslation(e,i,e);break;case Dc.XSCALE:i.x=n,i.y=1,i.z=1,e=I.multiplyByScale(e,i,e);break;case Dc.YSCALE:i.x=1,i.y=n,i.z=1,e=I.multiplyByScale(e,i,e);break;case Dc.ZSCALE:i.x=1,i.y=1,i.z=n,e=I.multiplyByScale(e,i,e);break;case Dc.UNIFORMSCALE:e=I.multiplyByUniformScale(e,n,e);break;default:break}return e};var bP=hq;function eB(e){e=e??B.EMPTY_OBJECT;let t=e.articulation,n=e.sceneGraph;this._articulation=t,this._sceneGraph=n,this._name=t.name,this._runtimeStages=[],this._runtimeStagesByName={},this._runtimeNodes=[],this._dirty=!0,ast(this)}Object.defineProperties(eB.prototype,{articulation:{get:function(){return this._articulation}},sceneGraph:{get:function(){return this._sceneGraph}},name:{get:function(){return this._name}},runtimeStages:{get:function(){return this._runtimeStages}},runtimeNodes:{get:function(){return this._runtimeNodes}}});function ast(e){let n=e.articulation.stages,i=n.length,o=e._runtimeStages,r=e._runtimeStagesByName;for(let s=0;s 0.0 && clipDistance < clippingPlanesEdgeWidth) { color = clippingPlanesEdgeColor; } } `;var wTe={name:"ModelClippingPlanesPipelineStage"},dst=new M,ust=new I,mst=new I;wTe.process=function(e,t,n){let i=t.clippingPlanes,o=n.context,r=e.shaderBuilder;r.addDefine("HAS_CLIPPING_PLANES",void 0,pe.FRAGMENT),r.addDefine("CLIPPING_PLANES_LENGTH",i.length,pe.FRAGMENT),i.unionClippingRegions&&r.addDefine("UNION_CLIPPING_REGIONS",void 0,pe.FRAGMENT),gs.useFloatTexture(o)&&r.addDefine("USE_CLIPPING_PLANES_FLOAT_TEXTURE",void 0,pe.FRAGMENT);let s=gs.getTextureResolution(i,o,dst);r.addDefine("CLIPPING_PLANES_TEXTURE_WIDTH",s.x,pe.FRAGMENT),r.addDefine("CLIPPING_PLANES_TEXTURE_HEIGHT",s.y,pe.FRAGMENT),r.addUniform("sampler2D","model_clippingPlanes",pe.FRAGMENT),r.addUniform("vec4","model_clippingPlanesEdgeStyle",pe.FRAGMENT),r.addUniform("mat4","model_clippingPlanesMatrix",pe.FRAGMENT),r.addFragmentLines(xP);let a={model_clippingPlanes:function(){return i.texture},model_clippingPlanesEdgeStyle:function(){let c=U.clone(i.edgeColor);return c.alpha=i.edgeWidth,c},model_clippingPlanesMatrix:function(){let c=I.transpose(o.uniformState.inverseView3D,ust);return I.multiply(c,t._clippingPlanesMatrix,mst)}};e.uniformMap=It(a,e.uniformMap)};var TP=wTe;var u0i=x(T(),1);var i0i=x(T(),1),_P=`void modelClippingPolygonsStage(ProcessedAttributes attributes) { vec2 sphericalLatLong = czm_approximateSphericalCoordinates(v_positionWC); sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi); vec2 minDistance = vec2(czm_infinity); v_regionIndex = -1; v_clippingPosition = vec2(czm_infinity); for (int regionIndex = 0; regionIndex < CLIPPING_POLYGON_REGIONS_LENGTH; regionIndex++) { vec4 extents = czm_unpackClippingExtents(model_clippingExtents, regionIndex); vec2 rectUv = (sphericalLatLong.yx - extents.yx) * extents.wz; vec2 clamped = clamp(rectUv, vec2(0.0), vec2(1.0)); vec2 distance = abs(rectUv - clamped) * extents.wz; if (minDistance.x > distance.x || minDistance.y > distance.y) { minDistance = distance; v_clippingPosition = rectUv; } float threshold = 0.01; if (rectUv.x > threshold && rectUv.y > threshold && rectUv.x < 1.0 - threshold && rectUv.y < 1.0 - threshold) { v_regionIndex = regionIndex; } } } `;var r0i=x(T(),1),SP=`void modelClippingPolygonsStage() { vec2 clippingPosition = v_clippingPosition; int regionIndex = v_regionIndex; czm_clipPolygons(model_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex); } `;var MTe={name:"ModelClippingPolygonsPipelineStage"};MTe.process=function(e,t,n){let i=t.clippingPolygons,o=e.shaderBuilder;o.addDefine("ENABLE_CLIPPING_POLYGONS",void 0,pe.BOTH),i.inverse&&o.addDefine("CLIPPING_INVERSE",void 0,pe.FRAGMENT),o.addDefine("CLIPPING_POLYGON_REGIONS_LENGTH",i.extentsCount,pe.BOTH),o.addUniform("sampler2D","model_clippingDistance",pe.FRAGMENT),o.addUniform("sampler2D","model_clippingExtents",pe.VERTEX),o.addVarying("vec2","v_clippingPosition"),o.addVarying("int","v_regionIndex","flat"),o.addVertexLines(_P),o.addFragmentLines(SP);let r={model_clippingDistance:function(){return i.clippingTexture??n.context.defaultTexture},model_clippingExtents:function(){return i.extentsTexture??n.context.defaultTexture}};e.uniformMap=It(r,e.uniformMap)};var ZP=MTe;var f0i=x(T(),1);function kTe(e,t){this._model=e,this._runtimeNode=t}Object.defineProperties(kTe.prototype,{name:{get:function(){return this._runtimeNode._name}},id:{get:function(){return this._runtimeNode._id}},show:{get:function(){return this._runtimeNode.show},set:function(e){this._runtimeNode.show=e}},matrix:{get:function(){return this._runtimeNode.transform},set:function(e){l(e)?(this._runtimeNode.transform=e,this._runtimeNode.userAnimated=!0,this._model._userAnimationDirty=!0):(this._runtimeNode.transform=this.originalMatrix,this._runtimeNode.userAnimated=!1)}},originalMatrix:{get:function(){return this._runtimeNode.originalTransform}}});var VP=kTe;var cbi=x(T(),1);var D0i=x(T(),1);var b0i=x(T(),1),CP=`mat4 getInstancingTransform() { mat4 instancingTransform; #ifdef HAS_INSTANCE_MATRICES instancingTransform = mat4( a_instancingTransformRow0.x, a_instancingTransformRow1.x, a_instancingTransformRow2.x, 0.0, // Column 1 a_instancingTransformRow0.y, a_instancingTransformRow1.y, a_instancingTransformRow2.y, 0.0, // Column 2 a_instancingTransformRow0.z, a_instancingTransformRow1.z, a_instancingTransformRow2.z, 0.0, // Column 3 a_instancingTransformRow0.w, a_instancingTransformRow1.w, a_instancingTransformRow2.w, 1.0 // Column 4 ); #else vec3 translation = vec3(0.0, 0.0, 0.0); vec3 scale = vec3(1.0, 1.0, 1.0); #ifdef HAS_INSTANCE_TRANSLATION translation = a_instanceTranslation; #endif #ifdef HAS_INSTANCE_SCALE scale = a_instanceScale; #endif instancingTransform = mat4( scale.x, 0.0, 0.0, 0.0, 0.0, scale.y, 0.0, 0.0, 0.0, 0.0, scale.z, 0.0, translation.x, translation.y, translation.z, 1.0 ); #endif return instancingTransform; } #ifdef USE_2D_INSTANCING mat4 getInstancingTransform2D() { mat4 instancingTransform2D; #ifdef HAS_INSTANCE_MATRICES instancingTransform2D = mat4( a_instancingTransform2DRow0.x, a_instancingTransform2DRow1.x, a_instancingTransform2DRow2.x, 0.0, // Column 1 a_instancingTransform2DRow0.y, a_instancingTransform2DRow1.y, a_instancingTransform2DRow2.y, 0.0, // Column 2 a_instancingTransform2DRow0.z, a_instancingTransform2DRow1.z, a_instancingTransform2DRow2.z, 0.0, // Column 3 a_instancingTransform2DRow0.w, a_instancingTransform2DRow1.w, a_instancingTransform2DRow2.w, 1.0 // Column 4 ); #else vec3 translation2D = vec3(0.0, 0.0, 0.0); vec3 scale = vec3(1.0, 1.0, 1.0); #ifdef HAS_INSTANCE_TRANSLATION translation2D = a_instanceTranslation2D; #endif #ifdef HAS_INSTANCE_SCALE scale = a_instanceScale; #endif instancingTransform2D = mat4( scale.x, 0.0, 0.0, 0.0, 0.0, scale.y, 0.0, 0.0, 0.0, 0.0, scale.z, 0.0, translation2D.x, translation2D.y, translation2D.z, 1.0 ); #endif return instancingTransform2D; } #endif `;var y0i=x(T(),1),RP=`void instancingStage(inout ProcessedAttributes attributes) { vec3 positionMC = attributes.positionMC; mat4 instancingTransform = getInstancingTransform(); attributes.positionMC = (instancingTransform * vec4(positionMC, 1.0)).xyz; #ifdef HAS_NORMALS vec3 normalMC = attributes.normalMC; attributes.normalMC = (instancingTransform * vec4(normalMC, 0.0)).xyz; #endif #ifdef USE_2D_INSTANCING mat4 instancingTransform2D = getInstancingTransform2D(); attributes.position2D = (instancingTransform2D * vec4(positionMC, 1.0)).xyz; #endif } `;var T0i=x(T(),1),GP=`void legacyInstancingStage( inout ProcessedAttributes attributes, out mat4 instanceModelView, out mat3 instanceModelViewInverseTranspose) { vec3 positionMC = attributes.positionMC; mat4 instancingTransform = getInstancingTransform(); mat4 instanceModel = instancingTransform * u_instance_nodeTransform; instanceModelView = u_instance_modifiedModelView; instanceModelViewInverseTranspose = mat3(u_instance_modifiedModelView * instanceModel); attributes.positionMC = (instanceModel * vec4(positionMC, 1.0)).xyz; #ifdef USE_2D_INSTANCING mat4 instancingTransform2D = getInstancingTransform2D(); attributes.position2D = (instancingTransform2D * vec4(positionMC, 1.0)).xyz; #endif } `;var tB=new I,hst=new I,fst=new I,DTe={name:"InstancingPipelineStage",_getInstanceTransformsAsMatrices:KTe,_transformsToTypedArray:pq};DTe.process=function(e,t,n){let i=t.instances,o=i.attributes[0].count,r=e.shaderBuilder;r.addDefine("HAS_INSTANCING"),r.addVertexLines(CP);let s=e.model,a=s.sceneGraph,c=e.runtimeNode,d=n.mode!==se.SCENE3D&&!n.scene3DOnly&&s._projectTo2D,u=s._enablePick&&!n.context.webgl2,m=[];Est(e,n,i,m,d,u),vst(e,n,i,m);let p={};if(i.transformInWorldSpace?(r.addDefine("USE_LEGACY_INSTANCING",void 0,pe.VERTEX),r.addUniform("mat4","u_instance_modifiedModelView",pe.VERTEX),r.addUniform("mat4","u_instance_nodeTransform",pe.VERTEX),p.u_instance_modifiedModelView=function(){let b=I.multiplyTransformation(s.modelMatrix,a.components.transform,tB);return d?I.multiplyTransformation(n.context.uniformState.view3D,b,tB):(n.mode!==se.SCENE3D&&(b=bt.basisTo2D(n.mapProjection,b,tB)),I.multiplyTransformation(n.context.uniformState.view,b,tB))},p.u_instance_nodeTransform=function(){return I.multiplyTransformation(a.axisCorrectionMatrix,c.computedTransform,hst)},r.addVertexLines(GP)):r.addVertexLines(RP),d){r.addDefine("USE_2D_INSTANCING",void 0,pe.VERTEX),r.addUniform("mat4","u_modelView2D",pe.VERTEX);let b=n.context,f=I.fromTranslation(c.instancingReferencePoint2D,new I);p.u_modelView2D=function(){return I.multiplyTransformation(b.uniformState.view,f,fst)}}e.uniformMap=It(p,e.uniformMap),e.instanceCount=o,jn(e.attributes,m)};var AP=new I,pst=new h;function bst(e,t,n,i,o){let r=I.multiplyTransformation(t,e,AP);return r=I.multiplyTransformation(r,n,AP),o=bt.basisTo2D(i.mapProjection,r,o),o}function gst(e,t,n,i,o){let r=I.fromTranslation(e,AP),s=I.multiplyTransformation(t,r,AP);s=I.multiplyTransformation(s,n,AP);let a=I.getTranslation(s,pst);return o=co.computeActualEllipsoidPosition(i,a,o),o}function OTe(e,t,n){let i=e.model,o=i.sceneGraph;e.runtimeNode.node.instances.transformInWorldSpace?(I.multiplyTransformation(i.modelMatrix,o.components.transform,t),I.multiplyTransformation(o.axisCorrectionMatrix,e.runtimeNode.computedTransform,n)):(t=I.clone(o.computedModelMatrix,t),I.multiplyTransformation(t,e.runtimeNode.computedTransform,t),I.clone(I.IDENTITY,n))}var BTe=new I,zTe=new I,yst=new I,xst=new h;function Tst(e,t,n,i){let o=BTe,r=zTe;OTe(t,o,r);let a=t.runtimeNode.instancingReferencePoint2D,c=e.length;for(let d=0;d=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=a.setIndex+1),i.push({index:e.attributeIndex++,vertexBuffer:a.buffer,componentsPerAttribute:Dt.getNumberOfComponents(a.type),componentDatatype:a.componentDatatype,normalize:!1,offsetInBytes:a.byteOffset,strideInBytes:a.byteStride,instanceDivisor:1}),r.addAttribute("float",`a_instanceFeatureId_${a.setIndex}`))}}var EP=DTe;var K0i=x(T(),1);var gq={};gq.name="ModelMatrixUpdateStage";gq.update=function(e,t,n){let i=n.mode!==se.SCENE3D;if(!(i&&t._model._projectTo2D)&&e._transformDirty){let o=i?t._computedModelMatrix2D:t._computedModelMatrix;JTe(e,t,o,e.transformToRoot),e._transformDirty=!1}};function Fst(e,t,n){e.modelMatrix=I.multiplyTransformation(t,n,e.modelMatrix),e.cullFace=xt.getCullFace(e.modelMatrix,e.primitiveType)}function JTe(e,t,n,i){let o;i=I.multiplyTransformation(i,e.transform,new I),e.updateComputedTransform();let r=e.runtimePrimitives.length;for(o=0;o1&&(i.addDefine("MULTILINE_BATCH_TEXTURE"),i.addUniform("vec2","model_textureDimensions"),o.model_textureDimensions=function(){return c.textureDimensions}),e.uniformMap=It(o,e.uniformMap)};var IP=e_e;var Vbi=x(T(),1);var t_e={name:"ClassificationPipelineStage"};t_e.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_CLASSIFICATION",void 0,pe.BOTH);let o=e.runtimePrimitive;l(o.batchLengths)||Pst(t,o)};function Pst(e,t){let n=xt.getAttributeBySemantic(e,st.POSITION);if(!l(n))throw new ae("Primitives must have a position attribute to be used for classification.");let i,o=e.indices,r=l(o);r&&(i=o.typedArray,o.typedArray=void 0);let s=r?o.count:n.count,a=xt.getAttributeBySemantic(e,st.FEATURE_ID,0);if(!l(a)){t.batchLengths=[s],t.batchOffsets=[0];return}let c=a.typedArray;a.typedArray=void 0;let d=[],u=[0],m=r?i[0]:0,p=c[m],b=0;for(let y=1;yBst(i,t,n)):[]}function Bst(e,t,n){let{getAttributeByName:i,getAttributeInfo:o,sanitizeGlslIdentifier:r}=xt,s=e.class.id,a=n?.classes[s],c=Object.entries(e.properties),d=new Array(c.length);for(let u=0;uHst(n,t)):[]}function Hst(e,t){let{sanitizeGlslIdentifier:n}=xt,i=e.class.id,o=t?.classes[i],r=Object.entries(e.properties).filter(([a,c])=>{let d=c.textureReader.channels.length;return c.classProperty.isGpuCompatible(d)}),s=new Array(r.length);for(let a=0;al(s.class)&&r.has(String(s.id))).flatMap(s=>jst(s,r,i,o))}function jst(e,t,n,i){let{sanitizeGlslIdentifier:o}=xt,r=e.class,s=n?.classes[r.id],a=t.get(String(e.id))??{},c=a.shaderDestination??pe.BOTH,d=e.properties,u=r.properties,m=[],p=0;for(let[b,f]of Object.entries(u)){if(!f.isGpuCompatible(Kst))continue;let y=d[b],_=pe.intersection(uat(b,i),c);if(_===pe.NONE){p++;continue}m.push({metadataVariable:o(b),property:y,classProperty:f,type:f.type,glslType:f.getGlslType(),propertyStatistics:s?.properties[b],shaderDestination:_,propertyTable:e,featureIdVariableName:a.variableName,propertyInfoIndex:p}),p++}return m}function Qst(e,t){let n=new Map;function i(a,c){let d=a?.propertyTableId;if(!l(d))return;let u=String(d),m={variableName:a.positionalLabel,shaderDestination:c},p=n.get(u);l(p)&&console.warn(`Multiple feature ID sets reference the same property table ${d} in primitive. Only one will be used.`),n.set(u,m)}let o=t?.featureIds??[];for(let a=0;am),i.addStructField(Gi.STRUCT_ID_METADATA_FS,s,r);let y=`attributes.texCoord_${c}`,_=y;if(l(p)&&!q.equals(p,q.IDENTITY)){let E=`${b}Transform`;i.addUniform("mat3",E,pe.FRAGMENT),o[E]=function(){return p},_=`vec2(${E} * vec3(${y}, 1.0))`}let S=`texture(${b}, ${_}).${d}`,Z=a.classProperty,V;n?V=Z.unpackTextureInShader(S,d,r,f):V=Z.unpackTextureInShaderWebGL1(S);let C=Sq({valueExpression:V,renderResources:e,glslType:s,metadataVariable:r,shaderDestination:pe.FRAGMENT,property:a}),G=`metadata.${r} = ${C};`;f.push(G),i.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_FS,f)}function Tq(e,t){let n=t.classProperty,{metadataVariable:i,glslType:o,shaderDestination:r}=t,s=r_e(Gi.METADATA_CLASS_FIELDS,n,`metadataClass.${i}`,o),a=`${o}MetadataClass`;e.addStructField(Gi.STRUCT_ID_METADATA_CLASS_FS,a,i),e.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_FS,s),pe.includesVertexShader(r)&&(e.addStructField(Gi.STRUCT_ID_METADATA_CLASS_VS,a,i),e.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_VS,s))}function _q(e,t){let{propertyStatistics:n}=t;if(!l(n))return;let{metadataVariable:i,type:o,glslType:r}=t;if(o===yt.ENUM)return;let s=Gi.METADATA_STATISTICS_FIELDS,a=`metadataStatistics.${i}`,c=r_e(s,n,a,r),d=`${r}MetadataStatistics`;e.addStructField(Gi.STRUCT_ID_METADATA_STATISTICS_FS,d,i),e.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_FS,c),pe.includesVertexShader(t.shaderDestination)&&(e.addStructField(Gi.STRUCT_ID_METADATA_STATISTICS_VS,d,i),e.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_VS,c))}function sat(e,t,n){aat(e,t,n),Tq(e.shaderBuilder,t),_q(e.shaderBuilder,t)}function aat(e,t,n){let{shaderBuilder:i,uniformMap:o}=e,{metadataVariable:r,glslType:s,property:a,featureIdVariableName:c,propertyTable:d,propertyInfoIndex:u}=t;if(!n){gt("PropertyTableCustomShader","Property table support for custom shaders requires WebGL2.");return}if(!l(c)||!l(d.texture))return;let m=`u_propertyTableTexture_${d.id}`,p=[];o.hasOwnProperty(m)||(i.addUniform("sampler2D",m,pe.BOTH),o[m]=()=>d.texture);let b=t.shaderDestination;pe.includesVertexShader(b)&&i.addStructField(Gi.STRUCT_ID_METADATA_VS,s,r),pe.includesFragmentShader(b)&&i.addStructField(Gi.STRUCT_ID_METADATA_FS,s,r);let y=`ivec2(${`featureIds.${c}`}, ${u})`,_=`texelFetch(${m}, ${y}, 0)`,S=t.classProperty,Z=S.unpackTextureInShader(_,"rgba",r,p),V=Sq({valueExpression:Z,renderResources:e,glslType:s,metadataVariable:r,shaderDestination:b,property:a??S}),C=`metadata.${r} = ${V};`;p.push(C),pe.includesVertexShader(b)&&i.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_VS,p),pe.includesFragmentShader(b)&&i.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_FS,p)}function r_e(e,t,n,i){function o(r){let s=t[r.specName];if(l(s))return`${n}.${r.shaderName} = ${i}(${s});`}return l(t)?e.map(o).filter(l):[]}function Sq(e){let{valueExpression:t,property:n}=e;if(!n.hasValueTransform)return t;let i=e.metadataVariable,o=`u_${i}_offset`,r=`u_${i}_scale`,{shaderBuilder:s,uniformMap:a}=e.renderResources,{glslType:c,shaderDestination:d}=e;s.addUniform(c,o,d),s.addUniform(c,r,d);let{offset:u,scale:m}=n;return a[o]=()=>u,a[r]=()=>m,`czm_valueTransform(${o}, ${r}, ${t})`}function cat(e,t){let n=new Set,i=new Set;return lat(e,n,i),dat(e,t,n,i),{usedInVertex:n,usedInFragment:i}}function lat(e,t,n){let i=e.customShader;if(!l(i))return;let o=i.usedVariablesFragment?.metadataSet??{};for(let s in o)o.hasOwnProperty(s)&&n.add(s);let r=i.usedVariablesVertex?.metadataSet??{};for(let s in r)r.hasOwnProperty(s)&&t.add(s)}function dat(e,t,n,i){let o=e.style;if(!(l(o)&&t.primitiveType===Fe.POINTS))return;let s=o.color?.getVariables?.()??[];for(let d of s)n.add(d),i.add(d);let a=o.show?.getVariables?.()??[];for(let d of a)n.add(d),i.add(d);let c=o.pointSize?.getVariables?.()??[];for(let d of c)n.add(d)}function uat(e,t){let n=t.usedInFragment.has(e)?pe.FRAGMENT:pe.NONE,i=t.usedInVertex.has(e)?pe.VERTEX:pe.NONE;return pe.union(n,i)}var Om=Gi;var Zgi=x(T(),1),s_e={INHERIT:0,OPAQUE:1,TRANSLUCENT:2};Object.freeze(s_e);var ux=s_e;var Na={name:"CustomShaderPipelineStage",STRUCT_ID_ATTRIBUTES_VS:"AttributesVS",STRUCT_ID_ATTRIBUTES_FS:"AttributesFS",STRUCT_NAME_ATTRIBUTES:"Attributes",STRUCT_ID_VERTEX_INPUT:"VertexInput",STRUCT_NAME_VERTEX_INPUT:"VertexInput",STRUCT_ID_FRAGMENT_INPUT:"FragmentInput",STRUCT_NAME_FRAGMENT_INPUT:"FragmentInput",FUNCTION_ID_INITIALIZE_INPUT_STRUCT_VS:"initializeInputStructVS",FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_VS:"void initializeInputStruct(out VertexInput vsInput, ProcessedAttributes attributes)",FUNCTION_ID_INITIALIZE_INPUT_STRUCT_FS:"initializeInputStructFS",FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_FS:"void initializeInputStruct(out FragmentInput fsInput, ProcessedAttributes attributes)",_oneTimeWarning:gt};Na.process=function(e,t,n){let{shaderBuilder:i,model:o,alphaOptions:r}=e,{customShader:s}=o,{lightingModel:a,translucencyMode:c}=s;l(a)&&(e.lightingOptions.lightingModel=a),c===ux.TRANSLUCENT?r.pass=We.TRANSLUCENT:c===ux.OPAQUE&&(r.pass=void 0);let d=xat(s,t,e);if(!d.customShaderEnabled)return;if(Zat(i,s,d),d.shouldComputePositionWC&&i.addDefine("COMPUTE_POSITION_WC_CUSTOM_SHADER",void 0,pe.BOTH),l(s.vertexShaderText)&&i.addDefine("HAS_CUSTOM_VERTEX_SHADER",void 0,pe.VERTEX),l(s.fragmentShaderText)){i.addDefine("HAS_CUSTOM_FRAGMENT_SHADER",void 0,pe.FRAGMENT);let p=zb.getDefineName(s.mode);i.addDefine(p,void 0,pe.FRAGMENT)}let u=s.uniforms;for(let p in u)if(u.hasOwnProperty(p)){let b=u[p];i.addUniform(b.type,p)}let m=s.varyings;for(let p in m)if(m.hasOwnProperty(p)){let b=m[p];i.addVarying(b,p)}e.uniformMap=It(e.uniformMap,s.uniformMap)};function mat(e){let t={};for(let n=0;na.propertyTableId):[],r=new Set;function s(a,c){for(let d of a){let m=c[d].class.properties;Object.keys(m).forEach(p=>r.add(p))}}return s(n,t.propertyTextures),s(i,t.propertyAttributes),s(o,t.propertyTables),r}function d_e(e,t){for(let n in e)if(e.hasOwnProperty(n)&&!t.has(n))return Na._oneTimeWarning("CustomShaderPipelineStage.checkMetadataCompatibility",`A custom shader uses metadata property "${n}" which is not present for all primitives in the tileset. Disabling the custom shader for these primitives.`),!1;return!0}var BP=Na;var Ogi=x(T(),1);var zP={name:"DequantizationPipelineStage",FUNCTION_ID_DEQUANTIZATION_STAGE_VS:"dequantizationStage",FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS:"void dequantizationStage(inout ProcessedAttributes attributes)"};zP.process=function(e,t,n){let i=e.shaderBuilder,o=e.model,r=l(o.classificationType);i.addDefine("USE_DEQUANTIZATION",void 0,pe.VERTEX),i.addFunction(zP.FUNCTION_ID_DEQUANTIZATION_STAGE_VS,zP.FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS,pe.VERTEX);let s=t.attributes;for(let a=0;a 0.0) { #ifdef HAS_EDGE_FEATURE_ID float edgeFeatureId = edgeId.g; float currentFeatureId = float(featureIds.featureId_0); #endif float globeDepth = czm_unpackDepth(texture(czm_globeDepthTexture, screenCoord)); // Background / sky / globe: always show edge bool isBackground = geomDepthLinear > globeDepth; bool drawEdge = isBackground; #ifdef HAS_EDGE_FEATURE_ID bool hasEdgeFeature = edgeFeatureId > 0.0; bool hasCurrentFeature = currentFeatureId > 0.0; bool featuresMatch = edgeFeatureId == currentFeatureId; drawEdge = drawEdge || !hasEdgeFeature || !hasCurrentFeature || featuresMatch; #else drawEdge = true; #endif if (drawEdge) { color = edgeColor; } } } `;var m_e={name:"EdgeDetectionPipelineStage"};m_e.process=function(e){e.shaderBuilder.addFragmentLines([KP])};var JP=m_e;var Pyi=x(T(),1);var Qgi=x(T(),1),jP=`// CESIUM_REDIRECTED_COLOR_OUTPUT flag is used to avoid color attachment conflicts // when shaders are processed by different rendering pipelines (e.g., OIT). // Only declare MRT outputs when not in a derived shader context. #if defined(HAS_EDGE_VISIBILITY_MRT) && !defined(CESIUM_REDIRECTED_COLOR_OUTPUT) layout(location = 1) out vec4 out_id; // edge id / metadata layout(location = 2) out vec4 out_edgeDepth; // packed depth #endif void edgeVisibilityStage(inout vec4 color, inout FeatureIds featureIds) { #ifdef HAS_EDGE_VISIBILITY if (!u_isEdgePass) { return; } float edgeTypeInt = v_edgeType * 255.0; if (edgeTypeInt < 0.5) { discard; } if (edgeTypeInt > 0.5 && edgeTypeInt < 1.5) { // silhouette candidate // Silhouette check done in vertex shader // v_shouldDiscard will be > 0.5 if this edge should be discarded if (v_shouldDiscard > 0.5) { discard; } } vec4 finalColor = color; #ifdef HAS_EDGE_COLOR_ATTRIBUTE if (v_edgeColor.a >= 0.0) { finalColor = v_edgeColor; } #endif #ifdef HAS_LINE_PATTERN // Pattern is 16-bit, each bit represents visibility at that position const float maskLength = 16.0; // Get the relative position within the dash from 0 to 1 float dashPosition = fract(v_lineCoord / maskLength); // Figure out the mask index float maskIndex = floor(dashPosition * maskLength); // Test the bit mask float maskTest = floor(u_linePattern / pow(2.0, maskIndex)); // If bit is 0 (gap), discard the fragment (use < 1.0 for better numerical stability) if (mod(maskTest, 2.0) < 1.0) { discard; } #endif color = finalColor; #if defined(HAS_EDGE_VISIBILITY_MRT) && !defined(CESIUM_REDIRECTED_COLOR_OUTPUT) // Write edge metadata out_id = vec4(0.0); out_id.r = edgeTypeInt; // Edge type (0-3) #ifdef HAS_EDGE_FEATURE_ID out_id.g = float(featureIds.featureId_0); // Feature ID if available #else out_id.g = 0.0; #endif // Pack depth into separate MRT attachment out_edgeDepth = czm_packDepth(gl_FragCoord.z); #endif #endif }`;var $gi=x(T(),1),QP=`#ifdef HAS_EDGE_VISIBILITY void edgeVisibilityStageVS() { if (!u_isEdgePass) { return; } v_edgeType = a_edgeType; v_faceNormalAView = czm_normal * a_faceNormalA; v_faceNormalBView = czm_normal * a_faceNormalB; v_edgeOffset = a_edgeOffset; // Silhouette detection: check both endpoints of the edge v_shouldDiscard = 0.0; float edgeTypeInt = a_edgeType * 255.0; if (edgeTypeInt > 0.5 && edgeTypeInt < 1.5) { vec3 normalA = normalize(v_faceNormalAView); vec3 normalB = normalize(v_faceNormalBView); const float perpTol = 2.5e-4; // Check at current vertex (first endpoint) vec4 currentPosEC = czm_modelView * vec4(v_positionMC, 1.0); vec3 toEye1 = normalize(-currentPosEC.xyz); float dotA1 = dot(normalA, toEye1); float dotB1 = dot(normalB, toEye1); // Check at other vertex (second endpoint) vec4 otherPosEC = czm_modelView * vec4(a_edgeOtherPos, 1.0); vec3 toEye2 = normalize(-otherPosEC.xyz); float dotA2 = dot(normalA, toEye2); float dotB2 = dot(normalB, toEye2); // Discard if EITHER endpoint is non-silhouette if (dotA1 * dotB1 > perpTol || dotA2 * dotB2 > perpTol) { v_shouldDiscard = 1.0; } } #ifdef HAS_EDGE_FEATURE_ID v_featureId_0 = a_edgeFeatureId; #endif #ifdef HAS_EDGE_COLOR_ATTRIBUTE v_edgeColor = a_edgeColor; #endif #ifdef HAS_LINE_PATTERN #ifdef HAS_EDGE_CUMULATIVE_DISTANCE v_lineCoord = a_edgeCumulativeDistance * u_pixelsPerWorld; #else vec4 currentClip = czm_modelViewProjection * vec4(v_positionMC, 1.0); vec2 currentScreen = ((currentClip.xy / currentClip.w) * 0.5 + 0.5) * czm_viewport.zw; vec4 otherClip = czm_modelViewProjection * vec4(a_edgeOtherPos, 1.0); vec2 otherScreen = ((otherClip.xy / otherClip.w) * 0.5 + 0.5) * czm_viewport.zw; vec2 windowDir = otherScreen - currentScreen; const float textureCoordinateBase = 8192.0; if (abs(windowDir.x) > abs(windowDir.y)) { v_lineCoord = textureCoordinateBase + currentScreen.x; } else { v_lineCoord = textureCoordinateBase + currentScreen.y; } #endif #endif // Expand vertex to form quad vec4 posClip = gl_Position; if (length(a_edgeOtherPos) > 0.0 && abs(a_edgeOffset) > 0.0) { vec4 currentClip = posClip; vec4 otherClip = czm_modelViewProjection * vec4(a_edgeOtherPos, 1.0); vec2 currentNDC = currentClip.xy / currentClip.w; vec2 otherNDC = otherClip.xy / otherClip.w; vec2 edgeDirNDC = otherNDC - currentNDC; // Ensure consistent edge direction if (edgeDirNDC.x < 0.0 || (abs(edgeDirNDC.x) < 0.001 && edgeDirNDC.y < 0.0)) { edgeDirNDC = -edgeDirNDC; } edgeDirNDC = normalize(edgeDirNDC); vec2 perpNDC = vec2(-edgeDirNDC.y, edgeDirNDC.x); // Convert line width from pixels to clip space float lineWidthPixels = u_lineWidth; vec2 viewportSize = czm_viewport.zw; vec2 clipPerPixel = (2.0 / viewportSize) * currentClip.w; vec2 offsetClip = perpNDC * lineWidthPixels * clipPerPixel * 0.5 * a_edgeOffset; posClip.xy += offsetClip; } gl_Position = posClip; } #endif `;var gyi=x(T(),1);var Zq=class e{static readAttributeAsTypedArray(t){let n=e.readAttributeAsRawCompactTypedArray(t),i=t.normalized,o=t.quantization;if(!l(o)&&!i)return n;let r=t.type,s=t.count,a=n;return i&&(a=cn.dequantize(n,t.componentDatatype,r,s)),l(o)?e.dequantize(a,s,r,o):a}static readAttributeAsRawCompactTypedArray(t){let n=t.type,i=t.count,o=Dt.getNumberOfComponents(n),r=i*o,s=t.componentDatatype,a=t.quantization;l(a)&&(s=a.componentDatatype);let c=t.buffer,d=t.byteOffset,u=t.byteStride,m=J.getSizeInBytes(s),p=o*m,b=!l(u)||u===p;if(l(t.typedArray))return t.typedArray;if(b){let G=J.createTypedArray(s,r);return c.getBufferData(G,d),G}let y=new Uint8Array(c.sizeInBytes);c.getBufferData(y);let _=J.createTypedArray(s,r),S=u??p,Z=new DataView(y.buffer,y.byteOffset,y.byteLength),V=new Array(o),C=e.createComponentsReader(s);for(let G=0;G0?h.normalize(c,c):(c.x=0,c.y=0,c.z=1),a[d*3]=c.x,a[d*3+1]=c.y,a[d*3+2]=c.z;for(let d=0;d=a.length)continue;let b=p*3,f=(p+1)*3,y=d*6;o[y]=a[b],o[y+1]=a[b+1],o[y+2]=a[b+2],o[y+3]=a[f],o[y+4]=a[f+1],o[y+5]=a[f+2]}return o}function Lat(e){let t=e.edgeVisibility;if(!l(t))return[];let n=t.visibility,i=e.indices,o=t.lineStrings,r=e.attributes,s=l(r)&&r.length>0?r[0].count:0,a=l(n)&&l(i)&&l(i.typedArray)&&i.typedArray.length>0,c=l(o)&&o.length>0;if(!a&&!c)return[];let d=a?i.typedArray:void 0,u=[],m=[],p=new Set,b=0,f=t.materialColor;if(a){let y=0,_=d.length,S=n;for(let Z=0;Z+2<_;Z+=3){let V=d[Z],C=d[Z+1],G=d[Z+2];for(let E=0;E<3;E++){let v,F;E===0?(v=V,F=C):E===1?(v=C,F=G):(v=G,F=V);let P=Math.floor(y/4),N=y%4*2;if(y++,P>=S.length)break;let R=S[P]>>N&3;if(R===FC.HIDDEN)continue;let A=Math.min(v,F),W=Math.max(v,F),X=`${A},${W}`;if(p.has(X))continue;p.add(X),u.push(v,F);let Y=-1;R===FC.SILHOUETTE&&(Y=b,b++),m.push({edgeType:R===FC.REPEATED_HARD?FC.HARD:R,silhouetteEdgeIndex:Y,color:f})}}}if(c)for(let y=0;y0&&(v<0||v>=s||F<0||F>=s))continue;let P=Math.min(v,F),N=Math.max(v,F),g=`${P},${N}`;p.has(g)||(p.add(g),u.push(v,F),m.push({edgeType:FC.HARD,silhouetteEdgeIndex:-1,color:l(V)?V:void 0}))}}return{edgeIndices:u,edgeData:m,silhouetteEdgeCount:b}}function Wat(e){if(!l(e))return;let t=xt.getAttributeBySemantic(e,st.COLOR);if(!l(t))return;let n=Dt.getNumberOfComponents(t.type);if(n!==3&&n!==4)return;let i=t.typedArray;if(l(i)||(i=ga.readAttributeAsTypedArray(t)),!l(i))return;let o=t.count;if(!l(o)||o===0||i.length=k){O(Qe);return}let He=Ee*4,Rt=Qe*4;Y[Rt]=D[He],Y[Rt+1]=D[He+1],Y[Rt+2]=D[He+2],Y[Rt+3]=D[He+3]}for(let Qe=0;Qe<_;Qe++){let Ee=e[Qe*2],He=e[Qe*2+1],dt=t[Qe].edgeType/255,gn=G[Ee*3],Bt=G[Ee*3+1],St=G[Ee*3+2],vt=G[He*3],Wn=G[He*3+1],at=G[He*3+2],ft=Qe*4;E[ft*3]=gn,E[ft*3+1]=Bt,E[ft*3+2]=St,N[ft*3]=vt,N[ft*3+1]=Wn,N[ft*3+2]=at,g[ft]=-1,v[ft]=dt,E[(ft+1)*3]=gn,E[(ft+1)*3+1]=Bt,E[(ft+1)*3+2]=St,N[(ft+1)*3]=vt,N[(ft+1)*3+1]=Wn,N[(ft+1)*3+2]=at,g[ft+1]=1,v[ft+1]=dt,E[(ft+2)*3]=vt,E[(ft+2)*3+1]=Wn,E[(ft+2)*3+2]=at,N[(ft+2)*3]=gn,N[(ft+2)*3+1]=Bt,N[(ft+2)*3+2]=St,g[ft+2]=1,v[ft+2]=dt,E[(ft+3)*3]=vt,E[(ft+3)*3+1]=Wn,E[(ft+3)*3+2]=at,N[(ft+3)*3]=gn,N[(ft+3)*3+1]=Bt,N[(ft+3)*3+2]=St,g[ft+3]=-1,v[ft+3]=dt;let Ai=t[Qe].color;if(l(Ai))for(let Gn=0;Gn<4;Gn++)w(ft+Gn,Ai);else if(l(D))for(let Gn=0;Gn<4;Gn++)z(ft+Gn,Ee);else for(let Gn=0;Gn<4;Gn++)O(ft+Gn);if(R){let Gn=W[Ee],ri=W[He];A[ft]=Gn,A[ft+1]=Gn,A[ft+2]=ri,A[ft+3]=ri}let En=Qe*6,Ni=b[En],fo=b[En+1],Yi=b[En+2],Ki=b[En+3],ci=b[En+4],oi=b[En+5];for(let Gn=0;Gn<4;Gn++)F[(ft+Gn)*3]=Ni,F[(ft+Gn)*3+1]=fo,F[(ft+Gn)*3+2]=Yi,P[(ft+Gn)*3]=Ki,P[(ft+Gn)*3+1]=ci,P[(ft+Gn)*3+2]=oi}let H=et.createVertexBuffer({context:i,typedArray:E,usage:Ie.STATIC_DRAW}),te=et.createVertexBuffer({context:i,typedArray:v,usage:Ie.STATIC_DRAW}),K=et.createVertexBuffer({context:i,typedArray:F,usage:Ie.STATIC_DRAW}),$=et.createVertexBuffer({context:i,typedArray:P,usage:Ie.STATIC_DRAW}),ee=et.createVertexBuffer({context:i,typedArray:N,usage:Ie.STATIC_DRAW}),de=et.createVertexBuffer({context:i,typedArray:g,usage:Ie.STATIC_DRAW}),_e=X?et.createVertexBuffer({context:i,typedArray:Y,usage:Ie.STATIC_DRAW}):void 0,ue=R?et.createVertexBuffer({context:i,typedArray:A,usage:Ie.STATIC_DRAW}):void 0,Te=_*2*3,Re=Z>65534,Le=Re?new Uint32Array(Te):new Uint16Array(Te);for(let Qe=0;Qe<_;Qe++){let Ee=Qe*4,He=Qe*6;Le[He]=Ee,Le[He+1]=Ee+1,Le[He+2]=Ee+2,Le[He+3]=Ee,Le[He+4]=Ee+2,Le[He+5]=Ee+3}let Xe=et.createIndexBuffer({context:i,typedArray:Le,usage:Ie.STATIC_DRAW,indexDatatype:Re?De.UNSIGNED_INT:De.UNSIGNED_SHORT}),qe=[{index:V,vertexBuffer:H,componentsPerAttribute:3,componentDatatype:J.FLOAT,normalize:!1},{index:o,vertexBuffer:te,componentsPerAttribute:1,componentDatatype:J.FLOAT,normalize:!1},{index:r,vertexBuffer:K,componentsPerAttribute:3,componentDatatype:J.FLOAT,normalize:!1},{index:s,vertexBuffer:$,componentsPerAttribute:3,componentDatatype:J.FLOAT,normalize:!1},{index:d,vertexBuffer:ee,componentsPerAttribute:3,componentDatatype:J.FLOAT,normalize:!1},{index:u,vertexBuffer:de,componentsPerAttribute:1,componentDatatype:J.FLOAT,normalize:!1}];X&&qe.push({index:c,vertexBuffer:_e,componentsPerAttribute:4,componentDatatype:J.FLOAT,normalize:!1}),R&&qe.push({index:y,vertexBuffer:ue,componentsPerAttribute:1,componentDatatype:J.FLOAT,normalize:!1});let je=n.runtimePrimitive.primitive;if(l(je.featureIds)&&je.featureIds.length>0){let Qe=je.featureIds[0];if(l(Qe.setIndex)){let Ee=je.attributes.find(He=>He.semantic===st.FEATURE_ID&&He.setIndex===Qe.setIndex);if(l(Ee)){let He=l(Ee.typedArray)?Ee.typedArray:ga.readAttributeAsTypedArray(Ee),Rt=new Float32Array(Z);for(let gn=0;gn<_;gn++){let Bt=e[gn*2],St=Bt0}}var qP=h_e;var cxi=x(T(),1);var Nyi=x(T(),1),$P=`void geometryStage(out ProcessedAttributes attributes) { attributes.positionMC = v_positionMC; attributes.positionEC = v_positionEC; #if defined(COMPUTE_POSITION_WC_CUSTOM_SHADER) || defined(COMPUTE_POSITION_WC_STYLE) || defined(COMPUTE_POSITION_WC_ATMOSPHERE) attributes.positionWC = v_positionWC; #endif #ifdef HAS_NORMALS // renormalize after interpolation attributes.normalEC = normalize(v_normalEC); #endif #ifdef HAS_TANGENTS attributes.tangentEC = normalize(v_tangentEC); #endif #ifdef HAS_BITANGENTS attributes.bitangentEC = normalize(v_bitangentEC); #endif // Everything else is dynamically generated in GeometryPipelineStage setDynamicVaryings(attributes); } `;var wyi=x(T(),1),eX=`vec4 geometryStage(inout ProcessedAttributes attributes, mat4 modelView, mat3 normal) { vec4 computedPosition; // Compute positions in different coordinate systems vec3 positionMC = attributes.positionMC; v_positionMC = positionMC; v_positionEC = (modelView * vec4(positionMC, 1.0)).xyz; #if defined(USE_2D_POSITIONS) || defined(USE_2D_INSTANCING) vec3 position2D = attributes.position2D; vec3 positionEC = (u_modelView2D * vec4(position2D, 1.0)).xyz; computedPosition = czm_projection * vec4(positionEC, 1.0); #else computedPosition = czm_projection * vec4(v_positionEC, 1.0); #endif // Sometimes the custom shader and/or style needs this #if defined(COMPUTE_POSITION_WC_CUSTOM_SHADER) || defined(COMPUTE_POSITION_WC_STYLE) || defined(COMPUTE_POSITION_WC_ATMOSPHERE) || defined(ENABLE_CLIPPING_POLYGONS) // Note that this is a 32-bit position which may result in jitter on small // scales. v_positionWC = (czm_model * vec4(positionMC, 1.0)).xyz; #endif #ifdef HAS_NORMALS v_normalEC = normalize(normal * attributes.normalMC); #endif #ifdef HAS_TANGENTS v_tangentEC = normalize(normal * attributes.tangentMC); #endif #ifdef HAS_BITANGENTS v_bitangentEC = normalize(normal * attributes.bitangentMC); #endif // All other varyings need to be dynamically generated in // GeometryPipelineStage setDynamicVaryings(attributes); return computedPosition; } `;var Kyi=x(T(),1);var kyi=x(T(),1),IC=`vec2 computeSt(float featureId) { float stepX = model_textureStep.x; float centerX = model_textureStep.y; #ifdef MULTILINE_BATCH_TEXTURE float stepY = model_textureStep.z; float centerY = model_textureStep.w; float xId = mod(featureId, model_textureDimensions.x); float yId = floor(featureId / model_textureDimensions.x); return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); #else return vec2(centerX + (featureId * stepX), 0.5); #endif } void selectedFeatureIdStage(out SelectedFeature feature, FeatureIds featureIds) { int featureId = featureIds.SELECTED_FEATURE_ID; if (featureId < model_featuresLength) { vec2 featureSt = computeSt(float(featureId)); feature.id = featureId; feature.st = featureSt; feature.color = texture(model_batchTexture, featureSt); } // Floating point comparisons can be unreliable in GLSL, so we // increment the feature ID to make sure it's always greater // then the model_featuresLength - a condition we check for in the // pick ID, to avoid sampling the pick texture if the feature ID is // greater than the number of features. else { feature.id = model_featuresLength + 1; feature.st = vec2(0.0); feature.color = vec4(1.0); } #ifdef HAS_NULL_FEATURE_ID if (featureId == model_nullFeatureId) { feature.id = featureId; feature.st = vec2(0.0); feature.color = vec4(1.0); } #endif } `;var tX={name:"SelectedFeatureIdPipelineStage",STRUCT_ID_SELECTED_FEATURE:"SelectedFeature",STRUCT_NAME_SELECTED_FEATURE:"SelectedFeature"};tX.process=function(e,t,n){let i=e.shaderBuilder;e.hasPropertyTable=!0;let o=e.model,r=e.runtimeNode.node,s=Fat(o,r,t),a=s.shaderDestination;i.addDefine("HAS_SELECTED_FEATURE_ID",void 0,a),i.addDefine("SELECTED_FEATURE_ID",s.variableName,a),i.addDefine(s.featureIdDefine,void 0,a),Iat(i);let c=s.featureIds.nullFeatureId,d=e.uniformMap;l(c)&&(i.addDefine("HAS_NULL_FEATURE_ID",void 0,a),i.addUniform("int","model_nullFeatureId",a),d.model_nullFeatureId=function(){return c}),s.shaderDestination===pe.BOTH&&i.addVertexLines(IC),i.addFragmentLines(IC)};function f_e(e){return e instanceof Zn.FeatureIdTexture?"HAS_SELECTED_FEATURE_ID_TEXTURE":"HAS_SELECTED_FEATURE_ID_ATTRIBUTE"}function p_e(e){return e instanceof Zn.FeatureIdTexture?pe.FRAGMENT:pe.BOTH}function Fat(e,t,n){let i,o;return l(t.instances)&&(o=xt.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),l(o))?(i=o.label??o.positionalLabel,{featureIds:o,variableName:i,shaderDestination:p_e(o),featureIdDefine:f_e(o)}):(o=xt.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),i=o.label??o.positionalLabel,{featureIds:o,variableName:i,shaderDestination:p_e(o),featureIdDefine:f_e(o)})}function Iat(e){e.addStructField(tX.STRUCT_ID_SELECTED_FEATURE,"int","id"),e.addStructField(tX.STRUCT_ID_SELECTED_FEATURE,"vec2","st"),e.addStructField(tX.STRUCT_ID_SELECTED_FEATURE,"vec4","color")}var mx=tX;var Ya={name:"GeometryPipelineStage",STRUCT_ID_PROCESSED_ATTRIBUTES_VS:"ProcessedAttributesVS",STRUCT_ID_PROCESSED_ATTRIBUTES_FS:"ProcessedAttributesFS",STRUCT_NAME_PROCESSED_ATTRIBUTES:"ProcessedAttributes",FUNCTION_ID_INITIALIZE_ATTRIBUTES:"initializeAttributes",FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES:"void initializeAttributes(out ProcessedAttributes attributes)",FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS:"setDynamicVaryingsVS",FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS:"setDynamicVaryingsFS",FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS:"void setDynamicVaryings(inout ProcessedAttributes attributes)"};Ya.process=function(e,t,n){let{shaderBuilder:i,model:o}=e;i.addStruct(Ya.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,"ProcessedAttributes",pe.VERTEX),i.addStruct(Ya.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"ProcessedAttributes",pe.FRAGMENT),i.addStruct(mx.STRUCT_ID_SELECTED_FEATURE,mx.STRUCT_NAME_SELECTED_FEATURE,pe.BOTH),i.addFunction(Ya.FUNCTION_ID_INITIALIZE_ATTRIBUTES,Ya.FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES,pe.VERTEX),i.addVarying("vec3","v_positionWC"),i.addVarying("vec3","v_positionEC"),i.addStructField(Ya.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"vec3","positionWC"),i.addStructField(Ya.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"vec3","positionEC"),i.addFunction(Ya.FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS,Ya.FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS,pe.VERTEX),i.addFunction(Ya.FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS,Ya.FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS,pe.FRAGMENT),o.type===Yr.TILE_PNTS&&i.addDefine("HAS_SRGB_COLOR",void 0,pe.FRAGMENT);let r=n.mode!==se.SCENE3D&&!n.scene3DOnly&&o._projectTo2D,s=l(e.runtimeNode.node.instances),a=r&&!s,c=t.attributes.length;for(let d=0;d1?(b=e.attributeIndex,e.attributeIndex+=m):p&&!a?b=0:b=e.attributeIndex++;let f=!p&&t.primitiveType===Fe.POINTS&&n.context.webgl2?"flat":void 0;Pat(e,u,b,m,r,s,f)}Oat(i,t.attributes),t.primitiveType===Fe.POINTS&&i.addDefine("PRIMITIVE_TYPE_POINTS"),i.addVertexLines(eX),i.addFragmentLines($P)};function Pat(e,t,n,i,o,r,s){let a=e.shaderBuilder,c=xt.getAttributeInfo(t),d=o&&!r;i>1?Yat(e,t,n,i):Nat(e,t,n,d),Mat(a,c,d),wat(a,c,s),l(t.semantic)&&Xat(a,t),kat(a,c,o),Uat(a,c,d),Dat(a,c)}function Xat(e,t){let{semantic:n,setIndex:i}=t;switch(n){case st.NORMAL:e.addDefine("HAS_NORMALS");break;case st.TANGENT:e.addDefine("HAS_TANGENTS");break;case st.FEATURE_ID:e.addDefine(`HAS${n}_${i}`);break;case st.TEXCOORD:case st.COLOR:e.addDefine(`HAS_${n}_${i}`)}}function Nat(e,t,n,i){let{quantization:o,semantic:r,setIndex:s}=t,{type:a,componentDatatype:c}=l(o)?o:t;r===st.FEATURE_ID&&s>=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=s+1);let d=r===st.POSITION,u=d?0:n,m=Dt.getNumberOfComponents(a),p={index:u,value:l(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,count:t.count,componentsPerAttribute:m,componentDatatype:c,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};if(e.attributes.push(p),!d||!i)return;let b=e.runtimePrimitive.positionBuffer2D,f={index:n,vertexBuffer:b,count:t.count,componentsPerAttribute:m,componentDatatype:J.FLOAT,offsetInBytes:0,strideInBytes:void 0,normalize:t.normalized};e.attributes.push(f)}function Yat(e,t,n,i){let{quantization:o,normalized:r}=t,{type:s,componentDatatype:a}=l(o)?o:t,d=Dt.getNumberOfComponents(s)/i,u=J.getSizeInBytes(a),m=d*u,p=t.byteStride;for(let b=0;b0&&(a=!1)}a&&(s=void 0)}n._missingImagePixels=s,n._isReady=!0}function o(){n._missingImagePixels=void 0,n._isReady=!0}t.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}).then(i).catch(o)}Cq.prototype.isReady=function(){return this._isReady};Cq.prototype.shouldDiscardImage=function(e){let t=this._pixelsToCheck,n=this._missingImagePixels;if(!l(n)||l(e.blob)&&e.blob.size!==this._missingImageByteLength)return!1;let i=xh(e),o=e.width;for(let r=0,s=t.length;r1&&o==="name"?(t=1,n=i):t>2&&o==="title"?(t=2,n=i):t>3&&/name/i.test(i)?(t=3,n=i):t>4&&/title/i.test(i)&&(t=4,n=i)}l(n)&&(this.name=e[n])};Rq.prototype.configureDescriptionFromProperties=function(e){function t(n){let i='';for(let o in n)if(n.hasOwnProperty(o)){let r=n[o];l(r)&&(typeof r=="object"?i+=``:i+=``)}return i+="
${o}${t(r)}
${o}${r}
",i}this.description=t(e)};var gf=Rq;var Axi=x(T(),1);function XC(){ge.throwInstantiationError()}Object.defineProperties(XC.prototype,{rectangle:{get:ge.throwInstantiationError},tileWidth:{get:ge.throwInstantiationError},tileHeight:{get:ge.throwInstantiationError},maximumLevel:{get:ge.throwInstantiationError},minimumLevel:{get:ge.throwInstantiationError},tilingScheme:{get:ge.throwInstantiationError},tileDiscardPolicy:{get:ge.throwInstantiationError},errorEvent:{get:ge.throwInstantiationError},credit:{get:ge.throwInstantiationError},proxy:{get:ge.throwInstantiationError},hasAlphaChannel:{get:ge.throwInstantiationError}});XC.prototype.getTileCredits=function(e,t,n){ge.throwInstantiationError()};XC.prototype.requestImage=function(e,t,n,i){ge.throwInstantiationError()};XC.prototype.pickFeatures=function(e,t,n,i,o){ge.throwInstantiationError()};var Bat=/\.ktx2$/i;XC.loadImage=function(e,t){let n=ve.createIfNeeded(t);return Bat.test(n.url)?Td(n):l(e)&&l(e.tileDiscardPolicy)?n.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}):n.fetchImage({preferImageBitmap:!0,flipY:!0})};var Au=XC;var Lxi=x(T(),1),g_e={SATELLITE:1,OCEANS:2,HILLSHADE:3};Object.freeze(g_e);var yf=g_e;function y_e(e){this.useTiles=e.usePreCachedTilesIfAvailable??!0;let t=e.ellipsoid;this.tilingScheme=e.tilingScheme??new Ji({ellipsoid:t}),this.rectangle=e.rectangle??this.tilingScheme.rectangle,this.ellipsoid=t;let n=e.credit;typeof n=="string"&&(n=new At(n)),this.credit=n,this.tileCredits=void 0,this.tileDiscardPolicy=e.tileDiscardPolicy,this.tileWidth=e.tileWidth??256,this.tileHeight=e.tileHeight??256,this.maximumLevel=e.maximumLevel}y_e.prototype.build=function(e){e._useTiles=this.useTiles,e._tilingScheme=this.tilingScheme,e._rectangle=this.rectangle,e._credit=this.credit,e._tileCredits=this.tileCredits,e._tileDiscardPolicy=this.tileDiscardPolicy,e._tileWidth=this.tileWidth,e._tileHeight=this.tileHeight,e._maximumLevel=this.maximumLevel,this.useTiles&&!l(this.tileDiscardPolicy)&&(e._tileDiscardPolicy=new iX({missingImageUrl:x_e(e,0,0,this.maximumLevel).url,pixelsToCheck:[new M(0,0),new M(200,20),new M(20,200),new M(80,110),new M(160,130)],disableCheckIfAllPixelsAreTransparent:!0}))};function zat(e,t){let n=e.tileInfo;if(!l(n))t.useTiles=!1;else{if(t.tileWidth=n.rows,t.tileHeight=n.cols,n.spatialReference.wkid===102100||n.spatialReference.wkid===102113)t.tilingScheme=new Zr({ellipsoid:t.ellipsoid});else if(e.tileInfo.spatialReference.wkid===4326)t.tilingScheme=new Ji({ellipsoid:t.ellipsoid});else{let i=`Tile spatial reference WKID ${e.tileInfo.spatialReference.wkid} is not supported.`;throw new ae(i)}if(t.maximumLevel=e.tileInfo.lods.length-1,l(e.fullExtent)){if(l(e.fullExtent.spatialReference)&&l(e.fullExtent.spatialReference.wkid))if(e.fullExtent.spatialReference.wkid===102100||e.fullExtent.spatialReference.wkid===102113){let i=new fi,o=e.fullExtent,r=i.unproject(new h(Math.max(o.xmin,-t.tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.max(o.ymin,-t.tilingScheme.ellipsoid.maximumRadius*Math.PI),0)),s=i.unproject(new h(Math.min(o.xmax,t.tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.min(o.ymax,t.tilingScheme.ellipsoid.maximumRadius*Math.PI),0));t.rectangle=new re(r.longitude,r.latitude,s.longitude,s.latitude)}else if(e.fullExtent.spatialReference.wkid===4326)t.rectangle=re.fromDegrees(e.fullExtent.xmin,e.fullExtent.ymin,e.fullExtent.xmax,e.fullExtent.ymax);else{let i=`fullExtent.spatialReference WKID ${e.fullExtent.spatialReference.wkid} is not supported.`;throw new ae(i)}}else t.rectangle=t.tilingScheme.rectangle;t.useTiles=!0}l(e.copyrightText)&&e.copyrightText.length>0&&(l(t.credit)?t.tileCredits=[new At(e.copyrightText)]:t.credit=new At(e.copyrightText))}function Hat(e,t){let n=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(n+=`: ${t.message}`),new ae(n)}async function Kat(e,t){let n=e.getDerivedResource({queryParameters:{f:"json"}});try{let i=await n.fetchJson();zat(i,t)}catch(i){Hat(e,i)}}function Up(e){e=e??B.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileDiscardPolicy=e.tileDiscardPolicy,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._maximumLevel=e.maximumLevel,this._tilingScheme=e.tilingScheme??new Ji({ellipsoid:e.ellipsoid}),this._useTiles=e.usePreCachedTilesIfAvailable??!0,this._rectangle=e.rectangle??this._tilingScheme.rectangle,this._layers=e.layers,this._credit=e.credit,this._tileCredits=void 0,this.enablePickFeatures=e.enablePickFeatures??!0,this._errorEvent=new Se}Up.fromBasemapType=async function(e,t){t=t??B.EMPTY_OBJECT;let n,i,o;switch(e){case yf.SATELLITE:{n=t.token??Gu.defaultAccessToken,i=ve.createIfNeeded(Gu.defaultWorldImageryServer),i.appendForwardSlash();let r=Gu.getDefaultTokenCredit(n);l(r)&&(o=At.clone(r))}break;case yf.OCEANS:{n=t.token??Gu.defaultAccessToken,i=ve.createIfNeeded(Gu.defaultWorldOceanServer),i.appendForwardSlash();let r=Gu.getDefaultTokenCredit(n);l(r)&&(o=At.clone(r))}break;case yf.HILLSHADE:{n=t.token??Gu.defaultAccessToken,i=ve.createIfNeeded(Gu.defaultWorldHillshadeServer),i.appendForwardSlash();let r=Gu.getDefaultTokenCredit(n);l(r)&&(o=At.clone(r))}break;default:}return Up.fromUrl(i,{...t,token:n,credit:o,usePreCachedTilesIfAvailable:!0})};function x_e(e,t,n,i,o){let r;if(e._useTiles)r=e._resource.getDerivedResource({url:`tile/${i}/${n}/${t}`,request:o});else{let s=e._tilingScheme.tileXYToNativeRectangle(t,n,i),c={bbox:`${s.west},${s.south},${s.east},${s.north}`,size:`${e._tileWidth},${e._tileHeight}`,format:"png32",transparent:!0,f:"image"};e._tilingScheme.projection instanceof wi?(c.bboxSR=4326,c.imageSR=4326):(c.bboxSR=3857,c.imageSR=3857),e.layers&&(c.layers=`show:${e.layers}`),r=e._resource.getDerivedResource({url:"export",request:o,queryParameters:c})}return r}Object.defineProperties(Up.prototype,{url:{get:function(){return this._resource._url}},token:{get:function(){return this._resource.queryParameters.token}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},usingPrecachedTiles:{get:function(){return this._useTiles}},hasAlphaChannel:{get:function(){return!0}},layers:{get:function(){return this._layers}}});Up.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT;let n=ve.createIfNeeded(e);n.appendForwardSlash(),l(t.token)&&n.setQueryParameters({token:t.token});let i=new Up(t);i._resource=n;let o=new y_e(t);return(t.usePreCachedTilesIfAvailable??!0)&&await Kat(n,o),o.build(i),i};Up.prototype.getTileCredits=function(e,t,n){return this._tileCredits};Up.prototype.requestImage=function(e,t,n,i){return Au.loadImage(this,x_e(this,e,t,n,i))};Up.prototype.pickFeatures=function(e,t,n,i,o){if(!this.enablePickFeatures)return;let r=this._tilingScheme.tileXYToNativeRectangle(e,t,n),s,a,c;if(this._tilingScheme.projection instanceof wi)s=L.toDegrees(i),a=L.toDegrees(o),c="4326";else{let p=this._tilingScheme.projection.project(new fe(i,o,0));s=p.x,a=p.y,c="3857"}let d="visible";l(this._layers)&&(d+=`:${this._layers}`);let u={f:"json",tolerance:2,geometryType:"esriGeometryPoint",geometry:`${s},${a}`,mapExtent:`${r.west},${r.south},${r.east},${r.north}`,imageDisplay:`${this._tileWidth},${this._tileHeight},96`,sr:c,layers:d};return this._resource.getDerivedResource({url:"identify",queryParameters:u}).fetchJson().then(function(p){let b=[],f=p.results;if(!l(f))return b;for(let y=0;yo.coverageAreas?.some(r=>l(r.bbox)))),t.attributionList=i}function jat(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(i+=`: ${t.message}`),zo.reportError(void 0,n,l(n)?n._errorEvent:void 0,i,void 0,void 0,void 0,t),new ae(i)}async function Qat(e,t,n){let i=e.url,o=ya._metadataCache[i];l(o)||(o=e.fetchJson(),ya._metadataCache[i]=o);try{let r=await o;return Jat(r,t)}catch(r){jat(e,r,n)}}function ya(e){e=e??B.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=1,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._mapStyle=e.mapStyle??NC.AERIAL,this._mapLayer=e.mapLayer,this._culture=e.culture??"",this._key=e.key,this._tileDiscardPolicy=e.tileDiscardPolicy,l(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new YC),this._proxy=e.proxy,this._credit=new At(``),this._tilingScheme=new Zr({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,ellipsoid:e.ellipsoid}),this._tileWidth=void 0,this._tileHeight=void 0,this._maximumLevel=void 0,this._imageUrlTemplate=void 0,this._imageUrlSubdomains=void 0,this._attributionList=void 0,this._errorEvent=new Se}Object.defineProperties(ya.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},key:{get:function(){return this._key}},mapStyle:{get:function(){return this._mapStyle}},mapLayer:{get:function(){return this._mapLayer}},culture:{get:function(){return this._culture}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return l(this.mapLayer)}}});ya.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT;let n=t.tileProtocol;l(n)?n.length>0&&n[n.length-1]===":"&&(n=n.substr(0,n.length-1)):n=document.location.protocol==="http:"?"http":"https";let i=t.mapStyle??NC.AERIAL,o=ve.createIfNeeded(e);o.appendForwardSlash();let r={incl:"ImageryProviders",key:t.key,uriScheme:n};l(t.mapLayer)&&(r.mapLayer=t.mapLayer),l(t.culture)&&(r.culture=t.culture);let s=o.getDerivedResource({url:`REST/v1/Imagery/Metadata/${i}`,queryParameters:r}),a=new ya(t);a._resource=o;let c=new __e(t);return await Qat(s,c),c.build(a),a};var qat=new re;ya.prototype.getTileCredits=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(e,t,n,qat);return tct(this._attributionList,n,i)};ya.prototype.requestImage=function(e,t,n,i){let o=Au.loadImage(this,$at(this,e,t,n,i));if(l(o))return o.catch(function(r){return l(r.blob)&&r.blob.size===0?YC.EMPTY_IMAGE:Promise.reject(r)})};ya.prototype.pickFeatures=function(e,t,n,i,o){};ya.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<=0;--o){let r=1<=m.zoomMin&&t<=m.zoomMax){let p=re.intersection(n,m.bbox,ect);l(p)&&(c=!0)}}c&&i.push(s.credit)}return i}ya._metadataCache={};var rX=ya;var jTi=x(T(),1);var PTi=x(T(),1);var S_e=/{[^}]+}/g,Z_e={x:rct,y:act,z:dct,s:uct,reverseX:sct,reverseY:cct,reverseZ:lct,westDegrees:mct,southDegrees:hct,eastDegrees:fct,northDegrees:pct,westProjected:bct,southProjected:gct,eastProjected:yct,northProjected:xct,width:Tct,height:_ct},nct=It(Z_e,{i:Sct,j:Zct,reverseI:Vct,reverseJ:Cct,longitudeDegrees:Gct,latitudeDegrees:Act,longitudeProjected:Ect,latitudeProjected:Lct,format:vct});function sX(e){e=e??B.EMPTY_OBJECT,this._errorEvent=new Se;let t=ve.createIfNeeded(e.url),n=ve.createIfNeeded(e.pickFeaturesUrl);this._resource=t,this._urlSchemeZeroPadding=e.urlSchemeZeroPadding,this._getFeatureInfoFormats=e.getFeatureInfoFormats,this._pickFeaturesResource=n;let i=e.subdomains;Array.isArray(i)?i=i.slice():l(i)&&i.length>0?i=i.split(""):i=["a","b","c"],this._subdomains=i,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._minimumLevel=e.minimumLevel??0,this._maximumLevel=e.maximumLevel,this._tilingScheme=e.tilingScheme??new Zr({ellipsoid:e.ellipsoid}),this._rectangle=e.rectangle??this._tilingScheme.rectangle,this._rectangle=re.intersection(this._rectangle,this._tilingScheme.rectangle),this._tileDiscardPolicy=e.tileDiscardPolicy;let o=e.credit;typeof o=="string"&&(o=new At(o)),this._credit=o,this._hasAlphaChannel=e.hasAlphaChannel??!0;let r=e.customTags,s=It(Z_e,r),a=It(nct,r);this._tags=s,this._pickFeaturesTags=a,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this.enablePickFeatures=e.enablePickFeatures??!0}Object.defineProperties(sX.prototype,{url:{get:function(){return this._resource.url}},urlSchemeZeroPadding:{get:function(){return this._urlSchemeZeroPadding}},pickFeaturesUrl:{get:function(){return this._pickFeaturesResource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return this._minimumLevel}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return this._hasAlphaChannel}}});sX.prototype.getTileCredits=function(e,t,n){};sX.prototype.requestImage=function(e,t,n,i){return Au.loadImage(this,ict(this,e,t,n,i))};sX.prototype.pickFeatures=function(e,t,n,i,o){if(!this.enablePickFeatures||!l(this._pickFeaturesResource)||this._getFeatureInfoFormats.length===0)return;let r=0,s=this;function a(d,u){return d.callback(u)}function c(){if(r>=s._getFeatureInfoFormats.length)return Promise.resolve([]);let d=s._getFeatureInfoFormats[r],u=oct(s,e,t,n,i,o,d.format);return++r,d.type==="json"?u.fetchJson().then(d.callback).catch(c):d.type==="xml"?u.fetchXML().then(d.callback).catch(c):d.type==="text"||d.type==="html"?u.fetchText().then(d.callback).catch(c):u.fetch({responseType:d.format}).then(a.bind(void 0,d)).catch(c)}return c()};var iB=!1,Eu=new re,oB=!1,aX=new re;function ict(e,t,n,i,o){iB=!1,oB=!1;let r=e._resource,s=r.getUrlComponent(!0),a=e._tags,c={},d=s.match(S_e);return l(d)&&d.forEach(function(u){let m=u.substring(1,u.length-1);l(a[m])&&(c[m]=a[m](e,t,n,i))}),r.getDerivedResource({request:o,templateValues:c})}var Gq=!1,MC=new M,Aq=!1;function oct(e,t,n,i,o,r,s){iB=!1,oB=!1,Gq=!1,Aq=!1;let a=e._pickFeaturesResource,c=a.getUrlComponent(!0),d=e._pickFeaturesTags,u={},m=c.match(S_e);return l(m)&&m.forEach(function(p){let b=p.substring(1,p.length-1);l(d[b])&&(u[b]=d[b](e,t,n,i,o,r,s))}),a.getDerivedResource({templateValues:u})}function kC(e,t,n){if(e&&e.urlSchemeZeroPadding&&e.urlSchemeZeroPadding.hasOwnProperty(t)){let i=e.urlSchemeZeroPadding[t];if(typeof i=="string"){let o=i.length;o>1&&(n=n.length>=o?n:new Array(o-n.toString().length+1).join("0")+n)}}return n}function rct(e,t,n,i){return kC(e,"{x}",t)}function sct(e,t,n,i){let o=e.tilingScheme.getNumberOfXTilesAtLevel(i)-t-1;return kC(e,"{reverseX}",o)}function act(e,t,n,i){return kC(e,"{y}",n)}function cct(e,t,n,i){let o=e.tilingScheme.getNumberOfYTilesAtLevel(i)-n-1;return kC(e,"{reverseY}",o)}function lct(e,t,n,i){let o=e.maximumLevel,r=l(o)&&it.rectangle.east&&(e.east=t.rectangle.east),e.southt.rectangle.north&&(e.north=t.rectangle.north),e}function C_e(e,t,n){let i=e.positionToTileXY(re.southwest(t),n),o=e.positionToTileXY(re.northeast(t),n);return(Math.abs(o.x-i.x)+1)*(Math.abs(o.y-i.y)+1)>4?0:n}Bm._metadataSuccess=function(e,t,n,i,o){let r=/tileformat/i,s=/tileset/i,a=/tilesets/i,c=/boundingbox/i,d,u,m,p=[],b=e.childNodes[0].childNodes;for(let F=0;F`),this._tilingScheme=void 0,this._version=void 0,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=e.maximumLevel,this._errorEvent=new Se}Object.defineProperties(Xd.prototype,{url:{get:function(){return this._url}},path:{get:function(){return this._path}},proxy:{get:function(){return this._resource.proxy}},channel:{get:function(){return this._channel}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},version:{get:function(){return this._version}},requestType:{get:function(){return this._requestType}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}}});Xd.fromUrl=async function(e,t,n){n=n??{};let i=n.path??"/default_map",o=ve.createIfNeeded(e).getDerivedResource({url:i[0]==="/"?i.substring(1):i});o.appendForwardSlash();let r=o.getDerivedResource({url:"query",queryParameters:{request:"Json",vars:"geeServerDefs",is2d:"t"}}),s=new R_e(n);s.channel=t,await Pct(r,s);let a=new Xd(n);return s.build(a),a._resource=o,a._url=e,a._path=i,a};Xd.prototype.getTileCredits=function(e,t,n){};Xd.prototype.requestImage=function(e,t,n,i){let o=this._resource.getDerivedResource({url:"query",request:i,queryParameters:{request:this._requestType,channel:this._channel,version:this._version,x:e,y:t,z:n+1}});return Au.loadImage(this,o)};Xd.prototype.pickFeatures=function(e,t,n,i,o){};Xd._logoUrl=void 0;Object.defineProperties(Xd,{logoUrl:{get:function(){return l(Xd._logoUrl)||(Xd._logoUrl=qt("Assets/Images/google_earth_credit.png")),Xd._logoUrl},set:function(e){Xd._logoUrl=e}}});var cX=Xd;var b_i=x(T(),1);var Xct=/\/$/,G_e=new At('© Mapbox © OpenStreetMap Improve this map');function UC(e){e=e??B.EMPTY_OBJECT;let t=e.mapId,n=e.accessToken;this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let i=ve.createIfNeeded(e.url??"https://{s}.tiles.mapbox.com/v4/");this._mapId=t,this._accessToken=n;let o=e.format??"png";/\./.test(o)||(o=`.${o}`),this._format=o;let r=i.getUrlComponent();Xct.test(r)||(r+="/"),r+=`${t}/{z}/{x}/{y}${this._format}`,i.url=r,i.setQueryParameters({access_token:n});let s;l(e.credit)?(s=e.credit,typeof s=="string"&&(s=new At(s))):s=G_e,this._resource=i,this._imageryProvider=new xs({url:i,credit:s,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(UC.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});UC.prototype.getTileCredits=function(e,t,n){};UC.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};UC.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};UC._defaultCredit=G_e;var lX=UC;var A_i=x(T(),1);function yS(e){e=e??B.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let t=e.rectangle??re.MAX_VALUE,n=new Ji({rectangle:t,numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});this._tilingScheme=n,this._image=void 0,this._texture=void 0,this._hasError=!1,this._errorEvent=new Se;let i=e.credit;typeof i=="string"&&(i=new At(i)),this._credit=i;let o=ve.createIfNeeded(e.url);this._resource=o,this._tileWidth=e.tileWidth,this._tileHeight=e.tileHeight}Object.defineProperties(yS.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return 0}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}}});function Nct(e,t,n,i){let o=`Failed to load image ${e.url}`;l(t)&&l(t.message)&&(o+=`: ${t.message}`);let r=zo.reportError(i,n,l(n)?n._errorEvent:void 0,o,0,0,0,t);if(r.retry)return Lq(e,n,r);throw l(n)&&(n._hasError=!0),new ae(o)}async function Lq(e,t,n){try{return await Au.loadImage(null,e)}catch(i){return Nct(e,i,t,n)}}yS.fromUrl=async function(e,t){let n=ve.createIfNeeded(e),i=await Lq(n);t=t??B.EMPTY_OBJECT;let o=new yS({...t,url:e,tileWidth:i.width,tileHeight:i.height});return o._image=i,o};yS.prototype.getTileCredits=function(e,t,n){};yS.prototype.requestImage=async function(e,t,n,i){if(!this._hasError&&!l(this._image)){let o=await Lq(this._resource,this);return this._image=o,zo.reportSuccess(this._errorEvent),o}return this._image};yS.prototype.pickFeatures=function(e,t,n,i,o){};var dX=yS;var q_i=x(T(),1);var I_i=x(T(),1);function Yct(e,t,n){this.type=e,l(t)||(e==="json"?t="application/json":e==="xml"?t="text/xml":e==="html"?t="text/html":e==="text"&&(t="text/plain")),this.format=t,l(n)||(e==="json"?n=wct:e==="xml"?n=Dct:(e==="html"||e==="text")&&(n=A_e)),this.callback=n}function wct(e){let t=[],n=e.features;for(let i=0;i0)for(let r=0;r\s*<\/body>/im,jct=//im,Qct=/([\s\S]*)<\/title>/im;function A_e(e){if(Jct.test(e)||jct.test(e))return;let t,n=Qct.exec(e);n&&n.length>1&&(t=n[1]);let i=new gf;return i.name=t,i.description=e,i.data=e,[i]}var xf=Yct;var k_i=x(T(),1);function uX(e){e=e??B.EMPTY_OBJECT,this._tileCache={},this._tilesRequestedForInterval=[];let t=this._clock=e.clock;this._times=e.times,this._requestImageFunction=e.requestImageFunction,this._reloadFunction=e.reloadFunction,this._currentIntervalIndex=-1,t.onTick.addEventListener(this._clockOnTick,this),this._clockOnTick(t)}Object.defineProperties(uX.prototype,{clock:{get:function(){return this._clock},set:function(e){this._clock!==e&&(this._clock=e,this._clockOnTick(e),this._reloadFunction())}},times:{get:function(){return this._times},set:function(e){this._times!==e&&(this._times=e,this._clockOnTick(this._clock),this._reloadFunction())}},currentInterval:{get:function(){return this._times.get(this._currentIntervalIndex)}}});uX.prototype.getFromCache=function(e,t,n,i){let o=E_e(e,t,n),r,s=this._tileCache[this._currentIntervalIndex];if(l(s)&&l(s[o])){let a=s[o];r=a.promise.catch(function(c){throw i.state=a.request.state,c}),delete s[o]}return r};uX.prototype.checkApproachingInterval=function(e,t,n,i){let o=E_e(e,t,n),r=this._tilesRequestedForInterval,s=L_e(this),a={key:o,priorityFunction:i.priorityFunction};(!l(s)||!W_e(this,a,s))&&r.push(a),r.length>=512&&r.splice(0,256)};uX.prototype._clockOnTick=function(e){let t=e.currentTime,i=this._times.indexOf(t),o=this._currentIntervalIndex;if(i!==o){let s=this._tileCache[o];for(let a in s)s.hasOwnProperty(a)&&s[a].request.cancel();delete this._tileCache[o],this._tilesRequestedForInterval=[],this._currentIntervalIndex=i,this._reloadFunction();return}let r=L_e(this);if(l(r)){let s=this._tilesRequestedForInterval,a=!0;for(;a&&s.length!==0;){let c=s.pop();a=W_e(this,c,r),a||s.push(c)}}};function E_e(e,t,n){return`${e}-${t}-${n}`}function qct(e){let t=e.split("-");if(t.length===3)return{x:Number(t[0]),y:Number(t[1]),level:Number(t[2])}}function L_e(e){let t=e._times;if(!l(t))return;let n=e._clock,i=n.currentTime,o=n.canAnimate&&n.shouldAnimate,r=n.multiplier;if(!o&&r!==0)return;let s,a=t.indexOf(i);if(a<0)return;let c=t.get(a);return r>0?(s=Q.secondsDifference(c.stop,i),++a):(s=Q.secondsDifference(c.start,i),--a),s/=r,a>=0&&s<=5?t.get(a):void 0}function W_e(e,t,n){let i=e._times.indexOf(n.start),o=e._tileCache,r=o[i];l(r)||(r=o[i]={});let s=t.key;if(l(r[s]))return!0;let a=qct(s),c=new _r({throttle:!1,throttleByServer:!0,type:ks.IMAGERY,priorityFunction:t.priorityFunction}),d=e._requestImageFunction(a.x,a.y,a.level,c,n);return l(d)?(r[s]={promise:d,request:c},!0):!1}var xS=uX;var $ct=[3034,3035,3042,3043,3044],elt=[4471,4559];function Tf(e){if(e=e??B.EMPTY_OBJECT,l(e.times)&&!l(e.clock))throw new ge("options.times was specified, so options.clock is required.");this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._getFeatureInfoUrl=e.getFeatureInfoUrl??e.url;let t=ve.createIfNeeded(e.url),n=ve.createIfNeeded(this._getFeatureInfoUrl);t.setQueryParameters(Tf.DefaultParameters,!0),n.setQueryParameters(Tf.GetFeatureInfoDefaultParameters,!0),l(e.parameters)&&t.setQueryParameters(v_e(e.parameters)),l(e.getFeatureInfoParameters)&&n.setQueryParameters(v_e(e.getFeatureInfoParameters));let i=this;this._reload=void 0,l(e.times)&&(this._timeDynamicImagery=new xS({clock:e.clock,times:e.times,requestImageFunction:function(s,a,c,d,u){return F_e(i,s,a,c,d,u)},reloadFunction:function(){l(i._reload)&&i._reload()}}));let o={};if(o.layers=e.layers,o.bbox="{westProjected},{southProjected},{eastProjected},{northProjected}",o.width="{width}",o.height="{height}",parseFloat(t.queryParameters.version)>=1.3){o.crs=e.crs??(e.tilingScheme&&e.tilingScheme.projection instanceof fi?"EPSG:3857":"CRS:84");let s=o.crs.split(":");if(s[0]==="EPSG"&&s.length===2){let a=Number(s[1]);(a>=4e3&&a<5e3&&!elt.includes(a)||$ct.includes(a))&&(o.bbox="{southProjected},{westProjected},{northProjected},{eastProjected}")}}else o.srs=e.srs??(e.tilingScheme&&e.tilingScheme.projection instanceof fi?"EPSG:3857":"EPSG:4326");t.setQueryParameters(o,!0),n.setQueryParameters(o,!0);let r={query_layers:e.layers,info_format:"{format}"};parseFloat(n.queryParameters.version)>=1.3?(r.i="{i}",r.j="{j}"):(r.x="{i}",r.y="{j}"),n.setQueryParameters(r,!0),this._resource=t,this._pickFeaturesResource=n,this._layers=e.layers,this._tileProvider=new xs({url:t,pickFeaturesUrl:n,tilingScheme:e.tilingScheme??new Ji({ellipsoid:e.ellipsoid}),rectangle:e.rectangle,tileWidth:e.tileWidth,tileHeight:e.tileHeight,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,subdomains:e.subdomains,tileDiscardPolicy:e.tileDiscardPolicy,credit:e.credit,getFeatureInfoFormats:e.getFeatureInfoFormats??Tf.DefaultGetFeatureInfoFormats,enablePickFeatures:e.enablePickFeatures})}function F_e(e,t,n,i,o,r){let s=l(r)?r.data:void 0,a=e._tileProvider;return l(s)&&a._resource.setQueryParameters(s),a.requestImage(t,n,i,o)}function tlt(e,t,n,i,o,r,s){let a=l(s)?s.data:void 0,c=e._tileProvider;return l(a)&&c._pickFeaturesResource.setQueryParameters(a),c.pickFeatures(t,n,i,o,r)}Object.defineProperties(Tf.prototype,{url:{get:function(){return this._resource._url}},proxy:{get:function(){return this._resource.proxy}},layers:{get:function(){return this._layers}},tileWidth:{get:function(){return this._tileProvider.tileWidth}},tileHeight:{get:function(){return this._tileProvider.tileHeight}},maximumLevel:{get:function(){return this._tileProvider.maximumLevel}},minimumLevel:{get:function(){return this._tileProvider.minimumLevel}},tilingScheme:{get:function(){return this._tileProvider.tilingScheme}},rectangle:{get:function(){return this._tileProvider.rectangle}},tileDiscardPolicy:{get:function(){return this._tileProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._tileProvider.errorEvent}},credit:{get:function(){return this._tileProvider.credit}},hasAlphaChannel:{get:function(){return this._tileProvider.hasAlphaChannel}},enablePickFeatures:{get:function(){return this._tileProvider.enablePickFeatures},set:function(e){this._tileProvider.enablePickFeatures=e}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}},getFeatureInfoUrl:{get:function(){return this._getFeatureInfoUrl}}});Tf.prototype.getTileCredits=function(e,t,n){return this._tileProvider.getTileCredits(e,t,n)};Tf.prototype.requestImage=function(e,t,n,i){let o,r=this._timeDynamicImagery,s;return l(r)&&(s=r.currentInterval,o=r.getFromCache(e,t,n,i)),l(o)||(o=F_e(this,e,t,n,i,s)),l(o)&&l(r)&&r.checkApproachingInterval(e,t,n,i),o};Tf.prototype.pickFeatures=function(e,t,n,i,o){let r=this._timeDynamicImagery,s=l(r)?r.currentInterval:void 0;return tlt(this,e,t,n,i,o,s)};Tf.DefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetMap",styles:"",format:"image/jpeg"});Tf.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetFeatureInfo"});Tf.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new xf("json","application/json")),Object.freeze(new xf("xml","text/xml")),Object.freeze(new xf("text","text/html"))]);function v_e(e){let t={};for(let n in e)e.hasOwnProperty(n)&&(t[n.toLowerCase()]=e[n]);return t}var mX=Tf;var lSi=x(T(),1);function Lu(e){e=e??B.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._getFeatureInfoUrl=e.getFeatureInfoUrl??e.url;let t=ve.createIfNeeded(e.url),n=ve.createIfNeeded(this._getFeatureInfoUrl),i=e.style,o=e.tileMatrixSetID,r=t.url,s=e.format??"image/jpeg",a=r.match(/{/g);if(!l(a)||a.length===1&&/{s}/.test(r)?(t.setQueryParameters(Lu.DefaultParameters,!0),this._useKvp=!0):(t.setTemplateValues(Lu.DefaultParameters,!0),this._useKvp=!1),this._useKvp){n.setQueryParameters(Lu.GetFeatureInfoDefaultParameters,!0),l(e.getFeatureInfoParameters)&&n.setQueryParameters(I_e(e.getFeatureInfoParameters));let u={infoformat:"{format}",i:"{i}",j:"{j}"};n.setQueryParameters(u,!0)}else n.setTemplateValues(Lu.GetFeatureInfoDefaultParameters,!0),l(e.getFeatureInfoParameters)&&n.setTemplateValues(I_e(e.getFeatureInfoParameters));this._resource=t,this._tileMatrixLabels=e.tileMatrixLabels,this._format=s,this._dimensions=e.dimensions,this._tilematrixset=o;let c={};c.tilematrix="{TileMatrix}",c.layer=e.layer,c.style=i,c.tilerow="{TileRow}",c.tilecol="{TileCol}",c.tilematrixset=o,this._useKvp?(t.setQueryParameters(c,!0),t.setQueryParameters({format:s},!0),n.setQueryParameters({format:s},!0),n.setQueryParameters(c,!0)):(c.Style=i,t.setTemplateValues(c),t.setTemplateValues({format:s}),n.setTemplateValues(c));let d=this;this._reload=void 0,l(e.times)&&(this._timeDynamicImagery=new xS({clock:e.clock,times:e.times,requestImageFunction:function(u,m,p,b,f){return P_e(d,u,m,p,b,f)},reloadFunction:function(){l(d._reload)&&d._reload()}})),this._errorEvent=new Se,this._tileProvider=new xs({url:t,pickFeaturesUrl:n,tilingScheme:e.tilingScheme??new Zr({ellipsoid:e.ellipsoid}),rectangle:e.rectangle,tileWidth:e.tileWidth,tileHeight:e.tileHeight,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,subdomains:e.subdomains,tileDiscardPolicy:e.tileDiscardPolicy,credit:e.credit,getFeatureInfoFormats:e.getFeatureInfoFormats??Lu.DefaultGetFeatureInfoFormats,enablePickFeatures:e.enablePickFeatures??(this._useKvp||l(e.getFeatureInfoUrl)),customTags:ilt(this)})}function P_e(e,t,n,i,o,r){let s=e._tileProvider;return X_e(e,s._resource,r),s.requestImage(t,n,i,o)}function nlt(e,t,n,i,o,r,s){let a=e._tileProvider;return X_e(e,a._pickFeaturesResource,s),a.pickFeatures(t,n,i,o,r)}Object.defineProperties(Lu.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileProvider.tileWidth}},tileHeight:{get:function(){return this._tileProvider.tileHeight}},maximumLevel:{get:function(){return this._tileProvider.maximumLevel}},minimumLevel:{get:function(){return this._tileProvider.minimumLevel}},tilingScheme:{get:function(){return this._tileProvider.tilingScheme}},rectangle:{get:function(){return this._tileProvider.rectangle}},tileDiscardPolicy:{get:function(){return this._tileProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._tileProvider.errorEvent}},format:{get:function(){return this._format}},credit:{get:function(){return this._tileProvider.credit}},hasAlphaChannel:{get:function(){return!0}},enablePickFeatures:{get:function(){return this._tileProvider.enablePickFeatures},set:function(e){this._tileProvider.enablePickFeatures=e}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}},dimensions:{get:function(){return this._dimensions},set:function(e){this._dimensions!==e&&(this._dimensions=e,l(this._reload)&&this._reload())}},getFeatureInfoUrl:{get:function(){return this._getFeatureInfoUrl}}});Lu.prototype.getTileCredits=function(e,t,n){return this._tileProvider.getTileCredits(e,t,n)};Lu.prototype.requestImage=function(e,t,n,i){let o,r=this._timeDynamicImagery,s;return l(r)&&(s=r.currentInterval,o=r.getFromCache(e,t,n,i)),l(o)||(o=P_e(this,e,t,n,i,s)),l(o)&&l(r)&&r.checkApproachingInterval(e,t,n,i),o};Lu.prototype.pickFeatures=function(e,t,n,i,o){let r=this._timeDynamicImagery,s=l(r)?r.currentInterval:void 0;return nlt(this,e,t,n,i,o,s)};Lu.DefaultParameters=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetTile"});Lu.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetFeatureInfo"});Lu.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new xf("json","application/json")),Object.freeze(new xf("xml","text/xml")),Object.freeze(new xf("text","text/html"))]);function X_e(e,t,n){let i=e._dimensions,o=l(n)?n.data:void 0;if(!e._useKvp)l(i)&&t.setTemplateValues(i),l(o)&&t.setTemplateValues(o);else{let r={};l(i)&&(r=It(r,i)),l(o)&&(r=It(r,o)),t.setQueryParameters(r)}}function ilt(e){function t(n){let i=e._tileMatrixLabels;return l(i)?i[n]:n.toString()}return{TileMatrix:function(n,i,o,r){return t(r)},tilematrix:function(n,i,o,r){return t(r)},TileRow:function(n,i,o){return o.toString()},tilerow:function(n,i,o){return o.toString()},TileCol:function(n,i,o){return i.toString()},tilecol:function(n,i,o){return i.toString()},TileMatrixSet:function(n){return e._tilematrixset},tilematrixset:function(n){return e._tilematrixset}}}function I_e(e){let t={};for(let n in e)e.hasOwnProperty(n)&&(t[n.toLowerCase()]=e[n]);return t}var hX=Lu;var xSi=x(T(),1);var N_e=/\/$/;function Kb(e){e=e??B.EMPTY_OBJECT,this._maximumLevel=e.maximumLevel??22,this._minimumLevel=e.minimumLevel??0,this._session=e.session,this._key=e.key,this._tileWidth=e.tileWidth,this._tileHeight=e.tileHeight;let t=e.url instanceof ss?e.url:ve.createIfNeeded(e.url??ua.mapTilesApiEndpoint),n=t.getUrlComponent();N_e.test(n)||(n+="/");let i=`${n}v1/2dtiles/{z}/{x}/{y}`;this._viewportUrl=`${n}tile/v1/viewport`,t.url=i,t.setQueryParameters({session:encodeURIComponent(e.session),key:encodeURIComponent(e.key)}),this._resource=t.clone();let o;l(e.credit)&&(o=e.credit,typeof o=="string"&&(o=new At(o)));let r=new xs({url:t,credit:o,tileWidth:e.tileWidth,tileHeight:e.tileHeight,ellipsoid:e.ellipsoid,rectangle:e.rectangle,maximumLevel:this._maximumLevel,minimumLevel:this._minimumLevel});r._resource=t,this._imageryProvider=r,this._tileCredits=t.credits,this._attributionsByLevel=void 0}Object.defineProperties(Kb.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});Kb.fromIonAssetId=async function(e){e=e??{},e.mapType=e.mapType??"satellite",e.language=e.language??"en_US",e.region=e.region??"US";let t=e.overlayLayerType,n=Y_e(e),i=ss._createEndpointResource(e.assetId,{queryParameters:{options:JSON.stringify(n)}}),o={language:e.language,region:e.region,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle,credit:e.credit},r=await i.fetchJson(),s=r.options.url;return delete r.options.url,r.options={...r.options,...o},Fq(s,r,i)};Kb.fromUrl=async function(e){e=e??{},e.mapType=e.mapType??"satellite",e.language=e.language??"en_US",e.region=e.region??"US",e.url=e.url??ua.mapTilesApiEndpoint,e.key=e.key??ua.defaultApiKey;let t=e.overlayLayerType,n=await rlt(e);return new Kb({...n,...e,credit:e.credit??ua.getDefaultCredit()})};Kb.prototype.getTileCredits=function(e,t,n){if(!l(this._attributionsByLevel)||!l(this._tileCredits))return;let o=this._attributionsByLevel.get(n);return l(this._tileCredits)?this._tileCredits.concat(o):o};Kb.prototype.requestImage=function(e,t,n,i){let o=this._imageryProvider.requestImage(e,t,n,i);if(l(o))return l(this._attributionsByLevel)?o:Promise.all([o,this.getViewportCredits()]).then(r=>r[0])};Kb.prototype.pickFeatures=function(e,t,n,i,o){};Kb.prototype.getViewportCredits=async function(){let e=this._maximumLevel,t=[];for(let o=0;o<e+1;o++)t.push(olt(this._resource,this._viewportUrl,o));let n=await Promise.all(t),i=new Map;for(let o=0;o<e+1;o++){let r=[],s=n[o];if(s){let a=new At(s);r.push(a)}i.set(o,r)}return this._attributionsByLevel=i,i};async function olt(e,t,n){return(await e.getDerivedResource({url:t,queryParameters:{zoom:n,north:90,south:-90,east:180,west:-180},data:JSON.stringify(B.EMPTY_OBJECT)}).fetchJson()).copyright}function Y_e(e){let{mapType:t,overlayLayerType:n,styles:i}=e,o={mapType:t,overlay:!1};return t==="terrain"&&!l(n)&&(o.layerTypes=["layerRoadmap"]),l(n)&&(o.mapType="satellite",o.overlay=!0,o.layerTypes=[n]),l(i)&&(o.styles=i),o}async function rlt(e){let{language:t,region:n,key:i,url:o}=e,r=Y_e(e),s=o.url??o;N_e.test(s)||(s+="/");let a=await ve.post({url:`${s}v1/createSession`,queryParameters:{key:i},data:JSON.stringify({...r,language:t,region:n})});return JSON.parse(a)}var fX=Kb;var GSi=x(T(),1);var slt=/\/$/;function DC(e){e=e??{};let t=e.tilesetId??"microsoft.imagery";this._maximumLevel=e.maximumLevel??22,this._minimumLevel=e.minimumLevel??0,this._subscriptionKey=e.subscriptionKey??e["subscription-key"],this._tilesetId=e.tilesetId;let n=e.url instanceof ss?e.url:ve.createIfNeeded(e.url??"https://atlas.microsoft.com/"),i=n.getUrlComponent();slt.test(i)||(i+="/");let o=`${i}map/tile`;this._viewportUrl=`${i}map/attribution`,n.url=o,n.setQueryParameters({"api-version":"2024-04-01",tilesetId:t,"subscription-key":this._subscriptionKey,zoom:"{z}",x:"{x}",y:"{y}"}),this._resource=n;let r;l(e.credit)&&(r=e.credit,typeof r=="string"&&(r=new At(r)));let s=new xs({...e,maximumLevel:this._maximumLevel,minimumLevel:this._minimumLevel,url:n,credit:r});s._resource=n,this._imageryProvider=s,this._tileCredits=n.credits,this._attributionsByLevel=void 0}Object.defineProperties(DC.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});DC.prototype.getTileCredits=function(e,t,n){if(!l(this._attributionsByLevel)||!l(this._tileCredits))return;let o=this._attributionsByLevel.get(n);return l(this._tileCredits)?this._tileCredits.concat(o):o};DC.prototype.requestImage=function(e,t,n,i){let o=this._imageryProvider.requestImage(e,t,n,i);if(l(o))return l(this._attributionsByLevel)?o:Promise.all([o,this.getViewportCredits()]).then(r=>r[0])};DC.prototype.pickFeatures=function(e,t,n,i,o){};DC.prototype.getViewportCredits=async function(){let e=this._maximumLevel,t=[];for(let o=0;o<e+1;o++)t.push(alt(this._resource,this._viewportUrl,this._subscriptionKey,this._tilesetId,o));let n=await Promise.all(t),i=new Map;for(let o=0;o<e+1;o++){let r=[],s=n[o].join(",");if(s){let a=new At(s);r.push(a)}i.set(o,r)}return this._attributionsByLevel=i,i};async function alt(e,t,n,i,o){return(await e.getDerivedResource({url:t,queryParameters:{zoom:o,bounds:"-180,-90,180,90"},data:JSON.stringify(B.EMPTY_OBJECT)}).fetchJson()).copyrights}var pX=DC;var clt=async(e,t,n)=>hx.fromUrl(new ss(t,n)),llt=async(e,{options:t})=>Hb.fromUrl(e,t),dlt=async(e,{options:t})=>rX.fromUrl(e,t),ult=async(e,{options:t})=>{let n=t.channel;return delete t.channel,cX.fromUrl(e,n,t)},mlt=async(e,{options:t})=>new lX({url:e,...t}),hlt=async(e,{options:t})=>dX.fromUrl(e,t),flt=async(e,{options:t})=>hx.fromUrl(e,t),plt=async(e,{options:t})=>new xs({url:e,...t}),blt=async(e,{options:t})=>new mX({url:e,...t}),glt=async(e,{options:t})=>new hX({url:e,...t}),Fq=async(e,t,n)=>{delete t.externalType,t.url=e;let i=new ss(t,n),o=(r,s)=>{delete s.externalType,s.url=e;let{options:a}=s;r.setQueryParameters({session:a.session,key:a.key})};return i.refreshCallback=o,new fX({...t.options,url:i})},ylt=async(e,t,n)=>{delete t.externalType,t.url=e;let i=new ss(t,n),o=(r,s)=>{delete s.externalType,s.url=e;let{options:a}=s;r.setQueryParameters({"subscription-key":a["subscription-key"]})};return i.refreshCallback=o,new pX({...t.options,url:i})},xlt={ARCGIS_MAPSERVER:llt,BING:dlt,GOOGLE_EARTH:ult,MAPBOX:mlt,SINGLE_TILE:hlt,TMS:flt,URL_TEMPLATE:plt,WMS:blt,WMTS:glt,GOOGLE_2D_MAPS:Fq,AZURE_MAPS:ylt,defaultFactoryCallback:clt},OC=Object.freeze(xlt);function Dp(){this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileCredits=void 0,this._errorEvent=new Se}Object.defineProperties(Dp.prototype,{rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}},proxy:{get:function(){}}});Dp.fromAssetId=async function(e,t){t=t??B.EMPTY_OBJECT;let n=ss._createEndpointResource(e,t),i=e.toString()+t.accessToken+t.server,o=Dp._endpointCache[i];l(o)||(o=n.fetchJson(),Dp._endpointCache[i]=o);let r=await o;if(r.type!=="IMAGERY")throw new ae(`Cesium ion asset ${e} is not an imagery asset.`);let s=r.externalType,a=OC.defaultFactoryCallback;r=Je(r,!0),r.options=r.options??{};let c=r.options?.url;if(delete t.url,l(s)&&(a=OC[s],!l(a)))throw new ae(`Unrecognized Cesium ion imagery type: ${s}`);let d=await a(c,r,n),u=new Dp(t);return d.errorEvent.addEventListener(function(m){m.provider=u,u._errorEvent.raiseEvent(m)}),u._tileCredits=ss.getCreditsFromEndpoint(r,n),u._imageryProvider=d,u};Dp.prototype.getTileCredits=function(e,t,n){let i=this._imageryProvider.getTileCredits(e,t,n);return l(i)?this._tileCredits.concat(i):this._tileCredits};Dp.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};Dp.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};Dp._endpointCache={};var ed=Dp;var qSi=x(T(),1),w_e={AERIAL:2,AERIAL_WITH_LABELS:3,ROAD:4};Object.freeze(w_e);var Jb=w_e;function Tlt(e){e=e??B.EMPTY_OBJECT;let t=e.style??Jb.AERIAL;return ed.fromAssetId(t)}var jb=Tlt;var rZi=x(T(),1),bX=`uniform sampler2D u_texture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(u_texture, v_textureCoordinates); } `;var aZi=x(T(),1),gX=`in vec4 position; in float webMercatorT; uniform vec2 u_textureDimensions; out vec2 v_textureCoordinates; void main() { v_textureCoordinates = vec2(position.x, webMercatorT); gl_Position = czm_viewportOrthographic * (position * vec4(u_textureDimensions, 1.0, 1.0)); } `;var fZi=x(T(),1);var lZi=x(T(),1),M_e={UNLOADED:0,TRANSITIONING:1,RECEIVED:2,TEXTURE_LOADED:3,READY:4,FAILED:5,INVALID:6,PLACEHOLDER:7};Object.freeze(M_e);var On=M_e;function BC(e,t,n,i,o){if(this.imageryLayer=e,this.x=t,this.y=n,this.level=i,this.request=void 0,i!==0){let r=t/2|0,s=n/2|0,a=i-1;this.parent=e.getImageryFromCache(r,s,a)}this.state=On.UNLOADED,this.imageUrl=void 0,this.image=void 0,this.texture=void 0,this.textureWebMercator=void 0,this.credits=void 0,this.referenceCount=0,!l(o)&&e.ready&&(o=e.imageryProvider.tilingScheme.tileXYToRectangle(t,n,i)),this.rectangle=o}BC.createPlaceholder=function(e){let t=new BC(e,0,0,0);return t.addReference(),t.state=On.PLACEHOLDER,t};BC.prototype.addReference=function(){++this.referenceCount};BC.prototype.releaseReference=function(){return--this.referenceCount,this.referenceCount===0?(this.imageryLayer.removeImageryFromCache(this),l(this.parent)&&this.parent.releaseReference(),l(this.image)&&l(this.image.destroy)&&this.image.destroy(),l(this.texture)&&this.texture.destroy(),l(this.textureWebMercator)&&this.texture!==this.textureWebMercator&&this.textureWebMercator.destroy(),me(this),0):this.referenceCount};BC.prototype.processStateMachine=function(e,t,n){this.state===On.UNLOADED&&!n&&(this.state=On.TRANSITIONING,this.imageryLayer._requestImagery(this)),this.state===On.RECEIVED&&(this.state=On.TRANSITIONING,this.imageryLayer._createTexture(e.context,this));let i=this.state===On.READY&&t&&!this.texture;(this.state===On.TEXTURE_LOADED||i)&&(this.state=On.TRANSITIONING,this.imageryLayer._reprojectTexture(e,this,t))};var zC=BC;var yZi=x(T(),1);function Iq(e,t,n){this.readyImagery=void 0,this.loadingImagery=e,this.textureCoordinateRectangle=t,this.textureTranslationAndScale=void 0,this.useWebMercatorT=n}Iq.prototype.freeResources=function(){l(this.readyImagery)&&this.readyImagery.releaseReference(),l(this.loadingImagery)&&this.loadingImagery.releaseReference()};Iq.prototype.processStateMachine=function(e,t,n){let i=this.loadingImagery,o=i.imageryLayer;if(i.processStateMachine(t,!this.useWebMercatorT,n),i.state===On.READY)return l(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=this.loadingImagery,this.loadingImagery=void 0,this.textureTranslationAndScale=o._calculateTextureTranslationAndScale(e,this),!0;let r=i.parent,s;for(;l(r)&&(r.state!==On.READY||!this.useWebMercatorT&&!l(r.texture));)r.state!==On.FAILED&&r.state!==On.INVALID&&(s=s||r),r=r.parent;return this.readyImagery!==r&&(l(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=r,l(r)&&(r.addReference(),this.textureTranslationAndScale=o._calculateTextureTranslationAndScale(e,this))),i.state===On.FAILED||i.state===On.INVALID?l(s)?(s.processStateMachine(t,!this.useWebMercatorT,n),!1):!0:!1};var HC=Iq;function Oi(e,t){this._imageryProvider=e,this._readyEvent=new Se,this._errorEvent=new Se,t=t??B.EMPTY_OBJECT,e=e??B.EMPTY_OBJECT,this.alpha=t.alpha??e._defaultAlpha??1,this.nightAlpha=t.nightAlpha??e._defaultNightAlpha??1,this.dayAlpha=t.dayAlpha??e._defaultDayAlpha??1,this.brightness=t.brightness??e._defaultBrightness??Oi.DEFAULT_BRIGHTNESS,this.contrast=t.contrast??e._defaultContrast??Oi.DEFAULT_CONTRAST,this.hue=t.hue??e._defaultHue??Oi.DEFAULT_HUE,this.saturation=t.saturation??e._defaultSaturation??Oi.DEFAULT_SATURATION,this.gamma=t.gamma??e._defaultGamma??Oi.DEFAULT_GAMMA,this.splitDirection=t.splitDirection??Oi.DEFAULT_SPLIT,this.minificationFilter=t.minificationFilter??e._defaultMinificationFilter??Oi.DEFAULT_MINIFICATION_FILTER,this.magnificationFilter=t.magnificationFilter??e._defaultMagnificationFilter??Oi.DEFAULT_MAGNIFICATION_FILTER,this.show=t.show??!0,this._minimumTerrainLevel=t.minimumTerrainLevel,this._maximumTerrainLevel=t.maximumTerrainLevel,this._rectangle=t.rectangle??re.MAX_VALUE,this._maximumAnisotropy=t.maximumAnisotropy,this._imageryCache={},this._skeletonPlaceholder=new HC(zC.createPlaceholder(this)),this._show=!0,this._layerIndex=-1,this._isBaseLayer=!1,this._requestImageError=void 0,this._reprojectComputeCommands=[],this.cutoutRectangle=t.cutoutRectangle,this.colorToAlpha=t.colorToAlpha,this.colorToAlphaThreshold=t.colorToAlphaThreshold??Oi.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD}Object.defineProperties(Oi.prototype,{imageryProvider:{get:function(){return this._imageryProvider}},ready:{get:function(){return l(this._imageryProvider)}},errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},rectangle:{get:function(){return this._rectangle}}});Oi.DEFAULT_BRIGHTNESS=1;Oi.DEFAULT_CONTRAST=1;Oi.DEFAULT_HUE=0;Oi.DEFAULT_SATURATION=1;Oi.DEFAULT_GAMMA=1;Oi.DEFAULT_SPLIT=Xr.NONE;Oi.DEFAULT_MINIFICATION_FILTER=zt.LINEAR;Oi.DEFAULT_MAGNIFICATION_FILTER=ni.LINEAR;Oi.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD=.004;Oi.fromProviderAsync=function(e,t){let n=new Oi(void 0,t);return Clt(n,Promise.resolve(e)),n};Oi.fromWorldImagery=function(e){return e=e??B.EMPTY_OBJECT,Oi.fromProviderAsync(jb({style:e.style}),e)};Oi.prototype.isBaseLayer=function(){return this._isBaseLayer};Oi.prototype.isDestroyed=function(){return!1};Oi.prototype.destroy=function(){return me(this)};var D_e=new re,k_e=new re,Pq=new re,O_e=new re;Oi.prototype.getImageryRectangle=function(){let e=this._imageryProvider,t=this._rectangle;return re.intersection(e.rectangle,t)};Oi.prototype._createTileImagerySkeletons=function(e,t,n){let i=e.data;if(!l(t)||l(this._minimumTerrainLevel)&&e.level<this._minimumTerrainLevel||l(this._maximumTerrainLevel)&&e.level>this._maximumTerrainLevel)return!1;l(n)||(n=i.imagery.length);let o=this._imageryProvider;if(!this.ready)return this._skeletonPlaceholder.loadingImagery.addReference(),i.imagery.splice(n,0,this._skeletonPlaceholder),!0;let r=o.tilingScheme.projection instanceof fi&&e.rectangle.north<fi.MaximumLatitude&&e.rectangle.south>-fi.MaximumLatitude,s=re.intersection(o.rectangle,this._rectangle,D_e),a=re.intersection(e.rectangle,s,k_e);if(!l(a)){if(!this.isBaseLayer())return!1;let A=s,W=e.rectangle;a=k_e,W.south>=A.north?a.north=a.south=A.north:W.north<=A.south?a.north=a.south=A.south:(a.south=Math.max(W.south,A.south),a.north=Math.min(W.north,A.north)),W.west>=A.east?a.west=a.east=A.east:W.east<=A.west?a.west=a.east=A.west:(a.west=Math.max(W.west,A.west),a.east=Math.min(W.east,A.east))}let c=0;a.south>0?c=a.south:a.north<0&&(c=a.north);let u=1*t.getLevelMaximumGeometricError(e.level),m=Zlt(this,u,c);m=Math.max(0,m);let p=o.maximumLevel;if(m>p&&(m=p),l(o.minimumLevel)){let A=o.minimumLevel;m<A&&(m=A)}let b=o.tilingScheme,f=b.positionToTileXY(re.northwest(a),m),y=b.positionToTileXY(re.southeast(a),m),_=e.rectangle.width/512,S=e.rectangle.height/512,Z=b.tileXYToRectangle(f.x,f.y,m);Math.abs(Z.south-e.rectangle.north)<S&&f.y<y.y&&++f.y,Math.abs(Z.east-e.rectangle.west)<_&&f.x<y.x&&++f.x;let V=b.tileXYToRectangle(y.x,y.y,m);Math.abs(V.north-e.rectangle.south)<S&&y.y>f.y&&--y.y,Math.abs(V.west-e.rectangle.east)<_&&y.x>f.x&&--y.x;let C=re.clone(e.rectangle,O_e),G=b.tileXYToRectangle(f.x,f.y,m),E=re.intersection(G,s,Pq),v;r?(b.rectangleToNativeRectangle(C,C),b.rectangleToNativeRectangle(G,G),b.rectangleToNativeRectangle(E,E),b.rectangleToNativeRectangle(s,s),v=b.tileXYToNativeRectangle.bind(b),_=C.width/512,S=C.height/512):v=b.tileXYToRectangle.bind(b);let F,P=0,N=1,g;!this.isBaseLayer()&&Math.abs(E.west-C.west)>=_&&(P=Math.min(1,(E.west-C.west)/C.width)),!this.isBaseLayer()&&Math.abs(E.north-C.north)>=S&&(N=Math.max(0,(E.north-C.south)/C.height));let R=N;for(let A=f.x;A<=y.x;A++)if(F=P,G=v(A,f.y,m),E=re.simpleIntersection(G,s,Pq),!!l(E)){P=Math.min(1,(E.east-C.west)/C.width),A===y.x&&(this.isBaseLayer()||Math.abs(E.east-C.east)<_)&&(P=1),N=R;for(let W=f.y;W<=y.y;W++){if(g=N,G=v(A,W,m),E=re.simpleIntersection(G,s,Pq),!l(E))continue;N=Math.max(0,(E.south-C.south)/C.height),W===y.y&&(this.isBaseLayer()||Math.abs(E.south-C.south)<S)&&(N=0);let X=new ce(F,N,P,g),Y=this.getImageryFromCache(A,W,m);i.imagery.splice(n,0,new HC(Y,X,r)),++n}}return!0};Oi.prototype._calculateTextureTranslationAndScale=function(e,t){let n=t.readyImagery.rectangle,i=e.rectangle;if(t.useWebMercatorT){let c=t.readyImagery.imageryLayer.imageryProvider.tilingScheme;n=c.rectangleToNativeRectangle(n,D_e),i=c.rectangleToNativeRectangle(i,O_e)}let o=i.width,r=i.height,s=o/n.width,a=r/n.height;return new ce(s*(i.west-n.west)/o,a*(i.south-n.south)/r,s,a)};Oi.prototype._requestImagery=function(e){let t=this._imageryProvider,n=this;function i(s){if(!l(s))return o();e.image=s,e.state=On.RECEIVED,e.request=void 0,zo.reportSuccess(n._requestImageError)}function o(s){if(e.request.state===Ti.CANCELLED){e.state=On.UNLOADED,e.request=void 0;return}e.state=On.FAILED,e.request=void 0;let a=`Failed to obtain image tile X: ${e.x} Y: ${e.y} Level: ${e.level}.`;n._requestImageError=zo.reportError(n._requestImageError,t,t.errorEvent,a,e.x,e.y,e.level,s),n._requestImageError.retry&&r()}function r(){let s=new _r({throttle:!1,throttleByServer:!0,type:ks.IMAGERY});e.request=s,e.state=On.TRANSITIONING;let a=t.requestImage(e.x,e.y,e.level,s);if(!l(a)){e.state=On.UNLOADED,e.request=void 0;return}l(t.getTileCredits)&&(e.credits=t.getTileCredits(e.x,e.y,e.level)),a.then(function(c){i(c)}).catch(function(c){o(c)})}r()};Oi.prototype._createTextureWebGL=function(e,t){let n=new kt({minificationFilter:this.minificationFilter,magnificationFilter:this.magnificationFilter}),i=t.image;return l(i.internalFormat)?new Ct({context:e,pixelFormat:i.internalFormat,width:i.width,height:i.height,source:{arrayBufferView:i.bufferView},sampler:n}):new Ct({context:e,source:i,pixelFormat:this._imageryProvider.hasAlphaChannel?Be.RGBA:Be.RGB,sampler:n})};Oi.prototype._createTexture=function(e,t){let n=this._imageryProvider,i=t.image;if(l(n.tileDiscardPolicy)){let r=n.tileDiscardPolicy;if(l(r)){if(!r.isReady()){t.state=On.RECEIVED;return}if(r.shouldDiscardImage(i)){t.state=On.INVALID;return}}}let o=this._createTextureWebGL(e,t);n.tilingScheme.projection instanceof fi?t.textureWebMercator=o:t.texture=o,t.image=void 0,t.state=On.TEXTURE_LOADED};function U_e(e,t,n){return`${e}:${t}:${n}`}Oi.prototype._finalizeReprojectTexture=function(e,t){let n=this.minificationFilter,i=this.magnificationFilter;if(n===zt.LINEAR&&i===ni.LINEAR&&!Be.isCompressedFormat(t.pixelFormat)&&L.isPowerOfTwo(t.width)&&L.isPowerOfTwo(t.height)){n=zt.LINEAR_MIPMAP_LINEAR;let r=Xt.maximumTextureFilterAnisotropy,s=Math.min(r,this._maximumAnisotropy??r),a=U_e(n,i,s),c=e.cache.imageryLayerMipmapSamplers;l(c)||(c={},e.cache.imageryLayerMipmapSamplers=c);let d=c[a];l(d)||(d=c[a]=new kt({wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i,maximumAnisotropy:s})),t.generateMipmap(bm.NICEST),t.sampler=d}else{let r=U_e(n,i,0),s=e.cache.imageryLayerNonMipmapSamplers;l(s)||(s={},e.cache.imageryLayerNonMipmapSamplers=s);let a=s[r];l(a)||(a=s[r]=new kt({wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i})),t.sampler=a}};Oi.prototype._reprojectTexture=function(e,t,n){let i=t.textureWebMercator||t.texture,o=t.rectangle,r=e.context;if(n=n??!0,n&&!(this._imageryProvider.tilingScheme.projection instanceof wi)&&o.width/i.width>1e-5){let s=this;t.addReference();let a=new Yl({persists:!0,owner:this,preExecute:function(c){Slt(c,r,i,t.rectangle)},postExecute:function(c){t.texture=c,s._finalizeReprojectTexture(r,c),t.state=On.READY,t.releaseReference()},canceled:function(){t.state=On.TEXTURE_LOADED,t.releaseReference()}});this._reprojectComputeCommands.push(a)}else n&&(t.texture=i),this._finalizeReprojectTexture(r,i),t.state=On.READY};Oi.prototype.queueReprojectionCommands=function(e){let t=this._reprojectComputeCommands,n=t.length;for(let i=0;i<n;++i)e.commandList.push(t[i]);t.length=0};Oi.prototype.cancelReprojections=function(){this._reprojectComputeCommands.forEach(function(e){l(e.canceled)&&e.canceled()}),this._reprojectComputeCommands.length=0};Oi.prototype.getImageryFromCache=function(e,t,n,i){let o=B_e(e,t,n),r=this._imageryCache[o];return l(r)||(r=new zC(this,e,t,n,i),this._imageryCache[o]=r),r.addReference(),r};Oi.prototype.removeImageryFromCache=function(e){let t=B_e(e.x,e.y,e.level);delete this._imageryCache[t]};function B_e(e,t,n){return JSON.stringify([e,t,n])}var lB={u_textureDimensions:function(){return this.textureDimensions},u_texture:function(){return this.texture},textureDimensions:new M,texture:void 0},_lt=hn.supportsTypedArrays()?new Float32Array(128):void 0;function Slt(e,t,n,i){let o=t.cache.imageryLayer_reproject;if(!l(o)){o=t.cache.imageryLayer_reproject={vertexArray:void 0,shaderProgram:void 0,sampler:void 0,destroy:function(){l(this.framebuffer)&&this.framebuffer.destroy(),l(this.vertexArray)&&this.vertexArray.destroy(),l(this.shaderProgram)&&this.shaderProgram.destroy()}};let _=new Float32Array(256),S=0;for(let E=0;E<64;++E){let v=E/63;_[S++]=0,_[S++]=v,_[S++]=1,_[S++]=v}let Z={position:0,webMercatorT:1},V=Oo.getRegularGridIndices(2,64),C=et.createIndexBuffer({context:t,typedArray:V,usage:Ie.STATIC_DRAW,indexDatatype:De.UNSIGNED_SHORT});o.vertexArray=new Dn({context:t,attributes:[{index:Z.position,vertexBuffer:et.createVertexBuffer({context:t,typedArray:_,usage:Ie.STATIC_DRAW}),componentsPerAttribute:2},{index:Z.webMercatorT,vertexBuffer:et.createVertexBuffer({context:t,sizeInBytes:512,usage:Ie.STREAM_DRAW}),componentsPerAttribute:1}],indexBuffer:C});let G=new ze({sources:[gX]});o.shaderProgram=en.fromCache({context:t,vertexShaderSource:G,fragmentShaderSource:bX,attributeLocations:Z}),o.sampler=new kt({wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR,magnificationFilter:ni.LINEAR})}n.sampler=o.sampler;let r=n.width,s=n.height;lB.textureDimensions.x=r,lB.textureDimensions.y=s,lB.texture=n;let a=Math.sin(i.south),c=.5*Math.log((1+a)/(1-a));a=Math.sin(i.north);let u=1/(.5*Math.log((1+a)/(1-a))-c),m=new Ct({context:t,width:r,height:s,pixelFormat:n.pixelFormat,pixelDatatype:n.pixelDatatype,preMultiplyAlpha:n.preMultiplyAlpha});L.isPowerOfTwo(r)&&L.isPowerOfTwo(s)&&m.generateMipmap(bm.NICEST);let p=i.south,b=i.north,f=_lt,y=0;for(let _=0;_<64;++_){let S=_/63,Z=L.lerp(p,b,S);a=Math.sin(Z);let C=(.5*Math.log((1+a)/(1-a))-c)*u;f[y++]=C,f[y++]=C}o.vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(f),e.shaderProgram=o.shaderProgram,e.outputTexture=m,e.uniformMap=lB,e.vertexArray=o.vertexArray}function Zlt(e,t,n){let i=e._imageryProvider,o=i.tilingScheme,r=o.ellipsoid,s=e._imageryProvider.tilingScheme.projection instanceof wi?1:Math.cos(n),a=o.rectangle,d=r.maximumRadius*a.width*s/(i.tileWidth*o.getNumberOfXTilesAtLevel(0))/t,u=Math.log(d)/Math.log(2);return Math.round(u)|0}function Vlt(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function Clt(e,t){let n;try{if(n=await Promise.resolve(t),e.isDestroyed())return;e._imageryProvider=n,e._readyEvent.raiseEvent(n)}catch(i){Vlt(e._errorEvent,i)}}var Ts=Oi;var sVi=x(T(),1),Xq=class{constructor(){this.alpha=!1,this.brightness=!1,this.contrast=!1,this.hue=!1,this.saturation=!1,this.gamma=!1,this.colorToAlpha=!1}},yX=Xq;var kVi=x(T(),1);var hVi=x(T(),1);var cVi=x(T(),1),Nq=class{constructor(t,n,i,o){this._minX=t??0,this._minY=n??0,this._maxX=i??0,this._maxY=o??0}get minX(){return this._minX}set minX(t){this._minX=t}get minY(){return this._minY}set minY(t){this._minY=t}get maxX(){return this._maxX}set maxX(t){this._maxX=t}get maxY(){return this._maxY}set maxY(t){this._maxY=t}contains(t,n){return t>=this.minX&&t<this.maxX&&n>=this.minY&&n<this.maxY}containsExclusive(t,n){return t>this.minX&&t<this.maxX&&n>this.minY&&n<this.maxY}containsInclusive(t,n){return t>=this.minX&&t<=this.maxX&&n>=this.minY&&n<=this.maxY}},KC=Nq;var Rlt=new re,z_e=new re,Glt=new re,Alt=new re,Elt=new re,Llt=new re,Yq=class e{constructor(t,n,i,o,r){this._x=t,this._y=n,this._level=i,this._textureCoordinateRectangle=o,this._imagery=r}get x(){return this._x}get y(){return this._y}get level(){return this._level}get textureCoordinateRectangle(){return this._textureCoordinateRectangle}get imagery(){return this._imagery}static createImageryCoverages(t,n,i){if(!n.show)return[];let o=n.imageryProvider,r=e._clampImageryLevel(o,i),s=re.intersection(o.rectangle,n.rectangle,Rlt),a=o.tilingScheme,c=e._computeImageryRange(t,s,a,r),d=Alt;a.rectangleToNativeRectangle(t,d);let u=Elt;a.rectangleToNativeRectangle(s,u);let m=(b,f,y)=>{let _=a.tileXYToRectangle(b,f,y),S=re.intersection(_,s,Glt);if(!l(S))return;let Z=Llt;return a.rectangleToNativeRectangle(S,Z),Z};return e._computeImageryCoverages(n,c,r,d,m)}static _clampImageryLevel(t,n){let i=t.minimumLevel??0,o=t.maximumLevel??Number.POSITIVE_INFINITY,r=Math.min(o-1,Math.max(i,n));return Math.floor(r)}static _computeImageryRange(t,n,i,o){let r=e._computeOverlappedRectangle(t,n),s=i.positionToTileXY(re.northwest(r),o),a=i.positionToTileXY(re.southeast(r),o),c=new KC;c.minX=s.x,c.minY=s.y,c.maxX=a.x,c.maxY=a.y;let d=t.width/512,u=t.height/512,m=i.tileXYToRectangle(c.minX,c.minY,o);Math.abs(m.south-t.north)<u&&c.minY<c.maxY&&++c.minY,Math.abs(m.east-t.west)<d&&c.minX<c.maxX&&++c.minX;let f=i.tileXYToRectangle(c.maxX,c.maxY,o);return Math.abs(f.north-t.south)<u&&c.maxY>c.minY&&--c.maxY,Math.abs(f.west-t.east)<d&&c.maxX>c.minX&&--c.maxX,c}static _clampRectangle(t,n,i){return l(i)||(i=new re),t.south>=n.north?i.north=i.south=n.north:t.north<=n.south?i.north=i.south=n.south:(i.south=Math.max(t.south,n.south),i.north=Math.min(t.north,n.north)),t.west>=n.east?i.west=i.east=n.east:t.east<=n.west?i.west=i.east=n.west:(i.west=Math.max(t.west,n.west),i.east=Math.min(t.east,n.east)),i}static _computeOverlappedRectangle(t,n){let i=re.intersection(t,n,z_e);return l(i)?i:e._clampRectangle(t,n,z_e)}static _computeImageryCoverages(t,n,i,o,r){let s=[];for(let a=n.minX;a<=n.maxX;a++){let c=r(a,n.maxY,i);if(l(c))for(let d=n.minY;d<=n.maxY;d++){let u=r(a,d,i);if(!l(u))continue;let m=e._localizeToCartesianRectangle(u,o,void 0),p=t.getImageryFromCache(a,d,i),b=new e(a,d,i,m,p);s.push(b)}}return s}static _localizeToCartesianRectangle(t,n,i){l(i)||(i=new KC);let o=1/n.width,r=1/n.height;return i.minX=(t.west-n.west)*o,i.minY=(t.south-n.south)*r,i.maxX=(t.east-n.west)*o,i.maxY=(t.north-n.south)*r,i}},JC=Yq;var RVi=x(T(),1);var wq=class e{static createTextureCoordinatesForMappedPositions(t,n){let i=t.cartographicPositions,o=t.cartographicBoundingRectangle,r=t.numPositions;return e._createTextureCoordinates(i,r,o,n)}static _createTextureCoordinates(t,n,i,o){let r=new $e;$e.fromRectangle(i,o,r);let s=e.createProjectedPositions(t,o),a=e.computeTexCoords(s,r);return e.createTypedArrayFromCartesians2(n,a)}static createTextureCoordinatesAttributeForMappedPositions(t,n){let i=e.createTextureCoordinatesForMappedPositions(t,n);return e.createTexCoordAttribute(i)}static createCartographicPositions(t,n,i){let o=ga.readAttributeAsTypedArray(t),r=t.type,s=Dt.getNumberOfComponents(r),a=e.createIterableCartesian3FromTypedArray(o,s),c=e.transformCartesians3(a,n);return e.transformToCartographic(c,i)}static createIterableCartesian3FromTypedArray(t,n){let i=new h,o=t.length/n;return{[Symbol.iterator]:function*(){for(let s=0;s<o;s++)i.x=t[s*n+0],i.y=t[s*n+1],i.z=t[s*n+2],yield i}}}static map(t,n){return{[Symbol.iterator]:function*(){for(let o of t)yield n(o)}}}static computeCartographicBoundingRectangle(t,n){l(n)||(n=new re);let i=Number.NEGATIVE_INFINITY,o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=Number.POSITIVE_INFINITY;for(let a of t)i=Math.max(i,a.latitude),o=Math.min(o,a.latitude),r=Math.max(r,a.longitude),s=Math.min(s,a.longitude);return n.north=i,n.south=o,n.east=r,n.west=s,n}static transformCartesians3(t,n){let i=new h;return e.map(t,r=>(I.multiplyByPoint(n,r,i),i))}static transformToCartographic(t,n){let i=new fe;return e.map(t,r=>(n.cartesianToCartographic(r,i),i))}static createProjectedPositions(t,n){let i=new h;return e.map(t,r=>(n.project(r,i),i))}static computeTexCoords(t,n){let i=new M,o=1/n.width,r=1/n.height;return e.map(t,a=>{let c=(a.x-n.x)*o,d=(a.y-n.y)*r,u=Math.min(Math.max(c,0),1),m=Math.min(Math.max(d,0),1);return i.x=u,i.y=m,i})}static createTypedArrayFromCartesians2(t,n){let i=new Float32Array(t*2),o=0;for(let r of n)i[o*2+0]=r.x,i[o*2+1]=r.y,o++;return i}static createTexCoordAttribute(t){return{name:"Imagery Texture Coordinates",semantic:st.TEXCOORD,setIndex:0,componentDatatype:J.FLOAT,type:Dt.VEC2,normalized:!1,count:t.length/2,min:void 0,max:void 0,constant:new M(0,0),quantization:void 0,typedArray:t,byteOffset:0,byteStride:void 0}}},TS=wq;var AVi=x(T(),1);var Mq=class{constructor(t,n,i,o){this._cartographicPositions=t,this._numPositions=n,this._cartographicBoundingRectangle=i,this._ellipsoid=o}get cartographicPositions(){return this._cartographicPositions}get numPositions(){return this._numPositions}get cartographicBoundingRectangle(){return this._cartographicBoundingRectangle}get ellipsoid(){return this._ellipsoid}},xX=Mq;var kq=class e{constructor(t,n,i){this._model=t,this._runtimeNode=n,this._runtimePrimitive=i,this._mappedPositionsPerEllipsoid=void 0,this._mappedPositionsModelMatrix=new I,this._lastImageryLayersModificationCounter=0,this._imageryTexCoordAttributesPerProjection=void 0,this._currentImageryLayers=void 0,this._coveragesPerLayer=void 0,this._allImageriesReady=!1}coveragesForImageryLayer(t){let o=this._model.imageryLayers.indexOf(t);if(o===-1)throw new ge("Imagery layer is not part of the model");let r=this._coveragesPerLayer;if(!l(r))throw new ge("The coveragesPerLayer have not been computed yet");return r[o]}update(t){let n=this._model,r=n.content.tileset.imageryLayersModificationCounter;this._lastImageryLayersModificationCounter!==r&&(delete this._mappedPositionsPerEllipsoid,this._lastImageryLayersModificationCounter=r),this._mappedPositionsNeedUpdate&&(n.resetDrawCommands(),this._mappedPositionsPerEllipsoid=this._computeMappedPositionsPerEllipsoid(),this._deleteCoveragesPerLayer(),this._destroyImageryTexCoordAttributes()),l(this._imageryTexCoordAttributesPerProjection)||(this._imageryTexCoordAttributesPerProjection=this._computeImageryTexCoordsAttributesPerProjection(),this._uploadImageryTexCoordAttributes(t.context)),l(this._coveragesPerLayer)||(this._computeCoveragesPerLayer(),this._allImageriesReady=!1),this._allImageriesReady||this._updateImageries(t)}_deleteCoveragesPerLayer(){let t=this._coveragesPerLayer;if(!l(t))return;let n=this._currentImageryLayers,i=t.length;for(let o=0;o<i;o++){let r=n[o],s=t[o];this._deleteCoverages(r,s)}delete this._currentImageryLayers,delete this._coveragesPerLayer}_deleteCoverages(t,n){if(t.isDestroyed())return;let i=n.length;for(let o=0;o<i;o++)n[o].imagery.releaseReference()}_uploadImageryTexCoordAttributes(t){let n=this._imageryTexCoordAttributesPerProjection;if(!l(n))return;let i=n.length;for(let o=0;o<i;o++){let r=n[o],s=et.createVertexBuffer({context:t,typedArray:r.typedArray,usage:Ie.STATIC_DRAW});s.vertexArrayDestroyable=!1,r.buffer=s}}_destroyImageryTexCoordAttributes(){let t=this._imageryTexCoordAttributesPerProjection;if(!l(t))return;let n=t.length;for(let i=0;i<n;i++){let o=t[i];l(o)&&(l(o.buffer)&&(o.buffer.isDestroyed()||o.buffer.destroy()),t[i]=void 0)}delete this._imageryTexCoordAttributesPerProjection}get _mappedPositionsNeedUpdate(){if(!l(this._mappedPositionsPerEllipsoid))return!0;let t=this._model,n=this._mappedPositionsModelMatrix;return!I.equals(t.modelMatrix,n)}_computeMappedPositionsPerEllipsoid(){let t=this._model,n=this._runtimeNode,i=this._runtimePrimitive,o=e._obtainPrimitivePositionAttribute(i.primitive),r=o.count,s=e._computePrimitivePositionTransform(t,n,void 0),a=[],c=e._computeUniqueEllipsoids(t.imageryLayers),d=c.length;for(let u=0;u<d;u++){let m=c[u],p=TS.createCartographicPositions(o,s,m),b=TS.computeCartographicBoundingRectangle(p),f=new xX(p,r,b,m);a.push(f)}return I.clone(t.modelMatrix,this._mappedPositionsModelMatrix),a}static _computeUniqueEllipsoids(t){let n=new Set,i=t.length;for(let o=0;o<i;o++){let r=t.get(o),s=e._getEllipsoid(r);n.add(s)}return[...n]}_computeImageryTexCoordsAttributesPerProjection(){let n=this._model.imageryLayers,i=e._extractProjections(n),o=[...new Set(i)];return this._createImageryTexCoordAttributes(o)}static _extractProjections(t){let n=[],i=t.length;for(let o=0;o<i;o++){let r=t.get(o),s=e._getProjection(r);n.push(s)}return n}static _getProjection(t){return t.imageryProvider.tilingScheme.projection}_createImageryTexCoordAttributes(t){let n=[],i=t.length;for(let o=0;o<i;o++){let r=t[o],s=r.ellipsoid,a=this.mappedPositionsForEllipsoid(s),c=TS.createTextureCoordinatesAttributeForMappedPositions(a,r);n.push(c)}return n}_computeCoveragesPerLayer(){let t=[],n=[],o=this._model.imageryLayers,r=o.length;for(let s=0;s<r;s++){let a=o.get(s),c=this._computeCoverage(a);t.push(c),n.push(a)}this._coveragesPerLayer=t,this._currentImageryLayers=n}_computeCoverage(t){let i=this.mappedPositionsForImageryLayer(t).cartographicBoundingRectangle,o=this._computeImageryLevel(t,i);return JC.createImageryCoverages(i,t,o)}_computeImageryLevel(t,n){let i=t.imageryProvider,r=i.tilingScheme.rectangle,s=1,a=n.width,c=r.width;n.height>n.width&&(a=n.height,c=r.height);let d=Math.log2(s*c/a);return JC._clampImageryLevel(i,d)}_updateImageries(t){let n=this._model,i=this._coveragesPerLayer,o=i.length,r=!0;for(let s=0;s<o;s++){let a=i[s],c=a.length;for(let d=0;d<c;d++){let m=a[d].imagery;m.state===On.READY||m.state===On.FAILED||m.state===On.INVALID||(r=!1,m.processStateMachine(t,!1,!1))}}r&&n.resetDrawCommands(),this._allImageriesReady=r}mappedPositionsForImageryLayer(t){let n=e._getEllipsoid(t);return this.mappedPositionsForEllipsoid(n)}mappedPositionsForEllipsoid(t){let n=this._mappedPositionsPerEllipsoid;if(!l(n))throw new ge("The mappedPositions have not been computed yet");let i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.ellipsoid===t)return r}throw new ge(`Could not find mapped positions for ellipsoid ${t}`)}imageryTexCoordAttributesPerProjection(){let t=this._imageryTexCoordAttributesPerProjection;if(!l(t))throw new ge("The imagery texture coordinate attributes have not been computed yet");return this._imageryTexCoordAttributesPerProjection}get ready(){let t=this._coveragesPerLayer;return l(t)?this._allImageriesReady:!1}isDestroyed(){return!1}destroy(){if(!this.isDestroyed())return this._deleteCoveragesPerLayer(),this._destroyImageryTexCoordAttributes(),me(this)}static _computePrimitivePositionTransform(t,n,i){l(i)||(i=new I);let o=t.sceneGraph;return I.clone(I.IDENTITY,i),I.multiply(i,t.modelMatrix,i),I.multiply(i,o.components.transform,i),I.multiply(i,o.axisCorrectionMatrix,i),I.multiply(i,n.computedTransform,i),i}static _obtainPrimitivePositionAttribute(t){let n=xt.getAttributeBySemantic(t,"POSITION");if(!l(n))throw new ge("The primitive does not have a POSITION attribute");return n}static _getEllipsoid(t){return t.imageryProvider.tilingScheme.projection.ellipsoid}},_S=kq;var DVi=x(T(),1),Uq=class{constructor(t,n,i,o,r){this.imageryLayer=t,this.texture=n,this.textureTranslationAndScale=i,this.textureCoordinateRectangle=o,this.imageryTexCoordAttributeSetIndex=r}},TX=Uq;var Wlt=!1,vlt=new re,Flt=new re,Dq=class e{static process(t,n,i){let o=t.model,r=n.modelPrimitiveImagery;if(!l(r)||!r.ready)return;let s=o.imageryLayers,a=_S._extractProjections(s),c=[...new Set(a)],d=e._computeIndexMapping(a,c),u=e._createImageryInputs(s,r,d);if(u.length===0)return;u.length>10&&(gt("imagery-texture-units",`Warning: Draped imagery requires ${u.length} texture units, truncating`),u.length=10),e._addImageryTexCoordAttributesToRenderResources(r,t);let m=[];for(let p=0;p<s.length;p++)m.push(s.get(p));e._processImageryInputs(m,t,u,c.length)}static _addImageryTexCoordAttributesToRenderResources(t,n){let i=t.imageryTexCoordAttributesPerProjection();for(let o of i)e._addImageryTexCoordAttributeToRenderResources(o,n)}static _addImageryTexCoordAttributeToRenderResources(t,n){let i=Dt.getNumberOfComponents(t.type),o={index:n.attributeIndex++,value:l(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,count:t.count,componentsPerAttribute:i,componentDatatype:t.componentDatatype,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};n.attributes.push(o)}static _processImageryInputs(t,n,i,o){let r=n.shaderBuilder,s=e._computeImageryFlags(t),a=i.length;r.addDefine("HAS_IMAGERY"),r.addDefine(`IMAGERY_TEXTURE_UNITS ${a}`),e._addAttributes(r,o),e._defineUniforms(r,s),e._buildSampleAndBlendFunction(r,s),e._createMainImageryShader(r,i,s);let c=n.uniformMap,d=e._createImageryUniforms(i);e._setImageryUniforms(c,d)}static _addAttributes(t,n){for(let r=0;r<n;r++)t.addAttribute("vec2",`a_imagery_texCoord_${r}`),t.addVarying("vec2",`v_imagery_texCoord_${r}`);let i="initializeImageryAttributes",o=`void ${i}()`;t.addFunction(i,o,pe.VERTEX);for(let r=0;r<n;r++)t.addFunctionLines(i,[`v_imagery_texCoord_${r} = a_imagery_texCoord_${r};`])}static _computeImageryFlags(t){let n=new yX;for(let i=0;i<t.length;i++){let o=t[i];n.alpha|=o.alpha!==1,n.brightness|=o.brightness!==Ts.DEFAULT_BRIGHTNESS,n.contrast|=o.contrast!==Ts.DEFAULT_CONTRAST,n.hue|=o.hue!==Ts.DEFAULT_HUE,n.saturation|=o.saturation!==Ts.DEFAULT_SATURATION,n.gamma|=o.gamma!==Ts.DEFAULT_GAMMA;let r=l(o.colorToAlpha)&&o.colorToAlphaThreshold>0;n.colorToAlpha|=r}return n}static _defineUniforms(t,n){t.addUniform("sampler2D","u_imageryTextures[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),t.addUniform("vec4","u_imageryTextureCoordinateRectangle[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),t.addUniform("vec4","u_imageryTextureTranslationAndScale[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.alpha&&t.addUniform("float","u_imageryTextureAlpha[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.brightness&&t.addUniform("float","u_imageryTextureBrightness[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.contrast&&t.addUniform("float","u_imageryTextureContrast[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.hue&&t.addUniform("float","u_imageryTextureHue[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.saturation&&t.addUniform("float","u_imageryTextureSaturation[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.gamma&&t.addUniform("float","u_imageryTextureOneOverGamma[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT),n.colorToAlpha&&t.addUniform("vec4","u_imageryTextureColorToAlpha[IMAGERY_TEXTURE_UNITS]",pe.FRAGMENT)}static _createSampleAndBlendFunctionSignature(t){let n="sampleAndBlend",i=[];i.push("vec4 previousColor"),i.push("sampler2D textureToSample"),i.push("vec2 textureCoordinates"),i.push("vec4 textureCoordinateRectangle"),i.push("vec4 textureCoordinateTranslationAndScale"),t.alpha&&i.push("float textureAlpha"),t.brightness&&i.push("float textureBrightness"),t.contrast&&i.push("float textureContrast"),t.hue&&i.push("float textureHue"),t.saturation&&i.push("float textureSaturation"),t.gamma&&i.push("float textureOneOverGamma"),t.colorToAlpha&&i.push("vec4 colorToAlpha");let o=i.join(", ");return`vec4 ${n}(${o})`}static _buildSampleAndBlendFunction(t,n){let i="sampleAndBlend",o=e._createSampleAndBlendFunctionSignature(n);t.addFunction(i,o,pe.FRAGMENT),t.addFunctionLines(i,["float effectiveAlpha = 1.0;"]),n.alpha&&t.addFunctionLines(i,["effectiveAlpha = textureAlpha;"]),t.addFunctionLines(i,["if (textureCoordinates.x < textureCoordinateRectangle.x) effectiveAlpha = 0.0;","if (textureCoordinates.x > textureCoordinateRectangle.z) effectiveAlpha = 0.0;","if (textureCoordinates.y < textureCoordinateRectangle.y) effectiveAlpha = 0.0;","if (textureCoordinates.y > textureCoordinateRectangle.w) effectiveAlpha = 0.0;","vec2 translation = textureCoordinateTranslationAndScale.xy;","vec2 scale = textureCoordinateTranslationAndScale.zw;","vec2 effectiveTextureCoordinates = textureCoordinates * scale + translation;","vec4 value = texture(textureToSample, effectiveTextureCoordinates);","value = czm_srgbToLinear(value);","vec3 color = value.rgb;","float alpha = value.a;"]),n.colorToAlpha&&t.addFunctionLines(i,["vec3 colorDiff = abs(color.rgb - colorToAlpha.rgb);","colorDiff.r = czm_maximumComponent(colorDiff);","alpha = czm_branchFreeTernary(colorDiff.r < colorToAlpha.a, 0.0, alpha);"]),n.gamma?t.addFunctionLines(i,["color = pow(color, vec3(textureOneOverGamma));"]):t.addFunctionLines(i,["vec4 tempColor = czm_gammaCorrect(vec4(color, alpha));","color = tempColor.rgb;","alpha = tempColor.a;"]),n.brightness&&t.addFunctionLines(i,["color = mix(vec3(0.0), color, textureBrightness);"]),n.contrast&&t.addFunctionLines(i,["color = mix(vec3(0.5), color, textureContrast);"]),n.hue&&t.addFunctionLines(i,["color = czm_hue(color, textureHue);"]),n.saturation&&t.addFunctionLines(i,["color = czm_saturation(color, textureSaturation);"]),t.addFunctionLines(i,["float sourceAlpha = alpha * effectiveAlpha;","float outAlpha = mix(previousColor.a, 1.0, sourceAlpha);","outAlpha += sign(outAlpha) - 1.0;","vec3 outColor = mix(previousColor.rgb * previousColor.a, color, sourceAlpha) / outAlpha;","vec4 result = vec4(outColor, max(outAlpha, 0.0));"]),Wlt&&t.addFunctionLines(i,["if (abs(textureCoordinates.x - textureCoordinateRectangle.x) < (1.0/256.0) || "," abs(textureCoordinates.x - textureCoordinateRectangle.z) < (1.0/256.0) || "," abs(textureCoordinates.y - textureCoordinateRectangle.y) < (1.0/256.0) || "," abs(textureCoordinates.y - textureCoordinateRectangle.w) < (1.0/256.0))","{"," result = vec4(1.0, 0.0, 0.0, effectiveAlpha);","}"]),t.addFunctionLines(i,["return result;"])}static _createSampleAndBlendCallArguments(t,n,i){let o=`v_imagery_texCoord_${n}`,r=[];return r.push("blendedBaseColor"),r.push(`u_imageryTextures[${i}]`),r.push(`${o}`),r.push(`u_imageryTextureCoordinateRectangle[${i}]`),r.push(`u_imageryTextureTranslationAndScale[${i}]`),t.alpha&&r.push(`u_imageryTextureAlpha[${i}]`),t.brightness&&r.push(`u_imageryTextureBrightness[${i}]`),t.contrast&&r.push(`u_imageryTextureContrast[${i}]`),t.hue&&r.push(`u_imageryTextureHue[${i}]`),t.saturation&&r.push(`u_imageryTextureSaturation[${i}]`),t.gamma&&r.push(`u_imageryTextureOneOverGamma[${i}]`),t.colorToAlpha&&r.push(`u_imageryTextureColorToAlpha[${i}]`),r.join(", ")}static _createMainImageryShader(t,n,i){let o="blendBaseColorWithImagery";t.addFunction(o,"vec4 blendBaseColorWithImagery(vec4 baseColorWithAlpha)",pe.FRAGMENT),t.addFunctionLines(o,["vec4 blendedBaseColor = baseColorWithAlpha;"]);for(let r=0;r<n.length;r++){let a=n[r].imageryTexCoordAttributeSetIndex,c=e._createSampleAndBlendCallArguments(i,a,r);t.addFunctionLines(o,[`blendedBaseColor = sampleAndBlend(${c});`])}t.addFunctionLines(o,["return blendedBaseColor;"])}static _createImageryUniforms(t){let n=t.length,i={};i.imageryTextures=Array(n),i.imageryTextureCoordinateRectangle=Array(n),i.imageryTextureTranslationAndScale=Array(n),i.imageryTextureAlpha=Array(n),i.imageryTextureBrightness=Array(n),i.imageryTextureContrast=Array(n),i.imageryTextureHue=Array(n),i.imageryTextureSaturation=Array(n),i.imageryTextureOneOverGamma=Array(n),i.imageryTextureColorToAlpha=Array(n);for(let o=0;o<n;o++){let r=t[o],s=r.imageryLayer,a=r.texture,c=r.textureCoordinateRectangle,d=r.textureTranslationAndScale;i.imageryTextures[o]=a,i.imageryTextureTranslationAndScale[o]=d,i.imageryTextureCoordinateRectangle[o]=c,i.imageryTextureAlpha[o]=s.alpha,i.imageryTextureBrightness[o]=s.brightness,i.imageryTextureContrast[o]=s.contrast,i.imageryTextureHue[o]=s.hue,i.imageryTextureSaturation[o]=s.saturation,i.imageryTextureOneOverGamma[o]=1/s.gamma;let u=i.imageryTextureColorToAlpha[o];if(l(u)||(u=new ce,i.imageryTextureColorToAlpha[o]=u),l(s.colorToAlpha)&&s.colorToAlphaThreshold>0){let p=s.colorToAlpha;u.x=p.red,u.y=p.green,u.z=p.blue,u.w=s.colorToAlphaThreshold}else u.w=-1}return i}static _setImageryUniforms(t,n){for(let i in n)if(n.hasOwnProperty(i)){let o=`u_${i}`;t[o]=function(){return n[i]}}}static _createImageryInputs(t,n,i){let o=[];for(let r=0;r<t.length;r++){let s=t.get(r);if(!s.show)continue;let a=i[r],d=n.mappedPositionsForImageryLayer(s).cartographicBoundingRectangle,u=n.coveragesForImageryLayer(s);for(let m=0;m<u.length;m++){let p=u[m],b=e._createImageryInput(s,p,d,a);l(b)&&o.push(b)}}return o}static _createImageryInput(t,n,i,o){let r=n.imagery;if(r.state===On.FAILED||r.state===On.INVALID)return;let s=r.textureWebMercator;if(!l(s)&&(s=r.texture,!l(s))){r.state===On.READY&&console.log(`Imagery at ${n.x}, ${n.y} (level ${n.level}) does not have any texture - state ${r.state}`);return}let a=e._computeTextureTranslationAndScale(t,i,r.rectangle),c=n.textureCoordinateRectangle,d=new ce(c.minX,c.minY,c.maxX,c.maxY);return new TX(t,s,a,d,o)}static _computeTextureTranslationAndScale(t,n,i){let o=t.imageryProvider.tilingScheme,r=o.rectangleToNativeRectangle(n,vlt),s=o.rectangleToNativeRectangle(i,Flt);return e._computeTextureTranslationAndScaleFromNative(r,s)}static _computeTextureTranslationAndScaleFromNative(t,n){let i=1/n.width,o=1/n.height,r=t.west-n.west,s=t.south-n.south,a=r*i,c=s*o,d=t.width*i,u=t.height*o;return new ce(a,c,d,u)}static _computeIndexMapping(t,n){let i=[],o=t.length;for(let r=0;r<o;r++){let s=t[r],a=n.indexOf(s);i.push(a)}return i}},_X=Dq;var m1i=x(T(),1);var o1i=x(T(),1),SX=`#ifdef USE_IBL_LIGHTING vec3 computeIBL(vec3 position, vec3 normal, vec3 lightDirection, vec3 lightColorHdr, czm_modelMaterial material) { #if defined(DIFFUSE_IBL) || defined(SPECULAR_IBL) // Environment maps were provided, use them for IBL vec3 viewDirection = -normalize(position); vec3 iblColor = textureIBL(viewDirection, normal, material); return iblColor; #endif return vec3(0.0); } #endif #ifdef USE_CLEARCOAT vec3 addClearcoatReflection(vec3 baseLayerColor, vec3 position, vec3 lightDirection, vec3 lightColorHdr, czm_modelMaterial material) { vec3 viewDirection = -normalize(position); vec3 halfwayDirection = normalize(viewDirection + lightDirection); vec3 normal = material.clearcoatNormal; float NdotL = clamp(dot(normal, lightDirection), 0.001, 1.0); // clearcoatF0 = vec3(pow((ior - 1.0) / (ior + 1.0), 2.0)), but without KHR_materials_ior, ior is a constant 1.5. vec3 f0 = vec3(0.04); vec3 f90 = vec3(1.0); // Note: clearcoat Fresnel computed with dot(n, v) instead of dot(v, h). // This is to make it energy conserving with a simple layering function. float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0); vec3 F = fresnelSchlick2(f0, f90, NdotV); // compute specular reflection from direct lighting float roughness = material.clearcoatRoughness; float alphaRoughness = roughness * roughness; float directStrength = computeDirectSpecularStrength(normal, lightDirection, viewDirection, halfwayDirection, alphaRoughness); vec3 directReflection = F * directStrength * NdotL; vec3 color = lightColorHdr * directReflection; #ifdef SPECULAR_IBL // Find the direction in which to sample the environment map vec3 reflectMC = normalize(model_iblReferenceFrameMatrix * reflect(-viewDirection, normal)); vec3 iblColor = computeSpecularIBL(reflectMC, NdotV, f0, roughness); color += iblColor * material.occlusion; #endif float clearcoatFactor = material.clearcoatFactor; vec3 clearcoatColor = color * clearcoatFactor; // Dim base layer based on transmission loss through clearcoat return baseLayerColor * (1.0 - clearcoatFactor * F) + clearcoatColor; } #endif #if defined(LIGHTING_PBR) && defined(HAS_NORMALS) vec3 computePbrLighting(in czm_modelMaterial material, in vec3 position) { #ifdef USE_CUSTOM_LIGHT_COLOR vec3 lightColorHdr = model_lightColorHdr; #else vec3 lightColorHdr = czm_lightColorHdr; #endif vec3 viewDirection = -normalize(position); vec3 normal = material.normalEC; vec3 lightDirection = normalize(czm_lightDirectionEC); vec3 directLighting = czm_pbrLighting(viewDirection, normal, lightDirection, material); vec3 directColor = lightColorHdr * directLighting; // Accumulate colors from base layer vec3 color = directColor + material.emissive; #ifdef USE_IBL_LIGHTING color += computeIBL(position, normal, lightDirection, lightColorHdr, material); #endif #ifdef USE_CLEARCOAT color = addClearcoatReflection(color, position, lightDirection, lightColorHdr, material); #endif return color; } #endif /** * Compute the material color under the current lighting conditions. * All other material properties are passed through so further stages * have access to them. * * @param {czm_modelMaterial} material The material properties from {@MaterialStageFS} * @param {ProcessedAttributes} attributes */ void lightingStage(inout czm_modelMaterial material, ProcessedAttributes attributes) { #ifdef LIGHTING_PBR #ifdef HAS_NORMALS vec3 color = computePbrLighting(material, attributes.positionEC); #else vec3 color = material.diffuse * material.occlusion + material.emissive; #endif // In HDR mode, the frame buffer is in linear color space. The // post-processing stages (see PostProcessStageCollection) will handle // tonemapping. However, if HDR is not enabled, we must tonemap else large // values may be clamped to 1.0 #ifndef HDR color = czm_pbrNeutralTonemapping(color); #endif #else // unlit vec3 color = material.diffuse; #endif #ifdef HAS_POINT_CLOUD_COLOR_STYLE // The colors resulting from point cloud styles are adjusted differently. color = czm_gammaCorrect(color); #elif !defined(HDR) // If HDR is not enabled, the frame buffer stores sRGB colors rather than // linear colors so the linear value must be converted. color = czm_linearToSrgb(color); #endif material.diffuse = color; } `;var s1i=x(T(),1),H_e={UNLIT:0,PBR:1};Object.freeze(H_e);var Op=H_e;var K_e={name:"LightingPipelineStage"};K_e.process=function(e,t){let{model:n,lightingOptions:i,shaderBuilder:o}=e;if(l(n.lightColor)){o.addDefine("USE_CUSTOM_LIGHT_COLOR",void 0,pe.FRAGMENT),o.addUniform("vec3","model_lightColorHdr",pe.FRAGMENT);let s=e.uniformMap;s.model_lightColorHdr=function(){return n.lightColor}}let{lightingModel:r}=i;r===Op.PBR?o.addDefine("LIGHTING_PBR",void 0,pe.FRAGMENT):o.addDefine("LIGHTING_UNLIT",void 0,pe.FRAGMENT),o.addFragmentLines(SX)};var ZX=K_e;var N1i=x(T(),1);var f1i=x(T(),1),VX=`// If the style color is white, it implies the feature has not been styled. bool isDefaultStyleColor(vec3 color) { return all(greaterThan(color, vec3(1.0 - czm_epsilon3))); } vec3 blend(vec3 sourceColor, vec3 styleColor, float styleColorBlend) { vec3 blendColor = mix(sourceColor, styleColor, styleColorBlend); vec3 color = isDefaultStyleColor(styleColor.rgb) ? sourceColor : blendColor; return color; } #ifdef HAS_NORMAL_TEXTURE vec2 getNormalTexCoords() { vec2 texCoord = TEXCOORD_NORMAL; #ifdef HAS_NORMAL_TEXTURE_TRANSFORM texCoord = czm_computeTextureTransform(texCoord, u_normalTextureTransform); #endif return texCoord; } #endif #if defined(HAS_NORMAL_TEXTURE) || defined(HAS_CLEARCOAT_NORMAL_TEXTURE) vec3 computeTangent(in vec3 position, in vec2 normalTexCoords) { vec2 tex_dx = dFdx(normalTexCoords); vec2 tex_dy = dFdy(normalTexCoords); float determinant = tex_dx.x * tex_dy.y - tex_dy.x * tex_dx.y; vec3 tangent = tex_dy.t * dFdx(position) - tex_dx.t * dFdy(position); return tangent / determinant; } #endif #ifdef USE_ANISOTROPY struct NormalInfo { vec3 tangent; vec3 bitangent; vec3 normal; vec3 geometryNormal; }; NormalInfo getNormalInfo(ProcessedAttributes attributes) { vec3 geometryNormal = attributes.normalEC; #ifdef HAS_NORMAL_TEXTURE vec2 normalTexCoords = getNormalTexCoords(); #endif #ifdef HAS_BITANGENTS vec3 tangent = attributes.tangentEC; vec3 bitangent = attributes.bitangentEC; #else // Assume HAS_NORMAL_TEXTURE vec3 tangent = computeTangent(attributes.positionEC, normalTexCoords); tangent = normalize(tangent - geometryNormal * dot(geometryNormal, tangent)); vec3 bitangent = normalize(cross(geometryNormal, tangent)); #endif #ifdef HAS_NORMAL_TEXTURE mat3 tbn = mat3(tangent, bitangent, geometryNormal); vec3 normalSample; #if defined(HAS_NORMAL_CONSTANT_LOD) && defined(HAS_CONSTANT_LOD) #ifdef HAS_NORMAL_TEXTURE_TRANSFORM normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams, u_normalTextureTransform).rgb; #else normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams).rgb; #endif #else normalSample = texture(u_normalTexture, normalTexCoords).rgb; #endif normalSample = 2.0 * normalSample - 1.0; #ifdef HAS_NORMAL_TEXTURE_SCALE normalSample.xy *= u_normalTextureScale; #endif vec3 normal = normalize(tbn * normalSample); #else vec3 normal = geometryNormal; #endif #ifdef HAS_DOUBLE_SIDED_MATERIAL if (czm_backFacing()) { tangent *= -1.0; bitangent *= -1.0; normal *= -1.0; geometryNormal *= -1.0; } #endif NormalInfo normalInfo; normalInfo.tangent = tangent; normalInfo.bitangent = bitangent; normalInfo.normal = normal; normalInfo.geometryNormal = geometryNormal; return normalInfo; } #endif #if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME) vec3 getNormalFromTexture(ProcessedAttributes attributes, vec3 geometryNormal) { vec2 normalTexCoords = getNormalTexCoords(); // If HAS_BITANGENTS is set, then HAS_TANGENTS is also set #ifdef HAS_BITANGENTS vec3 t = attributes.tangentEC; vec3 b = attributes.bitangentEC; #else vec3 t = computeTangent(attributes.positionEC, normalTexCoords); t = normalize(t - geometryNormal * dot(geometryNormal, t)); vec3 b = normalize(cross(geometryNormal, t)); #endif mat3 tbn = mat3(t, b, geometryNormal); vec3 normalSample; #if defined(HAS_NORMAL_CONSTANT_LOD) && defined(HAS_CONSTANT_LOD) #ifdef HAS_NORMAL_TEXTURE_TRANSFORM normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams, u_normalTextureTransform).rgb; #else normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams).rgb; #endif #else normalSample = texture(u_normalTexture, normalTexCoords).rgb; #endif normalSample = 2.0 * normalSample - 1.0; #ifdef HAS_NORMAL_TEXTURE_SCALE normalSample.xy *= u_normalTextureScale; #endif return normalize(tbn * normalSample); } #endif #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE vec3 getClearcoatNormalFromTexture(ProcessedAttributes attributes, vec3 geometryNormal) { vec2 normalTexCoords = TEXCOORD_CLEARCOAT_NORMAL; #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE_TRANSFORM normalTexCoords = vec2(u_clearcoatNormalTextureTransform * vec3(normalTexCoords, 1.0)); #endif // If HAS_BITANGENTS is set, then HAS_TANGENTS is also set #ifdef HAS_BITANGENTS vec3 t = attributes.tangentEC; vec3 b = attributes.bitangentEC; #else vec3 t = computeTangent(attributes.positionEC, normalTexCoords); t = normalize(t - geometryNormal * dot(geometryNormal, t)); vec3 b = normalize(cross(geometryNormal, t)); #endif mat3 tbn = mat3(t, b, geometryNormal); vec3 normalSample = texture(u_clearcoatNormalTexture, normalTexCoords).rgb; normalSample = 2.0 * normalSample - 1.0; #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE_SCALE normalSample.xy *= u_clearcoatNormalTextureScale; #endif return normalize(tbn * normalSample); } #endif #ifdef HAS_NORMALS vec3 computeNormal(ProcessedAttributes attributes) { // Geometry normal. This is already normalized vec3 normal = attributes.normalEC; #if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME) normal = getNormalFromTexture(attributes, normal); #endif #ifdef HAS_DOUBLE_SIDED_MATERIAL if (czm_backFacing()) { normal = -normal; } #endif return normal; } #endif #ifdef HAS_BASE_COLOR_TEXTURE vec4 getBaseColorFromTexture() { vec2 baseColorTexCoords = TEXCOORD_BASE_COLOR; #ifdef HAS_BASE_COLOR_TEXTURE_TRANSFORM baseColorTexCoords = czm_computeTextureTransform(baseColorTexCoords, u_baseColorTextureTransform); #endif vec4 baseColorWithAlpha; #if defined(HAS_BASE_COLOR_CONSTANT_LOD) && defined(HAS_CONSTANT_LOD) #ifdef HAS_BASE_COLOR_TEXTURE_TRANSFORM baseColorWithAlpha = czm_srgbToLinear(constantLodTextureLookup(u_baseColorTexture, u_baseColorTextureConstantLodParams, u_baseColorTextureTransform)); #else baseColorWithAlpha = czm_srgbToLinear(constantLodTextureLookup(u_baseColorTexture, u_baseColorTextureConstantLodParams)); #endif #else baseColorWithAlpha = czm_srgbToLinear(texture(u_baseColorTexture, baseColorTexCoords)); #endif #ifdef HAS_BASE_COLOR_FACTOR baseColorWithAlpha *= u_baseColorFactor; #endif return baseColorWithAlpha; } #endif #ifdef HAS_EMISSIVE_TEXTURE vec3 getEmissiveFromTexture() { vec2 emissiveTexCoords = TEXCOORD_EMISSIVE; #ifdef HAS_EMISSIVE_TEXTURE_TRANSFORM emissiveTexCoords = czm_computeTextureTransform(emissiveTexCoords, u_emissiveTextureTransform); #endif vec3 emissive = czm_srgbToLinear(texture(u_emissiveTexture, emissiveTexCoords).rgb); #ifdef HAS_EMISSIVE_FACTOR emissive *= u_emissiveFactor; #endif return emissive; } #endif #if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS) void setSpecularGlossiness(inout czm_modelMaterial material) { #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE vec2 specularGlossinessTexCoords = TEXCOORD_SPECULAR_GLOSSINESS; #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE_TRANSFORM specularGlossinessTexCoords = czm_computeTextureTransform(specularGlossinessTexCoords, u_specularGlossinessTextureTransform); #endif vec4 specularGlossiness = czm_srgbToLinear(texture(u_specularGlossinessTexture, specularGlossinessTexCoords)); vec3 specular = specularGlossiness.rgb; float glossiness = specularGlossiness.a; #ifdef HAS_LEGACY_SPECULAR_FACTOR specular *= u_legacySpecularFactor; #endif #ifdef HAS_GLOSSINESS_FACTOR glossiness *= u_glossinessFactor; #endif #else #ifdef HAS_LEGACY_SPECULAR_FACTOR vec3 specular = clamp(u_legacySpecularFactor, vec3(0.0), vec3(1.0)); #else vec3 specular = vec3(1.0); #endif #ifdef HAS_GLOSSINESS_FACTOR float glossiness = clamp(u_glossinessFactor, 0.0, 1.0); #else float glossiness = 1.0; #endif #endif #ifdef HAS_DIFFUSE_TEXTURE vec2 diffuseTexCoords = TEXCOORD_DIFFUSE; #ifdef HAS_DIFFUSE_TEXTURE_TRANSFORM diffuseTexCoords = czm_computeTextureTransform(diffuseTexCoords, u_diffuseTextureTransform); #endif vec4 diffuse = czm_srgbToLinear(texture(u_diffuseTexture, diffuseTexCoords)); #ifdef HAS_DIFFUSE_FACTOR diffuse *= u_diffuseFactor; #endif #elif defined(HAS_DIFFUSE_FACTOR) vec4 diffuse = clamp(u_diffuseFactor, vec4(0.0), vec4(1.0)); #else vec4 diffuse = vec4(1.0); #endif material.diffuse = diffuse.rgb * (1.0 - czm_maximumComponent(specular)); // the specular glossiness extension's alpha overrides anything set // by the base material. material.alpha = diffuse.a; material.specular = specular; // glossiness is the opposite of roughness, but easier for artists to use. material.roughness = 1.0 - glossiness; } #elif defined(LIGHTING_PBR) float setMetallicRoughness(inout czm_modelMaterial material) { #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE vec2 metallicRoughnessTexCoords = TEXCOORD_METALLIC_ROUGHNESS; #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE_TRANSFORM metallicRoughnessTexCoords = czm_computeTextureTransform(metallicRoughnessTexCoords, u_metallicRoughnessTextureTransform); #endif vec3 metallicRoughness = texture(u_metallicRoughnessTexture, metallicRoughnessTexCoords).rgb; float metalness = clamp(metallicRoughness.b, 0.0, 1.0); float roughness = clamp(metallicRoughness.g, 0.0, 1.0); #ifdef HAS_METALLIC_FACTOR metalness = clamp(metalness * u_metallicFactor, 0.0, 1.0); #endif #ifdef HAS_ROUGHNESS_FACTOR roughness = clamp(roughness * u_roughnessFactor, 0.0, 1.0); #endif #else #ifdef HAS_METALLIC_FACTOR float metalness = clamp(u_metallicFactor, 0.0, 1.0); #else float metalness = 1.0; #endif #ifdef HAS_ROUGHNESS_FACTOR float roughness = clamp(u_roughnessFactor, 0.0, 1.0); #else float roughness = 1.0; #endif #endif // dielectrics use f0 = 0.04, metals use albedo as f0 const vec3 REFLECTANCE_DIELECTRIC = vec3(0.04); vec3 f0 = mix(REFLECTANCE_DIELECTRIC, material.baseColor.rgb, metalness); material.specular = f0; // diffuse only applies to dielectrics. material.diffuse = mix(material.baseColor.rgb, vec3(0.0), metalness); // This is perceptual roughness. The square of this value is used for direct lighting material.roughness = roughness; return metalness; } #ifdef USE_SPECULAR void setSpecular(inout czm_modelMaterial material, in float metalness) { #ifdef HAS_SPECULAR_TEXTURE vec2 specularTexCoords = TEXCOORD_SPECULAR; #ifdef HAS_SPECULAR_TEXTURE_TRANSFORM specularTexCoords = czm_computeTextureTransform(specularTexCoords, u_specularTextureTransform); #endif float specularWeight = texture(u_specularTexture, specularTexCoords).a; #ifdef HAS_SPECULAR_FACTOR specularWeight *= u_specularFactor; #endif #else #ifdef HAS_SPECULAR_FACTOR float specularWeight = u_specularFactor; #else float specularWeight = 1.0; #endif #endif #ifdef HAS_SPECULAR_COLOR_TEXTURE vec2 specularColorTexCoords = TEXCOORD_SPECULAR_COLOR; #ifdef HAS_SPECULAR_COLOR_TEXTURE_TRANSFORM specularColorTexCoords = czm_computeTextureTransform(specularColorTexCoords, u_specularColorTextureTransform); #endif vec3 specularColorSample = texture(u_specularColorTexture, specularColorTexCoords).rgb; vec3 specularColorFactor = czm_srgbToLinear(specularColorSample); #ifdef HAS_SPECULAR_COLOR_FACTOR specularColorFactor *= u_specularColorFactor; #endif #else #ifdef HAS_SPECULAR_COLOR_FACTOR vec3 specularColorFactor = u_specularColorFactor; #else vec3 specularColorFactor = vec3(1.0); #endif #endif material.specularWeight = specularWeight; vec3 f0 = material.specular; vec3 dielectricSpecularF0 = min(f0 * specularColorFactor, vec3(1.0)); material.specular = mix(dielectricSpecularF0, material.baseColor.rgb, metalness); } #endif #ifdef USE_ANISOTROPY void setAnisotropy(inout czm_modelMaterial material, in NormalInfo normalInfo) { mat2 rotation = mat2(u_anisotropy.xy, -u_anisotropy.y, u_anisotropy.x); float anisotropyStrength = u_anisotropy.z; vec2 direction = vec2(1.0, 0.0); #ifdef HAS_ANISOTROPY_TEXTURE vec2 anisotropyTexCoords = TEXCOORD_ANISOTROPY; #ifdef HAS_ANISOTROPY_TEXTURE_TRANSFORM anisotropyTexCoords = czm_computeTextureTransform(anisotropyTexCoords, u_anisotropyTextureTransform); #endif vec3 anisotropySample = texture(u_anisotropyTexture, anisotropyTexCoords).rgb; direction = anisotropySample.rg * 2.0 - vec2(1.0); anisotropyStrength *= anisotropySample.b; #endif direction = rotation * direction; mat3 tbn = mat3(normalInfo.tangent, normalInfo.bitangent, normalInfo.normal); vec3 anisotropicT = tbn * normalize(vec3(direction, 0.0)); vec3 anisotropicB = cross(normalInfo.geometryNormal, anisotropicT); material.anisotropicT = anisotropicT; material.anisotropicB = anisotropicB; material.anisotropyStrength = anisotropyStrength; } #endif #ifdef USE_CLEARCOAT void setClearcoat(inout czm_modelMaterial material, in ProcessedAttributes attributes) { #ifdef HAS_CLEARCOAT_TEXTURE vec2 clearcoatTexCoords = TEXCOORD_CLEARCOAT; #ifdef HAS_CLEARCOAT_TEXTURE_TRANSFORM clearcoatTexCoords = czm_computeTextureTransform(clearcoatTexCoords, u_clearcoatTextureTransform); #endif float clearcoatFactor = texture(u_clearcoatTexture, clearcoatTexCoords).r; #ifdef HAS_CLEARCOAT_FACTOR clearcoatFactor *= u_clearcoatFactor; #endif #else #ifdef HAS_CLEARCOAT_FACTOR float clearcoatFactor = u_clearcoatFactor; #else // PERFORMANCE_IDEA: this case should turn the whole extension off float clearcoatFactor = 0.0; #endif #endif #ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE vec2 clearcoatRoughnessTexCoords = TEXCOORD_CLEARCOAT_ROUGHNESS; #ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE_TRANSFORM clearcoatRoughnessTexCoords = czm_computeTextureTransform(clearcoatRoughnessTexCoords, u_clearcoatRoughnessTextureTransform); #endif float clearcoatRoughness = texture(u_clearcoatRoughnessTexture, clearcoatRoughnessTexCoords).g; #ifdef HAS_CLEARCOAT_ROUGHNESS_FACTOR clearcoatRoughness *= u_clearcoatRoughnessFactor; #endif #else #ifdef HAS_CLEARCOAT_ROUGHNESS_FACTOR float clearcoatRoughness = u_clearcoatRoughnessFactor; #else float clearcoatRoughness = 0.0; #endif #endif material.clearcoatFactor = clearcoatFactor; // This is perceptual roughness. The square of this value is used for direct lighting material.clearcoatRoughness = clearcoatRoughness; #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE material.clearcoatNormal = getClearcoatNormalFromTexture(attributes, attributes.normalEC); #else material.clearcoatNormal = attributes.normalEC; #endif } #endif #endif void materialStage(inout czm_modelMaterial material, ProcessedAttributes attributes, SelectedFeature feature) { #ifdef USE_ANISOTROPY NormalInfo normalInfo = getNormalInfo(attributes); material.normalEC = normalInfo.normal; #elif defined(HAS_NORMALS) material.normalEC = computeNormal(attributes); #endif vec4 baseColorWithAlpha = vec4(1.0); // Regardless of whether we use PBR, set a base color. // HAS_BACKGROUND_FILL (from BENTLEY_materials_planar_fill) overrides with // the view's background color to create an invisible masking polygon. // The background color is in sRGB, so convert to linear to match the // material pipeline's expected color space. #ifdef HAS_BACKGROUND_FILL baseColorWithAlpha = czm_srgbToLinear(czm_backgroundColor); #elif defined(HAS_BASE_COLOR_TEXTURE) baseColorWithAlpha = getBaseColorFromTexture(); #elif defined(HAS_BASE_COLOR_FACTOR) baseColorWithAlpha = u_baseColorFactor; #endif #ifdef HAS_IMAGERY baseColorWithAlpha = blendBaseColorWithImagery(baseColorWithAlpha); #endif // HAS_IMAGERY #ifdef HAS_POINT_CLOUD_COLOR_STYLE baseColorWithAlpha = v_pointCloudColor; #elif defined(HAS_COLOR_0) vec4 color = attributes.color_0; // .pnts files store colors in the sRGB color space #ifdef HAS_SRGB_COLOR color = czm_srgbToLinear(color); #endif baseColorWithAlpha *= color; #endif #ifdef USE_CPU_STYLING baseColorWithAlpha.rgb = blend(baseColorWithAlpha.rgb, feature.color.rgb, model_colorBlend); #endif material.baseColor = baseColorWithAlpha; material.diffuse = baseColorWithAlpha.rgb; material.alpha = baseColorWithAlpha.a; #ifdef HAS_OCCLUSION_TEXTURE vec2 occlusionTexCoords = TEXCOORD_OCCLUSION; #ifdef HAS_OCCLUSION_TEXTURE_TRANSFORM occlusionTexCoords = czm_computeTextureTransform(occlusionTexCoords, u_occlusionTextureTransform); #endif material.occlusion = texture(u_occlusionTexture, occlusionTexCoords).r; #endif #ifdef HAS_EMISSIVE_TEXTURE material.emissive = getEmissiveFromTexture(); #elif defined(HAS_EMISSIVE_FACTOR) material.emissive = u_emissiveFactor; #endif #if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS) setSpecularGlossiness(material); #elif defined(LIGHTING_PBR) float metalness = setMetallicRoughness(material); #ifdef USE_SPECULAR setSpecular(material, metalness); #endif #ifdef USE_ANISOTROPY setAnisotropy(material, normalInfo); #endif #ifdef USE_CLEARCOAT setClearcoat(material, attributes); #endif #endif } `;var b1i=x(T(),1),CX=`#ifdef HAS_CONSTANT_LOD // Extract model scale to compensate for minimumPixelSize scaling float modelScaleX = length(czm_model[0].xyz); float modelScaleY = length(czm_model[1].xyz); float modelScaleZ = length(czm_model[2].xyz); float modelScale = (modelScaleX + modelScaleY + modelScaleZ) / 3.0; // Transform model position through ENU but as direction only (w=0) to avoid position-dependent rotation vec3 enuDir = (u_constantLodWorldToEnu * czm_model * vec4(v_positionMC, 0.0)).xyz; v_constantLodUvCustom.xy = (enuDir.yx + u_constantLodOffset) / modelScale; v_constantLodUvCustom.z = u_constantLodDistance / modelScale; #endif`;var y1i=x(T(),1),RX=`#ifdef HAS_CONSTANT_LOD vec4 constantLodTextureLookup(sampler2D textureSampler, vec3 constantLodParams) { bool atMaxClamp = v_constantLodUvCustom.z >= constantLodParams.y; bool atMinClamp = v_constantLodUvCustom.z <= constantLodParams.x; bool atClampBoundary = atMaxClamp || atMinClamp; float effectiveDistance = atMaxClamp ? constantLodParams.y : (atMinClamp ? constantLodParams.x : v_constantLodUvCustom.z); float logDepth = log2(effectiveDistance); logDepth = clamp(logDepth, -10.0, 20.0); float f = fract(logDepth); float p = floor(logDepth); if (atClampBoundary) { float clampedP = ceil(logDepth); vec2 tc = v_constantLodUvCustom.xy / pow(2.0, clampedP) * constantLodParams.z; return texture(textureSampler, tc); } vec2 tc1 = v_constantLodUvCustom.xy / pow(2.0, p) * constantLodParams.z; vec2 tc2 = v_constantLodUvCustom.xy / pow(2.0, p + 1.0) * constantLodParams.z; return mix(texture(textureSampler, tc1), texture(textureSampler, tc2), f); } vec4 constantLodTextureLookup(sampler2D textureSampler, vec3 constantLodParams, mat3 textureTransform) { bool atMaxClamp = v_constantLodUvCustom.z >= constantLodParams.y; bool atMinClamp = v_constantLodUvCustom.z <= constantLodParams.x; bool atClampBoundary = atMaxClamp || atMinClamp; float effectiveDistance = atMaxClamp ? constantLodParams.y : (atMinClamp ? constantLodParams.x : v_constantLodUvCustom.z); float logDepth = log2(effectiveDistance); logDepth = clamp(logDepth, -10.0, 20.0); float f = fract(logDepth); float p = floor(logDepth); if (atClampBoundary) { float clampedP = ceil(logDepth); vec2 tc = v_constantLodUvCustom.xy / pow(2.0, clampedP) * constantLodParams.z; // Apply texture transform to the final texture coordinates tc = czm_computeTextureTransform(tc, textureTransform); return texture(textureSampler, tc); } vec2 tc1 = v_constantLodUvCustom.xy / pow(2.0, p) * constantLodParams.z; vec2 tc2 = v_constantLodUvCustom.xy / pow(2.0, p + 1.0) * constantLodParams.z; // Apply texture transform to both LOD texture coordinates before mixing tc1 = czm_computeTextureTransform(tc1, textureTransform); tc2 = czm_computeTextureTransform(tc2, textureTransform); return mix(texture(textureSampler, tc1), texture(textureSampler, tc2), f); } #endif `;var{Material:Ilt,MetallicRoughness:Oq,SpecularGlossiness:Bq,Specular:J_e,Clearcoat:j_e}=Zn,Q_e={name:"MaterialPipelineStage",_processTexture:Nd,_processTextureTransform:q_e};Q_e.process=function(e,t,n){let i=t.material,{model:o,uniformMap:r,shaderBuilder:s}=e;l(r.u_constantLodDistance)||(r.u_constantLodDistance=function(){let Z=o.boundingSphere,V=n.camera;if(l(Z)&&l(V)){let C=h.distance(V.positionWC,Z.center);return Math.max(C,.1)}return 1});let a=l(o.classificationType),c=a,{defaultTexture:d,defaultNormalTexture:u,defaultEmissiveTexture:m}=n.context;wlt(i,r,s,d,u,m,c,e),l(i.specularGlossiness)?Mlt(i.specularGlossiness,r,s,d,c,e):(l(i.specular)&&xt.supportedExtensions.KHR_materials_specular&&klt(i.specular,r,s,d,c),l(i.anisotropy)&&xt.supportedExtensions.KHR_materials_anisotropy&&Dlt(i.anisotropy,r,s,d,c),l(i.clearcoat)&&xt.supportedExtensions.KHR_materials_clearcoat&&Olt(i.clearcoat,r,s,d,c),Blt(i.metallicRoughness,r,s,d,c,e));let p=xt.getAttributeBySemantic(t,st.NORMAL),b=l(o.pointCloudShading)&&!o.pointCloudShading.normalShading;l(i.planarFill)&&Plt(i.planarFill,t,e,n);let f=l(i.planarFill)&&i.planarFill.backgroundFill,y=e.lightingOptions;i.unlit||!p||a||b||f?y.lightingModel=Op.UNLIT:y.lightingModel=Op.PBR;let _=o.backFaceCulling&&!i.doubleSided;e.renderStateOptions.cull.enabled=_;let S=e.alphaOptions;i.alphaMode===bp.BLEND?S.pass=We.TRANSLUCENT:i.alphaMode===bp.MASK&&(S.alphaCutoff=i.alphaCutoff),l(i.pointDiameter)&&(s.addDefine("HAS_POINT_DIAMETER",void 0,pe.BOTH),s.addUniform("float","u_pointDiameter",pe.VERTEX),r.u_pointDiameter=function(){return i.pointDiameter*n.pixelRatio}),l(i.lineStyle)&&Nlt(i.lineStyle,t,n,r,s),s.addFragmentLines(VX),i.doubleSided&&s.addDefine("HAS_DOUBLE_SIDED_MATERIAL",void 0,pe.BOTH)};function Plt(e,t,n,i){let{uniformMap:o,shaderBuilder:r}=n;if(i.planarFillRequested=!0,r.addDefine("HAS_PLANAR_FILL_DEPTH",void 0,pe.FRAGMENT),e.backgroundFill&&r.addDefine("HAS_BACKGROUND_FILL",void 0,pe.FRAGMENT),!(l(t.featureIds)&&t.featureIds.length>0))return;let a=t.featureIds[0].positionalLabel;r.addDefine("PLANAR_FILL_FEATURE_ID",a,pe.FRAGMENT),e.behind?r.addDefine("HAS_PLANAR_FILL_BEHIND",void 0,pe.FRAGMENT):(n.planarFillIdPass=!0,r.addDefine("HAS_PLANAR_FILL_ID_PASS",void 0,pe.FRAGMENT),r.addUniform("bool","u_isPlanarFillIdPass",pe.FRAGMENT),o.u_isPlanarFillIdPass=function(){return!1})}function Xlt(e,t,n,i,o,r){let s=n.constantLod;if(!l(s)||!l(r))return;let a=`HAS_${o}_CONSTANT_LOD`;if(e.addDefine(a,void 0,pe.BOTH),!l(t.u_constantLodOffset)){e.addDefine("HAS_CONSTANT_LOD",void 0,pe.BOTH),e.addVarying("vec3","v_constantLodUvCustom"),e.addUniform("vec2","u_constantLodOffset",pe.VERTEX),e.addUniform("float","u_constantLodDistance",pe.VERTEX),e.addUniform("mat4","u_constantLodWorldToEnu",pe.VERTEX),e.addFragmentLines(RX);let d=CX.split(` `).filter(u=>!u.trim().startsWith("//")||u.includes("#"));e.addFunctionLines("setDynamicVaryingsVS",d)}let c=`${i}ConstantLodParams`;if(e.addUniform("vec3",c,pe.FRAGMENT),t[c]=function(){return new h(s.minClampDistance,s.maxClampDistance,s.repetitions)},!l(t.u_constantLodOffset)){t.u_constantLodOffset=function(){return s.offset};let d=I.clone(I.IDENTITY),u=!1;t.u_constantLodWorldToEnu=function(){if(!u){let m=r.model.boundingSphere;if(l(m)){let p=m.center,b=bt.eastNorthUpToFixedFrame(p);I.inverse(b,d),u=!0}}return u?d:I.IDENTITY}}}function Nlt(e,t,n,i,o){let{width:r,pattern:s}=e;l(r)&&(o.addUniform("float","u_lineWidth",pe.VERTEX),i.u_lineWidth=function(){return r*n.pixelRatio}),l(s)&&(o.addDefine("HAS_LINE_PATTERN",void 0,pe.BOTH),o.addUniform("float","u_linePattern",pe.FRAGMENT),o.addVarying("float","v_lineCoord"),i.u_linePattern=function(){return s});let a=xt.getAttributeBySemantic(t,st.CUMULATIVE_DISTANCE);if(l(s)&&l(a)&&(t.primitiveType===Fe.LINES||t.primitiveType===Fe.TRIANGLE_STRIP)){o.addDefine("HAS_LINE_CUMULATIVE_DISTANCE",void 0,pe.VERTEX),a.normalized&&o.addDefine("LINE_CUM_DIST_NORMALIZED",void 0,pe.VERTEX),o.addUniform("float","u_cumulativeDistanceMax",pe.VERTEX),o.addUniform("float","u_pixelsPerWorld",pe.VERTEX);let c=l(a.max)?a.max:1;i.u_cumulativeDistanceMax=function(){return c},i.u_pixelsPerWorld=function(){let u=n.camera.frustum,m=1,p;return l(u.right)&&l(u.left)?p=u.right-u.left:l(u.width)&&(p=u.width),l(p)&&p>0&&(m=n.context.drawingBufferWidth/p),m};let d=xt.getAttributeInfo(a).variableName;o.addVertexLines(` #ifdef HAS_LINE_CUMULATIVE_DISTANCE void lineStyleStageVS(in ProcessedAttributes attributes) { float cumDist = attributes.${d}; #ifdef LINE_CUM_DIST_NORMALIZED cumDist *= u_cumulativeDistanceMax; #endif const float textureCoordinateBase = 8192.0; v_lineCoord = textureCoordinateBase + cumDist * u_pixelsPerWorld; } #endif `)}else l(s)&&o.addVertexLines(` #ifdef HAS_LINE_PATTERN void lineStyleStageVS(in ProcessedAttributes attributes) { vec4 posClip = gl_Position; vec2 screenPos = ((posClip.xy / posClip.w) * 0.5 + 0.5) * czm_viewport.zw; const float textureCoordinateBase = 8192.0; if (czm_viewport.z > czm_viewport.w) { v_lineCoord = textureCoordinateBase + screenPos.x; } else { v_lineCoord = textureCoordinateBase + screenPos.y; } } #endif `)}function q_e(e,t,n,i,o){let r=`HAS_${o}_TEXTURE_TRANSFORM`;e.addDefine(r,void 0,pe.FRAGMENT);let s=`${i}Transform`;e.addUniform("mat3",s,pe.FRAGMENT),t[s]=function(){return n.transform}}function Ylt(e,t,n,i,o){let r=`HAS_${o}_TEXTURE_SCALE`;e.addDefine(r,void 0,pe.FRAGMENT);let s=`${i}Scale`;e.addUniform("float",s,pe.FRAGMENT),t[s]=function(){return n.scale}}function Nd(e,t,n,i,o,r,s){e.addUniform("sampler2D",i,pe.FRAGMENT),t[i]=function(){return n.texture??r};let a=`HAS_${o}_TEXTURE`;e.addDefine(a,void 0,pe.FRAGMENT);let d=`v_texCoord_${n.texCoord}`,u=`TEXCOORD_${o}`;e.addDefine(u,d,pe.FRAGMENT);let m=n.transform;l(m)&&!q.equals(m,q.IDENTITY)&&q_e(e,t,n,i,o);let{scale:p}=n;l(p)&&p!==1&&Ylt(e,t,n,i,o),Xlt(e,t,n,i,o,s)}function wlt(e,t,n,i,o,r,s,a){let{emissiveFactor:c,emissiveTexture:d,normalTexture:u,occlusionTexture:m}=e;l(c)&&!h.equals(c,Ilt.DEFAULT_EMISSIVE_FACTOR)&&(n.addUniform("vec3","u_emissiveFactor",pe.FRAGMENT),t.u_emissiveFactor=function(){return e.emissiveFactor},n.addDefine("HAS_EMISSIVE_FACTOR",void 0,pe.FRAGMENT),l(d)&&!s&&Nd(n,t,d,"u_emissiveTexture","EMISSIVE",r));let p;if(l(e.metallicRoughness)&&l(e.metallicRoughness.baseColorTexture)&&l(e.metallicRoughness.baseColorTexture.constantLod)?p=e.metallicRoughness.baseColorTexture.constantLod:l(e.specularGlossiness)&&l(e.specularGlossiness.diffuseTexture)&&l(e.specularGlossiness.diffuseTexture.constantLod)&&(p=e.specularGlossiness.diffuseTexture.constantLod),l(u)&&!s){let b=u;l(u.constantLod)&&l(p)&&(b=Object.create(Object.getPrototypeOf(u)),Object.assign(b,u),b.constantLod=p),Nd(n,t,b,"u_normalTexture","NORMAL",o,a)}l(m)&&!s&&Nd(n,t,m,"u_occlusionTexture","OCCLUSION",i)}function Mlt(e,t,n,i,o,r){let{diffuseTexture:s,diffuseFactor:a,specularGlossinessTexture:c,specularFactor:d,glossinessFactor:u}=e;n.addDefine("USE_SPECULAR_GLOSSINESS",void 0,pe.FRAGMENT),l(s)&&!o&&Nd(n,t,s,"u_diffuseTexture","DIFFUSE",i,r),l(a)&&!ce.equals(a,Bq.DEFAULT_DIFFUSE_FACTOR)&&(n.addUniform("vec4","u_diffuseFactor",pe.FRAGMENT),t.u_diffuseFactor=function(){return e.diffuseFactor},n.addDefine("HAS_DIFFUSE_FACTOR",void 0,pe.FRAGMENT)),l(c)&&!o&&Nd(n,t,c,"u_specularGlossinessTexture","SPECULAR_GLOSSINESS",i),l(d)&&!h.equals(d,Bq.DEFAULT_SPECULAR_FACTOR)&&(n.addUniform("vec3","u_legacySpecularFactor",pe.FRAGMENT),t.u_legacySpecularFactor=function(){return e.specularFactor},n.addDefine("HAS_LEGACY_SPECULAR_FACTOR",void 0,pe.FRAGMENT)),l(u)&&u!==Bq.DEFAULT_GLOSSINESS_FACTOR&&(n.addUniform("float","u_glossinessFactor",pe.FRAGMENT),t.u_glossinessFactor=function(){return e.glossinessFactor},n.addDefine("HAS_GLOSSINESS_FACTOR",void 0,pe.FRAGMENT))}function klt(e,t,n,i,o){let{specularTexture:r,specularFactor:s,specularColorTexture:a,specularColorFactor:c}=e;n.addDefine("USE_SPECULAR",void 0,pe.FRAGMENT),l(r)&&!o&&Nd(n,t,r,"u_specularTexture","SPECULAR",i),l(s)&&s!==J_e.DEFAULT_SPECULAR_FACTOR&&(n.addUniform("float","u_specularFactor",pe.FRAGMENT),t.u_specularFactor=function(){return e.specularFactor},n.addDefine("HAS_SPECULAR_FACTOR",void 0,pe.FRAGMENT)),l(a)&&!o&&Nd(n,t,a,"u_specularColorTexture","SPECULAR_COLOR",i),l(c)&&!h.equals(c,J_e.DEFAULT_SPECULAR_COLOR_FACTOR)&&(n.addUniform("vec3","u_specularColorFactor",pe.FRAGMENT),t.u_specularColorFactor=function(){return e.specularColorFactor},n.addDefine("HAS_SPECULAR_COLOR_FACTOR",void 0,pe.FRAGMENT))}var Ult=new h;function Dlt(e,t,n,i,o){let{anisotropyStrength:r,anisotropyRotation:s,anisotropyTexture:a}=e;n.addDefine("USE_ANISOTROPY",void 0,pe.FRAGMENT),l(a)&&!o&&Nd(n,t,a,"u_anisotropyTexture","ANISOTROPY",i);let c=Math.cos(s),d=Math.sin(s);n.addUniform("vec3","u_anisotropy",pe.FRAGMENT),t.u_anisotropy=function(){return h.fromElements(c,d,r,Ult)}}function Olt(e,t,n,i,o){let{clearcoatFactor:r,clearcoatTexture:s,clearcoatRoughnessFactor:a,clearcoatRoughnessTexture:c,clearcoatNormalTexture:d}=e;n.addDefine("USE_CLEARCOAT",void 0,pe.FRAGMENT),l(r)&&r!==j_e.DEFAULT_CLEARCOAT_FACTOR&&(n.addUniform("float","u_clearcoatFactor",pe.FRAGMENT),t.u_clearcoatFactor=function(){return e.clearcoatFactor},n.addDefine("HAS_CLEARCOAT_FACTOR",void 0,pe.FRAGMENT)),l(s)&&!o&&Nd(n,t,s,"u_clearcoatTexture","CLEARCOAT",i),l(a)&&r!==j_e.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR&&(n.addUniform("float","u_clearcoatRoughnessFactor",pe.FRAGMENT),t.u_clearcoatRoughnessFactor=function(){return e.clearcoatRoughnessFactor},n.addDefine("HAS_CLEARCOAT_ROUGHNESS_FACTOR",void 0,pe.FRAGMENT)),l(c)&&!o&&Nd(n,t,c,"u_clearcoatRoughnessTexture","CLEARCOAT_ROUGHNESS",i),l(d)&&!o&&Nd(n,t,d,"u_clearcoatNormalTexture","CLEARCOAT_NORMAL",i)}function Blt(e,t,n,i,o,r){n.addDefine("USE_METALLIC_ROUGHNESS",void 0,pe.FRAGMENT);let s=e.baseColorTexture;l(s)&&!o&&Nd(n,t,s,"u_baseColorTexture","BASE_COLOR",i,r);let a=e.baseColorFactor;l(a)&&!ce.equals(a,Oq.DEFAULT_BASE_COLOR_FACTOR)&&(n.addUniform("vec4","u_baseColorFactor",pe.FRAGMENT),t.u_baseColorFactor=function(){return e.baseColorFactor},n.addDefine("HAS_BASE_COLOR_FACTOR",void 0,pe.FRAGMENT));let c=e.metallicRoughnessTexture;l(c)&&!o&&Nd(n,t,c,"u_metallicRoughnessTexture","METALLIC_ROUGHNESS",i);let d=e.metallicFactor;l(d)&&d!==Oq.DEFAULT_METALLIC_FACTOR&&(n.addUniform("float","u_metallicFactor",pe.FRAGMENT),t.u_metallicFactor=function(){return e.metallicFactor},n.addDefine("HAS_METALLIC_FACTOR",void 0,pe.FRAGMENT));let u=e.roughnessFactor;l(u)&&u!==Oq.DEFAULT_ROUGHNESS_FACTOR&&(n.addUniform("float","u_roughnessFactor",pe.FRAGMENT),t.u_roughnessFactor=function(){return e.roughnessFactor},n.addDefine("HAS_ROUGHNESS_FACTOR",void 0,pe.FRAGMENT))}var GX=Q_e;var M1i=x(T(),1);var td={name:"MetadataPickingPipelineStage",METADATA_PICKING_ENABLED:"METADATA_PICKING_ENABLED",METADATA_PICKING_VALUE_TYPE:"METADATA_PICKING_VALUE_TYPE",METADATA_PICKING_VALUE_STRING:"METADATA_PICKING_VALUE_STRING",METADATA_PICKING_VALUE_COMPONENT_X:"METADATA_PICKING_VALUE_COMPONENT_X",METADATA_PICKING_VALUE_COMPONENT_Y:"METADATA_PICKING_VALUE_COMPONENT_Y",METADATA_PICKING_VALUE_COMPONENT_Z:"METADATA_PICKING_VALUE_COMPONENT_Z",METADATA_PICKING_VALUE_COMPONENT_W:"METADATA_PICKING_VALUE_COMPONENT_W"};td.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine(td.METADATA_PICKING_VALUE_TYPE,"float",pe.FRAGMENT),i.addDefine(td.METADATA_PICKING_VALUE_STRING,"0.0",pe.FRAGMENT),i.addDefine(td.METADATA_PICKING_VALUE_COMPONENT_X,"0.0",pe.FRAGMENT),i.addDefine(td.METADATA_PICKING_VALUE_COMPONENT_Y,"0.0",pe.FRAGMENT),i.addDefine(td.METADATA_PICKING_VALUE_COMPONENT_Z,"0.0",pe.FRAGMENT),i.addDefine(td.METADATA_PICKING_VALUE_COMPONENT_W,"0.0",pe.FRAGMENT),i.addFunction("metadataPickingStage","void metadataPickingStage(Metadata metadata, MetadataClass metadataClass, inout vec4 metadataValues)",pe.FRAGMENT),i.addFunctionLines("metadataPickingStage",[`${td.METADATA_PICKING_VALUE_TYPE} value = ${td.METADATA_PICKING_VALUE_TYPE}(${td.METADATA_PICKING_VALUE_STRING});`,`metadataValues.x = ${td.METADATA_PICKING_VALUE_COMPONENT_X};`,`metadataValues.y = ${td.METADATA_PICKING_VALUE_COMPONENT_Y};`,`metadataValues.z = ${td.METADATA_PICKING_VALUE_COMPONENT_Z};`,`metadataValues.w = ${td.METADATA_PICKING_VALUE_COMPONENT_W};`],pe.FRAGMENT)};var Wu=td;var j1i=x(T(),1);var U1i=x(T(),1),AX=`void morphTargetsStage(inout ProcessedAttributes attributes) { vec3 positionMC = attributes.positionMC; attributes.positionMC = getMorphedPosition(positionMC); #ifdef HAS_NORMALS vec3 normalMC = attributes.normalMC; attributes.normalMC = getMorphedNormal(normalMC); #endif #ifdef HAS_TANGENTS vec3 tangentMC = attributes.tangentMC; attributes.tangentMC = getMorphedTangent(tangentMC); #endif }`;var Ic={name:"MorphTargetsPipelineStage",FUNCTION_ID_GET_MORPHED_POSITION:"getMorphedPosition",FUNCTION_SIGNATURE_GET_MORPHED_POSITION:"vec3 getMorphedPosition(in vec3 position)",FUNCTION_ID_GET_MORPHED_NORMAL:"getMorphedNormal",FUNCTION_SIGNATURE_GET_MORPHED_NORMAL:"vec3 getMorphedNormal(in vec3 normal)",FUNCTION_ID_GET_MORPHED_TANGENT:"getMorphedTangent",FUNCTION_SIGNATURE_GET_MORPHED_TANGENT:"vec3 getMorphedTangent(in vec3 tangent)"};Ic.process=function(e,t){let n=e.shaderBuilder;n.addDefine("HAS_MORPH_TARGETS",void 0,pe.VERTEX),Qlt(n);let i=t.morphTargets.length;for(let a=0;a<i;a++){let c=t.morphTargets[a].attributes,d=c.length;for(let u=0;u<d;u++){let m=c[u],p=m.semantic;p!==st.POSITION&&p!==st.NORMAL&&p!==st.TANGENT||(Hlt(e,m,e.attributeIndex,a),e.attributeIndex++)}}qlt(n);let r=e.runtimeNode.morphWeights.length;n.addUniform("float",`u_morphWeights[${r}]`,pe.VERTEX),n.addVertexLines(AX);let s={u_morphWeights:function(){return e.runtimeNode.morphWeights}};e.uniformMap=It(s,e.uniformMap)};var zlt={attributeString:void 0,functionId:void 0};function Hlt(e,t,n,i){let o=e.shaderBuilder;Klt(e,t,n);let r=Jlt(t,zlt);jlt(o,r,i)}function Klt(e,t,n){let i={index:n,value:l(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,componentsPerAttribute:Dt.getNumberOfComponents(t.type),componentDatatype:t.componentDatatype,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};e.attributes.push(i)}function Jlt(e,t){switch(e.semantic){case st.POSITION:t.attributeString="Position",t.functionId=Ic.FUNCTION_ID_GET_MORPHED_POSITION;break;case st.NORMAL:t.attributeString="Normal",t.functionId=Ic.FUNCTION_ID_GET_MORPHED_NORMAL;break;case st.TANGENT:t.attributeString="Tangent",t.functionId=Ic.FUNCTION_ID_GET_MORPHED_TANGENT;break;default:break}return t}function jlt(e,t,n){let i=t.attributeString,o=`a_target${i}_${n}`,r=`morphed${i} += u_morphWeights[${n}] * a_target${i}_${n};`;e.addAttribute("vec3",o),e.addFunctionLines(t.functionId,[r])}function Qlt(e){e.addFunction(Ic.FUNCTION_ID_GET_MORPHED_POSITION,Ic.FUNCTION_SIGNATURE_GET_MORPHED_POSITION,pe.VERTEX),e.addFunctionLines(Ic.FUNCTION_ID_GET_MORPHED_POSITION,["vec3 morphedPosition = position;"]),e.addFunction(Ic.FUNCTION_ID_GET_MORPHED_NORMAL,Ic.FUNCTION_SIGNATURE_GET_MORPHED_NORMAL,pe.VERTEX),e.addFunctionLines(Ic.FUNCTION_ID_GET_MORPHED_NORMAL,["vec3 morphedNormal = normal;"]),e.addFunction(Ic.FUNCTION_ID_GET_MORPHED_TANGENT,Ic.FUNCTION_SIGNATURE_GET_MORPHED_TANGENT,pe.VERTEX),e.addFunctionLines(Ic.FUNCTION_ID_GET_MORPHED_TANGENT,["vec3 morphedTangent = tangent;"])}function qlt(e){e.addFunctionLines(Ic.FUNCTION_ID_GET_MORPHED_POSITION,["return morphedPosition;"]),e.addFunctionLines(Ic.FUNCTION_ID_GET_MORPHED_NORMAL,["return morphedNormal;"]),e.addFunctionLines(Ic.FUNCTION_ID_GET_MORPHED_TANGENT,["return morphedTangent;"])}var EX=Ic;var sCi=x(T(),1);var $_e={name:"PickingPipelineStage"};function zq(e){return`vec4(rgba8UnormToUint32(${e}), isEdge ? 1.0 : 0.0, -v_positionEC.z, 0.0)`}$_e.process=function(e,t,n){let i=n.context,o=e.runtimeNode,r=e.shaderBuilder,s=e.model,a=o.node.instances;if(e.hasPropertyTable)$lt(e,t,a,i);else if(l(a))edt(e,i);else{let c=eSe(e),d=i.createPickId(c);s._pipelineResources.push(d),s._pickIds.push(d),r.addUniform("vec4","czm_pickColor",pe.FRAGMENT);let u=e.uniformMap;u.czm_pickColor=function(){return d.color},e.pickId="czm_pickColor",e.snapId=zq(e.pickId)}};function eSe(e,t){let n=e.model;if(l(n.pickObject))return n.pickObject;let i={model:n,node:e.runtimeNode,primitive:e.runtimePrimitive},o;if(Yr.is3DTiles(n.type)){let r=n.content;o={content:r,primitive:r.tileset,detail:i}}else o={primitive:n,detail:i};return o.id=n.id,l(t)&&(o.instanceId=t),o}function $lt(e,t,n){let i=e.model,o,r,s=i.featureIdLabel,a=i.instanceFeatureIdLabel;l(i.featureTableId)?o=i.featureTableId:l(n)?(r=xt.getFeatureIdsByLabel(n.featureIds,a),o=r.propertyTableId):(r=xt.getFeatureIdsByLabel(t.featureIds,s),o=r.propertyTableId);let c=i.featureTables[o];e.shaderBuilder.addUniform("sampler2D","model_pickTexture",pe.FRAGMENT);let u=c.batchTexture;e.uniformMap.model_pickTexture=function(){return u.pickTexture??u.defaultTexture},e.pickId="((selectedFeature.id < int(model_featuresLength)) ? texture(model_pickTexture, selectedFeature.st) : vec4(0.0))",e.snapId=zq(e.pickId)}function edt(e,t){let n=e.instanceCount,i=new Array(n),o=new Uint8Array(n*4),r=e.model,s=r._pipelineResources;for(let m=0;m<n;m++){let p=eSe(e,m),b=t.createPickId(p);s.push(b),i[m]=b;let f=b.color;o[m*4+0]=U.floatToByte(f.red),o[m*4+1]=U.floatToByte(f.green),o[m*4+2]=U.floatToByte(f.blue),o[m*4+3]=U.floatToByte(f.alpha)}r._pickIds=i;let a=et.createVertexBuffer({context:t,typedArray:o,usage:Ie.STATIC_DRAW});a.vertexArrayDestroyable=!1,r.statistics.addBuffer(a,!1),s.push(a);let d={index:e.attributeIndex++,vertexBuffer:a,componentsPerAttribute:4,componentDatatype:J.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0,instanceDivisor:1};e.attributes.push(d);let u=e.shaderBuilder;u.addDefine("USE_PICKING",void 0,pe.BOTH),u.addAttribute("vec4","a_pickColor"),u.addVarying("vec4","v_pickColor"),e.pickId="v_pickColor",e.snapId=zq(e.pickId)}var LX=$_e;var ACi=x(T(),1);var cCi=x(T(),1),tSe={ADD:0,REPLACE:1};Object.freeze(tSe);var br=tSe;var dCi=x(T(),1),WX=`float getPointSizeFromAttenuation(vec3 positionEC) { // Variables are packed into a single vector to minimize gl.uniformXXX() calls float pointSize = model_pointCloudParameters.x; float geometricError = model_pointCloudParameters.y; float depthMultiplier = model_pointCloudParameters.z; float depth = -positionEC.z; return min((geometricError / depth) * depthMultiplier, pointSize); } #ifdef HAS_POINT_CLOUD_SHOW_STYLE float pointCloudShowStylingStage(in ProcessedAttributes attributes, in Metadata metadata) { float tiles3d_tileset_time = model_pointCloudParameters.w; return float(getShowFromStyle(attributes, metadata, tiles3d_tileset_time)); } #endif #ifdef HAS_POINT_CLOUD_COLOR_STYLE vec4 pointCloudColorStylingStage(in ProcessedAttributes attributes, in Metadata metadata) { float tiles3d_tileset_time = model_pointCloudParameters.w; return getColorFromStyle(attributes, metadata, tiles3d_tileset_time); } #endif #ifdef HAS_POINT_CLOUD_POINT_SIZE_STYLE float pointCloudPointSizeStylingStage(in ProcessedAttributes attributes, in Metadata metadata) { float tiles3d_tileset_time = model_pointCloudParameters.w; return float(getPointSizeFromStyle(attributes, metadata, tiles3d_tileset_time)); } #elif defined(HAS_POINT_CLOUD_ATTENUATION) float pointCloudPointSizeStylingStage(in ProcessedAttributes attributes, in Metadata metadata) { return getPointSizeFromAttenuation(v_positionEC); } #endif #ifdef HAS_POINT_CLOUD_BACK_FACE_CULLING float pointCloudBackFaceCullingStage() { #if defined(HAS_NORMALS) && !defined(HAS_DOUBLE_SIDED_MATERIAL) // This needs to be computed in eye coordinates so we can't use attributes.normalMC return step(-v_normalEC.z, 0.0); #else return 1.0; #endif } #endif `;var tdt=new ce,iSe={name:"PointCloudStylingPipelineStage"};iSe.process=function(e,t,n){let i=e.shaderBuilder,o=e.model,r=o.style,s=o.structuralMetadata,a=l(s)?s.propertyAttributes:void 0,c=l(o.featureTableId)&&o.featureTables[o.featureTableId].featuresLength>0,d=!l(a)&&c;if(l(r)&&!d){let y=rdt(a),_=sdt(r,y);adt(i,_);let Z=cdt(_).indexOf("normalMC")>=0,V=xt.getAttributeBySemantic(t,st.NORMAL);if(Z&&!V)throw new ae("Style references the NORMAL semantic but the point cloud does not have normals");i.addDefine("COMPUTE_POSITION_WC_STYLE",void 0,pe.VERTEX),_.styleTranslucent&&(e.alphaOptions.pass=We.TRANSLUCENT)}let u=o.pointCloudShading;u.attenuation&&i.addDefine("HAS_POINT_CLOUD_ATTENUATION",void 0,pe.VERTEX),u.backFaceCulling&&i.addDefine("HAS_POINT_CLOUD_BACK_FACE_CULLING",void 0,pe.VERTEX);let m,p,b;Yr.is3DTiles(o.type)&&(p=!0,m=o.content,b=m.tile.refine===br.ADD),i.addUniform("vec4","model_pointCloudParameters",pe.VERTEX),i.addVertexLines(WX);let f=e.uniformMap;f.model_pointCloudParameters=function(){let y=tdt,_=1;p&&(_=b?5:m.tileset.memoryAdjustedScreenSpaceError),y.x=u.maximumAttenuation??_,y.x*=n.pixelRatio;let S=ndt(e,t,u,m);y.y=S*u.geometricErrorScale;let Z=n.context,V=n.camera.frustum,C;return n.mode===se.SCENE2D||V instanceof bn?C=Number.POSITIVE_INFINITY:C=Z.drawingBufferHeight/n.camera.frustum.sseDenominator,y.z=C,p&&(y.w=m.tileset.timeSinceLoad),y}};var nSe=new h;function ndt(e,t,n,i){if(l(i)){let u=i.tile.geometricError;if(u>0)return u}if(l(n.baseResolution))return n.baseResolution;let o=xt.getAttributeBySemantic(t,st.POSITION),r=o.count,s=e.runtimeNode.transform,a=h.subtract(o.max,o.min,nSe);a=I.multiplyByPointAsVector(s,a,nSe);let c=a.x*a.y*a.z;return L.cbrt(c/r)}var idt={colorStyleFunction:void 0,showStyleFunction:void 0,pointSizeStyleFunction:void 0,styleTranslucent:!1},odt={POSITION:"attributes.positionMC",POSITION_ABSOLUTE:"v_positionWC",COLOR:"attributes.color_0",NORMAL:"attributes.normalMC"};function rdt(e){let t=Je(odt);if(!l(e))return t;for(let n=0;n<e.length;n++){let o=e[n].properties;for(let r in o)o.hasOwnProperty(r)&&(t[r]=`metadata.${r}`)}return t}var Hq="ProcessedAttributes attributes, Metadata metadata, float tiles3d_tileset_time";function sdt(e,t){let n=idt,i={translucent:!1};return n.colorStyleFunction=e.getColorShaderFunction(`getColorFromStyle(${Hq})`,t,i),n.showStyleFunction=e.getShowShaderFunction(`getShowFromStyle(${Hq})`,t,i),n.pointSizeStyleFunction=e.getPointSizeShaderFunction(`getPointSizeFromStyle(${Hq})`,t,i),n.styleTranslucent=l(n.colorStyleFunction)&&i.translucent,n}function adt(e,t){let n=t.colorStyleFunction;l(n)&&(e.addDefine("HAS_POINT_CLOUD_COLOR_STYLE",void 0,pe.BOTH),e.addVertexLines(n),e.addVarying("vec4","v_pointCloudColor"));let i=t.showStyleFunction;l(i)&&(e.addDefine("HAS_POINT_CLOUD_SHOW_STYLE",void 0,pe.BOTH),e.addVertexLines(i),e.addVarying("float","v_pointCloudShow"));let o=t.pointSizeStyleFunction;l(o)&&(e.addDefine("HAS_POINT_CLOUD_POINT_SIZE_STYLE",void 0,pe.VERTEX),e.addVertexLines(o))}function Kq(e,t){let n=/attributes\.(\w+)/g,i=n.exec(e);for(;i!==null;){let o=i[1];t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function cdt(e){let t=e.colorStyleFunction,n=e.showStyleFunction,i=e.pointSizeStyleFunction,o=[];return l(t)&&Kq(t,o),l(n)&&Kq(n,o),l(i)&&Kq(i,o),o}var vX=iSe;var wCi=x(T(),1);var LCi=x(T(),1),FX=`void primitiveOutlineStage() { v_outlineCoordinates = a_outlineCoordinates; } `;var vCi=x(T(),1),IX=`void primitiveOutlineStage(inout czm_modelMaterial material) { if (!model_showOutline) { return; } float outlineX = texture(model_outlineTexture, vec2(v_outlineCoordinates.x, 0.5)).r; float outlineY = texture(model_outlineTexture, vec2(v_outlineCoordinates.y, 0.5)).r; float outlineZ = texture(model_outlineTexture, vec2(v_outlineCoordinates.z, 0.5)).r; float outlineness = max(outlineX, max(outlineY, outlineZ)); material.diffuse = mix(material.diffuse, model_outlineColor.rgb, model_outlineColor.a * outlineness); } `;var oSe={name:"PrimitiveOutlinePipelineStage"};oSe.process=function(e,t,n){let i=e.shaderBuilder,o=e.uniformMap;i.addDefine("HAS_PRIMITIVE_OUTLINE",void 0,pe.BOTH),i.addAttribute("vec3","a_outlineCoordinates"),i.addVarying("vec3","v_outlineCoordinates");let r=t.outlineCoordinates,s={index:e.attributeIndex++,vertexBuffer:r.buffer,componentsPerAttribute:Dt.getNumberOfComponents(r.type),componentDatatype:r.componentDatatype,offsetInBytes:r.byteOffset,strideInBytes:r.byteStride,normalize:r.normalized};e.attributes.push(s),i.addUniform("sampler2D","model_outlineTexture",pe.FRAGMENT);let a=uS.createTexture(n.context);o.model_outlineTexture=function(){return a};let c=e.model;i.addUniform("vec4","model_outlineColor",pe.FRAGMENT),o.model_outlineColor=function(){return c.outlineColor},i.addUniform("bool","model_showOutline",pe.FRAGMENT),o.model_showOutline=function(){return c.showOutline},i.addVertexLines(FX),i.addFragmentLines(IX)};var PX=oSe;var BCi=x(T(),1);var rSe={name:"PrimitiveStatisticsPipelineStage",_countGeometry:sSe,_count2DPositions:aSe,_countMorphTargetAttributes:cSe,_countMaterialTextures:lSe,_countFeatureIdTextures:dSe,_countBinaryMetadata:uSe};rSe.process=function(e,t,n){let i=e.model,o=i.statistics;sSe(o,t),aSe(o,e.runtimePrimitive),cSe(o,t),lSe(o,t.material),dSe(o,t.featureIds),uSe(o,i)};function sSe(e,t){let n=l(t.indices)?t.indices.count:xt.getAttributeBySemantic(t,"POSITION").count,i=t.primitiveType;i===Fe.POINTS?e.pointsLength+=n:Fe.isTriangles(i)&&(e.trianglesLength+=ldt(i,n));let o=t.attributes,r=o.length;for(let c=0;c<r;c++){let d=o[c];if(l(d.buffer)){let u=l(d.typedArray);e.addBuffer(d.buffer,u)}}let s=t.outlineCoordinates;l(s)&&l(s.buffer)&&e.addBuffer(s.buffer,!1);let a=t.indices;if(l(a)&&l(a.buffer)){let c=l(a.typedArray);e.addBuffer(a.buffer,c)}}function ldt(e,t){switch(e){case Fe.TRIANGLES:return t/3;case Fe.TRIANGLE_STRIP:case Fe.TRIANGLE_FAN:return Math.max(t-2,0);default:return 0}}function aSe(e,t){let n=t.positionBuffer2D;l(n)&&e.addBuffer(n,!0)}function cSe(e,t){let n=t.morphTargets;if(!l(n))return;let i=!1,o=n.length;for(let r=0;r<o;r++){let s=n[r].attributes,a=s.length;for(let c=0;c<a;c++){let d=s[c];l(d.buffer)&&e.addBuffer(d.buffer,i)}}}function lSe(e,t){let n=ddt(t),i=n.length;for(let o=0;o<i;o++){let r=n[o];l(r)&&l(r.texture)&&e.addTexture(r.texture)}}function ddt(e){let t=e.metallicRoughness,n=[e.emissiveTexture,e.normalTexture,e.occlusionTexture,t.baseColorTexture,t.metallicRoughnessTexture],i=e.specularGlossiness;return l(i)&&(n.push(i.diffuseTexture),n.push(i.specularGlossinessTexture)),n}function dSe(e,t){let n=t.length;for(let i=0;i<n;i++){let o=t[i];if(o instanceof Zn.FeatureIdTexture){let r=o.textureReader;l(r.texture)&&e.addTexture(r.texture)}}}function uSe(e,t){let n=t.structuralMetadata;l(n)&&(udt(e,n),e.propertyTablesByteLength+=n.propertyTablesByteLength);let i=t.featureTables;if(!l(i))return;let o=i.length;for(let r=0;r<o;r++){let s=i[r];e.addBatchTexture(s.batchTexture)}}function udt(e,t){let n=t.propertyTextures;if(!l(n))return;let i=n.length;for(let o=0;o<i;o++){let s=n[o].properties;for(let a in s)if(s.hasOwnProperty(a)){let d=s[a].textureReader;l(d.texture)&&e.addTexture(d.texture)}}}var XX=rSe;var sRi=x(T(),1);var mdt=new I,hdt=new I,mSe={name:"SceneMode2DPipelineStage"};mSe.process=function(e,t,n){let i=xt.getAttributeBySemantic(t,st.POSITION),o=e.shaderBuilder,r=e.model,s=r.sceneGraph.computedModelMatrix,a=e.runtimeNode.computedTransform,c=I.multiplyTransformation(s,a,mdt),d=bdt(e,c,n),u=e.runtimePrimitive;u.boundingSphere2D=d;let m=e.runtimeNode.node.instances;if(l(m))return;if(l(i.typedArray)){let y=xdt(i,c,d,n);u.positionBuffer2D=y,r._modelResources.push(y),i.typedArray=void 0}o.addDefine("USE_2D_POSITIONS",void 0,pe.VERTEX),o.addUniform("mat4","u_modelView2D",pe.VERTEX);let p=I.fromTranslation(d.center,new I),b=n.context,f={u_modelView2D:function(){return I.multiplyTransformation(b.uniformState.view,p,hdt)}};e.uniformMap=It(f,e.uniformMap)};var fdt=new h,pdt=new h;function bdt(e,t,n){let i=I.multiplyByPoint(t,e.positionMin,fdt),o=co.computeActualEllipsoidPosition(n,i,i),r=I.multiplyByPoint(t,e.positionMax,pdt),s=co.computeActualEllipsoidPosition(n,r,r);return le.fromCornerPoints(o,s,new le)}var hSe=new h;function gdt(e,t){let n=e.length,i=new Float32Array(n),o=t.quantizedVolumeOffset,r=t.quantizedVolumeStepSize;for(let s=0;s<n;s+=3){let a=h.fromArray(e,s,hSe),c=h.multiplyComponents(a,r,a),d=h.add(c,o,c);i[s]=d.x,i[s+1]=d.y,i[s+2]=d.z}return i}function ydt(e,t,n,i){let o;l(e.quantization)?o=gdt(e.typedArray,e.quantization):o=e.typedArray.slice();let r=e.byteOffset/Float32Array.BYTES_PER_ELEMENT,s=o.length,a=l(e.byteStride)?e.byteStride/Float32Array.BYTES_PER_ELEMENT:3;for(let c=r;c<s;c+=a){let d=h.fromArray(o,c,hSe);if(isNaN(d.x)||isNaN(d.y)||isNaN(d.z))continue;let u=I.multiplyByPoint(t,d,d),m=co.computeActualEllipsoidPosition(i,u,u),p=h.subtract(m,n,m);o[c]=p.x,o[c+1]=p.y,o[c+2]=p.z}return o}function xdt(e,t,n,i){let o=Je(i);o.mode=se.COLUMBUS_VIEW;let r=n.center,s=ydt(e,t,r,o),a=et.createVertexBuffer({context:i.context,typedArray:s,usage:Ie.STATIC_DRAW});return a.vertexArrayDestroyable=!1,a}var NX=mSe;var fRi=x(T(),1);var cRi=x(T(),1),YX=`void skinningStage(inout ProcessedAttributes attributes) { mat4 skinningMatrix = getSkinningMatrix(); mat3 skinningMatrixMat3 = mat3(skinningMatrix); vec4 positionMC = vec4(attributes.positionMC, 1.0); attributes.positionMC = vec3(skinningMatrix * positionMC); #ifdef HAS_NORMALS vec3 normalMC = attributes.normalMC; attributes.normalMC = skinningMatrixMat3 * normalMC; #endif #ifdef HAS_TANGENTS vec3 tangentMC = attributes.tangentMC; attributes.tangentMC = skinningMatrixMat3 * tangentMC; #endif }`;var SS={name:"SkinningPipelineStage",FUNCTION_ID_GET_SKINNING_MATRIX:"getSkinningMatrix",FUNCTION_SIGNATURE_GET_SKINNING_MATRIX:"mat4 getSkinningMatrix()"};SS.process=function(e,t){let n=e.shaderBuilder;n.addDefine("HAS_SKINNING",void 0,pe.VERTEX),_dt(n,t);let i=e.runtimeNode,o=i.computedJointMatrices;n.addUniform("mat4",`u_jointMatrices[${o.length}]`,pe.VERTEX),n.addVertexLines(YX);let r={u_jointMatrices:function(){return i.computedJointMatrices}};e.uniformMap=It(r,e.uniformMap)};function Tdt(e){let t=-1,n=e.attributes,i=n.length;for(let o=0;o<i;o++){let r=n[o];(r.semantic===st.JOINTS||r.semantic===st.WEIGHTS)&&(t=Math.max(t,r.setIndex))}return t}function _dt(e,t){e.addFunction(SS.FUNCTION_ID_GET_SKINNING_MATRIX,SS.FUNCTION_SIGNATURE_GET_SKINNING_MATRIX,pe.VERTEX),e.addFunctionLines(SS.FUNCTION_ID_GET_SKINNING_MATRIX,["mat4 skinnedMatrix = mat4(0);"]);let i,o,r=["x","y","z","w"],s=Tdt(t);for(i=0;i<=s;i++)for(o=0;o<=3;o++){let c=r[o],d=`skinnedMatrix += a_weights_${i}.${c} * u_jointMatrices[int(a_joints_${i}.${c})];`;e.addFunctionLines(SS.FUNCTION_ID_GET_SKINNING_MATRIX,[d])}e.addFunctionLines(SS.FUNCTION_ID_GET_SKINNING_MATRIX,["return skinnedMatrix;"])}var wX=SS;var _Ri=x(T(),1);var bRi=x(T(),1),MX=`void verticalExaggerationStage( inout ProcessedAttributes attributes ) { // Compute the distance from the camera to the local center of curvature. vec4 vertexPositionENU = czm_modelToEnu * vec4(attributes.positionMC, 1.0); vec2 vertexAzimuth = normalize(vertexPositionENU.xy); // Curvature = 1 / radius of curvature. float azimuthalCurvature = dot(vertexAzimuth * vertexAzimuth, czm_eyeEllipsoidCurvature); float eyeToCenter = 1.0 / azimuthalCurvature + czm_eyeHeight; // Compute the approximate ellipsoid normal at the vertex position. // Uses a circular approximation for the Earth curvature along the geodesic. vec3 vertexPositionEC = (czm_modelView * vec4(attributes.positionMC, 1.0)).xyz; vec3 centerToVertex = eyeToCenter * czm_eyeEllipsoidNormalEC + vertexPositionEC; vec3 vertexNormal = normalize(centerToVertex); // Estimate the (sine of the) angle between the camera direction and the vertex normal float verticalDistance = dot(vertexPositionEC, czm_eyeEllipsoidNormalEC); float horizontalDistance = length(vertexPositionEC - verticalDistance * czm_eyeEllipsoidNormalEC); float sinTheta = horizontalDistance / (eyeToCenter + verticalDistance); bool isSmallAngle = clamp(sinTheta, 0.0, 0.05) == sinTheta; // Approximate the change in height above the ellipsoid, from camera to vertex position. float exactVersine = 1.0 - dot(czm_eyeEllipsoidNormalEC, vertexNormal); float smallAngleVersine = 0.5 * sinTheta * sinTheta; float versine = isSmallAngle ? smallAngleVersine : exactVersine; float dHeight = dot(vertexPositionEC, vertexNormal) - eyeToCenter * versine; float vertexHeight = czm_eyeHeight + dHeight; // Transform the approximate vertex normal to model coordinates. vec3 vertexNormalMC = (czm_inverseModelView * vec4(vertexNormal, 0.0)).xyz; vertexNormalMC = normalize(vertexNormalMC); // Compute the exaggeration and apply it along the approximate vertex normal. float stretch = u_verticalExaggerationAndRelativeHeight.x; float shift = u_verticalExaggerationAndRelativeHeight.y; float exaggeration = (vertexHeight - shift) * (stretch - 1.0); attributes.positionMC += exaggeration * vertexNormalMC; } `;var fSe={name:"VerticalExaggerationPipelineStage"},Sdt=new M;fSe.process=function(e,t,n){let{shaderBuilder:i,uniformMap:o}=e;i.addVertexLines(MX),i.addDefine("HAS_VERTICAL_EXAGGERATION",void 0,pe.VERTEX),i.addUniform("vec2","u_verticalExaggerationAndRelativeHeight",pe.VERTEX),o.u_verticalExaggerationAndRelativeHeight=function(){return M.fromElements(n.verticalExaggeration,n.verticalExaggerationRelativeHeight,Sdt)}};var kX=fSe;var vRi=x(T(),1);var pSe={name:"WireframePipelineStage"};pSe.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_WIREFRAME",void 0,pe.FRAGMENT);let o=e.model,r=Zdt(t,e.indices,n);o._pipelineResources.push(r),e.wireframeIndexBuffer=r,o.statistics.addBuffer(r,!1);let a=e.primitiveType,c=e.count;e.primitiveType=Fe.LINES,e.count=U1.getWireframeIndicesCount(a,c)};function Zdt(e,t,n){let o=xt.getAttributeBySemantic(e,st.POSITION).count,r=n.context.webgl2,s;if(l(t)){let u=t.buffer,m=t.count;l(u)&&r?(s=u.sizeInBytes===m?new Uint8Array(m):De.createTypedArray(o,m),u.getBufferData(s)):s=t.typedArray}let a=e.primitiveType,c=U1.createWireframeIndices(a,o,s),d=De.fromSizeInBytes(c.BYTES_PER_ELEMENT);return et.createIndexBuffer({context:n.context,typedArray:c,usage:Ie.STATIC_DRAW,indexDatatype:d})}var UX=pSe;function bSe(e){e=e??B.EMPTY_OBJECT;let t=e.primitive,n=e.node,i=e.model;this.primitive=t,this.node=n,this.model=i,this.pipelineStages=[],this.drawCommand=void 0,this.boundingSphere=void 0,this.boundingSphere2D=void 0,this.positionBuffer2D=void 0,this.batchLengths=void 0,this.batchOffsets=void 0,this.updateStages=[]}bSe.prototype.configurePipeline=function(e){let t=this.pipelineStages;t.length=0;let n=this.primitive,i=this.node,o=this.model,r=o.customShader,s=o.style,a=e.context.webgl2,d=e.mode!==se.SCENE3D&&!e.scene3DOnly&&o._projectTo2D,u=e.verticalExaggeration!==1&&o.hasVerticalExaggeration,m=l(n.morphTargets)&&n.morphTargets.length>0,p=l(i.skin),b=l(o.imageryLayers)&&o.imageryLayers.length>0,f=l(r),_=!(f&&l(r.fragmentShaderText))||r.mode!==zb.REPLACE_MATERIAL,S=xt.hasQuantizedAttributes(n.attributes),Z=o.debugWireframe&&Fe.isTriangles(n.primitiveType)&&(o._enableDebugWireframe||a),V=o.pointCloudShading,C=l(V)&&V.attenuation,G=l(V)&&V.backFaceCulling,E=n.primitiveType===Fe.POINTS&&(l(s)||C||G),v=o._enableShowOutline&&l(n.outlineCoordinates),F=l(n.edgeVisibility),P=Vdt(o,i,n),N=l(o.classificationType);d&&t.push(NX),t.push(nX),Z&&t.push(UX),N&&t.push(PP),m&&t.push(EX),p&&t.push(wX),E&&t.push(vX),S&&t.push(HP),b&&(v?gt("outlines-and-draping","Primitive outlines disable imagery draping"):t.push(_X)),_&&t.push(GX),t.push(dx),t.push(Om),t.push(Wu),P.hasPropertyTable&&(t.push(mx),t.push(IP),t.push(YP)),u&&t.push(kX),f&&t.push(BP),t.push(ZX),o.allowPicking&&t.push(LX),v&&t.push(PX),F&&(e.edgeVisibilityRequested=!0,t.push(qP),t.push(JP)),t.push(FP),t.push(XX)};function Vdt(e,t,n){let i;return l(t.instances)&&(i=xt.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),l(i))?{hasFeatureIds:!0,hasPropertyTable:l(i.propertyTableId)}:(i=xt.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),l(i)?{hasFeatureIds:!0,hasPropertyTable:l(i.propertyTableId)}:{hasFeatureIds:!1,hasPropertyTable:!1})}var DX=bSe;var bGi=x(T(),1);function Jq(e){e=e??B.EMPTY_OBJECT,this._sceneGraph=e.sceneGraph;let t=e.skin;this._skin=t,this._inverseBindMatrices=void 0,this._joints=[],this._jointMatrices=[],Cdt(this)}Object.defineProperties(Jq.prototype,{skin:{get:function(){return this._skin}},sceneGraph:{get:function(){return this._sceneGraph}},inverseBindMatrices:{get:function(){return this._inverseBindMatrices}},joints:{get:function(){return this._joints}},jointMatrices:{get:function(){return this._jointMatrices}}});function Cdt(e){let t=e.skin,n=t.inverseBindMatrices;e._inverseBindMatrices=n;let i=t.joints,o=i.length,r=e.sceneGraph._runtimeNodes,s=e.joints,a=e._jointMatrices;for(let c=0;c<o;c++){let d=i[c].index,u=r[d];s.push(u);let m=n[c],p=gSe(u,m,new I);a.push(p)}}function gSe(e,t,n){let i=I.multiplyTransformation(e.transformToRoot,e.transform,n);return n=I.multiplyTransformation(i,t,n),n}Jq.prototype.updateJointMatrices=function(){let e=this._jointMatrices,t=e.length;for(let n=0;n<t;n++){let i=this.joints[n],o=this.inverseBindMatrices[n];e[n]=gSe(i,o,e[n])}};var OX=Jq;var VGi=x(T(),1);var yGi=x(T(),1);function Rdt(){this.pass=void 0,this.alphaCutoff=void 0}var ZS=Rdt;function Gdt(e){this.shaderBuilder=new xb,this.model=e,this.uniformMap={},this.alphaOptions=new ZS,this.renderStateOptions=Oe.getState(Oe.fromCache({depthTest:{enabled:!0,func:ac.LESS_OR_EQUAL}})),this.hasSilhouette=!1,this.hasSkipLevelOfDetail=!1,this.nodeRenderResources=[]}var BX=Gdt;var PGi=x(T(),1);var RGi=x(T(),1),zX=`void silhouetteStage(inout vec4 color) { if(model_silhouettePass) { color = czm_gammaCorrect(model_silhouetteColor); } }`;var AGi=x(T(),1),HX=`void silhouetteStage(in ProcessedAttributes attributes, inout vec4 positionClip) { #ifdef HAS_NORMALS if(model_silhouettePass) { vec3 normal = normalize(czm_normal3D * attributes.normalMC); normal.x *= czm_projection[0][0]; normal.y *= czm_projection[1][1]; positionClip.xy += normal.xy * positionClip.w * model_silhouetteSize * czm_pixelRatio / czm_viewport.z; } #endif } `;var dB={name:"ModelSilhouettePipelineStage"};dB.silhouettesLength=0;dB.process=function(e,t,n){l(t._silhouetteId)||(t._silhouetteId=++dB.silhouettesLength);let i=e.shaderBuilder;i.addDefine("HAS_SILHOUETTE",void 0,pe.BOTH),i.addVertexLines(HX),i.addFragmentLines(zX),i.addUniform("vec4","model_silhouetteColor",pe.FRAGMENT),i.addUniform("float","model_silhouetteSize",pe.VERTEX),i.addUniform("bool","model_silhouettePass",pe.BOTH);let o={model_silhouetteColor:function(){return t.silhouetteColor},model_silhouetteSize:function(){return t.silhouetteSize},model_silhouettePass:function(){return!1}};e.uniformMap=It(o,e.uniformMap),e.hasSilhouette=!0};var KX=dB;var UGi=x(T(),1);var NGi=x(T(),1),JX=`void modelSplitterStage() { // Don't split when rendering the shadow map, because it is rendered from // the perspective of a totally different camera. #ifndef SHADOW_MAP if (model_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard; if (model_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard; #endif } `;var uB={name:"ModelSplitterPipelineStage",SPLIT_DIRECTION_UNIFORM_NAME:"model_splitDirection"};uB.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_MODEL_SPLITTER",void 0,pe.FRAGMENT),i.addFragmentLines(JX);let o={};i.addUniform("float",uB.SPLIT_DIRECTION_UNIFORM_NAME,pe.FRAGMENT),o[uB.SPLIT_DIRECTION_UNIFORM_NAME]=function(){return t.splitDirection},e.uniformMap=It(o,e.uniformMap)};var jX=uB;var BGi=x(T(),1);function Adt(e,t){this.model=e.model,this.shaderBuilder=e.shaderBuilder.clone(),this.uniformMap=Je(e.uniformMap),this.alphaOptions=Je(e.alphaOptions),this.renderStateOptions=Je(e.renderStateOptions,!0),this.hasSilhouette=e.hasSilhouette,this.hasSkipLevelOfDetail=e.hasSkipLevelOfDetail,this.runtimeNode=t,this.attributes=[],this.attributeIndex=1,this.featureIdVertexAttributeSetIndex=0,this.instanceCount=0,this.primitiveRenderResources=[]}var QX=Adt;var iAi=x(T(),1);var JGi=x(T(),1);function Edt(e){e=e??B.EMPTY_OBJECT,this.lightingModel=e.lightingModel??Op.UNLIT}var qX=Edt;function Ldt(e,t){this.model=e.model,this.runtimeNode=e.runtimeNode,this.attributes=e.attributes.slice(),this.attributeIndex=e.attributeIndex,this.featureIdVertexAttributeSetIndex=e.featureIdVertexAttributeSetIndex,this.uniformMap=Je(e.uniformMap),this.alphaOptions=Je(e.alphaOptions),this.renderStateOptions=Je(e.renderStateOptions,!0),this.hasSilhouette=e.hasSilhouette,this.hasSkipLevelOfDetail=e.hasSkipLevelOfDetail,this.planarFillIdPass=!1,this.shaderBuilder=e.shaderBuilder.clone(),this.instanceCount=e.instanceCount,this.runtimePrimitive=t;let n=t.primitive;this.count=l(n.indices)?n.indices.count:xt.getAttributeBySemantic(n,"POSITION").count,this.hasPropertyTable=!1,this.indices=n.indices,this.wireframeIndexBuffer=void 0,this.primitiveType=n.primitiveType;let i=xt.getPositionMinMax(n,this.runtimeNode.instancingTranslationMin,this.runtimeNode.instancingTranslationMax);this.positionMin=h.clone(i.min,new h),this.positionMax=h.clone(i.max,new h),this.boundingSphere=le.fromCornerPoints(this.positionMin,this.positionMax,new le),this.lightingOptions=new qX,this.pickId=void 0,this.snapId=void 0}var $X=Ldt;var sEi=x(T(),1);var yAi=x(T(),1);function Qq(e){e=e??B.EMPTY_OBJECT;let t=e.command,n=e.primitiveRenderResources,i=n.model;this._command=t,this._model=i,this._runtimePrimitive=n.runtimePrimitive,this._modelMatrix=t.modelMatrix,this._boundingVolume=t.boundingVolume,this._cullFace=t.renderState.cull.face;let o=i.classificationType;this._classificationType=o,this._classifiesTerrain=o!==ei.CESIUM_3D_TILE,this._classifies3DTiles=o!==ei.TERRAIN,this._useDebugWireframe=i._enableDebugWireframe&&i.debugWireframe,this._pickId=n.pickId,this._commandListTerrain=[],this._commandList3DTiles=[],this._commandListIgnoreShow=[],this._commandListDebugWireframe=[],this._commandListTerrainPicking=[],this._commandList3DTilesPicking=[],Idt(this)}function Wdt(e){return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:e,frontOperation:{fail:Wt.KEEP,zFail:Wt.DECREMENT_WRAP,zPass:Wt.KEEP},backFunction:e,backOperation:{fail:Wt.KEEP,zFail:Wt.INCREMENT_WRAP,zPass:Wt.KEEP},reference:Kt.CESIUM_3D_TILE_MASK,mask:Kt.CESIUM_3D_TILE_MASK},stencilMask:Kt.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:ac.LESS_OR_EQUAL},depthMask:!1}}var vdt={stencilTest:{enabled:!0,frontFunction:ti.NOT_EQUAL,frontOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},backFunction:ti.NOT_EQUAL,backOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},reference:0,mask:Kt.CLASSIFICATION_MASK},stencilMask:Kt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:tn.PRE_MULTIPLIED_ALPHA_BLEND},Fdt={stencilTest:{enabled:!0,frontFunction:ti.NOT_EQUAL,frontOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},backFunction:ti.NOT_EQUAL,backOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},reference:0,mask:Kt.CLASSIFICATION_MASK},stencilMask:Kt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1},TSe=[];function Idt(e){let t=e._command,n=TSe;if(e._useDebugWireframe){t.pass=We.OPAQUE,n.length=0,n.push(t),e._commandListDebugWireframe=eN(e,n,e._commandListDebugWireframe);let r=e._commandListDebugWireframe,s=r.length;for(let a=0;a<s;a++){let c=r[a];c.count*=2,c.offset*=2}return}let o=e.model.allowPicking;if(e._classifiesTerrain){let r=We.TERRAIN_CLASSIFICATION,s=jq(t,r),a=ySe(t,r);n.length=0,n.push(s,a),e._commandListTerrain=eN(e,n,e._commandListTerrain),o&&(e._commandListTerrainPicking=xSe(e,n,e._commandListTerrainPicking))}if(e._classifies3DTiles){let r=We.CESIUM_3D_TILE_CLASSIFICATION,s=jq(t,r),a=ySe(t,r);n.length=0,n.push(s,a),e._commandList3DTiles=eN(e,n,e._commandList3DTiles),o&&(e._commandList3DTilesPicking=xSe(e,n,e._commandList3DTilesPicking))}}function eN(e,t,n){let i=e._runtimePrimitive,o=i.batchLengths,r=i.batchOffsets,s=o.length,a=t.length;for(let c=0;c<s;c++){let d=o[c],u=r[c];for(let m=0;m<a;m++){let p=t[m],b=ot.shallowClone(p);b.count=d,b.offset=u,n.push(b)}}return n}function jq(e,t){let n=ot.shallowClone(e);n.cull=!1,n.pass=t;let i=t===We.TERRAIN_CLASSIFICATION?ti.ALWAYS:ti.EQUAL,o=Wdt(i);return n.renderState=Oe.fromCache(o),n}function ySe(e,t){let n=ot.shallowClone(e);return n.cull=!1,n.pass=t,n.renderState=Oe.fromCache(vdt),n}var Pdt=[];function xSe(e,t,n){let i=Oe.fromCache(Fdt),o=t[0],r=t[1],s=ot.shallowClone(o);s.cull=!0,s.pickOnly=!0;let a=ot.shallowClone(r);a.cull=!0,a.pickOnly=!0,a.renderState=i,a.pickId=e._pickId;let c=Pdt;return c.length=0,c.push(s,a),eN(e,c,n)}Object.defineProperties(Qq.prototype,{command:{get:function(){return this._command}},runtimePrimitive:{get:function(){return this._runtimePrimitive}},batchLengths:{get:function(){return this._runtimePrimitive.batchLengths}},batchOffsets:{get:function(){return this._runtimePrimitive.batchOffsets}},model:{get:function(){return this._model}},classificationType:{get:function(){return this._classificationType}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=I.clone(e,this._modelMatrix);let t=this._runtimePrimitive.boundingSphere;this._boundingVolume=le.transform(t,this._modelMatrix,this._boundingVolume)}},boundingVolume:{get:function(){return this._boundingVolume}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace=e}}});Qq.prototype.pushCommands=function(e,t){let n=e.passes;if(n.render){if(this._useDebugWireframe){jn(t,this._commandListDebugWireframe);return}if(this._classifiesTerrain&&jn(t,this._commandListTerrain),this._classifies3DTiles&&jn(t,this._commandList3DTiles),e.invertClassification&&this._classifies3DTiles){if(this._commandListIgnoreShow.length===0){let o=We.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,r=jq(this._command,o),s=TSe;s.length=0,s.push(r),this._commandListIgnoreShow=eN(this,s,this._commandListIgnoreShow)}jn(t,this._commandListIgnoreShow)}}return n.pick&&(this._classifiesTerrain&&jn(t,this._commandListTerrainPicking),this._classifies3DTiles&&jn(t,this._commandList3DTilesPicking)),t};var tN=Qq;var MAi=x(T(),1);function jC(e){e=e??B.EMPTY_OBJECT;let t=e.command,n=e.primitiveRenderResources,i=n.model;this._model=i;let o=n.runtimePrimitive;this._runtimePrimitive=o,this._primitiveRenderResources=n;let r=t.pass===We.TRANSLUCENT,a=!o.primitive.material.doubleSided&&!r,c=n.hasSilhouette,d=!r&&!c,u=n.hasSkipLevelOfDetail&&!r,m=c,p=l(n.edgeGeometry);this._command=t,this._modelMatrix=I.clone(t.modelMatrix),this._boundingVolume=le.clone(t.boundingVolume),this._modelMatrix2D=new I,this._boundingVolume2D=new le,this._modelMatrix2DDirty=!1,this._backFaceCulling=t.renderState.cull.enabled,this._cullFace=t.renderState.cull.face,this._shadows=i.shadows,this._debugShowBoundingVolume=t.debugShowBoundingVolume,this._usesBackFaceCulling=a,this._needsTranslucentCommand=d,this._needsSkipLevelOfDetailCommands=u,this._needsSilhouetteCommands=m,this._needsEdgeCommands=p,this._needsPlanarFillIdCommand=n.planarFillIdPass,this._originalCommand=void 0,this._translucentCommand=void 0,this._skipLodBackfaceCommand=void 0,this._skipLodStencilCommand=void 0,this._silhouetteModelCommand=void 0,this._silhouetteColorCommand=void 0,this._edgeCommand=void 0,this._edgeSnapCommand=void 0,this._planarFillIdCommand=void 0,this._derivedCommands=[],this._has2DCommands=!1,Xdt(this)}function zm(e){this.command=e.command,this.updateShadows=e.updateShadows,this.updateBackFaceCulling=e.updateBackFaceCulling,this.updateCullFace=e.updateCullFace,this.updateDebugShowBoundingVolume=e.updateDebugShowBoundingVolume,this.is2D=e.is2D??!1,this.derivedCommand2D=void 0}zm.clone=function(e){return new zm({command:e.command,updateShadows:e.updateShadows,updateBackFaceCulling:e.updateBackFaceCulling,updateCullFace:e.updateCullFace,updateDebugShowBoundingVolume:e.updateDebugShowBoundingVolume,is2D:e.is2D,derivedCommand2D:e.derivedCommand2D})};function Xdt(e){let t=e._command;t.modelMatrix=e._modelMatrix,t.boundingVolume=e._boundingVolume;let n=e._model,i=e._usesBackFaceCulling,o=e._derivedCommands;if(e._originalCommand=new zm({command:t,updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0,is2D:!1}),o.push(e._originalCommand),e._needsTranslucentCommand&&(e._translucentCommand=new zm({command:Ddt(t),updateShadows:!0,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!0}),o.push(e._translucentCommand)),e._needsSkipLevelOfDetailCommands&&(e._skipLodBackfaceCommand=new zm({command:jdt(t),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:i,updateDebugShowBoundingVolume:!1}),e._skipLodStencilCommand=new zm({command:Qdt(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),o.push(e._skipLodBackfaceCommand),o.push(e._skipLodStencilCommand)),e._needsSilhouetteCommands&&(e._silhouetteModelCommand=new zm({command:Odt(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),e._silhouetteColorCommand=new zm({command:Bdt(t,n),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!1}),o.push(e._silhouetteModelCommand),o.push(e._silhouetteColorCommand)),e._needsEdgeCommands){let r=e._primitiveRenderResources,s=r.edgeGeometry,a=l(s.lineWidth)?s.lineWidth:1,c=1;e._edgeCommand=new zm({command:_Se(t,r,a),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!1}),e._edgeSnapCommand=new zm({command:_Se(t,r,c),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!1}),o.push(e._edgeCommand),o.push(e._edgeSnapCommand)}e._needsPlanarFillIdCommand&&(e._planarFillIdCommand=new zm({command:zdt(t),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!1}),o.push(e._planarFillIdCommand))}Object.defineProperties(jC.prototype,{command:{get:function(){return this._command}},runtimePrimitive:{get:function(){return this._runtimePrimitive}},model:{get:function(){return this._model}},primitiveType:{get:function(){return this._command.primitiveType}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=I.clone(e,this._modelMatrix),this._modelMatrix2DDirty=!0,this._boundingVolume=le.transform(this.runtimePrimitive.boundingSphere,this._modelMatrix,this._boundingVolume)}},boundingVolume:{get:function(){return this._boundingVolume}},shadows:{get:function(){return this._shadows},set:function(e){this._shadows=e,Ydt(this)}},backFaceCulling:{get:function(){return this._backFaceCulling},set:function(e){this._backFaceCulling!==e&&(this._backFaceCulling=e,wdt(this))}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace!==e&&(this._cullFace=e,Mdt(this))}},debugShowBoundingVolume:{get:function(){return this._debugShowBoundingVolume},set:function(e){this._debugShowBoundingVolume!==e&&(this._debugShowBoundingVolume=e,kdt(this))}}});function Ndt(e,t){let n=e._modelMatrix;e._modelMatrix2D=I.clone(n,e._modelMatrix2D),e._modelMatrix2D[13]-=L.sign(n[13])*2*L.PI*t.mapProjection.ellipsoid.maximumRadius,e._boundingVolume2D=le.transform(e.runtimePrimitive.boundingSphere,e._modelMatrix2D,e._boundingVolume2D)}function Ydt(e){let t=e.shadows,n=Fn.castShadows(t),i=Fn.receiveShadows(t),o=e._derivedCommands;for(let r=0;r<o.length;++r){let s=o[r];if(s.updateShadows){let a=s.command;a.castShadows=n,a.receiveShadows=i}}}function wdt(e){let t=e.backFaceCulling,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateBackFaceCulling){let r=o.command,s=Je(r.renderState,!0);s.cull.enabled=t,r.renderState=Oe.fromCache(s)}}}function Mdt(e){let t=e.cullFace,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateCullFace){let r=o.command,s=Je(r.renderState,!0);s.cull.face=t,r.renderState=Oe.fromCache(s)}}}function kdt(e){let t=e.debugShowBoundingVolume,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateDebugShowBoundingVolume){let r=o.command;r.debugShowBoundingVolume=t}}}jC.prototype.pushCommands=function(e,t){let n=mB(this,e);n&&!this._has2DCommands&&(Udt(this),this._has2DCommands=!0,this._modelMatrix2DDirty=!0),this._modelMatrix2DDirty&&(Ndt(this,e),this._modelMatrix2DDirty=!1);let i=this.model.styleCommandsNeeded;if(!(this._needsTranslucentCommand&&l(i)&&(i!==bf.ALL_OPAQUE&&Bp(t,this._translucentCommand,n),i===bf.ALL_TRANSLUCENT))){if(this._needsSkipLevelOfDetailCommands){let{tileset:o,tile:r}=this._model.content;if(o.hasMixedContent){r._finalResolution||Bp(o._backfaceCommands,this._skipLodBackfaceCommand,n),Hdt(this,r,n),Bp(t,this._skipLodStencilCommand,n);return}}if(this._needsSilhouetteCommands){Bp(t,this._silhouetteModelCommand,n);return}return this._model.edgeDisplayMode===Um.EDGES_ONLY&&this._needsEdgeCommands||Bp(t,this._originalCommand,n),t}};jC.prototype.pushSilhouetteCommands=function(e,t){let n=mB(this,e);return Bp(t,this._silhouetteColorCommand,n),t};jC.prototype.pushEdgeCommands=function(e,t){if(!l(this._edgeCommand))return t;let n=this._model.edgeDisplayMode,i=e.passes,o=mB(this,e);if(i.snap){let s=this._edgeSnapCommand;return s.command.pass=We.CESIUM_3D_TILE_EDGES_DIRECT,l(s.derivedCommand2D)&&(s.derivedCommand2D.command.pass=We.CESIUM_3D_TILE_EDGES_DIRECT),Bp(t,s,o),t}if(i.pick){if(n!==Um.EDGES_ONLY)return t;let s=this._edgeCommand;return s.command.pass=We.CESIUM_3D_TILE_EDGES_DIRECT,l(s.derivedCommand2D)&&(s.derivedCommand2D.command.pass=We.CESIUM_3D_TILE_EDGES_DIRECT),Bp(t,s,o),t}if(n===Um.SURFACES_ONLY)return t;let r=n===Um.EDGES_ONLY?We.CESIUM_3D_TILE_EDGES_DIRECT:We.CESIUM_3D_TILE_EDGES;return this._edgeCommand.command.pass=r,l(this._edgeCommand.derivedCommand2D)&&(this._edgeCommand.derivedCommand2D.command.pass=r),Bp(t,this._edgeCommand,o),t};jC.prototype.pushPlanarFillIdCommands=function(e,t){if(!l(this._planarFillIdCommand))return t;let n=mB(this,e);return Bp(t,this._planarFillIdCommand,n),t};function Bp(e,t,n){e.push(t.command),n&&e.push(t.derivedCommand2D.command)}function mB(e,t){if(t.mode!==se.SCENE2D||e.model._projectTo2D)return!1;let i=e.model.sceneGraph._boundingSphere2D,o=i.center.y-i.radius,r=i.center.y+i.radius,s=t.mapProjection.ellipsoid.maximumRadius*L.PI;return o<s&&r>s||o<-s&&r>-s}function Qb(e,t){if(!l(t))return;let n=zm.clone(t),i=ot.shallowClone(t.command);return i.modelMatrix=e._modelMatrix2D,i.boundingVolume=e._boundingVolume2D,n.command=i,n.updateShadows=!1,n.is2D=!0,t.derivedCommand2D=n,e._derivedCommands.push(n),n}function Udt(e){Qb(e,e._originalCommand),Qb(e,e._translucentCommand),Qb(e,e._skipLodBackfaceCommand),Qb(e,e._skipLodStencilCommand),Qb(e,e._silhouetteModelCommand),Qb(e,e._silhouetteColorCommand),Qb(e,e._edgeCommand),Qb(e,e._edgeSnapCommand),Qb(e,e._planarFillIdCommand)}function Ddt(e){let t=ot.shallowClone(e);t.pass=We.TRANSLUCENT;let n=Je(e.renderState,!0);return n.cull.enabled=!1,n.depthMask=!1,n.blending=tn.ALPHA_BLEND,t.renderState=Oe.fromCache(n),t}function Odt(e,t){let n=t._silhouetteId%255,i=ot.shallowClone(e),o=Je(e.renderState,!0);return o.stencilTest={enabled:!0,frontFunction:ne.ALWAYS,backFunction:ne.ALWAYS,reference:n,mask:-1,frontOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.REPLACE},backOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.REPLACE}},t.isInvisible()&&(o.colorMask={red:!1,green:!1,blue:!1,alpha:!1}),i.renderState=Oe.fromCache(o),i}function Bdt(e,t){let n=t._silhouetteId%255,i=ot.shallowClone(e),o=Je(e.renderState,!0);o.cull.enabled=!1,(e.pass===We.TRANSLUCENT||t.silhouetteColor.alpha<1)&&(i.pass=We.TRANSLUCENT,o.depthMask=!1,o.blending=tn.ALPHA_BLEND),o.stencilTest={enabled:!0,frontFunction:ne.NOTEQUAL,backFunction:ne.NOTEQUAL,reference:n,mask:-1,frontOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.KEEP},backOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.KEEP}};let s=Je(e.uniformMap);return s.model_silhouettePass=function(){return!0},i.renderState=Oe.fromCache(o),i.uniformMap=s,i.castShadows=!1,i.receiveShadows=!1,i}function _Se(e,t,n){let i=t.edgeGeometry,o=ot.shallowClone(e);o.vertexArray=i.vertexArray,o.primitiveType=i.primitiveType,o.count=i.indexCount,l(i.shaderProgram)&&(o.shaderProgram=i.shaderProgram),o.pass=i.pass;let r=Je(e.uniformMap);return r.u_isEdgePass=function(){return!0},r.u_lineWidth=function(){return n},o.uniformMap=r,o.castShadows=!1,o.receiveShadows=!1,o}function zdt(e){let t=ot.shallowClone(e);t.pass=We.CESIUM_3D_TILE_PLANAR_FILL_ID,t.castShadows=!1,t.receiveShadows=!1;let n=Je(e.renderState,!0);n.blending.enabled=!1,t.renderState=Oe.fromCache(n);let i=Je(e.uniformMap);return i.u_isPlanarFillIdPass=function(){return!0},t.uniformMap=i,t}function Hdt(e,t,n){let i=e._skipLodStencilCommand,o=i.command,r=t._selectionDepth,s=Kdt(o);if(r!==s){let a=Jdt(r),c=Je(o.renderState,!0);c.stencilTest.reference=a,o.renderState=Oe.fromCache(c),n&&(i.derivedCommand2D.renderState=c)}}function Kdt(e){return(e.renderState.stencilTest.reference&Kt.SKIP_LOD_MASK)>>>Kt.SKIP_LOD_BIT_SHIFT}function Jdt(e){return Kt.CESIUM_3D_TILE_MASK|e<<Kt.SKIP_LOD_BIT_SHIFT}function jdt(e){let t=ot.shallowClone(e),n=Je(e.renderState,!0);n.cull.enabled=!0,n.cull.face=ki.FRONT,n.colorMask={red:!1,green:!1,blue:!1,alpha:!1},n.polygonOffset={enabled:!0,factor:5,units:5};let i=Je(t.uniformMap),o=new M(5,5);return i.u_polygonOffset=function(){return o},t.renderState=Oe.fromCache(n),t.uniformMap=i,t.castShadows=!1,t.receiveShadows=!1,t}function Qdt(e){let t=ot.shallowClone(e),n=Je(e.renderState,!0),{stencilTest:i}=n;return i.enabled=!0,i.mask=Kt.SKIP_LOD_MASK,i.reference=Kt.CESIUM_3D_TILE_MASK,i.frontFunction=ti.GREATER_OR_EQUAL,i.frontOperation.zPass=Wt.REPLACE,i.backFunction=ti.GREATER_OR_EQUAL,i.backOperation.zPass=Wt.REPLACE,n.stencilMask=Kt.CESIUM_3D_TILE_MASK|Kt.SKIP_LOD_MASK,t.renderState=Oe.fromCache(n),t}var nN=jC;var UAi=x(T(),1),iN=`precision highp float; czm_modelVertexOutput defaultVertexOutput(vec3 positionMC) { czm_modelVertexOutput vsOutput; vsOutput.positionMC = positionMC; vsOutput.pointSize = 1.0; return vsOutput; } void main() { // Initialize the attributes struct with all // attributes except quantized ones. ProcessedAttributes attributes; initializeAttributes(attributes); #ifdef HAS_IMAGERY initializeImageryAttributes(); #endif // Dequantize the quantized ones and add them to the // attributes struct. #ifdef USE_DEQUANTIZATION dequantizationStage(attributes); #endif #ifdef HAS_MORPH_TARGETS morphTargetsStage(attributes); #endif #ifdef HAS_SKINNING skinningStage(attributes); #endif #ifdef HAS_PRIMITIVE_OUTLINE primitiveOutlineStage(); #endif // Compute the bitangent according to the formula in the glTF spec. // Normal and tangents can be affected by morphing and skinning, so // the bitangent should not be computed until their values are finalized. #ifdef HAS_BITANGENTS attributes.bitangentMC = normalize(cross(attributes.normalMC, attributes.tangentMC) * attributes.tangentSignMC); #endif FeatureIds featureIds; featureIdStage(featureIds, attributes); #ifdef HAS_SELECTED_FEATURE_ID SelectedFeature feature; selectedFeatureIdStage(feature, featureIds); // Handle any show properties that come from the style. cpuStylingStage(attributes.positionMC, feature); #endif #if defined(USE_2D_POSITIONS) || defined(USE_2D_INSTANCING) // The scene mode 2D pipeline stage and instancing stage add a different // model view matrix to accurately project the model to 2D. However, the // output positions and normals should be transformed by the 3D matrices // to keep the data the same for the fragment shader. mat4 modelView = czm_modelView3D; mat3 normal = czm_normal3D; #else // These are used for individual model projection because they will // automatically change based on the scene mode. mat4 modelView = czm_modelView; mat3 normal = czm_normal; #endif // Update the position for this instance in place #ifdef HAS_INSTANCING // The legacy instance stage is used when rendering i3dm models that // encode instances transforms in world space, as opposed to glTF models // that use EXT_mesh_gpu_instancing, where instance transforms are encoded // in object space. #ifdef USE_LEGACY_INSTANCING mat4 instanceModelView; mat3 instanceModelViewInverseTranspose; legacyInstancingStage(attributes, instanceModelView, instanceModelViewInverseTranspose); modelView = instanceModelView; normal = instanceModelViewInverseTranspose; #else instancingStage(attributes); #endif #ifdef USE_PICKING v_pickColor = a_pickColor; #endif #endif Metadata metadata; MetadataClass metadataClass; MetadataStatistics metadataStatistics; metadataStage(featureIds, metadata, metadataClass, metadataStatistics, attributes); #ifdef HAS_VERTICAL_EXAGGERATION verticalExaggerationStage(attributes); #endif #ifdef HAS_CUSTOM_VERTEX_SHADER czm_modelVertexOutput vsOutput = defaultVertexOutput(attributes.positionMC); customShaderStage(vsOutput, attributes, featureIds, metadata, metadataClass, metadataStatistics); #endif // Compute the final position in each coordinate system needed. // This returns the value that will be assigned to gl_Position. vec4 positionClip = geometryStage(attributes, modelView, normal); #if defined(HAS_LINE_CUMULATIVE_DISTANCE) || defined(HAS_LINE_PATTERN) lineStyleStageVS(attributes); #endif // This must go after the geometry stage as it needs v_positionWC #ifdef HAS_ATMOSPHERE atmosphereStage(attributes); #endif #ifdef ENABLE_CLIPPING_POLYGONS modelClippingPolygonsStage(attributes); #endif #ifdef HAS_SILHOUETTE silhouetteStage(attributes, positionClip); #endif #ifdef HAS_POINT_CLOUD_SHOW_STYLE float show = pointCloudShowStylingStage(attributes, metadata); #else float show = 1.0; #endif #ifdef HAS_POINT_CLOUD_BACK_FACE_CULLING show *= pointCloudBackFaceCullingStage(); #endif #ifdef HAS_POINT_CLOUD_COLOR_STYLE v_pointCloudColor = pointCloudColorStylingStage(attributes, metadata); #endif #ifdef PRIMITIVE_TYPE_POINTS #ifdef HAS_CUSTOM_VERTEX_SHADER gl_PointSize = vsOutput.pointSize; #elif defined(HAS_POINT_CLOUD_POINT_SIZE_STYLE) || defined(HAS_POINT_CLOUD_ATTENUATION) gl_PointSize = pointCloudPointSizeStylingStage(attributes, metadata); #elif defined(HAS_POINT_DIAMETER) gl_PointSize = u_pointDiameter; #else gl_PointSize = 1.0; #endif gl_PointSize *= show; #endif // Important NOT to compute gl_Position = show * positionClip or we hit: // https://github.com/CesiumGS/cesium/issues/11270 // // We will discard points with v_pointCloudShow == 0 in the fragment shader. gl_Position = positionClip; #ifdef HAS_EDGE_VISIBILITY edgeVisibilityStageVS(); #endif #ifdef HAS_POINT_CLOUD_SHOW_STYLE v_pointCloudShow = show; #endif } `;var OAi=x(T(),1),oN=` precision highp float; // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 // BENTLEY_materials_planar_fill constants // // These factors scale gl_FragDepth AFTER czm_writeLogDepth has run, so // they are proportional offsets in log-depth space. The corresponding // eye-space offset therefore varies with the fragment's distance from // the camera (growing with distance). This is the intended behavior: it // matches the proportional depth comparison tolerance used by the edge // visibility system, so fills and edges stay consistently ordered at all // viewing distances. // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 // Depth pull factor for all planar fills: scales log depth by 0.9995, // i.e. a 0.05% pull toward the camera in log-depth space. const float PLANAR_DEPTH_PULL = 0.9995; // Depth push factor for behind fills: scales log depth by 1.0002, i.e. a // 0.02% push away from the camera in log-depth space, so behind fills sit // behind same-object siblings. const float BEHIND_DEPTH_PUSH = 1.0002; // Tolerance for comparing feature IDs stored as floats (integer equality). const float FEATURE_ID_TOLERANCE = 0.5; // Offset added to feature IDs so 0 means "no planar fill" in the texture. const float FEATURE_ID_OFFSET = 1.0; czm_modelMaterial defaultModelMaterial() { czm_modelMaterial material; material.diffuse = vec3(0.0); material.specular = vec3(1.0); material.roughness = 1.0; material.occlusion = 1.0; material.normalEC = vec3(0.0, 0.0, 1.0); material.emissive = vec3(0.0); material.alpha = 1.0; return material; } vec4 handleAlpha(vec3 color, float alpha) { #ifdef ALPHA_MODE_MASK if (alpha < u_alphaCutoff) { discard; } #endif return vec4(color, alpha); } void lineStyleStage() { #if defined(HAS_LINE_PATTERN) && !defined(HAS_EDGE_VISIBILITY) const float maskLength = 16.0; float dashPosition = fract(v_lineCoord / maskLength); float maskIndex = floor(dashPosition * maskLength); float maskTest = floor(u_linePattern / pow(2.0, maskIndex)); if (mod(maskTest, 2.0) < 1.0) { discard; } #endif } SelectedFeature selectedFeature; // Set by edge-pass fragments below; consumed by the snapId expression built // in PickingPipelineStage (see Scene#snap). bool isEdge = false; void main() { #if defined(PRIMITIVE_TYPE_POINTS) && defined(HAS_POINT_DIAMETER) // Render points as circles float distanceToCenter = length(gl_PointCoord - vec2(0.5)); if (distanceToCenter > 0.5) { discard; } #endif #ifdef HAS_POINT_CLOUD_SHOW_STYLE if (v_pointCloudShow == 0.0) { discard; } #endif #ifdef HAS_MODEL_SPLITTER modelSplitterStage(); #endif czm_modelMaterial material = defaultModelMaterial(); ProcessedAttributes attributes; geometryStage(attributes); FeatureIds featureIds; featureIdStage(featureIds, attributes); // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 // BENTLEY_materials_planar_fill: Feature-ID pre-pass output. // // When HAS_PLANAR_FILL_ID_PASS is defined this command is being rendered // into the planar fill ID framebuffer. Non-behind planar geometry writes // its feature ID + 1 into the R channel (0 = no feature) and returns. // No material / lighting / post-process stages are needed. // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 #ifdef HAS_PLANAR_FILL_ID_PASS if (u_isPlanarFillIdPass) { float fid = float(featureIds.PLANAR_FILL_FEATURE_ID) + FEATURE_ID_OFFSET; out_FragColor = vec4(fid, 0.0, 0.0, 1.0); // Still need to write log depth so the depth buffer is correct. #ifdef LOG_DEPTH czm_writeLogDepth(); #endif return; } #endif Metadata metadata; MetadataClass metadataClass; MetadataStatistics metadataStatistics; metadataStage(featureIds, metadata, metadataClass, metadataStatistics, attributes); //======================================================================== // When not picking metadata START #ifndef METADATA_PICKING_ENABLED #ifdef HAS_SELECTED_FEATURE_ID selectedFeatureIdStage(selectedFeature, featureIds); #endif #ifndef CUSTOM_SHADER_REPLACE_MATERIAL materialStage(material, attributes, selectedFeature); #endif #ifdef HAS_CUSTOM_FRAGMENT_SHADER customShaderStage(material, attributes, featureIds, metadata, metadataClass, metadataStatistics); #endif lightingStage(material, attributes); #ifdef HAS_SELECTED_FEATURE_ID cpuStylingStage(material, selectedFeature); #endif #ifdef HAS_MODEL_COLOR modelColorStage(material); #endif #ifdef HAS_PRIMITIVE_OUTLINE primitiveOutlineStage(material); #endif vec4 color = handleAlpha(material.diffuse, material.alpha); // When not picking metadata END //======================================================================== #else //======================================================================== // When picking metadata START vec4 metadataValues = vec4(0.0, 0.0, 0.0, 0.0); metadataPickingStage(metadata, metadataClass, metadataValues); vec4 color = metadataValues; #endif // When picking metadata END //======================================================================== lineStyleStage(); #ifdef HAS_CLIPPING_PLANES modelClippingPlanesStage(color); #endif #ifdef ENABLE_CLIPPING_POLYGONS modelClippingPolygonsStage(); #endif //======================================================================== // When not picking metadata START #ifndef METADATA_PICKING_ENABLED #if defined(HAS_SILHOUETTE) && defined(HAS_NORMALS) silhouetteStage(color); #endif #ifdef HAS_ATMOSPHERE atmosphereStage(color, attributes); #endif #ifdef HAS_EDGE_VISIBILITY edgeVisibilityStage(color, featureIds); edgeDetectionStage(color, featureIds); // Edge-pass fragments rasterize the edge band itself. Flag them so the // snap payload (see Scene#snap) can distinguish edges from surfaces; // surface fragments leave isEdge false. if (u_isEdgePass) { isEdge = true; } #endif #endif // When not picking metadata END //======================================================================== out_FragColor = color; // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 // Explicit log-depth write. // // DerivedCommand.getLogDepthShaderProgram auto-wraps only when the raw // source does NOT already mention czm_writeLogDepth. We mention it // above in the HAS_PLANAR_FILL_ID_PASS block, so we must also handle // the normal code path ourselves. The LOG_DEPTH define is injected by // that same auto-wrapper, so this block is active exactly when needed. // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 #ifdef LOG_DEPTH czm_writeLogDepth(); #endif // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 // BENTLEY_materials_planar_fill: Proportional depth adjustment. // // Per the spec, planar primitives must render in front of non-planar // geometry. We use proportional depth scaling (similar to edge visibility) // which scales naturally with logarithmic depth at all viewing distances. // // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 #ifdef HAS_PLANAR_FILL_DEPTH gl_FragDepth *= PLANAR_DEPTH_PULL; #endif // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 // BENTLEY_materials_planar_fill: Behind fill depth adjustment. // // After the proportional depth pull has been applied, sample the planar // fill ID texture. If the pixel already belongs to the same feature, // apply a small proportional push so this "behind" fill sits behind its // non-behind sibling. If the pixel has no stored feature, the base pull // still keeps us in front of non-planar geometry. // // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 #ifdef HAS_PLANAR_FILL_BEHIND { vec2 screenCoord = gl_FragCoord.xy / czm_viewport.zw; float storedEncoded = texture(czm_planarFillIdTexture, screenCoord).r; float storedFeatureId = storedEncoded - FEATURE_ID_OFFSET; float myFeatureId = float(featureIds.PLANAR_FILL_FEATURE_ID); // storedFeatureId < 0 means "no planar fill at this pixel". if (storedFeatureId >= 0.0 && abs(storedFeatureId - myFeatureId) < FEATURE_ID_TOLERANCE) { // Proportional push: multiply by >1 to move away from camera. // Net effect: PLANAR_DEPTH_PULL * BEHIND_DEPTH_PUSH \u2248 0.9997, // still in front of non-planar but behind same-feature non-behind fills. gl_FragDepth *= BEHIND_DEPTH_PUSH; } } #endif } `;function SSe(){}SSe.buildModelDrawCommand=function(e,t){let n=e.shaderBuilder,i=qdt(e,n,t),o=$dt(e,i,t),r=e.model;return l(r.classificationType)?new tN({primitiveRenderResources:e,command:o}):new nN({primitiveRenderResources:e,command:o})};function qdt(e,t,n){t.addVertexLines(iN),t.addFragmentLines(oN);let i=e.model,o=t.buildShaderProgram(n.context);return i._pipelineResources.push(o),o}function $dt(e,t,n){let i=eut(e),o=new Dn({context:n.context,indexBuffer:i,attributes:e.attributes}),r=e.model;r._pipelineResources.push(o);let s=e.alphaOptions.pass,a=r.sceneGraph,c=n.mode===se.SCENE3D,d,u;if(!c&&!n.scene3DOnly&&r._projectTo2D)d=I.multiplyTransformation(a._computedModelMatrix,e.runtimeNode.computedTransform,new I),u=e.runtimePrimitive.boundingSphere2D;else{let Z=c?a._computedModelMatrix:a._computedModelMatrix2D;d=I.multiplyTransformation(Z,e.runtimeNode.computedTransform,new I),u=le.transform(e.boundingSphere,d)}let m=Je(Oe.fromCache(e.renderStateOptions),!0);m.cull.face=xt.getCullFace(d,e.primitiveType),m=Oe.fromCache(m);let p=l(r.classificationType),b=p?!1:Fn.castShadows(r.shadows),f=p?!1:Fn.receiveShadows(r.shadows),y=p?void 0:e.pickId,_=p?void 0:e.snapId;return new ot({boundingVolume:u,modelMatrix:d,uniformMap:e.uniformMap,renderState:m,vertexArray:o,shaderProgram:t,cull:r.cull,pass:s,count:e.count,owner:r,pickId:y,snapId:_,pickMetadataAllowed:!0,instanceCount:e.instanceCount,primitiveType:e.primitiveType,debugShowBoundingVolume:r.debugShowBoundingVolume,castShadows:b,receiveShadows:f})}function eut(e){let t=e.wireframeIndexBuffer;if(l(t))return t;let n=e.indices;if(l(n))return n.buffer}var rN=SSe;function ml(e){e=e??B.EMPTY_OBJECT;let t=e.modelComponents;this._model=e.model,this._components=t,this._pipelineStages=[],this._updateStages=[],this._runtimeNodes=[],this._rootNodes=[],this._skinnedNodes=[],this._runtimeSkins=[],this.modelPipelineStages=[],this._boundingSphere=void 0,this._boundingSphere2D=void 0,this._computedModelMatrix=I.clone(I.IDENTITY),this._computedModelMatrix2D=I.clone(I.IDENTITY),this._axisCorrectionMatrix=xt.getAxisCorrectionMatrix(t.upAxis,t.forwardAxis,new I),this._runtimeArticulations={},tut(this)}Object.defineProperties(ml.prototype,{components:{get:function(){return this._components}},computedModelMatrix:{get:function(){return this._computedModelMatrix}},axisCorrectionMatrix:{get:function(){return this._axisCorrectionMatrix}},boundingSphere:{get:function(){return this._boundingSphere}}});function tut(e){let t=e._components,n=t.scene,o=e._model.modelMatrix;ZSe(e,o);let r=t.articulations,s=r.length,a=e._runtimeArticulations;for(let Z=0;Z<s;Z++){let V=r[Z],C=new gP({articulation:V,sceneGraph:e}),G=C.name;a[G]=C}let c=t.nodes,d=c.length;e._runtimeNodes=new Array(d);let m=n.nodes.length,p=I.IDENTITY;for(let Z=0;Z<m;Z++){let V=n.nodes[Z],C=VSe(e,V,p);e._rootNodes.push(C)}let b=t.skins,f=e._runtimeSkins,y=b.length;for(let Z=0;Z<y;Z++){let V=b[Z];f.push(new OX({skin:V,sceneGraph:e}))}let _=e._skinnedNodes,S=_.length;for(let Z=0;Z<S;Z++){let V=_[Z],C=e._runtimeNodes[V],E=c[V].skin.index;C._runtimeSkin=f[E],C.updateJointMatrices()}e.applyArticulations()}function ZSe(e,t){let n=e._components,i=e._model;e._computedModelMatrix=I.multiplyTransformation(t,n.transform,e._computedModelMatrix),e._computedModelMatrix=I.multiplyTransformation(e._computedModelMatrix,e._axisCorrectionMatrix,e._computedModelMatrix),e._computedModelMatrix=I.multiplyByUniformScale(e._computedModelMatrix,i.computedScale,e._computedModelMatrix)}var nut=new h;function iut(e,t){let n=e._computedModelMatrix,i=I.getTranslation(n,nut);if(!h.equals(i,h.ZERO))e._computedModelMatrix2D=bt.basisTo2D(t.mapProjection,n,e._computedModelMatrix2D);else{let o=e.boundingSphere.center,r=bt.ellipsoidTo2DModelMatrix(t.mapProjection,o,e._computedModelMatrix2D);e._computedModelMatrix2D=I.multiply(r,n,e._computedModelMatrix2D)}e._boundingSphere2D=le.transform(e._boundingSphere,e._computedModelMatrix2D,e._boundingSphere2D)}function VSe(e,t,n){let i=[],o=xt.getNodeTransform(t),r=t.children.length;for(let u=0;u<r;u++){let m=t.children[u],p=I.multiplyTransformation(n,o,new I),b=VSe(e,m,p);i.push(b)}let s=new vP({node:t,transform:o,transformToRoot:n,children:i,sceneGraph:e}),a=t.primitives.length;for(let u=0;u<a;u++)s.runtimePrimitives.push(new DX({primitive:t.primitives[u],node:t,model:e._model}));let c=t.index;e._runtimeNodes[c]=s,l(t.skin)&&e._skinnedNodes.push(c);let d=t.name;if(l(d)){let u=e._model,m=new VP(u,s);u._nodesByName[d]=m}return c}var out=new h,rut=new h,sut=new h,aut=new h;ml.prototype.buildDrawCommands=function(e){let t=this.buildRenderResources(e);this.computeBoundingVolumes(t),this.createDrawCommands(t,e)};ml.prototype.buildRenderResources=function(e){let t=this._model,n=new BX(t);t.statistics.clear(),this.configurePipeline(e);let i=this.modelPipelineStages;for(let o=0;o<i.length;o++)i[o].process(n,t,e);for(let o=0;o<this._runtimeNodes.length;o++){let r=this._runtimeNodes[o];if(!l(r))continue;r.configurePipeline();let s=r.pipelineStages,a=new QX(n,r);n.nodeRenderResources[o]=a;for(let c=0;c<s.length;c++)s[c].process(a,r.node,e);for(let c=0;c<r.runtimePrimitives.length;c++){let d=r.runtimePrimitives[c];d.configurePipeline(e);let u=d.pipelineStages,m=new $X(a,d);a.primitiveRenderResources[c]=m;for(let p=0;p<u.length;p++)u[p].process(m,d.primitive,e)}}return n};ml.prototype.computeBoundingVolumes=function(e){let t=this._model,n=h.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,out),i=h.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,rut);for(let o=0;o<this._runtimeNodes.length;o++){let r=this._runtimeNodes[o];if(!l(r))continue;let s=e.nodeRenderResources[o],a=r.computedTransform;for(let c=0;c<r.runtimePrimitives.length;c++){let d=r.runtimePrimitives[c],u=s.primitiveRenderResources[c];d.boundingSphere=le.clone(u.boundingSphere,new le);let m=I.multiplyByPoint(a,u.positionMin,sut),p=I.multiplyByPoint(a,u.positionMax,aut);h.minimumByComponent(n,m,n),h.maximumByComponent(i,p,i)}}this._boundingSphere=le.fromCornerPoints(n,i,new le),this._boundingSphere=le.transformWithoutScale(this._boundingSphere,this._axisCorrectionMatrix,this._boundingSphere),this._boundingSphere=le.transform(this._boundingSphere,this._components.transform,this._boundingSphere),t._boundingSphere=le.transform(this._boundingSphere,t.modelMatrix,t._boundingSphere),t._initialRadius=t._boundingSphere.radius,t._boundingSphere.radius*=t._clampedScale};ml.prototype.createDrawCommands=function(e,t){for(let n=0;n<this._runtimeNodes.length;n++){let i=this._runtimeNodes[n];if(!l(i))continue;let o=e.nodeRenderResources[n];for(let r=0;r<i.runtimePrimitives.length;r++){let s=i.runtimePrimitives[r],a=o.primitiveRenderResources[r],c=rN.buildModelDrawCommand(a,t);s.drawCommand=c}}};ml.prototype.configurePipeline=function(e){let t=this.modelPipelineStages;t.length=0;let n=this._model,i=e.fog.enabled&&e.fog.renderable;l(n.color)&&t.push(lx),!l(n.classificationType)&&(n.imageBasedLighting.enabled&&t.push(pP),n.isClippingEnabled()&&t.push(TP),n.isClippingPolygonsEnabled()&&t.push(ZP),n.hasSilhouette(e)&&t.push(KX),l(n.splitDirection)&&n.splitDirection!==Xr.NONE&&t.push(jX),Yr.is3DTiles(n.type)&&t.push(dP),i&&t.push(hP))};ml.prototype.update=function(e,t){let n,i,o;for(n=0;n<this._runtimeNodes.length;n++){let r=this._runtimeNodes[n];if(!l(r))continue;for(i=0;i<r.updateStages.length;i++)r.updateStages[i].update(r,this,e);let s=e.mode!==se.SCENE3D&&this._model._projectTo2D;for(t&&!s&&this.updateJointMatrices(),i=0;i<r.runtimePrimitives.length;i++){let a=r.runtimePrimitives[i];for(o=0;o<a.updateStages.length;o++)a.updateStages[o].update(a,this)}}};ml.prototype.updateModelMatrix=function(e,t){ZSe(this,e),t.mode!==se.SCENE3D&&iut(this,t);let n=this._rootNodes;for(let i=0;i<n.length;i++){let o=this._runtimeNodes[n[i]];o._transformDirty=!0}};ml.prototype.updateJointMatrices=function(){let e=this._skinnedNodes,t=e.length;for(let n=0;n<t;n++){let i=e[n];this._runtimeNodes[i].updateJointMatrices()}};function CSe(e,t,n,i,o){if(n&&!t.show)return;let r=t.children.length;for(let c=0;c<r;c++){let d=t.getChild(c);CSe(e,d,n,i,o)}let s=t.runtimePrimitives,a=s.length;for(let c=0;c<a;c++){let d=s[c];i(d,o)}}function hB(e,t,n,i){let o=e._rootNodes,r=o.length;for(let s=0;s<r;s++){let a=o[s],c=e._runtimeNodes[a];CSe(e,c,t,n,i)}}var cut={backFaceCulling:void 0};ml.prototype.updateBackFaceCulling=function(e){let t=cut;t.backFaceCulling=e,hB(this,!1,lut,t)};function lut(e,t){let n=e.drawCommand;n.backFaceCulling=t.backFaceCulling}var dut={shadowMode:void 0};ml.prototype.updateShadows=function(e){let t=dut;t.shadowMode=e,hB(this,!1,uut,t)};function uut(e,t){let n=e.drawCommand;n.shadows=t.shadowMode}var mut={debugShowBoundingVolume:void 0};ml.prototype.updateShowBoundingVolume=function(e){let t=mut;t.debugShowBoundingVolume=e,hB(this,!1,hut,t)};function hut(e,t){let n=e.drawCommand;n.debugShowBoundingVolume=t.debugShowBoundingVolume}var RSe=[],GSe=[],ASe=[],fut={frameState:void 0,hasSilhouette:void 0};ml.prototype.pushDrawCommands=function(e){let t=RSe;t.length=0;let n=GSe;n.length=0;let i=ASe;i.length=0;let o=fut;o.hasSilhouette=this._model.hasSilhouette(e),o.frameState=e,hB(this,!0,put,o),jn(e.commandList,t),jn(e.commandList,n),jn(e.commandList,i)};function put(e,t){let n=t.frameState,i=t.hasSilhouette,o=n.passes,r=RSe,s=GSe,a=ASe,c=e.drawCommand;c.pushCommands(n,n.commandList);let d=e.primitive.material;l(d)&&l(d.planarFill)&&(n.planarFillRequested=!0),i&&!o.pick&&c.pushSilhouetteCommands(n,r),l(c.pushEdgeCommands)&&c.pushEdgeCommands(n,s),l(c.pushPlanarFillIdCommands)&&c.pushPlanarFillIdCommands(n,a)}ml.prototype.setArticulationStage=function(e,t){let n=e.split(" ");if(n.length!==2)return;let i=n[0],o=n[1],r=this._runtimeArticulations[i];l(r)&&r.setArticulationStage(o,t)};ml.prototype.applyArticulations=function(){let e=this._runtimeArticulations;for(let t in e)e.hasOwnProperty(t)&&e[t].apply()};var sN=ml;var wEi=x(T(),1);function fx(){this.pointsLength=0,this.trianglesLength=0,this.geometryByteLength=0,this.texturesByteLength=0,this.propertyTablesByteLength=0,this._bufferIdSet={},this._textureIdByteLengths={},this._batchTextureIdMap=new Mt}Object.defineProperties(fx.prototype,{batchTexturesByteLength:{get:function(){let e=this._batchTextureIdMap.length,t=this._batchTextureIdMap.values,n=0;for(let i=0;i<e;i++)n+=t[i].byteLength;return n}}});fx.prototype.clear=function(){this.pointsLength=0,this.trianglesLength=0,this.geometryByteLength=0,this.texturesByteLength=0,this.propertyTablesByteLength=0,this._bufferIdSet={},this._textureIdByteLengths={},this._batchTextureIdMap.removeAll()};fx.prototype.addBuffer=function(e,t){if(!this._bufferIdSet.hasOwnProperty(e._id)){let n=t?2:1;this.geometryByteLength+=e.sizeInBytes*n}this._bufferIdSet[e._id]=!0};fx.prototype.addTexture=function(e){this._textureIdByteLengths.hasOwnProperty(e._id)||(this.texturesByteLength+=e.sizeInBytes,this._textureIdByteLengths[e._id]=e.sizeInBytes)};fx.prototype.getTextureIds=function(){return Object.keys(this._textureIdByteLengths)};fx.prototype.getTextureByteLengthById=function(e){return this._textureIdByteLengths[e]};fx.prototype.addBatchTexture=function(e){this._batchTextureIdMap.contains(e._id)||this._batchTextureIdMap.set(e._id,e)};var aN=fx;var SLi=x(T(),1);var vSe=x(KU(),1);var qEi=x(T(),1);var ESe={},VS=Uint32Array.BYTES_PER_ELEMENT;ESe.parse=function(e,t){t=t??0;let n=new Uint8Array(e),i=new DataView(e);t+=VS;let o=i.getUint32(t,!0);if(o!==1)throw new ae(`Only Point Cloud tile version 1 is supported. Version ${o} is not.`);t+=VS,t+=VS;let r=i.getUint32(t,!0);if(r===0)throw new ae("Feature table must have a byte length greater than zero");t+=VS;let s=i.getUint32(t,!0);t+=VS;let a=i.getUint32(t,!0);t+=VS;let c=i.getUint32(t,!0);t+=VS;let d=Vr(n,t,r);t+=r;let u=new Uint8Array(e,t,s);t+=s;let m,p;a>0&&(m=Vr(n,t,a),Object.keys(m).length===0&&(m=void 0),t+=a,c>0&&(p=new Uint8Array(e,t,c),p=new Uint8Array(p)));let b=new hf(d,u),f=b.getGlobalProperty("POINTS_LENGTH");if(b.featuresLength=f,!l(f))throw new ae("Feature table global property: POINTS_LENGTH must be defined");let y=b.getGlobalProperty("RTC_CENTER",J.FLOAT,3);l(y)&&(y=h.unpack(y));let _=gut(b,m);if(_.rtcCenter=y,_.pointsLength=f,!_.hasPositions){let S=yut(b);_.positions=S,_.hasPositions=_.hasPositions||l(S)}if(!_.hasPositions)throw new ae("Either POSITION or POSITION_QUANTIZED must be defined.");if(!_.hasNormals){let S=Tut(b);_.normals=S,_.hasNormals=_.hasNormals||l(S)}if(!_.hasColors){let S=xut(b);_.colors=S,_.hasColors=_.hasColors||l(S),_.hasConstantColor=l(_.constantColor),_.isTranslucent=l(S)&&S.isTranslucent}if(!_.hasBatchIds){let S=_ut(b);_.batchIds=S,_.hasBatchIds=_.hasBatchIds||l(S)}if(_.hasBatchIds){let S=b.getGlobalProperty("BATCH_LENGTH");if(!l(S))throw new ae("Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.");_.batchLength=S}return(l(m)||l(p))&&(_.batchTableJson=m,_.batchTableBinary=p),but(_),_};function but(e){let t=e.batchTableJson;if(!l(t))return;let n=e.batchTableBinary;if(l(n))return;let i=Object.keys(e.draco?.batchTableProperties??{}),o=[];for(let r of Object.keys(t)){let a=t[r].byteOffset;l(a)&&(i.includes(r)||o.push(r))}for(let r of o)gt("PntsParser-invalidBinaryBodyReference",`The point cloud data contained a binary property ${r} that could not be resolved - skipping`),delete t[r]}function gut(e,t){let n=e.json,i,o,r,s=l(n.extensions)?n.extensions["3DTILES_draco_point_compression"]:void 0,a=l(t)&&l(t.extensions)?t.extensions["3DTILES_draco_point_compression"]:void 0;l(a)&&(r=a.properties);let c,d,u,m,p;if(l(s)){o=s.properties;let f=s.byteOffset,y=s.byteLength;if(!l(o)||!l(f)||!l(y))throw new ae("Draco properties, byteOffset, and byteLength must be defined");i=e.buffer.slice(f,f+y),c=l(o.POSITION),d=l(o.RGB)||l(o.RGBA),u=l(o.NORMAL),m=l(o.BATCH_ID),p=l(o.RGBA)}let b;return l(i)&&(b={buffer:i,featureTableProperties:o,batchTableProperties:r,properties:It(o,r),dequantizeInShader:!0}),{draco:b,hasPositions:c,hasColors:d,isTranslucent:p,hasNormals:u,hasBatchIds:m}}function yut(e){let t=e.json,n;if(l(t.POSITION))return n=e.getPropertyArray("POSITION",J.FLOAT,3),{name:st.POSITION,semantic:st.POSITION,typedArray:n,isQuantized:!1,componentDatatype:J.FLOAT,type:Dt.VEC3};if(l(t.POSITION_QUANTIZED)){n=e.getPropertyArray("POSITION_QUANTIZED",J.UNSIGNED_SHORT,3);let i=e.getGlobalProperty("QUANTIZED_VOLUME_SCALE",J.FLOAT,3);if(!l(i))throw new ae("Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.");let o=65535,r=e.getGlobalProperty("QUANTIZED_VOLUME_OFFSET",J.FLOAT,3);if(!l(r))throw new ae("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");return{name:st.POSITION,semantic:st.POSITION,typedArray:n,isQuantized:!0,componentDatatype:J.FLOAT,type:Dt.VEC3,quantizedRange:o,quantizedVolumeOffset:h.unpack(r),quantizedVolumeScale:h.unpack(i),quantizedComponentDatatype:J.UNSIGNED_SHORT,quantizedType:Dt.VEC3}}}function xut(e){let t=e.json,n;if(l(t.RGBA))return n=e.getPropertyArray("RGBA",J.UNSIGNED_BYTE,4),{name:st.COLOR,semantic:st.COLOR,setIndex:0,typedArray:n,componentDatatype:J.UNSIGNED_BYTE,type:Dt.VEC4,normalized:!0,isRGB565:!1,isTranslucent:!0};if(l(t.RGB))return n=e.getPropertyArray("RGB",J.UNSIGNED_BYTE,3),{name:"COLOR",semantic:st.COLOR,setIndex:0,typedArray:n,componentDatatype:J.UNSIGNED_BYTE,type:Dt.VEC3,normalized:!0,isRGB565:!1,isTranslucent:!1};if(l(t.RGB565))return n=e.getPropertyArray("RGB565",J.UNSIGNED_SHORT,1),{name:"COLOR",semantic:st.COLOR,setIndex:0,typedArray:n,componentDatatype:J.FLOAT,type:Dt.VEC3,normalized:!1,isRGB565:!0,isTranslucent:!1};if(l(t.CONSTANT_RGBA)){let i=e.getGlobalProperty("CONSTANT_RGBA",J.UNSIGNED_BYTE,4),o=i[3],r=U.fromBytes(i[0],i[1],i[2],o),s=o<255;return{name:st.COLOR,semantic:st.COLOR,setIndex:0,constantColor:r,componentDatatype:J.FLOAT,type:Dt.VEC4,isQuantized:!1,isTranslucent:s}}}function Tut(e){let t=e.json,n;if(l(t.NORMAL))return n=e.getPropertyArray("NORMAL",J.FLOAT,3),{name:st.NORMAL,semantic:st.NORMAL,typedArray:n,octEncoded:!1,octEncodedZXY:!1,componentDatatype:J.FLOAT,type:Dt.VEC3};if(l(t.NORMAL_OCT16P))return n=e.getPropertyArray("NORMAL_OCT16P",J.UNSIGNED_BYTE,2),{name:st.NORMAL,semantic:st.NORMAL,typedArray:n,octEncoded:!0,octEncodedZXY:!1,quantizedRange:(1<<8)-1,quantizedType:Dt.VEC2,quantizedComponentDatatype:J.UNSIGNED_BYTE,componentDatatype:J.FLOAT,type:Dt.VEC3}}function _ut(e){let t=e.json;if(l(t.BATCH_ID)){let n=e.getPropertyArray("BATCH_ID",J.UNSIGNED_SHORT,1);return{name:st.FEATURE_ID,semantic:st.FEATURE_ID,setIndex:0,typedArray:n,componentDatatype:J.fromTypedArray(n),type:Dt.SCALAR}}}var CS=ESe;var Sut=Zn.Components,Zut=Zn.Scene,Vut=Zn.Node,Cut=Zn.Primitive,Rut=Zn.Attribute,LSe=Zn.Quantization,Gut=Zn.FeatureIdAttribute,Aut=Zn.Material,Eut=Zn.MetallicRoughness,qq=class extends qi{constructor(t){super(),t=t??B.EMPTY_OBJECT;let n=t.arrayBuffer,i=t.byteOffset??0;this._arrayBuffer=n,this._byteOffset=i,this._loadAttributesFor2D=t.loadAttributesFor2D??!1,this._parsedContent=void 0,this._decodePromise=void 0,this._decodedAttributes=void 0,this._promise=void 0,this._error=void 0,this._state=Tt.UNLOADED,this._buffers=[],this._components=void 0,this._transform=I.IDENTITY}get cacheKey(){}get components(){return this._components}get transform(){return this._transform}load(){if(l(this._promise))return this._promise;this._parsedContent=CS.parse(this._arrayBuffer,this._byteOffset),this._state=Tt.PROCESSING,this._promise=Promise.resolve(this)}process(t){if(l(this._error)){let n=this._error;throw this._error=void 0,n}if(this._state===Tt.READY)return!0;if(this._state===Tt.PROCESSING){if(l(this._decodePromise))return!1;this._decodePromise=Lut(this,t.context)}return!1}unload(){let t=this._buffers;for(let n=0;n<t.length;n++)t[n].destroy();t.length=0,this._components=void 0,this._parsedContent=void 0,this._arrayBuffer=void 0}};function Lut(e,t){let i=e._parsedContent.draco,o;if(l(i)?o=M0.decodePointCloud(i,t):o=Promise.resolve(),!!l(o))return e._decodePromise=o,o.then(function(r){if(!e.isDestroyed())return l(r)&&Wut(e,i,r),Uut(e,t),e._state=Tt.READY,e}).catch(function(r){e.unload(),e._state=Tt.FAILED;let s="Failed to load Draco pnts";e._error=e.getError(s,r)})}function Wut(e,t,n){e._state=Tt.READY;let i=e._parsedContent,o;if(l(n.POSITION)){if(o={name:"POSITION",semantic:st.POSITION,typedArray:n.POSITION.array,componentDatatype:J.FLOAT,type:Dt.VEC3,isQuantized:!1},l(n.POSITION.data.quantization)){let a=n.POSITION.data.quantization,c=a.range,d=h.fromElements(c,c,c),u=h.unpack(a.minValues),m=(1<<a.quantizationBits)-1;o.isQuantized=!0,o.quantizedRange=m,o.quantizedVolumeOffset=u,o.quantizedVolumeScale=d,o.quantizedComponentDatatype=m<=255?J.UNSIGNED_BYTE:J.UNSIGNED_SHORT,o.quantizedType=Dt.VEC3}i.positions=o}if(l(n.NORMAL)){if(o={name:"NORMAL",semantic:st.NORMAL,typedArray:n.NORMAL.array,componentDatatype:J.FLOAT,type:Dt.VEC3,isQuantized:!1,octEncoded:!1,octEncodedZXY:!1},l(n.NORMAL.data.quantization)){let a=(1<<n.NORMAL.data.quantization.quantizationBits)-1;o.quantizedRange=a,o.octEncoded=!0,o.octEncodedZXY=!0,o.quantizedComponentDatatype=J.UNSIGNED_BYTE,o.quantizedType=Dt.VEC2}i.normals=o}if(l(n.RGBA)?i.colors={name:"COLOR",semantic:st.COLOR,setIndex:0,typedArray:n.RGBA.array,componentDatatype:J.UNSIGNED_BYTE,type:Dt.VEC4,normalized:!0,isTranslucent:!0}:l(n.RGB)&&(i.colors={name:"COLOR",semantic:st.COLOR,setIndex:0,typedArray:n.RGB.array,componentDatatype:J.UNSIGNED_BYTE,type:Dt.VEC3,normalized:!0,isTranslucent:!1}),l(n.BATCH_ID)){let a=n.BATCH_ID.array;i.batchIds={name:"_FEATURE_ID",semantic:st.FEATURE_ID,setIndex:0,typedArray:a,componentDatatype:J.fromTypedArray(a),type:Dt.SCALAR}}let r=i.batchTableJson,s=t.batchTableProperties;for(let a in s)if(s.hasOwnProperty(a)){let c=n[a];l(r)||(r={}),i.hasDracoBatchTable=!0;let d=c.data;r[a]={byteOffset:d.byteOffset,type:vut(d.componentsPerAttribute),componentType:Fut(d.componentDatatype),typedArray:c.array}}i.batchTableJson=r}function vut(e){switch(e){case 1:return"SCALAR";case 2:return"VEC2";case 3:return"VEC3";case 4:return"VEC4"}}function Fut(e){switch(e){case ne.BYTE:return"BYTE";case ne.UNSIGNED_BYTE:return"UNSIGNED_BYTE";case ne.SHORT:return"SHORT";case ne.UNSIGNED_SHORT:return"UNSIGNED_SHORT";case ne.INT:return"INT";case ne.UNSIGNED_INT:return"UNSIGNED_INT";case ne.DOUBLE:return"DOUBLE";case ne.FLOAT:return"FLOAT"}}function cN(e,t,n){let i=t.typedArray,o;if(t.octEncoded&&(o=new LSe,o.octEncoded=t.octEncoded,o.octEncodedZXY=t.octEncodedZXY,o.normalizationRange=t.quantizedRange,o.type=t.quantizedType,o.componentDatatype=t.quantizedComponentDatatype),t.isQuantized){o=new LSe;let a=t.quantizedRange;o.normalizationRange=a,o.quantizedVolumeOffset=h.ZERO;let c=t.quantizedVolumeScale;o.quantizedVolumeDimensions=c,o.quantizedVolumeStepSize=h.divideByScalar(c,a,new h),o.componentDatatype=t.quantizedComponentDatatype,o.type=t.quantizedType}let r=new Rut;if(r.name=t.name,r.semantic=t.semantic,r.setIndex=t.setIndex,r.componentDatatype=t.componentDatatype,r.type=t.type,r.normalized=t.normalized??!1,r.min=t.min,r.max=t.max,r.quantization=o,t.isRGB565&&(i=cn.decodeRGB565(i)),l(t.constantColor)){let a=new Array(4);r.constant=U.pack(t.constantColor,a)}else{let a=et.createVertexBuffer({typedArray:i,context:n,usage:Ie.STATIC_DRAW});a.vertexArrayDestroyable=!1,e._buffers.push(a),r.buffer=a}let s=e._loadAttributesFor2D;return r.semantic===st.POSITION&&s&&(r.typedArray=i),r}var WSe,fB;function Iut(e){if(!l(fB)){WSe=new vSe.default(0),fB=new Array(e);for(let t=0;t<e;++t)fB[t]=WSe.random()}return fB}var Put=new h,Xut=new h,Nut=new h;function Yut(e){let t=e.typedArray,n=20,i=t.length/3,o=Math.min(i,n),r=Iut(n),s=Number.MAX_VALUE,a=-Number.MAX_VALUE,c=h.fromElements(s,s,s,Put),d=h.fromElements(a,a,a,Xut),u,m,p;if(e.isQuantized)c=h.ZERO,d=e.quantizedVolumeScale;else for(u=0;u<o;++u)m=Math.floor(r[u]*i),p=h.unpack(t,m*3,Nut),h.minimumByComponent(c,p,c),h.maximumByComponent(d,p,d);e.min=h.clone(c),e.max=h.clone(d)}var wut={name:st.COLOR,semantic:st.COLOR,setIndex:0,constantColor:U.DARKGRAY,componentDatatype:J.FLOAT,type:Dt.VEC4,isQuantized:!1,isTranslucent:!1};function Mut(e,t,n){let i=[],o,r=t.positions;return l(r)&&(Yut(r),o=cN(e,r,n),o.count=t.pointsLength,i.push(o)),l(t.normals)&&(o=cN(e,t.normals,n),o.count=t.pointsLength,i.push(o)),l(t.colors)?(o=cN(e,t.colors,n),o.count=t.pointsLength,i.push(o)):(o=cN(e,wut,n),o.count=t.pointsLength,i.push(o)),l(t.batchIds)&&(o=cN(e,t.batchIds,n),o.count=t.pointsLength,i.push(o)),i}function kut(e,t){let n=e.batchLength,i=e.pointsLength,o=e.batchTableJson,r=e.batchTableBinary,s=!l(e.batchIds);return l(r)||l(o)||e.hasDracoBatchTable?Ub({count:n??i,batchTable:o,binaryBody:r,parseAsPropertyAttributes:s,customAttributeOutput:t}):new Xa({schema:{},propertyTables:[]})}function Uut(e,t){let n=e._parsedContent,i=new Eut;i.metallicFactor=0,i.roughnessFactor=.9;let o=new Aut;o.metallicRoughness=i;let r=n.colors;l(r)&&r.isTranslucent&&(o.alphaMode=bp.BLEND);let s=!l(n.normals);o.unlit=s;let a=new Cut;if(a.attributes=Mut(e,n,t),a.primitiveType=Fe.POINTS,a.material=o,l(n.batchIds)){let b=new Gut;b.propertyTableId=0,b.setIndex=0,b.positionalLabel="featureId_0",a.featureIds.push(b)}let c=new Vut;c.index=0,c.primitives=[a];let d=new Zut;d.nodes=[c],d.upAxis=Mi.Z,d.forwardAxis=Mi.X;let u=new Sut;u.scene=d,u.nodes=[c];let m=[];u.structuralMetadata=kut(n,m),m.length>0&&Dut(e,a,m,t),l(n.rtcCenter)&&(u.transform=I.multiplyByTranslation(u.transform,n.rtcCenter,u.transform));let p=n.positions;l(p)&&p.isQuantized&&(u.transform=I.multiplyByTranslation(u.transform,p.quantizedVolumeOffset,u.transform)),e._components=u,e._parsedContent=void 0,e._arrayBuffer=void 0}function Dut(e,t,n,i){let o=t.attributes,r=n.length;for(let s=0;s<r;s++){let a=n[s],c=et.createVertexBuffer({typedArray:a.typedArray,context:i,usage:Ie.STATIC_DRAW});c.vertexArrayDestroyable=!1,e._buffers.push(c),a.buffer=c,a.typedArray=void 0,o.push(a)}t.propertyAttributeIds=[0]}var lN=qq;var YLi=x(T(),1);var FSe=new h,ISe=new h,PSe=new h,Out=new h,But=new h,zut=new h,Hut=new fe,Kut=new le;function $q(e,t,n,i){let o=t*n;return i.x=e[o],i.y=e[o+1],i.z=e[o+2],i}function QC(e,t,n,i,o,r,s){if(!e._ready||n.mode===se.MORPHING)return;let a=Number.MAX_VALUE;r=r??ie.default,i=i??1,o=o??0;let c=n.mode!==se.SCENE3D?n.mapProjection:void 0;if(ga.forEachPrimitive(e,{mapProjection:c},function(d,u,m,p){if(l(d.boundingSphere)&&m.length===1){let Z=le.transform(d.boundingSphere,p,Kut),V=di.raySphere(t,Z);if(!l(V))return}if(!l(u.indices))return;let b,f,y=xt.getAttributeBySemantic(u,st.POSITION);l(y)&&(f=Dt.getNumberOfComponents(y.type),b=ga.readAttributeAsTypedArray(y));let _;if(l(u.indices)&&(_=ga.readIndicesAsTypedArray(u.indices)),!l(_)||!l(b))return;let S=_.length;for(let Z=0;Z<S;Z+=3){let V=_[Z],C=_[Z+1],G=_[Z+2];$q(b,V,f,FSe),$q(b,C,f,ISe),$q(b,G,f,PSe);for(let E of m){let v=I.multiplyByPoint(E.transform,FSe,Out),F=I.multiplyByPoint(E.transform,ISe,But),P=I.multiplyByPoint(E.transform,PSe,zut);i!==1&&(ho.getPosition(v,r,i,o,v),ho.getPosition(F,r,i,o,F),ho.getPosition(P,r,i,o,P));let N=di.rayTriangleParametric(t,v,F,P,e.backFaceCulling??!0);l(N)&&N<a&&N>=0&&(a=N)}}}),a!==Number.MAX_VALUE){if(s=fn.getPoint(t,a,s),n.mode!==se.SCENE3D){h.fromElements(s.y,s.z,s.x,s);let d=n.mapProjection,u=d.ellipsoid,m=d.unproject(s,Hut);u.cartographicToCartesian(m,s)}return s}}var HLi=x(T(),1);var MLi=x(T(),1),e$=class{constructor(t){this.show=t.show,this.alpha=t.alpha,this.brightness=t.brightness,this.contrast=t.contrast,this.hue=t.hue,this.saturation=t.saturation,this.gamma=t.gamma,this.colorToAlpha=t.colorToAlpha}},dN=e$;var t$=class{constructor(t){this._model=t,this._modelPrimitiveImageries=void 0,this._imageryConfigurations=[]}update(t){if(!this._hasImagery){this._deleteModelPrimitiveImageries();return}this._allImageryLayersReady&&(l(this._modelPrimitiveImageries)||(this._modelPrimitiveImageries=this._createModelPrimitiveImageries()),this._updateModelPrimitiveImageries(t),this._checkForModifiedImageryConfigurations())}_createModelPrimitiveImageries(){let t=this._model,n=this._collectRuntimeNodesAndPrimitives(),i=[],o=n.length;for(let r=0;r<o;r++){let s=n[r],a=s.runtimeNode,c=s.runtimePrimitive,d=new _S(t,a,c);c.primitive.modelPrimitiveImagery=d,i.push(d)}return i}_collectRuntimeNodesAndPrimitives(){let i=this._model.sceneGraph._runtimeNodes,o=[];for(let r=0;r<i.length;r++){let s=i[r];if(l(s))for(let a=0;a<s.runtimePrimitives.length;a++){let c=s.runtimePrimitives[a];o.push({runtimeNode:s,runtimePrimitive:c})}}return o}_updateModelPrimitiveImageries(t){if(!l(this._modelPrimitiveImageries))throw new ge("The modelPrimitiveImageries have not been created");let n=this._modelPrimitiveImageries,i=n.length;for(let o=0;o<i;o++)n[o].update(t)}_deleteModelPrimitiveImageries(){let t=this._modelPrimitiveImageries;if(!l(t))return;let n=t.length;for(let i=0;i<n;i++)t[i].destroy();delete this._modelPrimitiveImageries,this._model.resetDrawCommands()}get ready(){return this._hasImagery?!(!this._allImageryLayersReady||!this._allModelPrimitiveImageriesReady):!0}get _hasImagery(){let n=this._model.imageryLayers;return l(n)&&n.length>0}get _allImageryLayersReady(){if(!this._hasImagery)return!0;let t=this._model.imageryLayers,n=t.length;for(let i=0;i<n;i++)if(!t.get(i).ready)return!1;return!0}get _allModelPrimitiveImageriesReady(){let t=this._modelPrimitiveImageries;if(!l(t))return!1;let n=t.length;for(let i=0;i<n;i++)if(!t[i].ready)return!1;return!0}_checkForModifiedImageryConfigurations(){this._imageryConfigurationsModified()&&(this._updateImageryConfigurations(),this._model.resetDrawCommands())}_imageryConfigurationsModified(){let n=this._model.imageryLayers,i=this._imageryConfigurations;if(n.length!==i.length)return!0;for(let o=0;o<n.length;o++){let r=n.get(o),s=i[o];if(r.show!==s.show||r.alpha!==s.alpha||r.brightness!==s.brightness||r.contrast!==s.contrast||r.hue!==s.hue||r.saturation!==s.saturation||r.gamma!==s.gamma||r.colorToAlpha!==s.colorToAlpha)return!0}return!1}_updateImageryConfigurations(){let n=this._model.imageryLayers,i=this._imageryConfigurations;i.length=n.length;for(let o=0;o<n.length;o++){let r=n.get(o);i[o]=new dN(r)}}isDestroyed(){return!1}destroy(){if(!this.isDestroyed())return this._deleteModelPrimitiveImageries(),me(this)}},uN=t$;function Fo(e){e=e??B.EMPTY_OBJECT,this._loader=e.loader,this._resource=e.resource,this.type=e.type??Yr.GLTF,this.modelMatrix=I.clone(e.modelMatrix??I.IDENTITY),this._modelMatrix=I.clone(this.modelMatrix),this._scale=e.scale??1,this._minimumPixelSize=e.minimumPixelSize??0,this._maximumScale=e.maximumScale,this._clampedScale=l(this._maximumScale)?Math.min(this._scale,this._maximumScale):this._scale,this._computedScale=this._clampedScale,this._updateModelMatrix=!1,this.referenceMatrix=void 0,this._iblReferenceFrameMatrix=q.clone(q.IDENTITY),this._clippingPlanesMatrix=I.clone(I.IDENTITY),this._resourcesLoaded=!1,this._drawCommandsBuilt=!1,this._ready=!1,this._customShader=e.customShader,this._content=e.content,this._texturesLoaded=!1,this._defaultTexture=void 0,this._activeAnimations=new aP(this),this._clampAnimations=e.clampAnimations??!0,this._userAnimationDirty=!1,this._id=e.id,this._idDirty=!1,this._color=U.clone(e.color),this._colorBlendMode=e.colorBlendMode??ll.HIGHLIGHT,this._colorBlendAmount=e.colorBlendAmount??.5;let t=e.silhouetteColor??U.RED;this._silhouetteColor=U.clone(t),this._silhouetteSize=e.silhouetteSize??0,this._silhouetteDirty=!1,this._silhouetteId=void 0,this._cull=e.cull??!0,this._opaquePass=e.opaquePass??We.OPAQUE,this._allowPicking=e.allowPicking??!0,this._show=e.show??!0,this._style=void 0,this._styleDirty=!1,this._styleCommandsNeeded=void 0;let n=e.featureIdLabel??"featureId_0";typeof n=="number"&&(n=`featureId_${n}`),this._featureIdLabel=n;let i=e.instanceFeatureIdLabel??"instanceFeatureId_0";typeof i=="number"&&(i=`instanceFeatureId_${i}`),this._instanceFeatureIdLabel=i,this._featureTables=[],this._featureTableId=void 0,this._featureTableIdDirty=!0,this._pipelineResources=[],this._modelResources=[],this._pickIds=[],this._boundingSphere=new le,this._initialRadius=void 0,this._heightReference=e.heightReference??rt.NONE,this._heightDirty=this._heightReference!==rt.NONE,this._removeUpdateHeightCallback=void 0,this._enableVerticalExaggeration=e.enableVerticalExaggeration??!0,this._hasVerticalExaggeration=!1,this._clampedModelMatrix=void 0;let o=e.scene;l(o)&&l(o.terrainProviderChanged)&&(this._terrainProviderChangedCallback=o.terrainProviderChanged.addEventListener(()=>{this._heightDirty=!0})),this._scene=o,this._distanceDisplayCondition=e.distanceDisplayCondition;let r=new kp(e.pointCloudShading);this._pointCloudShading=r,this._attenuation=r.attenuation,this._pointCloudBackFaceCulling=r.backFaceCulling;let s=e.clippingPlanes;l(s)&&s.owner===void 0?gs.setOwner(s,this,"_clippingPlanes"):this._clippingPlanes=s,this._clippingPlanesState=0;let a=e.clippingPolygons;l(a)&&a.owner===void 0?lf.setOwner(a,this,"_clippingPolygons"):this._clippingPolygons=a,this._clippingPolygonsState=0,this._modelImagery=new uN(this),this._lightColor=h.clone(e.lightColor),this._imageBasedLighting=l(e.imageBasedLighting)?e.imageBasedLighting:new fS,this._shouldDestroyImageBasedLighting=!l(e.imageBasedLighting),this._environmentMapManager=void 0;let c=new Xb(e.environmentMapOptions);Xb.setOwner(c,this,"_environmentMapManager"),this._backFaceCulling=e.backFaceCulling??!0,this._backFaceCullingDirty=!1,this._shadows=e.shadows??Fn.ENABLED,this._shadowsDirty=!1,this._debugShowBoundingVolumeDirty=!1,this._debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this._enableDebugWireframe=e.enableDebugWireframe??!1,this._enableShowOutline=e.enableShowOutline??!0,this._debugWireframe=e.debugWireframe??!1,this._edgeDisplayMode=e.edgeDisplayMode??Um.SURFACES_ONLY,this._debugWireframe===!0&&this._enableDebugWireframe===!1&&this.type===Yr.GLTF&>("model-debug-wireframe-ignored","enableDebugWireframe must be set to true in Model.fromGltf, otherwise debugWireframe will be ignored.");let d=e.credit;typeof d=="string"&&(d=new At(d)),this._credits=[],this._credit=d,this._resourceCredits=[],this._gltfCredits=[],this._showCreditsOnScreen=e.showCreditsOnScreen??!1,this._showCreditsOnScreenDirty=!0,this._splitDirection=e.splitDirection??Xr.NONE,this._enableShowOutline=e.enableShowOutline??!0,this.showOutline=e.showOutline??!0,this.outlineColor=e.outlineColor??U.BLACK,this._classificationType=e.classificationType,this._statistics=new aN,this._sceneMode=void 0,this._projectTo2D=e.projectTo2D??!1,this._enablePick=e.enablePick??!1,this._fogRenderable=void 0,this._skipLevelOfDetail=!1,this._ignoreCommands=e.ignoreCommands??!1,this._errorEvent=new Se,this._readyEvent=new Se,this._texturesReadyEvent=new Se,this._sceneGraph=void 0,this._nodesByName={},this.pickObject=e.pickObject}function n$(e,t){if(e._errorEvent.numberOfListeners>0){e._errorEvent.raiseEvent(t);return}console.log(t)}function Jut(e,t){let n=e._featureTables,i=t.propertyTables,o=i.length;for(let r=0;r<o;r++){let s=i[r],a=new lP({model:e,propertyTable:s});n.push(a)}return n}function jut(e,t){let n=t._featureIdLabel,i=t._instanceFeatureIdLabel,o,r,s,a;for(o=0;o<e.nodes.length;o++)if(a=e.nodes[o],l(a.instances)&&(s=xt.getFeatureIdsByLabel(a.instances.featureIds,i),l(s)&&l(s.propertyTableId)))return s.propertyTableId;for(o=0;o<e.nodes.length;o++)for(a=e.nodes[o],r=0;r<a.primitives.length;r++){let c=a.primitives[r],d=xt.getFeatureIdsByLabel(c.featureIds,n);if(l(d))return d.propertyTableId}if(t._featureTables.length===1)return 0}function r$(e,t){if(!l(e)&&!l(t))return!1;if(l(e)!==l(t))return!0;let n=e.alpha,i=t.alpha;return Math.floor(n)!==Math.floor(i)||Math.ceil(n)!==Math.ceil(i)}Object.defineProperties(Fo.prototype,{ready:{get:function(){return this._ready}},errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},incrementallyLoadTextures:{get:function(){return this._loader.incrementallyLoadTextures??!1}},texturesReadyEvent:{get:function(){return this._texturesReadyEvent}},loader:{get:function(){return this._loader}},statistics:{get:function(){return this._statistics}},activeAnimations:{get:function(){return this._activeAnimations}},clampAnimations:{get:function(){return this._clampAnimations},set:function(e){this._clampAnimations=e}},cull:{get:function(){return this._cull}},opaquePass:{get:function(){return this._opaquePass}},pointCloudShading:{get:function(){return this._pointCloudShading},set:function(e){e!==this._pointCloudShading&&this.resetDrawCommands(),this._pointCloudShading=e}},customShader:{get:function(){return this._customShader},set:function(e){e!==this._customShader&&this.resetDrawCommands(),this._customShader=e}},sceneGraph:{get:function(){return this._sceneGraph}},content:{get:function(){return this._content}},heightReference:{get:function(){return this._heightReference},set:function(e){e!==this._heightReference&&(this._heightDirty=!0),this._heightReference=e}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=Ot.clone(e,this._distanceDisplayCondition)}},structuralMetadata:{get:function(){return this._sceneGraph.components.structuralMetadata}},featureTableId:{get:function(){return this._featureTableId},set:function(e){this._featureTableId=e}},featureTables:{get:function(){return this._featureTables},set:function(e){this._featureTables=e}},id:{get:function(){return this._id},set:function(e){e!==this._id&&(this._idDirty=!0),this._id=e}},allowPicking:{get:function(){return this._allowPicking}},style:{get:function(){return this._style},set:function(e){this._style=e,this._styleDirty=!0}},color:{get:function(){return this._color},set:function(e){r$(e,this._color)&&this.resetDrawCommands(),this._color=U.clone(e,this._color)}},colorBlendMode:{get:function(){return this._colorBlendMode},set:function(e){this._colorBlendMode=e}},colorBlendAmount:{get:function(){return this._colorBlendAmount},set:function(e){this._colorBlendAmount=e}},silhouetteColor:{get:function(){return this._silhouetteColor},set:function(e){if(!U.equals(e,this._silhouetteColor)){let t=r$(e,this._silhouetteColor);this._silhouetteDirty=this._silhouetteDirty||t}this._silhouetteColor=U.clone(e,this._silhouetteColor)}},silhouetteSize:{get:function(){return this._silhouetteSize},set:function(e){if(e!==this._silhouetteSize){let t=this._silhouetteSize,n=e>0&&t===0||e===0&&t>0;this._silhouetteDirty=this._silhouetteDirty||n,this._backFaceCullingDirty=this._backFaceCullingDirty||n}this._silhouetteSize=e}},boundingSphere:{get:function(){let e=l(this._clampedModelMatrix)?this._clampedModelMatrix:this.modelMatrix;return YSe(this,e),this._boundingSphere}},debugShowBoundingVolume:{get:function(){return this._debugShowBoundingVolume},set:function(e){this._debugShowBoundingVolume!==e&&(this._debugShowBoundingVolumeDirty=!0),this._debugShowBoundingVolume=e}},debugWireframe:{get:function(){return this._debugWireframe},set:function(e){this._debugWireframe!==e&&this.resetDrawCommands(),this._debugWireframe=e,this._debugWireframe===!0&&this._enableDebugWireframe===!1&&this.type===Yr.GLTF&>("model-debug-wireframe-ignored","enableDebugWireframe must be set to true in Model.fromGltfAsync, otherwise debugWireframe will be ignored.")}},edgeDisplayMode:{get:function(){return this._edgeDisplayMode},set:function(e){this._edgeDisplayMode=e}},show:{get:function(){return this._show},set:function(e){this._show=e}},featureIdLabel:{get:function(){return this._featureIdLabel},set:function(e){typeof e=="number"&&(e=`featureId_${e}`),e!==this._featureIdLabel&&(this._featureTableIdDirty=!0),this._featureIdLabel=e}},instanceFeatureIdLabel:{get:function(){return this._instanceFeatureIdLabel},set:function(e){typeof e=="number"&&(e=`instanceFeatureId_${e}`),e!==this._instanceFeatureIdLabel&&(this._featureTableIdDirty=!0),this._instanceFeatureIdLabel=e}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){e!==this._clippingPlanes&&(gs.setOwner(e,this,"_clippingPlanes"),this.resetDrawCommands())}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){e!==this._clippingPolygons&&(lf.setOwner(e,this,"_clippingPolygons"),this.resetDrawCommands())}},enableVerticalExaggeration:{get:function(){return this._enableVerticalExaggeration},set:function(e){e!==this._enableVerticalExaggeration&&this.resetDrawCommands(),this._enableVerticalExaggeration=e}},hasVerticalExaggeration:{get:function(){return this._hasVerticalExaggeration}},imageryLayers:{get:function(){if(l(this._content)){let e=this._content.tileset;if(l(e))return e.imageryLayers}}},lightColor:{get:function(){return this._lightColor},set:function(e){l(e)!==l(this._lightColor)&&this.resetDrawCommands(),this._lightColor=h.clone(e,this._lightColor)}},imageBasedLighting:{get:function(){return this._imageBasedLighting},set:function(e){e!==this._imageBasedLighting&&(this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=e,this._shouldDestroyImageBasedLighting=!1,this.resetDrawCommands())}},environmentMapManager:{get:function(){return this._environmentMapManager},set:function(e){e!==this.environmentMapManager&&(Xb.setOwner(e,this,"_environmentMapManager"),this.resetDrawCommands())}},backFaceCulling:{get:function(){return this._backFaceCulling},set:function(e){e!==this._backFaceCulling&&(this._backFaceCullingDirty=!0),this._backFaceCulling=e}},scale:{get:function(){return this._scale},set:function(e){e!==this._scale&&(this._updateModelMatrix=!0),this._scale=e}},computedScale:{get:function(){return this._computedScale}},minimumPixelSize:{get:function(){return this._minimumPixelSize},set:function(e){e!==this._minimumPixelSize&&(this._updateModelMatrix=!0),this._minimumPixelSize=e}},maximumScale:{get:function(){return this._maximumScale},set:function(e){e!==this._maximumScale&&(this._updateModelMatrix=!0),this._maximumScale=e}},shadows:{get:function(){return this._shadows},set:function(e){e!==this._shadows&&(this._shadowsDirty=!0),this._shadows=e}},credit:{get:function(){return this._credit}},showCreditsOnScreen:{get:function(){return this._showCreditsOnScreen},set:function(e){this._showCreditsOnScreen!==e&&(this._showCreditsOnScreenDirty=!0),this._showCreditsOnScreen=e}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&this.resetDrawCommands(),this._splitDirection=e}},classificationType:{get:function(){return this._classificationType}},pickIds:{get:function(){return this._pickIds}},styleCommandsNeeded:{get:function(){return this._styleCommandsNeeded}}});Fo.prototype.getNode=function(e){return this._nodesByName[e]};Fo.prototype.setArticulationStage=function(e,t){this._sceneGraph.setArticulationStage(e,t)};Fo.prototype.applyArticulations=function(){this._sceneGraph.applyArticulations()};Fo.prototype.getExtension=function(e){return this._loader.components.extensions[e]};Fo.prototype.makeStyleDirty=function(){this._styleDirty=!0};Fo.prototype.resetDrawCommands=function(){this._drawCommandsBuilt=!1};var Qut=new I,qut=new q,$ut=new I;Fo.prototype.update=function(e){let t=!1;try{t=emt(this,e)}catch(i){if(!this._loader.incrementallyLoadTextures&&i.name==="TextureError")n$(this,i);else{let o=xt.getError("model",this._resource,i);n$(this,o)}}if(tmt(this,e),nmt(this,e),imt(this,e),!this._resourcesLoaded&&t){this._resourcesLoaded=!0;let i=this._loader.components;if(!l(i)){if(this._loader.isUnloaded())return;let s=xt.getError("model",this._resource,new ae("Failed to load model."));n$(s),this._rejectLoad=this._rejectLoad&&this._rejectLoad(s)}let o=i.structuralMetadata;l(o)&&o.propertyTableCount>0&&Jut(this,o);let r=new sN({model:this,modelComponents:i});this._sceneGraph=r,this._gltfCredits=r.components.asset.credits}if(!this._resourcesLoaded||e.mode===se.MORPHING)return;let n=this._modelImagery;if(n.update(e),!(!n.ready&&!(this._content?.tileset?._asynchronouslyLoadImagery??!1))){if(omt(this),rmt(this),smt(this,e),amt(this),cmt(this,e),lmt(this,e),dmt(this,e),umt(this,e),mmt(this,e),hmt(this,e),fmt(this,e),this._defaultTexture=e.context.defaultTexture,pmt(this,e),bmt(this,e),gmt(this),ymt(this,e),Smt(this,e),!this._ready){e.afterRender.push(()=>{this._ready=!0,this._readyEvent.raiseEvent(this)});return}this._loader.incrementallyLoadTextures&&!this._texturesLoaded&&this._loader.texturesLoaded&&(this.resetDrawCommands(),this._texturesLoaded=!0,this._texturesReadyEvent.raiseEvent(this)),Tmt(this),Zmt(this,e),Vmt(this),Cmt(this,e)}};function emt(e,t){return!e._resourcesLoaded||e._loader.incrementallyLoadTextures&&!e._texturesLoaded?(t.afterRender.push(()=>!0),e._loader.process(t)):!0}function tmt(e,t){l(e._customShader)&&e._customShader.update(t)}function nmt(e,t){let n=e._environmentMapManager,i=t.passes.pick||t.passes.pickVoxel;e._ready&&n.owner===e&&!i&&(n.position=e._boundingSphere.center,n.shouldUpdate=!l(e._imageBasedLighting.sphericalHarmonicCoefficients)||!l(e._imageBasedLighting.specularEnvironmentMaps),n.update(t),n.shouldRegenerateShaders&&e.resetDrawCommands())}function imt(e,t){e._imageBasedLighting.update(t),e._imageBasedLighting.shouldRegenerateShaders&&e.resetDrawCommands()}function omt(e){if(!e._featureTableIdDirty)return;e._featureTableIdDirty=!1;let t=e._sceneGraph.components,n=t.structuralMetadata;l(n)&&n.propertyTableCount>0&&(e.featureTableId=jut(t,e),e._styleDirty=!0,e.resetDrawCommands())}function rmt(e){e._styleDirty&&(e.applyStyle(e._style),e._styleDirty=!1)}function smt(e,t){let n=e._featureTables,i=n.length,o=!1;for(let r=0;r<i;r++)n[r].update(t),n[r].styleCommandsNeededDirty&&(o=!0);o&&NSe(e)}function NSe(e){let t=e.featureTables[e.featureTableId];e._styleCommandsNeeded=bf.getStyleCommandsNeeded(t.featuresLength,t.batchTexture.translucentFeaturesLength)}function amt(e){let t=e.pointCloudShading;t.attenuation!==e._attenuation&&(e.resetDrawCommands(),e._attenuation=t.attenuation),t.backFaceCulling!==e._pointCloudBackFaceCulling&&(e.resetDrawCommands(),e._pointCloudBackFaceCulling=t.backFaceCulling)}function cmt(e,t){e._silhouetteDirty&&(wSe(t)&&e.resetDrawCommands(),e._silhouetteDirty=!1)}function lmt(e,t){let n=e.hasSkipLevelOfDetail(t);n!==e._skipLevelOfDetail&&(e.resetDrawCommands(),e._skipLevelOfDetail=n)}function dmt(e,t){let n=0;e.isClippingEnabled()&&(e._clippingPlanes.owner===e&&e._clippingPlanes.update(t),n=e._clippingPlanes.clippingPlanesState),n!==e._clippingPlanesState&&(e.resetDrawCommands(),e._clippingPlanesState=n)}function umt(e,t){let n=0;e.isClippingPolygonsEnabled()&&(e._clippingPolygons.owner===e&&(e._clippingPolygons.update(t),e._clippingPolygons.queueCommands(t)),n=e._clippingPolygons.clippingPolygonsState),n!==e._clippingPolygonsState&&(e.resetDrawCommands(),e._clippingPolygonsState=n)}function mmt(e,t){t.mode!==e._sceneMode&&(e._projectTo2D?e.resetDrawCommands():e._updateModelMatrix=!0,e._sceneMode=t.mode)}function hmt(e,t){let n=t.fog.enabled&&t.fog.renderable;n!==e._fogRenderable&&(e.resetDrawCommands(),e._fogRenderable=n)}function fmt(e,t){if(e.enableVerticalExaggeration){let n=t.verticalExaggeration!==1;e.hasVerticalExaggeration!==n&&(e.resetDrawCommands(),e._hasVerticalExaggeration=n)}else e.hasVerticalExaggeration&&(e.resetDrawCommands(),e._hasVerticalExaggeration=!1)}function pmt(e,t){e._drawCommandsBuilt||(e.destroyPipelineResources(),e._sceneGraph.buildDrawCommands(t),e._drawCommandsBuilt=!0)}function bmt(e,t){I.equals(e.modelMatrix,e._modelMatrix)||(e._updateModelMatrix=!0,e._modelMatrix=I.clone(e.modelMatrix,e._modelMatrix))}var px=new h,i$=new fe;function gmt(e){if(!e._updateModelMatrix&&!e._heightDirty&&e._minimumPixelSize===0)return;l(e._removeUpdateHeightCallback)&&(e._removeUpdateHeightCallback(),e._removeUpdateHeightCallback=void 0);let t=e._scene;if(!l(t)||e.heightReference===rt.NONE){e._clampedModelMatrix=void 0;return}let n=t.ellipsoid??ie.default,i=e.modelMatrix;px.x=i[12],px.y=i[13],px.z=i[14];let o=n.cartesianToCartographic(px);l(e._clampedModelMatrix)||(e._clampedModelMatrix=I.clone(i,new I)),e._removeUpdateHeightCallback=t.updateHeight(o,XSe(e,n,o),e.heightReference);let r=t.getHeight(o,e.heightReference);if(l(r)){let s=XSe(e,n,o);fe.clone(o,i$),i$.height=r,s(i$)}e._heightDirty=!1,e._updateModelMatrix=!0}function ymt(e,t){if(!e._updateModelMatrix&&e._minimumPixelSize===0)return;let n=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix;YSe(e,n),xmt(e,n,t)}function YSe(e,t){e._clampedScale=l(e._maximumScale)?Math.min(e._scale,e._maximumScale):e._scale,e._boundingSphere.center=h.multiplyByScalar(e._sceneGraph.boundingSphere.center,e._clampedScale,e._boundingSphere.center),e._boundingSphere.radius=e._initialRadius*e._clampedScale,e._boundingSphere=le.transform(e._boundingSphere,t,e._boundingSphere)}function xmt(e,t,n){let i=e.scale;if(e.minimumPixelSize!==0&&!e._projectTo2D){let o=n.context,r=Math.max(o.drawingBufferWidth,o.drawingBufferHeight);I.getTranslation(t,px),e._sceneMode!==se.SCENE3D&&co.computeActualEllipsoidPosition(n,px,px);let s=e._boundingSphere.radius,a=Rmt(px,s,n),c=1/a;Math.min(c*(2*s),r)<e.minimumPixelSize&&(i=e.minimumPixelSize*a/(2*e._initialRadius))}e._computedScale=l(e.maximumScale)?Math.min(e.maximumScale,i):i}function Tmt(e){if(!e._idDirty)return;e._idDirty=!1;let t=e._id,n=e._pickIds,i=n.length;for(let o=0;o<i;++o)n[o].object.id=t}var _mt=new q(1,0,0,0,0,1,0,-1,0);function Smt(e,t){let n=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix,i=e.referenceMatrix??n,o=t.context,r=qut,s=Qut;if(s=I.multiply(o.uniformState.view3D,i,s),r=I.getRotation(s,r),r=q.transpose(r,r),e._iblReferenceFrameMatrix=q.multiply(_mt,r,e._iblReferenceFrameMatrix),e.isClippingEnabled()){let a=I.multiply(i,e._clippingPlanes.modelMatrix,$ut);e._clippingPlanesMatrix=I.inverseTranspose(a,e._clippingPlanesMatrix)}}function Zmt(e,t){let n=e._sceneGraph;if(e._updateModelMatrix||e._minimumPixelSize!==0){let o=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix;n.updateModelMatrix(o,t),e._updateModelMatrix=!1}e._backFaceCullingDirty&&(n.updateBackFaceCulling(e._backFaceCulling),e._backFaceCullingDirty=!1),e._shadowsDirty&&(n.updateShadows(e._shadows),e._shadowsDirty=!1),e._debugShowBoundingVolumeDirty&&(n.updateShowBoundingVolume(e._debugShowBoundingVolume),e._debugShowBoundingVolumeDirty=!1);let i=!1;l(e.classificationType)||(i=e._userAnimationDirty||e._activeAnimations.update(t)),n.update(t,i),e._userAnimationDirty=!1}function Vmt(e){if(!e._showCreditsOnScreenDirty)return;e._showCreditsOnScreenDirty=!1,e._credits.length=0;let t=e._showCreditsOnScreen;if(l(e._credit)){let s=At.clone(e._credit);s.showOnScreen=s.showOnScreen||t,e._credits.push(s)}let n=e._resourceCredits,i=n.length;for(let s=0;s<i;s++){let a=At.clone(n[s]);a.showOnScreen=a.showOnScreen||t,e._credits.push(a)}let o=e._gltfCredits,r=o.length;for(let s=0;s<r;s++){let a=At.clone(o[s]);a.showOnScreen=a.showOnScreen||t,e._credits.push(a)}}function Cmt(e,t){let n=Amt(e,t),i=e.isInvisible(),o=e.hasSilhouette(t),r=e._show&&e._computedScale!==0&&n&&(!i||o),s=t.passes,a=s.render||s.pick&&e.allowPicking;r&&!e._ignoreCommands&&a&&(Emt(e,t),e._sceneGraph.pushDrawCommands(t))}var o$=new le;function Rmt(e,t,n){return o$.center=e,o$.radius=t,n.camera.getPixelSize(o$,n.context.drawingBufferWidth,n.context.drawingBufferHeight)}var pB=new h;function XSe(e,t,n){return function(i){J1(e.heightReference)&&(i.height+=n.height),t.cartographicToCartesian(i,pB);let o=e._clampedModelMatrix;I.clone(e.modelMatrix,o),o[12]=pB.x,o[13]=pB.y,o[14]=pB.z,e._heightDirty=!0}}var Gmt=new h;function Amt(e,t){let n=e.distanceDisplayCondition;if(!l(n))return!0;let i=n.near*n.near,o=n.far*n.far,r;if(t.mode===se.SCENE2D){let a=(t.camera.frustum.right-t.camera.frustum.left)*.5;r=a*a}else{let s=I.getTranslation(e.modelMatrix,Gmt);co.computeActualEllipsoidPosition(t,s,s),r=h.distanceSquared(s,t.camera.positionWC)}return r>=i&&r<=o}function Emt(e,t){let n=t.creditDisplay,i=e._credits,o=i.length;for(let r=0;r<o;r++)n.addCreditToNextFrame(i[r])}Fo.prototype.isTranslucent=function(){let e=this.color;return l(e)&&e.alpha>0&&e.alpha<1};Fo.prototype.isInvisible=function(){let e=this.color;return l(e)&&e.alpha===0};function wSe(e){return e.context.stencilBuffer}Fo.prototype.hasSilhouette=function(e){return wSe(e)&&this._silhouetteSize>0&&this._silhouetteColor.alpha>0&&!l(this._classificationType)};Fo.prototype.hasSkipLevelOfDetail=function(e){if(!Yr.is3DTiles(this.type))return!1;let t=e.context.stencilBuffer,n=this._content.tileset;return t&&n.isSkippingLevelOfDetail};Fo.prototype.isClippingEnabled=function(){let e=this._clippingPlanes;return l(e)&&e.enabled&&e.length!==0};Fo.prototype.pick=function(e,t,n,i,o){return QC(this,e,t,n,i,o)};Fo.prototype.isClippingPolygonsEnabled=function(){let e=this._clippingPolygons;return l(e)&&e.enabled&&e.length!==0};Fo.prototype.isDestroyed=function(){return!1};Fo.prototype.destroy=function(){let e=this._loader;l(e)&&e.destroy();let t=this._featureTables;if(l(t)){let r=t.length;for(let s=0;s<r;s++)t[s].destroy()}this.destroyPipelineResources(),this.destroyModelResources(),l(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),l(this._terrainProviderChangedCallback)&&(this._terrainProviderChangedCallback(),this._terrainProviderChangedCallback=void 0);let n=this._clippingPlanes;l(n)&&!n.isDestroyed()&&n.owner===this&&n.destroy(),this._clippingPlanes=void 0;let i=this._clippingPolygons;l(i)&&!i.isDestroyed()&&i.owner===this&&i.destroy(),this._clippingPolygons=void 0,this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=void 0;let o=this._environmentMapManager;!o.isDestroyed()&&o.owner===this&&o.destroy(),this._environmentMapManager=void 0,me(this)};Fo.prototype.destroyPipelineResources=function(){let e=this._pipelineResources;for(let t=0;t<e.length;t++)e[t].destroy();this._pipelineResources.length=0,this._pickIds.length=0};Fo.prototype.destroyModelResources=function(){let e=this._modelResources;for(let t=0;t<e.length;t++)e[t].destroy();this._modelResources.length=0};Fo.fromGltfAsync=async function(e){e=e??B.EMPTY_OBJECT;let t=e.url??e.gltf,n={releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,enablePick:e.enablePick,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline,loadForClassification:l(e.classificationType)},i=e.basePath??"",o=ve.createIfNeeded(i);l(t.asset)?(n.gltfJson=t,n.baseResource=o,n.gltfResource=o):t instanceof Uint8Array?(n.typedArray=t,n.baseResource=o,n.gltfResource=o):n.gltfResource=ve.createIfNeeded(t);let r=new Ru(n),a=l(e.content)?Yr.TILE_GLTF:Yr.GLTF,c=n.gltfResource,d=mN(r,a,e);d.resource=c,d.environmentMapOptions=e.environmentMapOptions;try{await r.load()}catch(b){throw r.destroy(),xt.getError("model",c,b)}let u=e.gltfCallback;l(u)&&u(r.gltfJson);let m=new Fo(d),p=m._resource.credits;if(l(p)){let b=p.length;for(let f=0;f<b;f++)m._resourceCredits.push(At.clone(p[f]))}return m};Fo.fromB3dm=async function(e){let t={b3dmResource:e.resource,arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,enablePick:e.enablePick,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline,loadForClassification:l(e.classificationType)},n=new tP(t);try{await n.load();let i=mN(n,Yr.TILE_B3DM,e);return new Fo(i)}catch(i){throw n.destroy(),i}};Fo.fromPnts=async function(e){let t={arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,loadAttributesFor2D:e.projectTo2D},n=new lN(t);try{await n.load();let i=mN(n,Yr.TILE_PNTS,e);return new Fo(i)}catch(i){throw n.destroy(),i}};Fo.fromI3dm=async function(e){let t={i3dmResource:e.resource,arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,enablePick:e.enablePick,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline},n=new oP(t);try{await n.load();let i=mN(n,Yr.TILE_I3DM,e);return new Fo(i)}catch(i){throw n.destroy(),i}};Fo.fromGeoJson=async function(e){let t={geoJson:e.geoJson},n=new nP(t),i=mN(n,Yr.TILE_GEOJSON,e);return new Fo(i)};var Lmt=new U;Fo.prototype.applyColorAndShow=function(e){let t=U.clone(this._color,Lmt),n=l(e)&&l(e.color),i=l(e)&&l(e.show);this._color=n?e.color.evaluateColor(void 0,this._color):U.clone(U.WHITE,this._color),this._show=i?e.show.evaluate(void 0):!0,r$(t,this._color)&&this.resetDrawCommands()};Fo.prototype.applyStyle=function(e){let t=this.type===Yr.TILE_PNTS,n=l(this.featureTableId)&&this.featureTables[this.featureTableId].featuresLength>0,i=l(this.structuralMetadata)?this.structuralMetadata.propertyAttributes:void 0,o=l(i)&&l(i[0]);if(t&&(!n||o)){this.resetDrawCommands();return}n?(this.featureTables[this.featureTableId].applyStyle(e),NSe(this,e)):(this.applyColorAndShow(e),this._styleCommandsNeeded=void 0)};function mN(e,t,n){return{loader:e,type:t,resource:n.resource,show:n.show,modelMatrix:n.modelMatrix,scale:n.scale,enableVerticalExaggeration:n.enableVerticalExaggeration,minimumPixelSize:n.minimumPixelSize,maximumScale:n.maximumScale,id:n.id,allowPicking:n.allowPicking,clampAnimations:n.clampAnimations,shadows:n.shadows,debugShowBoundingVolume:n.debugShowBoundingVolume,enableDebugWireframe:n.enableDebugWireframe,debugWireframe:n.debugWireframe,cull:n.cull,opaquePass:n.opaquePass,customShader:n.customShader,content:n.content,heightReference:n.heightReference,scene:n.scene,distanceDisplayCondition:n.distanceDisplayCondition,color:n.color,colorBlendAmount:n.colorBlendAmount,colorBlendMode:n.colorBlendMode,edgeDisplayMode:n.edgeDisplayMode,silhouetteColor:n.silhouetteColor,silhouetteSize:n.silhouetteSize,enableShowOutline:n.enableShowOutline,showOutline:n.showOutline,outlineColor:n.outlineColor,clippingPlanes:n.clippingPlanes,clippingPolygons:n.clippingPolygons,lightColor:n.lightColor,imageBasedLighting:n.imageBasedLighting,backFaceCulling:n.backFaceCulling,credit:n.credit,showCreditsOnScreen:n.showCreditsOnScreen,splitDirection:n.splitDirection,projectTo2D:n.projectTo2D,enablePick:n.enablePick,featureIdLabel:n.featureIdLabel,instanceFeatureIdLabel:n.instanceFeatureIdLabel,pointCloudShading:n.pointCloudShading,classificationType:n.classificationType,pickObject:n.pickObject}}var vu=Fo;var Wmt=1,vmt=!0,Fmt=0,Imt=!0,Pmt=!0,Xmt=Fn.ENABLED,Nmt=rt.NONE,Ymt=U.RED,wmt=0,Mmt=U.WHITE,kmt=ll.HIGHLIGHT,Umt=.5,Dmt=new M(1,1),MSe={maximumPositionEpsilon:Number.POSITIVE_INFINITY},Omt=new I,Bmt=new I,kSe=new U,USe=new Array(4),zmt=new h;function bx(e,t){t.collectionChanged.addEventListener(bx.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._modelHash={},this._entitiesToVisualize=new Mt,this._onCollectionChanged(t,t.values,[],[])}async function Hmt(e,t,n,i,o){let r=e._primitives,s=e._modelHash;try{let a=await vu.fromGltfAsync({url:n,incrementallyLoadTextures:i,scene:e._scene,environmentMapOptions:o});if(e.isDestroyed()||!l(s[t.id]))return;a.id=t,r.add(a),s[t.id].modelPrimitive=a,a.errorEvent.addEventListener(c=>{l(s[t.id])&&(console.log(c),c.name!=="TextureError"&&a.incrementallyLoadTextures&&(s[t.id].loadFailed=!0))})}catch(a){if(e.isDestroyed()||!l(s[t.id]))return;console.log(a),s[t.id].loadFailed=!0}}bx.prototype.update=function(e){let t=this._entitiesToVisualize.values,n=this._modelHash,i=this._primitives;for(let o=0,r=t.length;o<r;o++){let s=t[o],a=s._model,c,d=n[s.id],u=s.isShowing&&s.isAvailable(e)&&j.getValueOrDefault(a._show,e,!0),m;if(u&&(m=s.computeModelMatrix(e,Omt),c=ve.createIfNeeded(j.getValueOrUndefined(a._uri,e)),u=l(m)&&l(c)),!u){l(d)&&d.modelPrimitive&&(d.modelPrimitive.show=!1);continue}if(!l(d)||c.url!==d.url){l(d?.modelPrimitive)&&(i.removeAndDestroy(d.modelPrimitive),delete n[s.id]),d={modelPrimitive:void 0,url:c.url,animationsRunning:!1,nodeTransformationsScratch:{},articulationsScratch:{},loadFailed:!1,modelUpdated:!1,environmentMapOptionsScratch:{...MSe}},n[s.id]=d;let f=j.getValueOrDefault(a._incrementallyLoadTextures,e,Imt),y=j.getValueOrDefault(a._environmentMapOptions,e,MSe,d.environmentMapOptionsScratch);Hmt(this,s,c,f,y)}let p=d.modelPrimitive;if(!l(p))continue;p.show=!0,p.scale=j.getValueOrDefault(a._scale,e,Wmt),p.enableVerticalExaggeration=j.getValueOrDefault(a._enableVerticalExaggeration,e,vmt),p.minimumPixelSize=j.getValueOrDefault(a._minimumPixelSize,e,Fmt),p.maximumScale=j.getValueOrUndefined(a._maximumScale,e),p.modelMatrix=I.clone(m,p.modelMatrix),p.shadows=j.getValueOrDefault(a._shadows,e,Xmt),p.heightReference=j.getValueOrDefault(a._heightReference,e,Nmt),p.distanceDisplayCondition=j.getValueOrUndefined(a._distanceDisplayCondition,e),p.silhouetteColor=j.getValueOrDefault(a._silhouetteColor,e,Ymt,kSe),p.silhouetteSize=j.getValueOrDefault(a._silhouetteSize,e,wmt),p.color=j.getValueOrDefault(a._color,e,Mmt,kSe),p.colorBlendMode=j.getValueOrDefault(a._colorBlendMode,e,kmt),p.colorBlendAmount=j.getValueOrDefault(a._colorBlendAmount,e,Umt),p.clippingPlanes=j.getValueOrUndefined(a._clippingPlanes,e),p.clampAnimations=j.getValueOrDefault(a._clampAnimations,e,Pmt),p.imageBasedLighting.imageBasedLightingFactor=j.getValueOrDefault(a._imageBasedLightingFactor,e,Dmt);let b=j.getValueOrUndefined(a._lightColor,e);if(l(b)&&(U.pack(b,USe,0),b=h.unpack(USe,0,zmt)),p.lightColor=b,p.customShader=j.getValueOrUndefined(a._customShader,e),n[s.id].modelUpdated=!0,p.ready){let f=j.getValueOrDefault(a._runAnimations,e,!0);d.animationsRunning!==f&&(f?p.activeAnimations.addAll({loop:Pd.REPEAT}):p.activeAnimations.removeAll(),d.animationsRunning=f);let y=j.getValueOrUndefined(a._nodeTransformations,e,d.nodeTransformationsScratch);if(l(y)){let Z=Object.keys(y);for(let V=0,C=Z.length;V<C;++V){let G=Z[V],E=y[G];if(!l(E))continue;let v=p.getNode(G);if(!l(v))continue;let F=I.fromTranslationRotationScale(E,Bmt);v.matrix=I.multiply(v.originalMatrix,F,F)}}let _=!1,S=j.getValueOrUndefined(a._articulations,e,d.articulationsScratch);if(l(S)){let Z=Object.keys(S);for(let V=0,C=Z.length;V<C;++V){let G=Z[V],E=S[G];l(E)&&(_=!0,p.setArticulationStage(G,E))}}_&&p.applyArticulations()}}return!0};bx.prototype.isDestroyed=function(){return!1};bx.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(bx.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._modelHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)s$(this,e[i],t,n);return me(this)};var bB=new h,Kmt=new fe;bx.prototype.getBoundingSphere=function(e,t){let n=this._modelHash[e.id];if(!l(n))return Lt.FAILED;if(n.loadFailed)return Lt.FAILED;let i=n.modelPrimitive;if(!l(i)||!i.show)return Lt.PENDING;if(!i.ready||!n.modelUpdated)return Lt.PENDING;let o=this._scene,r=o.ellipsoid??ie.default;if(i.heightReference!==rt.NONE){let a=i.modelMatrix;bB.x=a[12],bB.y=a[13],bB.z=a[14];let c=r.cartesianToCartographic(bB,Kmt),d=o.getHeight(c,i.heightReference);return l(d)&&(Wd(i.heightReference)?c.height=d:c.height+=d),le.clone(i.boundingSphere,t),t.center=r.cartographicToCartesian(c),Lt.DONE}return le.clone(i.boundingSphere,t),Lt.DONE};bx.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._entitiesToVisualize,a=this._modelHash,c=this._primitives;for(o=t.length-1;o>-1;o--)r=t[o],l(r._model)&&l(r._position)&&s.set(r.id,r);for(o=i.length-1;o>-1;o--)r=i[o],l(r._model)&&l(r._position)?(Jmt(r,a),s.set(r.id,r)):(s$(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],s$(this,r,a,c),s.remove(r.id)};function s$(e,t,n,i){let o=n[t.id];l(o)&&(i.removeAndDestroy(o.modelPrimitive),delete n[t.id])}function Jmt(e,t){let n=t[e.id];l(n)&&(n.nodeTransformationsScratch={},n.articulationsScratch={})}var hN=bx;var lOi=x(T(),1);var qDi=x(T(),1);var gUi=x(T(),1);var avi=x(T(),1);function DSe(e){e=e??B.EMPTY_OBJECT,this._metadata=e.metadata}Object.defineProperties(DSe.prototype,{metadata:{get:function(){return this._metadata}}});var RS=DSe;var hMi=x(T(),1);var fvi=x(T(),1);var a$=class e{constructor(t,n,i,o){this._tileset=t,this._tile=n,this._resource=i,l(o)||(o=[]),this._contents=o,this._metadata=void 0,this._group=void 0,this._ready=!1}get featurePropertiesDirty(){let t=this._contents,n=t.length;for(let i=0;i<n;++i)if(t[i].featurePropertiesDirty)return!0;return!1}set featurePropertiesDirty(t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].featurePropertiesDirty=t}get featuresLength(){return 0}get pointsLength(){return 0}get trianglesLength(){return 0}get geometryByteLength(){return 0}get texturesByteLength(){return 0}get batchTableByteLength(){return 0}get innerContents(){return this._contents}get ready(){return this._ready}get tileset(){return this._tileset}get tile(){return this._tile}get url(){return this._resource.getUrlComponent(!0)}get metadata(){return this._metadata}set metadata(t){this._metadata=t;let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].metadata=t}get batchTable(){}get group(){return this._group}set group(t){this._group=t;let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].group=t}static async fromTileType(t,n,i,o,r,s){r=r??0;let a=new Uint8Array(o),c=new DataView(o);r+=fN;let d=c.getUint32(r,!0);if(d!==1)throw new ae(`Only Composite Tile version 1 is supported. Version ${d} is not.`);r+=fN,r+=fN;let u=c.getUint32(r,!0);r+=fN;let m=i.queryParameters.compositeIndex;l(m)?m=`${m}_`:m="";let p=[];p.length=u;for(let y=0;y<u;++y){let _=Lh(a,r),S=c.getUint32(r+fN*2,!0),Z=s[_],V=`${m}${y}`,C=i.getDerivedResource({queryParameters:{compositeIndex:V}});if(l(Z))p[y]=Promise.resolve(Z(t,n,C,o,r));else throw new ae(`Unknown tile content type, ${_}, inside Composite tile`);r+=S}let b=await Promise.all(p);return new e(t,n,i,b)}hasProperty(t,n){return!1}getFeature(t){}applyDebugSettings(t,n){let i=this._contents,o=i.length;for(let r=0;r<o;++r)i[r].applyDebugSettings(t,n)}applyStyle(t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].applyStyle(t)}update(t,n){let i=this._contents,o=i.length,r=!0;for(let s=0;s<o;++s)i[s].update(t,n),r=r&&i[s].ready;!this._ready&&r&&(this._ready=!0)}pick(t,n,i){if(!this._ready)return;let o,r=Number.POSITIVE_INFINITY,s=this._contents,a=s.length;for(let c=0;c<a;++c){let d=s[c].pick(t,n,i);if(!l(d))continue;let u=h.distance(t.origin,d);u<r&&(o=d,r=u)}if(l(o))return i}isDestroyed(){return!1}destroy(){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].destroy();return me(this)}},fN=Uint32Array.BYTES_PER_ELEMENT,pN=a$;var v2i=x(T(),1);var S2i=x(T(),1);var bvi=x(T(),1);function jmt(e){this.offset=e.offset,this.count=e.count,this.color=e.color,this.batchIds=e.batchIds}var zp=jmt;var d2i=x(T(),1);var yvi=x(T(),1),qC=`in vec3 position; in float a_batchId; uniform mat4 u_modifiedModelViewProjection; void main() { gl_Position = czm_depthClamp(u_modifiedModelViewProjection * vec4(position, 1.0)); } `;var Ivi=x(T(),1);var _vi=x(T(),1),c$=class{add(t,n,i){if(typeof arguments[0]!="string")for(let o in arguments[0])this.add(o,arguments[0][o],arguments[1]);else(Array.isArray(t)?t:[t]).forEach(function(o){this[o]=this[o]||[],n&&this[o][i?"unshift":"push"](n)},this)}run(t,n){this[t]=this[t]||[],this[t].forEach(function(i){i.call(n&&n.context?n.context:n,n)})}},l$=class{constructor(t){this.jsep=t,this.registered={}}register(...t){t.forEach(n=>{if(typeof n!="object"||!n.name||!n.init)throw new Error("Invalid JSEP plugin format");this.registered[n.name]||(n.init(this.jsep),this.registered[n.name]=n)})}},Yd=class e{static get version(){return"1.4.0"}static toString(){return"JavaScript Expression Parser (JSEP) v"+e.version}static addUnaryOp(t){return e.max_unop_len=Math.max(t.length,e.max_unop_len),e.unary_ops[t]=1,e}static addBinaryOp(t,n,i){return e.max_binop_len=Math.max(t.length,e.max_binop_len),e.binary_ops[t]=n,i?e.right_associative.add(t):e.right_associative.delete(t),e}static addIdentifierChar(t){return e.additional_identifier_chars.add(t),e}static addLiteral(t,n){return e.literals[t]=n,e}static removeUnaryOp(t){return delete e.unary_ops[t],t.length===e.max_unop_len&&(e.max_unop_len=e.getMaxKeyLen(e.unary_ops)),e}static removeAllUnaryOps(){return e.unary_ops={},e.max_unop_len=0,e}static removeIdentifierChar(t){return e.additional_identifier_chars.delete(t),e}static removeBinaryOp(t){return delete e.binary_ops[t],t.length===e.max_binop_len&&(e.max_binop_len=e.getMaxKeyLen(e.binary_ops)),e.right_associative.delete(t),e}static removeAllBinaryOps(){return e.binary_ops={},e.max_binop_len=0,e}static removeLiteral(t){return delete e.literals[t],e}static removeAllLiterals(){return e.literals={},e}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(t){this.expr=t,this.index=0}static parse(t){return new e(t).parse()}static getMaxKeyLen(t){return Math.max(0,...Object.keys(t).map(n=>n.length))}static isDecimalDigit(t){return t>=48&&t<=57}static binaryPrecedence(t){return e.binary_ops[t]||0}static isIdentifierStart(t){return t>=65&&t<=90||t>=97&&t<=122||t>=128&&!e.binary_ops[String.fromCharCode(t)]||e.additional_identifier_chars.has(String.fromCharCode(t))}static isIdentifierPart(t){return e.isIdentifierStart(t)||e.isDecimalDigit(t)}throwError(t){let n=new Error(t+" at character "+this.index);throw n.index=this.index,n.description=t,n}runHook(t,n){if(e.hooks[t]){let i={context:this,node:n};return e.hooks.run(t,i),i.node}return n}searchHook(t){if(e.hooks[t]){let n={context:this};return e.hooks[t].find(function(i){return i.call(n.context,n),n.node}),n.node}}gobbleSpaces(){let t=this.code;for(;t===e.SPACE_CODE||t===e.TAB_CODE||t===e.LF_CODE||t===e.CR_CODE;)t=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let t=this.gobbleExpressions(),n=t.length===1?t[0]:{type:e.COMPOUND,body:t};return this.runHook("after-all",n)}gobbleExpressions(t){let n=[],i,o;for(;this.index<this.expr.length;)if(i=this.code,i===e.SEMCOL_CODE||i===e.COMMA_CODE)this.index++;else if(o=this.gobbleExpression())n.push(o);else if(this.index<this.expr.length){if(i===t)break;this.throwError('Unexpected "'+this.char+'"')}return n}gobbleExpression(){let t=this.searchHook("gobble-expression")||this.gobbleBinaryExpression();return this.gobbleSpaces(),this.runHook("after-expression",t)}gobbleBinaryOp(){this.gobbleSpaces();let t=this.expr.substr(this.index,e.max_binop_len),n=t.length;for(;n>0;){if(e.binary_ops.hasOwnProperty(t)&&(!e.isIdentifierStart(this.code)||this.index+t.length<this.expr.length&&!e.isIdentifierPart(this.expr.charCodeAt(this.index+t.length))))return this.index+=n,t;t=t.substr(0,--n)}return!1}gobbleBinaryExpression(){let t,n,i,o,r,s,a,c,d;if(s=this.gobbleToken(),!s||(n=this.gobbleBinaryOp(),!n))return s;for(r={value:n,prec:e.binaryPrecedence(n),right_a:e.right_associative.has(n)},a=this.gobbleToken(),a||this.throwError("Expected expression after "+n),o=[s,r,a];n=this.gobbleBinaryOp();){if(i=e.binaryPrecedence(n),i===0){this.index-=n.length;break}r={value:n,prec:i,right_a:e.right_associative.has(n)},d=n;let u=m=>r.right_a&&m.right_a?i>m.prec:i<=m.prec;for(;o.length>2&&u(o[o.length-2]);)a=o.pop(),n=o.pop().value,s=o.pop(),t={type:e.BINARY_EXP,operator:n,left:s,right:a},o.push(t);t=this.gobbleToken(),t||this.throwError("Expected expression after "+d),o.push(r,t)}for(c=o.length-1,t=o[c];c>1;)t={type:e.BINARY_EXP,operator:o[c-1].value,left:o[c-2],right:t},c-=2;return t}gobbleToken(){let t,n,i,o;if(this.gobbleSpaces(),o=this.searchHook("gobble-token"),o)return this.runHook("after-token",o);if(t=this.code,e.isDecimalDigit(t)||t===e.PERIOD_CODE)return this.gobbleNumericLiteral();if(t===e.SQUOTE_CODE||t===e.DQUOTE_CODE)o=this.gobbleStringLiteral();else if(t===e.OBRACK_CODE)o=this.gobbleArray();else{for(n=this.expr.substr(this.index,e.max_unop_len),i=n.length;i>0;){if(e.unary_ops.hasOwnProperty(n)&&(!e.isIdentifierStart(this.code)||this.index+n.length<this.expr.length&&!e.isIdentifierPart(this.expr.charCodeAt(this.index+n.length)))){this.index+=i;let r=this.gobbleToken();return r||this.throwError("missing unaryOp argument"),this.runHook("after-token",{type:e.UNARY_EXP,operator:n,argument:r,prefix:!0})}n=n.substr(0,--i)}e.isIdentifierStart(t)?(o=this.gobbleIdentifier(),e.literals.hasOwnProperty(o.name)?o={type:e.LITERAL,value:e.literals[o.name],raw:o.name}:o.name===e.this_str&&(o={type:e.THIS_EXP})):t===e.OPAREN_CODE&&(o=this.gobbleGroup())}return o?(o=this.gobbleTokenProperty(o),this.runHook("after-token",o)):this.runHook("after-token",!1)}gobbleTokenProperty(t){this.gobbleSpaces();let n=this.code;for(;n===e.PERIOD_CODE||n===e.OBRACK_CODE||n===e.OPAREN_CODE||n===e.QUMARK_CODE;){let i;if(n===e.QUMARK_CODE){if(this.expr.charCodeAt(this.index+1)!==e.PERIOD_CODE)break;i=!0,this.index+=2,this.gobbleSpaces(),n=this.code}this.index++,n===e.OBRACK_CODE?(t={type:e.MEMBER_EXP,computed:!0,object:t,property:this.gobbleExpression()},t.property||this.throwError('Unexpected "'+this.char+'"'),this.gobbleSpaces(),n=this.code,n!==e.CBRACK_CODE&&this.throwError("Unclosed ["),this.index++):n===e.OPAREN_CODE?t={type:e.CALL_EXP,arguments:this.gobbleArguments(e.CPAREN_CODE),callee:t}:(n===e.PERIOD_CODE||i)&&(i&&this.index--,this.gobbleSpaces(),t={type:e.MEMBER_EXP,computed:!1,object:t,property:this.gobbleIdentifier()}),i&&(t.optional=!0),this.gobbleSpaces(),n=this.code}return t}gobbleNumericLiteral(){let t="",n,i;for(;e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);if(this.code===e.PERIOD_CODE)for(t+=this.expr.charAt(this.index++);e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);if(n=this.char,n==="e"||n==="E"){for(t+=this.expr.charAt(this.index++),n=this.char,(n==="+"||n==="-")&&(t+=this.expr.charAt(this.index++));e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);e.isDecimalDigit(this.expr.charCodeAt(this.index-1))||this.throwError("Expected exponent ("+t+this.char+")")}return i=this.code,e.isIdentifierStart(i)?this.throwError("Variable names cannot start with a number ("+t+this.char+")"):(i===e.PERIOD_CODE||t.length===1&&t.charCodeAt(0)===e.PERIOD_CODE)&&this.throwError("Unexpected period"),{type:e.LITERAL,value:parseFloat(t),raw:t}}gobbleStringLiteral(){let t="",n=this.index,i=this.expr.charAt(this.index++),o=!1;for(;this.index<this.expr.length;){let r=this.expr.charAt(this.index++);if(r===i){o=!0;break}else if(r==="\\")switch(r=this.expr.charAt(this.index++),r){case"n":t+=` `;break;case"r":t+="\r";break;case"t":t+=" ";break;case"b":t+="\b";break;case"f":t+="\f";break;case"v":t+="\v";break;default:t+=r}else t+=r}return o||this.throwError('Unclosed quote after "'+t+'"'),{type:e.LITERAL,value:t,raw:this.expr.substring(n,this.index)}}gobbleIdentifier(){let t=this.code,n=this.index;for(e.isIdentifierStart(t)?this.index++:this.throwError("Unexpected "+this.char);this.index<this.expr.length&&(t=this.code,e.isIdentifierPart(t));)this.index++;return{type:e.IDENTIFIER,name:this.expr.slice(n,this.index)}}gobbleArguments(t){let n=[],i=!1,o=0;for(;this.index<this.expr.length;){this.gobbleSpaces();let r=this.code;if(r===t){i=!0,this.index++,t===e.CPAREN_CODE&&o&&o>=n.length&&this.throwError("Unexpected token "+String.fromCharCode(t));break}else if(r===e.COMMA_CODE){if(this.index++,o++,o!==n.length){if(t===e.CPAREN_CODE)this.throwError("Unexpected token ,");else if(t===e.CBRACK_CODE)for(let s=n.length;s<o;s++)n.push(null)}}else if(n.length!==o&&o!==0)this.throwError("Expected comma");else{let s=this.gobbleExpression();(!s||s.type===e.COMPOUND)&&this.throwError("Expected comma"),n.push(s)}}return i||this.throwError("Expected "+String.fromCharCode(t)),n}gobbleGroup(){this.index++;let t=this.gobbleExpressions(e.CPAREN_CODE);if(this.code===e.CPAREN_CODE)return this.index++,t.length===1?t[0]:t.length?{type:e.SEQUENCE_EXP,expressions:t}:!1;this.throwError("Unclosed (")}gobbleArray(){return this.index++,{type:e.ARRAY_EXP,elements:this.gobbleArguments(e.CBRACK_CODE)}}},Qmt=new c$;Object.assign(Yd,{hooks:Qmt,plugins:new l$(Yd),COMPOUND:"Compound",SEQUENCE_EXP:"SequenceExpression",IDENTIFIER:"Identifier",MEMBER_EXP:"MemberExpression",LITERAL:"Literal",THIS_EXP:"ThisExpression",CALL_EXP:"CallExpression",UNARY_EXP:"UnaryExpression",BINARY_EXP:"BinaryExpression",ARRAY_EXP:"ArrayExpression",TAB_CODE:9,LF_CODE:10,CR_CODE:13,SPACE_CODE:32,PERIOD_CODE:46,COMMA_CODE:44,SQUOTE_CODE:39,DQUOTE_CODE:34,OPAREN_CODE:40,CPAREN_CODE:41,OBRACK_CODE:91,CBRACK_CODE:93,QUMARK_CODE:63,SEMCOL_CODE:59,COLON_CODE:58,unary_ops:{"-":1,"!":1,"~":1,"+":1},binary_ops:{"||":1,"??":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10,"**":11},right_associative:new Set(["**"]),additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"});Yd.max_unop_len=Yd.getMaxKeyLen(Yd.unary_ops);Yd.max_binop_len=Yd.getMaxKeyLen(Yd.binary_ops);var gx=e=>new Yd(e).parse(),qmt=Object.getOwnPropertyNames(class{});Object.getOwnPropertyNames(Yd).filter(e=>!qmt.includes(e)&&gx[e]===void 0).forEach(e=>{gx[e]=Yd[e]});gx.Jsep=Yd;var $mt="ConditionalExpression",eht={name:"ternary",init(e){e.hooks.add("after-expression",function(n){if(n.node&&this.code===e.QUMARK_CODE){this.index++;let i=n.node,o=this.gobbleExpression();if(o||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===e.COLON_CODE){this.index++;let r=this.gobbleExpression();if(r||this.throwError("Expected expression"),n.node={type:$mt,test:i,consequent:o,alternate:r},i.operator&&e.binary_ops[i.operator]<=.9){let s=i;for(;s.right.operator&&e.binary_ops[s.right.operator]<=.9;)s=s.right;n.node.test=s.right,s.right=n.node,n.node=i}}else this.throwError("Expected :")}})}};gx.plugins.register(eht);var Zvi=x(T(),1),OSe={VARIABLE:0,UNARY:1,BINARY:2,TERNARY:3,CONDITIONAL:4,MEMBER:5,FUNCTION_CALL:6,ARRAY:7,REGEX:8,VARIABLE_IN_STRING:9,LITERAL_NULL:10,LITERAL_BOOLEAN:11,LITERAL_NUMBER:12,LITERAL_STRING:13,LITERAL_COLOR:14,LITERAL_VECTOR:15,LITERAL_REGEX:16,LITERAL_UNDEFINED:17,BUILTIN_VARIABLE:18};Object.freeze(OSe);var Ft=OSe;function _f(e,t){this._expression=e,e=hht(e,t),e=pht(fht(e)),gx.addBinaryOp("=~",0),gx.addBinaryOp("!~",0);let n;try{n=gx(e)}catch(i){throw new ae(i)}this._runtimeAst=zi(this,n)}Object.defineProperties(_f.prototype,{expression:{get:function(){return this._expression}}});var Un={arrayIndex:0,arrayArray:[[]],cartesian2Index:0,cartesian3Index:0,cartesian4Index:0,cartesian2Array:[new M],cartesian3Array:[new h],cartesian4Array:[new ce],reset:function(){this.arrayIndex=0,this.cartesian2Index=0,this.cartesian3Index=0,this.cartesian4Index=0},getArray:function(){this.arrayIndex>=this.arrayArray.length&&this.arrayArray.push([]);let e=this.arrayArray[this.arrayIndex++];return e.length=0,e},getCartesian2:function(){return this.cartesian2Index>=this.cartesian2Array.length&&this.cartesian2Array.push(new M),this.cartesian2Array[this.cartesian2Index++]},getCartesian3:function(){return this.cartesian3Index>=this.cartesian3Array.length&&this.cartesian3Array.push(new h),this.cartesian3Array[this.cartesian3Index++]},getCartesian4:function(){return this.cartesian4Index>=this.cartesian4Array.length&&this.cartesian4Array.push(new ce),this.cartesian4Array[this.cartesian4Index++]}};_f.prototype.evaluate=function(e,t){Un.reset();let n=this._runtimeAst.evaluate(e);return t instanceof U&&n instanceof ce?U.fromCartesian4(n,t):n instanceof M||n instanceof h||n instanceof ce?n.clone(t):n};_f.prototype.evaluateColor=function(e,t){Un.reset();let n=this._runtimeAst.evaluate(e);return U.fromCartesian4(n,t)};_f.prototype.getShaderFunction=function(e,t,n,i){let o=this.getShaderExpression(t,n);return o=`${i} ${e} { return ${o}; } `,o};_f.prototype.getShaderExpression=function(e,t){return this._runtimeAst.getShaderExpression(e,t)};_f.prototype.getVariables=function(){let e=[];return this._runtimeAst.getVariables(e),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var tht=["!","-","+"],BSe=["+","-","*","/","%","===","!==",">",">=","<","<=","&&","||","!~","=~"],bN=/\${(.*?)}/g,nht=/\\/g,iht="@#%",oht=/@#%/g,xB=new U,TB={abs:wa(Math.abs),sqrt:wa(Math.sqrt),cos:wa(Math.cos),sin:wa(Math.sin),tan:wa(Math.tan),acos:wa(Math.acos),asin:wa(Math.asin),atan:wa(Math.atan),radians:wa(L.toRadians),degrees:wa(L.toDegrees),sign:wa(L.sign),floor:wa(Math.floor),ceil:wa(Math.ceil),round:wa(Math.round),exp:wa(Math.exp),exp2:wa(sht),log:wa(Math.log),log2:wa(aht),fract:wa(rht),length:cht,normalize:lht},_B={atan2:gB(Math.atan2,!1),pow:gB(Math.pow,!1),min:gB(Math.min,!0),max:gB(Math.max,!0),distance:dht,dot:uht,cross:mht},m$={clamp:zSe(L.clamp,!0),mix:zSe(L.lerp,!0)};function rht(e){return e-Math.floor(e)}function sht(e){return Math.pow(2,e)}function aht(e){return L.log2(e)}function wa(e){return function(t,n){if(typeof n=="number")return e(n);if(n instanceof M)return M.fromElements(e(n.x),e(n.y),Un.getCartesian2());if(n instanceof h)return h.fromElements(e(n.x),e(n.y),e(n.z),Un.getCartesian3());if(n instanceof ce)return ce.fromElements(e(n.x),e(n.y),e(n.z),e(n.w),Un.getCartesian4());throw new ae(`Function "${t}" requires a vector or number argument. Argument is ${n}.`)}}function gB(e,t){return function(n,i,o){if(t&&typeof o=="number"){if(typeof i=="number")return e(i,o);if(i instanceof M)return M.fromElements(e(i.x,o),e(i.y,o),Un.getCartesian2());if(i instanceof h)return h.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),Un.getCartesian3());if(i instanceof ce)return ce.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),e(i.w,o),Un.getCartesian4())}if(typeof i=="number"&&typeof o=="number")return e(i,o);if(i instanceof M&&o instanceof M)return M.fromElements(e(i.x,o.x),e(i.y,o.y),Un.getCartesian2());if(i instanceof h&&o instanceof h)return h.fromElements(e(i.x,o.x),e(i.y,o.y),e(i.z,o.z),Un.getCartesian3());if(i instanceof ce&&o instanceof ce)return ce.fromElements(e(i.x,o.x),e(i.y,o.y),e(i.z,o.z),e(i.w,o.w),Un.getCartesian4());throw new ae(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i} and ${o}.`)}}function zSe(e,t){return function(n,i,o,r){if(t&&typeof r=="number"){if(typeof i=="number"&&typeof o=="number")return e(i,o,r);if(i instanceof M&&o instanceof M)return M.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),Un.getCartesian2());if(i instanceof h&&o instanceof h)return h.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),e(i.z,o.z,r),Un.getCartesian3());if(i instanceof ce&&o instanceof ce)return ce.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),e(i.z,o.z,r),e(i.w,o.w,r),Un.getCartesian4())}if(typeof i=="number"&&typeof o=="number"&&typeof r=="number")return e(i,o,r);if(i instanceof M&&o instanceof M&&r instanceof M)return M.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),Un.getCartesian2());if(i instanceof h&&o instanceof h&&r instanceof h)return h.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),e(i.z,o.z,r.z),Un.getCartesian3());if(i instanceof ce&&o instanceof ce&&r instanceof ce)return ce.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),e(i.z,o.z,r.z),e(i.w,o.w,r.w),Un.getCartesian4());throw new ae(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i}, ${o}, and ${r}.`)}}function cht(e,t){if(typeof t=="number")return Math.abs(t);if(t instanceof M)return M.magnitude(t);if(t instanceof h)return h.magnitude(t);if(t instanceof ce)return ce.magnitude(t);throw new ae(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function lht(e,t){if(typeof t=="number")return 1;if(t instanceof M)return M.normalize(t,Un.getCartesian2());if(t instanceof h)return h.normalize(t,Un.getCartesian3());if(t instanceof ce)return ce.normalize(t,Un.getCartesian4());throw new ae(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function dht(e,t,n){if(typeof t=="number"&&typeof n=="number")return Math.abs(t-n);if(t instanceof M&&n instanceof M)return M.distance(t,n);if(t instanceof h&&n instanceof h)return h.distance(t,n);if(t instanceof ce&&n instanceof ce)return ce.distance(t,n);throw new ae(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function uht(e,t,n){if(typeof t=="number"&&typeof n=="number")return t*n;if(t instanceof M&&n instanceof M)return M.dot(t,n);if(t instanceof h&&n instanceof h)return h.dot(t,n);if(t instanceof ce&&n instanceof ce)return ce.dot(t,n);throw new ae(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function mht(e,t,n){if(t instanceof h&&n instanceof h)return h.cross(t,n,Un.getCartesian3());throw new ae(`Function "${e}" requires vec3 arguments. Arguments are ${t} and ${n}.`)}function wt(e,t,n,i,o){this._type=e,this._value=t,this._left=n,this._right=i,this._test=o,this.evaluate=void 0,Cht(this)}function hht(e,t){if(!l(t))return e;for(let n in t)if(t.hasOwnProperty(n)){let i=new RegExp(`\\$\\{${n}\\}`,"g"),o=`(${t[n]})`;l(o)&&(e=e.replace(i,o))}return e}function fht(e){return e.replace(nht,iht)}function u$(e){return e.replace(oht,"\\")}function pht(e){let t=e,n="",i=t.indexOf("${");for(;i>=0;){let o=t.indexOf("'"),r=t.indexOf('"'),s;if(o>=0&&o<i)s=t.indexOf("'",o+1),n+=t.substr(0,s+1),t=t.substr(s+1),i=t.indexOf("${");else if(r>=0&&r<i)s=t.indexOf('"',r+1),n+=t.substr(0,s+1),t=t.substr(s+1),i=t.indexOf("${");else{n+=t.substr(0,i);let a=t.indexOf("}");if(a<0)throw new ae("Unmatched {.");n+=`czm_${t.substr(i+2,a-(i+2))}`,t=t.substr(a+1),i=t.indexOf("${")}}return n+=t,n}function bht(e){let t=typeof e.value;if(e.value===null)return new wt(Ft.LITERAL_NULL,null);if(t==="boolean")return new wt(Ft.LITERAL_BOOLEAN,e.value);if(t==="number")return new wt(Ft.LITERAL_NUMBER,e.value);if(t==="string")return e.value.indexOf("${")>=0?new wt(Ft.VARIABLE_IN_STRING,e.value):new wt(Ft.LITERAL_STRING,u$(e.value))}function ght(e,t){let n=t.arguments,i=n.length,o,r,s,a;if(t.callee.type==="MemberExpression"){o=t.callee.property.name;let c=t.callee.object;if(o==="test"||o==="exec"){if(!l(c.callee)||c.callee.name!=="regExp")throw new ae(`${o} is not a function.`);return i===0?o==="test"?new wt(Ft.LITERAL_BOOLEAN,!1):new wt(Ft.LITERAL_NULL,null):(s=zi(e,c),a=zi(e,n[0]),new wt(Ft.FUNCTION_CALL,o,s,a))}else if(o==="toString")return r=zi(e,c),new wt(Ft.FUNCTION_CALL,o,r);throw new ae(`Unexpected function call "${o}".`)}if(o=t.callee.name,o==="color"){if(i===0)return new wt(Ft.LITERAL_COLOR,o);if(r=zi(e,n[0]),l(n[1])){let c=zi(e,n[1]);return new wt(Ft.LITERAL_COLOR,o,[r,c])}return new wt(Ft.LITERAL_COLOR,o,[r])}else if(o==="rgb"||o==="hsl"){if(i<3)throw new ae(`${o} requires three arguments.`);return r=[zi(e,n[0]),zi(e,n[1]),zi(e,n[2])],new wt(Ft.LITERAL_COLOR,o,r)}else if(o==="rgba"||o==="hsla"){if(i<4)throw new ae(`${o} requires four arguments.`);return r=[zi(e,n[0]),zi(e,n[1]),zi(e,n[2]),zi(e,n[3])],new wt(Ft.LITERAL_COLOR,o,r)}else if(o==="vec2"||o==="vec3"||o==="vec4"){r=new Array(i);for(let c=0;c<i;++c)r[c]=zi(e,n[c]);return new wt(Ft.LITERAL_VECTOR,o,r)}else{if(o==="isNaN"||o==="isFinite")return i===0?o==="isNaN"?new wt(Ft.LITERAL_BOOLEAN,!0):new wt(Ft.LITERAL_BOOLEAN,!1):(r=zi(e,n[0]),new wt(Ft.UNARY,o,r));if(o==="isExactClass"||o==="isClass"){if(i<1||i>1)throw new ae(`${o} requires exactly one argument.`);return r=zi(e,n[0]),new wt(Ft.UNARY,o,r)}else if(o==="getExactClassName"){if(i>0)throw new ae(`${o} does not take any argument.`);return new wt(Ft.UNARY,o)}else if(l(TB[o])){if(i!==1)throw new ae(`${o} requires exactly one argument.`);return r=zi(e,n[0]),new wt(Ft.UNARY,o,r)}else if(l(_B[o])){if(i!==2)throw new ae(`${o} requires exactly two arguments.`);return s=zi(e,n[0]),a=zi(e,n[1]),new wt(Ft.BINARY,o,s,a)}else if(l(m$[o])){if(i!==3)throw new ae(`${o} requires exactly three arguments.`);s=zi(e,n[0]),a=zi(e,n[1]);let c=zi(e,n[2]);return new wt(Ft.TERNARY,o,s,a,c)}else{if(o==="Boolean")return i===0?new wt(Ft.LITERAL_BOOLEAN,!1):(r=zi(e,n[0]),new wt(Ft.UNARY,o,r));if(o==="Number")return i===0?new wt(Ft.LITERAL_NUMBER,0):(r=zi(e,n[0]),new wt(Ft.UNARY,o,r));if(o==="String")return i===0?new wt(Ft.LITERAL_STRING,""):(r=zi(e,n[0]),new wt(Ft.UNARY,o,r));if(o==="regExp")return yht(e,t)}}throw new ae(`Unexpected function call "${o}".`)}function yht(e,t){let n=t.arguments;if(n.length===0)return new wt(Ft.LITERAL_REGEX,new RegExp);let i=zi(e,n[0]),o;if(n.length>1){let r=zi(e,n[1]);if(d$(i)&&d$(r)){try{o=new RegExp(u$(String(i._value)),r._value)}catch(s){throw new ae(s)}return new wt(Ft.LITERAL_REGEX,o)}return new wt(Ft.REGEX,i,r)}if(d$(i)){try{o=new RegExp(u$(String(i._value)))}catch(r){throw new ae(r)}return new wt(Ft.LITERAL_REGEX,o)}return new wt(Ft.REGEX,i)}function xht(e){if(Zht(e.name)){let t=Vht(e.name);return t.substr(0,8)==="tiles3d_"?new wt(Ft.BUILTIN_VARIABLE,t):new wt(Ft.VARIABLE,t)}else{if(e.name==="NaN")return new wt(Ft.LITERAL_NUMBER,NaN);if(e.name==="Infinity")return new wt(Ft.LITERAL_NUMBER,1/0);if(e.name==="undefined")return new wt(Ft.LITERAL_UNDEFINED,void 0)}throw new ae(`${e.name} is not defined.`)}function Tht(e){let t=e.property.name;if(t==="PI")return new wt(Ft.LITERAL_NUMBER,Math.PI);if(t==="E")return new wt(Ft.LITERAL_NUMBER,Math.E)}function _ht(e){if(e.property.name==="POSITIVE_INFINITY")return new wt(Ft.LITERAL_NUMBER,Number.POSITIVE_INFINITY)}function Sht(e,t){if(t.object.name==="Math")return Tht(t);if(t.object.name==="Number")return _ht(t);let n,i=zi(e,t.object);return t.computed?(n=zi(e,t.property),new wt(Ft.MEMBER,"brackets",i,n)):(n=new wt(Ft.LITERAL_STRING,t.property.name),new wt(Ft.MEMBER,"dot",i,n))}function d$(e){return e._type>=Ft.LITERAL_NULL}function Zht(e){return e.substr(0,4)==="czm_"}function Vht(e){return e.substr(4)}function zi(e,t){let n,i,o,r;if(t.type==="Literal")n=bht(t);else if(t.type==="CallExpression")n=ght(e,t);else if(t.type==="Identifier")n=xht(t);else if(t.type==="UnaryExpression"){i=t.operator;let s=zi(e,t.argument);if(tht.indexOf(i)>-1)n=new wt(Ft.UNARY,i,s);else throw new ae(`Unexpected operator "${i}".`)}else if(t.type==="BinaryExpression")if(i=t.operator,o=zi(e,t.left),r=zi(e,t.right),BSe.indexOf(i)>-1)n=new wt(Ft.BINARY,i,o,r);else throw new ae(`Unexpected operator "${i}".`);else if(t.type==="LogicalExpression")i=t.operator,o=zi(e,t.left),r=zi(e,t.right),BSe.indexOf(i)>-1&&(n=new wt(Ft.BINARY,i,o,r));else if(t.type==="ConditionalExpression"){let s=zi(e,t.test);o=zi(e,t.consequent),r=zi(e,t.alternate),n=new wt(Ft.CONDITIONAL,"?",o,r,s)}else if(t.type==="MemberExpression")n=Sht(e,t);else if(t.type==="ArrayExpression"){let s=[];for(let a=0;a<t.elements.length;a++)s[a]=zi(e,t.elements[a]);n=new wt(Ft.ARRAY,s)}else throw t.type==="Compound"?new ae("Provide exactly one expression."):new ae("Cannot parse expression.");return n}function Cht(e){e._type===Ft.CONDITIONAL?e.evaluate=e._evaluateConditional:e._type===Ft.FUNCTION_CALL?e._value==="test"?e.evaluate=e._evaluateRegExpTest:e._value==="exec"?e.evaluate=e._evaluateRegExpExec:e._value==="toString"&&(e.evaluate=e._evaluateToString):e._type===Ft.UNARY?e._value==="!"?e.evaluate=e._evaluateNot:e._value==="-"?e.evaluate=e._evaluateNegative:e._value==="+"?e.evaluate=e._evaluatePositive:e._value==="isNaN"?e.evaluate=e._evaluateNaN:e._value==="isFinite"?e.evaluate=e._evaluateIsFinite:e._value==="isExactClass"?e.evaluate=e._evaluateIsExactClass:e._value==="isClass"?e.evaluate=e._evaluateIsClass:e._value==="getExactClassName"?e.evaluate=e._evaluateGetExactClassName:e._value==="Boolean"?e.evaluate=e._evaluateBooleanConversion:e._value==="Number"?e.evaluate=e._evaluateNumberConversion:e._value==="String"?e.evaluate=e._evaluateStringConversion:l(TB[e._value])&&(e.evaluate=Ght(e._value)):e._type===Ft.BINARY?e._value==="+"?e.evaluate=e._evaluatePlus:e._value==="-"?e.evaluate=e._evaluateMinus:e._value==="*"?e.evaluate=e._evaluateTimes:e._value==="/"?e.evaluate=e._evaluateDivide:e._value==="%"?e.evaluate=e._evaluateMod:e._value==="==="?e.evaluate=e._evaluateEqualsStrict:e._value==="!=="?e.evaluate=e._evaluateNotEqualsStrict:e._value==="<"?e.evaluate=e._evaluateLessThan:e._value==="<="?e.evaluate=e._evaluateLessThanOrEquals:e._value===">"?e.evaluate=e._evaluateGreaterThan:e._value===">="?e.evaluate=e._evaluateGreaterThanOrEquals:e._value==="&&"?e.evaluate=e._evaluateAnd:e._value==="||"?e.evaluate=e._evaluateOr:e._value==="=~"?e.evaluate=e._evaluateRegExpMatch:e._value==="!~"?e.evaluate=e._evaluateRegExpNotMatch:l(_B[e._value])&&(e.evaluate=Aht(e._value)):e._type===Ft.TERNARY?e.evaluate=Eht(e._value):e._type===Ft.MEMBER?e._value==="brackets"?e.evaluate=e._evaluateMemberBrackets:e.evaluate=e._evaluateMemberDot:e._type===Ft.ARRAY?e.evaluate=e._evaluateArray:e._type===Ft.VARIABLE?e.evaluate=e._evaluateVariable:e._type===Ft.VARIABLE_IN_STRING?e.evaluate=e._evaluateVariableString:e._type===Ft.LITERAL_COLOR?e.evaluate=e._evaluateLiteralColor:e._type===Ft.LITERAL_VECTOR?e.evaluate=e._evaluateLiteralVector:e._type===Ft.LITERAL_STRING?e.evaluate=e._evaluateLiteralString:e._type===Ft.REGEX?e.evaluate=e._evaluateRegExp:e._type===Ft.BUILTIN_VARIABLE?e._value==="tiles3d_tileset_time"&&(e.evaluate=Rht):e.evaluate=e._evaluateLiteral}function Rht(e){return l(e)?e.content.tileset.timeSinceLoad:0}function Ght(e){let t=TB[e];return function(n){let i=this._left.evaluate(n);return t(e,i)}}function Aht(e){let t=_B[e];return function(n){let i=this._left.evaluate(n),o=this._right.evaluate(n);return t(e,i,o)}}function Eht(e){let t=m$[e];return function(n){let i=this._left.evaluate(n),o=this._right.evaluate(n),r=this._test.evaluate(n);return t(e,i,o,r)}}function SB(e,t){if(l(e))return e.getPropertyInherited(t)}wt.prototype._evaluateLiteral=function(){return this._value};wt.prototype._evaluateLiteralColor=function(e){let t=xB,n=this._left;if(this._value==="color")l(n)?n.length>1?(U.fromCssColorString(n[0].evaluate(e),t),t.alpha=n[1].evaluate(e)):U.fromCssColorString(n[0].evaluate(e),t):U.fromBytes(255,255,255,255,t);else if(this._value==="rgb")U.fromBytes(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),255,t);else if(this._value==="rgba"){let i=n[3].evaluate(e)*255;U.fromBytes(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),i,t)}else this._value==="hsl"?U.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),1,t):this._value==="hsla"&&U.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),n[3].evaluate(e),t);return ce.fromColor(t,Un.getCartesian4())};wt.prototype._evaluateLiteralVector=function(e){let t=Un.getArray(),n=this._value,i=this._left,o=i.length;for(let a=0;a<o;++a){let c=i[a].evaluate(e);if(typeof c=="number")t.push(c);else if(c instanceof M)t.push(c.x,c.y);else if(c instanceof h)t.push(c.x,c.y,c.z);else if(c instanceof ce)t.push(c.x,c.y,c.z,c.w);else throw new ae(`${n} argument must be a vector or number. Argument is ${c}.`)}let r=t.length,s=parseInt(n.charAt(3));if(r===0)throw new ae(`Invalid ${n} constructor. No valid arguments.`);if(r<s&&r>1)throw new ae(`Invalid ${n} constructor. Not enough arguments.`);if(r>s&&o>1)throw new ae(`Invalid ${n} constructor. Too many arguments.`);if(r===1){let a=t[0];t.push(a,a,a)}if(n==="vec2")return M.fromArray(t,0,Un.getCartesian2());if(n==="vec3")return h.fromArray(t,0,Un.getCartesian3());if(n==="vec4")return ce.fromArray(t,0,Un.getCartesian4())};wt.prototype._evaluateLiteralString=function(){return this._value};wt.prototype._evaluateVariableString=function(e){let t=this._value,n=bN.exec(t);for(;n!==null;){let i=n[0],o=n[1],r=SB(e,o);l(r)||(r=""),t=t.replace(i,r),bN.lastIndex+=r.length-i.length,n=bN.exec(t)}return t};wt.prototype._evaluateVariable=function(e){return SB(e,this._value)};function GS(e){return e._value==="feature"}wt.prototype._evaluateMemberDot=function(e){if(GS(this._left))return SB(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!l(t))return;let n=this._right.evaluate(e);if(t instanceof M||t instanceof h||t instanceof ce){if(n==="r")return t.x;if(n==="g")return t.y;if(n==="b")return t.z;if(n==="a")return t.w}return t[n]};wt.prototype._evaluateMemberBrackets=function(e){if(GS(this._left))return SB(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!l(t))return;let n=this._right.evaluate(e);if(t instanceof M||t instanceof h||t instanceof ce){if(n===0||n==="r")return t.x;if(n===1||n==="g")return t.y;if(n===2||n==="b")return t.z;if(n===3||n==="a")return t.w}return t[n]};wt.prototype._evaluateArray=function(e){let t=[];for(let n=0;n<this._value.length;n++)t[n]=this._value[n].evaluate(e);return t};wt.prototype._evaluateNot=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new ae(`Operator "!" requires a boolean argument. Argument is ${t}.`);return!t};wt.prototype._evaluateNegative=function(e){let t=this._left.evaluate(e);if(t instanceof M)return M.negate(t,Un.getCartesian2());if(t instanceof h)return h.negate(t,Un.getCartesian3());if(t instanceof ce)return ce.negate(t,Un.getCartesian4());if(typeof t=="number")return-t;throw new ae(`Operator "-" requires a vector or number argument. Argument is ${t}.`)};wt.prototype._evaluatePositive=function(e){let t=this._left.evaluate(e);if(!(t instanceof M||t instanceof h||t instanceof ce||typeof t=="number"))throw new ae(`Operator "+" requires a vector or number argument. Argument is ${t}.`);return t};wt.prototype._evaluateLessThan=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new ae(`Operator "<" requires number arguments. Arguments are ${t} and ${n}.`);return t<n};wt.prototype._evaluateLessThanOrEquals=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new ae(`Operator "<=" requires number arguments. Arguments are ${t} and ${n}.`);return t<=n};wt.prototype._evaluateGreaterThan=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new ae(`Operator ">" requires number arguments. Arguments are ${t} and ${n}.`);return t>n};wt.prototype._evaluateGreaterThanOrEquals=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new ae(`Operator ">=" requires number arguments. Arguments are ${t} and ${n}.`);return t>=n};wt.prototype._evaluateOr=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new ae(`Operator "||" requires boolean arguments. First argument is ${t}.`);if(t)return!0;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new ae(`Operator "||" requires boolean arguments. Second argument is ${n}.`);return t||n};wt.prototype._evaluateAnd=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new ae(`Operator "&&" requires boolean arguments. First argument is ${t}.`);if(!t)return!1;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new ae(`Operator "&&" requires boolean arguments. Second argument is ${n}.`);return t&&n};wt.prototype._evaluatePlus=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof M&&t instanceof M)return M.add(t,n,Un.getCartesian2());if(n instanceof h&&t instanceof h)return h.add(t,n,Un.getCartesian3());if(n instanceof ce&&t instanceof ce)return ce.add(t,n,Un.getCartesian4());if(typeof t=="string"||typeof n=="string")return t+n;if(typeof t=="number"&&typeof n=="number")return t+n;throw new ae(`Operator "+" requires vector or number arguments of matching types, or at least one string argument. Arguments are ${t} and ${n}.`)};wt.prototype._evaluateMinus=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof M&&t instanceof M)return M.subtract(t,n,Un.getCartesian2());if(n instanceof h&&t instanceof h)return h.subtract(t,n,Un.getCartesian3());if(n instanceof ce&&t instanceof ce)return ce.subtract(t,n,Un.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t-n;throw new ae(`Operator "-" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};wt.prototype._evaluateTimes=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof M&&t instanceof M)return M.multiplyComponents(t,n,Un.getCartesian2());if(n instanceof M&&typeof t=="number")return M.multiplyByScalar(n,t,Un.getCartesian2());if(t instanceof M&&typeof n=="number")return M.multiplyByScalar(t,n,Un.getCartesian2());if(n instanceof h&&t instanceof h)return h.multiplyComponents(t,n,Un.getCartesian3());if(n instanceof h&&typeof t=="number")return h.multiplyByScalar(n,t,Un.getCartesian3());if(t instanceof h&&typeof n=="number")return h.multiplyByScalar(t,n,Un.getCartesian3());if(n instanceof ce&&t instanceof ce)return ce.multiplyComponents(t,n,Un.getCartesian4());if(n instanceof ce&&typeof t=="number")return ce.multiplyByScalar(n,t,Un.getCartesian4());if(t instanceof ce&&typeof n=="number")return ce.multiplyByScalar(t,n,Un.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t*n;throw new ae(`Operator "*" requires vector or number arguments. If both arguments are vectors they must be matching types. Arguments are ${t} and ${n}.`)};wt.prototype._evaluateDivide=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof M&&t instanceof M)return M.divideComponents(t,n,Un.getCartesian2());if(t instanceof M&&typeof n=="number")return M.divideByScalar(t,n,Un.getCartesian2());if(n instanceof h&&t instanceof h)return h.divideComponents(t,n,Un.getCartesian3());if(t instanceof h&&typeof n=="number")return h.divideByScalar(t,n,Un.getCartesian3());if(n instanceof ce&&t instanceof ce)return ce.divideComponents(t,n,Un.getCartesian4());if(t instanceof ce&&typeof n=="number")return ce.divideByScalar(t,n,Un.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t/n;throw new ae(`Operator "/" requires vector or number arguments of matching types, or a number as the second argument. Arguments are ${t} and ${n}.`)};wt.prototype._evaluateMod=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof M&&t instanceof M)return M.fromElements(t.x%n.x,t.y%n.y,Un.getCartesian2());if(n instanceof h&&t instanceof h)return h.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,Un.getCartesian3());if(n instanceof ce&&t instanceof ce)return ce.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,t.w%n.w,Un.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t%n;throw new ae(`Operator "%" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};wt.prototype._evaluateEqualsStrict=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof M&&t instanceof M||n instanceof h&&t instanceof h||n instanceof ce&&t instanceof ce?t.equals(n):t===n};wt.prototype._evaluateNotEqualsStrict=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof M&&t instanceof M||n instanceof h&&t instanceof h||n instanceof ce&&t instanceof ce?!t.equals(n):t!==n};wt.prototype._evaluateConditional=function(e){let t=this._test.evaluate(e);if(typeof t!="boolean")throw new ae(`Conditional argument of conditional expression must be a boolean. Argument is ${t}.`);return t?this._left.evaluate(e):this._right.evaluate(e)};wt.prototype._evaluateNaN=function(e){return isNaN(this._left.evaluate(e))};wt.prototype._evaluateIsFinite=function(e){return isFinite(this._left.evaluate(e))};wt.prototype._evaluateIsExactClass=function(e){return l(e)?e.isExactClass(this._left.evaluate(e)):!1};wt.prototype._evaluateIsClass=function(e){return l(e)?e.isClass(this._left.evaluate(e)):!1};wt.prototype._evaluateGetExactClassName=function(e){if(l(e))return e.getExactClassName()};wt.prototype._evaluateBooleanConversion=function(e){return!!this._left.evaluate(e)};wt.prototype._evaluateNumberConversion=function(e){return Number(this._left.evaluate(e))};wt.prototype._evaluateStringConversion=function(e){return String(this._left.evaluate(e))};wt.prototype._evaluateRegExp=function(e){let t=this._value.evaluate(e),n="";l(this._left)&&(n=this._left.evaluate(e));let i;try{i=new RegExp(t,n)}catch(o){throw new ae(o)}return i};wt.prototype._evaluateRegExpTest=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new ae(`RegExp.test requires the first argument to be a RegExp and the second argument to be a string. Arguments are ${t} and ${n}.`);return t.test(n)};wt.prototype._evaluateRegExpMatch=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(t instanceof RegExp&&typeof n=="string")return t.test(n);if(n instanceof RegExp&&typeof t=="string")return n.test(t);throw new ae(`Operator "=~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};wt.prototype._evaluateRegExpNotMatch=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(t instanceof RegExp&&typeof n=="string")return!t.test(n);if(n instanceof RegExp&&typeof t=="string")return!n.test(t);throw new ae(`Operator "!~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};wt.prototype._evaluateRegExpExec=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new ae(`RegExp.exec requires the first argument to be a RegExp and the second argument to be a string. Arguments are ${t} and ${n}.`);let i=t.exec(n);return l(i)?i[1]:null};wt.prototype._evaluateToString=function(e){let t=this._left.evaluate(e);if(t instanceof RegExp||t instanceof M||t instanceof h||t instanceof ce)return String(t);throw new ae(`Unexpected function call "${this._value}".`)};function HSe(e){let t=e._left,n=t.length;for(let a=0;a<n;++a)if(t[a]._type!==Ft.LITERAL_NUMBER)return;let i=t[0]._value,o=t[1]._value,r=t[2]._value,s=n===4?t[3]._value:1;return U.fromHsl(i,o,r,s,xB)}function KSe(e){let t=e._left,n=t.length;for(let o=0;o<n;++o)if(t[o]._type!==Ft.LITERAL_NUMBER)return;let i=xB;return i.red=t[0]._value/255,i.green=t[1]._value/255,i.blue=t[2]._value/255,i.alpha=n===4?t[3]._value:1,i}function yx(e){return e%1===0?e.toFixed(1):e.toString()}function Lht(e){let t=yx(e.red),n=yx(e.green),i=yx(e.blue);return`vec3(${t}, ${n}, ${i})`}function yB(e){let t=yx(e.red),n=yx(e.green),i=yx(e.blue),o=yx(e.alpha);return`vec4(${t}, ${n}, ${i}, ${o})`}function JSe(e,t,n,i){let o=e.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=e[s].getShaderExpression(t,n,i);return r}function jSe(e,t){return l(t[e])?t[e]:_f.NULL_SENTINEL}_f.NULL_SENTINEL="czm_infinity";wt.prototype.getShaderExpression=function(e,t,n){let i,o,r,s,a=this._type,c=this._value;l(this._left)&&(Array.isArray(this._left)?o=JSe(this._left,e,t,this):o=this._left.getShaderExpression(e,t,this)),l(this._right)&&(r=this._right.getShaderExpression(e,t,this)),l(this._test)&&(s=this._test.getShaderExpression(e,t,this)),Array.isArray(this._value)&&(c=JSe(this._value,e,t,this));let d,u,m;switch(a){case Ft.VARIABLE:return GS(this)?void 0:jSe(c,e);case Ft.UNARY:if(c==="Boolean")return`bool(${o})`;if(c==="Number")return`float(${o})`;if(c==="round")return`floor(${o} + 0.5)`;if(l(TB[c]))return`${c}(${o})`;if(c==="isNaN")return`(${o} != ${o})`;if(c==="isFinite")return`(abs(${o}) < czm_infinity)`;if(c==="String"||c==="isExactClass"||c==="isClass"||c==="getExactClassName")throw new ae(`Error generating style shader: "${c}" is not supported.`);return c+o;case Ft.BINARY:return c==="%"?`mod(${o}, ${r})`:c==="==="?`(${o} == ${r})`:c==="!=="?`(${o} != ${r})`:c==="atan2"?`atan(${o}, ${r})`:l(_B[c])?`${c}(${o}, ${r})`:`(${o} ${c} ${r})`;case Ft.TERNARY:if(l(m$[c]))return`${c}(${o}, ${r}, ${s})`;break;case Ft.CONDITIONAL:return`(${s} ? ${o} : ${r})`;case Ft.MEMBER:return GS(this._left)?jSe(r,e):r==="r"||r==="x"||r==="0.0"?`${o}[0]`:r==="g"||r==="y"||r==="1.0"?`${o}[1]`:r==="b"||r==="z"||r==="2.0"?`${o}[2]`:r==="a"||r==="w"||r==="3.0"?`${o}[3]`:`${o}[int(${r})]`;case Ft.FUNCTION_CALL:throw new ae(`Error generating style shader: "${c}" is not supported.`);case Ft.ARRAY:if(c.length===4)return`vec4(${c[0]}, ${c[1]}, ${c[2]}, ${c[3]})`;if(c.length===3)return`vec3(${c[0]}, ${c[1]}, ${c[2]})`;if(c.length===2)return`vec2(${c[0]}, ${c[1]})`;throw new ae("Error generating style shader: Invalid array length. Array length should be 2, 3, or 4.");case Ft.REGEX:throw new ae("Error generating style shader: Regular expressions are not supported.");case Ft.VARIABLE_IN_STRING:throw new ae("Error generating style shader: Converting a variable to a string is not supported.");case Ft.LITERAL_NULL:return _f.NULL_SENTINEL;case Ft.LITERAL_BOOLEAN:return c?"true":"false";case Ft.LITERAL_NUMBER:return yx(c);case Ft.LITERAL_STRING:if(l(n)&&n._type===Ft.MEMBER&&(c==="r"||c==="g"||c==="b"||c==="a"||c==="x"||c==="y"||c==="z"||c==="w"||GS(n._left)))return c;if(i=U.fromCssColorString(c,xB),l(i))return Lht(i);throw new ae("Error generating style shader: String literals are not supported.");case Ft.LITERAL_COLOR:if(d=o,c==="color"){if(l(d)){if(d.length>1){let p=d[0],b=d[1];return b!=="1.0"&&(t.translucent=!0),`vec4(${p}, ${b})`}}else return"vec4(1.0)";return`vec4(${d[0]}, 1.0)`}else{if(c==="rgb")return i=KSe(this),l(i)?yB(i):`vec4(${d[0]} / 255.0, ${d[1]} / 255.0, ${d[2]} / 255.0, 1.0)`;if(c==="rgba")return d[3]!=="1.0"&&(t.translucent=!0),i=KSe(this),l(i)?yB(i):`vec4(${d[0]} / 255.0, ${d[1]} / 255.0, ${d[2]} / 255.0, ${d[3]})`;if(c==="hsl")return i=HSe(this),l(i)?yB(i):`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), 1.0)`;if(c==="hsla")return i=HSe(this),l(i)?(i.alpha!==1&&(t.translucent=!0),yB(i)):(d[3]!=="1.0"&&(t.translucent=!0),`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), ${d[3]})`)}break;case Ft.LITERAL_VECTOR:u=o.length,m=`${c}(`;for(let p=0;p<u;++p)m+=o[p],p<u-1&&(m+=", ");return m+=")",m;case Ft.LITERAL_REGEX:throw new ae("Error generating style shader: Regular expressions are not supported.");case Ft.LITERAL_UNDEFINED:return _f.NULL_SENTINEL;case Ft.BUILTIN_VARIABLE:if(c==="tiles3d_tileset_time")return c}};wt.prototype.getVariables=function(e,t){let n,i,o,r=this._type,s=this._value;if(l(this._left))if(Array.isArray(this._left))for(n=this._left,i=n.length,o=0;o<i;++o)n[o].getVariables(e,this);else this._left.getVariables(e,this);if(l(this._right)&&this._right.getVariables(e,this),l(this._test)&&this._test.getVariables(e,this),Array.isArray(this._value))for(n=this._value,i=n.length,o=0;o<i;++o)n[o].getVariables(e,this);let a;switch(r){case Ft.VARIABLE:GS(this)||e.push(s);break;case Ft.VARIABLE_IN_STRING:for(a=bN.exec(s);a!==null;)e.push(a[1]),a=bN.exec(s);break;case Ft.LITERAL_STRING:l(t)&&t._type===Ft.MEMBER&&GS(t._left)&&e.push(s);break}};var Hm=_f;function qb(e){e=e??B.EMPTY_OBJECT,this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._positions=e.positions,this._vertexBatchIds=e.vertexBatchIds,this._indices=e.indices,this._indexCounts=e.indexCounts,this._indexOffsets=e.indexOffsets,this._batchedIndices=e.batchedIndices,this._boundingVolume=e.boundingVolume,this._boundingVolumes=e.boundingVolumes,this._center=e.center??h.ZERO,this._va=void 0,this._sp=void 0,this._spStencil=void 0,this._spPick=void 0,this._uniformMap=void 0,this._vaSwap=void 0,this._rsStencilDepthPass=void 0,this._rsStencilDepthPass3DTiles=void 0,this._rsColorPass=void 0,this._rsPickPass=void 0,this._rsWireframe=void 0,this._commands=[],this._commandsIgnoreShow=[],this._pickCommands=[],this._constantColor=U.clone(U.WHITE),this._highlightColor=this._constantColor,this._batchDirty=!0,this._pickCommandsDirty=!0,this._framesSinceLastRebatch=0,this._updatingAllCommands=!1,this._trianglesLength=this._indices.length/3,this._geometryByteLength=this._indices.byteLength+this._positions.byteLength+this._vertexBatchIds.byteLength,this.debugWireframe=!1,this._debugWireframe=this.debugWireframe,this._wireframeDirty=!1,this.forceRebatch=!1,this.classificationType=e.classificationType??ei.BOTH,this._vertexShaderSource=e._vertexShaderSource,this._fragmentShaderSource=e._fragmentShaderSource,this._attributeLocations=e._attributeLocations,this._uniformMap=e._uniformMap,this._pickId=e._pickId,this._modelMatrix=e._modelMatrix,this._boundingSphere=e._boundingSphere,this._batchIdLookUp={};let t=this._batchIds.length;for(let n=0;n<t;++n){let i=this._batchIds[n];this._batchIdLookUp[i]=n}}Object.defineProperties(qb.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}}});var Wht={position:0,a_batchId:1};function vht(e,t){if(l(e._va))return;let n=et.createVertexBuffer({context:t,typedArray:e._positions,usage:Ie.STATIC_DRAW}),i=et.createVertexBuffer({context:t,typedArray:e._vertexBatchIds,usage:Ie.STATIC_DRAW}),o=et.createIndexBuffer({context:t,typedArray:e._indices,usage:Ie.DYNAMIC_DRAW,indexDatatype:e._indices.BYTES_PER_ELEMENT===2?De.UNSIGNED_SHORT:De.UNSIGNED_INT}),r=[{index:0,vertexBuffer:n,componentDatatype:J.fromTypedArray(e._positions),componentsPerAttribute:3},{index:1,vertexBuffer:i,componentDatatype:J.fromTypedArray(e._vertexBatchIds),componentsPerAttribute:1}];e._va=new Dn({context:t,attributes:r,indexBuffer:o}),t.webgl2&&(e._vaSwap=new Dn({context:t,attributes:r,indexBuffer:et.createIndexBuffer({context:t,sizeInBytes:o.sizeInBytes,usage:Ie.DYNAMIC_DRAW,indexDatatype:o.indexDatatype})})),e._batchedPositions=void 0,e._transferrableBatchIds=void 0,e._vertexBatchIds=void 0}function Fht(e,t){if(l(e._sp))return;let n=e._batchTable,i=e._attributeLocations??Wht,o=e._pickId,r=e._vertexShaderSource,s=e._fragmentShaderSource;if(l(r)){e._sp=en.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:i}),e._spStencil=e._sp,s=ze.replaceMain(s,"czm_non_pick_main"),s=`${s}void main() { czm_non_pick_main(); out_FragColor = ${o}; } `,e._spPick=en.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:i});return}let a=n.getVertexShaderCallback(!1,"a_batchId",void 0)(qC),c=n.getFragmentShaderCallback(!1,void 0,!0)(Qy);o=n.getPickId();let d=new ze({sources:[a]}),u=new ze({defines:["VECTOR_TILE"],sources:[c]});e._sp=en.fromCache({context:t,vertexShaderSource:d,fragmentShaderSource:u,attributeLocations:i}),d=new ze({sources:[qC]}),u=new ze({defines:["VECTOR_TILE"],sources:[Qy]}),e._spStencil=en.fromCache({context:t,vertexShaderSource:d,fragmentShaderSource:u,attributeLocations:i}),c=ze.replaceMain(c,"czm_non_pick_main"),c=`${c} void main() { czm_non_pick_main(); out_FragColor = ${o}; } `;let m=new ze({sources:[a]}),p=new ze({defines:["VECTOR_TILE"],sources:[c]});e._spPick=en.fromCache({context:t,vertexShaderSource:m,fragmentShaderSource:p,attributeLocations:i})}function QSe(e){let t=e?ti.EQUAL:ti.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:t,frontOperation:{fail:Wt.KEEP,zFail:Wt.DECREMENT_WRAP,zPass:Wt.KEEP},backFunction:t,backOperation:{fail:Wt.KEEP,zFail:Wt.INCREMENT_WRAP,zPass:Wt.KEEP},reference:Kt.CESIUM_3D_TILE_MASK,mask:Kt.CESIUM_3D_TILE_MASK},stencilMask:Kt.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:ac.LESS_OR_EQUAL},depthMask:!1}}var Iht={stencilTest:{enabled:!0,frontFunction:ti.NOT_EQUAL,frontOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},backFunction:ti.NOT_EQUAL,backOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},reference:0,mask:Kt.CLASSIFICATION_MASK},stencilMask:Kt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:tn.PRE_MULTIPLIED_ALPHA_BLEND},Pht={stencilTest:{enabled:!0,frontFunction:ti.NOT_EQUAL,frontOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},backFunction:ti.NOT_EQUAL,backOperation:{fail:Wt.ZERO,zFail:Wt.ZERO,zPass:Wt.ZERO},reference:0,mask:Kt.CLASSIFICATION_MASK},stencilMask:Kt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function Xht(e){l(e._rsStencilDepthPass)||(e._rsStencilDepthPass=Oe.fromCache(QSe(!1)),e._rsStencilDepthPass3DTiles=Oe.fromCache(QSe(!0)),e._rsColorPass=Oe.fromCache(Iht),e._rsPickPass=Oe.fromCache(Pht))}var AS=new I,qSe=new h;function Nht(e,t){if(l(e._uniformMap))return;let n={u_modifiedModelViewProjection:function(){let i=t.uniformState.view,o=t.uniformState.projection;return I.clone(i,AS),I.multiplyByPoint(AS,e._center,qSe),I.setTranslation(AS,qSe,AS),I.multiply(o,AS,AS),AS},u_highlightColor:function(){return e._highlightColor}};e._uniformMap=e._batchTable.getUniformMapCallback()(n)}function h$(e,t,n,i,o,r,s){let a=e.constructor.BYTES_PER_ELEMENT,c=r.length;for(let d=0;d<c;++d){let u=r[d],m=s[u],p=i[m],b=o[m],f=new e.constructor(e.buffer,a*p,b);t.set(f,n),i[m]=n,n+=b}return n}function Yht(e,t){let n=e._indices,i=e._indexOffsets,o=e._indexCounts,r=e._batchIdLookUp,s=new n.constructor(n.length),a=t.pop(),c=[a],d=h$(n,s,0,i,o,a.batchIds,r);for(a.offset=0,a.count=d;t.length>0;){let u=t.pop();if(U.equals(u.color,a.color))d=h$(n,s,d,i,o,u.batchIds,r),a.batchIds=a.batchIds.concat(u.batchIds),a.count=d-a.offset;else{let m=d;d=h$(n,s,d,i,o,u.batchIds,r),u.offset=m,u.count=d-m,c.push(u),a=u}}e._va.indexBuffer.copyFromArrayView(s),e._indices=s,e._batchedIndices=c}function f$(e,t,n,i,o,r,s){let a=e.bytesPerIndex,c=r.length;for(let d=0;d<c;++d){let u=r[d],m=s[u],p=i[m],b=o[m];t.copyFromBuffer(e,p*a,n*a,b*a),i[m]=n,n+=b}return n}function wht(e,t){let n=e._indexOffsets,i=e._indexCounts,o=e._batchIdLookUp,r=t.pop(),s=[r],a=e._va.indexBuffer,c=e._vaSwap.indexBuffer,d=f$(a,c,0,n,i,r.batchIds,o);for(r.offset=0,r.count=d;t.length>0;){let m=t.pop();if(U.equals(m.color,r.color))d=f$(a,c,d,n,i,m.batchIds,o),r.batchIds=r.batchIds.concat(m.batchIds),r.count=d-r.offset;else{let p=d;d=f$(a,c,d,n,i,m.batchIds,o),m.offset=p,m.count=d-p,s.push(m),r=m}}let u=e._va;e._va=e._vaSwap,e._vaSwap=u,e._batchedIndices=s}function Mht(e,t){return t.color.toRgba()-e.color.toRgba()}function kht(e,t){if(!e._batchDirty)return!1;let n=e._batchedIndices,i=n.length,o=!1,r={};for(let s=0;s<i;++s){let c=n[s].color.toRgba();if(l(r[c])){o=!0;break}else r[c]=!0}if(!o)return e._batchDirty=!1,!1;if(o&&!e.forceRebatch&&e._framesSinceLastRebatch<120){++e._framesSinceLastRebatch;return}return n.sort(Mht),t.webgl2?wht(e,n):Yht(e,n),e._framesSinceLastRebatch=0,e._batchDirty=!1,e._pickCommandsDirty=!0,e._wireframeDirty=!0,!0}function Uht(e,t){let n=kht(e,t),i=e._commands,o=e._batchedIndices,r=o.length,s=r*2;if(l(i)&&!n&&i.length===s)return;i.length=s;let a=e._va,c=e._sp,d=e._modelMatrix??I.IDENTITY,u=e._uniformMap,m=e._boundingVolume;for(let p=0;p<r;++p){let b=o[p].offset,f=o[p].count,y=i[p*2];l(y)||(y=i[p*2]=new ot({owner:e})),y.vertexArray=a,y.modelMatrix=d,y.offset=b,y.count=f,y.renderState=e._rsStencilDepthPass,y.shaderProgram=c,y.uniformMap=u,y.boundingVolume=m,y.cull=!1,y.pass=We.TERRAIN_CLASSIFICATION;let _=ot.shallowClone(y,y.derivedCommands.tileset);_.renderState=e._rsStencilDepthPass3DTiles,_.pass=We.CESIUM_3D_TILE_CLASSIFICATION,y.derivedCommands.tileset=_;let S=i[p*2+1];l(S)||(S=i[p*2+1]=new ot({owner:e})),S.vertexArray=a,S.modelMatrix=d,S.offset=b,S.count=f,S.renderState=e._rsColorPass,S.shaderProgram=c,S.uniformMap=u,S.boundingVolume=m,S.cull=!1,S.pass=We.TERRAIN_CLASSIFICATION;let Z=ot.shallowClone(S,S.derivedCommands.tileset);Z.pass=We.CESIUM_3D_TILE_CLASSIFICATION,S.derivedCommands.tileset=Z}e._commandsDirty=!0}function Dht(e,t){if(e.classificationType===ei.TERRAIN||!t.invertClassification||l(e._commandsIgnoreShow)&&!e._commandsDirty)return;let n=e._commands,i=e._commandsIgnoreShow,o=e._spStencil,r=n.length,s=i.length=r/2,a=0;for(let c=0;c<s;++c){let d=i[c]=ot.shallowClone(n[a],i[c]);d.shaderProgram=o,d.pass=We.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,a+=2}e._commandsDirty=!1}function Oht(e){if(!e._pickCommandsDirty)return;let t=e._indexOffsets.length,n=e._pickCommands;n.length=t*2;let i=e._va,o=e._spStencil,r=e._spPick,s=e._modelMatrix??I.IDENTITY,a=e._uniformMap;for(let c=0;c<t;++c){let d=e._indexOffsets[c],u=e._indexCounts[c],m=l(e._boundingVolumes)?e._boundingVolumes[c]:e.boundingVolume,p=n[c*2];l(p)||(p=n[c*2]=new ot({owner:e,pickOnly:!0})),p.vertexArray=i,p.modelMatrix=s,p.offset=d,p.count=u,p.renderState=e._rsStencilDepthPass,p.shaderProgram=o,p.uniformMap=a,p.boundingVolume=m,p.pass=We.TERRAIN_CLASSIFICATION;let b=ot.shallowClone(p,p.derivedCommands.tileset);b.renderState=e._rsStencilDepthPass3DTiles,b.pass=We.CESIUM_3D_TILE_CLASSIFICATION,p.derivedCommands.tileset=b;let f=n[c*2+1];l(f)||(f=n[c*2+1]=new ot({owner:e,pickOnly:!0})),f.vertexArray=i,f.modelMatrix=s,f.offset=d,f.count=u,f.renderState=e._rsPickPass,f.shaderProgram=r,f.uniformMap=a,f.boundingVolume=m,f.pass=We.TERRAIN_CLASSIFICATION;let y=ot.shallowClone(f,f.derivedCommands.tileset);y.pass=We.CESIUM_3D_TILE_CLASSIFICATION,f.derivedCommands.tileset=y}e._pickCommandsDirty=!1}qb.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Qs(e,r)}};qb.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function Bht(e,t){e._updatingAllCommands=!0;let n=e._batchIds,i=n.length,o;for(o=0;o<i;++o){let s=n[o],a=t[s];a.show=!0,a.color=U.WHITE}let r=e._batchedIndices;for(i=r.length,o=0;o<i;++o)r[o].color=U.clone(U.WHITE);e._updatingAllCommands=!1,e._batchDirty=!0}var zht=new U,Hht=U.WHITE,Kht=!0,Jht=/\$/;qb.prototype.applyStyle=function(e,t){if(!l(e)){Bht(this,t);return}let n=e.color,i=n instanceof Hm&&!Jht.test(n.expression);this._updatingAllCommands=i;let o=this._batchIds,r=o.length,s;for(s=0;s<r;++s){let a=o[s],c=t[a];c.color=l(e.color)?e.color.evaluateColor(c,zht):Hht,c.show=l(e.show)?e.show.evaluate(c):Kht}if(i){let a=this._batchedIndices;for(r=a.length,s=0;s<r;++s)a[s].color=U.clone(U.WHITE);this._updatingAllCommands=!1,this._batchDirty=!0}};qb.prototype.updateCommands=function(e,t){if(this._updatingAllCommands)return;let n=this._batchIdLookUp,i=n[e];if(!l(i))return;let o=this._indexOffsets,r=this._indexCounts,s=o[i],a=r[i],c=this._batchedIndices,d=c.length,u;for(u=0;u<d;++u){let y=c[u].offset,_=c[u].count;if(s>=y&&s<y+_)break}c.push(new zp({color:U.clone(t),offset:s,count:a,batchIds:[e]}));let m=[],p=[],b=c[u].batchIds,f=b.length;for(let y=0;y<f;++y){let _=b[y];if(_===e)continue;let S=n[_];o[S]<s?m.push(_):p.push(_)}p.length!==0&&c.push(new zp({color:U.clone(c[u].color),offset:s+a,count:c[u].offset+c[u].count-(s+a),batchIds:p})),m.length!==0?(c[u].count=s-c[u].offset,c[u].batchIds=m):c.splice(u,1),this._batchDirty=!0};function $Se(e,t,n,i){let o=e.classificationType,r=o!==ei.CESIUM_3D_TILE,s=o!==ei.TERRAIN,a=t.commandList,c=n.length,d,u;for(u=0;u<c;++u)r&&(d=n[u],d.pass=We.TERRAIN_CLASSIFICATION,a.push(d)),s&&(d=n[u].derivedCommands.tileset,d.pass=We.CESIUM_3D_TILE_CLASSIFICATION,a.push(d));if(!(!t.invertClassification||!l(i)))for(c=i.length,u=0;u<c;++u)a.push(i[u])}function jht(e,t){let n=e.commandList,i=t.length;for(let o=0;o<i;o+=2){let r=t[o+1];r.pass=We.OPAQUE,n.push(r)}}function Qht(e){let t=e.debugWireframe===e._debugWireframe;if(t=t&&!(e.debugWireframe&&e._wireframeDirty),t)return;l(e._rsWireframe)||(e._rsWireframe=Oe.fromCache({}));let n,i;e.debugWireframe?(n=e._rsWireframe,i=Fe.LINES):(n=e._rsColorPass,i=Fe.TRIANGLES);let o=e._commands,r=o.length;for(let s=0;s<r;s+=2){let a=o[s+1];a.renderState=n,a.primitiveType=i}e._debugWireframe=e.debugWireframe,e._wireframeDirty=!1}qb.prototype.update=function(e){let t=e.context;vht(this,t),Fht(this,t),Xht(this),Nht(this,t);let n=e.passes;n.render&&(Uht(this,t),Dht(this,e),Qht(this),this._debugWireframe?jht(e,this._commands):$Se(this,e,this._commands,this._commandsIgnoreShow)),n.pick&&(Oht(this),$Se(this,e,this._pickCommands))};qb.prototype.isDestroyed=function(){return!1};qb.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._vaSwap=this._vaSwap&&this._vaSwap.destroy(),me(this)};var ES=qb;function Fu(e){this._boxes=e.boxes,this._boxBatchIds=e.boxBatchIds,this._cylinders=e.cylinders,this._cylinderBatchIds=e.cylinderBatchIds,this._ellipsoids=e.ellipsoids,this._ellipsoidBatchIds=e.ellipsoidBatchIds,this._spheres=e.spheres,this._sphereBatchIds=e.sphereBatchIds,this._modelMatrix=e.modelMatrix,this._batchTable=e.batchTable,this._boundingVolume=e.boundingVolume,this._center=e.center,l(this._center)||(l(this._boundingVolume)?this._center=h.clone(this._boundingVolume.center):this._center=h.clone(h.ZERO)),this._boundingVolumes=void 0,this._batchedIndices=void 0,this._indices=void 0,this._indexOffsets=void 0,this._indexCounts=void 0,this._positions=void 0,this._vertexBatchIds=void 0,this._batchIds=void 0,this._batchTableColors=void 0,this._packedBuffer=void 0,this._ready=!1,this._promise=void 0,this._error=void 0,this._verticesPromise=void 0,this._primitive=void 0,this.debugWireframe=!1,this.forceRebatch=!1,this.classificationType=ei.BOTH}Object.defineProperties(Fu.prototype,{trianglesLength:{get:function(){return l(this._primitive)?this._primitive.trianglesLength:0}},geometryByteLength:{get:function(){return l(this._primitive)?this._primitive.geometryByteLength:0}},ready:{get:function(){return this._ready}}});Fu.packedBoxLength=I.packedLength+h.packedLength;Fu.packedCylinderLength=I.packedLength+2;Fu.packedEllipsoidLength=I.packedLength+h.packedLength;Fu.packedSphereLength=h.packedLength+1;function qht(e){let t=new Float64Array(I.packedLength+h.packedLength),n=0;return h.pack(e._center,t,n),n+=h.packedLength,I.pack(e._modelMatrix,t,n),t}function $ht(e,t){let n=0,i=t[n++],o=t[n++],r=e._boundingVolumes=new Array(o);for(let c=0;c<o;++c)r[c]=le.unpack(t,n),n+=le.packedLength;let s=t[n++],a=e._batchedIndices=new Array(s);for(let c=0;c<s;++c){let d=U.unpack(t,n);n+=U.packedLength;let u=t[n++],m=t[n++],p=t[n++],b=new Array(p);for(let f=0;f<p;++f)b[f]=t[n++];a[c]=new zp({color:d,offset:u,count:m,batchIds:b})}return i}var eft=new Jn("createVectorTileGeometries",5),tft=new U;function nft(e){if(!l(e._primitive)&&!l(e._verticesPromise)){let t=e._boxes,n=e._boxBatchIds,i=e._cylinders,o=e._cylinderBatchIds,r=e._ellipsoids,s=e._ellipsoidBatchIds,a=e._spheres,c=e._sphereBatchIds,d=e._batchTableColors,u=e._packedBuffer;if(!l(d)){let f=0;l(e._boxes)&&(t=e._boxes=t.slice(),n=e._boxBatchIds=n.slice(),f+=n.length),l(e._cylinders)&&(i=e._cylinders=i.slice(),o=e._cylinderBatchIds=o.slice(),f+=o.length),l(e._ellipsoids)&&(r=e._ellipsoids=r.slice(),s=e._ellipsoidBatchIds=s.slice(),f+=s.length),l(e._spheres)&&(a=e._sphere=a.slice(),c=e._sphereBatchIds=c.slice(),f+=c.length),d=e._batchTableColors=new Uint32Array(f);let y=e._batchTable;for(let _=0;_<f;++_){let S=y.getColor(_,tft);d[_]=S.toRgba()}u=e._packedBuffer=qht(e)}let m=[];l(t)&&m.push(t.buffer,n.buffer),l(i)&&m.push(i.buffer,o.buffer),l(r)&&m.push(r.buffer,s.buffer),l(a)&&m.push(a.buffer,c.buffer),m.push(d.buffer,u.buffer);let p={boxes:l(t)?t.buffer:void 0,boxBatchIds:l(t)?n.buffer:void 0,cylinders:l(i)?i.buffer:void 0,cylinderBatchIds:l(i)?o.buffer:void 0,ellipsoids:l(r)?r.buffer:void 0,ellipsoidBatchIds:l(r)?s.buffer:void 0,spheres:l(a)?a.buffer:void 0,sphereBatchIds:l(a)?c.buffer:void 0,batchTableColors:d.buffer,packedBuffer:u.buffer},b=e._verticesPromise=eft.scheduleTask(p,m);return l(b)?b.then(function(f){if(e.isDestroyed())return;let y=new Float64Array(f.packedBuffer);$ht(e,y)===2?e._indices=new Uint16Array(f.indices):e._indices=new Uint32Array(f.indices),e._indexOffsets=new Uint32Array(f.indexOffsets),e._indexCounts=new Uint32Array(f.indexCounts),e._positions=new Float32Array(f.positions),e._vertexBatchIds=new Uint16Array(f.vertexBatchIds),e._batchIds=new Uint16Array(f.batchIds),ift(e),e._ready=!0}).catch(f=>{e.isDestroyed()||(e._error=f)}):void 0}}function ift(e){l(e._primitive)||(e._primitive=new ES({batchTable:e._batchTable,positions:e._positions,batchIds:e._batchIds,vertexBatchIds:e._vertexBatchIds,indices:e._indices,indexOffsets:e._indexOffsets,indexCounts:e._indexCounts,batchedIndices:e._batchedIndices,boundingVolume:e._boundingVolume,boundingVolumes:e._boundingVolumes,center:e._center,pickObject:e._pickObject??e}),e._boxes=void 0,e._boxBatchIds=void 0,e._cylinders=void 0,e._cylinderBatchIds=void 0,e._ellipsoids=void 0,e._ellipsoidBatchIds=void 0,e._spheres=void 0,e._sphereBatchIds=void 0,e._center=void 0,e._modelMatrix=void 0,e._batchTable=void 0,e._boundingVolume=void 0,e._boundingVolumes=void 0,e._batchedIndices=void 0,e._indices=void 0,e._indexOffsets=void 0,e._indexCounts=void 0,e._positions=void 0,e._vertexBatchIds=void 0,e._batchIds=void 0,e._batchTableColors=void 0,e._packedBuffer=void 0,e._verticesPromise=void 0)}Fu.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};Fu.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};Fu.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};Fu.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};Fu.prototype.update=function(e){if(!this._ready){if(l(this._promise)||(this._promise=nft(this)),l(this._error)){let t=this._error;throw this._error=void 0,t}return}this._primitive.debugWireframe=this.debugWireframe,this._primitive.forceRebatch=this.forceRebatch,this._primitive.classificationType=this.classificationType,this._primitive.update(e)};Fu.prototype.isDestroyed=function(){return!1};Fu.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};var $b=Fu;var p$=class{constructor(t,n,i,o,r){this._tileset=t,this._tile=n,this._resource=i,this._geometries=void 0,this._metadata=void 0,this._batchTable=void 0,this._features=void 0,this.featurePropertiesDirty=!1,this._group=void 0,this._ready=!1,sft(this,o,r)}get featuresLength(){return l(this._batchTable)?this._batchTable.featuresLength:0}get pointsLength(){return 0}get trianglesLength(){return l(this._geometries)?this._geometries.trianglesLength:0}get geometryByteLength(){return l(this._geometries)?this._geometries.geometryByteLength:0}get texturesByteLength(){return 0}get batchTableByteLength(){return l(this._batchTable)?this._batchTable.batchTableByteLength:0}get innerContents(){}get ready(){return this._ready}get tileset(){return this._tileset}get tile(){return this._tile}get url(){return this._resource.getUrlComponent(!0)}get metadata(){return this._metadata}set metadata(t){this._metadata=t}get batchTable(){return this._batchTable}get group(){return this._group}set group(t){this._group=t}hasProperty(t,n){return this._batchTable.hasProperty(t,n)}getFeature(t){return eZe(this),this._features[t]}applyDebugSettings(t,n){l(this._geometries)&&this._geometries.applyDebugSettings(t,n)}applyStyle(t){eZe(this),l(this._geometries)&&this._geometries.applyStyle(t,this._features)}update(t,n){l(this._geometries)&&(this._geometries.classificationType=this._tileset.classificationType,this._geometries.debugWireframe=this._tileset.debugWireframe,this._geometries.update(n)),l(this._batchTable)&&this._geometries.ready&&(this._batchTable.update(t,n),this._ready=!0)}pick(t,n,i){}isDestroyed(){return!1}destroy(){return this._geometries=this._geometries&&this._geometries.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),me(this)}};function oft(e){return function(t,n){l(e._geometries)&&e._geometries.updateCommands(t,n)}}function rft(e,t){let n,i,o,r,s,a=e.BOXES_LENGTH??0,c=e.CYLINDERS_LENGTH??0,d=e.ELLIPSOIDS_LENGTH??0,u=e.SPHERES_LENGTH??0;if(a>0&&l(e.BOX_BATCH_IDS)){let f=t.byteOffset+e.BOX_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,f,a)}if(c>0&&l(e.CYLINDER_BATCH_IDS)){let f=t.byteOffset+e.CYLINDER_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,f,c)}if(d>0&&l(e.ELLIPSOID_BATCH_IDS)){let f=t.byteOffset+e.ELLIPSOID_BATCH_IDS.byteOffset;o=new Uint16Array(t.buffer,f,d)}if(u>0&&l(e.SPHERE_BATCH_IDS)){let f=t.byteOffset+e.SPHERE_BATCH_IDS.byteOffset;r=new Uint16Array(t.buffer,f,u)}let m=l(n)||l(i)||l(o)||l(r),p=a>0&&!l(n)||c>0&&!l(i)||d>0&&!l(o)||u>0&&!l(r);if(m&&p)throw new ae("If one group of batch ids is defined, then all batch ids must be defined");if(!l(n)&&!l(i)&&!l(o)&&!l(r)){let f=0;if(!l(n)&&a>0)for(n=new Uint16Array(a),s=0;s<a;++s)n[s]=f++;if(!l(i)&&c>0)for(i=new Uint16Array(c),s=0;s<c;++s)i[s]=f++;if(!l(o)&&d>0)for(o=new Uint16Array(d),s=0;s<d;++s)o[s]=f++;if(!l(r)&&u>0)for(r=new Uint16Array(u),s=0;s<u;++s)r[s]=f++}return{boxes:n,cylinders:i,ellipsoids:o,spheres:r}}var LS=Uint32Array.BYTES_PER_ELEMENT;function sft(e,t,n){n=n??0;let i=new Uint8Array(t),o=new DataView(t);n+=LS;let r=o.getUint32(n,!0);if(r!==1)throw new ae(`Only Geometry tile version 1 is supported. Version ${r} is not.`);n+=LS;let s=o.getUint32(n,!0);if(n+=LS,s===0){e._ready=!0;return}let a=o.getUint32(n,!0);if(n+=LS,a===0)throw new ae("Feature table must have a byte length greater than zero");let c=o.getUint32(n,!0);n+=LS;let d=o.getUint32(n,!0);n+=LS;let u=o.getUint32(n,!0);n+=LS;let m=Vr(i,n,a);n+=a;let p=new Uint8Array(t,n,c);n+=c;let b,f;d>0&&(b=Vr(i,n,d),n+=d,u>0&&(f=new Uint8Array(t,n,u),f=new Uint8Array(f)));let y=m.BOXES_LENGTH??0,_=m.CYLINDERS_LENGTH??0,S=m.ELLIPSOIDS_LENGTH??0,Z=m.SPHERES_LENGTH??0,V=y+_+S+Z,C=new ff(e,V,b,f,oft(e));if(e._batchTable=C,V===0)return;let G=e.tile.computedTransform,E;l(m.RTC_CENTER)&&(E=h.unpack(m.RTC_CENTER),I.multiplyByPoint(G,E,E));let v=rft(m,p);if(y>0||_>0||S>0||Z>0){let F,P,N,g;if(y>0){let R=p.byteOffset+m.BOXES.byteOffset;F=new Float32Array(p.buffer,R,$b.packedBoxLength*y)}if(_>0){let R=p.byteOffset+m.CYLINDERS.byteOffset;P=new Float32Array(p.buffer,R,$b.packedCylinderLength*_)}if(S>0){let R=p.byteOffset+m.ELLIPSOIDS.byteOffset;N=new Float32Array(p.buffer,R,$b.packedEllipsoidLength*S)}if(Z>0){let R=p.byteOffset+m.SPHERES.byteOffset;g=new Float32Array(p.buffer,R,$b.packedSphereLength*Z)}return e._geometries=new $b({boxes:F,boxBatchIds:v.boxes,cylinders:P,cylinderBatchIds:v.cylinders,ellipsoids:N,ellipsoidBatchIds:v.ellipsoids,spheres:g,sphereBatchIds:v.spheres,center:E,modelMatrix:G,batchTable:C,boundingVolume:e.tile.boundingVolume.boundingVolume}),e}return Promise.resolve(e)}function eZe(e){let t=e.featuresLength;if(!l(e._features)&&t>0){let n=new Array(t);l(e._geometries)&&e._geometries.createFeatures(e,n),e._features=n}}var gN=p$;var Q2i=x(T(),1);var P2i=x(T(),1);var xx={};xx.parseAllBoundingVolumeSemantics=function(e,t){return{boundingVolume:xx.parseBoundingVolumeSemantic(e,t),minimumHeight:xx._parseMinimumHeight(e,t),maximumHeight:xx._parseMaximumHeight(e,t)}};xx.parseBoundingVolumeSemantic=function(e,t){let n=`${e}_BOUNDING_BOX`,i=t.getPropertyBySemantic(n);if(l(i))return{box:i};let o=`${e}_BOUNDING_REGION`,r=t.getPropertyBySemantic(o);if(l(r))return{region:r};let s=`${e}_BOUNDING_SPHERE`,a=t.getPropertyBySemantic(s);if(l(a))return{sphere:a}};xx._parseMinimumHeight=function(e,t){let n=`${e}_MINIMUM_HEIGHT`;return t.getPropertyBySemantic(n)};xx._parseMaximumHeight=function(e,t){let n=`${e}_MAXIMUM_HEIGHT`;return t.getPropertyBySemantic(n)};var Tx=xx;var $C=class e{constructor(t,n,i){let o=n.implicitTileset,r=n.implicitCoordinates;this._implicitTileset=o,this._implicitCoordinates=r,this._implicitSubtree=void 0,this._tileset=t,this._tile=n,this._resource=i,this._metadata=void 0,this.featurePropertiesDirty=!1,this._group=void 0;let s=r.getTemplateValues(),a=o.subtreeUriTemplate.getDerivedResource({templateValues:s});this._url=a.getUrlComponent(!0),this._ready=!1}get featuresLength(){return 0}get pointsLength(){return 0}get trianglesLength(){return 0}get geometryByteLength(){return 0}get texturesByteLength(){return 0}get batchTableByteLength(){return 0}get innerContents(){}get ready(){return this._ready}get tileset(){return this._tileset}get tile(){return this._tile}get url(){return this._url}get metadata(){}set metadata(t){}get batchTable(){}get group(){return this._group}set group(t){this._group=t}static async fromSubtreeJson(t,n,i,o,r,s){s=s??0;let a;l(r)&&(a=new Uint8Array(r,s));let c=n.implicitTileset,d=n.implicitCoordinates,u=await z0.fromSubtreeJson(i,o,a,c,d),m=new e(t,n,i);return m._implicitSubtree=u,aft(m,u),m._ready=!0,m}hasProperty(t,n){return!1}getFeature(t){}applyDebugSettings(t,n){}applyStyle(t){}update(t,n){}pick(t,n,i){}isDestroyed(){return!1}destroy(){return this._implicitSubtree=this._implicitSubtree&&this._implicitSubtree.destroy(),me(this)}};function aft(e,t){let n=e._tile,i=e._implicitCoordinates.childIndex,o=lft(e,t,n,i),r=e._tileset.statistics;n.children.push(o.rootTile),r.numberOfTilesTotal++;let s=cft(e,t,o.bottomRow);for(let a=0;a<s.length;a++){let c=s[a],d=c.tile,u=yft(e,d,c.childIndex);d.children.push(u),r.numberOfTilesTotal++}}function cft(e,t,n){let i=[],o=e._implicitTileset.branchingFactor;for(let r=0;r<n.length;r++){let s=n[r];if(l(s))for(let a=0;a<o;a++){let c=r*o+a;t.childSubtreeIsAvailableAtIndex(c)&&i.push({tile:s,childIndex:a})}}return i}function lft(e,t,n,i){let s=tZe(e,t,n,i,0,!0),a=e._tileset.statistics,c=[s],d=[],u=e._implicitTileset;for(let m=1;m<u.subtreeLevels;m++){let p=t.getLevelOffset(m),b=u.branchingFactor*c.length;for(let f=0;f<b;f++){let y=p+f;if(!t.tileIsAvailableAtIndex(y)){d.push(void 0);continue}let _=t.getParentMortonIndex(f),S=c[_],Z=f%u.branchingFactor,V=tZe(e,t,S,Z,y);S.children.push(V),a.numberOfTilesTotal++,d.push(V)}c=d,d=[]}return{rootTile:s,bottomRow:c}}function nZe(e,t,n){let i=xm.TILE_GEOMETRIC_ERROR;return l(e)&&e.hasPropertyBySemantic(i)?e.getPropertyBySemantic(i):t.geometricError/Math.pow(2,n.level)}function tZe(e,t,n,i,o,r){let s=e._implicitTileset,a;r??!1?a=n.implicitCoordinates:a=n.implicitCoordinates.getChildCoordinates(i);let c,d;l(t.tilePropertyTableJson)&&(c=t.getTileMetadataView(a),d=Tx.parseAllBoundingVolumeSemantics("TILE",c));let m=t.contentPropertyTableJsons.length,p=!1;for(let G=0;G<m;G++)if(t.contentIsAvailableAtCoordinates(a,G)){p=!0;break}let b=mft(s,a,i,r,n,d),f=[];for(let G=0;G<s.contentCount;G++){if(!t.contentIsAvailableAtIndex(o,G))continue;let F={uri:s.contentUriTemplates[G].getDerivedResource({templateValues:a.getTemplateValues()}).url},P;if(t.contentPropertyTableJsons.length>0){let g=t.getContentMetadataView(a,G);P=Tx.parseAllBoundingVolumeSemantics("CONTENT",g)}let N=hft(b,P);l(N)&&(F.boundingVolume=N),f.push(It(F,s.contentHeaders[G]))}let y=nZe(c,s,a),_={boundingVolume:b,geometricError:y,refine:s.refine,contents:f},S=!0,Z=Je(s.tileHeader,S);delete Z.boundingVolume,delete Z.transform,delete Z.metadata;let V=It(_,Z,S),C=aZe(e,s.baseResource,V,n);return C.implicitCoordinates=a,C.implicitSubtree=t,C.metadata=c,C.hasImplicitContentMetadata=p,C}function ZB(e,t){return l(e)&&l(t)&&(l(t.minimumHeight)||l(t.maximumHeight))&&(Qi(e,"3DTILES_bounding_volume_S2")||l(e.region))}function g$(e,t){l(t)&&(Qi(e,"3DTILES_bounding_volume_S2")?uft(e.extensions["3DTILES_bounding_volume_S2"],t.minimumHeight,t.maximumHeight):l(e.region)&&dft(e.region,t.minimumHeight,t.maximumHeight))}function dft(e,t,n){l(t)&&(e[4]=t),l(n)&&(e[5]=n)}function uft(e,t,n){l(t)&&(e.minimumHeight=t),l(n)&&(e.maximumHeight=n)}function mft(e,t,n,i,o,r){let s;return!l(r)||!l(r.boundingVolume)||!ZB(r.boundingVolume,r)&&ZB(e.boundingVolume,r)?s=iZe(e,t,n,i??!1,o):s=r.boundingVolume,g$(s,r),s}function hft(e,t){let n;return l(t)&&(n=t.boundingVolume),ZB(n,t)?g$(n,t):ZB(e,t)&&(n=Je(e,!0),g$(n,t)),n}function iZe(e,t,n,i,o){let r=e.boundingVolume;return Qi(r,"3DTILES_bounding_volume_S2")?oZe(i,o,n,t.level,t.x,t.y,t.z):l(r.region)?{region:sZe(r.region,t.level,t.x,t.y,t.z)}:{box:rZe(r.box,t.level,t.x,t.y,t.z)}}function oZe(e,t,n,i,o,r,s){let a=t._boundingVolume;if(e)return{extensions:{"3DTILES_bounding_volume_S2":{token:mb.getTokenFromId(a.s2Cell._cellId),minimumHeight:a.minimumHeight,maximumHeight:a.maximumHeight}}};let c=Number(t._boundingVolume.s2Cell._cellId>>BigInt(61)),d=c%2===0?_1.encode2D(i,o,r):_1.encode2D(i,r,o),u=mb.fromFacePositionLevel(c,BigInt(d),i),m,p;if(l(s)){let b=(a.maximumHeight+a.minimumHeight)/2;m=n<4?a.minimumHeight:b,p=n<4?b:a.maximumHeight}else m=a.minimumHeight,p=a.maximumHeight;return{extensions:{"3DTILES_bounding_volume_S2":{token:mb.getTokenFromId(u._cellId),minimumHeight:m,maximumHeight:p}}}}var fft=new h,pft=new h,b$=new h,bft=new q;function rZe(e,t,n,i,o){if(t===0)return e;let r=h.unpack(e,0,pft),s=q.unpack(e,3,bft),a=Math.pow(2,-t),c=-1+(2*n+1)*a,d=-1+(2*i+1)*a,u=0,m=h.fromElements(a,a,1,fft);l(o)&&(u=-1+(2*o+1)*a,m.z=a);let p=h.fromElements(c,d,u,b$);p=q.multiplyByVector(s,p,b$),p=h.add(p,r,b$);let b=q.clone(s);b=q.multiplyByScale(b,m,b);let f=new Array(12);return h.pack(p,f),q.pack(b,f,3),f}var gft=new re;function sZe(e,t,n,i,o){if(t===0)return e.slice();let r=re.unpack(e,0,gft),s=e[4],a=e[5],c=Math.pow(2,-t),d=c*r.width,u=L.negativePiToPi(r.west+n*d),m=L.negativePiToPi(u+d),p=c*r.height,b=L.negativePiToPi(r.south+i*p),f=L.negativePiToPi(b+p),y=s,_=a;if(l(o)){let S=c*(a-s);y+=o*S,_=y+S}return[u,b,m,f,y,_]}function yft(e,t,n){let i=e._implicitTileset,o=t.implicitCoordinates.getChildCoordinates(n),r=iZe(i,o,n,!1,t),s=nZe(void 0,i,o),a=i.subtreeUriTemplate.getDerivedResource({templateValues:o.getTemplateValues()}).url,c={boundingVolume:r,geometricError:s,refine:i.refine,contents:[{uri:a}]},d=aZe(e,i.baseResource,c,t);return d.implicitTileset=i,d.implicitCoordinates=o,d}function aZe(e,t,n,i){let o=e._tile.constructor;return new o(e._tileset,t,n,i)}$C._deriveBoundingBox=rZe;$C._deriveBoundingRegion=sZe;$C._deriveBoundingVolumeS2=oZe;var eR=$C;var aFi=x(T(),1);var y$=class e{constructor(t,n,i){this._tileset=t,this._tile=n,this._resource=i,this._model=void 0,this._metadata=void 0,this._group=void 0,this._ready=!1}get featuresLength(){let t=this._model,n=t.featureTables,i=t.featureTableId;return l(n)&&l(n[i])?n[i].featuresLength:0}get pointsLength(){return this._model.statistics.pointsLength}get trianglesLength(){return this._model.statistics.trianglesLength}get geometryByteLength(){return this._model.statistics.geometryByteLength}get texturesByteLength(){return this._model.statistics.texturesByteLength}get batchTableByteLength(){let t=this._model.statistics;return t.propertyTablesByteLength+t.batchTexturesByteLength}get innerContents(){}get ready(){return this._ready}get tileset(){return this._tileset}get tile(){return this._tile}get url(){return this._resource.getUrlComponent(!0)}get batchTable(){let t=this._model,n=t.featureTables,i=t.featureTableId;if(l(n)&&l(n[i]))return n[i]}get metadata(){return this._metadata}set metadata(t){this._metadata=t}get group(){return this._group}set group(t){this._group=t}getTextureIds(){return this._model.statistics.getTextureIds()}getTextureByteLengthById(t){return this._model.statistics.getTextureByteLengthById(t)}getExtension(t){return this._model.getExtension(t)}getFeature(t){let n=this._model,i=n.featureTableId;return n.featureTables[i].getFeature(t)}hasProperty(t,n){let i=this._model,o=i.featureTableId;return l(o)?i.featureTables[o].hasProperty(t,n):!1}applyDebugSettings(t,n){n=t?n:U.WHITE,this.featuresLength===0?this._model.color=n:l(this.batchTable)&&this.batchTable.setAllColor(n)}applyStyle(t){this._model.style=t}update(t,n){let i=this._model,o=this._tile;i.colorBlendAmount=t.colorBlendAmount,i.colorBlendMode=t.colorBlendMode,i.modelMatrix=o.computedTransform,i.customShader=t.customShader,i.featureIdLabel=t.featureIdLabel,i.instanceFeatureIdLabel=t.instanceFeatureIdLabel,i.lightColor=t.lightColor,i.imageBasedLighting=t.imageBasedLighting,i.backFaceCulling=t.backFaceCulling,i.shadows=t.shadows,i.showCreditsOnScreen=t.showCreditsOnScreen,i.splitDirection=t.splitDirection,i.debugWireframe=t.debugWireframe,i.edgeDisplayMode=t.edgeDisplayMode,i.showOutline=t.showOutline,i.outlineColor=t.outlineColor,i.pointCloudShading=t.pointCloudShading;let r=t.clippingPlanes;i.referenceMatrix=t.clippingPlanesOriginMatrix,l(r)&&o.clippingPlanesDirty&&(i._clippingPlanes=r.enabled&&o._isClipped?r:void 0);let s=t.environmentMapManager;i.environmentMapManager!==r&&(i._environmentMapManager=s),l(r)&&l(i._clippingPlanes)&&i._clippingPlanes!==r&&(i._clippingPlanes=r,i._clippingPlanesState=0);let a=t.clippingPolygons;l(a)&&o.clippingPolygonsDirty&&(i._clippingPolygons=a.enabled&&o._isClippedByPolygon?a:void 0),l(a)&&l(i._clippingPolygons)&&i._clippingPolygons!==a&&(i._clippingPolygons=a,i._clippingPolygonsState=0),i.update(n),!this._ready&&i.ready&&(i.activeAnimations.addAll({loop:Pd.REPEAT}),this._ready=!0)}isDestroyed(){return!1}destroy(){return this._model=this._model&&this._model.destroy(),me(this)}static async fromGltf(t,n,i,o){let r=new e(t,n,i),a=yN(t,n,r,{gltf:o,basePath:i}),c=t.vectorClassificationOnly?void 0:t.classificationType;a.classificationType=c;let d=await vu.fromGltfAsync(a);return r._model=d,r}static async fromB3dm(t,n,i,o,r){let s=new e(t,n,i),c=yN(t,n,s,{arrayBuffer:o,byteOffset:r,resource:i}),d=t.vectorClassificationOnly?void 0:t.classificationType;c.classificationType=d;let u=await vu.fromB3dm(c);return s._model=u,s}static async fromI3dm(t,n,i,o,r){let s=new e(t,n,i),c=yN(t,n,s,{arrayBuffer:o,byteOffset:r,resource:i}),d=await vu.fromI3dm(c);return s._model=d,s}static async fromPnts(t,n,i,o,r){let s=new e(t,n,i),c=yN(t,n,s,{arrayBuffer:o,byteOffset:r,resource:i}),d=await vu.fromPnts(c);return s._model=d,s}static async fromGeoJson(t,n,i,o){let r=new e(t,n,i),a=yN(t,n,r,{geoJson:o,resource:i}),c=await vu.fromGeoJson(a);return r._model=c,r}pick(t,n,i){if(!l(this._model)||!this._ready)return;let o=n.verticalExaggeration,r=n.verticalExaggerationRelativeHeight;return this._model.pick(t,n,o,r,ie.WGS84,i)}};function yN(e,t,n,i){let o={cull:!1,releaseGltfJson:!0,opaquePass:We.CESIUM_3D_TILE,modelMatrix:t.computedTransform,upAxis:e._modelUpAxis,forwardAxis:e._modelForwardAxis,incrementallyLoadTextures:!1,customShader:e.customShader,content:n,colorBlendMode:e.colorBlendMode,colorBlendAmount:e.colorBlendAmount,lightColor:e.lightColor,imageBasedLighting:e.imageBasedLighting,featureIdLabel:e.featureIdLabel,instanceFeatureIdLabel:e.instanceFeatureIdLabel,pointCloudShading:e.pointCloudShading,clippingPlanes:e.clippingPlanes,backFaceCulling:e.backFaceCulling,shadows:e.shadows,showCreditsOnScreen:e.showCreditsOnScreen,splitDirection:e.splitDirection,enableDebugWireframe:e._enableDebugWireframe,debugWireframe:e.debugWireframe,projectTo2D:e._projectTo2D,enablePick:e._enablePick,enableShowOutline:e._enableShowOutline,showOutline:e.showOutline,outlineColor:e.outlineColor};return It(i,o)}var Iu=y$;var dFi=x(T(),1);var x$=class e{constructor(t,n,i){this._tileset=t,this._tile=n,this._resource=i,this.featurePropertiesDirty=!1,this._metadata=void 0,this._group=void 0,this._ready=!1}get featuresLength(){return 0}get pointsLength(){return 0}get trianglesLength(){return 0}get geometryByteLength(){return 0}get texturesByteLength(){return 0}get batchTableByteLength(){return 0}get innerContents(){}get ready(){return this._ready}get tileset(){return this._tileset}get tile(){return this._tile}get url(){return this._resource.getUrlComponent(!0)}get batchTable(){}get metadata(){return this._metadata}set metadata(t){this._metadata=t}get group(){return this._group}set group(t){this._group=t}static fromJson(t,n,i,o){let r=new e(t,n,i);return r._tileset.loadTileset(r._resource,o,r._tile),r._ready=!0,r}hasProperty(t,n){return!1}getFeature(t){}applyDebugSettings(t,n){}applyStyle(t){}update(t,n){}pick(t,n,i){}isDestroyed(){return!1}destroy(){return me(this)}},xN=x$;var GXi=x(T(),1);var YIi=x(T(),1);var xFi=x(T(),1);var mFi=x(T(),1);function xft(e,t,n,i,o){return function(){let r=document.createElement("canvas"),s=o+2*i;r.height=r.width=s;let a=r.getContext("2d");return a.clearRect(0,0,s,s),i!==0&&(a.beginPath(),a.arc(s/2,s/2,s/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle=n,a.fill(),e<1&&(a.save(),a.globalCompositeOperation="destination-out",a.beginPath(),a.arc(s/2,s/2,o/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle="black",a.fill(),a.restore())),a.beginPath(),a.arc(s/2,s/2,o/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle=t,a.fill(),r}}var WS=xft;var Tft=new fe,Sf=class{constructor(t,n,i,o,r){this._content=t,this._billboard=i,this._label=o,this._polyline=r,this._batchId=n,this._billboardImage=void 0,this._billboardColor=void 0,this._billboardOutlineColor=void 0,this._billboardOutlineWidth=void 0,this._billboardSize=void 0,this._pointSize=void 0,this._color=void 0,this._pointSize=void 0,this._pointOutlineColor=void 0,this._pointOutlineWidth=void 0,this._heightOffset=void 0,this._pickIds=new Array(3),tR(this)}get show(){return this._label.show}set show(t){this._label.show=t,this._billboard.show=t,this._polyline.show=t}get color(){return this._color}set color(t){this._color=U.clone(t,this._color),tR(this)}get pointSize(){return this._pointSize}set pointSize(t){this._pointSize=t,tR(this)}get pointOutlineColor(){return this._pointOutlineColor}set pointOutlineColor(t){this._pointOutlineColor=U.clone(t,this._pointOutlineColor),tR(this)}get pointOutlineWidth(){return this._pointOutlineWidth}set pointOutlineWidth(t){this._pointOutlineWidth=t,tR(this)}get labelColor(){return this._label.fillColor}set labelColor(t){this._label.fillColor=t,this._polyline.show=this._label.show&&t.alpha>0}get labelOutlineColor(){return this._label.outlineColor}set labelOutlineColor(t){this._label.outlineColor=t}get labelOutlineWidth(){return this._label.outlineWidth}set labelOutlineWidth(t){this._label.outlineWidth=t}get font(){return this._label.font}set font(t){this._label.font=t}get labelStyle(){return this._label.style}set labelStyle(t){this._label.style=t}get labelText(){return this._label.text}set labelText(t){l(t)||(t=""),this._label.text=t}get backgroundColor(){return this._label.backgroundColor}set backgroundColor(t){this._label.backgroundColor=t}get backgroundPadding(){return this._label.backgroundPadding}set backgroundPadding(t){this._label.backgroundPadding=t}get backgroundEnabled(){return this._label.showBackground}set backgroundEnabled(t){this._label.showBackground=t}get scaleByDistance(){return this._label.scaleByDistance}set scaleByDistance(t){this._label.scaleByDistance=t,this._billboard.scaleByDistance=t}get translucencyByDistance(){return this._label.translucencyByDistance}set translucencyByDistance(t){this._label.translucencyByDistance=t,this._billboard.translucencyByDistance=t}get distanceDisplayCondition(){return this._label.distanceDisplayCondition}set distanceDisplayCondition(t){this._label.distanceDisplayCondition=t,this._polyline.distanceDisplayCondition=t,this._billboard.distanceDisplayCondition=t}get heightOffset(){return this._heightOffset}set heightOffset(t){let n=this._heightOffset??0,i=this._content.tileset.ellipsoid,o=i.cartesianToCartographic(this._billboard.position,Tft);o.height=o.height-n+t;let r=i.cartographicToCartesian(o);this._billboard.position=r,this._label.position=this._billboard.position,this._polyline.positions=[this._polyline.positions[0],r],this._heightOffset=t}get anchorLineEnabled(){return this._polyline.show}set anchorLineEnabled(t){this._polyline.show=t}get anchorLineColor(){return this._polyline.material.uniforms.color}set anchorLineColor(t){this._polyline.material.uniforms.color=U.clone(t,this._polyline.material.uniforms.color)}get image(){return this._billboardImage}set image(t){let n=this._billboardImage!==t;this._billboardImage=t,n&&tR(this)}get disableDepthTestDistance(){return this._label.disableDepthTestDistance}set disableDepthTestDistance(t){this._label.disableDepthTestDistance=t,this._billboard.disableDepthTestDistance=t}get horizontalOrigin(){return this._billboard.horizontalOrigin}set horizontalOrigin(t){this._billboard.horizontalOrigin=t}get verticalOrigin(){return this._billboard.verticalOrigin}set verticalOrigin(t){this._billboard.verticalOrigin=t}get labelHorizontalOrigin(){return this._label.horizontalOrigin}set labelHorizontalOrigin(t){this._label.horizontalOrigin=t}get labelVerticalOrigin(){return this._label.verticalOrigin}set labelVerticalOrigin(t){this._label.verticalOrigin=t}get content(){return this._content}get tileset(){return this._content.tileset}get primitive(){return this._content.tileset}get pickIds(){let t=this._pickIds;return t[0]=this._billboard.pickId,t[1]=this._label.pickId,t[2]=this._polyline.pickId,t}hasProperty(t){return this._content.batchTable.hasProperty(this._batchId,t)}getPropertyIds(t){return this._content.batchTable.getPropertyIds(this._batchId,t)}getProperty(t){return this._content.batchTable.getProperty(this._batchId,t)}getPropertyInherited(t){return Qs.getPropertyInherited(this._content,this._batchId,t)}setProperty(t,n){this._content.batchTable.setProperty(this._batchId,t,n),this._content.featurePropertiesDirty=!0}isExactClass(t){return this._content.batchTable.isExactClass(this._batchId,t)}isClass(t){return this._content.batchTable.isClass(this._batchId,t)}getExactClassName(){return this._content.batchTable.getExactClassName(this._batchId)}};ct(Sf,"defaultColor",U.WHITE),ct(Sf,"defaultPointOutlineColor",U.BLACK),ct(Sf,"defaultPointOutlineWidth",0),ct(Sf,"defaultPointSize",8);function tR(e){let t=e._billboard;if(l(e._billboardImage)&&e._billboardImage!==t.image){t.image=e._billboardImage;return}if(l(e._billboardImage))return;let n=e._color??Sf.defaultColor,i=e._pointOutlineColor??Sf.defaultPointOutlineColor,o=e._pointOutlineWidth??Sf.defaultPointOutlineWidth,r=e._pointSize??Sf.defaultPointSize,s=e._billboardColor,a=e._billboardOutlineColor,c=e._billboardOutlineWidth,d=e._billboardSize;if(U.equals(n,s)&&U.equals(i,a)&&o===c&&r===d)return;e._billboardColor=U.clone(n,e._billboardColor),e._billboardOutlineColor=U.clone(i,e._billboardOutlineColor),e._billboardOutlineWidth=o,e._billboardSize=r;let u=n.alpha,m=n.toCssColorString(),p=i.toCssColorString(),b=JSON.stringify([m,r,p,o]);t.setImage(b,WS(u,m,p,o,r))}var eg=Sf;var yIi=x(T(),1);var SFi=x(T(),1),TN=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 position2DHigh; in vec3 position2DLow; in vec3 prevPosition3DHigh; in vec3 prevPosition3DLow; in vec3 prevPosition2DHigh; in vec3 prevPosition2DLow; in vec3 nextPosition3DHigh; in vec3 nextPosition3DLow; in vec3 nextPosition2DHigh; in vec3 nextPosition2DLow; in vec4 texCoordExpandAndBatchIndex; out vec2 v_st; out float v_width; out vec4 v_pickColor; out float v_polylineAngle; void main() { float texCoord = texCoordExpandAndBatchIndex.x; float expandDir = texCoordExpandAndBatchIndex.y; bool usePrev = texCoordExpandAndBatchIndex.z < 0.0; float batchTableIndex = texCoordExpandAndBatchIndex.w; vec2 widthAndShow = batchTable_getWidthAndShow(batchTableIndex); float width = widthAndShow.x + 0.5; float show = widthAndShow.y; if (width < 1.0) { show = 0.0; } vec4 pickColor = batchTable_getPickColor(batchTableIndex); vec4 p, prev, next; if (czm_morphTime == 1.0) { p = czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz); prev = czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz); next = czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz); } else if (czm_morphTime == 0.0) { p = czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy); prev = czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy); next = czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy); } else { p = czm_columbusViewMorph( czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy), czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz), czm_morphTime); prev = czm_columbusViewMorph( czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy), czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz), czm_morphTime); next = czm_columbusViewMorph( czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy), czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz), czm_morphTime); } #ifdef DISTANCE_DISPLAY_CONDITION vec3 centerHigh = batchTable_getCenterHigh(batchTableIndex); vec4 centerLowAndRadius = batchTable_getCenterLowAndRadius(batchTableIndex); vec3 centerLow = centerLowAndRadius.xyz; float radius = centerLowAndRadius.w; vec2 distanceDisplayCondition = batchTable_getDistanceDisplayCondition(batchTableIndex); float lengthSq; if (czm_sceneMode == czm_sceneMode2D) { lengthSq = czm_eyeHeight2D.y; } else { vec4 center = czm_translateRelativeToEye(centerHigh.xyz, centerLow.xyz); lengthSq = max(0.0, dot(center.xyz, center.xyz) - radius * radius); } float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x; float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y; if (lengthSq < nearSq || lengthSq > farSq) { show = 0.0; } #endif float polylineAngle; vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, polylineAngle); gl_Position = czm_viewportOrthographic * positionWC * show; v_st.s = texCoord; v_st.t = czm_writeNonPerspective(clamp(expandDir, 0.0, 1.0), gl_Position.w); v_width = width; v_pickColor = pickColor; v_polylineAngle = polylineAngle; } `;var IFi=x(T(),1);function Pu(e,t){e=e??B.EMPTY_OBJECT,this._show=e.show??!0,this._width=e.width??1,this._loop=e.loop??!1,this._distanceDisplayCondition=e.distanceDisplayCondition,this._material=e.material,l(this._material)||(this._material=no.fromType(no.ColorType,{color:new U(1,1,1,1)}));let n=e.positions;l(n)||(n=[]),this._positions=n,this._actualPositions=Wo(n,h.equalsEpsilon),this._loop&&this._actualPositions.length>2&&(this._actualPositions===this._positions&&(this._actualPositions=n.slice()),this._actualPositions.push(h.clone(this._actualPositions[0]))),this._length=this._actualPositions.length,this._id=e.id;let i;l(t)&&(i=I.clone(t.modelMatrix)),this._modelMatrix=i,this._segments=eo.wrapLongitude(this._actualPositions,i),this._actualLength=void 0,this._propertiesChanged=new Uint32Array(lZe),this._polylineCollection=t,this._dirty=!1,this._pickId=void 0,this._boundingVolume=le.fromPoints(this._actualPositions),this._boundingVolumeWC=le.transform(this._boundingVolume,this._modelMatrix),this._boundingVolume2D=new le}var cZe=Pu.POSITION_INDEX=0,_ft=Pu.SHOW_INDEX=1,Sft=Pu.WIDTH_INDEX=2,Zft=Pu.MATERIAL_INDEX=3,_N=Pu.POSITION_SIZE_INDEX=4,Vft=Pu.DISTANCE_DISPLAY_CONDITION=5,lZe=Pu.NUMBER_OF_PROPERTIES=6;function tg(e,t){++e._propertiesChanged[t];let n=e._polylineCollection;l(n)&&(n._updatePolyline(e,t),e._dirty=!0)}Object.defineProperties(Pu.prototype,{show:{get:function(){return this._show},set:function(e){e!==this._show&&(this._show=e,tg(this,_ft))}},positions:{get:function(){return this._positions},set:function(e){let t=Wo(e,h.equalsEpsilon);this._loop&&t.length>2&&(t===e&&(t=e.slice()),t.push(h.clone(t[0]))),(this._actualPositions.length!==t.length||this._actualPositions.length!==this._length)&&tg(this,_N),this._positions=e,this._actualPositions=t,this._length=t.length,this._boundingVolume=le.fromPoints(this._actualPositions,this._boundingVolume),this._boundingVolumeWC=le.transform(this._boundingVolume,this._modelMatrix,this._boundingVolumeWC),tg(this,cZe),this.update()}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,tg(this,Zft))}},width:{get:function(){return this._width},set:function(e){let t=this._width;e!==t&&(this._width=e,tg(this,Sft))}},loop:{get:function(){return this._loop},set:function(e){if(e!==this._loop){let t=this._actualPositions;e?t.length>2&&!h.equals(t[0],t[t.length-1])&&(t.length===this._positions.length&&(this._actualPositions=t=this._positions.slice()),t.push(h.clone(t[0]))):t.length>2&&h.equals(t[0],t[t.length-1])&&(t.length-1===this._positions.length?this._actualPositions=this._positions:t.pop()),this._loop=e,tg(this,_N)}}},id:{get:function(){return this._id},set:function(e){this._id=e,l(this._pickId)&&(this._pickId.object.id=e)}},pickId:{get:function(){return this._pickId}},isDestroyed:{get:function(){return!l(this._polylineCollection)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){Ot.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=Ot.clone(e,this._distanceDisplayCondition),tg(this,Vft))}}});Pu.prototype.update=function(){let e=I.IDENTITY;l(this._polylineCollection)&&(e=this._polylineCollection.modelMatrix);let t=this._segments.positions.length,n=this._segments.lengths,i=this._propertiesChanged[cZe]>0||this._propertiesChanged[_N]>0;if((!I.equals(e,this._modelMatrix)||i)&&(this._segments=eo.wrapLongitude(this._actualPositions,e),this._boundingVolumeWC=le.transform(this._boundingVolume,e,this._boundingVolumeWC)),this._modelMatrix=I.clone(e,this._modelMatrix),this._segments.positions.length!==t)tg(this,_N);else{let o=n.length;for(let r=0;r<o;++r)if(n[r]!==this._segments.lengths[r]){tg(this,_N);break}}};Pu.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._polylineCollection,id:this._id})),this._pickId};Pu.prototype._clean=function(){this._dirty=!1;let e=this._propertiesChanged;for(let t=0;t<lZe-1;++t)e[t]=0};Pu.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._material=this._material&&this._material.destroy(),this._polylineCollection=void 0};var Km=Pu;var Cft=Km.SHOW_INDEX,Rft=Km.WIDTH_INDEX,_$=Km.POSITION_INDEX,Gft=Km.MATERIAL_INDEX,dZe=Km.POSITION_SIZE_INDEX,Aft=Km.DISTANCE_DISPLAY_CONDITION,gZe=Km.NUMBER_OF_PROPERTIES,wd={texCoordExpandAndBatchIndex:0,position3DHigh:1,position3DLow:2,position2DHigh:3,position2DLow:4,prevPosition3DHigh:5,prevPosition3DLow:6,prevPosition2DHigh:7,prevPosition2DLow:8,nextPosition3DHigh:9,nextPosition3DLow:10,nextPosition2DHigh:11,nextPosition2DLow:12};function Zf(e){e=e??B.EMPTY_OBJECT,this.show=e.show??!0,this.modelMatrix=I.clone(e.modelMatrix??I.IDENTITY),this._modelMatrix=I.clone(I.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this._opaqueRS=void 0,this._translucentRS=void 0,this._colorCommands=[],this._polylinesUpdated=!1,this._polylinesRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array(gZe),this._polylines=[],this._polylineBuckets={},this._positionBufferUsage={bufferUsage:Ie.STATIC_DRAW,frameCount:0},this._mode=void 0,this._polylinesToUpdate=[],this._vertexArrays=[],this._positionBuffer=void 0,this._texCoordExpandAndBatchIndexBuffer=void 0,this._batchTable=void 0,this._createBatchTable=!1,this._useHighlightColor=!1,this._highlightColor=U.clone(U.WHITE);let t=this;this._uniformMap={u_highlightColor:function(){return t._highlightColor}}}Object.defineProperties(Zf.prototype,{length:{get:function(){return S$(this),this._polylines.length}}});Zf.prototype.add=function(e){let t=new Km(e,this);return t._index=this._polylines.length,this._polylines.push(t),this._createVertexArray=!0,this._createBatchTable=!0,t};Zf.prototype.remove=function(e){if(this.contains(e)){if(this._polylinesRemoved=!0,this._createVertexArray=!0,this._createBatchTable=!0,l(e._bucket)){let t=e._bucket;t.shaderProgram=t.shaderProgram&&t.shaderProgram.destroy()}return e._destroy(),!0}return!1};Zf.prototype.removeAll=function(){Z$(this),SZe(this),this._polylineBuckets={},this._polylinesRemoved=!1,this._polylines.length=0,this._polylinesToUpdate.length=0,this._createVertexArray=!0};Zf.prototype.contains=function(e){return l(e)&&e._polylineCollection===this};Zf.prototype.get=function(e){return S$(this),this._polylines[e]};function Eft(e,t){l(e._batchTable)&&e._batchTable.destroy();let n=[{functionName:"batchTable_getWidthAndShow",componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:2},{functionName:"batchTable_getPickColor",componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:4,normalize:!0},{functionName:"batchTable_getCenterHigh",componentDatatype:J.FLOAT,componentsPerAttribute:3},{functionName:"batchTable_getCenterLowAndRadius",componentDatatype:J.FLOAT,componentsPerAttribute:4},{functionName:"batchTable_getDistanceDisplayCondition",componentDatatype:J.FLOAT,componentsPerAttribute:2}];e._batchTable=new Y_(t,n,e._polylines.length)}var yZe=new Rn,xZe=new ce,TZe=new M;Zf.prototype.update=function(e){if(S$(this),this._polylines.length===0||!this.show)return;Pft(this,e);let t=e.context,n=e.mapProjection,i,o=this._propertiesChanged;if(this._createBatchTable){if(Xt.maximumVertexTextureImageUnits===0)throw new ae("Vertex texture fetch support is required to render polylines. The maximum number of vertex texture image units must be greater than zero.");Eft(this,t),this._createBatchTable=!1}if(this._createVertexArray||Wft(this))hZe(this,t,n);else if(this._polylinesUpdated){let c=this._polylinesToUpdate;if(this._mode!==se.SCENE3D){let d=c.length;for(let u=0;u<d;++u)i=c[u],i.update()}if(o[dZe]||o[Gft])hZe(this,t,n);else{let d=c.length,u=this._polylineBuckets;for(let m=0;m<d;++m){i=c[m],o=i._propertiesChanged;let p=i._bucket,b=0;for(let f in u)if(u.hasOwnProperty(f)){if(u[f]===p){o[_$]&&p.writeUpdate(b,i,this._positionBuffer,n);break}b+=u[f].lengthOfPositions}if((o[Cft]||o[Rft])&&this._batchTable.setBatchedAttribute(i._index,0,new M(i._width,i._show)),this._batchTable.attributes.length>2){if(o[_$]||o[dZe]){let f=e.mode===se.SCENE2D?i._boundingVolume2D:i._boundingVolumeWC,y=Rn.fromCartesian(f.center,yZe),_=ce.fromElements(y.low.x,y.low.y,y.low.z,f.radius,xZe);this._batchTable.setBatchedAttribute(i._index,2,y.high),this._batchTable.setBatchedAttribute(i._index,3,_)}if(o[Aft]){let f=TZe;f.x=0,f.y=Number.MAX_VALUE;let y=i.distanceDisplayCondition;l(y)&&(f.x=y.near,f.y=y.far),this._batchTable.setBatchedAttribute(i._index,4,f)}}i._clean()}}c.length=0,this._polylinesUpdated=!1}o=this._propertiesChanged;for(let c=0;c<gZe;++c)o[c]=0;let r=I.IDENTITY;e.mode===se.SCENE3D&&(r=this.modelMatrix);let s=e.passes,a=e.morphTime!==0;if((!l(this._opaqueRS)||this._opaqueRS.depthTest.enabled!==a)&&(this._opaqueRS=Oe.fromCache({depthMask:a,depthTest:{enabled:a}})),(!l(this._translucentRS)||this._translucentRS.depthTest.enabled!==a)&&(this._translucentRS=Oe.fromCache({blending:tn.ALPHA_BLEND,depthMask:!a,depthTest:{enabled:a}})),this._batchTable.update(e),s.render||s.pick){let c=this._colorCommands;Lft(this,e,c,r)}};var SN=new le,uZe=new le;function Lft(e,t,n,i){let o=t.context,r=t.commandList,s=n.length,a=0,c=!0,d=e._vertexArrays,u=e.debugShowBoundingVolume,p=e._batchTable.getUniformMapCallback(),b=d.length;for(let f=0;f<b;++f){let y=d[f],_=y.buckets,S=_.length;for(let Z=0;Z<S;++Z){let V=_[Z],C=V.offset,G=V.bucket.shaderProgram,E=V.bucket.polylines,v=E.length,F,P,N=0,g,R;for(let A=0;A<v;++A){let W=E[A],X=Fft(W._material);if(X!==F){if(l(F)&&N>0){let O=P.isTranslucent();a>=s?(g=new ot({owner:e}),n.push(g)):g=n[a],++a,R=It(p(P._uniforms),e._uniformMap),g.boundingVolume=le.clone(SN,g.boundingVolume),g.modelMatrix=i,g.shaderProgram=G,g.vertexArray=y.va,g.renderState=O?e._translucentRS:e._opaqueRS,g.pass=O?We.TRANSLUCENT:We.OPAQUE,g.debugShowBoundingVolume=u,g.pickId="v_pickColor",g.uniformMap=R,g.count=N,g.offset=C,C+=N,N=0,c=!0,r.push(g)}P=W._material,P.update(o),F=X}let Y=W._locatorBuckets,D=Y.length;for(let O=0;O<D;++O){let w=Y[O];w.locator===V&&(N+=w.count)}let k;t.mode===se.SCENE3D?k=W._boundingVolumeWC:t.mode===se.COLUMBUS_VIEW?k=W._boundingVolume2D:t.mode===se.SCENE2D?l(W._boundingVolume2D)&&(k=le.clone(W._boundingVolume2D,uZe),k.center.x=0):l(W._boundingVolumeWC)&&l(W._boundingVolume2D)&&(k=le.union(W._boundingVolumeWC,W._boundingVolume2D,uZe)),c?(c=!1,le.clone(k,SN)):le.union(k,SN,SN)}l(F)&&N>0&&(a>=s?(g=new ot({owner:e}),n.push(g)):g=n[a],++a,R=It(p(P._uniforms),e._uniformMap),g.boundingVolume=le.clone(SN,g.boundingVolume),g.modelMatrix=i,g.shaderProgram=G,g.vertexArray=y.va,g.renderState=P.isTranslucent()?e._translucentRS:e._opaqueRS,g.pass=P.isTranslucent()?We.TRANSLUCENT:We.OPAQUE,g.debugShowBoundingVolume=u,g.pickId="v_pickColor",g.uniformMap=R,g.count=N,g.offset=C,c=!0,r.push(g)),F=void 0}}n.length=a}Zf.prototype.isDestroyed=function(){return!1};Zf.prototype.destroy=function(){return _Ze(this),Z$(this),SZe(this),this._batchTable=this._batchTable&&this._batchTable.destroy(),me(this)};function Wft(e){let t=!1,n=e._propertiesChanged,i=e._positionBufferUsage;return n[_$]?(i.bufferUsage!==Ie.STREAM_DRAW&&(t=!0,i.bufferUsage=Ie.STREAM_DRAW),i.frameCount=100):i.bufferUsage!==Ie.STATIC_DRAW&&(i.frameCount===0?(t=!0,i.bufferUsage=Ie.STATIC_DRAW):i.frameCount--),t}var mZe=[0,0,0];function hZe(e,t,n){e._createVertexArray=!1,Z$(e),_Ze(e),Ift(e);let i=[[]],o,r=e._batchTable,s=e._useHighlightColor,a=[0],c=0,d=[[]],u=0,m=e._polylineBuckets,p,b;for(p in m)m.hasOwnProperty(p)&&(b=m[p],b.updateShader(t,r,s),u+=b.lengthOfPositions);if(u>0){let f=e._mode,y=new Float32Array(6*u*3),_=new Float32Array(u*4),S,Z=0,V=0,C=0;for(p in m)if(m.hasOwnProperty(p)){b=m[p],b.write(y,_,Z,V,C,r,t,n),f===se.MORPHING&&(l(S)||(S=new Float32Array(6*u*3)),b.writeForMorph(S,Z));let R=b.lengthOfPositions;Z+=6*R*3,V+=R*4,C+=R*4,c=b.updateIndices(i,a,d,c)}let G=e._positionBufferUsage.bufferUsage,E=Ie.STATIC_DRAW;e._positionBuffer=et.createVertexBuffer({context:t,typedArray:y,usage:G});let v;l(S)&&(v=et.createVertexBuffer({context:t,typedArray:S,usage:G})),e._texCoordExpandAndBatchIndexBuffer=et.createVertexBuffer({context:t,typedArray:_,usage:E});let F=3*Float32Array.BYTES_PER_ELEMENT,P=4*Float32Array.BYTES_PER_ELEMENT,N=0,g=i.length;for(let R=0;R<g;++R)if(o=i[R],o.length>0){let A=new Uint16Array(o),W=et.createIndexBuffer({context:t,typedArray:A,usage:Ie.STATIC_DRAW,indexDatatype:De.UNSIGNED_SHORT});N+=a[R];let X=6*(R*(F*L.SIXTY_FOUR_KILOBYTES)-N*F),Y=F+X,D=F+Y,k=F+D,O=F+k,w=F+O,z=R*(P*L.SIXTY_FOUR_KILOBYTES)-N*P,H=[{index:wd.position3DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:X,strideInBytes:6*F},{index:wd.position3DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:Y,strideInBytes:6*F},{index:wd.position2DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:X,strideInBytes:6*F},{index:wd.position2DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:Y,strideInBytes:6*F},{index:wd.prevPosition3DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:D,strideInBytes:6*F},{index:wd.prevPosition3DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:k,strideInBytes:6*F},{index:wd.prevPosition2DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:D,strideInBytes:6*F},{index:wd.prevPosition2DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:k,strideInBytes:6*F},{index:wd.nextPosition3DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:O,strideInBytes:6*F},{index:wd.nextPosition3DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:w,strideInBytes:6*F},{index:wd.nextPosition2DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:O,strideInBytes:6*F},{index:wd.nextPosition2DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:w,strideInBytes:6*F},{index:wd.texCoordExpandAndBatchIndex,componentsPerAttribute:4,componentDatatype:J.FLOAT,vertexBuffer:e._texCoordExpandAndBatchIndexBuffer,offsetInBytes:z}],te,K,$,ee;f===se.SCENE3D?(K=e._positionBuffer,te="vertexBuffer",$=mZe,ee="value"):f===se.SCENE2D||f===se.COLUMBUS_VIEW?(K=mZe,te="value",$=e._positionBuffer,ee="vertexBuffer"):(K=v,te="vertexBuffer",$=e._positionBuffer,ee="vertexBuffer"),H[0][te]=K,H[1][te]=K,H[2][ee]=$,H[3][ee]=$,H[4][te]=K,H[5][te]=K,H[6][ee]=$,H[7][ee]=$,H[8][te]=K,H[9][te]=K,H[10][ee]=$,H[11][ee]=$;let de=new Dn({context:t,attributes:H,indexBuffer:W});e._vertexArrays.push({va:de,buckets:d[R]})}}}function vft(e,t){return t instanceof Ct?t.id:t}var VB=[];function Fft(e){let t=no._uniformList[e.type],n=t.length;VB.length=2*n;let i=0;for(let o=0;o<n;++o){let r=t[o];VB[i]=r,VB[i+1]=e._uniforms[r](),i+=2}return`${e.type}:${JSON.stringify(VB,vft)}`}function Ift(e){let t=e._mode,n=e._modelMatrix,i=e._polylineBuckets={},o=e._polylines,r=o.length;for(let s=0;s<r;++s){let a=o[s];if(a._actualPositions.length>1){a.update();let c=a.material,d=i[c.type];l(d)||(d=i[c.type]=new Hp(c,t,n)),d.addPolyline(a)}}}function Pft(e,t){let n=t.mode;(e._mode!==n||!I.equals(e._modelMatrix,e.modelMatrix))&&(e._mode=n,e._modelMatrix=I.clone(e.modelMatrix),e._createVertexArray=!0)}function S$(e){if(e._polylinesRemoved){e._polylinesRemoved=!1;let t=[],n=[],i=0,o,r=e._polylines.length;for(let s=0;s<r;++s)o=e._polylines[s],o.isDestroyed||(o._index=i++,n.push(o),t.push(o));e._polylines=t,e._polylinesToUpdate=n}}function Z$(e){let t=e._polylines,n=t.length;for(let i=0;i<n;++i)if(!t[i].isDestroyed){let o=t[i]._bucket;l(o)&&(o.shaderProgram=o.shaderProgram&&o.shaderProgram.destroy())}}function _Ze(e){let t=e._vertexArrays.length;for(let n=0;n<t;++n)e._vertexArrays[n].va.destroy();e._vertexArrays.length=0}Zf.prototype._updatePolyline=function(e,t){this._polylinesUpdated=!0,e._dirty||this._polylinesToUpdate.push(e),++this._propertiesChanged[t]};function SZe(e){let t=e._polylines,n=t.length;for(let i=0;i<n;++i)t[i].isDestroyed||t[i]._destroy()}function T$(e,t,n){this.count=e,this.offset=t,this.bucket=n}function Hp(e,t,n){this.polylines=[],this.lengthOfPositions=0,this.material=e,this.shaderProgram=void 0,this.mode=t,this.modelMatrix=n}Hp.prototype.addPolyline=function(e){this.polylines.push(e),e._actualLength=this.getPolylinePositionsLength(e),this.lengthOfPositions+=e._actualLength,e._bucket=this};Hp.prototype.updateShader=function(e,t,n){if(l(this.shaderProgram))return;let i=["DISTANCE_DISPLAY_CONDITION"];n&&i.push("VECTOR_TILE"),this.material.shaderSource.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&i.push("POLYLINE_DASH"),i.push("CLIP_POLYLINE");let o=new ze({defines:i,sources:[`in vec4 v_pickColor; `,this.material.shaderSource,X_]}),r=t.getVertexShaderCallback()(TN),s=new ze({defines:i,sources:[Nl,r]});this.shaderProgram=en.fromCache({context:e,vertexShaderSource:s,fragmentShaderSource:o,attributeLocations:wd})};function ZZe(e){return h.dot(h.UNIT_X,e._boundingVolume.center)<0||e._boundingVolume.intersectPlane(nn.ORIGIN_ZX_PLANE)===jt.INTERSECTING}Hp.prototype.getPolylinePositionsLength=function(e){let t;if(this.mode===se.SCENE3D||!ZZe(e))return t=e._actualPositions.length,t*4-4;let n=0,i=e._segments.lengths;t=i.length;for(let o=0;o<t;++o)n+=i[o]*4-4;return n};var xa=new h,Jm=new h,jm=new h,CB=new h,Xft=new ce,Nft=new M;Hp.prototype.write=function(e,t,n,i,o,r,s,a){let c=this.mode,d=a.ellipsoid.maximumRadius*L.PI,u=this.polylines,m=u.length;for(let p=0;p<m;++p){let b=u[p],f=b.width,y=b.show&&f>0,_=b._index,S=this.getSegments(b,a),Z=S.positions,V=S.lengths,C=Z.length,G=b.getPickId(s).color,E=0,v=0,F;for(let D=0;D<C;++D){D===0?b._loop?F=Z[C-2]:(F=CB,h.subtract(Z[0],Z[1],F),h.add(Z[0],F,F)):F=Z[D-1],h.clone(F,Jm),h.clone(Z[D],xa),D===C-1?b._loop?F=Z[1]:(F=CB,h.subtract(Z[C-1],Z[C-2],F),h.add(Z[C-1],F,F)):F=Z[D+1],h.clone(F,jm);let k=V[E];D===v+k&&(v+=k,++E);let O=D-v===0,w=D===v+V[E]-1;c===se.SCENE2D&&(Jm.z=0,xa.z=0,jm.z=0),(c===se.SCENE2D||c===se.MORPHING)&&(O||w)&&d-Math.abs(xa.x)<1&&((xa.x<0&&Jm.x>0||xa.x>0&&Jm.x<0)&&h.clone(xa,Jm),(xa.x<0&&jm.x>0||xa.x>0&&jm.x<0)&&h.clone(xa,jm));let z=O?2:0,H=w?2:4;for(let te=z;te<H;++te){Rn.writeElements(xa,e,n),Rn.writeElements(Jm,e,n+6),Rn.writeElements(jm,e,n+12);let K=te-2<0?-1:1;t[o]=D/(C-1),t[o+1]=2*(te%2)-1,t[o+2]=K,t[o+3]=_,n+=18,o+=4}}let P=Xft;P.x=U.floatToByte(G.red),P.y=U.floatToByte(G.green),P.z=U.floatToByte(G.blue),P.w=U.floatToByte(G.alpha);let N=Nft;N.x=f,N.y=y?1:0;let g=c===se.SCENE2D?b._boundingVolume2D:b._boundingVolumeWC,R=Rn.fromCartesian(g.center,yZe),A=R.high,W=ce.fromElements(R.low.x,R.low.y,R.low.z,g.radius,xZe),X=TZe;X.x=0,X.y=Number.MAX_VALUE;let Y=b.distanceDisplayCondition;l(Y)&&(X.x=Y.near,X.y=Y.far),r.setBatchedAttribute(_,0,N),r.setBatchedAttribute(_,1,P),r.attributes.length>2&&(r.setBatchedAttribute(_,2,A),r.setBatchedAttribute(_,3,W),r.setBatchedAttribute(_,4,X))}};var Yft=new h,wft=new h,Mft=new h,fZe=new h;Hp.prototype.writeForMorph=function(e,t){let n=this.modelMatrix,i=this.polylines,o=i.length;for(let r=0;r<o;++r){let s=i[r],a=s._segments.positions,c=s._segments.lengths,d=a.length,u=0,m=0;for(let p=0;p<d;++p){let b;p===0?s._loop?b=a[d-2]:(b=fZe,h.subtract(a[0],a[1],b),h.add(a[0],b,b)):b=a[p-1],b=I.multiplyByPoint(n,b,wft);let f=I.multiplyByPoint(n,a[p],Yft),y;p===d-1?s._loop?y=a[1]:(y=fZe,h.subtract(a[d-1],a[d-2],y),h.add(a[d-1],y,y)):y=a[p+1],y=I.multiplyByPoint(n,y,Mft);let _=c[u];p===m+_&&(m+=_,++u);let S=p-m===0,Z=p===m+c[u]-1,V=S?2:0,C=Z?2:4;for(let G=V;G<C;++G)Rn.writeElements(f,e,t),Rn.writeElements(b,e,t+6),Rn.writeElements(y,e,t+12),t+=18}}};var kft=new Array(1);Hp.prototype.updateIndices=function(e,t,n,i){let o=n.length-1,r=new T$(0,i,this);n[o].push(r);let s=0,a=e[e.length-1],c=0;a.length>0&&(c=a[a.length-1]+1);let d=this.polylines,u=d.length;for(let m=0;m<u;++m){let p=d[m];p._locatorBuckets=[];let b;if(this.mode===se.SCENE3D){b=kft;let y=p._actualPositions.length;if(y>0)b[0]=y;else continue}else b=p._segments.lengths;let f=b.length;if(f>0){let y=0;for(let _=0;_<f;++_){let S=b[_]-1;for(let Z=0;Z<S;++Z)c+4>L.SIXTY_FOUR_KILOBYTES&&(p._locatorBuckets.push({locator:r,count:y}),y=0,t.push(4),a=[],e.push(a),c=0,r.count=s,s=0,i=0,r=new T$(0,0,this),n[++o]=[r]),a.push(c,c+2,c+1),a.push(c+1,c+2,c+3),y+=6,s+=6,i+=6,c+=4}p._locatorBuckets.push({locator:r,count:y}),c+4>L.SIXTY_FOUR_KILOBYTES&&(t.push(0),a=[],e.push(a),c=0,r.count=s,i=0,s=0,r=new T$(0,0,this),n[++o]=[r])}p._clean()}return r.count=s,i};Hp.prototype.getPolylineStartIndex=function(e){let t=this.polylines,n=0,i=t.length;for(let o=0;o<i;++o){let r=t[o];if(r===e)break;n+=r._actualLength}return n};var nR={positions:void 0,lengths:void 0},pZe=new Array(1),Uft=new h,Dft=new fe;Hp.prototype.getSegments=function(e,t){let n=e._actualPositions;if(this.mode===se.SCENE3D)return pZe[0]=n.length,nR.positions=n,nR.lengths=pZe,nR;ZZe(e)&&(n=e._segments.positions);let i=t.ellipsoid,o=[],r=this.modelMatrix,s=n.length,a,c=Uft;for(let d=0;d<s;++d)a=n[d],c=I.multiplyByPoint(r,a,c),o.push(t.project(i.cartesianToCartographic(c,Dft)));if(o.length>0){e._boundingVolume2D=le.fromPoints(o,e._boundingVolume2D);let d=e._boundingVolume2D.center;e._boundingVolume2D.center=new h(d.z,d.x,d.y)}return nR.positions=o,nR.lengths=e._segments.lengths,nR};var bZe;Hp.prototype.writeUpdate=function(e,t,n,i){let o=this.mode,r=i.ellipsoid.maximumRadius*L.PI,s=t._actualLength;if(s){e+=this.getPolylineStartIndex(t);let a=bZe,c=6*s*3;!l(a)||a.length<c?a=bZe=new Float32Array(c):a.length>c&&(a=new Float32Array(a.buffer,0,c));let d=this.getSegments(t,i),u=d.positions,m=d.lengths,p=0,b=0,f=0,y;s=u.length;for(let _=0;_<s;++_){_===0?t._loop?y=u[s-2]:(y=CB,h.subtract(u[0],u[1],y),h.add(u[0],y,y)):y=u[_-1],h.clone(y,Jm),h.clone(u[_],xa),_===s-1?t._loop?y=u[1]:(y=CB,h.subtract(u[s-1],u[s-2],y),h.add(u[s-1],y,y)):y=u[_+1],h.clone(y,jm);let S=m[b];_===f+S&&(f+=S,++b);let Z=_-f===0,V=_===f+m[b]-1;o===se.SCENE2D&&(Jm.z=0,xa.z=0,jm.z=0),(o===se.SCENE2D||o===se.MORPHING)&&(Z||V)&&r-Math.abs(xa.x)<1&&((xa.x<0&&Jm.x>0||xa.x>0&&Jm.x<0)&&h.clone(xa,Jm),(xa.x<0&&jm.x>0||xa.x>0&&jm.x<0)&&h.clone(xa,jm));let C=Z?2:0,G=V?2:4;for(let E=C;E<G;++E)Rn.writeElements(xa,a,p),Rn.writeElements(Jm,a,p+6),Rn.writeElements(jm,a,p+12),p+=18}n.copyFromArrayView(a,18*Float32Array.BYTES_PER_ELEMENT*e)}};var Vf=Zf;function _x(e){this._positions=e.positions,this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._rectangle=e.rectangle,this._minHeight=e.minimumHeight,this._maxHeight=e.maximumHeight,this._heightReference=e.heightReference,this._billboardCollection=new xu({batchTable:e.batchTable,scene:e.scene}),this._labelCollection=new Yp({batchTable:e.batchTable,scene:e.scene}),this._polylineCollection=new Vf,this._polylineCollection._useHighlightColor=!0,this._packedBuffer=void 0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(_x.prototype,{ready:{get:function(){return this._ready}},pointsLength:{get:function(){return this._billboardCollection.length}},texturesByteLength:{get:function(){let e=this._billboardCollection.sizeInBytes,t=this._labelCollection.sizeInBytes;return e+t}}});function Oft(e,t){let n=e._rectangle,i=e._minHeight,o=e._maxHeight,r=2+re.packedLength+ie.packedLength,s=new Float64Array(r),a=0;return s[a++]=i,s[a++]=o,re.pack(n,s,a),a+=re.packedLength,ie.pack(t,s,a),s}var Bft=new Jn("createVectorTilePoints",5),zft=new h;function Hft(e,t){let n=e._positions,i=e._packedBuffer;l(i)||(n=e._positions=n.slice(),e._batchIds=e._batchIds.slice(),i=e._packedBuffer=Oft(e,t));let o=[n.buffer,i.buffer],r={positions:n.buffer,packedBuffer:i.buffer},s=Bft.scheduleTask(r,o);if(l(s))return s.then(a=>{if(e.isDestroyed())return;e._positions=new Float64Array(a.positions);let c=e._billboardCollection,d=e._labelCollection,u=e._polylineCollection;n=e._positions;let m=e._batchIds,p=n.length/3,b=e._heightReference??rt.NONE;for(let f=0;f<p;++f){let y=m[f],_=h.unpack(n,f*3,zft),S=c.add();S.position=_,S._batchIndex=y,S.heightReference=b;let Z=d.add();Z.text=" ",Z.position=_,Z._batchIndex=y,Z.heightReference=b;let V=u.add();V.positions=[h.clone(_),h.clone(_)]}e._positions=void 0,e._packedBuffer=void 0,e._ready=!0}).catch(a=>{e.isDestroyed()||(e._error=a)})}_x.prototype.createFeatures=function(e,t){let n=this._billboardCollection,i=this._labelCollection,o=this._polylineCollection,r=this._batchIds,s=r.length;for(let a=0;a<s;++a){let c=r[a],d=n.get(a),u=i.get(a),m=o.get(a);t[c]=new eg(e,c,d,u,m)}};_x.prototype.applyDebugSettings=function(e,t){e?(U.clone(t,this._billboardCollection._highlightColor),U.clone(t,this._labelCollection._highlightColor),U.clone(t,this._polylineCollection._highlightColor)):(U.clone(U.WHITE,this._billboardCollection._highlightColor),U.clone(U.WHITE,this._labelCollection._highlightColor),U.clone(U.WHITE,this._polylineCollection._highlightColor))};function Kft(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.pointSize=eg.defaultPointSize,s.color=eg.defaultColor,s.pointOutlineColor=eg.defaultPointOutlineColor,s.pointOutlineWidth=eg.defaultPointOutlineWidth,s.labelColor=U.WHITE,s.labelOutlineColor=U.WHITE,s.labelOutlineWidth=1,s.font="30px sans-serif",s.labelStyle=fr.FILL,s.labelText=void 0,s.backgroundColor=new U(.165,.165,.165,.8),s.backgroundPadding=new M(7,5),s.backgroundEnabled=!1,s.scaleByDistance=void 0,s.translucencyByDistance=void 0,s.distanceDisplayCondition=void 0,s.heightOffset=0,s.anchorLineEnabled=!1,s.anchorLineColor=U.WHITE,s.image=void 0,s.disableDepthTestDistance=0,s.horizontalOrigin=Di.CENTER,s.verticalOrigin=zn.CENTER,s.labelHorizontalOrigin=Di.RIGHT,s.labelVerticalOrigin=zn.BASELINE}}var Jft=new U,jft=new U,Qft=new U,qft=new U,$ft=new U,ept=new U,ZN=new Ht,VN=new Ht,V$=new Ot;_x.prototype.applyStyle=function(e,t){if(!l(e)){Kft(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];if(l(e.show)&&(s.show=e.show.evaluate(s)),l(e.pointSize)&&(s.pointSize=e.pointSize.evaluate(s)),l(e.color)&&(s.color=e.color.evaluateColor(s,Jft)),l(e.pointOutlineColor)&&(s.pointOutlineColor=e.pointOutlineColor.evaluateColor(s,jft)),l(e.pointOutlineWidth)&&(s.pointOutlineWidth=e.pointOutlineWidth.evaluate(s)),l(e.labelColor)&&(s.labelColor=e.labelColor.evaluateColor(s,Qft)),l(e.labelOutlineColor)&&(s.labelOutlineColor=e.labelOutlineColor.evaluateColor(s,qft)),l(e.labelOutlineWidth)&&(s.labelOutlineWidth=e.labelOutlineWidth.evaluate(s)),l(e.font)&&(s.font=e.font.evaluate(s)),l(e.labelStyle)&&(s.labelStyle=e.labelStyle.evaluate(s)),l(e.labelText)?s.labelText=e.labelText.evaluate(s):s.labelText=void 0,l(e.backgroundColor)&&(s.backgroundColor=e.backgroundColor.evaluateColor(s,$ft)),l(e.backgroundPadding)&&(s.backgroundPadding=e.backgroundPadding.evaluate(s)),l(e.backgroundEnabled)&&(s.backgroundEnabled=e.backgroundEnabled.evaluate(s)),l(e.scaleByDistance)){let a=e.scaleByDistance.evaluate(s);l(a)?(ZN.near=a.x,ZN.nearValue=a.y,ZN.far=a.z,ZN.farValue=a.w,s.scaleByDistance=ZN):s.scaleByDistance=void 0}else s.scaleByDistance=void 0;if(l(e.translucencyByDistance)){let a=e.translucencyByDistance.evaluate(s);l(a)?(VN.near=a.x,VN.nearValue=a.y,VN.far=a.z,VN.farValue=a.w,s.translucencyByDistance=VN):s.translucencyByDistance=void 0}else s.translucencyByDistance=void 0;if(l(e.distanceDisplayCondition)){let a=e.distanceDisplayCondition.evaluate(s);l(a)?(V$.near=a.x,V$.far=a.y,s.distanceDisplayCondition=V$):s.distanceDisplayCondition=void 0}else s.distanceDisplayCondition=void 0;l(e.heightOffset)&&(s.heightOffset=e.heightOffset.evaluate(s)),l(e.anchorLineEnabled)&&(s.anchorLineEnabled=e.anchorLineEnabled.evaluate(s)),l(e.anchorLineColor)&&(s.anchorLineColor=e.anchorLineColor.evaluateColor(s,ept)),l(e.image)?s.image=e.image.evaluate(s):s.image=void 0,l(e.disableDepthTestDistance)&&(s.disableDepthTestDistance=e.disableDepthTestDistance.evaluate(s)),l(e.horizontalOrigin)&&(s.horizontalOrigin=e.horizontalOrigin.evaluate(s)),l(e.verticalOrigin)&&(s.verticalOrigin=e.verticalOrigin.evaluate(s)),l(e.labelHorizontalOrigin)&&(s.labelHorizontalOrigin=e.labelHorizontalOrigin.evaluate(s)),l(e.labelVerticalOrigin)&&(s.labelVerticalOrigin=e.labelVerticalOrigin.evaluate(s))}};_x.prototype.update=function(e){if(!this._ready&&(l(this._promise)||(this._promise=Hft(this,e.mapProjection.ellipsoid)),l(this._error))){let t=this._error;throw this._error=void 0,t}this._polylineCollection.update(e),this._billboardCollection.update(e),this._labelCollection.update(e)};_x.prototype.isDestroyed=function(){return!1};_x.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),this._labelCollection=this._labelCollection&&this._labelCollection.destroy(),this._polylineCollection=this._polylineCollection&&this._polylineCollection.destroy(),me(this)};var CN=_x;var qIi=x(T(),1);function ng(e){this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._positions=e.positions,this._counts=e.counts,this._indices=e.indices,this._indexCounts=e.indexCounts,this._indexOffsets=void 0,this._batchTableColors=void 0,this._packedBuffer=void 0,this._batchedPositions=void 0,this._transferrableBatchIds=void 0,this._vertexBatchIds=void 0,this._ellipsoid=e.ellipsoid??ie.WGS84,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._polygonMinimumHeights=e.polygonMinimumHeights,this._polygonMaximumHeights=e.polygonMaximumHeights,this._center=e.center??h.ZERO,this._rectangle=e.rectangle,this._center=void 0,this._boundingVolume=e.boundingVolume,this._boundingVolumes=void 0,this._batchedIndices=void 0,this._ready=!1,this._promise=void 0,this._error=void 0,this._primitive=void 0,this.debugWireframe=!1,this.forceRebatch=!1,this.classificationType=ei.BOTH}Object.defineProperties(ng.prototype,{trianglesLength:{get:function(){return l(this._primitive)?this._primitive.trianglesLength:0}},geometryByteLength:{get:function(){return l(this._primitive)?this._primitive.geometryByteLength:0}},ready:{get:function(){return this._ready}}});function tpt(e){let t=new Float64Array(3+h.packedLength+ie.packedLength+re.packedLength),n=0;return t[n++]=e._indices.BYTES_PER_ELEMENT,t[n++]=e._minimumHeight,t[n++]=e._maximumHeight,h.pack(e._center,t,n),n+=h.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,re.pack(e._rectangle,t,n),t}function npt(e,t){let n=1,i=t[n++],o=e._boundingVolumes=new Array(i);for(let a=0;a<i;++a)o[a]=$t.unpack(t,n),n+=$t.packedLength;let r=t[n++],s=e._batchedIndices=new Array(r);for(let a=0;a<r;++a){let c=U.unpack(t,n);n+=U.packedLength;let d=t[n++],u=t[n++],m=t[n++],p=new Array(m);for(let b=0;b<m;++b)p[b]=t[n++];s[a]=new zp({color:c,offset:d,count:u,batchIds:p})}}var ipt=new Jn("createVectorTilePolygons",5),opt=new U;function rpt(e){if(l(e._primitive))return;let t=e._positions,n=e._counts,i=e._indexCounts,o=e._indices,r=e._transferrableBatchIds,s=e._batchTableColors,a=e._packedBuffer;if(!l(s)){t=e._positions=e._positions.slice(),n=e._counts=e._counts.slice(),i=e._indexCounts=e._indexCounts.slice(),o=e._indices=e._indices.slice(),e._center=e._ellipsoid.cartographicToCartesian(re.center(e._rectangle)),r=e._transferrableBatchIds=new Uint32Array(e._batchIds),s=e._batchTableColors=new Uint32Array(r.length);let b=e._batchTable,f=s.length;for(let y=0;y<f;++y){let _=b.getColor(y,opt);s[y]=_.toRgba()}a=e._packedBuffer=tpt(e)}let c=[t.buffer,n.buffer,i.buffer,o.buffer,r.buffer,s.buffer,a.buffer],d={packedBuffer:a.buffer,positions:t.buffer,counts:n.buffer,indexCounts:i.buffer,indices:o.buffer,batchIds:r.buffer,batchTableColors:s.buffer},u=e._polygonMinimumHeights,m=e._polygonMaximumHeights;l(u)&&l(m)&&(u=u.slice(),m=m.slice(),c.push(u.buffer,m.buffer),d.minimumHeights=u,d.maximumHeights=m);let p=ipt.scheduleTask(d,c);if(l(p))return p.then(b=>{if(e.isDestroyed())return;e._positions=void 0,e._counts=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0;let f=new Float64Array(b.packedBuffer),y=f[0];npt(e,f),e._indices=De.getSizeInBytes(y)===2?new Uint16Array(b.indices):new Uint32Array(b.indices),e._indexOffsets=new Uint32Array(b.indexOffsets),e._indexCounts=new Uint32Array(b.indexCounts),e._batchedPositions=new Float32Array(b.positions),e._vertexBatchIds=new Uint16Array(b.batchIds),spt(e),e._ready=!0}).catch(b=>{e.isDestroyed()||(e._error=b)})}function spt(e){l(e._primitive)||(e._primitive=new ES({batchTable:e._batchTable,positions:e._batchedPositions,batchIds:e._batchIds,vertexBatchIds:e._vertexBatchIds,indices:e._indices,indexOffsets:e._indexOffsets,indexCounts:e._indexCounts,batchedIndices:e._batchedIndices,boundingVolume:e._boundingVolume,boundingVolumes:e._boundingVolumes,center:e._center}),e._batchTable=void 0,e._batchIds=void 0,e._positions=void 0,e._counts=void 0,e._indices=void 0,e._indexCounts=void 0,e._indexOffsets=void 0,e._batchTableColors=void 0,e._packedBuffer=void 0,e._batchedPositions=void 0,e._transferrableBatchIds=void 0,e._vertexBatchIds=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0,e._center=void 0,e._rectangle=void 0,e._boundingVolume=void 0,e._boundingVolumes=void 0,e._batchedIndices=void 0)}ng.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};ng.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};ng.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};ng.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};ng.prototype.update=function(e){if(!this._ready){if(l(this._promise)||(this._promise=rpt(this)),l(this._error)){let t=this._error;throw this._error=void 0,t}return}this._primitive.debugWireframe=this.debugWireframe,this._primitive.forceRebatch=this.forceRebatch,this._primitive.classificationType=this.classificationType,this._primitive.update(e)};ng.prototype.isDestroyed=function(){return!1};ng.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};var RN=ng;var VPi=x(T(),1);var ePi=x(T(),1),GN=`in vec4 currentPosition; in vec4 previousPosition; in vec4 nextPosition; in vec2 expandAndWidth; in float a_batchId; uniform mat4 u_modifiedModelView; void main() { float expandDir = expandAndWidth.x; float width = abs(expandAndWidth.y) + 0.5; bool usePrev = expandAndWidth.y < 0.0; vec4 p = u_modifiedModelView * currentPosition; vec4 prev = u_modifiedModelView * previousPosition; vec4 next = u_modifiedModelView * nextPosition; float angle; vec4 positionWC = getPolylineWindowCoordinatesEC(p, prev, next, expandDir, width, usePrev, angle); gl_Position = czm_viewportOrthographic * positionWC; } `;function Cf(e){this._positions=e.positions,this._widths=e.widths,this._counts=e.counts,this._batchIds=e.batchIds,this._ellipsoid=e.ellipsoid??ie.WGS84,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._center=e.center,this._rectangle=e.rectangle,this._boundingVolume=e.boundingVolume,this._batchTable=e.batchTable,this._va=void 0,this._sp=void 0,this._rs=void 0,this._uniformMap=void 0,this._command=void 0,this._transferrableBatchIds=void 0,this._packedBuffer=void 0,this._keepDecodedPositions=e.keepDecodedPositions,this._decodedPositions=void 0,this._decodedPositionOffsets=void 0,this._currentPositions=void 0,this._previousPositions=void 0,this._nextPositions=void 0,this._expandAndWidth=void 0,this._vertexBatchIds=void 0,this._indices=void 0,this._constantColor=U.clone(U.WHITE),this._highlightColor=this._constantColor,this._trianglesLength=0,this._geometryByteLength=0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(Cf.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function apt(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+re.packedLength+ie.packedLength+h.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,re.pack(t,a,c),c+=re.packedLength,ie.pack(o,a,c),c+=ie.packedLength,h.pack(r,a,c),a}var cpt=new Jn("createVectorTilePolylines",5),iR={previousPosition:0,currentPosition:1,nextPosition:2,expandAndWidth:3,a_batchId:4};function lpt(e,t){if(l(e._va))return;let n=e._positions,i=e._widths,o=e._counts,r=e._transferrableBatchIds,s=e._packedBuffer;l(s)||(n=e._positions=n.slice(),i=e._widths=i.slice(),o=e._counts=o.slice(),r=e._transferrableBatchIds=e._batchIds.slice(),s=e._packedBuffer=apt(e));let a=[n.buffer,i.buffer,o.buffer,r.buffer,s.buffer],c={positions:n.buffer,widths:i.buffer,counts:o.buffer,batchIds:r.buffer,packedBuffer:s.buffer,keepDecodedPositions:e._keepDecodedPositions},d=cpt.scheduleTask(c,a);if(l(d))return d.then(function(u){if(e.isDestroyed())return;e._keepDecodedPositions&&(e._decodedPositions=new Float64Array(u.decodedPositions),e._decodedPositionOffsets=new Uint32Array(u.decodedPositionOffsets)),e._currentPositions=new Float32Array(u.currentPositions),e._previousPositions=new Float32Array(u.previousPositions),e._nextPositions=new Float32Array(u.nextPositions),e._expandAndWidth=new Float32Array(u.expandAndWidth),e._vertexBatchIds=new Uint16Array(u.batchIds);let m=u.indexDatatype;e._indices=m===De.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),dpt(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function dpt(e,t){if(!l(e._va)){let n=e._currentPositions,i=e._previousPositions,o=e._nextPositions,r=e._expandAndWidth,s=e._vertexBatchIds,a=e._indices,c=i.byteLength+n.byteLength+o.byteLength;c+=r.byteLength+s.byteLength+a.byteLength,e._trianglesLength=a.length/3,e._geometryByteLength=c;let d=et.createVertexBuffer({context:t,typedArray:i,usage:Ie.STATIC_DRAW}),u=et.createVertexBuffer({context:t,typedArray:n,usage:Ie.STATIC_DRAW}),m=et.createVertexBuffer({context:t,typedArray:o,usage:Ie.STATIC_DRAW}),p=et.createVertexBuffer({context:t,typedArray:r,usage:Ie.STATIC_DRAW}),b=et.createVertexBuffer({context:t,typedArray:s,usage:Ie.STATIC_DRAW}),f=et.createIndexBuffer({context:t,typedArray:a,usage:Ie.STATIC_DRAW,indexDatatype:a.BYTES_PER_ELEMENT===2?De.UNSIGNED_SHORT:De.UNSIGNED_INT}),y=[{index:iR.previousPosition,vertexBuffer:d,componentDatatype:J.FLOAT,componentsPerAttribute:3},{index:iR.currentPosition,vertexBuffer:u,componentDatatype:J.FLOAT,componentsPerAttribute:3},{index:iR.nextPosition,vertexBuffer:m,componentDatatype:J.FLOAT,componentsPerAttribute:3},{index:iR.expandAndWidth,vertexBuffer:p,componentDatatype:J.FLOAT,componentsPerAttribute:2},{index:iR.a_batchId,vertexBuffer:b,componentDatatype:J.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new Dn({context:t,attributes:y,indexBuffer:f}),e._positions=void 0,e._widths=void 0,e._counts=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._rectangle=void 0,e._transferrableBatchIds=void 0,e._packedBuffer=void 0,e._currentPositions=void 0,e._previousPositions=void 0,e._nextPositions=void 0,e._expandAndWidth=void 0,e._vertexBatchIds=void 0,e._indices=void 0}}var AN=new I,VZe=new h;function upt(e,t){l(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return I.clone(n,AN),I.multiplyByPoint(AN,e._center,VZe),I.setTranslation(AN,VZe,AN),AN},u_highlightColor:function(){return e._highlightColor}})}function mpt(e){if(l(e._rs))return;let t={enabled:!0,factor:-5,units:-5};e._rs=Oe.fromCache({blending:tn.ALPHA_BLEND,depthMask:!1,depthTest:{enabled:!0},polygonOffset:t})}var hpt=`uniform vec4 u_highlightColor; void main() { out_FragColor = u_highlightColor; } `;function fpt(e,t){if(l(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(GN),o=n.getFragmentShaderCallback(!1,void 0,!1)(hpt),r=new ze({defines:["VECTOR_TILE","CLIP_POLYLINE"],sources:[Nl,i]}),s=new ze({defines:["VECTOR_TILE"],sources:[o]});e._sp=en.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:iR})}function ppt(e,t){if(!l(e._command)){let n=e._batchTable.getUniformMapCallback()(e._uniformMap);e._command=new ot({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:n,boundingVolume:e._boundingVolume,pass:We.TRANSLUCENT,pickId:e._batchTable.getPickId()})}t.commandList.push(e._command)}Cf.getPolylinePositions=function(e,t){let n=e._batchIds,i=e._decodedPositions,o=e._decodedPositionOffsets;if(!l(n)||!l(i))return;let r,s,a=n.length,c=0,d=0;for(r=0;r<a;++r)n[r]===t&&(c+=o[r+1]-o[r]);if(c===0)return;let u=new Float64Array(c*3);for(r=0;r<a;++r)if(n[r]===t){let m=o[r],p=o[r+1]-m;for(s=0;s<p;++s){let b=(m+s)*3;u[d++]=i[b],u[d++]=i[b+1],u[d++]=i[b+2]}}return u};Cf.prototype.getPositions=function(e){return Cf.getPolylinePositions(this,e)};Cf.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Qs(e,r)}};Cf.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function bpt(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.color=U.WHITE}}var gpt=new U,ypt=U.WHITE,xpt=!0;Cf.prototype.applyStyle=function(e,t){if(!l(e)){bpt(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.color=l(e.color)?e.color.evaluateColor(s,gpt):ypt,s.show=l(e.show)?e.show.evaluate(s):xpt}};Cf.prototype.update=function(e){let t=e.context;if(!this._ready){if(l(this._promise)||(this._promise=lpt(this,t)),l(this._error)){let i=this._error;throw this._error=void 0,i}return}upt(this,t),fpt(this,t),mpt(this);let n=e.passes;(n.render||n.pick)&&ppt(this,e)};Cf.prototype.isDestroyed=function(){return!1};Cf.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),me(this)};var vS=Cf;var cXi=x(T(),1);var RPi=x(T(),1),EN=`in vec3 startEllipsoidNormal; in vec3 endEllipsoidNormal; in vec4 startPositionAndHeight; in vec4 endPositionAndHeight; in vec4 startFaceNormalAndVertexCorner; in vec4 endFaceNormalAndHalfWidth; in float a_batchId; uniform mat4 u_modifiedModelView; uniform vec2 u_minimumMaximumVectorHeights; out vec4 v_startPlaneEC; out vec4 v_endPlaneEC; out vec4 v_rightPlaneEC; out float v_halfWidth; out vec3 v_volumeUpEC; void main() { // vertex corner IDs // 3-----------7 // /| left /| // / | 1 / | // 2-----------6 5 end // | / | / // start |/ right |/ // 0-----------4 // float isEnd = floor(startFaceNormalAndVertexCorner.w * 0.251); // 0 for front, 1 for end float isTop = floor(startFaceNormalAndVertexCorner.w * mix(0.51, 0.19, isEnd)); // 0 for bottom, 1 for top vec3 forward = endPositionAndHeight.xyz - startPositionAndHeight.xyz; vec3 right = normalize(cross(forward, startEllipsoidNormal)); vec4 position = vec4(startPositionAndHeight.xyz, 1.0); position.xyz += forward * isEnd; v_volumeUpEC = czm_normal * normalize(cross(right, forward)); // Push for volume height float offset; vec3 ellipsoidNormal = mix(startEllipsoidNormal, endEllipsoidNormal, isEnd); // offset height to create volume offset = mix(startPositionAndHeight.w, endPositionAndHeight.w, isEnd); offset = mix(u_minimumMaximumVectorHeights.y, u_minimumMaximumVectorHeights.x, isTop) - offset; position.xyz += offset * ellipsoidNormal; // move from RTC to EC position = u_modifiedModelView * position; right = czm_normal * right; // Push for width in a direction that is in the start or end plane and in a plane with right // N = normalEC ("right-facing" direction for push) // R = right // p = angle between N and R // w = distance to push along R if R == N // d = distance to push along N // // N R // { p| } * cos(p) = dot(N, R) = w / d // d | |w * d = w / dot(N, R) // { | } // o---------- polyline segment ----> // vec3 scratchNormal = mix(-startFaceNormalAndVertexCorner.xyz, endFaceNormalAndHalfWidth.xyz, isEnd); scratchNormal = cross(scratchNormal, mix(startEllipsoidNormal, endEllipsoidNormal, isEnd)); vec3 miterPushNormal = czm_normal * normalize(scratchNormal); offset = 2.0 * endFaceNormalAndHalfWidth.w * max(0.0, czm_metersPerPixel(position)); // offset = widthEC offset = offset / dot(miterPushNormal, right); position.xyz += miterPushNormal * (offset * sign(0.5 - mod(startFaceNormalAndVertexCorner.w, 2.0))); gl_Position = czm_depthClamp(czm_projection * position); position = u_modifiedModelView * vec4(startPositionAndHeight.xyz, 1.0); vec3 startNormalEC = czm_normal * startFaceNormalAndVertexCorner.xyz; v_startPlaneEC = vec4(startNormalEC, -dot(startNormalEC, position.xyz)); v_rightPlaneEC = vec4(right, -dot(right, position.xyz)); position = u_modifiedModelView * vec4(endPositionAndHeight.xyz, 1.0); vec3 endNormalEC = czm_normal * endFaceNormalAndHalfWidth.xyz; v_endPlaneEC = vec4(endNormalEC, -dot(endNormalEC, position.xyz)); v_halfWidth = endFaceNormalAndHalfWidth.w; } `;var APi=x(T(),1),LN=`in vec4 v_startPlaneEC; in vec4 v_endPlaneEC; in vec4 v_rightPlaneEC; in float v_halfWidth; in vec3 v_volumeUpEC; uniform vec4 u_highlightColor; void main() { float logDepthOrDepth = czm_branchFreeTernary(czm_sceneMode == czm_sceneMode2D, gl_FragCoord.z, czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw))); // Discard for sky if (logDepthOrDepth == 0.0) { #ifdef DEBUG_SHOW_VOLUME out_FragColor = vec4(0.0, 0.0, 1.0, 0.5); return; #else // DEBUG_SHOW_VOLUME discard; #endif // DEBUG_SHOW_VOLUME } vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); eyeCoordinate /= eyeCoordinate.w; float halfMaxWidth = v_halfWidth * czm_metersPerPixel(eyeCoordinate); // Expand halfMaxWidth if direction to camera is almost perpendicular with the volume's up direction halfMaxWidth += halfMaxWidth * (1.0 - dot(-normalize(eyeCoordinate.xyz), v_volumeUpEC)); // Check distance of the eye coordinate against the right-facing plane float widthwiseDistance = czm_planeDistance(v_rightPlaneEC, eyeCoordinate.xyz); // Check eye coordinate against the mitering planes float distanceFromStart = czm_planeDistance(v_startPlaneEC, eyeCoordinate.xyz); float distanceFromEnd = czm_planeDistance(v_endPlaneEC, eyeCoordinate.xyz); if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) { #ifdef DEBUG_SHOW_VOLUME out_FragColor = vec4(logDepthOrDepth, 0.0, 0.0, 0.5); return; #else // DEBUG_SHOW_VOLUME discard; #endif // DEBUG_SHOW_VOLUME } out_FragColor = u_highlightColor; czm_writeDepthClamp(); } `;function ig(e){this._positions=e.positions,this._widths=e.widths,this._counts=e.counts,this._batchIds=e.batchIds,this._ellipsoid=e.ellipsoid??ie.WGS84,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._center=e.center,this._rectangle=e.rectangle,this._batchTable=e.batchTable,this._va=void 0,this._sp=void 0,this._rs=void 0,this._uniformMap=void 0,this._command=void 0,this._transferrableBatchIds=void 0,this._packedBuffer=void 0,this._minimumMaximumVectorHeights=new M(Ei._defaultMinTerrainHeight,Ei._defaultMaxTerrainHeight),this._boundingVolume=$t.fromRectangle(e.rectangle,Ei._defaultMinTerrainHeight,Ei._defaultMaxTerrainHeight,this._ellipsoid),this._classificationType=e.classificationType,this._keepDecodedPositions=e.keepDecodedPositions,this._decodedPositions=void 0,this._decodedPositionOffsets=void 0,this._startEllipsoidNormals=void 0,this._endEllipsoidNormals=void 0,this._startPositionAndHeights=void 0,this._startFaceNormalAndVertexCornerIds=void 0,this._endPositionAndHeights=void 0,this._endFaceNormalAndHalfWidths=void 0,this._vertexBatchIds=void 0,this._indices=void 0,this._constantColor=U.clone(U.WHITE),this._highlightColor=this._constantColor,this._trianglesLength=0,this._geometryByteLength=0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(ig.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function Tpt(e,t,n){let i=Ei.getMinimumMaximumHeights(t,n),o=i.minimumTerrainHeight,r=i.maximumTerrainHeight,s=e._minimumMaximumVectorHeights;s.x=o,s.y=r;let a=e._boundingVolume,c=e._rectangle;$t.fromRectangle(c,o,r,n,a)}function _pt(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+re.packedLength+ie.packedLength+h.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,re.pack(t,a,c),c+=re.packedLength,ie.pack(o,a,c),c+=ie.packedLength,h.pack(r,a,c),a}var Spt=new Jn("createVectorTileClampedPolylines"),Sx={startEllipsoidNormal:0,endEllipsoidNormal:1,startPositionAndHeight:2,endPositionAndHeight:3,startFaceNormalAndVertexCorner:4,endFaceNormalAndHalfWidth:5,a_batchId:6};function Zpt(e,t){if(l(e._va))return;let n=e._positions,i=e._widths,o=e._counts,r=e._transferrableBatchIds,s=e._packedBuffer;l(s)||(n=e._positions=n.slice(),i=e._widths=i.slice(),o=e._counts=o.slice(),r=e._transferrableBatchIds=e._batchIds.slice(),s=e._packedBuffer=_pt(e));let a=[n.buffer,i.buffer,o.buffer,r.buffer,s.buffer],c={positions:n.buffer,widths:i.buffer,counts:o.buffer,batchIds:r.buffer,packedBuffer:s.buffer,keepDecodedPositions:e._keepDecodedPositions},d=Spt.scheduleTask(c,a);if(l(d))return d.then(function(u){if(e.isDestroyed())return;e._keepDecodedPositions&&(e._decodedPositions=new Float64Array(u.decodedPositions),e._decodedPositionOffsets=new Uint32Array(u.decodedPositionOffsets)),e._startEllipsoidNormals=new Float32Array(u.startEllipsoidNormals),e._endEllipsoidNormals=new Float32Array(u.endEllipsoidNormals),e._startPositionAndHeights=new Float32Array(u.startPositionAndHeights),e._startFaceNormalAndVertexCornerIds=new Float32Array(u.startFaceNormalAndVertexCornerIds),e._endPositionAndHeights=new Float32Array(u.endPositionAndHeights),e._endFaceNormalAndHalfWidths=new Float32Array(u.endFaceNormalAndHalfWidths),e._vertexBatchIds=new Uint16Array(u.vertexBatchIds);let m=u.indexDatatype;e._indices=m===De.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),Vpt(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function Vpt(e,t){if(!l(e._va)){let n=e._startEllipsoidNormals,i=e._endEllipsoidNormals,o=e._startPositionAndHeights,r=e._endPositionAndHeights,s=e._startFaceNormalAndVertexCornerIds,a=e._endFaceNormalAndHalfWidths,c=e._vertexBatchIds,d=e._indices,u=n.byteLength+i.byteLength;u+=o.byteLength+r.byteLength,u+=s.byteLength+a.byteLength,u+=c.byteLength+d.byteLength,e._trianglesLength=d.length/3,e._geometryByteLength=u;let m=et.createVertexBuffer({context:t,typedArray:n,usage:Ie.STATIC_DRAW}),p=et.createVertexBuffer({context:t,typedArray:i,usage:Ie.STATIC_DRAW}),b=et.createVertexBuffer({context:t,typedArray:o,usage:Ie.STATIC_DRAW}),f=et.createVertexBuffer({context:t,typedArray:r,usage:Ie.STATIC_DRAW}),y=et.createVertexBuffer({context:t,typedArray:s,usage:Ie.STATIC_DRAW}),_=et.createVertexBuffer({context:t,typedArray:a,usage:Ie.STATIC_DRAW}),S=et.createVertexBuffer({context:t,typedArray:c,usage:Ie.STATIC_DRAW}),Z=et.createIndexBuffer({context:t,typedArray:d,usage:Ie.STATIC_DRAW,indexDatatype:d.BYTES_PER_ELEMENT===2?De.UNSIGNED_SHORT:De.UNSIGNED_INT}),V=[{index:Sx.startEllipsoidNormal,vertexBuffer:m,componentDatatype:J.FLOAT,componentsPerAttribute:3},{index:Sx.endEllipsoidNormal,vertexBuffer:p,componentDatatype:J.FLOAT,componentsPerAttribute:3},{index:Sx.startPositionAndHeight,vertexBuffer:b,componentDatatype:J.FLOAT,componentsPerAttribute:4},{index:Sx.endPositionAndHeight,vertexBuffer:f,componentDatatype:J.FLOAT,componentsPerAttribute:4},{index:Sx.startFaceNormalAndVertexCorner,vertexBuffer:y,componentDatatype:J.FLOAT,componentsPerAttribute:4},{index:Sx.endFaceNormalAndHalfWidth,vertexBuffer:_,componentDatatype:J.FLOAT,componentsPerAttribute:4},{index:Sx.a_batchId,vertexBuffer:S,componentDatatype:J.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new Dn({context:t,attributes:V,indexBuffer:Z}),e._positions=void 0,e._widths=void 0,e._counts=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._rectangle=void 0,e._transferrableBatchIds=void 0,e._packedBuffer=void 0,e._startEllipsoidNormals=void 0,e._endEllipsoidNormals=void 0,e._startPositionAndHeights=void 0,e._startFaceNormalAndVertexCornerIds=void 0,e._endPositionAndHeights=void 0,e._endFaceNormalAndHalfWidths=void 0,e._vertexBatchIds=void 0,e._indices=void 0}}var WN=new I,CZe=new h;function Cpt(e,t){l(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return I.clone(n,WN),I.multiplyByPoint(WN,e._center,CZe),I.setTranslation(WN,CZe,WN),WN},u_highlightColor:function(){return e._highlightColor},u_minimumMaximumVectorHeights:function(){return e._minimumMaximumVectorHeights}})}function RZe(e){return Oe.fromCache({cull:{enabled:!0,face:ki.FRONT},blending:tn.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:ti.EQUAL,frontOperation:{fail:Wt.KEEP,zFail:Wt.KEEP,zPass:Wt.KEEP},backFunction:ti.EQUAL,backOperation:{fail:Wt.KEEP,zFail:Wt.KEEP,zPass:Wt.KEEP},reference:Kt.CESIUM_3D_TILE_MASK,mask:Kt.CESIUM_3D_TILE_MASK}})}function Rpt(e){l(e._rs)||(e._rs=RZe(!1),e._rs3DTiles=RZe(!0))}function Gpt(e,t){if(l(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(EN),o=n.getFragmentShaderCallback(!1,void 0,!0)(LN),r=new ze({defines:["VECTOR_TILE","CLIP_POLYLINE"],sources:[Nl,i]}),s=new ze({defines:["VECTOR_TILE"],sources:[o]});e._sp=en.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:Sx})}function Apt(e,t){let n=e._command;if(!l(e._command)){let o=e._batchTable.getUniformMapCallback()(e._uniformMap);n=e._command=new ot({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:o,boundingVolume:e._boundingVolume,pass:We.TERRAIN_CLASSIFICATION,pickId:e._batchTable.getPickId()});let r=ot.shallowClone(n,n.derivedCommands.tileset);r.renderState=e._rs3DTiles,r.pass=We.CESIUM_3D_TILE_CLASSIFICATION,n.derivedCommands.tileset=r}let i=e._classificationType;(i===ei.TERRAIN||i===ei.BOTH)&&t.commandList.push(n),(i===ei.CESIUM_3D_TILE||i===ei.BOTH)&&t.commandList.push(n.derivedCommands.tileset)}ig.prototype.getPositions=function(e){return vS.getPolylinePositions(this,e)};ig.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Qs(e,r)}};ig.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function Ept(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.color=U.WHITE}}var Lpt=new U,Wpt=U.WHITE,vpt=!0;ig.prototype.applyStyle=function(e,t){if(!l(e)){Ept(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.color=l(e.color)?e.color.evaluateColor(s,Lpt):Wpt,s.show=l(e.show)?e.show.evaluate(s):vpt}};function Fpt(e){return Ei.initialize().then(function(){Tpt(e,e._rectangle,e._ellipsoid)}).catch(t=>{e.isDestroyed()||(e._error=t)})}ig.prototype.update=function(e){let t=e.context;if(!this._ready){if(l(this._promise)||(this._promise=Fpt(this).then(Zpt(this,t))),l(this._error)){let i=this._error;throw this._error=void 0,i}return}Cpt(this,t),Gpt(this,t),Rpt(this);let n=e.passes;(n.render||n.pick)&&Apt(this,e)};ig.prototype.isDestroyed=function(){return!1};ig.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),me(this)};var vN=ig;var R$=class{constructor(t,n,i,o,r){this._tileset=t,this._tile=n,this._resource=i,this._polygons=void 0,this._polylines=void 0,this._points=void 0,this._metadata=void 0,this._batchTable=void 0,this._features=void 0,this.featurePropertiesDirty=!1,this._group=void 0,this._ready=!1,Ypt(this,o,r)}get featuresLength(){return l(this._batchTable)?this._batchTable.featuresLength:0}get pointsLength(){return l(this._points)?this._points.pointsLength:0}get trianglesLength(){let t=0;return l(this._polygons)&&(t+=this._polygons.trianglesLength),l(this._polylines)&&(t+=this._polylines.trianglesLength),t}get geometryByteLength(){let t=0;return l(this._polygons)&&(t+=this._polygons.geometryByteLength),l(this._polylines)&&(t+=this._polylines.geometryByteLength),t}get texturesByteLength(){return l(this._points)?this._points.texturesByteLength:0}get batchTableByteLength(){return l(this._batchTable)?this._batchTable.batchTableByteLength:0}get innerContents(){}get ready(){return this._ready}get tileset(){return this._tileset}get tile(){return this._tile}get url(){return this._resource.getUrlComponent(!0)}get metadata(){return this._metadata}set metadata(t){this._metadata=t}get batchTable(){return this._batchTable}get group(){return this._group}set group(t){this._group=t}hasProperty(t,n){return this._batchTable.hasProperty(t,n)}getFeature(t){return l(this._features)||C$(this),this._features[t]}applyDebugSettings(t,n){l(this._polygons)&&this._polygons.applyDebugSettings(t,n),l(this._polylines)&&this._polylines.applyDebugSettings(t,n),l(this._points)&&this._points.applyDebugSettings(t,n)}applyStyle(t){l(this._features)||C$(this),l(this._polygons)&&this._polygons.applyStyle(t,this._features),l(this._polylines)&&this._polylines.applyStyle(t,this._features),l(this._points)&&this._points.applyStyle(t,this._features)}update(t,n){let i=!0;l(this._polygons)&&(this._polygons.classificationType=this._tileset.classificationType,this._polygons.debugWireframe=this._tileset.debugWireframe,this._polygons.update(n),i=i&&this._polygons.ready),l(this._polylines)&&(this._polylines.update(n),i=i&&this._polylines.ready),l(this._points)&&(this._points.update(n),i=i&&this._points.ready),l(this._batchTable)&&i&&(l(this._features)||C$(this),this._batchTable.update(t,n),this._ready=!0)}pick(t,n,i){}getPolylinePositions(t){let n=this._polylines;if(l(n))return n.getPositions(t)}isDestroyed(){return!1}destroy(){return this._polygons=this._polygons&&this._polygons.destroy(),this._polylines=this._polylines&&this._polylines.destroy(),this._points=this._points&&this._points.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),me(this)}};function Ipt(e){return function(t,n){l(e._polygons)&&e._polygons.updateCommands(t,n)}}function Ppt(e,t){let n,i,o,r,s=e.POLYGONS_LENGTH??0,a=e.POLYLINES_LENGTH??0,c=e.POINTS_LENGTH??0;if(s>0&&l(e.POLYGON_BATCH_IDS)){let p=t.byteOffset+e.POLYGON_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,p,s)}if(a>0&&l(e.POLYLINE_BATCH_IDS)){let p=t.byteOffset+e.POLYLINE_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,p,a)}if(c>0&&l(e.POINT_BATCH_IDS)){let p=t.byteOffset+e.POINT_BATCH_IDS.byteOffset;o=new Uint16Array(t.buffer,p,c)}let d=l(n)||l(i)||l(o),u=s>0&&!l(n)||a>0&&!l(i)||c>0&&!l(o);if(d&&u)throw new ae("If one group of batch ids is defined, then all batch ids must be defined");if(!l(n)&&!l(i)&&!l(o)){let p=0;if(!l(n)&&s>0)for(n=new Uint16Array(s),r=0;r<s;++r)n[r]=p++;if(!l(i)&&a>0)for(i=new Uint16Array(a),r=0;r<a;++r)i[r]=p++;if(!l(o)&&c>0)for(o=new Uint16Array(c),r=0;r<c;++r)o[r]=p++}return{polygons:n,polylines:i,points:o}}var Rf=Uint32Array.BYTES_PER_ELEMENT;function Xpt(e){return new vS(e)}function Npt(e){return new vN(e)}function Ypt(e,t,n){n=n??0;let i=new Uint8Array(t),o=new DataView(t);n+=Rf;let r=o.getUint32(n,!0);if(r!==1)throw new ae(`Only Vector tile version 1 is supported. Version ${r} is not.`);n+=Rf;let s=o.getUint32(n,!0);if(n+=Rf,s===0){e._ready=!0;return}let a=o.getUint32(n,!0);if(n+=Rf,a===0)throw new ae("Feature table must have a byte length greater than zero");let c=o.getUint32(n,!0);n+=Rf;let d=o.getUint32(n,!0);n+=Rf;let u=o.getUint32(n,!0);n+=Rf;let m=o.getUint32(n,!0);n+=Rf;let p=o.getUint32(n,!0);n+=Rf;let b=o.getUint32(n,!0);n+=Rf,n+=Rf;let f=Vr(i,n,a);n+=a;let y=new Uint8Array(t,n,c);n+=c;let _,S;d>0&&(_=Vr(i,n,d),n+=d,u>0&&(S=new Uint8Array(t,n,u),S=new Uint8Array(S),n+=u));let Z=f.POLYGONS_LENGTH??0,V=f.POLYLINES_LENGTH??0,C=f.POINTS_LENGTH??0,G=Z+V+C,E=new ff(e,G,_,S,Ipt(e));if(e._batchTable=E,G===0)return;let v=new hf(f,y),F=v.getGlobalProperty("REGION");if(!l(F))throw new ae("Feature table global property: REGION must be defined");let P=re.unpack(F),N=F[4],g=F[5],R=e._tile.computedTransform,A=v.getGlobalProperty("RTC_CENTER",J.FLOAT,3);l(A)?(A=h.unpack(A),I.multiplyByPoint(R,A,A)):(A=re.center(P),A.height=L.lerp(N,g,.5),A=ie.WGS84.cartographicToCartesian(A));let W=Ppt(f,y);if(n+=(4-n%4)%4,Z>0){v.featuresLength=Z;let Y=v.getPropertyArray("POLYGON_COUNTS",J.UNSIGNED_INT,1)??v.getPropertyArray("POLYGON_COUNT",J.UNSIGNED_INT,1);if(!l(Y))throw new ae("Feature table property: POLYGON_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let D=v.getPropertyArray("POLYGON_INDEX_COUNTS",J.UNSIGNED_INT,1)??v.getPropertyArray("POLYGON_INDEX_COUNT",J.UNSIGNED_INT,1);if(!l(D))throw new ae("Feature table property: POLYGON_INDEX_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let k=Y.reduce(function(K,$){return K+$*2},0),O=D.reduce(function(K,$){return K+$},0),w=new Uint32Array(t,n,O);n+=m;let z=new Uint16Array(t,n,k);n+=p;let H,te;l(f.POLYGON_MINIMUM_HEIGHTS)&&l(f.POLYGON_MAXIMUM_HEIGHTS)&&(H=v.getPropertyArray("POLYGON_MINIMUM_HEIGHTS",J.FLOAT,1),te=v.getPropertyArray("POLYGON_MAXIMUM_HEIGHTS",J.FLOAT,1)),e._polygons=new RN({positions:z,counts:Y,indexCounts:D,indices:w,minimumHeight:N,maximumHeight:g,polygonMinimumHeights:H,polygonMaximumHeights:te,center:A,rectangle:P,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:E,batchIds:W.polygons,modelMatrix:R})}let X=e._tileset;if(V>0){v.featuresLength=V;let Y=v.getPropertyArray("POLYLINE_COUNTS",J.UNSIGNED_INT,1)??v.getPropertyArray("POLYLINE_COUNT",J.UNSIGNED_INT,1);if(!l(Y))throw new ae("Feature table property: POLYLINE_COUNTS must be defined when POLYLINES_LENGTH is greater than 0");let D=v.getPropertyArray("POLYLINE_WIDTHS",J.UNSIGNED_SHORT,1);if(!l(D)){D=new Uint16Array(V);for(let H=0;H<V;++H)D[H]=2}let k=Y.reduce(function(H,te){return H+te*3},0),O=new Uint16Array(t,n,k);n+=b;let w=X.examineVectorLinesFunction;if(l(w)){let H=Z2(new Uint16Array(O),P,N,g,ie.WGS84);wpt(H,Y,W.polylines,E,e.url,w)}let z=Xpt;l(X.classificationType)&&(z=Npt),e._polylines=z({positions:O,widths:D,counts:Y,batchIds:W.polylines,minimumHeight:N,maximumHeight:g,center:A,rectangle:P,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:E,classificationType:X.classificationType,keepDecodedPositions:X.vectorKeepDecodedPositions})}if(C>0){let Y=new Uint16Array(t,n,C*3);e._points=new CN({positions:Y,batchIds:W.points,minimumHeight:N,maximumHeight:g,rectangle:P,batchTable:E,heightReference:X.heightReference,scene:X.scene})}}function C$(e){let t=e.featuresLength;if(!l(e._features)&&t>0){let n=new Array(t);l(e._polygons)&&e._polygons.createFeatures(e,n),l(e._polylines)&&e._polylines.createFeatures(e,n),l(e._points)&&e._points.createFeatures(e,n),e._features=n}}function wpt(e,t,n,i,o,r){let s=t.length,a=0;for(let c=0;c<s;c++){let d=t[c]*3,u=e.slice(a,a+d);a+=d,r(u,n[c],o,i)}}var FN=R$;var XYi=x(T(),1);var FXi=x(T(),1);var{ERR_CAPACITY:WXi}=Ks.Error,Mpt=new h,RB=class RB extends zr{constructor(){super(...arguments);ct(this,"_collection",null)}static clone(n,i){return super.clone(n,i),i.setPosition(n.getPosition(Mpt)),i}get vertexOffset(){return this._getUint32(RB.Layout.POSITION_OFFSET_U32)}get vertexCount(){return 1}getPosition(n){let i=this._collection._positionView;return h.fromArray(i,this.vertexOffset*3,n)}setPosition(n){let i=this._collection,o=this.vertexOffset;i._positionView[o*3]=n.x,i._positionView[o*3+1]=n.y,i._positionView[o*3+2]=n.z,this._dirty=!0,i._makeDirtyBoundingVolume()}toJSON(){return{...super.toJSON(),position:h.pack(this.getPosition(),[])}}};ct(RB,"Layout",{...zr.Layout,POSITION_OFFSET_U32:zr.Layout.__BYTE_LENGTH,__BYTE_LENGTH:zr.Layout.__BYTE_LENGTH+4});var G$=RB,Pc=G$;var TNi=x(T(),1);var mNi=x(T(),1);var XXi=x(T(),1),IN=`#ifdef USE_FLOAT64 in vec3 positionHigh; in vec3 positionLow; #else in vec3 position; #endif in vec4 pickColor; in vec4 showPixelSizeColorAlpha; in vec3 outlineWidthColorAlpha; out vec4 v_pickColor; out vec4 v_color; out vec4 v_outlineColor; out float v_innerRadiusFrac; void main() { // Unpack attributes. float show = showPixelSizeColorAlpha.x; float pixelSize = showPixelSizeColorAlpha.y; vec4 color = czm_decodeRGB8(showPixelSizeColorAlpha.z); float alpha = showPixelSizeColorAlpha.w; float outlineWidth = outlineWidthColorAlpha.x; vec4 outlineColor = czm_decodeRGB8(outlineWidthColorAlpha.y); float outlineAlpha = outlineWidthColorAlpha.z; /////////////////////////////////////////////////////////////////////////// float innerRadius = 0.5 * pixelSize * czm_pixelRatio; float outerRadius = (0.5 * pixelSize + outlineWidth) * czm_pixelRatio; /////////////////////////////////////////////////////////////////////////// #ifdef USE_FLOAT64 vec4 p = czm_translateRelativeToEye(positionHigh, positionLow); vec4 positionEC = czm_modelViewRelativeToEye * p; #else vec4 positionEC = czm_modelView * vec4(position, 1.0); #endif /////////////////////////////////////////////////////////////////////////// gl_Position = czm_projection * positionEC; czm_vertexLogDepth(); v_pickColor = pickColor / 255.0; v_color = color; v_color.a *= alpha * show; v_outlineColor = outlineColor; v_outlineColor.a *= outlineAlpha * show; v_innerRadiusFrac = innerRadius / outerRadius; gl_PointSize = 2.0 * outerRadius * show; gl_Position *= show; } `;var YXi=x(T(),1),PN=`in vec4 v_pickColor; in vec4 v_color; in vec4 v_outlineColor; in float v_innerRadiusFrac; void main() { // Distance between fragment and point center, 0 to 0.5. float distanceToCenter = length(gl_PointCoord - vec2(0.5)); float delta = fwidth(distanceToCenter); float outerLimit = 0.5; float innerLimit = 0.5 * v_innerRadiusFrac; float outerAlpha = 1.0 - smoothstep(max(0.0, outerLimit - delta), outerLimit, distanceToCenter); float innerAlpha = 1.0 - smoothstep(innerLimit - delta, innerLimit, distanceToCenter); vec4 color = vec4(mix(v_outlineColor.rgb, v_color.rgb, innerAlpha), outerAlpha); color.a *= mix(v_outlineColor.a, v_color.a, innerAlpha); if (color.a < 0.005) // matches 0/255 and 1/255 { discard; } out_FragColor = czm_gammaCorrect(color); czm_writeLogDepth(); } `;var UXi=x(T(),1);var XN=class XN extends Xl{constructor(t=B.EMPTY_OBJECT){super(t),this.size=t.size??1}static pack(t,n,i){super.pack(t,n,i),n.setUint8(this.Layout.SIZE_U8+i,t.size)}static unpack(t,n,i){return super.unpack(t,n,i),i.size=t.getUint8(this.Layout.SIZE_U8+n),i}toJSON(){return{...super.toJSON(),size:this.size}}};ct(XN,"Layout",{...Xl.Layout,SIZE_U8:Xl.Layout.__BYTE_LENGTH,__BYTE_LENGTH:Xl.Layout.__BYTE_LENGTH+4}),ct(XN,"DEFAULT_MATERIAL",Object.freeze(new XN));var A$=XN,Gf=A$;var E$={positionHigh:0,positionLow:1,pickColor:2,showSizeColorAlpha:3,outlineWidthColorAlpha:4},GZe={position:0,pickColor:1,showSizeColorAlpha:2,outlineWidthColorAlpha:3},FS=new Pc,Af=new Gf,NN=new U,AZe=new h,L$=new Rn;function kpt(e,t,n){let i=t.context;n=n||{destroy:Upt};let o=e._positionDatatype===J.DOUBLE,r=o?E$:GZe;if(!l(n.attributeArrays)){let a=e.primitiveCountMax;n.attributeArrays={...o?{positionHigh:new Float32Array(a*3),positionLow:new Float32Array(a*3)}:{position:e._positionView},pickColor:new Uint8Array(a*4),showSizeColorAlpha:new Float32Array(a*4),outlineWidthColorAlpha:new Float32Array(a*3)}}if(e._dirtyCount>0){let{attributeArrays:a}=n,c=a.positionHigh,d=a.positionLow,u=a.pickColor,m=a.showSizeColorAlpha,p=a.outlineWidthColorAlpha,{_dirtyOffset:b,_dirtyCount:f}=e;for(let y=b,_=b+f;y<_;y++)e.get(y,FS),FS._dirty&&(o&&(FS.getPosition(AZe),Rn.fromCartesian(AZe,L$),h.pack(L$.high,c,y*3),h.pack(L$.low,d,y*3)),FS.getMaterial(Af),U.fromRgba(FS._pickId,NN),u[y*4]=U.floatToByte(NN.red),u[y*4+1]=U.floatToByte(NN.green),u[y*4+2]=U.floatToByte(NN.blue),u[y*4+3]=U.floatToByte(NN.alpha),m[y*4]=FS.show?1:0,m[y*4+1]=Af.size,m[y*4+2]=cn.encodeRGB8(Af.color),m[y*4+3]=Af.color.alpha,p[y*3]=Af.outlineWidth,p[y*3+1]=cn.encodeRGB8(Af.outlineWidth>0?Af.outlineColor:Af.color),p[y*3+2]=Af.outlineWidth>0?Af.outlineColor.alpha:Af.color.alpha,FS._dirty=!1)}if(l(n.vertexArray)){if(e._dirtyCount>0){for(let a in r)if(Object.hasOwn(r,a)){let c=a;n.vertexArray.copyAttributeFromRange(r[c],n.attributeArrays[c],e._dirtyOffset,e._dirtyCount)}}}else{let{attributeArrays:a}=n;n.vertexArray=new Dn({context:i,attributes:[...o?[{index:E$.positionHigh,componentDatatype:J.FLOAT,componentsPerAttribute:3,vertexBuffer:et.createVertexBuffer({typedArray:a.positionHigh,context:i,usage:Ie.STATIC_DRAW})},{index:E$.positionLow,componentDatatype:J.FLOAT,componentsPerAttribute:3,vertexBuffer:et.createVertexBuffer({typedArray:a.positionLow,context:i,usage:Ie.STATIC_DRAW})}]:[{index:GZe.position,componentDatatype:e._positionDatatype,componentsPerAttribute:3,normalize:e._positionNormalized,vertexBuffer:et.createVertexBuffer({typedArray:e._positionView,context:i,usage:Ie.STATIC_DRAW})}],{index:r.pickColor,componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:4,vertexBuffer:et.createVertexBuffer({typedArray:a.pickColor,context:i,usage:Ie.STATIC_DRAW})},{index:r.showSizeColorAlpha,componentDatatype:J.FLOAT,componentsPerAttribute:4,vertexBuffer:et.createVertexBuffer({typedArray:a.showSizeColorAlpha,context:i,usage:Ie.STATIC_DRAW})},{index:r.outlineWidthColorAlpha,componentDatatype:J.FLOAT,componentsPerAttribute:3,vertexBuffer:et.createVertexBuffer({typedArray:a.outlineWidthColorAlpha,context:i,usage:Ie.STATIC_DRAW})}]})}l(n.renderState)||(n.renderState=Oe.fromCache({blending:e._blendOption===Xi.OPAQUE?tn.DISABLED:tn.ALPHA_BLEND,depthTest:{enabled:!0}})),l(n.shaderProgram)||(n.shaderProgram=en.fromCache({context:i,vertexShaderSource:new ze({sources:[IN],defines:o?["USE_FLOAT64"]:[]}),fragmentShaderSource:new ze({sources:[PN]}),attributeLocations:r})),l(n.command)||(n.command=new ot({vertexArray:n.vertexArray,renderState:n.renderState,shaderProgram:n.shaderProgram,primitiveType:Fe.POINTS,pass:e._blendOption===Xi.OPAQUE?We.OPAQUE:We.TRANSLUCENT,pickId:e._allowPicking?"v_pickColor":void 0,owner:e,count:e.primitiveCount,modelMatrix:e.modelMatrix,boundingVolume:e.boundingVolume,debugShowBoundingVolume:e.debugShowBoundingVolume}));let s=n.command;return s.count!==e.primitiveCount&&(s.count=e.primitiveCount),s.debugShowBoundingVolume!==e.debugShowBoundingVolume&&(s.debugShowBoundingVolume=e.debugShowBoundingVolume),t.commandList.push(s),e._makeClean(),n}function Upt(){let e=this;l(e.vertexArray)&&e.vertexArray.destroy(),l(e.shaderProgram)&&e.shaderProgram.destroy(),l(e.renderState)&&Oe.removeFromCache(e.renderState)}var YN=kpt;var W$=class e extends Ks{constructor(t=B.EMPTY_OBJECT){super({...t,vertexCountMax:t.primitiveCountMax})}_getCollectionClass(){return e}_getPrimitiveClass(){return Pc}_getMaterialClass(){return Gf}static _cloneEmpty(t){return new e({primitiveCountMax:t.primitiveCountMax,positionDatatype:t.positionDatatype,positionNormalized:t.positionNormalized})}add(t,n=new Pc){return super.add(t,n),n._setUint32(Pc.Layout.POSITION_OFFSET_U32,this._positionCount++),n.setPosition(t.position??h.ZERO),n}update(t){super.update(t);let n=t.passes;this.show&&(n.render||n.pick)&&(this._renderContext=YN(this,t,this._renderContext))}},Md=W$;var PNi=x(T(),1);var RNi=x(T(),1);function oR(e,t){this._conditionsExpression=Je(e,!0),this._conditions=e.conditions,this._runtimeConditions=void 0,Opt(this,t)}Object.defineProperties(oR.prototype,{conditionsExpression:{get:function(){return this._conditionsExpression}}});function Dpt(e,t){this.condition=e,this.expression=t}function Opt(e,t){let n=[],i=e._conditions;if(!l(i))return;let o=i.length;for(let r=0;r<o;++r){let s=i[r],a=String(s[0]),c=String(s[1]);n.push(new Dpt(new Hm(a,t),new Hm(c,t)))}e._runtimeConditions=n}oR.prototype.evaluate=function(e,t){let n=this._runtimeConditions;if(!l(n))return;let i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.condition.evaluate(e))return r.expression.evaluate(e,t)}};oR.prototype.evaluateColor=function(e,t){let n=this._runtimeConditions;if(!l(n))return;let i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.condition.evaluate(e))return r.expression.evaluateColor(e,t)}};oR.prototype.getShaderFunction=function(e,t,n,i){let o=this._runtimeConditions;if(!l(o)||o.length===0)return;let r="",s=o.length;for(let a=0;a<s;++a){let c=o[a],d=c.condition.getShaderExpression(t,n),u=c.expression.getShaderExpression(t,n);r+=` ${a===0?"if":"else if"} (${d}) { return ${u}; } `}return r=`${i} ${e} { ${r} return ${i}(1.0); } `,r};oR.prototype.getVariables=function(){let e=[],t=this._runtimeConditions;if(!l(t)||t.length===0)return e;let n=t.length;for(let i=0;i<n;++i){let o=t[i];jn(e,o.condition.getVariables()),jn(e,o.expression.getVariables())}return e=e.filter(function(i,o,r){return r.indexOf(i)===o}),e};var wN=oR;function Zx(e){this._style={},this._ready=!1,this._show=void 0,this._color=void 0,this._pointSize=void 0,this._pointOutlineColor=void 0,this._pointOutlineWidth=void 0,this._labelColor=void 0,this._labelOutlineColor=void 0,this._labelOutlineWidth=void 0,this._font=void 0,this._labelStyle=void 0,this._labelText=void 0,this._backgroundColor=void 0,this._backgroundPadding=void 0,this._backgroundEnabled=void 0,this._scaleByDistance=void 0,this._translucencyByDistance=void 0,this._distanceDisplayCondition=void 0,this._heightOffset=void 0,this._anchorLineEnabled=void 0,this._anchorLineColor=void 0,this._image=void 0,this._disableDepthTestDistance=void 0,this._horizontalOrigin=void 0,this._verticalOrigin=void 0,this._labelHorizontalOrigin=void 0,this._labelVerticalOrigin=void 0,this._meta=void 0,this._lineWidth=void 0,this._colorShaderFunction=void 0,this._showShaderFunction=void 0,this._pointSizeShaderFunction=void 0,this._colorShaderFunctionReady=!1,this._showShaderFunctionReady=!1,this._pointSizeShaderFunctionReady=!1,this._colorShaderTranslucent=!1,Bpt(this,e)}function Bpt(e,t){t=Je(t,!0)??e._style,e._style=t,e.show=t.show,e.color=t.color,e.pointSize=t.pointSize,e.pointOutlineColor=t.pointOutlineColor,e.pointOutlineWidth=t.pointOutlineWidth,e.labelColor=t.labelColor,e.labelOutlineColor=t.labelOutlineColor,e.labelOutlineWidth=t.labelOutlineWidth,e.labelStyle=t.labelStyle,e.font=t.font,e.labelText=t.labelText,e.backgroundColor=t.backgroundColor,e.backgroundPadding=t.backgroundPadding,e.backgroundEnabled=t.backgroundEnabled,e.scaleByDistance=t.scaleByDistance,e.translucencyByDistance=t.translucencyByDistance,e.distanceDisplayCondition=t.distanceDisplayCondition,e.heightOffset=t.heightOffset,e.anchorLineEnabled=t.anchorLineEnabled,e.anchorLineColor=t.anchorLineColor,e.image=t.image,e.disableDepthTestDistance=t.disableDepthTestDistance,e.horizontalOrigin=t.horizontalOrigin,e.verticalOrigin=t.verticalOrigin,e.labelHorizontalOrigin=t.labelHorizontalOrigin,e.labelVerticalOrigin=t.labelVerticalOrigin,e.lineWidth=t.lineWidth;let n={};if(l(t.meta)){let i=t.defines,o=t.meta??B.EMPTY_OBJECT;for(let r in o)o.hasOwnProperty(r)&&(n[r]=new Hm(o[r],i))}e._meta=n,e._ready=!0}function gr(e,t){let n=(e._style??B.EMPTY_OBJECT).defines;if(l(t)){if(typeof t=="boolean"||typeof t=="number")return new Hm(String(t));if(typeof t=="string")return new Hm(t,n);if(l(t.conditions))return new wN(t,n)}else return;return t}function yr(e){if(l(e)){if(l(e.expression))return e.expression;if(l(e.conditionsExpression))return Je(e.conditionsExpression,!0)}else return;return e}Object.defineProperties(Zx.prototype,{style:{get:function(){return this._style}},show:{get:function(){return this._show},set:function(e){this._show=gr(this,e),this._style.show=yr(this._show),this._showShaderFunctionReady=!1}},color:{get:function(){return this._color},set:function(e){this._color=gr(this,e),this._style.color=yr(this._color),this._colorShaderFunctionReady=!1}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=gr(this,e),this._style.pointSize=yr(this._pointSize),this._pointSizeShaderFunctionReady=!1}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=gr(this,e),this._style.pointOutlineColor=yr(this._pointOutlineColor)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=gr(this,e),this._style.pointOutlineWidth=yr(this._pointOutlineWidth)}},labelColor:{get:function(){return this._labelColor},set:function(e){this._labelColor=gr(this,e),this._style.labelColor=yr(this._labelColor)}},labelOutlineColor:{get:function(){return this._labelOutlineColor},set:function(e){this._labelOutlineColor=gr(this,e),this._style.labelOutlineColor=yr(this._labelOutlineColor)}},labelOutlineWidth:{get:function(){return this._labelOutlineWidth},set:function(e){this._labelOutlineWidth=gr(this,e),this._style.labelOutlineWidth=yr(this._labelOutlineWidth)}},font:{get:function(){return this._font},set:function(e){this._font=gr(this,e),this._style.font=yr(this._font)}},labelStyle:{get:function(){return this._labelStyle},set:function(e){this._labelStyle=gr(this,e),this._style.labelStyle=yr(this._labelStyle)}},labelText:{get:function(){return this._labelText},set:function(e){this._labelText=gr(this,e),this._style.labelText=yr(this._labelText)}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){this._backgroundColor=gr(this,e),this._style.backgroundColor=yr(this._backgroundColor)}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){this._backgroundPadding=gr(this,e),this._style.backgroundPadding=yr(this._backgroundPadding)}},backgroundEnabled:{get:function(){return this._backgroundEnabled},set:function(e){this._backgroundEnabled=gr(this,e),this._style.backgroundEnabled=yr(this._backgroundEnabled)}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){this._scaleByDistance=gr(this,e),this._style.scaleByDistance=yr(this._scaleByDistance)}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){this._translucencyByDistance=gr(this,e),this._style.translucencyByDistance=yr(this._translucencyByDistance)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=gr(this,e),this._style.distanceDisplayCondition=yr(this._distanceDisplayCondition)}},heightOffset:{get:function(){return this._heightOffset},set:function(e){this._heightOffset=gr(this,e),this._style.heightOffset=yr(this._heightOffset)}},anchorLineEnabled:{get:function(){return this._anchorLineEnabled},set:function(e){this._anchorLineEnabled=gr(this,e),this._style.anchorLineEnabled=yr(this._anchorLineEnabled)}},anchorLineColor:{get:function(){return this._anchorLineColor},set:function(e){this._anchorLineColor=gr(this,e),this._style.anchorLineColor=yr(this._anchorLineColor)}},image:{get:function(){return this._image},set:function(e){this._image=gr(this,e),this._style.image=yr(this._image)}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance=gr(this,e),this._style.disableDepthTestDistance=yr(this._disableDepthTestDistance)}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin=gr(this,e),this._style.horizontalOrigin=yr(this._horizontalOrigin)}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin=gr(this,e),this._style.verticalOrigin=yr(this._verticalOrigin)}},labelHorizontalOrigin:{get:function(){return this._labelHorizontalOrigin},set:function(e){this._labelHorizontalOrigin=gr(this,e),this._style.labelHorizontalOrigin=yr(this._labelHorizontalOrigin)}},labelVerticalOrigin:{get:function(){return this._labelVerticalOrigin},set:function(e){this._labelVerticalOrigin=gr(this,e),this._style.labelVerticalOrigin=yr(this._labelVerticalOrigin)}},lineWidth:{get:function(){return this._lineWidth},set:function(e){this._lineWidth=gr(this,e),this._style.lineWidth=yr(this._lineWidth)}},meta:{get:function(){return this._meta},set:function(e){this._meta=e}}});Zx.fromUrl=function(e){return ve.createIfNeeded(e).fetchJson(e).then(function(n){return new Zx(n)})};Zx.prototype.getColorShaderFunction=function(e,t,n){return this._colorShaderFunctionReady?(n.translucent=this._colorShaderTranslucent,this._colorShaderFunction):(this._colorShaderFunctionReady=!0,l(this.color)&&l(this.color.getShaderFunction)?this._colorShaderFunction=this.color.getShaderFunction(e,t,n,"vec4"):this._colorShaderFunction=void 0,this._colorShaderTranslucent=n.translucent,this._colorShaderFunction)};Zx.prototype.getShowShaderFunction=function(e,t,n){return this._showShaderFunctionReady?this._showShaderFunction:(this._showShaderFunctionReady=!0,l(this.show)&&l(this.show.getShaderFunction)?this._showShaderFunction=this.show.getShaderFunction(e,t,n,"bool"):this._showShaderFunction=void 0,this._showShaderFunction)};Zx.prototype.getPointSizeShaderFunction=function(e,t,n){return this._pointSizeShaderFunctionReady?this._pointSizeShaderFunction:(this._pointSizeShaderFunctionReady=!0,l(this.pointSize)&&l(this.pointSize.getShaderFunction)?this._pointSizeShaderFunction=this.pointSize.getShaderFunction(e,t,n,"float"):this._pointSizeShaderFunction=void 0,this._pointSizeShaderFunction)};Zx.prototype.getVariables=function(){let e=[];return l(this.color)&&l(this.color.getVariables)&&jn(e,this.color.getVariables()),l(this.show)&&l(this.show.getVariables)&&jn(e,this.show.getVariables()),l(this.pointSize)&&l(this.pointSize.getVariables)&&jn(e,this.pointSize.getVariables()),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var og=Zx;var pYi=x(T(),1);var jNi=x(T(),1);var EZe=new Pc,LZe=new ha,WZe=new Hr,zpt=new Gf,Hpt=new bu,Kpt=new pu,v$=class{constructor(t,n,i=0){ct(this,"_color",new U);ct(this,"_outlineColor",new U);this._content=t,this._batchId=n,this._batchTableId=i,this._primitivesByCollection=new Map}addPrimitiveByCollection(t,n){let i=this._primitivesByCollection.get(t);i||(i=[],this._primitivesByCollection.set(t,i)),i.push(n)}get show(){for(let t of this._iteratePrimitives())if(t.show)return!0;return!1}set show(t){for(let n of this._iteratePrimitives())n.show=t}get color(){for(let t of this._iterateMaterials())return U.clone(t.color,this._color);return U.clone(U.WHITE,this._color)}set color(t){for(let n of this._iterateMaterials())U.clone(t,n.color)}get pointSize(){for(let t of this._iteratePointMaterials())return t.size;return 1}set pointSize(t){for(let n of this._iteratePointMaterials())n.size=t}get pointOutlineColor(){for(let t of this._iteratePointMaterials())return U.clone(t.outlineColor,this._outlineColor);return U.clone(U.WHITE,this._outlineColor)}set pointOutlineColor(t){for(let n of this._iteratePointMaterials())U.clone(t,n.outlineColor)}get pointOutlineWidth(){for(let t of this._iteratePointMaterials())return t.outlineWidth;return 0}set pointOutlineWidth(t){for(let n of this._iteratePointMaterials())n.outlineWidth=t}get lineWidth(){for(let t of this._iteratePolylineMaterials())return t.width;return 1}set lineWidth(t){for(let n of this._iteratePolylineMaterials())n.width=t}get lineOutlineColor(){for(let t of this._iteratePolylineMaterials())return U.clone(t.outlineColor,this._outlineColor);return U.clone(U.WHITE,this._outlineColor)}set lineOutlineColor(t){for(let n of this._iteratePolylineMaterials())U.clone(t,n.outlineColor)}get lineOutlineWidth(){for(let t of this._iteratePolylineMaterials())return t.outlineWidth;return 0}set lineOutlineWidth(t){for(let n of this._iteratePolylineMaterials())n.outlineWidth=t}get polygonOutlineColor(){for(let t of this._iteratePolygonMaterials())return U.clone(t.outlineColor,this._outlineColor);return U.clone(U.WHITE,this._outlineColor)}set polygonOutlineColor(t){for(let n of this._iteratePolygonMaterials())U.clone(t,n.outlineColor)}get polygonOutlineWidth(){for(let t of this._iteratePolygonMaterials())return t.outlineWidth;return 0}set polygonOutlineWidth(t){for(let n of this._iteratePolygonMaterials())n.outlineWidth=t}get content(){return this._content}get tileset(){return this._content.tileset}get primitive(){return this._content.tileset}get featureId(){return this._batchId}get _batchTable(){return this._content.batchTables[this._batchTableId]}get pickIds(){let t=[];for(let n of this._iteratePrimitives())t.push(n._pickId);return t}hasProperty(t){return l(this._batchTable)?this._batchTable.hasProperty(this._batchId,t):!1}getPropertyIds(t){return l(this._batchTable)?this._batchTable.getPropertyIds(this._batchId,t):[]}getProperty(t){if(l(this._batchTable))return this._batchTable.getProperty(this._batchId,t)}getPropertyInherited(t){return Qs.getPropertyInherited(this._content,this._batchId,t,this._batchTable)}setProperty(t,n){throw new ge("Not implemented")}isExactClass(t){return l(this._batchTable)?this._batchTable.isExactClass(this._batchId,t):!1}isClass(t){return l(this._batchTable)?this._batchTable.isClass(this._batchId,t):!1}getExactClassName(){if(l(this._batchTable))return this._batchTable.getExactClassName(this._batchId)}*_iteratePrimitives(){yield*this._iteratePrimitivesWith(Md,EZe),yield*this._iteratePrimitivesWith(il,LZe),yield*this._iteratePrimitivesWith(tl,WZe)}*_iteratePrimitivesWith(t,n){let i=this._content._collections;for(let o=0;o<i.length;o++){let r=i[o],s=this._primitivesByCollection.get(o);if(s&&r instanceof t)for(let a of s)r.get(a,n),yield n}}*_iterateMaterials(){yield*this._iteratePointMaterials(),yield*this._iteratePolylineMaterials(),yield*this._iteratePolygonMaterials()}*_iteratePointMaterials(){yield*this._iterateMaterialsWith(Md,EZe,zpt)}*_iteratePolylineMaterials(){yield*this._iterateMaterialsWith(il,LZe,Hpt)}*_iteratePolygonMaterials(){yield*this._iterateMaterialsWith(tl,WZe,Kpt)}*_iterateMaterialsWith(t,n,i){for(let o of this._iteratePrimitivesWith(t,n))o.getMaterial(i),yield i,o.setMaterial(i)}},IS=v$;var vZe=new h,Jpt=new Pc,jpt=new ha,IZe=new Hr;function Qpt(e,t){let n=t.scene.nodes,i={collections:[],collectionLocalMatrices:[],collectionFeatureTableIds:new Map,featuresByTableId:new Map};for(let o=0;o<n.length;o++)PZe(e,n[o],I.IDENTITY,i);return i}function GB(e){let t=e.BYTES_PER_ELEMENT*8;return Math.pow(2,t)-1}function qpt(e){let t={pointPrimitiveCount:0,pointVertexCount:0,polylinePrimitiveCount:0,polylineVertexCount:0,polygonPrimitiveCount:0,polygonVertexCount:0,polygonHoleCount:0,polygonTriangleCount:0},n=e.vector,i=e.polygon,o=e.primitiveType,s=xt.getAttributeBySemantic(e,st.POSITION).count,a=e.indices?ga.readIndicesAsTypedArray(e.indices):void 0;if(o===Fe.POINTS)t.pointPrimitiveCount+=s,t.pointVertexCount+=s;else if(o===Fe.LINE_STRIP){let c=n?n.count:FZe(a);t.polylinePrimitiveCount+=c,t.polylineVertexCount+=a.length-c+1}else if(o===Fe.TRIANGLES||o===Fe.LINE_LOOP)if(n){t.polygonPrimitiveCount+=n.count,t.polygonVertexCount+=s,t.polygonTriangleCount+=a.length/3;let c=n.polygonHoleCounts;if(c)for(let d=0;d<c.length;d++)t.polygonHoleCount+=c[d]}else{let c=FZe(i.loopIndices);t.polygonPrimitiveCount+=i.count,t.polygonVertexCount+=i.loopIndices.length-c+1,t.polygonTriangleCount+=i.triangleIndices.length,t.polygonHoleCount+=c-i.count}else throw new ae(`Unexpected primitive type: ${o}`);return t}function FZe(e){let t=GB(e),n=0;for(let i=0;i<e.length;i++)e[i]===t&&i+1<e.length&&n++;return n+1}function $pt(e,t,n,i,o){let r=xt.getAttributeBySemantic(t,st.POSITION),s=r.typedArray??(n.positionNormalized?ga.readAttributeAsRawCompactTypedArray(r):ga.readAttributeAsTypedArray(r)),a=t.indices?ga.readIndicesAsTypedArray(t.indices):void 0,c=e0t(e,t,o);n instanceof Md?t0t(n,i,s,a,c):n instanceof il?n0t(n,i,s,a,c):n instanceof tl&&(l(t.vector)?i0t(n,i,s,a,c,t.vector):o0t(n,i,s,c,t.polygon))}function e0t(e,t,n){let i=e.tileset.featureIdLabel,o=xt.getFeatureIdsByLabel(t.featureIds,i);if(!(o instanceof Zn.FeatureIdAttribute))return()=>{};let r=xt.getAttributeBySemantic(t,st.FEATURE_ID,o.setIndex),s=r.typedArray??ga.readAttributeAsTypedArray(r);for(let a=0;a<s.length;a++){let c=s[a];if(!n.has(c)){let d=new IS(e,c,o.propertyTableId);n.set(c,d)}}return function(c){let d=s[c];if(d!==o.nullFeatureId)return n.get(d)}}function t0t(e,t,n,i,o){let r=n.length/3;for(let s=0,a=i?i.length:r;s<a;s++){let c=i?i[s]:s;h.fromArray(n,c*3,vZe);let d=o(c);d&&d.addPrimitiveByCollection(t,s),e.add({position:vZe,pickObject:d,featureId:d?.featureId},Jpt)}}function n0t(e,t,n,i,o){let r=GB(i),s=0,a=0,c=0;for(let d=0;d<i.length;d++){if(i[d]===r?a=d-s:d+1===i.length&&(a=d+1-s),a===0)continue;let m=s+a,p=i.subarray(s,m),b=XZe(n,p,3),f=o(i[s]);f&&f.addPrimitiveByCollection(t,c),e.add({positions:b,pickObject:f,featureId:f?.featureId},jpt),s=d+1,a=0,c++}}function i0t(e,t,n,i,o,r){let s=r.polygonAttributeOffsets,a=r.polygonIndicesOffsets,c=r.polygonHoleCounts,d=r.polygonHoleOffsets,u=n.length/3,m=s.length;for(let p=0;p<m;p++){let b=s[p],f=p+1<m?s[p+1]:u,y=n.subarray(b*3,f*3),_;if(l(c)&&c[p]>0){let G=c[p];_=d.slice(p,p+G);for(let E=0;E<G;E++)_[E]-=b}let S=a[p],Z=p+1<m?a[p+1]:i.length,V=i.slice(S,Z);for(let G=0;G<V.length;G++)V[G]-=b;let C=o(b);C&&C.addPrimitiveByCollection(t,p),e.add({positions:y,triangles:V,holes:_,pickObject:C,featureId:C?.featureId},IZe)}}function o0t(e,t,n,i,o){let r=o.loopIndices.constructor,s=new r(o.loopIndices.length),a=GB(o.loopIndices);for(let c=0;c<o.count;c++){let d=c+1===o.count,u=o.loopIndicesOffsets[c],m=d?o.loopIndices.length:o.loopIndicesOffsets[c+1],p=o.loopIndices.subarray(u,m),b=XZe(n,p,3,s),f=[];for(let Z=0;Z<p.length;Z++){let V=Z+1===p.length;p[Z]===a&&!V&&f.push(Z)}let y=new r(f),_;if(l(o.triangleIndices)){let Z=o.triangleIndicesOffsets[c],V=d?o.triangleIndices.length:o.triangleIndicesOffsets[c+1];_=o.triangleIndices.subarray(Z,V);for(let C=0;C<_.length;C++)_[C]=s[_[C]]}else throw new Error("Runtime triangulation not yet supported.");let S=i(p[0]);S&&S.addPrimitiveByCollection(t,c),e.add({positions:b,triangles:_,holes:y,pickObject:S,featureId:S?.featureId},IZe)}}function PZe(e,t,n,i){let o=xt.getNodeTransform(t),r=I.multiplyTransformation(n,o,new I),s=t.primitives;for(let c=0;c<s.length;c++){let d=s[c],u=d.primitiveType,m,p=qpt(d),b=xt.getAttributeBySemantic(d,st.POSITION),f=b.normalized??!1,y=b.componentDatatype;u===Fe.POINTS?m=new Md({primitiveCountMax:p.pointPrimitiveCount,allowPicking:!0,positionNormalized:f,positionDatatype:y}):u===Fe.LINE_STRIP?m=new il({primitiveCountMax:p.polylinePrimitiveCount,vertexCountMax:p.polylineVertexCount,allowPicking:!0,positionNormalized:f,positionDatatype:y}):(u===Fe.TRIANGLES||u===Fe.LINE_LOOP)&&(m=new tl({primitiveCountMax:p.polygonPrimitiveCount,vertexCountMax:p.polygonVertexCount,holeCountMax:p.polygonHoleCount,triangleCountMax:p.polygonTriangleCount,allowPicking:!0,positionNormalized:f,positionDatatype:y}));let S=d.featureIds?.[0]?.propertyTableId;i.featuresByTableId.has(S)||i.featuresByTableId.set(S,new Map),i.collections.push(m),i.collectionLocalMatrices.push(I.clone(r)),i.collectionFeatureTableIds.set(m,S),$pt(e,d,m,i.collections.length-1,i.featuresByTableId.get(S))}let a=t.children;for(let c=0;c<a.length;c++)PZe(e,a[c],r,i)}function XZe(e,t,n,i){let o=GB(t),r=0;for(let d=0;d<t.length;d++)t[d]!==o&&r++;let s=e.constructor,a=new s(r*n),c=0;for(let d=0;d<t.length;d++){let u=t[d];if(i&&(i[u]=u===o?o:c),u!==o){for(let m=0;m<n;m++)a[c*n+m]=e[u*n+m];c++}}return a}var MN=Qpt;var AB=new Pc,EB=new ha,LB=new Hr,kN=new Gf,F$=new bu,NZe=new pu,YZe=new I,I$=class e{constructor(t,n,i){this._tileset=t,this._tile=n,this._resource=i,this._model=void 0,this._collections=[],this._collectionLocalMatrices=[],this._collectionFeatureTableIds=new Map,this._featuresByTableId=new Map,this._metadata=void 0,this._group=void 0,this.featurePropertiesDirty=!1,this._ready=!1,this._modelMatrix=I.clone(I.IDENTITY)}get featuresLength(){return this.batchTables.reduce((t,n)=>t+n.featuresLength,0)}get pointsLength(){return this._collections.filter(t=>t instanceof Md).reduce((t,n)=>t+n.primitiveCount,0)}get trianglesLength(){return this._collections.reduce((t,n)=>n instanceof tl?t+n.triangleCount:n instanceof il?t+(n.vertexCount-n.primitiveCount)*2:t,0)}get geometryByteLength(){return this._collections.reduce((t,n)=>t+n.byteLength,0)}get texturesByteLength(){return 0}get batchTableByteLength(){return this.batchTables.reduce((t,n)=>t+n.batchTableByteLength,0)}get innerContents(){}get ready(){return this._ready}get tileset(){return this._tileset}get tile(){return this._tile}get url(){return this._resource.getUrlComponent(!0)}get batchTables(){return this._model._featureTables}get batchTable(){throw new ge("Deprecated: Use `content.batchTables`.")}get metadata(){return this._metadata}set metadata(t){this._metadata=t}get group(){return this._group}set group(t){this._group=t}getFeature(t,n){return this._featuresByTableId.get(n)?.get(t)}hasProperty(t,n,i){let o=this.getFeature(t,i);return o?o.hasProperty(n):!1}applyDebugSettings(t,n){let i=t?`color("${n.toCssHexString()}", 1.0)`:'color("white", 1.0)';this.applyStyle(new og({color:i}))}applyStyle(t){let n=r=>r instanceof Md,i=r=>r instanceof il,o=r=>r instanceof tl;for(let r of this._collections.filter(n)){let s=this._collectionFeatureTableIds.get(r);for(let a=0,c=r.primitiveCount;a<c;a++){r.get(a,AB);let d=this.getFeature(AB.featureId,s);l(t.show)&&(AB.show=t.show.evaluate(d)),l(t.color)&&t.color.evaluate(d,kN.color),l(t.pointSize)&&(kN.size=t.pointSize.evaluate(d)),l(t.pointOutlineWidth)&&(kN.outlineWidth=t.pointOutlineWidth.evaluate(d)),l(t.pointOutlineColor)&&t.pointOutlineColor.evaluate(d,kN.outlineColor),AB.setMaterial(kN)}}for(let r of this._collections.filter(i)){let s=this._collectionFeatureTableIds.get(r);for(let a=0,c=r.primitiveCount;a<c;a++){r.get(a,EB);let d=this.getFeature(EB.featureId,s);l(t.show)&&(EB.show=t.show.evaluate(d)),l(t.color)&&t.color.evaluate(d,F$.color),l(t.lineWidth)&&(F$.width=t.lineWidth.evaluate(d)),EB.setMaterial(F$)}}for(let r of this._collections.filter(o)){let s=this._collectionFeatureTableIds.get(r);for(let a=0,c=r.primitiveCount;a<c;a++){r.get(a,LB);let d=this.getFeature(LB.featureId,s);l(t.show)&&(LB.show=t.show.evaluate(d)),l(t.color)&&t.color.evaluate(d,NZe.color),LB.setMaterial(NZe)}}}update(t,n){let i=this._tileset,o=i._scene?.vectorProvider;if(l(this._model)&&!this._ready){let s=this._model;s.modelMatrix=this._tile.computedTransform,s.update(n),s.ready&&(s0t(this),this._ready=!0)}I.multiplyTransformation(this._tile.computedTransform,this._modelMatrix,YZe);let r=l(o)&&this._tile._selectedFrame===n.frameNumber;for(let s=0;s<this._collections.length;s++){let a=this._collections[s];I.multiplyTransformation(YZe,this._collectionLocalMatrices[s],a.modelMatrix),Wd(i._heightReference)?r&&o.markSelected(a,n.frameNumber):a.update(n)}}pick(t,n,i){}isDestroyed(){return!1}destroy(){let t=this._tileset._scene?.vectorProvider;this._model?.destroy(),this._model=void 0;for(let n of this._collections)t?.remove(n),n.destroy();return this._collections.length=0,me(this)}static async fromGltf(t,n,i,o){let r=new e(t,n,i),s=r0t(t,n,r,o),a=await vu.fromGltfAsync(s);return a.show=!1,r._model=a,r}};function r0t(e,t,n,i){return{gltf:i,basePath:n._resource,cull:!1,releaseGltfJson:!0,opaquePass:We.CESIUM_3D_TILE,modelMatrix:t.computedTransform,upAxis:e._modelUpAxis,forwardAxis:e._modelForwardAxis,incrementallyLoadTextures:!1,content:n,featureIdLabel:e.featureIdLabel,instanceFeatureIdLabel:e.instanceFeatureIdLabel,projectTo2D:e._projectTo2D,enablePick:e._enablePick,enableDebugWireframe:e._enableDebugWireframe,enableShowOutline:!1}}function s0t(e){let t=e._model.sceneGraph.components,n=xt.getAxisCorrectionMatrix(t.upAxis,t.forwardAxis,new I);I.multiplyTransformation(t.transform,n,e._modelMatrix);let i=MN(e,t);e._collections=i.collections,e._collectionLocalMatrices=i.collectionLocalMatrices,e._collectionFeatureTableIds=i.collectionFeatureTableIds,e._featuresByTableId=i.featuresByTableId}var Vx=I$;var nMi=x(T(),1);var Owi=x(T(),1);var UYi=x(T(),1);function lc(){}lc._maxSortingConcurrency=Math.max(hn.hardwareConcurrency-1,1);lc._sorterTaskProcessor=void 0;lc._taskProcessorReady=!1;lc._error=void 0;lc._getSorterTaskProcessor=function(){if(!l(lc._sorterTaskProcessor)){let e=new Jn("gaussianSplatSorter",lc._maxSortingConcurrency);e.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/wasm_splats_bg.wasm"}).then(function(t){t?lc._taskProcessorReady=!0:lc._error=new ae("Gaussian splat sorter could not be initialized.")}).catch(t=>{lc._error=t}),lc._sorterTaskProcessor=e}return lc._sorterTaskProcessor};lc.radixSortIndexes=function(e){let t=lc._getSorterTaskProcessor();if(l(lc._error))throw lc._error;if(lc._taskProcessorReady)return t.scheduleTask(e,[e.primitive.positions.buffer])};var PS=lc;var KYi=x(T(),1);function dc(){}dc._maxSortingConcurrency=Math.max(hn.hardwareConcurrency-1,1);dc._textureTaskProcessor=void 0;dc._taskProcessorReady=!1;dc._error=void 0;dc._getTextureTaskProcessor=function(){if(!l(dc._textureTaskProcessor)){let e=new Jn("gaussianSplatTextureGenerator",dc._maxSortingConcurrency);e.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/wasm_splats_bg.wasm"}).then(function(t){t?dc._taskProcessorReady=!0:dc._error=new ae("Gaussian splat sorter could not be initialized.")}).catch(t=>{dc._error=t}),dc._textureTaskProcessor=e}return dc._textureTaskProcessor};dc.generateFromAttributes=function(e){let t=dc._getTextureTaskProcessor();if(l(dc._error))throw dc._error;if(!dc._taskProcessorReady)return;let{attributes:n}=e;return t.scheduleTask(e,[n.positions.buffer,n.scales.buffer,n.rotations.buffer,n.colors.buffer])};var UN=dc;var twi=x(T(),1);function a0t(e){let t=new xb;this.shaderBuilder=t,this.uniformMap={},this.renderStateOptions=Oe.getState(Oe.fromCache({depthTest:{enabled:!0,func:ac.LESS_OR_EQUAL}})),this.alphaOptions=new ZS,this.hasSkipLevelOfDetail=!1,e._useLogDepth&&t.addDefine("LOG_DEPTH_READ_ONLY",void 0,pe.FRAGMENT)}var DN=a0t;var iwi=x(T(),1),ON=`// // Vertex shader for Gaussian splats. // The splats are rendered as quads in view space. Splat attributes are loaded from a texture with precomputed 3D covariance. // Passes local quad coordinates and color to the fragment shader for Gaussian evaluation. // // Discards splats outside the view frustum or with negligible screen size. // #if defined(HAS_SPHERICAL_HARMONICS) const uint coefficientCount[3] = uint[3](3u,8u,15u); const float SH_C1 = 0.48860251; const float SH_C2[5] = float[5]( 1.092548430, -1.09254843, 0.315391565, -1.09254843, 0.546274215 ); const float SH_C3[7] = float[7]( -0.59004358, 2.890611442, -0.45704579, 0.373176332, -0.45704579, 1.445305721, -0.59004358 ); //Retrieve SH coefficient. Currently RG32UI format uvec2 loadSHCoeff(uint splatID, int index) { ivec2 shTexSize = textureSize(u_sphericalHarmonicsTexture, 0); uint dims = coefficientCount[uint(u_sphericalHarmonicsDegree)-1u]; uint splatsPerRow = uint(shTexSize.x) / dims; uint shIndex = (splatID%splatsPerRow) * dims + uint(index); ivec2 shPosCoord = ivec2(shIndex, splatID / splatsPerRow); return texelFetch(u_sphericalHarmonicsTexture, shPosCoord, 0).rg; } //Unpack RG32UI half float coefficients to vec3 vec3 halfToVec3(uvec2 packed) { return vec3(unpackHalf2x16(packed.x), unpackHalf2x16(packed.y).x); } vec3 loadAndExpandSHCoeff(uint splatID, int index) { uvec2 coeff = loadSHCoeff(splatID, index); return halfToVec3(coeff); } vec3 evaluateSH(uint splatID, vec3 viewDir) { vec3 result = vec3(0.0); int coeffIndex = 0; float x = viewDir.x, y = viewDir.y, z = viewDir.z; if (u_sphericalHarmonicsDegree >= 1.) { vec3 sh1 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh2 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh3 = loadAndExpandSHCoeff(splatID, coeffIndex++); result += -SH_C1 * y * sh1 + SH_C1 * z * sh2 - SH_C1 * x * sh3; if (u_sphericalHarmonicsDegree >= 2.) { float xx = x * x; float yy = y * y; float zz = z * z; float xy = x * y; float yz = y * z; float xz = x * z; vec3 sh4 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh5 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh6 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh7 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh8 = loadAndExpandSHCoeff(splatID, coeffIndex++); result += SH_C2[0] * xy * sh4 + SH_C2[1] * yz * sh5 + SH_C2[2] * (2.0f * zz - xx - yy) * sh6 + SH_C2[3] * xz * sh7 + SH_C2[4] * (xx - yy) * sh8; if (u_sphericalHarmonicsDegree >= 3.) { vec3 sh9 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh10 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh11 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh12 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh13 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh14 = loadAndExpandSHCoeff(splatID, coeffIndex++); vec3 sh15 = loadAndExpandSHCoeff(splatID, coeffIndex++); result += SH_C3[0] * y * (3.0f * xx - yy) * sh9 + SH_C3[1] * xy * z * sh10 + SH_C3[2] * y * (4.0f * zz - xx - yy) * sh11 + SH_C3[3] * z * (2.0f * zz - 3.0f * xx - 3.0f * yy) * sh12 + SH_C3[4] * x * (4.0f * zz - xx - yy) * sh13 + SH_C3[5] * z * (xx - yy) * sh14 + SH_C3[6] * x * (xx - 3.0f * yy) * sh15; } } } return result; } #endif // Transforms and projects splat covariance into screen space and extracts the major and minor axes of the Gaussian ellipsoid // which is used to calculate the vertex position in clip space. vec4 calcCovVectors(vec3 viewPos, mat3 Vrk) { vec4 t = vec4(viewPos, 1.0); vec2 focal = vec2(czm_projection[0][0] * czm_viewport.z, czm_projection[1][1] * czm_viewport.w); vec2 J1 = focal / t.z; vec2 J2 = -focal * vec2(t.x, t.y) / (t.z * t.z); mat3 J = mat3( J1.x, 0.0, J2.x, 0.0, J1.y, J2.y, 0.0, 0.0, 0.0 ); mat3 R = mat3(czm_modelView); //transform our covariance into view space //ensures orientation is correct mat3 Vrk_view = R * Vrk * transpose(R); mat3 cov = transpose(J) * Vrk_view * J; float diagonal1 = cov[0][0] + .3; float offDiagonal = cov[0][1]; float diagonal2 = cov[1][1] + .3; float mid = 0.5 * (diagonal1 + diagonal2); float radius = length(vec2((diagonal1 - diagonal2) * 0.5, offDiagonal)); float lambda1 = mid + radius; float lambda2 = max(mid - radius, 0.1); vec2 diagonalVector = normalize(vec2(offDiagonal, lambda1 - diagonal1)); return vec4( min(sqrt(2.0 * lambda1), 1024.0) * diagonalVector, min(sqrt(2.0 * lambda2), 1024.0) * vec2(diagonalVector.y, -diagonalVector.x) ); } highp vec4 discardVec = vec4(0.0, 0.0, 2.0, 1.0); void main() { uint texIdx = uint(a_splatIndex); // u_splatRowMask and u_splatRowShift encode the row width of the splat // attribute texture. The texture width is always maximumTextureSize, which // varies by GPU, so these are passed as uniforms rather than constants. // rowMask = maximumTextureSize/2 - 1 // rowShift = log2(maximumTextureSize/2) uint rowMask = uint(u_splatRowMask); uint rowShift = uint(u_splatRowShift); ivec2 posCoord = ivec2(int((texIdx & rowMask) << 1), int(texIdx >> rowShift)); vec4 splatPosition = vec4( uintBitsToFloat(uvec4(texelFetch(u_splatAttributeTexture, posCoord, 0))) ); vec4 splatViewPos = czm_modelView * vec4(splatPosition.xyz, 1.0); vec4 clipPosition = czm_projection * splatViewPos; float clip = 1.2 * clipPosition.w; if (clipPosition.z < -clip || clipPosition.x < -clip || clipPosition.x > clip || clipPosition.y < -clip || clipPosition.y > clip) { gl_Position = vec4(0.0, 0.0, 2.0, 1.0); return; } ivec2 covCoord = ivec2(int(((texIdx & rowMask) << 1) | 1u), int(texIdx >> rowShift)); uvec4 covariance = uvec4(texelFetch(u_splatAttributeTexture, covCoord, 0)); gl_Position = clipPosition; vec2 u1 = unpackHalf2x16(covariance.x) ; vec2 u2 = unpackHalf2x16(covariance.y); vec2 u3 = unpackHalf2x16(covariance.z); mat3 Vrk = mat3(u1.x, u1.y, u2.x, u1.y, u2.y, u3.x, u2.x, u3.x, u3.y); vec4 covVectors = calcCovVectors(splatViewPos.xyz, Vrk); if (dot(covVectors.xy, covVectors.xy) < 4.0 && dot(covVectors.zw, covVectors.zw) < 4.0) { gl_Position = discardVec; return; } vec2 corner = vec2((gl_VertexID << 1) & 2, gl_VertexID & 2) - 1.; gl_Position += vec4((corner.x * covVectors.xy + corner.y * covVectors.zw) / czm_viewport.zw * gl_Position.w, 0, 0); gl_Position.z = clamp(gl_Position.z, -abs(gl_Position.w), abs(gl_Position.w)); v_vertPos = corner ; v_splatColor = vec4(covariance.w & 0xffu, (covariance.w >> 8) & 0xffu, (covariance.w >> 16) & 0xffu, (covariance.w >> 24) & 0xffu) / 255.0; #if defined(HAS_SPHERICAL_HARMONICS) vec4 splatWC = czm_inverseView * splatViewPos; vec3 viewDirModel = normalize(u_inverseModelRotation * (splatWC.xyz - u_cameraPositionWC.xyz)); v_splatColor.rgb += evaluateSH(texIdx, viewDirModel).rgb; #endif v_splitDirection = u_splitDirection; }`;var rwi=x(T(),1),BN=`// // Fragment shader for Gaussian splats. // Renders a Gaussian splat within a quad, discarding fragments outside the unit circle. // Applies an approximate Gaussian falloff based on distance from the center and outputs // a color modulated by the alpha and Gaussian weight. // void main() { if (v_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard; if (v_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard; float A = -dot(v_vertPos, v_vertPos); if (A < -4.) { discard; } float B = exp(A * 4.) * v_splatColor.a ; out_FragColor = vec4(v_splatColor.rgb * B , B); } `;var XS=new I,OZe=new I,zN=new I,Zi=new q,HN=new Ye,c0t=new h,l0t=new Ye,d0t=new h,u0t=1e-12,WB=1e-5,P$=1e-7,Ma={IDLE:0,WAITING:1,SORTING:2,SORTED:3,ERROR:4},Is={BUILDING:"BUILDING",TEXTURE_PENDING:"TEXTURE_PENDING",TEXTURE_READY:"TEXTURE_READY",SORTING:"SORTING",READY:"READY"},m0t=2,h0t=30,f0t=3,p0t=.008726646259971648,b0t=1;function g0t(e,t){let n=e._lastSteadySortFrameNumber>=0?t.frameNumber-e._lastSteadySortFrameNumber:Number.POSITIVE_INFINITY;if(e._lastSteadySortFrameNumber>=0&&n<f0t)return!1;let i=t.camera;return l(i)?!e._hasLastSteadySortCameraPosition||!e._hasLastSteadySortCameraDirection||h.distance(i.positionWC,e._lastSteadySortCameraPosition)>=b0t?!0:h.angleBetween(i.directionWC,e._lastSteadySortCameraDirection)>=p0t:!1}function wZe(e,t){e._lastSteadySortFrameNumber=t.frameNumber;let n=t.camera;l(n)&&(h.clone(n.positionWC,e._lastSteadySortCameraPosition),e._hasLastSteadySortCameraPosition=!0,h.clone(n.directionWC,e._lastSteadySortCameraDirection),e._hasLastSteadySortCameraDirection=!0)}function y0t(e,t){let n=e._selectedTileSet;if(!l(n)||n.size!==t.length)return!0;for(let i=0;i<t.length;i++)if(!n.has(t[i]))return!0;return!1}function MZe(e,t){return l(t)&&t.requestId===e._sortRequestId&&t.dataGeneration===e._splatDataGeneration}function X$(e){l(e)&&(l(e.gaussianSplatTexture)&&(e.gaussianSplatTexture.destroy(),e.gaussianSplatTexture=void 0),l(e.sphericalHarmonicsTexture)&&(e.sphericalHarmonicsTexture.destroy(),e.sphericalHarmonicsTexture=void 0))}function kZe(e,t,n){if(!l(t))return;e._retiredTextures.push({texture:t,frameNumber:n})}function x0t(e,t){let n=e._retiredTextures;if(!l(n)||n.length===0)return;let i=[];for(let o=0;o<n.length;o++){let r=n[o];t-r.frameNumber>0?r.texture.destroy():i.push(r)}e._retiredTextures=i}function T0t(e,t){let n=e?.[t];return l(n)?n.buffer:void 0}function _0t(e,t,n,i){let o=e._aggregateScratchBuffers[t];l(o)||(o=[],e._aggregateScratchBuffers[t]=o);let r=T0t(e._snapshot,t);for(let a=0;a<o.length;a++){let c=o[a];if(c.length>=i&&c.buffer!==r)return c}let s=J.createTypedArray(n,i);return o.push(s),s}function S0t(e,t){return e.length===t?e:e.subarray(0,t)}function Z0t(e,t,n){if(!l(t.indexes)||t.state!==Is.READY)throw new ge("Committing snapshot before it is READY.");let i=n.frameNumber,o=e._snapshot,r=l(o)?o.gaussianSplatTexture:e.gaussianSplatTexture;l(r)&&r!==t.gaussianSplatTexture&&kZe(e,r,i);let s=l(o)?o.sphericalHarmonicsTexture:e.sphericalHarmonicsTexture;l(s)&&s!==t.sphericalHarmonicsTexture&&kZe(e,s,i),e._snapshot=t,e._positions=t.positions,e._rotations=t.rotations,e._scales=t.scales,e._colors=t.colors,e._shData=t.shData,e._sphericalHarmonicsDegree=t.sphericalHarmonicsDegree,e._numSplats=t.numSplats,e._indexes=t.indexes,e.gaussianSplatTexture=t.gaussianSplatTexture,e.sphericalHarmonicsTexture=t.sphericalHarmonicsTexture,e._lastTextureWidth=t.lastTextureWidth,e._lastTextureHeight=t.lastTextureHeight,e._splatRowMask=t.splatRowMask,e._splatRowShift=t.splatRowShift,e._splatBudgetSSEScale=t.splatBudgetSSEScale??1,e._hasGaussianSplatTexture=l(t.gaussianSplatTexture),e._needsGaussianSplatTexture=!1,e._gaussianSplatTexturePending=!1,e._vertexArray=void 0,e._vertexArrayLen=-1,e._drawCommand=void 0,e._sorterPromise=void 0,e._activeSort=void 0,e._sorterState=Ma.IDLE,e._dirty=!1}async function V0t(e,t,n,i){try{let o=await i,r=Xt.maximumTextureSize,s=r,a=Math.ceil(n.numSplats/(r/2)),c=Math.log2(r/2),d=r/2-1;if(a>r){let b=n.numSplats;a=r;let f=s/2;if(n.numSplats=r*f,n.positions=n.positions.subarray(0,n.numSplats*3),n.rotations=n.rotations.subarray(0,n.numSplats*4),n.scales=n.scales.subarray(0,n.numSplats*3),n.colors=n.colors.subarray(0,n.numSplats*4),l(n.shData)){let y=n.shData.length/b;n.shData=n.shData.subarray(0,Math.floor(n.numSplats*y))}n.splatBudgetSSEScale=b/n.numSplats,console.warn(`[GaussianSplat][HARD CAP] ${b} splats exceed the maximum texture capacity (${r}\xD7${f} = ${n.numSplats} splats at width=${s}). Rendering only the first ${n.numSplats} splats to avoid a WebGL crash. Increasing maximumScreenSpaceError by ${n.splatBudgetSSEScale.toFixed(2)}x next frame.`)}else n.splatBudgetSSEScale=1;let u=s*a*4,m;u<=o.data.length?m=o.data.subarray(0,u):(m=new Uint32Array(u),m.set(o.data));let p={width:s,height:a,data:m};if(n.splatRowMask=d,n.splatRowShift=c,e._pendingSnapshot!==n){n.state=Is.BUILDING;return}if(!l(n.gaussianSplatTexture))n.gaussianSplatTexture=DZe(t.context,p);else if(n.lastTextureHeight!==p.height||n.lastTextureWidth!==p.width){let b=n.gaussianSplatTexture;n.gaussianSplatTexture=DZe(t.context,p),b.destroy()}else n.gaussianSplatTexture.copyFrom({source:{width:p.width,height:p.height,arrayBufferView:p.data}});if(n.lastTextureHeight=p.height,n.lastTextureWidth=p.width,l(n.shData)&&n.sphericalHarmonicsDegree>0){let b=n.sphericalHarmonicsTexture,f=Xt.maximumTextureSize,y=n.shCoefficientCount/3,_=Math.floor(f/y),S=_*(y*2),Z=Math.ceil(n.numSplats/_);if(Z>f)console.warn(`[GaussianSplat][SHTexture] ${n.numSplats} splats require SH height ${Z} > maxTex ${f}. Disabling spherical harmonics for this snapshot (color-only fallback).`),n.sphericalHarmonicsDegree=0,l(b)&&b.destroy(),n.sphericalHarmonicsTexture=void 0;else{let V=new Uint32Array(f*Z*2),C=0;for(let G=0;C<n.shData.length;G+=f*2)V.set(n.shData.subarray(C,C+S),G),C+=S;n.sphericalHarmonicsTexture=R0t(t.context,{data:V,width:f,height:Z}),l(b)&&b.destroy()}}n.state=Is.TEXTURE_READY}catch(o){console.error("Error generating Gaussian splat texture:",o),n.state=Is.BUILDING}}async function C0t(e,t,n,i){try{let o=await i;if(!l(n)||n.snapshot!==e._pendingSnapshot)return;let r=n.expectedCount,s=r,a=o?.length;if(r!==s||a!==r){e._pendingSortPromise=void 0,e._pendingSort=void 0,n.snapshot.state===Is.SORTING&&(n.snapshot.state=Is.TEXTURE_READY);return}let c=n.snapshot;c.indexes=o,c.state=Is.READY,e._pendingSortPromise=void 0,e._pendingSort=void 0,Z0t(e,c,t),e._pendingSnapshot=void 0,nd.buildGSplatDrawCommand(e,t)}catch(o){if(!l(n)||n.snapshot!==e._pendingSnapshot)return;e._pendingSortPromise=void 0,e._pendingSort=void 0,n.snapshot.state===Is.SORTING&&(n.snapshot.state=Is.TEXTURE_READY),e._sorterState=Ma.ERROR,e._sorterError=o}}async function UZe(e,t,n){try{let i=await n,o=MZe(e,t),r=t?.expectedCount,s=r,a=i?.length;if(!o||(r!==s||a!==r)){o&&(e._sorterPromise=void 0,e._sorterState=Ma.IDLE);return}e._indexes=i,e._sorterState=Ma.SORTED}catch(i){if(!MZe(e,t))return;e._sorterState=Ma.ERROR,e._sorterError=i}}function R0t(e,t){return new Ct({context:e,source:{width:t.width,height:t.height,arrayBufferView:t.data},preMultiplyAlpha:!1,skipColorSpaceConversion:!0,pixelFormat:Be.RG_INTEGER,pixelDatatype:Me.UNSIGNED_INT,flipY:!1,sampler:kt.NEAREST})}function DZe(e,t){return new Ct({context:e,source:{width:t.width,height:t.height,arrayBufferView:t.data},preMultiplyAlpha:!1,skipColorSpaceConversion:!0,pixelFormat:Be.RGBA_INTEGER,pixelDatatype:Me.UNSIGNED_INT,flipY:!1,sampler:kt.NEAREST})}function nd(e){e=e??B.EMPTY_OBJECT,this._positions=void 0,this._rotations=void 0,this._scales=void 0,this._colors=void 0,this._indexes=void 0,this._numSplats=0,this._needsGaussianSplatTexture=!0,this._snapshot=void 0,this._pendingSnapshot=void 0,this._retiredTextures=[],this._aggregateScratchBuffers={positions:[],scales:[],rotations:[],colors:[]},this._scratchAggregateShBuffer=void 0,this._selectedTilesStableFrames=0,this._needsSnapshotRebuild=!1,this._snapshotRebuildStallFrames=0,this._prevViewMatrix=new I,this._debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.gaussianSplatTexture=void 0,this.sphericalHarmonicsTexture=void 0,this._lastTextureWidth=0,this._lastTextureHeight=0,this._vertexArray=void 0,this._vertexArrayLen=-1,this._splitDirection=Xr.NONE,this._dirty=!1,this._tileset=e.tileset,this._baseTilesetUpdate=this._tileset.update,this._tileset.update=this._wrappedUpdate.bind(this),this._tileset.tileLoad.addEventListener(this.onTileLoad,this),this._tileset.tileVisible.addEventListener(this.onTileVisible,this),this.selectedTileLength=0,this._selectedTileSet=new Set,this._ready=!1,this._hasGaussianSplatTexture=!1,this._gaussianSplatTexturePending=!1,this._drawCommand=void 0,this._drawCommandModelMatrix=new I,this._rootTransform=void 0,this._axisCorrectionMatrix=xt.getAxisCorrectionMatrix(Mi.Y,Mi.X,new I),this._shInverseRotation=new q,this._isDestroyed=!1,this._sorterState=Ma.IDLE,this._sorterPromise=void 0,this._splatDataGeneration=0,this._sortRequestId=0,this._activeSort=void 0,this._pendingSortPromise=void 0,this._pendingSort=void 0,this._lastSteadySortFrameNumber=-1,this._lastSteadySortCameraPosition=new h,this._hasLastSteadySortCameraPosition=!1,this._lastSteadySortCameraDirection=new h,this._hasLastSteadySortCameraDirection=!1,this._sorterError=void 0,this._splatRowMask=0,this._splatRowShift=0,this._splatBudgetSSEScale=1}Object.defineProperties(nd.prototype,{ready:{get:function(){return this._ready}},isStable:{get:function(){return!this._dirty&&(!l(this._pendingSnapshot)||this._pendingSnapshot.state===Is.READY)}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,this._dirty=!0)}}});nd.prototype._wrappedUpdate=function(e){let t=this._tileset;if(this._splatBudgetSSEScale!==1){let n=t.maximumScreenSpaceError;t.maximumScreenSpaceError*=this._splatBudgetSSEScale,this._baseTilesetUpdate.call(t,e),t.maximumScreenSpaceError=n}else this._baseTilesetUpdate.call(t,e);this.update(e)};nd.prototype.destroy=function(){if(this._positions=void 0,this._rotations=void 0,this._scales=void 0,this._colors=void 0,this._indexes=void 0,X$(this._pendingSnapshot),X$(this._snapshot),l(this._retiredTextures))for(let t=0;t<this._retiredTextures.length;t++)this._retiredTextures[t].texture.destroy();this._retiredTextures=[],this._pendingSnapshot=void 0,this._snapshot=void 0,this._aggregateScratchBuffers=void 0,this.gaussianSplatTexture=void 0,this.sphericalHarmonicsTexture=void 0;let e=this._drawCommand;return l(e)&&(e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy()),l(this._vertexArray)&&(this._vertexArray.destroy(),this._vertexArray=void 0),this._tileset.update=this._baseTilesetUpdate.bind(this._tileset),me(this)};nd.prototype.isDestroyed=function(){return this._isDestroyed};nd.prototype.onTileLoad=function(e){this._dirty=!0};nd.prototype.onTileVisible=function(e){};nd.transformTile=function(e){let t=e.computedTransform,n=e.content.gltfPrimitive,i=e.tileset.gaussianSplatPrimitive;i._rootTransform===void 0&&(i._rootTransform=bt.eastNorthUpToFixedFrame(e.tileset.boundingSphere.center));let o=i._rootTransform,r=I.multiplyTransformation(t,i._axisCorrectionMatrix,XS);I.multiplyTransformation(r,e.content.worldTransform,r);let s=I.inverse(o,OZe),a=I.multiplyTransformation(s,r,XS),c=e.content._lastSplatTransform;if(e.content._transformed&&l(c)&&I.equalsEpsilon(a,c,u0t))return;let d=e.content.positions,u=e.content.rotations,m=e.content.scales,p=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]),b=Math.sqrt(a[4]*a[4]+a[5]*a[5]+a[6]*a[6]),f=Math.sqrt(a[8]*a[8]+a[9]*a[9]+a[10]*a[10]);Zi[0]=a[0]/p,Zi[1]=a[1]/p,Zi[2]=a[2]/p,Zi[3]=a[4]/b,Zi[4]=a[5]/b,Zi[5]=a[6]/b,Zi[6]=a[8]/f,Zi[7]=a[9]/f,Zi[8]=a[10]/f;let y=Zi[0]*Zi[3]+Zi[1]*Zi[4]+Zi[2]*Zi[5],_=Zi[0]*Zi[6]+Zi[1]*Zi[7]+Zi[2]*Zi[8],S=Zi[3]*Zi[6]+Zi[4]*Zi[7]+Zi[5]*Zi[8],Z=Math.abs(p-1)<=P$&&Math.abs(b-1)<=P$&&Math.abs(f-1)<=P$,V=Math.abs(y)<=WB&&Math.abs(_)<=WB&&Math.abs(S)<=WB,C=Zi[0]*(Zi[4]*Zi[8]-Zi[5]*Zi[7])-Zi[3]*(Zi[1]*Zi[8]-Zi[2]*Zi[7])+Zi[6]*(Zi[1]*Zi[5]-Zi[2]*Zi[4]),G=Z&&V&&Math.abs(C-1)<=WB;Ye.fromRotationMatrix(Zi,HN),Ye.normalize(HN,HN);let E=xt.getAttributeBySemantic(n,st.POSITION).typedArray,v=xt.getAttributeBySemantic(n,st.ROTATION).typedArray,F=xt.getAttributeBySemantic(n,st.SCALE).typedArray,P=c0t,N=l0t,g=d0t;for(let R=0;R<E.length/3;++R)P.x=E[R*3],P.y=E[R*3+1],P.z=E[R*3+2],N.x=v[R*4],N.y=v[R*4+1],N.z=v[R*4+2],N.w=v[R*4+3],g.x=F[R*3],g.y=F[R*3+1],g.z=F[R*3+2],G?(I.multiplyByPoint(a,P,P),Ye.multiply(HN,N,N),Ye.normalize(N,N)):(I.fromTranslationQuaternionRotationScale(P,N,g,zN),I.multiplyTransformation(a,zN,zN),I.getTranslation(zN,P),I.getScale(zN,g),Ye.multiply(HN,N,N),Ye.normalize(N,N)),d[R*3]=P.x,d[R*3+1]=P.y,d[R*3+2]=P.z,u[R*4]=N.x,u[R*4+1]=N.y,u[R*4+2]=N.z,u[R*4+3]=N.w,m[R*3]=g.x,m[R*3+1]=g.y,m[R*3+2]=g.z;e.content._lastSplatTransform=I.clone(a,e.content._lastSplatTransform),e.content._transformed=!0};nd.generateSplatTexture=function(e,t,n){if(!l(n)||n.state!==Is.BUILDING)return;n.state=Is.TEXTURE_PENDING;let i=UN.generateFromAttributes({attributes:{positions:new Float32Array(n.positions),scales:new Float32Array(n.scales),rotations:new Float32Array(n.rotations),colors:new Uint8Array(n.colors)},count:n.numSplats});if(!l(i)){n.state=Is.BUILDING;return}V0t(e,t,n,i)};nd.buildGSplatDrawCommand=function(e,t){let n=e._tileset,i=new DN(e),{shaderBuilder:o}=i,r=i.renderStateOptions;r.cull.enabled=!1,r.depthMask=!1,r.depthTest.enabled=!0,r.blending=tn.PRE_MULTIPLIED_ALPHA_BLEND,i.alphaOptions.pass=We.GAUSSIAN_SPLATS,o.addAttribute("vec2","a_screenQuadPosition"),o.addAttribute("float","a_splatIndex"),o.addVarying("vec4","v_splatColor"),o.addVarying("vec2","v_vertPos"),o.addUniform("float","u_splitDirection",pe.VERTEX),o.addVarying("float","v_splitDirection"),o.addUniform("highp usampler2D","u_splatAttributeTexture",pe.VERTEX),o.addUniform("float","u_sphericalHarmonicsDegree",pe.VERTEX),o.addUniform("float","u_splatScale",pe.VERTEX),o.addUniform("vec3","u_cameraPositionWC",pe.VERTEX),o.addUniform("mat3","u_inverseModelRotation",pe.VERTEX);let s=i.uniformMap;o.addUniform("int","u_splatRowMask",pe.VERTEX),o.addUniform("int","u_splatRowShift",pe.VERTEX);let a=e.gaussianSplatTexture;s.u_splatAttributeTexture=function(){return a},s.u_splatRowMask=function(){return e._splatRowMask},s.u_splatRowShift=function(){return e._splatRowShift},e._sphericalHarmonicsDegree>0&&(o.addDefine("HAS_SPHERICAL_HARMONICS","1",pe.VERTEX),o.addUniform("highp usampler2D","u_sphericalHarmonicsTexture",pe.VERTEX),s.u_sphericalHarmonicsTexture=function(){return e.sphericalHarmonicsTexture}),s.u_sphericalHarmonicsDegree=function(){return e._sphericalHarmonicsDegree},s.u_cameraPositionWC=function(){return h.clone(t.camera.positionWC)},s.u_inverseModelRotation=function(){return e._shInverseRotation},s.u_splitDirection=function(){return e.splitDirection};let c=l(e._indexes)?e._indexes.length:e._numSplats;i.instanceCount=c,i.count=4,i.primitiveType=Fe.TRIANGLE_STRIP,o.addVertexLines(ON),o.addFragmentLines(BN);let d=o.buildShaderProgram(t.context),u=Je(Oe.fromCache(i.renderStateOptions),!0);u.cull.face=xt.getCullFace(n.modelMatrix,Fe.TRIANGLE_STRIP),u=Oe.fromCache(u);let m={screenQuadPosition:0,splatIndex:2},p=new Zn.Attribute;if(p.name="_SPLAT_INDEXES",p.typedArray=e._indexes,p.componentDatatype=J.UNSIGNED_INT,p.type=Dt.SCALAR,p.normalized=!1,p.count=i.instanceCount,p.constant=0,p.instanceDivisor=1,!l(e._vertexArray)||e._indexes.length>e._vertexArrayLen){let S=new Zt({attributes:{screenQuadPosition:new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1],name:"_SCREEN_QUAD_POS",variableName:"screenQuadPosition"}),splatIndex:{...p,variableName:"splatIndex"}},primitiveType:Fe.TRIANGLE_STRIP});e._vertexArray=Dn.fromGeometry({context:t.context,geometry:S,attributeLocations:m,bufferUsage:Ie.DYNAMIC_DRAW,interleave:!1})}else e._vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(e._indexes);e._vertexArrayLen=e._indexes.length;let f=I.clone(e._rootTransform,e._drawCommandModelMatrix),y=e._vertexArray,_=new ot({boundingVolume:n.boundingSphere,modelMatrix:f,uniformMap:s,renderState:u,vertexArray:y,shaderProgram:d,cull:r.cull.enabled,pass:We.GAUSSIAN_SPLATS,count:i.count,owner:e,instanceCount:i.instanceCount,primitiveType:Fe.TRIANGLE_STRIP,debugShowBoundingVolume:n.debugShowBoundingVolume,castShadows:!1,receiveShadows:!1});e._drawCommand=_};nd.prototype.update=function(e){let t=this._tileset;if(x0t(this,e.frameNumber),!t.show)return;if(this._drawCommand&&e.commandList.push(this._drawCommand),t._modelMatrixChanged){this._dirty=!0;return}let n=l(this._rootTransform);if(e.passes.pick===!0)return;this.splitDirection!==t.splitDirection&&(this.splitDirection=t.splitDirection);let i=e.camera;if(l(i)){if(this._sorterState===Ma.IDLE){let o=t._selectedTiles.length!==0&&y0t(this,t._selectedTiles);t._selectedTiles.length===0?(this._selectedTilesStableFrames=0,this._needsSnapshotRebuild=!1,this._snapshotRebuildStallFrames=0):o?this._selectedTilesStableFrames=0:this._selectedTilesStableFrames++,(o||this._dirty)&&(this._needsSnapshotRebuild=!0);let r=this._selectedTilesStableFrames>=m0t,s=!l(this._snapshot)&&!l(this._pendingSnapshot)&&!l(this._drawCommand);this._needsSnapshotRebuild&&t._selectedTiles.length!==0?this._snapshotRebuildStallFrames++:this._snapshotRebuildStallFrames=0;let a=r||s||this._snapshotRebuildStallFrames>=h0t;if(!(this._dirty||this._needsSnapshotRebuild||o||l(this._pendingSnapshot)||l(this._pendingSortPromise)||!l(this._drawCommand))&&I.equals(i.viewMatrix,this._prevViewMatrix))return;if(t._selectedTiles.length!==0&&this._needsSnapshotRebuild&&a){this._splatDataGeneration++,this._activeSort=void 0,this._sorterPromise=void 0,this._sorterState=Ma.IDLE,this._pendingSortPromise=void 0,this._pendingSort=void 0,l(this._pendingSnapshot)&&X$(this._pendingSnapshot);let d=t._selectedTiles;this._rootTransform=bt.eastNorthUpToFixedFrame(t.boundingSphere.center);{let C=d[0],G=I.multiplyTransformation(C.computedTransform,this._axisCorrectionMatrix,OZe);I.multiplyTransformation(G,C.content.worldTransform??I.IDENTITY,G),I.getRotation(I.inverse(G,G),this._shInverseRotation)}for(let C of d)nd.transformTile(C);let u=d.reduce((C,G)=>C+G.content.pointsLength,0),m=(C,G,E,v)=>{let F,P=0,N=0;for(let g of d){let R=E(g.content),A=l(v)?v:Dt.getNumberOfComponents(R.type),W=l(R.typedArray)?R.typedArray:R;N+=W.length,l(F)||(F=_0t(this,C,G,u*A))}if(!l(F))return J.createTypedArray(G,0);for(let g of d){let R=g.content,A=E(R),W=l(A.typedArray)?A.typedArray:A;F.set(W,P),P+=W.length}return S0t(F,N)},p=()=>{let C=0;for(let F of d)if(F.content.sphericalHarmonicsDegree>0){switch(F.content.sphericalHarmonicsDegree){case 1:C=9;break;case 2:C=24;break;case 3:C=45;break}break}if(C===0)return;let G=u*(C*(2/3));(!l(this._scratchAggregateShBuffer)||this._scratchAggregateShBuffer.length<G)&&(this._scratchAggregateShBuffer=new Uint32Array(G));let E=this._scratchAggregateShBuffer,v=0;for(let F of d){let P=F.content.packedSphericalHarmonicsData;F.content.sphericalHarmonicsDegree>0&&(E.set(P,v),v+=P.length)}return v<E.length?E.subarray(0,v):E},b=m("positions",J.FLOAT,C=>C.positions,3),f=m("scales",J.FLOAT,C=>C.scales,3),y=m("rotations",J.FLOAT,C=>C.rotations,4),_=m("colors",J.UNSIGNED_BYTE,C=>xt.getAttributeBySemantic(C.gltfPrimitive,st.COLOR)),S=d[0].content.sphericalHarmonicsDegree,Z=S>0?d[0].content.sphericalHarmonicsCoefficientCount:0,V=p();this._pendingSnapshot={generation:this._splatDataGeneration,positions:b,rotations:y,scales:f,colors:_,shData:V,sphericalHarmonicsDegree:S,shCoefficientCount:Z,numSplats:u,indexes:void 0,gaussianSplatTexture:void 0,sphericalHarmonicsTexture:void 0,lastTextureWidth:0,lastTextureHeight:0,splatRowMask:0,splatRowShift:0,state:Is.BUILDING},this.selectedTileLength=t._selectedTiles.length,this._selectedTileSet=new Set(t._selectedTiles),this._dirty=!1,this._needsSnapshotRebuild=!1,this._snapshotRebuildStallFrames=0}if(l(this._pendingSnapshot)){let d=this._pendingSnapshot;if(d.state===Is.BUILDING){nd.generateSplatTexture(this,e,d);return}if(d.state===Is.TEXTURE_PENDING||d.state===Is.TEXTURE_READY&&!l(d.gaussianSplatTexture)||!n)return;if(I.clone(i.viewMatrix,this._prevViewMatrix),I.multiply(i.viewMatrix,this._rootTransform,XS),d.state===Is.TEXTURE_READY&&!l(this._pendingSortPromise)){let u=++this._sortRequestId,m=this._splatDataGeneration;this._pendingSort={requestId:u,dataGeneration:m,expectedCount:d.numSplats,snapshot:d};let p=PS.radixSortIndexes({primitive:{positions:new Float32Array(d.positions),modelView:Float32Array.from(XS),count:d.numSplats},sortType:"Index"});if(!l(p)){this._pendingSortPromise=void 0,this._pendingSort=void 0,d.state=Is.TEXTURE_READY;return}this._pendingSortPromise=p,d.state=Is.SORTING;let b=this._pendingSort;C0t(this,e,b,p);return}if(!l(this._pendingSortPromise)){d.state===Is.SORTING&&(d.state=Is.TEXTURE_READY);return}return}if(this._numSplats===0||!n)return;if(I.clone(i.viewMatrix,this._prevViewMatrix),I.multiply(i.viewMatrix,this._rootTransform,XS),!l(this._sorterPromise)){if(!g0t(this,e))return;let d=++this._sortRequestId,u=this._splatDataGeneration,m=this._numSplats;this._activeSort={requestId:d,dataGeneration:u,expectedCount:m};let p=PS.radixSortIndexes({primitive:{positions:new Float32Array(this._positions),modelView:Float32Array.from(XS),count:this._numSplats},sortType:"Index"});if(this._sorterPromise=p,l(p)){wZe(this,e);let b=this._activeSort;this._sorterState=Ma.SORTING,UZe(this,b,p);return}}if(!l(this._sorterPromise)){this._sorterState=Ma.WAITING;return}this._sorterState=Ma.SORTING;return}else if(this._sorterState===Ma.WAITING){if(!l(this._sorterPromise)){let o=++this._sortRequestId,r=this._splatDataGeneration,s=this._numSplats;this._activeSort={requestId:o,dataGeneration:r,expectedCount:s};let a=PS.radixSortIndexes({primitive:{positions:new Float32Array(this._positions),modelView:Float32Array.from(XS),count:this._numSplats},sortType:"Index"});if(this._sorterPromise=a,l(a)){wZe(this,e);let c=this._activeSort;this._sorterState=Ma.SORTING,UZe(this,c,a);return}}if(!l(this._sorterPromise)){this._sorterState=Ma.WAITING;return}this._sorterState=Ma.SORTING;return}else{if(this._sorterState===Ma.SORTING)return;if(this._sorterState===Ma.SORTED)nd.buildGSplatDrawCommand(this,e),this._sorterState=Ma.IDLE,this._dirty=!1,this._sorterPromise=void 0,this._activeSort=void 0;else if(this._sorterState===Ma.ERROR)throw this._sorterError}this._dirty=!1}};var KN=nd;var Y$=class e{constructor(t,n,i,o){this._tileset=n,this._tile=i,this._resource=o,this._loader=t,l(this._tileset.gaussianSplatPrimitive)||(this._tileset.gaussianSplatPrimitive=new KN({tileset:this._tileset})),this._positions=void 0,this._rotations=void 0,this._scales=void 0,this.gltfPrimitive=void 0,this.worldTransform=void 0,this.featurePropertiesDirty=!1,this._metadata=void 0,this._group=void 0,this._ready=!1,this._transformed=!1,this._sphericalHarmonicsDegree=0,this._sphericalHarmonicsCoefficientCount=0,this._packedSphericalHarmonicsData=void 0,this._lastSplatTransform=void 0}static tilesetRequiresGaussianSplattingExt(t){let n=!1;return t.isGltfExtensionRequired instanceof Function&&(n=t.isGltfExtensionRequired("KHR_gaussian_splatting")&&t.isGltfExtensionRequired("KHR_gaussian_splatting_compression_spz_2"),t.isGltfExtensionRequired("KHR_spz_gaussian_splats_compression")&&Ea("KHR_spz_gaussian_splats_compression",`Support for the original KHR_spz_gaussian_splats_compression extension has been removed in favor of the up to date KHR_gaussian_splatting and KHR_gaussian_splatting_compression_spz_2 extensions Please retile your tileset with the KHR_gaussian_splatting and KHR_gaussian_splatting_compression_spz_2 extensions.`)),n}get featuresLength(){return 0}get pointsLength(){return this.gltfPrimitive.attributes[0].count}get trianglesLength(){return 0}get geometryByteLength(){return 0}get texturesByteLength(){let t=this._tileset?.gaussianSplatPrimitive;if(!l(t))return 0;let n=t.gaussianSplatTexture,i=t.selectedTileLength;return!l(n)||i===0?0:n.sizeInBytes/i}get batchTableByteLength(){return 0}get innerContents(){}get ready(){return this._ready}get transformed(){return this._transformed}get tileset(){return this._tileset}get tile(){return this._tile}get url(){return this._resource.getUrlComponent(!0)}get batchTable(){}get metadata(){return this._metadata}set metadata(t){this._metadata=t}get group(){return this._group}set group(t){this._group=t}get positions(){return this._positions}get rotations(){return this._rotations}get scales(){return this._scales}get sphericalHarmonicsCoefficientCount(){return this._sphericalHarmonicsCoefficientCount}get sphericalHarmonicsDegree(){return this._sphericalHarmonicsDegree}get packedSphericalHarmonicsData(){return this._packedSphericalHarmonicsData}static async fromGltf(t,n,i,o){let r=i,s=ve.createIfNeeded(r),a={releaseGltfJson:!1,upAxis:Mi.Y,forwardAxis:Mi.Z};l(o.asset)?(a.gltfJson=o,a.baseResource=s,a.gltfResource=s):o instanceof Uint8Array?(a.typedArray=o,a.baseResource=s,a.gltfResource=s):a.gltfResource=ve.createIfNeeded(o);let c=new Ru(a);try{await c.load()}catch(d){throw c.destroy(),new ae(`Failed to load glTF: ${d.message}`)}return new e(c,t,n,i)}update(t,n){let i=this._loader;if(!this._ready){if(n.afterRender.push(()=>!0),!l(i)){this._ready=!0;return}if(this._resourcesLoaded){this.gltfPrimitive=i.components.scene.nodes[0].primitives[0],this.worldTransform=i.components.scene.nodes[0].matrix,this._ready=!0,this._positions=xt.getAttributeBySemantic(this.gltfPrimitive,st.POSITION).typedArray.slice(),this._rotations=xt.getAttributeBySemantic(this.gltfPrimitive,st.ROTATION).typedArray.slice(),this._scales=xt.getAttributeBySemantic(this.gltfPrimitive,st.SCALE).typedArray.slice();let{l:o,n:r}=A0t(this.gltfPrimitive.attributes);this._sphericalHarmonicsDegree=o,this._sphericalHarmonicsCoefficientCount=r,this._packedSphericalHarmonicsData=v0t(this);return}this._resourcesLoaded=i.process(n)}}hasProperty(t,n){return!1}getFeature(t){}applyDebugSettings(t,n){}applyStyle(t){}pick(t,n,i){}isDestroyed(){return this.isDestroyed}destroy(){return this.splatPrimitive=void 0,this._tile=void 0,this._tileset=void 0,this._resource=void 0,this._ready=!1,this._group=void 0,this._metadata=void 0,this._resourcesLoaded=!1,this._lastSplatTransform=void 0,l(this._loader)&&(this._loader.destroy(),this._loader=void 0),me(this)}};function G0t(e){return`${e.startsWith("KHR_gaussian_splatting:")?"KHR_gaussian_splatting:":"_"}SH_DEGREE_`}function A0t(e){switch(e.filter(n=>n.name.includes("SH_DEGREE_")).length){default:case 0:return{l:0,n:0};case 3:return{l:1,n:9};case 8:return{l:2,n:24};case 15:return{l:3,n:45}}}var BZe=new ArrayBuffer(4),E0t=new Float32Array(BZe),L0t=new Uint32Array(BZe);function N$(e){E0t[0]=e;let t=L0t[0],n=t>>31&1,i=t>>23&255,o=t&8388607,r;if(i===255)r=n<<15|31744|(o?512:0);else if(i===0)r=n<<15;else{let s=i-127+15;s>=31?r=n<<15|31744:s<=0?r=n<<15:r=n<<15|s<<10|o>>>13}return r}function W0t(e){let t=G0t(e),n="_COEF_",i=t.length,o=e.indexOf(n,i),r=parseInt(e.slice(i,o),10),s=parseInt(e.slice(o+n.length),10);return{l:r,n:s}}function v0t(e){let t=e.sphericalHarmonicsDegree,n=e.sphericalHarmonicsCoefficientCount,i=e.pointsLength*(n*(2/3)),o=new Uint32Array(i),r=e.gltfPrimitive.attributes.filter(d=>d.name.includes("SH_DEGREE_")),s=0,a=[0,9,24];switch(t){case 1:s=9;break;case 2:s=24;break;case 3:s=45;break}r.sort((d,u)=>d.name<u.name?-1:d.name>u.name?1:0);let c=s*(2/3);for(let d=0;d<r.length;d++){let{l:u,n:m}=W0t(r[d].name);for(let p=0;p<e.pointsLength;p++){let b=a[u-1]*2/3,f=p*c+b+m*2,y=p*3;o[f]=N$(r[d].typedArray[y])|N$(r[d].typedArray[y+1])<<16,o[f+1]=N$(r[d].typedArray[y+2])}}return o}var Cx=Y$;var zZe={b3dm:function(e,t,n,i,o){return Iu.fromB3dm(e,t,n,i,o)},pnts:function(e,t,n,i,o){return Iu.fromPnts(e,t,n,i,o)},i3dm:function(e,t,n,i,o){return Iu.fromI3dm(e,t,n,i,o)},cmpt:function(e,t,n,i,o){return pN.fromTileType(e,t,n,i,o,zZe)},externalTileset:function(e,t,n,i){return xN.fromJson(e,t,n,i)},geom:function(e,t,n,i,o){return new gN(e,t,n,i,o)},vctr:function(e,t,n,i,o){return new FN(e,t,n,i,o)},subt:function(e,t,n,i,o){return eR.fromSubtreeJson(e,t,n,void 0,i,o)},subtreeJson:function(e,t,n,i){return eR.fromSubtreeJson(e,t,n,i)},glb:function(e,t,n,i,o){if(i.byteLength<12)throw new ae("Invalid glb content");let a=new DataView(i,o).getUint32(8,!0),c=new Uint8Array(i,o,a);return Cx.tilesetRequiresGaussianSplattingExt(e)?Cx.fromGltf(e,t,n,c):e.hasExtension("3DTILES_content_gltf_vector")||e.isGltfExtensionUsed("CESIUM_mesh_vector")?Vx.fromGltf(e,t,n,c):Iu.fromGltf(e,t,n,c)},gltf:function(e,t,n,i){return Cx.tilesetRequiresGaussianSplattingExt(e)?Cx.fromGltf(e,t,n,i):e.hasExtension("3DTILES_content_gltf_vector")||e.isGltfExtensionUsed("CESIUM_mesh_vector")?Vx.fromGltf(e,t,n,i):Iu.fromGltf(e,t,n,i)},geoJson:function(e,t,n,i){return Iu.fromGeoJson(e,t,n,i)}},NS=zZe;var pMi=x(T(),1),HZe={UNLOADED:0,LOADING:1,PROCESSING:2,READY:3,EXPIRED:4,FAILED:5};Object.freeze(HZe);var ir=HZe;var gMi=x(T(),1),Qm={BATCHED_3D_MODEL:"b3dm",INSTANCED_3D_MODEL:"i3dm",COMPOSITE:"cmpt",POINT_CLOUD:"pnts",VECTOR:"vctr",GEOMETRY:"geom",GLTF:"gltf",GLTF_BINARY:"glb",IMPLICIT_SUBTREE:"subt",IMPLICIT_SUBTREE_JSON:"subtreeJson",EXTERNAL_TILESET:"externalTileset",MULTIPLE_CONTENT:"multipleContent",GEOJSON:"geoJson",VOXEL_BINARY:"voxl",VOXEL_JSON:"voxelJson"};Qm.isBinaryFormat=function(e){switch(e){case Qm.BATCHED_3D_MODEL:case Qm.INSTANCED_3D_MODEL:case Qm.COMPOSITE:case Qm.POINT_CLOUD:case Qm.VECTOR:case Qm.GEOMETRY:case Qm.IMPLICIT_SUBTREE:case Qm.VOXEL_BINARY:case Qm.GLTF_BINARY:return!0;default:return!1}};Object.freeze(Qm);var Ta=Qm;var xMi=x(T(),1),KZe={NOT_COMPUTED:-1,USE_OPTIMIZATION:1,SKIP_OPTIMIZATION:0};Object.freeze(KZe);var qm=KZe;var _Mi=x(T(),1),_a={RENDER:0,PICK:1,SHADOW:2,PRELOAD:3,PRELOAD_FLIGHT:4,REQUEST_RENDER_MODE_DEFER_CHECK:5,MOST_DETAILED_PRELOAD:6,MOST_DETAILED_PICK:7,NUMBER_OF_PASSES:8},rg=new Array(_a.NUMBER_OF_PASSES);rg[_a.RENDER]=Object.freeze({pass:_a.RENDER,isRender:!0,requestTiles:!0,ignoreCommands:!1});rg[_a.PICK]=Object.freeze({pass:_a.PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});rg[_a.SHADOW]=Object.freeze({pass:_a.SHADOW,isRender:!1,requestTiles:!0,ignoreCommands:!1});rg[_a.PRELOAD]=Object.freeze({pass:_a.PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});rg[_a.PRELOAD_FLIGHT]=Object.freeze({pass:_a.PRELOAD_FLIGHT,isRender:!1,requestTiles:!0,ignoreCommands:!0});rg[_a.REQUEST_RENDER_MODE_DEFER_CHECK]=Object.freeze({pass:_a.REQUEST_RENDER_MODE_DEFER_CHECK,isRender:!1,requestTiles:!0,ignoreCommands:!0});rg[_a.MOST_DETAILED_PRELOAD]=Object.freeze({pass:_a.MOST_DETAILED_PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});rg[_a.MOST_DETAILED_PICK]=Object.freeze({pass:_a.MOST_DETAILED_PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});_a.getPassOptions=function(e){return rg[e]};Object.freeze(_a);var or=_a;var VMi=x(T(),1);var w$=class{constructor(t,n){this._tileset=t,this._tile=n,this.featurePropertiesDirty=!1}get featuresLength(){return 0}get pointsLength(){return 0}get trianglesLength(){return 0}get geometryByteLength(){return 0}get texturesByteLength(){return 0}get batchTableByteLength(){return 0}get innerContents(){}get ready(){return!0}get tileset(){return this._tileset}get tile(){return this._tile}get url(){}get metadata(){}set metadata(t){}get batchTable(){}get group(){}set group(t){}hasProperty(t,n){return!1}getFeature(t){}applyDebugSettings(t,n){}applyStyle(t){}update(t,n){}pick(t,n,i){}isDestroyed(){return!1}destroy(){return me(this)}},Kp=w$;var PMi=x(T(),1);var AMi=x(T(),1);function sg(e){e=e??B.EMPTY_OBJECT;let t=e.content,n=e.class;this._class=n,this._properties=t.properties,this._extensions=t.extensions,this._extras=t.extras}Object.defineProperties(sg.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});sg.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};sg.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};sg.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};sg.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};sg.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};sg.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};sg.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var JN=sg;function M$(e,t){let n=Qi(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!l(n))return;if(!l(e.schema)){M$._oneTimeWarning("findContentMetadata-missing-root-schema","Could not find a metadata schema for content metadata. For tilesets that contain external tilesets, make sure the schema is added to the root tileset.json.");return}let i=e.schema.classes??B.EMPTY_OBJECT;if(l(n.class)){let o=i[n.class];return new JN({content:n,class:o})}}M$._oneTimeWarning=gt;var YS=M$;var wMi=x(T(),1);function F0t(e,t){let n=e.metadataExtension;if(!l(n))return;let i=n.groups,o=Qi(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"].group:t.group;if(typeof o=="number")return i[o];let r=n.groupIds.findIndex(function(s){return s===o});return r>=0?i[r]:void 0}var wS=F0t;var jMi=x(T(),1);var DMi=x(T(),1);function ag(e){e=e??B.EMPTY_OBJECT;let t=e.tile,n=e.class;this._class=n,this._properties=t.properties,this._extensions=t.extensions,this._extras=t.extras}Object.defineProperties(ag.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});ag.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};ag.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};ag.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};ag.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};ag.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};ag.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};ag.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var jN=ag;function k$(e,t){let n=Qi(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!l(n))return;if(!l(e.schema)){k$._oneTimeWarning("findTileMetadata-missing-root-schema","Could not find a metadata schema for tile metadata. For tilesets that contain external tilesets, make sure the schema is added to the root tileset.json.");return}let i=e.schema.classes??B.EMPTY_OBJECT;if(l(n.class)){let o=i[n.class];return new jN({tile:n,class:o})}}k$._oneTimeWarning=gt;var QN=k$;var yki=x(T(),1);var iki=x(T(),1);function I0t(e){let t=new Uint8Array(e),n=Lh(t);if(n==="glTF"&&(n="glb"),Ta.isBinaryFormat(n))return{contentType:n,binaryPayload:t};let i=P0t(t);if(l(i.root))return{contentType:Ta.EXTERNAL_TILESET,jsonPayload:i};if(l(i.asset))return{contentType:Ta.GLTF,jsonPayload:i};if(l(i.tileAvailability))return{contentType:Ta.IMPLICIT_SUBTREE_JSON,jsonPayload:i};if(l(i.type))return{contentType:Ta.GEOJSON,jsonPayload:i};if(l(i.voxelTable))return{contentType:Ta.VOXEL_JSON,jsonPayload:i};throw new ae("Invalid tile content.")}function P0t(e){let t;try{t=Vr(e)}catch{throw new ae("Invalid tile content.")}return t}var cg=I0t;var U$=class{constructor(t,n,i,o){this._tileset=t,this._tile=n,this._tilesetResource=i,this._contents=[],this._contentsCreated=!1;let r=l(o.contents)?o.contents:o.content;this._innerContentHeaders=r,this._requestsInFlight=0,this._cancelCount=0,this._externalTilesetCount=0;let s=this._innerContentHeaders.length;this._arrayFetchPromises=new Array(s),this._requests=new Array(s),this._ready=!1,this._innerContentResources=new Array(s),this._serverKeys=new Array(s);for(let a=0;a<s;a++){let c=i.getDerivedResource({url:r[a].uri}),d=Mc.getServerKey(c.getUrlComponent());this._innerContentResources[a]=c,this._serverKeys[a]=d}}get featurePropertiesDirty(){let t=this._contents,n=t.length;for(let i=0;i<n;++i)if(t[i].featurePropertiesDirty)return!0;return!1}set featurePropertiesDirty(t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].featurePropertiesDirty=t}get featuresLength(){return 0}get pointsLength(){return 0}get trianglesLength(){return 0}get geometryByteLength(){return 0}get texturesByteLength(){return 0}get batchTableByteLength(){return 0}get innerContents(){return this._contents}get ready(){return this._contentsCreated?this._ready:!1}get tileset(){return this._tileset}get tile(){return this._tile}get url(){}get metadata(){}set metadata(t){}get batchTable(){}get group(){}set group(t){}get innerContentUrls(){return this._innerContentHeaders.map(function(t){return t.uri})}requestInnerContents(){if(!X0t(this._serverKeys)){this.tileset.statistics.numberOfAttemptedRequests+=this._serverKeys.length;return}let t=this._innerContentHeaders;D$(this,t.length);let n=this._cancelCount;for(let i=0;i<t.length;i++)this._arrayFetchPromises[i]=N0t(this,i,n,this._tile._contentState);return Y0t(this)}cancelRequests(){for(let t=0;t<this._requests.length;t++){let n=this._requests[t];l(n)&&n.cancel()}}hasProperty(t,n){return!1}getFeature(t){}applyDebugSettings(t,n){let i=this._contents,o=i.length;for(let r=0;r<o;++r)i[r].applyDebugSettings(t,n)}applyStyle(t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].applyStyle(t)}update(t,n){let i=this._contents,o=i.length,r=!0;for(let s=0;s<o;++s)i[s].update(t,n),r=r&&i[s].ready;!this._ready&&r&&(this._ready=!0)}pick(t,n,i){if(!this._ready)return;let o,r=Number.POSITIVE_INFINITY,s=this._contents,a=s.length;for(let c=0;c<a;++c){let d=s[c].pick(t,n,i);if(!l(d))continue;let u=h.distance(t.origin,d);u<r&&(o=d,r=u)}if(l(o))return i}isDestroyed(){return!1}destroy(){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].destroy();return me(this)}};function D$(e,t){e._requestsInFlight+=t,e.tileset.statistics.numberOfPendingRequests+=t}function JZe(e,t){e._cancelCount++,e._tile._contentState=t;let n=e.tileset.statistics;n.numberOfPendingRequests-=e._requestsInFlight,n.numberOfAttemptedRequests+=e._requestsInFlight,e._requestsInFlight=0;let i=e._innerContentHeaders.length;e._arrayFetchPromises=new Array(i)}function X0t(e){let t={};for(let n=0;n<e.length;n++){let i=e[n];l(t[i])?t[i]++:t[i]=1}for(let n in t)if(t.hasOwnProperty(n)&&!Mc.serverHasOpenSlots(n,t[n]))return!1;return Mc.heapHasOpenSlots(e.length)}function N0t(e,t,n,i){let o=e._innerContentResources[t].clone(),r=e.tile,s=function(){return r._priority},a=e._serverKeys[t],c=new _r({throttle:!0,throttleByServer:!0,type:ks.TILES3D,priorityFunction:s,serverKey:a});o.request=c,e._requests[t]=c;let d=o.fetchArrayBuffer();if(l(d))return d.then(function(u){if(!(n<e._cancelCount)){if(o.request.cancelled||o.request.state===Ti.CANCELLED){JZe(e,i);return}return D$(e,-1),u}}).catch(function(u){if(!(n<e._cancelCount)){if(o.request.cancelled||o.request.state===Ti.CANCELLED){JZe(e,i);return}D$(e,-1),jZe(e,t,u)}})}async function Y0t(e){let t=e._cancelCount,n=await Promise.all(e._arrayFetchPromises);if(t<e._cancelCount)return;let i=n.map((r,s)=>w0t(e,r,s)),o=await Promise.all(i);if(e._contentsCreated=!0,e._contents=o.filter(l),e._externalTilesetCount===e._contents.length){let r=e._tile;r.hasRenderableContent=!1}return o}async function w0t(e,t,n){if(l(t))try{let i=cg(t),o=e._tileset,r=e._innerContentResources[n],s=e._tile;i.contentType===Ta.EXTERNAL_TILESET&&(e._externalTilesetCount++,s.hasTilesetContent=!0),e._disableSkipLevelOfDetail=e._disableSkipLevelOfDetail||i.contentType===Ta.GEOMETRY||i.contentType===Ta.VECTOR;let a,c=NS[i.contentType];l(i.binaryPayload)?a=await Promise.resolve(c(o,s,r,i.binaryPayload.buffer,0)):a=await Promise.resolve(c(o,s,r,i.jsonPayload));let d=e._innerContentHeaders[n];if(s.hasImplicitContentMetadata){let m=s.implicitSubtree,p=s.implicitCoordinates;a.metadata=m.getContentMetadataView(p,n)}else s.hasImplicitContent||(a.metadata=YS(o,d));let u=wS(o,d);return l(u)&&(a.group=new RS({metadata:u})),a}catch(i){jZe(e,n,i)}}function jZe(e,t,n){let i=e._tileset,o=e._innerContentResources[t].url,r=l(n.message)?n.message:n.toString();i.tileFailed.numberOfListeners>0?i.tileFailed.raiseEvent({url:o,message:r}):(console.log(`A content failed to load: ${o}`),console.log(`Error: ${r}`))}var qN=U$;var Nki=x(T(),1);function sR(e){this.rectangle=re.clone(e.rectangle),this.minimumHeight=e.minimumHeight??0,this.maximumHeight=e.maximumHeight??0,this.southwestCornerCartesian=new h,this.northeastCornerCartesian=new h,this.westNormal=new h,this.southNormal=new h,this.eastNormal=new h,this.northNormal=new h;let t=e.ellipsoid??ie.WGS84;O0t(this,e.rectangle,t),this._orientedBoundingBox=void 0,this._boundingSphere=void 0,(e.computeBoundingVolumes??!0)&&this.computeBoundingVolumes(t)}Object.defineProperties(sR.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});sR.prototype.computeBoundingVolumes=function(e){this._orientedBoundingBox=$t.fromRectangle(this.rectangle,this.minimumHeight,this.maximumHeight,e),this._boundingSphere=le.fromOrientedBoundingBox(this._orientedBoundingBox)};var QZe=new h,vB=new h,qZe=new h,M0t=new h,k0t=new h,U0t=new h,D0t=new h,$m=new fe,$Ze=new nn(h.UNIT_X,0),rR=new fn;function O0t(e,t,n){n.cartographicToCartesian(re.southwest(t),e.southwestCornerCartesian),n.cartographicToCartesian(re.northeast(t),e.northeastCornerCartesian),$m.longitude=t.west,$m.latitude=(t.south+t.north)*.5,$m.height=0;let i=n.cartographicToCartesian($m,U0t),o=h.cross(i,h.UNIT_Z,M0t);h.normalize(o,e.westNormal),$m.longitude=t.east;let r=n.cartographicToCartesian($m,D0t),s=h.cross(h.UNIT_Z,r,QZe);h.normalize(s,e.eastNormal);let a=h.subtract(i,r,QZe);h.magnitude(a)===0&&(a=h.clone(o,a));let c=h.normalize(a,k0t),d=t.south,u;if(d>0){$m.longitude=(t.west+t.east)*.5,$m.latitude=d;let y=n.cartographicToCartesian($m,rR.origin);h.clone(c,rR.direction);let _=nn.fromPointNormal(e.southwestCornerCartesian,e.westNormal,$Ze);di.rayPlane(rR,_,e.southwestCornerCartesian),u=n.geodeticSurfaceNormal(y,vB)}else u=n.geodeticSurfaceNormalCartographic(re.southeast(t),vB);let m=h.cross(u,a,qZe);h.normalize(m,e.southNormal);let p=t.north,b;if(p<0){$m.longitude=(t.west+t.east)*.5,$m.latitude=p;let y=n.cartographicToCartesian($m,rR.origin);h.negate(c,rR.direction);let _=nn.fromPointNormal(e.northeastCornerCartesian,e.eastNormal,$Ze);di.rayPlane(rR,_,e.northeastCornerCartesian),b=n.geodeticSurfaceNormal(y,vB)}else b=n.geodeticSurfaceNormalCartographic(re.northwest(t),vB);let f=h.cross(a,b,qZe);h.normalize(f,e.northNormal)}var B0t=new h,z0t=new h,H0t=new h(0,-1,0),K0t=new h(0,0,-1),eVe=new h;function J0t(e,t){let n=t.camera,i=n.positionWC,o=n.positionCartographic,r=0;if(!re.contains(e.rectangle,o)){let d=e.southwestCornerCartesian,u=e.northeastCornerCartesian,m=e.westNormal,p=e.southNormal,b=e.eastNormal,f=e.northNormal;t.mode!==se.SCENE3D&&(d=t.mapProjection.project(re.southwest(e.rectangle),B0t),d.z=d.y,d.y=d.x,d.x=0,u=t.mapProjection.project(re.northeast(e.rectangle),z0t),u.z=u.y,u.y=u.x,u.x=0,m=H0t,b=h.UNIT_Y,p=K0t,f=h.UNIT_Z);let y=h.subtract(i,d,eVe),_=h.dot(y,m),S=h.dot(y,p),Z=h.subtract(i,u,eVe),V=h.dot(Z,b),C=h.dot(Z,f);_>0?r+=_*_:V>0&&(r+=V*V),S>0?r+=S*S:C>0&&(r+=C*C)}let s,a,c;if(t.mode===se.SCENE3D?(s=o.height,a=e.minimumHeight,c=e.maximumHeight):(s=i.x,a=0,c=0),s>c){let d=s-c;r+=d*d}else if(s<a){let d=a-s;r+=d*d}return Math.sqrt(r)}sR.prototype.distanceToCamera=function(e){let t=J0t(this,e);if(e.mode===se.SCENE3D&&l(this._orientedBoundingBox)){let n=Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC));return Math.max(t,n)}return t};sR.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};sR.prototype.createDebugVolume=function(e){let t=I.clone(I.IDENTITY),n=new p_({rectangle:this.rectangle,height:this.minimumHeight,extrudedHeight:this.maximumHeight}),i=new Nt({geometry:n,id:"outline",modelMatrix:t,attributes:{color:Qt.fromColor(e)}});return new Nn({geometryInstances:i,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})};var Xu=sR;var e9i=x(T(),1);var FB=new fe;function $N(e){let t=mb.fromToken(e.token),n=e.minimumHeight??0,i=e.maximumHeight??0,o=e.ellipsoid??ie.WGS84;this.s2Cell=t,this.minimumHeight=n,this.maximumHeight=i,this.ellipsoid=o;let r=obt(t,n,i,o);this._boundingPlanes=r;let s=cbt(r);this._vertices=s,this._edgeNormals=new Array(6),this._edgeNormals[0]=Q$(r[0],s.slice(0,4));let a;for(a=0;a<4;a++)this._edgeNormals[0][a]=h.negate(this._edgeNormals[0][a],this._edgeNormals[0][a]);for(this._edgeNormals[1]=Q$(r[1],s.slice(4,8)),a=0;a<4;a++)this._edgeNormals[2+a]=Q$(r[2+a],[s[a%4],s[(a+1)%4],s[4+(a+1)%4],s[4+a]]);for(this._planeVertices=[this._vertices.slice(0,4),this._vertices.slice(4,8)],a=0;a<4;a++)this._planeVertices.push([this._vertices[a%4],this._vertices[(a+1)%4],this._vertices[4+(a+1)%4],this._vertices[4+a]]);let c=t.getCenter();FB=o.cartesianToCartographic(c,FB),FB.height=(i+n)/2,this.center=o.cartographicToCartesian(FB,c),this._boundingSphere=le.fromPoints(s)}var j0t=new h,Q0t=new fe,q0t=new h,$0t=new fe,ebt=new h,tbt=new h,nbt=new h,ibt=new h;function obt(e,t,n,i){let o=new Array(6),r=e.getCenter(),s=i.geodeticSurfaceNormal(r,j0t),a=i.cartesianToCartographic(r,Q0t);a.height=n;let c=i.cartographicToCartesian(a,q0t),d=nn.fromPointNormal(c,s);o[0]=d;let u=0,m,p=[],b,f;for(m=0;m<4;m++){b=e.getVertex(m),p[m]=b,f=i.cartesianToCartographic(b,$0t),f.height=t;let _=nn.getPointDistance(d,i.cartographicToCartesian(f,ebt));_<u&&(u=_)}let y=nn.clone(d);for(y.normal=h.negate(y.normal,y.normal),y.distance=y.distance*-1+u,o[1]=y,m=0;m<4;m++){b=p[m];let _=p[(m+1)%4],S=i.geodeticSurfaceNormal(b,tbt),Z=h.subtract(_,b,ibt),V=h.cross(Z,S,nbt);V=h.normalize(V,V),o[2+m]=nn.fromPointNormal(b,V)}return o}var MS=new h,kS=new h,US=new h,O$=new h,B$=new h,z$=new h,rbt=new h,sbt=new h,abt=new h,H$=new h,K$=new h,J$=new h,Rx=new h,Jp=new q;function tVe(e,t,n){MS=e.normal,kS=t.normal,US=n.normal,O$=h.multiplyByScalar(e.normal,-e.distance,O$),B$=h.multiplyByScalar(t.normal,-t.distance,B$),z$=h.multiplyByScalar(n.normal,-n.distance,z$),H$=h.multiplyByScalar(h.cross(kS,US,rbt),h.dot(O$,MS),H$),K$=h.multiplyByScalar(h.cross(US,MS,sbt),h.dot(B$,kS),K$),J$=h.multiplyByScalar(h.cross(MS,kS,abt),h.dot(z$,US),J$),Jp[0]=MS.x,Jp[1]=kS.x,Jp[2]=US.x,Jp[3]=MS.y,Jp[4]=kS.y,Jp[5]=US.y,Jp[6]=MS.z,Jp[7]=kS.z,Jp[8]=US.z;let i=q.determinant(Jp);return Rx=h.add(H$,K$,Rx),Rx=h.add(Rx,J$,Rx),new h(Rx.x/i,Rx.y/i,Rx.z/i)}function cbt(e){let t=new Array(8);for(let n=0;n<4;n++)t[n]=tVe(e[0],e[2+(n+3)%4],e[2+n%4]),t[n+4]=tVe(e[1],e[2+(n+3)%4],e[2+n%4]);return t}var j$=new h,aR=new h;function Q$(e,t){let n=[];for(let i=0;i<4;i++)j$=h.subtract(t[(i+1)%4],t[i],j$),aR=h.cross(e.normal,j$,aR),aR=h.normalize(aR,aR),n[i]=h.clone(aR);return n}Object.defineProperties($N.prototype,{boundingVolume:{get:function(){return this}},boundingSphere:{get:function(){return this._boundingSphere}}});var q$=new h;$N.prototype.distanceToCamera=function(e){let t=e.camera.positionWC,n=[],i=[],o;nn.getPointDistance(this._boundingPlanes[0],t)>0?(n.push(0),i.push(this._planeVertices[0]),o=this._edgeNormals[0]):nn.getPointDistance(this._boundingPlanes[1],t)>0&&(n.push(1),i.push(this._planeVertices[1]),o=this._edgeNormals[1]);let r,s;for(r=0;r<4;r++)s=2+r,nn.getPointDistance(this._boundingPlanes[s],t)>0&&(n.push(s),i.push(this._planeVertices[s]),o=this._edgeNormals[s]);if(n.length===0)return 0;let a,c;if(n.length===1)return c=this._boundingPlanes[n[0]],a=$$(nn.projectPointOntoPlane(c,t,q$),i[0],c,o),h.distance(a,t);if(n.length===2){if(n[0]===0){let p=[this._vertices[4*n[0]+(n[1]-2)],this._vertices[4*n[0]+(n[1]-2+1)%4]];return a=nVe(t,p[0],p[1]),h.distance(a,t)}let u=Number.MAX_VALUE,m;for(r=0;r<2;r++)c=this._boundingPlanes[n[r]],a=$$(nn.projectPointOntoPlane(c,t,q$),i[r],c,this._edgeNormals[n[r]]),m=h.distanceSquared(a,t),m<u&&(u=m);return Math.sqrt(u)}else if(n.length>3)return a=$$(nn.projectPointOntoPlane(this._boundingPlanes[1],t,q$),this._planeVertices[1],this._boundingPlanes[1],this._edgeNormals[1]),h.distance(a,t);let d=n[1]===2&&n[2]===5?0:1;return n[0]===0?h.distance(t,this._vertices[(n[1]-2+d)%4]):h.distance(t,this._vertices[4+(n[1]-2+d)%4])};var lbt=new h,dbt=new h;function nVe(e,t,n){let i=h.subtract(n,t,lbt),o=h.subtract(e,t,dbt),r=h.dot(i,o);if(r<=0)return t;let s=h.dot(i,i);return r>=s?n:(r=r/s,new h((1-r)*t.x+r*n.x,(1-r)*t.y+r*n.y,(1-r)*t.z+r*n.z))}var ubt=new nn(h.UNIT_X,0);function $$(e,t,n,i){let o=Number.MAX_VALUE,r,s,a;for(let c=0;c<t.length;c++){let d=nn.fromPointNormal(t[c],i[c],ubt);nn.getPointDistance(d,e)<0||(a=nVe(e,t[c],t[(c+1)%4]),r=h.distance(e,a),r<o&&(o=r,s=a))}return l(s)?s:e}$N.prototype.intersectPlane=function(e){let t=0,n=0;for(let i=0;i<this._vertices.length;i++)h.dot(e.normal,this._vertices[i])+e.distance<0?n++:t++;return t===this._vertices.length?jt.INSIDE:n===this._vertices.length?jt.OUTSIDE:jt.INTERSECTING};$N.prototype.createDebugVolume=function(e){let t=I.clone(I.IDENTITY),n=new Sm({polygonHierarchy:{positions:this._planeVertices[0]}}),i=Sm.createGeometry(n),o=new Nt({geometry:i,id:"outline",modelMatrix:t,attributes:{color:Qt.fromColor(e)}}),r=new Sm({polygonHierarchy:{positions:this._planeVertices[1]}}),s=Sm.createGeometry(r),a=new Nt({geometry:s,id:"outline",modelMatrix:t,attributes:{color:Qt.fromColor(e)}}),c=[];for(let d=0;d<4;d++){let u=new Sm({polygonHierarchy:{positions:this._planeVertices[2+d]}}),m=Sm.createGeometry(u);c[d]=new Nt({geometry:m,id:"outline",modelMatrix:t,attributes:{color:Qt.fromColor(e)}})}return new Nn({geometryInstances:[c[0],c[1],c[2],c[3],a,o],appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})};var eY=$N;var u9i=x(T(),1);function cR(e,t){t===0&&(t=L.EPSILON7),this._boundingSphere=new le(e,t)}Object.defineProperties(cR.prototype,{center:{get:function(){return this._boundingSphere.center}},radius:{get:function(){return this._boundingSphere.radius}},boundingVolume:{get:function(){return this._boundingSphere}},boundingSphere:{get:function(){return this._boundingSphere}}});cR.prototype.distanceToCamera=function(e){let t=this._boundingSphere;return Math.max(0,h.distance(t.center,e.camera.positionWC)-t.radius)};cR.prototype.intersectPlane=function(e){return le.intersectPlane(this._boundingSphere,e)};cR.prototype.update=function(e,t){h.clone(e,this._boundingSphere.center),this._boundingSphere.radius=t};cR.prototype.createDebugVolume=function(e){let t=new hb({radius:this.radius}),n=I.fromTranslation(this.center,I.clone(I.IDENTITY)),i=new Nt({geometry:t,id:"outline",modelMatrix:n,attributes:{color:Qt.fromColor(e)}});return new Nn({geometryInstances:i,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})};var lg=cR;var V9i=x(T(),1);var mbt=new h,hbt=new h,fbt=new h,pbt=new h;function DS(e,t,n){n=h.cross(e,t,n);let i=h.magnitude(n);return h.multiplyByScalar(n,L.EPSILON7/i,n)}function eee(e,t){let n=h.normalize(e,pbt),i=h.equalsEpsilon(n,h.UNIT_X,L.EPSILON6)?h.UNIT_Y:h.UNIT_X;return DS(e,i,t)}function iVe(e){let t=q.getColumn(e,0,mbt),n=q.getColumn(e,1,hbt),i=q.getColumn(e,2,fbt),o=h.equals(t,h.ZERO),r=h.equals(n,h.ZERO),s=h.equals(i,h.ZERO);return!o&&!r&&!s?e:o&&r&&s?(e[0]=L.EPSILON7,e[4]=L.EPSILON7,e[8]=L.EPSILON7,e):(o&&!r&&!s?t=DS(n,i,t):!o&&r&&!s?n=DS(t,i,n):!o&&!r&&s?i=DS(n,t,i):o?r?s||(t=eee(i,t),n=DS(i,t,n)):(t=eee(n,t),i=DS(n,t,i)):(n=eee(t,n),i=DS(n,t,i)),q.setColumn(e,0,t,e),q.setColumn(e,1,n,e),q.setColumn(e,2,i,e),e)}function lR(e,t){t=iVe(t),this._orientedBoundingBox=new $t(e,t),this._boundingSphere=le.fromOrientedBoundingBox(this._orientedBoundingBox)}Object.defineProperties(lR.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});lR.prototype.distanceToCamera=function(e){return Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC))};lR.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};lR.prototype.update=function(e,t){h.clone(e,this._orientedBoundingBox.center),t=iVe(t),q.clone(t,this._orientedBoundingBox.halfAxes),le.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere)};lR.prototype.createDebugVolume=function(e){let t=new Rh({minimum:new h(-1,-1,-1),maximum:new h(1,1,1)}),n=I.fromRotationTranslation(this.boundingVolume.halfAxes,this.boundingVolume.center),i=new Nt({geometry:t,id:"outline",modelMatrix:n,attributes:{color:Qt.fromColor(e)}});return new Nn({geometryInstances:i,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})};var kd=lR;function xr(e,t,n,i){this._tileset=e,this._header=n;let o=l(n.contents),r=o&&n.contents.length>1||Qi(n,"3DTILES_multiple_contents"),s=o&&!r?n.contents[0]:n.content;this._contentHeader=s,this.transform=l(n.transform)?I.unpack(n.transform):I.clone(I.IDENTITY);let a=l(i)?i.computedTransform:e.modelMatrix,c=I.multiply(a,this.transform,new I),d=l(i)?i._initialTransform:I.IDENTITY;this._initialTransform=I.multiply(d,this.transform,new I),this.computedTransform=c,this.metadata=QN(e,n),this._verticalExaggeration=1,this._verticalExaggerationRelativeHeight=0,this._boundingVolume=this.createBoundingVolume(n.boundingVolume,c),this._boundingVolume2D=void 0;let u;l(s)&&l(s.boundingVolume)&&(u=this.createBoundingVolume(s.boundingVolume,c)),this._contentBoundingVolume=u,this._contentBoundingVolume2D=void 0;let m;l(n.viewerRequestVolume)&&(m=this.createBoundingVolume(n.viewerRequestVolume,c)),this._viewerRequestVolume=m,this.geometricError=n.geometricError,this._geometricError=n.geometricError,l(this._geometricError)||(this._geometricError=l(i)?i._geometricError:e._geometricError,xr._deprecationWarning("geometricErrorUndefined","Required property geometricError is undefined for this tile. Using parent's geometric error instead.")),this.updateGeometricErrorScale();let p;l(n.refine)?((n.refine==="replace"||n.refine==="add")&&xr._deprecationWarning("lowercase-refine",`This tile uses a lowercase refine "${n.refine}". Instead use "${n.refine.toUpperCase()}".`),p=n.refine.toUpperCase()==="REPLACE"?br.REPLACE:br.ADD):l(i)?p=i.refine:p=br.REPLACE,this.refine=p,this.children=[],this.parent=i;let b,f=!1,y,_,S;if(t=ve.createIfNeeded(t),r)y=ir.UNLOADED,_=t.clone();else if(l(s)){let G=s.uri;l(s.url)&&(xr._deprecationWarning("contentUrl",'This tileset JSON uses the "content.url" property which has been deprecated. Use "content.uri" instead.'),G=s.url),G===""?(xr._deprecationWarning("contentUriEmpty","content.uri property is an empty string, which creates a circular dependency, making this tileset invalid. Omit the content property instead"),b=new Kp(e,this),f=!0,y=ir.READY):(y=ir.UNLOADED,_=t.getDerivedResource({url:G}),S=Mc.getServerKey(_.getUrlComponent()))}else b=new Kp(e,this),f=!0,y=ir.READY;this._content=b,this._contentResource=_,this._contentState=y,this._expiredContent=void 0,this._serverKey=S,this.hasEmptyContent=f,this.hasTilesetContent=!1,this.hasImplicitContent=!1,this.hasRenderableContent=!f,this.hasImplicitContentMetadata=!1,this.hasMultipleContents=r,this.cacheNode=void 0;let Z=n.expire,V,C;l(Z)&&(V=Z.duration,l(Z.date)&&(C=Q.fromIso8601(Z.date))),this.expireDuration=V,this.expireDate=C,this.lastStyleTime=0,this._optimChildrenWithinParent=qm.NOT_COMPUTED,this.clippingPlanesDirty=!1,this.clippingPolygonsDirty=!1,this.priorityDeferred=!1,this.implicitTileset=void 0,this.implicitCoordinates=void 0,this.implicitSubtree=void 0,this._distanceToCamera=0,this._centerZDepth=0,this._screenSpaceError=0,this._screenSpaceErrorProgressiveResolution=0,this._visibilityPlaneMask=0,this._visible=!1,this._inRequestVolume=!1,this._finalResolution=!0,this._depth=0,this._stackLength=0,this._selectionDepth=0,this._updatedVisibilityFrame=0,this._touchedFrame=0,this._visitedFrame=0,this._selectedFrame=0,this._wasSelectedLastFrame=!1,this._requestedFrame=0,this._ancestorWithContent=void 0,this._ancestorWithContentAvailable=void 0,this._refines=!1,this._shouldSelect=!1,this._isClipped=!0,this._isClippedByPolygon=!1,this._clippingPlanesState=0,this._clippingPolygonsState=0,this._debugBoundingVolume=void 0,this._debugContentBoundingVolume=void 0,this._debugViewerRequestVolume=void 0,this._debugColor=U.fromRandom({alpha:1}),this._debugColorizeTiles=!1,this._priority=0,this._priorityHolder=this,this._priorityProgressiveResolution=!1,this._priorityProgressiveResolutionScreenSpaceErrorLeaf=!1,this._priorityReverseScreenSpaceError=0,this._foveatedFactor=0,this._wasMinPriorityChild=!1,this._loadTimestamp=new Q,this._commandsLength=0,this._color=void 0,this._colorDirty=!1,this._request=void 0}xr._deprecationWarning=Ea;Object.defineProperties(xr.prototype,{tileset:{get:function(){return this._tileset}},content:{get:function(){return this._content}},boundingVolume:{get:function(){return this._boundingVolume}},contentBoundingVolume:{get:function(){return this._contentBoundingVolume??this._boundingVolume}},boundingSphere:{get:function(){return this._boundingVolume.boundingSphere}},isVisible:{get:function(){return this._visible&&this._inRequestVolume}},extras:{get:function(){return this._header.extras}},color:{get:function(){return l(this._color)||(this._color=new U),U.clone(this._color)},set:function(e){this._color=U.clone(e,this._color),this._colorDirty=!0}},contentAvailable:{get:function(){return this.contentReady&&this.hasRenderableContent||l(this._expiredContent)&&!this.contentFailed}},contentReady:{get:function(){return this._contentState===ir.READY}},contentUnloaded:{get:function(){return this._contentState===ir.UNLOADED}},hasUnloadedRenderableContent:{get:function(){return this.hasRenderableContent&&this.contentUnloaded}},contentExpired:{get:function(){return this._contentState===ir.EXPIRED}},contentFailed:{get:function(){return this._contentState===ir.FAILED}},commandsLength:{get:function(){return this._commandsLength}}});var Gx=new h;function bbt(e,t){let{tileset:n,boundingSphere:i}=e,{radius:o,center:r}=i,{camera:s}=t,a=h.multiplyByScalar(s.directionWC,e._centerZDepth,Gx),c=h.add(s.positionWC,a,Gx),d=h.subtract(c,r,Gx);if(h.magnitude(d)>o){let C=h.normalize(d,Gx),G=h.multiplyByScalar(C,o,Gx),E=h.add(r,G,Gx),v=h.subtract(E,s.positionWC,Gx),F=h.normalize(v,Gx);e._foveatedFactor=1-Math.abs(h.dot(s.directionWC,F))}else e._foveatedFactor=0;let p=e.refine===br.REPLACE,b=n.isSkippingLevelOfDetail;if(p&&!b||!n.foveatedScreenSpaceError||n.foveatedConeSize===1||e._priorityProgressiveResolution&&p&&b||n._pass===or.PRELOAD_FLIGHT||n._pass===or.PRELOAD)return!1;let f=1-Math.cos(s.frustum.fov*.5),y=n.foveatedConeSize*f;if(e._foveatedFactor<=y)return!1;let _=f-y,S=L.clamp((e._foveatedFactor-y)/_,0,1),Z=n.foveatedInterpolationCallback(n.foveatedMinimumScreenSpaceErrorRelaxation,n.memoryAdjustedScreenSpaceError,S),V=e._screenSpaceError===0&&l(e.parent)?e.parent._screenSpaceError*.5:e._screenSpaceError;return n.memoryAdjustedScreenSpaceError-Z<=V}var lVe=new Q;xr.prototype.getScreenSpaceError=function(e,t,n){let i=this._tileset,o=n??1,r=l(this.parent)?this.parent.geometricError:i._scaledGeometricError,s=t?r:this.geometricError;if(s===0)return 0;let{camera:a,context:c}=e,d=a.frustum,u=c.drawingBufferWidth,m=c.drawingBufferHeight*o,p;if(e.mode===se.SCENE2D||d instanceof bn){let b=d.offCenterFrustum;l(b)&&(d=b);let f=Math.max(d.top-d.bottom,d.right-d.left)/Math.max(u,m);p=s/f}else{let b=Math.max(this._distanceToCamera,L.EPSILON7),f=d.sseDenominator;if(p=s*m/(b*f),i.dynamicScreenSpaceError){let y=i._dynamicScreenSpaceErrorComputedDensity,_=i.dynamicScreenSpaceErrorFactor,S=L.fog(b,y)*_;p-=S}}return p/=e.pixelRatio,p};function gbt(e,t){if(e.progressiveResolutionHeightFraction<=0||e.progressiveResolutionHeightFraction>.5)return!1;let n=e.memoryAdjustedScreenSpaceError,i=t._screenSpaceErrorProgressiveResolution>n;t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!1;let o=t.parent,r=t._screenSpaceErrorProgressiveResolution<=n,s=l(o)&&o._screenSpaceErrorProgressiveResolution>n;return r&&s&&(t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!0,i=!0),i}function ybt(e,t){let n=t.parent,o=l(n)&&(!e.isSkippingLevelOfDetail||t._screenSpaceError===0||n.hasTilesetContent||n.hasImplicitContent)?n._screenSpaceError:t._screenSpaceError;return e.root._screenSpaceError-o}xr.prototype.updateVisibility=function(e){let{parent:t,tileset:n}=this;if(this._updatedVisibilityFrame===n._updatedVisibilityFrame)return;let i=l(t)?t.computedTransform:n.modelMatrix,o=l(t)?t._visibilityPlaneMask:Os.MASK_INDETERMINATE;this.updateTransform(i,e),this._distanceToCamera=this.distanceToTile(e),this._centerZDepth=this.distanceToTileCenter(e),this._screenSpaceError=this.getScreenSpaceError(e,!1),this._screenSpaceErrorProgressiveResolution=this.getScreenSpaceError(e,!1,n.progressiveResolutionHeightFraction),this._visibilityPlaneMask=this.visibility(e,o),this._visible=this._visibilityPlaneMask!==Os.MASK_OUTSIDE,this._inRequestVolume=this.insideViewerRequestVolume(e),this._priorityReverseScreenSpaceError=ybt(n,this),this._priorityProgressiveResolution=gbt(n,this),this.priorityDeferred=bbt(this,e),this._updatedVisibilityFrame=n._updatedVisibilityFrame};xr.prototype.updateExpiration=function(){if(l(this.expireDate)&&this.contentReady&&!this.hasEmptyContent&&!this.hasMultipleContents){let e=Q.now(lVe);Q.lessThan(this.expireDate,e)&&(this._contentState=ir.EXPIRED,this._expiredContent=this._content)}};function xbt(e){if(!l(e.expireDuration))return;let t=Q.now(lVe);Q.addSeconds(t,e.expireDuration,t),l(e.expireDate)?Q.lessThan(e.expireDate,t)&&Q.clone(t,e.expireDate):e.expireDate=Q.clone(t)}function Tbt(e){return function(){return e._priority}}xr.prototype.requestContent=function(){if(!this.hasEmptyContent)return this.hasMultipleContents?_bt(this):Zbt(this)};function _bt(e){let t=e._content,n=e._tileset;if(!l(t)){let o=Qi(e._header,"3DTILES_multiple_contents")?e._header.extensions["3DTILES_multiple_contents"]:e._header;t=new qN(n,e,e._contentResource.clone(),o),e._content=t}let i=t.requestInnerContents();if(l(i))return e._contentState=ir.LOADING,i.then(o=>{if(!e.isDestroyed()&&l(o))return e._contentState=ir.PROCESSING,t}).catch(o=>{if(!e.isDestroyed())throw e._contentState=ir.FAILED,o})}async function Sbt(e,t,n,i,o){let r=e._contentState;e._contentState=ir.LOADING,++t.statistics.numberOfPendingRequests;let s;try{s=await o}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;if(n.cancelled||n.state===Ti.CANCELLED){e._contentState=r,++t.statistics.numberOfAttemptedRequests;return}if(dVe(e,a))return i&&(e.expireDate=void 0),e._content=new Kp(t,e),oVe(e),e._contentState=ir.PROCESSING,e._content;throw e._contentState=ir.FAILED,a}if(e.isDestroyed()){--t.statistics.numberOfPendingRequests;return}if(n.cancelled||n.state===Ti.CANCELLED){e._contentState=r,--t.statistics.numberOfPendingRequests,++t.statistics.numberOfAttemptedRequests;return}try{let a=await Vbt(e,s);return--t.statistics.numberOfPendingRequests,e.isDestroyed()?void 0:(i&&(e.expireDate=void 0),e._content=a,a instanceof Kp&&oVe(e),e._contentState=ir.PROCESSING,a)}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;throw e._contentState=ir.FAILED,a}}function Zbt(e){let t=e._contentResource.clone(),n=e.contentExpired;n&&t.setQueryParameters({expired:e.expireDate.toString()});let i=new _r({throttle:!0,throttleByServer:!0,type:ks.TILES3D,priorityFunction:Tbt(e),serverKey:e._serverKey});e._request=i,t.request=i;let o=e._tileset,r=t.fetchArrayBuffer();if(!l(r)){++o.statistics.numberOfAttemptedRequests;return}return Sbt(e,o,i,n,r)}function dVe(e,t){let i=e._tileset?._runtimeContentCodec?.missingTilePolicy;return!l(i)||!l(t.statusCode)?!1:i.statusCodes.includes(t.statusCode)}function oVe(e){e.hasEmptyContent=!0,e.hasRenderableContent=!1}xr._isEmptyTile=dVe;async function Vbt(e,t){let n=e._tileset,i=n?._runtimeContentCodec;if(l(i)&&typeof i.createContent=="function"){let d=await Promise.resolve(i.createContent(n,e,e._contentResource,t));return e.isDestroyed()?void 0:d}let o=cg(t);n._disableSkipLevelOfDetail=n._disableSkipLevelOfDetail||o.contentType===Ta.GEOMETRY||o.contentType===Ta.VECTOR,(o.contentType===Ta.IMPLICIT_SUBTREE||o.contentType===Ta.IMPLICIT_SUBTREE_JSON)&&(e.hasImplicitContent=!0,e.hasRenderableContent=!1),o.contentType===Ta.EXTERNAL_TILESET&&(e.hasTilesetContent=!0,e.hasRenderableContent=!1);let r,s=NS[o.contentType];if(e.isDestroyed())return;l(o.binaryPayload)?r=await Promise.resolve(s(n,e,e._contentResource,o.binaryPayload.buffer,0)):r=await Promise.resolve(s(n,e,e._contentResource,o.jsonPayload));let a=e._contentHeader;if(e.hasImplicitContentMetadata){let d=e.implicitSubtree,u=e.implicitCoordinates;r.metadata=d.getContentMetadataView(u,0)}else e.hasImplicitContent||(r.metadata=YS(n,a));let c=wS(n,a);return l(c)&&(r.group=new RS({metadata:c})),r}xr.prototype.cancelRequests=function(){this.hasMultipleContents?this._content.cancelRequests():this._request.cancel()};xr.prototype.unloadContent=function(){this.hasRenderableContent&&(this._content=this._content&&this._content.destroy(),this._contentState=ir.UNLOADED,this.lastStyleTime=0,this.clippingPlanesDirty=this._clippingPlanesState===0,this._clippingPlanesState=0,this.clippingPolygonsDirty=this._clippingPolygonsState===0,this._clippingPolygonsState=0,this._debugColorizeTiles=!1,this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy())};var uVe=new le;function nee(e,t){if(t.mode!==se.SCENE3D&&!l(e._boundingVolume2D)){let n=e._boundingVolume.boundingSphere,i=le.projectTo2D(n,t.mapProjection,uVe);e._boundingVolume2D=new lg(i.center,i.radius)}return t.mode!==se.SCENE3D?e._boundingVolume2D:e._boundingVolume}function Cbt(e,t){if(t.mode!==se.SCENE3D&&!l(e._contentBoundingVolume2D)){let n=e._contentBoundingVolume.boundingSphere,i=le.projectTo2D(n,t.mapProjection,uVe);e._contentBoundingVolume2D=new lg(i.center,i.radius)}return t.mode!==se.SCENE3D?e._contentBoundingVolume2D:e._contentBoundingVolume}xr.prototype.visibility=function(e,t){let n=e.cullingVolume,i=nee(this,e),o=this._tileset,r=o.clippingPlanes;if(l(r)&&r.enabled){let a=r.computeIntersectionWithBoundingVolume(i,o.clippingPlanesOriginMatrix);if(this._isClipped=a!==jt.INSIDE,a===jt.OUTSIDE)return Os.MASK_OUTSIDE}let s=o.clippingPolygons;if(l(s)&&s.enabled){let a=s.computeIntersectionWithBoundingVolume(i);this._isClippedByPolygon=a!==jt.OUTSIDE}return n.computeVisibilityWithPlaneMask(i,t)};xr.prototype.contentVisibility=function(e){if(!l(this._contentBoundingVolume))return jt.INSIDE;if(this._visibilityPlaneMask===Os.MASK_INSIDE)return jt.INSIDE;let t=e.cullingVolume,n=Cbt(this,e),i=this._tileset,o=i.clippingPlanes;if(l(o)&&o.enabled){let s=o.computeIntersectionWithBoundingVolume(n,i.clippingPlanesOriginMatrix);if(this._isClipped=s!==jt.INSIDE,s===jt.OUTSIDE)return jt.OUTSIDE}let r=i.clippingPolygons;if(l(r)&&r.enabled){let s=r.computeIntersectionWithBoundingVolume(n);if(this._isClippedByPolygon=s!==jt.OUTSIDE,s===jt.INSIDE)return jt.OUTSIDE}return t.computeVisibility(n)};xr.prototype.distanceToTile=function(e){return nee(this,e).distanceToCamera(e)};var Rbt=new h;xr.prototype.distanceToTileCenter=function(e){let n=nee(this,e).boundingVolume,i=h.subtract(n.center,e.camera.positionWC,Rbt);return h.dot(e.camera.directionWC,i)};xr.prototype.insideViewerRequestVolume=function(e){let t=this._viewerRequestVolume;return!l(t)||t.distanceToCamera(e)===0};var mVe=new q,hVe=new h,Gbt=new q,iee=new h,fVe=new re,pVe=new $t,tee=new I;function Abt(e,t,n){let i=h.fromElements(e[0],e[1],e[2],iee),o=q.fromArray(e,3,Gbt);i=I.multiplyByPoint(t,i,i);let r=I.getMatrix3(t,mVe);return o=q.multiply(r,o,o),l(n)?(n.update(i,o),n):new kd(i,o)}function rVe(e,t,n,i){let o=re.unpack(e,0,fVe),r=e[4],s=e[5],a=$t.fromRectangle(o,r,s,ie.WGS84,pVe),c=a.center,d=a.halfAxes;t=I.multiplyTransformation(t,I.inverseTransformation(n,tee),tee),c=I.multiplyByPoint(t,c,c);let u=I.getMatrix3(t,mVe);return d=q.multiply(u,d,d),l(i)&&i instanceof kd?(i.update(c,d),i):new kd(c,d)}function Ebt(e,t,n,i){if(!I.equalsEpsilon(t,n,L.EPSILON8))return i instanceof kd?rVe(e,t,n,i):rVe(e,t,n,void 0);let o=re.unpack(e,0,fVe);return i instanceof Xu?(i.rectangle=re.clone(o,i.rectangle),i.minimumHeight=e[4],i.maximumHeight=e[5],i.computeBoundingVolumes(ie.WGS84),i):new Xu({rectangle:o,minimumHeight:e[4],maximumHeight:e[5]})}function Lbt(e,t,n){let i=h.fromElements(e[0],e[1],e[2],iee),o=e[3];i=I.multiplyByPoint(t,i,i);let r=I.getScale(t,hVe),s=h.maximumComponent(r);return o*=s,l(n)?(n.update(i,o),n):new lg(i,o)}xr.prototype.createBoundingVolume=function(e,t,n){let i=this.metadata,o;if(l(i)&&(o=Tx.parseBoundingVolumeSemantic("TILE",i)),l(o)&&(e=o),!l(e))throw new ae("boundingVolume must be defined");if(Qi(e,"3DTILES_bounding_volume_S2"))return new eY(e.extensions["3DTILES_bounding_volume_S2"]);let{box:r,region:s,sphere:a}=e;if(l(r)){let c=Abt(r,t,n);return this._verticalExaggeration!==1&&sVe(c,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c}if(l(s)){let c=Ebt(s,t,this._initialTransform,n);return this._verticalExaggeration===1||(c instanceof kd?sVe(c,this._verticalExaggeration,this._verticalExaggerationRelativeHeight):(c.minimumHeight=ho.getHeight(c.minimumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c.maximumHeight=ho.getHeight(c.maximumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c.computeBoundingVolumes(ie.WGS84))),c}if(l(a)){let c=Lbt(a,t,n);if(this._verticalExaggeration!==1){let d=ho.getPosition(c.center,ie.WGS84,this._verticalExaggeration,this._verticalExaggerationRelativeHeight,iee),u=c.radius*this._verticalExaggeration;c.update(d,u)}return c}throw new ae("boundingVolume must contain a sphere, region, or box")};var Wbt=h.unpackArray(new Array(24).fill(0));function sVe(e,t,n){let i=e.boundingVolume.computeCorners(Wbt).map(r=>ho.getPosition(r,ie.WGS84,t,n,r)),o=$t.fromPoints(i,pVe);e.update(o.center,o.halfAxes)}xr.prototype.updateTransform=function(e,t){e=e??I.IDENTITY;let n=I.multiplyTransformation(e,this.transform,tee),i=!I.equals(n,this.computedTransform),o=l(t)&&(this._verticalExaggeration!==t.verticalExaggeration||this._verticalExaggerationRelativeHeight!==t.verticalExaggerationRelativeHeight);if(!i&&!o)return;i&&I.clone(n,this.computedTransform),o&&(this._verticalExaggeration=t.verticalExaggeration,this._verticalExaggerationRelativeHeight=t.verticalExaggerationRelativeHeight);let r=this._header,s=this._contentHeader;this._boundingVolume=this.createBoundingVolume(r.boundingVolume,this.computedTransform,this._boundingVolume),l(this._contentBoundingVolume)&&(this._contentBoundingVolume=this.createBoundingVolume(s.boundingVolume,this.computedTransform,this._contentBoundingVolume)),l(this._viewerRequestVolume)&&(this._viewerRequestVolume=this.createBoundingVolume(r.viewerRequestVolume,this.computedTransform,this._viewerRequestVolume)),this.updateGeometricErrorScale(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy()};xr.prototype.updateGeometricErrorScale=function(){let e=I.getScale(this.computedTransform,hVe),t=h.maximumComponent(e);if(this.geometricError=this._geometricError*t,!l(this.parent)){let n=this._tileset;n._scaledGeometricError=n._geometricError*t}};function vbt(e,t,n,i){if(!i.isRender)return;let o=l(e._contentHeader)&&l(e._contentHeader.boundingVolume),r=t.debugShowBoundingVolume||t.debugShowContentBoundingVolume&&!o;if(r){let c;e._finalResolution?e.hasRenderableContent?c=U.WHITE:c=U.DARKGRAY:c=U.YELLOW,l(e._debugBoundingVolume)||(e._debugBoundingVolume=e._boundingVolume.createDebugVolume(c)),e._debugBoundingVolume.update(n);let d=e._debugBoundingVolume.getGeometryInstanceAttributes("outline");d.color=Qt.toValue(c,d.color)}else!r&&l(e._debugBoundingVolume)&&(e._debugBoundingVolume=e._debugBoundingVolume.destroy());t.debugShowContentBoundingVolume&&o?(l(e._debugContentBoundingVolume)||(e._debugContentBoundingVolume=e._contentBoundingVolume.createDebugVolume(U.BLUE)),e._debugContentBoundingVolume.update(n)):!t.debugShowContentBoundingVolume&&l(e._debugContentBoundingVolume)&&(e._debugContentBoundingVolume=e._debugContentBoundingVolume.destroy()),t.debugShowViewerRequestVolume&&l(e._viewerRequestVolume)?(l(e._debugViewerRequestVolume)||(e._debugViewerRequestVolume=e._viewerRequestVolume.createDebugVolume(U.YELLOW)),e._debugViewerRequestVolume.update(n)):!t.debugShowViewerRequestVolume&&l(e._debugViewerRequestVolume)&&(e._debugViewerRequestVolume=e._debugViewerRequestVolume.destroy());let s=t.debugColorizeTiles&&!e._debugColorizeTiles||l(t._heatmap.tilePropertyName),a=!t.debugColorizeTiles&&e._debugColorizeTiles;s?(t._heatmap.colorize(e,n),e._debugColorizeTiles=!0,e.color=e._debugColor):a&&(e._debugColorizeTiles=!1,e.color=U.WHITE),e._colorDirty&&(e._colorDirty=!1,e._content.applyDebugSettings(!0,e._color)),a&&t.makeStyleDirty()}function Fbt(e,t,n){let i=e._expiredContent;if(!e.hasMultipleContents&&l(i)){if(!e.contentReady){try{i.update(t,n)}catch{}return}e._expiredContent.destroy(),e._expiredContent=void 0}if(l(e.content))try{e.content.update(t,n)}catch(o){throw e._contentState=ir.FAILED,o}}function Ibt(e,t){let n=t.clippingPlanes,i=0;l(n)&&e._isClipped&&n.enabled&&(i=n.clippingPlanesState),i!==e._clippingPlanesState&&(e._clippingPlanesState=i,e.clippingPlanesDirty=!0)}function Pbt(e,t){let n=t.clippingPolygons,i=0;l(n)&&e._isClippedByPolygon&&n.enabled&&(i=n.clippingPolygonsState),i!==e._clippingPolygonsState&&(e._clippingPolygonsState=i,e.clippingPolygonsDirty=!0)}xr.prototype.update=function(e,t,n){let{commandList:i}=t,o=i.length;Ibt(this,e),Pbt(this,e),vbt(this,e,t,n),Fbt(this,e,t);let r=i.length;this._commandsLength=r-o;for(let s=o;s<r;++s){let a=i[s],c=a.pass===We.TRANSLUCENT;a.depthForTranslucentClassification=c}this.clippingPlanesDirty=!1,this.clippingPolygonsDirty=!1};var aVe=[];xr.prototype.process=function(e,t){!this.contentExpired&&!this.contentReady&&this._content.ready&&(xbt(this),this._selectedFrame=0,this.lastStyleTime=0,Q.now(this._loadTimestamp),this._contentState=ir.READY,!this.hasTilesetContent&&!this.hasImplicitContent&&(e._statistics.incrementLoadCounts(this.content),++e._statistics.numberOfTilesWithContentReady,++e._statistics.numberOfLoadedTilesTotal,e._cache.add(this)));let n=t.commandList;t.commandList=aVe;try{this._content.update(e,t)}catch(i){throw this._contentState=ir.FAILED,i}aVe.length=0,t.commandList=n};function cVe(e,t,n){let i=e*Math.pow(10,t);return parseInt(i)*Math.pow(10,n)}function IB(e,t,n){return Math.max(L.normalize(e,t,n)-L.EPSILON7,0)}xr.prototype.updatePriority=function(){let e=this.tileset,t=e.preferLeaves,n=e._minimumPriority,i=e._maximumPriority,o=4,r=1,s=0,a=o,c=s+a,d=o,u=c+d,m=r,p=Math.pow(10,u),b=u+m,f=r,y=Math.pow(10,b),_=b+f,S=Math.pow(10,_),Z=IB(this._depth,n.depth,i.depth);Z=t?1-Z:Z;let C=!e.isSkippingLevelOfDetail&&this.refine===br.REPLACE?IB(this._priorityHolder._distanceToCamera,n.distance,i.distance):IB(this._priorityReverseScreenSpaceError,n.reverseScreenSpaceError,i.reverseScreenSpaceError),G=cVe(C,a,s),E=this._priorityProgressiveResolution?0:p,v=IB(this._priorityHolder._foveatedFactor,n.foveatedFactor,i.foveatedFactor),F=cVe(v,d,c),P=this.priorityDeferred?y:0,N=e._pass===or.PRELOAD_FLIGHT?0:S;this._priority=Z+G+E+F+P+N};xr.prototype.isDestroyed=function(){return!1};xr.prototype.destroy=function(){return this._content=this._content&&this._content.destroy(),this._expiredContent=this._expiredContent&&!this._expiredContent.isDestroyed()&&this._expiredContent.destroy(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy(),me(this)};var eh=xr;var FUi=x(T(),1);var SUi=x(T(),1);function dg(e){e=e??B.EMPTY_OBJECT;let t=e.id,n=e.group,i=e.class,o=l(n.properties)?n.properties:{};this._class=i,this._properties=o,this._id=t,this._extras=n.extras,this._extensions=n.extensions}Object.defineProperties(dg.prototype,{class:{get:function(){return this._class}},id:{get:function(){return this._id}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});dg.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};dg.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};dg.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};dg.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};dg.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};dg.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};dg.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var dR=dg;var GUi=x(T(),1);function ug(e){e=e??B.EMPTY_OBJECT;let t=e.tileset,n=e.class,i=l(t.properties)?t.properties:{};this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(ug.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});ug.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};ug.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};ug.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};ug.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};ug.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};ug.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};ug.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var tY=ug;function bVe(e){e=e??B.EMPTY_OBJECT;let t=e.metadataJson,n=e.schema,i=t.metadata??t.tileset,o;l(i)&&(o=new tY({tileset:i,class:n.classes[i.class]}));let r=[],s=[],a=t.groups;if(Array.isArray(a)){let c=a.length;for(let d=0;d<c;d++){let u=a[d];s.push(new dR({group:u,class:n.classes[u.class]}))}}else if(l(a)){r=Object.keys(a).sort();let c=r.length;for(let d=0;d<c;d++){let u=r[d];if(a.hasOwnProperty(u)){let m=a[u];s.push(new dR({id:u,group:a[u],class:n.classes[m.class]}))}}}this._schema=n,this._groups=s,this._groupIds=r,this._tileset=o,this._statistics=t.statistics,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(bVe.prototype,{schema:{get:function(){return this._schema}},groups:{get:function(){return this._groups}},groupIds:{get:function(){return this._groupIds}},tileset:{get:function(){return this._tileset}},statistics:{get:function(){return this._statistics}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var OS=bVe;var wUi=x(T(),1);var gVe={},Xbt=new h;gVe.checkChildrenWithinParent=function(e){let t=e.children,n=t.length,i=e.boundingVolume;if(i instanceof kd||i instanceof Xu){let o=i._orientedBoundingBox;e._optimChildrenWithinParent=qm.USE_OPTIMIZATION;for(let r=0;r<n;++r){let a=t[r].boundingVolume;if(!(a instanceof kd||a instanceof Xu)){e._optimChildrenWithinParent=qm.SKIP_OPTIMIZATION;break}let c=a._orientedBoundingBox,d=h.subtract(c.center,o.center,Xbt),u=h.magnitude(d);h.divideByScalar(d,u,d);let m=Math.abs(o.halfAxes[0]*d.x)+Math.abs(o.halfAxes[1]*d.y)+Math.abs(o.halfAxes[2]*d.z)+Math.abs(o.halfAxes[3]*d.x)+Math.abs(o.halfAxes[4]*d.y)+Math.abs(o.halfAxes[5]*d.z)+Math.abs(o.halfAxes[6]*d.x)+Math.abs(o.halfAxes[7]*d.y)+Math.abs(o.halfAxes[8]*d.z),p=Math.abs(c.halfAxes[0]*d.x)+Math.abs(c.halfAxes[1]*d.y)+Math.abs(c.halfAxes[2]*d.z)+Math.abs(c.halfAxes[3]*d.x)+Math.abs(c.halfAxes[4]*d.y)+Math.abs(c.halfAxes[5]*d.z)+Math.abs(c.halfAxes[6]*d.x)+Math.abs(c.halfAxes[7]*d.y)+Math.abs(c.halfAxes[8]*d.z);if(m<=p+u){e._optimChildrenWithinParent=qm.SKIP_OPTIMIZATION;break}}}return e._optimChildrenWithinParent===qm.USE_OPTIMIZATION};var nY=gVe;var DUi=x(T(),1);function BS(){this._list=new WE,this._sentinel=this._list.add(),this._trimTiles=!1}BS.prototype.reset=function(){this._list.splice(this._list.tail,this._sentinel)};BS.prototype.touch=function(e){let t=e.cacheNode;l(t)&&this._list.splice(this._sentinel,t)};BS.prototype.add=function(e){l(e.cacheNode)||(e.cacheNode=this._list.add(e))};BS.prototype.unloadTile=function(e,t,n){let i=t.cacheNode;l(i)&&(this._list.remove(i),t.cacheNode=void 0,n(e,t))};BS.prototype.unloadTiles=function(e,t){let n=this._trimTiles;this._trimTiles=!1;let i=this._list,o=this._sentinel,r=i.head;for(;r!==o&&(e.totalMemoryUsageInBytes>e.cacheBytes||n);){let s=r.item;r=r.next,this.unloadTile(e,s,t)}};BS.prototype.trim=function(){this._trimTiles=!0};var iY=BS;var JUi=x(T(),1);function PB(e){this.tilePropertyName=e,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE,this._previousMinimum=Number.MAX_VALUE,this._previousMaximum=-Number.MAX_VALUE,this._referenceMinimum={},this._referenceMaximum={}}function ree(e,t){let n;return t==="_loadTimestamp"?n=Q.toDate(e).getTime():n=e,n}PB.prototype.setReferenceMinimumMaximum=function(e,t,n){this._referenceMinimum[n]=ree(e,n),this._referenceMaximum[n]=ree(t,n)};function Nbt(e,t){let n=e.tilePropertyName;if(l(n)){let i=ree(t[n],n);return l(i)?(e._maximum=Math.max(i,e._maximum),e._minimum=Math.min(i,e._minimum),i):(e.tilePropertyName=void 0,i)}}var oee=[new U(.1,.1,.1,1),new U(.153,.278,.878,1),new U(.827,.231,.49,1),new U(.827,.188,.22,1),new U(1,.592,.259,1),new U(1,.843,0,1)];PB.prototype.colorize=function(e,t){let n=this.tilePropertyName;if(!l(n)||!e.contentAvailable||e._selectedFrame!==t.frameNumber)return;let i=Nbt(this,e),o=this._previousMinimum,r=this._previousMaximum;if(o===Number.MAX_VALUE||r===-Number.MAX_VALUE)return;let s=r-o+L.EPSILON7,c=L.clamp(i-o,0,s)/s,d=oee.length-1,u=c*d,m=Math.floor(u),p=Math.ceil(u),b=u-m,f=oee[m],y=oee[p],_=U.clone(U.WHITE);_.red=L.lerp(f.red,y.red,b),_.green=L.lerp(f.green,y.green,b),_.blue=L.lerp(f.blue,y.blue,b),e._debugColor=_};PB.prototype.resetMinimumMaximum=function(){let e=this.tilePropertyName;if(l(e)){let t=this._referenceMinimum[e],n=this._referenceMaximum[e],i=l(t)&&l(n);this._previousMinimum=i?t:this._minimum,this._previousMaximum=i?n:this._maximum,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE}};var oY=PB;var $Ui=x(T(),1);function uR(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfPendingRequests=0,this.numberOfTilesProcessing=0,this.numberOfTilesWithContentReady=0,this.numberOfTilesTotal=0,this.numberOfLoadedTilesTotal=0,this.numberOfFeaturesSelected=0,this.numberOfFeaturesLoaded=0,this.numberOfPointsSelected=0,this.numberOfPointsLoaded=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0,this.geometryByteLength=0,this.texturesByteLength=0,this.texturesReferenceCounterById={},this.batchTableByteLength=0}uR.prototype.clear=function(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfFeaturesSelected=0,this.numberOfPointsSelected=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0};uR.prototype.incrementSelectionCounts=function(e){this.numberOfFeaturesSelected+=e.featuresLength,this.numberOfPointsSelected+=e.pointsLength,this.numberOfTrianglesSelected+=e.trianglesLength;let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)this.incrementSelectionCounts(t[i])}};uR.prototype.incrementLoadCounts=function(e){if(this.numberOfFeaturesLoaded+=e.featuresLength,this.numberOfPointsLoaded+=e.pointsLength,this.geometryByteLength+=e.geometryByteLength,this.batchTableByteLength+=e.batchTableByteLength,!(e instanceof Iu))this.texturesByteLength+=e.texturesByteLength;else{let n=e.getTextureIds();for(let i of n){let o=this.texturesReferenceCounterById[i]??0;if(o===0){let r=e.getTextureByteLengthById(i);this.texturesByteLength+=r}this.texturesReferenceCounterById[i]=o+1}}let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)this.incrementLoadCounts(t[i])}};uR.prototype.decrementLoadCounts=function(e){if(this.numberOfFeaturesLoaded-=e.featuresLength,this.numberOfPointsLoaded-=e.pointsLength,this.geometryByteLength-=e.geometryByteLength,this.batchTableByteLength-=e.batchTableByteLength,!(e instanceof Iu))this.texturesByteLength-=e.texturesByteLength;else{let n=e.getTextureIds();for(let i of n){let o=this.texturesReferenceCounterById[i];if(o===1){delete this.texturesReferenceCounterById[i];let r=e.getTextureByteLengthById(i);this.texturesByteLength-=r}else this.texturesReferenceCounterById[i]=o-1}}let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)this.decrementLoadCounts(t[i])}};uR.clone=function(e,t){t.selected=e.selected,t.visited=e.visited,t.numberOfCommands=e.numberOfCommands,t.numberOfAttemptedRequests=e.numberOfAttemptedRequests,t.numberOfPendingRequests=e.numberOfPendingRequests,t.numberOfTilesProcessing=e.numberOfTilesProcessing,t.numberOfTilesWithContentReady=e.numberOfTilesWithContentReady,t.numberOfTilesTotal=e.numberOfTilesTotal,t.numberOfFeaturesSelected=e.numberOfFeaturesSelected,t.numberOfFeaturesLoaded=e.numberOfFeaturesLoaded,t.numberOfPointsSelected=e.numberOfPointsSelected,t.numberOfPointsLoaded=e.numberOfPointsLoaded,t.numberOfTrianglesSelected=e.numberOfTrianglesSelected,t.numberOfTilesStyled=e.numberOfTilesStyled,t.numberOfFeaturesStyled=e.numberOfFeaturesStyled,t.numberOfTilesCulledWithChildrenUnion=e.numberOfTilesCulledWithChildrenUnion,t.geometryByteLength=e.geometryByteLength,t.texturesByteLength=e.texturesByteLength,t.texturesReferenceCounterById={...e.texturesReferenceCounterById},t.batchTableByteLength=e.batchTableByteLength};var Ef=uR;var n5i=x(T(),1);function rY(){this._style=void 0,this._styleDirty=!1,this._lastStyleTime=0}Object.defineProperties(rY.prototype,{style:{get:function(){return this._style},set:function(e){e!==this._style&&(this._style=e,this._styleDirty=!0)}}});rY.prototype.makeDirty=function(){this._styleDirty=!0};rY.prototype.resetDirty=function(){this._styleDirty=!1};rY.prototype.applyStyle=function(e){if(!l(e.root)||l(this._style)&&!this._style._ready)return;let t=this._styleDirty;t&&++this._lastStyleTime;let n=this._lastStyleTime,i=e._statistics,o=t?e._selectedTiles:e._selectedTilesToStyle,r=o.length;for(let s=0;s<r;++s){let a=o[s];if(a.lastStyleTime!==n){let c=a.content;a.lastStyleTime=n,c.applyStyle(this._style),i.numberOfFeaturesStyled+=c.featuresLength,++i.numberOfTilesStyled}}};var sY=rY;var p5i=x(T(),1);var l5i=x(T(),1);function mg(){}mg.selectTiles=function(e,t){ge.throwInstantiationError()};mg.sortChildrenByDistanceToCamera=function(e,t){return t._distanceToCamera===0&&e._distanceToCamera===0?t._centerZDepth-e._centerZDepth:t._distanceToCamera-e._distanceToCamera};mg.canTraverse=function(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:e._screenSpaceError>e.tileset.memoryAdjustedScreenSpaceError};mg.selectTile=function(e,t){if(e.contentVisibility(t)===jt.OUTSIDE)return;e._wasSelectedLastFrame=!0;let{content:n,tileset:i}=e;n.featurePropertiesDirty?(n.featurePropertiesDirty=!1,e.lastStyleTime=0,i._selectedTilesToStyle.push(e)):e._selectedFrame<t.frameNumber-1&&(i._selectedTilesToStyle.push(e),e._wasSelectedLastFrame=!1),e._selectedFrame=t.frameNumber,i._selectedTiles.push(e)};mg.visitTile=function(e,t){++e.tileset._statistics.visited,e._visitedFrame=t.frameNumber};mg.touchTile=function(e,t){e._touchedFrame!==t.frameNumber&&(e.tileset._cache.touch(e),e._touchedFrame=t.frameNumber)};mg.loadTile=function(e,t){let{tileset:n}=e;if(e._requestedFrame===t.frameNumber||!e.hasUnloadedRenderableContent&&!e.contentExpired||!Ybt(e,t))return;let i=t.camera.timeSinceMoved<n.foveatedTimeDelay;e.priorityDeferred&&i||(e._requestedFrame=t.frameNumber,n._requestedTiles.push(e))};function Ybt(e,t){let{tileset:n}=e;if(!n._cullRequestsWhileMoving)return!0;let{positionWCDeltaMagnitude:i,positionWCDeltaMagnitudeLastFrame:o}=t.camera,r=i!==0?i:o,s=Math.max(e.boundingSphere.radius*2,1);return n.cullRequestsWhileMovingMultiplier*r/s<1}mg.updateTile=function(e,t){yVe(e,t),e.updateExpiration(),e._wasMinPriorityChild=!1,e._priorityHolder=e,kbt(e),e._shouldSelect=!1,e._finalResolution=!0};function yVe(e,t){if(e.updateVisibility(t),!e.isVisible)return;let n=e.children.length>0;if((e.hasTilesetContent||e.hasImplicitContent)&&n){let r=e.children[0];yVe(r,t),e._visible=r._visible;return}if(wbt(e,t)){e._visible=!1;return}let i=e.refine===br.REPLACE,o=e._optimChildrenWithinParent===qm.USE_OPTIMIZATION;if(i&&o&&n&&!Mbt(e,t)){++e.tileset._statistics.numberOfTilesCulledWithChildrenUnion,e._visible=!1;return}}function wbt(e,t){let{parent:n,tileset:i}=e;return!l(n)||n.hasTilesetContent||n.hasImplicitContent||n.refine!==br.ADD?!1:e.getScreenSpaceError(t,!0)<=i.memoryAdjustedScreenSpaceError}function Mbt(e,t){let n=!1,i=e.children;for(let o=0;o<i.length;++o){let r=i[o];r.updateVisibility(t),n=n||r.isVisible}return n}function kbt(e){let t=e.tileset._minimumPriority,n=e.tileset._maximumPriority,i=e._priorityHolder;n.distance=Math.max(i._distanceToCamera,n.distance),t.distance=Math.min(i._distanceToCamera,t.distance),n.depth=Math.max(e._depth,n.depth),t.depth=Math.min(e._depth,t.depth),n.foveatedFactor=Math.max(i._foveatedFactor,n.foveatedFactor),t.foveatedFactor=Math.min(i._foveatedFactor,t.foveatedFactor),n.reverseScreenSpaceError=Math.max(e._priorityReverseScreenSpaceError,n.reverseScreenSpaceError),t.reverseScreenSpaceError=Math.min(e._priorityReverseScreenSpaceError,t.reverseScreenSpaceError)}var ka=mg;function xVe(){}var aY={stack:new Pl,stackMaximumLength:0};xVe.selectTiles=function(e,t){e._selectedTiles.length=0,e._requestedTiles.length=0,e.hasMixedContent=!1;let n=!0,i=e.root;if(i.updateVisibility(t),!i.isVisible)return n;let{touchTile:o,visitTile:r}=ka,s=aY.stack;for(s.push(i);s.length>0;){aY.stackMaximumLength=Math.max(aY.stackMaximumLength,s.length);let a=s.pop(),c=a.refine===br.ADD,d=a.refine===br.REPLACE,u=Ubt(a);u&&Dbt(a,s,t),(c||d&&!u)&&(Obt(e,a),o(a,t),Bbt(a,t),a.hasRenderableContent&&!a.contentAvailable&&(n=!1)),r(a,t)}return aY.stack.trim(aY.stackMaximumLength),n};function Ubt(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:(e.hasEmptyContent,!0)}function Dbt(e,t,n){let{children:i}=e;for(let o=0;o<i.length;++o){let r=i[o];r.updateVisibility(n),r.isVisible&&t.push(r)}}function Obt(e,t){(t.hasUnloadedRenderableContent||t.contentExpired)&&(t._priority=0,e._requestedTiles.push(t))}function Bbt(e,t){e.contentAvailable&&e.contentVisibility(t)!==jt.OUTSIDE&&e.tileset._selectedTiles.push(e)}var cY=xVe;var _5i=x(T(),1);function TVe(){}var lY={stack:new Pl,stackMaximumLength:0},dY={stack:new Pl,stackMaximumLength:0};TVe.selectTiles=function(e,t){if(e._requestedTiles.length=0,e.debugFreezeFrame)return;e._selectedTiles.length=0,e._selectedTilesToStyle.length=0,e._emptyTiles.length=0,e.hasMixedContent=!1;let n=e.root;if(ka.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;Hbt(n,t),lY.stack.trim(lY.stackMaximumLength),dY.stack.trim(dY.stackMaximumLength);let i=e._requestedTiles;for(let o=0;o<i.length;++o)i[o].updatePriority()};function see(e,t){e.contentAvailable&&ka.selectTile(e,t)}function zbt(e,t,n){let i=e.refine===br.REPLACE,{tileset:o,children:r}=e,{updateTile:s,loadTile:a,touchTile:c}=ka;for(let f=0;f<r.length;++f)s(r[f],n);r.sort(ka.sortChildrenByDistanceToCamera);let d=i&&e.hasRenderableContent,u=!0,m=!1,p=-1,b=Number.MAX_VALUE;for(let f=0;f<r.length;++f){let y=r[f];if(y.isVisible?(t.push(y),y._foveatedFactor<b&&(p=f,b=y._foveatedFactor),m=!0):(d||o.loadSiblings)&&(y._foveatedFactor<b&&(p=f,b=y._foveatedFactor),a(y,n),c(y,n)),d){let _;y._inRequestVolume?y.hasRenderableContent?_=y.contentAvailable:_=Kbt(y,n):_=!1,u=u&&_}}if(m||(u=!1),p!==-1&&i){let f=r[p];f._wasMinPriorityChild=!0;let y=(e._wasMinPriorityChild||e===o.root)&&b<=e._priorityHolder._foveatedFactor?e._priorityHolder:e;y._foveatedFactor=Math.min(f._foveatedFactor,y._foveatedFactor),y._distanceToCamera=Math.min(f._distanceToCamera,y._distanceToCamera);for(let _=0;_<r.length;++_)r[_]._priorityHolder=y}return u}function Hbt(e,t){let{tileset:n}=e,{canTraverse:i,loadTile:o,visitTile:r,touchTile:s}=ka,a=lY.stack;for(a.push(e);a.length>0;){lY.stackMaximumLength=Math.max(lY.stackMaximumLength,a.length);let c=a.pop(),d=c.parent,u=!l(d)||d._refines;c._refines=i(c)?zbt(c,a,t)&&u:!1;let m=!c._refines&&u;c.hasRenderableContent?c.refine===br.ADD?(see(c,t),o(c,t)):c.refine===br.REPLACE&&(o(c,t),m&&see(c,t)):(n._emptyTiles.push(c),o(c,t),m&&see(c,t)),r(c,t),s(c,t)}}function Kbt(e,t){let{canTraverse:n,updateTile:i,loadTile:o,touchTile:r}=ka,s=!0,a=dY.stack;for(a.push(e);a.length>0;){dY.stackMaximumLength=Math.max(dY.stackMaximumLength,a.length);let c=a.pop(),d=c.children,u=d.length,m=!c.hasRenderableContent&&n(c);if(!m&&!c.contentAvailable&&(s=!1),i(c,t),c.isVisible||(o(c,t),r(c,t)),m)for(let p=0;p<u;++p){let b=d[p];a.push(b)}}return e.hasEmptyContent||s}var uY=TVe;var G5i=x(T(),1);function _Ve(){}var mY={stack:new Pl,stackMaximumLength:0},hY={stack:new Pl,stackMaximumLength:0},hg={stack:new Pl,stackMaximumLength:0,ancestorStack:new Pl,ancestorStackMaximumLength:0},Jbt=2;_Ve.selectTiles=function(e,t){if(e._requestedTiles.length=0,e.debugFreezeFrame)return;e._selectedTiles.length=0,e._selectedTilesToStyle.length=0,e._emptyTiles.length=0,e.hasMixedContent=!1;let n=e.root;if(ka.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;tgt(n,t),ngt(n,t),mY.stack.trim(mY.stackMaximumLength),hY.stack.trim(hY.stackMaximumLength),hg.stack.trim(hg.stackMaximumLength),hg.ancestorStack.trim(hg.ancestorStackMaximumLength);let i=e._requestedTiles;for(let o=0;o<i.length;++o)i[o].updatePriority()};function jbt(e,t){let{updateTile:n,touchTile:i,selectTile:o}=ka,r=hY.stack;for(r.push(e);r.length>0;){hY.stackMaximumLength=Math.max(hY.stackMaximumLength,r.length);let a=r.pop().children;for(let c=0;c<a.length;++c){let d=a[c];d.isVisible&&(d.contentAvailable?(n(d,t),i(d,t),o(d,t)):d._depth-e._depth<Jbt&&r.push(d))}}}function XB(e,t){let n=e.contentAvailable?e:e._ancestorWithContentAvailable;l(n)?n._shouldSelect=!0:jbt(e,t)}function Qbt(e,t){e._ancestorWithContent=void 0,e._ancestorWithContentAvailable=void 0;let{parent:n}=e;if(!l(n))return;let i=!n.hasUnloadedRenderableContent||n._requestedFrame===t.frameNumber;e._ancestorWithContent=i?n:n._ancestorWithContent,e._ancestorWithContentAvailable=n.contentAvailable?n:n._ancestorWithContentAvailable}function qbt(e,t){let n=t._ancestorWithContent;return!e.immediatelyLoadDesiredLevelOfDetail&&(t._priorityProgressiveResolutionScreenSpaceErrorLeaf||l(n)&&t._screenSpaceError<n._screenSpaceError/e.skipScreenSpaceErrorFactor&&t._depth>n._depth+e.skipLevels)}function $bt(e,t,n){let{tileset:i,children:o}=e,{updateTile:r,loadTile:s,touchTile:a}=ka;for(let d=0;d<o.length;++d)r(o[d],n);o.sort(ka.sortChildrenByDistanceToCamera);let c=!1;for(let d=0;d<o.length;++d){let u=o[d];u.isVisible?(t.push(u),c=!0):i.loadSiblings&&(s(u,n),a(u,n))}return c}function egt(e,t){let{tileset:n}=e;return n.immediatelyLoadDesiredLevelOfDetail?!1:l(e._ancestorWithContent)?e._screenSpaceError===0?e.parent._screenSpaceError>t:e._screenSpaceError>t:!0}function tgt(e,t){let{tileset:n}=e,i=n.immediatelyLoadDesiredLevelOfDetail?Number.MAX_VALUE:Math.max(n.baseScreenSpaceError,n.memoryAdjustedScreenSpaceError),{canTraverse:o,loadTile:r,visitTile:s,touchTile:a}=ka,c=mY.stack;for(c.push(e);c.length>0;){mY.stackMaximumLength=Math.max(mY.stackMaximumLength,c.length);let d=c.pop();Qbt(d,t);let u=d.parent,m=!l(u)||u._refines;d._refines=o(d)?$bt(d,c,t)&&m:!1;let p=!d._refines&&m;d.hasRenderableContent?d.refine===br.ADD?(XB(d,t),r(d,t)):d.refine===br.REPLACE&&(egt(d,i)?(r(d,t),p&&XB(d,t)):p?(XB(d,t),r(d,t)):qbt(n,d)&&r(d,t)):(n._emptyTiles.push(d),r(d,t),p&&XB(d,t)),s(d,t),a(d,t)}}function ngt(e,t){let{selectTile:n,canTraverse:i}=ka,{stack:o,ancestorStack:r}=hg,s;for(o.push(e);o.length>0||r.length>0;){if(hg.stackMaximumLength=Math.max(hg.stackMaximumLength,o.length),hg.ancestorStackMaximumLength=Math.max(hg.ancestorStackMaximumLength,r.length),r.length>0){let d=r.peek();if(d._stackLength===o.length){r.pop(),d!==s&&(d._finalResolution=!1),n(d,t);continue}}let a=o.pop();if(!l(a))continue;let c=i(a);if(a._shouldSelect)if(a.refine===br.ADD)n(a,t);else{if(a._selectionDepth=r.length,a._selectionDepth>0&&(a.tileset.hasMixedContent=!0),s=a,!c){n(a,t);continue}r.push(a),a._stackLength=o.length}if(c){let d=a.children;for(let u=0;u<d.length;++u){let m=d[u];m.isVisible&&o.push(m)}}}}var fY=_Ve;var w5i=x(T(),1);function Sa(){this._layers=[],this.layerAdded=new Se,this.layerRemoved=new Se,this.layerMoved=new Se,this.layerShownOrHidden=new Se}Object.defineProperties(Sa.prototype,{length:{get:function(){return this._layers.length}}});Sa.prototype.add=function(e,t){l(t)?this._layers.splice(t,0,e):(t=this._layers.length,this._layers.push(e)),this._update(),this.layerAdded.raiseEvent(e,t);let i=e.readyEvent.addEventListener(()=>{this.layerShownOrHidden.raiseEvent(e,e._layerIndex,e.show),i()})};Sa.prototype.addImageryProvider=function(e,t){let n=new Ts(e);return this.add(n,t),n};Sa.prototype.remove=function(e,t){t=t??!0;let n=this._layers.indexOf(e);return n!==-1?(this._layers.splice(n,1),this._update(),this.layerRemoved.raiseEvent(e,n),t&&e.destroy(),!0):!1};Sa.prototype.removeAll=function(e){e=e??!0;let t=this._layers;for(let n=0,i=t.length;n<i;n++){let o=t[n];this.layerRemoved.raiseEvent(o,n),e&&o.destroy()}this._layers=[]};Sa.prototype.contains=function(e){return this.indexOf(e)!==-1};Sa.prototype.indexOf=function(e){return this._layers.indexOf(e)};Sa.prototype.get=function(e){return this._layers[e]};function NB(e,t){return e.indexOf(t)}function SVe(e,t,n){let i=e._layers;if(t=L.clamp(t,0,i.length-1),n=L.clamp(n,0,i.length-1),t===n)return;let o=i[t];i[t]=i[n],i[n]=o,e._update(),e.layerMoved.raiseEvent(o,n,t)}Sa.prototype.raise=function(e){let t=NB(this._layers,e);SVe(this,t,t+1)};Sa.prototype.lower=function(e){let t=NB(this._layers,e);SVe(this,t,t-1)};Sa.prototype.raiseToTop=function(e){let t=NB(this._layers,e);t!==this._layers.length-1&&(this._layers.splice(t,1),this._layers.push(e),this._update(),this.layerMoved.raiseEvent(e,this._layers.length-1,t))};Sa.prototype.lowerToBottom=function(e){let t=NB(this._layers,e);t!==0&&(this._layers.splice(t,1),this._layers.splice(0,0,e),this._update(),this.layerMoved.raiseEvent(e,0,t))};var ZVe=new re;function VVe(e,t,n,i){let o=e.globe._surface._tilesToRender,r;for(let a=0;!l(r)&&a<o.length;++a){let c=o[a];re.contains(c.rectangle,t)&&(r=c)}if(!l(r))return;let s=r.data.imagery;for(let a=s.length-1;a>=0;--a){let c=s[a],d=c.readyImagery;if(!l(d)||!d.imageryLayer.ready)continue;let u=d.imageryLayer.imageryProvider;if(n&&!l(u.pickFeatures)||!re.contains(d.rectangle,t))continue;let m=ZVe,p=1/1024;m.west=L.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.x-p),m.east=L.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.z+p),m.south=L.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.y-p),m.north=L.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.w+p),re.contains(m,t)&&i(d)}}Sa.prototype.pickImageryLayers=function(e,t){let n=t.globe.pick(e,t);if(!l(n))return;let i=t.ellipsoid.cartesianToCartographic(n),o=[];if(VVe(t,i,!1,function(r){o.push(r.imageryLayer)}),o.length!==0)return o};var igt=new re,ogt=new re,aee=new M,cee=new M,rgt=new fe,sgt=new fe;function agt(e,t,n,i){let o=n.imageryProvider.tilingScheme,r=o.rectangleToNativeRectangle(e,igt),s=1/1024,a=ogt;a.west=L.lerp(r.west,r.east,t.minX-s),a.east=L.lerp(r.west,r.east,t.maxX+s),a.south=L.lerp(r.south,r.north,t.minY-s),a.north=L.lerp(r.south,r.north,t.maxY+s),l(i)||(i=new re);let c=o.projection;if(c instanceof wi)return i.west=L.toRadians(a.west),i.south=L.toRadians(a.south),i.east=L.toRadians(a.east),i.north=L.toRadians(a.north),i;aee.x=a.west,aee.y=a.south,cee.x=a.east,cee.y=a.north;let d=c.unproject(aee,rgt),u=c.unproject(cee,sgt);return i.west=d.longitude,i.south=d.latitude,i.east=u.longitude,i.north=u.latitude,i}function cgt(e,t,n){let i=e._modelImagery;if(!l(i))return;let o=i._modelPrimitiveImageries;if(l(o))for(let r=0;r<o.length;r++){let s=o[r],a=s._coveragesPerLayer;if(l(a))for(let c=a.length-1;c>=0;--c){let d=a[c];for(let u=0;u<d.length;u++){let m=d[u],p=m.imagery,b=p.imageryLayer,f=b.imageryProvider;if(!l(f.pickFeatures)||!l(p)||p.state!==On.READY||!re.contains(p.rectangle,t))continue;let _=s.mappedPositionsForImageryLayer(b).cartographicBoundingRectangle,S=agt(_,m.textureCoordinateRectangle,b,ZVe);re.contains(S,t)&&n(p)}}}}Sa.prototype.pickImageryLayerFeatures=function(e,t){let n;l(t.globe)&&(n=t.globe.pick(e,t));let i;if(!l(n)){let c=t.pickFromRay(e);if(!l(c)||(n=c.position,!l(n)))return;l(c.object)&&l(c.object.detail)&&(i=c.object.detail.model)}let o=t.ellipsoid.cartesianToCartographic(n),r=[],s=[];function a(c){if(!c.imageryLayer.ready)return;let u=c.imageryLayer.imageryProvider.pickFeatures(c.x,c.y,c.level,o.longitude,o.latitude);l(u)&&(r.push(u),s.push(c.imageryLayer))}if(l(t.globe)&&VVe(t,o,!0,function(c){a(c)}),l(i)&&cgt(i,o,function(c){a(c)}),r.length!==0)return Promise.all(r).then(function(c){let d=[];for(let u=0;u<c.length;++u){let m=c[u],p=s[u];if(l(m)&&m.length>0)for(let b=0;b<m.length;++b){let f=m[b];f.imageryLayer=p,l(f.position)||(f.position=o),d.push(f)}}return d})};Sa.prototype.queueReprojectionCommands=function(e){let t=this._layers;for(let n=0,i=t.length;n<i;++n)t[n].queueReprojectionCommands(e)};Sa.prototype.cancelReprojections=function(){let e=this._layers;for(let t=0,n=e.length;t<n;++t)e[t].cancelReprojections()};Sa.prototype.isDestroyed=function(){return!1};Sa.prototype.destroy=function(){return this.removeAll(!0),me(this)};Sa.prototype._update=function(){let e=!0,t=this._layers,n,i,o,r;for(o=0,r=t.length;o<r;++o)i=t[o],i._layerIndex=o,i.show?(i._isBaseLayer=e,e=!1):i._isBaseLayer=!1,i.show!==i._show&&(l(i._show)&&(l(n)||(n=[]),n.push(i)),i._show=i.show);if(l(n))for(o=0,r=n.length;o<r;++o)i=n[o],this.layerShownOrHidden.raiseEvent(i,i._layerIndex,i.show)};var zS=Sa;function rr(e){e=e??B.EMPTY_OBJECT,this._url=void 0,this._basePath=void 0,this._root=void 0,this._resource=void 0,this._asset=void 0,this._properties=void 0,this._geometricError=void 0,this._scaledGeometricError=void 0,this._extensionsUsed=void 0,this._extensions=void 0,this._modelUpAxis=void 0,this._modelForwardAxis=void 0,this._cache=new iY,this._processingQueue=[],this._selectedTiles=[],this._emptyTiles=[],this._requestedTiles=[],this._selectedTilesToStyle=[],this._loadTimestamp=void 0,this._timeSinceLoad=0,this._updatedVisibilityFrame=0,this._updatedModelMatrixFrame=0,this._modelMatrixChanged=!1,this._previousModelMatrix=void 0,this._extras=void 0,this._credits=void 0,this._showCreditsOnScreen=e.showCreditsOnScreen??!1,this._cullWithChildrenBounds=e.cullWithChildrenBounds??!0,this._allTilesAdditive=!0,this._hasMixedContent=!1,this._stencilClearCommand=void 0,this._backfaceCommands=new Pl,this._maximumScreenSpaceError=e.maximumScreenSpaceError??16,this._memoryAdjustedScreenSpaceError=this._maximumScreenSpaceError,this._cacheBytes=e.cacheBytes??512*1024*1024;let t=e.maximumCacheOverflowBytes??512*1024*1024;this._maximumCacheOverflowBytes=t,this._styleEngine=new sY,this._styleApplied=!1,this._modelMatrix=l(e.modelMatrix)?I.clone(e.modelMatrix):I.clone(I.IDENTITY),this._addHeightCallbacks=[],this._statistics=new Ef,this._statisticsLast=new Ef,this._statisticsPerPass=new Array(or.NUMBER_OF_PASSES);for(let o=0;o<or.NUMBER_OF_PASSES;++o)this._statisticsPerPass[o]=new Ef;this._requestedTilesInFlight=[],this._maximumPriority={foveatedFactor:-Number.MAX_VALUE,depth:-Number.MAX_VALUE,distance:-Number.MAX_VALUE,reverseScreenSpaceError:-Number.MAX_VALUE},this._minimumPriority={foveatedFactor:Number.MAX_VALUE,depth:Number.MAX_VALUE,distance:Number.MAX_VALUE,reverseScreenSpaceError:Number.MAX_VALUE},this._heatmap=new oY(e.debugHeatmapTilePropertyName),this.cullRequestsWhileMoving=e.cullRequestsWhileMoving??!0,this._cullRequestsWhileMoving=!1,this.cullRequestsWhileMovingMultiplier=e.cullRequestsWhileMovingMultiplier??60,this.progressiveResolutionHeightFraction=L.clamp(e.progressiveResolutionHeightFraction??.3,0,.5),this.preferLeaves=e.preferLeaves??!1,this._tilesLoaded=!1,this._initialTilesLoaded=!1,this._tileDebugLabels=void 0,this._classificationType=e.classificationType,this._heightReference=e.heightReference,this._scene=e.scene,this._ellipsoid=e.ellipsoid??ie.WGS84,this._initialClippingPlanesOriginMatrix=I.IDENTITY,this._clippingPlanesOriginMatrix=void 0,this._clippingPlanesOriginMatrixDirty=!0,this._vectorClassificationOnly=e.vectorClassificationOnly??!1,this._vectorKeepDecodedPositions=e.vectorKeepDecodedPositions??!1,this._imageryLayers=new zS(this),this._imageryLayersModificationCounter=0,this._imageryLayersListener=()=>{this._imageryLayersModificationCounter++},this.imageryLayers.layerAdded.addEventListener(this._imageryLayersListener),this.imageryLayers.layerRemoved.addEventListener(this._imageryLayersListener),this.imageryLayers.layerMoved.addEventListener(this._imageryLayersListener),this.imageryLayers.layerShownOrHidden.addEventListener(this._imageryLayersListener),this._asynchronouslyLoadImagery=e.asynchronouslyLoadImagery??!1,this.preloadWhenHidden=e.preloadWhenHidden??!1,this.preloadFlightDestinations=e.preloadFlightDestinations??!0,this._pass=void 0,this.dynamicScreenSpaceError=e.dynamicScreenSpaceError??!0,this.foveatedScreenSpaceError=e.foveatedScreenSpaceError??!0,this._foveatedConeSize=e.foveatedConeSize??.1,this._foveatedMinimumScreenSpaceErrorRelaxation=e.foveatedMinimumScreenSpaceErrorRelaxation??0,this.foveatedInterpolationCallback=e.foveatedInterpolationCallback??L.lerp,this.foveatedTimeDelay=e.foveatedTimeDelay??.2,this.dynamicScreenSpaceErrorDensity=e.dynamicScreenSpaceErrorDensity??2e-4,this.dynamicScreenSpaceErrorFactor=e.dynamicScreenSpaceErrorFactor??24,this.dynamicScreenSpaceErrorHeightFalloff=e.dynamicScreenSpaceErrorHeightFalloff??.25,this._dynamicScreenSpaceErrorComputedDensity=0,this.shadows=e.shadows??Fn.ENABLED,this.show=e.show??!0,this.colorBlendMode=Id.HIGHLIGHT,this.colorBlendAmount=.5,this._pointCloudShading=new kp(e.pointCloudShading),this._pointCloudEyeDomeLighting=new wb,this.loadProgress=new Se,this.allTilesLoaded=new Se,this.initialTilesLoaded=new Se,this.tileLoad=new Se,this.tileUnload=new Se,this.tileFailed=new Se,this.tileVisible=new Se,this.skipLevelOfDetail=e.skipLevelOfDetail??!1,this._disableSkipLevelOfDetail=!1,this._runtimeContentCodec=void 0,this.baseScreenSpaceError=e.baseScreenSpaceError??1024,this.skipScreenSpaceErrorFactor=e.skipScreenSpaceErrorFactor??16,this.skipLevels=e.skipLevels??1,this.immediatelyLoadDesiredLevelOfDetail=e.immediatelyLoadDesiredLevelOfDetail??!1,this.loadSiblings=e.loadSiblings??!1,this._clippingPlanes=void 0,l(e.clippingPlanes)&&gs.setOwner(e.clippingPlanes,this,"_clippingPlanes"),this._clippingPolygons=void 0,l(e.clippingPolygons)&&lf.setOwner(e.clippingPolygons,this,"_clippingPolygons"),l(e.imageBasedLighting)?(this._imageBasedLighting=e.imageBasedLighting,this._shouldDestroyImageBasedLighting=!1):(this._imageBasedLighting=new fS,this._shouldDestroyImageBasedLighting=!0),this._environmentMapManager=new Xb(e.environmentMapOptions),this.lightColor=e.lightColor,this.backFaceCulling=e.backFaceCulling??!0,this._enableShowOutline=e.enableShowOutline??!0,this.showOutline=e.showOutline??!0,this.outlineColor=e.outlineColor??U.BLACK,this.splitDirection=e.splitDirection??Xr.NONE,this.enableCollision=e.enableCollision??!1,this._projectTo2D=e.projectTo2D??!1,this._enablePick=e.enablePick??!1,this.debugFreezeFrame=e.debugFreezeFrame??!1,this.debugColorizeTiles=e.debugColorizeTiles??!1,this._enableDebugWireframe=e.enableDebugWireframe??!1,this.debugWireframe=e.debugWireframe??!1,this.debugWireframe===!0&&this._enableDebugWireframe===!1&>("tileset-debug-wireframe-ignored","enableDebugWireframe must be set to true in the Cesium3DTileset constructor, otherwise debugWireframe will be ignored."),this.edgeDisplayMode=e.edgeDisplayMode??Um.SURFACES_ONLY,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowContentBoundingVolume=e.debugShowContentBoundingVolume??!1,this.debugShowViewerRequestVolume=e.debugShowViewerRequestVolume??!1,this._tileDebugLabels=void 0,this.debugPickedTileLabelOnly=!1,this.debugPickedTile=void 0,this.debugPickPosition=void 0,this.debugShowGeometricError=e.debugShowGeometricError??!1,this.debugShowRenderingStatistics=e.debugShowRenderingStatistics??!1,this.debugShowMemoryUsage=e.debugShowMemoryUsage??!1,this.debugShowUrl=e.debugShowUrl??!1,this.examineVectorLinesFunction=void 0,this._metadataExtension=void 0,this._customShader=e.customShader;let n=e.featureIdLabel??"featureId_0";typeof n=="number"&&(n=`featureId_${n}`),this._featureIdLabel=n;let i=e.instanceFeatureIdLabel??"instanceFeatureId_0";typeof i=="number"&&(i=`instanceFeatureId_${i}`),this._instanceFeatureIdLabel=i}Object.defineProperties(rr.prototype,{isCesium3DTileset:{get:function(){return!0}},asset:{get:function(){return this._asset}},extensions:{get:function(){return this._extensions}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){gs.setOwner(e,this,"_clippingPlanes")}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){lf.setOwner(e,this,"_clippingPolygons")}},imageryLayers:{get:function(){return this._imageryLayers}},imageryLayersModificationCounter:{get:function(){return this._imageryLayersModificationCounter}},asynchronouslyLoadImagery:{get:function(){return this._asynchronouslyLoadImagery}},properties:{get:function(){return this._properties}},tilesLoaded:{get:function(){return this._tilesLoaded}},resource:{get:function(){return this._resource}},basePath:{get:function(){return Ea("Cesium3DTileset.basePath","Cesium3DTileset.basePath has been deprecated. All tiles are relative to the url of the tileset JSON file that contains them. Use the url property instead."),this._basePath}},style:{get:function(){return this._styleEngine.style},set:function(e){this._styleEngine.style=e}},customShader:{get:function(){return this._customShader},set:function(e){this._customShader=e}},hasMixedContent:{get:function(){return this._hasMixedContent},set:function(e){this._hasMixedContent=e}},isSkippingLevelOfDetail:{get:function(){return this.skipLevelOfDetail&&!l(this._classificationType)&&!this._disableSkipLevelOfDetail&&!this._allTilesAdditive}},metadataExtension:{get:function(){return this._metadataExtension}},metadata:{get:function(){if(l(this._metadataExtension))return this._metadataExtension.tileset}},schema:{get:function(){if(l(this._metadataExtension))return this._metadataExtension.schema}},maximumScreenSpaceError:{get:function(){return this._maximumScreenSpaceError},set:function(e){this._maximumScreenSpaceError=e,this._memoryAdjustedScreenSpaceError=e}},cacheBytes:{get:function(){return this._cacheBytes},set:function(e){this._cacheBytes=e}},maximumCacheOverflowBytes:{get:function(){return this._maximumCacheOverflowBytes},set:function(e){this._maximumCacheOverflowBytes=e}},memoryAdjustedScreenSpaceError:{get:function(){return this._memoryAdjustedScreenSpaceError}},pointCloudShading:{get:function(){return this._pointCloudShading},set:function(e){this._pointCloudShading=e}},root:{get:function(){return this._root}},boundingSphere:{get:function(){return this._root.updateTransform(this._modelMatrix),this._root.boundingSphere}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=I.clone(e,this._modelMatrix)}},timeSinceLoad:{get:function(){return this._timeSinceLoad}},totalMemoryUsageInBytes:{get:function(){let e=this._statistics;return e.texturesByteLength+e.geometryByteLength+e.batchTableByteLength}},clippingPlanesOriginMatrix:{get:function(){return l(this._clippingPlanesOriginMatrix)?(this._clippingPlanesOriginMatrixDirty&&(I.multiply(this.root.computedTransform,this._initialClippingPlanesOriginMatrix,this._clippingPlanesOriginMatrix),this._clippingPlanesOriginMatrixDirty=!1),this._clippingPlanesOriginMatrix):I.IDENTITY}},styleEngine:{get:function(){return this._styleEngine}},statistics:{get:function(){return this._statistics}},classificationType:{get:function(){return this._classificationType}},heightReference:{get:function(){return this._heightReference}},scene:{get:function(){return this._scene}},ellipsoid:{get:function(){return this._ellipsoid}},foveatedConeSize:{get:function(){return this._foveatedConeSize},set:function(e){this._foveatedConeSize=e}},foveatedMinimumScreenSpaceErrorRelaxation:{get:function(){return this._foveatedMinimumScreenSpaceErrorRelaxation},set:function(e){this._foveatedMinimumScreenSpaceErrorRelaxation=e}},extras:{get:function(){return this._extras}},imageBasedLighting:{get:function(){return this._imageBasedLighting},set:function(e){e!==this._imageBasedLighting&&(this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=e,this._shouldDestroyImageBasedLighting=!1)}},environmentMapManager:{get:function(){return this._environmentMapManager}},vectorClassificationOnly:{get:function(){return this._vectorClassificationOnly}},vectorKeepDecodedPositions:{get:function(){return this._vectorKeepDecodedPositions}},showCreditsOnScreen:{get:function(){return this._showCreditsOnScreen},set:function(e){this._showCreditsOnScreen=e,vVe(this)}},featureIdLabel:{get:function(){return this._featureIdLabel},set:function(e){typeof e=="number"&&(e=`featureId_${e}`),this._featureIdLabel=e}},instanceFeatureIdLabel:{get:function(){return this._instanceFeatureIdLabel},set:function(e){typeof e=="number"&&(e=`instanceFeatureId_${e}`),this._instanceFeatureIdLabel=e}}});rr.fromIonAssetId=async function(e,t){let n=await ss.fromAssetId(e);return rr.fromUrl(n,t)};rr.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT;let n=ve.createIfNeeded(e),i;n.extension==="json"?i=n.getBaseUri(!0):n.isDataUri&&(i="");let o=await rr.loadJson(n),r=await lgt(n,o),s=new rr(t);s._resource=n,s._url=n.url,s._basePath=i,s._metadataExtension=r,s._geometricError=o.geometricError,s._scaledGeometricError=o.geometricError;let a=o.asset;s._asset=a,s._extras=o.extras,vVe(s);let c=l(o.asset.gltfUpAxis)?Mi.fromName(o.asset.gltfUpAxis):Mi.Y,d=t.modelUpAxis??c,u=t.modelForwardAxis??Mi.X;s._properties=o.properties,s._extensionsUsed=o.extensionsUsed,s._extensions=o.extensions,s._modelUpAxis=d,s._modelForwardAxis=u,s._root=s.loadTileset(n,o);let p=s._root.createBoundingVolume(o.root.boundingVolume,I.IDENTITY).boundingSphere.center,b=s._ellipsoid.cartesianToCartographic(p);return l(b)&&b.height>Ei._defaultMinTerrainHeight&&(s._initialClippingPlanesOriginMatrix=bt.eastNorthUpToFixedFrame(p)),s._clippingPlanesOriginMatrix=I.clone(s._initialClippingPlanesOriginMatrix),s};rr.loadJson=function(e){return ve.createIfNeeded(e).fetchJson()};rr.prototype.makeStyleDirty=function(){this._styleEngine.makeDirty()};rr.prototype.loadTileset=function(e,t,n){let i=t.asset;if(!l(i))throw new ae("Tileset must have an asset property.");if(i.version!=="0.0"&&i.version!=="1.0"&&i.version!=="1.1")throw new ae("The tileset must be 3D Tiles version 0.0, 1.0, or 1.1");l(t.extensionsRequired)&&rr.checkSupportedExtensions(t.extensionsRequired);let o=this._statistics,r=i.tilesetVersion;l(r)&&(this._basePath+=`?v=${r}`,e=e.clone(),e.setQueryParameters({v:r}));let s=CVe(this,e,t.root,n);l(n)&&(n.children.push(s),s._depth=n._depth+1);let a=[];for(a.push(s);a.length>0;){let c=a.pop();++o.numberOfTilesTotal,this._allTilesAdditive=this._allTilesAdditive&&c.refine===br.ADD;let d=c._header.children;if(l(d))for(let u=0;u<d.length;++u){let m=d[u],p=CVe(this,e,m,c);c.children.push(p),p._depth=c._depth+1,a.push(p)}this._cullWithChildrenBounds&&nY.checkChildrenWithinParent(c)}return s};function CVe(e,t,n,i){if(!(l(n.implicitTiling)||Qi(n,"3DTILES_implicit_tiling")))return new eh(e,t,n,i);let r=e.schema,s=new yp(t,n,r),a=new gp({subdivisionScheme:s.subdivisionScheme,subtreeLevels:s.subtreeLevels,level:0,x:0,y:0,z:0}),c=s.subtreeUriTemplate.getDerivedResource({templateValues:a.getTemplateValues()}).url,u=Je(n,!0);u.contents=[{uri:c}],delete u.content,delete u.extensions;let m=new eh(e,t,u,i);return m.implicitTileset=s,m.implicitCoordinates=a,m}async function lgt(e,t){let n=Qi(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t,i;if(l(n.schemaUri))e=e.getDerivedResource({url:n.schemaUri}),i=Pi.getSchemaLoader({resource:e});else if(l(n.schema))i=Pi.getSchemaLoader({schema:n.schema});else return;await i.load();let o=new OS({schema:i.schema,metadataJson:n});return Pi.unload(i),o}var RVe=new h,dgt=new fe,ugt=new I,mgt=new h,hgt=new h,fgt=new h,pgt=new h;function bgt(e,t){let n,i,o,r,s,a=t.camera,c=e._root,d=c.contentBoundingVolume;if(d instanceof Xu)n=h.normalize(a.positionWC,RVe),i=a.directionWC,o=a.positionCartographic.height,r=d.minimumHeight,s=d.maximumHeight;else{let y=I.inverseTransformation(c.computedTransform,ugt),_=t.mapProjection.ellipsoid,S=d.boundingVolume,Z=I.multiplyByPoint(y,S.center,mgt);if(h.magnitude(Z)>_.minimumRadius){let V=fe.fromCartesian(Z,_,dgt);n=h.normalize(a.positionWC,RVe),i=a.directionWC,o=a.positionCartographic.height,r=0,s=V.height*2}else{let V=I.multiplyByPoint(y,a.positionWC,hgt);if(n=h.UNIT_Z,i=I.multiplyByPointAsVector(y,a.directionWC,fgt),i=h.normalize(i,i),o=V.z,d instanceof kd){let C=q.getColumn(S.halfAxes,2,pgt),G=h.magnitude(C);r=Z.z-G,s=Z.z+G}else if(d instanceof lg){let C=S.radius;r=Z.z-C,s=Z.z+C}}}let u=e.dynamicScreenSpaceErrorHeightFalloff,m=r+(s-r)*u,p=s,b=L.clamp((o-m)/(p-m),0,1),f=1-Math.abs(h.dot(i,n));f=f*(1-b),e._dynamicScreenSpaceErrorComputedDensity=e.dynamicScreenSpaceErrorDensity*f}function ggt(e,t){if(t.hasEmptyContent)return;let{statistics:n}=e,i=t.contentExpired,o=t.requestContent();l(o)&&(o.then(r=>{!l(r)||t.isDestroyed()||e.isDestroyed()||(e._processingQueue.push(t),++n.numberOfTilesProcessing)}).catch(r=>{EVe(r,e,t)}),i&&(t.hasTilesetContent||t.hasImplicitContent?Wgt(e,t):(n.decrementLoadCounts(t.content),--n.numberOfTilesWithContentReady)),e._requestedTilesInFlight.push(t))}function AVe(e,t){return e._priority-t._priority}rr.prototype.postPassesUpdate=function(e){l(this._root)&&(ygt(this,e),Fgt(this,e),this._cache.unloadTiles(this,WVe),this._styleApplied&&this._styleEngine.resetDirty(),this._styleApplied=!1)};rr.prototype.prePassesUpdate=function(e){if(!l(this._root))return;Cgt(this,e);let t=this._clippingPlanes;this._clippingPlanesOriginMatrixDirty=!0,l(t)&&t.enabled&&t.update(e);let n=this._clippingPolygons;l(n)&&n.enabled&&n.update(e),l(this._loadTimestamp)||(this._loadTimestamp=Q.clone(e.time)),this._timeSinceLoad=Math.max(Q.secondsDifference(e.time,this._loadTimestamp)*1e3,0),this.dynamicScreenSpaceError&&bgt(this,e),e.newFrame&&this._cache.reset()};function ygt(e,t){let n=e._requestedTilesInFlight,i=0;for(let o=0;o<n.length;++o){let r=n[o],s=t.frameNumber-r._touchedFrame>=1;if(r._contentState!==ir.LOADING){++i;continue}else if(s){r.cancelRequests(),++i;continue}i>0&&(n[o-i]=r)}n.length-=i}function xgt(e){let t=e._requestedTiles;t.sort(AVe);for(let n=0;n<t.length;++n)ggt(e,t[n])}function EVe(e,t,n){if(t.isDestroyed())return;let i;n.isDestroyed()||(i=n._contentResource.url);let o=l(e.message)?e.message:e.toString();t.tileFailed.numberOfListeners>0?t.tileFailed.raiseEvent({url:i,message:o}):(console.log(`A 3D tile failed to load: ${i}`),console.log(`Error: ${o}`),console.log(e.stack))}function Tgt(e){let t=e._processingQueue,n=0;for(let i=0;i<t.length;++i){let o=t[i];if(o.isDestroyed()||o._contentState!==ir.PROCESSING){++n;continue}n>0&&(t[i-n]=o)}t.length-=n}var _gt=new fe,Sgt=new fe,Zgt=new h;function Vgt(e,t,n){if(!e.enableCollision||!e.show)return;let i=e._addHeightCallbacks,o=t.boundingSphere;for(let r of i){if(r.invoked||t._wasSelectedLastFrame)continue;let s=r.ellipsoid,a=fe.clone(r.positionCartographic,_gt),c=fe.fromCartesian(o.center,s,Sgt);l(c)&&(a.height=c.height);let d=fe.toCartesian(a,s,Zgt);h.distance(d,o.center)<=o.radius&&(r.invoked=!0,n.afterRender.push(()=>{l(r.callback)&&r.callback(),r.invoked=!1}))}}function Cgt(e,t){Tgt(e);let n=e._processingQueue,{cacheBytes:i,maximumCacheOverflowBytes:o,statistics:r}=e,s=i+o,a=!1;for(let c=0;c<n.length;++c){if(e.totalMemoryUsageInBytes>s){a=!0;break}let d=n[c];try{d.process(e,t),d.contentReady&&(--r.numberOfTilesProcessing,e.tileLoad.raiseEvent(d))}catch(u){--r.numberOfTilesProcessing,EVe(u,e,d)}}e.totalMemoryUsageInBytes<i?Ggt(e):a&&n.length>0&&Rgt(e)}function Rgt(e){e._memoryAdjustedScreenSpaceError*=1.02;let t=e._processingQueue;for(let n=0;n<t.length;++n)t[n].updatePriority();t.sort(AVe)}function Ggt(e){e._memoryAdjustedScreenSpaceError=Math.max(e.memoryAdjustedScreenSpaceError/1.02,e.maximumScreenSpaceError)}var YB=new h,Agt={maximumFractionDigits:3};function GVe(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,Agt):Math.round(t).toLocaleString()}function lee(e){let{halfAxes:t,radius:n,center:i}=e.boundingVolume.boundingVolume,o=h.clone(i,YB);if(l(t))o.x+=.75*(t[0]+t[3]+t[6]),o.y+=.75*(t[1]+t[4]+t[7]),o.z+=.75*(t[2]+t[5]+t[8]);else if(l(n)){let r=h.normalize(i,YB);r=h.multiplyByScalar(r,.75*n,YB),o=h.add(r,i,YB)}return o}function dee(e,t,n){let i="",o=0;if(t.debugShowGeometricError&&(i+=` Geometric error: ${e.geometricError}`,o++),t.debugShowRenderingStatistics&&(i+=` Commands: ${e.commandsLength}`,o++,e.content.pointsLength>0&&(i+=` Points: ${e.content.pointsLength}`,o++),e.content.trianglesLength>0&&(i+=` Triangles: ${e.content.trianglesLength}`,o++),i+=` Features: ${e.content.featuresLength}`,o++),t.debugShowMemoryUsage&&(i+=` Texture Memory: ${GVe(e.content.texturesByteLength)}`,i+=` Geometry Memory: ${GVe(e.content.geometryByteLength)}`,o+=2),t.debugShowUrl)if(e.hasMultipleContents){i+=` Urls:`;let s=e.content.innerContentUrls;for(let a=0;a<s.length;a++)i+=` - ${s[a]}`;o+=s.length}else i+=` Url: ${e._contentHeader.uri}`,o++;let r={text:i.substring(1),position:n,font:`${19-o}px sans-serif`,showBackground:!0,disableDepthTestDistance:Number.POSITIVE_INFINITY};return t._tileDebugLabels.add(r)}function Egt(e,t){let n=e._selectedTiles,i=n.length,o=e._emptyTiles,r=o.length;if(e._tileDebugLabels.removeAll(),e.debugPickedTileLabelOnly){if(l(e.debugPickedTile)){let s=l(e.debugPickPosition)?e.debugPickPosition:lee(e.debugPickedTile),a=dee(e.debugPickedTile,e,s);a.pixelOffset=new M(15,-15)}}else{for(let s=0;s<i;++s){let a=n[s];dee(a,e,lee(a))}for(let s=0;s<r;++s){let a=o[s];(a.hasTilesetContent||a.hasImplicitContent)&&dee(a,e,lee(a))}}e._tileDebugLabels.update(t)}function Lgt(e,t,n){e._styleEngine.applyStyle(e),e._styleApplied=!0;let{commandList:i,context:o}=t,r=i.length,s=e._selectedTiles,a=e.isSkippingLevelOfDetail&&e._hasMixedContent&&o.stencilBuffer&&s.length>0;e._backfaceCommands.length=0,a&&(l(e._stencilClearCommand)||(e._stencilClearCommand=new mi({stencil:0,pass:We.CESIUM_3D_TILE,renderState:Oe.fromCache({stencilMask:Kt.SKIP_LOD_MASK})})),i.push(e._stencilClearCommand));let{statistics:c,tileVisible:d}=e,u=n.isRender,m=i.length;for(let f=0;f<s.length;++f){let y=s[f];u&&d.raiseEvent(y),Vgt(e,y,t),y.update(e,t,n),c.incrementSelectionCounts(y.content),++c.selected}let p=e._emptyTiles;for(let f=0;f<p.length;++f)p[f].update(e,t,n);let b=i.length-m;if(e._backfaceCommands.trim(),a){let f=e._backfaceCommands.values,y=f.length;i.length+=y;for(let _=b-1;_>=0;--_)i[m+y+_]=i[m+_];for(let _=0;_<y;++_)i[m+_]=f[_]}b=i.length-r,c.numberOfCommands=b,u&&(e.pointCloudShading.attenuation&&e.pointCloudShading.eyeDomeLighting&&b>0&&e._pointCloudEyeDomeLighting.update(t,r,e.pointCloudShading,e.boundingSphere),e.debugShowGeometricError||e.debugShowRenderingStatistics||e.debugShowMemoryUsage||e.debugShowUrl?(l(e._tileDebugLabels)||(e._tileDebugLabels=new Yp),Egt(e,t)):e._tileDebugLabels=e._tileDebugLabels&&e._tileDebugLabels.destroy())}var LVe=[];function Wgt(e,t){let n=t,i=LVe;for(i.push(t);i.length>0;){t=i.pop();let o=t.children;for(let r=0;r<o.length;++r)i.push(o[r]);t!==n&&(vgt(e,t),--e._statistics.numberOfTilesTotal)}n.children=[]}function WVe(e,t){e.tileUnload.raiseEvent(t),e._statistics.decrementLoadCounts(t.content),--e._statistics.numberOfTilesWithContentReady,t.unloadContent()}function vgt(e,t){e._cache.unloadTile(e,t,WVe),t.destroy()}rr.prototype.trimLoadedTiles=function(){this._cache.trim()};function Fgt(e,t){let n=e._statistics,i=e._statisticsLast,o=n.numberOfPendingRequests,r=n.numberOfTilesProcessing,s=i.numberOfPendingRequests,a=i.numberOfTilesProcessing;Ef.clone(n,i);let c=o!==s||r!==a;c&&t.afterRender.push(function(){return e.loadProgress.raiseEvent(o,r),!0}),e._tilesLoaded=n.numberOfPendingRequests===0&&n.numberOfTilesProcessing===0&&n.numberOfAttemptedRequests===0,c&&e._tilesLoaded&&(t.afterRender.push(function(){return e.allTilesLoaded.raiseEvent(),!0}),e._initialTilesLoaded||(e._initialTilesLoaded=!0,t.afterRender.push(function(){return e.initialTilesLoaded.raiseEvent(),!0})))}function Igt(e){e._heatmap.resetMinimumMaximum(),e._minimumPriority.depth=Number.MAX_VALUE,e._maximumPriority.depth=-Number.MAX_VALUE,e._minimumPriority.foveatedFactor=Number.MAX_VALUE,e._maximumPriority.foveatedFactor=-Number.MAX_VALUE,e._minimumPriority.distance=Number.MAX_VALUE,e._maximumPriority.distance=-Number.MAX_VALUE,e._minimumPriority.reverseScreenSpaceError=Number.MAX_VALUE,e._maximumPriority.reverseScreenSpaceError=-Number.MAX_VALUE}function Pgt(e,t){t.frameNumber===e._updatedModelMatrixFrame&&l(e._previousModelMatrix)||(e._updatedModelMatrixFrame=t.frameNumber,e._modelMatrixChanged=!I.equals(e.modelMatrix,e._previousModelMatrix),e._modelMatrixChanged&&(e._previousModelMatrix=I.clone(e.modelMatrix,e._previousModelMatrix)))}function Xgt(e,t,n,i){if(t.mode===se.MORPHING||!l(e._root))return!1;let o=e._statistics;o.clear(),++e._updatedVisibilityFrame,Igt(e),Pgt(e,t),e._cullRequestsWhileMoving=e.cullRequestsWhileMoving&&!e._modelMatrixChanged;let r=e.getTraversal(i).selectTiles(e,t);if(i.requestTiles&&xgt(e),Lgt(e,t,i),Ef.clone(o,n),i.isRender){let s=e._credits;if(l(s)&&o.selected!==0)for(let a=0;a<s.length;++a){let c=s[a];t.creditDisplay.addCreditToNextFrame(c)}}return r}function vVe(e){let t=e._credits;l(t)||(t=[]),t.length=0,l(e.resource.credits)&&e.resource.credits.forEach(i=>{t.push(At.clone(i))});let n=e.asset.extras;if(l(n)&&l(n.cesium)&&l(n.cesium.credits)){let i=n.cesium.credits;for(let o=0;o<i.length;++o){let r=i[o];t.push(new At(r.html))}}t.forEach(i=>i.showOnScreen=i.showOnScreen||e._showCreditsOnScreen),e._credits=t}rr.prototype.getTraversal=function(e){let{pass:t}=e;return t===or.MOST_DETAILED_PRELOAD||t===or.MOST_DETAILED_PICK?cY:this.isSkippingLevelOfDetail?fY:uY};rr.prototype.update=function(e){this.updateForPass(e,e.tilesetPassState)};rr.prototype.updateForPass=function(e,t){this.imageryLayers._update();let n=t.pass;if(n===or.PRELOAD&&(!this.preloadWhenHidden||this.show)||n===or.PRELOAD_FLIGHT&&(!this.preloadFlightDestinations||!this.show&&!this.preloadWhenHidden)||n===or.REQUEST_RENDER_MODE_DEFER_CHECK&&(!this._cullRequestsWhileMoving&&this.foveatedTimeDelay<=0||!this.show))return;let i=e.commandList,o=e.camera,r=e.cullingVolume;t.ready=!1;let s=or.getPassOptions(n),a=s.ignoreCommands,c=t.commandList??i,d=c.length;if(e.commandList=c,e.camera=t.camera??o,e.cullingVolume=t.cullingVolume??r,s.isRender){let p=this._environmentMapManager;l(this._root)&&(p.position=this.boundingSphere.center),p.update(e)}let u=this._clippingPolygons;l(u)&&u.enabled&&u.queueCommands(e);let m=this._statisticsPerPass[n];(this.show||a)&&(this._pass=n,t.ready=Xgt(this,e,m,s)),a&&(c.length=d),e.commandList=i,e.camera=o,e.cullingVolume=r};rr.prototype.hasExtension=function(e){return l(this._extensionsUsed)?this._extensionsUsed.indexOf(e)>-1:!1};rr.prototype.isDestroyed=function(){return!1};rr.prototype.destroy=function(){if(this._tileDebugLabels=this._tileDebugLabels&&this._tileDebugLabels.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._clippingPolygons=this._clippingPolygons&&this._clippingPolygons.destroy(),l(this._root)){let e=LVe;for(e.push(this._root);e.length>0;){let t=e.pop();t.destroy();let n=t.children;for(let i=0;i<n.length;++i)e.push(n[i])}}return this._root=void 0,this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=void 0,this._environmentMapManager.isDestroyed()||this._environmentMapManager.destroy(),this._environmentMapManager=void 0,this._imageryLayers.isDestroyed()||(this.imageryLayers.layerAdded.removeEventListener(this._imageryLayersListener),this.imageryLayers.layerRemoved.removeEventListener(this._imageryLayersListener),this.imageryLayers.layerMoved.removeEventListener(this._imageryLayersListener),this.imageryLayers.layerShownOrHidden.removeEventListener(this._imageryLayersListener),this._imageryLayers.destroy()),this._imageryLayers=void 0,me(this)};rr.supportedExtensions={"3DTILES_metadata":!0,"3DTILES_implicit_tiling":!0,"3DTILES_content_gltf":!0,"3DTILES_content_gltf_vector":!0,"3DTILES_multiple_contents":!0,"3DTILES_bounding_volume_S2":!0,"3DTILES_batch_table_hierarchy":!0,"3DTILES_draco_point_compression":!0,MAXAR_content_geojson:!0};rr.checkSupportedExtensions=function(e){for(let t=0;t<e.length;t++)if(!rr.supportedExtensions[e[t]])throw new ae(`Unsupported 3D Tiles Extension: ${e[t]}`)};var Ngt=new fn,Ygt=new h,wgt=new fe;rr.prototype.getHeight=function(e,t){let n=t.ellipsoid;l(n)||(n=ie.WGS84);let i=Ngt,o=n.cartographicToCartesian(e,i.direction);h.normalize(i.direction,i.direction),i.direction=h.normalize(o,i.direction),i.direction=h.negate(o,i.direction),i.origin=h.multiplyByScalar(i.direction,-2*n.maximumRadius,i.origin);let r=this.pick(i,t.frameState,Ygt);if(l(r))return n.cartesianToCartographic(r,wgt)?.height};rr.prototype.updateHeight=function(e,t,n){n=n??ie.WGS84;let i={positionCartographic:e,ellipsoid:n,callback:t,invoked:!1},o=()=>{let r=this._addHeightCallbacks,s=r.length;for(let a=0;a<s;++a)if(r[a]===i){r.splice(a,1);break}i.callback&&(i.callback=void 0)};return this._addHeightCallbacks.push(i),o};var Mgt=new Dr,kgt=new h;rr.prototype.pick=function(e,t,n){if(!t.context.webgl2&&!this._enablePick)return;let i=this._selectedTiles,o=i.length,r=[];for(let c=0;c<o;++c){let d=i[c],u=di.raySphere(e,d.contentBoundingVolume.boundingSphere,Mgt);!l(u)||!l(d.content)||r.push(d)}let s=r.length;r.sort((c,d)=>{let u=le.distanceSquaredTo(c.contentBoundingVolume.boundingSphere,e.origin),m=le.distanceSquaredTo(d.contentBoundingVolume.boundingSphere,e.origin);return u-m});let a;for(let c=0;c<s;++c){let u=r[c].content.pick(e,t,kgt);if(l(u))return a=h.clone(u,n),a}};rr.prototype.isGltfExtensionUsed=function(e){if(this.hasExtension("3DTILES_content_gltf")){if(!l(this.extensions))return!1;let t=this.extensions["3DTILES_content_gltf"]?.extensionsUsed;return l(t)?t.indexOf(e)>-1:!1}return!1};rr.prototype.isGltfExtensionRequired=function(e){if(this.isGltfExtensionUsed(e)){let t=this.extensions["3DTILES_content_gltf"].extensionsRequired;return l(t)?t.indexOf(e)>-1:!1}return!1};var wr=rr;var Ugt=new I;function Ax(e,t){t.collectionChanged.addEventListener(Ax.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._tilesetHash={},this._entitiesToVisualize=new Mt,this._onCollectionChanged(t,t.values,[],[])}Ax.prototype.update=function(e){let t=this._entitiesToVisualize.values,n=this._tilesetHash,i=this._primitives;for(let o=0,r=t.length;o<r;o++){let s=t[o],a=s._tileset,c,d=n[s.id],u=s.isShowing&&s.isAvailable(e)&&j.getValueOrDefault(a._show,e,!0),m;u&&(m=s.computeModelMatrix(e,Ugt),c=ve.createIfNeeded(j.getValueOrUndefined(a._uri,e)));let p=l(d)?d.tilesetPrimitive:void 0;if(!u){l(p)&&(p.show=!1);continue}(!l(d)||c.url!==d.url)&&(l(p)&&i.removeAndDestroy(p),delete n[s.id],Dgt(c,n,s,i)),l(p)&&(p.show=!0,l(m)&&(p.modelMatrix=m),p.maximumScreenSpaceError=j.getValueOrDefault(a.maximumScreenSpaceError,e,p.maximumScreenSpaceError))}return!0};Ax.prototype.isDestroyed=function(){return!1};Ax.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Ax.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._tilesetHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)uee(this,e[i],t,n);return me(this)};Ax.prototype.getBoundingSphere=function(e,t){let n=this._tilesetHash[e.id];if(!l(n)||n.loadFail)return Lt.FAILED;let i=n.tilesetPrimitive;return l(i)?i.show?(le.clone(i.boundingSphere,t),Lt.DONE):Lt.FAILED:Lt.PENDING};Ax.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._entitiesToVisualize,a=this._tilesetHash,c=this._primitives;for(o=t.length-1;o>-1;o--)r=t[o],l(r._tileset)&&s.set(r.id,r);for(o=i.length-1;o>-1;o--)r=i[o],l(r._tileset)?s.set(r.id,r):(uee(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],uee(this,r,a,c),s.remove(r.id)};function uee(e,t,n,i){let o=n[t.id];l(o)&&(l(o.tilesetPrimitive)&&i.removeAndDestroy(o.tilesetPrimitive),delete n[t.id])}async function Dgt(e,t,n,i){t[n.id]={url:e.url,loadFail:!1};try{let o=await wr.fromUrl(e);if(o.id=n,i.add(o),!l(t[n.id]))return;t[n.id].tilesetPrimitive=o}catch(o){console.error(o),t[n.id].loadFail=!0}}var pY=Ax;var JBi=x(T(),1);var bOi=x(T(),1);function HS(e,t,n){this._callback=void 0,this._isConstant=void 0,this._referenceFrame=n??Ui.FIXED,this._definitionChanged=new Se,this.setCallback(e,t)}Object.defineProperties(HS.prototype,{isConstant:{get:function(){return this._isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var Ogt=new Q;HS.prototype.getValue=function(e,t){return l(e)||(e=Q.now(Ogt)),this.getValueInReferenceFrame(e,Ui.FIXED,t)};HS.prototype.setCallback=function(e,t){let n=this._callback!==e||this._isConstant!==t;this._callback=e,this._isConstant=t,n&&this._definitionChanged.raiseEvent(this)};HS.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._callback(e,n);return Qh.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};HS.prototype.equals=function(e){return this===e||e instanceof HS&&this._callback===e._callback&&this._isConstant===e._isConstant&&this._referenceFrame===e._referenceFrame};var bY=HS;var vOi=x(T(),1);var VOi=x(T(),1);function Bgt(e,t,n,i){function o(){n.raiseEvent(e)}let r=[];t.removeAll();let s=i.length;for(let a=0;a<s;a++){let c=i.get(a);l(c.data)&&r.indexOf(c.data)===-1&&t.add(c.data.definitionChanged,o)}}function KS(){this._eventHelper=new Ir,this._definitionChanged=new Se,this._intervals=new fs,this._intervals.changedEvent.addEventListener(KS.prototype._intervalsChanged,this)}Object.defineProperties(KS.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});var zgt=new Q;KS.prototype.getValue=function(e,t){l(e)||(e=Q.now(zgt));let n=this._intervals.findDataForIntervalContainingDate(e);if(l(n))return n.getValue(e,t)};KS.prototype.equals=function(e){return this===e||e instanceof KS&&this._intervals.equals(e._intervals,j.equals)};KS.prototype._intervalsChanged=function(){Bgt(this,this._eventHelper,this._definitionChanged,this._intervals),this._definitionChanged.raiseEvent(this)};var hl=KS;function Ex(e){this._referenceFrame=e??Ui.FIXED,this._definitionChanged=new Se,this._composite=new hl,this._composite.definitionChanged.addEventListener(Ex.prototype._raiseDefinitionChanged,this)}Object.defineProperties(Ex.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite.intervals}},referenceFrame:{get:function(){return this._referenceFrame},set:function(e){this._referenceFrame=e}}});var Hgt=new Q;Ex.prototype.getValue=function(e,t){return l(e)||(e=Q.now(Hgt)),this.getValueInReferenceFrame(e,Ui.FIXED,t)};Ex.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(i))return i.getValueInReferenceFrame(e,t,n)};Ex.prototype.equals=function(e){return this===e||e instanceof Ex&&this._referenceFrame===e._referenceFrame&&this._composite.equals(e._composite,j.equals)};Ex.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var uc=Ex;var IOi=x(T(),1),FVe={WHOLE:0,PORTIONS:1};Object.freeze(FVe);var jp=FVe;var MOi=x(T(),1);function JS(e){let t=e._targetProperty;if(!l(t)){let n=e._targetEntity;if(!l(n)){if(n=e._targetCollection.getById(e._targetId),!l(n)){e._targetEntity=e._targetProperty=void 0;return}n.definitionChanged.addEventListener(Nu.prototype._onTargetEntityDefinitionChanged,e),e._targetEntity=n}let i=e._targetPropertyNames;t=e._targetEntity;for(let o=0,r=i.length;o<r&&l(t);++o)t=t[i[o]];e._targetProperty=t}return t}function Nu(e,t,n){this._targetCollection=e,this._targetId=t,this._targetPropertyNames=n,this._targetProperty=void 0,this._targetEntity=void 0,this._definitionChanged=new Se,e.collectionChanged.addEventListener(Nu.prototype._onCollectionChanged,this)}Object.defineProperties(Nu.prototype,{isConstant:{get:function(){return j.isConstant(JS(this))}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){let e=JS(this);return l(e)?e.referenceFrame:void 0}},targetId:{get:function(){return this._targetId}},targetCollection:{get:function(){return this._targetCollection}},targetPropertyNames:{get:function(){return this._targetPropertyNames}},resolvedProperty:{get:function(){return JS(this)}}});Nu.fromString=function(e,t){let n,i=[],o=!0,r=!1,s="";for(let a=0;a<t.length;++a){let c=t.charAt(a);r?(s+=c,r=!1):c==="\\"?r=!0:o&&c==="#"?(n=s,o=!1,s=""):!o&&c==="."?(i.push(s),s=""):s+=c}return i.push(s),new Nu(e,n,i)};var Kgt=new Q;Nu.prototype.getValue=function(e,t){let n=JS(this);return l(e)||(e=Q.now(Kgt)),l(n)?n.getValue(e,t):void 0};Nu.prototype.getValueInReferenceFrame=function(e,t,n){let i=JS(this);return l(i)?i.getValueInReferenceFrame(e,t,n):void 0};Nu.prototype.getType=function(e){let t=JS(this);return l(t)?t.getType(e):void 0};Nu.prototype.equals=function(e){if(this===e)return!0;let t=this._targetPropertyNames,n=e._targetPropertyNames;if(this._targetCollection!==e._targetCollection||this._targetId!==e._targetId||t.length!==n.length)return!1;let i=this._targetPropertyNames.length;for(let o=0;o<i;o++)if(t[o]!==n[o])return!1;return!0};Nu.prototype._onTargetEntityDefinitionChanged=function(e,t,n,i){l(this._targetProperty)&&this._targetPropertyNames[0]===t&&(this._targetProperty=void 0,this._definitionChanged.raiseEvent(this))};Nu.prototype._onCollectionChanged=function(e,t,n){let i=this._targetEntity;l(i)&&n.indexOf(i)!==-1?(i.definitionChanged.removeEventListener(Nu.prototype._onTargetEntityDefinitionChanged,this),this._targetEntity=this._targetProperty=void 0):l(i)||(i=JS(this),l(i)&&this._definitionChanged.raiseEvent(this))};var fg=Nu;var oBi=x(T(),1);var KOi=x(T(),1);var IVe={packedLength:1,pack:function(e,t,n){n=n??0,t[n]=e},unpack:function(e,t,n){return t=t??0,e[t]}};function PVe(e,t,n){let i,o=e.length,r=n.length,s=o+r;if(e.length=s,o!==t){let a=o-1;for(i=s-1;i>=t;i--)e[i]=e[a--]}for(i=0;i<r;i++)e[t++]=n[i]}function XVe(e,t){return e instanceof Q?e:typeof e=="string"?Q.fromIso8601(e):Q.addSeconds(t,e,new Q)}var mee=[],hee=[];function wB(e,t,n,i,o){let r=0,s,a,c,d,u,m;for(;r<i.length;){u=XVe(i[r],e),c=_o(t,u,Q.compare);let p=0,b=0;if(c<0){for(c=~c,d=c*o,a=void 0,m=t[c];r<i.length&&(u=XVe(i[r],e),!(l(a)&&Q.compare(a,u)>=0||l(m)&&Q.compare(u,m)>=0));){for(mee[p++]=u,r=r+1,s=0;s<o;s++)hee[b++]=i[r],r=r+1;a=u}p>0&&(hee.length=b,PVe(n,d,hee),mee.length=p,PVe(t,c,mee))}else{for(s=0;s<o;s++)r++,n[c*o+s]=i[r];r++}}}function th(e,t){let n=e;n===Number&&(n=IVe);let i=n.packedLength,o=n.packedInterpolationLength??i,r=0,s;if(l(t)){let a=t.length;s=new Array(a);for(let c=0;c<a;c++){let d=t[c];d===Number&&(d=IVe);let u=d.packedLength;i+=u,o+=d.packedInterpolationLength??u,s[c]=d}r=a}this._type=e,this._innerType=n,this._interpolationDegree=1,this._interpolationAlgorithm=a_,this._numberOfPoints=0,this._times=[],this._values=[],this._xTable=[],this._yTable=[],this._packedLength=i,this._packedInterpolationLength=o,this._updateTableLength=!0,this._interpolationResult=new Array(o),this._definitionChanged=new Se,this._derivativeTypes=t,this._innerDerivativeTypes=s,this._inputOrder=r,this._forwardExtrapolationType=uu.NONE,this._forwardExtrapolationDuration=0,this._backwardExtrapolationType=uu.NONE,this._backwardExtrapolationDuration=0}Object.defineProperties(th.prototype,{isConstant:{get:function(){return this._values.length===0}},definitionChanged:{get:function(){return this._definitionChanged}},type:{get:function(){return this._type}},derivativeTypes:{get:function(){return this._derivativeTypes}},interpolationDegree:{get:function(){return this._interpolationDegree}},interpolationAlgorithm:{get:function(){return this._interpolationAlgorithm}},forwardExtrapolationType:{get:function(){return this._forwardExtrapolationType},set:function(e){this._forwardExtrapolationType!==e&&(this._forwardExtrapolationType=e,this._definitionChanged.raiseEvent(this))}},forwardExtrapolationDuration:{get:function(){return this._forwardExtrapolationDuration},set:function(e){this._forwardExtrapolationDuration!==e&&(this._forwardExtrapolationDuration=e,this._definitionChanged.raiseEvent(this))}},backwardExtrapolationType:{get:function(){return this._backwardExtrapolationType},set:function(e){this._backwardExtrapolationType!==e&&(this._backwardExtrapolationType=e,this._definitionChanged.raiseEvent(this))}},backwardExtrapolationDuration:{get:function(){return this._backwardExtrapolationDuration},set:function(e){this._backwardExtrapolationDuration!==e&&(this._backwardExtrapolationDuration=e,this._definitionChanged.raiseEvent(this))}}});var Jgt=new Q;th.prototype.getValue=function(e,t){l(e)||(e=Q.now(Jgt));let n=this._times,i=n.length;if(i===0)return;let o,r=this._innerType,s=this._values,a=_o(n,e,Q.compare);if(a<0){if(a=~a,a===0){let C=n[a];if(o=this._backwardExtrapolationDuration,this._backwardExtrapolationType===uu.NONE||o!==0&&Q.secondsDifference(C,e)>o)return;if(this._backwardExtrapolationType===uu.HOLD)return r.unpack(s,0,t)}if(a>=i){a=i-1;let C=n[a];if(o=this._forwardExtrapolationDuration,this._forwardExtrapolationType===uu.NONE||o!==0&&Q.secondsDifference(e,C)>o)return;if(this._forwardExtrapolationType===uu.HOLD)return a=i-1,r.unpack(s,a*r.packedLength,t)}let c=this._xTable,d=this._yTable,u=this._interpolationAlgorithm,m=this._packedInterpolationLength,p=this._inputOrder;if(this._updateTableLength){this._updateTableLength=!1;let C=Math.min(u.getRequiredDataPoints(this._interpolationDegree,p),i);C!==this._numberOfPoints&&(this._numberOfPoints=C,c.length=C,d.length=C*m)}let b=this._numberOfPoints-1;if(b<1)return;let f=0,y=i-1;if(y-f+1>=b+1){let C=a-(b/2|0)-1;C<f&&(C=f);let G=C+b;G>y&&(G=y,C=G-b,C<f&&(C=f)),f=C,y=G}let S=y-f+1;for(let C=0;C<S;++C)c[C]=Q.secondsDifference(n[f+C],n[y]);if(l(r.convertPackedArrayForInterpolation))r.convertPackedArrayForInterpolation(s,f,y,d);else{let C=0,G=this._packedLength,E=f*G,v=(y+1)*G;for(;E<v;)d[C]=s[E],E++,C++}let Z=Q.secondsDifference(e,n[y]),V;if(p===0||!l(u.interpolate))V=u.interpolateOrderZero(Z,c,d,m,this._interpolationResult);else{let C=Math.floor(m/(p+1));V=u.interpolate(Z,c,d,C,p,p,this._interpolationResult)}return l(r.unpackInterpolationResult)?r.unpackInterpolationResult(V,s,f,y,t):r.unpack(V,0,t)}return r.unpack(s,a*this._packedLength,t)};th.prototype.setInterpolationOptions=function(e){if(!l(e))return;let t=!1,n=e.interpolationAlgorithm,i=e.interpolationDegree;l(n)&&this._interpolationAlgorithm!==n&&(this._interpolationAlgorithm=n,t=!0),l(i)&&this._interpolationDegree!==i&&(this._interpolationDegree=i,t=!0),t&&(this._updateTableLength=!0,this._definitionChanged.raiseEvent(this))};th.prototype.addSample=function(e,t,n){let i=this._innerDerivativeTypes,o=l(i),r=this._innerType,s=[];if(s.push(e),r.pack(t,s,s.length),o){let a=i.length;for(let c=0;c<a;c++)i[c].pack(n[c],s,s.length)}wB(void 0,this._times,this._values,s,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};th.prototype.addSamples=function(e,t,n){let i=this._innerDerivativeTypes,o=l(i),r=this._innerType,s=e.length,a=[];for(let c=0;c<s;c++)if(a.push(e[c]),r.pack(t[c],a,a.length),o){let d=n[c],u=i.length;for(let m=0;m<u;m++)i[m].pack(d[m],a,a.length)}wB(void 0,this._times,this._values,a,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};th.prototype.getSample=function(e){let t=this._times,n=t.length;if(l(n))return e<0&&(e+=n),t[e]};th.prototype.addSamplesPackedArray=function(e,t){wB(t,this._times,this._values,e,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};th.prototype.removeSample=function(e){let t=_o(this._times,e,Q.compare);return t<0?!1:(NVe(this,t,1),!0)};function NVe(e,t,n){let i=e._packedLength;e._times.splice(t,n),e._values.splice(t*i,n*i),e._updateTableLength=!0,e._definitionChanged.raiseEvent(e)}th.prototype.removeSamples=function(e){let t=this._times,n=_o(t,e.start,Q.compare);n<0?n=~n:e.isStartIncluded||++n;let i=_o(t,e.stop,Q.compare);i<0?i=~i:e.isStopIncluded&&++i,NVe(this,n,i-n)};th.prototype.equals=function(e){if(this===e)return!0;if(!l(e)||this._type!==e._type||this._interpolationDegree!==e._interpolationDegree||this._interpolationAlgorithm!==e._interpolationAlgorithm)return!1;let t=this._derivativeTypes,n=l(t),i=e._derivativeTypes,o=l(i);if(n!==o)return!1;let r,s;if(n){if(s=t.length,s!==i.length)return!1;for(r=0;r<s;r++)if(t[r]!==i[r])return!1}let a=this._times,c=e._times;if(s=a.length,s!==c.length)return!1;for(r=0;r<s;r++)if(!Q.equals(a[r],c[r]))return!1;let d=this._values,u=e._values;for(s=d.length,r=0;r<s;r++)if(d[r]!==u[r])return!1;return!0};th._mergeNewSamples=wB;var Yu=th;function nh(e,t){t=t??0;let n;if(t>0){n=new Array(t);for(let i=0;i<t;i++)n[i]=h}this._numberOfDerivatives=t,this._property=new Yu(h,n),this._definitionChanged=new Se,this._referenceFrame=e??Ui.FIXED,this._property._definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this)},this)}Object.defineProperties(nh.prototype,{isConstant:{get:function(){return this._property.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}},interpolationDegree:{get:function(){return this._property.interpolationDegree}},interpolationAlgorithm:{get:function(){return this._property.interpolationAlgorithm}},numberOfDerivatives:{get:function(){return this._numberOfDerivatives}},forwardExtrapolationType:{get:function(){return this._property.forwardExtrapolationType},set:function(e){this._property.forwardExtrapolationType=e}},forwardExtrapolationDuration:{get:function(){return this._property.forwardExtrapolationDuration},set:function(e){this._property.forwardExtrapolationDuration=e}},backwardExtrapolationType:{get:function(){return this._property.backwardExtrapolationType},set:function(e){this._property.backwardExtrapolationType=e}},backwardExtrapolationDuration:{get:function(){return this._property.backwardExtrapolationDuration},set:function(e){this._property.backwardExtrapolationDuration=e}}});var jgt=new Q;nh.prototype.getValue=function(e,t){return l(e)||(e=Q.now(jgt)),this.getValueInReferenceFrame(e,Ui.FIXED,t)};nh.prototype.getValueInReferenceFrame=function(e,t,n){if(n=this._property.getValue(e,n),l(n))return Qh.convertToReferenceFrame(e,n,this._referenceFrame,t,n)};nh.prototype.setInterpolationOptions=function(e){this._property.setInterpolationOptions(e)};nh.prototype.addSample=function(e,t,n){let i=this._numberOfDerivatives;this._property.addSample(e,t,n)};nh.prototype.addSamples=function(e,t,n){this._property.addSamples(e,t,n)};nh.prototype.addSamplesPackedArray=function(e,t){this._property.addSamplesPackedArray(e,t)};nh.prototype.removeSample=function(e){return this._property.removeSample(e)};nh.prototype.removeSamples=function(e){this._property.removeSamples(e)};nh.prototype.equals=function(e){return this===e||e instanceof nh&&j.equals(this._property,e._property)&&this._referenceFrame===e._referenceFrame};var mc=nh;var mBi=x(T(),1);function Lx(e){this._definitionChanged=new Se,this._value=void 0,this._removeSubscription=void 0,this.setValue(e)}Object.defineProperties(Lx.prototype,{isConstant:{get:function(){return j.isConstant(this._value)}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return l(this._value)?this._value.referenceFrame:Ui.FIXED}}});var Qgt=new Q;Lx.prototype.getValue=function(e,t){return l(e)||(e=Q.now(Qgt)),this.getValueInReferenceFrame(e,Ui.FIXED,t)};Lx.prototype.setValue=function(e){this._value!==e&&(this._value=e,l(this._removeSubscription)&&(this._removeSubscription(),this._removeSubscription=void 0),l(e)&&(this._removeSubscription=e.definitionChanged.addEventListener(this._raiseDefinitionChanged,this)),this._definitionChanged.raiseEvent(this))};Lx.prototype.getValueInReferenceFrame=function(e,t,n){if(l(this._value))return n=this._value.getValueInReferenceFrame(e,t,n),l(n)?ie.default.scaleToGeodeticSurface(n,n):void 0};Lx.prototype.equals=function(e){return this===e||e instanceof Lx&&this._value===e._value};Lx.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var Qp=Lx;var _Bi=x(T(),1);function Wx(e){this._definitionChanged=new Se,this._intervals=new fs,this._intervals.changedEvent.addEventListener(Wx.prototype._intervalsChanged,this),this._referenceFrame=e??Ui.FIXED}Object.defineProperties(Wx.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}},referenceFrame:{get:function(){return this._referenceFrame}}});var qgt=new Q;Wx.prototype.getValue=function(e,t){return l(e)||(e=Q.now(qgt)),this.getValueInReferenceFrame(e,Ui.FIXED,t)};Wx.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._intervals.findDataForIntervalContainingDate(e);if(l(i))return Qh.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};Wx.prototype.equals=function(e){return this===e||e instanceof Wx&&this._intervals.equals(e._intervals,j.equals)&&this._referenceFrame===e._referenceFrame};Wx.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var pg=Wx;var YVe=new q,wVe=new q,MVe=new q,$gt=new h,kVe=new h,eyt=new h,tyt=new h,MB=new Ye,kB=new I,UB=new q;function yY(e,t,n,i,o){if(!(!l(t)||!l(n))){if(h.subtract(t,n,o),l(i.orientation))i.orientation.getValue(e,MB)&&(Ye.conjugate(MB,MB),q.fromQuaternion(MB,UB),q.multiplyByVector(UB,o,o));else if(l(bee(e,i.position,kB)))I.inverse(kB,kB),I.getRotation(kB,UB),q.multiplyByVector(UB,o,o);else return;return o}}function bee(e,t,n){let i=t.getValue(e,$gt);if(l(i)){let o=Q.addSeconds(e,.01,new Q),r=t.getValue(o,kVe);if(l(r)&&!h.equalsEpsilon(i,r,L.EPSILON16)){let s=bt.computeFixedToIcrfMatrix(e,YVe),a=bt.computeFixedToIcrfMatrix(o,wVe),c;!l(s)||!l(a)?(c=bt.computeTemeToPseudoFixedMatrix(e,MVe),s=q.transpose(c,YVe),a=bt.computeTemeToPseudoFixedMatrix(o,wVe),q.transpose(a,a)):c=q.transpose(s,MVe);let d=eyt;h.normalize(i,d),h.normalize(r,r),q.multiplyByVector(s,d,d),q.multiplyByVector(a,r,r);let u=h.cross(d,r,tyt);if(!h.equalsEpsilon(u,h.ZERO,L.EPSILON16)){let m=h.cross(u,d,kVe);return q.multiplyByVector(c,m,m),q.multiplyByVector(c,u,u),q.multiplyByVector(c,d,d),h.normalize(m,m),h.normalize(u,u),h.normalize(d,d),l(n)||(n=new I),n[0]=m.x,n[1]=m.y,n[2]=m.z,n[3]=0,n[4]=u.x,n[5]=u.y,n[6]=u.z,n[7]=0,n[8]=d.x,n[9]=d.y,n[10]=d.z,n[11]=0,n[12]=i.x,n[13]=i.y,n[14]=i.z,n[15]=1,n}}}}var UVe=60,KVe=1,JVe=new Vn,fee=new Vn,pee=new Vn;function DVe(e){this.entity=e,this.polyline=void 0,this.segmentPolylines=[],this.index=void 0,this.updater=void 0}var DB=new h;function nyt(e,t,n,i,o,r,s,a,c){let d,u,m=!1;r instanceof Jo&&(d=r,u=d.position,r=Ui.FIXED,m=!0);let p=a,b,f;b=e.getValueInReferenceFrame(t,r,c[p]),m?(f=u.getValueInReferenceFrame(t,r,DB),b=yY(t,b,f,d,b),l(b)&&(c[p++]=b)):l(b)&&(c[p++]=b);let y=!l(o)||Q.lessThanOrEquals(o,t)||Q.greaterThanOrEquals(o,n),_=0,S=i.length,Z=i[_],V=n,C=!1,G,E,v;for(;_<S;){if(!y&&Q.greaterThanOrEquals(Z,o)&&(b=e.getValueInReferenceFrame(o,r,c[p]),m?(f=u.getValueInReferenceFrame(o,r,DB),l(b)&&l(f)&&(b=yY(o,b,f,d,b),l(b)&&(c[p++]=b))):l(b)&&(c[p++]=b),y=!0),Q.greaterThan(Z,t)&&Q.lessThan(Z,V)&&!Z.equals(o)&&(b=e.getValueInReferenceFrame(Z,r,c[p]),m?(f=u.getValueInReferenceFrame(Z,r,DB),l(b)&&l(f)&&(b=yY(Z,b,f,d,b),l(b)&&(c[p++]=b))):l(b)&&(c[p++]=b)),_<S-1){if(s>0&&!C){let F=i[_+1],P=Q.secondsDifference(F,Z);C=P>s,C&&(G=Math.ceil(P/s),E=0,v=P/Math.max(G,2),G=Math.max(G-1,1))}if(C&&E<G){Z=Q.addSeconds(Z,v,new Q),E++;continue}}C=!1,_++,Z=i[_]}return b=e.getValueInReferenceFrame(n,r,c[p]),m?(f=u.getValueInReferenceFrame(n,r,DB),l(b)&&l(f)&&(b=yY(n,b,f,d,b),l(b)&&(c[p++]=b))):l(b)&&(c[p++]=b),p}function iyt(e,t,n,i,o,r,s,a){let c,d=0,u=s,m=t,p=!l(i)||Q.lessThanOrEquals(i,t)||Q.greaterThanOrEquals(i,n);for(;Q.lessThan(m,n);)!p&&Q.greaterThanOrEquals(m,i)&&(p=!0,c=e.getValueInReferenceFrame(i,o,a[u]),l(c)&&(a[u]=c,u++)),c=e.getValueInReferenceFrame(m,o,a[u]),l(c)&&(a[u]=c,u++),d++,m=Q.addSeconds(t,r*d,new Q);return c=e.getValueInReferenceFrame(n,o,a[u]),l(c)&&(a[u]=c,u++),u}function oyt(e,t,n,i,o,r,s,a){let c,d=0,u=s,m=t,p=Math.max(r,60),b=!l(i)||Q.lessThanOrEquals(i,t)||Q.greaterThanOrEquals(i,n);for(;Q.lessThan(m,n);)!b&&Q.greaterThanOrEquals(m,i)&&(b=!0,c=e.getValueInReferenceFrame(i,o,a[u]),l(c)&&(a[u]=c,u++)),c=e.getValueInReferenceFrame(m,o,a[u]),l(c)&&(a[u]=c,u++),d++,m=Q.addSeconds(t,p*d,new Q);return c=e.getValueInReferenceFrame(n,o,a[u]),l(c)&&(a[u]=c,u++),u}function ryt(e,t,n,i,o,r,s,a){pee.start=t,pee.stop=n;let c=s,d=e.intervals;for(let u=0;u<d.length;u++){let m=d.get(u);if(!Vn.intersect(m,pee,JVe).isEmpty){let p=m.start;m.isStartIncluded||(m.isStopIncluded?p=m.stop:p=Q.addSeconds(m.start,Q.secondsDifference(m.stop,m.start)/2,new Q));let b=e.getValueInReferenceFrame(p,o,a[c]);l(b)&&(a[c]=b,c++)}}return c}function syt(e,t,n,i,o,r,s,a){let c=e.getValueInReferenceFrame(t,o,a[s]);return l(c)&&(a[s++]=c),s}function ayt(e,t,n,i,o,r,s,a){fee.start=t,fee.stop=n;let c=s,d=e.intervals;for(let u=0;u<d.length;u++){let m=d.get(u);if(!Vn.intersect(m,fee,JVe).isEmpty){let p=m.start,b=m.stop,f=t;Q.greaterThan(p,f)&&(f=p);let y=n;Q.lessThan(b,y)&&(y=b),c=jVe(m.data,f,y,i,o,r,c,a)}}return c}function jVe(e,t,n,i,o,r,s,a){for(;e instanceof fg;)e=e.resolvedProperty;if(e instanceof mc){let c=e._property._times;s=nyt(e,t,n,c,i,o,r,s,a)}else e instanceof bY?s=iyt(e,t,n,i,o,r,s,a):e instanceof uc?s=ayt(e,t,n,i,o,r,s,a):e instanceof pg?s=ryt(e,t,n,i,o,r,s,a):e instanceof zl||e instanceof Qp&&j.isConstant(e)?s=syt(e,t,n,i,o,r,s,a):s=oyt(e,t,n,i,o,r,s,a);return s}function gee(e,t,n,i,o,r,s){l(s)||(s=[]);let a=jVe(e,t,n,i,o,r,0,s);return s.length=a,s}var OVe=new q,BVe=new Ye,zVe=new q,gY=new Vn,OB=new Vn,jS=new Vn;function cyt(e){let t=[];if(!l(e))return t;for(let n in e){if(n[0]!=="_"||n==="_definitionChanged"||n.endsWith("Subscription"))continue;let i=e[n];l(i)&&typeof i.getValue=="function"&&!j.isConstant(i)&&t.push(i)}return t}function HVe(e,t,n,i,o,r,s,a,c,d,u){e.sort(Q.compare),e=Wo(e,Q.equalsEpsilon);let m=u;for(let p=0;p<e.length-1;p++){let b=e[p],f=e[p+1];if(!Q.lessThan(b,f))continue;let y=Q.addSeconds(b,Q.secondsDifference(f,b)/2,new Q),_=gee(t,b,f,n,c,a,[]);if(_.length<2)continue;let S=r.segmentPolylines[m];l(S)||(S=s.add(),S.id=o,r.segmentPolylines[m]=S),S.show=!0,S.positions=_,S.material=pr.getValue(y,d,S.material),S.width=j.getValueOrDefault(i._width,n,KVe),m++}return m}function xY(e,t){this._unusedIndexes=[],this._polylineCollection=new Vf,this._scene=e,this._referenceFrame=t,e.primitives.add(this._polylineCollection)}xY.prototype.update=function(e){let t=this._referenceFrame;if(t===Ui.INERTIAL){let n=bt.computeIcrfToFixedMatrix(e,OVe);l(n)||(n=bt.computeTemeToPseudoFixedMatrix(e,OVe)),I.fromRotationTranslation(n,h.ZERO,this._polylineCollection.modelMatrix)}else if(t instanceof Jo){let n=t.position.getValue(e);l(t.orientation)?l(t.orientation.getValue(e,BVe))&&(q.fromQuaternion(BVe,zVe),I.fromRotationTranslation(zVe,n,this._polylineCollection.modelMatrix)):bee(e,t.position,this._polylineCollection.modelMatrix)}};xY.prototype.updateObject=function(e,t){let n=t.entity,i=n._path,o=n._position,r,s,a=i._show,c=t.polyline,d=n.isShowing&&n.isAvailable(e)&&(!l(a)||a.getValue(e));if(d){let f=j.getValueOrUndefined(i._leadTime,e),y=j.getValueOrUndefined(i._trailTime,e),_=n._availability,S=l(_),Z=l(f),V=l(y);if(d=S||Z&&V,d){if(V&&(r=Q.addSeconds(e,-y,new Q)),Z&&(s=Q.addSeconds(e,f,new Q)),S){let C=_.start,G=_.stop;(!V||Q.greaterThan(C,r))&&(r=C),(!Z||Q.lessThan(G,s))&&(s=G)}d=Q.lessThan(r,s)}}if(!d){l(c)&&(this._unusedIndexes.push(t.index),t.polyline=void 0,c.show=!1,t.index=void 0);for(let f=0;f<t.segmentPolylines.length;f++)t.segmentPolylines[f].show=!1;return}if(!l(c)){let f=this._unusedIndexes;if(f.length>0){let _=f.pop();c=this._polylineCollection.get(_),t.index=_}else t.index=this._polylineCollection.length,c=this._polylineCollection.add();c.id=n,t.polyline=c}let u=j.getValueOrDefault(i._resolution,e,UVe),m=gee(o,r,s,e,this._referenceFrame,u,c.positions.slice());if(m.length<2){c.show=!1;for(let f=0;f<t.segmentPolylines.length;f++)t.segmentPolylines[f].show=!1;return}c.show=!0,c.positions=m,c.material=pr.getValue(e,i.material,c.material);let p=j.getValueOrUndefined(i.materialMode,e),b=i.material;if(p===jp.PORTIONS&&!b.isConstant){l(c)&&(c.show=!1);let f=u>0?u:UVe,y=b.intervals,_=0;if(l(y)){gY.start=r,gY.stop=s,gY.isStartIncluded=!0,gY.isStopIncluded=!0;for(let S=0;S<y.length;S++){let Z=y.get(S);if(!Vn.intersect(Z,gY,OB))continue;let V=OB.start,C=OB.stop;if(Q.greaterThanOrEquals(V,C))continue;let G=cyt(Z.data),E=[Q.clone(V),Q.clone(C)];for(let v=0;v<G.length;v++){let F=G[v],P=F.intervals;if(l(P))for(let N=0;N<P.length;N++){let g=P.get(N);Vn.intersect(g,OB,jS)&&(Q.greaterThan(jS.start,V)&&Q.lessThan(jS.start,C)&&E.push(Q.clone(jS.start)),Q.greaterThan(jS.stop,V)&&Q.lessThan(jS.stop,C)&&E.push(Q.clone(jS.stop)))}else if(!j.isConstant(F)){let N=Q.clone(V);for(;Q.lessThan(N,C);)E.push(Q.clone(N)),N=Q.addSeconds(N,f,new Q)}}_=HVe(E,o,e,i,n,t,this._polylineCollection,f,this._referenceFrame,Z.data,_)}}else{let S=[Q.clone(r),Q.clone(s)],Z=Q.addSeconds(r,f,new Q);for(;Q.lessThan(Z,s);)S.push(Q.clone(Z)),Z=Q.addSeconds(Z,f,new Q);_=HVe(S,o,e,i,n,t,this._polylineCollection,f,this._referenceFrame,i.material,_)}for(let S=_;S<t.segmentPolylines.length;S++)l(t.segmentPolylines[S])&&(t.segmentPolylines[S].show=!1)}else for(let f=0;f<t.segmentPolylines.length;f++)t.segmentPolylines[f].show=!1;c.width=j.getValueOrDefault(i._width,e,KVe),c.distanceDisplayCondition=j.getValueOrUndefined(i._distanceDisplayCondition,e,c.distanceDisplayCondition)};xY.prototype.removeObject=function(e){let t=e.polyline;l(t)&&(this._unusedIndexes.push(e.index),e.polyline=void 0,t.show=!1,t.id=void 0,e.index=void 0);for(let n=0;n<e.segmentPolylines.length;n++)e.segmentPolylines[n].show=!1;e.segmentPolylines.length=0};xY.prototype.destroy=function(){return this._scene.primitives.remove(this._polylineCollection),me(this)};function qp(e,t){t.collectionChanged.addEventListener(qp.prototype._onCollectionChanged,this),this._scene=e,this._updaters={},this._entityCollection=t,this._items=new Mt,this._onCollectionChanged(t,t.values,[],[])}qp.prototype.update=function(e){let t=this._updaters;for(let i in t)t.hasOwnProperty(i)&&t[i].update(e);let n=this._items.values;if(n.length===0&&l(this._updaters)&&Object.keys(this._updaters).length>0){for(let i in t)t.hasOwnProperty(i)&&t[i].destroy();this._updaters={}}for(let i=0,o=n.length;i<o;i++){let r=n[i],s=r.entity,a=s._position,c=s._path,d=r.updater,u=!1,m=Ui.FIXED,p=m.toString();if(this._scene.mode===se.SCENE3D){let f=j.getValueOrUndefined(c.relativeTo,e);l(f)?f==="FIXED"?(m=Ui.FIXED,p=m.toString()):f==="INERTIAL"?(m=Ui.INERTIAL,p=m.toString()):(u=!0,m=this._entityCollection.getById(f),p=f):(m=a.referenceFrame,p=m.toString())}let b=this._updaters[p];if(d===b&&l(b)){b.updateObject(e,r);continue}l(d)&&d.removeObject(r),!(u&&!l(m))&&(l(b)||(b=new xY(this._scene,m),b.update(e),this._updaters[p]=b),r.updater=b,l(b)&&b.updateObject(e,r))}return!0};qp.prototype.isDestroyed=function(){return!1};qp.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(qp.prototype._onCollectionChanged,this);let e=this._updaters;for(let t in e)e.hasOwnProperty(t)&&e[t].destroy();return me(this)};qp.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s,a=this._items;for(o=t.length-1;o>-1;o--)r=t[o],l(r._path)&&l(r._position)&&a.set(r.id,new DVe(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._path)&&l(r._position)?a.contains(r.id)||a.set(r.id,new DVe(r)):(s=a.get(r.id),l(s)&&(l(s.updater)&&s.updater.removeObject(s),a.remove(r.id)));for(o=n.length-1;o>-1;o--)r=n[o],s=a.get(r.id),l(s)&&(l(s.updater)&&s.updater.removeObject(s),a.remove(r.id))};qp._subSample=gee;qp._computeVvlhTransform=bee;qp._transformToEntityFrame=yY;var TY=qp;var l3i=x(T(),1);var QVe=U.WHITE,qVe=U.BLACK,$Ve=0,e1e=1,t1e=0,n1e=Xr.NONE,i1e=new U,lyt=new h,o1e=new U,r1e=new Ht,s1e=new Ht,a1e=new Ot;function c1e(e){this.entity=e,this.pointPrimitive=void 0,this.billboard=void 0,this.color=void 0,this.outlineColor=void 0,this.pixelSize=void 0,this.outlineWidth=void 0}function vx(e,t){t.collectionChanged.addEventListener(vx.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Mt,this._onCollectionChanged(t,t.values,[],[])}vx.prototype.update=function(e){let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i<o;i++){let r=t[i],s=r.entity,a=s._point,c=r.pointPrimitive,d=r.billboard,u=j.getValueOrDefault(a._heightReference,e,rt.NONE),m=s.isShowing&&s.isAvailable(e)&&j.getValueOrDefault(a._show,e,!0),p;if(m&&(p=j.getValueOrUndefined(s._position,e,lyt),m=l(p)),!m){_Y(r,s,n);continue}j.isConstant(s._position)||(n._clusterDirty=!0);let b=!1,f=!1;if(u!==rt.NONE&&!l(d)?(l(c)&&(_Y(r,s,n),c=void 0),d=n.getBillboard(s),d.id=s,d.image=void 0,r.billboard=d,b=!0,f=h.equals(d.position,p)&&d.heightReference===u):u===rt.NONE&&!l(c)&&(l(d)&&(_Y(r,s,n),d=void 0),c=n.getPoint(s),c.id=s,r.pointPrimitive=c),l(c))c.show=!0,c.position=p,c.scaleByDistance=j.getValueOrUndefined(a._scaleByDistance,e,r1e),c.translucencyByDistance=j.getValueOrUndefined(a._translucencyByDistance,e,s1e),c.color=j.getValueOrDefault(a._color,e,QVe,i1e),c.outlineColor=j.getValueOrDefault(a._outlineColor,e,qVe,o1e),c.outlineWidth=j.getValueOrDefault(a._outlineWidth,e,$Ve),c.pixelSize=j.getValueOrDefault(a._pixelSize,e,e1e),c.distanceDisplayCondition=j.getValueOrUndefined(a._distanceDisplayCondition,e,a1e),c.disableDepthTestDistance=j.getValueOrDefault(a._disableDepthTestDistance,e,t1e),c.splitDirection=j.getValueOrDefault(a._splitDirection,e,n1e);else if(l(d)){d.show=!0,d.position=p,d.scaleByDistance=j.getValueOrUndefined(a._scaleByDistance,e,r1e),d.translucencyByDistance=j.getValueOrUndefined(a._translucencyByDistance,e,s1e),d.distanceDisplayCondition=j.getValueOrUndefined(a._distanceDisplayCondition,e,a1e),d.disableDepthTestDistance=j.getValueOrDefault(a._disableDepthTestDistance,e,t1e),d.splitDirection=j.getValueOrDefault(a._splitDirection,e,n1e),d.heightReference=u;let y=j.getValueOrDefault(a._color,e,QVe,i1e),_=j.getValueOrDefault(a._outlineColor,e,qVe,o1e),S=Math.round(j.getValueOrDefault(a._outlineWidth,e,$Ve)),Z=Math.max(1,Math.round(j.getValueOrDefault(a._pixelSize,e,e1e)));if(S>0?(d.scale=1,b=b||S!==r.outlineWidth||Z!==r.pixelSize||!U.equals(y,r.color)||!U.equals(_,r.outlineColor)):(d.scale=Z/50,Z=50,b=b||S!==r.outlineWidth||!U.equals(y,r.color)||!U.equals(_,r.outlineColor)),b){r.color=U.clone(y,r.color),r.outlineColor=U.clone(_,r.outlineColor),r.pixelSize=Z,r.outlineWidth=S;let V=y.alpha,C=y.toCssColorString(),G=_.toCssColorString(),E=JSON.stringify([C,Z,G,S]);d.setImage(E,WS(V,C,G,S,Z))}f&&d._updateClamping()}}return!0};vx.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!l(n)||!(l(n.pointPrimitive)||l(n.billboard)))return Lt.FAILED;if(l(n.pointPrimitive))t.center=h.clone(n.pointPrimitive.position,t.center);else{let i=n.billboard;if(!l(i._clampedPosition))return Lt.PENDING;t.center=h.clone(i._clampedPosition,t.center)}return t.radius=0,Lt.DONE};vx.prototype.isDestroyed=function(){return!1};vx.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(vx.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removePoint(e[t]);return me(this)};vx.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._items,a=this._cluster;for(o=t.length-1;o>-1;o--)r=t[o],l(r._point)&&l(r._position)&&s.set(r.id,new c1e(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._point)&&l(r._position)?s.contains(r.id)||s.set(r.id,new c1e(r)):(_Y(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],_Y(s.get(r.id),r,a),s.remove(r.id)};function _Y(e,t,n){if(l(e)){let i=e.pointPrimitive;if(l(i)){e.pointPrimitive=void 0,n.removePoint(t);return}let o=e.billboard;l(o)&&(e.billboard=void 0,n.removeBillboard(t))}}var SY=vx;var yzi=x(T(),1);var w3i=x(T(),1);var dyt=new pi(0),BB={},l1e=new U,uyt=new Jt(U.WHITE),myt=new pi(!0),hyt=new pi(Fn.DISABLED),fyt=new pi(new Ot),pyt=new pi(ei.BOTH);function byt(){this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function gyt(){this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function Lf(e,t){this._entity=e,this._scene=t,this._entitySubscription=e.definitionChanged.addEventListener(Lf.prototype._onEntityPropertyChanged,this),this._fillEnabled=!1,this._dynamic=!1,this._geometryChanged=new Se,this._showProperty=void 0,this._materialProperty=void 0,this._shadowsProperty=void 0,this._distanceDisplayConditionProperty=void 0,this._classificationTypeProperty=void 0,this._depthFailMaterialProperty=void 0,this._geometryOptions=new byt,this._groundGeometryOptions=new gyt,this._id=`polyline-${e.id}`,this._clampToGround=!1,this._supportsPolylinesOnTerrain=Jo.supportsPolylinesOnTerrain(t),this._zIndex=0,this._onEntityPropertyChanged(e,"polyline",e.polyline,void 0)}Object.defineProperties(Lf.prototype,{id:{get:function(){return this._id}},entity:{get:function(){return this._entity}},fillEnabled:{get:function(){return this._fillEnabled}},hasConstantFill:{get:function(){return!this._fillEnabled||!l(this._entity.availability)&&j.isConstant(this._showProperty)}},fillMaterialProperty:{get:function(){return this._materialProperty}},depthFailMaterialProperty:{get:function(){return this._depthFailMaterialProperty}},outlineEnabled:{value:!1},hasConstantOutline:{value:!0},outlineColorProperty:{value:void 0},shadowsProperty:{get:function(){return this._shadowsProperty}},distanceDisplayConditionProperty:{get:function(){return this._distanceDisplayConditionProperty}},classificationTypeProperty:{get:function(){return this._classificationTypeProperty}},isDynamic:{get:function(){return this._dynamic}},isClosed:{value:!1},geometryChanged:{get:function(){return this._geometryChanged}},arcType:{get:function(){return this._arcType}},clampToGround:{get:function(){return this._clampToGround&&this._supportsPolylinesOnTerrain}},zIndex:{get:function(){return this._zIndex}}});Lf.prototype.isOutlineVisible=function(e){return!1};Lf.prototype.isFilled=function(e){let t=this._entity;return(this._fillEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e))??!1};Lf.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new vn(n&&t.isShowing&&this._showProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=$n.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r},a;return this._materialProperty instanceof Jt&&(l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,l1e)),l(a)||(a=U.WHITE),s.color=Qt.fromColor(a)),this.clampToGround?new Nt({id:t,geometry:new r_(this._groundGeometryOptions),attributes:s}):(l(this._depthFailMaterialProperty)&&this._depthFailMaterialProperty instanceof Jt&&(l(this._depthFailMaterialProperty.color)&&(this._depthFailMaterialProperty.color.isConstant||n)&&(a=this._depthFailMaterialProperty.color.getValue(e,l1e)),l(a)||(a=U.WHITE),s.depthFailColor=Qt.fromColor(a)),new Nt({id:t,geometry:new ub(this._geometryOptions),attributes:s}))};Lf.prototype.createOutlineGeometryInstance=function(e){};Lf.prototype.isDestroyed=function(){return!1};Lf.prototype.destroy=function(){this._entitySubscription(),me(this)};Lf.prototype._onEntityPropertyChanged=function(e,t,n,i){if(!(t==="availability"||t==="polyline"))return;let o=this._entity.polyline;if(!l(o)){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let r=o.positions,s=o.show;if(l(s)&&s.isConstant&&!s.getValue(tt.MINIMUM_VALUE)||!l(r)){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let a=o.zIndex,c=o.material??uyt,d=c instanceof Jt;this._materialProperty=c,this._depthFailMaterialProperty=o.depthFailMaterial,this._showProperty=s??myt,this._shadowsProperty=o.shadows??hyt,this._distanceDisplayConditionProperty=o.distanceDisplayCondition??fyt,this._classificationTypeProperty=o.classificationType??pyt,this._fillEnabled=!0,this._zIndex=a??dyt;let u=o.width,m=o.arcType,p=o.clampToGround,b=o.granularity;if(!r.isConstant||!j.isConstant(u)||!j.isConstant(m)||!j.isConstant(b)||!j.isConstant(p)||!j.isConstant(a))this._dynamic||(this._dynamic=!0,this._geometryChanged.raiseEvent(this));else{let f=this._geometryOptions,y=r.getValue(tt.MINIMUM_VALUE,f.positions);if(!l(y)||y.length<2){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let _;d&&(!l(this._depthFailMaterialProperty)||this._depthFailMaterialProperty instanceof Jt)?_=Ws.VERTEX_FORMAT:_=sc.VERTEX_FORMAT,f.vertexFormat=_,f.positions=y,f.width=l(u)?u.getValue(tt.MINIMUM_VALUE):void 0,f.arcType=l(m)?m.getValue(tt.MINIMUM_VALUE):void 0,f.granularity=l(b)?b.getValue(tt.MINIMUM_VALUE):void 0;let S=this._groundGeometryOptions;S.positions=y,S.width=f.width,S.arcType=f.arcType,S.granularity=f.granularity,this._clampToGround=l(p)?p.getValue(tt.MINIMUM_VALUE):!1,!this._clampToGround&&l(a)&>("Entity polylines must have clampToGround: true when using zIndex. zIndex will be ignored."),this._dynamic=!1,this._geometryChanged.raiseEvent(this)}};Lf.prototype.createDynamicUpdater=function(e,t){return new ZY(e,t,this)};var mR={positions:void 0,granularity:void 0,height:void 0,ellipsoid:void 0};function ZY(e,t,n){this._line=void 0,this._primitives=e,this._groundPrimitives=t,this._groundPolylinePrimitive=void 0,this._material=void 0,this._geometryUpdater=n,this._positions=[]}function d1e(e){if(l(e._line))return e._line;let t=e._primitives,n=e._geometryUpdater._scene.id+t._guid,i=BB[n];!l(i)||i.isDestroyed()?(i=new Vf,BB[n]=i,t.add(i)):t.contains(i)||t.add(i);let o=i.add();return o.id=e._geometryUpdater._entity,e._line=o,o}ZY.prototype.update=function(e){let t=this._geometryUpdater,n=t._entity,i=n.polyline,o=i.positions,r=j.getValueOrUndefined(o,e,this._positions);t._clampToGround=j.getValueOrDefault(i._clampToGround,e,!1),t._groundGeometryOptions.positions=r,t._groundGeometryOptions.width=j.getValueOrDefault(i._width,e,1),t._groundGeometryOptions.arcType=j.getValueOrDefault(i._arcType,e,ln.GEODESIC),t._groundGeometryOptions.granularity=j.getValueOrDefault(i._granularity,e,9999);let s=this._groundPrimitives;if(l(this._groundPolylinePrimitive)&&(s.remove(this._groundPolylinePrimitive),this._groundPolylinePrimitive=void 0),t.clampToGround){if(!n.isShowing||!n.isAvailable(e)||!j.getValueOrDefault(i._show,e,!0)||!l(r)||r.length<2)return;let m=t.fillMaterialProperty,p;if(m instanceof Jt)p=new Ws;else{let b=pr.getValue(e,m,this._material);p=new sc({material:b,translucent:b.isTranslucent()}),this._material=b}this._groundPolylinePrimitive=s.add(new zh({geometryInstances:t.createFillGeometryInstance(e),appearance:p,classificationType:t.classificationTypeProperty.getValue(e),asynchronous:!1}),j.getValueOrUndefined(t.zIndex,e)),l(this._line)&&(this._line.show=!1);return}let a=d1e(this);if(!n.isShowing||!n.isAvailable(e)||!j.getValueOrDefault(i._show,e,!0)){a.show=!1;return}if(!l(r)||r.length<2){a.show=!1;return}let c=ln.GEODESIC;c=j.getValueOrDefault(i._arcType,e,c);let d=t._scene.globe,u=t._scene.ellipsoid;c!==ln.NONE&&l(d)&&(mR.ellipsoid=u,mR.positions=r,mR.granularity=j.getValueOrUndefined(i._granularity,e),mR.height=eo.extractHeights(r,u),c===ln.GEODESIC?r=eo.generateCartesianArc(mR):r=eo.generateCartesianRhumbArc(mR)),a.show=!0,a.positions=r.slice(),a.material=pr.getValue(e,t.fillMaterialProperty,a.material),a.width=j.getValueOrDefault(i._width,e,1),a.distanceDisplayCondition=j.getValueOrUndefined(i._distanceDisplayCondition,e,a.distanceDisplayCondition)};ZY.prototype.getBoundingSphere=function(e){if(this._geometryUpdater.clampToGround){let t=this._groundPolylinePrimitive;if(l(t)&&t.show&&t.ready){let n=t.getGeometryInstanceAttributes(this._geometryUpdater._entity);if(l(n)&&l(n.boundingSphere))return le.clone(n.boundingSphere,e),Lt.DONE}return l(t)&&!t.ready?Lt.PENDING:Lt.DONE}else{let t=d1e(this);if(t.show&&t.positions.length>0)return le.fromPoints(t.positions,e),Lt.DONE}return Lt.FAILED};ZY.prototype.isDestroyed=function(){return!1};ZY.prototype.destroy=function(){let t=this._geometryUpdater._scene.id+this._primitives._guid,n=BB[t];l(n)&&(n.remove(this._line),n.length===0&&(this._primitives.removeAndDestroy(n),delete BB[t])),l(this._groundPolylinePrimitive)&&this._groundPrimitives.remove(this._groundPolylinePrimitive),me(this)};var VY=Lf;var tzi=x(T(),1);var yyt=new U,xyt=new Ot,Tyt=new Ot;function Wf(e,t,n,i,o){let r;n instanceof Jt?r=Ws:r=sc,this.orderedGroundPrimitives=e,this.classificationType=t,this.appearanceType=r,this.materialProperty=n,this.updaters=new Mt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Mt,this.material=void 0,this.updatersWithAttributes=new Mt,this.attributes=new Mt,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(Wf.prototype.onMaterialChanged,this),this.subscriptions=new Mt,this.showsUpdated=new Mt,this.zIndex=i,this._asynchronous=o}Wf.prototype.onMaterialChanged=function(){this.invalidated=!0};Wf.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty;return n===t||n instanceof Jt&&t instanceof Jt?!0:l(t)&&t.equals(n)};Wf.prototype.add=function(e,t,n){let i=t.id;if(this.updaters.set(i,t),this.geometry.set(i,n),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!j.isConstant(t.distanceDisplayConditionProperty))this.updatersWithAttributes.set(i,t);else{let o=this;this.subscriptions.set(i,t.entity.definitionChanged.addEventListener(function(r,s,a,c){s==="isShowing"&&o.showsUpdated.set(t.id,t)}))}this.createPrimitive=!0};Wf.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return l(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};Wf.prototype.update=function(e){let t=!0,n=this.primitive,i=this.orderedGroundPrimitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0){l(n)&&(l(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n);let a=this.appearanceType;n=new zh({show:!1,asynchronous:this._asynchronous,geometryInstances:o.slice(),appearance:new a,classificationType:this.classificationType}),this.appearanceType===sc&&(this.material=pr.getValue(e,this.materialProperty,this.material),n.appearance.material=this.material),i.add(n,this.zIndex),t=!1}else{l(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;l(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(l(n)&&n.ready){n.show=!0,l(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.appearanceType===sc&&(this.material=pr.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material);let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r<a;r++){let c=s[r],d=c.entity,u=this.geometry.get(c.id),m=this.attributes.get(u.id.id);if(l(m)||(m=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,m)),!c.fillMaterialProperty.isConstant){let y=c.fillMaterialProperty.color,_=j.getValueOrDefault(y,e,U.WHITE,yyt);U.equals(m._lastColor,_)||(m._lastColor=U.clone(_,m._lastColor),m.color=Qt.toValue(_,m.color))}let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),b=m.show[0]===1;p!==b&&(m.show=vn.toValue(p,m.show));let f=c.distanceDisplayConditionProperty;if(!j.isConstant(f)){let y=j.getValueOrDefault(f,e,Tyt,xyt);Ot.equals(y,m._lastDistanceDisplayCondition)||(m._lastDistanceDisplayCondition=Ot.clone(y,m._lastDistanceDisplayCondition),m.distanceDisplayCondition=$n.toValue(y,m.distanceDisplayCondition))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};Wf.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=o.entity,s=this.geometry.get(o.id),a=this.attributes.get(s.id.id);l(a)||(a=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,a));let c=r.isShowing,d=a.show[0]===1;c!==d&&(a.show=vn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};Wf.prototype.contains=function(e){return this.updaters.contains(e.id)};Wf.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return Lt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?Lt.FAILED:(i.boundingSphere.clone(t),Lt.DONE)};Wf.prototype.destroy=function(){let e=this.primitive,t=this.orderedGroundPrimitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n),this.removeMaterialSubscription()};function hR(e,t,n){this._items=[],this._orderedGroundPrimitives=e,this._classificationType=t,this._asynchronous=n??!0}hR.prototype.add=function(e,t){let n=this._items,i=n.length,o=t.createFillGeometryInstance(e),r=j.getValueOrDefault(t.zIndex,0);for(let a=0;a<i;++a){let c=n[a];if(c.isMaterial(t)&&c.zIndex===r){c.add(e,t,o);return}}let s=new Wf(this._orderedGroundPrimitives,this._classificationType,t.fillMaterialProperty,r,this._asynchronous);s.add(e,t,o),n.push(s)};hR.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};hR.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];if(r.invalidated){n.splice(t,1);let s=r.updaters.values,a=s.length;for(let c=0;c<a;c++)this.add(e,s[c]);r.destroy()}}let o=!0;for(t=0;t<n.length;t++)o=n[t].update(e)&&o;return o};hR.prototype.getBoundingSphere=function(e,t){let n=this._items,i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return Lt.FAILED};hR.prototype.removeAllPrimitives=function(){let e=this._items,t=e.length;for(let n=0;n<t;n++)e[n].destroy();this._items.length=0};var CY=hR;var _yt=[];function u1e(e,t){let n=e._batches,i=n.length;for(let o=0;o<i;o++)n[o].remove(t)}function m1e(e,t,n){if(n.isDynamic){e._dynamicBatch.add(t,n);return}if(n.clampToGround&&n.fillEnabled){let s=n.classificationTypeProperty.getValue(t);e._groundBatches[s].add(t,n);return}let i;n.fillEnabled&&(i=n.shadowsProperty.getValue(t));let o=0;l(n.depthFailMaterialProperty)&&(o=n.depthFailMaterialProperty instanceof Jt?1:2);let r;l(i)&&(r=i+o*Fn.NUMBER_OF_SHADOW_MODES),n.fillEnabled&&(n.fillMaterialProperty instanceof Jt?e._colorBatches[r].add(t,n):e._materialBatches[r].add(t,n))}function $p(e,t,n,i){i=i??e.groundPrimitives,n=n??e.primitives,this._scene=e,this._primitives=n,this._entityCollection=void 0,this._addedObjects=new Mt,this._removedObjects=new Mt,this._changedObjects=new Mt;let o,r=Fn.NUMBER_OF_SHADOW_MODES;for(this._colorBatches=new Array(r*3),this._materialBatches=new Array(r*3),o=0;o<r;++o)this._colorBatches[o]=new Mm(n,Ws,void 0,!1,o),this._materialBatches[o]=new km(n,sc,void 0,!1,o),this._colorBatches[o+r]=new Mm(n,Ws,Ws,!1,o),this._materialBatches[o+r]=new km(n,sc,Ws,!1,o),this._colorBatches[o+r*2]=new Mm(n,Ws,sc,!1,o),this._materialBatches[o+r*2]=new km(n,sc,sc,!1,o);this._dynamicBatch=new tS(n,i);let s=ei.NUMBER_OF_CLASSIFICATION_TYPES;for(this._groundBatches=new Array(s),o=0;o<s;++o)this._groundBatches[o]=new CY(i,o);this._batches=this._colorBatches.concat(this._materialBatches,this._dynamicBatch,this._groundBatches),this._subscriptions=new Mt,this._updaters=new Mt,this._entityCollection=t,t.collectionChanged.addEventListener($p.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,_yt)}$p.prototype.update=function(e){let t=this._addedObjects,n=t.values,i=this._removedObjects,o=i.values,r=this._changedObjects,s=r.values,a,c,d,u;for(a=s.length-1;a>-1;a--)c=s[a],d=c.id,u=this._updaters.get(d),u.entity===c?(u1e(this,u),m1e(this,e,u)):(o.push(c),n.push(c));for(a=o.length-1;a>-1;a--)c=o[a],d=c.id,u=this._updaters.get(d),u1e(this,u),u.destroy(),this._updaters.remove(d),this._subscriptions.get(d)(),this._subscriptions.remove(d);for(a=n.length-1;a>-1;a--)c=n[a],d=c.id,u=new VY(c,this._scene),this._updaters.set(d,u),m1e(this,e,u),this._subscriptions.set(d,u.geometryChanged.addEventListener($p._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let m=!0,p=this._batches,b=p.length;for(a=0;a<b;a++)m=p[a].update(e)&&m;return m};var Syt=[],Zyt=new le;$p.prototype.getBoundingSphere=function(e,t){let n=Syt,i=Zyt,o=0,r,s=this._batches,a=s.length,c=this._updaters.get(e.id);for(let d=0;d<a;d++){if(r=s[d].getBoundingSphere(c,i),r===Lt.PENDING)return Lt.PENDING;r===Lt.DONE&&(n[o]=le.clone(i,n[o]),o++)}return o===0?Lt.FAILED:(n.length=o,le.fromBoundingSpheres(n,t),Lt.DONE)};$p.prototype.isDestroyed=function(){return!1};$p.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener($p.prototype._onCollectionChanged,this),this._addedObjects.removeAll(),this._removedObjects.removeAll();let e,t=this._batches,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();let i=this._subscriptions.values;for(n=i.length,e=0;e<n;e++)i[e]();return this._subscriptions.removeAll(),me(this)};$p._onGeometryChanged=function(e){let t=this._removedObjects,n=this._changedObjects,i=e.entity,o=i.id;!l(t.get(o))&&!l(n.get(o))&&n.set(o,i)};$p.prototype._onCollectionChanged=function(e,t,n){let i=this._addedObjects,o=this._removedObjects,r=this._changedObjects,s,a,c;for(s=n.length-1;s>-1;s--)c=n[s],a=c.id,i.remove(a)||(o.set(a,c),r.remove(a));for(s=t.length-1;s>-1;s--)c=t[s],a=c.id,o.remove(a)?r.set(a,c):i.set(a,c)};var RY=$p;function Ud(e){Ol.initializeTerrainHeights(),zh.initializeTerrainHeights();let t=e.scene,n=e.dataSourceCollection;this._eventHelper=new Ir,this._eventHelper.add(n.dataSourceAdded,this._onDataSourceAdded,this),this._eventHelper.add(n.dataSourceRemoved,this._onDataSourceRemoved,this),this._eventHelper.add(n.dataSourceMoved,this._onDataSourceMoved,this),this._eventHelper.add(t.postRender,this._postRender,this),this._dataSourceCollection=n,this._scene=t,this._visualizersCallback=e.visualizersCallback??Ud.defaultVisualizersCallback;let i=!1,o=new Bl,r=new Bl;n.length>0&&(t.primitives.add(o),t.groundPrimitives.add(r),i=!0),this._primitives=o,this._groundPrimitives=r;for(let d=0,u=n.length;d<u;d++)this._onDataSourceAdded(n,n.get(d));let s=new oI;this._onDataSourceAdded(void 0,s),this._defaultDataSource=s;let a,c;if(!i){let d=this,u=function(){t.primitives.add(o),t.groundPrimitives.add(r),a(),c(),d._removeDefaultDataSourceListener=void 0,d._removeDataSourceCollectionListener=void 0};a=s.entities.collectionChanged.addEventListener(u),c=n.dataSourceAdded.addEventListener(u)}this._removeDefaultDataSourceListener=a,this._removeDataSourceCollectionListener=c,this._ready=!1}var fR=[];Ud.registerVisualizer=function(e){fR.includes(e)||fR.push(e)};Ud.unregisterVisualizer=function(e){if(fR.includes(e)){let t=fR.indexOf(e);fR.splice(t,1)}};Ud.defaultVisualizersCallback=function(e,t,n){let i=n.entities;return[new CF(t,i),new ZI(e,i,n._primitives,n._groundPrimitives),new VI(t,i),new hN(e,i),new pY(e,i),new SY(t,i),new TY(e,i),new RY(e,i,n._primitives,n._groundPrimitives),...fR.map(o=>new o(e,i))]};Object.defineProperties(Ud.prototype,{scene:{get:function(){return this._scene}},dataSources:{get:function(){return this._dataSourceCollection}},defaultDataSource:{get:function(){return this._defaultDataSource}},ready:{get:function(){return this._ready}}});Ud.prototype.isDestroyed=function(){return!1};Ud.prototype.destroy=function(){this._eventHelper.removeAll();let e=this._dataSourceCollection;for(let t=0,n=e.length;t<n;++t)this._onDataSourceRemoved(this._dataSourceCollection,e.get(t));return this._onDataSourceRemoved(void 0,this._defaultDataSource),l(this._removeDefaultDataSourceListener)?(this._removeDefaultDataSourceListener(),this._removeDataSourceCollectionListener()):(this._scene.primitives.remove(this._primitives),this._scene.groundPrimitives.remove(this._groundPrimitives)),me(this)};Ud.prototype.update=function(e){if(!Ei.initialized)return this._ready=!1,!1;let t=!0,n,i,o,r,s=this._dataSourceCollection,a=s.length;for(n=0;n<a;n++){let c=s.get(n);for(l(c.update)&&(t=c.update(e)&&t),o=c._visualizers,r=o.length,i=0;i<r;i++)t=o[i].update(e)&&t}for(o=this._defaultDataSource._visualizers,r=o.length,i=0;i<r;i++)t=o[i].update(e)&&t;return!this._ready&&t&&this._scene.requestRender(),this._ready=this._ready||t,t};Ud.prototype._postRender=function(){let e=this._scene.frameState,t=this._dataSourceCollection,n=t.length;for(let i=0;i<n;i++){let o=t.get(i),r=o.credit;l(r)&&e.creditDisplay.addCreditToNextFrame(r);let s=o._resourceCredits;if(l(s)){let a=s.length;for(let c=0;c<a;c++)e.creditDisplay.addCreditToNextFrame(s[c])}}};var Vyt=[],Cyt=new le;Ud.prototype.getBoundingSphere=function(e,t,n){if(!this._ready)return Lt.PENDING;let i,o,r=this._defaultDataSource;if(!r.entities.contains(e)){r=void 0;let p=this._dataSourceCollection;for(o=p.length,i=0;i<o;i++){let b=p.get(i);if(b.entities.contains(e)){r=b;break}}}if(!l(r))return Lt.FAILED;let s=Vyt,a=Cyt,c=0,d,u=r._visualizers,m=u.length;for(i=0;i<m;i++){let p=u[i];if(l(p.getBoundingSphere)){if(d=u[i].getBoundingSphere(e,a),!t&&d===Lt.PENDING)return Lt.PENDING;d===Lt.DONE&&(s[c]=le.clone(a,s[c]),c++)}}return c===0?Lt.FAILED:(s.length=c,le.fromBoundingSpheres(s,n),Lt.DONE)};Ud.prototype._onDataSourceAdded=function(e,t){let n=this._scene,i=this._primitives,o=this._groundPrimitives,r=i.add(new Bl),s=o.add(new VF);t._primitives=r,t._groundPrimitives=s;let a=t.clustering;a._initialize(n),r.add(a),t._visualizers=this._visualizersCallback(n,a,t)};Ud.prototype._onDataSourceRemoved=function(e,t){let n=this._primitives,i=this._groundPrimitives,o=t._primitives,r=t._groundPrimitives,s=t.clustering;o.remove(s);let a=t._visualizers,c=a.length;for(let d=0;d<c;d++)a[d].destroy();n.remove(o),i.remove(r),t._visualizers=void 0};Ud.prototype._onDataSourceMoved=function(e,t,n){let i=this._primitives,o=this._groundPrimitives,r=e._primitives,s=e._groundPrimitives;t===n+1?(i.raise(r),o.raise(s)):t===n-1?(i.lower(r),o.lower(s)):t===0?(i.lowerToBottom(r),o.lowerToBottom(s),i.raise(r),o.raise(s)):(i.raiseToTop(r),o.raiseToTop(s))};var GY=Ud;var aHi=x(T(),1);var zzi=x(T(),1);function pR(e,t){this._position=void 0,this._subscription=void 0,this._definitionChanged=new Se,this._normalize=t??!0,this.position=e}Object.defineProperties(pR.prototype,{isConstant:{get:function(){return j.isConstant(this._position)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._position},set:function(e){let t=this._position;t!==e&&(l(t)&&this._subscription(),this._position=e,l(e)&&(this._subscription=e._definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this)},this)),this._definitionChanged.raiseEvent(this))}},normalize:{get:function(){return this._normalize},set:function(e){this._normalize!==e&&(this._normalize=e,this._definitionChanged.raiseEvent(this))}}});var Ryt=new h,h1e=new h,f1e=new Q,Gyt=new Q,yee=1/60;pR.prototype.getValue=function(e,t){return this._getValue(e,t)};pR.prototype._getValue=function(e,t,n){l(e)||(e=Q.now(Gyt)),l(t)||(t=new h);let i=this._position;if(j.isConstant(i))return this._normalize?void 0:h.clone(h.ZERO,t);let o=i.getValue(e,Ryt),r=i.getValue(Q.addSeconds(e,yee,f1e),h1e);if(!l(o)||!l(r)&&(r=o,o=i.getValue(Q.addSeconds(e,-yee,f1e),h1e),!l(o)))return;if(h.equals(o,r))return this._normalize?void 0:h.clone(h.ZERO,t);l(n)&&o.clone(n);let s=h.subtract(r,o,t);return this._normalize?h.normalize(s,t):h.divideByScalar(s,yee,t)};pR.prototype.equals=function(e){return this===e||e instanceof pR&&j.equals(this._position,e._position)};var bg=pR;var p1e=new q,b1e=new q,g1e=new q,Ayt=new I,zB=new h,y1e=new h,xee=new h,Tee=new h,x1e=new h,T1e=new h,Eyt=new Ye,Lyt=new h,Wyt=new q,bR=new Q,vyt=1.25;function Fyt(e,t,n,i,o,r,s,a,c,d){let u=e.scene.mode,m=o.getValue(c,e._lastCartesian);if(l(m)){let p=!1,b=!1,f,y,_;if(u===se.SCENE3D){Q.addSeconds(c,.001,bR);let v=o.getValue(bR,zB);if(l(v)||(Q.addSeconds(c,-.001,bR),v=o.getValue(bR,zB),b=!0),l(v)){let F=bt.computeFixedToIcrfMatrix(c,p1e),P=bt.computeFixedToIcrfMatrix(bR,b1e),N;!l(F)||!l(P)?(N=bt.computeTemeToPseudoFixedMatrix(c,g1e),F=q.transpose(N,p1e),P=bt.computeTemeToPseudoFixedMatrix(bR,b1e),q.transpose(P,P)):N=q.transpose(F,g1e);let g=q.multiplyByVector(F,m,x1e),R=q.multiplyByVector(P,v,T1e);h.subtract(g,R,Tee);let A=h.magnitude(Tee)*1e3,W=L.GRAVITATIONALPARAMETER,X=-W/(A*A-2*W/h.magnitude(g));X<0||X>vyt*d.maximumRadius?(f=y1e,h.normalize(m,f),h.negate(f,f),_=h.clone(h.UNIT_Z,xee),y=h.cross(_,f,zB),h.magnitude(y)>L.EPSILON7&&(h.normalize(f,f),h.normalize(y,y),_=h.cross(f,y,xee),h.normalize(_,_),p=!0)):h.equalsEpsilon(m,v,L.EPSILON7)||(_=y1e,h.normalize(g,_),h.normalize(R,R),y=h.cross(_,R,xee),b&&(y=h.multiplyByScalar(y,-1,y)),h.equalsEpsilon(y,h.ZERO,L.EPSILON7)||(f=h.cross(y,_,zB),q.multiplyByVector(N,f,f),q.multiplyByVector(N,y,y),q.multiplyByVector(N,_,_),h.normalize(f,f),h.normalize(y,y),h.normalize(_,_),p=!0))}}l(e.boundingSphere)&&(m=e.boundingSphere.center);let S,Z,V;i&&(S=h.clone(t.position,Tee),Z=h.clone(t.direction,x1e),V=h.clone(t.up,T1e));let C=Ayt,G;l(s)&&(G=s.getValue(c,Eyt));let E=r.getValue(c,Lyt);if(a===fb.INERTIAL&&l(G))I.fromTranslationQuaternionRotationScale(m,G,h.ONE,C);else if(a===fb.VELOCITY&&l(E)){let v=bt.rotationMatrixFromPositionVelocity(m,E,d,Wyt);I.fromRotationTranslation(v,m,C)}else a===fb.ENU||!p?bt.eastNorthUpToFixedFrame(m,d,C):(C[0]=f.x,C[1]=f.y,C[2]=f.z,C[3]=0,C[4]=y.x,C[5]=y.y,C[6]=y.z,C[7]=0,C[8]=_.x,C[9]=_.y,C[10]=_.z,C[11]=0,C[12]=m.x,C[13]=m.y,C[14]=m.z,C[15]=0);t._setTransform(C),i&&(h.clone(S,t.position),h.clone(Z,t.direction),h.clone(V,t.up),h.cross(Z,V,t.right))}if(n){let p=u===se.SCENE2D||h.equals(e._offset3D,h.ZERO)?void 0:e._offset3D;t.lookAtTransform(t.transform,p)}}function AY(e,t,n){this.entity=e,this.scene=t,this.ellipsoid=n??ie.default,this.boundingSphere=void 0,this._lastEntity=void 0,this._mode=void 0,this._lastCartesian=new h,this._defaultOffset3D=void 0,this._velocityProperty=new bg(e.position,!0),this._offset3D=new h}Object.defineProperties(AY,{defaultOffset3D:{get:function(){return this._defaultOffset3D},set:function(e){this._defaultOffset3D=h.clone(e,new h)}}});AY.defaultOffset3D=new h(-14e3,3500,3500);var HB=new Gm,Iyt=new h;AY.prototype.update=function(e,t){let n=this.scene,i=this.ellipsoid,o=n.mode;if(o===se.MORPHING)return;let r=this.entity,s=r.trackingReferenceFrame,a=r.position;if(!l(a))return;let c=this._velocityProperty,d=r.orientation,u=r!==this._lastEntity,m=o!==this._mode,p=n.camera,b=u||m,f=!0;if(u){let y=r.viewFrom,_=l(y);if(!_&&l(t)){HB.pitch=-L.PI_OVER_FOUR,HB.range=0;let S=a.getValue(e,Iyt);if(l(S)){let Z=2-1/Math.max(1,h.magnitude(S)/i.maximumRadius);HB.pitch*=Z}p.viewBoundingSphere(t,HB),this.boundingSphere=t,b=!1,f=!1}else(!_||!l(y.getValue(e,this._offset3D)))&&h.clone(AY._defaultOffset3D,this._offset3D)}else!m&&this._mode!==se.SCENE2D&&h.clone(p.position,this._offset3D);this._lastEntity=r,this._mode=o,Fyt(this,p,b,f,a,c,d,s,e,i)};var EY=AY;var lHi=x(T(),1);function Pyt(e){return typeof e=="string"&&(e=document.getElementById(e)),e}var wn=Pyt;var pHi=x(T(),1);async function _ee(e,t){let n=t.terrainProvider,i=t.mapProjection,o=i.ellipsoid,r,s=t.camera.getRectangleCameraCoordinates(e);if(t.mode===se.SCENE3D?r=o.cartesianToCartographic(s):r=i.unproject(s),!l(n))return r;let a=n.availability;if(!l(a)||t.mode===se.SCENE2D)return r;let c=[re.center(e),re.southeast(e),re.southwest(e),re.northeast(e),re.northwest(e)],d=await _ee._sampleTerrainMostDetailed(n,c),u=!1,m=d.reduce(function(b,f){return l(f.height)?(u=!0,Math.max(f.height,b)):b},-Number.MAX_VALUE),p=r;return u&&(p.height+=m),p}_ee._sampleTerrainMostDetailed=G_;var QS=_ee;var e4i=x(T(),1);var gHi=x(T(),1),LY=`uniform vec4 u_initialColor; #if TEXTURE_UNITS > 0 uniform sampler2D u_dayTextures[TEXTURE_UNITS]; uniform vec4 u_dayTextureTranslationAndScale[TEXTURE_UNITS]; uniform bool u_dayTextureUseWebMercatorT[TEXTURE_UNITS]; #ifdef APPLY_ALPHA uniform float u_dayTextureAlpha[TEXTURE_UNITS]; #endif #ifdef APPLY_DAY_NIGHT_ALPHA uniform float u_dayTextureNightAlpha[TEXTURE_UNITS]; uniform float u_dayTextureDayAlpha[TEXTURE_UNITS]; #endif #ifdef APPLY_SPLIT uniform float u_dayTextureSplit[TEXTURE_UNITS]; #endif #ifdef APPLY_BRIGHTNESS uniform float u_dayTextureBrightness[TEXTURE_UNITS]; #endif #ifdef APPLY_CONTRAST uniform float u_dayTextureContrast[TEXTURE_UNITS]; #endif #ifdef APPLY_HUE uniform float u_dayTextureHue[TEXTURE_UNITS]; #endif #ifdef APPLY_SATURATION uniform float u_dayTextureSaturation[TEXTURE_UNITS]; #endif #ifdef APPLY_GAMMA uniform float u_dayTextureOneOverGamma[TEXTURE_UNITS]; #endif #ifdef APPLY_IMAGERY_CUTOUT uniform vec4 u_dayTextureCutoutRectangles[TEXTURE_UNITS]; #endif #ifdef APPLY_COLOR_TO_ALPHA uniform vec4 u_colorsToAlpha[TEXTURE_UNITS]; #endif uniform vec4 u_dayTextureTexCoordsRectangle[TEXTURE_UNITS]; #endif #if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL)) uniform sampler2D u_waterMask; uniform vec4 u_waterMaskTranslationAndScale; uniform float u_zoomedOutOceanSpecularIntensity; #endif #ifdef SHOW_OCEAN_WAVES uniform sampler2D u_oceanNormalMap; #endif #if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE) uniform vec2 u_lightingFadeDistance; #endif #ifdef TILE_LIMIT_RECTANGLE uniform vec4 u_cartographicLimitRectangle; #endif #ifdef GROUND_ATMOSPHERE uniform vec2 u_nightFadeDistance; #endif #ifdef ENABLE_CLIPPING_PLANES uniform highp sampler2D u_clippingPlanes; uniform mat4 u_clippingPlanesMatrix; uniform vec4 u_clippingPlanesEdgeStyle; #endif #ifdef ENABLE_CLIPPING_POLYGONS uniform highp sampler2D u_clippingDistance; in vec2 v_clippingPosition; flat in int v_regionIndex; #endif #if defined(GROUND_ATMOSPHERE) || defined(FOG) && defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING)) uniform float u_minimumBrightness; #endif // Based on colorCorrect // The colorCorrect flag can only be true when tileProvider.hue/saturation/brightnessShift // are nonzero AND when (applyFog || showGroundAtmosphere) in the tile provider // - The tileProvider.hue/saturation/brightnessShift are just passed through // from the Globe hue/saturation/brightness, like atmosphereBrightnessShift // - The applyFog depends on enableFog, and some tile distance from the viewer // - The showGroundAtmosphere is a flag that is passed through from the Globe, // and is true by default when the ellipsoid is WGS84 #ifdef COLOR_CORRECT uniform vec3 u_hsbShift; // Hue, saturation, brightness #endif // Based on highlightFillTile // This is set for terrain tiles when they are "fill" tiles, and // the terrainProvider.fillHighlightColor was set to a value with // nonzero alpha #ifdef HIGHLIGHT_FILL_TILE uniform vec4 u_fillHighlightColor; #endif // Based on translucent // This is set depending on the GlobeTranslucencyState #ifdef TRANSLUCENT uniform vec4 u_frontFaceAlphaByDistance; uniform vec4 u_backFaceAlphaByDistance; uniform vec4 u_translucencyRectangle; #endif // Based on showUndergroundColor // This is set when GlobeSurfaceTileProvider.isUndergroundVisible // returns true, AND the tileProvider.undergroundColor had a value with // nonzero alpha, and the tileProvider.undergroundColorAlphaByDistance // was in the right range #ifdef UNDERGROUND_COLOR uniform vec4 u_undergroundColor; uniform vec4 u_undergroundColorAlphaByDistance; #endif // Based on enableLighting && hasVertexNormals // The enableLighting flag is passed in directly from the Globe. // The hasVertexNormals flag is from the tileProvider #ifdef ENABLE_VERTEX_LIGHTING uniform float u_lambertDiffuseMultiplier; uniform float u_vertexShadowDarkness; #endif in vec3 v_positionMC; in vec3 v_positionEC; in vec3 v_textureCoordinates; in vec3 v_normalMC; in vec3 v_normalEC; #ifdef APPLY_MATERIAL in float v_height; in float v_slope; in float v_aspect; #endif #if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) in float v_distance; #endif #if defined(GROUND_ATMOSPHERE) || defined(FOG) in vec3 v_atmosphereRayleighColor; in vec3 v_atmosphereMieColor; in float v_atmosphereOpacity; #endif #if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) float interpolateByDistance(vec4 nearFarScalar, float distance) { float startDistance = nearFarScalar.x; float startValue = nearFarScalar.y; float endDistance = nearFarScalar.z; float endValue = nearFarScalar.w; float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0); return mix(startValue, endValue, t); } #endif #if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) || defined(APPLY_MATERIAL) vec4 alphaBlend(vec4 sourceColor, vec4 destinationColor) { return sourceColor * vec4(sourceColor.aaa, 1.0) + destinationColor * (1.0 - sourceColor.a); } #endif #ifdef TRANSLUCENT bool inTranslucencyRectangle() { return v_textureCoordinates.x > u_translucencyRectangle.x && v_textureCoordinates.x < u_translucencyRectangle.z && v_textureCoordinates.y > u_translucencyRectangle.y && v_textureCoordinates.y < u_translucencyRectangle.w; } #endif vec4 sampleAndBlend( vec4 previousColor, sampler2D textureToSample, vec2 tileTextureCoordinates, vec4 textureCoordinateRectangle, vec4 textureCoordinateTranslationAndScale, float textureAlpha, float textureNightAlpha, float textureDayAlpha, float textureBrightness, float textureContrast, float textureHue, float textureSaturation, float textureOneOverGamma, float split, vec4 colorToAlpha, float nightBlend) { // This crazy step stuff sets the alpha to 0.0 if this following condition is true: // tileTextureCoordinates.s < textureCoordinateRectangle.s || // tileTextureCoordinates.s > textureCoordinateRectangle.p || // tileTextureCoordinates.t < textureCoordinateRectangle.t || // tileTextureCoordinates.t > textureCoordinateRectangle.q // In other words, the alpha is zero if the fragment is outside the rectangle // covered by this texture. Would an actual 'if' yield better performance? vec2 alphaMultiplier = step(textureCoordinateRectangle.st, tileTextureCoordinates); textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y; alphaMultiplier = step(vec2(0.0), textureCoordinateRectangle.pq - tileTextureCoordinates); textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y; #if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING) textureAlpha *= mix(textureDayAlpha, textureNightAlpha, nightBlend); #endif vec2 translation = textureCoordinateTranslationAndScale.xy; vec2 scale = textureCoordinateTranslationAndScale.zw; vec2 textureCoordinates = tileTextureCoordinates * scale + translation; vec4 value = texture(textureToSample, textureCoordinates); vec3 color = value.rgb; float alpha = value.a; #ifdef APPLY_COLOR_TO_ALPHA vec3 colorDiff = abs(color.rgb - colorToAlpha.rgb); colorDiff.r = czm_maximumComponent(colorDiff); alpha = czm_branchFreeTernary(colorDiff.r < colorToAlpha.a, 0.0, alpha); #endif #if !defined(APPLY_GAMMA) vec4 tempColor = czm_gammaCorrect(vec4(color, alpha)); color = tempColor.rgb; alpha = tempColor.a; #else color = pow(color, vec3(textureOneOverGamma)); #endif #ifdef APPLY_SPLIT float splitPosition = czm_splitPosition; // Split to the left if (split < 0.0 && gl_FragCoord.x > splitPosition) { alpha = 0.0; } // Split to the right else if (split > 0.0 && gl_FragCoord.x < splitPosition) { alpha = 0.0; } #endif #ifdef APPLY_BRIGHTNESS color = mix(vec3(0.0), color, textureBrightness); #endif #ifdef APPLY_CONTRAST color = mix(vec3(0.5), color, textureContrast); #endif #ifdef APPLY_HUE color = czm_hue(color, textureHue); #endif #ifdef APPLY_SATURATION color = czm_saturation(color, textureSaturation); #endif float sourceAlpha = alpha * textureAlpha; float outAlpha = mix(previousColor.a, 1.0, sourceAlpha); outAlpha += sign(outAlpha) - 1.0; vec3 outColor = mix(previousColor.rgb * previousColor.a, color, sourceAlpha) / outAlpha; // When rendering imagery for a tile in multiple passes, // some GPU/WebGL implementation combinations will not blend fragments in // additional passes correctly if their computation includes an unmasked // divide-by-zero operation, // even if it's not in the output or if the output has alpha zero. // // For example, without sanitization for outAlpha, // this renders without artifacts: // if (outAlpha == 0.0) { outColor = vec3(0.0); } // // but using czm_branchFreeTernary will cause portions of the tile that are // alpha-zero in the additional pass to render as black instead of blending // with the previous pass: // outColor = czm_branchFreeTernary(outAlpha == 0.0, vec3(0.0), outColor); // // So instead, sanitize against divide-by-zero, // store this state on the sign of outAlpha, and correct on return. return vec4(outColor, max(outAlpha, 0.0)); } vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend); vec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float specularMapValue, float fade); const float fExposure = 2.0; vec3 computeEllipsoidPosition() { float mpp = czm_metersPerPixel(vec4(0.0, 0.0, -czm_currentFrustum.x, 1.0), 1.0); vec2 xy = gl_FragCoord.xy / czm_viewport.zw * 2.0 - vec2(1.0); xy *= czm_viewport.zw * mpp * 0.5; vec3 direction; if (czm_orthographicIn3D == 1.0) { direction = vec3(0.0, 0.0, -1.0); } else { direction = normalize(vec3(xy, -czm_currentFrustum.x)); } czm_ray ray = czm_ray(vec3(0.0), direction); vec3 ellipsoid_center = czm_view[3].xyz; czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii); vec3 ellipsoidPosition = czm_pointAlongRay(ray, intersection.start); return (czm_inverseView * vec4(ellipsoidPosition, 1.0)).xyz; } void main() { #ifdef TILE_LIMIT_RECTANGLE if (v_textureCoordinates.x < u_cartographicLimitRectangle.x || u_cartographicLimitRectangle.z < v_textureCoordinates.x || v_textureCoordinates.y < u_cartographicLimitRectangle.y || u_cartographicLimitRectangle.w < v_textureCoordinates.y) { discard; } #endif #ifdef ENABLE_CLIPPING_PLANES float clipDistance = clip(gl_FragCoord, u_clippingPlanes, u_clippingPlanesMatrix); #endif #if defined(SHOW_REFLECTIVE_OCEAN) || defined(ENABLE_DAYNIGHT_SHADING) || defined(HDR) vec3 normalMC = czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)); // normalized surface normal in model coordinates vec3 normalEC = czm_normal3D * normalMC; // normalized surface normal in eye coordinates #endif #if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING) float nightBlend = 1.0 - clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0, 0.0, 1.0); #else float nightBlend = 0.0; #endif // The clamp below works around an apparent bug in Chrome Canary v23.0.1241.0 // where the fragment shader sees textures coordinates < 0.0 and > 1.0 for the // fragments on the edges of tiles even though the vertex shader is outputting // coordinates strictly in the 0-1 range. vec4 color = computeDayColor(u_initialColor, clamp(v_textureCoordinates, 0.0, 1.0), nightBlend); #ifdef SHOW_TILE_BOUNDARIES if (v_textureCoordinates.x < (1.0/256.0) || v_textureCoordinates.x > (255.0/256.0) || v_textureCoordinates.y < (1.0/256.0) || v_textureCoordinates.y > (255.0/256.0)) { color = vec4(1.0, 0.0, 0.0, 1.0); } #endif #if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE) float cameraDist; if (czm_sceneMode == czm_sceneMode2D) { cameraDist = max(czm_frustumPlanes.x - czm_frustumPlanes.y, czm_frustumPlanes.w - czm_frustumPlanes.z) * 0.5; } else if (czm_sceneMode == czm_sceneModeColumbusView) { cameraDist = -czm_view[3].z; } else { cameraDist = length(czm_view[3]); } float fadeOutDist = u_lightingFadeDistance.x; float fadeInDist = u_lightingFadeDistance.y; if (czm_sceneMode != czm_sceneMode3D) { vec3 radii = czm_ellipsoidRadii; float maxRadii = max(radii.x, max(radii.y, radii.z)); fadeOutDist -= maxRadii; fadeInDist -= maxRadii; } float fade = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.0, 1.0); #else float fade = 0.0; #endif #if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL)) vec2 waterMaskTranslation = u_waterMaskTranslationAndScale.xy; vec2 waterMaskScale = u_waterMaskTranslationAndScale.zw; vec2 waterMaskTextureCoordinates = v_textureCoordinates.xy * waterMaskScale + waterMaskTranslation; waterMaskTextureCoordinates.y = 1.0 - waterMaskTextureCoordinates.y; float mask = texture(u_waterMask, waterMaskTextureCoordinates).r; #ifdef SHOW_REFLECTIVE_OCEAN if (mask > 0.0) { mat3 enuToEye = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalEC); vec2 ellipsoidTextureCoordinates = czm_ellipsoidTextureCoordinates(normalMC); vec2 ellipsoidFlippedTextureCoordinates = czm_ellipsoidTextureCoordinates(normalMC.zyx); vec2 textureCoordinates = mix(ellipsoidTextureCoordinates, ellipsoidFlippedTextureCoordinates, czm_morphTime * smoothstep(0.9, 0.95, normalMC.z)); color = computeWaterColor(v_positionEC, textureCoordinates, enuToEye, color, mask, fade); } #endif #endif #ifdef APPLY_MATERIAL czm_materialInput materialInput; materialInput.st = v_textureCoordinates.st; materialInput.normalEC = normalize(v_normalEC); materialInput.positionToEyeEC = -v_positionEC; materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalize(v_normalEC)); materialInput.slope = v_slope; materialInput.height = v_height; materialInput.aspect = v_aspect; #ifdef HAS_WATER_MASK materialInput.waterMask = mask; #endif czm_material material = czm_getMaterial(materialInput); vec4 materialColor = vec4(material.diffuse, material.alpha); color = alphaBlend(materialColor, color); #endif #ifdef ENABLE_VERTEX_LIGHTING float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalize(v_normalEC)) * u_lambertDiffuseMultiplier + u_vertexShadowDarkness, 0.0, 1.0); vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a); #elif defined(ENABLE_DAYNIGHT_SHADING) float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0 + 0.3, 0.0, 1.0); diffuseIntensity = mix(1.0, diffuseIntensity, fade); vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a); #else vec4 finalColor = color; #endif #ifdef ENABLE_CLIPPING_PLANES vec4 clippingPlanesEdgeColor = vec4(1.0); clippingPlanesEdgeColor.rgb = u_clippingPlanesEdgeStyle.rgb; float clippingPlanesEdgeWidth = u_clippingPlanesEdgeStyle.a; if (clipDistance < clippingPlanesEdgeWidth) { finalColor = clippingPlanesEdgeColor; } #endif #ifdef ENABLE_CLIPPING_POLYGONS vec2 clippingPosition = v_clippingPosition; int regionIndex = v_regionIndex; clipPolygons(u_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex); #endif #ifdef HIGHLIGHT_FILL_TILE finalColor = vec4(mix(finalColor.rgb, u_fillHighlightColor.rgb, u_fillHighlightColor.a), finalColor.a); #endif #if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN) vec3 atmosphereLightDirection = czm_sunDirectionWC; #else vec3 atmosphereLightDirection = czm_lightDirectionWC; #endif #if defined(GROUND_ATMOSPHERE) || defined(FOG) if (!czm_backFacing()) { bool dynamicLighting = false; #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING)) dynamicLighting = true; #endif vec3 rayleighColor; vec3 mieColor; float opacity; vec3 positionWC; vec3 lightDirection; // When the camera is far away (camera distance > nightFadeOutDistance), the scattering is computed in the fragment shader. // Otherwise, the scattering is computed in the vertex shader. #ifdef PER_FRAGMENT_GROUND_ATMOSPHERE positionWC = computeEllipsoidPosition(); lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(positionWC)); computeAtmosphereScattering( positionWC, lightDirection, rayleighColor, mieColor, opacity ); #else positionWC = v_positionMC; lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(positionWC)); rayleighColor = v_atmosphereRayleighColor; mieColor = v_atmosphereMieColor; opacity = v_atmosphereOpacity; #endif #ifdef COLOR_CORRECT const bool ignoreBlackPixels = true; rayleighColor = czm_applyHSBShift(rayleighColor, u_hsbShift, ignoreBlackPixels); mieColor = czm_applyHSBShift(mieColor, u_hsbShift, ignoreBlackPixels); #endif vec4 groundAtmosphereColor = computeAtmosphereColor(positionWC, lightDirection, rayleighColor, mieColor, opacity); // Fog is applied to tiles selected for fog, close to the Earth. #ifdef FOG vec3 fogColor = groundAtmosphereColor.rgb; // If there is lighting, apply that to the fog. #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING)) float darken = clamp(dot(normalize(czm_viewerPositionWC), atmosphereLightDirection), u_minimumBrightness, 1.0); fogColor *= darken; #endif #ifndef HDR fogColor.rgb = czm_pbrNeutralTonemapping(fogColor.rgb); fogColor.rgb = czm_inverseGamma(fogColor.rgb); #endif finalColor = vec4(czm_fog(v_distance, finalColor.rgb, fogColor.rgb, czm_fogVisualDensityScalar), finalColor.a); #else // Apply ground atmosphere. This happens when the camera is far away from the earth. // The transmittance is based on optical depth i.e. the length of segment of the ray inside the atmosphere. // This value is larger near the "circumference", as it is further away from the camera. We use it to // brighten up that area of the ground atmosphere. const float transmittanceModifier = 0.5; float transmittance = transmittanceModifier + clamp(1.0 - groundAtmosphereColor.a, 0.0, 1.0); vec3 finalAtmosphereColor = finalColor.rgb + groundAtmosphereColor.rgb * transmittance; #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING)) float fadeInDist = u_nightFadeDistance.x; float fadeOutDist = u_nightFadeDistance.y; float sunlitAtmosphereIntensity = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.05, 1.0); float darken = clamp(dot(normalize(positionWC), atmosphereLightDirection), 0.0, 1.0); vec3 darkenendGroundAtmosphereColor = mix(groundAtmosphereColor.rgb, finalAtmosphereColor.rgb, darken); finalAtmosphereColor = mix(darkenendGroundAtmosphereColor, finalAtmosphereColor, sunlitAtmosphereIntensity); #endif #ifndef HDR finalAtmosphereColor.rgb = vec3(1.0) - exp(-fExposure * finalAtmosphereColor.rgb); #else finalAtmosphereColor.rgb = czm_saturation(finalAtmosphereColor.rgb, 1.6); #endif finalColor.rgb = mix(finalColor.rgb, finalAtmosphereColor.rgb, fade); #endif } #endif #ifdef UNDERGROUND_COLOR if (czm_backFacing()) { float distanceFromEllipsoid = max(czm_eyeHeight, 0.0); float distance = max(v_distance - distanceFromEllipsoid, 0.0); float blendAmount = interpolateByDistance(u_undergroundColorAlphaByDistance, distance); vec4 undergroundColor = vec4(u_undergroundColor.rgb, u_undergroundColor.a * blendAmount); finalColor = alphaBlend(undergroundColor, finalColor); } #endif #ifdef HAS_VECTOR_LAYER finalColor = vectorPolygonRender(v_textureCoordinates.xy, finalColor); finalColor = vectorPolylineRender(v_textureCoordinates.xy, finalColor); #endif #ifdef TRANSLUCENT if (inTranslucencyRectangle()) { vec4 alphaByDistance = gl_FrontFacing ? u_frontFaceAlphaByDistance : u_backFaceAlphaByDistance; finalColor.a *= interpolateByDistance(alphaByDistance, v_distance); } #endif out_FragColor = finalColor; } #ifdef SHOW_REFLECTIVE_OCEAN float waveFade(float edge0, float edge1, float x) { float y = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); return pow(1.0 - y, 5.0); } float linearFade(float edge0, float edge1, float x) { return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); } // Based on water rendering by Jonas Wagner: // http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog // low altitude wave settings const float oceanFrequencyLowAltitude = 825000.0; const float oceanAnimationSpeedLowAltitude = 0.004; const float oceanOneOverAmplitudeLowAltitude = 1.0 / 2.0; const float oceanSpecularIntensity = 0.5; // high altitude wave settings const float oceanFrequencyHighAltitude = 125000.0; const float oceanAnimationSpeedHighAltitude = 0.008; const float oceanOneOverAmplitudeHighAltitude = 1.0 / 2.0; vec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float maskValue, float fade) { vec3 positionToEyeEC = -positionEyeCoordinates; float positionToEyeECLength = length(positionToEyeEC); // The double normalize below works around a bug in Firefox on Android devices. vec3 normalizedPositionToEyeEC = normalize(normalize(positionToEyeEC)); // Fade out the waves as the camera moves far from the surface. float waveIntensity = waveFade(70000.0, 1000000.0, positionToEyeECLength); #ifdef SHOW_OCEAN_WAVES // high altitude waves float time = czm_frameNumber * oceanAnimationSpeedHighAltitude; vec4 noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyHighAltitude, time, 0.0); vec3 normalTangentSpaceHighAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeHighAltitude); // low altitude waves time = czm_frameNumber * oceanAnimationSpeedLowAltitude; noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyLowAltitude, time, 0.0); vec3 normalTangentSpaceLowAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeLowAltitude); // blend the 2 wave layers based on distance to surface float highAltitudeFade = linearFade(0.0, 60000.0, positionToEyeECLength); float lowAltitudeFade = 1.0 - linearFade(20000.0, 60000.0, positionToEyeECLength); vec3 normalTangentSpace = (highAltitudeFade * normalTangentSpaceHighAltitude) + (lowAltitudeFade * normalTangentSpaceLowAltitude); normalTangentSpace = normalize(normalTangentSpace); // fade out the normal perturbation as we move farther from the water surface normalTangentSpace.xy *= waveIntensity; normalTangentSpace = normalize(normalTangentSpace); #else vec3 normalTangentSpace = vec3(0.0, 0.0, 1.0); #endif vec3 normalEC = enuToEye * normalTangentSpace; const vec3 waveHighlightColor = vec3(0.3, 0.45, 0.6); // Use diffuse light to highlight the waves float diffuseIntensity = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * maskValue; vec3 diffuseHighlight = waveHighlightColor * diffuseIntensity * (1.0 - fade); #ifdef SHOW_OCEAN_WAVES // Where diffuse light is low or non-existent, use wave highlights based solely on // the wave bumpiness and no particular light direction. float tsPerturbationRatio = normalTangentSpace.z; vec3 nonDiffuseHighlight = mix(waveHighlightColor * 5.0 * (1.0 - tsPerturbationRatio), vec3(0.0), diffuseIntensity); #else vec3 nonDiffuseHighlight = vec3(0.0); #endif // Add specular highlights in 3D, and in all modes when zoomed in. float specularIntensity = czm_getSpecular(czm_lightDirectionEC, normalizedPositionToEyeEC, normalEC, 10.0); float surfaceReflectance = mix(0.0, mix(u_zoomedOutOceanSpecularIntensity, oceanSpecularIntensity, waveIntensity), maskValue); float specular = specularIntensity * surfaceReflectance; #ifdef HDR specular *= 1.4; float e = 0.2; float d = 3.3; float c = 1.7; vec3 color = imageryColor.rgb + (c * (vec3(e) + imageryColor.rgb * d) * (diffuseHighlight + nonDiffuseHighlight + specular)); #else vec3 color = imageryColor.rgb + diffuseHighlight + nonDiffuseHighlight + specular; #endif return vec4(color, imageryColor.a); } #endif // #ifdef SHOW_REFLECTIVE_OCEAN `;var xHi=x(T(),1),WY=`#ifdef QUANTIZATION_BITS12 in vec4 compressed0; in float compressed1; #else in vec4 position3DAndHeight; in vec4 textureCoordAndEncodedNormals; #endif #ifdef GEODETIC_SURFACE_NORMALS in vec3 geodeticSurfaceNormal; #endif #ifdef EXAGGERATION uniform vec2 u_verticalExaggerationAndRelativeHeight; #endif uniform vec3 u_center3D; uniform mat4 u_modifiedModelView; uniform mat4 u_modifiedModelViewProjection; uniform vec4 u_tileRectangle; // Uniforms for 2D Mercator projection uniform vec2 u_southAndNorthLatitude; uniform vec2 u_southMercatorYAndOneOverHeight; out vec3 v_positionMC; out vec3 v_positionEC; out vec3 v_textureCoordinates; out vec3 v_normalMC; out vec3 v_normalEC; #ifdef APPLY_MATERIAL out float v_slope; out float v_aspect; out float v_height; #endif #if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) out float v_distance; #endif #if defined(FOG) || defined(GROUND_ATMOSPHERE) out vec3 v_atmosphereRayleighColor; out vec3 v_atmosphereMieColor; out float v_atmosphereOpacity; #endif #ifdef ENABLE_CLIPPING_POLYGONS uniform highp sampler2D u_clippingExtents; out vec2 v_clippingPosition; flat out int v_regionIndex; #endif // These functions are generated at runtime. vec4 getPosition(vec3 position, float height, vec2 textureCoordinates); float get2DYPositionFraction(vec2 textureCoordinates); vec4 getPosition3DMode(vec3 position, float height, vec2 textureCoordinates) { return u_modifiedModelViewProjection * vec4(position, 1.0); } float get2DMercatorYPositionFraction(vec2 textureCoordinates) { // The width of a tile at level 11, in radians and assuming a single root tile, is // 2.0 * czm_pi / pow(2.0, 11.0) // We want to just linearly interpolate the 2D position from the texture coordinates // when we're at this level or higher. The constant below is the expression // above evaluated and then rounded up at the 4th significant digit. const float maxTileWidth = 0.003068; float positionFraction = textureCoordinates.y; float southLatitude = u_southAndNorthLatitude.x; float northLatitude = u_southAndNorthLatitude.y; if (northLatitude - southLatitude > maxTileWidth) { float southMercatorY = u_southMercatorYAndOneOverHeight.x; float oneOverMercatorHeight = u_southMercatorYAndOneOverHeight.y; float currentLatitude = mix(southLatitude, northLatitude, textureCoordinates.y); currentLatitude = clamp(currentLatitude, -czm_webMercatorMaxLatitude, czm_webMercatorMaxLatitude); positionFraction = czm_latitudeToWebMercatorFraction(currentLatitude, southMercatorY, oneOverMercatorHeight); } return positionFraction; } float get2DGeographicYPositionFraction(vec2 textureCoordinates) { return textureCoordinates.y; } vec4 getPositionPlanarEarth(vec3 position, float height, vec2 textureCoordinates) { float yPositionFraction = get2DYPositionFraction(textureCoordinates); vec4 rtcPosition2D = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0); return u_modifiedModelViewProjection * rtcPosition2D; } vec4 getPosition2DMode(vec3 position, float height, vec2 textureCoordinates) { return getPositionPlanarEarth(position, 0.0, textureCoordinates); } vec4 getPositionColumbusViewMode(vec3 position, float height, vec2 textureCoordinates) { return getPositionPlanarEarth(position, height, textureCoordinates); } vec4 getPositionMorphingMode(vec3 position, float height, vec2 textureCoordinates) { // We do not do RTC while morphing, so there is potential for jitter. // This is unlikely to be noticeable, though. vec3 position3DWC = position + u_center3D; float yPositionFraction = get2DYPositionFraction(textureCoordinates); vec4 position2DWC = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0); vec4 morphPosition = czm_columbusViewMorph(position2DWC, vec4(position3DWC, 1.0), czm_morphTime); vec4 morphPositionEC = czm_modelView * morphPosition; return czm_projection * morphPositionEC; } #ifdef QUANTIZATION_BITS12 uniform vec2 u_minMaxHeight; uniform mat4 u_scaleAndBias; #endif void main() { #ifdef QUANTIZATION_BITS12 vec2 xy = czm_decompressTextureCoordinates(compressed0.x); vec2 zh = czm_decompressTextureCoordinates(compressed0.y); vec3 position = vec3(xy, zh.x); float height = zh.y; vec2 textureCoordinates = czm_decompressTextureCoordinates(compressed0.z); height = height * (u_minMaxHeight.y - u_minMaxHeight.x) + u_minMaxHeight.x; position = (u_scaleAndBias * vec4(position, 1.0)).xyz; #if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)) && defined(INCLUDE_WEB_MERCATOR_Y) || defined(APPLY_MATERIAL) float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x; float encodedNormal = compressed1; #elif defined(INCLUDE_WEB_MERCATOR_Y) float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x; float encodedNormal = 0.0; #elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL) float webMercatorT = textureCoordinates.y; float encodedNormal = compressed0.w; #else float webMercatorT = textureCoordinates.y; float encodedNormal = 0.0; #endif #else // A single float per element vec3 position = position3DAndHeight.xyz; float height = position3DAndHeight.w; vec2 textureCoordinates = textureCoordAndEncodedNormals.xy; #if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)) && defined(INCLUDE_WEB_MERCATOR_Y) float webMercatorT = textureCoordAndEncodedNormals.z; float encodedNormal = textureCoordAndEncodedNormals.w; #elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL) float webMercatorT = textureCoordinates.y; float encodedNormal = textureCoordAndEncodedNormals.z; #elif defined(INCLUDE_WEB_MERCATOR_Y) float webMercatorT = textureCoordAndEncodedNormals.z; float encodedNormal = 0.0; #else float webMercatorT = textureCoordinates.y; float encodedNormal = 0.0; #endif #endif vec3 position3DWC = position + u_center3D; #ifdef GEODETIC_SURFACE_NORMALS vec3 ellipsoidNormal = geodeticSurfaceNormal; #else vec3 ellipsoidNormal = normalize(position3DWC); #endif #if defined(EXAGGERATION) && defined(GEODETIC_SURFACE_NORMALS) float exaggeration = u_verticalExaggerationAndRelativeHeight.x; float relativeHeight = u_verticalExaggerationAndRelativeHeight.y; float newHeight = (height - relativeHeight) * exaggeration + relativeHeight; // stop from going through center of earth float minRadius = min(min(czm_ellipsoidRadii.x, czm_ellipsoidRadii.y), czm_ellipsoidRadii.z); newHeight = max(newHeight, -minRadius); vec3 offset = ellipsoidNormal * (newHeight - height); position += offset; position3DWC += offset; height = newHeight; #endif gl_Position = getPosition(position, height, textureCoordinates); v_positionEC = (u_modifiedModelView * vec4(position, 1.0)).xyz; v_positionMC = position3DWC; // position in model coordinates v_textureCoordinates = vec3(textureCoordinates, webMercatorT); #if defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL) vec3 normalMC = czm_octDecode(encodedNormal); #if defined(EXAGGERATION) && defined(GEODETIC_SURFACE_NORMALS) vec3 projection = dot(normalMC, ellipsoidNormal) * ellipsoidNormal; vec3 rejection = normalMC - projection; normalMC = normalize(projection + rejection * exaggeration); #endif v_normalMC = normalMC; v_normalEC = czm_normal3D * v_normalMC; #endif #ifdef ENABLE_CLIPPING_POLYGONS vec2 sphericalLatLong = czm_approximateSphericalCoordinates(position3DWC); sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi); vec2 minDistance = vec2(czm_infinity); v_clippingPosition = vec2(czm_infinity); v_regionIndex = -1; for (int regionIndex = 0; regionIndex < CLIPPING_POLYGON_REGIONS_LENGTH; regionIndex++) { vec4 extents = unpackClippingExtents(u_clippingExtents, regionIndex); vec2 rectUv = (sphericalLatLong.yx - extents.yx) * extents.wz; vec2 clamped = clamp(rectUv, vec2(0.0), vec2(1.0)); vec2 distance = abs(rectUv - clamped) * extents.wz; float threshold = 0.01; if (minDistance.x > distance.x || minDistance.y > distance.y) { minDistance = distance; v_clippingPosition = rectUv; if (rectUv.x > threshold && rectUv.y > threshold && rectUv.x < 1.0 - threshold && rectUv.y < 1.0 - threshold) { v_regionIndex = regionIndex; } } } #endif #if defined(FOG) || (defined(GROUND_ATMOSPHERE) && !defined(PER_FRAGMENT_GROUND_ATMOSPHERE)) bool dynamicLighting = false; #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING)) dynamicLighting = true; #endif #if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN) vec3 atmosphereLightDirection = czm_sunDirectionWC; #else vec3 atmosphereLightDirection = czm_lightDirectionWC; #endif vec3 lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(position3DWC)); computeAtmosphereScattering( position3DWC, lightDirection, v_atmosphereRayleighColor, v_atmosphereMieColor, v_atmosphereOpacity ); #endif #if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) v_distance = length((czm_modelView3D * vec4(position3DWC, 1.0)).xyz); #endif #ifdef APPLY_MATERIAL float northPoleZ = czm_ellipsoidRadii.z; vec3 northPolePositionMC = vec3(0.0, 0.0, northPoleZ); vec3 vectorEastMC = normalize(cross(northPolePositionMC - v_positionMC, ellipsoidNormal)); float dotProd = abs(dot(ellipsoidNormal, v_normalMC)); v_slope = acos(dotProd); vec3 normalRejected = ellipsoidNormal * dotProd; vec3 normalProjected = v_normalMC - normalRejected; vec3 aspectVector = normalize(normalProjected); v_aspect = acos(dot(aspectVector, vectorEastMC)); float determ = dot(cross(vectorEastMC, aspectVector), ellipsoidNormal); v_aspect = czm_branchFreeTernary(determ < 0.0, 2.0 * czm_pi - v_aspect, v_aspect); v_height = height; #endif } `;var _Hi=x(T(),1),gR=`void computeAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity) { vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection); float atmosphereInnerRadius = length(positionWC); computeScattering( primaryRay, length(cameraToPositionWC), lightDirection, atmosphereInnerRadius, rayleighColor, mieColor, opacity ); } `;var XHi=x(T(),1);var ZHi=x(T(),1),vY=`uniform highp sampler2D u_vectorSegmentTexture; uniform highp sampler2D u_vectorWidthTexture; uniform highp sampler2D u_vectorColorTexture; uniform highp sampler2D u_vectorSegmentPrimitiveIndicesTexture; uniform highp sampler2D u_vectorGridCellIndicesTexture; uniform highp sampler2D u_vectorPolygonEdgeTexture; uniform highp sampler2D u_vectorPolygonEdgePrimitiveIndicesTexture; uniform highp sampler2D u_vectorPolygonGridCellIndicesTexture; // UV-space offset from the closest point on the segment to p. vec2 vectorOffsetToLine(vec2 p, vec4 line) { vec2 a = line.xy; vec2 b = line.zw; vec2 ab = b - a; float abLengthSquared = dot(ab, ab); if (abLengthSquared < 1.0e-8) { return p - a; } float t = clamp(dot(p - a, ab) / abLengthSquared, 0.0, 1.0); return p - (a + t * ab); } ivec2 vectorIndexToUv(int index, ivec2 size) { int v = index / size.x; int u = index - v * size.x; return ivec2(u, v); } // Drape clamped vector polylines onto the terrain surface. The fragment's // tile UV picks a grid cell, then only that cell's line segments (packed in // tile-local UV space) are tested for proximity. Within the line width, the // vector color is alpha-composited over the terrain (no discard). vec4 vectorPolylineRender(vec2 vectorUv, vec4 baseColor) { // A tile without polylines binds a 1x1 placeholder; a real grid header // [gridWidth, gridHeight, ...] is at least 3 texels. ivec2 headerSize = textureSize(u_vectorGridCellIndicesTexture, 0); if (headerSize.x * headerSize.y < 3) { return baseColor; } // Inverse UV-per-pixel Jacobian: measures line distance in screen pixels so // width stays constant under anisotropic (oblique) foreshortening. mat2 screenFromUv = inverse(mat2(dFdx(vectorUv), dFdy(vectorUv))); int gridWidth = int(texelFetch(u_vectorGridCellIndicesTexture, vectorIndexToUv(0, headerSize), 0).r); int gridHeight = int(texelFetch(u_vectorGridCellIndicesTexture, vectorIndexToUv(1, headerSize), 0).r); int cellX = clamp(int(vectorUv.x * float(gridWidth)), 0, gridWidth - 1); int cellY = clamp(int(vectorUv.y * float(gridHeight)), 0, gridHeight - 1); int cellIndex = cellX + cellY * gridWidth; // Cell end offsets follow the two gridWidth/gridHeight texels, so cell // N's end is at texel N + 2. A cell's start is the previous cell's end // (texel N + 1); cell 0's start is implicitly 0. int indexEnd = int(texelFetch(u_vectorGridCellIndicesTexture, vectorIndexToUv(cellIndex + 2, headerSize), 0).r); int indexStart = cellIndex == 0 ? 0 : int(texelFetch(u_vectorGridCellIndicesTexture, vectorIndexToUv(cellIndex + 1, headerSize), 0).r); ivec2 segmentTextureSize = textureSize(u_vectorSegmentTexture, 0); ivec2 primitiveTextureSize = textureSize(u_vectorWidthTexture, 0); for (int i = indexStart; i < indexEnd; i++) { ivec2 segmentUv = vectorIndexToUv(i, segmentTextureSize); vec4 segment = texelFetch(u_vectorSegmentTexture, segmentUv, 0); int primitiveIndex = int(texelFetch(u_vectorSegmentPrimitiveIndicesTexture, segmentUv, 0).r); ivec2 primitiveUv = vectorIndexToUv(primitiveIndex, primitiveTextureSize); float lineWidth = texelFetch(u_vectorWidthTexture, primitiveUv, 0).r * 255.0; vec2 offsetUv = vectorOffsetToLine(vectorUv, segment); if (length(screenFromUv * offsetUv) < lineWidth) { // Alpha-composite vector over terrain. vec4 vectorColor = texelFetch(u_vectorColorTexture, primitiveUv, 0); baseColor = vectorColor * vec4(vectorColor.aaa, 1.0) + baseColor * (1.0 - vectorColor.a); break; } } return baseColor; } // Composites a polygon's fill over baseColor when the pixel is inside it. A // negative index (empty cell or first iteration) or an outside pixel is a // no-op. vec4 vectorCompositePolygonFill(vec4 baseColor, int primitiveIndex, bool inside, ivec2 primitiveTextureSize) { if (!inside || primitiveIndex < 0) { return baseColor; } ivec2 primitiveUv = vectorIndexToUv(primitiveIndex, primitiveTextureSize); vec4 fillColor = texelFetch(u_vectorColorTexture, primitiveUv, 0); return fillColor * vec4(fillColor.aaa, 1.0) + baseColor * (1.0 - fillColor.a); } // True if a horizontal +x ray from p crosses the edge. The half-open interval // (> vs <=) counts a ray through a shared vertex exactly once. bool vectorEdgeCrossesRay(vec4 edge, vec2 p) { if ((edge.y > p.y) == (edge.w > p.y)) { return false; } float t = (p.y - edge.y) / (edge.w - edge.y); float xIntersect = edge.x + t * (edge.z - edge.x); return p.x < xIntersect; } // Drape clamped vector polygon fills onto the terrain surface. The fragment's // tile UV picks a grid cell whose edges were clipped to the cell on the CPU, // forming closed loops, so an even-odd horizontal ray cast within the cell // decides coverage. Edges arrive grouped by primitive; each covering // primitive's fill color is alpha-composited in primitive order (no discard). vec4 vectorPolygonRender(vec2 vectorUv, vec4 baseColor) { // A tile without polygons binds a 1x1 placeholder; a real grid header // [gridWidth, gridHeight, ...] is at least 3 texels. ivec2 headerSize = textureSize(u_vectorPolygonGridCellIndicesTexture, 0); if (headerSize.x * headerSize.y < 3) { return baseColor; } int gridWidth = int(texelFetch(u_vectorPolygonGridCellIndicesTexture, vectorIndexToUv(0, headerSize), 0).r); int gridHeight = int(texelFetch(u_vectorPolygonGridCellIndicesTexture, vectorIndexToUv(1, headerSize), 0).r); int cellX = clamp(int(vectorUv.x * float(gridWidth)), 0, gridWidth - 1); int cellY = clamp(int(vectorUv.y * float(gridHeight)), 0, gridHeight - 1); int cellIndex = cellX + cellY * gridWidth; // Cell end offsets follow the two gridWidth/gridHeight texels, so cell // N's end is at texel N + 2. A cell's start is the previous cell's end // (texel N + 1); cell 0's start is implicitly 0. int indexEnd = int(texelFetch(u_vectorPolygonGridCellIndicesTexture, vectorIndexToUv(cellIndex + 2, headerSize), 0).r); int indexStart = cellIndex == 0 ? 0 : int(texelFetch(u_vectorPolygonGridCellIndicesTexture, vectorIndexToUv(cellIndex + 1, headerSize), 0).r); ivec2 edgeTextureSize = textureSize(u_vectorPolygonEdgeTexture, 0); ivec2 primitiveTextureSize = textureSize(u_vectorColorTexture, 0); int currentPrimitive = -1; bool inside = false; for (int i = indexStart; i < indexEnd; i++) { ivec2 edgeUv = vectorIndexToUv(i, edgeTextureSize); vec4 edge = texelFetch(u_vectorPolygonEdgeTexture, edgeUv, 0); int primitiveIndex = int(texelFetch(u_vectorPolygonEdgePrimitiveIndicesTexture, edgeUv, 0).r); // A new primitive means the previous group is complete: composite it, // then start counting the new one fresh. if (primitiveIndex != currentPrimitive) { baseColor = vectorCompositePolygonFill(baseColor, currentPrimitive, inside, primitiveTextureSize); currentPrimitive = primitiveIndex; inside = false; } if (vectorEdgeCrossesRay(edge, vectorUv)) { inside = !inside; } } // The last primitive group has no trailing edge to trigger its composite. baseColor = vectorCompositePolygonFill(baseColor, currentPrimitive, inside, primitiveTextureSize); return baseColor; } `;var GHi=x(T(),1);var Xyt=new M;function Nyt(e,t){let n=e.unionClippingRegions,i=e.length,o=gs.useFloatTexture(t),r=gs.getTextureResolution(e,t,Xyt),s=r.x,a=r.y,c=o?Myt(s,a):kyt(s,a);return c+=` `,c+=n?Yyt(i):wyt(i),c}function Yyt(e){return`float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix) { vec4 position = czm_windowToEyeCoordinates(fragCoord); vec3 clipNormal = vec3(0.0); vec3 clipPosition = vec3(0.0); float clipAmount; float pixelWidth = czm_metersPerPixel(position); bool breakAndDiscard = false; for (int i = 0; i < ${e}; ++i) { vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix); clipNormal = clippingPlane.xyz; clipPosition = -clippingPlane.w * clipNormal; float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth; clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount)); if (amount <= 0.0) { breakAndDiscard = true; // HLSL compiler bug if we discard here: https://bugs.chromium.org/p/angleproject/issues/detail?id=1945#c6 break; } } if (breakAndDiscard) { discard; } return clipAmount; } `}function wyt(e){return`float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix) { bool clipped = true; vec4 position = czm_windowToEyeCoordinates(fragCoord); vec3 clipNormal = vec3(0.0); vec3 clipPosition = vec3(0.0); float clipAmount = 0.0; float pixelWidth = czm_metersPerPixel(position); for (int i = 0; i < ${e}; ++i) { vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix); clipNormal = clippingPlane.xyz; clipPosition = -clippingPlane.w * clipNormal; float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth; clipAmount = max(amount, clipAmount); clipped = clipped && (amount <= 0.0); } if (clipped) { discard; } return clipAmount; } `}function Myt(e,t){let n=1/e,i=1/t,o=`${n}`;o.indexOf(".")===-1&&(o+=".0");let r=`${i}`;return r.indexOf(".")===-1&&(r+=".0"),`vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform) { int pixY = clippingPlaneNumber / ${e}; int pixX = clippingPlaneNumber - (pixY * ${e}); // Sample from center of pixel float u = (float(pixX) + 0.5) * ${o}; float v = (float(pixY) + 0.5) * ${r}; vec4 plane = texture(packedClippingPlanes, vec2(u, v)); return czm_transformPlane(plane, transform); } `}function kyt(e,t){let n=1/e,i=1/t,o=`${n}`;o.indexOf(".")===-1&&(o+=".0");let r=`${i}`;return r.indexOf(".")===-1&&(r+=".0"),`vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform) { int clippingPlaneStartIndex = clippingPlaneNumber * 2; int pixY = clippingPlaneStartIndex / ${e}; int pixX = clippingPlaneStartIndex - (pixY * ${e}); // Sample from center of pixel float u = (float(pixX) + 0.5) * ${o}; float v = (float(pixY) + 0.5) * ${r}; vec4 oct32 = texture(packedClippingPlanes, vec2(u, v)) * 255.0; vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w); vec4 plane; plane.xyz = czm_octDecode(oct, 65535.0); plane.w = czm_unpackFloat(texture(packedClippingPlanes, vec2(u + ${o}, v))); return czm_transformPlane(plane, transform); } `}var qS=Nyt;var See=class{constructor(t,n,i,o,r,s){this.numberOfDayTextures=t,this.flags=n,this.material=i,this.shaderProgram=o,this.clippingShaderState=r,this.clippingPolygonShaderState=s}},Zee=class{constructor(){this.baseVertexShaderSource=void 0,this.baseFragmentShaderSource=void 0,this._shadersByTexturesFlags=[],this.material=void 0}getShaderProgram(t){let n=t.frameState,i=t.surfaceTile,o=t.numberOfDayTextures,r=t.applyBrightness,s=t.applyContrast,a=t.applyHue,c=t.applySaturation,d=t.applyGamma,u=t.applyAlpha,m=t.applyDayNightAlpha,p=t.applySplit,b=t.hasWaterMask,f=t.showReflectiveOcean,y=t.showOceanWaves,_=t.enableLighting,S=t.dynamicAtmosphereLighting,Z=t.dynamicAtmosphereLightingFromSun,V=t.showGroundAtmosphere,C=t.perFragmentGroundAtmosphere,G=t.hasVertexNormals,E=t.useWebMercatorProjection,v=t.enableFog,F=t.enableClippingPlanes,P=t.clippingPlanes,N=t.enableClippingPolygons,g=t.clippingPolygons,R=t.clippedByBoundaries,A=t.hasImageryLayerCutout,W=t.colorCorrect,X=t.highlightFillTile,Y=t.colorToAlpha,D=t.hasGeodeticSurfaceNormals,k=t.hasExaggeration,O=t.showUndergroundColor,w=t.translucent,H=i.vectorData?.show,te=0,K="",ee=i.renderedMesh.encoding;ee.quantization===Aa.BITS12&&(te=1,K="QUANTIZATION_BITS12");let _e=0,ue="";R&&(_e=1,ue="TILE_LIMIT_RECTANGLE");let Ce=0,Te="";A&&(Ce=1,Te="APPLY_IMAGERY_CUTOUT");let Re=n.mode,Le=((Re|+r<<2|+s<<3|+a<<4|+c<<5|+d<<6|+u<<7|+b<<8|+f<<9|+y<<10|+_<<11|+S<<12|+Z<<13|+V<<14|+C<<15|+G<<16|+E<<17|+v<<18|te<<19|+p<<20|+F<<21|+N<<22|_e<<23|Ce<<24|+W<<25|+X<<26|+Y<<27|+D<<28|+k<<29|+O<<30|+w<<31)>>>0)+(m?4294967296:0)+(H?8589934592:0),Xe=0;l(P)&&P.length>0&&(Xe=F?P.clippingPlanesState:0);let qe=0;l(g)&&g.length>0&&(qe=N?g.clippingPolygonsState:0);let je=i.surfaceShader;if(l(je)&&je.numberOfDayTextures===o&&je.flags===Le&&je.material===this.material&&je.clippingShaderState===Xe&&je.clippingPolygonShaderState===qe)return je.shaderProgram;let _t=this._shadersByTexturesFlags[o];if(l(_t)||(_t=this._shadersByTexturesFlags[o]=[]),je=_t[Le],!l(je)||je.material!==this.material||je.clippingShaderState!==Xe||je.clippingPolygonShaderState!==qe){let Qe=this.baseVertexShaderSource.clone(),Ee=this.baseFragmentShaderSource.clone();Xe!==0&&Ee.sources.unshift(qS(P,n.context)),qe!==0&&(Ee.sources.unshift(Dyt(n.context)),Qe.sources.unshift(Oyt(n.context))),Qe.defines.push(K),Ee.defines.push(`TEXTURE_UNITS ${o}`,ue,Te),r&&Ee.defines.push("APPLY_BRIGHTNESS"),s&&Ee.defines.push("APPLY_CONTRAST"),a&&Ee.defines.push("APPLY_HUE"),c&&Ee.defines.push("APPLY_SATURATION"),d&&Ee.defines.push("APPLY_GAMMA"),u&&Ee.defines.push("APPLY_ALPHA"),m&&Ee.defines.push("APPLY_DAY_NIGHT_ALPHA"),b&&Ee.defines.push("HAS_WATER_MASK"),f&&(Ee.defines.push("SHOW_REFLECTIVE_OCEAN"),Qe.defines.push("SHOW_REFLECTIVE_OCEAN")),y&&Ee.defines.push("SHOW_OCEAN_WAVES"),Y&&Ee.defines.push("APPLY_COLOR_TO_ALPHA"),O&&(Qe.defines.push("UNDERGROUND_COLOR"),Ee.defines.push("UNDERGROUND_COLOR")),w&&(Qe.defines.push("TRANSLUCENT"),Ee.defines.push("TRANSLUCENT")),_&&(G?(Qe.defines.push("ENABLE_VERTEX_LIGHTING"),Ee.defines.push("ENABLE_VERTEX_LIGHTING")):(Qe.defines.push("ENABLE_DAYNIGHT_SHADING"),Ee.defines.push("ENABLE_DAYNIGHT_SHADING"))),S&&(Qe.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),Ee.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),Z&&(Qe.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"),Ee.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"))),V&&(Qe.defines.push("GROUND_ATMOSPHERE"),Ee.defines.push("GROUND_ATMOSPHERE"),C&&(Qe.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"),Ee.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"))),Qe.defines.push("INCLUDE_WEB_MERCATOR_Y"),Ee.defines.push("INCLUDE_WEB_MERCATOR_Y"),v&&(Qe.defines.push("FOG"),Ee.defines.push("FOG")),p&&Ee.defines.push("APPLY_SPLIT"),F&&Ee.defines.push("ENABLE_CLIPPING_PLANES"),N&&(Ee.defines.push("ENABLE_CLIPPING_POLYGONS"),Qe.defines.push("ENABLE_CLIPPING_POLYGONS"),g.inverse&&Ee.defines.push("CLIPPING_INVERSE"),Ee.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${g.extentsCount}`),Qe.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${g.extentsCount}`)),W&&Ee.defines.push("COLOR_CORRECT"),X&&Ee.defines.push("HIGHLIGHT_FILL_TILE"),D&&Qe.defines.push("GEODETIC_SURFACE_NORMALS"),k&&Qe.defines.push("EXAGGERATION"),H&&(Qe.defines.push("HAS_VECTOR_LAYER"),Ee.defines.push("HAS_VECTOR_LAYER"),Ee.sources.unshift(vY));let He=` vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend) { vec4 color = initialColor; `;A&&(He+=` vec4 cutoutAndColorResult; bool texelUnclipped; `);for(let dt=0;dt<o;++dt)A?He+=` cutoutAndColorResult = u_dayTextureCutoutRectangles[${dt}]; texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y; cutoutAndColorResult = sampleAndBlend( `:He+=` color = sampleAndBlend( `,He+=` color, u_dayTextures[${dt}], u_dayTextureUseWebMercatorT[${dt}] ? textureCoordinates.xz : textureCoordinates.xy, u_dayTextureTexCoordsRectangle[${dt}], u_dayTextureTranslationAndScale[${dt}], ${u?`u_dayTextureAlpha[${dt}]`:"1.0"}, ${m?`u_dayTextureNightAlpha[${dt}]`:"1.0"}, ${m?`u_dayTextureDayAlpha[${dt}]`:"1.0"}, ${r?`u_dayTextureBrightness[${dt}]`:"0.0"}, ${s?`u_dayTextureContrast[${dt}]`:"0.0"}, ${a?`u_dayTextureHue[${dt}]`:"0.0"}, ${c?`u_dayTextureSaturation[${dt}]`:"0.0"}, ${d?`u_dayTextureOneOverGamma[${dt}]`:"0.0"}, ${p?`u_dayTextureSplit[${dt}]`:"0.0"}, ${Y?`u_colorsToAlpha[${dt}]`:"vec4(0.0)"}, nightBlend); `,A&&(He+=` color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color); `);He+=` return color; }`,Ee.sources.push(He),Qe.sources.push(Uyt(Re)),Qe.sources.push(Byt(E));let Rt=en.fromCache({context:n.context,vertexShaderSource:Qe,fragmentShaderSource:Ee,attributeLocations:ee.getAttributeLocations()});je=_t[Le]=new See(o,Le,this.material,Rt,Xe,qe)}return i.surfaceShader=je,je.shaderProgram}destroy(){let t,n,i=this._shadersByTexturesFlags;for(let o in i)if(i.hasOwnProperty(o)){let r=i[o];if(!l(r))continue;for(t in r)r.hasOwnProperty(t)&&(n=r[t],l(n)&&n.shaderProgram.destroy())}return me(this)}};function Uyt(e){let t="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPosition3DMode(position, height, textureCoordinates); }",n="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionColumbusViewMode(position, height, textureCoordinates); }",i="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionMorphingMode(position, height, textureCoordinates); }",o;switch(e){case se.SCENE3D:o=t;break;case se.SCENE2D:case se.COLUMBUS_VIEW:o=n;break;case se.MORPHING:o=i;break}return o}function Dyt(e){return e.webgl2?`void clipPolygons(highp sampler2D clippingDistance, int regionsLength, vec2 clippingPosition, int regionIndex) { czm_clipPolygons(clippingDistance, regionsLength, clippingPosition, regionIndex); }`:`void clipPolygons(highp sampler2D clippingDistance, int regionsLength, vec2 clippingPosition, int regionIndex) { }`}function Oyt(e){return e.webgl2?`vec4 unpackClippingExtents(highp sampler2D extentsTexture, int index) { return czm_unpackClippingExtents(extentsTexture, index); }`:`vec4 unpackClippingExtents(highp sampler2D extentsTexture, int index) { return vec4(); }`}function Byt(e){return e?"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DMercatorYPositionFraction(textureCoordinates); }":"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DGeographicYPositionFraction(textureCoordinates); }"}var FY=Zee;var NJi=x(T(),1);var mKi=x(T(),1);var YHi=x(T(),1),_1e={START:0,LOADING:1,DONE:2,FAILED:3};Object.freeze(_1e);var Ua=_1e;var MHi=x(T(),1),S1e={FAILED:0,UNLOADED:1,RECEIVING:2,RECEIVED:3,TRANSFORMING:4,TRANSFORMED:5,READY:6};Object.freeze(S1e);var Io=S1e;var e0=class e{constructor(){ct(this,"request");this.imagery=[],this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new ce(0,0,1,1),this.terrainData=void 0,this.vectorData=void 0,this.vertexArray=void 0,this.tileBoundingRegion=void 0,this.occludeePointInScaledSpace=new h,this.boundingVolumeSourceTile=void 0,this.boundingVolumeIsFromMesh=!1,this.terrainState=Io.UNLOADED,this.mesh=void 0,this.fill=void 0,this.pickBoundingSphere=new le,this.surfaceShader=void 0,this.isClipped=!0,this.clippedByBoundaries=!1}get eligibleForUnloading(){let t=this.terrainState,i=!(t===Io.RECEIVING||t===Io.TRANSFORMING),o=this.imagery;for(let r=0,s=o.length;i&&r<s;++r){let a=o[r];i=!l(a.loadingImagery)||a.loadingImagery.state!==On.TRANSITIONING}return i}get renderedMesh(){if(l(this.vertexArray))return this.mesh;if(l(this.fill))return this.fill.mesh}pick(t,n,i,o,r){if(!l(this.renderedMesh))return;let s=this.renderedMesh.pick(t,o,n,i);return h.clone(s,r)}freeResources(){l(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0),l(this.vectorData)&&($c.freeResources(this.vectorData),this.vectorData=void 0),this.terrainData=void 0,this.terrainState=Io.UNLOADED,this.mesh=void 0,this.fill=this.fill&&this.fill.destroy();let t=this.imagery;for(let n=0,i=t.length;n<i;++n)t[n].freeResources();this.imagery.length=0,this.freeVertexArray()}freeVertexArray(){e._freeVertexArray(this.vertexArray),this.vertexArray=void 0,e._freeVertexArray(this.wireframeVertexArray),this.wireframeVertexArray=void 0}static initialize(t,n,i,o){l(t.data)||(t.data=new e),t.state===Ua.START&&(zyt(t,n,i,o),t.state=Ua.LOADING)}static processStateMachine(t,n,i,o,r,s,a,c){e.initialize(t,i,o,r);let d=t.data;if(t.state===Ua.LOADING&&Hyt(t,n,i,o,r,s,a),c)return;let u=t.renderable;t.renderable=l(d.vertexArray);let m=d.terrainState===Io.READY;t.upsampledFromParent=l(d.terrainData)&&d.terrainData.wasCreatedByUpsampling();let p=d.processImagery(t,i,n);if(m&&p){let b=t._loadedCallbacks,f={};for(let y in b)b.hasOwnProperty(y)&&(b[y](t)||(f[y]=b[y]));t._loadedCallbacks=f,t.state=Ua.DONE}u&&(t.renderable=!0)}processImagery(t,n,i,o){let r=t.data,s=t.upsampledFromParent,a=!1,c=!0,d=r.imagery,u,m;for(u=0,m=d.length;u<m;++u){let p=d[u];if(!l(p.loadingImagery)){s=!1;continue}if(p.loadingImagery.state===On.PLACEHOLDER){let f=p.loadingImagery.imageryLayer;if(f.ready){p.freeResources(),d.splice(u,1),f._createTileImagerySkeletons(t,n,u),--u,m=d.length;continue}else s=!1}let b=p.processStateMachine(t,i,o);c=c&&b,a=a||b||l(p.readyImagery),s=s&&l(p.loadingImagery)&&(p.loadingImagery.state===On.FAILED||p.loadingImagery.state===On.INVALID)}return t.upsampledFromParent=s,t.renderable=t.renderable&&(a||c),c}addGeodeticSurfaceNormals(t,n){Z1e(this,!0,t,n)}removeGeodeticSurfaceNormals(t){Z1e(this,!1,void 0,t)}updateExaggeration(t,n,i){let o=this,r=o.renderedMesh;if(r===void 0)return;let s=n.verticalExaggeration,a=n.verticalExaggerationRelativeHeight,c=s!==1,d=r.encoding,u=d.exaggeration!==s,m=d.exaggerationRelativeHeight!==a;if(u||m){if(u)if(c&&!d.hasGeodeticSurfaceNormals){let b=t.tilingScheme.ellipsoid;o.addGeodeticSurfaceNormals(b,n)}else!c&&d.hasGeodeticSurfaceNormals&&o.removeGeodeticSurfaceNormals(n);if(d.exaggeration=s,d.exaggerationRelativeHeight=a,i!==void 0){i._tileToUpdateHeights.push(t);let b=t.customData;for(let f of b)f.level=-1}r.updateExaggeration(s,a)}}updateSceneMode(t){let i=this.renderedMesh;i!==void 0&&i.updateSceneMode(t)}static _createVertexArrayForMesh(t,n){let i=n.vertices,o=et.createVertexBuffer({context:t,typedArray:i,usage:Ie.STATIC_DRAW}),r=n.encoding.getAttributes(o),s=n.indices.indexBuffers||{},a=s[t.id];if(!l(a)||a.isDestroyed()){let c=n.indices;a=et.createIndexBuffer({context:t,typedArray:c,usage:Ie.STATIC_DRAW,indexDatatype:De.fromSizeInBytes(c.BYTES_PER_ELEMENT)}),a.vertexArrayDestroyable=!1,a.referenceCount=1,s[t.id]=a,n.indices.indexBuffers=s}else++a.referenceCount;return new Dn({context:t,attributes:r,indexBuffer:a})}static _freeVertexArray(t){if(l(t)){let n=t.indexBuffer;t.isDestroyed()||t.destroy(),l(n)&&!n.isDestroyed()&&l(n.referenceCount)&&(--n.referenceCount,n.referenceCount===0&&n.destroy())}}_findAncestorTileWithTerrainData(t){let n=t.parent;for(;l(n)&&(!l(n.data)||!l(n.data.terrainData)||n.data.terrainData.wasCreatedByUpsampling());)n=n.parent;return n}_computeWaterMaskTranslationAndScale(t,n,i){let o=n.rectangle,r=t.rectangle,s=r.width,a=r.height,c=s/o.width,d=a/o.height;return i.x=c*(r.west-o.west)/s,i.y=d*(r.south-o.south)/a,i.z=c,i.w=d,i}};function Z1e(e,t,n,i){let o=e.renderedMesh,r=o.vertices,s=o.encoding,a=r.length/s.stride,c=mr.clone(s);c.hasGeodeticSurfaceNormals=t,c=mr.clone(c);let d=c.stride,u=new Float32Array(a*d);t?s.addGeodeticSurfaceNormals(r,u,n):s.removeGeodeticSurfaceNormals(r,u),o.vertices=u,o.stride=d,o!==e.mesh?(e0._freeVertexArray(e.fill.vertexArray),e.fill.vertexArray=e0._createVertexArrayForMesh(i.context,o)):(e0._freeVertexArray(e.vertexArray),e.vertexArray=e0._createVertexArrayForMesh(i.context,o)),e0._freeVertexArray(e.wireframeVertexArray),e.wireframeVertexArray=void 0}function zyt(e,t,n,i){let o=t.getTileDataAvailable(e.x,e.y,e.level);if(!l(o)&&l(e.parent)){let s=e.parent,a=s.data;l(a)&&l(a.terrainData)&&(o=a.terrainData.isChildAvailable(s.x,s.y,e.x,e.y))}let r=e.data;o===!1&&(r.terrainState=Io.FAILED);for(let s=0,a=i.length;s<a;++s){let c=i.get(s);c.show&&c._createTileImagerySkeletons(e,t)}}function Hyt(e,t,n,i,o,r,s){let a=e.data,c=e.parent;if(a.terrainState===Io.FAILED&&c!==void 0){let d=c.data;d!==void 0&&d.terrainData!==void 0&&d.terrainData.canUpsample!==!1||e0.processStateMachine(c,t,n,i,o,r,s,!0)}if(a.terrainState===Io.FAILED&&Kyt(a,e,t,n,e.x,e.y,e.level),a.terrainState===Io.UNLOADED&&Jyt(a,n,e.x,e.y,e.level),a.terrainState===Io.RECEIVED&&Qyt(a,t,n,e.x,e.y,e.level),a.terrainState===Io.TRANSFORMED&&(qyt(a,t.context,n,e.x,e.y,e.level,s),a.updateExaggeration(e,t,r)),a.terrainState>=Io.RECEIVED&&a.waterMaskTexture===void 0&&n.hasWaterMask)if(a.terrainData.waterMask!==void 0)ext(t.context,a);else{let u=a._findAncestorTileWithTerrainData(e),m=u?.data;l(u)&&l(m.waterMaskTexture)&&(a.waterMaskTexture=m.waterMaskTexture,++a.waterMaskTexture.referenceCount,a._computeWaterMaskTranslationAndScale(e,u,a.waterMaskTranslationAndScale))}}function Kyt(e,t,n,i,o,r,s){let a=t.parent;if(!a){t.state=Ua.FAILED;return}let d=a.data.terrainData,u=a.x,m=a.y,p=a.level;if(!l(d))return;let b=d.upsample(i.tilingScheme,u,m,p,o,r,s);l(b)&&(e.terrainState=Io.RECEIVING,Promise.resolve(b).then(function(f){l(f)&&(e.terrainData=f,e.terrainState=Io.RECEIVED)}).catch(function(){e.terrainState=Io.FAILED}))}function Jyt(e,t,n,i,o){function r(c){if(!l(c)){e.terrainState=Io.UNLOADED,e.request=void 0;return}e.terrainData=c,e.terrainState=Io.RECEIVED,e.request=void 0}function s(c){if(e.request.state===Ti.CANCELLED){e.terrainData=void 0,e.terrainState=Io.UNLOADED,e.request=void 0;return}e.terrainState=Io.FAILED,e.request=void 0;let d=`Failed to obtain terrain tile X: ${n} Y: ${i} Level: ${o}. Error message: "${c}"`;t._requestError=zo.reportError(t._requestError,t,t.errorEvent,d,n,i,o),t._requestError.retry&&a()}function a(){let c=new _r({throttle:!1,throttleByServer:!0,type:ks.TERRAIN});e.request=c;let d=t.requestTileGeometry(n,i,o,c);l(d)?(e.terrainState=Io.RECEIVING,Promise.resolve(d).then(function(u){r(u)}).catch(function(u){s(u)})):(e.terrainState=Io.UNLOADED,e.request=void 0)}a()}var jyt={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0,throttle:!0};function Qyt(e,t,n,i,o,r){let s=n.tilingScheme,a=jyt;a.tilingScheme=s,a.x=i,a.y=o,a.level=r,a.exaggeration=t.verticalExaggeration,a.exaggerationRelativeHeight=t.verticalExaggerationRelativeHeight,a.throttle=!0;let d=e.terrainData.createMesh(a);l(d)&&(e.terrainState=Io.TRANSFORMING,Promise.resolve(d).then(function(u){e.mesh=u,e.terrainState=Io.TRANSFORMED}).catch(function(){e.terrainState=Io.FAILED}))}function qyt(e,t,n,i,o,r,s){e.vertexArray=e0._createVertexArrayForMesh(t,e.mesh),e.terrainState=Io.READY,e.fill=e.fill&&e.fill.destroy(s)}function $yt(e){let t=e.cache.tile_waterMaskData;if(!l(t)){let n=Ct.create({context:e,pixelFormat:Be.LUMINANCE,pixelDatatype:Me.UNSIGNED_BYTE,source:{arrayBufferView:new Uint8Array([255]),width:1,height:1}});n.referenceCount=1;let i=new kt({wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR,magnificationFilter:ni.LINEAR});t={allWaterTexture:n,sampler:i,destroy:function(){this.allWaterTexture.destroy()}},e.cache.tile_waterMaskData=t}return t}function ext(e,t){let n=t.terrainData.waterMask,i=$yt(e),o,r=n.length;if(n instanceof ImageBitmap)o=Ct.create({context:e,source:n,sampler:i.sampler,flipY:!1,skipColorSpaceConversion:!0});else if(r===1)if(n[0]!==0)o=i.allWaterTexture;else return;else{let s=Math.sqrt(r);o=Ct.create({context:e,pixelFormat:Be.LUMINANCE,pixelDatatype:Me.UNSIGNED_BYTE,source:{width:s,height:s,arrayBufferView:n},sampler:i.sampler,flipY:!1}),o.referenceCount=0}++o.referenceCount,t.waterMaskTexture=o,ce.fromElements(0,0,1,1,t.waterMaskTranslationAndScale)}var ih=e0;var NKi=x(T(),1);var pKi=x(T(),1),V1e={NONE:0,CULLED:1,RENDERED:2,REFINED:3,RENDERED_AND_KICKED:6,REFINED_AND_KICKED:7,CULLED_BUT_NEEDED:9,wasKicked:function(e){return e>=V1e.RENDERED_AND_KICKED},originalResult:function(e){return e&3},kick:function(e){return e|4}},hi=V1e;function xR(e){this.tile=e,this.frameLastUpdated=void 0,this.westMeshes=[],this.westTiles=[],this.southMeshes=[],this.southTiles=[],this.eastMeshes=[],this.eastTiles=[],this.northMeshes=[],this.northTiles=[],this.southwestMesh=void 0,this.southwestTile=void 0,this.southeastMesh=void 0,this.southeastTile=void 0,this.northwestMesh=void 0,this.northwestTile=void 0,this.northeastMesh=void 0,this.northeastTile=void 0,this.changedThisFrame=!0,this.visitedFrame=void 0,this.enqueuedFrame=void 0,this.mesh=void 0,this.vertexArray=void 0,this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new ce}xR.prototype.update=function(e,t,n){this.changedThisFrame&&(W1e(e,t,this.tile,n),this.changedThisFrame=!1)};xR.prototype.destroy=function(e){this._destroyVertexArray(e),l(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0)};xR.prototype._destroyVertexArray=function(e){l(this.vertexArray)&&(l(e)?e.push(this.vertexArray):ih._freeVertexArray(this.vertexArray),this.vertexArray=void 0)};var txt=new Vy;xR.updateFillTiles=function(e,t,n,i){let o=e._quadtree,r=o._levelZeroTiles,s=o._lastSelectionFrameNumber,a=txt;a.clear();for(let d=0;d<t.length;++d){let u=t[d];l(u.data.vertexArray)&&a.enqueue(t[d])}let c=a.dequeue();for(;c!==void 0;){let d=c.findTileToWest(r),u=c.findTileToSouth(r),m=c.findTileToEast(r),p=c.findTileToNorth(r);Za(e,n,c,d,s,Ln.EAST,!1,a,i),Za(e,n,c,u,s,Ln.NORTH,!1,a,i),Za(e,n,c,m,s,Ln.WEST,!1,a,i),Za(e,n,c,p,s,Ln.SOUTH,!1,a,i);let b=d.findTileToNorth(r),f=d.findTileToSouth(r),y=m.findTileToNorth(r),_=m.findTileToSouth(r);Za(e,n,c,b,s,Ln.SOUTHEAST,!1,a,i),Za(e,n,c,y,s,Ln.SOUTHWEST,!1,a,i),Za(e,n,c,f,s,Ln.NORTHEAST,!1,a,i),Za(e,n,c,_,s,Ln.NORTHWEST,!1,a,i),c=a.dequeue()}};function Za(e,t,n,i,o,r,s,a,c){if(i===void 0)return;let d=i;for(;d&&(d._lastSelectionResultFrame!==o||hi.wasKicked(d._lastSelectionResult)||hi.originalResult(d._lastSelectionResult)===hi.CULLED);){if(s)return;let u=d.parent;if(r>=Ln.NORTHWEST&&u!==void 0)switch(r){case Ln.NORTHWEST:d=d===u.northwestChild?u:void 0;break;case Ln.NORTHEAST:d=d===u.northeastChild?u:void 0;break;case Ln.SOUTHWEST:d=d===u.southwestChild?u:void 0;break;case Ln.SOUTHEAST:d=d===u.southeastChild?u:void 0;break}else d=u}if(d!==void 0){if(d._lastSelectionResult===hi.RENDERED){if(l(d.data.vertexArray))return;nxt(e,t,n,d,r,o,a,c);return}if(hi.originalResult(i._lastSelectionResult)!==hi.CULLED)switch(r){case Ln.WEST:Za(e,t,n,i.northwestChild,o,r,!0,a,c),Za(e,t,n,i.southwestChild,o,r,!0,a,c);break;case Ln.EAST:Za(e,t,n,i.southeastChild,o,r,!0,a,c),Za(e,t,n,i.northeastChild,o,r,!0,a,c);break;case Ln.SOUTH:Za(e,t,n,i.southwestChild,o,r,!0,a,c),Za(e,t,n,i.southeastChild,o,r,!0,a,c);break;case Ln.NORTH:Za(e,t,n,i.northeastChild,o,r,!0,a,c),Za(e,t,n,i.northwestChild,o,r,!0,a,c);break;case Ln.NORTHWEST:Za(e,t,n,i.northwestChild,o,r,!0,a,c);break;case Ln.NORTHEAST:Za(e,t,n,i.northeastChild,o,r,!0,a,c);break;case Ln.SOUTHWEST:Za(e,t,n,i.southwestChild,o,r,!0,a,c);break;case Ln.SOUTHEAST:Za(e,t,n,i.southeastChild,o,r,!0,a,c);break;default:throw new ge("Invalid edge")}}}function nxt(e,t,n,i,o,r,s,a){let c=i.data;if(c.fill===void 0)c.fill=new xR(i);else if(c.fill.visitedFrame===r)return;c.fill.enqueuedFrame!==r&&(c.fill.enqueuedFrame=r,c.fill.changedThisFrame=!1,s.enqueue(i)),ixt(e,t,n,i,o,a)}function ixt(e,t,n,i,o,r){let s=i.data.fill,a,c=n.data.fill;l(c)?(c.visitedFrame=t.frameNumber,c.changedThisFrame&&(W1e(e,t,n,r),c.changedThisFrame=!1),a=n.data.fill.mesh):a=n.data.mesh;let d,u;switch(o){case Ln.WEST:d=s.westMeshes,u=s.westTiles;break;case Ln.SOUTH:d=s.southMeshes,u=s.southTiles;break;case Ln.EAST:d=s.eastMeshes,u=s.eastTiles;break;case Ln.NORTH:d=s.northMeshes,u=s.northTiles;break;case Ln.NORTHWEST:s.changedThisFrame=s.changedThisFrame||s.northwestMesh!==a,s.northwestMesh=a,s.northwestTile=n;return;case Ln.NORTHEAST:s.changedThisFrame=s.changedThisFrame||s.northeastMesh!==a,s.northeastMesh=a,s.northeastTile=n;return;case Ln.SOUTHWEST:s.changedThisFrame=s.changedThisFrame||s.southwestMesh!==a,s.southwestMesh=a,s.southwestTile=n;return;case Ln.SOUTHEAST:s.changedThisFrame=s.changedThisFrame||s.southeastMesh!==a,s.southeastMesh=a,s.southeastTile=n;return}if(n.level<=i.level){s.changedThisFrame=s.changedThisFrame||d[0]!==a||d.length!==1,d[0]=a,u[0]=n,d.length=1,u.length=1;return}let m,p,b,f,y=n.rectangle,_,S=i.rectangle;switch(o){case Ln.WEST:for(_=(S.north-S.south)*L.EPSILON5,m=0;m<u.length&&(b=u[m],f=b.rectangle,!L.greaterThan(y.north,f.south,_));++m);for(p=m;p<u.length&&(b=u[p],f=b.rectangle,!L.greaterThanOrEquals(y.south,f.north,_));++p);break;case Ln.SOUTH:for(_=(S.east-S.west)*L.EPSILON5,m=0;m<u.length&&(b=u[m],f=b.rectangle,!L.lessThan(y.west,f.east,_));++m);for(p=m;p<u.length&&(b=u[p],f=b.rectangle,!L.lessThanOrEquals(y.east,f.west,_));++p);break;case Ln.EAST:for(_=(S.north-S.south)*L.EPSILON5,m=0;m<u.length&&(b=u[m],f=b.rectangle,!L.lessThan(y.south,f.north,_));++m);for(p=m;p<u.length&&(b=u[p],f=b.rectangle,!L.lessThanOrEquals(y.north,f.south,_));++p);break;case Ln.NORTH:for(_=(S.east-S.west)*L.EPSILON5,m=0;m<u.length&&(b=u[m],f=b.rectangle,!L.greaterThan(y.east,f.west,_));++m);for(p=m;p<u.length&&(b=u[p],f=b.rectangle,!L.greaterThanOrEquals(y.west,f.east,_));++p);break}p-m===1?(s.changedThisFrame=s.changedThisFrame||d[m]!==a,d[m]=a,u[m]=n):(s.changedThisFrame=!0,d.splice(m,p-m,a),u.splice(m,p-m,n))}var $S=new fe,oxt=new fe,yR=new h,Gee=new h,Vee=new M,Cee=new M,wu=new M;function e3(){this.height=0,this.encodedNormal=new M}function KB(e,t,n,i,o,r,s,a,c){if(l(o))return o;let d;if(l(r)&&l(s))d=(r.height+s.height)*.5;else if(l(r))d=r.height;else if(l(s))d=s.height;else if(l(a))d=a.height;else{let m=e.tile.data.tileBoundingRegion,p=0,b=0;l(m)&&(p=m.minimumHeight,b=m.maximumHeight),d=(p+b)*.5}return v1e(e,t,n,i,d,c),c}var rxt={minimumHeight:0,maximumHeight:0},sxt=new h,C1e=new e3,R1e=new e3,G1e=new e3,A1e=new e3,axt=typeof Uint8Array<"u"?new Uint8Array(81):void 0,cxt={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0};function W1e(e,t,n,i){ih.initialize(n,e.terrainProvider,e.vectorProvider,e._imageryLayers);let o=n.data,r=o.fill,s=n.rectangle,a=t.verticalExaggeration,c=t.verticalExaggerationRelativeHeight,d=a!==1,u=n.tilingScheme.ellipsoid,m=jB(r,u,0,1,r.northwestTile,r.northwestMesh,r.northTiles,r.northMeshes,r.westTiles,r.westMeshes,G1e),p=jB(r,u,0,0,r.southwestTile,r.southwestMesh,r.westTiles,r.westMeshes,r.southTiles,r.southMeshes,C1e),b=jB(r,u,1,0,r.southeastTile,r.southeastMesh,r.southTiles,r.southMeshes,r.eastTiles,r.eastMeshes,R1e),f=jB(r,u,1,1,r.northeastTile,r.northeastMesh,r.eastTiles,r.eastMeshes,r.northTiles,r.northMeshes,A1e);m=KB(r,u,0,1,m,p,f,b,G1e),p=KB(r,u,0,0,p,m,b,f,C1e),b=KB(r,u,1,1,b,p,f,m,R1e),f=KB(r,u,1,1,f,b,m,p,A1e);let y=p.height,_=b.height,S=m.height,Z=f.height,V=Math.min(y,_,S,Z),C=Math.max(y,_,S,Z),G=(V+C)*.5,E,v,F=e.getLevelMaximumGeometricError(n.level),P=u.maximumRadius-F,N=Math.acos(P/u.maximumRadius)*4;if(N*=1.5,s.width>N&&C-V<=F){let A=new Vc({width:9,height:9,buffer:axt,structure:{heightOffset:C}}),W=cxt;W.tilingScheme=n.tilingScheme,W.x=n.x,W.y=n.y,W.level=n.level,W.exaggeration=a,W.exaggerationRelativeHeight=c,r.mesh=A._createMeshSync(W)}else{let A=d,W=re.center(s,oxt);W.height=G;let X=u.cartographicToCartesian(W,sxt),Y=new mr(X,void 0,void 0,void 0,void 0,!0,!0,A,a,c),D=5,k;for(k=r.westMeshes,E=0,v=k.length;E<v;++E)D+=k[E].eastIndicesNorthToSouth.length;for(k=r.southMeshes,E=0,v=k.length;E<v;++E)D+=k[E].northIndicesWestToEast.length;for(k=r.eastMeshes,E=0,v=k.length;E<v;++E)D+=k[E].westIndicesSouthToNorth.length;for(k=r.northMeshes,E=0,v=k.length;E<v;++E)D+=k[E].southIndicesEastToWest.length;let O=rxt;O.minimumHeight=V,O.maximumHeight=C;let w=Y.stride,z=new Float32Array(D*w),H=0,te=H;H=JB(u,s,Y,z,H,0,1,m.height,m.encodedNormal,1,O),H=qB(r,u,Y,z,H,r.westTiles,r.westMeshes,Ln.EAST,O);let K=H;H=JB(u,s,Y,z,H,0,0,p.height,p.encodedNormal,0,O),H=qB(r,u,Y,z,H,r.southTiles,r.southMeshes,Ln.NORTH,O);let $=H;H=JB(u,s,Y,z,H,1,0,b.height,b.encodedNormal,0,O),H=qB(r,u,Y,z,H,r.eastTiles,r.eastMeshes,Ln.WEST,O);let ee=H;H=JB(u,s,Y,z,H,1,1,f.height,f.encodedNormal,1,O),H=qB(r,u,Y,z,H,r.northTiles,r.northMeshes,Ln.SOUTH,O),V=O.minimumHeight,C=O.maximumHeight;let de=$t.fromRectangle(s,V,C,n.tilingScheme.ellipsoid),_e=fi.geodeticLatitudeToMercatorAngle(s.south),ue=1/(fi.geodeticLatitudeToMercatorAngle(s.north)-_e),Ce=(fi.geodeticLatitudeToMercatorAngle(W.latitude)-_e)*ue,Te=u.geodeticSurfaceNormalCartographic($S,Gee),Re=cn.octEncode(Te,Vee),Le=H;Y.encode(z,H*w,de.center,M.fromElements(.5,.5,wu),G,Re,Ce,Te),++H;let Xe=H,qe=Xe<256?1:2,je=(Xe-1)*3,_t=je*qe,Qe=(z.length-Xe*w)*Float32Array.BYTES_PER_ELEMENT,Ee;if(Qe>=_t){let St=Xe*w*Float32Array.BYTES_PER_ELEMENT;Ee=Xe<256?new Uint8Array(z.buffer,St,je):new Uint16Array(z.buffer,St,je)}else Ee=Xe<256?new Uint8Array(je):new Uint16Array(je);z=new Float32Array(z.buffer,0,Xe*w);let He=0;for(E=0;E<Xe-2;++E)Ee[He++]=Le,Ee[He++]=E,Ee[He++]=E+1;Ee[He++]=Le,Ee[He++]=E,Ee[He]=0;let Rt=[];for(E=K;E>=te;--E)Rt.push(E);let dt=[];for(E=$;E>=K;--E)dt.push(E);let gn=[];for(E=ee;E>=$;--E)gn.push(E);let Bt=[];for(Bt.push(0),E=Le-1;E>=ee;--E)Bt.push(E);r.mesh=new $a(Y.center,z,Ee,je,Xe,V,C,s,le.fromOrientedBoundingBox(de),pxt(e,de.center,s,V,C),Y.stride,de,Y,Rt,dt,gn,Bt)}let g=t.context;r._destroyVertexArray(i),r.vertexArray=ih._createVertexArrayForMesh(g,r.mesh),o.processImagery(n,e.terrainProvider,t,!0);let R=r.waterMaskTexture;if(r.waterMaskTexture=void 0,e.terrainProvider.hasWaterMask){let A=o._findAncestorTileWithTerrainData(n);l(A)&&l(A.data.waterMaskTexture)&&(r.waterMaskTexture=A.data.waterMaskTexture,++r.waterMaskTexture.referenceCount,o._computeWaterMaskTranslationAndScale(n,A,r.waterMaskTranslationAndScale))}l(R)&&(--R.referenceCount,R.referenceCount===0&&R.destroy())}function JB(e,t,n,i,o,r,s,a,c,d,u){let m=$S;m.longitude=L.lerp(t.west,t.east,r),m.latitude=L.lerp(t.south,t.north,s),m.height=a;let p=e.cartographicToCartesian(m,yR),b;n.hasGeodeticSurfaceNormals&&(b=e.geodeticSurfaceNormal(p,Gee));let f=Cee;return f.x=r,f.y=s,n.encode(i,o*n.stride,p,f,a,c,d,b),u.minimumHeight=Math.min(u.minimumHeight,a),u.maximumHeight=Math.max(u.maximumHeight,a),o+1}var $B=new re;function IY(e,t,n,i){let o=e.rectangle,r=t.rectangle;t.x===0&&n.x===1&&e.x===e.tilingScheme.getNumberOfXTilesAtLevel(e.level)-1?(o=re.clone(e.rectangle,$B),o.west-=L.TWO_PI,o.east-=L.TWO_PI):e.x===0&&n.x===0&&t.x===t.tilingScheme.getNumberOfXTilesAtLevel(t.level)-1&&(o=re.clone(e.rectangle,$B),o.west+=L.TWO_PI,o.east+=L.TWO_PI);let s=o.east-o.west,a=(r.west-o.west)/s,c=(r.east-o.west)/s,d=o.north-o.south,u=(r.south-o.south)/d,m=(r.north-o.south)/d,p=(n.x-a)/(c-a),b=(n.y-u)/(m-u);return Math.abs(p)<Math.EPSILON5?p=0:Math.abs(p-1)<Math.EPSILON5&&(p=1),Math.abs(b)<Math.EPSILON5?b=0:Math.abs(b-1)<Math.EPSILON5&&(b=1),i.x=p,i.y=b,i}var lxt=new M;function Ree(e,t,n,i,o){let r=e.encoding,s=e.vertices;if(o.height=r.decodeHeight(s,t),r.hasVertexNormals)r.getOctEncodedNormal(s,t,o.encodedNormal);else{let a=o.encodedNormal;a.x=0,a.y=0}}var dxt=new M,uxt=new h;function mxt(e,t,n,i,o,r,s,a,c,d){let u=i.encoding,m=i.vertices,p=IY(t,n,u.decodeTextureCoordinates(m,o,wu),wu),b=IY(t,n,u.decodeTextureCoordinates(m,r,Cee),Cee),f;c?f=(s-p.x)/(b.x-p.x):f=(a-p.y)/(b.y-p.y);let y=u.decodeHeight(m,o),_=u.decodeHeight(m,r),S=n.rectangle;$S.longitude=L.lerp(S.west,S.east,s),$S.latitude=L.lerp(S.south,S.north,a),d.height=$S.height=L.lerp(y,_,f);let Z;if(u.hasVertexNormals){let V=u.getOctEncodedNormal(m,o,lxt),C=u.getOctEncodedNormal(m,r,dxt),G=cn.octDecode(V.x,V.y,yR),E=cn.octDecode(C.x,C.y,uxt);Z=h.lerp(G,E,f,yR),h.normalize(Z,Z),cn.octEncode(Z,d.encodedNormal)}else Z=e.geodeticSurfaceNormalCartographic($S,yR),cn.octEncode(Z,d.encodedNormal)}function v1e(e,t,n,i,o,r){r.height=o;let s=t.geodeticSurfaceNormalCartographic($S,yR);cn.octEncode(s,r.encodedNormal)}function jB(e,t,n,i,o,r,s,a,c,d,u){if(L1e(e,t,a,s,!1,n,i,u)||L1e(e,t,d,c,!0,n,i,u))return u;let p;if(Aee(o,r))return n===0?i===0?p=r.eastIndicesNorthToSouth[0]:p=r.southIndicesEastToWest[0]:i===0?p=r.northIndicesWestToEast[0]:p=r.westIndicesSouthToNorth[0],Ree(r,p,n,i,u),u;let b;if(n===0?i===0?b=QB(e.westMeshes,e.westTiles,Ln.EAST,e.southMeshes,e.southTiles,Ln.NORTH,n,i):b=QB(e.northMeshes,e.northTiles,Ln.SOUTH,e.westMeshes,e.westTiles,Ln.EAST,n,i):i===0?b=QB(e.southMeshes,e.southTiles,Ln.NORTH,e.eastMeshes,e.eastTiles,Ln.WEST,n,i):b=QB(e.eastMeshes,e.eastTiles,Ln.WEST,e.northMeshes,e.northTiles,Ln.SOUTH,n,i),l(b))return v1e(e,t,n,i,b,u),u}function QB(e,t,n,i,o,r,s,a){let c=E1e(e,t,!1,n,s,a),d=E1e(i,o,!0,r,s,a);return l(c)&&l(d)?(c+d)*.5:l(c)?c:d}function qB(e,t,n,i,o,r,s,a,c){for(let d=0;d<r.length;++d)o=hxt(e,t,n,i,o,r[d],s[d],a,c);return o}function hxt(e,t,n,i,o,r,s,a,c){let d;a===Ln.EAST&&e.tile.x===0?(d=re.clone(r.rectangle,$B),d.west-=L.TWO_PI,d.east-=L.TWO_PI):a===Ln.WEST&&r.x===0&&(d=re.clone(r.rectangle,$B),d.west+=L.TWO_PI,d.east+=L.TWO_PI);let u=e.tile.rectangle,m,p;o>0&&(n.decodeTextureCoordinates(i,o-1,wu),m=wu.x,p=wu.y);let b,f;switch(a){case Ln.WEST:b=s.westIndicesSouthToNorth,f=!1;break;case Ln.NORTH:b=s.northIndicesWestToEast,f=!0;break;case Ln.EAST:b=s.eastIndicesNorthToSouth,f=!1;break;case Ln.SOUTH:b=s.southIndicesEastToWest,f=!0;break}let y=r,_=e.tile,S=s.encoding,Z=s.vertices,V=n.stride,C,G;S.hasWebMercatorT&&(C=fi.geodeticLatitudeToMercatorAngle(u.south),G=1/(fi.geodeticLatitudeToMercatorAngle(u.north)-C));for(let E=0;E<b.length;++E){let v=b[E],F=S.decodeTextureCoordinates(Z,v,wu);IY(y,_,F,F);let P=F.x,N=F.y,g=f?P:N;if(g<0||g>1||Math.abs(P-m)<L.EPSILON5&&Math.abs(N-p)<L.EPSILON5)continue;let R=Math.abs(P)<L.EPSILON5||Math.abs(P-1)<L.EPSILON5,A=Math.abs(N)<L.EPSILON5||Math.abs(N-1)<L.EPSILON5;if(R&&A)continue;let W=S.decodePosition(Z,v,yR),X=S.decodeHeight(Z,v),Y;S.hasVertexNormals?Y=S.getOctEncodedNormal(Z,v,Vee):(Y=Vee,Y.x=0,Y.y=0);let D=N;if(S.hasWebMercatorT){let O=L.lerp(u.south,u.north,N);D=(fi.geodeticLatitudeToMercatorAngle(O)-C)*G}let k;n.hasGeodeticSurfaceNormals&&(k=t.geodeticSurfaceNormal(W,Gee)),n.encode(i,o*V,W,F,X,Y,D,k),c.minimumHeight=Math.min(c.minimumHeight,X),c.maximumHeight=Math.max(c.maximumHeight,X),++o}return o}function E1e(e,t,n,i,o,r){let s,a,c;n?(s=0,a=e.length,c=1):(s=e.length-1,a=-1,c=-1);for(let d=s;d!==a;d+=c){let u=e[d],m=t[d];if(!Aee(m,u))continue;let p;switch(i){case Ln.WEST:p=u.westIndicesSouthToNorth;break;case Ln.SOUTH:p=u.southIndicesEastToWest;break;case Ln.EAST:p=u.eastIndicesNorthToSouth;break;case Ln.NORTH:p=u.northIndicesWestToEast;break}let b=p[n?0:p.length-1];if(l(b))return u.encoding.decodeHeight(u.vertices,b)}}function Aee(e,t){return l(t)&&(!l(e.data.fill)||!e.data.fill.changedThisFrame)}function L1e(e,t,n,i,o,r,s,a){let c,d,u,m,p,b=i[o?0:n.length-1],f=n[o?0:n.length-1];if(Aee(b,f)&&(r===0?s===0?(c=o?f.northIndicesWestToEast:f.eastIndicesNorthToSouth,d=o,u=o):(c=o?f.eastIndicesNorthToSouth:f.southIndicesEastToWest,d=!o,u=!1):s===0?(c=o?f.westIndicesSouthToNorth:f.northIndicesWestToEast,d=!o,u=!0):(c=o?f.southIndicesEastToWest:f.westIndicesSouthToNorth,d=o,u=!o),c.length>0)){m=o?0:c.length-1,p=c[m],f.encoding.decodeTextureCoordinates(f.vertices,p,wu);let y=IY(b,e.tile,wu,wu);if(y.x===r&&y.y===s)return Ree(f,p,r,s,a),!0;if(m=_o(c,d?r:s,function(_,S){f.encoding.decodeTextureCoordinates(f.vertices,_,wu);let Z=IY(b,e.tile,wu,wu);return u?d?Z.x-r:Z.y-s:d?r-Z.x:s-Z.y}),m<0){if(m=~m,m>0&&m<c.length)return mxt(t,b,e.tile,f,c[m-1],c[m],r,s,d,a),!0}else return Ree(f,c[m],r,s,a),!0}return!1}var fxt=[new h,new h,new h,new h];function pxt(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=fxt;return h.fromRadians(n.west,n.south,o,a,c[0]),h.fromRadians(n.east,n.south,o,a,c[1]),h.fromRadians(n.west,n.north,o,a,c[2]),h.fromRadians(n.east,n.north,o,a,c[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,r)}var TR=xR;var Eee=class e{constructor(t){this.lightingFadeOutDistance=65e5,this.lightingFadeInDistance=9e6,this.hasWaterMask=!1,this.showWaterEffect=!1,this.oceanNormalMap=void 0,this.zoomedOutOceanSpecularIntensity=.5,this.enableLighting=!1,this.dynamicAtmosphereLighting=!1,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=!1,this.shadows=Fn.RECEIVE_ONLY,this.vertexShadowDarkness=.3,this.fillHighlightColor=void 0,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this.showSkirts=!0,this.backFaceCulling=!0,this.undergroundColor=void 0,this.undergroundColorAlphaByDistance=void 0,this.lambertDiffuseMultiplier=0,this.materialUniformMap=void 0,this._materialUniformMap=void 0,this._quadtree=void 0,this._terrainProvider=t.terrainProvider,this._vectorProvider=t.vectorProvider,this._imageryLayers=t.imageryLayers,this._surfaceShaderSet=t.surfaceShaderSet,this._renderState=void 0,this._blendRenderState=void 0,this._disableCullingRenderState=void 0,this._disableCullingBlendRenderState=void 0,this._errorEvent=new Se,this._removeLayerAddedListener=this._imageryLayers.layerAdded.addEventListener(e.prototype._onLayerAdded,this),this._removeLayerRemovedListener=this._imageryLayers.layerRemoved.addEventListener(e.prototype._onLayerRemoved,this),this._removeLayerMovedListener=this._imageryLayers.layerMoved.addEventListener(e.prototype._onLayerMoved,this),this._removeLayerShownListener=this._imageryLayers.layerShownOrHidden.addEventListener(e.prototype._onLayerShownOrHidden,this),this._imageryLayersUpdatedEvent=new Se,this._layerOrderChanged=!1,this._tilesToRenderByTextureCount=[],this._drawCommands=[],this._uniformMaps=[],this._usedDrawCommands=0,this._vertexArraysToDestroy=[],this._debug={wireframe:!1,boundingSphereTile:void 0,tilesRendered:0,texturesRendered:0},this._baseColor=void 0,this._firstPassInitialColor=void 0,this.baseColor=new U(0,0,.5,1),this._clippingPlanes=void 0,this._clippingPolygons=void 0,this.cartographicLimitRectangle=re.clone(re.MAX_VALUE),this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1,this._oldVerticalExaggeration=void 0,this._oldVerticalExaggerationRelativeHeight=void 0,this._oldSceneMode=se.SCENE3D}get baseColor(){return this._baseColor}set baseColor(t){this._baseColor=t,this._firstPassInitialColor=ce.fromColor(t,this._firstPassInitialColor)}get quadtree(){return this._quadtree}set quadtree(t){this._quadtree=t}get tilingScheme(){if(l(this._terrainProvider))return this._terrainProvider.tilingScheme}get errorEvent(){return this._errorEvent}get imageryLayersUpdatedEvent(){return this._imageryLayersUpdatedEvent}get terrainProvider(){return this._terrainProvider}set terrainProvider(t){this._terrainProvider!==t&&(this._terrainProvider=t,l(this._quadtree)&&this._quadtree.invalidateAllTiles())}get vectorProvider(){return this._vectorProvider}get clippingPlanes(){return this._clippingPlanes}set clippingPlanes(t){gs.setOwner(t,this,"_clippingPlanes")}get clippingPolygons(){return this._clippingPolygons}set clippingPolygons(t){lf.setOwner(t,this,"_clippingPolygons")}update(t){this._imageryLayers._update()}initialize(t){this._imageryLayers.queueReprojectionCommands(t),this._layerOrderChanged&&(this._layerOrderChanged=!1,this._quadtree.forEachLoadedTile(function(r){r.data.imagery.sort(bxt)}));let n=this._vectorProvider;n.update(),this._quadtree.forEachRenderedTile(r=>{let s=r.data;l(s.vectorData)?s.vectorData=n.updateTileData(r.x,r.y,r.level,t.context,s.vectorData):s.vectorData=n.requestTileData(r.x,r.y,r.level,t.context)}),n.makeClean(),gxt(this,t);let i=this._vertexArraysToDestroy,o=i.length;for(let r=0;r<o;++r)ih._freeVertexArray(i[r]);i.length=0}beginUpdate(t){let n=this._tilesToRenderByTextureCount;for(let r=0,s=n.length;r<s;++r){let a=n[r];l(a)&&(a.length=0)}let i=this._clippingPlanes;l(i)&&i.enabled&&i.update(t);let o=this._clippingPolygons;l(o)&&o.enabled&&(o.update(t),o.queueCommands(t)),this._usedDrawCommands=0,this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1}endUpdate(t){if(!l(this._renderState)){this._renderState=Oe.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:ac.LESS}}),this._blendRenderState=Oe.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:ac.LESS_OR_EQUAL},blending:tn.ALPHA_BLEND});let c=Je(this._renderState,!0);c.cull.enabled=!1,this._disableCullingRenderState=Oe.fromCache(c),c=Je(this._blendRenderState,!0),c.cull.enabled=!1,this._disableCullingBlendRenderState=Oe.fromCache(c)}this._hasFillTilesThisFrame&&this._hasLoadedTilesThisFrame&&TR.updateFillTiles(this,this._quadtree._tilesToRender,t,this._vertexArraysToDestroy);let n=this.quadtree,i=t.verticalExaggeration,o=t.verticalExaggerationRelativeHeight,r=this._oldVerticalExaggeration!==i||this._oldVerticalExaggerationRelativeHeight!==o;this._oldVerticalExaggeration=i,this._oldVerticalExaggerationRelativeHeight=o,r&&n.forEachLoadedTile(function(c){c.data.updateExaggeration(c,t,n)});let s=this._oldSceneMode!==t.mode;this._oldSceneMode=t.mode,s&&n.forEachLoadedTile(function(c){c.data.updateSceneMode(t.mode)});let a=this._tilesToRenderByTextureCount;for(let c=0,d=a.length;c<d;++c){let u=a[c];if(l(u))for(let m=0,p=u.length;m<p;++m){let b=u[m],y=b.data.tileBoundingRegion;kxt(this,b,t),t.minimumTerrainHeight=Math.min(t.minimumTerrainHeight,y.minimumHeight)}}}updateForPick(t){let n=this._drawCommands;for(let i=0,o=this._usedDrawCommands;i<o;++i)N1e(n[i],t)}cancelReprojections(){this._imageryLayers.cancelReprojections()}getLevelMaximumGeometricError(t){return l(this._terrainProvider)?this._terrainProvider.getLevelMaximumGeometricError(t):0}loadTile(t,n){let i=n.data,o=!0,r;l(i)&&(o=i.boundingVolumeSourceTile!==n||n._lastSelectionResult===hi.CULLED_BUT_NEEDED,r=i.terrainState),ih.processStateMachine(n,t,this.terrainProvider,this.vectorProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,o),i=n.data,o&&r!==i.terrainState&&this.computeTileVisibility(n,t,this.quadtree.occluders)!==Pr.NONE&&i.boundingVolumeSourceTile===n&&(o=!1,ih.processStateMachine(n,t,this.terrainProvider,this.vectorProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,o))}computeTileVisibility(t,n,i){let o=this.computeDistanceToTile(t,n);t._distance=o;let r=w1e(this,n);if(n.fog.enabled&&!r&&L.fog(o,n.fog.density)>=1)return Pr.NONE;let s=t.data,a=s.tileBoundingRegion;if(s.boundingVolumeSourceTile===void 0)return Pr.PARTIAL;let c=n.cullingVolume,d=a.boundingVolume;l(d)||(d=a.boundingSphere),s.clippedByBoundaries=!1;let u=n3(t.rectangle,this.cartographicLimitRectangle),m=re.simpleIntersection(u,t.rectangle,Y1e);if(!l(m))return Pr.NONE;if(re.equals(m,t.rectangle)||(s.clippedByBoundaries=!0),n.mode!==se.SCENE3D&&(d=yxt,le.fromRectangleWithHeights2D(t.rectangle,n.mapProjection,a.minimumHeight,a.maximumHeight,d),h.fromElements(d.center.z,d.center.x,d.center.y,d.center),n.mode===se.MORPHING&&l(s.renderedMesh)&&(d=le.union(a.boundingSphere,d,d))),!l(d))return Pr.PARTIAL;let p=this._clippingPlanes;if(l(p)&&p.enabled){let S=p.computeIntersectionWithBoundingVolume(d);if(t.isClipped=S!==jt.INSIDE,S===jt.OUTSIDE)return Pr.NONE}let b=this._clippingPolygons;if(l(b)&&b.enabled){let S=b.computeIntersectionWithBoundingVolume(a);t.isClipped=S!==jt.OUTSIDE}let f,y=c.computeVisibility(d);if(y===jt.OUTSIDE?f=Pr.NONE:y===jt.INTERSECTING?f=Pr.PARTIAL:y===jt.INSIDE&&(f=Pr.FULL),f===Pr.NONE)return f;let _=n.mode===se.SCENE3D&&n.camera.frustum instanceof bn;if(n.mode===se.SCENE3D&&!_&&l(i)&&!r){let S=s.occludeePointInScaledSpace;return!l(S)||i.ellipsoid.isScaledSpacePointVisiblePossiblyUnderEllipsoid(S,a.minimumHeight)?f:Pr.NONE}return f}canRefine(t){let n=t.data;return l(n.terrainData)?!0:this.terrainProvider.getTileDataAvailable(t.x*2,t.y*2,t.level+1)!==void 0}canRenderWithoutLosingDetail(t){let n=t.data,i=_xt;i.length=this._imageryLayers.length;let o=!1,r=!1,s;l(n)&&(o=n.terrainState===Io.READY,r=!0,s=n.imagery);let a,c;for(a=0,c=i.length;a<c;++a)i[a]=r;if(l(s))for(a=0,c=s.length;a<c;++a){let m=s[a],p=m.loadingImagery,b=!l(p)||p.state===On.FAILED||p.state===On.INVALID,f=(m.loadingImagery||m.readyImagery).imageryLayer._layerIndex;i[f]=b&&i[f]}let d=this.quadtree._lastSelectionFrameNumber,u=Sxt;for(u.length=0,u.push(t.southwestChild,t.southeastChild,t.northwestChild,t.northeastChild);u.length>0;){let m=u.pop(),p=m._lastSelectionResultFrame===d?m._lastSelectionResult:hi.NONE;if(p===hi.RENDERED){let b=m.data;if(!l(b))continue;if(!o&&m.data.terrainState===Io.READY)return!1;let f=m.data.imagery;for(a=0,c=f.length;a<c;++a){let y=f[a],_=y.loadingImagery,S=!l(_)||_.state===On.FAILED||_.state===On.INVALID,Z=(y.loadingImagery||y.readyImagery).imageryLayer._layerIndex;if(S&&!i[Z])return!1}}else p===hi.REFINED&&u.push(m.southwestChild,m.southeastChild,m.northwestChild,m.northeastChild)}return!0}computeTileLoadPriority(t,n){let i=t.data;if(i===void 0)return 0;let o=i.tileBoundingRegion.boundingVolume;if(o===void 0)return 0;let r=n.camera.positionWC,s=n.camera.directionWC,a=h.subtract(o.center,r,Zxt),c=h.magnitude(a);return c<L.EPSILON5?0:(h.divideByScalar(a,c,a),(1-h.dot(a,s))*t._distance)}showTileThisFrame(t,n){let i=0,o=t.data,r=o.imagery;for(let c=0,d=r.length;c<d;++c){let u=r[c];l(u.readyImagery)&&u.readyImagery.imageryLayer.alpha!==0&&++i}let s=this._tilesToRenderByTextureCount[i];l(s)||(s=[],this._tilesToRenderByTextureCount[i]=s),s.push(t),l(o.vertexArray)?this._hasLoadedTilesThisFrame=!0:this._hasFillTilesThisFrame=!0;let a=this._debug;++a.tilesRendered,a.texturesRendered+=i}computeDistanceToTile(t,n){Wxt(t,this,n);let i=t.data;if(i.boundingVolumeSourceTile===void 0)return 9999999999;let r=i.tileBoundingRegion,s=r.minimumHeight,a=r.maximumHeight;if(i.boundingVolumeSourceTile!==t){let d=n.camera.positionCartographic.height,u=Math.abs(d-s),m=Math.abs(d-a);u>m?(r.minimumHeight=s,r.maximumHeight=s):(r.minimumHeight=a,r.maximumHeight=a)}let c=r.distanceToCamera(n);return r.minimumHeight=s,r.maximumHeight=a,c}isDestroyed(){return!1}destroy(){return this._tileProvider=this._tileProvider&&this._tileProvider.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._clippingPolygons=this._clippingPolygons&&this._clippingPolygons.destroy(),this._removeLayerAddedListener=this._removeLayerAddedListener&&this._removeLayerAddedListener(),this._removeLayerRemovedListener=this._removeLayerRemovedListener&&this._removeLayerRemovedListener(),this._removeLayerMovedListener=this._removeLayerMovedListener&&this._removeLayerMovedListener(),this._removeLayerShownListener=this._removeLayerShownListener&&this._removeLayerShownListener(),me(this)}_onLayerAdded(t,n){if(!this.isDestroyed()&&t.show){let i=this._terrainProvider,o=this,r=this._imageryLayersUpdatedEvent,s=function(){t._imageryCache={},o._quadtree.forEachLoadedTile(function(a){if(l(a._loadedCallbacks[t._layerIndex]))return;let c,d=a.data.imagery,u=d.length,m=-1,p=0;for(c=0;c<u;++c){let f=d[c];if((f.readyImagery??f.loadingImagery).imageryLayer===t)m===-1&&(m=c),++p;else if(m!==-1)break}if(m===-1)return;let b=m+p;t._createTileImagerySkeletons(a,i,b)&&(a._loadedCallbacks[t._layerIndex]=vxt(p,t,i),a.state=Ua.LOADING)})};if(t.ready){let a=t.imageryProvider;a._reload=s}this._quadtree.forEachLoadedTile(function(a){t._createTileImagerySkeletons(a,i)&&(a.state=Ua.LOADING,a.level!==0&&(a._lastSelectionResultFrame!==o.quadtree._lastSelectionFrameNumber||a._lastSelectionResult!==hi.RENDERED)&&(a.renderable=!1))}),this._layerOrderChanged=!0,r.raiseEvent()}}_onLayerRemoved(t,n){this._quadtree.forEachLoadedTile(function(i){let o=i.data.imagery,r=-1,s=0;for(let a=0,c=o.length;a<c;++a){let d=o[a],u=d.loadingImagery;if(l(u)||(u=d.readyImagery),u.imageryLayer===t)r===-1&&(r=a),d.freeResources(),++s;else if(r!==-1)break}r!==-1&&o.splice(r,s)}),l(t.imageryProvider)&&(t.imageryProvider._reload=void 0),this._imageryLayersUpdatedEvent.raiseEvent()}_onLayerMoved(t,n,i){this._layerOrderChanged=!0,this._imageryLayersUpdatedEvent.raiseEvent()}_onLayerShownOrHidden(t,n,i){i?this._onLayerAdded(t,n):this._onLayerRemoved(t,n)}};function bxt(e,t){let n=e.loadingImagery;l(n)||(n=e.readyImagery);let i=t.loadingImagery;return l(i)||(i=t.readyImagery),n.imageryLayer._layerIndex-i.imageryLayer._layerIndex}function gxt(e,t){let n=t.creditDisplay,i=e._terrainProvider;l(i)&&l(i.credit)&&n.addCreditToNextFrame(i.credit);let o=e._imageryLayers;for(let r=0,s=o.length;r<s;++r){let a=o.get(r);a.ready&&a.show&&l(a.imageryProvider.credit)&&n.addCreditToNextFrame(a.imageryProvider.credit)}}function N1e(e,t){let n=t.globeTranslucencyState;if(n.translucent){let i=e.renderState.blending.enabled;n.pushDerivedCommands(e,i,t)}else t.commandList.push(e)}var yxt=new le,Y1e=new re,xxt=new re,Txt=new fe;function n3(e,t){if(t.west<t.east)return t;let n=re.clone(t,xxt);return re.center(e,Txt).longitude>0?n.east=L.PI:n.west=-L.PI,n}function w1e(e,t){if(t.cameraUnderground||t.globeTranslucencyState.translucent)return!0;if(e.backFaceCulling)return!1;let n=e._clippingPlanes;if(l(n)&&n.enabled)return!0;let i=e._clippingPolygons;return!!(l(i)&&i.enabled||!re.equals(e.cartographicLimitRectangle,re.MAX_VALUE))}var _xt=[],Sxt=[],Zxt=new h,F1e=new I,t3=new I,Vxt=new ce,Cxt=new ce,Rxt=new ce,Gxt=new h,I1e=new h,Axt=new h,Ext=new h,Lxt=[new h,new h,new h,new h];function P1e(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=Lxt;return h.fromRadians(n.west,n.south,o,a,c[0]),h.fromRadians(n.east,n.south,o,a,c[1]),h.fromRadians(n.west,n.north,o,a,c[2]),h.fromRadians(n.east,n.north,o,a,c[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,r)}function Wxt(e,t,n){let i=e.data;i===void 0&&(i=e.data=new ih);let o=e.tilingScheme.ellipsoid;i.tileBoundingRegion===void 0&&(i.tileBoundingRegion=new Xu({computeBoundingVolumes:!1,rectangle:e.rectangle,ellipsoid:o,minimumHeight:0,maximumHeight:0}));let r=i.tileBoundingRegion,s=r.minimumHeight,a=r.maximumHeight,c=!1,d=e,u=i.mesh,m=i.terrainData;if(u!==void 0&&u.minimumHeight!==void 0&&u.maximumHeight!==void 0)r.minimumHeight=u.minimumHeight,r.maximumHeight=u.maximumHeight,c=!0;else if(m!==void 0&&m._minimumHeight!==void 0&&m._maximumHeight!==void 0)r.minimumHeight=m._minimumHeight,r.maximumHeight=m._maximumHeight;else{r.minimumHeight=Number.NaN,r.maximumHeight=Number.NaN;let p=e.parent;for(;p!==void 0;){let b=p.data;if(b!==void 0){let f=b.mesh,y=b.terrainData;if(f!==void 0&&f.minimumHeight!==void 0&&f.maximumHeight!==void 0){r.minimumHeight=f.minimumHeight,r.maximumHeight=f.maximumHeight;break}else if(y!==void 0&&y._minimumHeight!==void 0&&y._maximumHeight!==void 0){r.minimumHeight=y._minimumHeight,r.maximumHeight=y._maximumHeight;break}}p=p.parent}d=p}if(d!==void 0){let p=n.verticalExaggeration,b=n.verticalExaggerationRelativeHeight;if(p!==1&&(c=!1,r.minimumHeight=ho.getHeight(r.minimumHeight,p,b),r.maximumHeight=ho.getHeight(r.maximumHeight,p,b)),c)i.boundingVolumeIsFromMesh||(r._orientedBoundingBox=$t.clone(u.orientedBoundingBox,r._orientedBoundingBox),r._boundingSphere=le.clone(u.boundingSphere3D,r._boundingSphere),i.occludeePointInScaledSpace=h.clone(u.occludeePointInScaledSpace,i.occludeePointInScaledSpace),l(i.occludeePointInScaledSpace)||(i.occludeePointInScaledSpace=P1e(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace)));else{let y=r._orientedBoundingBox===void 0||r._boundingSphere===void 0;(r.minimumHeight!==s||r.maximumHeight!==a||y)&&(r.computeBoundingVolumes(o),i.occludeePointInScaledSpace=P1e(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace))}i.boundingVolumeSourceTile=d,i.boundingVolumeIsFromMesh=c}else i.boundingVolumeSourceTile=void 0,i.boundingVolumeIsFromMesh=!1}function vxt(e,t,n){return function(i){let o,r,s=-1,a=i.data.imagery,c=a.length,d;for(d=0;d<c;++d)if(o=a[d],r=o.readyImagery??o.loadingImagery,r.imageryLayer===t){s=d;break}if(s!==-1){let u=s+e;if(o=a[u],r=l(o)?o.readyImagery??o.loadingImagery:void 0,!l(r)||r.imageryLayer!==t)return!t._createTileImagerySkeletons(i,n,u);for(d=s;d<u;++d)a[d].freeResources();a.splice(s,e)}return!0}}var Fxt=new I,Ixt=new I;function X1e(e,t){let n={u_initialColor:function(){return this.properties.initialColor},u_fillHighlightColor:function(){return this.properties.fillHighlightColor},u_zoomedOutOceanSpecularIntensity:function(){return this.properties.zoomedOutOceanSpecularIntensity},u_oceanNormalMap:function(){return this.properties.oceanNormalMap},u_atmosphereLightIntensity:function(){return this.properties.atmosphereLightIntensity},u_atmosphereRayleighCoefficient:function(){return this.properties.atmosphereRayleighCoefficient},u_atmosphereMieCoefficient:function(){return this.properties.atmosphereMieCoefficient},u_atmosphereRayleighScaleHeight:function(){return this.properties.atmosphereRayleighScaleHeight},u_atmosphereMieScaleHeight:function(){return this.properties.atmosphereMieScaleHeight},u_atmosphereMieAnisotropy:function(){return this.properties.atmosphereMieAnisotropy},u_lightingFadeDistance:function(){return this.properties.lightingFadeDistance},u_nightFadeDistance:function(){return this.properties.nightFadeDistance},u_center3D:function(){return this.properties.center3D},u_verticalExaggerationAndRelativeHeight:function(){return this.properties.verticalExaggerationAndRelativeHeight},u_tileRectangle:function(){return this.properties.tileRectangle},u_modifiedModelView:function(){let i=e.context.uniformState.view,o=I.multiplyByPoint(i,this.properties.rtc,I1e);return I.setTranslation(i,o,F1e),F1e},u_modifiedModelViewProjection:function(){let i=e.context.uniformState.view,o=e.context.uniformState.projection,r=I.multiplyByPoint(i,this.properties.rtc,I1e);return I.setTranslation(i,r,t3),I.multiply(o,t3,t3),t3},u_dayTextures:function(){return this.properties.dayTextures},u_dayTextureTranslationAndScale:function(){return this.properties.dayTextureTranslationAndScale},u_dayTextureTexCoordsRectangle:function(){return this.properties.dayTextureTexCoordsRectangle},u_dayTextureUseWebMercatorT:function(){return this.properties.dayTextureUseWebMercatorT},u_dayTextureAlpha:function(){return this.properties.dayTextureAlpha},u_dayTextureNightAlpha:function(){return this.properties.dayTextureNightAlpha},u_dayTextureDayAlpha:function(){return this.properties.dayTextureDayAlpha},u_dayTextureBrightness:function(){return this.properties.dayTextureBrightness},u_dayTextureContrast:function(){return this.properties.dayTextureContrast},u_dayTextureHue:function(){return this.properties.dayTextureHue},u_dayTextureSaturation:function(){return this.properties.dayTextureSaturation},u_dayTextureOneOverGamma:function(){return this.properties.dayTextureOneOverGamma},u_dayIntensity:function(){return this.properties.dayIntensity},u_southAndNorthLatitude:function(){return this.properties.southAndNorthLatitude},u_southMercatorYAndOneOverHeight:function(){return this.properties.southMercatorYAndOneOverHeight},u_waterMask:function(){return this.properties.waterMask},u_waterMaskTranslationAndScale:function(){return this.properties.waterMaskTranslationAndScale},u_minMaxHeight:function(){return this.properties.minMaxHeight},u_scaleAndBias:function(){return this.properties.scaleAndBias},u_dayTextureSplit:function(){return this.properties.dayTextureSplit},u_dayTextureCutoutRectangles:function(){return this.properties.dayTextureCutoutRectangles},u_clippingPlanes:function(){let i=t._clippingPlanes;return l(i)&&l(i.texture)?i.texture:e.context.defaultTexture},u_cartographicLimitRectangle:function(){return this.properties.localizedCartographicLimitRectangle},u_clippingPlanesMatrix:function(){let i=t._clippingPlanes,o=l(i)?I.multiply(e.context.uniformState.view,i.modelMatrix,Fxt):I.IDENTITY;return I.inverseTranspose(o,Ixt)},u_clippingPlanesEdgeStyle:function(){let i=this.properties.clippingPlanesEdgeColor;return i.alpha=this.properties.clippingPlanesEdgeWidth,i},u_clippingDistance:function(){let i=t._clippingPolygons.clippingTexture;return l(i)?i:e.context.defaultTexture},u_clippingExtents:function(){let i=t._clippingPolygons.extentsTexture;return l(i)?i:e.context.defaultTexture},u_minimumBrightness:function(){return e.fog.minimumBrightness},u_hsbShift:function(){return this.properties.hsbShift},u_colorsToAlpha:function(){return this.properties.colorsToAlpha},u_frontFaceAlphaByDistance:function(){return this.properties.frontFaceAlphaByDistance},u_backFaceAlphaByDistance:function(){return this.properties.backFaceAlphaByDistance},u_translucencyRectangle:function(){return this.properties.localizedTranslucencyRectangle},u_undergroundColor:function(){return this.properties.undergroundColor},u_undergroundColorAlphaByDistance:function(){return this.properties.undergroundColorAlphaByDistance},u_lambertDiffuseMultiplier:function(){return this.properties.lambertDiffuseMultiplier},u_vertexShadowDarkness:function(){return this.properties.vertexShadowDarkness},u_vectorSegmentTexture:function(){return this.properties.vectorSegmentTexture??e.context.defaultTexture},u_vectorWidthTexture:function(){return this.properties.vectorWidthTexture??e.context.defaultTexture},u_vectorColorTexture:function(){return this.properties.vectorColorTexture??e.context.defaultTexture},u_vectorSegmentPrimitiveIndicesTexture:function(){return this.properties.vectorSegmentPrimitiveIndicesTexture??e.context.defaultTexture},u_vectorGridCellIndicesTexture:function(){return this.properties.vectorGridCellIndicesTexture??e.context.defaultTexture},u_vectorPolygonEdgeTexture:function(){return this.properties.vectorPolygonEdgeTexture??e.context.defaultTexture},u_vectorPolygonEdgePrimitiveIndicesTexture:function(){return this.properties.vectorPolygonEdgePrimitiveIndicesTexture??e.context.defaultTexture},u_vectorPolygonGridCellIndicesTexture:function(){return this.properties.vectorPolygonGridCellIndicesTexture??e.context.defaultTexture},properties:{initialColor:new ce(0,0,.5,1),fillHighlightColor:new U(0,0,0,0),zoomedOutOceanSpecularIntensity:.5,oceanNormalMap:void 0,lightingFadeDistance:new M(65e5,9e6),nightFadeDistance:new M(1e7,4e7),atmosphereLightIntensity:10,atmosphereRayleighCoefficient:new h(55e-7,13e-6,284e-7),atmosphereMieCoefficient:new h(21e-6,21e-6,21e-6),atmosphereRayleighScaleHeight:1e4,atmosphereMieScaleHeight:3200,atmosphereMieAnisotropy:.9,hsbShift:new h,center3D:void 0,rtc:new h,modifiedModelView:new I,tileRectangle:new ce,verticalExaggerationAndRelativeHeight:new M(1,0),dayTextures:[],dayTextureTranslationAndScale:[],dayTextureTexCoordsRectangle:[],dayTextureUseWebMercatorT:[],dayTextureAlpha:[],dayTextureNightAlpha:[],dayTextureDayAlpha:[],dayTextureBrightness:[],dayTextureContrast:[],dayTextureHue:[],dayTextureSaturation:[],dayTextureOneOverGamma:[],dayTextureSplit:[],dayTextureCutoutRectangles:[],dayIntensity:0,colorsToAlpha:[],southAndNorthLatitude:new M,southMercatorYAndOneOverHeight:new M,waterMask:void 0,waterMaskTranslationAndScale:new ce,minMaxHeight:new M,scaleAndBias:new I,clippingPlanesEdgeColor:U.clone(U.WHITE),clippingPlanesEdgeWidth:0,localizedCartographicLimitRectangle:new ce,frontFaceAlphaByDistance:new ce,backFaceAlphaByDistance:new ce,localizedTranslucencyRectangle:new ce,undergroundColor:U.clone(U.TRANSPARENT),undergroundColorAlphaByDistance:new ce,lambertDiffuseMultiplier:0,vertexShadowDarkness:0,vectorSegmentTexture:void 0,vectorWidthTexture:void 0,vectorColorTexture:void 0,vectorSegmentPrimitiveIndicesTexture:void 0,vectorGridCellIndicesTexture:void 0,vectorPolygonEdgeTexture:void 0,vectorPolygonEdgePrimitiveIndicesTexture:void 0,vectorPolygonGridCellIndicesTexture:void 0}};return l(t.materialUniformMap)?It(n,t.materialUniformMap):n}function Pxt(e,t){let n=t.data,i,o;if(l(n.vertexArray)?(i=n.mesh,o=n.vertexArray):l(n.fill)&&l(n.fill.vertexArray)&&(i=n.fill.mesh,o=n.fill.vertexArray),!(!l(i)||!l(o))){if(l(n.wireframeVertexArray)){if(n.wireframeVertexArray.mesh===i)return;n.wireframeVertexArray.destroy(),n.wireframeVertexArray=void 0}n.wireframeVertexArray=Xxt(e,o,i),n.wireframeVertexArray.mesh=i}}function Xxt(e,t,n){let o={indices:n.indices,primitiveType:Fe.TRIANGLES};Bn.toWireframe(o);let r=o.indices,s=et.createIndexBuffer({context:e,typedArray:r,usage:Ie.STATIC_DRAW,indexDatatype:De.fromSizeInBytes(r.BYTES_PER_ELEMENT)});return new Dn({context:e,attributes:t._attributes,indexBuffer:s})}var M1e,k1e,i3;(function(){let e=new Nt({geometry:Rh.fromDimensions({dimensions:new h(2,2,2)})}),t=new Nt({geometry:new hb({radius:1})}),n=new I,i,o;function r(s){return new Nn({geometryInstances:s,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})}M1e=function(s,a){return s===i||(i3(),i=s,n=I.fromRotationTranslation(s.halfAxes,s.center,n),e.modelMatrix=n,e.attributes.color=Qt.fromColor(a),o=r(e)),o},k1e=function(s,a){return s===i||(i3(),i=s,n=I.fromTranslation(s.center,n),n=I.multiplyByUniformScale(n,s.radius,n),t.modelMatrix=n,t.attributes.color=Qt.fromColor(a),o=r(t)),o},i3=function(){l(o)&&(o.destroy(),o=void 0,i=void 0)}})();var Nxt=new ce(0,0,0,0),Yxt={frameState:void 0,surfaceTile:void 0,numberOfDayTextures:void 0,applyBrightness:void 0,applyContrast:void 0,applyHue:void 0,applySaturation:void 0,applyGamma:void 0,applyAlpha:void 0,applyDayNightAlpha:void 0,applySplit:void 0,showReflectiveOcean:void 0,showOceanWaves:void 0,enableLighting:void 0,dynamicAtmosphereLighting:void 0,dynamicAtmosphereLightingFromSun:void 0,showGroundAtmosphere:void 0,perFragmentGroundAtmosphere:void 0,hasVertexNormals:void 0,useWebMercatorProjection:void 0,enableFog:void 0,enableClippingPlanes:void 0,clippingPlanes:void 0,enableClippingPolygons:void 0,clippingPolygons:void 0,clippedByBoundaries:void 0,hasImageryLayerCutout:void 0,colorCorrect:void 0,colorToAlpha:void 0,hasGeodeticSurfaceNormals:void 0,hasExaggeration:void 0},wxt=U.TRANSPARENT,Mxt=new Ht;function kxt(e,t,n){let i=t.data;l(i.vertexArray)||(i.fill===void 0&&(i.fill=new TR(t)),i.fill.update(e,n));let o=n.creditDisplay,r=i.terrainData;if(l(r)&&l(r.credits)){let St=r.credits;for(let vt=0,Wn=St.length;vt<Wn;++vt)o.addCreditToNextFrame(St[vt])}let s=Xt.maximumTextureImageUnits,a=i.waterMaskTexture,c=i.waterMaskTranslationAndScale;!l(a)&&l(i.fill)&&(a=i.fill.waterMaskTexture,c=i.fill.waterMaskTranslationAndScale);let d=n.cameraUnderground,u=n.globeTranslucencyState,m=u.translucent,p=u.frontFaceAlphaByDistance,b=u.backFaceAlphaByDistance,f=u.rectangle,y=e.undergroundColor??wxt,_=e.undergroundColorAlphaByDistance??Mxt,S=w1e(e,n)&&n.mode===se.SCENE3D&&y.alpha>0&&(_.nearValue>0||_.farValue>0),Z=e.lambertDiffuseMultiplier,V=e.vertexShadowDarkness,C=e.hasWaterMask&&l(a),G=C&&e.showWaterEffect,E=e.oceanNormalMap,v=G&&l(E),F=e.terrainProvider,P=l(F)&&e.terrainProvider.hasVertexNormals,N=n.fog.enabled&&n.fog.renderable&&!d,g=e.showGroundAtmosphere&&n.mode===se.SCENE3D,R=Fn.castShadows(e.shadows)&&!m,A=Fn.receiveShadows(e.shadows)&&!m,W=e.hueShift,X=e.saturationShift,Y=e.brightnessShift,D=!(L.equalsEpsilon(W,0,L.EPSILON7)&&L.equalsEpsilon(X,0,L.EPSILON7)&&L.equalsEpsilon(Y,0,L.EPSILON7)),k=!1;if(g){let St=h.magnitude(n.camera.positionWC),vt=e.nightFadeOutDistance;k=St>vt}C&&--s,v&&--s,l(n.shadowState)&&n.shadowState.shadowsEnabled&&--s,l(e.clippingPlanes)&&e.clippingPlanes.enabled&&--s,l(e.clippingPolygons)&&e.clippingPolygons.enabled&&(--s,--s),s-=u.numberOfTextureUniforms;let O=i.renderedMesh,w=O.center,z=O.encoding,H=i.tileBoundingRegion,te=n.verticalExaggeration,K=n.verticalExaggerationRelativeHeight,$=te!==1,ee=z.hasGeodeticSurfaceNormals,de=Vxt,_e=0,ue=0,Ce=0,Te=0,Re=!1;if(n.mode!==se.SCENE3D){let St=n.mapProjection,vt=St.project(re.southwest(t.rectangle),Axt),Wn=St.project(re.northeast(t.rectangle),Ext);if(de.x=vt.x,de.y=vt.y,de.z=Wn.x,de.w=Wn.y,n.mode!==se.MORPHING&&(w=Gxt,w.x=0,w.y=(de.z+de.x)*.5,w.z=(de.w+de.y)*.5,de.x-=w.y,de.y-=w.z,de.z-=w.y,de.w-=w.z),n.mode===se.SCENE2D&&z.quantization===Aa.BITS12){let at=1/(Math.pow(2,12)-1)*.5,ft=(de.z-de.x)*at,Ai=(de.w-de.y)*at;de.x-=ft,de.y-=Ai,de.z+=ft,de.w+=Ai}St instanceof fi&&(_e=t.rectangle.south,ue=t.rectangle.north,Ce=fi.geodeticLatitudeToMercatorAngle(_e),Te=1/(fi.geodeticLatitudeToMercatorAngle(ue)-Ce),Re=!0)}let Le=Yxt;Le.frameState=n,Le.surfaceTile=i,Le.hasWaterMask=C,Le.showReflectiveOcean=G,Le.showOceanWaves=v,Le.enableLighting=e.enableLighting,Le.dynamicAtmosphereLighting=e.dynamicAtmosphereLighting,Le.dynamicAtmosphereLightingFromSun=e.dynamicAtmosphereLightingFromSun,Le.showGroundAtmosphere=g,Le.atmosphereLightIntensity=e.atmosphereLightIntensity,Le.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,Le.atmosphereMieCoefficient=e.atmosphereMieCoefficient,Le.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,Le.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,Le.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,Le.perFragmentGroundAtmosphere=k,Le.hasVertexNormals=P,Le.useWebMercatorProjection=Re,Le.clippedByBoundaries=i.clippedByBoundaries,Le.hasGeodeticSurfaceNormals=ee,Le.hasExaggeration=$;let Xe=i.imagery,qe=0,je=Xe.length,_t=e.showSkirts&&!d&&!m,Qe=e.backFaceCulling&&!d&&!m,Ee=Qe?e._renderState:e._disableCullingRenderState,He=Qe?e._blendRenderState:e._disableCullingBlendRenderState,Rt=Ee,dt=e._firstPassInitialColor,gn=n.context;if(l(e._debug.boundingSphereTile)||i3(),e._materialUniformMap!==e.materialUniformMap){e._materialUniformMap=e.materialUniformMap;let St=e._drawCommands.length;for(let vt=0;vt<St;++vt)e._uniformMaps[vt]=X1e(n,e)}do{let St=0,vt,Wn;if(e._drawCommands.length<=e._usedDrawCommands?(vt=new ot,vt.owner=t,vt.cull=!1,vt.boundingVolume=new le,vt.orientedBoundingBox=void 0,Wn=X1e(n,e),e._drawCommands.push(vt),e._uniformMaps.push(Wn)):(vt=e._drawCommands[e._usedDrawCommands],Wn=e._uniformMaps[e._usedDrawCommands]),vt.owner=t,++e._usedDrawCommands,t===e._debug.boundingSphereTile){let Wr=H.boundingVolume,Ra=H.boundingSphere;l(Wr)?M1e(Wr,U.RED).update(n):l(Ra)&&k1e(Ra,U.RED).update(n)}let at=Wn.properties;ce.clone(dt,at.initialColor),at.oceanNormalMap=E,at.lightingFadeDistance.x=e.lightingFadeOutDistance,at.lightingFadeDistance.y=e.lightingFadeInDistance,at.nightFadeDistance.x=e.nightFadeOutDistance,at.nightFadeDistance.y=e.nightFadeInDistance,at.atmosphereLightIntensity=e.atmosphereLightIntensity,at.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,at.atmosphereMieCoefficient=e.atmosphereMieCoefficient,at.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,at.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,at.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,at.zoomedOutOceanSpecularIntensity=e.zoomedOutOceanSpecularIntensity;let ft=d?b:p,Ai=d?p:b;l(ft)&&(ce.fromElements(ft.near,ft.nearValue,ft.far,ft.farValue,at.frontFaceAlphaByDistance),ce.fromElements(Ai.near,Ai.nearValue,Ai.far,Ai.farValue,at.backFaceAlphaByDistance)),ce.fromElements(_.near,_.nearValue,_.far,_.farValue,at.undergroundColorAlphaByDistance),U.clone(y,at.undergroundColor),at.lambertDiffuseMultiplier=Z,at.vertexShadowDarkness=V;let En=!l(i.vertexArray)&&l(e.fillHighlightColor)&&e.fillHighlightColor.alpha>0;En&&U.clone(e.fillHighlightColor,at.fillHighlightColor),at.verticalExaggerationAndRelativeHeight.x=te,at.verticalExaggerationAndRelativeHeight.y=K,at.center3D=O.center,h.clone(w,at.rtc),ce.clone(de,at.tileRectangle),at.southAndNorthLatitude.x=_e,at.southAndNorthLatitude.y=ue,at.southMercatorYAndOneOverHeight.x=Ce,at.southMercatorYAndOneOverHeight.y=Te;let Ni=Cxt,fo=n3(t.rectangle,e.cartographicLimitRectangle),Yi=Rxt,Ki=n3(t.rectangle,f);h.fromElements(W,X,Y,at.hsbShift);let ci=t.rectangle,oi=1/ci.width,Gn=1/ci.height;Ni.x=(fo.west-ci.west)*oi,Ni.y=(fo.south-ci.south)*Gn,Ni.z=(fo.east-ci.west)*oi,Ni.w=(fo.north-ci.south)*Gn,ce.clone(Ni,at.localizedCartographicLimitRectangle),Yi.x=(Ki.west-ci.west)*oi,Yi.y=(Ki.south-ci.south)*Gn,Yi.z=(Ki.east-ci.west)*oi,Yi.w=(Ki.north-ci.south)*Gn,ce.clone(Yi,at.localizedTranslucencyRectangle);let ri=N&&L.fog(t._distance,n.fog.density)>L.EPSILON3;D=D&&(ri||g);let Ao=!1,Zs=!1,ws=!1,ia=!1,oa=!1,ar=!1,yi=!1,cr=!1,Fi=!1,Ur=!1;for(;St<s&&qe<je;){let Wr=Xe[qe],Ra=Wr.readyImagery;if(++qe,!l(Ra)||Ra.imageryLayer.alpha===0)continue;let Kg=Wr.useWebMercatorT?Ra.textureWebMercator:Ra.texture,li=Ra.imageryLayer;l(Wr.textureTranslationAndScale)||(Wr.textureTranslationAndScale=li._calculateTextureTranslationAndScale(t,Wr)),at.dayTextures[St]=Kg,at.dayTextureTranslationAndScale[St]=Wr.textureTranslationAndScale,at.dayTextureTexCoordsRectangle[St]=Wr.textureCoordinateRectangle,at.dayTextureUseWebMercatorT[St]=Wr.useWebMercatorT,at.dayTextureAlpha[St]=li.alpha,ar=ar||at.dayTextureAlpha[St]!==1,at.dayTextureNightAlpha[St]=li.nightAlpha,yi=yi||at.dayTextureNightAlpha[St]!==1,at.dayTextureDayAlpha[St]=li.dayAlpha,yi=yi||at.dayTextureDayAlpha[St]!==1,at.dayTextureBrightness[St]=li.brightness,Ao=Ao||at.dayTextureBrightness[St]!==Ts.DEFAULT_BRIGHTNESS,at.dayTextureContrast[St]=li.contrast,Zs=Zs||at.dayTextureContrast[St]!==Ts.DEFAULT_CONTRAST,at.dayTextureHue[St]=li.hue,ws=ws||at.dayTextureHue[St]!==Ts.DEFAULT_HUE,at.dayTextureSaturation[St]=li.saturation,ia=ia||at.dayTextureSaturation[St]!==Ts.DEFAULT_SATURATION,at.dayTextureOneOverGamma[St]=1/li.gamma,oa=oa||at.dayTextureOneOverGamma[St]!==1/Ts.DEFAULT_GAMMA,at.dayTextureSplit[St]=li.splitDirection,cr=cr||at.dayTextureSplit[St]!==0;let za=at.dayTextureCutoutRectangles[St];if(l(za)||(za=at.dayTextureCutoutRectangles[St]=new ce),ce.clone(ce.ZERO,za),l(li.cutoutRectangle)){let Cs=n3(ci,li.cutoutRectangle),om=re.simpleIntersection(Cs,ci,Y1e);Fi=l(om)||Fi,za.x=(Cs.west-ci.west)*oi,za.y=(Cs.south-ci.south)*Gn,za.z=(Cs.east-ci.west)*oi,za.w=(Cs.north-ci.south)*Gn}let Ha=at.colorsToAlpha[St];l(Ha)||(Ha=at.colorsToAlpha[St]=new ce);let ra=l(li.colorToAlpha)&&li.colorToAlphaThreshold>0;if(Ur=Ur||ra,ra){let Cs=li.colorToAlpha;Ha.x=Cs.red,Ha.y=Cs.green,Ha.z=Cs.blue,Ha.w=li.colorToAlphaThreshold}else Ha.w=-1;if(l(Ra.credits)){let Cs=Ra.credits;for(let om=0,hT=Cs.length;om<hT;++om)o.addCreditToNextFrame(Cs[om])}++St}at.dayTextures.length=St,at.waterMask=a,ce.clone(c,at.waterMaskTranslationAndScale),at.minMaxHeight.x=z.minimumHeight,at.minMaxHeight.y=z.maximumHeight,I.clone(z.matrix,at.scaleAndBias);let Ii=e._clippingPlanes,Eo=l(Ii)&&Ii.enabled&&t.isClipped;Eo&&(at.clippingPlanesEdgeColor=U.clone(Ii.edgeColor,at.clippingPlanesEdgeColor),at.clippingPlanesEdgeWidth=Ii.edgeWidth);let Vs=i.vectorData;l(Vs)&&(at.vectorSegmentTexture=Vs.polylineSegmentTexture,at.vectorWidthTexture=Vs.widthTexture,at.vectorColorTexture=Vs.colorTexture,at.vectorSegmentPrimitiveIndicesTexture=Vs.polylineSegmentPrimitiveIndicesTexture,at.vectorGridCellIndicesTexture=Vs.polylineGridCellIndicesTexture,at.vectorPolygonEdgeTexture=Vs.polygonEdgeTexture,at.vectorPolygonEdgePrimitiveIndicesTexture=Vs.polygonEdgePrimitiveIndicesTexture,at.vectorPolygonGridCellIndicesTexture=Vs.polygonGridCellIndicesTexture);let Lr=e._clippingPolygons,nm=l(Lr)&&Lr.enabled&&Lr.length>0&&t.isClipped;Le.numberOfDayTextures=St,Le.applyBrightness=Ao,Le.applyContrast=Zs,Le.applyHue=ws,Le.applySaturation=ia,Le.applyGamma=oa,Le.applyAlpha=ar,Le.applyDayNightAlpha=yi,Le.applySplit=cr,Le.enableFog=ri,Le.enableClippingPlanes=Eo,Le.clippingPlanes=Ii,Le.enableClippingPolygons=nm,Le.clippingPolygons=Lr,Le.hasImageryLayerCutout=Fi,Le.colorCorrect=D,Le.highlightFillTile=En,Le.colorToAlpha=Ur,Le.showUndergroundColor=S,Le.translucent=m;let im=i.renderedMesh.indices.length;_t||(im=i.renderedMesh.indexCountWithoutSkirts),vt.shaderProgram=e._surfaceShaderSet.getShaderProgram(Le),vt.castShadows=R,vt.receiveShadows=A,vt.renderState=Rt,vt.primitiveType=Fe.TRIANGLES,vt.vertexArray=i.vertexArray||i.fill.vertexArray,vt.count=im,vt.uniformMap=Wn,vt.pass=We.GLOBE,e._debug.wireframe&&(Pxt(gn,t),l(i.wireframeVertexArray)&&(vt.vertexArray=i.wireframeVertexArray,vt.primitiveType=Fe.LINES,vt.count=im*2));let yc=vt.boundingVolume,Hg=vt.orientedBoundingBox;n.mode!==se.SCENE3D?(le.fromRectangleWithHeights2D(t.rectangle,n.mapProjection,H.minimumHeight,H.maximumHeight,yc),h.fromElements(yc.center.z,yc.center.x,yc.center.y,yc.center),n.mode===se.MORPHING&&le.union(H.boundingSphere,yc,yc)):(vt.boundingVolume=le.clone(H.boundingSphere,yc),vt.orientedBoundingBox=$t.clone(H.boundingVolume,Hg)),vt.dirty=!0,m&&u.updateDerivedCommands(vt,n),N1e(vt,n),Rt=He,dt=Nxt}while(qe<je)}var PY=Eee;var UJi=x(T(),1);function U1e(){this._enabled=!1,this._frontFaceAlpha=1,this._frontFaceAlphaByDistance=void 0,this._backFaceAlpha=1,this._backFaceAlphaByDistance=void 0,this._rectangle=re.clone(re.MAX_VALUE)}Object.defineProperties(U1e.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this._enabled=e}},frontFaceAlpha:{get:function(){return this._frontFaceAlpha},set:function(e){this._frontFaceAlpha=e}},frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance},set:function(e){this._frontFaceAlphaByDistance=Ht.clone(e,this._frontFaceAlphaByDistance)}},backFaceAlpha:{get:function(){return this._backFaceAlpha},set:function(e){this._backFaceAlpha=e}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance},set:function(e){this._backFaceAlphaByDistance=Ht.clone(e,this._backFaceAlphaByDistance)}},rectangle:{get:function(){return this._rectangle},set:function(e){l(e)||(e=re.clone(re.MAX_VALUE)),re.clone(e,this._rectangle)}}});var XY=U1e;var Sji=x(T(),1);var zJi=x(T(),1);var Lee=class{constructor(t){this._ellipsoid=new Zh(t.ellipsoid,h.ZERO)}get ellipsoid(){return this._ellipsoid}},NY=Lee;var $Ji=x(T(),1);var Wee=class{constructor(t){this.maxSize=t,this.cache=new Map}get(t){if(!this.cache.has(t))return;let n=this.cache.get(t);return this.cache.delete(t),this.cache.set(t,n),n}set(t,n){if(this.cache.has(t))this.cache.delete(t);else if(this.cache.size>=this.maxSize){let i=this.cache.keys().next().value;this.cache.delete(i)}this.cache.set(t,n)}get size(){return this.cache.size}clear(){this.cache.clear()}},Uxt=1e3,vee=class e{constructor(t){this._tilingScheme=t.tilingScheme,this._x=t.x,this._y=t.y,this._level=t.level,this._parent=t.parent,this._rectangle=this._tilingScheme.tileXYToRectangle(this._x,this._y,this._level),this._southwestChild=void 0,this._southeastChild=void 0,this._northwestChild=void 0,this._northeastChild=void 0,this.replacementPrevious=void 0,this.replacementNext=void 0,this._distance=0,this._loadPriority=0,this._customData=new Set,this._customDataIterator=void 0,this._addedCustomData=[],this._removedCustomData=[],this._lastSelectionResult=hi.NONE,this._lastSelectionResultFrame=void 0,this._loadedCallbacks={},this._positionCache=new Wee(Uxt),this.state=Ua.START,this.renderable=!1,this.upsampledFromParent=!1,this.data=void 0}static createLevelZeroTiles(t){let n=t.getNumberOfXTilesAtLevel(0),i=t.getNumberOfYTilesAtLevel(0),o=new Array(n*i),r=0;for(let s=0;s<i;++s)for(let a=0;a<n;++a)o[r++]=new e({tilingScheme:t,x:a,y:s,level:0});return o}_getCacheKey(t,n){return Oxt(t.longitude,t.latitude,this._rectangle,n)}getPositionCacheEntry(t,n){return this._positionCache.get(this._getCacheKey(t,n))}setPositionCacheEntry(t,n,i){this._positionCache.set(this._getCacheKey(t,n),i)}clearPositionCache(){this._positionCache.size>0&&this._positionCache.clear()}updateCustomData(){let t=this._addedCustomData,n=this._removedCustomData;if(t.length===0&&n.length===0)return;let i=this.customData;for(let o=0;o<t.length;++o){let r=t[o];i.add(r),D1e(this,r.positionCartographic)._addedCustomData.push(r)}this._addedCustomData.length=0;for(let o=0;o<n.length;++o){let r=n[o];i.has(r)&&i.delete(r),D1e(this,r.positionCartographic)._removedCustomData.push(r)}this._removedCustomData.length=0}get tilingScheme(){return this._tilingScheme}get x(){return this._x}get y(){return this._y}get level(){return this._level}get parent(){return this._parent}get rectangle(){return this._rectangle}get children(){return[this.northwestChild,this.northeastChild,this.southwestChild,this.southeastChild]}get southwestChild(){return l(this._southwestChild)||(this._southwestChild=new e({tilingScheme:this.tilingScheme,x:this.x*2,y:this.y*2+1,level:this.level+1,parent:this})),this._southwestChild}get southeastChild(){return l(this._southeastChild)||(this._southeastChild=new e({tilingScheme:this.tilingScheme,x:this.x*2+1,y:this.y*2+1,level:this.level+1,parent:this})),this._southeastChild}get northwestChild(){return l(this._northwestChild)||(this._northwestChild=new e({tilingScheme:this.tilingScheme,x:this.x*2,y:this.y*2,level:this.level+1,parent:this})),this._northwestChild}get northeastChild(){return l(this._northeastChild)||(this._northeastChild=new e({tilingScheme:this.tilingScheme,x:this.x*2+1,y:this.y*2,level:this.level+1,parent:this})),this._northeastChild}get customData(){return this._customData}get needsLoading(){return this.state<Ua.DONE}get eligibleForUnloading(){let t=!0;return l(this.data)&&(t=this.data.eligibleForUnloading,l(t)||(t=!0)),t}findLevelZeroTile(t,n,i){let o=this.tilingScheme.getNumberOfXTilesAtLevel(0);if(n<0?n+=o:n>=o&&(n-=o),!(i<0||i>=this.tilingScheme.getNumberOfYTilesAtLevel(0)))return t.filter(function(r){return r.x===n&&r.y===i})[0]}findTileToWest(t){let n=this.parent;if(n===void 0)return this.findLevelZeroTile(t,this.x-1,this.y);if(n.southeastChild===this)return n.southwestChild;if(n.northeastChild===this)return n.northwestChild;let i=n.findTileToWest(t);if(i!==void 0)return n.southwestChild===this?i.southeastChild:i.northeastChild}findTileToEast(t){let n=this.parent;if(n===void 0)return this.findLevelZeroTile(t,this.x+1,this.y);if(n.southwestChild===this)return n.southeastChild;if(n.northwestChild===this)return n.northeastChild;let i=n.findTileToEast(t);if(i!==void 0)return n.southeastChild===this?i.southwestChild:i.northwestChild}findTileToSouth(t){let n=this.parent;if(n===void 0)return this.findLevelZeroTile(t,this.x,this.y+1);if(n.northwestChild===this)return n.southwestChild;if(n.northeastChild===this)return n.southeastChild;let i=n.findTileToSouth(t);if(i!==void 0)return n.southwestChild===this?i.northwestChild:i.northeastChild}findTileToNorth(t){let n=this.parent;if(n===void 0)return this.findLevelZeroTile(t,this.x,this.y-1);if(n.southwestChild===this)return n.northwestChild;if(n.southeastChild===this)return n.northeastChild;let i=n.findTileToNorth(t);if(i!==void 0)return n.northwestChild===this?i.southwestChild:i.southeastChild}freeResources(){this.clearPositionCache(),this.state=Ua.START,this.renderable=!1,this.upsampledFromParent=!1;let t=this.data;l(t)&&l(t.freeResources)&&t.freeResources(),o3(this._southwestChild),this._southwestChild=void 0,o3(this._southeastChild),this._southeastChild=void 0,o3(this._northwestChild),this._northwestChild=void 0,o3(this._northeastChild),this._northeastChild=void 0}},Dxt=256;function Oxt(e,t,n,i){let o=n.width/Dxt*i,r=Math.floor(e/o)*o,s=Math.floor(t/o)*o;return`${r.toFixed(10)},${s.toFixed(10)}`}var Bxt=new fe;function D1e(e,t){let n=e.northwestChild.rectangle,i=re.southeast(n,Bxt),o=t.longitude>=i.longitude?1:0;switch((t.latitude<i.latitude?1:0)*2+o){case 0:return e.northwestChild;case 1:return e.northeastChild;case 2:return e.southwestChild;default:return e.southeastChild}}function o3(e){l(e)&&e.freeResources()}var YY=vee;var nji=x(T(),1);function r3(){this.head=void 0,this.tail=void 0,this.count=0,this._lastBeforeStartOfFrame=void 0}r3.prototype.markStartOfRenderFrame=function(){this._lastBeforeStartOfFrame=this.head};r3.prototype.trimTiles=function(e){let t=this.tail,n=!0;for(;n&&l(this._lastBeforeStartOfFrame)&&this.count>e&&l(t);){n=t!==this._lastBeforeStartOfFrame;let i=t.replacementPrevious;t.eligibleForUnloading&&(t.freeResources(),O1e(this,t)),t=i}};function O1e(e,t){let n=t.replacementPrevious,i=t.replacementNext;t===e._lastBeforeStartOfFrame&&(e._lastBeforeStartOfFrame=i),t===e.head?e.head=i:n.replacementNext=i,t===e.tail?e.tail=n:i.replacementPrevious=n,t.replacementPrevious=void 0,t.replacementNext=void 0,--e.count}r3.prototype.markTileRendered=function(e){let t=this.head;if(t===e){e===this._lastBeforeStartOfFrame&&(this._lastBeforeStartOfFrame=e.replacementNext);return}if(++this.count,!l(t)){e.replacementPrevious=void 0,e.replacementNext=void 0,this.head=e,this.tail=e;return}(l(e.replacementPrevious)||l(e.replacementNext))&&O1e(this,e),e.replacementPrevious=void 0,e.replacementNext=t,t.replacementPrevious=e,this.head=e};var wY=r3;function oh(e){this._tileProvider=e.tileProvider,this._tileProvider.quadtree=this,this._debug={enableDebugOutput:!1,maxDepth:0,maxDepthVisited:0,tilesVisited:0,tilesCulled:0,tilesRendered:0,tilesWaitingForChildren:0,lastMaxDepth:-1,lastMaxDepthVisited:-1,lastTilesVisited:-1,lastTilesCulled:-1,lastTilesRendered:-1,lastTilesWaitingForChildren:-1,suspendLodUpdate:!1};let n=this._tileProvider.tilingScheme.ellipsoid;this._tilesRenderedThisFrame=new Set,this._tilesToRender=[],this._tileLoadQueueHigh=[],this._tileLoadQueueMedium=[],this._tileLoadQueueLow=[],this._tileReplacementQueue=new wY,this._levelZeroTiles=void 0,this._loadQueueTimeSlice=5,this._tilesInvalidated=!1,this._addHeightCallbacks=[],this._removeHeightCallbacks=[],this._tileToUpdateHeights=[],this._updateHeightsTimeSlice=2,this._cameraPositionCartographic=void 0,this._cameraReferenceFrameOriginCartographic=void 0,this.maximumScreenSpaceError=e.maximumScreenSpaceError??2,this.tileCacheSize=e.tileCacheSize??100,this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this._occluders=new NY({ellipsoid:n}),this._tileLoadProgressEvent=new Se,this._lastTileLoadQueueLength=0,this._lastSelectionFrameNumber=void 0}Object.defineProperties(oh.prototype,{tileProvider:{get:function(){return this._tileProvider}},tileLoadProgressEvent:{get:function(){return this._tileLoadProgressEvent}},occluders:{get:function(){return this._occluders}}});oh.prototype.invalidateAllTiles=function(){this._tilesInvalidated=!0};function zxt(e){let t=e._tileReplacementQueue;t.head=void 0,t.tail=void 0,t.count=0,z1e(e);let n=e._levelZeroTiles;if(l(n))for(let i=0;i<n.length;++i){let r=n[i].customData;for(let s of r)s.level=0,e._addHeightCallbacks.push(s);n[i].freeResources()}e._levelZeroTiles=void 0,e._tileProvider.cancelReprojections()}oh.prototype.forEachLoadedTile=function(e){let t=this._tileReplacementQueue.head;for(;l(t);)t.state!==Ua.START&&e(t),t=t.replacementNext};oh.prototype.forEachRenderedTile=function(e){let t=this._tilesRenderedThisFrame;for(let n of t)e(n)};oh.prototype.updateHeight=function(e,t){let n=this,i={positionOnEllipsoidSurface:void 0,positionCartographic:e,level:-1,callback:t};return i.removeFunc=function(){let o=n._addHeightCallbacks,r=o.length;for(let s=0;s<r;++s)if(o[s]===i){o.splice(s,1);break}n._removeHeightCallbacks.push(i),i.callback&&(i.callback=void 0)},n._addHeightCallbacks.push(i),i.removeFunc};oh.prototype.update=function(e){l(this._tileProvider.update)&&this._tileProvider.update(e)};function z1e(e){let t=e._debug;t.maxDepth=0,t.maxDepthVisited=0,t.tilesVisited=0,t.tilesCulled=0,t.tilesRendered=0,t.tilesWaitingForChildren=0,e._tileLoadQueueHigh.length=0,e._tileLoadQueueMedium.length=0,e._tileLoadQueueLow.length=0}oh.prototype.beginFrame=function(e){e.passes.render&&(this._tilesInvalidated&&(zxt(this),this._tilesInvalidated=!1),this._tileProvider.initialize(e),z1e(this),!this._debug.suspendLodUpdate&&(this._tileReplacementQueue.markStartOfRenderFrame(),this._tilesRenderedThisFrame.clear()))};oh.prototype.render=function(e){let t=e.passes,n=this._tileProvider;t.render&&(n.beginUpdate(e),jxt(this,e),sTt(this,e),n.endUpdate(e)),t.pick&&this._tilesToRender.length>0&&n.updateForPick(e)};function Hxt(e,t){let n=e._tileLoadQueueHigh.length+e._tileLoadQueueMedium.length+e._tileLoadQueueLow.length;if(n!==e._lastTileLoadQueueLength||e._tilesInvalidated){let o=Se.prototype.raiseEvent.bind(e._tileLoadProgressEvent,n);t.afterRender.push(()=>(o(),!0)),e._lastTileLoadQueueLength=n}let i=e._debug;i.enableDebugOutput&&!i.suspendLodUpdate&&(i.maxDepth=e._tilesToRender.reduce(function(o,r){return Math.max(o,r.level)},-1),i.tilesRendered=e._tilesToRender.length,(i.tilesVisited!==i.lastTilesVisited||i.tilesRendered!==i.lastTilesRendered||i.tilesCulled!==i.lastTilesCulled||i.maxDepth!==i.lastMaxDepth||i.tilesWaitingForChildren!==i.lastTilesWaitingForChildren||i.maxDepthVisited!==i.lastMaxDepthVisited)&&(console.log(`Visited ${i.tilesVisited}, Rendered: ${i.tilesRendered}, Culled: ${i.tilesCulled}, Max Depth Rendered: ${i.maxDepth}, Max Depth Visited: ${i.maxDepthVisited}, Waiting for children: ${i.tilesWaitingForChildren}`),i.lastTilesVisited=i.tilesVisited,i.lastTilesRendered=i.tilesRendered,i.lastTilesCulled=i.tilesCulled,i.lastMaxDepth=i.maxDepth,i.lastTilesWaitingForChildren=i.tilesWaitingForChildren,i.lastMaxDepthVisited=i.maxDepthVisited))}oh.prototype.endFrame=function(e){!e.passes.render||e.mode===se.MORPHING||(nTt(this,e),rTt(this,e),Hxt(this,e))};oh.prototype.isDestroyed=function(){return!1};oh.prototype.destroy=function(){this._tileProvider=this._tileProvider&&this._tileProvider.destroy()};var kY,B1e=new fe;function Kxt(e,t){let n=re.center(e.rectangle,B1e),i=n.longitude-kY.longitude,o=n.latitude-kY.latitude;n=re.center(t.rectangle,B1e);let r=n.longitude-kY.longitude,s=n.latitude-kY.latitude;return i*i+o*o-(r*r+s*s)}var Jxt=new h,MY=[];function jxt(e,t){let n=e._debug;if(n.suspendLodUpdate)return;let i=e._tilesToRender;i.length=0;let o=e._tileProvider;if(!l(e._levelZeroTiles)){let m=o.tilingScheme;if(l(m)){let p=o.tilingScheme;e._levelZeroTiles=YY.createLevelZeroTiles(p);let b=e._levelZeroTiles.length;if(MY.length<b){MY=new Array(b);for(let f=0;f<b;++f)MY[f]===void 0&&(MY[f]=new UY)}}else return}e._occluders.ellipsoid.cameraPosition=t.camera.positionWC;let r=e._levelZeroTiles,s=r.length>1?e._occluders:void 0;kY=t.camera.positionCartographic,r.sort(Kxt);let a=e._addHeightCallbacks,c=e._removeHeightCallbacks;a.forEach(m=>{let p=r.find(b=>re.contains(b.rectangle,m.positionCartographic));p&&p._addedCustomData.push(m)}),c.forEach(m=>{let p=r.find(b=>re.contains(b.rectangle,m.positionCartographic));p&&p._removedCustomData.push(m)}),r.forEach(m=>m.updateCustomData()),a.length=0,c.length=0;let d=t.camera;e._cameraPositionCartographic=d.positionCartographic;let u=I.getTranslation(d.transform,Jxt);e._cameraReferenceFrameOriginCartographic=e.tileProvider.tilingScheme.ellipsoid.cartesianToCartographic(u,e._cameraReferenceFrameOriginCartographic);for(let m=0;m<r.length;++m){let p=r[m];e._tileReplacementQueue.markTileRendered(p),p.renderable?Xc(e,p,o,t,s,!1,MY[m]):(gg(e,e._tileLoadQueueHigh,p,t),++n.tilesWaitingForChildren)}e._lastSelectionFrameNumber=t.frameNumber}function gg(e,t,n,i){n.needsLoading&&(e.tileProvider.computeTileLoadPriority!==void 0&&(n._loadPriority=e.tileProvider.computeTileLoadPriority(n,i)),t.push(n))}function UY(){this.allAreRenderable=!0,this.anyWereRenderedLastFrame=!1,this.notYetRenderableCount=0}function H1e(){this.southwest=new UY,this.southeast=new UY,this.northwest=new UY,this.northeast=new UY}H1e.prototype.combine=function(e){let t=this.southwest,n=this.southeast,i=this.northwest,o=this.northeast;e.allAreRenderable=t.allAreRenderable&&n.allAreRenderable&&i.allAreRenderable&&o.allAreRenderable,e.anyWereRenderedLastFrame=t.anyWereRenderedLastFrame||n.anyWereRenderedLastFrame||i.anyWereRenderedLastFrame||o.anyWereRenderedLastFrame,e.notYetRenderableCount=t.notYetRenderableCount+n.notYetRenderableCount+i.notYetRenderableCount+o.notYetRenderableCount};var Iee=new Array(31);for(let e=0;e<Iee.length;++e)Iee[e]=new H1e;function Qxt(e,t,n,i,o){let r=e._debug;++r.tilesVisited,e._tileReplacementQueue.markTileRendered(n),n.updateCustomData(),n.level>r.maxDepthVisited&&(r.maxDepthVisited=n.level);let s=eTt(e,t,n)<e.maximumScreenSpaceError,a=n.southwestChild,c=n.southeastChild,d=n.northwestChild,u=n.northeastChild,m=e._lastSelectionFrameNumber,p=n._lastSelectionResultFrame===m?n._lastSelectionResult:hi.NONE,b=e.tileProvider;if(s||i){let f=hi.originalResult(p)===hi.RENDERED,y=hi.originalResult(p)===hi.CULLED||p===hi.NONE,_=n.state===Ua.DONE,S=f||y||_;if(S||l(b.canRenderWithoutLosingDetail)&&(S=b.canRenderWithoutLosingDetail(n)),S){s&&gg(e,e._tileLoadQueueMedium,n,t),s3(e,n),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===hi.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=hi.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}i=!0,s&&gg(e,e._tileLoadQueueHigh,n,t)}if(b.canRefine(n)){if(a.upsampledFromParent&&c.upsampledFromParent&&d.upsampledFromParent&&u.upsampledFromParent){s3(e,n),gg(e,e._tileLoadQueueMedium,n,t),e._tileReplacementQueue.markTileRendered(a),e._tileReplacementQueue.markTileRendered(c),e._tileReplacementQueue.markTileRendered(d),e._tileReplacementQueue.markTileRendered(u),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===hi.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=hi.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=hi.REFINED;let y=e._tilesToRender.length,_=e._tileLoadQueueLow.length,S=e._tileLoadQueueMedium.length,Z=e._tileLoadQueueHigh.length,V=e._tileToUpdateHeights.length;if(qxt(e,a,c,d,u,t,i,o),y!==e._tilesToRender.length){let C=o.allAreRenderable,G=o.anyWereRenderedLastFrame,E=o.notYetRenderableCount,v=!1;if(!C&&!G){let F=e._tilesToRender;for(let N=y;N<F.length;++N){let g=F[N];for(;g!==void 0&&g._lastSelectionResult!==hi.KICKED&&g!==n;)g._lastSelectionResult=hi.kick(g._lastSelectionResult),g=g.parent}e._tilesToRender.length=y,e._tileToUpdateHeights.length=V,s3(e,n),n._lastSelectionResult=hi.RENDERED;let P=p===hi.RENDERED;!P&&E>e.loadingDescendantLimit&&(e._tileLoadQueueLow.length=_,e._tileLoadQueueMedium.length=S,e._tileLoadQueueHigh.length=Z,gg(e,e._tileLoadQueueMedium,n,t),o.notYetRenderableCount=n.renderable?0:1,v=!0),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=P,P||e._tileToUpdateHeights.push(n),++r.tilesWaitingForChildren}e.preloadAncestors&&!v&&gg(e,e._tileLoadQueueLow,n,t)}return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=hi.RENDERED,s3(e,n),gg(e,e._tileLoadQueueHigh,n,t),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===hi.RENDERED,o.notYetRenderableCount=n.renderable?0:1}function qxt(e,t,n,i,o,r,s,a){let c=r.camera.positionCartographic,d=e._tileProvider,u=e._occluders,m=Iee[t.level],p=m.southwest,b=m.southeast,f=m.northwest,y=m.northeast;c.longitude<t.rectangle.east?c.latitude<t.rectangle.north?(Xc(e,t,d,r,u,s,p),Xc(e,n,d,r,u,s,b),Xc(e,i,d,r,u,s,f),Xc(e,o,d,r,u,s,y)):(Xc(e,i,d,r,u,s,f),Xc(e,t,d,r,u,s,p),Xc(e,o,d,r,u,s,y),Xc(e,n,d,r,u,s,b)):c.latitude<t.rectangle.north?(Xc(e,n,d,r,u,s,b),Xc(e,t,d,r,u,s,p),Xc(e,o,d,r,u,s,y),Xc(e,i,d,r,u,s,f)):(Xc(e,o,d,r,u,s,y),Xc(e,i,d,r,u,s,f),Xc(e,n,d,r,u,s,b),Xc(e,t,d,r,u,s,p)),m.combine(a)}function $xt(e,t){let n=t.rectangle;return l(e._cameraPositionCartographic)&&re.contains(n,e._cameraPositionCartographic)||l(e._cameraReferenceFrameOriginCartographic)&&re.contains(n,e._cameraReferenceFrameOriginCartographic)}function Xc(e,t,n,i,o,r,s){if(n.computeTileVisibility(t,i,o)!==Pr.NONE)return Qxt(e,i,t,r,s);if(++e._debug.tilesCulled,e._tileReplacementQueue.markTileRendered(t),s.allAreRenderable=!0,s.anyWereRenderedLastFrame=!1,s.notYetRenderableCount=0,$xt(e,t)){(!l(t.data)||!l(t.data.vertexArray))&&gg(e,e._tileLoadQueueMedium,t,i);let a=e._lastSelectionFrameNumber,c=t._lastSelectionResultFrame===a?t._lastSelectionResult:hi.NONE;c!==hi.CULLED_BUT_NEEDED&&c!==hi.RENDERED&&e._tileToUpdateHeights.push(t),t._lastSelectionResult=hi.CULLED_BUT_NEEDED}else e.preloadSiblings||t.level===0?(gg(e,e._tileLoadQueueLow,t,i),t._lastSelectionResult=hi.CULLED):t._lastSelectionResult=hi.CULLED;t._lastSelectionResultFrame=i.frameNumber}function eTt(e,t,n){if(t.mode===se.SCENE2D||t.camera.frustum instanceof bn||t.camera.frustum instanceof ds)return tTt(e,t,n);let i=e._tileProvider.getLevelMaximumGeometricError(n.level),o=n._distance,r=t.context.drawingBufferHeight,s=t.camera.frustum.sseDenominator,a=i*r/(o*s);return t.fog.enabled&&(a-=L.fog(o,t.fog.density)*t.fog.sse),a/=t.pixelRatio,a}function tTt(e,t,n){let o=t.camera.frustum,r=o.offCenterFrustum;l(r)&&(o=r);let s=t.context,a=s.drawingBufferWidth,c=s.drawingBufferHeight,d=e._tileProvider.getLevelMaximumGeometricError(n.level),u=Math.max(o.top-o.bottom,o.right-o.left)/Math.max(a,c),m=d/u;return t.fog.enabled&&t.mode!==se.SCENE2D&&(m-=L.fog(n._distance,t.fog.density)*t.fog.sse),m/=t.pixelRatio,m}function s3(e,t){e._tilesToRender.push(t),e._tilesRenderedThisFrame.add(t)}function nTt(e,t){let n=e._tileLoadQueueHigh,i=e._tileLoadQueueMedium,o=e._tileLoadQueueLow;if(n.length===0&&i.length===0&&o.length===0)return;e._tileReplacementQueue.trimTiles(e.tileCacheSize);let r=Tn()+e._loadQueueTimeSlice,s=e._tileProvider,a=Fee(e,t,s,r,n,!1);a=Fee(e,t,s,r,i,a),Fee(e,t,s,r,o,a)}function iTt(e,t){return e._loadPriority-t._loadPriority}function Fee(e,t,n,i,o,r){n.computeTileLoadPriority!==void 0&&o.sort(iTt);for(let s=0,a=o.length;s<a&&(Tn()<i||!r);++s){let c=o[s];e._tileReplacementQueue.markTileRendered(c),n.loadTile(t,c),r=!0}return r}var _R=new fn,a3=new fe,Fx=new h,oTt=[];function rTt(e,t){if(!l(e.tileProvider.tilingScheme))return;let n=oTt;n.length=0;let i=e._tileToUpdateHeights,o=Tn(),r=e._updateHeightsTimeSlice,s=o+r,a=t.mode,c=t.mapProjection,d=e.tileProvider.tilingScheme.ellipsoid,u;for(;i.length>0;){let m=i[0];if(!l(m.data)||!l(m.data.mesh)){let _=m._lastSelectionResultFrame===e._lastSelectionFrameNumber?m._lastSelectionResult:hi.NONE;(_===hi.RENDERED||_===hi.CULLED_BUT_NEEDED)&&n.push(m),m.clearPositionCache(),i.shift();continue}let p=m.customData;l(m._customDataIterator)||(m._customDataIterator=p.values());let b=m._customDataIterator,f=!1,y;for(;!(y=b.next()).done;){let _=y.value,S=m.data.terrainData,Z=l(S)&&S.wasCreatedByUpsampling();if(m.level>_.level&&!Z){let V,C=m.getPositionCacheEntry(_.positionCartographic,e.maximumScreenSpaceError);if(l(C))V=C;else{if(l(_.positionOnEllipsoidSurface)||(_.positionOnEllipsoidSurface=h.fromRadians(_.positionCartographic.longitude,_.positionCartographic.latitude,0,d)),a===se.SCENE3D){let G=d.geodeticSurfaceNormal(_.positionOnEllipsoidSurface,_R.direction),E=d.getSurfaceNormalIntersectionWithZAxis(_.positionOnEllipsoidSurface,11500,_R.origin);if(!l(E)){let v=0;l(m.data.tileBoundingRegion)&&(v=m.data.tileBoundingRegion.minimumHeight);let F=Math.min(v,-11500),P=h.multiplyByScalar(G,Math.abs(F)+1,Fx);h.subtract(_.positionOnEllipsoidSurface,P,_R.origin)}}else fe.clone(_.positionCartographic,a3),a3.height=-11500,c.project(a3,Fx),h.fromElements(Fx.z,Fx.x,Fx.y,Fx),h.clone(Fx,_R.origin),h.clone(h.UNIT_X,_R.direction);V=m.data.pick(_R,a,c,!1,Fx),l(V)&&m.setPositionCacheEntry(_.positionCartographic,e.maximumScreenSpaceError,h.clone(V))}if(l(V)){if(l(_.callback)){let G=d.cartesianToCartographic(V,a3);_.callback(G)}_.level=m.level}}if(Tn()>=s){f=!0;break}}if(f){m._customDataIterator=b;break}else m._customDataIterator=void 0,i.shift()}for(u=0;u<n.length;u++)i.push(n[u])}function sTt(e,t){let n=e._tileProvider,i=e._tilesToRender;for(let o=0,r=i.length;o<r;++o){let s=i[o];n.showTileThisFrame(s,t)}}var DY=oh;function vf(e){e=e??ie.default;let t=new Cp({ellipsoid:e}),n=new zS,i=new p2({tilingScheme:t.tilingScheme});this._ellipsoid=e,this._imageryLayerCollection=n,this._surfaceShaderSet=new FY,this._material=void 0,this._surface=new DY({tileProvider:new PY({terrainProvider:t,imageryLayers:n,surfaceShaderSet:this._surfaceShaderSet,vectorProvider:i})}),this._terrainProvider=t,this._terrainProviderChanged=new Se,this._vectorProvider=i,this._undergroundColor=U.clone(U.BLACK),this._undergroundColorAlphaByDistance=new Ht(e.maximumRadius/1e3,0,e.maximumRadius/5,1),this._translucency=new XY,Xee(this),this.show=!0,this._oceanNormalMapResourceDirty=!0,this._oceanNormalMapResource=new ve({url:qt("Assets/Textures/waterNormalsSmall.jpg")}),this.maximumScreenSpaceError=2,this.tileCacheSize=100,this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this.fillHighlightColor=void 0,this.enableLighting=!1,this.lambertDiffuseMultiplier=.9,this.dynamicAtmosphereLighting=!0,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=ie.WGS84.equals(e),this.atmosphereLightIntensity=10,this.atmosphereRayleighCoefficient=new h(55e-7,13e-6,284e-7),this.atmosphereMieCoefficient=new h(21e-6,21e-6,21e-6),this.atmosphereRayleighScaleHeight=1e4,this.atmosphereMieScaleHeight=3200,this.atmosphereMieAnisotropy=.9,this.lightingFadeOutDistance=L.PI_OVER_TWO*e.minimumRadius,this.lightingFadeInDistance=L.PI*e.minimumRadius,this.nightFadeOutDistance=L.PI_OVER_TWO*e.minimumRadius,this.nightFadeInDistance=5*L.PI_OVER_TWO*e.minimumRadius,this.showWaterEffect=!0,this.depthTestAgainstTerrain=!1,this.shadows=Fn.RECEIVE_ONLY,this.atmosphereHueShift=0,this.atmosphereSaturationShift=0,this.atmosphereBrightnessShift=0,this.showSkirts=!0,this.backFaceCulling=!0,this._oceanNormalMap=void 0,this._zoomedOutOceanSpecularIntensity=void 0,this.vertexShadowDarkness=.3}Object.defineProperties(vf.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},imageryLayers:{get:function(){return this._imageryLayerCollection}},imageryLayersUpdatedEvent:{get:function(){return this._surface.tileProvider.imageryLayersUpdatedEvent}},tilesLoaded:{get:function(){return l(this._surface)?this._surface._tileLoadQueueHigh.length===0&&this._surface._tileLoadQueueMedium.length===0&&this._surface._tileLoadQueueLow.length===0:!0}},baseColor:{get:function(){return this._surface.tileProvider.baseColor},set:function(e){this._surface.tileProvider.baseColor=e}},clippingPlanes:{get:function(){return this._surface.tileProvider.clippingPlanes},set:function(e){this._surface.tileProvider.clippingPlanes=e}},clippingPolygons:{get:function(){return this._surface.tileProvider.clippingPolygons},set:function(e){this._surface.tileProvider.clippingPolygons=e}},cartographicLimitRectangle:{get:function(){return this._surface.tileProvider.cartographicLimitRectangle},set:function(e){l(e)||(e=re.clone(re.MAX_VALUE)),this._surface.tileProvider.cartographicLimitRectangle=e}},oceanNormalMapUrl:{get:function(){return this._oceanNormalMapResource.url},set:function(e){this._oceanNormalMapResource.url=e,this._oceanNormalMapResourceDirty=!0}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){e!==this._terrainProvider&&(this._terrainProvider=e,l(e)&&(this._vectorProvider.tilingScheme=e.tilingScheme),this._terrainProviderChanged.raiseEvent(e),l(this._material)&&Xee(this))}},terrainProviderChanged:{get:function(){return this._terrainProviderChanged}},vectorProvider:{get:function(){return this._vectorProvider}},tileLoadProgressEvent:{get:function(){return this._surface.tileLoadProgressEvent}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,Xee(this))}},undergroundColor:{get:function(){return this._undergroundColor},set:function(e){this._undergroundColor=U.clone(e,this._undergroundColor)}},undergroundColorAlphaByDistance:{get:function(){return this._undergroundColorAlphaByDistance},set:function(e){this._undergroundColorAlphaByDistance=Ht.clone(e,this._undergroundColorAlphaByDistance)}},translucency:{get:function(){return this._translucency}}});function Xee(e){let t=[],n=l(e._material)&&(l(e._material.shaderSource.match(/slope/))||l(e._material.shaderSource.match("normalEC"))),i=[df,gR];l(e._material)&&(!n||e._terrainProvider.hasVertexNormals)?(i.push(e._material.shaderSource),t.push("APPLY_MATERIAL"),e._surface._tileProvider.materialUniformMap=e._material._uniforms):e._surface._tileProvider.materialUniformMap=void 0,i.push(LY),e._surfaceShaderSet.baseVertexShaderSource=new ze({sources:[df,gR,WY],defines:t}),e._surfaceShaderSet.baseFragmentShaderSource=new ze({sources:i,defines:t}),e._surfaceShaderSet.material=e._material}function aTt(e){return function(t,n){let i=le.distanceSquaredTo(t.pickBoundingSphere,e),o=le.distanceSquaredTo(n.pickBoundingSphere,e);return i-o}}var cTt=[],lTt={start:0,stop:0};vf.prototype.pickWorldCoordinates=function(e,t,n,i){n=n??!0;let o=t.mode,r=t.mapProjection,s=cTt;s.length=0;for(let d of this._surface._tilesRenderedThisFrame){let u=d.data;if(!l(u))continue;let m=u.pickBoundingSphere;if(o!==se.SCENE3D)u.pickBoundingSphere=m=le.fromRectangleWithHeights2D(d.rectangle,r,u.tileBoundingRegion.minimumHeight,u.tileBoundingRegion.maximumHeight,m),h.fromElements(m.center.z,m.center.x,m.center.y,m.center);else if(l(u.renderedMesh))le.clone(u.tileBoundingRegion.boundingSphere,m);else continue;let p=di.raySphere(e,m,lTt);l(p)&&s.push(u)}s.sort(aTt(e.origin));let a,c=s.length;for(let d=0;d<c&&(a=s[d].pick(e,t.mode,t.mapProjection,n,i),!l(a));++d);return a};var dTt=new fe;vf.prototype.pick=function(e,t,n){if(n=this.pickWorldCoordinates(e,t,!0,n),l(n)&&t.mode!==se.SCENE3D){n=h.fromElements(n.y,n.z,n.x,n);let i=t.mapProjection.unproject(n,dTt);n=this._ellipsoid.cartographicToCartesian(i,n)}return n};var uTt=new h,K1e=new h,mTt=new fe,hTt=new fn;function Pee(e,t){return l(e)&&re.contains(e.rectangle,t)?e:void 0}vf.prototype.getHeight=function(e){let t=this._surface._levelZeroTiles;if(!l(t))return;let n,i,o=t.length;for(i=0;i<o&&(n=t[i],!re.contains(n.rectangle,e));++i);if(i>=o)return;let r=n;for(;l(n);)n=Pee(n._southwestChild,e)||Pee(n._southeastChild,e)||Pee(n._northwestChild,e)||n._northeastChild,l(n)&&l(n.data)&&l(n.data.renderedMesh)&&(r=n);if(n=r,!l(n)||!l(n.data)||!l(n.data.renderedMesh))return;let s=this._surface._tileProvider.tilingScheme.projection,a=this._surface._tileProvider.tilingScheme.ellipsoid,c=h.fromRadians(e.longitude,e.latitude,0,a,uTt),d=hTt,u=a.geodeticSurfaceNormal(c,d.direction),m=a.getSurfaceNormalIntersectionWithZAxis(c,11500,d.origin);if(!l(m)){let b;l(n.data.tileBoundingRegion)&&(b=n.data.tileBoundingRegion.minimumHeight);let f=Math.min(b??0,-11500),y=h.multiplyByScalar(u,Math.abs(f)+1,K1e);h.subtract(c,y,d.origin)}let p=n.data.pick(d,se.SCENE3D,s,!1,K1e);if(l(p))return a.cartesianToCartographic(p,mTt).height};vf.prototype.update=function(e){this.show&&e.passes.render&&this._surface.update(e)};vf.prototype.beginFrame=function(e){let t=this._surface,n=t.tileProvider,i=this.terrainProvider,o=l(i)&&i.hasWaterMask&&i.hasWaterMask;if(o&&this._oceanNormalMapResourceDirty){this._oceanNormalMapResourceDirty=!1;let a=this._oceanNormalMapResource,c=a.url;if(l(c)){let d=this;a.fetchImage().then(function(u){c===d._oceanNormalMapResource.url&&(d._oceanNormalMap=d._oceanNormalMap&&d._oceanNormalMap.destroy(),d._oceanNormalMap=new Ct({context:e.context,source:u}))})}else this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy()}let r=e.passes,s=e.mode;r.render&&(this.showGroundAtmosphere?this._zoomedOutOceanSpecularIntensity=.4:this._zoomedOutOceanSpecularIntensity=.5,t.maximumScreenSpaceError=this.maximumScreenSpaceError,t.tileCacheSize=this.tileCacheSize,t.loadingDescendantLimit=this.loadingDescendantLimit,t.preloadAncestors=this.preloadAncestors,t.preloadSiblings=this.preloadSiblings,n.terrainProvider=this.terrainProvider,n.lightingFadeOutDistance=this.lightingFadeOutDistance,n.lightingFadeInDistance=this.lightingFadeInDistance,n.nightFadeOutDistance=this.nightFadeOutDistance,n.nightFadeInDistance=this.nightFadeInDistance,n.zoomedOutOceanSpecularIntensity=s===se.SCENE3D?this._zoomedOutOceanSpecularIntensity:0,n.hasWaterMask=o,n.showWaterEffect=this.showWaterEffect,n.oceanNormalMap=this._oceanNormalMap,n.enableLighting=this.enableLighting,n.dynamicAtmosphereLighting=this.dynamicAtmosphereLighting,n.dynamicAtmosphereLightingFromSun=this.dynamicAtmosphereLightingFromSun,n.showGroundAtmosphere=this.showGroundAtmosphere,n.atmosphereLightIntensity=this.atmosphereLightIntensity,n.atmosphereRayleighCoefficient=this.atmosphereRayleighCoefficient,n.atmosphereMieCoefficient=this.atmosphereMieCoefficient,n.atmosphereRayleighScaleHeight=this.atmosphereRayleighScaleHeight,n.atmosphereMieScaleHeight=this.atmosphereMieScaleHeight,n.atmosphereMieAnisotropy=this.atmosphereMieAnisotropy,n.shadows=this.shadows,n.hueShift=this.atmosphereHueShift,n.saturationShift=this.atmosphereSaturationShift,n.brightnessShift=this.atmosphereBrightnessShift,n.fillHighlightColor=this.fillHighlightColor,n.showSkirts=this.showSkirts,n.backFaceCulling=this.backFaceCulling,n.vertexShadowDarkness=this.vertexShadowDarkness,n.undergroundColor=this._undergroundColor,n.undergroundColorAlphaByDistance=this._undergroundColorAlphaByDistance,n.lambertDiffuseMultiplier=this.lambertDiffuseMultiplier,t.beginFrame(e))};vf.prototype.render=function(e){this.show&&(l(this._material)&&this._material.update(e.context),this._surface.render(e))};vf.prototype.endFrame=function(e){this.show&&e.passes.render&&this._surface.endFrame(e)};vf.prototype.isDestroyed=function(){return!1};vf.prototype.destroy=function(){return this._surfaceShaderSet=this._surfaceShaderSet&&this._surfaceShaderSet.destroy(),this._surface=this._surface&&this._surface.destroy(),this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy(),me(this)};var OY=vf;var D4i=x(T(),1);var A4i=x(T(),1);var n4i=x(T(),1),SR=`uniform vec3 u_radii; uniform vec3 u_oneOverEllipsoidRadiiSquared; in vec3 v_positionEC; vec4 computeEllipsoidColor(czm_ray ray, float intersection, float side) { vec3 positionEC = czm_pointAlongRay(ray, intersection); vec3 positionMC = (czm_inverseModelView * vec4(positionEC, 1.0)).xyz; vec3 geodeticNormal = normalize(czm_geodeticSurfaceNormal(positionMC, vec3(0.0), u_oneOverEllipsoidRadiiSquared)); vec3 sphericalNormal = normalize(positionMC / u_radii); vec3 normalMC = geodeticNormal * side; // normalized surface normal (always facing the viewer) in model coordinates vec3 normalEC = normalize(czm_normal * normalMC); // normalized surface normal in eye coordinates vec2 st = czm_ellipsoidTextureCoordinates(sphericalNormal); vec3 positionToEyeEC = -positionEC; czm_materialInput materialInput; materialInput.s = st.s; materialInput.st = st; materialInput.str = (positionMC + u_radii) / u_radii; materialInput.normalEC = normalEC; materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC); materialInput.positionToEyeEC = positionToEyeEC; czm_material material = czm_getMaterial(materialInput); #ifdef ONLY_SUN_LIGHTING return czm_private_phong(normalize(positionToEyeEC), material, czm_sunDirectionEC); #else return czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC); #endif } void main() { // PERFORMANCE_TODO: When dynamic branching is available, compute ratio of maximum and minimum radii // in the vertex shader. Only when it is larger than some constant, march along the ray. // Otherwise perform one intersection test which will be the common case. // Test if the ray intersects a sphere with the ellipsoid's maximum radius. // For very oblate ellipsoids, using the ellipsoid's radii for an intersection test // may cause false negatives. This will discard fragments before marching the ray forward. float maxRadius = max(u_radii.x, max(u_radii.y, u_radii.z)) * 1.5; vec3 direction = normalize(v_positionEC); vec3 ellipsoidCenter = czm_modelView[3].xyz; float t1 = -1.0; float t2 = -1.0; float b = -2.0 * dot(direction, ellipsoidCenter); float c = dot(ellipsoidCenter, ellipsoidCenter) - maxRadius * maxRadius; float discriminant = b * b - 4.0 * c; if (discriminant >= 0.0) { t1 = (-b - sqrt(discriminant)) * 0.5; t2 = (-b + sqrt(discriminant)) * 0.5; } if (t1 < 0.0 && t2 < 0.0) { discard; } float t = min(t1, t2); if (t < 0.0) { t = 0.0; } // March ray forward to intersection with larger sphere and find czm_ray ray = czm_ray(t * direction, direction); vec3 ellipsoid_inverseRadii = vec3(1.0 / u_radii.x, 1.0 / u_radii.y, 1.0 / u_radii.z); czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoidCenter, ellipsoid_inverseRadii); if (czm_isEmpty(intersection)) { discard; } // If the viewer is outside, compute outsideFaceColor, with normals facing outward. vec4 outsideFaceColor = (intersection.start != 0.0) ? computeEllipsoidColor(ray, intersection.start, 1.0) : vec4(0.0); // If the viewer either is inside or can see inside, compute insideFaceColor, with normals facing inward. vec4 insideFaceColor = (outsideFaceColor.a < 1.0) ? computeEllipsoidColor(ray, intersection.stop, -1.0) : vec4(0.0); out_FragColor = mix(insideFaceColor, outsideFaceColor, outsideFaceColor.a); out_FragColor.a = 1.0 - (1.0 - insideFaceColor.a) * (1.0 - outsideFaceColor.a); #if (defined(WRITE_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth))) t = (intersection.start != 0.0) ? intersection.start : intersection.stop; vec3 positionEC = czm_pointAlongRay(ray, t); vec4 positionCC = czm_projection * vec4(positionEC, 1.0); #ifdef LOG_DEPTH czm_writeLogDepth(1.0 + positionCC.w); #else float z = positionCC.z / positionCC.w; float n = czm_depthRange.near; float f = czm_depthRange.far; gl_FragDepth = (z * (f - n) + f + n) * 0.5; #endif #endif } `;var o4i=x(T(),1),ZR=`in vec3 position; uniform vec3 u_radii; out vec3 v_positionEC; void main() { // In the vertex data, the cube goes from (-1.0, -1.0, -1.0) to (1.0, 1.0, 1.0) in model coordinates. // Scale to consider the radii. We could also do this once on the CPU when using the BoxGeometry, // but doing it here allows us to change the radii without rewriting the vertex data, and // allows all ellipsoids to reuse the same vertex data. vec4 p = vec4(u_radii * position, 1.0); vec4 pEC = czm_modelView * p; v_positionEC = pEC.xyz; // position in eye coordinates gl_Position = czm_projection * pEC; // With multi-frustum, when the ellipsoid primitive is positioned on the intersection of two frustums // and close to terrain, the terrain (writes depth) in the closest frustum can overwrite part of the // ellipsoid (does not write depth) that was rendered in the farther frustum. // // Here, we clamp the depth in the vertex shader to avoid being overwritten; however, this creates // artifacts since some fragments can be alpha blended twice. This is solved by only rendering // the ellipsoid in the closest frustum to the viewer. gl_Position.z = clamp(gl_Position.z, czm_depthRange.near, czm_depthRange.far); czm_vertexLogDepth(); } `;var Nee={position:0};function c3(e){e=e??B.EMPTY_OBJECT,this.center=h.clone(e.center??h.ZERO),this._center=new h,this.radii=h.clone(e.radii),this._radii=new h,this._oneOverEllipsoidRadiiSquared=new h,this._boundingSphere=new le,this.modelMatrix=I.clone(e.modelMatrix??I.IDENTITY),this._modelMatrix=new I,this._computedModelMatrix=new I,this.show=e.show??!0,this.material=e.material??no.fromType(no.ColorType),this._material=void 0,this._translucent=void 0,this.id=e.id,this._id=void 0,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.onlySunLighting=e.onlySunLighting??!1,this._onlySunLighting=!1,this._depthTestEnabled=e.depthTestEnabled??!0,this._useLogDepth=!1,this._sp=void 0,this._rs=void 0,this._va=void 0,this._pickSP=void 0,this._pickId=void 0,this._colorCommand=new ot({owner:e._owner??this}),this._pickCommand=new ot({owner:e._owner??this,pickOnly:!0});let t=this;this._uniforms={u_radii:function(){return t.radii},u_oneOverEllipsoidRadiiSquared:function(){return t._oneOverEllipsoidRadiiSquared}},this._pickUniforms={czm_pickColor:function(){return t._pickId.color}}}function fTt(e){let t=e.cache.ellipsoidPrimitive_vertexArray;if(l(t))return t;let n=Cc.createGeometry(Cc.fromDimensions({dimensions:new h(2,2,2),vertexFormat:we.POSITION_ONLY}));return t=Dn.fromGeometry({context:e,geometry:n,attributeLocations:Nee,bufferUsage:Ie.STATIC_DRAW,interleave:!0}),e.cache.ellipsoidPrimitive_vertexArray=t,t}c3.prototype.update=function(e){if(!this.show||e.mode!==se.SCENE3D||!l(this.center)||!l(this.radii))return;let t=e.context,n=this.material.isTranslucent(),i=this._translucent!==n;(!l(this._rs)||i)&&(this._translucent=n,this._rs=Oe.fromCache({cull:{enabled:!0,face:ki.FRONT},depthTest:{enabled:this._depthTestEnabled},depthMask:!n&&t.fragmentDepth,blending:n?tn.ALPHA_BLEND:void 0})),l(this._va)||(this._va=fTt(t));let o=!1,r=this.radii;if(!h.equals(this._radii,r)){h.clone(r,this._radii);let y=this._oneOverEllipsoidRadiiSquared;y.x=1/(r.x*r.x),y.y=1/(r.y*r.y),y.z=1/(r.z*r.z),o=!0}(!I.equals(this.modelMatrix,this._modelMatrix)||!h.equals(this.center,this._center))&&(I.clone(this.modelMatrix,this._modelMatrix),h.clone(this.center,this._center),I.multiplyByTranslation(this.modelMatrix,this.center,this._computedModelMatrix),o=!0),o&&(h.clone(h.ZERO,this._boundingSphere.center),this._boundingSphere.radius=h.maximumComponent(r),le.transform(this._boundingSphere,this._computedModelMatrix,this._boundingSphere));let s=this._material!==this.material;this._material=this.material,this._material.update(t);let a=this.onlySunLighting!==this._onlySunLighting;this._onlySunLighting=this.onlySunLighting;let c=e.useLogDepth,d=this._useLogDepth!==c;this._useLogDepth=c;let u=this._colorCommand,m,p;(s||a||i||d)&&(m=new ze({sources:[ZR]}),p=new ze({sources:[this.material.shaderSource,SR]}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(m.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._sp=en.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:m,fragmentShaderSource:p,attributeLocations:Nee}),u.vertexArray=this._va,u.renderState=this._rs,u.shaderProgram=this._sp,u.uniformMap=It(this._uniforms,this.material._uniforms),u.executeInClosestFrustum=n);let b=e.commandList,f=e.passes;if(f.render&&(u.boundingVolume=this._boundingSphere,u.debugShowBoundingVolume=this.debugShowBoundingVolume,u.modelMatrix=this._computedModelMatrix,u.pass=n?We.TRANSLUCENT:We.OPAQUE,b.push(u)),f.pick){let y=this._pickCommand;(!l(this._pickId)||this._id!==this.id)&&(this._id=this.id,this._pickId=this._pickId&&this._pickId.destroy(),this._pickId=t.createPickId({primitive:this,id:this.id})),(s||a||!l(this._pickSP)||d)&&(m=new ze({sources:[ZR]}),p=new ze({sources:[this.material.shaderSource,SR],pickColorQualifier:"uniform"}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(m.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._pickSP=en.replaceCache({context:t,shaderProgram:this._pickSP,vertexShaderSource:m,fragmentShaderSource:p,attributeLocations:Nee}),y.vertexArray=this._va,y.renderState=this._rs,y.shaderProgram=this._pickSP,y.uniformMap=It(It(this._uniforms,this._pickUniforms),this.material._uniforms),y.executeInClosestFrustum=n),y.boundingVolume=this._boundingSphere,y.modelMatrix=this._computedModelMatrix,y.pass=n?We.TRANSLUCENT:We.OPAQUE,b.push(y)}};c3.prototype.isDestroyed=function(){return!1};c3.prototype.destroy=function(){return this._sp=this._sp&&this._sp.destroy(),this._pickSP=this._pickSP&&this._pickSP.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),me(this)};var BY=c3;function zY(e){e=e??B.EMPTY_OBJECT;let t=e.textureUrl;l(t)||(t=qt("Assets/Textures/moonSmall.jpg")),this.show=e.show??!0,this.textureUrl=t,this._ellipsoid=e.ellipsoid??ie.MOON,this.onlySunLighting=e.onlySunLighting??!0,this._ellipsoidPrimitive=new BY({radii:this.ellipsoid.radii,material:no.fromType(no.ImageType),depthTestEnabled:!1,_owner:this}),this._ellipsoidPrimitive.material.translucent=!1,this._axes=new UE}Object.defineProperties(zY.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var l3=new q,pTt=new q,bTt=new h,d3=[];zY.prototype.update=function(e){if(!this.show)return;let t=this._ellipsoidPrimitive;t.material.uniforms.image=this.textureUrl,t.onlySunLighting=this.onlySunLighting;let n=e.time;l(bt.computeIcrfToFixedMatrix(n,l3))||bt.computeTemeToPseudoFixedMatrix(n,l3);let i=this._axes.evaluate(n,pTt);q.transpose(i,i),q.multiply(l3,i,i);let o=Dy.computeMoonPositionInEarthInertialFrame(n,bTt);q.multiplyByVector(l3,o,o),I.fromRotationTranslation(i,o,t.modelMatrix);let r=e.commandList;return e.commandList=d3,d3.length=0,t.update(e),e.commandList=r,d3.length===1?d3[0]:void 0};zY.prototype.isDestroyed=function(){return!1};zY.prototype.destroy=function(){return this._ellipsoidPrimitive=this._ellipsoidPrimitive&&this._ellipsoidPrimitive.destroy(),me(this)};var HY=zY;var cho=x(T(),1);var iQi=x(T(),1);var B4i=x(T(),1),KY=`in vec2 v_textureCoordinates; const float M_PI = 3.141592653589793; float vdcRadicalInverse(int i) { float r; float base = 2.0; float value = 0.0; float invBase = 1.0 / base; float invBi = invBase; for (int x = 0; x < 100; x++) { if (i <= 0) { break; } r = mod(float(i), base); value += r * invBi; invBi *= invBase; i = int(float(i) * invBase); } return value; } vec2 hammersley2D(int i, int N) { return vec2(float(i) / float(N), vdcRadicalInverse(i)); } vec3 importanceSampleGGX(vec2 xi, float alphaRoughness, vec3 N) { float alphaRoughnessSquared = alphaRoughness * alphaRoughness; float phi = 2.0 * M_PI * xi.x; float cosTheta = sqrt((1.0 - xi.y) / (1.0 + (alphaRoughnessSquared - 1.0) * xi.y)); float sinTheta = sqrt(1.0 - cosTheta * cosTheta); vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta); vec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); vec3 tangentX = normalize(cross(upVector, N)); vec3 tangentY = cross(N, tangentX); return tangentX * H.x + tangentY * H.y + N * H.z; } /** * Estimate the geometric self-shadowing of the microfacets in a surface, * using the Smith Joint GGX visibility function. * Note: Vis = G / (4 * NdotL * NdotV) * see Eric Heitz. 2014. Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs. Journal of Computer Graphics Techniques, 3 * see Real-Time Rendering. Page 331 to 336. * see https://google.github.io/filament/Filament.md.html#materialsystem/specularbrdf/geometricshadowing(specularg) * * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness. * @param {float} NdotL The cosine of the angle between the surface normal and the direction to the light source. * @param {float} NdotV The cosine of the angle between the surface normal and the direction to the camera. */ float smithVisibilityGGX(float alphaRoughness, float NdotL, float NdotV) { float alphaRoughnessSq = alphaRoughness * alphaRoughness; float GGXV = NdotL * sqrt(NdotV * NdotV * (1.0 - alphaRoughnessSq) + alphaRoughnessSq); float GGXL = NdotV * sqrt(NdotL * NdotL * (1.0 - alphaRoughnessSq) + alphaRoughnessSq); float GGX = GGXV + GGXL; // 2.0 if NdotL = NdotV = 1.0 if (GGX > 0.0) { return 0.5 / GGX; // 1/4 if NdotL = NdotV = 1.0 } return 0.0; } vec2 integrateBrdf(float roughness, float NdotV) { vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV); float A = 0.0; float B = 0.0; const int NumSamples = 1024; float alphaRoughness = roughness * roughness; for (int i = 0; i < NumSamples; i++) { vec2 xi = hammersley2D(i, NumSamples); vec3 H = importanceSampleGGX(xi, alphaRoughness, vec3(0.0, 0.0, 1.0)); vec3 L = 2.0 * dot(V, H) * H - V; float NdotL = clamp(L.z, 0.0, 1.0); float NdotH = clamp(H.z, 0.0, 1.0); float VdotH = clamp(dot(V, H), 0.0, 1.0); if (NdotL > 0.0) { float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV); float G_Vis = 4.0 * G * VdotH * NdotL / NdotH; float Fc = pow(1.0 - VdotH, 5.0); A += (1.0 - Fc) * G_Vis; B += Fc * G_Vis; } } return vec2(A, B) / float(NumSamples); } void main() { out_FragColor = vec4(integrateBrdf(v_textureCoordinates.y, v_textureCoordinates.x), 0.0, 1.0); } `;function JY(){this._colorTexture=void 0,this._drawCommand=void 0}Object.defineProperties(JY.prototype,{colorTexture:{get:function(){return this._colorTexture}}});function gTt(e,t,n){let i=t.createViewportQuadCommand(KY,{framebuffer:n,renderState:Oe.fromCache({viewport:new $e(0,0,256,256)})});e._drawCommand=i}JY.prototype.update=function(e){if(!l(this._colorTexture)){let t=e.context,n=new Ct({context:t,width:256,height:256,pixelFormat:Be.RGBA,pixelDatatype:Me.UNSIGNED_BYTE,sampler:kt.NEAREST});this._colorTexture=n;let i=new ps({context:t,colorTextures:[n],destroyAttachments:!1});gTt(this,t,i),this._drawCommand.execute(t),i.destroy(),this._drawCommand.shaderProgram=this._drawCommand.shaderProgram&&this._drawCommand.shaderProgram.destroy()}};JY.prototype.isDestroyed=function(){return!1};JY.prototype.destroy=function(){return this._colorTexture=this._colorTexture&&this._colorTexture.destroy(),me(this)};var jY=JY;var HQi=x(T(),1);var pQi=x(T(),1);var q1e={};function yTt(e,t,n){let i,o,r;if(e instanceof Bi){let s=Math.tan(.5*e.fovy);return i=e.near,o=e.near*s,r=e.aspectRatio*o,Math.max(t*i/r,n*i/o)}else if(e instanceof Fl)return i=e.near,o=e.top,r=e.right,Math.max(t*i/r,n*i/o);return Math.max(t,n)}var xTt=new h,J1e=new h;function $1e(e,t,n,i){if(l(i)&&n(.5)>i){let o=n(0),r=n(1),s=n(.5),a=s-o,c=s-r;return function(d){let u=n(d);if(d<=.5){let p=(u-o)/a;return L.lerp(e,-L.PI_OVER_TWO,p)}let m=(u-r)/c;return L.lerp(-L.PI_OVER_TWO,t,1-m)}}return function(o){return L.lerp(e,t,o)}}function wee(e,t,n,i,o){let r=o,s=Math.max(n,i);if(!l(r)){let a=e.position,c=t,d=e.up,u=e.right,m=e.frustum,p=h.subtract(a,c,xTt),b=h.magnitude(h.multiplyByScalar(d,h.dot(p,d),J1e)),f=h.magnitude(h.multiplyByScalar(u,h.dot(p,u),J1e));r=Math.min(yTt(m,b,f)*.2,1e9)}if(s<r){let d=-Math.pow((r-n)*1e6,.125),u=Math.pow((r-i)*1e6,1/8);return function(m){let p=m*(u-d)+d;return-Math.pow(p,8)/1e6+r}}return function(a){return L.lerp(n,i,a)}}function QY(e,t){return L.equalsEpsilon(e,L.TWO_PI,L.EPSILON11)&&(e=0),t>e+Math.PI?e+=L.TWO_PI:t<e-Math.PI&&(e-=L.TWO_PI),e}var eCe=new h;function TTt(e,t,n,i,o,r,s,a){let c=e.camera,d=h.clone(c.position,eCe),u=c.pitch,m=QY(c.heading,i),p=QY(c.roll,r),b=wee(c,n,d.z,n.z,s),f=$1e(u,o,b,a);function y(_){let S=_.time/t;c.setView({orientation:{heading:L.lerp(m,i,S),pitch:f(S),roll:L.lerp(p,r,S)}}),M.lerp(d,n,S,c.position),c.position.z=b(S)}return y}function _Tt(e,t){e.longitude<t.longitude?e.longitude+=L.TWO_PI:t.longitude+=L.TWO_PI}function STt(e,t){let n=e.longitude-t.longitude;n<-L.PI?e.longitude+=L.TWO_PI:n>L.PI&&(t.longitude+=L.TWO_PI)}var ZTt=new fe,VTt=new fe;function CTt(e,t,n,i,o,r,s,a,c,d){let u=e.camera,p=e.mapProjection.ellipsoid,b=fe.clone(u.positionCartographic,ZTt),f=u.pitch,y=QY(u.heading,i),_=QY(u.roll,r),S=p.cartesianToCartographic(n,VTt);b.longitude=L.zeroToTwoPi(b.longitude),S.longitude=L.zeroToTwoPi(S.longitude);let Z=!1;if(l(a)){let E=L.zeroToTwoPi(a),v=Math.min(b.longitude,S.longitude),F=Math.max(b.longitude,S.longitude),P=E>=v&&E<=F;if(l(c)){let N=Math.abs(b.longitude-S.longitude),g=L.TWO_PI-N;(P?N:g)<(P?g:N)*c&&!P&&(Z=!0)}else P||(Z=!0)}Z?_Tt(b,S):STt(b,S);let V=wee(u,n,b.height,S.height,s),C=$1e(f,o,V,d);function G(){let E=b.longitude,v=S.longitude,F=b.latitude,P=S.latitude;return function(g){let R=g.time/t,A=h.fromRadians(L.lerp(E,v,R),L.lerp(F,P,R),V(R),p);u.setView({destination:A,orientation:{heading:L.lerp(y,i,R),pitch:C(R),roll:L.lerp(_,r,R)}})}}return G()}function RTt(e,t,n,i,o,r,s){let a=e.camera,c=h.clone(a.position,eCe),d=QY(a.heading,i),u=a.frustum.right-a.frustum.left,m=wee(a,n,u,n.z,s);function p(b){let f=b.time/t;a.setView({orientation:{heading:L.lerp(d,i,f)}}),M.lerp(c,n,f,a.position);let y=m(f),_=a.frustum,S=_.top/_.right,Z=(y-(_.right-_.left))*.5;_.right+=Z,_.left-=Z,_.top=S*_.right,_.bottom=-_.top}return p}var j1e=new fe,GTt=new h;function Yee(e,t){return{startObject:{},stopObject:{},duration:0,complete:e,cancel:t}}function Q1e(e,t){function n(){typeof t=="function"&&t(),e.enableInputs=!0}return n}q1e.createTween=function(e,t){t=t??B.EMPTY_OBJECT;let n=t.destination,i=e.mode;if(i===se.MORPHING)return Yee();let o=t.convert??!0,r=e.mapProjection,s=r.ellipsoid,a=t.maximumHeight,c=t.flyOverLongitude,d=t.flyOverLongitudeWeight,u=t.pitchAdjustHeight,m=t.easingFunction;o&&i!==se.SCENE3D&&(s.cartesianToCartographic(n,j1e),n=r.project(j1e,GTt));let p=e.camera,b=t.endTransform;l(b)&&p._setTransform(b);let f=t.duration;l(f)||(f=Math.ceil(h.distance(p.position,n)/1e6)+2,f=Math.min(f,3));let y=t.heading??0,_=t.pitch??-L.PI_OVER_TWO,S=t.roll??0,Z=e.screenSpaceCameraController;Z.enableInputs=!1;let V=Q1e(Z,t.complete),C=Q1e(Z,t.cancel),G=p.frustum,E=e.mode===se.SCENE2D;if(E=E&&M.equalsEpsilon(p.position,n,L.EPSILON6),E=E&&L.equalsEpsilon(Math.max(G.right-G.left,G.top-G.bottom),n.z,L.EPSILON6),E=E||e.mode!==se.SCENE2D&&h.equalsEpsilon(n,p.position,L.EPSILON10),E=E&&L.equalsEpsilon(L.negativePiToPi(y),L.negativePiToPi(p.heading),L.EPSILON10)&&L.equalsEpsilon(L.negativePiToPi(_),L.negativePiToPi(p.pitch),L.EPSILON10)&&L.equalsEpsilon(L.negativePiToPi(S),L.negativePiToPi(p.roll),L.EPSILON10),E)return Yee(V,C);let v=new Array(4);if(v[se.SCENE2D]=RTt,v[se.SCENE3D]=CTt,v[se.COLUMBUS_VIEW]=TTt,f<=0)return Yee(function(){v[i](e,1,n,y,_,S,a,c,d,u)({time:1}),typeof V=="function"&&V()},C);let F=v[i](e,f,n,y,_,S,a,c,d,u);if(!l(m)){let P=p.positionCartographic.height,N=i===se.SCENE3D?s.cartesianToCartographic(n).height:n.z;P>N&&P>11500?m=ls.CUBIC_OUT:m=ls.QUINTIC_IN_OUT}return{duration:f,easingFunction:m,startObject:{time:0},stopObject:{time:f},update:F,complete:V,cancel:C}};var qY=q1e;var gQi=x(T(),1),tCe={ROTATE:0,INFINITE_SCROLL:1};Object.freeze(tCe);var id=tCe;function an(e){this._scene=e,this._transform=I.clone(I.IDENTITY),this._invTransform=I.clone(I.IDENTITY),this._actualTransform=I.clone(I.IDENTITY),this._actualInvTransform=I.clone(I.IDENTITY),this._transformChanged=!1,this.position=new h,this._position=new h,this._positionWC=new h,this._positionCartographic=new fe,this._oldPositionWC=void 0,this.positionWCDeltaMagnitude=0,this.positionWCDeltaMagnitudeLastFrame=0,this.timeSinceMoved=0,this._lastMovedTimestamp=0,this.direction=new h,this._direction=new h,this._directionWC=new h,this.up=new h,this._up=new h,this._upWC=new h,this.right=new h,this._right=new h,this._rightWC=new h,this.frustum=new Bi,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=L.toRadians(60),this.defaultMoveAmount=1e5,this.defaultLookAmount=Math.PI/60,this.defaultRotateAmount=Math.PI/3600,this.defaultZoomAmount=1e5,this.constrainedAxis=void 0,this.maximumZoomFactor=1.5,this._moveStart=new Se,this._moveEnd=new Se,this._changed=new Se,this._changedPosition=void 0,this._changedDirection=void 0,this._changedFrustum=void 0,this._changedHeading=void 0,this._changedRoll=void 0,this.percentageChanged=.5,this._viewMatrix=new I,this._invViewMatrix=new I,mCe(this),this._mode=se.SCENE3D,this._modeChanged=!0;let t=e.mapProjection;this._projection=t,this._maxCoord=t.project(new fe(Math.PI,L.PI_OVER_TWO)),this._max2Dfrustum=void 0,VCe(this,an.DEFAULT_VIEW_RECTANGLE,this.position,!0);let n=h.magnitude(this.position);n+=n*an.DEFAULT_VIEW_FACTOR,h.normalize(this.position,this.position),h.multiplyByScalar(this.position,n,this.position)}an.TRANSFORM_2D=new I(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);an.TRANSFORM_2D_INVERSE=I.inverseTransformation(an.TRANSFORM_2D,new I);an.DEFAULT_VIEW_RECTANGLE=re.fromDegrees(-95,-20,-70,90);an.DEFAULT_VIEW_FACTOR=.5;an.DEFAULT_OFFSET=new Gm(0,-L.PI_OVER_FOUR,0);function mCe(e){I.computeView(e._position,e._direction,e._up,e._right,e._viewMatrix),I.multiply(e._viewMatrix,e._actualInvTransform,e._viewMatrix),I.inverseTransformation(e._viewMatrix,e._invViewMatrix)}function ATt(e){if(!l(e._oldPositionWC))e._oldPositionWC=h.clone(e.positionWC,e._oldPositionWC);else{e.positionWCDeltaMagnitudeLastFrame=e.positionWCDeltaMagnitude;let t=h.subtract(e.positionWC,e._oldPositionWC,e._oldPositionWC);e.positionWCDeltaMagnitude=h.magnitude(t),e._oldPositionWC=h.clone(e.positionWC,e._oldPositionWC),e.positionWCDeltaMagnitude>0?(e.timeSinceMoved=0,e._lastMovedTimestamp=Tn()):e.timeSinceMoved=Math.max(Tn()-e._lastMovedTimestamp,0)/1e3}}an.prototype.canPreloadFlight=function(){return l(this._currentFlight)&&this._mode!==se.SCENE2D};an.prototype._updateCameraChanged=function(){let e=this;if(ATt(e),e._changed.numberOfListeners===0)return;let t=e.percentageChanged,n=e.heading;l(e._changedHeading)||(e._changedHeading=n);let i=Math.abs(e._changedHeading-n)%L.TWO_PI;i=i>L.PI?L.TWO_PI-i:i;let o=i/Math.PI;o>t&&(e._changedHeading=n);let r=e.roll;l(e._changedRoll)||(e._changedRoll=r);let s=Math.abs(e._changedRoll-r)%L.TWO_PI;s=s>L.PI?L.TWO_PI-s:s;let a=s/Math.PI;if(a>t&&(e._changedRoll=r),(a>t||o>t)&&e._changed.raiseEvent(Math.max(a,o)),e._mode===se.SCENE2D){if(!l(e._changedFrustum)){e._changedPosition=h.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone();return}let p=e.position,b=e._changedPosition,f=e.frustum,y=e._changedFrustum,_=p.x+f.left,S=p.x+f.right,Z=b.x+y.left,V=b.x+y.right,C=p.y+f.bottom,G=p.y+f.top,E=b.y+y.bottom,v=b.y+y.top,F=Math.max(_,Z),P=Math.min(S,V),N=Math.max(C,E),g=Math.min(G,v),R;if(F>=P||N>=G)R=1;else{let A=y;_<Z&&S>V&&C<E&&G>v&&(A=f),R=1-(P-F)*(g-N)/((A.right-A.left)*(A.top-A.bottom))}R>t&&(e._changed.raiseEvent(R),e._changedPosition=h.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone(e._changedFrustum));return}if(!l(e._changedDirection)){e._changedPosition=h.clone(e.positionWC,e._changedPosition),e._changedDirection=h.clone(e.directionWC,e._changedDirection);return}let c=L.acosClamped(h.dot(e.directionWC,e._changedDirection)),d;l(e.frustum.fovy)?d=c/(e.frustum.fovy*.5):d=c;let m=h.distance(e.positionWC,e._changedPosition)/e.positionCartographic.height;(d>t||m>t)&&(e._changed.raiseEvent(Math.max(d,m)),e._changedPosition=h.clone(e.positionWC,e._changedPosition),e._changedDirection=h.clone(e.directionWC,e._changedDirection))};function ETt(e){bt.basisTo2D(e._projection,e._transform,e._actualTransform)}var LTt=new fe,WTt=new h,u3=new h,vTt=new ce,FTt=new ce,ITt=new ce,PTt=new ce,XTt=new ce;function NTt(e){let t=e._projection,n=t.ellipsoid,i=I.getColumn(e._transform,3,vTt),o=n.cartesianToCartographic(i,LTt),r=t.project(o,WTt),s=FTt;s.x=r.z,s.y=r.x,s.z=r.y,s.w=1;let a=ce.clone(ce.UNIT_X,XTt),c=ce.add(I.getColumn(e._transform,0,u3),i,u3);n.cartesianToCartographic(c,o),t.project(o,r);let d=ITt;d.x=r.z,d.y=r.x,d.z=r.y,d.w=0,h.subtract(d,s,d),d.x=0;let u=PTt;if(h.magnitudeSquared(d)>L.EPSILON10)h.cross(a,d,u);else{let m=ce.add(I.getColumn(e._transform,1,u3),i,u3);n.cartesianToCartographic(m,o),t.project(o,r),u.x=r.z,u.y=r.x,u.z=r.y,u.w=0,h.subtract(u,s,u),u.x=0,h.magnitudeSquared(u)<L.EPSILON10&&(ce.clone(ce.UNIT_Y,d),ce.clone(ce.UNIT_Z,u))}h.cross(u,a,d),h.normalize(d,d),h.cross(a,d,u),h.normalize(u,u),I.setColumn(e._actualTransform,0,d,e._actualTransform),I.setColumn(e._actualTransform,1,u,e._actualTransform),I.setColumn(e._actualTransform,2,a,e._actualTransform),I.setColumn(e._actualTransform,3,s,e._actualTransform)}var Mee=new h;function pl(e){let t=e._mode,n=!1,i=0;t===se.SCENE2D&&(i=e.frustum.right-e.frustum.left,n=i!==e._positionCartographic.height);let o=e._position,r=!h.equals(o,e.position)||n;r&&(o=h.clone(e.position,e._position));let s=e._direction,a=!h.equals(s,e.direction);a&&(h.normalize(e.direction,e.direction),s=h.clone(e.direction,e._direction));let c=e._up,d=!h.equals(c,e.up);d&&(h.normalize(e.up,e.up),c=h.clone(e.up,e._up));let u=e._right,m=!h.equals(u,e.right);m&&(h.normalize(e.right,e.right),u=h.clone(e.right,e._right));let p=e._transformChanged||e._modeChanged;e._transformChanged=!1,p&&(I.inverseTransformation(e._transform,e._invTransform),e._mode===se.COLUMBUS_VIEW||e._mode===se.SCENE2D?I.equals(I.IDENTITY,e._transform)?I.clone(an.TRANSFORM_2D,e._actualTransform):e._mode===se.COLUMBUS_VIEW?ETt(e):NTt(e):I.clone(e._transform,e._actualTransform),I.inverseTransformation(e._actualTransform,e._actualInvTransform),e._modeChanged=!1);let b=e._actualTransform;if(r||p)if(e._positionWC=I.multiplyByPoint(b,o,e._positionWC),t===se.SCENE3D||t===se.MORPHING)e._positionCartographic=e._projection.ellipsoid.cartesianToCartographic(e._positionWC,e._positionCartographic);else{let f=Mee;f.x=e._positionWC.y,f.y=e._positionWC.z,f.z=e._positionWC.x,t===se.SCENE2D&&(f.z=i),e._projection.unproject(f,e._positionCartographic)}if(a||d||m){let f=h.dot(s,h.cross(c,u,Mee));if(Math.abs(1-f)>L.EPSILON2){let y=1/h.magnitudeSquared(c),_=h.dot(c,s)*y,S=h.multiplyByScalar(s,_,Mee);c=h.normalize(h.subtract(c,S,e._up),e._up),h.clone(c,e.up),u=h.cross(s,c,e._right),h.clone(u,e.right)}}(a||p)&&(e._directionWC=I.multiplyByPointAsVector(b,s,e._directionWC),h.normalize(e._directionWC,e._directionWC)),(d||p)&&(e._upWC=I.multiplyByPointAsVector(b,c,e._upWC),h.normalize(e._upWC,e._upWC)),(m||p)&&(e._rightWC=I.multiplyByPointAsVector(b,u,e._rightWC),h.normalize(e._rightWC,e._rightWC)),(r||a||d||m||p)&&mCe(e)}function hCe(e,t){let n;return L.equalsEpsilon(Math.abs(e.z),1,L.EPSILON3)?n=Math.atan2(t.y,t.x)-L.PI_OVER_TWO:n=Math.atan2(e.y,e.x)-L.PI_OVER_TWO,L.TWO_PI-L.zeroToTwoPi(n)}function fCe(e){return L.PI_OVER_TWO-L.acosClamped(e.z)}function pCe(e,t,n){let i=0;return L.equalsEpsilon(Math.abs(e.z),1,L.EPSILON3)||(i=Math.atan2(-n.z,t.z),i=L.zeroToTwoPi(i+L.TWO_PI)),i}var f3=new I,p3=new I;Object.defineProperties(an.prototype,{transform:{get:function(){return this._transform}},inverseTransform:{get:function(){return pl(this),this._invTransform}},viewMatrix:{get:function(){return pl(this),this._viewMatrix}},inverseViewMatrix:{get:function(){return pl(this),this._invViewMatrix}},positionCartographic:{get:function(){return pl(this),this._positionCartographic}},positionWC:{get:function(){return pl(this),this._positionWC}},directionWC:{get:function(){return pl(this),this._directionWC}},upWC:{get:function(){return pl(this),this._upWC}},rightWC:{get:function(){return pl(this),this._rightWC}},heading:{get:function(){if(this._mode!==se.MORPHING){let e=this._projection.ellipsoid,t=I.clone(this._transform,f3),n=bt.eastNorthUpToFixedFrame(this.positionWC,e,p3);this._setTransform(n);let i=hCe(this.direction,this.up);return this._setTransform(t),i}}},pitch:{get:function(){if(this._mode!==se.MORPHING){let e=this._projection.ellipsoid,t=I.clone(this._transform,f3),n=bt.eastNorthUpToFixedFrame(this.positionWC,e,p3);this._setTransform(n);let i=fCe(this.direction);return this._setTransform(t),i}}},roll:{get:function(){if(this._mode!==se.MORPHING){let e=this._projection.ellipsoid,t=I.clone(this._transform,f3),n=bt.eastNorthUpToFixedFrame(this.positionWC,e,p3);this._setTransform(n);let i=pCe(this.direction,this.up,this.right);return this._setTransform(t),i}}},moveStart:{get:function(){return this._moveStart}},moveEnd:{get:function(){return this._moveEnd}},changed:{get:function(){return this._changed}}});an.prototype.update=function(e){let t=!1;if(e!==this._mode&&(this._mode=e,this._modeChanged=e!==se.MORPHING,t=this._mode===se.SCENE2D),t){let n=this._max2Dfrustum=this.frustum.clone(),i=2,o=n.top/n.right;n.right=this._maxCoord.x*i,n.left=-n.right,n.top=o*n.right,n.bottom=-n.top}this._mode===se.SCENE2D&&xCe(this,this.position)};var YTt=new h,wTt=new h,MTt=new h;an.prototype._setTransform=function(e){let t=h.clone(this.positionWC,YTt),n=h.clone(this.upWC,wTt),i=h.clone(this.directionWC,MTt);I.clone(e,this._transform),this._transformChanged=!0,pl(this);let o=this._actualInvTransform;I.multiplyByPoint(o,t,this.position),I.multiplyByPointAsVector(o,i,this.direction),I.multiplyByPointAsVector(o,n,this.up),h.cross(this.direction,this.up,this.right),pl(this)};var kTt=new M,UTt=new fn,DTt=new h,OTt=new h;function bCe(e){if(!I.equals(I.IDENTITY,e.transform))return h.magnitude(e.position);let t=e._scene,n=t.globe,i=kTt;i.x=t.drawingBufferWidth/t.pixelRatio/2,i.y=t.drawingBufferHeight/t.pixelRatio/2;let o;if(l(n)){let a=e.getPickRay(i,UTt);o=n.pickWorldCoordinates(a,t,!0,DTt)}let r;t.pickPositionSupported&&(r=t.pickPositionWorldCoordinates(i,OTt));let s;if(l(o)||l(r)){let a=l(r)?h.distance(r,e.positionWC):Number.POSITIVE_INFINITY,c=l(o)?h.distance(o,e.positionWC):Number.POSITIVE_INFINITY;s=Math.min(a,c)}else s=Math.max(e.positionCartographic.height,0);return s}an.prototype._adjustOrthographicFrustum=function(e){this.frustum instanceof bn&&(!e&&this._positionCartographic.height<15e4||(this.frustum.width=bCe(this)))};var b3=new h,Bee=new I,BTt=new I,zee=new Ye,Hee=new q,gCe=new fe;function zTt(e,t,n){let i=I.clone(e.transform,Bee),o=bt.eastNorthUpToFixedFrame(t,e._projection.ellipsoid,BTt);e._setTransform(o),h.clone(h.ZERO,e.position),n.heading=n.heading-L.PI_OVER_TWO;let r=Ye.fromHeadingPitchRoll(n,zee),s=q.fromQuaternion(r,Hee);q.getColumn(s,0,e.direction),q.getColumn(s,2,e.up),h.cross(e.direction,e.up,e.right),e._setTransform(i),e._adjustOrthographicFrustum(!0)}function HTt(e,t,n,i){let o=I.clone(e.transform,Bee);if(e._setTransform(I.IDENTITY),!h.equals(t,e.positionWC)){if(i){let a=e._projection,c=a.ellipsoid.cartesianToCartographic(t,gCe);t=a.project(c,b3)}h.clone(t,e.position)}n.heading=n.heading-L.PI_OVER_TWO;let r=Ye.fromHeadingPitchRoll(n,zee),s=q.fromQuaternion(r,Hee);q.getColumn(s,0,e.direction),q.getColumn(s,2,e.up),h.cross(e.direction,e.up,e.right),e._setTransform(o),e._adjustOrthographicFrustum(!0)}function KTt(e,t,n,i){let o=I.clone(e.transform,Bee);if(e._setTransform(I.IDENTITY),!h.equals(t,e.positionWC)){if(i){let c=e._projection,d=c.ellipsoid.cartesianToCartographic(t,gCe);t=c.project(d,b3)}M.clone(t,e.position);let r=-t.z*.5,s=-r,a=e.frustum;if(s>r){let c=a.top/a.right;a.right=s,a.left=r,a.top=a.right*c,a.bottom=-a.top}}if(e._scene.mapMode2D===id.ROTATE){n.heading=n.heading-L.PI_OVER_TWO,n.pitch=-L.PI_OVER_TWO,n.roll=0;let r=Ye.fromHeadingPitchRoll(n,zee),s=q.fromQuaternion(r,Hee);q.getColumn(s,2,e.up),h.cross(e.direction,e.up,e.right)}e._setTransform(o)}var JTt=new h,jTt=new h,QTt=new h;function yCe(e,t,n,i){let o=h.clone(n.direction,JTt),r=h.clone(n.up,jTt);if(e._scene.mode===se.SCENE3D){let a=e._projection.ellipsoid,c=bt.eastNorthUpToFixedFrame(t,a,f3),d=I.inverseTransformation(c,p3);I.multiplyByPointAsVector(d,o,o),I.multiplyByPointAsVector(d,r,r)}let s=h.cross(o,r,QTt);return i.heading=hCe(o,r),i.pitch=fCe(o),i.roll=pCe(o,r,s),i}var Oee={destination:void 0,orientation:{direction:void 0,up:void 0,heading:void 0,pitch:void 0,roll:void 0},convert:void 0,endTransform:void 0},VR=new Tc;an.prototype.setView=function(e){e=e??B.EMPTY_OBJECT;let t=e.orientation??B.EMPTY_OBJECT,n=this._mode;if(n===se.MORPHING)return;l(e.endTransform)&&this._setTransform(e.endTransform);let i=e.convert??!0,o=e.destination??h.clone(this.positionWC,b3);l(o)&&l(o.west)&&(o=this.getRectangleCameraCoordinates(o,b3),i=!1),l(t.direction)&&(t=yCe(this,o,t,Oee.orientation)),VR.heading=t.heading??0,VR.pitch=t.pitch??-L.PI_OVER_TWO,VR.roll=t.roll??0,n===se.SCENE3D?zTt(this,o,VR):n===se.SCENE2D?KTt(this,o,VR,i):HTt(this,o,VR,i)};var qTt=new h;an.prototype.flyHome=function(e){let t=this._mode;if(t===se.MORPHING&&this._scene.completeMorph(),t===se.SCENE2D)this.flyTo({destination:an.DEFAULT_VIEW_RECTANGLE,duration:e,endTransform:I.IDENTITY});else if(t===se.SCENE3D){let n=this.getRectangleCameraCoordinates(an.DEFAULT_VIEW_RECTANGLE),i=h.magnitude(n);i+=i*an.DEFAULT_VIEW_FACTOR,h.normalize(n,n),h.multiplyByScalar(n,i,n),this.flyTo({destination:n,duration:e,endTransform:I.IDENTITY})}else if(t===se.COLUMBUS_VIEW){let n=this._projection.ellipsoid.maximumRadius,i=new h(0,-1,1);i=h.multiplyByScalar(h.normalize(i,i),5*n,i),this.flyTo({destination:i,duration:e,orientation:{heading:0,pitch:-Math.acos(h.normalize(i,qTt).z),roll:0},endTransform:I.IDENTITY,convert:!1})}};an.prototype.worldToCameraCoordinates=function(e,t){return l(t)||(t=new ce),pl(this),I.multiplyByVector(this._actualInvTransform,e,t)};an.prototype.worldToCameraCoordinatesPoint=function(e,t){return l(t)||(t=new h),pl(this),I.multiplyByPoint(this._actualInvTransform,e,t)};an.prototype.worldToCameraCoordinatesVector=function(e,t){return l(t)||(t=new h),pl(this),I.multiplyByPointAsVector(this._actualInvTransform,e,t)};an.prototype.cameraToWorldCoordinates=function(e,t){return l(t)||(t=new ce),pl(this),I.multiplyByVector(this._actualTransform,e,t)};an.prototype.cameraToWorldCoordinatesPoint=function(e,t){return l(t)||(t=new h),pl(this),I.multiplyByPoint(this._actualTransform,e,t)};an.prototype.cameraToWorldCoordinatesVector=function(e,t){return l(t)||(t=new h),pl(this),I.multiplyByPointAsVector(this._actualTransform,e,t)};function xCe(e,t){let n=e._scene.mapMode2D===id.ROTATE,i=e._maxCoord.x,o=e._maxCoord.y,r,s;n?(s=i,r=-s):(s=t.x-i*2,r=t.x+i*2),t.x>i&&(t.x=s),t.x<-i&&(t.x=r),t.y>o&&(t.y=o),t.y<-o&&(t.y=-o)}var nCe=new h;an.prototype.move=function(e,t){let n=this.position;h.multiplyByScalar(e,t,nCe),h.add(n,nCe,n),this._mode===se.SCENE2D&&xCe(this,n),this._adjustOrthographicFrustum(!0)};an.prototype.moveForward=function(e){e=e??this.defaultMoveAmount,this._mode===se.SCENE2D?g3(this,e):this.move(this.direction,e)};an.prototype.moveBackward=function(e){e=e??this.defaultMoveAmount,this._mode===se.SCENE2D?g3(this,-e):this.move(this.direction,-e)};an.prototype.moveUp=function(e){e=e??this.defaultMoveAmount,this.move(this.up,e)};an.prototype.moveDown=function(e){e=e??this.defaultMoveAmount,this.move(this.up,-e)};an.prototype.moveRight=function(e){e=e??this.defaultMoveAmount,this.move(this.right,e)};an.prototype.moveLeft=function(e){e=e??this.defaultMoveAmount,this.move(this.right,-e)};an.prototype.lookLeft=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.up,-e)};an.prototype.lookRight=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.up,e)};an.prototype.lookUp=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.right,-e)};an.prototype.lookDown=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.right,e)};var $Tt=new Ye,e_t=new q;an.prototype.look=function(e,t){let n=t??this.defaultLookAmount,i=Ye.fromAxisAngle(e,-n,$Tt),o=q.fromQuaternion(i,e_t),r=this.direction,s=this.up,a=this.right;q.multiplyByVector(o,r,r),q.multiplyByVector(o,s,s),q.multiplyByVector(o,a,a)};an.prototype.twistLeft=function(e){e=e??this.defaultLookAmount,this.look(this.direction,e)};an.prototype.twistRight=function(e){e=e??this.defaultLookAmount,this.look(this.direction,-e)};var t_t=new Ye,n_t=new q;an.prototype.rotate=function(e,t){let n=t??this.defaultRotateAmount,i=Ye.fromAxisAngle(e,-n,t_t),o=q.fromQuaternion(i,n_t);q.multiplyByVector(o,this.position,this.position),q.multiplyByVector(o,this.direction,this.direction),q.multiplyByVector(o,this.up,this.up),h.cross(this.direction,this.up,this.right),h.cross(this.right,this.direction,this.up),this._adjustOrthographicFrustum(!1)};an.prototype.rotateDown=function(e){e=e??this.defaultRotateAmount,TCe(this,e)};an.prototype.rotateUp=function(e){e=e??this.defaultRotateAmount,TCe(this,-e)};var i_t=new h,o_t=new h,r_t=new h,iCe=new h;function TCe(e,t){let n=e.position;if(l(e.constrainedAxis)&&!h.equalsEpsilon(e.position,h.ZERO,L.EPSILON2)){let i=h.normalize(n,i_t),o=h.equalsEpsilon(i,e.constrainedAxis,L.EPSILON2),r=h.equalsEpsilon(i,h.negate(e.constrainedAxis,iCe),L.EPSILON2);if(!o&&!r){let s=h.normalize(e.constrainedAxis,o_t),a=h.dot(i,s),c=L.acosClamped(a);t>0&&t>c&&(t=c-L.EPSILON4),a=h.dot(i,h.negate(s,iCe)),c=L.acosClamped(a),t<0&&-t>c&&(t=-c+L.EPSILON4);let d=h.cross(s,i,r_t);e.rotate(d,t)}else(o&&t<0||r&&t>0)&&e.rotate(e.right,t)}else e.rotate(e.right,t)}an.prototype.rotateRight=function(e){e=e??this.defaultRotateAmount,_Ce(this,-e)};an.prototype.rotateLeft=function(e){e=e??this.defaultRotateAmount,_Ce(this,e)};function _Ce(e,t){l(e.constrainedAxis)?e.rotate(e.constrainedAxis,t):e.rotate(e.up,t)}function g3(e,t){let n=e.frustum,i;if(t=t*.5,Math.abs(n.top)+Math.abs(n.bottom)>Math.abs(n.left)+Math.abs(n.right)){let o=n.top-t,r=n.bottom+t,s=e._maxCoord.y;e._scene.mapMode2D===id.ROTATE&&(s*=e.maximumZoomFactor),r>s&&(r=s,o=-s),o<=r&&(o=1,r=-1),i=n.right/n.top,n.top=o,n.bottom=r,n.right=n.top*i,n.left=-n.right}else{let o=n.right-t,r=n.left+t,s=e._maxCoord.x;e._scene.mapMode2D===id.ROTATE&&(s*=e.maximumZoomFactor),o>s&&(o=s,r=-s),o<=r&&(o=1,r=-1),i=n.top/n.right,n.right=o,n.left=r,n.top=n.right*i,n.bottom=-n.top}}function SCe(e,t){e.move(e.direction,t)}an.prototype.zoomIn=function(e){e=e??this.defaultZoomAmount,this._mode===se.SCENE2D?g3(this,e):SCe(this,e)};an.prototype.zoomOut=function(e){e=e??this.defaultZoomAmount,this._mode===se.SCENE2D?g3(this,-e):SCe(this,-e)};an.prototype.getMagnitude=function(){if(this._mode===se.SCENE3D)return h.magnitude(this.position);if(this._mode===se.COLUMBUS_VIEW)return Math.abs(this.position.z);if(this._mode===se.SCENE2D)return Math.max(this.frustum.right-this.frustum.left,this.frustum.top-this.frustum.bottom)};var s_t=new I;an.prototype.lookAt=function(e,t){let i=this._scene.ellipsoid??ie.default,o=bt.eastNorthUpToFixedFrame(e,i,s_t);this.lookAtTransform(o,t)};var a_t=new h,c_t=new Ye,l_t=new Ye,d_t=new q;function ZCe(e,t,n,i){t=L.clamp(t,-L.PI_OVER_TWO,L.PI_OVER_TWO),e=L.zeroToTwoPi(e)-L.PI_OVER_TWO;let o=Ye.fromAxisAngle(h.UNIT_Y,-t,c_t),r=Ye.fromAxisAngle(h.UNIT_Z,-e,l_t),s=Ye.multiply(r,o,r),a=q.fromQuaternion(s,d_t),c=h.clone(h.UNIT_X,i);return q.multiplyByVector(a,c,c),h.negate(c,c),h.multiplyByScalar(c,n,c),c}an.prototype.lookAtTransform=function(e,t){if(this._setTransform(e),!l(t))return;let n;if(l(t.heading)?n=ZCe(t.heading,t.pitch,t.range,a_t):n=t,this._mode===se.SCENE2D){M.clone(M.ZERO,this.position),h.negate(n,this.up),this.up.z=0,h.magnitudeSquared(this.up)<L.EPSILON10&&h.clone(h.UNIT_Y,this.up),h.normalize(this.up,this.up),this._setTransform(I.IDENTITY),h.negate(h.UNIT_Z,this.direction),h.cross(this.direction,this.up,this.right),h.normalize(this.right,this.right);let i=this.frustum,o=i.top/i.right;i.right=h.magnitude(n)*.5,i.left=-i.right,i.top=o*i.right,i.bottom=-i.top,this._setTransform(e);return}h.clone(n,this.position),h.negate(this.position,this.direction),h.normalize(this.direction,this.direction),h.cross(this.direction,h.UNIT_Z,this.right),h.magnitudeSquared(this.right)<L.EPSILON10&&h.clone(h.UNIT_X,this.right),h.normalize(this.right,this.right),h.cross(this.right,this.direction,this.up),h.normalize(this.up,this.up),this._adjustOrthographicFrustum(!0)};var u_t=new I,oCe=new h,m_t=new h,rCe=new h;an.prototype.lookAtWorldPosition=function(e,t=ie.default){let n=I.clone(this._transform,u_t);this._setTransform(I.IDENTITY);let i=h.subtract(e,this.positionWC,oCe);h.magnitudeSquared(i)<L.EPSILON8&&(i=h.clone(this.directionWC,oCe)),i=h.normalize(i,this.direction);let o=t.geodeticSurfaceNormal(e,m_t),r=h.cross(i,o,rCe);h.magnitudeSquared(r)<L.EPSILON8&&(r=h.clone(this.rightWC,rCe)),h.normalize(r,this.right);let s=h.cross(r,i,this.up);h.normalize(s,this.up),this._setTransform(n)};var $Y=new fe,h_t=new fe,f_t=new h,p_t=new h,b_t=new h,g_t=new h,y_t=new h,x_t=new h,T_t=new h,kee=new h,__t={direction:new h,right:new h,up:new h},sCe;function fl(e,t,n,i){return Math.abs(h.dot(t,n))/i-h.dot(e,n)}function VCe(e,t,n,i){let o=e._projection.ellipsoid,r=i?e:__t,{north:s,south:a,west:c}=t,{east:d}=t;c>d&&(d+=L.TWO_PI);let u=(c+d)*.5,m;if(a<-L.PI_OVER_TWO+L.RADIANS_PER_DEGREE&&s>L.PI_OVER_TWO-L.RADIANS_PER_DEGREE)m=0;else{let P=$Y;P.longitude=u,P.latitude=s,P.height=0;let N=h_t;N.longitude=u,N.latitude=a,N.height=0;let g=sCe;(!l(g)||g.ellipsoid!==o)&&(sCe=g=new $0(void 0,void 0,o)),g.setEndPoints(P,N),m=g.interpolateUsingFraction(.5,$Y).latitude}let p=$Y;p.longitude=u,p.latitude=m,p.height=0;let b=o.cartographicToCartesian(p,T_t),f=$Y;f.longitude=d,f.latitude=s;let y=o.cartographicToCartesian(f,f_t);f.longitude=c;let _=o.cartographicToCartesian(f,b_t);f.longitude=u;let S=o.cartographicToCartesian(f,y_t);f.latitude=a;let Z=o.cartographicToCartesian(f,x_t);f.longitude=d;let V=o.cartographicToCartesian(f,g_t);f.longitude=c;let C=o.cartographicToCartesian(f,p_t);h.subtract(_,b,_),h.subtract(V,b,V),h.subtract(y,b,y),h.subtract(C,b,C),h.subtract(S,b,S),h.subtract(Z,b,Z);let G=o.geodeticSurfaceNormal(b,r.direction);h.negate(G,G);let E=h.cross(G,h.UNIT_Z,r.right);h.normalize(E,E);let v=h.cross(E,G,r.up),F;if(e.frustum instanceof bn){let P=Math.max(h.distance(y,_),h.distance(V,C)),N=Math.max(h.distance(y,V),h.distance(_,C)),g,R,A=e.frustum._offCenterFrustum,W=A.right/A.top,X=N*W;P>X?(g=P,R=g/W):(R=N,g=X),F=Math.max(g,R)}else{let P=Math.tan(e.frustum.fovy*.5),N=e.frustum.aspectRatio*P;if(F=Math.max(fl(G,v,_,P),fl(G,v,V,P),fl(G,v,y,P),fl(G,v,C,P),fl(G,v,S,P),fl(G,v,Z,P),fl(G,E,_,N),fl(G,E,V,N),fl(G,E,y,N),fl(G,E,C,N),fl(G,E,S,N),fl(G,E,Z,N)),a<0&&s>0){let g=$Y;g.longitude=c,g.latitude=0,g.height=0;let R=o.cartographicToCartesian(g,kee);h.subtract(R,b,R),F=Math.max(F,fl(G,v,R,P),fl(G,E,R,N)),g.longitude=d,R=o.cartographicToCartesian(g,kee),h.subtract(R,b,R),F=Math.max(F,fl(G,v,R,P),fl(G,E,R,N))}}return h.add(b,h.multiplyByScalar(G,-F,kee),n)}var S_t=new fe,Z_t=new h,V_t=new h;function C_t(e,t,n){let i=e._projection;t.west>t.east&&(t=re.MAX_VALUE);let o=e._actualTransform,r=e._actualInvTransform,s=S_t;s.longitude=t.east,s.latitude=t.north;let a=i.project(s,Z_t);I.multiplyByPoint(o,a,a),I.multiplyByPoint(r,a,a),s.longitude=t.west,s.latitude=t.south;let c=i.project(s,V_t);if(I.multiplyByPoint(o,c,c),I.multiplyByPoint(r,c,c),n.x=(a.x-c.x)*.5+c.x,n.y=(a.y-c.y)*.5+c.y,l(e.frustum.fovy)){let d=Math.tan(e.frustum.fovy*.5),u=e.frustum.aspectRatio*d;n.z=Math.max((a.x-c.x)/u,(a.y-c.y)/d)*.5}else{let d=a.x-c.x,u=a.y-c.y;n.z=Math.max(d,u)}return n}var R_t=new fe,G_t=new h,A_t=new h;function E_t(e,t,n){let i=e._projection,o=t.east;t.west>t.east&&(e._scene.mapMode2D===id.INFINITE_SCROLL?o+=L.TWO_PI:(t=re.MAX_VALUE,o=t.east));let r=R_t;r.longitude=o,r.latitude=t.north;let s=i.project(r,G_t);r.longitude=t.west,r.latitude=t.south;let a=i.project(r,A_t),c=Math.abs(s.x-a.x)*.5,d=Math.abs(s.y-a.y)*.5,u,m,p=e.frustum.right/e.frustum.top,b=d*p;return c>b?(u=c,m=u/p):(m=d,u=b),d=Math.max(2*u,2*m),n.x=(s.x-a.x)*.5+a.x,n.y=(s.y-a.y)*.5+a.y,r=i.unproject(n,r),r.height=d,n=i.project(r,n),n}an.prototype.getRectangleCameraCoordinates=function(e,t){let n=this._mode;if(l(t)||(t=new h),n===se.SCENE3D)return VCe(this,e,t);if(n===se.COLUMBUS_VIEW)return C_t(this,e,t);if(n===se.SCENE2D)return E_t(this,e,t)};var L_t=new fn;function W_t(e,t,n,i){n=n??ie.default;let o=e.getPickRay(t,L_t),r=di.rayEllipsoid(o,n);if(!r)return;let s=r.start>0?r.start:r.stop;return fn.getPoint(o,s,i)}var v_t=new fn;function F_t(e,t,n,i){let r=e.getPickRay(t,v_t).origin;r=h.fromElements(r.y,r.z,0,r);let s=n.unproject(r);if(!(s.latitude<-L.PI_OVER_TWO||s.latitude>L.PI_OVER_TWO))return n.ellipsoid.cartographicToCartesian(s,i)}var I_t=new fn;function P_t(e,t,n,i){let o=e.getPickRay(t,I_t),r=-o.origin.x/o.direction.x;fn.getPoint(o,r,i);let s=n.unproject(new h(i.y,i.z,0));if(!(s.latitude<-L.PI_OVER_TWO||s.latitude>L.PI_OVER_TWO||s.longitude<-Math.PI||s.longitude>Math.PI))return n.ellipsoid.cartographicToCartesian(s,i)}an.prototype.pickEllipsoid=function(e,t,n){let i=this._scene.canvas;if(!(i.clientWidth===0||i.clientHeight===0)){if(l(n)||(n=new h),t=t??ie.default,this._mode===se.SCENE3D)n=W_t(this,e,t,n);else if(this._mode===se.SCENE2D)n=F_t(this,e,this._projection,n);else if(this._mode===se.COLUMBUS_VIEW)n=P_t(this,e,this._projection,n);else return;return n}};var X_t=new h,N_t=new h,Y_t=new h;function w_t(e,t,n){let i=e._scene.canvas,o=i.clientWidth,r=i.clientHeight,s=Math.tan(e.frustum.fovy*.5),a=e.frustum.aspectRatio*s,c=e.frustum.near,d=2/o*t.x-1,u=2/r*(r-t.y)-1,m=e.positionWC;h.clone(m,n.origin);let p=h.multiplyByScalar(e.directionWC,c,X_t);h.add(m,p,p);let b=h.multiplyByScalar(e.rightWC,d*c*a,N_t),f=h.multiplyByScalar(e.upWC,u*c*s,Y_t),y=h.add(p,b,n.direction);return h.add(y,f,y),h.subtract(y,m,y),h.normalize(y,y),n}var m3=new h;function M_t(e,t,n){let i=e._scene.canvas,o=i.clientWidth,r=i.clientHeight,s=e.frustum,a=s.offCenterFrustum;l(a)&&(s=a);let c=2/o*t.x-1;c*=(s.right-s.left)*.5;let d=2/r*(r-t.y)-1;d*=(s.top-s.bottom)*.5;let u=n.origin;if(h.clone(e.positionWC,u),h.multiplyByScalar(e.rightWC,c,m3),h.add(m3,u,u),h.multiplyByScalar(e.upWC,d,m3),h.add(m3,u,u),h.clone(e.directionWC,n.direction),e._mode===se.SCENE2D&&e._scene.mapMode2D===id.INFINITE_SCROLL){let m=e._maxCoord.x;u.y=L.mod(u.y+m,2*m)-m}return n}an.prototype.getPickRay=function(e,t){l(t)||(t=new fn);let n=this._scene.canvas;if(n.clientWidth<=0||n.clientHeight<=0)return;let i=this.frustum;return l(i.aspectRatio)&&l(i.fov)&&l(i.near)?w_t(this,e,t):M_t(this,e,t)};var k_t=new h,U_t=new h;an.prototype.distanceToBoundingSphere=function(e){let t=h.subtract(this.positionWC,e.center,k_t),n=h.multiplyByScalar(this.directionWC,h.dot(t,this.directionWC),U_t);return Math.max(0,h.magnitude(n)-e.radius)};var D_t=new M;an.prototype.getPixelSize=function(e,t,n){let i=this.distanceToBoundingSphere(e),o=this.frustum.getPixelDimensions(t,n,i,this._scene.pixelRatio,D_t);return Math.max(o.x,o.y)};function O_t(e,t,n,i,o,r){let s=h.clone(t);n.y>i?s.y-=n.y-i:n.y<-i&&(s.y+=-i-n.y),n.z>o?s.z-=n.z-o:n.z<-o&&(s.z+=-o-n.z);function a(c){let d=h.lerp(t,s,c.time,new h);e.worldToCameraCoordinatesPoint(d,e.position)}return{easingFunction:ls.EXPONENTIAL_OUT,startObject:{time:0},stopObject:{time:1},duration:r,update:a}}var B_t=new h,aCe=new h,z_t=new h,H_t=new h;function K_t(e,t){let n=e.position,i=e.direction,o=e.worldToCameraCoordinatesVector(h.UNIT_X,B_t),r=-h.dot(o,n)/h.dot(o,i),s=h.add(n,h.multiplyByScalar(i,r,aCe),aCe);e.cameraToWorldCoordinatesPoint(s,s),n=e.cameraToWorldCoordinatesPoint(e.position,z_t);let a=Math.tan(e.frustum.fovy*.5),c=e.frustum.aspectRatio*a,d=h.magnitude(h.subtract(n,s,H_t)),u=c*d,m=a*d,p=e._maxCoord.x,b=e._maxCoord.y,f=Math.max(u-p,p),y=Math.max(m-b,b);if(n.z<-f||n.z>f||n.y<-y||n.y>y){let _=s.y<-f||s.y>f,S=s.z<-y||s.z>y;if(_||S)return O_t(e,n,s,f,y,t)}}an.prototype.createCorrectPositionTween=function(e){if(this._mode===se.COLUMBUS_VIEW)return K_t(this,e)};var J_t=new h,Da={destination:void 0,heading:void 0,pitch:void 0,roll:void 0,duration:void 0,complete:void 0,cancel:void 0,endTransform:void 0,maximumHeight:void 0,easingFunction:void 0};an.prototype.cancelFlight=function(){l(this._currentFlight)&&(this._currentFlight.cancelTween(),this._currentFlight=void 0)};an.prototype.completeFlight=function(){if(l(this._currentFlight)){this._currentFlight.cancelTween();let e={destination:void 0,orientation:{heading:void 0,pitch:void 0,roll:void 0}};e.destination=Da.destination,e.orientation.heading=Da.heading,e.orientation.pitch=Da.pitch,e.orientation.roll=Da.roll,this.setView(e),l(this._currentFlight.complete)&&this._currentFlight.complete(),this._currentFlight=void 0}};an.prototype.flyTo=function(e){e=e??B.EMPTY_OBJECT;let t=e.destination;if(this._mode===se.MORPHING)return;this.cancelFlight();let i=t instanceof re;i&&(t=this.getRectangleCameraCoordinates(t,J_t));let o=e.orientation??B.EMPTY_OBJECT;if(l(o.direction)&&(o=yCe(this,t,o,Oee.orientation)),l(e.duration)&&e.duration<=0){let u=Oee;u.destination=e.destination,u.orientation.heading=o.heading,u.orientation.pitch=o.pitch,u.orientation.roll=o.roll,u.convert=e.convert,u.endTransform=e.endTransform,this.setView(u),typeof e.complete=="function"&&e.complete();return}let r=this,s;Da.destination=t,Da.heading=o.heading,Da.pitch=o.pitch,Da.roll=o.roll,Da.duration=e.duration,Da.complete=function(){s===r._currentFlight&&(r._currentFlight=void 0),l(e.complete)&&e.complete()},Da.cancel=e.cancel,Da.endTransform=e.endTransform,Da.convert=i?!1:e.convert,Da.maximumHeight=e.maximumHeight,Da.pitchAdjustHeight=e.pitchAdjustHeight,Da.flyOverLongitude=e.flyOverLongitude,Da.flyOverLongitudeWeight=e.flyOverLongitudeWeight,Da.easingFunction=e.easingFunction;let a=this._scene,c=qY.createTween(a,Da);if(c.duration===0){typeof c.complete=="function"&&c.complete();return}s=a.tweens.add(c),this._currentFlight=s;let d=this._scene.preloadFlightCamera;this._mode!==se.SCENE2D&&(l(d)||(d=an.clone(this)),d.setView({destination:t,orientation:o}),this._scene.preloadFlightCullingVolume=d.frustum.computeCullingVolume(d.positionWC,d.directionWC,d.upWC))};function j_t(e,t){let n=e.frustum,i=Math.tan(n.fovy*.5),o=n.aspectRatio*i;return Math.max(t/o,t/i)}function Q_t(e,t){let n=e.frustum,i=n.offCenterFrustum;l(i)&&(n=i);let o,r,s=n.right/n.top,a=t*s;return t>a?(o=t,r=o/s):(r=t,o=a),Math.max(o,r)*1.5}var q_t=100;function CCe(e,t,n){n=Gm.clone(l(n)?n:an.DEFAULT_OFFSET);let i=e._scene.screenSpaceCameraController.minimumZoomDistance,o=e._scene.screenSpaceCameraController.maximumZoomDistance,r=n.range;if(!l(r)||r===0){let s=t.radius;s===0?n.range=q_t:e.frustum instanceof bn||e._mode===se.SCENE2D?n.range=Q_t(e,s):n.range=j_t(e,s),n.range=L.clamp(n.range,i,o)}return n}an.prototype.viewBoundingSphere=function(e,t){t=CCe(this,e,t),this.lookAt(e.center,t)};var $_t=new I,cCe=new h,eSt=new h,tSt=new h,nSt=new h,iSt=new ce,oSt=new Ye,rSt=new q;an.prototype.flyToBoundingSphere=function(e,t){t=t??B.EMPTY_OBJECT;let n=this._mode===se.SCENE2D||this._mode===se.COLUMBUS_VIEW;this._setTransform(I.IDENTITY);let i=CCe(this,e,t.offset),o;n?o=h.multiplyByScalar(h.UNIT_Z,i.range,cCe):o=ZCe(i.heading,i.pitch,i.range,cCe);let s=this._scene.ellipsoid??ie.default,a=bt.eastNorthUpToFixedFrame(e.center,s,$_t);I.multiplyByPoint(a,o,o);let c,d;if(!n){if(c=h.subtract(e.center,o,eSt),h.normalize(c,c),d=I.multiplyByPointAsVector(a,h.UNIT_Z,tSt),1-Math.abs(h.dot(c,d))<L.EPSILON6){let m=Ye.fromAxisAngle(c,i.heading,oSt),p=q.fromQuaternion(m,rSt);h.fromCartesian4(I.getColumn(a,1,iSt),d),q.multiplyByVector(p,d,d)}let u=h.cross(c,d,nSt);h.cross(u,c,d),h.normalize(d,d)}this.flyTo({destination:o,orientation:{direction:c,up:d},duration:t.duration,complete:t.complete,cancel:t.cancel,endTransform:t.endTransform,maximumHeight:t.maximumHeight,easingFunction:t.easingFunction,flyOverLongitude:t.flyOverLongitude,flyOverLongitudeWeight:t.flyOverLongitudeWeight,pitchAdjustHeight:t.pitchAdjustHeight})};var lCe=new h,dCe=new h,Uee=new h,uCe=new h,ew=[new h,new h,new h,new h];function sSt(e,t){let n=t.radii,i=e.positionWC,o=h.multiplyComponents(t.oneOverRadii,i,lCe),r=h.magnitude(o),s=h.normalize(o,dCe),a,c;h.equalsEpsilon(s,h.UNIT_Z,L.EPSILON10)?(a=new h(0,1,0),c=new h(0,0,1)):(a=h.normalize(h.cross(h.UNIT_Z,s,Uee),Uee),c=h.normalize(h.cross(s,a,uCe),uCe));let d=Math.sqrt(h.magnitudeSquared(o)-1),u=h.multiplyByScalar(s,1/r,lCe),m=d/r,p=h.multiplyByScalar(a,m,dCe),b=h.multiplyByScalar(c,m,Uee),f=h.add(u,b,ew[0]);h.subtract(f,p,f),h.multiplyComponents(n,f,f);let y=h.subtract(u,b,ew[1]);h.subtract(y,p,y),h.multiplyComponents(n,y,y);let _=h.subtract(u,b,ew[2]);h.add(_,p,_),h.multiplyComponents(n,_,_);let S=h.add(u,b,ew[3]);return h.add(S,p,S),h.multiplyComponents(n,S,S),ew}var Dee=new M,aSt=new h,Ix=[new fe,new fe,new fe,new fe];function h3(e,t,n,i,o,r){Dee.x=e,Dee.y=t;let s=i.pickEllipsoid(Dee,o,aSt);return l(s)?(Ix[n]=o.cartesianToCartographic(s,Ix[n]),1):(Ix[n]=o.cartesianToCartographic(r[n],Ix[n]),0)}an.prototype.computeViewRectangle=function(e,t){e=e??ie.default;let n=this.frustum.computeCullingVolume(this.positionWC,this.directionWC,this.upWC),i=new le(h.ZERO,e.maximumRadius);if(n.computeVisibility(i)===jt.OUTSIDE)return;let r=this._scene.canvas,s=r.clientWidth,a=r.clientHeight,c=0,d=sSt(this,e);if(c+=h3(0,0,0,this,e,d),c+=h3(0,a,1,this,e,d),c+=h3(s,a,2,this,e,d),c+=h3(s,0,3,this,e,d),c<2)return re.MAX_VALUE;t=re.fromCartographicArray(Ix,t);let u=0,m=Ix[3].longitude;for(let p=0;p<4;++p){let b=Ix[p].longitude,f=Math.abs(b-m);f>L.PI?u+=L.TWO_PI-f:u+=f,m=b}return L.equalsEpsilon(Math.abs(u),L.TWO_PI,L.EPSILON9)&&(t.west=-L.PI,t.east=L.PI,Ix[0].latitude>=0?t.north=L.PI_OVER_TWO:t.south=-L.PI_OVER_TWO),t};an.prototype.switchToPerspectiveFrustum=function(){if(this._mode===se.SCENE2D||this.frustum instanceof Bi)return;let e=this._scene;this.frustum=new Bi,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=L.toRadians(60)};an.prototype.switchToOrthographicFrustum=function(){if(this._mode===se.SCENE2D||this.frustum instanceof bn)return;let e=bCe(this),t=this._scene;this.frustum=new bn,this.frustum.aspectRatio=t.drawingBufferWidth/t.drawingBufferHeight,this.frustum.width=e};an.clone=function(e,t){return l(t)||(t=new an(e._scene)),h.clone(e.position,t.position),h.clone(e.direction,t.direction),h.clone(e.up,t.up),h.clone(e.right,t.right),I.clone(e._transform,t.transform),t._transformChanged=!0,t.frustum=e.frustum.clone(),t};var Ro=an;var JQi=x(T(),1);function cSt(e){this.pass=e.pass,this.commandList=e.commandList,this.camera=e.camera,this.cullingVolume=e.cullingVolume,this.ready=!1}var rh=cSt;var QQi=x(T(),1),Kee=class{constructor(){this._controllers=[],this._needsUpdate=new Set}get controllerCount(){return this._controllers.length}registerController(t,n,i){let o=i??this.controllerCount;this._controllers.splice(o,0,t),this._needsUpdate.add(t),t.connectedCallback(n)}unregisterController(t,n){let i=this._controllers,o=i.indexOf(t);o!==-1&&(i.splice(o,1),t.disconnectedCallback(n))}update(t,n){for(let i of this._controllers)i.enabled&&(this._needsUpdate.has(i)&&(i.firstUpdate(t,n),this._needsUpdate.delete(i)),i.update(t,n))}},tw=Kee;var o8i=x(T(),1);var LCe=x(tu(),1),RCe=576,lSt=100,nw="#ffffff",y3="#48b";function WCe(e,t){this.credit=e,this.count=t??1}function dSt(e,t){let n=e.length;for(let i=0;i<n;i++){let o=e[i];if(At.equals(o,t))return!0}return!1}function uSt(e){let t=e._previousCesiumCredit,n=e._currentCesiumCredit;At.equals(n,t)||(l(t)&&e._cesiumCreditContainer.removeChild(t.element),l(n)&&e._cesiumCreditContainer.appendChild(n.element),e._previousCesiumCredit=n)}var vCe="cesium-credit-delimiter";function GCe(e){let t=document.createElement("span");return t.textContent=e,t.className=vCe,t}function ACe(e,t){if(l(t)){let n=document.createElement(t);n._creditId=e._creditId,n.appendChild(e),e=n}return e}function ECe(e,t,n,i){let o=e.childNodes,r=-1;t.sort(function(s,a){return a.count-s.count});for(let s=0;s<t.length;++s){let a=t[s].credit;if(l(a)){if(r=s,l(n)&&(r*=2,s>0)){let d=r-1;if(o.length<=d)e.appendChild(GCe(n));else{let u=o[d];u.className!==vCe&&e.replaceChild(GCe(n),u)}}let c=a.element;if(o.length<=r)e.appendChild(ACe(c,i));else{let d=o[r];d._creditId!==a._id&&e.replaceChild(ACe(c,i),d)}}}for(++r;r<o.length;)e.removeChild(o[r])}function mSt(e){let t=e._lightboxCredits,n=e.viewport.clientWidth,i=e.viewport.clientHeight;n!==e._lastViewportWidth&&(n<RCe?(t.className="cesium-credit-lightbox cesium-credit-lightbox-mobile",t.style.marginTop="0"):(t.className="cesium-credit-lightbox cesium-credit-lightbox-expanded",t.style.marginTop=`${Math.floor((i-t.clientHeight)*.5)}px`),e._lastViewportWidth=n),n>=RCe&&i!==e._lastViewportHeight&&(t.style.marginTop=`${Math.floor((i-t.clientHeight)*.5)}px`,e._lastViewportHeight=i)}function hSt(e){let t=` .cesium-credit-lightbox-overlay { display: none; z-index: 1; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(80, 80, 80, 0.8); } .cesium-credit-lightbox { background-color: #303336; color: ${nw}; position: relative; min-height: ${lSt}px; margin: auto; } .cesium-credit-lightbox > ul > li a, .cesium-credit-lightbox > ul > li a:visited, .cesium-credit-wrapper a, .cesium-credit-wrapper a:visited { color: ${nw}; } .cesium-credit-lightbox > ul > li a:hover { color: ${y3}; } .cesium-credit-lightbox.cesium-credit-lightbox-expanded { border: 1px solid #444; border-radius: 5px; max-width: 470px; } .cesium-credit-lightbox.cesium-credit-lightbox-mobile { height: 100%; width: 100%; } .cesium-credit-lightbox-title { padding: 20px 20px 0 20px; } .cesium-credit-lightbox-close { font-size: 18pt; cursor: pointer; position: absolute; top: 0; right: 6px; color: ${nw}; } .cesium-credit-lightbox-close:hover { color: ${y3}; } .cesium-credit-lightbox > ul { margin: 0; padding: 12px 20px 12px 40px; font-size: 13px; } .cesium-credit-lightbox > ul > li { padding-bottom: 6px; } .cesium-credit-lightbox > ul > li * { padding: 0; margin: 0; } .cesium-credit-expand-link { padding-left: 5px; cursor: pointer; text-decoration: underline; color: ${nw}; } .cesium-credit-expand-link:hover { color: ${y3}; } .cesium-credit-text { color: ${nw}; } .cesium-credit-delimiter { padding: 0 5px; } .cesium-credit-textContainer *, .cesium-credit-logoContainer * { display: inline; } .cesium-credit-textContainer a:hover { color: ${y3} } .cesium-credit-textContainer .cesium-credit-wrapper:first-of-type { padding-left: 5px; } `;function n(r){if(r.shadowRoot)return r.shadowRoot;if(r.getRootNode){let s=r.getRootNode();if(s instanceof ShadowRoot)return s}}let i=n(e)??document.head,o=document.createElement("style");o.innerHTML=t,i.appendChild(o)}function Mr(e,t,n){let i=this;n=n??document.body;let o=document.createElement("div");o.className="cesium-credit-lightbox-overlay",n.appendChild(o);let r=document.createElement("div");r.className="cesium-credit-lightbox",o.appendChild(r);function s(f){r.contains(f.target)||i.hideLightbox()}o.addEventListener("click",s,!1);let a=document.createElement("div");a.className="cesium-credit-lightbox-title",a.textContent="Data provided by:",r.appendChild(a);let c=document.createElement("a");c.onclick=this.hideLightbox.bind(this),c.innerHTML="×",c.className="cesium-credit-lightbox-close",r.appendChild(c);let d=document.createElement("ul");r.appendChild(d);let u=document.createElement("div");u.className="cesium-credit-logoContainer",u.style.display="inline",e.appendChild(u);let m=document.createElement("div");m.className="cesium-credit-textContainer",m.style.display="inline",e.appendChild(m);let p=document.createElement("a");p.className="cesium-credit-expand-link",p.onclick=this.showLightbox.bind(this),p.textContent="Data attribution",e.appendChild(p),hSt(e);let b=At.clone(Mr.cesiumCredit);this._delimiter=t??"\u2022",this._screenContainer=m,this._cesiumCreditContainer=u,this._lastViewportHeight=void 0,this._lastViewportWidth=void 0,this._lightboxCredits=r,this._creditList=d,this._lightbox=o,this._hideLightbox=s,this._expandLink=p,this._expanded=!1,this._staticCredits=[],this._cesiumCredit=b,this._previousCesiumCredit=void 0,this._currentCesiumCredit=b,this._creditDisplayElementPool=[],this._creditDisplayElementIndex=0,this._currentFrameCredits={screenCredits:new Mt,lightboxCredits:new Mt},this._defaultCredit=void 0,this.viewport=n,this.container=e}function FCe(e,t,n,i){i=i??1;let o=t.get(n.id);if(l(o))o.count<Number.MAX_VALUE&&(o.count+=i);else{let r=e._creditDisplayElementPool,s=e._creditDisplayElementPoolIndex;s<r.length?(o=r[s],o.credit=n,o.count=i):(o=new WCe(n,i),r.push(o)),++e._creditDisplayElementPoolIndex,t.set(n.id,o)}}Mr.prototype.addCreditToNextFrame=function(e){if(e.isIon()){l(this._defaultCredit)||(this._defaultCredit=At.clone(ICe())),this._currentCesiumCredit=this._defaultCredit;return}let t;e.showOnScreen?t=this._currentFrameCredits.screenCredits:t=this._currentFrameCredits.lightboxCredits,FCe(this,t,e)};Mr.prototype.addStaticCredit=function(e){let t=this._staticCredits;dSt(t,e)||t.push(e)};Mr.prototype.removeStaticCredit=function(e){let t=this._staticCredits,n=t.indexOf(e);n!==-1&&t.splice(n,1)};Mr.prototype.showLightbox=function(){this._lightbox.style.display="block",this._expanded=!0};Mr.prototype.hideLightbox=function(){this._lightbox.style.display="none",this._expanded=!1};Mr.prototype.update=function(){this._expanded&&mSt(this)};Mr.prototype.beginFrame=function(){let e=this._currentFrameCredits;this._creditDisplayElementPoolIndex=0;let t=e.screenCredits,n=e.lightboxCredits;t.removeAll(),n.removeAll();let i=this._staticCredits;for(let o=0;o<i.length;++o){let r=i[o],s=r.showOnScreen?t:n;r.isIon()&&At.equals(Mr.cesiumCredit,this._cesiumCredit)||FCe(this,s,r,Number.MAX_VALUE)}At.equals(Mr.cesiumCredit,this._cesiumCredit)||(this._cesiumCredit=At.clone(Mr.cesiumCredit)),this._currentCesiumCredit=this._cesiumCredit};Mr.prototype.endFrame=function(){let e=this._currentFrameCredits.screenCredits.values;ECe(this._screenContainer,e,this._delimiter,void 0);let t=this._currentFrameCredits.lightboxCredits.values;this._expandLink.style.display=t.length>0?"inline":"none",ECe(this._creditList,t,void 0,"li"),uSt(this)};Mr.prototype.destroy=function(){return this._lightbox.removeEventListener("click",this._hideLightbox,!1),this.container.removeChild(this._cesiumCreditContainer),this.container.removeChild(this._screenContainer),this.container.removeChild(this._expandLink),this.viewport.removeChild(this._lightbox),me(this)};Mr.prototype.isDestroyed=function(){return!1};Mr._cesiumCredit=void 0;Mr._cesiumCreditInitialized=!1;var x3;function ICe(){if(!l(x3)){let e=qt("Assets/Images/ion-credit.png");e.indexOf("http://")!==0&&e.indexOf("https://")!==0&&e.indexOf("data:")!==0&&(e=new LCe.default(e).path()),x3=new At(`<a href="https://cesium.com/" target="_blank"><img src="${e}" style="vertical-align: -7px" title="Cesium ion"/></a>`,!0)}return Mr._cesiumCreditInitialized||(Mr._cesiumCredit=x3,Mr._cesiumCreditInitialized=!0),x3}Object.defineProperties(Mr,{cesiumCredit:{get:function(){return ICe(),Mr._cesiumCredit},set:function(e){Mr._cesiumCredit=e,Mr._cesiumCreditInitialized=!0}}});Mr.CreditDisplayElement=WCe;var iw=Mr;var Z8i=x(T(),1);function T3(e){e=e??B.EMPTY_OBJECT,this._camera=e.camera,this._frustumSplits=e.frustumSplits,this._color=e.color??U.CYAN,this._updateOnChange=e.updateOnChange??!0,this.show=e.show??!0,this.id=e.id,this._id=void 0,this._outlinePrimitives=[],this._planesPrimitives=[]}var fSt=new h,pSt=new q,bSt=new Ye,gSt=new Bi,ySt=new Fl,xSt=new bn,TSt=new ds,_St=new U,SSt=[1,1e5];T3.prototype.update=function(e){if(!this.show)return;let t=this._planesPrimitives,n=this._outlinePrimitives,i,o;if(this._updateOnChange){for(o=t.length,i=0;i<o;++i)n[i]=n[i]&&n[i].destroy(),t[i]=t[i]&&t[i].destroy();t.length=0,n.length=0}if(t.length===0){let r=this._camera,s=r.frustum,a;s instanceof Bi?a=gSt:s instanceof Fl?a=ySt:s instanceof bn?a=xSt:a=TSt,a=s.clone(a);let c,d=this._frustumSplits;!l(d)||d.length<=1?(d=SSt,d[0]=this._camera.frustum.near,d[1]=this._camera.frustum.far,c=1):c=d.length-1;let u=r.positionWC,m=r.directionWC,p=r.upWC,b=r.rightWC;b=h.negate(b,fSt);let f=pSt;q.setColumn(f,0,b,f),q.setColumn(f,1,p,f),q.setColumn(f,2,m,f);let y=Ye.fromRotationMatrix(f,bSt);for(t.length=n.length=c,i=0;i<c;++i)a.near=d[i],a.far=d[i+1],t[i]=new Nn({geometryInstances:new Nt({geometry:new i_({origin:u,orientation:y,frustum:a,_drawNearPlane:i===0}),attributes:{color:Qt.fromColor(U.fromAlpha(this._color,.1,_St))},id:this.id,pickPrimitive:this}),appearance:new yn({translucent:!0,flat:!0}),asynchronous:!1}),n[i]=new Nn({geometryInstances:new Nt({geometry:new PE({origin:u,orientation:y,frustum:a,_drawNearPlane:i===0}),attributes:{color:Qt.fromColor(this._color)},id:this.id,pickPrimitive:this}),appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})}for(o=t.length,i=0;i<o;++i)n[i].update(e),t[i].update(e)};T3.prototype.isDestroyed=function(){return!1};T3.prototype.destroy=function(){let e=this._planesPrimitives.length;for(let t=0;t<e;++t)this._outlinePrimitives[t]=this._outlinePrimitives[t]&&this._outlinePrimitives[t].destroy(),this._planesPrimitives[t]=this._planesPrimitives[t]&&this._planesPrimitives[t].destroy();return me(this)};var t0=T3;var J8i=x(T(),1);var C8i=x(T(),1),ow=`in vec4 positionEC; void main() { vec3 position; vec3 direction; if (czm_orthographicIn3D == 1.0) { vec2 uv = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw; vec2 minPlane = vec2(czm_frustumPlanes.z, czm_frustumPlanes.y); // left, bottom vec2 maxPlane = vec2(czm_frustumPlanes.w, czm_frustumPlanes.x); // right, top position = vec3(mix(minPlane, maxPlane, uv), 0.0); direction = vec3(0.0, 0.0, -1.0); } else { position = vec3(0.0); direction = normalize(positionEC.xyz); } czm_ray ray = czm_ray(position, direction); vec3 ellipsoid_center = czm_view[3].xyz; czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii); if (!czm_isEmpty(intersection)) { out_FragColor = vec4(1.0, 1.0, 0.0, 1.0); } else { discard; } czm_writeLogDepth(); } `;var G8i=x(T(),1),rw=`in vec4 position; out vec4 positionEC; void main() { positionEC = czm_modelView * position; gl_Position = czm_projection * positionEC; czm_vertexLogDepth(); } `;function aw(e){this._rs=void 0,this._sp=void 0,this._va=void 0,this._command=void 0,this._mode=void 0,this._useLogDepth=!1,this._ellipsoidOffset=e??0}var sw=hn.supportsTypedArrays()?new Float32Array(12):[],PCe=new h,XCe=new h,Jee=new h,NCe=new h,_3=new h;function ZSt(e,t){let n=e.radii,i=t.camera,o,r,s;if(i.frustum instanceof bn)o=h.ZERO,r=i.rightWC,s=i.upWC;else{let m=i.positionWC,p=h.multiplyComponents(e.oneOverRadii,m,PCe),b=h.normalize(p,XCe),f=h.normalize(h.cross(h.UNIT_Z,p,Jee),Jee),y=h.normalize(h.cross(b,f,NCe),NCe),_=h.magnitude(p),S=Math.sqrt(_*_-1);o=h.multiplyByScalar(b,1/_,PCe);let Z=S/_;r=h.multiplyByScalar(f,Z,XCe),s=h.multiplyByScalar(y,Z,Jee)}let a=h.add(o,s,_3);h.subtract(a,r,a),h.multiplyComponents(n,a,a),h.pack(a,sw,0);let c=h.subtract(o,s,_3);h.subtract(c,r,c),h.multiplyComponents(n,c,c),h.pack(c,sw,3);let d=h.add(o,s,_3);h.add(d,r,d),h.multiplyComponents(n,d,d),h.pack(d,sw,6);let u=h.subtract(o,s,_3);return h.add(u,r,u),h.multiplyComponents(n,u,u),h.pack(u,sw,9),sw}aw.prototype.update=function(e){if(this._mode=e.mode,e.mode!==se.SCENE3D)return;let t=e.context,n=e.mapProjection.ellipsoid.radii,i=new ie(n.x+this._ellipsoidOffset,n.y+this._ellipsoidOffset,n.z+this._ellipsoidOffset),o=e.useLogDepth;if(l(this._command)||(this._rs=Oe.fromCache({cull:{enabled:!0},depthTest:{enabled:!0},colorMask:{red:!1,green:!1,blue:!1,alpha:!1}}),this._command=new ot({renderState:this._rs,boundingVolume:new le(h.ZERO,i.maximumRadius),pass:We.OPAQUE,owner:this})),!l(this._sp)||this._useLogDepth!==o){this._useLogDepth=o;let s=new ze({sources:[rw]}),a=new ze({sources:[ow]});o&&(a.defines.push("LOG_DEPTH"),s.defines.push("LOG_DEPTH")),this._sp=en.replaceCache({shaderProgram:this._sp,context:t,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:{position:0}}),this._command.shaderProgram=this._sp}let r=ZSt(i,e);if(l(this._va))this._va.getAttribute(0).vertexBuffer.copyFromArrayView(r);else{let s=new Zt({attributes:{position:new Pe({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:r})},indices:[0,1,2,2,1,3],primitiveType:Fe.TRIANGLES});this._va=Dn.fromGeometry({context:t,geometry:s,attributeLocations:{position:0},bufferUsage:Ie.DYNAMIC_DRAW}),this._command.vertexArray=this._va}};aw.prototype.execute=function(e,t){this._mode===se.SCENE3D&&this._command.execute(e,t)};aw.prototype.isDestroyed=function(){return!1};aw.prototype.destroy=function(){this._sp=this._sp&&this._sp.destroy(),this._va=this._va&&this._va.destroy()};var cw=aw;var o7i=x(T(),1);function eZ(){}var VSt=/\bgl_FragDepth\b/,CSt=/\bdiscard\b/;function RSt(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"depthOnly");if(l(n))return n;let i=t.fragmentShaderSource,o=!1,r=i.sources;for(let a=0;a<r.length;++a)if(VSt.test(r[a])||CSt.test(r[a])){o=!0;break}let s=i.defines.indexOf("LOG_DEPTH")>=0;if(!o&&!s){let a=`void main() { out_FragColor = vec4(1.0); } `;i=new ze({sources:[a]})}else if(!o&&s){let a=`void main() { out_FragColor = vec4(1.0); czm_writeLogDepth(); } `;i=new ze({defines:["LOG_DEPTH"],sources:[a]})}return e.shaderCache.createDerivedShaderProgram(t,"depthOnly",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:i,attributeLocations:t._attributeLocations})}function GSt(e,t){let n=e._depthOnlyRenderStateCache,i=n[t.id];if(l(i))return i;let o=Oe.getState(t);o.depthMask=!0,o.colorMask={red:!1,green:!1,blue:!1,alpha:!1};let r=Oe.fromCache(o);return n[t.id]=r,r}eZ.createDepthOnlyDerivedCommand=function(e,t,n,i){l(i)||(i={});let o=i.depthOnlyCommand?.shaderProgram,r=i.depthOnlyCommand?.renderState;return i.depthOnlyCommand=ot.shallowClone(t,i.depthOnlyCommand),!l(o)||i.shaderProgramId!==t.shaderProgram.id?(i.depthOnlyCommand.shaderProgram=RSt(n,t.shaderProgram),i.depthOnlyCommand.renderState=GSt(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.depthOnlyCommand.shaderProgram=o,i.depthOnlyCommand.renderState=r),i};var ASt=/\s+czm_writeLogDepth\(/,ESt=/\s+czm_vertexLogDepth\(/;function LSt(e,t){if(t.fragmentShaderSource.defines.indexOf("LOG_DEPTH_READ_ONLY")>=0)return t;let i=e.shaderCache.getDerivedShaderProgram(t,"logDepth");if(l(i))return i;let o=t._attributeLocations,r=t.vertexShaderSource.clone(),s=t.fragmentShaderSource.clone();r.defines=l(r.defines)?r.defines.slice(0):[],r.defines.push("LOG_DEPTH"),s.defines=l(s.defines)?s.defines.slice(0):[],s.defines.push("LOG_DEPTH");let a=!1,c=r.sources;for(let u=0;u<c.length;++u)if(ESt.test(c[u])){a=!0;break}if(!a){for(let m=0;m<c.length;++m)c[m]=ze.replaceMain(c[m],"czm_log_depth_main");c.push(` void main() { czm_log_depth_main(); czm_vertexLogDepth(); } `)}c=s.sources,a=!1;for(let u=0;u<c.length;++u)ASt.test(c[u])&&(a=!0);s.defines.indexOf("LOG_DEPTH_WRITE")!==-1&&(a=!0);let d="";if(!a){for(let u=0;u<c.length;u++)c[u]=ze.replaceMain(c[u],"czm_log_depth_main");d=` void main() { czm_log_depth_main(); czm_writeLogDepth(); } `}return c.push(d),e.shaderCache.createDerivedShaderProgram(t,"logDepth",{vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:o})}eZ.createLogDepthCommand=function(e,t,n){l(n)||(n={});let i=n.command?.shaderProgram;return n.command=ot.shallowClone(e,n.command),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=LSt(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};function WSt(e,t,n){let i=e.shaderCache.getDerivedShaderProgram(t,"pick");if(l(i))return i;let o=t._attributeLocations,{sources:r,defines:s}=t.fragmentShaderSource,c=r.some(b=>b.includes("out_FragData"))?"out_FragData_0":"out_FragColor",d=`void main () { czm_non_pick_main(); if (${c}.a == 0.0) { discard; } ${c} = ${n}; } `,u=r.length,m=new Array(u+1);for(let b=0;b<u;++b)m[b]=ze.replaceMain(r[b],"czm_non_pick_main");m[u]=d;let p=new ze({sources:m,defines:s});return e.shaderCache.createDerivedShaderProgram(t,"pick",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:p,attributeLocations:o})}function jee(e,t){let n=e.picking.pickRenderStateCache,i=n[t.id];if(l(i))return i;let o=Oe.getState(t);o.blending.enabled=!1,o.depthMask=!0;let r=Oe.fromCache(o);return n[t.id]=r,r}eZ.createPickDerivedCommand=function(e,t,n,i){l(i)||(i={});let o=i.pickCommand?.shaderProgram,r=i.pickCommand?.renderState;return i.pickCommand=ot.shallowClone(t,i.pickCommand),!l(o)||i.shaderProgramId!==t.shaderProgram.id?(i.pickCommand.shaderProgram=WSt(n,t.shaderProgram,t.pickId),i.pickCommand.renderState=jee(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.pickCommand.shaderProgram=o,i.pickCommand.renderState=r),i};var vSt=`uint rgba8UnormToUint32(vec4 c) { uvec4 b = uvec4(c * 255.0 + 0.5); return (b.r) | (b.g << 8u) | (b.b << 16u) | (b.a << 24u); } `;function FSt(e,t,n){let i=e.shaderCache.getDerivedShaderProgram(t,"snap");if(l(i))return i;let o=t._attributeLocations,{sources:r,defines:s}=t.fragmentShaderSource,c=r.some(b=>b.includes("out_FragData"))?"out_FragData_0":"out_FragColor",d=`${vSt} void main () { czm_non_snap_main(); if (${c}.a == 0.0) { discard; } ${c} = ${n}; } `,u=r.length,m=new Array(u+1);for(let b=0;b<u;++b)m[b]=ze.replaceMain(r[b],"czm_non_snap_main");m[u]=d;let p=new ze({sources:m,defines:s});return e.shaderCache.createDerivedShaderProgram(t,"snap",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:p,attributeLocations:o})}eZ.createSnapDerivedCommand=function(e,t,n,i){l(i)||(i={});let o=i.snapCommand?.shaderProgram,r=i.snapCommand?.renderState;return i.snapCommand=ot.shallowClone(t,i.snapCommand),!l(o)||i.shaderProgramId!==t.shaderProgram.id?(i.snapCommand.shaderProgram=FSt(n,t.shaderProgram,t.snapId),i.snapCommand.renderState=jee(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.snapCommand.shaderProgram=o,i.snapCommand.renderState=r),i};function CR(e,t,n){let i=e.length;for(let o=0;o<i;o++)e[o].trimStart().split(/\s+/)[0]===t&&(e[o]=`${t} ${n}`)}function ISt(e){return e.isArray?e.arrayLength:yt.getComponentCount(e.type)}function YCe(e,t,n){return`((${e} - float(${t})) / float(${n}))`}function wCe(e,t){let n=Pt.getMaximum(t);return`(${e}) / float(${n})`}function PSt(e,t){let n="float(value)";if(t.hasValueTransform){let i=t.offset,o=t.scale;n=YCe(n,i,o)}return e.normalized||(n=wCe(n,e.componentType)),n}function XSt(e,t,n){let o=`float(${`value.${n}`})`;if(t.hasValueTransform){let r=t.offset[n],s=t.scale[n];o=YCe(o,r,s)}return e.normalized||(o=wCe(o,e.componentType)),o}function NSt(e,t,n){let i=n.schemaId,o=n.className,r=n.propertyName,s=`pickMetadata-${i}-${o}-${r}`,a=e.shaderCache.getDerivedShaderProgram(t,s);if(l(a))return a;let c=n.metadataProperty,d=n.classProperty,u=d.getGlslType(),m=["0.0","0.0","0.0","0.0"],p=ISt(d);if(p===1)m[0]=PSt(d,c);else{let _=["x","y","z","w"];for(let S=0;S<p;S++)m[S]=XSt(d,c,_[S])}let b=t.fragmentShaderSource.defines.slice();b.push(Wu.METADATA_PICKING_ENABLED),CR(b,Wu.METADATA_PICKING_VALUE_TYPE,u),CR(b,Wu.METADATA_PICKING_VALUE_STRING,`metadata.${r}`),CR(b,Wu.METADATA_PICKING_VALUE_COMPONENT_X,m[0]),CR(b,Wu.METADATA_PICKING_VALUE_COMPONENT_Y,m[1]),CR(b,Wu.METADATA_PICKING_VALUE_COMPONENT_Z,m[2]),CR(b,Wu.METADATA_PICKING_VALUE_COMPONENT_W,m[3]);let f=new ze({sources:t.fragmentShaderSource.sources,defines:b});return e.shaderCache.createDerivedShaderProgram(t,s,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:f,attributeLocations:t._attributeLocations})}eZ.createPickMetadataDerivedCommand=function(e,t,n,i){return l(i)||(i={}),i.pickMetadataCommand=ot.shallowClone(t,i.pickMetadataCommand),i.pickMetadataCommand.shaderProgram=NSt(n,t.shaderProgram,t.pickedMetadataInfo),i.pickMetadataCommand.renderState=jee(e,t.renderState),i.shaderProgramId=t.shaderProgram.id,i};function YSt(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"HDR");if(l(n))return n;let i=t._attributeLocations,o=t.vertexShaderSource.clone(),r=t.fragmentShaderSource.clone();return o.defines=l(o.defines)?o.defines.slice(0):[],o.defines.push("HDR"),r.defines=l(r.defines)?r.defines.slice(0):[],r.defines.push("HDR"),e.shaderCache.createDerivedShaderProgram(t,"HDR",{vertexShaderSource:o,fragmentShaderSource:r,attributeLocations:i})}eZ.createHdrCommand=function(e,t,n){l(n)||(n={});let i=n.command?.shaderProgram;return n.command=ot.shallowClone(e,n.command),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=YSt(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};var Ff=eZ;var u7i=x(T(),1);function S3(e){this._scene=e,this._lastAlpha=void 0,this._lastBeta=void 0,this._lastGamma=void 0,this._alpha=void 0,this._beta=void 0,this._gamma=void 0;let t=this;function n(i){let o=i.alpha;if(!l(o)){t._alpha=void 0,t._beta=void 0,t._gamma=void 0;return}t._alpha=L.toRadians(o),t._beta=L.toRadians(i.beta),t._gamma=L.toRadians(i.gamma)}window.addEventListener("deviceorientation",n,!1),this._removeListener=function(){window.removeEventListener("deviceorientation",n,!1)}}var wSt=new Ye,MCe=new Ye,MSt=new q;function kSt(e,t,n,i){let o=e.direction,r=e.right,s=e.up,a=Ye.fromAxisAngle(o,n,MCe),c=Ye.fromAxisAngle(r,i,wSt),d=Ye.multiply(c,a,c),u=Ye.fromAxisAngle(s,t,MCe);Ye.multiply(u,d,d);let m=q.fromQuaternion(d,MSt);q.multiplyByVector(m,r,r),q.multiplyByVector(m,s,s),q.multiplyByVector(m,o,o)}S3.prototype.update=function(){if(!l(this._alpha))return;l(this._lastAlpha)||(this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma);let e=this._lastAlpha-this._alpha,t=this._lastBeta-this._beta,n=this._lastGamma-this._gamma;kSt(this._scene.camera,-e,t,n),this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma};S3.prototype.isDestroyed=function(){return!1};S3.prototype.destroy=function(){return this._removeListener(),me(this)};var lw=S3;var g7i=x(T(),1);function Qee(){this.enabled=!0,this.renderable=!0,this.density=6e-4,this.heightScalar=.001,this._heightFalloff=.59,this.maxHeight=8e5,this.visualDensityScalar=.15,this.screenSpaceErrorFactor=2,this.minimumBrightness=.03}Object.defineProperties(Qee.prototype,{heightFalloff:{get:function(){return this._heightFalloff},set:function(e){this._heightFalloff=e}}});var USt=new h;Qee.prototype.update=function(e){if(!(e.fog.enabled=this.enabled))return;e.fog.renderable=this.renderable;let n=e.camera,i=n.positionCartographic;if(!l(i)||i.height>this.maxHeight||e.mode!==se.SCENE3D){e.fog.enabled=!1,e.fog.density=0;return}let o=i.height,r=this.density*this.heightScalar*Math.pow(Math.max(o/this.maxHeight,L.EPSILON4),-Math.max(this._heightFalloff,0)),s=h.normalize(n.positionWC,USt),a=Math.abs(h.dot(n.directionWC,s));r*=1-a,e.fog.density=r,e.fog.visualDensityScalar=this.visualDensityScalar,e.fog.sse=this.screenSpaceErrorFactor,e.fog.minimumBrightness=this.minimumBrightness};var dw=Qee;var T7i=x(T(),1);function DSt(e,t,n){this.context=e,this.commandList=[],this.panoramaCommandList=[],this.shadowMaps=[],this.brdfLutGenerator=void 0,this.environmentMap=void 0,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this.specularEnvironmentMapsMaximumLOD=void 0,this.mode=se.SCENE3D,this.morphTime=se.getMorphTime(se.SCENE3D),this.frameNumber=0,this.newFrame=!1,this.time=void 0,this.jobScheduler=n,this.mapProjection=void 0,this.camera=void 0,this.cameraUnderground=!1,this.globeTranslucencyState=void 0,this.cullingVolume=void 0,this.occluder=void 0,this.maximumScreenSpaceError=void 0,this.pixelRatio=1,this.passes={render:!1,pick:!1,pickVoxel:!1,snap:!1,depth:!1,postProcess:!1,offscreen:!1},this.creditDisplay=t,this.afterRender=[],this.scene3DOnly=!1,this.fog={enabled:!1,renderable:!1,density:void 0,visualDensityScalar:void 0,sse:void 0,minimumBrightness:void 0},this.atmosphere=void 0,this.verticalExaggeration=1,this.verticalExaggerationRelativeHeight=0,this.shadowState={shadowsEnabled:!0,shadowMaps:[],lightShadowMaps:[],nearPlane:1,farPlane:5e3,closestObjectSize:1e3,lastDirtyTime:0,outOfView:!0},this.splitPosition=0,this.frustumSplits=[],this.backgroundColor=void 0,this.light=void 0,this.minimumDisableDepthTestDistance=void 0,this.invertClassification=!1,this.invertClassificationColor=void 0,this.useLogDepth=!1,this.tilesetPassState=void 0,this.minimumTerrainHeight=0,this.pickingMetadata=!1,this.pickedMetadataInfo=void 0,this.edgeVisibilityRequested=!1,this.planarFillRequested=!1}var uw=DSt;var F7i=x(T(),1);var hc={OPAQUE_FRONT_FACE:0,OPAQUE_BACK_FACE:1,DEPTH_ONLY_FRONT_FACE:2,DEPTH_ONLY_BACK_FACE:3,DEPTH_ONLY_FRONT_AND_BACK_FACE:4,TRANSLUCENT_FRONT_FACE:5,TRANSLUCENT_BACK_FACE:6,TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:7,TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:8,PICK_FRONT_FACE:9,PICK_BACK_FACE:10,DERIVED_COMMANDS_MAXIMUM_LENGTH:11},tZ=hc.DERIVED_COMMANDS_MAXIMUM_LENGTH,jCe=["opaqueFrontFaceCommand","opaqueBackFaceCommand","depthOnlyFrontFaceCommand","depthOnlyBackFaceCommand","depthOnlyFrontAndBackFaceCommand","translucentFrontFaceCommand","translucentBackFaceCommand","translucentFrontFaceManualDepthTestCommand","translucentBackFaceManualDepthTestCommand","pickFrontFaceCommand","pickBackFaceCommand"];function nZ(){this._frontFaceAlphaByDistance=new Ht(0,1,0,1),this._backFaceAlphaByDistance=new Ht(0,1,0,1),this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._requiresManualDepthTest=!1,this._sunVisibleThroughGlobe=!1,this._environmentVisible=!1,this._useDepthPlane=!1,this._numberOfTextureUniforms=0,this._globeTranslucencyFramebuffer=void 0,this._rectangle=re.clone(re.MAX_VALUE),this._derivedCommandKey=0,this._derivedCommandsDirty=!1,this._derivedCommandPacks=void 0,this._derivedCommandTypes=new Array(tZ),this._derivedBlendCommandTypes=new Array(tZ),this._derivedPickCommandTypes=new Array(tZ),this._derivedCommandTypesToUpdate=new Array(tZ),this._derivedCommandsLength=0,this._derivedBlendCommandsLength=0,this._derivedPickCommandsLength=0,this._derivedCommandsToUpdateLength=0}Object.defineProperties(nZ.prototype,{frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance}},translucent:{get:function(){return this._frontFaceTranslucent}},sunVisibleThroughGlobe:{get:function(){return this._sunVisibleThroughGlobe}},environmentVisible:{get:function(){return this._environmentVisible}},useDepthPlane:{get:function(){return this._useDepthPlane}},numberOfTextureUniforms:{get:function(){return this._numberOfTextureUniforms}},rectangle:{get:function(){return this._rectangle}}});nZ.prototype.update=function(e){let t=e.globe;if(!l(t)||!t.show){this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._sunVisibleThroughGlobe=!0,this._environmentVisible=!0,this._useDepthPlane=!1;return}this._frontFaceAlphaByDistance=kCe(t.translucency.enabled,t.translucency.frontFaceAlpha,t.translucency.frontFaceAlphaByDistance,this._frontFaceAlphaByDistance),this._backFaceAlphaByDistance=kCe(t.translucency.enabled,t.translucency.backFaceAlpha,t.translucency.backFaceAlphaByDistance,this._backFaceAlphaByDistance),this._frontFaceTranslucent=UCe(t.translucency.enabled,this._frontFaceAlphaByDistance,t),this._backFaceTranslucent=UCe(t.translucency.enabled,this._backFaceAlphaByDistance,t),this._requiresManualDepthTest=HSt(this,e,t),this._sunVisibleThroughGlobe=OSt(this,e),this._environmentVisible=BSt(this,e),this._useDepthPlane=zSt(this,e),this._numberOfTextureUniforms=KSt(this),this._rectangle=re.clone(t.translucency.rectangle,this._rectangle),JSt(this,e)};function kCe(e,t,n,i){return e?l(n)?(Ht.clone(n,i),i.nearValue*=t,i.farValue*=t,i):(i.nearValue=t,i.farValue=t,i):(i.nearValue=1,i.farValue=1,i)}function UCe(e,t,n){return e&&(n.baseColor.alpha<1||t.nearValue<1||t.farValue<1)}function OSt(e,t){let n=e._frontFaceTranslucent,i=e._backFaceTranslucent;return n&&(t.cameraUnderground||i)}function BSt(e,t){return!t.cameraUnderground||e._frontFaceTranslucent}function zSt(e,t){return!t.cameraUnderground&&!e._frontFaceTranslucent}function HSt(e,t,n){return e._frontFaceTranslucent&&!e._backFaceTranslucent&&!n.depthTestAgainstTerrain&&t.mode!==se.SCENE2D&&t.context.depthTexture}function KSt(e){let t=0;return e._frontFaceTranslucent&&++t,e._requiresManualDepthTest&&++t,t}function JSt(e,t){e._derivedCommandsLength=qee(e,t,!1,!1,e._derivedCommandTypes),e._derivedBlendCommandsLength=qee(e,t,!0,!1,e._derivedBlendCommandTypes),e._derivedPickCommandsLength=qee(e,t,!1,!0,e._derivedPickCommandTypes);let n,i=0;for(n=0;n<e._derivedCommandsLength;++n)i|=1<<e._derivedCommandTypes[n];for(n=0;n<e._derivedBlendCommandsLength;++n)i|=1<<e._derivedBlendCommandTypes[n];for(n=0;n<e._derivedPickCommandsLength;++n)i|=1<<e._derivedPickCommandTypes[n];let o=0;for(n=0;n<tZ;++n)(i&1<<n)>0&&(e._derivedCommandTypesToUpdate[o++]=n);e._derivedCommandsToUpdateLength=o;let r=i!==e._derivedCommandKey;e._derivedCommandKey=i,e._derivedCommandsDirty=r,!l(e._derivedCommandPacks)&&e._frontFaceTranslucent&&(e._derivedCommandPacks=dZt())}function qee(e,t,n,i,o){let r=0,s=e._frontFaceTranslucent,a=e._backFaceTranslucent;if(!s)return r;let c=t.cameraUnderground,d=e._requiresManualDepthTest,u=i?hc.PICK_FRONT_FACE:d?hc.TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:hc.TRANSLUCENT_FRONT_FACE,m=i?hc.PICK_BACK_FACE:d?hc.TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:hc.TRANSLUCENT_BACK_FACE;return t.mode===se.SCENE2D?(o[r++]=hc.DEPTH_ONLY_FRONT_FACE,o[r++]=u,r):(a?(n||(o[r++]=hc.DEPTH_ONLY_FRONT_AND_BACK_FACE),c?(o[r++]=u,o[r++]=m):(o[r++]=m,o[r++]=u)):c?(n||(o[r++]=hc.DEPTH_ONLY_BACK_FACE),o[r++]=hc.OPAQUE_FRONT_FACE,o[r++]=m):(n||(o[r++]=hc.DEPTH_ONLY_FRONT_FACE),o[r++]=hc.OPAQUE_BACK_FACE,o[r++]=u),r)}function sh(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function DCe(e,t){return e.indexOf(t)>-1}function jSt(e,t){sh(e.defines,"TRANSLUCENT"),sh(t.defines,"TRANSLUCENT")}function QSt(e,t){sh(e.defines,"GROUND_ATMOSPHERE"),sh(t.defines,"GROUND_ATMOSPHERE"),sh(e.defines,"FOG"),sh(t.defines,"FOG"),sh(e.defines,"TRANSLUCENT"),sh(t.defines,"TRANSLUCENT")}function $ee(e,t){if(DCe(t.defines,"TILE_LIMIT_RECTANGLE")||DCe(t.defines,"ENABLE_CLIPPING_PLANES"))return;let n=`void main() { out_FragColor = vec4(1.0); } `;t.sources=[n]}function ete(e,t){let n=t.sources,i=n.length;for(let r=0;r<i;++r)n[r]=ze.replaceMain(n[r],"czm_globe_translucency_main");n.push(` uniform sampler2D u_classificationTexture; void main() { vec2 st = gl_FragCoord.xy / czm_viewport.zw; #ifdef MANUAL_DEPTH_TEST float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, st)); if (logDepthOrDepth != 0.0) { vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); float depthEC = eyeCoordinate.z / eyeCoordinate.w; if (v_positionEC.z < depthEC) { discard; } } #endif czm_globe_translucency_main(); vec4 classificationColor = texture(u_classificationTexture, st); if (classificationColor.a > 0.0) { // Reverse premultiplication process to get the correct composited result of the classification primitives classificationColor.rgb /= classificationColor.a; } out_FragColor = classificationColor * vec4(classificationColor.aaa, 1.0) + out_FragColor * (1.0 - classificationColor.a); } `)}function QCe(e,t){ete(e,t),sh(e.defines,"GROUND_ATMOSPHERE"),sh(t.defines,"GROUND_ATMOSPHERE"),sh(e.defines,"FOG"),sh(t.defines,"FOG")}function qSt(e,t){ete(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function $St(e,t){QCe(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function OCe(e,t){let n=`uniform sampler2D u_classificationTexture; void main() { vec2 st = gl_FragCoord.xy / czm_viewport.zw; vec4 pickColor = texture(u_classificationTexture, st); if (pickColor == vec4(0.0)) { discard; } out_FragColor = pickColor; } `;t.sources=[n]}function eZt(e,t,n,i,o,r){if(!l(o))return t;if(!i&&l(n))return n;let s=e.shaderCache.getDerivedShaderProgram(t,r);if(!l(s)){let a=t._attributeLocations,c=t.vertexShaderSource.clone(),d=t.fragmentShaderSource.clone();c.defines=l(c.defines)?c.defines.slice(0):[],d.defines=l(d.defines)?d.defines.slice(0):[],o(c,d),s=e.shaderCache.createDerivedShaderProgram(t,r,{vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:a})}return s}function tZt(e){e.cull.face=ki.BACK,e.cull.enabled=!0}function nZt(e){e.cull.face=ki.FRONT,e.cull.enabled=!0}function iZt(e){e.cull.face=ki.BACK,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function oZt(e){e.cull.face=ki.FRONT,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function rZt(e){e.cull.enabled=!1,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function BCe(e){e.cull.face=ki.BACK,e.cull.enabled=!0,e.depthMask=!1,e.blending=tn.ALPHA_BLEND}function zCe(e){e.cull.face=ki.FRONT,e.cull.enabled=!0,e.depthMask=!1,e.blending=tn.ALPHA_BLEND}function sZt(e){e.cull.face=ki.BACK,e.cull.enabled=!0,e.blending.enabled=!1}function aZt(e){e.cull.face=ki.FRONT,e.cull.enabled=!0,e.blending.enabled=!1}function cZt(e,t,n,i,o){if(!l(i))return e;if(!n&&l(t))return t;let r=o[e.id];if(!l(r)){let s=Oe.getState(e);i(s),r=Oe.fromCache(s),o[e.id]=r}return r}function RR(e){return{u_classificationTexture:function(){return e._globeTranslucencyFramebuffer.classificationTexture}}}function lZt(e,t,n,i,o){return l(o)?!i&&l(n)?n:It(t,o(e),!1):t}function If(e){this.pass=e.pass,this.pickOnly=e.pickOnly,this.getShaderProgramFunction=e.getShaderProgramFunction,this.getRenderStateFunction=e.getRenderStateFunction,this.getUniformMapFunction=e.getUniformMapFunction,this.renderStateCache={}}function dZt(){return[new If({pass:We.GLOBE,pickOnly:!1,getShaderProgramFunction:jSt,getRenderStateFunction:tZt,getUniformMapFunction:void 0}),new If({pass:We.GLOBE,pickOnly:!1,getShaderProgramFunction:QSt,getRenderStateFunction:nZt,getUniformMapFunction:void 0}),new If({pass:We.GLOBE,pickOnly:!1,getShaderProgramFunction:$ee,getRenderStateFunction:iZt,getUniformMapFunction:void 0}),new If({pass:We.GLOBE,pickOnly:!1,getShaderProgramFunction:$ee,getRenderStateFunction:oZt,getUniformMapFunction:void 0}),new If({pass:We.GLOBE,pickOnly:!1,getShaderProgramFunction:$ee,getRenderStateFunction:rZt,getUniformMapFunction:void 0}),new If({pass:We.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:ete,getRenderStateFunction:BCe,getUniformMapFunction:RR}),new If({pass:We.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:QCe,getRenderStateFunction:zCe,getUniformMapFunction:RR}),new If({pass:We.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:qSt,getRenderStateFunction:BCe,getUniformMapFunction:RR}),new If({pass:We.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:$St,getRenderStateFunction:zCe,getUniformMapFunction:RR}),new If({pass:We.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:OCe,getRenderStateFunction:sZt,getUniformMapFunction:RR}),new If({pass:We.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:OCe,getRenderStateFunction:aZt,getUniformMapFunction:RR})]}var HCe=new Array(tZ),KCe=new Array(tZ);nZ.prototype.updateDerivedCommands=function(e,t){let n=this._derivedCommandTypesToUpdate,i=this._derivedCommandsToUpdateLength;if(i!==0){for(let o=0;o<i;++o)KCe[o]=this._derivedCommandPacks[n[o]],HCe[o]=jCe[n[o]];uZt(this,e,i,n,HCe,KCe,t)}};function uZt(e,t,n,i,o,r,s){let a=t.derivedCommands.globeTranslucency,c=e._derivedCommandsDirty;if(t.dirty||!l(a)||c){t.dirty=!1,l(a)||(a={},t.derivedCommands.globeTranslucency=a);let d=s.frameNumber,u=a.uniformMapDirtyFrame??0,m=a.shaderProgramDirtyFrame??0,p=a.renderStateDirtyFrame??0,b=a.uniformMap!==t.uniformMap,f=a.shaderProgramId!==t.shaderProgram.id,y=a.renderStateId!==t.renderState.id;b&&(a.uniformMapDirtyFrame=d),f&&(a.shaderProgramDirtyFrame=d),y&&(a.renderStateDirtyFrame=d),a.uniformMap=t.uniformMap,a.shaderProgramId=t.shaderProgram.id,a.renderStateId=t.renderState.id;for(let _=0;_<n;++_){let S=r[_],Z=i[_],V=o[_],C=a[V],G,E,v;l(C)?(G=C.uniformMap,E=C.shaderProgram,v=C.renderState):(G=void 0,E=void 0,v=void 0),C=ot.shallowClone(t,C),a[V]=C;let F=C.derivedCommands.uniformMapDirtyFrame??0,P=C.derivedCommands.shaderProgramDirtyFrame??0,N=C.derivedCommands.renderStateDirtyFrame??0,g=b||F<u,R=f||P<m,A=y||N<p;g&&(C.derivedCommands.uniformMapDirtyFrame=d),R&&(C.derivedCommands.shaderProgramDirtyFrame=d),A&&(C.derivedCommands.renderStateDirtyFrame=d),C.derivedCommands.type=Z,C.pass=S.pass,C.pickOnly=S.pickOnly,C.uniformMap=lZt(e,t.uniformMap,G,g,S.getUniformMapFunction),C.shaderProgram=eZt(s.context,t.shaderProgram,E,R,S.getShaderProgramFunction,V),C.renderState=cZt(t.renderState,v,A,S.getRenderStateFunction,S.renderStateCache)}}}nZ.prototype.pushDerivedCommands=function(e,t,n){let i=n.passes.pick||n.passes.pickVoxel;if(i&&t)return;let o=this._derivedCommandTypes,r=this._derivedCommandsLength;if(i?(o=this._derivedPickCommandTypes,r=this._derivedPickCommandsLength):t&&(o=this._derivedBlendCommandTypes,r=this._derivedBlendCommandsLength),r===0){n.commandList.push(e);return}let s=e.derivedCommands.globeTranslucency;for(let a=0;a<r;++a){let c=jCe[o[a]];n.commandList.push(s[c])}};function qCe(e,t,n,i,o,r){for(let s=0;s<t;++s){let a=e[s],c=a.derivedCommands.type;(!l(r)||r.indexOf(c)>-1)&&n(a,i,o)}}function JCe(e,t,n,i,o){for(let r=0;r<t;++r)n(e[r],i,o)}var mZt=[hc.OPAQUE_FRONT_FACE,hc.OPAQUE_BACK_FACE],hZt=[hc.DEPTH_ONLY_FRONT_FACE,hc.DEPTH_ONLY_BACK_FACE,hc.DEPTH_ONLY_FRONT_AND_BACK_FACE];nZ.prototype.executeGlobeCommands=function(e,t,n,i,o){let r=i.context,s=e.commands[We.GLOBE],a=e.indices[We.GLOBE];a!==0&&(this._globeTranslucencyFramebuffer=n,n.clearClassification(r,o),qCe(s,a,t,i,o,mZt))};nZ.prototype.executeGlobeClassificationCommands=function(e,t,n,i,o){let{context:r}=i,{uniformState:s}=r,a=e.commands[We.GLOBE],c=e.indices[We.GLOBE],d=e.commands[We.TERRAIN_CLASSIFICATION],u=e.indices[We.TERRAIN_CLASSIFICATION];if(c===0||u===0)return;let m=this._frontFaceTranslucent,p=this._backFaceTranslucent;if((!m||!p)&&JCe(d,u,t,i,o),!m&&!p)return;this._globeTranslucencyFramebuffer=n;let b=s.globeDepthTexture,f=o.framebuffer;if(o.framebuffer=n.classificationFramebuffer,qCe(a,c,t,i,o,hZt),r.depthTexture){let y=n.packDepth(r,o);s.globeDepthTexture=y}JCe(d,u,t,i,o),s.globeDepthTexture=b,o.framebuffer=f};var mw=nZ;var e6i=x(T(),1);var P7i=x(T(),1),Dd=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(colorTexture, v_textureCoordinates); } `;function n0(){this._numSamples=1,this.previousFramebuffer=void 0,this._previousFramebuffer=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this._fbo=new ai({depthStencil:!0,createDepthAttachments:!1}),this._fboClassified=new ai({depthStencil:!0,createDepthAttachments:!1}),this._rsUnclassified=void 0,this._rsClassified=void 0,this._unclassifiedCommand=void 0,this._classifiedCommand=void 0,this._translucentCommand=void 0,this._clearColorCommand=new mi({color:new U(0,0,0,0),owner:this}),this._clearCommand=new mi({color:new U(0,0,0,0),depth:1,stencil:0});let e=this;this._uniformMap={colorTexture:function(){return e._fbo.getColorTexture()},depthTexture:function(){return e._depthStencilTexture},classifiedTexture:function(){return e._fboClassified.getColorTexture()}}}Object.defineProperties(n0.prototype,{unclassifiedCommand:{get:function(){return this._unclassifiedCommand}}});n0.isTranslucencySupported=function(e){return e.depthTexture&&e.fragmentDepth};var fZt={depthMask:!1,stencilTest:{enabled:!0,frontFunction:ti.EQUAL,frontOperation:{fail:Wt.KEEP,zFail:Wt.KEEP,zPass:Wt.KEEP},backFunction:ti.NEVER,reference:0,mask:Kt.CLASSIFICATION_MASK},blending:tn.ALPHA_BLEND},pZt={depthMask:!1,stencilTest:{enabled:!0,frontFunction:ti.NOT_EQUAL,frontOperation:{fail:Wt.KEEP,zFail:Wt.KEEP,zPass:Wt.KEEP},backFunction:ti.NEVER,reference:0,mask:Kt.CLASSIFICATION_MASK},blending:tn.ALPHA_BLEND},bZt={depthMask:!0,depthTest:{enabled:!0},stencilTest:Kt.setCesium3DTileBit(),stencilMask:Kt.CESIUM_3D_TILE_MASK,blending:tn.ALPHA_BLEND},gZt=`uniform sampler2D colorTexture; uniform sampler2D depthTexture; uniform sampler2D classifiedTexture; in vec2 v_textureCoordinates; void main() { vec4 color = texture(colorTexture, v_textureCoordinates); if (color.a == 0.0) { discard; } bool isClassified = all(equal(texture(classifiedTexture, v_textureCoordinates), vec4(0.0))); #ifdef UNCLASSIFIED vec4 highlightColor = czm_invertClassificationColor; if (isClassified) { discard; } #else vec4 highlightColor = vec4(1.0); if (!isClassified) { discard; } #endif out_FragColor = color * highlightColor; gl_FragDepth = texture(depthTexture, v_textureCoordinates).r; } `,yZt=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; void main() { vec4 color = texture(colorTexture, v_textureCoordinates); if (color.a == 0.0) { discard; } #ifdef UNCLASSIFIED out_FragColor = color * czm_invertClassificationColor; #else out_FragColor = color; #endif } `;n0.prototype.update=function(e,t,n){let i=this._fbo.getColorTexture(),o=this.previousFramebuffer!==this._previousFramebuffer;this._previousFramebuffer=this.previousFramebuffer;let r=this._numSamples!==t,s=e.drawingBufferWidth,a=e.drawingBufferHeight,c=!l(i)||i.width!==s||i.height!==a;if((c||o||r)&&(this._numSamples=t,this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy(),l(this._previousFramebuffer)||(this._depthStencilTexture=new Ct({context:e,width:s,height:a,pixelFormat:Be.DEPTH_STENCIL,pixelDatatype:Me.UNSIGNED_INT_24_8}),t>1&&(this._depthStencilRenderbuffer=new gu({context:e,width:s,height:a,format:Ml.DEPTH24_STENCIL8,numSamples:t})))),!l(this._fbo.framebuffer)||c||o||r){this._fbo.destroy(),this._fboClassified.destroy();let d,u;l(this._previousFramebuffer)?(d=n.getDepthStencilTexture(),u=n.getDepthStencilRenderbuffer()):(d=this._depthStencilTexture,u=this._depthStencilRenderbuffer),this._fbo.setDepthStencilTexture(d),l(u)&&this._fbo.setDepthStencilRenderbuffer(u),this._fbo.update(e,s,a,t),l(this._previousFramebuffer)||(this._fboClassified.setDepthStencilTexture(d),this._fboClassified.update(e,s,a))}if(l(this._rsUnclassified)||(this._rsUnclassified=Oe.fromCache(fZt),this._rsClassified=Oe.fromCache(pZt),this._rsDefault=Oe.fromCache(bZt)),!l(this._unclassifiedCommand)||o||r){l(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy());let d=l(this._previousFramebuffer)?yZt:gZt,u=new ze({defines:["UNCLASSIFIED"],sources:[d]}),m=new ze({sources:[d]});this._unclassifiedCommand=e.createViewportQuadCommand(u,{renderState:l(this._previousFramebuffer)?this._rsUnclassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),this._classifiedCommand=e.createViewportQuadCommand(m,{renderState:l(this._previousFramebuffer)?this._rsClassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),l(this._translucentCommand)&&(this._translucentCommand.shaderProgram=this._translucentCommand.shaderProgram&&this._translucentCommand.shaderProgram.destroy()),l(this._previousFramebuffer)||(this._translucentCommand=e.createViewportQuadCommand(Dd,{renderState:this._rsUnclassified,uniformMap:this._uniformMap,owner:this}))}};n0.prototype.prepareTextures=function(e,t){this._fbo._numSamples>1&&this._fbo.prepareTextures(e,t)};n0.prototype.clear=function(e,t){l(this._previousFramebuffer)?this._fbo.clear(e,this._clearColorCommand,t):(this._fbo.clear(e,this._clearCommand,t),this._fboClassified.clear(e,this._clearCommand,t))};n0.prototype.executeClassified=function(e,t){if(!l(this._previousFramebuffer)){let n=t.framebuffer;this.prepareTextures(e,!0),t.framebuffer=this._fboClassified.framebuffer,this._translucentCommand.execute(e,t),t.framebuffer=n}this._classifiedCommand.execute(e,t)};n0.prototype.executeUnclassified=function(e,t){this._unclassifiedCommand.execute(e,t)};n0.prototype.isDestroyed=function(){return!1};n0.prototype.destroy=function(){return this._fbo.destroy(),this._fboClassified.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy(),l(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy()),me(this)};var GR=n0;var r6i=x(T(),1);function Z3(e){this._total=e,this.usedThisFrame=0,this.stolenFromMeThisFrame=0,this.starvedThisFrame=!1,this.starvedLastFrame=!1}Object.defineProperties(Z3.prototype,{total:{get:function(){return this._total}}});function Px(e){let t=new Array(Rc.NUMBER_OF_JOB_TYPES);t[Rc.TEXTURE]=new Z3(l(e)?e[Rc.TEXTURE]:10),t[Rc.PROGRAM]=new Z3(l(e)?e[Rc.PROGRAM]:10),t[Rc.BUFFER]=new Z3(l(e)?e[Rc.BUFFER]:30);let n=t.length,i,o=0;for(i=0;i<n;++i)o+=t[i].total;let r=new Array(n);for(i=0;i<n;++i)r[i]=!1;this._totalBudget=o,this._totalUsedThisFrame=0,this._budgets=t,this._executedThisFrame=r}Px.getTimestamp=Tn;Object.defineProperties(Px.prototype,{totalBudget:{get:function(){return this._totalBudget}}});Px.prototype.disableThisFrame=function(){this._totalUsedThisFrame=this._totalBudget};Px.prototype.resetBudgets=function(){let e=this._budgets,t=e.length;for(let n=0;n<t;++n){let i=e[n];i.starvedLastFrame=i.starvedThisFrame,i.starvedThisFrame=!1,i.usedThisFrame=0,i.stolenFromMeThisFrame=0}this._totalUsedThisFrame=0};Px.prototype.execute=function(e,t){let n=this._budgets,i=n[t],o=this._executedThisFrame[t];if(this._totalUsedThisFrame>=this._totalBudget&&o)return i.starvedThisFrame=!0,!1;let r;if(i.usedThisFrame+i.stolenFromMeThisFrame>=i.total){let c=n.length,d;for(d=0;d<c&&(r=n[d],!(r.usedThisFrame+r.stolenFromMeThisFrame<r.total&&!r.starvedLastFrame));++d);if(d===c&&o)return!1;o&&(i.starvedThisFrame=!0)}let s=Px.getTimestamp();e.execute();let a=Px.getTimestamp()-s;return this._totalUsedThisFrame+=a,r?r.stolenFromMeThisFrame+=a:i.usedThisFrame+=a,this._executedThisFrame[t]=!0,!0};var hw=Px;var u6i=x(T(),1);function V3(e){e=e??B.EMPTY_OBJECT;let t=wn(e.container);this._container=t;let n=document.createElement("div");n.className="cesium-performanceDisplay";let i=document.createElement("div");i.className="cesium-performanceDisplay-fps",this._fpsText=document.createTextNode(""),i.appendChild(this._fpsText);let o=document.createElement("div");o.className="cesium-performanceDisplay-ms",this._msText=document.createTextNode(""),o.appendChild(this._msText),n.appendChild(o),n.appendChild(i),this._container.appendChild(n),this._lastFpsSampleTime=Tn(),this._lastMsSampleTime=Tn(),this._fpsFrameCount=0,this._msFrameCount=0,this._throttled=!1;let r=document.createElement("div");r.className="cesium-performanceDisplay-throttled",this._throttledText=document.createTextNode(""),r.appendChild(this._throttledText),n.appendChild(r)}Object.defineProperties(V3.prototype,{throttled:{get:function(){return this._throttled},set:function(e){this._throttled!==e&&(e?this._throttledText.nodeValue="(throttled)":this._throttledText.nodeValue="",this._throttled=e)}}});V3.prototype.update=function(e){let t=Tn(),n=e??!0;this._fpsFrameCount++;let i=t-this._lastFpsSampleTime;if(i>1e3){let r="N/A";n&&(r=this._fpsFrameCount*1e3/i|0),this._fpsText.nodeValue=`${r} FPS`,this._lastFpsSampleTime=t,this._fpsFrameCount=0}this._msFrameCount++;let o=t-this._lastMsSampleTime;if(o>200){let r="N/A";n&&(r=(o/this._msFrameCount).toFixed(2)),this._msText.nodeValue=`${r} MS`,this._lastMsSampleTime=t,this._msFrameCount=0}};V3.prototype.destroy=function(){return me(this)};var yg=V3;var Dto=x(T(),1);var V6i=x(T(),1);var fc={};fc.decodeRawMetadataValue=function(e,t,n){switch(e){case Pt.INT8:return t.getInt8(n);case Pt.UINT8:return t.getUint8(n);case Pt.INT16:return t.getInt16(n,!0);case Pt.UINT16:return t.getUint16(n,!0);case Pt.INT32:return t.getInt32(n,!0);case Pt.UINT32:return t.getUint32(n,!0);case Pt.INT64:return t.getBigInt64(n,!0);case Pt.UINT64:return t.getBigUint64(n,!0);case Pt.FLOAT32:return t.getFloat32(n,!0);case Pt.FLOAT64:return t.getFloat64(n,!0)}throw new ae(`Invalid component type: ${e}`)};fc.decodeRawMetadataValueComponent=function(e,t,n){let i=e.componentType,o=fc.decodeRawMetadataValue(i,t,n);return e.normalized?Pt.normalize(o,i):o};fc.decodeRawMetadataValueElement=function(e,t,n){let i=e.componentType,o=Pt.getSizeInBytes(i),r=e.type,s=yt.getComponentCount(r),a=o*s;if(s>1){let u=Array(s);for(let m=0;m<s;m++){let p=n*a+m*o,b=fc.decodeRawMetadataValueComponent(e,t,p);u[m]=b}return u}let c=n*a;return fc.decodeRawMetadataValueComponent(e,t,c)};fc.decodeRawMetadataValues=function(e,t){let n=new DataView(t.buffer,t.byteOffset,t.byteLength);if(e.isArray){let o=e.arrayLength,r=Array(o);for(let s=0;s<o;s++){let a=fc.decodeRawMetadataValueElement(e,n,s);r[s]=a}return r}return fc.decodeRawMetadataValueElement(e,n,0)};fc.convertToObjectType=function(e,t){if(!l(t)||e===yt.SCALAR||e===yt.STRING||e===yt.BOOLEAN||e===yt.ENUM)return t;let n=t.map(i=>Number(i));switch(e){case yt.VEC2:return M.unpack(n,0,new M);case yt.VEC3:return h.unpack(n,0,new h);case yt.VEC4:return ce.unpack(n,0,new ce);case yt.MAT2:return ji.unpack(n,0,new ji);case yt.MAT3:return q.unpack(n,0,new q);case yt.MAT4:return I.unpack(n,0,new I)}throw new ae(`Invalid metadata object type: ${e}`)};fc.convertFromObjectType=function(e,t){if(!l(t)||e===yt.SCALAR||e===yt.STRING||e===yt.BOOLEAN||e===yt.ENUM)return t;switch(e){case yt.VEC2:return M.pack(t,Array(2));case yt.VEC3:return h.pack(t,Array(3));case yt.VEC4:return ce.pack(t,Array(4));case yt.MAT2:return ji.pack(t,Array(4));case yt.MAT3:return q.pack(t,Array(9));case yt.MAT4:return I.pack(t,Array(16))}throw new ae(`Invalid metadata object type: ${e}`)};fc.decodeMetadataValues=function(e,t,n){let i=fc.decodeRawMetadataValues(e,n);if(t.hasValueTransform){let r=fc.convertFromObjectType(e.type,t.offset),s=fc.convertFromObjectType(e.type,t.scale);i=hp.valueTransformInPlace(i,r,s,Pt.applyValueTransform)}if(e.isArray){let r=e.arrayLength,s=Array(r);for(let a=0;a<r;a++){let c=i[a],d=fc.convertToObjectType(e.type,c);s[a]=d}return s}return fc.convertToObjectType(e.type,i)};var fw=Object.freeze(fc);var W6i=x(T(),1);function iZ(){this._framebuffer=new ai,this._textureToCopy=void 0,this._copyDepthCommand=void 0}Object.defineProperties(iZ.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function xZt(e,t,n){let{width:i,height:o}=n;e._framebuffer.update(t,i,o)}function TZt(e,t,n){l(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(`uniform highp sampler2D colorTexture; in vec2 v_textureCoordinates; void main() { vec4 globeDepthPacked = texture(czm_globeDepthTexture, v_textureCoordinates); float globeDepth = czm_unpackDepth(globeDepthPacked); float depth = texture(colorTexture, v_textureCoordinates).r; out_FragColor = czm_branchFreeTernary(globeDepth <= 0.0 || globeDepth >= 1.0 || depth < globeDepth && depth > 0.0 && depth < 1.0, czm_packDepth(depth), globeDepthPacked); } `,{renderState:Oe.fromCache(),uniformMap:{colorTexture:function(){return e._textureToCopy}},owner:e})),e._textureToCopy=n,e._copyDepthCommand.framebuffer=e.framebuffer}iZ.prototype.update=function(e,t){xZt(this,e,t),TZt(this,e,t)};var _Zt=new ce,SZt=new ce(1,1/255,1/65025,1/16581375);iZ.prototype.getDepth=function(e,t,n){if(!l(this.framebuffer))return;let i=e.readPixels({x:t,y:n,width:1,height:1,framebuffer:this.framebuffer}),o=ce.unpack(i,0,_Zt);return ce.divideByScalar(o,255,o),ce.dot(o,SZt)};iZ.prototype.executeCopyDepth=function(e,t){this._copyDepthCommand.execute(e,t)};iZ.prototype.isDestroyed=function(){return!1};iZ.prototype.destroy=function(){return this._framebuffer.destroy(),l(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=l(this._copyDepthCommand.shaderProgram)&&this._copyDepthCommand.shaderProgram.destroy()),me(this)};var pw=iZ;var bto=x(T(),1);var M6i=x(T(),1);function Xx(){this._framebufferManager=new ai({colorAttachmentsLength:3,createColorAttachments:!0,depthStencil:!0,supportsDepthTexture:!0,color:!0}),this._framebuffer=void 0,this._colorTexture=void 0,this._idTexture=void 0,this._depthTexture=void 0,this._depthStencilTexture=void 0,this._clearCommand=new mi({color:new U(0,0,0,0),depth:1,stencil:0,owner:this})}Object.defineProperties(Xx.prototype,{framebuffer:{get:function(){return this._framebuffer}},colorTexture:{get:function(){return this._colorTexture}},idTexture:{get:function(){return this._idTexture}},depthTexture:{get:function(){return this._depthTexture}},depthStencilTexture:{get:function(){return this._depthStencilTexture}}});Xx.prototype.update=function(e,t,n,i,o){let r=t.width,s=t.height,a=n?e.halfFloatingPointTexture?Me.HALF_FLOAT:Me.FLOAT:Me.UNSIGNED_BYTE,c=this._framebufferManager.update(e,r,s,1,a,Be.RGBA);return this._framebufferManager.framebuffer&&(this._framebuffer=this._framebufferManager.framebuffer,this._colorTexture=l(i)?i:this._framebufferManager.getColorTexture(0),this._idTexture=this._framebufferManager.getColorTexture(1),this._depthTexture=this._framebufferManager.getColorTexture(2),this._depthStencilTexture=l(o)?o:this._framebufferManager.getDepthStencilTexture()),c};Xx.prototype.clear=function(e,t,n){this.getClearCommand(n).execute(e,t)};Xx.prototype.getClearCommand=function(e){return this._clearCommand.framebuffer=this._framebuffer,l(e)&&U.clone(e,this._clearCommand.color),this._clearCommand};Xx.prototype.getFramebuffer=function(e,t,n,i){return this.update(e,t,!1,n,i),this._framebuffer};Xx.prototype.isDestroyed=function(){return!1};Xx.prototype.destroy=function(){return this._framebufferManager=this._framebufferManager&&this._framebufferManager.destroy(),this._clearCommand=void 0,me(this)};var bw=Xx;var J6i=x(T(),1);function oZ(){this._framebufferManager=new ai({colorAttachmentsLength:1,createColorAttachments:!0,depthStencil:!0,supportsDepthTexture:!0,color:!0}),this._framebuffer=void 0,this._idTexture=void 0,this._depthStencilTexture=void 0,this._clearCommand=new mi({color:new U(0,0,0,0),depth:1,stencil:0,owner:this})}Object.defineProperties(oZ.prototype,{framebuffer:{get:function(){return this._framebuffer}},idTexture:{get:function(){return this._idTexture}},depthStencilTexture:{get:function(){return this._depthStencilTexture}}});oZ.prototype.update=function(e,t,n){let i=t.width,o=t.height,r=e.colorBufferFloat?Me.FLOAT:Me.UNSIGNED_BYTE,s=this._framebufferManager.update(e,i,o,1,r,Be.RED);return this._framebufferManager.framebuffer&&(this._framebuffer=this._framebufferManager.framebuffer,this._idTexture=this._framebufferManager.getColorTexture(0),this._depthStencilTexture=this._framebufferManager.getDepthStencilTexture()),s};oZ.prototype.getClearCommand=function(e){return this._clearCommand.framebuffer=this._framebuffer,l(e)&&U.clone(e,this._clearCommand.color),this._clearCommand};oZ.prototype.releaseResources=function(){l(this._framebuffer)&&(this._framebufferManager.destroy(),this._framebuffer=void 0,this._idTexture=void 0,this._depthStencilTexture=void 0)};oZ.prototype.isDestroyed=function(){return!1};oZ.prototype.destroy=function(){return this._framebufferManager=this._framebufferManager&&this._framebufferManager.destroy(),this._clearCommand=void 0,me(this)};var gw=oZ;var q6i=x(T(),1);function ZZt(e,t){this.near=e??0,this.far=t??0;let n=We.NUMBER_OF_PASSES,i=new Array(n),o=new Array(n);for(let r=0;r<n;++r)i[r]=[],o[r]=0;this.commands=i,this.indices=o}var yw=ZZt;var gqi=x(T(),1);var eqi=x(T(),1),Nx=`uniform highp sampler2D u_depthTexture; in vec2 v_textureCoordinates; void main() { out_FragColor = czm_packDepth(texture(u_depthTexture, v_textureCoordinates).r); } `;function i0(){this._picking=!1,this._snapping=!1,this._numSamples=1,this._tempCopyDepthTexture=void 0,this._pickColorFramebuffer=new ai({depthStencil:!0,supportsDepthTexture:!0}),this._snapColorFramebuffer=new ai({depthStencil:!0,supportsDepthTexture:!0,pixelDatatype:Me.FLOAT,pixelFormat:Be.RGBA}),this._outputFramebuffer=new ai({depthStencil:!0,supportsDepthTexture:!0}),this._copyDepthFramebuffer=new ai,this._tempCopyDepthFramebuffer=new ai,this._updateDepthFramebuffer=new ai({createColorAttachments:!1,createDepthAttachments:!1,depthStencil:!0}),this._clearGlobeColorCommand=void 0,this._copyColorCommand=void 0,this._copyDepthCommand=void 0,this._tempCopyDepthCommand=void 0,this._updateDepthCommand=void 0,this._viewport=new $e,this._rs=void 0,this._rsBlend=void 0,this._rsUpdate=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0,this._clearGlobeDepth=void 0}Object.defineProperties(i0.prototype,{colorFramebufferManager:{get:function(){return this._snapping?this._snapColorFramebuffer:this._picking?this._pickColorFramebuffer:this._outputFramebuffer}},framebuffer:{get:function(){return this.colorFramebufferManager.framebuffer}},depthStencilTexture:{get:function(){return this.colorFramebufferManager.getDepthStencilTexture()}},picking:{get:function(){return this._picking},set:function(e){this._picking=e}},snapping:{get:function(){return this._snapping},set:function(e){this._snapping=e}}});function $Ce(e,t,n,i,o){let r=e._viewport;r.width=n,r.height=i;let s=!$e.equals(r,o.viewport),a=s!==e._useScissorTest;e._useScissorTest=s,$e.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=$e.clone(o.viewport,e._scissorRectangle),a=!0),(!l(e._rs)||!$e.equals(r,e._rs.viewport)||a)&&(e._rs=Oe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}}),e._rsBlend=Oe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:tn.ALPHA_BLEND}),e._rsUpdate=Oe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:ti.EQUAL,frontOperation:{fail:Wt.KEEP,zFail:Wt.KEEP,zPass:Wt.KEEP},backFunction:ti.NEVER,reference:Kt.CESIUM_3D_TILE_MASK,mask:Kt.CESIUM_3D_TILE_MASK}})),l(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(Nx,{uniformMap:{u_depthTexture:function(){return e.colorFramebufferManager.getDepthStencilTexture()}},owner:e})),e._copyDepthCommand.framebuffer=e._copyDepthFramebuffer.framebuffer,e._copyDepthCommand.renderState=e._rs,l(e._copyColorCommand)||(e._copyColorCommand=t.createViewportQuadCommand(Dd,{uniformMap:{colorTexture:function(){return e.colorFramebufferManager.getColorTexture()}},owner:e})),e._copyColorCommand.renderState=e._rs,l(e._tempCopyDepthCommand)||(e._tempCopyDepthCommand=t.createViewportQuadCommand(Nx,{uniformMap:{u_depthTexture:function(){return e._tempCopyDepthTexture}},owner:e})),e._tempCopyDepthCommand.framebuffer=e._tempCopyDepthFramebuffer.framebuffer,e._tempCopyDepthCommand.renderState=e._rs,l(e._updateDepthCommand)||(e._updateDepthCommand=t.createViewportQuadCommand(Dd,{uniformMap:{colorTexture:function(){return e._tempCopyDepthFramebuffer.getColorTexture()}},owner:e})),e._updateDepthCommand.framebuffer=e._updateDepthFramebuffer.framebuffer,e._updateDepthCommand.renderState=e._rsUpdate,l(e._clearGlobeColorCommand)||(e._clearGlobeColorCommand=new mi({color:new U(0,0,0,0),stencil:0,owner:e})),e._clearGlobeColorCommand.framebuffer=e.framebuffer}i0.prototype.update=function(e,t,n,i,o,r){let{width:s,height:a}=n,c=o?e.halfFloatingPointTexture?Me.HALF_FLOAT:Me.FLOAT:Me.UNSIGNED_BYTE;this._numSamples=i,this.snapping?this._snapColorFramebuffer.update(e,s,a):this.picking?this._pickColorFramebuffer.update(e,s,a):this._outputFramebuffer.update(e,s,a,i,c),this._copyDepthFramebuffer.update(e,s,a),$Ce(this,e,s,a,t),e.uniformState.globeDepthTexture=void 0,this._clearGlobeDepth=r};i0.prototype.prepareColorTextures=function(e,t){!this.picking&&this._numSamples>1&&this._outputFramebuffer.prepareTextures(e,t)};i0.prototype.executeCopyDepth=function(e,t){l(this._copyDepthCommand)&&(this.prepareColorTextures(e),this._copyDepthCommand.execute(e,t),e.uniformState.globeDepthTexture=this._copyDepthFramebuffer.getColorTexture())};i0.prototype.executeUpdateDepth=function(e,t,n){let i=l(n)?n:t.framebuffer.depthStencilTexture;if(!this._clearGlobeDepth&&i===this.colorFramebufferManager.getDepthStencilTexture()){l(this._copyDepthCommand)&&this._copyDepthCommand.execute(e,t);return}if(!l(this._updateDepthCommand))return;let o=this._updateDepthFramebuffer;if(!l(o.framebuffer)||o.getDepthStencilTexture()!==i||o.getColorTexture()!==this._copyDepthFramebuffer.getColorTexture()){let r=this._copyDepthFramebuffer.getColorTexture(),{width:s,height:a}=r;this._tempCopyDepthFramebuffer.destroy(),this._tempCopyDepthFramebuffer.update(e,s,a),o.setColorTexture(r,0),o.setDepthStencilTexture(i),o.update(e,s,a),$Ce(this,e,s,a,t)}this._tempCopyDepthTexture=i,this._tempCopyDepthCommand.execute(e,t),this._updateDepthCommand.execute(e,t)};i0.prototype.executeCopyColor=function(e,t){l(this._copyColorCommand)&&this._copyColorCommand.execute(e,t)};i0.prototype.clear=function(e,t,n){let i=this._clearGlobeColorCommand;l(i)&&(U.clone(n,i.color),this.colorFramebufferManager.clear(e,i,t))};i0.prototype.isDestroyed=function(){return!1};i0.prototype.destroy=function(){return this._pickColorFramebuffer.destroy(),this._snapColorFramebuffer.destroy(),this._outputFramebuffer.destroy(),this._copyDepthFramebuffer.destroy(),this._tempCopyDepthFramebuffer.destroy(),this._updateDepthFramebuffer.destroy(),l(this._copyColorCommand)&&(this._copyColorCommand.shaderProgram=this._copyColorCommand.shaderProgram.destroy()),l(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=this._copyDepthCommand.shaderProgram.destroy()),l(this._tempCopyDepthCommand)&&(this._tempCopyDepthCommand.shaderProgram=this._tempCopyDepthCommand.shaderProgram.destroy()),l(this._updateDepthCommand)&&(this._updateDepthCommand.shaderProgram=this._updateDepthCommand.shaderProgram.destroy()),me(this)};var xw=i0;var Aqi=x(T(),1);function rZ(){this._framebuffer=new ai({depthStencil:!0,supportsDepthTexture:!0}),this._packedDepthFramebuffer=new ai,this._renderState=void 0,this._packedDepthCommand=void 0,this._clearCommand=void 0,this._viewport=new $e,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0}Object.defineProperties(rZ.prototype,{classificationTexture:{get:function(){return this._framebuffer.getColorTexture()}},classificationFramebuffer:{get:function(){return this._framebuffer.framebuffer}},packedDepthFramebuffer:{get:function(){return this._packedDepthFramebuffer.framebuffer}},depthStencilTexture:{get:function(){return this._framebuffer.getDepthStencilTexture()}},depthStencilRenderbuffer:{get:function(){return this._framebuffer.getDepthStencilRenderbuffer()}},packedDepthTexture:{get:function(){return this._packedDepthFramebuffer.getColorTexture()}}});function VZt(e){e._framebuffer.destroy(),e._packedDepthFramebuffer.destroy()}function CZt(e,t,n,i,o){let r=o?t.halfFloatingPointTexture?Me.HALF_FLOAT:Me.FLOAT:Me.UNSIGNED_BYTE;e._framebuffer.update(t,n,i,1,r),e._packedDepthFramebuffer.update(t,n,i)}function RZt(e,t,n,i,o){e._viewport.width=n,e._viewport.height=i;let r=!$e.equals(e._viewport,o.viewport),s=r!==e._useScissorTest;e._useScissorTest=r,$e.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=$e.clone(o.viewport,e._scissorRectangle),s=!0),(!l(e._renderState)||!$e.equals(e._viewport,e._renderState.viewport)||s)&&(e._renderState=Oe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),l(e._packedDepthCommand)||(e._packedDepthCommand=t.createViewportQuadCommand(Nx,{uniformMap:{u_depthTexture:function(){return e.depthStencilTexture}},owner:e})),l(e._clearCommand)||(e._clearCommand=new mi({color:new U(0,0,0,0),depth:1,stencil:0,owner:e})),e._packedDepthCommand.framebuffer=e._packedDepthFramebuffer.framebuffer,e._packedDepthCommand.renderState=e._renderState,e._clearCommand.framebuffer=e.classificationFramebuffer,e._clearCommand.renderState=e._renderState}rZ.prototype.updateAndClear=function(e,t,n,i){let o=t.width,r=t.height;CZt(this,n,o,r,e),RZt(this,n,o,r,i),this._useHdr=e};rZ.prototype.clearClassification=function(e,t){this._clearCommand.execute(e,t)};rZ.prototype.packDepth=function(e,t){return this._packedDepthCommand.execute(e,t),this.packedDepthTexture};rZ.prototype.isDestroyed=function(){return!1};rZ.prototype.destroy=function(){return VZt(this),me(this)};var Tw=rZ;var Qqi=x(T(),1);var Lqi=x(T(),1),AR=`#ifdef MRT layout (location = 0) out vec4 out_FragData_0; layout (location = 1) out vec4 out_FragData_1; #else layout (location = 0) out vec4 out_FragColor; #endif uniform vec4 u_bgColor; uniform sampler2D u_depthTexture; in vec2 v_textureCoordinates; void main() { if (texture(u_depthTexture, v_textureCoordinates).r < 1.0) { #ifdef MRT out_FragData_0 = u_bgColor; out_FragData_1 = vec4(u_bgColor.a); #else out_FragColor = u_bgColor; #endif return; } discard; } `;var vqi=x(T(),1),_w=`/** * Compositing for Weighted Blended Order-Independent Transparency. See: * - http://jcgt.org/published/0002/02/09/ * - http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html */ uniform sampler2D u_opaque; uniform sampler2D u_accumulation; uniform sampler2D u_revealage; in vec2 v_textureCoordinates; void main() { vec4 opaque = texture(u_opaque, v_textureCoordinates); vec4 accum = texture(u_accumulation, v_textureCoordinates); float r = texture(u_revealage, v_textureCoordinates).r; #ifdef MRT vec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a); #else vec4 transparent = vec4(accum.rgb / clamp(accum.a, 1e-4, 5e4), r); #endif out_FragColor = (1.0 - transparent.a) * transparent + transparent.a * opaque; if (opaque != czm_backgroundColor) { out_FragColor.a = 1.0; } } `;function xg(e){this._numSamples=1,this._translucentMultipassSupport=!1,this._translucentMRTSupport=!1;let t=e.colorBufferFloat&&e.depthTexture&&e.floatBlend;this._translucentMRTSupport=e.drawBuffers&&t,this._translucentMultipassSupport=!this._translucentMRTSupport&&t,this._opaqueFBO=void 0,this._opaqueTexture=void 0,this._depthStencilTexture=void 0,this._accumulationTexture=void 0,this._translucentFBO=new ai({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._alphaFBO=new ai({createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._adjustTranslucentFBO=new ai({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1}),this._adjustAlphaFBO=new ai({createColorAttachments:!1}),this._opaqueClearCommand=new mi({color:new U(0,0,0,0),owner:this}),this._translucentMRTClearCommand=new mi({color:new U(0,0,0,1),owner:this}),this._translucentMultipassClearCommand=new mi({color:new U(0,0,0,0),owner:this}),this._alphaClearCommand=new mi({color:new U(1,1,1,1),owner:this}),this._translucentRenderStateCache={},this._alphaRenderStateCache={},this._compositeCommand=void 0,this._adjustTranslucentCommand=void 0,this._adjustAlphaCommand=void 0,this._viewport=new $e,this._rs=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHDR=!1}function eRe(e){e._accumulationTexture=e._accumulationTexture&&!e._accumulationTexture.isDestroyed()&&e._accumulationTexture.destroy(),e._revealageTexture=e._revealageTexture&&!e._revealageTexture.isDestroyed()&&e._revealageTexture.destroy()}function tte(e){e._translucentFBO.destroy(),e._alphaFBO.destroy(),e._adjustTranslucentFBO.destroy(),e._adjustAlphaFBO.destroy()}function tRe(e){eRe(e),tte(e)}function GZt(e,t,n,i){eRe(e),e._accumulationTexture=new Ct({context:t,width:n,height:i,pixelFormat:Be.RGBA,pixelDatatype:Me.FLOAT}),e._revealageTexture=new Ct({context:t,pixelFormat:Be.RGBA,pixelDatatype:Me.FLOAT,width:n,height:i,flipY:!1})}function AZt(e,t){tte(e);let n=ne.FRAMEBUFFER_COMPLETE,i=!0,{width:o,height:r}=e._accumulationTexture;if(e._translucentMRTSupport&&(e._translucentFBO.setColorTexture(e._accumulationTexture,0),e._translucentFBO.setColorTexture(e._revealageTexture,1),e._translucentFBO.setDepthStencilTexture(e._depthStencilTexture),e._translucentFBO.update(t,o,r),e._adjustTranslucentFBO.setColorTexture(e._accumulationTexture,0),e._adjustTranslucentFBO.setColorTexture(e._revealageTexture,1),e._adjustTranslucentFBO.update(t,o,r),(e._translucentFBO.status!==n||e._adjustTranslucentFBO.status!==n)&&(tte(e),e._translucentMRTSupport=!1)),!e._translucentMRTSupport){e._translucentFBO.setColorTexture(e._accumulationTexture),e._translucentFBO.setDepthStencilTexture(e._depthStencilTexture),e._translucentFBO.update(t,o,r),e._alphaFBO.setColorTexture(e._revealageTexture),e._alphaFBO.setDepthStencilTexture(e._depthStencilTexture),e._alphaFBO.update(t,o,r),e._adjustTranslucentFBO.setColorTexture(e._accumulationTexture),e._adjustTranslucentFBO.update(t,o,r),e._adjustAlphaFBO.setColorTexture(e._revealageTexture),e._adjustAlphaFBO.update(t,o,r);let s=e._translucentFBO.status===n,a=e._alphaFBO.status===n,c=e._adjustTranslucentFBO.status===n,d=e._adjustAlphaFBO.status===n;(!s||!a||!c||!d)&&(tRe(e),e._translucentMultipassSupport=!1,i=!1)}return i}xg.prototype.update=function(e,t,n,i,o){if(!this.isSupported())return;this._opaqueFBO=n,this._opaqueTexture=n.getColorTexture(0),this._depthStencilTexture=n.getDepthStencilTexture();let{width:r,height:s}=this._opaqueTexture,a=this._accumulationTexture,c=!l(a)||a.width!==r||a.height!==s||i!==this._useHDR,d=this._numSamples!==o;if((c||d)&&(this._numSamples=o,GZt(this,e,r,s)),(!l(this._translucentFBO.framebuffer)||c||d)&&!AZt(this,e))return;this._useHDR=i;let u=this,m,p;l(this._compositeCommand)||(m=new ze({sources:[_w]}),this._translucentMRTSupport&&m.defines.push("MRT"),p={u_opaque:function(){return u._opaqueTexture},u_accumulation:function(){return u._accumulationTexture},u_revealage:function(){return u._revealageTexture}},this._compositeCommand=e.createViewportQuadCommand(m,{uniformMap:p,owner:this})),l(this._adjustTranslucentCommand)||(this._translucentMRTSupport?(m=new ze({defines:["MRT"],sources:[AR]}),p={u_bgColor:function(){return u._translucentMRTClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(m,{uniformMap:p,owner:this})):this._translucentMultipassSupport&&(m=new ze({sources:[AR]}),p={u_bgColor:function(){return u._translucentMultipassClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(m,{uniformMap:p,owner:this}),p={u_bgColor:function(){return u._alphaClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustAlphaCommand=e.createViewportQuadCommand(m,{uniformMap:p,owner:this}))),this._viewport.width=r,this._viewport.height=s;let b=!$e.equals(this._viewport,t.viewport),f=b!==this._useScissorTest;this._useScissorTest=b,$e.equals(this._scissorRectangle,t.viewport)||(this._scissorRectangle=$e.clone(t.viewport,this._scissorRectangle),f=!0),(!l(this._rs)||!$e.equals(this._viewport,this._rs.viewport)||f)&&(this._rs=Oe.fromCache({viewport:this._viewport,scissorTest:{enabled:this._useScissorTest,rectangle:this._scissorRectangle}})),l(this._compositeCommand)&&(this._compositeCommand.renderState=this._rs),this._adjustTranslucentCommand&&(this._adjustTranslucentCommand.renderState=this._rs),l(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.renderState=this._rs)};var EZt={enabled:!0,color:new U(0,0,0,0),equationRgb:Wc.ADD,equationAlpha:Wc.ADD,functionSourceRgb:Ko.ONE,functionDestinationRgb:Ko.ONE,functionSourceAlpha:Ko.ZERO,functionDestinationAlpha:Ko.ONE_MINUS_SOURCE_ALPHA},LZt={enabled:!0,color:new U(0,0,0,0),equationRgb:Wc.ADD,equationAlpha:Wc.ADD,functionSourceRgb:Ko.ONE,functionDestinationRgb:Ko.ONE,functionSourceAlpha:Ko.ONE,functionDestinationAlpha:Ko.ONE},WZt={enabled:!0,color:new U(0,0,0,0),equationRgb:Wc.ADD,equationAlpha:Wc.ADD,functionSourceRgb:Ko.ZERO,functionDestinationRgb:Ko.ONE_MINUS_SOURCE_ALPHA,functionSourceAlpha:Ko.ZERO,functionDestinationAlpha:Ko.ONE_MINUS_SOURCE_ALPHA};function nte(e,t,n,i){let o=n[i.id];if(!l(o)){let r=Oe.getState(i);r.depthMask=!1,r.blending=t,o=Oe.fromCache(r),n[i.id]=o}return o}function vZt(e,t,n){return nte(t,EZt,e._translucentRenderStateCache,n)}function FZt(e,t,n){return nte(t,LZt,e._translucentRenderStateCache,n)}function IZt(e,t,n){return nte(t,WZt,e._alphaRenderStateCache,n)}var PZt=` vec3 Ci = czm_out_FragColor.rgb * czm_out_FragColor.a; float ai = czm_out_FragColor.a; float wzi = czm_alphaWeight(ai); out_FragData_0 = vec4(Ci * wzi, ai); out_FragData_1 = vec4(ai * wzi); `,XZt=` vec3 Ci = czm_out_FragColor.rgb * czm_out_FragColor.a; float ai = czm_out_FragColor.a; float wzi = czm_alphaWeight(ai); out_FragColor = vec4(Ci, ai) * wzi; `,NZt=` float ai = czm_out_FragColor.a; out_FragColor = vec4(ai); `;function ite(e,t,n,i){let{shaderCache:o}=e,r=o.getDerivedShaderProgram(t,n);if(l(r))return r;let s=t._attributeLocations,a=t.fragmentShaderSource.clone();a.sources=a.sources.map(function(u){return ze.replaceMain(u,"czm_translucent_main").replace(/out_FragColor/g,"czm_out_FragColor").replace(/layout\s*\(location\s*=\s*0\)\s*out\s+vec4\s+out_FragColor;/g,"").replace(/\bdiscard\b/g,"czm_discard = true").replace(/czm_phong/g,"czm_translucentPhong")}),a.sources.splice(0,0,`#define CESIUM_REDIRECTED_COLOR_OUTPUT vec4 czm_out_FragColor; bool czm_discard = false; `);let c=[...i.matchAll(/out_FragData_(\d+)/g)],d="";for(let u=0;u<c.length;u++){let m=c[u];d=`layout (location = ${m[1]}) out vec4 ${m[0]}; ${d}`}return a.sources.push(d),a.sources.push(`void main() { czm_translucent_main(); if (czm_discard) { discard; } ${i}} `),o.createDerivedShaderProgram(t,n,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:a,attributeLocations:s})}function YZt(e,t){return ite(e,t,"translucentMRT",PZt)}function wZt(e,t){return ite(e,t,"translucentMultipass",XZt)}function MZt(e,t){return ite(e,t,"alphaMultipass",NZt)}xg.prototype.createDerivedCommands=function(e,t,n){if(l(n)||(n={}),this._translucentMRTSupport){let a,c;return l(n.translucentCommand)&&(a=n.translucentCommand.shaderProgram,c=n.translucentCommand.renderState),n.translucentCommand=ot.shallowClone(e,n.translucentCommand),!l(a)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=YZt(t,e.shaderProgram),n.translucentCommand.renderState=vZt(this,t,e.renderState),n.shaderProgramId=e.shaderProgram.id):(n.translucentCommand.shaderProgram=a,n.translucentCommand.renderState=c),n}let i,o,r,s;return l(n.translucentCommand)&&(i=n.translucentCommand.shaderProgram,o=n.translucentCommand.renderState,r=n.alphaCommand.shaderProgram,s=n.alphaCommand.renderState),n.translucentCommand=ot.shallowClone(e,n.translucentCommand),n.alphaCommand=ot.shallowClone(e,n.alphaCommand),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=wZt(t,e.shaderProgram),n.translucentCommand.renderState=FZt(this,t,e.renderState),n.alphaCommand.shaderProgram=MZt(t,e.shaderProgram),n.alphaCommand.renderState=IZt(this,t,e.renderState),n.shaderProgramId=e.shaderProgram.id):(n.translucentCommand.shaderProgram=i,n.translucentCommand.renderState=o,n.alphaCommand.shaderProgram=r,n.alphaCommand.renderState=s),n};function kZt(e,t,n,i,o,r){let{context:s,frameState:a}=t,{useLogDepth:c,shadowState:d}=a,u=t._hdr,m=i.framebuffer,p=d.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO.framebuffer,e._adjustTranslucentCommand.execute(s,i),i.framebuffer=e._adjustAlphaFBO.framebuffer,e._adjustAlphaCommand.execute(s,i);let b=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let f=0;f<o.length;++f){let y=o[f];y=c?y.derivedCommands.logDepth.command:y,y=u?y.derivedCommands.hdr.command:y;let _=p&&y.receiveShadows?y.derivedCommands.oit.shadows.translucentCommand:y.derivedCommands.oit.translucentCommand;n(_,t,i,b)}if(l(r)){let f=r.unclassifiedCommand,y=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand;n(y,t,i,b)}i.framebuffer=e._alphaFBO.framebuffer;for(let f=0;f<o.length;++f){let y=o[f];y=c?y.derivedCommands.logDepth.command:y,y=u?y.derivedCommands.hdr.command:y;let _=p&&y.receiveShadows?y.derivedCommands.oit.shadows.alphaCommand:y.derivedCommands.oit.alphaCommand;n(_,t,i,b)}if(l(r)){let f=r.unclassifiedCommand,y=p&&f.receiveShadows?f.derivedCommands.oit.shadows.alphaCommand:f.derivedCommands.oit.alphaCommand;n(y,t,i,b)}i.framebuffer=m}function UZt(e,t,n,i,o,r){let{context:s,frameState:a}=t,{useLogDepth:c,shadowState:d}=a,u=t._hdr,m=i.framebuffer,p=d.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO.framebuffer,e._adjustTranslucentCommand.execute(s,i);let b=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let f=0;f<o.length;++f){let y=o[f];y=c?y.derivedCommands.logDepth.command:y,y=u?y.derivedCommands.hdr.command:y;let _=p&&y.receiveShadows?y.derivedCommands.oit.shadows.translucentCommand:y.derivedCommands.oit.translucentCommand;n(_,t,i,b)}if(l(r)){let f=r.unclassifiedCommand,y=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand;n(y,t,i,b)}i.framebuffer=m}xg.prototype.executeCommands=function(e,t,n,i,o){if(this._translucentMRTSupport){UZt(this,e,t,n,i,o);return}kZt(this,e,t,n,i,o)};xg.prototype.execute=function(e,t){this._compositeCommand.execute(e,t)};xg.prototype.clear=function(e,t,n){let i=t.framebuffer;t.framebuffer=this._opaqueFBO.framebuffer,U.clone(n,this._opaqueClearCommand.color),this._opaqueClearCommand.execute(e,t),t.framebuffer=this._translucentFBO.framebuffer,(this._translucentMRTSupport?this._translucentMRTClearCommand:this._translucentMultipassClearCommand).execute(e,t),this._translucentMultipassSupport&&(t.framebuffer=this._alphaFBO.framebuffer,this._alphaClearCommand.execute(e,t)),t.framebuffer=i};xg.prototype.isSupported=function(){return this._translucentMRTSupport||this._translucentMultipassSupport};xg.prototype.isDestroyed=function(){return!1};xg.prototype.destroy=function(){return tRe(this),l(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),l(this._adjustTranslucentCommand)&&(this._adjustTranslucentCommand.shaderProgram=this._adjustTranslucentCommand.shaderProgram&&this._adjustTranslucentCommand.shaderProgram.destroy()),l(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.shaderProgram=this._adjustAlphaCommand.shaderProgram&&this._adjustAlphaCommand.shaderProgram.destroy()),me(this)};var Sw=xg;var i$i=x(T(),1);function Zw(){this._framebuffer=new ai({color:!1,depthStencil:!0,supportsDepthTexture:!0}),this._passState=void 0}Object.defineProperties(Zw.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function DZt(e){e._framebuffer.destroy()}function OZt(e,t){let n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._framebuffer.update(t,n,i);let o=new rc(t);o.blendingEnabled=!1,o.scissorTest={enabled:!0,rectangle:new $e},o.viewport=new $e,e._passState=o}Zw.prototype.update=function(e,t,n){let i=n.width,o=n.height;this._framebuffer.isDirty(i,o)&&OZt(this,e);let r=this.framebuffer,s=this._passState;return s.framebuffer=r,s.viewport.width=i,s.viewport.height=o,s.scissorTest.rectangle.x=t.x,s.scissorTest.rectangle.y=o-t.y,s.scissorTest.rectangle.width=1,s.scissorTest.rectangle.height=1,s};Zw.prototype.isDestroyed=function(){return!1};Zw.prototype.destroy=function(){return DZt(this),me(this)};var Vw=Zw;var p$i=x(T(),1);function sZ(e){let t=new rc(e);t.blendingEnabled=!1,t.scissorTest={enabled:!0,rectangle:new $e},t.viewport=new $e,this._context=e,this._fb=new ai({depthStencil:!0}),this._passState=t,this._width=0,this._height=0}function nRe(e,t,n,i,o=1){let r=Math.max(n,i),s=r*r,a=Math.floor(n*.5),c=Math.floor(i*.5),d=0,u=0,m=0,p=-1,b=new Set;for(let f=0;f<s;++f){if(-a<=d&&d<=a&&-c<=u&&u<=c){let y=4*((c-u)*n+d+a),_=U.bytesToRgba(t[y],t[y+1],t[y+2],t[y+3]),S=e.getObjectByPickColor(_);if(l(S)&&(b.add(S),b.size>=o))break}if(d===u||d<0&&-d===u||d>0&&d===1-u){let y=m;m=-p,p=y}d+=m,u+=p}return[...b]}sZ.prototype.begin=function(e,t){let n=this._context,{width:i,height:o}=t;return $e.clone(e,this._passState.scissorTest.rectangle),this._width=i,this._height=o,this._fb.update(n,i,o),this._passState.framebuffer=this._fb.framebuffer,this._passState.viewport.width=i,this._passState.viewport.height=o,this._passState};sZ.prototype.endAsync=async function(e,t,n=1){let i=e.width??1,o=e.height??1,r=this._context,s=this._fb.framebuffer,a=Me.UNSIGNED_BYTE,c=Be.RGBA;l(s)&&s.numberOfColorAttachments>0&&(a=s.getColorTexture(0).pixelDatatype,c=s.getColorTexture(0).pixelFormat);let d=r.readPixelsToPBO({x:e.x,y:e.y,width:i,height:o,framebuffer:s}),u=k2.create({context:r});try{await u.waitForSignal(b=>t.afterRender.push(b));let m=Be.createTypedArray(c,a,i,o);return d.getBufferData(m),nRe(r,m,i,o,n)}catch{throw new ae("Async Picking Request Timeout")}finally{u.destroy(),d.destroy()}};sZ.prototype.end=function(e,t=1){let n=e.width??1,i=e.height??1,o=this._context,r=o.readPixels({x:e.x,y:e.y,width:n,height:i,framebuffer:this._fb.framebuffer});return nRe(o,r,n,i,t)};sZ.prototype.readCenterPixel=function(e){let t=e.width??1,n=e.height??1,o=this._context.readPixels({x:e.x,y:e.y,width:t,height:n,framebuffer:this._fb.framebuffer}),r=Math.floor(t*.5),a=4*(Math.floor(n*.5)*t+r);return o.slice(a,a+4)};sZ.prototype.isDestroyed=function(){return!1};sZ.prototype.destroy=function(){return this._fb.destroy(),me(this)};var Cw=sZ;var S$i=x(T(),1);function Tg(){this._numSamples=1,this._colorFramebuffer=new ai({depthStencil:!0,supportsDepthTexture:!0}),this._idFramebuffer=new ai({depthStencil:!0,supportsDepthTexture:!0}),this._idClearColor=new U(0,0,0,0),this._clearCommand=new mi({color:new U(0,0,0,0),depth:1,owner:this})}function BZt(e){e._colorFramebuffer.destroy(),e._idFramebuffer.destroy()}Object.defineProperties(Tg.prototype,{framebuffer:{get:function(){return this._colorFramebuffer.framebuffer}},idFramebuffer:{get:function(){return this._idFramebuffer.framebuffer}},depthStencilTexture:{get:function(){return this._colorFramebuffer.getDepthStencilTexture()}}});Tg.prototype.update=function(e,t,n,i){let o=t.width,r=t.height,s=n?e.halfFloatingPointTexture?Me.HALF_FLOAT:Me.FLOAT:Me.UNSIGNED_BYTE;this._numSamples=i,this._colorFramebuffer.update(e,o,r,i,s),this._idFramebuffer.update(e,o,r)};Tg.prototype.clear=function(e,t,n){U.clone(n,this._clearCommand.color),U.clone(this._idClearColor,this._clearCommand.color),this._colorFramebuffer.clear(e,this._clearCommand,t),this._idFramebuffer.clear(e,this._clearCommand,t)};Tg.prototype.getFramebuffer=function(){return this._colorFramebuffer.framebuffer};Tg.prototype.getIdFramebuffer=function(){return this._idFramebuffer.framebuffer};Tg.prototype.prepareColorTextures=function(e){this._numSamples>1&&this._colorFramebuffer.prepareTextures(e)};Tg.prototype.isDestroyed=function(){return!1};Tg.prototype.destroy=function(){return BZt(this),me(this)};var aZ=Tg;var xeo=x(T(),1);var R$i=x(T(),1);function Yx(){}var zZt={HAS_CLIPPING_PLANES:!0,ENABLE_CLIPPING_POLYGONS:!0};Yx.hasClippingForShadowCast=function(e){let t=e.defines;return l(t)&&t.some(function(n){return zZt[n]===!0})};Yx.getShadowCastShaderKeyword=function(e,t,n,i,o){return`castShadow ${e} ${t} ${n} ${i} ${o}`};Yx.createShadowCastVertexShader=function(e,t,n){let i=e.defines.slice(0),o=e.sources.slice(0);i.push("SHADOW_MAP"),n&&i.push("GENERATE_POSITION");let r=ze.findPositionVarying(e),s=l(r);if(t&&!s){let a=o.length;for(let d=0;d<a;++d)o[d]=ze.replaceMain(o[d],"czm_shadow_cast_main");o.push(`out vec3 v_positionEC; void main() { czm_shadow_cast_main(); v_positionEC = (czm_inverseProjection * gl_Position).xyz; }`)}return new ze({defines:i,sources:o})};Yx.createShadowCastFragmentShader=function(e,t,n,i,o){let r=e.defines.slice(0),s=e.sources.slice(0);r.push("SHADOW_MAP");let a=ze.findPositionVarying(e),c=l(a);c||(a="v_positionEC");let d=s.length;for(let m=0;m<d;++m)s[m]=ze.replaceMain(s[m],"czm_shadow_cast_main");let u="";return t&&(c||(u+=`in vec3 v_positionEC; `),u+=`uniform vec4 shadowMap_lightPositionEC; `),i&&o?u+=`void main() { czm_shadow_cast_main(); `:i?u+=`void main() { `:u+=`void main() { czm_shadow_cast_main(); if (out_FragColor.a == 0.0) { discard; } `,t?u+=` float distance = length(${a}); if (distance >= shadowMap_lightPositionEC.w) { discard; } distance /= shadowMap_lightPositionEC.w; // radius out_FragColor = czm_packDepth(distance); `:n?u+=` out_FragColor = vec4(1.0); `:u+=` out_FragColor = czm_packDepth(gl_FragCoord.z); `,u+=`} `,s.push(u),new ze({defines:r,sources:s})};Yx.getShadowReceiveShaderKeyword=function(e,t,n,i){let o=e._usesDepthTexture,r=e._polygonOffsetSupported,s=e._isPointLight,a=e._isSpotLight,c=e._numberOfCascades>1,d=e.debugCascadeColors,u=e.softShadows;return`receiveShadow ${o}${r}${s}${a}${c}${d}${u}${t}${n}${i}`};Yx.createShadowReceiveVertexShader=function(e,t,n){let i=e.defines.slice(0),o=e.sources.slice(0);return i.push("SHADOW_MAP"),t&&(n?i.push("GENERATE_POSITION_AND_NORMAL"):i.push("GENERATE_POSITION")),new ze({defines:i,sources:o})};Yx.createShadowReceiveFragmentShader=function(e,t,n,i,o){let r=ze.findNormalVarying(e),s=!i&&l(r)||i&&o,a=ze.findPositionVarying(e),c=l(a),d=t._usesDepthTexture,u=t._polygonOffsetSupported,m=t._isPointLight,p=t._isSpotLight,b=t._numberOfCascades>1,f=t.debugCascadeColors,y=t.softShadows,_=m?t._pointBias:i?t._terrainBias:t._primitiveBias,S=e.defines.slice(0),Z=e.sources.slice(0),V=Z.length;for(let E=0;E<V;++E)Z[E]=ze.replaceMain(Z[E],"czm_shadow_receive_main");m?S.push("USE_CUBE_MAP_SHADOW"):d&&S.push("USE_SHADOW_DEPTH_TEXTURE"),y&&!m&&S.push("USE_SOFT_SHADOWS"),b&&n&&i&&(s?S.push("ENABLE_VERTEX_LIGHTING"):S.push("ENABLE_DAYNIGHT_SHADING")),n&&_.normalShading&&s&&(S.push("USE_NORMAL_SHADING"),_.normalShadingSmooth>0&&S.push("USE_NORMAL_SHADING_SMOOTH"));let C="";m?C+=`uniform samplerCube shadowMap_textureCube; `:C+=`uniform sampler2D shadowMap_texture; `;let G;return c?G=` return vec4(${a}, 1.0); `:G=`#ifndef LOG_DEPTH return czm_windowToEyeCoordinates(gl_FragCoord); #else return vec4(v_logPositionEC, 1.0); #endif `,C+=`uniform mat4 shadowMap_matrix; uniform vec3 shadowMap_lightDirectionEC; uniform vec4 shadowMap_lightPositionEC; uniform vec4 shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness; uniform vec4 shadowMap_texelSizeDepthBiasAndNormalShadingSmooth; #ifdef LOG_DEPTH in vec3 v_logPositionEC; #endif vec4 getPositionEC() { ${G}} vec3 getNormalEC() { ${s?` return normalize(${r}); `:` return vec3(1.0); `}} void applyNormalOffset(inout vec4 positionEC, vec3 normalEC, float nDotL) { ${_.normalOffset&&s?` float normalOffset = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.x; float normalOffsetScale = 1.0 - nDotL; vec3 offset = normalOffset * normalOffsetScale * normalEC; positionEC.xyz += offset; `:""}} `,C+=`void main() { czm_shadow_receive_main(); vec4 positionEC = getPositionEC(); vec3 normalEC = getNormalEC(); float depth = -positionEC.z; `,C+=` czm_shadowParameters shadowParameters; shadowParameters.texelStepSize = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy; shadowParameters.depthBias = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z; shadowParameters.normalShadingSmooth = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w; shadowParameters.darkness = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w; `,i?C+=` shadowParameters.depthBias *= max(depth * 0.01, 1.0); `:u||(C+=` shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015); `),m?C+=` vec3 directionEC = positionEC.xyz - shadowMap_lightPositionEC.xyz; float distance = length(directionEC); directionEC = normalize(directionEC); float radius = shadowMap_lightPositionEC.w; // Stop early if the fragment is beyond the point light radius if (distance > radius) { return; } vec3 directionWC = czm_inverseViewRotation * directionEC; shadowParameters.depth = distance / radius; shadowParameters.nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); shadowParameters.texCoords = directionWC; float visibility = czm_shadowVisibility(shadowMap_textureCube, shadowParameters); `:p?C+=` vec3 directionEC = normalize(positionEC.xyz - shadowMap_lightPositionEC.xyz); float nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); applyNormalOffset(positionEC, normalEC, nDotL); vec4 shadowPosition = shadowMap_matrix * positionEC; // Spot light uses a perspective projection, so perform the perspective divide shadowPosition /= shadowPosition.w; // Stop early if the fragment is not in the shadow bounds if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) { return; } shadowParameters.texCoords = shadowPosition.xy; shadowParameters.depth = shadowPosition.z; shadowParameters.nDotL = nDotL; float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); `:b?C+=` float maxDepth = shadowMap_cascadeSplits[1].w; // Stop early if the eye depth exceeds the last cascade if (depth > maxDepth) { return; } // Get the cascade based on the eye-space depth vec4 weights = czm_cascadeWeights(depth); // Apply normal offset float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); applyNormalOffset(positionEC, normalEC, nDotL); // Transform position into the cascade vec4 shadowPosition = czm_cascadeMatrix(weights) * positionEC; // Get visibility shadowParameters.texCoords = shadowPosition.xy; shadowParameters.depth = shadowPosition.z; shadowParameters.nDotL = nDotL; float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); // Fade out shadows that are far away float shadowMapMaximumDistance = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.z; float fade = max((depth - shadowMapMaximumDistance * 0.8) / (shadowMapMaximumDistance * 0.2), 0.0); visibility = mix(visibility, 1.0, fade); ${f?` // Draw cascade colors for debugging out_FragColor *= czm_cascadeColor(weights); `:""}`:C+=` float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); applyNormalOffset(positionEC, normalEC, nDotL); vec4 shadowPosition = shadowMap_matrix * positionEC; // Stop early if the fragment is not in the shadow bounds if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) { return; } shadowParameters.texCoords = shadowPosition.xy; shadowParameters.depth = shadowPosition.z; shadowParameters.nDotL = nDotL; float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); `,C+=` out_FragColor.rgb *= visibility; } `,Z.push(C),new ze({defines:S,sources:Z})};var Pf=Yx;function o0(e){e=e??B.EMPTY_OBJECT;let t=e.context;this._enabled=e.enabled??!0,this._softShadows=e.softShadows??!1,this._normalOffset=e.normalOffset??!0,this.dirty=!0,this.fromLightSource=e.fromLightSource??!0,this.darkness=e.darkness??.3,this._darkness=this.darkness,this.fadingEnabled=e.fadingEnabled??!0,this.maximumDistance=e.maximumDistance??5e3,this._outOfView=!1,this._outOfViewPrevious=!1,this._needsUpdate=!0;let n=!0;(hn.isEdge()||(hn.isChrome()||hn.isFirefox())&&hn.isWindows()&&!t.depthTexture)&&(n=!1),this._polygonOffsetSupported=n,this._terrainBias={polygonOffset:n,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.5,normalShading:!0,normalShadingSmooth:.3,depthBias:1e-4},this._primitiveBias={polygonOffset:n,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.1,normalShading:!0,normalShadingSmooth:.05,depthBias:2e-5},this._pointBias={polygonOffset:!1,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:0,normalShading:!0,normalShadingSmooth:.1,depthBias:5e-4},this._depthAttachment=void 0,this._colorAttachment=void 0,this._shadowMapMatrix=new I,this._shadowMapTexture=void 0,this._lightDirectionEC=new h,this._lightPositionEC=new ce,this._distance=0,this._lightCamera=e.lightCamera,this._shadowMapCamera=new C3,this._shadowMapCullingVolume=void 0,this._sceneCamera=void 0,this._boundingSphere=new le,this._isPointLight=e.isPointLight??!1,this._pointLightRadius=e.pointLightRadius??100,this._cascadesEnabled=this._isPointLight?!1:e.cascadesEnabled??!0,this._numberOfCascades=this._cascadesEnabled?e.numberOfCascades??4:0,this._fitNearFar=!0,this._maximumCascadeDistances=[25,150,700,Number.MAX_VALUE],this._textureSize=new M,this._isSpotLight=!1,this._cascadesEnabled?this._shadowMapCamera.frustum=new ds:l(this._lightCamera.frustum.fov)&&(this._isSpotLight=!0),this._cascadeSplits=[new ce,new ce],this._cascadeMatrices=[new I,new I,new I,new I],this._cascadeDistances=new ce;let i;this._isPointLight?i=6:this._cascadesEnabled?i=this._numberOfCascades:i=1,this._passes=new Array(i);for(let o=0;o<i;++o)this._passes[o]=new HZt(t);this.debugShow=!1,this.debugFreezeFrame=!1,this._debugFreezeFrame=!1,this._debugCascadeColors=!1,this._debugLightFrustum=void 0,this._debugCameraFrustum=void 0,this._debugCascadeFrustums=new Array(this._numberOfCascades),this._debugShadowViewCommand=void 0,this._usesDepthTexture=t.depthTexture,this._isPointLight&&(this._usesDepthTexture=!1),this._primitiveRenderState=void 0,this._terrainRenderState=void 0,this._pointRenderState=void 0,rte(this),this._clearCommand=new mi({depth:1,color:new U}),this._clearPassState=new rc(t),this._size=e.size??2048,this.size=this._size}o0.MAXIMUM_DISTANCE=2e4;function HZt(e){this.camera=new C3,this.passState=new rc(e),this.framebuffer=void 0,this.textureOffsets=void 0,this.commandList=[],this.cullingVolume=void 0}function ote(e,t){return Oe.fromCache({cull:{enabled:!0,face:ki.BACK},depthTest:{enabled:!0},colorMask:{red:e,green:e,blue:e,alpha:e},depthMask:!0,polygonOffset:{enabled:t.polygonOffset,factor:t.polygonOffsetFactor,units:t.polygonOffsetUnits}})}function rte(e){let t=!e._usesDepthTexture;e._primitiveRenderState=ote(t,e._primitiveBias),e._terrainRenderState=ote(t,e._terrainBias),e._pointRenderState=ote(t,e._pointBias)}o0.prototype.debugCreateRenderStates=function(){rte(this)};Object.defineProperties(o0.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this.dirty=this._enabled!==e,this._enabled=e}},normalOffset:{get:function(){return this._normalOffset},set:function(e){this.dirty=this._normalOffset!==e,this._normalOffset=e,this._terrainBias.normalOffset=e,this._primitiveBias.normalOffset=e,this._pointBias.normalOffset=e}},softShadows:{get:function(){return this._softShadows},set:function(e){this.dirty=this._softShadows!==e,this._softShadows=e}},size:{get:function(){return this._size},set:function(e){$Zt(this,e)}},outOfView:{get:function(){return this._outOfView}},shadowMapCullingVolume:{get:function(){return this._shadowMapCullingVolume}},passes:{get:function(){return this._passes}},isPointLight:{get:function(){return this._isPointLight}},debugCascadeColors:{get:function(){return this._debugCascadeColors},set:function(e){this.dirty=this._debugCascadeColors!==e,this._debugCascadeColors=e}}});function ste(e){let t=e._passes.length;for(let n=0;n<t;++n){let i=e._passes[n],o=i.framebuffer;l(o)&&!o.isDestroyed()&&o.destroy(),i.framebuffer=void 0}e._depthAttachment=e._depthAttachment&&e._depthAttachment.destroy(),e._colorAttachment=e._colorAttachment&&e._colorAttachment.destroy()}function KZt(e,t){let n=new gu({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Ml.DEPTH_COMPONENT16}),i=new Ct({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:Be.RGBA,pixelDatatype:Me.UNSIGNED_BYTE,sampler:kt.NEAREST}),o=new ps({context:t,depthRenderbuffer:n,colorTextures:[i],destroyAttachments:!1}),r=e._passes.length;for(let s=0;s<r;++s){let a=e._passes[s];a.framebuffer=o,a.passState.framebuffer=o}e._shadowMapTexture=i,e._depthAttachment=n,e._colorAttachment=i}function JZt(e,t){let n=new Ct({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:Be.DEPTH_STENCIL,pixelDatatype:Me.UNSIGNED_INT_24_8,sampler:kt.NEAREST}),i=new ps({context:t,depthStencilTexture:n,destroyAttachments:!1}),o=e._passes.length;for(let r=0;r<o;++r){let s=e._passes[r];s.framebuffer=i,s.passState.framebuffer=i}e._shadowMapTexture=n,e._depthAttachment=n}function jZt(e,t){let n=new gu({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Ml.DEPTH_COMPONENT16}),i=new Jr({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:Be.RGBA,pixelDatatype:Me.UNSIGNED_BYTE,sampler:kt.NEAREST}),o=[i.negativeX,i.negativeY,i.negativeZ,i.positiveX,i.positiveY,i.positiveZ];for(let r=0;r<6;++r){let s=new ps({context:t,depthRenderbuffer:n,colorTextures:[o[r]],destroyAttachments:!1}),a=e._passes[r];a.framebuffer=s,a.passState.framebuffer=s}e._shadowMapTexture=i,e._depthAttachment=n,e._colorAttachment=i}function rRe(e,t){e._isPointLight?jZt(e,t):e._usesDepthTexture?JZt(e,t):KZt(e,t)}function QZt(e,t){e._usesDepthTexture&&e._passes[0].framebuffer.status!==ne.FRAMEBUFFER_COMPLETE&&(e._usesDepthTexture=!1,rte(e),ste(e),rRe(e,t))}function qZt(e,t){(!l(e._passes[0].framebuffer)||e._shadowMapTexture.width!==e._textureSize.x)&&(ste(e),rRe(e,t),QZt(e,t),sRe(e,t))}function sRe(e,t,n){n=n??0,(e._isPointLight||n===0)&&(e._clearCommand.framebuffer=e._passes[n].framebuffer,e._clearCommand.execute(t,e._clearPassState))}function $Zt(e,t){e._size=t;let n=e._passes,i=n.length,o=e._textureSize;if(e._isPointLight){t=Xt.maximumCubeMapSize>=t?t:Xt.maximumCubeMapSize,o.x=t,o.y=t;let r=new $e(0,0,t,t);n[0].passState.viewport=r,n[1].passState.viewport=r,n[2].passState.viewport=r,n[3].passState.viewport=r,n[4].passState.viewport=r,n[5].passState.viewport=r}else i===1?(t=Xt.maximumTextureSize>=t?t:Xt.maximumTextureSize,o.x=t,o.y=t,n[0].passState.viewport=new $e(0,0,t,t)):i===4&&(t=Xt.maximumTextureSize>=t*2?t:Xt.maximumTextureSize/2,o.x=t*2,o.y=t*2,n[0].passState.viewport=new $e(0,0,t,t),n[1].passState.viewport=new $e(t,0,t,t),n[2].passState.viewport=new $e(0,t,t,t),n[3].passState.viewport=new $e(t,t,t,t));e._clearPassState.viewport=new $e(0,0,o.x,o.y);for(let r=0;r<i;++r){let s=n[r],a=s.passState.viewport,c=a.x/o.x,d=a.y/o.y,u=a.width/o.x,m=a.height/o.y;s.textureOffsets=new I(u,0,0,c,0,m,0,d,0,0,1,0,0,0,0,1)}}var eVt=new $e;function tVt(e,t){let n;e._isPointLight?n=`uniform samplerCube shadowMap_textureCube; in vec2 v_textureCoordinates; void main() { vec2 uv = v_textureCoordinates; vec3 dir; if (uv.y < 0.5) { if (uv.x < 0.333) { dir.x = -1.0; dir.y = uv.x * 6.0 - 1.0; dir.z = uv.y * 4.0 - 1.0; } else if (uv.x < 0.666) { dir.y = -1.0; dir.x = uv.x * 6.0 - 3.0; dir.z = uv.y * 4.0 - 1.0; } else { dir.z = -1.0; dir.x = uv.x * 6.0 - 5.0; dir.y = uv.y * 4.0 - 1.0; } } else { if (uv.x < 0.333) { dir.x = 1.0; dir.y = uv.x * 6.0 - 1.0; dir.z = uv.y * 4.0 - 3.0; } else if (uv.x < 0.666) { dir.y = 1.0; dir.x = uv.x * 6.0 - 3.0; dir.z = uv.y * 4.0 - 3.0; } else { dir.z = 1.0; dir.x = uv.x * 6.0 - 5.0; dir.y = uv.y * 4.0 - 3.0; } } float shadow = czm_unpackDepth(czm_textureCube(shadowMap_textureCube, dir)); out_FragColor = vec4(vec3(shadow), 1.0); } `:n=`uniform sampler2D shadowMap_texture; in vec2 v_textureCoordinates; void main() { ${e._usesDepthTexture?` float shadow = texture(shadowMap_texture, v_textureCoordinates).r; `:` float shadow = czm_unpackDepth(texture(shadowMap_texture, v_textureCoordinates)); `} out_FragColor = vec4(vec3(shadow), 1.0); } `;let i=t.createViewportQuadCommand(n,{uniformMap:{shadowMap_texture:function(){return e._shadowMapTexture},shadowMap_textureCube:function(){return e._shadowMapTexture}}});return i.pass=We.OVERLAY,i}function nVt(e,t){let n=t.context,i=t.context.drawingBufferWidth,o=t.context.drawingBufferHeight,r=Math.min(i,o)*.3,s=eVt;s.x=i-r,s.y=0,s.width=r,s.height=r;let a=e._debugShadowViewCommand;l(a)||(a=tVt(e,n),e._debugShadowViewCommand=a),(!l(a.renderState)||!$e.equals(a.renderState.viewport,s))&&(a.renderState=Oe.fromCache({viewport:$e.clone(s)})),t.commandList.push(e._debugShadowViewCommand)}var r0=new Array(8);r0[0]=new ce(-1,-1,-1,1);r0[1]=new ce(1,-1,-1,1);r0[2]=new ce(1,1,-1,1);r0[3]=new ce(-1,1,-1,1);r0[4]=new ce(-1,-1,1,1);r0[5]=new ce(1,-1,1,1);r0[6]=new ce(1,1,1,1);r0[7]=new ce(-1,1,1,1);var wx=new I,ate=new Array(8);for(let e=0;e<8;++e)ate[e]=new ce;function iVt(e,t){let n=new Nt({geometry:new Rh({minimum:new h(-.5,-.5,-.5),maximum:new h(.5,.5,.5)}),attributes:{color:Qt.fromColor(t)}}),i=new Nt({geometry:new hb({radius:.5}),attributes:{color:Qt.fromColor(t)}});return new Nn({geometryInstances:[n,i],appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1,modelMatrix:e})}var oVt=[U.RED,U.GREEN,U.BLUE,U.MAGENTA],rVt=new h;function sVt(e,t){nVt(e,t);let n=e.debugFreezeFrame&&!e._debugFreezeFrame;if(e._debugFreezeFrame=e.debugFreezeFrame,e.debugFreezeFrame&&(n&&(e._debugCameraFrustum=e._debugCameraFrustum&&e._debugCameraFrustum.destroy(),e._debugCameraFrustum=new t0({camera:e._sceneCamera,color:U.CYAN,updateOnChange:!1})),e._debugCameraFrustum.update(t)),e._cascadesEnabled){if(e.debugFreezeFrame){n&&(e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=new t0({camera:e._shadowMapCamera,color:U.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t);for(let i=0;i<e._numberOfCascades;++i)n&&(e._debugCascadeFrustums[i]=e._debugCascadeFrustums[i]&&e._debugCascadeFrustums[i].destroy(),e._debugCascadeFrustums[i]=new t0({camera:e._passes[i].camera,color:oVt[i],updateOnChange:!1})),e._debugCascadeFrustums[i].update(t)}}else if(e._isPointLight){if(!l(e._debugLightFrustum)||e._needsUpdate){let i=e._shadowMapCamera.positionWC,o=Ye.IDENTITY,r=e._pointLightRadius*2,s=h.fromElements(r,r,r,rVt),a=I.fromTranslationQuaternionRotationScale(i,o,s,wx);e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=iVt(a,U.YELLOW)}e._debugLightFrustum.update(t)}else(!l(e._debugLightFrustum)||e._needsUpdate)&&(e._debugLightFrustum=new t0({camera:e._shadowMapCamera,color:U.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t)}function C3(){this.viewMatrix=new I,this.inverseViewMatrix=new I,this.frustum=void 0,this.positionCartographic=new fe,this.positionWC=new h,this.directionWC=h.clone(h.UNIT_Z),this.upWC=h.clone(h.UNIT_Y),this.rightWC=h.clone(h.UNIT_X),this.viewProjectionMatrix=new I}C3.prototype.clone=function(e){I.clone(e.viewMatrix,this.viewMatrix),I.clone(e.inverseViewMatrix,this.inverseViewMatrix),this.frustum=e.frustum.clone(this.frustum),fe.clone(e.positionCartographic,this.positionCartographic),h.clone(e.positionWC,this.positionWC),h.clone(e.directionWC,this.directionWC),h.clone(e.upWC,this.upWC),h.clone(e.rightWC,this.rightWC)};var aVt=new I(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);C3.prototype.getViewProjection=function(){let e=this.viewMatrix,t=this.frustum.projectionMatrix;return I.multiply(t,e,this.viewProjectionMatrix),I.multiply(aVt,this.viewProjectionMatrix,this.viewProjectionMatrix),this.viewProjectionMatrix};var cVt=new Array(5),lVt=new Bi,dVt=new Array(4),aRe=new h,cRe=new h;function uVt(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=i.frustum.near,r=i.frustum.far,s=e._numberOfCascades,a,c=r-o,d=r/o,u=.9,m=!1;t.shadowState.closestObjectSize<200&&(m=!0,u=.9);let p=dVt,b=cVt;for(b[0]=o,b[s]=r,a=0;a<s;++a){let N=(a+1)/s,g=o*Math.pow(d,N),R=o+c*N,A=L.lerp(R,g,u);b[a+1]=A,p[a]=A-b[a]}if(m){for(a=0;a<s;++a)p[a]=Math.min(p[a],e._maximumCascadeDistances[a]);let N=b[0];for(a=0;a<s-1;++a)N+=p[a],b[a+1]=N}ce.unpack(b,0,e._cascadeSplits[0]),ce.unpack(b,1,e._cascadeSplits[1]),ce.unpack(p,0,e._cascadeDistances);let f=n.frustum,y=f.left,_=f.right,S=f.bottom,Z=f.top,V=f.near,C=f.far,G=n.positionWC,E=n.directionWC,v=n.upWC,F=i.frustum.clone(lVt),P=n.getViewProjection();for(a=0;a<s;++a){F.near=b[a],F.far=b[a+1];let N=I.multiply(F.projectionMatrix,i.viewMatrix,wx),g=I.inverse(N,wx),R=I.multiply(P,g,wx),A=h.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,aRe),W=h.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,cRe);for(let O=0;O<8;++O){let w=ce.clone(r0[O],ate[O]);I.multiplyByVector(R,w,w),h.divideByScalar(w,w.w,w),h.minimumByComponent(w,A,A),h.maximumByComponent(w,W,W)}A.x=Math.max(A.x,0),A.y=Math.max(A.y,0),A.z=0,W.x=Math.min(W.x,1),W.y=Math.min(W.y,1),W.z=Math.min(W.z,1);let X=e._passes[a],Y=X.camera;Y.clone(n);let D=Y.frustum;D.left=y+A.x*(_-y),D.right=y+W.x*(_-y),D.bottom=S+A.y*(Z-S),D.top=S+W.y*(Z-S),D.near=V+A.z*(C-V),D.far=V+W.z*(C-V),X.cullingVolume=Y.frustum.computeCullingVolume(G,E,v);let k=e._cascadeMatrices[a];I.multiply(Y.getViewProjection(),i.inverseViewMatrix,k),I.multiply(X.textureOffsets,k,k)}}var mVt=new I,hVt=new h,fVt=new h,iRe=new h;function pVt(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=I.multiply(i.frustum.projectionMatrix,i.viewMatrix,wx),r=I.inverse(o,wx),s=n.directionWC,a=i.directionWC;h.equalsEpsilon(s,a,L.EPSILON10)&&(a=i.upWC);let c=h.cross(s,a,hVt);a=h.cross(c,s,fVt),h.normalize(a,a),h.normalize(c,c);let d=h.fromElements(0,0,0,iRe),u=I.computeView(d,s,a,c,mVt),m=I.multiply(u,r,wx),p=h.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,aRe),b=h.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,cRe);for(let C=0;C<8;++C){let G=ce.clone(r0[C],ate[C]);I.multiplyByVector(m,G,G),h.divideByScalar(G,G.w,G),h.minimumByComponent(G,p,p),h.maximumByComponent(G,b,b)}b.z+=1e3,p.z-=10;let f=iRe;f.x=-(.5*(p.x+b.x)),f.y=-(.5*(p.y+b.y)),f.z=-b.z;let y=I.fromTranslation(f,wx);u=I.multiply(y,u,u);let _=.5*(b.x-p.x),S=.5*(b.y-p.y),Z=b.z-p.z,V=n.frustum;V.left=-_,V.right=_,V.bottom=-S,V.top=S,V.near=.01,V.far=Z,I.clone(u,n.viewMatrix),I.inverse(u,n.inverseViewMatrix),I.getTranslation(n.inverseViewMatrix,n.positionWC),t.mapProjection.ellipsoid.cartesianToCartographic(n.positionWC,n.positionCartographic),h.clone(s,n.directionWC),h.clone(a,n.upWC),h.clone(c,n.rightWC)}var bVt=[new h(-1,0,0),new h(0,-1,0),new h(0,0,-1),new h(1,0,0),new h(0,1,0),new h(0,0,1)],gVt=[new h(0,-1,0),new h(0,0,-1),new h(0,-1,0),new h(0,-1,0),new h(0,0,1),new h(0,-1,0)],yVt=[new h(0,0,1),new h(1,0,0),new h(-1,0,0),new h(0,0,-1),new h(1,0,0),new h(1,0,0)];function xVt(e,t){let n=new Bi;n.fov=L.PI_OVER_TWO,n.near=1,n.far=e._pointLightRadius,n.aspectRatio=1;for(let i=0;i<6;++i){let o=e._passes[i].camera;o.positionWC=e._shadowMapCamera.positionWC,o.positionCartographic=t.mapProjection.ellipsoid.cartesianToCartographic(o.positionWC,o.positionCartographic),o.directionWC=bVt[i],o.upWC=gVt[i],o.rightWC=yVt[i],I.computeView(o.positionWC,o.directionWC,o.upWC,o.rightWC,o.viewMatrix),I.inverse(o.viewMatrix,o.inverseViewMatrix),o.frustum=n}}var TVt=new h,_Vt=new h,lRe=new le,oRe=lRe.center;function SVt(e,t){let n=e._sceneCamera,i=e._shadowMapCamera,o=lRe;if(e._cascadesEnabled){if(n.frustum.near>=e.maximumDistance){e._outOfView=!0,e._needsUpdate=!1;return}let r=t.mapProjection.ellipsoid.geodeticSurfaceNormal(n.positionWC,TVt),s=h.negate(i.directionWC,_Vt),a=h.dot(r,s);if(e.fadingEnabled){let c=L.clamp(a/.1,0,1);e._darkness=L.lerp(1,e.darkness,c)}else e._darkness=e.darkness;if(a<0){e._outOfView=!0,e._needsUpdate=!1;return}e._needsUpdate=!0,e._outOfView=!1}else if(e._isPointLight)o.center=i.positionWC,o.radius=e._pointLightRadius,e._outOfView=t.cullingVolume.computeVisibility(o)===jt.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),le.clone(o,e._boundingSphere);else{let r=i.frustum.far/2,s=h.add(i.positionWC,h.multiplyByScalar(i.directionWC,r,oRe),oRe);o.center=s,o.radius=r,e._outOfView=t.cullingVolume.computeVisibility(o)===jt.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),le.clone(o,e._boundingSphere)}}function ZVt(e,t){let n=t.camera,i=e._lightCamera,o=e._sceneCamera,r=e._shadowMapCamera;e._cascadesEnabled?h.clone(i.directionWC,r.directionWC):e._isPointLight?h.clone(i.positionWC,r.positionWC):r.clone(i);let s=e._lightDirectionEC;I.multiplyByPointAsVector(n.viewMatrix,r.directionWC,s),h.normalize(s,s),h.negate(s,s),I.multiplyByPoint(n.viewMatrix,r.positionWC,e._lightPositionEC),e._lightPositionEC.w=e._pointLightRadius;let a,c;e._fitNearFar?(a=Math.min(t.shadowState.nearPlane,e.maximumDistance),c=Math.min(t.shadowState.farPlane,e.maximumDistance),c=Math.max(c,a+1)):(a=n.frustum.near,c=e.maximumDistance),e._sceneCamera=Ro.clone(n,o),n.frustum.clone(e._sceneCamera.frustum),e._sceneCamera.frustum.near=a,e._sceneCamera.frustum.far=c,e._distance=c-a,SVt(e,t),!e._outOfViewPrevious&&e._outOfView&&(e._needsUpdate=!0),e._outOfViewPrevious=e._outOfView}o0.prototype.update=function(e){if(ZVt(this,e),this._needsUpdate)if(qZt(this,e.context),this._isPointLight&&xVt(this,e),this._cascadesEnabled&&(pVt(this,e),this._numberOfCascades>1&&uVt(this,e)),this._isPointLight)this._shadowMapCullingVolume=Os.fromBoundingSphere(this._boundingSphere);else{let t=this._shadowMapCamera,n=t.positionWC,i=t.directionWC,o=t.upWC;this._shadowMapCullingVolume=t.frustum.computeCullingVolume(n,i,o),this._passes.length===1&&this._passes[0].camera.clone(t)}if(this._passes.length===1){let t=this._sceneCamera.inverseViewMatrix;I.multiply(this._shadowMapCamera.getViewProjection(),t,this._shadowMapMatrix)}this.debugShow&&sVt(this,e)};o0.prototype.updatePass=function(e,t){sRe(this,e,t)};var VVt=new M;function dRe(e,t,n){let i=e._isPointLight?e._pointBias:n?e._terrainBias:e._primitiveBias,o={shadowMap_texture:function(){return e._shadowMapTexture},shadowMap_textureCube:function(){return e._shadowMapTexture},shadowMap_matrix:function(){return e._shadowMapMatrix},shadowMap_cascadeSplits:function(){return e._cascadeSplits},shadowMap_cascadeMatrices:function(){return e._cascadeMatrices},shadowMap_lightDirectionEC:function(){return e._lightDirectionEC},shadowMap_lightPositionEC:function(){return e._lightPositionEC},shadowMap_cascadeDistances:function(){return e._cascadeDistances},shadowMap_texelSizeDepthBiasAndNormalShadingSmooth:function(){let r=VVt;return r.x=1/e._textureSize.x,r.y=1/e._textureSize.y,ce.fromElements(r.x,r.y,i.depthBias,i.normalShadingSmooth,this.combinedUniforms1)},shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness:function(){return ce.fromElements(i.normalOffsetScale,e._distance,e.maximumDistance,e._darkness,this.combinedUniforms2)},combinedUniforms1:new ce,combinedUniforms2:new ce};return It(t,o,!1)}function CVt(e,t,n,i,o,r){let s,a,c;if(l(r)&&(s=r.shaderProgram,a=r.renderState,c=r.uniformMap),r=ot.shallowClone(n,r),r.castShadows=!0,r.receiveShadows=!1,!l(s)||o!==n.shaderProgram.id||t){let d=n.shaderProgram,u=n.pass===We.GLOBE,m=n.pass!==We.TRANSLUCENT,p=e._isPointLight,b=e._usesDepthTexture,f=d.vertexShaderSource,y=d.fragmentShaderSource,_=m&&Pf.hasClippingForShadowCast(y),S=Pf.getShadowCastShaderKeyword(p,u,b,m,_);if(s=i.shaderCache.getDerivedShaderProgram(d,S),!l(s)){let V=Pf.createShadowCastVertexShader(f,p,u),C=Pf.createShadowCastFragmentShader(y,p,b,m,_);s=i.shaderCache.createDerivedShaderProgram(d,S,{vertexShaderSource:V,fragmentShaderSource:C,attributeLocations:d._attributeLocations})}a=e._primitiveRenderState,p?a=e._pointRenderState:u&&(a=e._terrainRenderState),n.renderState.cull.enabled||(a=Je(a,!1),a.cull=Je(a.cull,!1),a.cull.enabled=!1,a=Oe.fromCache(a)),c=dRe(e,n.uniformMap,u)}return r.shaderProgram=s,r.renderState=a,r.uniformMap=c,r}o0.createReceiveDerivedCommand=function(e,t,n,i,o){l(o)||(o={});let r=e.length>0,s=t.shaderProgram,a=s.vertexShaderSource,c=s.fragmentShaderSource,d=t.pass===We.GLOBE,u=!1;if(d&&(u=t.owner.data.renderedMesh.encoding.hasVertexNormals),t.receiveShadows&&r){let m,p;l(o.receiveCommand)&&(m=o.receiveCommand.shaderProgram,p=o.receiveCommand.uniformMap),o.receiveCommand=ot.shallowClone(t,o.receiveCommand),o.castShadows=!1,o.receiveShadows=!0;let b=o.receiveShaderCastShadows!==t.castShadows,f=o.receiveShaderProgramId!==t.shaderProgram.id;if(!l(m)||f||n||b){let y=Pf.getShadowReceiveShaderKeyword(e[0],t.castShadows,d,u);if(m=i.shaderCache.getDerivedShaderProgram(s,y),!l(m)){let _=Pf.createShadowReceiveVertexShader(a,d,u),S=Pf.createShadowReceiveFragmentShader(c,e[0],t.castShadows,d,u);m=i.shaderCache.createDerivedShaderProgram(s,y,{vertexShaderSource:_,fragmentShaderSource:S,attributeLocations:s._attributeLocations})}p=dRe(e[0],t.uniformMap,d)}o.receiveCommand.shaderProgram=m,o.receiveCommand.uniformMap=p,o.receiveShaderProgramId=t.shaderProgram.id,o.receiveShaderCastShadows=t.castShadows}return o};o0.createCastDerivedCommand=function(e,t,n,i,o){if(l(o)||(o={}),t.castShadows){let r=o.castCommands;l(r)||(r=o.castCommands=[]);let s=o.castShaderProgramId,a=e.length;r.length=a;for(let c=0;c<a;++c)r[c]=CVt(e[c],n,t,i,s,r[c]);o.castShaderProgramId=t.shaderProgram.id}return o};o0.prototype.isDestroyed=function(){return!1};o0.prototype.destroy=function(){ste(this),this._debugLightFrustum=this._debugLightFrustum&&this._debugLightFrustum.destroy(),this._debugCameraFrustum=this._debugCameraFrustum&&this._debugCameraFrustum.destroy(),this._debugShadowViewCommand=this._debugShadowViewCommand&&this._debugShadowViewCommand.shaderProgram&&this._debugShadowViewCommand.shaderProgram.destroy();for(let e=0;e<this._numberOfCascades;++e)this._debugCascadeFrustums[e]=this._debugCascadeFrustums[e]&&this._debugCascadeFrustums[e].destroy();return me(this)};var _g=o0;var Oeo=x(T(),1);var _eo=x(T(),1),Rw=`uniform sampler2D u_opaqueDepthTexture; uniform sampler2D u_translucentDepthTexture; in vec2 v_textureCoordinates; void main() { float opaqueDepth = texture(u_opaqueDepthTexture, v_textureCoordinates).r; float translucentDepth = texture(u_translucentDepthTexture, v_textureCoordinates).r; translucentDepth = czm_branchFreeTernary(translucentDepth > opaqueDepth, 1.0, translucentDepth); out_FragColor = czm_packDepth(translucentDepth); } `;var Zeo=x(T(),1),cZ=`uniform sampler2D colorTexture; #ifdef DEBUG_SHOW_DEPTH uniform sampler2D u_packedTranslucentDepth; #endif in vec2 v_textureCoordinates; void main() { #ifdef DEBUG_SHOW_DEPTH if (v_textureCoordinates.x < 0.5) { out_FragColor.rgb = vec3(czm_unpackDepth(texture(u_packedTranslucentDepth, v_textureCoordinates))); out_FragColor.a = 1.0; } #else vec4 color = texture(colorTexture, v_textureCoordinates); #ifdef PICK if (color == vec4(0.0)) { discard; } #else // Reverse premultiplication process to get the correct composited result of the classification primitives color.rgb /= color.a; #endif out_FragColor = color; #endif } `;var RVt=!1;function Mx(e){this._drawClassificationFBO=new ai({createDepthAttachments:!1}),this._accumulationFBO=new ai({createDepthAttachments:!1}),this._packFBO=new ai,this._opaqueDepthStencilTexture=void 0,this._textureToComposite=void 0,this._translucentDepthStencilTexture=void 0,this._packDepthCommand=void 0,this._accumulateCommand=void 0,this._compositeCommand=void 0,this._copyCommand=void 0,this._clearColorCommand=new mi({color:new U(0,0,0,0),owner:this}),this._clearDepthStencilCommand=new mi({depth:1,stencil:0,owner:this}),this._supported=e.depthTexture,this._viewport=new $e,this._rsDepth=void 0,this._rsAccumulate=void 0,this._rsComp=void 0,this._useScissorTest=void 0,this._scissorRectangle=void 0,this._hasTranslucentDepth=!1,this._frustumsDrawn=0}Object.defineProperties(Mx.prototype,{hasTranslucentDepth:{get:function(){return this._hasTranslucentDepth}}});function uRe(e){e._textureToComposite=void 0,e._translucentDepthStencilTexture=e._translucentDepthStencilTexture&&!e._translucentDepthStencilTexture.isDestroyed()&&e._translucentDepthStencilTexture.destroy()}function mRe(e){e._drawClassificationFBO.destroy(),e._accumulationFBO.destroy(),e._packFBO.destroy()}function GVt(e,t,n,i){uRe(e),e._translucentDepthStencilTexture=new Ct({context:t,width:n,height:i,pixelFormat:Be.DEPTH_STENCIL,pixelDatatype:Me.UNSIGNED_INT_24_8,sampler:kt.NEAREST})}function AVt(e,t,n,i){mRe(e),e._drawClassificationFBO.setDepthStencilTexture(e._translucentDepthStencilTexture),e._drawClassificationFBO.update(t,n,i),e._accumulationFBO.setDepthStencilTexture(e._translucentDepthStencilTexture),e._accumulationFBO.update(t,n,i),e._packFBO.update(t,n,i)}function EVt(e,t,n,i){if(!e.isSupported())return;e._opaqueDepthStencilTexture=i;let o=e._opaqueDepthStencilTexture.width,r=e._opaqueDepthStencilTexture.height;e._drawClassificationFBO.isDirty(o,r)&&(GVt(e,t,o,r),AVt(e,t,o,r));let s,a;if(l(e._packDepthCommand)||(s=new ze({sources:[Rw]}),a={u_opaqueDepthTexture:function(){return e._opaqueDepthStencilTexture},u_translucentDepthTexture:function(){return e._translucentDepthStencilTexture}},e._packDepthCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),!l(e._compositeCommand)){s=new ze({sources:[cZ]}),a={colorTexture:function(){return e._textureToComposite}},RVt&&(s.defines=["DEBUG_SHOW_DEPTH"],a.u_packedTranslucentDepth=function(){return e._packFBO.getColorTexture()}),e._compositeCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e});let u=e._compositeCommand,m=u.shaderProgram,p=t.shaderCache.createDerivedShaderProgram(m,"pick",{vertexShaderSource:m.vertexShaderSource,fragmentShaderSource:new ze({sources:s.sources,defines:["PICK"]}),attributeLocations:m._attributeLocations}),b=ot.shallowClone(u);b.shaderProgram=p,u.derivedCommands.pick=b}l(e._copyCommand)||(s=new ze({sources:[cZ]}),a={colorTexture:function(){return e._drawClassificationFBO.getColorTexture()}},e._copyCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),l(e._accumulateCommand)||(s=new ze({sources:[cZ]}),a={colorTexture:function(){return e._drawClassificationFBO.getColorTexture()}},e._accumulateCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),e._viewport.width=o,e._viewport.height=r;let c=!$e.equals(e._viewport,n.viewport),d=c!==e._useScissorTest;e._useScissorTest=c,$e.equals(e._scissorRectangle,n.viewport)||(e._scissorRectangle=$e.clone(n.viewport,e._scissorRectangle),d=!0),(!l(e._rsDepth)||!$e.equals(e._viewport,e._rsDepth.viewport)||d)&&(e._rsDepth=Oe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),l(e._packDepthCommand)&&(e._packDepthCommand.renderState=e._rsDepth),(!l(e._rsAccumulate)||!$e.equals(e._viewport,e._rsAccumulate.viewport)||d)&&(e._rsAccumulate=Oe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:ti.EQUAL,reference:Kt.CESIUM_3D_TILE_MASK}})),l(e._accumulateCommand)&&(e._accumulateCommand.renderState=e._rsAccumulate),(!l(e._rsComp)||!$e.equals(e._viewport,e._rsComp.viewport)||d)&&(e._rsComp=Oe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:tn.ALPHA_BLEND})),l(e._compositeCommand)&&(e._compositeCommand.renderState=e._rsComp,e._compositeCommand.derivedCommands.pick.renderState=e._rsComp)}Mx.prototype.executeTranslucentCommands=function(e,t,n,i,o){let r=e.frameState.useLogDepth,s=e.context,a=n.framebuffer;for(let c=0;c<i.length;++c){let d=i[c];if(d=r?d.derivedCommands.logDepth.command:d,d.depthForTranslucentClassification){this._hasTranslucentDepth=!0;break}}if(this._hasTranslucentDepth){EVt(this,s,n,o),n.framebuffer=this._drawClassificationFBO.framebuffer,this._clearDepthStencilCommand.execute(s,n);for(let c=0;c<i.length;++c){let d=i[c];if(d=r?d.derivedCommands.logDepth.command:d,!d.depthForTranslucentClassification)continue;let u=d.derivedCommands.depth.depthOnlyCommand;t(u,e,n)}this._frustumsDrawn+=this._hasTranslucentDepth?1:0,this._hasTranslucentDepth&&(n.framebuffer=this._packFBO.framebuffer,this._packDepthCommand.execute(s,n)),n.framebuffer=a}};Mx.prototype.executeClassificationCommands=function(e,t,n,i){if(!this._hasTranslucentDepth)return;let o=e.context,r=o.uniformState,s=n.framebuffer;n.framebuffer=this._accumulationFBO.framebuffer,this._accumulateCommand.execute(o,n),n.framebuffer=this._drawClassificationFBO.framebuffer,this._frustumsDrawn>1&&this._clearColorCommand.execute(o,n),r.updatePass(We.CESIUM_3D_TILE_CLASSIFICATION);let a=r.globeDepthTexture;r.globeDepthTexture=this._packFBO.getColorTexture();let c=i.commands[We.CESIUM_3D_TILE_CLASSIFICATION],d=i.indices[We.CESIUM_3D_TILE_CLASSIFICATION];for(let u=0;u<d;++u)t(c[u],e,n);r.globeDepthTexture=a,n.framebuffer=s,this._frustumsDrawn!==1&&(n.framebuffer=this._accumulationFBO.framebuffer,this._accumulateCommand.execute(o,n),n.framebuffer=s)};Mx.prototype.execute=function(e,t){if(!this._hasTranslucentDepth)return;this._frustumsDrawn===1?this._textureToComposite=this._drawClassificationFBO.getColorTexture():this._textureToComposite=this._accumulationFBO.getColorTexture(),(e.frameState.passes.pick?this._compositeCommand.derivedCommands.pick:this._compositeCommand).execute(e.context,t),LVt(this,e,t)};function LVt(e,t,n){if(!e._hasTranslucentDepth)return;let i=n.framebuffer;n.framebuffer=e._drawClassificationFBO.framebuffer,e._clearColorCommand.execute(t._context,n),n.framebuffer=i,e._frustumsDrawn>1&&(n.framebuffer=e._accumulationFBO.framebuffer,e._clearColorCommand.execute(t._context,n)),e._hasTranslucentDepth=!1,e._frustumsDrawn=0}Mx.prototype.isSupported=function(){return this._supported};Mx.prototype.isDestroyed=function(){return!1};Mx.prototype.destroy=function(){return uRe(this),mRe(this),l(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),l(this._packDepthCommand)&&(this._packDepthCommand.shaderProgram=this._packDepthCommand.shaderProgram&&this._packDepthCommand.shaderProgram.destroy()),me(this)};var Gw=Mx;function WVt(){this.command=void 0,this.near=void 0,this.far=void 0}function R3(e,t,n){let i=e.context,o;i.depthTexture&&(o=new xw);let r;e._useOIT&&i.depthTexture&&(r=new Sw(i));let s=new rc(i);s.viewport=$e.clone(n),this.camera=t,this._cameraClone=Ro.clone(t),this._cameraStartFired=!1,this._cameraMovedTime=void 0,this.viewport=n,this.passState=s,this.pickFramebuffer=new Cw(i),this.snapFramebuffer=void 0,this.pickDepthFramebuffer=new Vw,this.sceneFramebuffer=new aZ,this.edgeFramebuffer=new bw,this.planarFillIdFramebuffer=new gw,this.globeDepth=o,this.globeTranslucencyFramebuffer=new Tw,this.oit=r,this.translucentTileClassification=new Gw(i),this.pickDepths=[],this.frustumCommandsList=[],this.debugFrustumStatistics=void 0,this._commandExtents=[]}var cte=new h,lte=new h;function vVt(e,t,n){let i=Math.max(h.maximumComponent(h.abs(e.position,cte)),h.maximumComponent(h.abs(t.position,lte))),o=1/Math.max(1,i);return h.multiplyByScalar(e.position,o,cte),h.multiplyByScalar(t.position,o,lte),h.equalsEpsilon(cte,lte,n)&&h.equalsEpsilon(e.direction,t.direction,n)&&h.equalsEpsilon(e.up,t.up,n)&&h.equalsEpsilon(e.right,t.right,n)&&I.equalsEpsilon(e.transform,t.transform,n)&&e.frustum.equalsEpsilon(t.frustum,n)}R3.prototype.checkForCameraUpdates=function(e){let t=this.camera,n=this._cameraClone;return vVt(t,n,L.EPSILON15)?(this._cameraStartFired&&Tn()-this._cameraMovedTime>e.cameraEventWaitTime&&(t.moveEnd.raiseEvent(),this._cameraStartFired=!1),!1):(this._cameraStartFired||(t.moveStart.raiseEvent(),this._cameraStartFired=!0),this._cameraMovedTime=Tn(),Ro.clone(t,n),!0)};function FVt(e,t,n,i){let{frameState:o}=t,{camera:r,useLogDepth:s}=o,a=s?t.logarithmicDepthFarToNearRatio:t.farToNearRatio,c=t.mode===se.SCENE2D,d=t.nearToFarDistance2D;i*=1+L.EPSILON2,n=Math.min(Math.max(n,r.frustum.near),r.frustum.far),i=Math.max(Math.min(i,r.frustum.far),n);let u;c?(i=Math.min(i,r.position.z+t.nearToFarDistance2D),n=Math.min(n,i),u=Math.ceil(Math.max(1,i-n)/t.nearToFarDistance2D)):u=Math.ceil(Math.log(i/n)/Math.log(a));let{frustumCommandsList:m}=e;m.length=u;for(let p=0;p<u;++p){let b,f;c?(b=Math.min(i-d,n+p*d),f=Math.min(i,b+d)):(b=Math.max(n,Math.pow(a,p)*n),f=Math.min(i,a*b)),l(m[p])?(m[p].near=b,m[p].far=f):m[p]=new yw(b,f)}}function IVt(e,t,n){let{command:i,near:o,far:r}=n;t.debugShowFrustums&&(i.debugOverlappingFrustums=0);let{frustumCommandsList:s}=e;for(let a=0;a<s.length;++a){let c=s[a];if(o>c.far)continue;if(r<c.near)break;let d=i.pass,u=c.indices[d]++;if(c.commands[d][u]=i,t.debugShowFrustums&&(i.debugOverlappingFrustums|=1<<a),i.executeInClosestFrustum)break}if(t.debugShowFrustums){let{debugFrustumStatistics:a}=e,{debugOverlappingFrustums:c}=i,d=a.commandsInFrustums;d[c]=l(d[c])?d[c]+1:1,++a.totalCommands}t.updateDerivedCommands(i)}var hRe=new Os,PVt=new Dr;R3.prototype.createPotentiallyVisibleSet=function(e){let{frameState:t}=e,{camera:n,commandList:i,shadowState:o}=t,{positionWC:r,directionWC:s,frustum:a}=n,c=e._computeCommandList,d=e._overlayCommandList;e.debugShowFrustums&&(this.debugFrustumStatistics={totalCommands:0,commandsInFrustums:{}});let u=this.frustumCommandsList;for(let P=0;P<u.length;++P)for(let N=0;N<We.NUMBER_OF_PASSES;++N)u[P].indices[N]=0;c.length=0,d.length=0;let m=this._commandExtents,p=m.length,b=0,f=+Number.MAX_VALUE,y=-Number.MAX_VALUE,{shadowsEnabled:_}=o,S=+Number.MAX_VALUE,Z=-Number.MAX_VALUE,V=Number.MAX_VALUE,C=t.mode===se.SCENE3D?t.occluder:void 0,{cullingVolume:G}=t,E=hRe.planes;for(let P=0;P<5;++P)E[P]=G.planes[P];G=hRe;for(let P=0;P<i.length;++P){let N=i[P],{pass:g,boundingVolume:R}=N;if(g===We.COMPUTE)c.push(N);else if(g===We.OVERLAY)d.push(N);else{let A,W;if(l(R)){if(!e.isVisible(G,N,C))continue;let Y=R.computePlaneDistances(r,s,PVt);if(A=Y.start,W=Y.stop,f=Math.min(f,A),y=Math.max(y,W),_&&N.receiveShadows&&A<_g.MAXIMUM_DISTANCE&&!(g===We.GLOBE&&A<-100&&W>100)){let D=W-A;g!==We.GLOBE&&A<100&&(V=Math.min(V,D)),S=Math.min(S,A),Z=Math.max(Z,W)}}else N instanceof mi?(A=a.near,W=a.far):(A=a.near,W=a.far,f=Math.min(f,A),y=Math.max(y,W));let X=m[b];l(X)||(X=m[b]=new WVt),X.command=N,X.near=A,X.far=W,b++}}_&&(S=Math.min(Math.max(S,a.near),a.far),Z=Math.max(Math.min(Z,a.far),S),o.nearPlane=S,o.farPlane=Z,o.closestObjectSize=V),FVt(this,e,f,y);for(let P=0;P<b;P++)IVt(this,e,m[P]);if(b<p)for(let P=b;P<p;P++){let N=m[P];if(!l(N.command))break;N.command=void 0}let v=u.length,{frustumSplits:F}=t;F.length=v+1;for(let P=0;P<v;++P)F[P]=u[P].near,P===v-1&&(F[P+1]=u[P].far)};R3.prototype.destroy=function(){this.pickFramebuffer=this.pickFramebuffer&&this.pickFramebuffer.destroy(),this.snapFramebuffer=this.snapFramebuffer&&this.snapFramebuffer.destroy(),this.pickDepthFramebuffer=this.pickDepthFramebuffer&&this.pickDepthFramebuffer.destroy(),this.sceneFramebuffer=this.sceneFramebuffer&&this.sceneFramebuffer.destroy(),this.edgeFramebuffer=this.edgeFramebuffer&&this.edgeFramebuffer.destroy(),this.planarFillIdFramebuffer=this.planarFillIdFramebuffer&&this.planarFillIdFramebuffer.destroy(),this.globeDepth=this.globeDepth&&this.globeDepth.destroy(),this.oit=this.oit&&this.oit.destroy(),this.translucentTileClassification=this.translucentTileClassification&&this.translucentTileClassification.destroy(),this.globeTranslucencyFramebuffer=this.globeTranslucencyFramebuffer&&this.globeTranslucencyFramebuffer.destroy();let e=this.pickDepths;for(let t=0;t<e.length;++t)e[t].destroy()};var lZ=R3;var pRe=.1,XVt=new rh({pass:or.MOST_DETAILED_PRELOAD}),NVt=new rh({pass:or.MOST_DETAILED_PICK}),Aw=new rh({pass:or.PICK});function Va(e){this._mostDetailedRayPicks=[],this.pickRenderStateCache={},this._pickPositionCache={},this._pickPositionCacheDirty=!1;let t=new $e(0,0,1,1),n=new Ro(e);n.frustum=new bn({width:pRe,aspectRatio:1,near:.1}),this._pickOffscreenView=new lZ(e,n,t)}Va.prototype.update=function(){this._pickPositionCacheDirty=!0};Va.prototype.getPickDepth=function(e,t){let n=e.view.pickDepths,i=n[t];return l(i)||(i=new pw,n[t]=i),i};var YVt=new ds,wVt=new h,G3=new h,MVt=new M,kVt=new I;function UVt(e,t,n,i,o){let r=e.camera,s=r.frustum,a=s.offCenterFrustum;l(a)&&(s=a);let c=2*(t.x-o.x)/o.width-1;c*=(s.right-s.left)*.5;let d=2*(o.height-t.y-o.y)/o.height-1;d*=(s.top-s.bottom)*.5;let u=I.clone(r.transform,kVt);r._setTransform(I.IDENTITY);let m=h.clone(r.position,wVt);h.multiplyByScalar(r.right,c,G3),h.add(G3,m,m),h.multiplyByScalar(r.up,d,G3),h.add(G3,m,m),r._setTransform(u),e.mode===se.SCENE2D&&h.fromElements(m.z,m.x,m.y,m);let p=s.getPixelDimensions(o.width,o.height,1,1,MVt),b=YVt;return b.right=p.x*.5,b.left=-b.right,b.top=p.y*.5,b.bottom=-b.top,b.near=s.near,b.far=s.far,b.computeCullingVolume(m,r.directionWC,r.upWC)}var DVt=new Fl,OVt=new M;function BVt(e,t,n,i,o){let r=e.camera,s=r.frustum,a=s.near,c=Math.tan(s.fovy*.5),d=s.aspectRatio*c,u=2*(t.x-o.x)/o.width-1,m=2*(o.height-t.y-o.y)/o.height-1,p=u*a*d,b=m*a*c,f=s.getPixelDimensions(o.width,o.height,1,1,OVt),y=f.x*n*.5,_=f.y*i*.5,S=DVt;return S.top=b+_,S.bottom=b-_,S.right=p+y,S.left=p-y,S.near=a,S.far=s.far,S.computeCullingVolume(r.positionWC,r.directionWC,r.upWC)}function A3(e,t,n,i,o){let r=e.camera.frustum;return r instanceof bn||r instanceof ds?UVt(e,t,n,i,o):BVt(e,t,n,i,o)}var Ew=new $e(0,0,3,3),E3=new M,Lw=new U(0,0,0,0);function dte(e,t,n,i,o){return o.width=n??3,o.height=i??o.width,o.x=t.x-(o.width-1)*.5,o.y=e-t.y-(o.height-1)*.5,o}function L3(e,t,n,i,o,r){let{context:s,frameState:a,defaultView:c}=e,{viewport:d,pickFramebuffer:u}=c,m=r?.framebuffer??u;e.view=c,d.x=0,d.y=0,d.width=s.drawingBufferWidth,d.height=s.drawingBufferHeight;let p=c.passState;p.viewport=$e.clone(d,p.viewport);let b=co.transformWindowToDrawingBuffer(e,t,E3);dte(s.drawingBufferHeight,b,i,o,n),e.jobScheduler.disableThisFrame(),e.updateFrameState(),a.cullingVolume=A3(e,b,n.width,n.height,d),a.invertClassification=!1,a.passes.pick=!0,a.passes.snap=r?.snap??!1,a.tilesetPassState=Aw,s.uniformState.update(a),e.updateEnvironment(),p=m.begin(n,d),e.updateAndExecuteCommands(p,Lw),e.resolveFramebuffers(p)}function W3(e){let{context:t}=e;t.endFrame()}Va.prototype.pickAsync=async function(e,t,n,i,o=1){let{context:r,frameState:s,defaultView:a}=e,{pickFramebuffer:c}=a,d=Ew;L3(e,t,d,n,i);let u;return r.webgl2?u=c.endAsync(d,s,o):(u=c.end(d,o),u=Promise.resolve(u),gt("picking-async-fallback","Fallback to synchronous picking because async operation requires WebGL2 context.")),W3(e),u};Va.prototype.pick=function(e,t,n,i,o=1){let{defaultView:r}=e,{pickFramebuffer:s}=r,a=Ew;L3(e,t,a,n,i);let c=s.end(a,o);return W3(e),c};Va.prototype.pickVoxelCoordinate=function(e,t,n,i){let{context:o,frameState:r,defaultView:s}=e,{viewport:a,pickFramebuffer:c}=s;e.view=s,a.x=0,a.y=0,a.width=o.drawingBufferWidth,a.height=o.drawingBufferHeight;let d=s.passState;d.viewport=$e.clone(a,d.viewport);let u=co.transformWindowToDrawingBuffer(e,t,E3),m=dte(o.drawingBufferHeight,u,n,i,Ew);e.jobScheduler.disableThisFrame(),e.updateFrameState(),r.cullingVolume=A3(e,u,m.width,m.height,a),r.invertClassification=!1,r.passes.pickVoxel=!0,r.tilesetPassState=Aw,o.uniformState.update(r),e.updateEnvironment(),d=c.begin(m,a),e.updateAndExecuteCommands(d,Lw),e.resolveFramebuffers(d);let p=c.readCenterPixel(m);return o.endFrame(),p};Va.prototype.pickMetadata=function(e,t,n){let{context:i,frameState:o,defaultView:r}=e,{viewport:s,pickFramebuffer:a}=r;e.view=r,s.x=0,s.y=0,s.width=i.drawingBufferWidth,s.height=i.drawingBufferHeight;let c=r.passState;c.viewport=$e.clone(s,c.viewport);let d=co.transformWindowToDrawingBuffer(e,t,E3),u=dte(i.drawingBufferHeight,d,1,1,Ew);e.jobScheduler.disableThisFrame(),e.updateFrameState(),o.cullingVolume=A3(e,d,u.width,u.height,s),o.invertClassification=!1,o.passes.pick=!0,o.tilesetPassState=Aw,o.pickingMetadata=!0,o.pickedMetadataInfo=n,i.uniformState.update(o),e.updateEnvironment(),c=a.begin(u,s),e.updateAndExecuteCommands(c,Lw);let m=e._environmentState.useOIT;e._environmentState.useOIT=!1,e.resolveFramebuffers(c),e._environmentState.useOIT=m;let p=a.readCenterPixel(u);return i.endFrame(),o.pickingMetadata=!1,fw.decodeMetadataValues(n.classProperty,n.metadataProperty,p)};function zVt(e,t){let{defaultView:n,context:i,frameState:o,environmentState:r}=e,{viewport:s,pickDepthFramebuffer:a}=n;e.view=n,s.x=0,s.y=0,s.width=i.drawingBufferWidth,s.height=i.drawingBufferHeight;let c=n.passState;c.viewport=$e.clone(s,c.viewport),e.clearPasses(o.passes),o.passes.pick=!0,o.passes.depth=!0,o.cullingVolume=A3(e,t,1,1,s),o.tilesetPassState=Aw,e.updateEnvironment(),r.renderTranslucentDepthForPick=!0,c=a.update(i,t,s),e.updateAndExecuteCommands(c,Lw),e.resolveFramebuffers(c),i.endFrame()}var HVt=new Bi,KVt=new Fl,JVt=new bn,jVt=new ds;Va.prototype.pickPositionWorldCoordinates=function(e,t,n){if(!e.useDepthPicking)return;let i=t.toString();if(this._pickPositionCacheDirty)this._pickPositionCache={},this._pickPositionCacheDirty=!1;else if(this._pickPositionCache.hasOwnProperty(i))return h.clone(this._pickPositionCache[i],n);let{context:o,frameState:r,camera:s,defaultView:a}=e,{uniformState:c}=o;e.view=a;let d=co.transformWindowToDrawingBuffer(e,t,E3);e.pickTranslucentDepth?zVt(e,d):(e.updateFrameState(),c.update(r),e.updateEnvironment()),d.y=e.drawingBufferHeight-d.y;let u;l(s.frustum.fov)?u=s.frustum.clone(HVt):l(s.frustum.infiniteProjectionMatrix)?u=s.frustum.clone(KVt):l(s.frustum.width)?u=s.frustum.clone(JVt):u=s.frustum.clone(jVt);let{frustumCommandsList:m}=a,p=m.length;for(let b=0;b<p;++b){let y=this.getPickDepth(e,b).getDepth(o,d.x,d.y);if(l(y)&&y>0&&y<1){let _=m[b],S;return e.mode===se.SCENE2D?(S=s.position.z,s.position.z=S-_.near+1,u.far=Math.max(1,_.far-_.near),u.near=1,c.update(r),c.updateFrustum(u)):(u.near=_.near*(b!==0?e.opaqueFrustumNearOffset:1),u.far=_.far,c.updateFrustum(u)),n=co.drawingBufferToWorldCoordinates(e,d,y,n),e.mode===se.SCENE2D&&(s.position.z=S,c.update(r)),this._pickPositionCache[i]=h.clone(n),n}}this._pickPositionCache[i]=void 0};var QVt=new fe;Va.prototype.pickPosition=function(e,t,n){if(n=this.pickPositionWorldCoordinates(e,t,n),l(n)&&e.mode!==se.SCENE3D){h.fromElements(n.y,n.z,n.x,n);let i=e.mapProjection,o=i.ellipsoid,r=i.unproject(n,QVt);o.cartographicToCartesian(r,n)}return n};function qVt(e,t,n,i,o,r){for(let s of e){let a=s.object,c=s.position,d=s.exclude;if(l(c)&&!l(a))return n.push(s),!0;if(!l(a)||!l(a.primitive)||!d&&(n.push(s),n.length>=t))return!0;let u=a.primitive,m=!1;if(typeof u.getGeometryInstanceAttributes=="function"&&l(a.id)){let p=u.getGeometryInstanceAttributes(a.id);l(p)&&l(p.show)&&(m=!0,p.show=vn.toValue(!1,p.show),o.push(p))}a instanceof Qs&&(m=!0,a.show=!1,r.push(a)),m||(u.show=!1,i.push(u))}}function bRe(e,t){let n=[],i=[],o=[],r=[];l(t)||(t=Number.MAX_VALUE);let s=e(t);for(;l(s)&&s.length>0&&!qVt(s,t,n,i,o,r);)s=e(t-n.length);for(let a=0;a<i.length;++a)i[a].show=!0;for(let a=0;a<o.length;++a){let c=o[a];c.show=vn.toValue(!0,c.show)}for(let a=0;a<r.length;++a)r[a].show=!0;return n}Va.prototype.drillPick=function(e,t,n,i,o){return bRe(a=>this.pick(e,t,i,o,a).map(d=>({object:d,position:void 0,exclude:!1})),n).map(a=>a.object)};var fRe=new h,$Vt=new h;function e1t(e,t,n){this.ray=e,this.width=t,this.tilesets=n,this.ready=!1;let i=this;this.promise=new Promise(o=>{i._completePick=()=>{o()}})}function gRe(e,t,n,i){let o=t.direction,r=h.mostOrthogonalAxis(o,fRe),s=h.cross(o,r,fRe),a=h.cross(o,s,$Vt);return i.position=t.origin,i.direction=o,i.up=a,i.right=s,i.frustum.width=n??pRe,i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC)}function t1t(e,t,n){let i=t.frameState,{ray:o,width:r,tilesets:s}=n,a=e._pickOffscreenView.camera,c=gRe(e,o,r,a),d=XVt;d.camera=a,d.cullingVolume=c;let u=!0,m=s.length;for(let p=0;p<m;++p){let b=s[p];b.show&&t.primitives.contains(b)&&(b.updateForPass(i,d),u=u&&d.ready)}return u&&n._completePick(),u}Va.prototype.updateMostDetailedRayPicks=function(e){let t=this._mostDetailedRayPicks;for(let n=0;n<t.length;++n)t1t(this,e,t[n])&&t.splice(n--,1)};function yRe(e,t,n){for(let i=0;i<e.length;++i){let o=e.get(i);o.show&&(l(o.isCesium3DTileset)?(!l(t)||t.indexOf(o)===-1)&&n.push(o):o instanceof Bl&&yRe(o,t,n))}}function v3(e,t,n,i,o,r){let s=[];if(yRe(t.primitives,i,s),s.length===0)return Promise.resolve(r());let a=new e1t(n,o,s);return e._mostDetailedRayPicks.push(a),a.promise.then(function(){return r()})}function n1t(e,t){return!l(e)||!l(t)||t.length===0?!1:t.indexOf(e)>-1||t.indexOf(e.primitive)>-1||t.indexOf(e.id)>-1}function i1t(e,t,n,i,o,r,s){let{context:a,frameState:c}=t,d=a.uniformState,u=e._pickOffscreenView;t.view=u,gRe(e,n,o,u.camera);let m=$e.clone(u.viewport,Ew),p=u.pickFramebuffer.begin(m,u.viewport);t.jobScheduler.disableThisFrame(),t.updateFrameState(),c.invertClassification=!1,c.passes.pick=!0,c.passes.offscreen=!0,s?c.tilesetPassState=NVt:c.tilesetPassState=Aw,d.update(c),t.updateEnvironment(),t.updateAndExecuteCommands(p,Lw),t.resolveFramebuffers(p);let b,f=u.pickFramebuffer.end(m,1)[0];if(t.context.depthTexture){let{frustumCommandsList:y}=u,_=y.length;for(let S=0;S<_;++S){let V=e.getPickDepth(t,S).getDepth(a,0,0);if(l(V)&&V>0&&V<1){let C=y[S],G=C.near*(S!==0?t.opaqueFrustumNearOffset:1),E=C.far,v=G+V*(E-G);b=fn.getPoint(n,v);break}}}if(t.view=t.defaultView,a.endFrame(),l(f)||l(b))return{object:f,position:b,exclude:!l(b)&&r||n1t(f,i)}}function ute(e,t,n,i,o,r,s,a){return bRe(function(){let d=i1t(e,t,n,o,r,s,a);return d?[d]:void 0},i)}function ER(e,t,n,i,o,r,s){let a=ute(e,t,n,1,i,o,r,s);if(a.length>0)return a[0]}function F3(e,t){return new Promise((n,i)=>{t.then(function(o){let r=e.postRender.addEventListener(function(){r(),n(o)});e.requestRender()}).catch(function(o){i(o)})})}Va.prototype.pickFromRay=function(e,t,n,i){return ER(this,e,t,n,i,!1,!1)};Va.prototype.drillPickFromRay=function(e,t,n,i,o){return ute(this,e,t,n,i,o,!1,!1)};Va.prototype.pickFromRayMostDetailed=function(e,t,n,i){let o=this;return t=fn.clone(t),n=l(n)?n.slice():n,F3(e,v3(o,e,t,n,i,function(){return ER(o,e,t,n,i,!1,!0)}))};Va.prototype.drillPickFromRayMostDetailed=function(e,t,n,i,o){let r=this;return t=fn.clone(t),i=l(i)?i.slice():i,F3(e,v3(r,e,t,i,o,function(){return ute(r,e,t,n,i,o,!1,!0)}))};var o1t=new h,r1t=new h,s1t=new fn,xRe=new fe;function mte(e,t){let n=e.ellipsoid,i=Ei._defaultMaxTerrainHeight,o=n.geodeticSurfaceNormalCartographic(t,r1t),r=fe.toCartesian(t,n,o1t),s=s1t;s.origin=r,s.direction=o;let a=new fn;return fn.getPoint(s,i,a.origin),h.negate(o,a.direction),a}function TRe(e,t){let n=e.ellipsoid,i=fe.fromCartesian(t,n,xRe);return mte(e,i)}function _Re(e,t){let n=e.ellipsoid;return fe.fromCartesian(t,n,xRe).height}function a1t(e,t,n,i,o){let r=mte(t,n);return v3(e,t,r,i,o,function(){let s=ER(e,t,r,i,o,!0,!0);if(l(s))return _Re(t,s.position)})}function c1t(e,t,n,i,o,r){let s=TRe(t,n);return v3(e,t,s,i,o,function(){let a=ER(e,t,s,i,o,!0,!0);if(l(a))return h.clone(a.position,r)})}Va.prototype.sampleHeight=function(e,t,n,i){let o=mte(e,t),r=ER(this,e,o,n,i,!0,!1);if(l(r))return _Re(e,r.position)};Va.prototype.clampToHeight=function(e,t,n,i,o){let r=TRe(e,t),s=ER(this,e,r,n,i,!0,!1);if(l(s))return h.clone(s.position,o)};Va.prototype.sampleHeightMostDetailed=function(e,t,n,i){n=l(n)?n.slice():n;let o=t.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=a1t(this,e,t[s],n,i);return F3(e,Promise.all(r).then(function(s){let a=s.length;for(let c=0;c<a;++c)t[c].height=s[c];return t}))};Va.prototype.clampToHeightMostDetailed=function(e,t,n,i){n=l(n)?n.slice():n;let o=t.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=c1t(this,e,t[s],n,i,t[s]);return F3(e,Promise.all(r).then(function(s){let a=s.length;for(let c=0;c<a;++c)t[c]=s[c];return t}))};Va.prototype.destroy=function(){this._pickOffscreenView=this._pickOffscreenView&&this._pickOffscreenView.destroy()};var Ww=Va;var boo=x(T(),1);var Oio=x(T(),1);var Bto=x(T(),1),vw=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; #ifdef AUTO_EXPOSURE uniform sampler2D autoExposure; #else uniform float exposure; #endif void main() { vec4 fragmentColor = texture(colorTexture, v_textureCoordinates); vec3 color = fragmentColor.rgb; #ifdef AUTO_EXPOSURE color /= texture(autoExposure, vec2(0.5)).r; #else color *= vec3(exposure); #endif color = czm_acesTonemapping(color); color = czm_inverseGamma(color); out_FragColor = vec4(color, fragmentColor.a); } `;var Hto=x(T(),1),Fw=`precision highp float; uniform sampler2D randomTexture; uniform sampler2D depthTexture; uniform float intensity; uniform float bias; uniform float lengthCap; uniform int stepCount; uniform int directionCount; vec4 pixelToEye(vec2 screenCoordinate) { vec2 uv = screenCoordinate / czm_viewport.zw; float depth = czm_readDepth(depthTexture, uv); vec2 xy = 2.0 * uv - vec2(1.0); vec4 posEC = czm_inverseProjection * vec4(xy, depth, 1.0); posEC = posEC / posEC.w; // Avoid numerical error at far plane if (depth >= 1.0) { posEC.z = czm_currentFrustum.y; } return posEC; } // Reconstruct surface normal in eye coordinates, avoiding edges vec3 getNormalXEdge(vec3 positionEC) { // Find the 3D surface positions at adjacent screen pixels vec2 centerCoord = gl_FragCoord.xy; vec3 positionLeft = pixelToEye(centerCoord + vec2(-1.0, 0.0)).xyz; vec3 positionRight = pixelToEye(centerCoord + vec2(1.0, 0.0)).xyz; vec3 positionUp = pixelToEye(centerCoord + vec2(0.0, 1.0)).xyz; vec3 positionDown = pixelToEye(centerCoord + vec2(0.0, -1.0)).xyz; // Compute potential tangent vectors vec3 dx0 = positionEC - positionLeft; vec3 dx1 = positionRight - positionEC; vec3 dy0 = positionEC - positionDown; vec3 dy1 = positionUp - positionEC; // The shorter tangent is more likely to be on the same surface vec3 dx = length(dx0) < length(dx1) ? dx0 : dx1; vec3 dy = length(dy0) < length(dy1) ? dy0 : dy1; return normalize(cross(dx, dy)); } const float sqrtTwoPi = sqrt(czm_twoPi); float gaussian(float x, float standardDeviation) { float argument = x / standardDeviation; return exp(-0.5 * argument * argument) / (sqrtTwoPi * standardDeviation); } void main(void) { vec4 positionEC = pixelToEye(gl_FragCoord.xy); // Exit if we are too close to the back of the frustum, where the depth value is invalid. float maxValidDepth = czm_currentFrustum.y - lengthCap; if (-positionEC.z > maxValidDepth) { out_FragColor = vec4(1.0); return; } vec3 normalEC = getNormalXEdge(positionEC.xyz); float gaussianVariance = lengthCap * sqrt(-positionEC.z); // Choose a step length such that the marching stops just before 3 * variance. float stepLength = 3.0 * gaussianVariance / (float(stepCount) + 1.0); float metersPerPixel = czm_metersPerPixel(positionEC, 1.0); // Minimum step is 1 pixel to avoid double sampling float pixelsPerStep = max(stepLength / metersPerPixel, 1.0); stepLength = pixelsPerStep * metersPerPixel; float angleStepScale = 1.0 / float(directionCount); float angleStep = angleStepScale * czm_twoPi; float cosStep = cos(angleStep); float sinStep = sin(angleStep); mat2 rotateStep = mat2(cosStep, sinStep, -sinStep, cosStep); // Initial sampling direction (different for each pixel) const float randomTextureSize = 255.0; vec2 randomTexCoord = fract(gl_FragCoord.xy / randomTextureSize); float randomVal = texture(randomTexture, randomTexCoord).x; vec2 sampleDirection = vec2(cos(angleStep * randomVal), sin(angleStep * randomVal)); float ao = 0.0; // Loop over sampling directions #if __VERSION__ == 300 for (int i = 0; i < directionCount; i++) { #else for (int i = 0; i < 16; i++) { if (i >= directionCount) { break; } #endif sampleDirection = rotateStep * sampleDirection; float localAO = 0.0; vec2 radialStep = pixelsPerStep * sampleDirection; #if __VERSION__ == 300 for (int j = 0; j < stepCount; j++) { #else for (int j = 0; j < 64; j++) { if (j >= stepCount) { break; } #endif // Step along sampling direction, away from output pixel vec2 samplePixel = floor(gl_FragCoord.xy + float(j + 1) * radialStep) + vec2(0.5); // Exit if we stepped off the screen if (clamp(samplePixel, vec2(0.0), czm_viewport.zw) != samplePixel) { break; } // Compute step vector from output point to sampled point vec4 samplePositionEC = pixelToEye(samplePixel); vec3 stepVector = samplePositionEC.xyz - positionEC.xyz; // Estimate the angle from the surface normal. float dotVal = clamp(dot(normalEC, normalize(stepVector)), 0.0, 1.0); dotVal = czm_branchFreeTernary(dotVal > bias, dotVal, 0.0); dotVal = czm_branchFreeTernary(-samplePositionEC.z <= maxValidDepth, dotVal, 0.0); // Weight contribution based on the distance from the output point float sampleDistance = length(stepVector); float weight = gaussian(sampleDistance, gaussianVariance); localAO += weight * dotVal; } ao += localAO; } ao *= angleStepScale * stepLength; ao = 1.0 - clamp(ao, 0.0, 1.0); ao = pow(ao, intensity); out_FragColor = vec4(vec3(ao), 1.0); } `;var Jto=x(T(),1),Iw=`uniform sampler2D colorTexture; uniform sampler2D ambientOcclusionTexture; uniform bool ambientOcclusionOnly; in vec2 v_textureCoordinates; void main(void) { vec4 color = texture(colorTexture, v_textureCoordinates); vec4 ao = texture(ambientOcclusionTexture, v_textureCoordinates); out_FragColor = ambientOcclusionOnly ? ao : ao * color; } `;var Qto=x(T(),1),Pw=`uniform sampler2D colorTexture; uniform float gradations; in vec2 v_textureCoordinates; void main(void) { vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb; #ifdef CZM_SELECTED_FEATURE if (czm_selected()) { out_FragColor = vec4(rgb, 1.0); return; } #endif float luminance = czm_luminance(rgb); float darkness = luminance * gradations; darkness = (darkness - fract(darkness)) / gradations; out_FragColor = vec4(vec3(darkness), 1.0); } `;var $to=x(T(),1),Xw=`uniform sampler2D colorTexture; uniform sampler2D bloomTexture; uniform bool glowOnly; in vec2 v_textureCoordinates; void main(void) { vec4 color = texture(colorTexture, v_textureCoordinates); #ifdef CZM_SELECTED_FEATURE if (czm_selected()) { out_FragColor = color; return; } #endif vec4 bloom = texture(bloomTexture, v_textureCoordinates); out_FragColor = glowOnly ? bloom : bloom + color; } `;var tno=x(T(),1),Nw=`uniform sampler2D colorTexture; uniform float brightness; in vec2 v_textureCoordinates; void main(void) { vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb; vec3 target = vec3(0.0); out_FragColor = vec4(mix(target, rgb, brightness), 1.0); } `;var ino=x(T(),1),Yw=`uniform sampler2D colorTexture; uniform float contrast; uniform float brightness; in vec2 v_textureCoordinates; void main(void) { vec3 sceneColor = texture(colorTexture, v_textureCoordinates).xyz; sceneColor = czm_RGBToHSB(sceneColor); sceneColor.z += brightness; sceneColor = czm_HSBToRGB(sceneColor); float factor = (259.0 * (contrast + 255.0)) / (255.0 * (259.0 - contrast)); sceneColor = factor * (sceneColor - vec3(0.5)) + vec3(0.5); out_FragColor = vec4(sceneColor, 1.0); } `;var rno=x(T(),1),ww=`uniform sampler2D colorTexture; uniform sampler2D blurTexture; uniform sampler2D depthTexture; uniform float focalDistance; in vec2 v_textureCoordinates; vec4 toEye(vec2 uv, float depth) { vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0)); vec4 posInCamera = czm_inverseProjection * vec4(xy, depth, 1.0); posInCamera = posInCamera / posInCamera.w; return posInCamera; } float computeDepthBlur(float depth) { float f; if (depth < focalDistance) { f = (focalDistance - depth) / (focalDistance - czm_currentFrustum.x); } else { f = (depth - focalDistance) / (czm_currentFrustum.y - focalDistance); f = pow(f, 0.1); } f *= f; f = clamp(f, 0.0, 1.0); return pow(f, 0.5); } void main(void) { float depth = czm_readDepth(depthTexture, v_textureCoordinates); vec4 posInCamera = toEye(v_textureCoordinates, depth); float d = computeDepthBlur(-posInCamera.z); out_FragColor = mix(texture(colorTexture, v_textureCoordinates), texture(blurTexture, v_textureCoordinates), d); } `;var ano=x(T(),1),Mw=`uniform sampler2D depthTexture; in vec2 v_textureCoordinates; void main(void) { float depth = czm_readDepth(depthTexture, v_textureCoordinates); out_FragColor = vec4(vec3(depth), 1.0); } `;var lno=x(T(),1),kw=`uniform sampler2D depthTexture; uniform float length; uniform vec4 color; in vec2 v_textureCoordinates; void main(void) { float directions[3]; directions[0] = -1.0; directions[1] = 0.0; directions[2] = 1.0; float scalars[3]; scalars[0] = 3.0; scalars[1] = 10.0; scalars[2] = 3.0; float padx = czm_pixelRatio / czm_viewport.z; float pady = czm_pixelRatio / czm_viewport.w; #ifdef CZM_SELECTED_FEATURE bool selected = false; for (int i = 0; i < 3; ++i) { float dir = directions[i]; selected = selected || czm_selected(vec2(-padx, dir * pady)); selected = selected || czm_selected(vec2(padx, dir * pady)); selected = selected || czm_selected(vec2(dir * padx, -pady)); selected = selected || czm_selected(vec2(dir * padx, pady)); if (selected) { break; } } if (!selected) { out_FragColor = vec4(color.rgb, 0.0); return; } #endif float horizEdge = 0.0; float vertEdge = 0.0; for (int i = 0; i < 3; ++i) { float dir = directions[i]; float scale = scalars[i]; horizEdge -= texture(depthTexture, v_textureCoordinates + vec2(-padx, dir * pady)).x * scale; horizEdge += texture(depthTexture, v_textureCoordinates + vec2(padx, dir * pady)).x * scale; vertEdge -= texture(depthTexture, v_textureCoordinates + vec2(dir * padx, -pady)).x * scale; vertEdge += texture(depthTexture, v_textureCoordinates + vec2(dir * padx, pady)).x * scale; } float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge); out_FragColor = vec4(color.rgb, len > length ? color.a : 0.0); } `;var uno=x(T(),1),Uw=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; #ifdef AUTO_EXPOSURE uniform sampler2D autoExposure; #else uniform float exposure; #endif // See slides 142 and 143: // http://www.gdcvault.com/play/1012459/Uncharted_2__HDR_Lighting void main() { vec4 fragmentColor = texture(colorTexture, v_textureCoordinates); vec3 color = fragmentColor.rgb; #ifdef AUTO_EXPOSURE float exposure = texture(autoExposure, vec2(0.5)).r; color /= exposure; #else color *= vec3(exposure); #endif const float A = 0.22; // shoulder strength const float B = 0.30; // linear strength const float C = 0.10; // linear angle const float D = 0.20; // toe strength const float E = 0.01; // toe numerator const float F = 0.30; // toe denominator const float white = 11.2; // linear white point value vec3 c = ((color * (A * color + C * B) + D * E) / (color * ( A * color + B) + D * F)) - E / F; float w = ((white * (A * white + C * B) + D * E) / (white * ( A * white + B) + D * F)) - E / F; c = czm_inverseGamma(c / w); out_FragColor = vec4(c, fragmentColor.a); } `;var hno=x(T(),1),Dw=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; #ifdef AUTO_EXPOSURE uniform sampler2D autoExposure; #else uniform float exposure; #endif void main() { vec4 fragmentColor = texture(colorTexture, v_textureCoordinates); vec3 color = fragmentColor.rgb; #ifdef AUTO_EXPOSURE color /= texture(autoExposure, vec2(0.5)).r; #else color *= vec3(exposure); #endif color = czm_pbrNeutralTonemapping(color); color = czm_inverseGamma(color); out_FragColor = vec4(color, fragmentColor.a); } `;var pno=x(T(),1),Ow=`in vec2 v_textureCoordinates; uniform sampler2D colorTexture; const float fxaaQualitySubpix = 0.5; const float fxaaQualityEdgeThreshold = 0.125; const float fxaaQualityEdgeThresholdMin = 0.0833; void main() { vec2 fxaaQualityRcpFrame = vec2(1.0) / czm_viewport.zw; vec4 color = FxaaPixelShader( v_textureCoordinates, colorTexture, fxaaQualityRcpFrame, fxaaQualitySubpix, fxaaQualityEdgeThreshold, fxaaQualityEdgeThresholdMin); float alpha = texture(colorTexture, v_textureCoordinates).a; out_FragColor = vec4(color.rgb, alpha); } `;var gno=x(T(),1),kx=`#define SAMPLES 8 uniform float delta; uniform float sigma; uniform float direction; // 0.0 for x direction, 1.0 for y direction uniform sampler2D colorTexture; #ifdef USE_STEP_SIZE uniform float stepSize; #else uniform vec2 step; #endif in vec2 v_textureCoordinates; // Incremental Computation of the Gaussian: // https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch40.html void main() { vec2 st = v_textureCoordinates; vec2 dir = vec2(1.0 - direction, direction); #ifdef USE_STEP_SIZE vec2 step = vec2(stepSize * (czm_pixelRatio / czm_viewport.zw)); #else vec2 step = step; #endif vec3 g; g.x = 1.0 / (sqrt(czm_twoPi) * sigma); g.y = exp((-0.5 * delta * delta) / (sigma * sigma)); g.z = g.y * g.y; vec4 result = texture(colorTexture, st) * g.x; for (int i = 1; i < SAMPLES; ++i) { g.xy *= g.yz; vec2 offset = float(i) * dir * step; result += texture(colorTexture, st - offset) * g.x; result += texture(colorTexture, st + offset) * g.x; } out_FragColor = result; } `;var xno=x(T(),1),Bw=`uniform sampler2D colorTexture; uniform sampler2D dirtTexture; uniform sampler2D starTexture; uniform vec2 dirtTextureDimensions; uniform float distortion; uniform float ghostDispersal; uniform float haloWidth; uniform float dirtAmount; uniform float earthRadius; uniform float intensity; in vec2 v_textureCoordinates; // whether it is in space or not // 6500000.0 is empirical value #define DISTANCE_TO_SPACE 6500000.0 // return ndc from world coordinate biased earthRadius vec4 getNDCFromWC(vec3 WC, float earthRadius) { vec4 positionEC = czm_view * vec4(WC, 1.0); positionEC = vec4(positionEC.x + earthRadius, positionEC.y, positionEC.z, 1.0); vec4 positionWC = czm_eyeToWindowCoordinates(positionEC); return czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0); } // Check if current pixel is included Earth // if then mask it gradually float isInEarth(vec2 texcoord, vec2 sceneSize) { vec2 NDC = texcoord * 2.0 - 1.0; vec4 earthPosSC = getNDCFromWC(vec3(0.0), 0.0); vec4 earthPosSCEdge = getNDCFromWC(vec3(0.0), earthRadius * 1.5); NDC.xy -= earthPosSC.xy; float X = abs(NDC.x) * sceneSize.x; float Y = abs(NDC.y) * sceneSize.y; return clamp(0.0, 1.0, max(sqrt(X * X + Y * Y) / max(abs(earthPosSCEdge.x * sceneSize.x), 1.0) - 0.8 , 0.0)); } // For Chromatic effect vec4 textureDistorted(sampler2D tex, vec2 texcoord, vec2 direction, vec3 distortion, bool isSpace) { vec2 sceneSize = czm_viewport.zw; vec3 color; if(isSpace) { color.r = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture(tex, texcoord + direction * distortion.r).r; color.g = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture(tex, texcoord + direction * distortion.g).g; color.b = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture(tex, texcoord + direction * distortion.b).b; } else { color.r = texture(tex, texcoord + direction * distortion.r).r; color.g = texture(tex, texcoord + direction * distortion.g).g; color.b = texture(tex, texcoord + direction * distortion.b).b; } return vec4(clamp(color, 0.0, 1.0), 0.0); } void main(void) { vec4 originalColor = texture(colorTexture, v_textureCoordinates); vec3 rgb = originalColor.rgb; bool isSpace = length(czm_viewerPositionWC.xyz) > DISTANCE_TO_SPACE; // Sun position vec4 sunPos = czm_morphTime == 1.0 ? vec4(czm_sunPositionWC, 1.0) : vec4(czm_sunPositionColumbusView.zxy, 1.0); vec4 sunPositionEC = czm_view * sunPos; vec4 sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC); sunPos = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0); // If sun is not in the screen space, use original color. if(!isSpace || !((sunPos.x >= -1.1 && sunPos.x <= 1.1) && (sunPos.y >= -1.1 && sunPos.y <= 1.1))) { // Lens flare is disabled when not in space until #5932 is fixed. // https://github.com/CesiumGS/cesium/issues/5932 out_FragColor = originalColor; return; } vec2 texcoord = vec2(1.0) - v_textureCoordinates; vec2 pixelSize = czm_pixelRatio / czm_viewport.zw; vec2 invPixelSize = 1.0 / pixelSize; vec3 distortionVec = pixelSize.x * vec3(-distortion, 0.0, distortion); // ghost vector to image centre: vec2 ghostVec = (vec2(0.5) - texcoord) * ghostDispersal; vec3 direction = normalize(vec3(ghostVec, 0.0)); // sample ghosts: vec4 result = vec4(0.0); vec4 ghost = vec4(0.0); for (int i = 0; i < 4; ++i) { vec2 offset = fract(texcoord + ghostVec * float(i)); // Only bright spots from the centre of the source image ghost += textureDistorted(colorTexture, offset, direction.xy, distortionVec, isSpace); } result += ghost; // sample halo vec2 haloVec = normalize(ghostVec) * haloWidth; float weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5)); weightForHalo = pow(1.0 - weightForHalo, 5.0); result += textureDistorted(colorTexture, texcoord + haloVec, direction.xy, distortionVec, isSpace) * weightForHalo * 1.5; // dirt on lens vec2 dirtTexCoords = (v_textureCoordinates * invPixelSize) / dirtTextureDimensions; if (dirtTexCoords.x > 1.0) { dirtTexCoords.x = mod(floor(dirtTexCoords.x), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.x) : fract(dirtTexCoords.x); } if (dirtTexCoords.y > 1.0) { dirtTexCoords.y = mod(floor(dirtTexCoords.y), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.y) : fract(dirtTexCoords.y); } result += dirtAmount * texture(dirtTexture, dirtTexCoords); // Rotating starburst texture's coordinate // dot(czm_view[0].xyz, vec3(0.0, 0.0, 1.0)) + dot(czm_view[1].xyz, vec3(0.0, 1.0, 0.0)) float camrot = czm_view[0].z + czm_view[1].y; float cosValue = cos(camrot); float sinValue = sin(camrot); mat3 rotation = mat3( cosValue, -sinValue, 0.0, sinValue, cosValue, 0.0, 0.0, 0.0, 1.0 ); vec3 st1 = vec3(v_textureCoordinates * 2.0 - vec2(1.0), 1.0); vec3 st2 = vec3((rotation * st1).xy, 1.0); vec3 st3 = st2 * 0.5 + vec3(0.5); vec2 lensStarTexcoord = st3.xy; float weightForLensFlare = length(vec3(sunPos.xy, 0.0)); float oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0); if (!isSpace) { result *= oneMinusWeightForLensFlare * intensity * 0.2; } else { result *= oneMinusWeightForLensFlare * intensity; result *= texture(starTexture, lensStarTexcoord) * pow(weightForLensFlare, 1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0; } result += texture(colorTexture, v_textureCoordinates); out_FragColor = result; } `;var _no=x(T(),1),zw=`uniform sampler2D colorTexture; uniform vec3 white; in vec2 v_textureCoordinates; #ifdef AUTO_EXPOSURE uniform sampler2D autoExposure; #else uniform float exposure; #endif // See equation 4: // http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf void main() { vec4 fragmentColor = texture(colorTexture, v_textureCoordinates); vec3 color = fragmentColor.rgb; #ifdef AUTO_EXPOSURE float exposure = texture(autoExposure, vec2(0.5)).r; color /= exposure; #else color *= vec3(exposure); #endif color = (color * (1.0 + color / white)) / (1.0 + color); color = czm_inverseGamma(color); out_FragColor = vec4(color, fragmentColor.a); } `;var Zno=x(T(),1),Hw=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; float rand(vec2 co) { return fract(sin(dot(co.xy ,vec2(12.9898, 78.233))) * 43758.5453); } void main(void) { float noiseValue = rand(v_textureCoordinates + sin(czm_frameNumber)) * 0.1; vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb; vec3 green = vec3(0.0, 1.0, 0.0); out_FragColor = vec4((noiseValue + rgb) * green, 1.0); } `;var Cno=x(T(),1),Kw=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; #ifdef AUTO_EXPOSURE uniform sampler2D autoExposure; #else uniform float exposure; #endif // See equation 3: // http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf void main() { vec4 fragmentColor = texture(colorTexture, v_textureCoordinates); vec3 color = fragmentColor.rgb; #ifdef AUTO_EXPOSURE float exposure = texture(autoExposure, vec2(0.5)).r; color /= exposure; #else color *= vec3(exposure); #endif color = color / (1.0 + color); color = czm_inverseGamma(color); out_FragColor = vec4(color, fragmentColor.a); } `;var Gno=x(T(),1),Jw=`uniform sampler2D colorTexture; uniform sampler2D silhouetteTexture; in vec2 v_textureCoordinates; void main(void) { vec4 silhouetteColor = texture(silhouetteTexture, v_textureCoordinates); vec4 color = texture(colorTexture, v_textureCoordinates); out_FragColor = mix(color, silhouetteColor, silhouetteColor.a); } `;var Eno=x(T(),1);/** * @license * Copyright (c) 2014-2015, NVIDIA CORPORATION. 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 NVIDIA CORPORATION 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 ``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. */var jw=`/** * @license * Copyright (c) 2014-2015, NVIDIA CORPORATION. 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 NVIDIA CORPORATION 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 \`\`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. */ // NVIDIA GameWorks Graphics Samples GitHub link: https://github.com/NVIDIAGameWorks/GraphicsSamples // Original source (archived): https://archive.org/details/nvidiagame-works-graphics-samples-master // Original FXAA 3.11 shader link: https://github.com/NVIDIAGameWorks/GraphicsSamples/blob/master/samples/es3-kepler/FXAA/FXAA3_11.h // Shader link in fork: https://github.com/lyntel/GraphicsSamples/blob/3d30817ebeeade64fe6a4fc3aa1fe4265c29b6fd/samples/es3-kepler/FXAA/FXAA3_11.h // Steps used to integrate into Cesium: // * The following defines are set: // #define FXAA_PC 1 // #define FXAA_WEBGL_1 1 // #define FXAA_GREEN_AS_LUMA 1 // #define FXAA_EARLY_EXIT 1 // #define FXAA_GLSL_120 1 // * All other preprocessor directives besides the FXAA_QUALITY__P* directives were removed. // * Double underscores are invalid for preprocessor directives so replace them with a single underscore. Replace // /FXAA_QUALITY__P(.*)/g with /FXAA_QUALITY__P$1/. // * There are no implicit conversions from ivec* to vec* so replace: // #define FxaaInt2 ivec2 // with // #define FxaaInt2 vec2 // * The texture2DLod function is only available in vertex shaders so replace: // #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0) // #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0) // with // #define FxaaTexTop(t, p) texture(t, p) // #define FxaaTexOff(t, p, o, r) texture(t, p + (o * r)) // * FXAA_QUALITY_PRESET is prepended in the javascript code. We may want to expose that setting in the future. // * The following parameters to FxaaPixelShader are unused and can be removed: // fxaaConsolePosPos // fxaaConsoleRcpFrameOpt // fxaaConsoleRcpFrameOpt2 // fxaaConsole360RcpFrameOpt2 // fxaaConsoleEdgeSharpness // fxaaConsoleEdgeThreshold // fxaaConsoleEdgeThresholdMi // fxaaConsole360ConstDir // // Choose the quality preset. // This needs to be compiled into the shader as it effects code. // Best option to include multiple presets is to // in each shader define the preset, then include this file. // // OPTIONS // ----------------------------------------------------------------------- // 10 to 15 - default medium dither (10=fastest, 15=highest quality) // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality) // 39 - no dither, very expensive // // NOTES // ----------------------------------------------------------------------- // 12 = slightly faster then FXAA 3.9 and higher edge quality (default) // 13 = about same speed as FXAA 3.9 and better than 12 // 23 = closest to FXAA 3.9 visually and performance wise // _ = the lowest digit is directly related to performance // _ = the highest digit is directly related to style // //#define FXAA_QUALITY_PRESET 12 #if (FXAA_QUALITY_PRESET == 10) #define FXAA_QUALITY_PS 3 #define FXAA_QUALITY_P0 1.5 #define FXAA_QUALITY_P1 3.0 #define FXAA_QUALITY_P2 12.0 #endif #if (FXAA_QUALITY_PRESET == 11) #define FXAA_QUALITY_PS 4 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 3.0 #define FXAA_QUALITY_P3 12.0 #endif #if (FXAA_QUALITY_PRESET == 12) #define FXAA_QUALITY_PS 5 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 4.0 #define FXAA_QUALITY_P4 12.0 #endif #if (FXAA_QUALITY_PRESET == 13) #define FXAA_QUALITY_PS 6 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 4.0 #define FXAA_QUALITY_P5 12.0 #endif #if (FXAA_QUALITY_PRESET == 14) #define FXAA_QUALITY_PS 7 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 4.0 #define FXAA_QUALITY_P6 12.0 #endif #if (FXAA_QUALITY_PRESET == 15) #define FXAA_QUALITY_PS 8 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 4.0 #define FXAA_QUALITY_P7 12.0 #endif #if (FXAA_QUALITY_PRESET == 20) #define FXAA_QUALITY_PS 3 #define FXAA_QUALITY_P0 1.5 #define FXAA_QUALITY_P1 2.0 #define FXAA_QUALITY_P2 8.0 #endif #if (FXAA_QUALITY_PRESET == 21) #define FXAA_QUALITY_PS 4 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 8.0 #endif #if (FXAA_QUALITY_PRESET == 22) #define FXAA_QUALITY_PS 5 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 8.0 #endif #if (FXAA_QUALITY_PRESET == 23) #define FXAA_QUALITY_PS 6 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 8.0 #endif #if (FXAA_QUALITY_PRESET == 24) #define FXAA_QUALITY_PS 7 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 3.0 #define FXAA_QUALITY_P6 8.0 #endif #if (FXAA_QUALITY_PRESET == 25) #define FXAA_QUALITY_PS 8 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 4.0 #define FXAA_QUALITY_P7 8.0 #endif #if (FXAA_QUALITY_PRESET == 26) #define FXAA_QUALITY_PS 9 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 2.0 #define FXAA_QUALITY_P7 4.0 #define FXAA_QUALITY_P8 8.0 #endif #if (FXAA_QUALITY_PRESET == 27) #define FXAA_QUALITY_PS 10 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 2.0 #define FXAA_QUALITY_P7 2.0 #define FXAA_QUALITY_P8 4.0 #define FXAA_QUALITY_P9 8.0 #endif #if (FXAA_QUALITY_PRESET == 28) #define FXAA_QUALITY_PS 11 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 2.0 #define FXAA_QUALITY_P7 2.0 #define FXAA_QUALITY_P8 2.0 #define FXAA_QUALITY_P9 4.0 #define FXAA_QUALITY_P10 8.0 #endif #if (FXAA_QUALITY_PRESET == 29) #define FXAA_QUALITY_PS 12 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 2.0 #define FXAA_QUALITY_P7 2.0 #define FXAA_QUALITY_P8 2.0 #define FXAA_QUALITY_P9 2.0 #define FXAA_QUALITY_P10 4.0 #define FXAA_QUALITY_P11 8.0 #endif #if (FXAA_QUALITY_PRESET == 39) #define FXAA_QUALITY_PS 12 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.0 #define FXAA_QUALITY_P2 1.0 #define FXAA_QUALITY_P3 1.0 #define FXAA_QUALITY_P4 1.0 #define FXAA_QUALITY_P5 1.5 #define FXAA_QUALITY_P6 2.0 #define FXAA_QUALITY_P7 2.0 #define FXAA_QUALITY_P8 2.0 #define FXAA_QUALITY_P9 2.0 #define FXAA_QUALITY_P10 4.0 #define FXAA_QUALITY_P11 8.0 #endif #define FxaaBool bool #define FxaaFloat float #define FxaaFloat2 vec2 #define FxaaFloat3 vec3 #define FxaaFloat4 vec4 #define FxaaHalf float #define FxaaHalf2 vec2 #define FxaaHalf3 vec3 #define FxaaHalf4 vec4 #define FxaaInt2 vec2 #define FxaaTex sampler2D #define FxaaSat(x) clamp(x, 0.0, 1.0) #define FxaaTexTop(t, p) texture(t, p) #define FxaaTexOff(t, p, o, r) texture(t, p + (o * r)) FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; } FxaaFloat4 FxaaPixelShader( // // Use noperspective interpolation here (turn off perspective interpolation). // {xy} = center of pixel FxaaFloat2 pos, // // Input color texture. // {rgb_} = color in linear or perceptual color space // if (FXAA_GREEN_AS_LUMA == 0) // {___a} = luma in perceptual color space (not linear) FxaaTex tex, // // Only used on FXAA Quality. // This must be from a constant/uniform. // {x_} = 1.0/screenWidthInPixels // {_y} = 1.0/screenHeightInPixels FxaaFloat2 fxaaQualityRcpFrame, // // Only used on FXAA Quality. // This used to be the FXAA_QUALITY_SUBPIX define. // It is here now to allow easier tuning. // Choose the amount of sub-pixel aliasing removal. // This can effect sharpness. // 1.00 - upper limit (softer) // 0.75 - default amount of filtering // 0.50 - lower limit (sharper, less sub-pixel aliasing removal) // 0.25 - almost off // 0.00 - completely off FxaaFloat fxaaQualitySubpix, // // Only used on FXAA Quality. // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define. // It is here now to allow easier tuning. // The minimum amount of local contrast required to apply algorithm. // 0.333 - too little (faster) // 0.250 - low quality // 0.166 - default // 0.125 - high quality // 0.063 - overkill (slower) FxaaFloat fxaaQualityEdgeThreshold, // // Only used on FXAA Quality. // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define. // It is here now to allow easier tuning. // Trims the algorithm from processing darks. // 0.0833 - upper limit (default, the start of visible unfiltered edges) // 0.0625 - high quality (faster) // 0.0312 - visible limit (slower) // Special notes when using FXAA_GREEN_AS_LUMA, // Likely want to set this to zero. // As colors that are mostly not-green // will appear very dark in the green channel! // Tune by looking at mostly non-green content, // then start at zero and increase until aliasing is a problem. FxaaFloat fxaaQualityEdgeThresholdMin ) { /*--------------------------------------------------------------------------*/ FxaaFloat2 posM; posM.x = pos.x; posM.y = pos.y; FxaaFloat4 rgbyM = FxaaTexTop(tex, posM); #define lumaM rgbyM.y FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy)); FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy)); FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy)); FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy)); /*--------------------------------------------------------------------------*/ FxaaFloat maxSM = max(lumaS, lumaM); FxaaFloat minSM = min(lumaS, lumaM); FxaaFloat maxESM = max(lumaE, maxSM); FxaaFloat minESM = min(lumaE, minSM); FxaaFloat maxWN = max(lumaN, lumaW); FxaaFloat minWN = min(lumaN, lumaW); FxaaFloat rangeMax = max(maxWN, maxESM); FxaaFloat rangeMin = min(minWN, minESM); FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold; FxaaFloat range = rangeMax - rangeMin; FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled); FxaaBool earlyExit = range < rangeMaxClamped; /*--------------------------------------------------------------------------*/ if(earlyExit) return rgbyM; /*--------------------------------------------------------------------------*/ FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy)); FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy)); FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy)); FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy)); /*--------------------------------------------------------------------------*/ FxaaFloat lumaNS = lumaN + lumaS; FxaaFloat lumaWE = lumaW + lumaE; FxaaFloat subpixRcpRange = 1.0/range; FxaaFloat subpixNSWE = lumaNS + lumaWE; FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS; FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE; /*--------------------------------------------------------------------------*/ FxaaFloat lumaNESE = lumaNE + lumaSE; FxaaFloat lumaNWNE = lumaNW + lumaNE; FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE; FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE; /*--------------------------------------------------------------------------*/ FxaaFloat lumaNWSW = lumaNW + lumaSW; FxaaFloat lumaSWSE = lumaSW + lumaSE; FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2); FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2); FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW; FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE; FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4; FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4; /*--------------------------------------------------------------------------*/ FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE; FxaaFloat lengthSign = fxaaQualityRcpFrame.x; FxaaBool horzSpan = edgeHorz >= edgeVert; FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE; /*--------------------------------------------------------------------------*/ if(!horzSpan) lumaN = lumaW; if(!horzSpan) lumaS = lumaE; if(horzSpan) lengthSign = fxaaQualityRcpFrame.y; FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM; /*--------------------------------------------------------------------------*/ FxaaFloat gradientN = lumaN - lumaM; FxaaFloat gradientS = lumaS - lumaM; FxaaFloat lumaNN = lumaN + lumaM; FxaaFloat lumaSS = lumaS + lumaM; FxaaBool pairN = abs(gradientN) >= abs(gradientS); FxaaFloat gradient = max(abs(gradientN), abs(gradientS)); if(pairN) lengthSign = -lengthSign; FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange); /*--------------------------------------------------------------------------*/ FxaaFloat2 posB; posB.x = posM.x; posB.y = posM.y; FxaaFloat2 offNP; offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x; offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y; if(!horzSpan) posB.x += lengthSign * 0.5; if( horzSpan) posB.y += lengthSign * 0.5; /*--------------------------------------------------------------------------*/ FxaaFloat2 posN; posN.x = posB.x - offNP.x * FXAA_QUALITY_P0; posN.y = posB.y - offNP.y * FXAA_QUALITY_P0; FxaaFloat2 posP; posP.x = posB.x + offNP.x * FXAA_QUALITY_P0; posP.y = posB.y + offNP.y * FXAA_QUALITY_P0; FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0; FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN)); FxaaFloat subpixE = subpixC * subpixC; FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP)); /*--------------------------------------------------------------------------*/ if(!pairN) lumaNN = lumaSS; FxaaFloat gradientScaled = gradient * 1.0/4.0; FxaaFloat lumaMM = lumaM - lumaNN * 0.5; FxaaFloat subpixF = subpixD * subpixE; FxaaBool lumaMLTZero = lumaMM < 0.0; /*--------------------------------------------------------------------------*/ lumaEndN -= lumaNN * 0.5; lumaEndP -= lumaNN * 0.5; FxaaBool doneN = abs(lumaEndN) >= gradientScaled; FxaaBool doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1; FxaaBool doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1; /*--------------------------------------------------------------------------*/ if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 3) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 4) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 5) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 6) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 7) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 8) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 9) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 10) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 11) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 12) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12; /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } /*--------------------------------------------------------------------------*/ FxaaFloat dstN = posM.x - posN.x; FxaaFloat dstP = posP.x - posM.x; if(!horzSpan) dstN = posM.y - posN.y; if(!horzSpan) dstP = posP.y - posM.y; /*--------------------------------------------------------------------------*/ FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero; FxaaFloat spanLength = (dstP + dstN); FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero; FxaaFloat spanLengthRcp = 1.0/spanLength; /*--------------------------------------------------------------------------*/ FxaaBool directionN = dstN < dstP; FxaaFloat dst = min(dstN, dstP); FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP; FxaaFloat subpixG = subpixF * subpixF; FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5; FxaaFloat subpixH = subpixG * fxaaQualitySubpix; /*--------------------------------------------------------------------------*/ FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0; FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH); if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign; if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign; return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM); } `;var Yno=x(T(),1);function dZ(){this._uniformMap=void 0,this._command=void 0,this._colorTexture=void 0,this._depthTexture=void 0,this._ready=!1,this._name="czm_autoexposure",this._logDepthChanged=void 0,this._useLogDepth=void 0,this._framebuffers=void 0,this._previousLuminance=new ai,this._commands=void 0,this._clearCommand=void 0,this._minMaxLuminance=new M,this.enabled=!0,this._enabled=!0,this.minimumLuminance=.1,this.maximumLuminance=10}Object.defineProperties(dZ.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},outputTexture:{get:function(){let e=this._framebuffers;if(l(e))return e[e.length-1].getColorTexture(0)}}});function SRe(e){let t=e._framebuffers;if(!l(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].destroy();e._framebuffers=void 0,e._previousLuminance.destroy(),e._previousLuminance=void 0}function l1t(e,t){SRe(e);let n=e._width,i=e._height,o=t.halfFloatingPointTexture?Me.HALF_FLOAT:Me.FLOAT,r=Math.ceil(Math.log(Math.max(n,i))/Math.log(3)),s=new Array(r);for(let c=0;c<r;++c)n=Math.max(Math.ceil(n/3),1),i=Math.max(Math.ceil(i/3),1),s[c]=new ai,s[c].update(t,n,i,1,o);let a=s[r-1].getColorTexture(0);e._previousLuminance.update(t,a.width,a.height,1,o),e._framebuffers=s}function ZRe(e){let t=e._commands;if(!l(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].shaderProgram.destroy();e._commands=void 0}function d1t(e,t){let n;if(t===0)n={colorTexture:function(){return e._colorTexture},colorTextureDimensions:function(){return e._colorTexture.dimensions}};else{let i=e._framebuffers[t-1].getColorTexture(0);n={colorTexture:function(){return i},colorTextureDimensions:function(){return i.dimensions}}}return n.minMaxLuminance=function(){return e._minMaxLuminance},n.previousLuminance=function(){return e._previousLuminance.getColorTexture(0)},n}function u1t(e,t){let n=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; float sampleTexture(vec2 offset) { `;return e===0?n+=` vec4 color = texture(colorTexture, v_textureCoordinates + offset); return czm_luminance(color.rgb); `:n+=` return texture(colorTexture, v_textureCoordinates + offset).r; `,n+=`} `,n+=`uniform vec2 colorTextureDimensions; uniform vec2 minMaxLuminance; uniform sampler2D previousLuminance; void main() { float color = 0.0; float xStep = 1.0 / colorTextureDimensions.x; float yStep = 1.0 / colorTextureDimensions.y; int count = 0; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { vec2 offset; offset.x = -xStep + float(i) * xStep; offset.y = -yStep + float(j) * yStep; if (offset.x < 0.0 || offset.x > 1.0 || offset.y < 0.0 || offset.y > 1.0) { continue; } color += sampleTexture(offset); ++count; } } if (count > 0) { color /= float(count); } `,e===t-1&&(n+=` float previous = texture(previousLuminance, vec2(0.5)).r; color = clamp(color, minMaxLuminance.x, minMaxLuminance.y); color = previous + (color - previous) / (60.0 * 1.5); color = clamp(color, minMaxLuminance.x, minMaxLuminance.y); `),n+=` out_FragColor = vec4(color); } `,n}function m1t(e,t){ZRe(e);let n=e._framebuffers,i=n.length,o=new Array(i);for(let r=0;r<i;++r)o[r]=t.createViewportQuadCommand(u1t(r,i),{framebuffer:n[r].framebuffer,uniformMap:d1t(e,r)});e._commands=o}dZ.prototype.clear=function(e){let t=this._framebuffers;if(!l(t))return;let n=this._clearCommand;l(n)||(n=this._clearCommand=new mi({color:new U(0,0,0,0),framebuffer:void 0}));let i=t.length;for(let o=0;o<i;++o)t[o].clear(e,n)};dZ.prototype.update=function(e){let t=e.drawingBufferWidth,n=e.drawingBufferHeight;(t!==this._width||n!==this._height)&&(this._width=t,this._height=n,l1t(this,e),m1t(this,e),this._ready||(this._ready=!0)),this._minMaxLuminance.x=this.minimumLuminance,this._minMaxLuminance.y=this.maximumLuminance;let i=this._framebuffers,o=i[i.length-1];i[i.length-1]=this._previousLuminance,this._commands[this._commands.length-1].framebuffer=this._previousLuminance.framebuffer,this._previousLuminance=o};dZ.prototype.execute=function(e,t){this._colorTexture=t;let n=this._commands;if(!l(n))return;let i=n.length;for(let o=0;o<i;++o)n[o].execute(e)};dZ.prototype.isDestroyed=function(){return!1};dZ.prototype.destroy=function(){return SRe(this),ZRe(this),me(this)};var Qw=dZ;var aio=x(T(),1);var Mno=x(T(),1),h1t={NEAREST:0,LINEAR:1},Mu=h1t;function uZ(e){e=e??B.EMPTY_OBJECT;let{name:t=Qn(),fragmentShader:n,uniforms:i,textureScale:o=1,forcePowerOfTwo:r=!1,sampleMode:s=Mu.NEAREST,pixelFormat:a=Be.RGBA,pixelDatatype:c=Me.UNSIGNED_BYTE,clearColor:d=U.BLACK,scissorRectangle:u}=e;this._fragmentShader=n,this._uniforms=i,this._textureScale=o,this._forcePowerOfTwo=r,this._sampleMode=s,this._pixelFormat=a,this._pixelDatatype=c,this._clearColor=d,this._uniformMap=void 0,this._command=void 0,this._colorTexture=void 0,this._depthTexture=void 0,this._idTexture=void 0,this._actualUniforms={},this._dirtyUniforms=[],this._texturesToRelease=[],this._texturesToCreate=[],this._texturePromise=void 0;let m=new rc;m.scissorTest={enabled:!0,rectangle:l(u)?$e.clone(u):new $e},this._passState=m,this._ready=!1,this._name=t,this._logDepthChanged=void 0,this._useLogDepth=void 0,this._selectedIdTexture=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0,this._textureCache=void 0,this._index=void 0,this.enabled=!0,this._enabled=!0}Object.defineProperties(uZ.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},fragmentShader:{get:function(){return this._fragmentShader}},uniforms:{get:function(){return this._uniforms}},textureScale:{get:function(){return this._textureScale}},forcePowerOfTwo:{get:function(){return this._forcePowerOfTwo}},sampleMode:{get:function(){return this._sampleMode}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},clearColor:{get:function(){return this._clearColor}},scissorRectangle:{get:function(){return this._passState.scissorTest.rectangle}},outputTexture:{get:function(){if(l(this._textureCache)){let e=this._textureCache.getFramebuffer(this._name);if(l(e))return e.getColorTexture(0)}}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}});var f1t=/uniform\s+sampler2D\s+depthTexture/g;uZ.prototype._isSupported=function(e){return!f1t.test(this._fragmentShader)||e.depthTexture};function p1t(e,t,n){let i=t[n];return(typeof i=="string"||i instanceof HTMLCanvasElement||i instanceof HTMLImageElement||i instanceof HTMLVideoElement||i instanceof ImageData)&&e._dirtyUniforms.push(n),{get:function(){return t[n]},set:function(o){let r=t[n];t[n]=o;let s=e._actualUniforms,a=s[n];l(a)&&a!==r&&a instanceof Ct&&!l(e._textureCache.getStageByName(n))&&(e._texturesToRelease.push(a),delete s[n],delete s[`${n}Dimensions`]),r instanceof Ct&&e._texturesToRelease.push(r),typeof o=="string"||o instanceof HTMLCanvasElement||o instanceof HTMLImageElement||o instanceof HTMLVideoElement||o instanceof ImageData?e._dirtyUniforms.push(n):s[n]=o}}}function b1t(e,t){return function(){let n=e._actualUniforms[t];return typeof n=="function"?n():n}}function g1t(e,t){return function(){let n=e[t]();if(l(n))return n.dimensions}}function y1t(e){if(l(e._uniformMap))return;let t={},n={},i=e._uniforms,o=e._actualUniforms;for(let r in i){if(!i.hasOwnProperty(r))continue;typeof i[r]!="function"?(t[r]=b1t(e,r),n[r]=p1t(e,i,r)):(t[r]=i[r],n[r]=i[r]),o[r]=i[r];let s=t[r]();(typeof s=="string"||s instanceof Ct||s instanceof HTMLImageElement||s instanceof HTMLCanvasElement||s instanceof HTMLVideoElement)&&(t[`${r}Dimensions`]=g1t(t,r))}e._uniforms={},Object.defineProperties(e._uniforms,n),e._uniformMap=It(t,{colorTexture:function(){return e._colorTexture},colorTextureDimensions:function(){return e._colorTexture.dimensions},depthTexture:function(){return e._depthTexture},depthTextureDimensions:function(){return e._depthTexture.dimensions},czm_idTexture:function(){return e._idTexture},czm_selectedIdTexture:function(){return e._selectedIdTexture},czm_selectedIdTextureStep:function(){return 1/e._selectedIdTexture.width}})}function x1t(e,t){return e=e.replace(/in\s+vec2\s+v_textureCoordinates;/g,""),`#define CZM_SELECTED_FEATURE uniform sampler2D czm_idTexture; uniform sampler2D czm_selectedIdTexture; uniform float czm_selectedIdTextureStep; in vec2 v_textureCoordinates; bool czm_selected(vec2 offset) { bool selected = false; vec4 id = texture(czm_idTexture, v_textureCoordinates + offset); for (int i = 0; i < ${t}; ++i) { vec4 selectedId = texture(czm_selectedIdTexture, vec2((float(i) + 0.5) * czm_selectedIdTextureStep, 0.5)); if (all(equal(id, selectedId))) { return true; } } return false; } bool czm_selected() { return czm_selected(vec2(0.0)); } ${e}`}function T1t(e,t){if(l(e._command)&&!e._logDepthChanged&&!e._selectedDirty)return;let n=e._fragmentShader;if(l(e._selectedIdTexture)){let o=e._selectedIdTexture.width;n=x1t(n,o)}let i=new ze({defines:[e._useLogDepth?"LOG_DEPTH":""],sources:[n]});e._command=t.createViewportQuadCommand(i,{uniformMap:e._uniformMap,owner:e})}function _1t(e){let t=e._sampleMode,n,i;t===Mu.LINEAR?(n=zt.LINEAR,i=ni.LINEAR):(n=zt.NEAREST,i=ni.NEAREST);let o=e._sampler;(!l(o)||o.minificationFilter!==n||o.magnificationFilter!==i)&&(e._sampler=new kt({wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i}))}function S1t(e,t){return function(n){e._texturesToCreate.push({name:t,source:n})}}function Z1t(e,t){return function(){return e._textureCache.getOutputTexture(t)}}function V1t(e,t){let n=e._texturesToRelease;for(let a=0;a<n.length;++a){let c=n[a];l(c)&&c.destroy()}n.length=0;let i=e._texturesToCreate;for(let a=0;a<i.length;++a){let{name:c,source:d}=i[a];e._actualUniforms[c]=new Ct({context:t,source:d})}i.length=0;let o=e._dirtyUniforms;if(o.length===0&&!l(e._texturePromise)){e._ready=!0;return}if(o.length===0||l(e._texturePromise))return;let r=e._uniforms,s=[];for(let a=0;a<o.length;++a){let c=o[a],d=r[c],u=e._textureCache.getStageByName(d);if(l(u))e._actualUniforms[c]=Z1t(e,d);else if(typeof d=="string"){let m=new ve({url:d});s.push(m.fetchImage().then(S1t(e,c)))}else e._texturesToCreate.push({name:c,source:d})}o.length=0,s.length>0?(e._ready=!1,e._texturePromise=Promise.all(s).then(function(){e._ready=!0,e._texturePromise=void 0})):e._ready=!0}function VRe(e){l(e._command)&&(e._command.shaderProgram=e._command.shaderProgram&&e._command.shaderProgram.destroy(),e._command=void 0),e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy();let t=e._textureCache;if(!l(t))return;let n=e._uniforms,i=e._actualUniforms;for(let o in i){if(!i.hasOwnProperty(o))continue;let r=i[o];r instanceof Ct&&(l(t.getStageByName(n[o]))||r.destroy(),e._dirtyUniforms.push(o))}}function C1t(e){let t=l(e._selected)?e._selected.length:0,n=l(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength;if(l(e._selected)&&l(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):l(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&l(e._combinedSelected)){if(!l(e._combinedSelectedShadow))return!0;for(let o=0;o<e._combinedSelected.length;++o)if(e._combinedSelected[o]!==e._combinedSelectedShadow[o])return!0}return i}function R1t(e,t){if(!e._selectedDirty)return;e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy(),e._selectedIdTexture=void 0;let n=e._combinedSelected;if(!l(n))return;let i=0;for(let s=0;s<n.length;++s){let a=n[s];l(a.pickIds)?i+=a.pickIds.length:l(a.pickId)&&++i}if(n.length===0||i===0){let s=new Uint8Array([255,255,255,255]);e._selectedIdTexture=new Ct({context:t,pixelFormat:Be.RGBA,pixelDatatype:Me.UNSIGNED_BYTE,source:{arrayBufferView:s,width:1,height:1},sampler:kt.NEAREST});return}let o=0,r=new Uint8Array(i*4);for(let s=0;s<n.length;++s){let a=n[s];if(l(a.pickIds)){let c=a.pickIds,d=c.length;for(let u=0;u<d;++u){let m=c[u].color;r[o]=U.floatToByte(m.red),r[o+1]=U.floatToByte(m.green),r[o+2]=U.floatToByte(m.blue),r[o+3]=U.floatToByte(m.alpha),o+=4}}else if(l(a.pickId)){let c=a.pickId.color;r[o]=U.floatToByte(c.red),r[o+1]=U.floatToByte(c.green),r[o+2]=U.floatToByte(c.blue),r[o+3]=U.floatToByte(c.alpha),o+=4}}e._selectedIdTexture=new Ct({context:t,pixelFormat:Be.RGBA,pixelDatatype:Me.UNSIGNED_BYTE,source:{arrayBufferView:r,width:i,height:1},sampler:kt.NEAREST})}uZ.prototype.update=function(e,t){if(this.enabled!==this._enabled&&!this.enabled&&VRe(this),this._enabled=this.enabled,!this._enabled||(this._logDepthChanged=t!==this._useLogDepth,this._useLogDepth=t,this._selectedDirty=C1t(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=l(this._selected)?this._selected.length:0,this._parentSelectedLength=l(this._parentSelected)?this._parentSelected.length:0,R1t(this,e),y1t(this),V1t(this,e),T1t(this,e),_1t(this),this._selectedDirty=!1,!this._ready))return;let n=this._textureCache.getFramebuffer(this._name);if(this._command.framebuffer=n,!l(n))return;let i=n.getColorTexture(0),o;(i.width!==e.drawingBufferWidth||i.height!==e.drawingBufferHeight)&&(o=this._renderState,(!l(o)||i.width!==o.viewport.width||i.height!==o.viewport.height)&&(this._renderState=Oe.fromCache({viewport:new $e(0,0,i.width,i.height)}))),this._command.renderState=o};uZ.prototype.execute=function(e,t,n,i){if(!l(this._command)||!l(this._command.framebuffer)||!this._ready||!this._enabled)return;this._colorTexture=t,this._depthTexture=n,this._idTexture=i,kt.equals(this._colorTexture.sampler,this._sampler)||(this._colorTexture.sampler=this._sampler);let o=this.scissorRectangle.width>0&&this.scissorRectangle.height>0?this._passState:void 0;l(o)&&(o.context=e),this._command.execute(e,o)};uZ.prototype.isDestroyed=function(){return!1};uZ.prototype.destroy=function(){return VRe(this),me(this)};var Po=uZ;var hio=x(T(),1);function mZ(e){e=e??B.EMPTY_OBJECT,this._stages=e.stages,this._inputPreviousStageTexture=e.inputPreviousStageTexture??!0;let t=e.name;l(t)||(t=Qn()),this._name=t,this._uniforms=e.uniforms,this._textureCache=void 0,this._index=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0}Object.defineProperties(mZ.prototype,{ready:{get:function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)if(!e[n].ready)return!1;return!0}},name:{get:function(){return this._name}},enabled:{get:function(){return this._stages[0].enabled},set:function(e){let t=this._stages,n=t.length;for(let i=0;i<n;++i)t[i].enabled=e}},uniforms:{get:function(){return this._uniforms}},inputPreviousStageTexture:{get:function(){return this._inputPreviousStageTexture}},length:{get:function(){return this._stages.length}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}});mZ.prototype._isSupported=function(e){let t=this._stages,n=t.length;for(let i=0;i<n;++i)if(!t[i]._isSupported(e))return!1;return!0};mZ.prototype.get=function(e){return this._stages[e]};function G1t(e){let t=l(e._selected)?e._selected.length:0,n=l(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength;if(i=i||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength,l(e._selected)&&l(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):l(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&l(e._combinedSelected)){if(!l(e._combinedSelectedShadow))return!0;t=e._combinedSelected.length;for(let o=0;o<t;++o)if(e._combinedSelected[o]!==e._combinedSelectedShadow[o])return!0}return i}mZ.prototype.update=function(e,t){this._selectedDirty=G1t(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=l(this._selected)?this._selected.length:0,this._parentSelectedLength=l(this._parentSelected)?this._parentSelected.length:0;let n=this._stages,i=n.length;for(let o=0;o<i;++o){let r=n[o];this._selectedDirty&&(r.parentSelected=this._combinedSelected),r.update(e,t)}};mZ.prototype.isDestroyed=function(){return!1};mZ.prototype.destroy=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return me(this)};var Od=mZ;var ns={};function hte(e){let o=`#define USE_STEP_SIZE ${kx}`,r=new Po({name:`${e}_x_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:0},sampleMode:Mu.LINEAR}),s=new Po({name:`${e}_y_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:1},sampleMode:Mu.LINEAR}),a={};return Object.defineProperties(a,{delta:{get:function(){return r.uniforms.delta},set:function(c){let d=r.uniforms,u=s.uniforms;d.delta=u.delta=c}},sigma:{get:function(){return r.uniforms.sigma},set:function(c){let d=r.uniforms,u=s.uniforms;d.sigma=u.sigma=c}},stepSize:{get:function(){return r.uniforms.stepSize},set:function(c){let d=r.uniforms,u=s.uniforms;d.stepSize=u.stepSize=c}}}),new Od({name:e,stages:[r,s],uniforms:a})}ns.createBlurStage=function(){return hte("czm_blur")};ns.createDepthOfFieldStage=function(){let e=hte("czm_depth_of_field_blur"),t=new Po({name:"czm_depth_of_field_composite",fragmentShader:ww,uniforms:{focalDistance:5,blurTexture:e.name}}),n={};return Object.defineProperties(n,{focalDistance:{get:function(){return t.uniforms.focalDistance},set:function(i){t.uniforms.focalDistance=i}},delta:{get:function(){return e.uniforms.delta},set:function(i){e.uniforms.delta=i}},sigma:{get:function(){return e.uniforms.sigma},set:function(i){e.uniforms.sigma=i}},stepSize:{get:function(){return e.uniforms.stepSize},set:function(i){e.uniforms.stepSize=i}}}),new Od({name:"czm_depth_of_field",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};ns.isDepthOfFieldSupported=function(e){return e.context.depthTexture};ns.createEdgeDetectionStage=function(){let e=Qn();return new Po({name:`czm_edge_detection_${e}`,fragmentShader:kw,uniforms:{length:.25,color:U.clone(U.BLACK)}})};ns.isEdgeDetectionSupported=function(e){return e.context.depthTexture};function A1t(e){if(!l(e))return ns.createEdgeDetectionStage();let t=new Od({name:"czm_edge_detection_multiple",stages:e,inputPreviousStageTexture:!1}),n={},i="",o="";for(let a=0;a<e.length;++a)i+=`uniform sampler2D edgeTexture${a}; `,o+=` vec4 edge${a} = texture(edgeTexture${a}, v_textureCoordinates); if (edge${a}.a > 0.0) { color = edge${a}; break; } `,n[`edgeTexture${a}`]=e[a].name;let r=`${i}in vec2 v_textureCoordinates; void main() { vec4 color = vec4(0.0); for (int i = 0; i < ${e.length}; i++) { ${o} } out_FragColor = color; } `,s=new Po({name:"czm_edge_detection_combine",fragmentShader:r,uniforms:n});return new Od({name:"czm_edge_detection_composite",stages:[t,s]})}ns.createSilhouetteStage=function(e){let t=A1t(e),n=new Po({name:"czm_silhouette_color_edges",fragmentShader:Jw,uniforms:{silhouetteTexture:t.name}});return new Od({name:"czm_silhouette",stages:[t,n],inputPreviousStageTexture:!1,uniforms:t.uniforms})};ns.isSilhouetteSupported=function(e){return e.context.depthTexture};ns.createBloomStage=function(){let e=new Po({name:"czm_bloom_contrast_bias",fragmentShader:Yw,uniforms:{contrast:128,brightness:-.3}}),t=hte("czm_bloom_blur"),n=new Od({name:"czm_bloom_contrast_bias_blur",stages:[e,t]}),i=new Po({name:"czm_bloom_generate_composite",fragmentShader:Xw,uniforms:{glowOnly:!1,bloomTexture:n.name}}),o={};return Object.defineProperties(o,{glowOnly:{get:function(){return i.uniforms.glowOnly},set:function(r){i.uniforms.glowOnly=r}},contrast:{get:function(){return e.uniforms.contrast},set:function(r){e.uniforms.contrast=r}},brightness:{get:function(){return e.uniforms.brightness},set:function(r){e.uniforms.brightness=r}},delta:{get:function(){return t.uniforms.delta},set:function(r){t.uniforms.delta=r}},sigma:{get:function(){return t.uniforms.sigma},set:function(r){t.uniforms.sigma=r}},stepSize:{get:function(){return t.uniforms.stepSize},set:function(r){t.uniforms.stepSize=r}}}),new Od({name:"czm_bloom",stages:[n,i],inputPreviousStageTexture:!1,uniforms:o})};ns.createAmbientOcclusionStage=function(){let e=new Po({name:"czm_ambient_occlusion_generate",fragmentShader:Fw,uniforms:{intensity:3,bias:.1,lengthCap:.26,directionCount:8,stepCount:32,randomTexture:void 0}}),t=new Po({name:"czm_ambient_occlusion_composite",fragmentShader:Iw,uniforms:{ambientOcclusionOnly:!1,ambientOcclusionTexture:e.name}}),n={};return Object.defineProperties(n,{intensity:{get:function(){return e.uniforms.intensity},set:function(i){e.uniforms.intensity=i}},bias:{get:function(){return e.uniforms.bias},set:function(i){e.uniforms.bias=i}},lengthCap:{get:function(){return e.uniforms.lengthCap},set:function(i){e.uniforms.lengthCap=i}},directionCount:{get:function(){return e.uniforms.directionCount},set:function(i){e.uniforms.directionCount=i}},stepCount:{get:function(){return e.uniforms.stepCount},set:function(i){e.uniforms.stepCount=i}},randomTexture:{get:function(){return e.uniforms.randomTexture},set:function(i){e.uniforms.randomTexture=i}},ambientOcclusionOnly:{get:function(){return t.uniforms.ambientOcclusionOnly},set:function(i){t.uniforms.ambientOcclusionOnly=i}}}),new Od({name:"czm_ambient_occlusion",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};ns.isAmbientOcclusionSupported=function(e){return e.context.depthTexture};var E1t=`#define FXAA_QUALITY_PRESET 39 ${jw} ${Ow}`;ns.createFXAAStage=function(){return new Po({name:"czm_FXAA",fragmentShader:E1t,sampleMode:Mu.LINEAR})};ns.createAcesTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=vw,new Po({name:"czm_aces",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};ns.createFilmicTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=Uw,new Po({name:"czm_filmic",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};ns.createPbrNeutralTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=Dw,new Po({name:"czm_pbr_neutral",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};ns.createReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=Kw,new Po({name:"czm_reinhard",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};ns.createModifiedReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=zw,new Po({name:"czm_modified_reinhard",fragmentShader:t,uniforms:{white:U.WHITE,autoExposure:void 0,exposure:1}})};ns.createAutoExposureStage=function(){return new Qw};ns.createBlackAndWhiteStage=function(){return new Po({name:"czm_black_and_white",fragmentShader:Pw,uniforms:{gradations:5}})};ns.createBrightnessStage=function(){return new Po({name:"czm_brightness",fragmentShader:Nw,uniforms:{brightness:.5}})};ns.createNightVisionStage=function(){return new Po({name:"czm_night_vision",fragmentShader:Hw})};ns.createDepthViewStage=function(){return new Po({name:"czm_depth_view",fragmentShader:Mw})};ns.createLensFlareStage=function(){return new Po({name:"czm_lens_flare",fragmentShader:Bw,uniforms:{dirtTexture:qt("Assets/Textures/LensFlare/DirtMask.jpg"),starTexture:qt("Assets/Textures/LensFlare/StarBurst.jpg"),intensity:2,distortion:10,ghostDispersal:.4,haloWidth:.4,dirtAmount:.4,earthRadius:ie.WGS84.maximumRadius}})};var ku=ns;var qio=x(T(),1);function Sg(e){this._collection=e,this._framebuffers=[],this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0,this._updateDependencies=!1}function $w(e){for(;l(e.length);)e=e.get(e.length-1);return e.name}function fte(e,t,n,i,o){if(!i.enabled||!i._isSupported(t))return o;let r=n[i.name]={};if(l(o)){let a=e.getStageByName(o);r[$w(a)]=!0}let s=i.uniforms;if(l(s)){let a=Object.getOwnPropertyNames(s),c=a.length;for(let d=0;d<c;++d){let u=s[a[d]];if(typeof u=="string"){let m=e.getStageByName(u);l(m)&&(r[$w(m)]=!0)}}}return i.name}function qw(e,t,n,i,o){if(l(i.enabled)&&!i.enabled||l(i._isSupported)&&!i._isSupported(t))return o;let r=o,s=!l(i.inputPreviousStageTexture)||i.inputPreviousStageTexture,a=o,c=i.length;for(let m=0;m<c;++m){let p=i.get(m);l(p.length)?a=qw(e,t,n,p,o):a=fte(e,t,n,p,o),s&&(o=a)}let d,u;if(s)for(d=1;d<c;++d)u=$w(i.get(d)),l(n[u])||(n[u]={}),n[u][r]=!0;else for(d=1;d<c;++d){u=$w(i.get(d));let m=n[u];for(let p=0;p<d;++p)m[$w(i.get(p))]=!0}return a}function L1t(e,t){let n={};if(l(e.ambientOcclusion)){let i=e.ambientOcclusion,o=e.bloom,r=e._tonemapping,s=e.fxaa,a=qw(e,t,n,i,void 0);a=qw(e,t,n,o,a),a=fte(e,t,n,r,a),a=qw(e,t,n,e,a),fte(e,t,n,s,a)}else qw(e,t,n,e,void 0);return n}function W1t(e,t,n){let o=e._collection.getStageByName(t),r=o._textureScale,s=o._forcePowerOfTwo,a=o._pixelFormat,c=o._pixelDatatype,d=o._clearColor,u,m,p=e._framebuffers,b=p.length;for(u=0;u<b;++u){if(m=p[u],r!==m.textureScale||s!==m.forcePowerOfTwo||a!==m.pixelFormat||c!==m.pixelDatatype||!U.equals(d,m.clearColor))continue;let f=m.stages,y=f.length,_=!1;for(let S=0;S<y;++S)if(n[f[S]]){_=!0;break}if(!_)break}return l(m)&&u<b?(m.stages.push(t),m):(m={textureScale:r,forcePowerOfTwo:s,pixelFormat:a,pixelDatatype:c,clearColor:d,stages:[t],buffer:new ai({pixelFormat:a,pixelDatatype:c}),clear:void 0},p.push(m),m)}function v1t(e,t){let n=L1t(e._collection,t);for(let i in n)n.hasOwnProperty(i)&&(e._stageNameToFramebuffer[i]=W1t(e,i,n[i]))}function pte(e){let t=e._framebuffers,n=t.length;for(let i=0;i<n;++i)t[i].buffer.destroy()}function F1t(e,t){let n=e._width,i=e._height,o=e._framebuffers,r=o.length;for(let s=0;s<r;++s){let a=o[s],c=a.textureScale,d=Math.ceil(n*c),u=Math.ceil(i*c),m=Math.min(d,u);a.forcePowerOfTwo&&(L.isPowerOfTwo(m)||(m=L.nextPowerOfTwo(m)),d=m,u=m),a.buffer.update(t,d,u),a.clear=new mi({color:a.clearColor,framebuffer:a.buffer.framebuffer})}}Sg.prototype.updateDependencies=function(){this._updateDependencies=!0};Sg.prototype.update=function(e){let t=this._collection,n=this._updateDependencies,i=l(t.ambientOcclusion)&&t.ambientOcclusion.enabled&&t.ambientOcclusion._isSupported(e),o=l(t.bloom)&&t.bloom.enabled&&t.bloom._isSupported(e),r=l(t._tonemapping)&&t._tonemapping.enabled&&t._tonemapping._isSupported(e),s=l(t.fxaa)&&t.fxaa.enabled&&t.fxaa._isSupported(e),a=!l(t._activeStages)||t._activeStages.length>0||i||o||r||s;if((n||!a&&this._framebuffers.length>0)&&(pte(this),this._framebuffers.length=0,this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0),!n&&!a)return;this._framebuffers.length===0&&v1t(this,e);let c=e.drawingBufferWidth,d=e.drawingBufferHeight,u=this._width!==c||this._height!==d;!n&&!u||(this._width=c,this._height=d,this._updateDependencies=!1,pte(this),F1t(this,e))};Sg.prototype.clear=function(e){let t=this._framebuffers;for(let n=0;n<t.length;++n)t[n].clear.execute(e)};Sg.prototype.getStageByName=function(e){return this._collection.getStageByName(e)};Sg.prototype.getOutputTexture=function(e){return this._collection.getOutputTexture(e)};Sg.prototype.getFramebuffer=function(e){let t=this._stageNameToFramebuffer[e];if(l(t))return t.buffer.framebuffer};Sg.prototype.isDestroyed=function(){return!1};Sg.prototype.destroy=function(){return pte(this),me(this)};var hZ=Sg;var eoo=x(T(),1),CRe={REINHARD:"REINHARD",MODIFIED_REINHARD:"MODIFIED_REINHARD",FILMIC:"FILMIC",ACES:"ACES",PBR_NEUTRAL:"PBR_NEUTRAL"};Object.freeze(CRe);var Zg=CRe;var bte=[];function od(){let e=ku.createFXAAStage(),t=ku.createAmbientOcclusionStage(),n=ku.createBloomStage();this._autoExposureEnabled=!1,this._autoExposure=ku.createAutoExposureStage(),this._exposure=1,this._tonemapping=void 0,this._tonemapper=void 0,this.tonemapper=Zg.PBR_NEUTRAL;let i=this._tonemapping;e.enabled=!1,t.enabled=!1,n.enabled=!1,i.enabled=!1;let o=new hZ(this),r={},s=bte;for(s.push(e,t,n,i);s.length>0;){let c=s.pop();r[c.name]=c,c._textureCache=o;let d=c.length;if(l(d))for(let u=0;u<d;++u)s.push(c.get(u))}this._stages=[],this._activeStages=[],this._previousActiveStages=[],this._randomTexture=void 0;let a=this;t.uniforms.randomTexture=function(){return a._randomTexture},this._ao=t,this._bloom=n,this._fxaa=e,this._aoEnabled=void 0,this._bloomEnabled=void 0,this._tonemappingEnabled=void 0,this._fxaaEnabled=void 0,this._activeStagesChanged=!1,this._stagesRemoved=!1,this._textureCacheDirty=!1,this._stageNames=r,this._textureCache=o}Object.defineProperties(od.prototype,{ready:{get:function(){let e=!1,t=this._stages,n=t.length;for(let a=n-1;a>=0;--a){let c=t[a];e=e||c.ready&&c.enabled}let i=this._fxaa,o=this._ao,r=this._bloom,s=this._tonemapping;return e=e||i.ready&&i.enabled,e=e||o.ready&&o.enabled,e=e||r.ready&&r.enabled,e=e||s.ready&&s.enabled,e}},fxaa:{get:function(){return this._fxaa}},ambientOcclusion:{get:function(){return this._ao}},bloom:{get:function(){return this._bloom}},length:{get:function(){return gte(this),this._stages.length}},outputTexture:{get:function(){let e=this._fxaa;if(e.enabled&&e.ready)return this.getOutputTexture(e.name);let t=this._stages,n=t.length;for(let s=n-1;s>=0;--s){let a=t[s];if(l(a)&&a.ready&&a.enabled)return this.getOutputTexture(a.name)}let i=this._tonemapping;if(i.enabled&&i.ready)return this.getOutputTexture(i.name);let o=this._bloom;if(o.enabled&&o.ready)return this.getOutputTexture(o.name);let r=this._ao;if(r.enabled&&r.ready)return this.getOutputTexture(r.name)}},hasSelected:{get:function(){let e=this._stages.slice();for(;e.length>0;){let t=e.pop();if(!l(t))continue;if(l(t.selected))return!0;let n=t.length;if(l(n))for(let i=0;i<n;++i)e.push(t.get(i))}return!1}},tonemapper:{get:function(){return this._tonemapper},set:function(e){if(this._tonemapper===e)return;l(this._tonemapping)&&(delete this._stageNames[this._tonemapping.name],this._tonemapping.destroy());let t=this._autoExposureEnabled,n;switch(e){case Zg.REINHARD:n=ku.createReinhardTonemappingStage(t);break;case Zg.MODIFIED_REINHARD:n=ku.createModifiedReinhardTonemappingStage(t);break;case Zg.FILMIC:n=ku.createFilmicTonemappingStage(t);break;case Zg.PBR_NEUTRAL:n=ku.createPbrNeutralTonemappingStage(t);break;default:n=ku.createAcesTonemappingStage(t);break}if(t){let i=this._autoExposure;n.uniforms.autoExposure=function(){return i.outputTexture}}else n.uniforms.exposure=this._exposure;this._tonemapper=e,this._tonemapping=n,l(this._stageNames)&&(this._stageNames[n.name]=n,n._textureCache=this._textureCache),this._textureCacheDirty=!0}},exposure:{get:function(){return this._exposure},set:function(e){this._tonemapping.uniforms.exposure=e,this._exposure=e}}});function gte(e){if(!e._stagesRemoved)return;e._stagesRemoved=!1;let t=[],n=e._stages;for(let i=0,o=0;i<n.length;++i){let r=n[i];r&&(r._index=o++,t.push(r))}e._stages=t}od.prototype.add=function(e){let t=this._stageNames,n=bte;for(n.push(e);n.length>0;){let o=n.pop();t[o.name]=o,o._textureCache=this._textureCache;let r=o.length;if(l(r))for(let s=0;s<r;++s)n.push(o.get(s))}let i=this._stages;return e._index=i.length,i.push(e),this._textureCacheDirty=!0,e};od.prototype.remove=function(e){if(!this.contains(e))return!1;let t=this._stageNames,n=bte;for(n.push(e);n.length>0;){let i=n.pop();delete t[i.name];let o=i.length;if(l(o))for(let r=0;r<o;++r)n.push(i.get(r))}return this._stages[e._index]=void 0,this._stagesRemoved=!0,this._textureCacheDirty=!0,e._index=void 0,e._textureCache=void 0,e.destroy(),!0};od.prototype.contains=function(e){return l(e)&&l(e._index)&&e._textureCache===this._textureCache};od.prototype.get=function(e){return gte(this),this._stages[e]};od.prototype.removeAll=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)this.remove(e[n]);e.length=0};od.prototype.getStageByName=function(e){return this._stageNames[e]};od.prototype.update=function(e,t,n){gte(this);let i=this._activeStages,o=this._activeStages=this._previousActiveStages;this._previousActiveStages=i;let r=this._stages;o.length=r.length;let s=0;for(let S=0;S<r.length;++S){let Z=r[S];Z.ready&&Z.enabled&&Z._isSupported(e)&&(o[s++]=Z)}o.length=s;let a=s!==i.length;if(!a){for(let S=0;S<s;++S)if(o[S]!==i[S]){a=!0;break}}let c=this._ao,d=this._bloom,u=this._autoExposure,m=this._tonemapping,p=this._fxaa;m.enabled=n;let b=c.enabled&&c._isSupported(e),f=d.enabled&&d._isSupported(e),y=m.enabled&&m._isSupported(e),_=p.enabled&&p._isSupported(e);if((a||this._textureCacheDirty||b!==this._aoEnabled||f!==this._bloomEnabled||y!==this._tonemappingEnabled||_!==this._fxaaEnabled)&&(this._textureCache.updateDependencies(),this._aoEnabled=b,this._bloomEnabled=f,this._tonemappingEnabled=y,this._fxaaEnabled=_,this._textureCacheDirty=!1),l(this._randomTexture)&&!b&&(this._randomTexture.destroy(),this._randomTexture=void 0),!l(this._randomTexture)&&b){let Z=new Uint8Array(196608);for(let V=0;V<196608;V+=3)Z[V]=Math.floor(Math.random()*255);this._randomTexture=new Ct({context:e,pixelFormat:Be.RGB,pixelDatatype:Me.UNSIGNED_BYTE,source:{arrayBufferView:Z,width:256,height:256},sampler:new kt({wrapS:sn.REPEAT,wrapT:sn.REPEAT,minificationFilter:zt.NEAREST,magnificationFilter:ni.NEAREST})})}this._textureCache.update(e),p.update(e,t),c.update(e,t),d.update(e,t),m.update(e,t),this._autoExposureEnabled&&u.update(e,t);for(let S=0;S<r.length;++S)r[S].update(e,t);s=0;for(let S=0;S<r.length;++S){let Z=r[S];Z.ready&&Z.enabled&&Z._isSupported(e)&&s++}a=s!==o.length,a&&this.update(e,t,n)};od.prototype.clear=function(e){this._textureCache.clear(e),this._autoExposureEnabled&&this._autoExposure.clear(e)};function fZ(e){for(;l(e.length);)e=e.get(e.length-1);return e.outputTexture}od.prototype.getOutputTexture=function(e){let t=this.getStageByName(e);if(l(t))return fZ(t)};function s0(e,t,n,i,o){if(l(e.execute)){e.execute(t,n,i,o);return}if(e.inputPreviousStageTexture){s0(e.get(0),t,n,i,o);for(let r=1;r<e.length;++r)s0(e.get(r),t,fZ(e.get(r-1)),i,o)}else for(let r=0;r<e.length;++r)s0(e.get(r),t,n,i,o)}od.prototype.execute=function(e,t,n,i){let o=this._activeStages,r=o.length,s=this._fxaa,a=this._ao,c=this._bloom,d=this._autoExposure,u=this._tonemapping,m=a.enabled&&a._isSupported(e),p=c.enabled&&c._isSupported(e),b=this._autoExposureEnabled,f=u.enabled&&u._isSupported(e),y=s.enabled&&s._isSupported(e);if(!y&&!m&&!p&&!f&&r===0)return;let _=t;m&&a.ready&&(s0(a,e,_,n,i),_=fZ(a)),p&&c.ready&&(s0(c,e,_,n,i),_=fZ(c)),b&&d.ready&&s0(d,e,_,n,i),f&&u.ready&&(s0(u,e,_,n,i),_=fZ(u));let S=_;if(r>0){s0(o[0],e,_,n,i);for(let Z=1;Z<r;++Z)s0(o[Z],e,fZ(o[Z-1]),n,i);S=fZ(o[r-1])}y&&s.ready&&s0(s,e,S,n,i)};od.prototype.copy=function(e,t){if(!l(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(Dd,{uniformMap:{colorTexture:function(){return n.outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};od.prototype.isDestroyed=function(){return!1};od.prototype.destroy=function(){return this._fxaa.destroy(),this._ao.destroy(),this._bloom.destroy(),this._autoExposure.destroy(),this._tonemapping.destroy(),this.removeAll(),this._textureCache=this._textureCache&&this._textureCache.destroy(),me(this)};var eM=od;var Ioo=x(T(),1);function pZ(e){this._scene=e,this._currentTweens=[],this._morphHandler=void 0,this._morphCancelled=!1,this._completeMorph=void 0,this._morphToOrthographic=!1}pZ.prototype.completeMorph=function(){l(this._completeMorph)&&this._completeMorph()};pZ.prototype.morphTo2D=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;this._previousMode=n.mode,this._morphToOrthographic=n.camera.frustum instanceof bn,!(this._previousMode===se.SCENE2D||this._previousMode===se.MORPHING)&&(this._scene.morphStart.raiseEvent(this,this._previousMode,se.SCENE2D,!0),n._mode=se.MORPHING,n.camera._setTransform(I.IDENTITY),this._previousMode===se.COLUMBUS_VIEW?mCt(this,e):xCt(this,e,t),e===0&&l(this._completeMorph)&&this._completeMorph())};var I1t=new h,P1t=new h,X1t=new h,N1t=new h,Y1t=new h,w1t=new h,M1t=new h,k1t=new fe,U1t=new I,D1t=new Bi,O1t=new bn,B1t={position:void 0,direction:void 0,up:void 0,position2D:void 0,direction2D:void 0,up2D:void 0,frustum:void 0};pZ.prototype.morphToColumbusView=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,this._previousMode===se.COLUMBUS_VIEW||this._previousMode===se.MORPHING)return;this._scene.morphStart.raiseEvent(this,this._previousMode,se.COLUMBUS_VIEW,!0),n.camera._setTransform(I.IDENTITY);let i=I1t,o=P1t,r=X1t;if(e>0)i.x=0,i.y=-1,i.z=1,i=h.multiplyByScalar(h.normalize(i,i),5*t.maximumRadius,i),h.negate(h.normalize(i,o),o),h.cross(h.UNIT_X,o,r);else{let d=n.camera;if(this._previousMode===se.SCENE2D)h.clone(d.position,i),i.z=d.frustum.right-d.frustum.left,h.negate(h.UNIT_Z,o),h.clone(h.UNIT_Y,r);else{h.clone(d.positionWC,i),h.clone(d.directionWC,o),h.clone(d.upWC,r);let u=t.scaleToGeodeticSurface(i,M1t),m=bt.eastNorthUpToFixedFrame(u,t,U1t);I.inverseTransformation(m,m),n.mapProjection.project(t.cartesianToCartographic(i,k1t),i),I.multiplyByPointAsVector(m,o,o),I.multiplyByPointAsVector(m,r,r)}}let s;this._morphToOrthographic?(s=O1t,s.width=n.camera.frustum.right-n.camera.frustum.left,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight):(s=D1t,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,s.fov=L.toRadians(60));let a=B1t;a.position=i,a.direction=o,a.up=r,a.frustum=s;let c=_Ct(a);tM(this,c),this._previousMode===se.SCENE2D?TCt(this,e,a,c):(a.position2D=I.multiplyByPoint(Ro.TRANSFORM_2D,i,N1t),a.direction2D=I.multiplyByPointAsVector(Ro.TRANSFORM_2D,o,Y1t),a.up2D=I.multiplyByPointAsVector(Ro.TRANSFORM_2D,r,w1t),n._mode=se.MORPHING,XRe(this,e,a,c)),e===0&&l(this._completeMorph)&&this._completeMorph()};var Tte={position:new h,direction:new h,up:new h,frustum:void 0},GRe=new Bi;pZ.prototype.morphTo3D=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,!(this._previousMode===se.SCENE3D||this._previousMode===se.MORPHING)){if(this._scene.morphStart.raiseEvent(this,this._previousMode,se.SCENE3D,!0),n._mode=se.MORPHING,n.camera._setTransform(I.IDENTITY),this._previousMode===se.SCENE2D)nCt(this,e,t);else{let i;e>0?(i=Tte,h.fromDegrees(0,0,5*t.maximumRadius,t,i.position),h.negate(i.position,i.direction),h.normalize(i.direction,i.direction),h.clone(h.UNIT_Z,i.up)):i=ARe(this,t);let o,r=n.camera;r.frustum instanceof bn?o=r.frustum.clone():(o=GRe,o.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,o.fov=L.toRadians(60)),i.frustum=o;let s=YRe(i);tM(this,s),xte(this,e,i,s)}e===0&&l(this._completeMorph)&&this._completeMorph()}};pZ.prototype.isDestroyed=function(){return!1};pZ.prototype.destroy=function(){return I3(this),me(this)};function tM(e,t){if(e._scene.completeMorphOnUserInput){e._morphHandler=new Hs(e._scene.canvas);let n=function(){e._morphCancelled=!0,e._scene.camera.cancelFlight(),t(e)};e._completeMorph=n,e._morphHandler.setInputAction(n,dn.LEFT_DOWN),e._morphHandler.setInputAction(n,dn.MIDDLE_DOWN),e._morphHandler.setInputAction(n,dn.RIGHT_DOWN),e._morphHandler.setInputAction(n,dn.WHEEL)}}function I3(e){let t=e._currentTweens;for(let n=0;n<t.length;++n)t[n].cancelTween();e._currentTweens.length=0,e._morphHandler=e._morphHandler&&e._morphHandler.destroy()}var z1t=new fe,H1t=new h,K1t=new I;function ARe(e,t){let n=e._scene,i=n.camera,o=Tte,r=o.position,s=o.direction,a=o.up,c=n.mapProjection.unproject(i.position,z1t);t.cartographicToCartesian(c,r);let d=t.scaleToGeodeticSurface(r,H1t),u=bt.eastNorthUpToFixedFrame(d,t,K1t);return I.multiplyByPointAsVector(u,i.direction,s),I.multiplyByPointAsVector(u,i.up,a),o}var J1t=new h,j1t=new h,Q1t=new h,q1t=new h,$1t=new h,eCt=new h;function xte(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=h.clone(r.position,J1t),a=h.clone(r.direction,j1t),c=h.clone(r.up,Q1t),d=I.multiplyByPoint(Ro.TRANSFORM_2D_INVERSE,n.position,q1t),u=I.multiplyByPointAsVector(Ro.TRANSFORM_2D_INVERSE,n.direction,$1t),m=I.multiplyByPointAsVector(Ro.TRANSFORM_2D_INVERSE,n.up,eCt);function p(f){ah(s,d,f.time,r.position),ah(a,u,f.time,r.direction),ah(c,m,f.time,r.up),h.cross(r.direction,r.up,r.right),h.normalize(r.right,r.right)}let b=o.tweens.add({duration:t,easingFunction:ls.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){NRe(e,o,0,1,t,i)}});e._currentTweens.push(b)}var tCt=new bn,ERe=new h,LRe=new h,WRe=new h,_te=new h,vRe=new h,FRe=new h;function nCt(e,t,n){t/=3;let i=e._scene,o=i.camera,r;t>0?(r=Tte,h.fromDegrees(0,0,5*n.maximumRadius,n,r.position),h.negate(r.position,r.direction),h.normalize(r.direction,r.direction),h.clone(h.UNIT_Z,r.up)):(o.position.z=o.frustum.right-o.frustum.left,r=ARe(e,n));let s;e._morphToOrthographic?(s=tCt,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.width=o.frustum.right-o.frustum.left):(s=GRe,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.fov=L.toRadians(60)),r.frustum=s;let a=YRe(r);tM(e,a);let c;e._morphToOrthographic?c=function(){xte(e,t,r,a)}:c=function(){PRe(e,t,r,function(){xte(e,t,r,a)})},t>0?(i._mode=se.SCENE2D,o.flyTo({duration:t,destination:h.fromDegrees(0,0,5*n.maximumRadius,n,_te),complete:function(){i._mode=se.MORPHING,c()}})):c()}function ah(e,t,n,i){return h.lerp(e,t,n,i)}function IRe(e,t,n,i,o){let r=e._scene,s=r.camera;if(s.frustum instanceof bn)return;let a=s.frustum.fov,c=L.RADIANS_PER_DEGREE*.5,d=n.position.z*Math.tan(a*.5);s.frustum.far=d/Math.tan(c*.5)+1e7;function u(p){s.frustum.fov=L.lerp(a,c,p.time);let b=d/Math.tan(s.frustum.fov*.5);i(s,b)}let m=r.tweens.add({duration:t,easingFunction:ls.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){s.frustum=n.frustum.clone(),o(e)}});e._currentTweens.push(m)}var iCt=new h,oCt=new h,rCt=new h,yte=new h,sCt=new h,aCt=new h,cCt=new ds,lCt=new fn,dCt=new h,uCt={position:void 0,direction:void 0,up:void 0,frustum:void 0};function mCt(e,t){t*=.5;let n=e._scene,i=n.camera,o=h.clone(i.position,iCt),r=h.clone(i.direction,oCt),s=h.clone(i.up,rCt),a=h.negate(h.UNIT_Z,sCt),c=h.clone(h.UNIT_Y,aCt),d=yte;if(t>0)h.clone(h.ZERO,yte),d.z=5*n.ellipsoid.maximumRadius;else{h.clone(o,yte);let _=lCt;I.multiplyByPoint(Ro.TRANSFORM_2D,o,_.origin),I.multiplyByPointAsVector(Ro.TRANSFORM_2D,r,_.direction);let S=n.globe;if(l(S)){let Z=S.pickWorldCoordinates(_,n,!0,dCt);l(Z)&&(I.multiplyByPoint(Ro.TRANSFORM_2D_INVERSE,Z,d),d.z+=h.distance(o,d))}}let u=cCt;u.right=d.z*.5,u.left=-u.right,u.top=u.right*(n.drawingBufferHeight/n.drawingBufferWidth),u.bottom=-u.top;let m=uCt;m.position=d,m.direction=a,m.up=c,m.frustum=u;let p=wRe(m);tM(e,p);function b(_){ah(o,d,_.time,i.position),ah(r,a,_.time,i.direction),ah(s,c,_.time,i.up),h.cross(i.direction,i.up,i.right),h.normalize(i.right,i.right),i._adjustOrthographicFrustum(!0)}function f(_,S){_.position.z=S}let y=n.tweens.add({duration:t,easingFunction:ls.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:b,complete:function(){IRe(e,t,m,f,p)}});e._currentTweens.push(y)}var RRe=new fe,hCt={position:new h,direction:new h,up:new h,position2D:new h,direction2D:new h,up2D:new h,frustum:new ds},fCt={position:new h,direction:new h,up:new h,frustum:void 0},pCt=new h,bCt=new fn,gCt=new I,yCt=new h;function xCt(e,t,n){t*=.5;let i=e._scene,o=i.camera,r=hCt;if(t>0)h.clone(h.ZERO,r.position),r.position.z=5*n.maximumRadius,h.negate(h.UNIT_Z,r.direction),h.clone(h.UNIT_Y,r.up);else{n.cartesianToCartographic(o.positionWC,RRe),i.mapProjection.project(RRe,r.position),h.negate(h.UNIT_Z,r.direction),h.clone(h.UNIT_Y,r.up);let m=bCt;h.clone(r.position2D,m.origin);let p=h.clone(o.directionWC,m.direction),b=n.scaleToGeodeticSurface(o.positionWC,yCt),f=bt.eastNorthUpToFixedFrame(b,n,gCt);I.inverseTransformation(f,f),I.multiplyByPointAsVector(f,p,p),I.multiplyByPointAsVector(Ro.TRANSFORM_2D,p,p);let y=i.globe;if(l(y)){let _=y.pickWorldCoordinates(m,i,!0,pCt);if(l(_)){let S=h.distance(r.position2D,_);_.x+=S,h.clone(_,r.position2D)}}}function s(m,p){m.position.x=p}I.multiplyByPoint(Ro.TRANSFORM_2D,r.position,r.position2D),I.multiplyByPointAsVector(Ro.TRANSFORM_2D,r.direction,r.direction2D),I.multiplyByPointAsVector(Ro.TRANSFORM_2D,r.up,r.up2D);let a=r.frustum;a.right=r.position.z*.5,a.left=-a.right,a.top=a.right*(i.drawingBufferHeight/i.drawingBufferWidth),a.bottom=-a.top;let c=fCt;I.multiplyByPoint(Ro.TRANSFORM_2D_INVERSE,r.position2D,c.position),h.clone(r.direction,c.direction),h.clone(r.up,c.up),c.frustum=a;let d=wRe(c);tM(e,d);function u(){IRe(e,t,r,s,d)}XRe(e,t,r,u)}function PRe(e,t,n,i){let o=e._scene,r=o.camera,s=r.frustum.right-r.frustum.left;r.frustum=n.frustum.clone();let a=r.frustum.fov,c=L.RADIANS_PER_DEGREE*.5,d=s*Math.tan(a*.5);r.frustum.far=d/Math.tan(c*.5)+1e7,r.frustum.fov=c;function u(p){r.frustum.fov=L.lerp(c,a,p.time),r.position.z=d/Math.tan(r.frustum.fov*.5)}let m=o.tweens.add({duration:t,easingFunction:ls.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){i(e)}});e._currentTweens.push(m)}function TCt(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=h.clone(n.position,_te),a=h.clone(n.direction,vRe),c=h.clone(n.up,FRe);o._mode=se.MORPHING;function d(){r.frustum=n.frustum.clone();let u=h.clone(r.position,ERe),m=h.clone(r.direction,LRe),p=h.clone(r.up,WRe);u.z=s.z;function b(y){ah(u,s,y.time,r.position),ah(m,a,y.time,r.direction),ah(p,c,y.time,r.up),h.cross(r.direction,r.up,r.right),h.normalize(r.right,r.right)}let f=o.tweens.add({duration:t,easingFunction:ls.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:b,complete:function(){i(e)}});e._currentTweens.push(f)}e._morphToOrthographic?d():PRe(e,0,n,d)}function XRe(e,t,n,i){let o=e._scene,r=o.camera,s=h.clone(r.position,ERe),a=h.clone(r.direction,LRe),c=h.clone(r.up,WRe),d=h.clone(n.position2D,_te),u=h.clone(n.direction2D,vRe),m=h.clone(n.up2D,FRe);function p(f){ah(s,d,f.time,r.position),ah(a,u,f.time,r.direction),ah(c,m,f.time,r.up),h.cross(r.direction,r.up,r.right),h.normalize(r.right,r.right),r._adjustOrthographicFrustum(!0)}let b=o.tweens.add({duration:t,easingFunction:ls.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){NRe(e,o,1,0,t,i)}});e._currentTweens.push(b)}function NRe(e,t,n,i,o,r){let s={object:t,property:"morphTime",startValue:n,stopValue:i,duration:o,easingFunction:ls.QUARTIC_OUT};l(r)&&(s.complete=function(){r(e)});let a=t.tweens.addProperty(s);e._currentTweens.push(a)}function YRe(e){return function(t){let n=t._scene;n._mode=se.SCENE3D,n.morphTime=se.getMorphTime(se.SCENE3D),I3(t);let i=n.camera;(t._previousMode!==se.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,h.clone(e.position,i.position),h.clone(e.direction,i.direction),h.clone(e.up,i.up),h.cross(i.direction,i.up,i.right),h.normalize(i.right,i.right),i.frustum=e.frustum.clone());let o=i.frustum;n.frameState.useLogDepth&&(o.near=.1,o.far=1e10);let r=l(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,se.SCENE3D,r)}}function wRe(e){return function(t){let n=t._scene;n._mode=se.SCENE2D,n.morphTime=se.getMorphTime(se.SCENE2D),I3(t);let i=n.camera;h.clone(e.position,i.position),i.position.z=n.ellipsoid.maximumRadius*2,h.clone(e.direction,i.direction),h.clone(e.up,i.up),h.cross(i.direction,i.up,i.right),h.normalize(i.right,i.right),i.frustum=e.frustum.clone();let o=l(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,se.SCENE2D,o)}}function _Ct(e){return function(t){let n=t._scene;n._mode=se.COLUMBUS_VIEW,n.morphTime=se.getMorphTime(se.COLUMBUS_VIEW),I3(t);let i=n.camera;(t._previousModeMode!==se.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,h.clone(e.position,i.position),h.clone(e.direction,i.direction),h.clone(e.up,i.up),h.cross(i.direction,i.up,i.right),h.normalize(i.right,i.right));let o=i.frustum;n.frameState.useLogDepth&&(o.near=.1,o.far=1e10);let r=l(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,se.COLUMBUS_VIEW,r)}}var nM=pZ;var Aro=x(T(),1);var zoo=x(T(),1);var Xoo=x(T(),1),MRe={LEFT_DRAG:0,RIGHT_DRAG:1,MIDDLE_DRAG:2,WHEEL:3,PINCH:4};Object.freeze(MRe);var io=MRe;var BRe=[Ho.SHIFT,Ho.CTRL,Ho.ALT,[Ho.SHIFT,Ho.CTRL],[Ho.SHIFT,Ho.ALT],[Ho.CTRL,Ho.ALT],[Ho.SHIFT,Ho.CTRL,Ho.ALT]];function Oa(e,t){if(!l(t))return`${e}`;let n=Array.isArray(t)?t.toSorted():[t];return`${e}+${n.join("+")}`}function SCt(e,t){M.clone(e.distance.startPosition,t.distance.startPosition),M.clone(e.distance.endPosition,t.distance.endPosition),M.clone(e.angleAndHeight.startPosition,t.angleAndHeight.startPosition),M.clone(e.angleAndHeight.endPosition,t.angleAndHeight.endPosition)}function kRe(e,t,n){let i=Oa(io.PINCH,t),o=e._update,r=e._isDown,s=e._eventStartPosition,a=e._pressTime,c=e._releaseTime;o[i]=!0,r[i]=!1,s[i]=new M;let d=e._movement[i];l(d)||(d=e._movement[i]={}),d.distance={startPosition:new M,endPosition:new M},d.angleAndHeight={startPosition:new M,endPosition:new M},d.prevAngle=0,e._eventHandler.setInputAction(function(u){e._buttonsDown++,r[i]=!0,a[i]=new Date,M.lerp(u.position1,u.position2,.5,s[i])},dn.PINCH_START,t),e._eventHandler.setInputAction(function(){e._buttonsDown=Math.max(e._buttonsDown-1,0),r[i]=!1,c[i]=new Date},dn.PINCH_END,t),e._eventHandler.setInputAction(function(u){if(r[i]){o[i]?(SCt(u,d),o[i]=!1,d.prevAngle=d.angleAndHeight.startPosition.x):(M.clone(u.distance.endPosition,d.distance.endPosition),M.clone(u.angleAndHeight.endPosition,d.angleAndHeight.endPosition));let m=d.angleAndHeight.endPosition.x,p=d.prevAngle,b=Math.PI*2;for(;m>=p+Math.PI;)m-=b;for(;m<p-Math.PI;)m+=b;d.angleAndHeight.endPosition.x=-m*n.clientWidth/12,d.angleAndHeight.startPosition.x=-p*n.clientWidth/12}},dn.PINCH_MOVE,t)}function URe(e,t){let n=Oa(io.WHEEL,t),i=e._pressTime,o=e._releaseTime,r=e._update;r[n]=!0;let s=e._movement[n];l(s)||(s=e._movement[n]={});let a=e._lastMovement[n];l(a)||(a=e._lastMovement[n]={startPosition:new M,endPosition:new M,valid:!1}),s.startPosition=new M,M.clone(M.ZERO,s.startPosition),s.endPosition=new M,e._eventHandler.setInputAction(function(c){let d=7.5*L.toRadians(c);i[n]=o[n]=new Date,s.endPosition.x=0,s.endPosition.y=d,M.clone(s.endPosition,a.endPosition),a.valid=!0,r[n]=!1},dn.WHEEL,t)}function LR(e,t,n){let i=Oa(n,t),o=e._isDown,r=e._eventStartPosition,s=e._pressTime;o[i]=!1,r[i]=new M;let a=e._lastMovement[i];l(a)||(a=e._lastMovement[i]={startPosition:new M,endPosition:new M,valid:!1});let c,d;n===io.LEFT_DRAG?(c=dn.LEFT_DOWN,d=dn.LEFT_UP):n===io.RIGHT_DRAG?(c=dn.RIGHT_DOWN,d=dn.RIGHT_UP):n===io.MIDDLE_DRAG&&(c=dn.MIDDLE_DOWN,d=dn.MIDDLE_UP),e._eventHandler.setInputAction(function(u){e._buttonsDown++,a.valid=!1,o[i]=!0,s[i]=new Date,M.clone(u.position,r[i])},c,t),e._eventHandler.setInputAction(function(){Ste(Oa(n,void 0),e);for(let u of BRe){let m=Oa(n,u);Ste(m,e)}},d,t)}function Ste(e,t){let n=t._releaseTime,i=t._isDown;i[e]&&(t._buttonsDown=Math.max(t._buttonsDown-1,0)),i[e]=!1,n[e]=new Date}function DRe(e,t){M.clone(e.startPosition,t.startPosition),M.clone(e.endPosition,t.endPosition)}function ZCt(e,t,n){let i=n._isDown,o=!1,r=Oa(e,t);for(let[c,d]of Object.entries(i))c.startsWith(e)&&d&&c!==r&&(o=!0,Ste(c,n));if(!o)return;let s=n._pressTime,a=n._lastMovement[r];l(a)||(a=n._lastMovement[r]={startPosition:new M,endPosition:new M,valid:!1}),n._buttonsDown++,a.valid=!1,i[r]=!0,s[r]=new Date}function ORe(e,t){let n=e._update,i=e._movement,o=e._lastMovement,r=e._isDown;for(let s in io)if(io.hasOwnProperty(s)){let a=io[s];if(l(a)){let c=Oa(a,t);n[c]=!0,l(e._lastMovement[c])||(e._lastMovement[c]={startPosition:new M,endPosition:new M,valid:!1}),l(e._movement[c])||(e._movement[c]={startPosition:new M,endPosition:new M})}}e._eventHandler.setInputAction(function(s){for(let a in io)if(io.hasOwnProperty(a)){let c=io[a];if(l(c)){let d=Oa(c,t);ZCt(c,t,e),r[d]&&(n[d]?(DRe(i[d],o[d]),o[d].valid=!0,DRe(s,i[d]),n[d]=!1):M.clone(s.endPosition,i[d].endPosition))}}M.clone(s.endPosition,e._currentMousePosition)},dn.MOUSE_MOVE,t)}function ch(e){this._eventHandler=new Hs(e),this._update={},this._movement={},this._lastMovement={},this._isDown={},this._eventStartPosition={},this._pressTime={},this._releaseTime={},this._buttonsDown=0,this._currentMousePosition=new M,URe(this,void 0),kRe(this,void 0,e),LR(this,void 0,io.LEFT_DRAG),LR(this,void 0,io.RIGHT_DRAG),LR(this,void 0,io.MIDDLE_DRAG),ORe(this,void 0);for(let t of BRe)URe(this,t),kRe(this,t,e),LR(this,t,io.LEFT_DRAG),LR(this,t,io.RIGHT_DRAG),LR(this,t,io.MIDDLE_DRAG),ORe(this,t)}Object.defineProperties(ch.prototype,{currentMousePosition:{get:function(){return this._currentMousePosition}},anyButtonDown:{get:function(){let e=!this._update[Oa(io.WHEEL)]||!this._update[Oa(io.WHEEL,Ho.SHIFT)]||!this._update[Oa(io.WHEEL,Ho.CTRL)]||!this._update[Oa(io.WHEEL,Ho.ALT)];return this._buttonsDown>0||e}}});ch.prototype.isMoving=function(e,t){let n=Oa(e,t);return!this._update[n]};ch.prototype.getMovement=function(e,t){let n=Oa(e,t);return this._movement[n]};ch.prototype.getLastMovement=function(e,t){let n=Oa(e,t),i=this._lastMovement[n];if(i.valid)return i};ch.prototype.isButtonDown=function(e,t){let n=Oa(e,t);return this._isDown[n]};ch.prototype.getStartMousePosition=function(e,t){if(e===io.WHEEL)return this._currentMousePosition;let n=Oa(e,t);return this._eventStartPosition[n]};ch.prototype.getButtonPressTime=function(e,t){let n=Oa(e,t);return this._pressTime[n]};ch.prototype.getButtonReleaseTime=function(e,t){let n=Oa(e,t);return this._releaseTime[n]};ch.prototype.reset=function(){for(let e in this._update)this._update.hasOwnProperty(e)&&(this._update[e]=!0)};ch.prototype.isDestroyed=function(){return!1};ch.prototype.destroy=function(){return this._eventHandler=this._eventHandler&&this._eventHandler.destroy(),me(this)};var iM=ch;var tro=x(T(),1);function P3(e,t,n,i,o,r,s,a,c,d){this._tweens=e,this._tweenjs=t,this._startObject=Je(n),this._stopObject=Je(i),this._duration=o,this._delay=r,this._easingFunction=s,this._update=a,this._complete=c,this.cancel=d,this.needsStart=!0}Object.defineProperties(P3.prototype,{startObject:{get:function(){return this._startObject}},stopObject:{get:function(){return this._stopObject}},duration:{get:function(){return this._duration}},delay:{get:function(){return this._delay}},easingFunction:{get:function(){return this._easingFunction}},update:{get:function(){return this._update}},complete:{get:function(){return this._complete}},tweenjs:{get:function(){return this._tweenjs}}});P3.prototype.cancelTween=function(){this._tweens.remove(this)};function Xf(){this._tweens=[]}Object.defineProperties(Xf.prototype,{length:{get:function(){return this._tweens.length}}});Xf.prototype.add=function(e){if(e=e??B.EMPTY_OBJECT,e.duration===0)return l(e.complete)&&e.complete(),new P3(this);let t=e.duration/kn.SECONDS_PER_MILLISECOND,n=e.delay??0,i=n/kn.SECONDS_PER_MILLISECOND,o=e.easingFunction??ls.LINEAR_NONE,r=e.startObject,s=new the(r);s.to(Je(e.stopObject),t),s.delay(i),s.easing(o),l(e.update)&&s.onUpdate(function(){e.update(r)}),s.onComplete(e.complete??null),s.repeat(e._repeat??0);let a=new P3(this,s,e.startObject,e.stopObject,e.duration,n,o,e.update,e.complete,e.cancel);return this._tweens.push(a),a};Xf.prototype.addProperty=function(e){e=e??B.EMPTY_OBJECT;let t=e.object,n=e.property,i=e.startValue,o=e.stopValue;function r(s){t[n]=s.value}return this.add({startObject:{value:i},stopObject:{value:o},duration:e.duration??3,delay:e.delay,easingFunction:e.easingFunction,update:r,complete:e.complete,cancel:e.cancel,_repeat:e._repeat})};Xf.prototype.addAlpha=function(e){e=e??B.EMPTY_OBJECT;let t=e.material,n=[];for(let o in t.uniforms)t.uniforms.hasOwnProperty(o)&&l(t.uniforms[o])&&l(t.uniforms[o].alpha)&&n.push(o);function i(o){let r=n.length;for(let s=0;s<r;++s)t.uniforms[n[s]].alpha=o.alpha}return this.add({startObject:{alpha:e.startValue??0},stopObject:{alpha:e.stopValue??1},duration:e.duration??3,delay:e.delay,easingFunction:e.easingFunction,update:i,complete:e.complete,cancel:e.cancel})};Xf.prototype.addOffsetIncrement=function(e){e=e??B.EMPTY_OBJECT;let n=e.material.uniforms;return this.addProperty({object:n,property:"offset",startValue:n.offset,stopValue:n.offset+1,duration:e.duration,delay:e.delay,easingFunction:e.easingFunction,update:e.update,cancel:e.cancel,_repeat:1/0})};Xf.prototype.remove=function(e){if(!l(e))return!1;let t=this._tweens.indexOf(e);return t!==-1?(e.tweenjs.stop(),l(e.cancel)&&e.cancel(),this._tweens.splice(t,1),!0):!1};Xf.prototype.removeAll=function(){let e=this._tweens;for(let t=0;t<e.length;++t){let n=e[t];n.tweenjs.stop(),l(n.cancel)&&n.cancel()}e.length=0};Xf.prototype.contains=function(e){return l(e)&&this._tweens.indexOf(e)!==-1};Xf.prototype.get=function(e){return this._tweens[e]};Xf.prototype.update=function(e){let t=this._tweens,n=0;for(e=l(e)?e/kn.SECONDS_PER_MILLISECOND:Tn();n<t.length;){let i=t[n],o=i.tweenjs;if(i.needsStart)i.needsStart=!1,o.start(e);else if(o.update(e))n++;else{if(t[n]?.needsStart)continue;o.stop(),t.splice(n,1)}}};var bZ=Xf;function rM(e){this.enableInputs=!0,this.enableTranslate=!0,this.enableZoom=!0,this.enableRotate=!0,this.enableTilt=!0,this.enableLook=!0,this.inertiaSpin=.9,this.inertiaTranslate=.9,this.inertiaZoom=.8,this.maximumMovementRatio=.1,this.bounceAnimationTime=3,this.minimumZoomDistance=1,this.maximumZoomDistance=Number.POSITIVE_INFINITY,this.zoomFactor=5,this.translateEventTypes=io.LEFT_DRAG,this.zoomEventTypes=[io.RIGHT_DRAG,io.WHEEL,io.PINCH],this.rotateEventTypes=io.LEFT_DRAG,this.tiltEventTypes=[io.MIDDLE_DRAG,io.PINCH,{eventType:io.LEFT_DRAG,modifier:Ho.CTRL},{eventType:io.RIGHT_DRAG,modifier:Ho.CTRL}],this.lookEventTypes={eventType:io.LEFT_DRAG,modifier:Ho.SHIFT};let t=e.ellipsoid??ie.default;this.minimumPickingTerrainHeight=ie.WGS84.equals(t)?15e4:t.minimumRadius*.025,this._minimumPickingTerrainHeight=this.minimumPickingTerrainHeight,this.minimumPickingTerrainDistanceWithInertia=ie.WGS84.equals(t)?4e3:t.minimumRadius*63e-5,this.minimumCollisionTerrainHeight=ie.WGS84.equals(t)?15e3:t.minimumRadius*.0025,this._minimumCollisionTerrainHeight=this.minimumCollisionTerrainHeight,this.minimumTrackBallHeight=ie.WGS84.equals(t)?75e5:t.minimumRadius*1.175,this._minimumTrackBallHeight=this.minimumTrackBallHeight,this.enableCollisionDetection=!0,this.maximumTiltAngle=void 0,this._scene=e,this._globe=void 0,this._ellipsoid=t,this._lastGlobeHeight=0,this._aggregator=new iM(e.canvas),this._lastInertiaSpinMovement=void 0,this._lastInertiaZoomMovement=void 0,this._lastInertiaTranslateMovement=void 0,this._lastInertiaTiltMovement=void 0,this._inertiaDisablers={_lastInertiaZoomMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement","_lastInertiaTiltMovement"],_lastInertiaTiltMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement"]},this._tweens=new bZ,this._tween=void 0,this._horizontalRotationAxis=void 0,this._tiltCenterMousePosition=new M(-1,-1),this._tiltCenter=new h,this._rotateMousePosition=new M(-1,-1),this._rotateStartPosition=new h,this._strafeStartPosition=new h,this._strafeMousePosition=new M,this._strafeEndMousePosition=new M,this._zoomMouseStart=new M(-1,-1),this._zoomWorldPosition=new h,this._useZoomWorldPosition=!1,this._panLastMousePosition=new M,this._panLastWorldPosition=new h,this._tiltCVOffMap=!1,this._looking=!1,this._rotating=!1,this._strafing=!1,this._zoomingOnVector=!1,this._zoomingUnderground=!1,this._rotatingZoom=!1,this._adjustedHeightForTerrain=!1,this._cameraUnderground=!1;let n=e.mapProjection;this._maxCoord=n.project(new fe(Math.PI,L.PI_OVER_TWO)),this._rotateFactor=void 0,this._rotateRateRangeAdjustment=void 0,this._maximumRotateRate=1.77,this._minimumRotateRate=1/5e3,this._minimumZoomRate=20,this._maximumZoomRate=5906376272e3,this._minimumUndergroundPickDistance=2e3,this._maximumUndergroundPickDistance=1e4}function VCt(e,t){if(e<0)return 0;let n=(1-t)*25;return Math.exp(-n*e)}function CCt(e){return M.equalsEpsilon(e.startPosition,e.endPosition,L.EPSILON14)}var RCt=.4;function GCt(e,t,n,i,o,r,s){let a=r[s];l(a)||(a=r[s]={startPosition:new M,endPosition:new M,motion:new M,inertiaEnabled:!0});let c=e.getButtonPressTime(t,n),d=e.getButtonReleaseTime(t,n),u=c&&d&&(d.getTime()-c.getTime())/1e3,p=d&&(new Date().getTime()-d.getTime())/1e3;if(c&&d&&u<RCt){let b=VCt(p,i),f=e.getLastMovement(t,n);if(!l(f)||CCt(f)||!a.inertiaEnabled||(a.motion.x=(f.endPosition.x-f.startPosition.x)*.5,a.motion.y=(f.endPosition.y-f.startPosition.y)*.5,a.startPosition=M.clone(f.startPosition,a.startPosition),a.endPosition=M.multiplyByScalar(a.motion,b,a.endPosition),a.endPosition=M.add(a.startPosition,a.endPosition,a.endPosition),isNaN(a.endPosition.x)||isNaN(a.endPosition.y)||M.distance(a.startPosition,a.endPosition)<.5))return;if(!e.isButtonDown(t,n)){let y=e.getStartMousePosition(t,n);o(r,y,a)}}}function ACt(e,t){if(l(t)){let n=e[t];l(n)&&(n.inertiaEnabled=!0);let i=e._inertiaDisablers[t];if(l(i)){let o=i.length;for(let r=0;r<o;++r)n=e[i[r]],l(n)&&(n.inertiaEnabled=!1)}}}var zRe=[];function rd(e,t,n,i,o,r){if(!l(n))return;let s=e._aggregator;Array.isArray(n)||(zRe[0]=n,n=zRe);let a=n.length;for(let c=0;c<a;++c){let d=n[c],u=l(d.eventType)?d.eventType:d,m=d.modifier,p=s.isMoving(u,m)&&s.getMovement(u,m),b=s.getStartMousePosition(u,m);e.enableInputs&&t&&(p?(i(e,b,p),ACt(e,r)):o<1&&GCt(s,u,m,o,i,e,r))}}var X3=new fn,ECt=new h,LCt=new M,WCt=new h,vCt=new M,FCt=new h,ICt=new h,PCt=new h,XCt=new h,oGe=new h,NCt=new h,YCt=new h,wCt=new h,MCt=new h,kCt=new h,UCt=new h,DCt=new h,OCt=new h,BCt=new h,zCt=new h,gZ=new h,HRe=new h,KRe=new h,Zte={orientation:new Tc};function Wte(e,t,n,i,o,r){let s=1;l(r)&&(s=L.clamp(Math.abs(r),.25,1));let a=n.endPosition.y-n.startPosition.y,d=a>0?e.minimumZoomDistance*s:0,u=e.maximumZoomDistance,m=o-d,p=i*m;p=L.clamp(p,e._minimumZoomRate,e._maximumZoomRate);let b=a/e._scene.canvas.clientHeight;b=Math.min(b,e.maximumMovementRatio);let f=p*b;if(e.enableCollisionDetection||e.minimumZoomDistance===0||!l(e._globe)){if(f>0&&Math.abs(o-d)<1||f<0&&Math.abs(o-u)<1)return;o-f<d?f=o-d-1:o-f>u&&(f=o-u)}let y=e._scene,_=y.camera,S=y.mode,Z=Zte.orientation;Z.heading=_.heading,Z.pitch=_.pitch,Z.roll=_.roll;let V=n.inertiaEnabled??M.equals(t,e._zoomMouseStart),C=e._zoomingOnVector,G=e._rotatingZoom,E;if(V||(e._zoomMouseStart=M.clone(t,e._zoomMouseStart),l(e._globe)&&S===se.SCENE2D?(E=_.getPickRay(t,X3).origin,E=h.fromElements(E.y,E.z,E.x)):l(e._globe)&&(E=Vg(e,t,ECt)),l(E)?(e._useZoomWorldPosition=!0,e._zoomWorldPosition=h.clone(E,e._zoomWorldPosition)):e._useZoomWorldPosition=!1,C=e._zoomingOnVector=!1,G=e._rotatingZoom=!1,e._zoomingUnderground=e._cameraUnderground),!e._useZoomWorldPosition){_.zoomIn(f);return}let v=S===se.COLUMBUS_VIEW;if(_.positionCartographic.height<2e6&&(G=!0),!V||G){if(S===se.SCENE2D){let F=e._zoomWorldPosition,P=_.position;if(!h.equals(F,P)&&_.positionCartographic.height<e._maxCoord.x*2){let N=_.position.x,g=h.subtract(F,P,WCt);h.normalize(g,g);let R=h.distance(F,P)*f/(_.getMagnitude()*.5);_.move(g,R*.5),(_.position.x<0&&N>0||_.position.x>0&&N<0)&&(E=_.getPickRay(t,X3).origin,E=h.fromElements(E.y,E.z,E.x),e._zoomWorldPosition=h.clone(E,e._zoomWorldPosition))}}else if(S===se.SCENE3D){let F=h.normalize(_.position,oGe);if(e._cameraUnderground||e._zoomingUnderground||_.positionCartographic.height<3e3&&Math.abs(h.dot(_.direction,F))<.6)v=!0;else{let P=y.canvas,N=vCt;N.x=P.clientWidth/2,N.y=P.clientHeight/2;let g=Vg(e,N,FCt);if(!l(g))v=!0;else if(_.positionCartographic.height<1e6)if(h.dot(_.direction,F)>=-.5)v=!0;else{let R=YCt;h.clone(_.position,R);let A=e._zoomWorldPosition,W=NCt;if(W=h.normalize(A,W),h.dot(W,F)<0)return;let X=zCt,Y=kCt;h.clone(_.direction,Y),h.add(R,h.multiplyByScalar(Y,1e3,gZ),X);let D=UCt,k=DCt;h.subtract(A,R,D),h.normalize(D,k);let O=h.dot(F,k);if(O>=0){e._zoomMouseStart.x=-1;return}let w=Math.acos(-O),z=h.magnitude(R),H=h.magnitude(A),te=z-f,K=h.magnitude(D),$=Math.asin(L.clamp(K/H*Math.sin(w),-1,1)),ee=Math.asin(L.clamp(te/H*Math.sin(w),-1,1)),de=$-ee+w,_e=wCt;h.normalize(R,_e);let ue=MCt;ue=h.cross(k,_e,ue),ue=h.normalize(ue,ue),h.normalize(h.cross(_e,ue,gZ),Y),h.multiplyByScalar(h.normalize(X,gZ),h.magnitude(X)-f,X),h.normalize(R,R),h.multiplyByScalar(R,te,R);let Ce=OCt;h.multiplyByScalar(h.add(h.multiplyByScalar(_e,Math.cos(de)-1,HRe),h.multiplyByScalar(Y,Math.sin(de),KRe),gZ),te,Ce),h.add(R,Ce,R),h.normalize(X,_e),h.normalize(h.cross(_e,ue,gZ),Y);let Te=BCt;h.multiplyByScalar(h.add(h.multiplyByScalar(_e,Math.cos(de)-1,HRe),h.multiplyByScalar(Y,Math.sin(de),KRe),gZ),h.magnitude(X),Te),h.add(X,Te,X),h.clone(R,_.position),h.normalize(h.subtract(X,R,gZ),_.direction),h.clone(_.direction,_.direction),h.cross(_.direction,_.up,_.right),h.cross(_.right,_.direction,_.up),_.setView(Zte);return}else{let R=h.normalize(g,ICt),A=h.normalize(e._zoomWorldPosition,PCt),W=h.dot(A,R);if(W>0&&W<1){let X=L.acosClamped(W),Y=h.cross(A,R,XCt),D=Math.abs(X)>L.toRadians(20)?_.positionCartographic.height*.75:_.positionCartographic.height-f,k=f/D;_.rotate(Y,X*k)}}}}e._rotatingZoom=!v}if(!V&&v||C){let F,P=co.worldToWindowCoordinates(y,e._zoomWorldPosition,LCt);S!==se.COLUMBUS_VIEW&&M.equals(t,e._zoomMouseStart)&&l(P)?F=_.getPickRay(P,X3):F=_.getPickRay(t,X3);let N=F.direction;(S===se.COLUMBUS_VIEW||S===se.SCENE2D)&&h.fromElements(N.y,N.z,N.x,N),_.move(N,f),e._zoomingOnVector=!0}else _.zoomIn(f);e._cameraUnderground||_.setView(Zte)}var HCt=new fn,KCt=new fn,JCt=new h;function jCt(e,t,n){let o=e._scene.camera,r=o.getPickRay(n.startPosition,HCt).origin,s=o.getPickRay(n.endPosition,KCt).origin;r=h.fromElements(r.y,r.z,r.x,r),s=h.fromElements(s.y,s.z,s.x,s);let a=h.subtract(r,s,JCt),c=h.magnitude(a);c>0&&(h.normalize(a,a),o.move(a,c))}function JRe(e,t,n){l(n.distance)&&(n=n.distance);let o=e._scene.camera;Wte(e,t,n,e.zoomFactor,o.getMagnitude())}var QCt=new M,qCt=new M;function jRe(e,t,n){if(l(n.angleAndHeight)){$Ct(e,t,n.angleAndHeight);return}let i=e._scene,o=i.camera,r=i.canvas,s=r.clientWidth,a=r.clientHeight,c=QCt;c.x=2/s*n.startPosition.x-1,c.y=2/a*(a-n.startPosition.y)-1,c=M.normalize(c,c);let d=qCt;d.x=2/s*n.endPosition.x-1,d.y=2/a*(a-n.endPosition.y)-1,d=M.normalize(d,d);let u=L.acosClamped(c.x);c.y<0&&(u=L.TWO_PI-u);let m=L.acosClamped(d.x);d.y<0&&(m=L.TWO_PI-m);let p=m-u;o.twistRight(p)}function $Ct(e,t,n){let i=e._rotateFactor*e._rotateRateRangeAdjustment;i>e._maximumRotateRate&&(i=e._maximumRotateRate),i<e._minimumRotateRate&&(i=e._minimumRotateRate);let o=e._scene,r=o.camera,s=o.canvas,a=(n.endPosition.x-n.startPosition.x)/s.clientWidth;a=Math.min(a,e.maximumMovementRatio);let c=i*a*Math.PI*4;r.twistRight(c)}function eRt(e){let t=e._scene.mapMode2D===id.ROTATE;I.equals(I.IDENTITY,e._scene.camera.transform)?(rd(e,e.enableTranslate,e.translateEventTypes,jCt,e.inertiaTranslate,"_lastInertiaTranslateMovement"),rd(e,e.enableZoom,e.zoomEventTypes,JRe,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&rd(e,e.enableRotate,e.tiltEventTypes,jRe,e.inertiaSpin,"_lastInertiaTiltMovement")):(rd(e,e.enableZoom,e.zoomEventTypes,JRe,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&rd(e,e.enableRotate,e.translateEventTypes,jRe,e.inertiaSpin,"_lastInertiaSpinMovement"))}var rGe=new fn,tRt=new h,nRt=new h;function Vg(e,t,n){let i=e._scene,o=e._globe,r=i.camera,s;if(i.pickPositionSupported&&(s=i.pickPositionWorldCoordinates(t,tRt)),!l(o))return h.clone(s,n);let a=!e._cameraUnderground,c=r.getPickRay(t,rGe),d=o.pickWorldCoordinates(c,i,a,nRt),u=l(s)?h.distance(s,r.positionWC):Number.POSITIVE_INFINITY,m=l(d)?h.distance(d,r.positionWC):Number.POSITIVE_INFINITY;return u<m?h.clone(s,n):h.clone(d,n)}var iRt=new fe;function D3(e){let t=e._ellipsoid,n=e._scene,i=n.camera,o=n.mode,r=0;if(o===se.SCENE3D){let c=t.cartesianToCartographic(i.position,iRt);l(c)&&(r=c.height)}else r=i.position.z;let s=e._scene.globeHeight??0;return Math.abs(s-r)}var oRt=new h;function sGe(e,t){let n=t.origin,i=t.direction,o=D3(e),r=h.normalize(n,oRt),s=Math.abs(h.dot(r,i));return s=Math.max(s,.5)*2,o*s}function aGe(e,t,n,i){let o=h.distance(t.origin,n),r=D3(e),s=L.clamp(r*5,e._minimumUndergroundPickDistance,e._maximumUndergroundPickDistance);return o>s&&(o=Math.min(o,r/5),o=Math.max(o,100)),fn.getPoint(t,o,i)}function cGe(e,t,n,i){let o;return l(n)?(o=h.distance(t.origin,n),o>e._maximumUndergroundPickDistance&&(o=D3(e))):o=D3(e),fn.getPoint(t,o,i)}var rRt=new M;function lGe(e,t){let n=t.endPosition,i=M.subtract(t.endPosition,t.startPosition,rRt),o=e._strafeEndMousePosition;M.add(o,i,o),t.endPosition=o,vte(e,t,e._strafeStartPosition),t.endPosition=n}var QRe=new fn,sRt=new fn,Vte=new h,aRt=new h,cRt=new h,lRt=new h,dRt=new nn(h.UNIT_X,0),uRt=new M,mRt=new M;function hRt(e,t,n){if(h.equals(t,e._translateMousePosition)||(e._looking=!1),h.equals(t,e._strafeMousePosition)||(e._strafing=!1),e._looking){Du(e,t,n);return}if(e._strafing){lGe(e,n);return}let o=e._scene.camera,r=e._cameraUnderground,s=M.clone(n.startPosition,uRt),a=M.clone(n.endPosition,mRt),c=o.getPickRay(s,QRe),d=h.clone(h.ZERO,lRt),u=h.UNIT_X,m;if(o.position.z<e._minimumPickingTerrainHeight&&(m=Vg(e,s,Vte),l(m)&&(d.x=m.x)),r||d.x>o.position.z&&l(m)){let V=m;r&&(V=cGe(e,c,m,Vte)),M.clone(t,e._strafeMousePosition),M.clone(t,e._strafeEndMousePosition),h.clone(V,e._strafeStartPosition),e._strafing=!0,vte(e,n,e._strafeStartPosition);return}let p=nn.fromPointNormal(d,u,dRt);c=o.getPickRay(s,QRe);let b=di.rayPlane(c,p,Vte),f=o.getPickRay(a,sRt),y=di.rayPlane(f,p,aRt);if(!l(b)||!l(y)){e._looking=!0,Du(e,t,n),M.clone(t,e._translateMousePosition);return}let _=h.subtract(b,y,cRt),S=_.x;_.x=_.y,_.y=_.z,_.z=S;let Z=h.magnitude(_);Z>L.EPSILON6&&(h.normalize(_,_),o.move(_,Z))}var dGe=new M,w3=new fn,M3=new h,fRt=new h,uGe=new I,pRt=new I,bRt=new h,gRt=new nn(h.UNIT_X,0),Cte=new h,Ate=new fe,mGe=new I,yRt=new Ye,xRt=new q,k3=new h;function TRt(e,t,n){if(l(n.angleAndHeight)&&(n=n.angleAndHeight),M.equals(t,e._tiltCenterMousePosition)||(e._tiltCVOffMap=!1,e._looking=!1),e._looking){Du(e,t,n);return}let o=e._scene.camera;e._tiltCVOffMap||!e.onMap()||Math.abs(o.position.z)>e._minimumPickingTerrainHeight?(e._tiltCVOffMap=!0,_Rt(e,t,n)):SRt(e,t,n)}function _Rt(e,t,n){let i=e._scene,o=i.camera,r=i.canvas,s=dGe;s.x=r.clientWidth/2,s.y=r.clientHeight/2;let a=o.getPickRay(s,w3),c=h.UNIT_X,d=a.origin,u=a.direction,m,p=h.dot(c,u);if(Math.abs(p)>L.EPSILON6&&(m=-h.dot(c,d)/p),!l(m)||m<=0){e._looking=!0,Du(e,t,n),M.clone(t,e._tiltCenterMousePosition);return}let b=h.multiplyByScalar(u,m,M3);h.add(d,b,b);let f=i.mapProjection,y=f.ellipsoid;h.fromElements(b.y,b.z,b.x,b);let _=f.unproject(b,Ate);y.cartographicToCartesian(_,b);let S=bt.eastNorthUpToFixedFrame(b,y,uGe),Z=e._globe,V=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let C=I.clone(o.transform,mGe);o._setTransform(S),Uu(e,t,n,h.UNIT_Z),o._setTransform(C),e._globe=Z,e._ellipsoid=V;let G=V.maximumRadius;e._rotateFactor=1/G,e._rotateRateRangeAdjustment=G}function SRt(e,t,n){let i=e._scene,o=i.camera,r=e._cameraUnderground,s,a,c=h.UNIT_X;if(M.equals(t,e._tiltCenterMousePosition))s=h.clone(e._tiltCenter,M3);else{if(o.position.z<e._minimumPickingTerrainHeight&&(s=Vg(e,t,M3)),!l(s)){a=o.getPickRay(t,w3);let g=a.origin,R=a.direction,A,W=h.dot(c,R);if(Math.abs(W)>L.EPSILON6&&(A=-h.dot(c,g)/W),!l(A)||A<=0){e._looking=!0,Du(e,t,n),M.clone(t,e._tiltCenterMousePosition);return}s=h.multiplyByScalar(R,A,M3),h.add(g,s,s)}r&&(l(a)||(a=o.getPickRay(t,w3)),aGe(e,a,s,s)),M.clone(t,e._tiltCenterMousePosition),h.clone(s,e._tiltCenter)}let d=i.canvas,u=dGe;u.x=d.clientWidth/2,u.y=e._tiltCenterMousePosition.y,a=o.getPickRay(u,w3);let m=h.clone(h.ZERO,bRt);m.x=s.x;let p=nn.fromPointNormal(m,c,gRt),b=di.rayPlane(a,p,fRt),f=o._projection,y=f.ellipsoid;h.fromElements(s.y,s.z,s.x,s);let _=f.unproject(s,Ate);y.cartographicToCartesian(_,s);let S=bt.eastNorthUpToFixedFrame(s,y,uGe),Z;l(b)?(h.fromElements(b.y,b.z,b.x,b),_=f.unproject(b,Ate),y.cartographicToCartesian(_,b),Z=bt.eastNorthUpToFixedFrame(b,y,pRt)):Z=S;let V=e._globe,C=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let G=h.UNIT_Z,E=I.clone(o.transform,mGe);o._setTransform(S);let v=h.cross(h.UNIT_Z,h.normalize(o.position,Cte),Cte),F=h.dot(o.right,v);if(Uu(e,t,n,G,!1,!0),o._setTransform(Z),F<0){let g=n.startPosition.y-n.endPosition.y;(r&&g<0||!r&&g>0)&&(G=void 0);let R=o.constrainedAxis;o.constrainedAxis=void 0,Uu(e,t,n,G,!0,!1),o.constrainedAxis=R}else Uu(e,t,n,G,!0,!1);if(l(o.constrainedAxis)){let g=h.cross(o.direction,o.constrainedAxis,k3);h.equalsEpsilon(g,h.ZERO,L.EPSILON6)||(h.dot(g,o.right)<0&&h.negate(g,g),h.cross(g,o.direction,o.up),h.cross(o.direction,o.up,o.right),h.normalize(o.up,o.up),h.normalize(o.right,o.right))}o._setTransform(E),e._globe=V,e._ellipsoid=C;let P=C.maximumRadius;e._rotateFactor=1/P,e._rotateRateRangeAdjustment=P;let N=h.clone(o.positionWC,Cte);if(e.enableCollisionDetection&&Pte(e,!0),!h.equals(o.positionWC,N)){o._setTransform(Z),o.worldToCameraCoordinatesPoint(N,N);let g=h.magnitudeSquared(N);h.magnitudeSquared(o.position)>g&&(h.normalize(o.position,o.position),h.multiplyByScalar(o.position,Math.sqrt(g),o.position));let R=h.angleBetween(N,o.position),A=h.cross(N,o.position,N);h.normalize(A,A);let W=Ye.fromAxisAngle(A,R,yRt),X=q.fromQuaternion(W,xRt);q.multiplyByVector(X,o.direction,o.direction),q.multiplyByVector(X,o.up,o.up),h.cross(o.direction,o.up,o.right),h.cross(o.right,o.direction,o.up),o._setTransform(E)}}var hGe=new M,fGe=new fn,pGe=new h;function ZRt(e,t,n){l(n.distance)&&(n=n.distance);let i=e._scene,o=i.camera,r=i.canvas,s=e._cameraUnderground,a;s?a=t:(a=hGe,a.x=r.clientWidth/2,a.y=r.clientHeight/2);let c=o.getPickRay(a,fGe),d=c.origin,u=c.direction,m=o.position.z,p;m<e._minimumPickingTerrainHeight&&(p=Vg(e,a,pGe));let b;if(l(p)&&(b=h.distance(d,p)),s){let f=sGe(e,c,m);l(b)?b=Math.min(b,f):b=f}if(!l(b)){let f=h.UNIT_X;b=-h.dot(f,d)/h.dot(f,u)}Wte(e,t,n,e.zoomFactor,b)}function VRt(e){let n=e._scene.camera;if(!I.equals(I.IDENTITY,n.transform))rd(e,e.enableRotate,e.rotateEventTypes,Uu,e.inertiaSpin,"_lastInertiaSpinMovement"),rd(e,e.enableZoom,e.zoomEventTypes,gGe,e.inertiaZoom,"_lastInertiaZoomMovement");else{let i=e._tweens;if(e._aggregator.anyButtonDown&&i.removeAll(),rd(e,e.enableTilt,e.tiltEventTypes,TRt,e.inertiaSpin,"_lastInertiaTiltMovement"),rd(e,e.enableTranslate,e.translateEventTypes,hRt,e.inertiaTranslate,"_lastInertiaTranslateMovement"),rd(e,e.enableZoom,e.zoomEventTypes,ZRt,e.inertiaZoom,"_lastInertiaZoomMovement"),rd(e,e.enableLook,e.lookEventTypes,Du),!e._aggregator.anyButtonDown&&!i.contains(e._tween)){let o=n.createCorrectPositionTween(e.bounceAnimationTime);l(o)&&(e._tween=i.add(o))}i.update()}}var CRt=new fn,RRt=new nn(h.UNIT_X,0),GRt=new h,ARt=new h;function vte(e,t,n){let i=e._scene,o=i.camera,r=o.getPickRay(t.endPosition,CRt),s=h.clone(o.direction,ARt);i.mode===se.COLUMBUS_VIEW&&h.fromElements(s.z,s.x,s.y,s);let a=nn.fromPointNormal(n,s,RRt),c=di.rayPlane(r,a,GRt);l(c)&&(s=h.subtract(n,c,s),i.mode===se.COLUMBUS_VIEW&&h.fromElements(s.y,s.z,s.x,s),h.add(o.position,s,o.position))}var qRe=new h,bGe=new fe,Ete=new h,Lte=new ie,ERt=new h,LRt=new h,WRt=new h;function vRt(e,t,n){let o=e._scene.camera,r=e._cameraUnderground,s=e._ellipsoid;if(!I.equals(o.transform,I.IDENTITY)){Uu(e,t,n);return}let a,c,d=s.geodeticSurfaceNormal(o.position,ERt);if(M.equals(t,e._rotateMousePosition)){if(e._looking)Du(e,t,n,d);else if(e._rotating)Uu(e,t,n);else if(e._strafing)lGe(e,n);else{if(h.magnitude(o.position)<h.magnitude(e._rotateStartPosition))return;a=h.magnitude(e._rotateStartPosition),c=Ete,c.x=c.y=c.z=a,s=ie.fromCartesian3(c,Lte),Gte(e,t,n,s)}return}e._looking=!1,e._rotating=!1,e._strafing=!1;let u=s.cartesianToCartographic(o.positionWC,bGe).height,m=e._globe;if(l(m)&&u<e._minimumPickingTerrainHeight){let p=Vg(e,n.startPosition,WRt);if(l(p)){let b,f=o.getPickRay(n.startPosition,rGe);if(r)b=!0,cGe(e,f,p,p);else{let y=s.geodeticSurfaceNormal(p,LRt);Math.abs(h.dot(f.direction,y))<.05?b=!0:b=h.magnitude(o.position)<h.magnitude(p)}b?(M.clone(t,e._strafeEndMousePosition),h.clone(p,e._strafeStartPosition),e._strafing=!0,vte(e,n,e._strafeStartPosition)):(a=h.magnitude(p),c=Ete,c.x=c.y=c.z=a,s=ie.fromCartesian3(c,Lte),Gte(e,t,n,s),h.clone(p,e._rotateStartPosition))}else e._looking=!0,Du(e,t,n,d)}else l(o.pickEllipsoid(n.startPosition,e._ellipsoid,qRe))?(Gte(e,t,n,e._ellipsoid),h.clone(qRe,e._rotateStartPosition)):u>e._minimumTrackBallHeight?(e._rotating=!0,Uu(e,t,n)):(e._looking=!0,Du(e,t,n,d));M.clone(t,e._rotateMousePosition)}function Uu(e,t,n,i,o,r){o=o??!1,r=r??!1;let s=e._scene,a=s.camera,c=s.canvas,d=a.constrainedAxis;l(i)&&(a.constrainedAxis=i);let u=h.magnitude(a.position),m=e._rotateFactor*(u-e._rotateRateRangeAdjustment);m>e._maximumRotateRate&&(m=e._maximumRotateRate),m<e._minimumRotateRate&&(m=e._minimumRotateRate);let p=(n.startPosition.x-n.endPosition.x)/c.clientWidth,b=(n.startPosition.y-n.endPosition.y)/c.clientHeight;p=Math.min(p,e.maximumMovementRatio),b=Math.min(b,e.maximumMovementRatio);let f=m*p*Math.PI*2,y=m*b*Math.PI;if(l(i)&&l(e.maximumTiltAngle)){let _=e.maximumTiltAngle,S=h.dot(a.direction,i),Z=Math.PI-Math.acos(S)+y;Z>_&&(y-=Z-_)}o||a.rotateRight(f),r||a.rotateUp(y),a.constrainedAxis=d}var Rte=ce.clone(ce.UNIT_W),$Re=ce.clone(ce.UNIT_W),N3=new h,WR=new h,Y3=new h,eGe=new h,FRt=new M,IRt=new M,PRt=new M,XRt=new M,NRt=new fn;function Gte(e,t,n,i){let o=e._scene,r=o.camera,s=M.clone(n.startPosition,FRt),a=M.clone(n.endPosition,IRt),c=i.cartesianToCartographic(r.positionWC,bGe).height,d,u;if(!n.inertiaEnabled&&c<e._minimumPickingTerrainHeight&&(d=h.clone(e._panLastWorldPosition,Rte),!l(e._globe)&&!M.equalsEpsilon(s,e._panLastMousePosition)&&(d=Vg(e,s,Rte)),!l(e._globe)&&l(d))){let m=h.subtract(d,r.positionWC,WR),p=h.multiplyByScalar(r.directionWC,h.dot(r.directionWC,m),WR),b=h.magnitude(p),f=r.frustum.getPixelDimensions(o.drawingBufferWidth,o.drawingBufferHeight,b,o.pixelRatio,XRt),y=M.subtract(a,s,PRt),_=h.multiplyByScalar(r.rightWC,y.x*f.x,WR),S=h.normalize(r.positionWC,oGe),Z=r.getPickRay(a,NRt).direction,V=h.subtract(Z,h.projectVector(Z,r.rightWC,Y3),Y3),C=h.angleBetween(V,r.directionWC),G=1;l(r.frustum.fov)&&(G=Math.max(Math.tan(C),.1));let E=Math.abs(h.dot(r.directionWC,S)),v=-y.y*f.y*2/Math.sqrt(G)*(1-E),F=h.multiplyByScalar(Z,v,Y3);E=Math.abs(h.dot(r.upWC,S));let P=h.multiplyByScalar(r.upWC,-y.y*(1-E)*f.y,eGe);u=h.add(d,_,$Re),u=h.add(u,F,u),u=h.add(u,P,u),h.clone(u,e._panLastWorldPosition),M.clone(a,e._panLastMousePosition)}if((!l(d)||!l(u))&&(d=r.pickEllipsoid(s,i,Rte),u=r.pickEllipsoid(a,i,$Re)),!l(d)||!l(u)){e._rotating=!0,Uu(e,t,n);return}if(d=r.worldToCameraCoordinates(d,d),u=r.worldToCameraCoordinates(u,u),l(r.constrainedAxis)){let m=r.constrainedAxis,p=h.mostOrthogonalAxis(m,N3);h.cross(p,m,p),h.normalize(p,p);let b=h.cross(m,p,WR),f=h.magnitude(d),y=h.dot(m,d),_=Math.acos(y/f),S=h.multiplyByScalar(m,y,Y3);h.subtract(d,S,S),h.normalize(S,S);let Z=h.magnitude(u),V=h.dot(m,u),C=Math.acos(V/Z),G=h.multiplyByScalar(m,V,eGe);h.subtract(u,G,G),h.normalize(G,G);let E=Math.acos(h.dot(S,p));h.dot(S,b)<0&&(E=L.TWO_PI-E);let v=Math.acos(h.dot(G,p));h.dot(G,b)<0&&(v=L.TWO_PI-v);let F=E-v,P;h.equalsEpsilon(m,r.position,L.EPSILON2)?P=r.right:P=h.cross(m,r.position,N3);let N=h.cross(m,P,N3),g=h.dot(N,h.subtract(d,m,WR)),R=h.dot(N,h.subtract(u,m,WR)),A;g>0&&R>0?A=C-_:g>0&&R<=0?h.dot(r.position,m)>0?A=-_-C:A=_+C:A=_-C,r.rotateRight(F),r.rotateUp(A)}else{h.normalize(d,d),h.normalize(u,u);let m=h.dot(d,u),p=h.cross(d,u,N3);if(m<1&&!h.equalsEpsilon(p,h.ZERO,L.EPSILON14)){let b=Math.acos(m);r.rotate(p,b)}}}var YRt=new h,wRt=new fe,tGe=0;function gGe(e,t,n){l(n.distance)&&(n=n.distance);let i=n.inertiaEnabled,o=e._ellipsoid,r=e._scene,s=r.camera,a=r.canvas,c=e._cameraUnderground,d;c?d=t:(d=hGe,d.x=a.clientWidth/2,d.y=a.clientHeight/2);let u=s.getPickRay(d,fGe),m,p=o.cartesianToCartographic(s.position,wRt).height,b=Math.abs(tGe)<e.minimumPickingTerrainDistanceWithInertia;(i?b:p<e._minimumPickingTerrainHeight)&&(m=Vg(e,d,pGe));let y;if(l(m)&&(y=h.distance(u.origin,m)),!l(e._globe)&&l(y)&&s.getMagnitude()<y&&(y=void 0),l(y)&&(tGe=y),c){let S=sGe(e,u,p);l(y)?y=Math.min(y,S):y=S}l(y)||(y=p);let _=h.normalize(s.position,YRt);Wte(e,t,n,e.zoomFactor,y,h.dot(_,s.direction))}var yGe=new M,U3=new fn,oM=new h,MRt=new h,xGe=new I,kRt=new I,TGe=new I,URt=new Ye,DRt=new q,Fte=new fe,Ite=new h;function ORt(e,t,n){let o=e._scene.camera;if(!I.equals(o.transform,I.IDENTITY))return;if(l(n.angleAndHeight)&&(n=n.angleAndHeight),M.equals(t,e._tiltCenterMousePosition)||(e._tiltOnEllipsoid=!1,e._looking=!1),e._looking){let a=e._ellipsoid.geodeticSurfaceNormal(o.position,Ite);Du(e,t,n,a);return}let s=e._ellipsoid.cartesianToCartographic(o.position,Fte);e._tiltOnEllipsoid||s.height>e._minimumCollisionTerrainHeight?(e._tiltOnEllipsoid=!0,zRt(e,t,n)):HRt(e,t,n)}var BRt=new fe;function zRt(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e.minimumZoomDistance*.25,a=i.cartesianToCartographic(r.positionWC,BRt).height;if(a-s-1<L.EPSILON3&&n.endPosition.y-n.startPosition.y<0)return;let c=o.canvas,d=yGe;d.x=c.clientWidth/2,d.y=c.clientHeight/2;let u=r.getPickRay(d,U3),m,p=di.rayEllipsoid(u,i);if(l(p))m=fn.getPoint(u,p.start,oM);else if(a>e._minimumTrackBallHeight){let Z=di.grazingAltitudeLocation(u,i);if(!l(Z))return;let V=i.cartesianToCartographic(Z,Fte);V.height=0,m=i.cartographicToCartesian(V,oM)}else{e._looking=!0;let Z=e._ellipsoid.geodeticSurfaceNormal(r.position,Ite);Du(e,t,n,Z),M.clone(t,e._tiltCenterMousePosition);return}let b=bt.eastNorthUpToFixedFrame(m,i,xGe),f=e._globe,y=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let _=I.clone(r.transform,TGe);r._setTransform(b),Uu(e,t,n,h.UNIT_Z),r._setTransform(_),e._globe=f,e._ellipsoid=y;let S=y.maximumRadius;e._rotateFactor=1/S,e._rotateRateRangeAdjustment=S}function HRt(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e._cameraUnderground,a,c,d;if(M.equals(t,e._tiltCenterMousePosition))a=h.clone(e._tiltCenter,oM);else{if(a=Vg(e,t,oM),!l(a)){if(c=r.getPickRay(t,U3),d=di.rayEllipsoid(c,i),!l(d)){if(i.cartesianToCartographic(r.position,Fte).height<=e._minimumTrackBallHeight){e._looking=!0;let R=e._ellipsoid.geodeticSurfaceNormal(r.position,Ite);Du(e,t,n,R),M.clone(t,e._tiltCenterMousePosition)}return}a=fn.getPoint(c,d.start,oM)}s&&(l(c)||(c=r.getPickRay(t,U3)),aGe(e,c,a,a)),M.clone(t,e._tiltCenterMousePosition),h.clone(a,e._tiltCenter)}let u=o.canvas,m=yGe;m.x=u.clientWidth/2,m.y=e._tiltCenterMousePosition.y,c=r.getPickRay(m,U3);let p=h.magnitude(a),b=h.fromElements(p,p,p,Ete),f=ie.fromCartesian3(b,Lte);if(d=di.rayEllipsoid(c,f),!l(d))return;let y=h.magnitude(c.origin)>p?d.start:d.stop,_=fn.getPoint(c,y,MRt),S=bt.eastNorthUpToFixedFrame(a,i,xGe),Z=bt.eastNorthUpToFixedFrame(_,f,kRt),V=e._globe,C=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let G=h.UNIT_Z,E=I.clone(r.transform,TGe);r._setTransform(Z);let v=h.cross(_,r.positionWC,k3);if(h.dot(r.rightWC,v)<0){let g=n.startPosition.y-n.endPosition.y;(s&&g<0||!s&&g>0)&&(G=void 0);let R=r.constrainedAxis;r.constrainedAxis=void 0,Uu(e,t,n,G,!0,!1),r.constrainedAxis=R}else Uu(e,t,n,G,!0,!1);if(r._setTransform(S),Uu(e,t,n,G,!1,!0),l(r.constrainedAxis)){let g=h.cross(r.direction,r.constrainedAxis,k3);h.equalsEpsilon(g,h.ZERO,L.EPSILON6)||(h.dot(g,r.right)<0&&h.negate(g,g),h.cross(g,r.direction,r.up),h.cross(r.direction,r.up,r.right),h.normalize(r.up,r.up),h.normalize(r.right,r.right))}r._setTransform(E),e._globe=V,e._ellipsoid=C;let P=C.maximumRadius;e._rotateFactor=1/P,e._rotateRateRangeAdjustment=P;let N=h.clone(r.positionWC,k3);if(e.enableCollisionDetection&&Pte(e,!0),!h.equals(r.positionWC,N)){r._setTransform(Z),r.worldToCameraCoordinatesPoint(N,N);let g=h.magnitudeSquared(N);h.magnitudeSquared(r.position)>g&&(h.normalize(r.position,r.position),h.multiplyByScalar(r.position,Math.sqrt(g),r.position));let R=h.angleBetween(N,r.position),A=h.cross(N,r.position,N);h.normalize(A,A);let W=Ye.fromAxisAngle(A,R,URt),X=q.fromQuaternion(W,DRt);q.multiplyByVector(X,r.direction,r.direction),q.multiplyByVector(X,r.up,r.up),h.cross(r.direction,r.up,r.right),h.cross(r.right,r.direction,r.up),r._setTransform(E)}}var KRt=new M,JRt=new M,nGe=new fn,iGe=new fn,jRt=new h,QRt=new h;function Du(e,t,n,i){let r=e._scene.camera,s=KRt;s.x=n.startPosition.x,s.y=0;let a=JRt;a.x=n.endPosition.x,a.y=0;let c=r.getPickRay(s,nGe),d=r.getPickRay(a,iGe),u=0,m,p;r.frustum instanceof bn?(m=c.origin,p=d.origin,h.add(r.direction,m,m),h.add(r.direction,p,p),h.subtract(m,r.position,m),h.subtract(p,r.position,p),h.normalize(m,m),h.normalize(p,p)):(m=c.direction,p=d.direction);let b=h.dot(m,p);b<1&&(u=Math.acos(b)),u=n.startPosition.x>n.endPosition.x?-u:u;let f=e._horizontalRotationAxis;if(l(i)?r.look(i,-u):l(f)?r.look(f,-u):r.lookLeft(u),s.x=0,s.y=n.startPosition.y,a.x=0,a.y=n.endPosition.y,c=r.getPickRay(s,nGe),d=r.getPickRay(a,iGe),u=0,r.frustum instanceof bn?(m=c.origin,p=d.origin,h.add(r.direction,m,m),h.add(r.direction,p,p),h.subtract(m,r.position,m),h.subtract(p,r.position,p),h.normalize(m,m),h.normalize(p,p)):(m=c.direction,p=d.direction),b=h.dot(m,p),b<1&&(u=Math.acos(b)),u=n.startPosition.y>n.endPosition.y?-u:u,i=i??f,l(i)){let y=r.direction,_=h.negate(i,jRt),S=h.equalsEpsilon(y,i,L.EPSILON2),Z=h.equalsEpsilon(y,_,L.EPSILON2);if(!S&&!Z){b=h.dot(y,i);let V=L.acosClamped(b);u>0&&u>V&&(u=V-L.EPSILON4),b=h.dot(y,_),V=L.acosClamped(b),u<0&&-u>V&&(u=-V+L.EPSILON4);let C=h.cross(i,y,QRt);r.look(C,u)}else(S&&u<0||Z&&u>0)&&r.look(r.right,-u)}else r.lookUp(u)}function qRt(e){rd(e,e.enableRotate,e.rotateEventTypes,vRt,e.inertiaSpin,"_lastInertiaSpinMovement"),rd(e,e.enableZoom,e.zoomEventTypes,gGe,e.inertiaZoom,"_lastInertiaZoomMovement"),rd(e,e.enableTilt,e.tiltEventTypes,ORt,e.inertiaSpin,"_lastInertiaTiltMovement"),rd(e,e.enableLook,e.lookEventTypes,Du)}var $Rt=new I,eGt=new fe;function Pte(e,t){e._adjustedHeightForTerrain=!0;let n=e._scene,i=n.mode;if(i===se.SCENE2D||i===se.MORPHING)return;let o=n.camera,r=n.ellipsoid??ie.WGS84,s=n.mapProjection,a,c;I.equals(o.transform,I.IDENTITY)||(a=I.clone(o.transform,$Rt),c=h.magnitude(o.position),o._setTransform(I.IDENTITY));let d=eGt;i===se.SCENE3D?r.cartesianToCartographic(o.position,d):s.unproject(o.position,d);let u=!1;if(d.height<e._minimumCollisionTerrainHeight){let m=e._scene.globeHeight;if(l(m)){let p=m+e.minimumZoomDistance,b=m-e._lastGlobeHeight,f=b/e._lastGlobeHeight;d.height<p&&(t||Math.abs(f)<=.1)&&(d.height=p,i===se.SCENE3D?r.cartographicToCartesian(d,o.position):s.project(d,o.position),u=!0),t||Math.abs(f)<=.1?e._lastGlobeHeight=m:e._lastGlobeHeight+=b*.1}}l(a)&&(o._setTransform(a),u&&(h.normalize(o.position,o.position),h.negate(o.position,o.direction),h.multiplyByScalar(o.position,Math.max(c,e.minimumZoomDistance),o.position),h.normalize(o.direction,o.direction),h.cross(o.direction,o.up,o.right),h.cross(o.right,o.direction,o.up)))}rM.prototype.onMap=function(){let e=this._scene,t=e.mode,n=e.camera;return t===se.COLUMBUS_VIEW?Math.abs(n.position.x)-this._maxCoord.x<0&&Math.abs(n.position.y)-this._maxCoord.y<0:!0};var tGt=new h,nGt=new h;rM.prototype.update=function(){let e=this._scene,{camera:t,globe:n,mode:i}=e;I.equals(t.transform,I.IDENTITY)?(this._globe=n,this._ellipsoid=e.ellipsoid??ie.default):(this._globe=void 0,this._ellipsoid=ie.UNIT_SPHERE);let{verticalExaggeration:o,verticalExaggerationRelativeHeight:r}=e;this._minimumCollisionTerrainHeight=ho.getHeight(this.minimumCollisionTerrainHeight,o,r),this._minimumPickingTerrainHeight=ho.getHeight(this.minimumPickingTerrainHeight,o,r),this._minimumTrackBallHeight=ho.getHeight(this.minimumTrackBallHeight,o,r),this._cameraUnderground=e.cameraUnderground&&l(this._globe);let s=this._ellipsoid.maximumRadius;this._rotateFactor=1/s,this._rotateRateRangeAdjustment=s,this._adjustedHeightForTerrain=!1;let a=h.clone(t.positionWC,tGt),c=h.clone(t.directionWC,nGt);if(i===se.SCENE2D?eRt(this):i===se.COLUMBUS_VIEW?(this._horizontalRotationAxis=h.UNIT_Z,VRt(this)):i===se.SCENE3D&&(this._horizontalRotationAxis=void 0,qRt(this)),this.enableCollisionDetection&&!this._adjustedHeightForTerrain){let d=!h.equals(a,t.positionWC)||!h.equals(c,t.directionWC);Pte(this,d)}this._aggregator.reset()};rM.prototype.isDestroyed=function(){return!1};rM.prototype.destroy=function(){return this._tweens.removeAll(),this._aggregator=this._aggregator&&this._aggregator.destroy(),me(this)};var sM=rM;var Hro=x(T(),1);var Nro=x(T(),1);function aM(e){let t=new rc(e);t.blendingEnabled=!1,t.scissorTest={enabled:!0,rectangle:new $e},t.viewport=new $e,this._context=e,this._fb=new ai({depthStencil:!0,pixelDatatype:Me.FLOAT,pixelFormat:Be.RGBA}),this._passState=t}function iGt(e,t,n,i){let o=Math.max(n,i),r=o*o,s=Math.floor(n*.5),a=Math.floor(i*.5),c=0,d=0,u=0,m=-1,p=[];for(let b=0;b<r;++b){if(-s<=c&&c<=s&&-a<=d&&d<=a){let f=4*((a-d)*n+c+s),y=t[f],_=e.getObjectByPickColor(y);l(_)&&p.push({object:_,isEdge:t[f+1]>0,depth:t[f+2],x:c,y:d})}if(c===d||c<0&&-c===d||c>0&&c===1-d){let f=u;u=-m,m=f}c+=u,d+=m}return p}aM.prototype.begin=function(e,t){let n=this._context,{width:i,height:o}=t;return $e.clone(e,this._passState.scissorTest.rectangle),this._fb.update(n,i,o),this._passState.framebuffer=this._fb.framebuffer,this._passState.viewport.width=i,this._passState.viewport.height=o,this._passState};aM.prototype.end=function(e){let t=e.width??1,n=e.height??1,i=this._context,o=i.readPixels({x:e.x,y:e.y,width:t,height:n,pixelDatatype:Me.FLOAT,framebuffer:this._fb.framebuffer});return iGt(i,o,t,n)};aM.prototype.isDestroyed=function(){return!1};aM.prototype.destroy=function(){return this._fb.destroy(),me(this)};var cM=aM;var O3={},oGt=new $e(0,0,3,3),rGt=new M,sGt=new fn,aGt=new h,cGt=3,lGt=.1;function Xte(e){return Math.sqrt(e.x*e.x+e.y*e.y)}function _Ge(e){let t=Number.POSITIVE_INFINITY;for(let s of e)!s.isEdge&&Xte(s)<=cGt&&(t=Math.min(t,s.depth));let n=t*(1+lGt),i=e.filter(s=>!s.isEdge||s.depth<=n),o=i.some(s=>s.isEdge);return i.filter(s=>s.isEdge===o).reduce((s,a)=>Xte(a)<Xte(s)?a:s)}function SGe(e,t,n){let i=rGt;i.x=t.x+n.x,i.y=t.y+n.y;let o=e.camera.getPickRay(i,sGt);if(!l(o))return;let r=h.dot(o.direction,e.camera.directionWC);if(r<=0)return;let s=n.depth/r,a=h.multiplyByScalar(o.direction,s,aGt);return h.add(o.origin,a,new h)}O3.snap=function(e,t,n){let i=n?.width??25,o=n?.height??i,{context:r,defaultView:s}=e;if(!r.colorBufferFloat){gt("snap-color-buffer-float","Scene.snap requires the EXT_color_buffer_float extension, which is not supported on this platform.");return}l(s.snapFramebuffer)||(s.snapFramebuffer=new cM(r));let a=s.snapFramebuffer,c=oGt;L3(e,t,c,i,o,{framebuffer:a,snap:!0});let d=a.end(c);if(W3(e),d.length===0)return;let u=_Ge(d);if(!l(u))return;let m=SGe(e,t,u);if(l(m))return{object:u.object,isEdge:u.isEdge,position:m,screenPosition:new M(t.x+u.x,t.y+u.y)}};O3._selectBestHit=_Ge;O3._snapHitToWorld=SGe;var lM=O3;var bso=x(T(),1);var Jro=x(T(),1),dM=`uniform sampler2D colorTexture; uniform sampler2D colorTexture2; uniform vec2 center; uniform float radius; in vec2 v_textureCoordinates; void main() { vec4 color0 = texture(colorTexture, v_textureCoordinates); vec4 color1 = texture(colorTexture2, v_textureCoordinates); float x = length(gl_FragCoord.xy - center) / radius; float t = smoothstep(0.5, 0.8, x); out_FragColor = mix(color0 + color1, color1, t); } `;var Qro=x(T(),1),uM=`uniform sampler2D colorTexture; uniform float avgLuminance; uniform float threshold; uniform float offset; in vec2 v_textureCoordinates; float key(float avg) { float guess = 1.5 - (1.5 / (avg * 0.1 + 1.0)); return max(0.0, guess) + 0.1; } // See section 9. "The bright-pass filter" of Realtime HDR Rendering // http://www.cg.tuwien.ac.at/research/publications/2007/Luksch_2007_RHR/Luksch_2007_RHR-RealtimeHDR%20.pdf void main() { vec4 color = texture(colorTexture, v_textureCoordinates); vec3 xyz = czm_RGBToXYZ(color.rgb); float luminance = xyz.r; float scaledLum = key(avgLuminance) * luminance / avgLuminance; float brightLum = max(scaledLum - threshold, 0.0); float brightness = brightLum / (offset + brightLum); xyz.r = brightness; out_FragColor = vec4(czm_XYZToRGB(xyz), 1.0); } `;function Cg(){this._sceneFramebuffer=new aZ;let e=.125,t=new Array(6);t[0]=new Po({fragmentShader:Dd,textureScale:e,forcePowerOfTwo:!0,sampleMode:Mu.LINEAR});let n=t[1]=new Po({fragmentShader:uM,uniforms:{avgLuminance:.5,threshold:.25,offset:.1},textureScale:e,forcePowerOfTwo:!0}),i=this;this._delta=1,this._sigma=2,this._blurStep=new M,t[2]=new Po({fragmentShader:kx,uniforms:{step:function(){return i._blurStep.x=i._blurStep.y=1/n.outputTexture.width,i._blurStep},delta:function(){return i._delta},sigma:function(){return i._sigma},direction:0},textureScale:e,forcePowerOfTwo:!0}),t[3]=new Po({fragmentShader:kx,uniforms:{step:function(){return i._blurStep.x=i._blurStep.y=1/n.outputTexture.width,i._blurStep},delta:function(){return i._delta},sigma:function(){return i._sigma},direction:1},textureScale:e,forcePowerOfTwo:!0}),t[4]=new Po({fragmentShader:Dd,sampleMode:Mu.LINEAR}),this._uCenter=new M,this._uRadius=void 0,t[5]=new Po({fragmentShader:dM,uniforms:{center:function(){return i._uCenter},radius:function(){return i._uRadius},colorTexture2:function(){return i._sceneFramebuffer.framebuffer.getColorTexture(0)}}}),this._stages=new Od({stages:t});let o=new hZ(this),r=t.length;for(let s=0;s<r;++s)t[s]._textureCache=o;this._textureCache=o,this.length=t.length}Cg.prototype.get=function(e){return this._stages.get(e)};Cg.prototype.getStageByName=function(e){let t=this._stages.length;for(let n=0;n<t;++n){let i=this._stages.get(n);if(i.name===e)return i}};var dGt=new ce,ZGe=new M,uGt=new M,VGe=new I;function mGt(e,t,n){let i=t.uniformState,o=i.sunPositionWC,r=i.view,s=i.viewProjection,a=i.projection,c=I.computeViewportTransformation(n,0,1,VGe),d=I.multiplyByPoint(r,o,dGt),u=bt.pointToGLWindowCoordinates(s,c,o,ZGe);d.x+=L.SOLAR_RADIUS;let m=bt.pointToGLWindowCoordinates(a,c,d,d),p=M.magnitude(M.subtract(m,u,m))*30*2,b=uGt;b.x=p,b.y=p,e._uCenter=M.clone(u,e._uCenter),e._uRadius=Math.max(b.x,b.y)*.15;let f=t.drawingBufferWidth,y=t.drawingBufferHeight,_=e._stages,S=_.get(0),Z=S.outputTexture.width,V=S.outputTexture.height,C=new $e;C.width=Z,C.height=V,c=I.computeViewportTransformation(C,0,1,VGe),u=bt.pointToGLWindowCoordinates(s,c,o,ZGe),b.x*=Z/f,b.y*=V/y;let G=S.scissorRectangle;G.x=Math.max(u.x-b.x*.5,0),G.y=Math.max(u.y-b.y*.5,0),G.width=Math.min(b.x,f),G.height=Math.min(b.y,y);for(let E=1;E<4;++E)$e.clone(G,_.get(E).scissorRectangle)}Cg.prototype.clear=function(e,t,n){this._sceneFramebuffer.clear(e,t,n),this._textureCache.clear(e)};Cg.prototype.update=function(e){let t=e.context,n=e.viewport,i=this._sceneFramebuffer;i.update(t,n);let o=i.framebuffer;return this._textureCache.update(t),this._stages.update(t,!1),mGt(this,t,n),o};Cg.prototype.execute=function(e){let t=this._sceneFramebuffer.framebuffer.getColorTexture(0),n=this._stages,i=n.length;n.get(0).execute(e,t);for(let o=1;o<i;++o)n.get(o).execute(e,n.get(o-1).outputTexture)};Cg.prototype.copy=function(e,t){if(!l(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(Dd,{uniformMap:{colorTexture:function(){return n._stages.get(n._stages.length-1).outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};Cg.prototype.isDestroyed=function(){return!1};Cg.prototype.destroy=function(){return this._textureCache.destroy(),this._stages.destroy(),me(this)};var mM=Cg;var Zso=x(T(),1);function CGe(){this._cachedShowFrustumsShaders={}}function hGt(e){let t={},n=e.vertexAttributes;for(let i in n)n.hasOwnProperty(i)&&(t[i]=n[i].index);return t}function fGt(e,t){let n=e.context,i=t,o=i.fragmentShaderSource.clone(),r=[];o.sources=o.sources.map(function(u){u=ze.replaceMain(u,"czm_Debug_main");let m=/out_FragData_(\d+)/g,p;for(;(p=m.exec(u))!==null;)r.indexOf(p[1])===-1&&r.push(p[1]);return u});let s=r.length,a="";a+=`uniform vec3 debugShowCommandsColor; `,a+=`uniform vec3 debugShowFrustumsColor; `,a+=`void main() { czm_Debug_main(); `;let c;if(s>0)for(c=0;c<s;++c)a+=` out_FragData_${r[c]}.rgb *= debugShowCommandsColor; `,a+=` out_FragData_${r[c]}.rgb *= debugShowFrustumsColor; `;else a+=` out_FragColor.rgb *= debugShowCommandsColor; `,a+=` out_FragColor.rgb *= debugShowFrustumsColor; `;a+="}",o.sources.push(a);let d=hGt(i);return en.fromCache({context:n,vertexShaderSource:i.vertexShaderSource,fragmentShaderSource:o,attributeLocations:d})}var hM=new U;function pGt(e,t){let n;return l(t.uniformMap)?n=t.uniformMap:n={},l(n.debugShowCommandsColor)||l(n.debugShowFrustumsColor)||(n.debugShowCommandsColor=function(){return e.debugShowCommands?(l(t._debugColor)||(t._debugColor=U.fromRandom()),t._debugColor):U.WHITE},n.debugShowFrustumsColor=function(){return e.debugShowFrustums?(hM.red=t.debugOverlappingFrustums&1?1:0,hM.green=t.debugOverlappingFrustums&2?1:0,hM.blue=t.debugOverlappingFrustums&4?1:0,hM.alpha=1,hM):U.WHITE}),n}var bGt=new ot;CGe.prototype.executeDebugShowFrustumsCommand=function(e,t,n){let i=t.shaderProgram.id,o=this._cachedShowFrustumsShaders[i];l(o)||(o=fGt(e,t.shaderProgram),this._cachedShowFrustumsShaders[i]=o);let r=ot.shallowClone(t,bGt);r.shaderProgram=o,r.uniformMap=pGt(e,t),r.execute(e.context,n)};var fM=CGe;var Eso=x(T(),1);function yZ(e,t,n){this._primitive=e,this._tileIndex=t,this._sampleIndex=n,this._metadata={},this._orientedBoundingBox=new $t}yZ.fromKeyframeNode=function(e,t,n,i){let o=new yZ(e,t,n),{spatialNode:r,content:s}=i;return o._metadata=gGt(e,s,n),o._orientedBoundingBox=xGt(e,r,n,o._orientedBoundingBox),o};function gGt(e,t,n){if(!l(t)||!l(t.metadata))return;let{names:i,types:o}=e.provider,{metadata:r}=t,s={};for(let a=0;a<i.length;a++){let c=i[a],d=yt.getComponentCount(o[a]),u=r[a].slice(n*d,(n+1)*d);s[c]=u}return s}var RGe=new h,yGt=new h;function xGt(e,t,n,i){let o=t.dimensions,r=o.x*o.y,s=Math.floor(n/r),a=n-s*r,c=Math.floor(a/o.x),d=a-c*o.x,u=h.fromElements(d,c,s,RGe),m=h.divideComponents(h.subtract(u,e._paddingBefore,RGe),e.dimensions,yGt);return e._shape.computeOrientedBoundingBoxForSample(t,e.dimensions,m,i)}Object.defineProperties(yZ.prototype,{metadata:{get:function(){return this._metadata}},primitive:{get:function(){return this._primitive}},sampleIndex:{get:function(){return this._sampleIndex}},tileIndex:{get:function(){return this._tileIndex}},orientedBoundingBox:{get:function(){return this._orientedBoundingBox.clone()}}});yZ.prototype.hasProperty=function(e){return l(this._metadata[e])};yZ.prototype.getNames=function(){return Object.keys(this._metadata)};yZ.prototype.getProperty=function(e){return this._metadata[e]};var pM=yZ;var Zuo=x(T(),1);var bao=x(T(),1);var qso=x(T(),1);var Wso=x(T(),1),GGe={FLOAT:"float",VEC2:"vec2",VEC3:"vec3",VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",MAT2:"mat2",MAT3:"mat3",MAT4:"mat4",SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube"};Object.freeze(GGe);var a0=GGe;var Uso=x(T(),1);function vR(){this._defaultTexture=void 0,this._textures={},this._loadedImages=[],this._lastUpdatedFrame=-1}vR.prototype.getTexture=function(e){return this._textures[e]};function TGt(e,t,n){n.resource.fetchImage().then(function(i){e._loadedImages.push({id:t,image:i,textureUniform:n})}).catch(function(){let i=e._textures[t];l(i)&&i!==e._defaultTexture&&i.destroy(),e._textures[t]=e._defaultTexture})}vR.prototype.loadTexture2D=function(e,t){l(t.typedArray)?this._loadedImages.push({id:e,textureUniform:t}):TGt(this,e,t)};function _Gt(e,t,n){let{id:i,textureUniform:o,image:r}=t,s=n.webgl2?B3(o,r,n):SGt(o,r,n),a=e._textures[i];l(a)&&a!==n.defaultTexture&&a.destroy(),e._textures[i]=s}function B3(e,t,n){let{typedArray:i,sampler:o}=e,r=l(i)?EGe(e,n):new Ct({context:n,source:t,sampler:o});return AGe(o)&&r.generateMipmap(),r}function SGt(e,t,n){let{typedArray:i,sampler:o}=e,r=AGe(o),s=o.wrapS===sn.REPEAT||o.wrapS===sn.MIRRORED_REPEAT||o.wrapT===sn.REPEAT||o.wrapT===sn.MIRRORED_REPEAT,{width:a,height:c}=l(i)?e:t,d=[a,c].every(L.isPowerOfTwo);if((r||s)&&!d)if(l(i)){if(e.pixelDatatype===Me.UNSIGNED_BYTE){let m=V2(i,a,c),p=gy(m);return B3({sampler:o},p,n)}}else{let m=gy(t);return B3(e,m,n)}else return B3(e,t,n);return r?console.warn("Texture requires resizing for mipmaps but pixelDataType cannot be resized. The texture may be rendered incorrectly."):s&&console.warn("Texture requires resizing for wrapping but pixelDataType cannot be resized. The texture may be rendered incorrectly."),EGe(e,n)}function AGe(e){return[zt.NEAREST_MIPMAP_NEAREST,zt.NEAREST_MIPMAP_LINEAR,zt.LINEAR_MIPMAP_NEAREST,zt.LINEAR_MIPMAP_LINEAR].includes(e.minificationFilter)}function EGe(e,t){let{pixelFormat:n,pixelDatatype:i,width:o,height:r,typedArray:s,sampler:a}=e;return new Ct({context:t,pixelFormat:n,pixelDatatype:i,source:{arrayBufferView:s,width:o,height:r},sampler:a,flipY:!1})}vR.prototype.update=function(e){if(e.frameNumber===this._lastUpdatedFrame)return;this._lastUpdatedFrame=e.frameNumber;let t=e.context;this._defaultTexture=t.defaultTexture;let n=this._loadedImages;for(let i=0;i<n.length;i++){let o=n[i];_Gt(this,o,t)}n.length=0};vR.prototype.isDestroyed=function(){return!1};vR.prototype.destroy=function(){let e=this._textures;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];n!==this._defaultTexture&&n.destroy()}return me(this)};var bM=vR;function gM(e){e=e??B.EMPTY_OBJECT,this.mode=e.mode??zb.MODIFY_MATERIAL,this.lightingModel=e.lightingModel,this.uniforms=e.uniforms??B.EMPTY_OBJECT,this.varyings=e.varyings??B.EMPTY_OBJECT,this.vertexShaderText=e.vertexShaderText,this.fragmentShaderText=e.fragmentShaderText,this.translucencyMode=e.translucencyMode??ux.INHERIT,this._textureManager=new bM,this._defaultTexture=void 0,this.uniformMap=ZGt(this),this.usedVariablesVertex={attributeSet:{},featureIdSet:{},metadataSet:{}},this.usedVariablesFragment={attributeSet:{},featureIdSet:{},metadataSet:{},materialSet:{}},RGt(this),GGt(this)}function ZGt(e){let t=e.uniforms,n={};for(let i in t)if(t.hasOwnProperty(i)){let o=t[i];o.type===a0.SAMPLER_2D?(e._textureManager.loadTexture2D(i,o.value),n[i]=VGt(e,i)):n[i]=CGt(e,i)}return n}function VGt(e,t){return function(){return e._textureManager.getTexture(t)??e._defaultTexture}}function CGt(e,t){return function(){return e.uniforms[t].value}}function xZ(e,t,n){let i;for(;(i=t.exec(e))!==null;){let o=i[1];n[o]=!0}}function RGt(e){let t=/[vf]sInput\.attributes\.(\w+)/g,n=/[vf]sInput\.featureIds\.(\w+)/g,i=/[vf]sInput\.(?:metadata|metadataClass|metadataStatistics)\.(\w+)/g,o,r=e.vertexShaderText;l(r)&&(o=e.usedVariablesVertex.attributeSet,xZ(r,t,o),o=e.usedVariablesVertex.featureIdSet,xZ(r,n,o),o=e.usedVariablesVertex.metadataSet,xZ(r,i,o));let s=e.fragmentShaderText;if(l(s)){o=e.usedVariablesFragment.attributeSet,xZ(s,t,o),o=e.usedVariablesFragment.featureIdSet,xZ(s,n,o),o=e.usedVariablesFragment.metadataSet,xZ(s,i,o);let a=/material\.(\w+)/g,c=e.usedVariablesFragment.materialSet;xZ(s,a,c)}}function LGe(e){let t=/^.*MC$/,n=/^.*WC$/,i=/^.*EC$/;return t.test(e)?`${e} (model coordinates)`:n.test(e)?`${e} (Cartesian world coordinates)`:i.test(e)?`${e} (eye coordinates)`:e}function bl(e,t,n,i){if(e.hasOwnProperty(t)){let o=`${LGe(t)} is not available in the ${i} shader. Did you mean ${LGe(n)} instead?`;throw new ge(o)}}function GGt(e){let t=e.usedVariablesVertex.attributeSet;bl(t,"position","positionMC","vertex"),bl(t,"normal","normalMC","vertex"),bl(t,"tangent","tangentMC","vertex"),bl(t,"bitangent","bitangentMC","vertex"),bl(t,"positionWC","positionMC","vertex"),bl(t,"positionEC","positionMC","vertex"),bl(t,"normalEC","normalMC","vertex"),bl(t,"tangentEC","tangentMC","vertex"),bl(t,"bitangentEC","bitangentMC","vertex");let n=e.usedVariablesFragment.attributeSet;bl(n,"position","positionEC","fragment"),bl(n,"normal","normalEC","fragment"),bl(n,"tangent","tangentEC","fragment"),bl(n,"bitangent","bitangentEC","fragment"),bl(n,"normalMC","normalEC","fragment"),bl(n,"tangentMC","tangentEC","fragment"),bl(n,"bitangentMC","bitangentEC","fragment")}gM.prototype.setUniform=function(e,t){let n=this.uniforms[e];n.type===a0.SAMPLER_2D?this._textureManager.loadTexture2D(e,t):l(t.clone)?n.value=t.clone(n.value):n.value=t};gM.prototype.update=function(e){this._defaultTexture=e.context.defaultTexture,this._textureManager.update(e)};gM.prototype.isDestroyed=function(){return!1};gM.prototype.destroy=function(){this._textureManager=this._textureManager&&this._textureManager.destroy(),me(this)};var c0=gM;var sao=x(T(),1);function AGt(e){e=e??B.EMPTY_OBJECT,this.typedArray=e.typedArray,this.width=e.width,this.height=e.height,this.pixelFormat=e.pixelFormat??Be.RGBA,this.pixelDatatype=e.pixelDatatype??Me.UNSIGNED_BYTE;let t=e.url;typeof t=="string"&&(t=ve.createIfNeeded(t)),this.resource=t;let i=e.repeat??!0?sn.REPEAT:sn.CLAMP_TO_EDGE;this.sampler=new kt({wrapS:i,wrapT:i,minificationFilter:e.minificationFilter,magnificationFilter:e.magnificationFilter,maximumAnisotropy:e.maximumAnisotropy})}var yM=AGt;function EGt(e){let{names:t,types:n,componentTypes:i,minimumValues:o,maximumValues:r}=e;for(let s=0;s<t.length;s++){if(!LGt(o?.[s],r?.[s]))continue;let a=WGt(t[s],n[s],i[s],o[s],r[s]);if(l(a))return a}}function LGt(e,t){if(!Array.isArray(e)||!Array.isArray(t))return!1;let n=Math.min(...e),i=Math.max(...t);return n<i}function WGt(e,t,n,i,o){if(t===yt.VEC4&&n===Pt.FLOAT32)return vGt(e,i,o);if(t===yt.SCALAR&&n===Pt.FLOAT32)return FGt(e,i,o)}function vGt(e,t,n){let i=Math.min(...t),o=Math.max(...n);if(!(i<0||o>1))return new c0({fragmentShaderText:`void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) { material.diffuse = fsInput.metadata.${e}.rgb; material.alpha = fsInput.metadata.${e}.a; }`})}function FGt(e,t,n){let o=T2([new U(.267,.004,.329),new U(.282,.14,.457),new U(.254,.265,.53),new U(.207,.372,.553),new U(.164,.471,.558),new U(.128,.567,.551),new U(.135,.659,.518),new U(.194,.741,.443),new U(.282,.819,.369),new U(.396,.898,.301),new U(.538,.965,.236),new U(.741,.998,.149),new U(.993,1,.144)],128),r=new yM({typedArray:o,width:128,height:1});return new c0({uniforms:{u_colorMap:{type:a0.SAMPLER_2D,value:r},u_minimumValue:{type:a0.FLOAT,value:t[0]},u_maximumValue:{type:a0.FLOAT,value:n[0]}},fragmentShaderText:`void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) { float value = fsInput.metadata.${e}; vec3 voxelNormal = fsInput.attributes.normalEC; float diffuse = max(0.0, dot(voxelNormal, czm_lightDirectionEC)); float lighting = 0.5 + 0.5 * diffuse; if (value >= u_minimumValue && value <= u_maximumValue) { float lerp = (value - u_minimumValue) / (u_maximumValue - u_minimumValue); material.diffuse = texture(u_colorMap, vec2(lerp, 0.5)).rgb * lighting; material.alpha = 1.0; } }`})}var FR=EGt;var olo=x(T(),1);var _ao=x(T(),1);function IGt(e,t){let{shaderBuilder:n}=e,{names:i,types:o,componentTypes:r,minimumValues:s,maximumValues:a}=t._provider,c=o.length,d=l(s)&&l(a);n.addDefine("METADATA_COUNT",c,pe.FRAGMENT),d&&n.addDefine("STATISTICS",void 0,pe.FRAGMENT);for(let g=0;g<c;g++){let R=i[g],A=z3(o[g]),W=`PropertyStatistics_${R}`,X=`PropertyStatistics_${R}`;n.addStruct(W,X,pe.FRAGMENT),n.addStructField(W,A,"min"),n.addStructField(W,A,"max")}let u="MetadataStatistics",m="MetadataStatistics",p="metadataStatistics";n.addStruct(u,m,pe.FRAGMENT);for(let g=0;g<c;g++){let R=i[g],A=`PropertyStatistics_${R}`,W=R;n.addStructField(u,A,W)}let b="Metadata",f="Metadata",y="metadata";n.addStruct(b,f,pe.FRAGMENT);for(let g=0;g<c;g++){let R=z3(o[g]);n.addStructField(b,R,i[g])}let _="Attributes",S="Attributes",Z="attributes";n.addStruct(_,S,pe.FRAGMENT),n.addStructField(_,"vec3","positionEC"),n.addStructField(_,"vec3","normalEC");let V="Voxel",C="Voxel",G="voxel";n.addStruct(V,C,pe.FRAGMENT),n.addStructField(V,"vec3","viewDirUv"),n.addStructField(V,"float","travelDistance"),n.addStructField(V,"int","stepCount"),n.addStructField(V,"int","tileIndex"),n.addStructField(V,"int","sampleIndex"),n.addStructField(V,"float","distanceToDepthBuffer");let E="FragmentInput";n.addStruct(E,"FragmentInput",pe.FRAGMENT),n.addStructField(E,m,p),n.addStructField(E,f,y),n.addStructField(E,S,Z),n.addStructField(E,C,G);let F="Properties",P="Properties",N="properties";n.addStruct(F,P,pe.FRAGMENT);for(let g=0;g<c;g++){let R=z3(o[g]);n.addStructField(F,R,i[g])}{let g="clearProperties";n.addFunction(g,`${P} clearProperties()`,pe.FRAGMENT),n.addFunctionLines(g,[`${P} ${N};`]);for(let R=0;R<c;R++){let A=z3(o[R],r[R]);n.addFunctionLines(g,[`${N}.${i[R]} = ${A}(0.0);`])}n.addFunctionLines(g,[`return ${N};`])}{let g="sumProperties";n.addFunction(g,`${P} sumProperties(${P} propertiesA, ${P} propertiesB)`,pe.FRAGMENT),n.addFunctionLines(g,[`${P} ${N};`]);for(let R=0;R<c;R++){let A=i[R];n.addFunctionLines(g,[`${N}.${A} = propertiesA.${A} + propertiesB.${A};`])}n.addFunctionLines(g,[`return ${N};`])}{let g="scaleProperties";n.addFunction(g,`${P} scaleProperties(${P} ${N}, float scale)`,pe.FRAGMENT),n.addFunctionLines(g,[`${P} scaledProperties = ${N};`]);for(let R=0;R<c;R++)n.addFunctionLines(g,[`scaledProperties.${i[R]} *= scale;`]);n.addFunctionLines(g,["return scaledProperties;"])}{let g="mixProperties";n.addFunction(g,`${P} mixProperties(${P} propertiesA, ${P} propertiesB, float mixFactor)`,pe.FRAGMENT),n.addFunctionLines(g,[`${P} ${N};`]);for(let R=0;R<c;R++){let A=i[R];n.addFunctionLines(g,[`${N}.${A} = mix(propertiesA.${A}, propertiesB.${A}, mixFactor);`])}n.addFunctionLines(g,[`return ${N};`])}{let g="copyPropertiesToMetadata";n.addFunction(g,`void copyPropertiesToMetadata(in ${P} ${N}, inout ${f} ${y})`,pe.FRAGMENT);for(let R=0;R<c;R++){let A=i[R];n.addFunctionLines(g,[`${y}.${A} = ${N}.${A};`])}}if(d){let g="setStatistics";n.addFunction(g,`void setStatistics(inout ${m} ${p})`,pe.FRAGMENT);for(let R=0;R<c;R++){let A=i[R],W=o[R],X=yt.getComponentCount(W);for(let Y=0;Y<X;Y++){let D=XGt(W,Y),k=s[R][Y],O=a[R][Y];!l(k)||!l(O)||n.addFunctionLines(g,[`${p}.${A}.min${D} = ${WGe(k)};`,`${p}.${A}.max${D} = ${WGe(O)};`])}}}{let g="getPropertiesFromMegatextureAtUv";n.addFunction(g,`${P} getPropertiesFromMegatextureAtUv(vec3 texcoord)`,pe.FRAGMENT),n.addFunctionLines(g,[`${P} ${N};`]);for(let R=0;R<c;R++){let A=o[R],W=r[R],X=PGt(A,W);n.addFunctionLines(g,[`properties.${i[R]} = texture(u_megatextureTextures[${R}], texcoord)${X};`])}n.addFunctionLines(g,[`return ${N};`])}}function z3(e){if(e===yt.SCALAR)return"float";if(e===yt.VEC2)return"vec2";if(e===yt.VEC3)return"vec3";if(e===yt.VEC4)return"vec4"}function PGt(e){if(e===yt.SCALAR)return".r";if(e===yt.VEC2)return".ra";if(e===yt.VEC3)return".rgb";if(e===yt.VEC4)return""}function WGe(e){let t=e.toString();return t.indexOf(".")===-1&&(t=`${e}.0`),t}function XGt(e,t){return e===yt.SCALAR?"":`[${t}]`}var xM=IGt;var wao=x(T(),1);function Nf(e){let{planes:t,modelMatrix:n=I.IDENTITY,unionClippingRegions:i=!1}=e??B.EMPTY_OBJECT;if(this._planes=[],this.modelMatrix=I.clone(n),this.planeAdded=new Se,this.planeRemoved=new Se,this._unionClippingRegions=i,this._testIntersection=i?vGe:FGe,this._float32View=void 0,this._clippingPlanesTexture=void 0,l(t))for(let o=0;o<t.length;++o)this.add(t[o])}function vGe(e){return e===jt.OUTSIDE}function FGe(e){return e===jt.INSIDE}Object.defineProperties(Nf.prototype,{length:{get:function(){return this._planes.length}},unionClippingRegions:{get:function(){return this._unionClippingRegions},set:function(e){this._unionClippingRegions!==e&&(this._unionClippingRegions=e,this._testIntersection=e?vGe:FGe)}},texture:{get:function(){return this._clippingPlanesTexture}},clippingPlanesState:{get:function(){return this._unionClippingRegions?this._planes.length:-this._planes.length}}});Nf.prototype.add=function(e){let t=this._planes.length;e.index=t,this._planes.push(e),this.planeAdded.raiseEvent(e,t)};Nf.prototype.get=function(e){return this._planes[e]};function IGe(e,t){for(let n=0;n<e.length;++n)if(nn.equals(e[n],t))return n;return-1}Nf.prototype.contains=function(e){return IGe(this._planes,e)!==-1};Nf.prototype.remove=function(e){let t=this._planes,n=IGe(t,e);if(n===-1)return!1;e instanceof js&&(e.onChangeCallback=void 0,e.index=-1);let i=t.length-1;for(let o=n;o<i;++o){let r=t[o+1];t[o]=r,r instanceof js&&(r.index=o)}return t.length=i,this.planeRemoved.raiseEvent(e,n),!0};Nf.prototype.removeAll=function(){let e=this._planes;for(let t=0;t<e.length;++t){let n=e[t];n instanceof js&&(n.onChangeCallback=void 0,n.index=-1),this.planeRemoved.raiseEvent(n,t)}this._planes=[]};var NGt=new nn(h.fromElements(1,0,0),0);function YGt(e,t){let n=e._float32View,i=e._planes,o=0;for(let r=0;r<i.length;++r){let{normal:s,distance:a}=MGt(i[r],t,NGt);n[o]=s.x,n[o+1]=s.y,n[o+2]=s.z,n[o+3]=a,o+=4}}var Nte=new ce,wGt=new h;function MGt(e,t,n){let{normal:i,distance:o}=e,r=ce.fromElements(i.x,i.y,i.z,o,Nte),s=I.multiplyByVector(t,r,Nte),a=h.fromCartesian4(s,wGt);return s=ce.divideByScalar(s,h.magnitude(a),Nte),nn.fromCartesian4(s,n)}function PGe(e,t){return t.x=Math.min(e,Xt.maximumTextureSize),t.y=Math.ceil(e/t.x),t}var kGt=new M;Nf.prototype.update=function(e,t){let n=this._clippingPlanesTexture,i=this.length;if(l(n)){let s=n.width*n.height;(s<i||i<.25*s)&&(n.destroy(),n=void 0,this._clippingPlanesTexture=void 0)}if(this.length===0)return;if(!l(n)){let s=PGe(i,kGt);s.y*=2,n=new Ct({context:e.context,width:s.x,height:s.y,pixelFormat:Be.RGBA,pixelDatatype:Me.FLOAT,sampler:kt.NEAREST,flipY:!1}),this._float32View=new Float32Array(s.x*s.y*4),this._clippingPlanesTexture=n}let{width:o,height:r}=n;YGt(this,t),n.copyFrom({source:{width:o,height:r,arrayBufferView:this._float32View}})};Nf.getTextureResolution=function(e,t,n){let i=e.texture;if(l(i))return n.x=i.width,n.y=i.height,n;let o=e.length,r=PGe(o,n);return r.y*=2,r};Nf.prototype.isDestroyed=function(){return!1};Nf.prototype.destroy=function(){return this._clippingPlanesTexture=this._clippingPlanesTexture&&this._clippingPlanesTexture.destroy(),me(this)};var Rg=Nf;var Dco=x(T(),1);var kao=x(T(),1),TM=`struct Ray { vec3 pos; vec3 dir; }; float minComponent(in vec3 v) { return min(min(v.x, v.y), v.z); } float maxComponent(in vec3 v) { return max(max(v.x, v.y), v.z); } `;var Dao=x(T(),1),_M=`// See Intersection.glsl for the definition of intersectScene // See IntersectionUtils.glsl for the definition of nextIntersection // See convertLocalToBoxUv.glsl, convertLocalToCylinderUv.glsl, or convertLocalToEllipsoidUv.glsl // for the definitions of convertLocalToShapeSpaceDerivative and getTileAndUvCoordinate. // The appropriate functions are selected based on the VoxelPrimitive shape type, // and added to the shader in Scene/VoxelRenderResources.js. // See Octree.glsl for the definitions of TraversalData, SampleData, // traverseOctreeFromBeginning, and traverseOctreeFromExisting // See Megatexture.glsl for the definition of accumulatePropertiesFromMegatexture #define STEP_COUNT_MAX 1000 // Harcoded value because GLSL doesn't like variable length loops #if defined(PICKING_VOXEL) #define ALPHA_ACCUM_MAX 0.1 #else #define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0 #endif uniform mat4 u_transformPositionViewToLocal; uniform mat3 u_transformDirectionViewToLocal; uniform vec3 u_cameraPositionLocal; uniform vec3 u_cameraDirectionLocal; uniform float u_stepSize; #if defined(PICKING) uniform vec4 u_pickColor; #endif vec3 getSampleSize(in int level) { vec3 sampleCount = exp2(float(level)) * vec3(u_dimensions); vec3 sampleSizeUv = 1.0 / sampleCount; return scaleShapeUvToShapeSpace(sampleSizeUv); } #define MINIMUM_STEP_SCALAR (0.02) #define SHIFT_FRACTION (0.001) /** * Given a coordinate within a tile, and sample spacings along a ray through * the coordinate, find the distance to the points where the ray entered and * exited the voxel cell, along with the surface normals at those points. * The surface normals are returned in shape space coordinates. */ RayShapeIntersection getVoxelIntersection(in vec3 tileUv, in vec3 sampleSizeAlongRay) { vec3 voxelCoord = tileUv * vec3(u_dimensions); vec3 directions = sign(sampleSizeAlongRay); vec3 positiveDirections = max(directions, 0.0); vec3 entryCoord = mix(ceil(voxelCoord), floor(voxelCoord), positiveDirections); vec3 exitCoord = entryCoord + directions; vec3 distanceFromEntry = -abs((entryCoord - voxelCoord) * sampleSizeAlongRay); float lastEntry = maxComponent(distanceFromEntry); bvec3 isLastEntry = equal(distanceFromEntry, vec3(lastEntry)); vec3 entryNormal = -1.0 * vec3(isLastEntry) * directions; vec4 entry = vec4(entryNormal, lastEntry); vec3 distanceToExit = abs((exitCoord - voxelCoord) * sampleSizeAlongRay); float firstExit = minComponent(distanceToExit); bvec3 isFirstExit = equal(distanceToExit, vec3(firstExit)); vec3 exitNormal = vec3(isFirstExit) * directions; vec4 exit = vec4(exitNormal, firstExit); return RayShapeIntersection(entry, exit); } vec4 getStepSize(in SampleData sampleData, in Ray viewRay, in RayShapeIntersection shapeIntersection, in mat3 jacobianT, in float currentT) { vec3 gradient = viewRay.dir * jacobianT; vec3 sampleSizeAlongRay = getSampleSize(sampleData.tileCoords.w) / gradient; RayShapeIntersection voxelIntersection = getVoxelIntersection(sampleData.tileUv, sampleSizeAlongRay); // Transform normal from shape space to Cartesian space to eye space vec3 voxelNormal = jacobianT * voxelIntersection.entry.xyz; voxelNormal = normalize(czm_normal * voxelNormal); // Compare with the shape intersection, to choose the appropriate normal vec4 voxelEntry = vec4(voxelNormal, currentT + voxelIntersection.entry.w); vec4 entry = intersectionMax(shapeIntersection.entry, voxelEntry); float fixedStep = minComponent(abs(sampleSizeAlongRay)) * u_stepSize; float shift = fixedStep * SHIFT_FRACTION; float dt = voxelIntersection.exit.w + shift; if ((currentT + dt) > shapeIntersection.exit.w) { // Stop at end of shape dt = shapeIntersection.exit.w - currentT + shift; } float stepSize = clamp(dt, fixedStep * MINIMUM_STEP_SCALAR, fixedStep + shift); return vec4(entry.xyz, stepSize); } vec2 packIntToVec2(int value) { float shifted = float(value) / 255.0; float lowBits = fract(shifted); float highBits = floor(shifted) / 255.0; return vec2(highBits, lowBits); } vec2 packFloatToVec2(float value) { float lowBits = fract(value); float highBits = floor(value) / 255.0; return vec2(highBits, lowBits); } int getSampleIndex(in SampleData sampleData) { // tileUv = 1.0 is a valid coordinate but sampleIndex = u_inputDimensions is not. // (tileUv = 1.0 corresponds to the far edge of the last sample, at index = u_inputDimensions - 1). // Clamp to [0, voxelDimensions - 0.5) to avoid numerical error before flooring vec3 maxCoordinate = vec3(u_inputDimensions) - vec3(0.5); vec3 inputCoordinate = clamp(sampleData.inputCoordinate, vec3(0.0), maxCoordinate); ivec3 sampleIndex = ivec3(floor(inputCoordinate)); // Convert to a 1D index for lookup in a 1D data array return sampleIndex.x + u_inputDimensions.x * (sampleIndex.y + u_inputDimensions.y * sampleIndex.z); } /** * Compute the view ray at the current fragment, in the local coordinates of the shape. */ Ray getViewRayLocal() { vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord); vec3 origin; vec3 direction; if (czm_orthographicIn3D == 1.0) { eyeCoordinates.z = 0.0; origin = (u_transformPositionViewToLocal * eyeCoordinates).xyz; direction = u_cameraDirectionLocal; } else { origin = u_cameraPositionLocal; direction = u_transformDirectionViewToLocal * normalize(eyeCoordinates.xyz); } return Ray(origin, direction); } Ray getViewRayEC() { vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord); vec3 viewPosEC = (czm_orthographicIn3D == 1.0) ? vec3(eyeCoordinates.xy, 0.0) : vec3(0.0); vec3 viewDirEC = normalize(eyeCoordinates.xyz); return Ray(viewPosEC, viewDirEC); } void main() { Ray viewRayLocal = getViewRayLocal(); Ray viewRayEC = getViewRayEC(); Intersections ix; vec2 screenCoord = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1] RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayLocal, viewRayEC, ix); // Exit early if the scene was completely missed. if (shapeIntersection.entry.w == NO_HIT) { discard; } float currentT = shapeIntersection.entry.w; float endT = shapeIntersection.exit.w; vec3 positionEC = viewRayEC.pos + currentT * viewRayEC.dir; TileAndUvCoordinate tileAndUv = getTileAndUvCoordinate(positionEC); vec3 positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir; mat3 jacobianT = convertLocalToShapeSpaceDerivative(positionLocal); // Traverse the tree from the start position TraversalData traversalData; SampleData sampleDatas[SAMPLE_COUNT]; traverseOctreeFromBeginning(tileAndUv, traversalData, sampleDatas); vec4 step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT); FragmentInput fragmentInput; #if defined(STATISTICS) setStatistics(fragmentInput.metadataStatistics); #endif czm_modelMaterial materialOutput; vec4 colorAccum = vec4(0.0); for (int stepCount = 0; stepCount < STEP_COUNT_MAX; ++stepCount) { // Read properties from the megatexture based on the traversal state Properties properties = accumulatePropertiesFromMegatexture(sampleDatas); // Prepare the custom shader inputs copyPropertiesToMetadata(properties, fragmentInput.metadata); fragmentInput.attributes.positionEC = positionEC; // Re-normalize normals: some shape intersections may have been scaled to encode positive/negative shapes fragmentInput.attributes.normalEC = normalize(step.xyz); fragmentInput.voxel.viewDirUv = viewRayLocal.dir; fragmentInput.voxel.travelDistance = step.w; fragmentInput.voxel.stepCount = stepCount; fragmentInput.voxel.tileIndex = sampleDatas[0].megatextureIndex; fragmentInput.voxel.sampleIndex = getSampleIndex(sampleDatas[0]); fragmentInput.voxel.distanceToDepthBuffer = ix.distanceToDepthBuffer - currentT; // Run the custom shader fragmentMain(fragmentInput, materialOutput); // Sanitize the custom shader output vec4 color = vec4(materialOutput.diffuse, materialOutput.alpha); color.rgb = max(color.rgb, vec3(0.0)); color.a = clamp(color.a, 0.0, 1.0); // Pre-multiplied alpha blend colorAccum += (1.0 - colorAccum.a) * vec4(color.rgb * color.a, color.a); // Stop traversing if the alpha has been fully saturated if (colorAccum.a > ALPHA_ACCUM_MAX) { colorAccum.a = ALPHA_ACCUM_MAX; break; } if (step.w == 0.0) { // Shape is infinitely thin. The ray may have hit the edge of a // foreground voxel. Step ahead slightly to check for more voxels step.w = 0.001; } // Keep raymarching currentT += step.w; // Check if there's more intersections. if (currentT > endT) { #if (INTERSECTION_COUNT == 1) break; #else shapeIntersection = nextIntersection(ix); if (shapeIntersection.entry.w == NO_HIT) { break; } else { // Found another intersection. Resume raymarching there currentT = shapeIntersection.entry.w; endT = shapeIntersection.exit.w; } #endif } positionEC = viewRayEC.pos + currentT * viewRayEC.dir; tileAndUv = getTileAndUvCoordinate(positionEC); positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir; jacobianT = convertLocalToShapeSpaceDerivative(positionLocal); // Traverse the tree from the current ray position. // This is similar to traverseOctreeFromBeginning but is faster when the ray is in the same tile as the previous step. traverseOctreeFromExisting(tileAndUv, traversalData, sampleDatas); step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT); } // Convert the alpha from [0,ALPHA_ACCUM_MAX] to [0,1] colorAccum.a /= ALPHA_ACCUM_MAX; #if defined(PICKING) // If alpha is 0.0 there is nothing to pick if (colorAccum.a == 0.0) { discard; } out_FragColor = u_pickColor; #elif defined(PICKING_VOXEL) // If alpha is 0.0 there is nothing to pick if (colorAccum.a == 0.0) { discard; } vec2 megatextureId = packIntToVec2(sampleDatas[0].megatextureIndex); vec2 sampleIndex = packIntToVec2(getSampleIndex(sampleDatas[0])); out_FragColor = vec4(megatextureId, sampleIndex); #else out_FragColor = colorAccum; #endif } `;var Bao=x(T(),1),SM=`in vec2 position; uniform vec4 u_ndcSpaceAxisAlignedBoundingBox; void main() { vec2 aabbMin = u_ndcSpaceAxisAlignedBoundingBox.xy; vec2 aabbMax = u_ndcSpaceAxisAlignedBoundingBox.zw; vec2 translation = 0.5 * (aabbMax + aabbMin); vec2 scale = 0.5 * (aabbMax - aabbMin); gl_Position = vec4(position * scale + translation, 0.0, 1.0); } `;var Hao=x(T(),1),ZM=`/* Intersection defines #define INTERSECTION_COUNT ### */ #define NO_HIT (-czm_infinity) #define INF_HIT (czm_infinity * 0.5) struct RayShapeIntersection { vec4 entry; vec4 exit; }; vec4 intersectionMin(in vec4 intersect0, in vec4 intersect1) { if (intersect0.w == NO_HIT) { return intersect1; } else if (intersect1.w == NO_HIT) { return intersect0; } return (intersect0.w <= intersect1.w) ? intersect0 : intersect1; } vec4 intersectionMax(in vec4 intersect0, in vec4 intersect1) { return (intersect0.w >= intersect1.w) ? intersect0 : intersect1; } RayShapeIntersection intersectIntersections(in Ray ray, in RayShapeIntersection intersect0, in RayShapeIntersection intersect1) { bool missed = (intersect0.entry.w == NO_HIT) || (intersect1.entry.w == NO_HIT) || (intersect0.exit.w < intersect1.entry.w) || (intersect0.entry.w > intersect1.exit.w); if (missed) { vec4 miss = vec4(normalize(ray.dir), NO_HIT); return RayShapeIntersection(miss, miss); } vec4 entry = intersectionMax(intersect0.entry, intersect1.entry); vec4 exit = intersectionMin(intersect0.exit, intersect1.exit); return RayShapeIntersection(entry, exit); } struct Intersections { // Don't access these member variables directly - call the functions instead. // Store an array of ray-surface intersections. Each intersection is composed of: // .xyz for the surface normal at the intersection point // .w for the T value // The scale of the normal encodes the shape intersection type: // length(intersection.xyz) = 1: positive shape entry // length(intersection.xyz) = 2: positive shape exit // length(intersection.xyz) = 3: negative shape entry // length(intersection.xyz) = 4: negative shape exit // INTERSECTION_COUNT is the number of ray-*shape* (volume) intersections, // so we need twice as many to track ray-*surface* intersections vec4 intersections[INTERSECTION_COUNT * 2]; float distanceToDepthBuffer; #if (INTERSECTION_COUNT > 1) // Maintain state for future nextIntersection calls int index; int surroundCount; bool surroundIsPositive; #endif }; RayShapeIntersection getFirstIntersection(in Intersections ix) { return RayShapeIntersection(ix.intersections[0], ix.intersections[1]); } vec4 encodeIntersectionType(vec4 intersection, int index, bool entry) { float scale = float(index > 0) * 2.0 + float(!entry) + 1.0; return vec4(intersection.xyz * scale, intersection.w); } // Use defines instead of real functions because WebGL1 cannot access array with non-constant index. #define setIntersection(/*inout Intersections*/ ix, /*int*/ index, /*float*/ t, /*bool*/ positive, /*bool*/ enter) (ix).intersections[(index)] = vec4(0.0, float(!positive) * 2.0 + float(!enter) + 1.0, 0.0, (t)) #define setIntersectionPair(/*inout Intersections*/ ix, /*int*/ index, /*vec2*/ entryExit) (ix).intersections[(index) * 2 + 0] = vec4(0.0, float((index) > 0) * 2.0 + 1.0, 0.0, (entryExit).x); (ix).intersections[(index) * 2 + 1] = vec4(0.0, float((index) > 0) * 2.0 + 2.0, 0.0, (entryExit).y) #define setSurfaceIntersection(/*inout Intersections*/ ix, /*int*/ index, /*vec4*/ intersection, /*bool*/ positive, /*bool*/ enter) (ix).intersections[(index)] = encodeIntersectionType((intersection), int(!positive), (enter)) #define setShapeIntersection(/*inout Intersections*/ ix, /*int*/ index, /*RayShapeIntersection*/ intersection) (ix).intersections[(index) * 2 + 0] = encodeIntersectionType((intersection).entry, (index), true); (ix).intersections[(index) * 2 + 1] = encodeIntersectionType((intersection).exit, (index), false) #if (INTERSECTION_COUNT > 1) void initializeIntersections(inout Intersections ix) { // Sort the intersections from min T to max T with bubble sort. // Note: If this sorting function changes, some of the intersection test may // need to be updated. Search for "bubble sort" to find those areas. const int sortPasses = INTERSECTION_COUNT * 2 - 1; for (int n = sortPasses; n > 0; --n) { for (int i = 0; i < sortPasses; ++i) { // The loop should be: for (i = 0; i < n; ++i) {...} but WebGL1 cannot // loop with non-constant condition, so it has to break early instead if (i >= n) { break; } vec4 intersect0 = ix.intersections[i + 0]; vec4 intersect1 = ix.intersections[i + 1]; bool inOrder = intersect0.w <= intersect1.w; ix.intersections[i + 0] = inOrder ? intersect0 : intersect1; ix.intersections[i + 1] = inOrder ? intersect1 : intersect0; } } // Prepare initial state for nextIntersection ix.index = 0; ix.surroundCount = 0; ix.surroundIsPositive = false; } #endif #if (INTERSECTION_COUNT > 1) RayShapeIntersection nextIntersection(inout Intersections ix) { vec4 surfaceIntersection = vec4(0.0, 0.0, 0.0, NO_HIT); RayShapeIntersection shapeIntersection = RayShapeIntersection(surfaceIntersection, surfaceIntersection); const int passCount = INTERSECTION_COUNT * 2; if (ix.index == passCount) { return shapeIntersection; } for (int i = 0; i < passCount; ++i) { // The loop should be: for (i = ix.index; i < passCount; ++i) {...} but WebGL1 cannot // loop with non-constant condition, so it has to continue instead. if (i < ix.index) { continue; } ix.index = i + 1; surfaceIntersection = ix.intersections[i]; int intersectionType = int(length(surfaceIntersection.xyz) - 0.5); bool currShapeIsPositive = intersectionType < 2; bool enter = intersectionType % 2 == 0; ix.surroundCount += enter ? +1 : -1; ix.surroundIsPositive = currShapeIsPositive ? enter : ix.surroundIsPositive; // entering positive or exiting negative if (ix.surroundCount == 1 && ix.surroundIsPositive && enter == currShapeIsPositive) { shapeIntersection.entry = surfaceIntersection; } // exiting positive or entering negative after being inside positive bool exitPositive = !enter && currShapeIsPositive && ix.surroundCount == 0; bool enterNegativeFromPositive = enter && !currShapeIsPositive && ix.surroundCount == 2 && ix.surroundIsPositive; if (exitPositive || enterNegativeFromPositive) { shapeIntersection.exit = surfaceIntersection; // entry and exit have been found, so the loop can stop if (exitPositive) { // After exiting positive shape there is nothing left to intersect, so jump to the end index. ix.index = passCount; } break; } } return shapeIntersection; } #endif // NOTE: initializeIntersections, nextIntersection aren't even declared unless INTERSECTION_COUNT > 1 `;var Jao=x(T(),1),VM=`// See IntersectionUtils.glsl for the definitions of Ray, Intersections, // setIntersectionPair, INF_HIT, NO_HIT /* intersectDepth defines (set in Scene/VoxelRenderResources.js) #define DEPTH_INTERSECTION_INDEX ### */ void intersectDepth(in vec2 screenCoord, in Ray ray, inout Intersections ix) { float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, screenCoord)); float entry; float exit; if (logDepthOrDepth != 0.0) { // Calculate how far the ray must travel before it hits the depth buffer. vec4 eyeCoordinateDepth = czm_screenToEyeCoordinates(screenCoord, logDepthOrDepth); eyeCoordinateDepth /= eyeCoordinateDepth.w; entry = dot(eyeCoordinateDepth.xyz - ray.pos, ray.dir); exit = +INF_HIT; } else { // There's no depth at this location. entry = NO_HIT; exit = NO_HIT; } ix.distanceToDepthBuffer = entry; #if defined(DEPTH_TEST) setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(entry, exit)); #endif } `;var Qao=x(T(),1),CM=`// See IntersectionUtils.glsl for the definitions of Ray, Intersections, INF_HIT, // NO_HIT, setShapeIntersection /* Clipping plane defines (set in Scene/VoxelRenderResources.js) #define CLIPPING_PLANES_UNION #define CLIPPING_PLANES_COUNT #define CLIPPING_PLANES_INTERSECTION_INDEX */ uniform sampler2D u_clippingPlanesTexture; uniform mat4 u_clippingPlanesMatrix; // Plane is in Hessian Normal Form vec4 intersectPlane(in Ray ray, in vec4 plane) { vec3 n = plane.xyz; // normal float w = plane.w; // -dot(pointOnPlane, normal) float a = dot(ray.pos, n); float b = dot(ray.dir, n); float t = -(w + a) / b; return vec4(n, t); } #ifdef CLIPPING_PLANES void intersectClippingPlanes(in Ray ray, inout Intersections ix) { vec4 backSide = vec4(-ray.dir, -INF_HIT); vec4 farSide = vec4(ray.dir, +INF_HIT); RayShapeIntersection clippingVolume; #if (CLIPPING_PLANES_COUNT == 1) // Union and intersection are the same when there's one clipping plane, and the code // is more simplified. vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, 0); vec4 intersection = intersectPlane(ray, planeUv); bool reflects = dot(ray.dir, intersection.xyz) < 0.0; clippingVolume.entry = reflects ? backSide : intersection; clippingVolume.exit = reflects ? intersection : farSide; setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX, clippingVolume); #elif defined(CLIPPING_PLANES_UNION) vec4 firstTransmission = vec4(ray.dir, +INF_HIT); vec4 lastReflection = vec4(-ray.dir, -INF_HIT); for (int i = 0; i < CLIPPING_PLANES_COUNT; i++) { vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, i); vec4 intersection = intersectPlane(ray, planeUv); if (dot(ray.dir, planeUv.xyz) > 0.0) { firstTransmission = intersection.w <= firstTransmission.w ? intersection : firstTransmission; } else { lastReflection = intersection.w >= lastReflection.w ? intersection : lastReflection; } } clippingVolume.entry = backSide; clippingVolume.exit = lastReflection; setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX + 0, clippingVolume); clippingVolume.entry = firstTransmission; clippingVolume.exit = farSide; setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX + 1, clippingVolume); #else // intersection vec4 lastTransmission = vec4(ray.dir, -INF_HIT); vec4 firstReflection = vec4(-ray.dir, +INF_HIT); for (int i = 0; i < CLIPPING_PLANES_COUNT; i++) { vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, i); vec4 intersection = intersectPlane(ray, planeUv); if (dot(ray.dir, planeUv.xyz) > 0.0) { lastTransmission = intersection.w > lastTransmission.w ? intersection : lastTransmission; } else { firstReflection = intersection.w < firstReflection.w ? intersection: firstReflection; } } if (lastTransmission.w < firstReflection.w) { clippingVolume.entry = lastTransmission; clippingVolume.exit = firstReflection; } else { clippingVolume.entry = vec4(-ray.dir, NO_HIT); clippingVolume.exit = vec4(ray.dir, NO_HIT); } setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX, clippingVolume); #endif } #endif `;var $ao=x(T(),1),IR=`// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, INF_HIT, // RayShapeIntersection vec4 transformNormalToEC(in vec4 intersection) { return vec4(normalize(czm_normal * intersection.xyz), intersection.w); } RayShapeIntersection transformNormalsToEC(in RayShapeIntersection ix) { return RayShapeIntersection(transformNormalToEC(ix.entry), transformNormalToEC(ix.exit)); } vec4 intersectLongitude(in Ray ray, in float angle, in bool positiveNormal) { float normalSign = positiveNormal ? 1.0 : -1.0; vec2 planeNormal = vec2(-sin(angle), cos(angle)) * normalSign; vec2 position = ray.pos.xy; vec2 direction = ray.dir.xy; float approachRate = dot(direction, planeNormal); float distance = -dot(position, planeNormal); float t = (approachRate == 0.0) ? NO_HIT : distance / approachRate; return vec4(planeNormal, 0.0, t); } RayShapeIntersection intersectHalfSpace(in Ray ray, in float angle, in bool positiveNormal) { vec4 intersection = intersectLongitude(ray, angle, positiveNormal); vec4 farSide = vec4(normalize(ray.dir), INF_HIT); bool hitFront = (intersection.w > 0.0) == (dot(ray.pos.xy, intersection.xy) > 0.0); if (!hitFront) { return RayShapeIntersection(intersection, farSide); } else { return RayShapeIntersection(-1.0 * farSide, intersection); } } void intersectFlippedWedge(in Ray ray, in vec2 minMaxAngle, out RayShapeIntersection intersections[2]) { intersections[0] = transformNormalsToEC(intersectHalfSpace(ray, minMaxAngle.x, false)); intersections[1] = transformNormalsToEC(intersectHalfSpace(ray, minMaxAngle.y, true)); } bool hitPositiveHalfPlane(in Ray ray, in vec4 intersection, in bool positiveNormal) { float normalSign = positiveNormal ? 1.0 : -1.0; vec2 planeDirection = vec2(intersection.y, -intersection.x) * normalSign; vec2 hit = ray.pos.xy + intersection.w * ray.dir.xy; return dot(hit, planeDirection) > 0.0; } void intersectHalfPlane(in Ray ray, in float angle, out RayShapeIntersection intersections[2]) { vec4 intersection = intersectLongitude(ray, angle, true); vec4 farSide = vec4(normalize(ray.dir), INF_HIT); bool hitPositiveSide = hitPositiveHalfPlane(ray, intersection, true); farSide = transformNormalToEC(farSide); if (hitPositiveSide) { intersection = transformNormalToEC(intersection); intersections[0].entry = -1.0 * farSide; intersections[0].exit = vec4(-1.0 * intersection.xyz, intersection.w); intersections[1].entry = intersection; intersections[1].exit = farSide; } else { vec4 miss = vec4(normalize(czm_normal * ray.dir), NO_HIT); intersections[0].entry = -1.0 * farSide; intersections[0].exit = farSide; intersections[1].entry = miss; intersections[1].exit = miss; } } RayShapeIntersection intersectRegularWedge(in Ray ray, in vec2 minMaxAngle) { // Note: works for maxAngle > minAngle + pi, where the "regular wedge" // is actually a negative volume. // Compute intersections with the two planes. // Normals will point toward the "outside" (negative space) vec4 intersect1 = intersectLongitude(ray, minMaxAngle.x, false); vec4 intersect2 = intersectLongitude(ray, minMaxAngle.y, true); // Choose intersection with smallest T as the "first", the other as "last" // Note: first or last could be in the "shadow" wedge, beyond the tip bool inOrder = intersect1.w <= intersect2.w; vec4 first = inOrder ? intersect1 : intersect2; vec4 last = inOrder ? intersect2 : intersect1; bool firstIsAhead = first.w >= 0.0; bool startedInsideFirst = dot(ray.pos.xy, first.xy) < 0.0; bool exitFromInside = firstIsAhead == startedInsideFirst; bool lastIsAhead = last.w > 0.0; bool startedOutsideLast = dot(ray.pos.xy, last.xy) >= 0.0; bool enterFromOutside = lastIsAhead == startedOutsideLast; vec4 farSide = vec4(normalize(ray.dir), INF_HIT); vec4 miss = vec4(normalize(ray.dir), NO_HIT); if (exitFromInside && enterFromOutside) { // Ray crosses both faces of negative wedge, exiting then entering the positive shape return transformNormalsToEC(RayShapeIntersection(first, last)); } else if (!exitFromInside && enterFromOutside) { // Ray starts inside wedge. last is in shadow wedge, and first is actually the entry return transformNormalsToEC(RayShapeIntersection(-1.0 * farSide, first)); } else if (exitFromInside && !enterFromOutside) { // First intersection was in the shadow wedge, so last is actually the exit return transformNormalsToEC(RayShapeIntersection(last, farSide)); } else { // !exitFromInside && !enterFromOutside // Both intersections were in the shadow wedge return transformNormalsToEC(RayShapeIntersection(miss, miss)); } } `;var tco=x(T(),1),RM=`// See IntersectionUtils.glsl for the definitions of Ray, RayShapeIntersection, // NO_HIT, Intersections /* Box defines (set in Scene/VoxelBoxShape.js) #define BOX_INTERSECTION_INDEX ### // always 0 */ uniform sampler2D u_renderBoundPlanesTexture; RayShapeIntersection intersectBoundPlanes(in Ray ray) { vec4 lastEntry = vec4(ray.dir, -INF_HIT); vec4 firstExit = vec4(-ray.dir, +INF_HIT); for (int i = 0; i < 6; i++) { vec4 boundPlane = getBoundPlane(u_renderBoundPlanesTexture, i); vec4 intersection = intersectPlane(ray, boundPlane); if (dot(ray.dir, boundPlane.xyz) < 0.0) { lastEntry = intersection.w > lastEntry.w ? intersection : lastEntry; } else { firstExit = intersection.w < firstExit.w ? intersection: firstExit; } } if (lastEntry.w < firstExit.w) { return RayShapeIntersection(lastEntry, firstExit); } else { return RayShapeIntersection(vec4(-ray.dir, NO_HIT), vec4(ray.dir, NO_HIT)); } } void intersectShape(in Ray rayUV, in Ray rayEC, inout Intersections ix) { RayShapeIntersection intersection = intersectBoundPlanes(rayEC); setShapeIntersection(ix, BOX_INTERSECTION_INDEX, intersection); } `;var ico=x(T(),1),GM=`// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, Intersections, // RayShapeIntersection, setSurfaceIntersection, setShapeIntersection, // intersectIntersections // See IntersectLongitude.glsl for the definitions of intersectHalfPlane, // intersectFlippedWedge, intersectRegularWedge /* Cylinder defines (set in Scene/VoxelCylinderShape.js) #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO #define CYLINDER_INTERSECTION_INDEX_RADIUS_MAX #define CYLINDER_INTERSECTION_INDEX_RADIUS_MIN #define CYLINDER_INTERSECTION_INDEX_ANGLE */ // Cylinder uniforms uniform vec2 u_cylinderRenderRadiusMinMax; #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE) uniform vec2 u_cylinderRenderAngleMinMax; #endif uniform sampler2D u_renderBoundPlanesTexture; RayShapeIntersection intersectBoundPlanes(in Ray ray) { vec4 lastEntry = vec4(ray.dir, -INF_HIT); vec4 firstExit = vec4(-ray.dir, +INF_HIT); for (int i = 0; i < 2; i++) { vec4 boundPlane = getBoundPlane(u_renderBoundPlanesTexture, i); vec4 intersection = intersectPlane(ray, boundPlane); if (dot(ray.dir, boundPlane.xyz) < 0.0) { lastEntry = intersection.w > lastEntry.w ? intersection : lastEntry; } else { firstExit = intersection.w < firstExit.w ? intersection: firstExit; } } if (lastEntry.w < firstExit.w) { return RayShapeIntersection(lastEntry, firstExit); } else { return RayShapeIntersection(vec4(-ray.dir, NO_HIT), vec4(ray.dir, NO_HIT)); } } /** * Find the intersection of a ray with a right cylindrical surface of a given radius * about the z-axis. */ RayShapeIntersection intersectCylinder(in Ray ray, in float radius, in bool convex) { vec2 position = ray.pos.xy; vec2 direction = ray.dir.xy; float a = dot(direction, direction); float b = dot(position, direction); float c = dot(position, position) - radius * radius; float determinant = b * b - a * c; if (determinant < 0.0) { vec4 miss = vec4(normalize(ray.dir), NO_HIT); return RayShapeIntersection(miss, miss); } determinant = sqrt(determinant); float t1 = (-b - determinant) / a; float t2 = (-b + determinant) / a; float signFlip = convex ? 1.0 : -1.0; vec3 normal1 = vec3((position + t1 * direction) * signFlip, 0.0); vec3 normal2 = vec3((position + t2 * direction) * signFlip, 0.0); // Return normals in eye coordinates vec4 intersect1 = vec4(normalize(czm_normal * normal1), t1); vec4 intersect2 = vec4(normalize(czm_normal * normal2), t2); return RayShapeIntersection(intersect1, intersect2); } /** * Find the intersection of a ray with a right cylindrical solid of given * radius and height bounds. NOTE: The shape is assumed to be convex. */ RayShapeIntersection intersectBoundedCylinder(in Ray ray, in Ray rayEC, in float radius) { RayShapeIntersection cylinderIntersection = intersectCylinder(ray, radius, true); RayShapeIntersection heightBoundsIntersection = intersectBoundPlanes(rayEC); return intersectIntersections(ray, cylinderIntersection, heightBoundsIntersection); } void intersectShape(in Ray ray, in Ray rayEC, inout Intersections ix) { RayShapeIntersection outerIntersect = intersectBoundedCylinder(ray, rayEC, u_cylinderRenderRadiusMinMax.y); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MAX, outerIntersect); if (outerIntersect.entry.w == NO_HIT) { return; } #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT) // When the cylinder is perfectly thin it's necessary to sandwich the // inner cylinder intersection inside the outer cylinder intersection. // Without this special case, // [outerMin, outerMax, innerMin, innerMax] will bubble sort to // [outerMin, innerMin, outerMax, innerMax] which will cause the back // side of the cylinder to be invisible because it will think the ray // is still inside the inner (negative) cylinder after exiting the // outer (positive) cylinder. // With this special case, // [outerMin, innerMin, innerMax, outerMax] will bubble sort to // [outerMin, innerMin, innerMax, outerMax] which will work correctly. // Note: If initializeIntersections() changes its sorting function // from bubble sort to something else, this code may need to change. RayShapeIntersection innerIntersect = intersectCylinder(ray, 1.0, false); setSurfaceIntersection(ix, 0, outerIntersect.entry, true, true); // positive, enter setSurfaceIntersection(ix, 1, innerIntersect.entry, false, true); // negative, enter setSurfaceIntersection(ix, 2, innerIntersect.exit, false, false); // negative, exit setSurfaceIntersection(ix, 3, outerIntersect.exit, true, false); // positive, exit #elif defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN) RayShapeIntersection innerIntersect = intersectCylinder(ray, u_cylinderRenderRadiusMinMax.x, false); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MIN, innerIntersect); #endif #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF) RayShapeIntersection wedgeIntersect = intersectRegularWedge(ray, u_cylinderRenderAngleMinMax); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect); #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF) RayShapeIntersection wedgeIntersects[2]; intersectFlippedWedge(ray, u_cylinderRenderAngleMinMax, wedgeIntersects); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]); #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO) RayShapeIntersection wedgeIntersects[2]; intersectHalfPlane(ray, u_cylinderRenderAngleMinMax.x, wedgeIntersects); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]); #endif } `;var rco=x(T(),1),AM=`// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, INF_HIT, Intersections, // RayShapeIntersection, setSurfaceIntersection, setShapeIntersection // See IntersectLongitude.glsl for the definitions of intersectHalfPlane, // intersectFlippedWedge, intersectRegularWedge /* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js) #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF #define ELLIPSOID_INTERSECTION_INDEX_LONGITUDE #define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX #define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN #define ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX #define ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN */ #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE) uniform vec2 u_ellipsoidRenderLongitudeMinMax; #endif uniform float u_eccentricitySquared; uniform vec2 u_ellipsoidRenderLatitudeSinMinMax; uniform vec2 u_clipMinMaxHeight; // Values are negative: clipHeight - maxShapeHeight RayShapeIntersection intersectZPlane(in Ray ray, in float z) { float t = -ray.pos.z / ray.dir.z; bool startsOutside = sign(ray.pos.z) == sign(z); bool entry = (t >= 0.0) != startsOutside; vec4 intersect = vec4(0.0, 0.0, z, t); vec4 farSide = vec4(normalize(ray.dir), INF_HIT); if (entry) { return RayShapeIntersection(intersect, farSide); } else { return RayShapeIntersection(-1.0 * farSide, intersect); } } RayShapeIntersection intersectHeight(in Ray ray, in float height, in bool convex) { // Scale the ray by the ellipsoid axes to make it a unit sphere // Note: approximating ellipsoid + height as an ellipsoid vec3 radiiCorrection = vec3(1.0) / (u_ellipsoidRadii + height); vec3 position = ray.pos * radiiCorrection; vec3 direction = ray.dir * radiiCorrection; float a = dot(direction, direction); // ~ 1.0 (or maybe 4.0 if ray is scaled) float b = dot(direction, position); // roughly inside [-1.0, 1.0] when zoomed in float c = dot(position, position) - 1.0; // ~ 0.0 when zoomed in. float determinant = b * b - a * c; // ~ b * b when zoomed in if (determinant < 0.0) { vec4 miss = vec4(normalize(direction), NO_HIT); return RayShapeIntersection(miss, miss); } determinant = sqrt(determinant); // Compute larger root using standard formula float signB = b < 0.0 ? -1.0 : 1.0; // The other root may suffer from subtractive cancellation in the standard formula. // Compute it from the first root instead. float t1 = (-b - signB * determinant) / a; float t2 = c / (a * t1); float tmin = min(t1, t2); float tmax = max(t1, t2); float directionScale = convex ? 1.0 : -1.0; vec3 d1 = directionScale * (position + tmin * direction); vec3 d2 = directionScale * (position + tmax * direction); // Return normals in eye coordinates. Use spherical approximation for the normal. vec3 normal1 = normalize(czm_normal * d1); vec3 normal2 = normalize(czm_normal * d2); return RayShapeIntersection(vec4(normal1, tmin), vec4(normal2, tmax)); } /** * Given a circular cone around the z-axis, with apex at the origin, * find the parametric distance(s) along a ray where that ray intersects * the cone. * The cone opening angle is described by the squared cosine of * its half-angle (the angle between the Z-axis and the surface) */ vec2 intersectDoubleEndedCone(in Ray ray, in float cosSqrHalfAngle) { vec3 o = ray.pos; vec3 d = ray.dir; float sinSqrHalfAngle = 1.0 - cosSqrHalfAngle; float aSin = d.z * d.z * sinSqrHalfAngle; float aCos = -dot(d.xy, d.xy) * cosSqrHalfAngle; float a = aSin + aCos; float bSin = d.z * o.z * sinSqrHalfAngle; float bCos = -dot(o.xy, d.xy) * cosSqrHalfAngle; float b = bSin + bCos; float cSin = o.z * o.z * sinSqrHalfAngle; float cCos = -dot(o.xy, o.xy) * cosSqrHalfAngle; float c = cSin + cCos; // determinant = b * b - a * c. But bSin * bSin = aSin * cSin. // Avoid subtractive cancellation by expanding to eliminate these terms float determinant = 2.0 * bSin * bCos + bCos * bCos - aSin * cCos - aCos * cSin - aCos * cCos; if (determinant < 0.0) { return vec2(NO_HIT); } else if (a == 0.0) { // Ray is parallel to cone surface return (b == 0.0) ? vec2(NO_HIT) // Ray is on cone surface : vec2(-0.5 * c / b, NO_HIT); } determinant = sqrt(determinant); // Compute larger root using standard formula float signB = b < 0.0 ? -1.0 : 1.0; float t1 = (-b - signB * determinant) / a; // The other root may suffer from subtractive cancellation in the standard formula. // Compute it from the first root instead. float t2 = c / (a * t1); float tmin = min(t1, t2); float tmax = max(t1, t2); return vec2(tmin, tmax); } /** * Given a point on a conical surface, find the surface normal at that point. */ vec3 getConeNormal(in vec3 p, in bool convex) { // Start with radial component pointing toward z-axis vec2 radial = -abs(p.z) * normalize(p.xy); // Z component points toward opening of cone float zSign = (p.z < 0.0) ? -1.0 : 1.0; float z = length(p.xy) * zSign; // Flip normal if shape is convex float flip = (convex) ? -1.0 : 1.0; return normalize(vec3(radial, z) * flip); } /** * Compute the shift between the ellipsoid origin and the apex of a cone of latitude */ float getLatitudeConeShift(in float sinLatitude) { // Find prime vertical radius of curvature: // the distance along the ellipsoid normal to the intersection with the z-axis float x2 = u_eccentricitySquared * sinLatitude * sinLatitude; float primeVerticalRadius = u_ellipsoidRadii.x * inversesqrt(1.0 - x2); // Compute a shift from the origin to the intersection of the cone with the z-axis return primeVerticalRadius * u_eccentricitySquared * sinLatitude; } void intersectFlippedCone(in Ray ray, in float cosHalfAngle, out RayShapeIntersection intersections[2]) { // Shift the ray to account for the latitude cone not being centered at the Earth center ray.pos.z += getLatitudeConeShift(cosHalfAngle); float cosSqrHalfAngle = cosHalfAngle * cosHalfAngle; vec2 intersect = intersectDoubleEndedCone(ray, cosSqrHalfAngle); vec4 miss = vec4(normalize(ray.dir), NO_HIT); vec4 farSide = vec4(normalize(ray.dir), INF_HIT); // Initialize output with no intersections intersections[0].entry = -1.0 * farSide; intersections[0].exit = farSide; intersections[1].entry = miss; intersections[1].exit = miss; if (intersect.x == NO_HIT) { return; } // Find the points of intersection float tmin = intersect.x; float tmax = intersect.y; vec3 p0 = ray.pos + tmin * ray.dir; vec3 p1 = ray.pos + tmax * ray.dir; vec4 intersect0 = vec4(getConeNormal(p0, true), tmin); vec4 intersect1 = vec4(getConeNormal(p1, true), tmax); bool p0InShadowCone = sign(p0.z) != sign(cosHalfAngle); bool p1InShadowCone = sign(p1.z) != sign(cosHalfAngle); if (p0InShadowCone && p1InShadowCone) { // no valid intersections } else if (p0InShadowCone) { intersections[0].exit = intersect1; } else if (p1InShadowCone) { intersections[0].entry = intersect0; } else { intersections[0].exit = intersect0; intersections[1].entry = intersect1; intersections[1].exit = farSide; } } RayShapeIntersection intersectRegularCone(in Ray ray, in float cosHalfAngle, in bool convex) { // Shift the ray to account for the latitude cone not being centered at the Earth center ray.pos.z += getLatitudeConeShift(cosHalfAngle); float cosSqrHalfAngle = cosHalfAngle * cosHalfAngle; vec2 intersect = intersectDoubleEndedCone(ray, cosSqrHalfAngle); vec4 miss = vec4(normalize(ray.dir), NO_HIT); vec4 farSide = vec4(normalize(ray.dir), INF_HIT); if (intersect.x == NO_HIT) { return RayShapeIntersection(miss, miss); } // Find the points of intersection float tmin = intersect.x; float tmax = intersect.y; vec3 p0 = ray.pos + tmin * ray.dir; vec3 p1 = ray.pos + tmax * ray.dir; vec4 intersect0 = vec4(getConeNormal(p0, convex), tmin); vec4 intersect1 = vec4(getConeNormal(p1, convex), tmax); bool p0InShadowCone = sign(p0.z) != sign(cosHalfAngle); bool p1InShadowCone = sign(p1.z) != sign(cosHalfAngle); if (p0InShadowCone && p1InShadowCone) { return RayShapeIntersection(miss, miss); } else if (p0InShadowCone) { return RayShapeIntersection(intersect1, farSide); } else if (p1InShadowCone) { return RayShapeIntersection(-1.0 * farSide, intersect0); } else { return RayShapeIntersection(intersect0, intersect1); } } void intersectShape(in Ray ray, in Ray rayEC, inout Intersections ix) { // Outer ellipsoid RayShapeIntersection outerIntersect = intersectHeight(ray, u_clipMinMaxHeight.y, true); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX, outerIntersect); // Exit early if the outer ellipsoid was missed. if (outerIntersect.entry.w == NO_HIT) { return; } // Inner ellipsoid RayShapeIntersection innerIntersect = intersectHeight(ray, u_clipMinMaxHeight.x, false); if (innerIntersect.entry.w == NO_HIT) { setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN, innerIntersect); } else { // When the ellipsoid is large and thin it's possible for floating point math // to cause the ray to intersect the inner ellipsoid before the outer ellipsoid. // To prevent this from happening, clamp innerIntersect to outerIntersect and // sandwich the inner ellipsoid intersection inside the outer ellipsoid intersection. // Without this special case, // [outerMin, outerMax, innerMin, innerMax] will bubble sort to // [outerMin, innerMin, outerMax, innerMax] which will cause the back // side of the ellipsoid to be invisible because it will think the ray // is still inside the inner (negative) ellipsoid after exiting the // outer (positive) ellipsoid. // With this special case, // [outerMin, innerMin, innerMax, outerMax] will bubble sort to // [outerMin, innerMin, innerMax, outerMax] which will work correctly. // Note: If initializeIntersections() changes its sorting function // from bubble sort to something else, this code may need to change. innerIntersect.entry.w = max(innerIntersect.entry.w, outerIntersect.entry.w); innerIntersect.exit.w = min(innerIntersect.exit.w, outerIntersect.exit.w); setSurfaceIntersection(ix, 0, outerIntersect.entry, true, true); // positive, enter setSurfaceIntersection(ix, 1, innerIntersect.entry, false, true); // negative, enter setSurfaceIntersection(ix, 2, innerIntersect.exit, false, false); // negative, exit setSurfaceIntersection(ix, 3, outerIntersect.exit, true, false); // positive, exit } // Bottom cone #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF) RayShapeIntersection bottomConeIntersection = intersectRegularCone(ray, u_ellipsoidRenderLatitudeSinMinMax.x, false); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN, bottomConeIntersection); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF) RayShapeIntersection bottomConeIntersection = intersectZPlane(ray, -1.0); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN, bottomConeIntersection); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF) RayShapeIntersection bottomConeIntersections[2]; intersectFlippedCone(ray, u_ellipsoidRenderLatitudeSinMinMax.x, bottomConeIntersections); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN + 0, bottomConeIntersections[0]); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN + 1, bottomConeIntersections[1]); #endif // Top cone #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF) RayShapeIntersection topConeIntersections[2]; intersectFlippedCone(ray, u_ellipsoidRenderLatitudeSinMinMax.y, topConeIntersections); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX + 0, topConeIntersections[0]); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX + 1, topConeIntersections[1]); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF) RayShapeIntersection topConeIntersection = intersectZPlane(ray, 1.0); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX, topConeIntersection); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF) RayShapeIntersection topConeIntersection = intersectRegularCone(ray, u_ellipsoidRenderLatitudeSinMinMax.y, false); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX, topConeIntersection); #endif // Wedge #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO) RayShapeIntersection wedgeIntersects[2]; intersectHalfPlane(ray, u_ellipsoidRenderLongitudeMinMax.x, wedgeIntersects); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersects[0]); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersects[1]); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF) RayShapeIntersection wedgeIntersect = intersectRegularWedge(ray, u_ellipsoidRenderLongitudeMinMax); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE, wedgeIntersect); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF) RayShapeIntersection wedgeIntersects[2]; intersectFlippedWedge(ray, u_ellipsoidRenderLongitudeMinMax, wedgeIntersects); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersects[0]); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersects[1]); #endif } `;var aco=x(T(),1),TZ=`// Main intersection function for Voxel scenes. // See IntersectBox.glsl, IntersectCylinder.glsl, or IntersectEllipsoid.glsl // for the definition of intersectShape. The appropriate function is selected // based on the VoxelPrimitive shape type, and added to the shader in // Scene/VoxelRenderResources.js. // See also IntersectClippingPlane.glsl and IntersectDepth.glsl. // See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, // getFirstIntersection, initializeIntersections, nextIntersection. /* Intersection defines (set in Scene/VoxelRenderResources.js) #define INTERSECTION_COUNT ### */ RayShapeIntersection intersectScene(in vec2 screenCoord, in Ray ray, in Ray rayEC, out Intersections ix) { // Do a ray-shape intersection to find the exact starting and ending points. intersectShape(ray, rayEC, ix); // Exit early if the positive shape was completely missed or behind the ray. RayShapeIntersection intersection = getFirstIntersection(ix); if (intersection.entry.w == NO_HIT) { // Positive shape was completely missed - so exit early. return intersection; } // Clipping planes #if defined(CLIPPING_PLANES) intersectClippingPlanes(ray, ix); #endif // Depth intersectDepth(screenCoord, rayEC, ix); // Find the first intersection that's in front of the ray #if (INTERSECTION_COUNT > 1) initializeIntersections(ix); for (int i = 0; i < INTERSECTION_COUNT; ++i) { intersection = nextIntersection(ix); if (intersection.exit.w > 0.0) { // Set start to 0.0 when ray is inside the shape. intersection.entry.w = max(intersection.entry.w, 0.0); break; } } #else // Set start to 0.0 when ray is inside the shape. intersection.entry.w = max(intersection.entry.w, 0.0); #endif return intersection; } `;var lco=x(T(),1),EM=`uniform vec3 u_boxLocalToShapeUvScale; uniform ivec4 u_cameraTileCoordinates; uniform vec3 u_cameraTileUv; uniform mat3 u_boxEcToXyz; mat3 convertLocalToShapeSpaceDerivative(in vec3 positionLocal) { // For BOX, local space = shape space, so the Jacobian is the identity matrix. return mat3(1.0); } vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) { return shapeUv / u_boxLocalToShapeUvScale; } vec3 convertEcToDeltaTile(in vec3 positionEC) { vec3 dPosition = u_boxEcToXyz * positionEC; return u_boxLocalToShapeUvScale * dPosition * float(1 << u_cameraTileCoordinates.w); } TileAndUvCoordinate getTileAndUvCoordinate(in vec3 positionEC) { vec3 deltaTileCoordinate = convertEcToDeltaTile(positionEC); vec3 tileUvSum = u_cameraTileUv + deltaTileCoordinate; ivec3 tileCoordinate = u_cameraTileCoordinates.xyz + ivec3(floor(tileUvSum)); tileCoordinate = min(max(ivec3(0), tileCoordinate), ivec3((1 << u_cameraTileCoordinates.w) - 1)); ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz; vec3 tileUv = clamp(tileUvSum - vec3(tileCoordinateChange), 0.0, 1.0); return TileAndUvCoordinate(ivec4(tileCoordinate, u_cameraTileCoordinates.w), tileUv); } `;var uco=x(T(),1),LM=`uniform vec3 u_cylinderLocalToShapeUvScale; // x = radius scale, y = angle scale, z = height scale uniform float u_cylinderShapeUvAngleRangeOrigin; uniform mat3 u_cylinderEcToRadialTangentUp; uniform ivec4 u_cameraTileCoordinates; uniform vec3 u_cameraTileUv; uniform vec3 u_cameraShapePosition; // (radial distance, angle, height) of camera in shape space mat3 convertLocalToShapeSpaceDerivative(in vec3 position) { vec3 radial = normalize(vec3(position.xy, 0.0)); vec3 z = vec3(0.0, 0.0, 1.0); vec3 east = normalize(vec3(-position.y, position.x, 0.0)); return mat3(radial, east / length(position.xy), z); } vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) { float radius = shapeUv.x / u_cylinderLocalToShapeUvScale.x; float angle = shapeUv.y * czm_twoPi / u_cylinderLocalToShapeUvScale.y; float height = shapeUv.z / u_cylinderLocalToShapeUvScale.z; return vec3(radius, angle, height); } /** * Computes the change in polar coordinates given a change in position. * @param {vec2} dPosition The change in position in Cartesian coordinates. * @param {float} cameraRadialDistance The radial distance of the camera from the origin. * @return {vec2} The change in polar coordinates (radial distance, angle). */ vec2 computePolarChange(in vec2 dPosition, in float cameraRadialDistance) { float dAngle = atan(dPosition.y, cameraRadialDistance + dPosition.x); // Find the direction of the radial axis at the output angle, in Cartesian coordinates vec2 outputRadialAxis = vec2(cos(dAngle), sin(dAngle)); float sinHalfAngle = sin(dAngle / 2.0); float versine = 2.0 * sinHalfAngle * sinHalfAngle; float dRadial = dot(dPosition, outputRadialAxis) - cameraRadialDistance * versine; return vec2(dRadial, dAngle); } vec3 convertEcToDeltaShape(in vec3 positionEC) { // 1. Rotate to radial, tangent, and up coordinates vec3 rtu = u_cylinderEcToRadialTangentUp * positionEC; // 2. Compute change in angular and radial coordinates. vec2 dPolar = computePolarChange(rtu.xy, u_cameraShapePosition.x); return vec3(dPolar.xy, rtu.z); } vec3 convertEcToDeltaTile(in vec3 positionEC) { vec3 deltaShape = convertEcToDeltaShape(positionEC); // Convert to tileset coordinates in [0, 1] float dx = u_cylinderLocalToShapeUvScale.x * deltaShape.x; float dy = deltaShape.y / czm_twoPi; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE) // Wrap to ensure dy is not crossing through the unoccupied angle range, where // angle to tile coordinate conversions would be more complicated float cameraUvAngle = (u_cameraShapePosition.y + czm_pi) / czm_twoPi; float cameraUvAngleShift = fract(cameraUvAngle - u_cylinderShapeUvAngleRangeOrigin); float rawOutputUvAngle = cameraUvAngleShift + dy; float rotation = floor(rawOutputUvAngle); dy -= rotation; #endif dy *= u_cylinderLocalToShapeUvScale.y; float dz = u_cylinderLocalToShapeUvScale.z * deltaShape.z; // Convert to tile coordinate changes return vec3(dx, dy, dz) * float(1 << u_cameraTileCoordinates.w); } TileAndUvCoordinate getTileAndUvCoordinate(in vec3 positionEC) { vec3 deltaTileCoordinate = convertEcToDeltaTile(positionEC); vec3 tileUvSum = u_cameraTileUv + deltaTileCoordinate; ivec3 tileCoordinate = u_cameraTileCoordinates.xyz + ivec3(floor(tileUvSum)); int maxTileCoordinate = (1 << u_cameraTileCoordinates.w) - 1; tileCoordinate.x = min(max(0, tileCoordinate.x), maxTileCoordinate); tileCoordinate.z = min(max(0, tileCoordinate.z), maxTileCoordinate); #if (!defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)) ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz; if (tileCoordinate.y < 0) { tileCoordinate.y += (maxTileCoordinate + 1); } else if (tileCoordinate.y > maxTileCoordinate) { tileCoordinate.y -= (maxTileCoordinate + 1); } #else tileCoordinate.y = min(max(0, tileCoordinate.y), maxTileCoordinate); ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz; #endif vec3 tileUv = tileUvSum - vec3(tileCoordinateChange); tileUv.x = clamp(tileUv.x, 0.0, 1.0); #if (!defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)) // If there is only one tile spanning 2*PI angle, the coordinate wraps around tileUv.y = (u_cameraTileCoordinates.w == 0) ? fract(tileUv.y) : clamp(tileUv.y, 0.0, 1.0); #else tileUv.y = clamp(tileUv.y, 0.0, 1.0); #endif tileUv.z = clamp(tileUv.z, 0.0, 1.0); return TileAndUvCoordinate(ivec4(tileCoordinate, u_cameraTileCoordinates.w), tileUv); } `;var hco=x(T(),1),WM=`/* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js) #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE #define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE */ uniform vec3 u_cameraPositionCartographic; // (longitude, latitude, height) in radians and meters uniform vec2 u_ellipsoidCurvatureAtLatitude; uniform mat3 u_ellipsoidEcToEastNorthUp; uniform vec3 u_ellipsoidRadii; uniform vec2 u_evoluteScale; // (radii.x ^ 2 - radii.z ^ 2) * vec2(1.0, -1.0) / radii; uniform vec3 u_ellipsoidInverseRadiiSquared; #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE) uniform float u_ellipsoidShapeUvLongitudeRangeOrigin; #endif uniform vec3 u_ellipsoidLocalToShapeUvScale; // x = longitude scale, y = latitude scale, z = height scale uniform ivec4 u_cameraTileCoordinates; uniform vec3 u_cameraTileUv; // robust iterative solution without trig functions // https://github.com/0xfaded/ellipse_demo/issues/1 // https://stackoverflow.com/questions/22959698/distance-from-given-point-to-given-ellipse // Extended to return radius of curvature along with the point vec3 nearestPointAndRadiusOnEllipse(vec2 pos, vec2 radii) { vec2 p = abs(pos); vec2 inverseRadii = 1.0 / radii; // We describe the ellipse parametrically: v = radii * vec2(cos(t), sin(t)) // but store the cos and sin of t in a vec2 for efficiency. // Initial guess: t = pi/4 vec2 tTrigs = vec2(0.7071067811865476); // Initial guess of point on ellipsoid vec2 v = radii * tTrigs; // Center of curvature of the ellipse at v vec2 evolute = u_evoluteScale * tTrigs * tTrigs * tTrigs; const int iterations = 3; for (int i = 0; i < iterations; ++i) { // Find the (approximate) intersection of p - evolute with the ellipsoid. vec2 q = normalize(p - evolute) * length(v - evolute); // Update the estimate of t. tTrigs = (q + evolute) * inverseRadii; tTrigs = normalize(clamp(tTrigs, 0.0, 1.0)); v = radii * tTrigs; evolute = u_evoluteScale * tTrigs * tTrigs * tTrigs; } return vec3(v * sign(pos), length(v - evolute)); } mat3 convertLocalToShapeSpaceDerivative(in vec3 position) { vec3 east = normalize(vec3(-position.y, position.x, 0.0)); // Convert the 3D position to a 2D position relative to the ellipse (radii.x, radii.z) // (assume radii.y == radii.x) and find the nearest point on the ellipse and its normal float distanceFromZAxis = length(position.xy); vec2 posEllipse = vec2(distanceFromZAxis, position.z); vec3 surfacePointAndRadius = nearestPointAndRadiusOnEllipse(posEllipse, u_ellipsoidRadii.xz); vec2 surfacePoint = surfacePointAndRadius.xy; vec2 normal2d = normalize(surfacePoint * u_ellipsoidInverseRadiiSquared.xz); vec3 north = vec3(-normal2d.y * normalize(position.xy), abs(normal2d.x)); float heightSign = length(posEllipse) < length(surfacePoint) ? -1.0 : 1.0; float height = heightSign * length(posEllipse - surfacePoint); vec3 up = normalize(cross(east, north)); return mat3(east / distanceFromZAxis, north / (surfacePointAndRadius.z + height), up); } vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) { // Convert from [0, 1] to radians [-pi, pi] float longitude = shapeUv.x * czm_twoPi; #if defined (ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE) longitude /= u_ellipsoidLocalToShapeUvScale.x; #endif // Convert from [0, 1] to radians [-pi/2, pi/2] float latitude = shapeUv.y * czm_pi; #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE) latitude /= u_ellipsoidLocalToShapeUvScale.y; #endif float height = shapeUv.z / u_ellipsoidLocalToShapeUvScale.z; return vec3(longitude, latitude, height); } vec3 convertEcToDeltaShape(in vec3 positionEC) { vec3 enu = u_ellipsoidEcToEastNorthUp * positionEC; // 1. Compute the change in longitude from the camera to the ENU point // First project the camera and ENU positions to the equatorial XY plane, // positioning the camera on the +x axis, so that enu.x projects along the +y axis float cosLatitude = cos(u_cameraPositionCartographic.y); float sinLatitude = sin(u_cameraPositionCartographic.y); float primeVerticalRadius = 1.0 / u_ellipsoidCurvatureAtLatitude.x; vec2 cameraXY = vec2((primeVerticalRadius + u_cameraPositionCartographic.z) * cosLatitude, 0.0); // Note precision loss in positionXY.x if length(enu) << length(cameraXY) vec2 positionXY = cameraXY + vec2(-enu.y * sinLatitude + enu.z * cosLatitude, enu.x); float dLongitude = atan(positionXY.y, positionXY.x); // 2. Find the longitude component of positionXY, by rotating about Z until the y component is zero. // Use the versine to compute the change in x directly from the change in angle: // versine(angle) = 2 * sin^2(angle/2) float sinHalfLongitude = sin(dLongitude / 2.0); float dx = length(positionXY) * 2.0 * sinHalfLongitude * sinHalfLongitude; // Rotate longitude component back to ENU North and Up, and remove from enu enu += vec3(-enu.x, -dx * sinLatitude, dx * cosLatitude); // 3. Compute the change in latitude from the camera to the ENU point. // First project the camera and ENU positions to the meridional ZX plane, // positioning the camera on the +Z axis, so that enu.y maps to the +X axis. float meridionalRadius = 1.0 / u_ellipsoidCurvatureAtLatitude.y; vec2 cameraZX = vec2(meridionalRadius + u_cameraPositionCartographic.z, 0.0); vec2 positionZX = cameraZX + vec2(enu.z, enu.y); float dLatitude = atan(positionZX.y, positionZX.x); // 4. Compute the change in height above the ellipsoid // Find the change in enu.z associated with rotating the point to the latitude of the camera float sinHalfLatitude = sin(dLatitude / 2.0); float dz = length(positionZX) * 2.0 * sinHalfLatitude * sinHalfLatitude; // The remaining change in enu.z is the change in height above the ellipsoid float dHeight = enu.z + dz; return vec3(dLongitude, dLatitude, dHeight); } vec3 convertEcToDeltaTile(in vec3 positionEC) { vec3 deltaShape = convertEcToDeltaShape(positionEC); // Convert to tileset coordinates in [0, 1] float dx = deltaShape.x / czm_twoPi; #if (defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)) // Wrap to ensure dx is not crossing through the unoccupied angle range, where // angle to tile coordinate conversions would be more complicated float cameraUvLongitude = (u_cameraPositionCartographic.x + czm_pi) / czm_twoPi; float cameraUvLongitudeShift = fract(cameraUvLongitude - u_ellipsoidShapeUvLongitudeRangeOrigin); float rawOutputUvLongitude = cameraUvLongitudeShift + dx; float rotation = floor(rawOutputUvLongitude); dx -= rotation; dx *= u_ellipsoidLocalToShapeUvScale.x; #endif float dy = deltaShape.y / czm_pi; #if (defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)) dy *= u_ellipsoidLocalToShapeUvScale.y; #endif float dz = u_ellipsoidLocalToShapeUvScale.z * deltaShape.z; // Convert to tile coordinate changes return vec3(dx, dy, dz) * float(1 << u_cameraTileCoordinates.w); } TileAndUvCoordinate getTileAndUvCoordinate(in vec3 positionEC) { vec3 deltaTileCoordinate = convertEcToDeltaTile(positionEC); vec3 tileUvSum = u_cameraTileUv + deltaTileCoordinate; ivec3 tileCoordinate = u_cameraTileCoordinates.xyz + ivec3(floor(tileUvSum)); int maxTileCoordinate = (1 << u_cameraTileCoordinates.w) - 1; tileCoordinate.y = min(max(0, tileCoordinate.y), maxTileCoordinate); tileCoordinate.z = min(max(0, tileCoordinate.z), maxTileCoordinate); #if (!defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)) ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz; if (tileCoordinate.x < 0) { tileCoordinate.x += (maxTileCoordinate + 1); } else if (tileCoordinate.x > maxTileCoordinate) { tileCoordinate.x -= (maxTileCoordinate + 1); } #else tileCoordinate.x = min(max(0, tileCoordinate.x), maxTileCoordinate); ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz; #endif vec3 tileUv = tileUvSum - vec3(tileCoordinateChange); #if (!defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)) // If there is only one tile spanning 2*PI angle, the coordinate wraps around tileUv.x = (u_cameraTileCoordinates.w == 0) ? fract(tileUv.x) : clamp(tileUv.x, 0.0, 1.0); #else tileUv.x = clamp(tileUv.x, 0.0, 1.0); #endif tileUv.y = clamp(tileUv.y, 0.0, 1.0); tileUv.z = clamp(tileUv.z, 0.0, 1.0); return TileAndUvCoordinate(ivec4(tileCoordinate, u_cameraTileCoordinates.w), tileUv); } `;var pco=x(T(),1),vM=`// These octree flags must be in sync with GpuOctreeFlag in VoxelTraversal.js #define OCTREE_FLAG_INTERNAL 0 #define OCTREE_FLAG_LEAF 1 #define OCTREE_FLAG_PACKED_LEAF_FROM_PARENT 2 #define OCTREE_MAX_LEVELS 32 // Harcoded value because GLSL doesn't like variable length loops uniform sampler2D u_octreeInternalNodeTexture; uniform vec2 u_octreeInternalNodeTexelSizeUv; uniform int u_octreeInternalNodeTilesPerRow; #if (SAMPLE_COUNT > 1) uniform sampler2D u_octreeLeafNodeTexture; uniform vec2 u_octreeLeafNodeTexelSizeUv; uniform int u_octreeLeafNodeTilesPerRow; #endif uniform ivec3 u_dimensions; // does not include padding, and is in the z-up orientation uniform ivec3 u_inputDimensions; // includes padding, and is in the orientation of the input data #if defined(PADDING) uniform ivec3 u_paddingBefore; #endif struct OctreeNodeData { int data; int flag; }; struct TraversalData { ivec4 octreeCoords; int parentOctreeIndex; }; struct TileAndUvCoordinate { ivec4 tileCoords; vec3 tileUv; }; struct SampleData { int megatextureIndex; ivec4 tileCoords; vec3 tileUv; vec3 inputCoordinate; #if (SAMPLE_COUNT > 1) float weight; #endif }; int normU8_toInt(in float value) { return int(value * 255.0); } int normU8x2_toInt(in vec2 value) { return int(value.x * 255.0) + 256 * int(value.y * 255.0); } float normU8x2_toFloat(in vec2 value) { return float(normU8x2_toInt(value)) / 65535.0; } OctreeNodeData getOctreeNodeData(in vec2 octreeUv) { vec4 texData = texture(u_octreeInternalNodeTexture, octreeUv); OctreeNodeData data; data.data = normU8x2_toInt(texData.xy); data.flag = normU8x2_toInt(texData.zw); return data; } OctreeNodeData getOctreeChildData(in int parentOctreeIndex, in ivec3 childCoord) { int childIndex = childCoord.z * 4 + childCoord.y * 2 + childCoord.x; int octreeCoordX = (parentOctreeIndex % u_octreeInternalNodeTilesPerRow) * 9 + 1 + childIndex; int octreeCoordY = parentOctreeIndex / u_octreeInternalNodeTilesPerRow; vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5); return getOctreeNodeData(octreeUv); } int getOctreeParentIndex(in int octreeIndex) { int octreeCoordX = (octreeIndex % u_octreeInternalNodeTilesPerRow) * 9; int octreeCoordY = octreeIndex / u_octreeInternalNodeTilesPerRow; vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5); vec4 parentData = texture(u_octreeInternalNodeTexture, octreeUv); int parentOctreeIndex = normU8x2_toInt(parentData.xy); return parentOctreeIndex; } vec3 getTileUv(in TileAndUvCoordinate tileAndUv, in ivec4 octreeCoords) { int levelDifference = tileAndUv.tileCoords.w - octreeCoords.w; float scalar = exp2(-1.0 * float(levelDifference)); vec3 originShift = vec3(tileAndUv.tileCoords.xyz - (octreeCoords.xyz << levelDifference)) * scalar; return tileAndUv.tileUv * scalar + originShift; } vec3 getClampedTileUv(in TileAndUvCoordinate tileAndUv, in ivec4 octreeCoords) { vec3 tileUv = getTileUv(tileAndUv, octreeCoords); return clamp(tileUv, vec3(0.0), vec3(1.0)); } void addSampleCoordinates(in TileAndUvCoordinate tileAndUv, inout SampleData sampleData) { vec3 tileUv = getClampedTileUv(tileAndUv, sampleData.tileCoords); vec3 inputCoordinate = tileUv * vec3(u_dimensions); #if defined(PADDING) inputCoordinate += vec3(u_paddingBefore); #endif #if defined(Y_UP_METADATA_ORDER) #if defined(SHAPE_BOX) float inputY = inputCoordinate.y; inputCoordinate.y = inputCoordinate.z; // u_inputDimensions.z is the y-up dimension along the 3D Tiles y-axis. inputCoordinate.z = float(u_inputDimensions.z) - inputY; #elif defined(SHAPE_CYLINDER) float angle = inputCoordinate.y; float height = inputCoordinate.z; #if (!defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)) // Account for the different 0-angle convention in glTF vs 3DTiles if (sampleData.tileCoords.w == 0) { float angleCount = float(u_inputDimensions.z); angle = mod(angle + angleCount / 2.0, angleCount); } #endif inputCoordinate.y = height; inputCoordinate.z = angle; #endif #endif sampleData.tileUv = tileUv; sampleData.inputCoordinate = inputCoordinate; } void getOctreeLeafSampleData(in OctreeNodeData data, in ivec4 octreeCoords, out SampleData sampleData) { sampleData.megatextureIndex = data.data; sampleData.tileCoords = (data.flag == OCTREE_FLAG_PACKED_LEAF_FROM_PARENT) ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1) : octreeCoords; } #if (SAMPLE_COUNT > 1) void getOctreeLeafSampleDatas(in OctreeNodeData data, in ivec4 octreeCoords, out SampleData sampleDatas[SAMPLE_COUNT]) { int leafIndex = data.data; int leafNodeTexelCount = 2; // Adding 0.5 moves to the center of the texel float leafCoordXStart = float((leafIndex % u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5; float leafCoordY = float(leafIndex / u_octreeLeafNodeTilesPerRow) + 0.5; // Get an interpolation weight and a flag to determine whether to read the parent texture vec2 leafUv0 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 0.0, leafCoordY); vec4 leafData0 = texture(u_octreeLeafNodeTexture, leafUv0); float lerp = normU8x2_toFloat(leafData0.xy); sampleDatas[0].weight = 1.0 - lerp; sampleDatas[1].weight = lerp; // TODO: this looks wrong? Should be comparing to OCTREE_FLAG_PACKED_LEAF_FROM_PARENT sampleDatas[0].tileCoords = (normU8_toInt(leafData0.z) == 1) ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1) : octreeCoords; sampleDatas[1].tileCoords = (normU8_toInt(leafData0.w) == 1) ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1) : octreeCoords; // Get megatexture indices for both samples vec2 leafUv1 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 1.0, leafCoordY); vec4 leafData1 = texture(u_octreeLeafNodeTexture, leafUv1); sampleDatas[0].megatextureIndex = normU8x2_toInt(leafData1.xy); sampleDatas[1].megatextureIndex = normU8x2_toInt(leafData1.zw); } #endif OctreeNodeData traverseOctreeDownwards(in ivec4 tileCoordinate, inout TraversalData traversalData) { OctreeNodeData childData; for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) { // tileCoordinate.xyz is defined at the level of detail tileCoordinate.w. // Find the corresponding coordinate at the level traversalData.octreeCoords.w int level = traversalData.octreeCoords.w + 1; int levelDifference = tileCoordinate.w - level; ivec3 coordinateAtLevel = tileCoordinate.xyz >> levelDifference; traversalData.octreeCoords = ivec4(coordinateAtLevel, level); ivec3 childCoordinate = coordinateAtLevel & 1; childData = getOctreeChildData(traversalData.parentOctreeIndex, childCoordinate); if (childData.flag != OCTREE_FLAG_INTERNAL) { // leaf tile - stop traversing break; } traversalData.parentOctreeIndex = childData.data; } return childData; } /** * Transform a given position to an octree tile coordinate and a position within that tile, * and find the corresponding megatexture index and texture coordinates */ void traverseOctreeFromBeginning(in TileAndUvCoordinate tileAndUv, out TraversalData traversalData, out SampleData sampleDatas[SAMPLE_COUNT]) { traversalData.octreeCoords = ivec4(0); traversalData.parentOctreeIndex = 0; OctreeNodeData nodeData = getOctreeNodeData(vec2(0.0)); if (nodeData.flag != OCTREE_FLAG_LEAF) { nodeData = traverseOctreeDownwards(tileAndUv.tileCoords, traversalData); } #if (SAMPLE_COUNT == 1) getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]); addSampleCoordinates(tileAndUv, sampleDatas[0]); #else getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas); addSampleCoordinates(tileAndUv, sampleDatas[0]); addSampleCoordinates(tileAndUv, sampleDatas[1]); #endif } bool insideTile(in ivec4 tileCoordinate, in ivec4 octreeCoords) { int levelDifference = tileCoordinate.w - octreeCoords.w; if (levelDifference < 0) { return false; } ivec3 coordinateAtLevel = tileCoordinate.xyz >> levelDifference; return coordinateAtLevel == octreeCoords.xyz; } void traverseOctreeFromExisting(in TileAndUvCoordinate tileAndUv, inout TraversalData traversalData, inout SampleData sampleDatas[SAMPLE_COUNT]) { ivec4 tileCoords = tileAndUv.tileCoords; if (insideTile(tileCoords, traversalData.octreeCoords)) { for (int i = 0; i < SAMPLE_COUNT; i++) { addSampleCoordinates(tileAndUv, sampleDatas[i]); } return; } // Go up tree until we find a parent tile containing tileCoords. // Assumes all parents are available all they way up to the root. for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) { traversalData.octreeCoords.xyz /= 2; traversalData.octreeCoords.w -= 1; if (insideTile(tileCoords, traversalData.octreeCoords)) { break; } traversalData.parentOctreeIndex = getOctreeParentIndex(traversalData.parentOctreeIndex); } // Go down tree OctreeNodeData nodeData = traverseOctreeDownwards(tileCoords, traversalData); #if (SAMPLE_COUNT == 1) getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]); addSampleCoordinates(tileAndUv, sampleDatas[0]); #else getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas); addSampleCoordinates(tileAndUv, sampleDatas[0]); addSampleCoordinates(tileAndUv, sampleDatas[1]); #endif } `;var gco=x(T(),1),FM=`// See Octree.glsl for the definitions of SampleData /* Megatexture defines (set in Scene/VoxelRenderResources.js) #define SAMPLE_COUNT ### #define PADDING */ uniform ivec3 u_megatextureTileCounts; // number of tiles in the megatexture, along each axis vec3 index1DTo3DTexCoord(int index) { int tilesPerZ = u_megatextureTileCounts.x * u_megatextureTileCounts.y; int iz = index / tilesPerZ; int remainder = index - iz * tilesPerZ; int iy = remainder / u_megatextureTileCounts.x; int ix = remainder - iy * u_megatextureTileCounts.x; return vec3(ix, iy, iz) / vec3(u_megatextureTileCounts); } Properties getPropertiesFromMegatexture(in SampleData sampleData) { int tileIndex = sampleData.megatextureIndex; vec3 voxelCoord = sampleData.inputCoordinate; // UV coordinate of the lower corner of the tile in the megatexture vec3 tileUvOffset = index1DTo3DTexCoord(tileIndex); // Voxel location vec3 tileDimensions = vec3(u_inputDimensions); vec3 clampedVoxelCoord = clamp(voxelCoord, vec3(0.5), tileDimensions - vec3(0.5)); vec3 voxelUv = clampedVoxelCoord / tileDimensions / vec3(u_megatextureTileCounts); return getPropertiesFromMegatextureAtUv(tileUvOffset + voxelUv); } // Convert an array of sample datas to a final weighted properties. Properties accumulatePropertiesFromMegatexture(in SampleData sampleDatas[SAMPLE_COUNT]) { #if (SAMPLE_COUNT == 1) return getPropertiesFromMegatexture(sampleDatas[0]); #else // When more than one sample is taken the accumulator needs to start at 0 Properties properties = clearProperties(); for (int i = 0; i < SAMPLE_COUNT; ++i) { float weight = sampleDatas[i].weight; // Avoid reading the megatexture when the weight is 0 as it can be costly. if (weight > 0.0) { Properties tempProperties = getPropertiesFromMegatexture(sampleDatas[i]); tempProperties = scaleProperties(tempProperties, weight); properties = sumProperties(properties, tempProperties); } } return properties; #endif } `;var xco=x(T(),1),XGe={Z_UP:0,Y_UP:1};Object.freeze(XGe);var l0=XGe;function UGt(e){let t=new xb;this.shaderBuilder=t;let n=e._customShader,i=It(e._uniformMap,n.uniformMap);e._uniformMap=i;let o=n.uniforms;for(let f in o)if(o.hasOwnProperty(f)){let y=o[f];t.addUniform(y.type,f,pe.FRAGMENT)}t.addUniform("sampler3D","u_megatextureTextures[METADATA_COUNT]",pe.FRAGMENT),this.uniformMap=i;let r=e._clippingPlanes,s=l(r)&&r.enabled?r.length:0;this.clippingPlanes=r,this.clippingPlanesLength=s;let a=e._shape.renderBoundPlanes,c=a?.length??0;this.renderBoundPlanes=a,this.renderBoundPlanesLength=c,t.addVertexLines([SM]),e.provider.metadataOrder===l0.Y_UP&&t.addDefine("Y_UP_METADATA_ORDER",void 0,pe.FRAGMENT);let d=e._provider.shape;d==="BOX"?t.addDefine("SHAPE_BOX",void 0,pe.FRAGMENT):d==="CYLINDER"?t.addDefine("SHAPE_CYLINDER",void 0,pe.FRAGMENT):d==="ELLIPSOID"&&t.addDefine("SHAPE_ELLIPSOID",void 0,pe.FRAGMENT),t.addFragmentLines([n.fragmentShaderText,"#line 0",vM,TM,FM,ZM,CM,VM]),s>0&&(t.addDefine("CLIPPING_PLANES",void 0,pe.FRAGMENT),t.addDefine("CLIPPING_PLANES_COUNT",s,pe.FRAGMENT),r.unionClippingRegions&&t.addDefine("CLIPPING_PLANES_UNION",void 0,pe.FRAGMENT)),e._depthTest&&t.addDefine("DEPTH_TEST",void 0,pe.FRAGMENT),d==="BOX"?t.addFragmentLines([EM,RM,TZ]):d==="CYLINDER"?t.addFragmentLines([LM,IR,GM,TZ]):d==="ELLIPSOID"&&t.addFragmentLines([WM,IR,AM,TZ]),t.addFragmentLines([_M]);let u=e._shape,m=u.shaderDefines;for(let f in m)if(m.hasOwnProperty(f)){let y=m[f];l(y)&&(y=y===!0?void 0:y,t.addDefine(f,y,pe.FRAGMENT))}let p=u.shaderMaximumIntersectionsLength;s>0&&(t.addDefine("CLIPPING_PLANES_INTERSECTION_INDEX",p,pe.FRAGMENT),s===1?p+=1:r.unionClippingRegions?p+=2:p+=1),e._depthTest&&(t.addDefine("DEPTH_INTERSECTION_INDEX",p,pe.FRAGMENT),p+=1),t.addDefine("INTERSECTION_COUNT",p,pe.FRAGMENT),(!h.equals(e.paddingBefore,h.ZERO)||!h.equals(e.paddingAfter,h.ZERO))&&t.addDefine("PADDING",void 0,pe.FRAGMENT),e._useLogDepth&&t.addDefine("LOG_DEPTH_READ_ONLY",void 0,pe.FRAGMENT);let b=e._traversal;t.addDefine("SAMPLE_COUNT",`${b._sampleCount}`,pe.FRAGMENT)}var IM=UGt;var NGe=new M;function DGt(e,t){let n=new IM(e);xM(n,e);let{shaderBuilder:i,clippingPlanes:o,clippingPlanesLength:r,renderBoundPlanes:s,renderBoundPlanesLength:a}=n;if(r>0){let V="getClippingPlane",C=`vec4 ${V}(highp sampler2D packedPlanes, int planeNumber)`,G=gs.getTextureResolution(o,t,NGe),E=YGe(G);i.addFunction(V,C,pe.FRAGMENT),i.addFunctionLines(V,[E])}if(a>0){let V="getBoundPlane",C=`vec4 ${V}(highp sampler2D packedPlanes, int planeNumber)`,G=Rg.getTextureResolution(s,t,NGe),E=YGe(G);i.addFunction(V,C,pe.FRAGMENT),i.addFunctionLines(V,[E])}let c=i.clone();c.addDefine("PICKING",void 0,pe.FRAGMENT);let d=i.clone();d.addDefine("PICKING_VOXEL",void 0,pe.FRAGMENT);let u=i.buildShaderProgram(t),m=c.buildShaderProgram(t),p=d.buildShaderProgram(t),b=Oe.fromCache({cull:{enabled:!0,face:ki.BACK},depthTest:{enabled:!1},depthMask:!1,blending:tn.PRE_MULTIPLIED_ALPHA_BLEND}),f=t.getViewportQuadVertexArray(),y=e._depthTest,_=new ot({vertexArray:f,primitiveType:Fe.TRIANGLES,renderState:b,shaderProgram:u,uniformMap:n.uniformMap,modelMatrix:e._compoundModelMatrix,pass:We.VOXELS,executeInClosestFrustum:!0,owner:this,cull:y,occlude:y}),S=ot.shallowClone(_,new ot);S.shaderProgram=m,S.pickOnly=!0;let Z=ot.shallowClone(_,new ot);if(Z.shaderProgram=p,Z.pickOnly=!0,l(e._drawCommand)){let V=e._drawCommand;V.shaderProgram=V.shaderProgram&&V.shaderProgram.destroy()}if(l(e._drawCommandPick)){let V=e._drawCommandPick;V.shaderProgram=V.shaderProgram&&V.shaderProgram.destroy()}if(l(e._drawCommandPickVoxel)){let V=e._drawCommandPickVoxel;V.shaderProgram=V.shaderProgram&&V.shaderProgram.destroy()}e._drawCommand=_,e._drawCommandPick=S,e._drawCommandPickVoxel=Z}function YGe(e){let t=e.x,n=e.y,i=1/t,o=1/n,r=`${i}`;r.indexOf(".")===-1&&(r+=".0");let s=`${o}`;return s.indexOf(".")===-1&&(s+=".0"),`int pixY = planeNumber / ${t}; int pixX = planeNumber - (pixY * ${t}); // Sample from center of pixel float u = (float(pixX) + 0.5) * ${r}; float v = (float(pixY) + 0.5) * ${s}; return texture(packedPlanes, vec2(u, v));`}var PM=DGt;var mlo=x(T(),1);function Gg(e){let{loader:t,metadata:n}=e;this._loader=t,this._metadata=n,this._resourcesLoaded=!1,this._ready=!1}Object.defineProperties(Gg.prototype,{ready:{get:function(){return this._ready}},metadata:{get:function(){return this._metadata}}});Gg.fromMetadataArray=function(e){return new Gg({metadata:e})};Gg.fromGltf=async function(e){let t=new Ru({gltfResource:e,releaseGltfJson:!1,loadAttributesAsTypedArray:!0});try{await t.load()}catch(n){throw t.destroy(),n}return new Gg({loader:t})};Gg.prototype.update=function(e,t){let n=this._loader;if(!this._ready){if(t.afterRender.push(()=>!0),!l(n)){this._ready=!0;return}if(this._resourcesLoaded){let{structuralMetadata:i,scene:o}=n.components,{attributes:r}=o.nodes[0].primitives[0];this._metadata=OGt(r,i,e),this._ready=!0;return}this._resourcesLoaded=n.process(t)}};function OGt(e,t,n){let{className:i,names:o,types:r,componentTypes:s}=n.provider,a=t.propertyAttributes.find(u=>u.class.id===i),{properties:c}=a,d=new Array(o.length);for(let u=0;u<e.length;u++){let m=c[o[u]].attribute,p=e.find(_=>_.name===m);if(!l(p))continue;let b=Pt.toComponentDatatype(s[u]),f=yt.getComponentCount(r[u]),y=p.count*f;d[u]=J.createArrayBufferView(b,p.typedArray.buffer,p.typedArray.byteOffset+p.byteOffset,y)}return d}Gg.prototype.isDestroyed=function(){return!1};Gg.prototype.destroy=function(){return this._loader=this._loader&&this._loader.destroy(),me(this)};var _Z=Gg;var $lo=x(T(),1);var Slo=x(T(),1);function gl(){this._orientedBoundingBox=new $t,this._boundingSphere=new le,this._boundTransform=new I,this._shapeTransform=new I,this._minBounds=gl.DefaultMinBounds.clone(),this._maxBounds=gl.DefaultMaxBounds.clone(),this._renderMinBounds=gl.DefaultMinBounds.clone(),this._renderMaxBounds=gl.DefaultMaxBounds.clone();let{DefaultMinBounds:e,DefaultMaxBounds:t}=gl,n=[new js(h.negate(h.UNIT_X,new h),e.x),new js(h.negate(h.UNIT_Y,new h),e.y),new js(h.negate(h.UNIT_Z,new h),e.z),new js(h.UNIT_X,-t.x),new js(h.UNIT_Y,-t.y),new js(h.UNIT_Z,-t.z)];this._renderBoundPlanes=new Rg({planes:n}),this._localToShapeUvTranslate=new h,this._shaderUniforms={boxEcToXyz:new q,boxLocalToShapeUvScale:new h},this._shaderDefines={BOX_INTERSECTION_INDEX:void 0},this._shaderMaximumIntersectionsLength=0}Object.defineProperties(gl.prototype,{orientedBoundingBox:{get:function(){return this._orientedBoundingBox}},renderBoundPlanes:{get:function(){return this._renderBoundPlanes}},boundingSphere:{get:function(){return this._boundingSphere}},boundTransform:{get:function(){return this._boundTransform}},shapeTransform:{get:function(){return this._shapeTransform}},shaderUniforms:{get:function(){return this._shaderUniforms}},shaderDefines:{get:function(){return this._shaderDefines}},shaderMaximumIntersectionsLength:{get:function(){return this._shaderMaximumIntersectionsLength}}});var BGt=new h,zGt=new h,HGt=new q,KGt=new h,JGt=new h;gl.prototype.update=function(e,t,n,i,o){i=i??t.clone(KGt),o=o??n.clone(JGt),t=h.clone(t,this._minBounds),n=h.clone(n,this._maxBounds);let r=h.clamp(t,i,o,this._renderMinBounds),s=h.clamp(n,i,o,this._renderMaxBounds),a=I.getScale(e,zGt);if(r.x>s.x||r.y>s.y||r.z>s.z||(r.x===s.x)+(r.y===s.y)+(r.z===s.z)>=2||a.x===0||a.y===0||a.z===0)return!1;let c=this._renderBoundPlanes;c.get(0).distance=r.x,c.get(1).distance=r.y,c.get(2).distance=r.z,c.get(3).distance=-s.x,c.get(4).distance=-s.y,c.get(5).distance=-s.z,this._shapeTransform=I.clone(e,this._shapeTransform),this._orientedBoundingBox=Mte(r,s,this._shapeTransform,this._orientedBoundingBox),this._boundTransform=I.fromRotationTranslation(this._orientedBoundingBox.halfAxes,this._orientedBoundingBox.center,this._boundTransform),this._boundingSphere=le.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere);let d=this._shaderUniforms,u=this._shaderDefines;for(let y in u)u.hasOwnProperty(y)&&(u[y]=void 0);let m=0;u.BOX_INTERSECTION_INDEX=m,m+=1;let p=t,b=n,f=h.fromElements(Yte(p.x,b.x),Yte(p.y,b.y),Yte(p.z,b.z),d.boxLocalToShapeUvScale);return this._localToShapeUvTranslate=h.negate(h.multiplyComponents(f,p,this._localToShapeUvTranslate),this._localToShapeUvTranslate),this._shaderMaximumIntersectionsLength=m,!0};function Yte(e,t){return L.equalsEpsilon(e,t,L.EPSILON7)?1:1/(t-e)}var jGt=new I;gl.prototype.updateViewTransforms=function(e){let t=this._shaderUniforms,n=I.inverse(this._shapeTransform,jGt),i=I.getMatrix3(n,t.boxEcToXyz),o=e.context.uniformState.inverseViewRotation;q.multiply(i,o,t.boxEcToXyz)};gl.prototype.convertLocalToShapeUvSpace=function(e,t){let{boxLocalToShapeUvScale:n}=this._shaderUniforms,i=this._localToShapeUvTranslate;return h.add(h.multiplyComponents(e,n,t),i,t)};var H3=new h,wte=new h;gl.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=this._minBounds,s=this._maxBounds,a=1/Math.pow(2,e),c=h.fromElements(L.lerp(r.x,s.x,a*t),L.lerp(r.y,s.y,a*n),L.lerp(r.z,s.z,a*i),H3),d=h.fromElements(L.lerp(r.x,s.x,a*(t+1)),L.lerp(r.y,s.y,a*(n+1)),L.lerp(r.z,s.z,a*(i+1)),wte);return Mte(c,d,this._shapeTransform,o)};var wGe=new h;gl.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=h.divideComponents(h.ONE,t,wGe),s=h.multiplyByScalar(r,o,wGe),a=h.multiplyByScalar(h.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,H3),o,H3),c=h.add(a,s,wte),d=this._minBounds,u=this._maxBounds,m=h.fromElements(L.lerp(d.x,u.x,a.x),L.lerp(d.y,u.y,a.y),L.lerp(d.z,u.z,a.z),H3),p=h.fromElements(L.lerp(d.x,u.x,c.x),L.lerp(d.y,u.y,c.y),L.lerp(d.z,u.z,c.z),wte);return Mte(m,p,this._shapeTransform,i)};gl.DefaultMinBounds=Object.freeze(new h(-1,-1,-1));gl.DefaultMaxBounds=Object.freeze(new h(1,1,1));var MGe=new h;function Mte(e,t,n,i){let o=gl.DefaultMinBounds,r=gl.DefaultMaxBounds;if(h.equals(e,o)&&h.equals(t,r))i.center=I.getTranslation(n,i.center),i.halfAxes=I.getMatrix3(n,i.halfAxes);else{let a=I.getScale(n,MGe),c=h.midpoint(e,t,BGt);i.center=I.multiplyByPoint(n,c,i.center),a=h.fromElements(a.x*.5*(t.x-e.x),a.y*.5*(t.y-e.y),a.z*.5*(t.z-e.z),MGe);let d=I.getRotation(n,HGt);i.halfAxes=q.setScale(d,a,i.halfAxes)}return i}var SZ=gl;var Ilo=x(T(),1);function Ou(){this._orientedBoundingBox=new $t,this._boundingSphere=new le,this._boundTransform=new I,this._shapeTransform=new I,this._minBounds=Ou.DefaultMinBounds.clone(),this._maxBounds=Ou.DefaultMaxBounds.clone();let{DefaultMinBounds:e,DefaultMaxBounds:t}=Ou,n=[new js(h.negate(h.UNIT_Z,new h),e.z),new js(h.UNIT_Z,-t.z)];this._renderBoundPlanes=new Rg({planes:n}),this._localToShapeUvTranslate=new h,this._shaderUniforms={cameraShapePosition:new h,cylinderEcToRadialTangentUp:new q,cylinderRenderRadiusMinMax:new M,cylinderRenderAngleMinMax:new M,cylinderLocalToShapeUvScale:new h,cylinderShapeUvAngleRangeOrigin:0},this._shaderDefines={CYLINDER_HAS_SHAPE_BOUNDS_ANGLE:void 0,CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN:void 0,CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF:void 0,CYLINDER_INTERSECTION_INDEX_RADIUS_MAX:void 0,CYLINDER_INTERSECTION_INDEX_RADIUS_MIN:void 0,CYLINDER_INTERSECTION_INDEX_ANGLE:void 0},this._shaderMaximumIntersectionsLength=0}Object.defineProperties(Ou.prototype,{orientedBoundingBox:{get:function(){return this._orientedBoundingBox}},renderBoundPlanes:{get:function(){return this._renderBoundPlanes}},boundingSphere:{get:function(){return this._boundingSphere}},boundTransform:{get:function(){return this._boundTransform}},shapeTransform:{get:function(){return this._shapeTransform}},shaderUniforms:{get:function(){return this._shaderUniforms}},shaderDefines:{get:function(){return this._shaderDefines}},shaderMaximumIntersectionsLength:{get:function(){return this._shaderMaximumIntersectionsLength}}});var QGt=new h,qGt=new h,$Gt=new h,eAt=new h,tAt=new h,nAt=new I,iAt=new h,kGe=new M;Ou.prototype.update=function(e,t,n,i,o){i=i??t.clone(qGt),o=o??n.clone($Gt),t=h.clone(t,this._minBounds),n=h.clone(n,this._maxBounds);let{DefaultMinBounds:r,DefaultMaxBounds:s}=Ou,a=s.y-r.y,c=.5*a,d=L.EPSILON10,u=L.EPSILON10;t.x=Math.max(0,t.x),n.x=Math.max(0,n.x),t.y=L.negativePiToPi(t.y),n.y=L.negativePiToPi(n.y),i.y=L.negativePiToPi(i.y),o.y=L.negativePiToPi(o.y);let m=h.maximumByComponent(t,i,eAt),p=h.minimumByComponent(n,o,tAt),b=I.getScale(e,QGt);if(p.x===0||m.x>p.x||m.z>p.z||L.equalsEpsilon(b.x,0,void 0,d)||L.equalsEpsilon(b.y,0,void 0,d)||L.equalsEpsilon(b.z,0,void 0,d))return!1;let f=this._renderBoundPlanes;f.get(0).distance=m.z,f.get(1).distance=-p.z,this._shapeTransform=I.clone(e,this._shapeTransform),this._orientedBoundingBox=Dte(m,p,this._shapeTransform,this._orientedBoundingBox),this._boundTransform=I.fromRotationTranslation(this._orientedBoundingBox.halfAxes,this._orientedBoundingBox.center,this._boundTransform),this._boundingSphere=le.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere);let y=n.y<t.y,_=n.y-t.y+y*a,S=p.y<m.y,Z=p.y-m.y+S*a,V=Z>=c-u&&Z<a-u,C=Z>u&&Z<c-u,G=Z<=u,E=V||C||G,v=this._shaderUniforms,F=this._shaderDefines;for(let H in F)F.hasOwnProperty(H)&&(F[H]=void 0);let P=0;F.CYLINDER_INTERSECTION_INDEX_RADIUS_MAX=P,P+=1,_<a-u&&(F.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE=!0),m.x!==r.x&&(F.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN=!0,F.CYLINDER_INTERSECTION_INDEX_RADIUS_MIN=P,P+=1),v.cylinderRenderRadiusMinMax=M.fromElements(m.x,p.x,v.cylinderRenderRadiusMinMax),m.x===p.x&&(F.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT=!0);let N=n.x-t.x,g=0,R=1;N!==0&&(g=1/N,R=-t.x*g);let A=n.z-t.z,W=0,X=1;A!==0&&(W=1/A,X=-t.z*W),E&&(F.CYLINDER_HAS_RENDER_BOUNDS_ANGLE=!0,F.CYLINDER_INTERSECTION_INDEX_ANGLE=P,V?(F.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF=!0,P+=1):C?(F.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF=!0,P+=2):G&&(F.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO=!0,P+=2),v.cylinderRenderAngleMinMax=M.fromElements(m.y,p.y,v.cylinderRenderAngleMinMax));let Y=(t.y-r.y)/a,D=(n.y-r.y)/a,k=1-_/a,O=(D+.5*k)%1;v.cylinderShapeUvAngleRangeOrigin=O;let w=0,z=1;if(_>u){w=a/_;let H=Y-O;z=-w*(H-Math.floor(H))}return v.cylinderLocalToShapeUvScale=h.fromElements(g,w,W,v.cylinderLocalToShapeUvScale),this._localToShapeUvTranslate=h.fromElements(R,z,X,this._localToShapeUvTranslate),this._shaderMaximumIntersectionsLength=P,!0};var oAt=new q,rAt=new q,sAt=new I;Ou.prototype.updateViewTransforms=function(e){let t=this._shaderUniforms,n=I.inverse(this._shapeTransform,nAt),i=I.multiplyByPoint(n,e.camera.positionWC,iAt);t.cameraShapePosition=h.fromElements(M.magnitude(i),Math.atan2(i.y,i.x),i.z,t.cameraShapePosition);let o=M.normalize(M.fromCartesian3(i,kGe),kGe),r=q.fromRowMajorArray([o.x,o.y,0,-o.y,o.x,0,0,0,1],oAt),s=e.context.uniformState.inverseView,a=I.multiplyTransformation(n,s,sAt),c=I.getMatrix3(a,rAt);t.cylinderEcToRadialTangentUp=q.multiply(r,c,t.cylinderEcToRadialTangentUp)};Ou.prototype.convertLocalToShapeUvSpace=function(e,t){let n=Math.hypot(e.x,e.y),i=Math.atan2(e.y,e.x),o=e.z,{cylinderLocalToShapeUvScale:r,cylinderShapeUvAngleRangeOrigin:s}=this._shaderUniforms,a=this._localToShapeUvTranslate;return n=n*r.x+a.x,i=(i+Math.PI)/(2*Math.PI),i-=s,i=i-Math.floor(i),i=i*r.y+a.y,o=o*r.z+a.z,h.fromElements(n,i,o,t)};var K3=new h,Ute=new h;Ou.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=this._minBounds,s=this._maxBounds,a=1/Math.pow(2,e),c=h.fromElements(L.lerp(r.x,s.x,t*a),L.lerp(r.y,s.y,n*a),L.lerp(r.z,s.z,i*a),K3),d=h.fromElements(L.lerp(r.x,s.x,(t+1)*a),L.lerp(r.y,s.y,(n+1)*a),L.lerp(r.z,s.z,(i+1)*a),Ute);return Dte(c,d,this._shapeTransform,o)};var UGe=new h;Ou.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=h.divideComponents(h.ONE,t,UGe),s=h.multiplyByScalar(r,o,UGe),a=h.multiplyByScalar(h.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,K3),o,K3),c=h.add(a,s,Ute),d=this._minBounds,u=this._maxBounds,m=h.fromElements(L.lerp(d.x,u.x,a.x),L.lerp(d.y,u.y,a.y),L.lerp(d.z,u.z,a.z),K3),p=h.fromElements(L.lerp(d.x,u.x,c.x),L.lerp(d.y,u.y,c.y),L.lerp(d.z,u.z,c.z),Ute);return Dte(m,p,this._shapeTransform,i)};Ou.DefaultMinBounds=Object.freeze(new h(0,-L.PI,-1));Ou.DefaultMaxBounds=Object.freeze(new h(1,+L.PI,1));var aAt=5,cAt=new Array(aAt),lAt=new h,dAt=new q,uAt=new I,mAt=new I,hAt=new I,kte=new I,fAt=new h,pAt=new h,bAt=new h,OGe=new Array(8);for(let e=0;e<8;e++)OGe[e]=new h;function DGe(e,t,n){return Math.abs(ce.dot(e,t))<n}function gAt(e){let t=I.getColumn(e,0,fAt),n=I.getColumn(e,1,pAt),i=I.getColumn(e,2,bAt),o=L.EPSILON4;return DGe(t,n,o)&&DGe(n,i,o)}function yAt(e,t){let n=OGe;h.fromElements(-.5,-.5,-.5,n[0]),h.fromElements(-.5,-.5,.5,n[1]),h.fromElements(-.5,.5,-.5,n[2]),h.fromElements(-.5,.5,.5,n[3]),h.fromElements(.5,-.5,-.5,n[4]),h.fromElements(.5,-.5,.5,n[5]),h.fromElements(.5,.5,-.5,n[6]),h.fromElements(.5,.5,.5,n[7]);for(let i=0;i<8;++i)I.multiplyByPoint(e,n[i],n[i]);return $t.fromPoints(n,t)}var xAt=new h;function Dte(e,t,n,i){let o=e.x,r=t.x,s=e.y,a=t.y<s?t.y+L.TWO_PI:t.y,c=e.z,d=t.z,u=a-s,m=s+u*.5,p=cAt,b=0;p[b++]=s,p[b++]=a,p[b++]=m,u>L.PI&&(p[b++]=m-L.PI_OVER_TWO,p[b++]=m+L.PI_OVER_TWO);let f=Number.POSITIVE_INFINITY,y=Number.POSITIVE_INFINITY,_=Number.NEGATIVE_INFINITY,S=Number.NEGATIVE_INFINITY;for(let Y=0;Y<b;++Y){let D=p[Y]-m,k=Math.cos(D),O=Math.sin(D),w=k*o,z=O*o,H=k*r,te=O*r;f=Math.min(f,w,H),y=Math.min(y,z,te),_=Math.max(_,w,H),S=Math.max(S,z,te)}let Z=_-f,V=S-y,C=d-c,G=(f+_)*.5,E=(y+S)*.5,v=(c+d)*.5,F=h.fromElements(G,E,v,lAt),P=q.fromRotationZ(m,dAt),N=h.fromElements(Z,V,C,xAt),g=I.fromScale(N,hAt),R=I.fromRotation(P,mAt),A=I.fromTranslation(F,uAt),W=I.multiplyTransformation(R,I.multiplyTransformation(A,g,kte),kte),X=I.multiplyTransformation(n,W,kte);return gAt(X)?$t.fromTransformation(X,i):yAt(X,i)}var ZZ=Ou;var Klo=x(T(),1);function lh(){this._orientedBoundingBox=new $t,this._boundingSphere=new le,this._boundTransform=new I,this._shapeTransform=new I,this._rectangle=new re,this._minimumHeight=lh.DefaultMinBounds.z,this._maximumHeight=lh.DefaultMaxBounds.z,this._ellipsoid=new ie,this._translation=new h,this._rotation=new q,this._localToShapeUvTranslate=new h,this._shaderUniforms={cameraPositionCartographic:new h,ellipsoidEcToEastNorthUp:new q,ellipsoidRadii:new h,eccentricitySquared:0,evoluteScale:new M,ellipsoidCurvatureAtLatitude:new M,ellipsoidInverseRadiiSquared:new h,ellipsoidRenderLongitudeMinMax:new M,ellipsoidShapeUvLongitudeRangeOrigin:0,ellipsoidShapeUvLongitudeMinMaxMid:new h,ellipsoidLocalToShapeUvScale:new h,ellipsoidRenderLatitudeSinMinMax:new M,clipMinMaxHeight:new M},this._shaderDefines={ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE:void 0,ELLIPSOID_INTERSECTION_INDEX_LONGITUDE:void 0,ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX:void 0,ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN:void 0,ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX:void 0,ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN:void 0},this._shaderMaximumIntersectionsLength=0}Object.defineProperties(lh.prototype,{orientedBoundingBox:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}},boundTransform:{get:function(){return this._boundTransform}},shapeTransform:{get:function(){return this._shapeTransform}},shaderUniforms:{get:function(){return this._shaderUniforms}},shaderDefines:{get:function(){return this._shaderDefines}},shaderMaximumIntersectionsLength:{get:function(){return this._shaderMaximumIntersectionsLength}}});var TAt=new h,_At=new h,SAt=new h,ZAt=new h,VAt=new h,CAt=new h,RAt=new h,GAt=new h,BGe=new h,zGe=new h,AAt=new re;lh.prototype.update=function(e,t,n,i,o){let{DefaultMinBounds:r,DefaultMaxBounds:s}=lh;i=i??r,o=o??s;let a=L.EPSILON10,c=L.EPSILON10,d=L.EPSILON10,u=L.EPSILON3,m=I.getScale(e,GAt),p=h.clone(r,TAt);p.z=-h.minimumComponent(m);let b=h.clamp(t,p,s,_At),f=h.clamp(n,p,s,SAt),y=h.clamp(i,p,s,ZAt),_=h.clamp(o,p,s,VAt),S=h.maximumByComponent(b,y,CAt),Z=h.minimumByComponent(f,_,RAt),V=h.add(m,h.fromElements(f.z,f.z,f.z,BGe),BGe),C=h.add(m,h.fromElements(Z.z,Z.z,Z.z,zGe),zGe);if(S.y>Z.y||S.y===s.y||Z.y===r.y||S.z>Z.z||L.equalsEpsilon(C,h.ZERO,void 0,a))return!1;this._rectangle=re.fromRadians(b.x,b.y,f.x,f.y),this._translation=I.getTranslation(e,this._translation),this._rotation=I.getRotation(e,this._rotation),this._ellipsoid=ie.fromCartesian3(m,this._ellipsoid),this._minimumHeight=b.z,this._maximumHeight=f.z;let G=re.fromRadians(S.x,S.y,Z.x,Z.y,AAt);this._orientedBoundingBox=Ote(G,S.z,Z.z,this._ellipsoid,this._translation,this._rotation,this._orientedBoundingBox),this._shapeTransform=I.fromRotationTranslation(this._rotation,this._translation,this._shapeTransform),this._boundTransform=I.fromRotationTranslation(this._orientedBoundingBox.halfAxes,this._orientedBoundingBox.center,this._boundTransform),this._boundingSphere=le.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere);let E=s.x-r.x,v=.5*E,F=Z.x<S.x,P=Z.x-S.x+F*E,N=P<=c,g=P>=v-c&&P<E-c,R=P>c&&P<v-c,A=N||g||R,W=f.x<b.x,X=f.x-b.x+W*E,Y=X>v+c&&X<E-c,D=X>=v-c&&X<=v+c,k=X<v-c,O=Y||D||k,w=Z.y<-u,z=Z.y>=-u&&Z.y<=+u,H=Z.y>+u&&Z.y<s.y-d,te=w||z||H,K=S.y>r.y+d&&S.y<-u,$=S.y>=-u&&S.y<=+u,ee=S.y>+u,de=K||$||ee,_e=te||de,ue=f.y-b.y,Ce=f.y<-u,Te=f.y>=-u&&f.y<=+u,Re=f.y>+u&&f.y<s.y-d,Le=Ce||Te||Re,Xe=b.y>r.y+d&&b.y<-u,qe=b.y>=-u&&b.y<=+u,je=b.y>+u,Qe=Le||(Xe||qe||je),Ee=this._shaderUniforms,He=this._shaderDefines;for(let En in He)He.hasOwnProperty(En)&&(He[En]=void 0);Ee.ellipsoidRadii=h.clone(V,Ee.ellipsoidRadii);let{x:Rt,z:dt}=Ee.ellipsoidRadii,gn=dt/Rt;Ee.eccentricitySquared=1-gn*gn,Ee.evoluteScale=M.fromElements((Rt*Rt-dt*dt)/Rt,(dt*dt-Rt*Rt)/dt,Ee.evoluteScale),Ee.ellipsoidInverseRadiiSquared=h.divideComponents(h.ONE,h.multiplyComponents(Ee.ellipsoidRadii,Ee.ellipsoidRadii,Ee.ellipsoidInverseRadiiSquared),Ee.ellipsoidInverseRadiiSquared);let Bt=0;He.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX=Bt,Bt+=1,He.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN=Bt,Bt+=1,Ee.clipMinMaxHeight=M.fromElements(S.z-f.z,Z.z-f.z,Ee.clipMinMaxHeight);let St=f.z-b.z,vt=St===0?0:1/St;A&&(He.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE=!0,He.ELLIPSOID_INTERSECTION_INDEX_LONGITUDE=Bt,g?(He.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF=!0,Bt+=1):R?(He.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF=!0,Bt+=2):N&&(He.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO=!0,Bt+=2),Ee.ellipsoidRenderLongitudeMinMax=M.fromElements(S.x,Z.x,Ee.ellipsoidRenderLongitudeMinMax));let Wn=0,at=1;if(O){He.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE=!0;let En=(b.x-r.x)/E,Ni=(f.x-r.x)/E,fo=1-X/E,Yi=(Ni+.5*fo)%1;if(Ee.ellipsoidShapeUvLongitudeRangeOrigin=Yi,X>c){Wn=E/X;let Ki=En-Yi;at=-Wn*(Ki-Math.floor(Ki))}}_e&&(de&&(He.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN=!0,He.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN=Bt,K?(He.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF=!0,Bt+=1):$?(He.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF=!0,Bt+=1):ee&&(He.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF=!0,Bt+=2)),te&&(He.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX=!0,He.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX=Bt,w?(He.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF=!0,Bt+=2):z?(He.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF=!0,Bt+=1):H&&(He.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF=!0,Bt+=1)),Ee.ellipsoidRenderLatitudeSinMinMax=M.fromElements(Math.sin(S.y),Math.sin(Z.y),Ee.ellipsoidRenderLatitudeSinMinMax));let ft=0,Ai=1;return Qe&&(He.ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE=!0,ue>d&&(ft=(s.y-r.y)/ue,Ai=(r.y-b.y)/ue)),Ee.ellipsoidLocalToShapeUvScale=h.fromElements(Wn,ft,vt,Ee.ellipsoidLocalToShapeUvScale),this._localToShapeUvTranslate=h.fromElements(at,Ai,0,this._localToShapeUvTranslate),this._shaderMaximumIntersectionsLength=Bt,!0};var EAt=new fe,LAt=new h,WAt=new I,HGe=new q;lh.prototype.updateViewTransforms=function(e){let t=this._shaderUniforms,n=this._ellipsoid,i=e.camera.positionWC,o=n.cartesianToCartographic(i,EAt);h.fromElements(o.longitude,o.latitude,o.height,t.cameraPositionCartographic);let r=h.fromRadians(o.longitude,o.latitude,0,n,LAt);t.ellipsoidCurvatureAtLatitude=n.getLocalCurvature(r,t.ellipsoidCurvatureAtLatitude);let s=bt.eastNorthUpToFixedFrame(r,n,WAt),a=I.getRotation(s,HGe),c=e.context.uniformState.viewRotation,d=q.multiply(c,a,HGe);t.ellipsoidEcToEastNorthUp=q.transpose(d,t.ellipsoidEcToEastNorthUp)};var eAe=new re;lh.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=1/Math.pow(2,e),s=t*r,a=(t+1)*r,c=n*r,d=(n+1)*r,u=i*r,m=(i+1)*r,p=re.subsection(this._rectangle,s,c,a,d,eAe),b=L.lerp(this._minimumHeight,this._maximumHeight,u),f=L.lerp(this._minimumHeight,this._maximumHeight,m);return Ote(p,b,f,this._ellipsoid,this._translation,this._rotation,o)};var vAt=new M,FAt=new M,XM=new M,KGe=new M,JGe=new M,NM=new M;function IAt(e,t,n,i){let o=M.abs(e,vAt),r=M.fromElements(1/t.x,1/t.y,FAt),s=M.fromElements(Math.SQRT1_2,Math.SQRT1_2,XM),a=M.multiplyComponents(t,s,KGe),c=M.fromElements(n.x*s.x*s.x*s.x,n.y*s.y*s.y*s.y,JGe);for(let d=0;d<3;++d){let u=M.magnitude(M.subtract(a,c,NM)),m=M.normalize(M.subtract(o,c,NM),NM),p=M.multiplyByScalar(m,u,NM);s=M.multiplyComponents(M.add(p,c,XM),r,XM),s=M.normalize(M.clamp(s,M.ZERO,M.ONE,XM),XM),a=M.multiplyComponents(t,s,KGe),c=M.fromElements(n.x*s.x*s.x*s.x,n.y*s.y*s.y*s.y,JGe)}return h.fromElements(Math.sign(e.x)*a.x,Math.sign(e.y)*a.y,M.magnitude(M.subtract(a,c,NM)),i)}var PAt=new M,jGe=new M,XAt=new h,QGe=new M;lh.prototype.convertLocalToShapeUvSpace=function(e,t){let n=Math.atan2(e.y,e.x),{ellipsoidRadii:i,evoluteScale:o,ellipsoidInverseRadiiSquared:r,ellipsoidShapeUvLongitudeRangeOrigin:s,ellipsoidLocalToShapeUvScale:a}=this._shaderUniforms,c=this._localToShapeUvTranslate,d=Math.hypot(e.x,e.y),u=M.fromElements(d,e.z,jGe),m=IAt(u,M.fromElements(i.x,i.z,PAt),o,XAt),p=M.normalize(M.fromElements(m.x*r.x,m.y*r.z,QGe),QGe),b=Math.atan2(p.y,p.x),f=M.magnitude(u)<M.magnitude(m)?-1:1,y=M.subtract(u,m,jGe),_=f*M.magnitude(y),{ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE:S,ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE:Z}=this._shaderDefines;return n=(n+Math.PI)/(2*Math.PI),l(S)&&(n-=s,n=n-Math.floor(n),n=n*a.x+c.x),b=(b+Math.PI/2)/Math.PI,l(Z)&&(b=b*a.y+c.y),_=1+_*a.z,h.fromElements(n,b,_,t)};var qGe=new h,$Ge=new h,NAt=new h;lh.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=h.divideComponents(h.ONE,t,qGe),s=h.multiplyByScalar(r,o,qGe),a=h.multiplyByScalar(h.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,$Ge),o,$Ge),c=h.add(a,s,NAt),d=re.subsection(this._rectangle,a.x,a.y,c.x,c.y,eAe),u=L.lerp(this._minimumHeight,this._maximumHeight,a.z),m=L.lerp(this._minimumHeight,this._maximumHeight,c.z);return Ote(d,u,m,this._ellipsoid,this._translation,this._rotation,i)};function Ote(e,t,n,i,o,r,s){return s=$t.fromRectangle(e,t,n,i,s),s.center=h.add(s.center,o,s.center),s.halfAxes=q.multiply(s.halfAxes,r,s.halfAxes),s}lh.DefaultMinBounds=Object.freeze(new h(-L.PI,-L.PI_OVER_TWO,-ie.WGS84.minimumRadius));lh.DefaultMaxBounds=Object.freeze(new h(L.PI,L.PI_OVER_TWO,10*ie.WGS84.maximumRadius));var VZ=lh;var Bd={BOX:"BOX",ELLIPSOID:"ELLIPSOID",CYLINDER:"CYLINDER"};Bd.getMinBounds=function(e){switch(e){case Bd.BOX:return SZ.DefaultMinBounds;case Bd.ELLIPSOID:return VZ.DefaultMinBounds;case Bd.CYLINDER:return ZZ.DefaultMinBounds}};Bd.getMaxBounds=function(e){switch(e){case Bd.BOX:return SZ.DefaultMaxBounds;case Bd.ELLIPSOID:return VZ.DefaultMaxBounds;case Bd.CYLINDER:return ZZ.DefaultMaxBounds}};Bd.getShapeConstructor=function(e){switch(e){case Bd.BOX:return SZ;case Bd.ELLIPSOID:return VZ;case Bd.CYLINDER:return ZZ}};Object.freeze(Bd);var pc=Bd;var zdo=x(T(),1);var tdo=x(T(),1),Bte=Object.freeze({UNLOADED:0,RECEIVING:1,PROCESSING:2,LOADED:3,FAILED:4,UNAVAILABLE:5});function YM(e,t){this.spatialNode=e,this.keyframe=t,this.state=Bte.UNLOADED,this.content=void 0,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1}YM.prototype.unload=function(){this.content=this.content&&this.content.destroy(),this.spatialNode=void 0,this.state=Bte.UNLOADED,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1};YM.priorityComparator=function(e,t){return e.priority-t.priority};YM.searchComparator=function(e,t){return e.keyframe-t.keyframe};YM.LoadState=Bte;var Yo=YM;var gdo=x(T(),1);function d0(e,t,n,i,o=134217728,r){let s=YAt(i),a=wAt(n),c=n*Pt.getSizeInBytes(i),d=d0.get3DTextureDimension(t,c,o,r),u=h.divideComponents(d,t,new h);this.channelCount=n,this.componentType=i,this.textureMemoryByteLength=c*d.x*d.y*d.z,this.tileCounts=h.clone(u,new h),this.voxelCountPerTile=h.clone(t,new h),this.maximumTileCount=u.x*u.y*u.z,this.texture=new U2({context:e,pixelFormat:a,pixelDatatype:s,flipY:!1,width:d.x,height:d.y,depth:d.z,sampler:new kt({wrapR:sn.CLAMP_TO_EDGE,wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR,magnificationFilter:ni.LINEAR})}),this.nodes=new Array(this.maximumTileCount);for(let m=0;m<this.maximumTileCount;m++)this.nodes[m]=new MAt(m);for(let m=0;m<this.maximumTileCount;m++){let p=this.nodes[m];p.previousNode=m>0?this.nodes[m-1]:void 0,p.nextNode=m<this.maximumTileCount-1?this.nodes[m+1]:void 0}this.occupiedList=void 0,this.emptyList=this.nodes[0],this.occupiedCount=0,this._nearestSampling=!1}Object.defineProperties(d0.prototype,{nearestSampling:{get:function(){return this._nearestSampling},set:function(e){this._nearestSampling!==e&&(e?this.texture.sampler=kt.NEAREST:this.texture.sampler=new kt({wrapR:sn.CLAMP_TO_EDGE,wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR,magnificationFilter:ni.LINEAR}),this._nearestSampling=e)}}});function YAt(e){if(e===Pt.FLOAT32||e===Pt.FLOAT64)return Me.FLOAT;if(e===Pt.UINT8)return Me.UNSIGNED_BYTE}function wAt(e){switch(e){case 1:return Be.RED;case 2:return Be.RG;case 3:return Be.RGB;case 4:return Be.RGBA}}function MAt(e){this.index=e,this.nextNode=void 0,this.previousNode=void 0}d0.prototype.add=function(e){if(this.isFull())throw new ge("Trying to add when there are no empty spots");let t=this.emptyList;this.emptyList=this.emptyList.nextNode,l(this.emptyList)&&(this.emptyList.previousNode=void 0),t.nextNode=this.occupiedList,l(t.nextNode)&&(t.nextNode.previousNode=t),this.occupiedList=t;let n=t.index;return this.writeDataToTexture(n,e),this.occupiedCount++,n};d0.prototype.remove=function(e){if(e<0||e>=this.maximumTileCount)throw new ge("Megatexture index out of bounds");let t=this.nodes[e];l(t.previousNode)&&(t.previousNode.nextNode=t.nextNode),l(t.nextNode)&&(t.nextNode.previousNode=t.previousNode),t.nextNode=this.emptyList,l(t.nextNode)&&(t.nextNode.previousNode=t),t.previousNode=void 0,this.emptyList=t,this.occupiedCount--};d0.prototype.isFull=function(){return this.emptyList===void 0};d0.get3DTextureDimension=function(e,t,n,i){let{maximum3DTextureSize:o}=Xt;if(h.maximumComponent(e)>o)throw new ae("The GL context does not support a 3D texture large enough to contain a tile with the given dimensions.");let r=t*e.x*e.y*e.z,s=Math.floor(n/r);if(s<1)throw new ae("Not enough texture memory available to create a megatexture with the given tile dimensions.");l(i)?i=Math.min(i,s):i=s;let a=Object.entries(e).sort((u,m)=>m[1]-u[1]),c=a.map(([u,m])=>Math.floor(o/m));for(let u=0;u<3;u++){let m=tAe(c);if(m<i)break;let p=c.slice();p.splice(u,1);let b=p[0]*p[1],f=m-i,y=Math.floor(f/b);c[u]-=y}tAe(c)>s&&(c[2]=Math.floor(s/(c[0]*c[1])));let d=new h;for(let u=0;u<3;u++){let[m,p]=a[u];d[m]=c[u]*p}return d};function tAe(e){return e.reduce((t,n)=>t*n)}d0.prototype.writeDataToTexture=function(e,t){let{tileCounts:n,voxelCountPerTile:i}=this,o={arrayBufferView:t,width:i.x,height:i.y,depth:i.z},r=n.x*n.y,s=Math.floor(e/r),a=e-s*r,c=Math.floor(a/n.x),d=a-c*n.x,u={source:o,xOffset:d*i.x,yOffset:c*i.y,zOffset:s*i.z};this.texture.copyFrom(u)};d0.prototype.isDestroyed=function(){return!1};d0.prototype.destroy=function(){return this.texture=this.texture&&this.texture.destroy(),me(this)};var wM=d0;var Gdo=x(T(),1);function dh(e,t,n,i,o,r,s){this.children=void 0,this.parent=o,this.level=e,this.x=t,this.y=n,this.z=i,this.dimensions=h.clone(s),this.keyframeNodes=[],this.renderableKeyframeNodes=[],this.renderableKeyframeNodeLerp=0,this.renderableKeyframeNodePrevious=void 0,this.renderableKeyframeNodeNext=void 0,this.orientedBoundingBox=new $t,this.approximateVoxelSize=0,this.screenSpaceError=0,this.visitedFrameNumber=-1,this.computeBoundingVolumes(r)}var kAt=new h;dh.prototype.computeBoundingVolumes=function(e){this.orientedBoundingBox=e.computeOrientedBoundingBoxForTile(this.level,this.x,this.y,this.z,this.orientedBoundingBox);let t=q.getScale(this.orientedBoundingBox.halfAxes,kAt),n=2*h.maximumComponent(t);this.approximateVoxelSize=n/h.minimumComponent(this.dimensions)};dh.prototype.constructChildNodes=function(e){let{level:t,x:n,y:i,z:o}=this,r=n*2,s=i*2,a=o*2,c=s+1,d=r+1,u=a+1,m=t+1,p=[[m,r,s,a],[m,d,s,a],[m,r,c,a],[m,d,c,a],[m,r,s,u],[m,d,s,u],[m,r,c,u],[m,d,c,u]];this.children=p.map(([b,f,y,_])=>new dh(b,f,y,_,this,e,this.dimensions))};dh.prototype.visibility=function(e,t){let n=this.orientedBoundingBox;return e.cullingVolume.computeVisibilityWithPlaneMask(n,t)};dh.prototype.computeScreenSpaceError=function(e,t){let n=this.orientedBoundingBox,i=Math.sqrt(n.distanceSquaredTo(e));i=Math.max(i,L.EPSILON7);let o=this.approximateVoxelSize,r=t*(o/i);this.screenSpaceError=r};var nAe={keyframe:0};function MM(e,t){return nAe.keyframe=e,_o(t,nAe,Yo.searchComparator)}dh.prototype.computeSurroundingRenderableKeyframeNodes=function(e){let t=this,n=t.level,i=Math.floor(e),o=Math.ceil(e),r,s,a=+Number.MAX_VALUE,c=+Number.MAX_VALUE;for(;l(t);){let{renderableKeyframeNodes:m}=t;if(m.length>=1){let p=UAt(i,m),b=m[p],f=o===i||i<b.keyframe?p:Math.min(p+1,m.length-1),y=m[f],_=i-b.keyframe,S=iAe(n-t.level,_);S<a&&(a=S,r=b);let Z=y.keyframe-o,V=iAe(n-t.level,Z);if(V<c&&(c=V,s=y),_===0&&Z===0)break}t=t.parent}if(this.renderableKeyframeNodePrevious=r,this.renderableKeyframeNodeNext=s,!l(r)||!l(s))return;let d=r.keyframe,u=s.keyframe;this.renderableKeyframeNodeLerp=d===u?0:L.clamp((e-d)/(u-d),0,1)};function UAt(e,t){let n=MM(e,t);return n<0?L.clamp(~n-1,0,t.length-1):n}function iAe(e,t){let n=Math.exp(e*4),i=t>=0?1:-200;return e*n+t*i}dh.prototype.isVisited=function(e){return this.visitedFrameNumber===e};dh.prototype.createKeyframeNode=function(e){let t=MM(e,this.keyframeNodes);if(t<0){t=~t;let n=new Yo(this,e);this.keyframeNodes.splice(t,0,n)}};dh.prototype.destroyKeyframeNode=function(e,t){let n=e.keyframe,i=MM(n,this.keyframeNodes);if(i<0)throw new ge("Keyframe node does not exist.");if(this.keyframeNodes.splice(i,1),e.megatextureIndex!==-1){for(let r=0;r<t.length;r++)t[r].remove(e.megatextureIndex);let o=MM(n,this.renderableKeyframeNodes);if(o<0)throw new ge("Renderable keyframe node does not exist.");this.renderableKeyframeNodes.splice(o,1)}e.unload()};dh.prototype.addKeyframeNodeToMegatextures=function(e,t){if(e.megatextureIndex!==-1||e.content.metadata.length!==t.length)throw new ge("Keyframe node cannot be added to megatexture");let{metadata:n}=e.content;for(let r=0;r<t.length;r++){let s=t[r];e.megatextureIndex=s.add(n[r])}let i=this.renderableKeyframeNodes,o=MM(e.keyframe,i);if(o>=0)throw new ge("Keyframe already renderable");o=~o,i.splice(o,0,e)};dh.prototype.isRenderable=function(e){let t=this.renderableKeyframeNodePrevious,n=this.renderableKeyframeNodeNext,i=this.level;return l(t)&&l(n)&&(t.spatialNode.level===i||n.spatialNode.level===i)&&this.visitedFrameNumber===e};var kM=dh;function Ux(e,t,n,i){let{provider:o,dimensions:r,inputDimensions:s}=e,{types:a,componentTypes:c}=o;l(i)?i=Math.min(Math.max(0,i),512*1024*1024):i=128*1024*1024,this._primitive=e,this.textureMemoryByteLength=0,this.megatextures=new Array(a.length);let d=l(o.maximumTileCount)?o.maximumTileCount:l(o.availableLevels)?(8**o.availableLevels-1)/7:void 0;for(let S=0;S<a.length;S++){let Z=a[S],V=yt.getComponentCount(Z),C=c[S];this.megatextures[S]=new wM(t,s,V,C,i,d),this.textureMemoryByteLength+=this.megatextures[S].textureMemoryByteLength}let u=this.megatextures[0].maximumTileCount;this._simultaneousRequestCount=0,this._debugPrint=!1,this._calculateStatistics=this._primitive._calculateStatistics??!1,this._frameNumber=0;let m=e._shape;this.rootNode=new kM(0,0,0,0,void 0,m,r),this._priorityQueue=new N0({maximumLength:u,comparator:Yo.priorityComparator}),this._highPriorityKeyframeNodes=new Array(u),this._highPriorityKeyframeNodeCount=0,this._keyframeNodesInMegatexture=new Array(u),this._keyframeCount=n,this._sampleCount=void 0,this._keyframeLocation=0,this._binaryTreeKeyframeWeighting=new Array(n),this._initialTilesLoaded=!1;let p=this._binaryTreeKeyframeWeighting;p[0]=0,p[n-1]=0,zte(p,1,n-2,0);let b=9,f=2048,y=Math.floor(f/b),_=Math.ceil(u/y);this.internalNodeTexture=new Ct({context:t,pixelFormat:Be.RGBA,pixelDatatype:Me.UNSIGNED_BYTE,flipY:!1,width:f,height:_,sampler:new kt({minificationFilter:zt.NEAREST,magnificationFilter:ni.NEAREST})}),this.internalNodeTilesPerRow=y,this.internalNodeTexelSizeUv=new M(1/f,1/_),this.leafNodeTexture=void 0,this.leafNodeTilesPerRow=void 0,this.leafNodeTexelSizeUv=new M}Ux.prototype.findKeyframeNode=function(e){return this._keyframeNodesInMegatexture.find(function(t){return t.megatextureIndex===e})};function zte(e,t,n,i){if(t>n)return;let o=Math.floor((t+n)/2);e[o]=i,zte(e,t,o-1,i+1),zte(e,o+1,n,i+1)}Ux.simultaneousRequestCountMaximum=50;Ux.prototype.update=function(e,t,n,i){let o=this._primitive,r=e.context,s=this.megatextures[0].maximumTileCount,a=this._keyframeCount,c=o._levelBlendFactor,d=c>0,u=a>1,m=(d?2:1)*(u?2:1);this._sampleCount=m;let p=m>=2;if(p&&!l(this.leafNodeTexture)){let V=Math.floor(512),C=Math.ceil(s/V);this.leafNodeTexture=new Ct({context:r,pixelFormat:Be.RGBA,pixelDatatype:Me.UNSIGNED_BYTE,flipY:!1,width:1024,height:C,sampler:new kt({minificationFilter:zt.NEAREST,magnificationFilter:ni.NEAREST})}),this.leafNodeTexelSizeUv=M.fromElements(1/1024,1/C,this.leafNodeTexelSizeUv),this.leafNodeTilesPerRow=V}else!p&&l(this.leafNodeTexture)&&(this.leafNodeTexture=this.leafNodeTexture.destroy());if(this._keyframeLocation=L.clamp(t,0,a-1),n&&oAe(this,this.rootNode),i)return;this._frameNumber=e.frameNumber;let b=Tn();BAt(this,e),zAt(this,e);let f=Tn();QAt(this,m,c);let y=Tn(),_=o.loadProgress.numberOfListeners>0||o.allTilesLoaded.numberOfListeners>0||o.initialTilesLoaded.numberOfListeners>0;if(this._debugPrint||this._calculateStatistics||_){let S=f-b,Z=y-f,V=y-b;jAt(this,e,S,Z,V)}};Ux.prototype.isRenderable=function(e){return e.isRenderable(this._frameNumber)};Ux.prototype.isDestroyed=function(){return!1};Ux.prototype.destroy=function(){let e=this.megatextures,t=e.length;for(let n=0;n<t;n++)e[n]=e[n]&&e[n].destroy();return this.textureMemoryByteLength=0,this.internalNodeTexture=this.internalNodeTexture&&this.internalNodeTexture.destroy(),this.leafNodeTexture=this.leafNodeTexture&&this.leafNodeTexture.destroy(),me(this)};function oAe(e,t){if(t.computeBoundingVolumes(e._primitive._shape),l(t.children))for(let n=0;n<8;n++){let i=t.children[n];oAe(e,i)}}function DAt(e,t){if(e._simultaneousRequestCount>=Ux.simultaneousRequestCountMaximum)return;let i=e._primitive.provider,{keyframe:o,spatialNode:r}=t;if(l(i.availableLevels)&&r.level>=i.availableLevels)return;function s(u){e._simultaneousRequestCount--,t.content=u,t.state=l(u)?Yo.LoadState.PROCESSING:Yo.LoadState.UNAVAILABLE}function a(u){e._simultaneousRequestCount--,t.state=Yo.LoadState.FAILED,e._primitive.tileFailed.raiseEvent()}let c={tileLevel:r.level,tileX:r.x,tileY:r.y,tileZ:r.z,keyframe:o},d=i.requestData(c);l(d)&&(e._simultaneousRequestCount++,t.state=Yo.LoadState.RECEIVING,d.then(s).catch(a))}function OAt(e){return e/(1+e)}function BAt(e,t){let n=e._frameNumber,i=e._priorityQueue;i.reset(),rAe(e.rootNode,Os.MASK_INDETERMINATE,e,t);let o=e._highPriorityKeyframeNodes,r=0,s;for(;i.length>0;)s=i.removeMaximum(),s.highPriorityFrameNumber=n,o[r]=s,r++;e._highPriorityKeyframeNodeCount=r}function zAt(e,t){let n=e.megatextures[0],i=n.occupiedCount,o=e._keyframeNodesInMegatexture;o.length=i,o.sort(HAt);let r=e._highPriorityKeyframeNodes,s=e._highPriorityKeyframeNodeCount,a=0,c=0;for(let d=0;d<s;d++){let u=r[d];if(!(u.state===Yo.LoadState.LOADED||u.spatialNode===void 0)&&(u.state===Yo.LoadState.UNLOADED&&DAt(e,u),u.state===Yo.LoadState.PROCESSING)){let{content:m}=u;if(m.update(e._primitive,t),!m.ready)continue;if(!KAt(m.metadata,e)){u.content=void 0,u.state=Yo.LoadState.FAILED,e._primitive.tileFailed.raiseEvent();continue}let p;if(n.isFull()){p=i-1-a,a++;let b=o[p];e._primitive.tileUnload.raiseEvent(),b.spatialNode.destroyKeyframeNode(b,e.megatextures)}else p=i+c,c++;u.spatialNode.addKeyframeNodeToMegatextures(u,e.megatextures),u.state=Yo.LoadState.LOADED,o[p]=u,e._primitive.tileLoad.raiseEvent()}}}function HAt(e,t){return e.highPriorityFrameNumber===t.highPriorityFrameNumber?t.priority-e.priority:t.highPriorityFrameNumber-e.highPriorityFrameNumber}function KAt(e,t){let n=t._primitive.provider.types.length;if(!Array.isArray(e)||e.length!==n)return!1;let{megatextures:i}=t;for(let o=0;o<n;o++){let{voxelCountPerTile:r,channelCount:s}=i[o],{x:a,y:c,z:d}=r,u=a*c*d,m=e[o],p=u*s;if(m.length!==p)return!1}return!0}function rAe(e,t,n,i){let{camera:o,context:r,pixelRatio:s,frameNumber:a}=i,{positionWC:c,frustum:d}=o,m=r.drawingBufferHeight/s/d.sseDenominator;if(e.computeScreenSpaceError(c,m),t=e.visibility(i,t),t===Os.MASK_OUTSIDE)return;e.visitedFrameNumber=a;let p=n._primitive,b=p._shape,f=p.screenSpaceError,y=n._priorityQueue,_=n._keyframeCount,S=L.clamp(Math.floor(n._keyframeLocation),0,_-2),Z=S+1;if(_===1)e.createKeyframeNode(0);else if(e.keyframeNodes.length!==_)for(let v=0;v<_;v++)e.createKeyframeNode(v);let{screenSpaceError:V,keyframeNodes:C}=e,G=OAt(V),E=!1;for(let v=0;v<C.length;v++){let F=C[v];F.priority=10*G+JAt(S,F.keyframe,Z,n),F.state!==Yo.LoadState.UNAVAILABLE&&F.state!==Yo.LoadState.FAILED&&F.priority!==-Number.MAX_VALUE&&y.insert(F),F.state===Yo.LoadState.LOADED&&(E=!0)}if(V<f||!E){e.children=void 0;return}l(e.children)||e.constructChildNodes(b);for(let v=0;v<8;v++){let F=e.children[v];rAe(F,t,n,i)}}function JAt(e,t,n,i){let o=Math.min(Math.abs(t-e),Math.abs(t-n)),r=Math.max(e,i._keyframeCount-n-1,1),s=Math.pow(1-o/r,4),a=Math.exp(-i._binaryTreeKeyframeWeighting[t]);return L.lerp(a,s,.15+.85*s)}function jAt(e,t,n,i,o){let r=e._keyframeCount,s=e.rootNode,a=Object.keys(Yo.LoadState).length,c=new Array(a),d=new Array(a),u=0;for(let E=0;E<a;E++){let v=new Array(r).fill(0);c[E]=v,d[E]=0}function m(E){let v=E.keyframeNodes;for(let F=0;F<v.length;F++){let P=v[F],N=P.keyframe,g=P.state;c[g][N]+=1,d[g]+=1,u++}if(l(E.children))for(let F=0;F<8;F++){let P=E.children[F];m(P)}}m(s),e._primitive.statistics.numberOfTilesWithContentReady=d[Yo.LoadState.LOADED],e._primitive.statistics.visited=u;let p=d[Yo.LoadState.RECEIVING],b=d[Yo.LoadState.PROCESSING],f=p!==e._primitive.statistics.numberOfPendingRequests||b!==e._primitive.statistics.numberOfTilesProcessing;if(f&&t.afterRender.push(function(){return e._primitive.loadProgress.raiseEvent(p,b),!0}),e._primitive.statistics.numberOfPendingRequests=p,e._primitive.statistics.numberOfTilesProcessing=b,f&&(p===0&&b===0)&&(t.afterRender.push(function(){return e._primitive.allTilesLoaded.raiseEvent(),!0}),e._initialTilesLoaded||(e._initialTilesLoaded=!0,t.afterRender.push(function(){return e._primitive.initialTilesLoaded.raiseEvent(),!0}))),!e._debugPrint)return;let _=`KEYFRAMES: ${c[Yo.LoadState.LOADED]}`,S=`UNLOADED: ${d[Yo.LoadState.UNLOADED]} | RECEIVING: ${d[Yo.LoadState.RECEIVING]} | PROCESSING: ${d[Yo.LoadState.PROCESSING]} | LOADED: ${d[Yo.LoadState.LOADED]} | FAILED: ${d[Yo.LoadState.FAILED]} | UNAVAILABLE: ${d[Yo.LoadState.UNAVAILABLE]} | TOTAL: ${u}`,Z=Math.round(n*100)/100,V=Math.round(i*100)/100,C=Math.round(o*100)/100,G=`LOAD: ${Z} | OCT: ${V} | ALL: ${C}`;console.log(`${_} || ${S} || ${G}`)}var J3={INTERNAL:0,LEAF:1,PACKED_LEAF_FROM_PARENT:2};function QAt(e,t,n){let i=e._primitive._screenSpaceError,o=e._keyframeLocation,r=e._frameNumber,s=t>=2,a=0,c=0,d=[],u=[];function m(b,f,y,_,S){let Z=!1;if(l(b.children))for(let V=0;V<8;V++){let C=b.children[V];C.computeSurroundingRenderableKeyframeNodes(o),C.isRenderable(r)&&(Z=!0)}if(Z){d[S]=J3.INTERNAL<<16|f,d[y]=_,a++,_=f,S=_*9+1;for(let V=0;V<8;V++){let C=b.children[V];f=a,y=f*9+0,m(C,f,y,_,S+V)}}else{if(e._primitive.tileVisible.raiseEvent(),s){let V=c*5,C=b.renderableKeyframeNodePrevious,G=b.level-C.spatialNode.level,E=C.spatialNode.parent,v=l(E)?E.renderableKeyframeNodePrevious:C,F=qAt(b,i,n),P=G,N=1,g=C.megatextureIndex,R=v.megatextureIndex;u[V+0]=F,u[V+1]=P,u[V+2]=N,u[V+3]=g,u[V+4]=R,d[S]=J3.LEAF<<16|c}else{let V=b.renderableKeyframeNodePrevious,G=b.level-V.spatialNode.level===0?J3.LEAF:J3.PACKED_LEAF_FROM_PARENT;d[S]=G<<16|V.megatextureIndex}c++}}let p=e.rootNode;p.computeSurroundingRenderableKeyframeNodes(o),p.isRenderable(r)&&m(p,0,0,0,0),$At(d,9,e.internalNodeTilesPerRow,e.internalNodeTexture),s&&eEt(u,2,e.leafNodeTilesPerRow,e.leafNodeTexture)}function qAt(e,t,n){if(e.parent===void 0)return 0;let i=e.screenSpaceError,o=e.parent.screenSpaceError,s=((t-i)/(o-i)+n-1)/n;return L.clamp(s,0,1)}function $At(e,t,n,i){let o=Be.componentsLength(i.pixelFormat),r=Math.ceil(e.length/t),s=Math.max(1,t*Math.min(r,n)),a=Math.max(1,Math.ceil(r/n)),c=new Uint8Array(s*a*o);for(let m=0;m<e.length;m++){let p=e[m],b=m*o;for(let f=0;f<o;f++)c[b+f]=p>>>f*8&255}let u={source:{arrayBufferView:c,width:s,height:a},xOffset:0,yOffset:0};i.copyFrom(u)}function eEt(e,t,n,i){let o=Be.componentsLength(i.pixelFormat),r=5,s=Math.ceil(e.length/r),a=Math.max(1,t*Math.min(s,n)),c=Math.max(1,Math.ceil(s/n)),d=new Uint8Array(a*c*o);for(let p=0;p<s;p++){let b=e[p*r+0],f=e[p*r+1],y=e[p*r+2],_=e[p*r+3],S=e[p*r+4],Z=L.clamp(Math.floor(65536*b),0,65535);d[p*8+0]=Z>>>0&255,d[p*8+1]=Z>>>8&255,d[p*8+2]=f&255,d[p*8+3]=y&255,d[p*8+4]=_>>>0&255,d[p*8+5]=_>>>8&255,d[p*8+6]=S>>>0&255,d[p*8+7]=S>>>8&255}let m={source:{arrayBufferView:d,width:a,height:c},xOffset:0,yOffset:0};i.copyFrom(m)}var UM=Ux;function u0(e){e=e??B.EMPTY_OBJECT;let{provider:t=u0.DefaultProvider,modelMatrix:n=I.IDENTITY,customShader:i=FR(t),clock:o,calculateStatistics:r=!1}=e;this._ready=!1,this._provider=t,this._traversal=void 0,this._statistics=new Ef,this._calculateStatistics=r;let{shape:s,minBounds:a=pc.getMinBounds(s),maxBounds:c=pc.getMaxBounds(s),dimensions:d,paddingBefore:u=h.ZERO,paddingAfter:m=h.ZERO,metadataOrder:p,availableLevels:b=1}=t;this._dimensions=h.clone(d),this._paddingBefore=h.clone(u),this._paddingAfter=h.clone(m),this._inputDimensions=tEt(d,u,m,p),this._availableLevels=b,this._minBounds=a.clone(),this._minBoundsOld=new h,this._maxBounds=c.clone(),this._maxBoundsOld=new h,this._minClippingBounds=a.clone(),this._minClippingBoundsOld=new h,this._maxClippingBounds=c.clone(),this._maxClippingBoundsOld=new h,this._verticalExaggeration=1,this._verticalExaggerationRelativeHeight=0,this._clippingPlanes=void 0,this._clippingPlanesState=0,this._clippingPlanesEnabled=!1,this._modelMatrix=I.clone(n),this._modelMatrixOld=I.clone(this._modelMatrix),this._customShader=i??u0.DefaultCustomShader,this._customShaderCompilationEvent=new Se,this._shaderDirty=!0,this._drawCommand=void 0,this._drawCommandPick=void 0,this._pickId=void 0,this._clock=o,this._transformPositionLocalToWorld=new I,this._transformPositionWorldToLocal=new I,this._transformPlaneLocalToView=new I,this._transformDirectionWorldToLocal=new q,this._nearestSampling=!1,this._levelBlendFactor=0,this._stepSizeMultiplier=1,this._depthTest=!0,this._useLogDepth=void 0,this._screenSpaceError=4,this._debugPolylines=new Vf,this._debugDraw=!1,this._disableRender=!1,this._disableUpdate=!1;let f=pc.getShapeConstructor(s);this._shape=new f,aAe(this),this._shapeVisible=cAe(this),this._uniforms={octreeInternalNodeTexture:void 0,octreeInternalNodeTilesPerRow:0,octreeInternalNodeTexelSizeUv:new M,octreeLeafNodeTexture:void 0,octreeLeafNodeTilesPerRow:0,octreeLeafNodeTexelSizeUv:new M,megatextureTextures:[],megatextureTileCounts:new h,dimensions:this._dimensions,inputDimensions:this._inputDimensions,paddingBefore:this._paddingBefore,paddingAfter:this._paddingAfter,transformPositionViewToLocal:new I,transformDirectionViewToLocal:new q,cameraPositionLocal:new h,cameraDirectionLocal:new h,cameraTileCoordinates:new ce,cameraTileUv:new h,ndcSpaceAxisAlignedBoundingBox:new ce,clippingPlanesTexture:void 0,clippingPlanesMatrix:new I,renderBoundPlanesTexture:void 0,stepSize:this._stepSizeMultiplier,pickColor:new U},this._shapeDefinesOld={},this._uniformMap={};let y=this._uniforms,_=this._uniformMap;for(let S in y)if(y.hasOwnProperty(S)){let Z=`u_${S}`;_[Z]=function(){return y[S]}}nEt(this,this._shape),this.tileLoad=new Se,this.tileVisible=new Se,this.tileFailed=new Se,this.tileUnload=new Se,this.loadProgress=new Se,this.allTilesLoaded=new Se,this.initialTilesLoaded=new Se}function tEt(e,t,n,i){let o=h.add(e,t,new h);if(h.add(o,n,o),i===l0.Y_UP){let r=o.y;o.y=o.z,o.z=r}return o}function nEt(e,t){let n=e._uniformMap,{shaderUniforms:i,shaderDefines:o}=t;for(let r in i)if(i.hasOwnProperty(r)){let s=`u_${r}`;n[s]=function(){return i[r]}}e._shapeDefinesOld=Je(o,!0)}Object.defineProperties(u0.prototype,{ready:{get:function(){return this._ready}},provider:{get:function(){return this._provider}},boundingSphere:{get:function(){return this._shape.boundingSphere}},orientedBoundingBox:{get:function(){return this._shape.orientedBoundingBox}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=I.clone(e,this._modelMatrix)}},shape:{get:function(){return this._provider.shape}},dimensions:{get:function(){return this._dimensions}},inputDimensions:{get:function(){return this._inputDimensions}},paddingBefore:{get:function(){return this._paddingBefore}},paddingAfter:{get:function(){return this._paddingAfter}},minimumValues:{get:function(){return this._provider.minimumValues}},maximumValues:{get:function(){return this._provider.maximumValues}},show:{get:function(){return!this._disableRender},set:function(e){this._disableRender=!e}},disableUpdate:{get:function(){return this._disableUpdate},set:function(e){this._disableUpdate=e}},debugDraw:{get:function(){return this._debugDraw},set:function(e){this._debugDraw=e}},depthTest:{get:function(){return this._depthTest},set:function(e){this._depthTest!==e&&(this._depthTest=e,this._shaderDirty=!0)}},nearestSampling:{get:function(){return this._nearestSampling},set:function(e){this._nearestSampling=e}},levelBlendFactor:{get:function(){return this._levelBlendFactor},set:function(e){this._levelBlendFactor=L.clamp(e,0,1)}},screenSpaceError:{get:function(){return this._screenSpaceError},set:function(e){this._screenSpaceError=e}},stepSize:{get:function(){return this._stepSizeMultiplier},set:function(e){this._stepSizeMultiplier=e}},minBounds:{get:function(){return this._minBounds},set:function(e){this._minBounds=h.clone(e,this._minBounds)}},maxBounds:{get:function(){return this._maxBounds},set:function(e){this._maxBounds=h.clone(e,this._maxBounds)}},minClippingBounds:{get:function(){return this._minClippingBounds},set:function(e){this._minClippingBounds=h.clone(e,this._minClippingBounds)}},maxClippingBounds:{get:function(){return this._maxClippingBounds},set:function(e){this._maxClippingBounds=h.clone(e,this._maxClippingBounds)}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){gs.setOwner(e,this,"_clippingPlanes")}},customShader:{get:function(){return this._customShader},set:function(e){if(e===this._customShader)return;let t=this._uniformMap,i=this._customShader.uniformMap;for(let o in i)i.hasOwnProperty(o)&&delete t[o];if(l(e))this._customShader=e;else{let o=FR(this._provider);this._customShader=o??u0.DefaultCustomShader}this._shaderDirty=!0}},customShaderCompilationEvent:{get:function(){return this._customShaderCompilationEvent}},statistics:{get:function(){return this._statistics}}});var iEt=new ce,oEt=new ce,rEt=new I,sEt=new I,aEt=new h,cEt=new ce;u0.prototype.update=function(e){let t=this._provider,n=this._uniforms;this._customShader.update(e);let i=e.context;if(!this._ready){pEt(this,t,i),e.afterRender.push(()=>(this._ready=!0,!0));return}let o=aAe(this),r=fEt(this,e);if((o||r)&&(this._shapeVisible=cAe(this),CEt(this)&&(this._shaderDirty=!0)),!this._shapeVisible)return;this._shape.updateViewTransforms(e);let s=REt(t.timeIntervalCollection,this._clock),a=this._traversal,c=a._sampleCount;if(a.update(e,s,o,this._disableUpdate),c!==a._sampleCount&&(this._shaderDirty=!0),!a.isRenderable(a.rootNode)||(this._debugDraw&&IEt(this,e),this._disableRender))return;this._useLogDepth!==e.useLogDepth&&(this._useLogDepth=e.useLogDepth,this._shaderDirty=!0),GEt(this,e)&&(this._shaderDirty=!0);let u=a.leafNodeTexture;l(u)&&(n.octreeLeafNodeTexture=a.leafNodeTexture,n.octreeLeafNodeTexelSizeUv=M.clone(a.leafNodeTexelSizeUv,n.octreeLeafNodeTexelSizeUv),n.octreeLeafNodeTilesPerRow=a.leafNodeTilesPerRow),this._shaderDirty&&(PM(this,i),this._shaderDirty=!1);let m=i.uniformState.viewProjection,{orientedBoundingBox:p}=this._shape,b=LEt(p,m,oEt);if(b.x===1||b.y===1||b.z===-1||b.w===-1)return;n.ndcSpaceAxisAlignedBoundingBox=ce.clone(b,n.ndcSpaceAxisAlignedBoundingBox);let y=i.uniformState.inverseView,_=I.multiplyTransformation(this._transformPositionWorldToLocal,y,n.transformPositionViewToLocal);this._transformPlaneLocalToView=I.transpose(_,this._transformPlaneLocalToView);let S=i.uniformState.inverseViewRotation;n.transformDirectionViewToLocal=q.multiply(this._transformDirectionWorldToLocal,S,n.transformDirectionViewToLocal),n.cameraPositionLocal=I.multiplyByPoint(this._transformPositionWorldToLocal,e.camera.positionWC,n.cameraPositionLocal),n.cameraDirectionLocal=q.multiplyByVector(this._transformDirectionWorldToLocal,e.camera.directionWC,n.cameraDirectionLocal);let Z=uEt(this,n.cameraPositionLocal,cEt);n.cameraTileCoordinates=ce.fromElements(Math.floor(Z.x),Math.floor(Z.y),Math.floor(Z.z),Z.w,n.cameraTileCoordinates),n.cameraTileUv=h.fromElements(Z.x-Math.floor(Z.x),Z.y-Math.floor(Z.y),Z.z-Math.floor(Z.z),n.cameraTileUv),n.stepSize=this._stepSizeMultiplier,lEt(this),dEt(this,e);let V=e.passes.pick?this._drawCommandPick:e.passes.pickVoxel?this._drawCommandPickVoxel:this._drawCommand;V.boundingVolume=this._shape.boundingSphere,e.commandList.push(V)};function lEt(e){let{megatextures:t}=e._traversal;for(let n=0;n<t.length;++n)t[n].nearestSampling=e._nearestSampling}function dEt(e,t){let n=e._uniforms,{renderBoundPlanes:i}=e._shape;l(i)&&(i.update(t,e._transformPlaneLocalToView),n.renderBoundPlanesTexture=i.texture)}function uEt(e,t,n){let i=e._shape.convertLocalToShapeUvSpace(t,aEt),o=e._availableLevels,r=2**(o-1);return ce.fromElements(i.x*r,i.y*r,i.z*r,o-1,n)}var mEt=new h,Hte=new h,hEt=new fe;function fEt(e,t){let{verticalExaggeration:n,verticalExaggerationRelativeHeight:i}=t;return e._verticalExaggeration===n&&e._verticalExaggerationRelativeHeight===i?!1:(e._verticalExaggeration=n,e._verticalExaggerationRelativeHeight=i,!0)}function pEt(e,t,n){let i=e._uniforms;e._pickId=n.createPickId({primitive:e}),i.pickColor=U.clone(e._pickId.color,i.pickColor);let o=t.keyframeCount??1;e._traversal=new UM(e,n,o),e.statistics.texturesByteLength=e._traversal.textureMemoryByteLength,VEt(e._traversal,i)}function aAe(e){return DM(e,"_modelMatrix","_modelMatrixOld")+DM(e,"_minBounds","_minBoundsOld")+DM(e,"_maxBounds","_maxBoundsOld")+DM(e,"_minClippingBounds","_minClippingBoundsOld")+DM(e,"_maxClippingBounds","_maxClippingBoundsOld")>0}function DM(e,t,n){let i=e[t],o=e[n],r=!i.equals(o);return r&&i.clone(o),r?1:0}var bEt=new h,gEt=new h,yEt=new h,xEt=new h,TEt=new I,_Et=new I;function cAe(e){let t=e._verticalExaggeration,n=e._verticalExaggerationRelativeHeight,i=h.clone(e._minBounds,bEt),o=h.clone(e._maxBounds,gEt),r=h.clone(e._minClippingBounds,yEt),s=h.clone(e._maxClippingBounds,xEt),a=I.clone(e._modelMatrix,TEt);if(e.shape===pc.ELLIPSOID)i.z=ho.getHeight(e._minBounds.z,t,n),o.z=ho.getHeight(e._maxBounds.z,t,n),r.z=ho.getHeight(e._minClippingBounds.z,t,n),s.z=ho.getHeight(e._maxClippingBounds.z,t,n);else{let f=h.fromElements(1,1,t,mEt);I.multiplyByScale(a,f,a),I.multiplyByTranslation(a,ZEt(e),a)}let c=e._provider,d=c.shapeTransform??I.IDENTITY,u=c.globalTransform??I.IDENTITY,m=I.multiplyTransformation(u,a,_Et);I.multiplyTransformation(m,d,m);let p=e._shape;return p.update(m,i,o,r,s)?(e._transformPositionLocalToWorld=I.clone(p.shapeTransform,e._transformPositionLocalToWorld),e._transformPositionWorldToLocal=I.inverse(e._transformPositionLocalToWorld,e._transformPositionWorldToLocal),e._transformDirectionWorldToLocal=I.getMatrix3(e._transformPositionWorldToLocal,e._transformDirectionWorldToLocal),!0):!1}var SEt=new h;function ZEt(e){let t=e._verticalExaggeration,n=e._verticalExaggerationRelativeHeight,{shapeTransform:i=I.IDENTITY,globalTransform:o=I.IDENTITY}=e._provider,r=I.getTranslation(i,Hte),s=I.multiplyByPoint(e._modelMatrix,r,Hte),a=I.multiplyByPoint(o,s,Hte),d=ie.WGS84.cartesianToCartographic(a,hEt),u=0;l(d)&&(u=d.height);let m=ho.getHeight(u,t,n);return h.fromElements(0,0,(m-u)/t,SEt)}function VEt(e,t){t.octreeInternalNodeTexture=e.internalNodeTexture,t.octreeInternalNodeTexelSizeUv=M.clone(e.internalNodeTexelSizeUv,t.octreeInternalNodeTexelSizeUv),t.octreeInternalNodeTilesPerRow=e.internalNodeTilesPerRow;let{megatextures:n}=e,i=n[0];t.megatextureTextures=new Array(n.length);for(let o=0;o<n.length;o++)t.megatextureTextures[o]=n[o].texture;t.megatextureTileCounts=h.clone(i.tileCounts,t.megatextureTileCounts)}function CEt(e){let{shaderDefines:t}=e._shape,n=Object.keys(t).some(i=>t[i]!==e._shapeDefinesOld[i]);return n&&(e._shapeDefinesOld=Je(t,!0)),n}function REt(e,t){if(!l(e)||!l(t))return 0;let n=t.currentTime,i,o=e.indexOf(n);o>=0?i=e.get(o):(o=~o,o===e.length?(o=e.length-1,i=e.get(o),n=i.stop):(i=e.get(o),n=i.start));let r=Q.secondsDifference(i.stop,i.start),a=Q.secondsDifference(n,i.start)/r;return o+a}function GEt(e,t){let n=e.clippingPlanes;if(!l(n))return!1;n.update(t);let{clippingPlanesState:i,enabled:o}=n;if(o){let r=e._uniforms;r.clippingPlanesTexture=n.texture,r.clippingPlanesMatrix=I.transpose(I.multiplyTransformation(I.inverse(n.modelMatrix,r.clippingPlanesMatrix),e._transformPositionLocalToWorld,r.clippingPlanesMatrix),r.clippingPlanesMatrix)}return e._clippingPlanesState===i&&e._clippingPlanesEnabled===o?!1:(e._clippingPlanesState=i,e._clippingPlanesEnabled=o,!0)}u0.prototype.isDestroyed=function(){return!1};u0.prototype.destroy=function(){let e=this._drawCommand;l(e)&&(e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy());let t=this._drawCommandPick;return l(t)&&(t.shaderProgram=t.shaderProgram&&t.shaderProgram.destroy()),this._pickId=this._pickId&&this._pickId.destroy(),this._traversal=this._traversal&&this._traversal.destroy(),this.statistics.texturesByteLength=0,this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),me(this)};var sAe=new Array(new ce(-1,-1,-1,1),new ce(1,-1,-1,1),new ce(-1,1,-1,1),new ce(1,1,-1,1),new ce(-1,-1,1,1),new ce(1,-1,1,1),new ce(-1,1,1,1),new ce(1,1,1,1)),AEt=new Array(1,2,4,0,3,5,0,3,6,1,2,7,0,5,6,1,4,7,2,4,7,3,5,6),EEt=new Array(new ce,new ce,new ce,new ce,new ce,new ce,new ce,new ce);function LEt(e,t,n){let i=I.fromRotationTranslation(e.halfAxes,e.center,rEt),o=I.multiply(t,i,sEt),r=+Number.MAX_VALUE,s=-Number.MAX_VALUE,a=+Number.MAX_VALUE,c=-Number.MAX_VALUE,d,u=EEt,m=sAe.length;for(d=0;d<m;d++)I.multiplyByVector(o,sAe[d],u[d]);for(d=0;d<m;d++){let p=u[d];if(p.z>=-p.w){let b=p.x/p.w,f=p.y/p.w;r=Math.min(r,b),s=Math.max(s,b),a=Math.min(a,f),c=Math.max(c,f)}else for(let b=0;b<3;b++){let f=AEt[d*3+b],y=u[f];if(y.z>=-y.w){let _=p.z+p.w,S=y.z+y.w,Z=_/(_-S),V=ce.lerp(p,y,Z,iEt),C=V.x/V.w,G=V.y/V.w;r=Math.min(r,C),s=Math.max(s,C),a=Math.min(a,G),c=Math.max(c,G)}}}return r=L.clamp(r,-1,1),a=L.clamp(a,-1,1),s=L.clamp(s,-1,1),c=L.clamp(c,-1,1),n=ce.fromElements(r,a,s,c,n),n}var Kte=3e7,WEt=new h(Kte,0,0),vEt=new h(0,Kte,0),FEt=new h(0,0,Kte);function IEt(e,t){let n=e._traversal,i=e._debugPolylines;i.removeAll();function o(c,d,u,m){i.add({positions:[c,d],width:m,material:no.fromType("Color",{color:u})})}function r(c,d,u){let m=c.computeCorners();o(m[0],m[1],d,u),o(m[2],m[3],d,u),o(m[4],m[5],d,u),o(m[6],m[7],d,u),o(m[0],m[2],d,u),o(m[4],m[6],d,u),o(m[1],m[3],d,u),o(m[5],m[7],d,u),o(m[0],m[4],d,u),o(m[2],m[6],d,u),o(m[1],m[5],d,u),o(m[3],m[7],d,u)}function s(c){if(!n.isRenderable(c))return;let d=c.level,m=Math.max(1,5/Math.pow(2,d)),b=[U.RED,U.LIME,U.BLUE][d%3];if(r(c.orientedBoundingBox,b,m),l(c.children))for(let f=0;f<8;f++)s(c.children[f])}r(e._shape.orientedBoundingBox,U.WHITE,5),s(n.rootNode);let a=10;o(h.ZERO,WEt,U.RED,a),o(h.ZERO,vEt,U.LIME,a),o(h.ZERO,FEt,U.BLUE,a),i.update(t)}u0.DefaultCustomShader=new c0({fragmentShaderText:`void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) { vec3 voxelNormal = fsInput.attributes.normalEC; float diffuse = max(0.0, dot(voxelNormal, czm_lightDirectionEC)); float lighting = 0.5 + 0.5 * diffuse; material.diffuse = vec3(lighting); material.alpha = 1.0; }`});function lAe(){this.shape=pc.BOX,this.dimensions=new h(1,1,1),this.names=["data"],this.types=[yt.SCALAR],this.componentTypes=[Pt.FLOAT32],this.maximumTileCount=1}lAe.prototype.requestData=function(e){if((l(e)?e.tileLevel??0:0)>=1)return;let n=new _Z({metadata:[new Float32Array(1)]});return Promise.resolve(n)};u0.DefaultProvider=new lAe;var Dx=u0;var Ruo=x(T(),1);function PEt(e,t,n,i){if(!l(e)||l(t)&&e.id!==t)return;let r=(e.classes||{})[n];if(!l(r))return;let a=(r.properties||{})[i];if(l(a))return a}var OM=PEt;var Auo=x(T(),1);function XEt(e,t,n,i,o){this.schemaId=e,this.className=t,this.propertyName=n,this.classProperty=i,this.metadataProperty=o}var BM=XEt;var Wuo=x(T(),1);function NEt(e,t,n){if(!l(e))return;let i=e.propertyTextures;for(let o of i)if(o.class.id===t){let a=o.properties[n];if(l(a))return a}}var zM=NEt;var Q3=function(e){return function(){e.frameState.afterRender.push(function(){e.requestRender()})}};function bi(e){e=e??B.EMPTY_OBJECT;let t=e.canvas,n=e.creditContainer,i=e.creditViewport,o=e.contextOptions instanceof M2;if(o)this._context=e.contextOptions.createSceneContext(t);else{let d=Je(e.contextOptions);this._context=new W_(t,d)}let r=this._context,s=l(n);s||(n=document.createElement("div"),n.style.position="absolute",n.style.bottom="0",n.style["text-shadow"]="0 0 2px #000000",n.style.color="#ffffff",n.style["font-size"]="10px",n.style["padding-right"]="5px",t.parentNode.appendChild(n)),l(i)||(i=t.parentNode),this._id=Qn(),this._jobScheduler=new hw,this._frameState=new uw(r,new iw(n,"\u2022",i),this._jobScheduler),this._frameState.scene3DOnly=e.scene3DOnly??!1,this._removeCreditContainer=!s,this._creditContainer=n,this._canvas=t,this._computeEngine=new E2(r),this._ellipsoid=e.ellipsoid??ie.default,this._globe=void 0,this._globeTranslucencyState=new mw,this._primitives=new Bl({countReferences:o}),this._groundPrimitives=new Bl({countReferences:o}),this._globeHeight=void 0,this._globeHeightDirty=!0,this._cameraUnderground=!1,this._removeUpdateHeightCallback=void 0,this._logDepthBuffer=bi.defaultLogDepthBuffer&&r.fragmentDepth,this._logDepthBufferDirty=!0,this._tweens=new bZ,this._shaderFrameCount=0,this._sunPostProcess=void 0,this._computeCommandList=[],this._overlayCommandList=[],this._useOIT=e.orderIndependentTranslucency??!0,this._executeOITFunction=void 0,this._depthPlane=new cw(e.depthPlaneEllipsoidOffset),this._clearColorCommand=new mi({color:new U,stencil:0,owner:this}),this._depthClearCommand=new mi({depth:1,owner:this}),this._stencilClearCommand=new mi({stencil:0}),this._classificationStencilClearCommand=new mi({stencil:0,renderState:Oe.fromCache({stencilMask:Kt.CLASSIFICATION_MASK})}),this._depthOnlyRenderStateCache={},this._transitioner=new nM(this),this._preUpdate=new Se,this._postUpdate=new Se,this._renderError=new Se,this._preRender=new Se,this._postRender=new Se,this._controllerHost=new tw,this._minimumDisableDepthTestDistance=0,this._debugInspector=new fM,this._msaaSamples=e.msaaSamples??4,this.rethrowRenderErrors=!1,this.completeMorphOnUserInput=!0,this.morphStart=new Se,this.morphComplete=new Se,this.skyBox=void 0,this.skyAtmosphere=void 0,this.sun=void 0,this.sunBloom=!0,this._sunBloom=void 0,this.moon=void 0,this.backgroundColor=U.clone(U.BLACK),this._mode=se.SCENE3D,this._mapProjection=l(e.mapProjection)?e.mapProjection:new wi(this._ellipsoid),this.morphTime=1,this.farToNearRatio=1e3,this.logarithmicDepthFarToNearRatio=1e9,this.nearToFarDistance2D=175e4,this.verticalExaggeration=1,this.verticalExaggerationRelativeHeight=0,this.debugCommandFilter=void 0,this.debugShowCommands=!1,this.debugShowFrustums=!1,this.debugShowFramesPerSecond=!1,this.debugShowDepthFrustum=1,this.debugShowFrustumPlanes=!1,this._debugShowFrustumPlanes=!1,this._debugFrustumPlanes=void 0,this.useDepthPicking=!0,this.pickTranslucentDepth=!1,this.cameraEventWaitTime=500,this.atmosphere=new cS,this.fog=new dw,this.fog.enabled=ie.WGS84.equals(this._ellipsoid),ie.WGS84.equals(this._ellipsoid)||(Ro.DEFAULT_VIEW_RECTANGLE=re.fromDegrees(-45,-45,45,45)),this._shadowMapCamera=new Ro(this),this.shadowMap=new _g({context:r,lightCamera:this._shadowMapCamera,enabled:e.shadows??!1}),this.invertClassification=!1,this.invertClassificationColor=U.clone(U.WHITE),this._actualInvertClassificationColor=U.clone(this._invertClassificationColor),this._invertClassification=new GR,this.focalLength=void 0,this.eyeSeparation=void 0,this.postProcessStages=new eM,this._brdfLutGenerator=new jY,this._performanceDisplay=void 0,this._debugVolume=void 0,this._screenSpaceCameraController=new sM(this),this._cameraUnderground=!1,this._mapMode2D=e.mapMode2D??id.INFINITE_SCROLL,this._environmentState={skyBoxCommand:void 0,skyAtmosphereCommand:void 0,sunDrawCommand:void 0,sunComputeCommand:void 0,moonCommand:void 0,isSunVisible:!1,isMoonVisible:!1,isReadyForAtmosphere:!1,isSkyAtmosphereVisible:!1,clearGlobeDepth:!1,useDepthPlane:!1,renderTranslucentDepthForPick:!1,originalFramebuffer:void 0,useGlobeDepthFramebuffer:!1,useOIT:!1,useInvertClassification:!1,usePostProcess:!1,usePostProcessSelected:!1,useWebVR:!1},this._useWebVR=!1,this._cameraVR=void 0,this._aspectRatioVR=void 0,this.requestRenderMode=e.requestRenderMode??!1,this._renderRequested=!0,this.maximumRenderTimeChange=e.maximumRenderTimeChange??0,this._lastRenderTime=void 0,this._frameRateMonitor=void 0,this._removeRequestListenerCallback=Mc.requestCompletedEvent.addEventListener(Q3(this)),this._removeTaskProcessorListenerCallback=Jn.taskCompletedEvent.addEventListener(Q3(this)),this._removeGlobeCallbacks=[],this._removeTerrainProviderReadyListener=void 0;let a=new $e(0,0,r.drawingBufferWidth,r.drawingBufferHeight),c=new Ro(this);this._logDepthBuffer&&(c.frustum.near=.1,c.frustum.far=1e10),this.preloadFlightCamera=new Ro(this),this.preloadFlightCullingVolume=void 0,this._picking=new Ww(this),this._defaultView=new lZ(this,c,a),this._view=this._defaultView,this._hdr=void 0,this._hdrDirty=void 0,this.highDynamicRange=!1,this.gamma=2.2,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this._specularEnvironmentCubeMap=void 0,this.light=new yb,this._enableEdgeVisibility=!1,this._enablePlanarFillId=!1,pAe(this,0,Q.now()),this.updateFrameState(),this.initializeFrame()}bi.defaultLogDepthBuffer=!0;function YEt(e,t){for(let i=0;i<e._removeGlobeCallbacks.length;++i)e._removeGlobeCallbacks[i]();e._removeGlobeCallbacks.length=0;let n=[];l(t)&&(n.push(t.imageryLayersUpdatedEvent.addEventListener(Q3(e))),n.push(t.terrainProviderChanged.addEventListener(Q3(e)))),e._removeGlobeCallbacks=n}Object.defineProperties(bi.prototype,{canvas:{get:function(){return this._canvas}},drawingBufferHeight:{get:function(){return this._context.drawingBufferHeight}},drawingBufferWidth:{get:function(){return this._context.drawingBufferWidth}},maximumAliasedLineWidth:{get:function(){return Xt.maximumAliasedLineWidth}},maximumCubeMapSize:{get:function(){return Xt.maximumCubeMapSize}},pickPositionSupported:{get:function(){return this._context.depthTexture}},sampleHeightSupported:{get:function(){return this._context.depthTexture}},clampToHeightSupported:{get:function(){return this._context.depthTexture}},invertClassificationSupported:{get:function(){return this._context.depthTexture}},specularEnvironmentMapsSupported:{get:function(){return mf.isSupported(this._context)}},ellipsoid:{get:function(){return this._ellipsoid}},globe:{get:function(){return this._globe},set:function(e){this._globe=this._globe&&this._globe.destroy(),this._globe=e,YEt(this,e)}},primitives:{get:function(){return this._primitives}},groundPrimitives:{get:function(){return this._groundPrimitives}},camera:{get:function(){return this._view.camera},set:function(e){this._view.camera=e}},view:{get:function(){return this._view},set:function(e){this._view=e}},defaultView:{get:function(){return this._defaultView}},picking:{get:function(){return this._picking}},controllerHost:{get:function(){return this._controllerHost}},screenSpaceCameraController:{get:function(){return this._screenSpaceCameraController}},mapProjection:{get:function(){return this._mapProjection}},jobScheduler:{get:function(){return this._jobScheduler}},frameState:{get:function(){return this._frameState}},environmentState:{get:function(){return this._environmentState}},tweens:{get:function(){return this._tweens}},imageryLayers:{get:function(){if(l(this.globe))return this.globe.imageryLayers}},terrainProvider:{get:function(){if(l(this.globe))return this.globe.terrainProvider},set:function(e){this._removeTerrainProviderReadyListener=this._removeTerrainProviderReadyListener&&this._removeTerrainProviderReadyListener(),l(this.globe)&&(this.globe.terrainProvider=e)}},terrainProviderChanged:{get:function(){if(l(this.globe))return this.globe.terrainProviderChanged}},vectorProvider:{get:function(){return this.globe?.vectorProvider}},preUpdate:{get:function(){return this._preUpdate}},postUpdate:{get:function(){return this._postUpdate}},renderError:{get:function(){return this._renderError}},preRender:{get:function(){return this._preRender}},postRender:{get:function(){return this._postRender}},lastRenderTime:{get:function(){return this._lastRenderTime}},context:{get:function(){return this._context}},debugFrustumStatistics:{get:function(){return this._view.debugFrustumStatistics}},scene3DOnly:{get:function(){return this._frameState.scene3DOnly}},orderIndependentTranslucency:{get:function(){return this._useOIT}},id:{get:function(){return this._id}},mode:{get:function(){return this._mode},set:function(e){e===se.SCENE2D?this.morphTo2D(0):e===se.SCENE3D?this.morphTo3D(0):e===se.COLUMBUS_VIEW&&this.morphToColumbusView(0),this._mode=e}},frustumCommandsList:{get:function(){return this._view.frustumCommandsList}},numberOfFrustums:{get:function(){return this._view.frustumCommandsList.length}},useWebVR:{get:function(){return this._useWebVR},set:function(e){this._useWebVR=e,this._useWebVR?(this._frameState.creditDisplay.container.style.visibility="hidden",this._cameraVR=new Ro(this),l(this._deviceOrientationCameraController)||(this._deviceOrientationCameraController=new lw(this)),this._aspectRatioVR=this.camera.frustum.aspectRatio):(this._frameState.creditDisplay.container.style.visibility="visible",this._cameraVR=void 0,this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this.camera.frustum.aspectRatio=this._aspectRatioVR,this.camera.frustum.xOffset=0)}},mapMode2D:{get:function(){return this._mapMode2D}},splitPosition:{get:function(){return this._frameState.splitPosition},set:function(e){this._frameState.splitPosition=e}},minimumDisableDepthTestDistance:{get:function(){return this._minimumDisableDepthTestDistance},set:function(e){this._minimumDisableDepthTestDistance=e}},logarithmicDepthBuffer:{get:function(){return this._logDepthBuffer},set:function(e){e=this._context.fragmentDepth&&e,this._logDepthBuffer!==e&&(this._logDepthBuffer=e,this._logDepthBufferDirty=!0)}},gamma:{get:function(){return this._context.uniformState.gamma},set:function(e){this._context.uniformState.gamma=e}},highDynamicRange:{get:function(){return this._hdr},set:function(e){let t=this._context,n=e&&t.depthTexture&&(t.colorBufferFloat||t.colorBufferHalfFloat);this._hdrDirty=n!==this._hdr,this._hdr=n}},highDynamicRangeSupported:{get:function(){let e=this._context;return e.depthTexture&&(e.colorBufferFloat||e.colorBufferHalfFloat)}},cameraUnderground:{get:function(){return this._cameraUnderground}},msaaSamples:{get:function(){return this._msaaSamples},set:function(e){e=Math.min(e,Xt.maximumSamples),this._msaaSamples=e}},msaaSupported:{get:function(){return this._context.msaa}},pixelRatio:{get:function(){return this._frameState.pixelRatio},set:function(e){this._frameState.pixelRatio=e}},opaqueFrustumNearOffset:{get:function(){return .9999}},globeHeight:{get:function(){return this._globeHeight}}});bi.prototype.getCompressedTextureFormatSupported=function(e){let t=this.context;return(e==="WEBGL_compressed_texture_s3tc"||e==="s3tc")&&t.s3tc||(e==="WEBGL_compressed_texture_pvrtc"||e==="pvrtc")&&t.pvrtc||(e==="WEBGL_compressed_texture_etc"||e==="etc")&&t.etc||(e==="WEBGL_compressed_texture_etc1"||e==="etc1")&&t.etc1||(e==="WEBGL_compressed_texture_astc"||e==="astc")&&t.astc||(e==="EXT_texture_compression_bptc"||e==="bc7")&&t.bc7};function wEt(e,t){let n=e.pickedMetadataInfo,i=t.pickedMetadataInfo;return n?.schemaId!==i?.schemaId||n?.className!==i?.className||n?.propertyName!==i?.propertyName}function dAe(e,t,n){let i=e._frameState,o=e._context,r=e._view.oit,{lightShadowMaps:s,lightShadowsEnabled:a}=i.shadowState,c=t.derivedCommands;l(t.pickId)&&(c.picking=Ff.createPickDerivedCommand(e,t,o,c.picking)),l(t.snapId)&&i.passes.snap&&(c.snapping=Ff.createSnapDerivedCommand(e,t,o,c.snapping)),i.pickingMetadata&&t.pickMetadataAllowed&&(t.pickedMetadataInfo=i.pickedMetadataInfo,l(t.pickedMetadataInfo)&&(c.pickingMetadata=Ff.createPickMetadataDerivedCommand(e,t,o,c.pickingMetadata))),t.pickOnly||(c.depth=Ff.createDepthOnlyDerivedCommand(e,t,o,c.depth)),c.originalCommand=t,e._hdr&&(c.hdr=Ff.createHdrCommand(t,o,c.hdr),t=c.hdr.command,c=t.derivedCommands),a&&t.receiveShadows&&(c.shadows=_g.createReceiveDerivedCommand(s,t,n,o,c.shadows)),t.pass===We.TRANSLUCENT&&l(r)&&r.isSupported()&&(a&&t.receiveShadows?(c.oit=l(c.oit)?c.oit:{},c.oit.shadows=r.createDerivedCommands(c.shadows.receiveCommand,o,c.oit.shadows)):c.oit=r.createDerivedCommands(t,o,c.oit))}bi.prototype.updateDerivedCommands=function(e){let{derivedCommands:t}=e;if(!l(t))return;let n=this._frameState,{shadowState:i,useLogDepth:o}=this._frameState,r=this._context,s=!1,a=i.lastDirtyTime;e.lastDirtyTime!==a&&(e.lastDirtyTime=a,e.dirty=!0,s=!0);let c=this._hdr,d=l(t.logDepth),u=l(t.hdr),m=l(t.originalCommand),p=o&&!d,b=c&&!u,f=(!o||!c)&&!m,y=n.pickingMetadata&&wEt(e,n),_=n.passes.snap&&l(e.snapId)&&!l(t.snapping);if(e.dirty=e.dirty||p||b||f||y||_,!e.dirty)return;e.dirty=!1;let{shadowsEnabled:S,shadowMaps:Z}=i;S&&e.castShadows&&(t.shadows=_g.createCastDerivedCommand(Z,e,s,r,t.shadows)),(d||p)&&(t.logDepth=Ff.createLogDepthCommand(e,r,t.logDepth),dAe(this,t.logDepth.command,s)),(m||f)&&dAe(this,e,s)};var MEt=new rh({pass:or.RENDER}),Jte=new rh({pass:or.PRELOAD}),jte=new rh({pass:or.PRELOAD_FLIGHT}),kEt=new rh({pass:or.REQUEST_RENDER_MODE_DEFER_CHECK}),uAe=new le,Qte;function UEt(e){if(!(e._mode!==se.SCENE3D||!e.globe?.show||e._cameraUnderground||e._globeTranslucencyState.translucent))return uAe.radius=e.ellipsoid.minimumRadius+e.frameState.minimumTerrainHeight,Qte=BE.fromBoundingSphere(uAe,e.camera.positionWC,Qte),Qte}bi.prototype.clearPasses=function(e){e.render=!1,e.pick=!1,e.pickVoxel=!1,e.snap=!1,e.depth=!1,e.postProcess=!1,e.offscreen=!1};function pAe(e,t,n){let i=e._frameState;i.frameNumber=t,i.time=Q.clone(n,i.time)}bi.prototype.updateFrameState=function(){let e=this.camera,t=this._frameState;t.commandList.length=0,t.shadowMaps.length=0,t.brdfLutGenerator=this._brdfLutGenerator,t.environmentMap=this.skyBox&&this.skyBox._cubeMap,t.mode=this._mode,t.morphTime=this.morphTime,t.mapProjection=this.mapProjection,t.camera=e,t.cullingVolume=e.frustum.computeCullingVolume(e.positionWC,e.directionWC,e.upWC),t.occluder=UEt(this),t.minimumTerrainHeight=0,t.minimumDisableDepthTestDistance=this._minimumDisableDepthTestDistance,t.invertClassification=this.invertClassification,t.useLogDepth=this._logDepthBuffer&&!(this.camera.frustum instanceof bn||this.camera.frustum instanceof ds),t.light=this.light,t.cameraUnderground=this._cameraUnderground,t.globeTranslucencyState=this._globeTranslucencyState;let{globe:n}=this;l(n)&&n._terrainExaggerationChanged&&(this.verticalExaggeration=n._terrainExaggeration,this.verticalExaggerationRelativeHeight=n._terrainExaggerationRelativeHeight,n._terrainExaggerationChanged=!1),t.verticalExaggeration=this.verticalExaggeration,t.verticalExaggerationRelativeHeight=this.verticalExaggerationRelativeHeight,l(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.ready?(t.specularEnvironmentMaps=this._specularEnvironmentCubeMap.texture,t.specularEnvironmentMapsMaximumLOD=this._specularEnvironmentCubeMap.maximumMipmapLevel):(t.specularEnvironmentMaps=void 0,t.specularEnvironmentMapsMaximumLOD=void 0),t.sphericalHarmonicCoefficients=this.sphericalHarmonicCoefficients,this._actualInvertClassificationColor=U.clone(this.invertClassificationColor,this._actualInvertClassificationColor),GR.isTranslucencySupported(this._context)||(this._actualInvertClassificationColor.alpha=1),t.invertClassificationColor=this._actualInvertClassificationColor,l(this.globe)?t.maximumScreenSpaceError=this.globe.maximumScreenSpaceError:t.maximumScreenSpaceError=2,this.clearPasses(t.passes),t.tilesetPassState=void 0};bi.prototype.isVisible=function(e,t,n){if(!l(t))return!1;let{boundingVolume:i}=t;return!l(i)||!t.cull?!0:e.computeVisibility(i)===jt.OUTSIDE?!1:!l(n)||!t.occlude||!i.isOccluded(n)};var j3=new I(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);j3=I.inverseTransformation(j3,j3);function DEt(e,t,n,i){let o=t._frameState,r=o.context,s=e.boundingVolume;l(t._debugVolume)&&t._debugVolume.destroy();let a=h.clone(s.center);if(o.mode!==se.SCENE3D){a=I.multiplyByPoint(j3,a,a);let f=o.mapProjection,y=f.unproject(a);a=f.ellipsoid.cartographicToCartesian(y)}let c,d,{radius:u}=s;l(u)?(c=La.createGeometry(new La({radii:new h(u,u,u),vertexFormat:yn.FLAT_VERTEX_FORMAT})),d=I.fromTranslation(a)):(c=Cc.createGeometry(Cc.fromDimensions({dimensions:new h(2,2,2),vertexFormat:yn.FLAT_VERTEX_FORMAT})),d=I.fromRotationTranslation(s.halfAxes,a,new I)),t._debugVolume=new Nn({geometryInstances:new Nt({geometry:Bn.toWireframe(c),modelMatrix:d,attributes:{color:new Qt(1,0,0,1)}}),appearance:new yn({flat:!0,translucent:!1}),asynchronous:!1});let m=o.commandList,p=o.commandList=[];t._debugVolume.update(o),e=p[0],o.useLogDepth&&(e=Ff.createLogDepthCommand(e,r).command);let b;l(i)&&(b=n.framebuffer,n.framebuffer=i),e.execute(r,n),l(b)&&(n.framebuffer=b),o.commandList=m}function sd(e,t,n,i){let o=t._frameState,r=t._context;if(l(t.debugCommandFilter)&&!t.debugCommandFilter(e))return;if(e instanceof mi){e.execute(r,n);return}e.debugShowBoundingVolume&&l(e.boundingVolume)&&DEt(e,t,n,i),o.useLogDepth&&l(e.derivedCommands.logDepth)&&(e=e.derivedCommands.logDepth.command);let s=o.passes;if(!s.pick&&!s.pickVoxel&&!s.depth&&t._hdr&&l(e.derivedCommands)&&l(e.derivedCommands.hdr)&&(e=e.derivedCommands.hdr.command),s.pick||s.depth){if(s.pick&&!s.depth){if(o.passes.snap){l(e.derivedCommands.snapping)?(e=e.derivedCommands.snapping.snapCommand,e.execute(r,n)):l(e.derivedCommands.depth)&&(e=e.derivedCommands.depth.depthOnlyCommand,e.execute(r,n));return}if(o.pickingMetadata&&l(e.derivedCommands.pickingMetadata)){e=e.derivedCommands.pickingMetadata.pickMetadataCommand,e.execute(r,n);return}if(!o.pickingMetadata&&l(e.derivedCommands.picking)){e=e.derivedCommands.picking.pickCommand,e.execute(r,n);return}}else if(l(e.derivedCommands.depth)){e=e.derivedCommands.depth.depthOnlyCommand,e.execute(r,n);return}}if(t.debugShowCommands||t.debugShowFrustums){t._debugInspector.executeDebugShowFrustumsCommand(t,e,n);return}o.shadowState.lightShadowsEnabled&&e.receiveShadows&&l(e.derivedCommands.shadows)?e.derivedCommands.shadows.receiveCommand.execute(r,n):e.execute(r,n)}function mAe(e,t,n){let{derivedCommands:i}=e;if(!l(i))return;let o=t._frameState,r=t._context;o.useLogDepth&&l(i.logDepth)&&(e=i.logDepth.command);let{picking:s,pickingMetadata:a,depth:c}=e.derivedCommands;l(a)&&(e=i.pickingMetadata.pickMetadataCommand,e.execute(r,n)),l(s)?(e=s.pickCommand,e.execute(r,n)):l(c)&&(e=c.depthOnlyCommand,e.execute(r,n))}function bAe(e,t,n){return t.boundingVolume.distanceSquaredTo(n)-e.boundingVolume.distanceSquaredTo(n)}var OEt=new h;function hAe(e,t){let n=h.subtract(e,t,OEt),i=Math.max(0,h.magnitude(n));return i*i}function BEt(e,t,n){let i=e.boundingVolume,o=t.boundingVolume;return hAe(o.center,n)-hAe(i.center,n)}function zEt(e,t,n){return e.boundingVolume.distanceSquaredTo(n)-t.boundingVolume.distanceSquaredTo(n)+L.EPSILON12}function HEt(e,t,n,i,o){Pp(i,bAe,e.camera.positionWC),l(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function KEt(e,t,n,i,o){Pp(i,zEt,e.camera.positionWC),l(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function JEt(e,t,n){e.context.uniformState.updatePass(We.VOXELS);let i=n.commands[We.VOXELS];i.length=n.indices[We.VOXELS],Pp(i,bAe,e.camera.positionWC);for(let o=0;o<i.length;++o)sd(i[o],e,t)}function jEt(e,t,n){e.context.uniformState.updatePass(We.GAUSSIAN_SPLATS);let i=n.commands[We.GAUSSIAN_SPLATS];i.length=n.indices[We.GAUSSIAN_SPLATS],Pp(i,BEt,e.camera.positionWC);for(let o=0;o<i.length;++o)sd(i[o],e,t)}var QEt=new Bi,qEt=new Fl,$Et=new bn,eLt=new ds;function tLt(e){let{frustum:t}=e;return l(t.fov)?t.clone(QEt):l(t.infiniteProjectionMatrix)?t.clone(qEt):l(t.width)?t.clone($Et):t.clone(eLt)}function nLt(e){if(e._environmentState.useOIT){if(!l(e._executeOITFunction)){let{view:t,context:n}=e;e._executeOITFunction=function(i,o,r,s,a){t.globeDepth.prepareColorTextures(n),t.oit.executeCommands(i,o,r,s,a)}}return e._executeOITFunction}return e.frameState.passes.render?HEt:KEt}function iLt(e,t,n){let{frameState:i,context:o}=e,{pick:r,pickVoxel:s}=i.passes,a=r||s,c;!a&&e._environmentState.useInvertClassification&&i.invertClassificationColor.alpha<1&&(c=e._invertClassification);let d=nLt(e);o.uniformState.updatePass(We.TRANSLUCENT);let u=n.commands[We.TRANSLUCENT];u.length=n.indices[We.TRANSLUCENT],d(e,sd,t,u,c)}function oLt(e,t,n){let{translucentTileClassification:i,globeDepth:o}=e._view;if(!(n.indices[We.CESIUM_3D_TILE_CLASSIFICATION]>0)||!i.isSupported())return;let s=n.commands[We.TRANSLUCENT];i.executeTranslucentCommands(e,sd,t,s,o.depthStencilTexture),i.executeClassificationCommands(e,sd,t,n)}function rLt(e,t,n){e.context.uniformState.updatePass(We.CESIUM_3D_TILE_EDGES);let i=t.framebuffer;e.context.uniformState.edgeColorTexture=e.context.defaultTexture,e.context.uniformState.edgeIdTexture=e.context.defaultTexture,e.context.uniformState.edgeDepthTexture=e.context.defaultTexture,e._enableEdgeVisibility&&l(e._view)&&l(e._view.edgeFramebuffer)&&(t.framebuffer=e._view.edgeFramebuffer.framebuffer);let o=n.commands[We.CESIUM_3D_TILE_EDGES],r=n.indices[We.CESIUM_3D_TILE_EDGES];e._enableEdgeVisibility&&l(e._view)&&l(e._view.edgeFramebuffer)&&e._view.edgeFramebuffer.getClearCommand(new U(0,0,0,0)).execute(e.context,t);for(let s=0;s<r;++s)sd(o[s],e,t);t.framebuffer=i}function sLt(e,t,n){let{context:i}=e,{uniformState:o}=i;o.updatePass(We.CESIUM_3D_TILE_PLANAR_FILL_ID),o.planarFillIdTexture=i.defaultTexture;let r=e._view,s=r&&r.planarFillIdFramebuffer,a=n.commands[We.CESIUM_3D_TILE_PLANAR_FILL_ID],c=n.indices[We.CESIUM_3D_TILE_PLANAR_FILL_ID];if(c!==0&&e._enablePlanarFillId&&l(s)&&l(s.framebuffer)){let d=t.framebuffer;t.framebuffer=s.framebuffer,s.getClearCommand(new U(0,0,0,0)).execute(i,t);for(let m=0;m<c;++m)sd(a[m],e,t);t.framebuffer=d}}function aLt(e,t,n){e.context.uniformState.updatePass(We.CESIUM_3D_TILE_EDGES_DIRECT);let i=n.commands[We.CESIUM_3D_TILE_EDGES_DIRECT],o=n.indices[We.CESIUM_3D_TILE_EDGES_DIRECT];for(let r=0;r<o;++r)sd(i[r],e,t)}function $te(e,t){let{camera:n,context:i,frameState:o}=e,{uniformState:r}=i;r.updateCamera(n),r.planarFillIdTexture=i.defaultTexture;let s=tLt(n);s.near=n.frustum.near,s.far=n.frustum.far;let a=o.passes,c=a.pick||a.pickVoxel;c||cLt(e,t);let{clearGlobeDepth:d,renderTranslucentDepthForPick:u,useDepthPlane:m,useGlobeDepthFramebuffer:p,useInvertClassification:b,usePostProcessSelected:f}=e._environmentState,{globeDepth:y,globeTranslucencyFramebuffer:_,sceneFramebuffer:S,frustumCommandsList:Z}=e._view,V=Z.length,C=e._globeTranslucencyState,G=e._depthClearCommand,E=e._stencilClearCommand,v=e._classificationStencilClearCommand,F=e._depthPlane,P=n.position.z;function N(R,A){r.updatePass(A);let W=R.commands[A],X=R.indices[A];for(let Y=0;Y<X;++Y)sd(W[Y],e,t);return X}function g(R,A){r.updatePass(A);let W=R.commands[A],X=R.indices[A];for(let Y=0;Y<X;++Y)mAe(W[Y],e,t)}for(let R=0;R<V;++R){let A=V-R-1,W=Z[A];e.mode===se.SCENE2D?(n.position.z=P-W.near+1,s.far=Math.max(1,W.far-W.near),s.near=1,r.update(o),r.updateFrustum(s)):(s.near=A!==0?W.near*e.opaqueFrustumNearOffset:W.near,s.far=W.far,r.updateFrustum(s)),G.execute(i,t),i.stencilBuffer&&E.execute(i,t),C.translucent?(r.updatePass(We.GLOBE),C.executeGlobeCommands(W,sd,_,e,t)):N(W,We.GLOBE),p&&y.executeCopyDepth(i,t),u||(C.translucent?(r.updatePass(We.TERRAIN_CLASSIFICATION),C.executeGlobeClassificationCommands(W,sd,_,e,t)):N(W,We.TERRAIN_CLASSIFICATION)),d&&(G.execute(i,t),m&&F.execute(i,t));let X;if(rLt(e,t,W),e._enableEdgeVisibility&&l(e._view)&&l(e._view.edgeFramebuffer)){let D=e._view.edgeFramebuffer.colorTexture;l(D)?e.context.uniformState.edgeColorTexture=D:e.context.uniformState.edgeColorTexture=e.context.defaultTexture;let k=e._view.edgeFramebuffer.idTexture;l(k)?e.context.uniformState.edgeIdTexture=k:e.context.uniformState.edgeIdTexture=e.context.defaultTexture;let O=e._view.edgeFramebuffer.depthTexture;l(O)?e.context.uniformState.edgeDepthTexture=O:e.context.uniformState.edgeDepthTexture=e.context.defaultTexture}else e.context.uniformState.edgeColorTexture=e.context.defaultTexture,e.context.uniformState.edgeIdTexture=e.context.defaultTexture,e.context.uniformState.edgeDepthTexture=e.context.defaultTexture;if(sLt(e,t,W),e._enablePlanarFillId&&l(e._view)&&l(e._view.planarFillIdFramebuffer)){let D=e._view.planarFillIdFramebuffer.idTexture;r.planarFillIdTexture=l(D)?D:i.defaultTexture}else r.planarFillIdTexture=i.defaultTexture;if(!b||c||u)X=N(W,We.CESIUM_3D_TILE),X>0&&(p&&(y.prepareColorTextures(i,d),y.executeUpdateDepth(i,t,y.depthStencilTexture)),u||(X=N(W,We.CESIUM_3D_TILE_CLASSIFICATION)));else{e._invertClassification.clear(i,t);let D=t.framebuffer;t.framebuffer=e._invertClassification._fbo.framebuffer,N(W,We.CESIUM_3D_TILE),p&&(e._invertClassification.prepareTextures(i),y.executeUpdateDepth(i,t,e._invertClassification._fbo.getDepthStencilTexture())),X=N(W,We.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW),t.framebuffer=D,e._invertClassification.executeClassified(i,t),o.invertClassificationColor.alpha===1&&e._invertClassification.executeUnclassified(i,t),X>0&&i.stencilBuffer&&v.execute(i,t),X=N(W,We.CESIUM_3D_TILE_CLASSIFICATION)}if(X>0&&i.stencilBuffer&&E.execute(i,t),JEt(e,t,W),N(W,We.OPAQUE),aLt(e,t,W),jEt(e,t,W),A!==0&&e.mode!==se.SCENE2D&&(s.near=W.near,r.updateFrustum(s)),iLt(e,t,W),oLt(e,t,W),i.depthTexture&&e.useDepthPicking&&(p||u)){let D=e._picking.getPickDepth(e,A);D.update(i,y.depthStencilTexture),D.executeCopyDepth(i,t)}if(c||!f)continue;let Y=t.framebuffer;t.framebuffer=S.getIdFramebuffer(),s.near=A!==0?W.near*e.opaqueFrustumNearOffset:W.near,s.far=W.far,r.updateFrustum(s),C.translucent?(r.updatePass(We.GLOBE),C.executeGlobeCommands(W,mAe,_,e,t)):g(W,We.GLOBE),d&&(G.framebuffer=t.framebuffer,G.execute(i,t),G.framebuffer=void 0),d&&m&&F.execute(i,t),g(W,We.CESIUM_3D_TILE),g(W,We.OPAQUE),g(W,We.TRANSLUCENT),t.framebuffer=Y}}function cLt(e,t){let{context:n,environmentState:i,view:o}=e;if(n.uniformState.updatePass(We.ENVIRONMENT),l(i.skyBoxCommand)&&sd(i.skyBoxCommand,e,t),i.isSkyAtmosphereVisible&&sd(i.skyAtmosphereCommand,e,t),i.isSunVisible&&(i.sunDrawCommand.execute(n,t),e.sunBloom&&!i.useWebVR)){let s;i.useGlobeDepthFramebuffer?s=o.globeDepth.framebuffer:i.usePostProcess?s=o.sceneFramebuffer.framebuffer:s=i.originalFramebuffer,e._sunPostProcess.execute(n),e._sunPostProcess.copy(n,s),t.framebuffer=s}i.isMoonVisible&&i.moonCommand.execute(n,t);let r=e.frameState.panoramaCommandList;for(let s=r.length-1;s>=0;s--){let a=r[s];l(a.shaderProgram)?sd(r[s],e,t):r.splice(s,1)}}function gAe(e){e.context.uniformState.updatePass(We.COMPUTE);let t=e._environmentState.sunComputeCommand;l(t)&&t.execute(e._computeEngine);let n=e._computeCommandList;for(let i=0;i<n.length;++i)n[i].execute(e._computeEngine)}function lLt(e,t){e.context.uniformState.updatePass(We.OVERLAY);let n=e.context,i=e._overlayCommandList;for(let o=0;o<i.length;++o)i[o].execute(n,t)}function dLt(e,t,n){let{shadowMapCullingVolume:i,isPointLight:o,passes:r}=n,s=r.length,a=[We.GLOBE,We.CESIUM_3D_TILE,We.OPAQUE,We.TRANSLUCENT];for(let c=0;c<t.length;++c){let d=t[c];if(e.updateDerivedCommands(d),!(!d.castShadows||a.indexOf(d.pass)<0||!e.isVisible(i,d)))if(o)for(let u=0;u<s;++u)r[u].commandList.push(d);else if(s===1)r[0].commandList.push(d);else{let u=!1;for(let m=s-1;m>=0;--m){let p=r[m].cullingVolume;if(e.isVisible(p,d))r[m].commandList.push(d),u=!0;else if(u)break}}}}function yAe(e){let{shadowState:t,commandList:n}=e.frameState,{shadowsEnabled:i,shadowMaps:o}=t;if(!i)return;let{context:r}=e,{uniformState:s}=r;for(let a=0;a<o.length;++a){let c=o[a];if(c.outOfView)continue;let{passes:d}=c;for(let u=0;u<d.length;++u)d[u].commandList.length=0;dLt(e,n,c);for(let u=0;u<d.length;++u){let m=c.passes[u],{camera:p,commandList:b}=m;s.updateCamera(p),c.updatePass(r,u);for(let f=0;f<b.length;++f){let y=b[f];s.updatePass(y.pass);let _=y.derivedCommands.shadows.castCommands[a];sd(_,e,m.passState)}}}}var uLt=new h;bi.prototype.updateAndExecuteCommands=function(e,t){VLt(this,e,t),this._environmentState.useWebVR?mLt(this,e,t):this._frameState.mode!==se.SCENE2D||this._mapMode2D===id.ROTATE?Ox(!0,this,e):_Lt(this,e)};function mLt(e,t){let n=e._view,i=n.camera,r=e._environmentState.renderTranslucentDepthForPick;xAe(e),n.createPotentiallyVisibleSet(e),gAe(e),r||yAe(e);let s=t.viewport;s.x=0,s.y=0,s.width=s.width*.5;let a=Ro.clone(i,e._cameraVR);a.frustum=i.frustum;let c=i.frustum.near,d=c*(e.focalLength??5),u=e.eyeSeparation??d/30,m=h.multiplyByScalar(a.right,u*.5,uLt);i.frustum.aspectRatio=s.width/s.height;let p=.5*u*c/d;h.add(a.position,m,i.position),i.frustum.xOffset=p,$te(e,t),s.x=s.width,h.subtract(a.position,m,i.position),i.frustum.xOffset=-p,$te(e,t),Ro.clone(a,i)}var hLt=new fe(Math.PI,L.PI_OVER_TWO),fLt=new h,pLt=new h,bLt=new I,gLt=new I,yLt=new h,xLt=new h,TLt=new $e;function _Lt(e,t){let{frameState:n,camera:i}=e,{uniformState:o}=e.context,r=t.viewport,s=$e.clone(r,TLt);t.viewport=s;let a=hLt,c=fLt;e.mapProjection.project(a,c);let u=h.clone(i.position,pLt),m=I.clone(i.transform,gLt),p=i.frustum.clone();i._setTransform(I.IDENTITY);let b=I.computeViewportTransformation(s,0,1,bLt),f=i.frustum.projectionMatrix,y=i.positionWC.y,_=h.fromElements(L.sign(y)*c.x-y,0,-i.positionWC.x,yLt),S=bt.pointToGLWindowCoordinates(f,b,_,xLt);S.x=Math.floor(S.x);let Z=s.x,V=s.width;if(y===0||S.x<=Z||S.x>=Z+V)Ox(!0,e,t);else if(Math.abs(Z+V*.5-S.x)<1)s.width=S.x-s.x,i.position.x*=L.sign(i.position.x),i.frustum.right=0,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),Ox(!0,e,t),s.x=S.x,i.position.x=-i.position.x,i.frustum.right=-i.frustum.left,i.frustum.left=0,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),Ox(!1,e,t);else if(S.x>Z+V*.5){s.width=S.x-Z;let C=i.frustum.right;i.frustum.right=c.x-y,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),Ox(!0,e,t),s.x=S.x,s.width=Z+V-S.x,i.position.x=-i.position.x,i.frustum.left=-i.frustum.right,i.frustum.right=C-i.frustum.right*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),Ox(!1,e,t)}else{s.x=S.x,s.width=Z+V-S.x;let C=i.frustum.left;i.frustum.left=-c.x-y,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),Ox(!0,e,t),s.x=Z,s.width=S.x-Z,i.position.x=-i.position.x,i.frustum.right=-i.frustum.left,i.frustum.left=C-i.frustum.left*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),Ox(!1,e,t)}i._setTransform(m),h.clone(u,i.position),i.frustum=p.clone(),t.viewport=r}function Ox(e,t,n){let i=t._view,{renderTranslucentDepthForPick:o}=t._environmentState;e||(t.frameState.commandList.length=0),xAe(t),i.createPotentiallyVisibleSet(t),e&&(gAe(t),o||yAe(t)),$te(t,n)}var fAe=new Os;bi.prototype.updateEnvironment=function(){let e=this._frameState,t=this._view,n=this._environmentState,i=e.passes.render,o=e.passes.offscreen,r=this.atmosphere,s=this.skyAtmosphere,a=this.globe,c=this._globeTranslucencyState;if(!i||this._mode!==se.SCENE2D&&t.camera.frustum instanceof bn||!c.environmentVisible)n.skyAtmosphereCommand=void 0,n.skyBoxCommand=void 0,n.sunDrawCommand=void 0,n.sunComputeCommand=void 0,n.moonCommand=void 0;else{if(l(s)){if(l(a))s.setDynamicLighting(Pb.fromGlobeFlags(a)),n.isReadyForAtmosphere=n.isReadyForAtmosphere||!a.show||a._surface._tilesToRender.length>0;else{let S=r.dynamicLighting;s.setDynamicLighting(S),n.isReadyForAtmosphere=!0}n.skyAtmosphereCommand=s.update(e,a),l(n.skyAtmosphereCommand)&&this.updateDerivedCommands(n.skyAtmosphereCommand)}else n.skyAtmosphereCommand=void 0;n.skyBoxCommand=l(this.skyBox)?this.skyBox.update(e,this._hdr):void 0;let _=l(this.sun)?this.sun.update(e,t.passState,this._hdr):void 0;n.sunDrawCommand=l(_)?_.drawCommand:void 0,n.sunComputeCommand=l(_)?_.computeCommand:void 0,n.moonCommand=l(this.moon)?this.moon.update(e):void 0}let d=n.clearGlobeDepth=l(a)&&a.show&&(!a.depthTestAgainstTerrain||this.mode===se.SCENE2D);(n.useDepthPlane=d&&this.mode===se.SCENE3D&&c.useDepthPlane)&&this._depthPlane.update(e),n.renderTranslucentDepthForPick=!1,n.useWebVR=this._useWebVR&&this.mode!==se.SCENE2D&&!o;let m=e.mode===se.SCENE3D&&!c.sunVisibleThroughGlobe?e.occluder:void 0,p=e.cullingVolume,b=fAe.planes;for(let _=0;_<5;++_)b[_]=p.planes[_];p=fAe,n.isSkyAtmosphereVisible=l(n.skyAtmosphereCommand)&&n.isReadyForAtmosphere,n.isSunVisible=this.isVisible(p,n.sunDrawCommand,m),n.isMoonVisible=this.isVisible(p,n.moonCommand,m);let f=this.specularEnvironmentMaps,y=this._specularEnvironmentCubeMap;l(f)&&y?.url!==f?(l(y)&&y.destroy(),this._specularEnvironmentCubeMap=new mf(f)):!l(f)&&l(y)&&(y.destroy(),this._specularEnvironmentCubeMap=void 0),l(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.update(e)};function SLt(e){let t=e._frameState;e.debugShowFrustumPlanes!==e._debugShowFrustumPlanes&&(e.debugShowFrustumPlanes?e._debugFrustumPlanes=new t0({camera:e.camera,updateOnChange:!1,frustumSplits:t.frustumSplits}):e._debugFrustumPlanes=e._debugFrustumPlanes&&e._debugFrustumPlanes.destroy(),e._debugShowFrustumPlanes=e.debugShowFrustumPlanes),l(e._debugFrustumPlanes)&&e._debugFrustumPlanes.update(t)}function ZLt(e){let t=e._frameState,{passes:n,shadowState:i,shadowMaps:o}=t,r=o.length,s=r>0&&!n.pick&&!n.pickVoxel&&e.mode===se.SCENE3D;if(s!==i.shadowsEnabled&&(++i.lastDirtyTime,i.shadowsEnabled=s),i.lightShadowsEnabled=!1,!!s){for(let a=0;a<r;++a)if(o[a]!==i.shadowMaps[a]){++i.lastDirtyTime;break}i.shadowMaps.length=0,i.lightShadowMaps.length=0;for(let a=0;a<r;++a){let c=o[a];c.update(t),i.shadowMaps.push(c),c.fromLightSource&&(i.lightShadowMaps.push(c),i.lightShadowsEnabled=!0),c.dirty&&(++i.lastDirtyTime,c.dirty=!1)}}}function xAe(e){let t=e._frameState;t.edgeVisibilityRequested=!1,t.planarFillRequested=!1,e._groundPrimitives.update(t),e._primitives.update(t),t.edgeVisibilityRequested&&e._enableEdgeVisibility===!1&&(e._enableEdgeVisibility=!0),e._enablePlanarFillId=t.planarFillRequested,SLt(e),ZLt(e),e._globe&&e._globe.render(t)}function VLt(e,t,n){let i=e._context,o=e._frameState,r=e._environmentState,s=e._view,a=o.passes,c=a.pick||a.pickVoxel;l(s.globeDepth)&&(s.globeDepth.picking=c,s.globeDepth.snapping=a.snap);let d=r.useWebVR;r.originalFramebuffer=t.framebuffer,l(e.sun)&&e.sunBloom!==e._sunBloom?(e.sunBloom&&!d?e._sunPostProcess=new mM:l(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy()),e._sunBloom=e.sunBloom):!l(e.sun)&&l(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy(),e._sunBloom=!1);let u=e._clearColorCommand;U.clone(n,u.color),u.execute(i,t);let m=r.useGlobeDepthFramebuffer=l(s.globeDepth);m&&(s.globeDepth.update(i,t,s.viewport,e.msaaSamples,e._hdr,r.clearGlobeDepth),s.globeDepth.clear(i,t,n));let p=s.oit,b=r.useOIT=!c&&l(p)&&p.isSupported();b&&(p.update(i,t,s.globeDepth.colorFramebufferManager,e._hdr,e.msaaSamples),p.clear(i,t,n),r.useOIT=p.isSupported());let f=e.postProcessStages,y=r.usePostProcess=!c&&(e._hdr||f.length>0||f.ambientOcclusion.enabled||f.fxaa.enabled||f.bloom.enabled);r.usePostProcessSelected=!1,y&&(s.sceneFramebuffer.update(i,s.viewport,e._hdr,e.msaaSamples),s.sceneFramebuffer.clear(i,t,n),f.update(i,o.useLogDepth,e._hdr),f.clear(i),y=r.usePostProcess=f.ready,r.usePostProcessSelected=y&&f.hasSelected),r.isSunVisible&&e.sunBloom&&!d?(t.framebuffer=e._sunPostProcess.update(t),e._sunPostProcess.clear(i,t,n)):m?t.framebuffer=s.globeDepth.framebuffer:y&&(t.framebuffer=s.sceneFramebuffer.framebuffer),l(t.framebuffer)&&u.execute(i,t);let _=r.useInvertClassification=!c&&l(t.framebuffer)&&e.invertClassification;if(!c&&e._enableEdgeVisibility&&s.edgeFramebuffer.update(i,s.viewport,e._hdr),!c&&e._enablePlanarFillId?s.planarFillIdFramebuffer.update(i,s.viewport,e._hdr):c||s.planarFillIdFramebuffer.releaseResources(),_){let V;if(o.invertClassificationColor.alpha===1&&m&&(V=s.globeDepth.framebuffer),l(V)||i.depthTexture){if(e._invertClassification.previousFramebuffer=V,e._invertClassification.update(i,e.msaaSamples,s.globeDepth.colorFramebufferManager),e._invertClassification.clear(i,t),o.invertClassificationColor.alpha<1&&b){let C=e._invertClassification.unclassifiedCommand,G=C.derivedCommands;G.oit=p.createDerivedCommands(C,i,G.oit)}}else r.useInvertClassification=!1}e._globeTranslucencyState.translucent&&s.globeTranslucencyFramebuffer.updateAndClear(e._hdr,s.viewport,i,t)}bi.prototype.resolveFramebuffers=function(e){let t=this._context,n=this._environmentState,i=this._view,{globeDepth:o,translucentTileClassification:r}=i;l(o)&&o.prepareColorTextures(t);let{useOIT:s,useGlobeDepthFramebuffer:a,usePostProcess:c,originalFramebuffer:d}=n,u=a?o.colorFramebufferManager:void 0,m=i.sceneFramebuffer._colorFramebuffer,p=i.sceneFramebuffer.idFramebuffer;if(s&&(e.framebuffer=c?m.framebuffer:d,i.oit.execute(t,e)),r.hasTranslucentDepth&&r.isSupported()&&r.execute(this,e),c){i.sceneFramebuffer.prepareColorTextures(t);let b=m;a&&!s&&(b=u);let f=this.postProcessStages,y=b.getColorTexture(0),_=p.getColorTexture(0),S=(u??m).getDepthStencilTexture();f.execute(t,y,S,_),f.copy(t,d)}!s&&!c&&a&&(e.framebuffer=d,o.executeCopyColor(t,e))};function CLt(e){let t=e._frameState.afterRender,n=t.slice();t.length=0;for(let i=0;i<n.length;++i)n[i]()&&e.requestRender()}function RLt(e){if(e.mode===se.MORPHING)return;let t=e.camera.positionCartographic;return e.getHeight(t)}function TAe(e,t,n){let i=Number.NEGATIVE_INFINITY;if(e instanceof Bl){let o=e.length;for(let r=0;r<o;++r){let s=e.get(r),a=TAe(s,t,n);l(a)&&a>i&&(i=a)}}else if(e.isCesium3DTileset&&e.show&&e.enableCollision){let o=e.getHeight(t,n);if(l(o)&&o>i)return o}return i}bi.prototype.getHeight=function(e,t){if(!l(e))return;let n=t===rt.CLAMP_TO_TERRAIN||t===rt.RELATIVE_TO_TERRAIN,i=t===rt.CLAMP_TO_3D_TILE||t===rt.RELATIVE_TO_3D_TILE;if(!l(e))return;let o=Number.NEGATIVE_INFINITY;if(!n){let s=TAe(this.primitives,e,this);l(s)&&s>o&&(o=s)}let r=this._globe;if(!i&&l(r)&&r.show){let s=r.getHeight(e);s>o&&(o=s)}if(o>Number.NEGATIVE_INFINITY)return o};var qte=new fe;bi.prototype.updateHeight=function(e,t,n){let i=this._ellipsoid,o=b=>{fe.clone(e,qte);let f;l(b)&&(f=b.height),l(f)||(f=this.getHeight(e,n)),l(f)&&(qte.height=f,t(qte))},r=n===rt.CLAMP_TO_TERRAIN||n===rt.RELATIVE_TO_TERRAIN,s=n===rt.CLAMP_TO_3D_TILE||n===rt.RELATIVE_TO_3D_TILE,a;!s&&l(this.globe)&&(a=this.globe._surface.updateHeight(e,o));let c={},d=b=>{if(r||b.isDestroyed()||!b.isCesium3DTileset)return;let f=b.updateHeight(e,o,i);c[b.id]=f};if(!r){let b=this.primitives.length;for(let f=0;f<b;++f){let y=this.primitives.get(f);d(y)}}let u=this.primitives.primitiveAdded.addEventListener(d),m=this.primitives.primitiveRemoved.addEventListener(b=>{b.isDestroyed()||!b.isCesium3DTileset||(l(c[b.id])&&c[b.id](),delete c[b.id])});return()=>{a=a&&a(),Object.values(c).forEach(b=>b()),c={},u(),m()}};function GLt(e){let t=e.camera,n=e._mode,i=e._screenSpaceCameraController,o=t.positionCartographic;if(!l(o))return!1;if(!i.onMap()&&o.height<0)return!0;if(n===se.SCENE2D||n===se.MORPHING)return!1;let r=e._globeHeight;return l(r)&&o.height<r}bi.prototype.initializeFrame=function(){if(this._shaderFrameCount++===120&&(this._shaderFrameCount=0,this._context.shaderCache.destroyReleasedShaderPrograms(),this._context.textureCache.destroyReleasedTextures()),this._tweens.update(),this._globeHeightDirty){l(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),this._globeHeight=RLt(this),this._globeHeightDirty=!1;let e=this.camera.positionCartographic;this._removeUpdateHeightCallback=this.updateHeight(e,t=>{this.isDestroyed()||(this._globeHeight=t.height)})}this._cameraUnderground=GLt(this),this._globeTranslucencyState.update(this),this._screenSpaceCameraController.update(),l(this._deviceOrientationCameraController)&&this._deviceOrientationCameraController.update(),this.camera.update(this._mode),this.camera._updateCameraChanged()};function ALt(e,t){if(e.debugShowFramesPerSecond){if(!l(e._performanceDisplay)){let n=document.createElement("div");n.className="cesium-performanceDisplay-defaultContainer",e._canvas.parentNode.appendChild(n);let o=new yg({container:n});e._performanceDisplay=o,e._performanceContainer=n}e._performanceDisplay.throttled=e.requestRenderMode,e._performanceDisplay.update(t)}else l(e._performanceDisplay)&&(e._performanceDisplay=e._performanceDisplay&&e._performanceDisplay.destroy(),e._performanceContainer.parentNode.removeChild(e._performanceContainer))}function ELt(e){e._jobScheduler.resetBudgets();let t=e._frameState;e.primitives.prePassesUpdate(t),l(e.globe)&&e.globe.update(t),e._picking.update(),t.creditDisplay.update()}function LLt(e){e.primitives.postPassesUpdate(e._frameState),Mc.update()}var WLt=new U;function vLt(e){let t=e._frameState,n=e.context,{uniformState:i}=n,o=e._defaultView;e._view=o,e.updateFrameState(),t.passes.render=!0,t.passes.postProcess=e.postProcessStages.hasSelected,t.tilesetPassState=MEt;let r=e.backgroundColor??U.BLACK;e._hdr&&(r=U.clone(r,WLt),r.red=Math.pow(r.red,e.gamma),r.green=Math.pow(r.green,e.gamma),r.blue=Math.pow(r.blue,e.gamma)),t.backgroundColor=r,t.atmosphere=e.atmosphere,e.fog.update(t),i.update(t);let s=e.shadowMap;l(s)&&s.enabled&&(!l(e.light)||e.light instanceof yb?h.negate(i.sunDirectionWC,e._shadowMapCamera.direction):h.clone(e.light.direction,e._shadowMapCamera.direction),t.shadowMaps.push(s)),e._computeCommandList.length=0,e._overlayCommandList.length=0;let a=o.viewport;a.x=0,a.y=0,a.width=n.drawingBufferWidth,a.height=n.drawingBufferHeight;let c=o.passState;c.framebuffer=void 0,c.blendingEnabled=void 0,c.scissorTest=void 0,c.viewport=$e.clone(a,c.viewport),n.beginFrame(),l(e.globe)&&e.globe.beginFrame(t),e.updateEnvironment(),e.updateAndExecuteCommands(c,r),e.resolveFramebuffers(c),c.framebuffer=void 0,lLt(e,c),l(e.globe)&&(e.globe.endFrame(t),e.globe.tilesLoaded||(e._renderRequested=!0)),n.endFrame()}function CZ(e,t){try{t(e)}catch(n){if(e._renderError.raiseEvent(e,n),e.rethrowRenderErrors)throw n}}function FLt(e){return e._picking.updateMostDetailedRayPicks(e)}bi.prototype.render=function(e){this._preUpdate.raiseEvent(this,e);let t=this._frameState;t.newFrame=!1,l(e)||(e=Q.now()),this._controllerHost.update(this,e);let n=this._view.checkForCameraUpdates(this);n&&(this._globeHeightDirty=!0);let i=!this.requestRenderMode||this._renderRequested||n||this._logDepthBufferDirty||this._hdrDirty||this.mode===se.MORPHING;if(!i&&l(this.maximumRenderTimeChange)&&l(this._lastRenderTime)){let o=Math.abs(Q.secondsDifference(this._lastRenderTime,e));i=i||o>this.maximumRenderTimeChange}if(i){this._lastRenderTime=Q.clone(e,this._lastRenderTime),this._renderRequested=!1,this._logDepthBufferDirty=!1,this._hdrDirty=!1;let o=L.incrementWrap(t.frameNumber,15e6,1);pAe(this,o,e),t.newFrame=!0}CZ(this,ELt),this.primitives.show&&(CZ(this,FLt),CZ(this,ILt),CZ(this,PLt),i||CZ(this,XLt)),this._postUpdate.raiseEvent(this,e),i&&(this._preRender.raiseEvent(this,e),t.creditDisplay.beginFrame(),CZ(this,vLt)),ALt(this,i),CZ(this,LLt),CLt(this),i&&(this._postRender.raiseEvent(this,e),t.creditDisplay.endFrame())};bi.prototype.forceRender=function(e){this._renderRequested=!0,this.render(e)};bi.prototype.requestRender=function(){this._renderRequested=!0};bi.prototype.clampLineWidth=function(e){return Math.max(Xt.minimumAliasedLineWidth,Math.min(e,Xt.maximumAliasedLineWidth))};bi.prototype.pick=function(e,t,n){return this._picking.pick(this,e,t,n,1)[0]};bi.prototype.snap=function(e,t){return lM.snap(this,e,t)};bi.prototype.pickAsync=async function(e,t,n){return(await this._picking.pickAsync(this,e,t,n,1))[0]};bi.prototype.pickVoxel=function(e,t,n){let i=this.pick(e,t,n);if(!l(i))return;let o=i.primitive;if(!(o instanceof Dx))return;let r=this._picking.pickVoxelCoordinate(this,e,t,n),s=255*r[0]+r[1],a=o._traversal.findKeyframeNode(s);if(!l(a))return;let c=255*r[2]+r[3];return pM.fromKeyframeNode(o,s,c,a)};bi.prototype.pickMetadata=function(e,t,n,i){let o=this.pick(e);if(!l(o))return;let r=o.detail?.model?.structuralMetadata;if(!l(r))return;let s=r.schema,a=OM(s,t,n,i);if(!l(a))return;let c=zM(r,n,i);if(!l(c))return;let d=new BM(t,n,i,a,c);return this._picking.pickMetadata(this,e,d)};bi.prototype.pickMetadataSchema=function(e){let t=this.pick(e);return l(t)?t.detail?.model?.structuralMetadata?.schema:void 0};bi.prototype.pickPositionWorldCoordinates=function(e,t){return this._picking.pickPositionWorldCoordinates(this,e,t)};bi.prototype.pickPosition=function(e,t){return this._picking.pickPosition(this,e,t)};bi.prototype.drillPick=function(e,t,n,i){return this._picking.drillPick(this,e,t,n,i)};function ILt(e){let t=e._frameState;Jte.camera=t.camera,Jte.cullingVolume=t.cullingVolume,e.primitives.updateForPass(t,Jte)}function PLt(e){let t=e._frameState;if(!t.camera.canPreloadFlight())return;jte.camera=e.preloadFlightCamera,jte.cullingVolume=e.preloadFlightCullingVolume,e.primitives.updateForPass(t,jte)}function XLt(e){e.primitives.updateForPass(e._frameState,kEt)}bi.prototype.pickFromRay=function(e,t,n){return this._picking.pickFromRay(this,e,t,n)};bi.prototype.drillPickFromRay=function(e,t,n,i){return this._picking.drillPickFromRay(this,e,t,n,i)};bi.prototype.pickFromRayMostDetailed=function(e,t,n){return this._picking.pickFromRayMostDetailed(this,e,t,n)};bi.prototype.drillPickFromRayMostDetailed=function(e,t,n,i){return this._picking.drillPickFromRayMostDetailed(this,e,t,n,i)};bi.prototype.sampleHeight=function(e,t,n){return this._picking.sampleHeight(this,e,t,n)};bi.prototype.clampToHeight=function(e,t,n,i){return this._picking.clampToHeight(this,e,t,n,i)};bi.prototype.sampleHeightMostDetailed=function(e,t,n){return this._picking.sampleHeightMostDetailed(this,e,t,n)};bi.prototype.clampToHeightMostDetailed=function(e,t,n){return this._picking.clampToHeightMostDetailed(this,e,t,n)};bi.prototype.cartesianToCanvasCoordinates=function(e,t){return co.worldToWindowCoordinates(this,e,t)};bi.prototype.completeMorph=function(){this._transitioner.completeMorph()};bi.prototype.morphTo2D=function(e){e=e??2,this._transitioner.morphTo2D(e,this._ellipsoid)};bi.prototype.morphToColumbusView=function(e){e=e??2,this._transitioner.morphToColumbusView(e,this._ellipsoid)};bi.prototype.morphTo3D=function(e){e=e??2,this._transitioner.morphTo3D(e,this._ellipsoid)};function NLt(e,t){if(e._removeTerrainProviderReadyListener=e._removeTerrainProviderReadyListener&&e._removeTerrainProviderReadyListener(),t.ready){l(e.globe)&&(e.globe.terrainProvider=t.provider);return}e.globe.terrainProvider=void 0,e._removeTerrainProviderReadyListener=t.readyEvent.addEventListener(n=>{l(e)&&l(e.globe)&&(e.globe.terrainProvider=n),e._removeTerrainProviderReadyListener()})}bi.prototype.setTerrain=function(e){return NLt(this,e),e};bi.prototype.isDestroyed=function(){return!1};bi.prototype.destroy=function(){this._tweens.removeAll(),this._computeEngine=this._computeEngine&&this._computeEngine.destroy(),this._screenSpaceCameraController=this._screenSpaceCameraController&&this._screenSpaceCameraController.destroy(),this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this._primitives=this._primitives&&this._primitives.destroy(),this._groundPrimitives=this._groundPrimitives&&this._groundPrimitives.destroy(),this._globe=this._globe&&this._globe.destroy(),this._removeTerrainProviderReadyListener=this._removeTerrainProviderReadyListener&&this._removeTerrainProviderReadyListener(),this.skyBox=this.skyBox&&this.skyBox.destroy(),this.skyAtmosphere=this.skyAtmosphere&&this.skyAtmosphere.destroy(),this._debugSphere=this._debugSphere&&this._debugSphere.destroy(),this.sun=this.sun&&this.sun.destroy(),this._sunPostProcess=this._sunPostProcess&&this._sunPostProcess.destroy(),this._depthPlane=this._depthPlane&&this._depthPlane.destroy(),this._transitioner=this._transitioner&&this._transitioner.destroy(),this._debugFrustumPlanes=this._debugFrustumPlanes&&this._debugFrustumPlanes.destroy(),this._brdfLutGenerator=this._brdfLutGenerator&&this._brdfLutGenerator.destroy(),this._picking=this._picking&&this._picking.destroy(),this._defaultView=this._defaultView&&this._defaultView.destroy(),this._view=void 0,this._removeCreditContainer&&this._canvas.parentNode.removeChild(this._creditContainer),this.postProcessStages=this.postProcessStages&&this.postProcessStages.destroy(),this._context=this._context&&this._context.destroy(),this._frameState.creditDisplay=this._frameState.creditDisplay&&this._frameState.creditDisplay.destroy(),l(this._performanceDisplay)&&(this._performanceDisplay=this._performanceDisplay&&this._performanceDisplay.destroy(),this._performanceContainer.parentNode.removeChild(this._performanceContainer)),this._removeRequestListenerCallback(),this._removeTaskProcessorListenerCallback();for(let e=0;e<this._removeGlobeCallbacks.length;++e)this._removeGlobeCallbacks[e]();return this._removeGlobeCallbacks.length=0,l(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),me(this)};var HM=bi;var who=x(T(),1);var dho=x(T(),1),PR=`float interpolateByDistance(vec4 nearFarScalar, float distance) { float startDistance = nearFarScalar.x; float startValue = nearFarScalar.y; float endDistance = nearFarScalar.z; float endValue = nearFarScalar.w; float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0); return mix(startValue, endValue, t); } void computeAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity, out float underTranslucentGlobe) { float ellipsoidRadiiDifference = czm_ellipsoidRadii.x - czm_ellipsoidRadii.z; // Adjustment to the atmosphere radius applied based on the camera height. float distanceAdjustMin = czm_ellipsoidRadii.x / 4.0; float distanceAdjustMax = czm_ellipsoidRadii.x; float distanceAdjustModifier = ellipsoidRadiiDifference / 2.0; float distanceAdjust = distanceAdjustModifier * clamp((czm_eyeHeight - distanceAdjustMin) / (distanceAdjustMax - distanceAdjustMin), 0.0, 1.0); // Since atmosphere scattering assumes the atmosphere is a spherical shell, we compute an inner radius of the atmosphere best fit // for the position on the ellipsoid. float radiusAdjust = (ellipsoidRadiiDifference / 4.0) + distanceAdjust; float atmosphereInnerRadius = (length(czm_viewerPositionWC) - czm_eyeHeight) - radiusAdjust; // Setup the primary ray: from the camera position to the vertex position. vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection); underTranslucentGlobe = 0.0; // Brighten the sky atmosphere under the Earth's atmosphere when translucency is enabled. #if defined(GLOBE_TRANSLUCENT) // Check for intersection with the inner radius of the atmopshere. czm_raySegment primaryRayEarthIntersect = czm_raySphereIntersectionInterval(primaryRay, vec3(0.0), atmosphereInnerRadius + radiusAdjust); if (primaryRayEarthIntersect.start > 0.0 && primaryRayEarthIntersect.stop > 0.0) { // Compute position on globe. vec3 direction = normalize(positionWC); czm_ray ellipsoidRay = czm_ray(positionWC, -direction); czm_raySegment ellipsoidIntersection = czm_rayEllipsoidIntersectionInterval(ellipsoidRay, vec3(0.0), czm_ellipsoidInverseRadii); vec3 onEarth = positionWC - (direction * ellipsoidIntersection.start); // Control the color using the camera angle. float angle = dot(normalize(czm_viewerPositionWC), normalize(onEarth)); // Control the opacity using the distance from Earth. opacity = interpolateByDistance(vec4(0.0, 1.0, czm_ellipsoidRadii.x, 0.0), length(czm_viewerPositionWC - onEarth)); vec3 horizonColor = vec3(0.1, 0.2, 0.3); vec3 nearColor = vec3(0.0); rayleighColor = mix(nearColor, horizonColor, exp(-angle) * opacity); // Set the traslucent flag to avoid alpha adjustment in computeFinalColor funciton. underTranslucentGlobe = 1.0; return; } #endif computeScattering( primaryRay, length(cameraToPositionWC), lightDirection, atmosphereInnerRadius, rayleighColor, mieColor, opacity ); // Alter the opacity based on how close the viewer is to the ground. // (0.0 = At edge of atmosphere, 1.0 = On ground) float cameraHeight = czm_eyeHeight + atmosphereInnerRadius; float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS; opacity = clamp((atmosphereOuterRadius - cameraHeight) / (atmosphereOuterRadius - atmosphereInnerRadius), 0.0, 1.0); // Alter alpha based on time of day (0.0 = night , 1.0 = day) float nightAlpha = (u_radiiAndDynamicAtmosphereColor.z != 0.0) ? clamp(dot(normalize(positionWC), lightDirection), 0.0, 1.0) : 1.0; opacity *= pow(nightAlpha, 0.5); } `;var mho=x(T(),1),KM=`in vec3 v_outerPositionWC; uniform vec3 u_hsbShift; #ifndef PER_FRAGMENT_ATMOSPHERE in vec3 v_mieColor; in vec3 v_rayleighColor; in float v_opacity; in float v_translucent; #endif void main (void) { float lightEnum = u_radiiAndDynamicAtmosphereColor.z; vec3 lightDirection = czm_getDynamicAtmosphereLightDirection(v_outerPositionWC, lightEnum); vec3 mieColor; vec3 rayleighColor; float opacity; float translucent; #ifdef PER_FRAGMENT_ATMOSPHERE computeAtmosphereScattering( v_outerPositionWC, lightDirection, rayleighColor, mieColor, opacity, translucent ); #else mieColor = v_mieColor; rayleighColor = v_rayleighColor; opacity = v_opacity; translucent = v_translucent; #endif vec4 color = computeAtmosphereColor(v_outerPositionWC, lightDirection, rayleighColor, mieColor, opacity); #ifndef HDR color.rgb = czm_pbrNeutralTonemapping(color.rgb); color.rgb = czm_inverseGamma(color.rgb); #endif #ifdef COLOR_CORRECT const bool ignoreBlackPixels = true; color.rgb = czm_applyHSBShift(color.rgb, u_hsbShift, ignoreBlackPixels); #endif // For the parts of the sky atmosphere that are not behind a translucent globe, // we mix in the default opacity so that the sky atmosphere still appears at distance. // This is needed because the opacity in the sky atmosphere is initially adjusted based // on the camera height. if (translucent == 0.0) { color.a = mix(color.b, 1.0, color.a) * smoothstep(0.0, 1.0, czm_morphTime); } out_FragColor = color; } `;var fho=x(T(),1),JM=`in vec4 position; out vec3 v_outerPositionWC; #ifndef PER_FRAGMENT_ATMOSPHERE out vec3 v_mieColor; out vec3 v_rayleighColor; out float v_opacity; out float v_translucent; #endif void main(void) { vec4 positionWC = czm_model * position; float lightEnum = u_radiiAndDynamicAtmosphereColor.z; vec3 lightDirection = czm_getDynamicAtmosphereLightDirection(positionWC.xyz, lightEnum); #ifndef PER_FRAGMENT_ATMOSPHERE computeAtmosphereScattering( positionWC.xyz, lightDirection, v_rayleighColor, v_mieColor, v_opacity, v_translucent ); #endif v_outerPositionWC = positionWC.xyz; vec4 positionEC = czm_modelView * position; gl_Position = czm_projection * positionEC; } `;function XR(e){e=e??ie.WGS84,this.show=!0,this.perFragmentAtmosphere=!1,this._ellipsoid=e;let t=1.025,n=h.multiplyByScalar(e.radii,t,new h);this._scaleMatrix=I.fromScale(n),this._modelMatrix=new I,this._command=new ot({owner:this,modelMatrix:this._modelMatrix}),this._spSkyFromSpace=void 0,this._spSkyFromAtmosphere=void 0,this._flags=void 0,this.atmosphereLightIntensity=50,this.atmosphereRayleighCoefficient=new h(55e-7,13e-6,284e-7),this.atmosphereMieCoefficient=new h(21e-6,21e-6,21e-6),this.atmosphereRayleighScaleHeight=1e4,this.atmosphereMieScaleHeight=3200,this.atmosphereMieAnisotropy=.9,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this._hueSaturationBrightness=new h;let i=new h;i.x=e.maximumRadius*t,i.y=e.maximumRadius,i.z=0,this._radiiAndDynamicAtmosphereColor=i;let o=this;this._command.uniformMap={u_radiiAndDynamicAtmosphereColor:function(){return o._radiiAndDynamicAtmosphereColor},u_hsbShift:function(){return o._hueSaturationBrightness.x=o.hueShift,o._hueSaturationBrightness.y=o.saturationShift,o._hueSaturationBrightness.z=o.brightnessShift,o._hueSaturationBrightness},u_atmosphereLightIntensity:function(){return o.atmosphereLightIntensity},u_atmosphereRayleighCoefficient:function(){return o.atmosphereRayleighCoefficient},u_atmosphereMieCoefficient:function(){return o.atmosphereMieCoefficient},u_atmosphereRayleighScaleHeight:function(){return o.atmosphereRayleighScaleHeight},u_atmosphereMieScaleHeight:function(){return o.atmosphereMieScaleHeight},u_atmosphereMieAnisotropy:function(){return o.atmosphereMieAnisotropy}}}Object.defineProperties(XR.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});XR.prototype.setDynamicLighting=function(e){this._radiiAndDynamicAtmosphereColor.z=e};var ene=new I;XR.prototype.update=function(e,t){if(!this.show)return;let n=e.mode;if(n!==se.SCENE3D&&n!==se.MORPHING||!e.passes.render)return;let i=I.fromRotationTranslation(e.context.uniformState.inverseViewRotation,h.ZERO,ene),o=I.multiplyTransformation(i,Mi.Y_UP_TO_Z_UP,ene),r=I.multiply(this._scaleMatrix,o,ene);I.clone(r,this._modelMatrix);let s=e.context,a=YLt(this),c=e.globeTranslucencyState.translucent,d=this.perFragmentAtmosphere||c||!l(t)||!t.show,u=this._command;if(!l(u.vertexArray)){let p=La.createGeometry(new La({radii:new h(1,1,1),slicePartitions:256,stackPartitions:256,vertexFormat:we.POSITION_ONLY}));u.vertexArray=Dn.fromGeometry({context:s,geometry:p,attributeLocations:Bn.createAttributeLocations(p),bufferUsage:Ie.STATIC_DRAW}),u.renderState=Oe.fromCache({cull:{enabled:!0,face:ki.FRONT},blending:tn.ALPHA_BLEND,depthMask:!1})}let m=a|d<<2|c<<3;if(m!==this._flags){this._flags=m;let p=[];a&&p.push("COLOR_CORRECT"),d&&p.push("PER_FRAGMENT_ATMOSPHERE"),c&&p.push("GLOBE_TRANSLUCENT");let b=new ze({defines:p,sources:[df,PR,JM]}),f=new ze({defines:p,sources:[df,PR,KM]});this._spSkyAtmosphere=en.fromCache({context:s,vertexShaderSource:b,fragmentShaderSource:f}),u.shaderProgram=this._spSkyAtmosphere}return u};function YLt(e){return!(L.equalsEpsilon(e.hueShift,0,L.EPSILON7)&&L.equalsEpsilon(e.saturationShift,0,L.EPSILON7)&&L.equalsEpsilon(e.brightnessShift,0,L.EPSILON7))}XR.prototype.isDestroyed=function(){return!1};XR.prototype.destroy=function(){let e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),this._spSkyAtmosphere=this._spSkyAtmosphere&&this._spSkyAtmosphere.destroy(),me(this)};var jM=XR;var _fo=x(T(),1);var pfo=x(T(),1);var kho=x(T(),1),QM=`uniform samplerCube u_cubeMap; in vec3 v_texCoord; void main() { vec4 color = czm_textureCube(u_cubeMap, normalize(v_texCoord)); out_FragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime); } `;var Dho=x(T(),1),qM=`in vec3 position; out vec3 v_texCoord; void main() { vec3 p = czm_viewRotation * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position)); gl_Position = czm_projection * vec4(p, 1.0); v_texCoord = position.xyz; } `;var Bho=x(T(),1),$M=`uniform mat3 u_cubeMapPanoramaTransform; in vec3 position; out vec3 v_texCoord; void main() { vec3 p = czm_viewRotation * (u_cubeMapPanoramaTransform * (czm_entireFrustum.y * position)); gl_Position = czm_projection * vec4(p, 1.0); v_texCoord = position.xyz; } `;function ek(e){this.sources=e.sources,this._sources=void 0,this._transform=e.transform,this.show=e.show??!0,this._returnCommand=e.returnCommand??!1,this._addToPanoramaCommandList=!this._returnCommand,this._command=new ot({modelMatrix:I.clone(I.IDENTITY),owner:this,pass:We.ENVIRONMENT}),this._cubeMap=void 0,this._attributeLocations=void 0,this._useHdr=void 0,this._hasError=!1,this._error=void 0;let t=e.credit;typeof t=="string"&&(t=new At(t)),this._credit=t}Object.defineProperties(ek.prototype,{transform:{get:function(){return this._transform}},credit:{get:function(){return l(this._credit)?this._credit:void 0}}});ek.prototype.update=function(e,t){let n=this,{mode:i,passes:o,context:r,panoramaCommandList:s}=e;if(!this.show||i!==se.SCENE3D&&i!==se.MORPHING||!o.render)return;if(this._hasError){let c=this._error;throw this._hasError=!1,this._error=void 0,c}if(this._sources!==this.sources){this._sources=this.sources;let c=this.sources;typeof c.positiveX=="string"?D2(r,this._sources).then(function(d){n._cubeMap=n._cubeMap&&n._cubeMap.destroy(),n._cubeMap=d}).catch(d=>{this._hasError=!0,this._error=d}):(this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),this._cubeMap=new Jr({context:r,source:c})),this._addToPanoramaCommandList=!0}let a=this._command;if(!l(a.vertexArray)){a.uniformMap={u_cubeMap:function(){return n._cubeMap},u_cubeMapPanoramaTransform:function(){return n._transform}};let c=Cc.createGeometry(Cc.fromDimensions({dimensions:new h(2,2,2),vertexFormat:we.POSITION_ONLY})),d=this._attributeLocations=Bn.createAttributeLocations(c);a.vertexArray=Dn.fromGeometry({context:r,geometry:c,attributeLocations:d,bufferUsage:Ie.STATIC_DRAW}),a.renderState=Oe.fromCache({depthTest:{enabled:!1},depthMask:!1,blending:tn.ALPHA_BLEND}),this._addToPanoramaCommandList=!0}if(!l(a.shaderProgram)||this._useHdr!==t){let c=new ze({defines:[t?"HDR":""],sources:[QM]});a.shaderProgram=en.fromCache({context:r,vertexShaderSource:l(this._transform)?$M:qM,fragmentShaderSource:c,attributeLocations:this._attributeLocations}),this._useHdr=t,this._addToPanoramaCommandList=!0}if(l(this._cubeMap)){if(this.show&&l(this._credit)&&!this._returnCommand&&e.creditDisplay.addCreditToNextFrame(this._credit),this._returnCommand)return a;this._addToPanoramaCommandList&&(s.push(a),this._addToPanoramaCommandList=!1)}};ek.prototype.isDestroyed=function(){return!1};ek.prototype.destroy=function(){let e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),me(this)};var RZ=ek;function GZ(e){this._sources=e.sources,this._show=e.show??!0,this._panorama=new RZ({sources:this._sources,show:this._show,returnCommand:!0})}Object.defineProperties(GZ.prototype,{sources:{get:function(){return this._panorama.sources},set:function(e){this._panorama.sources=e}},show:{get:function(){return this._panorama.show},set:function(e){this._panorama.show=e}}});GZ.prototype.update=function(e,t){let{mode:n,passes:i}=e;if(!(n!==se.SCENE3D&&n!==se.MORPHING)&&i.render)return this._panorama.update(e,t)};GZ.prototype.isDestroyed=function(){return!1};GZ.prototype.destroy=function(){return this._panorama=this._panorama&&this._panorama.destroy(),me(this)};function NR(e){return qt(`Assets/Textures/SkyBox/tycho2t3_80_${e}.jpg`)}GZ.createEarthSkyBox=function(){return new GZ({sources:{positiveX:NR("px"),negativeX:NR("mx"),positiveY:NR("py"),negativeY:NR("my"),positiveZ:NR("pz"),negativeZ:NR("mz")}})};var tk=GZ;var npo=x(T(),1);var Zfo=x(T(),1),nk=`uniform sampler2D u_texture; in vec2 v_textureCoordinates; void main() { vec4 color = texture(u_texture, v_textureCoordinates); out_FragColor = czm_gammaCorrect(color); } `;var Cfo=x(T(),1),ik=`uniform float u_radiusTS; in vec2 v_textureCoordinates; vec2 rotate(vec2 p, vec2 direction) { return vec2(p.x * direction.x - p.y * direction.y, p.x * direction.y + p.y * direction.x); } vec4 addBurst(vec2 position, vec2 direction, float lengthScalar) { vec2 rotatedPosition = rotate(position, direction) * vec2(25.0, 0.75); float radius = length(rotatedPosition) * lengthScalar; float burst = 1.0 - smoothstep(0.0, 0.55, radius); return vec4(burst); } void main() { float lengthScalar = 2.0 / sqrt(2.0); vec2 position = v_textureCoordinates - vec2(0.5); float radius = length(position) * lengthScalar; float surface = step(radius, u_radiusTS); vec4 color = vec4(vec2(1.0), surface + 0.2, surface); float glow = 1.0 - smoothstep(0.0, 0.55, radius); color.ba += mix(vec2(0.0), vec2(1.0), glow) * 0.75; vec4 burst = vec4(0.0); // The following loop has been manually unrolled for speed, to // avoid sin() and cos(). // //for (float i = 0.4; i < 3.2; i += 1.047) { // vec2 direction = vec2(sin(i), cos(i)); // burst += 0.4 * addBurst(position, direction, lengthScalar); // // direction = vec2(sin(i - 0.08), cos(i - 0.08)); // burst += 0.3 * addBurst(position, direction, lengthScalar); //} burst += 0.4 * addBurst(position, vec2(0.38942, 0.92106), lengthScalar); // angle == 0.4 burst += 0.4 * addBurst(position, vec2(0.99235, 0.12348), lengthScalar); // angle == 0.4 + 1.047 burst += 0.4 * addBurst(position, vec2(0.60327, -0.79754), lengthScalar); // angle == 0.4 + 1.047 * 2.0 burst += 0.3 * addBurst(position, vec2(0.31457, 0.94924), lengthScalar); // angle == 0.4 - 0.08 burst += 0.3 * addBurst(position, vec2(0.97931, 0.20239), lengthScalar); // angle == 0.4 + 1.047 - 0.08 burst += 0.3 * addBurst(position, vec2(0.66507, -0.74678), lengthScalar); // angle == 0.4 + 1.047 * 2.0 - 0.08 // End of manual loop unrolling. color += clamp(burst, vec4(0.0), vec4(1.0)) * 0.15; out_FragColor = clamp(color, vec4(0.0), vec4(1.0)); } `;var Gfo=x(T(),1),ok=`in vec2 direction; uniform float u_size; out vec2 v_textureCoordinates; void main() { vec4 position; if (czm_morphTime == 1.0) { position = vec4(czm_sunPositionWC, 1.0); } else { position = vec4(czm_sunPositionColumbusView.zxy, 1.0); } vec4 positionEC = czm_view * position; vec4 positionWC = czm_eyeToWindowCoordinates(positionEC); vec2 halfSize = vec2(u_size * 0.5); halfSize *= ((direction * 2.0) - 1.0); gl_Position = czm_viewportOrthographic * vec4(positionWC.xy + halfSize, -positionWC.z, 1.0); v_textureCoordinates = direction; } `;function sk(){this.show=!0,this._drawCommand=new ot({primitiveType:Fe.TRIANGLES,boundingVolume:new le,owner:this}),this._commands={drawCommand:this._drawCommand,computeCommand:void 0},this._boundingVolume=new le,this._boundingVolume2D=new le,this._texture=void 0,this._drawingBufferWidth=void 0,this._drawingBufferHeight=void 0,this._radiusTS=void 0,this._size=void 0,this.glowFactor=1,this._glowFactorDirty=!1,this._useHdr=void 0;let e=this;this._uniformMap={u_texture:function(){return e._texture},u_size:function(){return e._size}}}Object.defineProperties(sk.prototype,{glowFactor:{get:function(){return this._glowFactor},set:function(e){e=Math.max(e,0),this._glowFactor=e,this._glowFactorDirty=!0}}});var wLt=new M,MLt=new M,kLt=new ce,rk=new ce;sk.prototype.update=function(e,t,n){if(!this.show)return;let i=e.mode;if(i===se.SCENE2D||i===se.MORPHING||!e.passes.render)return;let o=e.context,r=t.viewport.width,s=t.viewport.height;if(!l(this._texture)||r!==this._drawingBufferWidth||s!==this._drawingBufferHeight||this._glowFactorDirty||n!==this._useHdr){this._texture=this._texture&&this._texture.destroy(),this._drawingBufferWidth=r,this._drawingBufferHeight=s,this._glowFactorDirty=!1,this._useHdr=n;let C=Math.max(r,s);C=Math.pow(2,Math.ceil(Math.log(C)/Math.log(2))-2),C=Math.max(1,C);let G=n?o.halfFloatingPointTexture?Me.HALF_FLOAT:Me.FLOAT:Me.UNSIGNED_BYTE;this._texture=new Ct({context:o,width:C,height:C,pixelFormat:Be.RGBA,pixelDatatype:G}),this._glowLengthTS=this._glowFactor*5,this._radiusTS=1/(1+2*this._glowLengthTS)*.5;let E=this,v={u_radiusTS:function(){return E._radiusTS}};this._commands.computeCommand=new Yl({fragmentShaderSource:ik,outputTexture:this._texture,uniformMap:v,persists:!1,owner:this,postExecute:function(){E._commands.computeCommand=void 0}})}let a=this._drawCommand;if(!l(a.vertexArray)){let C={direction:0},G=new Uint8Array(8);G[0]=0,G[1]=0,G[2]=255,G[3]=0,G[4]=255,G[5]=255,G[6]=0,G[7]=255;let E=et.createVertexBuffer({context:o,typedArray:G,usage:Ie.STATIC_DRAW}),v=[{index:C.direction,vertexBuffer:E,componentsPerAttribute:2,normalize:!0,componentDatatype:J.UNSIGNED_BYTE}],F=et.createIndexBuffer({context:o,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Ie.STATIC_DRAW,indexDatatype:De.UNSIGNED_SHORT});a.vertexArray=new Dn({context:o,attributes:v,indexBuffer:F}),a.shaderProgram=en.fromCache({context:o,vertexShaderSource:ok,fragmentShaderSource:nk,attributeLocations:C}),a.renderState=Oe.fromCache({blending:tn.ALPHA_BLEND}),a.uniformMap=this._uniformMap}let c=o.uniformState.sunPositionWC,d=o.uniformState.sunPositionColumbusView,u=this._boundingVolume,m=this._boundingVolume2D;h.clone(c,u.center),m.center.x=d.z,m.center.y=d.x,m.center.z=d.y,u.radius=L.SOLAR_RADIUS+L.SOLAR_RADIUS*this._glowLengthTS,m.radius=u.radius,i===se.SCENE3D?le.clone(u,a.boundingVolume):i===se.COLUMBUS_VIEW&&le.clone(m,a.boundingVolume);let p=co.computeActualEllipsoidPosition(e,c,rk),b=h.magnitude(h.subtract(p,e.camera.position,rk)),f=o.uniformState.projection,y=kLt;y.x=0,y.y=0,y.z=-b,y.w=1;let _=I.multiplyByVector(f,y,rk),S=co.clipToGLWindowCoordinates(t.viewport,_,wLt);y.x=L.SOLAR_RADIUS;let Z=I.multiplyByVector(f,y,rk),V=co.clipToGLWindowCoordinates(t.viewport,Z,MLt);return this._size=M.magnitude(M.subtract(V,S,rk)),this._size=2*this._size*(1+2*this._glowLengthTS),this._size=Math.ceil(this._size),this._commands};sk.prototype.isDestroyed=function(){return!1};sk.prototype.destroy=function(){let e=this._drawCommand;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._texture=this._texture&&this._texture.destroy(),me(this)};var ak=sk;var a0o=x(T(),1);var Dpo=x(T(),1);var ZAe=x(KU(),1);var opo=x(T(),1);function ULt(e,t,n){return` float clipDistance = clip(gl_FragCoord, ${e}, ${t}); vec4 clippingPlanesEdgeColor = vec4(1.0); clippingPlanesEdgeColor.rgb = ${n}.rgb; float clippingPlanesEdgeWidth = ${n}.a; if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth) { out_FragColor = clippingPlanesEdgeColor; } `}var ck=ULt;var apo=x(T(),1);var DLt={modifyFragmentShader:function(t){return t=ze.replaceMain(t,"czm_splitter_main"),t+=`uniform float czm_splitDirection; void main() { #ifndef SHADOW_MAP if (czm_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard; if (czm_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard; #endif czm_splitter_main(); } `,t},addUniforms:function(t,n){n.czm_splitDirection=function(){return t.splitDirection}}},YR=DLt;var AZ={NEEDS_DECODE:0,DECODING:1,READY:2,FAILED:3};function lk(e){this._parsedContent=void 0,this._drawCommand=void 0,this._isTranslucent=!1,this._styleTranslucent=!1,this._constantColor=U.clone(U.DARKGRAY),this._highlightColor=U.clone(U.WHITE),this._pointSize=1,this._rtcCenter=void 0,this._quantizedVolumeScale=void 0,this._quantizedVolumeOffset=void 0,this._styleableShaderAttributes=void 0,this._isQuantized=!1,this._isOctEncoded16P=!1,this._isRGB565=!1,this._hasColors=!1,this._hasNormals=!1,this._hasBatchIds=!1,this._decodingState=AZ.READY,this._dequantizeInShader=!0,this._isQuantizedDraco=!1,this._isOctEncodedDraco=!1,this._quantizedRange=0,this._octEncodedRange=0,this.backFaceCulling=!1,this._backFaceCulling=!1,this.normalShading=!0,this._normalShading=!0,this._opaqueRenderState=void 0,this._translucentRenderState=void 0,this._mode=void 0,this._ready=!1,this._pointsLength=0,this._geometryByteLength=0,this._vertexShaderLoaded=e.vertexShaderLoaded,this._fragmentShaderLoaded=e.fragmentShaderLoaded,this._uniformMapLoaded=e.uniformMapLoaded,this._batchTableLoaded=e.batchTableLoaded,this._pickIdLoaded=e.pickIdLoaded,this._opaquePass=e.opaquePass??We.OPAQUE,this._cull=e.cull??!0,this.style=void 0,this._style=void 0,this.styleDirty=!1,this.modelMatrix=I.clone(I.IDENTITY),this._modelMatrix=I.clone(I.IDENTITY),this.time=0,this.shadows=Fn.ENABLED,this._boundingSphere=void 0,this.clippingPlanes=void 0,this.isClipped=!1,this.clippingPlanesDirty=!1,this.clippingPlanesOriginMatrix=void 0,this.attenuation=!1,this._attenuation=!1,this.geometricError=0,this.geometricErrorScale=1,this.maximumAttenuation=this._pointSize,this.splitDirection=e.splitDirection??Xr.NONE,this._splittingEnabled=!1,this._error=void 0,OLt(this,e)}Object.defineProperties(lk.prototype,{pointsLength:{get:function(){return this._pointsLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}},color:{get:function(){return U.clone(this._highlightColor)},set:function(e){this._highlightColor=U.clone(e,this._highlightColor)}},boundingSphere:{get:function(){if(l(this._drawCommand))return this._drawCommand.boundingVolume},set:function(e){this._boundingSphere=le.clone(e,this._boundingSphere)}}});function OLt(e,t){let n=CS.parse(t.arrayBuffer,t.byteOffset);if(e._parsedContent=n,e._rtcCenter=n.rtcCenter,e._hasNormals=n.hasNormals,e._hasColors=n.hasColors,e._hasBatchIds=n.hasBatchIds,e._isTranslucent=n.isTranslucent,!n.hasBatchIds&&l(n.batchTableBinary)&&(n.styleableProperties=ff.getBinaryProperties(n.pointsLength,n.batchTableJson,n.batchTableBinary)),l(n.draco)){let a=n.draco;e._decodingState=AZ.NEEDS_DECODE,a.dequantizeInShader=e._dequantizeInShader}let i=n.positions;l(i)&&(e._isQuantized=i.isQuantized,e._quantizedVolumeScale=i.quantizedVolumeScale,e._quantizedVolumeOffset=i.quantizedVolumeOffset,e._quantizedRange=i.quantizedRange);let o=n.normals;l(o)&&(e._isOctEncoded16P=o.octEncoded);let r=n.colors;l(r)&&(l(r.constantColor)&&(e._constantColor=U.clone(r.constantColor,e._constantColor),e._hasColors=!1),e._isRGB565=r.isRGB565);let s=n.batchIds;l(n.batchIds)&&(s.name="BATCH_ID",s.semantic="BATCH_ID",s.setIndex=void 0),n.hasBatchIds&&e._batchTableLoaded(n.batchLength,n.batchTableJson,n.batchTableBinary),e._pointsLength=n.pointsLength}var BLt=new h,zLt=new h,HLt=new h,_Ae,q3;function KLt(e){if(!l(q3)){_Ae=new ZAe.default(0),q3=new Array(e);for(let t=0;t<e;++t)q3[t]=_Ae.random()}return q3}function JLt(e){let n=e.length/3,i=Math.min(n,20),o=KLt(20),r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=h.fromElements(r,r,r,BLt),c=h.fromElements(s,s,s,zLt);for(let u=0;u<i;++u){let m=Math.floor(o[u]*n),p=h.unpack(e,m*3,HLt);h.minimumByComponent(a,p,a),h.maximumByComponent(c,p,c)}let d=le.fromCornerPoints(a,c);return d.radius+=L.EPSILON2,d}function SAe(e,t){let n=J.fromTypedArray(e);return n===J.INT||n===J.UNSIGNED_INT||n===J.DOUBLE?(gt("Cast pnts property to floats",`Point cloud property "${t}" will be cast to a float array because INT, UNSIGNED_INT, and DOUBLE are not valid WebGL vertex attribute types. Some precision may be lost.`),new Float32Array(e)):e}var jLt=new ce,QLt=new ce,qLt=new U,VAe=0,$3=1,rne=2,CAe=3,$Lt=4,tne=new I,eWt=new I;function tWt(e,t){let n=t.context,i=e._parsedContent,o=e._pointsLength,r=i.positions,s=i.colors,a=i.normals,c=i.batchIds,d=i.styleableProperties,u=l(d),m=e._isQuantized,p=e._isQuantizedDraco,b=e._isOctEncoded16P,f=e._isOctEncodedDraco,y=e._quantizedRange,_=e._octEncodedRange,S=e._isRGB565,Z=e._isTranslucent,V=e._hasColors,C=e._hasNormals,G=e._hasBatchIds,E,v,F=[],P={};if(e._styleableShaderAttributes=P,u){let k=$Lt;for(let O in d)if(d.hasOwnProperty(O)){let w=d[O],z=SAe(w.typedArray,O);E=w.componentCount,v=J.fromTypedArray(z);let H=et.createVertexBuffer({context:n,typedArray:z,usage:Ie.STATIC_DRAW});e._geometryByteLength+=H.sizeInBytes;let te={index:k,vertexBuffer:H,componentsPerAttribute:E,componentDatatype:v,normalize:!1,offsetInBytes:0,strideInBytes:0};F.push(te),P[O]={location:k,componentCount:E},++k}}let N=et.createVertexBuffer({context:n,typedArray:r.typedArray,usage:Ie.STATIC_DRAW});e._geometryByteLength+=N.sizeInBytes;let g;V&&(g=et.createVertexBuffer({context:n,typedArray:s.typedArray,usage:Ie.STATIC_DRAW}),e._geometryByteLength+=g.sizeInBytes);let R;C&&(R=et.createVertexBuffer({context:n,typedArray:a.typedArray,usage:Ie.STATIC_DRAW}),e._geometryByteLength+=R.sizeInBytes);let A;G&&(c.typedArray=SAe(c.typedArray,"batchIds"),A=et.createVertexBuffer({context:n,typedArray:c.typedArray,usage:Ie.STATIC_DRAW}),e._geometryByteLength+=A.sizeInBytes);let W=[];if(m?v=J.UNSIGNED_SHORT:p?v=y<=255?J.UNSIGNED_BYTE:J.UNSIGNED_SHORT:v=J.FLOAT,W.push({index:VAe,vertexBuffer:N,componentsPerAttribute:3,componentDatatype:v,normalize:!1,offsetInBytes:0,strideInBytes:0}),e._cull&&(m||p?e._boundingSphere=le.fromCornerPoints(h.ZERO,e._quantizedVolumeScale):e._boundingSphere=JLt(r.typedArray)),V)if(S)W.push({index:$3,vertexBuffer:g,componentsPerAttribute:1,componentDatatype:J.UNSIGNED_SHORT,normalize:!1,offsetInBytes:0,strideInBytes:0});else{let k=Z?4:3;W.push({index:$3,vertexBuffer:g,componentsPerAttribute:k,componentDatatype:J.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0})}C&&(b?(E=2,v=J.UNSIGNED_BYTE):f?(E=2,v=_<=255?J.UNSIGNED_BYTE:J.UNSIGNED_SHORT):(E=3,v=J.FLOAT),W.push({index:rne,vertexBuffer:R,componentsPerAttribute:E,componentDatatype:v,normalize:!1,offsetInBytes:0,strideInBytes:0})),G&&W.push({index:CAe,vertexBuffer:A,componentsPerAttribute:1,componentDatatype:J.fromTypedArray(c.typedArray),normalize:!1,offsetInBytes:0,strideInBytes:0}),u&&(W=W.concat(F));let X=new Dn({context:n,attributes:W}),Y={depthTest:{enabled:!0}},D={depthTest:{enabled:!0},depthMask:!1,blending:tn.ALPHA_BLEND};e._opaquePass===We.CESIUM_3D_TILE&&(Y.stencilTest=Kt.setCesium3DTileBit(),Y.stencilMask=Kt.CESIUM_3D_TILE_MASK,D.stencilTest=Kt.setCesium3DTileBit(),D.stencilMask=Kt.CESIUM_3D_TILE_MASK),e._opaqueRenderState=Oe.fromCache(Y),e._translucentRenderState=Oe.fromCache(D),e._drawCommand=new ot({boundingVolume:new le,cull:e._cull,modelMatrix:new I,primitiveType:Fe.POINTS,vertexArray:X,count:o,shaderProgram:void 0,uniformMap:void 0,renderState:Z?e._translucentRenderState:e._opaqueRenderState,pass:Z?We.TRANSLUCENT:e._opaquePass,owner:e,castShadows:!1,receiveShadows:!1,pickId:e._pickIdLoaded()})}function nWt(e,t){let n=t.context,i=e._isQuantized,o=e._isQuantizedDraco,r=e._isOctEncodedDraco,s={u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier:function(){let a=jLt;if(a.x=e._attenuation?e.maximumAttenuation:e._pointSize,a.x*=t.pixelRatio,a.y=e.time,e._attenuation){let c=t.camera.frustum,d;t.mode===se.SCENE2D||c instanceof bn?d=Number.POSITIVE_INFINITY:d=n.drawingBufferHeight/t.camera.frustum.sseDenominator,a.z=e.geometricError*e.geometricErrorScale,a.w=d}return a},u_highlightColor:function(){return e._highlightColor},u_constantColor:function(){return e._constantColor},u_clippingPlanes:function(){let a=e.clippingPlanes;return e.isClipped?a.texture:n.defaultTexture},u_clippingPlanesEdgeStyle:function(){let a=e.clippingPlanes;if(!l(a))return U.TRANSPARENT;let c=U.clone(a.edgeColor,qLt);return c.alpha=a.edgeWidth,c},u_clippingPlanesMatrix:function(){let a=e.clippingPlanes;if(!l(a))return I.IDENTITY;let c=e.clippingPlanesOriginMatrix??e._modelMatrix;I.multiply(n.uniformState.view3D,c,tne);let d=I.multiply(tne,a.modelMatrix,tne);return I.inverseTranspose(d,eWt)}};YR.addUniforms(e,s),(i||o||r)&&(s=It(s,{u_quantizedVolumeScaleAndOctEncodedRange:function(){let a=QLt;if(l(e._quantizedVolumeScale)){let c=h.clone(e._quantizedVolumeScale,a);h.divideByScalar(c,e._quantizedRange,a)}return a.w=e._octEncodedRange,a}})),l(e._uniformMapLoaded)&&(s=e._uniformMapLoaded(s)),e._drawCommand.uniformMap=s}function nne(e,t){let n=/czm_3dtiles_property_(\d+)/g,i=n.exec(e);for(;i!==null;){let o=parseInt(i[1]);t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function ine(e,t){e=e.slice(e.indexOf(` `));let n=/czm_3dtiles_builtin_property_(\w+)/g,i=n.exec(e);for(;i!==null;){let o=i[1];t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function one(e,t){let n=e.numberOfAttributes;for(let i=0;i<n;++i){let o=e.getAttribute(i);if(o.index===t)return o}}var iWt={POSITION:"czm_3dtiles_builtin_property_POSITION",POSITION_ABSOLUTE:"czm_3dtiles_builtin_property_POSITION_ABSOLUTE",COLOR:"czm_3dtiles_builtin_property_COLOR",NORMAL:"czm_3dtiles_builtin_property_NORMAL"};function oWt(e,t,n){let i,o,r,s=t.context,a=l(n),c=e._isQuantized,d=e._isQuantizedDraco,u=e._isOctEncoded16P,m=e._isOctEncodedDraco,p=e._isRGB565,b=e._isTranslucent,f=e._hasColors,y=e._hasNormals,_=e._hasBatchIds,S=e._backFaceCulling,Z=e._normalShading,V=e._drawCommand.vertexArray,C=e.clippingPlanes,G=e._attenuation,E,v,F,P=b,N=Je(iWt),g={},R=e._styleableShaderAttributes;for(o in R)R.hasOwnProperty(o)&&(r=R[o],N[o]=`czm_3dtiles_property_${r.location}`,g[r.location]=r);if(a){let ue={translucent:!1},Ce="(vec3 czm_3dtiles_builtin_property_POSITION, vec3 czm_3dtiles_builtin_property_POSITION_ABSOLUTE, vec4 czm_3dtiles_builtin_property_COLOR, vec3 czm_3dtiles_builtin_property_NORMAL)";E=n.getColorShaderFunction(`getColorFromStyle${Ce}`,N,ue),v=n.getShowShaderFunction(`getShowFromStyle${Ce}`,N,ue),F=n.getPointSizeShaderFunction(`getPointSizeFromStyle${Ce}`,N,ue),l(E)&&ue.translucent&&(P=!0)}e._styleTranslucent=P;let A=l(E),W=l(v),X=l(F),Y=e.isClipped,D=[],k=[];A&&(nne(E,D),ine(E,k)),W&&(nne(v,D),ine(v,k)),X&&(nne(F,D),ine(F,k));let O=k.indexOf("COLOR")>=0,w=k.indexOf("NORMAL")>=0;if(w&&!y)throw new ae("Style references the NORMAL semantic but the point cloud does not have normals");for(o in R)if(R.hasOwnProperty(o)){r=R[o];let ue=D.indexOf(r.location)>=0,Ce=one(V,r.location);Ce.enabled=ue}let z=f&&(!A||O);if(f){let ue=one(V,$3);ue.enabled=z}let H=y&&(Z||S||w);if(y){let ue=one(V,rne);ue.enabled=H}let te={a_position:VAe};z&&(te.a_color=$3),H&&(te.a_normal=rne),_&&(te.a_batchId=CAe);let K="",$=D.length;for(i=0;i<$;++i){let ue=D[i];r=g[ue];let Ce=r.componentCount,Te=`czm_3dtiles_property_${ue}`,Re;Ce===1?Re="float":Re=`vec${Ce}`,K+=`in ${Re} ${Te}; `,te[Te]=r.location}nWt(e,t);let ee=`in vec3 a_position; out vec4 v_color; uniform vec4 u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier; uniform vec4 u_constantColor; uniform vec4 u_highlightColor; `;ee+=`float u_pointSize; float tiles3d_tileset_time; `,G&&(ee+=`float u_geometricError; float u_depthMultiplier; `),ee+=K,z&&(b?ee+=`in vec4 a_color; `:p?ee+=`in float a_color; const float SHIFT_RIGHT_11 = 1.0 / 2048.0; const float SHIFT_RIGHT_5 = 1.0 / 32.0; const float SHIFT_LEFT_11 = 2048.0; const float SHIFT_LEFT_5 = 32.0; const float NORMALIZE_6 = 1.0 / 64.0; const float NORMALIZE_5 = 1.0 / 32.0; `:ee+=`in vec3 a_color; `),H&&(u||m?ee+=`in vec2 a_normal; `:ee+=`in vec3 a_normal; `),_&&(ee+=`in float a_batchId; `),(c||d||m)&&(ee+=`uniform vec4 u_quantizedVolumeScaleAndOctEncodedRange; `),A&&(ee+=E),W&&(ee+=v),X&&(ee+=F),ee+=`void main() { u_pointSize = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.x; tiles3d_tileset_time = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.y; `,G&&(ee+=` u_geometricError = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.z; u_depthMultiplier = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.w; `),z?b?ee+=` vec4 color = a_color; `:p?ee+=` float compressed = a_color; float r = floor(compressed * SHIFT_RIGHT_11); compressed -= r * SHIFT_LEFT_11; float g = floor(compressed * SHIFT_RIGHT_5); compressed -= g * SHIFT_LEFT_5; float b = compressed; vec3 rgb = vec3(r * NORMALIZE_5, g * NORMALIZE_6, b * NORMALIZE_5); vec4 color = vec4(rgb, 1.0); `:ee+=` vec4 color = vec4(a_color, 1.0); `:ee+=` vec4 color = u_constantColor; `,c||d?ee+=` vec3 position = a_position * u_quantizedVolumeScaleAndOctEncodedRange.xyz; `:ee+=` vec3 position = a_position; `,ee+=` vec3 position_absolute = vec3(czm_model * vec4(position, 1.0)); `,H?(u?ee+=` vec3 normal = czm_octDecode(a_normal); `:m?ee+=` vec3 normal = czm_octDecode(a_normal, u_quantizedVolumeScaleAndOctEncodedRange.w).zxy; `:ee+=` vec3 normal = a_normal; `,ee+=` vec3 normalEC = czm_normal * normal; `):ee+=` vec3 normal = vec3(1.0); `,A&&(ee+=` color = getColorFromStyle(position, position_absolute, color, normal); `),W&&(ee+=` float show = float(getShowFromStyle(position, position_absolute, color, normal)); `),X?ee+=` gl_PointSize = getPointSizeFromStyle(position, position_absolute, color, normal) * czm_pixelRatio; `:G?ee+=` vec4 positionEC = czm_modelView * vec4(position, 1.0); float depth = -positionEC.z; gl_PointSize = min((u_geometricError / depth) * u_depthMultiplier, u_pointSize); `:ee+=` gl_PointSize = u_pointSize; `,ee+=` color = color * u_highlightColor; `,H&&Z&&(ee+=` float diffuseStrength = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC); diffuseStrength = max(diffuseStrength, 0.4); color.xyz *= diffuseStrength * czm_lightColor; `),ee+=` v_color = color; gl_Position = czm_modelViewProjection * vec4(position, 1.0); `,H&&S&&(ee+=` float visible = step(-normalEC.z, 0.0); gl_Position *= visible; gl_PointSize *= visible; `),W&&(ee+=` gl_Position.w *= float(show); gl_PointSize *= float(show); `),ee+=`} `;let de=`in vec4 v_color; `;Y&&(de+=`uniform highp sampler2D u_clippingPlanes; uniform mat4 u_clippingPlanesMatrix; uniform vec4 u_clippingPlanesEdgeStyle; `,de+=` `,de+=qS(C,s),de+=` `),de+=`void main() { out_FragColor = czm_gammaCorrect(v_color); `,Y&&(de+=ck("u_clippingPlanes","u_clippingPlanesMatrix","u_clippingPlanesEdgeStyle")),de+=`} `,e.splitDirection!==Xr.NONE&&(de=YR.modifyFragmentShader(de)),l(e._vertexShaderLoaded)&&(ee=e._vertexShaderLoaded(ee)),l(e._fragmentShaderLoaded)&&(de=e._fragmentShaderLoaded(de));let _e=e._drawCommand;l(_e.shaderProgram)&&_e.shaderProgram.destroy(),_e.shaderProgram=en.fromCache({context:s,vertexShaderSource:ee,fragmentShaderSource:de,attributeLocations:te});try{_e.shaderProgram._bind()}catch{throw new ae("Error generating style shader: this may be caused by a type mismatch, index out-of-bounds, or other syntax error.")}}function rWt(e,t){if(e._decodingState===AZ.READY)return!1;if(e._decodingState===AZ.NEEDS_DECODE){let n=e._parsedContent,i=n.draco,o=M0.decodePointCloud(i,t);l(o)&&(e._decodingState=AZ.DECODING,o.then(function(r){e._decodingState=AZ.READY;let s=l(r.POSITION)?r.POSITION.array:void 0,a=l(r.RGB)?r.RGB.array:void 0,c=l(r.RGBA)?r.RGBA.array:void 0,d=l(r.NORMAL)?r.NORMAL.array:void 0,u=l(r.BATCH_ID)?r.BATCH_ID.array:void 0,m=l(s)&&l(r.POSITION.data.quantization),p=l(d)&&l(r.NORMAL.data.quantization);if(m){let _=r.POSITION.data.quantization,S=_.range;e._quantizedVolumeScale=h.fromElements(S,S,S),e._quantizedVolumeOffset=h.unpack(_.minValues),e._quantizedRange=(1<<_.quantizationBits)-1,e._isQuantizedDraco=!0}p&&(e._octEncodedRange=(1<<r.NORMAL.data.quantization.quantizationBits)-1,e._isOctEncodedDraco=!0);let b=n.styleableProperties,f=i.batchTableProperties;for(let _ in f)if(f.hasOwnProperty(_)){let S=r[_];l(b)||(b={}),b[_]={typedArray:S.array,componentCount:S.data.componentsPerAttribute}}l(s)&&(n.positions={typedArray:s});let y=c??a;l(y)&&(n.colors={typedArray:y}),l(d)&&(n.normals={typedArray:d}),l(u)&&(n.batchIds={typedArray:u}),n.styleableProperties=b}).catch(function(r){e._decodingState=AZ.FAILED,e._error=r}))}return!0}var sWt=new ce,aWt=new h;lk.prototype.update=function(e){let t=e.context;if(l(this._error)){let d=this._error;throw this._error=void 0,d}if(rWt(this,t))return;let i=!1,o=!I.equals(this._modelMatrix,this.modelMatrix);if(this._mode!==e.mode&&(this._mode=e.mode,o=!0),l(this._drawCommand)||(tWt(this,e),o=!0,i=!0,this._ready=!0,this._parsedContent=void 0),o){I.clone(this.modelMatrix,this._modelMatrix);let d=this._drawCommand.modelMatrix;if(I.clone(this._modelMatrix,d),l(this._rtcCenter)&&I.multiplyByTranslation(d,this._rtcCenter,d),l(this._quantizedVolumeOffset)&&I.multiplyByTranslation(d,this._quantizedVolumeOffset,d),e.mode!==se.SCENE3D){let m=e.mapProjection,p=I.getColumn(d,3,sWt);ce.equals(p,ce.UNIT_W)||bt.basisTo2D(m,d,d)}let u=this._drawCommand.boundingVolume;if(le.clone(this._boundingSphere,u),this._cull){let m=u.center;I.multiplyByPoint(d,m,m);let p=I.getScale(d,aWt);u.radius*=h.maximumComponent(p)}}this.clippingPlanesDirty&&(this.clippingPlanesDirty=!1,i=!0),this._attenuation!==this.attenuation&&(this._attenuation=this.attenuation,i=!0),this.backFaceCulling!==this._backFaceCulling&&(this._backFaceCulling=this.backFaceCulling,i=!0),this.normalShading!==this._normalShading&&(this._normalShading=this.normalShading,i=!0),(this._style!==this.style||this.styleDirty)&&(this._style=this.style,this.styleDirty=!1,i=!0);let r=this.splitDirection!==Xr.NONE;this._splittingEnabled!==r&&(this._splittingEnabled=r,i=!0),i&&oWt(this,e,this._style),this._drawCommand.castShadows=Fn.castShadows(this.shadows),this._drawCommand.receiveShadows=Fn.receiveShadows(this.shadows);let s=this._highlightColor.alpha<1||this._constantColor.alpha<1||this._styleTranslucent;this._drawCommand.renderState=s?this._translucentRenderState:this._opaqueRenderState,this._drawCommand.pass=s?We.TRANSLUCENT:this._opaquePass;let a=e.commandList,c=e.passes;(c.render||c.pick)&&a.push(this._drawCommand)};lk.prototype.isDestroyed=function(){return!1};lk.prototype.destroy=function(){let e=this._drawCommand;return l(e)&&(e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy()),me(this)};var dk=lk;function LZ(e){e=e??B.EMPTY_OBJECT,this.show=e.show??!0,this.modelMatrix=I.clone(e.modelMatrix??I.IDENTITY),this.shadows=e.shadows??Fn.ENABLED,this.maximumMemoryUsage=e.maximumMemoryUsage??256,this.shading=new kp(e.shading),this.style=e.style,this.frameFailed=new Se,this.frameChanged=new Se,this._clock=e.clock,this._intervals=e.intervals,this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,this._pointCloudEyeDomeLighting=new wb,this._loadTimestamp=void 0,this._clippingPlanesState=0,this._styleDirty=!1,this._pickId=void 0,this._totalMemoryUsageInBytes=0,this._frames=[],this._previousInterval=void 0,this._nextInterval=void 0,this._lastRenderedFrame=void 0,this._clockMultiplier=0,this._runningSum=0,this._runningLength=0,this._runningIndex=0,this._runningSamples=new Array(5).fill(0),this._runningAverage=0}Object.defineProperties(LZ.prototype,{clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){gs.setOwner(e,this,"_clippingPlanes")}},totalMemoryUsageInBytes:{get:function(){return this._totalMemoryUsageInBytes}},boundingSphere:{get:function(){if(l(this._lastRenderedFrame))return this._lastRenderedFrame.pointCloud.boundingSphere}}});function cWt(e){return`uniform vec4 czm_pickColor; ${e}`}function lWt(e){return function(t){return It(t,{czm_pickColor:function(){return e._pickId.color}})}}function dWt(){return"czm_pickColor"}LZ.prototype.makeStyleDirty=function(){this._styleDirty=!0};LZ.prototype._getAverageLoadTime=function(){return this._runningLength===0?.05:this._runningAverage};var uWt=new Q;function ane(e){let t=e._clock,n=t.canAnimate&&t.shouldAnimate,i=t.multiplier;return n?i:0}function EZ(e,t){return e._intervals.indexOf(t.start)}function mWt(e,t){let n=e._intervals,i=e._clock,o=ane(e);if(o===0)return;let r=e._getAverageLoadTime(),s=Q.addSeconds(i.currentTime,r*o,uWt),a=n.indexOf(s),c=EZ(e,t);return a===c&&(o>=0?++a:--a),n.get(a)}function hWt(e){let t=e._intervals,i=e._clock.currentTime,o=t.indexOf(i);return t.get(o)}function fWt(e,t,n){let i=ane(e),o=EZ(e,t),r=EZ(e,n);return i>=0?o>=r:o<=r}function GAe(e,t){return function(n){let i=l(n.message)?n.message:n.toString();e.frameFailed.numberOfListeners>0?e.frameFailed.raiseEvent({uri:t,message:i}):(console.log(`A frame failed to load: ${t}`),console.log(`Error: ${i}`))}}function pWt(e,t,n){let i=EZ(e,t),o=e._frames,r=o[i];if(!l(r)){let s=t.data.transform,a=l(s)?I.fromArray(s):void 0,c=t.data.uri;r={pointCloud:void 0,transform:a,timestamp:Tn(),sequential:!0,ready:!1,touchedFrameNumber:n.frameNumber,uri:c},o[i]=r,ve.fetchArrayBuffer({url:c}).then(function(d){r.pointCloud=new dk({arrayBuffer:d,cull:!0,fragmentShaderLoaded:cWt,uniformMapLoaded:lWt(e),pickIdLoaded:dWt})}).catch(GAe(e,c))}return r}function bWt(e,t){e._runningSum+=t,e._runningSum-=e._runningSamples[e._runningIndex],e._runningSamples[e._runningIndex]=t,e._runningLength=Math.min(e._runningLength+1,e._runningSamples.length),e._runningIndex=(e._runningIndex+1)%e._runningSamples.length,e._runningAverage=e._runningSum/e._runningLength}function gWt(e,t,n,i){t.touchedFrameNumber<i.frameNumber-1&&(t.sequential=!1);let o=t.pointCloud;if(l(o)&&!t.ready){let r=i.commandList,s=r.length;if(AAe(e,t,n,i),o.ready&&(t.ready=!0,e._totalMemoryUsageInBytes+=o.geometryByteLength,r.length=s,t.sequential)){let a=(Tn()-t.timestamp)/1e3;bWt(e,a)}}t.touchedFrameNumber=i.frameNumber}var yWt=new I;function xWt(e,t){let n=e.shading;return l(n)&&l(n.baseResolution)?n.baseResolution:l(t.boundingSphere)?L.cbrt(t.boundingSphere.volume()/t.pointsLength):0}function TWt(e){let t=e.shading;return l(t)&&l(t.maximumAttenuation)?t.maximumAttenuation:10}var _Wt=new kp;function AAe(e,t,n,i){let o=e.shading??_Wt,r=t.pointCloud,s=t.transform??I.IDENTITY;r.modelMatrix=I.multiplyTransformation(e.modelMatrix,s,yWt),r.style=e.style,r.time=n.timeSinceLoad,r.shadows=e.shadows,r.clippingPlanes=e._clippingPlanes,r.isClipped=n.isClipped,r.attenuation=o.attenuation,r.backFaceCulling=o.backFaceCulling,r.normalShading=o.normalShading,r.geometricError=xWt(e,r),r.geometricErrorScale=o.geometricErrorScale,r.maximumAttenuation=TWt(e);try{r.update(i)}catch(a){GAe(e,t.uri)(a)}t.touchedFrameNumber=i.frameNumber}function sne(e,t,n,i){let o=pWt(e,t,i);gWt(e,o,n,i)}function SWt(e){return function(t){return t.touchedFrameNumber<e.frameNumber}}function EAe(e,t){let n=e._frames,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(l(r)&&(!l(t)||t(r))){let s=r.pointCloud;r.ready&&(e._totalMemoryUsageInBytes-=s.geometryByteLength),l(s)&&s.destroy(),r===e._lastRenderedFrame&&(e._lastRenderedFrame=void 0),n[o]=void 0}}}function ZWt(e,t){let n=EZ(e,t),i=e._frames[n];if(l(i)&&i.ready)return i}function RAe(e,t,n,i,o){return l(n)?n.ready?!0:(sne(e,t,i,o),n.ready):!1}function VWt(e,t,n,i,o){let r,s,a,c=e._intervals,d=e._frames,u=EZ(e,n),m=EZ(e,t);if(u>=m){for(r=u;r>=m;--r)if(s=c.get(r),a=d[r],RAe(e,s,a,i,o))return s}else for(r=u;r<=m;++r)if(s=c.get(r),a=d[r],RAe(e,s,a,i,o))return s;return t}function CWt(e,t,n){let i=e._frames,o=i.length;for(let r=0;r<o;++r){let s=i[r];l(s)&&l(s.pointCloud)&&(s.pointCloud.clippingPlanesDirty=t,s.pointCloud.styleDirty=n)}}var wR={timeSinceLoad:0,isClipped:!1,clippingPlanesDirty:!1};LZ.prototype.update=function(e){if(e.mode===se.MORPHING||!this.show)return;l(this._pickId)||(this._pickId=e.context.createPickId({primitive:this})),l(this._loadTimestamp)||(this._loadTimestamp=Q.clone(e.time));let t=Math.max(Q.secondsDifference(e.time,this._loadTimestamp)*1e3,0),n=this._clippingPlanes,i=0,o=!1,r=l(n)&&n.enabled;r&&(n.update(e),i=n.clippingPlanesState),this._clippingPlanesState!==i&&(this._clippingPlanesState=i,o=!0);let s=this._styleDirty;this._styleDirty=!1,(o||s)&&CWt(this,o,s),wR.timeSinceLoad=t,wR.isClipped=r;let a=this.shading,c=this._pointCloudEyeDomeLighting,d=e.commandList,u=d.length,m=this._previousInterval,p=this._nextInterval,b=hWt(this);if(!l(b))return;let f=!1,y=ane(this),_=y===0;y!==this._clockMultiplier&&(f=!0,this._clockMultiplier=y),(!l(m)||_)&&(m=b),(!l(p)||f||fWt(this,b,p))&&(p=mWt(this,b)),m=VWt(this,m,b,wR,e);let S=ZWt(this,m);l(S)||(sne(this,m,wR,e),S=this._lastRenderedFrame),l(S)&&AAe(this,S,wR,e),l(p)&&sne(this,p,wR,e);let Z=this;l(S)&&!l(this._lastRenderedFrame)&&e.afterRender.push(function(){return!0}),l(S)&&S!==this._lastRenderedFrame&&Z.frameChanged.numberOfListeners>0&&e.afterRender.push(function(){return Z.frameChanged.raiseEvent(Z),!0}),this._previousInterval=m,this._nextInterval=p,this._lastRenderedFrame=S;let V=this._totalMemoryUsageInBytes,C=this.maximumMemoryUsage*1024*1024;V>C&&EAe(this,SWt(e));let E=d.length-u;l(a)&&a.attenuation&&a.eyeDomeLighting&&E>0&&c.update(e,u,a,this.boundingSphere)};LZ.prototype.isDestroyed=function(){return!1};LZ.prototype.destroy=function(){return EAe(this),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),me(this)};var MR=LZ;function vAe(e,t){if(l(t)){let n=t.clock;l(n)&&n.getValue(e)}}function RWt(e){e._renderLoopRunning=!0;let t=0;function n(i){if(!e.isDestroyed())if(e._useDefaultRenderLoop)try{let o=e._targetFrameRate;if(!l(o))e.resize(),e.render(),requestAnimationFrame(n);else{let r=1e3/o,s=i-t;s>r&&(e.resize(),e.render(),t=i-s%r),requestAnimationFrame(n)}}catch(o){e._useDefaultRenderLoop=!1,e._renderLoopRunning=!1,e._showRenderLoopErrors&&e.showErrorPanel("An error occurred while rendering. Rendering has stopped.",void 0,o)}else e._renderLoopRunning=!1}requestAnimationFrame(n)}function FAe(e){let t=e._useBrowserRecommendedResolution?1:window.devicePixelRatio;return t*=e._resolutionScale,l(e._scene)&&(e._scene.pixelRatio=t),t}function IAe(e){let t=e._canvas,n=t.clientWidth,i=t.clientHeight,o=FAe(e);e._canvasClientWidth=n,e._canvasClientHeight=i,n*=o,i*=o,t.width=n,t.height=i,e._canRender=n!==0&&i!==0,e._lastDevicePixelRatio=window.devicePixelRatio}function PAe(e){let t=e._canvas,n=t.width,i=t.height;if(n!==0&&i!==0){let o=e._scene.camera.frustum;l(o.aspectRatio)?o.aspectRatio=n/i:(o.top=o.right*(i/n),o.bottom=-o.top)}}function wo(e,t){e=wn(e),t=t??B.EMPTY_OBJECT;let n=document.createElement("div");n.className="cesium-widget",e.appendChild(n);let i=document.createElement("canvas"),o=hn.supportsImageRenderingPixelated();this._supportsImageRenderingPixelated=o,o&&(i.style.imageRendering=hn.imageRenderingValue()),i.oncontextmenu=function(){return!1},i.onselectstart=function(){return!1};function r(){i!==i.ownerDocument.activeElement&&i.ownerDocument.activeElement.blur()}(t.blurActiveElementOnCanvasFocus??!0)&&(i.addEventListener("mousedown",r),i.addEventListener("pointerdown",r)),n.appendChild(i);let a=document.createElement("div");a.className="cesium-widget-credits";let c=l(t.creditContainer)?wn(t.creditContainer):n;c.appendChild(a);let d=l(t.creditViewport)?wn(t.creditViewport):n,u=t.showRenderLoopErrors??!0,m=t.useBrowserRecommendedResolution??!0;this._element=n,this._container=e,this._canvas=i,this._canvasClientWidth=0,this._canvasClientHeight=0,this._lastDevicePixelRatio=0,this._creditViewport=d,this._creditContainer=c,this._innerCreditContainer=a,this._canRender=!1,this._renderLoopRunning=!1,this._showRenderLoopErrors=u,this._resolutionScale=1,this._useBrowserRecommendedResolution=m,this._forceResize=!1,this._entityView=void 0,this._clockTrackedDataSource=void 0,this._trackedEntity=void 0,this._needTrackedEntityUpdate=!1,this._zoomIsFlight=!1,this._zoomTarget=void 0,this._zoomPromise=void 0,this._zoomOptions=void 0,this._trackedEntityChanged=new Se,this._allowDataSourcesToSuspendAnimation=!0,this._clock=l(t.clock)?t.clock:new Xh,l(t.shouldAnimate)&&(this._clock.shouldAnimate=t.shouldAnimate),IAe(this);try{let p=t.ellipsoid??ie.default,b=new HM({canvas:i,contextOptions:t.contextOptions,creditContainer:a,creditViewport:d,ellipsoid:p,mapProjection:t.mapProjection,orderIndependentTranslucency:t.orderIndependentTranslucency,scene3DOnly:t.scene3DOnly??!1,shadows:t.shadows,mapMode2D:t.mapMode2D,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange,depthPlaneEllipsoidOffset:t.depthPlaneEllipsoidOffset,msaaSamples:t.msaaSamples});this._scene=b,b.camera.constrainedAxis=h.UNIT_Z,FAe(this),PAe(this);let f=t.globe;l(f)||(f=new OY(p)),f!==!1&&(b.globe=f,b.globe.shadows=t.terrainShadows??Fn.RECEIVE_ONLY);let y=t.skyBox;!l(y)&&ie.WGS84.equals(p)&&(y=tk.createEarthSkyBox()),y!==!1&&(b.skyBox=y,b.sun=new ak,ie.WGS84.equals(p)&&(b.moon=new HY));let _=t.skyAtmosphere;!l(_)&&ie.WGS84.equals(p)&&(_=new jM(p),_.show=t.globe!==!1&&f.show),_!==!1&&(b.skyAtmosphere=_);let S=t.baseLayer;t.globe!==!1&&S!==!1&&(l(S)||(S=Ts.fromWorldImagery()),b.imageryLayers.add(S)),l(t.terrainProvider)&&t.globe!==!1&&(b.terrainProvider=t.terrainProvider),l(t.terrain)&&t.globe!==!1&&b.setTerrain(t.terrain),this._screenSpaceEventHandler=new Hs(i),l(t.sceneMode)&&(t.sceneMode===se.SCENE2D&&this._scene.morphTo2D(0),t.sceneMode===se.COLUMBUS_VIEW&&this._scene.morphToColumbusView(0)),this._useDefaultRenderLoop=void 0,this.useDefaultRenderLoop=t.useDefaultRenderLoop??!0,this._targetFrameRate=void 0,this.targetFrameRate=t.targetFrameRate;let Z=this;this._onRenderError=function(F,P){Z._useDefaultRenderLoop=!1,Z._renderLoopRunning=!1,Z._showRenderLoopErrors&&Z.showErrorPanel("An error occurred while rendering. Rendering has stopped.",void 0,P)},b.renderError.addEventListener(this._onRenderError);let V=t.dataSources,C=!1;l(V)||(V=new O2,C=!0);let G=new GY({scene:b,dataSourceCollection:V}),E=new Ir;this._dataSourceChangedListeners={},this._automaticallyTrackDataSourceClocks=t.automaticallyTrackDataSourceClocks??!0,this._dataSourceCollection=V,this._destroyDataSourceCollection=C,this._dataSourceDisplay=G,this._eventHelper=E,this._canAnimateUpdateCallback=this._updateCanAnimate,E.add(this._clock.onTick,wo.prototype._onTick,this),E.add(b.morphStart,wo.prototype._clearTrackedObject,this),E.add(V.dataSourceAdded,wo.prototype._onDataSourceAdded,this),E.add(V.dataSourceRemoved,wo.prototype._onDataSourceRemoved,this),E.add(b.postRender,wo.prototype._postRender,this);let v=V.length;for(let F=0;F<v;F++)this._dataSourceAdded(V,V.get(F));this._dataSourceAdded(void 0,G.defaultDataSource),E.add(V.dataSourceAdded,wo.prototype._dataSourceAdded,this),E.add(V.dataSourceRemoved,wo.prototype._dataSourceRemoved,this)}catch(p){throw u&&this.showErrorPanel("Error constructing CesiumWidget.",'Visit <a href="http://get.webgl.org">http://get.webgl.org</a> to verify that your web browser and hardware support WebGL. Consider trying a different web browser or updating your video drivers. Detailed error information is below:',p),p}}Object.defineProperties(wo.prototype,{container:{get:function(){return this._container}},canvas:{get:function(){return this._canvas}},creditContainer:{get:function(){return this._creditContainer}},creditViewport:{get:function(){return this._creditViewport}},scene:{get:function(){return this._scene}},imageryLayers:{get:function(){return this._scene.imageryLayers}},terrainProvider:{get:function(){return this._scene.terrainProvider},set:function(e){this._scene.terrainProvider=e}},creditDisplay:{get:function(){return this._scene.frameState.creditDisplay}},dataSourceDisplay:{get:function(){return this._dataSourceDisplay}},entities:{get:function(){return this._dataSourceDisplay.defaultDataSource.entities}},dataSources:{get:function(){return this._dataSourceCollection}},camera:{get:function(){return this._scene.camera}},ellipsoid:{get:function(){return this._scene.ellipsoid}},clock:{get:function(){return this._clock}},screenSpaceEventHandler:{get:function(){return this._screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._targetFrameRate},set:function(e){this._targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._useDefaultRenderLoop},set:function(e){this._useDefaultRenderLoop!==e&&(this._useDefaultRenderLoop=e,e&&!this._renderLoopRunning&&RWt(this))}},resolutionScale:{get:function(){return this._resolutionScale},set:function(e){this._resolutionScale!==e&&(this._resolutionScale=e,this._forceResize=!0)}},useBrowserRecommendedResolution:{get:function(){return this._useBrowserRecommendedResolution},set:function(e){this._useBrowserRecommendedResolution!==e&&(this._useBrowserRecommendedResolution=e,this._forceResize=!0)}},allowDataSourcesToSuspendAnimation:{get:function(){return this._allowDataSourcesToSuspendAnimation},set:function(e){this._allowDataSourcesToSuspendAnimation=e}},trackedEntity:{get:function(){return this._trackedEntity},set:function(e){if(this._trackedEntity!==e){this._trackedEntity=e,cne(this);let t=this.scene,n=t.mode;!l(e)||!l(e.position)?(this._needTrackedEntityUpdate=!1,(n===se.COLUMBUS_VIEW||n===se.SCENE2D)&&(t.screenSpaceCameraController.enableTranslate=!0),(n===se.COLUMBUS_VIEW||n===se.SCENE3D)&&(t.screenSpaceCameraController.enableTilt=!0),this._entityView=void 0,this.camera.lookAtTransform(I.IDENTITY)):this._needTrackedEntityUpdate=!0,this._trackedEntityChanged.raiseEvent(e),this.scene.requestRender()}}},trackedEntityChanged:{get:function(){return this._trackedEntityChanged}},clockTrackedDataSource:{get:function(){return this._clockTrackedDataSource},set:function(e){this._clockTrackedDataSource!==e&&(this._clockTrackedDataSource=e,vAe(this.clock,e))}}});wo.prototype.showErrorPanel=function(e,t,n){let i=this._element,o=document.createElement("div");o.className="cesium-widget-errorPanel";let r=document.createElement("div");r.className="cesium-widget-errorPanel-content",o.appendChild(r);let s=document.createElement("div");s.className="cesium-widget-errorPanel-header",s.appendChild(document.createTextNode(e)),r.appendChild(s);let a=document.createElement("div");a.className="cesium-widget-errorPanel-scroll",r.appendChild(a);function c(){a.style.maxHeight=`${Math.max(Math.round(i.clientHeight*.9-100),30)}px`}c(),l(window.addEventListener)&&window.addEventListener("resize",c,!1);let d=l(t),u=l(n);if(d||u){let b=document.createElement("div");if(b.className="cesium-widget-errorPanel-message",a.appendChild(b),u){let f=dp(n);d||(typeof n=="string"&&(n=new Error(n)),t=dp({name:n.name,message:n.message}),f=n.stack),typeof console<"u"&&console.error(`${e} ${t} ${f}`);let y=document.createElement("div");y.className="cesium-widget-errorPanel-message-details collapsed";let _=document.createElement("span");_.className="cesium-widget-errorPanel-more-details",_.appendChild(document.createTextNode("See more...")),y.appendChild(_),y.onclick=function(S){y.removeChild(_),y.appendChild(document.createTextNode(f)),y.className="cesium-widget-errorPanel-message-details",r.className="cesium-widget-errorPanel-content expanded",y.onclick=void 0},a.appendChild(y)}b.innerHTML=`<p>${t}</p>`}let m=document.createElement("div");m.className="cesium-widget-errorPanel-buttonPanel",r.appendChild(m);let p=document.createElement("button");p.setAttribute("type","button"),p.className="cesium-button",p.appendChild(document.createTextNode("OK")),p.onclick=function(){l(c)&&l(window.removeEventListener)&&window.removeEventListener("resize",c,!1),i.removeChild(o)},m.appendChild(p),i.appendChild(o)};wo.prototype.isDestroyed=function(){return!1};wo.prototype.destroy=function(){let e=this.dataSources,t=e.length;for(let n=0;n<t;n++)this._dataSourceRemoved(e,e.get(n));this._dataSourceRemoved(void 0,this._dataSourceDisplay.defaultDataSource),this._dataSourceDisplay=this._dataSourceDisplay.destroy(),l(this._scene)&&(this._scene.renderError.removeEventListener(this._onRenderError),this._scene=this._scene.destroy()),this._container.removeChild(this._element),this._creditContainer.removeChild(this._innerCreditContainer),this._eventHelper.removeAll(),this._destroyDataSourceCollection&&(this._dataSourceCollection=this._dataSourceCollection.destroy()),me(this)};wo.prototype.resize=function(){let e=this._canvas;!this._forceResize&&this._canvasClientWidth===e.clientWidth&&this._canvasClientHeight===e.clientHeight&&this._lastDevicePixelRatio===window.devicePixelRatio||(this._forceResize=!1,IAe(this),PAe(this),this._scene.requestRender())};wo.prototype.render=function(){if(this._canRender){this._scene.initializeFrame();let e=this._clock.tick();this._scene.render(e)}else this._clock.tick()};wo.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(wo.prototype._onEntityCollectionChanged,this)};wo.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(wo.prototype._onEntityCollectionChanged,this),l(this.trackedEntity)&&n.getById(this.trackedEntity.id)===this.trackedEntity&&(this.trackedEntity=void 0)};wo.prototype._updateCanAnimate=function(e){this._clock.canAnimate=e};var GWt=new le;wo.prototype._onTick=function(e){let t=e.currentTime,n=this._dataSourceDisplay.update(t);this._allowDataSourcesToSuspendAnimation&&this._canAnimateUpdateCallback(n);let i=this._entityView;if(l(i)){let o=this._trackedEntity;this._dataSourceDisplay.getBoundingSphere(o,!1,i.boundingSphere??GWt)===Lt.DONE&&i.update(t)}};wo.prototype._onEntityCollectionChanged=function(e,t,n){let i=n.length;for(let o=0;o<i;o++){let r=n[o];this.trackedEntity===r&&(this.trackedEntity=void 0)}};wo.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};wo.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&vAe(this.clock,e)};wo.prototype._onDataSourceAdded=function(e,t){this._automaticallyTrackDataSourceClocks&&(this.clockTrackedDataSource=t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,wo.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};wo.prototype._onDataSourceRemoved=function(e,t){let n=this.clockTrackedDataSource===t,i=t.entities.id;if(this._dataSourceChangedListeners[i](),this._dataSourceChangedListeners[i]=void 0,n){let o=e.length;this._automaticallyTrackDataSourceClocks&&o>0?this.clockTrackedDataSource=e.get(o-1):this.clockTrackedDataSource=void 0}};wo.prototype.addController=function(e){return this.scene.controllerHost.registerController(e,this.container)};wo.prototype.removeController=function(e){return this.scene.controllerHost.unregisterController(e,this.container)};wo.prototype.zoomTo=function(e,t){return XAe(this,e,{offset:t},!1)};wo.prototype.flyTo=function(e,t){return XAe(this,e,t,!0)};function XAe(e,t,n,i){cne(e);let o=new Promise(r=>{e._completeZoom=function(s){r(s)}});return e._zoomPromise=o,e._zoomIsFlight=i,e._zoomOptions=n,Promise.resolve(t).then(function(r){if(e._zoomPromise===o){if(r instanceof Ts){let s;l(r.imageryProvider)?s=Promise.resolve(r.getImageryRectangle()):s=new Promise(a=>{let c=r.readyEvent.addEventListener(()=>{c(),a(r.getImageryRectangle())})}),s.then(function(a){return QS(a,e.scene)}).then(function(a){e._zoomPromise===o&&(e._zoomTarget=a)});return}if(r instanceof wr||r instanceof MR||r instanceof Dx||r instanceof Ks){e._zoomTarget=r;return}if(r.isLoading&&l(r.loadingEvent)){let s=r.loadingEvent.addEventListener(function(){s(),e._zoomPromise===o&&(e._zoomTarget=r.entities.values.slice(0))});return}if(Array.isArray(r)){e._zoomTarget=r.slice(0);return}r=r.values??r,l(r.entities)&&(r=r.entities.values),Array.isArray(r)?e._zoomTarget=r.slice(0):e._zoomTarget=[r]}}),e.scene.requestRender(),o}function uk(e){e._zoomPromise=void 0,e._zoomTarget=void 0,e._zoomOptions=void 0}function cne(e){let t=e._zoomPromise;l(t)&&(uk(e),e._completeZoom(!1))}wo.prototype._postRender=function(){AWt(this),EWt(this)};var LAe=new le;function AWt(e){let t=e._zoomTarget;if(!l(t)||e.scene.mode===se.MORPHING)return;let n=e.scene,i=n.camera,o=e._zoomOptions??{},r;function s(u){l(o.offset)||(o.offset=new Gm(0,-.5,u.radius)),r={offset:o.offset,duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)}},e._zoomIsFlight?i.flyToBoundingSphere(u,r):(i.viewBoundingSphere(u,o.offset),i.lookAtTransform(I.IDENTITY),e._completeZoom(!0)),uk(e)}if(t instanceof MR){if(l(t.boundingSphere)){s(t.boundingSphere);return}let u=t.frameChanged.addEventListener(function(m){s(m.boundingSphere),u()});return}if(t instanceof wr||t instanceof Dx){s(t.boundingSphere);return}if(t instanceof Ks){s(t.boundingVolume);return}if(t instanceof fe){r={destination:n.ellipsoid.cartographicToCartesian(t),duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)}},e._zoomIsFlight?i.flyTo(r):(i.setView(r),e._completeZoom(!0)),uk(e);return}let a=t,c=[];for(let u=0,m=a.length;u<m;u++){let p=e._dataSourceDisplay.getBoundingSphere(a[u],!1,LAe);if(p===Lt.PENDING)return;p!==Lt.FAILED&&c.push(le.clone(LAe))}if(c.length===0){cne(e);return}e.trackedEntity=void 0;let d=le.fromBoundingSpheres(c);e._zoomIsFlight?(uk(e),i.flyToBoundingSphere(d,{duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)},offset:o.offset})):(i.viewBoundingSphere(d,o.offset),i.lookAtTransform(I.IDENTITY),uk(e),e._completeZoom(!0))}var WAe=new le;function EWt(e){if(!e._needTrackedEntityUpdate)return;let t=e._trackedEntity,n=e.clock.currentTime,i=j.getValueOrUndefined(t.position,n);if(!l(i))return;let o=e.scene,r=e._dataSourceDisplay.getBoundingSphere(t,!1,WAe);if(r===Lt.PENDING)return;let s=o.mode;(s===se.COLUMBUS_VIEW||s===se.SCENE2D)&&(o.screenSpaceCameraController.enableTranslate=!1),(s===se.COLUMBUS_VIEW||s===se.SCENE3D)&&(o.screenSpaceCameraController.enableTilt=!1);let a=r!==Lt.FAILED?WAe:void 0;e._entityView=new EY(t,o,o.ellipsoid),e._entityView.update(n,a),e._needTrackedEntityUpdate=!1}var mk=wo;var ebo=x(T(),1);var LWt=U.WHITE,WWt=U.BLACK,vWt=new M(2,2);function kR(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new Se,this._evenColor=void 0,this._evenColorSubscription=void 0,this._oddColor=void 0,this._oddColorSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this.evenColor=e.evenColor,this.oddColor=e.oddColor,this.repeat=e.repeat}Object.defineProperties(kR.prototype,{isConstant:{get:function(){return j.isConstant(this._evenColor)&&j.isConstant(this._oddColor)&&j.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},evenColor:be("evenColor"),oddColor:be("oddColor"),repeat:be("repeat")});kR.prototype.getType=function(e){return"Checkerboard"};var FWt=new Q;kR.prototype.getValue=function(e,t){return l(e)||(e=Q.now(FWt)),l(t)||(t={}),t.lightColor=j.getValueOrClonedDefault(this._evenColor,e,LWt,t.lightColor),t.darkColor=j.getValueOrClonedDefault(this._oddColor,e,WWt,t.darkColor),t.repeat=j.getValueOrDefault(this._repeat,e,vWt),t};kR.prototype.equals=function(e){return this===e||e instanceof kR&&j.equals(this._evenColor,e._evenColor)&&j.equals(this._oddColor,e._oddColor)&&j.equals(this._repeat,e._repeat)};var UR=kR;var abo=x(T(),1);var ez={id:void 0},DR=new Array(2);function lne(e){let t=e.propertyNames,n=t.length;for(let i=0;i<n;i++)e[t[i]]=void 0;e._name=void 0,e._availability=void 0}function NAe(e,t,n,i){DR[0]=n,DR[1]=i.id,t[JSON.stringify(DR)]=i.definitionChanged.addEventListener(_s.prototype._onDefinitionChanged,e)}function YAe(e,t,n,i){DR[0]=n,DR[1]=i.id;let o=JSON.stringify(DR);t[o](),t[o]=void 0}function Bx(e){if(e._shouldRecomposite=!0,e._suspendCount!==0)return;let t=e._collections,n=t.length,i=e._collectionsCopy,o=i.length,r,s,a,c,d,u=e._composite,m=new Pa(e),p=e._eventHash,b;for(r=0;r<o;r++)for(d=i[r],d.collectionChanged.removeEventListener(_s.prototype._onCollectionChanged,e),a=d.values,b=d.id,c=a.length-1;c>-1;c--)s=a[c],YAe(e,p,b,s);for(r=n-1;r>=0;r--)for(d=t[r],d.collectionChanged.addEventListener(_s.prototype._onCollectionChanged,e),a=d.values,b=d.id,c=a.length-1;c>-1;c--){s=a[c],NAe(e,p,b,s);let y=m.getById(s.id);l(y)||(y=u.getById(s.id),l(y)?lne(y):(ez.id=s.id,y=new Jo(ez)),m.add(y)),y.merge(s)}e._collectionsCopy=t.slice(0),u.suspendEvents(),u.removeAll();let f=m.values;for(r=0;r<f.length;r++)u.add(f[r]);u.resumeEvents()}function _s(e,t){this._owner=t,this._composite=new Pa(this),this._suspendCount=0,this._collections=l(e)?e.slice():[],this._collectionsCopy=[],this._id=Qn(),this._eventHash={},Bx(this),this._shouldRecomposite=!1}Object.defineProperties(_s.prototype,{collectionChanged:{get:function(){return this._composite._collectionChanged}},id:{get:function(){return this._id}},values:{get:function(){return this._composite.values}},owner:{get:function(){return this._owner}}});_s.prototype.addCollection=function(e,t){l(t)?this._collections.splice(t,0,e):this._collections.push(e),Bx(this)};_s.prototype.removeCollection=function(e){let t=this._collections.indexOf(e);return t!==-1?(this._collections.splice(t,1),Bx(this),!0):!1};_s.prototype.removeAllCollections=function(){this._collections.length=0,Bx(this)};_s.prototype.containsCollection=function(e){return this._collections.indexOf(e)!==-1};_s.prototype.contains=function(e){return this._composite.contains(e)};_s.prototype.indexOfCollection=function(e){return this._collections.indexOf(e)};_s.prototype.getCollection=function(e){return this._collections[e]};_s.prototype.getCollectionsLength=function(){return this._collections.length};function tz(e,t){return e.indexOf(t)}function wAe(e,t,n){let i=e._collections;if(t=L.clamp(t,0,i.length-1),n=L.clamp(n,0,i.length-1),t===n)return;let o=i[t];i[t]=i[n],i[n]=o,Bx(e)}_s.prototype.raiseCollection=function(e){let t=tz(this._collections,e);wAe(this,t,t+1)};_s.prototype.lowerCollection=function(e){let t=tz(this._collections,e);wAe(this,t,t-1)};_s.prototype.raiseCollectionToTop=function(e){let t=tz(this._collections,e);t!==this._collections.length-1&&(this._collections.splice(t,1),this._collections.push(e),Bx(this))};_s.prototype.lowerCollectionToBottom=function(e){let t=tz(this._collections,e);t!==0&&(this._collections.splice(t,1),this._collections.splice(0,0,e),Bx(this))};_s.prototype.suspendEvents=function(){this._suspendCount++,this._composite.suspendEvents()};_s.prototype.resumeEvents=function(){this._suspendCount--,this._shouldRecomposite&&this._suspendCount===0&&(Bx(this),this._shouldRecomposite=!1),this._composite.resumeEvents()};_s.prototype.computeAvailability=function(){return this._composite.computeAvailability()};_s.prototype.getById=function(e){return this._composite.getById(e)};_s.prototype._onCollectionChanged=function(e,t,n){let i=this._collectionsCopy,o=i.length,r=this._composite;r.suspendEvents();let s,a,c,d,u=n.length,m=this._eventHash,p=e.id;for(s=0;s<u;s++){let f=n[s];YAe(this,m,p,f);let y=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(y),l(c)&&(l(d)||(d=r.getById(y),lne(d)),d.merge(c));l(d)||r.removeById(y),d=void 0}let b=t.length;for(s=0;s<b;s++){let f=t[s];NAe(this,m,p,f);let y=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(y),l(c)&&(l(d)||(d=r.getById(y),l(d)?lne(d):(ez.id=y,d=new Jo(ez),r.add(d))),d.merge(c));d=void 0}r.resumeEvents()};_s.prototype._onDefinitionChanged=function(e,t,n,i){let o=this._collections,r=this._composite,s=o.length,a=e.id,c=r.getById(a),d=c[t],u=!l(d),m=!0;for(let p=s-1;p>=0;p--){let b=o[p].getById(e.id);if(l(b)){let f=b[t];if(l(f)){if(m)if(m=!1,l(f.merge)&&l(f.clone))d=f.clone(d);else{d=f;break}d.merge(f)}}}u&&c.propertyNames.indexOf(t)===-1&&c.addProperty(t),c[t]=d};var dne=_s;var fbo=x(T(),1);function zx(){this._definitionChanged=new Se,this._composite=new hl,this._composite.definitionChanged.addEventListener(zx.prototype._raiseDefinitionChanged,this)}Object.defineProperties(zx.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite._intervals}}});zx.prototype.getType=function(e){let t=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(t))return t.getType(e)};var IWt=new Q;zx.prototype.getValue=function(e,t){l(e)||(e=Q.now(IWt));let n=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(n))return n.getValue(e,t)};zx.prototype.equals=function(e){return this===e||e instanceof zx&&this._composite.equals(e._composite,j.equals)};zx.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var OR=zx;var Qxo=x(T(),1);var gk=x(tu(),1);var _bo=x(T(),1);function WZ(){this._definitionChanged=new Se,this._startTime=void 0,this._stopTime=void 0,this._currentTime=void 0,this._clockRange=void 0,this._clockStep=void 0,this._multiplier=void 0}Object.defineProperties(WZ.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},startTime:Hl("startTime"),stopTime:Hl("stopTime"),currentTime:Hl("currentTime"),clockRange:Hl("clockRange"),clockStep:Hl("clockStep"),multiplier:Hl("multiplier")});WZ.prototype.clone=function(e){return l(e)||(e=new WZ),e.startTime=this.startTime,e.stopTime=this.stopTime,e.currentTime=this.currentTime,e.clockRange=this.clockRange,e.clockStep=this.clockStep,e.multiplier=this.multiplier,e};WZ.prototype.equals=function(e){return this===e||l(e)&&Q.equals(this.startTime,e.startTime)&&Q.equals(this.stopTime,e.stopTime)&&Q.equals(this.currentTime,e.currentTime)&&this.clockRange===e.clockRange&&this.clockStep===e.clockStep&&this.multiplier===e.multiplier};WZ.prototype.merge=function(e){this.startTime=this.startTime??e.startTime,this.stopTime=this.stopTime??e.stopTime,this.currentTime=this.currentTime??e.currentTime,this.clockRange=this.clockRange??e.clockRange,this.clockStep=this.clockStep??e.clockStep,this.multiplier=this.multiplier??e.multiplier};WZ.prototype.getValue=function(e){return l(e)||(e=new Xh),e.startTime=this.startTime??e.startTime,e.stopTime=this.stopTime??e.stopTime,e.currentTime=this.currentTime??e.currentTime,e.clockRange=this.clockRange??e.clockRange,e.multiplier=this.multiplier??e.multiplier,e.clockStep=this.clockStep??e.clockStep,e};var Yf=WZ;var Wbo=x(T(),1);var PWt=U.WHITE,XWt=.1,NWt=new M(8,8),YWt=new M(0,0),wWt=new M(1,1);function BR(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new Se,this._color=void 0,this._colorSubscription=void 0,this._cellAlpha=void 0,this._cellAlphaSubscription=void 0,this._lineCount=void 0,this._lineCountSubscription=void 0,this._lineThickness=void 0,this._lineThicknessSubscription=void 0,this._lineOffset=void 0,this._lineOffsetSubscription=void 0,this.color=e.color,this.cellAlpha=e.cellAlpha,this.lineCount=e.lineCount,this.lineThickness=e.lineThickness,this.lineOffset=e.lineOffset}Object.defineProperties(BR.prototype,{isConstant:{get:function(){return j.isConstant(this._color)&&j.isConstant(this._cellAlpha)&&j.isConstant(this._lineCount)&&j.isConstant(this._lineThickness)&&j.isConstant(this._lineOffset)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color"),cellAlpha:be("cellAlpha"),lineCount:be("lineCount"),lineThickness:be("lineThickness"),lineOffset:be("lineOffset")});BR.prototype.getType=function(e){return"Grid"};var MWt=new Q;BR.prototype.getValue=function(e,t){return l(e)||(e=Q.now(MWt)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,PWt,t.color),t.cellAlpha=j.getValueOrDefault(this._cellAlpha,e,XWt),t.lineCount=j.getValueOrClonedDefault(this._lineCount,e,NWt,t.lineCount),t.lineThickness=j.getValueOrClonedDefault(this._lineThickness,e,wWt,t.lineThickness),t.lineOffset=j.getValueOrClonedDefault(this._lineOffset,e,YWt,t.lineOffset),t};BR.prototype.equals=function(e){return this===e||e instanceof BR&&j.equals(this._color,e._color)&&j.equals(this._cellAlpha,e._cellAlpha)&&j.equals(this._lineCount,e._lineCount)&&j.equals(this._lineThickness,e._lineThickness)&&j.equals(this._lineOffset,e._lineOffset)};var zR=BR;var wbo=x(T(),1);function HR(e){this._definitionChanged=new Se,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(HR.prototype,{isConstant:{get:function(){return j.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color")});HR.prototype.getType=function(e){return"PolylineArrow"};var kWt=new Q;HR.prototype.getValue=function(e,t){return l(e)||(e=Q.now(kWt)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,U.WHITE,t.color),t};HR.prototype.equals=function(e){return this===e||e instanceof HR&&j.equals(this._color,e._color)};var KR=HR;var Kbo=x(T(),1);var UWt=U.WHITE,DWt=U.TRANSPARENT,OWt=16,BWt=255;function JR(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new Se,this._color=void 0,this._colorSubscription=void 0,this._gapColor=void 0,this._gapColorSubscription=void 0,this._dashLength=void 0,this._dashLengthSubscription=void 0,this._dashPattern=void 0,this._dashPatternSubscription=void 0,this.color=e.color,this.gapColor=e.gapColor,this.dashLength=e.dashLength,this.dashPattern=e.dashPattern}Object.defineProperties(JR.prototype,{isConstant:{get:function(){return j.isConstant(this._color)&&j.isConstant(this._gapColor)&&j.isConstant(this._dashLength)&&j.isConstant(this._dashPattern)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color"),gapColor:be("gapColor"),dashLength:be("dashLength"),dashPattern:be("dashPattern")});JR.prototype.getType=function(e){return"PolylineDash"};var zWt=new Q;JR.prototype.getValue=function(e,t){return l(e)||(e=Q.now(zWt)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,UWt,t.color),t.gapColor=j.getValueOrClonedDefault(this._gapColor,e,DWt,t.gapColor),t.dashLength=j.getValueOrDefault(this._dashLength,e,OWt,t.dashLength),t.dashPattern=j.getValueOrDefault(this._dashPattern,e,BWt,t.dashPattern),t};JR.prototype.equals=function(e){return this===e||e instanceof JR&&j.equals(this._color,e._color)&&j.equals(this._gapColor,e._gapColor)&&j.equals(this._dashLength,e._dashLength)&&j.equals(this._dashPattern,e._dashPattern)};var jR=JR;var igo=x(T(),1);var HWt=U.WHITE,KWt=.25,JWt=1;function QR(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new Se,this._color=void 0,this._colorSubscription=void 0,this._glowPower=void 0,this._glowPowerSubscription=void 0,this._taperPower=void 0,this._taperPowerSubscription=void 0,this.color=e.color,this.glowPower=e.glowPower,this.taperPower=e.taperPower}Object.defineProperties(QR.prototype,{isConstant:{get:function(){return j.isConstant(this._color)&&j.isConstant(this._glow)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color"),glowPower:be("glowPower"),taperPower:be("taperPower")});QR.prototype.getType=function(e){return"PolylineGlow"};var jWt=new Q;QR.prototype.getValue=function(e,t){return l(e)||(e=Q.now(jWt)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,HWt,t.color),t.glowPower=j.getValueOrDefault(this._glowPower,e,KWt,t.glowPower),t.taperPower=j.getValueOrDefault(this._taperPower,e,JWt,t.taperPower),t};QR.prototype.equals=function(e){return this===e||e instanceof QR&&j.equals(this._color,e._color)&&j.equals(this._glowPower,e._glowPower)&&j.equals(this._taperPower,e._taperPower)};var qR=QR;var mgo=x(T(),1);var QWt=U.WHITE,qWt=U.BLACK,$Wt=1;function $R(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new Se,this._color=void 0,this._colorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this.color=e.color,this.outlineColor=e.outlineColor,this.outlineWidth=e.outlineWidth}Object.defineProperties($R.prototype,{isConstant:{get:function(){return j.isConstant(this._color)&&j.isConstant(this._outlineColor)&&j.isConstant(this._outlineWidth)}},definitionChanged:{get:function(){return this._definitionChanged}},color:be("color"),outlineColor:be("outlineColor"),outlineWidth:be("outlineWidth")});$R.prototype.getType=function(e){return"PolylineOutline"};var evt=new Q;$R.prototype.getValue=function(e,t){return l(e)||(e=Q.now(evt)),l(t)||(t={}),t.color=j.getValueOrClonedDefault(this._color,e,QWt,t.color),t.outlineColor=j.getValueOrClonedDefault(this._outlineColor,e,qWt,t.outlineColor),t.outlineWidth=j.getValueOrDefault(this._outlineWidth,e,$Wt),t};$R.prototype.equals=function(e){return this===e||e instanceof $R&&j.equals(this._color,e._color)&&j.equals(this._outlineColor,e._outlineColor)&&j.equals(this._outlineWidth,e._outlineWidth)};var Hx=$R;var Tgo=x(T(),1);function Ag(e,t){this._value=void 0,this._definitionChanged=new Se,this._eventHelper=new Ir,this._referenceFrame=t??Ui.FIXED,this.setValue(e)}Object.defineProperties(Ag.prototype,{isConstant:{get:function(){let e=this._value;if(!l(e))return!0;let t=e.length;for(let n=0;n<t;n++)if(!j.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var tvt=new Q;Ag.prototype.getValue=function(e,t){return l(e)||(e=Q.now(tvt)),this.getValueInReferenceFrame(e,Ui.FIXED,t)};Ag.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._value;if(!l(i))return;let o=i.length;l(n)||(n=new Array(o));let r=0,s=0;for(;r<o;){let c=i[r].getValueInReferenceFrame(e,t,n[r]);l(c)&&(n[s]=c,s++),r++}return n.length=s,n};Ag.prototype.setValue=function(e){let t=this._eventHelper;if(t.removeAll(),l(e)){this._value=e.slice();let n=e.length;for(let i=0;i<n;i++){let o=e[i];l(o)&&t.add(o.definitionChanged,Ag.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};Ag.prototype.equals=function(e){return this===e||e instanceof Ag&&this._referenceFrame===e._referenceFrame&&j.arrayEquals(this._value,e._value)};Ag.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var Eg=Ag;var Ggo=x(T(),1);function Kx(e){this._value=void 0,this._definitionChanged=new Se,this._eventHelper=new Ir,this.setValue(e)}Object.defineProperties(Kx.prototype,{isConstant:{get:function(){let e=this._value;if(!l(e))return!0;let t=e.length;for(let n=0;n<t;n++)if(!j.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}}});var nvt=new Q;Kx.prototype.getValue=function(e,t){l(e)||(e=Q.now(nvt));let n=this._value;if(!l(n))return;let i=n.length;l(t)||(t=new Array(i));let o=0,r=0;for(;o<i;){let a=this._value[o].getValue(e,t[o]);l(a)&&(t[r]=a,r++),o++}return t.length=r,t};Kx.prototype.setValue=function(e){let t=this._eventHelper;if(t.removeAll(),l(e)){this._value=e.slice();let n=e.length;for(let i=0;i<n;i++){let o=e[i];l(o)&&t.add(o.definitionChanged,Kx.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};Kx.prototype.equals=function(e){return this===e||e instanceof Kx&&j.arrayEquals(this._value,e._value)};Kx.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var eG=Kx;var Wgo=x(T(),1);var ivt={packedLength:1,pack:function(e,t,n){return n=n??0,t[n]=e,t},unpack:function(e,t,n){return t=t??0,e[t]},convertPackedArrayForInterpolation:function(e,t,n,i){l(i)||(i=[]),t=t??0,n=n??e.length;let o;for(let r=0,s=n-t+1;r<s;r++){let a=e[t+r];r===0||Math.abs(o-a)<Math.PI?i[r]=a:i[r]=a-L.TWO_PI,o=a}},unpackInterpolationResult:function(e,t,n,i,o){return o=e[0],o<0?o+L.TWO_PI:o}},uh=ivt;var Dgo=x(T(),1);var Fgo=x(T(),1),MAe={HORIZONTAL:0,VERTICAL:1};Object.freeze(MAe);var wf=MAe;var ovt=wf.HORIZONTAL,rvt=U.WHITE,svt=U.BLACK,avt=0,cvt=1;function tG(e){e=e??B.EMPTY_OBJECT,this._definitionChanged=new Se,this._orientation=void 0,this._orientationSubscription=void 0,this._evenColor=void 0,this._evenColorSubscription=void 0,this._oddColor=void 0,this._oddColorSubscription=void 0,this._offset=void 0,this._offsetSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this.orientation=e.orientation,this.evenColor=e.evenColor,this.oddColor=e.oddColor,this.offset=e.offset,this.repeat=e.repeat}Object.defineProperties(tG.prototype,{isConstant:{get:function(){return j.isConstant(this._orientation)&&j.isConstant(this._evenColor)&&j.isConstant(this._oddColor)&&j.isConstant(this._offset)&&j.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},orientation:be("orientation"),evenColor:be("evenColor"),oddColor:be("oddColor"),offset:be("offset"),repeat:be("repeat")});tG.prototype.getType=function(e){return"Stripe"};var lvt=new Q;tG.prototype.getValue=function(e,t){return l(e)||(e=Q.now(lvt)),l(t)||(t={}),t.horizontal=j.getValueOrDefault(this._orientation,e,ovt)===wf.HORIZONTAL,t.evenColor=j.getValueOrClonedDefault(this._evenColor,e,rvt,t.evenColor),t.oddColor=j.getValueOrClonedDefault(this._oddColor,e,svt,t.oddColor),t.offset=j.getValueOrDefault(this._offset,e,avt),t.repeat=j.getValueOrDefault(this._repeat,e,cvt),t};tG.prototype.equals=function(e){return this===e||e instanceof tG&&j.equals(this._orientation,e._orientation)&&j.equals(this._evenColor,e._evenColor)&&j.equals(this._oddColor,e._oddColor)&&j.equals(this._offset,e._offset)&&j.equals(this._repeat,e._repeat)};var nG=tG;var jgo=x(T(),1);function vZ(){this._definitionChanged=new Se,this._intervals=new fs,this._intervals.changedEvent.addEventListener(vZ.prototype._intervalsChanged,this)}Object.defineProperties(vZ.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});var dvt=new Q;vZ.prototype.getValue=function(e,t){l(e)||(e=Q.now(dvt));let n=this._intervals.findDataForIntervalContainingDate(e);return l(n)&&typeof n.clone=="function"?n.clone(t):n};vZ.prototype.equals=function(e){return this===e||e instanceof vZ&&this._intervals.equals(e._intervals,j.equals)};vZ.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var Lg=vZ;var cyo=x(T(),1);function hk(e,t){this._velocityVectorProperty=new bg(e,!0),this._subscription=void 0,this._ellipsoid=void 0,this._definitionChanged=new Se,this.ellipsoid=t??ie.default;let n=this;this._velocityVectorProperty.definitionChanged.addEventListener(function(){n._definitionChanged.raiseEvent(n)})}Object.defineProperties(hk.prototype,{isConstant:{get:function(){return j.isConstant(this._velocityVectorProperty)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._velocityVectorProperty.position},set:function(e){this._velocityVectorProperty.position=e}},ellipsoid:{get:function(){return this._ellipsoid},set:function(e){this._ellipsoid!==e&&(this._ellipsoid=e,this._definitionChanged.raiseEvent(this))}}});var kAe=new h,uvt=new h,UAe=new q,mvt=new Q;hk.prototype.getValue=function(e,t){l(e)||(e=Q.now(mvt));let n=this._velocityVectorProperty._getValue(e,uvt,kAe);if(l(n))return bt.rotationMatrixFromPositionVelocity(kAe,n,this._ellipsoid,UAe),Ye.fromRotationMatrix(UAe,t)};hk.prototype.equals=function(e){return this===e||e instanceof hk&&j.equals(this._velocityVectorProperty,e._velocityVectorProperty)&&(this._ellipsoid===e._ellipsoid||this._ellipsoid.equals(e._ellipsoid))};var fk=hk;var uyo=x(T(),1);var Wg={COMPLETE:0,BELOW_ELLIPSOID_HORIZON:1,ABOVE_ELLIPSOID_HORIZON:2};Wg.validate=function(e){return e===Wg.COMPLETE||e===Wg.BELOW_ELLIPSOID_HORIZON||e===Wg.ABOVE_ELLIPSOID_HORIZON};Wg.toString=function(e){switch(e){case Wg.COMPLETE:return"COMPLETE";case Wg.BELOW_ELLIPSOID_HORIZON:return"BELOW_ELLIPSOID_HORIZON";case Wg.ABOVE_ELLIPSOID_HORIZON:return"ABOVE_ELLIPSOID_HORIZON";default:throw new ge("SensorVolumePortionToDisplay value is not valid and cannot be converted to a String.")}};var iG=Wg;function Jx(){}Jx.packedLength=h.packedLength;Jx.unpack=h.unpack;Jx.pack=h.pack;var une;function pk(e,t){return t[0]==="#"&&(t=une+t),fg.fromString(e,t)}function DAe(e,t,n){if(l(n.reference))return pk(t,n.reference);if(l(n.velocityReference)){let i=pk(t,n.velocityReference);switch(e){case h:case Jx:return new bg(i,e===Jx);case Ye:return new fk(i)}}throw new ae(`${JSON.stringify(n)} is not valid CZML.`)}function hvt(e,t){return new tf(function(n,i){return t(e.getValue(n,i))},e.isConstant)}var uo=new h,ad=new pL,yl=new fe,FZ=new Vn,nz=new Ye;function fvt(e){let t=e.rgbaf;if(l(t))return t;let n=e.rgba;if(!l(n))return;let i=n.length;if(i===U.packedLength)return[U.byteToFloat(n[0]),U.byteToFloat(n[1]),U.byteToFloat(n[2]),U.byteToFloat(n[3])];t=new Array(i);for(let o=0;o<i;o+=5)t[o]=n[o],t[o+1]=U.byteToFloat(n[o+1]),t[o+2]=U.byteToFloat(n[o+2]),t[o+3]=U.byteToFloat(n[o+3]),t[o+4]=U.byteToFloat(n[o+4]);return t}function OAe(e,t){let n=e.uri??e;return l(t)?t.getDerivedResource({url:n}):ve.createIfNeeded(n)}function pvt(e){let t=e.wsen;if(l(t))return t;let n=e.wsenDegrees;if(!l(n))return;let i=n.length;if(i===re.packedLength)return[L.toRadians(n[0]),L.toRadians(n[1]),L.toRadians(n[2]),L.toRadians(n[3])];t=new Array(i);for(let o=0;o<i;o+=5)t[o]=n[o],t[o+1]=L.toRadians(n[o+1]),t[o+2]=L.toRadians(n[o+2]),t[o+3]=L.toRadians(n[o+3]),t[o+4]=L.toRadians(n[o+4]);return t}function bvt(e){let t=e.length;if(ad.magnitude=1,t===2)return ad.clock=e[0],ad.cone=e[1],h.fromSpherical(ad,uo),[uo.x,uo.y,uo.z];let n=new Array(t/3*4);for(let i=0,o=0;i<t;i+=3,o+=4)n[o]=e[i],ad.clock=e[i+1],ad.cone=e[i+2],h.fromSpherical(ad,uo),n[o+1]=uo.x,n[o+2]=uo.y,n[o+3]=uo.z;return n}function gvt(e){let t=e.length;if(t===3)return ad.clock=e[0],ad.cone=e[1],ad.magnitude=e[2],h.fromSpherical(ad,uo),[uo.x,uo.y,uo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],ad.clock=e[i+1],ad.cone=e[i+2],ad.magnitude=e[i+3],h.fromSpherical(ad,uo),n[i+1]=uo.x,n[i+2]=uo.y,n[i+3]=uo.z;return n}function yvt(e){let t=e.length;if(t===3)return yl.longitude=e[0],yl.latitude=e[1],yl.height=e[2],ie.default.cartographicToCartesian(yl,uo),[uo.x,uo.y,uo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],yl.longitude=e[i+1],yl.latitude=e[i+2],yl.height=e[i+3],ie.default.cartographicToCartesian(yl,uo),n[i+1]=uo.x,n[i+2]=uo.y,n[i+3]=uo.z;return n}function xvt(e){let t=e.length;if(t===3)return yl.longitude=L.toRadians(e[0]),yl.latitude=L.toRadians(e[1]),yl.height=e[2],ie.default.cartographicToCartesian(yl,uo),[uo.x,uo.y,uo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],yl.longitude=L.toRadians(e[i+1]),yl.latitude=L.toRadians(e[i+2]),yl.height=e[i+3],ie.default.cartographicToCartesian(yl,uo),n[i+1]=uo.x,n[i+2]=uo.y,n[i+3]=uo.z;return n}function mne(e){let t=e.cartesian;if(l(t))return t;let n=e.cartesianVelocity;if(l(n))return n;let i=e.unitCartesian;if(l(i))return i;let o=e.unitSpherical;if(l(o))return bvt(o);let r=e.spherical;if(l(r))return gvt(r);let s=e.cartographicRadians;if(l(s))return yvt(s);let a=e.cartographicDegrees;if(l(a))return xvt(a);throw new ae(`${JSON.stringify(e)} is not a valid CZML interval.`)}function BAe(e,t){h.unpack(e,t,uo),h.normalize(uo,uo),h.pack(uo,e,t)}function Tvt(e){let t=mne(e);if(t.length===3)return BAe(t,0),t;for(let n=1;n<t.length;n+=4)BAe(t,n);return t}function zAe(e,t){Ye.unpack(e,t,nz),Ye.normalize(nz,nz),Ye.pack(nz,e,t)}function _vt(e){let t=e.unitQuaternion;if(l(t)){if(t.length===4)return zAe(t,0),t;for(let n=1;n<t.length;n+=5)zAe(t,n)}return t}function HAe(e){return typeof e=="boolean"?Boolean:typeof e=="number"?Number:typeof e=="string"?String:e.hasOwnProperty("array")?Array:e.hasOwnProperty("boolean")?Boolean:e.hasOwnProperty("boundingRectangle")?$e:e.hasOwnProperty("cartesian2")?M:e.hasOwnProperty("cartesian")||e.hasOwnProperty("spherical")||e.hasOwnProperty("cartographicRadians")||e.hasOwnProperty("cartographicDegrees")?h:e.hasOwnProperty("unitCartesian")||e.hasOwnProperty("unitSpherical")?Jx:e.hasOwnProperty("rgba")||e.hasOwnProperty("rgbaf")?U:e.hasOwnProperty("arcType")?ln:e.hasOwnProperty("classificationType")?ei:e.hasOwnProperty("colorBlendMode")?ll:e.hasOwnProperty("cornerType")?$i:e.hasOwnProperty("heightReference")?rt:e.hasOwnProperty("horizontalOrigin")?Di:e.hasOwnProperty("date")?Q:e.hasOwnProperty("labelStyle")?fr:e.hasOwnProperty("number")?Number:e.hasOwnProperty("nearFarScalar")?Ht:e.hasOwnProperty("distanceDisplayCondition")?Ot:e.hasOwnProperty("object")||e.hasOwnProperty("value")?Object:e.hasOwnProperty("unitQuaternion")?Ye:e.hasOwnProperty("pathMode")?jp:e.hasOwnProperty("shadowMode")?Fn:e.hasOwnProperty("string")?String:e.hasOwnProperty("stripeOrientation")?wf:e.hasOwnProperty("wsen")||e.hasOwnProperty("wsenDegrees")?re:e.hasOwnProperty("uri")?gk.default:e.hasOwnProperty("verticalOrigin")?zn:Object}function Svt(e,t,n){switch(e){case ln:return ln[t.arcType??t];case Array:return t.array;case Boolean:return t.boolean??t;case $e:return t.boundingRectangle;case M:return t.cartesian2;case h:return mne(t);case Jx:return Tvt(t);case U:return fvt(t);case ei:return ei[t.classificationType??t];case ll:return ll[t.colorBlendMode??t];case $i:return $i[t.cornerType??t];case rt:return rt[t.heightReference??t];case Di:return Di[t.horizontalOrigin??t];case Image:return OAe(t,n);case Q:return Q.fromIso8601(t.date??t);case fr:return fr[t.labelStyle??t];case Number:return t.number??t;case Ht:return t.nearFarScalar;case Ot:return t.distanceDisplayCondition;case Object:return t.object??t.value??t;case jp:return jp[t.pathMode??t];case Ye:return _vt(t);case uh:return t.number??t;case iG:return iG[t.portionToDisplay??t];case Fn:return Fn[t.shadowMode??t.shadows??t];case String:return t.string??t;case wf:return wf[t.stripeOrientation??t];case re:return pvt(t);case gk.default:return OAe(t,n);case zn:return zn[t.verticalOrigin??t];default:throw new ae(`Unknown CzmlDataSource interval type: ${e}`)}}var Zvt={HERMITE:wE,LAGRANGE:OE,LINEAR:a_};function iz(e,t){let n=e.interpolationAlgorithm,i=e.interpolationDegree;(l(n)||l(i))&&t.setInterpolationOptions({interpolationAlgorithm:Zvt[n],interpolationDegree:i});let o=e.forwardExtrapolationType;l(o)&&(t.forwardExtrapolationType=uu[o]);let r=e.forwardExtrapolationDuration;l(r)&&(t.forwardExtrapolationDuration=r);let s=e.backwardExtrapolationType;l(s)&&(t.backwardExtrapolationType=uu[s]);let a=e.backwardExtrapolationDuration;l(a)&&(t.backwardExtrapolationDuration=a)}var KAe={iso8601:void 0};function kr(e){if(l(e))return KAe.iso8601=e,Vn.fromIso8601(KAe)}function hne(e){let t=tt.MAXIMUM_INTERVAL.clone();return t.data=e,t}function JAe(e){let t=new hl;return t.intervals.addInterval(hne(e)),t}function jAe(e){let t=new uc(e.referenceFrame);return t.intervals.addInterval(hne(e)),t}function oz(e,t,n,i,o,r,s){let a=kr(i.interval);l(o)&&(l(a)?a=Vn.intersect(a,o,FZ):a=o);let c,d,u,m=!l(i.reference)&&!l(i.velocityReference),p=l(a)&&!a.equals(tt.MAXIMUM_INTERVAL);if(i.delete===!0){if(!p){t[n]=void 0;return}return aEe(t[n],a)}let b=!1;if(m){if(d=Svt(e,i,r),!l(d))return;c=e.packedLength??1,u=d.length??1,b=!l(i.array)&&typeof d!="string"&&u>c&&e!==Object}let f=typeof e.unpack=="function"&&e!==uh;if(!b&&!p){m?t[n]=new pi(f?e.unpack(d,0):d):t[n]=DAe(e,s,i);return}let y=t[n],_,S=i.epoch;if(l(S)&&(_=Q.fromIso8601(S)),b&&!p){y instanceof Yu||(t[n]=y=new Yu(e)),y.addSamplesPackedArray(d,_),iz(i,y);return}let Z;if(!b&&p){a=a.clone(),m?a.data=f?e.unpack(d,0):d:a.data=DAe(e,s,i),l(y)||(t[n]=y=m?new Lg:new hl),m&&y instanceof Lg?y.intervals.addInterval(a):y instanceof hl?(m&&(a.data=new pi(a.data)),y.intervals.addInterval(a)):(t[n]=y=JAe(y),m&&(a.data=new pi(a.data)),y.intervals.addInterval(a));return}l(y)||(t[n]=y=new hl),y instanceof hl||(t[n]=y=JAe(y));let V=y.intervals;Z=V.findInterval(a),(!l(Z)||!(Z.data instanceof Yu))&&(Z=a.clone(),Z.data=new Yu(e),V.addInterval(Z)),Z.data.addSamplesPackedArray(d,_),iz(i,Z.data)}function aEe(e,t){if(e instanceof Yu){e.removeSamples(t);return}else if(e instanceof Lg){e.intervals.removeInterval(t);return}else if(e instanceof hl){let n=e.intervals;for(let i=0;i<n.length;++i){let o=Vn.intersect(n.get(i),t,FZ);o.isEmpty||aEe(o.data,t)}n.removeInterval(t);return}}function Ve(e,t,n,i,o,r,s){if(l(i))if(Array.isArray(i))for(let a=0,c=i.length;a<c;++a)oz(e,t,n,i[a],o,r,s);else oz(e,t,n,i,o,r,s)}function QAe(e,t,n,i,o,r){let s=kr(n.interval);l(i)&&(l(s)?s=Vn.intersect(s,i,FZ):s=i);let a=l(n.cartesianVelocity)?1:0,c=h.packedLength*(a+1),d,u,m=!l(n.reference),p=l(s)&&!s.equals(tt.MAXIMUM_INTERVAL);if(n.delete===!0){if(!p){e[t]=void 0;return}return cEe(e[t],s)}let b,f=!1;if(m&&(l(n.referenceFrame)&&(b=Ui[n.referenceFrame]),b=b??Ui.FIXED,d=mne(n),u=d.length??1,f=u>c),!f&&!p){m?e[t]=new zl(h.unpack(d),b):e[t]=pk(r,n.reference);return}let y=e[t],_,S=n.epoch;if(l(S)&&(_=Q.fromIso8601(S)),f&&!p){(!(y instanceof mc)||l(b)&&y.referenceFrame!==b)&&(e[t]=y=new mc(b,a)),y.addSamplesPackedArray(d,_),iz(n,y);return}let Z;if(!f&&p){s=s.clone(),m?s.data=h.unpack(d):s.data=pk(r,n.reference),l(y)||(m?y=new pg(b):y=new uc(b),e[t]=y),m&&y instanceof pg&&l(b)&&y.referenceFrame===b?y.intervals.addInterval(s):y instanceof uc?(m&&(s.data=new zl(s.data,b)),y.intervals.addInterval(s)):(e[t]=y=jAe(y),m&&(s.data=new zl(s.data,b)),y.intervals.addInterval(s));return}l(y)?y instanceof uc||(e[t]=y=jAe(y)):e[t]=y=new uc(b);let V=y.intervals;Z=V.findInterval(s),(!l(Z)||!(Z.data instanceof mc)||l(b)&&Z.data.referenceFrame!==b)&&(Z=s.clone(),Z.data=new mc(b,a),V.addInterval(Z)),Z.data.addSamplesPackedArray(d,_),iz(n,Z.data)}function cEe(e,t){if(e instanceof mc){e.removeSamples(t);return}else if(e instanceof pg){e.intervals.removeInterval(t);return}else if(e instanceof uc){let n=e.intervals;for(let i=0;i<n.length;++i){let o=Vn.intersect(n.get(i),t,FZ);o.isEmpty||cEe(o.data,t)}n.removeInterval(t);return}}function lEe(e,t,n,i,o,r){if(l(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)QAe(e,t,n[s],i,o,r);else QAe(e,t,n,i,o,r)}function qAe(e,t,n,i){l(n.references)?rz(e,t,n.references,n.interval,i,eG,hl):(l(n.cartesian2)?n.array=M.unpackArray(n.cartesian2):l(n.cartesian)&&(n.array=M.unpackArray(n.cartesian)),l(n.array)&&Ve(Array,e,t,n,void 0,void 0,i))}function $Ae(e,t,n,i,o,r){let s=kr(n.interval);l(i)&&(l(s)?s=Vn.intersect(s,i,FZ):s=i);let a=e[t],c,d;if(l(s)){a instanceof OR||(a=new OR,e[t]=a);let m=a.intervals;d=m.findInterval({start:s.start,stop:s.stop}),l(d)?c=d.data:(d=s.clone(),m.addInterval(d))}else c=a;let u;l(n.solidColor)?(c instanceof Jt||(c=new Jt),u=n.solidColor,Ve(U,c,"color",u.color,void 0,void 0,r)):l(n.grid)?(c instanceof zR||(c=new zR),u=n.grid,Ve(U,c,"color",u.color,void 0,o,r),Ve(Number,c,"cellAlpha",u.cellAlpha,void 0,o,r),Ve(M,c,"lineCount",u.lineCount,void 0,o,r),Ve(M,c,"lineThickness",u.lineThickness,void 0,o,r),Ve(M,c,"lineOffset",u.lineOffset,void 0,o,r)):l(n.image)?(c instanceof ox||(c=new ox),u=n.image,Ve(Image,c,"image",u.image,void 0,o,r),Ve(M,c,"repeat",u.repeat,void 0,o,r),Ve(U,c,"color",u.color,void 0,o,r),Ve(Boolean,c,"transparent",u.transparent,void 0,o,r)):l(n.stripe)?(c instanceof nG||(c=new nG),u=n.stripe,Ve(wf,c,"orientation",u.orientation,void 0,o,r),Ve(U,c,"evenColor",u.evenColor,void 0,o,r),Ve(U,c,"oddColor",u.oddColor,void 0,o,r),Ve(Number,c,"offset",u.offset,void 0,o,r),Ve(Number,c,"repeat",u.repeat,void 0,o,r)):l(n.polylineOutline)?(c instanceof Hx||(c=new Hx),u=n.polylineOutline,Ve(U,c,"color",u.color,void 0,o,r),Ve(U,c,"outlineColor",u.outlineColor,void 0,o,r),Ve(Number,c,"outlineWidth",u.outlineWidth,void 0,o,r)):l(n.polylineGlow)?(c instanceof qR||(c=new qR),u=n.polylineGlow,Ve(U,c,"color",u.color,void 0,o,r),Ve(Number,c,"glowPower",u.glowPower,void 0,o,r),Ve(Number,c,"taperPower",u.taperPower,void 0,o,r)):l(n.polylineArrow)?(c instanceof KR||(c=new KR),u=n.polylineArrow,Ve(U,c,"color",u.color,void 0,void 0,r)):l(n.polylineDash)?(c instanceof jR||(c=new jR),u=n.polylineDash,Ve(U,c,"color",u.color,void 0,void 0,r),Ve(U,c,"gapColor",u.gapColor,void 0,void 0,r),Ve(Number,c,"dashLength",u.dashLength,void 0,o,r),Ve(Number,c,"dashPattern",u.dashPattern,void 0,o,r)):l(n.checkerboard)&&(c instanceof UR||(c=new UR),u=n.checkerboard,Ve(U,c,"evenColor",u.evenColor,void 0,o,r),Ve(U,c,"oddColor",u.oddColor,void 0,o,r),Ve(M,c,"repeat",u.repeat,void 0,o,r)),l(d)?d.data=c:e[t]=c}function Bu(e,t,n,i,o,r){if(l(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)$Ae(e,t,n[s],i,o,r);else $Ae(e,t,n,i,o,r)}function Vvt(e,t,n,i){let o=t.name;l(o)&&(e.name=t.name)}function Cvt(e,t,n,i){let o=t.description;l(o)&&Ve(String,e,"description",o,void 0,i,n)}function Rvt(e,t,n,i){let o=t.position;l(o)&&lEe(e,"position",o,void 0,i,n)}function Gvt(e,t,n,i){let o=t.viewFrom;l(o)&&Ve(h,e,"viewFrom",o,void 0,i,n)}function Avt(e,t,n,i){let o=t.orientation;l(o)&&Ve(Ye,e,"orientation",o,void 0,i,n)}function Evt(e,t,n,i){let o=t.properties;if(l(o)){l(e.properties)||(e.properties=new Kl);for(let r in o)if(o.hasOwnProperty(r)){e.properties.hasProperty(r)||e.properties.addProperty(r);let s=o[r];if(Array.isArray(s))for(let a=0,c=s.length;a<c;++a)oz(HAe(s[a]),e.properties,r,s[a],void 0,i,n);else oz(HAe(s),e.properties,r,s,void 0,i,n)}}}function rz(e,t,n,i,o,r,s){let a=n.map(function(c){return pk(o,c)});if(l(i)){i=kr(i);let c=e[t];if(!(c instanceof s)){let d=new s;d.intervals.addInterval(hne(c)),e[t]=c=d}i.data=new r(a),c.intervals.addInterval(i)}else e[t]=new r(a)}function eEe(e,t,n,i){let o=n.references;l(o)?rz(e,t,o,n.interval,i,eG,hl):Ve(Array,e,t,n,void 0,void 0,i)}function tEe(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)eEe(e,t,n[o],i);else eEe(e,t,n,i)}function nEe(e,t,n,i){let o=n.references;l(o)?rz(e,t,o,n.interval,i,Eg,uc):(l(n.cartesian)?n.array=h.unpackArray(n.cartesian):l(n.cartographicRadians)?n.array=h.fromRadiansArrayHeights(n.cartographicRadians,ie.default):l(n.cartographicDegrees)&&(n.array=h.fromDegreesArrayHeights(n.cartographicDegrees,ie.default)),l(n.array)&&Ve(Array,e,t,n,void 0,void 0,i))}function yk(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)nEe(e,t,n[o],i);else nEe(e,t,n,i)}function Lvt(e){return h.unpackArray(e)}function Wvt(e){return h.fromRadiansArrayHeights(e,ie.default)}function vvt(e){return h.fromDegreesArrayHeights(e,ie.default)}function iEe(e,t,n,i){let o=n.references;if(l(o)){let r=o.map(function(s){let a={};return rz(a,"positions",s,n.interval,i,Eg,uc),a.positions});e[t]=new Eg(r)}else l(n.cartesian)?n.array=n.cartesian.map(Lvt):l(n.cartographicRadians)?n.array=n.cartographicRadians.map(Wvt):l(n.cartographicDegrees)&&(n.array=n.cartographicDegrees.map(vvt)),l(n.array)&&Ve(Array,e,t,n,void 0,void 0,i)}function Fvt(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)iEe(e,t,n[o],i);else iEe(e,t,n,i)}function Ivt(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;o++)qAe(e,t,n[o],i);else qAe(e,t,n,i)}function Pvt(e,t,n,i){let o=t.availability;if(!l(o))return;let r;if(Array.isArray(o))for(let s=0,a=o.length;s<a;++s)l(r)||(r=new fs),r.addInterval(kr(o[s]));else r=new fs,r.addInterval(kr(o));e.availability=r}function Xvt(e,t,n,i,o){l(t)&&Ve(Jx,e,"alignedAxis",t,n,i,o)}function Nvt(e,t,n,i){let o=t.billboard;if(!l(o))return;let r=kr(o.interval),s=e.billboard;l(s)||(e.billboard=s=new sl),Ve(Boolean,s,"show",o.show,r,i,n),Ve(Image,s,"image",o.image,r,i,n),Ve(Number,s,"scale",o.scale,r,i,n),Ve(M,s,"pixelOffset",o.pixelOffset,r,i,n),Ve(h,s,"eyeOffset",o.eyeOffset,r,i,n),Ve(Di,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),Ve(zn,s,"verticalOrigin",o.verticalOrigin,r,i,n),Ve(rt,s,"heightReference",o.heightReference,r,i,n),Ve(U,s,"color",o.color,r,i,n),Ve(uh,s,"rotation",o.rotation,r,i,n),Xvt(s,o.alignedAxis,r,i,n),Ve(Boolean,s,"sizeInMeters",o.sizeInMeters,r,i,n),Ve(Number,s,"width",o.width,r,i,n),Ve(Number,s,"height",o.height,r,i,n),Ve(Ht,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ve(Ht,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ve(Ht,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),Ve($e,s,"imageSubRegion",o.imageSubRegion,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ve(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function Yvt(e,t,n,i){let o=t.box;if(!l(o))return;let r=kr(o.interval),s=e.box;l(s)||(e.box=s=new O_),Ve(Boolean,s,"show",o.show,r,i,n),Ve(h,s,"dimensions",o.dimensions,r,i,n),Ve(rt,s,"heightReference",o.heightReference,r,i,n),Ve(Boolean,s,"fill",o.fill,r,i,n),Bu(s,"material",o.material,r,i,n),Ve(Boolean,s,"outline",o.outline,r,i,n),Ve(U,s,"outlineColor",o.outlineColor,r,i,n),Ve(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ve(Fn,s,"shadows",o.shadows,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function wvt(e,t,n,i){let o=t.corridor;if(!l(o))return;let r=kr(o.interval),s=e.corridor;l(s)||(e.corridor=s=new z_),Ve(Boolean,s,"show",o.show,r,i,n),yk(s,"positions",o.positions,n),Ve(Number,s,"width",o.width,r,i,n),Ve(Number,s,"height",o.height,r,i,n),Ve(rt,s,"heightReference",o.heightReference,r,i,n),Ve(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ve(rt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ve($i,s,"cornerType",o.cornerType,r,i,n),Ve(Number,s,"granularity",o.granularity,r,i,n),Ve(Boolean,s,"fill",o.fill,r,i,n),Bu(s,"material",o.material,r,i,n),Ve(Boolean,s,"outline",o.outline,r,i,n),Ve(U,s,"outlineColor",o.outlineColor,r,i,n),Ve(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ve(Fn,s,"shadows",o.shadows,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ve(ei,s,"classificationType",o.classificationType,r,i,n),Ve(Number,s,"zIndex",o.zIndex,r,i,n)}function Mvt(e,t,n,i){let o=t.cylinder;if(!l(o))return;let r=kr(o.interval),s=e.cylinder;l(s)||(e.cylinder=s=new H_),Ve(Boolean,s,"show",o.show,r,i,n),Ve(Number,s,"length",o.length,r,i,n),Ve(Number,s,"topRadius",o.topRadius,r,i,n),Ve(Number,s,"bottomRadius",o.bottomRadius,r,i,n),Ve(rt,s,"heightReference",o.heightReference,r,i,n),Ve(Boolean,s,"fill",o.fill,r,i,n),Bu(s,"material",o.material,r,i,n),Ve(Boolean,s,"outline",o.outline,r,i,n),Ve(U,s,"outlineColor",o.outlineColor,r,i,n),Ve(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ve(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),Ve(Number,s,"slices",o.slices,r,i,n),Ve(Fn,s,"shadows",o.shadows,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function kvt(e,t){let n=e.version;if(l(n)&&typeof n=="string"){let r=n.split(".");if(r.length===2){if(r[0]!=="1")throw new ae("Cesium only supports CZML version 1.");t._version=n}}if(!l(t._version))throw new ae("CZML version information invalid. It is expected to be a property on the document object in the <Major>.<Minor> version format.");let i=t._documentPacket;l(e.name)&&(i.name=e.name);let o=e.clock;if(l(o)){let r=i.clock;l(r)?(r.interval=o.interval??r.interval,r.currentTime=o.currentTime??r.currentTime,r.range=o.range??r.range,r.step=o.step??r.step,r.multiplier=o.multiplier??r.multiplier):i.clock={interval:o.interval,currentTime:o.currentTime,range:o.range,step:o.step,multiplier:o.multiplier}}}function Uvt(e,t,n,i){let o=t.ellipse;if(!l(o))return;let r=kr(o.interval),s=e.ellipse;l(s)||(e.ellipse=s=new K_),Ve(Boolean,s,"show",o.show,r,i,n),Ve(Number,s,"semiMajorAxis",o.semiMajorAxis,r,i,n),Ve(Number,s,"semiMinorAxis",o.semiMinorAxis,r,i,n),Ve(Number,s,"height",o.height,r,i,n),Ve(rt,s,"heightReference",o.heightReference,r,i,n),Ve(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ve(rt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ve(uh,s,"rotation",o.rotation,r,i,n),Ve(uh,s,"stRotation",o.stRotation,r,i,n),Ve(Number,s,"granularity",o.granularity,r,i,n),Ve(Boolean,s,"fill",o.fill,r,i,n),Bu(s,"material",o.material,r,i,n),Ve(Boolean,s,"outline",o.outline,r,i,n),Ve(U,s,"outlineColor",o.outlineColor,r,i,n),Ve(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ve(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),Ve(Fn,s,"shadows",o.shadows,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ve(ei,s,"classificationType",o.classificationType,r,i,n),Ve(Number,s,"zIndex",o.zIndex,r,i,n)}function Dvt(e,t,n,i){let o=t.ellipsoid;if(!l(o))return;let r=kr(o.interval),s=e.ellipsoid;l(s)||(e.ellipsoid=s=new J_),Ve(Boolean,s,"show",o.show,r,i,n),Ve(h,s,"radii",o.radii,r,i,n),Ve(h,s,"innerRadii",o.innerRadii,r,i,n),Ve(Number,s,"minimumClock",o.minimumClock,r,i,n),Ve(Number,s,"maximumClock",o.maximumClock,r,i,n),Ve(Number,s,"minimumCone",o.minimumCone,r,i,n),Ve(Number,s,"maximumCone",o.maximumCone,r,i,n),Ve(rt,s,"heightReference",o.heightReference,r,i,n),Ve(Boolean,s,"fill",o.fill,r,i,n),Bu(s,"material",o.material,r,i,n),Ve(Boolean,s,"outline",o.outline,r,i,n),Ve(U,s,"outlineColor",o.outlineColor,r,i,n),Ve(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ve(Number,s,"stackPartitions",o.stackPartitions,r,i,n),Ve(Number,s,"slicePartitions",o.slicePartitions,r,i,n),Ve(Number,s,"subdivisions",o.subdivisions,r,i,n),Ve(Fn,s,"shadows",o.shadows,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function Ovt(e,t,n,i){let o=t.label;if(!l(o))return;let r=kr(o.interval),s=e.label;l(s)||(e.label=s=new qh),Ve(Boolean,s,"show",o.show,r,i,n),Ve(String,s,"text",o.text,r,i,n),Ve(String,s,"font",o.font,r,i,n),Ve(fr,s,"style",o.style,r,i,n),Ve(Number,s,"scale",o.scale,r,i,n),Ve(Boolean,s,"showBackground",o.showBackground,r,i,n),Ve(U,s,"backgroundColor",o.backgroundColor,r,i,n),Ve(M,s,"backgroundPadding",o.backgroundPadding,r,i,n),Ve(M,s,"pixelOffset",o.pixelOffset,r,i,n),Ve(h,s,"eyeOffset",o.eyeOffset,r,i,n),Ve(Di,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),Ve(zn,s,"verticalOrigin",o.verticalOrigin,r,i,n),Ve(rt,s,"heightReference",o.heightReference,r,i,n),Ve(U,s,"fillColor",o.fillColor,r,i,n),Ve(U,s,"outlineColor",o.outlineColor,r,i,n),Ve(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ve(Ht,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ve(Ht,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),Ve(Ht,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ve(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function Bvt(e,t,n,i){let o=t.model;if(!l(o))return;let r=kr(o.interval),s=e.model;l(s)||(e.model=s=new Eb),Ve(Boolean,s,"show",o.show,r,i,n),Ve(gk.default,s,"uri",o.gltf,r,i,n),Ve(Number,s,"scale",o.scale,r,i,n),Ve(Number,s,"minimumPixelSize",o.minimumPixelSize,r,i,n),Ve(Number,s,"maximumScale",o.maximumScale,r,i,n),Ve(Boolean,s,"incrementallyLoadTextures",o.incrementallyLoadTextures,r,i,n),Ve(Boolean,s,"runAnimations",o.runAnimations,r,i,n),Ve(Boolean,s,"clampAnimations",o.clampAnimations,r,i,n),Ve(Fn,s,"shadows",o.shadows,r,i,n),Ve(rt,s,"heightReference",o.heightReference,r,i,n),Ve(U,s,"silhouetteColor",o.silhouetteColor,r,i,n),Ve(Number,s,"silhouetteSize",o.silhouetteSize,r,i,n),Ve(U,s,"color",o.color,r,i,n),Ve(ll,s,"colorBlendMode",o.colorBlendMode,r,i,n),Ve(Number,s,"colorBlendAmount",o.colorBlendAmount,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n);let a,c,d=o.nodeTransformations;if(l(d))if(Array.isArray(d))for(a=0,c=d.length;a<c;++a)oEe(s,d[a],r,i,n);else oEe(s,d,r,i,n);let u=o.articulations;if(l(u))if(Array.isArray(u))for(a=0,c=u.length;a<c;++a)rEe(s,u[a],r,i,n);else rEe(s,u,r,i,n)}function oEe(e,t,n,i,o){let r=kr(t.interval);l(n)&&(l(r)?r=Vn.intersect(r,n,FZ):r=n);let s=e.nodeTransformations,a=Object.keys(t);for(let c=0,d=a.length;c<d;++c){let u=a[c];if(u==="interval")continue;let m=t[u];if(!l(m))continue;l(s)||(e.nodeTransformations=s=new Kl),s.hasProperty(u)||s.addProperty(u);let p=s[u];l(p)||(s[u]=p=new j_),Ve(h,p,"translation",m.translation,r,i,o),Ve(Ye,p,"rotation",m.rotation,r,i,o),Ve(h,p,"scale",m.scale,r,i,o)}}function rEe(e,t,n,i,o){let r=kr(t.interval);l(n)&&(l(r)?r=Vn.intersect(r,n,FZ):r=n);let s=e.articulations,a=Object.keys(t);for(let c=0,d=a.length;c<d;++c){let u=a[c];if(u==="interval")continue;let m=t[u];l(m)&&(l(s)||(e.articulations=s=new Kl),s.hasProperty(u)||s.addProperty(u),Ve(Number,s,u,m,r,i,o))}}function zvt(e,t,n,i){let o=t.path;if(!l(o))return;let r=kr(o.interval),s=e.path;l(s)||(e.path=s=new Lb),Ve(Boolean,s,"show",o.show,r,i,n),Ve(Number,s,"leadTime",o.leadTime,r,i,n),Ve(Number,s,"trailTime",o.trailTime,r,i,n),Ve(Number,s,"width",o.width,r,i,n),Ve(Number,s,"resolution",o.resolution,r,i,n),Bu(s,"material",o.material,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ve(String,s,"relativeTo",o.relativeTo,r,i,n),Ve(jp,s,"materialMode",o.materialMode,r,i,n)}function Hvt(e,t,n,i){let o=t.point;if(!l(o))return;let r=kr(o.interval),s=e.point;l(s)||(e.point=s=new q_),Ve(Boolean,s,"show",o.show,r,i,n),Ve(Number,s,"pixelSize",o.pixelSize,r,i,n),Ve(rt,s,"heightReference",o.heightReference,r,i,n),Ve(U,s,"color",o.color,r,i,n),Ve(U,s,"outlineColor",o.outlineColor,r,i,n),Ve(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ve(Ht,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ve(Ht,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ve(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function bk(e){this.polygon=e,this._definitionChanged=new Se}Object.defineProperties(bk.prototype,{isConstant:{get:function(){let e=this.polygon._positions,t=this.polygon._holes;return(!l(e)||e.isConstant)&&(!l(t)||t.isConstant)}},definitionChanged:{get:function(){return this._definitionChanged}}});bk.prototype.getValue=function(e,t){let n;l(this.polygon._positions)&&(n=this.polygon._positions.getValue(e));let i;return l(this.polygon._holes)&&(i=this.polygon._holes.getValue(e),l(i)&&(i=i.map(function(o){return new Ec(o)}))),l(t)?(t.positions=n,t.holes=i,t):new Ec(n,i)};bk.prototype.equals=function(e){return this===e||e instanceof bk&&j.equals(this.polygon._positions,e.polygon._positions)&&j.equals(this.polygon._holes,e.polygon._holes)};function Kvt(e,t,n,i){let o=t.polygon;if(!l(o))return;let r=kr(o.interval),s=e.polygon;l(s)||(e.polygon=s=new $h),Ve(Boolean,s,"show",o.show,r,i,n),yk(s,"_positions",o.positions,n),Fvt(s,"_holes",o.holes,n),(l(s._positions)||l(s._holes))&&(s.hierarchy=new bk(s)),Ve(Number,s,"height",o.height,r,i,n),Ve(rt,s,"heightReference",o.heightReference,r,i,n),Ve(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ve(rt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ve(uh,s,"stRotation",o.stRotation,r,i,n),Ve(Number,s,"granularity",o.granularity,r,i,n),Ve(Boolean,s,"fill",o.fill,r,i,n),Bu(s,"material",o.material,r,i,n),Ve(Boolean,s,"outline",o.outline,r,i,n),Ve(U,s,"outlineColor",o.outlineColor,r,i,n),Ve(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ve(Boolean,s,"perPositionHeight",o.perPositionHeight,r,i,n),Ve(Boolean,s,"closeTop",o.closeTop,r,i,n),Ve(Boolean,s,"closeBottom",o.closeBottom,r,i,n),Ve(ln,s,"arcType",o.arcType,r,i,n),Ve(Fn,s,"shadows",o.shadows,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ve(ei,s,"classificationType",o.classificationType,r,i,n),Ve(Number,s,"zIndex",o.zIndex,r,i,n)}function Jvt(e){return e?ln.GEODESIC:ln.NONE}function jvt(e,t,n,i){let o=t.polyline;if(!l(o))return;let r=kr(o.interval),s=e.polyline;if(l(s)||(e.polyline=s=new al),Ve(Boolean,s,"show",o.show,r,i,n),yk(s,"positions",o.positions,n),Ve(Number,s,"width",o.width,r,i,n),Ve(Number,s,"granularity",o.granularity,r,i,n),Bu(s,"material",o.material,r,i,n),Bu(s,"depthFailMaterial",o.depthFailMaterial,r,i,n),Ve(ln,s,"arcType",o.arcType,r,i,n),Ve(Boolean,s,"clampToGround",o.clampToGround,r,i,n),Ve(Fn,s,"shadows",o.shadows,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ve(ei,s,"classificationType",o.classificationType,r,i,n),Ve(Number,s,"zIndex",o.zIndex,r,i,n),l(o.followSurface)&&!l(o.arcType)){let a={};Ve(Boolean,a,"followSurface",o.followSurface,r,i,n),s.arcType=hvt(a.followSurface,Jvt)}}function Qvt(e,t,n,i){let o=t.polylineVolume;if(!l(o))return;let r=kr(o.interval),s=e.polylineVolume;l(s)||(e.polylineVolume=s=new $_),yk(s,"positions",o.positions,n),Ivt(s,"shape",o.shape,n),Ve(Boolean,s,"show",o.show,r,i,n),Ve($i,s,"cornerType",o.cornerType,r,i,n),Ve(Boolean,s,"fill",o.fill,r,i,n),Bu(s,"material",o.material,r,i,n),Ve(Boolean,s,"outline",o.outline,r,i,n),Ve(U,s,"outlineColor",o.outlineColor,r,i,n),Ve(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ve(Number,s,"granularity",o.granularity,r,i,n),Ve(Fn,s,"shadows",o.shadows,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function qvt(e,t,n,i){let o=t.rectangle;if(!l(o))return;let r=kr(o.interval),s=e.rectangle;l(s)||(e.rectangle=s=new ef),Ve(Boolean,s,"show",o.show,r,i,n),Ve(re,s,"coordinates",o.coordinates,r,i,n),Ve(Number,s,"height",o.height,r,i,n),Ve(rt,s,"heightReference",o.heightReference,r,i,n),Ve(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ve(rt,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ve(uh,s,"rotation",o.rotation,r,i,n),Ve(uh,s,"stRotation",o.stRotation,r,i,n),Ve(Number,s,"granularity",o.granularity,r,i,n),Ve(Boolean,s,"fill",o.fill,r,i,n),Bu(s,"material",o.material,r,i,n),Ve(Boolean,s,"outline",o.outline,r,i,n),Ve(U,s,"outlineColor",o.outlineColor,r,i,n),Ve(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ve(Fn,s,"shadows",o.shadows,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ve(ei,s,"classificationType",o.classificationType,r,i,n),Ve(Number,s,"zIndex",o.zIndex,r,i,n)}function $vt(e,t,n,i){let o=t.tileset;if(!l(o))return;let r=kr(o.interval),s=e.tileset;l(s)||(e.tileset=s=new Q_),Ve(Boolean,s,"show",o.show,r,i,n),Ve(gk.default,s,"uri",o.uri,r,i,n),Ve(Number,s,"maximumScreenSpaceError",o.maximumScreenSpaceError,r,i,n)}function e2t(e,t,n,i){let o=t.wall;if(!l(o))return;let r=kr(o.interval),s=e.wall;l(s)||(e.wall=s=new Wb),Ve(Boolean,s,"show",o.show,r,i,n),yk(s,"positions",o.positions,n),tEe(s,"minimumHeights",o.minimumHeights,n),tEe(s,"maximumHeights",o.maximumHeights,n),Ve(Number,s,"granularity",o.granularity,r,i,n),Ve(Boolean,s,"fill",o.fill,r,i,n),Bu(s,"material",o.material,r,i,n),Ve(Boolean,s,"outline",o.outline,r,i,n),Ve(U,s,"outlineColor",o.outlineColor,r,i,n),Ve(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ve(Fn,s,"shadows",o.shadows,r,i,n),Ve(Ot,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function sEe(e,t,n,i,o){let r=e.id;if(l(r)||(r=Qn()),une=r,!l(o._version)&&r!=="document")throw new ae("The first CZML packet is required to be the document object.");if(e.delete===!0)t.removeById(r);else if(r==="document")kvt(e,o);else{let s=t.getOrCreateEntity(r),a=e.parent;l(a)&&(s.parent=t.getOrCreateEntity(a));for(let c=n.length-1;c>-1;c--)n[c](s,e,t,i)}une=void 0}function t2t(e){let t,n=e._documentPacket.clock;if(!l(n)){if(!l(e._clock)){let o=e._entityCollection.computeAvailability();if(!o.start.equals(tt.MINIMUM_VALUE)){let r=o.start,s=o.stop,a=Q.secondsDifference(s,r),c=Math.round(a/120);return t=new Yf,t.startTime=Q.clone(r),t.stopTime=Q.clone(s),t.clockRange=as.LOOP_STOP,t.multiplier=c,t.currentTime=Q.clone(r),t.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,e._clock=t,!0}}return!1}l(e._clock)?t=e._clock.clone():(t=new Yf,t.startTime=tt.MINIMUM_VALUE.clone(),t.stopTime=tt.MAXIMUM_VALUE.clone(),t.currentTime=tt.MINIMUM_VALUE.clone(),t.clockRange=as.LOOP_STOP,t.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,t.multiplier=1);let i=kr(n.interval);return l(i)&&(t.startTime=i.start,t.stopTime=i.stop),l(n.currentTime)&&(t.currentTime=Q.fromIso8601(n.currentTime)),l(n.range)&&(t.clockRange=as[n.range]??as.LOOP_STOP),l(n.step)&&(t.clockStep=Xo[n.step]??Xo.SYSTEM_CLOCK_MULTIPLIER),l(n.multiplier)&&(t.multiplier=n.multiplier),t.equals(e._clock)?!1:(e._clock=t.clone(e._clock),!0)}function dEe(e,t,n,i){n=n??B.EMPTY_OBJECT;let o=t,r=n.sourceUri,s=n.credit;if(typeof s=="string"&&(s=new At(s)),e._credit=s,typeof t=="string"||t instanceof ve){t=ve.createIfNeeded(t),o=t.fetchJson(),r=r??t.clone();let a=e._resourceCredits,c=t.credits;if(l(c)){let d=c.length;for(let u=0;u<d;u++)a.push(c[u])}}return r=ve.createIfNeeded(r),bs.setLoading(e,!0),Promise.resolve(o).then(function(a){return n2t(e,a,r,i)}).catch(function(a){return bs.setLoading(e,!1),e._error.raiseEvent(e,a),console.log(a),Promise.reject(a)})}function n2t(e,t,n,i){bs.setLoading(e,!0);let o=e._entityCollection;i&&(e._version=void 0,e._documentPacket=new uEe,o.removeAll()),qs._processCzml(t,o,n,void 0,e);let r=t2t(e),s=e._documentPacket;return l(s.name)&&e._name!==s.name?(e._name=s.name,r=!0):!l(e._name)&&l(n)&&(e._name=gb(n.getUrlComponent()),r=!0),bs.setLoading(e,!1),r&&e._changed.raiseEvent(e),e}function uEe(){this.name=void 0,this.clock=void 0}function qs(e){this._name=e,this._changed=new Se,this._error=new Se,this._isLoading=!1,this._loading=new Se,this._clock=void 0,this._documentPacket=new uEe,this._version=void 0,this._entityCollection=new Pa(this),this._entityCluster=new _u,this._credit=void 0,this._resourceCredits=[]}qs.load=function(e,t){return new qs().load(e,t)};Object.defineProperties(qs.prototype,{name:{get:function(){return this._name}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}},credit:{get:function(){return this._credit}}});qs.updaters=[Nvt,Yvt,wvt,Mvt,Uvt,Dvt,Ovt,Bvt,Vvt,Cvt,zvt,Hvt,Kvt,jvt,Qvt,Evt,qvt,Rvt,$vt,Gvt,e2t,Avt,Pvt];qs.registerUpdater=function(e){qs.updaters.includes(e)||qs.updaters.push(e)};qs.unregisterUpdater=function(e){if(qs.updaters.includes(e)){let t=qs.updaters.indexOf(e);qs.updaters.splice(t,1)}};qs.prototype.process=function(e,t){return dEe(this,e,t,!1)};qs.prototype.load=function(e,t){return dEe(this,e,t,!0)};qs.prototype.update=function(e){return!0};qs.processPacketData=Ve;qs.processPositionPacketData=lEe;qs.processMaterialPacketData=Bu;qs._processCzml=function(e,t,n,i,o){if(i=i??qs.updaters,Array.isArray(e))for(let r=0,s=e.length;r<s;++r)sEe(e[r],t,i,n,o);else sEe(e,t,i,n,o)};var xk=qs;var S_o=x(T(),1);var kTo=x(T());var rTo=x(T());var nTo=x(T());var $xo=x(T());function fne(e){return e}function sz(e){if(e==null)return fne;var t,n,i=e.scale[0],o=e.scale[1],r=e.translate[0],s=e.translate[1];return function(a,c){c||(t=n=0);var d=2,u=a.length,m=new Array(u);for(m[0]=(t+=a[0])*i+r,m[1]=(n+=a[1])*o+s;d<u;)m[d]=a[d],++d;return m}}var uTo=x(T());var aTo=x(T());function mEe(e,t){for(var n,i=e.length,o=i-t;o<--i;)n=e[o],e[o++]=e[i],e[i]=n}function pne(e,t){return typeof t=="string"&&(t=e.objects[t]),t.type==="GeometryCollection"?{type:"FeatureCollection",features:t.geometries.map(function(n){return hEe(e,n)})}:hEe(e,t)}function hEe(e,t){var n=t.id,i=t.bbox,o=t.properties==null?{}:t.properties,r=bne(e,t);return n==null&&i==null?{type:"Feature",properties:o,geometry:r}:i==null?{type:"Feature",id:n,properties:o,geometry:r}:{type:"Feature",id:n,bbox:i,properties:o,geometry:r}}function bne(e,t){var n=sz(e.transform),i=e.arcs;function o(u,m){m.length&&m.pop();for(var p=i[u<0?~u:u],b=0,f=p.length;b<f;++b)m.push(n(p[b],b));u<0&&mEe(m,f)}function r(u){return n(u)}function s(u){for(var m=[],p=0,b=u.length;p<b;++p)o(u[p],m);return m.length<2&&m.push(m[0]),m}function a(u){for(var m=s(u);m.length<4;)m.push(m[0]);return m}function c(u){return u.map(a)}function d(u){var m=u.type,p;switch(m){case"GeometryCollection":return{type:m,geometries:u.geometries.map(d)};case"Point":p=r(u.coordinates);break;case"MultiPoint":p=u.coordinates.map(r);break;case"LineString":p=s(u.arcs);break;case"MultiLineString":p=u.arcs.map(s);break;case"Polygon":p=c(u.arcs);break;case"MultiPolygon":p=u.arcs.map(c);break;default:return null}return{type:m,coordinates:p}}return d(t)}var gTo=x(T());var hTo=x(T());var _To=x(T());var GTo=x(T());var ZTo=x(T());var ITo=x(T());var LTo=x(T());function az(e){return h.fromDegrees(e[0],e[1],e[2])}var gne={"urn:ogc:def:crs:OGC:1.3:CRS84":az,"EPSG:4326":az,"urn:ogc:def:crs:EPSG::4326":az},fEe={},pEe={},yne=48,xne,Tne=U.ROYALBLUE,_ne=U.YELLOW,Sne=2,Zne=U.fromBytes(255,255,0,100),Vne=!1,a2t={small:24,medium:48,large:64},c2t=["title","description","marker-size","marker-symbol","marker-color","stroke","stroke-opacity","stroke-width","fill","fill-opacity"];function bEe(e,t){let n="";for(let i in e)if(e.hasOwnProperty(i)){if(i===t||c2t.indexOf(i)!==-1)continue;let o=e[i];l(o)&&(typeof o=="object"?n+=`<tr><th>${i}</th><td>${bEe(o)}</td></tr>`:n+=`<tr><th>${i}</th><td>${o}</td></tr>`)}return n.length>0&&(n=`<table class="cesium-infoBox-defaultTable"><tbody>${n}</tbody></table>`),n}function l2t(e,t,n){let i;return function(o,r){return l(i)||(i=e(t,n)),i}}function d2t(e,t){return new tf(l2t(bEe,e,t),!0)}function cz(e,t,n){let i=e.id;if(!l(i)||e.type!=="Feature")i=Qn();else{let s=2,a=i;for(;l(t.getById(a));)a=`${i}_${s}`,s++;i=a}let o=t.getOrCreateEntity(i),r=e.properties;if(l(r)){o.properties=r;let s,a=r.title;if(l(a))o.name=a,s="title";else{let d=Number.MAX_VALUE;for(let u in r)if(r.hasOwnProperty(u)&&r[u]){let m=u.toLowerCase();if(d>1&&m==="title"){s=u;break}else d>2&&m==="name"?(d=2,s=u):d>3&&/title/i.test(u)?(d=3,s=u):d>4&&/name/i.test(u)&&(d=4,s=u)}l(s)&&(o.name=r[s])}let c=r.description;c!==null&&(o.description=l(c)?new pi(c):n(r,s))}return o}function Cne(e,t){let n=new Array(e.length);for(let i=0;i<e.length;i++)n[i]=t(e[i]);return n}var gEe={Feature:xEe,FeatureCollection:u2t,GeometryCollection:TEe,LineString:CEe,MultiLineString:REe,MultiPoint:ZEe,MultiPolygon:EEe,Point:SEe,Polygon:AEe,Topology:LEe},yEe={GeometryCollection:TEe,LineString:CEe,MultiLineString:REe,MultiPoint:ZEe,MultiPolygon:EEe,Point:SEe,Polygon:AEe,Topology:LEe};function xEe(e,t,n,i,o){if(t.geometry===null){cz(t,e._entityCollection,o.describe);return}if(!l(t.geometry))throw new ae("feature.geometry is required.");let r=t.geometry.type,s=yEe[r];if(!l(s))throw new ae(`Unknown geometry type: ${r}`);s(e,t,t.geometry,i,o)}function u2t(e,t,n,i,o){let r=t.features;for(let s=0,a=r.length;s<a;s++)xEe(e,r[s],void 0,i,o)}function TEe(e,t,n,i,o){let r=n.geometries;for(let s=0,a=r.length;s<a;s++){let c=r[s],d=c.type,u=yEe[d];if(!l(u))throw new ae(`Unknown geometry type: ${d}`);u(e,t,c,i,o)}}function _Ee(e,t,n,i,o){let r=o.markerSymbol,s=o.markerColor,a=o.markerSize,c=t.properties;if(l(c)){let b=c["marker-color"];l(b)&&(s=U.fromCssColorString(b)),a=a2t[c["marker-size"]]??a;let f=c["marker-symbol"];l(f)&&(r=f)}let d;l(r)?r.length===1?d=e._pinBuilder.fromText(r.toUpperCase(),s,a):d=e._pinBuilder.fromMakiIconId(r,s,a):d=e._pinBuilder.fromColor(s,a);let u=new sl;u.verticalOrigin=new pi(zn.BOTTOM),i.length===2&&o.clampToGround&&(u.heightReference=rt.CLAMP_TO_GROUND);let m=cz(t,e._entityCollection,o.describe);m.billboard=u,m.position=new zl(n(i));let p=Promise.resolve(d).then(function(b){u.image=new pi(b)}).catch(function(){u.image=new pi(e._pinBuilder.fromColor(s,a))});e._promises.push(p)}function SEe(e,t,n,i,o){_Ee(e,t,i,n.coordinates,o)}function ZEe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)_Ee(e,t,i,r[s],o)}function VEe(e,t,n,i,o){let r=o.strokeMaterialProperty,s=o.strokeWidthProperty,a=t.properties;if(l(a)){let u=a["stroke-width"];l(u)&&(s=new pi(u));let m,p=a.stroke;l(p)&&(m=U.fromCssColorString(p));let b=a["stroke-opacity"];l(b)&&b!==1&&(l(m)||(m=r.color.getValue().clone()),m.alpha=b),l(m)&&(r=new Jt(m))}let c=cz(t,e._entityCollection,o.describe),d=new al;c.polyline=d,d.clampToGround=o.clampToGround,d.material=r,d.width=s,d.positions=new pi(Cne(i,n)),d.arcType=ln.RHUMB}function CEe(e,t,n,i,o){VEe(e,t,i,n.coordinates,o)}function REe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)VEe(e,t,i,r[s],o)}function GEe(e,t,n,i,o){if(i.length===0||i[0].length===0)return;let r=o.strokeMaterialProperty.color,s=o.fillMaterialProperty,a=o.strokeWidthProperty,c=t.properties;if(l(c)){let b=c["stroke-width"];l(b)&&(a=new pi(b));let f,y=c.stroke;l(y)&&(f=U.fromCssColorString(y));let _=c["stroke-opacity"];l(_)&&_!==1&&(l(f)||(f=r.getValue().clone()),f.alpha=_),l(f)&&(r=new pi(f));let S,Z=c.fill,V=s.color.getValue();l(Z)&&(S=U.fromCssColorString(Z),S.alpha=V.alpha),_=c["fill-opacity"],l(_)&&_!==V.alpha&&(l(S)||(S=V.clone()),S.alpha=_),l(S)&&(s=new Jt(S))}let d=new $h;d.outline=new pi(!0),d.outlineColor=r,d.outlineWidth=a,d.material=s,d.arcType=ln.RHUMB;let u=[];for(let b=1,f=i.length;b<f;b++)u.push(new Ec(Cne(i[b],n)));let m=i[0];d.hierarchy=new pi(new Ec(Cne(m,n),u)),m[0].length>2?d.perPositionHeight=new pi(!0):o.clampToGround||(d.height=0);let p=cz(t,e._entityCollection,o.describe);p.polygon=d}function AEe(e,t,n,i,o){GEe(e,t,i,n.coordinates,o)}function EEe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)GEe(e,t,i,r[s],o)}function LEe(e,t,n,i,o){for(let r in n.objects)if(n.objects.hasOwnProperty(r)){let s=pne(n,n.objects[r]),a=gEe[s.type];a(e,s,s,i,o)}}function jx(e){this._name=e,this._changed=new Se,this._error=new Se,this._isLoading=!1,this._loading=new Se,this._entityCollection=new Pa(this),this._promises=[],this._pinBuilder=new lb,this._entityCluster=new _u,this._credit=void 0,this._resourceCredits=[]}jx.load=function(e,t){return new jx().load(e,t)};Object.defineProperties(jx,{markerSize:{get:function(){return yne},set:function(e){yne=e}},markerSymbol:{get:function(){return xne},set:function(e){xne=e}},markerColor:{get:function(){return Tne},set:function(e){Tne=e}},stroke:{get:function(){return _ne},set:function(e){_ne=e}},strokeWidth:{get:function(){return Sne},set:function(e){Sne=e}},fill:{get:function(){return Zne},set:function(e){Zne=e}},clampToGround:{get:function(){return Vne},set:function(e){Vne=e}},crsNames:{get:function(){return gne}},crsLinkHrefs:{get:function(){return fEe}},crsLinkTypes:{get:function(){return pEe}}});Object.defineProperties(jx.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{value:void 0,writable:!1},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}},credit:{get:function(){return this._credit}}});jx.prototype.load=function(e,t){return WEe(this,e,t,!0)};jx.prototype.process=function(e,t){return WEe(this,e,t,!1)};function WEe(e,t,n,i){bs.setLoading(e,!0),n=n??B.EMPTY_OBJECT;let o=n.credit;typeof o=="string"&&(o=new At(o)),e._credit=o;let r=t,s=n.sourceUri;if(typeof t=="string"||t instanceof ve){t=ve.createIfNeeded(t),r=t.fetchJson(),s=s??t.getUrlComponent();let a=e._resourceCredits,c=t.credits;if(l(c)){let d=c.length;for(let u=0;u<d;u++)a.push(c[u])}}return n={describe:n.describe??d2t,markerSize:n.markerSize??yne,markerSymbol:n.markerSymbol??xne,markerColor:n.markerColor??Tne,strokeWidthProperty:new pi(n.strokeWidth??Sne),strokeMaterialProperty:new Jt(n.stroke??_ne),fillMaterialProperty:new Jt(n.fill??Zne),clampToGround:n.clampToGround??Vne},Promise.resolve(r).then(function(a){return m2t(e,a,n,s,i)}).catch(function(a){throw bs.setLoading(e,!1),e._error.raiseEvent(e,a),a})}jx.prototype.update=function(e){return!0};function m2t(e,t,n,i,o){let r;l(i)&&(r=gb(i)),l(r)&&e._name!==r&&(e._name=r,e._changed.raiseEvent(e));let s=gEe[t.type];if(!l(s))throw new ae(`Unsupported GeoJSON object type: ${t.type}`);let a=t.crs,c=a!==null?az:null;if(l(a)){if(!l(a.properties))throw new ae("crs.properties is undefined.");let d=a.properties;if(a.type==="name"){if(c=gne[d.name],!l(c))throw new ae(`Unknown crs name: ${d.name}`)}else if(a.type==="link"){let u=fEe[d.href];if(l(u)||(u=pEe[d.type]),!l(u))throw new ae(`Unable to resolve crs link: ${JSON.stringify(d)}`);c=u(d)}else if(a.type==="EPSG"){if(c=gne[`EPSG:${d.code}`],!l(c))throw new ae(`Unknown crs EPSG code: ${d.code}`)}else throw new ae(`Unknown crs type: ${a.type}`)}return Promise.resolve(c).then(function(d){return o&&e._entityCollection.removeAll(),d!==null&&s(e,t,t,d,n),Promise.all(e._promises).then(function(){return e._promises.length=0,bs.setLoading(e,!1),e})})}var Qx=jx;var hVo=x(T(),1);var GZo=x(T());var uZo=x(T());var V_o=x(T(),1),Rne=function(e,t){return Rne=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},Rne(e,t)};function m0(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Rne(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var $s=function(){return $s=Object.assign||function(t){for(var n,i=1,o=arguments.length;i<o;i++){n=arguments[i];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},$s.apply(this,arguments)};function vEe(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var i=n.call(e),o,r=[],s;try{for(;(t===void 0||t-- >0)&&!(o=i.next()).done;)r.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(s)throw s.error}}return r}function FEe(e,t,n){if(n||arguments.length===2)for(var i=0,o=t.length,r;i<o;i++)(r||!(i in t))&&(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}var R_o=x(T()),IEe="4.1.5";var A_o=x(T()),PEe=Object.prototype.hasOwnProperty;function zu(e){return typeof e=="boolean"}function XEe(e,t,n){var i;return e.length>t&&(n==null?(n="…",i=3):i=n.length,e=e.substring(0,t-i)+n),e}function qx(e,t){for(var n=e.length-1;n>=0;n--)t(e[n])===!0&&e.splice(n,1)}function Mf(e){throw new Error("Unhandled case for value: '".concat(e,"'"))}var O_o=x(T());var W_o=x(T());var lz=/\s+/,dz=(function(){function e(t){t===void 0&&(t={}),this.tagName="",this.attrs={},this.innerHTML="",this.tagName=t.tagName||"",this.attrs=t.attrs||{},this.innerHTML=t.innerHtml||t.innerHTML||""}return e.prototype.setTagName=function(t){return this.tagName=t,this},e.prototype.getTagName=function(){return this.tagName},e.prototype.setAttr=function(t,n){var i=this.getAttrs();return i[t]=n,this},e.prototype.getAttr=function(t){return this.getAttrs()[t]},e.prototype.setAttrs=function(t){return Object.assign(this.getAttrs(),t),this},e.prototype.getAttrs=function(){return this.attrs},e.prototype.setClass=function(t){return this.setAttr("class",t)},e.prototype.addClass=function(t){for(var n=this.getClass(),i=n?n.split(lz):[],o=t.split(lz),r;r=o.shift();)i.indexOf(r)===-1&&i.push(r);return this.getAttrs().class=i.join(" "),this},e.prototype.removeClass=function(t){for(var n=this.getClass(),i=n?n.split(lz):[],o=t.split(lz),r;i.length&&(r=o.shift());){var s=i.indexOf(r);s!==-1&&i.splice(s,1)}return this.getAttrs().class=i.join(" "),this},e.prototype.getClass=function(){return this.getAttrs().class||""},e.prototype.hasClass=function(t){return(" "+this.getClass()+" ").indexOf(" "+t+" ")!==-1},e.prototype.setInnerHTML=function(t){return this.innerHTML=t,this},e.prototype.setInnerHtml=function(t){return this.setInnerHTML(t)},e.prototype.getInnerHTML=function(){return this.innerHTML||""},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var t=this.getTagName(),n=this.buildAttrsStr();return n=n?" "+n:"",["<",t,n,">",this.getInnerHtml(),"</",t,">"].join("")},e.prototype.buildAttrsStr=function(){var t=this.getAttrs(),n=[];for(var i in t)PEe.call(t,i)&&n.push(i+'="'+t[i]+'"');return n.join(" ")},e})();var F_o=x(T());function YEe(e,t,n){var i,o;if(n==null?(n="…",o=3,i=8):(o=n.length,i=n.length),e.length<=t)return e;var r=t-o,s=h2t(e);if(s.query){var a=s.query.match(/^(.*?)(?=(\?|#))(.*?)$/i);a&&(s.query=s.query.substr(0,a[1].length),e=NEe(s))}if(e.length<=t||(s.host&&(s.host=s.host.replace(/^www\./,""),e=NEe(s)),e.length<=t))return e;var c="";if(s.host&&(c+=s.host),c.length>=r)return s.host.length===t?(s.host.substr(0,t-o)+n).substr(0,r+i):Gne(c,r,n).substr(0,r+i);var d="";if(s.path&&(d+="/"+s.path),s.query&&(d+="?"+s.query),d)if((c+d).length>=r){if((c+d).length==t)return(c+d).substr(0,t);var u=r-c.length;return(c+Gne(d,u,n)).substr(0,r+i)}else c+=d;if(s.fragment){var m="#"+s.fragment;if((c+m).length>=r){if((c+m).length==t)return(c+m).substr(0,t);var p=r-c.length;return(c+Gne(m,p,n)).substr(0,r+i)}else c+=m}if(s.scheme&&s.host){var b=s.scheme+"://";if((c+b).length<r)return(b+c).substr(0,t)}if(c.length<=t)return c;var f="";return r>0&&(f=c.substr(-1*Math.floor(r/2))),(c.substr(0,Math.ceil(r/2))+n+f).substr(0,r+i)}function h2t(e){var t={},n=e,i=n.match(/^([a-z]+):\/\//i);return i&&(t.scheme=i[1],n=n.slice(i[0].length)),i=n.match(/^(.*?)(?=(\?|#|\/|$))/i),i&&(t.host=i[1],n=n.slice(i[0].length)),i=n.match(/^\/(.*?)(?=(\?|#|$))/i),i&&(t.path=i[1],n=n.slice(i[0].length)),i=n.match(/^\?(.*?)(?=(#|$))/i),i&&(t.query=i[1],n=n.slice(i[0].length)),i=n.match(/^#(.*?)$/i),i&&(t.fragment=i[1]),t}function NEe(e){var t="";return e.scheme&&e.host&&(t+=e.scheme+"://"),e.host&&(t+=e.host),e.path&&(t+="/"+e.path),e.query&&(t+="?"+e.query),e.fragment&&(t+="#"+e.fragment),t}function Gne(e,t,n){var i=t/2,o=Math.ceil(i),r=-1*Math.floor(i),s="";return r<0&&(s=e.substr(r)),e.substr(0,o)+n+s}var P_o=x(T());function wEe(e,t,n){if(e.length<=t)return e;var i,o;n==null?(n="…",i=8,o=3):(i=n.length,o=n.length);var r=t-o,s="";return r>0&&(s=e.substr(-1*Math.floor(r/2))),(e.substr(0,Math.ceil(r/2))+n+s).substr(0,r+i)}var Y_o=x(T());function MEe(e,t,n){return XEe(e,t,n)}var kEe=(function(){function e(t){t===void 0&&(t={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=t.newWindow||!1,this.truncate=t.truncate||{},this.className=t.className||""}return e.prototype.build=function(t){return new dz({tagName:"a",attrs:this.createAttrs(t),innerHtml:this.processAnchorText(t.getAnchorText())})},e.prototype.createAttrs=function(t){var n={href:t.getAnchorHref()},i=this.createCssClass(t);return i&&(n.class=i),this.newWindow&&(n.target="_blank",n.rel="noopener noreferrer"),this.truncate.length&&this.truncate.length<t.getAnchorText().length&&(n.title=t.getAnchorHref()),n},e.prototype.createCssClass=function(t){var n=this.className;if(n){for(var i=[n],o=t.getCssClassSuffixes(),r=0,s=o.length;r<s;r++)i.push(n+"-"+o[r]);return i.join(" ")}else return""},e.prototype.processAnchorText=function(t){return t=this.doTruncate(t),t},e.prototype.doTruncate=function(t){var n=this.truncate;if(!n.length)return t;var i=n.length,o=n.location;return o==="smart"?YEe(t,i):o==="middle"?wEe(t,i):MEe(t,i)},e})();var JSo=x(T());var rSo=x(T());var z_o=x(T()),h0=(function(){function e(t){this._=null,this.matchedText="",this.offset=0,this.tagBuilder=t.tagBuilder,this.matchedText=t.matchedText,this.offset=t.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(t){this.offset=t},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.type]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e})();var eSo=x(T());var K_o=x(T());function UEe(e){return e>=0&&e<=31||e==127}function vg(e){return e>=65&&e<=90||e>=97&&e<=122}function ea(e){return e>=48&&e<=57}function uz(e){return e==34||e==39}function $x(e){return e<8232?e<160?e>=9&&e<=13||e==32:e<5760?e==160:e==5760||e>=8192&&e<=8202:e<8287?e>=8232&&e<=8233||e==8239:e<12288?e==8287:e==12288||e==65279}function kf(e){return e<4800?e<2949?e<2451?e<1425?e<768?e<192?e<169?e<65?e>=48&&e<=57:e>=65&&e<=90||e>=97&&e<=122:e<181?e>=169&&e<=170||e==174:e==181||e==186:e<710?e<216?e>=192&&e<=214:e>=216&&e<=246||e>=248&&e<=705:e<748?e>=710&&e<=721||e>=736&&e<=740:e==748||e==750:e<910?e<895?e<886?e>=768&&e<=884:e>=886&&e<=887||e>=890&&e<=893:e<904?e==895||e==902:e>=904&&e<=906||e==908:e<1155?e<931?e>=910&&e<=929:e>=931&&e<=1013||e>=1015&&e<=1153:e<1369?e>=1155&&e<=1327||e>=1329&&e<=1366:e==1369||e>=1377&&e<=1415:e<1808?e<1552?e<1476?e<1471?e>=1425&&e<=1469:e==1471||e>=1473&&e<=1474:e<1488?e>=1476&&e<=1477||e==1479:e>=1488&&e<=1514||e>=1520&&e<=1522:e<1749?e<1568?e>=1552&&e<=1562:e>=1568&&e<=1641||e>=1646&&e<=1747:e<1770?e>=1749&&e<=1756||e>=1759&&e<=1768:e>=1770&&e<=1788||e==1791:e<2230?e<2042?e<1869?e>=1808&&e<=1866:e>=1869&&e<=1969||e>=1984&&e<=2037:e<2112?e==2042||e>=2048&&e<=2093:e>=2112&&e<=2139||e>=2208&&e<=2228:e<2406?e<2260?e>=2230&&e<=2237:e>=2260&&e<=2273||e>=2275&&e<=2403:e<2437?e>=2406&&e<=2415||e>=2417&&e<=2435:e>=2437&&e<=2444||e>=2447&&e<=2448:e<2693?e<2579?e<2519?e<2486?e<2474?e>=2451&&e<=2472:e>=2474&&e<=2480||e==2482:e<2503?e>=2486&&e<=2489||e>=2492&&e<=2500:e>=2503&&e<=2504||e>=2507&&e<=2510:e<2534?e<2524?e==2519:e>=2524&&e<=2525||e>=2527&&e<=2531:e<2565?e>=2534&&e<=2545||e>=2561&&e<=2563:e>=2565&&e<=2570||e>=2575&&e<=2576:e<2631?e<2613?e<2602?e>=2579&&e<=2600:e>=2602&&e<=2608||e>=2610&&e<=2611:e<2620?e>=2613&&e<=2614||e>=2616&&e<=2617:e==2620||e>=2622&&e<=2626:e<2649?e<2635?e>=2631&&e<=2632:e>=2635&&e<=2637||e==2641:e<2662?e>=2649&&e<=2652||e==2654:e>=2662&&e<=2677||e>=2689&&e<=2691:e<2821?e<2759?e<2730?e<2703?e>=2693&&e<=2701:e>=2703&&e<=2705||e>=2707&&e<=2728:e<2741?e>=2730&&e<=2736||e>=2738&&e<=2739:e>=2741&&e<=2745||e>=2748&&e<=2757:e<2784?e<2763?e>=2759&&e<=2761:e>=2763&&e<=2765||e==2768:e<2809?e>=2784&&e<=2787||e>=2790&&e<=2799:e==2809||e>=2817&&e<=2819:e<2887?e<2858?e<2831?e>=2821&&e<=2828:e>=2831&&e<=2832||e>=2835&&e<=2856:e<2869?e>=2858&&e<=2864||e>=2866&&e<=2867:e>=2869&&e<=2873||e>=2876&&e<=2884:e<2911?e<2902?e>=2887&&e<=2888||e>=2891&&e<=2893:e>=2902&&e<=2903||e>=2908&&e<=2909:e<2929?e>=2911&&e<=2915||e>=2918&&e<=2927:e==2929||e>=2946&&e<=2947:e<3517?e<3205?e<3046?e<2984?e<2969?e<2958?e>=2949&&e<=2954:e>=2958&&e<=2960||e>=2962&&e<=2965:e<2974?e>=2969&&e<=2970||e==2972:e>=2974&&e<=2975||e>=2979&&e<=2980:e<3014?e<2990?e>=2984&&e<=2986:e>=2990&&e<=3001||e>=3006&&e<=3010:e<3024?e>=3014&&e<=3016||e>=3018&&e<=3021:e==3024||e==3031:e<3142?e<3086?e<3072?e>=3046&&e<=3055:e>=3072&&e<=3075||e>=3077&&e<=3084:e<3114?e>=3086&&e<=3088||e>=3090&&e<=3112:e>=3114&&e<=3129||e>=3133&&e<=3140:e<3160?e<3146?e>=3142&&e<=3144:e>=3146&&e<=3149||e>=3157&&e<=3158:e<3174?e>=3160&&e<=3162||e>=3168&&e<=3171:e>=3174&&e<=3183||e>=3200&&e<=3203:e<3333?e<3274?e<3242?e<3214?e>=3205&&e<=3212:e>=3214&&e<=3216||e>=3218&&e<=3240:e<3260?e>=3242&&e<=3251||e>=3253&&e<=3257:e>=3260&&e<=3268||e>=3270&&e<=3272:e<3296?e<3285?e>=3274&&e<=3277:e>=3285&&e<=3286||e==3294:e<3313?e>=3296&&e<=3299||e>=3302&&e<=3311:e>=3313&&e<=3314||e>=3329&&e<=3331:e<3423?e<3389?e<3342?e>=3333&&e<=3340:e>=3342&&e<=3344||e>=3346&&e<=3386:e<3402?e>=3389&&e<=3396||e>=3398&&e<=3400:e>=3402&&e<=3406||e>=3412&&e<=3415:e<3458?e<3430?e>=3423&&e<=3427:e>=3430&&e<=3439||e>=3450&&e<=3455:e<3482?e>=3458&&e<=3459||e>=3461&&e<=3478:e>=3482&&e<=3505||e>=3507&&e<=3515:e<3804?e<3722?e<3570?e<3535?e<3520?e==3517:e>=3520&&e<=3526||e==3530:e<3544?e>=3535&&e<=3540||e==3542:e>=3544&&e<=3551||e>=3558&&e<=3567:e<3664?e<3585?e>=3570&&e<=3571:e>=3585&&e<=3642||e>=3648&&e<=3662:e<3716?e>=3664&&e<=3673||e>=3713&&e<=3714:e==3716||e>=3719&&e<=3720:e<3754?e<3737?e<3725?e==3722:e==3725||e>=3732&&e<=3735:e<3749?e>=3737&&e<=3743||e>=3745&&e<=3747:e==3749||e==3751:e<3776?e<3757?e>=3754&&e<=3755:e>=3757&&e<=3769||e>=3771&&e<=3773:e<3784?e>=3776&&e<=3780||e==3782:e>=3784&&e<=3789||e>=3792&&e<=3801:e<4176?e<3902?e<3872?e<3840?e>=3804&&e<=3807:e==3840||e>=3864&&e<=3865:e<3895?e>=3872&&e<=3881||e==3893:e==3895||e==3897:e<3974?e<3913?e>=3902&&e<=3911:e>=3913&&e<=3948||e>=3953&&e<=3972:e<4038?e>=3974&&e<=3991||e>=3993&&e<=4028:e==4038||e>=4096&&e<=4169:e<4688?e<4301?e<4256?e>=4176&&e<=4253:e>=4256&&e<=4293||e==4295:e<4348?e==4301||e>=4304&&e<=4346:e>=4348&&e<=4680||e>=4682&&e<=4685:e<4746?e<4698?e>=4688&&e<=4694||e==4696:e>=4698&&e<=4701||e>=4704&&e<=4744:e<4786?e>=4746&&e<=4749||e>=4752&&e<=4784:e>=4786&&e<=4789||e>=4792&&e<=4798:e<11035?e<7416?e<6176?e<5873?e<4992?e<4824?e<4802?e==4800:e>=4802&&e<=4805||e>=4808&&e<=4822:e<4888?e>=4824&&e<=4880||e>=4882&&e<=4885:e>=4888&&e<=4954||e>=4957&&e<=4959:e<5121?e<5024?e>=4992&&e<=5007:e>=5024&&e<=5109||e>=5112&&e<=5117:e<5761?e>=5121&&e<=5740||e>=5743&&e<=5759:e>=5761&&e<=5786||e>=5792&&e<=5866:e<6002?e<5920?e<5888?e>=5873&&e<=5880:e>=5888&&e<=5900||e>=5902&&e<=5908:e<5984?e>=5920&&e<=5940||e>=5952&&e<=5971:e>=5984&&e<=5996||e>=5998&&e<=6e3:e<6108?e<6016?e>=6002&&e<=6003:e>=6016&&e<=6099||e==6103:e<6155?e>=6108&&e<=6109||e>=6112&&e<=6121:e>=6155&&e<=6157||e>=6160&&e<=6169:e<6783?e<6512?e<6400?e<6272?e>=6176&&e<=6263:e>=6272&&e<=6314||e>=6320&&e<=6389:e<6448?e>=6400&&e<=6430||e>=6432&&e<=6443:e>=6448&&e<=6459||e>=6470&&e<=6509:e<6608?e<6528?e>=6512&&e<=6516:e>=6528&&e<=6571||e>=6576&&e<=6601:e<6688?e>=6608&&e<=6617||e>=6656&&e<=6683:e>=6688&&e<=6750||e>=6752&&e<=6780:e<7040?e<6832?e<6800?e>=6783&&e<=6793:e>=6800&&e<=6809||e==6823:e<6992?e>=6832&&e<=6846||e>=6912&&e<=6987:e>=6992&&e<=7001||e>=7019&&e<=7027:e<7245?e<7168?e>=7040&&e<=7155:e>=7168&&e<=7223||e>=7232&&e<=7241:e<7376?e>=7245&&e<=7293||e>=7296&&e<=7304:e>=7376&&e<=7378||e>=7380&&e<=7414:e<8450?e<8130?e<8025?e<7960?e<7424?e>=7416&&e<=7417:e>=7424&&e<=7669||e>=7675&&e<=7957:e<8008?e>=7960&&e<=7965||e>=7968&&e<=8005:e>=8008&&e<=8013||e>=8016&&e<=8023:e<8031?e<8027?e==8025:e==8027||e==8029:e<8118?e>=8031&&e<=8061||e>=8064&&e<=8116:e>=8118&&e<=8124||e==8126:e<8205?e<8150?e<8134?e>=8130&&e<=8132:e>=8134&&e<=8140||e>=8144&&e<=8147:e<8178?e>=8150&&e<=8155||e>=8160&&e<=8172:e>=8178&&e<=8180||e>=8182&&e<=8188:e<8305?e<8252?e==8205:e==8252||e==8265:e<8336?e==8305||e==8319:e>=8336&&e<=8348||e>=8400&&e<=8432:e<8579?e<8486?e<8469?e<8455?e==8450:e==8455||e>=8458&&e<=8467:e<8482?e==8469||e>=8473&&e<=8477:e==8482||e==8484:e<8495?e<8488?e==8486:e==8488||e>=8490&&e<=8493:e<8517?e>=8495&&e<=8505||e>=8508&&e<=8511:e>=8517&&e<=8521||e==8526:e<9410?e<9e3?e<8592?e>=8579&&e<=8580:e>=8592&&e<=8703||e>=8986&&e<=8987:e<9193?e==9e3||e==9167:e>=9193&&e<=9203||e>=9208&&e<=9210:e<9723?e<9654?e==9410||e>=9642&&e<=9643:e==9654||e==9664:e<10548?e>=9723&&e<=9726||e>=9728&&e<=10175:e>=10548&&e<=10549||e>=11013&&e<=11015:e<43259?e<12445?e<11688?e<11520?e<11264?e<11088?e>=11035&&e<=11036:e==11088||e==11093:e<11360?e>=11264&&e<=11310||e>=11312&&e<=11358:e>=11360&&e<=11492||e>=11499&&e<=11507:e<11568?e<11559?e>=11520&&e<=11557:e==11559||e==11565:e<11647?e>=11568&&e<=11623||e==11631:e>=11647&&e<=11670||e>=11680&&e<=11686:e<11744?e<11712?e<11696?e>=11688&&e<=11694:e>=11696&&e<=11702||e>=11704&&e<=11710:e<11728?e>=11712&&e<=11718||e>=11720&&e<=11726:e>=11728&&e<=11734||e>=11736&&e<=11742:e<12330?e<11823?e>=11744&&e<=11775:e==11823||e>=12293&&e<=12294:e<12353?e>=12330&&e<=12341||e>=12347&&e<=12349:e>=12353&&e<=12438||e>=12441&&e<=12442:e<42512?e<12951?e<12549?e<12449?e>=12445&&e<=12447:e>=12449&&e<=12538||e>=12540&&e<=12543:e<12704?e>=12549&&e<=12589||e>=12593&&e<=12686:e>=12704&&e<=12730||e>=12784&&e<=12799:e<19968?e<12953?e==12951:e==12953||e>=13312&&e<=19893:e<42192?e>=19968&&e<=40917||e>=40960&&e<=42124:e>=42192&&e<=42237||e>=42240&&e<=42508:e<42891?e<42623?e<42560?e>=42512&&e<=42539:e>=42560&&e<=42610||e>=42612&&e<=42621:e<42775?e>=42623&&e<=42725||e>=42736&&e<=42737:e>=42775&&e<=42783||e>=42786&&e<=42888:e<43072?e<42928?e>=42891&&e<=42926:e>=42928&&e<=42935||e>=42999&&e<=43047:e<43216?e>=43072&&e<=43123||e>=43136&&e<=43205:e>=43216&&e<=43225||e>=43232&&e<=43255:e<55243?e<43744?e<43488?e<43312?e<43261?e==43259:e==43261||e>=43264&&e<=43309:e<43392?e>=43312&&e<=43347||e>=43360&&e<=43388:e>=43392&&e<=43456||e>=43471&&e<=43481:e<43600?e<43520?e>=43488&&e<=43518:e>=43520&&e<=43574||e>=43584&&e<=43597:e<43642?e>=43600&&e<=43609||e>=43616&&e<=43638:e>=43642&&e<=43714||e>=43739&&e<=43741:e<43824?e<43785?e<43762?e>=43744&&e<=43759:e>=43762&&e<=43766||e>=43777&&e<=43782:e<43808?e>=43785&&e<=43790||e>=43793&&e<=43798:e>=43808&&e<=43814||e>=43816&&e<=43822:e<44012?e<43868?e>=43824&&e<=43866:e>=43868&&e<=43877||e>=43888&&e<=44010:e<44032?e>=44012&&e<=44013||e>=44016&&e<=44025:e>=44032&&e<=55203||e>=55216&&e<=55238:e<64848?e<64298?e<64112?e<55296?e>=55243&&e<=55291:e>=55296&&e<=57343||e>=63744&&e<=64109:e<64275?e>=64112&&e<=64217||e>=64256&&e<=64262:e>=64275&&e<=64279||e>=64285&&e<=64296:e<64320?e<64312?e>=64298&&e<=64310:e>=64312&&e<=64316||e==64318:e<64326?e>=64320&&e<=64321||e>=64323&&e<=64324:e>=64326&&e<=64433||e>=64467&&e<=64829:e<65296?e<65024?e<64914?e>=64848&&e<=64911:e>=64914&&e<=64967||e>=65008&&e<=65019:e<65136?e>=65024&&e<=65039||e>=65056&&e<=65071:e>=65136&&e<=65140||e>=65142&&e<=65276:e<65474?e<65345?e>=65296&&e<=65305||e>=65313&&e<=65338:e>=65345&&e<=65370||e>=65382&&e<=65470:e<65490?e>=65474&&e<=65479||e>=65482&&e<=65487:e>=65490&&e<=65495||e>=65498&&e<=65500}function DEe(e){return e<47?e<42?e==33||e>=35&&e<=39:e>=42&&e<=43||e==45:e<63?e==47||e==61:e<94?e==63:e>=94&&e<=96||e>=123&&e<=126}function OEe(e){return e<91?e<47?e>=35&&e<=43||e==45:e<61?e==47:e==61||e==64:e<95?e==91||e==93:e<123?e==95:e>=123&&e<=126||e==10003}function mz(e){return e<58?e<44?e==33:e==44||e==46:e<63?e>=58&&e<=59:e==63||e==94}function BEe(e){return e<91?e==40:e==91||e==123}function Ane(e){return e<93?e==41:e==93||e==125}var j_o=x(T()),zEe=/^(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|travelersinsurance|vermögensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|wolterskluwer|xn--cckwcxetd|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--4dbrk0ce|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--q7ce6a|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|pramerica|richardli|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--qxa6a|xn--tckwe|xn--vhquv|yodobashi|موريتانيا|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|banamex|bauhaus|bestbuy|booking|brother|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|yamaxun|youtube|zuerich|католик|البحرين|الجزائر|العليان|پاکستان|كاثوليك|இந்தியா|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kindle|kosher|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|nagoya|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|walter|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|loans|locus|lotte|lotto|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|ישראל|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|dvag|erni|fage|fail|fans|farm|fast|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kids|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|アマゾン|グーグル|クラウド|ポイント|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|ceo|cfa|cfd|com|cpa|crs|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|scb|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ລາວ|ストア|セール|みんな|中文网|亚马逊|天主教|我爱你|新加坡|淡马锡|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|ευ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|广东|微博|慈善|手机|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)$/;var Ene=/https?:\/\//i,HEe=new RegExp("^"+Ene.source,"i"),f2t=/^(javascript|vbscript):/i,p2t=/^[A-Za-z][-.+A-Za-z0-9]*:(\/\/)?([^:/]*)/,b2t=/^(?:\/\/)?([^/#?:]+)/,oG=vg;function Lne(e){return vg(e)||ea(e)||e===43||e===45||e===46}var Fg=kf;function hz(e){return e===95||Fg(e)}function Wne(e){return kf(e)||OEe(e)||mz(e)}function fz(e){return e===47||e===63||e===35}function vne(e){return zEe.test(e.toLowerCase())}function KEe(e){if(f2t.test(e))return!1;var t=e.match(p2t);if(!t)return!1;var n=!!t[1],i=t[2];return n?!0:!(i.indexOf(".")===-1||!/[A-Za-z]/.test(i))}function JEe(e){var t=e.match(b2t);if(!t)return!1;var n=t[0],i=n.split(".");if(i.length<2)return!1;var o=i[i.length-1];return!!vne(o)}var g2t=/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,y2t=/[:/?#]/;function jEe(e){var t=e.split(y2t,1)[0];return g2t.test(t)}var x2t=/^(https?:\/\/)?(?:www\.)?/i,T2t=/^\/\//,QEe=(function(e){m0(t,e);function t(n){var i=e.call(this,n)||this;return i.type="url",i.url="",i.urlMatchType="scheme",i.protocolRelativeMatch=!1,i.stripPrefix={scheme:!0,www:!0},i.stripTrailingSlash=!0,i.decodePercentEncoding=!0,i.protocolPrepended=!1,i.urlMatchType=n.urlMatchType,i.url=n.url,i.protocolRelativeMatch=n.protocolRelativeMatch,i.stripPrefix=n.stripPrefix,i.stripTrailingSlash=n.stripTrailingSlash,i.decodePercentEncoding=n.decodePercentEncoding,i}return t.prototype.getType=function(){return"url"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var n=this.url;return!this.protocolRelativeMatch&&this.urlMatchType!=="scheme"&&!this.protocolPrepended&&(n=this.url="http://"+n,this.protocolPrepended=!0),n},t.prototype.getAnchorHref=function(){var n=this.getUrl();return n.replace(/&/g,"&")},t.prototype.getAnchorText=function(){var n=this.getMatchedText();return this.protocolRelativeMatch&&(n=Z2t(n)),this.stripPrefix.scheme&&(n=_2t(n)),this.stripPrefix.www&&(n=S2t(n)),this.stripTrailingSlash&&(n=V2t(n)),this.decodePercentEncoding&&(n=C2t(n)),n},t})(h0);function _2t(e){return e.replace(HEe,"")}function S2t(e){return e.includes("www.")?e.replace(x2t,"$1"):e}function Z2t(e){return e.replace(T2t,"")}function V2t(e){return e.charAt(e.length-1)==="/"&&(e=e.slice(0,-1)),e}function C2t(e){var t=e.replace(/%(?:22|26|27|3C|3E)/gi,function(n){return n==="%22"?""":n==="%26"?"&":n==="%27"?"'":n==="%3C"||n==="%3c"?"<":">"});if(t.includes("%"))try{return decodeURIComponent(t)}catch{}return t}var lSo=x(T());var qEe=/^mailto:/i,Fne=kf;function pz(e){return Fne(e)||DEe(e)}function $Ee(e){var t=e.split(".").pop();return vne(t)}var hSo=x(T());var eLe=(function(e){m0(t,e);function t(n){var i=e.call(this,n)||this;return i.type="email",i.email="",i.email=n.email,i}return t.prototype.getType=function(){return"email"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return"mailto:"+this.email},t.prototype.getAnchorText=function(){return this.email},t})(h0);var bSo=x(T());function Ine(e){return e===95||kf(e)}function tLe(e){return e.length<=140}var nLe=["twitter","facebook","instagram","tiktok","youtube"];var _So=x(T());var iLe=(function(e){m0(t,e);function t(n){var i=e.call(this,n)||this;return i.type="hashtag",i.serviceName="twitter",i.hashtag="",i.serviceName=n.serviceName,i.hashtag=n.hashtag,i}return t.prototype.getType=function(){return"hashtag"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var n=this.serviceName,i=this.hashtag;switch(n){case"twitter":return"https://twitter.com/hashtag/"+i;case"facebook":return"https://www.facebook.com/hashtag/"+i;case"instagram":return"https://instagram.com/explore/tags/"+i;case"tiktok":return"https://www.tiktok.com/tag/"+i;case"youtube":return"https://youtube.com/hashtag/"+i;default:Mf(n)}},t.prototype.getAnchorText=function(){return"#"+this.hashtag},t.prototype.getCssClassSuffixes=function(){var n=e.prototype.getCssClassSuffixes.call(this),i=this.getServiceName();return i&&n.push(i),n},t})(h0);var VSo=x(T());var R2t={twitter:/^@\w{1,15}$/,instagram:/^@[_\w]{1,30}$/,soundcloud:/^@[-a-z0-9_]{3,25}$/,tiktok:/^@[.\w]{1,23}[\w]$/,youtube:/^@[-.·\w]{3,30}$/};function Pne(e){return e===45||e===46||e===95||vg(e)||ea(e)}function oLe(e,t){var n=R2t[t];return n.test(e)}var rLe=["twitter","instagram","soundcloud","tiktok","youtube"];var ESo=x(T());var sLe=(function(e){m0(t,e);function t(n){var i=e.call(this,n)||this;return i.type="mention",i.serviceName="twitter",i.mention="",i.mention=n.mention,i.serviceName=n.serviceName,i}return t.prototype.getType=function(){return"mention"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case"twitter":return"https://twitter.com/"+this.mention;case"instagram":return"https://instagram.com/"+this.mention;case"soundcloud":return"https://soundcloud.com/"+this.mention;case"tiktok":return"https://www.tiktok.com/@"+this.mention;case"youtube":return"https://youtube.com/@"+this.mention;default:Mf(this.serviceName)}},t.prototype.getAnchorText=function(){return"@"+this.mention},t.prototype.getCssClassSuffixes=function(){var n=e.prototype.getCssClassSuffixes.call(this),i=this.getServiceName();return i&&n.push(i),n},t})(h0);var WSo=x(T()),G2t=/[-. ()]/,A2t=/(?:(?:(?:(\+)?\d{1,3}[-. ]?)?\(?\d{3}\)?[-. ]?\d{3}[-. ]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-. ]?(?:\d[-. ]?){6,12}\d+))([,;]+[0-9]+#?)*/,E2t=/(0([1-9]-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/,L2t=new RegExp("^".concat(A2t.source,"|").concat(E2t.source,"$"));function Xne(e){return e===45||e===46||e===32}function bz(e){return e===44||e===59}function aLe(e){var t=e.charAt(0)==="+"||G2t.test(e);return t&&L2t.test(e)}var PSo=x(T());var cLe=(function(e){m0(t,e);function t(n){var i=e.call(this,n)||this;return i.type="phone",i.number="",i.plusSign=!1,i.number=n.number,i.plusSign=n.plusSign,i}return t.prototype.getType=function(){return"phone"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return"tel:"+(this.plusSign?"+":"")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t})(h0);var W2t=(function(){function e(t,n){this.charIdx=0,this.matches=[],this._stateMachines=[],this.schemeUrlMachinesCount=0,this.text=t,this.tagBuilder=n.tagBuilder,this.stripPrefix=n.stripPrefix,this.stripTrailingSlash=n.stripTrailingSlash,this.decodePercentEncoding=n.decodePercentEncoding,this.hashtagServiceName=n.hashtagServiceName,this.mentionServiceName=n.mentionServiceName}return Object.defineProperty(e.prototype,"stateMachines",{get:function(){return this._stateMachines},enumerable:!1,configurable:!0}),e.prototype.addMachine=function(t){this._stateMachines.push(t),dLe(t)&&this.schemeUrlMachinesCount++},e.prototype.removeMachine=function(t){this._stateMachines=this._stateMachines.filter(function(n){return n!==t}),dLe(t)&&this.schemeUrlMachinesCount--},e.prototype.hasSchemeUrlMachine=function(){return this.schemeUrlMachinesCount>0},e})();function uLe(e,t){for(var n=new W2t(e,t);n.charIdx<n.text.length;n.charIdx++){var i=e.charAt(n.charIdx),o=e.charCodeAt(n.charIdx);if(n.stateMachines.length===0)gz(n,i,o);else{for(var r=n.stateMachines.length-1;r>=0;r--){var s=n.stateMachines[r];switch(s.state){case 11:N2t(n,s,o);break;case 12:Y2t(n,s,o);break;case 0:v2t(n,s,o);break;case 1:F2t(n,s,o);break;case 2:I2t(n,s,o);break;case 3:P2t(n,s,o);break;case 4:X2t(n,s,i,o);break;case 5:w2t(n,s,o);break;case 6:M2t(n,s,i,o);break;case 7:k2t(n,s,i,o);break;case 13:U2t(n,s,o);break;case 14:D2t(n,s,o);break;case 8:O2t(n,s,o);break;case 9:B2t(n,s,o);break;case 10:z2t(n,s,o);break;case 15:H2t(n,s,i,o);break;case 16:K2t(n,s,i,o);break;case 17:J2t(n,s,i,o);break;case 18:j2t(n,s,i,o);break;case 19:Q2t(n,s,i,o);break;case 20:q2t(n,s,o);break;case 21:$2t(n,s,o);break;case 22:IZ(n,s,o);break;case 23:eFt(n,s,o);break;case 24:tFt(n,s,o);break;case 25:nFt(n,s,o);break;case 26:iFt(n,s,o);break;case 27:oFt(n,s,o);break;case 28:rFt(n,s,o);break;case 29:sFt(n,s,o);break;case 30:aFt(n,s,o);break;case 31:cFt(n,s,o);break;case 32:dFt(n,s,i,o);break;case 33:uFt(n,s,o);break;case 34:mFt(n,s,o);break;case 35:hFt(n,s,o);break;case 36:fFt(n,s,i,o);break;case 37:lFt(n,s,i,o);break;case 38:pFt(n,s,i,o);break;case 39:bFt(n,s,i,o);break;case 40:gFt(n,s,o);break;case 41:yFt(n,s,o);break;default:Mf(s.state)}}if(!n.hasSchemeUrlMachine()&&n.charIdx>0&&oG(o)){var a=n.text.charCodeAt(n.charIdx-1);oG(a)||n.addMachine(yz(n.charIdx,0))}}}for(var c=n.stateMachines.length-1;c>=0;c--)n.stateMachines.forEach(function(d){return Ss(n,d)});return n.matches}function gz(e,t,n){var i=e.charIdx;if(n===35)e.addMachine(ZFt(i,28));else if(n===64)e.addMachine(VFt(i,30));else if(n===47)e.addMachine(Yne(i,11));else if(n===43)e.addMachine(Nne(i,37));else if(n===40)e.addMachine(Nne(i,32));else{if(ea(n)&&(e.addMachine(Nne(i,38)),e.addMachine(_Ft(i,13))),Fne(n)){var o=t.toLowerCase()==="m"?15:22;e.addMachine(SFt(i,o))}oG(n)&&e.addMachine(yz(i,0)),kf(n)&&e.addMachine(Yne(i,5))}}function v2t(e,t,n){n===58?t.state=2:n===45?t.state=1:Lne(n)||e.removeMachine(t)}function F2t(e,t,n){var i=e.charIdx;n===45||(n===47?(e.removeMachine(t),e.addMachine(Yne(i,11))):Lne(n)?t.state=0:e.removeMachine(t))}function I2t(e,t,n){var i=e.charIdx;n===47?t.state=3:n===46?e.removeMachine(t):Fg(n)?(t.state=5,oG(n)&&e.addMachine(yz(i,0))):e.removeMachine(t)}function P2t(e,t,n){n===47?t.state=4:Wne(n)?(t.state=10,t.acceptStateReached=!0):Ss(e,t)}function X2t(e,t,n,i){i===47?(t.state=10,t.acceptStateReached=!0):Fg(i)?(t.state=5,t.acceptStateReached=!0):e.removeMachine(t)}function N2t(e,t,n){n===47?t.state=12:e.removeMachine(t)}function Y2t(e,t,n){Fg(n)?t.state=5:e.removeMachine(t)}function w2t(e,t,n){n===46?t.state=7:n===45?t.state=6:n===58?t.state=8:fz(n)?t.state=10:hz(n)||Ss(e,t)}function M2t(e,t,n,i){i===45||(i===46?Ss(e,t):Fg(i)?t.state=5:Ss(e,t))}function k2t(e,t,n,i){i===46?Ss(e,t):Fg(i)?(t.state=5,t.acceptStateReached=!0):Ss(e,t)}function U2t(e,t,n){n===46?t.state=14:n===58?t.state=8:ea(n)||(fz(n)?t.state=10:kf(n)?e.removeMachine(t):Ss(e,t))}function D2t(e,t,n){ea(n)?(t.octetsEncountered++,t.octetsEncountered===4&&(t.acceptStateReached=!0),t.state=13):Ss(e,t)}function O2t(e,t,n){ea(n)?t.state=9:Ss(e,t)}function B2t(e,t,n){ea(n)||(fz(n)?t.state=10:Ss(e,t))}function z2t(e,t,n){Wne(n)||Ss(e,t)}function H2t(e,t,n,i){n.toLowerCase()==="a"?t.state=16:IZ(e,t,i)}function K2t(e,t,n,i){n.toLowerCase()==="i"?t.state=17:IZ(e,t,i)}function J2t(e,t,n,i){n.toLowerCase()==="l"?t.state=18:IZ(e,t,i)}function j2t(e,t,n,i){n.toLowerCase()==="t"?t.state=19:IZ(e,t,i)}function Q2t(e,t,n,i){n.toLowerCase()==="o"?t.state=20:IZ(e,t,i)}function q2t(e,t,n){n===58?t.state=21:IZ(e,t,n)}function $2t(e,t,n){pz(n)?t.state=22:e.removeMachine(t)}function IZ(e,t,n){n===46?t.state=23:n===64?t.state=24:pz(n)?t.state=22:e.removeMachine(t)}function eFt(e,t,n){n===46||n===64?e.removeMachine(t):pz(n)?t.state=22:e.removeMachine(t)}function tFt(e,t,n){Fg(n)?t.state=25:e.removeMachine(t)}function nFt(e,t,n){n===46?t.state=27:n===45?t.state=26:hz(n)||Ss(e,t)}function iFt(e,t,n){n===45||n===46?Ss(e,t):hz(n)?t.state=25:Ss(e,t)}function oFt(e,t,n){n===46||n===45?Ss(e,t):Fg(n)?(t.state=25,t.acceptStateReached=!0):Ss(e,t)}function rFt(e,t,n){Ine(n)?(t.state=29,t.acceptStateReached=!0):e.removeMachine(t)}function sFt(e,t,n){Ine(n)||Ss(e,t)}function aFt(e,t,n){Pne(n)?(t.state=31,t.acceptStateReached=!0):e.removeMachine(t)}function cFt(e,t,n){Pne(n)||(kf(n)?e.removeMachine(t):Ss(e,t))}function lFt(e,t,n,i){ea(i)?t.state=38:(e.removeMachine(t),gz(e,n,i))}function dFt(e,t,n,i){ea(i)?t.state=33:e.removeMachine(t),gz(e,n,i)}function uFt(e,t,n){ea(n)?t.state=34:e.removeMachine(t)}function mFt(e,t,n){ea(n)?t.state=35:e.removeMachine(t)}function hFt(e,t,n){n===41?t.state=36:e.removeMachine(t)}function fFt(e,t,n,i){ea(i)?t.state=38:Xne(i)?t.state=39:e.removeMachine(t)}function pFt(e,t,n,i){var o=e.charIdx;t.acceptStateReached=!0,bz(i)?t.state=40:i===35?t.state=41:ea(i)||(i===40?t.state=32:Xne(i)?t.state=39:(Ss(e,t),oG(i)&&e.addMachine(yz(o,0))))}function bFt(e,t,n,i){ea(i)?t.state=38:i===40?t.state=32:(Ss(e,t),gz(e,n,i))}function gFt(e,t,n){bz(n)||(n===35?t.state=41:ea(n)?t.state=38:Ss(e,t))}function yFt(e,t,n){bz(n)?t.state=40:ea(n)?e.removeMachine(t):Ss(e,t)}function Ss(e,t){var n=e.matches,i=e.text,o=e.charIdx,r=e.tagBuilder,s=e.stripPrefix,a=e.stripTrailingSlash,c=e.decodePercentEncoding,d=e.hashtagServiceName,u=e.mentionServiceName;if(e.removeMachine(t),!!t.acceptStateReached){var m=t.startIdx,p=i.slice(t.startIdx,o);switch(p=TFt(p),t.type){case 0:{var b=i.charCodeAt(t.startIdx-1);if(b===64)return;switch(t.matchType){case 0:{var f=Ene.exec(p);if(f&&(m=m+f.index,p=p.slice(f.index)),!KEe(p))return;break}case 1:{if(!JEe(p))return;break}case 2:{if(!jEe(p))return;break}default:Mf(t)}n.push(new QEe({tagBuilder:r,matchedText:p,offset:m,urlMatchType:xFt(t.matchType),url:p,protocolRelativeMatch:p.slice(0,2)==="//",stripPrefix:s,stripTrailingSlash:a,decodePercentEncoding:c}));break}case 1:{$Ee(p)&&n.push(new eLe({tagBuilder:r,matchedText:p,offset:m,email:p.replace(qEe,"")}));break}case 2:{tLe(p)&&n.push(new iLe({tagBuilder:r,matchedText:p,offset:m,serviceName:d,hashtag:p.slice(1)}));break}case 3:{oLe(p,u)&&n.push(new sLe({tagBuilder:r,matchedText:p,offset:m,serviceName:u,mention:p.slice(1)}));break}case 4:{if(p=p.replace(/ +$/g,""),aLe(p)){var y=p.replace(/[^0-9,;#]/g,"");n.push(new cLe({tagBuilder:r,matchedText:p,offset:m,number:y,plusSign:p.charAt(0)==="+"}))}break}default:Mf(t)}}}function xFt(e){switch(e){case 0:return"scheme";case 1:return"tld";case 2:return"ipV4";default:Mf(e)}}var lLe={")":"(","}":"{","]":"["};function TFt(e){for(var t={"(":0,"{":0,"[":0},n=0;n<e.length;n++){var i=e.charAt(n),o=e.charCodeAt(n);BEe(o)?t[i]++:Ane(o)&&t[lLe[i]]--}for(var r=e.length-1;r>=0;){var i=e.charAt(r),o=e.charCodeAt(r);if(Ane(o)){var s=lLe[i];if(t[s]<0)t[s]++,r--;else break}else if(mz(o))r--;else break}return e.slice(0,r+1)}function yz(e,t){return{type:0,startIdx:e,state:t,acceptStateReached:!1,matchType:0}}function Yne(e,t){return{type:0,startIdx:e,state:t,acceptStateReached:!1,matchType:1}}function _Ft(e,t){return{type:0,startIdx:e,state:t,acceptStateReached:!1,matchType:2,octetsEncountered:1}}function SFt(e,t){return{type:1,startIdx:e,state:t,acceptStateReached:!1}}function ZFt(e,t){return{type:2,startIdx:e,state:t,acceptStateReached:!1}}function VFt(e,t){return{type:3,startIdx:e,state:t,acceptStateReached:!1}}function Nne(e,t){return{type:4,startIdx:e,state:t,acceptStateReached:!1}}function dLe(e){return e.type===0&&e.matchType===0}var eZo=x(T());var f0=(function(){function e(t){t===void 0&&(t={}),this.idx=t.idx!==void 0?t.idx:-1,this.type=t.type||"tag",this.name=t.name||"",this.isOpening=!!t.isOpening,this.isClosing=!!t.isClosing}return e})(),Mne=new f0,CFt=(function(){function e(t,n){this.charIdx=0,this.state=0,this.currentDataIdx=0,this.currentTag=Mne,this.html=t,this.callbacks=n}return e})();function mLe(e,t){for(var n=new CFt(e,t),i=e.length;n.charIdx<i;){var o=e.charAt(n.charIdx),r=e.charCodeAt(n.charIdx);switch(n.state){case 0:RFt(n,o);break;case 1:GFt(n,o,r);break;case 2:EFt(n,o,r);break;case 3:AFt(n,o,r);break;case 4:LFt(n,o,r);break;case 5:WFt(n,o,r);break;case 6:vFt(n,o,r);break;case 7:FFt(n,o,r);break;case 8:IFt(n,o);break;case 9:PFt(n,o);break;case 10:XFt(n,o,r);break;case 11:NFt(n,o,r);break;case 12:YFt(n,o);break;case 13:wFt(n);break;case 14:MFt(n,o);break;case 15:kFt(n,o);break;case 16:UFt(n,o);break;case 17:DFt(n,o);break;case 18:OFt(n,o);break;case 19:BFt(n,o);break;case 20:zFt(n,o);break;default:Mf(n.state)}n.charIdx++}n.currentDataIdx<n.charIdx&&HFt(n)}function RFt(e,t){t==="<"&&p0(e)}function GFt(e,t,n){t==="!"?e.state=13:t==="/"?(e.state=2,e.currentTag=new f0($s($s({},e.currentTag),{isClosing:!0}))):t==="<"?p0(e):vg(n)?(e.state=3,e.currentTag=new f0($s($s({},e.currentTag),{isOpening:!0}))):(e.state=0,e.currentTag=Mne)}function AFt(e,t,n){$x(n)?(e.currentTag=new f0($s($s({},e.currentTag),{name:wne(e)})),e.state=4):t==="<"?p0(e):t==="/"?(e.currentTag=new f0($s($s({},e.currentTag),{name:wne(e)})),e.state=12):t===">"?(e.currentTag=new f0($s($s({},e.currentTag),{name:wne(e)})),b0(e)):!vg(n)&&!ea(n)&&t!==":"&&mh(e)}function EFt(e,t,n){t===">"?mh(e):vg(n)?e.state=3:mh(e)}function LFt(e,t,n){$x(n)||(t==="/"?e.state=12:t===">"?b0(e):t==="<"?p0(e):t==="="||uz(n)||UEe(n)?mh(e):e.state=5)}function WFt(e,t,n){$x(n)?e.state=6:t==="/"?e.state=12:t==="="?e.state=7:t===">"?b0(e):t==="<"?p0(e):uz(n)&&mh(e)}function vFt(e,t,n){$x(n)||(t==="/"?e.state=12:t==="="?e.state=7:t===">"?b0(e):t==="<"?p0(e):uz(n)?mh(e):e.state=5)}function FFt(e,t,n){$x(n)||(t==='"'?e.state=8:t==="'"?e.state=9:/[>=`]/.test(t)?mh(e):t==="<"?p0(e):e.state=10)}function IFt(e,t){t==='"'&&(e.state=11)}function PFt(e,t){t==="'"&&(e.state=11)}function XFt(e,t,n){$x(n)?e.state=4:t===">"?b0(e):t==="<"&&p0(e)}function NFt(e,t,n){$x(n)?e.state=4:t==="/"?e.state=12:t===">"?b0(e):t==="<"?p0(e):(e.state=4,KFt(e))}function YFt(e,t){t===">"?(e.currentTag=new f0($s($s({},e.currentTag),{isClosing:!0})),b0(e)):mh(e)}function wFt(e){var t=e.html,n=e.charIdx;t.slice(n,n+2)==="--"?(e.charIdx++,e.currentTag=new f0($s($s({},e.currentTag),{type:"comment"})),e.state=14):t.slice(n,n+7).toUpperCase()==="DOCTYPE"?(e.charIdx+=6,e.currentTag=new f0($s($s({},e.currentTag),{type:"doctype"})),e.state=20):mh(e)}function MFt(e,t){t==="-"?e.state=15:t===">"?mh(e):e.state=16}function kFt(e,t){t==="-"?e.state=18:t===">"?mh(e):e.state=16}function UFt(e,t){t==="-"&&(e.state=17)}function DFt(e,t){t==="-"?e.state=18:e.state=16}function OFt(e,t){t===">"?b0(e):t==="!"?e.state=19:t==="-"||(e.state=16)}function BFt(e,t){t==="-"?e.state=17:t===">"?b0(e):e.state=16}function zFt(e,t){t===">"?b0(e):t==="<"&&p0(e)}function mh(e){e.state=0,e.currentTag=Mne}function p0(e){e.state=1,e.currentTag=new f0({idx:e.charIdx})}function b0(e){var t=e.html.slice(e.currentDataIdx,e.currentTag.idx);t&&e.callbacks.onText(t,e.currentDataIdx);var n=e.currentTag;n.type==="comment"?e.callbacks.onComment(n.idx):n.type==="doctype"?e.callbacks.onDoctype(n.idx):(n.isOpening&&e.callbacks.onOpenTag(n.name,n.idx),n.isClosing&&e.callbacks.onCloseTag(n.name,n.idx)),mh(e),e.currentDataIdx=e.charIdx+1}function HFt(e){var t=e.html.slice(e.currentDataIdx,e.charIdx);e.callbacks.onText(t,e.currentDataIdx),e.currentDataIdx=e.charIdx+1}function wne(e){var t=e.currentTag.idx+(e.currentTag.isClosing?2:1);return e.html.slice(t,e.charIdx).toLowerCase()}function KFt(e){e.charIdx--}var JFt=(function(){function e(t){t===void 0&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.tagBuilder=null,this.urls=jFt(t.urls),this.email=zu(t.email)?t.email:this.email,this.phone=zu(t.phone)?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=zu(t.newWindow)?t.newWindow:this.newWindow,this.stripPrefix=QFt(t.stripPrefix),this.stripTrailingSlash=zu(t.stripTrailingSlash)?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=zu(t.decodePercentEncoding)?t.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=t.sanitizeHtml||!1;var n=this.mention;if(n!==!1&&rLe.indexOf(n)===-1)throw new Error("invalid `mention` cfg '".concat(n,"' - see docs"));var i=this.hashtag;if(i!==!1&&nLe.indexOf(i)===-1)throw new Error("invalid `hashtag` cfg '".concat(i,"' - see docs"));this.truncate=qFt(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,n){var i=new e(n);return i.link(t)},e.parse=function(t,n){var i=new e(n);return i.parse(t)},e.prototype.parse=function(t){var n=this,i=["a","style","script"],o=0,r=[];return mLe(t,{onOpenTag:function(s){i.indexOf(s)>=0&&o++},onText:function(s,a){if(o===0){var c=/( | |<|<|>|>|"|"|')/gi,d=s.split(c),u=a;d.forEach(function(m,p){if(p%2===0){var b=n.parseText(m,u);r.push.apply(r,FEe([],vEe(b),!1))}u+=m.length})}},onCloseTag:function(s){i.indexOf(s)>=0&&(o=Math.max(o-1,0))},onComment:function(){},onDoctype:function(){}}),r=this.compactMatches(r),r=this.removeUnwantedMatches(r),r},e.prototype.compactMatches=function(t){t.sort($Ft);for(var n=0;n<t.length-1;){var i=t[n],o=i.getOffset(),r=i.getMatchedText().length;if(n+1<t.length&&t[n+1].getOffset()===o){var s=t[n+1].getMatchedText().length>r?n:n+1;t.splice(s,1);continue}n++}return t},e.prototype.removeUnwantedMatches=function(t){return this.hashtag||qx(t,function(n){return n.getType()==="hashtag"}),this.email||qx(t,function(n){return n.getType()==="email"}),this.phone||qx(t,function(n){return n.getType()==="phone"}),this.mention||qx(t,function(n){return n.getType()==="mention"}),this.urls.schemeMatches||qx(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="scheme"}),this.urls.tldMatches||qx(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="tld"}),this.urls.ipV4Matches||qx(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="ipV4"}),t},e.prototype.parseText=function(t,n){n=n||0;for(var i=uLe(t,{tagBuilder:this.getTagBuilder(),stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding,hashtagServiceName:this.hashtag,mentionServiceName:this.mention||"twitter"}),o=0,r=i.length;o<r;o++)i[o].setOffset(n+i[o].getOffset());return i},e.prototype.link=function(t){if(!t)return"";this.sanitizeHtml&&(t=t.replace(/</g,"<").replace(/>/g,">"));for(var n=this.parse(t),i=new Array(n.length*2+1),o=0,r=0,s=n.length;r<s;r++){var a=n[r];i.push(t.substring(o,a.getOffset())),i.push(this.createMatchReturnVal(a)),o=a.getOffset()+a.getMatchedText().length}return i.push(t.substring(o)),i.join("")},e.prototype.createMatchReturnVal=function(t){var n;if(this.replaceFn&&(n=this.replaceFn.call(this.context,t)),typeof n=="string")return n;if(n===!1)return t.getMatchedText();if(n instanceof dz)return n.toAnchorString();var i=t.buildTag();return i.toAnchorString()},e.prototype.getTagBuilder=function(){var t=this.tagBuilder;return t||(t=this.tagBuilder=new kEe({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),t},e.version=IEe,e})(),hLe=JFt;function jFt(e){return e==null&&(e=!0),zu(e)?{schemeMatches:e,tldMatches:e,ipV4Matches:e}:{schemeMatches:zu(e.schemeMatches)?e.schemeMatches:!0,tldMatches:zu(e.tldMatches)?e.tldMatches:!0,ipV4Matches:zu(e.ipV4Matches)?e.ipV4Matches:!0}}function QFt(e){return e==null&&(e=!0),zu(e)?{scheme:e,www:e}:{scheme:zu(e.scheme)?e.scheme:!0,www:zu(e.www)?e.www:!0}}function qFt(e){return typeof e=="number"?{length:e,location:"end"}:$s({length:Number.POSITIVE_INFINITY,location:"end"},e)}function $Ft(e,t){return e.getOffset()-t.getOffset()}var fZo=x(T());var mZo=x(T());var ZZo=x(T());var xz=hLe;var SLe;typeof DOMParser<"u"&&(SLe=new DOMParser);var eIt=new xz({stripPrefix:!1,email:!1,replaceFn:function(e,t){return t.urlMatchType==="scheme"||t.urlMatchType==="www"}}),Tz=32,fLe=2414016,pLe=1,bLe=16093e3,gLe=.1,tIt=[null,void 0,"http://www.topografix.com/GPX/1/1"],jo={gpx:tIt};function nIt(e){return new Promise((t,n)=>{let i=new FileReader;i.addEventListener("load",function(){t(i.result)}),i.addEventListener("error",function(){n(i.error)}),i.readAsText(e)})}function kne(e,t){let n=Sk(e,"id");return n=l(n)?n:Qn(),t.getOrCreateEntity(n)}function Une(e){let t=yLe(e,"lon"),n=yLe(e,"lat"),i=Tk(e,"ele",jo.gpx);return h.fromDegrees(t,n,i)}function yLe(e,t){if(!l(e))return;let n=e.getAttribute(t);if(n!==null){let i=parseFloat(n);return isNaN(i)?void 0:i}}function Sk(e,t){if(!l(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function eT(e,t,n){if(!l(e))return;let i=e.childNodes,o=i.length;for(let r=0;r<o;r++){let s=i[r];if(s.localName===t&&n.indexOf(s.namespaceURI)!==-1)return s}}function Dne(e,t,n){if(!l(e))return;let i=[],o=e.getElementsByTagName(t),r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function Tk(e,t,n){let i=eT(e,t,n);if(l(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function zd(e,t,n){let i=eT(e,t,n);if(l(i))return i.textContent.trim()}function ZLe(e){let t=new sl;return t.width=Tz,t.height=Tz,t.scaleByDistance=new Ht(fLe,pLe,bLe,gLe),t.pixelOffsetScaleByDistance=new Ht(fLe,pLe,bLe,gLe),t.verticalOrigin=new pi(zn.BOTTOM),t.image=e,t}function iIt(){let e=new qh;return e.translucencyByDistance=new Ht(3e6,1,5e6,0),e.pixelOffset=new M(17,0),e.horizontalOrigin=Di.LEFT,e.font="16px sans-serif",e.style=fr.FILL_AND_OUTLINE,e}function VLe(e){let t=new al;return t.width=4,t.material=new Hx,t.material.color=l(e)?e:U.RED,t.material.outlineWidth=2,t.material.outlineColor=U.BLACK,t}var xLe={time:{text:"Time",tag:"time"},comment:{text:"Comment",tag:"cmt"},description:{text:"Description",tag:"desc"},source:{text:"Source",tag:"src"},number:{text:"GPS track/route number",tag:"number"},type:{text:"Type",tag:"type"}},_k;typeof document<"u"&&(_k=document.createElement("div"));function One(e,t){let n,i="",o=Object.keys(xLe),r=o.length;for(n=0;n<r;n++){let u=o[n],m=xLe[u];m.value=zd(e,m.tag,jo.gpx)??"",l(m.value)&&m.value!==""&&(i=`${i}<p>${m.text}: ${m.value}</p>`)}if(!l(i)||i==="")return;i=eIt.link(i),_k.innerHTML=i;let s=_k.querySelectorAll("a");for(n=0;n<s.length;n++)s[n].setAttribute("target","_blank");let a=U.WHITE,c=U.BLACK,d='<div class="cesium-infoBox-description-lighter" style="';return d+="overflow:auto;",d+="word-wrap:break-word;",d+=`background-color:${a.toCssColorString()};`,d+=`color:${c.toCssColorString()};`,d+='">',d+=`${_k.innerHTML}</div>`,_k.innerHTML="",d}function CLe(e,t,n,i){let o=Une(t),r=kne(t,n);r.position=o;let s=l(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",U.RED,Tz);r.billboard=ZLe(s);let a=zd(t,"name",jo.gpx);r.name=a,r.label=iIt(),r.label.text=a,r.description=One(t,r),i.clampToGround&&(r.billboard.heightReference=rt.CLAMP_TO_GROUND,r.label.heightReference=rt.CLAMP_TO_GROUND)}function oIt(e,t,n,i){let o=kne(t,n);o.description=One(t,o);let r=Dne(t,"rtept",jo.gpx),s=new Array(r.length);for(let a=0;a<r.length;a++)CLe(e,r[a],n,i),s[a]=Une(r[a]);o.polyline=VLe(i.routeColor),i.clampToGround&&(o.polyline.clampToGround=!0),o.polyline.positions=s}function rIt(e,t,n,i){let o=kne(t,n);o.description=One(t,o);let r=Dne(t,"trkseg",jo.gpx),s=[],a=[],c,d=!0,u=new mc;for(let m=0;m<r.length;m++)c=sIt(r[m]),s=s.concat(c.positions),c.times.length>0?(a=a.concat(c.times),u.addSamples(a,s),d=d&&!0):d=!1;if(d){let m=l(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",U.RED,Tz);o.billboard=ZLe(m),o.position=u,i.clampToGround&&(o.billboard.heightReference=rt.CLAMP_TO_GROUND),o.availability=new fs,o.availability.addInterval(new Vn({start:a[0],stop:a[a.length-1]}))}o.polyline=VLe(i.trackColor),o.polyline.positions=s,i.clampToGround&&(o.polyline.clampToGround=!0)}function sIt(e){let t={positions:[],times:[]},n=Dne(e,"trkpt",jo.gpx),i;for(let o=0;o<n.length;o++){let r=Une(n[o]);t.positions.push(r),i=zd(n[o],"time",jo.gpx),l(i)&&t.times.push(Q.fromIso8601(i))}return t}function aIt(e){let t=eT(e,"metadata",jo.gpx);if(l(t)){let n={name:zd(t,"name",jo.gpx),desc:zd(t,"desc",jo.gpx),author:cIt(t),copyright:dIt(t),link:RLe(t),time:zd(t,"time",jo.gpx),keywords:zd(t,"keywords",jo.gpx),bounds:uIt(t)};if(l(n.name)||l(n.desc)||l(n.author)||l(n.copyright)||l(n.link)||l(n.time)||l(n.keywords)||l(n.bounds))return n}}function cIt(e){let t=eT(e,"author",jo.gpx);if(l(t)){let n={name:zd(t,"name",jo.gpx),email:lIt(t),link:RLe(t)};if(l(n.name)||l(n.email)||l(n.link))return n}}function lIt(e){let t=eT(e,"email",jo.gpx);if(l(t)){let n=zd(t,"id",jo.gpx),i=zd(t,"domain",jo.gpx);return`${n}@${i}`}}function RLe(e){let t=eT(e,"link",jo.gpx);if(l(t)){let n={href:Sk(t,"href"),text:zd(t,"text",jo.gpx),mimeType:zd(t,"type",jo.gpx)};if(l(n.href)||l(n.text)||l(n.mimeType))return n}}function dIt(e){let t=eT(e,"copyright",jo.gpx);if(l(t)){let n={author:Sk(t,"author"),year:zd(t,"year",jo.gpx),license:zd(t,"license",jo.gpx)};if(l(n.author)||l(n.year)||l(n.license))return n}}function uIt(e){let t=eT(e,"bounds",jo.gpx);if(l(t)){let n={minLat:Tk(t,"minlat",jo.gpx),maxLat:Tk(t,"maxlat",jo.gpx),minLon:Tk(t,"minlon",jo.gpx),maxLon:Tk(t,"maxlon",jo.gpx)};if(l(n.minLat)||l(n.maxLat)||l(n.minLon)||l(n.maxLon))return n}}var TLe={wpt:CLe,rte:oIt,trk:rIt};function mIt(e,t,n,i){let o=Object.keys(TLe),r=o.length;for(let s=0;s<r;s++){let a=o[s],c=TLe[a],d=t.childNodes,u=d.length;for(let m=0;m<u;m++){let p=d[m];p.localName===a&&jo.gpx.indexOf(p.namespaceURI)!==-1&&c(e,p,n,i)}}}function _Le(e,t,n){let i=e._entityCollection;i.removeAll();let o=t.documentElement,r=Sk(o,"version"),s=Sk(o,"creator"),a,c=aIt(o);l(c)&&(a=c.name),o.localName==="gpx"?mIt(e,o,i,n):console.log(`GPX - Unsupported node: ${o.localName}`);let d,u=i.computeAvailability(),m=u.start,p=u.stop,b=Q.equals(m,tt.MINIMUM_VALUE),f=Q.equals(p,tt.MAXIMUM_VALUE);if(!b||!f){let _;b&&(_=new Date,_.setHours(0,0,0,0),m=Q.fromDate(_)),f&&(_=new Date,_.setHours(24,0,0,0),p=Q.fromDate(_)),d=new Yf,d.startTime=m,d.stopTime=p,d.currentTime=Q.clone(m),d.clockRange=as.LOOP_STOP,d.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,d.multiplier=Math.round(Math.min(Math.max(Q.secondsDifference(p,m)/60,1),31556900))}let y=!1;return e._name!==a&&(e._name=a,y=!0),e._creator!==s&&(e._creator=s,y=!0),hIt(e._metadata,c)&&(e._metadata=c,y=!0),e._version!==r&&(e._version=r,y=!0),d!==e._clock&&(y=!0,e._clock=d),y&&e._changed.raiseEvent(e),bs.setLoading(e,!1),e}function hIt(e,t){return!l(e)&&!l(t)?!1:l(e)&&l(t)?e.name!==t.name||e.dec!==t.desc||e.src!==t.src||e.author!==t.author||e.copyright!==t.copyright||e.link!==t.link||e.time!==t.time||e.bounds!==t.bounds:!0}function fIt(e,t,n,i){i=i??B.EMPTY_OBJECT;let o=n;if(typeof n=="string"||n instanceof ve){n=ve.createIfNeeded(n),o=n.fetchBlob();let r=e._resourceCredits,s=n.credits;if(l(s)){let a=s.length;for(let c=0;c<a;c++)r.push(s[c])}}return Promise.resolve(o).then(function(r){return r instanceof Blob?nIt(r).then(function(s){let a,c;try{a=SLe.parseFromString(s,"application/xml")}catch(d){c=d.toString()}if(l(c)||a.body||a.documentElement.tagName==="parsererror"){let d=l(c)?c:a.documentElement.firstChild.nodeValue;throw d||(d=a.body.innerText),new ae(d)}return _Le(e,a,i)}):_Le(e,r,i)}).catch(function(r){return e._error.raiseEvent(e,r),console.log(r),Promise.reject(r)})}function rG(){this._changed=new Se,this._error=new Se,this._loading=new Se,this._clock=void 0,this._entityCollection=new Pa(this),this._entityCluster=new _u,this._name=void 0,this._version=void 0,this._creator=void 0,this._metadata=void 0,this._isLoading=!1,this._pinBuilder=new lb}rG.load=function(e,t){return new rG().load(e,t)};Object.defineProperties(rG.prototype,{name:{get:function(){return this._name}},version:{get:function(){return this._version}},creator:{get:function(){return this._creator}},metadata:{get:function(){return this._metadata}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}}});rG.prototype.update=function(e){return!0};rG.prototype.load=function(e,t){if(!l(e))throw new ge("data is required.");t=t??B.EMPTY_OBJECT,bs.setLoading(this,!0);let n=this._name,i=this;return fIt(this,this._entityCollection,e,t).then(function(){let o,r=i._entityCollection.computeAvailability(),s=r.start,a=r.stop,c=Q.equals(s,tt.MINIMUM_VALUE),d=Q.equals(a,tt.MAXIMUM_VALUE);if(!c||!d){let m;c&&(m=new Date,m.setHours(0,0,0,0),s=Q.fromDate(m)),d&&(m=new Date,m.setHours(24,0,0,0),a=Q.fromDate(m)),o=new Yf,o.startTime=s,o.stopTime=a,o.currentTime=Q.clone(s),o.clockRange=as.LOOP_STOP,o.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,o.multiplier=Math.round(Math.min(Math.max(Q.secondsDifference(a,s)/60,1),31556900))}let u=!1;return o!==i._clock&&(i._clock=o,u=!0),n!==i._name&&(u=!0),u&&i._changed.raiseEvent(i),bs.setLoading(i,!1),i}).catch(function(o){return bs.setLoading(i,!1),i._error.raiseEvent(i,o),console.log(o),Promise.reject(o)})};var Zk=rG;var pVo=x(T(),1);function pIt(e,t){this.position=e,this.headingPitchRoll=t}var Vk=pIt;var vGo=x(T(),1);var f9=x(tu(),1);var eRo=x(T(),1);var RCo=x(T(),1);var TVo=x(T(),1);var gVo=x(T(),1);var Bne=new Date(2107,11,31),zne=new Date(1980,0,1),Et=void 0,PZ=1/0,Hu="undefined",Ku="function",GLe="object",Hi=new Uint8Array;var bIt=64,ALe=2;try{typeof navigator!=Hu&&navigator.hardwareConcurrency&&(ALe=navigator.hardwareConcurrency)}catch{}var gIt={workerURI:"./core/web-worker-wasm.js",wasmURI:"./core/streams/zlib-wasm/zlib-streams.wasm",chunkSize:64*1024,maxWorkers:ALe,terminateWorkerTimeout:5e3,workerStarvationTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,CompressionStream:typeof CompressionStream!=Hu&&CompressionStream,DecompressionStream:typeof DecompressionStream!=Hu&&DecompressionStream},yIt=["baseURI","wasmURI","workerURI","chunkSize","maxWorkers","terminateWorkerTimeout","workerStarvationTimeout","useCompressionStream","useWebWorkers","CompressionStream","DecompressionStream","CompressionStreamZlib","DecompressionStreamZlib"],ELe=Object.assign({},gIt);function Ck(){return ELe}function sG(e){return Math.max(e.chunkSize,bIt)}function g0(e){for(let t of yIt){let n=e[t];n!==Et&&(ELe[t]=n)}}var M1o=x(T(),1);var N1o=x(T(),1);var h1o=x(T(),1);var i1o=x(T(),1);var $Vo=x(T(),1);var CVo=x(T(),1);var SVo=x(T(),1),Rk=[[],[],[],[],[],[],[],[]];for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t=t&1?t>>>1^3988292384:t>>>1;Rk[0][e]=t}for(let e=0;e<256;e++)for(let t=1;t<8;t++){let n=Rk[t-1][e];Rk[t][e]=n>>>8^Rk[0][n&255]}var[LLe,xIt,TIt,_It,SIt,ZIt,VIt,CIt]=Rk,Ig=class{constructor(t){this.crc=t||-1}append(t){let n=this.crc|0,i=t.length|0,o=0;if(i>=8&&t.buffer){let r=new DataView(t.buffer,t.byteOffset,i),s=i-8;for(;o<=s;o+=8){let a=n^r.getInt32(o,!0),c=r.getInt32(o+4,!0);n=CIt[a&255]^VIt[a>>>8&255]^ZIt[a>>>16&255]^SIt[a>>>24&255]^_It[c&255]^TIt[c>>>8&255]^xIt[c>>>16&255]^LLe[c>>>24&255]}}for(;o<i;o++)n=n>>>8^LLe[(n^t[o])&255];this.crc=n}get(){return~this.crc}};var Gk=class extends TransformStream{constructor(){let t,n=new Ig;super({transform(i,o){n.append(i),o.enqueue(i)},flush(){let i=new Uint8Array(4);new DataView(i.buffer).setUint32(0,n.get()),t.value=i}}),t=this}};var DVo=x(T(),1);var AVo=x(T(),1);function aG(e){if(typeof TextEncoder==Hu){e=unescape(encodeURIComponent(e));let t=new Uint8Array(e.length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}else return new TextEncoder().encode(e)}var LVo=x(T(),1),cd={concat(e,t){if(e.length===0||t.length===0)return e.concat(t);let n=e[e.length-1],i=cd.getPartial(n);return i===32?e.concat(t):cd._shiftRight(t,i,n|0,e.slice(0,e.length-1))},bitLength(e){let t=e.length;if(t===0)return 0;let n=e[t-1];return(t-1)*32+cd.getPartial(n)},clamp(e,t){if(e.length*32<t)return e;e=e.slice(0,Math.ceil(t/32));let n=e.length;return t=t&31,n>0&&t&&(e[n-1]=cd.partial(t,e[n-1]&2147483648>>t-1,1)),e},partial(e,t,n){return e===32?t:(n?t|0:t<<32-e)+e*1099511627776},getPartial(e){return Math.round(e/1099511627776)||32},_shiftRight(e,t,n,i){for(i===void 0&&(i=[]);t>=32;t-=32)i.push(n),n=0;if(t===0)return i.concat(e);for(let s=0;s<e.length;s++)i.push(n|e[s]>>>t),n=e[s]<<32-t;let o=e.length?e[e.length-1]:0,r=cd.getPartial(o);return i.push(cd.partial(t+r&31,t+r>32?n:i.pop(),1)),i}},Ak={bytes:{fromBits(e){let n=cd.bitLength(e)/8,i=new Uint8Array(n),o;for(let r=0;r<n;r++)(r&3)===0&&(o=e[r/4]),i[r]=o>>>24,o<<=8;return i},toBits(e){let t=[],n,i=0;for(n=0;n<e.length;n++)i=i<<8|e[n],(n&3)===3&&(t.push(i),i=0);return n&3&&t.push(cd.partial(8*(n&3),i)),t}}},WLe={};WLe.sha1=class{constructor(e){let t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],e?(t._h=e._h.slice(0),t._buffer=e._buffer.slice(0),t._length=e._length):t.reset()}reset(){let e=this;return e._h=e._init.slice(0),e._buffer=[],e._length=0,e}update(e){let t=this;typeof e=="string"&&(e=Ak.utf8String.toBits(e));let n=t._buffer=cd.concat(t._buffer,e),i=t._length,o=t._length=i+cd.bitLength(e);if(o>9007199254740991)throw new Error("Cannot hash more than 2^53 - 1 bits");let r=new Uint32Array(n),s=0;for(let a=t.blockSize+i-(t.blockSize+i&t.blockSize-1);a<=o;a+=t.blockSize)t._block(r.subarray(16*s,16*(s+1))),s+=1;return n.splice(0,16*s),t}finalize(){let e=this,t=e._buffer,n=e._h;t=cd.concat(t,[cd.partial(1,1)]);for(let i=t.length+2;i&15;i++)t.push(0);for(t.push(Math.floor(e._length/4294967296)),t.push(e._length|0);t.length;)e._block(t.splice(0,16));return e.reset(),n}_f(e,t,n,i){if(e<=19)return t&n|~t&i;if(e<=39)return t^n^i;if(e<=59)return t&n|t&i|n&i;if(e<=79)return t^n^i}_S(e,t){return t<<e|t>>>32-e}_block(e){let t=this,n=t._h,i=Array(80);for(let d=0;d<16;d++)i[d]=e[d];let o=n[0],r=n[1],s=n[2],a=n[3],c=n[4];for(let d=0;d<=79;d++){d>=16&&(i[d]=t._S(1,i[d-3]^i[d-8]^i[d-14]^i[d-16]));let u=t._S(5,o)+t._f(d,r,s,a)+c+i[d]+t._key[Math.floor(d/20)]|0;c=a,a=s,s=t._S(30,r),r=o,o=u}n[0]=n[0]+o|0,n[1]=n[1]+r|0,n[2]=n[2]+s|0,n[3]=n[3]+a|0,n[4]=n[4]+c|0}};var Hne={};Hne.aes=class{constructor(e){let t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();let n=t._tables[0][4],i=t._tables[1],o=e.length,r,s,a,c=1;if(o!==4&&o!==6&&o!==8)throw new Error("invalid aes key size");for(t._key=[s=e.slice(0),a=[]],r=o;r<4*o+28;r++){let d=s[r-1];(r%o===0||o===8&&r%o===4)&&(d=n[d>>>24]<<24^n[d>>16&255]<<16^n[d>>8&255]<<8^n[d&255],r%o===0&&(d=d<<8^d>>>24^c<<24,c=c<<1^(c>>7)*283)),s[r]=s[r-o]^d}for(let d=0;r;d++,r--){let u=s[d&3?r:r-4];r<=4||d<4?a[d]=u:a[d]=i[0][n[u>>>24]]^i[1][n[u>>16&255]]^i[2][n[u>>8&255]]^i[3][n[u&255]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){let e=this._tables[0],t=this._tables[1],n=e[4],i=t[4],o=[],r=[],s,a,c,d;for(let u=0;u<256;u++)r[(o[u]=u<<1^(u>>7)*283)^u]=u;for(let u=s=0;!n[u];u^=a||1,s=r[s]||1){let m=s^s<<1^s<<2^s<<3^s<<4;m=m>>8^m&255^99,n[u]=m,i[m]=u,d=o[c=o[a=o[u]]];let p=d*16843009^c*65537^a*257^u*16843008,b=o[m]*257^m*16843008;for(let f=0;f<4;f++)e[f][u]=b=b<<24^b>>>8,t[f][m]=p=p<<24^p>>>8}for(let u=0;u<5;u++)e[u]=e[u].slice(0),t[u]=t[u].slice(0)}_crypt(e,t){if(e.length!==4)throw new Error("invalid aes block size");let n=this._key[t],i=n.length/4-2,o=[0,0,0,0],r=this._tables[t],s=r[0],a=r[1],c=r[2],d=r[3],u=r[4],m=e[0]^n[0],p=e[t?3:1]^n[1],b=e[2]^n[2],f=e[t?1:3]^n[3],y=4,_,S,Z;for(let V=0;V<i;V++)_=s[m>>>24]^a[p>>16&255]^c[b>>8&255]^d[f&255]^n[y],S=s[p>>>24]^a[b>>16&255]^c[f>>8&255]^d[m&255]^n[y+1],Z=s[b>>>24]^a[f>>16&255]^c[m>>8&255]^d[p&255]^n[y+2],f=s[f>>>24]^a[m>>16&255]^c[p>>8&255]^d[b&255]^n[y+3],y+=4,m=_,p=S,b=Z;for(let V=0;V<4;V++)o[t?3&-V:V]=u[m>>>24]<<24^u[p>>16&255]<<16^u[b>>8&255]<<8^u[f&255]^n[y++],_=m,m=p,p=b,b=f,f=_;return o}};var Kne={};Kne.ctrGladman=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if((e>>24&255)===255){let t=e>>16&255,n=e>>8&255,i=e&255;t===255?(t=0,n===255?(n=0,i===255?i=0:++i):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=i}else e+=1<<24;return e}incCounter(e){(e[0]=this.incWord(e[0]))===0&&(e[1]=this.incWord(e[1]))}calculate(e,t,n){let i;if(!(i=t.length))return[];let o=cd.bitLength(t);for(let r=0;r<i;r+=4){this.incCounter(n);let s=e.encrypt(n);t[r]^=s[0],t[r+1]^=s[1],t[r+2]^=s[2],t[r+3]^=s[3]}return cd.clamp(t,o)}};var tT={importKey(e){return new tT.hmacSha1(Ak.bytes.toBits(e))},pbkdf2(e,t,n,i){if(n=n||1e4,i<0||n<0)throw new Error("invalid params to pbkdf2");let o=(i>>5)+1<<2,r,s,a,c,d,u=new ArrayBuffer(o),m=new DataView(u),p=0,b=cd;for(t=Ak.bytes.toBits(t),d=1;p<(o||1);d++){for(r=s=e.encrypt(b.concat(t,[d])),a=1;a<n;a++)for(s=e.encrypt(s),c=0;c<s.length;c++)r[c]^=s[c];for(a=0;p<(o||1)&&a<r.length;a++)m.setInt32(p,r[a]),p+=4}return u.slice(0,i/8)}};tT.hmacSha1=class{constructor(e){let t=this,n=t._hash=WLe.sha1,i=[[],[]];t._baseHash=[new n,new n];let o=t._baseHash[0].blockSize/32;e.length>o&&(e=new n().update(e).finalize());for(let r=0;r<o;r++)i[0][r]=e[r]^909522486,i[1][r]=e[r]^1549556828;t._baseHash[0].update(i[0]),t._baseHash[1].update(i[1]),t._resultHash=new n(t._baseHash[0])}reset(){let e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){let t=this;t._updated=!0,t._resultHash.update(e)}digest(){let e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),n}encrypt(e){if(this._updated)throw new Error("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}};var NVo=x(T(),1);var RIt=typeof crypto!=Hu&&typeof crypto.getRandomValues==Ku,Pg="Invalid password",nT="Invalid signature",Xg="zipjs-abort-check-password",GIt="Crypto API not supported";function _z(e){if(RIt)return crypto.getRandomValues(e);throw new Error(GIt)}var cG=16,AIt="raw",ILe={name:"PBKDF2"},EIt={name:"HMAC"},LIt="SHA-1",WIt=Object.assign({hash:EIt},ILe),Jne=Object.assign({iterations:1e3,hash:{name:LIt}},ILe),vIt=["deriveBits"],Lk=[8,12,16],Ek=[16,24,32],Ng=10,FIt=[0,0,0,0],Vz=typeof crypto!=Hu,Fk=Vz&&crypto.subtle,PLe=Vz&&typeof Fk!=Hu,y0=Ak.bytes,IIt=Hne.aes,PIt=Kne.ctrGladman,XIt=tT.hmacSha1,vLe=Vz&&PLe&&typeof Fk.importKey==Ku,FLe=Vz&&PLe&&typeof Fk.deriveBits==Ku,Sz=class extends TransformStream{constructor({password:t,rawPassword:n,encryptionStrength:i,checkPasswordOnly:o}){super({start(){XLe(this,t,n,i)},async transform(r,s){let a=this,{password:c,strength:d,resolveReady:u,ready:m}=a;c?(await NIt(a,d,c,hh(r,0,Lk[d]+2)),r=hh(r,Lk[d]+2),o?s.error(new Error(Xg)):u()):await m;let p=new Uint8Array(r.length-Ng-(r.length-Ng)%cG);s.enqueue(NLe(a,r,p,0,Ng,!0))},async flush(r){let{ctr:s,hmac:a,pending:c,ready:d}=this;if(a&&s){await d;let u=hh(c,0,c.length-Ng),m=hh(c,c.length-Ng),p=Hi;if(u.length){let y=vk(y0,u);a.update(y);let _=s.update(y);p=Wk(y0,_)}let b=hh(Wk(y0,a.digest()),0,Ng),f=c.length<Ng?1:0;for(let y=0;y<Ng;y++)f|=b[y]^m[y];if(f)throw new Error(nT);r.enqueue(p)}}})}},Zz=class extends TransformStream{constructor({password:t,rawPassword:n,encryptionStrength:i}){let o;super({start(){XLe(this,t,n,i)},async transform(r,s){let a=this,{password:c,strength:d,resolveReady:u,ready:m}=a,p=Hi;c?(p=await YIt(a,d,c),u()):await m;let b=new Uint8Array(p.length+r.length-r.length%cG);b.set(p,0),s.enqueue(NLe(a,r,b,p.length,0))},async flush(r){let{ctr:s,hmac:a,pending:c,ready:d}=this;if(a&&s){await d;let u=Hi;if(c.length){let m=s.update(vk(y0,c));a.update(m),u=Wk(y0,m)}o.signature=Wk(y0,a.digest()).slice(0,Ng),r.enqueue(jne(u,o.signature))}}}),o=this}};function XLe(e,t,n,i){Object.assign(e,{ready:new Promise(o=>e.resolveReady=o),password:kIt(t,n),strength:i-1,pending:Hi})}function NLe(e,t,n,i,o,r){let{ctr:s,hmac:a,pending:c}=e;c.length&&(t=jne(c,t));let d=t.length-o;n=UIt(n,i+(d-d%cG));let u;for(u=0;u<=d-cG;u+=cG){let m=vk(y0,hh(t,u,u+cG));r&&a.update(m);let p=s.update(m);r||a.update(p),n.set(Wk(y0,p),u+i)}return e.pending=hh(t,u),n}async function NIt(e,t,n,i){let o=await YLe(e,t,n,hh(i,0,Lk[t])),r=hh(i,Lk[t]);if(o[0]!=r[0]||o[1]!=r[1])throw new Error(Pg)}async function YIt(e,t,n){let i=_z(new Uint8Array(Lk[t])),o=await YLe(e,t,n,i);return jne(i,o)}async function YLe(e,t,n,i){e.password=null;let o=await wIt(AIt,n,WIt,!1,vIt),r=await MIt(Object.assign({salt:i},Jne),o,8*(Ek[t]*2+2)),s=new Uint8Array(r),a=vk(y0,hh(s,0,Ek[t])),c=vk(y0,hh(s,Ek[t],Ek[t]*2)),d=hh(s,Ek[t]*2);return Object.assign(e,{keys:{key:a,authentication:c,passwordVerification:d},ctr:new PIt(new IIt(a),Array.from(FIt)),hmac:new XIt(c)}),d}async function wIt(e,t,n,i,o){if(vLe)try{return await Fk.importKey(e,t,n,i,o)}catch{return vLe=!1,tT.importKey(t)}else return tT.importKey(t)}async function MIt(e,t,n){if(FLe)try{return await Fk.deriveBits(e,t,n)}catch{return FLe=!1,tT.pbkdf2(t,e.salt,Jne.iterations,n)}else return tT.pbkdf2(t,e.salt,Jne.iterations,n)}function kIt(e,t){return t===Et?aG(e):t}function jne(e,t){let n=e;return e.length+t.length&&(n=new Uint8Array(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function UIt(e,t){if(t&&t>e.length){let n=e;e=new Uint8Array(t),e.set(n,0)}return e}function hh(e,t,n){return e.subarray(t,n)}function Wk(e,t){return e.fromBits(t)}function vk(e,t){return e.toBits(t)}var HVo=x(T(),1);var Ik=12,Cz=class extends TransformStream{constructor({password:t,rawPassword:n,passwordVerification:i,checkPasswordOnly:o}){super({start(){ULe(this,t,n,i)},transform(r,s){let a=this;if(a.password||a.rawPassword){let c=wLe(a,r.subarray(0,Ik));if(a.password=a.rawPassword=null,(c.at(-1)^a.passwordVerification)!=0)throw new Error(Pg);r=r.subarray(Ik)}o?s.error(new Error(Xg)):s.enqueue(wLe(a,r))}})}},Rz=class extends TransformStream{constructor({password:t,rawPassword:n,passwordVerification:i}){super({start(){ULe(this,t,n,i)},transform(o,r){let s=this,a,c;if(s.password||s.rawPassword){s.password=s.rawPassword=null;let d=_z(new Uint8Array(Ik));d[Ik-1]=s.passwordVerification,a=new Uint8Array(o.length+d.length),a.set(MLe(s,d),0),c=Ik}else a=new Uint8Array(o.length),c=0;a.set(MLe(s,o),c),r.enqueue(a)}})}};function ULe(e,t,n,i){Object.assign(e,{password:t,rawPassword:n,passwordVerification:i}),DIt(e,t,n)}function wLe(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=DLe(e)^t[i],Gz(e,n[i]);return n}function MLe(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=DLe(e)^t[i],Gz(e,t[i]);return n}function DIt(e,t,n){let i=[305419896,591751049,878082192];if(Object.assign(e,{keys:i,crcKey0:new Ig(i[0]),crcKey2:new Ig(i[2])}),n)for(let o=0;o<n.length;o++)Gz(e,n[o]);else for(let o=0;o<t.length;o++)Gz(e,t.charCodeAt(o))}function Gz(e,t){let[,n]=e.keys;e.crcKey0.append([t]);let i=~e.crcKey0.get();n=kLe(Math.imul(kLe(n+OLe(i)),134775813)+1),e.crcKey2.append([n>>>24]);let o=~e.crcKey2.get();e.keys=[i,n,o]}function DLe(e){let t=e.keys[2]|2;return OLe(Math.imul(t,t^1)>>>8)}function OLe(e){return e&255}function kLe(e){return e&4294967295}var lG="Invalid uncompressed size",Pk="Invalid compressed data",OIt="deflate-raw",BIt="deflate64-raw",zIt="gzip",HIt=10,Qne=8,Az=class extends TransformStream{constructor(t,{chunkSize:n,CompressionStreamZlib:i,CompressionStream:o}){super({});let{compressed:r,encrypted:s,useCompressionStream:a,zipCrypto:c,signed:d,level:u,deflate64:m}=t,p=this,b,f,y,_=super.readable,S=d&&r&&!m&&(!s||c)&&!!(a&&o);(!s||c)&&d&&!S&&(b=new Gk,_=iT(_,b)),r&&(S?(y=new qne,_=HLe(_,new o(zIt)),_=iT(_,y)):_=zLe(_,a,{level:u,chunkSize:n},o,i,o)),s&&(c?_=iT(_,new Rz(t)):(f=new Zz(t),_=iT(_,f))),BLe(p,_,()=>{let Z;s&&!c&&(Z=f.signature),(!s||c)&&d&&(Z=S?y.signature:new DataView(b.value.buffer).getUint32(0)),p.signature=Z})}},qne=class extends TransformStream{constructor(){let t,n=HIt,i=new Uint8Array(0);super({transform(o,r){if(n){let p=Math.min(n,o.length);if(n-=p,o=o.subarray(p),!o.length)return}let s=i.length+o.length;if(s<=Qne){let p=new Uint8Array(s);p.set(i),p.set(o,i.length),i=p;return}let a=s-Qne,c=new Uint8Array(a),d=Math.min(a,i.length);c.set(i.subarray(0,d),0),a>d&&c.set(o.subarray(0,a-d),d),r.enqueue(c);let u=new Uint8Array(Qne),m=i.length-d;m&&u.set(i.subarray(d),0),u.set(o.subarray(a-d),m),i=u},flush(){let o=new DataView(i.buffer,i.byteOffset,i.byteLength);t.signature=o.getUint32(0,!0),t.uncompressedSize=o.getUint32(4,!0)}}),t=this}},Ez=class extends TransformStream{constructor(t,{chunkSize:n,DecompressionStreamZlib:i,DecompressionStream:o}){super({});let{zipCrypto:r,encrypted:s,signed:a,signature:c,compressed:d,useCompressionStream:u,deflate64:m}=t,p,b,f=super.readable;s&&(r?f=iT(f,new Cz(t)):(b=new Sz(t),f=iT(f,b))),d&&(f=zLe(f,u,{chunkSize:n,deflate64:m},o,i,o),f=jIt(f)),(!s||r)&&a&&(p=new Gk,f=iT(f,p)),BLe(this,f,()=>{if((!s||r)&&a){let y=new DataView(p.value.buffer);if(c!=y.getUint32(0,!1))throw new Error(nT)}})}};function BLe(e,t,n){t=iT(t,new TransformStream({flush:n})),Object.defineProperty(e,"readable",{get(){return t}})}function zLe(e,t,n,i,o,r){let s=t&&i?i:o||r,a=n.deflate64?BIt:OIt,c;try{c=new s(a,n)}catch(d){if(t)if(o)c=new o(a,n);else if(r)c=new r(a,n);else throw d;else throw d}return HLe(e,c)}function iT(e,t){return e.pipeThrough(t)}function HLe(e,t){let n=t.writable.getWriter(),i=e.getReader();return o(),t.readable;async function o(){try{for(;;){await n.ready;let r=await i.read();if(r.done){await n.close();break}await n.write(r.value)}}catch(r){await KIt(n,r),await JIt(i,r)}}}async function KIt(e,t){try{await e.abort(t)}catch{}}async function JIt(e,t){try{await e.cancel(t)}catch{}}function jIt(e){let t=e.getReader();return new ReadableStream({async pull(n){let i;try{i=await t.read()}catch(s){if(s&&s.message)throw s;let a=new Error(Pk);throw a.cause=s,a}let{value:o,done:r}=i;r?n.close():n.enqueue(o)},cancel(n){return t.cancel(n)}})}var QIt=64*1024,KLe="message",JLe="start",jLe="pull",$ne="data",QLe="ack",qLe="close",dG="deflate",vz="inflate";var Lz=class extends TransformStream{constructor(t,n){super({});let i=this,{codecType:o}=t,r;o.startsWith(dG)?r=Az:o.startsWith(vz)&&(r=Ez),i.outputSize=0;let s=0,a=new r(t,n),c=super.readable,d=new TransformStream({transform(m,p){m&&m.length&&(s+=m.length,p.enqueue(m))},flush(){Object.assign(i,{inputSize:s})}}),u=new TransformStream({transform(m,p){if(m&&m.length&&(p.enqueue(m),i.outputSize+=m.length,t.outputSize!==Et&&i.outputSize>t.outputSize))throw new Error(lG)},flush(){let{signature:m}=a;Object.assign(i,{signature:m,inputSize:s})}});Object.defineProperty(i,"readable",{get(){return c.pipeThrough(d).pipeThrough(a).pipeThrough(u)}})}},Wz=class extends TransformStream{constructor(t){let n;t>=1||(t=QIt),super({transform:i,flush(o){n&&n.length&&o.enqueue(n)}});function i(o,r){if(n){let a=new Uint8Array(n.length+o.length);a.set(n),a.set(o,n.length),o=a,n=null}let s=0;for(;o.length-s>t;)r.enqueue(o.slice(s,s+t)),s+=t;n=s?o.slice(s):o}}};var c1o=x(T(),1);var $Le={type:"module"},iWe="error",qIt="messageerror",Fz,eWe,eie,tWe,nie=!0;try{nie=typeof structuredClone==Ku&&structuredClone(new DOMException("","AbortError")).code!==Et}catch{}var oWe=()=>{};function rWe({initModule:e}){oWe=e}var XZ=class{constructor(t,{readable:n,writable:i},{options:o,config:r,streamOptions:s,useWebWorkers:a,transferStreams:c,workerURI:d},u){let{signal:m}=s;return Object.assign(t,{busy:!0,generation:(t.generation||0)+1,readable:n.pipeThrough(new Wz(sG(r))).pipeThrough(new iie(s),{signal:m}),writable:i,options:Object.assign({},o),workerURI:d,transferStreams:c,terminate(){return new Promise(p=>{let{worker:b,busy:f}=t;b?(f?t.resolveTerminated=p:(b.terminate(),p()),t.interface=null):p()})},onTaskFinished(){if(t.busy){let{resolveTerminated:p}=t;p&&(t.resolveTerminated=null,t.terminated=!0,t.worker.terminate(),p()),t.busy=!1,u(t)}}}),Fz===Et&&(Fz=typeof Worker!=Hu),(a&&Fz?$It:sWe)(t,r)}},iie=class extends TransformStream{constructor({onstart:t,onprogress:n,size:i,onend:o}){let r=0;super({async start(){t&&await tie(t,i)},async transform(s,a){r+=s.length,n&&await tie(n,r,i),a.enqueue(s)},async flush(){o&&await tie(o,r)}})}};async function tie(e,...t){try{await e(...t)}catch{}}function sWe(e,t){return{run:()=>ePt(e,t)}}function $It(e,t){let{baseURI:n,chunkSize:i}=t,{wasmURI:o}=t;if(!e.interface){typeof o==Ku&&(o=o());let r;try{r=Iz(e.workerURI,n,e)}catch{return Fz=!1,sWe(e,t)}Object.assign(e,{worker:r,terminated:!1,interface:{run:()=>tPt(e,{chunkSize:i,wasmURI:o,baseURI:n})}})}return e.interface}async function ePt({options:e,readable:t,writable:n,onTaskFinished:i},o){let r;try{if(!e.useCompressionStream)try{await oWe(o)}catch{let d=e.codecType.startsWith(dG)?o.CompressionStreamZlib:o.DecompressionStreamZlib;(!d||d.requiresModule)&&(e.useCompressionStream=!0)}r=new Lz(e,o),await t.pipeThrough(r).pipeTo(n,{preventClose:!0,preventAbort:!0});let{signature:s,inputSize:a,outputSize:c}=r;return{signature:s,inputSize:a,outputSize:c}}catch(s){throw r&&(s.outputSize=r.outputSize),s}finally{i()}}async function tPt(e,t){let n,i,o=new Promise((p,b)=>{n=p,i=b});Object.assign(e,{reader:null,writer:null,resolveResult:n,rejectResult:i,result:o});let{readable:r,options:s}=e,{writable:a,closed:c,abortPipe:d}=nPt(e.writable),u;try{u=oie({type:JLe,options:s,config:t,readable:r,writable:a},e)}catch(p){d();try{await c}catch{}throw e.onTaskFinished(),p}u||Object.assign(e,{reader:r.getReader(),writer:a.getWriter()});try{let p=await o;return await m(),await c,p}catch(p){await m(),d();try{await c}catch{}throw p}async function m(){if(!u&&!a.locked)try{await a.getWriter().close()}catch{}}}function nPt(e){let t=new AbortController,{writable:n,readable:i}=new TransformStream,o=i.pipeTo(e,{preventClose:!0,preventAbort:!0,signal:t.signal});return o.catch(()=>{}),{writable:n,closed:o,abortPipe:()=>t.abort()}}function aWe(e){let{worker:t}=e;if(t)try{t.terminate()}catch{}e.interface=null}function Iz(e,t,n,i,o=!0){let r,s,a;if(eie===Et||eWe!==e){let c=typeof e==Ku;c?s=e(o):s=e;let d=s.startsWith("data:"),u=s.startsWith("blob:");if(d||u){i===Et&&(i=!1),i&&(a=$Le);try{r=new Worker(s,a)}catch(m){if(u)try{URL.revokeObjectURL(s)}catch{}if(c&&u)return Iz(e,t,n,i,!1);if(i)throw m;return Iz(e,t,n,!0,!1)}}else{i===Et&&(i=!0),i&&(a=$Le);try{s=new URL(s,t)}catch{}try{r=new Worker(s,a)}catch(m){if(i)throw m;return Iz(e,t,n,!1,o)}}eWe=e,eie=s,tWe=a}else r=new Worker(eie,tWe);return r.addEventListener(KLe,c=>iPt(c,n)),r.addEventListener(iWe,c=>nWe(c,n)),r.addEventListener(qIt,c=>nWe(c,n)),r}function nWe(e,t){e.preventDefault&&e.preventDefault();let{rejectResult:n,writer:i,onTaskFinished:o}=t;aWe(t),n&&(n(e.error||new Error(e.message||iWe)),i&&i.releaseLock(),o())}function oie(e,{worker:t,writer:n,transferStreams:i}){try{let{value:o,readable:r,writable:s}=e,a=[];if(o&&(e.value=o.byteOffset||o.byteLength!=o.buffer.byteLength?new Uint8Array(o):o,a.push(e.value.buffer)),i&&nie?(r&&a.push(r),s&&a.push(s)):e.readable=e.writable=null,a.length)try{return t.postMessage(e,a),!0}catch{nie=!1,e.readable=e.writable=null,t.postMessage(e)}else t.postMessage(e)}catch(o){throw n&&n.releaseLock(),o}}async function iPt({data:e},t){let{type:n,value:i,messageId:o,result:r,error:s}=e,{reader:a,writer:c,resolveResult:d,rejectResult:u,onTaskFinished:m,generation:p}=t,b=()=>t.generation!=p;try{if(s){let{message:y,stack:_,code:S,name:Z,outputSize:V}=s,C=new Error(y);Object.assign(C,{stack:_,code:S,name:Z,outputSize:V}),f(C)}else{if(n==jLe){let{value:y,done:_}=await a.read();b()||oie({type:$ne,value:y,done:_,messageId:o},t)}n==$ne&&(await c.ready,await c.write(new Uint8Array(i)),b()||oie({type:QLe,messageId:o},t)),n==qLe&&f(null,r)}}catch(y){b()||(aWe(t),f(y))}function f(y,_){b()||(y?u(y):d(_),c&&c.releaseLock(),m())}}var NZ=[],uG=[],mG,Pz;var cWe=0;async function Nz(e,t){let{options:n,config:i}=t,{transferStreams:o,useWebWorkers:r,useCompressionStream:s,compressed:a,signed:c,encrypted:d}=n,{workerURI:u,maxWorkers:m}=i;t.transferStreams=o||o===Et;let p=!a&&!c&&!d&&!t.transferStreams;return t.useWebWorkers=!p&&(r||r===Et&&i.useWebWorkers),t.workerURI=t.useWebWorkers&&u?u:Et,n.useCompressionStream=s||s===Et&&i.useCompressionStream,(await b()).run();async function b(){let y=NZ.find(_=>!_.busy);if(y)return lWe(y),new XZ(y,e,t,f);if(NZ.length<m){let _={indexWorker:cWe};return cWe++,NZ.push(_),new XZ(_,e,t,f)}else return new Promise(_=>{uG.push({resolve:_,stream:e,workerOptions:t}),Pz=i.workerStarvationTimeout,Xz()})}function f(y){if(dWe(),uG.length){let[{resolve:_,stream:S,workerOptions:Z}]=uG.splice(0,1);_(new XZ(y,S,Z,f)),Xz()}else y.worker?(lWe(y),sPt(y,t)):NZ=NZ.filter(_=>_!=y)}}function Xz(){!mG&&uG.length&&Number.isFinite(Pz)&&Pz>=0&&(mG=setTimeout(oPt,Pz))}function dWe(){mG&&(clearTimeout(mG),mG=null)}function oPt(){if(mG=null,uG.length){let[{resolve:e,stream:t,workerOptions:n}]=uG.splice(0,1),i=Object.assign({},n,{useWebWorkers:!1,workerURI:Et});e(new XZ({},t,i,rPt)),Xz()}}function rPt(){dWe(),Xz()}function sPt(e,t){let{config:n}=t,{terminateWorkerTimeout:i}=n;Number.isFinite(i)&&i>=0&&(e.terminated?e.terminated=!1:e.terminateTimeout=setTimeout(async()=>{NZ=NZ.filter(o=>o!=e);try{await e.terminate()}catch{}},i))}function lWe(e){let{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}var y1o=x(T(),1);var uWe="Writer iterator completed too soon",mWe="Writer not initialized",aPt="text/plain";var cPt="Content-Type";var lPt=64*1024,b1o=256*1024,rie="writable",hG=class{constructor(){this.size=0}init(){this.initialized=!0}},Xk=class extends hG{get readable(){return this.createReadable()}createReadable({offset:t=0,size:n,diskNumberStart:i,chunkSize:o=lPt}={}){let r=this,s=0;return new ReadableStream({async pull(a){let c=n===Et?o:Math.min(o,n-s),d=await ta(r,t+s,c,i);a.enqueue(d),s+o>n||n===Et&&!d.length&&c?a.close():s+=o}})}},Yz=class extends hG{constructor(){super();let t=this,n=new WritableStream({write(i){if(!t.initialized)throw new Error(mWe);return t.writeUint8Array(i)}});Object.defineProperty(t,rie,{get(){return n}})}writeUint8Array(){}};var Nk=class extends Yz{constructor(t){super(),Object.assign(this,{data:"data:"+(t||"")+";base64,",pending:[]})}writeUint8Array(t){let n=this,i,o=n.pending,r=n.pending.length;for(n.pending="",i=0;i<Math.floor((r+t.length)/3)*3-r;i++)o+=String.fromCharCode(t[i]);for(;i<t.length;i++)n.pending+=String.fromCharCode(t[i]);o.length>2?n.data+=btoa(o):n.pending=o+n.pending}getData(){return this.data+btoa(this.pending)}},x0=class extends Xk{constructor(t){super(),Object.assign(this,{blob:t,size:t.size})}async readUint8Array(t,n){let i=this,o=t+n,s=await(t||o<i.size?i.blob.slice(t,o):i.blob).arrayBuffer();return s.byteLength>n&&(s=s.slice(t,o)),new Uint8Array(s)}},fG=class extends hG{constructor(t){super();let n=this,i=new TransformStream,o=[];t&&o.push([cPt,t]),Object.defineProperty(n,rie,{get(){return i.writable}}),n.blob=new Response(i.readable,{headers:o}).blob(),n.blob.catch(()=>{})}getData(){return this.blob}},Yk=class extends x0{constructor(t){super(new Blob([t],{type:aPt}))}},wk=class extends fG{constructor(t){super(t),Object.assign(this,{encoding:t,utf8:!t||t.toLowerCase()=="utf-8"})}async getData(){let{encoding:t,utf8:n}=this,i=await super.getData();if(i.text&&n)return i.text();{let o=new FileReader;return new Promise((r,s)=>{Object.assign(o,{onload:({target:a})=>r(a.result),onerror:()=>s(o.error)}),o.readAsText(i,t)})}}};var wz=class extends Xk{constructor(t){super(),this.readers=t}async init(){let t=this,{readers:n}=t;t.lastDiskNumber=0,t.lastDiskOffset=0,await Promise.all(n.map(async(i,o)=>{await Ju(i),o!=n.length-1&&(t.lastDiskOffset+=i.size),t.size+=i.size})),super.init()}async readUint8Array(t,n,i=0){let o=this,{readers:r}=this,s,a=i;a==-1&&(a=r.length-1);let c=t;for(;r[a]&&c>=r[a].size;)c-=r[a].size,a++;let d=r[a];if(d){let u=d.size;if(c+n<=u)s=await ta(d,c,n);else{let m=u-c;s=new Uint8Array(n);let p=await ta(d,c,m);s.set(p,0);let b=await o.readUint8Array(t+m,n-m,i);s.set(b,m),p.length+b.length<n&&(s=s.subarray(0,p.length+b.length))}}else s=Hi;return o.lastDiskNumber=Math.max(a,o.lastDiskNumber),s}},Mk=class extends hG{constructor(t,n=4294967295){super();let i=this;Object.assign(i,{diskNumber:0,diskOffset:0,size:0,maxSize:n,availableSize:n});let o,r,s,a=new WritableStream({async write(u){let{availableSize:m}=i;if(s)u.length>=m?(await c(u.subarray(0,m)),await d(),i.diskOffset+=o.size,i.diskNumber++,s=null,i.availableSize=i.maxSize,u.length>m&&await this.write(u.subarray(m))):await c(u);else{let{value:p,done:b}=await t.next();if(b&&!p)throw new Error(uWe);o=p,o.size=0,o.maxSize&&(i.maxSize=o.maxSize),i.availableSize=i.maxSize,await Ju(o),r=p.writable,s=r.getWriter(),await this.write(u)}},async close(){s&&(await s.ready,await d())},async abort(u){s&&await s.abort(u)}});Object.defineProperty(i,rie,{get(){return a}});async function c(u){let m=u.length;m&&(await s.ready,await s.write(u),o.size+=m,i.availableSize-=m)}async function d(){await s.close()}}},YZ=class{constructor(t){return Array.isArray(t)&&(t=new wz(t)),t instanceof ReadableStream&&(t={readable:t}),t}},pG=class{constructor(t){return t.writable===Et&&typeof t.next==Ku&&(t=new Mk(t)),t instanceof WritableStream&&(t={writable:t}),t.size===Et&&(t.size=0),t instanceof Mk||Object.assign(t,{diskNumber:0,diskOffset:0,availableSize:PZ,maxSize:PZ}),t}};async function Ju(e,t){if(e.init&&!e.initialized)await e.init(t);else return Promise.resolve()}function ta(e,t,n,i){return e.readUint8Array(t,n,i)}var Z1o=x(T(),1);var T1o=x(T(),1),hWe="\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\xB6\xA7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0".split(""),dPt=hWe.length==256;function fWe(e){if(dPt){let t="";for(let n=0;n<e.length;n++)t+=hWe[e[n]];return t}else return new TextDecoder().decode(e)}function kk(e,t){return t&&t.trim().toLowerCase()=="cp437"?fWe(e):new TextDecoder(t,{ignoreBOM:!0}).decode(e)}var C1o=x(T(),1),sie="filename",aie="rawFilename",Uk="comment",cie="rawComment",Dk="uncompressedSize",lie="compressedSize",die="offset",uie="diskNumberStart",bG="lastModDate",Mz="rawLastModDate",Ok="lastAccessDate",pWe="rawLastAccessDate",Bk="creationDate",mie="rawCreationDate",hie="internalFileAttributes",fie="externalFileAttributes",pie="msdosAttributesRaw",bie="msdosAttributes",gie="msDosCompatible",kz="zip64",yie="encrypted",xie="version",Tie="versionMadeBy",_ie="zipCrypto",gG="directory",Sie="executable",Zie="compressionMethod",Vie="signature",Uz="extraField",uPt="extraFieldInfoZip",mPt="extraFieldUnix";var Cie="unixMode",Rie="setuid",Gie="setgid",Aie="sticky",hPt="bitFlag",fPt="filenameUTF8",pPt="commentUTF8",bPt="rawExtraField",gPt="extraFieldZip64",yPt="extraFieldUnicodePath",xPt="extraFieldUnicodeComment",TPt="extraFieldAES",_Pt="extraFieldNTFS",SPt="extraFieldExtendedTimestamp",ZPt=[sie,aie,Dk,lie,bG,Mz,Uk,cie,Ok,Bk,mie,die,uie,hie,fie,pie,bie,gie,kz,yie,xie,Tie,_ie,gG,Sie,Zie,Vie,Uz,mPt,uPt,"uid","gid",Cie,Rie,Gie,Aie,hPt,fPt,pPt,bPt,gPt,yPt,xPt,TPt,_Pt,SPt],oT=class{constructor(t){ZPt.forEach(n=>this[n]=t[n])}};var G1o=x(T(),1),bWe="filenameEncoding",gWe="commentEncoding",yWe="decodeText",xWe="extractPrependedData",TWe="extractAppendedData",Dz="password",Oz="rawPassword",Bz="passThrough",zz="signal",_We="checkPasswordOnly",SWe="checkOverlappingEntryOnly",ZWe="checkOverlappingEntry",Eie="checkAmbiguity",VWe="checkSignature",Hz="useWebWorkers",Kz="useCompressionStream",Jz="transferStreams",jz="preventClose",CWe="encryptionStrength",RWe="extendedTimestamp",GWe="keepOrder",AWe="level",EWe="bufferedWrite",LWe="createTempStream",WWe="dataDescriptorSignature",vWe="useUnicodeFileNames",FWe="dataDescriptor",IWe="supportZip64SplitFile",PWe="encodeText",zk="offset",XWe="usdz",NWe="unixExtraFieldType",Lie="strictness",YWe="maxAppendedDataSize",Hk="strict",wWe="balanced",Wie="tolerant";var Kk="File format is not recognized",jWe="End of central directory not found",QWe="End of Zip64 central directory locator not found",qWe="Central directory header not found",$We="Local file header not found",eve="Zip64 extra field not found",tve="File contains encrypted entry",nve="Encryption method not supported",Fie="Compression method not supported",Iie="Split zip file",ive="Overlapping entry found",ove="Ambiguous archive",kWe="utf-8",RPt="UTF8",UWe="cp437",DWe=2057,GPt=[[Dk,4294967295],[lie,4294967295],[die,4294967295],[uie,65535]],OWe={65535:{getValue:Go,bytes:4},4294967295:{getValue:Yg,bytes:8}},MZ=class{constructor(t,n={}){Object.assign(this,{reader:new YZ(t),options:n,config:Ck(),readRanges:new Map})}async*getEntriesGenerator(t={}){let n=this,{reader:i}=n,{config:o}=n;if(await Ju(i),(i.size===Et||!i.readUint8Array)&&(i=new x0(await new Response(i.readable).blob()),await Ju(i)),i.size<22)throw new Error(Kk);let r=ave(Ps(n,t,Lie),Ps(n,t,Eie)),s=r==Hk,a=r!=Wie,c=FPt(Ps(n,t,YWe),r),{endOfDirectoryInfo:d,endOfDirectoryReachingEndCount:u}=await PPt(i,a,c);if(!d){let w=await ta(i,0,4),z=Tr(w);throw Go(z)==134695760?new Error(Iie):new Error(jWe)}a&&u>1&&ju("multiple end of central directory records");let m=Tr(d),p=Go(m,12),b=Go(m,16),f=d.offset,y=Xs(m,20),_=f+22+y;i.size-_>c&&ju("appended data");let S=Xs(m,4),Z=i.lastDiskNumber||0,V=Xs(m,6),C=Xs(m,10),G=0,E,v;if(b==4294967295||p==4294967295||C==65535||V==65535){let w=d.offset>=20?await ta(i,d.offset-20,20):Hi,z=Tr(w);if(w.length==20&&Go(z,0)==117853008){b=Yg(z,8);let H=await ta(i,b,56,-1),te=Tr(H),K=d.offset-20-56-(i.lastDiskOffset||0);if((H.length<56||Go(te,0)!=101075792)&&b!=K&&K>=0){let $=b;b=K,b>$&&(G=b-$),H=await ta(i,b,56,-1),te=Tr(H)}if(H.length<56||Go(te,0)!=101075792)throw new Error(QWe);v=!0,S==65535?S=Go(te,16):s&&S!=Go(te,16)&&ju("mismatched zip64 end of central directory record"),V==65535?V=Go(te,20):s&&V!=Go(te,20)&&ju("mismatched zip64 end of central directory record"),C==65535?C=Yg(te,32):s&&C!=Yg(te,32)&&ju("mismatched zip64 end of central directory record"),p==4294967295?p=Yg(te,40):s&&p!=Yg(te,40)&&ju("mismatched zip64 end of central directory record"),b=Yg(te,48)+G}}let F=p,P=d.offset-(v?76:0);if(b>=i.size&&(G=i.size-b-p-22,b=i.size-p-22),Z!=S)throw new Error(Iie);if(b<0)throw new Error(Kk);let N=0,g=await ta(i,b,p,V),R=Tr(g);if(p){if(g.length<4)throw new Error(Kk);let w=P-p-(i.lastDiskOffset||0);if(b!=w&&V==S){let H=!(Go(R,N)==33639248);if(!H&&w>=0&&w+4<=i.size){let te=await ta(i,w,4,V);H=Go(Tr(te),0)==33639248}if(H){let te=b;b=w,b>te&&(G+=b-te),g=await ta(i,b,p,V),R=Tr(g)}}}let A=P-b-(i.lastDiskOffset||0);if(p!=A&&A>=0&&V==S&&(p=A,g=await ta(i,b,p,V),R=Tr(g)),b<0||b>=i.size)throw new Error(Kk);E=b;let W=Ps(n,t,bWe),X=Ps(n,t,gWe),Y=s?new Set:Et,D;for(let w=0;w<C;w++){let z=new Pie(i,o,n.options);if(N+46>g.length||Go(R,N)!=33639248)throw new Error(qWe);rve(z,R,N+6);let H=!!z.bitFlag.languageEncodingFlag,te=N+46,K=te+z.filenameLength,$=K+z.extraFieldLength,ee=Xs(R,N+4),de=ee>>8==0,_e=ee>>8==3,ue=g.subarray(te,K),Ce=Xs(R,N+32),Te=$+Ce,Re=g.subarray($,Te),Le=H,Xe=H,qe=Go(R,N+38),je=qe&255,_t={readOnly:!!(je&1),hidden:!!(je&2),system:!!(je&4),directory:!!(je&16),archive:!!(je&32)},Qe=Go(R,N+42),Ee=Ps(n,t,yWe)||kk,He=Le?kWe:W||UWe,Rt=Xe?kWe:X||UWe,dt=Ee(ue,He);dt===Et&&(dt=kk(ue,He));let gn=Ee(Re,Rt);gn===Et&&(gn=kk(Re,Rt)),Object.assign(z,{index:w,versionMadeBy:ee,msDosCompatible:de,compressedSize:0,uncompressedSize:0,commentLength:Ce,offset:Qe,diskNumberStart:Xs(R,N+34),internalFileAttributes:Xs(R,N+36),externalFileAttributes:qe,msdosAttributesRaw:je,msdosAttributes:_t,rawFilename:ue,filenameUTF8:Le,commentUTF8:Xe,rawExtraField:g.subarray(K,$),rawComment:Re,filename:dt,comment:gn}),sve(z,z,R,N+6),z.offset+=G,E=Math.min(z.offset,E),s&&(Y.has(z.filename)&&(D=!0),Y.add(z.filename));let Bt=z.externalFileAttributes>>16&65535;z.unixMode===Et&&(Bt&16877)!=0&&(z.unixMode=Bt);let St=!!(z.unixMode&2048),vt=!!(z.unixMode&1024),Wn=!!(z.unixMode&512),at=z.unixMode!==Et?(z.unixMode&73)!=0:_e&&(Bt&73)!=0,ft=z.unixMode!==Et&&(z.unixMode&61440)==16384,Ai=(Bt&61440)==16384;Object.assign(z,{setuid:St,setgid:vt,sticky:Wn,unixExternalUpper:Bt,internalFileAttribute:z.internalFileAttributes,externalFileAttribute:z.externalFileAttributes,executable:at,directory:ft||Ai||de&&_t.directory||z.filename.endsWith("/")&&!z.uncompressedSize,zipCrypto:z.encrypted&&!z.extraFieldAES});let En=new oT(z);En.getData=(fo,Yi)=>z.getData(fo,En,n.readRanges,Yi),En.arrayBuffer=async fo=>{let Yi=new TransformStream,[Ki]=await Promise.all([new Response(Yi.readable).arrayBuffer(),z.getData(Yi,En,n.readRanges,fo)]);return Ki},N=Te;let{onprogress:Ni}=t;if(Ni)try{await Ni(w+1,C,new oT(z))}catch{}yield En}s&&N!=F&&ju("trailing central directory data"),D&&ju("duplicate filename"),s&&(G||C&&E>0)&&ju("prepended data");let k=Ps(n,t,xWe),O=Ps(n,t,TWe);return k&&(n.prependedData=E>0?await ta(i,0,E):Hi),n.comment=y?await ta(i,f+22,y):Hi,O&&(n.appendedData=_<i.size?await ta(i,_,i.size-_):Hi),!0}async getEntries(t={}){let n=[];for await(let i of this.getEntriesGenerator(t))n.push(i);return n}async close(){}};var Pie=class{constructor(t,n,i){Object.assign(this,{reader:t,config:n,options:i})}async getData(t,n,i,o={}){let r=this,{reader:s,index:a,offset:c,diskNumberStart:d,extraFieldAES:u,extraFieldZip64:m,compressionMethod:p,config:b,bitFlag:f,signature:y,rawLastModDate:_,uncompressedSize:S,compressedSize:Z}=r,{dataDescriptor:V}=f,C=n.localDirectory={},G=await ta(s,c,30,d),E=Tr(G),v=Ps(r,o,Dz),F=Ps(r,o,Oz),P=Ps(r,o,Bz);if(v=v&&v.length&&v,F=F&&F.length&&F,u&&u.originalCompressionMethod!=99)throw new Error(Fie);if(p!=0&&p!=8&&p!=9&&!P)throw new Error(Fie);if(G.length<30||Go(E,0)!=67324752)throw new Error($We);rve(C,E,4);let{extraFieldLength:N,filenameLength:g}=C,R=ave(Ps(r,o,Lie),Ps(r,o,Eie))==Hk,A=Hi;if(R&&(g||N)){let Re=await ta(s,c+30,g+N,d);A=Re.subarray(0,g),C.rawExtraField=Re.subarray(g)}else C.rawExtraField=N?await ta(s,c+30+g,N,d):Hi;sve(r,C,E,4,!0),R&&NPt(r,C,A);let{lastAccessDate:W,creationDate:X}=C;W&&(n.lastAccessDate=W),X&&(n.creationDate=X);let Y=r.encrypted&&C.encrypted&&!P,D=Y&&!u;if(P||(n.zipCrypto=D),Y){if(!D&&u.strength===Et)throw new Error(nve);if(!v&&!F)throw new Error(tve)}let k=c+30+g+N,O=Z,w=s.createReadable({offset:k,size:O,diskNumberStart:d,chunkSize:sG(b)}),z=Ps(r,o,zz),H=Ps(r,o,_We),te=Ps(r,o,ZWe),K=Ps(r,o,SWe);K&&(te=!0);let{onstart:$,onprogress:ee,onend:de}=o,_e=p==9,ue=Ps(r,o,Kz);_e&&(ue=!1);let Ce={options:{codecType:vz,password:v,rawPassword:F,zipCrypto:D,encryptionStrength:u&&u.strength,signed:Ps(r,o,VWe)&&!P,passwordVerification:D&&(V?_>>>8&255:y>>>24&255),outputSize:P?Z:S,signature:y,compressed:p!=0&&!P,encrypted:Y,useWebWorkers:Ps(r,o,Hz),useCompressionStream:ue,transferStreams:Ps(r,o,Jz),deflate64:_e,checkPasswordOnly:H},config:b,streamOptions:{signal:z,size:O,onstart:$,onprogress:ee,onend:de}};te&&await vPt({reader:s,fileEntry:n,index:a,offset:c,diskNumberStart:d,signature:y,compressedSize:Z,uncompressedSize:S,dataOffset:k,dataDescriptor:V||C.bitFlag.dataDescriptor,extraFieldZip64:m||C.extraFieldZip64,readRanges:i});let Te;try{if(!K){H&&(t=new WritableStream),t=new pG(t),await Ju(t,P?Z:S),{writable:Te}=t;let{outputSize:Re}=await Nz({readable:w,writable:Te},Ce);if(t.size+=Re,Re!=(P?Z:S))throw new Error(lG)}}catch(Re){if(Re.outputSize!==Et&&(t.size+=Re.outputSize),!H||Re.message!=Xg)throw Re}finally{!Ps(r,o,jz)&&Te&&!Te.locked&&await Te.getWriter().close()}return H||K?Et:t.getData?t.getData():Te}};function rve(e,t,n){let i=e.rawBitFlag=Xs(t,n+2),o=(i&1)==1,r=Go(t,n+6);Object.assign(e,{encrypted:o,version:Xs(t,n),bitFlag:{level:(i&6)>>1,dataDescriptor:(i&8)==8,languageEncodingFlag:(i&2048)==2048},rawLastModDate:r,lastModDate:YPt(r),filenameLength:Xs(t,n+22),extraFieldLength:Xs(t,n+24)})}function sve(e,t,n,i,o){let{rawExtraField:r}=t,s=t.extraField=new Map,a=Tr(new Uint8Array(r)),c=0;try{for(;c<r.length;){let Z=Xs(a,c),V=Xs(a,c+2);s.set(Z,{type:Z,data:r.slice(c+4,c+4+V)}),c+=4+V}}catch{}let d=Xs(n,i+4);Object.assign(t,{signature:Go(n,i+10),compressedSize:Go(n,i+14),uncompressedSize:Go(n,i+18)});let u=s.get(1);u&&(APt(u,t),t.extraFieldZip64=u);let m=s.get(28789);m&&(BWe(m,sie,aie,t,e),t.extraFieldUnicodePath=m);let p=s.get(25461);p&&(BWe(p,Uk,cie,t,e),t.extraFieldUnicodeComment=p);let b=s.get(39169);b&&b.data.length>=7?(EPt(b,t,d),t.extraFieldAES=b):t.compressionMethod=d;let f=s.get(10);f&&(LPt(f,t),t.extraFieldNTFS=f);let y=s.get(30805);if(y)zWe(y,t,!1),t.extraFieldUnix=y;else{let Z=s.get(30837);Z&&(zWe(Z,t,!0),t.extraFieldInfoZip=Z)}let _=s.get(21589);_&&(WPt(_,t,o),t.extraFieldExtendedTimestamp=_);let S=s.get(6534);S&&(t.extraFieldUSDZ=S)}function APt(e,t){t.zip64=!0;let n=Tr(e.data),i=GPt.filter(([r,s])=>t[r]==s),o=i.reduce((r,[,s])=>r+OWe[s].bytes,0);if(e.data.length<o)throw new Error(eve);for(let r=0,s=0;r<i.length;r++){let[a,c]=i[r],d=OWe[c];t[a]=e[a]=d.getValue(n,s),s+=d.bytes}}function BWe(e,t,n,i,o){if(e.data.length<5){e.valid=!1;return}let r=Tr(e.data),s=new Ig;s.append(o[n]);let a=Tr(new Uint8Array(4));a.setUint32(0,s.get(),!0);let c=Go(r,1);Object.assign(e,{version:rT(r,0),[t]:kk(e.data.subarray(5)),valid:!o.bitFlag.languageEncodingFlag&&c==Go(a,0)}),e.valid&&(i[t]=e[t],i[t+RPt]=!0)}function EPt(e,t,n){let i=Tr(e.data),o=rT(i,4);Object.assign(e,{vendorVersion:rT(i,0),vendorId:rT(i,2),strength:o,originalCompressionMethod:n,compressionMethod:Xs(i,5)}),t.compressionMethod=e.compressionMethod}function LPt(e,t){let n=Tr(e.data),i=4,o;try{for(;i<e.data.length&&!o;){let r=Xs(n,i),s=Xs(n,i+2);r==1&&(o=e.data.slice(i+4,i+4+s)),i+=4+s}}catch{}try{if(o&&o.length==24){let r=Tr(o),s=r.getBigUint64(0,!0),a=r.getBigUint64(8,!0),c=r.getBigUint64(16,!0);Object.assign(e,{rawLastModDate:s,rawLastAccessDate:a,rawCreationDate:c});let d=vie(s),u=vie(a),m=vie(c),p={lastModDate:d,lastAccessDate:u,creationDate:m};Object.assign(e,p),Object.assign(t,p)}}catch{}}function zWe(e,t,n){try{let i=Tr(new Uint8Array(e.data)),o,r;if(n){let s=0,a=rT(i,s++),c=rT(i,s++);o=HWe(e.data.subarray(s,s+c)),s+=c;let d=rT(i,s++);r=HWe(e.data.subarray(s,s+d)),Object.assign(e,{version:a,uid:o,gid:r})}else e.data.length>=4&&(o=Xs(i,0),r=Xs(i,2),Object.assign(e,{uid:o,gid:r}));o!==Et&&(t.uid=o),r!==Et&&(t.gid=r)}catch{}}function HWe(e){let t=new Uint8Array(4);return t.set(e,0),new DataView(t.buffer,t.byteOffset,4).getUint32(0,!0)}function WPt(e,t,n){if(!e.data.length)return;let i=Tr(e.data),o=rT(i,0),r=[],s=[];n?((o&1)==1&&(r.push(bG),s.push(Mz)),(o&2)==2&&(r.push(Ok),s.push(pWe)),(o&4)==4&&(r.push(Bk),s.push(mie))):e.data.length>=5&&(r.push(bG),s.push(Mz));let a=1;r.forEach((c,d)=>{if(e.data.length>=a+4){let u=Go(i,a);t[c]=e[c]=new Date((u|0)*1e3);let m=s[d];e[m]=u}a+=4})}async function vPt({reader:e,fileEntry:t,index:n,offset:i,diskNumberStart:o,signature:r,compressedSize:s,uncompressedSize:a,dataOffset:c,dataDescriptor:d,extraFieldZip64:u,readRanges:m}){let p=0;if(o&&e.readers)for(let y=0;y<Math.min(o,e.readers.length);y++)p+=e.readers[y].size;let b=0;if(d&&(u?b=20:b=12),b){let y=await ta(e,c+s,b+4,o);if(y.length==b+4&&Go(Tr(y),0)==134695760){let S=Go(Tr(y),4),Z,V;u?(Z=Yg(Tr(y),8),V=Yg(Tr(y),16)):(Z=Go(Tr(y),8),V=Go(Tr(y),12)),(t.encrypted&&!t.zipCrypto||S==r)&&Z==s&&V==a&&(b+=4)}}let f={start:p+i,end:p+c+s+b,fileEntry:t};for(let[y,_]of m)if(y!=n&&f.start<_.end&&_.start<f.end){let S=new Error(ive);throw S.overlappingEntry=_.fileEntry,S}m.set(n,f)}function ave(e,t){return e===Et?t?Hk:wWe:e}function FPt(e,t){return e!==Et?e:t==Hk?0:t==Wie?1/0:65535}var IPt=64,KWe=0,jie=1,$z=2;async function PPt(e,t,n){let{size:i}=e,o=Math.min(i,65557),r={count:IPt},s,a,c=0;for await(let[d,u,m,p,b]of cve(e,o)){let f=Xs(d,p+20);if(b+22+f==i){let y=await lve(e,d,u,p,b,i,r);if(y==$z){if(s||(s=Xie(m,p,b)),c++,!t||c>1)break}else y==jie&&!a&&(a=Xie(m,p,b))}}return s||(s=a),s||(s=await XPt(e,n,r)),{endOfDirectoryInfo:s,endOfDirectoryReachingEndCount:c}}async function XPt(e,t,n){let{size:i}=e,o=Math.min(i,t==1/0?i:65557+t),r,s;for await(let[a,c,d,u,m]of cve(e,o)){let p=Xie(d,u,m);r||(r=p);let b=await lve(e,a,c,u,m,i,n);if(b==$z)return p;b==jie&&!s&&(s=p)}return s||r}async function*cve(e,t){let n=e.size-t,i=await ta(e,n,t),o=Tr(i);for(let r=i.length-22;r>=0;r--)Go(o,r)==101010256&&(yield[o,n,i,r,n+r])}function Xie(e,t,n){return{offset:n,buffer:e.slice(t,t+22).buffer}}async function lve(e,t,n,i,o,r,s){let a=Xs(t,i+10),c=Go(t,i+12),d=Go(t,i+16);if(a==65535||c==4294967295||d==4294967295)return await JWe(e,t,n,o-20,r,s)==117853008?$z:KWe;if(!a&&!c)return jie;for(let u of[o-c,d])if(await JWe(e,t,n,u,r,s)==33639248)return $z;return KWe}async function JWe(e,t,n,i,o,r){if(i<0||i+4>o)return Et;if(i>=n)return Go(t,i-n);if(r.count>0){r.count--;let s=await ta(e,i,4);return Go(Tr(s),0)}return Et}function NPt(e,t,n){let{rawFilename:i}=e;(n.length!=i.length||n.some((o,r)=>o!=i[r]))&&ju("mismatched local file header (filename)"),(t.rawBitFlag&DWe)!=(e.rawBitFlag&DWe)&&ju("mismatched local file header (general purpose bit flag)"),t.compressionMethod!=e.compressionMethod&&ju("mismatched local file header (compression method)"),!t.bitFlag.dataDescriptor&&(t.signature||t.compressedSize||t.uncompressedSize)&&(t.signature!=e.signature||t.compressedSize!=e.compressedSize||t.uncompressedSize!=e.uncompressedSize)&&ju("mismatched local file header (signature or sizes)")}function ju(e){let t=new Error(ove);throw t.reason=e,t}function Ps(e,t,n){return t[n]===Et?e.options[n]:t[n]}function YPt(e){let t=(e&4294901760)>>16,n=e&65535;try{return new Date(1980+((t&65024)>>9),((t&480)>>5)-1,t&31,(n&63488)>>11,(n&2016)>>5,(n&31)*2,0)}catch{}}function vie(e){return new Date(Number(e/BigInt(1e4)-BigInt(116444736e5)))}function rT(e,t){return e.getUint8(t)}function Xs(e,t){return e.getUint16(t,!0)}function Go(e,t){return e.getUint32(t,!0)}function Yg(e,t){return Number(e.getBigUint64(t,!0))}function Tr(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}var eCo=x(T(),1);var Q1o=x(T(),1);var yve="File already exists",toe="Zip file comment exceeds 64KB",xve="File entry comment exceeds 64KB",Tve="File entry name exceeds 64KB",noe="Version exceeds 65535",_ve="The strength must equal 1, 2, or 3",Sve="Extra field type exceeds 65535",hH="Extra field data exceeds 64KB",HPt="Compression method not supported",Zve=-2147483648,Vve=2147483647,fH="Zip64 is not supported (set the 'zip64' option to 'true')",Cve="Undefined uncompressed size",Rve="Undefined reader",Gve="Zip file not empty",KPt="Invalid uid (must be integer 0..2^32-1)",JPt="Invalid gid (must be integer 0..2^32-1)",jPt="Invalid UNIX mode (must be integer 0..65535)",QPt="Invalid unixExtraFieldType (must be 'infozip' or 'unix')",qPt="uid/gid must be 0..65535 for unixExtraFieldType 'unix' (use 'infozip' for larger ids)",$Pt="Invalid msdosAttributesRaw (must be integer 0..255)",eXt="Invalid msdosAttributes (must be an object with boolean flags)",uve=new Uint8Array([7,0,2,0,65,69,3,0,0]),$ie="infozip",eoe="unix",Qie=0,mve=[],o9=class{constructor(t,n={}){t=new pG(t);let i=t.availableSize!==Et&&t.availableSize>0&&t.availableSize!==PZ&&t.maxSize!==Et&&t.maxSize>0&&t.maxSize!==PZ;Object.assign(this,{writer:t,addSplitZipSignature:i,options:n,config:Ck(),files:new Map,filenames:new Set,offset:n[zk]===Et?t.size||t.writable.size||0:n[zk],initialOffset:n[zk]===Et?0:n[zk]-(t.size||t.writable.size||0),pendingAddFileCalls:new Set,bufferedWrites:0,lastFileEntry:Et})}async prependZip(t){if(this.filenames.size)throw new Error(Gve);t=new YZ(t),await Ju(t);let n=new MZ(t.readable),i=await n.getEntries();await n.close(),await Ju(this.writer),await t.readable.pipeTo(this.writer.writable,{preventClose:!0,preventAbort:!0}),this.writer.size=this.offset=t.size,this.filenames=new Set(i.map(o=>o.filename)),this.files=new Map(i.map(o=>{let{version:r,rawLastModDate:s,lastAccessDate:a,creationDate:c,rawFilename:d,bitFlag:u,encrypted:m,uncompressedSize:p,compressedSize:b,diskOffset:f,diskNumber:y,zip64:_}=o,{compressionMethod:S,rawExtraFieldZip64:Z,rawExtraFieldAES:V,rawExtraFieldExtendedTimestamp:C,rawExtraFieldNTFS:G,rawExtraFieldUnix:E,rawExtraField:v}=o,{level:F,languageEncodingFlag:P,dataDescriptor:N}=u;Z=Z||Hi,V=V||Hi,C=C||Hi,G=G||Hi,E=E||Hi,v=v||Hi,o.extraFieldAES&&(S=99);let g=Mo(Z,V,C,G,E,v),R=_&&p>=4294967295,A=_&&b>=4294967295,W=Lve(F,P,N,m,S)&-7|F<<1,{headerArray:X,headerView:Y}=Eve({version:r,bitFlag:W,compressionMethod:S,uncompressedSize:p,compressedSize:b,rawLastModDate:s,rawFilename:d,zip64CompressedSize:A,zip64UncompressedSize:R,extraFieldLength:g}),{signature:D}=o;return D!==Et&&Nc(Y,10,D),Object.assign(o,{zip64UncompressedSize:R,zip64CompressedSize:A,zip64Offset:_&&this.offset-f>=4294967295,zip64DiskNumberStart:_&&y>=65535,rawExtraFieldZip64:Z,rawExtraFieldAES:V,rawExtraFieldExtendedTimestamp:C,rawExtraFieldNTFS:G,rawExtraFieldUnix:E,rawExtraField:v,extendedTimestamp:C.length>0||G.length>0,extraFieldExtendedTimestampFlag:1+(a?2:0)+(c?4:0),headerArray:X,headerView:Y}),[o.filename,o]}))}async add(t="",n,i={}){let o=this;i=Object.assign({},i);let{pendingAddFileCalls:r,config:s}=o;Qie<s.maxWorkers?Qie++:await new Promise(d=>mve.push(d));let a,c;try{if(t=t.trim(),gi(o,i,gG)&&!t.endsWith("/")&&(t+="/"),o.filenames.has(t))throw new Error(yve);return o.filenames.add(t),c=!0,a=tXt(o,t,n,i),r.add(a),await a}catch(d){throw c&&o.filenames.delete(t),d}finally{r.delete(a);let d=mve.shift();d?d():Qie--}}remove(t){let{filenames:n,files:i}=this;if(typeof t=="string"&&(t=i.get(t)),t&&t.filename!==Et){let{filename:o}=t;if(n.has(o)&&i.has(o))return n.delete(o),i.delete(o),!0}return!1}async close(t=Hi,n={}){let i=this,{pendingAddFileCalls:o,writer:r}=this,{writable:s}=r;if(Mo(t)>65535)throw new Error(toe);for(;o.size;)await Promise.allSettled(Array.from(o));return await mXt(i,t,n),gi(i,n,jz)||await s.getWriter().close(),r.getData?r.getData():s}};async function tXt(e,t,n,i){let o=nXt(e,t,i);({name:t}=o);let r=iXt(e,t,i),{comment:s}=r,a=i[Uz];e.files.set(t,Et);let c;try{let d=await oXt(e,n,r,i);({reader:n}=d);let{diskOffset:u,diskNumber:m}=e.writer;i=Object.assign({},i,o.resolvedOptions,r.resolvedOptions,d.resolvedOptions,{internalFileAttribute:r.resolvedOptions.internalFileAttributes,externalFileAttribute:o.resolvedOptions.externalFileAttributes,signature:i[Vie],offset:e.offset-u,diskNumberStart:m});let p=aXt(i),b=lXt(i),f=Mo(p.localHeaderArray,b.dataDescriptorArray);c=await rXt(e,t,n,{headerInfo:p,dataDescriptorInfo:b,metadataSize:f},i)}catch(d){throw e.files.delete(t),d}return Object.assign(c,{name:t,comment:s,extraField:a}),new oT(c)}function nXt(e,t,n){t=t.trim();let i=gi(e,n,gie),o=gi(e,n,Tie,i?20:768),r=gi(e,n,Sie),s=gi(e,n,"uid"),a=gi(e,n,"gid"),c=gi(e,n,Cie),d=gi(e,n,NWe),u=gi(e,n,Rie),m=gi(e,n,Gie),p=gi(e,n,Aie);if(s!==Et&&(s<0||s>4294967295))throw new Error(KPt);if(a!==Et&&(a<0||a>4294967295))throw new Error(JPt);if(c!==Et&&(c<0||c>65535))throw new Error(jPt);if(d!==Et&&d!==$ie&&d!==eoe)throw new Error(QPt);if(d===eoe&&(s!==Et&&s>65535||a!==Et&&a>65535))throw new Error(qPt);d===Et&&(s!==Et||a!==Et)&&(d=$ie);let b=gi(e,n,pie),f=gi(e,n,bie),y=s!==Et||a!==Et||c!==Et||d,_=b!==Et||f!==Et;if(y?(i=!1,o=o&65535|768):_&&(i=!0,o=o&255),b!==Et&&(b<0||b>255))throw new Error($Pt);if(f&&typeof f!==GLe)throw new Error(eXt);if(o>65535)throw new Error(noe);let S=gi(e,n,fie,0);!n[gG]&&t.endsWith("/")&&(n[gG]=!0);let Z=gi(e,n,gG);Z?(t.endsWith("/")||(t+="/"),S===0&&(S=16,i||(S|=16877<<16))):!i&&S===0&&(r?S=493<<16:S=420<<16);let V;return i||(V=S>>16&65535,c=c===Et?V:c&65535,u?c|=2048:u=!!(c&2048),m?c|=1024:m=!!(c&1024),p?c|=512:p=!!(c&512),Z&&(c|=16384),S=(c&65535)<<16|S&255),{msdosAttributesRaw:b,msdosAttributes:f}=cXt(b,f),_&&(S=S&4294967295|b&255),{name:t,resolvedOptions:{versionMadeBy:o,msDosCompatible:i,externalFileAttributes:S,unixExternalUpper:V,uid:s,gid:a,unixMode:c,unixExtraFieldType:d,setuid:u,setgid:m,sticky:p,msdosAttributesRaw:b,msdosAttributes:f}}}function iXt(e,t,n){let i=gi(e,n,PWe,aG),o=i(t);if(o===Et&&(o=aG(t)),Mo(o)>65535)throw new Error(Tve);let r=n[Uk]||"",s=i(r);if(s===Et&&(s=aG(r)),Mo(s)>65535)throw new Error(xve);let a=gi(e,n,xie,20);if(a>65535)throw new Error(noe);let c=gi(e,n,bG,new Date),d=gi(e,n,Ok),u=gi(e,n,Bk),m=gi(e,n,hie,0),p=gi(e,n,Bz),b,f;p||(b=gi(e,n,Dz),f=gi(e,n,Oz));let y=gi(e,n,CWe,3),_=gi(e,n,_ie),S=gi(e,n,RWe,!0),Z=gi(e,n,GWe,!0),V=gi(e,n,Hz),C=gi(e,n,Jz,!0),G=gi(e,n,EWe),E=gi(e,n,LWe),v=gi(e,n,WWe,!0),F=gi(e,n,zz),P=gi(e,n,vWe,!0),N=gi(e,n,Zie);if(!p&&N!==Et&&N!==0&&N!==8)throw new Error(HPt);let g=gi(e,n,AWe),R=gi(e,n,Kz),A=gi(e,n,FWe);G&&A===Et&&(A=!1),(A===Et||_)&&(A=!0),g!==Et&&g!=6&&(R=!1),!R&&e.config.CompressionStream===Et&&e.config.CompressionStreamZlib===Et&&(g=0);let W=gi(e,n,kz);if(!_&&(b!==Et||f!==Et)&&!(y>=1&&y<=3))throw new Error(_ve);let X=Hi,Y=n[Uz];if(Y){let D=0,k=0;Y.forEach(w=>D+=4+Mo(w)),X=new Uint8Array(D);let O=_0(X);Y.forEach((w,z)=>{if(z>65535)throw new Error(Sve);if(Mo(w)>65535)throw new Error(hH);wg(O,k,z),wg(O,k+2,Mo(w)),s9(X,w,k+4),k+=4+Mo(w)})}return{comment:r,resolvedOptions:{rawFilename:o,rawComment:s,version:a,lastModDate:c,lastAccessDate:d,creationDate:u,internalFileAttributes:m,passThrough:p,password:b,rawPassword:f,encryptionStrength:y,zipCrypto:_,extendedTimestamp:S,keepOrder:Z,useWebWorkers:V,transferStreams:C,bufferedWrite:G,createTempStream:E,dataDescriptorSignature:v,signal:F,useUnicodeFileNames:P,compressionMethod:N,level:g,useCompressionStream:R,dataDescriptor:A,zip64:W,rawExtraField:X}}}async function oXt(e,t,{resolvedOptions:n},i){let{passThrough:o,zipCrypto:r,password:s,rawPassword:a,encryptionStrength:c}=n,{dataDescriptor:d,zip64:u,level:m,compressionMethod:p}=n,b=0,f=0;if(o){if(!t)throw new Error(Rve);if(f=i[Dk],f===Et)throw new Error(Cve)}let y=u===!0,_=gi(e,i,yie),S=!!t&&(!!(s&&Mo(s)||a&&Mo(a))||o&&_);t||(m=0,p=0);let Z=S?r?12:16+c*4:0;t&&(t=new YZ(t),await Ju(t),o?(i.uncompressedSize=f,b=gve(f)+Z):t.size===Et?(d=!0,(u||u===Et)&&(u=!0,f=b=4294967296)):(i.uncompressedSize=f=t.size,b=gve(f)+Z));let V=y||f>=4294967295,C=y||b>=4294967295;if(V||C){if(u===!1)throw new Error(fH);u=!0}return u=u||!1,{reader:t,resolvedOptions:{dataDescriptor:d,zip64:u,zip64UncompressedSize:V,zip64CompressedSize:C,uncompressedSize:f,level:m,compressionMethod:p,encrypted:S}}}async function rXt(e,t,n,i,o){let{files:r,writer:s}=e,{keepOrder:a,dataDescriptor:c,signal:d}=o,{headerInfo:u}=i,m=e.options[XWe],p=e.lastFileEntry,b={},f,y,_,S,Z,V,C=0,G;r.set(t,b),e.lastFileEntry=b;try{let P;a&&(P=p&&p.lock,E()),o.bufferedWrite||!a||e.writerLocked||e.bufferedWrites||!c?(f=!0,e.bufferedWrites++,o.createTempStream?G=await o.createTempStream():G=new TransformStream(Et,Et,{highWaterMark:PZ}),G.size=0,await Ju(s)):(G=s,await v()),await Ju(G);let{diskOffset:N}=s;if(e.addSplitZipSignature){delete e.addSplitZipSignature;let W=new Uint8Array(4),X=_0(W);Nc(X,0,134695760),await Df(s,W),e.offset+=4}m&&!f&&hve(i,e.offset-N);let{localHeaderArray:g}=u;f||(await P,await F());let R=s.diskNumber,A=pve(e,s);if(b.diskNumberStart=R,f||(Z=!0,V=s.size,await Df(G,g)),b=await sXt(n,G,b,i,e.config,o),f||(Z=!1),r.set(t,b),b.filename=t,f){if(await Promise.all([G.writable.getWriter().close(),P]),await v(),S=!0,V=s.size,await F(),b.diskNumberStart=s.diskNumber,b.offset=pve(e,s),m){let W=i.metadataSize;hve(i,e.offset-s.diskOffset),b.size+=i.metadataSize-W}uXt(b,u.localHeaderView,o),await Df(s,u.localHeaderArray),await bXt(G.readable,s,d,W=>C+=W),s.size+=G.size,S=!1}else b.diskNumberStart=R,b.offset=A;return e.offset+=b.size,b}catch(P){if(S||Z){if(e.hasCorruptedEntries=!0,P)try{P.corruptedEntry=!0}catch{}e.offset+=s.size-V,f&&(e.offset+=C)}throw r.delete(t),P}finally{if(f&&e.bufferedWrites--,_&&_(),y&&y(),f&&G&&G.dispose)try{await G.dispose()}catch{}}function E(){b.lock=new Promise(P=>_=P)}async function v(){e.writerLocked=!0;let{lockWriter:P}=e;e.lockWriter=new Promise(N=>y=()=>{e.writerLocked=!1,N()}),await P}async function F(){Mo(u.localHeaderArray)>s.availableSize&&(s.availableSize=0,await Df(s,Hi))}}async function sXt(e,t,{diskNumberStart:n,lock:i},o,r,s){let{headerInfo:a,dataDescriptorInfo:c,metadataSize:d}=o,{headerArray:u,headerView:m,lastModDate:p,rawLastModDate:b,encrypted:f,compressed:y,version:_,compressionMethod:S,rawExtraFieldZip64:Z,localExtraFieldZip64Length:V,rawExtraFieldExtendedTimestamp:C,extraFieldExtendedTimestampFlag:G,rawExtraFieldNTFS:E,rawExtraFieldUnix:v,rawExtraFieldAES:F}=a,{dataDescriptorArray:P}=c,{rawFilename:N,lastAccessDate:g,creationDate:R,password:A,rawPassword:W,level:X,zip64:Y,zip64UncompressedSize:D,zip64CompressedSize:k,zipCrypto:O,dataDescriptor:w,directory:z,executable:H,versionMadeBy:te,rawComment:K,rawExtraField:$,useWebWorkers:ee,transferStreams:de,onstart:_e,onprogress:ue,onend:Ce,signal:Te,encryptionStrength:Re,extendedTimestamp:Le,msDosCompatible:Xe,internalFileAttributes:qe,externalFileAttributes:je,uid:_t,gid:Qe,unixMode:Ee,setuid:He,setgid:Rt,sticky:dt,unixExternalUpper:gn,msdosAttributesRaw:Bt,msdosAttributes:St,useCompressionStream:vt,passThrough:Wn}=s,at={lock:i,versionMadeBy:te,zip64:Y,directory:!!z,executable:!!H,filenameUTF8:!0,rawFilename:N,commentUTF8:!0,rawComment:K,rawExtraFieldZip64:Z,localExtraFieldZip64Length:V,rawExtraFieldExtendedTimestamp:C,rawExtraFieldNTFS:E,rawExtraFieldUnix:v,rawExtraFieldAES:F,rawExtraField:$,extendedTimestamp:Le,msDosCompatible:Xe,internalFileAttributes:qe,externalFileAttributes:je,diskNumberStart:n,uid:_t,gid:Qe,unixMode:Ee,setuid:He,setgid:Rt,sticky:dt,unixExternalUpper:gn,msdosAttributesRaw:Bt,msdosAttributes:St},{signature:ft,uncompressedSize:Ai}=s,En=0;Wn||(Ai=0);let{writable:Ni}=t;if(e){let fo=e.createReadable?e.createReadable({chunkSize:sG(r)}):e.readable,Yi=e.size,Ki={options:{codecType:dG,level:X,rawPassword:W,password:A,encryptionStrength:Re,zipCrypto:f&&O,passwordVerification:f&&O&&b>>8&255,signed:!Wn,compressed:y&&!Wn,encrypted:f&&!Wn,useWebWorkers:ee,useCompressionStream:vt,transferStreams:de},config:r,streamOptions:{signal:Te,size:Yi,onstart:_e,onprogress:ue,onend:Ce}};try{let ci=await Nz({readable:fo,writable:Ni},Ki);if(En=ci.outputSize,t.size+=En,Wn||(Ai=ci.inputSize,ft=ci.signature),!k&&En>=4294967295||!D&&Ai>=4294967295)throw new Error(fH)}catch(ci){throw ci.outputSize!==Et&&(t.size+=ci.outputSize),ci}}return dXt({signature:ft,compressedSize:En,uncompressedSize:Ai,headerInfo:a,dataDescriptorInfo:c},s),w&&await Df(t,P),Object.assign(at,{uncompressedSize:Ai,compressedSize:En,lastModDate:p,rawLastModDate:b,creationDate:R,lastAccessDate:g,encrypted:f,zipCrypto:O,size:d+En,compressionMethod:S,version:_,headerArray:u,headerView:m,signature:ft,extraFieldExtendedTimestampFlag:G,zip64UncompressedSize:D,zip64CompressedSize:k}),at}function aXt(e){let{rawFilename:t,lastModDate:n,lastAccessDate:i,creationDate:o,level:r,zip64:s,zipCrypto:a,useUnicodeFileNames:c,dataDescriptor:d,directory:u,rawExtraField:m,encryptionStrength:p,extendedTimestamp:b,passThrough:f,encrypted:y,zip64UncompressedSize:_,zip64CompressedSize:S,uncompressedSize:Z}=e,{version:V,compressionMethod:C}=e,G=!u&&(C===Et?r===Et||r>0:C!==0),E,v=f||!G,F=s&&(e.bufferedWrite||!d||!_&&!S||v),P=F||s&&d&&(_||S);if(s&&(_||S)){let K=fh(20);if(K.uint16(1),K.uint16(16),E=K.array,F&&(K.uint64(Z),v)){let $=y?a?12:16+p*4:0;K.uint64(f?0:Z+$)}}else E=Hi;let N;if(y&&!a){let te=fh(Mo(uve)+2);te.uint16(39169),te.bytes(uve),N=te.array,N[8]=p}else N=Hi;let g,R,A;if(b){let te=uH(n);if(Ave(te)){let K=9+(i?4:0)+(o?4:0),$=fh(K);A=1+(i?2:0)+(o?4:0),$.uint16(21589),$.uint16(K-4),$.uint8(A),$.uint32(te),i&&$.uint32(bve(uH(i))),o&&$.uint32(bve(uH(o))),R=$.array}else R=Hi;try{let K=qie(n),$=fh(36);$.uint16(10),$.uint16(32),$.skip(4),$.uint16(1),$.uint16(24),$.uint64(K),$.uint64(qie(i)||K),$.uint64(qie(o)||K),g=$.array}catch{g=Hi}}else g=R=Hi;let W;try{let{uid:te,gid:K,unixExtraFieldType:$}=e;if($==$ie&&(te!==Et||K!==Et)){let ee=fve(te),de=fve(K),_e=3+ee.length+de.length,ue=fh(4+_e);ue.uint16(30837),ue.uint16(_e),ue.uint8(1),ue.uint8(ee.length),ue.bytes(ee),ue.uint8(de.length),ue.bytes(de),W=ue.array}else if($==eoe&&(te!==Et||K!==Et)){let ee=fh(8);ee.uint16(30805),ee.uint16(4),ee.uint16((te===Et?0:te)&65535),ee.uint16((K===Et?0:K)&65535),W=ee.array}else W=Hi}catch{W=Hi}C===Et&&(C=G?8:0),s&&(V=V>45?V:45),y&&!a&&(V=V>51?V:51,N[9]=C,C=99);let X=P?Mo(E):0,Y=X+Mo(N,R,g,W,m);if(Y>65535)throw new Error(hH);let{headerArray:D,headerView:k,rawLastModDate:O}=Eve({version:V,bitFlag:Lve(r,c,d,y,C),compressionMethod:C,uncompressedSize:Z,lastModDate:n<zne?zne:n>Bne?Bne:n,rawFilename:t,zip64CompressedSize:S,zip64UncompressedSize:_,extraFieldLength:Y}),w=fh(30+Mo(t)+Y),z=w.array,H=_0(z);return w.uint32(67324752),w.bytes(D),w.bytes(t),P&&w.bytes(E),w.bytes(N),w.bytes(R),w.bytes(g),w.bytes(W),w.bytes(m),d&&(S||Nc(H,18,0),_||Nc(H,22,0)),{localHeaderArray:z,localHeaderView:H,headerArray:D,headerView:k,lastModDate:n,rawLastModDate:O,encrypted:y,compressed:G,version:V,compressionMethod:C,extraFieldExtendedTimestampFlag:A,rawExtraFieldZip64:Hi,localExtraFieldZip64Length:X,rawExtraFieldExtendedTimestamp:R,rawExtraFieldNTFS:g,rawExtraFieldUnix:W,rawExtraFieldAES:N,extraFieldLength:Y}}function hve(e,t){let{headerInfo:n}=e,{localHeaderArray:i,extraFieldLength:o}=n,r=64-(t+Mo(i))%64;r<4&&(r+=64);let s=new Uint8Array(r),a=_0(s);wg(a,0,6534),wg(a,2,r-4);let c=i;n.localHeaderArray=i=new Uint8Array(Mo(c)+r),s9(i,c),s9(i,s,Mo(c));let d=_0(i);wg(d,28,o+r),n.localHeaderView=d,e.metadataSize+=r}function fve(e){if(e===Et)return Hi;{let t=new Uint8Array(4);_0(t).setUint32(0,e,!0);let i=4;for(;i>1&&t[i-1]===0;)i--;return t.subarray(0,i)}}function cXt(e,t){if(e!==Et)e=e&255;else if(t!==Et){let{readOnly:n,hidden:i,system:o,directory:r,archive:s}=t,a=0;n&&(a|=1),i&&(a|=2),o&&(a|=4),r&&(a|=16),s&&(a|=32),e=a&255}return t===Et&&(t={readOnly:!!(e&1),hidden:!!(e&2),system:!!(e&4),directory:!!(e&16),archive:!!(e&32)}),{msdosAttributesRaw:e,msdosAttributes:t}}function lXt({zip64:e,dataDescriptor:t,dataDescriptorSignature:n}){let i=Hi,o,r=0,s=e?20:12;return n&&(s+=4),t&&(i=new Uint8Array(s),o=_0(i),n&&(r=4,Nc(o,0,134695760))),{dataDescriptorArray:i,dataDescriptorView:o,dataDescriptorOffset:r}}function dXt({signature:e,compressedSize:t,uncompressedSize:n,headerInfo:i,dataDescriptorInfo:o},{zip64:r,zipCrypto:s,dataDescriptor:a}){let{headerView:c,encrypted:d}=i,{dataDescriptorView:u,dataDescriptorOffset:m}=o;(!d||s)&&e!==Et&&(Nc(c,10,e),a&&Nc(u,m,e)),r?a&&(r9(u,m+4,BigInt(t)),r9(u,m+12,BigInt(n))):(Nc(c,14,t),Nc(c,18,n),a&&(Nc(u,m+4,t),Nc(u,m+8,n)))}function uXt({rawFilename:e,encrypted:t,zip64:n,localExtraFieldZip64Length:i,signature:o,compressedSize:r,uncompressedSize:s,zip64UncompressedSize:a,zip64CompressedSize:c},d,{dataDescriptor:u}){if(u||(t||Nc(d,14,o),c||Nc(d,18,r),a||Nc(d,22,s)),n&&i){let m=30+Mo(e)+4;r9(d,m,BigInt(s)),r9(d,m+8,BigInt(r))}}async function mXt(e,t,n){let i=hXt(e.files),{cdStartDiskNumber:o,cdStartDiskOffset:r}=await fXt(e,i,n);await pXt(e,t,n,{cdStartDiskNumber:o,cdStartDiskOffset:r,directoryDataLength:i})}function hXt(e){let t=0;for(let[,n]of e){let{rawFilename:i,rawExtraFieldAES:o,rawComment:r,rawExtraFieldNTFS:s,rawExtraFieldUnix:a,rawExtraField:c,extendedTimestamp:d,extraFieldExtendedTimestampFlag:u,lastModDate:m,zip64UncompressedSize:p,zip64CompressedSize:b,uncompressedSize:f,compressedSize:y}=n,_=n.offset>=4294967295,S=n.diskNumberStart>=65535,Z;if(_||S||p||b){let E=4+(p?8:0)+(b?8:0)+(_?8:0)+(S?4:0),v=fh(E);v.uint16(1),v.uint16(E-4),p&&v.uint64(f),b&&v.uint64(y),_&&v.uint64(n.offset),S&&v.uint32(n.diskNumberStart),Z=v.array}else Z=Hi;n.rawExtraFieldZip64=Z,n.zip64Offset=_,n.zip64DiskNumberStart=S;let V,C=uH(m);if(d&&Ave(C)){let E=fh(9);E.uint16(21589),E.uint16(5),E.uint8(u),E.uint32(C),V=E.array}else V=Hi;n.rawExtraFieldExtendedTimestamp=V;let G=Mo(Z,o,s,a,V,c);if(G>65535)throw new Error(hH);t+=46+Mo(i,r)+G}return t}async function fXt(e,t,n){let{files:i,writer:o}=e,r=new Uint8Array(t);await Ju(o);let s=0,a=0,c=o.diskNumber,d=o.diskOffset;for(let[u,m]of Array.from(i.values()).entries()){let{offset:p,rawFilename:b,rawExtraFieldZip64:f,rawExtraFieldAES:y,rawExtraFieldExtendedTimestamp:_,rawExtraFieldNTFS:S,rawExtraFieldUnix:Z,rawExtraField:V,rawComment:C,versionMadeBy:G,headerArray:E,headerView:v,zip64UncompressedSize:F,zip64CompressedSize:P,zip64DiskNumberStart:N,zip64Offset:g,internalFileAttributes:R,externalFileAttributes:A,diskNumberStart:W,uncompressedSize:X,compressedSize:Y}=m,D=Mo(f,y,_,S,Z,V),k=46+Mo(b,C)+D;s+k-a>o.availableSize&&(await Df(o,r.slice(a,s)),a=s,o.availableSize=0,await Df(o,Hi)),u==0&&(c=o.diskNumber,d=o.diskOffset),F||Nc(v,18,X),P||Nc(v,14,Y),(g||N)&&m.version<45&&wg(v,0,45);let O=fh(k);if(O.uint32(33639248),O.uint16(G),O.bytes(E.subarray(0,24)),O.uint16(D),O.uint16(Mo(C)),O.uint16(N?65535:W),O.uint16(R),O.uint32(A),O.uint32(g?4294967295:p),O.bytes(b),O.bytes(f),O.bytes(y),O.bytes(_),O.bytes(S),O.bytes(Z),O.bytes(V),O.bytes(C),s9(r,O.array,s),s+=k,n.onprogress)try{await n.onprogress(u+1,i.size,new oT(m))}catch{}}return await Df(o,a?r.slice(a):r),{cdStartDiskNumber:c,cdStartDiskOffset:d}}async function pXt(e,t,n,i){let{writer:o}=e,{cdStartDiskNumber:r,cdStartDiskOffset:s}=i,{directoryDataLength:a}=i,c=e.files.size,d=r,u=e.offset-s-(r?e.initialOffset:0),m=o.diskNumber;o.availableSize<22&&m++;let p=gi(e,n,kz);if(u>=4294967295||a>=4294967295||c>=65535||m>=65535){if(p===!1)throw new Error(fH);p=!0}let b=Mo(t);if(b>65535)throw new Error(toe);let f=fh(p?98:22);Mo(f.array)+b>o.availableSize&&(o.availableSize=0,await Df(o,Hi)),m=o.diskNumber,p&&(f.uint32(101075792),f.uint64(44),f.uint16(45),f.uint16(45),f.uint32(m),f.uint32(d),f.uint64(c),f.uint64(c),f.uint64(a),f.uint64(u),f.uint32(117853008),f.uint32(m),f.uint64(BigInt(e.offset)+BigInt(a)-BigInt(o.diskOffset)-BigInt(o.diskNumber?e.initialOffset:0)),f.uint32(m+1),gi(e,n,IWe,!0)&&(m=65535,d=65535),c=65535,u=4294967295,a=4294967295),f.uint32(101010256),f.uint16(m),f.uint16(d),f.uint16(c),f.uint16(c),f.uint32(a),f.uint32(u),f.uint16(b),await Df(o,f.array),b&&await Df(o,t)}function fh(e){let t=new Uint8Array(e),n=_0(t),i=0;return{array:t,uint8:o=>{gXt(n,i,o),i+=1},uint16:o=>{wg(n,i,o),i+=2},uint32:o=>{Nc(n,i,o),i+=4},uint64:o=>{r9(n,i,BigInt(o)),i+=8},bytes:o=>{s9(t,o,i),i+=Mo(o)},skip:o=>i+=o}}function pve(e,t){return e.offset-t.diskOffset-(t.diskNumber?e.initialOffset:0)}async function Df(e,t){let{writable:n}=e,i=n.getWriter();try{await i.ready,e.size+=Mo(t),await i.write(t)}finally{i.releaseLock()}}async function bXt(e,t,n,i){let o=t.writable.getWriter();try{await e.pipeTo(new WritableStream({async write(r){await o.ready,await o.write(r),i(Mo(r))}}),{preventClose:!0,preventAbort:!0,signal:n})}finally{o.releaseLock()}}function qie(e){if(e)return(BigInt(e.getTime())+BigInt(116444736e5))*BigInt(1e4)}function uH(e){return Math.floor(e.getTime()/1e3)}function Ave(e){return e>=Zve&&e<=Vve}function bve(e){return Math.min(Vve,Math.max(Zve,e))}function gi(e,t,n,i){let o=t[n]===Et?e.options[n]:t[n];return o===Et?i:o}function gve(e){return e+5*(Math.floor(e/16383)+1)}function gXt(e,t,n){e.setUint8(t,n)}function wg(e,t,n){e.setUint16(t,n,!0)}function Nc(e,t,n){e.setUint32(t,n,!0)}function r9(e,t,n){e.setBigUint64(t,n,!0)}function s9(e,t,n){e.set(t,n)}function _0(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function Mo(...e){let t=0;return e.forEach(n=>n&&(t+=n.length)),t}function Eve({version:e,bitFlag:t,compressionMethod:n,uncompressedSize:i,compressedSize:o,lastModDate:r,rawLastModDate:s,rawFilename:a,zip64CompressedSize:c,zip64UncompressedSize:d,extraFieldLength:u}){let m=fh(26),p=m.array,b=_0(p);if(m.uint16(e),m.uint16(t),m.uint16(n),s===Et){let f=new Uint32Array(1),y=_0(f);wg(y,0,(r.getHours()<<6|r.getMinutes())<<5|r.getSeconds()/2),wg(y,2,(r.getFullYear()-1980<<4|r.getMonth()+1)<<5|r.getDate()),s=f[0]}return m.uint32(s),m.skip(4),c||o!==Et?m.uint32(c?4294967295:o):m.skip(4),d||i!==Et?m.uint32(d?4294967295:i):m.skip(4),m.uint16(Mo(a)),m.uint16(u),{headerArray:p,headerView:b,rawLastModDate:s}}function Lve(e,t,n,i,o){let r=0;return t&&(r=r|2048),n&&(r=r|8),(o==8||o==9)&&(e>=0&&e<=3&&(r=r|6),e>3&&e<=5&&(r=r|4),e==9&&(r=r|2)),i&&(r=r|1),r}var iCo=x(T(),1);var sCo=x(T(),1);var oCo=1024*1024;var lCo=x(T(),1);var aCo=1024*1024;var hCo=x(T(),1);var dCo=1024*1024;var uCo=512*1024;var yXt={};try{g0({baseURI:yXt.url})}catch{}var qCo=x(T(),1);var XCo=x(T(),1),xXt=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],TXt=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],_Xt=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],SXt=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],ZXt=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],c9=new Uint8Array(288);c9.fill(8,0,144),c9.fill(9,144,256),c9.fill(7,256,280),c9.fill(8,280,288);var VXt=new Uint8Array(30).fill(5);function a9(e){let t=new Uint16Array(16);for(let o of e)t[o]++;t[0]=0;let n=new Uint16Array(17);for(let o=1;15>=o;o++)n[o+1]=n[o]+t[o];let i=new Uint16Array(e.length);for(let o=0;o<e.length;o++)e[o]&&(i[n[e[o]]++]=o);return{t,symbols:i}}var Qu="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function Wve(e){let t;e({wasmURI:()=>(t||(t="data:application/wasm;base64,"+(n=>{let i="",o=n.length,r=0;for(;o>r+2;r+=3){let a=n[r]<<16|n[r+1]<<8|n[r+2];i+=Qu[a>>18&63]+Qu[a>>12&63]+Qu[a>>6&63]+Qu[63&a]}let s=o-r;if(s===1){let a=n[r]<<16;i+=Qu[a>>18&63]+Qu[a>>12&63]+"=="}else if(s===2){let a=n[r]<<16|n[r+1]<<8;i+=Qu[a>>18&63]+Qu[a>>12&63]+Qu[a>>6&63]+"="}return i})((n=>{let i=0,o=0,r=0,s=new Uint8Array(1024),a=0,c=0;for(;!c;){c=u(1);let _=u(2);if(_==0)m();else if(_==1)p(a9(c9),a9(VXt));else{if(_!=2)throw Error("invalid deflate block type");p(...b())}}return s.subarray(0,a);function d(){if(i>=n.length)throw Error("unexpected end of deflate data");return n[i++]}function u(_){for(;_>r;)o|=d()<<r,r+=8;let S=o&(1<<_)-1;return o>>>=_,r-=_,S}function m(){o=0,r=0;let _=d()|d()<<8;i+=2,y(a+_);for(let S=0;_>S;S++)s[a++]=d()}function p(_,S){let Z=f(_);for(;Z!=256;){if(256>Z)y(a+1),s[a++]=Z;else{let V=Z-257,C=xXt[V]+u(TXt[V]),G=f(S),E=_Xt[G]+u(SXt[G]);y(a+C);let v=a-E;for(let F=0;C>F;F++)s[a++]=s[v+F]}Z=f(_)}}function b(){let _=u(5)+257,S=u(5)+1,Z=u(4)+4,V=new Uint8Array(19);for(let v=0;Z>v;v++)V[ZXt[v]]=u(3);let C=a9(V),G=new Uint8Array(_+S),E=0;for(;E<G.length;){let v=f(C);if(16>v)G[E++]=v;else if(v==16){let F=G[E-1],P=u(2)+3;for(;P--;)G[E++]=F}else E+=v==17?u(3)+3:u(7)+11}return[a9(G.subarray(0,_)),a9(G.subarray(_))]}function f(_){let{t:S,symbols:Z}=_,V=0,C=0,G=0;for(let E=1;15>=E;E++){V|=u(1);let v=S[E];if(v>V-C)return Z[G+(V-C)];G+=v,C=C+v<<1,V<<=1}throw Error("invalid huffman code")}function y(_){if(s.length<_){let S=2*s.length;for(;_>S;)S*=2;let Z=new Uint8Array(S);Z.set(s.subarray(0,a)),s=Z}}})((n=>{let i=(n=(n+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,o=[];for(let r=0;i>r;r+=4){let s=Qu.indexOf(n[r])<<18|Qu.indexOf(n[r+1])<<12|(63&Qu.indexOf(n[r+2]))<<6|63&Qu.indexOf(n[r+3]);o.push(s>>16&255),n[r+2]!=="="&&o.push(s>>8&255),n[r+3]!=="="&&o.push(255&s)}return new Uint8Array(o)})("zb19kF3XcSd2vu7He/fdmTvAABzigUTfK0gaSxiBkqghRarWc2jODIcgBCXRH/6DVSQEDkXcBwJ8M08Q5ZX5hp+mbUnLcqlcjEsbY72qWOVIFVWFu6GztEXb9Fq70Wa5iVKljVUp1WYrqz82tXJKteVKKUT46z73fQwGIEhq7XAKfOd+ndOnT5/uPn26+6jT249qpZS+t/OgGQ718EGN/5nhUD1oh+GGFNWDSj2o9PDBeMj/6eGDyXBUdEN+RT+hh/YTd8baGe2SRCudqpbGf0qpVGltrLa2FWUqUq7tXNtEURRp5axyShkXWxfpx3S7HcVaP2WeMnGqh9pf+u0oS37DHY4f3Xz0wtYXjOqcPf/wudODzY8/cH7z8yqZG12ePX928MDW6c+rNJ+6p9rF6PqxrQtnNre3VTauZfP8Q2rm4Ojy3OntwQNnLpzf/tyjmw+p2Sw8kMaar6Teopi85Kbn5qZuffZXzj6m9s0290atj2rlxg80V7vbfmhzsu3mitveX0xectvzc1O3uO0Ds829pu2Do1rR9oJ7eGtzU5kDzc1dIMSPnj537sIZpTOu9Ozpc2d/ZVOpGx944Oz5h85ubZ4ZPPDw586fGZy9cP6BwenPnNvU6sYHNh/dPrN19rHB5vkHtgenz/Qe2NrcHlzY2lTR4SsefXZz8MCZz21tbZ4fqLh64IEzj59+4Oz5M1ubj26eHzyw+fiZzce48q3Nh89c+Nz5gbq9NauV11lLHep2bvj4LR9dbv/9PzF3GpV95/06G75H+aJXtY8qs3LlHyn/U33SrfhnDiwaVVlfkPJZ7f/a9lHY6FaxtxcrdbHS3vYdvtB+uO11n1RdGW8HlfbfPFBXivSieelApRdNWkVrXCNZ/wSZz/eXjerojCJSy6ZDiqJlk2akfVqXijRxLcbbrWXjcFlXGpU5r3Gnk2UU+y8xeOnJXJMGFN6QwkeKTG+LNKlB/xGAOKgUg2NIMThqNzj68/3KjgAyAMgEgBTFAQhFcV054vo0xb0qElhIka7xtqLUrVDqH++jtVL7FwFfacyQrNeUentxUCX91dAuJVv4RqNRICgrLTq6bFKyDQxafqyAwrjxLx4gt2yU/9IBbrSTZf55RkS2mmvKHvFmsGheuqEywNbjfYp7pSNTasvjtGiKSq06Ls1XajXXGbAS3qw0Adtuo9LdEj0zpLulIVUCzIzMolkoW2RQ6FRq3a2glFa6GUW9bNJOm1+cr7QbkvHzdYTLotKruSXjizorI7tCUZmQrpSfr8sIIMxXOlekfBGuC1xnlHiFXrYyPyxjUv47wxP8WlZX2j/eL+PQ+2Q1V/5ImXolPVb+p5cvJyfdCsX+faCri5+tVO8iE6nXg57/O3WZZoHg0wZpGqOjSlACfij2N1Lq9cWeV5T6I+vdQWkaRDY4s+RO5Yp0GZGtXK68Kh3pUnUsyIfxbInH1t900bt+zX1b65Ii2y0VGa8HpSH0Fh9EWwJD5A2lIF1FqrdFSR+jZUk1A1yqjHj87MrkCBpyG6Umg4GUMYxQaFDqhqQF3VmluMVoNVfkZDJR3ENXIgxzShEKYZijK4c5zXBXhjniYY5GwxzxMBu7QgZkLcNsdg2zmRhmK8OcjOd1BA4kU0iZFYqYPH1xyq3IVDSkRxMwqgGSGs9WTCpF0WjqRtP8w6vSeFXqDLMIX2JWGa6BJ1mnBTheYDjMhlvxLxwgwwDg3a8d8F/jRwIHPpsEZsQwmqoCJR2vK2eG/ocLi0a5Ff9v8Qs6+/HCXcPbjPI/Wrhr59LOzs6Ow9UPF6jtO7V/rO9/8Af/6x9E22j5JwuMJv9q+N2hrNJ1Zb0i3auSPhjTyTz1rywwBt2Kf4lLKem6alF6kiJqbWzlrcys+FcXlpTyDgyp4fyhX/jwtYVSCWXhcwwGRZQypdUbuWWukQoJeVW4yvjhWm5Jl9b/iNtUXveqiEwfzIZMDyy1ZmLu16XNyAJUG0BVI1AjsnWVUHSSFCUbW7nLyBauUmTWc92J8J3pYTbgLlOQEqDWck2GJwUg0RT7W2qygFuVpuMyQTjmB9lezUKiX5nCyduGbF1aftVmZPxwPTcZ8PwqvvIOvDojHTrKPUY7W+CRJ7fyCL9gBbFfrE/mUeZfWpAOoTs8Vi/zlQI1vbyAiaSyEcLdGOHSJUy1ReOqqF7LzRjV6MZXhfSASTInu2AWXxXiZULz312AvFD+tQW+6b9+wA/x+40DQnoovy70g/EVcSbyOlo2Lx0gDbny8gGwybpSntZzlWECWL/Yq5R/nEzPg9R6eB+zIchnlmY0loqm9ouYa5cO+H8fGu64DJzpJGTMiS3pWcenfZTIUlTj/a8dIOcfJ8etKKnYv3BApiPQaUj1GKeQ8aE5Q26P5iyjpBPLT4M8MicmkCZDHzH+zQoEUxgBsL2Aed0x4M1LCsCu5jYLo2VWmtFyIDTITqbFKtoIgjVlWXIV/CV74C+5Fv7IUeTfTxEqqP3xXgUicL6oN7qV9l3Wlfz3Fn7BqNtMQdq/JsXUf2+BVSu0t5s+Ai2Q9gu1THmfNOyLlHfQx6IN8GhNbg2CThjpE328xepCrzIBalZglIHcvwwVkkyjDikzDPqk9qzeXRxUplGGNBlWhlgDU6wMafQMypDGT8d3SuNTsMsjLDIvB+Fu/PvI7CncVUYO0+wwubsYHcqbgX/phrrUzOpEbYg89MTKMiTPQy2LRC1jJQvgGH8jKmUVQIkKwFJdiRZTNZqA4Znqb7oIWQuRLrPB9evKQsxFLOZQbQHI9LJZ8GlpyFW6VL7TqIEVd7sjAKTShZQn9kJpfCcjF2QdKF7YSBBUCgwVMwUy6B2JKpf5nQP+FnyoGv1FpCKTNdmap1pDwnWVjmrQ/nHSctNSTGlduV6ZNAyOLLTtrwXNdTSXE2GN6GTQ63UmIl8+GKu6QT254gMQiWAB+LNgmcrbvtdrmLzQD1u42ykNL2uEJq3oMkZWAEKV/gmwwouyLjGZEHJQwdNQ90IZGzBou95Uopq3lLxl+P58pRx0fqhEVhTuXJNllUjbFdYUVQXNuNSiEqlcsWYMxY0/AK1EPvQL2kpG8WqupP7DFUgZhPfSDYwo0qBrGSqTa//8AaFudKrpET6leNEUeD/GuwW6xaX5jAyvBAzFy2YhAO1WpGOFUMFCFvoGfZEfzI8eJNSqy4QstZjYXcmkrkY8omFqjpKawPUoCWOR7M0fkrfLH2SidGRiBT5h0ErgE4l/HyV78gmD2Wgm+IRp+ISa4BPMtAZV1PAJHfiEGvGJxN8IVZ75hAlLBZYOMuZVo6Mn4BNYCmCwRfUH8wWfiEbqcDTiEwoD4po+ukCNSkjYiTounMKHVyfwkFEqM5vHPxUKikBBGhRkmIKwEibDFMSTSzEFURIWxsmIfiJKA/2kTBcAhEvzYSVCilLAIP1gRV2DfnjdsNAsF0A//GC+eWBWyPlZUTEdGJWaVNyF+YwYBFYC4XGEdy2FZ2CuNQ8HuUBdbm/qctdFXVaoywKdVrBqJ6iLWwnU5fz7yF1NClmRQnYvKYSZwUaLhq5MYxZgIS0NLgAud1UxJOTVLPfdSAzpRgyZQF7JeFGN2guxM2BeN520gbyMMDc7Nj/IAm2hMU1wn7AAFPJiztcS8jIj8oqYvMBmKbqCvDIhrxFxGWoF4mqNiKu1i7hagMBchbjMWxKX2U1c5kriMiPiMng3GhGXwyLTXWHlUWGJqs1wbOMhu9vKM0FaNqyfZWw7FBbVWqw8kHlRMO84UU8ZxRm1fVEfVaSy/z3T6RDijPvqUyw7lHc9oe7HoTOXEdvkdB/qmjd9lj9g3wpqpxU1eCPXbLsqgxGwkbxBunVgk2i0OBF3bj03kxJTjyRm1AjIKfE4LURdECB6WjiyvUCEo7Mr5NgsxMLRhTFthKMLYz9hFrLMVBwbIr1dzy3wxmQWkQ7ix46UBTY2qtnA8AEY81Ozh4RlAnZjCeuuKmH1O5awmjEbiHhCwmqRsIGImykaBcsMOqv7DGqwXvEIu0bVioKqZadULRU0pzEyrIz3eg6Di5gTXpTf2aCEYd0f1DA7pYZdWRnWZQ1yQYOkeNkwTUVsQ3JX6F1TVDQ9Mi4TWxTIKpowQ02Slb2qGcoEM9TbJyuT7Uk/o17KwnJMMtEukomun2Si6yWZ6CokE12dZK6Amyyl67lqJslsNtKJ1chsPZKUDqKJGZpq2Jkit9toHURVSqoRInosIGZFDVMjQan8+8CyLn620iIo9YQaZkUNs7vUMGeGZsUMpxWxZKyICYd1QqMLYZlIai91zIFVMzmMlm1qpI65kSWW3FheurG8ROWkS+e527YaYaFy0nfBhF8oFVZ2XmVlwtYFkRsBMzwYSbDMfJ0pQsMuMCTVBcPPvpTpZCicOTLBxACzE3NzE7i5EluWDnoE3oIBKoijYLrolHa0ELeiM+5m4WZy8imZa0EG8PumGVUT5iOvV5wbkuK5xhZcx4bpCZNvQq6yYvJljuZyxSxerhukTrNwM8nCtbBwE6agGq1ZI37ELDwANmbhdjQfFeajGc9HNZ6PolZNz0czMR/VxHy0o/loeT5ano9W5iP33DBmMW9FT1oICDKYj/xgvnkwYteht3vxbDXFs3UwCo17r94Oz1ZTPHuPyrBvFbAJMw0Tk/DsMdkEnm138WwzzbMnh2LMs+0Ez56mo4Znu2me7cY8++3TEfPsKwlm1Evh2XaaZ5s9efZb0Uh0vTQSXYVGoqvQyF5wY1EVeLZuBKyMjW54thnxbGw0aubZery6scwgTaPYZ7w9pGR1EzZ0zHhfh3m2RSOBZ+vR/pkRnm0ans0GIguerYRn24Znm4mlM+SIneDYLnBsE9YDLK6YlfobsVPKLNsKy7aAWAk1YJyYZWuwbAuWjR+Nt8C7RyzbCMsOpgsXEBt6KmIJkmC0nyU2NlKywlHNqpoX0NkGBOKP54NN3ic1NGzDSjMZNsJrNsKT+kXli8HJXI+NaMPZzP94Xrqps1iROqoyp96jMq/10Kz411Shq6DHux62Y2xfrpR/Tf0sw24Gs1qzbI5CGC8bIhV5lWVzirCP659gIf5Y0cq+anU89L8CoeG/mqKyD4NunoC1KVQa+BZVlm8smqPhd9Fr/8PbyM5ZVRlU+8XZYPw7jF4um9ub4TL+pTfUsnFglcVh0UJJe3WPaCb+sbUqXjY/uE22pLQv/CzF3RNlIrZUhWdYj170UV1iIw6kNtuHBsMkkGJZoktLieg+dtksijrYkQalklvJgOSOTd4j6WIq1DhPjheJzuv+srklkw8+Ia8effMKW22PsaZx10tvqNuw5LvrSbn3vduwx+1farOi+9ib3+zsOL+zYyju8hoUuPi0/HzKsx61yGACpXMm4PpwRhGPepFm+5hS0B+24bsiz/63u/V7giNGcRTjtNDglGV31Qljo6p4VcSxC5sKh3m1X1n/nTeUGG9e5THBDyal9lGvvImM/6Gqy5vJ+J9GdXmAjP+BqssuGf8TVZeHpIPlQTxXdTmHqbYCjWXRfKKUnb7qMHaQMadmyn2TLiLY+vC/KvrJFX/DPe/+nP7IggB7M0eiOElbH731Y8vtrJPPzBZz1swf0EfV+25YcH/nF1c8M7v7yqxzdFSa59K5Mu8UUqra+HmQ9+fbG90y68zwg04ZdT4ipcquTmC481FstydiT3Cr+W0gL7gbxEtKUTKgtC5hFNd1GcPeWDPdY3vb9Fcp9b/722Z9a1XcJhal4tllswjJlIIy8VfcVDFPLfD2nRoLkMK72pviJhbM/4ghkalx2Ksy6XyUQT2KfVuKsNt3Cxv+Bn7nDdtH6WLtjzy2CmbZ7zMt+X/QZjr2/6rpFqV+tu9TVvz8f8iufOouVhYTtYVeRdTyyUnuRdV2Q2pH4jGzSFFG0al+vp8Sjx0AUv63pyojW6adj0xjcfk6sWhgXpyn1F/WVwP1IwB151W4JZHyP0h3P2Q8WZbIwAvzBsXGUb/jmPca7PJJsfDpHcpRwa/eoSJxfDk8Gg6e4sb/Y5l8Cs4nZSJdOxK69rHr7doEXMvGsUVsSR1gbX8aJn4+BYkbQfLf7wFJg+Rb3wEkPr0oWhujHPLwWnCBVvfG0MvTcMkC3PqdFMOU8kZaAygrYVNwRiC3aThNxE42UZl2ljPFlBEtm7sF9hbbECNoYzytrIzs4hjaRSoo2hvazmKDAbzGRs+iszg9ph+5fnL1CwNQ1hu279PBlpBcmJQLF7e2ZKKzDnULGf/HV6Kp4OlKM6LLdEb2ft69Ey0qWWbzabpsPuFNudBZzkac5OZdDXyHG8joJm828uOiDuZzgHmrbFEMRSoMhmHlfzWfxYZ+D65Nk3216Kul1kRHmTz8n7yhSjfBrOE7xftxvRmrtLGZGIh/cFvVguYd+38/X1ftRcMuabH/2ULNK3SK/U+lGMv+V2xX/AuaH7zAG/NzwPeg9umdWgXUAxS74ndMGZPzO0Zec/xaC685vObCay8aru1FM1lbsrs2cv7SVEXpdEVUUMvvzJ3zL9xYQ+9JCf0C8DI6hW9h81rTnL9kwE9qKnynpgPUKo4c8sEY4WmyiWhXE1zjzxZqKngtJtVGqNa8WS1dUSu1eUEUDEefInPXr+/s7LyubjO/LIrUp8n4vxBmrH28nltst4FXw3yN0S1jikqwS/8axlPMKX8ARgtOWooTBxPS3h9+ION9vRIOQ4lP+hfLFFvlYQLtmuHR9PzhHYVoPMOTzi08w1N/+bLtV2BFw21fXBTu/+etKdmC1z8A8v/TCRl5dzOhpLeqs4Q3/ixMBbNo7g7sjneQNrqVpRmyNIPSan6MOljbFSTM4m6yPXAaS5267ODFXom3Y8AOz6LSMQsJU63zfmEdeWAdH3wbrONI/83l3JOmXjYP8XV0Ebcir+tl8wjfaV+EzHZ1lS2bBynxMzIWMxfLlBWlm066MN0o8jdvbLH66P/BFM467we0f95wnrbox+cydm5pU4aF/37KKPP7T3bF5YEytplRBgchu2zO0RzKg+P6hQ5TsAIF2zLrqIzX51flLp3r4y5tNBRLQ+2Jhij1SR9tTZNhXLZHpCgVHBRt/aDo8skyz4SDrLuXuVc05/fTIerSAcFWcaS6gcnrO9P6w/uAqn8aSIvR5FV5A9PQQ9Usfh6pSwx4RjlcjIa49csDP9wu96P4qXKe4rJFDssbRsU8pbS/782grm5cUrpqU3QCtLiat4GGHtAwOUlaQE2rmSQ6Az+98bg21WiLK5/AVc5IcsBQRG3GELUFQzn27IaNqg4fot6MUdpgn8nU4LewcmwILO+9PlimGokoF03z16anaAuGoSC7j4E4DD6JvAFcEdsAYZIH6DRXe9M7rtlG2Mb9abCOvg2wAoFQ+yI7r/OkS9AWmFvbJ7vrfs/bqTuZqDuRui+rvs+w9wArcEwwkuX1xjUQIkqGYzkg4xZj3DCcZR64RqDmHPNz9B3fO65/6gTdP5ue3e8FybbGBB9mASQSze5J8/8wvbKCeNncL/zvsWXzacgdpnkGE1RPh+jmKyr6qz0q+ouGz9wQmDEcnTsfxKPvjhnyD26r9pPz8cYWzfinzMbW21KCqEMztX/S9MpZFGlfry6P8NYvlsX7ZQGdL5pbq4zyRXOsoros/RDl+3muVnIhE/c9KH66nMfPp8ob8bMC4sYi2eLn9nIGP7eUR1nGzbDLeSAaW6OomWAG4GmRL7ZYm8Ucy+hGsvQenv7wlQrehwkYgWOuSO4iWMWSUhUPbwdlc4dS1AFddDAxnC+gRSfHtSlbZojN7r68zXyQ5zlsDifDnYitlfi8PQEnw5bWGUnDfkgO3e/DsafFgGQ8P7l77dGcQHHUvVR4Rzv0MmPuVoXujbsW91gxiDFRuGsx98AMKWbQg7NxaanNk3NyAkISsAElrSt7MleHBAAbHsN2jO+8qTM2QDtpS9B4XENoNj2rqzZ16EivciecyDrXqxwdPZkrjOf3bkNAwb9tl0mnZNs9ZcDpDBG5nohpcpSd4Hul3MONXuVKuO21TuWwWvKIqfGIweGjZlGle1UKQ+VMmVALbbcoQzDL9X3VEVbboqxXtmD7ngGPARAZuSpF8+rtVeR6ZQssqOXtKTf1JQ/bHUqPyM/gpV7Zog6YMiq1jeLSWs3jiW9b3qzlUUOtcWgOSm+ngnE/De8l5EIbXOI2EqnciUBAi1g0nADQrdU8kjfVHcqilXX28XKhlYTSJeWwdk9gZuxglyL2r6q+W/H/GrtyKaikjDtHIppnwgCRMnHETBxCsx2dsQbj8ClG/8bxu+MpMno3g9IHbb6fHz7k/ygrk043m0QfZkcHWwX7T+Vd6tAs3Go7h4Jd9PXbJhWGWVEY2rsUhjalNCsKQ47JlL1dhYFyMIpZs0I55l7udY/NKTOoJivbXpUZTzua5Y7N+yHUmZqBynkWY1rnfcouMhizordk9cbbgyMC6WJyZmAEs0tKlTnNMnAQcrO8nocGWgM1uxSYHDCLXdT4fyEC5gaMMfX51ncaJW2Ij+URDz8p/0fTFiPob/6fNe8f8bO0v0txHzr1fY2QzShbzVu7hiKiLHQ5uc4uswR9/bamS2FBAarLGpaEXjNmkgYzjZzvZDSD9XiHv8KkaWQmzaD1mWaWUTBcRiGOqNOeNl8cvc41iKJ9NMPORYtmvpZdKrNoiN2AiV2bq9YqBOzalggn2yvZoHq4DOv8edAUtcmK6ZKh8q5ftkBh8uBmGKwNTdgpeHqnYplJ39KEws1013Ls3/zLKaMmzZT7OkcyXvnxBJuHHd9QayBv7W0i+aM3FE9jWBFVvxvsMZ2bM9YggCFwJJ7x1NzrHNnj6V5f3LTHPTaQ/U8C8Wi5LOvnpCN+bXeXbdnhlmXsTLkP3/xLoV8Ytf0/b9a77WXz/dsyYSSizfCIfLrMd1FvjqnUH8/gMSNJr5Oaea62zQrP3WpWQrOYwEU65pDDg7rczxxkVjjILE+c/czFGg4CEV7lYw6SviMO0kytMmGVoZylNgNIeclTLxlzksnpNTviC/8621MvZ/z+jw1+Z6GiMGvAshQmiWVzz5hNTOCYMrcyxSXid8El7pnkEmhxuhNYULWgUBr/vaBGz+RsOJvpzEP/QxWVlQkdib5jKcLkNovmFqg8Jqg8BKVnikHuCxXcitisDRnj2/G/Y6GOXh22lm+nCLFVGauubFjBTni20cVzZg9RuA03SEN42phaWmxWaZWWtZZoWmuB0YPVUngvstJELXA8VJbPjhhhZ3aP+TW3x71ij3uz4yUVM78kmLsyrEaDuWu0+ICdyl7sVbHsYM9SpwdTTRWWKPsp7vmorniNklOEeJ8IK5Sc9YaIxxFLlektN/bh/c4bah3sL4iuNGNDWIvtGQmifcU07P9wvF6ar1rBls7YhRO1o+hEF3YtYcRHqzbGto2tvDyUFqoMP/MYwwgkEFFeE9aqUQ/eonB4zU50YflaNPNli31899glCUZ0GMmCvb8xlFVslBerWLCRZRTlLYD/P0yYUe4ebSugE5BZkFOpLMhrTGbbdANOxvAUPoxwZyX9beMGnWJQ2mweu5v1BrJ3KAktZQICXja6ubr6HsaoJ1HoSdTY9SLuwWquERna7A8o2R9gBv5P9uxOMdGd5FrdObq7O4t/Q91Jr+gOtkv9K5PEFWHQmZmNd5OS61MiBLYGoBSGisNrzGSemtbCbDa17RF2oLyGUMbStCVbdcey3buku/Y2OEAAqwNAvppHU5pPdJ2aT8TwauIZSQgPVf7lKabIQLrSstYfABcR7TK6AfZrAPq6vOs1FsPXbb8IJjkw2FyxepVzWJCrYtR4Av4R3q3n2Kn4F3wdnALsorlddGIbfDrgJbU48OwuSPDtiOHJEa/mhl2Nj4mdgB0ub+EkBfw+2NYxDB2Lixa5U+zp1CHXI1eQkMmt4lB+bNncEtyfICGSmjrU6sHHp1fF1KKYWhuV61ZxQWzcAox4BRFqcY9wm32ldlXHF7dyxgXPvp0AtrXe5RcXzS0VL7AVG+3jmpVGuCmUM+y2UDKrhv8iHcaiWNxTuTfxFdpszNpsQ6VjdRY+GEglYEWjbZERMTjP24uW4uImiVFA8eYMqD0s43kLu84sIsQaYbrYZOvWfkdLGRFq8NvALeijHM/xp7hBCvaxtW69bI5R5P8uRV0O8IwYqC4Hxxxe62L017rlgtDY/xxo7IvlQkaFxAgsZF9t6c5wwkFIzFRqESJng20tM7x2KrS45aycepNRjWL/2Gbk4YKb1RzaiKQfZUYzCDZooQuzUE9z6H6eYx0o8zsGnjuZdzXxbkerTCinrCdx114PTiKimv30WpTXZcewnRyv4rUq9QUqaEFX9Lq/5Q37wbUoQzx4GqIyOtQZxWtgmV9gCgYvys4aR+qjmNdQKE/mZu/6UmkyhKUhZLIJxU1DyN2L4xq/1NSYUraRI5AwlY9Z4d2z/nwU8ZYiJC6VmLcU8VMhcFZIBx9S2nzK7yaUTKYpSLBDwVEheYgKSUK8GfBQpd70wagwSnldzQFCmHazXrkPb3RYQU+Dw2AHG4gJtXc5c6aTgY8JlhAdaqOdNLSzUBZsIOusT1Qy9Zbh+/NV4obUYYfODlSNBFy0ww6dMB3kWNhUbTh05ujmfJVAFYHRLhfdJIFyl04EPrYzKsRfswMWh0QdcPJ76QYeG0rYX7MN7Lan/TXTCX/NDrZO2V+zwLvsr8ml+Yza7HfWpgLsXYCGhRMdKwQZC1noG+tNeDA/erBPBGIYybkxEcxNj6QM956UuC9Q9hXfUEr7CgutNMkoyRguCClGDKYuaw+H/Bf94zQT4n8Sb/tdXjyiLmzSJSe6/GWLZij5WRsaxExhqJVVM1N+fp8QAXV7RoZNmpqMvM2Sqmjc+/ldJ9z1dlF+I4rnlOKQOXaAcz3IMvEb67EXKdz8FwZb2UPaDOHQ6J/A28XhwGYPwxn/dvaT3e1GB86rg3ed3uVdxwk8GI7CkCoM6cg/kWVFcIwMXnkruzwlZ4vWrjv9K+4cKVpZW1ylZ4s7mmJ/XDxS3LHboy8q8uy/fK/OJVbhCVLFcfjhndjK1aHGi7/x6DsskaGOHbbg4Rd8H92aCAjnfydaD7u1/wH7OQ0TL1ZFFVjk5ZNehpAZqwuQTKr4ML8oawFXOpESw2Wz2ES1uLUtDrvwn/cceHqiW7MbLV9b7+7t1vdu5fDsvoYXnvMfWOeN/N+J1iUcwa3mWWef5AgSu9xfsUIm2YBu8Z2B3/kJNns9u4jg5vPa63tF7X1GV9abe3LlX8Vyx/p4I1eQma8icjpe6wavA4q2KutpSxaY57qV9UceI7vlj2wXt/EtCVs+rj+CaxRuKW7L2KOWzT2iLDJojCzgLehXaML5j0voeFAy+fXGX0mz3sAtp7U/wja4vZ/9pr7Gw/QONQqUFO/Cvd9T16jjP9UzbyQeisejtf6moHDeieLCo9WFK+M9YTT2qoXcNVqwYracxj7TtFDoLKulR0sODTxcslIJixfUP5g5oOLZpvKWVM4Qt0LjiVfrHipV2t1iuG13y3NOqO6WL7By6m4xDIvmMCvwTWVRgDQKFdnre4v9AuXF4zq+juqWVPLWb71b5DPYneuAhjNTIBwTC/zrwcX89eEiIpstmmO8a6sWMYWgi+MznlHscTJeLxOn3JEJyKzlz1VvJjKtVsvy5stfKmQWcv7fwTDCKWSYWpjDj3uxQva4nmedvoeAQQDreEtV3Hh5pXBKpnqKSHHpUcFf1LxXWI3cfDowXcyHV46tgu+cCrvQ4/64Gip5r+nSpHF8RNsSI9IrY6+avXoh9U52FUDiBoZ5jm6fAsOSO7kXGHYCDMYo72mMFqqHF81hEQjzvBFrZHLxMPJsZ10qDj1NrmwiqXlFF5oYsc0o1BT0VNg/YXAQTAQCIYrE5AHuHUhmBDboxQYTRuijiAOkTEtO5mo3FHYMxbijf6kaj1mu42hTx3/6vh59B319Jz39d5NDeUyGshP65I34lTSAOoEOlV0dkNHTa07lSSmY7cG3bUPMyYis41EpGpUEGg5eMItmgJh0BHqxtfN3orVcN4rGsGF+IhR1cUuneRZ4oGm8lIz/KkzCdvQQ1Zri1okWYiGRl5bEXKKlt/cjW9on3VDs1bZGMA3rDWR7Xhe/IG+dY4eXRaOKD3vr+Ra0qq70SsHdrrGCnxsN+ZuUcGmpEnxfWiKmtheXJmXuO3gs4xVxaBWSXdjjyOtZwzeIvxl43Vs2gwA27IIOzl9cG/7/9aVrdx3WWa/26HfTZ866lkmFbFh7Syxeq7bV3AoOn98Pw74MIzsbii8ad6mK/dOGd5NGqD4nbqgYYb06fmmjnycU734T/jUnhNPfzna5SUpYaxSud0kJyQgnrXeNkySYlW+HD4ls2zpxMEnqqu01QsOqlPe11tmOii2zUcms8yr6KVOXuTcwLk+H6iC4pa4iOMqkkr0l4o+MlBBzKyW3njspRet5JKV4PY+llKznvP8O9lBXUV21GBzs1v0/egMOO2xPzmS3pgVWEMHjoYUBj+DF0eLgUHhptDgEFL4Z7LwS+biWTeEIrnhABoxEPfSJ80lZiuGOG4b40hK2orzdyPUhuP43c4ZnDLIM6skpNXoc7TnjrniMmnuV8Gu4GSypSy8gtp+y2j+T7pqDHX/ptzRi7a6cnYvmQY7XEcJkmmXn4QGvGZlz8Fxl+gQoGQcyJsxPMM/sdL/sLsBHj+2e/briMUV4zIPyNjhJNs1K1LtiJSrjziIm1XfO+b/eDx//OaWyyvon+t5IMNvvRCztrP/VPm9i8oI2jw9N6n3W6/WR4MBytjcTKa210ewN+fKSTNVXlio72OK8XdbPfJKnfnynfnnpagp0fPXVC2zEf7gUVFxU7PNe6bzxBdneRY4YAOnUI//4V5b8731JH9ciHWJ/iS+wbzPYqgIUbGe1PXL3jNeBjcR2e8C0+9kYJji/Bcii3kWuHVt4vuiJQd3VGUAiUyyGUEyW7Yjtteuii9wHK4AJu8J3V1Hjyc1hZYosB6Q2sjZwVP69v/EaH9kf+A2W/mLZgKsnM+QFUM59uT0kOggowYwk1JU41yNt5eqvNNrKcf2R8i0qWlIfLd+yrfTdvTIGp/3W4GTXfoX3lNgfSvvi4rRFQ+bVAlKB3utCMHJvlAppNWNT1r9h89HfzQ5rPbkfUNw4YTjL/onWdgiLFUxz0cgkh4Uvp7e4hmVOg1Cu/XzlLZ6/A8vfr7Kl6q/UWjdDgK0uTNZiY9y5QmernIsJeTFC3POioV3hzocl+N5wMptA/M5//w3V8w9uMFjZ11omGSZPkA62RARVP418W0ix+DSz/Bee1ixpvMY2rzwVz7BVcDpkZpYgFoS6wUORY304bhFh7lXLX3ru3/xfT2xjD8nrfre0k2E/YNOwub5wZ3B/4L1Gzg9cWn/paS1l7AroJoxojdvI7kr/c7dy1w8MZXfZ5361bPObj5c2xBu1PwX9un2XfpoLzh/pc07pS09rskVVslMx4MA7z5dtBif7fd8eVJyT8IVfepPXvPBnSDM1alrCrbDBCudIB6ctW1SSi23Upewu/UX2LsyALWzuKvkC+31FBfkOGMZfcDLfbdku98c32KXVrJL2SX9Vwmixn2sIw0F2mx0Z0ZMX7uQ1zDYHlyOtRdinjTgVs/GL56sWADcSioT8u6R/wRLF33q2yn9/XM8vlTEeLJD61rPVzNQDhQcFJd96tpqdepDgwZsa07eerYqpBxEeKLLferbKph7Yu3TZxsDclf5nuaE2UM0I5o2q9l32uarzfPNFzXm6t0toZTO0677aLqEUzu6+n2yzs1Cx+360LQ5Uu+9boK6N4WpLEA9Djn6VM9zvcpbxUhaMtxI8fhHpQ1r+l8+R4QQd33q2KL9FM0AEl2aBKy4VQCeXMmD82aIsLSfd5Dq4QYsUsumGG2LEMTpvNcKBFEK09XA7uuonFRIQ4akmNfl0/MBc7YG92gN3tQfR1R7EV3uQ7HrAPUylh2noYfZHEXNsdkArOfdOyF+0xrv/6DoS3f3VZduDYcH/5LI9gc1kh6z5BQ5J2Nn5RM1ihR+R2kJiEU7Yjx2tgPUwvZoKoUQgt/1oSpFDE4/5YgB2jMaQyo1r3JoF+/tLA03Wf/uDWM1pTi9sIfZCZXKBKLJQNOOiHRfduBiNi/G4mIyL6bjYGhfb42I2LnbGxXxcnBkXZ1HkwwQKzmfGKc1z1fSbNyq4gDH69gdlkL79wYYOjRsyHRdjOr5OjI5qjsajyZlumW7rSoWiGRftuOjGxWhcjMfFZFxMx8XWuNgeF7NxsTMu5uPizLjY4EuHXLa+CKiAQRiRKoOtyOss+2ctfRCpL1bYDSCsUhOPLVqx2BJLyY6nmrC7rQc1L1YGvEM6XrekwFsqeOOdAj+LDW+w0ubzdvg4Z2eqXpBmMbwxJSEiUlxL5v9XzTK03T1ve13OYPWaYAeYc0UkXpctxEvwfjq1ZSXLbbaaNnVw72SWFsnDZBwiKcEYDBAiMBJqneiWM15z3XB/S32xztkm9aDMQm+5ApKW0Ag8EdQnc91xqAZRh8i6sIrerm/l4jZMHTRoULN4ce1C9BjHvFfcESADruEmUUsMYSJRl3dqlU3g3s+XcxRV+8v5JhXZjDEKeXBm/U5Ocbec96/O+Fc7KO73T5pyDnvYO4XfmQlPZ/2ruTxV5RwcppA4Qq/5/yX2348p7lYLXtPMoJrd6OeYjmbN/yvnX3d4dCPJ3VkM7yHZMtpHM2yqNX4I65LXFA/KgxZbs4rmKKIDTX8RYHcCgUQ5zW2w5SX3P2IHi/241fN6UMV4Ex7UNI/FeVYmfkgtKnrVDYOyS/vIUMGuzOVhOsgDB8/1bs3uCnUVU36nNhTTDYgCiSmB7o/gG8/00RvIqFSx1xc5Y1zc58icESmNiL5XNRHqPTJ9RLRhZ6s06A4yvCQsEFadUCWOY5joavgR68qhPtxZ1uAWcHKLQ2qojX8nulTQDBXdqsAuyj46yP3aB1DR4WQATw72BkmoqCsOgMoF1iy00Ksyr+7NNSVlPDGWGAOaratZWjjR5zGkWbrxRH8rT2TKZST4SmhGIoFiCQ3aBy8icxE4TEu2IKClMm/mj8pkeiUyTSTIqRJaHc8TFPELUg7cGR5uHM2DNRSqVzJE2IQWX0sGTCJhOKTewUdCiZtiMpv5YfZBhYrsijBAJWZzzYcYjfUSTkmVZR/WGnJAh9wljcb1Magm6q70+WdHX0kAxu9np7QdBu1dzp1RzYEarKGhblL94D6gL1auWVKwTOl3pf2LjV6UfVNrB8ZLvcod5WyCPVbiOcEW818/RIJ/r+7p8qLDh+RbkspNBXTFCDnWcuIBE6hYk3gJywQKqVUcZT5hUI8Jso3qo1D5OYVYFUPKwicVo4Iblm1Ro/ezW7UdypEYcJupbEjP6PUJToUs2OqV4QCZy+xqkv2BZi8TNiwbxvZ/ZWRLHyZnPvaF794sN382P3lz/3pIY2UaHj05Hl7fqb/akkXot5ckzdQ3luT60lJ0tQ+v+iD7bw3DijU9m2sUm29gHorYgKM4npPtVipkXhzZfxQbCdimd5VnqrENcdK8ULltbEM+70leaRsMQ6p4f1PT2BQhNZmJVq541tg7rvb48mW7LebUq8A52jkOSSfFRRPL+YKCI+c8IQ/CfPb7mhOnhb5o35pAjQ7V6nH3X16aaHaP54wesVCp+3L1VjWxG4kMDNrnDNtKcMeUiIhyfPnqUvZfN4BifAOw7IH2LoFtIPAB7PQezuL8lnXi8zHkPu3xmGfZG22dwFqSjA9/wxacmJQ4+Vh70RyDic6GOdXyl3cu/+6Q1/2xZC5xbAGBUy+oHIoPe9Loi7wV02RT8Rq5RY/rl3XOVqxXwu93dW48jewIyC3BNoFgg2ihwtXGdMxZ48RbPIbbXsw+4UDLiwfr4gNc+vqo9FVdoxNfO1h8kK+f38/X32iuvy1v+jdwCJnfhxwABr1CmIs3YtKN4C3++v6mZyJ9pUeC+G8s4YtzdRX5uXqZGcKi+eaSb9c4JQ++YV0ucYyF4m1MnKPCoVyRuDxgSwuOs+5E2I5mv7LifZx5BbxBDop4Zal0UPH4BevNVrAlm6swi90EYa6LwNiQHGg2MAt9JbPwl57R/tKXdXGMCRGOYwEcPmtjBEiA7d0AFKYPrO0Mm+6JQAuhwcFF8ZUlGWrEwrxhwyFy3zgI7YMR0wnw0BTO3gVcEStbk7hi4ZT1JI98wAU5H9UZcq++IkOkx5AkpH8ukCTXhoSb4TtjSGL//14WJDFI+Rg5Px+Q9kJPlQZi6vTkfLamuea+q7PKBfA4P0EzMzkBFMXUFiUk3TUpcajXqJq3ngbp9XXA7An7xESYhHXED8BzKkOtYqnhOJWmhK/g0QBmVbyXt1RU8f4s++ctPTeUcxzSYGzntFeShdC+qWNA+3v9L9Rt5nXOR4Z/9/LBfv4HizyA/ocHwZWHHLstypoTQ7BaNK8vInP0fUF303wG0OuL8JdjQy1n1oGLWdube6qkK0cEpfy06tRQeFQ4uG2EtG8s8UbhN+Cj0Kakixj11UYKfXMJkSL1cW16y+abS6z+sMe8KI5YxjQD8/oiGm8HeDhWNGRLH7VneLkOr747xeljpEpqOGC7oNyy8qruc6HHfIO72+PK1aL50UHOax26zYdp/eggsQGh+JCA8/1FtgQvm+83X2APWuzZ8egQpMm3mqcBZ1ZyCISeOiw5UpGI3G1WjDmoLkSBVZzVnktw1I43oHGj144sFiOJ/LDj9QSwITvSaGzvzVU2CZsJsMkAc0/EjvHKQYQ58b5ORyguGVFcIScPpWVwxCsk726O/Kyw2YkdgiNYR/mdGI5gWHdswBAYBMGNvmv8K04eoJf+FXdft5xjMWukI4bmEBGW8C6IfFth76PaV1dwQ09oJuRcwKIDH0E63leZbjUL/BgxodkS3KSDZWcMU8CuLW5ONBtR9kkOAoh4RcltSRJjEeMzsj1rabY+J5I8nyRsSzntAxQ1RXgu5G04tAxrHl4Kcf4nWVDFZCo2GRoGJ0ftM9BkKOeQfVkpRfzQYNdaecNUklEmy33JBGfuxf96JbJdo/JV7qNu1vNGTItsipII2REagQ/OhSx7/hFniiI52S70OQKd4gy30OOIdDPXGjOmLLJkHwD+H3Hxnoi5sCk+NPFe9o+Nbg1JI+qaT4JjErh82d6pY++8JQejWeJ/Q6OUhrWXMK4h59sNi84s8DHHO1aRpMXhMyCyNT7IRAdW1hCFW4NI4JjIEzCdmCFsVRsSqBVMMDH6Gckk5A1xNpSzQGleihgZQi+ZrMpeOcCXrxyQRDrQDVsnBXvH9avy8NUDIs3Ucf2a3HntQIa0T20fexyK5dYq22267a13ZLsBHYy376e6FRY1l5ZY/2OVLwoqn+00Z7y+uISQEeRH4QNeWNIdVyE/sG4cOwT/o0UlqC5uFn/NytIXCOaz94yF5O51W3SNNd2EkIwnF5Zh1QqjNtwOjLgdiH4YsRuNpH1MGcrn0mkwn0mrdqgrGWzBGCDSXGBNJmBNAjxJs4C8PljbI1iT3sVQP/xtgosEio1Mb/nDPX/ulAuHXl36CmepE2DSRbMzV6XBZ4N5OqsfblJp2g2Gu551+i6VyfUuskdQOnbiEKVSbjawKuKuyNlFSOuDtHgX/Y6p37x+0mx0l9Sl3wqYT4QJyCEPTO5Vm6bsDb6geNS1d2NyaE/2I9TPSbgabMd1hh1fxrbb4HDbZNFc+nuI0PUFyjv7ECMaqBRmIzumC2l/7Ln6tijBXYHoKwEct9hQ9QhgGCBtXWUyYzf4GOU32d5TKZ/lFqG8g+zydkwVEk957Snnrg+xegS3CsszPiu0CNp+WKFl/12m20Nht2DJVdItHbPhpMs7hoH5TjPeIWdaxaHlvDtQRpwCEhHHoiq2G5abUrImdry6MsJ0+ZgoYboJG41tYGQuMDK4RtiG+pxwpg5Fu5AU9yiaQNLuEZ5E0u5nE0jqjJAU9S6G+qPx4EY8mJE4RDUGWtirxytu26y4zRBrbvB+SthBjV0xml6yLbSU82tj4bWuoVKzIoN+rdl0XRRrGh4L+NmoIj5nVobcTa6C+eAfSC6BBM4TwMVx/ccHqjEsU7Po5wCT2QMmE0ILX1miqFluGj/7yRHXNLuXmnFoLN5jqWkaP/a3XGqaMC0MEqIaYgfgUYPhCbsoJJIcLxKZbkWm70bbn/6tou2NBm0zf4Noy3t7oUxyZVrRc3Zj6Z/+rWLpPzZYav8NYqkVxMQ0lhIcXiNJPwN8GauBCaVrlWE1MAUnhhpooAamYMdpUAUva50NZWkPpQ1Le5yh3ij0LRhFNGeEDl7zspPSLAfdvXKCHblP8kHNnDJnq3LN90ljMEnDw3C/09zPT7F/eL7OSwx2Reb1/JKSPBMOy6WMN4Wna3Cjmjd4MceO5py60clqFwejUOhKOA8rLC+amy3ssD2txXvPXNN7j4870433HgyoklfhLxWOHDl40sPZVA/8k5d2TL8rR0JJVJk2xrB27z+wRgrhJ1ucjuTj63lz0K7JftjiUcDZ5FFPDpk/BqdYshvdkpe5nGWCg2nXxeFAjNt8BA8fQRPs7B+ovf1clXBiA9ARbp8TxeH+qgNdzfJ54UgtlfTYDuAQsC0mvVPdypyAcbhNyWofz9a3tvqcjkRJ7O4aG3v6VVy8b2LrxLteoO7xLdsb79SM7xrcHTbbM+P7ujcOAhIX7kyi/6XvHfYe5V6wxQN+BEg3VJDgwMEdo8OxcHxqLaLb4PpeyMU8P5mXyXc/XyC9rO0x+puNB9587ZApPnJo+kYdDivlmLmeHGRqx3tEfMBTJkfvWt4nkEMdXWXkkCeMAdMeH+VkkPWTR5hDTvisnW8vSQd59xc4QsfCS+z1zFP7nFTBWTV4XOHHfYK3kSyq5dTYqKfi0zFqCvj59hL4zcmRTQ7tZaEG/Ly0dEoqQVNZgKQOqFdNFhaG5xw8ugy3Iwz2mFRQIfkSohY3uoxergcw358Jj3tt6YS0v2xeW+KFrZP4Gz0TaaWUDhhE3BacX6x8dv9abkZ9NiE5IF46JVPz/ioSNLl7uAuGD4cX+BAriYEOGOEDVc1bYOSYpKZl3JhJ3Bjpkw30xsH04MQbnPRKcHE7GeAc5CO4siNc2UlcuV7zLbmAqz1wFBBQxb0qaqZyZ3KaAxs2TFvX8AyL+Sx+JRYzOczZeH1rdSs3IxTL+XUhrQLFHFgacngZ9lkRF/pDEgwho3KIo1KzSmPuy0wydUAwZizsRN5E3vKZsz7lfUmy2W+Ktzd7QReLIXVApeWcHxhX7EY3HKQbogwL0g3BdUjXcvim3K8lNwRv0erxpMYmjRx4xpUrvsQzPQohSXHAdfaMZsd0Ps6I+Qj8FE0Q4pjcTkzzCO6j8Q7l4UWzgJgPCQYMoZPYML45JBCauBUCOUMt9ciUm/IFEmBlz7X07DB4CLTDPmcipxw1LQ78s5y1XiECjW9Uxj9nOCpYXPQlHhJBSaG1TwvdCi3W7FaKTH4KKV63+yBFvgjUemufHVYUUqeJwdCwS4VY4DmJe3Nq1zH/HJQtsr0N2bQmW3yMo6PCMcMPlnzShpVUvkrWqUHJQSyPGJNqmRVq0TzWq8brqj3fdJO7/Hu+wVFTRgL8J6OmEomaCgZO8Q9ps9u1nOiA9WcwVyAd0kYXEVV1E1I19Rk3PuAOgsGZZbn4+pIcV3VpCVmavN2Q6b2jm91UtopGCMPCSGDTkLF0j4jsc8Jgbi15Nq+UOY+BpEv6dDnL41UWvKVgud+BscMeGRSkYrBNs32kgLoHKf6oI2M5I8eK8F4Am3LJSjeiEUCRWO+xIJFqU2qt55y1Q0nk2Jh3hWaDPIAdUAUiEmpDCmUZD9AXHnBlNhAFy+smWvWq4zix0fMOHot2nwSD6h6DF2LMpFNjXHKImZIQM0mjFlhaZSTOLLBzjjMDY+A4M6llguWpUciqYX8d00gO482p7mQEaKhdT9SuQ8QmaQn/3F07h3+GFrqzwfgjsZpvVd21gIXzFsIoMnLZH0e6PRTRkWCOi7I5kA0tFrmBpdQwR/LDYzW5k6LU3F7BTpPUsPf3Gob9GCU9HHsRyCjpSXxwEBgJS2QngnBDzssbaR1343/3VbKtIRKTIbESIxYsywapuzAJ0lPd4N7Uk8OUmbeZ8LVhD6vr/TSipC6joGkoDkYKJ7uPWMDt5OqaouIjfIcl+0Deh0iHRcxuNC49t4taco5zPNSV5t238czBcmiJXTMxd6oY3FlzllXYCWC2crIPZGW/juDKuE1peIv7CQ5CdoKHi2NcO0z9djP1Xdg/fGmp2cnDclbymmPX5VlzIh8LedlfwtCLqvXaUqXZjUTcigYypXEQMM4becqI4gkHvqfMKUhxSNRRPjvMIOgSHMenyUjeVg6yNaRPchQebGHYYuk1C57KICqgqUCjAiMnUwKciFAFTI6vLWXZf+P0Pgbsi9hM8eYiyo8L8r+km8VTUHOP9fxzaBkVkj3ZFf77ghZFb1BhXZFudIUf317NgOclyLJazlLC0c4F00mFw2NKSTuOUibcfE64+b6QIkDTDHoZyevUXs9V8wVl65I4U3He+nChOW874hYNe1qaevJkq1FkdVJX/LLjl2N8aTiFPSKoDUJGHIdYO1w4XDj4UhmEhjgOtDa4iHERcyAkQkDckmJbYyLB1qauOGWlW1IpIq4dAkJcCLw2o8Brw+eYSA4GzksdBY+pWLKmOJSQa4XPUhF/KiO+C7IbGyORY4ENSwm8jsQpToOBWGInESvJLW2IU24jJ3ItaLdIc9mhfaRprt/4V2vo6/Byrlq5rPbhvZFudLPfy7BdKEpXa6x0NWrXFUrX6ljr2ugDuau5Yea7l9Jl31LpstdQupwoXbbZCGSFY9k8HljqsnnIG3a9MJDQLuRTZp3j1KSKFnhOo6W54mNB6vvoxMgZjLdjIwTham/LaEIp808SOjbRFtP24zDCWNFzoo1xApNJgcxiI53W9EQTfcgPt+sqvrYYj3+u6l6LN6bembr3OLZ5WVl6vNH/TI+hGcjWGCedH6txX18SkK/Q1yy1TzaY+nTDDTmka5I+3NUZuttDl8smlLnHgzInRMHa2yONaodl5zqTq210BTehK7hGV3BvodgYTF+1aB5p+DHz/8D4/la0urHmNqFW7aG0MVVfRW/LxvrgSDcZaYqjnjtMAi1IvcrbHcNnxf3/CkFMB3+Dyqj9OSij4C+z8GH4RV6d720j19OO31c8hsN0qki5FZVlVqns73d0NA5CHwcalJFEJMR8CjKfLB3sDxMnVqtg8oUR2McE9WK41i0jJA3C6dMwkpheJNF2MMdazjUbhHfRg1WexVy6ViV9Di7Fxs+Jra1c+S/CYUVOwf7uEilkSpb2cMDz4RB1Lha5BZiOwwHtbEq46/LlJ/l0xU+zs95TOz/Rt5n7SHmkhRGPuluIkx8MUD428ky7lbhDi6AHFJCgGemZw10WIhMPVka37xvfxsYjgHstmCTvfvNyZ0cvm68thXpw6V3zPiBIZcS+tsSOQsum00jb24N5YSX83s0x8pKGknNyvDlcO3yoly5uPCSnQqpl8zw04zcfPwO7dHqHOspLY1gdX2TnBG/PeRh/v76E0SVdHAdmPeNCy4HdWg7s1pzMTY7qYJNuysZdJDkwcsK45VFGLxYgAj/uPwDsrVWqy+BxetGVJmsVJ0qVrI8Z5xH3T3D6kNL4F7+CNUDItMOO54fFkd0MKkbkpa9oSZu9MzdAdBC6em8Xkc1KnAs5UMRfekE3Sfcmw1zYcV3Jpf/d39L+cEitGGLQjV3xBQeUIiaAI3lvXgMJs5wfwDrqk8EynCEYXE0RvCF80uMQfGTjuFcOYwyBOc5fYl/3MSSTcfcSkIRiE+gj3nxm7M03Bh8NYie74J4a/4LmtMpa7u5jdEFycxo1cjhL/E69D8eu8gsz4YUXRy8s1HfqGZy3Km1fCqgzAxym+nvP6EnUYc/rRTDOgv3Lf9fA2axxa/U3N19WCqek/t6XOeesjxBpdOnLkxVhgDk3g2wu4WDX6ZbC/dZV7qdX3o/GtPH3GtrYd03a+C0dnGUmOhhOsgi0kUnu9VeWvCQ9VSE058fFsnn5IFn//WLZfBOFV4tlc+kgh1f/DOnLvy3l5/fXy+brUv4q+O+LB8kW75WZFBRRPViWDYomvQvDfndlmnikkDxEloUq5HURx2O6DSIYMD4yvnO/vBRWz89o3zlXaf/T/dD3l80Lmn1UfhIuvySX/3e43JHL/xguv8hnNiFnucuy/zNLlN9Js3/kzp7f/tzDD589c3bz/IAe3Xz0wtYX1Ic/9NEPffhDH1569MLg3OYX1NnzF0+fO/sQnTs72Nw6fe74uc3znx08sk3bm4PRszMXHtqkyQefO987f+Hz5+mRzdMPbW7Rw+dOf3b6i4fObg9Onz+zOX33M2cHoRra2nxs8/RADS5coEdPn/9Cc/vC1uhT2v7Co5+5cG579PX24MLW5kP0mXMXzvQaaNRnPvfww5tbtLm1dWFLbQ+2Nk8/Gi6mgF9aokfPbm+fPf9Z2jz/0NKFh5e4GnX2/JkLW1ubZwZNV848sjl1O8C1+/ZDpwenRzenu0zo08Ont+gzp8/0VFPt1hkA8OjpwZlHRl98/uz5hy58nrbP/srmGEXcu8EXHtu8yshwf65slO82w3LmwqOPbW1ub5+9cJ4e3Rw8cuEhJf8Vak7tU0qlKlEtFau2ilSmnOooq3Jl1IzSalb5VzvZHzqrnIpUrBKVqpZqq0zlalbNqf3qBtVVR9R71AfVR9Wd6pfUf6HOqG31tPqH6s/U/6GMbtqa/psLf/vC3/7wNx/+DoS/Qm2o7/LOmVECA2DN1Zy6UZXqw8qr0+pJ9SdK6yeRpspqp2Od6o4u9IImfYte0Q9Ott+02bSFNg6qg+oGdYNaUAvqRnWjOqQOqa7qqsPqsLpJ3aRW1Ip6p/23Adc7u/6eDH9Phb+nw98z4e/Z8PfCz6H/eke/Otlu017TznPqOfVr6tfU8+p59evq19VvqN9Qv6l+U31JfUl9WX1ZfUV9RdFdSu2kSmmt1M1aqVml1KU1pVRL+nezknvc13Bvv1IqUf7SXHZSNj/H/8yuf3bXP7frXzT1z7+wL9vcXdXuT5vX4/AvCf/S8K8V/rXDvyz864R/Of/zr+7P3tNUnzQTZ26fSpNW3I4y17G5mdGzyv/1/uzRhNt2KuV/iserUGkox6zVp+EdUGOLYSn4flPGKEmZ3iwrjTJKRisnZaONVkVL+R/PZy06oQWr/x8=")))),t)})}var kCo=x(T(),1);var YCo=x(T(),1),Ns,RG,Mg,l9;function vve(e){if(Ns=e,{malloc:RG,free:Mg,memory:l9}=Ns,typeof RG!="function"||typeof Mg!="function"||!l9)throw Ns=RG=Mg=l9=null,new Error("Invalid WASM module")}function Fve(e,t,n={}){let i=typeof n.level=="number"?n.level:-1,o=typeof n.outBuffer=="number"?n.outBuffer:64*1024,r=typeof n.inBufferSize=="number"?n.inBufferSize:64*1024;return new TransformStream({start(){try{let a;if(this.out=RG(o),this.in=RG(r),this.inBufferSize=r,!this.out||!this.in)throw new Error("allocation failed");if(this._scratch=new Uint8Array(o),e?(this._process=Ns.deflate_process,this._last_consumed=Ns.deflate_last_consumed,this._end=Ns.deflate_end,this.streamHandle=Ns.deflate_new(),t==="gzip"?a=Ns.deflate_init_gzip(this.streamHandle,i):t==="deflate-raw"?a=Ns.deflate_init_raw(this.streamHandle,i):a=Ns.deflate_init(this.streamHandle,i)):t==="deflate64-raw"?(this._process=Ns.inflate9_process,this._last_consumed=Ns.inflate9_last_consumed,this._end=Ns.inflate9_end,this.streamHandle=Ns.inflate9_new(),a=Ns.inflate9_init_raw(this.streamHandle)):(this._process=Ns.inflate_process,this._last_consumed=Ns.inflate_last_consumed,this._end=Ns.inflate_end,this.streamHandle=Ns.inflate_new(),t==="deflate-raw"?a=Ns.inflate_init_raw(this.streamHandle):t==="gzip"?a=Ns.inflate_init_gzip(this.streamHandle):a=Ns.inflate_init(this.streamHandle)),a!==0)throw new Error("init failed:"+a)}catch(a){throw s(this),a}},transform(a,c){try{let d=a,u=new Uint8Array(l9.buffer),m=this._process,p=this._last_consumed,b=this.out,f=this._scratch,y=0;for(;y<d.length;){let _=Math.min(d.length-y,32768);if((!this.in||this.inBufferSize<_)&&(this.in&&Mg&&(Mg(this.in),this.in=0),this.in=RG(_),this.inBufferSize=_,!this.in))throw new Error("allocation failed");u.set(d.subarray(y,y+_),this.in);let S=m(this.streamHandle,this.in,_,b,o,0),Z=S&16777215;if(Z&&(f.set(u.subarray(b,b+Z),0),c.enqueue(f.slice(0,Z))),!e){let C=S>>24&255,G=C&128?C-256:C;if(G<0)throw new Error("process error:"+G)}let V=p(this.streamHandle);if(V===0)break;y+=V}}catch(d){s(this),c.error(d)}},flush(a){try{let c=new Uint8Array(l9.buffer),d=this._process,u=this.out,m=this._scratch;for(;;){let p=d(this.streamHandle,0,0,u,o,4),b=p&16777215,f=p>>24&255;if(!e){let y=f&128?f-256:f;if(y<0)throw new Error("process error:"+y)}if(b&&(m.set(c.subarray(u,u+b),0),a.enqueue(m.slice(0,b))),f===1||b===0)break}}catch(c){a.error(c)}finally{let c=s(this);c!==0&&a.error(new Error("end error:"+c))}},cancel(){s(this)}});function s(a){let c=0;return a.streamHandle&&a._end&&(c=a._end(a.streamHandle)),a.streamHandle=0,a.in&&Mg&&Mg(a.in),a.in=0,a.out&&Mg&&Mg(a.out),a.out=0,c}}var GG=class{constructor(t="deflate",n){return Fve(!0,t,n)}},AG=class{constructor(t="deflate",n){return Fve(!1,t,n)}};GG.requiresModule=!0;AG.requiresModule=!0;var Ive=!1;async function Pve(e,{baseURI:t}){if(!Ive){let n,i;try{try{i=new URL(e,t)}catch{}n=await(await fetch(i)).arrayBuffer()}catch(r){if(e.startsWith("data:application/wasm;base64,"))n=CXt(e);else throw r}let o=await WebAssembly.instantiate(n);vve(o.instance.exports),Ive=!0}}function CXt(e){let t=e.split(",")[1],n=atob(t),i=n.length,o=new Uint8Array(i);for(let r=0;r<i;++r)o[r]=n.charCodeAt(r);return o.buffer}var ioe;Wve(g0);rWe({initModule:e=>{if(!ioe){let{wasmURI:t}=e;typeof t==Ku&&(t=t()),ioe=Pve(t,e)}return ioe}});g0({CompressionStreamZlib:GG,DecompressionStreamZlib:AG});var oRo=x(T(),1);function RXt(e,t){this.position=e,this.headingPitchRange=t}var d9=RXt;var cRo=x(T(),1);function pH(e,t){this.id=t,this.name=e,this.playlistIndex=0,this.playlist=[],this.tourStart=new Se,this.tourEnd=new Se,this.entryStart=new Se,this.entryEnd=new Se,this._activeEntries=[]}pH.prototype.addPlaylistEntry=function(e){this.playlist.push(e)};pH.prototype.play=function(e,t){this.tourStart.raiseEvent();let n=this;Nve.call(this,e,t,function(i){n.playlistIndex=0,i||Xve(n._activeEntries),n.tourEnd.raiseEvent(i)})};pH.prototype.stop=function(){Xve(this._activeEntries)};function Xve(e){for(let t=e.pop();t!==void 0;t=e.pop())t.stop()}function Nve(e,t,n){let i=this.playlist[this.playlistIndex];if(i){let o=GXt.bind(this,e,t,n);if(this._activeEntries.push(i),this.entryStart.raiseEvent(i),i.blocking)i.play(o,e.scene.camera,t);else{let r=this;i.play(function(){r.entryEnd.raiseEvent(i);let s=r._activeEntries.indexOf(i);s>=0&&r._activeEntries.splice(s,1)}),o(e,t,n)}}else l(n)&&n(!1)}function GXt(e,t,n,i){let o=this.playlist[this.playlistIndex];if(this.entryEnd.raiseEvent(o,i),i)n(i);else{let r=this._activeEntries.indexOf(o);r>=0&&this._activeEntries.splice(r,1),this.playlistIndex++,Nve.call(this,e,t,n)}}var u9=pH;var fRo=x(T(),1);function bH(e,t,n){this.type="KmlTourFlyTo",this.blocking=!0,this.activeCamera=null,this.activeCallback=null,this.duration=e,this.view=n,this.flyToMode=t}bH.prototype.play=function(e,t,n){if(this.activeCamera=t,l(e)&&e!==null){let o=this;this.activeCallback=function(r){delete o.activeCallback,delete o.activeCamera,e(l(r)?!1:r)}}let i=this.getCameraOptions(n);if(this.view.headingPitchRoll)t.flyTo(i);else if(this.view.headingPitchRange){let o=new le(this.view.position);t.flyToBoundingSphere(o,i)}};bH.prototype.stop=function(){l(this.activeCamera)&&this.activeCamera.cancelFlight(),l(this.activeCallback)&&this.activeCallback(!0)};bH.prototype.getCameraOptions=function(e){let t={duration:this.duration};return l(this.activeCallback)&&(t.complete=this.activeCallback),this.flyToMode==="smooth"&&(t.easingFunction=ls.LINEAR_NONE),this.view.headingPitchRoll?(t.destination=this.view.position,t.orientation=this.view.headingPitchRoll):this.view.headingPitchRange&&(t.offset=this.view.headingPitchRange),l(e)&&(t=It(t,e)),t};var m9=bH;var gRo=x(T(),1);function ooe(e){this.type="KmlTourWait",this.blocking=!0,this.duration=e,this.timeout=null}ooe.prototype.play=function(e){let t=this;this.activeCallback=e,this.timeout=setTimeout(function(){delete t.activeCallback,e(!1)},this.duration*1e3)};ooe.prototype.stop=function(){clearTimeout(this.timeout),l(this.activeCallback)&&this.activeCallback(!0)};var h9=ooe;var Hve={avi:"video/x-msvideo",bmp:"image/bmp",bz2:"application/x-bzip2",chm:"application/vnd.ms-htmlhelp",css:"text/css",csv:"text/csv",doc:"application/msword",dvi:"application/x-dvi",eps:"application/postscript",flv:"video/x-flv",gif:"image/gif",gz:"application/x-gzip",htm:"text/html",html:"text/html",ico:"image/vnd.microsoft.icon",jnlp:"application/x-java-jnlp-file",jpeg:"image/jpeg",jpg:"image/jpeg",m3u:"audio/x-mpegurl",m4v:"video/mp4",mathml:"application/mathml+xml",mid:"audio/midi",midi:"audio/midi",mov:"video/quicktime",mp3:"audio/mpeg",mp4:"video/mp4",mp4v:"video/mp4",mpeg:"video/mpeg",mpg:"video/mpeg",odp:"application/vnd.oasis.opendocument.presentation",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",ogg:"application/ogg",pdf:"application/pdf",png:"image/png",pps:"application/vnd.ms-powerpoint",ppt:"application/vnd.ms-powerpoint",ps:"application/postscript",qt:"video/quicktime",rdf:"application/rdf+xml",rss:"application/rss+xml",rtf:"application/rtf",svg:"image/svg+xml",swf:"application/x-shockwave-flash",text:"text/plain",tif:"image/tiff",tiff:"image/tiff",txt:"text/plain",wav:"audio/x-wav",wma:"audio/x-ms-wma",wmv:"video/x-ms-wmv",xml:"application/xml",zip:"application/zip",detectFromFilename:function(e){let t=e.toLowerCase();return t=L0(t),Hve[t]}},foe;typeof DOMParser<"u"&&(foe=new DOMParser);var AXt=new xz({stripPrefix:!1,email:!1,replaceFn:function(e){return e.urlMatchType==="scheme"||e.urlMatchType==="www"}}),sT=32,Yve=2414016,wve=1,Mve=16093e3,kve=.1,Uve=[null,void 0,"http://www.opengis.net/kml/2.2","http://earth.google.com/kml/2.2","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.0"],Dve=["http://www.google.com/kml/ext/2.2"],EXt=["http://www.w3.org/2005/Atom"],Ue={kml:Uve,gx:Dve,atom:EXt,kmlgx:Uve.concat(Dve)},poe={Document:i2e,Folder:KXt,Placemark:JXt,NetworkLink:oNt,GroundOverlay:tNt,PhotoOverlay:s2e,ScreenOverlay:eNt,Tour:QXt},loe=class{constructor(t){this._dataSource=t,this._deferred=hd(),this._stack=[],this._promises=[],this._timeoutSet=!1,this._used=!1,this._started=0,this._timeThreshold=1e3}get dataSource(){return this._dataSource}addNodes(t,n){this._stack.push({nodes:t,index:0,processingData:n}),this._used=!0}addPromise(t){this._promises.push(t)}wait(){let t=this._deferred;return this._used||t.resolve(),Promise.all([t.promise,Promise.all(this._promises)])}process(){let t=this._stack.length===1;return t&&(this._started=kg._getTimestamp()),this._process(t)}_giveUpTime(){if(this._timeoutSet)return;this._timeoutSet=!0,this._timeThreshold=50;let t=this;setTimeout(function(){t._timeoutSet=!1,t._started=kg._getTimestamp(),t._process(!0)},0)}_nextNode(){let t=this._stack,n=t[t.length-1],i=n.index,o=n.nodes;if(i!==o.length)return++n.index,o[i]}_pop(){let t=this._stack;return t.pop(),t.length===0?(this._deferred.resolve(),!1):!0}_process(t){let n=this.dataSource,i=this._stack[this._stack.length-1].processingData,o=this._nextNode();for(;l(o);){let r=poe[o.localName];if(l(r)&&(Ue.kml.indexOf(o.namespaceURI)!==-1||Ue.gx.indexOf(o.namespaceURI)!==-1)&&(r(n,o,i,this),this._timeoutSet||kg._getTimestamp()>this._started+this._timeThreshold)){this._giveUpTime();return}o=this._nextNode()}this._pop()&&t&&this._process(!0)}};function LXt(e){let t=e.slice(0,Math.min(4,e.size)),n=hd(),i=new FileReader;return i.addEventListener("load",function(){n.resolve(new DataView(i.result).getUint32(0,!1)===1347093252)}),i.addEventListener("error",function(){n.reject(i.error)}),i.readAsArrayBuffer(t),n.promise}function WXt(e){let t=hd(),n=new FileReader;return n.addEventListener("load",function(){t.resolve(n.result)}),n.addEventListener("error",function(){t.reject(n.error)}),n.readAsText(e),t.promise}function Kve(e){let t={xsi:"http://www.w3.org/2001/XMLSchema-instance"},n,i,o,r;for(let s in t)t.hasOwnProperty(s)&&(o=RegExp(`[< ]${s}:`),r=`xmlns:${s}=`,o.test(e)&&e.indexOf(r)===-1&&(l(n)||(n=e.substr(0,e.indexOf("<kml")+4),i=e.substr(n.length)),n+=` ${r}"${t[s]}"`));return l(n)&&(e=n+i),e}function Jve(e){let t=e.indexOf("xmlns:"),n=e.indexOf(">",t),i,o,r;for(;t!==-1&&t<n;)i=e.slice(t,e.indexOf('"',t)),o=t,t=e.indexOf(i,t+1),t!==-1?(r=e.indexOf('"',e.indexOf('"',t)+1),e=e.slice(0,t-1)+e.slice(r+1,e.length),t=e.indexOf("xmlns:",o-1)):t=e.indexOf("xmlns:",o+1);return e}async function vXt(e,t){let n=await e.getData(new wk);n=Kve(n),n=Jve(n),t.kml=foe.parseFromString(n,"application/xml")}async function roe(e,t){let n=Hve.detectFromFilename(e.filename)??"application/octet-stream",i=await e.getData(new Nk(n));t[e.filename]=i}function qu(e,t,n,i){let o=i.keys,r=new f9.default("."),s=e.querySelectorAll(t);for(let a=0;a<s.length;a++){let c=s[a],d=c.getAttribute(n);if(l(d)){let m=new f9.default(d).absoluteTo(r).toString(),p=o.indexOf(m);if(p!==-1){let b=o[p];c.setAttribute(n,i[b]),t==="a"&&c.getAttribute("download")===null&&c.setAttribute("download",b)}}}}function $u(e,t,n,i){let o=e.querySelectorAll(t);for(let r=0;r<o.length;r++){let s=o[r],a=s.getAttribute(n),c=boe(a,i);l(c)&&s.setAttribute(n,c.url)}}function jve(e,t,n){let i=Ca(e,"id");i=l(i)&&i.length!==0?i:Qn(),l(n)&&(i=n+i);let o=t.getById(i);return l(o)&&(i=Qn(),l(n)&&(i=n+i)),o=t.add(new Jo({id:i})),l(o.kml)||(o.addProperty("kml"),o.kml=new hoe),o}function p9(e,t){return e==="absolute"||e==="relativeToGround"||t==="relativeToSeaFloor"}function TH(e,t){if(!l(e))return h.fromDegrees(0,0,0,t);let n=e.match(/[^\s,\n]+/g);if(!l(n))return h.fromDegrees(0,0,0,t);let i=parseFloat(n[0]),o=parseFloat(n[1]),r=parseFloat(n[2]);return i=isNaN(i)?0:i,o=isNaN(o)?0:o,r=isNaN(r)?0:r,h.fromDegrees(i,o,r,t)}function gH(e,t){if(!l(e))return;let n=e.textContent.match(/[^\s\n]+/g);if(!l(n))return;let i=n.length,o=new Array(i),r=0;for(let s=0;s<i;s++)o[r++]=TH(n[s],t);return o}function aT(e,t){if(!l(e))return;let n=e.getAttribute(t);if(n!==null){let i=parseFloat(n);return isNaN(i)?void 0:i}}function Ca(e,t){if(!l(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function oo(e,t,n){if(!l(e))return;let i=e.childNodes,o=i.length;for(let r=0;r<o;r++){let s=i[r];if(s.localName===t&&n.indexOf(s.namespaceURI)!==-1)return s}}function Ove(e,t,n){if(!l(e))return;let i=[],o=e.getElementsByTagNameNS("*",t),r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function Of(e,t,n){if(!l(e))return[];let i=[],o=e.childNodes,r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function Vi(e,t,n){let i=oo(e,t,n);if(l(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function Mn(e,t,n){let i=oo(e,t,n);if(l(i))return i.textContent.trim()}function Bf(e,t,n){let i=oo(e,t,n);if(l(i)){let o=i.textContent.trim();return o==="1"||/^true$/i.test(o)}}function boe(e,t,n){if(!l(e))return;let i;if(l(n)){e=e.replace(/\\/g,"/");let o=n[e];if(l(o))i=new ve({url:o});else{let r=new f9.default(t.getUrlComponent()),s=new f9.default(e);o=n[s.absoluteTo(r)],l(o)&&(i=new ve({url:o}))}}return l(i)||(i=t.getDerivedResource({url:e})),i}var Kd={maximumRed:void 0,red:void 0,maximumGreen:void 0,green:void 0,maximumBlue:void 0,blue:void 0};function doe(e,t){if(!l(e)||/^\s*$/gm.test(e))return;e[0]==="#"&&(e=e.substring(1));let n=parseInt(e.substring(0,2),16)/255,i=parseInt(e.substring(2,4),16)/255,o=parseInt(e.substring(4,6),16)/255,r=parseInt(e.substring(6,8),16)/255;return t?(r>0?(Kd.maximumRed=r,Kd.red=void 0):(Kd.maximumRed=void 0,Kd.red=0),o>0?(Kd.maximumGreen=o,Kd.green=void 0):(Kd.maximumGreen=void 0,Kd.green=0),i>0?(Kd.maximumBlue=i,Kd.blue=void 0):(Kd.maximumBlue=void 0,Kd.blue=0),Kd.alpha=n,U.fromRandom(Kd)):new U(r,o,i,n)}function UZ(e,t,n){let i=Mn(e,t,n);if(l(i))return doe(i,Mn(e,"colorMode",n)==="random")}function FXt(e){let t=oo(e,"TimeStamp",Ue.kmlgx),n=Mn(t,"when",Ue.kmlgx);if(!l(t)||!l(n)||n.length===0)return;let i=Q.fromIso8601(n),o=new fs;return o.addInterval(new Vn({start:i,stop:tt.MAXIMUM_VALUE})),o}function IXt(e){let t=oo(e,"TimeSpan",Ue.kmlgx);if(!l(t))return;let n,i=oo(t,"begin",Ue.kmlgx),o=l(i)?Q.fromIso8601(i.textContent):void 0,r=oo(t,"end",Ue.kmlgx),s=l(r)?Q.fromIso8601(r.textContent):void 0;if(l(o)&&l(s)){if(Q.lessThan(s,o)){let a=o;o=s,s=a}n=new fs,n.addInterval(new Vn({start:o,stop:s}))}else l(o)?(n=new fs,n.addInterval(new Vn({start:o,stop:tt.MAXIMUM_VALUE}))):l(s)&&(n=new fs,n.addInterval(new Vn({start:tt.MINIMUM_VALUE,stop:s})));return n}function Qve(){let e=new sl;return e.width=sT,e.height=sT,e.scaleByDistance=new Ht(Yve,wve,Mve,kve),e.pixelOffsetScaleByDistance=new Ht(Yve,wve,Mve,kve),e}function goe(){let e=new $h;return e.outline=!0,e.outlineColor=U.WHITE,e}function qve(){let e=new qh;return e.translucencyByDistance=new Ht(3e6,1,5e6,0),e.pixelOffset=new M(17,0),e.horizontalOrigin=Di.LEFT,e.font="16px sans-serif",e.style=fr.FILL_AND_OUTLINE,e}function yoe(e,t,n,i,o){let r=Mn(e,"href",Ue.kml);if(!l(r)||r.length===0)return;if(r.indexOf("root://icons/palette-")===0){let a=r.charAt(21),c=Vi(e,"x",Ue.gx)??0,d=Vi(e,"y",Ue.gx)??0;c=Math.min(c/32,7),d=7-Math.min(d/32,7);let u=8*d+c;r=`https://maps.google.com/mapfiles/kml/pal${a}/icon${u}.png`}let s=boe(r,n,i);if(o){let a=Mn(e,"refreshMode",Ue.kml),c=Mn(e,"viewRefreshMode",Ue.kml);a==="onInterval"||a==="onExpire"?gt(`kml-refreshMode-${a}`,`KML - Unsupported Icon refreshMode: ${a}`):(c==="onStop"||c==="onRegion")&>(`kml-refreshMode-${c}`,`KML - Unsupported Icon viewRefreshMode: ${c}`);let d=Mn(e,"viewBoundScale",Ue.kml)??1,u=c==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",m=Mn(e,"viewFormat",Ue.kml)??u,p=Mn(e,"httpQuery",Ue.kml);l(m)&&s.setQueryParameters(nu(xH(m))),l(p)&&s.setQueryParameters(nu(xH(p)));let b=t._ellipsoid;return Toe(s,t.camera,t.canvas,d,t._lastCameraView.bbox,b),s}return s}function PXt(e,t,n,i,o){let r=Vi(t,"scale",Ue.kml),s=Vi(t,"heading",Ue.kml),a=UZ(t,"color",Ue.kml),c=oo(t,"Icon",Ue.kml),d=yoe(c,e,i,o,!1);l(c)&&!l(d)&&(d=!1);let u=Vi(c,"x",Ue.gx),m=Vi(c,"y",Ue.gx),p=Vi(c,"w",Ue.gx),b=Vi(c,"h",Ue.gx),f=oo(t,"hotSpot",Ue.kml),y=aT(f,"x"),_=aT(f,"y"),S=Ca(f,"xunits"),Z=Ca(f,"yunits"),V=n.billboard;l(V)||(V=Qve(),n.billboard=V),V.image=d,V.scale=r,V.color=a,(l(u)||l(m)||l(p)||l(b))&&(V.imageSubRegion=new $e(u,m,p,b)),l(s)&&s!==0&&(V.rotation=L.toRadians(-s),V.alignedAxis=h.UNIT_Z),r=r??1;let C,G;l(y)&&(S==="pixels"?C=-y*r:S==="insetPixels"?C=(y-sT)*r:S==="fraction"&&(C=-y*sT*r),C+=sT*.5*r),l(_)&&(Z==="pixels"?G=_*r:Z==="insetPixels"?G=(-_+sT)*r:Z==="fraction"&&(G=_*sT*r),G-=sT*.5*r),(l(C)||l(G))&&(V.pixelOffset=new M(C,G))}function yH(e,t,n,i,o){for(let r=0,s=t.childNodes.length;r<s;r++){let a=t.childNodes.item(r);if(a.localName==="IconStyle")PXt(e,a,n,i,o);else if(a.localName==="LabelStyle"){let c=n.label;l(c)||(c=qve(),n.label=c),c.scale=Vi(a,"scale",Ue.kml)??c.scale,c.fillColor=UZ(a,"color",Ue.kml)??c.fillColor,c.text=n.name}else if(a.localName==="LineStyle"){let c=n.polyline;l(c)||(c=new al,n.polyline=c),c.width=Vi(a,"width",Ue.kml),c.material=UZ(a,"color",Ue.kml),l(UZ(a,"outerColor",Ue.gx))&>("kml-gx:outerColor","KML - gx:outerColor is not supported in a LineStyle"),l(Vi(a,"outerWidth",Ue.gx))&>("kml-gx:outerWidth","KML - gx:outerWidth is not supported in a LineStyle"),l(Vi(a,"physicalWidth",Ue.gx))&>("kml-gx:physicalWidth","KML - gx:physicalWidth is not supported in a LineStyle"),l(Bf(a,"labelVisibility",Ue.gx))&>("kml-gx:labelVisibility","KML - gx:labelVisibility is not supported in a LineStyle")}else if(a.localName==="PolyStyle"){let c=n.polygon;l(c)||(c=goe(),n.polygon=c),c.material=UZ(a,"color",Ue.kml)??c.material,c.fill=Bf(a,"fill",Ue.kml)??c.fill,c.outline=Bf(a,"outline",Ue.kml)??c.outline}else if(a.localName==="BalloonStyle"){let c=doe(Mn(a,"bgColor",Ue.kml))??U.WHITE,d=doe(Mn(a,"textColor",Ue.kml))??U.BLACK,u=Mn(a,"text",Ue.kml);n.addProperty("balloonStyle"),n.balloonStyle={bgColor:c,textColor:d,text:u}}else if(a.localName==="ListStyle"){let c=Mn(a,"listItemType",Ue.kml);(c==="radioFolder"||c==="checkOffOnly")&>(`kml-listStyle-${c}`,`KML - Unsupported ListStyle with listItemType: ${c}`)}}}function XXt(e,t,n,i,o){let r=new Jo,s,a=-1,c=t.childNodes,d=c.length;for(let m=0;m<d;m++){let p=c[m];(p.localName==="Style"||p.localName==="StyleMap")&&(a=m)}if(a!==-1){let m=c[a];if(m.localName==="Style")yH(e,m,r,i,o);else{let p=Of(m,"Pair",Ue.kml);for(let b=0;b<p.length;b++){let f=p[b],y=Mn(f,"key",Ue.kml);if(y==="normal"){let _=Mn(f,"styleUrl",Ue.kml);if(l(_))s=n.getById(_),l(s)||(s=n.getById(`#${_}`)),l(s)&&r.merge(s);else{let S=oo(f,"Style",Ue.kml);yH(e,S,r,i,o)}}else gt(`kml-styleMap-${y}`,`KML - Unsupported StyleMap key: ${y}`)}}}let u=Mn(t,"styleUrl",Ue.kml);if(l(u)){let m=u;if(u[0]!=="#"&&u.indexOf("#")!==-1){let p=u.split("#"),b=p[0];m=`${i.getDerivedResource({url:b}).getUrlComponent()}#${p[1]}`}s=n.getById(m),l(s)||(s=n.getById(`#${m}`)),l(s)&&r.merge(s)}return r}function NXt(e,t,n){return t.fetchXML().then(function(i){return $ve(e,i,n,t,!0)})}function $ve(e,t,n,i,o,r){let s,a,c,d,u=Ove(t,"Style",Ue.kml);if(l(u)){let y=u.length;for(s=0;s<y;s++)d=u[s],a=Ca(d,"id"),l(a)&&(a=`#${a}`,o&&l(i)&&(a=i.getUrlComponent()+a),l(n.getById(a))||(c=new Jo({id:a}),n.add(c),yH(e,d,c,i,r)))}let m=Ove(t,"StyleMap",Ue.kml);if(l(m)){let y=m.length;for(s=0;s<y;s++){let _=m[s];if(a=Ca(_,"id"),l(a)){let S=Of(_,"Pair",Ue.kml);for(let Z=0;Z<S.length;Z++){let V=S[Z],C=Mn(V,"key",Ue.kml);if(C==="normal"){if(a=`#${a}`,o&&l(i)&&(a=i.getUrlComponent()+a),!l(n.getById(a))){c=n.getOrCreateEntity(a);let G=Mn(V,"styleUrl",Ue.kml);if(l(G)){G[0]!=="#"&&(G=`#${G}`),o&&l(i)&&(G=i.getUrlComponent()+G);let E=n.getById(G);l(E)&&c.merge(E)}else d=oo(V,"Style",Ue.kml),yH(e,d,c,i,r)}}else gt(`kml-styleMap-${C}`,`KML - Unsupported StyleMap key: ${C}`)}}}}let p=[],b=t.getElementsByTagName("styleUrl"),f=b.length;for(s=0;s<f;s++){let y=b[s].textContent;if(y[0]!=="#"){let _=y.split("#");if(_.length===2){let S=_[0],Z=i.getDerivedResource({url:S});p.push(NXt(e,Z,n))}}}return p}function xoe(e,t,n){let i=new fg(e,t.id,["position"]),o=new Qp(t.position);t.polyline=l(n.polyline)?n.polyline.clone():new al,t.polyline.positions=new Eg([i,o])}function e2e(e,t){return!l(e)&&!l(t)||e==="clampToGround"?rt.CLAMP_TO_GROUND:e==="relativeToGround"?rt.RELATIVE_TO_GROUND:e==="absolute"?rt.NONE:t==="clampToSeaFloor"?(gt("kml-gx:altitudeMode-clampToSeaFloor","KML - <gx:altitudeMode>:clampToSeaFloor is currently not supported, using <kml:altitudeMode>:clampToGround."),rt.CLAMP_TO_GROUND):t==="relativeToSeaFloor"?(gt("kml-gx:altitudeMode-relativeToSeaFloor","KML - <gx:altitudeMode>:relativeToSeaFloor is currently not supported, using <kml:altitudeMode>:relativeToGround."),rt.RELATIVE_TO_GROUND):(l(e)?gt("kml-altitudeMode-unknown",`KML - Unknown <kml:altitudeMode>:${e}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`):gt("kml-gx:altitudeMode-unknown",`KML - Unknown <gx:altitudeMode>:${t}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`),rt.CLAMP_TO_GROUND)}function YXt(e,t,n){return n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround"?e:((l(t)&&t!=="clampToGround"||l(n)&&n!=="clampToSeaFloor")&>("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${t??n}`),new Qp(e))}function wXt(e,t,n,i){if(!l(e))return;if(n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround")return e;(l(t)&&t!=="clampToGround"||l(n)&&n!=="clampToSeaFloor")&>("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${t??n}`);let o=e.length;for(let r=0;r<o;r++){let s=e[r];i.scaleToGeodeticSurface(s,s)}return e}function _H(e,t,n,i){let o=t.label;l(o)||(o=l(n.label)?n.label.clone():qve(),t.label=o),o.text=t.name;let r=t.billboard;if(l(r)||(r=l(n.billboard)?n.billboard.clone():Qve(),t.billboard=r),l(r.image)?r.image.getValue()||(r.image=void 0):r.image=e._pinBuilder.fromColor(U.YELLOW,64),l(r.scale)){let s=r.scale.getValue();s!==0?o.pixelOffset=new M(s*16+1,0):(o.pixelOffset=void 0,o.horizontalOrigin=void 0)}l(i)&&e._clampToGround&&(r.heightReference=i,o.heightReference=i)}function t2e(e,t){let n=e.path;l(n)||(n=new Lb,n.leadTime=0,e.path=n);let i=t.polyline;l(i)&&(n.material=i.material,n.width=i.width)}function MXt(e,t,n,i,o){let r=Mn(n,"coordinates",Ue.kml),s=Mn(n,"altitudeMode",Ue.kml),a=Mn(n,"altitudeMode",Ue.gx),c=Bf(n,"extrude",Ue.kml),d=e._ellipsoid,u=TH(r,d);return i.position=u,_H(e,i,o,e2e(s,a)),c&&p9(s,a)&&xoe(t,i,o),!0}function Bve(e,t,n,i,o){let r=oo(n,"coordinates",Ue.kml),s=Mn(n,"altitudeMode",Ue.kml),a=Mn(n,"altitudeMode",Ue.gx),c=Bf(n,"extrude",Ue.kml),d=Bf(n,"tessellate",Ue.kml),u=p9(s,a),m=Vi(n,"drawOrder",Ue.gx),p=e._ellipsoid,b=gH(r,p),f=o.polyline;if(u&&c){let y=new Wb;i.wall=y,y.positions=b;let _=o.polygon;l(_)&&(y.fill=_.fill,y.material=_.material),y.outline=!0,l(f)?(y.outlineColor=l(f.material)?f.material.color:U.WHITE,y.outlineWidth=f.width):l(_)&&(y.outlineColor=l(_.material)?_.material.color:U.WHITE)}else if(e._clampToGround&&!u&&d){let y=new al;y.clampToGround=!0,i.polyline=y,y.positions=b,l(f)?(y.material=l(f.material)?f.material.color.getValue(tt.MINIMUM_VALUE):U.WHITE,y.width=f.width??1):(y.material=U.WHITE,y.width=1),y.zIndex=m}else l(m)&>("kml-gx:drawOrder","KML - gx:drawOrder is not supported in LineStrings when clampToGround is false"),e._clampToGround&&!d&>("kml-line-tesselate","Ignoring clampToGround for KML lines without the tessellate flag."),f=l(f)?f.clone():new al,i.polyline=f,f.positions=wXt(b,s,a,p),(!d||u)&&(f.arcType=ln.NONE);return!0}function kXt(e,t,n,i,o){let r=oo(n,"outerBoundaryIs",Ue.kml),s=oo(r,"LinearRing",Ue.kml),a=oo(s,"coordinates",Ue.kml),c=e._ellipsoid,d=gH(a,c),u=Bf(n,"extrude",Ue.kml),m=Mn(n,"altitudeMode",Ue.kml),p=Mn(n,"altitudeMode",Ue.gx),b=p9(m,p),f=l(o.polygon)?o.polygon.clone():goe(),y=o.polyline;if(l(y)&&(f.outlineColor=l(y.material)?y.material.color:U.WHITE,f.outlineWidth=y.width),i.polygon=f,b?(f.perPositionHeight=!0,f.extrudedHeight=u?0:void 0):e._clampToGround||(f.height=0),l(d)){let _=new Ec(d),S=Of(n,"innerBoundaryIs",Ue.kml);for(let Z=0;Z<S.length;Z++){s=Of(S[Z],"LinearRing",Ue.kml);for(let V=0;V<s.length;V++)a=oo(s[V],"coordinates",Ue.kml),d=gH(a,c),l(d)&&_.holes.push(new Ec(d))}f.hierarchy=_}return!0}function UXt(e,t,n,i,o){let r=Mn(n,"altitudeMode",Ue.kml),s=Mn(n,"altitudeMode",Ue.gx),a=Of(n,"coord",Ue.gx),c=Of(n,"angles",Ue.gx),d=Of(n,"when",Ue.kml),u=Bf(n,"extrude",Ue.kml),m=p9(r,s),p=e._ellipsoid;c.length>0&>("kml-gx:angles","KML - gx:angles are not supported in gx:Tracks");let b=Math.min(a.length,d.length),f=[],y=[];for(let S=0;S<b;S++){let Z=TH(a[S].textContent,p);f.push(Z),y.push(Q.fromIso8601(d[S].textContent))}let _=new mc;return _.addSamples(y,f),i.position=_,_H(e,i,o,e2e(r,s)),t2e(i,o),i.availability=new fs,d.length>0&&i.availability.addInterval(new Vn({start:y[0],stop:y[y.length-1]})),m&&u&&xoe(t,i,o),!0}function zve(e,t,n,i,o,r,s,a,c){let d=e[0],u=e[e.length-1],m=new mc;m.addSamples(e,t),n.intervals.addInterval(new Vn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c,data:YXt(m,s,a)})),i.addInterval(new Vn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c})),o.intervals.addInterval(new Vn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c,data:r}))}function DXt(e,t,n,i,o){let r=Bf(n,"interpolate",Ue.gx),s=Of(n,"Track",Ue.gx),a,c,d,u=!1,m=new Lg,p=new fs,b=new uc,f=e._ellipsoid;for(let y=0,_=s.length;y<_;y++){let S=s[y],Z=Of(S,"when",Ue.kml),V=Of(S,"coord",Ue.gx),C=Mn(S,"altitudeMode",Ue.kml),G=Mn(S,"altitudeMode",Ue.gx),E=p9(C,G),v=Bf(S,"extrude",Ue.kml),F=Math.min(V.length,Z.length),P=[];a=[];for(let N=0;N<F;N++){let g=TH(V[N].textContent,f);P.push(g),a.push(Q.fromIso8601(Z[N].textContent))}r&&(l(c)&&zve([c,a[0]],[d,P[0]],b,p,m,!1,"absolute",void 0,!1),c=a[F-1],d=P[P.length-1]),zve(a,P,b,p,m,E&&v,C,G,!0),u=u||E&&v}return i.availability=p,i.position=b,_H(e,i,o),t2e(i,o),u&&(xoe(t,i,o),i.polyline.show=m),!0}var n2e={Point:MXt,LineString:Bve,LinearRing:Bve,Polygon:kXt,Track:UXt,MultiTrack:DXt,MultiGeometry:OXt,Model:BXt};function OXt(e,t,n,i,o,r){let s=n.childNodes,a=!1;for(let c=0,d=s.length;c<d;c++){let u=s.item(c),m=n2e[u.localName];if(l(m)){let p=jve(u,t,r);p.parent=i,p.name=i.name,p.availability=i.availability,p.description=i.description,p.kml=i.kml,m(e,t,u,p,o)&&(a=!0)}}return a}function BXt(e,t,n,i,o){return gt("kml-unsupportedGeometry",`KML - Unsupported geometry: ${n.localName}`),!1}function zXt(e,t){let n=oo(e,"ExtendedData",Ue.kml);if(!l(n))return;l(oo(n,"SchemaData",Ue.kml))&>("kml-schemaData","KML - SchemaData is unsupported"),l(Ca(n,"xmlns:prefix"))&>("kml-extendedData","KML - ExtendedData with xmlns:prefix is unsupported");let i={},o=Of(n,"Data",Ue.kml);if(l(o)){let r=o.length;for(let s=0;s<r;s++){let a=o[s],c=Ca(a,"name");l(c)&&(i[c]={displayName:Mn(a,"displayName",Ue.kml),value:Mn(a,"value",Ue.kml)})}}t.kml.extendedData=i}var Uo;typeof document<"u"&&(Uo=document.createElement("div"));function HXt(e,t,n,i,o){let r,s,a,c=t.kml,d=c.extendedData,u=Mn(e,"description",Ue.kml),m=t.balloonStyle??n.balloonStyle,p=U.WHITE,b=U.BLACK,f=u;l(m)&&(p=m.bgColor??U.WHITE,b=m.textColor??U.BLACK,f=m.text??u);let y;if(l(f)){if(f=f.replace("$[name]",t.name??""),f=f.replace("$[description]",u??""),f=f.replace("$[address]",c.address??""),f=f.replace("$[Snippet]",c.snippet??""),f=f.replace("$[id]",t.id),f=f.replace("$[geDirections]",""),l(d)){let Z=f.match(/\$\[.+?\]/g);if(Z!==null)for(r=0;r<Z.length;r++){let V=Z[r],C=V.substr(2,V.length-3),G=/\/displayName$/.test(C);C=C.replace(/\/displayName$/,""),y=d[C],l(y)&&(y=G?y.displayName:y.value),l(y)&&(f=f.replace(V,y??""))}}}else if(l(d)&&(a=Object.keys(d),a.length>0)){for(f='<table class="cesium-infoBox-defaultTable cesium-infoBox-defaultTable-lighter"><tbody>',r=0;r<a.length;r++)s=a[r],y=d[s],f+=`<tr><th>${y.displayName??s}</th><td>${y.value??""}</td></tr>`;f+="</tbody></table>"}if(!l(f))return;f=AXt.link(f),Uo.innerHTML=f;let _=Uo.querySelectorAll("a");for(r=0;r<_.length;r++)_[r].setAttribute("target","_blank");l(i)&&i.keys.length>1&&(qu(Uo,"a","href",i),qu(Uo,"link","href",i),qu(Uo,"area","href",i),qu(Uo,"img","src",i),qu(Uo,"iframe","src",i),qu(Uo,"video","src",i),qu(Uo,"audio","src",i),qu(Uo,"source","src",i),qu(Uo,"track","src",i),qu(Uo,"input","src",i),qu(Uo,"embed","src",i),qu(Uo,"script","src",i),qu(Uo,"video","poster",i)),$u(Uo,"a","href",o),$u(Uo,"link","href",o),$u(Uo,"area","href",o),$u(Uo,"img","src",o),$u(Uo,"iframe","src",o),$u(Uo,"video","src",o),$u(Uo,"audio","src",o),$u(Uo,"source","src",o),$u(Uo,"track","src",o),$u(Uo,"input","src",o),$u(Uo,"embed","src",o),$u(Uo,"script","src",o),$u(Uo,"video","poster",o);let S='<div class="cesium-infoBox-description-lighter" style="';S+="overflow:auto;",S+="word-wrap:break-word;",S+=`background-color:${p.toCssColorString()};`,S+=`color:${b.toCssColorString()};`,S+='">',S+=`${Uo.innerHTML}</div>`,Uo.innerHTML="",t.description=S}function SH(e,t,n){let i=n.entityCollection,o=n.parentEntity,r=n.sourceResource,s=n.uriResolver,a=jve(t,i,n.context),c=a.kml,d=XXt(e,t,n.styleCollection,r,s),u=Mn(t,"name",Ue.kml);a.name=u,a.parent=o;let m=IXt(t);l(m)||(m=FXt(t)),a.availability=m,_oe(a);function p(V){return V?V.show&&p(V.parent):!0}let b=Bf(t,"visibility",Ue.kml);a.show=p(o)&&(b??!0);let f=oo(t,"author",Ue.atom),y=c.author;y.name=Mn(f,"name",Ue.atom),y.uri=Mn(f,"uri",Ue.atom),y.email=Mn(f,"email",Ue.atom);let _=oo(t,"link",Ue.atom),S=c.link;S.href=Ca(_,"href"),S.hreflang=Ca(_,"hreflang"),S.rel=Ca(_,"rel"),S.type=Ca(_,"type"),S.title=Ca(_,"title"),S.length=Ca(_,"length"),c.address=Mn(t,"address",Ue.kml),c.phoneNumber=Mn(t,"phoneNumber",Ue.kml),c.snippet=Mn(t,"Snippet",Ue.kml),zXt(t,a),HXt(t,a,d,s,r);let Z=e._ellipsoid;return r2e(t,a,Z),o2e(t,a,Z),l(oo(t,"Region",Ue.kml))&>("kml-region","KML - Placemark Regions are unsupported"),{entity:a,styleEntity:d}}function i2e(e,t,n,i){i.addNodes(t.childNodes,n),i.process()}function KXt(e,t,n,i){let o=SH(e,t,n),r=Je(n);r.parentEntity=o.entity,i2e(e,t,r,i)}function JXt(e,t,n,i){let o=SH(e,t,n),r=o.entity,s=o.styleEntity,a=!1,c=t.childNodes;for(let d=0,u=c.length;d<u&&!a;d++){let m=c.item(d),p=n2e[m.localName];l(p)&&(p(e,n.entityCollection,m,r,s,r.id),a=!0)}a||(r.merge(s),_H(e,r,s))}var jXt={FlyTo:$Xt,Wait:qXt,SoundCue:soe,AnimatedUpdate:soe,TourControl:soe};function QXt(e,t,n,i){let o=Mn(t,"name",Ue.kml),r=Ca(t,"id"),s=new u9(o,r),a=oo(t,"Playlist",Ue.gx);if(a){let c=e._ellipsoid,d=a.childNodes;for(let u=0;u<d.length;u++){let m=d[u];if(m.localName){let p=jXt[m.localName];p?p(s,m,c):console.log(`Unknown KML Tour playlist entry type ${m.localName}`)}}}e._kmlTours.push(s)}function soe(e,t){gt(`KML Tour unsupported node ${t.localName}`)}function qXt(e,t){let n=Vi(t,"duration",Ue.gx);e.addPlaylistEntry(new h9(n))}function $Xt(e,t,n){let i=Vi(t,"duration",Ue.gx),o=Mn(t,"flyToMode",Ue.gx),r={kml:{}};r2e(t,r,n),o2e(t,r,n);let s=r.kml.lookAt||r.kml.camera,a=new m9(i,o,s);e.addPlaylistEntry(a)}function o2e(e,t,n){let i=oo(e,"Camera",Ue.kml);if(l(i)){let o=Vi(i,"longitude",Ue.kml)??0,r=Vi(i,"latitude",Ue.kml)??0,s=Vi(i,"altitude",Ue.kml)??0,a=Vi(i,"heading",Ue.kml)??0,c=Vi(i,"tilt",Ue.kml)??0,d=Vi(i,"roll",Ue.kml)??0,u=h.fromDegrees(o,r,s,n),m=Tc.fromDegrees(a,c-90,d);t.kml.camera=new Vk(u,m)}}function r2e(e,t,n){let i=oo(e,"LookAt",Ue.kml);if(l(i)){let o=Vi(i,"longitude",Ue.kml)??0,r=Vi(i,"latitude",Ue.kml)??0,s=Vi(i,"altitude",Ue.kml)??0,a=Vi(i,"heading",Ue.kml),c=Vi(i,"tilt",Ue.kml),d=Vi(i,"range",Ue.kml)??0;c=L.toRadians(c??0),a=L.toRadians(a??0);let u=new Gm(a,c-L.PI_OVER_TWO,d),m=h.fromDegrees(o,r,s,n);t.kml.lookAt=new d9(m,u)}}function eNt(e,t,n,i){let o=n.screenOverlayContainer;if(!l(o))return;let r=n.sourceResource,s=n.uriResolver,a=oo(t,"Icon",Ue.kml),c=yoe(a,e,r,s,!1);if(!l(c))return;let d=document.createElement("img");e._screenOverlays.push(d),d.src=c.url,d.onload=function(){let u=["position: absolute"],m=oo(t,"screenXY",Ue.kml),p=oo(t,"overlayXY",Ue.kml),b=oo(t,"size",Ue.kml),f,y,_,S,Z,V;l(b)&&(f=aT(b,"x"),y=aT(b,"y"),_=Ca(b,"xunits"),S=Ca(b,"yunits"),l(f)&&f!==-1&&f!==0&&(_==="fraction"?Z=`width: ${Math.floor(f*100)}%`:_==="pixels"&&(Z=`width: ${f}px`),u.push(Z)),l(y)&&y!==-1&&y!==0&&(S==="fraction"?V=`height: ${Math.floor(y*100)}%`:S==="pixels"&&(V=`height: ${y}px`),u.push(V))),d.style=u.join(";");let C=0,G=d.height;l(p)&&(f=aT(p,"x"),y=aT(p,"y"),_=Ca(p,"xunits"),S=Ca(p,"yunits"),l(f)&&(_==="fraction"?C=f*d.width:(_==="pixels"||_==="insetPixels")&&(C=f)),l(y)&&(S==="fraction"?G=y*d.height:(S==="pixels"||S==="insetPixels")&&(G=y))),l(m)&&(f=aT(m,"x"),y=aT(m,"y"),_=Ca(m,"xunits"),S=Ca(m,"yunits"),l(f)&&(_==="fraction"?Z=`left: calc(${Math.floor(f*100)}% - ${C}px)`:_==="pixels"?Z=`left: ${f-C}px`:_==="insetPixels"&&(Z=`right: ${f-C}px`),u.push(Z)),l(y)&&(S==="fraction"?V=`bottom: calc(${Math.floor(y*100)}% - ${G}px)`:S==="pixels"?V=`bottom: ${y-G}px`:S==="insetPixels"&&(V=`top: ${y-G}px`),u.push(V))),d.style=u.join(";")},o.appendChild(d)}function tNt(e,t,n,i){let r=SH(e,t,n).entity,s,a=!1,c=e._ellipsoid,d=gH(oo(t,"LatLonQuad",Ue.gx),c),u=Vi(t,"drawOrder",Ue.kml);if(l(d))s=goe(),s.hierarchy=new Ec(d),s.zIndex=u,r.polygon=s,a=!0;else{s=new ef,s.zIndex=u,r.rectangle=s;let f=oo(t,"LatLonBox",Ue.kml);if(l(f)){let y=Vi(f,"west",Ue.kml),_=Vi(f,"south",Ue.kml),S=Vi(f,"east",Ue.kml),Z=Vi(f,"north",Ue.kml);l(y)&&(y=L.negativePiToPi(L.toRadians(y))),l(_)&&(_=L.clampToLatitudeRange(L.toRadians(_))),l(S)&&(S=L.negativePiToPi(L.toRadians(S))),l(Z)&&(Z=L.clampToLatitudeRange(L.toRadians(Z))),s.coordinates=new re(y,_,S,Z);let V=Vi(f,"rotation",Ue.kml);if(l(V)){let C=L.toRadians(V);s.rotation=C,s.stRotation=C}}}let m=oo(t,"Icon",Ue.kml),p=yoe(m,e,n.sourceResource,n.uriResolver,!0);if(l(p)){a&>("kml-gx:LatLonQuad","KML - gx:LatLonQuad Icon does not support texture projection.");let f=Vi(m,"x",Ue.gx),y=Vi(m,"y",Ue.gx),_=Vi(m,"w",Ue.gx),S=Vi(m,"h",Ue.gx);(l(f)||l(y)||l(_)||l(S))&>("kml-groundOverlay-xywh","KML - gx:x, gx:y, gx:w, gx:h aren't supported for GroundOverlays"),s.material=p,s.material.color=UZ(t,"color",Ue.kml),s.material.transparent=!0}else s.material=UZ(t,"color",Ue.kml);let b=Mn(t,"altitudeMode",Ue.kml);l(b)?b==="absolute"?(s.height=Vi(t,"altitude",Ue.kml),s.zIndex=void 0):b!=="clampToGround"&>("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${b}`):(b=Mn(t,"altitudeMode",Ue.gx),b==="relativeToSeaFloor"?(gt("kml-altitudeMode-relativeToSeaFloor","KML - altitudeMode relativeToSeaFloor is currently not supported, treating as absolute."),s.height=Vi(t,"altitude",Ue.kml),s.zIndex=void 0):b==="clampToSeaFloor"?gt("kml-altitudeMode-clampToSeaFloor","KML - altitudeMode clampToSeaFloor is currently not supported, treating as clampToGround."):l(b)&>("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${b}`))}function s2e(e,t,n,i){e._unsupportedNode.raiseEvent(e,n.parentEntity,t,n.entityCollection,n.styleCollection,n.sourceResource,n.uriResolver),gt(`kml-unsupportedFeature-${t.nodeName}`,`KML - Unsupported feature: ${t.nodeName}`)}var cT={INTERVAL:0,EXPIRE:1,STOP:2};function xH(e){if(!l(e)||e.length===0)return"";let t=e[0];return(t==="&"||t==="?")&&(e=e.substring(1)),e}var nNt=new re,EG=new fe,aoe=new M,iNt=new h;function Toe(e,t,n,i,o,r){function s(d){return d<-L.PI_OVER_TWO?-L.PI_OVER_TWO:d>L.PI_OVER_TWO?L.PI_OVER_TWO:d}function a(d){return d>L.PI?d-L.TWO_PI:d<-L.PI?d+L.TWO_PI:d}let c=xT(e.queryParameters);if(c=c.replace(/%5B/g,"[").replace(/%5D/g,"]"),l(t)&&t._mode!==se.MORPHING){let d,u;if(o=o??nNt,l(n)&&(aoe.x=n.clientWidth*.5,aoe.y=n.clientHeight*.5,d=t.pickEllipsoid(aoe,r,iNt)),l(d)?u=r.cartesianToCartographic(d,EG):(u=re.center(o,EG),d=r.cartographicToCartesian(u)),l(i)&&!L.equalsEpsilon(i,1,L.EPSILON9)){let S=o.width*i*.5,Z=o.height*i*.5;o=new re(a(u.longitude-S),s(u.latitude-Z),a(u.longitude+S),s(u.latitude+Z))}c=c.replace("[bboxWest]",L.toDegrees(o.west).toString()),c=c.replace("[bboxSouth]",L.toDegrees(o.south).toString()),c=c.replace("[bboxEast]",L.toDegrees(o.east).toString()),c=c.replace("[bboxNorth]",L.toDegrees(o.north).toString());let m=L.toDegrees(u.longitude).toString(),p=L.toDegrees(u.latitude).toString();c=c.replace("[lookatLon]",m),c=c.replace("[lookatLat]",p),c=c.replace("[lookatTilt]",L.toDegrees(t.pitch).toString()),c=c.replace("[lookatHeading]",L.toDegrees(t.heading).toString()),c=c.replace("[lookatRange]",h.distance(t.positionWC,d)),c=c.replace("[lookatTerrainLon]",m),c=c.replace("[lookatTerrainLat]",p),c=c.replace("[lookatTerrainAlt]",u.height.toString()),r.cartesianToCartographic(t.positionWC,EG),c=c.replace("[cameraLon]",L.toDegrees(EG.longitude).toString()),c=c.replace("[cameraLat]",L.toDegrees(EG.latitude).toString()),c=c.replace("[cameraAlt]",L.toDegrees(EG.height).toString());let b=t.frustum,f=b.aspectRatio,y="",_="";if(l(f)){let S=L.toDegrees(b.fov);f>1?(y=S,_=S/f):(_=S,y=S*f)}c=c.replace("[horizFov]",y.toString()),c=c.replace("[vertFov]",_.toString())}else c=c.replace("[bboxWest]","-180"),c=c.replace("[bboxSouth]","-90"),c=c.replace("[bboxEast]","180"),c=c.replace("[bboxNorth]","90"),c=c.replace("[lookatLon]",""),c=c.replace("[lookatLat]",""),c=c.replace("[lookatRange]",""),c=c.replace("[lookatTilt]",""),c=c.replace("[lookatHeading]",""),c=c.replace("[lookatTerrainLon]",""),c=c.replace("[lookatTerrainLat]",""),c=c.replace("[lookatTerrainAlt]",""),c=c.replace("[cameraLon]",""),c=c.replace("[cameraLat]",""),c=c.replace("[cameraAlt]",""),c=c.replace("[horizFov]",""),c=c.replace("[vertFov]","");l(n)?(c=c.replace("[horizPixels]",n.clientWidth),c=c.replace("[vertPixels]",n.clientHeight)):(c=c.replace("[horizPixels]",""),c=c.replace("[vertPixels]","")),c=c.replace("[terrainEnabled]","1"),c=c.replace("[clientVersion]","1"),c=c.replace("[kmlVersion]","2.2"),c=c.replace("[clientName]","Cesium"),c=c.replace("[language]","English"),e.setQueryParameters(nu(c))}function oNt(e,t,n,i){let r=SH(e,t,n).entity,s=n.sourceResource,a=n.uriResolver,c=oo(t,"Link",Ue.kml);if(l(c)||(c=oo(t,"Url",Ue.kml)),l(c)){let d=Mn(c,"href",Ue.kml),u,m;if(l(d)){let p=d;if(d=boe(d,s,n.uriResolver),/^data:/.test(d.getUrlComponent()))/\.kmz/i.test(s.getUrlComponent())||(p=s.getDerivedResource({url:p}));else{if(p=d.clone(),u=Mn(c,"viewRefreshMode",Ue.kml),u==="onRegion"){gt("kml-refrehMode-onRegion","KML - Unsupported viewRefreshMode: onRegion");return}m=Mn(c,"viewBoundScale",Ue.kml)??1;let _=u==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",S=Mn(c,"viewFormat",Ue.kml)??_,Z=Mn(c,"httpQuery",Ue.kml);l(S)&&d.setQueryParameters(nu(xH(S))),l(Z)&&d.setQueryParameters(nu(xH(Z)));let V=e._ellipsoid;Toe(d,e.camera,e.canvas,m,e._lastCameraView.bbox,V)}let b={sourceUri:p,uriResolver:a,context:r.id,screenOverlayContainer:n.screenOverlayContainer},f=new Pa,y=moe(e,f,d,b).then(function(_){let S=e._entityCollection,Z=f.values;S.suspendEvents();for(let G=0;G<Z.length;G++){let E=Z[G];l(E.parent)||(E.parent=r,_oe(E)),S.add(E)}S.resumeEvents();let V=Mn(c,"refreshMode",Ue.kml),C=Vi(c,"refreshInterval",Ue.kml)??0;if(V==="onInterval"&&C>0||V==="onExpire"||u==="onStop"){let G=oo(_,"NetworkLinkControl",Ue.kml),E=l(G),v=Q.now(),F={id:Qn(),href:d,cookie:{},lastUpdated:v,updating:!1,entity:r,viewBoundScale:m,needsUpdate:!1,cameraUpdateTime:v},P=0;if(E&&(F.cookie=nu(Mn(G,"cookie",Ue.kml)??""),P=Vi(G,"minRefreshPeriod",Ue.kml)??0),V==="onInterval")E&&(C=Math.max(P,C)),F.refreshMode=cT.INTERVAL,F.time=C;else if(V==="onExpire"){let N;if(E&&(N=Mn(G,"expires",Ue.kml)),l(N))try{let g=Q.fromIso8601(N),R=Q.secondsDifference(g,v);R>0&&R<P&&Q.addSeconds(v,P,g),F.refreshMode=cT.EXPIRE,F.time=g}catch{gt("kml-refreshMode-onInterval-onExpire","KML - NetworkLinkControl expires is not a valid date")}else gt("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element")}else l(e.camera)?(F.refreshMode=cT.STOP,F.time=Vi(c,"viewRefreshTime",Ue.kml)??0):gt("kml-refrehMode-onStop-noCamera","A NetworkLink with viewRefreshMode=onStop requires the `camera` property to be defined.");l(F.refreshMode)&&e._networkLinks.set(F.id,F)}}).catch(function(_){gt(`An error occured during loading ${d.url}`),e._error.raiseEvent(e,_)});i.addPromise(y)}}}function rNt(e,t,n,i){let o=poe[t.localName];return l(o)?o(e,t,n,i):s2e(e,t,n,i)}function uoe(e,t,n,i,o,r,s){t.removeAll();let a=n.documentElement,c=a.localName==="Document"?a:oo(a,"Document",Ue.kml),d=Mn(c,"name",Ue.kml);l(d)||(d=gb(i.getUrlComponent())),l(e._name)||(e._name=d);let u=new kg._DeferredLoading(e),m=new Pa(e);return Promise.all($ve(e,n,m,i,!1,o)).then(function(){let p=n.documentElement;if(p.localName==="kml"){let f=p.childNodes;for(let y=0;y<f.length;y++){let _=f[y];if(l(poe[_.localName])){p=_;break}}}let b={parentEntity:void 0,entityCollection:t,styleCollection:m,sourceResource:i,uriResolver:o,context:s,screenOverlayContainer:r};return t.suspendEvents(),rNt(e,p,b,u),t.resumeEvents(),u.wait().then(function(){return n.documentElement})})}async function sNt(e,t,n,i,o){let r=qt("ThirdParty/Workers/zip-web-worker.js"),s=qt("ThirdParty/zip-module.wasm");g0({workerURI:r,wasmURI:s});let a=new MZ(new x0(n)),c=await a.getEntries(),d=[],u={},m;for(let p=0;p<c.length;p++){let b=c[p];b.directory||(/\.kml$/i.test(b.filename)&&(!l(m)||!/\//i.test(b.filename))?(l(m)&&d.push(roe(m,u)),m=b):d.push(roe(b,u)))}if(l(m)&&d.push(vXt(m,u)),await Promise.all(d),a.close(),!l(u.kml))throw new ae("KMZ file does not contain a KML document.");return u.keys=Object.keys(u),uoe(e,t,u.kml,i,u,o)}function moe(e,t,n,i){i=i??B.EMPTY_OBJECT;let o=i.sourceUri,r=i.uriResolver,s=i.context,a=i.screenOverlayContainer,c=n;if(typeof n=="string"||n instanceof ve){n=ve.createIfNeeded(n),c=n.fetchBlob(),o=o??n.clone();let d=e._resourceCredits,u=n.credits;if(l(u)){let m=u.length;for(let p=0;p<m;p++)d.push(u[p])}}else o=o??ve.DEFAULT.clone();return o=ve.createIfNeeded(o),l(a)&&(a=wn(a)),Promise.resolve(c).then(function(d){return d instanceof Blob?LXt(d).then(function(u){return u?sNt(e,t,d,o,a):WXt(d).then(function(m){m=Kve(m),m=Jve(m);let p,b;try{p=foe.parseFromString(m,"application/xml")}catch(f){b=f.toString()}if(l(b)||p.body||p.documentElement.tagName==="parsererror"){let f=l(b)?b:p.documentElement.firstChild.nodeValue;throw f||(f=p.body.innerText),new ae(f)}return uoe(e,t,p,o,r,a,s)})}):uoe(e,t,d,o,r,a,s)}).catch(function(d){return e._error.raiseEvent(e,d),console.log(d),Promise.reject(d)})}var kg=class e{constructor(t){t=t??B.EMPTY_OBJECT;let n=t.camera,i=t.canvas;this._changed=new Se,this._error=new Se,this._loading=new Se,this._refresh=new Se,this._unsupportedNode=new Se,this._clock=void 0,this._entityCollection=new Pa(this),this._name=void 0,this._isLoading=!1,this._pinBuilder=new lb,this._networkLinks=new Mt,this._entityCluster=new _u,this.canvas=i,this.camera=n,this._lastCameraView={position:l(n)?h.clone(n.positionWC):void 0,direction:l(n)?h.clone(n.directionWC):void 0,up:l(n)?h.clone(n.upWC):void 0,bbox:l(n)?n.computeViewRectangle():re.clone(re.MAX_VALUE)},this._ellipsoid=t.ellipsoid??ie.default;let o=t.credit;typeof o=="string"&&(o=new At(o)),this._credit=o,this._resourceCredits=[],this._kmlTours=[],this._screenOverlays=[]}static load(t,n){return n=n??B.EMPTY_OBJECT,new e(n).load(t,n)}get name(){return this._name}set name(t){this._name!==t&&(this._name=t,this._changed.raiseEvent(this))}get clock(){return this._clock}get entities(){return this._entityCollection}get isLoading(){return this._isLoading}get changedEvent(){return this._changed}get errorEvent(){return this._error}get loadingEvent(){return this._loading}get refreshEvent(){return this._refresh}get unsupportedNodeEvent(){return this._unsupportedNode}get show(){return this._entityCollection.show}set show(t){this._entityCollection.show=t}get clustering(){return this._entityCluster}set clustering(t){this._entityCluster=t}get credit(){return this._credit}get kmlTours(){return this._kmlTours}load(t,n){n=n??B.EMPTY_OBJECT,bs.setLoading(this,!0);let i=this._name;this._name=void 0,this._clampToGround=n.clampToGround??!1;let o=this;return moe(this,this._entityCollection,t,n).then(function(){let r,s=o._entityCollection.computeAvailability(),a=s.start,c=s.stop,d=Q.equals(a,tt.MINIMUM_VALUE),u=Q.equals(c,tt.MAXIMUM_VALUE);if(!d||!u){let p;d&&(p=new Date,p.setHours(0,0,0,0),a=Q.fromDate(p)),u&&(p=new Date,p.setHours(24,0,0,0),c=Q.fromDate(p)),r=new Yf,r.startTime=a,r.stopTime=c,r.currentTime=Q.clone(a),r.clockRange=as.LOOP_STOP,r.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,r.multiplier=Math.round(Math.min(Math.max(Q.secondsDifference(c,a)/60,1),31556900))}let m=!1;return r!==o._clock&&(o._clock=r,m=!0),i!==o._name&&(m=!0),m&&o._changed.raiseEvent(o),bs.setLoading(o,!1),o}).catch(function(r){return bs.setLoading(o,!1),o._error.raiseEvent(o,r),console.log(r),Promise.reject(r)})}destroy(){for(;this._screenOverlays.length>0;)this._screenOverlays.pop().remove()}update(t){let n=this._networkLinks;if(n.length===0)return!0;let i=Q.now(),o=this;coe.removeAll();function r(m){let p=m._children,b=p.length;for(let f=0;f<b;++f){let y=p[f];coe.set(y.id,y),r(y)}}let s=!1,a=this._lastCameraView,c=this.camera;l(c)&&!(c.positionWC.equalsEpsilon(a.position,L.EPSILON7)&&c.directionWC.equalsEpsilon(a.direction,L.EPSILON7)&&c.upWC.equalsEpsilon(a.up,L.EPSILON7))&&(a.position=h.clone(c.positionWC),a.direction=h.clone(c.directionWC),a.up=h.clone(c.upWC),a.bbox=c.computeViewRectangle(),s=!0);let d=new Mt,u=!1;return n.values.forEach(function(m){let p=m.entity;if(!coe.contains(p.id)){if(!m.updating){let b=!1;if(m.refreshMode===cT.INTERVAL?Q.secondsDifference(i,m.lastUpdated)>m.time&&(b=!0):m.refreshMode===cT.EXPIRE?Q.greaterThan(i,m.time)&&(b=!0):m.refreshMode===cT.STOP&&(s&&(m.needsUpdate=!0,m.cameraUpdateTime=i),m.needsUpdate&&Q.secondsDifference(i,m.cameraUpdateTime)>=m.time&&(b=!0)),b){r(p),m.updating=!0;let f=new Pa,y=m.href.clone();y.setQueryParameters(m.cookie);let _=o._ellipsoid??ie.default;Toe(y,o.camera,o.canvas,m.viewBoundScale,a.bbox,_),moe(o,f,y,{context:p.id}).then(aNt(o,m,f,d,y)).catch(function(S){let Z=`NetworkLink ${m.href} refresh failed: ${S}`;console.log(Z),o._error.raiseEvent(o,Z)}),u=!0}}d.set(m.id,m)}}),u&&(this._networkLinks=d,this._changed.raiseEvent(this)),!0}};function _oe(e){let t=e.parent;if(l(t)){let n=t.availability;if(l(n)){let i=e.availability;l(i)?i.intersect(n):e.availability=n}}}function aNt(e,t,n,i,o){return function(r){if(!i.contains(t.id))return;let s=!1,a=oo(r,"NetworkLinkControl",Ue.kml),c=l(a),d=0;if(c){if(l(oo(a,"Update",Ue.kml))){gt("kml-networkLinkControl-update","KML - NetworkLinkControl updates aren't supported."),t.updating=!1,i.remove(t.id);return}t.cookie=nu(Mn(a,"cookie",Ue.kml)??""),d=Vi(a,"minRefreshPeriod",Ue.kml)??0}let u=Q.now(),m=t.refreshMode;if(m===cT.INTERVAL)l(a)&&(t.time=Math.max(d,t.time));else if(m===cT.EXPIRE){let v;if(l(a)&&(v=Mn(a,"expires",Ue.kml)),l(v))try{let F=Q.fromIso8601(v),P=Q.secondsDifference(F,u);P>0&&P<d&&Q.addSeconds(u,d,F),t.time=F}catch{gt("kml-networkLinkControl-expires","KML - NetworkLinkControl expires is not a valid date"),s=!0}else gt("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element"),s=!0}let p=t.entity,b=e._entityCollection,f=n.values;function y(v){b.remove(v);let F=v._children,P=F.length;for(let N=0;N<P;++N)y(F[N])}b.suspendEvents();let _=b.values.slice(),S;for(S=0;S<_.length;++S){let v=_[S];v.parent===p&&(v.parent=void 0,y(v))}for(b.resumeEvents(),b.suspendEvents(),S=0;S<f.length;S++){let v=f[S];l(v.parent)||(v.parent=p,_oe(v)),b.add(v)}b.resumeEvents(),s?i.remove(t.id):t.lastUpdated=u;let Z=b.computeAvailability(),V=Z.start,C=Z.stop,G=Q.equals(V,tt.MINIMUM_VALUE),E=Q.equals(C,tt.MAXIMUM_VALUE);if(!G||!E){let v=e._clock;(v.startTime!==V||v.stopTime!==C)&&(v.startTime=V,v.stopTime=C,e._changed.raiseEvent(e))}t.updating=!1,t.needsUpdate=!1,e._refresh.raiseEvent(e,o.getUrlComponent(!0))}}var coe=new Mt,hoe=class{constructor(){this.author={name:void 0,uri:void 0,email:void 0},this.link={href:void 0,hreflang:void 0,rel:void 0,type:void 0,title:void 0,length:void 0},this.address=void 0,this.phoneNumber=void 0,this.snippet=void 0,this.extendedData=void 0}};kg._DeferredLoading=loe;kg._getTimestamp=Tn;var DZ=kg;var PGo=x(T(),1);function b9(){ge.throwInstantiationError()}b9.prototype.update=ge.throwInstantiationError;b9.prototype.getBoundingSphere=ge.throwInstantiationError;b9.prototype.isDestroyed=ge.throwInstantiationError;b9.prototype.destroy=ge.throwInstantiationError;var Soe=b9;var mAo=x(T(),1);var Zoe=32,cNt="http://www.opengis.net/kml/2.2",Hf="http://www.google.com/kml/ext/2.2",lNt="http://www.w3.org/2000/xmlns/";function ZH(e){this._files={},this._promises=[],this._count=0,this._modelCallback=e}var dNt=/^data:image\/([^,;]+)/;ZH.prototype.texture=function(e){let t=this,n;if(typeof e=="string"||e instanceof ve){if(e=ve.createIfNeeded(e),!e.isDataUri)return e.url;let i=e.url.match(dNt);n=`texture_${++this._count}`,l(i)&&(n+=`.${i[1]}`);let o=e.fetchBlob().then(function(r){t._files[n]=r});return this._promises.push(o),n}if(e instanceof HTMLCanvasElement){n=`texture_${++this._count}.png`;let i=new Promise(o=>{e.toBlob(function(r){t._files[n]=r,o()})});return this._promises.push(i),n}return""};function uNt(e,t){return function(n){e._files[t]=n}}ZH.prototype.model=function(e,t){let n=this._modelCallback;if(!l(n))throw new ae("Encountered a model entity while exporting to KML, but no model callback was supplied.");let i={},o=n(e,t,i);for(let r in i)if(i.hasOwnProperty(r)){let s=Promise.resolve(i[r]);this._promises.push(s),s.then(uNt(this,r))}return o};Object.defineProperties(ZH.prototype,{promise:{get:function(){return Promise.all(this._promises)}},files:{get:function(){return this._files}}});function VH(e){this._time=e}VH.prototype.get=function(e,t,n){let i;return l(e)&&(i=l(e.getValue)?e.getValue(this._time,n):e),i??t};VH.prototype.getColor=function(e,t){let n=this.get(e,t);if(l(n))return BZ(n)};VH.prototype.getMaterialType=function(e){if(l(e))return e.getType(this._time)};function Voe(){this._ids={},this._styles={},this._count=0}Voe.prototype.get=function(e){let t=this._ids,n=e.innerHTML;if(l(t[n]))return t[n];let i=`style-${++this._count}`;return e.setAttribute("id",i),i=`#${i}`,t[n]=i,this._styles[n]=e,i};Voe.prototype.save=function(e){let t=this._styles,n=e.childNodes[0];for(let i in t)t.hasOwnProperty(i)&&e.insertBefore(t[i],n)};function l2e(){this._ids={}}l2e.prototype.get=function(e){if(!l(e))return this.get(Qn());let t=this._ids;return l(t[e])?`${e.toString()}-${++t[e]}`:(t[e]=0,e)};function Coe(e){e=e??B.EMPTY_OBJECT;let t=e.entities,n=e.kmz??!1,i=Coe._createState(e),o=t.values.filter(function(d){return!l(d.parent)}),r=i.kmlDoc,s=r.documentElement;s.setAttributeNS(lNt,"xmlns:gx",Hf);let a=r.createElement("Document");s.appendChild(a),u2e(i,a,o),i.styleCache.save(a);let c=i.externalFileHandler;return c.promise.then(function(){let u=new XMLSerializer().serializeToString(i.kmlDoc);return n?mNt(u,c.files):{kml:u,externalFiles:c.files}})}async function mNt(e,t){let n=qt("ThirdParty/Workers/zip-web-worker.js"),i=qt("ThirdParty/zip-module.wasm");g0({workerURI:n,wasmURI:i});let o=new fG("application/vnd.google-earth.kmz"),r=new o9(o);await r.add("doc.kml",new Yk(e));let s=Object.keys(t);return await d2e(r,s,t,0),await r.close(),{kmz:await o.getData()}}async function d2e(e,t,n,i){if(t.length===i)return;let o=t[i];return await e.add(o,new x0(n[o])),d2e(e,t,n,i+1)}Coe._createState=function(e){let t=e.entities,n=new Voe,i=t.computeAvailability(),o=l(e.time)?e.time:i.start,r=e.defaultAvailability??i,s=e.sampleDuration??60;r.start===tt.MINIMUM_VALUE?r.stop===tt.MAXIMUM_VALUE?r=new Vn:Q.addSeconds(r.stop,-10*s,r.start):r.stop===tt.MAXIMUM_VALUE&&Q.addSeconds(r.start,10*s,r.stop);let a=new ZH(e.modelCallback);return{kmlDoc:document.implementation.createDocument(cNt,"kml"),ellipsoid:e.ellipsoid??ie.default,idManager:new l2e,styleCache:n,externalFileHandler:a,time:o,valueGetter:new VH(o),sampleDuration:s,defaultAvailability:new fs([r])}};function u2e(e,t,n){let i=e.kmlDoc,o=e.styleCache,r=e.valueGetter,s=e.idManager,a=n.length,c,d,u;for(let m=0;m<a;++m){let p=n[m];c=[],d=[],u=[],hNt(e,p,d,u),fNt(e,p.polyline,d,u),c2e(e,p.rectangle,d,u,c),c2e(e,p.polygon,d,u,c),yNt(e,p,p.model,d,u);let b,f=p.availability;l(f)&&(b=i.createElement("TimeSpan"),Q.equals(f.start,tt.MINIMUM_VALUE)||b.appendChild(Cn(i,"begin",Q.toIso8601(f.start))),Q.equals(f.stop,tt.MAXIMUM_VALUE)||b.appendChild(Cn(i,"end",Q.toIso8601(f.stop))));for(let S=0;S<c.length;++S){let Z=c[S];Z.setAttribute("id",s.get(p.id)),Z.appendChild(Cn(i,"name",p.name)),Z.appendChild(Cn(i,"visibility",p.show)),Z.appendChild(Cn(i,"description",p.description)),l(b)&&Z.appendChild(b),t.appendChild(Z)}let y=d.length;if(y>0){let S=i.createElement("Placemark");S.setAttribute("id",s.get(p.id));let Z=p.name,V=p.label;if(l(V)){let G=i.createElement("LabelStyle"),E=r.get(V.text);Z=l(E)&&E.length>0?E:Z;let v=r.getColor(V.fillColor);l(v)&&(G.appendChild(Cn(i,"color",v)),G.appendChild(Cn(i,"colorMode","normal")));let F=r.get(V.scale);l(F)&&G.appendChild(Cn(i,"scale",F)),u.push(G)}S.appendChild(Cn(i,"name",Z)),S.appendChild(Cn(i,"visibility",p.show)),S.appendChild(Cn(i,"description",p.description)),l(b)&&S.appendChild(b),t.appendChild(S);let C=u.length;if(C>0){let G=i.createElement("Style");for(let E=0;E<C;++E)G.appendChild(u[E]);S.appendChild(Cn(i,"styleUrl",o.get(G)))}if(d.length===1)S.appendChild(d[0]);else if(d.length>1){let G=i.createElement("MultiGeometry");for(let E=0;E<y;++E)G.appendChild(d[E]);S.appendChild(G)}}let _=p._children;if(_.length>0){let S=i.createElement("Folder");S.setAttribute("id",s.get(p.id)),S.appendChild(Cn(i,"name",p.name)),S.appendChild(Cn(i,"visibility",p.show)),S.appendChild(Cn(i,"description",p.description)),t.appendChild(S),u2e(e,S,_)}}}var Jd=new h,ld=new fe,zf=new Q;function hNt(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=e.valueGetter,a=t.billboard??t.point;if(!l(a)&&!l(t.path))return;let c=t.position;if(!c.isConstant){m2e(e,t,a,n,i);return}s.get(c,void 0,Jd);let d=Cn(o,"coordinates",OZ(Jd,r)),u=o.createElement("Point"),m=o.createElement("altitudeMode");m.appendChild(zZ(e,a.heightReference)),u.appendChild(m),u.appendChild(d),n.push(u);let p=a instanceof sl?f2e(e,a):h2e(e,a);i.push(p)}function m2e(e,t,n,i,o){let r=e.kmlDoc,s=e.ellipsoid,a=e.valueGetter,c,d=t.position,u=!0;d instanceof uc?(c=d.intervals,u=!1):c=t.availability??e.defaultAvailability;let m=n instanceof Eb,p,b,f,y=[];for(p=0;p<c.length;++p){let S=c.get(p),Z=u?d:S.data,V=r.createElement("altitudeMode");Z instanceof Qp?(Z=Z._value,V.appendChild(zZ(e,rt.CLAMP_TO_GROUND))):l(n)?V.appendChild(zZ(e,n.heightReference)):V.appendChild(zZ(e,rt.NONE));let C=[],G=[];if(Z.isConstant){a.get(Z,void 0,Jd);let v=Cn(r,"coordinates",OZ(Jd,s));C.push(Q.toIso8601(S.start)),G.push(v),C.push(Q.toIso8601(S.stop)),G.push(v)}else if(Z instanceof mc)for(f=Z._property._times,b=0;b<f.length;++b)C.push(Q.toIso8601(f[b])),Z.getValueInReferenceFrame(f[b],Ui.FIXED,Jd),G.push(OZ(Jd,s));else if(Z instanceof Yu){f=Z._times;let v=Z._values;for(b=0;b<f.length;++b)C.push(Q.toIso8601(f[b])),h.fromArray(v,b*3,Jd),G.push(OZ(Jd,s))}else{let v=e.sampleDuration;S.start.clone(zf),S.isStartIncluded||Q.addSeconds(zf,v,zf);let F=S.stop;for(;Q.lessThan(zf,F);)Z.getValue(zf,Jd),C.push(Q.toIso8601(zf)),G.push(OZ(Jd,s)),Q.addSeconds(zf,v,zf);S.isStopIncluded&&Q.equals(zf,F)&&(Z.getValue(zf,Jd),C.push(Q.toIso8601(zf)),G.push(OZ(Jd,s)))}let E=r.createElementNS(Hf,"Track");E.appendChild(V);for(let v=0;v<C.length;++v){let F=Cn(r,"when",C[v]),P=Cn(r,"coord",G[v],Hf);E.appendChild(F),E.appendChild(P)}m&&E.appendChild(p2e(e,n)),y.push(E)}if(y.length===1)i.push(y[0]);else if(y.length>1){let S=r.createElementNS(Hf,"MultiTrack");for(p=0;p<y.length;++p)S.appendChild(y[p]);i.push(S)}if(l(n)&&!m){let S=n instanceof sl?f2e(e,n):h2e(e,n);o.push(S)}let _=t.path;if(l(_)){let S=a.get(_.width),Z=_.material;if(l(Z)||l(S)){let V=r.createElement("LineStyle");l(S)&&V.appendChild(Cn(r,"width",S)),Roe(e,Z,V),o.push(V)}}}function h2e(e,t){let n=e.kmlDoc,i=e.valueGetter,o=n.createElement("IconStyle"),r=i.getColor(t.color);l(r)&&(o.appendChild(Cn(n,"color",r)),o.appendChild(Cn(n,"colorMode","normal")));let s=i.get(t.pixelSize);return l(s)&&o.appendChild(Cn(n,"scale",s/Zoe)),o}function f2e(e,t){let n=e.kmlDoc,i=e.valueGetter,o=e.externalFileHandler,r=n.createElement("IconStyle"),s=i.get(t.image);if(l(s)){s=o.texture(s);let p=n.createElement("Icon");p.appendChild(Cn(n,"href",s));let b=i.get(t.imageSubRegion);l(b)&&(p.appendChild(Cn(n,"x",b.x,Hf)),p.appendChild(Cn(n,"y",b.y,Hf)),p.appendChild(Cn(n,"w",b.width,Hf)),p.appendChild(Cn(n,"h",b.height,Hf))),r.appendChild(p)}let a=i.getColor(t.color);l(a)&&(r.appendChild(Cn(n,"color",a)),r.appendChild(Cn(n,"colorMode","normal")));let c=i.get(t.scale);l(c)&&r.appendChild(Cn(n,"scale",c));let d=i.get(t.pixelOffset);if(l(d)){c=c??1,M.divideByScalar(d,c,d);let p=i.get(t.width,Zoe),b=i.get(t.height,Zoe),f=i.get(t.horizontalOrigin,Di.CENTER);f===Di.CENTER?d.x-=p*.5:f===Di.RIGHT&&(d.x-=p);let y=i.get(t.verticalOrigin,zn.CENTER);y===zn.TOP?d.y+=b:y===zn.CENTER&&(d.y+=b*.5);let _=n.createElement("hotSpot");_.setAttribute("x",-d.x),_.setAttribute("y",d.y),_.setAttribute("xunits","pixels"),_.setAttribute("yunits","pixels"),r.appendChild(_)}let u=i.get(t.rotation),m=i.get(t.alignedAxis);return l(u)&&h.equals(h.UNIT_Z,m)&&(u=L.toDegrees(-u),u===0&&(u=360),r.appendChild(Cn(n,"heading",u))),r}function fNt(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=e.valueGetter;if(!l(t))return;let a=o.createElement("LineString"),c=o.createElement("altitudeMode"),d=s.get(t.clampToGround,!1),u;d?(a.appendChild(Cn(o,"tessellate",!0)),u=o.createTextNode("clampToGround")):u=o.createTextNode("absolute"),c.appendChild(u),a.appendChild(c);let m=t.positions,p=s.get(m),b=Cn(o,"coordinates",OZ(p,r));a.appendChild(b);let f=s.get(t.zIndex);d&&l(f)&&a.appendChild(Cn(o,"drawOrder",f,Hf)),n.push(a);let y=o.createElement("LineStyle"),_=s.get(t.width);l(_)&&y.appendChild(Cn(o,"width",_)),Roe(e,t.material,y),i.push(y)}function pNt(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=o.get(t.height,0);n>0&&(r=n);let s=t.coordinates,a=o.get(s),c=[],d=[re.northeast,re.southeast,re.southwest,re.northwest];for(let b=0;b<4;++b)d[b](a,ld),c.push(`${L.toDegrees(ld.longitude)},${L.toDegrees(ld.latitude)},${r}`);let u=Cn(i,"coordinates",c.join(" ")),m=i.createElement("outerBoundaryIs"),p=i.createElement("LinearRing");return p.appendChild(u),m.appendChild(p),[m]}function a2e(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=[],a=t.length;for(let u=0;u<a;++u)fe.fromCartesian(t[u],r,ld),s.push(`${L.toDegrees(ld.longitude)},${L.toDegrees(ld.latitude)},${i?ld.height:n}`);let c=Cn(o,"coordinates",s.join(" ")),d=o.createElement("LinearRing");return d.appendChild(c),d}function bNt(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=o.get(t.height,0),s=o.get(t.perPositionHeight,!1);!s&&n>0&&(r=n);let a=[],c=t.hierarchy,d=o.get(c),u=Array.isArray(d)?d:d.positions,m=i.createElement("outerBoundaryIs");m.appendChild(a2e(e,u,r,s)),a.push(m);let p=d.holes;if(l(p)){let b=p.length;for(let f=0;f<b;++f){let y=i.createElement("innerBoundaryIs");y.appendChild(a2e(e,p[f].positions,r,s)),a.push(y)}}return a}function c2e(e,t,n,i,o){let r=e.kmlDoc,s=e.valueGetter;if(!l(t))return;let a=t instanceof ef;if(a&&s.getMaterialType(t.material)==="Image"){gNt(e,t,o);return}let c=r.createElement("Polygon"),d=s.get(t.extrudedHeight,0);d>0&&c.appendChild(Cn(r,"extrude",!0));let u=a?pNt(e,t,d):bNt(e,t,d),m=u.length;for(let _=0;_<m;++_)c.appendChild(u[_]);let p=r.createElement("altitudeMode");p.appendChild(zZ(e,t.heightReference)),c.appendChild(p),n.push(c);let b=r.createElement("PolyStyle"),f=s.get(t.fill,!1);f&&b.appendChild(Cn(r,"fill",f)),Roe(e,t.material,b);let y=s.get(t.outline,!1);if(y){b.appendChild(Cn(r,"outline",y));let _=r.createElement("LineStyle"),S=s.get(t.outlineWidth,1);_.appendChild(Cn(r,"width",S));let Z=s.getColor(t.outlineColor,U.BLACK);_.appendChild(Cn(r,"color",Z)),_.appendChild(Cn(r,"colorMode","normal")),i.push(_)}i.push(b)}function gNt(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=e.externalFileHandler,s=i.createElement("GroundOverlay"),a=i.createElement("altitudeMode");a.appendChild(zZ(e,t.heightReference)),s.appendChild(a);let c=o.get(t.height);l(c)&&s.appendChild(Cn(i,"altitude",c));let d=o.get(t.coordinates),u=i.createElement("LatLonBox");u.appendChild(Cn(i,"north",L.toDegrees(d.north))),u.appendChild(Cn(i,"south",L.toDegrees(d.south))),u.appendChild(Cn(i,"east",L.toDegrees(d.east))),u.appendChild(Cn(i,"west",L.toDegrees(d.west))),s.appendChild(u);let m=o.get(t.material),p=r.texture(m.image),b=i.createElement("Icon");b.appendChild(Cn(i,"href",p)),s.appendChild(b);let f=m.color;l(f)&&s.appendChild(Cn(i,"color",BZ(m.color))),n.push(s)}function p2e(e,t){let n=e.kmlDoc,i=e.valueGetter,o=e.externalFileHandler,r=n.createElement("Model"),s=i.get(t.scale);if(l(s)){let d=n.createElement("scale");d.appendChild(Cn(n,"x",s)),d.appendChild(Cn(n,"y",s)),d.appendChild(Cn(n,"z",s)),r.appendChild(d)}let a=n.createElement("Link"),c=o.model(t,e.time);return a.appendChild(Cn(n,"href",c)),r.appendChild(a),r}function yNt(e,t,n,i,o){let r=e.kmlDoc,s=e.ellipsoid,a=e.valueGetter;if(!l(n))return;let c=t.position;if(!c.isConstant){m2e(e,t,n,i,o);return}let d=p2e(e,n),u=r.createElement("altitudeMode");u.appendChild(zZ(e,n.heightReference)),d.appendChild(u),a.get(c,void 0,Jd),fe.fromCartesian(Jd,s,ld);let m=r.createElement("Location");m.appendChild(Cn(r,"longitude",L.toDegrees(ld.longitude))),m.appendChild(Cn(r,"latitude",L.toDegrees(ld.latitude))),m.appendChild(Cn(r,"altitude",ld.height)),d.appendChild(m),i.push(d)}function Roe(e,t,n){let i=e.kmlDoc,o=e.valueGetter;if(!l(t))return;let r=o.get(t);if(!l(r))return;let s,a=o.getMaterialType(t),c,d;switch(a){case"Image":s=BZ(U.WHITE);break;case"Color":case"Grid":case"PolylineGlow":case"PolylineArrow":case"PolylineDash":s=BZ(r.color);break;case"PolylineOutline":s=BZ(r.color),c=BZ(r.outlineColor),d=r.outlineWidth,n.appendChild(Cn(i,"outerColor",c,Hf)),n.appendChild(Cn(i,"outerWidth",d,Hf));break;case"Stripe":s=BZ(r.oddColor);break}l(s)&&(n.appendChild(Cn(i,"color",s)),n.appendChild(Cn(i,"colorMode","normal")))}function zZ(e,t){let n=e.kmlDoc,o=e.valueGetter.get(t,rt.NONE),r;switch(o){case rt.NONE:r=n.createTextNode("absolute");break;case rt.CLAMP_TO_GROUND:r=n.createTextNode("clampToGround");break;case rt.RELATIVE_TO_GROUND:r=n.createTextNode("relativeToGround");break}return r}function OZ(e,t){Array.isArray(e)||(e=[e]);let n=e.length,i=[];for(let o=0;o<n;++o)fe.fromCartesian(e[o],t,ld),i.push(`${L.toDegrees(ld.longitude)},${L.toDegrees(ld.latitude)},${ld.height}`);return i.join(" ")}function Cn(e,t,n,i){n=n??"",typeof n=="boolean"&&(n=n?"1":"0");let o=l(i)?e.createElementNS(i,t):e.createElement(t),r=n==="string"&&n.indexOf("<")!==-1?e.createCDATASection(n):e.createTextNode(n);return o.appendChild(r),o}function BZ(e){let t="",n=e.toBytes();for(let i=3;i>=0;--i)t+=n[i]<16?`0${n[i].toString(16)}`:n[i].toString(16);return t}var Goe=Coe;var fAo=x(T(),1),g9=`uniform sampler2D u_noiseTexture; uniform vec3 u_noiseTextureDimensions; uniform float u_noiseDetail; in vec2 v_offset; in vec3 v_maximumSize; in vec4 v_color; in float v_slice; in float v_brightness; float wrap(float value, float rangeLength) { if(value < 0.0) { float absValue = abs(value); float modValue = mod(absValue, rangeLength); return mod(rangeLength - modValue, rangeLength); } return mod(value, rangeLength); } vec3 wrapVec(vec3 value, float rangeLength) { return vec3(wrap(value.x, rangeLength), wrap(value.y, rangeLength), wrap(value.z, rangeLength)); } vec2 voxelToUV(vec3 voxelIndex) { float textureSliceWidth = u_noiseTextureDimensions.x; float noiseTextureRows = u_noiseTextureDimensions.y; float inverseNoiseTextureRows = u_noiseTextureDimensions.z; float textureSliceWidthSquared = textureSliceWidth * textureSliceWidth; vec2 inverseNoiseTextureDimensions = vec2(noiseTextureRows / textureSliceWidthSquared, inverseNoiseTextureRows / textureSliceWidth); vec3 wrappedIndex = wrapVec(voxelIndex, textureSliceWidth); float column = mod(wrappedIndex.z, textureSliceWidth * inverseNoiseTextureRows); float row = floor(wrappedIndex.z / textureSliceWidth * noiseTextureRows); float xPixelCoord = wrappedIndex.x + column * textureSliceWidth; float yPixelCoord = wrappedIndex.y + row * textureSliceWidth; return vec2(xPixelCoord, yPixelCoord) * inverseNoiseTextureDimensions; } // Interpolate a voxel with its neighbor (along the positive X-axis) vec4 lerpSamplesX(vec3 voxelIndex, float x) { vec2 uv0 = voxelToUV(voxelIndex); vec2 uv1 = voxelToUV(voxelIndex + vec3(1.0, 0.0, 0.0)); vec4 sample0 = texture(u_noiseTexture, uv0); vec4 sample1 = texture(u_noiseTexture, uv1); return mix(sample0, sample1, x); } vec4 sampleNoiseTexture(vec3 position) { float textureSliceWidth = u_noiseTextureDimensions.x; vec3 recenteredPos = position + vec3(textureSliceWidth / 2.0); vec3 lerpValue = fract(recenteredPos); vec3 voxelIndex = floor(recenteredPos); vec4 xLerp00 = lerpSamplesX(voxelIndex, lerpValue.x); vec4 xLerp01 = lerpSamplesX(voxelIndex + vec3(0.0, 0.0, 1.0), lerpValue.x); vec4 xLerp10 = lerpSamplesX(voxelIndex + vec3(0.0, 1.0, 0.0), lerpValue.x); vec4 xLerp11 = lerpSamplesX(voxelIndex + vec3(0.0, 1.0, 1.0), lerpValue.x); vec4 yLerp0 = mix(xLerp00, xLerp10, lerpValue.y); vec4 yLerp1 = mix(xLerp01, xLerp11, lerpValue.y); return mix(yLerp0, yLerp1, lerpValue.z); } // Intersection with a unit sphere with radius 0.5 at center (0, 0, 0). bool intersectSphere(vec3 origin, vec3 dir, float slice, out vec3 point, out vec3 normal) { float A = dot(dir, dir); float B = dot(origin, dir); float C = dot(origin, origin) - 0.25; float discriminant = (B * B) - (A * C); if(discriminant < 0.0) { return false; } float root = sqrt(discriminant); float t = (-B - root) / A; if(t < 0.0) { t = (-B + root) / A; } point = origin + t * dir; if(slice >= 0.0) { point.z = (slice / 2.0) - 0.5; if(length(point) > 0.5) { return false; } } normal = normalize(point); point -= czm_epsilon2 * normal; return true; } // Transforms the ray origin and direction into unit sphere space, // then transforms the result back into the ellipsoid's space. bool intersectEllipsoid(vec3 origin, vec3 dir, vec3 center, vec3 scale, float slice, out vec3 point, out vec3 normal) { if(scale.x <= 0.01 || scale.y < 0.01 || scale.z < 0.01) { return false; } vec3 o = (origin - center) / scale; vec3 d = dir / scale; vec3 p, n; bool intersected = intersectSphere(o, d, slice, p, n); if(intersected) { point = (p * scale) + center; normal = n; } return intersected; } // Assume that if phase shift is being called for octave i, // the frequency is of i - 1. This saves us from doing extra // division / multiplication operations. vec2 phaseShift2D(vec2 p, vec2 freq) { return (czm_pi / 2.0) * sin(freq.yx * p.yx); } vec2 phaseShift3D(vec3 p, vec2 freq) { return phaseShift2D(p.xy, freq) + czm_pi * vec2(sin(freq.x * p.z)); } // The cloud texture function derived from Gardner's 1985 paper, // "Visual Simulation of Clouds." // https://www.cs.drexel.edu/~david/Classes/Papers/p297-gardner.pdf const float T0 = 0.6; // contrast of the texture pattern const float k = 0.1; // computed to produce a maximum value of 1 const float C0 = 0.8; // coefficient const float FX0 = 0.6; // frequency X const float FY0 = 0.6; // frequency Y const int octaves = 5; float T(vec3 point) { vec2 sum = vec2(0.0); float Ci = C0; vec2 FXY = vec2(FX0, FY0); vec2 PXY = vec2(0.0); for(int i = 1; i <= octaves; i++) { PXY = phaseShift3D(point, FXY); Ci *= 0.707; FXY *= 2.0; vec2 sinTerm = sin(FXY * point.xy + PXY); sum += Ci * sinTerm + vec2(T0); } return k * sum.x * sum.y; } const float a = 0.5; // fraction of surface reflection due to ambient or scattered light, const float t = 0.4; // fraction of texture shading const float s = 0.25; // fraction of specular reflection float I(float Id, float Is, float It) { return (1.0 - a) * ((1.0 - t) * ((1.0 - s) * Id + s * Is) + t * It) + a; } const vec3 lightDir = normalize(vec3(0.2, -1.0, 0.7)); vec4 drawCloud(vec3 rayOrigin, vec3 rayDir, vec3 cloudCenter, vec3 cloudScale, float cloudSlice, float brightness) { vec3 cloudPoint, cloudNormal; if(!intersectEllipsoid(rayOrigin, rayDir, cloudCenter, cloudScale, cloudSlice, cloudPoint, cloudNormal)) { return vec4(0.0); } float Id = clamp(dot(cloudNormal, -lightDir), 0.0, 1.0); // diffuse reflection float Is = max(pow(dot(-lightDir, -rayDir), 2.0), 0.0); // specular reflection float It = T(cloudPoint); // texture function float intensity = I(Id, Is, It); vec3 color = vec3(intensity * clamp(brightness, 0.1, 1.0)); vec4 noise = sampleNoiseTexture(u_noiseDetail * cloudPoint); float W = noise.x; float W2 = noise.y; float W3 = noise.z; // The dot product between the cloud's normal and the ray's direction is greatest // in the center of the ellipsoid's surface. It decreases towards the edge. // Thus, it is used to blur the areas leading to the edges of the ellipsoid, // so that no harsh lines appear. // The first (and biggest) layer of worley noise is then subtracted from this. // The final result is scaled up so that the base cloud is not too translucent. float ndDot = clamp(dot(cloudNormal, -rayDir), 0.0, 1.0); float TR = pow(ndDot, 3.0) - W; // translucency TR *= 1.3; // Subtracting the second and third layers of worley noise is more complicated. // If these layers of noise were simply subtracted from the current translucency, // the shape derived from the first layer of noise would be completely deleted. // The erosion of this noise should thus be constricted to the edges of the cloud. // However, because the edges of the ellipsoid were already blurred away, mapping // the noise to (1.0 - ndDot) will have no impact on most of the cloud's appearance. // The value of (0.5 - ndDot) provides the best compromise. float minusDot = 0.5 - ndDot; // Even with the previous calculation, subtracting the second layer of wnoise // erode too much of the cloud. The addition of it, however, will detailed // volume to the cloud. As long as the noise is only added and not subtracted, // the results are aesthetically pleasing. // The minusDot product is mapped in a way that it is larger at the edges of // the ellipsoid, so a subtraction and min operation are used instead of // an addition and max one. TR -= min(minusDot * W2, 0.0); // The third level of worley noise is subtracted from the result, with some // modifications. First, a scalar is added to minusDot so that the noise // starts affecting the shape farther away from the center of the ellipsoid's // surface. Then, it is scaled down so its impact is not too intense. TR -= 0.8 * (minusDot + 0.25) * W3; // The texture function's shading does not correlate with the shape of the cloud // produced by the layers of noise, so an extra shading scalar is calculated. // The darkest areas of the cloud are assigned to be where the noise erodes // the cloud the most. This is then interpolated based on the translucency // and the diffuse shading term of that point in the cloud. float shading = mix(1.0 - 0.8 * W * W, 1.0, Id * TR); // To avoid values that are too dark, this scalar is increased by a small amount // and clamped so it never goes to zero. shading = clamp(shading + 0.2, 0.3, 1.0); // Finally, the contrast of the cloud's color is increased. vec3 finalColor = mix(vec3(0.5), shading * color, 1.15); return vec4(finalColor, clamp(TR, 0.0, 1.0)) * v_color; } void main() { #ifdef DEBUG_BILLBOARDS out_FragColor = vec4(0.0, 0.5, 0.5, 1.0); #endif // To avoid calculations with high values, // we raycast from an arbitrarily smaller space. vec2 coordinate = v_maximumSize.xy * v_offset; vec3 ellipsoidScale = 0.82 * v_maximumSize; vec3 ellipsoidCenter = vec3(0.0); float zOffset = max(ellipsoidScale.z - 10.0, 0.0); vec3 eye = vec3(0, 0, -10.0 - zOffset); vec3 rayDir = normalize(vec3(coordinate, 1.0) - eye); vec3 rayOrigin = eye; #ifdef DEBUG_ELLIPSOIDS vec3 point, normal; if(intersectEllipsoid(rayOrigin, rayDir, ellipsoidCenter, ellipsoidScale, v_slice, point, normal)) { out_FragColor = v_brightness * v_color; } #else #ifndef DEBUG_BILLBOARDS vec4 cloud = drawCloud(rayOrigin, rayDir, ellipsoidCenter, ellipsoidScale, v_slice, v_brightness); if(cloud.w < 0.01) { discard; } out_FragColor = cloud; #endif #endif } `;var bAo=x(T(),1),y9=`#ifdef INSTANCED in vec2 direction; #endif in vec4 positionHighAndScaleX; in vec4 positionLowAndScaleY; in vec4 packedAttribute0; in vec4 packedAttribute1; in vec4 color; out vec2 v_offset; out vec3 v_maximumSize; out vec4 v_color; out float v_slice; out float v_brightness; void main() { // Unpack attributes. vec3 positionHigh = positionHighAndScaleX.xyz; vec3 positionLow = positionLowAndScaleY.xyz; vec2 scale = vec2(positionHighAndScaleX.w, positionLowAndScaleY.w); float show = packedAttribute0.x; float brightness = packedAttribute0.y; vec2 coordinates = packedAttribute0.wz; vec3 maximumSize = packedAttribute1.xyz; float slice = packedAttribute1.w; #ifdef INSTANCED vec2 dir = direction; #else vec2 dir = coordinates; #endif vec2 offset = dir - vec2(0.5, 0.5); vec2 scaledOffset = scale * offset; vec4 p = czm_translateRelativeToEye(positionHigh, positionLow); vec4 positionEC = czm_modelViewRelativeToEye * p; positionEC.xy += scaledOffset; positionEC.xyz *= show; gl_Position = czm_projection * positionEC; v_offset = offset; v_maximumSize = maximumSize; v_color = color; v_slice = slice; v_brightness = brightness; } `;var yAo=x(T(),1),x9=`uniform vec3 u_noiseTextureDimensions; uniform float u_noiseDetail; uniform vec3 u_noiseOffset; in vec2 v_position; float wrap(float value, float rangeLength) { if(value < 0.0) { float absValue = abs(value); float modValue = mod(absValue, rangeLength); return mod(rangeLength - modValue, rangeLength); } return mod(value, rangeLength); } vec3 wrapVec(vec3 value, float rangeLength) { return vec3(wrap(value.x, rangeLength), wrap(value.y, rangeLength), wrap(value.z, rangeLength)); } vec3 random3(vec3 p) { float dot1 = dot(p, vec3(127.1, 311.7, 932.8)); float dot2 = dot(p, vec3(269.5, 183.3, 421.4)); return fract(vec3(sin(dot1 - dot2), cos(dot1 * dot2), dot1 * dot2)); } // Frequency corresponds to cell size. // The higher the frequency, the smaller the cell size. vec3 getWorleyCellPoint(vec3 centerCell, vec3 offset, float freq) { float textureSliceWidth = u_noiseTextureDimensions.x; vec3 cell = centerCell + offset; cell = wrapVec(cell, textureSliceWidth / u_noiseDetail); cell += floor(u_noiseOffset / u_noiseDetail); vec3 p = offset + random3(cell); return p; } float worleyNoise(vec3 p, float freq) { vec3 centerCell = floor(p * freq); vec3 pointInCell = fract(p * freq); float shortestDistance = 1000.0; for(float z = -1.0; z <= 1.0; z++) { for(float y = -1.0; y <= 1.0; y++) { for(float x = -1.0; x <= 1.0; x++) { vec3 offset = vec3(x, y, z); vec3 point = getWorleyCellPoint(centerCell, offset, freq); float distance = length(pointInCell - point); if(distance < shortestDistance) { shortestDistance = distance; } } } } return shortestDistance; } const float MAX_FBM_ITERATIONS = 10.0; float worleyFBMNoise(vec3 p, float octaves, float scale) { float noise = 0.0; float freq = 1.0; float persistence = 0.625; for(float i = 0.0; i < MAX_FBM_ITERATIONS; i++) { if(i >= octaves) { break; } noise += worleyNoise(p * scale, freq * scale) * persistence; persistence *= 0.5; freq *= 2.0; } return noise; } void main() { float textureSliceWidth = u_noiseTextureDimensions.x; float inverseNoiseTextureRows = u_noiseTextureDimensions.z; float x = mod(v_position.x, textureSliceWidth); float y = mod(v_position.y, textureSliceWidth); float sliceRow = floor(v_position.y / textureSliceWidth); float z = floor(v_position.x / textureSliceWidth) + sliceRow * inverseNoiseTextureRows * textureSliceWidth; vec3 position = vec3(x, y, z); position /= u_noiseDetail; float worley0 = clamp(worleyFBMNoise(position, 3.0, 1.0), 0.0, 1.0); float worley1 = clamp(worleyFBMNoise(position, 3.0, 2.0), 0.0, 1.0); float worley2 = clamp(worleyFBMNoise(position, 3.0, 3.0), 0.0, 1.0); out_FragColor = vec4(worley0, worley1, worley2, 1.0); } `;var TAo=x(T(),1),T9=`uniform vec3 u_noiseTextureDimensions; in vec2 position; out vec2 v_position; void main() { gl_Position = vec4(position, 0.1, 1.0); float textureSliceWidth = u_noiseTextureDimensions.x; float noiseTextureRows = u_noiseTextureDimensions.y; float inverseNoiseTextureRows = u_noiseTextureDimensions.z; vec2 transformedPos = (position * 0.5) + vec2(0.5); transformedPos *= textureSliceWidth; transformedPos.x *= textureSliceWidth * inverseNoiseTextureRows; transformedPos.y *= noiseTextureRows; v_position = transformedPos; } `;var SAo=x(T(),1),_9=` in vec2 v_textureCoordinates; void main() { czm_materialInput materialInput; materialInput.s = v_textureCoordinates.s; materialInput.st = v_textureCoordinates; materialInput.str = vec3(v_textureCoordinates, 0.0); materialInput.normalEC = vec3(0.0, 0.0, -1.0); czm_material material = czm_getMaterial(materialInput); out_FragColor = vec4(material.diffuse + material.emission, material.alpha); } `;var RAo=x(T(),1);var xNt=new h(1,1,1);function Aoe(e){e=e??xNt,this._dimensions=h.clone(e)}Object.defineProperties(Aoe.prototype,{dimensions:{get:function(){return this._dimensions},set:function(e){h.clone(e,this._dimensions)}}});var TNt=new h;Aoe.prototype.emit=function(e){let t=this._dimensions,n=h.multiplyByScalar(t,.5,TNt),i=L.randomBetween(-n.x,n.x),o=L.randomBetween(-n.y,n.y),r=L.randomBetween(-n.z,n.z);e.position=h.fromElements(i,o,r,e.position),e.velocity=h.normalize(e.position,e.velocity)};var Eoe=Aoe;var EAo=x(T(),1);var Loe=class{constructor(){ct(this,"featuresLength");ct(this,"pointsLength");ct(this,"trianglesLength");ct(this,"geometryByteLength");ct(this,"texturesByteLength");ct(this,"batchTableByteLength");ct(this,"innerContents");ct(this,"ready");ct(this,"tileset");ct(this,"tile");ct(this,"url");ct(this,"batchTable");ct(this,"metadata");ct(this,"group");this.featurePropertiesDirty=!1}hasProperty(t,n){ge.throwInstantiationError()}getFeature(t){ge.throwInstantiationError()}applyDebugSettings(t,n){ge.throwInstantiationError()}applyStyle(t){ge.throwInstantiationError()}update(t,n){ge.throwInstantiationError()}pick(t,n,i){ge.throwInstantiationError()}isDestroyed(){ge.throwInstantiationError()}destroy(){ge.throwInstantiationError()}},Woe=Loe;var sEo=x(T(),1);var IAo=x(T(),1);function S9(e){e=e??B.EMPTY_OBJECT,this._maximumSubtreeCount=e.maximumSubtreeCount??0,this._subtreeRequestCounter=0,this._queue=new N0({comparator:S9.comparator})}S9.prototype.addSubtree=function(e){let t=new _Nt(e,this._subtreeRequestCounter);this._subtreeRequestCounter++,this._queue.insert(t);let n=e.implicitCoordinates;if(n.level>0){let i=n.getParentSubtreeCoordinates(),o=this.find(i)}if(this._maximumSubtreeCount>0)for(;this._queue.length>this._maximumSubtreeCount&&this._queue.getMinimum()!==t;)this._queue.removeMinimum()};S9.prototype.find=function(e){let t=this._queue,n=t.internalArray,i=t.length;for(let o=0;o<i;o++){let r=n[o],a=r.subtree.implicitCoordinates;if(e.isEqual(a))return r.subtree}};S9.comparator=function(e,t){let n=e.subtree.implicitCoordinates,i=t.subtree.implicitCoordinates;return n.isAncestor(i)?1:i.isAncestor(n)?-1:e.stamp-t.stamp};function _Nt(e,t){this.subtree=e,this.stamp=t}var Z9=S9;function V9(e){e=e??B.EMPTY_OBJECT;let{className:t,names:n,types:i,componentTypes:o,shape:r,dimensions:s,paddingBefore:a=h.ZERO.clone(),paddingAfter:c=h.ZERO.clone(),globalTransform:d=I.IDENTITY.clone(),shapeTransform:u=I.IDENTITY.clone(),minBounds:m,maxBounds:p,minimumValues:b,maximumValues:f,maximumTileCount:y}=e;this._shapeTransform=u,this._globalTransform=d,this._shape=r,this._minBounds=m,this._maxBounds=p,this._dimensions=s,this._paddingBefore=a,this._paddingAfter=c,this._className=t,this._names=n,this._types=i,this._componentTypes=o,this._metadataOrder=r===pc.ELLIPSOID?l0.Z_UP:l0.Y_UP,this._minimumValues=b,this._maximumValues=f,this._maximumTileCount=y,this._availableLevels=void 0,this._implicitTileset=void 0,this._subtreeCache=new Z9}Object.defineProperties(V9.prototype,{globalTransform:{get:function(){return this._globalTransform}},shapeTransform:{get:function(){return this._shapeTransform}},shape:{get:function(){return this._shape}},minBounds:{get:function(){return this._minBounds}},maxBounds:{get:function(){return this._maxBounds}},dimensions:{get:function(){return this._dimensions}},paddingBefore:{get:function(){return this._paddingBefore}},paddingAfter:{get:function(){return this._paddingAfter}},className:{get:function(){return this._className}},names:{get:function(){return this._names}},types:{get:function(){return this._types}},componentTypes:{get:function(){return this._componentTypes}},metadataOrder:{get:function(){return this._metadataOrder}},minimumValues:{get:function(){return this._minimumValues}},maximumValues:{get:function(){return this._maximumValues}},maximumTileCount:{get:function(){return this._maximumTileCount}},availableLevels:{get:function(){return this._availableLevels}}});V9.fromUrl=async function(e){let t=ve.createIfNeeded(e),n=await t.fetchJson();ZNt(n);let i=LNt(n,t);await i.load();let{root:o}=n,r=Qi(n,"3DTILES_metadata")?n.extensions["3DTILES_metadata"]:n,s=new OS({metadataJson:r,schema:i.schema}),a=o.content.extensions["3DTILES_content_voxels"],c=a.class,d=WNt(s,c);Object.assign(d,VNt(o)),l(o.transform)?d.globalTransform=I.unpack(o.transform):d.globalTransform=I.clone(I.IDENTITY),d.dimensions=h.unpack(a.dimensions),d.maximumTileCount=SNt(s),l(a.padding)&&(d.paddingBefore=h.unpack(a.padding.before),d.paddingAfter=h.unpack(a.padding.after));let u=new V9(d),m=new yp(t,o,i.schema);return u._implicitTileset=m,u._availableLevels=m.availableLevels,Pi.unload(i),u};function SNt(e){if(l(e.tileset))return e.tileset.getPropertyBySemantic(xm.TILESET_TILE_COUNT)}function ZNt(e){let t=e.root;if(!l(t.content))throw new ae("Root must have content");if(!Qi(t.content,"3DTILES_content_voxels"))throw new ae("Root tile content must have 3DTILES_content_voxels extension");if(!Qi(t,"3DTILES_implicit_tiling")&&!l(t.implicitTiling))throw new ae("Root tile must have implicit tiling");if(!l(e.schema)&&!l(e.schemaUri)&&!Qi(e,"3DTILES_metadata"))throw new ae("Tileset must have a metadata schema")}function VNt(e){let t=e.boundingVolume;if(l(t.box))return ANt(t.box);if(l(t.region))return CNt(t.region);if(Qi(t,"3DTILES_bounding_volume_cylinder"))return ENt(t.extensions["3DTILES_bounding_volume_cylinder"]);throw new ae("Only box, region and 3DTILES_bounding_volume_cylinder are supported in Cesium3DTilesVoxelProvider")}function CNt(e){let t=e[0],n=e[1],i=e[2],o=e[3],r=e[4],s=e[5],a=I.fromScale(ie.WGS84.radii),c=new h(t,n,r),d=new h(i,o,s);return{shape:pc.ELLIPSOID,minBounds:c,maxBounds:d,shapeTransform:a}}var RNt=new h,GNt=new q;function ANt(e){let t=$t.unpack(e),n=q.getScale(t.halfAxes,RNt),i=q.getRotation(t.halfAxes,GNt);return{shape:pc.BOX,minBounds:h.negate(n,new h),maxBounds:h.clone(n),shapeTransform:I.fromRotationTranslation(i,t.center)}}function ENt(e){let{minRadius:t,maxRadius:n,height:i,minAngle:o=-L.PI,maxAngle:r=L.PI,translation:s=[0,0,0],rotation:a=[0,0,0,1]}=e,c=-.5*i+s[2],d=.5*i+s[2],u=I.fromTranslationQuaternionRotationScale(h.unpack(s),Ye.unpack(a),h.ONE);return{shape:pc.CYLINDER,minBounds:h.fromElements(t,o,c),maxBounds:h.fromElements(n,r,d),shapeTransform:u}}function LNt(e,t){let{schemaUri:n,schema:i}=e;return l(n)?Pi.getSchemaLoader({resource:t.getDerivedResource({url:n})}):Pi.getSchemaLoader({schema:i})}function WNt(e,t){let{schema:n,statistics:i}=e,o=i?.classes[t],r=n.classes[t].properties,s=Object.entries(r).map(([b,f])=>{let{type:y,componentType:_}=f,S=o?.properties[b].min,Z=o?.properties[b].max,V=yt.getComponentCount(y),C=b2e(S,V),G=b2e(Z,V);return{id:b,type:y,componentType:_,minValue:C,maxValue:G}}),a=s.map(b=>b.id),c=s.map(b=>b.type),d=s.map(b=>b.componentType),u=s.map(b=>b.minValue),m=s.map(b=>b.maxValue),p=u.some(l);return{className:t,names:a,types:c,componentTypes:d,minimumValues:p?u:void 0,maximumValues:p?m:void 0}}function b2e(e,t){if(!l(e))return;let n=Array.isArray(e)?e:[e];return Array.from({length:t},(i,o)=>n[o])}async function vNt(e,t){let n=e._implicitTileset,i=e._subtreeCache,o=i.find(t);if(l(o))return o;let r=n.subtreeUriTemplate.getDerivedResource({templateValues:t.getTemplateValues()}),s=n.baseResource.getDerivedResource({url:r.url}),a=await s.fetchArrayBuffer();if(o=i.find(t),l(o))return o;let c=cg(a);return o=await z0.fromSubtreeJson(s,c.jsonPayload,c.binaryPayload,n,t),i.addSubtree(o),o}V9.prototype.requestData=async function(e){e=e??B.EMPTY_OBJECT;let{tileLevel:t=0,tileX:n=0,tileY:i=0,tileZ:o=0,keyframe:r=0}=e;if(r!==0)return Promise.reject("3D Tiles currently doesn't support time-dynamic data.");let s=this._implicitTileset,a=new gp({subdivisionScheme:s.subdivisionScheme,subtreeLevels:s.subtreeLevels,level:t,x:n,y:i,z:o}),c=a.isSubtreeRoot()&&a.level>0,d=c?a.getParentSubtreeCoordinates():a.getSubtreeCoordinates(),m=await vNt(this,d);if(!(c?m.childSubtreeIsAvailableAtCoordinates:m.tileIsAvailableAtCoordinates).call(m,a))return Promise.reject(`Tile is not available at level ${t}, x ${n}, y ${i}, z ${o}.`);let{contentUriTemplates:f,baseResource:y}=s,_=f[0].getDerivedResource({templateValues:a.getTemplateValues()}),S=y.getDerivedResource({url:_.url});return _Z.fromGltf(S)};var voe=V9;var dEo=x(T(),1);function Foe(e){e=e??1,this._radius=e??1}Object.defineProperties(Foe.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});Foe.prototype.emit=function(e){let t=L.randomBetween(0,L.TWO_PI),n=L.randomBetween(0,this._radius),i=n*Math.cos(t),o=n*Math.sin(t),r=0;e.position=h.fromElements(i,o,r,e.position),e.velocity=h.clone(h.UNIT_Z,e.velocity)};var C9=Foe;var eLo=x(T(),1);var mEo=x(T(),1),CH={CUMULUS:0};CH.validate=function(e){return e===CH.CUMULUS};Object.freeze(CH);var LG=CH;var xEo=x(T(),1);function Kf(e,t){if(e=e??B.EMPTY_OBJECT,this._show=e.show??!0,this._position=h.clone(e.position??h.ZERO),!l(e.scale)&&l(e.maximumSize))this._maximumSize=h.clone(e.maximumSize),this._scale=new M(this._maximumSize.x,this._maximumSize.y);else{this._scale=M.clone(e.scale??new M(20,12));let n=new h(this._scale.x,this._scale.y,Math.min(this._scale.x,this._scale.y)/1.5);this._maximumSize=h.clone(e.maximumSize??n)}this._slice=e.slice??-1,this._color=U.clone(e.color??U.WHITE),this._brightness=e.brightness??1,this._cloudCollection=t,this._index=-1}var FNt=Kf.SHOW_INDEX=0,INt=Kf.POSITION_INDEX=1,PNt=Kf.SCALE_INDEX=2,XNt=Kf.MAXIMUM_SIZE_INDEX=3,NNt=Kf.SLICE_INDEX=4,YNt=Kf.BRIGHTNESS_INDEX=5,wNt=Kf.COLOR_INDEX=6;Kf.NUMBER_OF_PROPERTIES=7;function HZ(e,t){let n=e._cloudCollection;l(n)&&(n._updateCloud(e,t),e._dirty=!0)}Object.defineProperties(Kf.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,HZ(this,FNt))}},position:{get:function(){return this._position},set:function(e){let t=this._position;h.equals(t,e)||(h.clone(e,t),HZ(this,INt))}},scale:{get:function(){return this._scale},set:function(e){let t=this._scale;M.equals(t,e)||(M.clone(e,t),HZ(this,PNt))}},maximumSize:{get:function(){return this._maximumSize},set:function(e){let t=this._maximumSize;h.equals(t,e)||(h.clone(e,t),HZ(this,XNt))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),HZ(this,wNt))}},slice:{get:function(){return this._slice},set:function(e){this._slice!==e&&(this._slice=e,HZ(this,NNt))}},brightness:{get:function(){return this._brightness},set:function(e){this._brightness!==e&&(this._brightness=e,HZ(this,YNt))}}});Kf.prototype._destroy=function(){this._cloudCollection=void 0};var em=Kf;var tm,RH=new h,MNt={positionHighAndScaleX:0,positionLowAndScaleY:1,packedAttribute0:2,packedAttribute1:3,color:4},kNt={direction:0,positionHighAndScaleX:1,positionLowAndScaleY:2,packedAttribute0:3,packedAttribute1:4,color:5},UNt=em.SHOW_INDEX,DNt=em.POSITION_INDEX,ONt=em.SCALE_INDEX,BNt=em.MAXIMUM_SIZE_INDEX,zNt=em.SLICE_INDEX,HNt=em.BRIGHTNESS_INDEX,KNt=em.NUMBER_OF_PROPERTIES,JNt=em.COLOR_INDEX;function Jf(e){e=e??B.EMPTY_OBJECT,this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array(KNt),this._noiseTexture=void 0,this._textureSliceWidth=128,this._noiseTextureRows=4,this.noiseDetail=e.noiseDetail??16,this.noiseOffset=h.clone(e.noiseOffset??h.ZERO),this._loading=!1,this._ready=!1;let t=this;this._uniforms={u_noiseTexture:function(){return t._noiseTexture},u_noiseTextureDimensions:g2e(t),u_noiseDetail:function(){return t.noiseDetail}},this._vaNoise=void 0,this._spNoise=void 0,this._spCreated=!1,this._sp=void 0,this._rs=void 0,this.show=e.show??!0,this._colorCommands=[],this.debugBillboards=e.debugBillboards??!1,this._compiledDebugBillboards=!1,this.debugEllipsoids=e.debugEllipsoids??!1,this._compiledDebugEllipsoids=!1}function g2e(e){return function(){return RH.x=e._textureSliceWidth,RH.y=e._noiseTextureRows,RH.z=1/e._noiseTextureRows,RH}}Object.defineProperties(Jf.prototype,{length:{get:function(){return Poe(this),this._clouds.length}}});function y2e(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}Jf.prototype.add=function(e){e=e??B.EMPTY_OBJECT;let t=e.cloudType??LG.CUMULUS,n;return t===LG.CUMULUS&&(n=new em(e,this),n._index=this._clouds.length,this._clouds.push(n),this._createVertexArray=!0),n};Jf.prototype.remove=function(e){return this.contains(e)?(this._clouds[e._index]=void 0,this._cloudsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};Jf.prototype.removeAll=function(){y2e(this._clouds),this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!0};function Poe(e){if(e._cloudsRemoved){e._cloudsRemoved=!1;let t=[],n=e._clouds,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];l(s)&&(n._index=r++,t.push(s))}e._clouds=t}}Jf.prototype._updateCloud=function(e,t){e._dirty||(this._cloudsToUpdate[this._cloudsToUpdateIndex++]=e),++this._propertiesChanged[t]};Jf.prototype.contains=function(e){return l(e)&&e._cloudCollection===this};Jf.prototype.get=function(e){return Poe(this),this._clouds[e]};var jNt=new Float32Array([-1,-1,1,-1,1,1,-1,1]),QNt=new Uint16Array([0,1,2,0,2,3]);function qNt(e){let t=et.createVertexBuffer({context:e,typedArray:jNt,usage:Ie.STATIC_DRAW}),n=et.createIndexBuffer({context:e,typedArray:QNt,usage:Ie.STATIC_DRAW,indexDatatype:De.UNSIGNED_SHORT}),i=[{index:0,vertexBuffer:t,componentsPerAttribute:2,componentDatatype:J.FLOAT}];return new Dn({context:e,attributes:i,indexBuffer:n})}var Xoe;function $Nt(e){let n=e.cache.cloudCollection_indexBufferBatched;if(l(n))return n;let i=16384*6-6,o=new Uint16Array(i);for(let r=0,s=0;r<i;r+=6,s+=4)o[r]=s,o[r+1]=s+1,o[r+2]=s+2,o[r+3]=s,o[r+4]=s+2,o[r+5]=s+3;return n=et.createIndexBuffer({context:e,typedArray:o,usage:Ie.STATIC_DRAW,indexDatatype:De.UNSIGNED_SHORT}),n.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferBatched=n,n}function eYt(e){let t=e.cache.cloudCollection_indexBufferInstanced;return l(t)||(t=et.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Ie.STATIC_DRAW,indexDatatype:De.UNSIGNED_SHORT}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferInstanced=t),t}function tYt(e){let t=e.cache.cloudCollection_vertexBufferInstanced;return l(t)||(t=et.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:Ie.STATIC_DRAW}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_vertexBufferInstanced=t),t}function nYt(e,t,n){let i=[{index:tm.positionHighAndScaleX,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:Ie.STATIC_DRAW},{index:tm.positionLowAndScaleY,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:Ie.STATIC_DRAW},{index:tm.packedAttribute0,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:Ie.STATIC_DRAW},{index:tm.packedAttribute1,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:Ie.STATIC_DRAW},{index:tm.color,componentsPerAttribute:4,componentDatatype:J.UNSIGNED_BYTE,normalize:!0,usage:Ie.STATIC_DRAW}];n&&i.push({index:tm.direction,componentsPerAttribute:2,componentDatatype:J.FLOAT,vertexBuffer:tYt(e)});let o=n?t:4*t;return new Tb(e,i,o,n)}var Ioe=new Rn;function x2e(e,t,n,i){let o,r=n[tm.positionHighAndScaleX],s=n[tm.positionLowAndScaleY],a=i.position;Rn.fromCartesian(a,Ioe);let c=i.scale,d=Ioe.high,u=Ioe.low;e._instanced?(o=i._index,r(o,d.x,d.y,d.z,c.x),s(o,u.x,u.y,u.z,c.y)):(o=i._index*4,r(o+0,d.x,d.y,d.z,c.x),r(o+1,d.x,d.y,d.z,c.x),r(o+2,d.x,d.y,d.z,c.x),r(o+3,d.x,d.y,d.z,c.x),s(o+0,u.x,u.y,u.z,c.y),s(o+1,u.x,u.y,u.z,c.y),s(o+2,u.x,u.y,u.z,c.y),s(o+3,u.x,u.y,u.z,c.y))}function T2e(e,t,n,i){let o,r=n[tm.packedAttribute0],s=i.show,a=i.brightness;e._instanced?(o=i._index,r(o,s,a,0,0)):(o=i._index*4,r(o+0,s,a,0,0),r(o+1,s,a,1,0),r(o+2,s,a,1,1),r(o+3,s,a,0,1))}function _2e(e,t,n,i){let o,r=n[tm.packedAttribute1],s=i.maximumSize,a=i.slice;e._instanced?(o=i._index,r(o,s.x,s.y,s.z,a)):(o=i._index*4,r(o+0,s.x,s.y,s.z,a),r(o+1,s.x,s.y,s.z,a),r(o+2,s.x,s.y,s.z,a),r(o+3,s.x,s.y,s.z,a))}function S2e(e,t,n,i){let o,r=n[tm.color],s=i.color,a=U.floatToByte(s.red),c=U.floatToByte(s.green),d=U.floatToByte(s.blue),u=U.floatToByte(s.alpha);e._instanced?(o=i._index,r(o,a,c,d,u)):(o=i._index*4,r(o+0,a,c,d,u),r(o+1,a,c,d,u),r(o+2,a,c,d,u),r(o+3,a,c,d,u))}function iYt(e,t,n,i){x2e(e,t,n,i),T2e(e,t,n,i),_2e(e,t,n,i),S2e(e,t,n,i)}function oYt(e,t,n,i){let o=e,r=o._textureSliceWidth,s=o._noiseTextureRows,a=t.context;o._vaNoise=qNt(a),o._spNoise=en.fromCache({context:a,vertexShaderSource:n,fragmentShaderSource:i,attributeLocations:{position:0}});let c=o.noiseDetail,d=o.noiseOffset;o._noiseTexture=new Ct({context:a,width:r*r/s,height:r*s,pixelDatatype:Me.UNSIGNED_BYTE,pixelFormat:Be.RGBA,sampler:new kt({wrapS:sn.REPEAT,wrapT:sn.REPEAT,minificationFilter:zt.NEAREST,magnificationFilter:ni.NEAREST})});let u=new Yl({vertexArray:o._vaNoise,shaderProgram:o._spNoise,outputTexture:o._noiseTexture,uniformMap:{u_noiseTextureDimensions:g2e(o),u_noiseDetail:function(){return c},u_noiseOffset:function(){return d}},persists:!1,owner:e,postExecute:function(m){o._ready=!0,o._loading=!1}});t.commandList.push(u),o._loading=!0}function rYt(e,t){let n=e,i=t.context;n._createVertexArray=!1,n._vaf=n._vaf&&n._vaf.destroy();let o=e._clouds,r=o.length;if(r>0){n._vaf=nYt(i,r,n._instanced);let s=n._vaf.writers,a;for(a=0;a<r;++a){let c=o[a];iYt(e,t,s,c)}n._vaf.commit(Xoe(i))}}var sYt=[];function aYt(e,t){let n=t.context,i=e,r=i._clouds.length,s=i._cloudsToUpdate,a=i._cloudsToUpdateIndex,c=i._propertiesChanged,d=sYt;d.length=0,(c[DNt]||c[ONt])&&d.push(x2e),(c[UNt]||c[HNt])&&d.push(T2e),(c[BNt]||c[zNt])&&d.push(_2e),c[JNt]&&d.push(S2e);let u=d.length,m=i._vaf.writers,p,b,f;if(a/r>.1){for(p=0;p<a;++p)for(b=s[p],b._dirty=!1,f=0;f<u;++f)d[f](e,t,m,b);i._vaf.commit(Xoe(n))}else{for(p=0;p<a;++p){for(b=s[p],b._dirty=!1,f=0;f<u;++f)d[f](e,t,m,b);i._instanced?i._vaf.subCommit(b._index,1):i._vaf.subCommit(b._index*4,4)}i._vaf.endSubCommits()}i._cloudsToUpdateIndex=0}function cYt(e,t,n,i){let o=t.context,r=e,s=new ze({defines:[],sources:[n]});r._instanced&&s.defines.push("INSTANCED");let a=new ze({defines:[],sources:[i]});r.debugBillboards&&a.defines.push("DEBUG_BILLBOARDS"),r.debugEllipsoids&&a.defines.push("DEBUG_ELLIPSOIDS"),r._sp=en.replaceCache({context:o,shaderProgram:r._sp,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:tm}),r._rs=Oe.fromCache({depthTest:{enabled:!0,func:ne.LESS},depthMask:!1,blending:tn.ALPHA_BLEND}),r._spCreated=!0,r._compiledDebugBillboards=r.debugBillboards,r._compiledDebugEllipsoids=r.debugEllipsoids}function lYt(e,t){let n=e,i=t.passes,o=n._uniforms,r=t.commandList;if(i.render){let s=n._colorCommands,a=n._vaf.va,c=a.length;s.length=c;for(let d=0;d<c;d++){let u=s[d];l(u)||(u=s[d]=new ot),u.pass=We.TRANSLUCENT,u.owner=e,u.uniformMap=o,u.count=a[d].indicesCount,u.vertexArray=a[d].va,u.shaderProgram=n._sp,u.renderState=n._rs,n._instanced&&(u.count=6,u.instanceCount=n._clouds.length),r.push(u)}}}Jf.prototype.update=function(e){if(Poe(this),!this.show)return;let t=this.debugBillboards||this.debugEllipsoids;this._ready=t?!0:l(this._noiseTexture),!this._ready&&!this._loading&&!t&&oYt(this,e,T9,x9),this._instanced=e.context.instancedArrays,tm=this._instanced?kNt:MNt,Xoe=this._instanced?eYt:$Nt;let i=this._clouds.length,o=this._cloudsToUpdate,r=this._cloudsToUpdateIndex;this._createVertexArray?rYt(this,e):r>0&&aYt(this,e),r>i*1.5&&(o.length=i),!(!l(this._vaf)||!l(this._vaf.va)||!this._ready&!t)&&((!this._spCreated||this.debugBillboards!==this._compiledDebugBillboards||this.debugEllipsoids!==this._compiledDebugEllipsoids)&&cYt(this,e,y9,g9),lYt(this,e))};Jf.prototype.isDestroyed=function(){return!1};Jf.prototype.destroy=function(){return this._noiseTexture=this._noiseTexture&&this._noiseTexture.destroy(),this._sp=this._sp&&this._sp.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),y2e(this._clouds),me(this)};var Noe=Jf;var oLo=x(T(),1);var dYt=L.toRadians(30);function Yoe(e){this._angle=e??dYt}Object.defineProperties(Yoe.prototype,{angle:{get:function(){return this._angle},set:function(e){this._angle=e}}});Yoe.prototype.emit=function(e){let t=Math.tan(this._angle),n=L.randomBetween(0,L.TWO_PI),i=L.randomBetween(0,t),o=i*Math.cos(n),r=i*Math.sin(n),s=1;e.velocity=h.fromElements(o,r,s,e.velocity),h.normalize(e.velocity,e.velocity),e.position=h.clone(h.ZERO,e.position)};var woe=Yoe;var lLo=x(T(),1);function R9(e){e=e??B.EMPTY_OBJECT;let t=e.attributeName,n=e.perInstanceAttribute;l(n)||(n=!1);let i=e.glslDatatype??"vec3",o=`v_${t}`,r;if(t==="normal"||t==="tangent"||t==="bitangent")r=`vec4 getColor() { return vec4((${o} + vec3(1.0)) * 0.5, 1.0); } `;else switch(t==="st"&&(i="vec2"),i){case"float":r=`vec4 getColor() { return vec4(vec3(${o}), 1.0); } `;break;case"vec2":r=`vec4 getColor() { return vec4(${o}, 0.0, 1.0); } `;break;case"vec3":r=`vec4 getColor() { return vec4(${o}, 1.0); } `;break;case"vec4":r=`vec4 getColor() { return ${o}; } `;break}let s=`in vec3 position3DHigh; in vec3 position3DLow; in float batchId; ${n?"":`in ${i} ${t}; `}out ${i} ${o}; void main() { vec4 p = czm_translateRelativeToEye(position3DHigh, position3DLow); ${n?`${o} = czm_batchTable_${t}(batchId); `:`${o} = ${t}; `}gl_Position = czm_modelViewProjectionRelativeToEye * p; }`,a=`in ${i} ${o}; ${r} void main() { out_FragColor = getColor(); }`;this.material=void 0,this.translucent=e.translucent??!1,this._vertexShaderSource=e.vertexShaderSource??s,this._fragmentShaderSource=e.fragmentShaderSource??a,this._renderState=Co.getDefaultRenderState(!1,!1,e.renderState),this._closed=e.closed??!1,this._attributeName=t,this._glslDatatype=i}Object.defineProperties(R9.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},attributeName:{get:function(){return this._attributeName}},glslDatatype:{get:function(){return this._glslDatatype}}});R9.prototype.getFragmentShaderSource=Co.prototype.getFragmentShaderSource;R9.prototype.isTranslucent=Co.prototype.isTranslucent;R9.prototype.getRenderState=Co.prototype.getRenderState;var Moe=R9;var SLo=x(T(),1);function GH(e){e=e??B.EMPTY_OBJECT,this.length=e.length??1e7,this._length=void 0,this.width=e.width??2,this._width=void 0,this.show=e.show??!0,this.modelMatrix=I.clone(e.modelMatrix??I.IDENTITY),this._modelMatrix=new I,this.id=e.id,this._id=void 0,this._primitive=void 0}GH.prototype.update=function(e){if(this.show){if(!l(this._primitive)||!I.equals(this._modelMatrix,this.modelMatrix)||this._length!==this.length||this._width!==this.width||this._id!==this.id){this._modelMatrix=I.clone(this.modelMatrix,this._modelMatrix),this._length=this.length,this._width=this.width,this._id=this.id,l(this._primitive)&&this._primitive.destroy(),this.modelMatrix[12]===0&&this.modelMatrix[13]===0&&this.modelMatrix[14]===0&&(this.modelMatrix[14]=.01);let t=new Nt({geometry:new ub({positions:[h.ZERO,h.UNIT_X],width:this.width,vertexFormat:Ws.VERTEX_FORMAT,colors:[U.RED,U.RED],arcType:ln.NONE}),modelMatrix:I.multiplyByUniformScale(this.modelMatrix,this.length,new I),id:this.id,pickPrimitive:this}),n=new Nt({geometry:new ub({positions:[h.ZERO,h.UNIT_Y],width:this.width,vertexFormat:Ws.VERTEX_FORMAT,colors:[U.GREEN,U.GREEN],arcType:ln.NONE}),modelMatrix:I.multiplyByUniformScale(this.modelMatrix,this.length,new I),id:this.id,pickPrimitive:this}),i=new Nt({geometry:new ub({positions:[h.ZERO,h.UNIT_Z],width:this.width,vertexFormat:Ws.VERTEX_FORMAT,colors:[U.BLUE,U.BLUE],arcType:ln.NONE}),modelMatrix:I.multiplyByUniformScale(this.modelMatrix,this.length,new I),id:this.id,pickPrimitive:this});this._primitive=new Nn({geometryInstances:[t,n,i],appearance:new Ws,asynchronous:!1})}this._primitive.update(e)}};GH.prototype.isDestroyed=function(){return!1};GH.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};var G9=GH;var RLo=x(T(),1);function uYt(e){this.direction=h.clone(e.direction),this.color=U.clone(e.color??U.WHITE),this.intensity=e.intensity??1}var koe=uYt;var wLo=x(T(),1);var ALo=x(T(),1),A9=`in vec3 v_positionMC; in vec3 v_positionEC; in vec2 v_st; void main() { czm_materialInput materialInput; vec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0))); #ifdef FACE_FORWARD normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC); #endif materialInput.s = v_st.s; materialInput.st = v_st; materialInput.str = vec3(v_st, 0.0); // Convert tangent space material normal to eye space materialInput.normalEC = normalEC; materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC); // Convert view vector to world space vec3 positionToEyeEC = -v_positionEC; materialInput.positionToEyeEC = positionToEyeEC; czm_material material = czm_getMaterial(materialInput); #ifdef FLAT out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #else out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC); #endif } `;var LLo=x(T(),1),E9=`in vec3 position3DHigh; in vec3 position3DLow; in vec2 st; in float batchId; out vec3 v_positionMC; out vec3 v_positionEC; out vec2 v_st; void main() { vec4 p = czm_computePosition(); v_positionMC = position3DHigh + position3DLow; // position in model coordinates v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates v_st = st; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;function KZ(e){e=e??B.EMPTY_OBJECT;let t=e.translucent??!0,n=e.aboveGround??!1;this.material=l(e.material)?e.material:no.fromType(no.ColorType),this.translucent=e.translucent??!0,this._vertexShaderSource=e.vertexShaderSource??E9,this._fragmentShaderSource=e.fragmentShaderSource??A9,this._renderState=Co.getDefaultRenderState(t,!n,e.renderState),this._closed=!1,this._flat=e.flat??!1,this._faceForward=e.faceForward??n,this._aboveGround=n}Object.defineProperties(KZ.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return KZ.VERTEX_FORMAT}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}},aboveGround:{get:function(){return this._aboveGround}}});KZ.VERTEX_FORMAT=we.POSITION_AND_ST;KZ.prototype.getFragmentShaderSource=Co.prototype.getFragmentShaderSource;KZ.prototype.isTranslucent=Co.prototype.isTranslucent;KZ.prototype.getRenderState=Co.prototype.getRenderState;var Uoe=KZ;var $Lo=x(T(),1);var mYt=1e5;function L9(e){e=e??B.EMPTY_OBJECT;let t=e.credit;typeof t=="string"&&(t=new At(t)),this._credit=t,this._radius=l(e.radius)?e.radius:mYt,this._image=e.image,this._transform=l(e.transform)?e.transform:I.IDENTITY,this._repeatHorizontal=l(e.repeatHorizontal)?e.repeatHorizontal:1,this._repeatVertical=l(e.repeatVertical)?e.repeatVertical:1;let n=new fL({radius:this._radius,vertexFormat:we.ALL}),i=new Nt({geometry:n,modelMatrix:this._transform}),o=new no({fabric:{type:"Image",uniforms:{image:this._image,repeat:new M(-this._repeatHorizontal,this._repeatVertical)}}});return this._primitive=new Nn({geometryInstances:i,appearance:new To({material:o,closed:!0,faceForward:!1,flat:!0,translucent:!1,renderState:{cull:{enabled:!1}}}),credit:this._credit}),this}Object.defineProperties(L9.prototype,{radius:{get:function(){return this._radius}},image:{get:function(){return this._image}},transform:{get:function(){return this._transform}},credit:{get:function(){return l(this._credit)?this._credit:void 0}},show:{get:function(){return l(this._primitive)?this._primitive.show:void 0},set:function(e){l(this._primitive)&&(this._primitive.show=e)}}});L9.prototype.update=function(e){return l(this._credit)&&e.creditDisplay.addCreditToNextFrame(this._credit),this._primitive.update(e)};L9.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};L9.prototype.isDestroyed=function(){return this._primitive.isDestroyed()};var Doe=L9;var sWo=x(T(),1);function jd(e){this._scene=e.scene,this.samplingWindow=e.samplingWindow??jd.defaultSettings.samplingWindow,this.quietPeriod=e.quietPeriod??jd.defaultSettings.quietPeriod,this.warmupPeriod=e.warmupPeriod??jd.defaultSettings.warmupPeriod,this.minimumFrameRateDuringWarmup=e.minimumFrameRateDuringWarmup??jd.defaultSettings.minimumFrameRateDuringWarmup,this.minimumFrameRateAfterWarmup=e.minimumFrameRateAfterWarmup??jd.defaultSettings.minimumFrameRateAfterWarmup,this._lowFrameRate=new Se,this._nominalFrameRate=new Se,this._frameTimes=[],this._needsQuietPeriod=!0,this._quietPeriodEndTime=0,this._warmupPeriodEndTime=0,this._frameRateIsLow=!1,this._lastFramesPerSecond=void 0,this._pauseCount=0;let t=this;this._preUpdateRemoveListener=this._scene.preUpdate.addEventListener(function(o,r){hYt(t,r)}),this._hiddenPropertyName=document.hidden!==void 0?"hidden":document.mozHidden!==void 0?"mozHidden":document.msHidden!==void 0?"msHidden":document.webkitHidden!==void 0?"webkitHidden":void 0;let n=document.hidden!==void 0?"visibilitychange":document.mozHidden!==void 0?"mozvisibilitychange":document.msHidden!==void 0?"msvisibilitychange":document.webkitHidden!==void 0?"webkitvisibilitychange":void 0;function i(){fYt(t)}this._visibilityChangeRemoveListener=void 0,l(n)&&(document.addEventListener(n,i,!1),this._visibilityChangeRemoveListener=function(){document.removeEventListener(n,i,!1)})}jd.defaultSettings={samplingWindow:5,quietPeriod:2,warmupPeriod:5,minimumFrameRateDuringWarmup:4,minimumFrameRateAfterWarmup:8};jd.fromScene=function(e){return(!l(e._frameRateMonitor)||e._frameRateMonitor.isDestroyed())&&(e._frameRateMonitor=new jd({scene:e})),e._frameRateMonitor};Object.defineProperties(jd.prototype,{scene:{get:function(){return this._scene}},lowFrameRate:{get:function(){return this._lowFrameRate}},nominalFrameRate:{get:function(){return this._nominalFrameRate}},lastFramesPerSecond:{get:function(){return this._lastFramesPerSecond}}});jd.prototype.pause=function(){++this._pauseCount,this._pauseCount===1&&(this._frameTimes.length=0,this._lastFramesPerSecond=void 0)};jd.prototype.unpause=function(){--this._pauseCount,this._pauseCount<=0&&(this._pauseCount=0,this._needsQuietPeriod=!0)};jd.prototype.isDestroyed=function(){return!1};jd.prototype.destroy=function(){return this._preUpdateRemoveListener(),l(this._visibilityChangeRemoveListener)&&this._visibilityChangeRemoveListener(),me(this)};function hYt(e,t){if(e._pauseCount>0)return;let n=Tn();if(e._needsQuietPeriod)e._needsQuietPeriod=!1,e._frameTimes.length=0,e._quietPeriodEndTime=n+e.quietPeriod/kn.SECONDS_PER_MILLISECOND,e._warmupPeriodEndTime=e._quietPeriodEndTime+(e.warmupPeriod+e.samplingWindow)/kn.SECONDS_PER_MILLISECOND;else if(n>=e._quietPeriodEndTime){e._frameTimes.push(n);let i=n-e.samplingWindow/kn.SECONDS_PER_MILLISECOND;if(e._frameTimes.length>=2&&e._frameTimes[0]<=i){for(;e._frameTimes.length>=2&&e._frameTimes[1]<i;)e._frameTimes.shift();let o=(n-e._frameTimes[0])/(e._frameTimes.length-1);e._lastFramesPerSecond=1e3/o;let r=1e3/(n>e._warmupPeriodEndTime?e.minimumFrameRateAfterWarmup:e.minimumFrameRateDuringWarmup);o>r?e._frameRateIsLow||(e._frameRateIsLow=!0,e._needsQuietPeriod=!0,e.lowFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond)):e._frameRateIsLow&&(e._frameRateIsLow=!1,e._needsQuietPeriod=!0,e.nominalFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond))}}}function fYt(e){document[e._hiddenPropertyName]?e.pause():e.unpause()}var W9=jd;var ZWo=x(T(),1);var Boe=class e{constructor(t){t=t??B.EMPTY_OBJECT;let n=pYt(t.geoJson),i=t.allowPicking??!0,o=t.ellipsoid??ie.default,r=new Float64Array(0);function s(m){return r.length<m&&(r=new Float64Array(m)),r}if(this.show=t.show??!0,this._url=t.url,this._ids=n.ids,this._properties=n.properties,this._featureCount=n.ids.length,this._pickObjectFactory=t.pickObjectFactory,this._points=void 0,this._polylines=void 0,this._polygons=void 0,n.pointCount>0){let m={primitiveCountMax:n.pointCount,allowPicking:i};this._points=new Md(m)}if(n.polylineCount>0){let m={primitiveCountMax:n.polylineCount,vertexCountMax:n.polylineVertexCount,allowPicking:i};this._polylines=new il(m)}if(n.polygonCount>0){let m={primitiveCountMax:n.polygonCount,vertexCountMax:n.polygonVertexCount,holeCountMax:n.polygonHoleCount,triangleCountMax:n.polygonTriangleCount,allowPicking:i};this._polygons=new tl(m)}let a=new h,c=0,d=0,u=0;for(let m=0;m<n.features.length;m++){let p=n.features[m],b=p.featureId,f=this._properties[b];for(let y=0;y<p.points.length;y++){let _=c++;this._points.add({featureId:b,position:A2e(p.points[y],o,a),pickObject:i?Ooe(this,_,this._points,Pc,f):void 0})}for(let y=0;y<p.polylines.length;y++){let _=d++;this._polylines.add({featureId:b,positions:Z2e(p.polylines[y],o,s),pickObject:i?Ooe(this,_,this._polylines,ha,f):void 0})}for(let y=0;y<p.polygons.length;y++){let _=p.polygons[y],S=u++;this._polygons.add({featureId:b,positions:Z2e(_.positions,o,s),holes:_.holes,triangles:_.triangles,pickObject:i?Ooe(this,S,this._polygons,Hr,f):void 0})}}}get url(){let t=this._url;if(l(t))return t instanceof ve?t.getUrlComponent(!0):t}get featureCount(){return this._featureCount}get ids(){return this._ids}get properties(){return this._properties}get points(){return this._points}get polylines(){return this._polylines}get polygons(){return this._polygons}static async fromUrl(t,n){let i=ve.createIfNeeded(t),o=await i.fetchJson();if(!l(o))throw new ae(`Failed to load GeoJSON from ${i.getUrlComponent(!0)}.`);return e.fromGeoJson(o,{...n,url:i})}static fromGeoJson(t,n){return new e({...n,geoJson:t})}getId(t){return this._ids[t]}getProperties(t){return this._properties[t]}update(t){this.show&&(l(this._points)&&this._points.update(t),l(this._polylines)&&this._polylines.update(t),l(this._polygons)&&this._polygons.update(t))}destroy(){return this._points&&(this._points.destroy(),this._points=void 0),this._polylines&&(this._polylines.destroy(),this._polylines=void 0),this._polygons&&(this._polygons.destroy(),this._polygons=void 0),me(this)}isDestroyed(){return!1}};function Ooe(e,t,n,i,o){return l(e._pickObjectFactory)?e._pickObjectFactory(t,n,o):{index:t,collection:n,get primitive(){return n.get(t,new i)},parentPrimitive:e,properties:o}}function pYt(e){let t=bYt(e),n=[],i=[],o=[],r=0,s=0,a=0,c=0,d=0,u=0,m=0;for(let p=0;p<t.length;p++){let b=t[p],f={points:[],polylines:[],polygons:[]};if(V2e(b.geometry,f),f.points.length===0&&f.polylines.length===0&&f.polygons.length===0)continue;let y=i.length;i.push(b.id),o.push(GYt(b.properties)?b.properties:B.EMPTY_OBJECT);for(let _=0;_<f.polygons.length;_++){let S=f.polygons[_];u+=S.holes.length,m+=S.triangles.length/3,d+=S.positions.length}for(let _=0;_<f.polylines.length;_++)a+=f.polylines[_].length;r+=f.points.length,s+=f.polylines.length,c+=f.polygons.length,n.push({featureId:y,points:f.points,polylines:f.polylines,polygons:f.polygons})}return{features:n,ids:i,properties:o,pointCount:r,polylineCount:s,polylineVertexCount:a,polygonCount:c,polygonVertexCount:d,polygonHoleCount:u,polygonTriangleCount:m}}function bYt(e){if(!l(e)||!l(e.type))throw new ae("GeoJSON object must define 'type'.");switch(e.type){case"FeatureCollection":return e.features;case"Feature":return[e];default:if(CYt(e.type))return[{type:"Feature",geometry:e,properties:B.EMPTY_OBJECT,id:void 0}];throw new ae(`Unsupported GeoJSON type: ${e.type}`)}}function V2e(e,t){if(!(!l(e)||!l(e.type)))switch(e.type){case"Point":C2e(e.coordinates,t.points);return;case"MultiPoint":yYt(e.coordinates,t.points);return;case"LineString":R2e(e.coordinates,t.polylines);return;case"MultiLineString":xYt(e.coordinates,t.polylines);return;case"Polygon":G2e(e.coordinates,t.polygons);return;case"MultiPolygon":TYt(e.coordinates,t.polygons);return;case"GeometryCollection":gYt(e.geometries,t);return;default:return}}function gYt(e,t){if(Array.isArray(e))for(let n=0;n<e.length;n++)V2e(e[n],t)}function C2e(e,t){let n=zoe(e);l(n)&&t.push(n)}function yYt(e,t){for(let n=0;n<e.length;n++)C2e(e[n],t)}function R2e(e,t){let n=_Yt(e);l(n)&&n.length>=2&&t.push(n)}function xYt(e,t){for(let n=0;n<e.length;n++)R2e(e[n],t)}function G2e(e,t){let n=SYt(e);l(n)&&t.push(n)}function TYt(e,t){for(let n=0;n<e.length;n++)G2e(e[n],t)}function _Yt(e){if(!Array.isArray(e))return;let t=[];for(let n=0;n<e.length;n++){let i=zoe(e[n]);l(i)&&t.push(i)}return t.length>=2?t:void 0}function SYt(e){if(!Array.isArray(e)||e.length===0)return;let t=[];for(let a=0;a<e.length;a++){let c=ZYt(e[a]);l(c)&&t.push(c)}if(t.length===0||t[0].length<3)return;let i=[],o=[],r=[];for(let a=0;a<t.length;a++){let c=t[a];if(!(c.length<3)){a>0&&r.push(o.length);for(let d=0;d<c.length;d++){let u=c[d];o.push(u),i.push(new M(u[0],u[1]))}}}if(o.length<3)return;let s=ui.triangulate(i,r);if(!(!l(s)||s.length<3))return{positions:o,holes:new Uint32Array(r),triangles:new Uint32Array(s)}}function ZYt(e){if(!Array.isArray(e))return;let t=[];for(let n=0;n<e.length;n++){let i=zoe(e[n]);l(i)&&t.push(i)}if(!(t.length<3))return t.length>1&&VYt(t[0],t[t.length-1])&&t.pop(),t.length>=3?t:void 0}function zoe(e){if(!Array.isArray(e)||e.length<2)return;let t=e[0],n=e[1],i=e[2]??0;if(!(!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(i)))return[t,n,i]}function VYt(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function CYt(e){return e==="Point"||e==="MultiPoint"||e==="LineString"||e==="MultiLineString"||e==="Polygon"||e==="MultiPolygon"||e==="GeometryCollection"}function A2e(e,t,n){return h.fromDegrees(e[0],e[1],e[2]??0,t,n)}var RYt=new h;function Z2e(e,t,n){let i=e.length*3,o=n(i);for(let r=0;r<e.length;r++){let s=A2e(e[r],t,RYt);o[r*3]=s.x,o[r*3+1]=s.y,o[r*3+2]=s.z}return o.subarray(0,i)}function GYt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var Hoe=Boe;var NWo=x(T(),1);var E2e=x(GQ(),1);function Koe(){this._image=new Image}Koe.prototype.isReady=function(){return!0};Koe.prototype.shouldDiscardImage=function(e){return e===this._image};function JZ(e){e=e??B.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileDiscardPolicy=e.tileDiscardPolicy,this._tilingScheme=new Ji({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new re(-L.PI,-L.PI,L.PI,L.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new At(t)),this._credit=t,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=23,l(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new Koe),this._errorEvent=new Se}Object.defineProperties(JZ.prototype,{url:{get:function(){return this._metadata.url}},proxy:{get:function(){return this._metadata.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!1}}});JZ.fromMetadata=function(e,t){if(!e.imageryPresent)throw new ae(`The server ${e.url} doesn't have imagery`);let n=new JZ(t);return n._metadata=e,n};JZ.prototype.getTileCredits=function(e,t,n){let i=this._metadata,o=i.getTileInformation(e,t,n);if(l(o)){let r=i.providers[o.imageryProvider];if(l(r))return[r]}};JZ.prototype.requestImage=function(e,t,n,i){let o=this._tileDiscardPolicy._image,r=this._metadata,s=sb.tileXYToQuadKey(e,t,n),a=r.getTileInformation(e,t,n);if(!l(a)){if(r.isValid(s)){let d=new _r({throttle:i.throttle,throttleByServer:i.throttleByServer,type:i.type,priorityFunction:i.priorityFunction});r.populateSubtree(e,t,n,d);return}return Promise.resolve(o)}if(!a.hasImagery())return Promise.resolve(o);let c=AYt(this,a,e,t,n,i).fetchArrayBuffer();if(l(c))return c.then(function(d){S2(r.key,d);let u=new Uint8Array(d),m,p=r.protoImagery;if((!l(p)||!p)&&(m=EYt(u)),!l(m)&&(!l(p)||p)){let b=LYt(u);m=b.imageType,u=b.imageData}return!l(m)||!l(u)?o:k0({uint8Array:u,format:m,flipY:!0})})};JZ.prototype.pickFeatures=function(e,t,n,i,o){};function AYt(e,t,n,i,o,r){let s=sb.tileXYToQuadKey(n,i,o),a=t.imageryVersion;return a=l(a)&&a>0?a:1,e._metadata.resource.getDerivedResource({url:`flatfile?f1-0${s}-i.${a.toString()}`,request:r})}function EYt(e){let t="JFIF";if(e[6]===t.charCodeAt(0)&&e[7]===t.charCodeAt(1)&&e[8]===t.charCodeAt(2)&&e[9]===t.charCodeAt(3))return"image/jpeg";let n="PNG";if(e[1]===n.charCodeAt(0)&&e[2]===n.charCodeAt(1)&&e[3]===n.charCodeAt(2))return"image/png"}function LYt(e){let t=E2e.Reader.create(e),n=t.len,i={};for(;t.pos<n;){let s=t.uint32(),a;switch(s>>>3){case 1:i.imageType=t.uint32();break;case 2:i.imageData=t.bytes();break;case 3:i.alphaType=t.uint32();break;case 4:i.imageAlpha=t.bytes();break;case 5:if(a=i.copyrightIds,l(a)||(a=i.copyrightIds=[]),(s&7)===2){let c=t.uint32()+t.pos;for(;t.pos<c;)a.push(t.uint32())}else a.push(t.uint32());break;default:t.skipType(s&7);break}}let o=i.imageType;if(l(o))switch(o){case 0:i.imageType="image/jpeg";break;case 4:i.imageType="image/png";break;default:throw new ae("GoogleEarthEnterpriseImageryProvider: Unsupported image type.")}let r=i.alphaType;return l(r)&&r!==0&&(console.log("GoogleEarthEnterpriseImageryProvider: External alpha not supported."),delete i.alphaType,delete i.imageAlpha),i}var Joe=JZ;var qWo=x(T(),1);var WYt=600;function S0(e){e=e??B.EMPTY_OBJECT,this._key=l(e.key)?e.key:ua.defaultApiKey,this._baseResource=ve.createIfNeeded(e.url??ua.streetViewStaticApiEndpoint),this._metadataResource=this._baseResource.getDerivedResource({url:"streetview/metadata"}),this._tileSize=e.tileSize??WYt}Object.defineProperties(S0.prototype,{});S0.prototype.loadPanorama=async function(e){let t=e.cartographic,n=e.tileSize??this._tileSize,i=`${n}x${n}`,o=e.signature,{panoId:r}=e;l(r)||(r=(await this.getNearestPanoId(t)).panoId);let s=ua.getDefaultCredit(),a=h.fromDegrees(L.toDegrees(t.longitude),L.toDegrees(t.latitude),0),c=[this._loadFaceImage({heading:0,pitch:0,tileSizeString:i,panoId:r,signature:o}),this._loadFaceImage({heading:180,pitch:0,tileSizeString:i,panoId:r,signature:o}),this._loadFaceImage({heading:-90,pitch:-90,tileSizeString:i,panoId:r,signature:o}),this._loadFaceImage({heading:-90,pitch:90,tileSizeString:i,panoId:r,signature:o}),this._loadFaceImage({heading:270,pitch:0,tileSizeString:i,panoId:r,signature:o}),this._loadFaceImage({heading:90,pitch:0,tileSizeString:i,panoId:r,signature:o})],[d,u,m,p,b,f]=await Promise.all(c),y=bt.localFrameToFixedFrameGenerator("north","down"),_=I.getMatrix3(y(a,ie.default),new q);return new RZ({sources:{positiveX:d,negativeX:u,positiveY:m,negativeY:p,positiveZ:b,negativeZ:f},transform:_,credit:s})};S0.prototype.getNearestPanoId=async function(e,t){let i=[L.toDegrees(e.latitude),L.toDegrees(e.longitude)].join(","),r=await this._metadataResource.getDerivedResource({queryParameters:{key:this._key,location:i,radius:t??50}}).fetchJson();if(r.status!=="OK")throw new ge(`GoogleStreetViewCubeMapPanoramaProvider metadata error: ${r.status}`);return{panoId:r.pano_id,latitude:r.location.lat,longitude:r.location.lng}};S0.prototype.getPanoIdMetadata=async function(e){let n=await this._metadataResource.getDerivedResource({queryParameters:{key:this._key,pano:e}}).fetchJson();if(n.status!=="OK")throw new ge(`GoogleStreetViewCubeMapPanoramaProvider metadata error: ${n.status}`);return n};S0.prototype._loadFaceImage=async function(e){let t=this._buildFaceUrl(e);try{return await ve.fetchImage({url:t,preferImageBitmap:!0,flipY:!0})}catch{throw new ge(`Failed to load Street View face image: ${t}`)}};S0.prototype._buildFaceUrl=function(e){let{heading:t,pitch:n,tileSizeString:i,panoId:o,signature:r}=e;return this._baseResource.getDerivedResource({queryParameters:{size:i,pano:o,heading:t,pitch:n,key:this._key,...l(r)&&{signature:r}}}).url};S0.fromUrl=async function(e){if(e=e??{},e.key=e.key??ua.defaultStreetViewStaticApiKey??ua.defaultApiKey,!l(e.key)&&!l(ua.defaultStreetViewStaticApiKey)&&!l(ua.defaultApiKey))throw new ge("options.key, GoogleMaps.defaultStreetViewStaticApiKey or GoogleMaps.defaultApiKey is required.");return new S0({...e})};S0._parseMetadata=function(e){return{cartographic:fe.fromDegrees(e.location.lng,e.location.lat,0)}};var joe=S0;var rvo=x(T(),1);var vYt=new U(1,1,1,.4),FYt=new U(0,1,0,.05),IYt=new U(0,.5,0,.2);function jZ(e){e=e??B.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tilingScheme=l(e.tilingScheme)?e.tilingScheme:new Ji({ellipsoid:e.ellipsoid}),this._cells=e.cells??8,this._color=e.color??vYt,this._glowColor=e.glowColor??FYt,this._glowWidth=e.glowWidth??6,this._backgroundColor=e.backgroundColor??IYt,this._errorEvent=new Se,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._canvasSize=e.canvasSize??256,this._canvas=this._createGridCanvas()}Object.defineProperties(jZ.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}});jZ.prototype._drawGrid=function(e){let n=this._canvasSize;for(let i=0;i<=this._cells;++i){let r=1+i/this._cells*(n-1);e.moveTo(r,0),e.lineTo(r,n),e.moveTo(0,r),e.lineTo(n,r)}e.stroke()};jZ.prototype._createGridCanvas=function(){let e=document.createElement("canvas");e.width=this._canvasSize,e.height=this._canvasSize;let t=0,n=this._canvasSize,i=e.getContext("2d"),o=this._backgroundColor.toCssColorString();i.fillStyle=o,i.fillRect(t,t,n,n);let r=this._glowColor.toCssColorString();i.strokeStyle=r,i.lineWidth=this._glowWidth,i.strokeRect(t,t,n,n),this._drawGrid(i),i.lineWidth=this._glowWidth*.5,i.strokeRect(t,t,n,n),this._drawGrid(i);let s=this._color.toCssColorString();return i.strokeStyle=s,i.lineWidth=2,i.strokeRect(t,t,n,n),i.lineWidth=1,this._drawGrid(i),e};jZ.prototype.getTileCredits=function(e,t,n){};jZ.prototype.requestImage=function(e,t,n,i){return Promise.resolve(this._canvas)};jZ.prototype.pickFeatures=function(e,t,n,i,o){};var Qoe=jZ;var Y2o=x(T(),1);var d2o=x(T(),1);var Hvo=x(T(),1);var pvo=x(T(),1);function jf(){}jf._maxDecodingConcurrency=Math.max(hn.hardwareConcurrency-1,1);jf._decodeTaskProcessor=new Jn("decodeI3S",jf._maxDecodingConcurrency);jf._promise=void 0;async function PYt(){if(await jf._decodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/draco_decoder.wasm"}))return jf._decodeTaskProcessor;throw new ae("I3S decoder could not be initialized.")}jf.decode=async function(e,t,n,i,o){return l(jf._promise)||(jf._promise=PYt()),jf._promise.then(function(r){let s=n._parent._data,a=n._parent._inverseRotationMatrix,c=0,d=0,u=0;l(s.obb)?(c=s.obb.center[0],d=s.obb.center[1],u=s.obb.center[2]):l(s.mbs)&&(c=s.mbs[0],d=s.mbs[1],u=s.mbs[2]);let m=q.fromRotationX(-L.PI_OVER_TWO),p=new q;q.multiply(m,a,p);let b=fe.fromDegrees(c,d,u),f=ie.WGS84.cartographicToCartesian(b),y={binaryData:n._data,featureData:l(i)&&l(i[0])?i[0].data:void 0,schema:t,bufferInfo:n._geometryBufferInfo,ellipsoidRadiiSquare:ie.WGS84.radiiSquared,url:e,geoidDataList:n._dataProvider._geoidDataList,cartographicCenter:b,cartesianCenter:f,parentRotation:p,enableFeatures:n._dataProvider.showFeatures,splitGeometryByColorTransparency:n._dataProvider.adjustMaterialAlphaMode,symbologyData:o,calculateNormals:n._dataProvider.calculateNormals};return r.scheduleTask(y)})};var v9=jf;var xvo=x(T(),1);function qoe(e,t){this._parent=e,this._dataProvider=e._dataProvider,this._layer=e._layer,l(this._parent._nodeIndex)?this._resource=this._parent._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.attribute.resource}/${t}`}):this._resource=this._parent.resource.getDerivedResource({url:t})}Object.defineProperties(qoe.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}}});qoe.prototype.load=async function(){return this._data=await Qf.loadJson(this._resource),this._data};var F9=qoe;var Zvo=x(T(),1);function Ug(e,t){this._storageInfo=t,this._parent=e,this._dataProvider=e._dataProvider,this._loadPromise=void 0;let n=`attributes/${t.key}/0`;l(this._parent._nodeIndex)?this._resource=this._parent._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.attribute.resource}/${n}`}):this._resource=this._parent.resource.getDerivedResource({url:n})}Object.defineProperties(Ug.prototype,{resource:{get:function(){return this._resource}},header:{get:function(){return this._header}},values:{get:function(){if(l(this._values)){if(l(this._values.attributeValues))return this._values.attributeValues;if(l(this._values.objectIds))return this._values.objectIds}return[]}},name:{get:function(){return this._storageInfo.name}}});function AH(e){return e==="UInt8"||e==="Int8"?1:e==="UInt16"||e==="Int16"?2:e==="UInt32"||e==="Int32"||e==="Oid32"||e==="Float32"?4:e==="UInt64"||e==="Int64"||e==="Float64"?8:0}function XYt(e){return e==="String"?1:AH(e)}async function NYt(e){let t=await e._dataProvider._loadBinary(e._resource),n=new DataView(t);e._data=t,e._validateHeader(n);let i=e._parseHeader(n),o=e._getBodyOffset(i);e._validateBody(n,o),e._parseBody(n,o)}Ug.prototype.load=function(){return l(this._loadPromise)?this._loadPromise:(this._loadPromise=NYt(this).catch(function(e){console.error(e)}),this._loadPromise)};Ug.prototype._parseValue=function(e,t,n){let i;if(t==="UInt8")i=e.getUint8(n),n+=1;else if(t==="Int8")i=e.getInt8(n),n+=1;else if(t==="UInt16")i=e.getUint16(n,!0),n+=2;else if(t==="Int16")i=e.getInt16(n,!0),n+=2;else if(t==="UInt32")i=e.getUint32(n,!0),n+=4;else if(t==="Oid32")i=e.getUint32(n,!0),n+=4;else if(t==="Int32")i=e.getInt32(n,!0),n+=4;else if(t==="UInt64"){let o=e.getUint32(n,!0),r=e.getUint32(n+4,!0);i=o+Math.pow(2,32)*r,n+=8}else if(t==="Int64"){let o=e.getUint32(n,!0),r=e.getUint32(n+4,!0);r<Math.pow(2,31)?i=o+Math.pow(2,32)*r:i=o+Math.pow(2,32)*(r-Math.pow(2,32)),n+=8}else t==="Float32"?(i=e.getFloat32(n,!0),n+=4):t==="Float64"?(i=e.getFloat64(n,!0),n+=8):t==="String"&&(i=String.fromCharCode(e.getUint8(n)),n+=1);return{value:i,offset:n}};Ug.prototype._parseHeader=function(e){let t=0;this._header={};for(let n=0;n<this._storageInfo.header.length;n++){let i=this._storageInfo.header[n],o=this._parseValue(e,i.valueType,t);this._header[i.property]=o.value,t=o.offset}return t};Ug.prototype._parseBody=function(e,t){this._values={};for(let n=0;n<this._storageInfo.ordering.length;n++){let i=this._storageInfo.ordering[n],o=i==="ObjectIds"?"objectIds":i,r=this._storageInfo[o];if(l(r)){this._values[o]=[];for(let s=0;s<this._header.count;++s)if(r.valueType!=="String"){let a=this._parseValue(e,r.valueType,t);this._values[o].push(a.value),t=a.offset}else{let a=this._values.attributeByteCounts[s],c="";for(let d=0;d<a;++d){let u=this._parseValue(e,r.valueType,t);u.value.charCodeAt(0)!==0&&(c+=u.value),t=u.offset}this._values[o].push(c)}}}};Ug.prototype._getBodyOffset=function(e){let t=0;return l(this._storageInfo.attributeValues)?t=AH(this._storageInfo.attributeValues.valueType):l(this._storageInfo.objectIds)&&(t=AH(this._storageInfo.objectIds.valueType)),t>0?Math.ceil(e/t)*t:e};Ug.prototype._validateHeader=function(e){let t=0;for(let n=0;n<this._storageInfo.header.length;n++){let i=this._storageInfo.header[n];t+=XYt(i.valueType)}if(e.byteLength<t)throw new ae(`Invalid attribute buffer size (field: ${this.name}, header: ${t}, actual: ${e.byteLength})`)};Ug.prototype._validateBody=function(e,t){if(!l(this._header.count))throw new ae(`Invalid attribute buffer (field: ${this.name}, count is missing)`);let n;for(let i=0;i<this._storageInfo.ordering.length&&t<e.byteLength;i++){let o=this._storageInfo.ordering[i],r=o==="ObjectIds"?"objectIds":o,s=this._storageInfo[r];if(l(s))if(s.valueType!=="String"){r==="attributeByteCounts"&&(n=t);let a=AH(s.valueType);t+=a*this._header.count}else{if(!l(n))throw new ae(`Invalid attribute buffer (field: ${this.name}, attributeByteCounts is missing)`);for(let a=0;a<this._header.count&&t<e.byteLength;++a){let c=this._parseValue(e,this._storageInfo.attributeByteCounts.valueType,n);t+=c.value,n=c.offset}}else throw new ae(`Invalid attribute buffer (field: ${this.name}, ${r} is missing)`)}if(e.byteLength<t)throw new ae(`Invalid attribute buffer size (field: ${this.name}, expected: ${t}, actual: ${e.byteLength})`)};var I9=Ug;var Lvo=x(T(),1);function P9(e,t){let n=e._dataProvider,i=e._layer,o;l(e._nodeIndex)?o=i.resource.getDerivedResource({url:`nodes/${e._data.mesh.geometry.resource}/${t}`}):o=e.resource.getDerivedResource({url:t}),this._parent=e,this._dataProvider=n,this._layer=i,this._resource=o,this._customAttributes=void 0}Object.defineProperties(P9.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},customAttributes:{get:function(){return this._customAttributes}}});P9.prototype.load=function(){let e=this;return this._dataProvider._loadBinary(this._resource).then(function(t){return e._data=t,t})};var YYt=new h,wYt=new h,MYt=new h,kYt=new h,UYt=new h;function $oe(e,t,n,i){let o=h.subtract(i,n,YYt),r=h.cross(o,h.subtract(e,n,wYt),kYt),s=h.cross(o,h.subtract(t,n,MYt),UYt);return h.dot(r,s)>=0}var DYt=new h,OYt=new h,BYt=new h,zYt=new h,HYt=new h,KYt=new h,JYt=new h,jYt=new h,QYt=new h,qYt=new h;P9.prototype.getClosestPointIndexOnTriangle=function(e,t,n){if(l(this._customAttributes)&&l(this._customAttributes.positions)){let i=new h(e,t,n);i.x-=this._customAttributes.cartesianCenter.x,i.y-=this._customAttributes.cartesianCenter.y,i.z-=this._customAttributes.cartesianCenter.z,q.multiplyByVector(this._customAttributes.parentRotation,i,i);let o=Number.MAX_VALUE,r,s,a,c,d=this._customAttributes.positions,u=this._customAttributes.indices,m;l(u)?m=u.length:m=d.length/3;for(let p=0;p<m;p++){let b,f,y;l(u)?(b=u[p],f=u[p+1],y=u[p+2]):(b=p*3,f=p*3+1,y=p*3+2);let _=h.fromElements(d[b*3],d[b*3+1],d[b*3+2],DYt),S=h.fromElements(d[f*3],d[f*3+1],d[f*3+2],OYt),Z=new h(d[y*3],d[y*3+1],d[y*3+2],BYt);if(!$oe(i,_,S,Z)||!$oe(i,S,_,Z)||!$oe(i,Z,_,S))continue;let V=h.subtract(S,_,zYt),C=h.subtract(Z,_,HYt),G=h.cross(V,C,KYt);if(h.magnitude(G)===0)continue;let E=h.normalize(G,JYt),v=h.subtract(i,_,jYt),F=Math.abs(h.dot(v,E));if(F<o){o=F,r=p;let P=h.magnitudeSquared(h.subtract(i,_,v)),N=h.magnitudeSquared(h.subtract(i,S,QYt)),g=h.magnitudeSquared(h.subtract(i,Z,qYt));P<N&&P<g?(a=b,c=_,s=P):N<g?(a=f,c=S,s=N):(a=y,c=Z,s=g)}}if(l(r))return{index:a,distanceSquared:s,distance:Math.sqrt(s),queriedPosition:i,closestPosition:h.clone(c)}}return{index:-1,distanceSquared:Number.Infinity,distance:Number.Infinity}};function L2e(e){let t=[],n=e.length;for(let i=0;i<n;i++)i<3?t.push(A_(e[i])):t.push(e[i]);return t}P9.prototype._generateGltf=function(e,t,n,i,o,r,s,a){let c={pbrMetallicRoughness:{metallicFactor:0},doubleSided:!0,name:"Material"},d=!1,u,m="";if(l(this._parent._data.mesh)&&l(this._layer._data.materialDefinitions)){let V=this._parent._data.mesh.material.definition;if(V>=0&&V<this._layer._data.materialDefinitions.length){if(u=this._layer._data.materialDefinitions[V],c=u,l(c.pbrMetallicRoughness)&&l(c.pbrMetallicRoughness.baseColorTexture)){d=!0,c.pbrMetallicRoughness.baseColorTexture.index=0;let C="0";if(l(this._layer._data.textureSetDefinitions))for(let G=0;G<this._layer._data.textureSetDefinitions.length;G++){let E=this._layer._data.textureSetDefinitions[G];for(let v=0;v<E.formats.length;v++){let F=E.formats[v];if(F.format==="jpg"){C=F.name;break}}}l(this._parent._data.mesh)&&this._parent._data.mesh.material.resource>=0&&(m=this._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.material.resource}/textures/${C}`}).url)}l(c.pbrMetallicRoughness)&&l(c.pbrMetallicRoughness.baseColorFactor)&&(c.pbrMetallicRoughness.baseColorFactor=L2e(c.pbrMetallicRoughness.baseColorFactor)),l(c.emissiveFactor)&&(c.emissiveFactor=L2e(c.emissiveFactor))}}else l(this._parent._data.textureData)&&(d=!0,m=this._parent.resource.getDerivedResource({url:`${this._parent._data.textureData[0].href}`}).url,c.pbrMetallicRoughness.baseColorTexture={index:0});l(c.alphaMode)&&(c.alphaMode=c.alphaMode.toUpperCase());let p=[],b=[],f=[];d&&(p=[{sampler:0,source:0}],b=[{uri:m}],f=[{magFilter:9729,minFilter:9986,wrapS:10497,wrapT:10497}]);let y=[],_=n.length;for(let Z=0;Z<_;Z++){let V=n[Z].primitives,C=V.length;for(let G=0;G<C;G++){let E=V[G];if(l(E.material)){for(;E.material>=y.length;){let F=Je(c,!0);y.push(F)}let v=y[E.material];l(E.extra)&&E.extra.isTransparent?l(v.alphaMode)||(v.alphaMode="BLEND"):v.alphaMode==="BLEND"&&(v.alphaMode="OPAQUE")}}}return{scene:0,scenes:[{nodes:e}],nodes:t,meshes:n,buffers:i,bufferViews:o,accessors:r,materials:y,textures:p,images:b,samplers:f,asset:{version:"2.0"},extensions:s,extensionsUsed:a}};var WG=P9;function xl(e,t,n){let i,o,r,s;n?(i=0,o=e):(i=e._level+1,o=e._layer),typeof t=="number"?r=t:s=e.resource.getDerivedResource({url:`${t}/`}),this._parent=e,this._dataProvider=e._dataProvider,this._isRoot=n,this._level=i,this._layer=o,this._nodeIndex=r,this._resource=s,this._isLoading=!1,this._tile=void 0,this._data=void 0,this._geometryData=[],this._featureData=[],this._fields={},this._children=[],this._childrenReadyPromise=void 0,this._globalTransform=void 0,this._inverseGlobalTransform=void 0,this._inverseRotationMatrix=void 0,this._symbologyData=void 0}Object.defineProperties(xl.prototype,{resource:{get:function(){return this._resource}},layer:{get:function(){return this._layer}},parent:{get:function(){return this._parent}},children:{get:function(){return this._children}},geometryData:{get:function(){return this._geometryData}},featureData:{get:function(){return this._featureData}},fields:{get:function(){return this._fields}},tile:{get:function(){return this._tile}},data:{get:function(){return this._data}}});xl.prototype.load=async function(){let e=this;function t(){if(!e._isRoot){let o=e._create3DTileDefinition();e._tile=new eh(e._layer._tileset,e._dataProvider.resource,o,e._parent._tile),e._tile._i3sNode=e}}if(!l(this._nodeIndex)){let o=await Qf.loadJson(this._resource);e._data=o,t();return}let n=await this._layer._getNodeInNodePages(this._nodeIndex);e._data=n;let i;e._isRoot?i="nodes/root/":l(n.mesh)&&(i=`../${n.mesh.geometry.resource}/`),l(i)&&l(e._parent.resource)&&(e._resource=e._parent.resource.getDerivedResource({url:i})),t()};function W2e(e,t){let n=new I9(e,t);return e._fields[t.name]=n,n.load()}xl.prototype.loadFields=function(){let e=this._layer._data.attributeStorageInfo,t=[];if(l(e))for(let n=0;n<e.length;n++){let i=e[n],o=this._fields[i.name];l(o)?t.push(o.load()):t.push(W2e(this,i))}return Promise.all(t)};xl.prototype.loadField=function(e){let t=this._fields[e];if(l(t))return t.load();let n=this._layer._data.attributeStorageInfo;if(l(n))for(let i=0;i<n.length;i++){let o=n[i];if(o.name===e)return W2e(this,o)}return Promise.resolve()};xl.prototype.getFieldsForPickedPosition=function(e){let t=this.geometryData[0];if(!l(t.customAttributes.featureIndex))return{};let n=t.getClosestPointIndexOnTriangle(e.x,e.y,e.z);if(n.index===-1||n.index>t.customAttributes.featureIndex.length)return{};let i=t.customAttributes.featureIndex[n.index];return this.getFieldsForFeature(i)};xl.prototype.getFieldsForFeature=function(e){let t={};for(let n in this.fields)if(this.fields.hasOwnProperty(n)){let i=this.fields[n];e>=0&&e<i.values.length&&(t[i.name]=i.values[e])}return t};xl.prototype._loadChildren=function(){let e=this;if(l(this._childrenReadyPromise))return this._childrenReadyPromise;let t=[];if(l(e._data.children))for(let n=0;n<e._data.children.length;n++){let i=e._data.children[n],o=new xl(e,i.href??i,!1);e._children.push(o),t.push(o.load())}return this._childrenReadyPromise=Promise.all(t).then(function(){for(let n=0;n<e._children.length;n++)e._tile.children.push(e._children[n]._tile)}),this._childrenReadyPromise};xl.prototype._loadGeometryData=function(){let e=[];if(l(this._data.geometryData))for(let t=0;t<this._data.geometryData.length;t++){let n=new WG(this,this._data.geometryData[t].href);this._geometryData.push(n),e.push(n.load())}else if(l(this._data.mesh)){let t=this._layer._findBestGeometryBuffers(this._data.mesh.geometry.definition,["position","uv0"]),n=`./geometries/${t.bufferIndex}/`,i=new WG(this,n);i._geometryDefinitions=t.definition,i._geometryBufferInfo=t.geometryBufferInfo,this._geometryData.push(i),e.push(i.load())}return Promise.all(e)};xl.prototype._loadFeatureData=function(){let e=[];if(l(this._data.featureData))for(let t=0;t<this._data.featureData.length;t++){let n=new F9(this,this._data.featureData[t].href);this._featureData.push(n),e.push(n.load())}return Promise.all(e)};xl.prototype._clearGeometryData=function(){this._geometryData=[]};xl.prototype._create3DTileDefinition=function(){let e=this._data.obb,t=this._data.mbs;if(!l(e)&&!l(t)){console.error("Failed to load I3S node. Bounding volume is required.");return}let n;if(l(e)?n=fe.fromDegrees(e.center[0],e.center[1],e.center[2]):n=fe.fromDegrees(t[0],t[1],t[2]),l(this._dataProvider._geoidDataList)&&l(n))for(let S=0;S<this._dataProvider._geoidDataList.length;S++){let Z=this._dataProvider._geoidDataList[S],V=Z.projection.project(n);if(V.x>Z.nativeExtent.west&&V.x<Z.nativeExtent.east&&V.y>Z.nativeExtent.south&&V.y<Z.nativeExtent.north){n.height+=nwt(V.x,V.y,Z);break}}let i,o,r;l(e)?(i={box:[0,0,0,e.halfSize[0],0,0,0,e.halfSize[1],0,0,0,e.halfSize[2]]},r=Math.max(Math.max(this._data.obb.halfSize[0],this._data.obb.halfSize[1]),this._data.obb.halfSize[2]),o=ie.WGS84.cartographicToCartesian(n)):(i={sphere:[0,0,0,t[3]]},o=ie.WGS84.cartographicToCartesian(n),r=this._data.mbs[3]),r*=2;let s=1/0;if(l(this._data.lodThreshold))if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThresholdSQ"){let S=Math.sqrt(this._data.lodThreshold/(Math.PI*.25));s=r/S}else if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThreshold"){let S=this._data.lodThreshold;s=r/S}else console.error("Invalid lodSelectionMetricType in Layer");else if(l(this._data.lodSelection))for(let S=0;S<this._data.lodSelection.length;S++)this._data.lodSelection[S].metricType==="maxScreenThreshold"&&(s=r/this._data.lodSelection[S].maxError);s===1/0&&(s=1e5);let a=s*16,c=new Tc(0,0,0),d=bt.headingPitchRollQuaternion(o,c);l(this._data.obb)&&(d=new Ye(this._data.obb.quaternion[0],this._data.obb.quaternion[1],this._data.obb.quaternion[2],this._data.obb.quaternion[3]));let u=q.fromQuaternion(d),m=q.inverse(u,new q),p=new I(u[0],u[1],u[2],0,u[3],u[4],u[5],0,u[6],u[7],u[8],0,o.x,o.y,o.z,1),b=I.inverse(p,new I),f=I.clone(p);l(this._parent._globalTransform)&&I.multiply(p,this._parent._inverseGlobalTransform,f),this._globalTransform=p,this._inverseGlobalTransform=b,this._inverseRotationMatrix=m;let y=[];for(let S=0;S<this._children.length;S++)y.push(this._children[S]._create3DTileDefinition());return{children:y,refine:"REPLACE",boundingVolume:i,transform:[f[0],f[4],f[8],f[12],f[1],f[5],f[9],f[13],f[2],f[6],f[10],f[14],f[3],f[7],f[11],f[15]],content:{uri:l(this._resource)?this._resource.url:void 0},geometricError:a}};xl.prototype._loadSymbology=async function(){!l(this._symbologyData)&&l(this._layer._symbology)&&(this._symbologyData=await this._layer._symbology._getSymbology(this))};xl.prototype._createContentURL=async function(){let e={scene:0,scenes:[{nodes:[0]}],nodes:[{name:"singleNode"}],meshes:[],buffers:[],bufferViews:[],accessors:[],materials:[],textures:[],images:[],samplers:[],asset:{version:"2.0"}},t=[this._loadGeometryData()];if(this._dataProvider.legacyVersion16&&t.push(this._loadFeatureData()),await Promise.all(t),l(this._geometryData)&&this._geometryData.length>0){this._dataProvider._applySymbology&&await this._loadSymbology();let o=this._geometryData[0].resource.url,r=this._layer._data.store.defaultGeometrySchema,s=this._geometryData[0],a=await v9.decode(o,r,s,this._featureData[0],this._symbologyData);if(!l(a))return;e=s._generateGltf(a.meshData.nodesInScene,a.meshData.nodes,a.meshData.meshes,a.meshData.buffers,a.meshData.bufferViews,a.meshData.accessors,a.meshData.rootExtensions,a.meshData.extensionsUsed),this._geometryData[0]._customAttributes=a.meshData._customAttributes}let n=this._dataProvider._binarizeGltf(e),i=new Blob([n],{type:"application/binary"});return URL.createObjectURL(i)};async function $Yt(e){let t=e._layer._filters,n=[];for(let i=0;i<t.length;i++){let o=e.loadField(t[i].name);n.push(o)}return await Promise.all(n),t}function ewt(e,t,n){if(!l(n.values)||n.values.length===0)return!1;let i=l(t)?t.values:[],o;e<i.length&&(o=i[e]);let r=!1;for(let s=0;s<n.values.length;s++)if(n.values[s]===o){r=!0;break}return r}async function v2e(e,t){let n=e._tile.content.batchTable;if(l(n)&&n.featuresLength>0){n.setAllShow(!0);let i=await $Yt(e);if(i.length>0)for(let o=0;o<n.featuresLength;o++)for(let r=0;r<i.length;r++){let s=i[r];if(!ewt(o,e._fields[s.name],s)){n.setShow(o,!1);break}}}t.show=!0}xl.prototype._filterFeatures=function(){let e=[];for(let n=0;n<this._children.length;n++){let i=this._children[n]._filterFeatures();e.push(i)}let t=this._tile?.content?._model;if(l(this._geometryData)&&this._geometryData.length>0&&l(t)&&t.ready){t.show=!1;let n=v2e(this,t);e.push(n)}return Promise.all(e)};eh.prototype._hookedRequestContent=eh.prototype.requestContent;eh.prototype.requestContent=function(){if(!this.tileset._isI3STileSet)return this._hookedRequestContent();if(!this._isLoading){this._isLoading=!0;let e=this;return this._i3sNode._createContentURL().then(t=>{if(!l(t)){e._isLoading=!1;return}return e._contentResource=new ve({url:t}),e._hookedRequestContent()}).then(t=>{let n=t?._model;return l(e._i3sNode._geometryData)&&e._i3sNode._geometryData.length>0&&l(n)&&(n.show=!1,n.readyEvent.addEventListener(()=>{v2e(e._i3sNode,n)})),e._isLoading=!1,t})}};function twt(e,t,n,i,o,r){let s=n*(1-e)+i*e,a=o*(1-e)+r*e;return s*(1-t)+a*t}function EH(e,t,n,i){let o=e+t*n;return i[o]}function nwt(e,t,n){let i=n.nativeExtent,o=(e-i.west)/(i.east-i.west)*(n.width-1),r=(t-i.south)/(i.north-i.south)*(n.height-1),s=Math.floor(o),a=Math.floor(r);o-=s,r-=a;let c=s<n.width?s+1:s,d=a<n.height?a+1:a;a=n.height-1-a,d=n.height-1-d;let u=EH(s,a,n.width,n.buffer),m=EH(c,a,n.width,n.buffer),p=EH(s,d,n.width,n.buffer),b=EH(c,d,n.width,n.buffer),f=twt(o,r,u,m,p,b);return f=f*n.scale+n.offset,f}Object.defineProperties(eh.prototype,{i3sNode:{get:function(){return this._i3sNode}}});var vG=xl;var qvo=x(T(),1);function LH(e){this._layer=e,this._defaultSymbology=void 0,this._valueFields=[],this._uniqueValueHash=void 0,this._classBreaksHash=void 0,this._parseLayerSymbology()}Object.defineProperties(LH.prototype,{defaultSymbology:{get:function(){return this._defaultSymbology}}});function ere(e,t){let n=[];for(let i=0;i<e.length;i++){let o=U.byteToFloat(e[i]);i<3?n.push(A_(o)):n.push(o)}return n.length===3&&(l(t)?n.push(1-t/100):n.push(1)),n}function FG(e,t){let n={edges:void 0,material:void 0};if(l(e)&&l(e.symbolLayers))for(let i=0;i<e.symbolLayers.length;i++){let o=e.symbolLayers[i];if(o.type==="Fill"){let r=o.edges,s=o.outline;if(l(r)?(n.edges={},l(r.color)&&(n.edges.color=ere(r.color,r.transparency))):l(s)&&(n.edges={},l(s.color)&&(n.edges.color=ere(s.color,s.transparency))),!t){let a=o.material;l(a)&&(n.material={colorMixMode:a.colorMixMode},l(a.color)&&(n.material.color=ere(a.color,a.transparency)))}break}}return n}function iwt(e,t){if(l(e.uniqueValueGroups)){let n={};for(let i=0;i<e.uniqueValueGroups.length;i++){let o=e.uniqueValueGroups[i].classes;if(l(o))for(let r=0;r<o.length;r++){let s=FG(o[r].symbol,t),a=o[r].values;for(let c=0;c<a.length;c++){let d=a[c],u=n;for(let m=0;m<d.length;m++){let p=d[m];m===d.length-1?u[p]=s:(l(u[p])||(u[p]={}),u=u[p])}}}}return n}if(l(e.uniqueValueInfos)){let n={};for(let i=0;i<e.uniqueValueInfos.length;i++){let o=e.uniqueValueInfos[i];n[o.value]=FG(o.symbol,t)}return n}}function owt(e,t){if(l(e.classBreakInfos)){let n=[...e.classBreakInfos];n.sort(function(o,r){let s=o.classMaxValue??o.classMinValue,a=r.classMaxValue??r.classMinValue;return s-a});let i={ranges:[],symbols:[]};l(e.minValue)&&(i.ranges.push(e.minValue),i.symbols.push(void 0));for(let o=0;o<n.length;o++){let r=n[o];l(r.classMinValue)&&(i.ranges.length===0||r.classMinValue>i.ranges[i.ranges.length-1])&&(i.ranges.push(r.classMinValue),i.symbols.push(void 0)),l(r.classMaxValue)&&(i.ranges.length===0||r.classMaxValue>i.ranges[i.ranges.length-1])&&(i.ranges.push(r.classMaxValue),i.symbols.push(FG(r.symbol,t)))}return i.symbols.push(void 0),i}}LH.prototype._parseLayerSymbology=function(){let e=this._layer.data.drawingInfo;if(l(e)&&l(e.renderer)){let t=this._layer.data.cachedDrawingInfo,n=l(t)&&t.color===!0,i=e.renderer;i.type==="simple"?this._defaultSymbology=FG(i.symbol,n):i.type==="uniqueValue"?(this._defaultSymbology=FG(i.defaultSymbol,n),this._valueFields.push(i.field1),l(i.field2)&&this._valueFields.push(i.field2),l(i.field3)&&this._valueFields.push(i.field3),this._uniqueValueHash=iwt(i,n)):i.type==="classBreaks"&&(this._defaultSymbology=FG(i.defaultSymbol,n),this._valueFields.push(i.field),this._classBreaksHash=owt(i,n))}};function F2e(e,t,n,i){let o=t[n];if(i<o.length){let r=o[i],s=e[r];return l(s)&&++n<t.length?F2e(s,t,n,i):s}}function rwt(e,t){let n=0,i=e.length;if(n<i)do{let o=n+i>>>1;e[o]<t?n=o+1:i=o}while(n<i);return n}function swt(e,t,n){let i=t[n],o=rwt(e.ranges,i);return e.symbols[o]}LH.prototype._getSymbology=async function(e){let t={default:this._defaultSymbology};if(this._valueFields.length>0){let n=[];for(let r=0;r<this._valueFields.length;r++)n.push(e.loadField(this._valueFields[r]));await Promise.all(n);let i=[];for(let r=0;r<this._valueFields.length;r++)i.push(e.fields[this._valueFields[r]].values);let o;if(l(this._uniqueValueHash)?o=r=>F2e(this._uniqueValueHash,i,0,r):l(this._classBreaksHash)&&(o=r=>swt(this._classBreaksHash,i[0],r)),l(o)){let r=i[0];for(let s=0;s<r.length;s++){let a=o(s);l(a)&&(t[s]=a)}}}return t};var X9=LH;function Qd(e,t,n){this._dataProvider=e,this._parent=n,!l(t.href)&&l(t.id)&&(t.href=`layers/${t.id}`);let i=this._parent.resource.getUrlComponent(),o;i.match(/layers\/\d/)?o=`${i}`.replace(/\/+$/,""):o=`${i}`.replace(/\/?$/,"/").concat(`${t.href}`),this._version=t.store.version;let r=this._version.split(".");this._majorVersion=parseInt(r[0]),this._minorVersion=r.length>1?parseInt(r[1]):0,this._resource=new ve({url:o}),this._resource.setQueryParameters(this._dataProvider.resource.queryParameters),this._resource.appendForwardSlash(),this._data=t,this._rootNode=void 0,this._nodePages={},this._nodePageFetches={},this._extent=void 0,this._tileset=void 0,this._geometryDefinitions=void 0,this._filters=[],this._symbology=void 0,this._computeGeometryDefinitions(!0),this._computeExtent()}Object.defineProperties(Qd.prototype,{resource:{get:function(){return this._resource}},rootNode:{get:function(){return this._rootNode}},tileset:{get:function(){return this._tileset}},data:{get:function(){return this._data}},version:{get:function(){return this._version}},majorVersion:{get:function(){return this._majorVersion}},minorVersion:{get:function(){return this._minorVersion}},legacyVersion16:{get:function(){if(l(this.version))return this.majorVersion<1||this.majorVersion===1&&this.minorVersion<=6}}});Qd.prototype.load=async function(e){if(this._data.spatialReference.wkid!==4326)throw new ae(`Unsupported spatial reference: ${this._data.spatialReference.wkid}`);if(this._dataProvider.applySymbology&&(this._symbology=new X9(this)),await this._dataProvider.loadGeoidData(),await this._loadRootNode(e),await this._create3DTileset(e),this._rootNode._tile=this._tileset._root,this._tileset._root._i3sNode=this._rootNode,this.legacyVersion16)return this._rootNode._loadChildren()};Qd.prototype._computeGeometryDefinitions=function(e){if(this._geometryDefinitions=[],l(this._data.geometryDefinitions))for(let t=0;t<this._data.geometryDefinitions.length;t++){let n=[],i=this._data.geometryDefinitions[t].geometryBuffers;for(let o=0;o<i.length;o++){let r=i[o],s=[],a=!1;if(l(r.compressedAttributes)&&e){a=!0;let c=r.compressedAttributes.attributes;for(let d=0;d<c.length;d++)s.push(c[d])}else for(let c in r)c!=="offset"&&s.push(c);n.push({compressed:a,attributes:s,index:i.indexOf(r)})}n.sort(function(o,r){return o.compressed&&!r.compressed?-1:!o.compressed&&r.compressed?1:o.attributes.length-r.attributes.length}),this._geometryDefinitions.push(n)}};Qd.prototype._findBestGeometryBuffers=function(e,t){let n=this._geometryDefinitions[e];if(l(n)){for(let i=0;i<n.length;++i){let o=n[i],r=!1,s=o.attributes;for(let a=0;a<t.length;a++)if(!s.includes(t[a])){r=!0;break}if(!r)return{bufferIndex:o.index,definition:n,geometryBufferInfo:o}}if(l(n[0]))return{bufferIndex:0,definition:n,geometryBufferInfo:n[0]}}};Qd.prototype._loadRootNode=function(e){if(l(this._data.nodePages)){let t=0;l(this._data.nodePages.rootIndex)&&(t=this._data.nodePages.rootIndex),this._rootNode=new vG(this,t,!0)}else this._rootNode=new vG(this,this._data.store.rootNode,!0);return this._rootNode.load(e)};Qd.prototype._getNodeInNodePages=function(e){let t=Math.floor(e/this._data.nodePages.nodesPerPage),n=e%this._data.nodePages.nodesPerPage;return this._loadNodePage(t).then(function(i){return i.nodes[n]})};Qd._fetchJson=function(e){return e.fetchJson()};Qd.prototype._loadNodePage=function(e){let t=this;if(!l(this._nodePageFetches[e])){let n=this.resource.getDerivedResource({url:`nodepages/${e}/`}),i=Qd._fetchJson(n).then(function(o){return l(o.error)&&o.error.code!==200?Promise.reject(o.error):(t._nodePages[e]=o.nodes,o)});this._nodePageFetches[e]=i}return this._nodePageFetches[e]};Qd.prototype._computeExtent=function(){l(this._data.fullExtent)?this._extent=re.fromDegrees(this._data.fullExtent.xmin,this._data.fullExtent.ymin,this._data.fullExtent.xmax,this._data.fullExtent.ymax):l(this._data.store.extent)&&(this._extent=re.fromDegrees(this._data.store.extent[0],this._data.store.extent[1],this._data.store.extent[2],this._data.store.extent[3]))};Qd.prototype._create3DTileset=async function(e){let t={asset:{version:"1.0"},geometricError:Number.MAX_VALUE,root:this._rootNode._create3DTileDefinition()},n=new Blob([JSON.stringify(t)],{type:"application/json"}),i=URL.createObjectURL(n),o=this._symbology?.defaultSymbology?.edges?.color;l(o)&&!l(e?.outlineColor)&&(e=l(e)?Je(e):{},e.outlineColor=U.fromCartesian4(ce.fromArray(o))),this._tileset=await wr.fromUrl(i,e),this._tileset.show=this._parent.show,this._tileset._isI3STileSet=!0,this._tileset.tileUnload.addEventListener(function(r){r._i3sNode._clearGeometryData(),URL.revokeObjectURL(r._contentResource._url),r._contentResource=r._i3sNode.resource}),this._tileset.tileVisible.addEventListener(function(r){l(r._i3sNode)&&r._i3sNode._loadChildren()})};Qd.prototype._updateVisibility=function(){l(this._tileset)&&(this._tileset.show=this._parent.show)};Qd.prototype.filterByAttributes=function(e){this._filters=l(e)?Je(e,!0):[];let t=this._rootNode;return l(t)?t._filterFeatures():Promise.resolve()};var QZ=Qd;var p2o=x(T(),1);function WH(e,t){this._dataProvider=e,this._resource=new ve({url:t}),this._resource.setQueryParameters(e.resource.queryParameters),this._resource.appendForwardSlash()}Object.defineProperties(WH.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},names:{get:function(){let e=[],t=this._data.summary;if(l(t))for(let n=0;n<t.length;++n)e.push(t[n].fieldName);return e}}});WH.prototype.load=async function(){return this._data=await Qf.loadJson(this._resource),this._data};WH.prototype._getValues=function(e){let t=this._data.summary;if(l(t))for(let n=0;n<t.length;++n){let i=t[n];if(i.fieldName===e)return l(i.mostFrequentValues)?[...i.mostFrequentValues]:[]}};var N9=WH;var _2o=x(T(),1);function Y9(e,t,n){this._dataProvider=e,this._parent=t,this._data=n,this._name=n.name,this._modelName=n.modelName,this._visibility=n.visibility??!0,this._resource=void 0,this._sublayers=[],this._i3sLayers=[]}Object.defineProperties(Y9.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},name:{get:function(){return this._name}},modelName:{get:function(){return this._modelName}},sublayers:{get:function(){return this._sublayers}},visibility:{get:function(){return this._visibility},set:function(e){if(this._visibility!==e){this._visibility=e;for(let t=0;t<this._i3sLayers.length;t++)this._i3sLayers[t]._updateVisibility()}}},show:{get:function(){return this._visibility&&this._parent.show}}});Y9._fromData=async function(e,t,n,i){let o=new Y9(e,i,n);if(o._data.layerType==="group"){let r=o._data.sublayers;if(l(r)){let s=[];for(let c=0;c<r.length;c++){let d=Y9._fromData(e,t,r[c],o);s.push(d)}let a=await Promise.all(s);for(let c=0;c<a.length;c++){let d=a[c];o._sublayers.push(d),o._i3sLayers.push(...d._i3sLayers)}}}else if(o._data.layerType==="3DObject"){let r=t.concat(`/sublayers/${o._data.id}`),s=new ve({url:r});s.setQueryParameters(e.resource.queryParameters),s.appendForwardSlash(),o._resource=s;let a=await Qf.loadJson(o._resource),c=new QZ(e,a,o);o._i3sLayers.push(c)}else console.log(`${o._data.layerType} layer ${o._data.name} is skipped as not supported.`);return o};var w9=Y9;var X2e=x(I2e(),1);function na(e){e=e??B.EMPTY_OBJECT,this._name=e.name,this._show=e.show??!0,this._geoidTiledTerrainProvider=e.geoidTiledTerrainProvider,this._showFeatures=e.showFeatures??!1,this._adjustMaterialAlphaMode=e.adjustMaterialAlphaMode??!1,this._applySymbology=e.applySymbology??!1,this._calculateNormals=e.calculateNormals??!1,this._cesium3dTilesetOptions=e.cesium3dTilesetOptions??B.EMPTY_OBJECT,this._layers=[],this._sublayers=[],this._data=void 0,this._extent=void 0,this._geoidDataPromise=void 0,this._geoidDataList=void 0,this._decoderTaskProcessor=void 0,this._taskProcessorReadyPromise=void 0,this._attributeStatistics=[],this._layersExtent=[]}Object.defineProperties(na.prototype,{name:{get:function(){return this._name}},show:{get:function(){return this._show},set:function(e){if(this._show!==e){this._show=e;for(let t=0;t<this._layers.length;t++)this._layers[t]._updateVisibility()}}},geoidTiledTerrainProvider:{get:function(){return this._geoidTiledTerrainProvider}},layers:{get:function(){return this._layers}},sublayers:{get:function(){return this._sublayers}},data:{get:function(){return this._data}},extent:{get:function(){return this._extent}},resource:{get:function(){return this._resource}},showFeatures:{get:function(){return this._showFeatures}},adjustMaterialAlphaMode:{get:function(){return this._adjustMaterialAlphaMode}},applySymbology:{get:function(){return this._applySymbology}},calculateNormals:{get:function(){return this._calculateNormals}}});na.prototype.destroy=function(){for(let e=0;e<this._layers.length;e++)l(this._layers[e]._tileset)&&this._layers[e]._tileset.destroy();return me(this)};na.prototype.isDestroyed=function(){return!1};na.prototype.update=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.update(e)};na.prototype.prePassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.prePassesUpdate(e)};na.prototype.postPassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.postPassesUpdate(e)};na.prototype.updateForPass=function(e,t){for(let n=0;n<this._layers.length;n++)l(this._layers[n]._tileset)&&this._layers[n]._tileset.updateForPass(e,t)};function awt(e,t){let n=e.resource.getUrlComponent(),i;return n.match(/layers\/\d/)?i=`${n}`.replace(/\/+$/,""):i=`${n}`.replace(/\/?$/,"/").concat(`layers/${t}`),i}async function P2e(e,t,n){if(t.layerType==="Building"){l(n.showFeatures)||(e._showFeatures=!0),l(n.adjustMaterialAlphaMode)||(e._adjustMaterialAlphaMode=!0),l(n.applySymbology)||(e._applySymbology=!0),l(n.calculateNormals)||(e._calculateNormals=!0);let i=awt(e,t.id);if(l(t.sublayers)){let o=[];for(let s=0;s<t.sublayers.length;s++){let a=w9._fromData(e,i,t.sublayers[s],e);o.push(a)}let r=await Promise.all(o);for(let s=0;s<r.length;s++){let a=r[s];e._sublayers.push(a),e._layers.push(...a._i3sLayers)}}if(l(t.statisticsHRef)){let o=i.concat(`/${t.statisticsHRef}`),r=new N9(e,o);await r.load(),e._attributeStatistics.push(r)}if(l(t.fullExtent)){let o=re.fromDegrees(t.fullExtent.xmin,t.fullExtent.ymin,t.fullExtent.xmax,t.fullExtent.ymax);e._layersExtent.push(o)}}else if(t.layerType==="3DObject"||t.layerType==="IntegratedMesh"){!l(n.calculateNormals)&&!l(t.textureSetDefinitions)&&(e._calculateNormals=!0);let i=new QZ(e,t,e);e._layers.push(i),l(i._extent)&&e._layersExtent.push(i._extent)}else console.log(`${t.layerType} layer ${t.name} is skipped as not supported.`)}na.fromUrl=async function(e,t){t=t??B.EMPTY_OBJECT;let n=ve.createIfNeeded(e);n.setQueryParameters({f:"pjson"},!0);let i=await na.loadJson(n),o=new na(t);if(o._resource=n,o._data=i,l(i.layers)){let s=[];for(let a=0;a<i.layers.length;a++){let c=P2e(o,i.layers[a],t);s.push(c)}await Promise.all(s)}else await P2e(o,i,t);o._computeExtent();let r=[];for(let s=0;s<o._layers.length;s++)r.push(o._layers[s].load(t.cesium3dTilesetOptions));return await Promise.all(r),o};na._fetchJson=function(e){return e.fetchJson()};na.loadJson=async function(e){let t=await na._fetchJson(e);if(l(t.error)){if(console.error("Failed to fetch I3S ",e.url),l(t.error.message)&&console.error(t.error.message),l(t.error.details))for(let n=0;n<t.error.details.length;n++)console.log(t.error.details[n]);throw new ae(t.error)}return t};na.prototype._loadBinary=async function(e){let t=await e.fetchArrayBuffer();if(t.byteLength>0&&new Uint8Array(t)[0]===123&&new TextDecoder().decode(t).includes("404"))throw new ae(`Failed to load binary: ${e.url}`);return t};na.prototype._binarizeGltf=function(e){let n=new TextEncoder().encode(JSON.stringify(e)),i=new Uint8Array(n.byteLength+20),o={magic:new Uint8Array(i.buffer,0,4),version:new Uint32Array(i.buffer,4,1),length:new Uint32Array(i.buffer,8,1),chunkLength:new Uint32Array(i.buffer,12,1),chunkType:new Uint32Array(i.buffer,16,1),chunkData:new Uint8Array(i.buffer,20,n.byteLength)};return o.magic[0]=103,o.magic[1]=108,o.magic[2]=84,o.magic[3]=70,o.version[0]=2,o.length[0]=i.byteLength,o.chunkLength[0]=n.byteLength,o.chunkType[0]=1313821514,o.chunkData.set(n),i};var cwt=new M;function lwt(e,t){let n=e.tilingScheme,i=[],o={},r=e._lodCount,s=fe.fromRadians(t.west,t.north),a=fe.fromRadians(t.east,t.south),c=n.positionToTileXY(s,r),d=n.positionToTileXY(a,r);for(let m=c.x;m<=d.x;m++)for(let p=c.y;p<=d.y;p++){let b=M.fromElements(m,p,cwt),f=b.toString();if(!o.hasOwnProperty(f)){let y={x:b.x,y:b.y,level:r,tilingScheme:n,terrainProvider:e,positions:[]};o[f]=y,i.push(y)}}let u=[];for(let m=0;m<i.length;++m){let p=i[m],b=p.terrainProvider.requestTileGeometry(p.x,p.y,p.level);u.push(b)}return Promise.all(u).then(function(m){let p=[];for(let b=0;b<m.length;b++){let f={tilingScheme:n,x:i[b].x,y:i[b].y,level:i[b].level},y=m[b],_="Geographic";n._projection instanceof fi&&(_="WebMercator");let S={projectionType:_,projection:n._projection,nativeExtent:n.tileXYToNativeRectangle(f.x,f.y,f.level),height:y._height,width:y._width,scale:y._structure.heightScale,offset:y._structure.heightOffset};if(y._encoding===um.LERC){let Z=X2e.default.decode(y._buffer);S.buffer=Z.pixels[0]}else S.buffer=y._buffer;p.push(S)}return p})}async function dwt(e){let t=e._geoidTiledTerrainProvider;if(l(t))try{let n=await lwt(t,e._extent);e._geoidDataList=n}catch{console.log("Error retrieving Geoid Terrain tiles - no geoid conversion will be performed.")}}na.prototype.loadGeoidData=async function(){return l(this._geoidDataPromise)?this._geoidDataPromise:(this._geoidDataPromise=dwt(this),this._geoidDataPromise)};na.prototype._computeExtent=function(){let e;for(let t=0;t<this._layersExtent.length;t++){let n=this._layersExtent[t];l(e)?re.union(e,n,e):e=re.clone(n)}this._extent=e};na.prototype.getAttributeNames=function(){let e=[];for(let t=0;t<this._attributeStatistics.length;++t)e.push(...this._attributeStatistics[t].names);return e};na.prototype.getAttributeValues=function(e){for(let t=0;t<this._attributeStatistics.length;++t){let n=this._attributeStatistics[t]._getValues(e);if(l(n))return n}return[]};na.prototype.filterByAttributes=function(e){let t=[];for(let n=0;n<this._layers.length;n++){let i=this._layers[n].filterByAttributes(e);t.push(i)}return Promise.all(t)};var Qf=na;var H2o=x(T(),1);var M9={};M9.createTilesetFromIModelId=async function({iModelId:e,changesetId:t,tilesetOptions:n}){let{exports:i}=await zs.getExports(e,t);if(i.length>0&&i.every(c=>c.status===zs.ExportStatus.Invalid))throw new ae(`All exports for this iModel are Invalid: ${e}`);let o=i.find(c=>c.status===zs.ExportStatus.Complete);if(!l(o))return;let r=new URL(o._links.mesh.href);r.pathname=`${r.pathname}/tileset.json`;let s=r.toString(),a=new ve({url:s});return wr.fromUrl(a,n)};M9.createTilesetForRealityDataId=async function({iTwinId:e,realityDataId:t,type:n,rootDocument:i,tilesetOptions:o}){if(!l(n)||!l(i)){let c=await zs.getRealityDataMetadata(e,t);i=c.rootDocument,n=c.type}if(![zs.RealityDataType.Cesium3DTiles,zs.RealityDataType.PNTS,zs.RealityDataType.RealityMesh3DTiles,zs.RealityDataType.Terrain3DTiles,zs.RealityDataType.GaussianSplat3DTiles].includes(n))throw new ae(`Reality data type is not a mesh type: ${n}`);let s=await zs.getRealityDataURL(e,t,i),a={maximumScreenSpaceError:4,...o};return wr.fromUrl(s,a)};M9.createDataSourceForRealityDataId=async function({iTwinId:e,realityDataId:t,type:n,rootDocument:i}){if(!l(n)||!l(i)){let s=await zs.getRealityDataMetadata(e,t);i=s.rootDocument,n=s.type}if(![zs.RealityDataType.KML,zs.RealityDataType.GeoJSON].includes(n))throw new ae(`Reality data type is not a data source type: ${n}`);let r=await zs.getRealityDataURL(e,t,i);return n===zs.RealityDataType.GeoJSON?Qx.load(r):DZ.load(r)};M9.loadGeospatialFeatures=async function({iTwinId:e,collectionId:t,limit:n}){let i=n??1e4,o=`${zs.apiEndpoint}geospatial-features/itwins/${e}/ogc/collections/${t}/items`,r=new ve({url:o,headers:{Authorization:zs._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{limit:i,client:"CesiumJS"}});return Qx.load(r)};var tre=M9;var j2o=x(T(),1);function N2e(){}Object.defineProperties(N2e.prototype,{color:{get:ge.throwInstantiationError},intensity:{get:ge.throwInstantiationError}});var nre=N2e;var PFo=x(T(),1);var cFo=x(T(),1);var uwt=0,mwt=14,hwt=-1e3,fwt=1e4,pwt=2*Math.PI*ie.WGS84.maximumRadius,bwt=256,gwt=new re,ywt=new re,ire=class{constructor(t,n){n=n??{},this._resource=ve.createIfNeeded(t),this._urlTemplate=this._resource.url,this._extent=re.clone(n.extent),this._minZoom=n.minZoom??uwt,this._maxZoom=n.maxZoom??mwt,this._featureIdProperty=n.featureIdProperty,this._show=!0,this._tileset=void 0,this._tilesetJsonUrl=void 0}static async fromUrl(t,n){let i=new this(t,n);return await i._initializeTileset(),i}get urlTemplate(){return this._urlTemplate}get resource(){return this._resource}get extent(){return this._extent}get tileset(){return this._tileset}get show(){return this._show}set show(t){this._show=t,l(this._tileset)&&(this._tileset.show=t)}_createRuntimeTilesetOptions(){return{minZoom:this._minZoom,maxZoom:this._maxZoom,extent:this._extent}}_createTilesetLoadOptions(){return{}}_configureTileset(t){}_createCodec(){}async _initializeTileset(){let t=xwt(this._resource,this._createRuntimeTilesetOptions()),n=new Blob([JSON.stringify(t)],{type:"application/json"}),i=URL.createObjectURL(n);this._tilesetJsonUrl=i;try{this._tileset=await wr.fromUrl(i,this._createTilesetLoadOptions())}catch(o){throw URL.revokeObjectURL(i),this._tilesetJsonUrl=void 0,o}URL.revokeObjectURL(i),this._tilesetJsonUrl=void 0,this._configureTileset(this._tileset),this._tileset._runtimeContentCodec=this._createCodec(),this._tileset.show=this._show}update(t){l(this._tileset)&&this._tileset.update(t)}prePassesUpdate(t){l(this._tileset)&&this._tileset.prePassesUpdate(t)}postPassesUpdate(t){l(this._tileset)&&this._tileset.postPassesUpdate(t)}updateForPass(t,n){l(this._tileset)&&this._tileset.updateForPass(t,n)}isDestroyed(){return!1}destroy(){return l(this._tileset)&&(this._tileset.destroy(),this._tileset=void 0),l(this._tilesetJsonUrl)&&(URL.revokeObjectURL(this._tilesetJsonUrl),this._tilesetJsonUrl=void 0),this._resource=void 0,this._extent=void 0,this._featureIdProperty=void 0,me(this)}};function xwt(e,t){let n=new Zr,i=l(t.extent)?re.clone(t.extent):re.clone(n.rectangle),o=_wt(n,i,t.minZoom),r={boundingVolume:{region:M2e(i)},geometricError:w2e(0),refine:"REPLACE",children:[]};for(let s=o.minY;s<=o.maxY;s++)for(let a=o.minX;a<=o.maxX;a++){let c=Y2e(n,e,i,t.minZoom,t.maxZoom,a,s);l(c)&&r.children.push(c)}return r.children.length===0&&(r.geometricError=0),{asset:{version:"1.1"},geometricError:r.geometricError,root:r}}function Y2e(e,t,n,i,o,r,s){if(!Swt(e,i,r,s,n,gwt,ywt))return;let a=e.tileXYToRectangle(r,s,i,new re),c={boundingVolume:{region:M2e(a)},geometricError:i<o?w2e(i):0,refine:"REPLACE",content:{uri:Twt(t,i,r,s)}};if(i>=o)return c;let d=i+1,u=[];for(let m=s*2;m<=s*2+1;m++)for(let p=r*2;p<=r*2+1;p++){let b=Y2e(e,t,n,d,o,p,m);l(b)&&u.push(b)}return u.length>0?c.children=u:c.geometricError=0,c}function Twt(e,t,n,i){let r=e.url.replace(/\{z\}/gi,`${t}`).replace(/\{x\}/gi,`${n}`).replace(/\{y\}/gi,`${i}`);return cm(r)}function w2e(e){return pwt/((1<<e)*bwt)}function M2e(e){return[e.west,e.south,e.east,e.north,hwt,fwt]}function _wt(e,t,n){let i=(1<<n)-1,o=fe.fromRadians(t.west,t.north),r=fe.fromRadians(t.east,t.south),s=e.positionToTileXY(o,n),a=e.positionToTileXY(r,n);return!l(s)||!l(a)||t.west>t.east?{minX:0,maxX:i,minY:0,maxY:i}:{minX:L.clamp(Math.min(s.x,a.x),0,i),maxX:L.clamp(Math.max(s.x,a.x),0,i),minY:L.clamp(Math.min(s.y,a.y),0,i),maxY:L.clamp(Math.max(s.y,a.y),0,i)}}function Swt(e,t,n,i,o,r,s){let a=e.tileXYToRectangle(n,i,t,r);return l(re.intersection(a,o,s))}var k9=ire;var _Fo=x(T(),1);var ore=0,k2e=new h,FH=new h,Zwt=new Zr;function Vwt(e,t,n){let i=t.tileX,o=t.tileY,r=t.tileZ,s=n?.featureIdProperty,a=Zwt.tileXYToRectangle(i,o,r),c=re.center(a),d=h.fromRadians(c.longitude,c.latitude,0),u=4294967295,m=u,p=u,b=new Map,f=new Map,y=[],_=[],S=[],Z=0;function V(){let k=(4-Z%4)%4;k>0&&(S.push(new Uint8Array(k)),Z+=k)}function C(k,O){V();let w=Z;S.push(new Uint8Array(k.buffer,k.byteOffset,k.byteLength)),Z+=k.byteLength;let z=y.length;return y.push({buffer:0,byteOffset:w,byteLength:k.byteLength,target:O}),z}function G(k,O){let w=C(k,O.target),z=yt.getComponentCount(O.type),H={bufferView:w,byteOffset:0,componentType:O.componentType,count:k.length/z,type:O.type};l(O.min)&&(H.min=O.min),l(O.max)&&(H.max=O.max);let te=_.length;return _.push(H),te}function E(k){let O=Number.POSITIVE_INFINITY,w=Number.POSITIVE_INFINITY,z=Number.POSITIVE_INFINITY,H=Number.NEGATIVE_INFINITY,te=Number.NEGATIVE_INFINITY,K=Number.NEGATIVE_INFINITY;for(let $=0;$<k.length;$+=3){let ee=k[$],de=k[$+1],_e=k[$+2];ee<O&&(O=ee),de<w&&(w=de),_e<z&&(z=_e),ee>H&&(H=ee),de>te&&(te=de),_e>K&&(K=_e)}return{min:[O,w,z],max:[H,te,K]}}function v(k,O,w){if(w.length===0)return;let z=new Uint32Array(w),H=G(z,{type:"SCALAR",componentType:J.UNSIGNED_INT,target:ne.ARRAY_BUFFER});k._FEATURE_ID_0=H;let te={featureCount:b.size,nullFeatureId:m,attribute:0};f.size>0&&(te.propertyTable=0),O.EXT_mesh_features={featureIds:[te]}}function F(k,O){O=O??4;let w=(O-Z%O)%O;w>0&&(S.push(new Uint8Array(w)),Z+=w);let z=Z;S.push(k),Z+=k.byteLength;let H=y.length;return y.push({buffer:0,byteOffset:z,byteLength:k.byteLength}),H}function P(){if(f.size===0)return;let k=new Map;for(let H of f.values())for(let[te,K]of Object.entries(H)){if(!l(K))continue;let $=typeof K,ee;$==="string"?ee="STRING":$==="number"?ee="SCALAR":$==="boolean"?ee="BOOLEAN":ee="STRING";let de=k.get(te);l(de)?de!==ee&&k.set(te,"STRING"):k.set(te,ee)}if(k.size===0)return;let O={};for(let[H,te]of k)te==="SCALAR"?O[H]={type:"SCALAR",componentType:"FLOAT64"}:te==="BOOLEAN"?O[H]={type:"BOOLEAN"}:O[H]={type:"STRING"};let w={},z=b.size;for(let[H,te]of k)if(te==="SCALAR"){let K=new Float64Array(z);for(let ee=0;ee<z;ee++){let _e=f.get(ee)?.[H];K[ee]=typeof _e=="number"&&Number.isFinite(_e)?_e:NaN}let $=F(new Uint8Array(K.buffer,K.byteOffset,K.byteLength),8);w[H]={values:$}}else if(te==="BOOLEAN"){let K=Math.ceil(z/8),$=new Uint8Array(K);for(let de=0;de<z;de++)f.get(de)?.[H]&&($[de>>3]|=1<<(de&7));let ee=F($);w[H]={values:ee}}else{let K=new TextEncoder,$=[],ee=new Uint32Array(z+1),de=0;for(let Re=0;Re<z;Re++){ee[Re]=de;let Xe=f.get(Re)?.[H],qe;Xe==null?qe="":typeof Xe=="string"?qe=Xe:qe=String(Xe);let je=K.encode(qe);$.push(je),de+=je.byteLength}ee[z]=de;let _e=new Uint8Array(de),ue=0;for(let Re of $)_e.set(Re,ue),ue+=Re.byteLength;let Ce=F(_e),Te=F(new Uint8Array(ee.buffer,ee.byteOffset,ee.byteLength));w[H]={values:Ce,stringOffsets:Te,stringOffsetType:"UINT32"}}return{schema:{classes:{mvt_feature:{properties:O}}},propertyTables:[{class:"mvt_feature",count:z,properties:w}]}}let N=[],g=[],R=[d.x,d.y,d.z];for(let k of e.layers){let O=k.extent,w=[],z=[],H=[],te=[],K=[],$=0,ee=[],de=[],_e=[],ue=[],Ce=[],Te=[],Re=[],Le=0;for(let je of k.features){let _t=l(s)?Rwt(je,s,b)??m:Cwt(je,b);if(_t!==m&&!f.has(_t)){let Qe=Object.assign({},je.properties);Qe._layer=k.name??"",f.set(_t,Qe)}if(je.type==="Point"){let Qe=je.geometry;for(let Ee of Qe)rre(Ee,i,o,r,O,ore,d,w),z.push(_t);continue}if(je.type==="LineString"){let Qe=je.geometry;for(let Ee of Qe){let He=H.length/3;for(let Rt of Ee)rre(Rt,i,o,r,O,ore,d,H),te.push(_t);for(let Rt=0;Rt<Ee.length;Rt++)K.push(He+Rt);K.push(p),$++}continue}if(je.type==="Polygon"){let Qe=je.geometry,Ee=Gwt(Qe);for(let He of Ee){let Rt=[He.outerRing,...He.holes],dt=[],gn=[],Bt=[],St=0;for(let ft=0;ft<Rt.length;ft++){let Ai=Rt[ft];ft>0&&Bt.push(St);for(let En of Ai)dt.push(new M(En.x,En.y)),rre(En,i,o,r,O,ore,d,gn),St++}if(dt.length<3)continue;let vt=ui.triangulate(dt,Bt.length>0?Bt:void 0);if(!l(vt)||vt.length===0){gt("buildVectorGltfFromMVT-triangulation-failed","Polygon triangulation failed; skipping polygon.");continue}let Wn=ee.length/3,at=_e.length;ue.push(Wn),Ce.push(at),Te.push(Bt.length);for(let ft=0;ft<Bt.length;ft++)Re.push(Wn+Bt[ft]);for(let ft=0;ft<gn.length;ft++)ee.push(gn[ft]);for(let ft=0;ft<gn.length/3;ft++)de.push(_t);for(let ft=0;ft<vt.length;ft++)_e.push(vt[ft]+Wn);Le++}}}if(w.length===0&&H.length===0&&ee.length===0)continue;K.length>0&&K[K.length-1]===p&&K.pop();let Xe=[];if(w.length>0){let je=new Float32Array(w),_t=E(je),Ee={POSITION:G(je,{type:"VEC3",componentType:J.FLOAT,target:ne.ARRAY_BUFFER,min:_t.min,max:_t.max})},He={CESIUM_mesh_vector:{vector:!0,count:je.length/3}};v(Ee,He,z),Xe.push({mode:Fe.POINTS,attributes:Ee,extensions:He})}if(H.length>0&&K.length>1){let je=new Float32Array(H),_t=new Uint32Array(K),Qe=E(je),Ee=G(je,{type:"VEC3",componentType:J.FLOAT,target:ne.ARRAY_BUFFER,min:Qe.min,max:Qe.max}),He=G(_t,{type:"SCALAR",componentType:J.UNSIGNED_INT,target:ne.ELEMENT_ARRAY_BUFFER}),Rt={POSITION:Ee},dt={CESIUM_mesh_vector:{vector:!0,count:$}};v(Rt,dt,te),Xe.push({mode:Fe.LINE_STRIP,indices:He,attributes:Rt,extensions:dt})}if(ee.length>0&&_e.length>=3){let je=new Float32Array(ee),_t=new Uint32Array(_e),Qe=new Uint32Array(ue),Ee=new Uint32Array(Ce),He=Re.length>0,Rt=He?new Uint32Array(Te):void 0,dt=He?new Uint32Array(Re):void 0,gn=E(je),Bt=G(je,{type:"VEC3",componentType:J.FLOAT,target:ne.ARRAY_BUFFER,min:gn.min,max:gn.max}),St=G(_t,{type:"SCALAR",componentType:J.UNSIGNED_INT,target:ne.ELEMENT_ARRAY_BUFFER}),vt=G(Qe,{type:"SCALAR",componentType:J.UNSIGNED_INT,target:ne.ARRAY_BUFFER}),Wn=G(Ee,{type:"SCALAR",componentType:J.UNSIGNED_INT,target:ne.ARRAY_BUFFER}),at=l(Rt)?G(Rt,{type:"SCALAR",componentType:J.UNSIGNED_INT,target:ne.ARRAY_BUFFER}):void 0,ft=l(dt)?G(dt,{type:"SCALAR",componentType:J.UNSIGNED_INT,target:ne.ARRAY_BUFFER}):void 0,Ai={POSITION:Bt},En={CESIUM_mesh_vector:{vector:!0,count:Le,polygonAttributeOffsets:vt,polygonIndicesOffsets:Wn}};He&&(En.CESIUM_mesh_vector.polygonHoleCounts=at,En.CESIUM_mesh_vector.polygonHoleOffsets=ft),v(Ai,En,de),Xe.push({mode:Fe.TRIANGLES,indices:St,attributes:Ai,extensions:En})}if(Xe.length===0)continue;let qe=N.length;N.push({primitives:Xe}),g.push({name:k.name,mesh:qe,translation:R})}if(g.length===0)return;let A=P(),W=Wwt(S,Z),X=["CESIUM_mesh_vector"];b.size>0&&X.push("EXT_mesh_features"),l(A)&&X.push("EXT_structural_metadata");let Y=g.map((k,O)=>O),D={asset:{version:"2.0"},extensionsUsed:X,scene:0,scenes:[{nodes:Y}],nodes:g,meshes:N,accessors:_,bufferViews:y,buffers:[{byteLength:W.byteLength}],extensions:void 0};return l(A)&&(D.extensions={EXT_structural_metadata:A}),Lwt(D,W)}function Cwt(e,t){let n=t.get(e);return l(n)||(n=t.size,t.set(e,n)),n}function Rwt(e,t,n){let i=e.properties;if(!l(i))return;let o=i[t];if(!l(o)||typeof o!="string"&&typeof o!="number"&&typeof o!="boolean"||typeof o=="number"&&!Number.isFinite(o))return;let r=`${typeof o}:${o}`,s=n.get(r);return l(s)||(s=n.size,n.set(r,s)),s}function Gwt(e){let t=[];for(let n of e){let i=Ewt(n);if(i.length<3)continue;Awt(i)<=0?t.push({outerRing:i,holes:[]}):t.length>0&&t[t.length-1].holes.push(i)}return t}function Awt(e){let t=0;for(let n=0,i=e.length-1;n<e.length;i=n++)t+=(e[i].x+e[n].x)*(e[i].y-e[n].y);return t/2}function Ewt(e){return e.length>1&&e[0].x===e[e.length-1].x&&e[0].y===e[e.length-1].y?e.slice(0,e.length-1):e}function rre(e,t,n,i,o,r,s,a){let c=1<<i,d=(t+e.x/o)/c,u=(n+e.y/o)/c,m=d*2*Math.PI-Math.PI,p=Math.atan(Math.sinh(Math.PI*(1-2*u)));h.fromRadians(m,p,r,void 0,k2e),h.subtract(k2e,s,FH),a.push(FH.x,FH.y,FH.z)}function Lwt(e,t){let s=new TextEncoder().encode(JSON.stringify(e)),a=Math.ceil(s.length/4)*4,c=new Uint8Array(a);c.fill(32),c.set(s);let d=Math.ceil(t.byteLength/4)*4,u=new Uint8Array(d);u.set(t);let m=20+a+8+d,p=new Uint8Array(m),b=new DataView(p.buffer),f=0;return b.setUint32(f,1179937895,!0),f+=4,b.setUint32(f,2,!0),f+=4,b.setUint32(f,m,!0),f+=4,b.setUint32(f,a,!0),f+=4,b.setUint32(f,1313821514,!0),f+=4,p.set(c,f),f+=a,b.setUint32(f,d,!0),f+=4,b.setUint32(f,5130562,!0),f+=4,p.set(u,f),p}function Wwt(e,t){let n=new Uint8Array(t),i=0;for(let o of e)n.set(o,i),i+=o.byteLength;return n}var U9=Vwt;var VFo=x(T(),1);var vwt=new TextDecoder,IH={UNKNOWN:0,POINT:1,LINESTRING:2,POLYGON:3},Fwt={LAYERS:3},D9={NAME:1,FEATURES:2,KEYS:3,VALUES:4,EXTENT:5},sre={TAGS:2,TYPE:3,GEOMETRY:4},qZ={STRING:1,FLOAT:2,DOUBLE:3,INT64:4,UINT64:5,SINT64:6,BOOL:7},Iwt=["Unknown","Point","LineString","Polygon"];function Pwt(e){let t=new Uint8Array(e),n=[],i=0;for(;i<t.length;){let o=PH(t,i,t.length),r=o.fieldNumber,s=o.wireType;if(i=o.newPos,r===Fwt.LAYERS&&s===2){let a=Dg(t,i,t.length);i=a.newPos;let c=qd(i,a.value,t.length,"layer");n.push(Xwt(t,i,c)),i=c}else i=XH(t,i,s,t.length)}return{layers:n}}function Xwt(e,t,n){let i=t,o="",r=4096,s=[],a=[],c=[];for(;i<n;){let u=PH(e,i,n),m=u.fieldNumber,p=u.wireType;if(i=u.newPos,m===D9.NAME&&p===2){let b=Dg(e,i,n);i=b.newPos;let f=qd(i,b.value,n,"layer name");o=cre(e,i,b.value),i=f}else if(m===D9.FEATURES&&p===2){let b=Dg(e,i,n);i=b.newPos;let f=qd(i,b.value,n,"feature");c.push({start:i,end:f}),i=f}else if(m===D9.KEYS&&p===2){let b=Dg(e,i,n);i=b.newPos;let f=qd(i,b.value,n,"key");s.push(cre(e,i,b.value)),i=f}else if(m===D9.VALUES&&p===2){let b=Dg(e,i,n);i=b.newPos;let f=qd(i,b.value,n,"value"),y=wwt(e,i,f);a.push(y),i=f}else if(m===D9.EXTENT&&p===0){let b=IG(e,i,n);r=b.value,i=b.newPos}else i=XH(e,i,p,n)}let d=c.map(({start:u,end:m})=>Nwt(e,u,m,s,a));return{name:o,extent:r,features:d}}function Nwt(e,t,n,i,o){let r=t,s=IH.UNKNOWN,a=[],c=[];for(;r<n;){let m=PH(e,r,n),p=m.fieldNumber,b=m.wireType;if(r=m.newPos,p===sre.TYPE&&b===0){let f=IG(e,r,n);s=f.value,r=f.newPos}else if(p===sre.TAGS&&b===2){let f=Dg(e,r,n);r=f.newPos;let y=qd(r,f.value,n,"feature tags");for(;r<y;){let _=IG(e,r,y);a.push(_.value),r=_.newPos}}else if(p===sre.GEOMETRY&&b===2){let f=Dg(e,r,n);r=f.newPos;let y=qd(r,f.value,n,"feature geometry");for(;r<y;){let _=IG(e,r,y);c.push(_.value),r=_.newPos}}else r=XH(e,r,b,n)}let d={};for(let m=0;m<a.length-1;m+=2){let p=i[a[m]],b=o[a[m+1]];typeof p!="string"||b===void 0||(d[p]=b)}let u=Ywt(s,c);return{type:Iwt[s]??"Unknown",geometry:u,properties:d}}function Ywt(e,t){let n=0,i=0,o=0;if(e===IH.POINT){let r=[];for(;n<t.length;){let s=t[n++],a=s&7,c=s>>3;if(a===1)for(let d=0;d<c;d++)i+=Z0(t[n++]),o+=Z0(t[n++]),r.push({x:i,y:o})}return r}if(e===IH.LINESTRING){let r=[],s=null;for(;n<t.length;){let a=t[n++],c=a&7,d=a>>3;if(c===1)s!==null&&r.push(s),s=[],i+=Z0(t[n++]),o+=Z0(t[n++]),s.push({x:i,y:o});else if(c===2)for(let u=0;u<d;u++)i+=Z0(t[n++]),o+=Z0(t[n++]),s.push({x:i,y:o})}return s!==null&&r.push(s),r}if(e===IH.POLYGON){let r=[],s=null;for(;n<t.length;){let a=t[n++],c=a&7,d=a>>3;if(c===1)s!==null&&r.push(s),s=[],i+=Z0(t[n++]),o+=Z0(t[n++]),s.push({x:i,y:o});else if(c===2)for(let u=0;u<d;u++)i+=Z0(t[n++]),o+=Z0(t[n++]),s.push({x:i,y:o});else c===7&&s!==null&&s.length>0&&(s.push({x:s[0].x,y:s[0].y}),r.push(s),s=null)}return s!==null&&r.push(s),r}return[]}function wwt(e,t,n){let i=t;for(;i<n;){let o=PH(e,i,n),r=o.fieldNumber,s=o.wireType;if(i=o.newPos,r===qZ.STRING&&s===2){let a=Dg(e,i,n);i=a.newPos;let c=qd(i,a.value,n,"string value");return cre(e,i,c-i)}else{if(r===qZ.FLOAT&&s===5)return qd(i,4,n,"float value"),new DataView(e.buffer,e.byteOffset+i,4).getFloat32(0,!0);if(r===qZ.DOUBLE&&s===1)return qd(i,8,n,"double value"),new DataView(e.buffer,e.byteOffset+i,8).getFloat64(0,!0);if(r===qZ.INT64&&s===0){let a=PG(e,i,n);return are(a.value)}else if(r===qZ.UINT64&&s===0){let a=PG(e,i,n);return are(a.value)}else if(r===qZ.SINT64&&s===0){let a=PG(e,i,n);return are(Mwt(a.value))}else if(r===qZ.BOOL&&s===0)return IG(e,i,n).value!==0}i=XH(e,i,s,n)}}function PH(e,t,n){let i=IG(e,t,n);return{fieldNumber:i.value>>>3,wireType:i.value&7,newPos:i.newPos}}function IG(e,t,n){let i=PG(e,t,n,5);if(i.value>0xffffffffn)throw new ae("Invalid MVT uint32 varint.");return{value:Number(i.value),newPos:i.newPos}}function Dg(e,t,n){let i=PG(e,t,n);if(i.value>BigInt(Number.MAX_SAFE_INTEGER))throw new ae("Invalid MVT length varint.");return{value:Number(i.value),newPos:i.newPos}}function PG(e,t,n,i){let o=0n,r=0n,s=0,a=i??10;for(;;){if(t>=n||t>=e.length)throw new ae("Invalid MVT: truncated varint.");let c=e[t++];if(o|=BigInt(c&127)<<r,s++,(c&128)===0)break;if(s>=a)throw new ae("Invalid MVT: varint is too long.");r+=7n}return{value:o,newPos:t}}function cre(e,t,n){let i=qd(t,n,e.length,"string");return vwt.decode(e.subarray(t,i))}function qd(e,t,n,i){if(!Number.isFinite(t)||t<0)throw new ae(`Invalid MVT ${i}: invalid length.`);let o=e+t;if(!Number.isFinite(o)||o<e||o>n)throw new ae(`Invalid MVT ${i}: length exceeds available bytes.`);return o}function XH(e,t,n,i){if(n===0)return PG(e,t,i).newPos;if(n===1)return qd(t,8,i,"fixed64 field");if(n===2){let o=Dg(e,t,i);return qd(o.newPos,o.value,i,"length-delimited field")}else if(n===5)return qd(t,4,i,"fixed32 field");throw new ae(`Unsupported protobuf wire type: ${n}`)}function Z0(e){return e>>>1^-(e&1)}function Mwt(e){return e>>1n^-(e&1n)}function are(e){return e<=BigInt(Number.MAX_SAFE_INTEGER)&&e>=BigInt(Number.MIN_SAFE_INTEGER)?Number(e):e}var O9=Pwt;var NH=class extends k9{static async fromUrl(t,n){return super.fromUrl(t,n)}_createTilesetLoadOptions(){return{skipLevelOfDetail:!1,enablePick:!0,featureIdLabel:"featureId_0",instanceFeatureIdLabel:"instanceFeatureId_0"}}_configureTileset(t){t._modelUpAxis=Mi.Z,t._modelForwardAxis=Mi.X}_createCodec(){let t=this._featureIdProperty;return{contentType:"mvt",missingTilePolicy:{statusCodes:[404,204]},createContent:async(n,i,o,r)=>{let s=O9(r),a=U2e(o.getUrlComponent(!0)),c=U9(s,a,{featureIdProperty:t});if(!l(c)){if(!kwt(s))return new Kp(n,i);throw new ae("Decoded MVT tile did not produce vector glTF content.")}return Vx.fromGltf(n,i,o,c)}}}};function U2e(e){let t=e.match(/\/(\d+)\/(\d+)\/(\d+)(?:\.[^/?#]+)?(?:[?#]|$)/i);return t?{tileZ:parseInt(t[1],10),tileX:parseInt(t[2],10),tileY:parseInt(t[3],10)}:(gt("MVTDataProvider.parseTileCoordinates",`MVT tile URL did not match /{z}/{x}/{y} pattern. Falling back to z/x/y = 0/0/0. URL: ${e}`),{tileZ:0,tileX:0,tileY:0})}function kwt(e){let t=e.layers;for(let n=0;n<t.length;n++)if(t[n].features.length>0)return!0;return!1}NH._parseTileCoordinates=U2e;var lre=NH;var UFo=x(T(),1);var Uwt=/\/$/,D2e=new At('© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/">Improve this map</a></strong>');function XG(e){e=e??B.EMPTY_OBJECT;let t=e.styleId,n=e.accessToken;this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let i=ve.createIfNeeded(e.url??"https://api.mapbox.com/styles/v1/");this._styleId=t,this._accessToken=n;let o=e.tilesize??512;this._tilesize=o;let r=e.username??"mapbox";this._username=r;let s=l(e.scaleFactor)?"@2x":"",a=i.getUrlComponent();Uwt.test(a)||(a+="/"),a+=`${this._username}/${t}/tiles/${this._tilesize}/{z}/{x}/{y}${s}`,i.url=a,i.setQueryParameters({access_token:n});let c;l(e.credit)?(c=e.credit,typeof c=="string"&&(c=new At(c))):c=D2e,this._resource=i,this._imageryProvider=new xs({url:i,credit:c,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(XG.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});XG.prototype.getTileCredits=function(e,t,n){};XG.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};XG.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};XG._defaultCredit=D2e;var dre=XG;var OFo=x(T(),1);function ure(e){}ure.prototype.isReady=function(){return!0};ure.prototype.shouldDiscardImage=function(e){return!1};var mre=ure;var $Fo=x(T(),1);var Dwt=new At("MapQuest, Open Street Map and contributors, CC-BY-SA");function YH(e){e=e??B.EMPTY_OBJECT;let t=ve.createIfNeeded(e.url??"https://tile.openstreetmap.org/");t.appendForwardSlash(),t.url+=`{z}/{x}/{y}${e.retinaTiles?"@2x":""}.${e.fileExtension??"png"}`;let n=new Zr({ellipsoid:e.ellipsoid}),i=256,o=256,r=e.minimumLevel??0,s=e.maximumLevel,a=e.rectangle??n.rectangle,c=n.positionToTileXY(re.southwest(a),r),d=n.positionToTileXY(re.northeast(a),r),u=(Math.abs(d.x-c.x)+1)*(Math.abs(d.y-c.y)+1),m=e.credit??Dwt;typeof m=="string"&&(m=new At(m)),xs.call(this,{url:t,credit:m,tilingScheme:n,tileWidth:i,tileHeight:o,minimumLevel:r,maximumLevel:s,rectangle:a})}l(Object.create)&&(YH.prototype=Object.create(xs.prototype),YH.prototype.constructor=YH);var Og=YH;var nIo=x(T(),1);function O2e(){ge.throwInstantiationError()}Object.defineProperties(O2e.prototype,{show:{get:ge.throwInstantiationError,set:ge.throwInstantiationError},transform:{get:ge.throwInstantiationError},credit:{get:ge.throwInstantiationError}});var hre=O2e;var rIo=x(T(),1);function wH(){ge.throwInstantiationError()}Object.defineProperties(wH.prototype,{});wH.fromUrl=function(e){ge.throwInstantiationError()};wH.prototype.loadPanorama=function(e){ge.throwInstantiationError()};var fre=wH;var mIo=x(T(),1);var Owt=new M(1,1);function pre(e){e=e??B.EMPTY_OBJECT,this.mass=e.mass??1,this.position=h.clone(e.position??h.ZERO),this.velocity=h.clone(e.velocity??h.ZERO),this.life=e.life??Number.MAX_VALUE,this.image=e.image,this.startColor=U.clone(e.startColor??U.WHITE),this.endColor=U.clone(e.endColor??U.WHITE),this.startScale=e.startScale??1,this.endScale=e.endScale??1,this.imageSize=M.clone(e.imageSize??Owt),this._age=0,this._normalizedAge=0,this._billboard=void 0}Object.defineProperties(pre.prototype,{age:{get:function(){return this._age}},normalizedAge:{get:function(){return this._normalizedAge}}});var B2e=new h;pre.prototype.update=function(e,t){return h.multiplyByScalar(this.velocity,e,B2e),h.add(this.position,B2e,this.position),l(t)&&t(this,e),this._age+=e,this.life===Number.MAX_VALUE?this._normalizedAge=0:this._normalizedAge=this._age/this.life,this._age<=this.life};var NG=pre;var pIo=x(T(),1);function z2e(e){e=e??B.EMPTY_OBJECT,this.time=e.time??0,this.minimum=e.minimum??0,this.maximum=e.maximum??50,this._complete=!1}Object.defineProperties(z2e.prototype,{complete:{get:function(){return this._complete}}});var bre=z2e;var yIo=x(T(),1);function H2e(e){}H2e.prototype.emit=function(e){ge.throwInstantiationError()};var gre=H2e;var FIo=x(T(),1);var K2e=new M(1,1);function B9(e){e=e??B.EMPTY_OBJECT,this.show=e.show??!0,this.updateCallback=e.updateCallback,this.loop=e.loop??!0,this.image=e.image??void 0;let t=e.emitter;l(t)||(t=new C9(.5)),this._emitter=t,this._bursts=e.bursts,this._modelMatrix=I.clone(e.modelMatrix??I.IDENTITY),this._emitterModelMatrix=I.clone(e.emitterModelMatrix??I.IDENTITY),this._matrixDirty=!0,this._combinedMatrix=new I,this._startColor=U.clone(e.color??e.startColor??U.WHITE),this._endColor=U.clone(e.color??e.endColor??U.WHITE),this._startScale=e.scale??e.startScale??1,this._endScale=e.scale??e.endScale??1,this._emissionRate=e.emissionRate??5,this._minimumSpeed=e.speed??e.minimumSpeed??1,this._maximumSpeed=e.speed??e.maximumSpeed??1,this._minimumParticleLife=e.particleLife??e.minimumParticleLife??5,this._maximumParticleLife=e.particleLife??e.maximumParticleLife??5,this._minimumMass=e.mass??e.minimumMass??1,this._maximumMass=e.mass??e.maximumMass??1,this._minimumImageSize=M.clone(e.imageSize??e.minimumImageSize??K2e),this._maximumImageSize=M.clone(e.imageSize??e.maximumImageSize??K2e),this._sizeInMeters=e.sizeInMeters??!1,this._lifetime=e.lifetime??Number.MAX_VALUE,this._billboardCollection=void 0,this._particles=[],this._particlePool=[],this._previousTime=void 0,this._currentTime=0,this._carryOver=0,this._complete=new Se,this._isComplete=!1,this._updateParticlePool=!0,this._particleEstimate=0}Object.defineProperties(B9.prototype,{emitter:{get:function(){return this._emitter},set:function(e){this._emitter=e}},bursts:{get:function(){return this._bursts},set:function(e){this._bursts=e,this._updateParticlePool=!0}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._matrixDirty=this._matrixDirty||!I.equals(this._modelMatrix,e),I.clone(e,this._modelMatrix)}},emitterModelMatrix:{get:function(){return this._emitterModelMatrix},set:function(e){this._matrixDirty=this._matrixDirty||!I.equals(this._emitterModelMatrix,e),I.clone(e,this._emitterModelMatrix)}},startColor:{get:function(){return this._startColor},set:function(e){U.clone(e,this._startColor)}},endColor:{get:function(){return this._endColor},set:function(e){U.clone(e,this._endColor)}},startScale:{get:function(){return this._startScale},set:function(e){this._startScale=e}},endScale:{get:function(){return this._endScale},set:function(e){this._endScale=e}},emissionRate:{get:function(){return this._emissionRate},set:function(e){this._emissionRate=e,this._updateParticlePool=!0}},minimumSpeed:{get:function(){return this._minimumSpeed},set:function(e){this._minimumSpeed=e}},maximumSpeed:{get:function(){return this._maximumSpeed},set:function(e){this._maximumSpeed=e}},minimumParticleLife:{get:function(){return this._minimumParticleLife},set:function(e){this._minimumParticleLife=e}},maximumParticleLife:{get:function(){return this._maximumParticleLife},set:function(e){this._maximumParticleLife=e,this._updateParticlePool=!0}},minimumMass:{get:function(){return this._minimumMass},set:function(e){this._minimumMass=e}},maximumMass:{get:function(){return this._maximumMass},set:function(e){this._maximumMass=e}},minimumImageSize:{get:function(){return this._minimumImageSize},set:function(e){this._minimumImageSize=e}},maximumImageSize:{get:function(){return this._maximumImageSize},set:function(e){this._maximumImageSize=e}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters=e}},lifetime:{get:function(){return this._lifetime},set:function(e){this._lifetime=e}},complete:{get:function(){return this._complete}},isComplete:{get:function(){return this._isComplete}}});function Bwt(e){let t=e._emissionRate,n=e._maximumParticleLife,i=0,o=e._bursts;if(l(o)){let m=o.length;for(let p=0;p<m;++p)i+=o[p].maximum}let r=e._billboardCollection,s=e.image,a=Math.ceil(t*n+i),c=e._particles,d=e._particlePool,u=Math.max(a-c.length-d.length,0);for(let m=0;m<u;++m){let p=new NG;p._billboard=r.add({image:s,show:!1}),d.push(p)}e._particleEstimate=a}function zwt(e){let t=e._particlePool.pop();return l(t)||(t=new NG),t}function Hwt(e,t){e._particlePool.push(t)}function Kwt(e){let t=e._particles,n=e._particlePool,i=e._billboardCollection,o=t.length,r=n.length,s=e._particleEstimate,a=r-Math.max(s-o-r,0);for(let c=a;c<r;++c){let d=n[c];i.remove(d._billboard)}n.length=a}function Jwt(e){l(e._billboard)&&(e._billboard.show=!1)}function J2e(e,t){let n=t._billboard;l(n)||(n=t._billboard=e._billboardCollection.add({image:t.image})),n.width=t.imageSize.x,n.height=t.imageSize.y,n.position=t.position,n.sizeInMeters=e.sizeInMeters,n.show=!0;let i=L.lerp(t.startColor.red,t.endColor.red,t.normalizedAge),o=L.lerp(t.startColor.green,t.endColor.green,t.normalizedAge),r=L.lerp(t.startColor.blue,t.endColor.blue,t.normalizedAge),s=L.lerp(t.startColor.alpha,t.endColor.alpha,t.normalizedAge);n.color=new U(i,o,r,s),n.scale=L.lerp(t.startScale,t.endScale,t.normalizedAge)}function jwt(e,t){t.startColor=U.clone(e._startColor,t.startColor),t.endColor=U.clone(e._endColor,t.endColor),t.startScale=e._startScale,t.endScale=e._endScale,t.image=e.image,t.life=L.randomBetween(e._minimumParticleLife,e._maximumParticleLife),t.mass=L.randomBetween(e._minimumMass,e._maximumMass),t.imageSize.x=L.randomBetween(e._minimumImageSize.x,e._maximumImageSize.x),t.imageSize.y=L.randomBetween(e._minimumImageSize.y,e._maximumImageSize.y),t._normalizedAge=0,t._age=0;let n=L.randomBetween(e._minimumSpeed,e._maximumSpeed);h.multiplyByScalar(t.velocity,n,t.velocity),e._particles.push(t)}function Qwt(e,t){if(e._isComplete)return 0;t=L.mod(t,e._lifetime);let n=t*e._emissionRate,i=Math.floor(n);if(e._carryOver+=n-i,e._carryOver>1&&(i++,e._carryOver-=1),l(e.bursts)){let o=e.bursts.length;for(let r=0;r<o;r++){let s=e.bursts[r],a=e._currentTime;l(s)&&!s._complete&&a>s.time&&(i+=L.randomBetween(s.minimum,s.maximum),s._complete=!0)}}return i}var MH=new h;B9.prototype.update=function(e){if(!this.show)return;l(this._billboardCollection)||(this._billboardCollection=new xu),this._updateParticlePool&&(Bwt(this),this._updateParticlePool=!1);let t=0;this._previousTime&&(t=Q.secondsDifference(e.time,this._previousTime)),t<0&&(t=0);let n=this._particles,i=this._emitter,o=this.updateCallback,r,s,a=n.length;for(r=0;r<a;++r)s=n[r],s.update(t,o)?J2e(this,s):(Jwt(s),Hwt(this,s),n[r]=n[a-1],--r,--a);n.length=a;let c=Qwt(this,t);if(c>0&&l(i)){this._matrixDirty&&(this._combinedMatrix=I.multiply(this.modelMatrix,this.emitterModelMatrix,this._combinedMatrix),this._matrixDirty=!1);let d=this._combinedMatrix;for(r=0;r<c;r++)s=zwt(this),this._emitter.emit(s),h.add(s.position,s.velocity,MH),I.multiplyByPoint(d,MH,MH),s.position=I.multiplyByPoint(d,s.position,s.position),h.subtract(MH,s.position,s.velocity),h.normalize(s.velocity,s.velocity),jwt(this,s),J2e(this,s)}if(this._billboardCollection.update(e),this._previousTime=Q.clone(e.time,this._previousTime),this._currentTime+=t,this._lifetime!==Number.MAX_VALUE&&this._currentTime>this._lifetime)if(this.loop){if(this._currentTime=L.mod(this._currentTime,this._lifetime),this.bursts){let d=this.bursts.length;for(r=0;r<d;r++)this.bursts[r]._complete=!1}}else this._isComplete=!0,this._complete.raiseEvent(this);e.frameNumber%120===0&&Kwt(this)};B9.prototype.isDestroyed=function(){return!1};B9.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),me(this)};var yre=B9;var XIo=x(T(),1);var xre=class{constructor(){ct(this,"quadtree");ct(this,"tilingScheme");ct(this,"errorEvent");ge.throwInstantiationError()}static computeDefaultLevelZeroMaximumGeometricError(t){return t.ellipsoid.maximumRadius*2*Math.PI*.25/(65*t.getNumberOfXTilesAtLevel(0))}update(t,n){ge.throwInstantiationError()}beginUpdate(t,n,i){ge.throwInstantiationError()}endUpdate(t,n,i){ge.throwInstantiationError()}getLevelMaximumGeometricError(t){ge.throwInstantiationError()}loadTile(t,n,i){ge.throwInstantiationError()}computeTileVisibility(t,n,i){ge.throwInstantiationError()}showTileThisFrame(t,n,i,o){ge.throwInstantiationError()}computeDistanceToTile(t,n){ge.throwInstantiationError()}isDestroyed(){ge.throwInstantiationError()}destroy(){ge.throwInstantiationError()}},Tre=xre;var kIo=x(T(),1);function _re(e){e=e??1,this._radius=e??1}Object.defineProperties(_re.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});_re.prototype.emit=function(e){let t=L.randomBetween(0,L.TWO_PI),n=L.randomBetween(0,L.PI),i=L.randomBetween(0,this._radius),o=i*Math.cos(t)*Math.sin(n),r=i*Math.sin(t)*Math.sin(n),s=i*Math.cos(n);e.position=h.fromElements(o,r,s,e.position),e.velocity=h.normalize(e.position,e.velocity)};var Sre=_re;var OIo=x(T(),1);function z9(){}z9.prototype.evaluate=function(e,t){ge.throwInstantiationError()};z9.prototype.evaluateColor=function(e,t){ge.throwInstantiationError()};z9.prototype.getShaderFunction=function(e,t,n,i){ge.throwInstantiationError()};z9.prototype.getVariables=function(){ge.throwInstantiationError()};var Zre=z9;var JIo=x(T(),1);function YG(e){this._ready=!1,this._provider=void 0,this._errorEvent=new Se,this._readyEvent=new Se,$wt(this,e)}Object.defineProperties(YG.prototype,{errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},ready:{get:function(){return this._ready}},provider:{get:function(){return this._provider}}});YG.fromWorldTerrain=function(e){return new YG(R_(e))};YG.fromWorldBathymetry=function(e){return new YG(_2(e))};function qwt(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function $wt(e,t){let n;try{n=await Promise.resolve(t),e._provider=n,e._ready=!0,e._readyEvent.raiseEvent(n)}catch(i){qwt(e._errorEvent,i)}}var H9=YG;var qIo=x(T(),1);function wG(){}wG.prototype.boundingVolume=void 0;wG.prototype.boundingSphere=void 0;wG.prototype.distanceToCamera=function(e){ge.throwInstantiationError()};wG.prototype.intersectPlane=function(e){ge.throwInstantiationError()};wG.prototype.createDebugVolume=function(e){ge.throwInstantiationError()};var Vre=wG;var rPo=x(T(),1);function K9(e){e=e??B.EMPTY_OBJECT,this._tilingScheme=l(e.tilingScheme)?e.tilingScheme:new Ji({ellipsoid:e.ellipsoid}),this._color=e.color??U.YELLOW,this._errorEvent=new Se,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0}Object.defineProperties(K9.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}});K9.prototype.getTileCredits=function(e,t,n){};K9.prototype.requestImage=function(e,t,n,i){let o=document.createElement("canvas");o.width=256,o.height=256;let r=o.getContext("2d"),s=this._color.toCssColorString();return r.strokeStyle=s,r.lineWidth=2,r.strokeRect(1,1,255,255),r.font="bold 25px Arial",r.textAlign="center",r.fillStyle=s,r.fillText(`L: ${n}`,124,86),r.fillText(`X: ${e}`,124,136),r.fillText(`Y: ${t}`,124,186),Promise.resolve(o)};K9.prototype.pickFeatures=function(e,t,n,i,o){};var J9=K9;var cPo=x(T(),1);function Cre(e){ge.throwInstantiationError()}Cre.prototype.isReady=ge.throwInstantiationError;Cre.prototype.shouldDiscardImage=ge.throwInstantiationError;var Rre=Cre;var dPo=x(T(),1),j2e={START:0,LOADING:1,READY:2,UPSAMPLED_ONLY:3};Object.freeze(j2e);var Gre=j2e;var SPo=x(T(),1);function kH(e,t){this.show=!0,l(e)||(e=new $e),this.rectangle=$e.clone(e),l(t)||(t=no.fromType(no.ColorType,{color:new U(1,1,1,1)})),this.material=t,this._material=void 0,this._overlayCommand=void 0,this._rs=void 0}kH.prototype.update=function(e){if(!this.show)return;let t=this._rs;if((!l(t)||!$e.equals(t.viewport,this.rectangle))&&(this._rs=Oe.fromCache({blending:tn.ALPHA_BLEND,viewport:this.rectangle})),e.passes.render){let i=e.context;if(this._material!==this.material||!l(this._overlayCommand)){this._material=this.material,l(this._overlayCommand)&&this._overlayCommand.shaderProgram.destroy();let o=new ze({sources:[this._material.shaderSource,_9]});this._overlayCommand=i.createViewportQuadCommand(o,{renderState:this._rs,uniformMap:this._material._uniforms,owner:this}),this._overlayCommand.pass=We.OVERLAY}this._material.update(i),this._overlayCommand.renderState=this._rs,this._overlayCommand.uniformMap=this._material._uniforms,e.commandList.push(this._overlayCommand)}};kH.prototype.isDestroyed=function(){return!1};kH.prototype.destroy=function(){return l(this._overlayCommand)&&(this._overlayCommand.shaderProgram=this._overlayCommand.shaderProgram&&this._overlayCommand.shaderProgram.destroy()),me(this)};var Are=kH;var CPo=x(T(),1);var Ere=class{constructor(){ct(this,"globalTransform");ct(this,"shapeTransform");ct(this,"shape");ct(this,"minBounds");ct(this,"maxBounds");ct(this,"dimensions");ct(this,"paddingBefore");ct(this,"paddingAfter");ct(this,"names");ct(this,"types");ct(this,"componentTypes");ct(this,"minimumValues");ct(this,"maximumValues");ct(this,"maximumTileCount");ct(this,"availableLevels");ct(this,"keyframeCount");ct(this,"timeIntervalCollection");ge.throwInstantiationError()}requestData(t){ge.throwInstantiationError()}},Lre=Ere;var EPo=x(T(),1);function Bg(){ge.throwInstantiationError()}Object.defineProperties(Bg.prototype,{orientedBoundingBox:{get:ge.throwInstantiationError},boundingSphere:{get:ge.throwInstantiationError},boundTransform:{get:ge.throwInstantiationError},shapeTransform:{get:ge.throwInstantiationError},shaderUniforms:{get:ge.throwInstantiationError},shaderDefines:{get:ge.throwInstantiationError},shaderMaximumIntersectionsLength:{get:ge.throwInstantiationError}});Bg.prototype.update=ge.throwInstantiationError;Bg.prototype.updateViewTransforms=ge.throwInstantiationError;Bg.prototype.convertLocalToShapeUvSpace=ge.throwInstantiationError;Bg.prototype.computeOrientedBoundingBoxForTile=ge.throwInstantiationError;Bg.prototype.computeOrientedBoundingBoxForSample=ge.throwInstantiationError;Bg.DefaultMinBounds=ge.throwInstantiationError;Bg.DefaultMaxBounds=ge.throwInstantiationError;var Wre=Bg;var BPo=x(T(),1);var eMt=new U,tMt=new U,nMt=new U,iMt=new U,Q2e=new ce,j9=new Uint8Array(4);function q2e(e,t,n,i){let o=t.height===n.height?0:(e-t.height)/(n.height-t.height);return U.lerp(t.color,n.color,o,i)}function UH(e,t){return{height:e,color:U.clone(t)}}function $2e(e){return e=e.filter(function(t,n,i){let o=n>0,r=n<i.length-1,s=o?t.height===i[n-1].height:!0,a=r?t.height===i[n+1].height:!0;return!s||!a}),e=e.filter(function(t,n,i){let o=n>0,r=n<i.length-1,s=o?U.equals(t.color,i[n-1].color):!1,a=r?U.equals(t.color,i[n+1].color):!1;return!s||!a}),e=e.filter(function(t,n,i){let o=n>0,r=o?U.equals(t.color,i[n-1].color):!1,s=o?t.height===i[n-1].height:!0;return!r||!s}),e}function oMt(e){let t,n,i=[],o=e.length;for(t=0;t<o;t++){let r=e[t],s=r.entries,a=s.length,c=[];for(n=0;n<a;n++){let b=s[n],f=L.clamp(b.height,$d._minimumHeight,$d._maximumHeight),y=U.clone(b.color,eMt);y.red*=y.alpha,y.green*=y.alpha,y.blue*=y.alpha,c.push(UH(f,y))}let d=!0,u=!0;for(n=0;n<a-1;n++){let b=c[n+0],f=c[n+1];d=d&&b.height<=f.height,u=u&&b.height>=f.height}u?c=c.reverse():d||Pp(c,function(b,f){return L.sign(b.height-f.height)});let m=r.extendDownwards??!1,p=r.extendUpwards??!1;c.length===1&&!m&&!p&&(m=!0,p=!0),m&&c.splice(0,0,UH($d._minimumHeight,c[0].color)),p&&c.splice(c.length,0,UH($d._maximumHeight,c[c.length-1].color)),c=$2e(c),i.push(c)}return i}function rMt(e){let t=oMt(e),n=[],i,o;function r(d,u){n.push(UH(d,u))}function s(d,u,m){let p=U.multiplyByScalar(m,1-u.alpha,iMt);p=U.add(p,u,p),r(d,p)}let a=t.length;for(o=0;o<a;o++){let d=t[o],u=0,m=0;i=n,n=[];let p=d.length,b=i.length;for(;u<p||m<b;){let f=u<p?d[u]:void 0,y=u>0?d[u-1]:void 0,_=u<p-1?d[u+1]:void 0,S=m<b?i[m]:void 0,Z=m>0?i[m-1]:void 0,V=m<b-1?i[m+1]:void 0;if(l(f)&&l(S)&&f.height===S.height){let C=l(V)&&S.height===V.height,G=!l(Z),E=!l(V),v=l(_)&&f.height===_.height,F=!l(y),P=!l(_);C?v?(s(f.height,f.color,S.color),s(f.height,_.color,V.color)):F?(r(f.height,S.color),s(f.height,f.color,V.color)):P?(s(f.height,f.color,S.color),r(f.height,V.color)):(s(f.height,f.color,S.color),s(f.height,f.color,V.color)):G?v?(r(f.height,f.color),s(f.height,_.color,S.color)):P?(r(f.height,f.color),r(f.height,S.color)):(F||r(f.height,f.color),s(f.height,f.color,S.color)):E?v?(s(f.height,f.color,S.color),r(f.height,_.color)):F?(r(f.height,S.color),r(f.height,f.color)):P?s(f.height,f.color,S.color):(s(f.height,f.color,S.color),r(f.height,f.color)):v?(s(f.height,f.color,S.color),s(f.height,_.color,S.color)):F?(r(f.height,S.color),s(f.height,f.color,S.color)):P?(s(f.height,f.color,S.color),r(f.height,S.color)):s(f.height,f.color,S.color),u+=v?2:1,m+=C?2:1}else if(l(f)&&l(S)&&l(Z)&&f.height<S.height){let C=q2e(f.height,Z,S,nMt);l(y)?l(_)?s(f.height,f.color,C):(s(f.height,f.color,C),r(f.height,C)):(r(f.height,C),s(f.height,f.color,C)),u++}else if(l(S)&&l(f)&&l(y)&&S.height<f.height){let C=q2e(S.height,y,f,tMt);l(Z)?l(V)?s(S.height,C,S.color):(s(S.height,C,S.color),r(S.height,C)):(r(S.height,C),s(S.height,C,S.color)),m++}else l(f)&&(!l(S)||f.height<S.height)?(l(S)&&!l(Z)&&!l(_)?(r(f.height,f.color),r(f.height,$d._emptyColor),r(S.height,$d._emptyColor)):(!l(S)&&l(Z)&&!l(y)&&(r(Z.height,$d._emptyColor),r(f.height,$d._emptyColor)),r(f.height,f.color)),u++):l(S)&&(!l(f)||S.height<f.height)&&(r(S.height,S.color),m++)}}return $2e(n)}function $d(e){let{scene:t,layers:n}=e??B.EMPTY_OBJECT,{context:i}=t,o=rMt(n),r=o.length,s,a,c;if(!$d._useFloatTexture(i)){a=Me.UNSIGNED_BYTE,c=Be.RGBA,s=new Uint8Array(r*4);for(let b=0;b<r;b++)ce.packFloat(o[b].height,Q2e),ce.pack(Q2e,s,b*4)}else{a=Me.FLOAT,c=i.webgl2?Be.RED:Be.LUMINANCE,s=new Float32Array(r);for(let b=0;b<r;b++)s[b]=o[b].height}let u=Ct.create({context:i,pixelFormat:c,pixelDatatype:a,source:{arrayBufferView:s,width:r,height:1},sampler:new kt({wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:zt.NEAREST,magnificationFilter:ni.NEAREST})}),m=new Uint8Array(r*4);for(let b=0;b<r;b++)o[b].color.toBytes(j9),m[b*4+0]=j9[0],m[b*4+1]=j9[1],m[b*4+2]=j9[2],m[b*4+3]=j9[3];let p=Ct.create({context:i,pixelFormat:Be.RGBA,pixelDatatype:Me.UNSIGNED_BYTE,source:{arrayBufferView:m,width:r,height:1},sampler:new kt({wrapS:sn.CLAMP_TO_EDGE,wrapT:sn.CLAMP_TO_EDGE,minificationFilter:zt.LINEAR,magnificationFilter:ni.LINEAR})});return no.fromType("ElevationBand",{heights:u,colors:p})}$d._useFloatTexture=function(e){return e.floatingPointTexture};$d._maximumHeight=5906376425472;$d._minimumHeight=-5906376425472;$d._emptyColor=new U(0,0,0,0);var vre=$d;var eXo=x(T(),1);async function sMt(e,t){t=t??{},t.cacheBytes=t.cacheBytes??1536*1024*1024,t.maximumCacheOverflowBytes=t.maximumCacheOverflowBytes??1024*1024*1024,t.enableCollision=t.enableCollision??!0,e=e??B.EMPTY_OBJECT,e.onlyUsingWithGoogleGeocoder||gt("google-tiles-with-google-geocoder","Only the Google geocoder can be used with Google Photorealistic 3D Tiles. Set the `geocode` property of Viewer constructor options. You can set additionalOptions.onlyUsingWithGoogleGeocoder to hide this warning once you have configured the geocoder.");let n=e.key??ua.defaultApiKey;if(!l(n))return aMt(t);let i,o=ua.getDefaultCredit();l(o)&&(i=[o]);let r=new ve({url:`${ua.mapTilesApiEndpoint}v1/3dtiles/root.json`,queryParameters:{key:n},credits:i});return wr.fromUrl(r,t)}var eFe={};async function aMt(e){let i=eFe[2275207];l(i)||(i=ss.fromAssetId(2275207),eFe[2275207]=i);let o=await i;return wr.fromUrl(o,e)}var Fre=sMt;var aXo=x(T(),1);async function cMt(e){let t=await wr.fromIonAssetId(96188,e);e=e??B.EMPTY_OBJECT;let n=e.style;if(!l(n)){let i=(e.defaultColor??U.WHITE).toCssColorString();n=new og({color:`Boolean(\${feature['cesium#color']}) ? color(\${feature['cesium#color']}) : ${i}`})}return t.style=n,t}var Ire=cMt;var gXo=x(T(),1);function lMt(e){e=e??B.EMPTY_OBJECT;let t=[],n=e.geometry;(!l(n.attributes)||!l(n.primitiveType))&&(n=n.constructor.createGeometry(n));let i=n.attributes,o=I.clone(e.modelMatrix??I.IDENTITY),r=e.length??1e4;if(l(i.normal)&&t.push(new Nt({geometry:Bn.createLineSegmentsForVectors(n,"normal",r),attributes:{color:new Qt(1,0,0,1)},modelMatrix:o})),l(i.tangent)&&t.push(new Nt({geometry:Bn.createLineSegmentsForVectors(n,"tangent",r),attributes:{color:new Qt(0,1,0,1)},modelMatrix:o})),l(i.bitangent)&&t.push(new Nt({geometry:Bn.createLineSegmentsForVectors(n,"bitangent",r),attributes:{color:new Qt(0,0,1,1)},modelMatrix:o})),t.length>0)return new Nn({asynchronous:!1,geometryInstances:t,appearance:new yn({flat:!0,translucent:!1})})}var Pre=lMt;var xXo=x(T(),1),Xre=`uniform sampler2D u_depthTexture; in vec2 v_textureCoordinates; void main() { float z_window = czm_unpackDepth(texture(u_depthTexture, v_textureCoordinates)); z_window = czm_reverseLogDepth(z_window); float n_range = czm_depthRange.near; float f_range = czm_depthRange.far; float z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range); float scale = pow(z_ndc * 0.5 + 0.5, 8.0); out_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0); } `;var SXo=x(T(),1);var Nre=class{get enabled(){return ge.throwInstantiationError()}set enabled(t){ge.throwInstantiationError()}connectedCallback(t){ge.throwInstantiationError()}disconnectedCallback(t){ge.throwInstantiationError()}update(t,n){ge.throwInstantiationError()}firstUpdate(t,n){ge.throwInstantiationError()}},Yre=Nre;var pNo=x(T(),1);var jXo=x(T(),1);var LXo=x(T(),1);var tFe=new h,dMt=new nn(h.UNIT_X,0),uMt=new fn,mMt=new M(1,1,1);function qf(e,t,n,i=mMt){let{camera:o,ellipsoid:r}=e,s=r.scaleToGeodeticSurface(o.positionWC,tFe);if(!l(s))return;let a=h.magnitude(o.positionWC),c=h.magnitude(s),d=a<=c,u=r.geodeticSurfaceNormal(o.positionWC,tFe),m=h.dot(u,o.directionWC),p=m>0;if(d||p){let b=nn.fromPointNormal(o.positionWC,u,dMt),{clientHeight:f}=e.canvas,y=i.y*f/(2*Math.tan(o.frustum.fovy*.5));b.distance-=m*y;let _=o.getPickRay(t,uMt);return di.rayPlane(_,b,n)}return o.pickEllipsoid(t,r,n)}var NXo=x(T(),1);var vXo=x(T(),1),nFe={LEFT:0,MIDDLE:1,RIGHT:2};Object.freeze(nFe);var Ba=nFe;function hMt(e){if(e===Ba.LEFT)return dn.LEFT_DOWN;if(e===Ba.MIDDLE)return dn.MIDDLE_DOWN;if(e===Ba.RIGHT)return dn.RIGHT_DOWN}function fMt(e){if(e===Ba.LEFT)return dn.LEFT_UP;if(e===Ba.MIDDLE)return dn.MIDDLE_UP;if(e===Ba.RIGHT)return dn.RIGHT_UP}var wre=class{static registerDragInputBindings(t,n,i){let o=new Set,r={isDragging:!1};for(let s of n){r.isDragging=!1;let a=hMt(s.button),c=fMt(s.button);l(a)&&t.setInputAction((...d)=>{r.isDragging=!0,l(i.start)&&i.start(...d)},a,s.modifier),l(c)&&(t.setInputAction((...d)=>{r.isDragging&&(r.isDragging=!1,l(i.end)&&i.end(...d))},c,s.modifier),t.setInputAction((...d)=>{r.isDragging&&(r.isDragging=!1,l(i.end)&&i.end(...d))},c)),o.add(s.modifier)}for(let s of o)t.setInputAction((...a)=>{r.isDragging&&l(i.change)&&i.change(...a)},dn.MOUSE_MOVE,s);return r}},$f=wre;var Mre=class e{static _getDefaultDragInputs(){return[Object.freeze({button:Ba.LEFT})]}constructor(t=B.EMPTY_OBJECT){this._enabled=!0,this._handler=void 0,this._lastUpdateTime=void 0,this.dragInputs=t.dragInputs??e._getDefaultDragInputs(),this._dragInputState=void 0,this._panDelta=new M,this._panPosition=new M,this.pickWorldPosition=qf,this._ellipsoidNormal=new h,this._ellipsoidSurfacePosition=new h,this._panDirectionX=new h,this._panDirectionY=new h,this._pixelSize=new M,this._panVelocity=new M,this.panSpeed=1,this.inertiaEnabled=!0,this.inertialDecay=6,this.maximumMovementRatio=.1}get enabled(){return this._enabled}set enabled(t){this._enabled=t,t?(this._lastUpdateTime=Tn(),this._panDelta.x=0,this._panDelta.y=0):l(this._dragInputState)&&(this._dragInputState.isDragging=!1)}get isDragging(){return l(this._dragInputState)&&this._dragInputState.isDragging}connectedCallback(t){let n=new Hs(t);this._handler=n,this._dragInputState=$f.registerDragInputBindings(n,this.dragInputs,{start:this._handleStartPan.bind(this),change:this._handlePan.bind(this)})}disconnectedCallback(t){let n=this._handler;l(n)&&!n.isDestroyed()&&n.destroy()}firstUpdate(){this._lastUpdateTime=Tn(),this._panDelta.x=0,this._panDelta.y=0}update(t){let n=(Tn()-this._lastUpdateTime)*kn.SECONDS_PER_MILLISECOND,{camera:i,ellipsoid:o,canvas:r}=t,s=-this._panDelta.x,a=this._panDelta.y;if(this.inertiaEnabled&&!this.isDragging){let C=Math.exp(-this.inertialDecay*n);this._panVelocity.x*=C,this._panVelocity.y*=C,s=this._panVelocity.x*n,a=this._panVelocity.y*n}let{clientWidth:c,clientHeight:d}=r;if(n===0||c===0||d===0||Math.abs(s)<=L.EPSILON3&&Math.abs(a)<=L.EPSILON3){this._lastUpdateTime=Tn(),this._panDelta.x=0,this._panDelta.y=0;return}let u=this._panPosition,m=this.pickWorldPosition(t,u,this._ellipsoidSurfacePosition);l(m)||(m=o.scaleToGeodeticSurface(i.positionWC,this._ellipsoidSurfacePosition));let p=h.clone(i.rightWC,this._panDirectionX);p=h.normalize(p,this._panDirectionX);let b=h.normalize(m,this._panDirectionY),f=h.distance(i.positionWC,m),{drawingBufferWidth:y,drawingBufferHeight:_,pixelRatio:S}=t,Z=i.frustum.getPixelDimensions(y,_,f,S,this._pixelSize),V=this.maximumMovementRatio*Math.max(c,d);s=L.clamp(s,-V,V),this._panVelocity.x=s/n,s*=this.panSpeed*Z.x,a=L.clamp(a,-V,V),this._panVelocity.y=a/n,a*=this.panSpeed*Z.y,i.move(p,s),i.move(b,a),this._lastUpdateTime=Tn(),this._panDelta.x=0,this._panDelta.y=0}_handleStartPan(){this.enabled&&(this._panDelta.x=0,this._panDelta.y=0)}_handlePan(t){this._panDelta.x+=t.endPosition.x-t.startPosition.x,this._panDelta.y+=t.endPosition.y-t.startPosition.y,this._panPosition.x=t.endPosition.x,this._panPosition.y=t.endPosition.y}},Q9=Mre;var lNo=x(T(),1);var kre=class e{static _getDefaultDragInputs(){return[Object.freeze({button:Ba.LEFT})]}constructor(t=B.EMPTY_OBJECT){this._enabled=!0,this._handler=void 0,this._lastUpdateTime=void 0,this.dragInputs=t.dragInputs??e._getDefaultDragInputs(),this._dragInputState=void 0,this._panDelta=new M,this._panPosition=new M,this.pickWorldPosition=qf,this._ellipsoidNormal=new h,this._ellipsoidSurfacePosition=new h,this._panDirectionX=new h,this._panDirectionY=new h,this._pixelSize=new M,this._panVelocity=new M,this.panSpeed=1,this.inertiaEnabled=!0,this.inertialDecay=6,this.maximumMovementRatio=.1}get enabled(){return this._enabled}set enabled(t){this._enabled=t,t?(this._panDelta.x=0,this._panDelta.y=0):l(this._dragInputState)&&(this._dragInputState.isDragging=!1)}get isDragging(){return l(this._dragInputState)&&this._dragInputState.isDragging}connectedCallback(t){let n=new Hs(t);this._handler=n,this._dragInputState=$f.registerDragInputBindings(n,this.dragInputs,{start:this._handleStartPan.bind(this),change:this._handlePan.bind(this)})}disconnectedCallback(t){let n=this._handler;l(n)&&!n.isDestroyed()&&n.destroy()}firstUpdate(){this._lastUpdateTime=Tn(),this._panDelta.x=0,this._panDelta.y=0}update(t){let n=(Tn()-this._lastUpdateTime)*kn.SECONDS_PER_MILLISECOND,i=-this._panDelta.x,o=this._panDelta.y;if(this.inertiaEnabled&&!this.isDragging){let E=Math.exp(-this.inertialDecay*n);this._panVelocity.x*=E,this._panVelocity.y*=E,i=this._panVelocity.x*n,o=this._panVelocity.y*n}let{camera:r,ellipsoid:s,canvas:a}=t,{clientWidth:c,clientHeight:d}=a;if(n===0||c===0||d===0||Math.abs(i)<=L.EPSILON3&&Math.abs(o)<=L.EPSILON3){this._lastUpdateTime=Tn(),this._panDelta.x=0,this._panDelta.y=0;return}let u=this._panPosition,m=this.pickWorldPosition(t,u,this._ellipsoidSurfacePosition);l(m)||(m=s.scaleToGeodeticSurface(r.positionWC,this._ellipsoidSurfacePosition));let p=s.geodeticSurfaceNormal(m,this._ellipsoidNormal),b=h.clone(r.rightWC,this._panDirectionX);b=h.normalize(b,this._panDirectionX);let f=h.clone(r.upWC,this._panDirectionY),y=Math.abs(h.dot(p,r.directionWC));L.lessThan(y,1,L.EPSILON6)&&(f=h.cross(p,b,this._panDirectionY)),f=h.normalize(f,this._panDirectionY);let _=h.distance(r.positionWC,m),{drawingBufferWidth:S,drawingBufferHeight:Z,pixelRatio:V}=t,C=r.frustum.getPixelDimensions(S,Z,_,V,this._pixelSize),G=this.maximumMovementRatio*Math.max(c,d);i=L.clamp(i,-G,G),this._panVelocity.x=i/n,i*=this.panSpeed*C.x,o=L.clamp(o,-G,G),this._panVelocity.y=o/n,o*=this.panSpeed*C.y,r.move(b,i),r.move(f,o),this._lastUpdateTime=Tn(),this._panDelta.x=0,this._panDelta.y=0}_handleStartPan(t){this.enabled&&(this._panDelta.x=0,this._panDelta.y=0)}_handlePan(t){this._panDelta.x+=t.endPosition.x-t.startPosition.x,this._panDelta.y+=t.endPosition.y-t.startPosition.y,this._panPosition.x=t.endPosition.x,this._panPosition.y=t.endPosition.y}},q9=kre;var Ure=class{constructor(){this._elevatorController=new Q9,this._mapController=new q9,this._enabled=!0,this._ellipsoidNormal=new h,this.angleThreshold=L.toRadians(125)}get enabled(){return this._enabled}set enabled(t){this._enabled=t}get elevatorController(){return this._elevatorController}get mapController(){return this._mapController}connectedCallback(t){this._elevatorController.connectedCallback(t),this._mapController.connectedCallback(t)}disconnectedCallback(t){this._elevatorController.disconnectedCallback(t),this._mapController.disconnectedCallback(t)}firstUpdate(){this._elevatorController.firstUpdate(),this._mapController.firstUpdate()}update(t){let n=t.camera,i=t.ellipsoid.geodeticSurfaceNormal(n.positionWC,this._ellipsoidNormal),o=Math.abs(h.angleBetween(i,n.directionWC));(o<this.angleThreshold&&o>Math.PI-this.angleThreshold?this._elevatorController:this._mapController).update(t)}},Dre=Ure;var INo=x(T(),1);var Ore=class e{static _getDefaultDragInputs(){return[Object.freeze({button:Ba.LEFT,modifier:Ho.CTRL}),Object.freeze({button:Ba.RIGHT})]}constructor(t=B.EMPTY_OBJECT){this._enabled=!0,this._handler=void 0,this._lastUpdateTime=void 0,this.tiltEnabled=!0,this.orbitEnabled=!0,this.useDragPosition=!1,this.dragInputs=t.dragInputs??e._getDefaultDragInputs(),this._dragInputState=void 0,this._dragDelta=new M,this._screenSpaceDragPosition=new M,this._screenSpaceOrigin=new M,this.pickWorldPosition=qf,this._hasTarget=!1,this._target=new h,this._axis=new h,this.tiltMagnitude=2,this.dampingEnabled=!0,this.tiltAnimationDuration=.0045,this.maximumTiltVelocity=L.PI,this.minimumTiltVelocity=L.EPSILON20,this.orbitMagnitude=2,this.orbitAnimationDuration=.0045,this.maximumOrbitVelocity=L.TWO_PI,this.minimumOrbitVelocity=L.EPSILON20,this._tiltAxis=new h,this._tiltQuaternion=new Ye,this._tiltOffset=new h,this._tiltOrigin=new h,this._tiltDampenedResults={velocity:0,value:0},this._orbitTargetEnu=new I,this._orbitTargetEast=new h,this._orbitQuaternion=new Ye,this._orbitOffset=new h,this._orbitLookOffset=new h,this._orbitOrigin=new h,this._orbitDampenedResults={velocity:0,value:0},this.maximumMovementRatio=.1}get enabled(){return this._enabled}set enabled(t){this._enabled=t,t?(this._lastUpdateTime=Tn(),this._dragDelta.x=0,this._dragDelta.y=0):l(this._dragInputState)&&(this._dragInputState.isDragging=!1)}get isDragging(){return l(this._dragInputState)&&this._dragInputState.isDragging}connectedCallback(t){let n=new Hs(t);this._handler=n,this._dragInputState=$f.registerDragInputBindings(n,this.dragInputs,{start:this._handleStartDrag.bind(this),change:this._handleDrag.bind(this)})}disconnectedCallback(t){let n=this._handler;l(n)&&!n.isDestroyed()&&n.destroy()}firstUpdate(){this._lastUpdateTime=Tn(),this._dragDelta.x=0,this._dragDelta.y=0}_handleStartDrag(t){this.enabled&&(this._hasTarget=!1,this._screenSpaceDragPosition.x=t.position.x,this._screenSpaceDragPosition.y=t.position.y,this._dragDelta.x=0,this._dragDelta.y=0)}_handleDrag(t){this._dragDelta.x+=t.endPosition.x-t.startPosition.x,this._dragDelta.y+=t.endPosition.y-t.startPosition.y}get tiltAngle(){return this._tiltDampenedResults.value}get tiltVelocity(){return this._tiltDampenedResults.velocity}set tiltVelocity(t){this._tiltDampenedResults.velocity=t}get orbitAngle(){return this._orbitDampenedResults.value}get orbitVelocity(){return this._orbitDampenedResults.velocity}set orbitVelocity(t){this._orbitDampenedResults.velocity=t}orbit(t,n,i,o,r,s=ie.default){let a=bt.eastNorthUpToFixedFrame(n,s,this._orbitTargetEnu),c=I.multiplyByPointAsVector(a,h.UNIT_X,this._orbitTargetEast),d=h.angleBetween(t.directionWC,c);if(Math.abs(this.orbitVelocity)<this.minimumOrbitVelocity&&(this.orbitVelocity=0),!this.isDragging&&this.dampingEnabled&&(o+=this.orbitVelocity*r),o===0)return;let u=d+o,m=this.dampingEnabled?this.maximumOrbitVelocity*this.orbitMagnitude:void 0,p=this.dampingEnabled?this.orbitAnimationDuration:void 0;this._orbitDampenedResults=L.smoothDamp(d,u,this.orbitVelocity,r,m,p,this._orbitDampenedResults);let b=this.orbitAngle-d,f=q.fromQuaternion(Ye.fromAxisAngle(i,-b,this._orbitQuaternion)),y=h.subtract(t.positionWC,n,this._orbitOffset),_=h.dot(y,t.directionWC),S=h.multiplyByScalar(t.directionWC,_,this._orbitLookOffset),Z=h.subtract(y,S,this._orbitLookOffset),V=q.multiplyByVector(f,y,this._orbitOffset),C=q.multiplyByVector(f,Z,this._orbitLookOffset);h.add(n,V,t.position);let G=h.add(n,C,this._orbitOrigin);t.lookAtWorldPosition(G,s)}tilt(t,n,i,o,r,s=ie.default){if(Math.abs(this.tiltVelocity)<this.minimumTiltVelocity&&(this.tiltVelocity=0),!this.isDragging&&this.dampingEnabled&&(o+=this.tiltVelocity*r),o===0)return;let a=h.angleBetween(t.direction,i);(a<L.PI_OVER_TWO&&o>0||a>L.PI_OVER_TWO&&o<0)&&(o*=Math.abs(Math.sin(a)));let c=a+o,d=this.dampingEnabled?this.maximumTiltVelocity*this.tiltMagnitude:void 0,u=this.dampingEnabled?this.tiltAnimationDuration:void 0;L.smoothDamp(a,c,this.tiltVelocity,r,d,u,this._tiltDampenedResults);let m=this.tiltAngle-a,p=q.fromQuaternion(Ye.fromAxisAngle(t.rightWC,-m,this._tiltQuaternion)),b=h.subtract(t.position,n,this._tiltOffset),f=h.dot(b,t.directionWC),y=h.multiplyByScalar(t.directionWC,f,this._tiltOffset),_=h.subtract(t.position,y,this._tiltOrigin),S=q.multiplyByVector(p,y,this._tiltOffset);h.add(_,S,t.position),t.lookAtWorldPosition(_,s)}update(t){let n=(Tn()-this._lastUpdateTime)*kn.SECONDS_PER_MILLISECOND,{canvas:i}=t,{clientWidth:o,clientHeight:r}=i;if(n===0||o===0||r===0){this._lastUpdateTime=Tn(),this._dragDelta.x=0,this._dragDelta.y=0;return}let s=this._target;if(this.isDragging&&!this._hasTarget){let a=this._screenSpaceDragPosition;this.useDragPosition||(a=this._screenSpaceOrigin,a.x=o/2,a.y=r/2);let c=this.pickWorldPosition(t,a,this._target),d=l(c);this._hasTarget=d,s=c}if(this._hasTarget){let{camera:a,ellipsoid:c}=t,d=c.geodeticSurfaceNormal(s,this._axis),u=h.negate(d,this._axis);if(this.orbitEnabled){let m=this._dragDelta.x/o;m=L.clamp(m,-this.maximumMovementRatio,this.maximumMovementRatio),m*=this.orbitMagnitude*L.TWO_PI,this.orbit(a,s,u,m,n,c)}if(this.tiltEnabled){let m=this._dragDelta.y/r;m=L.clamp(m,-this.maximumMovementRatio,this.maximumMovementRatio),m*=this.tiltMagnitude*L.PI,this.tilt(a,s,u,m,n,c)}}this._lastUpdateTime=Tn(),this._dragDelta.x=0,this._dragDelta.y=0}},Bre=Ore;var KNo=x(T(),1);var zre=class e{static _getDefaultDragInputs(){return[Object.freeze({button:Ba.MIDDLE})]}static _getDefaultScrollInputs(){return[dn.WHEEL]}constructor(t=B.EMPTY_OBJECT){this._enabled=!0,this._handler=void 0,this._lastUpdateTime=void 0,this.usePointerPosition=!1,this.dragInputs=t.dragInputs??e._getDefaultDragInputs(),this.scrollInputs=t.scrollInputs??e._getDefaultScrollInputs(),this._dragInputState=void 0,this._dragDelta=new M,this._scrollDelta=0,this._zoomInputVelocity=0,this._screenSpaceScrollPosition=new M,this._screenSpaceDragPosition=new M,this._screenSpaceOrigin=new M,this.zoomSensitivity=.2,this.pickWorldPosition=qf,this.zoomDistanceRatio=.4,this.inertiaEnabled=!1,this.inertialDecay=6,this.minimumZoomDistance=0,this.maximumZoomDistance=1e5,this.minimumZoomVelocity=L.EPSILON20,this.maximumZoomVelocity=1,this.dampingEnabled=!0,this.zoomAnimationDuration=.45,this._target=new h,this._zoomDirection=new h,this._zoomDampenedResults={velocity:0,value:0}}get enabled(){return this._enabled}set enabled(t){this._enabled=t,t?(this._lastUpdateTime=Tn(),this._scrollDelta=0,this._dragDelta.x=0,this._dragDelta.y=0):l(this._dragInputState)&&(this._dragInputState.isDragging=!1)}get isDragging(){return l(this._dragInputState)&&this._dragInputState.isDragging}connectedCallback(t){let n=new Hs(t);this._handler=n;for(let i of this.scrollInputs)n.setInputAction(this._handleZoom.bind(this),i);n.setInputAction(this._handleZoomPosition.bind(this),dn.MOUSE_MOVE),this._dragInputState=$f.registerDragInputBindings(n,this.dragInputs,{start:this._handleStartDrag.bind(this),change:this._handleDrag.bind(this)})}disconnectedCallback(t){let n=this._handler;l(n)&&!n.isDestroyed()&&n.destroy()}firstUpdate(){this._lastUpdateTime=Tn(),this._scrollDelta=0,this._dragDelta.x=0,this._dragDelta.y=0}get zoomDistance(){return this._zoomDampenedResults.value}get zoomVelocity(){return this._zoomDampenedResults.velocity}set zoomVelocity(t){this._zoomDampenedResults.velocity=t}update(t){let i=(Tn()-this._lastUpdateTime)*kn.SECONDS_PER_MILLISECOND,{canvas:o}=t,{clientWidth:r,clientHeight:s}=o;if(i===0||r===0||s===0){this._lastUpdateTime=Tn(),this._scrollDelta=0,this._dragDelta.x=0,this._dragDelta.y=0;return}let a=this._scrollDelta+this._dragDelta.y;if(a===0&&this.inertiaEnabled){let _=Math.exp(-this.inertialDecay*i);this._zoomInputVelocity*=_,a=this._zoomInputVelocity*i}if(Math.abs(this.zoomVelocity)<this.minimumZoomVelocity&&a<=L.EPSILON3&&a>=-L.EPSILON3&&this.zoomVelocity<=L.EPSILON3){this._lastUpdateTime=Tn(),this._scrollDelta=0,this._dragDelta.x=0,this._dragDelta.y=0,this.zoomVelocity=0;return}this._zoomInputVelocity=L.clamp(a/i,-this.maximumZoomVelocity,this.maximumZoomVelocity);let{camera:c,ellipsoid:d}=t,u=c.direction,m=h.magnitude(c.positionWC)-d.maximumRadius,p=this.isDragging?this._screenSpaceDragPosition:this._screenSpaceScrollPosition;this.useDragPosition||(p=this._screenSpaceOrigin,p.x=r/2,p.y=s/2);let b=this.pickWorldPosition(t,p,this._target);l(b)&&(u=h.subtract(b,c.positionWC,this._zoomDirection),u=h.normalize(u,this._zoomDirection),m=h.distance(b,c.positionWC)),m=L.clamp(m,m>0?this.minimumZoomDistance:-this.maximumZoomDistance,m>0?this.maximumZoomDistance:-this.minimumZoomDistance);let f=a*m*this.zoomDistanceRatio,y=this.dampingEnabled?this.zoomAnimationDuration:void 0;this._zoomDampenedResults=L.smoothDamp(0,f,this.zoomVelocity,i,void 0,y,this._zoomDampenedResults),c.move(u,this.zoomDistance),this._lastUpdateTime=Tn(),this._scrollDelta=0,this._dragDelta.x=0,this._dragDelta.y=0}_handleZoom(t){this._scrollDelta+=t*this.zoomSensitivity}_handleZoomPosition(t){this._screenSpaceScrollPosition.x=t.endPosition.x,this._screenSpaceScrollPosition.y=t.endPosition.y}_handleStartDrag(t){this.enabled&&(this._screenSpaceDragPosition.x=t.position.x,this._screenSpaceDragPosition.y=t.position.y,this._dragDelta.x=0,this._dragDelta.y=0)}_handleDrag(t){this._dragDelta.x+=t.endPosition.x-t.startPosition.x,this._dragDelta.y+=t.endPosition.y-t.startPosition.y}},Hre=zre;var jNo=x(T(),1),iFe={FLOAT:"float",VEC2:"vec2",VEC3:"vec3",VEC4:"vec4",MAT2:"mat2",MAT3:"mat3",MAT4:"mat4"};Object.freeze(iFe);var Kre=iFe;var qNo=x(T(),1),oFe={SIGX:"SIGX",SIGY:"SIGY",SIGZ:"SIGZ",VARX:"VARX",VARY:"VARY",VARZ:"VARZ",SIGR:"VARZ"};Object.freeze(oFe);var Jre=oFe;var tYo=x(T(),1);function pMt(e){async function t({data:i}){let o=[],r={id:i.id,result:void 0,error:void 0};self.CESIUM_BASE_URL=i.baseUrl;try{let s=await e(i.parameters,o);r.result=s}catch(s){s instanceof Error?r.error={name:s.name,message:s.message,stack:s.stack}:r.error=s}i.canTransferArrayBuffer||(o.length=0);try{postMessage(r,o)}catch(s){r.result=void 0,r.error=`postMessage failed with error: ${dp(s)} with responseMessage: ${JSON.stringify(r)}`,postMessage(r)}}function n(i){postMessage({id:i.data?.id,error:`postMessage failed with error: ${JSON.stringify(i)}`})}return self.onmessage=t,self.onmessageerror=n,self}var jre=pMt;globalThis.CESIUM_VERSION="1.144.0";var Xsr=x(T(),1);var mtr=x(T(),1);var ctr=x(T(),1);var $er=x(T(),1),$9;typeof ko<"u"&&($9=ko);(function(){/*! * Knockout JavaScript library v3.5.1 * (c) The Knockout.js team - http://knockoutjs.com/ * License: MIT (http://www.opensource.org/licenses/mit-license.php) */(function(){(function(e){var t=this||(0,eval)("this"),n=t.document,i=t.navigator,o=t.jQuery,r=t.JSON;o||typeof jQuery>"u"||(o=jQuery),(function(s){s(t.ko={})})(function(s,a){function c(g,R){return g===null||typeof g in y?g===R:!1}function d(g,R){var A;return function(){A||(A=f.a.setTimeout(function(){A=e,g()},R))}}function u(g,R){var A;return function(){clearTimeout(A),A=f.a.setTimeout(g,R)}}function m(g,R){R&&R!=="change"?R==="beforeChange"?this.pc(g):this.gb(g,R):this.qc(g)}function p(g,R){R!==null&&R.s&&R.s()}function b(g,R){var A=this.qd,W=A[C];W.ra||(this.Qb&&this.mb[R]?(A.uc(R,g,this.mb[R]),this.mb[R]=null,--this.Qb):W.I[R]||A.uc(R,g,W.J?{da:g}:A.$c(g)),g.Ja&&g.gd())}var f=typeof s<"u"?s:{};f.b=function(g,R){for(var A=g.split("."),W=f,X=0;X<A.length-1;X++)W=W[A[X]];W[A[A.length-1]]=R},f.L=function(g,R,A){g[R]=A},f.version="3.5.1",f.b("version",f.version),f.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1},f.a=(function(){function g(K,$){for(var ee in K)X.call(K,ee)&&$(ee,K[ee])}function R(K,$){if($)for(var ee in $)X.call($,ee)&&(K[ee]=$[ee]);return K}function A(K,$){return K.__proto__=$,K}function W(K,$,ee,de){var _e=K[$].match(H)||[];f.a.D(ee.match(H),function(ue){f.a.Na(_e,ue,de)}),K[$]=_e.join(" ")}var X=Object.prototype.hasOwnProperty,Y={__proto__:[]}instanceof Array,D=typeof Symbol=="function",k={},O={};k[i&&/Firefox\/2/i.test(i.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"],k.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" "),g(k,function(K,$){if($.length)for(var ee=0,de=$.length;ee<de;ee++)O[$[ee]]=K});var w={propertychange:!0},z=n&&(function(){for(var K=3,$=n.createElement("div"),ee=$.getElementsByTagName("i");$.innerHTML="<!--[if gt IE "+ ++K+"]><i></i><![endif]-->",ee[0];);return 4<K?K:e})(),H=/\S+/g,te;return{Jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],D:function(K,$,ee){for(var de=0,_e=K.length;de<_e;de++)$.call(ee,K[de],de,K)},A:typeof Array.prototype.indexOf=="function"?function(K,$){return Array.prototype.indexOf.call(K,$)}:function(K,$){for(var ee=0,de=K.length;ee<de;ee++)if(K[ee]===$)return ee;return-1},Lb:function(K,$,ee){for(var de=0,_e=K.length;de<_e;de++)if($.call(ee,K[de],de,K))return K[de];return e},Pa:function(K,$){var ee=f.a.A(K,$);0<ee?K.splice(ee,1):ee===0&&K.shift()},wc:function(K){var $=[];return K&&f.a.D(K,function(ee){0>f.a.A($,ee)&&$.push(ee)}),$},Mb:function(K,$,ee){var de=[];if(K)for(var _e=0,ue=K.length;_e<ue;_e++)de.push($.call(ee,K[_e],_e));return de},jb:function(K,$,ee){var de=[];if(K)for(var _e=0,ue=K.length;_e<ue;_e++)$.call(ee,K[_e],_e)&&de.push(K[_e]);return de},Nb:function(K,$){if($ instanceof Array)K.push.apply(K,$);else for(var ee=0,de=$.length;ee<de;ee++)K.push($[ee]);return K},Na:function(K,$,ee){var de=f.a.A(f.a.bc(K),$);0>de?ee&&K.push($):ee||K.splice(de,1)},Ba:Y,extend:R,setPrototypeOf:A,Ab:Y?A:R,P:g,Ga:function(K,$,ee){if(!K)return K;var de={},_e;for(_e in K)X.call(K,_e)&&(de[_e]=$.call(ee,K[_e],_e,K));return de},Tb:function(K){for(;K.firstChild;)f.removeNode(K.firstChild)},Yb:function(K){K=f.a.la(K);for(var $=(K[0]&&K[0].ownerDocument||n).createElement("div"),ee=0,de=K.length;ee<de;ee++)$.appendChild(f.oa(K[ee]));return $},Ca:function(K,$){for(var ee=0,de=K.length,_e=[];ee<de;ee++){var ue=K[ee].cloneNode(!0);_e.push($?f.oa(ue):ue)}return _e},va:function(K,$){if(f.a.Tb(K),$)for(var ee=0,de=$.length;ee<de;ee++)K.appendChild($[ee])},Xc:function(K,$){var ee=K.nodeType?[K]:K;if(0<ee.length){for(var de=ee[0],_e=de.parentNode,ue=0,Ce=$.length;ue<Ce;ue++)_e.insertBefore($[ue],de);for(ue=0,Ce=ee.length;ue<Ce;ue++)f.removeNode(ee[ue])}},Ua:function(K,$){if(K.length){for($=$.nodeType===8&&$.parentNode||$;K.length&&K[0].parentNode!==$;)K.splice(0,1);for(;1<K.length&&K[K.length-1].parentNode!==$;)K.length--;if(1<K.length){var ee=K[0],de=K[K.length-1];for(K.length=0;ee!==de;)K.push(ee),ee=ee.nextSibling;K.push(de)}}return K},Zc:function(K,$){7>z?K.setAttribute("selected",$):K.selected=$},Db:function(K){return K===null||K===e?"":K.trim?K.trim():K.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(K,$){return K=K||"",$.length>K.length?!1:K.substring(0,$.length)===$},vd:function(K,$){if(K===$)return!0;if(K.nodeType===11)return!1;if($.contains)return $.contains(K.nodeType!==1?K.parentNode:K);if($.compareDocumentPosition)return($.compareDocumentPosition(K)&16)==16;for(;K&&K!=$;)K=K.parentNode;return!!K},Sb:function(K){return f.a.vd(K,K.ownerDocument.documentElement)},kd:function(K){return!!f.a.Lb(K,f.a.Sb)},R:function(K){return K&&K.tagName&&K.tagName.toLowerCase()},Ac:function(K){return f.onError?function(){try{return K.apply(this,arguments)}catch($){throw f.onError&&f.onError($),$}}:K},setTimeout:function(K,$){return setTimeout(f.a.Ac(K),$)},Gc:function(K){setTimeout(function(){throw f.onError&&f.onError(K),K},0)},B:function(K,$,ee){var de=f.a.Ac(ee);if(ee=w[$],f.options.useOnlyNativeEvents||ee||!o)if(ee||typeof K.addEventListener!="function")if(typeof K.attachEvent<"u"){var _e=function(Ce){de.call(K,Ce)},ue="on"+$;K.attachEvent(ue,_e),f.a.K.za(K,function(){K.detachEvent(ue,_e)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else K.addEventListener($,de,!1);else te||(te=typeof o(K).on=="function"?"on":"bind"),o(K)[te]($,de)},Fb:function(K,$){if(!K||!K.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var ee;if(f.a.R(K)==="input"&&K.type&&$.toLowerCase()=="click"?(ee=K.type,ee=ee=="checkbox"||ee=="radio"):ee=!1,f.options.useOnlyNativeEvents||!o||ee)if(typeof n.createEvent=="function")if(typeof K.dispatchEvent=="function")ee=n.createEvent(O[$]||"HTMLEvents"),ee.initEvent($,!0,!0,t,0,0,0,0,0,!1,!1,!1,!1,0,K),K.dispatchEvent(ee);else throw Error("The supplied element doesn't support dispatchEvent");else if(ee&&K.click)K.click();else if(typeof K.fireEvent<"u")K.fireEvent("on"+$);else throw Error("Browser doesn't support triggering events");else o(K).trigger($)},f:function(K){return f.O(K)?K():K},bc:function(K){return f.O(K)?K.v():K},Eb:function(K,$,ee){var de;$&&(typeof K.classList=="object"?(de=K.classList[ee?"add":"remove"],f.a.D($.match(H),function(_e){de.call(K.classList,_e)})):typeof K.className.baseVal=="string"?W(K.className,"baseVal",$,ee):W(K,"className",$,ee))},Bb:function(K,$){var ee=f.a.f($);(ee===null||ee===e)&&(ee="");var de=f.h.firstChild(K);!de||de.nodeType!=3||f.h.nextSibling(de)?f.h.va(K,[K.ownerDocument.createTextNode(ee)]):de.data=ee,f.a.Ad(K)},Yc:function(K,$){if(K.name=$,7>=z)try{var ee=K.name.replace(/[&<>'"]/g,function(de){return"&#"+de.charCodeAt(0)+";"});K.mergeAttributes(n.createElement("<input name='"+ee+"'/>"),!1)}catch{}},Ad:function(K){9<=z&&(K=K.nodeType==1?K:K.parentNode,K.style&&(K.style.zoom=K.style.zoom))},wd:function(K){if(z){var $=K.style.width;K.style.width=0,K.style.width=$}},Pd:function(K,$){K=f.a.f(K),$=f.a.f($);for(var ee=[],de=K;de<=$;de++)ee.push(de);return ee},la:function(K){for(var $=[],ee=0,de=K.length;ee<de;ee++)$.push(K[ee]);return $},Da:function(K){return D?Symbol(K):K},Zd:z===6,$d:z===7,W:z,Lc:function(K,$){for(var ee=f.a.la(K.getElementsByTagName("input")).concat(f.a.la(K.getElementsByTagName("textarea"))),de=typeof $=="string"?function(Ce){return Ce.name===$}:function(Ce){return $.test(Ce.name)},_e=[],ue=ee.length-1;0<=ue;ue--)de(ee[ue])&&_e.push(ee[ue]);return _e},Nd:function(K){return typeof K=="string"&&(K=f.a.Db(K))?r&&r.parse?r.parse(K):new Function("return "+K)():null},hc:function(K,$,ee){if(!r||!r.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");return r.stringify(f.a.f(K),$,ee)},Od:function(K,$,ee){ee=ee||{};var de=ee.params||{},_e=ee.includeFields||this.Jc,ue=K;if(typeof K=="object"&&f.a.R(K)==="form")for(var ue=K.action,Ce=_e.length-1;0<=Ce;Ce--)for(var Te=f.a.Lc(K,_e[Ce]),Re=Te.length-1;0<=Re;Re--)de[Te[Re].name]=Te[Re].value;$=f.a.f($);var Le=n.createElement("form");Le.style.display="none",Le.action=ue,Le.method="post";for(var Xe in $)K=n.createElement("input"),K.type="hidden",K.name=Xe,K.value=f.a.hc(f.a.f($[Xe])),Le.appendChild(K);g(de,function(qe,je){var _t=n.createElement("input");_t.type="hidden",_t.name=qe,_t.value=je,Le.appendChild(_t)}),n.body.appendChild(Le),ee.submitter?ee.submitter(Le):Le.submit(),setTimeout(function(){Le.parentNode.removeChild(Le)},0)}}})(),f.b("utils",f.a),f.b("utils.arrayForEach",f.a.D),f.b("utils.arrayFirst",f.a.Lb),f.b("utils.arrayFilter",f.a.jb),f.b("utils.arrayGetDistinctValues",f.a.wc),f.b("utils.arrayIndexOf",f.a.A),f.b("utils.arrayMap",f.a.Mb),f.b("utils.arrayPushAll",f.a.Nb),f.b("utils.arrayRemoveItem",f.a.Pa),f.b("utils.cloneNodes",f.a.Ca),f.b("utils.createSymbolOrString",f.a.Da),f.b("utils.extend",f.a.extend),f.b("utils.fieldsIncludedWithJsonPost",f.a.Jc),f.b("utils.getFormFields",f.a.Lc),f.b("utils.objectMap",f.a.Ga),f.b("utils.peekObservable",f.a.bc),f.b("utils.postJson",f.a.Od),f.b("utils.parseJson",f.a.Nd),f.b("utils.registerEventHandler",f.a.B),f.b("utils.stringifyJson",f.a.hc),f.b("utils.range",f.a.Pd),f.b("utils.toggleDomNodeCssClass",f.a.Eb),f.b("utils.triggerEvent",f.a.Fb),f.b("utils.unwrapObservable",f.a.f),f.b("utils.objectForEach",f.a.P),f.b("utils.addOrRemoveItem",f.a.Na),f.b("utils.setTextContent",f.a.Bb),f.b("unwrap",f.a.f),Function.prototype.bind||(Function.prototype.bind=function(g){var R=this;if(arguments.length===1)return function(){return R.apply(g,arguments)};var A=Array.prototype.slice.call(arguments,1);return function(){var W=A.slice(0);return W.push.apply(W,arguments),R.apply(g,W)}}),f.a.g=new function(){var g=0,R="__ko__"+new Date().getTime(),A={},W,X;return f.a.W?(W=function(Y,D){var k=Y[R];if(!k||k==="null"||!A[k]){if(!D)return e;k=Y[R]="ko"+g++,A[k]={}}return A[k]},X=function(Y){var D=Y[R];return D?(delete A[D],Y[R]=null,!0):!1}):(W=function(Y,D){var k=Y[R];return!k&&D&&(k=Y[R]={}),k},X=function(Y){return Y[R]?(delete Y[R],!0):!1}),{get:function(Y,D){var k=W(Y,!1);return k&&k[D]},set:function(Y,D,k){(Y=W(Y,k!==e))&&(Y[D]=k)},Ub:function(Y,D,k){return Y=W(Y,!0),Y[D]||(Y[D]=k)},clear:X,Z:function(){return g+++R}}},f.b("utils.domData",f.a.g),f.b("utils.domData.clear",f.a.g.clear),f.a.K=new function(){function g(D,k){var O=f.a.g.get(D,W);return O===e&&k&&(O=[],f.a.g.set(D,W,O)),O}function R(D){var k=g(D,!1);if(k)for(var k=k.slice(0),O=0;O<k.length;O++)k[O](D);f.a.g.clear(D),f.a.K.cleanExternalData(D),Y[D.nodeType]&&A(D.childNodes,!0)}function A(D,k){for(var O=[],w,z=0;z<D.length;z++)if((!k||D[z].nodeType===8)&&(R(O[O.length]=w=D[z]),D[z]!==w))for(;z--&&f.a.A(O,D[z])==-1;);}var W=f.a.g.Z(),X={1:!0,8:!0,9:!0},Y={1:!0,9:!0};return{za:function(D,k){if(typeof k!="function")throw Error("Callback must be a function");g(D,!0).push(k)},yb:function(D,k){var O=g(D,!1);O&&(f.a.Pa(O,k),O.length==0&&f.a.g.set(D,W,e))},oa:function(D){return f.u.G(function(){X[D.nodeType]&&(R(D),Y[D.nodeType]&&A(D.getElementsByTagName("*")))}),D},removeNode:function(D){f.oa(D),D.parentNode&&D.parentNode.removeChild(D)},cleanExternalData:function(D){o&&typeof o.cleanData=="function"&&o.cleanData([D])}}},f.oa=f.a.K.oa,f.removeNode=f.a.K.removeNode,f.b("cleanNode",f.oa),f.b("removeNode",f.removeNode),f.b("utils.domNodeDisposal",f.a.K),f.b("utils.domNodeDisposal.addDisposeCallback",f.a.K.za),f.b("utils.domNodeDisposal.removeDisposeCallback",f.a.K.yb),(function(){var g=[0,"",""],R=[1,"<table>","</table>"],A=[3,"<table><tbody><tr>","</tr></tbody></table>"],W=[1,"<select multiple='multiple'>","</select>"],X={thead:R,tbody:R,tfoot:R,tr:[2,"<table><tbody>","</tbody></table>"],td:A,th:A,option:W,optgroup:W},Y=8>=f.a.W;f.a.ua=function(D,k){var O;if(o){if(o.parseHTML)O=o.parseHTML(D,k)||[];else if((O=o.clean([D],k))&&O[0]){for(var w=O[0];w.parentNode&&w.parentNode.nodeType!==11;)w=w.parentNode;w.parentNode&&w.parentNode.removeChild(w)}}else{(O=k)||(O=n);var w=O.parentWindow||O.defaultView||t,z=f.a.Db(D).toLowerCase(),H=O.createElement("div"),te;for(te=(z=z.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&X[z[1]]||g,z=te[0],te="ignored<div>"+te[1]+D+te[2]+"</div>",typeof w.innerShiv=="function"?H.appendChild(w.innerShiv(te)):(Y&&O.body.appendChild(H),H.innerHTML=te,Y&&H.parentNode.removeChild(H));z--;)H=H.lastChild;O=f.a.la(H.lastChild.childNodes)}return O},f.a.Md=function(D,k){var O=f.a.ua(D,k);return O.length&&O[0].parentElement||f.a.Yb(O)},f.a.fc=function(D,k){if(f.a.Tb(D),k=f.a.f(k),k!==null&&k!==e)if(typeof k!="string"&&(k=k.toString()),o)o(D).html(k);else for(var O=f.a.ua(k,D.ownerDocument),w=0;w<O.length;w++)D.appendChild(O[w])}})(),f.b("utils.parseHtmlFragment",f.a.ua),f.b("utils.setHtml",f.a.fc),f.aa=(function(){function g(A,W){if(A){if(A.nodeType==8){var X=f.aa.Uc(A.nodeValue);X!=null&&W.push({ud:A,Kd:X})}else if(A.nodeType==1)for(var X=0,Y=A.childNodes,D=Y.length;X<D;X++)g(Y[X],W)}}var R={};return{Xb:function(A){if(typeof A!="function")throw Error("You can only pass a function to ko.memoization.memoize()");var W=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);return R[W]=A,"<!--[ko_memo:"+W+"]-->"},bd:function(A,W){var X=R[A];if(X===e)throw Error("Couldn't find any memo with ID "+A+". Perhaps it's already been unmemoized.");try{return X.apply(null,W||[]),!0}finally{delete R[A]}},cd:function(A,W){var X=[];g(A,X);for(var Y=0,D=X.length;Y<D;Y++){var k=X[Y].ud,O=[k];W&&f.a.Nb(O,W),f.aa.bd(X[Y].Kd,O),k.nodeValue="",k.parentNode&&k.parentNode.removeChild(k)}},Uc:function(A){return(A=A.match(/^\[ko_memo\:(.*?)\]$/))?A[1]:null}}})(),f.b("memoization",f.aa),f.b("memoization.memoize",f.aa.Xb),f.b("memoization.unmemoize",f.aa.bd),f.b("memoization.parseMemoText",f.aa.Uc),f.b("memoization.unmemoizeDomNodeAndDescendants",f.aa.cd),f.na=(function(){function g(){if(X){for(var k=X,O=0,w;D<X;)if(w=W[D++]){if(D>k){if(5e3<=++O){D=X,f.a.Gc(Error("'Too much recursion' after processing "+O+" task groups."));break}k=X}try{w()}catch(z){f.a.Gc(z)}}}}function R(){g(),D=X=W.length=0}var A,W=[],X=0,Y=1,D=0;return t.MutationObserver?A=(function(k){var O=n.createElement("div");return new MutationObserver(k).observe(O,{attributes:!0}),function(){O.classList.toggle("foo")}})(R):A=n&&"onreadystatechange"in n.createElement("script")?function(k){var O=n.createElement("script");O.onreadystatechange=function(){O.onreadystatechange=null,n.documentElement.removeChild(O),O=null,k()},n.documentElement.appendChild(O)}:function(k){setTimeout(k,0)},{scheduler:A,zb:function(k){return X||f.na.scheduler(R),W[X++]=k,Y++},cancel:function(k){k=k-(Y-X),k>=D&&k<X&&(W[k]=null)},resetForTesting:function(){var k=X-D;return D=X=W.length=0,k},Sd:g}})(),f.b("tasks",f.na),f.b("tasks.schedule",f.na.zb),f.b("tasks.runEarly",f.na.Sd),f.Ta={throttle:function(g,R){g.throttleEvaluation=R;var A=null;return f.$({read:g,write:function(W){clearTimeout(A),A=f.a.setTimeout(function(){g(W)},R)}})},rateLimit:function(g,R){var A,W,X;typeof R=="number"?A=R:(A=R.timeout,W=R.method),g.Hb=!1,X=typeof W=="function"?W:W=="notifyWhenChangesStop"?u:d,g.ub(function(Y){return X(Y,A,R)})},deferred:function(g,R){if(R!==!0)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");g.Hb||(g.Hb=!0,g.ub(function(A){var W,X=!1;return function(){if(!X){f.na.cancel(W),W=f.na.zb(A);try{X=!0,g.notifySubscribers(e,"dirty")}finally{X=!1}}}}))},notify:function(g,R){g.equalityComparer=R=="always"?null:c}};var y={undefined:1,boolean:1,number:1,string:1};f.b("extenders",f.Ta),f.ic=function(g,R,A){this.da=g,this.lc=R,this.mc=A,this.Ib=!1,this.fb=this.Jb=null,f.L(this,"dispose",this.s),f.L(this,"disposeWhenNodeIsRemoved",this.l)},f.ic.prototype.s=function(){this.Ib||(this.fb&&f.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)},f.ic.prototype.l=function(g){this.Jb=g,f.a.K.za(g,this.fb=this.s.bind(this))},f.T=function(){f.a.Ab(this,_),_.qb(this)};var _={qb:function(g){g.U={change:[]},g.sc=1},subscribe:function(g,R,A){var W=this;A=A||"change";var X=new f.ic(W,R?g.bind(R):g,function(){f.a.Pa(W.U[A],X),W.hb&&W.hb(A)});return W.Qa&&W.Qa(A),W.U[A]||(W.U[A]=[]),W.U[A].push(X),X},notifySubscribers:function(g,R){if(R=R||"change",R==="change"&&this.Gb(),this.Wa(R)){var A=R==="change"&&this.ed||this.U[R].slice(0);try{f.u.xc();for(var W=0,X;X=A[W];++W)X.Ib||X.lc(g)}finally{f.u.end()}}},ob:function(){return this.sc},Dd:function(g){return this.ob()!==g},Gb:function(){++this.sc},ub:function(g){var R=this,A=f.O(R),W,X,Y,D,k;R.gb||(R.gb=R.notifySubscribers,R.notifySubscribers=m);var O=g(function(){R.Ja=!1,A&&D===R&&(D=R.nc?R.nc():R());var w=X||k&&R.sb(Y,D);k=X=W=!1,w&&R.gb(Y=D)});R.qc=function(w,z){z&&R.Ja||(k=!z),R.ed=R.U.change.slice(0),R.Ja=W=!0,D=w,O()},R.pc=function(w){W||(Y=w,R.gb(w,"beforeChange"))},R.rc=function(){k=!0},R.gd=function(){R.sb(Y,R.v(!0))&&(X=!0)}},Wa:function(g){return this.U[g]&&this.U[g].length},Bd:function(g){if(g)return this.U[g]&&this.U[g].length||0;var R=0;return f.a.P(this.U,function(A,W){A!=="dirty"&&(R+=W.length)}),R},sb:function(g,R){return!this.equalityComparer||!this.equalityComparer(g,R)},toString:function(){return"[object Object]"},extend:function(g){var R=this;return g&&f.a.P(g,function(A,W){var X=f.Ta[A];typeof X=="function"&&(R=X(R,W)||R)}),R}};f.L(_,"init",_.qb),f.L(_,"subscribe",_.subscribe),f.L(_,"extend",_.extend),f.L(_,"getSubscriptionsCount",_.Bd),f.a.Ba&&f.a.setPrototypeOf(_,Function.prototype),f.T.fn=_,f.Qc=function(g){return g!=null&&typeof g.subscribe=="function"&&typeof g.notifySubscribers=="function"},f.b("subscribable",f.T),f.b("isSubscribable",f.Qc),f.S=f.u=(function(){function g(Y){A.push(W),W=Y}function R(){W=A.pop()}var A=[],W,X=0;return{xc:g,end:R,cc:function(Y){if(W){if(!f.Qc(Y))throw Error("Only subscribable things can act as dependencies");W.od.call(W.pd,Y,Y.fd||(Y.fd=++X))}},G:function(Y,D,k){try{return g(),Y.apply(D,k||[])}finally{R()}},qa:function(){if(W)return W.o.qa()},Va:function(){if(W)return W.o.Va()},Ya:function(){if(W)return W.Ya},o:function(){if(W)return W.o}}})(),f.b("computedContext",f.S),f.b("computedContext.getDependenciesCount",f.S.qa),f.b("computedContext.getDependencies",f.S.Va),f.b("computedContext.isInitial",f.S.Ya),f.b("computedContext.registerDependency",f.S.cc),f.b("ignoreDependencies",f.Yd=f.u.G);var S=f.a.Da("_latestValue");f.ta=function(g){function R(){return 0<arguments.length?(R.sb(R[S],arguments[0])&&(R.ya(),R[S]=arguments[0],R.xa()),this):(f.u.cc(R),R[S])}return R[S]=g,f.a.Ba||f.a.extend(R,f.T.fn),f.T.fn.qb(R),f.a.Ab(R,Z),f.options.deferUpdates&&f.Ta.deferred(R,!0),R};var Z={equalityComparer:c,v:function(){return this[S]},xa:function(){this.notifySubscribers(this[S],"spectate"),this.notifySubscribers(this[S])},ya:function(){this.notifySubscribers(this[S],"beforeChange")}};f.a.Ba&&f.a.setPrototypeOf(Z,f.T.fn);var V=f.ta.Ma="__ko_proto__";Z[V]=f.ta,f.O=function(g){if((g=typeof g=="function"&&g[V])&&g!==Z[V]&&g!==f.o.fn[V])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!g},f.Za=function(g){return typeof g=="function"&&(g[V]===Z[V]||g[V]===f.o.fn[V]&&g.Nc)},f.b("observable",f.ta),f.b("isObservable",f.O),f.b("isWriteableObservable",f.Za),f.b("isWritableObservable",f.Za),f.b("observable.fn",Z),f.L(Z,"peek",Z.v),f.L(Z,"valueHasMutated",Z.xa),f.L(Z,"valueWillMutate",Z.ya),f.Ha=function(g){if(g=g||[],typeof g!="object"||!("length"in g))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");return g=f.ta(g),f.a.Ab(g,f.Ha.fn),g.extend({trackArrayChanges:!0})},f.Ha.fn={remove:function(g){for(var R=this.v(),A=[],W=typeof g!="function"||f.O(g)?function(D){return D===g}:g,X=0;X<R.length;X++){var Y=R[X];if(W(Y)){if(A.length===0&&this.ya(),R[X]!==Y)throw Error("Array modified during remove; cannot remove item");A.push(Y),R.splice(X,1),X--}}return A.length&&this.xa(),A},removeAll:function(g){if(g===e){var R=this.v(),A=R.slice(0);return this.ya(),R.splice(0,R.length),this.xa(),A}return g?this.remove(function(W){return 0<=f.a.A(g,W)}):[]},destroy:function(g){var R=this.v(),A=typeof g!="function"||f.O(g)?function(Y){return Y===g}:g;this.ya();for(var W=R.length-1;0<=W;W--){var X=R[W];A(X)&&(X._destroy=!0)}this.xa()},destroyAll:function(g){return g===e?this.destroy(function(){return!0}):g?this.destroy(function(R){return 0<=f.a.A(g,R)}):[]},indexOf:function(g){var R=this();return f.a.A(R,g)},replace:function(g,R){var A=this.indexOf(g);0<=A&&(this.ya(),this.v()[A]=R,this.xa())},sorted:function(g){var R=this().slice(0);return g?R.sort(g):R.sort()},reversed:function(){return this().slice(0).reverse()}},f.a.Ba&&f.a.setPrototypeOf(f.Ha.fn,f.ta.fn),f.a.D("pop push reverse shift sort splice unshift".split(" "),function(g){f.Ha.fn[g]=function(){var R=this.v();this.ya(),this.zc(R,g,arguments);var A=R[g].apply(R,arguments);return this.xa(),A===R?this:A}}),f.a.D(["slice"],function(g){f.Ha.fn[g]=function(){var R=this();return R[g].apply(R,arguments)}}),f.Pc=function(g){return f.O(g)&&typeof g.remove=="function"&&typeof g.push=="function"},f.b("observableArray",f.Ha),f.b("isObservableArray",f.Pc),f.Ta.trackArrayChanges=function(g,R){function A(){function H(){if(k){var te=[].concat(g.v()||[]),K;g.Wa("arrayChange")&&((!X||1<k)&&(X=f.a.Pb(O,te,g.Ob)),K=X),O=te,X=null,k=0,K&&K.length&&g.notifySubscribers(K,"arrayChange")}}W?H():(W=!0,D=g.subscribe(function(){++k},null,"spectate"),O=[].concat(g.v()||[]),X=null,Y=g.subscribe(H))}if(g.Ob={},R&&typeof R=="object"&&f.a.extend(g.Ob,R),g.Ob.sparse=!0,!g.zc){var W=!1,X=null,Y,D,k=0,O,w=g.Qa,z=g.hb;g.Qa=function(H){w&&w.call(g,H),H==="arrayChange"&&A()},g.hb=function(H){z&&z.call(g,H),H!=="arrayChange"||g.Wa("arrayChange")||(Y&&Y.s(),D&&D.s(),D=Y=null,W=!1,O=e)},g.zc=function(H,te,K){function $(Le,Xe,qe){return ee[ee.length]={status:Le,value:Xe,index:qe}}if(W&&!k){var ee=[],de=H.length,_e=K.length,ue=0;switch(te){case"push":ue=de;case"unshift":for(te=0;te<_e;te++)$("added",K[te],ue+te);break;case"pop":ue=de-1;case"shift":de&&$("deleted",H[ue],ue);break;case"splice":te=Math.min(Math.max(0,0>K[0]?de+K[0]:K[0]),de);for(var de=_e===1?de:Math.min(te+(K[1]||0),de),_e=te+_e-2,ue=Math.max(de,_e),Ce=[],Te=[],Re=2;te<ue;++te,++Re)te<de&&Te.push($("deleted",H[te],te)),te<_e&&Ce.push($("added",K[Re],te));f.a.Kc(Te,Ce);break;default:return}X=ee}}}};var C=f.a.Da("_state");f.o=f.$=function(g,R,A){function W(){if(0<arguments.length){if(typeof X=="function")X.apply(Y.nb,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return this}return Y.ra||f.u.cc(W),(Y.ka||Y.J&&W.Xa())&&W.ha(),Y.X}if(typeof g=="object"?A=g:(A=A||{},g&&(A.read=g)),typeof A.read!="function")throw Error("Pass a function that returns the value of the ko.computed");var X=A.write,Y={X:e,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:A.read,nb:R||A.owner,l:A.disposeWhenNodeIsRemoved||A.l||null,Sa:A.disposeWhen||A.Sa,Rb:null,I:{},V:0,Ic:null};return W[C]=Y,W.Nc=typeof X=="function",f.a.Ba||f.a.extend(W,f.T.fn),f.T.fn.qb(W),f.a.Ab(W,G),A.pure?(Y.wb=!0,Y.J=!0,f.a.extend(W,E)):A.deferEvaluation&&f.a.extend(W,v),f.options.deferUpdates&&f.Ta.deferred(W,!0),Y.l&&(Y.jc=!0,Y.l.nodeType||(Y.l=null)),Y.J||A.deferEvaluation||W.ha(),Y.l&&W.ja()&&f.a.K.za(Y.l,Y.Rb=function(){W.s()}),W};var G={equalityComparer:c,qa:function(){return this[C].V},Va:function(){var g=[];return f.a.P(this[C].I,function(R,A){g[A.Ka]=A.da}),g},Vb:function(g){if(!this[C].V)return!1;var R=this.Va();return f.a.A(R,g)!==-1?!0:!!f.a.Lb(R,function(A){return A.Vb&&A.Vb(g)})},uc:function(g,R,A){if(this[C].wb&&R===this)throw Error("A 'pure' computed must not be called recursively");this[C].I[g]=A,A.Ka=this[C].V++,A.La=R.ob()},Xa:function(){var g,R,A=this[C].I;for(g in A)if(Object.prototype.hasOwnProperty.call(A,g)&&(R=A[g],this.Ia&&R.da.Ja||R.da.Dd(R.La)))return!0},Jd:function(){this.Ia&&!this[C].rb&&this.Ia(!1)},ja:function(){var g=this[C];return g.ka||0<g.V},Rd:function(){this.Ja?this[C].ka&&(this[C].sa=!0):this.Hc()},$c:function(g){if(g.Hb){var R=g.subscribe(this.Jd,this,"dirty"),A=g.subscribe(this.Rd,this);return{da:g,s:function(){R.s(),A.s()}}}return g.subscribe(this.Hc,this)},Hc:function(){var g=this,R=g.throttleEvaluation;R&&0<=R?(clearTimeout(this[C].Ic),this[C].Ic=f.a.setTimeout(function(){g.ha(!0)},R)):g.Ia?g.Ia(!0):g.ha(!0)},ha:function(g){var R=this[C],A=R.Sa,W=!1;if(!R.rb&&!R.ra){if(R.l&&!f.a.Sb(R.l)||A&&A()){if(!R.jc){this.s();return}}else R.jc=!1;R.rb=!0;try{W=this.zd(g)}finally{R.rb=!1}return W}},zd:function(g){var R=this[C],W=!1,A=R.wb?e:!R.V,W={qd:this,mb:R.I,Qb:R.V};f.u.xc({pd:W,od:b,o:this,Ya:A}),R.I={},R.V=0;var X=this.yd(R,W);return R.V?W=this.sb(R.X,X):(this.s(),W=!0),W&&(R.J?this.Gb():this.notifySubscribers(R.X,"beforeChange"),R.X=X,this.notifySubscribers(R.X,"spectate"),!R.J&&g&&this.notifySubscribers(R.X),this.rc&&this.rc()),A&&this.notifySubscribers(R.X,"awake"),W},yd:function(g,R){try{var A=g.Wc;return g.nb?A.call(g.nb):A()}finally{f.u.end(),R.Qb&&!g.J&&f.a.P(R.mb,p),g.sa=g.ka=!1}},v:function(g){var R=this[C];return(R.ka&&(g||!R.V)||R.J&&this.Xa())&&this.ha(),R.X},ub:function(g){f.T.fn.ub.call(this,g),this.nc=function(){return this[C].J||(this[C].sa?this.ha():this[C].ka=!1),this[C].X},this.Ia=function(R){this.pc(this[C].X),this[C].ka=!0,R&&(this[C].sa=!0),this.qc(this,!R)}},s:function(){var g=this[C];!g.J&&g.I&&f.a.P(g.I,function(R,A){A.s&&A.s()}),g.l&&g.Rb&&f.a.K.yb(g.l,g.Rb),g.I=e,g.V=0,g.ra=!0,g.sa=!1,g.ka=!1,g.J=!1,g.l=e,g.Sa=e,g.Wc=e,this.Nc||(g.nb=e)}},E={Qa:function(g){var R=this,A=R[C];if(!A.ra&&A.J&&g=="change"){if(A.J=!1,A.sa||R.Xa())A.I=null,A.V=0,R.ha()&&R.Gb();else{var W=[];f.a.P(A.I,function(X,Y){W[Y.Ka]=X}),f.a.D(W,function(X,Y){var D=A.I[X],k=R.$c(D.da);k.Ka=Y,k.La=D.La,A.I[X]=k}),R.Xa()&&R.ha()&&R.Gb()}A.ra||R.notifySubscribers(A.X,"awake")}},hb:function(g){var R=this[C];R.ra||g!="change"||this.Wa("change")||(f.a.P(R.I,function(A,W){W.s&&(R.I[A]={da:W.da,Ka:W.Ka,La:W.La},W.s())}),R.J=!0,this.notifySubscribers(e,"asleep"))},ob:function(){var g=this[C];return g.J&&(g.sa||this.Xa())&&this.ha(),f.T.fn.ob.call(this)}},v={Qa:function(g){g!="change"&&g!="beforeChange"||this.v()}};f.a.Ba&&f.a.setPrototypeOf(G,f.T.fn);var F=f.ta.Ma;G[F]=f.o,f.Oc=function(g){return typeof g=="function"&&g[F]===G[F]},f.Fd=function(g){return f.Oc(g)&&g[C]&&g[C].wb},f.b("computed",f.o),f.b("dependentObservable",f.o),f.b("isComputed",f.Oc),f.b("isPureComputed",f.Fd),f.b("computed.fn",G),f.L(G,"peek",G.v),f.L(G,"dispose",G.s),f.L(G,"isActive",G.ja),f.L(G,"getDependenciesCount",G.qa),f.L(G,"getDependencies",G.Va),f.xb=function(g,R){return typeof g=="function"?f.o(g,R,{pure:!0}):(g=f.a.extend({},g),g.pure=!0,f.o(g,R))},f.b("pureComputed",f.xb),(function(){function g(W,X,Y){if(Y=Y||new A,W=X(W),typeof W!="object"||W===null||W===e||W instanceof RegExp||W instanceof Date||W instanceof String||W instanceof Number||W instanceof Boolean)return W;var D=W instanceof Array?[]:{};return Y.save(W,D),R(W,function(k){var O=X(W[k]);switch(typeof O){case"boolean":case"number":case"string":case"function":D[k]=O;break;case"object":case"undefined":var w=Y.get(O);D[k]=w!==e?w:g(O,X,Y)}}),D}function R(W,X){if(W instanceof Array){for(var Y=0;Y<W.length;Y++)X(Y);typeof W.toJSON=="function"&&X("toJSON")}else for(Y in W)X(Y)}function A(){this.keys=[],this.values=[]}f.ad=function(W){if(arguments.length==0)throw Error("When calling ko.toJS, pass the object you want to convert.");return g(W,function(X){for(var Y=0;f.O(X)&&10>Y;Y++)X=X();return X})},f.toJSON=function(W,X,Y){return W=f.ad(W),f.a.hc(W,X,Y)},A.prototype={constructor:A,save:function(W,X){var Y=f.a.A(this.keys,W);0<=Y?this.values[Y]=X:(this.keys.push(W),this.values.push(X))},get:function(W){return W=f.a.A(this.keys,W),0<=W?this.values[W]:e}}})(),f.b("toJS",f.ad),f.b("toJSON",f.toJSON),f.Wd=function(g,R,A){function W(X){var Y=f.xb(g,A).extend({ma:"always"}),D=Y.subscribe(function(k){k&&(D.s(),X(k))});return Y.notifySubscribers(Y.v()),D}return typeof Promise!="function"||R?W(R.bind(A)):new Promise(W)},f.b("when",f.Wd),(function(){f.w={M:function(g){switch(f.a.R(g)){case"option":return g.__ko__hasDomDataOptionValue__===!0?f.a.g.get(g,f.c.options.$b):7>=f.a.W?g.getAttributeNode("value")&&g.getAttributeNode("value").specified?g.value:g.text:g.value;case"select":return 0<=g.selectedIndex?f.w.M(g.options[g.selectedIndex]):e;default:return g.value}},cb:function(g,R,A){switch(f.a.R(g)){case"option":typeof R=="string"?(f.a.g.set(g,f.c.options.$b,e),"__ko__hasDomDataOptionValue__"in g&&delete g.__ko__hasDomDataOptionValue__,g.value=R):(f.a.g.set(g,f.c.options.$b,R),g.__ko__hasDomDataOptionValue__=!0,g.value=typeof R=="number"?R:"");break;case"select":(R===""||R===null)&&(R=e);for(var W=-1,X=0,Y=g.options.length,D;X<Y;++X)if(D=f.w.M(g.options[X]),D==R||D===""&&R===e){W=X;break}(A||0<=W||R===e&&1<g.size)&&(g.selectedIndex=W,f.a.W===6&&f.a.setTimeout(function(){g.selectedIndex=W},0));break;default:(R===null||R===e)&&(R=""),g.value=R}}}})(),f.b("selectExtensions",f.w),f.b("selectExtensions.readValue",f.w.M),f.b("selectExtensions.writeValue",f.w.cb),f.m=(function(){function g(k){k=f.a.Db(k),k.charCodeAt(0)===123&&(k=k.slice(1,-1)),k+=` ,`;var O=[],w=k.match(W),z,H=[],te=0;if(1<w.length){for(var K=0,$;$=w[K];++K){var ee=$.charCodeAt(0);if(ee===44){if(0>=te){O.push(z&&H.length?{key:z,value:H.join("")}:{unknown:z||H.join("")}),z=te=0,H=[];continue}}else if(ee===58){if(!te&&!z&&H.length===1){z=H.pop();continue}}else{if(ee===47&&1<$.length&&($.charCodeAt(1)===47||$.charCodeAt(1)===42))continue;ee===47&&K&&1<$.length?(ee=w[K-1].match(X))&&!Y[ee[0]]&&(k=k.substr(k.indexOf($)+1),w=k.match(W),K=-1,$="/"):ee===40||ee===123||ee===91?++te:ee===41||ee===125||ee===93?--te:z||H.length||ee!==34&&ee!==39||($=$.slice(1,-1))}H.push($)}if(0<te)throw Error("Unbalanced parentheses, braces, or brackets")}return O}var R=["true","false","null","undefined"],A=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,W=RegExp(`"(?:\\\\.|[^"])*"|'(?:\\\\.|[^'])*'|\`(?:\\\\.|[^\`])*\`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.* |/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,"'\`{}()/:[\\]]*[^\\s,"'\`{}()/:[\\]]|[^\\s]`,"g"),X=/[\])"'A-Za-z0-9_$]+$/,Y={in:1,return:1,typeof:1},D={};return{Ra:[],wa:D,ac:g,vb:function(k,O){function w(ee,de){var _e;if(!K){var ue=f.getBindingHandler(ee);if(ue&&ue.preprocess&&!(de=ue.preprocess(de,ee,w)))return;(ue=D[ee])&&(_e=de,0<=f.a.A(R,_e)?_e=!1:(ue=_e.match(A),_e=ue===null?!1:ue[1]?"Object("+ue[1]+")"+ue[2]:_e),ue=_e),ue&&H.push("'"+(typeof D[ee]=="string"?D[ee]:ee)+"':function(_z){"+_e+"=_z}")}te&&(de="function(){return "+de+" }"),z.push("'"+ee+"':"+de)}O=O||{};var z=[],H=[],te=O.valueAccessors,K=O.bindingParams,$=typeof k=="string"?g(k):k;return f.a.D($,function(ee){w(ee.key||ee.unknown,ee.value)}),H.length&&w("_ko_property_writers","{"+H.join(",")+" }"),z.join(",")},Id:function(k,O){for(var w=0;w<k.length;w++)if(k[w].key==O)return!0;return!1},eb:function(k,O,w,z,H){k&&f.O(k)?!f.Za(k)||H&&k.v()===z||k(z):(k=O.get("_ko_property_writers"))&&k[w]&&k[w](z)}}})(),f.b("expressionRewriting",f.m),f.b("expressionRewriting.bindingRewriteValidators",f.m.Ra),f.b("expressionRewriting.parseObjectLiteral",f.m.ac),f.b("expressionRewriting.preProcessBindings",f.m.vb),f.b("expressionRewriting._twoWayBindings",f.m.wa),f.b("jsonExpressionRewriting",f.m),f.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",f.m.vb),(function(){function g(w){return w.nodeType==8&&Y.test(X?w.text:w.nodeValue)}function R(w){return w.nodeType==8&&D.test(X?w.text:w.nodeValue)}function A(w,z){for(var H=w,te=1,K=[];H=H.nextSibling;){if(R(H)&&(f.a.g.set(H,O,!0),te--,te===0))return K;K.push(H),g(H)&&te++}if(!z)throw Error("Cannot find closing comment tag to match: "+w.nodeValue);return null}function W(w,z){var H=A(w,z);return H?0<H.length?H[H.length-1].nextSibling:w.nextSibling:null}var X=n&&n.createComment("test").text==="<!--test-->",Y=X?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,D=X?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,k={ul:!0,ol:!0},O="__ko_matchedEndComment__";f.h={ea:{},childNodes:function(w){return g(w)?A(w):w.childNodes},Ea:function(w){if(g(w)){w=f.h.childNodes(w);for(var z=0,H=w.length;z<H;z++)f.removeNode(w[z])}else f.a.Tb(w)},va:function(w,z){if(g(w)){f.h.Ea(w);for(var H=w.nextSibling,te=0,K=z.length;te<K;te++)H.parentNode.insertBefore(z[te],H)}else f.a.va(w,z)},Vc:function(w,z){var H;g(w)?(H=w.nextSibling,w=w.parentNode):H=w.firstChild,H?z!==H&&w.insertBefore(z,H):w.appendChild(z)},Wb:function(w,z,H){H?(H=H.nextSibling,g(w)&&(w=w.parentNode),H?z!==H&&w.insertBefore(z,H):w.appendChild(z)):f.h.Vc(w,z)},firstChild:function(w){if(g(w))return!w.nextSibling||R(w.nextSibling)?null:w.nextSibling;if(w.firstChild&&R(w.firstChild))throw Error("Found invalid end comment, as the first child of "+w);return w.firstChild},nextSibling:function(w){if(g(w)&&(w=W(w)),w.nextSibling&&R(w.nextSibling)){var z=w.nextSibling;if(R(z)&&!f.a.g.get(z,O))throw Error("Found end comment without a matching opening comment, as child of "+w);return null}return w.nextSibling},Cd:g,Vd:function(w){return(w=(X?w.text:w.nodeValue).match(Y))?w[1]:null},Sc:function(w){if(k[f.a.R(w)]){var z=w.firstChild;if(z)do if(z.nodeType===1){var H;H=z.firstChild;var te=null;if(H)do if(te)te.push(H);else if(g(H)){var K=W(H,!0);K?H=K:te=[H]}else R(H)&&(te=[H]);while(H=H.nextSibling);if(H=te)for(te=z.nextSibling,K=0;K<H.length;K++)te?w.insertBefore(H[K],te):w.appendChild(H[K])}while(z=z.nextSibling)}}}})(),f.b("virtualElements",f.h),f.b("virtualElements.allowedBindings",f.h.ea),f.b("virtualElements.emptyNode",f.h.Ea),f.b("virtualElements.insertAfter",f.h.Wb),f.b("virtualElements.prepend",f.h.Vc),f.b("virtualElements.setDomNodeChildren",f.h.va),(function(){f.ga=function(){this.nd={}},f.a.extend(f.ga.prototype,{nodeHasBindings:function(g){switch(g.nodeType){case 1:return g.getAttribute("data-bind")!=null||f.j.getComponentNameForNode(g);case 8:return f.h.Cd(g);default:return!1}},getBindings:function(g,R){var A=this.getBindingsString(g,R),A=A?this.parseBindingsString(A,R,g):null;return f.j.tc(A,g,R,!1)},getBindingAccessors:function(g,R){var A=this.getBindingsString(g,R),A=A?this.parseBindingsString(A,R,g,{valueAccessors:!0}):null;return f.j.tc(A,g,R,!0)},getBindingsString:function(g){switch(g.nodeType){case 1:return g.getAttribute("data-bind");case 8:return f.h.Vd(g);default:return null}},parseBindingsString:function(g,R,A,W){try{var X=this.nd,Y=g+(W&&W.valueAccessors||""),D;if(!(D=X[Y])){var k,O="with($context){with($data||{}){return{"+f.m.vb(g,W)+"}}}";k=new Function("$context","$element",O),D=X[Y]=k}return D(R,A)}catch(w){throw w.message=`Unable to parse bindings. Bindings value: `+g+` Message: `+w.message,w}}}),f.ga.instance=new f.ga})(),f.b("bindingProvider",f.ga),(function(){function g(ue){var Ce=(ue=f.a.g.get(ue,_e))&&ue.N;Ce&&(ue.N=null,Ce.Tc())}function R(ue,Ce,Te){this.node=ue,this.yc=Ce,this.kb=[],this.H=!1,Ce.N||f.a.K.za(ue,g),Te&&Te.N&&(Te.N.kb.push(ue),this.Kb=Te)}function A(ue){return function(){return ue}}function W(ue){return ue()}function X(ue){return f.a.Ga(f.u.G(ue),function(Ce,Te){return function(){return ue()[Te]}})}function Y(ue,Ce,Te){return typeof ue=="function"?X(ue.bind(null,Ce,Te)):f.a.Ga(ue,A)}function D(ue,Ce){return X(this.getBindings.bind(this,ue,Ce))}function k(ue,Ce){var Te=f.h.firstChild(Ce);if(Te){var Re,Le=f.ga.instance,Xe=Le.preprocessNode;if(Xe){for(;Re=Te;)Te=f.h.nextSibling(Re),Xe.call(Le,Re);Te=f.h.firstChild(Ce)}for(;Re=Te;)Te=f.h.nextSibling(Re),O(ue,Re)}f.i.ma(Ce,f.i.H)}function O(ue,Ce){var Te=ue,Re=Ce.nodeType===1;Re&&f.h.Sc(Ce),(Re||f.ga.instance.nodeHasBindings(Ce))&&(Te=z(Ce,null,ue).bindingContextForDescendants),Te&&!ee[f.a.R(Ce)]&&k(Te,Ce)}function w(ue){var Ce=[],Te={},Re=[];return f.a.P(ue,function Le(Xe){if(!Te[Xe]){var qe=f.getBindingHandler(Xe);qe&&(qe.after&&(Re.push(Xe),f.a.D(qe.after,function(je){if(ue[je]){if(f.a.A(Re,je)!==-1)throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+Re.join(", "));Le(je)}}),Re.length--),Ce.push({key:Xe,Mc:qe})),Te[Xe]=!0}}),Ce}function z(ue,Ce,Te){var Re=f.a.g.Ub(ue,_e,{}),Le=Re.hd;if(!Ce){if(Le)throw Error("You cannot apply bindings multiple times to the same element.");Re.hd=!0}Le||(Re.context=Te),Re.Zb||(Re.Zb={});var Xe;if(Ce&&typeof Ce!="function")Xe=Ce;else{var qe=f.ga.instance,je=qe.getBindingAccessors||D,_t=f.$(function(){return(Xe=Ce?Ce(Te,ue):je.call(qe,ue,Te))&&(Te[te]&&Te[te](),Te[$]&&Te[$]()),Xe},null,{l:ue});Xe&&_t.ja()||(_t=null)}var Qe=Te,Ee;if(Xe){var He=function(){return f.a.Ga(_t?_t():Xe,W)},Rt=_t?function(dt){return function(){return W(_t()[dt])}}:function(dt){return Xe[dt]};He.get=function(dt){return Xe[dt]&&W(Rt(dt))},He.has=function(dt){return dt in Xe},f.i.H in Xe&&f.i.subscribe(ue,f.i.H,function(){var dt=(0,Xe[f.i.H])();if(dt){var gn=f.h.childNodes(ue);gn.length&&dt(gn,f.Ec(gn[0]))}}),f.i.pa in Xe&&(Qe=f.i.Cb(ue,Te),f.i.subscribe(ue,f.i.pa,function(){var dt=(0,Xe[f.i.pa])();dt&&f.h.firstChild(ue)&&dt(ue)})),Re=w(Xe),f.a.D(Re,function(dt){var gn=dt.Mc.init,Bt=dt.Mc.update,St=dt.key;if(ue.nodeType===8&&!f.h.ea[St])throw Error("The binding '"+St+"' cannot be used with virtual elements");try{typeof gn=="function"&&f.u.G(function(){var vt=gn(ue,Rt(St),He,Qe.$data,Qe);if(vt&&vt.controlsDescendantBindings){if(Ee!==e)throw Error("Multiple bindings ("+Ee+" and "+St+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");Ee=St}}),typeof Bt=="function"&&f.$(function(){Bt(ue,Rt(St),He,Qe.$data,Qe)},null,{l:ue})}catch(vt){throw vt.message='Unable to process binding "'+St+": "+Xe[St]+`" Message: `+vt.message,vt}})}return Re=Ee===e,{shouldBindDescendants:Re,bindingContextForDescendants:Re&&Qe}}function H(ue,Ce){return ue&&ue instanceof f.fa?ue:new f.fa(ue,e,e,Ce)}var te=f.a.Da("_subscribable"),K=f.a.Da("_ancestorBindingInfo"),$=f.a.Da("_dataDependency");f.c={};var ee={script:!0,textarea:!0,template:!0};f.getBindingHandler=function(ue){return f.c[ue]};var de={};f.fa=function(ue,Ce,Te,Re,Le){function Xe(){var Rt=Qe?_t():_t,dt=f.a.f(Rt);return Ce?(f.a.extend(qe,Ce),K in Ce&&(qe[K]=Ce[K])):(qe.$parents=[],qe.$root=dt,qe.ko=f),qe[te]=Ee,je?dt=qe.$data:(qe.$rawData=Rt,qe.$data=dt),Te&&(qe[Te]=dt),Re&&Re(qe,Ce,dt),Ce&&Ce[te]&&!f.S.o().Vb(Ce[te])&&Ce[te](),He&&(qe[$]=He),qe.$data}var qe=this,je=ue===de,_t=je?e:ue,Qe=typeof _t=="function"&&!f.O(_t),Ee,He=Le&&Le.dataDependency;Le&&Le.exportDependencies?Xe():(Ee=f.xb(Xe),Ee.v(),Ee.ja()?Ee.equalityComparer=null:qe[te]=e)},f.fa.prototype.createChildContext=function(ue,Ce,Te,Re){if(!Re&&Ce&&typeof Ce=="object"&&(Re=Ce,Ce=Re.as,Te=Re.extend),Ce&&Re&&Re.noChildContext){var Le=typeof ue=="function"&&!f.O(ue);return new f.fa(de,this,null,function(Xe){Te&&Te(Xe),Xe[Ce]=Le?ue():ue},Re)}return new f.fa(ue,this,Ce,function(Xe,qe){Xe.$parentContext=qe,Xe.$parent=qe.$data,Xe.$parents=(qe.$parents||[]).slice(0),Xe.$parents.unshift(Xe.$parent),Te&&Te(Xe)},Re)},f.fa.prototype.extend=function(ue,Ce){return new f.fa(de,this,null,function(Te){f.a.extend(Te,typeof ue=="function"?ue(Te):ue)},Ce)};var _e=f.a.g.Z();R.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)},R.prototype.sd=function(ue){f.a.Pa(this.kb,ue),!this.kb.length&&this.H&&this.Cc()},R.prototype.Cc=function(){this.H=!0,this.yc.N&&!this.kb.length&&(this.yc.N=null,f.a.K.yb(this.node,g),f.i.ma(this.node,f.i.pa),this.Tc())},f.i={H:"childrenComplete",pa:"descendantsComplete",subscribe:function(ue,Ce,Te,Re,Le){var Xe=f.a.g.Ub(ue,_e,{});return Xe.Fa||(Xe.Fa=new f.T),Le&&Le.notifyImmediately&&Xe.Zb[Ce]&&f.u.G(Te,Re,[ue]),Xe.Fa.subscribe(Te,Re,Ce)},ma:function(ue,Ce){var Te=f.a.g.get(ue,_e);if(Te&&(Te.Zb[Ce]=!0,Te.Fa&&Te.Fa.notifySubscribers(ue,Ce),Ce==f.i.H)){if(Te.N)Te.N.Cc();else if(Te.N===e&&Te.Fa&&Te.Fa.Wa(f.i.pa))throw Error("descendantsComplete event not supported for bindings on this node")}},Cb:function(ue,Ce){var Te=f.a.g.Ub(ue,_e,{});return Te.N||(Te.N=new R(ue,Te,Ce[K])),Ce[K]==Te?Ce:Ce.extend(function(Re){Re[K]=Te})}},f.Td=function(ue){return(ue=f.a.g.get(ue,_e))&&ue.context},f.ib=function(ue,Ce,Te){return ue.nodeType===1&&f.h.Sc(ue),z(ue,Ce,H(Te))},f.ld=function(ue,Ce,Te){return Te=H(Te),f.ib(ue,Y(Ce,Te,ue),Te)},f.Oa=function(ue,Ce){Ce.nodeType!==1&&Ce.nodeType!==8||k(H(ue),Ce)},f.vc=function(ue,Ce,Te){if(!o&&t.jQuery&&(o=t.jQuery),2>arguments.length){if(Ce=n.body,!Ce)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?")}else if(!Ce||Ce.nodeType!==1&&Ce.nodeType!==8)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");O(H(ue,Te),Ce)},f.Dc=function(ue){return!ue||ue.nodeType!==1&&ue.nodeType!==8?e:f.Td(ue)},f.Ec=function(ue){return(ue=f.Dc(ue))?ue.$data:e},f.b("bindingHandlers",f.c),f.b("bindingEvent",f.i),f.b("bindingEvent.subscribe",f.i.subscribe),f.b("bindingEvent.startPossiblyAsyncContentBinding",f.i.Cb),f.b("applyBindings",f.vc),f.b("applyBindingsToDescendants",f.Oa),f.b("applyBindingAccessorsToNode",f.ib),f.b("applyBindingsToNode",f.ld),f.b("contextFor",f.Dc),f.b("dataFor",f.Ec)})(),(function(g){function R(D,k){var O=Object.prototype.hasOwnProperty.call(X,D)?X[D]:g,w;O?O.subscribe(k):(O=X[D]=new f.T,O.subscribe(k),A(D,function(z,H){var te=!(!H||!H.synchronous);Y[D]={definition:z,Gd:te},delete X[D],w||te?O.notifySubscribers(z):f.na.zb(function(){O.notifySubscribers(z)})}),w=!0)}function A(D,k){W("getConfig",[D],function(O){O?W("loadComponent",[D,O],function(w){k(w,O)}):k(null,null)})}function W(D,k,O,w){w||(w=f.j.loaders.slice(0));var z=w.shift();if(z){var H=z[D];if(H){var te=!1;if(H.apply(z,k.concat(function(K){te?O(null):K!==null?O(K):W(D,k,O,w)}))!==g&&(te=!0,!z.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.")}else W(D,k,O,w)}else O(null)}var X={},Y={};f.j={get:function(D,k){var O=Object.prototype.hasOwnProperty.call(Y,D)?Y[D]:g;O?O.Gd?f.u.G(function(){k(O.definition)}):f.na.zb(function(){k(O.definition)}):R(D,k)},Bc:function(D){delete Y[D]},oc:W},f.j.loaders=[],f.b("components",f.j),f.b("components.get",f.j.get),f.b("components.clearCachedDefinition",f.j.Bc)})(),(function(){function g(O,w,z,H){function te(){--$===0&&H(K)}var K={},$=2,ee=z.template;z=z.viewModel,ee?X(w,ee,function(de){f.j.oc("loadTemplate",[O,de],function(_e){K.template=_e,te()})}):te(),z?X(w,z,function(de){f.j.oc("loadViewModel",[O,de],function(_e){K[k]=_e,te()})}):te()}function R(O,w,z){if(typeof w=="function")z(function(te){return new w(te)});else if(typeof w[k]=="function")z(w[k]);else if("instance"in w){var H=w.instance;z(function(){return H})}else"viewModel"in w?R(O,w.viewModel,z):O("Unknown viewModel value: "+w)}function A(O){switch(f.a.R(O)){case"script":return f.a.ua(O.text);case"textarea":return f.a.ua(O.value);case"template":if(W(O.content))return f.a.Ca(O.content.childNodes)}return f.a.Ca(O.childNodes)}function W(O){return t.DocumentFragment?O instanceof DocumentFragment:O&&O.nodeType===11}function X(O,w,z){typeof w.require=="string"?a||t.require?(a||t.require)([w.require],function(H){H&&typeof H=="object"&&H.Xd&&H.default&&(H=H.default),z(H)}):O("Uses require, but no AMD loader is present"):z(w)}function Y(O){return function(w){throw Error("Component '"+O+"': "+w)}}var D={};f.j.register=function(O,w){if(!w)throw Error("Invalid configuration for "+O);if(f.j.tb(O))throw Error("Component "+O+" is already registered");D[O]=w},f.j.tb=function(O){return Object.prototype.hasOwnProperty.call(D,O)},f.j.unregister=function(O){delete D[O],f.j.Bc(O)},f.j.Fc={getConfig:function(O,w){w(f.j.tb(O)?D[O]:null)},loadComponent:function(O,w,z){var H=Y(O);X(H,w,function(te){g(O,H,te,z)})},loadTemplate:function(O,w,z){if(O=Y(O),typeof w=="string")z(f.a.ua(w));else if(w instanceof Array)z(w);else if(W(w))z(f.a.la(w.childNodes));else if(w.element)if(w=w.element,t.HTMLElement?w instanceof HTMLElement:w&&w.tagName&&w.nodeType===1)z(A(w));else if(typeof w=="string"){var H=n.getElementById(w);H?z(A(H)):O("Cannot find element with ID "+w)}else O("Unknown element type: "+w);else O("Unknown template value: "+w)},loadViewModel:function(O,w,z){R(Y(O),w,z)}};var k="createViewModel";f.b("components.register",f.j.register),f.b("components.isRegistered",f.j.tb),f.b("components.unregister",f.j.unregister),f.b("components.defaultLoader",f.j.Fc),f.j.loaders.push(f.j.Fc),f.j.dd=D})(),(function(){function g(A,W){var X=A.getAttribute("params");if(X){var X=R.parseBindingsString(X,W,A,{valueAccessors:!0,bindingParams:!0}),X=f.a.Ga(X,function(k){return f.o(k,null,{l:A})}),Y=f.a.Ga(X,function(k){var O=k.v();return k.ja()?f.o({read:function(){return f.a.f(k())},write:f.Za(O)&&function(w){k()(w)},l:A}):O});return Object.prototype.hasOwnProperty.call(Y,"$raw")||(Y.$raw=X),Y}return{$raw:{}}}f.j.getComponentNameForNode=function(A){var W=f.a.R(A);if(f.j.tb(W)&&(W.indexOf("-")!=-1||""+A=="[object HTMLUnknownElement]"||8>=f.a.W&&A.tagName===W))return W},f.j.tc=function(A,W,X,Y){if(W.nodeType===1){var D=f.j.getComponentNameForNode(W);if(D){if(A=A||{},A.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var k={name:D,params:g(W,X)};A.component=Y?function(){return k}:k}}return A};var R=new f.ga;9>f.a.W&&(f.j.register=(function(A){return function(W){return A.apply(this,arguments)}})(f.j.register),n.createDocumentFragment=(function(A){return function(){var W=A(),X=f.j.dd,Y;for(Y in X);return W}})(n.createDocumentFragment))})(),(function(){function g(W,X,Y){if(X=X.template,!X)throw Error("Component '"+W+"' has no template");W=f.a.Ca(X),f.h.va(Y,W)}function R(W,X,Y){var D=W.createViewModel;return D?D.call(W,X,Y):X}var A=0;f.c.component={init:function(W,X,Y,D,k){function O(){var K=w&&w.dispose;typeof K=="function"&&K.call(w),H&&H.s(),z=w=H=null}var w,z,H,te=f.a.la(f.h.childNodes(W));return f.h.Ea(W),f.a.K.za(W,O),f.o(function(){var K=f.a.f(X()),$,ee;if(typeof K=="string"?$=K:($=f.a.f(K.name),ee=f.a.f(K.params)),!$)throw Error("No component name specified");var de=f.i.Cb(W,k),_e=z=++A;f.j.get($,function(ue){if(z===_e){if(O(),!ue)throw Error("Unknown component '"+$+"'");g($,ue,W);var Ce=R(ue,ee,{element:W,templateNodes:te});ue=de.createChildContext(Ce,{extend:function(Te){Te.$component=Ce,Te.$componentTemplateNodes=te}}),Ce&&Ce.koDescendantsComplete&&(H=f.i.subscribe(W,f.i.pa,Ce.koDescendantsComplete,Ce)),w=Ce,f.Oa(ue,W)}})},null,{l:W}),{controlsDescendantBindings:!0}}},f.h.ea.component=!0})();var P={class:"className",for:"htmlFor"};f.c.attr={update:function(g,R){var A=f.a.f(R())||{};f.a.P(A,function(W,X){X=f.a.f(X);var Y=W.indexOf(":"),Y="lookupNamespaceURI"in g&&0<Y&&g.lookupNamespaceURI(W.substr(0,Y)),D=X===!1||X===null||X===e;D?Y?g.removeAttributeNS(Y,W):g.removeAttribute(W):X=X.toString(),8>=f.a.W&&W in P?(W=P[W],D?g.removeAttribute(W):g[W]=X):D||(Y?g.setAttributeNS(Y,W,X):g.setAttribute(W,X)),W==="name"&&f.a.Yc(g,D?"":X)})}},(function(){f.c.checked={after:["value","attr"],init:function(g,R,A){function W(){var K=g.checked,$=Y();if(!f.S.Ya()&&(K||!k&&!f.S.qa())){var ee=f.u.G(R);if(w){var de=z?ee.v():ee,_e=te;te=$,_e!==$?K&&(f.a.Na(de,$,!0),f.a.Na(de,_e,!1)):f.a.Na(de,$,K),z&&f.Za(ee)&&ee(de)}else D&&($===e?$=K:K||($=e)),f.m.eb(ee,A,"checked",$,!0)}}function X(){var K=f.a.f(R()),$=Y();w?(g.checked=0<=f.a.A(K,$),te=$):g.checked=D&&$===e?!!K:Y()===K}var Y=f.xb(function(){if(A.has("checkedValue"))return f.a.f(A.get("checkedValue"));if(H)return A.has("value")?f.a.f(A.get("value")):g.value}),D=g.type=="checkbox",k=g.type=="radio";if(D||k){var O=R(),w=D&&f.a.f(O)instanceof Array,z=!(w&&O.push&&O.splice),H=k||w,te=w?Y():e;k&&!g.name&&f.c.uniqueName.init(g,function(){return!0}),f.o(W,null,{l:g}),f.a.B(g,"click",W),f.o(X,null,{l:g}),O=e}}},f.m.wa.checked=!0,f.c.checkedValue={update:function(g,R){g.value=f.a.f(R())}}})(),f.c.class={update:function(g,R){var A=f.a.Db(f.a.f(R()));f.a.Eb(g,g.__ko__cssValue,!1),g.__ko__cssValue=A,f.a.Eb(g,A,!0)}},f.c.css={update:function(g,R){var A=f.a.f(R());A!==null&&typeof A=="object"?f.a.P(A,function(W,X){X=f.a.f(X),f.a.Eb(g,W,X)}):f.c.class.update(g,R)}},f.c.enable={update:function(g,R){var A=f.a.f(R());A&&g.disabled?g.removeAttribute("disabled"):A||g.disabled||(g.disabled=!0)}},f.c.disable={update:function(g,R){f.c.enable.update(g,function(){return!f.a.f(R())})}},f.c.event={init:function(g,R,A,W,X){var Y=R()||{};f.a.P(Y,function(D){typeof D=="string"&&f.a.B(g,D,function(k){var O,w=R()[D];if(w){try{var z=f.a.la(arguments);W=X.$data,z.unshift(W),O=w.apply(W,z)}finally{O!==!0&&(k.preventDefault?k.preventDefault():k.returnValue=!1)}A.get(D+"Bubble")===!1&&(k.cancelBubble=!0,k.stopPropagation&&k.stopPropagation())}})})}},f.c.foreach={Rc:function(g){return function(){var R=g(),A=f.a.bc(R);return!A||typeof A.length=="number"?{foreach:R,templateEngine:f.ba.Ma}:(f.a.f(R),{foreach:A.data,as:A.as,noChildContext:A.noChildContext,includeDestroyed:A.includeDestroyed,afterAdd:A.afterAdd,beforeRemove:A.beforeRemove,afterRender:A.afterRender,beforeMove:A.beforeMove,afterMove:A.afterMove,templateEngine:f.ba.Ma})}},init:function(g,R){return f.c.template.init(g,f.c.foreach.Rc(R))},update:function(g,R,A,W,X){return f.c.template.update(g,f.c.foreach.Rc(R),A,W,X)}},f.m.Ra.foreach=!1,f.h.ea.foreach=!0,f.c.hasfocus={init:function(g,R,A){function W(D){g.__ko_hasfocusUpdating=!0;var k=g.ownerDocument;if("activeElement"in k){var O;try{O=k.activeElement}catch{O=k.body}D=O===g}k=R(),f.m.eb(k,A,"hasfocus",D,!0),g.__ko_hasfocusLastValue=D,g.__ko_hasfocusUpdating=!1}var X=W.bind(null,!0),Y=W.bind(null,!1);f.a.B(g,"focus",X),f.a.B(g,"focusin",X),f.a.B(g,"blur",Y),f.a.B(g,"focusout",Y),g.__ko_hasfocusLastValue=!1},update:function(g,R){var A=!!f.a.f(R());g.__ko_hasfocusUpdating||g.__ko_hasfocusLastValue===A||(A?g.focus():g.blur(),!A&&g.__ko_hasfocusLastValue&&g.ownerDocument.body.focus(),f.u.G(f.a.Fb,null,[g,A?"focusin":"focusout"]))}},f.m.wa.hasfocus=!0,f.c.hasFocus=f.c.hasfocus,f.m.wa.hasFocus="hasfocus",f.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(g,R){f.a.fc(g,R())}},(function(){function g(R,A,W){f.c[R]={init:function(X,Y,D,k,O){var w,z,H={},te,K,$;if(A){k=D.get("as");var ee=D.get("noChildContext");$=!(k&&ee),H={as:k,noChildContext:ee,exportDependencies:$}}return K=(te=D.get("completeOn")=="render")||D.has(f.i.pa),f.o(function(){var de=f.a.f(Y()),_e=!W!=!de,ue=!z,Ce;($||_e!==w)&&(K&&(O=f.i.Cb(X,O)),_e&&((!A||$)&&(H.dataDependency=f.S.o()),Ce=A?O.createChildContext(typeof de=="function"?de:Y,H):f.S.qa()?O.extend(null,H):O),ue&&f.S.qa()&&(z=f.a.Ca(f.h.childNodes(X),!0)),_e?(ue||f.h.va(X,f.a.Ca(z)),f.Oa(Ce,X)):(f.h.Ea(X),te||f.i.ma(X,f.i.H)),w=_e)},null,{l:X}),{controlsDescendantBindings:!0}}},f.m.Ra[R]=!1,f.h.ea[R]=!0}g("if"),g("ifnot",!1,!0),g("with",!0)})(),f.c.let={init:function(g,R,A,W,X){return R=X.extend(R),f.Oa(R,g),{controlsDescendantBindings:!0}}},f.h.ea.let=!0;var N={};f.c.options={init:function(g){if(f.a.R(g)!=="select")throw Error("options binding applies only to SELECT elements");for(;0<g.length;)g.remove(0);return{controlsDescendantBindings:!0}},update:function(g,R,A){function W(){return f.a.jb(g.options,function(ee){return ee.selected})}function X(ee,de,_e){var ue=typeof de;return ue=="function"?de(ee):ue=="string"?ee[de]:_e}function Y(ee,de){if(K&&w)f.i.ma(g,f.i.H);else if(te.length){var _e=0<=f.a.A(te,f.w.M(de[0]));f.a.Zc(de[0],_e),K&&!_e&&f.u.G(f.a.Fb,null,[g,"change"])}}var D=g.multiple,k=g.length!=0&&D?g.scrollTop:null,O=f.a.f(R()),w=A.get("valueAllowUnset")&&A.has("value"),z=A.get("optionsIncludeDestroyed");R={};var H,te=[];w||(D?te=f.a.Mb(W(),f.w.M):0<=g.selectedIndex&&te.push(f.w.M(g.options[g.selectedIndex]))),O&&(typeof O.length>"u"&&(O=[O]),H=f.a.jb(O,function(ee){return z||ee===e||ee===null||!f.a.f(ee._destroy)}),A.has("optionsCaption")&&(O=f.a.f(A.get("optionsCaption")),O!==null&&O!==e&&H.unshift(N)));var K=!1;if(R.beforeRemove=function(ee){g.removeChild(ee)},O=Y,A.has("optionsAfterRender")&&typeof A.get("optionsAfterRender")=="function"&&(O=function(ee,de){Y(0,de),f.u.G(A.get("optionsAfterRender"),null,[de[0],ee!==N?ee:e])}),f.a.ec(g,H,function(ee,de,_e){return _e.length&&(te=!w&&_e[0].selected?[f.w.M(_e[0])]:[],K=!0),de=g.ownerDocument.createElement("option"),ee===N?(f.a.Bb(de,A.get("optionsCaption")),f.w.cb(de,e)):(_e=X(ee,A.get("optionsValue"),ee),f.w.cb(de,f.a.f(_e)),ee=X(ee,A.get("optionsText"),_e),f.a.Bb(de,ee)),[de]},R,O),!w){var $;D?$=te.length&&W().length<te.length:$=te.length&&0<=g.selectedIndex?f.w.M(g.options[g.selectedIndex])!==te[0]:te.length||0<=g.selectedIndex,$&&f.u.G(f.a.Fb,null,[g,"change"])}(w||f.S.Ya())&&f.i.ma(g,f.i.H),f.a.wd(g),k&&20<Math.abs(k-g.scrollTop)&&(g.scrollTop=k)}},f.c.options.$b=f.a.g.Z(),f.c.selectedOptions={init:function(g,R,A){function W(){var D=R(),k=[];f.a.D(g.getElementsByTagName("option"),function(O){O.selected&&k.push(f.w.M(O))}),f.m.eb(D,A,"selectedOptions",k)}function X(){var D=f.a.f(R()),k=g.scrollTop;D&&typeof D.length=="number"&&f.a.D(g.getElementsByTagName("option"),function(O){var w=0<=f.a.A(D,f.w.M(O));O.selected!=w&&f.a.Zc(O,w)}),g.scrollTop=k}if(f.a.R(g)!="select")throw Error("selectedOptions binding applies only to SELECT elements");var Y;f.i.subscribe(g,f.i.H,function(){Y?W():(f.a.B(g,"change",W),Y=f.o(X,null,{l:g}))},null,{notifyImmediately:!0})},update:function(){}},f.m.wa.selectedOptions=!0,f.c.style={update:function(g,R){var A=f.a.f(R()||{});f.a.P(A,function(W,X){if(X=f.a.f(X),(X===null||X===e||X===!1)&&(X=""),o)o(g).css(W,X);else if(/^--/.test(W))g.style.setProperty(W,X);else{W=W.replace(/-(\w)/g,function(D,k){return k.toUpperCase()});var Y=g.style[W];g.style[W]=X,X===Y||g.style[W]!=Y||isNaN(X)||(g.style[W]=X+"px")}})}},f.c.submit={init:function(g,R,A,W,X){if(typeof R()!="function")throw Error("The value for a submit binding must be a function");f.a.B(g,"submit",function(Y){var D,k=R();try{D=k.call(X.$data,g)}finally{D!==!0&&(Y.preventDefault?Y.preventDefault():Y.returnValue=!1)}})}},f.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(g,R){f.a.Bb(g,R())}},f.h.ea.text=!0,(function(){if(t&&t.navigator){var g=function(H){if(H)return parseFloat(H[1])},R=t.navigator.userAgent,A,W,X,Y,D;(A=t.opera&&t.opera.version&&parseInt(t.opera.version()))||(D=g(R.match(/Edge\/([^ ]+)$/)))||g(R.match(/Chrome\/([^ ]+)/))||(W=g(R.match(/Version\/([^ ]+) Safari/)))||(X=g(R.match(/Firefox\/([^ ]+)/)))||(Y=f.a.W||g(R.match(/MSIE ([^ ]+)/)))||(Y=g(R.match(/rv:([^ )]+)/)))}if(8<=Y&&10>Y)var k=f.a.g.Z(),O=f.a.g.Z(),w=function(H){var te=this.activeElement;(te=te&&f.a.g.get(te,O))&&te(H)},z=function(H,te){var K=H.ownerDocument;f.a.g.get(K,k)||(f.a.g.set(K,k,!0),f.a.B(K,"selectionchange",w)),f.a.g.set(H,O,te)};f.c.textInput={init:function(H,te,K){function $(Xe,qe){f.a.B(H,Xe,qe)}function ee(){var Xe=f.a.f(te());(Xe===null||Xe===e)&&(Xe=""),Te!==e&&Xe===Te?f.a.setTimeout(ee,4):H.value!==Xe&&(Le=!0,H.value=Xe,Le=!1,ue=H.value)}function de(){Ce||(Te=H.value,Ce=f.a.setTimeout(_e,4))}function _e(){clearTimeout(Ce),Te=Ce=e;var Xe=H.value;ue!==Xe&&(ue=Xe,f.m.eb(te(),K,"textInput",Xe))}var ue=H.value,Ce,Te,Re=f.a.W==9?de:_e,Le=!1;Y&&$("keypress",_e),11>Y&&$("propertychange",function(Xe){Le||Xe.propertyName!=="value"||Re(Xe)}),Y==8&&($("keyup",_e),$("keydown",_e)),z&&(z(H,Re),$("dragend",de)),(!Y||9<=Y)&&$("input",Re),5>W&&f.a.R(H)==="textarea"?($("keydown",de),$("paste",de),$("cut",de)):11>A?$("keydown",de):4>X?($("DOMAutoComplete",_e),$("dragdrop",_e),$("drop",_e)):D&&H.type==="number"&&$("keydown",de),$("change",_e),$("blur",_e),f.o(ee,null,{l:H})}},f.m.wa.textInput=!0,f.c.textinput={preprocess:function(H,te,K){K("textInput",H)}}})(),f.c.uniqueName={init:function(g,R){if(R()){var A="ko_unique_"+ ++f.c.uniqueName.rd;f.a.Yc(g,A)}}},f.c.uniqueName.rd=0,f.c.using={init:function(g,R,A,W,X){var Y;return A.has("as")&&(Y={as:A.get("as"),noChildContext:A.get("noChildContext")}),R=X.createChildContext(R,Y),f.Oa(R,g),{controlsDescendantBindings:!0}}},f.h.ea.using=!0,f.c.value={init:function(g,R,A){var W=f.a.R(g),X=W=="input";if(!X||g.type!="checkbox"&&g.type!="radio"){var Y=[],D=A.get("valueUpdate"),k=!1,O=null;D&&(typeof D=="string"?Y=[D]:Y=f.a.wc(D),f.a.Pa(Y,"change"));var w=function(){O=null,k=!1;var te=R(),K=f.w.M(g);f.m.eb(te,A,"value",K)};!f.a.W||!X||g.type!="text"||g.autocomplete=="off"||g.form&&g.form.autocomplete=="off"||f.a.A(Y,"propertychange")!=-1||(f.a.B(g,"propertychange",function(){k=!0}),f.a.B(g,"focus",function(){k=!1}),f.a.B(g,"blur",function(){k&&w()})),f.a.D(Y,function(te){var K=w;f.a.Ud(te,"after")&&(K=function(){O=f.w.M(g),f.a.setTimeout(w,0)},te=te.substring(5)),f.a.B(g,te,K)});var z;if(z=X&&g.type=="file"?function(){var te=f.a.f(R());te===null||te===e||te===""?g.value="":f.u.G(w)}:function(){var te=f.a.f(R()),K=f.w.M(g);O!==null&&te===O?f.a.setTimeout(z,0):(te!==K||K===e)&&(W==="select"?(K=A.get("valueAllowUnset"),f.w.cb(g,te,K),K||te===f.w.M(g)||f.u.G(w)):f.w.cb(g,te))},W==="select"){var H;f.i.subscribe(g,f.i.H,function(){H?A.get("valueAllowUnset")?z():w():(f.a.B(g,"change",w),H=f.o(z,null,{l:g}))},null,{notifyImmediately:!0})}else f.a.B(g,"change",w),f.o(z,null,{l:g})}else f.ib(g,{checkedValue:R})},update:function(){}},f.m.wa.value=!0,f.c.visible={update:function(g,R){var A=f.a.f(R()),W=g.style.display!="none";A&&!W?g.style.display="":!A&&W&&(g.style.display="none")}},f.c.hidden={update:function(g,R){f.c.visible.update(g,function(){return!f.a.f(R())})}},(function(g){f.c[g]={init:function(R,A,W,X,Y){return f.c.event.init.call(this,R,function(){var D={};return D[g]=A(),D},W,X,Y)}}})("click"),f.ca=function(){},f.ca.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource")},f.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock")},f.ca.prototype.makeTemplateSource=function(g,R){if(typeof g=="string"){R=R||n;var A=R.getElementById(g);if(!A)throw Error("Cannot find template with ID "+g);return new f.C.F(A)}if(g.nodeType==1||g.nodeType==8)return new f.C.ia(g);throw Error("Unknown template type: "+g)},f.ca.prototype.renderTemplate=function(g,R,A,W){return g=this.makeTemplateSource(g,W),this.renderTemplateSource(g,R,A,W)},f.ca.prototype.isTemplateRewritten=function(g,R){return this.allowTemplateRewriting===!1?!0:this.makeTemplateSource(g,R).data("isRewritten")},f.ca.prototype.rewriteTemplate=function(g,R,A){g=this.makeTemplateSource(g,A),R=R(g.text()),g.text(R),g.data("isRewritten",!0)},f.b("templateEngine",f.ca),f.kc=(function(){function g(W,X,Y,D){W=f.m.ac(W);for(var k=f.m.Ra,O=0;O<W.length;O++){var w=W[O].key;if(Object.prototype.hasOwnProperty.call(k,w)){var z=k[w];if(typeof z=="function"){if(w=z(W[O].value))throw Error(w)}else if(!z)throw Error("This template engine does not support the '"+w+"' binding within its templates")}}return Y="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+f.m.vb(W,{valueAccessors:!0})+" } })()},'"+Y.toLowerCase()+"')",D.createJavaScriptEvaluatorBlock(Y)+X}var R=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,A=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(W,X,Y){X.isTemplateRewritten(W,Y)||X.rewriteTemplate(W,function(D){return f.kc.Ld(D,X)},Y)},Ld:function(W,X){return W.replace(R,function(Y,D,k,O,w){return g(w,D,k,X)}).replace(A,function(Y,D){return g(D,"<!-- ko -->","#comment",X)})},md:function(W,X){return f.aa.Xb(function(Y,D){var k=Y.nextSibling;k&&k.nodeName.toLowerCase()===X&&f.ib(k,W,D)})}}})(),f.b("__tr_ambtns",f.kc.md),(function(){f.C={},f.C.F=function(A){if(this.F=A){var W=f.a.R(A);this.ab=W==="script"?1:W==="textarea"?2:W=="template"&&A.content&&A.content.nodeType===11?3:4}},f.C.F.prototype.text=function(){var A=this.ab===1?"text":this.ab===2?"value":"innerHTML";if(arguments.length==0)return this.F[A];var W=arguments[0];A==="innerHTML"?f.a.fc(this.F,W):this.F[A]=W};var g=f.a.g.Z()+"_";f.C.F.prototype.data=function(A){if(arguments.length===1)return f.a.g.get(this.F,g+A);f.a.g.set(this.F,g+A,arguments[1])};var R=f.a.g.Z();f.C.F.prototype.nodes=function(){var A=this.F;if(arguments.length==0){var W=f.a.g.get(A,R)||{},X=W.lb||(this.ab===3?A.content:this.ab===4?A:e);if(!X||W.jd){var Y=this.text();Y&&Y!==W.bb&&(X=f.a.Md(Y,A.ownerDocument),f.a.g.set(A,R,{lb:X,bb:Y,jd:!0}))}return X}W=arguments[0],this.ab!==e&&this.text(""),f.a.g.set(A,R,{lb:W})},f.C.ia=function(A){this.F=A},f.C.ia.prototype=new f.C.F,f.C.ia.prototype.constructor=f.C.ia,f.C.ia.prototype.text=function(){if(arguments.length==0){var A=f.a.g.get(this.F,R)||{};return A.bb===e&&A.lb&&(A.bb=A.lb.innerHTML),A.bb}f.a.g.set(this.F,R,{bb:arguments[0]})},f.b("templateSources",f.C),f.b("templateSources.domElement",f.C.F),f.b("templateSources.anonymousTemplate",f.C.ia)})(),(function(){function g(O,w,z){var H;for(w=f.h.nextSibling(w);O&&(H=O)!==w;)O=f.h.nextSibling(H),z(H,O)}function R(O,w){if(O.length){var z=O[0],H=O[O.length-1],te=z.parentNode,K=f.ga.instance,$=K.preprocessNode;if($){if(g(z,H,function(ee,de){var _e=ee.previousSibling,ue=$.call(K,ee);ue&&(ee===z&&(z=ue[0]||de),ee===H&&(H=ue[ue.length-1]||_e))}),O.length=0,!z)return;z===H?O.push(z):(O.push(z,H),f.a.Ua(O,te))}g(z,H,function(ee){ee.nodeType!==1&&ee.nodeType!==8||f.vc(w,ee)}),g(z,H,function(ee){ee.nodeType!==1&&ee.nodeType!==8||f.aa.cd(ee,[w])}),f.a.Ua(O,te)}}function A(O){return O.nodeType?O:0<O.length?O[0]:null}function W(O,w,z,H,te){te=te||{};var K=(O&&A(O)||z||{}).ownerDocument,$=te.templateEngine||Y;if(f.kc.xd(z,$,K),z=$.renderTemplate(z,H,te,K),typeof z.length!="number"||0<z.length&&typeof z[0].nodeType!="number")throw Error("Template engine must return an array of DOM nodes");switch(K=!1,w){case"replaceChildren":f.h.va(O,z),K=!0;break;case"replaceNode":f.a.Xc(O,z),K=!0;break;case"ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+w)}return K&&(R(z,H),te.afterRender&&f.u.G(te.afterRender,null,[z,H[te.as||"$data"]]),w=="replaceChildren"&&f.i.ma(O,f.i.H)),z}function X(O,w,z){return f.O(O)?O():typeof O=="function"?O(w,z):O}var Y;f.gc=function(O){if(O!=e&&!(O instanceof f.ca))throw Error("templateEngine must inherit from ko.templateEngine");Y=O},f.dc=function(O,w,z,H,te){if(z=z||{},(z.templateEngine||Y)==e)throw Error("Set a template engine before calling renderTemplate");if(te=te||"replaceChildren",H){var K=A(H);return f.$(function(){var ee=w&&w instanceof f.fa?w:new f.fa(w,null,null,null,{exportDependencies:!0}),$=X(O,ee.$data,ee),ee=W(H,te,$,ee,z);te=="replaceNode"&&(H=ee,K=A(H))},null,{Sa:function(){return!K||!f.a.Sb(K)},l:K&&te=="replaceNode"?K.parentNode:K})}return f.aa.Xb(function($){f.dc(O,w,z,$,"replaceNode")})},f.Qd=function(O,w,z,H,te){function K(Te,Re){f.u.G(f.a.ec,null,[H,Te,ee,z,$,Re]),f.i.ma(H,f.i.H)}function $(Te,Re){R(Re,de),z.afterRender&&z.afterRender(Re,Te),de=null}function ee(Te,Re){de=te.createChildContext(Te,{as:_e,noChildContext:z.noChildContext,extend:function(Xe){Xe.$index=Re,_e&&(Xe[_e+"Index"]=Re)}});var Le=X(O,Te,de);return W(H,"ignoreTargetNode",Le,de,z)}var de,_e=z.as,ue=z.includeDestroyed===!1||f.options.foreachHidesDestroyed&&!z.includeDestroyed;if(ue||z.beforeRemove||!f.Pc(w))return f.$(function(){var Te=f.a.f(w)||[];typeof Te.length>"u"&&(Te=[Te]),ue&&(Te=f.a.jb(Te,function(Re){return Re===e||Re===null||!f.a.f(Re._destroy)})),K(Te)},null,{l:H});K(w.v());var Ce=w.subscribe(function(Te){K(w(),Te)},null,"arrayChange");return Ce.l(H),Ce};var D=f.a.g.Z(),k=f.a.g.Z();f.c.template={init:function(O,w){var z=f.a.f(w());if(typeof z=="string"||"name"in z)f.h.Ea(O);else if("nodes"in z){if(z=z.nodes||[],f.O(z))throw Error('The "nodes" option must be a plain, non-observable array.');var H=z[0]&&z[0].parentNode;H&&f.a.g.get(H,k)||(H=f.a.Yb(z),f.a.g.set(H,k,!0)),new f.C.ia(O).nodes(H)}else if(z=f.h.childNodes(O),0<z.length)H=f.a.Yb(z),new f.C.ia(O).nodes(H);else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:function(O,w,z,H,te){var K=w();w=f.a.f(K),z=!0,H=null,typeof w=="string"?w={}:(K="name"in w?w.name:O,"if"in w&&(z=f.a.f(w.if)),z&&"ifnot"in w&&(z=!f.a.f(w.ifnot)),z&&!K&&(z=!1)),"foreach"in w?H=f.Qd(K,z&&w.foreach||[],w,O,te):z?(z=te,"data"in w&&(z=te.createChildContext(w.data,{as:w.as,noChildContext:w.noChildContext,exportDependencies:!0})),H=f.dc(K,z,w,O)):f.h.Ea(O),te=H,(w=f.a.g.get(O,D))&&typeof w.s=="function"&&w.s(),f.a.g.set(O,D,!te||te.ja&&!te.ja()?e:te)}},f.m.Ra.template=function(O){return O=f.m.ac(O),O.length==1&&O[0].unknown||f.m.Id(O,"name")?null:"This template engine does not support anonymous templates nested within its templates"},f.h.ea.template=!0})(),f.b("setTemplateEngine",f.gc),f.b("renderTemplate",f.dc),f.a.Kc=function(g,R,A){if(g.length&&R.length){var W,X,Y,D,k;for(W=X=0;(!A||W<A)&&(D=g[X]);++X){for(Y=0;k=R[Y];++Y)if(D.value===k.value){D.moved=k.index,k.moved=D.index,R.splice(Y,1),W=Y=0;break}W+=Y}}},f.a.Pb=(function(){function g(R,A,W,X,Y){var D=Math.min,k=Math.max,O=[],w,z=R.length,H,te=A.length,K=te-z||1,$=z+te+1,ee,de,_e;for(w=0;w<=z;w++)for(de=ee,O.push(ee=[]),_e=D(te,w+K),H=k(0,w-1);H<=_e;H++)ee[H]=H?w?R[w-1]===A[H-1]?de[H-1]:D(de[H]||$,ee[H-1]||$)+1:H+1:w+1;for(D=[],k=[],K=[],w=z,H=te;w||H;)te=O[w][H]-1,H&&te===O[w][H-1]?k.push(D[D.length]={status:W,value:A[--H],index:H}):w&&te===O[w-1][H]?K.push(D[D.length]={status:X,value:R[--w],index:w}):(--H,--w,Y.sparse||D.push({status:"retained",value:A[H]}));return f.a.Kc(K,k,!Y.dontLimitMoves&&10*z),D.reverse()}return function(R,A,W){return W=typeof W=="boolean"?{dontLimitMoves:W}:W||{},R=R||[],A=A||[],R.length<A.length?g(R,A,"added","deleted",W):g(A,R,"deleted","added",W)}})(),f.b("utils.compareArrays",f.a.Pb),(function(){function g(W,X,Y,D,k){var O=[],w=f.$(function(){var z=X(Y,k,f.a.Ua(O,W))||[];0<O.length&&(f.a.Xc(O,z),D&&f.u.G(D,null,[Y,z,k])),O.length=0,f.a.Nb(O,z)},null,{l:W,Sa:function(){return!f.a.kd(O)}});return{Y:O,$:w.ja()?w:e}}var R=f.a.g.Z(),A=f.a.g.Z();f.a.ec=function(W,X,Y,D,k,O){function w(dt){Le={Aa:dt,pb:f.ta(de++)},$.push(Le),K||Re.push(Le)}function z(dt){Le=te[dt],de!==Le.pb.v()&&Te.push(Le),Le.pb(de++),f.a.Ua(Le.Y,W),$.push(Le)}function H(dt,gn){if(dt)for(var Bt=0,St=gn.length;Bt<St;Bt++)f.a.D(gn[Bt].Y,function(vt){dt(vt,Bt,gn[Bt].Aa)})}X=X||[],typeof X.length>"u"&&(X=[X]),D=D||{};var te=f.a.g.get(W,R),K=!te,$=[],ee=0,de=0,_e=[],ue=[],Ce=[],Te=[],Re=[],Le,Xe=0;if(K)f.a.D(X,w);else{if(!O||te&&te._countWaitingForRemove){var qe=f.a.Mb(te,function(dt){return dt.Aa});O=f.a.Pb(qe,X,{dontLimitMoves:D.dontLimitMoves,sparse:!0})}for(var qe=0,je,_t,Qe;je=O[qe];qe++)switch(_t=je.moved,Qe=je.index,je.status){case"deleted":for(;ee<Qe;)z(ee++);_t===e&&(Le=te[ee],Le.$&&(Le.$.s(),Le.$=e),f.a.Ua(Le.Y,W).length&&(D.beforeRemove&&($.push(Le),Xe++,Le.Aa===A?Le=null:Ce.push(Le)),Le&&_e.push.apply(_e,Le.Y))),ee++;break;case"added":for(;de<Qe;)z(ee++);_t!==e?(ue.push($.length),z(_t)):w(je.value)}for(;de<X.length;)z(ee++);$._countWaitingForRemove=Xe}f.a.g.set(W,R,$),H(D.beforeMove,Te),f.a.D(_e,D.beforeRemove?f.oa:f.removeNode);var Ee,He,Rt;try{Rt=W.ownerDocument.activeElement}catch{}if(ue.length)for(;(qe=ue.shift())!=e;){for(Le=$[qe],Ee=e;qe;)if((He=$[--qe].Y)&&He.length){Ee=He[He.length-1];break}for(X=0;ee=Le.Y[X];Ee=ee,X++)f.h.Wb(W,ee,Ee)}for(qe=0;Le=$[qe];qe++){for(Le.Y||f.a.extend(Le,g(W,Y,Le.Aa,k,Le.pb)),X=0;ee=Le.Y[X];Ee=ee,X++)f.h.Wb(W,ee,Ee);!Le.Ed&&k&&(k(Le.Aa,Le.Y,Le.pb),Le.Ed=!0,Ee=Le.Y[Le.Y.length-1])}for(Rt&&W.ownerDocument.activeElement!=Rt&&Rt.focus(),H(D.beforeRemove,Ce),qe=0;qe<Ce.length;++qe)Ce[qe].Aa=A;H(D.afterMove,Te),H(D.afterAdd,Re)}})(),f.b("utils.setDomNodeChildrenFromArrayMapping",f.a.ec),f.ba=function(){this.allowTemplateRewriting=!1},f.ba.prototype=new f.ca,f.ba.prototype.constructor=f.ba,f.ba.prototype.renderTemplateSource=function(g,R,A,W){return(R=!(9>f.a.W)&&g.nodes?g.nodes():null)?f.a.la(R.cloneNode(!0).childNodes):(g=g.text(),f.a.ua(g,W))},f.ba.Ma=new f.ba,f.gc(f.ba.Ma),f.b("nativeTemplateEngine",f.ba),(function(){f.$a=function(){var R=this.Hd=(function(){if(!o||!o.tmpl)return 0;try{if(0<=o.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch{}return 1})();this.renderTemplateSource=function(A,W,X,Y){if(Y=Y||n,X=X||{},2>R)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var D=A.data("precompiled");return D||(D=A.text()||"",D=o.template(null,"{{ko_with $item.koBindingContext}}"+D+"{{/ko_with}}"),A.data("precompiled",D)),A=[W.$data],W=o.extend({koBindingContext:W},X.templateOptions),W=o.tmpl(D,A,W),W.appendTo(Y.createElement("div")),o.fragments={},W},this.createJavaScriptEvaluatorBlock=function(A){return"{{ko_code ((function() { return "+A+" })()) }}"},this.addTemplate=function(A,W){n.write("<script type='text/html' id='"+A+"'>"+W+"<\/script>")},0<R&&(o.tmpl.tag.ko_code={open:"__.push($1 || '');"},o.tmpl.tag.ko_with={open:"with($1) {",close:"} "})},f.$a.prototype=new f.ca,f.$a.prototype.constructor=f.$a;var g=new f.$a;0<g.Hd&&f.gc(g),f.b("jqueryTmplTemplateEngine",f.$a)})()})})()})()})();var bMt=ko;typeof window<"u"?(ko=window.ko,typeof $9<"u"?window.ko=$9:delete window.ko):(ko=global.ko,typeof $9<"u"?global.ko=$9:delete global.ko);var $Z=bMt;var ttr=x(T(),1);/** * @license * Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5 * Copyright (c) Steve Sanderson * MIT license */var Qre="__knockoutObservables",qre="__knockoutSubscribable";function rFe(e,t){if(!e)throw new Error("When calling ko.track, you must pass an object as the first parameter.");var n=this,i=sFe(e,!0);return t=t||Object.getOwnPropertyNames(e),t.forEach(function(o){if(!(o===Qre||o===qre)&&!(o in i)){var r=e[o],s=r instanceof Array,a=n.isObservable(r)?r:s?n.observableArray(r):n.observable(r);Object.defineProperty(e,o,{configurable:!0,enumerable:!0,get:a,set:n.isWriteableObservable(a)?a:void 0}),i[o]=a,s&&yMt(n,a)}}),e}function sFe(e,t){var n=e[Qre];return!n&&t&&(n={},Object.defineProperty(e,Qre,{value:n})),n}function gMt(e,t,n){var i=this,o={owner:e,deferEvaluation:!0};if(typeof n=="function")o.read=n;else{if("value"in n)throw new Error('For ko.defineProperty, you must not specify a "value" for the property. You must provide a "get" function.');if(typeof n.get!="function")throw new Error('For ko.defineProperty, the third parameter must be either an evaluator function, or an options object containing a function called "get".');o.read=n.get,o.write=n.set}return e[t]=i.computed(o),rFe.call(i,e,[t]),e}function yMt(e,t){var n=null;e.computed(function(){n&&(n.dispose(),n=null);var i=t();i instanceof Array&&(n=xMt(e,t,i))})}function xMt(e,t,n){var i=TMt(e,n);return i.subscribe(t)}function TMt(e,t){var n=t[qre];if(!n){n=new e.subscribable,Object.defineProperty(t,qre,{value:n});var i={};_Mt(t,n,i),SMt(e,t,n,i)}return n}function _Mt(e,t,n){["pop","push","reverse","shift","sort","splice","unshift"].forEach(function(i){var o=e[i];e[i]=function(){var r=o.apply(this,arguments);return n.pause!==!0&&t.notifySubscribers(this),r}})}function SMt(e,t,n,i){["remove","removeAll","destroy","destroyAll","replace"].forEach(function(o){Object.defineProperty(t,o,{enumerable:!1,value:function(){var r;i.pause=!0;try{r=e.observableArray.fn[o].apply(e.observableArray(t),arguments)}finally{i.pause=!1}return n.notifySubscribers(t),r}})})}function aFe(e,t){if(!e)return null;var n=sFe(e,!1);return n&&n[t]||null}function ZMt(e,t){var n=aFe(e,t);n&&n.valueHasMutated()}function VMt(e){e.track=rFe,e.getObservable=aFe,e.valueHasMutated=ZMt,e.defineProperty=gMt}var eU={attachToKo:VMt};var itr=x(T(),1),cFe="http://www.w3.org/2000/svg",lFe="cesium-svgPath-svg",CMt={register:function(e){e.bindingHandlers.cesiumSvgPath={init:function(t,n){let i=document.createElementNS(cFe,"svg:svg");i.setAttribute("class",lFe);let o=document.createElementNS(cFe,"path");return i.appendChild(o),e.virtualElements.setDomNodeChildren(t,[i]),e.computed({read:function(){let r=e.unwrap(n());o.setAttribute("d",e.unwrap(r.path));let s=e.unwrap(r.width),a=e.unwrap(r.height);i.setAttribute("width",s),i.setAttribute("height",a),i.setAttribute("viewBox",`0 0 ${s} ${a}`),r.css&&i.setAttribute("class",`${lFe} ${e.unwrap(r.css)}`)},disposeWhenNodeIsRemoved:t}),{controlsDescendantBindings:!0}}},e.virtualElements.allowedBindings.cesiumSvgPath=!0}},tU=CMt;eU.attachToKo($Z);tU.register($Z);var Ge=$Z;function nU(e){l(e)||(e=new Xh),this._clock=e,this._eventHelper=new Ir,this._eventHelper.add(e.onTick,this.synchronize,this),this.systemTime=Ge.observable(Q.now()),this.systemTime.equalityComparer=Q.equals,this.startTime=Ge.observable(e.startTime),this.startTime.equalityComparer=Q.equals,this.startTime.subscribe(function(t){e.startTime=t,this.synchronize()},this),this.stopTime=Ge.observable(e.stopTime),this.stopTime.equalityComparer=Q.equals,this.stopTime.subscribe(function(t){e.stopTime=t,this.synchronize()},this),this.currentTime=Ge.observable(e.currentTime),this.currentTime.equalityComparer=Q.equals,this.currentTime.subscribe(function(t){e.currentTime=t,this.synchronize()},this),this.multiplier=Ge.observable(e.multiplier),this.multiplier.subscribe(function(t){e.multiplier=t,this.synchronize()},this),this.clockStep=Ge.observable(e.clockStep),this.clockStep.subscribe(function(t){e.clockStep=t,this.synchronize()},this),this.clockRange=Ge.observable(e.clockRange),this.clockRange.subscribe(function(t){e.clockRange=t,this.synchronize()},this),this.canAnimate=Ge.observable(e.canAnimate),this.canAnimate.subscribe(function(t){e.canAnimate=t,this.synchronize()},this),this.shouldAnimate=Ge.observable(e.shouldAnimate),this.shouldAnimate.subscribe(function(t){e.shouldAnimate=t,this.synchronize()},this),Ge.track(this,["systemTime","startTime","stopTime","currentTime","multiplier","clockStep","clockRange","canAnimate","shouldAnimate"])}Object.defineProperties(nU.prototype,{clock:{get:function(){return this._clock}}});nU.prototype.synchronize=function(){let e=this._clock;this.systemTime=Q.now(),this.startTime=e.startTime,this.stopTime=e.stopTime,this.currentTime=e.currentTime,this.multiplier=e.multiplier,this.clockStep=e.clockStep,this.clockRange=e.clockRange,this.canAnimate=e.canAnimate,this.shouldAnimate=e.shouldAnimate};nU.prototype.isDestroyed=function(){return!1};nU.prototype.destroy=function(){this._eventHelper.removeAll(),me(this)};var iU=nU;var ptr=x(T(),1);function RMt(){this.canExecute=void 0,this.beforeExecute=void 0,this.afterExecute=void 0,ge.throwInstantiationError()}var $re=RMt;var xtr=x(T(),1);var MG={};MG.createCheckbox=function(e,t,n){let i=document.createElement("div"),o=document.createElement("label"),r=document.createElement("input");r.type="checkbox";let s=`checked: ${t}`;return l(n)&&(s+=`, enable: ${n}`),r.setAttribute("data-bind",s),o.appendChild(r),o.appendChild(document.createTextNode(e)),i.appendChild(o),i};MG.createSection=function(e,t,n,i){let o=document.createElement("div");o.className="cesium-cesiumInspector-section",o.setAttribute("data-bind",`css: { "cesium-cesiumInspector-section-collapsed": !${n} }`),e.appendChild(o);let r=document.createElement("h3");r.className="cesium-cesiumInspector-sectionHeader",r.appendChild(document.createTextNode(t)),r.setAttribute("data-bind",`click: ${i}`),o.appendChild(r);let s=document.createElement("div");return s.className="cesium-cesiumInspector-sectionContent",o.appendChild(s),s};MG.createRangeInput=function(e,t,n,i,o,r){r=r??t;let s=document.createElement("input");s.setAttribute("data-bind",`value: ${r}`),s.type="number";let a=document.createElement("input");a.type="range",a.min=n,a.max=i,a.step=o??"any",a.setAttribute("data-bind",`valueUpdate: "input", value: ${t}`);let c=document.createElement("div");c.appendChild(a);let d=document.createElement("div");return d.className="cesium-cesiumInspector-slider",d.appendChild(document.createTextNode(e)),d.appendChild(s),d.appendChild(c),d};MG.createRangeInputWithDynamicMinMax=function(e,t,n,i){i=i??t;let o=document.createElement("input");o.setAttribute("data-bind",`value: ${i}`),o.type="number";let r=document.createElement("input");r.type="range",r.step=n??"any",r.setAttribute("data-bind",`valueUpdate: "input", value: ${t}, attr: { min: ${t}Min, max: ${t}Max }`);let s=document.createElement("div");s.appendChild(r);let a=document.createElement("div");return a.className="cesium-cesiumInspector-slider",a.appendChild(document.createTextNode(e)),a.appendChild(o),a.appendChild(s),a};MG.createButton=function(e,t,n){let i=document.createElement("button");i.type="button",i.textContent=e,i.className="cesium-cesiumInspector-pickButton";let o=`click: ${t}`;return l(n)&&(o+=`, css: {"cesium-cesiumInspector-pickButtonHighlight" : ${n}}`),i.setAttribute("data-bind",o),i};var eu=MG;var Ctr=x(T(),1);function dFe(e,t){this._command=e,t=t??B.EMPTY_OBJECT,this.toggled=t.toggled??!1,this.tooltip=t.tooltip??"",Ge.track(this,["toggled","tooltip"])}Object.defineProperties(dFe.prototype,{command:{get:function(){return this._command}}});var lT=dFe;var Wtr=x(T(),1);function GMt(e,t){t=t??!0;let n=new Se,i=new Se;function o(){let r={args:arguments,cancel:!1},s;return n.raiseEvent(r),r.cancel||(s=e.apply(null,arguments),i.raiseEvent(s)),s}return o.canExecute=t,Ge.track(o,["canExecute"]),Object.defineProperties(o,{beforeExecute:{value:n},afterExecute:{value:i}}),o}var In=GMt;var Itr=x(T(),1);function AMt(e,t,n,i,o){return n.call(i,e[t]),Ge.getObservable(e,t).subscribe(n,i,o)}var bc=AMt;var wtr=x(T(),1);var eV="http://www.w3.org/2000/svg",hFe="http://www.w3.org/1999/xlink",DH,oU=U.fromCssColorString("rgba(247,250,255,0.384)"),OH=U.fromCssColorString("rgba(143,191,255,0.216)"),ese=U.fromCssColorString("rgba(153,197,255,0.098)"),BH=U.fromCssColorString("rgba(255,255,255,0.086)"),EMt=U.fromCssColorString("rgba(255,255,255,0.267)"),LMt=U.fromCssColorString("rgba(255,255,255,0)"),uFe=U.fromCssColorString("rgba(66,67,68,0.3)"),mFe=U.fromCssColorString("rgba(0,0,0,0.5)");function dT(e){return U.fromCssColorString(window.getComputedStyle(e).getPropertyValue("color"))}var rU={animation_pathReset:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.316,5.318,9.833,13.682,9.833,5.5,5.5,5.5,5.5,25.5,9.833,25.5,9.833,17.318,24.316,25.682z"},animation_pathPause:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M13,5.5,7.5,5.5,7.5,25.5,13,25.5zM24.5,5.5,19,5.5,19,25.5,24.5,25.5z"},animation_pathPlay:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathPlayReverse:{tagName:"path",transform:"translate(16,16) scale(-0.85,0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathLoop:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.249,15.499c-0.009,4.832-3.918,8.741-8.75,8.75c-2.515,0-4.768-1.064-6.365-2.763l2.068-1.442l-7.901-3.703l0.744,8.694l2.193-1.529c2.244,2.594,5.562,4.242,9.26,4.242c6.767,0,12.249-5.482,12.249-12.249H24.249zM15.499,6.75c2.516,0,4.769,1.065,6.367,2.764l-2.068,1.443l7.901,3.701l-0.746-8.693l-2.192,1.529c-2.245-2.594-5.562-4.245-9.262-4.245C8.734,3.25,3.25,8.734,3.249,15.499H6.75C6.758,10.668,10.668,6.758,15.499,6.75z"},animation_pathClock:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-15.5)",d:"M15.5,2.374C8.251,2.375,2.376,8.251,2.374,15.5C2.376,22.748,8.251,28.623,15.5,28.627c7.249-0.004,13.124-5.879,13.125-13.127C28.624,8.251,22.749,2.375,15.5,2.374zM15.5,25.623C9.909,25.615,5.385,21.09,5.375,15.5C5.385,9.909,9.909,5.384,15.5,5.374c5.59,0.01,10.115,4.535,10.124,10.125C25.615,21.09,21.091,25.615,15.5,25.623zM8.625,15.5c-0.001-0.552-0.448-0.999-1.001-1c-0.553,0-1,0.448-1,1c0,0.553,0.449,1,1,1C8.176,16.5,8.624,16.053,8.625,15.5zM8.179,18.572c-0.478,0.277-0.642,0.889-0.365,1.367c0.275,0.479,0.889,0.641,1.365,0.365c0.479-0.275,0.643-0.887,0.367-1.367C9.27,18.461,8.658,18.297,8.179,18.572zM9.18,10.696c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,11.584,9.657,10.973,9.18,10.696zM22.822,12.428c0.478-0.275,0.643-0.888,0.366-1.366c-0.275-0.478-0.89-0.642-1.366-0.366c-0.479,0.278-0.642,0.89-0.366,1.367C21.732,12.54,22.344,12.705,22.822,12.428zM12.062,21.455c-0.478-0.275-1.089-0.111-1.366,0.367c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.277,1.091,0.111,1.365-0.365C12.704,22.344,12.54,21.732,12.062,21.455zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM22.823,18.572c-0.48-0.275-1.092-0.111-1.367,0.365c-0.275,0.479-0.112,1.092,0.367,1.367c0.477,0.275,1.089,0.113,1.365-0.365C23.464,19.461,23.3,18.848,22.823,18.572zM19.938,7.813c-0.477-0.276-1.091-0.111-1.365,0.366c-0.275,0.48-0.111,1.091,0.366,1.367s1.089,0.112,1.366-0.366C20.581,8.702,20.418,8.089,19.938,7.813zM23.378,14.5c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1c0.551,0,1-0.447,1-1C24.378,14.949,23.929,14.5,23.378,14.5zM15.501,6.624c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.889-0.365,1.365c0.275,0.479,0.889,0.643,1.365,0.367l3.305-1.676C15.39,16.99,15.444,17,15.501,17c0.828,0,1.5-0.671,1.5-1.5l-0.5-7.876C16.501,7.072,16.053,6.624,15.501,6.624zM15.501,22.377c-0.552,0-1,0.447-1,1s0.448,1,1,1s1-0.447,1-1S16.053,22.377,15.501,22.377zM18.939,21.455c-0.479,0.277-0.643,0.889-0.366,1.367c0.275,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.889,0.366-1.365C20.028,21.344,19.417,21.18,18.939,21.455z"},animation_pathWingButton:{tagName:"path",d:"m 4.5,0.5 c -2.216,0 -4,1.784 -4,4 l 0,24 c 0,2.216 1.784,4 4,4 l 13.71875,0 C 22.478584,27.272785 27.273681,22.511272 32.5,18.25 l 0,-13.75 c 0,-2.216 -1.784,-4 -4,-4 l -24,0 z"},animation_pathPointer:{tagName:"path",d:"M-15,-65,-15,-55,15,-55,15,-65,0,-95z"},animation_pathSwooshFX:{tagName:"path",d:"m 85,0 c 0,16.617 -4.813944,35.356 -13.131081,48.4508 h 6.099803 c 8.317138,-13.0948 13.13322,-28.5955 13.13322,-45.2124 0,-46.94483 -38.402714,-85.00262 -85.7743869,-85.00262 -1.0218522,0 -2.0373001,0.0241 -3.0506131,0.0589 45.958443,1.59437 82.723058,35.77285 82.723058,81.70532 z"}};function ep(e){let t=document.createElementNS(eV,e.tagName);for(let n in e)if(e.hasOwnProperty(n)&&n!=="tagName")if(n==="children"){let i=e.children.length;for(let o=0;o<i;++o)t.appendChild(ep(e.children[o]))}else n.indexOf("xlink:")===0?t.setAttributeNS(hFe,n.substring(6),e[n]):n==="textContent"?t.textContent=e[n]:t.setAttribute(n,e[n]);return t}function tse(e,t,n){let i=document.createElementNS(eV,"text");i.setAttribute("x",e),i.setAttribute("y",t),i.setAttribute("class","cesium-animation-svgText");let o=document.createElementNS(eV,"tspan");return o.textContent=n,i.appendChild(o),i}function WMt(e,t,n){e.setAttribute("transform",`translate(100,100) rotate(${n})`),t.setAttribute("transform",`rotate(${n})`)}var zH=new U;function Ys(e,t){let n=t.alpha,i=1-n;return zH.red=e.red*i+t.red*n,zH.green=e.green*i+t.green*n,zH.blue=e.blue*i+t.blue*n,zH.toCssColorString()}function nse(e,t,n){let i=rU[n],o={tagName:"g",class:"cesium-animation-rectButton",transform:`translate(${e},${t})`,children:[{tagName:"rect",class:"cesium-animation-buttonGlow",width:32,height:32,rx:2,ry:2},{tagName:"rect",class:"cesium-animation-buttonMain",width:32,height:32,rx:4,ry:4},{class:"cesium-animation-buttonPath",id:n,tagName:i.tagName,transform:i.transform,d:i.d},{tagName:"title",textContent:""}]};return ep(o)}function vMt(e,t,n){let i=rU[n],o=rU.animation_pathWingButton,r={tagName:"g",class:"cesium-animation-rectButton",transform:`translate(${e},${t})`,children:[{class:"cesium-animation-buttonGlow",id:"animation_pathWingButton",tagName:o.tagName,d:o.d},{class:"cesium-animation-buttonMain",id:"animation_pathWingButton",tagName:o.tagName,d:o.d},{class:"cesium-animation-buttonPath",id:n,tagName:i.tagName,transform:i.transform,d:i.d},{tagName:"title",textContent:""}]};return ep(r)}function FMt(e,t){let n=e._viewModel,i=n.shuttleRingDragging;if(!(i&&DH!==e))if(t.type==="mousedown"||i&&t.type==="mousemove"||t.type==="touchstart"&&t.touches.length===1||i&&t.type==="touchmove"&&t.touches.length===1){let o=e._centerX,r=e._centerY,a=e._svgNode.getBoundingClientRect(),c,d;if(t.type==="touchstart"||t.type==="touchmove"?(c=t.touches[0].clientX,d=t.touches[0].clientY):(c=t.clientX,d=t.clientY),!i&&(c>a.right||c<a.left||d<a.top||d>a.bottom))return;let u=e._shuttleRingPointer.getBoundingClientRect(),m=c-o-a.left,p=d-r-a.top,b=Math.atan2(p,m)*180/Math.PI+90;b>180&&(b-=360);let f=n.shuttleRingAngle;i||c<u.right&&c>u.left&&d>u.top&&d<u.bottom?(DH=e,n.shuttleRingDragging=!0,n.shuttleRingAngle=b):b<f?n.slower():b>f&&n.faster(),t.preventDefault()}else e===DH&&(DH=void 0),n.shuttleRingDragging=!1}function zg(e,t){this._viewModel=t,this.svgElement=e,this._enabled=void 0,this._toggled=void 0;let n=this;this._clickFunction=function(){let i=n._viewModel.command;i.canExecute&&i()},e.addEventListener("click",this._clickFunction,!0),this._subscriptions=[bc(t,"toggled",this.setToggled,this),bc(t,"tooltip",this.setTooltip,this),bc(t.command,"canExecute",this.setEnabled,this)]}zg.prototype.destroy=function(){this.svgElement.removeEventListener("click",this._clickFunction,!0);let e=this._subscriptions;for(let t=0,n=e.length;t<n;t++)e[t].dispose();me(this)};zg.prototype.isDestroyed=function(){return!1};zg.prototype.setEnabled=function(e){if(this._enabled!==e){if(this._enabled=e,!e){this.svgElement.setAttribute("class","cesium-animation-buttonDisabled");return}if(this._toggled){this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled");return}this.svgElement.setAttribute("class","cesium-animation-rectButton")}};zg.prototype.setToggled=function(e){this._toggled!==e&&(this._toggled=e,this._enabled&&(e?this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled"):this.svgElement.setAttribute("class","cesium-animation-rectButton")))};zg.prototype.setTooltip=function(e){this.svgElement.getElementsByTagName("title")[0].textContent=e};function kG(e,t){e=wn(e),this._viewModel=t,this._container=e,this._centerX=0,this._centerY=0,this._defsElement=void 0,this._svgNode=void 0,this._topG=void 0,this._lastHeight=void 0,this._lastWidth=void 0;let n=e.ownerDocument,i=document.createElement("style");i.textContent=".cesium-animation-rectButton .cesium-animation-buttonGlow { filter: url(#animation_blurred); }.cesium-animation-rectButton .cesium-animation-buttonMain { fill: url(#animation_buttonNormal); }.cesium-animation-buttonToggled .cesium-animation-buttonMain { fill: url(#animation_buttonToggled); }.cesium-animation-rectButton:hover .cesium-animation-buttonMain { fill: url(#animation_buttonHovered); }.cesium-animation-buttonDisabled .cesium-animation-buttonMain { fill: url(#animation_buttonDisabled); }.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshGradient); }.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshHovered); }.cesium-animation-shuttleRingPointer { fill: url(#animation_shuttleRingPointerGradient); }.cesium-animation-shuttleRingPausePointer { fill: url(#animation_shuttleRingPointerPaused); }.cesium-animation-knobOuter { fill: url(#animation_knobOuter); }.cesium-animation-knobInner { fill: url(#animation_knobInner); }",n.head.insertBefore(i,n.head.childNodes[0]);let o=document.createElement("div");o.className="cesium-animation-theme",o.innerHTML='<div class="cesium-animation-themeNormal"></div><div class="cesium-animation-themeHover"></div><div class="cesium-animation-themeSelect"></div><div class="cesium-animation-themeDisabled"></div><div class="cesium-animation-themeKnob"></div><div class="cesium-animation-themePointer"></div><div class="cesium-animation-themeSwoosh"></div><div class="cesium-animation-themeSwooshHover"></div>',this._theme=o,this._themeNormal=o.childNodes[0],this._themeHover=o.childNodes[1],this._themeSelect=o.childNodes[2],this._themeDisabled=o.childNodes[3],this._themeKnob=o.childNodes[4],this._themePointer=o.childNodes[5],this._themeSwoosh=o.childNodes[6],this._themeSwooshHover=o.childNodes[7];let r=document.createElementNS(eV,"svg:svg");this._svgNode=r,r.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink",hFe);let s=document.createElementNS(eV,"g");this._topG=s,this._realtimeSVG=new zg(vMt(3,4,"animation_pathClock"),t.playRealtimeViewModel),this._playReverseSVG=new zg(nse(44,99,"animation_pathPlayReverse"),t.playReverseViewModel),this._playForwardSVG=new zg(nse(124,99,"animation_pathPlay"),t.playForwardViewModel),this._pauseSVG=new zg(nse(84,99,"animation_pathPause"),t.pauseViewModel);let a=document.createElementNS(eV,"g");a.appendChild(this._realtimeSVG.svgElement),a.appendChild(this._playReverseSVG.svgElement),a.appendChild(this._playForwardSVG.svgElement),a.appendChild(this._pauseSVG.svgElement);let c=ep({tagName:"circle",class:"cesium-animation-shuttleRingBack",cx:100,cy:100,r:99});this._shuttleRingBackPanel=c;let d=rU.animation_pathSwooshFX,u=rU.animation_pathPointer,m=ep({tagName:"g",class:"cesium-animation-shuttleRingSwoosh",children:[{tagName:d.tagName,transform:"translate(100,97) scale(-1,1)",id:"animation_pathSwooshFX",d:d.d},{tagName:d.tagName,transform:"translate(100,97)",id:"animation_pathSwooshFX",d:d.d},{tagName:"line",x1:100,y1:8,x2:100,y2:22}]});this._shuttleRingSwooshG=m,this._shuttleRingPointer=ep({class:"cesium-animation-shuttleRingPointer",id:"animation_pathPointer",tagName:u.tagName,d:u.d});let p=ep({tagName:"g",transform:"translate(100,100)"});this._knobOuter=ep({tagName:"circle",class:"cesium-animation-knobOuter",cx:0,cy:0,r:71});let b=61,f=ep({tagName:"circle",class:"cesium-animation-knobInner",cx:0,cy:0,r:b});this._knobDate=tse(0,-24,""),this._knobTime=tse(0,-7,""),this._knobStatus=tse(0,-41,"");let y=ep({tagName:"circle",class:"cesium-animation-blank",cx:0,cy:0,r:b}),_=document.createElementNS(eV,"g");_.setAttribute("class","cesium-animation-shuttleRingG"),e.appendChild(o),s.appendChild(_),s.appendChild(p),s.appendChild(a),_.appendChild(c),_.appendChild(m),_.appendChild(this._shuttleRingPointer),p.appendChild(this._knobOuter),p.appendChild(f),p.appendChild(this._knobDate),p.appendChild(this._knobTime),p.appendChild(this._knobStatus),p.appendChild(y),r.appendChild(s),e.appendChild(r);let S=this;function Z(v){FMt(S,v)}this._mouseCallback=Z,c.addEventListener("mousedown",Z,!0),c.addEventListener("touchstart",Z,!0),m.addEventListener("mousedown",Z,!0),m.addEventListener("touchstart",Z,!0),n.addEventListener("mousemove",Z,!0),n.addEventListener("touchmove",Z,!0),n.addEventListener("mouseup",Z,!0),n.addEventListener("touchend",Z,!0),n.addEventListener("touchcancel",Z,!0),this._shuttleRingPointer.addEventListener("mousedown",Z,!0),this._shuttleRingPointer.addEventListener("touchstart",Z,!0),this._knobOuter.addEventListener("mousedown",Z,!0),this._knobOuter.addEventListener("touchstart",Z,!0);let V=this._knobTime.childNodes[0],C=this._knobDate.childNodes[0],G=this._knobStatus.childNodes[0],E;this._subscriptions=[bc(t.pauseViewModel,"toggled",function(v){E!==v&&(E=v,E?S._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPausePointer"):S._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPointer"))}),bc(t,"shuttleRingAngle",function(v){WMt(S._shuttleRingPointer,S._knobOuter,v)}),bc(t,"dateLabel",function(v){C.textContent!==v&&(C.textContent=v)}),bc(t,"timeLabel",function(v){V.textContent!==v&&(V.textContent=v)}),bc(t,"multiplierLabel",function(v){G.textContent!==v&&(G.textContent=v)})],this.applyThemeChanges(),this.resize()}Object.defineProperties(kG.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});kG.prototype.isDestroyed=function(){return!1};kG.prototype.destroy=function(){l(this._observer)&&(this._observer.disconnect(),this._observer=void 0);let e=this._container.ownerDocument,t=this._mouseCallback;this._shuttleRingBackPanel.removeEventListener("mousedown",t,!0),this._shuttleRingBackPanel.removeEventListener("touchstart",t,!0),this._shuttleRingSwooshG.removeEventListener("mousedown",t,!0),this._shuttleRingSwooshG.removeEventListener("touchstart",t,!0),e.removeEventListener("mousemove",t,!0),e.removeEventListener("touchmove",t,!0),e.removeEventListener("mouseup",t,!0),e.removeEventListener("touchend",t,!0),e.removeEventListener("touchcancel",t,!0),this._shuttleRingPointer.removeEventListener("mousedown",t,!0),this._shuttleRingPointer.removeEventListener("touchstart",t,!0),this._knobOuter.removeEventListener("mousedown",t,!0),this._knobOuter.removeEventListener("touchstart",t,!0),this._container.removeChild(this._svgNode),this._container.removeChild(this._theme),this._realtimeSVG.destroy(),this._playReverseSVG.destroy(),this._playForwardSVG.destroy(),this._pauseSVG.destroy();let n=this._subscriptions;for(let i=0,o=n.length;i<o;i++)n[i].dispose();return me(this)};kG.prototype.resize=function(){let e=this._container.clientWidth,t=this._container.clientHeight;if(e===this._lastWidth&&t===this._lastHeight)return;let n=this._svgNode,i=200,o=132,r=e,s=t;e===0&&t===0?(r=i,s=o):e===0?(s=t,r=i*(t/o)):t===0&&(r=e,s=o*(e/i));let a=r/i,c=s/o;n.style.cssText=`width: ${r}px; height: ${s}px; position: absolute; bottom: 0; left: 0; overflow: hidden;`,n.setAttribute("width",r),n.setAttribute("height",s),n.setAttribute("viewBox",`0 0 ${r} ${s}`),this._topG.setAttribute("transform",`scale(${a},${c})`),this._centerX=Math.max(1,100*a),this._centerY=Math.max(1,100*c),this._lastHeight=e,this._lastWidth=t};kG.prototype.applyThemeChanges=function(){let e=this._container.ownerDocument;if(!e.body.contains(this._container)){if(l(this._observer))return;let u=this;u._observer=new MutationObserver(function(){e.body.contains(u._container)&&(u._observer.disconnect(),u._observer=void 0,u.applyThemeChanges())}),u._observer.observe(e,{childList:!0,subtree:!0});return}let t=dT(this._themeNormal),n=dT(this._themeHover),i=dT(this._themeSelect),o=dT(this._themeDisabled),r=dT(this._themeKnob),s=dT(this._themePointer),a=dT(this._themeSwoosh),c=dT(this._themeSwooshHover),d=ep({tagName:"defs",children:[{id:"animation_buttonNormal",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ys(t,oU)},{tagName:"stop",offset:"12%","stop-color":Ys(t,OH)},{tagName:"stop",offset:"46%","stop-color":Ys(t,ese)},{tagName:"stop",offset:"81%","stop-color":Ys(t,BH)}]},{id:"animation_buttonHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ys(n,oU)},{tagName:"stop",offset:"12%","stop-color":Ys(n,OH)},{tagName:"stop",offset:"46%","stop-color":Ys(n,ese)},{tagName:"stop",offset:"81%","stop-color":Ys(n,BH)}]},{id:"animation_buttonToggled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ys(i,oU)},{tagName:"stop",offset:"12%","stop-color":Ys(i,OH)},{tagName:"stop",offset:"46%","stop-color":Ys(i,ese)},{tagName:"stop",offset:"81%","stop-color":Ys(i,BH)}]},{id:"animation_buttonDisabled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ys(o,EMt)},{tagName:"stop",offset:"75%","stop-color":Ys(o,LMt)}]},{id:"animation_blurred",tagName:"filter",width:"200%",height:"200%",x:"-50%",y:"-50%",children:[{tagName:"feGaussianBlur",stdDeviation:4,in:"SourceGraphic"}]},{id:"animation_shuttleRingSwooshGradient",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":a.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":a.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":a.toCssColorString()}]},{id:"animation_shuttleRingSwooshHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":c.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":c.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":c.toCssColorString()}]},{id:"animation_shuttleRingPointerGradient",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":s.toCssColorString()},{tagName:"stop",offset:"40%","stop-color":s.toCssColorString()},{tagName:"stop",offset:"60%","stop-color":Ys(s,mFe)},{tagName:"stop",offset:"100%","stop-color":Ys(s,mFe)}]},{id:"animation_shuttleRingPointerPaused",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":"#CCC"},{tagName:"stop",offset:"40%","stop-color":"#CCC"},{tagName:"stop",offset:"60%","stop-color":"#555"},{tagName:"stop",offset:"100%","stop-color":"#555"}]},{id:"animation_knobOuter",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":Ys(r,oU)},{tagName:"stop",offset:"60%","stop-color":Ys(r,uFe)},{tagName:"stop",offset:"85%","stop-color":Ys(r,OH)}]},{id:"animation_knobInner",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":Ys(r,uFe)},{tagName:"stop",offset:"60%","stop-color":Ys(r,oU)},{tagName:"stop",offset:"85%","stop-color":Ys(r,BH)}]}]});l(this._defsElement)?this._svgNode.replaceChild(d,this._defsElement):this._svgNode.appendChild(d),this._defsElement=d};var sU=kG;var Htr=x(T(),1);var IMt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],uT=15,UG=105;function fFe(e,t){return e-t}function ise(e,t){let n=_o(t,e,fFe);return n<0?~n:n}function PMt(e,t){if(Math.abs(e)<=uT)return e/uT;let n=uT,i=UG,o,r=0,s;return e>0?(o=Math.log(t[t.length-1]),s=(o-r)/(i-n),Math.exp(r+s*(e-n))):(o=Math.log(-t[0]),s=(o-r)/(i-n),-Math.exp(r+s*(Math.abs(e)-n)))}function XMt(e,t,n){if(n.clockStep===Xo.SYSTEM_CLOCK)return uT;if(Math.abs(e)<=1)return e*uT;let i=t[t.length-1];e>i?e=i:e<-i&&(e=-i);let o=uT,r=UG,s,a=0,c;return e>0?(s=Math.log(i),c=(s-a)/(r-o),(Math.log(e)-a)/c+o):(s=Math.log(-t[0]),c=(s-a)/(r-o),-((Math.log(Math.abs(e))-a)/c+o))}function ph(e){let t=this;this._clockViewModel=e,this._allShuttleRingTicks=[],this._dateFormatter=ph.defaultDateFormatter,this._timeFormatter=ph.defaultTimeFormatter,this.shuttleRingDragging=!1,this.snapToTicks=!1,Ge.track(this,["_allShuttleRingTicks","_dateFormatter","_timeFormatter","shuttleRingDragging","snapToTicks"]),this._sortedFilteredPositiveTicks=[],this.setShuttleRingTicks(ph.defaultTicks),this.timeLabel=void 0,Ge.defineProperty(this,"timeLabel",function(){return t._timeFormatter(t._clockViewModel.currentTime,t)}),this.dateLabel=void 0,Ge.defineProperty(this,"dateLabel",function(){return t._dateFormatter(t._clockViewModel.currentTime,t)}),this.multiplierLabel=void 0,Ge.defineProperty(this,"multiplierLabel",function(){let s=t._clockViewModel;if(s.clockStep===Xo.SYSTEM_CLOCK)return"Today";let a=s.multiplier;return a%1===0?`${a.toFixed(0)}x`:`${a.toFixed(3).replace(/0{0,3}$/,"")}x`}),this.shuttleRingAngle=void 0,Ge.defineProperty(this,"shuttleRingAngle",{get:function(){return XMt(e.multiplier,t._allShuttleRingTicks,e)},set:function(s){s=Math.max(Math.min(s,UG),-UG);let a=t._allShuttleRingTicks,c=t._clockViewModel;if(c.clockStep=Xo.SYSTEM_CLOCK_MULTIPLIER,Math.abs(s)===UG){c.multiplier=s>0?a[a.length-1]:a[0];return}let d=PMt(s,a);if(t.snapToTicks)d=a[ise(d,a)];else if(d!==0){let u=Math.abs(d);if(u>100){let m=u.toFixed(0).length-2,p=Math.pow(10,m);d=Math.round(d/p)*p|0}else u>uT?d=Math.round(d):u>1?d=+d.toFixed(1):u>0&&(d=+d.toFixed(2))}c.multiplier=d}}),this._canAnimate=void 0,Ge.defineProperty(this,"_canAnimate",function(){let s=t._clockViewModel,a=s.clockRange;if(t.shuttleRingDragging||a===as.UNBOUNDED)return!0;let c=s.multiplier,d=s.currentTime,u=s.startTime,m;if(a===as.LOOP_STOP)m=Q.greaterThan(d,u)||d.equals(u)&&c>0;else{let p=s.stopTime;m=Q.greaterThan(d,u)&&Q.lessThan(d,p)||d.equals(u)&&c>0||d.equals(p)&&c<0}return m||(s.shouldAnimate=!1),m}),this._isSystemTimeAvailable=void 0,Ge.defineProperty(this,"_isSystemTimeAvailable",function(){let s=t._clockViewModel;if(s.clockRange===as.UNBOUNDED)return!0;let c=s.systemTime;return Q.greaterThanOrEquals(c,s.startTime)&&Q.lessThanOrEquals(c,s.stopTime)}),this._isAnimating=void 0,Ge.defineProperty(this,"_isAnimating",function(){return t._clockViewModel.shouldAnimate&&(t._canAnimate||t.shuttleRingDragging)});let n=In(function(){let s=t._clockViewModel;s.shouldAnimate?s.shouldAnimate=!1:t._canAnimate&&(s.shouldAnimate=!0)});this._pauseViewModel=new lT(n,{toggled:Ge.computed(function(){return!t._isAnimating}),tooltip:"Pause"});let i=In(function(){let s=t._clockViewModel,a=s.multiplier;a>0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playReverseViewModel=new lT(i,{toggled:Ge.computed(function(){return t._isAnimating&&e.multiplier<0}),tooltip:"Play Reverse"});let o=In(function(){let s=t._clockViewModel,a=s.multiplier;a<0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playForwardViewModel=new lT(o,{toggled:Ge.computed(function(){return t._isAnimating&&e.multiplier>0&&e.clockStep!==Xo.SYSTEM_CLOCK}),tooltip:"Play Forward"});let r=In(function(){t._clockViewModel.clockStep=Xo.SYSTEM_CLOCK},Ge.getObservable(this,"_isSystemTimeAvailable"));this._playRealtimeViewModel=new lT(r,{toggled:Ge.computed(function(){return e.clockStep===Xo.SYSTEM_CLOCK}),tooltip:Ge.computed(function(){return t._isSystemTimeAvailable?"Today (real-time)":"Current time not in range"})}),this._slower=In(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,c=s.multiplier,d=ise(c,a)-1;d>=0&&(s.multiplier=a[d])}),this._faster=In(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,c=s.multiplier,d=ise(c,a)+1;d<a.length&&(s.multiplier=a[d])})}ph.defaultDateFormatter=function(e,t){let n=Q.toGregorianDate(e);return`${IMt[n.month-1]} ${n.day} ${n.year}`};ph.defaultTicks=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800];ph.defaultTimeFormatter=function(e,t){let n=Q.toGregorianDate(e),i=Math.round(n.millisecond);return Math.abs(t._clockViewModel.multiplier)<1?`${n.hour.toString().padStart(2,"0")}:${n.minute.toString().padStart(2,"0")}:${n.second.toString().padStart(2,"0")}.${i.toString().padStart(3,"0")}`:`${n.hour.toString().padStart(2,"0")}:${n.minute.toString().padStart(2,"0")}:${n.second.toString().padStart(2,"0")} UTC`};ph.prototype.getShuttleRingTicks=function(){return this._sortedFilteredPositiveTicks.slice(0)};ph.prototype.setShuttleRingTicks=function(e){let t,n,i,o={},r=this._sortedFilteredPositiveTicks;for(r.length=0,t=0,n=e.length;t<n;++t)i=e[t],o.hasOwnProperty(i)||(o[i]=!0,r.push(i));r.sort(fFe);let s=[];for(n=r.length,t=n-1;t>=0;--t)i=r[t],i!==0&&s.push(-i);jn(s,r),this._allShuttleRingTicks=s};Object.defineProperties(ph.prototype,{slower:{get:function(){return this._slower}},faster:{get:function(){return this._faster}},clockViewModel:{get:function(){return this._clockViewModel}},pauseViewModel:{get:function(){return this._pauseViewModel}},playReverseViewModel:{get:function(){return this._playReverseViewModel}},playForwardViewModel:{get:function(){return this._playForwardViewModel}},playRealtimeViewModel:{get:function(){return this._playRealtimeViewModel}},dateFormatter:{get:function(){return this._dateFormatter},set:function(e){this._dateFormatter=e}},timeFormatter:{get:function(){return this._timeFormatter},set:function(e){this._timeFormatter=e}}});ph._maxShuttleRingAngle=UG;ph._realtimeShuttleRingAngle=uT;var aU=ph;var snr=x(T(),1);var $tr=x(T(),1);function pFe(e){e=e??B.EMPTY_OBJECT;let t=e.globe,n=e.imageryProviderViewModels??B.EMPTY_ARRAY,i=e.terrainProviderViewModels??B.EMPTY_ARRAY;this._globe=t,this.imageryProviderViewModels=n.slice(0),this.terrainProviderViewModels=i.slice(0),this.dropDownVisible=!1,Ge.track(this,["imageryProviderViewModels","terrainProviderViewModels","dropDownVisible"]);let o=Ge.getObservable(this,"imageryProviderViewModels"),r=Ge.pureComputed(function(){let m=o(),p={},b;for(b=0;b<m.length;b++){let _=m[b],S=_.category;l(p[S])?p[S].push(_):p[S]=[_]}let f=Object.keys(p),y=[];for(b=0;b<f.length;b++){let _=f[b];y.push({name:_,providers:p[_]})}return y});this._imageryProviders=r;let s=Ge.getObservable(this,"terrainProviderViewModels"),a=Ge.pureComputed(function(){let m=s(),p={},b;for(b=0;b<m.length;b++){let _=m[b],S=_.category;l(p[S])?p[S].push(_):p[S]=[_]}let f=Object.keys(p),y=[];for(b=0;b<f.length;b++){let _=f[b];y.push({name:_,providers:p[_]})}return y});this._terrainProviders=a,this.buttonTooltip=void 0,Ge.defineProperty(this,"buttonTooltip",function(){let m=this.selectedImagery,p=this.selectedTerrain,b=l(m)?m.name:void 0,f=l(p)?p.name:void 0;return l(b)&&l(f)?`${b} ${f}`:l(b)?b:f}),this.buttonImageUrl=void 0,Ge.defineProperty(this,"buttonImageUrl",function(){let m=this.selectedImagery;if(l(m))return m.iconUrl}),this.selectedImagery=void 0;let c=Ge.observable();this._currentImageryLayers=[],Ge.defineProperty(this,"selectedImagery",{get:function(){return c()},set:function(m){if(c()===m){this.dropDownVisible=!1;return}let p,b=this._currentImageryLayers,f=b.length,y=this._globe.imageryLayers,_=!1;for(p=0;p<f;p++){let S=y.length;for(let Z=0;Z<S;Z++){let V=y.get(Z);if(V===b[p]){y.remove(V),_=!0;break}}}if(l(m)){let S=m.creationCommand();if(Array.isArray(S)){let Z=S.length;for(this._currentImageryLayers=[],p=Z-1;p>=0;p--){let V=Ts.fromProviderAsync(S[p]);y.add(V,0),this._currentImageryLayers.push(V)}}else{this._currentImageryLayers=[];let Z=Ts.fromProviderAsync(S);if(Z.name=m.name,_)y.add(Z,0);else{let V=y.get(0);l(V)&&y.remove(V),y.add(Z,0)}this._currentImageryLayers.push(Z)}}c(m),this.dropDownVisible=!1}}),this.selectedTerrain=void 0;let d=Ge.observable();Ge.defineProperty(this,"selectedTerrain",{get:function(){return d()},set:function(m){if(d()===m){this.dropDownVisible=!1;return}let p;if(l(m)&&(p=m.creationCommand()),l(p)&&!l(p.then))this._globe.depthTestAgainstTerrain=!(p instanceof Cp),this._globe.terrainProvider=p;else if(l(p)){let b=!1,f=this._globe.terrainProviderChanged.addEventListener(()=>{b=!0,f()}),_=new H9(p).readyEvent.addEventListener(S=>{b||(this._globe.depthTestAgainstTerrain=!(S instanceof Cp),this._globe.terrainProvider=S,_())})}d(m),this.dropDownVisible=!1}});let u=this;this._toggleDropDown=In(function(){u.dropDownVisible=!u.dropDownVisible}),this.selectedImagery=e.selectedImageryProviderViewModel??n[0],this.selectedTerrain=e.selectedTerrainProviderViewModel}Object.defineProperties(pFe.prototype,{toggleDropDown:{get:function(){return this._toggleDropDown}},globe:{get:function(){return this._globe}}});var cU=pFe;function HH(e,t){e=wn(e);let n=new cU(t),i=document.createElement("button");i.type="button",i.className="cesium-button cesium-toolbar-button",i.setAttribute("data-bind","attr: { title: buttonTooltip },click: toggleDropDown"),e.appendChild(i);let o=document.createElement("img");o.setAttribute("draggable","false"),o.className="cesium-baseLayerPicker-selected",o.setAttribute("data-bind","attr: { src: buttonImageUrl }, visible: !!buttonImageUrl"),i.appendChild(o);let r=document.createElement("div");r.className="cesium-baseLayerPicker-dropDown",r.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-dropDown-visible" : dropDownVisible }'),e.appendChild(r);let s=document.createElement("div");s.className="cesium-baseLayerPicker-sectionTitle",s.setAttribute("data-bind","visible: imageryProviderViewModels.length > 0"),s.innerHTML="Imagery",r.appendChild(s);let a=document.createElement("div");a.className="cesium-baseLayerPicker-section",a.setAttribute("data-bind","foreach: _imageryProviders"),r.appendChild(a);let c=document.createElement("div");c.className="cesium-baseLayerPicker-category",a.appendChild(c);let d=document.createElement("div");d.className="cesium-baseLayerPicker-categoryTitle",d.setAttribute("data-bind","text: name"),c.appendChild(d);let u=document.createElement("div");u.className="cesium-baseLayerPicker-choices",u.setAttribute("data-bind","foreach: providers"),c.appendChild(u);let m=document.createElement("div");m.className="cesium-baseLayerPicker-item",m.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedImagery },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedImagery = $data; }'),u.appendChild(m);let p=document.createElement("img");p.className="cesium-baseLayerPicker-itemIcon",p.setAttribute("data-bind","attr: { src: iconUrl }"),p.setAttribute("draggable","false"),m.appendChild(p);let b=document.createElement("div");b.className="cesium-baseLayerPicker-itemLabel",b.setAttribute("data-bind","text: name"),m.appendChild(b);let f=document.createElement("div");f.className="cesium-baseLayerPicker-sectionTitle",f.setAttribute("data-bind","visible: terrainProviderViewModels.length > 0"),f.innerHTML="Terrain",r.appendChild(f);let y=document.createElement("div");y.className="cesium-baseLayerPicker-section",y.setAttribute("data-bind","foreach: _terrainProviders"),r.appendChild(y);let _=document.createElement("div");_.className="cesium-baseLayerPicker-category",y.appendChild(_);let S=document.createElement("div");S.className="cesium-baseLayerPicker-categoryTitle",S.setAttribute("data-bind","text: name"),_.appendChild(S);let Z=document.createElement("div");Z.className="cesium-baseLayerPicker-choices",Z.setAttribute("data-bind","foreach: providers"),_.appendChild(Z);let V=document.createElement("div");V.className="cesium-baseLayerPicker-item",V.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedTerrain },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedTerrain = $data; }'),Z.appendChild(V);let C=document.createElement("img");C.className="cesium-baseLayerPicker-itemIcon",C.setAttribute("data-bind","attr: { src: iconUrl }"),C.setAttribute("draggable","false"),V.appendChild(C);let G=document.createElement("div");G.className="cesium-baseLayerPicker-itemLabel",G.setAttribute("data-bind","text: name"),V.appendChild(G),Ge.applyBindings(n,i),Ge.applyBindings(n,r),this._viewModel=n,this._container=e,this._element=i,this._dropPanel=r,this._closeDropDown=function(E){i.contains(E.target)||r.contains(E.target)||(n.dropDownVisible=!1)},hn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(HH.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});HH.prototype.isDestroyed=function(){return!1};HH.prototype.destroy=function(){return hn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ge.cleanNode(this._element),Ge.cleanNode(this._dropPanel),this._container.removeChild(this._element),this._container.removeChild(this._dropPanel),me(this)};var lU=HH;var mnr=x(T(),1);function bFe(e){let t=e.creationFunction;l(t.canExecute)||(t=In(t)),this._creationCommand=t,this.name=e.name,this.tooltip=e.tooltip,this.iconUrl=e.iconUrl,this._category=e.category??"",Ge.track(this,["name","tooltip","iconUrl"])}Object.defineProperties(bFe.prototype,{creationCommand:{get:function(){return this._creationCommand}},category:{get:function(){return this._category}}});var sr=bFe;var bnr=x(T(),1);function NMt(){let e=[],t=devicePixelRatio>=2;return e.push(new sr({name:"Bing Maps Aerial",iconUrl:qt("Widgets/Images/ImageryProviders/bingAerial.png"),tooltip:"Bing Maps aerial imagery, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return jb({style:Jb.AERIAL})}})),e.push(new sr({name:"Bing Maps Aerial with Labels",iconUrl:qt("Widgets/Images/ImageryProviders/bingAerialLabels.png"),tooltip:"Bing Maps aerial imagery with labels, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return jb({style:Jb.AERIAL_WITH_LABELS})}})),e.push(new sr({name:"Bing Maps Roads",iconUrl:qt("Widgets/Images/ImageryProviders/bingRoads.png"),tooltip:"Bing Maps standard road maps, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return jb({style:Jb.ROAD})}})),e.push(new sr({name:"ArcGIS World Imagery",iconUrl:qt("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png"),tooltip:`ArcGIS World Imagery provides one meter or better satellite and aerial imagery in many parts of the world and lower resolution satellite imagery worldwide. The map includes 15m TerraColor imagery at small and mid-scales (~1:591M down to ~1:288k) for the world. The map features Maxar imagery at 0.3m resolution for select metropolitan areas around the world, 0.5m resolution across the United States and parts of Western Europe, and 1m resolution imagery across the rest of the world. In addition to commercial sources, the World Imagery map features high-resolution aerial photography contributed by the GIS User Community. This imagery ranges from 0.3m to 0.03m resolution (down to ~1:280 nin select communities). For more information on this map, including the terms of use, visit us online at https://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9`,category:"Other",creationFunction:function(){return Hb.fromBasemapType(yf.SATELLITE,{enablePickFeatures:!1})}})),e.push(new sr({name:"ArcGIS World Hillshade",iconUrl:qt("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png"),tooltip:`ArcGIS World Hillshade map portrays elevation as an artistic hillshade. This map is designed to be used as a backdrop for topographical, soil, hydro, landcover or other outdoor recreational maps. The map was compiled from a variety of sources from several data providers. The basemap has global coverage down to a scale of ~1:72k. In select areas of the United States and Europe, coverage is available down to ~1:9k. For more information on this map, including the terms of use, visit us online at https://www.arcgis.com/home/item.html?id=1b243539f4514b6ba35e7d995890db1d`,category:"Other",creationFunction:function(){return Hb.fromBasemapType(yf.HILLSHADE,{enablePickFeatures:!1})}})),e.push(new sr({name:"Esri World Ocean",iconUrl:qt("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png"),tooltip:`ArcGIS World Ocean map is designed to be used as a base map by marine GIS professionals and as a reference map by anyone interested in ocean data. The base map features marine bathymetry. Land features include inland waters and roads overlaid on land cover and shaded relief imagery. The map was compiled from a variety of best available sources from several data providers, including General Bathymetric Chart of the Oceans GEBCO_08 Grid, National Oceanic and Atmospheric Administration (NOAA), and National Geographic, Garmin, HERE, Geonames.org, and Esri, and various other contributors. The base map currently provides coverage for the world down to a scale of ~1:577k, and coverage down to 1:72k in US coastal areas, and various other areas. Coverage down to ~ 1:9k is available limited areas based on regional hydrographic survey data. The base map was designed and developed by Esri. For more information on this map, including our terms of use, visit us online at https://www.arcgis.com/home/item.html?id=1e126e7520f9466c9ca28b8f28b5e500`,category:"Other",creationFunction:function(){return Hb.fromBasemapType(yf.OCEANS,{enablePickFeatures:!1})}})),e.push(new sr({name:"Open\xADStreet\xADMap",iconUrl:qt("Widgets/Images/ImageryProviders/openStreetMap.png"),tooltip:`OpenStreetMap (OSM) is a collaborative project to create a free editable map of the world. http://www.openstreetmap.org`,category:"Other",creationFunction:function(){return new Og({url:"https://tile.openstreetmap.org/"})}})),e.push(new sr({name:"Stadia x Stamen Watercolor",iconUrl:qt("Widgets/Images/ImageryProviders/stamenWatercolor.png"),tooltip:`Based on the original basemaps created for the Knight Foundation and reminiscent of hand drawn maps, the watercolor maps from Stamen Design apply raster effect area washes and organic edges over a paper texture to add warm pop to any map. https://docs.stadiamaps.com/map-styles/stamen-watercolor/`,category:"Other",creationFunction:function(){return new Og({url:"https://tiles.stadiamaps.com/tiles/stamen_watercolor/",fileExtension:"jpg",credit:`© <a href="https://stamen.com/" target="_blank">Stamen Design</a> © <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a> © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new sr({name:"Stadia x Stamen Toner",iconUrl:qt("Widgets/Images/ImageryProviders/stamenToner.png"),tooltip:`Based on the original basemaps created for the Knight Foundation and the most popular of the excellent styles from Stamen Design, these high-contrast B+W (black and white) maps are the perfect backdrop for your colorful and eye-catching overlays. https://docs.stadiamaps.com/map-styles/stamen-toner/`,category:"Other",creationFunction:function(){return new Og({url:"https://tiles.stadiamaps.com/tiles/stamen_toner/",retinaTiles:t,credit:`© <a href="https://stamen.com/" target="_blank">Stamen Design</a> © <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a> © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new sr({name:"Stadia Alidade Smooth",iconUrl:qt("Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png"),tooltip:`Stadia's custom Alidade Smooth style is designed for maps that use a lot of markers or overlays. It features a muted color scheme and fewer points of interest to allow your added data to shine. https://docs.stadiamaps.com/map-styles/alidade-smooth/`,category:"Other",creationFunction:function(){return new Og({url:"https://tiles.stadiamaps.com/tiles/alidade_smooth/",retinaTiles:t,credit:`© <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a> © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new sr({name:"Stadia Alidade Smooth Dark",iconUrl:qt("Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png"),tooltip:`Stadia Alidade Smooth Dark, like its lighter cousin, is also designed to stay out of the way. It just flips the dark mode switch on the color scheme. With the lights out, your data can now literally shine. https://docs.stadiamaps.com/map-styles/alidade-smooth-dark/`,category:"Other",creationFunction:function(){return new Og({url:"https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/",retinaTiles:t,credit:`© <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a> © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new sr({name:"Sentinel-2",iconUrl:qt("Widgets/Images/ImageryProviders/sentinel-2.png"),tooltip:"Sentinel-2 cloudless by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2016 and 2017).",category:"Cesium ion",creationFunction:function(){return ed.fromAssetId(3954)}})),e.push(new sr({name:"Blue Marble",iconUrl:qt("Widgets/Images/ImageryProviders/blueMarble.png"),tooltip:"Blue Marble Next Generation July, 2004 imagery from NASA.",category:"Cesium ion",creationFunction:function(){return ed.fromAssetId(3845)}})),e.push(new sr({name:"Earth at night",iconUrl:qt("Widgets/Images/ImageryProviders/earthAtNight.png"),tooltip:"The Earth at night, also known as The Black Marble, is a 500 meter resolution global composite imagery layer released by NASA.",category:"Cesium ion",creationFunction:function(){return ed.fromAssetId(3812)}})),e.push(new sr({name:"Natural Earth\xA0II",iconUrl:qt("Widgets/Images/ImageryProviders/naturalEarthII.png"),tooltip:`Natural Earth II, darkened for contrast. http://www.naturalearthdata.com/`,category:"Cesium ion",creationFunction:function(){return hx.fromUrl(qt("Assets/Textures/NaturalEarthII"))}})),e.push(new sr({name:"Google Maps Satellite",iconUrl:qt("Widgets/Images/ImageryProviders/googleSatellite.png"),tooltip:"Imagery from Google Maps",category:"Cesium ion",creationFunction:function(){return ed.fromAssetId(3830182)}})),e.push(new sr({name:"Google Maps Satellite with Labels",iconUrl:qt("Widgets/Images/ImageryProviders/googleSatelliteLabels.png"),tooltip:"Imagery with place labels from Google Maps",category:"Cesium ion",creationFunction:function(){return ed.fromAssetId(3830183)}})),e.push(new sr({name:"Google Maps Roadmap",iconUrl:qt("Widgets/Images/ImageryProviders/googleRoadmap.png"),tooltip:"Labeled roads and other features on a base landscape from Google Maps",category:"Cesium ion",creationFunction:function(){return ed.fromAssetId(3830184)}})),e.push(new sr({name:"Google Maps Contour",iconUrl:qt("Widgets/Images/ImageryProviders/googleContour.png"),tooltip:"Hillshade mapping, contour lines, natural features (roadmap features hidden) from Google Maps",category:"Cesium ion",creationFunction:function(){return ed.fromAssetId(3830186)}})),e.push(new sr({name:"Azure Maps Aerial",iconUrl:qt("Widgets/Images/ImageryProviders/azureAerial.png"),tooltip:"Imagery from Azure Maps",category:"Cesium ion",creationFunction:function(){return ed.fromAssetId(3891168)}})),e.push(new sr({name:"Azure Maps Roads",iconUrl:qt("Widgets/Images/ImageryProviders/azureRoads.png"),tooltip:"Labeled roads and other features on a base landscape from Azure Maps",category:"Cesium ion",creationFunction:function(){return ed.fromAssetId(3891169)}})),e}var dU=NMt;var Tnr=x(T(),1);function YMt(){let e=[];return e.push(new sr({name:"WGS84 Ellipsoid",iconUrl:qt("Widgets/Images/TerrainProviders/Ellipsoid.png"),tooltip:"WGS84 standard ellipsoid, also known as EPSG:4326",category:"Cesium ion",creationFunction:function(){return new Cp({ellipsoid:ie.WGS84})}})),e.push(new sr({name:"Cesium World Terrain",iconUrl:qt("Widgets/Images/TerrainProviders/CesiumWorldTerrain.png"),tooltip:"High-resolution global terrain tileset curated from several datasources and hosted by Cesium ion",category:"Cesium ion",creationFunction:function(){return R_({requestWaterMask:!0,requestVertexNormals:!0})}})),e}var uU=YMt;var Inr=x(T(),1);var Rnr=x(T(),1);function wMt(e){let t;if(l(e)){t="Command Statistics";let n=e.commandsInFrustums;for(let i in n)if(n.hasOwnProperty(i)){let o=parseInt(i,10),r;if(o===7)r="1, 2 and 3";else{let s=[];for(let a=2;a>=0;a--){let c=Math.pow(2,a);o>=c&&(s.push(a+1),o-=c)}r=s.reverse().join(" and ")}t+=`<br>    ${n[i]} in frustum ${r}`}t+=`<br>Total: ${e.totalCommands}`}return t}function ose(e,t,n){let i=Math.min(n,t);return i=Math.max(i,e),i}var MMt=new fn,kMt=new h;function mU(e,t){let n=this,i=e.canvas,o=new Hs(i);this._eventHandler=o,this._scene=e,this._canvas=i,this._primitive=void 0,this._tile=void 0,this._modelMatrixPrimitive=void 0,this._performanceDisplay=void 0,this._performanceContainer=t;let r=this._scene.globe;r.depthTestAgainstTerrain=!0,this.frustums=!1,this.frustumPlanes=!1,this.performance=!1,this.shaderCacheText="",this.primitiveBoundingSphere=!1,this.primitiveReferenceFrame=!1,this.filterPrimitive=!1,this.tileBoundingSphere=!1,this.filterTile=!1,this.wireframe=!1,this.depthFrustum=1,this._numberOfFrustums=1,this.suspendUpdates=!1,this.tileCoordinates=!1,this.frustumStatisticText=!1,this.tileText="",this.hasPickedPrimitive=!1,this.hasPickedTile=!1,this.pickPrimitiveActive=!1,this.pickTileActive=!1,this.dropDownVisible=!0,this.generalVisible=!0,this.primitivesVisible=!1,this.terrainVisible=!1,this.depthFrustumText="",Ge.track(this,["frustums","frustumPlanes","performance","shaderCacheText","primitiveBoundingSphere","primitiveReferenceFrame","filterPrimitive","tileBoundingSphere","filterTile","wireframe","depthFrustum","suspendUpdates","tileCoordinates","frustumStatisticText","tileText","hasPickedPrimitive","hasPickedTile","pickPrimitiveActive","pickTileActive","dropDownVisible","generalVisible","primitivesVisible","terrainVisible","depthFrustumText"]),this._toggleDropDown=In(function(){n.dropDownVisible=!n.dropDownVisible}),this._toggleGeneral=In(function(){n.generalVisible=!n.generalVisible}),this._togglePrimitives=In(function(){n.primitivesVisible=!n.primitivesVisible}),this._toggleTerrain=In(function(){n.terrainVisible=!n.terrainVisible}),this._frustumsSubscription=Ge.getObservable(this,"frustums").subscribe(function(d){n._scene.debugShowFrustums=d,n._scene.requestRender()}),this._frustumPlanesSubscription=Ge.getObservable(this,"frustumPlanes").subscribe(function(d){n._scene.debugShowFrustumPlanes=d,n._scene.requestRender()}),this._performanceSubscription=Ge.getObservable(this,"performance").subscribe(function(d){d?n._performanceDisplay=new yg({container:n._performanceContainer}):n._performanceContainer.innerHTML=""}),this._showPrimitiveBoundingSphere=In(function(){return n._primitive.debugShowBoundingVolume=n.primitiveBoundingSphere,n._scene.requestRender(),!0}),this._primitiveBoundingSphereSubscription=Ge.getObservable(this,"primitiveBoundingSphere").subscribe(function(){n._showPrimitiveBoundingSphere()}),this._showPrimitiveReferenceFrame=In(function(){if(n.primitiveReferenceFrame){let d=n._primitive.modelMatrix;n._modelMatrixPrimitive=new G9({modelMatrix:d}),n._scene.primitives.add(n._modelMatrixPrimitive)}else l(n._modelMatrixPrimitive)&&(n._scene.primitives.remove(n._modelMatrixPrimitive),n._modelMatrixPrimitive=void 0);return n._scene.requestRender(),!0}),this._primitiveReferenceFrameSubscription=Ge.getObservable(this,"primitiveReferenceFrame").subscribe(function(){n._showPrimitiveReferenceFrame()}),this._doFilterPrimitive=In(function(){return n.filterPrimitive?n._scene.debugCommandFilter=function(d){return l(n._modelMatrixPrimitive)&&d.owner===n._modelMatrixPrimitive._primitive?!0:l(n._primitive)?d.owner===n._primitive||d.owner===n._primitive._billboardCollection||d.owner.primitive===n._primitive:!1}:n._scene.debugCommandFilter=void 0,!0}),this._filterPrimitiveSubscription=Ge.getObservable(this,"filterPrimitive").subscribe(function(){n._doFilterPrimitive(),n._scene.requestRender()}),this._wireframeSubscription=Ge.getObservable(this,"wireframe").subscribe(function(d){r._surface.tileProvider._debug.wireframe=d,n._scene.requestRender()}),this._depthFrustumSubscription=Ge.getObservable(this,"depthFrustum").subscribe(function(d){n._scene.debugShowDepthFrustum=d,n._scene.requestRender()}),this._incrementDepthFrustum=In(function(){let d=n.depthFrustum+1;return n.depthFrustum=ose(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._decrementDepthFrustum=In(function(){let d=n.depthFrustum-1;return n.depthFrustum=ose(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._suspendUpdatesSubscription=Ge.getObservable(this,"suspendUpdates").subscribe(function(d){r._surface._debug.suspendLodUpdate=d,d||(n.filterTile=!1)});let s;this._showTileCoordinates=In(function(){return n.tileCoordinates&&!l(s)?s=e.imageryLayers.addImageryProvider(new J9({tilingScheme:e.terrainProvider.tilingScheme})):!n.tileCoordinates&&l(s)&&(e.imageryLayers.remove(s),s=void 0),!0}),this._tileCoordinatesSubscription=Ge.getObservable(this,"tileCoordinates").subscribe(function(){n._showTileCoordinates(),n._scene.requestRender()}),this._tileBoundingSphereSubscription=Ge.getObservable(this,"tileBoundingSphere").subscribe(function(){n._showTileBoundingSphere(),n._scene.requestRender()}),this._showTileBoundingSphere=In(function(){return n.tileBoundingSphere?r._surface.tileProvider._debug.boundingSphereTile=n._tile:r._surface.tileProvider._debug.boundingSphereTile=void 0,n._scene.requestRender(),!0}),this._doFilterTile=In(function(){return n.filterTile?(n.suspendUpdates=!0,r._surface._tilesToRender=[],l(n._tile)&&n._tile.renderable&&r._surface._tilesToRender.push(n._tile)):n.suspendUpdates=!1,!0}),this._filterTileSubscription=Ge.getObservable(this,"filterTile").subscribe(function(){n.doFilterTile(),n._scene.requestRender()});function a(d){let u=n._scene.pick({x:d.position.x,y:d.position.y});l(u)&&(n.primitive=l(u.collection)?u.collection:u.primitive),n._scene.requestRender(),n.pickPrimitiveActive=!1}this._pickPrimitive=In(function(){n.pickPrimitiveActive=!n.pickPrimitiveActive}),this._pickPrimitiveActiveSubscription=Ge.getObservable(this,"pickPrimitiveActive").subscribe(function(d){d?o.setInputAction(a,dn.LEFT_CLICK):o.removeInputAction(dn.LEFT_CLICK)});function c(d){let u,m=r.ellipsoid,p=n._scene.camera.getPickRay(d.position,MMt),b=r.pick(p,n._scene,kMt);if(l(b)){let f=m.cartesianToCartographic(b),y=r._surface.tileProvider._tilesToRenderByTextureCount;for(let _=0;!u&&_<y.length;++_){let S=y[_];if(l(S))for(let Z=0;!u&&Z<S.length;++Z){let V=S[Z];re.contains(V.rectangle,f)&&(u=V)}}}n.tile=u,n.pickTileActive=!1}this._pickTile=In(function(){n.pickTileActive=!n.pickTileActive}),this._pickTileActiveSubscription=Ge.getObservable(this,"pickTileActive").subscribe(function(d){d?o.setInputAction(c,dn.LEFT_CLICK):o.removeInputAction(dn.LEFT_CLICK)}),this._removePostRenderEvent=e.postRender.addEventListener(function(){n._update()})}Object.defineProperties(mU.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},toggleDropDown:{get:function(){return this._toggleDropDown}},showPrimitiveBoundingSphere:{get:function(){return this._showPrimitiveBoundingSphere}},showPrimitiveReferenceFrame:{get:function(){return this._showPrimitiveReferenceFrame}},doFilterPrimitive:{get:function(){return this._doFilterPrimitive}},incrementDepthFrustum:{get:function(){return this._incrementDepthFrustum}},decrementDepthFrustum:{get:function(){return this._decrementDepthFrustum}},showTileCoordinates:{get:function(){return this._showTileCoordinates}},showTileBoundingSphere:{get:function(){return this._showTileBoundingSphere}},doFilterTile:{get:function(){return this._doFilterTile}},toggleGeneral:{get:function(){return this._toggleGeneral}},togglePrimitives:{get:function(){return this._togglePrimitives}},toggleTerrain:{get:function(){return this._toggleTerrain}},pickPrimitive:{get:function(){return this._pickPrimitive}},pickTile:{get:function(){return this._pickTile}},selectParent:{get:function(){let e=this;return In(function(){e.tile=e.tile.parent})}},selectNW:{get:function(){let e=this;return In(function(){e.tile=e.tile.northwestChild})}},selectNE:{get:function(){let e=this;return In(function(){e.tile=e.tile.northeastChild})}},selectSW:{get:function(){let e=this;return In(function(){e.tile=e.tile.southwestChild})}},selectSE:{get:function(){let e=this;return In(function(){e.tile=e.tile.southeastChild})}},primitive:{get:function(){return this._primitive},set:function(e){let t=this._primitive;e!==t&&(this.hasPickedPrimitive=!0,l(t)&&(t.debugShowBoundingVolume=!1),this._scene.debugCommandFilter=void 0,l(this._modelMatrixPrimitive)&&(this._scene.primitives.remove(this._modelMatrixPrimitive),this._modelMatrixPrimitive=void 0),this._primitive=e,e.show=!1,setTimeout(function(){e.show=!0},50),this.showPrimitiveBoundingSphere(),this.showPrimitiveReferenceFrame(),this.doFilterPrimitive())}},tile:{get:function(){return this._tile},set:function(e){if(l(e)){this.hasPickedTile=!0;let t=this._tile;if(e!==t){this.tileText=`L: ${e.level} X: ${e.x} Y: ${e.y}`,this.tileText+=`<br>SW corner: ${e.rectangle.west}, ${e.rectangle.south}`,this.tileText+=`<br>NE corner: ${e.rectangle.east}, ${e.rectangle.north}`;let n=e.data;l(n)&&l(n.tileBoundingRegion)?this.tileText+=`<br>Min: ${n.tileBoundingRegion.minimumHeight} Max: ${n.tileBoundingRegion.maximumHeight}`:this.tileText+="<br>(Tile is not loaded)"}this._tile=e,this.showTileBoundingSphere(),this.doFilterTile()}else this.hasPickedTile=!1,this._tile=void 0}}});mU.prototype._update=function(){this.frustums&&(this.frustumStatisticText=wMt(this._scene.debugFrustumStatistics));let e=this._scene.numberOfFrustums;this._numberOfFrustums=e,this.depthFrustum=ose(1,e,this.depthFrustum),this.depthFrustumText=`${this.depthFrustum} of ${e}`,this.performance&&this._performanceDisplay.update(),this.primitiveReferenceFrame&&(this._modelMatrixPrimitive.modelMatrix=this._primitive.modelMatrix),this.shaderCacheText=`Cached shaders: ${this._scene.context.shaderCache.numberOfShaders}`};mU.prototype.isDestroyed=function(){return!1};mU.prototype.destroy=function(){return this._eventHandler.destroy(),this._removePostRenderEvent(),this._frustumsSubscription.dispose(),this._frustumPlanesSubscription.dispose(),this._performanceSubscription.dispose(),this._primitiveBoundingSphereSubscription.dispose(),this._primitiveReferenceFrameSubscription.dispose(),this._filterPrimitiveSubscription.dispose(),this._wireframeSubscription.dispose(),this._depthFrustumSubscription.dispose(),this._suspendUpdatesSubscription.dispose(),this._tileCoordinatesSubscription.dispose(),this._tileBoundingSphereSubscription.dispose(),this._filterTileSubscription.dispose(),this._pickPrimitiveActiveSubscription.dispose(),this._pickTileActiveSubscription.dispose(),me(this)};var hU=mU;function KH(e,t){e=wn(e);let n=document.createElement("div"),i=new hU(t,n);this._viewModel=i,this._container=e;let o=document.createElement("div");this._element=o;let r=document.createElement("div");r.textContent="Cesium Inspector",r.className="cesium-cesiumInspector-button",r.setAttribute("data-bind","click: toggleDropDown"),o.appendChild(r),o.className="cesium-cesiumInspector",o.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : dropDownVisible, "cesium-cesiumInspector-hidden" : !dropDownVisible }'),e.appendChild(this._element);let s=document.createElement("div");s.className="cesium-cesiumInspector-dropDown",o.appendChild(s);let a=eu.createSection,c=eu.createCheckbox,d=a(s,"General","generalVisible","toggleGeneral"),u=c("Show Frustums","frustums"),m=document.createElement("div");m.className="cesium-cesiumInspector-frustumStatistics",m.setAttribute("data-bind","visible: frustums, html: frustumStatisticText"),u.appendChild(m),d.appendChild(u),d.appendChild(c("Show Frustum Planes","frustumPlanes")),d.appendChild(c("Performance Display","performance")),n.className="cesium-cesiumInspector-performanceDisplay",d.appendChild(n);let p=document.createElement("div");p.className="cesium-cesiumInspector-shaderCache",p.setAttribute("data-bind","html: shaderCacheText"),d.appendChild(p);let b=document.createElement("div");d.appendChild(b);let f=document.createElement("span");f.setAttribute("data-bind",'html: "     Frustum:"'),b.appendChild(f);let y=document.createElement("span");y.setAttribute("data-bind","text: depthFrustumText"),b.appendChild(y);let _=document.createElement("input");_.type="button",_.value="-",_.className="cesium-cesiumInspector-pickButton",_.setAttribute("data-bind","click: decrementDepthFrustum"),b.appendChild(_);let S=document.createElement("input");S.type="button",S.value="+",S.className="cesium-cesiumInspector-pickButton",S.setAttribute("data-bind","click: incrementDepthFrustum"),b.appendChild(S);let Z=a(s,"Primitives","primitivesVisible","togglePrimitives"),V=document.createElement("div");V.className="cesium-cesiumInspector-pickSection",Z.appendChild(V);let C=document.createElement("input");C.type="button",C.value="Pick a primitive",C.className="cesium-cesiumInspector-pickButton",C.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickPrimitiveActive}, click: pickPrimitive');let G=document.createElement("div");G.className="cesium-cesiumInspector-center",G.appendChild(C),V.appendChild(G),V.appendChild(c("Show bounding sphere","primitiveBoundingSphere","hasPickedPrimitive")),V.appendChild(c("Show reference frame","primitiveReferenceFrame","hasPickedPrimitive")),this._primitiveOnly=c("Show only selected","filterPrimitive","hasPickedPrimitive"),V.appendChild(this._primitiveOnly);let E=a(s,"Terrain","terrainVisible","toggleTerrain"),v=document.createElement("div");v.className="cesium-cesiumInspector-pickSection",E.appendChild(v);let F=document.createElement("input");F.type="button",F.value="Pick a tile",F.className="cesium-cesiumInspector-pickButton",F.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickTileActive}, click: pickTile'),G=document.createElement("div"),G.appendChild(F),G.className="cesium-cesiumInspector-center",v.appendChild(G);let P=document.createElement("div");v.appendChild(P);let N=document.createElement("input");N.type="button",N.value="Parent",N.className="cesium-cesiumInspector-pickButton",N.setAttribute("data-bind","click: selectParent");let g=document.createElement("input");g.type="button",g.value="NW",g.className="cesium-cesiumInspector-pickButton",g.setAttribute("data-bind","click: selectNW");let R=document.createElement("input");R.type="button",R.value="NE",R.className="cesium-cesiumInspector-pickButton",R.setAttribute("data-bind","click: selectNE");let A=document.createElement("input");A.type="button",A.value="SW",A.className="cesium-cesiumInspector-pickButton",A.setAttribute("data-bind","click: selectSW");let W=document.createElement("input");W.type="button",W.value="SE",W.className="cesium-cesiumInspector-pickButton",W.setAttribute("data-bind","click: selectSE");let X=document.createElement("div");X.className="cesium-cesiumInspector-tileText",P.className="cesium-cesiumInspector-frustumStatistics",P.appendChild(X),P.setAttribute("data-bind","visible: hasPickedTile"),X.setAttribute("data-bind","html: tileText");let Y=document.createElement("div");Y.className="cesium-cesiumInspector-relativeText",Y.textContent="Select relative:",P.appendChild(Y);let D=document.createElement("table"),k=document.createElement("tr"),O=document.createElement("tr"),w=document.createElement("td");w.appendChild(N);let z=document.createElement("td");z.appendChild(g);let H=document.createElement("td");H.appendChild(R),k.appendChild(w),k.appendChild(z),k.appendChild(H);let te=document.createElement("td"),K=document.createElement("td");K.appendChild(A);let $=document.createElement("td");$.appendChild(W),O.appendChild(te),O.appendChild(K),O.appendChild($),D.appendChild(k),D.appendChild(O),P.appendChild(D),v.appendChild(c("Show bounding volume","tileBoundingSphere","hasPickedTile")),v.appendChild(c("Show only selected","filterTile","hasPickedTile")),E.appendChild(c("Wireframe","wireframe")),E.appendChild(c("Suspend LOD update","suspendUpdates")),E.appendChild(c("Show tile coordinates","tileCoordinates")),Ge.applyBindings(i,this._element)}Object.defineProperties(KH.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});KH.prototype.isDestroyed=function(){return!1};KH.prototype.destroy=function(){return Ge.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),me(this)};var fU=KH;var znr=x(T(),1);var wnr=x(T(),1);function UMt(e){return function(t){let n=e._scene.pick(t.position);l(n)&&n.primitive instanceof wr&&(e.tileset=n.primitive),e.pickActive=!1}}function yFe(e,t){t?e._eventHandler.setInputAction(function(n){let i=e._scene.pick(n.endPosition);l(i)&&i.primitive instanceof wr&&(e.tileset=i.primitive)},dn.MOUSE_MOVE):(e._eventHandler.removeInputAction(dn.MOUSE_MOVE),e.picking=e.picking)}var DMt={maximumFractionDigits:3};function pU(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,DMt):Math.round(t).toLocaleString()}function bU(e,t){if(!l(e))return"";let n=t?e._statisticsPerPass[or.PICK]:e._statisticsPerPass[or.RENDER],i='<ul class="cesium-cesiumInspector-statistics">';return i+=`<li><strong>Visited: </strong>${n.visited.toLocaleString()}</li><li><strong>Selected: </strong>${n.selected.toLocaleString()}</li><li><strong>Commands: </strong>${n.numberOfCommands.toLocaleString()}</li>`,i+="</ul>",t||(i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Requests: </strong>${n.numberOfPendingRequests.toLocaleString()}</li><li><strong>Attempted: </strong>${n.numberOfAttemptedRequests.toLocaleString()}</li><li><strong>Processing: </strong>${n.numberOfTilesProcessing.toLocaleString()}</li><li><strong>Content Ready: </strong>${n.numberOfTilesWithContentReady.toLocaleString()}</li><li><strong>Total: </strong>${n.numberOfTilesTotal.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Features Selected: </strong>${n.numberOfFeaturesSelected.toLocaleString()}</li><li><strong>Features Loaded: </strong>${n.numberOfFeaturesLoaded.toLocaleString()}</li><li><strong>Points Selected: </strong>${n.numberOfPointsSelected.toLocaleString()}</li><li><strong>Points Loaded: </strong>${n.numberOfPointsLoaded.toLocaleString()}</li><li><strong>Triangles Selected: </strong>${n.numberOfTrianglesSelected.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Tiles styled: </strong>${n.numberOfTilesStyled.toLocaleString()}</li><li><strong>Features styled: </strong>${n.numberOfFeaturesStyled.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Children Union Culled: </strong>${n.numberOfTilesCulledWithChildrenUnion.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Geometry Memory (MB): </strong>${pU(n.geometryByteLength)}</li><li><strong>Texture Memory (MB): </strong>${pU(n.texturesByteLength)}</li><li><strong>Batch Table Memory (MB): </strong>${pU(n.batchTableByteLength)}</li>`,i+="</ul>"),i}function xFe(){let e=Pi.statistics;return` <ul class="cesium-cesiumInspector-statistics"> <li><strong>Geometry Memory (MB): </strong>${pU(e.geometryByteLength)}</li> <li><strong>Texture Memory (MB): </strong>${pU(e.texturesByteLength)}</li> </ul> `}var OMt=[{text:"Highlight",value:Id.HIGHLIGHT},{text:"Replace",value:Id.REPLACE},{text:"Mix",value:Id.MIX}],gFe=new U(1,1,0,.4),BMt=new U,JH=new U;function gc(e,t){let n=this,i=e.canvas;this._eventHandler=new Hs(i),this._scene=e,this._performanceContainer=t,this._canvas=i,this._performanceDisplay=new yg({container:t}),this._statisticsText="",this._pickStatisticsText="",this._resourceCacheStatisticsText="",this._editorError="",this.performance=!1,this.showStatistics=!0,this.showPickStatistics=!0,this.showResourceCacheStatistics=!1,this.inspectorVisible=!0,this.tilesetVisible=!1,this.displayVisible=!1,this.updateVisible=!1,this.loggingVisible=!1,this.styleVisible=!1,this.tileDebugLabelsVisible=!1,this.optimizationVisible=!1,this.styleString="{}",this.hasEnabledWireframe=!1,this._tileset=void 0,this._feature=void 0,this._tile=void 0,Ge.track(this,["performance","inspectorVisible","_statisticsText","_pickStatisticsText","_resourceCacheStatisticsText","_editorError","showPickStatistics","showStatistics","showResourceCacheStatistics","tilesetVisible","displayVisible","updateVisible","loggingVisible","styleVisible","optimizationVisible","tileDebugLabelsVisible","styleString","_feature","_tile","_tileset","hasEnabledWireframe"]),this._properties=Ge.observable({}),this.properties=[],Ge.defineProperty(this,"properties",function(){let w=[],z=n._properties();for(let H in z)z.hasOwnProperty(H)&&w.push(H);return w});let o=Ge.observable();Ge.defineProperty(this,"dynamicScreenSpaceError",{get:function(){return o()},set:function(w){o(w),l(n._tileset)&&(n._tileset.dynamicScreenSpaceError=w)}}),this.dynamicScreenSpaceError=!1;let r=Ge.observable();Ge.defineProperty(this,"colorBlendMode",{get:function(){return r()},set:function(w){r(w),l(n._tileset)&&(n._tileset.colorBlendMode=w,n._scene.requestRender())}}),this.colorBlendMode=Id.HIGHLIGHT;let s=Ge.observable(),a=Ge.observable();Ge.defineProperty(this,"picking",{get:function(){return a()},set:function(w){a(w),w?n._eventHandler.setInputAction(function(z){let H=e.pick(z.endPosition);if(H instanceof Qs?(n.feature=H,n.tile=H.content.tile):l(H)&&l(H.content)?(n.feature=void 0,n.tile=H.content.tile):(n.feature=void 0,n.tile=void 0),!!l(n._tileset)){if(s&&l(H)&&l(H.content)){let te;e.pickPositionSupported&&(te=e.pickPosition(z.endPosition),l(te)&&(n._tileset.debugPickPosition=te)),n._tileset.debugPickedTile=H.content.tile}else n._tileset.debugPickedTile=void 0;n._scene.requestRender()}},dn.MOUSE_MOVE):(n.feature=void 0,n.tile=void 0,n._eventHandler.removeInputAction(dn.MOUSE_MOVE))}}),this.picking=!0;let c=Ge.observable();Ge.defineProperty(this,"colorize",{get:function(){return c()},set:function(w){c(w),l(n._tileset)&&(n._tileset.debugColorizeTiles=w,n._scene.requestRender())}}),this.colorize=!1;let d=Ge.observable();Ge.defineProperty(this,"wireframe",{get:function(){return d()},set:function(w){d(w),l(n._tileset)&&(n._tileset.debugWireframe=w,n._scene.requestRender())}}),this.wireframe=!1;let u=Ge.observable();Ge.defineProperty(this,"showBoundingVolumes",{get:function(){return u()},set:function(w){u(w),l(n._tileset)&&(n._tileset.debugShowBoundingVolume=w,n._scene.requestRender())}}),this.showBoundingVolumes=!1;let m=Ge.observable();Ge.defineProperty(this,"showContentBoundingVolumes",{get:function(){return m()},set:function(w){m(w),l(n._tileset)&&(n._tileset.debugShowContentBoundingVolume=w,n._scene.requestRender())}}),this.showContentBoundingVolumes=!1;let p=Ge.observable();Ge.defineProperty(this,"showRequestVolumes",{get:function(){return p()},set:function(w){p(w),l(n._tileset)&&(n._tileset.debugShowViewerRequestVolume=w,n._scene.requestRender())}}),this.showRequestVolumes=!1;let b=Ge.observable();Ge.defineProperty(this,"freezeFrame",{get:function(){return b()},set:function(w){b(w),l(n._tileset)&&(n._tileset.debugFreezeFrame=w,n._scene.debugShowFrustumPlanes=w,n._scene.requestRender())}}),this.freezeFrame=!1,Ge.defineProperty(this,"showOnlyPickedTileDebugLabel",{get:function(){return s()},set:function(w){s(w),l(n._tileset)&&(n._tileset.debugPickedTileLabelOnly=w,n._scene.requestRender())}}),this.showOnlyPickedTileDebugLabel=!1;let f=Ge.observable();Ge.defineProperty(this,"showGeometricError",{get:function(){return f()},set:function(w){f(w),l(n._tileset)&&(n._tileset.debugShowGeometricError=w,n._scene.requestRender())}}),this.showGeometricError=!1;let y=Ge.observable();Ge.defineProperty(this,"showRenderingStatistics",{get:function(){return y()},set:function(w){y(w),l(n._tileset)&&(n._tileset.debugShowRenderingStatistics=w,n._scene.requestRender())}}),this.showRenderingStatistics=!1;let _=Ge.observable();Ge.defineProperty(this,"showMemoryUsage",{get:function(){return _()},set:function(w){_(w),l(n._tileset)&&(n._tileset.debugShowMemoryUsage=w,n._scene.requestRender())}}),this.showMemoryUsage=!1;let S=Ge.observable();Ge.defineProperty(this,"showUrl",{get:function(){return S()},set:function(w){S(w),l(n._tileset)&&(n._tileset.debugShowUrl=w,n._scene.requestRender())}}),this.showUrl=!1;let Z=Ge.observable();Ge.defineProperty(this,"maximumScreenSpaceError",{get:function(){return Z()},set:function(w){w=Number(w),isNaN(w)||(Z(w),l(n._tileset)&&(n._tileset.maximumScreenSpaceError=w))}}),this.maximumScreenSpaceError=16;let V=Ge.observable();Ge.defineProperty(this,"dynamicScreenSpaceErrorDensity",{get:function(){return V()},set:function(w){w=Number(w),isNaN(w)||(V(w),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=w))}}),this.dynamicScreenSpaceErrorDensity=2e-4,this.dynamicScreenSpaceErrorDensitySliderValue=void 0,Ge.defineProperty(this,"dynamicScreenSpaceErrorDensitySliderValue",{get:function(){return Math.pow(V(),1/6)},set:function(w){let z=Math.pow(w,6);V(z),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=z)}});let C=Ge.observable();Ge.defineProperty(this,"dynamicScreenSpaceErrorFactor",{get:function(){return C()},set:function(w){w=Number(w),isNaN(w)||(C(w),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorFactor=w))}}),this.dynamicScreenSpaceErrorFactor=24;let G=UMt(this),E=Ge.observable();Ge.defineProperty(this,"pickActive",{get:function(){return E()},set:function(w){E(w),w?n._eventHandler.setInputAction(G,dn.LEFT_CLICK):n._eventHandler.removeInputAction(dn.LEFT_CLICK)}});let v=Ge.observable();Ge.defineProperty(this,"pointCloudShading",{get:function(){return v()},set:function(w){v(w),l(n._tileset)&&(n._tileset.pointCloudShading.attenuation=w)}}),this.pointCloudShading=!1;let F=Ge.observable();Ge.defineProperty(this,"geometricErrorScale",{get:function(){return F()},set:function(w){w=Number(w),isNaN(w)||(F(w),l(n._tileset)&&(n._tileset.pointCloudShading.geometricErrorScale=w))}}),this.geometricErrorScale=1;let P=Ge.observable();Ge.defineProperty(this,"maximumAttenuation",{get:function(){return P()},set:function(w){w=Number(w),isNaN(w)||(P(w),l(n._tileset)&&(n._tileset.pointCloudShading.maximumAttenuation=w===0?void 0:w))}}),this.maximumAttenuation=0;let N=Ge.observable();Ge.defineProperty(this,"baseResolution",{get:function(){return N()},set:function(w){w=Number(w),isNaN(w)||(N(w),l(n._tileset)&&(n._tileset.pointCloudShading.baseResolution=w===0?void 0:w))}}),this.baseResolution=0;let g=Ge.observable();Ge.defineProperty(this,"eyeDomeLighting",{get:function(){return g()},set:function(w){g(w),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLighting=w)}}),this.eyeDomeLighting=!1;let R=Ge.observable();Ge.defineProperty(this,"eyeDomeLightingStrength",{get:function(){return R()},set:function(w){w=Number(w),isNaN(w)||(R(w),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingStrength=w))}}),this.eyeDomeLightingStrength=1;let A=Ge.observable();Ge.defineProperty(this,"eyeDomeLightingRadius",{get:function(){return A()},set:function(w){w=Number(w),isNaN(w)||(A(w),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingRadius=w))}}),this.eyeDomeLightingRadius=1,this.pickActive=!1;let W=Ge.observable();Ge.defineProperty(this,"skipLevelOfDetail",{get:function(){return W()},set:function(w){W(w),l(n._tileset)&&(n._tileset.skipLevelOfDetail=w)}}),this.skipLevelOfDetail=!0;let X=Ge.observable();Ge.defineProperty(this,"skipScreenSpaceErrorFactor",{get:function(){return X()},set:function(w){w=Number(w),isNaN(w)||(X(w),l(n._tileset)&&(n._tileset.skipScreenSpaceErrorFactor=w))}}),this.skipScreenSpaceErrorFactor=16;let Y=Ge.observable();Ge.defineProperty(this,"baseScreenSpaceError",{get:function(){return Y()},set:function(w){w=Number(w),isNaN(w)||(Y(w),l(n._tileset)&&(n._tileset.baseScreenSpaceError=w))}}),this.baseScreenSpaceError=1024;let D=Ge.observable();Ge.defineProperty(this,"skipLevels",{get:function(){return D()},set:function(w){w=Number(w),isNaN(w)||(D(w),l(n._tileset)&&(n._tileset.skipLevels=w))}}),this.skipLevels=1;let k=Ge.observable();Ge.defineProperty(this,"immediatelyLoadDesiredLevelOfDetail",{get:function(){return k()},set:function(w){k(w),l(n._tileset)&&(n._tileset.immediatelyLoadDesiredLevelOfDetail=w)}}),this.immediatelyLoadDesiredLevelOfDetail=!1;let O=Ge.observable();Ge.defineProperty(this,"loadSiblings",{get:function(){return O()},set:function(w){O(w),l(n._tileset)&&(n._tileset.loadSiblings=w)}}),this.loadSiblings=!1,this._style=void 0,this._shouldStyle=!1,this._definedProperties=["properties","dynamicScreenSpaceError","colorBlendMode","picking","colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","maximumScreenSpaceError","dynamicScreenSpaceErrorDensity","baseScreenSpaceError","skipScreenSpaceErrorFactor","skipLevelOfDetail","skipLevels","immediatelyLoadDesiredLevelOfDetail","loadSiblings","dynamicScreenSpaceErrorDensitySliderValue","dynamicScreenSpaceErrorFactor","pickActive","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl","pointCloudShading","geometricErrorScale","maximumAttenuation","baseResolution","eyeDomeLighting","eyeDomeLightingStrength","eyeDomeLightingRadius"],this._removePostRenderEvent=e.postRender.addEventListener(function(){n._update()}),l(this._tileset)||yFe(this,!0)}Object.defineProperties(gc.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},statisticsText:{get:function(){return this._statisticsText}},pickStatisticsText:{get:function(){return this._pickStatisticsText}},resourceCacheStatisticsText:{get:function(){return this._resourceCacheStatisticsText}},colorBlendModes:{get:function(){return OMt}},editorError:{get:function(){return this._editorError}},tileset:{get:function(){return this._tileset},set:function(e){if(this._tileset=e,this._style=void 0,this.styleString="{}",this.feature=void 0,this.tile=void 0,l(e)){this._properties(e.properties);let t=["colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl"],n=t.length;for(let o=0;o<n;++o){let r=t[o];this[r]=this[r]}this.maximumScreenSpaceError=e.maximumScreenSpaceError,this.dynamicScreenSpaceError=e.dynamicScreenSpaceError,this.dynamicScreenSpaceErrorDensity=e.dynamicScreenSpaceErrorDensity,this.dynamicScreenSpaceErrorFactor=e.dynamicScreenSpaceErrorFactor,this.colorBlendMode=e.colorBlendMode,this.skipLevelOfDetail=e.skipLevelOfDetail,this.skipScreenSpaceErrorFactor=e.skipScreenSpaceErrorFactor,this.baseScreenSpaceError=e.baseScreenSpaceError,this.skipLevels=e.skipLevels,this.immediatelyLoadDesiredLevelOfDetail=e.immediatelyLoadDesiredLevelOfDetail,this.loadSiblings=e.loadSiblings,this.hasEnabledWireframe=e._enableDebugWireframe;let i=e.pointCloudShading;this.pointCloudShading=i.attenuation,this.geometricErrorScale=i.geometricErrorScale,this.maximumAttenuation=i.maximumAttenuation?i.maximumAttenuation:0,this.baseResolution=i.baseResolution?i.baseResolution:0,this.eyeDomeLighting=i.eyeDomeLighting,this.eyeDomeLightingStrength=i.eyeDomeLightingStrength,this.eyeDomeLightingRadius=i.eyeDomeLightingRadius,this._scene.requestRender()}else this._properties({});this._statisticsText=bU(e,!1),this._pickStatisticsText=bU(e,!0),this._resourceCacheStatisticsText=xFe(),yFe(this,!1)}},feature:{get:function(){return this._feature},set:function(e){if(this._feature===e)return;let t=this._feature;l(t)&&!t.content.isDestroyed()&&(!this.colorize&&l(this._style)?t.color=l(this._style.color)?this._style.color.evaluateColor(t,BMt):U.WHITE:t.color=JH,this._scene.requestRender()),l(e)&&(U.clone(e.color,JH),e.color=gFe,this._scene.requestRender()),this._feature=e}},tile:{get:function(){return this._tile},set:function(e){if(this._tile===e)return;let t=this._tile;l(t)&&!t.isDestroyed()&&!rse(t.content)&&(t.color=JH,this._scene.requestRender()),l(e)&&!rse(e.content)&&(U.clone(e.color,JH),e.color=gFe,this._scene.requestRender()),this._tile=e}}});function rse(e){if(!l(e))return!1;if(e.featuresLength>0)return!0;let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)if(!rse(t[i]))return!1;return!0}return!1}gc.prototype.togglePickTileset=function(){this.pickActive=!this.pickActive};gc.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};gc.prototype.toggleTileset=function(){this.tilesetVisible=!this.tilesetVisible};gc.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};gc.prototype.toggleUpdate=function(){this.updateVisible=!this.updateVisible};gc.prototype.toggleLogging=function(){this.loggingVisible=!this.loggingVisible};gc.prototype.toggleStyle=function(){this.styleVisible=!this.styleVisible};gc.prototype.toggleTileDebugLabels=function(){this.tileDebugLabelsVisible=!this.tileDebugLabelsVisible};gc.prototype.toggleOptimization=function(){this.optimizationVisible=!this.optimizationVisible};gc.prototype.trimTilesCache=function(){l(this._tileset)&&this._tileset.trimLoadedTiles()};gc.prototype.compileStyle=function(){let e=this._tileset;if(!(!l(e)||this.styleString===JSON.stringify(e.style))){this._editorError="";try{this.styleString.length===0&&(this.styleString="{}"),this._style=new og(JSON.parse(this.styleString)),this._shouldStyle=!0,this._scene.requestRender()}catch(t){this._editorError=t.toString()}this.feature=this._feature,this.tile=this._tile}};gc.prototype.styleEditorKeyPress=function(e,t){if(t.keyCode===9){t.preventDefault();let n=t.target,i=n.selectionStart,o=n.selectionEnd,r=o,a=n.value.slice(i,o).split(` `),c=a.length,d;if(t.shiftKey)for(d=0;d<c;++d)a[d][0]===" "&&(a[d][1]===" "?(a[d]=a[d].substr(2),r-=2):(a[d]=a[d].substr(1),r-=1));else for(d=0;d<c;++d)a[d]=` ${a[d]}`,r+=2;let u=a.join(` `);n.value=n.value.slice(0,i)+u+n.value.slice(o),n.selectionStart=i!==o?i:r,n.selectionEnd=r}else t.ctrlKey&&(t.keyCode===10||t.keyCode===13)&&this.compileStyle();return!0};gc.prototype._update=function(){let e=this._tileset;if(this.performance&&this._performanceDisplay.update(),l(e)){if(e.isDestroyed()){this.tile=void 0,this.feature=void 0,this.tileset=void 0;return}let t=e.style;this._style!==e.style&&(this._shouldStyle?(e.style=this._style,this._shouldStyle=!1):(this._style=t,this.styleString=JSON.stringify(t.style,null," ")))}this.showStatistics&&(this._statisticsText=bU(e,!1),this._pickStatisticsText=bU(e,!0),this._resourceCacheStatisticsText=xFe())};gc.prototype.isDestroyed=function(){return!1};gc.prototype.destroy=function(){this._eventHandler.destroy(),this._removePostRenderEvent();let e=this;return this._definedProperties.forEach(function(t){Ge.getObservable(e,t).dispose()}),me(this)};gc.getStatistics=bU;var gU=gc;function jH(e,t){e=wn(e);let n=document.createElement("div"),i=document.createElement("div");i.setAttribute("data-bind","visible: performance");let o=new gU(t,i);this._viewModel=o,this._container=e,this._element=n;let r=document.createElement("div");r.textContent="3D Tiles Inspector",r.className="cesium-cesiumInspector-button",r.setAttribute("data-bind","click: toggleInspector"),n.appendChild(r),n.className="cesium-cesiumInspector cesium-3DTilesInspector",n.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : inspectorVisible, "cesium-cesiumInspector-hidden" : !inspectorVisible}'),e.appendChild(n);let s=document.createElement("div");s.className="cesium-cesiumInspector-dropDown",n.appendChild(s);let a=eu.createSection,c=eu.createCheckbox,d=eu.createRangeInput,u=eu.createButton,m=a(s,"Tileset","tilesetVisible","toggleTileset"),p=a(s,"Display","displayVisible","toggleDisplay"),b=a(s,"Update","updateVisible","toggleUpdate"),f=a(s,"Logging","loggingVisible","toggleLogging"),y=a(s,"Tile Debug Labels","tileDebugLabelsVisible","toggleTileDebugLabels"),_=a(s,"Style","styleVisible","toggleStyle"),S=a(s,"Optimization","optimizationVisible","toggleOptimization"),Z=document.createElement("div");Z.className="field-group";let V=document.createElement("label");V.className="field-label",V.appendChild(document.createTextNode("Properties: "));let C=document.createElement("div");C.setAttribute("data-bind","text: properties"),Z.appendChild(V),Z.appendChild(C),m.appendChild(Z),m.appendChild(u("Pick Tileset","togglePickTileset","pickActive")),m.appendChild(u("Trim Tiles Cache","trimTilesCache")),m.appendChild(c("Enable Picking","picking")),p.appendChild(c("Colorize","colorize"));let G=p.appendChild(c("Wireframe","wireframe","_tileset === undefined || hasEnabledWireframe")),E=document.createElement("p");E.setAttribute("data-bind","visible: _tileset !== undefined && !hasEnabledWireframe"),E.setAttribute("class","cesium-3DTilesInspector-disabledElementsInfo"),E.innerText="Set enableDebugWireframe to true in the tileset constructor to enable this option.",G.appendChild(E),p.appendChild(c("Bounding Volumes","showBoundingVolumes")),p.appendChild(c("Content Volumes","showContentBoundingVolumes")),p.appendChild(c("Request Volumes","showRequestVolumes")),p.appendChild(c("Point Cloud Shading","pointCloudShading"));let v=document.createElement("div");v.setAttribute("data-bind","visible: pointCloudShading"),v.appendChild(d("Geometric Error Scale","geometricErrorScale",0,2,.01)),v.appendChild(d("Maximum Attenuation","maximumAttenuation",0,32,1)),v.appendChild(d("Base Resolution","baseResolution",0,1,.01)),v.appendChild(c("Eye Dome Lighting (EDL)","eyeDomeLighting")),p.appendChild(v);let F=document.createElement("div");F.setAttribute("data-bind","visible: eyeDomeLighting"),F.appendChild(d("EDL Strength","eyeDomeLightingStrength",0,2,.1)),F.appendChild(d("EDL Radius","eyeDomeLightingRadius",0,4,.1)),v.appendChild(F),b.appendChild(c("Freeze Frame","freezeFrame")),b.appendChild(c("Dynamic Screen Space Error","dynamicScreenSpaceError"));let P=document.createElement("div");P.appendChild(d("Maximum Screen Space Error","maximumScreenSpaceError",0,128,1)),b.appendChild(P);let N=document.createElement("div");N.setAttribute("data-bind","visible: dynamicScreenSpaceError"),N.appendChild(d("Screen Space Error Density","dynamicScreenSpaceErrorDensitySliderValue",0,1,.005,"dynamicScreenSpaceErrorDensity")),N.appendChild(d("Screen Space Error Factor","dynamicScreenSpaceErrorFactor",1,32,.1)),b.appendChild(N),f.appendChild(c("Performance","performance")),f.appendChild(i),f.appendChild(c("Statistics","showStatistics"));let g=document.createElement("div");g.className="cesium-3dTilesInspector-statistics",g.setAttribute("data-bind","html: statisticsText, visible: showStatistics"),f.appendChild(g),f.appendChild(c("Pick Statistics","showPickStatistics"));let R=document.createElement("div");R.className="cesium-3dTilesInspector-statistics",R.setAttribute("data-bind","html: pickStatisticsText, visible: showPickStatistics"),f.appendChild(R),f.appendChild(c("Resource Cache Statistics","showResourceCacheStatistics"));let A=document.createElement("div");A.className="cesium-3dTilesInspector-statistics",A.setAttribute("data-bind","html: resourceCacheStatisticsText, visible: showResourceCacheStatistics"),f.appendChild(A);let W=document.createElement("div");_.appendChild(W),W.appendChild(document.createTextNode("Color Blend Mode: "));let X=document.createElement("select");X.setAttribute("data-bind",'options: colorBlendModes, optionsText: "text", optionsValue: "value", value: colorBlendMode'),W.appendChild(X);let Y=document.createElement("textarea");Y.setAttribute("data-bind","textInput: styleString, event: { keydown: styleEditorKeyPress }"),W.className="cesium-cesiumInspector-styleEditor",W.appendChild(Y);let D=u("Compile (Ctrl+Enter)","compileStyle");W.appendChild(D);let k=document.createElement("div");k.className="cesium-cesiumInspector-error",k.setAttribute("data-bind","text: editorError"),W.appendChild(k),y.appendChild(c("Show Picked Only","showOnlyPickedTileDebugLabel")),y.appendChild(c("Geometric Error","showGeometricError")),y.appendChild(c("Rendering Statistics","showRenderingStatistics")),y.appendChild(c("Memory Usage (MB)","showMemoryUsage")),y.appendChild(c("Url","showUrl")),S.appendChild(c("Skip Tile LODs","skipLevelOfDetail"));let O=document.createElement("div");O.appendChild(d("Skip SSE Factor","skipScreenSpaceErrorFactor",1,50,1)),S.appendChild(O);let w=document.createElement("div");w.appendChild(d("SSE before skipping LOD","baseScreenSpaceError",0,4096,1)),S.appendChild(w);let z=document.createElement("div");z.appendChild(d("Min. levels to skip","skipLevels",0,10,1)),S.appendChild(z),S.appendChild(c("Load only tiles that meet the max SSE.","immediatelyLoadDesiredLevelOfDetail")),S.appendChild(c("Load siblings of visible tiles","loadSiblings")),Ge.applyBindings(o,n)}Object.defineProperties(jH.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});jH.prototype.isDestroyed=function(){return!1};jH.prototype.destroy=function(){return Ge.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),me(this)};var yU=jH;var rir=x(T(),1);var qnr=x(T(),1);function QH(e,t){l(t)||(t=document.body),t=wn(t);let n=this,i=Ge.observable(Or.fullscreen),o=Ge.observable(Or.enabled),r=t.ownerDocument;this.isFullscreen=void 0,Ge.defineProperty(this,"isFullscreen",{get:function(){return i()}}),this.isFullscreenEnabled=void 0,Ge.defineProperty(this,"isFullscreenEnabled",{get:function(){return o()},set:function(s){o(s&&Or.enabled)}}),this.tooltip=void 0,Ge.defineProperty(this,"tooltip",function(){return this.isFullscreenEnabled?i()?"Exit full screen":"Full screen":"Full screen unavailable"}),this._command=In(function(){Or.fullscreen?Or.exitFullscreen():Or.requestFullscreen(n._fullscreenElement)},Ge.getObservable(this,"isFullscreenEnabled")),this._fullscreenElement=wn(e)??r.body,this._callback=function(){i(Or.fullscreen)},r.addEventListener(Or.changeEventName,this._callback)}Object.defineProperties(QH.prototype,{fullscreenElement:{get:function(){return this._fullscreenElement},set:function(e){this._fullscreenElement=e}},command:{get:function(){return this._command}}});QH.prototype.isDestroyed=function(){return!1};QH.prototype.destroy=function(){document.removeEventListener(Or.changeEventName,this._callback),me(this)};var xU=QH;var zMt="M 83.96875 17.5625 L 83.96875 17.59375 L 76.65625 24.875 L 97.09375 24.96875 L 76.09375 45.96875 L 81.9375 51.8125 L 102.78125 30.9375 L 102.875 51.15625 L 110.15625 43.875 L 110.1875 17.59375 L 83.96875 17.5625 z M 44.125 17.59375 L 17.90625 17.625 L 17.9375 43.90625 L 25.21875 51.1875 L 25.3125 30.96875 L 46.15625 51.8125 L 52 45.96875 L 31 25 L 51.4375 24.90625 L 44.125 17.59375 z M 46.0625 76.03125 L 25.1875 96.875 L 25.09375 76.65625 L 17.8125 83.9375 L 17.8125 110.21875 L 44 110.25 L 51.3125 102.9375 L 30.90625 102.84375 L 51.875 81.875 L 46.0625 76.03125 z M 82 76.15625 L 76.15625 82 L 97.15625 103 L 76.71875 103.0625 L 84.03125 110.375 L 110.25 110.34375 L 110.21875 84.0625 L 102.9375 76.8125 L 102.84375 97 L 82 76.15625 z",HMt="M 104.34375 17.5625 L 83.5 38.4375 L 83.40625 18.21875 L 76.125 25.5 L 76.09375 51.78125 L 102.3125 51.8125 L 102.3125 51.78125 L 109.625 44.5 L 89.1875 44.40625 L 110.1875 23.40625 L 104.34375 17.5625 z M 23.75 17.59375 L 17.90625 23.4375 L 38.90625 44.4375 L 18.5 44.53125 L 25.78125 51.8125 L 52 51.78125 L 51.96875 25.53125 L 44.6875 18.25 L 44.625 38.46875 L 23.75 17.59375 z M 25.6875 76.03125 L 18.375 83.3125 L 38.78125 83.40625 L 17.8125 104.40625 L 23.625 110.25 L 44.5 89.375 L 44.59375 109.59375 L 51.875 102.3125 L 51.875 76.0625 L 25.6875 76.03125 z M 102.375 76.15625 L 76.15625 76.1875 L 76.1875 102.4375 L 83.46875 109.71875 L 83.5625 89.53125 L 104.40625 110.375 L 110.25 104.53125 L 89.25 83.53125 L 109.6875 83.46875 L 102.375 76.15625 z";function qH(e,t){e=wn(e);let n=new xU(t,e);n._exitFullScreenPath=HMt,n._enterFullScreenPath=zMt;let i=document.createElement("button");i.type="button",i.className="cesium-button cesium-fullscreenButton",i.setAttribute("data-bind","attr: { title: tooltip },click: command,enable: isFullscreenEnabled,cesiumSvgPath: { path: isFullscreen ? _exitFullScreenPath : _enterFullScreenPath, width: 128, height: 128 }"),e.appendChild(i),Ge.applyBindings(n,i),this._container=e,this._viewModel=n,this._element=i}Object.defineProperties(qH.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});qH.prototype.isDestroyed=function(){return!1};qH.prototype.destroy=function(){return this._viewModel.destroy(),Ge.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var TU=qH;var yir=x(T(),1);var uir=x(T(),1);var TFe=1e3;function tp(e){l(e.geocoderServices)?this._geocoderServices=e.geocoderServices:this._geocoderServices=[new s_({scene:e.scene})],this._viewContainer=e.container,this._scene=e.scene,this._flightDuration=e.flightDuration,this._searchText="",this._isSearchInProgress=!1,this._wasGeocodeCancelled=!1,this._previousCredits=[],this._complete=new Se,this._suggestions=[],this._selectedSuggestion=void 0,this._showSuggestions=!0,this._handleArrowDown=SFe,this._handleArrowUp=_Fe;let t=this;this._suggestionsVisible=Ge.pureComputed(function(){let o=Ge.getObservable(t,"_suggestions")().length>0,r=Ge.getObservable(t,"_showSuggestions")();return o&&r}),this._searchCommand=In(function(i){if(i=i??Fy.SEARCH,t._focusTextbox=!1,l(t._selectedSuggestion))return t.activateSuggestion(t._selectedSuggestion),!1;if(t.hideSuggestions(),t.isSearchInProgress)$Mt(t);else return QMt(t,t._geocoderServices,i)}),this.deselectSuggestion=function(){t._selectedSuggestion=void 0},this.handleKeyDown=function(i,o){let r=o.key==="ArrowDown"||o.key==="Down"||o.keyCode===40,s=o.key==="ArrowUp"||o.key==="Up"||o.keyCode===38;return(r||s)&&o.preventDefault(),!0},this.handleKeyUp=function(i,o){let r=o.key==="ArrowDown"||o.key==="Down"||o.keyCode===40,s=o.key==="ArrowUp"||o.key==="Up"||o.keyCode===38,a=o.key==="Enter"||o.keyCode===13;return s?_Fe(t):r?SFe(t):a&&t._searchCommand(),!0},this.activateSuggestion=function(i){t.hideSuggestions(),t._searchText=i.displayName;let o=i.destination;CFe(t),t.destinationFound(t,o)},this.hideSuggestions=function(){t._showSuggestions=!1,t._selectedSuggestion=void 0},this.showSuggestions=function(){t._showSuggestions=!0},this.handleMouseover=function(i,o){i!==t._selectedSuggestion&&(t._selectedSuggestion=i)},this.keepExpanded=!1,this.autoComplete=e.autocomplete??!0,this.destinationFound=e.destinationFound??tp.flyToDestination,this._focusTextbox=!1,Ge.track(this,["_searchText","_isSearchInProgress","keepExpanded","_suggestions","_selectedSuggestion","_showSuggestions","_focusTextbox"]);let n=Ge.getObservable(this,"_searchText");n.extend({rateLimit:{timeout:500}}),this._suggestionSubscription=n.subscribe(function(){tp._updateSearchSuggestions(t)}),this.isSearchInProgress=void 0,Ge.defineProperty(this,"isSearchInProgress",{get:function(){return this._isSearchInProgress}}),this.searchText=void 0,Ge.defineProperty(this,"searchText",{get:function(){return this.isSearchInProgress?"Searching...":this._searchText},set:function(i){this._searchText=i}}),this.flightDuration=void 0,Ge.defineProperty(this,"flightDuration",{get:function(){return this._flightDuration},set:function(i){this._flightDuration=i}})}Object.defineProperties(tp.prototype,{complete:{get:function(){return this._complete}},scene:{get:function(){return this._scene}},search:{get:function(){return this._searchCommand}},selectedSuggestion:{get:function(){return this._selectedSuggestion}},suggestions:{get:function(){return this._suggestions}}});function _Fe(e){if(e._suggestions.length===0)return;let t=e._suggestions.indexOf(e._selectedSuggestion);if(t===-1||t===0){e._selectedSuggestion=void 0;return}let n=t-1;e._selectedSuggestion=e._suggestions[n],tp._adjustSuggestionsScroll(e,n)}function SFe(e){if(e._suggestions.length===0)return;let t=e._suggestions.length,i=(e._suggestions.indexOf(e._selectedSuggestion)+1)%t;e._selectedSuggestion=e._suggestions[i],tp._adjustSuggestionsScroll(e,i)}function KMt(e,t){let n=l(t)?t.availability:void 0;return l(n)?G_(t,[e]).then(function(i){return e=i[0],e.height+=TFe,e}):(e.height+=TFe,Promise.resolve(e))}function JMt(e,t){let n=e._scene,i=n.ellipsoid,o=n.camera,r=n.terrainProvider,s=t,a;return t instanceof re?L.equalsEpsilon(t.south,t.north,L.EPSILON7)&&L.equalsEpsilon(t.east,t.west,L.EPSILON7)?t=re.center(t):a=QS(t,n):t=i.cartesianToCartographic(t),l(a)||(a=KMt(t,r)),a.then(function(c){s=i.cartographicToCartesian(c)}).finally(function(){o.flyTo({destination:s,complete:function(){e._complete.raiseEvent()},duration:e._flightDuration,endTransform:I.IDENTITY})})}async function jMt(e,t,n){try{return{state:"fulfilled",value:await e.geocode(t,n),credits:e.credit}}catch(i){return{state:"rejected",reason:i}}}async function QMt(e,t,n){let i=e._searchText;if(VFe(i)){e.showSuggestions();return}e._isSearchInProgress=!0,e._wasGeocodeCancelled=!1;let o,r;for(o=0;o<t.length;o++){if(e._wasGeocodeCancelled)return;if(r=await jMt(t[o],i,n),l(r)&&r.state==="fulfilled"&&r.value.length>0)break}if(e._wasGeocodeCancelled)return;e._isSearchInProgress=!1,ase(e);let s=r.value;if(r.state==="fulfilled"&&l(s)&&s.length>0){e._searchText=s[0].displayName,e.destinationFound(e,s[0].destination);let a=ZFe(e,y1.getCreditsFromResult(s[0]));l(a)||sse(e,t[o].credit);return}e._searchText=`${i} (not found)`}function sse(e,t){l(t)&&!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&(e._scene.frameState.creditDisplay.addStaticCredit(t),e._previousCredits.push(t))}function ZFe(e,t){return l(t)&&t.forEach(n=>sse(e,n)),t}function ase(e){!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&e._previousCredits.forEach(t=>{e._scene.frameState.creditDisplay.removeStaticCredit(t)}),e._previousCredits.length=0}function qMt(e,t){let n=wn(e._viewContainer),i=n.getElementsByClassName("search-results")[0],r=n.getElementsByTagName("li")[t];if(t===0){i.scrollTop=0;return}let s=r.offsetTop;s+r.clientHeight>i.clientHeight?i.scrollTop=s+r.clientHeight:s<i.scrollTop&&(i.scrollTop=s)}function $Mt(e){e._isSearchInProgress&&(e._isSearchInProgress=!1,e._wasGeocodeCancelled=!0)}function VFe(e){return/^\s*$/.test(e)}function CFe(e){Ge.getObservable(e,"_suggestions").removeAll()}async function ekt(e){if(!e.autoComplete)return;let t=e._searchText;if(CFe(e),ase(e),!VFe(t))for(let n of e._geocoderServices){let i=await n.geocode(t,Fy.AUTOCOMPLETE);if(e._suggestions=e._suggestions.concat(i),i.length>0){let o=!0;i.forEach(r=>{let s=y1.getCreditsFromResult(r);o=o&&!l(s),ZFe(e,s)}),o&&sse(e,n.credit)}if(e._suggestions.length>=5)return}}tp.flyToDestination=JMt;tp._updateSearchSuggestions=ekt;tp._adjustSuggestionsScroll=qMt;tp.prototype.isDestroyed=function(){return!1};tp.prototype.destroy=function(){return this._suggestionSubscription.dispose(),ase(this),me(this)};var _U=tp;var tkt="M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z",nkt="M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z";function $H(e){let t=wn(e.container),n=new _U(e);n._startSearchPath=tkt,n._stopSearchPath=nkt;let i=document.createElement("form");i.setAttribute("data-bind","submit: search");let o=document.createElement("input");o.type="search",o.className="cesium-geocoder-input",o.setAttribute("placeholder","Enter an address or landmark..."),o.setAttribute("data-bind",'textInput: searchText,disable: isSearchInProgress,event: { keyup: handleKeyUp, keydown: handleKeyDown, mouseover: deselectSuggestion },css: { "cesium-geocoder-input-wide" : keepExpanded || searchText.length > 0 },hasFocus: _focusTextbox'),this._onTextBoxFocus=function(){setTimeout(function(){o.select()},0)},o.addEventListener("focus",this._onTextBoxFocus,!1),i.appendChild(o),this._textBox=o;let r=document.createElement("span");r.className="cesium-geocoder-searchButton",r.setAttribute("data-bind","click: search,cesiumSvgPath: { path: isSearchInProgress ? _stopSearchPath : _startSearchPath, width: 32, height: 32 }"),i.appendChild(r),t.appendChild(i);let s=document.createElement("div");s.className="search-results",s.setAttribute("data-bind","visible: _suggestionsVisible");let a=document.createElement("ul");a.setAttribute("data-bind","foreach: _suggestions");let c=document.createElement("li");a.appendChild(c),c.setAttribute("data-bind","text: $data.displayName, click: $parent.activateSuggestion, event: { mouseover: $parent.handleMouseover}, css: { active: $data === $parent._selectedSuggestion }"),s.appendChild(a),t.appendChild(s),Ge.applyBindings(n,i),Ge.applyBindings(n,s),this._container=t,this._searchSuggestionsContainer=s,this._viewModel=n,this._form=i,this._onInputBegin=function(d){let u=d.target;typeof d.composedPath=="function"&&(u=d.composedPath()[0]),t.contains(u)||(n._focusTextbox=!1,n.hideSuggestions())},this._onInputEnd=function(d){n._focusTextbox=!0,n.showSuggestions()},hn.supportsPointerEvents()?(document.addEventListener("pointerdown",this._onInputBegin,!0),t.addEventListener("pointerup",this._onInputEnd,!0),t.addEventListener("pointercancel",this._onInputEnd,!0)):(document.addEventListener("mousedown",this._onInputBegin,!0),t.addEventListener("mouseup",this._onInputEnd,!0),document.addEventListener("touchstart",this._onInputBegin,!0),t.addEventListener("touchend",this._onInputEnd,!0),t.addEventListener("touchcancel",this._onInputEnd,!0))}Object.defineProperties($H.prototype,{container:{get:function(){return this._container}},searchSuggestionsContainer:{get:function(){return this._searchSuggestionsContainer}},viewModel:{get:function(){return this._viewModel}}});$H.prototype.isDestroyed=function(){return!1};$H.prototype.destroy=function(){let e=this._container;return hn.supportsPointerEvents()?(document.removeEventListener("pointerdown",this._onInputBegin,!0),e.removeEventListener("pointerup",this._onInputEnd,!0)):(document.removeEventListener("mousedown",this._onInputBegin,!0),e.removeEventListener("mouseup",this._onInputEnd,!0),document.removeEventListener("touchstart",this._onInputBegin,!0),e.removeEventListener("touchend",this._onInputEnd,!0)),this._viewModel.destroy(),Ge.cleanNode(this._form),Ge.cleanNode(this._searchSuggestionsContainer),e.removeChild(this._form),e.removeChild(this._searchSuggestionsContainer),this._textBox.removeEventListener("focus",this._onTextBoxFocus,!1),me(this)};var SU=$H;var Eir=x(T(),1);var Sir=x(T(),1);function RFe(e,t){this._scene=e,this._duration=t;let n=this;this._command=In(function(){n._scene.camera.flyHome(n._duration)}),this.tooltip="View Home",Ge.track(this,["tooltip"])}Object.defineProperties(RFe.prototype,{scene:{get:function(){return this._scene}},command:{get:function(){return this._command}},duration:{get:function(){return this._duration},set:function(e){this._duration=e}}});var ZU=RFe;function eK(e,t,n){e=wn(e);let i=new ZU(t,n);i._svgPath="M14,4l-10,8.75h20l-4.25-3.7188v-4.6562h-2.812v2.1875l-2.938-2.5625zm-7.0938,9.906v10.094h14.094v-10.094h-14.094zm2.1876,2.313h3.3122v4.25h-3.3122v-4.25zm5.8442,1.281h3.406v6.438h-3.406v-6.438z";let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-toolbar-button cesium-home-button",o.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 28, height: 28 }"),e.appendChild(o),Ge.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(eK.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});eK.prototype.isDestroyed=function(){return!1};eK.prototype.destroy=function(){return Ge.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var VU=eK;var wir=x(T(),1);var Fir=x(T(),1);function ikt(e,t){t.currentTarget.parentElement.parentElement.querySelector(`#${e.name}-expander`).classList.toggle("active"),t.currentTarget.textContent=t.currentTarget.textContent==="+"?"-":"+"}function AFe(e,t){Ge.track(e);for(let n=0;n<e.sublayers.length;n++)AFe(e.sublayers[n],t)}function tK(e){return e.modelName==="FullModel"}function EFe(e){return e.modelName==="Overview"}function LFe(e){return EFe(e)||tK(e)}function GFe(e,t){if(LFe(e)){e.visibility=!1;for(let i=0;i<e.sublayers.length;i++)e.sublayers[i].visibility=!0;let n={name:e.name,modelName:e.modelName,disable:Ge.observable(!1),index:t.sublayers.length};return t.topLayers.push(n),t.sublayers.push(e),n}}function okt(e,t){if(LFe(e)){t.sublayers.forEach(i=>i.visibility=!1),t.sublayers[e.index].visibility=!0;let n=document.getElementById("bsl-wrapper");tK(e)?(t.currentLevel=t.selectedLevel,n.style.display="block"):(t.selectedLevel=t.currentLevel,t.currentLevel="All",n.style.display="none")}}async function rkt(e,t){try{let n=e.getAttributeNames();for(let i=0;i<n.length;i++)if(n[i]==="BldgLevel"){let o=e.getAttributeValues(n[i]);for(let r=0;r<o.length;r++)t.push(o[r])}t.sort((i,o)=>i-o),t.unshift("All")}catch(n){console.log(`There was an error getting attributes: ${n}`)}}function skt(e){let t=this;this.levels=[],this.viewModel={sublayers:[],levels:this.levels,currentLevel:Ge.observable(),selectedLevel:"All",topLayers:[{name:"Select a layer to explore...",disable:Ge.observable(!0),index:-1}],currentLayer:Ge.observable(),expandClickHandler:ikt,setOptionDisable:function(i,o){Ge.applyBindingsToNode(i,{disable:o.disable},o)},defaultLayer:void 0},this.viewModel.currentLayer.subscribe(function(i){okt(i,t.viewModel)});let n=e.sublayers;for(let i=0;i<n.length;i++){AFe(n[i],this.viewModel);let o=GFe(n[i],this.viewModel);l(o)&&(EFe(o)||!l(this.viewModel.defaultLayer)&&tK(o))&&(this.viewModel.defaultLayer=o)}if(this.viewModel.topLayers.length===1&&n.length>0){e.show=!1;let i={name:"Full Model",modelName:"FullModel",visibility:e.show,sublayers:e.sublayers};this.viewModel.defaultLayer=GFe(i,this.viewModel),this.viewModel.currentLayer.subscribe(function(o){e.show=tK(o)})}else this.viewModel.topLayers.length===1&&(this.viewModel.topLayers[0].name="Building layers not found");return rkt(e,this.levels),this.viewModel.currentLevel.subscribe(function(i){i!=="All"?e.filterByAttributes([{name:"BldgLevel",values:[i]}]):e.filterByAttributes()}),this.viewModel}var CU=skt;function akt(e,t){let n=document.getElementById(e),i=document.createElement("div");i.classList.add("cesium-viewer-i3s-explorer"),i.innerHTML=` <h3>Building explorer</h3> <select data-bind="options: topLayers, optionsText: 'name', optionsAfterRender: setOptionDisable, value: currentLayer" ></select> <div id="bsl-wrapper"> <h3>Select Level</h3> <select data-bind="options: levels, value: currentLevel"></select> <h3>Disciplines & Categories</h3> <ul class="layersList" data-bind="foreach: sublayers"> <ul class="layersList" data-bind="foreach: sublayers.sort(function (l, r) { return l.name.localeCompare(r.name) })"> <li> <div class="li-wrapper"> <span class="expandItem" data-bind="click: $root.expandClickHandler" >+</span > <input type="checkbox" data-bind="checked: visibility, valueUpdate: 'input', attr: { id: name}" /> <label data-bind="attr: { for: name}"> <span data-bind="text: name"></span> </label> </div> <ul class="nested" data-bind="attr: { id: name + '-expander'}"> <li data-bind="foreach: sublayers.sort(function (l, r) { return l.name.localeCompare(r.name) })"> <div class="li-wrapper"> <input type="checkbox" data-bind="checked: visibility, valueUpdate: 'input', attr: { id: name}" /> <label data-bind="attr: { for: name}"> <span data-bind="text: name"></span> </label> </div> </li> </ul> </li> </ul> </ul> </div>`,n.appendChild(i);let o=new CU(t);Ge.track(o),Ge.applyBindings(o,n),l(o.defaultLayer)&&(o.currentLayer=o.defaultLayer)}var cse=akt;var jir=x(T(),1);var Dir=x(T(),1);var ckt="M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4853444 22.104033 11.423165 24.0625 13.84375 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 8.975298 28.305952 7.03125 25.875 7.03125 L 13.84375 7.03125 z",lkt="M 27.34375 1.65625 L 5.28125 27.9375 L 8.09375 30.3125 L 30.15625 4.03125 L 27.34375 1.65625 z M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4724893 20.232036 9.5676108 20.7379 9.75 21.21875 L 21.65625 7.03125 L 13.84375 7.03125 z M 28.21875 7.71875 L 14.53125 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 9.8371439 29.456025 8.4902779 28.21875 7.71875 z";function lse(){this._cameraClicked=new Se,this._closeClicked=new Se,this.maxHeight=500,this.enableCamera=!1,this.isCameraTracking=!1,this.showInfo=!1,this.titleText="",this.description="",Ge.track(this,["showInfo","titleText","description","maxHeight","enableCamera","isCameraTracking"]),this._loadingIndicatorHtml='<div class="cesium-infoBox-loadingContainer"><span class="cesium-infoBox-loading"></span></div>',this.cameraIconPath=void 0,Ge.defineProperty(this,"cameraIconPath",{get:function(){return!this.enableCamera||this.isCameraTracking?lkt:ckt}}),Ge.defineProperty(this,"_bodyless",{get:function(){return!l(this.description)||this.description.length===0}})}lse.prototype.maxHeightOffset=function(e){return`${this.maxHeight-e}px`};Object.defineProperties(lse.prototype,{cameraClicked:{get:function(){return this._cameraClicked}},closeClicked:{get:function(){return this._closeClicked}}});var RU=lse;function nK(e){e=wn(e);let t=document.createElement("div");t.className="cesium-infoBox",t.setAttribute("data-bind",'css: { "cesium-infoBox-visible" : showInfo, "cesium-infoBox-bodyless" : _bodyless }'),e.appendChild(t);let n=document.createElement("div");n.className="cesium-infoBox-title",n.setAttribute("data-bind","text: titleText"),t.appendChild(n);let i=document.createElement("button");i.type="button",i.className="cesium-button cesium-infoBox-camera",i.setAttribute("data-bind",'attr: { title: "Focus camera on object" },click: function () { cameraClicked.raiseEvent(this); },enable: enableCamera,cesiumSvgPath: { path: cameraIconPath, width: 32, height: 32 }'),t.appendChild(i);let o=document.createElement("button");o.type="button",o.className="cesium-infoBox-close",o.setAttribute("data-bind","click: function () { closeClicked.raiseEvent(this); }"),o.innerHTML="×",t.appendChild(o);let r=document.createElement("iframe");r.className="cesium-infoBox-iframe",r.setAttribute("sandbox","allow-same-origin allow-popups allow-forms"),r.setAttribute("data-bind","style : { maxHeight : maxHeightOffset(40) }"),r.setAttribute("allowfullscreen",!0),t.appendChild(r);let s=new RU;Ge.applyBindings(s,t),this._container=e,this._element=t,this._frame=r,this._viewModel=s,this._descriptionSubscription=void 0;let a=this;r.addEventListener("load",function(){let c=r.contentDocument,d=c.createElement("link");d.href=qt("Widgets/InfoBox/InfoBoxDescription.css"),d.rel="stylesheet",d.type="text/css";let u=c.createElement("div");u.className="cesium-infoBox-description",c.head.appendChild(d),c.body.appendChild(u),a._descriptionSubscription=bc(s,"description",function(m){r.style.height="5px",u.innerHTML=m;let p=null,b=u.firstElementChild;if(b!==null&&u.childNodes.length===1){let y=window.getComputedStyle(b);if(y!==null){let _=y["background-color"],S=U.fromCssColorString(_);l(S)&&S.alpha!==0&&(p=y["background-color"])}}t.style["background-color"]=p;let f=u.getBoundingClientRect().height;r.style.height=`${f}px`})}),r.setAttribute("src","about:blank")}Object.defineProperties(nK.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}},frame:{get:function(){return this._frame}}});nK.prototype.isDestroyed=function(){return!1};nK.prototype.destroy=function(){let e=this._container;return Ge.cleanNode(this._element),e.removeChild(this._element),l(this._descriptionSubscription)&&this._descriptionSubscription.dispose(),me(this)};var GU=nK;var aor=x(T(),1);var eor=x(T(),1);function WFe(){this.showInstructions=!1;let e=this;this._command=In(function(){e.showInstructions=!e.showInstructions}),this._showClick=In(function(){e._touch=!1}),this._showTouch=In(function(){e._touch=!0}),this._touch=!1,this.tooltip="Navigation Instructions",Ge.track(this,["tooltip","showInstructions","_touch"])}Object.defineProperties(WFe.prototype,{command:{get:function(){return this._command}},showClick:{get:function(){return this._showClick}},showTouch:{get:function(){return this._showTouch}}});var AU=WFe;function iK(e){let t=wn(e.container),n=new AU,i=e.instructionsInitiallyVisible??!1;n.showInstructions=i,n._svgPath="M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.328,24.371h-2.707v-2.596h2.707V24.371zM17.328,19.003v0.858h-2.707v-1.057c0-3.19,3.63-3.696,3.63-5.963c0-1.034-0.924-1.826-2.134-1.826c-1.254,0-2.354,0.924-2.354,0.924l-1.541-1.915c0,0,1.519-1.584,4.137-1.584c2.487,0,4.796,1.54,4.796,4.136C21.156,16.208,17.328,16.627,17.328,19.003z";let o=document.createElement("span");o.className="cesium-navigationHelpButton-wrapper",t.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button cesium-navigation-help-button",r.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 32, height: 32 }"),o.appendChild(r);let s=document.createElement("div");s.className="cesium-navigation-help",s.setAttribute("data-bind",'css: { "cesium-navigation-help-visible" : showInstructions}'),o.appendChild(s);let a=document.createElement("button");a.type="button",a.className="cesium-navigation-button cesium-navigation-button-left",a.setAttribute("data-bind",'click: showClick, css: {"cesium-navigation-button-selected": !_touch, "cesium-navigation-button-unselected": _touch}');let c=document.createElement("img");c.src=qt("Widgets/Images/NavigationHelp/Mouse.svg"),c.className="cesium-navigation-button-icon",c.style.width="25px",c.style.height="25px",a.appendChild(c),a.appendChild(document.createTextNode("Mouse"));let d=document.createElement("button");d.type="button",d.className="cesium-navigation-button cesium-navigation-button-right",d.setAttribute("data-bind",'click: showTouch, css: {"cesium-navigation-button-selected": _touch, "cesium-navigation-button-unselected": !_touch}');let u=document.createElement("img");u.src=qt("Widgets/Images/NavigationHelp/Touch.svg"),u.className="cesium-navigation-button-icon",u.style.width="25px",u.style.height="25px",d.appendChild(u),d.appendChild(document.createTextNode("Touch")),s.appendChild(a),s.appendChild(d);let m=document.createElement("div");m.className="cesium-click-navigation-help cesium-navigation-help-instructions",m.setAttribute("data-bind",'css: { "cesium-click-navigation-help-visible" : !_touch}'),m.innerHTML=` <table> <tr> <td><img src="${qt("Widgets/Images/NavigationHelp/MouseLeft.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-pan">Pan view</div> <div class="cesium-navigation-help-details">Left click + drag</div> </td> </tr> <tr> <td><img src="${qt("Widgets/Images/NavigationHelp/MouseRight.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">Zoom view</div> <div class="cesium-navigation-help-details">Right click + drag, or</div> <div class="cesium-navigation-help-details">Mouse wheel scroll</div> </td> </tr> <tr> <td><img src="${qt("Widgets/Images/NavigationHelp/MouseMiddle.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">Rotate view</div> <div class="cesium-navigation-help-details">Middle click + drag, or</div> <div class="cesium-navigation-help-details">CTRL + Left/Right click + drag</div> </td> </tr> </table>`,s.appendChild(m);let p=document.createElement("div");p.className="cesium-touch-navigation-help cesium-navigation-help-instructions",p.setAttribute("data-bind",'css: { "cesium-touch-navigation-help-visible" : _touch}'),p.innerHTML=` <table> <tr> <td><img src="${qt("Widgets/Images/NavigationHelp/TouchDrag.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-pan">Pan view</div> <div class="cesium-navigation-help-details">One finger drag</div> </td> </tr> <tr> <td><img src="${qt("Widgets/Images/NavigationHelp/TouchZoom.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">Zoom view</div> <div class="cesium-navigation-help-details">Two finger pinch</div> </td> </tr> <tr> <td><img src="${qt("Widgets/Images/NavigationHelp/TouchTilt.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">Tilt view</div> <div class="cesium-navigation-help-details">Two finger drag, same direction</div> </td> </tr> <tr> <td><img src="${qt("Widgets/Images/NavigationHelp/TouchRotate.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-tilt">Rotate view</div> <div class="cesium-navigation-help-details">Two finger drag, opposite direction</div> </td> </tr> </table>`,s.appendChild(p),Ge.applyBindings(n,o),this._container=t,this._viewModel=n,this._wrapper=o,this._closeInstructions=function(b){o.contains(b.target)||(n.showInstructions=!1)},hn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeInstructions,!0):(document.addEventListener("mousedown",this._closeInstructions,!0),document.addEventListener("touchstart",this._closeInstructions,!0))}Object.defineProperties(iK.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});iK.prototype.isDestroyed=function(){return!1};iK.prototype.destroy=function(){return hn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeInstructions,!0):(document.removeEventListener("mousedown",this._closeInstructions,!0),document.removeEventListener("touchstart",this._closeInstructions,!0)),Ge.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),me(this)};var EU=iK;var Sor=x(T(),1);var por=x(T(),1);function dse(e){this._scene=e.scene,this.lowFrameRateMessage=e.lowFrameRateMessage??"This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.",this.lowFrameRateMessageDismissed=!1,this.showingLowFrameRateMessage=!1,Ge.track(this,["lowFrameRateMessage","lowFrameRateMessageDismissed","showingLowFrameRateMessage"]);let t=this;this._dismissMessage=In(function(){t.showingLowFrameRateMessage=!1,t.lowFrameRateMessageDismissed=!0});let n=W9.fromScene(e.scene);this._unsubscribeLowFrameRate=n.lowFrameRate.addEventListener(function(){t.lowFrameRateMessageDismissed||(t.showingLowFrameRateMessage=!0)}),this._unsubscribeNominalFrameRate=n.nominalFrameRate.addEventListener(function(){t.showingLowFrameRateMessage=!1})}Object.defineProperties(dse.prototype,{scene:{get:function(){return this._scene}},dismissMessage:{get:function(){return this._dismissMessage}}});dse.prototype.destroy=function(){return this._unsubscribeLowFrameRate(),this._unsubscribeNominalFrameRate(),me(this)};var LU=dse;function oK(e){let t=wn(e.container),n=new LU(e),i=document.createElement("div");i.className="cesium-performance-watchdog-message-area",i.setAttribute("data-bind","visible: showingLowFrameRateMessage");let o=document.createElement("button");o.setAttribute("type","button"),o.className="cesium-performance-watchdog-message-dismiss",o.innerHTML="×",o.setAttribute("data-bind","click: dismissMessage"),i.appendChild(o);let r=document.createElement("div");r.className="cesium-performance-watchdog-message",r.setAttribute("data-bind","html: lowFrameRateMessage"),i.appendChild(r),t.appendChild(i),Ge.applyBindings(n,i),this._container=t,this._viewModel=n,this._element=i}Object.defineProperties(oK.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});oK.prototype.isDestroyed=function(){return!1};oK.prototype.destroy=function(){return this._viewModel.destroy(),Ge.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var WU=oK;var Por=x(T(),1);var Aor=x(T(),1);function rK(e){this._scene=e,this._orthographic=e.camera.frustum instanceof bn,this._flightInProgress=!1,this.dropDownVisible=!1,this.tooltipPerspective="Perspective Projection",this.tooltipOrthographic="Orthographic Projection",this.selectedTooltip=void 0,this.sceneMode=e.mode,Ge.track(this,["_orthographic","_flightInProgress","sceneMode","dropDownVisible","tooltipPerspective","tooltipOrthographic"]);let t=this;Ge.defineProperty(this,"selectedTooltip",function(){return t._orthographic?t.tooltipOrthographic:t.tooltipPerspective}),this._toggleDropDown=In(function(){t.sceneMode===se.SCENE2D||t._flightInProgress||(t.dropDownVisible=!t.dropDownVisible)}),this._eventHelper=new Ir,this._eventHelper.add(e.morphComplete,function(n,i,o,r){t.sceneMode=o,t._orthographic=o===se.SCENE2D||t._scene.camera.frustum instanceof bn}),this._eventHelper.add(e.preRender,function(){t._flightInProgress=l(e.camera._currentFlight)}),this._switchToPerspective=In(function(){t.sceneMode!==se.SCENE2D&&(t._scene.camera.switchToPerspectiveFrustum(),t._orthographic=!1,t.dropDownVisible=!1)}),this._switchToOrthographic=In(function(){t.sceneMode!==se.SCENE2D&&(t._scene.camera.switchToOrthographicFrustum(),t._orthographic=!0,t.dropDownVisible=!1)}),this._sceneMode=se}Object.defineProperties(rK.prototype,{scene:{get:function(){return this._scene}},toggleDropDown:{get:function(){return this._toggleDropDown}},switchToPerspective:{get:function(){return this._switchToPerspective}},switchToOrthographic:{get:function(){return this._switchToOrthographic}},isOrthographicProjection:{get:function(){return this._orthographic}}});rK.prototype.isDestroyed=function(){return!1};rK.prototype.destroy=function(){this._eventHelper.removeAll(),me(this)};var vU=rK;var dkt="M 28.15625,10.4375 9.125,13.21875 13.75,43.25 41.75,55.09375 50.8125,37 54.5,11.9375 z m 0.125,3 19.976451,0.394265 L 43.03125,16.875 22.6875,14.28125 z M 50.971746,15.705477 47.90625,36.03125 42.53125,46 44.84375,19.3125 z M 12.625,16.03125 l 29.15625,3.6875 -2.65625,31 L 16.4375,41.125 z",ukt="m 31.560594,6.5254438 -20.75,12.4687502 0.1875,24.5625 22.28125,11.8125 19.5,-12 0.65625,-0.375 0,-0.75 0.0312,-23.21875 z m 0.0625,3.125 16.65625,9.5000002 -16.125,10.28125 -17.34375,-9.71875 z m 18.96875,11.1875002 0.15625,20.65625 -17.46875,10.59375 0.15625,-20.28125 z m -37.0625,1.25 17.21875,9.625 -0.15625,19.21875 -16.9375,-9 z";function sK(e,t){e=wn(e);let n=new vU(t);n._perspectivePath=dkt,n._orthographicPath=ukt;let i=document.createElement("span");i.className="cesium-projectionPicker-wrapper cesium-toolbar-button",e.appendChild(i);let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-toolbar-button",o.setAttribute("data-bind",'css: { "cesium-projectionPicker-buttonPerspective": !_orthographic, "cesium-projectionPicker-buttonOrthographic": _orthographic, "cesium-button-disabled" : sceneMode === _sceneMode.SCENE2D || _flightInProgress, "cesium-projectionPicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),o.innerHTML='<!-- ko cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64, css: "cesium-projectionPicker-iconPerspective" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64, css: "cesium-projectionPicker-iconOrthographic" } --><!-- /ko -->',i.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",r.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && _orthographic), "cesium-projectionPicker-none" : !_orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible },attr: { title: tooltipPerspective },click: switchToPerspective,cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64 }'),i.appendChild(r);let s=document.createElement("button");s.type="button",s.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",s.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && !_orthographic), "cesium-projectionPicker-none" : _orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible},attr: { title: tooltipOrthographic },click: switchToOrthographic,cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64 }'),i.appendChild(s),Ge.applyBindings(n,i),this._viewModel=n,this._container=e,this._wrapper=i,this._closeDropDown=function(a){i.contains(a.target)||(n.dropDownVisible=!1)},hn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(sK.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});sK.prototype.isDestroyed=function(){return!1};sK.prototype.destroy=function(){return this._viewModel.destroy(),hn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ge.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),me(this)};var FU=sK;var Jor=x(T(),1);var Uor=x(T(),1);function aK(e,t){this._scene=e;let n=this,i=function(o,r,s,a){n.sceneMode=s,n.dropDownVisible=!1};this._eventHelper=new Ir,this._eventHelper.add(e.morphStart,i),this._duration=t??2,this.sceneMode=e.mode,this.dropDownVisible=!1,this.tooltip2D="2D",this.tooltip3D="3D",this.tooltipColumbusView="Columbus View",Ge.track(this,["sceneMode","dropDownVisible","tooltip2D","tooltip3D","tooltipColumbusView"]),this.selectedTooltip=void 0,Ge.defineProperty(this,"selectedTooltip",function(){let o=n.sceneMode;return o===se.SCENE2D?n.tooltip2D:o===se.SCENE3D?n.tooltip3D:n.tooltipColumbusView}),this._toggleDropDown=In(function(){n.dropDownVisible=!n.dropDownVisible}),this._morphTo2D=In(function(){e.morphTo2D(n._duration)}),this._morphTo3D=In(function(){e.morphTo3D(n._duration)}),this._morphToColumbusView=In(function(){e.morphToColumbusView(n._duration)}),this._sceneMode=se}Object.defineProperties(aK.prototype,{scene:{get:function(){return this._scene}},duration:{get:function(){return this._duration},set:function(e){this._duration=e}},toggleDropDown:{get:function(){return this._toggleDropDown}},morphTo2D:{get:function(){return this._morphTo2D}},morphTo3D:{get:function(){return this._morphTo3D}},morphToColumbusView:{get:function(){return this._morphToColumbusView}}});aK.prototype.isDestroyed=function(){return!1};aK.prototype.destroy=function(){this._eventHelper.removeAll(),me(this)};var IU=aK;var mkt="m 32.401392,4.9330437 c -7.087603,0 -14.096095,2.884602 -19.10793,7.8946843 -5.0118352,5.010083 -7.9296167,11.987468 -7.9296167,19.072999 0,7.085531 2.9177815,14.097848 7.9296167,19.107931 4.837653,4.835961 11.541408,7.631372 18.374354,7.82482 0.05712,0.01231 0.454119,0.139729 0.454119,0.139729 l 0.03493,-0.104797 c 0.08246,7.84e-4 0.162033,0.03493 0.244525,0.03493 0.08304,0 0.161515,-0.03414 0.244526,-0.03493 l 0.03493,0.104797 c 0,0 0.309474,-0.129487 0.349323,-0.139729 6.867765,-0.168094 13.582903,-2.965206 18.444218,-7.82482 2.558195,-2.5573 4.551081,-5.638134 5.903547,-8.977584 1.297191,-3.202966 2.02607,-6.661489 2.02607,-10.130347 0,-6.237309 -2.366261,-12.31219 -6.322734,-17.116794 -0.0034,-0.02316 0.0049,-0.04488 0,-0.06986 -0.01733,-0.08745 -0.104529,-0.278855 -0.104797,-0.279458 -5.31e-4,-0.0012 -0.522988,-0.628147 -0.523984,-0.62878 -3.47e-4,-2.2e-4 -0.133444,-0.03532 -0.244525,-0.06987 C 51.944299,13.447603 51.751076,13.104317 51.474391,12.827728 46.462556,7.8176457 39.488996,4.9330437 32.401392,4.9330437 z m -2.130866,3.5281554 0.104797,9.6762289 c -4.111695,-0.08361 -7.109829,-0.423664 -9.257041,-0.943171 1.198093,-2.269271 2.524531,-4.124404 3.91241,-5.414496 2.167498,-2.0147811 3.950145,-2.8540169 5.239834,-3.3185619 z m 2.794579,0 c 1.280302,0.4754953 3.022186,1.3285948 5.065173,3.2486979 1.424667,1.338973 2.788862,3.303645 3.982275,5.728886 -2.29082,0.403367 -5.381258,0.621049 -8.942651,0.698645 L 33.065105,8.4611991 z m 5.728886,0.2445256 c 4.004072,1.1230822 7.793098,3.1481363 10.724195,6.0782083 0.03468,0.03466 0.07033,0.06991 0.104797,0.104797 -0.45375,0.313891 -0.923054,0.663002 -1.956205,1.082899 -0.647388,0.263114 -1.906242,0.477396 -2.829511,0.733577 -1.382296,-2.988132 -3.027146,-5.368585 -4.785716,-7.0213781 -0.422866,-0.397432 -0.835818,-0.6453247 -1.25756,-0.9781032 z m -15.33525,0.7685092 c -0.106753,0.09503 -0.207753,0.145402 -0.31439,0.244526 -1.684973,1.5662541 -3.298068,3.8232211 -4.680919,6.5672591 -0.343797,-0.14942 -1.035052,-0.273198 -1.292493,-0.419186 -0.956528,-0.542427 -1.362964,-1.022024 -1.537018,-1.292493 -0.0241,-0.03745 -0.01868,-0.0401 -0.03493,-0.06986 2.250095,-2.163342 4.948824,-3.869984 7.859752,-5.0302421 z m -9.641296,7.0912431 c 0.464973,0.571618 0.937729,1.169056 1.956205,1.746612 0.349907,0.198425 1.107143,0.335404 1.537018,0.523983 -1.20166,3.172984 -1.998037,7.051901 -2.165798,11.772162 C 14.256557,30.361384 12.934823,30.161483 12.280427,29.90959 10.644437,29.279855 9.6888882,28.674891 9.1714586,28.267775 8.6540289,27.860658 8.6474751,27.778724 8.6474751,27.778724 l -0.069864,0.03493 C 9.3100294,23.691285 11.163248,19.798527 13.817445,16.565477 z m 37.552149,0.523984 c 2.548924,3.289983 4.265057,7.202594 4.890513,11.318043 -0.650428,0.410896 -1.756876,1.001936 -3.563088,1.606882 -1.171552,0.392383 -3.163859,0.759153 -4.960377,1.117832 -0.04367,-4.752703 -0.784809,-8.591423 -1.88634,-11.807094 0.917574,-0.263678 2.170552,-0.486495 2.864443,-0.76851 1.274693,-0.518066 2.003942,-1.001558 2.654849,-1.467153 z m -31.439008,2.619917 c 2.487341,0.672766 5.775813,1.137775 10.479669,1.222628 l 0.104797,10.689263 0,0.03493 0,0.733577 c -5.435005,-0.09059 -9.512219,-0.519044 -12.610536,-1.117831 0.106127,-4.776683 0.879334,-8.55791 2.02607,-11.562569 z m 23.264866,0.31439 c 1.073459,3.067541 1.833795,6.821314 1.816476,11.702298 -3.054474,0.423245 -7.062018,0.648559 -11.702298,0.698644 l 0,-0.838373 -0.104796,-10.654331 c 4.082416,-0.0864 7.404468,-0.403886 9.990618,-0.908238 z M 8.2632205,30.922625 c 0.7558676,0.510548 1.5529563,1.013339 3.0041715,1.57195 0.937518,0.360875 2.612202,0.647642 3.91241,0.978102 0.112814,3.85566 0.703989,7.107756 1.606883,9.920754 -1.147172,-0.324262 -2.644553,-0.640648 -3.423359,-0.978102 -1.516688,-0.657177 -2.386627,-1.287332 -2.864443,-1.71168 -0.477816,-0.424347 -0.489051,-0.489051 -0.489051,-0.489051 L 9.8002387,40.319395 C 8.791691,37.621767 8.1584238,34.769583 8.1584238,31.900727 c 0,-0.330153 0.090589,-0.648169 0.1047967,-0.978102 z m 48.2763445,0.419186 c 0.0047,0.188973 0.06986,0.36991 0.06986,0.558916 0,2.938869 -0.620228,5.873558 -1.676747,8.628261 -0.07435,0.07583 -0.06552,0.07411 -0.454119,0.349323 -0.606965,0.429857 -1.631665,1.042044 -3.318562,1.676747 -1.208528,0.454713 -3.204964,0.850894 -5.135038,1.25756 0.84593,-2.765726 1.41808,-6.005357 1.606883,-9.815957 2.232369,-0.413371 4.483758,-0.840201 5.938479,-1.327425 1.410632,-0.472457 2.153108,-0.89469 2.96924,-1.327425 z m -38.530252,2.864443 c 3.208141,0.56697 7.372279,0.898588 12.575603,0.978103 l 0.174662,9.885821 c -4.392517,-0.06139 -8.106722,-0.320566 -10.863925,-0.803441 -1.051954,-2.664695 -1.692909,-6.043794 -1.88634,-10.060483 z m 26.793022,0.31439 c -0.246298,3.923551 -0.877762,7.263679 -1.816476,9.885822 -2.561957,0.361954 -5.766249,0.560708 -9.431703,0.62878 l -0.174661,-9.815957 c 4.491734,-0.04969 8.334769,-0.293032 11.42284,-0.698645 z M 12.035901,44.860585 c 0.09977,0.04523 0.105535,0.09465 0.209594,0.139729 1.337656,0.579602 3.441099,1.058072 5.589157,1.537018 1.545042,3.399208 3.548524,5.969402 5.589157,7.789888 -3.034411,-1.215537 -5.871615,-3.007978 -8.174142,-5.309699 -1.245911,-1.245475 -2.271794,-2.662961 -3.213766,-4.156936 z m 40.69605,0 c -0.941972,1.493975 -1.967855,2.911461 -3.213765,4.156936 -2.74253,2.741571 -6.244106,4.696717 -9.955686,5.868615 0.261347,-0.241079 0.507495,-0.394491 0.768509,-0.663713 1.674841,-1.727516 3.320792,-4.181056 4.645987,-7.265904 2.962447,-0.503021 5.408965,-1.122293 7.161107,-1.781544 0.284034,-0.106865 0.337297,-0.207323 0.593848,-0.31439 z m -31.404076,2.305527 c 2.645807,0.376448 5.701178,0.649995 9.466635,0.698645 l 0.139729,7.789888 c -1.38739,-0.480844 -3.316218,-1.29837 -5.659022,-3.388427 -1.388822,-1.238993 -2.743668,-3.0113 -3.947342,-5.100106 z m 20.365491,0.104797 c -1.04872,2.041937 -2.174337,3.779068 -3.353494,4.995309 -1.853177,1.911459 -3.425515,2.82679 -4.611055,3.353494 l -0.139729,-7.789887 c 3.13091,-0.05714 5.728238,-0.278725 8.104278,-0.558916 z",hkt="m 2.9825053,17.550598 0,1.368113 0,26.267766 0,1.368113 1.36811,0 54.9981397,0 1.36811,0 0,-1.368113 0,-26.267766 0,-1.368113 -1.36811,0 -54.9981397,0 -1.36811,0 z m 2.73623,2.736226 10.3292497,0 0,10.466063 -10.3292497,0 0,-10.466063 z m 13.0654697,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 10.32926,0 0,10.466063 -10.32926,0 0,-10.466063 z m -41.9326497,13.202288 10.3292497,0 0,10.329252 -10.3292497,0 0,-10.329252 z m 13.0654697,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 10.32926,0 0,10.329252 -10.32926,0 0,-10.329252 z",fkt="m 14.723969,17.675598 -0.340489,0.817175 -11.1680536,26.183638 -0.817175,1.872692 2.076986,0 54.7506996,0 2.07698,0 -0.81717,-1.872692 -11.16805,-26.183638 -0.34049,-0.817175 -0.91933,0 -32.414586,0 -0.919322,0 z m 1.838643,2.723916 6.196908,0 -2.928209,10.418977 -7.729111,0 4.460412,-10.418977 z m 9.02297,0 4.903049,0 0,10.418977 -7.831258,0 2.928209,-10.418977 z m 7.626964,0 5.584031,0 2.62176,10.418977 -8.205791,0 0,-10.418977 z m 8.410081,0 5.51593,0 4.46042,10.418977 -7.38863,0 -2.58772,-10.418977 z m -30.678091,13.142892 8.103649,0 -2.89416,10.282782 -9.6018026,0 4.3923136,-10.282782 z m 10.929711,0 8.614384,0 0,10.282782 -11.508544,0 2.89416,-10.282782 z m 11.338299,0 8.852721,0 2.58772,10.282782 -11.440441,0 0,-10.282782 z m 11.678781,0 7.86531,0 4.39231,10.282782 -9.6699,0 -2.58772,-10.282782 z";function cK(e,t,n){e=wn(e);let i=new IU(t,n);i._globePath=mkt,i._flatMapPath=hkt,i._columbusViewPath=fkt;let o=document.createElement("span");o.className="cesium-sceneModePicker-wrapper cesium-toolbar-button",e.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button",r.setAttribute("data-bind",'css: { "cesium-sceneModePicker-button2D": sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-button3D": sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-buttonColumbusView": sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),r.innerHTML='<!-- ko cesiumSvgPath: { path: _globePath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon3D" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon2D" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-iconColumbusView" } --><!-- /ko -->',o.appendChild(r);let s=document.createElement("button");s.type="button",s.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",s.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE3D)) || (!dropDownVisible && (sceneMode === _sceneMode.SCENE3D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip3D },click: morphTo3D,cesiumSvgPath: { path: _globePath, width: 64, height: 64 }'),o.appendChild(s);let a=document.createElement("button");a.type="button",a.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",a.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE2D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip2D },click: morphTo2D,cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64 }'),o.appendChild(a);let c=document.createElement("button");c.type="button",c.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",c.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.COLUMBUS_VIEW)) || (!dropDownVisible && (sceneMode === _sceneMode.COLUMBUS_VIEW)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-hidden" : !dropDownVisible},attr: { title: tooltipColumbusView },click: morphToColumbusView,cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64 }'),o.appendChild(c),Ge.applyBindings(i,o),this._viewModel=i,this._container=e,this._wrapper=o,this._closeDropDown=function(d){o.contains(d.target)||(i.dropDownVisible=!1)},hn.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(cK.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});cK.prototype.isDestroyed=function(){return!1};cK.prototype.destroy=function(){return this._viewModel.destroy(),hn.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ge.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),me(this)};var PU=cK;var arr=x(T(),1);var err=x(T(),1);var pkt=new M,lK="-1000px";function XU(e,t,n){this._scene=e,this._screenPositionX=lK,this._screenPositionY=lK,this._tweens=e.tweens,this._container=n??document.body,this._selectionIndicatorElement=t,this._scale=1,this.position=void 0,this.showSelection=!1,Ge.track(this,["position","_screenPositionX","_screenPositionY","_scale","showSelection"]),this.isVisible=void 0,Ge.defineProperty(this,"isVisible",{get:function(){return this.showSelection&&l(this.position)}}),Ge.defineProperty(this,"_transform",{get:function(){return`scale(${this._scale})`}}),this.computeScreenSpacePosition=function(i,o){return co.worldToWindowCoordinates(e,i,o)}}XU.prototype.update=function(){if(this.showSelection&&l(this.position)){let e=this.computeScreenSpacePosition(this.position,pkt);if(!l(e))this._screenPositionX=lK,this._screenPositionY=lK;else{let t=this._container,n=t.parentNode.clientWidth,i=t.parentNode.clientHeight,o=this._selectionIndicatorElement.clientWidth,r=o*.5;e.x=Math.min(Math.max(e.x,-o),n+o)-r,e.y=Math.min(Math.max(e.y,-o),i+o)-r,this._screenPositionX=`${Math.floor(e.x+.25)}px`,this._screenPositionY=`${Math.floor(e.y+.25)}px`}}};XU.prototype.animateAppear=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:2,stopValue:1,duration:.8,easingFunction:ls.EXPONENTIAL_OUT})};XU.prototype.animateDepart=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:this._scale,stopValue:1.5,duration:.8,easingFunction:ls.EXPONENTIAL_OUT})};Object.defineProperties(XU.prototype,{container:{get:function(){return this._container}},selectionIndicatorElement:{get:function(){return this._selectionIndicatorElement}},scene:{get:function(){return this._scene}}});var NU=XU;function dK(e,t){e=wn(e),this._container=e;let n=document.createElement("div");n.className="cesium-selection-wrapper",n.setAttribute("data-bind",'style: { "top" : _screenPositionY, "left" : _screenPositionX },css: { "cesium-selection-wrapper-visible" : isVisible }'),e.appendChild(n),this._element=n;let i="http://www.w3.org/2000/svg",o="M -34 -34 L -34 -11.25 L -30 -15.25 L -30 -30 L -15.25 -30 L -11.25 -34 L -34 -34 z M 11.25 -34 L 15.25 -30 L 30 -30 L 30 -15.25 L 34 -11.25 L 34 -34 L 11.25 -34 z M -34 11.25 L -34 34 L -11.25 34 L -15.25 30 L -30 30 L -30 15.25 L -34 11.25 z M 34 11.25 L 30 15.25 L 30 30 L 15.25 30 L 11.25 34 L 34 34 L 34 11.25 z",r=document.createElementNS(i,"svg:svg");r.setAttribute("width",160),r.setAttribute("height",160),r.setAttribute("viewBox","0 0 160 160");let s=document.createElementNS(i,"g");s.setAttribute("transform","translate(80,80)"),r.appendChild(s);let a=document.createElementNS(i,"path");a.setAttribute("data-bind","attr: { transform: _transform }"),a.setAttribute("d",o),s.appendChild(a),n.appendChild(r);let c=new NU(t,this._element,this._container);this._viewModel=c,Ge.applyBindings(this._viewModel,this._element)}Object.defineProperties(dK.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});dK.prototype.isDestroyed=function(){return!1};dK.prototype.destroy=function(){let e=this._container;return Ge.cleanNode(this._element),e.removeChild(this._element),me(this)};var YU=dK;var xrr=x(T(),1);var drr=x(T(),1);function tV(e,t,n){this._color=e,this._height=t,this._base=n??0}tV.prototype.getHeight=function(){return this._height};tV.prototype.getBase=function(){return this._base};tV.prototype.getStartTime=function(){return this._start};tV.prototype.getStopTime=function(){return this._stop};tV.prototype.setRange=function(e,t){this._start=e,this._stop=t};tV.prototype.render=function(e){let t="";if(this._start&&this._stop&&this._color){let n=Q.secondsDifference(this._start,e.epochJulian),i=Math.round(e.timeBarWidth*e.getAlpha(n)),o=Q.secondsDifference(this._stop,e.epochJulian),r=Math.round(e.timeBarWidth*e.getAlpha(o))-i;i<0&&(r+=i,i=0),i+r>e.timeBarWidth&&(r=e.timeBarWidth-i),r>0&&(t=`<span class="cesium-timeline-highlight" style="left: ${i.toString()}px; width: ${r.toString()}px; bottom: ${this._base.toString()}px; height: ${this._height}px; background-color: ${this._color};"></span>`)}return t};var wU=tV;var hrr=x(T(),1);function vFe(e,t,n,i){this.interval=e,this.height=t,this.color=n||new U(.5,.5,.5,1),this.backgroundColor=i||new U(0,0,0,0)}vFe.prototype.render=function(e,t){let n=this.interval.start,i=this.interval.stop,o=t.startJulian,r=Q.addSeconds(t.startJulian,t.duration,new Q);if(Q.lessThan(n,o)&&Q.greaterThan(i,r))e.fillStyle=this.color.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height);else if(Q.lessThanOrEquals(n,r)&&Q.greaterThanOrEquals(i,o)){let s,a,c;for(s=0;s<t.timeBarWidth;++s){let d=Q.addSeconds(t.startJulian,s/t.timeBarWidth*t.duration,new Q);!l(a)&&Q.greaterThanOrEquals(d,n)?a=s:!l(c)&&Q.greaterThanOrEquals(d,i)&&(c=s)}e.fillStyle=this.backgroundColor.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height),l(a)&&(l(c)||(c=t.timeBarWidth),e.fillStyle=this.color.toCssColorString(),e.fillRect(a,t.y,Math.max(c-a,1),this.height))}};var MU=vFe;var use=1e12,bh={none:0,scrub:1,slide:2,zoom:3,touchOnly:4},dd={none:0,scrub:1,slideZoom:2,singleTap:3,ignore:4},mT=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800,1296e3,2592e3,5184e3,7776e3,15552e3,31536e3,63072e3,126144e3,15768e4,31536e4,63072e4,126144e4,15768e5,31536e5,63072e5,126144e5,15768e6,31536e6],bkt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function ud(e,t){e=wn(e);let n=e.ownerDocument;this.container=e;let i=n.createElement("div");i.className="cesium-timeline-main",e.appendChild(i),this._topDiv=i,this._endJulian=void 0,this._epochJulian=void 0,this._lastXPos=void 0,this._scrubElement=void 0,this._startJulian=void 0,this._timeBarSecondsSpan=void 0,this._clock=t,this._scrubJulian=t.currentTime,this._mainTicSpan=-1,this._mouseMode=bh.none,this._touchMode=dd.none,this._touchState={centerX:0,spanX:0},this._mouseX=0,this._timelineDrag=0,this._timelineDragLocation=void 0,this._lastHeight=void 0,this._lastWidth=void 0,this._topDiv.innerHTML='<div class="cesium-timeline-bar"></div><div class="cesium-timeline-trackContainer"><canvas class="cesium-timeline-tracks" width="10" height="1"></canvas></div><div class="cesium-timeline-needle"></div><span class="cesium-timeline-ruler"></span>',this._timeBarEle=this._topDiv.childNodes[0],this._trackContainer=this._topDiv.childNodes[1],this._trackListEle=this._topDiv.childNodes[1].childNodes[0],this._needleEle=this._topDiv.childNodes[2],this._rulerEle=this._topDiv.childNodes[3],this._context=this._trackListEle.getContext("2d"),this._trackList=[],this._highlightRanges=[],this.zoomTo(t.startTime,t.stopTime),this._onMouseDown=gkt(this),this._onMouseUp=ykt(this),this._onMouseMove=xkt(this),this._onMouseWheel=Tkt(this),this._onTouchStart=_kt(this),this._onTouchMove=Zkt(this),this._onTouchEnd=Skt(this);let o=this._timeBarEle;n.addEventListener("mouseup",this._onMouseUp,!1),n.addEventListener("mousemove",this._onMouseMove,!1),o.addEventListener("mousedown",this._onMouseDown,!1),o.addEventListener("DOMMouseScroll",this._onMouseWheel,!1),o.addEventListener("mousewheel",this._onMouseWheel,!1),o.addEventListener("touchstart",this._onTouchStart,!1),o.addEventListener("touchmove",this._onTouchMove,!1),o.addEventListener("touchend",this._onTouchEnd,!1),o.addEventListener("touchcancel",this._onTouchEnd,!1),this._topDiv.oncontextmenu=function(){return!1},t.onTick.addEventListener(this.updateFromClock,this),this.updateFromClock()}ud.prototype.addEventListener=function(e,t,n){this._topDiv.addEventListener(e,t,n)};ud.prototype.removeEventListener=function(e,t,n){this._topDiv.removeEventListener(e,t,n)};ud.prototype.isDestroyed=function(){return!1};ud.prototype.destroy=function(){this._clock.onTick.removeEventListener(this.updateFromClock,this);let e=this.container.ownerDocument;e.removeEventListener("mouseup",this._onMouseUp,!1),e.removeEventListener("mousemove",this._onMouseMove,!1);let t=this._timeBarEle;t.removeEventListener("mousedown",this._onMouseDown,!1),t.removeEventListener("DOMMouseScroll",this._onMouseWheel,!1),t.removeEventListener("mousewheel",this._onMouseWheel,!1),t.removeEventListener("touchstart",this._onTouchStart,!1),t.removeEventListener("touchmove",this._onTouchMove,!1),t.removeEventListener("touchend",this._onTouchEnd,!1),t.removeEventListener("touchcancel",this._onTouchEnd,!1),this.container.removeChild(this._topDiv),me(this)};ud.prototype.addHighlightRange=function(e,t,n){let i=new wU(e,t,n);return this._highlightRanges.push(i),this.resize(),i};ud.prototype.addTrack=function(e,t,n,i){let o=new MU(e,t,n,i);return this._trackList.push(o),this._lastHeight=void 0,this.resize(),o};ud.prototype.zoomTo=function(e,t){if(this._startJulian=e,this._endJulian=t,this._timeBarSecondsSpan=Q.secondsDifference(t,e),this._clock&&this._clock.clockRange!==as.UNBOUNDED){let i=this._clock.startTime,o=this._clock.stopTime,r=Q.secondsDifference(o,i),s=Q.secondsDifference(i,this._startJulian),a=Q.secondsDifference(o,this._endJulian);this._timeBarSecondsSpan>=r?(this._timeBarSecondsSpan=r,this._startJulian=this._clock.startTime,this._endJulian=this._clock.stopTime):s>0?(this._endJulian=Q.addSeconds(this._endJulian,s,new Q),this._startJulian=i,this._timeBarSecondsSpan=Q.secondsDifference(this._endJulian,this._startJulian)):a<0&&(this._startJulian=Q.addSeconds(this._startJulian,a,new Q),this._endJulian=o,this._timeBarSecondsSpan=Q.secondsDifference(this._endJulian,this._startJulian))}this._makeTics();let n=document.createEvent("Event");n.initEvent("setzoom",!0,!0),n.startJulian=this._startJulian,n.endJulian=this._endJulian,n.epochJulian=this._epochJulian,n.totalSpan=this._timeBarSecondsSpan,n.mainTicSpan=this._mainTicSpan,this._topDiv.dispatchEvent(n)};ud.prototype.zoomFrom=function(e){let t=Q.secondsDifference(this._scrubJulian,this._startJulian);e>1||t<0||t>this._timeBarSecondsSpan?t=this._timeBarSecondsSpan*.5:t+=t-this._timeBarSecondsSpan*.5;let n=this._timeBarSecondsSpan-t;this.zoomTo(Q.addSeconds(this._startJulian,t-t*e,new Q),Q.addSeconds(this._endJulian,n*e-n,new Q))};function mse(e){return e<10?`0${e.toString()}`:e.toString()}ud.prototype.makeLabel=function(e){let t=Q.toGregorianDate(e),n=t.millisecond,i=" UTC";if(n>0&&this._timeBarSecondsSpan<3600){for(i=Math.floor(n).toString();i.length<3;)i=`0${i}`;i=`.${i}`}return`${bkt[t.month-1]} ${t.day} ${t.year} ${mse(t.hour)}:${mse(t.minute)}:${mse(t.second)}${i}`};ud.prototype.smallestTicInPixels=7;ud.prototype._makeTics=function(){let e=this._timeBarEle,t=Q.secondsDifference(this._scrubJulian,this._startJulian),n=Math.round(t*this._topDiv.clientWidth/this._timeBarSecondsSpan),i=n-8,o,r=this;this._needleEle.style.left=`${n.toString()}px`;let s="",a=.01,c=31536e6,d=1e-10,u=0,m=this._timeBarSecondsSpan;m<a?(m=a,this._timeBarSecondsSpan=a,this._endJulian=Q.addSeconds(this._startJulian,a,new Q)):m>c&&(m=c,this._timeBarSecondsSpan=c,this._endJulian=Q.addSeconds(this._startJulian,c,new Q));let p=this._timeBarEle.clientWidth;p<10&&(p=10);let b=this._startJulian,f=Math.min(m/p*1e-5,.4),y,_=Q.toGregorianDate(b);m>31536e4?y=Q.fromDate(new Date(Date.UTC(Math.floor(_.year/100)*100,0))):m>31536e3?y=Q.fromDate(new Date(Date.UTC(Math.floor(_.year/10)*10,0))):m>86400?y=Q.fromDate(new Date(Date.UTC(_.year,0))):y=Q.fromDate(new Date(Date.UTC(_.year,_.month,_.day)));let S=Q.secondsDifference(this._startJulian,Q.addSeconds(y,f,new Q)),Z=S+m;this._epochJulian=y;function V(w){return Math.floor(S/w)*w}function C(w,z){return Math.ceil(w/z+.5)*z}function G(w){return(w-S)/m}function E(w,z){return w-z*Math.round(w/z)}this._rulerEle.innerHTML=this.makeLabel(Q.addSeconds(this._endJulian,-a,new Q));let v=this._rulerEle.offsetWidth+20;v<30&&(v=180);let F=u;u-=d;let P={startTime:S,startJulian:b,epochJulian:y,duration:m,timeBarWidth:p,getAlpha:G};this._highlightRanges.forEach(function(w){s+=w.render(P)});let N=0,g=0,R=0,A=v/p;A>1&&(A=1),A*=this._timeBarSecondsSpan;let W=-1,X=-1,Y=mT.length,D;for(D=0;D<Y;++D){let w=mT[D];if(++W,N=w,w>A&&w>u)break;X<0&&p*(w/this._timeBarSecondsSpan)>=this.smallestTicInPixels&&(X=W)}if(W>0){for(;W>0;)if(--W,Math.abs(E(N,mT[W]))<1e-5){mT[W]>=u&&(g=mT[W]);break}if(X>=0)for(;X<W;){if(Math.abs(E(g,mT[X]))<1e-5&&mT[X]>=u){R=mT[X];break}++X}}u=F,u>d&&R<1e-5&&Math.abs(u-N)>d&&(R=u,u<=N+d&&(g=0));let k=-999999,O;if(p*(R/this._timeBarSecondsSpan)>=3)for(o=V(R);o<=Z;o=C(o,R))s+=`<span class="cesium-timeline-ticTiny" style="left: ${Math.round(p*G(o)).toString()}px;"></span>`;if(p*(g/this._timeBarSecondsSpan)>=3)for(o=V(g);o<=Z;o=C(o,g))s+=`<span class="cesium-timeline-ticSub" style="left: ${Math.round(p*G(o)).toString()}px;"></span>`;if(p*(N/this._timeBarSecondsSpan)>=2){this._mainTicSpan=N,Z+=N,o=V(N);let w=Q.computeTaiMinusUtc(y);for(;o<=Z;){let z=Q.addSeconds(b,o-S,new Q);if(N>2.1){let $=Q.computeTaiMinusUtc(z);Math.abs($-w)>.1&&(o+=$-w,z=Q.addSeconds(b,o-S,new Q))}let H=Math.round(p*G(o)),te=this.makeLabel(z);this._rulerEle.innerHTML=te,O=this._rulerEle.offsetWidth,O<10&&(O=v);let K=H-(O/2-1);K>k?(k=K+O+5,s+=`<span class="cesium-timeline-ticMain" style="left: ${H.toString()}px;"></span><span class="cesium-timeline-ticLabel" style="left: ${K.toString()}px;">${te}</span>`):s+=`<span class="cesium-timeline-ticSub" style="left: ${H.toString()}px;"></span>`,o=C(o,N)}}else this._mainTicSpan=-1;s+=`<span class="cesium-timeline-icon16" style="left:${i}px;bottom:0;background-position: 0 0;"></span>`,e.innerHTML=s,this._scrubElement=e.lastChild,this._context.clearRect(0,0,this._trackListEle.width,this._trackListEle.height),P.y=0,this._trackList.forEach(function(w){w.render(r._context,P),P.y+=w.height})};ud.prototype.updateFromClock=function(){this._scrubJulian=this._clock.currentTime;let e=this._scrubElement;if(l(this._scrubElement)){let t=Q.secondsDifference(this._scrubJulian,this._startJulian),n=Math.round(t*this._topDiv.clientWidth/this._timeBarSecondsSpan);this._lastXPos!==n&&(this._lastXPos=n,e.style.left=`${n-8}px`,this._needleEle.style.left=`${n}px`)}l(this._timelineDragLocation)&&(this._setTimeBarTime(this._timelineDragLocation,this._timelineDragLocation*this._timeBarSecondsSpan/this._topDiv.clientWidth),this.zoomTo(Q.addSeconds(this._startJulian,this._timelineDrag,new Q),Q.addSeconds(this._endJulian,this._timelineDrag,new Q)))};ud.prototype._setTimeBarTime=function(e,t){if(e=Math.round(e),this._scrubJulian=Q.addSeconds(this._startJulian,t,new Q),this._scrubElement){let i=e-8;this._scrubElement.style.left=`${i.toString()}px`,this._needleEle.style.left=`${e.toString()}px`}let n=document.createEvent("Event");n.initEvent("settime",!0,!0),n.clientX=e,n.timeSeconds=t,n.timeJulian=this._scrubJulian,n.clock=this._clock,this._topDiv.dispatchEvent(n)};function gkt(e){return function(t){e._mouseMode!==bh.touchOnly&&(t.button===0?(e._mouseMode=bh.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition="-16px 0"),e._onMouseMove(t)):(e._mouseX=t.clientX,t.button===2?e._mouseMode=bh.zoom:e._mouseMode=bh.slide)),t.preventDefault()}}function ykt(e){return function(t){e._mouseMode=bh.none,e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0"),e._timelineDrag=0,e._timelineDragLocation=void 0}}function xkt(e){return function(t){let n;if(e._mouseMode===bh.scrub){t.preventDefault();let i=t.clientX-e._topDiv.getBoundingClientRect().left;i<0?(e._timelineDragLocation=0,e._timelineDrag=-.01*e._timeBarSecondsSpan):i>e._topDiv.clientWidth?(e._timelineDragLocation=e._topDiv.clientWidth,e._timelineDrag=.01*e._timeBarSecondsSpan):(e._timelineDragLocation=void 0,e._setTimeBarTime(i,i*e._timeBarSecondsSpan/e._topDiv.clientWidth))}else if(e._mouseMode===bh.slide){if(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0){let i=n*e._timeBarSecondsSpan/e._topDiv.clientWidth;e.zoomTo(Q.addSeconds(e._startJulian,i,new Q),Q.addSeconds(e._endJulian,i,new Q))}}else e._mouseMode===bh.zoom&&(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0&&e.zoomFrom(Math.pow(1.01,n)))}}function Tkt(e){return function(t){let n=t.wheelDeltaY||t.wheelDelta||-t.detail;use=Math.max(Math.min(Math.abs(n),use),1),n/=use,e.zoomFrom(Math.pow(1.05,-n))}}function _kt(e){return function(t){let n=t.touches.length,i,o,r=e._topDiv.getBoundingClientRect().left;t.preventDefault(),e._mouseMode=bh.touchOnly,n===1?(i=Q.secondsDifference(e._scrubJulian,e._startJulian),o=Math.round(i*e._topDiv.clientWidth/e._timeBarSecondsSpan+r),Math.abs(t.touches[0].clientX-o)<50?(e._touchMode=dd.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition=n===1?"-16px 0":"0 0")):(e._touchMode=dd.singleTap,e._touchState.centerX=t.touches[0].clientX-r)):n===2?(e._touchMode=dd.slideZoom,e._touchState.centerX=(t.touches[0].clientX+t.touches[1].clientX)*.5-r,e._touchState.spanX=Math.abs(t.touches[0].clientX-t.touches[1].clientX)):e._touchMode=dd.ignore}}function Skt(e){return function(t){let n=t.touches.length,i=e._topDiv.getBoundingClientRect().left;e._touchMode===dd.singleTap?(e._touchMode=dd.scrub,e._onTouchMove(t)):e._touchMode===dd.scrub&&e._onTouchMove(t),e._mouseMode=bh.touchOnly,n!==1?e._touchMode=n>0?dd.ignore:dd.none:e._touchMode===dd.slideZoom&&(e._touchState.centerX=t.touches[0].clientX-i),e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0")}}function Zkt(e){return function(t){let n,i,o,r,s,a,c=1,d=e._topDiv.getBoundingClientRect().left;e._touchMode===dd.singleTap&&(e._touchMode=dd.slideZoom),e._mouseMode=bh.touchOnly,e._touchMode===dd.scrub?(t.preventDefault(),t.changedTouches.length===1&&(i=t.changedTouches[0].clientX-d,i>=0&&i<=e._topDiv.clientWidth&&e._setTimeBarTime(i,i*e._timeBarSecondsSpan/e._topDiv.clientWidth))):e._touchMode===dd.slideZoom&&(o=t.touches.length,o===2?(r=(t.touches[0].clientX+t.touches[1].clientX)*.5-d,s=Math.abs(t.touches[0].clientX-t.touches[1].clientX)):o===1&&(r=t.touches[0].clientX-d,s=0),l(r)&&(s>0&&e._touchState.spanX>0?(c=e._touchState.spanX/s,a=Q.addSeconds(e._startJulian,(e._touchState.centerX*e._timeBarSecondsSpan-r*e._timeBarSecondsSpan*c)/e._topDiv.clientWidth,new Q)):(n=e._touchState.centerX-r,a=Q.addSeconds(e._startJulian,n*e._timeBarSecondsSpan/e._topDiv.clientWidth,new Q)),e.zoomTo(a,Q.addSeconds(a,e._timeBarSecondsSpan*c,new Q)),e._touchState.centerX=r,e._touchState.spanX=s))}}ud.prototype.resize=function(){let e=this.container.clientWidth,t=this.container.clientHeight;if(e===this._lastWidth&&t===this._lastHeight)return;this._trackContainer.style.height=`${t}px`;let n=1;this._trackList.forEach(function(i){n+=i.height}),this._trackListEle.style.height=`${n.toString()}px`,this._trackListEle.width=this._trackListEle.clientWidth,this._trackListEle.height=n,this._makeTics(),this._lastXPos=void 0,this._lastWidth=e,this._lastHeight=t};var kU=ud;var Xrr=x(T(),1);var Err=x(T(),1);var NFe=x(XFe(),1);function Rkt(e){let t=!1,n=window.screen;return l(n)&&(l(n.lockOrientation)?t=n.lockOrientation(e):l(n.mozLockOrientation)?t=n.mozLockOrientation(e):l(n.msLockOrientation)?t=n.msLockOrientation(e):l(n.orientation&&n.orientation.lock)&&(t=n.orientation.lock(e))),t}function YFe(){let e=window.screen;l(e)&&(l(e.unlockOrientation)?e.unlockOrientation():l(e.mozUnlockOrientation)?e.mozUnlockOrientation():l(e.msUnlockOrientation)?e.msUnlockOrientation():l(e.orientation&&e.orientation.unlock)&&e.orientation.unlock())}function Gkt(e,t,n,i){i()||(n()?(t.useWebVR=!1,e._locked&&(YFe(),e._locked=!1),e._noSleep.disable(),Or.exitFullscreen(),n(!1)):(Or.fullscreen||Or.requestFullscreen(e._vrElement),e._noSleep.enable(),e._locked||(e._locked=Rkt("landscape")),t.useWebVR=!0,n(!0)))}function uK(e,t){let n=this,i=Ge.observable(Or.enabled),o=Ge.observable(!1);this.isVRMode=void 0,Ge.defineProperty(this,"isVRMode",{get:function(){return o()}}),this.isVREnabled=void 0,Ge.defineProperty(this,"isVREnabled",{get:function(){return i()},set:function(s){i(s&&Or.enabled)}}),this.tooltip=void 0,Ge.defineProperty(this,"tooltip",function(){return i()?o()?"Exit VR mode":"Enter VR mode":"VR mode is unavailable"});let r=Ge.observable(!1);this._isOrthographic=void 0,Ge.defineProperty(this,"_isOrthographic",{get:function(){return r()}}),this._eventHelper=new Ir,this._eventHelper.add(e.preRender,function(){r(e.camera.frustum instanceof bn)}),this._locked=!1,this._noSleep=new NFe.default,this._command=In(function(){Gkt(n,e,o,r)},Ge.getObservable(this,"isVREnabled")),this._vrElement=wn(t)??document.body,this._callback=function(){!Or.fullscreen&&o()&&(e.useWebVR=!1,n._locked&&(YFe(),n._locked=!1),n._noSleep.disable(),o(!1))},document.addEventListener(Or.changeEventName,this._callback)}Object.defineProperties(uK.prototype,{vrElement:{get:function(){return this._vrElement},set:function(e){this._vrElement=e}},command:{get:function(){return this._command}}});uK.prototype.isDestroyed=function(){return!1};uK.prototype.destroy=function(){this._eventHelper.removeAll(),document.removeEventListener(Or.changeEventName,this._callback),me(this)};var UU=uK;var Akt="M 5.3125 6.375 C 4.008126 6.375 2.96875 7.4141499 2.96875 8.71875 L 2.96875 19.5 C 2.96875 20.8043 4.008126 21.875 5.3125 21.875 L 13.65625 21.875 C 13.71832 20.0547 14.845166 18.59375 16.21875 18.59375 C 17.592088 18.59375 18.71881 20.0552 18.78125 21.875 L 27.09375 21.875 C 28.398125 21.875 29.4375 20.8043 29.4375 19.5 L 29.4375 8.71875 C 29.4375 7.4141499 28.398125 6.375 27.09375 6.375 L 5.3125 6.375 z M 9.625 10.4375 C 11.55989 10.4375 13.125 12.03385 13.125 13.96875 C 13.125 15.90365 11.55989 17.46875 9.625 17.46875 C 7.69011 17.46875 6.125 15.90365 6.125 13.96875 C 6.125 12.03385 7.69011 10.4375 9.625 10.4375 z M 22.46875 10.4375 C 24.40364 10.4375 25.96875 12.03385 25.96875 13.96875 C 25.96875 15.90365 24.40364 17.46875 22.46875 17.46875 C 20.53386 17.46875 18.96875 15.90365 18.96875 13.96875 C 18.96875 12.03385 20.53386 10.4375 22.46875 10.4375 z",Ekt="M 25.770585,2.4552065 C 15.72282,13.962707 10.699956,19.704407 8.1768352,22.580207 c -1.261561,1.4379 -1.902282,2.1427 -2.21875,2.5 -0.141624,0.1599 -0.208984,0.2355 -0.25,0.2813 l 0.6875,0.75 c 10e-5,-10e-5 0.679191,0.727 0.6875,0.7187 0.01662,-0.016 0.02451,-0.024 0.03125,-0.031 0.01348,-0.014 0.04013,-0.038 0.0625,-0.062 0.04474,-0.05 0.120921,-0.1315 0.28125,-0.3126 0.320657,-0.3619 0.956139,-1.0921 2.2187499,-2.5312 2.5252219,-2.8781 7.5454589,-8.6169 17.5937499,-20.1250005 l -1.5,-1.3125 z m -20.5624998,3.9063 c -1.304375,0 -2.34375,1.0391 -2.34375,2.3437 l 0,10.8125005 c 0,1.3043 1.039375,2.375 2.34375,2.375 l 2.25,0 c 1.9518039,-2.2246 7.4710958,-8.5584 13.5624998,-15.5312005 l -15.8124998,0 z m 21.1249998,0 c -1.855467,2.1245 -2.114296,2.4005 -3.59375,4.0936995 1.767282,0.1815 3.15625,1.685301 3.15625,3.500001 0,1.9349 -1.56511,3.5 -3.5,3.5 -1.658043,0 -3.043426,-1.1411 -3.40625,-2.6875 -1.089617,1.2461 -2.647139,2.9988 -3.46875,3.9375 0.191501,-0.062 0.388502,-0.094 0.59375,-0.094 1.373338,0 2.50006,1.4614 2.5625,3.2812 l 8.3125,0 c 1.304375,0 2.34375,-1.0707 2.34375,-2.375 l 0,-10.8125005 c 0,-1.3046 -1.039375,-2.3437 -2.34375,-2.3437 l -0.65625,0 z M 9.5518351,10.423906 c 1.9348899,0 3.4999999,1.596401 3.4999999,3.531301 0,1.9349 -1.56511,3.5 -3.4999999,3.5 -1.9348899,0 -3.4999999,-1.5651 -3.4999999,-3.5 0,-1.9349 1.56511,-3.531301 3.4999999,-3.531301 z m 4.2187499,10.312601 c -0.206517,0.2356 -0.844218,0.9428 -1.03125,1.1562 l 0.8125,0 c 0.01392,-0.4081 0.107026,-0.7968 0.21875,-1.1562 z";function mK(e,t,n){e=wn(e);let i=new UU(t,n);i._exitVRPath=Ekt,i._enterVRPath=Akt;let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-vrButton",o.setAttribute("data-bind",'css: { "cesium-button-disabled" : _isOrthographic }, attr: { title: tooltip },click: command,enable: isVREnabled,cesiumSvgPath: { path: isVRMode ? _exitVRPath : _enterVRPath, width: 32, height: 32 }'),e.appendChild(o),Ge.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(mK.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});mK.prototype.isDestroyed=function(){return!1};mK.prototype.destroy=function(){return this._viewModel.destroy(),Ge.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var DU=mK;var isr=x(T(),1);var wFe=new le;function UFe(e){let t=e.clock;t.currentTime=e.timeJulian,t.shouldAnimate=!1}function Lkt(e){let t=e.getPropertyIds(),n="";return t.forEach(function(i){let o=e.getProperty(i);l(o)&&(n+=`<tr><th>${i}</th><td>${o}</td></tr>`)}),n.length>0&&(n=`<table class="cesium-infoBox-defaultTable"><tbody>${n}</tbody></table>`),n}function Wkt(e){let t,n=[],i=e.getPropertyIds();for(t=0;t<i.length;t++){let r=i[t];/^name$/i.test(r)?n[0]=e.getProperty(r):/name/i.test(r)?n[1]=e.getProperty(r):/^title$/i.test(r)?n[2]=e.getProperty(r):/^(id|identifier)$/i.test(r)?n[3]=e.getProperty(r):/element/i.test(r)?n[4]=e.getProperty(r):/(id|identifier)$/i.test(r)&&(n[5]=e.getProperty(r))}let o=n.length;for(t=0;t<o;t++){let r=n[t];if(l(r)&&r!=="")return r}return"Unnamed Feature"}function MFe(e,t){let n=e.scene.pick(t.position);if(l(n)){let i=n.id??n.primitive.id;if(i instanceof Jo)return i;if(n instanceof Qs||n instanceof IS)return new Jo({name:Wkt(n),description:Lkt(n),feature:n})}return Pkt(e,t.position)}var vkt=new Q;function bse(e,t){if(l(t)){let n=t.clock;if(l(n)&&l(e)){let i=n.startTime,o=n.stopTime;Q.equals(i,o)&&(o=Q.addSeconds(i,L.EPSILON2,vkt)),e.updateFromClock(),e.zoomTo(i,o)}}}var Fkt=new h;function Ikt(e){let t=e.length;for(let n=0;n<t;++n){let i=e.get(n);if(i instanceof wr)return i}}function Pkt(e,t){let n=e.scene,i=n.camera.getPickRay(t);if(!l(i))return;let o=n.imageryLayers;if(!l(o)){let a=Ikt(n.primitives);if(!l(a))return;o=a.imageryLayers}let r=o.pickImageryLayerFeatures(i,n);if(!l(r))return;let s=new Jo({id:"Loading...",description:"Loading feature information..."});return r.then(function(a){if(e.selectedEntity!==s)return;if(!l(a)||a.length===0){e.selectedEntity=kFe();return}let c=a[0],d=new Jo({id:c.name,description:c.description});if(l(c.position)){let u=e.scene.ellipsoid.cartographicToCartesian(c.position,Fkt);d.position=new zl(u)}e.selectedEntity=d},function(){e.selectedEntity===s&&(e.selectedEntity=kFe())}),s}function kFe(){return new Jo({id:"None",description:"No features found."})}function Xkt(e,t){let n=e._geocoder,i=e._homeButton,o=e._sceneModePicker,r=e._projectionPicker,s=e._baseLayerPicker,a=e._animation,c=e._timeline,d=e._fullscreenButton,u=e._infoBox,m=e._selectionIndicator,p=t?"hidden":"visible";if(l(n)&&(n.container.style.visibility=p),l(i)&&(i.container.style.visibility=p),l(o)&&(o.container.style.visibility=p),l(r)&&(r.container.style.visibility=p),l(s)&&(s.container.style.visibility=p),l(a)&&(a.container.style.visibility=p),l(c)&&(c.container.style.visibility=p),l(d)&&d.viewModel.isFullscreenEnabled&&(d.container.style.visibility=p),l(u)&&(u.container.style.visibility=p),l(m)&&(m.container.style.visibility=p),e._container){let b=t||!l(d)?0:d.container.clientWidth;e._vrButton.container.style.right=`${b}px`,e.forceResize()}}function ro(e,t){e=wn(e),t=t??B.EMPTY_OBJECT;let n=(!l(t.globe)||t.globe!==!1)&&(!l(t.baseLayerPicker)||t.baseLayerPicker!==!1),i=this,o=document.createElement("div");o.className="cesium-viewer",e.appendChild(o);let r=document.createElement("div");r.className="cesium-viewer-cesiumWidgetContainer",o.appendChild(r);let s=document.createElement("div");s.className="cesium-viewer-bottom",o.appendChild(s);let a=t.scene3DOnly??!1,c,d,u=!1;l(t.clockViewModel)?(d=t.clockViewModel,c=d.clock):(c=new Xh,d=new iU(c),u=!0);let m=new mk(r,{baseLayer:n&&l(t.selectedImageryProviderViewModel)||l(t.baseLayer)||l(t.imageryProvider)?!1:void 0,clock:c,shouldAnimate:t.shouldAnimate,skyBox:t.skyBox,skyAtmosphere:t.skyAtmosphere,sceneMode:t.sceneMode,ellipsoid:t.ellipsoid,mapProjection:t.mapProjection,globe:t.globe,orderIndependentTranslucency:t.orderIndependentTranslucency,automaticallyTrackDataSourceClocks:t.automaticallyTrackDataSourceClocks,contextOptions:t.contextOptions,useDefaultRenderLoop:t.useDefaultRenderLoop,targetFrameRate:t.targetFrameRate,showRenderLoopErrors:t.showRenderLoopErrors,useBrowserRecommendedResolution:t.useBrowserRecommendedResolution,creditContainer:l(t.creditContainer)?t.creditContainer:s,creditViewport:t.creditViewport,dataSources:t.dataSources,scene3DOnly:a,shadows:t.shadows,terrainShadows:t.terrainShadows,mapMode2D:t.mapMode2D,blurActiveElementOnCanvasFocus:t.blurActiveElementOnCanvasFocus,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange,depthPlaneEllipsoidOffset:t.depthPlaneEllipsoidOffset,msaaSamples:t.msaaSamples}),p=m.scene,b=new Ir;b.add(c.onTick,ro.prototype._onTick,this);let f;if(!l(t.selectionIndicator)||t.selectionIndicator!==!1){let z=document.createElement("div");z.className="cesium-viewer-selectionIndicatorContainer",o.appendChild(z),f=new YU(z,p)}let y;if(!l(t.infoBox)||t.infoBox!==!1){let z=document.createElement("div");z.className="cesium-viewer-infoBoxContainer",o.appendChild(z),y=new GU(z);let H=y.viewModel;b.add(H.cameraClicked,ro.prototype._onInfoBoxCameraClicked,this),b.add(H.closeClicked,ro.prototype._onInfoBoxClockClicked,this)}let _=document.createElement("div");_.className="cesium-viewer-toolbar",o.appendChild(_);let S;if(!l(t.geocoder)||t.geocoder!==!1){let z=document.createElement("div");z.className="cesium-viewer-geocoderContainer",_.appendChild(z);let H;typeof t.geocoder=="string"?H=[new s_({scene:p,geocodeProviderType:t.geocoder})]:l(t.geocoder)&&typeof t.geocoder!="boolean"&&(H=Array.isArray(t.geocoder)?t.geocoder:[t.geocoder]),S=new SU({container:z,geocoderServices:H,scene:p}),b.add(S.viewModel.search.beforeExecute,ro.prototype._clearObjects,this)}let Z;(!l(t.homeButton)||t.homeButton!==!1)&&(Z=new VU(_,p),l(S)&&b.add(Z.viewModel.command.afterExecute,function(){let z=S.viewModel;z.searchText="",z.isSearchInProgress&&z.search()}),b.add(Z.viewModel.command.beforeExecute,ro.prototype._clearTrackedObject,this));let V;!a&&(!l(t.sceneModePicker)||t.sceneModePicker!==!1)&&(V=new PU(_,p));let C;t.projectionPicker&&(C=new FU(_,p));let G,E;if(n){let z=t.imageryProviderViewModels??dU(),H=t.terrainProviderViewModels??uU();G=new lU(_,{globe:p.globe,imageryProviderViewModels:z,selectedImageryProviderViewModel:t.selectedImageryProviderViewModel,terrainProviderViewModels:H,selectedTerrainProviderViewModel:t.selectedTerrainProviderViewModel}),E=_.getElementsByClassName("cesium-baseLayerPicker-dropDown")[0]}l(t.baseLayer)&&t.baseLayer!==!1&&(n&&(G.viewModel.selectedImagery=void 0),p.imageryLayers.removeAll(),p.imageryLayers.add(t.baseLayer)),l(t.terrainProvider)&&(n&&(G.viewModel.selectedTerrain=void 0),p.terrainProvider=t.terrainProvider),l(t.terrain)&&(n&&(p.globe.depthTestAgainstTerrain=!0),p.setTerrain(t.terrain));let v;if(!l(t.navigationHelpButton)||t.navigationHelpButton!==!1){let z=!0;try{if(l(window.localStorage)){let H=window.localStorage.getItem("cesium-hasSeenNavHelp");l(H)&&H?z=!1:window.localStorage.setItem("cesium-hasSeenNavHelp","true")}}catch{}v=new EU({container:_,instructionsInitiallyVisible:t.navigationInstructionsInitiallyVisible??z})}let F;if(!l(t.animation)||t.animation!==!1){let z=document.createElement("div");z.className="cesium-viewer-animationContainer",o.appendChild(z),F=new sU(z,new aU(d))}let P;if(!l(t.timeline)||t.timeline!==!1){let z=document.createElement("div");z.className="cesium-viewer-timelineContainer",o.appendChild(z),P=new kU(z,c),P.addEventListener("settime",UFe,!1),P.zoomTo(c.startTime,c.stopTime)}let N,g,R;(!l(t.fullscreenButton)||t.fullscreenButton!==!1)&&(R=document.createElement("div"),R.className="cesium-viewer-fullscreenContainer",o.appendChild(R),N=new TU(R,t.fullscreenElement),g=bc(N.viewModel,"isFullscreenEnabled",function(z){R.style.display=z?"block":"none",l(P)&&(P.container.style.right=`${R.clientWidth}px`,P.resize())}));let A,W,X;if(t.vrButton){let z=document.createElement("div");z.className="cesium-viewer-vrContainer",o.appendChild(z),A=new DU(z,p,t.fullScreenElement),W=bc(A.viewModel,"isVREnabled",function(H){z.style.display=H?"block":"none",l(N)&&(z.style.right=`${R.clientWidth}px`),l(P)&&(P.container.style.right=`${z.clientWidth}px`,P.resize())}),X=bc(A.viewModel,"isVRMode",function(H){Xkt(i,H)})}this._baseLayerPickerDropDown=E,this._fullscreenSubscription=g,this._vrSubscription=W,this._vrModeSubscription=X,this._dataSourceChangedListeners={},this._container=e,this._bottomContainer=s,this._element=o,this._cesiumWidget=m,this._selectionIndicator=f,this._infoBox=y,this._clockViewModel=d,this._destroyClockViewModel=u,this._toolbar=_,this._homeButton=Z,this._sceneModePicker=V,this._projectionPicker=C,this._baseLayerPicker=G,this._navigationHelpButton=v,this._animation=F,this._timeline=P,this._fullscreenButton=N,this._vrButton=A,this._geocoder=S,this._eventHelper=b,this._lastWidth=0,this._lastHeight=0,this._enableInfoOrSelection=l(y)||l(f),this._selectedEntity=void 0,this._selectedEntityChanged=new Se;let Y=this._cesiumWidget.dataSources,D=this._cesiumWidget.dataSourceDisplay;b.add(Y.dataSourceAdded,ro.prototype._onDataSourceAdded,this),b.add(Y.dataSourceRemoved,ro.prototype._onDataSourceRemoved,this),b.add(p.postUpdate,ro.prototype.resize,this);let k=Y.length;for(let z=0;z<k;z++)this._dataSourceAdded(Y,Y.get(z));this._dataSourceAdded(void 0,D.defaultDataSource),b.add(Y.dataSourceAdded,ro.prototype._dataSourceAdded,this),b.add(Y.dataSourceRemoved,ro.prototype._dataSourceRemoved,this);function O(z){let H=MFe(i,z);l(H)?j.getValueOrUndefined(H.position,i.clock.currentTime)?i.trackedEntity=H:i.zoomTo(H):l(i.trackedEntity)&&(i.trackedEntity=void 0)}function w(z){i.selectedEntity=MFe(i,z)}m.screenSpaceEventHandler.setInputAction(w,dn.LEFT_CLICK),m.screenSpaceEventHandler.setInputAction(O,dn.LEFT_DOUBLE_CLICK),m._canAnimateUpdateCallback=this._updateCanAnimate(this)}Object.defineProperties(ro.prototype,{container:{get:function(){return this._container}},creditDisplay:{get:function(){return this._cesiumWidget.creditDisplay}},bottomContainer:{get:function(){return this._bottomContainer}},cesiumWidget:{get:function(){return this._cesiumWidget}},selectionIndicator:{get:function(){return this._selectionIndicator}},infoBox:{get:function(){return this._infoBox}},geocoder:{get:function(){return this._geocoder}},homeButton:{get:function(){return this._homeButton}},sceneModePicker:{get:function(){return this._sceneModePicker}},projectionPicker:{get:function(){return this._projectionPicker}},baseLayerPicker:{get:function(){return this._baseLayerPicker}},navigationHelpButton:{get:function(){return this._navigationHelpButton}},animation:{get:function(){return this._animation}},timeline:{get:function(){return this._timeline}},fullscreenButton:{get:function(){return this._fullscreenButton}},vrButton:{get:function(){return this._vrButton}},dataSourceDisplay:{get:function(){return this._cesiumWidget.dataSourceDisplay}},entities:{get:function(){return this._cesiumWidget.entities}},dataSources:{get:function(){return this._cesiumWidget.dataSources}},canvas:{get:function(){return this._cesiumWidget.canvas}},scene:{get:function(){return this._cesiumWidget.scene}},shadows:{get:function(){return this.scene.shadowMap.enabled},set:function(e){this.scene.shadowMap.enabled=e}},terrainShadows:{get:function(){return this.scene.globe.shadows},set:function(e){this.scene.globe.shadows=e}},shadowMap:{get:function(){return this.scene.shadowMap}},imageryLayers:{get:function(){return this.scene.imageryLayers}},terrainProvider:{get:function(){return this.scene.terrainProvider},set:function(e){this.scene.terrainProvider=e}},camera:{get:function(){return this.scene.camera}},ellipsoid:{get:function(){return this.scene.ellipsoid}},postProcessStages:{get:function(){return this.scene.postProcessStages}},clock:{get:function(){return this._clockViewModel.clock}},clockViewModel:{get:function(){return this._clockViewModel}},screenSpaceEventHandler:{get:function(){return this._cesiumWidget.screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._cesiumWidget.targetFrameRate},set:function(e){this._cesiumWidget.targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._cesiumWidget.useDefaultRenderLoop},set:function(e){this._cesiumWidget.useDefaultRenderLoop=e}},resolutionScale:{get:function(){return this._cesiumWidget.resolutionScale},set:function(e){this._cesiumWidget.resolutionScale=e}},useBrowserRecommendedResolution:{get:function(){return this._cesiumWidget.useBrowserRecommendedResolution},set:function(e){this._cesiumWidget.useBrowserRecommendedResolution=e}},allowDataSourcesToSuspendAnimation:{get:function(){return this._cesiumWidget.allowDataSourcesToSuspendAnimation},set:function(e){this._cesiumWidget.allowDataSourcesToSuspendAnimation=e}},trackedEntity:{get:function(){return this._cesiumWidget.trackedEntity},set:function(e){this._cesiumWidget.trackedEntity=e}},selectedEntity:{get:function(){return this._selectedEntity},set:function(e){if(this._selectedEntity!==e){this._selectedEntity=e;let t=l(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;l(e)?l(t)&&t.animateAppear():l(t)&&t.animateDepart(),this._selectedEntityChanged.raiseEvent(e)}}},selectedEntityChanged:{get:function(){return this._selectedEntityChanged}},trackedEntityChanged:{get:function(){return this._cesiumWidget.trackedEntityChanged}},clockTrackedDataSource:{get:function(){return this._cesiumWidget.clockTrackedDataSource},set:function(e){this._cesiumWidget.clockTrackedDataSource!==e&&(this._cesiumWidget.clockTrackedDataSource=e,bse(this._timeline,e))}}});ro.prototype.extend=function(e,t){e(this,t)};ro.prototype.resize=function(){let e=this._cesiumWidget,t=this._container,n=t.clientWidth,i=t.clientHeight,o=l(this._animation),r=l(this._timeline);if(e.resize(),n===this._lastWidth&&i===this._lastHeight)return;let s=i-125,a=this._baseLayerPickerDropDown;if(l(a)&&(a.style.maxHeight=`${s}px`),l(this._geocoder)){let f=this._geocoder.searchSuggestionsContainer;f.style.maxHeight=`${s}px`}l(this._infoBox)&&(this._infoBox.viewModel.maxHeight=s);let c=this._timeline,d,u=0,m=5,p=3,b=0;if(o&&window.getComputedStyle(this._animation.container).visibility!=="hidden"){let f=this._lastWidth;d=this._animation.container,n>900?(u=169,f<=900&&(d.style.width="169px",d.style.height="112px",this._animation.resize())):n>=600?(u=136,(f<600||f>900)&&(d.style.width="136px",d.style.height="90px",this._animation.resize())):(u=106,(f>600||f===0)&&(d.style.width="106px",d.style.height="70px",this._animation.resize())),m=u+5}if(r&&window.getComputedStyle(this._timeline.container).visibility!=="hidden"){let f=this._fullscreenButton,y=this._vrButton,_=c.container,S=_.style;p=_.clientHeight+3,S.left=`${u}px`;let Z=0;l(f)&&(Z+=f.container.clientWidth),l(y)&&(Z+=y.container.clientWidth),S.right=`${Z}px`,c.resize()}!r&&l(this._fullscreenButton)&&(b=this._fullscreenButton.container.clientWidth),this._bottomContainer.style.left=`${m}px`,this._bottomContainer.style.bottom=`${p}px`,this._bottomContainer.style.right=`${b}px`,this._lastWidth=n,this._lastHeight=i};ro.prototype.forceResize=function(){this._lastWidth=0,this.resize()};ro.prototype.render=function(){this._cesiumWidget.render()};ro.prototype.isDestroyed=function(){return!1};ro.prototype.destroy=function(){return l(this.screenSpaceEventHandler)&&!this.screenSpaceEventHandler.isDestroyed()&&(this.screenSpaceEventHandler.removeInputAction(dn.LEFT_CLICK),this.screenSpaceEventHandler.removeInputAction(dn.LEFT_DOUBLE_CLICK)),this._container.removeChild(this._element),this._element.removeChild(this._toolbar),this._eventHelper.removeAll(),l(this._geocoder)&&(this._geocoder=this._geocoder.destroy()),l(this._homeButton)&&(this._homeButton=this._homeButton.destroy()),l(this._sceneModePicker)&&(this._sceneModePicker=this._sceneModePicker.destroy()),l(this._projectionPicker)&&(this._projectionPicker=this._projectionPicker.destroy()),l(this._baseLayerPicker)&&(this._baseLayerPicker=this._baseLayerPicker.destroy()),l(this._animation)&&(this._element.removeChild(this._animation.container),this._animation=this._animation.destroy()),l(this._timeline)&&(this._timeline.removeEventListener("settime",UFe,!1),this._element.removeChild(this._timeline.container),this._timeline=this._timeline.destroy()),l(this._fullscreenButton)&&(this._fullscreenSubscription.dispose(),this._element.removeChild(this._fullscreenButton.container),this._fullscreenButton=this._fullscreenButton.destroy()),l(this._vrButton)&&(this._vrSubscription.dispose(),this._vrModeSubscription.dispose(),this._element.removeChild(this._vrButton.container),this._vrButton=this._vrButton.destroy()),l(this._infoBox)&&(this._element.removeChild(this._infoBox.container),this._infoBox=this._infoBox.destroy()),l(this._selectionIndicator)&&(this._element.removeChild(this._selectionIndicator.container),this._selectionIndicator=this._selectionIndicator.destroy()),this._destroyClockViewModel&&(this._clockViewModel=this._clockViewModel.destroy()),this._cesiumWidget=this._cesiumWidget.destroy(),me(this)};ro.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(ro.prototype._onEntityCollectionChanged,this)};ro.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(ro.prototype._onEntityCollectionChanged,this),l(this.selectedEntity)&&n.getById(this.selectedEntity.id)===this.selectedEntity&&(this.selectedEntity=void 0)};ro.prototype._updateCanAnimate=function(e){return function(t){e._clockViewModel.canAnimate=t}};ro.prototype._onTick=function(e){let t=e.currentTime,n,i=!1,o=this.selectedEntity,r=l(o)&&this._enableInfoOrSelection;r&&o.isShowing&&o.isAvailable(t)&&(this._cesiumWidget.dataSourceDisplay.getBoundingSphere(o,!0,wFe)!==Lt.FAILED?n=wFe.center:l(o.position)&&(n=o.position.getValue(t,n)),i=l(n));let s=l(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;l(s)&&(s.position=h.clone(n,s.position),s.showSelection=r&&i,s.update());let a=l(this._infoBox)?this._infoBox.viewModel:void 0;l(a)&&(a.showInfo=r,a.enableCamera=i,a.isCameraTracking=this.trackedEntity===this.selectedEntity,r?(a.titleText=o.name??o.id,a.description=j.getValueOrDefault(o.description,t,"")):(a.titleText="",a.description=""))};ro.prototype._onEntityCollectionChanged=function(e,t,n){let i=n.length;for(let o=0;o<i;o++){let r=n[o];this.selectedEntity===r&&(this.selectedEntity=void 0)}};ro.prototype._onInfoBoxCameraClicked=function(e){if(e.isCameraTracking&&this.trackedEntity===this.selectedEntity)this.trackedEntity=void 0;else{let n=this.selectedEntity.position;l(n)?this.trackedEntity=this.selectedEntity:this.zoomTo(this.selectedEntity)}};ro.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};ro.prototype._onInfoBoxClockClicked=function(e){this.selectedEntity=void 0};ro.prototype._clearObjects=function(){this.trackedEntity=void 0,this.selectedEntity=void 0};ro.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&bse(this.timeline,e)};ro.prototype._onDataSourceAdded=function(e,t){this._cesiumWidget._automaticallyTrackDataSourceClocks&&t===this.clockTrackedDataSource&&bse(this._timeline,t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,ro.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};ro.prototype._onDataSourceRemoved=function(e,t){let n=t.entities.id;this._dataSourceChangedListeners[n](),this._dataSourceChangedListeners[n]=void 0};ro.prototype.addController=function(e){return this._cesiumWidget.addController(e)};ro.prototype.removeController=function(e){return this._cesiumWidget.removeController(e)};ro.prototype.zoomTo=function(e,t){return this._cesiumWidget.zoomTo(e,t)};ro.prototype.flyTo=function(e,t){return this._cesiumWidget.flyTo(e,t)};var gse=ro;var ssr=x(T(),1);function Nkt(e){let t=document.createElement("div");t.className="cesium-viewer-cesium3DTilesInspectorContainer",e.container.appendChild(t);let n=new yU(t,e.scene);Object.defineProperties(e,{cesium3DTilesInspector:{get:function(){return n}}})}var yse=Nkt;var lsr=x(T(),1);function Ykt(e){let t=document.createElement("div");t.className="cesium-viewer-cesiumInspectorContainer",e.container.appendChild(t);let n=new fU(t,e.scene);Object.defineProperties(e,{cesiumInspector:{get:function(){return n}}})}var xse=Ykt;var hsr=x(T(),1);function wkt(e,t){t=t??B.EMPTY_OBJECT;let n=!0,i=t.flyToOnDrop??!0,o=new Se,r=t.clearOnDrop??!0,s=t.dropTarget??e.container,a=t.clampToGround??!0,c=t.proxy;s=wn(s),Object.defineProperties(e,{dropTarget:{get:function(){return s},set:function(u){DFe(s,d),s=u,Tse(s,d)}},dropEnabled:{get:function(){return n},set:function(u){u!==n&&(u?Tse(s,d):DFe(s,d),n=u)}},dropError:{get:function(){return o}},clearOnDrop:{get:function(){return r},set:function(u){r=u}},flyToOnDrop:{get:function(){return i},set:function(u){i=u}},proxy:{get:function(){return c},set:function(u){c=u}},clampToGround:{get:function(){return a},set:function(u){a=u}}});function d(u){nV(u),r&&(e.entities.removeAll(),e.dataSources.removeAll());let m=u.dataTransfer.files,p=m.length;for(let b=0;b<p;b++){let f=m[b],y=new FileReader;y.onload=Mkt(e,f,c,a),y.onerror=kkt(e,f),y.readAsText(f)}}Tse(s,d),e.destroy=G2(e,e.destroy,function(){e.dropEnabled=!1}),e._handleDrop=d}function nV(e){e.stopPropagation(),e.preventDefault()}function DFe(e,t){let n=e;l(n)&&(n.removeEventListener("drop",t,!1),n.removeEventListener("dragenter",nV,!1),n.removeEventListener("dragover",nV,!1),n.removeEventListener("dragexit",nV,!1))}function Tse(e,t){e.addEventListener("drop",t,!1),e.addEventListener("dragenter",nV,!1),e.addEventListener("dragover",nV,!1),e.addEventListener("dragexit",nV,!1)}function Mkt(e,t,n,i){let o=e.scene;return function(r){let s=t.name;try{let a;if(/\.czml$/i.test(s))a=xk.load(JSON.parse(r.target.result),{sourceUri:s});else if(/\.geojson$/i.test(s)||/\.json$/i.test(s)||/\.topojson$/i.test(s))a=Qx.load(JSON.parse(r.target.result),{sourceUri:s,clampToGround:i});else if(/\.(kml|kmz)$/i.test(s))a=DZ.load(t,{sourceUri:s,proxy:n,camera:o.camera,canvas:o.canvas,clampToGround:i,screenOverlayContainer:e.container});else if(/\.gpx$/i.test(s))a=Zk.load(t,{sourceUri:s,proxy:n});else{e.dropError.raiseEvent(e,s,`Unrecognized file: ${s}`);return}l(a)&&e.dataSources.add(a).then(function(c){e.flyToOnDrop&&e.flyTo(c)}).catch(function(c){e.dropError.raiseEvent(e,s,c)})}catch(a){e.dropError.raiseEvent(e,s,a)}}}function kkt(e,t){return function(n){e.dropError.raiseEvent(e,t.name,n.target.error)}}var _se=wkt;var xsr=x(T(),1);function Ukt(e,t){t=t??B.EMPTY_OBJECT;let n=new WU({scene:e.scene,container:e.bottomContainer,lowFrameRateMessage:t.lowFrameRateMessage});Object.defineProperties(e,{performanceWatchdog:{get:function(){return n}}})}var Sse=Ukt;var Isr=x(T(),1);var Wsr=x(T(),1);var Vsr=x(T(),1);function OFe(e){let t=e.split(` `),n;for(n=0;n<t.length&&!t[n].match(/\S/);n++);if(n===t.length)return"";let i="",o=/^\s*/,s=t[n].match(o)[0].length;for(let a=n;a<t.length;a++){let c=t[a];c.match(o)[0].length>=s&&(c=c.slice(s)),i+=`${c} `}return i}function gh(e){this._scene=e,this._voxelPrimitive=void 0,this._customShaderCompilationRemoveCallback=void 0,this._definedProperties=[],this._getPrimitiveFunctions=[],this._modelMatrixReady=!1;let t=this;function n(o){let{name:r,initialValue:s}=o;t._definedProperties.push(r);let a=o.setPrimitiveFunction;a===!0&&(a=function(u){t._voxelPrimitive[r]=u});let c=o.getPrimitiveFunction;c===!0&&(c=function(){t[r]=t._voxelPrimitive[r]}),l(c)&&t._getPrimitiveFunctions.push(c);let d=Ge.observable();return Ge.defineProperty(t,r,{get:function(){return d()},set:function(u){typeof s=="number"&&typeof u=="string"&&(u=Number(u),isNaN(u)&&(u=s)),typeof s=="boolean"&&typeof u=="number"&&(u=u===1),d(u),l(a)&&l(t._voxelPrimitive)&&(a(u),e.requestRender())}}),t[r]=s,d}function i(o,r){return function(s){let a=t._voxelPrimitive[o].clone();a[r]=s,t._voxelPrimitive[o]=a}}n({name:"inspectorVisible",initialValue:!0}),n({name:"displayVisible",initialValue:!1}),n({name:"transformVisible",initialValue:!1}),n({name:"boundsVisible",initialValue:!1}),n({name:"clippingVisible",initialValue:!1}),n({name:"shaderVisible",initialValue:!1}),n({name:"shaderString",initialValue:"",getPrimitiveFunction:function(){let o=t._voxelPrimitive.customShader.fragmentShaderText;t.shaderString=OFe(o)}}),n({name:"shaderCompilationMessage",initialValue:""}),n({name:"shaderCompilationSuccess",initialValue:!0}),n({name:"depthTest",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"show",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"disableUpdate",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"debugDraw",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"jitter",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"nearestSampling",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"screenSpaceError",initialValue:4,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"stepSize",initialValue:1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"shapeIsBox",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsBox=o===pc.BOX}}),n({name:"shapeIsEllipsoid",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsEllipsoid=o===pc.ELLIPSOID}}),n({name:"shapeIsCylinder",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsCylinder=o===pc.CYLINDER}}),n({name:"clippingBoxMaxXMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMaxXMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingBoxMaxXMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMaxXMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingBoxMaxX",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingBoxMaxX=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingBoxMinXMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMinXMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingBoxMinXMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMinXMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingBoxMinX",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingBoxMinX=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingBoxMaxYMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMaxYMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingBoxMaxYMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMaxYMax=t._voxelPrimitive.maxBounds.y}}),n({name:"clippingBoxMaxY",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingBoxMaxY=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingBoxMinYMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMinYMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingBoxMinYMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMinYMax=t._voxelPrimitive.maxBounds.y}}),n({name:"clippingBoxMinY",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingBoxMinY=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingBoxMaxZMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMaxZMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingBoxMaxZMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMaxZMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingBoxMaxZ",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingBoxMaxZ=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingBoxMinZMin",initialValue:0,getPrimitiveFunction:function(){t.clippingBoxMinZMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingBoxMinZMax",initialValue:1,getPrimitiveFunction:function(){t.clippingBoxMinZMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingBoxMinZ",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingBoxMinZ=t._voxelPrimitive.minClippingBounds.z}}),n({name:"clippingEllipsoidMaxLongitudeMin",initialValue:-L.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLongitudeMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingEllipsoidMaxLongitudeMax",initialValue:L.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLongitudeMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingEllipsoidMaxLongitude",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxLongitude=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingEllipsoidMinLongitudeMin",initialValue:-L.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMinLongitudeMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingEllipsoidMinLongitudeMax",initialValue:L.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMinLongitudeMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingEllipsoidMinLongitude",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingEllipsoidMinLongitude=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingEllipsoidMaxLatitudeMin",initialValue:-L.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLatitudeMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingEllipsoidMaxLatitudeMax",initialValue:L.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLatitudeMax=t._voxelPrimitive.maxBounds.y}}),n({name:"clippingEllipsoidMaxLatitude",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxLatitude=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingEllipsoidMinLatitudeMin",initialValue:-L.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMinLatitudeMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingEllipsoidMinLatitudeMax",initialValue:L.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMinLatitudeMax=t._voxelPrimitive.maxBounds.y}}),n({name:"clippingEllipsoidMinLatitude",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingEllipsoidMinLatitude=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingEllipsoidMaxHeightMin",initialValue:0,getPrimitiveFunction:function(){t.clippingEllipsoidMaxHeightMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingEllipsoidMaxHeightMax",initialValue:1e5,getPrimitiveFunction:function(){t.clippingEllipsoidMaxHeightMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingEllipsoidMaxHeight",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxHeight=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingEllipsoidMinHeightMin",initialValue:-1e5,getPrimitiveFunction:function(){t.clippingEllipsoidMinHeightMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingEllipsoidMinHeightMax",initialValue:0,getPrimitiveFunction:function(){t.clippingEllipsoidMinHeightMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingEllipsoidMinHeight",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingEllipsoidMinHeight=t._voxelPrimitive.minClippingBounds.z}}),n({name:"clippingCylinderMaxRadiusMin",initialValue:0,getPrimitiveFunction:function(){t.clippingCylinderMaxRadiusMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingCylinderMaxRadiusMax",initialValue:1,getPrimitiveFunction:function(){t.clippingCylinderMaxRadiusMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingCylinderMaxRadius",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingCylinderMaxRadius=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingCylinderMinRadiusMin",initialValue:0,getPrimitiveFunction:function(){t.clippingCylinderMinRadiusMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingCylinderMinRadiusMax",initialValue:1,getPrimitiveFunction:function(){t.clippingCylinderMinRadiusMax=t._voxelPrimitive.maxBounds.x}}),n({name:"clippingCylinderMinRadius",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingCylinderMinRadius=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingCylinderMaxAngleMin",initialValue:-L.PI,getPrimitiveFunction:function(){t.clippingCylinderMaxAngleMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingCylinderMaxAngleMax",initialValue:L.PI,getPrimitiveFunction:function(){t.clippingCylinderMaxAngleMax=t._voxelPrimitive.maxBounds.y}}),n({name:"clippingCylinderMaxAngle",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingCylinderMaxAngle=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingCylinderMinAngleMin",initialValue:-L.PI}),n({name:"clippingCylinderMinAngleMax",initialValue:L.PI}),n({name:"clippingCylinderMinAngle",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingCylinderMinAngle=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingCylinderMaxHeightMin",initialValue:-1,getPrimitiveFunction:function(){t.clippingCylinderMaxHeightMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingCylinderMaxHeightMax",initialValue:1,getPrimitiveFunction:function(){t.clippingCylinderMaxHeightMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingCylinderMaxHeight",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingCylinderMaxHeight=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingCylinderMinHeightMin",initialValue:-1,getPrimitiveFunction:function(){t.clippingCylinderMinHeightMin=t._voxelPrimitive.minBounds.z}}),n({name:"clippingCylinderMinHeightMax",initialValue:1,getPrimitiveFunction:function(){t.clippingCylinderMinHeightMax=t._voxelPrimitive.maxBounds.z}}),n({name:"clippingCylinderMinHeight",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingCylinderMinHeight=t._voxelPrimitive.minClippingBounds.z}}),n({name:"translationX",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&V0(t)},getPrimitiveFunction:function(){t.translationX=I.getTranslation(t._voxelPrimitive.modelMatrix,new h).x}}),n({name:"translationY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&V0(t)},getPrimitiveFunction:function(){t.translationY=I.getTranslation(t._voxelPrimitive.modelMatrix,new h).y}}),n({name:"translationZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&V0(t)},getPrimitiveFunction:function(){t.translationZ=I.getTranslation(t._voxelPrimitive.modelMatrix,new h).z}}),n({name:"scaleX",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&V0(t)},getPrimitiveFunction:function(){t.scaleX=I.getScale(t._voxelPrimitive.modelMatrix,new h).x}}),n({name:"scaleY",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&V0(t)},getPrimitiveFunction:function(){t.scaleY=I.getScale(t._voxelPrimitive.modelMatrix,new h).y}}),n({name:"scaleZ",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&V0(t)},getPrimitiveFunction:function(){t.scaleZ=I.getScale(t._voxelPrimitive.modelMatrix,new h).z}}),n({name:"angleX",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&V0(t)}}),n({name:"angleY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&V0(t)}}),n({name:"angleZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&V0(t)}})}var Dkt=new h,Okt=new h,Bkt=new Tc,zkt=new q;function V0(e){let t=h.fromElements(e.translationX,e.translationY,e.translationZ,Dkt),n=h.fromElements(e.scaleX,e.scaleY,e.scaleZ,Okt),i=Bkt;i.heading=e.angleX,i.pitch=e.angleY,i.roll=e.angleZ;let o=q.fromHeadingPitchRoll(i,zkt),r=q.multiplyByScale(o,n,o);e._voxelPrimitive.modelMatrix=I.fromRotationTranslation(r,t,e._voxelPrimitive.modelMatrix)}Object.defineProperties(gh.prototype,{scene:{get:function(){return this._scene}},voxelPrimitive:{get:function(){return this._voxelPrimitive},set:function(e){if(l(this._customShaderCompilationRemoveCallback)&&this._customShaderCompilationRemoveCallback(),!l(e))return;this._voxelPrimitive=e;let t=this;t._customShaderCompilationRemoveCallback=t._voxelPrimitive.customShaderCompilationEvent.addEventListener(function(n){let i=t._voxelPrimitive.customShader.fragmentShaderText;t.shaderString=OFe(i),l(n)?(t.shaderCompilationMessage=n.message,t.shaderCompilationSuccess=!1):(t.shaderCompilationMessage="Shader compiled successfully!",t.shaderCompilationSuccess=!0)}),t._modelMatrixReady=!1;for(let n=0;n<t._getPrimitiveFunctions.length;n++)t._getPrimitiveFunctions[n]();t._modelMatrixReady=!0,V0(t)}}});gh.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};gh.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};gh.prototype.toggleTransform=function(){this.transformVisible=!this.transformVisible};gh.prototype.toggleBounds=function(){this.boundsVisible=!this.boundsVisible};gh.prototype.toggleClipping=function(){this.clippingVisible=!this.clippingVisible};gh.prototype.toggleShader=function(){this.shaderVisible=!this.shaderVisible};gh.prototype.compileShader=function(){l(this._voxelPrimitive)&&(this._voxelPrimitive.customShader=new c0({fragmentShaderText:this.shaderString,uniforms:this._voxelPrimitive.customShader.uniforms}))};gh.prototype.shaderEditorKeyPress=function(e,t){if(t.keyCode===9){t.preventDefault();let n=t.target,i=n.selectionStart,o=n.selectionEnd,r=o,a=n.value.slice(i,o).split(` `),c=a.length,d;if(t.shiftKey)for(d=0;d<c;++d)a[d][0]===" "&&(a[d][1]===" "?(a[d]=a[d].substr(2),r-=2):(a[d]=a[d].substr(1),r-=1));else for(d=0;d<c;++d)a[d]=` ${a[d]}`,r+=2;let u=a.join(` `);n.value=n.value.slice(0,i)+u+n.value.slice(o),n.selectionStart=i!==o?i:r,n.selectionEnd=r}else t.ctrlKey&&(t.keyCode===10||t.keyCode===13)&&this.compileShader();return!0};gh.prototype.isDestroyed=function(){return!1};gh.prototype.destroy=function(){let e=this;return this._definedProperties.forEach(function(t){Ge.getObservable(e,t).dispose()}),me(this)};var OU=gh;function hK(e,t){e=wn(e);let n=document.createElement("div"),i=new OU(t);this._viewModel=i,this._container=e,this._element=n;let o=document.createElement("div");o.textContent="Voxel Inspector",o.className="cesium-cesiumInspector-button",o.setAttribute("data-bind","click: toggleInspector"),n.appendChild(o),n.className="cesium-cesiumInspector cesium-VoxelInspector",n.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : inspectorVisible, "cesium-cesiumInspector-hidden" : !inspectorVisible}'),e.appendChild(n);let r=document.createElement("div");r.className="cesium-cesiumInspector-dropDown",n.appendChild(r);let{createSection:s,createCheckbox:a,createRangeInput:c,createButton:d}=eu,u=s(r,"Display","displayVisible","toggleDisplay"),m=s(r,"Transform","transformVisible","toggleTransform"),p=s(r,"Clipping","clippingVisible","toggleClipping"),b=s(r,"Shader","shaderVisible","toggleShader");u.appendChild(a("Depth Test","depthTest")),u.appendChild(a("Show","show")),u.appendChild(a("Disable Update","disableUpdate")),u.appendChild(a("Debug Draw","debugDraw")),u.appendChild(a("Jitter","jitter")),u.appendChild(a("Nearest Sampling","nearestSampling")),u.appendChild(c("Screen Space Error","screenSpaceError",0,128)),u.appendChild(c("Step Size","stepSize",0,2));let f=10,y=10,_=L.PI;m.appendChild(c("Translation X","translationX",-f,+f)),m.appendChild(c("Translation Y","translationY",-f,+f)),m.appendChild(c("Translation Z","translationZ",-f,+f)),m.appendChild(c("Scale X","scaleX",0,+y)),m.appendChild(c("Scale Y","scaleY",0,+y)),m.appendChild(c("Scale Z","scaleZ",0,+y)),m.appendChild(c("Heading","angleX",-_,+_)),m.appendChild(c("Pitch","angleY",-_,+_)),m.appendChild(c("Roll","angleZ",-_,+_)),Zse("Max X","Min X","Max Y","Min Y","Max Z","Min Z","clippingBoxMaxX","clippingBoxMinX","clippingBoxMaxY","clippingBoxMinY","clippingBoxMaxZ","clippingBoxMinZ","shapeIsBox",p),Zse("Max Longitude","Min Longitude","Max Latitude","Min Latitude","Max Height","Min Height","clippingEllipsoidMaxLongitude","clippingEllipsoidMinLongitude","clippingEllipsoidMaxLatitude","clippingEllipsoidMinLatitude","clippingEllipsoidMaxHeight","clippingEllipsoidMinHeight","shapeIsEllipsoid",p),Zse("Max Radius","Min Radius","Max Angle","Min Angle","Max Height","Min Height","clippingCylinderMaxRadius","clippingCylinderMinRadius","clippingCylinderMaxAngle","clippingCylinderMinAngle","clippingCylinderMaxHeight","clippingCylinderMinHeight","shapeIsCylinder",p);let S=document.createElement("div");b.appendChild(S);let Z=document.createElement("textarea");Z.setAttribute("data-bind","textInput: shaderString, event: { keydown: shaderEditorKeyPress }"),S.className="cesium-cesiumInspector-styleEditor",S.appendChild(Z);let V=d("Compile (Ctrl+Enter)","compileShader");S.appendChild(V);let C=document.createElement("label");C.style.display="block",C.setAttribute("data-bind","text: shaderCompilationMessage, style: {color: shaderCompilationSuccess ? 'green' : 'red'}"),S.appendChild(C),Ge.applyBindings(i,n)}Object.defineProperties(hK.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});hK.prototype.isDestroyed=function(){return!1};hK.prototype.destroy=function(){return Ge.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),me(this)};function Zse(e,t,n,i,o,r,s,a,c,d,u,m,p,b){let f=eu.createRangeInputWithDynamicMinMax,y=b.appendChild(document.createElement("div"));y.setAttribute("data-bind",`if: ${p}`),y.appendChild(f(e,s)),y.appendChild(f(t,a)),y.appendChild(f(n,c)),y.appendChild(f(i,d)),y.appendChild(f(o,u)),y.appendChild(f(r,m))}var BU=hK;function Hkt(e){let t=document.createElement("div");t.className="cesium-viewer-voxelInspectorContainer",e.container.appendChild(t);let n=new BU(t,e.scene);Object.defineProperties(e,{voxelInspector:{get:function(){return n}}})}var Vse=Hkt;globalThis.CESIUM_VERSION="1.144.0";var Kkt="1.144.0";return qFe(Jkt);})();