/** * @license * Cesium - https://github.com/CesiumGS/cesium * Version 1.132 * * 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. */ var Cesium=(()=>{var HSe=Object.create;var _9=Object.defineProperty;var zSe=Object.getOwnPropertyDescriptor;var KSe=Object.getOwnPropertyNames;var JSe=Object.getPrototypeOf,jSe=Object.prototype.hasOwnProperty;var E9=(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 Pu=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),qSe=(e,t)=>{for(var n in t)_9(e,n,{get:t[n],enumerable:!0})},wee=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of KSe(t))!jSe.call(e,o)&&o!==n&&_9(e,o,{get:()=>t[o],enumerable:!(i=zSe(t,o))||i.enumerable});return e};var y=(e,t,n)=>(n=e!=null?HSe(JSe(e)):{},wee(t||!e||!e.__esModule?_9(n,"default",{value:e,enumerable:!0}):n,e)),$Se=e=>wee(_9({},"__esModule",{value:!0}),e);var C=Pu(()=>{globalThis.CESIUM_WORKERS=atob("dmFyIENlc2l1bVdvcmtlcnM9KCgpPT57dmFyIGR4PU9iamVjdC5jcmVhdGU7dmFyIEdsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgbXg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgaHg9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIF94PU9iamVjdC5nZXRQcm90b3R5cGVPZix5eD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBkcj0odD0+dHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dHlwZW9mIFByb3h5PCJ1Ij9uZXcgUHJveHkodCx7Z2V0OihlLG4pPT4odHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6ZSlbbl19KTp0KShmdW5jdGlvbih0KXtpZih0eXBlb2YgcmVxdWlyZTwidSIpcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrdCsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxUMT10PT5lPT57dmFyIG49dFtlXTtpZihuKXJldHVybiBuKCk7dGhyb3cgbmV3IEVycm9yKCJNb2R1bGUgbm90IGZvdW5kIGluIGJ1bmRsZTogIitlKX07dmFyICQ9KHQsZSk9PigpPT4odCYmKGU9dCh0PTApKSxlKTt2YXIgWW49KHQsZSk9PigpPT4oZXx8dCgoZT17ZXhwb3J0czp7fX0pLmV4cG9ydHMsZSksZS5leHBvcnRzKSxsZT0odCxlKT0+e2Zvcih2YXIgbiBpbiBlKUdsKHQsbix7Z2V0OmVbbl0sZW51bWVyYWJsZTohMH0pfSxPMT0odCxlLG4sbyk9PntpZihlJiZ0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKWZvcihsZXQgciBvZiBoeChlKSkheXguY2FsbCh0LHIpJiZyIT09biYmR2wodCxyLHtnZXQ6KCk9PmVbcl0sZW51bWVyYWJsZTohKG89bXgoZSxyKSl8fG8uZW51bWVyYWJsZX0pO3JldHVybiB0fTt2YXIgbXI9KHQsZSxuKT0+KG49dCE9bnVsbD9keChfeCh0KSk6e30sTzEoZXx8IXR8fCF0Ll9fZXNNb2R1bGU/R2wobiwiZGVmYXVsdCIse3ZhbHVlOnQsZW51bWVyYWJsZTohMH0pOm4sdCkpLGd4PXQ9Pk8xKEdsKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0KTtmdW5jdGlvbiBBeCh0KXtyZXR1cm4gdCE9bnVsbH12YXIgbSxmdD0kKCgpPT57bT1BeH0pO2Z1bmN0aW9uIEdzKHQpe3RoaXMubmFtZT0iRGV2ZWxvcGVyRXJyb3IiLHRoaXMubWVzc2FnZT10O2xldCBlO3RyeXt0aHJvdyBuZXcgRXJyb3J9Y2F0Y2gobil7ZT1uLnN0YWNrfXRoaXMuc3RhY2s9ZX12YXIgRCxIdD0kKCgpPT57ZnQoKTttKE9iamVjdC5jcmVhdGUpJiYoR3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxHcy5wcm90b3R5cGUuY29uc3RydWN0b3I9R3MpO0dzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2xldCB0PWAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7cmV0dXJuIG0odGhpcy5zdGFjaykmJih0Kz1gCiR7dGhpcy5zdGFjay50b1N0cmluZygpfWApLHR9O0dzLnRocm93SW5zdGFudGlhdGlvbkVycm9yPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEdzKCJUaGlzIGZ1bmN0aW9uIGRlZmluZXMgYW4gaW50ZXJmYWNlIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4iKX07RD1Hc30pO2Z1bmN0aW9uIGJ4KHQpe3JldHVybmAke3R9IGlzIHJlcXVpcmVkLCBhY3R1YWwgdmFsdWUgd2FzIHVuZGVmaW5lZGB9ZnVuY3Rpb24gamModCxlLG4pe3JldHVybmBFeHBlY3RlZCAke259IHRvIGJlIHR5cGVvZiAke2V9LCBhY3R1YWwgdHlwZW9mIHdhcyAke3R9YH12YXIgJG4seSxXdD0kKCgpPT57ZnQoKTtIdCgpOyRuPXt9OyRuLnR5cGVPZj17fTskbi5kZWZpbmVkPWZ1bmN0aW9uKHQsZSl7aWYoIW0oZSkpdGhyb3cgbmV3IEQoYngodCkpfTskbi50eXBlT2YuZnVuYz1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBEKGpjKHR5cGVvZiBlLCJmdW5jdGlvbiIsdCkpfTskbi50eXBlT2Yuc3RyaW5nPWZ1bmN0aW9uKHQsZSl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBEKGpjKHR5cGVvZiBlLCJzdHJpbmciLHQpKX07JG4udHlwZU9mLm51bWJlcj1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgRChqYyh0eXBlb2YgZSwibnVtYmVyIix0KSl9OyRuLnR5cGVPZi5udW1iZXIubGVzc1RoYW49ZnVuY3Rpb24odCxlLG4pe2lmKCRuLnR5cGVPZi5udW1iZXIodCxlKSxlPj1uKXRocm93IG5ldyBEKGBFeHBlY3RlZCAke3R9IHRvIGJlIGxlc3MgdGhhbiAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7ZX1gKX07JG4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKHQsZSxuKXtpZigkbi50eXBlT2YubnVtYmVyKHQsZSksZT5uKXRocm93IG5ldyBEKGBFeHBlY3RlZCAke3R9IHRvIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7ZX1gKX07JG4udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbj1mdW5jdGlvbih0LGUsbil7aWYoJG4udHlwZU9mLm51bWJlcih0LGUpLGU8PW4pdGhyb3cgbmV3IEQoYEV4cGVjdGVkICR7dH0gdG8gYmUgZ3JlYXRlciB0aGFuICR7bn0sIGFjdHVhbCB2YWx1ZSB3YXMgJHtlfWApfTskbi50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHM9ZnVuY3Rpb24odCxlLG4pe2lmKCRuLnR5cGVPZi5udW1iZXIodCxlKSxlPG4pdGhyb3cgbmV3IEQoYEV4cGVjdGVkICR7dH0gdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7bn0sIGFjdHVhbCB2YWx1ZSB3YXMgJHtlfWApfTskbi50eXBlT2Yub2JqZWN0PWZ1bmN0aW9uKHQsZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyBEKGpjKHR5cGVvZiBlLCJvYmplY3QiLHQpKX07JG4udHlwZU9mLmJvb2w9ZnVuY3Rpb24odCxlKXtpZih0eXBlb2YgZSE9ImJvb2xlYW4iKXRocm93IG5ldyBEKGpjKHR5cGVvZiBlLCJib29sZWFuIix0KSl9OyRuLnR5cGVPZi5iaWdpbnQ9ZnVuY3Rpb24odCxlKXtpZih0eXBlb2YgZSE9ImJpZ2ludCIpdGhyb3cgbmV3IEQoamModHlwZW9mIGUsImJpZ2ludCIsdCkpfTskbi50eXBlT2YubnVtYmVyLmVxdWFscz1mdW5jdGlvbih0LGUsbixvKXtpZigkbi50eXBlT2YubnVtYmVyKHQsbiksJG4udHlwZU9mLm51bWJlcihlLG8pLG4hPT1vKXRocm93IG5ldyBEKGAke3R9IG11c3QgYmUgZXF1YWwgdG8gJHtlfSwgdGhlIGFjdHVhbCB2YWx1ZXMgYXJlICR7bn0gYW5kICR7b31gKX07eT0kbn0pO3ZhciBSMT1ZbigoRUcsRTEpPT57dmFyIFNpPWZ1bmN0aW9uKHQpe3Q9PW51bGwmJih0PW5ldyBEYXRlKCkuZ2V0VGltZSgpKSx0aGlzLk49NjI0LHRoaXMuTT0zOTcsdGhpcy5NQVRSSVhfQT0yNTY3NDgzNjE1LHRoaXMuVVBQRVJfTUFTSz0yMTQ3NDgzNjQ4LHRoaXMuTE9XRVJfTUFTSz0yMTQ3NDgzNjQ3LHRoaXMubXQ9bmV3IEFycmF5KHRoaXMuTiksdGhpcy5tdGk9dGhpcy5OKzEsdC5jb25zdHJ1Y3Rvcj09QXJyYXk/dGhpcy5pbml0X2J5X2FycmF5KHQsdC5sZW5ndGgpOnRoaXMuaW5pdF9zZWVkKHQpfTtTaS5wcm90b3R5cGUuaW5pdF9zZWVkPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLm10WzBdPXQ+Pj4wLHRoaXMubXRpPTE7dGhpcy5tdGk8dGhpcy5OO3RoaXMubXRpKyspe3ZhciB0PXRoaXMubXRbdGhpcy5tdGktMV1edGhpcy5tdFt0aGlzLm10aS0xXT4+PjMwO3RoaXMubXRbdGhpcy5tdGldPSgoKHQmNDI5NDkwMTc2MCk+Pj4xNikqMTgxMjQzMzI1Mzw8MTYpKyh0JjY1NTM1KSoxODEyNDMzMjUzK3RoaXMubXRpLHRoaXMubXRbdGhpcy5tdGldPj4+PTB9fTtTaS5wcm90b3R5cGUuaW5pdF9ieV9hcnJheT1mdW5jdGlvbih0LGUpe3ZhciBuLG8scjtmb3IodGhpcy5pbml0X3NlZWQoMTk2NTAyMTgpLG49MSxvPTAscj10aGlzLk4+ZT90aGlzLk46ZTtyO3ItLSl7dmFyIGk9dGhpcy5tdFtuLTFdXnRoaXMubXRbbi0xXT4+PjMwO3RoaXMubXRbbl09KHRoaXMubXRbbl1eKCgoaSY0Mjk0OTAxNzYwKT4+PjE2KSoxNjY0NTI1PDwxNikrKGkmNjU1MzUpKjE2NjQ1MjUpK3Rbb10rbyx0aGlzLm10W25dPj4+PTAsbisrLG8rKyxuPj10aGlzLk4mJih0aGlzLm10WzBdPXRoaXMubXRbdGhpcy5OLTFdLG49MSksbz49ZSYmKG89MCl9Zm9yKHI9dGhpcy5OLTE7cjtyLS0pe3ZhciBpPXRoaXMubXRbbi0xXV50aGlzLm10W24tMV0+Pj4zMDt0aGlzLm10W25dPSh0aGlzLm10W25dXigoKGkmNDI5NDkwMTc2MCk+Pj4xNikqMTU2NjA4Mzk0MTw8MTYpKyhpJjY1NTM1KSoxNTY2MDgzOTQxKS1uLHRoaXMubXRbbl0+Pj49MCxuKyssbj49dGhpcy5OJiYodGhpcy5tdFswXT10aGlzLm10W3RoaXMuTi0xXSxuPTEpfXRoaXMubXRbMF09MjE0NzQ4MzY0OH07U2kucHJvdG90eXBlLnJhbmRvbV9pbnQ9ZnVuY3Rpb24oKXt2YXIgdCxlPW5ldyBBcnJheSgwLHRoaXMuTUFUUklYX0EpO2lmKHRoaXMubXRpPj10aGlzLk4pe3ZhciBuO2Zvcih0aGlzLm10aT09dGhpcy5OKzEmJnRoaXMuaW5pdF9zZWVkKDU0ODkpLG49MDtuPHRoaXMuTi10aGlzLk07bisrKXQ9dGhpcy5tdFtuXSZ0aGlzLlVQUEVSX01BU0t8dGhpcy5tdFtuKzFdJnRoaXMuTE9XRVJfTUFTSyx0aGlzLm10W25dPXRoaXMubXRbbit0aGlzLk1dXnQ+Pj4xXmVbdCYxXTtmb3IoO248dGhpcy5OLTE7bisrKXQ9dGhpcy5tdFtuXSZ0aGlzLlVQUEVSX01BU0t8dGhpcy5tdFtuKzFdJnRoaXMuTE9XRVJfTUFTSyx0aGlzLm10W25dPXRoaXMubXRbbisodGhpcy5NLXRoaXMuTildXnQ+Pj4xXmVbdCYxXTt0PXRoaXMubXRbdGhpcy5OLTFdJnRoaXMuVVBQRVJfTUFTS3x0aGlzLm10WzBdJnRoaXMuTE9XRVJfTUFTSyx0aGlzLm10W3RoaXMuTi0xXT10aGlzLm10W3RoaXMuTS0xXV50Pj4+MV5lW3QmMV0sdGhpcy5tdGk9MH1yZXR1cm4gdD10aGlzLm10W3RoaXMubXRpKytdLHRePXQ+Pj4xMSx0Xj10PDw3JjI2MzY5Mjg2NDAsdF49dDw8MTUmNDAyMjczMDc1Mix0Xj10Pj4+MTgsdD4+PjB9O1NpLnByb3RvdHlwZS5yYW5kb21faW50MzE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5kb21faW50KCk+Pj4xfTtTaS5wcm90b3R5cGUucmFuZG9tX2luY2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5kb21faW50KCkqKDEvNDI5NDk2NzI5NSl9O1NpLnByb3RvdHlwZS5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5kb21faW50KCkqKDEvNDI5NDk2NzI5Nil9O1NpLnByb3RvdHlwZS5yYW5kb21fZXhjbD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJhbmRvbV9pbnQoKSsuNSkqKDEvNDI5NDk2NzI5Nil9O1NpLnByb3RvdHlwZS5yYW5kb21fbG9uZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMucmFuZG9tX2ludCgpPj4+NSxlPXRoaXMucmFuZG9tX2ludCgpPj4+NjtyZXR1cm4odCo2NzEwODg2NCtlKSooMS85MDA3MTk5MjU0NzQwOTkyKX07RTEuZXhwb3J0cz1TaX0pO3ZhciBTbSxDdCxWbCxTMSxQLEt0PSQoKCk9PntTbT1tcihSMSgpLDEpO1d0KCk7ZnQoKTtIdCgpO0N0PXt9O0N0LkVQU0lMT04xPS4xO0N0LkVQU0lMT04yPS4wMTtDdC5FUFNJTE9OMz0uMDAxO0N0LkVQU0lMT040PTFlLTQ7Q3QuRVBTSUxPTjU9MWUtNTtDdC5FUFNJTE9ONj0xZS02O0N0LkVQU0lMT043PTFlLTc7Q3QuRVBTSUxPTjg9MWUtODtDdC5FUFNJTE9OOT0xZS05O0N0LkVQU0lMT04xMD0xZS0xMDtDdC5FUFNJTE9OMTE9MWUtMTE7Q3QuRVBTSUxPTjEyPTFlLTEyO0N0LkVQU0lMT04xMz0xZS0xMztDdC5FUFNJTE9OMTQ9MWUtMTQ7Q3QuRVBTSUxPTjE1PTFlLTE1O0N0LkVQU0lMT04xNj0xZS0xNjtDdC5FUFNJTE9OMTc9MWUtMTc7Q3QuRVBTSUxPTjE4PTFlLTE4O0N0LkVQU0lMT04xOT0xZS0xOTtDdC5FUFNJTE9OMjA9MWUtMjA7Q3QuRVBTSUxPTjIxPTFlLTIxO0N0LkdSQVZJVEFUSU9OQUxQQVJBTUVURVI9Mzk4NjAwNDQxOGU1O0N0LlNPTEFSX1JBRElVUz02OTU1ZTU7Q3QuTFVOQVJfUkFESVVTPTE3Mzc0MDA7Q3QuU0lYVFlfRk9VUl9LSUxPQllURVM9NjQqMTAyNDtDdC5GT1VSX0dJR0FCWVRFUz00KjEwMjQqMTAyNCoxMDI0O0N0LnNpZ249TWF0aC5zaWduPz9mdW5jdGlvbihlKXtyZXR1cm4gZT0rZSxlPT09MHx8ZSE9PWU/ZTplPjA/MTotMX07Q3Quc2lnbk5vdFplcm89ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD8tMToxfTtDdC50b1NOb3JtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZT8/MjU1LE1hdGgucm91bmQoKEN0LmNsYW1wKHQsLTEsMSkqLjUrLjUpKmUpfTtDdC5mcm9tU05vcm09ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPz8yNTUsQ3QuY2xhbXAodCwwLGUpL2UqMi0xfTtDdC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPU1hdGgubWF4KG4tZSwwKSxuPT09MD8wOkN0LmNsYW1wKCh0LWUpL24sMCwxKX07Q3Quc2luaD1NYXRoLnNpbmg/P2Z1bmN0aW9uKGUpe3JldHVybihNYXRoLmV4cChlKS1NYXRoLmV4cCgtZSkpLzJ9O0N0LmNvc2g9TWF0aC5jb3NoPz9mdW5jdGlvbihlKXtyZXR1cm4oTWF0aC5leHAoZSkrTWF0aC5leHAoLWUpKS8yfTtDdC5sZXJwPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4oMS1uKSp0K24qZX07Q3QuUEk9TWF0aC5QSTtDdC5PTkVfT1ZFUl9QST0xL01hdGguUEk7Q3QuUElfT1ZFUl9UV089TWF0aC5QSS8yO0N0LlBJX09WRVJfVEhSRUU9TWF0aC5QSS8zO0N0LlBJX09WRVJfRk9VUj1NYXRoLlBJLzQ7Q3QuUElfT1ZFUl9TSVg9TWF0aC5QSS82O0N0LlRIUkVFX1BJX09WRVJfVFdPPTMqTWF0aC5QSS8yO0N0LlRXT19QST0yKk1hdGguUEk7Q3QuT05FX09WRVJfVFdPX1BJPTEvKDIqTWF0aC5QSSk7Q3QuUkFESUFOU19QRVJfREVHUkVFPU1hdGguUEkvMTgwO0N0LkRFR1JFRVNfUEVSX1JBRElBTj0xODAvTWF0aC5QSTtDdC5SQURJQU5TX1BFUl9BUkNTRUNPTkQ9Q3QuUkFESUFOU19QRVJfREVHUkVFLzM2MDA7Q3QudG9SYWRpYW5zPWZ1bmN0aW9uKHQpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJkZWdyZWVzIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0KkN0LlJBRElBTlNfUEVSX0RFR1JFRX07Q3QudG9EZWdyZWVzPWZ1bmN0aW9uKHQpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJyYWRpYW5zIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0KkN0LkRFR1JFRVNfUEVSX1JBRElBTn07Q3QuY29udmVydExvbmdpdHVkZVJhbmdlPWZ1bmN0aW9uKHQpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJhbmdsZSBpcyByZXF1aXJlZC4iKTtsZXQgZT1DdC5UV09fUEksbj10LU1hdGguZmxvb3IodC9lKSplO3JldHVybiBuPC1NYXRoLlBJP24rZTpuPj1NYXRoLlBJP24tZTpufTtDdC5jbGFtcFRvTGF0aXR1ZGVSYW5nZT1mdW5jdGlvbih0KXtpZighbSh0KSl0aHJvdyBuZXcgRCgiYW5nbGUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIEN0LmNsYW1wKHQsLTEqQ3QuUElfT1ZFUl9UV08sQ3QuUElfT1ZFUl9UV08pfTtDdC5uZWdhdGl2ZVBpVG9QaT1mdW5jdGlvbih0KXtpZighbSh0KSl0aHJvdyBuZXcgRCgiYW5nbGUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQ+PS1DdC5QSSYmdDw9Q3QuUEk/dDpDdC56ZXJvVG9Ud29QaSh0K0N0LlBJKS1DdC5QSX07Q3QuemVyb1RvVHdvUGk9ZnVuY3Rpb24odCl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImFuZ2xlIGlzIHJlcXVpcmVkLiIpO2lmKHQ+PTAmJnQ8PUN0LlRXT19QSSlyZXR1cm4gdDtsZXQgZT1DdC5tb2QodCxDdC5UV09fUEkpO3JldHVybiBNYXRoLmFicyhlKTxDdC5FUFNJTE9OMTQmJk1hdGguYWJzKHQpPkN0LkVQU0lMT04xND9DdC5UV09fUEk6ZX07Q3QubW9kPWZ1bmN0aW9uKHQsZSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoIm0gaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoIm4gaXMgcmVxdWlyZWQuIik7aWYoZT09PTApdGhyb3cgbmV3IEQoImRpdmlzb3IgY2Fubm90IGJlIDAuIik7cmV0dXJuIEN0LnNpZ24odCk9PT1DdC5zaWduKGUpJiZNYXRoLmFicyh0KTxNYXRoLmFicyhlKT90Oih0JWUrZSklZX07Q3QuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbixvKXtpZighbSh0KSl0aHJvdyBuZXcgRCgibGVmdCBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgicmlnaHQgaXMgcmVxdWlyZWQuIik7bj1uPz8wLG89bz8/bjtsZXQgcj1NYXRoLmFicyh0LWUpO3JldHVybiByPD1vfHxyPD1uKk1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKX07Q3QubGVzc1RoYW49ZnVuY3Rpb24odCxlLG4pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJmaXJzdCBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgic2Vjb25kIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG4pKXRocm93IG5ldyBEKCJhYnNvbHV0ZUVwc2lsb24gaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQtZTwtbn07Q3QubGVzc1RoYW5PckVxdWFscz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImZpcnN0IGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJzZWNvbmQgaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdC1lPG59O0N0LmdyZWF0ZXJUaGFuPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgiZmlyc3QgaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoInNlY29uZCBpcyByZXF1aXJlZC4iKTtpZighbShuKSl0aHJvdyBuZXcgRCgiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0LWU+bn07Q3QuZ3JlYXRlclRoYW5PckVxdWFscz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImZpcnN0IGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJzZWNvbmQgaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdC1lPi1ufTtWbD1bMV07Q3QuZmFjdG9yaWFsPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwKXRocm93IG5ldyBEKCJBIG51bWJlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCBpcyByZXF1aXJlZC4iKTtsZXQgZT1WbC5sZW5ndGg7aWYodD49ZSl7bGV0IG49VmxbZS0xXTtmb3IobGV0IG89ZTtvPD10O28rKyl7bGV0IHI9bipvO1ZsLnB1c2gociksbj1yfX1yZXR1cm4gVmxbdF19O0N0LmluY3JlbWVudFdyYXA9ZnVuY3Rpb24odCxlLG4pe2lmKG49bj8/MCwhbSh0KSl0aHJvdyBuZXcgRCgibiBpcyByZXF1aXJlZC4iKTtpZihlPD1uKXRocm93IG5ldyBEKCJtYXhpbXVtVmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gbWluaW11bVZhbHVlLiIpO3JldHVybisrdCx0PmUmJih0PW4pLHR9O0N0LmlzUG93ZXJPZlR3bz1mdW5jdGlvbih0KXtpZih0eXBlb2YgdCE9Im51bWJlciJ8fHQ8MHx8dD40Mjk0OTY3Mjk1KXRocm93IG5ldyBEKCJBIG51bWJlciBiZXR3ZWVuIDAgYW5kICgyXjMyKS0xIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0IT09MCYmKHQmdC0xKT09PTB9O0N0Lm5leHRQb3dlck9mVHdvPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwfHx0PjIxNDc0ODM2NDgpdGhyb3cgbmV3IEQoIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMl4zMSBpcyByZXF1aXJlZC4iKTtyZXR1cm4tLXQsdHw9dD4+MSx0fD10Pj4yLHR8PXQ+PjQsdHw9dD4+OCx0fD10Pj4xNiwrK3QsdH07Q3QucHJldmlvdXNQb3dlck9mVHdvPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwfHx0PjQyOTQ5NjcyOTUpdGhyb3cgbmV3IEQoIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKDJeMzIpLTEgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHR8PXQ+PjEsdHw9dD4+Mix0fD10Pj40LHR8PXQ+PjgsdHw9dD4+MTYsdHw9dD4+MzIsdD0odD4+PjApLSh0Pj4+MSksdH07Q3QuY2xhbXA9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5udW1iZXIoInZhbHVlIix0KSx5LnR5cGVPZi5udW1iZXIoIm1pbiIsZSkseS50eXBlT2YubnVtYmVyKCJtYXgiLG4pLHQ8ZT9lOnQ+bj9uOnR9O1MxPW5ldyBTbS5kZWZhdWx0O0N0LnNldFJhbmRvbU51bWJlclNlZWQ9ZnVuY3Rpb24odCl7aWYoIW0odCkpdGhyb3cgbmV3IEQoInNlZWQgaXMgcmVxdWlyZWQuIik7UzE9bmV3IFNtLmRlZmF1bHQodCl9O0N0Lm5leHRSYW5kb21OdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gUzEucmFuZG9tKCl9O0N0LnJhbmRvbUJldHdlZW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3QubmV4dFJhbmRvbU51bWJlcigpKihlLXQpK3R9O0N0LmFjb3NDbGFtcGVkPWZ1bmN0aW9uKHQpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gTWF0aC5hY29zKEN0LmNsYW1wKHQsLTEsMSkpfTtDdC5hc2luQ2xhbXBlZD1mdW5jdGlvbih0KXtpZighbSh0KSl0aHJvdyBuZXcgRCgidmFsdWUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIE1hdGguYXNpbihDdC5jbGFtcCh0LC0xLDEpKX07Q3QuY2hvcmRMZW5ndGg9ZnVuY3Rpb24odCxlKXtpZighbSh0KSl0aHJvdyBuZXcgRCgiYW5nbGUgaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoInJhZGl1cyBpcyByZXF1aXJlZC4iKTtyZXR1cm4gMiplKk1hdGguc2luKHQqLjUpfTtDdC5sb2dCYXNlPWZ1bmN0aW9uKHQsZSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoIm51bWJlciBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgiYmFzZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5sb2coZSl9O0N0LmNicnQ9TWF0aC5jYnJ0Pz9mdW5jdGlvbihlKXtsZXQgbj1NYXRoLnBvdyhNYXRoLmFicyhlKSwuMzMzMzMzMzMzMzMzMzMzMyk7cmV0dXJuIGU8MD8tbjpufTtDdC5sb2cyPU1hdGgubG9nMj8/ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUpKk1hdGguTE9HMkV9O0N0LmZvZz1mdW5jdGlvbih0LGUpe2xldCBuPXQqZTtyZXR1cm4gMS1NYXRoLmV4cCgtKG4qbikpfTtDdC5mYXN0QXBwcm94aW1hdGVBdGFuPWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoIngiLHQpLHQqKC0uMTc4NCpNYXRoLmFicyh0KS0uMDY2Myp0KnQrMS4wMzAxKX07Q3QuZmFzdEFwcHJveGltYXRlQXRhbjI9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5udW1iZXIoIngiLHQpLHkudHlwZU9mLm51bWJlcigieSIsZSk7bGV0IG4sbz1NYXRoLmFicyh0KTtuPU1hdGguYWJzKGUpO2xldCByPU1hdGgubWF4KG8sbik7bj1NYXRoLm1pbihvLG4pO2xldCBpPW4vcjtpZihpc05hTihpKSl0aHJvdyBuZXcgRCgiZWl0aGVyIHggb3IgeSBtdXN0IGJlIG5vbnplcm8iKTtyZXR1cm4gbz1DdC5mYXN0QXBwcm94aW1hdGVBdGFuKGkpLG89TWF0aC5hYnMoZSk+TWF0aC5hYnModCk/Q3QuUElfT1ZFUl9UV08tbzpvLG89dDwwP0N0LlBJLW86byxvPWU8MD8tbzpvLG99O1A9Q3R9KTtmdW5jdGlvbiBidCh0LGUsbil7dGhpcy54PXQ/PzAsdGhpcy55PWU/PzAsdGhpcy56PW4/PzB9dmFyIGpsLHgxLHpsLHhtLHd4LGhyLEhjLGEsRHQ9JCgoKT0+e1d0KCk7ZnQoKTtIdCgpO0t0KCk7YnQuZnJvbVNwaGVyaWNhbD1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgic3BoZXJpY2FsIix0KSxtKGUpfHwoZT1uZXcgYnQpO2xldCBuPXQuY2xvY2ssbz10LmNvbmUscj10Lm1hZ25pdHVkZT8/MSxpPXIqTWF0aC5zaW4obyk7cmV0dXJuIGUueD1pKk1hdGguY29zKG4pLGUueT1pKk1hdGguc2luKG4pLGUuej1yKk1hdGguY29zKG8pLGV9O2J0LmZyb21FbGVtZW50cz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gbShvKT8oby54PXQsby55PWUsby56PW4sbyk6bmV3IGJ0KHQsZSxuKX07YnQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihtKHQpKXJldHVybiBtKGUpPyhlLng9dC54LGUueT10LnksZS56PXQueixlKTpuZXcgYnQodC54LHQueSx0LnopfTtidC5mcm9tQ2FydGVzaWFuND1idC5jbG9uZTtidC5wYWNrZWRMZW5ndGg9MztidC5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGVbbisrXT10LngsZVtuKytdPXQueSxlW25dPXQueixlfTtidC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsbShuKXx8KG49bmV3IGJ0KSxuLng9dFtlKytdLG4ueT10W2UrK10sbi56PXRbZV0sbn07YnQucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJhcnJheSIsdCk7bGV0IG49dC5sZW5ndGgsbz1uKjM7aWYoIW0oZSkpZT1uZXcgQXJyYXkobyk7ZWxzZXtpZighQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGghPT1vKXRocm93IG5ldyBEKCJJZiByZXN1bHQgaXMgYSB0eXBlZCBhcnJheSwgaXQgbXVzdCBoYXZlIGV4YWN0bHkgYXJyYXkubGVuZ3RoICogMyBlbGVtZW50cyIpO2UubGVuZ3RoIT09byYmKGUubGVuZ3RoPW8pfWZvcihsZXQgcj0wO3I8bjsrK3IpYnQucGFjayh0W3JdLGUsciozKTtyZXR1cm4gZX07YnQudW5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXtpZih5LmRlZmluZWQoImFycmF5Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiYXJyYXkubGVuZ3RoIix0Lmxlbmd0aCwzKSx0Lmxlbmd0aCUzIT09MCl0aHJvdyBuZXcgRCgiYXJyYXkgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzLiIpO2xldCBuPXQubGVuZ3RoO20oZSk/ZS5sZW5ndGg9bi8zOmU9bmV3IEFycmF5KG4vMyk7Zm9yKGxldCBvPTA7bzxuO28rPTMpe2xldCByPW8vMztlW3JdPWJ0LnVucGFjayh0LG8sZVtyXSl9cmV0dXJuIGV9O2J0LmZyb21BcnJheT1idC51bnBhY2s7YnQubWF4aW11bUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLE1hdGgubWF4KHQueCx0LnksdC56KX07YnQubWluaW11bUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLE1hdGgubWluKHQueCx0LnksdC56KX07YnQubWluaW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5taW4odC54LGUueCksbi55PU1hdGgubWluKHQueSxlLnkpLG4uej1NYXRoLm1pbih0LnosZS56KSxufTtidC5tYXhpbXVtQnlDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImZpcnN0Iix0KSx5LnR5cGVPZi5vYmplY3QoInNlY29uZCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD1NYXRoLm1heCh0LngsZS54KSxuLnk9TWF0aC5tYXgodC55LGUueSksbi56PU1hdGgubWF4KHQueixlLnopLG59O2J0LmNsYW1wPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pO2xldCByPVAuY2xhbXAodC54LGUueCxuLngpLGk9UC5jbGFtcCh0LnksZS55LG4ueSkscz1QLmNsYW1wKHQueixlLnosbi56KTtyZXR1cm4gby54PXIsby55PWksby56PXMsb307YnQubWFnbml0dWRlU3F1YXJlZD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHQueCp0LngrdC55KnQueSt0LnoqdC56fTtidC5tYWduaXR1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChidC5tYWduaXR1ZGVTcXVhcmVkKHQpKX07amw9bmV3IGJ0O2J0LmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksYnQuc3VidHJhY3QodCxlLGpsKSxidC5tYWduaXR1ZGUoamwpfTtidC5kaXN0YW5jZVNxdWFyZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSxidC5zdWJ0cmFjdCh0LGUsamwpLGJ0Lm1hZ25pdHVkZVNxdWFyZWQoamwpfTtidC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPWJ0Lm1hZ25pdHVkZSh0KTtpZihlLng9dC54L24sZS55PXQueS9uLGUuej10Lnovbixpc05hTihlLngpfHxpc05hTihlLnkpfHxpc05hTihlLnopKXRocm93IG5ldyBEKCJub3JtYWxpemVkIHJlc3VsdCBpcyBub3QgYSBudW1iZXIiKTtyZXR1cm4gZX07YnQuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdC54KmUueCt0LnkqZS55K3QueiplLnp9O2J0Lm11bHRpcGx5Q29tcG9uZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngqZS54LG4ueT10LnkqZS55LG4uej10LnoqZS56LG59O2J0LmRpdmlkZUNvbXBvbmVudHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2UueCxuLnk9dC55L2UueSxuLno9dC56L2UueixufTtidC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54K2UueCxuLnk9dC55K2UueSxuLno9dC56K2UueixufTtidC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngtZS54LG4ueT10LnktZS55LG4uej10LnotZS56LG59O2J0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG4uej10LnoqZSxufTtidC5kaXZpZGVCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxhciIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngvZSxuLnk9dC55L2Usbi56PXQuei9lLG59O2J0Lm5lZ2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD0tdC54LGUueT0tdC55LGUuej0tdC56LGV9O2J0LmFicz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD1NYXRoLmFicyh0LngpLGUueT1NYXRoLmFicyh0LnkpLGUuej1NYXRoLmFicyh0LnopLGV9O3gxPW5ldyBidDtidC5sZXJwPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksYnQubXVsdGlwbHlCeVNjYWxhcihlLG4seDEpLG89YnQubXVsdGlwbHlCeVNjYWxhcih0LDEtbixvKSxidC5hZGQoeDEsbyxvKX07emw9bmV3IGJ0LHhtPW5ldyBidDtidC5hbmdsZUJldHdlZW49ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLGJ0Lm5vcm1hbGl6ZSh0LHpsKSxidC5ub3JtYWxpemUoZSx4bSk7bGV0IG49YnQuZG90KHpsLHhtKSxvPWJ0Lm1hZ25pdHVkZShidC5jcm9zcyh6bCx4bSx6bCkpO3JldHVybiBNYXRoLmF0YW4yKG8sbil9O3d4PW5ldyBidDtidC5tb3N0T3J0aG9nb25hbEF4aXM9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPWJ0Lm5vcm1hbGl6ZSh0LHd4KTtyZXR1cm4gYnQuYWJzKG4sbiksbi54PD1uLnk/bi54PD1uLno/ZT1idC5jbG9uZShidC5VTklUX1gsZSk6ZT1idC5jbG9uZShidC5VTklUX1osZSk6bi55PD1uLno/ZT1idC5jbG9uZShidC5VTklUX1ksZSk6ZT1idC5jbG9uZShidC5VTklUX1osZSksZX07YnQucHJvamVjdFZlY3Rvcj1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhIix0KSx5LmRlZmluZWQoImIiLGUpLHkuZGVmaW5lZCgicmVzdWx0IixuKTtsZXQgbz1idC5kb3QodCxlKS9idC5kb3QoZSxlKTtyZXR1cm4gYnQubXVsdGlwbHlCeVNjYWxhcihlLG8sbil9O2J0LmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8bSh0KSYmbShlKSYmdC54PT09ZS54JiZ0Lnk9PT1lLnkmJnQuej09PWUuen07YnQuZXF1YWxzQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lng9PT1lW25dJiZ0Lnk9PT1lW24rMV0mJnQuej09PWVbbisyXX07YnQuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdD09PWV8fG0odCkmJm0oZSkmJlAuZXF1YWxzRXBzaWxvbih0LngsZS54LG4sbykmJlAuZXF1YWxzRXBzaWxvbih0LnksZS55LG4sbykmJlAuZXF1YWxzRXBzaWxvbih0LnosZS56LG4sbyl9O2J0LmNyb3NzPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10Lngscj10LnksaT10Lnoscz1lLngsZj1lLnksdT1lLnosYz1yKnUtaSpmLGw9aSpzLW8qdSxwPW8qZi1yKnM7cmV0dXJuIG4ueD1jLG4ueT1sLG4uej1wLG59O2J0Lm1pZHBvaW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PSh0LngrZS54KSouNSxuLnk9KHQueStlLnkpKi41LG4uej0odC56K2UueikqLjUsbn07YnQuZnJvbURlZ3JlZXM9ZnVuY3Rpb24odCxlLG4sbyxyKXtyZXR1cm4geS50eXBlT2YubnVtYmVyKCJsb25naXR1ZGUiLHQpLHkudHlwZU9mLm51bWJlcigibGF0aXR1ZGUiLGUpLHQ9UC50b1JhZGlhbnModCksZT1QLnRvUmFkaWFucyhlKSxidC5mcm9tUmFkaWFucyh0LGUsbixvLHIpfTtocj1uZXcgYnQsSGM9bmV3IGJ0O2J0Ll9lbGxpcHNvaWRSYWRpaVNxdWFyZWQ9bmV3IGJ0KDYzNzgxMzcqNjM3ODEzNyw2Mzc4MTM3KjYzNzgxMzcsNjM1Njc1MjMxNDI0NTE3OWUtOSo2MzU2NzUyMzE0MjQ1MTc5ZS05KTtidC5mcm9tUmFkaWFucz1mdW5jdGlvbih0LGUsbixvLHIpe3kudHlwZU9mLm51bWJlcigibG9uZ2l0dWRlIix0KSx5LnR5cGVPZi5udW1iZXIoImxhdGl0dWRlIixlKSxuPW4/PzA7bGV0IGk9bShvKT9vLnJhZGlpU3F1YXJlZDpidC5fZWxsaXBzb2lkUmFkaWlTcXVhcmVkLHM9TWF0aC5jb3MoZSk7aHIueD1zKk1hdGguY29zKHQpLGhyLnk9cypNYXRoLnNpbih0KSxoci56PU1hdGguc2luKGUpLGhyPWJ0Lm5vcm1hbGl6ZShocixociksYnQubXVsdGlwbHlDb21wb25lbnRzKGksaHIsSGMpO2xldCBmPU1hdGguc3FydChidC5kb3QoaHIsSGMpKTtyZXR1cm4gSGM9YnQuZGl2aWRlQnlTY2FsYXIoSGMsZixIYyksaHI9YnQubXVsdGlwbHlCeVNjYWxhcihocixuLGhyKSxtKHIpfHwocj1uZXcgYnQpLGJ0LmFkZChIYyxocixyKX07YnQuZnJvbURlZ3JlZXNBcnJheT1mdW5jdGlvbih0LGUsbil7aWYoeS5kZWZpbmVkKCJjb29yZGluYXRlcyIsdCksdC5sZW5ndGg8Mnx8dC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEQoInRoZSBudW1iZXIgb2YgY29vcmRpbmF0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDIgYW5kIGF0IGxlYXN0IDIiKTtsZXQgbz10Lmxlbmd0aDttKG4pP24ubGVuZ3RoPW8vMjpuPW5ldyBBcnJheShvLzIpO2ZvcihsZXQgcj0wO3I8bztyKz0yKXtsZXQgaT10W3JdLHM9dFtyKzFdLGY9ci8yO25bZl09YnQuZnJvbURlZ3JlZXMoaSxzLDAsZSxuW2ZdKX1yZXR1cm4gbn07YnQuZnJvbVJhZGlhbnNBcnJheT1mdW5jdGlvbih0LGUsbil7aWYoeS5kZWZpbmVkKCJjb29yZGluYXRlcyIsdCksdC5sZW5ndGg8Mnx8dC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEQoInRoZSBudW1iZXIgb2YgY29vcmRpbmF0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDIgYW5kIGF0IGxlYXN0IDIiKTtsZXQgbz10Lmxlbmd0aDttKG4pP24ubGVuZ3RoPW8vMjpuPW5ldyBBcnJheShvLzIpO2ZvcihsZXQgcj0wO3I8bztyKz0yKXtsZXQgaT10W3JdLHM9dFtyKzFdLGY9ci8yO25bZl09YnQuZnJvbVJhZGlhbnMoaSxzLDAsZSxuW2ZdKX1yZXR1cm4gbn07YnQuZnJvbURlZ3JlZXNBcnJheUhlaWdodHM9ZnVuY3Rpb24odCxlLG4pe2lmKHkuZGVmaW5lZCgiY29vcmRpbmF0ZXMiLHQpLHQubGVuZ3RoPDN8fHQubGVuZ3RoJTMhPT0wKXRocm93IG5ldyBEKCJ0aGUgbnVtYmVyIG9mIGNvb3JkaW5hdGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzIGFuZCBhdCBsZWFzdCAzIik7bGV0IG89dC5sZW5ndGg7bShuKT9uLmxlbmd0aD1vLzM6bj1uZXcgQXJyYXkoby8zKTtmb3IobGV0IHI9MDtyPG87cis9Myl7bGV0IGk9dFtyXSxzPXRbcisxXSxmPXRbcisyXSx1PXIvMztuW3VdPWJ0LmZyb21EZWdyZWVzKGkscyxmLGUsblt1XSl9cmV0dXJuIG59O2J0LmZyb21SYWRpYW5zQXJyYXlIZWlnaHRzPWZ1bmN0aW9uKHQsZSxuKXtpZih5LmRlZmluZWQoImNvb3JkaW5hdGVzIix0KSx0Lmxlbmd0aDwzfHx0Lmxlbmd0aCUzIT09MCl0aHJvdyBuZXcgRCgidGhlIG51bWJlciBvZiBjb29yZGluYXRlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMyBhbmQgYXQgbGVhc3QgMyIpO2xldCBvPXQubGVuZ3RoO20obik/bi5sZW5ndGg9by8zOm49bmV3IEFycmF5KG8vMyk7Zm9yKGxldCByPTA7cjxvO3IrPTMpe2xldCBpPXRbcl0scz10W3IrMV0sZj10W3IrMl0sdT1yLzM7blt1XT1idC5mcm9tUmFkaWFucyhpLHMsZixlLG5bdV0pfXJldHVybiBufTtidC5aRVJPPU9iamVjdC5mcmVlemUobmV3IGJ0KDAsMCwwKSk7YnQuT05FPU9iamVjdC5mcmVlemUobmV3IGJ0KDEsMSwxKSk7YnQuVU5JVF9YPU9iamVjdC5mcmVlemUobmV3IGJ0KDEsMCwwKSk7YnQuVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IGJ0KDAsMSwwKSk7YnQuVU5JVF9aPU9iamVjdC5mcmVlemUobmV3IGJ0KDAsMCwxKSk7YnQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBidC5jbG9uZSh0aGlzLHQpfTtidC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBidC5lcXVhbHModGhpcyx0KX07YnQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBidC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlLG4pfTtidC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0pYH07YT1idH0pO2Z1bmN0aW9uIEV4KHQsZSxuLG8scil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImNhcnRlc2lhbiBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgib25lT3ZlclJhZGlpIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG4pKXRocm93IG5ldyBEKCJvbmVPdmVyUmFkaWlTcXVhcmVkIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG8pKXRocm93IG5ldyBEKCJjZW50ZXJUb2xlcmFuY2VTcXVhcmVkIGlzIHJlcXVpcmVkLiIpO2xldCBpPXQueCxzPXQueSxmPXQueix1PWUueCxjPWUueSxsPWUueixwPWkqaSp1KnUsZD1zKnMqYypjLGg9ZipmKmwqbCxfPXArZCtoLGc9TWF0aC5zcXJ0KDEvXyksYj1hLm11bHRpcGx5QnlTY2FsYXIodCxnLFR4KTtpZihfPG8pcmV0dXJuIGlzRmluaXRlKGcpP2EuY2xvbmUoYixyKTp2b2lkIDA7bGV0IHc9bi54LE89bi55LEU9bi56LFQ9T3g7VC54PWIueCp3KjIsVC55PWIueSpPKjIsVC56PWIueipFKjI7bGV0IHg9KDEtZykqYS5tYWduaXR1ZGUodCkvKC41KmEubWFnbml0dWRlKFQpKSxNPTAsTixGLEksdixCLEEsUyxDLEwseixqO2Rve3gtPU0sST0xLygxK3gqdyksdj0xLygxK3gqTyksQj0xLygxK3gqRSksQT1JKkksUz12KnYsQz1CKkIsTD1BKkksej1TKnYsaj1DKkIsTj1wKkErZCpTK2gqQy0xLEY9cCpMKncrZCp6Kk8raCpqKkU7bGV0IGs9LTIqRjtNPU4va313aGlsZShNYXRoLmFicyhOKT5QLkVQU0lMT04xMik7cmV0dXJuIG0ocik/KHIueD1pKkksci55PXMqdixyLno9ZipCLHIpOm5ldyBhKGkqSSxzKnYsZipCKX12YXIgVHgsT3gsSGwsQ209JCgoKT0+e0R0KCk7ZnQoKTtIdCgpO0t0KCk7VHg9bmV3IGEsT3g9bmV3IGE7SGw9RXh9KTtmdW5jdGlvbiBfbih0LGUsbil7dGhpcy5sb25naXR1ZGU9dD8/MCx0aGlzLmxhdGl0dWRlPWU/PzAsdGhpcy5oZWlnaHQ9bj8/MH12YXIgUngsU3gseHgsY3QsSWU9JCgoKT0+e0R0KCk7V3QoKTtmdCgpO0t0KCk7Q20oKTtfbi5mcm9tUmFkaWFucz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2YubnVtYmVyKCJsb25naXR1ZGUiLHQpLHkudHlwZU9mLm51bWJlcigibGF0aXR1ZGUiLGUpLG49bj8/MCxtKG8pPyhvLmxvbmdpdHVkZT10LG8ubGF0aXR1ZGU9ZSxvLmhlaWdodD1uLG8pOm5ldyBfbih0LGUsbil9O19uLmZyb21EZWdyZWVzPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5udW1iZXIoImxvbmdpdHVkZSIsdCkseS50eXBlT2YubnVtYmVyKCJsYXRpdHVkZSIsZSksdD1QLnRvUmFkaWFucyh0KSxlPVAudG9SYWRpYW5zKGUpLF9uLmZyb21SYWRpYW5zKHQsZSxuLG8pfTtSeD1uZXcgYSxTeD1uZXcgYSx4eD1uZXcgYTtfbi5fZWxsaXBzb2lkT25lT3ZlclJhZGlpPW5ldyBhKDEvNjM3ODEzNywxLzYzNzgxMzcsMS82MzU2NzUyMzE0MjQ1MTc5ZS05KTtfbi5fZWxsaXBzb2lkT25lT3ZlclJhZGlpU3F1YXJlZD1uZXcgYSgxLyg2Mzc4MTM3KjYzNzgxMzcpLDEvKDYzNzgxMzcqNjM3ODEzNyksMS8oNjM1Njc1MjMxNDI0NTE3OWUtOSo2MzU2NzUyMzE0MjQ1MTc5ZS05KSk7X24uX2VsbGlwc29pZENlbnRlclRvbGVyYW5jZVNxdWFyZWQ9UC5FUFNJTE9OMTtfbi5mcm9tQ2FydGVzaWFuPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1tKGUpP2Uub25lT3ZlclJhZGlpOl9uLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWkscj1tKGUpP2Uub25lT3ZlclJhZGlpU3F1YXJlZDpfbi5fZWxsaXBzb2lkT25lT3ZlclJhZGlpU3F1YXJlZCxpPW0oZSk/ZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZDpfbi5fZWxsaXBzb2lkQ2VudGVyVG9sZXJhbmNlU3F1YXJlZCxzPUhsKHQsbyxyLGksU3gpO2lmKCFtKHMpKXJldHVybjtsZXQgZj1hLm11bHRpcGx5Q29tcG9uZW50cyhzLHIsUngpO2Y9YS5ub3JtYWxpemUoZixmKTtsZXQgdT1hLnN1YnRyYWN0KHQscyx4eCksYz1NYXRoLmF0YW4yKGYueSxmLngpLGw9TWF0aC5hc2luKGYueikscD1QLnNpZ24oYS5kb3QodSx0KSkqYS5tYWduaXR1ZGUodSk7cmV0dXJuIG0obik/KG4ubG9uZ2l0dWRlPWMsbi5sYXRpdHVkZT1sLG4uaGVpZ2h0PXAsbik6bmV3IF9uKGMsbCxwKX07X24udG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImNhcnRvZ3JhcGhpYyIsdCksYS5mcm9tUmFkaWFucyh0LmxvbmdpdHVkZSx0LmxhdGl0dWRlLHQuaGVpZ2h0LGUsbil9O19uLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYobSh0KSlyZXR1cm4gbShlKT8oZS5sb25naXR1ZGU9dC5sb25naXR1ZGUsZS5sYXRpdHVkZT10LmxhdGl0dWRlLGUuaGVpZ2h0PXQuaGVpZ2h0LGUpOm5ldyBfbih0LmxvbmdpdHVkZSx0LmxhdGl0dWRlLHQuaGVpZ2h0KX07X24uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxtKHQpJiZtKGUpJiZ0LmxvbmdpdHVkZT09PWUubG9uZ2l0dWRlJiZ0LmxhdGl0dWRlPT09ZS5sYXRpdHVkZSYmdC5oZWlnaHQ9PT1lLmhlaWdodH07X24uZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49bj8/MCx0PT09ZXx8bSh0KSYmbShlKSYmTWF0aC5hYnModC5sb25naXR1ZGUtZS5sb25naXR1ZGUpPD1uJiZNYXRoLmFicyh0LmxhdGl0dWRlLWUubGF0aXR1ZGUpPD1uJiZNYXRoLmFicyh0LmhlaWdodC1lLmhlaWdodCk8PW59O19uLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgX24oMCwwLDApKTtfbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIF9uLmNsb25lKHRoaXMsdCl9O19uLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIF9uLmVxdWFscyh0aGlzLHQpfTtfbi5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBfbi5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07X24ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMubG9uZ2l0dWRlfSwgJHt0aGlzLmxhdGl0dWRlfSwgJHt0aGlzLmhlaWdodH0pYH07Y3Q9X259KTtmdW5jdGlvbiBqdCh0LGUpe3RoaXMueD10Pz8wLHRoaXMueT1lPz8wfXZhciBxbCxDMSxQMSxNMSxDeCxKLGtlPSQoKCk9PntXdCgpO2Z0KCk7SHQoKTtLdCgpO2p0LmZyb21FbGVtZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG0obik/KG4ueD10LG4ueT1lLG4pOm5ldyBqdCh0LGUpfTtqdC5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKG0odCkpcmV0dXJuIG0oZSk/KGUueD10LngsZS55PXQueSxlKTpuZXcganQodC54LHQueSl9O2p0LmZyb21DYXJ0ZXNpYW4zPWp0LmNsb25lO2p0LmZyb21DYXJ0ZXNpYW40PWp0LmNsb25lO2p0LnBhY2tlZExlbmd0aD0yO2p0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXQueCxlW25dPXQueSxlfTtqdC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsbShuKXx8KG49bmV3IGp0KSxuLng9dFtlKytdLG4ueT10W2VdLG59O2p0LnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiYXJyYXkiLHQpO2xldCBuPXQubGVuZ3RoLG89bioyO2lmKCFtKGUpKWU9bmV3IEFycmF5KG8pO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoIT09byl0aHJvdyBuZXcgRCgiSWYgcmVzdWx0IGlzIGEgdHlwZWQgYXJyYXksIGl0IG11c3QgaGF2ZSBleGFjdGx5IGFycmF5Lmxlbmd0aCAqIDIgZWxlbWVudHMiKTtlLmxlbmd0aCE9PW8mJihlLmxlbmd0aD1vKX1mb3IobGV0IHI9MDtyPG47KytyKWp0LnBhY2sodFtyXSxlLHIqMik7cmV0dXJuIGV9O2p0LnVucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJhcnJheSIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImFycmF5Lmxlbmd0aCIsdC5sZW5ndGgsMiksdC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEQoImFycmF5IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMi4iKTtsZXQgbj10Lmxlbmd0aDttKGUpP2UubGVuZ3RoPW4vMjplPW5ldyBBcnJheShuLzIpO2ZvcihsZXQgbz0wO288bjtvKz0yKXtsZXQgcj1vLzI7ZVtyXT1qdC51bnBhY2sodCxvLGVbcl0pfXJldHVybiBlfTtqdC5mcm9tQXJyYXk9anQudW5wYWNrO2p0Lm1heGltdW1Db21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSxNYXRoLm1heCh0LngsdC55KX07anQubWluaW11bUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLE1hdGgubWluKHQueCx0LnkpfTtqdC5taW5pbXVtQnlDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImZpcnN0Iix0KSx5LnR5cGVPZi5vYmplY3QoInNlY29uZCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD1NYXRoLm1pbih0LngsZS54KSxuLnk9TWF0aC5taW4odC55LGUueSksbn07anQubWF4aW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5tYXgodC54LGUueCksbi55PU1hdGgubWF4KHQueSxlLnkpLG59O2p0LmNsYW1wPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pO2xldCByPVAuY2xhbXAodC54LGUueCxuLngpLGk9UC5jbGFtcCh0LnksZS55LG4ueSk7cmV0dXJuIG8ueD1yLG8ueT1pLG99O2p0Lm1hZ25pdHVkZVNxdWFyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx0LngqdC54K3QueSp0Lnl9O2p0Lm1hZ25pdHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KGp0Lm1hZ25pdHVkZVNxdWFyZWQodCkpfTtxbD1uZXcganQ7anQuZGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSxqdC5zdWJ0cmFjdCh0LGUscWwpLGp0Lm1hZ25pdHVkZShxbCl9O2p0LmRpc3RhbmNlU3F1YXJlZD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLGp0LnN1YnRyYWN0KHQsZSxxbCksanQubWFnbml0dWRlU3F1YXJlZChxbCl9O2p0Lm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49anQubWFnbml0dWRlKHQpO2lmKGUueD10LngvbixlLnk9dC55L24saXNOYU4oZS54KXx8aXNOYU4oZS55KSl0aHJvdyBuZXcgRCgibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyIik7cmV0dXJuIGV9O2p0LmRvdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHQueCplLngrdC55KmUueX07anQuY3Jvc3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx0LngqZS55LXQueSplLnh9O2p0Lm11bHRpcGx5Q29tcG9uZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngqZS54LG4ueT10LnkqZS55LG59O2p0LmRpdmlkZUNvbXBvbmVudHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2UueCxuLnk9dC55L2UueSxufTtqdC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54K2UueCxuLnk9dC55K2UueSxufTtqdC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngtZS54LG4ueT10LnktZS55LG59O2p0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG59O2p0LmRpdmlkZUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC9lLG4ueT10LnkvZSxufTtqdC5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9LXQueCxlLnk9LXQueSxlfTtqdC5hYnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9TWF0aC5hYnModC54KSxlLnk9TWF0aC5hYnModC55KSxlfTtDMT1uZXcganQ7anQubGVycD1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzdGFydCIsdCkseS50eXBlT2Yub2JqZWN0KCJlbmQiLGUpLHkudHlwZU9mLm51bWJlcigidCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLGp0Lm11bHRpcGx5QnlTY2FsYXIoZSxuLEMxKSxvPWp0Lm11bHRpcGx5QnlTY2FsYXIodCwxLW4sbyksanQuYWRkKEMxLG8sbyl9O1AxPW5ldyBqdCxNMT1uZXcganQ7anQuYW5nbGVCZXR3ZWVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksanQubm9ybWFsaXplKHQsUDEpLGp0Lm5vcm1hbGl6ZShlLE0xKSxQLmFjb3NDbGFtcGVkKGp0LmRvdChQMSxNMSkpfTtDeD1uZXcganQ7anQubW9zdE9ydGhvZ29uYWxBeGlzPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1qdC5ub3JtYWxpemUodCxDeCk7cmV0dXJuIGp0LmFicyhuLG4pLG4ueDw9bi55P2U9anQuY2xvbmUoanQuVU5JVF9YLGUpOmU9anQuY2xvbmUoanQuVU5JVF9ZLGUpLGV9O2p0LmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8bSh0KSYmbShlKSYmdC54PT09ZS54JiZ0Lnk9PT1lLnl9O2p0LmVxdWFsc0FycmF5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC54PT09ZVtuXSYmdC55PT09ZVtuKzFdfTtqdC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0PT09ZXx8bSh0KSYmbShlKSYmUC5lcXVhbHNFcHNpbG9uKHQueCxlLngsbixvKSYmUC5lcXVhbHNFcHNpbG9uKHQueSxlLnksbixvKX07anQuWkVSTz1PYmplY3QuZnJlZXplKG5ldyBqdCgwLDApKTtqdC5PTkU9T2JqZWN0LmZyZWV6ZShuZXcganQoMSwxKSk7anQuVU5JVF9YPU9iamVjdC5mcmVlemUobmV3IGp0KDEsMCkpO2p0LlVOSVRfWT1PYmplY3QuZnJlZXplKG5ldyBqdCgwLDEpKTtqdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGp0LmNsb25lKHRoaXMsdCl9O2p0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGp0LmVxdWFscyh0aGlzLHQpfTtqdC5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGp0LmVxdWFsc0Vwc2lsb24odGhpcyx0LGUsbil9O2p0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzLnh9LCAke3RoaXMueX0pYH07Sj1qdH0pO2Z1bmN0aW9uIEkxKHQsZSxuLG8pe2U9ZT8/MCxuPW4/PzAsbz1vPz8wLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ4IixlLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ5IixuLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ6IixvLDApLHQuX3JhZGlpPW5ldyBhKGUsbixvKSx0Ll9yYWRpaVNxdWFyZWQ9bmV3IGEoZSplLG4qbixvKm8pLHQuX3JhZGlpVG9UaGVGb3VydGg9bmV3IGEoZSplKmUqZSxuKm4qbipuLG8qbypvKm8pLHQuX29uZU92ZXJSYWRpaT1uZXcgYShlPT09MD8wOjEvZSxuPT09MD8wOjEvbixvPT09MD8wOjEvbyksdC5fb25lT3ZlclJhZGlpU3F1YXJlZD1uZXcgYShlPT09MD8wOjEvKGUqZSksbj09PTA/MDoxLyhuKm4pLG89PT0wPzA6MS8obypvKSksdC5fbWluaW11bVJhZGl1cz1NYXRoLm1pbihlLG4sbyksdC5fbWF4aW11bVJhZGl1cz1NYXRoLm1heChlLG4sbyksdC5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZD1QLkVQU0lMT04xLHQuX3JhZGlpU3F1YXJlZC56IT09MCYmKHQuX3NxdWFyZWRYT3ZlclNxdWFyZWRaPXQuX3JhZGlpU3F1YXJlZC54L3QuX3JhZGlpU3F1YXJlZC56KX1mdW5jdGlvbiBDZSh0LGUsbil7dGhpcy5fcmFkaWk9dm9pZCAwLHRoaXMuX3JhZGlpU3F1YXJlZD12b2lkIDAsdGhpcy5fcmFkaWlUb1RoZUZvdXJ0aD12b2lkIDAsdGhpcy5fb25lT3ZlclJhZGlpPXZvaWQgMCx0aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkPXZvaWQgMCx0aGlzLl9taW5pbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9tYXhpbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkPXZvaWQgMCx0aGlzLl9zcXVhcmVkWE92ZXJTcXVhcmVkWj12b2lkIDAsSTEodGhpcyx0LGUsbil9ZnVuY3Rpb24gTjEodCxlLG4pe3kudHlwZU9mLm51bWJlcigiYSIsdCkseS50eXBlT2YubnVtYmVyKCJiIixlKSx5LnR5cGVPZi5mdW5jKCJmdW5jIixuKTtsZXQgbz0uNSooZSt0KSxyPS41KihlLXQpLGk9MDtmb3IobGV0IHM9MDtzPDU7cysrKXtsZXQgZj1yKkx4W3NdO2krPUR4W3NdKihuKG8rZikrbihvLWYpKX1yZXR1cm4gaSo9cixpfXZhciBQeCxNeCxOeCxJeCx2eCxGeCxMeCxEeCxZLCR0PSQoKCk9PntrZSgpO0R0KCk7SWUoKTtXdCgpO2Z0KCk7SHQoKTtLdCgpO0NtKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2UucHJvdG90eXBlLHtyYWRpaTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGlpfX0scmFkaWlTcXVhcmVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaWlTcXVhcmVkfX0scmFkaWlUb1RoZUZvdXJ0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGlpVG9UaGVGb3VydGh9fSxvbmVPdmVyUmFkaWk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbmVPdmVyUmFkaWl9fSxvbmVPdmVyUmFkaWlTcXVhcmVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZH19LG1pbmltdW1SYWRpdXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5pbXVtUmFkaXVzfX0sbWF4aW11bVJhZGl1czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heGltdW1SYWRpdXN9fX0pO0NlLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoIW0odCkpcmV0dXJuO2xldCBuPXQuX3JhZGlpO3JldHVybiBtKGUpPyhhLmNsb25lKG4sZS5fcmFkaWkpLGEuY2xvbmUodC5fcmFkaWlTcXVhcmVkLGUuX3JhZGlpU3F1YXJlZCksYS5jbG9uZSh0Ll9yYWRpaVRvVGhlRm91cnRoLGUuX3JhZGlpVG9UaGVGb3VydGgpLGEuY2xvbmUodC5fb25lT3ZlclJhZGlpLGUuX29uZU92ZXJSYWRpaSksYS5jbG9uZSh0Ll9vbmVPdmVyUmFkaWlTcXVhcmVkLGUuX29uZU92ZXJSYWRpaVNxdWFyZWQpLGUuX21pbmltdW1SYWRpdXM9dC5fbWluaW11bVJhZGl1cyxlLl9tYXhpbXVtUmFkaXVzPXQuX21heGltdW1SYWRpdXMsZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZD10Ll9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkLGUpOm5ldyBDZShuLngsbi55LG4ueil9O0NlLmZyb21DYXJ0ZXNpYW4zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG0oZSl8fChlPW5ldyBDZSksbSh0KSYmSTEoZSx0LngsdC55LHQueiksZX07Q2UuV0dTODQ9T2JqZWN0LmZyZWV6ZShuZXcgQ2UoNjM3ODEzNyw2Mzc4MTM3LDYzNTY3NTIzMTQyNDUxNzllLTkpKTtDZS5VTklUX1NQSEVSRT1PYmplY3QuZnJlZXplKG5ldyBDZSgxLDEsMSkpO0NlLk1PT049T2JqZWN0LmZyZWV6ZShuZXcgQ2UoUC5MVU5BUl9SQURJVVMsUC5MVU5BUl9SQURJVVMsUC5MVU5BUl9SQURJVVMpKTtDZS5fZGVmYXVsdD1DZS5XR1M4NDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDZSx7ZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIENlLl9kZWZhdWx0fSxzZXQ6ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCksQ2UuX2RlZmF1bHQ9dCxhLl9lbGxpcHNvaWRSYWRpaVNxdWFyZWQ9dC5yYWRpaVNxdWFyZWQsY3QuX2VsbGlwc29pZE9uZU92ZXJSYWRpaT10Lm9uZU92ZXJSYWRpaSxjdC5fZWxsaXBzb2lkT25lT3ZlclJhZGlpU3F1YXJlZD10Lm9uZU92ZXJSYWRpaVNxdWFyZWQsY3QuX2VsbGlwc29pZENlbnRlclRvbGVyYW5jZVNxdWFyZWQ9dC5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZH19fSk7Q2UucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBDZS5jbG9uZSh0aGlzLHQpfTtDZS5wYWNrZWRMZW5ndGg9YS5wYWNrZWRMZW5ndGg7Q2UucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxhLnBhY2sodC5fcmFkaWksZSxuKSxlfTtDZS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1hLnVucGFjayh0LGUpO3JldHVybiBDZS5mcm9tQ2FydGVzaWFuMyhvLG4pfTtDZS5wcm90b3R5cGUuZ2VvY2VudHJpY1N1cmZhY2VOb3JtYWw9YS5ub3JtYWxpemU7Q2UucHJvdG90eXBlLmdlb2RldGljU3VyZmFjZU5vcm1hbENhcnRvZ3JhcGhpYz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydG9ncmFwaGljIix0KTtsZXQgbj10LmxvbmdpdHVkZSxvPXQubGF0aXR1ZGUscj1NYXRoLmNvcyhvKSxpPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGY9TWF0aC5zaW4obyk7cmV0dXJuIG0oZSl8fChlPW5ldyBhKSxlLng9aSxlLnk9cyxlLno9ZixhLm5vcm1hbGl6ZShlLGUpfTtDZS5wcm90b3R5cGUuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLGlzTmFOKHQueCl8fGlzTmFOKHQueSl8fGlzTmFOKHQueikpdGhyb3cgbmV3IEQoImNhcnRlc2lhbiBoYXMgYSBOYU4gY29tcG9uZW50Iik7aWYoIWEuZXF1YWxzRXBzaWxvbih0LGEuWkVSTyxQLkVQU0lMT04xNCkpcmV0dXJuIG0oZSl8fChlPW5ldyBhKSxlPWEubXVsdGlwbHlDb21wb25lbnRzKHQsdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZCxlKSxhLm5vcm1hbGl6ZShlLGUpfTtQeD1uZXcgYSxNeD1uZXcgYTtDZS5wcm90b3R5cGUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlKXtsZXQgbj1QeCxvPU14O3RoaXMuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsQ2FydG9ncmFwaGljKHQsbiksYS5tdWx0aXBseUNvbXBvbmVudHModGhpcy5fcmFkaWlTcXVhcmVkLG4sbyk7bGV0IHI9TWF0aC5zcXJ0KGEuZG90KG4sbykpO3JldHVybiBhLmRpdmlkZUJ5U2NhbGFyKG8scixvKSxhLm11bHRpcGx5QnlTY2FsYXIobix0LmhlaWdodCxuKSxtKGUpfHwoZT1uZXcgYSksYS5hZGQobyxuLGUpfTtDZS5wcm90b3R5cGUuY2FydG9ncmFwaGljQXJyYXlUb0NhcnRlc2lhbkFycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0b2dyYXBoaWNzIix0KTtsZXQgbj10Lmxlbmd0aDttKGUpP2UubGVuZ3RoPW46ZT1uZXcgQXJyYXkobik7Zm9yKGxldCBvPTA7bzxuO28rKyllW29dPXRoaXMuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odFtvXSxlW29dKTtyZXR1cm4gZX07Tng9bmV3IGEsSXg9bmV3IGEsdng9bmV3IGE7Q2UucHJvdG90eXBlLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljPWZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHQsSXgpO2lmKCFtKG4pKXJldHVybjtsZXQgbz10aGlzLmdlb2RldGljU3VyZmFjZU5vcm1hbChuLE54KSxyPWEuc3VidHJhY3QodCxuLHZ4KSxpPU1hdGguYXRhbjIoby55LG8ueCkscz1NYXRoLmFzaW4oby56KSxmPVAuc2lnbihhLmRvdChyLHQpKSphLm1hZ25pdHVkZShyKTtyZXR1cm4gbShlKT8oZS5sb25naXR1ZGU9aSxlLmxhdGl0dWRlPXMsZS5oZWlnaHQ9ZixlKTpuZXcgY3QoaSxzLGYpfTtDZS5wcm90b3R5cGUuY2FydGVzaWFuQXJyYXlUb0NhcnRvZ3JhcGhpY0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0ZXNpYW5zIix0KTtsZXQgbj10Lmxlbmd0aDttKGUpP2UubGVuZ3RoPW46ZT1uZXcgQXJyYXkobik7Zm9yKGxldCBvPTA7bzxuOysrbyllW29dPXRoaXMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModFtvXSxlW29dKTtyZXR1cm4gZX07Q2UucHJvdG90eXBlLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSGwodCx0aGlzLl9vbmVPdmVyUmFkaWksdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkLGUpfTtDZS5wcm90b3R5cGUuc2NhbGVUb0dlb2NlbnRyaWNTdXJmYWNlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLG0oZSl8fChlPW5ldyBhKTtsZXQgbj10Lngsbz10Lnkscj10LnosaT10aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkLHM9MS9NYXRoLnNxcnQobipuKmkueCtvKm8qaS55K3IqcippLnopO3JldHVybiBhLm11bHRpcGx5QnlTY2FsYXIodCxzLGUpfTtDZS5wcm90b3R5cGUudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG0oZSl8fChlPW5ldyBhKSxhLm11bHRpcGx5Q29tcG9uZW50cyh0LHRoaXMuX29uZU92ZXJSYWRpaSxlKX07Q2UucHJvdG90eXBlLnRyYW5zZm9ybVBvc2l0aW9uRnJvbVNjYWxlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG0oZSl8fChlPW5ldyBhKSxhLm11bHRpcGx5Q29tcG9uZW50cyh0LHRoaXMuX3JhZGlpLGUpfTtDZS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dHx8bSh0KSYmYS5lcXVhbHModGhpcy5fcmFkaWksdC5fcmFkaWkpfTtDZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaWkudG9TdHJpbmcoKX07Q2UucHJvdG90eXBlLmdldFN1cmZhY2VOb3JtYWxJbnRlcnNlY3Rpb25XaXRoWkF4aXM9ZnVuY3Rpb24odCxlLG4pe2lmKHkudHlwZU9mLm9iamVjdCgicG9zaXRpb24iLHQpLCFQLmVxdWFsc0Vwc2lsb24odGhpcy5fcmFkaWkueCx0aGlzLl9yYWRpaS55LFAuRVBTSUxPTjE1KSl0aHJvdyBuZXcgRCgiRWxsaXBzb2lkIG11c3QgYmUgYW4gZWxsaXBzb2lkIG9mIHJldm9sdXRpb24gKHJhZGlpLnggPT0gcmFkaWkueSkiKTt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oIkVsbGlwc29pZC5yYWRpaS56Iix0aGlzLl9yYWRpaS56LDApLGU9ZT8/MDtsZXQgbz10aGlzLl9zcXVhcmVkWE92ZXJTcXVhcmVkWjtpZihtKG4pfHwobj1uZXcgYSksbi54PTAsbi55PTAsbi56PXQueiooMS1vKSwhKE1hdGguYWJzKG4ueik+PXRoaXMuX3JhZGlpLnotZSkpcmV0dXJuIG59O0Z4PW5ldyBhO0NlLnByb3RvdHlwZS5nZXRMb2NhbEN1cnZhdHVyZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgic3VyZmFjZVBvc2l0aW9uIix0KSxtKGUpfHwoZT1uZXcgSik7bGV0IG49dGhpcy5nZXRTdXJmYWNlTm9ybWFsSW50ZXJzZWN0aW9uV2l0aFpBeGlzKHQsMCxGeCksbz1hLmRpc3RhbmNlKHQsbikscj10aGlzLm1pbmltdW1SYWRpdXMqby90aGlzLm1heGltdW1SYWRpdXMqKjIsaT1vKnIqKjI7cmV0dXJuIEouZnJvbUVsZW1lbnRzKDEvbywxL2ksZSl9O0x4PVsuMTQ4ODc0MzM4OTgxNjMsLjQzMzM5NTM5NDEyOTI1LC42Nzk0MDk1NjgyOTkwMiwuODY1MDYzMzY2Njg4OTgsLjk3MzkwNjUyODUxNzE3LDBdLER4PVsuMjk1NTI0MjI0NzE0NzUsLjI2OTI2NjcxOTMwOTk5LC4yMTkwODYzNjI1MTU5OCwuMTQ5NDUxMzQ5MTUwNTgsLjA2NjY3MTM0NDMwODY4NCwwXTtDZS5wcm90b3R5cGUuc3VyZmFjZUFyZWE9ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpO2xldCBlPXQud2VzdCxuPXQuZWFzdCxvPXQuc291dGgscj10Lm5vcnRoO2Zvcig7bjxlOyluKz1QLlRXT19QSTtsZXQgaT10aGlzLl9yYWRpaVNxdWFyZWQscz1pLngsZj1pLnksdT1pLnosYz1zKmY7cmV0dXJuIE4xKG8scixmdW5jdGlvbihsKXtsZXQgcD1NYXRoLmNvcyhsKSxkPU1hdGguc2luKGwpO3JldHVybiBNYXRoLmNvcyhsKSpOMShlLG4sZnVuY3Rpb24oaCl7bGV0IF89TWF0aC5jb3MoaCksZz1NYXRoLnNpbihoKTtyZXR1cm4gTWF0aC5zcXJ0KGMqZCpkK3UqKGYqXypfK3MqZypnKSpwKnApfSl9KX07WT1DZX0pO2Z1bmN0aW9uIEtsKHQpe3RoaXMuX2VsbGlwc29pZD10Pz9ZLmRlZmF1bHQsdGhpcy5fc2VtaW1ham9yQXhpcz10aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcz0xL3RoaXMuX3NlbWltYWpvckF4aXN9dmFyIGVvLHhpPSQoKCk9PntEdCgpO0llKCk7ZnQoKTtIdCgpOyR0KCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoS2wucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fX0pO0tsLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5fc2VtaW1ham9yQXhpcyxvPXQubG9uZ2l0dWRlKm4scj10LmxhdGl0dWRlKm4saT10LmhlaWdodDtyZXR1cm4gbShlKT8oZS54PW8sZS55PXIsZS56PWksZSk6bmV3IGEobyxyLGkpfTtLbC5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImNhcnRlc2lhbiBpcyByZXF1aXJlZCIpO2xldCBuPXRoaXMuX29uZU92ZXJTZW1pbWFqb3JBeGlzLG89dC54Km4scj10LnkqbixpPXQuejtyZXR1cm4gbShlKT8oZS5sb25naXR1ZGU9byxlLmxhdGl0dWRlPXIsZS5oZWlnaHQ9aSxlKTpuZXcgY3QobyxyLGkpfTtlbz1LbH0pO3ZhciBCeCxTbixWcz0kKCgpPT57Qng9e09VVFNJREU6LTEsSU5URVJTRUNUSU5HOjAsSU5TSURFOjF9LFNuPU9iamVjdC5mcmVlemUoQngpfSk7ZnVuY3Rpb24gVXgodCxlKXt0aGlzLnN0YXJ0PXQ/PzAsdGhpcy5zdG9wPWU/PzB9dmFyIEpyLFdsPSQoKCk9PntKcj1VeH0pO2Z1bmN0aW9uIFR0KHQsZSxuLG8scixpLHMsZix1KXt0aGlzWzBdPXQ/PzAsdGhpc1sxXT1vPz8wLHRoaXNbMl09cz8/MCx0aGlzWzNdPWU/PzAsdGhpc1s0XT1yPz8wLHRoaXNbNV09Zj8/MCx0aGlzWzZdPW4/PzAsdGhpc1s3XT1pPz8wLHRoaXNbOF09dT8/MH1mdW5jdGlvbiBqeCh0KXtsZXQgZT0wO2ZvcihsZXQgbj0wO248OTsrK24pe2xldCBvPXRbbl07ZSs9bypvfXJldHVybiBNYXRoLnNxcnQoZSl9ZnVuY3Rpb24gSHgodCl7bGV0IGU9MDtmb3IobGV0IG49MDtuPDM7KytuKXtsZXQgbz10W1R0LmdldEVsZW1lbnRJbmRleChObVtuXSxNbVtuXSldO2UrPTIqbypvfXJldHVybiBNYXRoLnNxcnQoZSl9ZnVuY3Rpb24gcXgodCxlKXtsZXQgbj1QLkVQU0lMT04xNSxvPTAscj0xO2ZvcihsZXQgYz0wO2M8MzsrK2Mpe2xldCBsPU1hdGguYWJzKHRbVHQuZ2V0RWxlbWVudEluZGV4KE5tW2NdLE1tW2NdKV0pO2w+byYmKHI9YyxvPWwpfWxldCBpPTEscz0wLGY9TW1bcl0sdT1ObVtyXTtpZihNYXRoLmFicyh0W1R0LmdldEVsZW1lbnRJbmRleCh1LGYpXSk+bil7bGV0IGM9dFtUdC5nZXRFbGVtZW50SW5kZXgodSx1KV0sbD10W1R0LmdldEVsZW1lbnRJbmRleChmLGYpXSxwPXRbVHQuZ2V0RWxlbWVudEluZGV4KHUsZildLGQ9KGMtbCkvMi9wLGg7ZDwwP2g9LTEvKC1kK01hdGguc3FydCgxK2QqZCkpOmg9MS8oZCtNYXRoLnNxcnQoMStkKmQpKSxpPTEvTWF0aC5zcXJ0KDEraCpoKSxzPWgqaX1yZXR1cm4gZT1UdC5jbG9uZShUdC5JREVOVElUWSxlKSxlW1R0LmdldEVsZW1lbnRJbmRleChmLGYpXT1lW1R0LmdldEVsZW1lbnRJbmRleCh1LHUpXT1pLGVbVHQuZ2V0RWxlbWVudEluZGV4KHUsZildPXMsZVtUdC5nZXRFbGVtZW50SW5kZXgoZix1KV09LXMsZX12YXIga3gsR3gsUG0sdjEsVngsengsTW0sTm0sWGwsRjEsS3gsWixVbj0kKCgpPT57RHQoKTtXdCgpO2Z0KCk7SHQoKTtLdCgpO1R0LnBhY2tlZExlbmd0aD05O1R0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXRbMF0sZVtuKytdPXRbMV0sZVtuKytdPXRbMl0sZVtuKytdPXRbM10sZVtuKytdPXRbNF0sZVtuKytdPXRbNV0sZVtuKytdPXRbNl0sZVtuKytdPXRbN10sZVtuKytdPXRbOF0sZX07VHQudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLG0obil8fChuPW5ldyBUdCksblswXT10W2UrK10sblsxXT10W2UrK10sblsyXT10W2UrK10sblszXT10W2UrK10sbls0XT10W2UrK10sbls1XT10W2UrK10sbls2XT10W2UrK10sbls3XT10W2UrK10sbls4XT10W2UrK10sbn07VHQucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJhcnJheSIsdCk7bGV0IG49dC5sZW5ndGgsbz1uKjk7aWYoIW0oZSkpZT1uZXcgQXJyYXkobyk7ZWxzZXtpZighQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGghPT1vKXRocm93IG5ldyBEKCJJZiByZXN1bHQgaXMgYSB0eXBlZCBhcnJheSwgaXQgbXVzdCBoYXZlIGV4YWN0bHkgYXJyYXkubGVuZ3RoICogOSBlbGVtZW50cyIpO2UubGVuZ3RoIT09byYmKGUubGVuZ3RoPW8pfWZvcihsZXQgcj0wO3I8bjsrK3IpVHQucGFjayh0W3JdLGUscio5KTtyZXR1cm4gZX07VHQudW5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXtpZih5LmRlZmluZWQoImFycmF5Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiYXJyYXkubGVuZ3RoIix0Lmxlbmd0aCw5KSx0Lmxlbmd0aCU5IT09MCl0aHJvdyBuZXcgRCgiYXJyYXkgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA5LiIpO2xldCBuPXQubGVuZ3RoO20oZSk/ZS5sZW5ndGg9bi85OmU9bmV3IEFycmF5KG4vOSk7Zm9yKGxldCBvPTA7bzxuO28rPTkpe2xldCByPW8vOTtlW3JdPVR0LnVucGFjayh0LG8sZVtyXSl9cmV0dXJuIGV9O1R0LmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYobSh0KSlyZXR1cm4gbShlKT8oZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZSk6bmV3IFR0KHRbMF0sdFszXSx0WzZdLHRbMV0sdFs0XSx0WzddLHRbMl0sdFs1XSx0WzhdKX07VHQuZnJvbUFycmF5PVR0LnVucGFjaztUdC5mcm9tQ29sdW1uTWFqb3JBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoInZhbHVlcyIsdCksVHQuY2xvbmUodCxlKX07VHQuZnJvbVJvd01ham9yQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZXMiLHQpLG0oZSk/KGVbMF09dFswXSxlWzFdPXRbM10sZVsyXT10WzZdLGVbM109dFsxXSxlWzRdPXRbNF0sZVs1XT10WzddLGVbNl09dFsyXSxlWzddPXRbNV0sZVs4XT10WzhdLGUpOm5ldyBUdCh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSx0WzZdLHRbN10sdFs4XSl9O1R0LmZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KTtsZXQgbj10LngqdC54LG89dC54KnQueSxyPXQueCp0LnosaT10LngqdC53LHM9dC55KnQueSxmPXQueSp0LnosdT10LnkqdC53LGM9dC56KnQueixsPXQueip0LncscD10LncqdC53LGQ9bi1zLWMrcCxoPTIqKG8tbCksXz0yKihyK3UpLGc9MioobytsKSxiPS1uK3MtYytwLHc9MiooZi1pKSxPPTIqKHItdSksRT0yKihmK2kpLFQ9LW4tcytjK3A7cmV0dXJuIG0oZSk/KGVbMF09ZCxlWzFdPWcsZVsyXT1PLGVbM109aCxlWzRdPWIsZVs1XT1FLGVbNl09XyxlWzddPXcsZVs4XT1ULGUpOm5ldyBUdChkLGgsXyxnLGIsdyxPLEUsVCl9O1R0LmZyb21IZWFkaW5nUGl0Y2hSb2xsPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJoZWFkaW5nUGl0Y2hSb2xsIix0KTtsZXQgbj1NYXRoLmNvcygtdC5waXRjaCksbz1NYXRoLmNvcygtdC5oZWFkaW5nKSxyPU1hdGguY29zKHQucm9sbCksaT1NYXRoLnNpbigtdC5waXRjaCkscz1NYXRoLnNpbigtdC5oZWFkaW5nKSxmPU1hdGguc2luKHQucm9sbCksdT1uKm8sYz0tcipzK2YqaSpvLGw9ZipzK3IqaSpvLHA9bipzLGQ9cipvK2YqaSpzLGg9LWYqbytyKmkqcyxfPS1pLGc9ZipuLGI9cipuO3JldHVybiBtKGUpPyhlWzBdPXUsZVsxXT1wLGVbMl09XyxlWzNdPWMsZVs0XT1kLGVbNV09ZyxlWzZdPWwsZVs3XT1oLGVbOF09YixlKTpuZXcgVHQodSxjLGwscCxkLGgsXyxnLGIpfTtUdC5mcm9tU2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsdCksbShlKT8oZVswXT10LngsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT10LnksZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT10LnosZSk6bmV3IFR0KHQueCwwLDAsMCx0LnksMCwwLDAsdC56KX07VHQuZnJvbVVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoInNjYWxlIix0KSxtKGUpPyhlWzBdPXQsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT10LGVbNV09MCxlWzZdPTAsZVs3XT0wLGVbOF09dCxlKTpuZXcgVHQodCwwLDAsMCx0LDAsMCwwLHQpfTtUdC5mcm9tQ3Jvc3NQcm9kdWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmVjdG9yIix0KSxtKGUpPyhlWzBdPTAsZVsxXT10LnosZVsyXT0tdC55LGVbM109LXQueixlWzRdPTAsZVs1XT10LngsZVs2XT10LnksZVs3XT0tdC54LGVbOF09MCxlKTpuZXcgVHQoMCwtdC56LHQueSx0LnosMCwtdC54LC10LnksdC54LDApfTtUdC5mcm9tUm90YXRpb25YPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YubnVtYmVyKCJhbmdsZSIsdCk7bGV0IG49TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gbShlKT8oZVswXT0xLGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09bixlWzVdPW8sZVs2XT0wLGVbN109LW8sZVs4XT1uLGUpOm5ldyBUdCgxLDAsMCwwLG4sLW8sMCxvLG4pfTtUdC5mcm9tUm90YXRpb25ZPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YubnVtYmVyKCJhbmdsZSIsdCk7bGV0IG49TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gbShlKT8oZVswXT1uLGVbMV09MCxlWzJdPS1vLGVbM109MCxlWzRdPTEsZVs1XT0wLGVbNl09byxlWzddPTAsZVs4XT1uLGUpOm5ldyBUdChuLDAsbywwLDEsMCwtbywwLG4pfTtUdC5mcm9tUm90YXRpb25aPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YubnVtYmVyKCJhbmdsZSIsdCk7bGV0IG49TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gbShlKT8oZVswXT1uLGVbMV09byxlWzJdPTAsZVszXT0tbyxlWzRdPW4sZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT0xLGUpOm5ldyBUdChuLC1vLDAsbyxuLDAsMCwwLDEpfTtUdC50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSxtKGUpPyhlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlKTpbdFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddLHRbOF1dfTtUdC5nZXRFbGVtZW50SW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInJvdyIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygicm93IixlLDIpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJjb2x1bW4iLHQsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImNvbHVtbiIsdCwyKSx0KjMrZX07VHQuZ2V0Q29sdW1uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZSozLHI9dFtvXSxpPXRbbysxXSxzPXRbbysyXTtyZXR1cm4gbi54PXIsbi55PWksbi56PXMsbn07VHQuc2V0Q29sdW1uPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDIpLHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksbz1UdC5jbG9uZSh0LG8pO2xldCByPWUqMztyZXR1cm4gb1tyXT1uLngsb1tyKzFdPW4ueSxvW3IrMl09bi56LG99O1R0LmdldFJvdz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXRbZV0scj10W2UrM10saT10W2UrNl07cmV0dXJuIG4ueD1vLG4ueT1yLG4uej1pLG59O1R0LnNldFJvdz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMikseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPVR0LmNsb25lKHQsbyksb1tlXT1uLngsb1tlKzNdPW4ueSxvW2UrNl09bi56LG99O2t4PW5ldyBhO1R0LnNldFNjYWxlPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPVR0LmdldFNjYWxlKHQsa3gpLHI9ZS54L28ueCxpPWUueS9vLnkscz1lLnovby56O3JldHVybiBuWzBdPXRbMF0qcixuWzFdPXRbMV0qcixuWzJdPXRbMl0qcixuWzNdPXRbM10qaSxuWzRdPXRbNF0qaSxuWzVdPXRbNV0qaSxuWzZdPXRbNl0qcyxuWzddPXRbN10qcyxuWzhdPXRbOF0qcyxufTtHeD1uZXcgYTtUdC5zZXRVbmlmb3JtU2NhbGU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89VHQuZ2V0U2NhbGUodCxHeCkscj1lL28ueCxpPWUvby55LHM9ZS9vLno7cmV0dXJuIG5bMF09dFswXSpyLG5bMV09dFsxXSpyLG5bMl09dFsyXSpyLG5bM109dFszXSppLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSpzLG5bN109dFs3XSpzLG5bOF09dFs4XSpzLG59O1BtPW5ldyBhO1R0LmdldFNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbMF0sdFsxXSx0WzJdLFBtKSksZS55PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbM10sdFs0XSx0WzVdLFBtKSksZS56PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbNl0sdFs3XSx0WzhdLFBtKSksZX07djE9bmV3IGE7VHQuZ2V0TWF4aW11bVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBUdC5nZXRTY2FsZSh0LHYxKSxhLm1heGltdW1Db21wb25lbnQodjEpfTtWeD1uZXcgYTtUdC5zZXRSb3RhdGlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1UdC5nZXRTY2FsZSh0LFZ4KTtyZXR1cm4gblswXT1lWzBdKm8ueCxuWzFdPWVbMV0qby54LG5bMl09ZVsyXSpvLngsblszXT1lWzNdKm8ueSxuWzRdPWVbNF0qby55LG5bNV09ZVs1XSpvLnksbls2XT1lWzZdKm8ueixuWzddPWVbN10qby56LG5bOF09ZVs4XSpvLnosbn07eng9bmV3IGE7VHQuZ2V0Um90YXRpb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPVR0LmdldFNjYWxlKHQsengpO3JldHVybiBlWzBdPXRbMF0vbi54LGVbMV09dFsxXS9uLngsZVsyXT10WzJdL24ueCxlWzNdPXRbM10vbi55LGVbNF09dFs0XS9uLnksZVs1XT10WzVdL24ueSxlWzZdPXRbNl0vbi56LGVbN109dFs3XS9uLnosZVs4XT10WzhdL24ueixlfTtUdC5tdWx0aXBseT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFswXSplWzBdK3RbM10qZVsxXSt0WzZdKmVbMl0scj10WzFdKmVbMF0rdFs0XSplWzFdK3RbN10qZVsyXSxpPXRbMl0qZVswXSt0WzVdKmVbMV0rdFs4XSplWzJdLHM9dFswXSplWzNdK3RbM10qZVs0XSt0WzZdKmVbNV0sZj10WzFdKmVbM10rdFs0XSplWzRdK3RbN10qZVs1XSx1PXRbMl0qZVszXSt0WzVdKmVbNF0rdFs4XSplWzVdLGM9dFswXSplWzZdK3RbM10qZVs3XSt0WzZdKmVbOF0sbD10WzFdKmVbNl0rdFs0XSplWzddK3RbN10qZVs4XSxwPXRbMl0qZVs2XSt0WzVdKmVbN10rdFs4XSplWzhdO3JldHVybiBuWzBdPW8sblsxXT1yLG5bMl09aSxuWzNdPXMsbls0XT1mLG5bNV09dSxuWzZdPWMsbls3XT1sLG5bOF09cCxufTtUdC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0rZVswXSxuWzFdPXRbMV0rZVsxXSxuWzJdPXRbMl0rZVsyXSxuWzNdPXRbM10rZVszXSxuWzRdPXRbNF0rZVs0XSxuWzVdPXRbNV0rZVs1XSxuWzZdPXRbNl0rZVs2XSxuWzddPXRbN10rZVs3XSxuWzhdPXRbOF0rZVs4XSxufTtUdC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXS1lWzBdLG5bMV09dFsxXS1lWzFdLG5bMl09dFsyXS1lWzJdLG5bM109dFszXS1lWzNdLG5bNF09dFs0XS1lWzRdLG5bNV09dFs1XS1lWzVdLG5bNl09dFs2XS1lWzZdLG5bN109dFs3XS1lWzddLG5bOF09dFs4XS1lWzhdLG59O1R0Lm11bHRpcGx5QnlWZWN0b3I9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPWUueCxyPWUueSxpPWUueixzPXRbMF0qbyt0WzNdKnIrdFs2XSppLGY9dFsxXSpvK3RbNF0qcit0WzddKmksdT10WzJdKm8rdFs1XSpyK3RbOF0qaTtyZXR1cm4gbi54PXMsbi55PWYsbi56PXUsbn07VHQubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxhciIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSplLG5bMV09dFsxXSplLG5bMl09dFsyXSplLG5bM109dFszXSplLG5bNF09dFs0XSplLG5bNV09dFs1XSplLG5bNl09dFs2XSplLG5bN109dFs3XSplLG5bOF09dFs4XSplLG59O1R0Lm11bHRpcGx5QnlTY2FsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUueCxuWzFdPXRbMV0qZS54LG5bMl09dFsyXSplLngsblszXT10WzNdKmUueSxuWzRdPXRbNF0qZS55LG5bNV09dFs1XSplLnksbls2XT10WzZdKmUueixuWzddPXRbN10qZS56LG5bOF09dFs4XSplLnosbn07VHQubXVsdGlwbHlCeVVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUsblsxXT10WzFdKmUsblsyXT10WzJdKmUsblszXT10WzNdKmUsbls0XT10WzRdKmUsbls1XT10WzVdKmUsbls2XT10WzZdKmUsbls3XT10WzddKmUsbls4XT10WzhdKmUsbn07VHQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT0tdFswXSxlWzFdPS10WzFdLGVbMl09LXRbMl0sZVszXT0tdFszXSxlWzRdPS10WzRdLGVbNV09LXRbNV0sZVs2XT0tdFs2XSxlWzddPS10WzddLGVbOF09LXRbOF0sZX07VHQudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj10WzBdLG89dFszXSxyPXRbNl0saT10WzFdLHM9dFs0XSxmPXRbN10sdT10WzJdLGM9dFs1XSxsPXRbOF07cmV0dXJuIGVbMF09bixlWzFdPW8sZVsyXT1yLGVbM109aSxlWzRdPXMsZVs1XT1mLGVbNl09dSxlWzddPWMsZVs4XT1sLGV9O01tPVsxLDAsMF0sTm09WzIsMiwxXTtYbD1uZXcgVHQsRjE9bmV3IFR0O1R0LmNvbXB1dGVFaWdlbkRlY29tcG9zaXRpb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCk7bGV0IG49UC5FUFNJTE9OMjAsbz0xMCxyPTAsaT0wO20oZSl8fChlPXt9KTtsZXQgcz1lLnVuaXRhcnk9VHQuY2xvbmUoVHQuSURFTlRJVFksZS51bml0YXJ5KSxmPWUuZGlhZ29uYWw9VHQuY2xvbmUodCxlLmRpYWdvbmFsKSx1PW4qangoZik7Zm9yKDtpPG8mJkh4KGYpPnU7KXF4KGYsWGwpLFR0LnRyYW5zcG9zZShYbCxGMSksVHQubXVsdGlwbHkoZixYbCxmKSxUdC5tdWx0aXBseShGMSxmLGYpLFR0Lm11bHRpcGx5KHMsWGwscyksKytyPjImJigrK2kscj0wKTtyZXR1cm4gZX07VHQuYWJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT1NYXRoLmFicyh0WzBdKSxlWzFdPU1hdGguYWJzKHRbMV0pLGVbMl09TWF0aC5hYnModFsyXSksZVszXT1NYXRoLmFicyh0WzNdKSxlWzRdPU1hdGguYWJzKHRbNF0pLGVbNV09TWF0aC5hYnModFs1XSksZVs2XT1NYXRoLmFicyh0WzZdKSxlWzddPU1hdGguYWJzKHRbN10pLGVbOF09TWF0aC5hYnModFs4XSksZX07VHQuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpO2xldCBlPXRbMF0sbj10WzNdLG89dFs2XSxyPXRbMV0saT10WzRdLHM9dFs3XSxmPXRbMl0sdT10WzVdLGM9dFs4XTtyZXR1cm4gZSooaSpjLXUqcykrcioodSpvLW4qYykrZioobipzLWkqbyl9O1R0LmludmVyc2U9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXRbMF0sbz10WzFdLHI9dFsyXSxpPXRbM10scz10WzRdLGY9dFs1XSx1PXRbNl0sYz10WzddLGw9dFs4XSxwPVR0LmRldGVybWluYW50KHQpO2lmKE1hdGguYWJzKHApPD1QLkVQU0lMT04xNSl0aHJvdyBuZXcgRCgibWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIik7ZVswXT1zKmwtYypmLGVbMV09YypyLW8qbCxlWzJdPW8qZi1zKnIsZVszXT11KmYtaSpsLGVbNF09bipsLXUqcixlWzVdPWkqci1uKmYsZVs2XT1pKmMtdSpzLGVbN109dSpvLW4qYyxlWzhdPW4qcy1pKm87bGV0IGQ9MS9wO3JldHVybiBUdC5tdWx0aXBseUJ5U2NhbGFyKGUsZCxlKX07S3g9bmV3IFR0O1R0LmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxUdC5pbnZlcnNlKFR0LnRyYW5zcG9zZSh0LEt4KSxlKX07VHQuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxtKHQpJiZtKGUpJiZ0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzNdPT09ZVszXSYmdFs0XT09PWVbNF0mJnRbNV09PT1lWzVdJiZ0WzZdPT09ZVs2XSYmdFs3XT09PWVbN10mJnRbOF09PT1lWzhdfTtUdC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj1uPz8wLHQ9PT1lfHxtKHQpJiZtKGUpJiZNYXRoLmFicyh0WzBdLWVbMF0pPD1uJiZNYXRoLmFicyh0WzFdLWVbMV0pPD1uJiZNYXRoLmFicyh0WzJdLWVbMl0pPD1uJiZNYXRoLmFicyh0WzNdLWVbM10pPD1uJiZNYXRoLmFicyh0WzRdLWVbNF0pPD1uJiZNYXRoLmFicyh0WzVdLWVbNV0pPD1uJiZNYXRoLmFicyh0WzZdLWVbNl0pPD1uJiZNYXRoLmFicyh0WzddLWVbN10pPD1uJiZNYXRoLmFicyh0WzhdLWVbOF0pPD1ufTtUdC5JREVOVElUWT1PYmplY3QuZnJlZXplKG5ldyBUdCgxLDAsMCwwLDEsMCwwLDAsMSkpO1R0LlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgVHQoMCwwLDAsMCwwLDAsMCwwLDApKTtUdC5DT0xVTU4wUk9XMD0wO1R0LkNPTFVNTjBST1cxPTE7VHQuQ09MVU1OMFJPVzI9MjtUdC5DT0xVTU4xUk9XMD0zO1R0LkNPTFVNTjFST1cxPTQ7VHQuQ09MVU1OMVJPVzI9NTtUdC5DT0xVTU4yUk9XMD02O1R0LkNPTFVNTjJST1cxPTc7VHQuQ09MVU1OMlJPVzI9ODtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUdC5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFR0LnBhY2tlZExlbmd0aH19fSk7VHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBUdC5jbG9uZSh0aGlzLHQpfTtUdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBUdC5lcXVhbHModGhpcyx0KX07VHQuZXF1YWxzQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0WzBdPT09ZVtuXSYmdFsxXT09PWVbbisxXSYmdFsyXT09PWVbbisyXSYmdFszXT09PWVbbiszXSYmdFs0XT09PWVbbis0XSYmdFs1XT09PWVbbis1XSYmdFs2XT09PWVbbis2XSYmdFs3XT09PWVbbis3XSYmdFs4XT09PWVbbis4XX07VHQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gVHQuZXF1YWxzRXBzaWxvbih0aGlzLHQsZSl9O1R0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzWzBdfSwgJHt0aGlzWzNdfSwgJHt0aGlzWzZdfSkKKCR7dGhpc1sxXX0sICR7dGhpc1s0XX0sICR7dGhpc1s3XX0pCigke3RoaXNbMl19LCAke3RoaXNbNV19LCAke3RoaXNbOF19KWB9O1o9VHR9KTtmdW5jdGlvbiB2dCh0LGUsbixvKXt0aGlzLng9dD8/MCx0aGlzLnk9ZT8/MCx0aGlzLno9bj8/MCx0aGlzLnc9bz8/MH12YXIgWWwsTDEsV3gsSW0sVG8sWHgsWXgsRDEsbWUsX3I9JCgoKT0+e1d0KCk7ZnQoKTtIdCgpO0t0KCk7dnQuZnJvbUVsZW1lbnRzPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIG0ocik/KHIueD10LHIueT1lLHIuej1uLHIudz1vLHIpOm5ldyB2dCh0LGUsbixvKX07dnQuZnJvbUNvbG9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY29sb3IiLHQpLG0oZSk/KGUueD10LnJlZCxlLnk9dC5ncmVlbixlLno9dC5ibHVlLGUudz10LmFscGhhLGUpOm5ldyB2dCh0LnJlZCx0LmdyZWVuLHQuYmx1ZSx0LmFscGhhKX07dnQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihtKHQpKXJldHVybiBtKGUpPyhlLng9dC54LGUueT10LnksZS56PXQueixlLnc9dC53LGUpOm5ldyB2dCh0LngsdC55LHQueix0LncpfTt2dC5wYWNrZWRMZW5ndGg9NDt2dC5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGVbbisrXT10LngsZVtuKytdPXQueSxlW24rK109dC56LGVbbl09dC53LGV9O3Z0LnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MCxtKG4pfHwobj1uZXcgdnQpLG4ueD10W2UrK10sbi55PXRbZSsrXSxuLno9dFtlKytdLG4udz10W2VdLG59O3Z0LnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiYXJyYXkiLHQpO2xldCBuPXQubGVuZ3RoLG89bio0O2lmKCFtKGUpKWU9bmV3IEFycmF5KG8pO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoIT09byl0aHJvdyBuZXcgRCgiSWYgcmVzdWx0IGlzIGEgdHlwZWQgYXJyYXksIGl0IG11c3QgaGF2ZSBleGFjdGx5IGFycmF5Lmxlbmd0aCAqIDQgZWxlbWVudHMiKTtlLmxlbmd0aCE9PW8mJihlLmxlbmd0aD1vKX1mb3IobGV0IHI9MDtyPG47KytyKXZ0LnBhY2sodFtyXSxlLHIqNCk7cmV0dXJuIGV9O3Z0LnVucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJhcnJheSIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImFycmF5Lmxlbmd0aCIsdC5sZW5ndGgsNCksdC5sZW5ndGglNCE9PTApdGhyb3cgbmV3IEQoImFycmF5IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4iKTtsZXQgbj10Lmxlbmd0aDttKGUpP2UubGVuZ3RoPW4vNDplPW5ldyBBcnJheShuLzQpO2ZvcihsZXQgbz0wO288bjtvKz00KXtsZXQgcj1vLzQ7ZVtyXT12dC51bnBhY2sodCxvLGVbcl0pfXJldHVybiBlfTt2dC5mcm9tQXJyYXk9dnQudW5wYWNrO3Z0Lm1heGltdW1Db21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSxNYXRoLm1heCh0LngsdC55LHQueix0LncpfTt2dC5taW5pbXVtQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCksTWF0aC5taW4odC54LHQueSx0LnosdC53KX07dnQubWluaW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5taW4odC54LGUueCksbi55PU1hdGgubWluKHQueSxlLnkpLG4uej1NYXRoLm1pbih0LnosZS56KSxuLnc9TWF0aC5taW4odC53LGUudyksbn07dnQubWF4aW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5tYXgodC54LGUueCksbi55PU1hdGgubWF4KHQueSxlLnkpLG4uej1NYXRoLm1heCh0LnosZS56KSxuLnc9TWF0aC5tYXgodC53LGUudyksbn07dnQuY2xhbXA9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS50eXBlT2Yub2JqZWN0KCJtaW4iLGUpLHkudHlwZU9mLm9iamVjdCgibWF4IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyk7bGV0IHI9UC5jbGFtcCh0LngsZS54LG4ueCksaT1QLmNsYW1wKHQueSxlLnksbi55KSxzPVAuY2xhbXAodC56LGUueixuLnopLGY9UC5jbGFtcCh0LncsZS53LG4udyk7cmV0dXJuIG8ueD1yLG8ueT1pLG8uej1zLG8udz1mLG99O3Z0Lm1hZ25pdHVkZVNxdWFyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx0LngqdC54K3QueSp0LnkrdC56KnQueit0LncqdC53fTt2dC5tYWduaXR1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh2dC5tYWduaXR1ZGVTcXVhcmVkKHQpKX07WWw9bmV3IHZ0O3Z0LmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdnQuc3VidHJhY3QodCxlLFlsKSx2dC5tYWduaXR1ZGUoWWwpfTt2dC5kaXN0YW5jZVNxdWFyZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx2dC5zdWJ0cmFjdCh0LGUsWWwpLHZ0Lm1hZ25pdHVkZVNxdWFyZWQoWWwpfTt2dC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXZ0Lm1hZ25pdHVkZSh0KTtpZihlLng9dC54L24sZS55PXQueS9uLGUuej10LnovbixlLnc9dC53L24saXNOYU4oZS54KXx8aXNOYU4oZS55KXx8aXNOYU4oZS56KXx8aXNOYU4oZS53KSl0aHJvdyBuZXcgRCgibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyIik7cmV0dXJuIGV9O3Z0LmRvdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHQueCplLngrdC55KmUueSt0LnoqZS56K3QudyplLnd9O3Z0Lm11bHRpcGx5Q29tcG9uZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngqZS54LG4ueT10LnkqZS55LG4uej10LnoqZS56LG4udz10LncqZS53LG59O3Z0LmRpdmlkZUNvbXBvbmVudHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2UueCxuLnk9dC55L2UueSxuLno9dC56L2UueixuLnc9dC53L2UudyxufTt2dC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54K2UueCxuLnk9dC55K2UueSxuLno9dC56K2UueixuLnc9dC53K2UudyxufTt2dC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngtZS54LG4ueT10LnktZS55LG4uej10LnotZS56LG4udz10LnctZS53LG59O3Z0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG4uej10LnoqZSxuLnc9dC53KmUsbn07dnQuZGl2aWRlQnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2Usbi55PXQueS9lLG4uej10LnovZSxuLnc9dC53L2Usbn07dnQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PS10LngsZS55PS10LnksZS56PS10LnosZS53PS10LncsZX07dnQuYWJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PU1hdGguYWJzKHQueCksZS55PU1hdGguYWJzKHQueSksZS56PU1hdGguYWJzKHQueiksZS53PU1hdGguYWJzKHQudyksZX07TDE9bmV3IHZ0O3Z0LmxlcnA9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic3RhcnQiLHQpLHkudHlwZU9mLm9iamVjdCgiZW5kIixlKSx5LnR5cGVPZi5udW1iZXIoInQiLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSx2dC5tdWx0aXBseUJ5U2NhbGFyKGUsbixMMSksbz12dC5tdWx0aXBseUJ5U2NhbGFyKHQsMS1uLG8pLHZ0LmFkZChMMSxvLG8pfTtXeD1uZXcgdnQ7dnQubW9zdE9ydGhvZ29uYWxBeGlzPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj12dC5ub3JtYWxpemUodCxXeCk7cmV0dXJuIHZ0LmFicyhuLG4pLG4ueDw9bi55P24ueDw9bi56P24ueDw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9YLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpOm4uejw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9aLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpOm4ueTw9bi56P24ueTw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9ZLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpOm4uejw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9aLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpLGV9O3Z0LmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8bSh0KSYmbShlKSYmdC54PT09ZS54JiZ0Lnk9PT1lLnkmJnQuej09PWUueiYmdC53PT09ZS53fTt2dC5lcXVhbHNBcnJheT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQueD09PWVbbl0mJnQueT09PWVbbisxXSYmdC56PT09ZVtuKzJdJiZ0Lnc9PT1lW24rM119O3Z0LmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHQ9PT1lfHxtKHQpJiZtKGUpJiZQLmVxdWFsc0Vwc2lsb24odC54LGUueCxuLG8pJiZQLmVxdWFsc0Vwc2lsb24odC55LGUueSxuLG8pJiZQLmVxdWFsc0Vwc2lsb24odC56LGUueixuLG8pJiZQLmVxdWFsc0Vwc2lsb24odC53LGUudyxuLG8pfTt2dC5aRVJPPU9iamVjdC5mcmVlemUobmV3IHZ0KDAsMCwwLDApKTt2dC5PTkU9T2JqZWN0LmZyZWV6ZShuZXcgdnQoMSwxLDEsMSkpO3Z0LlVOSVRfWD1PYmplY3QuZnJlZXplKG5ldyB2dCgxLDAsMCwwKSk7dnQuVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IHZ0KDAsMSwwLDApKTt2dC5VTklUX1o9T2JqZWN0LmZyZWV6ZShuZXcgdnQoMCwwLDEsMCkpO3Z0LlVOSVRfVz1PYmplY3QuZnJlZXplKG5ldyB2dCgwLDAsMCwxKSk7dnQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2dC5jbG9uZSh0aGlzLHQpfTt2dC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB2dC5lcXVhbHModGhpcyx0KX07dnQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2dC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlLG4pfTt2dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0sICR7dGhpcy53fSlgfTtJbT1uZXcgRmxvYXQzMkFycmF5KDEpLFRvPW5ldyBVaW50OEFycmF5KEltLmJ1ZmZlciksWHg9bmV3IFVpbnQzMkFycmF5KFsyODc0NTQwMjBdKSxZeD1uZXcgVWludDhBcnJheShYeC5idWZmZXIpLEQxPVl4WzBdPT09Njg7dnQucGFja0Zsb2F0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigidmFsdWUiLHQpLG0oZSl8fChlPW5ldyB2dCksSW1bMF09dCxEMT8oZS54PVRvWzBdLGUueT1Ub1sxXSxlLno9VG9bMl0sZS53PVRvWzNdKTooZS54PVRvWzNdLGUueT1Ub1syXSxlLno9VG9bMV0sZS53PVRvWzBdKSxlfTt2dC51bnBhY2tGbG9hdD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJwYWNrZWRGbG9hdCIsdCksRDE/KFRvWzBdPXQueCxUb1sxXT10LnksVG9bMl09dC56LFRvWzNdPXQudyk6KFRvWzBdPXQudyxUb1sxXT10LnosVG9bMl09dC55LFRvWzNdPXQueCksSW1bMF19O21lPXZ0fSk7dmFyIHZtLEl0LHllPSQoKCk9Pnt2bT17fTt2bS5FTVBUWV9PQkpFQ1Q9T2JqZWN0LmZyZWV6ZSh7fSk7dm0uRU1QVFlfQVJSQVk9T2JqZWN0LmZyZWV6ZShbXSk7SXQ9dm19KTtmdW5jdGlvbiBzZih0KXt0aGlzLm5hbWU9IlJ1bnRpbWVFcnJvciIsdGhpcy5tZXNzYWdlPXQ7bGV0IGU7dHJ5e3Rocm93IG5ldyBFcnJvcn1jYXRjaChuKXtlPW4uc3RhY2t9dGhpcy5zdGFjaz1lfXZhciBBZSx0aT0kKCgpPT57ZnQoKTttKE9iamVjdC5jcmVhdGUpJiYoc2YucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxzZi5wcm90b3R5cGUuY29uc3RydWN0b3I9c2YpO3NmLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2xldCB0PWAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7cmV0dXJuIG0odGhpcy5zdGFjaykmJih0Kz1gCiR7dGhpcy5zdGFjay50b1N0cmluZygpfWApLHR9O0FlPXNmfSk7ZnVuY3Rpb24gd3QodCxlLG4sbyxyLGkscyxmLHUsYyxsLHAsZCxoLF8sZyl7dGhpc1swXT10Pz8wLHRoaXNbMV09cj8/MCx0aGlzWzJdPXU/PzAsdGhpc1szXT1kPz8wLHRoaXNbNF09ZT8/MCx0aGlzWzVdPWk/PzAsdGhpc1s2XT1jPz8wLHRoaXNbN109aD8/MCx0aGlzWzhdPW4/PzAsdGhpc1s5XT1zPz8wLHRoaXNbMTBdPWw/PzAsdGhpc1sxMV09Xz8/MCx0aGlzWzEyXT1vPz8wLHRoaXNbMTNdPWY/PzAsdGhpc1sxNF09cD8/MCx0aGlzWzE1XT1nPz8wfXZhciBxYyxLYyxjZiwkeCxaeCxGbSxCMSxReCxKeCx0QyxlQyxuQyxvQyxyQyxzdCxrbj0kKCgpPT57RHQoKTtfcigpO1d0KCk7eWUoKTtmdCgpO0h0KCk7S3QoKTtVbigpO3RpKCk7d3QucGFja2VkTGVuZ3RoPTE2O3d0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXRbMF0sZVtuKytdPXRbMV0sZVtuKytdPXRbMl0sZVtuKytdPXRbM10sZVtuKytdPXRbNF0sZVtuKytdPXRbNV0sZVtuKytdPXRbNl0sZVtuKytdPXRbN10sZVtuKytdPXRbOF0sZVtuKytdPXRbOV0sZVtuKytdPXRbMTBdLGVbbisrXT10WzExXSxlW24rK109dFsxMl0sZVtuKytdPXRbMTNdLGVbbisrXT10WzE0XSxlW25dPXRbMTVdLGV9O3d0LnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MCxtKG4pfHwobj1uZXcgd3QpLG5bMF09dFtlKytdLG5bMV09dFtlKytdLG5bMl09dFtlKytdLG5bM109dFtlKytdLG5bNF09dFtlKytdLG5bNV09dFtlKytdLG5bNl09dFtlKytdLG5bN109dFtlKytdLG5bOF09dFtlKytdLG5bOV09dFtlKytdLG5bMTBdPXRbZSsrXSxuWzExXT10W2UrK10sblsxMl09dFtlKytdLG5bMTNdPXRbZSsrXSxuWzE0XT10W2UrK10sblsxNV09dFtlXSxufTt3dC5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImFycmF5Iix0KTtsZXQgbj10Lmxlbmd0aCxvPW4qMTY7aWYoIW0oZSkpZT1uZXcgQXJyYXkobyk7ZWxzZXtpZighQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGghPT1vKXRocm93IG5ldyBEKCJJZiByZXN1bHQgaXMgYSB0eXBlZCBhcnJheSwgaXQgbXVzdCBoYXZlIGV4YWN0bHkgYXJyYXkubGVuZ3RoICogMTYgZWxlbWVudHMiKTtlLmxlbmd0aCE9PW8mJihlLmxlbmd0aD1vKX1mb3IobGV0IHI9MDtyPG47KytyKXd0LnBhY2sodFtyXSxlLHIqMTYpO3JldHVybiBlfTt3dC51bnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe2lmKHkuZGVmaW5lZCgiYXJyYXkiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJhcnJheS5sZW5ndGgiLHQubGVuZ3RoLDE2KSx0Lmxlbmd0aCUxNiE9PTApdGhyb3cgbmV3IEQoImFycmF5IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYuIik7bGV0IG49dC5sZW5ndGg7bShlKT9lLmxlbmd0aD1uLzE2OmU9bmV3IEFycmF5KG4vMTYpO2ZvcihsZXQgbz0wO288bjtvKz0xNil7bGV0IHI9by8xNjtlW3JdPXd0LnVucGFjayh0LG8sZVtyXSl9cmV0dXJuIGV9O3d0LmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYobSh0KSlyZXR1cm4gbShlKT8oZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGUpOm5ldyB3dCh0WzBdLHRbNF0sdFs4XSx0WzEyXSx0WzFdLHRbNV0sdFs5XSx0WzEzXSx0WzJdLHRbNl0sdFsxMF0sdFsxNF0sdFszXSx0WzddLHRbMTFdLHRbMTVdKX07d3QuZnJvbUFycmF5PXd0LnVucGFjazt3dC5mcm9tQ29sdW1uTWFqb3JBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoInZhbHVlcyIsdCksd3QuY2xvbmUodCxlKX07d3QuZnJvbVJvd01ham9yQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZXMiLHQpLG0oZSk/KGVbMF09dFswXSxlWzFdPXRbNF0sZVsyXT10WzhdLGVbM109dFsxMl0sZVs0XT10WzFdLGVbNV09dFs1XSxlWzZdPXRbOV0sZVs3XT10WzEzXSxlWzhdPXRbMl0sZVs5XT10WzZdLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTRdLGVbMTJdPXRbM10sZVsxM109dFs3XSxlWzE0XT10WzExXSxlWzE1XT10WzE1XSxlKTpuZXcgd3QodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddLHRbOF0sdFs5XSx0WzEwXSx0WzExXSx0WzEyXSx0WzEzXSx0WzE0XSx0WzE1XSl9O3d0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyb3RhdGlvbiIsdCksZT1lPz9hLlpFUk8sbShuKT8oblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT0wLG5bNF09dFszXSxuWzVdPXRbNF0sbls2XT10WzVdLG5bN109MCxuWzhdPXRbNl0sbls5XT10WzddLG5bMTBdPXRbOF0sblsxMV09MCxuWzEyXT1lLngsblsxM109ZS55LG5bMTRdPWUueixuWzE1XT0xLG4pOm5ldyB3dCh0WzBdLHRbM10sdFs2XSxlLngsdFsxXSx0WzRdLHRbN10sZS55LHRbMl0sdFs1XSx0WzhdLGUueiwwLDAsMCwxKX07d3QuZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGU9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJ0cmFuc2xhdGlvbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyb3RhdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsbiksbShvKXx8KG89bmV3IHd0KTtsZXQgcj1uLngsaT1uLnkscz1uLnosZj1lLngqZS54LHU9ZS54KmUueSxjPWUueCplLnosbD1lLngqZS53LHA9ZS55KmUueSxkPWUueSplLnosaD1lLnkqZS53LF89ZS56KmUueixnPWUueiplLncsYj1lLncqZS53LHc9Zi1wLV8rYixPPTIqKHUtZyksRT0yKihjK2gpLFQ9MioodStnKSx4PS1mK3AtXytiLE09MiooZC1sKSxOPTIqKGMtaCksRj0yKihkK2wpLEk9LWYtcCtfK2I7cmV0dXJuIG9bMF09dypyLG9bMV09VCpyLG9bMl09TipyLG9bM109MCxvWzRdPU8qaSxvWzVdPXgqaSxvWzZdPUYqaSxvWzddPTAsb1s4XT1FKnMsb1s5XT1NKnMsb1sxMF09SSpzLG9bMTFdPTAsb1sxMl09dC54LG9bMTNdPXQueSxvWzE0XT10Lnosb1sxNV09MSxvfTt3dC5mcm9tVHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlIix0KSx3dC5mcm9tVHJhbnNsYXRpb25RdWF0ZXJuaW9uUm90YXRpb25TY2FsZSh0LnRyYW5zbGF0aW9uLHQucm90YXRpb24sdC5zY2FsZSxlKX07d3QuZnJvbVRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidHJhbnNsYXRpb24iLHQpLHd0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKFouSURFTlRJVFksdCxlKX07d3QuZnJvbVNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic2NhbGUiLHQpLG0oZSk/KGVbMF09dC54LGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPXQueSxlWzZdPTAsZVs3XT0wLGVbOF09MCxlWzldPTAsZVsxMF09dC56LGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSxlKTpuZXcgd3QodC54LDAsMCwwLDAsdC55LDAsMCwwLDAsdC56LDAsMCwwLDAsMSl9O3d0LmZyb21Vbmlmb3JtU2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2YubnVtYmVyKCJzY2FsZSIsdCksbShlKT8oZVswXT10LGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPXQsZVs2XT0wLGVbN109MCxlWzhdPTAsZVs5XT0wLGVbMTBdPXQsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGUpOm5ldyB3dCh0LDAsMCwwLDAsdCwwLDAsMCwwLHQsMCwwLDAsMCwxKX07d3QuZnJvbVJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicm90YXRpb24iLHQpLG0oZSl8fChlPW5ldyB3dCksZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT0wLGVbNF09dFszXSxlWzVdPXRbNF0sZVs2XT10WzVdLGVbN109MCxlWzhdPXRbNl0sZVs5XT10WzddLGVbMTBdPXRbOF0sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGV9O3FjPW5ldyBhLEtjPW5ldyBhLGNmPW5ldyBhO3d0LmZyb21DYW1lcmE9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhbWVyYSIsdCk7bGV0IG49dC5wb3NpdGlvbixvPXQuZGlyZWN0aW9uLHI9dC51cDt5LnR5cGVPZi5vYmplY3QoImNhbWVyYS5wb3NpdGlvbiIsbikseS50eXBlT2Yub2JqZWN0KCJjYW1lcmEuZGlyZWN0aW9uIixvKSx5LnR5cGVPZi5vYmplY3QoImNhbWVyYS51cCIsciksYS5ub3JtYWxpemUobyxxYyksYS5ub3JtYWxpemUoYS5jcm9zcyhxYyxyLEtjKSxLYyksYS5ub3JtYWxpemUoYS5jcm9zcyhLYyxxYyxjZiksY2YpO2xldCBpPUtjLngscz1LYy55LGY9S2Mueix1PXFjLngsYz1xYy55LGw9cWMueixwPWNmLngsZD1jZi55LGg9Y2YueixfPW4ueCxnPW4ueSxiPW4ueix3PWkqLV8rcyotZytmKi1iLE89cCotXytkKi1nK2gqLWIsRT11Kl8rYypnK2wqYjtyZXR1cm4gbShlKT8oZVswXT1pLGVbMV09cCxlWzJdPS11LGVbM109MCxlWzRdPXMsZVs1XT1kLGVbNl09LWMsZVs3XT0wLGVbOF09ZixlWzldPWgsZVsxMF09LWwsZVsxMV09MCxlWzEyXT13LGVbMTNdPU8sZVsxNF09RSxlWzE1XT0xLGUpOm5ldyB3dChpLHMsZix3LHAsZCxoLE8sLXUsLWMsLWwsRSwwLDAsMCwxKX07d3QuY29tcHV0ZVBlcnNwZWN0aXZlRmllbGRPZlZpZXc9ZnVuY3Rpb24odCxlLG4sbyxyKXt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oImZvdlkiLHQsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuKCJmb3ZZIix0LE1hdGguUEkpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbigibmVhciIsbiwwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oImZhciIsbywwKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIscik7bGV0IHM9MS9NYXRoLnRhbih0Ki41KSxmPXMvZSx1PShvK24pLyhuLW8pLGM9MipvKm4vKG4tbyk7cmV0dXJuIHJbMF09ZixyWzFdPTAsclsyXT0wLHJbM109MCxyWzRdPTAscls1XT1zLHJbNl09MCxyWzddPTAscls4XT0wLHJbOV09MCxyWzEwXT11LHJbMTFdPS0xLHJbMTJdPTAsclsxM109MCxyWzE0XT1jLHJbMTVdPTAscn07d3QuY29tcHV0ZU9ydGhvZ3JhcGhpY09mZkNlbnRlcj1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXt5LnR5cGVPZi5udW1iZXIoImxlZnQiLHQpLHkudHlwZU9mLm51bWJlcigicmlnaHQiLGUpLHkudHlwZU9mLm51bWJlcigiYm90dG9tIixuKSx5LnR5cGVPZi5udW1iZXIoInRvcCIsbykseS50eXBlT2YubnVtYmVyKCJuZWFyIixyKSx5LnR5cGVPZi5udW1iZXIoImZhciIsaSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLHMpO2xldCBmPTEvKGUtdCksdT0xLyhvLW4pLGM9MS8oaS1yKSxsPS0oZSt0KSpmLHA9LShvK24pKnUsZD0tKGkrcikqYztyZXR1cm4gZio9Mix1Kj0yLGMqPS0yLHNbMF09ZixzWzFdPTAsc1syXT0wLHNbM109MCxzWzRdPTAsc1s1XT11LHNbNl09MCxzWzddPTAsc1s4XT0wLHNbOV09MCxzWzEwXT1jLHNbMTFdPTAsc1sxMl09bCxzWzEzXT1wLHNbMTRdPWQsc1sxNV09MSxzfTt3dC5jb21wdXRlUGVyc3BlY3RpdmVPZmZDZW50ZXI9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7eS50eXBlT2YubnVtYmVyKCJsZWZ0Iix0KSx5LnR5cGVPZi5udW1iZXIoInJpZ2h0IixlKSx5LnR5cGVPZi5udW1iZXIoImJvdHRvbSIsbikseS50eXBlT2YubnVtYmVyKCJ0b3AiLG8pLHkudHlwZU9mLm51bWJlcigibmVhciIscikseS50eXBlT2YubnVtYmVyKCJmYXIiLGkpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixzKTtsZXQgZj0yKnIvKGUtdCksdT0yKnIvKG8tbiksYz0oZSt0KS8oZS10KSxsPShvK24pLyhvLW4pLHA9LShpK3IpLyhpLXIpLGQ9LTEsaD0tMippKnIvKGktcik7cmV0dXJuIHNbMF09ZixzWzFdPTAsc1syXT0wLHNbM109MCxzWzRdPTAsc1s1XT11LHNbNl09MCxzWzddPTAsc1s4XT1jLHNbOV09bCxzWzEwXT1wLHNbMTFdPWQsc1sxMl09MCxzWzEzXT0wLHNbMTRdPWgsc1sxNV09MCxzfTt3dC5jb21wdXRlSW5maW5pdGVQZXJzcGVjdGl2ZU9mZkNlbnRlcj1mdW5jdGlvbih0LGUsbixvLHIsaSl7eS50eXBlT2YubnVtYmVyKCJsZWZ0Iix0KSx5LnR5cGVPZi5udW1iZXIoInJpZ2h0IixlKSx5LnR5cGVPZi5udW1iZXIoImJvdHRvbSIsbikseS50eXBlT2YubnVtYmVyKCJ0b3AiLG8pLHkudHlwZU9mLm51bWJlcigibmVhciIscikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGkpO2xldCBzPTIqci8oZS10KSxmPTIqci8oby1uKSx1PShlK3QpLyhlLXQpLGM9KG8rbikvKG8tbiksbD0tMSxwPS0xLGQ9LTIqcjtyZXR1cm4gaVswXT1zLGlbMV09MCxpWzJdPTAsaVszXT0wLGlbNF09MCxpWzVdPWYsaVs2XT0wLGlbN109MCxpWzhdPXUsaVs5XT1jLGlbMTBdPWwsaVsxMV09cCxpWzEyXT0wLGlbMTNdPTAsaVsxNF09ZCxpWzE1XT0wLGl9O3d0LmNvbXB1dGVWaWV3cG9ydFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSxuLG8pe20obyl8fChvPW5ldyB3dCksdD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IHI9dC54Pz8wLGk9dC55Pz8wLHM9dC53aWR0aD8/MCxmPXQuaGVpZ2h0Pz8wO2U9ZT8/MCxuPW4/PzE7bGV0IHU9cyouNSxjPWYqLjUsbD0obi1lKSouNSxwPXUsZD1jLGg9bCxfPXIrdSxnPWkrYyxiPWUrbCx3PTE7cmV0dXJuIG9bMF09cCxvWzFdPTAsb1syXT0wLG9bM109MCxvWzRdPTAsb1s1XT1kLG9bNl09MCxvWzddPTAsb1s4XT0wLG9bOV09MCxvWzEwXT1oLG9bMTFdPTAsb1sxMl09XyxvWzEzXT1nLG9bMTRdPWIsb1sxNV09dyxvfTt3dC5jb21wdXRlVmlldz1mdW5jdGlvbih0LGUsbixvLHIpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInBvc2l0aW9uIix0KSx5LnR5cGVPZi5vYmplY3QoImRpcmVjdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJ1cCIsbikseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsbykseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLHIpLHJbMF09by54LHJbMV09bi54LHJbMl09LWUueCxyWzNdPTAscls0XT1vLnkscls1XT1uLnkscls2XT0tZS55LHJbN109MCxyWzhdPW8ueixyWzldPW4ueixyWzEwXT0tZS56LHJbMTFdPTAsclsxMl09LWEuZG90KG8sdCksclsxM109LWEuZG90KG4sdCksclsxNF09YS5kb3QoZSx0KSxyWzE1XT0xLHJ9O3d0LnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLG0oZSk/KGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlKTpbdFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddLHRbOF0sdFs5XSx0WzEwXSx0WzExXSx0WzEyXSx0WzEzXSx0WzE0XSx0WzE1XV19O3d0LmdldEVsZW1lbnRJbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygicm93IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJyb3ciLGUsMykseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImNvbHVtbiIsdCwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiY29sdW1uIix0LDMpLHQqNCtlfTt3dC5nZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDMpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lKjQscj10W29dLGk9dFtvKzFdLHM9dFtvKzJdLGY9dFtvKzNdO3JldHVybiBuLng9cixuLnk9aSxuLno9cyxuLnc9ZixufTt3dC5zZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMykseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPXd0LmNsb25lKHQsbyk7bGV0IHI9ZSo0O3JldHVybiBvW3JdPW4ueCxvW3IrMV09bi55LG9bcisyXT1uLnosb1tyKzNdPW4udyxvfTt3dC5nZXRSb3c9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDMpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10W2VdLHI9dFtlKzRdLGk9dFtlKzhdLHM9dFtlKzEyXTtyZXR1cm4gbi54PW8sbi55PXIsbi56PWksbi53PXMsbn07d3Quc2V0Um93PWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwzKSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLG89d3QuY2xvbmUodCxvKSxvW2VdPW4ueCxvW2UrNF09bi55LG9bZSs4XT1uLnosb1tlKzEyXT1uLncsb307d3Quc2V0VHJhbnNsYXRpb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJ0cmFuc2xhdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG5bM109dFszXSxuWzRdPXRbNF0sbls1XT10WzVdLG5bNl09dFs2XSxuWzddPXRbN10sbls4XT10WzhdLG5bOV09dFs5XSxuWzEwXT10WzEwXSxuWzExXT10WzExXSxuWzEyXT1lLngsblsxM109ZS55LG5bMTRdPWUueixuWzE1XT10WzE1XSxufTskeD1uZXcgYTt3dC5zZXRTY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz13dC5nZXRTY2FsZSh0LCR4KSxyPWUueC9vLngsaT1lLnkvby55LHM9ZS56L28uejtyZXR1cm4gblswXT10WzBdKnIsblsxXT10WzFdKnIsblsyXT10WzJdKnIsblszXT10WzNdLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSppLG5bN109dFs3XSxuWzhdPXRbOF0qcyxuWzldPXRbOV0qcyxuWzEwXT10WzEwXSpzLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O1p4PW5ldyBhO3d0LnNldFVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz13dC5nZXRTY2FsZSh0LFp4KSxyPWUvby54LGk9ZS9vLnkscz1lL28uejtyZXR1cm4gblswXT10WzBdKnIsblsxXT10WzFdKnIsblsyXT10WzJdKnIsblszXT10WzNdLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSppLG5bN109dFs3XSxuWzhdPXRbOF0qcyxuWzldPXRbOV0qcyxuWzEwXT10WzEwXSpzLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O0ZtPW5ldyBhO3d0LmdldFNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbMF0sdFsxXSx0WzJdLEZtKSksZS55PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbNF0sdFs1XSx0WzZdLEZtKSksZS56PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbOF0sdFs5XSx0WzEwXSxGbSkpLGV9O0IxPW5ldyBhO3d0LmdldE1heGltdW1TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gd3QuZ2V0U2NhbGUodCxCMSksYS5tYXhpbXVtQ29tcG9uZW50KEIxKX07UXg9bmV3IGE7d3Quc2V0Um90YXRpb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89d3QuZ2V0U2NhbGUodCxReCk7cmV0dXJuIG5bMF09ZVswXSpvLngsblsxXT1lWzFdKm8ueCxuWzJdPWVbMl0qby54LG5bM109dFszXSxuWzRdPWVbM10qby55LG5bNV09ZVs0XSpvLnksbls2XT1lWzVdKm8ueSxuWzddPXRbN10sbls4XT1lWzZdKm8ueixuWzldPWVbN10qby56LG5bMTBdPWVbOF0qby56LG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O0p4PW5ldyBhO3d0LmdldFJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj13dC5nZXRTY2FsZSh0LEp4KTtyZXR1cm4gZVswXT10WzBdL24ueCxlWzFdPXRbMV0vbi54LGVbMl09dFsyXS9uLngsZVszXT10WzRdL24ueSxlWzRdPXRbNV0vbi55LGVbNV09dFs2XS9uLnksZVs2XT10WzhdL24ueixlWzddPXRbOV0vbi56LGVbOF09dFsxMF0vbi56LGV9O3d0Lm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10WzBdLHI9dFsxXSxpPXRbMl0scz10WzNdLGY9dFs0XSx1PXRbNV0sYz10WzZdLGw9dFs3XSxwPXRbOF0sZD10WzldLGg9dFsxMF0sXz10WzExXSxnPXRbMTJdLGI9dFsxM10sdz10WzE0XSxPPXRbMTVdLEU9ZVswXSxUPWVbMV0seD1lWzJdLE09ZVszXSxOPWVbNF0sRj1lWzVdLEk9ZVs2XSx2PWVbN10sQj1lWzhdLEE9ZVs5XSxTPWVbMTBdLEM9ZVsxMV0sTD1lWzEyXSx6PWVbMTNdLGo9ZVsxNF0saz1lWzE1XSxxPW8qRStmKlQrcCp4K2cqTSxXPXIqRSt1KlQrZCp4K2IqTSxSPWkqRStjKlQraCp4K3cqTSxudD1zKkUrbCpUK18qeCtPKk0sYXQ9bypOK2YqRitwKkkrZyp2LGx0PXIqTit1KkYrZCpJK2IqdixfdD1pKk4rYypGK2gqSSt3KnYsb3Q9cypOK2wqRitfKkkrTyp2LFB0PW8qQitmKkErcCpTK2cqQyxndD1yKkIrdSpBK2QqUytiKkMsUnQ9aSpCK2MqQStoKlMrdypDLGR0PXMqQitsKkErXypTK08qQyxydD1vKkwrZip6K3AqaitnKmsseHQ9cipMK3UqeitkKmorYiprLEd0PWkqTCtjKnoraCpqK3cqayxwZT1zKkwrbCp6K18qaitPKms7cmV0dXJuIG5bMF09cSxuWzFdPVcsblsyXT1SLG5bM109bnQsbls0XT1hdCxuWzVdPWx0LG5bNl09X3Qsbls3XT1vdCxuWzhdPVB0LG5bOV09Z3QsblsxMF09UnQsblsxMV09ZHQsblsxMl09cnQsblsxM109eHQsblsxNF09R3QsblsxNV09cGUsbn07d3QuYWRkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdK2VbMF0sblsxXT10WzFdK2VbMV0sblsyXT10WzJdK2VbMl0sblszXT10WzNdK2VbM10sbls0XT10WzRdK2VbNF0sbls1XT10WzVdK2VbNV0sbls2XT10WzZdK2VbNl0sbls3XT10WzddK2VbN10sbls4XT10WzhdK2VbOF0sbls5XT10WzldK2VbOV0sblsxMF09dFsxMF0rZVsxMF0sblsxMV09dFsxMV0rZVsxMV0sblsxMl09dFsxMl0rZVsxMl0sblsxM109dFsxM10rZVsxM10sblsxNF09dFsxNF0rZVsxNF0sblsxNV09dFsxNV0rZVsxNV0sbn07d3Quc3VidHJhY3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0tZVswXSxuWzFdPXRbMV0tZVsxXSxuWzJdPXRbMl0tZVsyXSxuWzNdPXRbM10tZVszXSxuWzRdPXRbNF0tZVs0XSxuWzVdPXRbNV0tZVs1XSxuWzZdPXRbNl0tZVs2XSxuWzddPXRbN10tZVs3XSxuWzhdPXRbOF0tZVs4XSxuWzldPXRbOV0tZVs5XSxuWzEwXT10WzEwXS1lWzEwXSxuWzExXT10WzExXS1lWzExXSxuWzEyXT10WzEyXS1lWzEyXSxuWzEzXT10WzEzXS1lWzEzXSxuWzE0XT10WzE0XS1lWzE0XSxuWzE1XT10WzE1XS1lWzE1XSxufTt3dC5tdWx0aXBseVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10WzBdLHI9dFsxXSxpPXRbMl0scz10WzRdLGY9dFs1XSx1PXRbNl0sYz10WzhdLGw9dFs5XSxwPXRbMTBdLGQ9dFsxMl0saD10WzEzXSxfPXRbMTRdLGc9ZVswXSxiPWVbMV0sdz1lWzJdLE89ZVs0XSxFPWVbNV0sVD1lWzZdLHg9ZVs4XSxNPWVbOV0sTj1lWzEwXSxGPWVbMTJdLEk9ZVsxM10sdj1lWzE0XSxCPW8qZytzKmIrYyp3LEE9cipnK2YqYitsKncsUz1pKmcrdSpiK3AqdyxDPW8qTytzKkUrYypULEw9cipPK2YqRStsKlQsej1pKk8rdSpFK3AqVCxqPW8qeCtzKk0rYypOLGs9cip4K2YqTStsKk4scT1pKngrdSpNK3AqTixXPW8qRitzKkkrYyp2K2QsUj1yKkYrZipJK2wqditoLG50PWkqRit1KkkrcCp2K187cmV0dXJuIG5bMF09QixuWzFdPUEsblsyXT1TLG5bM109MCxuWzRdPUMsbls1XT1MLG5bNl09eixuWzddPTAsbls4XT1qLG5bOV09ayxuWzEwXT1xLG5bMTFdPTAsblsxMl09VyxuWzEzXT1SLG5bMTRdPW50LG5bMTVdPTEsbn07d3QubXVsdGlwbHlCeU1hdHJpeDM9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJvdGF0aW9uIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFswXSxyPXRbMV0saT10WzJdLHM9dFs0XSxmPXRbNV0sdT10WzZdLGM9dFs4XSxsPXRbOV0scD10WzEwXSxkPWVbMF0saD1lWzFdLF89ZVsyXSxnPWVbM10sYj1lWzRdLHc9ZVs1XSxPPWVbNl0sRT1lWzddLFQ9ZVs4XSx4PW8qZCtzKmgrYypfLE09cipkK2YqaCtsKl8sTj1pKmQrdSpoK3AqXyxGPW8qZytzKmIrYyp3LEk9cipnK2YqYitsKncsdj1pKmcrdSpiK3AqdyxCPW8qTytzKkUrYypULEE9cipPK2YqRStsKlQsUz1pKk8rdSpFK3AqVDtyZXR1cm4gblswXT14LG5bMV09TSxuWzJdPU4sblszXT0wLG5bNF09RixuWzVdPUksbls2XT12LG5bN109MCxuWzhdPUIsbls5XT1BLG5bMTBdPVMsblsxMV09MCxuWzEyXT10WzEyXSxuWzEzXT10WzEzXSxuWzE0XT10WzE0XSxuWzE1XT10WzE1XSxufTt3dC5tdWx0aXBseUJ5VHJhbnNsYXRpb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInRyYW5zbGF0aW9uIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZS54LHI9ZS55LGk9ZS56LHM9byp0WzBdK3IqdFs0XStpKnRbOF0rdFsxMl0sZj1vKnRbMV0rcip0WzVdK2kqdFs5XSt0WzEzXSx1PW8qdFsyXStyKnRbNl0raSp0WzEwXSt0WzE0XTtyZXR1cm4gblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT10WzNdLG5bNF09dFs0XSxuWzVdPXRbNV0sbls2XT10WzZdLG5bN109dFs3XSxuWzhdPXRbOF0sbls5XT10WzldLG5bMTBdPXRbMTBdLG5bMTFdPXRbMTFdLG5bMTJdPXMsblsxM109ZixuWzE0XT11LG5bMTVdPXRbMTVdLG59O3d0Lm11bHRpcGx5QnlTY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lLngscj1lLnksaT1lLno7cmV0dXJuIG89PT0xJiZyPT09MSYmaT09PTE/d3QuY2xvbmUodCxuKTooblswXT1vKnRbMF0sblsxXT1vKnRbMV0sblsyXT1vKnRbMl0sblszXT10WzNdLG5bNF09cip0WzRdLG5bNV09cip0WzVdLG5bNl09cip0WzZdLG5bN109dFs3XSxuWzhdPWkqdFs4XSxuWzldPWkqdFs5XSxuWzEwXT1pKnRbMTBdLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG4pfTt3dC5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0qZSxuWzFdPXRbMV0qZSxuWzJdPXRbMl0qZSxuWzNdPXRbM10sbls0XT10WzRdKmUsbls1XT10WzVdKmUsbls2XT10WzZdKmUsbls3XT10WzddLG5bOF09dFs4XSplLG5bOV09dFs5XSplLG5bMTBdPXRbMTBdKmUsblsxMV09dFsxMV0sblsxMl09dFsxMl0sblsxM109dFsxM10sblsxNF09dFsxNF0sblsxNV09dFsxNV0sbn07d3QubXVsdGlwbHlCeVZlY3Rvcj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZS54LHI9ZS55LGk9ZS56LHM9ZS53LGY9dFswXSpvK3RbNF0qcit0WzhdKmkrdFsxMl0qcyx1PXRbMV0qbyt0WzVdKnIrdFs5XSppK3RbMTNdKnMsYz10WzJdKm8rdFs2XSpyK3RbMTBdKmkrdFsxNF0qcyxsPXRbM10qbyt0WzddKnIrdFsxMV0qaSt0WzE1XSpzO3JldHVybiBuLng9ZixuLnk9dSxuLno9YyxuLnc9bCxufTt3dC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3Rvcj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZS54LHI9ZS55LGk9ZS56LHM9dFswXSpvK3RbNF0qcit0WzhdKmksZj10WzFdKm8rdFs1XSpyK3RbOV0qaSx1PXRbMl0qbyt0WzZdKnIrdFsxMF0qaTtyZXR1cm4gbi54PXMsbi55PWYsbi56PXUsbn07d3QubXVsdGlwbHlCeVBvaW50PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lLngscj1lLnksaT1lLnoscz10WzBdKm8rdFs0XSpyK3RbOF0qaSt0WzEyXSxmPXRbMV0qbyt0WzVdKnIrdFs5XSppK3RbMTNdLHU9dFsyXSpvK3RbNl0qcit0WzEwXSppK3RbMTRdO3JldHVybiBuLng9cyxuLnk9ZixuLno9dSxufTt3dC5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUsblsxXT10WzFdKmUsblsyXT10WzJdKmUsblszXT10WzNdKmUsbls0XT10WzRdKmUsbls1XT10WzVdKmUsbls2XT10WzZdKmUsbls3XT10WzddKmUsbls4XT10WzhdKmUsbls5XT10WzldKmUsblsxMF09dFsxMF0qZSxuWzExXT10WzExXSplLG5bMTJdPXRbMTJdKmUsblsxM109dFsxM10qZSxuWzE0XT10WzE0XSplLG5bMTVdPXRbMTVdKmUsbn07d3QubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT0tdFswXSxlWzFdPS10WzFdLGVbMl09LXRbMl0sZVszXT0tdFszXSxlWzRdPS10WzRdLGVbNV09LXRbNV0sZVs2XT0tdFs2XSxlWzddPS10WzddLGVbOF09LXRbOF0sZVs5XT0tdFs5XSxlWzEwXT0tdFsxMF0sZVsxMV09LXRbMTFdLGVbMTJdPS10WzEyXSxlWzEzXT0tdFsxM10sZVsxNF09LXRbMTRdLGVbMTVdPS10WzE1XSxlfTt3dC50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXRbMV0sbz10WzJdLHI9dFszXSxpPXRbNl0scz10WzddLGY9dFsxMV07cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbNF0sZVsyXT10WzhdLGVbM109dFsxMl0sZVs0XT1uLGVbNV09dFs1XSxlWzZdPXRbOV0sZVs3XT10WzEzXSxlWzhdPW8sZVs5XT1pLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTRdLGVbMTJdPXIsZVsxM109cyxlWzE0XT1mLGVbMTVdPXRbMTVdLGV9O3d0LmFicz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGVbMF09TWF0aC5hYnModFswXSksZVsxXT1NYXRoLmFicyh0WzFdKSxlWzJdPU1hdGguYWJzKHRbMl0pLGVbM109TWF0aC5hYnModFszXSksZVs0XT1NYXRoLmFicyh0WzRdKSxlWzVdPU1hdGguYWJzKHRbNV0pLGVbNl09TWF0aC5hYnModFs2XSksZVs3XT1NYXRoLmFicyh0WzddKSxlWzhdPU1hdGguYWJzKHRbOF0pLGVbOV09TWF0aC5hYnModFs5XSksZVsxMF09TWF0aC5hYnModFsxMF0pLGVbMTFdPU1hdGguYWJzKHRbMTFdKSxlWzEyXT1NYXRoLmFicyh0WzEyXSksZVsxM109TWF0aC5hYnModFsxM10pLGVbMTRdPU1hdGguYWJzKHRbMTRdKSxlWzE1XT1NYXRoLmFicyh0WzE1XSksZX07d3QuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxtKHQpJiZtKGUpJiZ0WzEyXT09PWVbMTJdJiZ0WzEzXT09PWVbMTNdJiZ0WzE0XT09PWVbMTRdJiZ0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzRdPT09ZVs0XSYmdFs1XT09PWVbNV0mJnRbNl09PT1lWzZdJiZ0WzhdPT09ZVs4XSYmdFs5XT09PWVbOV0mJnRbMTBdPT09ZVsxMF0mJnRbM109PT1lWzNdJiZ0WzddPT09ZVs3XSYmdFsxMV09PT1lWzExXSYmdFsxNV09PT1lWzE1XX07d3QuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49bj8/MCx0PT09ZXx8bSh0KSYmbShlKSYmTWF0aC5hYnModFswXS1lWzBdKTw9biYmTWF0aC5hYnModFsxXS1lWzFdKTw9biYmTWF0aC5hYnModFsyXS1lWzJdKTw9biYmTWF0aC5hYnModFszXS1lWzNdKTw9biYmTWF0aC5hYnModFs0XS1lWzRdKTw9biYmTWF0aC5hYnModFs1XS1lWzVdKTw9biYmTWF0aC5hYnModFs2XS1lWzZdKTw9biYmTWF0aC5hYnModFs3XS1lWzddKTw9biYmTWF0aC5hYnModFs4XS1lWzhdKTw9biYmTWF0aC5hYnModFs5XS1lWzldKTw9biYmTWF0aC5hYnModFsxMF0tZVsxMF0pPD1uJiZNYXRoLmFicyh0WzExXS1lWzExXSk8PW4mJk1hdGguYWJzKHRbMTJdLWVbMTJdKTw9biYmTWF0aC5hYnModFsxM10tZVsxM10pPD1uJiZNYXRoLmFicyh0WzE0XS1lWzE0XSk8PW4mJk1hdGguYWJzKHRbMTVdLWVbMTVdKTw9bn07d3QuZ2V0VHJhbnNsYXRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9dFsxMl0sZS55PXRbMTNdLGUuej10WzE0XSxlfTt3dC5nZXRNYXRyaXgzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzRdLGVbNF09dFs1XSxlWzVdPXRbNl0sZVs2XT10WzhdLGVbN109dFs5XSxlWzhdPXRbMTBdLGV9O3RDPW5ldyBaLGVDPW5ldyBaLG5DPW5ldyBtZSxvQz1uZXcgbWUoMCwwLDAsMSk7d3QuaW52ZXJzZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dFswXSxvPXRbNF0scj10WzhdLGk9dFsxMl0scz10WzFdLGY9dFs1XSx1PXRbOV0sYz10WzEzXSxsPXRbMl0scD10WzZdLGQ9dFsxMF0saD10WzE0XSxfPXRbM10sZz10WzddLGI9dFsxMV0sdz10WzE1XSxPPWQqdyxFPWgqYixUPXAqdyx4PWgqZyxNPXAqYixOPWQqZyxGPWwqdyxJPWgqXyx2PWwqYixCPWQqXyxBPWwqZyxTPXAqXyxDPU8qZit4KnUrTSpjLShFKmYrVCp1K04qYyksTD1FKnMrRip1K0IqYy0oTypzK0kqdSt2KmMpLHo9VCpzK0kqZitBKmMtKHgqcytGKmYrUypjKSxqPU4qcyt2KmYrUyp1LShNKnMrQipmK0EqdSksaz1FKm8rVCpyK04qaS0oTypvK3gqcitNKmkpLHE9TypuK0kqcit2KmktKEUqbitGKnIrQippKSxXPXgqbitGKm8rUyppLShUKm4rSSpvK0EqaSksUj1NKm4rQipvK0Eqci0oTipuK3YqbytTKnIpO089cipjLEU9aSp1LFQ9bypjLHg9aSpmLE09byp1LE49cipmLEY9bipjLEk9aSpzLHY9bip1LEI9cipzLEE9bipmLFM9bypzO2xldCBudD1PKmcreCpiK00qdy0oRSpnK1QqYitOKncpLGF0PUUqXytGKmIrQip3LShPKl8rSSpiK3YqdyksbHQ9VCpfK0kqZytBKnctKHgqXytGKmcrUyp3KSxfdD1OKl8rdipnK1MqYi0oTSpfK0IqZytBKmIpLG90PVQqZCtOKmgrRSpwLShNKmgrTypwK3gqZCksUHQ9dipoK08qbCtJKmQtKEYqZCtCKmgrRSpsKSxndD1GKnArUypoK3gqbC0oQSpoK1QqbCtJKnApLFJ0PUEqZCtNKmwrQipwLSh2KnArUypkK04qbCksZHQ9bipDK28qTCtyKnoraSpqO2lmKE1hdGguYWJzKGR0KTxQLkVQU0lMT04yMSl7aWYoWi5lcXVhbHNFcHNpbG9uKHd0LmdldE1hdHJpeDModCx0QyksZUMsUC5FUFNJTE9ONykmJm1lLmVxdWFscyh3dC5nZXRSb3codCwzLG5DKSxvQykpcmV0dXJuIGVbMF09MCxlWzFdPTAsZVsyXT0wLGVbM109MCxlWzRdPTAsZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT0wLGVbOV09MCxlWzEwXT0wLGVbMTFdPTAsZVsxMl09LXRbMTJdLGVbMTNdPS10WzEzXSxlWzE0XT0tdFsxNF0sZVsxNV09MSxlO3Rocm93IG5ldyBBZSgibWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIGJlY2F1c2UgaXRzIGRldGVybWluYXRlIGlzIHplcm8uIil9cmV0dXJuIGR0PTEvZHQsZVswXT1DKmR0LGVbMV09TCpkdCxlWzJdPXoqZHQsZVszXT1qKmR0LGVbNF09aypkdCxlWzVdPXEqZHQsZVs2XT1XKmR0LGVbN109UipkdCxlWzhdPW50KmR0LGVbOV09YXQqZHQsZVsxMF09bHQqZHQsZVsxMV09X3QqZHQsZVsxMl09b3QqZHQsZVsxM109UHQqZHQsZVsxNF09Z3QqZHQsZVsxNV09UnQqZHQsZX07d3QuaW52ZXJzZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj10WzBdLG89dFsxXSxyPXRbMl0saT10WzRdLHM9dFs1XSxmPXRbNl0sdT10WzhdLGM9dFs5XSxsPXRbMTBdLHA9dFsxMl0sZD10WzEzXSxoPXRbMTRdLF89LW4qcC1vKmQtcipoLGc9LWkqcC1zKmQtZipoLGI9LXUqcC1jKmQtbCpoO3JldHVybiBlWzBdPW4sZVsxXT1pLGVbMl09dSxlWzNdPTAsZVs0XT1vLGVbNV09cyxlWzZdPWMsZVs3XT0wLGVbOF09cixlWzldPWYsZVsxMF09bCxlWzExXT0wLGVbMTJdPV8sZVsxM109ZyxlWzE0XT1iLGVbMTVdPTEsZX07ckM9bmV3IHd0O3d0LmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSx3dC5pbnZlcnNlKHd0LnRyYW5zcG9zZSh0LHJDKSxlKX07d3QuSURFTlRJVFk9T2JqZWN0LmZyZWV6ZShuZXcgd3QoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSkpO3d0LlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgd3QoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCkpO3d0LkNPTFVNTjBST1cwPTA7d3QuQ09MVU1OMFJPVzE9MTt3dC5DT0xVTU4wUk9XMj0yO3d0LkNPTFVNTjBST1czPTM7d3QuQ09MVU1OMVJPVzA9NDt3dC5DT0xVTU4xUk9XMT01O3d0LkNPTFVNTjFST1cyPTY7d3QuQ09MVU1OMVJPVzM9Nzt3dC5DT0xVTU4yUk9XMD04O3d0LkNPTFVNTjJST1cxPTk7d3QuQ09MVU1OMlJPVzI9MTA7d3QuQ09MVU1OMlJPVzM9MTE7d3QuQ09MVU1OM1JPVzA9MTI7d3QuQ09MVU1OM1JPVzE9MTM7d3QuQ09MVU1OM1JPVzI9MTQ7d3QuQ09MVU1OM1JPVzM9MTU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3QucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB3dC5wYWNrZWRMZW5ndGh9fX0pO3d0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gd3QuY2xvbmUodGhpcyx0KX07d3QucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gd3QuZXF1YWxzKHRoaXMsdCl9O3d0LmVxdWFsc0FycmF5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFswXT09PWVbbl0mJnRbMV09PT1lW24rMV0mJnRbMl09PT1lW24rMl0mJnRbM109PT1lW24rM10mJnRbNF09PT1lW24rNF0mJnRbNV09PT1lW24rNV0mJnRbNl09PT1lW24rNl0mJnRbN109PT1lW24rN10mJnRbOF09PT1lW24rOF0mJnRbOV09PT1lW24rOV0mJnRbMTBdPT09ZVtuKzEwXSYmdFsxMV09PT1lW24rMTFdJiZ0WzEyXT09PWVbbisxMl0mJnRbMTNdPT09ZVtuKzEzXSYmdFsxNF09PT1lW24rMTRdJiZ0WzE1XT09PWVbbisxNV19O3d0LnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHd0LmVxdWFsc0Vwc2lsb24odGhpcyx0LGUpfTt3dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpc1swXX0sICR7dGhpc1s0XX0sICR7dGhpc1s4XX0sICR7dGhpc1sxMl19KQooJHt0aGlzWzFdfSwgJHt0aGlzWzVdfSwgJHt0aGlzWzldfSwgJHt0aGlzWzEzXX0pCigke3RoaXNbMl19LCAke3RoaXNbNl19LCAke3RoaXNbMTBdfSwgJHt0aGlzWzE0XX0pCigke3RoaXNbM119LCAke3RoaXNbN119LCAke3RoaXNbMTFdfSwgJHt0aGlzWzE1XX0pYH07c3Q9d3R9KTtmdW5jdGlvbiBpQyh0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCkseS5kZWZpbmVkKCJpdGVtVG9GaW5kIixlKSx5LmRlZmluZWQoImNvbXBhcmF0b3IiLG4pO2xldCBvPTAscj10Lmxlbmd0aC0xLGkscztmb3IoO288PXI7KXtpZihpPX5+KChvK3IpLzIpLHM9bih0W2ldLGUpLHM8MCl7bz1pKzE7Y29udGludWV9aWYocz4wKXtyPWktMTtjb250aW51ZX1yZXR1cm4gaX1yZXR1cm5+KHIrMSl9dmFyIHpzLExtPSQoKCk9PntXdCgpO3pzPWlDfSk7ZnVuY3Rpb24gc0ModCxlLG4sbyxyKXt0aGlzLnhQb2xlV2FuZGVyPXQsdGhpcy55UG9sZVdhbmRlcj1lLHRoaXMueFBvbGVPZmZzZXQ9bix0aGlzLnlQb2xlT2Zmc2V0PW8sdGhpcy51dDFNaW51c1V0Yz1yfXZhciBhZixEbT0kKCgpPT57YWY9c0N9KTtmdW5jdGlvbiBjQyh0KXtpZih0PT09bnVsbHx8aXNOYU4odCkpdGhyb3cgbmV3IEQoInllYXIgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBudW1iZXIuIik7cmV0dXJuIHQlND09PTAmJnQlMTAwIT09MHx8dCU0MDA9PT0wfXZhciBmZixCbT0kKCgpPT57SHQoKTtmZj1jQ30pO2Z1bmN0aW9uIGFDKHQsZSxuLG8scixpLHMsZil7dD10Pz8xLGU9ZT8/MSxuPW4/PzEsbz1vPz8wLHI9cj8/MCxpPWk/PzAscz1zPz8wLGY9Zj8/ITEsZygpLGIoKSx0aGlzLnllYXI9dCx0aGlzLm1vbnRoPWUsdGhpcy5kYXk9bix0aGlzLmhvdXI9byx0aGlzLm1pbnV0ZT1yLHRoaXMuc2Vjb25kPWksdGhpcy5taWxsaXNlY29uZD1zLHRoaXMuaXNMZWFwU2Vjb25kPWY7ZnVuY3Rpb24gZygpe3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJZZWFyIix0LDEpLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJZZWFyIix0LDk5OTkpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJNb250aCIsZSwxKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiTW9udGgiLGUsMTIpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJEYXkiLG4sMSkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIkRheSIsbiwzMSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIkhvdXIiLG8sMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIkhvdXIiLG8sMjMpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJNaW51dGUiLHIsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIk1pbnV0ZSIsciw1OSkseS50eXBlT2YuYm9vbCgiSXNMZWFwU2Vjb25kIixmKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiU2Vjb25kIixpLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJTZWNvbmQiLGksZj82MDo1OSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIk1pbGxpc2Vjb25kIixzLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbigiTWlsbGlzZWNvbmQiLHMsMWUzKX1mdW5jdGlvbiBiKCl7bGV0IHc9ZT09PTImJmZmKHQpP1UxW2UtMV0rMTpVMVtlLTFdO2lmKG4+dyl0aHJvdyBuZXcgRCgiTW9udGggYW5kIERheSByZXByZXNlbnRzIGludmFsaWQgZGF0ZSIpfX12YXIgVTEsJGwsazE9JCgoKT0+e1d0KCk7SHQoKTtCbSgpO1UxPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07JGw9YUN9KTtmdW5jdGlvbiBmQyh0LGUpe3RoaXMuanVsaWFuRGF0ZT10LHRoaXMub2Zmc2V0PWV9dmFyIFhlLFVtPSQoKCk9PntYZT1mQ30pO3ZhciB1Qyx5bixabD0kKCgpPT57dUM9e1NFQ09ORFNfUEVSX01JTExJU0VDT05EOi4wMDEsU0VDT05EU19QRVJfTUlOVVRFOjYwLE1JTlVURVNfUEVSX0hPVVI6NjAsSE9VUlNfUEVSX0RBWToyNCxTRUNPTkRTX1BFUl9IT1VSOjM2MDAsTUlOVVRFU19QRVJfREFZOjE0NDAsU0VDT05EU19QRVJfREFZOjg2NDAwLERBWVNfUEVSX0pVTElBTl9DRU5UVVJZOjM2NTI1LFBJQ09TRUNPTkQ6MWUtOSxNT0RJRklFRF9KVUxJQU5fREFURV9ESUZGRVJFTkNFOjI0MDAwMDA1ZS0xfSx5bj1PYmplY3QuZnJlZXplKHVDKX0pO3ZhciBsQyxPZSxRbD0kKCgpPT57bEM9e1VUQzowLFRBSToxfSxPZT1PYmplY3QuZnJlZXplKGxDKX0pO2Z1bmN0aW9uIGttKHQsZSl7cmV0dXJuIHp0LmNvbXBhcmUodC5qdWxpYW5EYXRlLGUuanVsaWFuRGF0ZSl9ZnVuY3Rpb24gbnAodCl7V2MuanVsaWFuRGF0ZT10O2xldCBlPXp0LmxlYXBTZWNvbmRzLG49enMoZSxXYyxrbSk7bjwwJiYobj1+biksbj49ZS5sZW5ndGgmJihuPWUubGVuZ3RoLTEpO2xldCBvPWVbbl0ub2Zmc2V0O24+MCYmenQuc2Vjb25kc0RpZmZlcmVuY2UoZVtuXS5qdWxpYW5EYXRlLHQpPm8mJihuLS0sbz1lW25dLm9mZnNldCksenQuYWRkU2Vjb25kcyh0LG8sdCl9ZnVuY3Rpb24gRzEodCxlKXtXYy5qdWxpYW5EYXRlPXQ7bGV0IG49enQubGVhcFNlY29uZHMsbz16cyhuLFdjLGttKTtpZihvPDAmJihvPX5vKSxvPT09MClyZXR1cm4genQuYWRkU2Vjb25kcyh0LC1uWzBdLm9mZnNldCxlKTtpZihvPj1uLmxlbmd0aClyZXR1cm4genQuYWRkU2Vjb25kcyh0LC1uW28tMV0ub2Zmc2V0LGUpO2xldCByPXp0LnNlY29uZHNEaWZmZXJlbmNlKG5bb10uanVsaWFuRGF0ZSx0KTtpZihyPT09MClyZXR1cm4genQuYWRkU2Vjb25kcyh0LC1uW29dLm9mZnNldCxlKTtpZighKHI8PTEpKXJldHVybiB6dC5hZGRTZWNvbmRzKHQsLW5bLS1vXS5vZmZzZXQsZSl9ZnVuY3Rpb24gb3ModCxlLG4pe2xldCBvPWUveW4uU0VDT05EU19QRVJfREFZfDA7cmV0dXJuIHQrPW8sZS09eW4uU0VDT05EU19QRVJfREFZKm8sZTwwJiYodC0tLGUrPXluLlNFQ09ORFNfUEVSX0RBWSksbi5kYXlOdW1iZXI9dCxuLnNlY29uZHNPZkRheT1lLG59ZnVuY3Rpb24gR20odCxlLG4sbyxyLGkscyl7bGV0IGY9KGUtMTQpLzEyfDAsdT10KzQ4MDArZixjPSgxNDYxKnUvNHwwKSsoMzY3KihlLTItMTIqZikvMTJ8MCktKDMqKCh1KzEwMCkvMTAwfDApLzR8MCkrbi0zMjA3NTtvPW8tMTIsbzwwJiYobys9MjQpO2xldCBsPWkrKG8qeW4uU0VDT05EU19QRVJfSE9VUityKnluLlNFQ09ORFNfUEVSX01JTlVURStzKnluLlNFQ09ORFNfUEVSX01JTExJU0VDT05EKTtyZXR1cm4gbD49NDMyMDAmJihjLT0xKSxbYyxsXX1mdW5jdGlvbiB6dCh0LGUsbil7dGhpcy5kYXlOdW1iZXI9dm9pZCAwLHRoaXMuc2Vjb25kc09mRGF5PXZvaWQgMCx0PXQ/PzAsZT1lPz8wLG49bj8/T2UuVVRDO2xldCBvPXR8MDtlPWUrKHQtbykqeW4uU0VDT05EU19QRVJfREFZLG9zKG8sZSx0aGlzKSxuPT09T2UuVVRDJiZucCh0aGlzKX12YXIgVjEsSmwsdHAsV2MscEMsZEMsbUMsaEMsX0MsVm0seUMsZ0MsQUMsRHIsZXAsVm4sb3A9JCgoKT0+e0xtKCk7ZnQoKTtIdCgpO2sxKCk7Qm0oKTtVbSgpO1psKCk7UWwoKTtWMT1uZXcgJGwsSmw9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSx0cD0yOTtXYz1uZXcgWGU7cEM9L14oXGR7NH0pJC8sZEM9L14oXGR7NH0pLShcZHsyfSkkLyxtQz0vXihcZHs0fSktPyhcZHszfSkkLyxoQz0vXihcZHs0fSktP1coXGR7Mn0pLT8oXGR7MX0pPyQvLF9DPS9eKFxkezR9KS0/KFxkezJ9KS0/KFxkezJ9KSQvLFZtPS8oW1orXC1dKT8oXGR7Mn0pPzo/KFxkezJ9KT8kLyx5Qz0vXihcZHsyfSkoXC5cZCspPy8uc291cmNlK1ZtLnNvdXJjZSxnQz0vXihcZHsyfSk6PyhcZHsyfSkoXC5cZCspPy8uc291cmNlK1ZtLnNvdXJjZSxBQz0vXihcZHsyfSk6PyhcZHsyfSk6PyhcZHsyfSkoXC5cZCspPy8uc291cmNlK1ZtLnNvdXJjZSxEcj0iSW52YWxpZCBJU08gODYwMSBkYXRlLiI7enQuZnJvbUdyZWdvcmlhbkRhdGU9ZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiAkbCkpdGhyb3cgbmV3IEQoImRhdGUgbXVzdCBiZSBhIHZhbGlkIEdyZWdvcmlhbkRhdGUuIik7bGV0IG49R20odC55ZWFyLHQubW9udGgsdC5kYXksdC5ob3VyLHQubWludXRlLHQuc2Vjb25kLHQubWlsbGlzZWNvbmQpO3JldHVybiBtKGUpPyhvcyhuWzBdLG5bMV0sZSksbnAoZSksZSk6bmV3IHp0KG5bMF0sblsxXSxPZS5VVEMpfTt6dC5mcm9tRGF0ZT1mdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIERhdGUpfHxpc05hTih0LmdldFRpbWUoKSkpdGhyb3cgbmV3IEQoImRhdGUgbXVzdCBiZSBhIHZhbGlkIEphdmFTY3JpcHQgRGF0ZS4iKTtsZXQgbj1HbSh0LmdldFVUQ0Z1bGxZZWFyKCksdC5nZXRVVENNb250aCgpKzEsdC5nZXRVVENEYXRlKCksdC5nZXRVVENIb3VycygpLHQuZ2V0VVRDTWludXRlcygpLHQuZ2V0VVRDU2Vjb25kcygpLHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO3JldHVybiBtKGUpPyhvcyhuWzBdLG5bMV0sZSksbnAoZSksZSk6bmV3IHp0KG5bMF0sblsxXSxPZS5VVEMpfTt6dC5mcm9tSXNvODYwMT1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgRChEcik7dD10LnJlcGxhY2UoIiwiLCIuIik7bGV0IG49dC5zcGxpdCgiVCIpLG8scj0xLGk9MSxzPTAsZj0wLHU9MCxjPTAsbD1uWzBdLHA9blsxXSxkLGg7aWYoIW0obCkpdGhyb3cgbmV3IEQoRHIpO2xldCBfO2lmKG49bC5tYXRjaChfQyksbiE9PW51bGwpe2lmKF89bC5zcGxpdCgiLSIpLmxlbmd0aC0xLF8+MCYmXyE9PTIpdGhyb3cgbmV3IEQoRHIpO289K25bMV0scj0rblsyXSxpPStuWzNdfWVsc2UgaWYobj1sLm1hdGNoKGRDKSxuIT09bnVsbClvPStuWzFdLHI9K25bMl07ZWxzZSBpZihuPWwubWF0Y2gocEMpLG4hPT1udWxsKW89K25bMV07ZWxzZXtsZXQgTztpZihuPWwubWF0Y2gobUMpLG4hPT1udWxsKXtpZihvPStuWzFdLE89K25bMl0saD1mZihvKSxPPDF8fGgmJk8+MzY2fHwhaCYmTz4zNjUpdGhyb3cgbmV3IEQoRHIpfWVsc2UgaWYobj1sLm1hdGNoKGhDKSxuIT09bnVsbCl7bz0rblsxXTtsZXQgRT0rblsyXSxUPStuWzNdfHwwO2lmKF89bC5zcGxpdCgiLSIpLmxlbmd0aC0xLF8+MCYmKCFtKG5bM10pJiZfIT09MXx8bShuWzNdKSYmXyE9PTIpKXRocm93IG5ldyBEKERyKTtsZXQgeD1uZXcgRGF0ZShEYXRlLlVUQyhvLDAsNCkpO089RSo3K1QteC5nZXRVVENEYXkoKS0zfWVsc2UgdGhyb3cgbmV3IEQoRHIpO2Q9bmV3IERhdGUoRGF0ZS5VVEMobywwLDEpKSxkLnNldFVUQ0RhdGUoTykscj1kLmdldFVUQ01vbnRoKCkrMSxpPWQuZ2V0VVRDRGF0ZSgpfWlmKGg9ZmYobykscjwxfHxyPjEyfHxpPDF8fChyIT09Mnx8IWgpJiZpPkpsW3ItMV18fGgmJnI9PT0yJiZpPnRwKXRocm93IG5ldyBEKERyKTtsZXQgZztpZihtKHApKXtpZihuPXAubWF0Y2goQUMpLG4hPT1udWxsKXtpZihfPXAuc3BsaXQoIjoiKS5sZW5ndGgtMSxfPjAmJl8hPT0yJiZfIT09Myl0aHJvdyBuZXcgRChEcik7cz0rblsxXSxmPStuWzJdLHU9K25bM10sYz0rKG5bNF18fDApKjFlMyxnPTV9ZWxzZSBpZihuPXAubWF0Y2goZ0MpLG4hPT1udWxsKXtpZihfPXAuc3BsaXQoIjoiKS5sZW5ndGgtMSxfPjIpdGhyb3cgbmV3IEQoRHIpO3M9K25bMV0sZj0rblsyXSx1PSsoblszXXx8MCkqNjAsZz00fWVsc2UgaWYobj1wLm1hdGNoKHlDKSxuIT09bnVsbClzPStuWzFdLGY9KyhuWzJdfHwwKSo2MCxnPTM7ZWxzZSB0aHJvdyBuZXcgRChEcik7aWYoZj49NjB8fHU+PTYxfHxzPjI0fHxzPT09MjQmJihmPjB8fHU+MHx8Yz4wKSl0aHJvdyBuZXcgRChEcik7bGV0IE89bltnXSxFPStuW2crMV0sVD0rKG5bZysyXXx8MCk7c3dpdGNoKE8pe2Nhc2UiKyI6cz1zLUUsZj1mLVQ7YnJlYWs7Y2FzZSItIjpzPXMrRSxmPWYrVDticmVhaztjYXNlIloiOmJyZWFrO2RlZmF1bHQ6Zj1mK25ldyBEYXRlKERhdGUuVVRDKG8sci0xLGkscyxmKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTticmVha319bGV0IGI9dT09PTYwO2ZvcihiJiZ1LS07Zj49NjA7KWYtPTYwLHMrKztmb3IoO3M+PTI0OylzLT0yNCxpKys7Zm9yKGQ9aCYmcj09PTI/dHA6Smxbci0xXTtpPmQ7KWktPWQscisrLHI+MTImJihyLT0xMixvKyspLGQ9aCYmcj09PTI/dHA6Smxbci0xXTtmb3IoO2Y8MDspZis9NjAscy0tO2Zvcig7czwwOylzKz0yNCxpLS07Zm9yKDtpPDE7KXItLSxyPDEmJihyKz0xMixvLS0pLGQ9aCYmcj09PTI/dHA6Smxbci0xXSxpKz1kO2xldCB3PUdtKG8scixpLHMsZix1LGMpO3JldHVybiBtKGUpPyhvcyh3WzBdLHdbMV0sZSksbnAoZSkpOmU9bmV3IHp0KHdbMF0sd1sxXSxPZS5VVEMpLGImJnp0LmFkZFNlY29uZHMoZSwxLGUpLGV9O3p0Lm5vdz1mdW5jdGlvbih0KXtyZXR1cm4genQuZnJvbURhdGUobmV3IERhdGUsdCl9O2VwPW5ldyB6dCgwLDAsT2UuVEFJKTt6dC50b0dyZWdvcmlhbkRhdGU9ZnVuY3Rpb24odCxlKXtpZighbSh0KSl0aHJvdyBuZXcgRCgianVsaWFuRGF0ZSBpcyByZXF1aXJlZC4iKTtsZXQgbj0hMSxvPUcxKHQsZXApO20obyl8fCh6dC5hZGRTZWNvbmRzKHQsLTEsZXApLG89RzEoZXAsZXApLG49ITApO2xldCByPW8uZGF5TnVtYmVyLGk9by5zZWNvbmRzT2ZEYXk7aT49NDMyMDAmJihyKz0xKTtsZXQgcz1yKzY4NTY5fDAsZj00KnMvMTQ2MDk3fDA7cz1zLSgoMTQ2MDk3KmYrMykvNHwwKXwwO2xldCB1PTRlMyoocysxKS8xNDYxMDAxfDA7cz1zLSgxNDYxKnUvNHwwKSszMXwwO2xldCBjPTgwKnMvMjQ0N3wwLGw9cy0oMjQ0NypjLzgwfDApfDA7cz1jLzExfDA7bGV0IHA9YysyLTEyKnN8MCxkPTEwMCooZi00OSkrdStzfDAsaD1pL3luLlNFQ09ORFNfUEVSX0hPVVJ8MCxfPWktaCp5bi5TRUNPTkRTX1BFUl9IT1VSLGc9Xy95bi5TRUNPTkRTX1BFUl9NSU5VVEV8MDtfPV8tZyp5bi5TRUNPTkRTX1BFUl9NSU5VVEU7bGV0IGI9X3wwLHc9KF8tYikveW4uU0VDT05EU19QRVJfTUlMTElTRUNPTkQ7cmV0dXJuIGgrPTEyLGg+MjMmJihoLT0yNCksbiYmKGIrPTEpLG0oZSk/KGUueWVhcj1kLGUubW9udGg9cCxlLmRheT1sLGUuaG91cj1oLGUubWludXRlPWcsZS5zZWNvbmQ9YixlLm1pbGxpc2Vjb25kPXcsZS5pc0xlYXBTZWNvbmQ9bixlKTpuZXcgJGwoZCxwLGwsaCxnLGIsdyxuKX07enQudG9EYXRlPWZ1bmN0aW9uKHQpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJqdWxpYW5EYXRlIGlzIHJlcXVpcmVkLiIpO2xldCBlPXp0LnRvR3JlZ29yaWFuRGF0ZSh0LFYxKSxuPWUuc2Vjb25kO3JldHVybiBlLmlzTGVhcFNlY29uZCYmKG4tPTEpLG5ldyBEYXRlKERhdGUuVVRDKGUueWVhcixlLm1vbnRoLTEsZS5kYXksZS5ob3VyLGUubWludXRlLG4sZS5taWxsaXNlY29uZCkpfTt6dC50b0lzbzg2MDE9ZnVuY3Rpb24odCxlKXtpZighbSh0KSl0aHJvdyBuZXcgRCgianVsaWFuRGF0ZSBpcyByZXF1aXJlZC4iKTtsZXQgbj16dC50b0dyZWdvcmlhbkRhdGUodCxWMSksbz1uLnllYXIscj1uLm1vbnRoLGk9bi5kYXkscz1uLmhvdXIsZj1uLm1pbnV0ZSx1PW4uc2Vjb25kLGM9bi5taWxsaXNlY29uZDtvPT09MWU0JiZyPT09MSYmaT09PTEmJnM9PT0wJiZmPT09MCYmdT09PTAmJmM9PT0wJiYobz05OTk5LHI9MTIsaT0zMSxzPTI0KTtsZXQgbDtpZighbShlKSYmYyE9PTApe2xldCBwPWMqLjAxO3JldHVybiBsPXA8MWUtNj9wLnRvRml4ZWQoMjApLnJlcGxhY2UoIi4iLCIiKS5yZXBsYWNlKC8wKyQvLCIiKTpwLnRvU3RyaW5nKCkucmVwbGFjZSgiLiIsIiIpLGAke28udG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHt1LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS4ke2x9WmB9cmV0dXJuIW0oZSl8fGU9PT0wP2Ake28udG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHt1LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVpgOihsPShjKi4wMSkudG9GaXhlZChlKS5yZXBsYWNlKCIuIiwiIikuc2xpY2UoMCxlKSxgJHtvLnRvU3RyaW5nKCkucGFkU3RhcnQoNCwiMCIpfS0ke3IudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LSR7aS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1UJHtzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke2YudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7dS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0uJHtsfVpgKX07enQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihtKHQpKXJldHVybiBtKGUpPyhlLmRheU51bWJlcj10LmRheU51bWJlcixlLnNlY29uZHNPZkRheT10LnNlY29uZHNPZkRheSxlKTpuZXcgenQodC5kYXlOdW1iZXIsdC5zZWNvbmRzT2ZEYXksT2UuVEFJKX07enQuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJsZWZ0IGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJyaWdodCBpcyByZXF1aXJlZC4iKTtsZXQgbj10LmRheU51bWJlci1lLmRheU51bWJlcjtyZXR1cm4gbiE9PTA/bjp0LnNlY29uZHNPZkRheS1lLnNlY29uZHNPZkRheX07enQuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxtKHQpJiZtKGUpJiZ0LmRheU51bWJlcj09PWUuZGF5TnVtYmVyJiZ0LnNlY29uZHNPZkRheT09PWUuc2Vjb25kc09mRGF5fTt6dC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj1uPz8wLHQ9PT1lfHxtKHQpJiZtKGUpJiZNYXRoLmFicyh6dC5zZWNvbmRzRGlmZmVyZW5jZSh0LGUpKTw9bn07enQudG90YWxEYXlzPWZ1bmN0aW9uKHQpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJqdWxpYW5EYXRlIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0LmRheU51bWJlcit0LnNlY29uZHNPZkRheS95bi5TRUNPTkRTX1BFUl9EQVl9O3p0LnNlY29uZHNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImxlZnQgaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoInJpZ2h0IGlzIHJlcXVpcmVkLiIpO3JldHVybih0LmRheU51bWJlci1lLmRheU51bWJlcikqeW4uU0VDT05EU19QRVJfREFZKyh0LnNlY29uZHNPZkRheS1lLnNlY29uZHNPZkRheSl9O3p0LmRheXNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImxlZnQgaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoInJpZ2h0IGlzIHJlcXVpcmVkLiIpO2xldCBuPXQuZGF5TnVtYmVyLWUuZGF5TnVtYmVyLG89KHQuc2Vjb25kc09mRGF5LWUuc2Vjb25kc09mRGF5KS95bi5TRUNPTkRTX1BFUl9EQVk7cmV0dXJuIG4rb307enQuY29tcHV0ZVRhaU1pbnVzVXRjPWZ1bmN0aW9uKHQpe1djLmp1bGlhbkRhdGU9dDtsZXQgZT16dC5sZWFwU2Vjb25kcyxuPXpzKGUsV2Msa20pO3JldHVybiBuPDAmJihuPX5uLC0tbixuPDAmJihuPTApKSxlW25dLm9mZnNldH07enQuYWRkU2Vjb25kcz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoInNlY29uZHMgaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtyZXR1cm4gb3ModC5kYXlOdW1iZXIsdC5zZWNvbmRzT2ZEYXkrZSxuKX07enQuYWRkTWludXRlcz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoIm1pbnV0ZXMgaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtsZXQgbz10LnNlY29uZHNPZkRheStlKnluLlNFQ09ORFNfUEVSX01JTlVURTtyZXR1cm4gb3ModC5kYXlOdW1iZXIsbyxuKX07enQuYWRkSG91cnM9ZnVuY3Rpb24odCxlLG4pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJqdWxpYW5EYXRlIGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJob3VycyBpcyByZXF1aXJlZC4iKTtpZighbShuKSl0aHJvdyBuZXcgRCgicmVzdWx0IGlzIHJlcXVpcmVkLiIpO2xldCBvPXQuc2Vjb25kc09mRGF5K2UqeW4uU0VDT05EU19QRVJfSE9VUjtyZXR1cm4gb3ModC5kYXlOdW1iZXIsbyxuKX07enQuYWRkRGF5cz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoImRheXMgaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtsZXQgbz10LmRheU51bWJlcitlO3JldHVybiBvcyhvLHQuc2Vjb25kc09mRGF5LG4pfTt6dC5sZXNzVGhhbj1mdW5jdGlvbih0LGUpe3JldHVybiB6dC5jb21wYXJlKHQsZSk8MH07enQubGVzc1RoYW5PckVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB6dC5jb21wYXJlKHQsZSk8PTB9O3p0LmdyZWF0ZXJUaGFuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHp0LmNvbXBhcmUodCxlKT4wfTt6dC5ncmVhdGVyVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHp0LmNvbXBhcmUodCxlKT49MH07enQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB6dC5jbG9uZSh0aGlzLHQpfTt6dC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB6dC5lcXVhbHModGhpcyx0KX07enQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlKXtyZXR1cm4genQuZXF1YWxzRXBzaWxvbih0aGlzLHQsZSl9O3p0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB6dC50b0lzbzg2MDEodGhpcyl9O3p0LmxlYXBTZWNvbmRzPVtuZXcgWGUobmV3IHp0KDI0NDEzMTcsNDMyMTAsT2UuVEFJKSwxMCksbmV3IFhlKG5ldyB6dCgyNDQxNDk5LDQzMjExLE9lLlRBSSksMTEpLG5ldyBYZShuZXcgenQoMjQ0MTY4Myw0MzIxMixPZS5UQUkpLDEyKSxuZXcgWGUobmV3IHp0KDI0NDIwNDgsNDMyMTMsT2UuVEFJKSwxMyksbmV3IFhlKG5ldyB6dCgyNDQyNDEzLDQzMjE0LE9lLlRBSSksMTQpLG5ldyBYZShuZXcgenQoMjQ0Mjc3OCw0MzIxNSxPZS5UQUkpLDE1KSxuZXcgWGUobmV3IHp0KDI0NDMxNDQsNDMyMTYsT2UuVEFJKSwxNiksbmV3IFhlKG5ldyB6dCgyNDQzNTA5LDQzMjE3LE9lLlRBSSksMTcpLG5ldyBYZShuZXcgenQoMjQ0Mzg3NCw0MzIxOCxPZS5UQUkpLDE4KSxuZXcgWGUobmV3IHp0KDI0NDQyMzksNDMyMTksT2UuVEFJKSwxOSksbmV3IFhlKG5ldyB6dCgyNDQ0Nzg2LDQzMjIwLE9lLlRBSSksMjApLG5ldyBYZShuZXcgenQoMjQ0NTE1MSw0MzIyMSxPZS5UQUkpLDIxKSxuZXcgWGUobmV3IHp0KDI0NDU1MTYsNDMyMjIsT2UuVEFJKSwyMiksbmV3IFhlKG5ldyB6dCgyNDQ2MjQ3LDQzMjIzLE9lLlRBSSksMjMpLG5ldyBYZShuZXcgenQoMjQ0NzE2MSw0MzIyNCxPZS5UQUkpLDI0KSxuZXcgWGUobmV3IHp0KDI0NDc4OTIsNDMyMjUsT2UuVEFJKSwyNSksbmV3IFhlKG5ldyB6dCgyNDQ4MjU3LDQzMjI2LE9lLlRBSSksMjYpLG5ldyBYZShuZXcgenQoMjQ0ODgwNCw0MzIyNyxPZS5UQUkpLDI3KSxuZXcgWGUobmV3IHp0KDI0NDkxNjksNDMyMjgsT2UuVEFJKSwyOCksbmV3IFhlKG5ldyB6dCgyNDQ5NTM0LDQzMjI5LE9lLlRBSSksMjkpLG5ldyBYZShuZXcgenQoMjQ1MDA4Myw0MzIzMCxPZS5UQUkpLDMwKSxuZXcgWGUobmV3IHp0KDI0NTA2MzAsNDMyMzEsT2UuVEFJKSwzMSksbmV3IFhlKG5ldyB6dCgyNDUxMTc5LDQzMjMyLE9lLlRBSSksMzIpLG5ldyBYZShuZXcgenQoMjQ1MzczNiw0MzIzMyxPZS5UQUkpLDMzKSxuZXcgWGUobmV3IHp0KDI0NTQ4MzIsNDMyMzQsT2UuVEFJKSwzNCksbmV3IFhlKG5ldyB6dCgyNDU2MTA5LDQzMjM1LE9lLlRBSSksMzUpLG5ldyBYZShuZXcgenQoMjQ1NzIwNCw0MzIzNixPZS5UQUkpLDM2KSxuZXcgWGUobmV3IHp0KDI0NTc3NTQsNDMyMzcsT2UuVEFJKSwzNyldO1ZuPXp0fSk7dmFyIHoxPVluKChYYyxZYyk9PnsvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqLyhmdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgWGM9PSJvYmplY3QiJiZYYyYmIVhjLm5vZGVUeXBlJiZYYyxuPXR5cGVvZiBZYz09Im9iamVjdCImJlljJiYhWWMubm9kZVR5cGUmJlljLG89dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbDsoby5nbG9iYWw9PT1vfHxvLndpbmRvdz09PW98fG8uc2VsZj09PW8pJiYodD1vKTt2YXIgcixpPTIxNDc0ODM2NDcscz0zNixmPTEsdT0yNixjPTM4LGw9NzAwLHA9NzIsZD0xMjgsaD0iLSIsXz0vXnhuLS0vLGc9L1teXHgyMC1ceDdFXS8sYj0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csdz17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sTz1zLWYsRT1NYXRoLmZsb29yLFQ9U3RyaW5nLmZyb21DaGFyQ29kZSx4O2Z1bmN0aW9uIE0oayl7dGhyb3cgbmV3IFJhbmdlRXJyb3Iod1trXSl9ZnVuY3Rpb24gTihrLHEpe2Zvcih2YXIgVz1rLmxlbmd0aCxSPVtdO1ctLTspUltXXT1xKGtbV10pO3JldHVybiBSfWZ1bmN0aW9uIEYoayxxKXt2YXIgVz1rLnNwbGl0KCJAIiksUj0iIjtXLmxlbmd0aD4xJiYoUj1XWzBdKyJAIixrPVdbMV0pLGs9ay5yZXBsYWNlKGIsIi4iKTt2YXIgbnQ9ay5zcGxpdCgiLiIpLGF0PU4obnQscSkuam9pbigiLiIpO3JldHVybiBSK2F0fWZ1bmN0aW9uIEkoayl7Zm9yKHZhciBxPVtdLFc9MCxSPWsubGVuZ3RoLG50LGF0O1c8UjspbnQ9ay5jaGFyQ29kZUF0KFcrKyksbnQ+PTU1Mjk2JiZudDw9NTYzMTkmJlc8Uj8oYXQ9ay5jaGFyQ29kZUF0KFcrKyksKGF0JjY0NTEyKT09NTYzMjA/cS5wdXNoKCgobnQmMTAyMyk8PDEwKSsoYXQmMTAyMykrNjU1MzYpOihxLnB1c2gobnQpLFctLSkpOnEucHVzaChudCk7cmV0dXJuIHF9ZnVuY3Rpb24gdihrKXtyZXR1cm4gTihrLGZ1bmN0aW9uKHEpe3ZhciBXPSIiO3JldHVybiBxPjY1NTM1JiYocS09NjU1MzYsVys9VChxPj4+MTAmMTAyM3w1NTI5NikscT01NjMyMHxxJjEwMjMpLFcrPVQocSksV30pLmpvaW4oIiIpfWZ1bmN0aW9uIEIoayl7cmV0dXJuIGstNDg8MTA/ay0yMjprLTY1PDI2P2stNjU6ay05NzwyNj9rLTk3OnN9ZnVuY3Rpb24gQShrLHEpe3JldHVybiBrKzIyKzc1KihrPDI2KS0oKHEhPTApPDw1KX1mdW5jdGlvbiBTKGsscSxXKXt2YXIgUj0wO2ZvcihrPVc/RShrL2wpOms+PjEsays9RShrL3EpO2s+Typ1Pj4xO1IrPXMpaz1FKGsvTyk7cmV0dXJuIEUoUisoTysxKSprLyhrK2MpKX1mdW5jdGlvbiBDKGspe3ZhciBxPVtdLFc9ay5sZW5ndGgsUixudD0wLGF0PWQsbHQ9cCxfdCxvdCxQdCxndCxSdCxkdCxydCx4dCxHdDtmb3IoX3Q9ay5sYXN0SW5kZXhPZihoKSxfdDwwJiYoX3Q9MCksb3Q9MDtvdDxfdDsrK290KWsuY2hhckNvZGVBdChvdCk+PTEyOCYmTSgibm90LWJhc2ljIikscS5wdXNoKGsuY2hhckNvZGVBdChvdCkpO2ZvcihQdD1fdD4wP190KzE6MDtQdDxXOyl7Zm9yKGd0PW50LFJ0PTEsZHQ9cztQdD49VyYmTSgiaW52YWxpZC1pbnB1dCIpLHJ0PUIoay5jaGFyQ29kZUF0KFB0KyspKSwocnQ+PXN8fHJ0PkUoKGktbnQpL1J0KSkmJk0oIm92ZXJmbG93IiksbnQrPXJ0KlJ0LHh0PWR0PD1sdD9mOmR0Pj1sdCt1P3U6ZHQtbHQsIShydDx4dCk7ZHQrPXMpR3Q9cy14dCxSdD5FKGkvR3QpJiZNKCJvdmVyZmxvdyIpLFJ0Kj1HdDtSPXEubGVuZ3RoKzEsbHQ9UyhudC1ndCxSLGd0PT0wKSxFKG50L1IpPmktYXQmJk0oIm92ZXJmbG93IiksYXQrPUUobnQvUiksbnQlPVIscS5zcGxpY2UobnQrKywwLGF0KX1yZXR1cm4gdihxKX1mdW5jdGlvbiBMKGspe3ZhciBxLFcsUixudCxhdCxsdCxfdCxvdCxQdCxndCxSdCxkdD1bXSxydCx4dCxHdCxwZTtmb3Ioaz1JKGspLHJ0PWsubGVuZ3RoLHE9ZCxXPTAsYXQ9cCxsdD0wO2x0PHJ0OysrbHQpUnQ9a1tsdF0sUnQ8MTI4JiZkdC5wdXNoKFQoUnQpKTtmb3IoUj1udD1kdC5sZW5ndGgsbnQmJmR0LnB1c2goaCk7UjxydDspe2ZvcihfdD1pLGx0PTA7bHQ8cnQ7KytsdClSdD1rW2x0XSxSdD49cSYmUnQ8X3QmJihfdD1SdCk7Zm9yKHh0PVIrMSxfdC1xPkUoKGktVykveHQpJiZNKCJvdmVyZmxvdyIpLFcrPShfdC1xKSp4dCxxPV90LGx0PTA7bHQ8cnQ7KytsdClpZihSdD1rW2x0XSxSdDxxJiYrK1c+aSYmTSgib3ZlcmZsb3ciKSxSdD09cSl7Zm9yKG90PVcsUHQ9cztndD1QdDw9YXQ/ZjpQdD49YXQrdT91OlB0LWF0LCEob3Q8Z3QpO1B0Kz1zKXBlPW90LWd0LEd0PXMtZ3QsZHQucHVzaChUKEEoZ3QrcGUlR3QsMCkpKSxvdD1FKHBlL0d0KTtkdC5wdXNoKFQoQShvdCwwKSkpLGF0PVMoVyx4dCxSPT1udCksVz0wLCsrUn0rK1csKytxfXJldHVybiBkdC5qb2luKCIiKX1mdW5jdGlvbiB6KGspe3JldHVybiBGKGssZnVuY3Rpb24ocSl7cmV0dXJuIF8udGVzdChxKT9DKHEuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6cX0pfWZ1bmN0aW9uIGooayl7cmV0dXJuIEYoayxmdW5jdGlvbihxKXtyZXR1cm4gZy50ZXN0KHEpPyJ4bi0tIitMKHEpOnF9KX1pZihyPXt2ZXJzaW9uOiIxLjMuMiIsdWNzMjp7ZGVjb2RlOkksZW5jb2RlOnZ9LGRlY29kZTpDLGVuY29kZTpMLHRvQVNDSUk6aix0b1VuaWNvZGU6en0sdHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kKWRlZmluZSgicHVueWNvZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTtlbHNlIGlmKGUmJm4paWYoWWMuZXhwb3J0cz09ZSluLmV4cG9ydHM9cjtlbHNlIGZvcih4IGluIHIpci5oYXNPd25Qcm9wZXJ0eSh4KSYmKGVbeF09clt4XSk7ZWxzZSB0LnB1bnljb2RlPXJ9KShYYyl9KTt2YXIgSDE9WW4oKGoxLHJwKT0+ey8qIQogKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzCiAqIElQdjYgU3VwcG9ydAogKgogKiBWZXJzaW9uOiAxLjE5LjExCiAqCiAqIEF1dGhvcjogUm9kbmV5IFJlaG0KICogV2ViOiBodHRwOi8vbWVkaWFsaXplLmdpdGh1Yi5pby9VUkkuanMvCiAqCiAqIExpY2Vuc2VkIHVuZGVyCiAqICAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZQogKgogKi8oZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dHlwZW9mIHJwPT0ib2JqZWN0IiYmcnAuZXhwb3J0cz9ycC5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKTp0LklQdjY9ZSh0KX0pKGoxLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT10JiZ0LklQdjY7ZnVuY3Rpb24gbihyKXt2YXIgaT1yLnRvTG93ZXJDYXNlKCkscz1pLnNwbGl0KCI6IiksZj1zLmxlbmd0aCx1PTg7c1swXT09PSIiJiZzWzFdPT09IiImJnNbMl09PT0iIj8ocy5zaGlmdCgpLHMuc2hpZnQoKSk6c1swXT09PSIiJiZzWzFdPT09IiI/cy5zaGlmdCgpOnNbZi0xXT09PSIiJiZzW2YtMl09PT0iIiYmcy5wb3AoKSxmPXMubGVuZ3RoLHNbZi0xXS5pbmRleE9mKCIuIikhPT0tMSYmKHU9Nyk7dmFyIGM7Zm9yKGM9MDtjPGYmJnNbY10hPT0iIjtjKyspO2lmKGM8dSlmb3Iocy5zcGxpY2UoYywxLCIwMDAwIik7cy5sZW5ndGg8dTspcy5zcGxpY2UoYywwLCIwMDAwIik7Zm9yKHZhciBsLHA9MDtwPHU7cCsrKXtsPXNbcF0uc3BsaXQoIiIpO2Zvcih2YXIgZD0wO2Q8MyYmKGxbMF09PT0iMCImJmwubGVuZ3RoPjEpO2QrKylsLnNwbGljZSgwLDEpO3NbcF09bC5qb2luKCIiKX12YXIgaD0tMSxfPTAsZz0wLGI9LTEsdz0hMTtmb3IocD0wO3A8dTtwKyspdz9zW3BdPT09IjAiP2crPTE6KHc9ITEsZz5fJiYoaD1iLF89ZykpOnNbcF09PT0iMCImJih3PSEwLGI9cCxnPTEpO2c+XyYmKGg9YixfPWcpLF8+MSYmcy5zcGxpY2UoaCxfLCIiKSxmPXMubGVuZ3RoO3ZhciBPPSIiO2ZvcihzWzBdPT09IiImJihPPSI6IikscD0wO3A8ZiYmKE8rPXNbcF0scCE9PWYtMSk7cCsrKU8rPSI6IjtyZXR1cm4gc1tmLTFdPT09IiImJihPKz0iOiIpLE99ZnVuY3Rpb24gbygpe3JldHVybiB0LklQdjY9PT10aGlzJiYodC5JUHY2PWUpLHRoaXN9cmV0dXJue2Jlc3Q6bixub0NvbmZsaWN0Om99fSl9KTt2YXIgSzE9WW4oKHExLGlwKT0+ey8qIQogKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzCiAqIFNlY29uZCBMZXZlbCBEb21haW4gKFNMRCkgU3VwcG9ydAogKgogKiBWZXJzaW9uOiAxLjE5LjExCiAqCiAqIEF1dGhvcjogUm9kbmV5IFJlaG0KICogV2ViOiBodHRwOi8vbWVkaWFsaXplLmdpdGh1Yi5pby9VUkkuanMvCiAqCiAqIExpY2Vuc2VkIHVuZGVyCiAqICAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZQogKgogKi8oZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dHlwZW9mIGlwPT0ib2JqZWN0IiYmaXAuZXhwb3J0cz9pcC5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKTp0LlNlY29uZExldmVsRG9tYWlucz1lKHQpfSkocTEsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPXQmJnQuU2Vjb25kTGV2ZWxEb21haW5zLG49e2xpc3Q6e2FjOiIgY29tIGdvdiBtaWwgbmV0IG9yZyAiLGFlOiIgYWMgY28gZ292IG1pbCBuYW1lIG5ldCBvcmcgcHJvIHNjaCAiLGFmOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGFsOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixhbzoiIGNvIGVkIGd2IGl0IG9nIHBiICIsYXI6IiBjb20gZWR1IGdvYiBnb3YgaW50IG1pbCBuZXQgb3JnIHR1ciAiLGF0OiIgYWMgY28gZ3Ygb3IgIixhdToiIGFzbiBjb20gY3Npcm8gZWR1IGdvdiBpZCBuZXQgb3JnICIsYmE6IiBjbyBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyBycyB1bmJpIHVubW8gdW5zYSB1bnR6IHVuemUgIixiYjoiIGJpeiBjbyBjb20gZWR1IGdvdiBpbmZvIG5ldCBvcmcgc3RvcmUgdHYgIixiaDoiIGJpeiBjYyBjb20gZWR1IGdvdiBpbmZvIG5ldCBvcmcgIixibjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixibzoiIGNvbSBlZHUgZ29iIGdvdiBpbnQgbWlsIG5ldCBvcmcgdHYgIixicjoiIGFkbSBhZHYgYWdyIGFtIGFycSBhcnQgYXRvIGIgYmlvIGJsb2cgYm1kIGNpbSBjbmcgY250IGNvbSBjb29wIGVjbiBlZHUgZW5nIGVzcCBldGMgZXRpIGZhciBmbG9nIGZtIGZuZCBmb3QgZnN0IGcxMiBnZ2YgZ292IGltYiBpbmQgaW5mIGpvciBqdXMgbGVsIG1hdCBtZWQgbWlsIG11cyBuZXQgbm9tIG5vdCBudHIgb2RvIG9yZyBwcGcgcHJvIHBzYyBwc2kgcXNsIHJlYyBzbGcgc3J2IHRtcCB0cmQgdHVyIHR2IHZldCB2bG9nIHdpa2kgemxnICIsYnM6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsYno6IiBkdSBldCBvbSBvdiByZyAiLGNhOiIgYWIgYmMgbWIgbmIgbmYgbmwgbnMgbnQgbnUgb24gcGUgcWMgc2sgeWsgIixjazoiIGJpeiBjbyBlZHUgZ2VuIGdvdiBpbmZvIG5ldCBvcmcgIixjbjoiIGFjIGFoIGJqIGNvbSBjcSBlZHUgZmogZ2QgZ292IGdzIGd4IGd6IGhhIGhiIGhlIGhpIGhsIGhuIGpsIGpzIGp4IGxuIG1pbCBuZXQgbm0gbnggb3JnIHFoIHNjIHNkIHNoIHNuIHN4IHRqIHR3IHhqIHh6IHluIHpqICIsY286IiBjb20gZWR1IGdvdiBtaWwgbmV0IG5vbSBvcmcgIixjcjoiIGFjIGMgY28gZWQgZmkgZ28gb3Igc2EgIixjeToiIGFjIGJpeiBjb20gZWtsb2dlcyBnb3YgbHRkIG5hbWUgbmV0IG9yZyBwYXJsaWFtZW50IHByZXNzIHBybyB0bSAiLGRvOiIgYXJ0IGNvbSBlZHUgZ29iIGdvdiBtaWwgbmV0IG9yZyBzbGQgd2ViICIsZHo6IiBhcnQgYXNzbyBjb20gZWR1IGdvdiBuZXQgb3JnIHBvbCAiLGVjOiIgY29tIGVkdSBmaW4gZ292IGluZm8gbWVkIG1pbCBuZXQgb3JnIHBybyAiLGVnOiIgY29tIGVkdSBldW4gZ292IG1pbCBuYW1lIG5ldCBvcmcgc2NpICIsZXI6IiBjb20gZWR1IGdvdiBpbmQgbWlsIG5ldCBvcmcgcm9jaGVzdCB3ICIsZXM6IiBjb20gZWR1IGdvYiBub20gb3JnICIsZXQ6IiBiaXogY29tIGVkdSBnb3YgaW5mbyBuYW1lIG5ldCBvcmcgIixmajoiIGFjIGJpeiBjb20gaW5mbyBtaWwgbmFtZSBuZXQgb3JnIHBybyAiLGZrOiIgYWMgY28gZ292IG5ldCBub20gb3JnICIsZnI6IiBhc3NvIGNvbSBmIGdvdXYgbm9tIHByZCBwcmVzc2UgdG0gIixnZzoiIGNvIG5ldCBvcmcgIixnaDoiIGNvbSBlZHUgZ292IG1pbCBvcmcgIixnbjoiIGFjIGNvbSBnb3YgbmV0IG9yZyAiLGdyOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixndDoiIGNvbSBlZHUgZ29iIGluZCBtaWwgbmV0IG9yZyAiLGd1OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGhrOiIgY29tIGVkdSBnb3YgaWR2IG5ldCBvcmcgIixodToiIDIwMDAgYWdyYXIgYm9sdCBjYXNpbm8gY2l0eSBjbyBlcm90aWNhIGVyb3Rpa2EgZmlsbSBmb3J1bSBnYW1lcyBob3RlbCBpbmZvIGluZ2F0bGFuIGpvZ2FzeiBrb255dmVsbyBsYWthcyBtZWRpYSBuZXdzIG9yZyBwcml2IHJla2xhbSBzZXggc2hvcCBzcG9ydCBzdWxpIHN6ZXggdG0gdG96c2RlIHV0YXphcyB2aWRlbyAiLGlkOiIgYWMgY28gZ28gbWlsIG5ldCBvciBzY2ggd2ViICIsaWw6IiBhYyBjbyBnb3YgaWRmIGsxMiBtdW5pIG5ldCBvcmcgIixpbjoiIGFjIGNvIGVkdSBlcm5ldCBmaXJtIGdlbiBnb3YgaSBpbmQgbWlsIG5ldCBuaWMgb3JnIHJlcyAiLGlxOiIgY29tIGVkdSBnb3YgaSBtaWwgbmV0IG9yZyAiLGlyOiIgYWMgY28gZG5zc2VjIGdvdiBpIGlkIG5ldCBvcmcgc2NoICIsaXQ6IiBlZHUgZ292ICIsamU6IiBjbyBuZXQgb3JnICIsam86IiBjb20gZWR1IGdvdiBtaWwgbmFtZSBuZXQgb3JnIHNjaCAiLGpwOiIgYWMgYWQgY28gZWQgZ28gZ3IgbGcgbmUgb3IgIixrZToiIGFjIGNvIGdvIGluZm8gbWUgbW9iaSBuZSBvciBzYyAiLGtoOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgcGVyICIsa2k6IiBiaXogY29tIGRlIGVkdSBnb3YgaW5mbyBtb2IgbmV0IG9yZyB0ZWwgIixrbToiIGFzc28gY29tIGNvb3AgZWR1IGdvdXYgayBtZWRlY2luIG1pbCBub20gbm90YWlyZXMgcGhhcm1hY2llbnMgcHJlc3NlIHRtIHZldGVyaW5haXJlICIsa246IiBlZHUgZ292IG5ldCBvcmcgIixrcjoiIGFjIGJ1c2FuIGNodW5nYnVrIGNodW5nbmFtIGNvIGRhZWd1IGRhZWplb24gZXMgZ2FuZ3dvbiBnbyBnd2FuZ2p1IGd5ZW9uZ2J1ayBneWVvbmdnaSBneWVvbmduYW0gaHMgaW5jaGVvbiBqZWp1IGplb25idWsgamVvbm5hbSBrIGtnIG1pbCBtcyBuZSBvciBwZSByZSBzYyBzZW91bCB1bHNhbiAiLGt3OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGt5OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGt6OiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixsYjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixsazoiIGFzc24gY29tIGVkdSBnb3YgZ3JwIGhvdGVsIGludCBsdGQgbmV0IG5nbyBvcmcgc2NoIHNvYyB3ZWIgIixscjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixsdjoiIGFzbiBjb20gY29uZiBlZHUgZ292IGlkIG1pbCBuZXQgb3JnICIsbHk6IiBjb20gZWR1IGdvdiBpZCBtZWQgbmV0IG9yZyBwbGMgc2NoICIsbWE6IiBhYyBjbyBnb3YgbSBuZXQgb3JnIHByZXNzICIsbWM6IiBhc3NvIHRtICIsbWU6IiBhYyBjbyBlZHUgZ292IGl0cyBuZXQgb3JnIHByaXYgIixtZzoiIGNvbSBlZHUgZ292IG1pbCBub20gb3JnIHByZCB0bSAiLG1rOiIgY29tIGVkdSBnb3YgaW5mIG5hbWUgbmV0IG9yZyBwcm8gIixtbDoiIGNvbSBlZHUgZ292IG5ldCBvcmcgcHJlc3NlICIsbW46IiBlZHUgZ292IG9yZyAiLG1vOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLG10OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLG12OiIgYWVybyBiaXogY29tIGNvb3AgZWR1IGdvdiBpbmZvIGludCBtaWwgbXVzZXVtIG5hbWUgbmV0IG9yZyBwcm8gIixtdzoiIGFjIGNvIGNvbSBjb29wIGVkdSBnb3YgaW50IG11c2V1bSBuZXQgb3JnICIsbXg6IiBjb20gZWR1IGdvYiBuZXQgb3JnICIsbXk6IiBjb20gZWR1IGdvdiBtaWwgbmFtZSBuZXQgb3JnIHNjaCAiLG5mOiIgYXJ0cyBjb20gZmlybSBpbmZvIG5ldCBvdGhlciBwZXIgcmVjIHN0b3JlIHdlYiAiLG5nOiIgYml6IGNvbSBlZHUgZ292IG1pbCBtb2JpIG5hbWUgbmV0IG9yZyBzY2ggIixuaToiIGFjIGNvIGNvbSBlZHUgZ29iIG1pbCBuZXQgbm9tIG9yZyAiLG5wOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixucjoiIGJpeiBjb20gZWR1IGdvdiBpbmZvIG5ldCBvcmcgIixvbToiIGFjIGJpeiBjbyBjb20gZWR1IGdvdiBtZWQgbWlsIG11c2V1bSBuZXQgb3JnIHBybyBzY2ggIixwZToiIGNvbSBlZHUgZ29iIG1pbCBuZXQgbm9tIG9yZyBzbGQgIixwaDoiIGNvbSBlZHUgZ292IGkgbWlsIG5ldCBuZ28gb3JnICIscGs6IiBiaXogY29tIGVkdSBmYW0gZ29iIGdvayBnb24gZ29wIGdvcyBnb3YgbmV0IG9yZyB3ZWIgIixwbDoiIGFydCBiaWFseXN0b2sgYml6IGNvbSBlZHUgZ2RhIGdkYW5zayBnb3J6b3cgZ292IGluZm8ga2F0b3dpY2Uga3Jha293IGxvZHogbHVibGluIG1pbCBuZXQgbmdvIG9sc3p0eW4gb3JnIHBvem5hbiBwd3IgcmFkb20gc2x1cHNrIHN6Y3plY2luIHRvcnVuIHdhcnN6YXdhIHdhdyB3cm9jIHdyb2NsYXcgemdvcmEgIixwcjoiIGFjIGJpeiBjb20gZWR1IGVzdCBnb3YgaW5mbyBpc2xhIG5hbWUgbmV0IG9yZyBwcm8gcHJvZiAiLHBzOiIgY29tIGVkdSBnb3YgbmV0IG9yZyBwbG8gc2VjICIscHc6IiBiZWxhdSBjbyBlZCBnbyBuZSBvciAiLHJvOiIgYXJ0cyBjb20gZmlybSBpbmZvIG5vbSBudCBvcmcgcmVjIHN0b3JlIHRtIHd3dyAiLHJzOiIgYWMgY28gZWR1IGdvdiBpbiBvcmcgIixzYjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixzYzoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixzaDoiIGNvIGNvbSBlZHUgZ292IG5ldCBub20gb3JnICIsc2w6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsc3Q6IiBjbyBjb20gY29uc3VsYWRvIGVkdSBlbWJhaXhhZGEgZ292IG1pbCBuZXQgb3JnIHByaW5jaXBlIHNhb3RvbWUgc3RvcmUgIixzdjoiIGNvbSBlZHUgZ29iIG9yZyByZWQgIixzejoiIGFjIGNvIG9yZyAiLHRyOiIgYXYgYmJzIGJlbCBiaXogY29tIGRyIGVkdSBnZW4gZ292IGluZm8gazEyIG5hbWUgbmV0IG9yZyBwb2wgdGVsIHRzayB0diB3ZWIgIix0dDoiIGFlcm8gYml6IGNhdCBjbyBjb20gY29vcCBlZHUgZ292IGluZm8gaW50IGpvYnMgbWlsIG1vYmkgbXVzZXVtIG5hbWUgbmV0IG9yZyBwcm8gdGVsIHRyYXZlbCAiLHR3OiIgY2x1YiBjb20gZWJpeiBlZHUgZ2FtZSBnb3YgaWR2IG1pbCBuZXQgb3JnICIsbXU6IiBhYyBjbyBjb20gZ292IG5ldCBvciBvcmcgIixtejoiIGFjIGNvIGVkdSBnb3Ygb3JnICIsbmE6IiBjbyBjb20gIixuejoiIGFjIGNvIGNyaSBnZWVrIGdlbiBnb3Z0IGhlYWx0aCBpd2kgbWFvcmkgbWlsIG5ldCBvcmcgcGFybGlhbWVudCBzY2hvb2wgIixwYToiIGFibyBhYyBjb20gZWR1IGdvYiBpbmcgbWVkIG5ldCBub20gb3JnIHNsZCAiLHB0OiIgY29tIGVkdSBnb3YgaW50IG5ldCBub21lIG9yZyBwdWJsICIscHk6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLHFhOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixyZToiIGFzc28gY29tIG5vbSAiLHJ1OiIgYWMgYWR5Z2V5YSBhbHRhaSBhbXVyIGFya2hhbmdlbHNrIGFzdHJha2hhbiBiYXNoa2lyaWEgYmVsZ29yb2QgYmlyIGJyeWFuc2sgYnVyeWF0aWEgY2JnIGNoZWwgY2hlbHlhYmluc2sgY2hpdGEgY2h1a290a2EgY2h1dmFzaGlhIGNvbSBkYWdlc3RhbiBlLWJ1cmcgZWR1IGdvdiBncm96bnkgaW50IGlya3V0c2sgaXZhbm92byBpemhldnNrIGphciBqb3Noa2FyLW9sYSBrYWxteWtpYSBrYWx1Z2Ega2FtY2hhdGthIGthcmVsaWEga2F6YW4ga2NociBrZW1lcm92byBraGFiYXJvdnNrIGtoYWthc3NpYSBraHYga2lyb3Yga29lbmlnIGtvbWkga29zdHJvbWEga3Jhbm95YXJzayBrdWJhbiBrdXJnYW4ga3Vyc2sgbGlwZXRzayBtYWdhZGFuIG1hcmkgbWFyaS1lbCBtYXJpbmUgbWlsIG1vcmRvdmlhIG1vc3JlZyBtc2sgbXVybWFuc2sgbmFsY2hpayBuZXQgbm5vdiBub3Ygbm92b3NpYmlyc2sgbnNrIG9tc2sgb3JlbmJ1cmcgb3JnIG9yeW9sIHBlbnphIHBlcm0gcHAgcHNrb3YgcHR6IHJuZCByeWF6YW4gc2FraGFsaW4gc2FtYXJhIHNhcmF0b3Ygc2ltYmlyc2sgc21vbGVuc2sgc3BiIHN0YXZyb3BvbCBzdHYgc3VyZ3V0IHRhbWJvdiB0YXRhcnN0YW4gdG9tIHRvbXNrIHRzYXJpdHN5biB0c2sgdHVsYSB0dXZhIHR2ZXIgdHl1bWVuIHVkbSB1ZG11cnRpYSB1bGFuLXVkZSB2bGFkaWthdmtheiB2bGFkaW1pciB2bGFkaXZvc3RvayB2b2xnb2dyYWQgdm9sb2dkYSB2b3JvbmV6aCB2cm4gdnlhdGthIHlha3V0aWEgeWFtYWwgeWVrYXRlcmluYnVyZyB5dXpobm8tc2FraGFsaW5zayAiLHJ3OiIgYWMgY28gY29tIGVkdSBnb3V2IGdvdiBpbnQgbWlsIG5ldCAiLHNhOiIgY29tIGVkdSBnb3YgbWVkIG5ldCBvcmcgcHViIHNjaCAiLHNkOiIgY29tIGVkdSBnb3YgaW5mbyBtZWQgbmV0IG9yZyB0diAiLHNlOiIgYSBhYyBiIGJkIGMgZCBlIGYgZyBoIGkgayBsIG0gbiBvIG9yZyBwIHBhcnRpIHBwIHByZXNzIHIgcyB0IHRtIHUgdyB4IHkgeiAiLHNnOiIgY29tIGVkdSBnb3YgaWRuIG5ldCBvcmcgcGVyICIsc246IiBhcnQgY29tIGVkdSBnb3V2IG9yZyBwZXJzbyB1bml2ICIsc3k6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG5ld3Mgb3JnICIsdGg6IiBhYyBjbyBnbyBpbiBtaSBuZXQgb3IgIix0ajoiIGFjIGJpeiBjbyBjb20gZWR1IGdvIGdvdiBpbmZvIGludCBtaWwgbmFtZSBuZXQgbmljIG9yZyB0ZXN0IHdlYiAiLHRuOiIgYWdyaW5ldCBjb20gZGVmZW5zZSBlZHVuZXQgZW5zIGZpbiBnb3YgaW5kIGluZm8gaW50bCBtaW5jb20gbmF0IG5ldCBvcmcgcGVyc28gcm5ydCBybnMgcm51IHRvdXJpc20gIix0ejoiIGFjIGNvIGdvIG5lIG9yICIsdWE6IiBiaXogY2hlcmthc3N5IGNoZXJuaWdvdiBjaGVybm92dHN5IGNrIGNuIGNvIGNvbSBjcmltZWEgY3YgZG4gZG5lcHJvcGV0cm92c2sgZG9uZXRzayBkcCBlZHUgZ292IGlmIGluIGl2YW5vLWZyYW5raXZzayBraCBraGFya292IGtoZXJzb24ga2htZWxuaXRza2l5IGtpZXYga2lyb3ZvZ3JhZCBrbSBrciBrcyBrdiBsZyBsdWdhbnNrIGx1dHNrIGx2aXYgbWUgbWsgbmV0IG5pa29sYWV2IG9kIG9kZXNzYSBvcmcgcGwgcG9sdGF2YSBwcCByb3ZubyBydiBzZWJhc3RvcG9sIHN1bXkgdGUgdGVybm9waWwgdXpoZ29yb2QgdmlubmljYSB2biB6YXBvcml6aHpoZSB6aGl0b21pciB6cCB6dCAiLHVnOiIgYWMgY28gZ28gbmUgb3Igb3JnIHNjICIsdWs6IiBhYyBibCBicml0aXNoLWxpYnJhcnkgY28gY3ltIGdvdiBnb3Z0IGljbmV0IGpldCBsZWEgbHRkIG1lIG1pbCBtb2QgbmF0aW9uYWwtbGlicmFyeS1zY290bGFuZCBuZWwgbmV0IG5ocyBuaWMgbmxzIG9yZyBvcmduIHBhcmxpYW1lbnQgcGxjIHBvbGljZSBzY2ggc2NvdCBzb2MgIix1czoiIGRuaSBmZWQgaXNhIGtpZHMgbnNuICIsdXk6IiBjb20gZWR1IGd1YiBtaWwgbmV0IG9yZyAiLHZlOiIgY28gY29tIGVkdSBnb2IgaW5mbyBtaWwgbmV0IG9yZyB3ZWIgIix2aToiIGNvIGNvbSBrMTIgbmV0IG9yZyAiLHZuOiIgYWMgYml6IGNvbSBlZHUgZ292IGhlYWx0aCBpbmZvIGludCBuYW1lIG5ldCBvcmcgcHJvICIseWU6IiBjbyBjb20gZ292IGx0ZCBtZSBuZXQgb3JnIHBsYyAiLHl1OiIgYWMgY28gZWR1IGdvdiBvcmcgIix6YToiIGFjIGFncmljIGFsdCBib3Vyc2UgY2l0eSBjbyBjeWJlcm5ldCBkYiBlZHUgZ292IGdyb25kYXIgaWFjY2VzcyBpbXQgaW5jYSBsYW5kZXNpZ24gbGF3IG1pbCBuZXQgbmdvIG5pcyBub20gb2xpdmV0dGkgb3JnIHBpeCBzY2hvb2wgdG0gd2ViICIsem06IiBhYyBjbyBjb20gZWR1IGdvdiBuZXQgb3JnIHNjaCAiLGNvbToiYXIgYnIgY24gZGUgZXUgZ2IgZ3IgaHUganBuIGtyIG5vIHFjIHJ1IHNhIHNlIHVrIHVzIHV5IHphICIsbmV0OiJnYiBqcCBzZSB1ayAiLG9yZzoiYWUiLGRlOiJjb20gIn0saGFzOmZ1bmN0aW9uKG8pe3ZhciByPW8ubGFzdEluZGV4T2YoIi4iKTtpZihyPD0wfHxyPj1vLmxlbmd0aC0xKXJldHVybiExO3ZhciBpPW8ubGFzdEluZGV4T2YoIi4iLHItMSk7aWYoaTw9MHx8aT49ci0xKXJldHVybiExO3ZhciBzPW4ubGlzdFtvLnNsaWNlKHIrMSldO3JldHVybiBzP3MuaW5kZXhPZigiICIrby5zbGljZShpKzEscikrIiAiKT49MDohMX0saXM6ZnVuY3Rpb24obyl7dmFyIHI9by5sYXN0SW5kZXhPZigiLiIpO2lmKHI8PTB8fHI+PW8ubGVuZ3RoLTEpcmV0dXJuITE7dmFyIGk9by5sYXN0SW5kZXhPZigiLiIsci0xKTtpZihpPj0wKXJldHVybiExO3ZhciBzPW4ubGlzdFtvLnNsaWNlKHIrMSldO3JldHVybiBzP3MuaW5kZXhPZigiICIrby5zbGljZSgwLHIpKyIgIik+PTA6ITF9LGdldDpmdW5jdGlvbihvKXt2YXIgcj1vLmxhc3RJbmRleE9mKCIuIik7aWYocjw9MHx8cj49by5sZW5ndGgtMSlyZXR1cm4gbnVsbDt2YXIgaT1vLmxhc3RJbmRleE9mKCIuIixyLTEpO2lmKGk8PTB8fGk+PXItMSlyZXR1cm4gbnVsbDt2YXIgcz1uLmxpc3Rbby5zbGljZShyKzEpXTtyZXR1cm4hc3x8cy5pbmRleE9mKCIgIitvLnNsaWNlKGkrMSxyKSsiICIpPDA/bnVsbDpvLnNsaWNlKGkrMSl9LG5vQ29uZmxpY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdC5TZWNvbmRMZXZlbERvbWFpbnM9PT10aGlzJiYodC5TZWNvbmRMZXZlbERvbWFpbnM9ZSksdGhpc319O3JldHVybiBufSl9KTt2YXIganM9WW4oKFcxLHNwKT0+ey8qIQogKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzCiAqCiAqIFZlcnNpb246IDEuMTkuMTEKICoKICogQXV0aG9yOiBSb2RuZXkgUmVobQogKiBXZWI6IGh0dHA6Ly9tZWRpYWxpemUuZ2l0aHViLmlvL1VSSS5qcy8KICoKICogTGljZW5zZWQgdW5kZXIKICogICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlCiAqCiAqLyhmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2Ygc3A9PSJvYmplY3QiJiZzcC5leHBvcnRzP3NwLmV4cG9ydHM9ZSh6MSgpLEgxKCksSzEoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyIuL3B1bnljb2RlIiwiLi9JUHY2IiwiLi9TZWNvbmRMZXZlbERvbWFpbnMiXSxlKTp0LlVSST1lKHQucHVueWNvZGUsdC5JUHY2LHQuU2Vjb25kTGV2ZWxEb21haW5zLHQpfSkoVzEsZnVuY3Rpb24odCxlLG4sbyl7InVzZSBzdHJpY3QiO3ZhciByPW8mJm8uVVJJO2Z1bmN0aW9uIGkoQSxTKXt2YXIgQz1hcmd1bWVudHMubGVuZ3RoPj0xLEw9YXJndW1lbnRzLmxlbmd0aD49MjtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gQz9MP25ldyBpKEEsUyk6bmV3IGkoQSk6bmV3IGk7aWYoQT09PXZvaWQgMCl7aWYoQyl0aHJvdyBuZXcgVHlwZUVycm9yKCJ1bmRlZmluZWQgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yIFVSSSIpO3R5cGVvZiBsb2NhdGlvbjwidSI/QT1sb2NhdGlvbi5ocmVmKyIiOkE9IiJ9aWYoQT09PW51bGwmJkMpdGhyb3cgbmV3IFR5cGVFcnJvcigibnVsbCBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgVVJJIik7cmV0dXJuIHRoaXMuaHJlZihBKSxTIT09dm9pZCAwP3RoaXMuYWJzb2x1dGVUbyhTKTp0aGlzfWZ1bmN0aW9uIHMoQSl7cmV0dXJuL15bMC05XSskLy50ZXN0KEEpfWkudmVyc2lvbj0iMS4xOS4xMSI7dmFyIGY9aS5wcm90b3R5cGUsdT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGMoQSl7cmV0dXJuIEEucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFtcXVwvXFxdKS9nLCJcXCQxIil9ZnVuY3Rpb24gbChBKXtyZXR1cm4gQT09PXZvaWQgMD8iVW5kZWZpbmVkIjpTdHJpbmcoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEEpKS5zbGljZSg4LC0xKX1mdW5jdGlvbiBwKEEpe3JldHVybiBsKEEpPT09IkFycmF5In1mdW5jdGlvbiBkKEEsUyl7dmFyIEM9e30sTCx6O2lmKGwoUyk9PT0iUmVnRXhwIilDPW51bGw7ZWxzZSBpZihwKFMpKWZvcihMPTAsej1TLmxlbmd0aDtMPHo7TCsrKUNbU1tMXV09ITA7ZWxzZSBDW1NdPSEwO2ZvcihMPTAsej1BLmxlbmd0aDtMPHo7TCsrKXt2YXIgaj1DJiZDW0FbTF1dIT09dm9pZCAwfHwhQyYmUy50ZXN0KEFbTF0pO2omJihBLnNwbGljZShMLDEpLHotLSxMLS0pfXJldHVybiBBfWZ1bmN0aW9uIGgoQSxTKXt2YXIgQyxMO2lmKHAoUykpe2ZvcihDPTAsTD1TLmxlbmd0aDtDPEw7QysrKWlmKCFoKEEsU1tDXSkpcmV0dXJuITE7cmV0dXJuITB9dmFyIHo9bChTKTtmb3IoQz0wLEw9QS5sZW5ndGg7QzxMO0MrKylpZih6PT09IlJlZ0V4cCIpe2lmKHR5cGVvZiBBW0NdPT0ic3RyaW5nIiYmQVtDXS5tYXRjaChTKSlyZXR1cm4hMH1lbHNlIGlmKEFbQ109PT1TKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIF8oQSxTKXtpZighcChBKXx8IXAoUyl8fEEubGVuZ3RoIT09Uy5sZW5ndGgpcmV0dXJuITE7QS5zb3J0KCksUy5zb3J0KCk7Zm9yKHZhciBDPTAsTD1BLmxlbmd0aDtDPEw7QysrKWlmKEFbQ10hPT1TW0NdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGcoQSl7dmFyIFM9L15cLyt8XC8rJC9nO3JldHVybiBBLnJlcGxhY2UoUywiIil9aS5fcGFydHM9ZnVuY3Rpb24oKXtyZXR1cm57cHJvdG9jb2w6bnVsbCx1c2VybmFtZTpudWxsLHBhc3N3b3JkOm51bGwsaG9zdG5hbWU6bnVsbCx1cm46bnVsbCxwb3J0Om51bGwscGF0aDpudWxsLHF1ZXJ5Om51bGwsZnJhZ21lbnQ6bnVsbCxwcmV2ZW50SW52YWxpZEhvc3RuYW1lOmkucHJldmVudEludmFsaWRIb3N0bmFtZSxkdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnM6aS5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsZXNjYXBlUXVlcnlTcGFjZTppLmVzY2FwZVF1ZXJ5U3BhY2V9fSxpLnByZXZlbnRJbnZhbGlkSG9zdG5hbWU9ITEsaS5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnM9ITEsaS5lc2NhcGVRdWVyeVNwYWNlPSEwLGkucHJvdG9jb2xfZXhwcmVzc2lvbj0vXlthLXpdW2EtejAtOS4rLV0qJC9pLGkuaWRuX2V4cHJlc3Npb249L1teYS16MC05XC5fLV0vaSxpLnB1bnljb2RlX2V4cHJlc3Npb249Lyh4bi0tKS9pLGkuaXA0X2V4cHJlc3Npb249L15cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9JC8saS5pcDZfZXhwcmVzc2lvbj0vXlxzKigoKFswLTlBLUZhLWZdezEsNH06KXs3fShbMC05QS1GYS1mXXsxLDR9fDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs2fSg6WzAtOUEtRmEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezV9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezR9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsM30pfCgoOlswLTlBLUZhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXszfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezJ9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNX0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7MX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSglLispP1xzKiQvLGkuZmluZF91cmlfZXhwcmVzc2lvbj0vXGIoKD86W2Etel1bXHctXSs6KD86XC97MSwzfXxbYS16MC05JV0pfHd3d1xkezAsM31bLl18W2EtejAtOS5cLV0rWy5dW2Etel17Miw0fVwvKSg/OlteXHMoKTw+XSt8XCgoW15ccygpPD5dK3woXChbXlxzKCk8Pl0rXCkpKSpcKSkrKD86XCgoW15ccygpPD5dK3woXChbXlxzKCk8Pl0rXCkpKSpcKXxbXlxzYCEoKVxbXF17fTs6JyIuLDw+P8KrwrvigJzigJ3igJjigJldKSkvaWcsaS5maW5kVXJpPXtzdGFydDovXGIoPzooW2Etel1bYS16MC05ListXSo6XC9cLyl8d3d3XC4pL2dpLGVuZDovW1xzXHJcbl18JC8sdHJpbTovW2AhKClcW1xde307OiciLiw8Pj/Cq8K74oCc4oCd4oCe4oCY4oCZXSskLyxwYXJlbnM6LyhcKFteXCldKlwpfFxbW15cXV0qXF18XHtbXn1dKlx9fDxbXj5dKj4pL2d9LGkubGVhZGluZ193aGl0ZXNwYWNlX2V4cHJlc3Npb249L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxpLmFzY2lpX3RhYl93aGl0ZXNwYWNlPS9bXHUwMDA5XHUwMDBBXHUwMDBEXSsvZyxpLmRlZmF1bHRQb3J0cz17aHR0cDoiODAiLGh0dHBzOiI0NDMiLGZ0cDoiMjEiLGdvcGhlcjoiNzAiLHdzOiI4MCIsd3NzOiI0NDMifSxpLmhvc3RQcm90b2NvbHM9WyJodHRwIiwiaHR0cHMiXSxpLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycz0vW15hLXpBLVowLTlcLlwtOl9dLyxpLmRvbUF0dHJpYnV0ZXM9e2E6ImhyZWYiLGJsb2NrcXVvdGU6ImNpdGUiLGxpbms6ImhyZWYiLGJhc2U6ImhyZWYiLHNjcmlwdDoic3JjIixmb3JtOiJhY3Rpb24iLGltZzoic3JjIixhcmVhOiJocmVmIixpZnJhbWU6InNyYyIsZW1iZWQ6InNyYyIsc291cmNlOiJzcmMiLHRyYWNrOiJzcmMiLGlucHV0OiJzcmMiLGF1ZGlvOiJzcmMiLHZpZGVvOiJzcmMifSxpLmdldERvbUF0dHJpYnV0ZT1mdW5jdGlvbihBKXtpZighKCFBfHwhQS5ub2RlTmFtZSkpe3ZhciBTPUEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighKFM9PT0iaW5wdXQiJiZBLnR5cGUhPT0iaW1hZ2UiKSlyZXR1cm4gaS5kb21BdHRyaWJ1dGVzW1NdfX07ZnVuY3Rpb24gYihBKXtyZXR1cm4gZXNjYXBlKEEpfWZ1bmN0aW9uIHcoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKSpdL2csYikucmVwbGFjZSgvXCovZywiJTJBIil9aS5lbmNvZGU9dyxpLmRlY29kZT1kZWNvZGVVUklDb21wb25lbnQsaS5pc284ODU5PWZ1bmN0aW9uKCl7aS5lbmNvZGU9ZXNjYXBlLGkuZGVjb2RlPXVuZXNjYXBlfSxpLnVuaWNvZGU9ZnVuY3Rpb24oKXtpLmVuY29kZT13LGkuZGVjb2RlPWRlY29kZVVSSUNvbXBvbmVudH0saS5jaGFyYWN0ZXJzPXtwYXRobmFtZTp7ZW5jb2RlOntleHByZXNzaW9uOi8lKDI0fDI2fDJCfDJDfDNCfDNEfDNBfDQwKS9pZyxtYXA6eyIlMjQiOiIkIiwiJTI2IjoiJiIsIiUyQiI6IisiLCIlMkMiOiIsIiwiJTNCIjoiOyIsIiUzRCI6Ij0iLCIlM0EiOiI6IiwiJTQwIjoiQCJ9fSxkZWNvZGU6e2V4cHJlc3Npb246L1tcL1w/I10vZyxtYXA6eyIvIjoiJTJGIiwiPyI6IiUzRiIsIiMiOiIlMjMifX19LHJlc2VydmVkOntlbmNvZGU6e2V4cHJlc3Npb246LyUoMjF8MjN8MjR8MjZ8Mjd8Mjh8Mjl8MkF8MkJ8MkN8MkZ8M0F8M0J8M0R8M0Z8NDB8NUJ8NUQpL2lnLG1hcDp7IiUzQSI6IjoiLCIlMkYiOiIvIiwiJTNGIjoiPyIsIiUyMyI6IiMiLCIlNUIiOiJbIiwiJTVEIjoiXSIsIiU0MCI6IkAiLCIlMjEiOiIhIiwiJTI0IjoiJCIsIiUyNiI6IiYiLCIlMjciOiInIiwiJTI4IjoiKCIsIiUyOSI6IikiLCIlMkEiOiIqIiwiJTJCIjoiKyIsIiUyQyI6IiwiLCIlM0IiOiI7IiwiJTNEIjoiPSJ9fX0sdXJucGF0aDp7ZW5jb2RlOntleHByZXNzaW9uOi8lKDIxfDI0fDI3fDI4fDI5fDJBfDJCfDJDfDNCfDNEfDQwKS9pZyxtYXA6eyIlMjEiOiIhIiwiJTI0IjoiJCIsIiUyNyI6IiciLCIlMjgiOiIoIiwiJTI5IjoiKSIsIiUyQSI6IioiLCIlMkIiOiIrIiwiJTJDIjoiLCIsIiUzQiI6IjsiLCIlM0QiOiI9IiwiJTQwIjoiQCJ9fSxkZWNvZGU6e2V4cHJlc3Npb246L1tcL1w/IzpdL2csbWFwOnsiLyI6IiUyRiIsIj8iOiIlM0YiLCIjIjoiJTIzIiwiOiI6IiUzQSJ9fX19LGkuZW5jb2RlUXVlcnk9ZnVuY3Rpb24oQSxTKXt2YXIgQz1pLmVuY29kZShBKyIiKTtyZXR1cm4gUz09PXZvaWQgMCYmKFM9aS5lc2NhcGVRdWVyeVNwYWNlKSxTP0MucmVwbGFjZSgvJTIwL2csIisiKTpDfSxpLmRlY29kZVF1ZXJ5PWZ1bmN0aW9uKEEsUyl7QSs9IiIsUz09PXZvaWQgMCYmKFM9aS5lc2NhcGVRdWVyeVNwYWNlKTt0cnl7cmV0dXJuIGkuZGVjb2RlKFM/QS5yZXBsYWNlKC9cKy9nLCIlMjAiKTpBKX1jYXRjaHtyZXR1cm4gQX19O3ZhciBPPXtlbmNvZGU6ImVuY29kZSIsZGVjb2RlOiJkZWNvZGUifSxFLFQ9ZnVuY3Rpb24oQSxTKXtyZXR1cm4gZnVuY3Rpb24oQyl7dHJ5e3JldHVybiBpW1NdKEMrIiIpLnJlcGxhY2UoaS5jaGFyYWN0ZXJzW0FdW1NdLmV4cHJlc3Npb24sZnVuY3Rpb24oTCl7cmV0dXJuIGkuY2hhcmFjdGVyc1tBXVtTXS5tYXBbTF19KX1jYXRjaHtyZXR1cm4gQ319fTtmb3IoRSBpbiBPKWlbRSsiUGF0aFNlZ21lbnQiXT1UKCJwYXRobmFtZSIsT1tFXSksaVtFKyJVcm5QYXRoU2VnbWVudCJdPVQoInVybnBhdGgiLE9bRV0pO3ZhciB4PWZ1bmN0aW9uKEEsUyxDKXtyZXR1cm4gZnVuY3Rpb24oTCl7dmFyIHo7Qz96PWZ1bmN0aW9uKFcpe3JldHVybiBpW1NdKGlbQ10oVykpfTp6PWlbU107Zm9yKHZhciBqPShMKyIiKS5zcGxpdChBKSxrPTAscT1qLmxlbmd0aDtrPHE7aysrKWpba109eihqW2tdKTtyZXR1cm4gai5qb2luKEEpfX07aS5kZWNvZGVQYXRoPXgoIi8iLCJkZWNvZGVQYXRoU2VnbWVudCIpLGkuZGVjb2RlVXJuUGF0aD14KCI6IiwiZGVjb2RlVXJuUGF0aFNlZ21lbnQiKSxpLnJlY29kZVBhdGg9eCgiLyIsImVuY29kZVBhdGhTZWdtZW50IiwiZGVjb2RlIiksaS5yZWNvZGVVcm5QYXRoPXgoIjoiLCJlbmNvZGVVcm5QYXRoU2VnbWVudCIsImRlY29kZSIpLGkuZW5jb2RlUmVzZXJ2ZWQ9VCgicmVzZXJ2ZWQiLCJlbmNvZGUiKSxpLnBhcnNlPWZ1bmN0aW9uKEEsUyl7dmFyIEM7cmV0dXJuIFN8fChTPXtwcmV2ZW50SW52YWxpZEhvc3RuYW1lOmkucHJldmVudEludmFsaWRIb3N0bmFtZX0pLEE9QS5yZXBsYWNlKGkubGVhZGluZ193aGl0ZXNwYWNlX2V4cHJlc3Npb24sIiIpLEE9QS5yZXBsYWNlKGkuYXNjaWlfdGFiX3doaXRlc3BhY2UsIiIpLEM9QS5pbmRleE9mKCIjIiksQz4tMSYmKFMuZnJhZ21lbnQ9QS5zdWJzdHJpbmcoQysxKXx8bnVsbCxBPUEuc3Vic3RyaW5nKDAsQykpLEM9QS5pbmRleE9mKCI/IiksQz4tMSYmKFMucXVlcnk9QS5zdWJzdHJpbmcoQysxKXx8bnVsbCxBPUEuc3Vic3RyaW5nKDAsQykpLEE9QS5yZXBsYWNlKC9eKGh0dHBzP3xmdHB8d3NzPyk/OitbL1xcXSovaSwiJDE6Ly8iKSxBPUEucmVwbGFjZSgvXlsvXFxdezIsfS9pLCIvLyIpLEEuc3Vic3RyaW5nKDAsMik9PT0iLy8iPyhTLnByb3RvY29sPW51bGwsQT1BLnN1YnN0cmluZygyKSxBPWkucGFyc2VBdXRob3JpdHkoQSxTKSk6KEM9QS5pbmRleE9mKCI6IiksQz4tMSYmKFMucHJvdG9jb2w9QS5zdWJzdHJpbmcoMCxDKXx8bnVsbCxTLnByb3RvY29sJiYhUy5wcm90b2NvbC5tYXRjaChpLnByb3RvY29sX2V4cHJlc3Npb24pP1MucHJvdG9jb2w9dm9pZCAwOkEuc3Vic3RyaW5nKEMrMSxDKzMpLnJlcGxhY2UoL1xcL2csIi8iKT09PSIvLyI/KEE9QS5zdWJzdHJpbmcoQyszKSxBPWkucGFyc2VBdXRob3JpdHkoQSxTKSk6KEE9QS5zdWJzdHJpbmcoQysxKSxTLnVybj0hMCkpKSxTLnBhdGg9QSxTfSxpLnBhcnNlSG9zdD1mdW5jdGlvbihBLFMpe0F8fChBPSIiKSxBPUEucmVwbGFjZSgvXFwvZywiLyIpO3ZhciBDPUEuaW5kZXhPZigiLyIpLEwsejtpZihDPT09LTEmJihDPUEubGVuZ3RoKSxBLmNoYXJBdCgwKT09PSJbIilMPUEuaW5kZXhPZigiXSIpLFMuaG9zdG5hbWU9QS5zdWJzdHJpbmcoMSxMKXx8bnVsbCxTLnBvcnQ9QS5zdWJzdHJpbmcoTCsyLEMpfHxudWxsLFMucG9ydD09PSIvIiYmKFMucG9ydD1udWxsKTtlbHNle3ZhciBqPUEuaW5kZXhPZigiOiIpLGs9QS5pbmRleE9mKCIvIikscT1BLmluZGV4T2YoIjoiLGorMSk7cSE9PS0xJiYoaz09PS0xfHxxPGspPyhTLmhvc3RuYW1lPUEuc3Vic3RyaW5nKDAsQyl8fG51bGwsUy5wb3J0PW51bGwpOih6PUEuc3Vic3RyaW5nKDAsQykuc3BsaXQoIjoiKSxTLmhvc3RuYW1lPXpbMF18fG51bGwsUy5wb3J0PXpbMV18fG51bGwpfXJldHVybiBTLmhvc3RuYW1lJiZBLnN1YnN0cmluZyhDKS5jaGFyQXQoMCkhPT0iLyImJihDKyssQT0iLyIrQSksUy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lJiZpLmVuc3VyZVZhbGlkSG9zdG5hbWUoUy5ob3N0bmFtZSxTLnByb3RvY29sKSxTLnBvcnQmJmkuZW5zdXJlVmFsaWRQb3J0KFMucG9ydCksQS5zdWJzdHJpbmcoQyl8fCIvIn0saS5wYXJzZUF1dGhvcml0eT1mdW5jdGlvbihBLFMpe3JldHVybiBBPWkucGFyc2VVc2VyaW5mbyhBLFMpLGkucGFyc2VIb3N0KEEsUyl9LGkucGFyc2VVc2VyaW5mbz1mdW5jdGlvbihBLFMpe3ZhciBDPUEsTD1BLmluZGV4T2YoIlxcIik7TCE9PS0xJiYoQT1BLnJlcGxhY2UoL1xcL2csIi8iKSk7dmFyIHo9QS5pbmRleE9mKCIvIiksaj1BLmxhc3RJbmRleE9mKCJAIix6Pi0xP3o6QS5sZW5ndGgtMSksaztyZXR1cm4gaj4tMSYmKHo9PT0tMXx8ajx6KT8oaz1BLnN1YnN0cmluZygwLGopLnNwbGl0KCI6IiksUy51c2VybmFtZT1rWzBdP2kuZGVjb2RlKGtbMF0pOm51bGwsay5zaGlmdCgpLFMucGFzc3dvcmQ9a1swXT9pLmRlY29kZShrLmpvaW4oIjoiKSk6bnVsbCxBPUMuc3Vic3RyaW5nKGorMSkpOihTLnVzZXJuYW1lPW51bGwsUy5wYXNzd29yZD1udWxsKSxBfSxpLnBhcnNlUXVlcnk9ZnVuY3Rpb24oQSxTKXtpZighQSlyZXR1cm57fTtpZihBPUEucmVwbGFjZSgvJisvZywiJiIpLnJlcGxhY2UoL15cPyomKnwmKyQvZywiIiksIUEpcmV0dXJue307Zm9yKHZhciBDPXt9LEw9QS5zcGxpdCgiJiIpLHo9TC5sZW5ndGgsaixrLHEsVz0wO1c8ejtXKyspaj1MW1ddLnNwbGl0KCI9Iiksaz1pLmRlY29kZVF1ZXJ5KGouc2hpZnQoKSxTKSxxPWoubGVuZ3RoP2kuZGVjb2RlUXVlcnkoai5qb2luKCI9IiksUyk6bnVsbCxrIT09Il9fcHJvdG9fXyImJih1LmNhbGwoQyxrKT8oKHR5cGVvZiBDW2tdPT0ic3RyaW5nInx8Q1trXT09PW51bGwpJiYoQ1trXT1bQ1trXV0pLENba10ucHVzaChxKSk6Q1trXT1xKTtyZXR1cm4gQ30saS5idWlsZD1mdW5jdGlvbihBKXt2YXIgUz0iIixDPSExO3JldHVybiBBLnByb3RvY29sJiYoUys9QS5wcm90b2NvbCsiOiIpLCFBLnVybiYmKFN8fEEuaG9zdG5hbWUpJiYoUys9Ii8vIixDPSEwKSxTKz1pLmJ1aWxkQXV0aG9yaXR5KEEpfHwiIix0eXBlb2YgQS5wYXRoPT0ic3RyaW5nIiYmKEEucGF0aC5jaGFyQXQoMCkhPT0iLyImJkMmJihTKz0iLyIpLFMrPUEucGF0aCksdHlwZW9mIEEucXVlcnk9PSJzdHJpbmciJiZBLnF1ZXJ5JiYoUys9Ij8iK0EucXVlcnkpLHR5cGVvZiBBLmZyYWdtZW50PT0ic3RyaW5nIiYmQS5mcmFnbWVudCYmKFMrPSIjIitBLmZyYWdtZW50KSxTfSxpLmJ1aWxkSG9zdD1mdW5jdGlvbihBKXt2YXIgUz0iIjtpZihBLmhvc3RuYW1lKWkuaXA2X2V4cHJlc3Npb24udGVzdChBLmhvc3RuYW1lKT9TKz0iWyIrQS5ob3N0bmFtZSsiXSI6Uys9QS5ob3N0bmFtZTtlbHNlIHJldHVybiIiO3JldHVybiBBLnBvcnQmJihTKz0iOiIrQS5wb3J0KSxTfSxpLmJ1aWxkQXV0aG9yaXR5PWZ1bmN0aW9uKEEpe3JldHVybiBpLmJ1aWxkVXNlcmluZm8oQSkraS5idWlsZEhvc3QoQSl9LGkuYnVpbGRVc2VyaW5mbz1mdW5jdGlvbihBKXt2YXIgUz0iIjtyZXR1cm4gQS51c2VybmFtZSYmKFMrPWkuZW5jb2RlKEEudXNlcm5hbWUpKSxBLnBhc3N3b3JkJiYoUys9IjoiK2kuZW5jb2RlKEEucGFzc3dvcmQpKSxTJiYoUys9IkAiKSxTfSxpLmJ1aWxkUXVlcnk9ZnVuY3Rpb24oQSxTLEMpe3ZhciBMPSIiLHosaixrLHE7Zm9yKGogaW4gQSlpZihqIT09Il9fcHJvdG9fXyImJnUuY2FsbChBLGopKWlmKHAoQVtqXSkpZm9yKHo9e30saz0wLHE9QVtqXS5sZW5ndGg7azxxO2srKylBW2pdW2tdIT09dm9pZCAwJiZ6W0Fbal1ba10rIiJdPT09dm9pZCAwJiYoTCs9IiYiK2kuYnVpbGRRdWVyeVBhcmFtZXRlcihqLEFbal1ba10sQyksUyE9PSEwJiYoeltBW2pdW2tdKyIiXT0hMCkpO2Vsc2UgQVtqXSE9PXZvaWQgMCYmKEwrPSImIitpLmJ1aWxkUXVlcnlQYXJhbWV0ZXIoaixBW2pdLEMpKTtyZXR1cm4gTC5zdWJzdHJpbmcoMSl9LGkuYnVpbGRRdWVyeVBhcmFtZXRlcj1mdW5jdGlvbihBLFMsQyl7cmV0dXJuIGkuZW5jb2RlUXVlcnkoQSxDKSsoUyE9PW51bGw/Ij0iK2kuZW5jb2RlUXVlcnkoUyxDKToiIil9LGkuYWRkUXVlcnk9ZnVuY3Rpb24oQSxTLEMpe2lmKHR5cGVvZiBTPT0ib2JqZWN0Iilmb3IodmFyIEwgaW4gUyl1LmNhbGwoUyxMKSYmaS5hZGRRdWVyeShBLEwsU1tMXSk7ZWxzZSBpZih0eXBlb2YgUz09InN0cmluZyIpe2lmKEFbU109PT12b2lkIDApe0FbU109QztyZXR1cm59ZWxzZSB0eXBlb2YgQVtTXT09InN0cmluZyImJihBW1NdPVtBW1NdXSk7cChDKXx8KEM9W0NdKSxBW1NdPShBW1NdfHxbXSkuY29uY2F0KEMpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmFkZFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKX0saS5zZXRRdWVyeT1mdW5jdGlvbihBLFMsQyl7aWYodHlwZW9mIFM9PSJvYmplY3QiKWZvcih2YXIgTCBpbiBTKXUuY2FsbChTLEwpJiZpLnNldFF1ZXJ5KEEsTCxTW0xdKTtlbHNlIGlmKHR5cGVvZiBTPT0ic3RyaW5nIilBW1NdPUM9PT12b2lkIDA/bnVsbDpDO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLnNldFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKX0saS5yZW1vdmVRdWVyeT1mdW5jdGlvbihBLFMsQyl7dmFyIEwseixqO2lmKHAoUykpZm9yKEw9MCx6PVMubGVuZ3RoO0w8ejtMKyspQVtTW0xdXT12b2lkIDA7ZWxzZSBpZihsKFMpPT09IlJlZ0V4cCIpZm9yKGogaW4gQSlTLnRlc3QoaikmJihBW2pdPXZvaWQgMCk7ZWxzZSBpZih0eXBlb2YgUz09Im9iamVjdCIpZm9yKGogaW4gUyl1LmNhbGwoUyxqKSYmaS5yZW1vdmVRdWVyeShBLGosU1tqXSk7ZWxzZSBpZih0eXBlb2YgUz09InN0cmluZyIpQyE9PXZvaWQgMD9sKEMpPT09IlJlZ0V4cCI/IXAoQVtTXSkmJkMudGVzdChBW1NdKT9BW1NdPXZvaWQgMDpBW1NdPWQoQVtTXSxDKTpBW1NdPT09U3RyaW5nKEMpJiYoIXAoQyl8fEMubGVuZ3RoPT09MSk/QVtTXT12b2lkIDA6cChBW1NdKSYmKEFbU109ZChBW1NdLEMpKTpBW1NdPXZvaWQgMDtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIlVSSS5yZW1vdmVRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcsIFJlZ0V4cCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIil9LGkuaGFzUXVlcnk9ZnVuY3Rpb24oQSxTLEMsTCl7c3dpdGNoKGwoUykpe2Nhc2UiU3RyaW5nIjpicmVhaztjYXNlIlJlZ0V4cCI6Zm9yKHZhciB6IGluIEEpaWYodS5jYWxsKEEseikmJlMudGVzdCh6KSYmKEM9PT12b2lkIDB8fGkuaGFzUXVlcnkoQSx6LEMpKSlyZXR1cm4hMDtyZXR1cm4hMTtjYXNlIk9iamVjdCI6Zm9yKHZhciBqIGluIFMpaWYodS5jYWxsKFMsaikmJiFpLmhhc1F1ZXJ5KEEsaixTW2pdKSlyZXR1cm4hMTtyZXR1cm4hMDtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlVSSS5oYXNRdWVyeSgpIGFjY2VwdHMgYSBzdHJpbmcsIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBvYmplY3QgYXMgdGhlIG5hbWUgcGFyYW1ldGVyIil9c3dpdGNoKGwoQykpe2Nhc2UiVW5kZWZpbmVkIjpyZXR1cm4gUyBpbiBBO2Nhc2UiQm9vbGVhbiI6dmFyIGs9ISEocChBW1NdKT9BW1NdLmxlbmd0aDpBW1NdKTtyZXR1cm4gQz09PWs7Y2FzZSJGdW5jdGlvbiI6cmV0dXJuISFDKEFbU10sUyxBKTtjYXNlIkFycmF5IjppZighcChBW1NdKSlyZXR1cm4hMTt2YXIgcT1MP2g6XztyZXR1cm4gcShBW1NdLEMpO2Nhc2UiUmVnRXhwIjpyZXR1cm4gcChBW1NdKT9MP2goQVtTXSxDKTohMTohIShBW1NdJiZBW1NdLm1hdGNoKEMpKTtjYXNlIk51bWJlciI6Qz1TdHJpbmcoQyk7Y2FzZSJTdHJpbmciOnJldHVybiBwKEFbU10pP0w/aChBW1NdLEMpOiExOkFbU109PT1DO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyB1bmRlZmluZWQsIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyLCBSZWdFeHAsIEZ1bmN0aW9uIGFzIHRoZSB2YWx1ZSBwYXJhbWV0ZXIiKX19LGkuam9pblBhdGhzPWZ1bmN0aW9uKCl7Zm9yKHZhciBBPVtdLFM9W10sQz0wLEw9MDtMPGFyZ3VtZW50cy5sZW5ndGg7TCsrKXt2YXIgej1uZXcgaShhcmd1bWVudHNbTF0pO0EucHVzaCh6KTtmb3IodmFyIGo9ei5zZWdtZW50KCksaz0wO2s8ai5sZW5ndGg7aysrKXR5cGVvZiBqW2tdPT0ic3RyaW5nIiYmUy5wdXNoKGpba10pLGpba10mJkMrK31pZighUy5sZW5ndGh8fCFDKXJldHVybiBuZXcgaSgiIik7dmFyIHE9bmV3IGkoIiIpLnNlZ21lbnQoUyk7cmV0dXJuKEFbMF0ucGF0aCgpPT09IiJ8fEFbMF0ucGF0aCgpLnNsaWNlKDAsMSk9PT0iLyIpJiZxLnBhdGgoIi8iK3EucGF0aCgpKSxxLm5vcm1hbGl6ZSgpfSxpLmNvbW1vblBhdGg9ZnVuY3Rpb24oQSxTKXt2YXIgQz1NYXRoLm1pbihBLmxlbmd0aCxTLmxlbmd0aCksTDtmb3IoTD0wO0w8QztMKyspaWYoQS5jaGFyQXQoTCkhPT1TLmNoYXJBdChMKSl7TC0tO2JyZWFrfXJldHVybiBMPDE/QS5jaGFyQXQoMCk9PT1TLmNoYXJBdCgwKSYmQS5jaGFyQXQoMCk9PT0iLyI/Ii8iOiIiOigoQS5jaGFyQXQoTCkhPT0iLyJ8fFMuY2hhckF0KEwpIT09Ii8iKSYmKEw9QS5zdWJzdHJpbmcoMCxMKS5sYXN0SW5kZXhPZigiLyIpKSxBLnN1YnN0cmluZygwLEwrMSkpfSxpLndpdGhpblN0cmluZz1mdW5jdGlvbihBLFMsQyl7Q3x8KEM9e30pO3ZhciBMPUMuc3RhcnR8fGkuZmluZFVyaS5zdGFydCx6PUMuZW5kfHxpLmZpbmRVcmkuZW5kLGo9Qy50cmltfHxpLmZpbmRVcmkudHJpbSxrPUMucGFyZW5zfHxpLmZpbmRVcmkucGFyZW5zLHE9L1thLXowLTktXT1bIiddPyQvaTtmb3IoTC5sYXN0SW5kZXg9MDs7KXt2YXIgVz1MLmV4ZWMoQSk7aWYoIVcpYnJlYWs7dmFyIFI9Vy5pbmRleDtpZihDLmlnbm9yZUh0bWwpe3ZhciBudD1BLnNsaWNlKE1hdGgubWF4KFItMywwKSxSKTtpZihudCYmcS50ZXN0KG50KSljb250aW51ZX1mb3IodmFyIGF0PVIrQS5zbGljZShSKS5zZWFyY2goeiksbHQ9QS5zbGljZShSLGF0KSxfdD0tMTs7KXt2YXIgb3Q9ay5leGVjKGx0KTtpZighb3QpYnJlYWs7dmFyIFB0PW90LmluZGV4K290WzBdLmxlbmd0aDtfdD1NYXRoLm1heChfdCxQdCl9aWYoX3Q+LTE/bHQ9bHQuc2xpY2UoMCxfdCkrbHQuc2xpY2UoX3QpLnJlcGxhY2UoaiwiIik6bHQ9bHQucmVwbGFjZShqLCIiKSwhKGx0Lmxlbmd0aDw9V1swXS5sZW5ndGgpJiYhKEMuaWdub3JlJiZDLmlnbm9yZS50ZXN0KGx0KSkpe2F0PVIrbHQubGVuZ3RoO3ZhciBndD1TKGx0LFIsYXQsQSk7aWYoZ3Q9PT12b2lkIDApe0wubGFzdEluZGV4PWF0O2NvbnRpbnVlfWd0PVN0cmluZyhndCksQT1BLnNsaWNlKDAsUikrZ3QrQS5zbGljZShhdCksTC5sYXN0SW5kZXg9UitndC5sZW5ndGh9fXJldHVybiBMLmxhc3RJbmRleD0wLEF9LGkuZW5zdXJlVmFsaWRIb3N0bmFtZT1mdW5jdGlvbihBLFMpe3ZhciBDPSEhQSxMPSEhUyx6PSExO2lmKEwmJih6PWgoaS5ob3N0UHJvdG9jb2xzLFMpKSx6JiYhQyl0aHJvdyBuZXcgVHlwZUVycm9yKCJIb3N0bmFtZSBjYW5ub3QgYmUgZW1wdHksIGlmIHByb3RvY29sIGlzICIrUyk7aWYoQSYmQS5tYXRjaChpLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpe2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLTpfXSBhbmQgUHVueWNvZGUuanMgaXMgbm90IGF2YWlsYWJsZScpO2lmKHQudG9BU0NJSShBKS5tYXRjaChpLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tOl9dJyl9fSxpLmVuc3VyZVZhbGlkUG9ydD1mdW5jdGlvbihBKXtpZihBKXt2YXIgUz1OdW1iZXIoQSk7aWYoIShzKFMpJiZTPjAmJlM8NjU1MzYpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1BvcnQgIicrQSsnIiBpcyBub3QgYSB2YWxpZCBwb3J0Jyl9fSxpLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oQSl7aWYoQSl7dmFyIFM9e1VSSTp0aGlzLm5vQ29uZmxpY3QoKX07cmV0dXJuIG8uVVJJVGVtcGxhdGUmJnR5cGVvZiBvLlVSSVRlbXBsYXRlLm5vQ29uZmxpY3Q9PSJmdW5jdGlvbiImJihTLlVSSVRlbXBsYXRlPW8uVVJJVGVtcGxhdGUubm9Db25mbGljdCgpKSxvLklQdjYmJnR5cGVvZiBvLklQdjYubm9Db25mbGljdD09ImZ1bmN0aW9uIiYmKFMuSVB2Nj1vLklQdjYubm9Db25mbGljdCgpKSxvLlNlY29uZExldmVsRG9tYWlucyYmdHlwZW9mIG8uU2Vjb25kTGV2ZWxEb21haW5zLm5vQ29uZmxpY3Q9PSJmdW5jdGlvbiImJihTLlNlY29uZExldmVsRG9tYWlucz1vLlNlY29uZExldmVsRG9tYWlucy5ub0NvbmZsaWN0KCkpLFN9ZWxzZSBvLlVSST09PXRoaXMmJihvLlVSST1yKTtyZXR1cm4gdGhpc30sZi5idWlsZD1mdW5jdGlvbihBKXtyZXR1cm4gQT09PSEwP3RoaXMuX2RlZmVycmVkX2J1aWxkPSEwOihBPT09dm9pZCAwfHx0aGlzLl9kZWZlcnJlZF9idWlsZCkmJih0aGlzLl9zdHJpbmc9aS5idWlsZCh0aGlzLl9wYXJ0cyksdGhpcy5fZGVmZXJyZWRfYnVpbGQ9ITEpLHRoaXN9LGYuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkodGhpcyl9LGYudmFsdWVPZj1mLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVpbGQoITEpLl9zdHJpbmd9O2Z1bmN0aW9uIE0oQSl7cmV0dXJuIGZ1bmN0aW9uKFMsQyl7cmV0dXJuIFM9PT12b2lkIDA/dGhpcy5fcGFydHNbQV18fCIiOih0aGlzLl9wYXJ0c1tBXT1TfHxudWxsLHRoaXMuYnVpbGQoIUMpLHRoaXMpfX1mdW5jdGlvbiBOKEEsUyl7cmV0dXJuIGZ1bmN0aW9uKEMsTCl7cmV0dXJuIEM9PT12b2lkIDA/dGhpcy5fcGFydHNbQV18fCIiOihDIT09bnVsbCYmKEM9QysiIixDLmNoYXJBdCgwKT09PVMmJihDPUMuc3Vic3RyaW5nKDEpKSksdGhpcy5fcGFydHNbQV09Qyx0aGlzLmJ1aWxkKCFMKSx0aGlzKX19Zi5wcm90b2NvbD1NKCJwcm90b2NvbCIpLGYudXNlcm5hbWU9TSgidXNlcm5hbWUiKSxmLnBhc3N3b3JkPU0oInBhc3N3b3JkIiksZi5ob3N0bmFtZT1NKCJob3N0bmFtZSIpLGYucG9ydD1NKCJwb3J0IiksZi5xdWVyeT1OKCJxdWVyeSIsIj8iKSxmLmZyYWdtZW50PU4oImZyYWdtZW50IiwiIyIpLGYuc2VhcmNoPWZ1bmN0aW9uKEEsUyl7dmFyIEM9dGhpcy5xdWVyeShBLFMpO3JldHVybiB0eXBlb2YgQz09InN0cmluZyImJkMubGVuZ3RoPyI/IitDOkN9LGYuaGFzaD1mdW5jdGlvbihBLFMpe3ZhciBDPXRoaXMuZnJhZ21lbnQoQSxTKTtyZXR1cm4gdHlwZW9mIEM9PSJzdHJpbmciJiZDLmxlbmd0aD8iIyIrQzpDfSxmLnBhdGhuYW1lPWZ1bmN0aW9uKEEsUyl7aWYoQT09PXZvaWQgMHx8QT09PSEwKXt2YXIgQz10aGlzLl9wYXJ0cy5wYXRofHwodGhpcy5fcGFydHMuaG9zdG5hbWU/Ii8iOiIiKTtyZXR1cm4gQT8odGhpcy5fcGFydHMudXJuP2kuZGVjb2RlVXJuUGF0aDppLmRlY29kZVBhdGgpKEMpOkN9ZWxzZSByZXR1cm4gdGhpcy5fcGFydHMudXJuP3RoaXMuX3BhcnRzLnBhdGg9QT9pLnJlY29kZVVyblBhdGgoQSk6IiI6dGhpcy5fcGFydHMucGF0aD1BP2kucmVjb2RlUGF0aChBKToiLyIsdGhpcy5idWlsZCghUyksdGhpc30sZi5wYXRoPWYucGF0aG5hbWUsZi5ocmVmPWZ1bmN0aW9uKEEsUyl7dmFyIEM7aWYoQT09PXZvaWQgMClyZXR1cm4gdGhpcy50b1N0cmluZygpO3RoaXMuX3N0cmluZz0iIix0aGlzLl9wYXJ0cz1pLl9wYXJ0cygpO3ZhciBMPUEgaW5zdGFuY2VvZiBpLHo9dHlwZW9mIEE9PSJvYmplY3QiJiYoQS5ob3N0bmFtZXx8QS5wYXRofHxBLnBhdGhuYW1lKTtpZihBLm5vZGVOYW1lKXt2YXIgaj1pLmdldERvbUF0dHJpYnV0ZShBKTtBPUFbal18fCIiLHo9ITF9aWYoIUwmJnomJkEucGF0aG5hbWUhPT12b2lkIDAmJihBPUEudG9TdHJpbmcoKSksdHlwZW9mIEE9PSJzdHJpbmcifHxBIGluc3RhbmNlb2YgU3RyaW5nKXRoaXMuX3BhcnRzPWkucGFyc2UoU3RyaW5nKEEpLHRoaXMuX3BhcnRzKTtlbHNlIGlmKEx8fHope3ZhciBrPUw/QS5fcGFydHM6QTtmb3IoQyBpbiBrKUMhPT0icXVlcnkiJiZ1LmNhbGwodGhpcy5fcGFydHMsQykmJih0aGlzLl9wYXJ0c1tDXT1rW0NdKTtrLnF1ZXJ5JiZ0aGlzLnF1ZXJ5KGsucXVlcnksITEpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpbnB1dCIpO3JldHVybiB0aGlzLmJ1aWxkKCFTKSx0aGlzfSxmLmlzPWZ1bmN0aW9uKEEpe3ZhciBTPSExLEM9ITEsTD0hMSx6PSExLGo9ITEsaz0hMSxxPSExLFc9IXRoaXMuX3BhcnRzLnVybjtzd2l0Y2godGhpcy5fcGFydHMuaG9zdG5hbWUmJihXPSExLEM9aS5pcDRfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSxMPWkuaXA2X2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSksUz1DfHxMLHo9IVMsaj16JiZuJiZuLmhhcyh0aGlzLl9wYXJ0cy5ob3N0bmFtZSksaz16JiZpLmlkbl9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpLHE9eiYmaS5wdW55Y29kZV9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpKSxBLnRvTG93ZXJDYXNlKCkpe2Nhc2UicmVsYXRpdmUiOnJldHVybiBXO2Nhc2UiYWJzb2x1dGUiOnJldHVybiFXO2Nhc2UiZG9tYWluIjpjYXNlIm5hbWUiOnJldHVybiB6O2Nhc2Uic2xkIjpyZXR1cm4gajtjYXNlImlwIjpyZXR1cm4gUztjYXNlImlwNCI6Y2FzZSJpcHY0IjpjYXNlImluZXQ0IjpyZXR1cm4gQztjYXNlImlwNiI6Y2FzZSJpcHY2IjpjYXNlImluZXQ2IjpyZXR1cm4gTDtjYXNlImlkbiI6cmV0dXJuIGs7Y2FzZSJ1cmwiOnJldHVybiF0aGlzLl9wYXJ0cy51cm47Y2FzZSJ1cm4iOnJldHVybiEhdGhpcy5fcGFydHMudXJuO2Nhc2UicHVueWNvZGUiOnJldHVybiBxfXJldHVybiBudWxsfTt2YXIgRj1mLnByb3RvY29sLEk9Zi5wb3J0LHY9Zi5ob3N0bmFtZTtmLnByb3RvY29sPWZ1bmN0aW9uKEEsUyl7aWYoQSYmKEE9QS5yZXBsYWNlKC86KFwvXC8pPyQvLCIiKSwhQS5tYXRjaChpLnByb3RvY29sX2V4cHJlc3Npb24pKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm90b2NvbCAiJytBK2AiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05ListXSBvciBkb2Vzbid0IHN0YXJ0IHdpdGggW0EtWl1gKTtyZXR1cm4gRi5jYWxsKHRoaXMsQSxTKX0sZi5zY2hlbWU9Zi5wcm90b2NvbCxmLnBvcnQ9ZnVuY3Rpb24oQSxTKXtyZXR1cm4gdGhpcy5fcGFydHMudXJuP0E9PT12b2lkIDA/IiI6dGhpczooQSE9PXZvaWQgMCYmKEE9PT0wJiYoQT1udWxsKSxBJiYoQSs9IiIsQS5jaGFyQXQoMCk9PT0iOiImJihBPUEuc3Vic3RyaW5nKDEpKSxpLmVuc3VyZVZhbGlkUG9ydChBKSkpLEkuY2FsbCh0aGlzLEEsUykpfSxmLmhvc3RuYW1lPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQSE9PXZvaWQgMCl7dmFyIEM9e3ByZXZlbnRJbnZhbGlkSG9zdG5hbWU6dGhpcy5fcGFydHMucHJldmVudEludmFsaWRIb3N0bmFtZX0sTD1pLnBhcnNlSG9zdChBLEMpO2lmKEwhPT0iLyIpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO0E9Qy5ob3N0bmFtZSx0aGlzLl9wYXJ0cy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lJiZpLmVuc3VyZVZhbGlkSG9zdG5hbWUoQSx0aGlzLl9wYXJ0cy5wcm90b2NvbCl9cmV0dXJuIHYuY2FsbCh0aGlzLEEsUyl9LGYub3JpZ2luPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMCl7dmFyIEM9dGhpcy5wcm90b2NvbCgpLEw9dGhpcy5hdXRob3JpdHkoKTtyZXR1cm4gTD8oQz9DKyI6Ly8iOiIiKSt0aGlzLmF1dGhvcml0eSgpOiIifWVsc2V7dmFyIHo9aShBKTtyZXR1cm4gdGhpcy5wcm90b2NvbCh6LnByb3RvY29sKCkpLmF1dGhvcml0eSh6LmF1dGhvcml0eSgpKS5idWlsZCghUyksdGhpc319LGYuaG9zdD1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDApcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lP2kuYnVpbGRIb3N0KHRoaXMuX3BhcnRzKToiIjt2YXIgQz1pLnBhcnNlSG9zdChBLHRoaXMuX3BhcnRzKTtpZihDIT09Ii8iKXRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtyZXR1cm4gdGhpcy5idWlsZCghUyksdGhpc30sZi5hdXRob3JpdHk9ZnVuY3Rpb24oQSxTKXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZT9pLmJ1aWxkQXV0aG9yaXR5KHRoaXMuX3BhcnRzKToiIjt2YXIgQz1pLnBhcnNlQXV0aG9yaXR5KEEsdGhpcy5fcGFydHMpO2lmKEMhPT0iLyIpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO3JldHVybiB0aGlzLmJ1aWxkKCFTKSx0aGlzfSxmLnVzZXJpbmZvPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMCl7dmFyIEM9aS5idWlsZFVzZXJpbmZvKHRoaXMuX3BhcnRzKTtyZXR1cm4gQyYmQy5zdWJzdHJpbmcoMCxDLmxlbmd0aC0xKX1lbHNlIHJldHVybiBBW0EubGVuZ3RoLTFdIT09IkAiJiYoQSs9IkAiKSxpLnBhcnNlVXNlcmluZm8oQSx0aGlzLl9wYXJ0cyksdGhpcy5idWlsZCghUyksdGhpc30sZi5yZXNvdXJjZT1mdW5jdGlvbihBLFMpe3ZhciBDO3JldHVybiBBPT09dm9pZCAwP3RoaXMucGF0aCgpK3RoaXMuc2VhcmNoKCkrdGhpcy5oYXNoKCk6KEM9aS5wYXJzZShBKSx0aGlzLl9wYXJ0cy5wYXRoPUMucGF0aCx0aGlzLl9wYXJ0cy5xdWVyeT1DLnF1ZXJ5LHRoaXMuX3BhcnRzLmZyYWdtZW50PUMuZnJhZ21lbnQsdGhpcy5idWlsZCghUyksdGhpcyl9LGYuc3ViZG9tYWluPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMCl7aWYoIXRoaXMuX3BhcnRzLmhvc3RuYW1lfHx0aGlzLmlzKCJJUCIpKXJldHVybiIiO3ZhciBDPXRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aC10aGlzLmRvbWFpbigpLmxlbmd0aC0xO3JldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoMCxDKXx8IiJ9ZWxzZXt2YXIgTD10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGgtdGhpcy5kb21haW4oKS5sZW5ndGgsej10aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoMCxMKSxqPW5ldyBSZWdFeHAoIl4iK2MoeikpO2lmKEEmJkEuY2hhckF0KEEubGVuZ3RoLTEpIT09Ii4iJiYoQSs9Ii4iKSxBLmluZGV4T2YoIjoiKSE9PS0xKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbnMgY2Fubm90IGNvbnRhaW4gY29sb25zIik7cmV0dXJuIEEmJmkuZW5zdXJlVmFsaWRIb3N0bmFtZShBLHRoaXMuX3BhcnRzLnByb3RvY29sKSx0aGlzLl9wYXJ0cy5ob3N0bmFtZT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKGosQSksdGhpcy5idWlsZCghUyksdGhpc319LGYuZG9tYWluPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYodHlwZW9mIEE9PSJib29sZWFuIiYmKFM9QSxBPXZvaWQgMCksQT09PXZvaWQgMCl7aWYoIXRoaXMuX3BhcnRzLmhvc3RuYW1lfHx0aGlzLmlzKCJJUCIpKXJldHVybiIiO3ZhciBDPXRoaXMuX3BhcnRzLmhvc3RuYW1lLm1hdGNoKC9cLi9nKTtpZihDJiZDLmxlbmd0aDwyKXJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZTt2YXIgTD10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGgtdGhpcy50bGQoUykubGVuZ3RoLTE7cmV0dXJuIEw9dGhpcy5fcGFydHMuaG9zdG5hbWUubGFzdEluZGV4T2YoIi4iLEwtMSkrMSx0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoTCl8fCIifWVsc2V7aWYoIUEpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2Fubm90IHNldCBkb21haW4gZW1wdHkiKTtpZihBLmluZGV4T2YoIjoiKSE9PS0xKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbnMgY2Fubm90IGNvbnRhaW4gY29sb25zIik7aWYoaS5lbnN1cmVWYWxpZEhvc3RuYW1lKEEsdGhpcy5fcGFydHMucHJvdG9jb2wpLCF0aGlzLl9wYXJ0cy5ob3N0bmFtZXx8dGhpcy5pcygiSVAiKSl0aGlzLl9wYXJ0cy5ob3N0bmFtZT1BO2Vsc2V7dmFyIHo9bmV3IFJlZ0V4cChjKHRoaXMuZG9tYWluKCkpKyIkIik7dGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZSh6LEEpfXJldHVybiB0aGlzLmJ1aWxkKCFTKSx0aGlzfX0sZi50bGQ9ZnVuY3Rpb24oQSxTKXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZih0eXBlb2YgQT09ImJvb2xlYW4iJiYoUz1BLEE9dm9pZCAwKSxBPT09dm9pZCAwKXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpcmV0dXJuIiI7dmFyIEM9dGhpcy5fcGFydHMuaG9zdG5hbWUubGFzdEluZGV4T2YoIi4iKSxMPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZyhDKzEpO3JldHVybiBTIT09ITAmJm4mJm4ubGlzdFtMLnRvTG93ZXJDYXNlKCldJiZuLmdldCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSl8fEx9ZWxzZXt2YXIgejtpZihBKWlmKEEubWF0Y2goL1teYS16QS1aMC05LV0vKSlpZihuJiZuLmlzKEEpKXo9bmV3IFJlZ0V4cChjKHRoaXMudGxkKCkpKyIkIiksdGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZSh6LEEpO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcignVExEICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTldJyk7ZWxzZXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJjYW5ub3Qgc2V0IFRMRCBvbiBub24tZG9tYWluIGhvc3QiKTt6PW5ldyBSZWdFeHAoYyh0aGlzLnRsZCgpKSsiJCIpLHRoaXMuX3BhcnRzLmhvc3RuYW1lPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UoeixBKX1lbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbm5vdCBzZXQgVExEIGVtcHR5Iik7cmV0dXJuIHRoaXMuYnVpbGQoIVMpLHRoaXN9fSxmLmRpcmVjdG9yeT1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDB8fEE9PT0hMCl7aWYoIXRoaXMuX3BhcnRzLnBhdGgmJiF0aGlzLl9wYXJ0cy5ob3N0bmFtZSlyZXR1cm4iIjtpZih0aGlzLl9wYXJ0cy5wYXRoPT09Ii8iKXJldHVybiIvIjt2YXIgQz10aGlzLl9wYXJ0cy5wYXRoLmxlbmd0aC10aGlzLmZpbGVuYW1lKCkubGVuZ3RoLTEsTD10aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLEMpfHwodGhpcy5fcGFydHMuaG9zdG5hbWU/Ii8iOiIiKTtyZXR1cm4gQT9pLmRlY29kZVBhdGgoTCk6TH1lbHNle3ZhciB6PXRoaXMuX3BhcnRzLnBhdGgubGVuZ3RoLXRoaXMuZmlsZW5hbWUoKS5sZW5ndGgsaj10aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLHopLGs9bmV3IFJlZ0V4cCgiXiIrYyhqKSk7cmV0dXJuIHRoaXMuaXMoInJlbGF0aXZlIil8fChBfHwoQT0iLyIpLEEuY2hhckF0KDApIT09Ii8iJiYoQT0iLyIrQSkpLEEmJkEuY2hhckF0KEEubGVuZ3RoLTEpIT09Ii8iJiYoQSs9Ii8iKSxBPWkucmVjb2RlUGF0aChBKSx0aGlzLl9wYXJ0cy5wYXRoPXRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShrLEEpLHRoaXMuYnVpbGQoIVMpLHRoaXN9fSxmLmZpbGVuYW1lPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYodHlwZW9mIEEhPSJzdHJpbmciKXtpZighdGhpcy5fcGFydHMucGF0aHx8dGhpcy5fcGFydHMucGF0aD09PSIvIilyZXR1cm4iIjt2YXIgQz10aGlzLl9wYXJ0cy5wYXRoLmxhc3RJbmRleE9mKCIvIiksTD10aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZyhDKzEpO3JldHVybiBBP2kuZGVjb2RlUGF0aFNlZ21lbnQoTCk6TH1lbHNle3ZhciB6PSExO0EuY2hhckF0KDApPT09Ii8iJiYoQT1BLnN1YnN0cmluZygxKSksQS5tYXRjaCgvXC4/XC8vKSYmKHo9ITApO3ZhciBqPW5ldyBSZWdFeHAoYyh0aGlzLmZpbGVuYW1lKCkpKyIkIik7cmV0dXJuIEE9aS5yZWNvZGVQYXRoKEEpLHRoaXMuX3BhcnRzLnBhdGg9dGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKGosQSksej90aGlzLm5vcm1hbGl6ZVBhdGgoUyk6dGhpcy5idWlsZCghUyksdGhpc319LGYuc3VmZml4PWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMHx8QT09PSEwKXtpZighdGhpcy5fcGFydHMucGF0aHx8dGhpcy5fcGFydHMucGF0aD09PSIvIilyZXR1cm4iIjt2YXIgQz10aGlzLmZpbGVuYW1lKCksTD1DLmxhc3RJbmRleE9mKCIuIikseixqO3JldHVybiBMPT09LTE/IiI6KHo9Qy5zdWJzdHJpbmcoTCsxKSxqPS9eW2EtejAtOSVdKyQvaS50ZXN0KHopP3o6IiIsQT9pLmRlY29kZVBhdGhTZWdtZW50KGopOmopfWVsc2V7QS5jaGFyQXQoMCk9PT0iLiImJihBPUEuc3Vic3RyaW5nKDEpKTt2YXIgaz10aGlzLnN1ZmZpeCgpLHE7aWYoaylBP3E9bmV3IFJlZ0V4cChjKGspKyIkIik6cT1uZXcgUmVnRXhwKGMoIi4iK2spKyIkIik7ZWxzZXtpZighQSlyZXR1cm4gdGhpczt0aGlzLl9wYXJ0cy5wYXRoKz0iLiIraS5yZWNvZGVQYXRoKEEpfXJldHVybiBxJiYoQT1pLnJlY29kZVBhdGgoQSksdGhpcy5fcGFydHMucGF0aD10aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UocSxBKSksdGhpcy5idWlsZCghUyksdGhpc319LGYuc2VnbWVudD1mdW5jdGlvbihBLFMsQyl7dmFyIEw9dGhpcy5fcGFydHMudXJuPyI6IjoiLyIsej10aGlzLnBhdGgoKSxqPXouc3Vic3RyaW5nKDAsMSk9PT0iLyIsaz16LnNwbGl0KEwpO2lmKEEhPT12b2lkIDAmJnR5cGVvZiBBIT0ibnVtYmVyIiYmKEM9UyxTPUEsQT12b2lkIDApLEEhPT12b2lkIDAmJnR5cGVvZiBBIT0ibnVtYmVyIil0aHJvdyBuZXcgRXJyb3IoJ0JhZCBzZWdtZW50ICInK0ErJyIsIG11c3QgYmUgMC1iYXNlZCBpbnRlZ2VyJyk7aWYoaiYmay5zaGlmdCgpLEE8MCYmKEE9TWF0aC5tYXgoay5sZW5ndGgrQSwwKSksUz09PXZvaWQgMClyZXR1cm4gQT09PXZvaWQgMD9rOmtbQV07aWYoQT09PW51bGx8fGtbQV09PT12b2lkIDApaWYocChTKSl7az1bXTtmb3IodmFyIHE9MCxXPVMubGVuZ3RoO3E8VztxKyspIVNbcV0ubGVuZ3RoJiYoIWsubGVuZ3RofHwha1trLmxlbmd0aC0xXS5sZW5ndGgpfHwoay5sZW5ndGgmJiFrW2subGVuZ3RoLTFdLmxlbmd0aCYmay5wb3AoKSxrLnB1c2goZyhTW3FdKSkpfWVsc2UoU3x8dHlwZW9mIFM9PSJzdHJpbmciKSYmKFM9ZyhTKSxrW2subGVuZ3RoLTFdPT09IiI/a1trLmxlbmd0aC0xXT1TOmsucHVzaChTKSk7ZWxzZSBTP2tbQV09ZyhTKTprLnNwbGljZShBLDEpO3JldHVybiBqJiZrLnVuc2hpZnQoIiIpLHRoaXMucGF0aChrLmpvaW4oTCksQyl9LGYuc2VnbWVudENvZGVkPWZ1bmN0aW9uKEEsUyxDKXt2YXIgTCx6LGo7aWYodHlwZW9mIEEhPSJudW1iZXIiJiYoQz1TLFM9QSxBPXZvaWQgMCksUz09PXZvaWQgMCl7aWYoTD10aGlzLnNlZ21lbnQoQSxTLEMpLCFwKEwpKUw9TCE9PXZvaWQgMD9pLmRlY29kZShMKTp2b2lkIDA7ZWxzZSBmb3Ioej0wLGo9TC5sZW5ndGg7ejxqO3orKylMW3pdPWkuZGVjb2RlKExbel0pO3JldHVybiBMfWlmKCFwKFMpKVM9dHlwZW9mIFM9PSJzdHJpbmcifHxTIGluc3RhbmNlb2YgU3RyaW5nP2kuZW5jb2RlKFMpOlM7ZWxzZSBmb3Ioej0wLGo9Uy5sZW5ndGg7ejxqO3orKylTW3pdPWkuZW5jb2RlKFNbel0pO3JldHVybiB0aGlzLnNlZ21lbnQoQSxTLEMpfTt2YXIgQj1mLnF1ZXJ5O3JldHVybiBmLnF1ZXJ5PWZ1bmN0aW9uKEEsUyl7aWYoQT09PSEwKXJldHVybiBpLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7aWYodHlwZW9mIEE9PSJmdW5jdGlvbiIpe3ZhciBDPWkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSxMPUEuY2FsbCh0aGlzLEMpO3JldHVybiB0aGlzLl9wYXJ0cy5xdWVyeT1pLmJ1aWxkUXVlcnkoTHx8Qyx0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdGhpcy5idWlsZCghUyksdGhpc31lbHNlIHJldHVybiBBIT09dm9pZCAwJiZ0eXBlb2YgQSE9InN0cmluZyI/KHRoaXMuX3BhcnRzLnF1ZXJ5PWkuYnVpbGRRdWVyeShBLHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSx0aGlzLmJ1aWxkKCFTKSx0aGlzKTpCLmNhbGwodGhpcyxBLFMpfSxmLnNldFF1ZXJ5PWZ1bmN0aW9uKEEsUyxDKXt2YXIgTD1pLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7aWYodHlwZW9mIEE9PSJzdHJpbmcifHxBIGluc3RhbmNlb2YgU3RyaW5nKUxbQV09UyE9PXZvaWQgMD9TOm51bGw7ZWxzZSBpZih0eXBlb2YgQT09Im9iamVjdCIpZm9yKHZhciB6IGluIEEpdS5jYWxsKEEseikmJihMW3pdPUFbel0pO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmFkZFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKTtyZXR1cm4gdGhpcy5fcGFydHMucXVlcnk9aS5idWlsZFF1ZXJ5KEwsdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHR5cGVvZiBBIT0ic3RyaW5nIiYmKEM9UyksdGhpcy5idWlsZCghQyksdGhpc30sZi5hZGRRdWVyeT1mdW5jdGlvbihBLFMsQyl7dmFyIEw9aS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO3JldHVybiBpLmFkZFF1ZXJ5KEwsQSxTPT09dm9pZCAwP251bGw6UyksdGhpcy5fcGFydHMucXVlcnk9aS5idWlsZFF1ZXJ5KEwsdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHR5cGVvZiBBIT0ic3RyaW5nIiYmKEM9UyksdGhpcy5idWlsZCghQyksdGhpc30sZi5yZW1vdmVRdWVyeT1mdW5jdGlvbihBLFMsQyl7dmFyIEw9aS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO3JldHVybiBpLnJlbW92ZVF1ZXJ5KEwsQSxTKSx0aGlzLl9wYXJ0cy5xdWVyeT1pLmJ1aWxkUXVlcnkoTCx0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdHlwZW9mIEEhPSJzdHJpbmciJiYoQz1TKSx0aGlzLmJ1aWxkKCFDKSx0aGlzfSxmLmhhc1F1ZXJ5PWZ1bmN0aW9uKEEsUyxDKXt2YXIgTD1pLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7cmV0dXJuIGkuaGFzUXVlcnkoTCxBLFMsQyl9LGYuc2V0U2VhcmNoPWYuc2V0UXVlcnksZi5hZGRTZWFyY2g9Zi5hZGRRdWVyeSxmLnJlbW92ZVNlYXJjaD1mLnJlbW92ZVF1ZXJ5LGYuaGFzU2VhcmNoPWYuaGFzUXVlcnksZi5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFydHMudXJuP3RoaXMubm9ybWFsaXplUHJvdG9jb2woITEpLm5vcm1hbGl6ZVBhdGgoITEpLm5vcm1hbGl6ZVF1ZXJ5KCExKS5ub3JtYWxpemVGcmFnbWVudCghMSkuYnVpbGQoKTp0aGlzLm5vcm1hbGl6ZVByb3RvY29sKCExKS5ub3JtYWxpemVIb3N0bmFtZSghMSkubm9ybWFsaXplUG9ydCghMSkubm9ybWFsaXplUGF0aCghMSkubm9ybWFsaXplUXVlcnkoITEpLm5vcm1hbGl6ZUZyYWdtZW50KCExKS5idWlsZCgpfSxmLm5vcm1hbGl6ZVByb3RvY29sPWZ1bmN0aW9uKEEpe3JldHVybiB0eXBlb2YgdGhpcy5fcGFydHMucHJvdG9jb2w9PSJzdHJpbmciJiYodGhpcy5fcGFydHMucHJvdG9jb2w9dGhpcy5fcGFydHMucHJvdG9jb2wudG9Mb3dlckNhc2UoKSx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVIb3N0bmFtZT1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUmJih0aGlzLmlzKCJJRE4iKSYmdD90aGlzLl9wYXJ0cy5ob3N0bmFtZT10LnRvQVNDSUkodGhpcy5fcGFydHMuaG9zdG5hbWUpOnRoaXMuaXMoIklQdjYiKSYmZSYmKHRoaXMuX3BhcnRzLmhvc3RuYW1lPWUuYmVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkpLHRoaXMuX3BhcnRzLmhvc3RuYW1lPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCksdGhpcy5idWlsZCghQSkpLHRoaXN9LGYubm9ybWFsaXplUG9ydD1mdW5jdGlvbihBKXtyZXR1cm4gdHlwZW9mIHRoaXMuX3BhcnRzLnByb3RvY29sPT0ic3RyaW5nIiYmdGhpcy5fcGFydHMucG9ydD09PWkuZGVmYXVsdFBvcnRzW3RoaXMuX3BhcnRzLnByb3RvY29sXSYmKHRoaXMuX3BhcnRzLnBvcnQ9bnVsbCx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVQYXRoPWZ1bmN0aW9uKEEpe3ZhciBTPXRoaXMuX3BhcnRzLnBhdGg7aWYoIVMpcmV0dXJuIHRoaXM7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiB0aGlzLl9wYXJ0cy5wYXRoPWkucmVjb2RlVXJuUGF0aCh0aGlzLl9wYXJ0cy5wYXRoKSx0aGlzLmJ1aWxkKCFBKSx0aGlzO2lmKHRoaXMuX3BhcnRzLnBhdGg9PT0iLyIpcmV0dXJuIHRoaXM7Uz1pLnJlY29kZVBhdGgoUyk7dmFyIEMsTD0iIix6LGo7Zm9yKFMuY2hhckF0KDApIT09Ii8iJiYoQz0hMCxTPSIvIitTKSwoUy5zbGljZSgtMyk9PT0iLy4uInx8Uy5zbGljZSgtMik9PT0iLy4iKSYmKFMrPSIvIiksUz1TLnJlcGxhY2UoLyhcLyhcLlwvKSspfChcL1wuJCkvZywiLyIpLnJlcGxhY2UoL1wvezIsfS9nLCIvIiksQyYmKEw9Uy5zdWJzdHJpbmcoMSkubWF0Y2goL14oXC5cLlwvKSsvKXx8IiIsTCYmKEw9TFswXSkpO3o9Uy5zZWFyY2goL1wvXC5cLihcL3wkKS8pLHohPT0tMTspe2lmKHo9PT0wKXtTPVMuc3Vic3RyaW5nKDMpO2NvbnRpbnVlfWo9Uy5zdWJzdHJpbmcoMCx6KS5sYXN0SW5kZXhPZigiLyIpLGo9PT0tMSYmKGo9eiksUz1TLnN1YnN0cmluZygwLGopK1Muc3Vic3RyaW5nKHorMyl9cmV0dXJuIEMmJnRoaXMuaXMoInJlbGF0aXZlIikmJihTPUwrUy5zdWJzdHJpbmcoMSkpLHRoaXMuX3BhcnRzLnBhdGg9Uyx0aGlzLmJ1aWxkKCFBKSx0aGlzfSxmLm5vcm1hbGl6ZVBhdGhuYW1lPWYubm9ybWFsaXplUGF0aCxmLm5vcm1hbGl6ZVF1ZXJ5PWZ1bmN0aW9uKEEpe3JldHVybiB0eXBlb2YgdGhpcy5fcGFydHMucXVlcnk9PSJzdHJpbmciJiYodGhpcy5fcGFydHMucXVlcnkubGVuZ3RoP3RoaXMucXVlcnkoaS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpKTp0aGlzLl9wYXJ0cy5xdWVyeT1udWxsLHRoaXMuYnVpbGQoIUEpKSx0aGlzfSxmLm5vcm1hbGl6ZUZyYWdtZW50PWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5mcmFnbWVudHx8KHRoaXMuX3BhcnRzLmZyYWdtZW50PW51bGwsdGhpcy5idWlsZCghQSkpLHRoaXN9LGYubm9ybWFsaXplU2VhcmNoPWYubm9ybWFsaXplUXVlcnksZi5ub3JtYWxpemVIYXNoPWYubm9ybWFsaXplRnJhZ21lbnQsZi5pc284ODU5PWZ1bmN0aW9uKCl7dmFyIEE9aS5lbmNvZGUsUz1pLmRlY29kZTtpLmVuY29kZT1lc2NhcGUsaS5kZWNvZGU9ZGVjb2RlVVJJQ29tcG9uZW50O3RyeXt0aGlzLm5vcm1hbGl6ZSgpfWZpbmFsbHl7aS5lbmNvZGU9QSxpLmRlY29kZT1TfXJldHVybiB0aGlzfSxmLnVuaWNvZGU9ZnVuY3Rpb24oKXt2YXIgQT1pLmVuY29kZSxTPWkuZGVjb2RlO2kuZW5jb2RlPXcsaS5kZWNvZGU9dW5lc2NhcGU7dHJ5e3RoaXMubm9ybWFsaXplKCl9ZmluYWxseXtpLmVuY29kZT1BLGkuZGVjb2RlPVN9cmV0dXJuIHRoaXN9LGYucmVhZGFibGU9ZnVuY3Rpb24oKXt2YXIgQT10aGlzLmNsb25lKCk7QS51c2VybmFtZSgiIikucGFzc3dvcmQoIiIpLm5vcm1hbGl6ZSgpO3ZhciBTPSIiO2lmKEEuX3BhcnRzLnByb3RvY29sJiYoUys9QS5fcGFydHMucHJvdG9jb2wrIjovLyIpLEEuX3BhcnRzLmhvc3RuYW1lJiYoQS5pcygicHVueWNvZGUiKSYmdD8oUys9dC50b1VuaWNvZGUoQS5fcGFydHMuaG9zdG5hbWUpLEEuX3BhcnRzLnBvcnQmJihTKz0iOiIrQS5fcGFydHMucG9ydCkpOlMrPUEuaG9zdCgpKSxBLl9wYXJ0cy5ob3N0bmFtZSYmQS5fcGFydHMucGF0aCYmQS5fcGFydHMucGF0aC5jaGFyQXQoMCkhPT0iLyImJihTKz0iLyIpLFMrPUEucGF0aCghMCksQS5fcGFydHMucXVlcnkpe2Zvcih2YXIgQz0iIixMPTAsej1BLl9wYXJ0cy5xdWVyeS5zcGxpdCgiJiIpLGo9ei5sZW5ndGg7TDxqO0wrKyl7dmFyIGs9KHpbTF18fCIiKS5zcGxpdCgiPSIpO0MrPSImIitpLmRlY29kZVF1ZXJ5KGtbMF0sdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSkucmVwbGFjZSgvJi9nLCIlMjYiKSxrWzFdIT09dm9pZCAwJiYoQys9Ij0iK2kuZGVjb2RlUXVlcnkoa1sxXSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKS5yZXBsYWNlKC8mL2csIiUyNiIpKX1TKz0iPyIrQy5zdWJzdHJpbmcoMSl9cmV0dXJuIFMrPWkuZGVjb2RlUXVlcnkoQS5oYXNoKCksITApLFN9LGYuYWJzb2x1dGVUbz1mdW5jdGlvbihBKXt2YXIgUz10aGlzLmNsb25lKCksQz1bInByb3RvY29sIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImhvc3RuYW1lIiwicG9ydCJdLEwseixqO2lmKHRoaXMuX3BhcnRzLnVybil0aHJvdyBuZXcgRXJyb3IoIlVSTnMgZG8gbm90IGhhdmUgYW55IGdlbmVyYWxseSBkZWZpbmVkIGhpZXJhcmNoaWNhbCBjb21wb25lbnRzIik7aWYoQSBpbnN0YW5jZW9mIGl8fChBPW5ldyBpKEEpKSxTLl9wYXJ0cy5wcm90b2NvbHx8KFMuX3BhcnRzLnByb3RvY29sPUEuX3BhcnRzLnByb3RvY29sLHRoaXMuX3BhcnRzLmhvc3RuYW1lKSlyZXR1cm4gUztmb3Ioej0wO2o9Q1t6XTt6KyspUy5fcGFydHNbal09QS5fcGFydHNbal07cmV0dXJuIFMuX3BhcnRzLnBhdGg/KFMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKC0yKT09PSIuLiImJihTLl9wYXJ0cy5wYXRoKz0iLyIpLFMucGF0aCgpLmNoYXJBdCgwKSE9PSIvIiYmKEw9QS5kaXJlY3RvcnkoKSxMPUx8fChBLnBhdGgoKS5pbmRleE9mKCIvIik9PT0wPyIvIjoiIiksUy5fcGFydHMucGF0aD0oTD9MKyIvIjoiIikrUy5fcGFydHMucGF0aCxTLm5vcm1hbGl6ZVBhdGgoKSkpOihTLl9wYXJ0cy5wYXRoPUEuX3BhcnRzLnBhdGgsUy5fcGFydHMucXVlcnl8fChTLl9wYXJ0cy5xdWVyeT1BLl9wYXJ0cy5xdWVyeSkpLFMuYnVpbGQoKSxTfSxmLnJlbGF0aXZlVG89ZnVuY3Rpb24oQSl7dmFyIFM9dGhpcy5jbG9uZSgpLm5vcm1hbGl6ZSgpLEMsTCx6LGosaztpZihTLl9wYXJ0cy51cm4pdGhyb3cgbmV3IEVycm9yKCJVUk5zIGRvIG5vdCBoYXZlIGFueSBnZW5lcmFsbHkgZGVmaW5lZCBoaWVyYXJjaGljYWwgY29tcG9uZW50cyIpO2lmKEE9bmV3IGkoQSkubm9ybWFsaXplKCksQz1TLl9wYXJ0cyxMPUEuX3BhcnRzLGo9Uy5wYXRoKCksaz1BLnBhdGgoKSxqLmNoYXJBdCgwKSE9PSIvIil0aHJvdyBuZXcgRXJyb3IoIlVSSSBpcyBhbHJlYWR5IHJlbGF0aXZlIik7aWYoay5jaGFyQXQoMCkhPT0iLyIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIGEgVVJJIHJlbGF0aXZlIHRvIGFub3RoZXIgcmVsYXRpdmUgVVJJIik7aWYoQy5wcm90b2NvbD09PUwucHJvdG9jb2wmJihDLnByb3RvY29sPW51bGwpLEMudXNlcm5hbWUhPT1MLnVzZXJuYW1lfHxDLnBhc3N3b3JkIT09TC5wYXNzd29yZHx8Qy5wcm90b2NvbCE9PW51bGx8fEMudXNlcm5hbWUhPT1udWxsfHxDLnBhc3N3b3JkIT09bnVsbClyZXR1cm4gUy5idWlsZCgpO2lmKEMuaG9zdG5hbWU9PT1MLmhvc3RuYW1lJiZDLnBvcnQ9PT1MLnBvcnQpQy5ob3N0bmFtZT1udWxsLEMucG9ydD1udWxsO2Vsc2UgcmV0dXJuIFMuYnVpbGQoKTtpZihqPT09aylyZXR1cm4gQy5wYXRoPSIiLFMuYnVpbGQoKTtpZih6PWkuY29tbW9uUGF0aChqLGspLCF6KXJldHVybiBTLmJ1aWxkKCk7dmFyIHE9TC5wYXRoLnN1YnN0cmluZyh6Lmxlbmd0aCkucmVwbGFjZSgvW15cL10qJC8sIiIpLnJlcGxhY2UoLy4qP1wvL2csIi4uLyIpO3JldHVybiBDLnBhdGg9cStDLnBhdGguc3Vic3RyaW5nKHoubGVuZ3RoKXx8Ii4vIixTLmJ1aWxkKCl9LGYuZXF1YWxzPWZ1bmN0aW9uKEEpe3ZhciBTPXRoaXMuY2xvbmUoKSxDPW5ldyBpKEEpLEw9e30sej17fSxqPXt9LGsscSxXO2lmKFMubm9ybWFsaXplKCksQy5ub3JtYWxpemUoKSxTLnRvU3RyaW5nKCk9PT1DLnRvU3RyaW5nKCkpcmV0dXJuITA7aWYoaz1TLnF1ZXJ5KCkscT1DLnF1ZXJ5KCksUy5xdWVyeSgiIiksQy5xdWVyeSgiIiksUy50b1N0cmluZygpIT09Qy50b1N0cmluZygpfHxrLmxlbmd0aCE9PXEubGVuZ3RoKXJldHVybiExO0w9aS5wYXJzZVF1ZXJ5KGssdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksej1pLnBhcnNlUXVlcnkocSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtmb3IoVyBpbiBMKWlmKHUuY2FsbChMLFcpKXtpZihwKExbV10pKXtpZighXyhMW1ddLHpbV10pKXJldHVybiExfWVsc2UgaWYoTFtXXSE9PXpbV10pcmV0dXJuITE7altXXT0hMH1mb3IoVyBpbiB6KWlmKHUuY2FsbCh6LFcpJiYhaltXXSlyZXR1cm4hMTtyZXR1cm4hMH0sZi5wcmV2ZW50SW52YWxpZEhvc3RuYW1lPWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lPSEhQSx0aGlzfSxmLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycz1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzPSEhQSx0aGlzfSxmLmVzY2FwZVF1ZXJ5U3BhY2U9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2U9ISFBLHRoaXN9LGl9KX0pO2Z1bmN0aW9uIGJDKHQpe3JldHVybih0Lmxlbmd0aD09PTB8fHRbdC5sZW5ndGgtMV0hPT0iLyIpJiYodD1gJHt0fS9gKSx0fXZhciBYMSxZMT0kKCgpPT57WDE9YkN9KTtmdW5jdGlvbiAkMSh0LGUpe2lmKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpcmV0dXJuIHQ7ZT1lPz8hMTtsZXQgbj1uZXcgdC5jb25zdHJ1Y3Rvcjtmb3IobGV0IG8gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG8pKXtsZXQgcj10W29dO2UmJihyPSQxKHIsZSkpLG5bb109cn1yZXR1cm4gbn12YXIgJGMsWjE9JCgoKT0+eyRjPSQxfSk7ZnVuY3Rpb24gUTEodCxlLG4pe249bj8/ITE7bGV0IG89e30scj1tKHQpLGk9bShlKSxzLGYsdTtpZihyKWZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKGY9dFtzXSxpJiZuJiZ0eXBlb2YgZj09Im9iamVjdCImJmUuaGFzT3duUHJvcGVydHkocyk/KHU9ZVtzXSx0eXBlb2YgdT09Im9iamVjdCI/b1tzXT1RMShmLHUsbik6b1tzXT1mKTpvW3NdPWYpO2lmKGkpZm9yKHMgaW4gZSllLmhhc093blByb3BlcnR5KHMpJiYhby5oYXNPd25Qcm9wZXJ0eShzKSYmKHU9ZVtzXSxvW3NdPXUpO3JldHVybiBvfXZhciB5cixjcD0kKCgpPT57ZnQoKTt5cj1RMX0pO2Z1bmN0aW9uIHdDKCl7bGV0IHQsZSxuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8scil7dD1vLGU9cn0pO3JldHVybntyZXNvbHZlOnQscmVqZWN0OmUscHJvbWlzZTpufX12YXIgSHMsem09JCgoKT0+e0hzPXdDfSk7ZnVuY3Rpb24gam0odCxlKXtsZXQgbjtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1IiYmKG49ZG9jdW1lbnQpLGptLl9pbXBsZW1lbnRhdGlvbih0LGUsbil9dmFyIEoxLHVmLEhtPSQoKCk9PntKMT1tcihqcygpLDEpO2Z0KCk7SHQoKTtqbS5faW1wbGVtZW50YXRpb249ZnVuY3Rpb24odCxlLG4pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJyZWxhdGl2ZSB1cmkgaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpe2lmKHR5cGVvZiBuPiJ1IilyZXR1cm4gdDtlPW4uYmFzZVVSST8/bi5sb2NhdGlvbi5ocmVmfWxldCBvPW5ldyBKMS5kZWZhdWx0KHQpO3JldHVybiBvLnNjaGVtZSgpIT09IiI/by50b1N0cmluZygpOm8uYWJzb2x1dGVUbyhlKS50b1N0cmluZygpfTt1Zj1qbX0pO2Z1bmN0aW9uIFRDKHQsZSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoInVyaSBpcyByZXF1aXJlZC4iKTtsZXQgbj0iIixvPXQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gbyE9PS0xJiYobj10LnN1YnN0cmluZygwLG8rMSkpLGUmJih0PW5ldyB0QS5kZWZhdWx0KHQpLHQucXVlcnkoKS5sZW5ndGghPT0wJiYobis9YD8ke3QucXVlcnkoKX1gKSx0LmZyYWdtZW50KCkubGVuZ3RoIT09MCYmKG4rPWAjJHt0LmZyYWdtZW50KCl9YCkpLG59dmFyIHRBLGVBLG5BPSQoKCk9Pnt0QT1tcihqcygpLDEpO2Z0KCk7SHQoKTtlQT1UQ30pO2Z1bmN0aW9uIE9DKHQpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJ1cmkgaXMgcmVxdWlyZWQuIik7bGV0IGU9bmV3IG9BLmRlZmF1bHQodCk7ZS5ub3JtYWxpemUoKTtsZXQgbj1lLnBhdGgoKSxvPW4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gbyE9PS0xJiYobj1uLnN1YnN0cihvKzEpKSxvPW4ubGFzdEluZGV4T2YoIi4iKSxvPT09LTE/bj0iIjpuPW4uc3Vic3RyKG8rMSksbn12YXIgb0EsckEsaUE9JCgoKT0+e29BPW1yKGpzKCksMSk7ZnQoKTtIdCgpO3JBPU9DfSk7ZnVuY3Rpb24gRUModCxlLG4pe20oZSl8fChlPXQud2lkdGgpLG0obil8fChuPXQuaGVpZ2h0KTtsZXQgbz1zQVtlXTttKG8pfHwobz17fSxzQVtlXT1vKTtsZXQgcj1vW25dO2lmKCFtKHIpKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtpLndpZHRoPWUsaS5oZWlnaHQ9bixyPWkuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSxyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iY29weSIsb1tuXT1yfXJldHVybiByLmRyYXdJbWFnZSh0LDAsMCxlLG4pLHIuZ2V0SW1hZ2VEYXRhKDAsMCxlLG4pLmRhdGF9dmFyIHNBLHFtLGNBPSQoKCk9PntmdCgpO3NBPXt9O3FtPUVDfSk7ZnVuY3Rpb24gU0ModCl7cmV0dXJuIHkudHlwZU9mLnN0cmluZygidXJpIix0KSxSQy50ZXN0KHQpfXZhciBSQyxhcCxLbT0kKCgpPT57V3QoKTtSQz0vXmJsb2I6L2k7YXA9U0N9KTtmdW5jdGlvbiB4Qyh0KXttKGVpKXx8KGVpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSksZWkuaHJlZj13aW5kb3cubG9jYXRpb24uaHJlZjtsZXQgZT1laS5ob3N0LG49ZWkucHJvdG9jb2w7cmV0dXJuIGVpLmhyZWY9dCxlaS5ocmVmPWVpLmhyZWYsbiE9PWVpLnByb3RvY29sfHxlIT09ZWkuaG9zdH12YXIgZWksYUEsZkE9JCgoKT0+e2Z0KCk7YUE9eEN9KTtmdW5jdGlvbiBQQyh0KXtyZXR1cm4geS50eXBlT2Yuc3RyaW5nKCJ1cmkiLHQpLENDLnRlc3QodCl9dmFyIENDLGZwLFdtPSQoKCk9PntXdCgpO0NDPS9eZGF0YTovaTtmcD1QQ30pO2Z1bmN0aW9uIE1DKHQpe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3JldHVybiBlLmFzeW5jPSEwLGUuc3JjPXQsbmV3IFByb21pc2UoKG4sbyk9Pnt3aW5kb3cuY3Jvc3NPcmlnaW5Jc29sYXRlZCYmZS5zZXRBdHRyaWJ1dGUoImNyb3Nzb3JpZ2luIiwiYW5vbnltb3VzIik7bGV0IHI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTtlLm9ubG9hZD1mdW5jdGlvbigpe2Uub25sb2FkPXZvaWQgMCxyLnJlbW92ZUNoaWxkKGUpLG4oKX0sZS5vbmVycm9yPWZ1bmN0aW9uKGkpe28oaSl9LHIuYXBwZW5kQ2hpbGQoZSl9KX12YXIgdUEsbEE9JCgoKT0+e3VBPU1DfSk7ZnVuY3Rpb24gTkModCl7aWYoIW0odCkpdGhyb3cgbmV3IEQoIm9iaiBpcyByZXF1aXJlZC4iKTtsZXQgZT0iIjtmb3IobGV0IG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pKXtsZXQgbz10W25dLHI9YCR7ZW5jb2RlVVJJQ29tcG9uZW50KG4pfT1gO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKGxldCBpPTAscz1vLmxlbmd0aDtpPHM7KytpKWUrPWAke3IrZW5jb2RlVVJJQ29tcG9uZW50KG9baV0pfSZgO2Vsc2UgZSs9YCR7citlbmNvZGVVUklDb21wb25lbnQobyl9JmB9cmV0dXJuIGU9ZS5zbGljZSgwLC0xKSxlfXZhciBwQSxkQT0kKCgpPT57ZnQoKTtIdCgpO3BBPU5DfSk7ZnVuY3Rpb24gSUModCl7aWYoIW0odCkpdGhyb3cgbmV3IEQoInF1ZXJ5U3RyaW5nIGlzIHJlcXVpcmVkLiIpO2xldCBlPXt9O2lmKHQ9PT0iIilyZXR1cm4gZTtsZXQgbj10LnJlcGxhY2UoL1wrL2csIiUyMCIpLnNwbGl0KC9bJjtdLyk7Zm9yKGxldCBvPTAscj1uLmxlbmd0aDtvPHI7KytvKXtsZXQgaT1uW29dLnNwbGl0KCI9Iikscz1kZWNvZGVVUklDb21wb25lbnQoaVswXSksZj1pWzFdO20oZik/Zj1kZWNvZGVVUklDb21wb25lbnQoZik6Zj0iIjtsZXQgdT1lW3NdO3R5cGVvZiB1PT0ic3RyaW5nIj9lW3NdPVt1LGZdOkFycmF5LmlzQXJyYXkodSk/dS5wdXNoKGYpOmVbc109Zn1yZXR1cm4gZX12YXIgbUEsaEE9JCgoKT0+e2Z0KCk7SHQoKTttQT1JQ30pO3ZhciB2Qyx4bix1cD0kKCgpPT57dkM9e1VOSVNTVUVEOjAsSVNTVUVEOjEsQUNUSVZFOjIsUkVDRUlWRUQ6MyxDQU5DRUxMRUQ6NCxGQUlMRUQ6NX0seG49T2JqZWN0LmZyZWV6ZSh2Qyl9KTt2YXIgRkMsX0EseUE9JCgoKT0+e0ZDPXtURVJSQUlOOjAsSU1BR0VSWToxLFRJTEVTM0Q6MixPVEhFUjozfSxfQT1PYmplY3QuZnJlZXplKEZDKX0pO2Z1bmN0aW9uIGxwKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQudGhyb3R0bGVCeVNlcnZlcj8/ITEsbj10LnRocm90dGxlPz8hMTt0aGlzLnVybD10LnVybCx0aGlzLnJlcXVlc3RGdW5jdGlvbj10LnJlcXVlc3RGdW5jdGlvbix0aGlzLmNhbmNlbEZ1bmN0aW9uPXQuY2FuY2VsRnVuY3Rpb24sdGhpcy5wcmlvcml0eUZ1bmN0aW9uPXQucHJpb3JpdHlGdW5jdGlvbix0aGlzLnByaW9yaXR5PXQucHJpb3JpdHk/PzAsdGhpcy50aHJvdHRsZT1uLHRoaXMudGhyb3R0bGVCeVNlcnZlcj1lLHRoaXMudHlwZT10LnR5cGU/P19BLk9USEVSLHRoaXMuc2VydmVyS2V5PXQuc2VydmVyS2V5LHRoaXMuc3RhdGU9eG4uVU5JU1NVRUQsdGhpcy5kZWZlcnJlZD12b2lkIDAsdGhpcy5jYW5jZWxsZWQ9ITF9dmFyIGdBLEFBPSQoKCk9Pnt5ZSgpO2Z0KCk7dXAoKTt5QSgpO2xwLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGxlZD0hMH07bHAucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQpPyh0LnVybD10aGlzLnVybCx0LnJlcXVlc3RGdW5jdGlvbj10aGlzLnJlcXVlc3RGdW5jdGlvbix0LmNhbmNlbEZ1bmN0aW9uPXRoaXMuY2FuY2VsRnVuY3Rpb24sdC5wcmlvcml0eUZ1bmN0aW9uPXRoaXMucHJpb3JpdHlGdW5jdGlvbix0LnByaW9yaXR5PXRoaXMucHJpb3JpdHksdC50aHJvdHRsZT10aGlzLnRocm90dGxlLHQudGhyb3R0bGVCeVNlcnZlcj10aGlzLnRocm90dGxlQnlTZXJ2ZXIsdC50eXBlPXRoaXMudHlwZSx0LnNlcnZlcktleT10aGlzLnNlcnZlcktleSx0LnN0YXRlPXhuLlVOSVNTVUVELHQuZGVmZXJyZWQ9dm9pZCAwLHQuY2FuY2VsbGVkPSExLHQpOm5ldyBscCh0aGlzKX07Z0E9bHB9KTtmdW5jdGlvbiBMQyh0KXtsZXQgZT17fTtpZighdClyZXR1cm4gZTtsZXQgbj10LnNwbGl0KGBccgpgKTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoOysrbyl7bGV0IHI9bltvXSxpPXIuaW5kZXhPZigiOiAiKTtpZihpPjApe2xldCBzPXIuc3Vic3RyaW5nKDAsaSksZj1yLnN1YnN0cmluZyhpKzIpO2Vbc109Zn19cmV0dXJuIGV9dmFyIGJBLHdBPSQoKCk9PntiQT1MQ30pO2Z1bmN0aW9uIFRBKHQsZSxuKXt0aGlzLnN0YXR1c0NvZGU9dCx0aGlzLnJlc3BvbnNlPWUsdGhpcy5yZXNwb25zZUhlYWRlcnM9bix0eXBlb2YgdGhpcy5yZXNwb25zZUhlYWRlcnM9PSJzdHJpbmciJiYodGhpcy5yZXNwb25zZUhlYWRlcnM9YkEodGhpcy5yZXNwb25zZUhlYWRlcnMpKX12YXIgbGYsT0E9JCgoKT0+e2Z0KCk7d0EoKTtUQS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtsZXQgdD0iUmVxdWVzdCBoYXMgZmFpbGVkLiI7cmV0dXJuIG0odGhpcy5zdGF0dXNDb2RlKSYmKHQrPWAgU3RhdHVzIENvZGU6ICR7dGhpcy5zdGF0dXNDb2RlfWApLHR9O2xmPVRBfSk7ZnVuY3Rpb24gcGYoKXt0aGlzLl9saXN0ZW5lcnM9W10sdGhpcy5fc2NvcGVzPVtdLHRoaXMuX3RvUmVtb3ZlPVtdLHRoaXMuX2luc2lkZVJhaXNlRXZlbnQ9ITF9ZnVuY3Rpb24gREModCxlKXtyZXR1cm4gZS10fXZhciBFQSxSQT0kKCgpPT57V3QoKTtmdCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHBmLnByb3RvdHlwZSx7bnVtYmVyT2ZMaXN0ZW5lcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saXN0ZW5lcnMubGVuZ3RoLXRoaXMuX3RvUmVtb3ZlLmxlbmd0aH19fSk7cGYucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5mdW5jKCJsaXN0ZW5lciIsdCksdGhpcy5fbGlzdGVuZXJzLnB1c2godCksdGhpcy5fc2NvcGVzLnB1c2goZSk7bGV0IG49dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlKX19O3BmLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YuZnVuYygibGlzdGVuZXIiLHQpO2xldCBuPXRoaXMuX2xpc3RlbmVycyxvPXRoaXMuX3Njb3BlcyxyPS0xO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKG5baV09PT10JiZvW2ldPT09ZSl7cj1pO2JyZWFrfXJldHVybiByIT09LTE/KHRoaXMuX2luc2lkZVJhaXNlRXZlbnQ/KHRoaXMuX3RvUmVtb3ZlLnB1c2gociksbltyXT12b2lkIDAsb1tyXT12b2lkIDApOihuLnNwbGljZShyLDEpLG8uc3BsaWNlKHIsMSkpLCEwKTohMX07cGYucHJvdG90eXBlLnJhaXNlRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9pbnNpZGVSYWlzZUV2ZW50PSEwO2xldCB0LGU9dGhpcy5fbGlzdGVuZXJzLG49dGhpcy5fc2NvcGVzLG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKXtsZXQgaT1lW3RdO20oaSkmJmVbdF0uYXBwbHkoblt0XSxhcmd1bWVudHMpfWxldCByPXRoaXMuX3RvUmVtb3ZlO2lmKG89ci5sZW5ndGgsbz4wKXtmb3Ioci5zb3J0KERDKSx0PTA7dDxvO3QrKyl7bGV0IGk9clt0XTtlLnNwbGljZShpLDEpLG4uc3BsaWNlKGksMSl9ci5sZW5ndGg9MH10aGlzLl9pbnNpZGVSYWlzZUV2ZW50PSExfTtFQT1wZn0pO2Z1bmN0aW9uIHFzKHQpe3kudHlwZU9mLm9iamVjdCgib3B0aW9ucyIsdCkseS5kZWZpbmVkKCJvcHRpb25zLmNvbXBhcmF0b3IiLHQuY29tcGFyYXRvciksdGhpcy5fY29tcGFyYXRvcj10LmNvbXBhcmF0b3IsdGhpcy5fYXJyYXk9W10sdGhpcy5fbGVuZ3RoPTAsdGhpcy5fbWF4aW11bUxlbmd0aD12b2lkIDB9ZnVuY3Rpb24gWG0odCxlLG4pe2xldCBvPXRbZV07dFtlXT10W25dLHRbbl09b312YXIgU0EseEE9JCgoKT0+e1d0KCk7ZnQoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhxcy5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xlbmd0aH19LGludGVybmFsQXJyYXk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheX19LG1heGltdW1MZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhpbXVtTGVuZ3RofSxzZXQ6ZnVuY3Rpb24odCl7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm1heGltdW1MZW5ndGgiLHQsMCk7bGV0IGU9dGhpcy5fbGVuZ3RoO2lmKHQ8ZSl7bGV0IG49dGhpcy5fYXJyYXk7Zm9yKGxldCBvPXQ7bzxlOysrbyluW29dPXZvaWQgMDt0aGlzLl9sZW5ndGg9dCxuLmxlbmd0aD10fXRoaXMuX21heGltdW1MZW5ndGg9dH19LGNvbXBhcmF0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wYXJhdG9yfX19KTtxcy5wcm90b3R5cGUucmVzZXJ2ZT1mdW5jdGlvbih0KXt0PXQ/P3RoaXMuX2xlbmd0aCx0aGlzLl9hcnJheS5sZW5ndGg9dH07cXMucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24odCl7dD10Pz8wO2xldCBlPXRoaXMuX2xlbmd0aCxuPXRoaXMuX2NvbXBhcmF0b3Isbz10aGlzLl9hcnJheSxyPS0xLGk9ITA7Zm9yKDtpOyl7bGV0IHM9MioodCsxKSxmPXMtMTtmPGUmJm4ob1tmXSxvW3RdKTwwP3I9ZjpyPXQsczxlJiZuKG9bc10sb1tyXSk8MCYmKHI9cyksciE9PXQ/KFhtKG8scix0KSx0PXIpOmk9ITF9fTtxcy5wcm90b3R5cGUucmVzb3J0PWZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5fbGVuZ3RoO2ZvcihsZXQgZT1NYXRoLmNlaWwodC8yKTtlPj0wOy0tZSl0aGlzLmhlYXBpZnkoZSl9O3FzLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCl7eS5kZWZpbmVkKCJlbGVtZW50Iix0KTtsZXQgZT10aGlzLl9hcnJheSxuPXRoaXMuX2NvbXBhcmF0b3Isbz10aGlzLl9tYXhpbXVtTGVuZ3RoLHI9dGhpcy5fbGVuZ3RoKys7Zm9yKHI8ZS5sZW5ndGg/ZVtyXT10OmUucHVzaCh0KTtyIT09MDspe2xldCBzPU1hdGguZmxvb3IoKHItMSkvMik7aWYobihlW3JdLGVbc10pPDApWG0oZSxyLHMpLHI9cztlbHNlIGJyZWFrfWxldCBpO3JldHVybiBtKG8pJiZ0aGlzLl9sZW5ndGg+byYmKGk9ZVtvXSx0aGlzLl9sZW5ndGg9byksaX07cXMucHJvdG90eXBlLnBvcD1mdW5jdGlvbih0KXtpZih0PXQ/PzAsdGhpcy5fbGVuZ3RoPT09MClyZXR1cm47eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuKCJpbmRleCIsdCx0aGlzLl9sZW5ndGgpO2xldCBlPXRoaXMuX2FycmF5LG49ZVt0XTtyZXR1cm4gWG0oZSx0LC0tdGhpcy5fbGVuZ3RoKSx0aGlzLmhlYXBpZnkodCksZVt0aGlzLl9sZW5ndGhdPXZvaWQgMCxufTtTQT1xc30pO2Z1bmN0aW9uIEJDKHQsZSl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX1mdW5jdGlvbiB3bigpe31mdW5jdGlvbiBDQSh0KXttKHQucHJpb3JpdHlGdW5jdGlvbikmJih0LnByaW9yaXR5PXQucHJpb3JpdHlGdW5jdGlvbigpKX1mdW5jdGlvbiBQQSh0KXtyZXR1cm4gdC5zdGF0ZT09PXhuLlVOSVNTVUVEJiYodC5zdGF0ZT14bi5JU1NVRUQsdC5kZWZlcnJlZD1IcygpKSx0LmRlZmVycmVkLnByb21pc2V9ZnVuY3Rpb24ga0ModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHQuc3RhdGU9PT14bi5DQU5DRUxMRUQpcmV0dXJuO2xldCBuPXQuZGVmZXJyZWQ7LS1IZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tQ2lbdC5zZXJ2ZXJLZXldLGRwLnJhaXNlRXZlbnQoKSx0LnN0YXRlPXhuLlJFQ0VJVkVELHQuZGVmZXJyZWQ9dm9pZCAwLG4ucmVzb2x2ZShlKX19ZnVuY3Rpb24gR0ModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3Quc3RhdGUhPT14bi5DQU5DRUxMRUQmJigrK0hlLm51bWJlck9mRmFpbGVkUmVxdWVzdHMsLS1IZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tQ2lbdC5zZXJ2ZXJLZXldLGRwLnJhaXNlRXZlbnQoZSksdC5zdGF0ZT14bi5GQUlMRUQsdC5kZWZlcnJlZC5yZWplY3QoZSkpfX1mdW5jdGlvbiBNQSh0KXtsZXQgZT1QQSh0KTtyZXR1cm4gdC5zdGF0ZT14bi5BQ1RJVkUsbmkucHVzaCh0KSwrK0hlLm51bWJlck9mQWN0aXZlUmVxdWVzdHMsKytIZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzRXZlciwrK0NpW3Quc2VydmVyS2V5XSx0LnJlcXVlc3RGdW5jdGlvbigpLnRoZW4oa0ModCkpLmNhdGNoKEdDKHQpKSxlfWZ1bmN0aW9uIEtzKHQpe2xldCBlPXQuc3RhdGU9PT14bi5BQ1RJVkU7aWYodC5zdGF0ZT14bi5DQU5DRUxMRUQsKytIZS5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzLG0odC5kZWZlcnJlZCkpe2xldCBuPXQuZGVmZXJyZWQ7dC5kZWZlcnJlZD12b2lkIDAsbi5yZWplY3QoKX1lJiYoLS1IZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tQ2lbdC5zZXJ2ZXJLZXldLCsrSGUubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cyksbSh0LmNhbmNlbEZ1bmN0aW9uKSYmdC5jYW5jZWxGdW5jdGlvbigpfWZ1bmN0aW9uIFZDKCl7d24uZGVidWdTaG93U3RhdGlzdGljcyYmKEhlLm51bWJlck9mQWN0aXZlUmVxdWVzdHM9PT0wJiZIZS5sYXN0TnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cz4wJiYoSGUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cz4wJiYoY29uc29sZS5sb2coYE51bWJlciBvZiBhdHRlbXB0ZWQgcmVxdWVzdHM6ICR7SGUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0c31gKSxIZS5udW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzPTApLEhlLm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM+MCYmKGNvbnNvbGUubG9nKGBOdW1iZXIgb2YgY2FuY2VsbGVkIHJlcXVlc3RzOiAke0hlLm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHN9YCksSGUubnVtYmVyT2ZDYW5jZWxsZWRSZXF1ZXN0cz0wKSxIZS5udW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzPjAmJihjb25zb2xlLmxvZyhgTnVtYmVyIG9mIGNhbmNlbGxlZCBhY3RpdmUgcmVxdWVzdHM6ICR7SGUubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0c31gKSxIZS5udW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzPTApLEhlLm51bWJlck9mRmFpbGVkUmVxdWVzdHM+MCYmKGNvbnNvbGUubG9nKGBOdW1iZXIgb2YgZmFpbGVkIHJlcXVlc3RzOiAke0hlLm51bWJlck9mRmFpbGVkUmVxdWVzdHN9YCksSGUubnVtYmVyT2ZGYWlsZWRSZXF1ZXN0cz0wKSksSGUubGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM9SGUubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cyl9dmFyIHBwLEhlLFpjLE9vLG5pLENpLFVDLGRwLG1wLE5BPSQoKCk9PntwcD1tcihqcygpLDEpO1d0KCk7em0oKTtmdCgpO1JBKCk7eEEoKTtLbSgpO1dtKCk7dXAoKTtIZT17bnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0czowLG51bWJlck9mQWN0aXZlUmVxdWVzdHM6MCxudW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzOjAsbnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0czowLG51bWJlck9mRmFpbGVkUmVxdWVzdHM6MCxudW1iZXJPZkFjdGl2ZVJlcXVlc3RzRXZlcjowLGxhc3ROdW1iZXJPZkFjdGl2ZVJlcXVlc3RzOjB9LFpjPTIwLE9vPW5ldyBTQSh7Y29tcGFyYXRvcjpCQ30pO09vLm1heGltdW1MZW5ndGg9WmM7T28ucmVzZXJ2ZShaYyk7bmk9W10sQ2k9e30sVUM9dHlwZW9mIGRvY3VtZW50PCJ1Ij9uZXcgcHAuZGVmYXVsdChkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTpuZXcgcHAuZGVmYXVsdCxkcD1uZXcgRUE7d24ubWF4aW11bVJlcXVlc3RzPTUwO3duLm1heGltdW1SZXF1ZXN0c1BlclNlcnZlcj0xODt3bi5yZXF1ZXN0c0J5U2VydmVyPXt9O3duLnRocm90dGxlUmVxdWVzdHM9ITA7d24uZGVidWdTaG93U3RhdGlzdGljcz0hMTt3bi5yZXF1ZXN0Q29tcGxldGVkRXZlbnQ9ZHA7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMod24se3N0YXRpc3RpY3M6e2dldDpmdW5jdGlvbigpe3JldHVybiBIZX19LHByaW9yaXR5SGVhcExlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFpjfSxzZXQ6ZnVuY3Rpb24odCl7aWYodDxaYylmb3IoO09vLmxlbmd0aD50Oyl7bGV0IGU9T28ucG9wKCk7S3MoZSl9WmM9dCxPby5tYXhpbXVtTGVuZ3RoPXQsT28ucmVzZXJ2ZSh0KX19fSk7d24uc2VydmVySGFzT3BlblNsb3RzPWZ1bmN0aW9uKHQsZSl7ZT1lPz8xO2xldCBuPXduLnJlcXVlc3RzQnlTZXJ2ZXJbdF0/P3duLm1heGltdW1SZXF1ZXN0c1BlclNlcnZlcjtyZXR1cm4gQ2lbdF0rZTw9bn07d24uaGVhcEhhc09wZW5TbG90cz1mdW5jdGlvbih0KXtyZXR1cm4gT28ubGVuZ3RoK3Q8PVpjfTt3bi51cGRhdGU9ZnVuY3Rpb24oKXtsZXQgdCxlLG49MCxvPW5pLmxlbmd0aDtmb3IodD0wO3Q8bzsrK3Qpe2lmKGU9bmlbdF0sZS5jYW5jZWxsZWQmJktzKGUpLGUuc3RhdGUhPT14bi5BQ1RJVkUpeysrbjtjb250aW51ZX1uPjAmJihuaVt0LW5dPWUpfW5pLmxlbmd0aC09bjtsZXQgcj1Pby5pbnRlcm5hbEFycmF5LGk9T28ubGVuZ3RoO2Zvcih0PTA7dDxpOysrdClDQShyW3RdKTtPby5yZXNvcnQoKTtsZXQgcz1NYXRoLm1heCh3bi5tYXhpbXVtUmVxdWVzdHMtbmkubGVuZ3RoLDApLGY9MDtmb3IoO2Y8cyYmT28ubGVuZ3RoPjA7KXtpZihlPU9vLnBvcCgpLGUuY2FuY2VsbGVkKXtLcyhlKTtjb250aW51ZX1pZihlLnRocm90dGxlQnlTZXJ2ZXImJiF3bi5zZXJ2ZXJIYXNPcGVuU2xvdHMoZS5zZXJ2ZXJLZXkpKXtLcyhlKTtjb250aW51ZX1NQShlKSwrK2Z9VkMoKX07d24uZ2V0U2VydmVyS2V5PWZ1bmN0aW9uKHQpe3kudHlwZU9mLnN0cmluZygidXJsIix0KTtsZXQgZT1uZXcgcHAuZGVmYXVsdCh0KTtlLnNjaGVtZSgpPT09IiImJihlPWUuYWJzb2x1dGVUbyhVQyksZS5ub3JtYWxpemUoKSk7bGV0IG49ZS5hdXRob3JpdHkoKTsvOi8udGVzdChuKXx8KG49YCR7bn06JHtlLnNjaGVtZSgpPT09Imh0dHBzIj8iNDQzIjoiODAifWApO2xldCBvPUNpW25dO3JldHVybiBtKG8pfHwoQ2lbbl09MCksbn07d24ucmVxdWVzdD1mdW5jdGlvbih0KXtpZih5LnR5cGVPZi5vYmplY3QoInJlcXVlc3QiLHQpLHkudHlwZU9mLnN0cmluZygicmVxdWVzdC51cmwiLHQudXJsKSx5LnR5cGVPZi5mdW5jKCJyZXF1ZXN0LnJlcXVlc3RGdW5jdGlvbiIsdC5yZXF1ZXN0RnVuY3Rpb24pLGZwKHQudXJsKXx8YXAodC51cmwpKXJldHVybiBkcC5yYWlzZUV2ZW50KCksdC5zdGF0ZT14bi5SRUNFSVZFRCx0LnJlcXVlc3RGdW5jdGlvbigpO2lmKCsrSGUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cyxtKHQuc2VydmVyS2V5KXx8KHQuc2VydmVyS2V5PXduLmdldFNlcnZlcktleSh0LnVybCkpLHduLnRocm90dGxlUmVxdWVzdHMmJnQudGhyb3R0bGVCeVNlcnZlciYmIXduLnNlcnZlckhhc09wZW5TbG90cyh0LnNlcnZlcktleSkpcmV0dXJuO2lmKCF3bi50aHJvdHRsZVJlcXVlc3RzfHwhdC50aHJvdHRsZSlyZXR1cm4gTUEodCk7aWYobmkubGVuZ3RoPj13bi5tYXhpbXVtUmVxdWVzdHMpcmV0dXJuO0NBKHQpO2xldCBlPU9vLmluc2VydCh0KTtpZihtKGUpKXtpZihlPT09dClyZXR1cm47S3MoZSl9cmV0dXJuIFBBKHQpfTt3bi5jbGVhckZvclNwZWNzPWZ1bmN0aW9uKCl7Zm9yKDtPby5sZW5ndGg+MDspe2xldCBlPU9vLnBvcCgpO0tzKGUpfWxldCB0PW5pLmxlbmd0aDtmb3IobGV0IGU9MDtlPHQ7KytlKUtzKG5pW2VdKTtuaS5sZW5ndGg9MCxDaT17fSxIZS5udW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzPTAsSGUubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cz0wLEhlLm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM9MCxIZS5udW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzPTAsSGUubnVtYmVyT2ZGYWlsZWRSZXF1ZXN0cz0wLEhlLm51bWJlck9mQWN0aXZlUmVxdWVzdHNFdmVyPTAsSGUubGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM9MH07d24ubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0c0J5U2VydmVyPWZ1bmN0aW9uKHQpe3JldHVybiBDaVt0XX07d24ucmVxdWVzdEhlYXA9T287bXA9d259KTtmdW5jdGlvbiB6Qyh0KXtsZXQgZT1uZXcgSUEuZGVmYXVsdCh0KTtlLm5vcm1hbGl6ZSgpO2xldCBuPWUuYXV0aG9yaXR5KCk7aWYobi5sZW5ndGghPT0wKXtpZihlLmF1dGhvcml0eShuKSxuLmluZGV4T2YoIkAiKSE9PS0xJiYobj1uLnNwbGl0KCJAIilbMV0pLG4uaW5kZXhPZigiOiIpPT09LTEpe2xldCBvPWUuc2NoZW1lKCk7aWYoby5sZW5ndGg9PT0wJiYobz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wsbz1vLnN1YnN0cmluZygwLG8ubGVuZ3RoLTEpKSxvPT09Imh0dHAiKW4rPSI6ODAiO2Vsc2UgaWYobz09PSJodHRwcyIpbis9Ijo0NDMiO2Vsc2UgcmV0dXJufXJldHVybiBufX12YXIgSUEsZGYsUWMsWW0sdkE9JCgoKT0+e0lBPW1yKGpzKCksMSk7ZnQoKTtIdCgpO2RmPXt9LFFjPXt9O2RmLmFkZD1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJob3N0IGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpfHxlPD0wKXRocm93IG5ldyBEKCJwb3J0IGlzIHJlcXVpcmVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIpO2xldCBuPWAke3QudG9Mb3dlckNhc2UoKX06JHtlfWA7bShRY1tuXSl8fChRY1tuXT0hMCl9O2RmLnJlbW92ZT1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJob3N0IGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpfHxlPD0wKXRocm93IG5ldyBEKCJwb3J0IGlzIHJlcXVpcmVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIpO2xldCBuPWAke3QudG9Mb3dlckNhc2UoKX06JHtlfWA7bShRY1tuXSkmJmRlbGV0ZSBRY1tuXX07ZGYuY29udGFpbnM9ZnVuY3Rpb24odCl7aWYoIW0odCkpdGhyb3cgbmV3IEQoInVybCBpcyByZXF1aXJlZC4iKTtsZXQgZT16Qyh0KTtyZXR1cm4hIShtKGUpJiZtKFFjW2VdKSl9O2RmLmNsZWFyPWZ1bmN0aW9uKCl7UWM9e319O1ltPWRmfSk7ZnVuY3Rpb24gVnQodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1QsdHlwZW9mIHQ9PSJzdHJpbmciJiYodD17dXJsOnR9KSx5LnR5cGVPZi5zdHJpbmcoIm9wdGlvbnMudXJsIix0LnVybCksdGhpcy5fdXJsPXZvaWQgMCx0aGlzLl90ZW1wbGF0ZVZhbHVlcz1vaSh0LnRlbXBsYXRlVmFsdWVzLHt9KSx0aGlzLl9xdWVyeVBhcmFtZXRlcnM9b2kodC5xdWVyeVBhcmFtZXRlcnMse30pLHRoaXMuaGVhZGVycz1vaSh0LmhlYWRlcnMse30pLHRoaXMucmVxdWVzdD10LnJlcXVlc3Q/P25ldyBnQSx0aGlzLnByb3h5PXQucHJveHksdGhpcy5yZXRyeUNhbGxiYWNrPXQucmV0cnlDYWxsYmFjayx0aGlzLnJldHJ5QXR0ZW1wdHM9dC5yZXRyeUF0dGVtcHRzPz8wLHRoaXMuX3JldHJ5Q291bnQ9MCx0LnBhcnNlVXJsPz8hMD90aGlzLnBhcnNlVXJsKHQudXJsLCEwLCEwKTp0aGlzLl91cmw9dC51cmwsdGhpcy5fY3JlZGl0cz10LmNyZWRpdHN9ZnVuY3Rpb24gb2kodCxlKXtyZXR1cm4gbSh0KT8kYyh0KTplfWZ1bmN0aW9uIGpDKHQpe3JldHVybiB0Lmxlbmd0aD09PTA/e306dC5pbmRleE9mKCI9Iik9PT0tMT97W3RdOnZvaWQgMH06bUEodCl9ZnVuY3Rpb24gX3AodCxlLG4pe2lmKCFuKXJldHVybiB5cih0LGUpO2xldCBvPSRjKHQsITApO2ZvcihsZXQgciBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkocikpe2xldCBpPW9bcl0scz1lW3JdO20oaSk/KEFycmF5LmlzQXJyYXkoaSl8fChpPW9bcl09W2ldKSxvW3JdPWkuY29uY2F0KHMpKTpvW3JdPUFycmF5LmlzQXJyYXkocyk/cy5zbGljZSgpOnN9cmV0dXJuIG99ZnVuY3Rpb24gSEModCl7bGV0IGU9T2JqZWN0LmtleXModCk7cmV0dXJuIGUubGVuZ3RoPT09MD8iIjplLmxlbmd0aD09PTEmJiFtKHRbZVswXV0pP2A/JHtlWzBdfWA6YD8ke3BBKHQpfWB9ZnVuY3Rpb24gJG0odCl7bGV0IGU9dC5yZXNvdXJjZSxuPXQuZmxpcFksbz10LnNraXBDb2xvclNwYWNlQ29udmVyc2lvbixyPXQucHJlZmVySW1hZ2VCaXRtYXAsaT1lLnJlcXVlc3Q7aS51cmw9ZS51cmwsaS5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgZj0hMTshZS5pc0RhdGFVcmkmJiFlLmlzQmxvYlVyaSYmKGY9ZS5pc0Nyb3NzT3JpZ2luVXJsKTtsZXQgdT1IcygpO3JldHVybiBWdC5fSW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlKGksZix1LG4sbyxyKSx1LnByb21pc2V9O2xldCBzPW1wLnJlcXVlc3QoaSk7aWYobShzKSlyZXR1cm4gcy5jYXRjaChmdW5jdGlvbihmKXtyZXR1cm4gaS5zdGF0ZSE9PXhuLkZBSUxFRD9Qcm9taXNlLnJlamVjdChmKTplLnJldHJ5T25FcnJvcihmKS50aGVuKGZ1bmN0aW9uKHUpe3JldHVybiB1PyhpLnN0YXRlPXhuLlVOSVNTVUVELGkuZGVmZXJyZWQ9dm9pZCAwLCRtKHtyZXNvdXJjZTplLGZsaXBZOm4sc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOm8scHJlZmVySW1hZ2VCaXRtYXA6cn0pKTpQcm9taXNlLnJlamVjdChmKX0pfSl9ZnVuY3Rpb24gQkEodCxlLG4pe2xldCBvPXt9O29bZV09bix0LnNldFF1ZXJ5UGFyYW1ldGVycyhvKTtsZXQgcj10LnJlcXVlc3QsaT10LnVybDtyLnVybD1pLHIucmVxdWVzdEZ1bmN0aW9uPWZ1bmN0aW9uKCl7bGV0IGY9SHMoKTtyZXR1cm4gd2luZG93W25dPWZ1bmN0aW9uKHUpe2YucmVzb2x2ZSh1KTt0cnl7ZGVsZXRlIHdpbmRvd1tuXX1jYXRjaHt3aW5kb3dbbl09dm9pZCAwfX0sVnQuX0ltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdChpLG4sZiksZi5wcm9taXNlfTtsZXQgcz1tcC5yZXF1ZXN0KHIpO2lmKG0ocykpcmV0dXJuIHMuY2F0Y2goZnVuY3Rpb24oZil7cmV0dXJuIHIuc3RhdGUhPT14bi5GQUlMRUQ/UHJvbWlzZS5yZWplY3QoZik6dC5yZXRyeU9uRXJyb3IoZikudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gdT8oci5zdGF0ZT14bi5VTklTU1VFRCxyLmRlZmVycmVkPXZvaWQgMCxCQSh0LGUsbikpOlByb21pc2UucmVqZWN0KGYpfSl9KX1mdW5jdGlvbiBabSh0KXtpZih0LnN0YXRlPT09eG4uSVNTVUVEfHx0LnN0YXRlPT09eG4uQUNUSVZFKXRocm93IG5ldyBBZSgiVGhlIFJlc291cmNlIGlzIGFscmVhZHkgYmVpbmcgZmV0Y2hlZC4iKTt0LnN0YXRlPXhuLlVOSVNTVUVELHQuZGVmZXJyZWQ9dm9pZCAwfWZ1bmN0aW9uIGhwKHQsZSl7bGV0IG49ZGVjb2RlVVJJQ29tcG9uZW50KGUpO3JldHVybiB0P2F0b2Iobik6bn1mdW5jdGlvbiBGQSh0LGUpe2xldCBuPWhwKHQsZSksbz1uZXcgQXJyYXlCdWZmZXIobi5sZW5ndGgpLHI9bmV3IFVpbnQ4QXJyYXkobyk7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspcltpXT1uLmNoYXJDb2RlQXQoaSk7cmV0dXJuIG99ZnVuY3Rpb24gS0ModCxlKXtlPWU/PyIiO2xldCBuPXRbMV0sbz0hIXRbMl0scj10WzNdLGkscztzd2l0Y2goZSl7Y2FzZSIiOmNhc2UidGV4dCI6cmV0dXJuIGhwKG8scik7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIEZBKG8scik7Y2FzZSJibG9iIjpyZXR1cm4gaT1GQShvLHIpLG5ldyBCbG9iKFtpXSx7dHlwZTpufSk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIHM9bmV3IERPTVBhcnNlcixzLnBhcnNlRnJvbVN0cmluZyhocChvLHIpLG4pO2Nhc2UianNvbiI6cmV0dXJuIEpTT04ucGFyc2UoaHAobyxyKSk7ZGVmYXVsdDp0aHJvdyBuZXcgRChgVW5oYW5kbGVkIHJlc3BvbnNlVHlwZTogJHtlfWApfX1mdW5jdGlvbiBXQyh0LGUsbixvLHIsaSxzKXtmZXRjaCh0LHttZXRob2Q6bixoZWFkZXJzOnJ9KS50aGVuKGFzeW5jIGY9PntpZighZi5vayl7bGV0IHU9e307Zi5oZWFkZXJzLmZvckVhY2goKGMsbCk9Pnt1W2xdPWN9KSxpLnJlamVjdChuZXcgbGYoZi5zdGF0dXMsZix1KSk7cmV0dXJufXN3aXRjaChlKXtjYXNlInRleHQiOmkucmVzb2x2ZShmLnRleHQoKSk7YnJlYWs7Y2FzZSJqc29uIjppLnJlc29sdmUoZi5qc29uKCkpO2JyZWFrO2RlZmF1bHQ6aS5yZXNvbHZlKG5ldyBVaW50OEFycmF5KGF3YWl0IGYuYXJyYXlCdWZmZXIoKSkuYnVmZmVyKTticmVha319KS5jYXRjaCgoKT0+e2kucmVqZWN0KG5ldyBsZil9KX12YXIgTEEsREEsSmMscUMsWEMscmksbWY9JCgoKT0+e0xBPW1yKGpzKCksMSk7WTEoKTtXdCgpO1oxKCk7Y3AoKTt5ZSgpO3ptKCk7ZnQoKTtIdCgpO0htKCk7bkEoKTtpQSgpO2NBKCk7S20oKTtmQSgpO1dtKCk7bEEoKTtLdCgpO2RBKCk7aEEoKTtBQSgpO09BKCk7TkEoKTt1cCgpO3RpKCk7dkEoKTtEQT1mdW5jdGlvbigpe3RyeXtsZXQgdD1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIHQub3BlbigiR0VUIiwiIyIsITApLHQucmVzcG9uc2VUeXBlPSJibG9iIix0LnJlc3BvbnNlVHlwZT09PSJibG9iIn1jYXRjaHtyZXR1cm4hMX19KCk7VnQuY3JlYXRlSWZOZWVkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBWdD90LmdldERlcml2ZWRSZXNvdXJjZSh7cmVxdWVzdDp0LnJlcXVlc3R9KTp0eXBlb2YgdCE9InN0cmluZyI/dDpuZXcgVnQoe3VybDp0fSl9O1Z0LnN1cHBvcnRzSW1hZ2VCaXRtYXBPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIG0oSmMpP0pjOnR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCE9ImZ1bmN0aW9uIj8oSmM9UHJvbWlzZS5yZXNvbHZlKCExKSxKYyk6KEpjPVZ0LmZldGNoQmxvYih7dXJsOiJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQUlBQUFDUWQxUGVBQUFBQkdkQlRVRUFBRTRnM3JFaURnQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFERWxFUVZRSTEyTmc2R0FBQUFFVUFJbmdFM1ppQUFBQUFFbEZUa1N1UW1DQyJ9KS50aGVuKGZ1bmN0aW9uKGUpe2xldCBuPXtpbWFnZU9yaWVudGF0aW9uOiJmbGlwWSIscHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifTtyZXR1cm4gUHJvbWlzZS5hbGwoW2NyZWF0ZUltYWdlQml0bWFwKGUsbiksY3JlYXRlSW1hZ2VCaXRtYXAoZSldKX0pLnRoZW4oZnVuY3Rpb24oZSl7bGV0IG49cW0oZVswXSksbz1xbShlWzFdKTtyZXR1cm4gblsxXSE9PW9bMV19KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSksSmMpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhWdCx7aXNCbG9iU3VwcG9ydGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gREF9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFZ0LnByb3RvdHlwZSx7cXVlcnlQYXJhbWV0ZXJzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbWV0ZXJzfX0sdGVtcGxhdGVWYWx1ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZW1wbGF0ZVZhbHVlc319LHVybDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VXJsQ29tcG9uZW50KCEwLCEwKX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMucGFyc2VVcmwodCwhMSwhMSl9fSxleHRlbnNpb246e2dldDpmdW5jdGlvbigpe3JldHVybiByQSh0aGlzLl91cmwpfX0saXNEYXRhVXJpOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnAodGhpcy5fdXJsKX19LGlzQmxvYlVyaTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGFwKHRoaXMuX3VybCl9fSxpc0Nyb3NzT3JpZ2luVXJsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYUEodGhpcy5fdXJsKX19LGhhc0hlYWRlcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmhlYWRlcnMpLmxlbmd0aD4wfX0sY3JlZGl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWRpdHN9fX0pO1Z0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFVybENvbXBvbmVudCghMCwhMCl9O1Z0LnByb3RvdHlwZS5wYXJzZVVybD1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1uZXcgTEEuZGVmYXVsdCh0KSxpPWpDKHIucXVlcnkoKSk7dGhpcy5fcXVlcnlQYXJhbWV0ZXJzPWU/X3AoaSx0aGlzLnF1ZXJ5UGFyYW1ldGVycyxuKTppLHIuc2VhcmNoKCIiKSxyLmZyYWdtZW50KCIiKSxtKG8pJiZyLnNjaGVtZSgpPT09IiImJihyPXIuYWJzb2x1dGVUbyh1ZihvKSkpLHRoaXMuX3VybD1yLnRvU3RyaW5nKCl9O1Z0LnByb3RvdHlwZS5nZXRVcmxDb21wb25lbnQ9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmlzRGF0YVVyaSlyZXR1cm4gdGhpcy5fdXJsO2xldCBuPXRoaXMuX3VybDt0JiYobj1gJHtufSR7SEModGhpcy5xdWVyeVBhcmFtZXRlcnMpfWApLG49bi5yZXBsYWNlKC8lN0IvZywieyIpLnJlcGxhY2UoLyU3RC9nLCJ9Iik7bGV0IG89dGhpcy5fdGVtcGxhdGVWYWx1ZXM7cmV0dXJuIE9iamVjdC5rZXlzKG8pLmxlbmd0aD4wJiYobj1uLnJlcGxhY2UoL3soLio/KX0vZyxmdW5jdGlvbihyLGkpe2xldCBzPW9baV07cmV0dXJuIG0ocyk/ZW5jb2RlVVJJQ29tcG9uZW50KHMpOnJ9KSksZSYmbSh0aGlzLnByb3h5KSYmKG49dGhpcy5wcm94eS5nZXRVUkwobikpLG59O1Z0LnByb3RvdHlwZS5zZXRRdWVyeVBhcmFtZXRlcnM9ZnVuY3Rpb24odCxlKXtlP3RoaXMuX3F1ZXJ5UGFyYW1ldGVycz1fcCh0aGlzLl9xdWVyeVBhcmFtZXRlcnMsdCwhMSk6dGhpcy5fcXVlcnlQYXJhbWV0ZXJzPV9wKHQsdGhpcy5fcXVlcnlQYXJhbWV0ZXJzLCExKX07VnQucHJvdG90eXBlLmFwcGVuZFF1ZXJ5UGFyYW1ldGVycz1mdW5jdGlvbih0KXt0aGlzLl9xdWVyeVBhcmFtZXRlcnM9X3AodCx0aGlzLl9xdWVyeVBhcmFtZXRlcnMsITApfTtWdC5wcm90b3R5cGUuc2V0VGVtcGxhdGVWYWx1ZXM9ZnVuY3Rpb24odCxlKXtlP3RoaXMuX3RlbXBsYXRlVmFsdWVzPXlyKHRoaXMuX3RlbXBsYXRlVmFsdWVzLHQpOnRoaXMuX3RlbXBsYXRlVmFsdWVzPXlyKHQsdGhpcy5fdGVtcGxhdGVWYWx1ZXMpfTtWdC5wcm90b3R5cGUuZ2V0RGVyaXZlZFJlc291cmNlPWZ1bmN0aW9uKHQpe2xldCBlPXRoaXMuY2xvbmUoKTtpZihlLl9yZXRyeUNvdW50PTAsbSh0LnVybCkpe2xldCBuPXQucHJlc2VydmVRdWVyeVBhcmFtZXRlcnM/PyExO2UucGFyc2VVcmwodC51cmwsITAsbix0aGlzLl91cmwpfXJldHVybiBtKHQucXVlcnlQYXJhbWV0ZXJzKSYmKGUuX3F1ZXJ5UGFyYW1ldGVycz15cih0LnF1ZXJ5UGFyYW1ldGVycyxlLnF1ZXJ5UGFyYW1ldGVycykpLG0odC50ZW1wbGF0ZVZhbHVlcykmJihlLl90ZW1wbGF0ZVZhbHVlcz15cih0LnRlbXBsYXRlVmFsdWVzLGUudGVtcGxhdGVWYWx1ZXMpKSxtKHQuaGVhZGVycykmJihlLmhlYWRlcnM9eXIodC5oZWFkZXJzLGUuaGVhZGVycykpLG0odC5wcm94eSkmJihlLnByb3h5PXQucHJveHkpLG0odC5yZXF1ZXN0KSYmKGUucmVxdWVzdD10LnJlcXVlc3QpLG0odC5yZXRyeUNhbGxiYWNrKSYmKGUucmV0cnlDYWxsYmFjaz10LnJldHJ5Q2FsbGJhY2spLG0odC5yZXRyeUF0dGVtcHRzKSYmKGUucmV0cnlBdHRlbXB0cz10LnJldHJ5QXR0ZW1wdHMpLGV9O1Z0LnByb3RvdHlwZS5yZXRyeU9uRXJyb3I9ZnVuY3Rpb24odCl7bGV0IGU9dGhpcy5yZXRyeUNhbGxiYWNrO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24ifHx0aGlzLl9yZXRyeUNvdW50Pj10aGlzLnJldHJ5QXR0ZW1wdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IG49dGhpcztyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUodGhpcyx0KSkudGhlbihmdW5jdGlvbihvKXtyZXR1cm4rK24uX3JldHJ5Q291bnQsb30pfTtWdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCk/KHQuX3VybD10aGlzLl91cmwsdC5fcXVlcnlQYXJhbWV0ZXJzPSRjKHRoaXMuX3F1ZXJ5UGFyYW1ldGVycyksdC5fdGVtcGxhdGVWYWx1ZXM9JGModGhpcy5fdGVtcGxhdGVWYWx1ZXMpLHQuaGVhZGVycz0kYyh0aGlzLmhlYWRlcnMpLHQucHJveHk9dGhpcy5wcm94eSx0LnJldHJ5Q2FsbGJhY2s9dGhpcy5yZXRyeUNhbGxiYWNrLHQucmV0cnlBdHRlbXB0cz10aGlzLnJldHJ5QXR0ZW1wdHMsdC5fcmV0cnlDb3VudD0wLHQucmVxdWVzdD10aGlzLnJlcXVlc3QuY2xvbmUoKSx0KTpuZXcgVnQoe3VybDp0aGlzLl91cmwscXVlcnlQYXJhbWV0ZXJzOnRoaXMucXVlcnlQYXJhbWV0ZXJzLHRlbXBsYXRlVmFsdWVzOnRoaXMudGVtcGxhdGVWYWx1ZXMsaGVhZGVyczp0aGlzLmhlYWRlcnMscHJveHk6dGhpcy5wcm94eSxyZXRyeUNhbGxiYWNrOnRoaXMucmV0cnlDYWxsYmFjayxyZXRyeUF0dGVtcHRzOnRoaXMucmV0cnlBdHRlbXB0cyxyZXF1ZXN0OnRoaXMucmVxdWVzdC5jbG9uZSgpLHBhcnNlVXJsOiExLGNyZWRpdHM6bSh0aGlzLmNyZWRpdHMpP3RoaXMuY3JlZGl0cy5zbGljZSgpOnZvaWQgMH0pfTtWdC5wcm90b3R5cGUuZ2V0QmFzZVVyaT1mdW5jdGlvbih0KXtyZXR1cm4gZUEodGhpcy5nZXRVcmxDb21wb25lbnQodCksdCl9O1Z0LnByb3RvdHlwZS5hcHBlbmRGb3J3YXJkU2xhc2g9ZnVuY3Rpb24oKXt0aGlzLl91cmw9WDEodGhpcy5fdXJsKX07VnQucHJvdG90eXBlLmZldGNoQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciJ9KX07VnQuZmV0Y2hBcnJheUJ1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZ0KHQpLmZldGNoQXJyYXlCdWZmZXIoKX07VnQucHJvdG90eXBlLmZldGNoQmxvYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoKHtyZXNwb25zZVR5cGU6ImJsb2IifSl9O1Z0LmZldGNoQmxvYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZ0KHQpLmZldGNoQmxvYigpfTtWdC5wcm90b3R5cGUuZmV0Y2hJbWFnZT1mdW5jdGlvbih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnByZWZlckltYWdlQml0bWFwPz8hMSxuPXQucHJlZmVyQmxvYj8/ITEsbz10LmZsaXBZPz8hMSxyPXQuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uPz8hMTtpZihabSh0aGlzLnJlcXVlc3QpLCFEQXx8dGhpcy5pc0RhdGFVcml8fHRoaXMuaXNCbG9iVXJpfHwhdGhpcy5oYXNIZWFkZXJzJiYhbilyZXR1cm4gJG0oe3Jlc291cmNlOnRoaXMsZmxpcFk6byxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246cixwcmVmZXJJbWFnZUJpdG1hcDplfSk7bGV0IGk9dGhpcy5mZXRjaEJsb2IoKTtpZighbShpKSlyZXR1cm47bGV0IHMsZix1LGM7cmV0dXJuIFZ0LnN1cHBvcnRzSW1hZ2VCaXRtYXBPcHRpb25zKCkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gcz1sLGY9cyYmZSxpfSkudGhlbihmdW5jdGlvbihsKXtpZighbShsKSlyZXR1cm47aWYoYz1sLGYpcmV0dXJuIFZ0LmNyZWF0ZUltYWdlQml0bWFwRnJvbUJsb2IobCx7ZmxpcFk6byxwcmVtdWx0aXBseUFscGhhOiExLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjpyfSk7bGV0IHA9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobCk7cmV0dXJuIHU9bmV3IFZ0KHt1cmw6cH0pLCRtKHtyZXNvdXJjZTp1LGZsaXBZOm8sc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOnIscHJlZmVySW1hZ2VCaXRtYXA6ITF9KX0pLnRoZW4oZnVuY3Rpb24obCl7aWYobShsKSlyZXR1cm4gbC5ibG9iPWMsZnx8d2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodS51cmwpLGx9KS5jYXRjaChmdW5jdGlvbihsKXtyZXR1cm4gbSh1KSYmd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodS51cmwpLGwuYmxvYj1jLFByb21pc2UucmVqZWN0KGwpfSl9O1Z0LmZldGNoSW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBWdCh0KS5mZXRjaEltYWdlKHtmbGlwWTp0LmZsaXBZLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjp0LnNraXBDb2xvclNwYWNlQ29udmVyc2lvbixwcmVmZXJCbG9iOnQucHJlZmVyQmxvYixwcmVmZXJJbWFnZUJpdG1hcDp0LnByZWZlckltYWdlQml0bWFwfSl9O1Z0LnByb3RvdHlwZS5mZXRjaFRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pfTtWdC5mZXRjaFRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBWdCh0KS5mZXRjaFRleHQoKX07VnQucHJvdG90eXBlLmZldGNoSnNvbj1mdW5jdGlvbigpe2xldCB0PXRoaXMuZmV0Y2goe3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCovKjtxPTAuMDEifX0pO2lmKG0odCkpcmV0dXJuIHQudGhlbihmdW5jdGlvbihlKXtpZihtKGUpKXJldHVybiBKU09OLnBhcnNlKGUpfSl9O1Z0LmZldGNoSnNvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZ0KHQpLmZldGNoSnNvbigpfTtWdC5wcm90b3R5cGUuZmV0Y2hYTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJkb2N1bWVudCIsb3ZlcnJpZGVNaW1lVHlwZToidGV4dC94bWwifSl9O1Z0LmZldGNoWE1MPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVnQodCkuZmV0Y2hYTUwoKX07VnQucHJvdG90eXBlLmZldGNoSnNvbnA9ZnVuY3Rpb24odCl7dD10Pz8iY2FsbGJhY2siLFptKHRoaXMucmVxdWVzdCk7bGV0IGU7ZG8gZT1gbG9hZEpzb25wJHtQLm5leHRSYW5kb21OdW1iZXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyLDgpfWA7d2hpbGUobSh3aW5kb3dbZV0pKTtyZXR1cm4gQkEodGhpcyx0LGUpfTtWdC5mZXRjaEpzb25wPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVnQodCkuZmV0Y2hKc29ucCh0LmNhbGxiYWNrUGFyYW1ldGVyTmFtZSl9O1Z0LnByb3RvdHlwZS5fbWFrZVJlcXVlc3Q9ZnVuY3Rpb24odCl7bGV0IGU9dGhpcztabShlLnJlcXVlc3QpO2xldCBuPWUucmVxdWVzdCxvPWUudXJsO24udXJsPW8sbi5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgaT10LnJlc3BvbnNlVHlwZSxzPXlyKHQuaGVhZGVycyxlLmhlYWRlcnMpLGY9dC5vdmVycmlkZU1pbWVUeXBlLHU9dC5tZXRob2QsYz10LmRhdGEsbD1IcygpLHA9VnQuX0ltcGxlbWVudGF0aW9ucy5sb2FkV2l0aFhocihvLGksdSxjLHMsbCxmKTtyZXR1cm4gbShwKSYmbShwLmFib3J0KSYmKG4uY2FuY2VsRnVuY3Rpb249ZnVuY3Rpb24oKXtwLmFib3J0KCl9KSxsLnByb21pc2V9O2xldCByPW1wLnJlcXVlc3Qobik7aWYobShyKSlyZXR1cm4gci50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBuLmNhbmNlbEZ1bmN0aW9uPXZvaWQgMCxpfSkuY2F0Y2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uY2FuY2VsRnVuY3Rpb249dm9pZCAwLG4uc3RhdGUhPT14bi5GQUlMRUQ/UHJvbWlzZS5yZWplY3QoaSk6ZS5yZXRyeU9uRXJyb3IoaSkudGhlbihmdW5jdGlvbihzKXtyZXR1cm4gcz8obi5zdGF0ZT14bi5VTklTU1VFRCxuLmRlZmVycmVkPXZvaWQgMCxlLmZldGNoKHQpKTpQcm9taXNlLnJlamVjdChpKX0pfSl9O3FDPS9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvO1Z0LnByb3RvdHlwZS5mZXRjaD1mdW5jdGlvbih0KXtyZXR1cm4gdD1vaSh0LHt9KSx0Lm1ldGhvZD0iR0VUIix0aGlzLl9tYWtlUmVxdWVzdCh0KX07VnQuZmV0Y2g9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBWdCh0KS5mZXRjaCh7cmVzcG9uc2VUeXBlOnQucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6dC5vdmVycmlkZU1pbWVUeXBlfSl9O1Z0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9b2kodCx7fSksdC5tZXRob2Q9IkRFTEVURSIsdGhpcy5fbWFrZVJlcXVlc3QodCl9O1Z0LmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZ0KHQpLmRlbGV0ZSh7cmVzcG9uc2VUeXBlOnQucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6dC5vdmVycmlkZU1pbWVUeXBlLGRhdGE6dC5kYXRhfSl9O1Z0LnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9uKHQpe3JldHVybiB0PW9pKHQse30pLHQubWV0aG9kPSJIRUFEIix0aGlzLl9tYWtlUmVxdWVzdCh0KX07VnQuaGVhZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZ0KHQpLmhlYWQoe3Jlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOnQub3ZlcnJpZGVNaW1lVHlwZX0pfTtWdC5wcm90b3R5cGUub3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdD1vaSh0LHt9KSx0Lm1ldGhvZD0iT1BUSU9OUyIsdGhpcy5fbWFrZVJlcXVlc3QodCl9O1Z0Lm9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBWdCh0KS5vcHRpb25zKHtyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTp0Lm92ZXJyaWRlTWltZVR5cGV9KX07VnQucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJkYXRhIix0KSxlPW9pKGUse30pLGUubWV0aG9kPSJQT1NUIixlLmRhdGE9dCx0aGlzLl9tYWtlUmVxdWVzdChlKX07VnQucG9zdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZ0KHQpLnBvc3QodC5kYXRhLHtyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTp0Lm92ZXJyaWRlTWltZVR5cGV9KX07VnQucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoImRhdGEiLHQpLGU9b2koZSx7fSksZS5tZXRob2Q9IlBVVCIsZS5kYXRhPXQsdGhpcy5fbWFrZVJlcXVlc3QoZSl9O1Z0LnB1dD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZ0KHQpLnB1dCh0LmRhdGEse3Jlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOnQub3ZlcnJpZGVNaW1lVHlwZX0pfTtWdC5wcm90b3R5cGUucGF0Y2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJkYXRhIix0KSxlPW9pKGUse30pLGUubWV0aG9kPSJQQVRDSCIsZS5kYXRhPXQsdGhpcy5fbWFrZVJlcXVlc3QoZSl9O1Z0LnBhdGNoPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVnQodCkucGF0Y2godC5kYXRhLHtyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTp0Lm92ZXJyaWRlTWltZVR5cGV9KX07VnQuX0ltcGxlbWVudGF0aW9ucz17fTtWdC5fSW1wbGVtZW50YXRpb25zLmxvYWRJbWFnZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe2xldCBvPW5ldyBJbWFnZTtvLm9ubG9hZD1mdW5jdGlvbigpe28ubmF0dXJhbFdpZHRoPT09MCYmby5uYXR1cmFsSGVpZ2h0PT09MCYmby53aWR0aD09PTAmJm8uaGVpZ2h0PT09MCYmKG8ud2lkdGg9MzAwLG8uaGVpZ2h0PTE1MCksbi5yZXNvbHZlKG8pfSxvLm9uZXJyb3I9ZnVuY3Rpb24ocil7bi5yZWplY3Qocil9LGUmJihZbS5jb250YWlucyh0KT9vLmNyb3NzT3JpZ2luPSJ1c2UtY3JlZGVudGlhbHMiOm8uY3Jvc3NPcmlnaW49IiIpLG8uc3JjPXR9O1Z0Ll9JbXBsZW1lbnRhdGlvbnMuY3JlYXRlSW1hZ2U9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzPXQudXJsO1Z0LnN1cHBvcnRzSW1hZ2VCaXRtYXBPcHRpb25zKCkudGhlbihmdW5jdGlvbihmKXtpZighKGYmJmkpKXtWdC5fSW1wbGVtZW50YXRpb25zLmxvYWRJbWFnZUVsZW1lbnQocyxlLG4pO3JldHVybn1sZXQgdT0iYmxvYiIsYz0iR0VUIixsPUhzKCkscD1WdC5fSW1wbGVtZW50YXRpb25zLmxvYWRXaXRoWGhyKHMsdSxjLHZvaWQgMCx2b2lkIDAsbCx2b2lkIDAsdm9pZCAwLHZvaWQgMCk7cmV0dXJuIG0ocCkmJm0ocC5hYm9ydCkmJih0LmNhbmNlbEZ1bmN0aW9uPWZ1bmN0aW9uKCl7cC5hYm9ydCgpfSksbC5wcm9taXNlLnRoZW4oZnVuY3Rpb24oZCl7aWYoIW0oZCkpe24ucmVqZWN0KG5ldyBBZShgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCAke3N9IGJ1dCBpdCBjb250YWluZWQgbm8gY29udGVudC5gKSk7cmV0dXJufXJldHVybiBWdC5jcmVhdGVJbWFnZUJpdG1hcEZyb21CbG9iKGQse2ZsaXBZOm8scHJlbXVsdGlwbHlBbHBoYTohMSxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246cn0pfSkudGhlbihmdW5jdGlvbihkKXtuLnJlc29sdmUoZCl9KX0pLmNhdGNoKGZ1bmN0aW9uKGYpe24ucmVqZWN0KGYpfSl9O1Z0LmNyZWF0ZUltYWdlQml0bWFwRnJvbUJsb2I9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJvcHRpb25zIixlKSx5LnR5cGVPZi5ib29sKCJvcHRpb25zLmZsaXBZIixlLmZsaXBZKSx5LnR5cGVPZi5ib29sKCJvcHRpb25zLnByZW11bHRpcGx5QWxwaGEiLGUucHJlbXVsdGlwbHlBbHBoYSkseS50eXBlT2YuYm9vbCgib3B0aW9ucy5za2lwQ29sb3JTcGFjZUNvbnZlcnNpb24iLGUuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uKSxjcmVhdGVJbWFnZUJpdG1hcCh0LHtpbWFnZU9yaWVudGF0aW9uOmUuZmxpcFk/ImZsaXBZIjoiZnJvbS1pbWFnZSIscHJlbXVsdGlwbHlBbHBoYTplLnByZW11bHRpcGx5QWxwaGE/InByZW11bHRpcGx5Ijoibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246ZS5za2lwQ29sb3JTcGFjZUNvbnZlcnNpb24/Im5vbmUiOiJkZWZhdWx0In0pfTtYQz10eXBlb2YgWE1MSHR0cFJlcXVlc3Q+InUiO1Z0Ll9JbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHI9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9cUMuZXhlYyh0KTtpZihmIT09bnVsbCl7aS5yZXNvbHZlKEtDKGYsZSkpO3JldHVybn1pZihYQyl7V0ModCxlLG4sbyxyLGkscyk7cmV0dXJufWxldCB1PW5ldyBYTUxIdHRwUmVxdWVzdDtpZihZbS5jb250YWlucyh0KSYmKHUud2l0aENyZWRlbnRpYWxzPSEwKSx1Lm9wZW4obix0LCEwKSxtKHMpJiZtKHUub3ZlcnJpZGVNaW1lVHlwZSkmJnUub3ZlcnJpZGVNaW1lVHlwZShzKSxtKHIpKWZvcihsZXQgbCBpbiByKXIuaGFzT3duUHJvcGVydHkobCkmJnUuc2V0UmVxdWVzdEhlYWRlcihsLHJbbF0pO20oZSkmJih1LnJlc3BvbnNlVHlwZT1lKTtsZXQgYz0hMTtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciJiYoYz10LmluZGV4T2YoImZpbGU6Ly8iKT09PTB8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubG9jYXRpb24ub3JpZ2luPT09ImZpbGU6Ly8iKSx1Lm9ubG9hZD1mdW5jdGlvbigpe2lmKCh1LnN0YXR1czwyMDB8fHUuc3RhdHVzPj0zMDApJiYhKGMmJnUuc3RhdHVzPT09MCkpe2kucmVqZWN0KG5ldyBsZih1LnN0YXR1cyx1LnJlc3BvbnNlLHUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKTtyZXR1cm59bGV0IGw9dS5yZXNwb25zZSxwPXUucmVzcG9uc2VUeXBlO2lmKG49PT0iSEVBRCJ8fG49PT0iT1BUSU9OUyIpe2xldCBoPXUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkudHJpbSgpLnNwbGl0KC9bXHJcbl0rLyksXz17fTtoLmZvckVhY2goZnVuY3Rpb24oZyl7bGV0IGI9Zy5zcGxpdCgiOiAiKSx3PWIuc2hpZnQoKTtfW3ddPWIuam9pbigiOiAiKX0pLGkucmVzb2x2ZShfKTtyZXR1cm59aWYodS5zdGF0dXM9PT0yMDQpaS5yZXNvbHZlKHZvaWQgMCk7ZWxzZSBpZihtKGwpJiYoIW0oZSl8fHA9PT1lKSlpLnJlc29sdmUobCk7ZWxzZSBpZihlPT09Impzb24iJiZ0eXBlb2YgbD09InN0cmluZyIpdHJ5e2kucmVzb2x2ZShKU09OLnBhcnNlKGwpKX1jYXRjaChkKXtpLnJlamVjdChkKX1lbHNlKHA9PT0iInx8cD09PSJkb2N1bWVudCIpJiZtKHUucmVzcG9uc2VYTUwpJiZ1LnJlc3BvbnNlWE1MLmhhc0NoaWxkTm9kZXMoKT9pLnJlc29sdmUodS5yZXNwb25zZVhNTCk6KHA9PT0iInx8cD09PSJ0ZXh0IikmJm0odS5yZXNwb25zZVRleHQpP2kucmVzb2x2ZSh1LnJlc3BvbnNlVGV4dCk6aS5yZWplY3QobmV3IEFlKCJJbnZhbGlkIFhNTEh0dHBSZXF1ZXN0IHJlc3BvbnNlIHR5cGUuIikpfSx1Lm9uZXJyb3I9ZnVuY3Rpb24obCl7aS5yZWplY3QobmV3IGxmKX0sdS5zZW5kKG8pLHV9O1Z0Ll9JbXBsZW1lbnRhdGlvbnMubG9hZEFuZEV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB1QSh0LGUpLmNhdGNoKGZ1bmN0aW9uKG8pe24ucmVqZWN0KG8pfSl9O1Z0Ll9EZWZhdWx0SW1wbGVtZW50YXRpb25zPXt9O1Z0Ll9EZWZhdWx0SW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlPVZ0Ll9JbXBsZW1lbnRhdGlvbnMuY3JlYXRlSW1hZ2U7VnQuX0RlZmF1bHRJbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHI9VnQuX0ltcGxlbWVudGF0aW9ucy5sb2FkV2l0aFhocjtWdC5fRGVmYXVsdEltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdD1WdC5fSW1wbGVtZW50YXRpb25zLmxvYWRBbmRFeGVjdXRlU2NyaXB0O1Z0LkRFRkFVTFQ9T2JqZWN0LmZyZWV6ZShuZXcgVnQoe3VybDp0eXBlb2YgZG9jdW1lbnQ+InUiPyIiOmRvY3VtZW50LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXX0pKTtyaT1WdH0pO2Z1bmN0aW9uIF9mKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNULHRoaXMuX2RhdGVzPXZvaWQgMCx0aGlzLl9zYW1wbGVzPXZvaWQgMCx0aGlzLl9kYXRlQ29sdW1uPS0xLHRoaXMuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj0tMSx0aGlzLl95UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49LTEsdGhpcy5fdXQxTWludXNVdGNTZWNvbmRzQ29sdW1uPS0xLHRoaXMuX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj0tMSx0aGlzLl95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49LTEsdGhpcy5fdGFpTWludXNVdGNTZWNvbmRzQ29sdW1uPS0xLHRoaXMuX2NvbHVtbkNvdW50PTAsdGhpcy5fbGFzdEluZGV4PS0xLHRoaXMuX2FkZE5ld0xlYXBTZWNvbmRzPXQuYWRkTmV3TGVhcFNlY29uZHM/PyEwLG0odC5kYXRhKT9VQSh0aGlzLHQuZGF0YSk6VUEodGhpcyx7Y29sdW1uTmFtZXM6WyJkYXRlSXNvODYwMSIsIm1vZGlmaWVkSnVsaWFuRGF0ZVV0YyIsInhQb2xlV2FuZGVyUmFkaWFucyIsInlQb2xlV2FuZGVyUmFkaWFucyIsInV0MU1pbnVzVXRjU2Vjb25kcyIsImxlbmd0aE9mRGF5Q29ycmVjdGlvblNlY29uZHMiLCJ4Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiLCJ5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiLCJ0YWlNaW51c1V0Y1NlY29uZHMiXSxzYW1wbGVzOltdfSl9ZnVuY3Rpb24gWUModCxlKXtyZXR1cm4gVm4uY29tcGFyZSh0Lmp1bGlhbkRhdGUsZSl9ZnVuY3Rpb24gVUEodCxlKXtpZighbShlLmNvbHVtbk5hbWVzKSl0aHJvdyBuZXcgQWUoIkVycm9yIGluIGxvYWRlZCBFT1AgZGF0YTogVGhlIGNvbHVtbk5hbWVzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUuc2FtcGxlcykpdGhyb3cgbmV3IEFlKCJFcnJvciBpbiBsb2FkZWQgRU9QIGRhdGE6IFRoZSBzYW1wbGVzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiIpO2xldCBuPWUuY29sdW1uTmFtZXMuaW5kZXhPZigibW9kaWZpZWRKdWxpYW5EYXRlVXRjIiksbz1lLmNvbHVtbk5hbWVzLmluZGV4T2YoInhQb2xlV2FuZGVyUmFkaWFucyIpLHI9ZS5jb2x1bW5OYW1lcy5pbmRleE9mKCJ5UG9sZVdhbmRlclJhZGlhbnMiKSxpPWUuY29sdW1uTmFtZXMuaW5kZXhPZigidXQxTWludXNVdGNTZWNvbmRzIikscz1lLmNvbHVtbk5hbWVzLmluZGV4T2YoInhDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFucyIpLGY9ZS5jb2x1bW5OYW1lcy5pbmRleE9mKCJ5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiKSx1PWUuY29sdW1uTmFtZXMuaW5kZXhPZigidGFpTWludXNVdGNTZWNvbmRzIik7aWYobjwwfHxvPDB8fHI8MHx8aTwwfHxzPDB8fGY8MHx8dTwwKXRocm93IG5ldyBBZSgiRXJyb3IgaW4gbG9hZGVkIEVPUCBkYXRhOiBUaGUgY29sdW1uTmFtZXMgcHJvcGVydHkgbXVzdCBpbmNsdWRlIG1vZGlmaWVkSnVsaWFuRGF0ZVV0YywgeFBvbGVXYW5kZXJSYWRpYW5zLCB5UG9sZVdhbmRlclJhZGlhbnMsIHV0MU1pbnVzVXRjU2Vjb25kcywgeENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zLCB5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMsIGFuZCB0YWlNaW51c1V0Y1NlY29uZHMgY29sdW1ucyIpO2xldCBjPXQuX3NhbXBsZXM9ZS5zYW1wbGVzLGw9dC5fZGF0ZXM9W107dC5fZGF0ZUNvbHVtbj1uLHQuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj1vLHQuX3lQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj1yLHQuX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbj1pLHQuX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj1zLHQuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj1mLHQuX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbj11LHQuX2NvbHVtbkNvdW50PWUuY29sdW1uTmFtZXMubGVuZ3RoLHQuX2xhc3RJbmRleD12b2lkIDA7bGV0IHAsZD10Ll9hZGROZXdMZWFwU2Vjb25kcztmb3IobGV0IGg9MCxfPWMubGVuZ3RoO2g8XztoKz10Ll9jb2x1bW5Db3VudCl7bGV0IGc9Y1toK25dLGI9Y1toK3VdLHc9Zyt5bi5NT0RJRklFRF9KVUxJQU5fREFURV9ESUZGRVJFTkNFLE89bmV3IFZuKHcsYixPZS5UQUkpO2lmKGwucHVzaChPKSxkKXtpZihiIT09cCYmbShwKSl7bGV0IEU9Vm4ubGVhcFNlY29uZHMsVD16cyhFLE8sWUMpO2lmKFQ8MCl7bGV0IHg9bmV3IFhlKE8sYik7RS5zcGxpY2UoflQsMCx4KX19cD1ifX19ZnVuY3Rpb24ga0EodCxlLG4sbyxyKXtsZXQgaT1uKm87ci54UG9sZVdhbmRlcj1lW2krdC5feFBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSxyLnlQb2xlV2FuZGVyPWVbaSt0Ll95UG9sZVdhbmRlclJhZGlhbnNDb2x1bW5dLHIueFBvbGVPZmZzZXQ9ZVtpK3QuX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0sci55UG9sZU9mZnNldD1lW2krdC5feUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uXSxyLnV0MU1pbnVzVXRjPWVbaSt0Ll91dDFNaW51c1V0Y1NlY29uZHNDb2x1bW5dfWZ1bmN0aW9uIGhmKHQsZSxuKXtyZXR1cm4gZSt0KihuLWUpfWZ1bmN0aW9uIEdBKHQsZSxuLG8scixpLHMpe2xldCBmPXQuX2NvbHVtbkNvdW50O2lmKGk+ZS5sZW5ndGgtMSlyZXR1cm4gcy54UG9sZVdhbmRlcj0wLHMueVBvbGVXYW5kZXI9MCxzLnhQb2xlT2Zmc2V0PTAscy55UG9sZU9mZnNldD0wLHMudXQxTWludXNVdGM9MCxzO2xldCB1PWVbcl0sYz1lW2ldO2lmKHUuZXF1YWxzKGMpfHxvLmVxdWFscyh1KSlyZXR1cm4ga0EodCxuLHIsZixzKSxzO2lmKG8uZXF1YWxzKGMpKXJldHVybiBrQSh0LG4saSxmLHMpLHM7bGV0IGw9Vm4uc2Vjb25kc0RpZmZlcmVuY2Uobyx1KS9Wbi5zZWNvbmRzRGlmZmVyZW5jZShjLHUpLHA9cipmLGQ9aSpmLGg9bltwK3QuX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbl0sXz1uW2QrdC5fdXQxTWludXNVdGNTZWNvbmRzQ29sdW1uXSxnPV8taDtpZihnPi41fHxnPC0uNSl7bGV0IGI9bltwK3QuX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbl0sdz1uW2QrdC5fdGFpTWludXNVdGNTZWNvbmRzQ29sdW1uXTtiIT09dyYmKGMuZXF1YWxzKG8pP2g9XzpfLT13LWIpfXJldHVybiBzLnhQb2xlV2FuZGVyPWhmKGwsbltwK3QuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0sbltkK3QuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0pLHMueVBvbGVXYW5kZXI9aGYobCxuW3ArdC5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSxuW2QrdC5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSkscy54UG9sZU9mZnNldD1oZihsLG5bcCt0Ll94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dLG5bZCt0Ll94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dKSxzLnlQb2xlT2Zmc2V0PWhmKGwsbltwK3QuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0sbltkK3QuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0pLHMudXQxTWludXNVdGM9aGYobCxoLF8pLHN9dmFyIFZBLHpBPSQoKCk9PntMbSgpO1d0KCk7eWUoKTtmdCgpO0RtKCk7b3AoKTtVbSgpO21mKCk7dGkoKTtabCgpO1FsKCk7X2YuZnJvbVVybD1hc3luYyBmdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgidXJsIix0KSxlPWU/P0l0LkVNUFRZX09CSkVDVDtsZXQgbj1yaS5jcmVhdGVJZk5lZWRlZCh0KSxvO3RyeXtvPWF3YWl0IG4uZmV0Y2hKc29uKCl9Y2F0Y2h7dGhyb3cgbmV3IEFlKGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXRyaWV2aW5nIHRoZSBFT1AgZGF0YSBmcm9tIHRoZSBVUkwgJHtuLnVybH0uYCl9cmV0dXJuIG5ldyBfZih7YWRkTmV3TGVhcFNlY29uZHM6ZS5hZGROZXdMZWFwU2Vjb25kcyxkYXRhOm99KX07X2YuTk9ORT1PYmplY3QuZnJlZXplKHtjb21wdXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG0oZSk/KGUueFBvbGVXYW5kZXI9MCxlLnlQb2xlV2FuZGVyPTAsZS54UG9sZU9mZnNldD0wLGUueVBvbGVPZmZzZXQ9MCxlLnV0MU1pbnVzVXRjPTApOmU9bmV3IGFmKDAsMCwwLDAsMCksZX19KTtfZi5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlvbih0LGUpe2lmKCFtKHRoaXMuX3NhbXBsZXMpKXJldHVybjtpZihtKGUpfHwoZT1uZXcgYWYoMCwwLDAsMCwwKSksdGhpcy5fc2FtcGxlcy5sZW5ndGg9PT0wKXJldHVybiBlLnhQb2xlV2FuZGVyPTAsZS55UG9sZVdhbmRlcj0wLGUueFBvbGVPZmZzZXQ9MCxlLnlQb2xlT2Zmc2V0PTAsZS51dDFNaW51c1V0Yz0wLGU7bGV0IG49dGhpcy5fZGF0ZXMsbz10aGlzLl9sYXN0SW5kZXgscj0wLGk9MDtpZihtKG8pKXtsZXQgZj1uW29dLHU9bltvKzFdLGM9Vm4ubGVzc1RoYW5PckVxdWFscyhmLHQpLGw9IW0odSkscD1sfHxWbi5ncmVhdGVyVGhhbk9yRXF1YWxzKHUsdCk7aWYoYyYmcClyZXR1cm4gcj1vLCFsJiZ1LmVxdWFscyh0KSYmKytyLGk9cisxLEdBKHRoaXMsbix0aGlzLl9zYW1wbGVzLHQscixpLGUpLGV9bGV0IHM9enMobix0LFZuLmNvbXBhcmUsdGhpcy5fZGF0ZUNvbHVtbik7cmV0dXJuIHM+PTA/KHM8bi5sZW5ndGgtMSYmbltzKzFdLmVxdWFscyh0KSYmKytzLHI9cyxpPXMpOihpPX5zLHI9aS0xLHI8MCYmKHI9MCkpLHRoaXMuX2xhc3RJbmRleD1yLEdBKHRoaXMsbix0aGlzLl9zYW1wbGVzLHQscixpLGUpLGV9O1ZBPV9mfSk7ZnVuY3Rpb24gRW8odCxlLG4pe3RoaXMuaGVhZGluZz10Pz8wLHRoaXMucGl0Y2g9ZT8/MCx0aGlzLnJvbGw9bj8/MH12YXIgeXAsakE9JCgoKT0+e2Z0KCk7SHQoKTtLdCgpO0VvLmZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKHQsZSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoInF1YXRlcm5pb24gaXMgcmVxdWlyZWQiKTttKGUpfHwoZT1uZXcgRW8pO2xldCBuPTIqKHQudyp0LnktdC56KnQueCksbz0xLTIqKHQueCp0LngrdC55KnQueSkscj0yKih0LncqdC54K3QueSp0LnopLGk9MS0yKih0LnkqdC55K3Queip0LnopLHM9MioodC53KnQueit0LngqdC55KTtyZXR1cm4gZS5oZWFkaW5nPS1NYXRoLmF0YW4yKHMsaSksZS5yb2xsPU1hdGguYXRhbjIocixvKSxlLnBpdGNoPS1QLmFzaW5DbGFtcGVkKG4pLGV9O0VvLmZyb21EZWdyZWVzPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJoZWFkaW5nIGlzIHJlcXVpcmVkIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoInBpdGNoIGlzIHJlcXVpcmVkIik7aWYoIW0obikpdGhyb3cgbmV3IEQoInJvbGwgaXMgcmVxdWlyZWQiKTtyZXR1cm4gbShvKXx8KG89bmV3IEVvKSxvLmhlYWRpbmc9dCpQLlJBRElBTlNfUEVSX0RFR1JFRSxvLnBpdGNoPWUqUC5SQURJQU5TX1BFUl9ERUdSRUUsby5yb2xsPW4qUC5SQURJQU5TX1BFUl9ERUdSRUUsb307RW8uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihtKHQpKXJldHVybiBtKGUpPyhlLmhlYWRpbmc9dC5oZWFkaW5nLGUucGl0Y2g9dC5waXRjaCxlLnJvbGw9dC5yb2xsLGUpOm5ldyBFbyh0LmhlYWRpbmcsdC5waXRjaCx0LnJvbGwpfTtFby5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fG0odCkmJm0oZSkmJnQuaGVhZGluZz09PWUuaGVhZGluZyYmdC5waXRjaD09PWUucGl0Y2gmJnQucm9sbD09PWUucm9sbH07RW8uZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdD09PWV8fG0odCkmJm0oZSkmJlAuZXF1YWxzRXBzaWxvbih0LmhlYWRpbmcsZS5oZWFkaW5nLG4sbykmJlAuZXF1YWxzRXBzaWxvbih0LnBpdGNoLGUucGl0Y2gsbixvKSYmUC5lcXVhbHNFcHNpbG9uKHQucm9sbCxlLnJvbGwsbixvKX07RW8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBFby5jbG9uZSh0aGlzLHQpfTtFby5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBFby5lcXVhbHModGhpcyx0KX07RW8ucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBFby5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlLG4pfTtFby5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy5oZWFkaW5nfSwgJHt0aGlzLnBpdGNofSwgJHt0aGlzLnJvbGx9KWB9O3lwPUVvfSk7ZnVuY3Rpb24gJEMoKXtsZXQgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXtsZXQgbz10W2VdLmdldEF0dHJpYnV0ZSgic3JjIikscj1xQS5leGVjKG8pO2lmKHIhPT1udWxsKXJldHVybiByWzFdfX1mdW5jdGlvbiBLQSh0KXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PiJ1Ij90OihtKGdwKXx8KGdwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSksZ3AuaHJlZj10LGdwLmhyZWYpfWZ1bmN0aW9uIFdBKCl7aWYobShXcykpcmV0dXJuIFdzO2xldCB0O2lmKHR5cGVvZiBDRVNJVU1fQkFTRV9VUkw8InUiP3Q9Q0VTSVVNX0JBU0VfVVJMOm0oSEE/LnVybCk/dD11ZigiLiIsSEEudXJsKTp0eXBlb2YgZGVmaW5lPT0ib2JqZWN0IiYmbShkZWZpbmUuYW1kKSYmIWRlZmluZS5hbWQudG9VcmxVbmRlZmluZWQmJm0oZHIudG9VcmwpP3Q9dWYoIi4uIixYcygiQ29yZS9idWlsZE1vZHVsZVVybC5qcyIpKTp0PSRDKCksIW0odCkpdGhyb3cgbmV3IEQoIlVuYWJsZSB0byBkZXRlcm1pbmUgQ2VzaXVtIGJhc2UgVVJMIGF1dG9tYXRpY2FsbHksIHRyeSBkZWZpbmluZyBhIGdsb2JhbCB2YXJpYWJsZSBjYWxsZWQgQ0VTSVVNX0JBU0VfVVJMLiIpO3JldHVybiBXcz1uZXcgcmkoe3VybDpLQSh0KX0pLFdzLmFwcGVuZEZvcndhcmRTbGFzaCgpLFdzfWZ1bmN0aW9uIFpDKHQpe3JldHVybiBLQShkci50b1VybChgLi4vJHt0fWApKX1mdW5jdGlvbiBYQSh0KXtyZXR1cm4gV0EoKS5nZXREZXJpdmVkUmVzb3VyY2Uoe3VybDp0fSkudXJsfWZ1bmN0aW9uIFhzKHQpe3JldHVybiBtKEFwKXx8KHR5cGVvZiBkZWZpbmU9PSJvYmplY3QiJiZtKGRlZmluZS5hbWQpJiYhZGVmaW5lLmFtZC50b1VybFVuZGVmaW5lZCYmbShkci50b1VybCk/QXA9WkM6QXA9WEEpLEFwKHQpfXZhciBIQSxxQSxncCxXcyxBcCxicCxRbT0kKCgpPT57ZnQoKTtIdCgpO0htKCk7bWYoKTtIQT17fSxxQT0vKCg/Oi4qXC8pfF4pQ2VzaXVtXC5qcyg/Olw/fFwjfCQpLztYcy5fY2VzaXVtU2NyaXB0UmVnZXg9cUE7WHMuX2J1aWxkTW9kdWxlVXJsRnJvbUJhc2VVcmw9WEE7WHMuX2NsZWFyQmFzZVJlc291cmNlPWZ1bmN0aW9uKCl7V3M9dm9pZCAwfTtYcy5zZXRCYXNlVXJsPWZ1bmN0aW9uKHQpe1dzPXJpLkRFRkFVTFQuZ2V0RGVyaXZlZFJlc291cmNlKHt1cmw6dH0pfTtYcy5nZXRDZXNpdW1CYXNlVXJsPVdBO2JwPVhzfSk7ZnVuY3Rpb24gUUModCxlLG4pe3RoaXMueD10LHRoaXMueT1lLHRoaXMucz1ufXZhciB3cCxKbT0kKCgpPT57d3A9UUN9KTtmdW5jdGlvbiBuaCh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx0aGlzLl94eXNGaWxlVXJsVGVtcGxhdGU9cmkuY3JlYXRlSWZOZWVkZWQodC54eXNGaWxlVXJsVGVtcGxhdGUpLHRoaXMuX2ludGVycG9sYXRpb25PcmRlcj10LmludGVycG9sYXRpb25PcmRlcj8/OSx0aGlzLl9zYW1wbGVaZXJvSnVsaWFuRXBoZW1lcmlzRGF0ZT10LnNhbXBsZVplcm9KdWxpYW5FcGhlbWVyaXNEYXRlPz8yNDQyMzk2NWUtMSx0aGlzLl9zYW1wbGVaZXJvRGF0ZVRUPW5ldyBWbih0aGlzLl9zYW1wbGVaZXJvSnVsaWFuRXBoZW1lcmlzRGF0ZSwwLE9lLlRBSSksdGhpcy5fc3RlcFNpemVEYXlzPXQuc3RlcFNpemVEYXlzPz8xLHRoaXMuX3NhbXBsZXNQZXJYeXNGaWxlPXQuc2FtcGxlc1Blclh5c0ZpbGU/PzFlMyx0aGlzLl90b3RhbFNhbXBsZXM9dC50b3RhbFNhbXBsZXM/PzI3NDI2LHRoaXMuX3NhbXBsZXM9bmV3IEFycmF5KHRoaXMuX3RvdGFsU2FtcGxlcyozKSx0aGlzLl9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3M9W107bGV0IGU9dGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLG49dGhpcy5fZGVub21pbmF0b3JzPW5ldyBBcnJheShlKzEpLG89dGhpcy5feFRhYmxlPW5ldyBBcnJheShlKzEpLHI9TWF0aC5wb3codGhpcy5fc3RlcFNpemVEYXlzLGUpO2ZvcihsZXQgaT0wO2k8PWU7KytpKXtuW2ldPXIsb1tpXT1pKnRoaXMuX3N0ZXBTaXplRGF5cztmb3IobGV0IHM9MDtzPD1lOysrcylzIT09aSYmKG5baV0qPWktcyk7bltpXT0xL25baV19dGhpcy5fd29yaz1uZXcgQXJyYXkoZSsxKSx0aGlzLl9jb2VmPW5ldyBBcnJheShlKzEpfWZ1bmN0aW9uIHRoKHQsZSxuKXtsZXQgbz1KQztyZXR1cm4gby5kYXlOdW1iZXI9ZSxvLnNlY29uZHNPZkRheT1uLFZuLmRheXNEaWZmZXJlbmNlKG8sdC5fc2FtcGxlWmVyb0RhdGVUVCl9ZnVuY3Rpb24gZWgodCxlKXtpZih0Ll9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3NbZV0pcmV0dXJuIHQuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1tlXTtsZXQgbixvPXQuX3h5c0ZpbGVVcmxUZW1wbGF0ZTttKG8pP249by5nZXREZXJpdmVkUmVzb3VyY2Uoe3RlbXBsYXRlVmFsdWVzOnswOmV9fSk6bj1uZXcgcmkoe3VybDpicChgQXNzZXRzL0lBVTIwMDZfWFlTL0lBVTIwMDZfWFlTXyR7ZX0uanNvbmApfSk7bGV0IHI9bi5mZXRjaEpzb24oKS50aGVuKGZ1bmN0aW9uKGkpe3QuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1tlXT0hMTtsZXQgcz10Ll9zYW1wbGVzLGY9aS5zYW1wbGVzLHU9ZSp0Ll9zYW1wbGVzUGVyWHlzRmlsZSozO2ZvcihsZXQgYz0wLGw9Zi5sZW5ndGg7YzxsOysrYylzW3UrY109ZltjXX0pO3JldHVybiB0Ll9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3NbZV09cixyfXZhciBKQyxZQSwkQT0kKCgpPT57UW0oKTt5ZSgpO2Z0KCk7Sm0oKTtvcCgpO21mKCk7UWwoKTtKQz1uZXcgVm4oMCwwLE9lLlRBSSk7bmgucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9dGgodGhpcyx0LGUpLGk9dGgodGhpcyxuLG8pLHM9ci90aGlzLl9zdGVwU2l6ZURheXMtdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLzJ8MDtzPDAmJihzPTApO2xldCBmPWkvdGhpcy5fc3RlcFNpemVEYXlzLXRoaXMuX2ludGVycG9sYXRpb25PcmRlci8yfDArdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyO2Y+PXRoaXMuX3RvdGFsU2FtcGxlcyYmKGY9dGhpcy5fdG90YWxTYW1wbGVzLTEpO2xldCB1PXMvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCxjPWYvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCxsPVtdO2ZvcihsZXQgcD11O3A8PWM7KytwKWwucHVzaChlaCh0aGlzLHApKTtyZXR1cm4gUHJvbWlzZS5hbGwobCl9O25oLnByb3RvdHlwZS5jb21wdXRlWHlzUmFkaWFucz1mdW5jdGlvbih0LGUsbil7bGV0IG89dGgodGhpcyx0LGUpO2lmKG88MClyZXR1cm47bGV0IHI9by90aGlzLl9zdGVwU2l6ZURheXN8MDtpZihyPj10aGlzLl90b3RhbFNhbXBsZXMpcmV0dXJuO2xldCBpPXRoaXMuX2ludGVycG9sYXRpb25PcmRlcixzPXItKGkvMnwwKTtzPDAmJihzPTApO2xldCBmPXMraTtmPj10aGlzLl90b3RhbFNhbXBsZXMmJihmPXRoaXMuX3RvdGFsU2FtcGxlcy0xLHM9Zi1pLHM8MCYmKHM9MCkpO2xldCB1PSExLGM9dGhpcy5fc2FtcGxlcztpZihtKGNbcyozXSl8fChlaCh0aGlzLHMvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCksdT0hMCksbShjW2YqM10pfHwoZWgodGhpcyxmL3RoaXMuX3NhbXBsZXNQZXJYeXNGaWxlfDApLHU9ITApLHUpcmV0dXJuO20obik/KG4ueD0wLG4ueT0wLG4ucz0wKTpuPW5ldyB3cCgwLDAsMCk7bGV0IGw9by1zKnRoaXMuX3N0ZXBTaXplRGF5cyxwPXRoaXMuX3dvcmssZD10aGlzLl9kZW5vbWluYXRvcnMsaD10aGlzLl9jb2VmLF89dGhpcy5feFRhYmxlLGcsYjtmb3IoZz0wO2c8PWk7KytnKXBbZ109bC1fW2ddO2ZvcihnPTA7Zzw9aTsrK2cpe2ZvcihoW2ddPTEsYj0wO2I8PWk7KytiKWIhPT1nJiYoaFtnXSo9cFtiXSk7aFtnXSo9ZFtnXTtsZXQgdz0ocytnKSozO24ueCs9aFtnXSpjW3crK10sbi55Kz1oW2ddKmNbdysrXSxuLnMrPWhbZ10qY1t3XX1yZXR1cm4gbn07WUE9bmh9KTt2YXIgcnMsTm4sV28sWkEsUUE9JCgoKT0+e2Z0KCk7Tm49e3JlcXVlc3RGdWxsc2NyZWVuOnZvaWQgMCxleGl0RnVsbHNjcmVlbjp2b2lkIDAsZnVsbHNjcmVlbkVuYWJsZWQ6dm9pZCAwLGZ1bGxzY3JlZW5FbGVtZW50OnZvaWQgMCxmdWxsc2NyZWVuY2hhbmdlOnZvaWQgMCxmdWxsc2NyZWVuZXJyb3I6dm9pZCAwfSxXbz17fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXbyx7ZWxlbWVudDp7Z2V0OmZ1bmN0aW9uKCl7aWYoV28uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIGRvY3VtZW50W05uLmZ1bGxzY3JlZW5FbGVtZW50XX19LGNoYW5nZUV2ZW50TmFtZTp7Z2V0OmZ1bmN0aW9uKCl7aWYoV28uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIE5uLmZ1bGxzY3JlZW5jaGFuZ2V9fSxlcnJvckV2ZW50TmFtZTp7Z2V0OmZ1bmN0aW9uKCl7aWYoV28uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIE5uLmZ1bGxzY3JlZW5lcnJvcn19LGVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe2lmKFdvLnN1cHBvcnRzRnVsbHNjcmVlbigpKXJldHVybiBkb2N1bWVudFtObi5mdWxsc2NyZWVuRW5hYmxlZF19fSxmdWxsc2NyZWVuOntnZXQ6ZnVuY3Rpb24oKXtpZihXby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gV28uZWxlbWVudCE9PW51bGx9fX0pO1dvLnN1cHBvcnRzRnVsbHNjcmVlbj1mdW5jdGlvbigpe2lmKG0ocnMpKXJldHVybiBycztycz0hMTtsZXQgdD1kb2N1bWVudC5ib2R5O2lmKHR5cGVvZiB0LnJlcXVlc3RGdWxsc2NyZWVuPT0iZnVuY3Rpb24iKXJldHVybiBObi5yZXF1ZXN0RnVsbHNjcmVlbj0icmVxdWVzdEZ1bGxzY3JlZW4iLE5uLmV4aXRGdWxsc2NyZWVuPSJleGl0RnVsbHNjcmVlbiIsTm4uZnVsbHNjcmVlbkVuYWJsZWQ9ImZ1bGxzY3JlZW5FbmFibGVkIixObi5mdWxsc2NyZWVuRWxlbWVudD0iZnVsbHNjcmVlbkVsZW1lbnQiLE5uLmZ1bGxzY3JlZW5jaGFuZ2U9ImZ1bGxzY3JlZW5jaGFuZ2UiLE5uLmZ1bGxzY3JlZW5lcnJvcj0iZnVsbHNjcmVlbmVycm9yIixycz0hMCxycztsZXQgZT1bIndlYmtpdCIsIm1veiIsIm8iLCJtcyIsImtodG1sIl0sbjtmb3IobGV0IG89MCxyPWUubGVuZ3RoO288cjsrK28pe2xldCBpPWVbb107bj1gJHtpfVJlcXVlc3RGdWxsc2NyZWVuYCx0eXBlb2YgdFtuXT09ImZ1bmN0aW9uIj8oTm4ucmVxdWVzdEZ1bGxzY3JlZW49bixycz0hMCk6KG49YCR7aX1SZXF1ZXN0RnVsbFNjcmVlbmAsdHlwZW9mIHRbbl09PSJmdW5jdGlvbiImJihObi5yZXF1ZXN0RnVsbHNjcmVlbj1uLHJzPSEwKSksbj1gJHtpfUV4aXRGdWxsc2NyZWVuYCx0eXBlb2YgZG9jdW1lbnRbbl09PSJmdW5jdGlvbiI/Tm4uZXhpdEZ1bGxzY3JlZW49bjoobj1gJHtpfUNhbmNlbEZ1bGxTY3JlZW5gLHR5cGVvZiBkb2N1bWVudFtuXT09ImZ1bmN0aW9uIiYmKE5uLmV4aXRGdWxsc2NyZWVuPW4pKSxuPWAke2l9RnVsbHNjcmVlbkVuYWJsZWRgLGRvY3VtZW50W25dIT09dm9pZCAwP05uLmZ1bGxzY3JlZW5FbmFibGVkPW46KG49YCR7aX1GdWxsU2NyZWVuRW5hYmxlZGAsZG9jdW1lbnRbbl0hPT12b2lkIDAmJihObi5mdWxsc2NyZWVuRW5hYmxlZD1uKSksbj1gJHtpfUZ1bGxzY3JlZW5FbGVtZW50YCxkb2N1bWVudFtuXSE9PXZvaWQgMD9Obi5mdWxsc2NyZWVuRWxlbWVudD1uOihuPWAke2l9RnVsbFNjcmVlbkVsZW1lbnRgLGRvY3VtZW50W25dIT09dm9pZCAwJiYoTm4uZnVsbHNjcmVlbkVsZW1lbnQ9bikpLG49YCR7aX1mdWxsc2NyZWVuY2hhbmdlYCxkb2N1bWVudFtgb24ke259YF0hPT12b2lkIDAmJihpPT09Im1zIiYmKG49Ik1TRnVsbHNjcmVlbkNoYW5nZSIpLE5uLmZ1bGxzY3JlZW5jaGFuZ2U9biksbj1gJHtpfWZ1bGxzY3JlZW5lcnJvcmAsZG9jdW1lbnRbYG9uJHtufWBdIT09dm9pZCAwJiYoaT09PSJtcyImJihuPSJNU0Z1bGxzY3JlZW5FcnJvciIpLE5uLmZ1bGxzY3JlZW5lcnJvcj1uKX1yZXR1cm4gcnN9O1dvLnJlcXVlc3RGdWxsc2NyZWVuPWZ1bmN0aW9uKHQsZSl7V28uc3VwcG9ydHNGdWxsc2NyZWVuKCkmJnRbTm4ucmVxdWVzdEZ1bGxzY3JlZW5dKHt2ckRpc3BsYXk6ZX0pfTtXby5leGl0RnVsbHNjcmVlbj1mdW5jdGlvbigpe1dvLnN1cHBvcnRzRnVsbHNjcmVlbigpJiZkb2N1bWVudFtObi5leGl0RnVsbHNjcmVlbl0oKX07V28uX25hbWVzPU5uO1pBPVdvfSk7ZnVuY3Rpb24gWXModCl7bGV0IGU9dC5zcGxpdCgiLiIpO2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7bjxvOysrbillW25dPXBhcnNlSW50KGVbbl0sMTApO3JldHVybiBlfWZ1bmN0aW9uIGFoKCl7aWYoIW0oVHApJiYoVHA9ITEsIUNwKCkpKXtsZXQgdD0vIENocm9tZVwvKFtcLjAtOV0rKS8uZXhlYyhTby51c2VyQWdlbnQpO3QhPT1udWxsJiYoVHA9ITAsSkE9WXModFsxXSkpfXJldHVybiBUcH1mdW5jdGlvbiB0Mygpe3JldHVybiBhaCgpJiZKQX1mdW5jdGlvbiBlYigpe2lmKCFtKE9wKSYmKE9wPSExLCFhaCgpJiYhQ3AoKSYmLyBTYWZhcmlcL1tcLjAtOV0rLy50ZXN0KFNvLnVzZXJBZ2VudCkpKXtsZXQgdD0vIFZlcnNpb25cLyhbXC4wLTldKykvLmV4ZWMoU28udXNlckFnZW50KTt0IT09bnVsbCYmKE9wPSEwLHRiPVlzKHRbMV0pKX1yZXR1cm4gT3B9ZnVuY3Rpb24gZTMoKXtyZXR1cm4gZWIoKSYmdGJ9ZnVuY3Rpb24gbmIoKXtpZighbShFcCkpe0VwPSExO2xldCB0PS8gQXBwbGVXZWJLaXRcLyhbXC4wLTldKykoXCs/KS8uZXhlYyhTby51c2VyQWdlbnQpO3QhPT1udWxsJiYoRXA9ITAsc2g9WXModFsxXSksc2guaXNOaWdodGx5PSEhdFsyXSl9cmV0dXJuIEVwfWZ1bmN0aW9uIG4zKCl7cmV0dXJuIG5iKCkmJnNofWZ1bmN0aW9uIG9iKCl7aWYoIW0oeWYpKXt5Zj0hMTtsZXQgdDtTby5hcHBOYW1lPT09Ik1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciI/KHQ9L01TSUUgKFswLTldezEsfVtcLjAtOV17MCx9KS8uZXhlYyhTby51c2VyQWdlbnQpLHQhPT1udWxsJiYoeWY9ITAsY2g9WXModFsxXSkpKTpTby5hcHBOYW1lPT09Ik5ldHNjYXBlIiYmKHQ9L1RyaWRlbnRcLy4qcnY6KFswLTldezEsfVtcLjAtOV17MCx9KS8uZXhlYyhTby51c2VyQWdlbnQpLHQhPT1udWxsJiYoeWY9ITAsY2g9WXModFsxXSkpKX1yZXR1cm4geWZ9ZnVuY3Rpb24gbzMoKXtyZXR1cm4gb2IoKSYmY2h9ZnVuY3Rpb24gQ3AoKXtpZighbShScCkpe1JwPSExO2xldCB0PS8gRWRnXC8oW1wuMC05XSspLy5leGVjKFNvLnVzZXJBZ2VudCk7dCE9PW51bGwmJihScD0hMCxyYj1Zcyh0WzFdKSl9cmV0dXJuIFJwfWZ1bmN0aW9uIHIzKCl7cmV0dXJuIENwKCkmJnJifWZ1bmN0aW9uIFBwKCl7aWYoIW0oU3ApKXtTcD0hMTtsZXQgdD0vRmlyZWZveFwvKFtcLjAtOV0rKS8uZXhlYyhTby51c2VyQWdlbnQpO3QhPT1udWxsJiYoU3A9ITAsZmg9WXModFsxXSkpfXJldHVybiBTcH1mdW5jdGlvbiBpMygpe3JldHVybiBtKG9oKXx8KG9oPS9XaW5kb3dzL2kudGVzdChTby5hcHBWZXJzaW9uKSksb2h9ZnVuY3Rpb24gczMoKXtyZXR1cm4gbShyaCl8fChyaD1uYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBob25lInx8bmF2aWdhdG9yLnBsYXRmb3JtPT09ImlQb2QifHxuYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBhZCIpLHJofWZ1bmN0aW9uIGMzKCl7cmV0dXJuIFBwKCkmJmZofWZ1bmN0aW9uIGEzKCl7cmV0dXJuIG0oaWgpfHwoaWg9IVBwKCkmJnR5cGVvZiBQb2ludGVyRXZlbnQ8InUiJiYoIW0oU28ucG9pbnRlckVuYWJsZWQpfHxTby5wb2ludGVyRW5hYmxlZCkpLGlofWZ1bmN0aW9uIHNiKCl7aWYoIW0oeHApKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTt0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7aW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7Iik7bGV0IGU9dC5zdHlsZS5pbWFnZVJlbmRlcmluZzt4cD1tKGUpJiZlIT09IiIseHAmJihpYj1lKX1yZXR1cm4geHB9ZnVuY3Rpb24gZjMoKXtyZXR1cm4gc2IoKT9pYjp2b2lkIDB9ZnVuY3Rpb24gUm8oKXtpZighUm8uaW5pdGlhbGl6ZWQpdGhyb3cgbmV3IEQoIllvdSBtdXN0IGNhbGwgRmVhdHVyZURldGVjdGlvbi5zdXBwb3J0c1dlYlAuaW5pdGlhbGl6ZSBhbmQgd2FpdCBmb3IgdGhlIHByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgY2FsbGluZyBGZWF0dXJlRGV0ZWN0aW9uLnN1cHBvcnRzV2ViUCIpO3JldHVybiBSby5fcmVzdWx0fXZhciBTbyxUcCxKQSxPcCx0YixFcCxzaCx5ZixjaCxScCxyYixTcCxmaCxvaCxyaCxpaCxpYix4cCx0YSxnciwkcyx1aD0kKCgpPT57V3QoKTtmdCgpO0h0KCk7UUEoKTt0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9Tbz1uYXZpZ2F0b3I6U289e307Um8uX3Byb21pc2U9dm9pZCAwO1JvLl9yZXN1bHQ9dm9pZCAwO1JvLmluaXRpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gbShSby5fcHJvbWlzZSl8fChSby5fcHJvbWlzZT1uZXcgUHJvbWlzZSh0PT57bGV0IGU9bmV3IEltYWdlO2Uub25sb2FkPWZ1bmN0aW9uKCl7Um8uX3Jlc3VsdD1lLndpZHRoPjAmJmUuaGVpZ2h0PjAsdChSby5fcmVzdWx0KX0sZS5vbmVycm9yPWZ1bmN0aW9uKCl7Um8uX3Jlc3VsdD0hMSx0KFJvLl9yZXN1bHQpfSxlLnNyYz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmlJQUFBQlhSVUpRVmxBNElCWUFBQUF3QVFDZEFTb0JBQUVBRHNEK0phUUFBM0FBQUFBQSJ9KSksUm8uX3Byb21pc2V9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJvLHtpbml0aWFsaXplZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0oUm8uX3Jlc3VsdCl9fX0pO3RhPVtdO3R5cGVvZiBBcnJheUJ1ZmZlcjwidSImJih0YS5wdXNoKEludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZ0YS5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZ0YS5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgQmlnSW50NjRBcnJheTwidSImJnRhLnB1c2goQmlnSW50NjRBcnJheSksdHlwZW9mIEJpZ1VpbnQ2NEFycmF5PCJ1IiYmdGEucHVzaChCaWdVaW50NjRBcnJheSkpO2dyPXtpc0Nocm9tZTphaCxjaHJvbWVWZXJzaW9uOnQzLGlzU2FmYXJpOmViLHNhZmFyaVZlcnNpb246ZTMsaXNXZWJraXQ6bmIsd2Via2l0VmVyc2lvbjpuMyxpc0ludGVybmV0RXhwbG9yZXI6b2IsaW50ZXJuZXRFeHBsb3JlclZlcnNpb246bzMsaXNFZGdlOkNwLGVkZ2VWZXJzaW9uOnIzLGlzRmlyZWZveDpQcCxmaXJlZm94VmVyc2lvbjpjMyxpc1dpbmRvd3M6aTMsaXNJUGFkT3JJT1M6czMsaGFyZHdhcmVDb25jdXJyZW5jeTpTby5oYXJkd2FyZUNvbmN1cnJlbmN5Pz8zLHN1cHBvcnRzUG9pbnRlckV2ZW50czphMyxzdXBwb3J0c0ltYWdlUmVuZGVyaW5nUGl4ZWxhdGVkOnNiLHN1cHBvcnRzV2ViUDpSbyxpbWFnZVJlbmRlcmluZ1ZhbHVlOmYzLHR5cGVkQXJyYXlUeXBlczp0YX07Z3Iuc3VwcG9ydHNCYXNpcz1mdW5jdGlvbih0KXtyZXR1cm4gZ3Iuc3VwcG9ydHNXZWJBc3NlbWJseSgpJiZ0LmNvbnRleHQuc3VwcG9ydHNCYXNpc307Z3Iuc3VwcG9ydHNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIFpBLnN1cHBvcnRzRnVsbHNjcmVlbigpfTtnci5zdXBwb3J0c1R5cGVkQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSJ9O2dyLnN1cHBvcnRzQmlnSW50NjRBcnJheT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgQmlnSW50NjRBcnJheTwidSJ9O2dyLnN1cHBvcnRzQmlnVWludDY0QXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEJpZ1VpbnQ2NEFycmF5PCJ1In07Z3Iuc3VwcG9ydHNCaWdJbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEJpZ0ludDwidSJ9O2dyLnN1cHBvcnRzV2ViV29ya2Vycz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgV29ya2VyPCJ1In07Z3Iuc3VwcG9ydHNXZWJBc3NlbWJseT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgV2ViQXNzZW1ibHk8InUifTtnci5zdXBwb3J0c1dlYmdsMj1mdW5jdGlvbih0KXtyZXR1cm4geS5kZWZpbmVkKCJzY2VuZSIsdCksdC5jb250ZXh0LndlYmdsMn07Z3Iuc3VwcG9ydHNFc21XZWJXb3JrZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIVBwKCl8fHBhcnNlSW50KGZoKT49MTE0fTskcz1ncn0pO2Z1bmN0aW9uIEV0KHQsZSxuLG8pe3RoaXMueD10Pz8wLHRoaXMueT1lPz8wLHRoaXMuej1uPz8wLHRoaXMudz1vPz8wfXZhciBnZix1MyxsMyxjYixhYixsaCxmYixNcCxwaCxCcix1YixOcCxkaCxsYixtaCxoaCxwMyxkMyxBZixlYSxtMyxwYixJcCx2cCxQaSxNaSx0ZSxYbz0kKCgpPT57RHQoKTtXdCgpO2Z0KCk7dWgoKTtLdCgpO1VuKCk7Z2Y9bmV3IGE7RXQuZnJvbUF4aXNBbmdsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJheGlzIix0KSx5LnR5cGVPZi5udW1iZXIoImFuZ2xlIixlKTtsZXQgbz1lLzIscj1NYXRoLnNpbihvKTtnZj1hLm5vcm1hbGl6ZSh0LGdmKTtsZXQgaT1nZi54KnIscz1nZi55KnIsZj1nZi56KnIsdT1NYXRoLmNvcyhvKTtyZXR1cm4gbShuKT8obi54PWksbi55PXMsbi56PWYsbi53PXUsbik6bmV3IEV0KGkscyxmLHUpfTt1Mz1bMSwyLDBdLGwzPW5ldyBBcnJheSgzKTtFdC5mcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCk7bGV0IG4sbyxyLGkscyxmPXRbWi5DT0xVTU4wUk9XMF0sdT10W1ouQ09MVU1OMVJPVzFdLGM9dFtaLkNPTFVNTjJST1cyXSxsPWYrdStjO2lmKGw+MCluPU1hdGguc3FydChsKzEpLHM9LjUqbixuPS41L24sbz0odFtaLkNPTFVNTjFST1cyXS10W1ouQ09MVU1OMlJPVzFdKSpuLHI9KHRbWi5DT0xVTU4yUk9XMF0tdFtaLkNPTFVNTjBST1cyXSkqbixpPSh0W1ouQ09MVU1OMFJPVzFdLXRbWi5DT0xVTU4xUk9XMF0pKm47ZWxzZXtsZXQgcD11MyxkPTA7dT5mJiYoZD0xKSxjPmYmJmM+dSYmKGQ9Mik7bGV0IGg9cFtkXSxfPXBbaF07bj1NYXRoLnNxcnQodFtaLmdldEVsZW1lbnRJbmRleChkLGQpXS10W1ouZ2V0RWxlbWVudEluZGV4KGgsaCldLXRbWi5nZXRFbGVtZW50SW5kZXgoXyxfKV0rMSk7bGV0IGc9bDM7Z1tkXT0uNSpuLG49LjUvbixzPSh0W1ouZ2V0RWxlbWVudEluZGV4KF8saCldLXRbWi5nZXRFbGVtZW50SW5kZXgoaCxfKV0pKm4sZ1toXT0odFtaLmdldEVsZW1lbnRJbmRleChoLGQpXSt0W1ouZ2V0RWxlbWVudEluZGV4KGQsaCldKSpuLGdbX109KHRbWi5nZXRFbGVtZW50SW5kZXgoXyxkKV0rdFtaLmdldEVsZW1lbnRJbmRleChkLF8pXSkqbixvPS1nWzBdLHI9LWdbMV0saT0tZ1syXX1yZXR1cm4gbShlKT8oZS54PW8sZS55PXIsZS56PWksZS53PXMsZSk6bmV3IEV0KG8scixpLHMpfTtjYj1uZXcgRXQsYWI9bmV3IEV0LGxoPW5ldyBFdCxmYj1uZXcgRXQ7RXQuZnJvbUhlYWRpbmdQaXRjaFJvbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJoZWFkaW5nUGl0Y2hSb2xsIix0KSxmYj1FdC5mcm9tQXhpc0FuZ2xlKGEuVU5JVF9YLHQucm9sbCxjYiksbGg9RXQuZnJvbUF4aXNBbmdsZShhLlVOSVRfWSwtdC5waXRjaCxlKSxlPUV0Lm11bHRpcGx5KGxoLGZiLGxoKSxhYj1FdC5mcm9tQXhpc0FuZ2xlKGEuVU5JVF9aLC10LmhlYWRpbmcsY2IpLEV0Lm11bHRpcGx5KGFiLGUsZSl9O01wPW5ldyBhLHBoPW5ldyBhLEJyPW5ldyBFdCx1Yj1uZXcgRXQsTnA9bmV3IEV0O0V0LnBhY2tlZExlbmd0aD00O0V0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXQueCxlW24rK109dC55LGVbbisrXT10LnosZVtuXT10LncsZX07RXQudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLG0obil8fChuPW5ldyBFdCksbi54PXRbZV0sbi55PXRbZSsxXSxuLno9dFtlKzJdLG4udz10W2UrM10sbn07RXQucGFja2VkSW50ZXJwb2xhdGlvbkxlbmd0aD0zO0V0LmNvbnZlcnRQYWNrZWRBcnJheUZvckludGVycG9sYXRpb249ZnVuY3Rpb24odCxlLG4sbyl7RXQudW5wYWNrKHQsbio0LE5wKSxFdC5jb25qdWdhdGUoTnAsTnApO2ZvcihsZXQgcj0wLGk9bi1lKzE7cjxpO3IrKyl7bGV0IHM9ciozO0V0LnVucGFjayh0LChlK3IpKjQsQnIpLEV0Lm11bHRpcGx5KEJyLE5wLEJyKSxCci53PDAmJkV0Lm5lZ2F0ZShCcixCciksRXQuY29tcHV0ZUF4aXMoQnIsTXApO2xldCBmPUV0LmNvbXB1dGVBbmdsZShCcik7bShvKXx8KG89W10pLG9bc109TXAueCpmLG9bcysxXT1NcC55KmYsb1tzKzJdPU1wLnoqZn19O0V0LnVucGFja0ludGVycG9sYXRpb25SZXN1bHQ9ZnVuY3Rpb24odCxlLG4sbyxyKXttKHIpfHwocj1uZXcgRXQpLGEuZnJvbUFycmF5KHQsMCxwaCk7bGV0IGk9YS5tYWduaXR1ZGUocGgpO3JldHVybiBFdC51bnBhY2soZSxvKjQsdWIpLGk9PT0wP0V0LmNsb25lKEV0LklERU5USVRZLEJyKTpFdC5mcm9tQXhpc0FuZ2xlKHBoLGksQnIpLEV0Lm11bHRpcGx5KEJyLHViLHIpfTtFdC5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKG0odCkpcmV0dXJuIG0oZSk/KGUueD10LngsZS55PXQueSxlLno9dC56LGUudz10LncsZSk6bmV3IEV0KHQueCx0LnksdC56LHQudyl9O0V0LmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9LXQueCxlLnk9LXQueSxlLno9LXQueixlLnc9dC53LGV9O0V0Lm1hZ25pdHVkZVNxdWFyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicXVhdGVybmlvbiIsdCksdC54KnQueCt0LnkqdC55K3Queip0LnordC53KnQud307RXQubWFnbml0dWRlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoRXQubWFnbml0dWRlU3F1YXJlZCh0KSl9O0V0Lm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj0xL0V0Lm1hZ25pdHVkZSh0KSxvPXQueCpuLHI9dC55Km4saT10LnoqbixzPXQudypuO3JldHVybiBlLng9byxlLnk9cixlLno9aSxlLnc9cyxlfTtFdC5pbnZlcnNlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPUV0Lm1hZ25pdHVkZVNxdWFyZWQodCk7cmV0dXJuIGU9RXQuY29uanVnYXRlKHQsZSksRXQubXVsdGlwbHlCeVNjYWxhcihlLDEvbixlKX07RXQuYWRkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueCtlLngsbi55PXQueStlLnksbi56PXQueitlLnosbi53PXQudytlLncsbn07RXQuc3VidHJhY3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54LWUueCxuLnk9dC55LWUueSxuLno9dC56LWUueixuLnc9dC53LWUudyxufTtFdC5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PS10LngsZS55PS10LnksZS56PS10LnosZS53PS10LncsZX07RXQuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdC54KmUueCt0LnkqZS55K3QueiplLnordC53KmUud307RXQubXVsdGlwbHk9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXQueCxyPXQueSxpPXQueixzPXQudyxmPWUueCx1PWUueSxjPWUueixsPWUudyxwPXMqZitvKmwrcipjLWkqdSxkPXMqdS1vKmMrcipsK2kqZixoPXMqYytvKnUtcipmK2kqbCxfPXMqbC1vKmYtcip1LWkqYztyZXR1cm4gbi54PXAsbi55PWQsbi56PWgsbi53PV8sbn07RXQubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicXVhdGVybmlvbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG4uej10LnoqZSxuLnc9dC53KmUsbn07RXQuZGl2aWRlQnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC9lLG4ueT10LnkvZSxuLno9dC56L2Usbi53PXQudy9lLG59O0V0LmNvbXB1dGVBeGlzPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dC53O2lmKE1hdGguYWJzKG4tMSk8UC5FUFNJTE9ONnx8TWF0aC5hYnMobisxKTxQLkVQU0lMT042KXJldHVybiBlLng9MSxlLnk9ZS56PTAsZTtsZXQgbz0xL01hdGguc3FydCgxLW4qbik7cmV0dXJuIGUueD10LngqbyxlLnk9dC55Km8sZS56PXQueipvLGV9O0V0LmNvbXB1dGVBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSxNYXRoLmFicyh0LnctMSk8UC5FUFNJTE9ONj8wOjIqTWF0aC5hY29zKHQudyl9O2RoPW5ldyBFdDtFdC5sZXJwPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksZGg9RXQubXVsdGlwbHlCeVNjYWxhcihlLG4sZGgpLG89RXQubXVsdGlwbHlCeVNjYWxhcih0LDEtbixvKSxFdC5hZGQoZGgsbyxvKX07bGI9bmV3IEV0LG1oPW5ldyBFdCxoaD1uZXcgRXQ7RXQuc2xlcnA9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJzdGFydCIsdCkseS50eXBlT2Yub2JqZWN0KCJlbmQiLGUpLHkudHlwZU9mLm51bWJlcigidCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pO2xldCByPUV0LmRvdCh0LGUpLGk9ZTtpZihyPDAmJihyPS1yLGk9bGI9RXQubmVnYXRlKGUsbGIpKSwxLXI8UC5FUFNJTE9ONilyZXR1cm4gRXQubGVycCh0LGksbixvKTtsZXQgcz1NYXRoLmFjb3Mocik7cmV0dXJuIG1oPUV0Lm11bHRpcGx5QnlTY2FsYXIodCxNYXRoLnNpbigoMS1uKSpzKSxtaCksaGg9RXQubXVsdGlwbHlCeVNjYWxhcihpLE1hdGguc2luKG4qcyksaGgpLG89RXQuYWRkKG1oLGhoLG8pLEV0Lm11bHRpcGx5QnlTY2FsYXIobywxL01hdGguc2luKHMpLG8pfTtFdC5sb2c9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1QLmFjb3NDbGFtcGVkKHQudyksbz0wO3JldHVybiBuIT09MCYmKG89bi9NYXRoLnNpbihuKSksYS5tdWx0aXBseUJ5U2NhbGFyKHQsbyxlKX07RXQuZXhwPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1hLm1hZ25pdHVkZSh0KSxvPTA7cmV0dXJuIG4hPT0wJiYobz1NYXRoLnNpbihuKS9uKSxlLng9dC54Km8sZS55PXQueSpvLGUuej10LnoqbyxlLnc9TWF0aC5jb3MobiksZX07cDM9bmV3IGEsZDM9bmV3IGEsQWY9bmV3IEV0LGVhPW5ldyBFdDtFdC5jb21wdXRlSW5uZXJRdWFkcmFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgicTAiLHQpLHkudHlwZU9mLm9iamVjdCgicTEiLGUpLHkudHlwZU9mLm9iamVjdCgicTIiLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKTtsZXQgcj1FdC5jb25qdWdhdGUoZSxBZik7RXQubXVsdGlwbHkocixuLGVhKTtsZXQgaT1FdC5sb2coZWEscDMpO0V0Lm11bHRpcGx5KHIsdCxlYSk7bGV0IHM9RXQubG9nKGVhLGQzKTtyZXR1cm4gYS5hZGQoaSxzLGkpLGEubXVsdGlwbHlCeVNjYWxhcihpLC4yNSxpKSxhLm5lZ2F0ZShpLGkpLEV0LmV4cChpLEFmKSxFdC5tdWx0aXBseShlLEFmLG8pfTtFdC5zcXVhZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7eS50eXBlT2Yub2JqZWN0KCJxMCIsdCkseS50eXBlT2Yub2JqZWN0KCJxMSIsZSkseS50eXBlT2Yub2JqZWN0KCJzMCIsbikseS50eXBlT2Yub2JqZWN0KCJzMSIsbykseS50eXBlT2YubnVtYmVyKCJ0IixyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsaSk7bGV0IHM9RXQuc2xlcnAodCxlLHIsQWYpLGY9RXQuc2xlcnAobixvLHIsZWEpO3JldHVybiBFdC5zbGVycChzLGYsMipyKigxLXIpLGkpfTttMz1uZXcgRXQscGI9MS45MDExMDc0NTM1MTczMDAzLElwPSRzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLHZwPSRzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLFBpPSRzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLE1pPSRzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdO2ZvcihsZXQgdD0wO3Q8NzsrK3Qpe2xldCBlPXQrMSxuPTIqZSsxO0lwW3RdPTEvKGUqbiksdnBbdF09ZS9ufUlwWzddPXBiLzEzNjt2cFs3XT1wYio4LzE3O0V0LmZhc3RTbGVycD1mdW5jdGlvbih0LGUsbixvKXt5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyk7bGV0IHI9RXQuZG90KHQsZSksaTtyPj0wP2k9MTooaT0tMSxyPS1yKTtsZXQgcz1yLTEsZj0xLW4sdT1uKm4sYz1mKmY7Zm9yKGxldCBoPTc7aD49MDstLWgpUGlbaF09KElwW2hdKnUtdnBbaF0pKnMsTWlbaF09KElwW2hdKmMtdnBbaF0pKnM7bGV0IGw9aSpuKigxK1BpWzBdKigxK1BpWzFdKigxK1BpWzJdKigxK1BpWzNdKigxK1BpWzRdKigxK1BpWzVdKigxK1BpWzZdKigxK1BpWzddKSkpKSkpKSkscD1mKigxK01pWzBdKigxK01pWzFdKigxK01pWzJdKigxK01pWzNdKigxK01pWzRdKigxK01pWzVdKigxK01pWzZdKigxK01pWzddKSkpKSkpKSksZD1FdC5tdWx0aXBseUJ5U2NhbGFyKHQscCxtMyk7cmV0dXJuIEV0Lm11bHRpcGx5QnlTY2FsYXIoZSxsLG8pLEV0LmFkZChkLG8sbyl9O0V0LmZhc3RTcXVhZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7eS50eXBlT2Yub2JqZWN0KCJxMCIsdCkseS50eXBlT2Yub2JqZWN0KCJxMSIsZSkseS50eXBlT2Yub2JqZWN0KCJzMCIsbikseS50eXBlT2Yub2JqZWN0KCJzMSIsbykseS50eXBlT2YubnVtYmVyKCJ0IixyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsaSk7bGV0IHM9RXQuZmFzdFNsZXJwKHQsZSxyLEFmKSxmPUV0LmZhc3RTbGVycChuLG8scixlYSk7cmV0dXJuIEV0LmZhc3RTbGVycChzLGYsMipyKigxLXIpLGkpfTtFdC5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fG0odCkmJm0oZSkmJnQueD09PWUueCYmdC55PT09ZS55JiZ0Lno9PT1lLnomJnQudz09PWUud307RXQuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49bj8/MCx0PT09ZXx8bSh0KSYmbShlKSYmTWF0aC5hYnModC54LWUueCk8PW4mJk1hdGguYWJzKHQueS1lLnkpPD1uJiZNYXRoLmFicyh0LnotZS56KTw9biYmTWF0aC5hYnModC53LWUudyk8PW59O0V0LlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgRXQoMCwwLDAsMCkpO0V0LklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IEV0KDAsMCwwLDEpKTtFdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIEV0LmNsb25lKHRoaXMsdCl9O0V0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIEV0LmVxdWFscyh0aGlzLHQpfTtFdC5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBFdC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07RXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9LCAke3RoaXMud30pYH07dGU9RXR9KTt2YXIgUmUsX2gsbmEseWgsWW8saXMsc3MsY3MsaDMsXzMseTMsZzMsQTMsYjMsdzMsZGIsVDMsTzMsRTMsUjMsUzMseDMsQzMsUDMsTTMsTjMsRnAsYmgsSTMsdjMsRjMsTHAsTDMsRDMsQjMsVTMsZ2gsQWgsazMsRzMsVjMsejMsbWIsaGIsd2gsajMsSDMsVGgsX2IsJG8sYXM9JCgoKT0+e2tlKCk7RHQoKTtfcigpO0llKCk7V3QoKTtmdCgpO0h0KCk7ekEoKTtEbSgpOyR0KCk7akEoKTskQSgpO0ptKCk7b3AoKTtLdCgpO1VuKCk7a24oKTtYbygpO1psKCk7UmU9e30sX2g9e3VwOntzb3V0aDoiZWFzdCIsbm9ydGg6Indlc3QiLHdlc3Q6InNvdXRoIixlYXN0OiJub3J0aCJ9LGRvd246e3NvdXRoOiJ3ZXN0Iixub3J0aDoiZWFzdCIsd2VzdDoibm9ydGgiLGVhc3Q6InNvdXRoIn0sc291dGg6e3VwOiJ3ZXN0Iixkb3duOiJlYXN0Iix3ZXN0OiJkb3duIixlYXN0OiJ1cCJ9LG5vcnRoOnt1cDoiZWFzdCIsZG93bjoid2VzdCIsd2VzdDoidXAiLGVhc3Q6ImRvd24ifSx3ZXN0Ont1cDoibm9ydGgiLGRvd246InNvdXRoIixub3J0aDoiZG93biIsc291dGg6InVwIn0sZWFzdDp7dXA6InNvdXRoIixkb3duOiJub3J0aCIsbm9ydGg6InVwIixzb3V0aDoiZG93biJ9fSxuYT17bm9ydGg6Wy0xLDAsMF0sZWFzdDpbMCwxLDBdLHVwOlswLDAsMV0sc291dGg6WzEsMCwwXSx3ZXN0OlswLC0xLDBdLGRvd246WzAsMCwtMV19LHloPXt9LFlvPXtlYXN0Om5ldyBhLG5vcnRoOm5ldyBhLHVwOm5ldyBhLHdlc3Q6bmV3IGEsc291dGg6bmV3IGEsZG93bjpuZXcgYX0saXM9bmV3IGEsc3M9bmV3IGEsY3M9bmV3IGE7UmUubG9jYWxGcmFtZVRvRml4ZWRGcmFtZUdlbmVyYXRvcj1mdW5jdGlvbih0LGUpe2lmKCFfaC5oYXNPd25Qcm9wZXJ0eSh0KXx8IV9oW3RdLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBEKCJmaXJzdEF4aXMgYW5kIHNlY29uZEF4aXMgbXVzdCBiZSBlYXN0LCBub3J0aCwgdXAsIHdlc3QsIHNvdXRoIG9yIGRvd24uIik7bGV0IG49X2hbdF1bZV0sbyxyPXQrZTtyZXR1cm4gbSh5aFtyXSk/bz15aFtyXToobz1mdW5jdGlvbihpLHMsZil7aWYoIW0oaSkpdGhyb3cgbmV3IEQoIm9yaWdpbiBpcyByZXF1aXJlZC4iKTtpZihpc05hTihpLngpfHxpc05hTihpLnkpfHxpc05hTihpLnopKXRocm93IG5ldyBEKCJvcmlnaW4gaGFzIGEgTmFOIGNvbXBvbmVudCIpO2lmKG0oZil8fChmPW5ldyBzdCksYS5lcXVhbHNFcHNpbG9uKGksYS5aRVJPLFAuRVBTSUxPTjE0KSlhLnVucGFjayhuYVt0XSwwLGlzKSxhLnVucGFjayhuYVtlXSwwLHNzKSxhLnVucGFjayhuYVtuXSwwLGNzKTtlbHNlIGlmKFAuZXF1YWxzRXBzaWxvbihpLngsMCxQLkVQU0lMT04xNCkmJlAuZXF1YWxzRXBzaWxvbihpLnksMCxQLkVQU0lMT04xNCkpe2xldCB1PVAuc2lnbihpLnopO2EudW5wYWNrKG5hW3RdLDAsaXMpLHQhPT0iZWFzdCImJnQhPT0id2VzdCImJmEubXVsdGlwbHlCeVNjYWxhcihpcyx1LGlzKSxhLnVucGFjayhuYVtlXSwwLHNzKSxlIT09ImVhc3QiJiZlIT09Indlc3QiJiZhLm11bHRpcGx5QnlTY2FsYXIoc3MsdSxzcyksYS51bnBhY2sobmFbbl0sMCxjcyksbiE9PSJlYXN0IiYmbiE9PSJ3ZXN0IiYmYS5tdWx0aXBseUJ5U2NhbGFyKGNzLHUsY3MpfWVsc2V7cz1zPz9ZLmRlZmF1bHQscy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoaSxZby51cCk7bGV0IHU9WW8udXAsYz1Zby5lYXN0O2MueD0taS55LGMueT1pLngsYy56PTAsYS5ub3JtYWxpemUoYyxZby5lYXN0KSxhLmNyb3NzKHUsYyxZby5ub3J0aCksYS5tdWx0aXBseUJ5U2NhbGFyKFlvLnVwLC0xLFlvLmRvd24pLGEubXVsdGlwbHlCeVNjYWxhcihZby5lYXN0LC0xLFlvLndlc3QpLGEubXVsdGlwbHlCeVNjYWxhcihZby5ub3J0aCwtMSxZby5zb3V0aCksaXM9WW9bdF0sc3M9WW9bZV0sY3M9WW9bbl19cmV0dXJuIGZbMF09aXMueCxmWzFdPWlzLnksZlsyXT1pcy56LGZbM109MCxmWzRdPXNzLngsZls1XT1zcy55LGZbNl09c3MueixmWzddPTAsZls4XT1jcy54LGZbOV09Y3MueSxmWzEwXT1jcy56LGZbMTFdPTAsZlsxMl09aS54LGZbMTNdPWkueSxmWzE0XT1pLnosZlsxNV09MSxmfSx5aFtyXT1vKSxvfTtSZS5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZT1SZS5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJlYXN0Iiwibm9ydGgiKTtSZS5ub3J0aEVhc3REb3duVG9GaXhlZEZyYW1lPVJlLmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwiZWFzdCIpO1JlLm5vcnRoVXBFYXN0VG9GaXhlZEZyYW1lPVJlLmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwidXAiKTtSZS5ub3J0aFdlc3RVcFRvRml4ZWRGcmFtZT1SZS5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJub3J0aCIsIndlc3QiKTtoMz1uZXcgdGUsXzM9bmV3IGEoMSwxLDEpLHkzPW5ldyBzdDtSZS5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lPWZ1bmN0aW9uKHQsZSxuLG8scil7eS50eXBlT2Yub2JqZWN0KCJIZWFkaW5nUGl0Y2hSb2xsIixlKSxvPW8/P1JlLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lO2xldCBpPXRlLmZyb21IZWFkaW5nUGl0Y2hSb2xsKGUsaDMpLHM9c3QuZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGUoYS5aRVJPLGksXzMseTMpO3JldHVybiByPW8odCxuLHIpLHN0Lm11bHRpcGx5KHIscyxyKX07ZzM9bmV3IHN0LEEzPW5ldyBaO1JlLmhlYWRpbmdQaXRjaFJvbGxRdWF0ZXJuaW9uPWZ1bmN0aW9uKHQsZSxuLG8scil7eS50eXBlT2Yub2JqZWN0KCJIZWFkaW5nUGl0Y2hSb2xsIixlKTtsZXQgaT1SZS5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lKHQsZSxuLG8sZzMpLHM9c3QuZ2V0TWF0cml4MyhpLEEzKTtyZXR1cm4gdGUuZnJvbVJvdGF0aW9uTWF0cml4KHMscil9O2IzPW5ldyBhKDEsMSwxKSx3Mz1uZXcgYSxkYj1uZXcgc3QsVDM9bmV3IHN0LE8zPW5ldyBaLEUzPW5ldyB0ZTtSZS5maXhlZEZyYW1lVG9IZWFkaW5nUGl0Y2hSb2xsPWZ1bmN0aW9uKHQsZSxuLG8pe3kuZGVmaW5lZCgidHJhbnNmb3JtIix0KSxlPWU/P1kuZGVmYXVsdCxuPW4/P1JlLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lLG0obyl8fChvPW5ldyB5cCk7bGV0IHI9c3QuZ2V0VHJhbnNsYXRpb24odCx3Myk7aWYoYS5lcXVhbHMocixhLlpFUk8pKXJldHVybiBvLmhlYWRpbmc9MCxvLnBpdGNoPTAsby5yb2xsPTAsbztsZXQgaT1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24obihyLGUsZGIpLGRiKSxzPXN0LnNldFNjYWxlKHQsYjMsVDMpO3M9c3Quc2V0VHJhbnNsYXRpb24ocyxhLlpFUk8scyksaT1zdC5tdWx0aXBseShpLHMsaSk7bGV0IGY9dGUuZnJvbVJvdGF0aW9uTWF0cml4KHN0LmdldE1hdHJpeDMoaSxPMyksRTMpO3JldHVybiBmPXRlLm5vcm1hbGl6ZShmLGYpLHlwLmZyb21RdWF0ZXJuaW9uKGYsbyl9O1IzPTYqMzYwMCsyNDYwKzUwLjU0ODQxLFMzPTg2NDAxODQ4MTI4NjZlLTYseDM9LjA5MzEwNCxDMz0tNjJlLTcsUDM9MTE3NzI3NTgzODQ2NjhlLTMyLE0zPTcyOTIxMTU4NTUzZS0xNSxOMz1QLlRXT19QSS84NjQwMCxGcD1uZXcgVm47UmUuY29tcHV0ZUljcmZUb0NlbnRyYWxCb2R5Rml4ZWRNYXRyaXg9ZnVuY3Rpb24odCxlKXtsZXQgbj1SZS5jb21wdXRlSWNyZlRvRml4ZWRNYXRyaXgodCxlKTtyZXR1cm4gbShuKXx8KG49UmUuY29tcHV0ZVRlbWVUb1BzZXVkb0ZpeGVkTWF0cml4KHQsZSkpLG59O1JlLmNvbXB1dGVUZW1lVG9Qc2V1ZG9GaXhlZE1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJkYXRlIGlzIHJlcXVpcmVkLiIpO0ZwPVZuLmFkZFNlY29uZHModCwtVm4uY29tcHV0ZVRhaU1pbnVzVXRjKHQpLEZwKTtsZXQgbj1GcC5kYXlOdW1iZXIsbz1GcC5zZWNvbmRzT2ZEYXkscixpPW4tMjQ1MTU0NTtvPj00MzIwMD9yPShpKy41KS95bi5EQVlTX1BFUl9KVUxJQU5fQ0VOVFVSWTpyPShpLS41KS95bi5EQVlTX1BFUl9KVUxJQU5fQ0VOVFVSWTtsZXQgZj0oUjMrciooUzMrciooeDMrcipDMykpKSpOMyVQLlRXT19QSSx1PU0zK1AzKihuLTI0NTE1NDU1ZS0xKSxjPShvK3luLlNFQ09ORFNfUEVSX0RBWSouNSkleW4uU0VDT05EU19QRVJfREFZLGw9Zit1KmMscD1NYXRoLmNvcyhsKSxkPU1hdGguc2luKGwpO3JldHVybiBtKGUpPyhlWzBdPXAsZVsxXT0tZCxlWzJdPTAsZVszXT1kLGVbNF09cCxlWzVdPTAsZVs2XT0wLGVbN109MCxlWzhdPTEsZSk6bmV3IFoocCxkLDAsLWQscCwwLDAsMCwxKX07UmUuaWF1MjAwNlh5c0RhdGE9bmV3IFlBO1JlLmVhcnRoT3JpZW50YXRpb25QYXJhbWV0ZXJzPVZBLk5PTkU7Ymg9MzIuMTg0LEkzPTI0NTE1NDU7UmUucHJlbG9hZEljcmZGaXhlZD1mdW5jdGlvbih0KXtsZXQgZT10LnN0YXJ0LmRheU51bWJlcixuPXQuc3RhcnQuc2Vjb25kc09mRGF5K2JoLG89dC5zdG9wLmRheU51bWJlcixyPXQuc3RvcC5zZWNvbmRzT2ZEYXkrYmg7cmV0dXJuIFJlLmlhdTIwMDZYeXNEYXRhLnByZWxvYWQoZSxuLG8scil9O1JlLmNvbXB1dGVJY3JmVG9GaXhlZE1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJkYXRlIGlzIHJlcXVpcmVkLiIpO20oZSl8fChlPW5ldyBaKTtsZXQgbj1SZS5jb21wdXRlRml4ZWRUb0ljcmZNYXRyaXgodCxlKTtpZihtKG4pKXJldHVybiBaLnRyYW5zcG9zZShuLGUpfTt2Mz0zMi4xODQsRjM9MjQ1MTU0NSxMcD1uZXcgeXAsTDM9bmV3IFosRDM9bmV3IFZuO1JlLmNvbXB1dGVNb29uRml4ZWRUb0ljcmZNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighbSh0KSl0aHJvdyBuZXcgRCgiZGF0ZSBpcyByZXF1aXJlZC4iKTttKGUpfHwoZT1uZXcgWik7bGV0IG49Vm4uYWRkU2Vjb25kcyh0LHYzLEQzKSxvPVZuLnRvdGFsRGF5cyhuKS1GMyxyPVAudG9SYWRpYW5zKDEyLjExMiktUC50b1JhZGlhbnMoLjA1Mjk5MikqbyxpPVAudG9SYWRpYW5zKDI0LjIyNCktUC50b1JhZGlhbnMoLjEwNTk4NCkqbyxzPVAudG9SYWRpYW5zKDIyNy42NDUpK1AudG9SYWRpYW5zKDEzLjAxMikqbyxmPVAudG9SYWRpYW5zKDI2MS4xMDUpK1AudG9SYWRpYW5zKDEzLjM0MDcxNikqbyx1PVAudG9SYWRpYW5zKDM1OCkrUC50b1JhZGlhbnMoLjk4NTYpKm87cmV0dXJuIExwLnBpdGNoPVAudG9SYWRpYW5zKDE4MCktUC50b1JhZGlhbnMoMy44NzgpKk1hdGguc2luKHIpLVAudG9SYWRpYW5zKC4xMikqTWF0aC5zaW4oaSkrUC50b1JhZGlhbnMoLjA3KSpNYXRoLnNpbihzKS1QLnRvUmFkaWFucyguMDE3KSpNYXRoLnNpbihmKSxMcC5yb2xsPVAudG9SYWRpYW5zKDY2LjUzLTkwKStQLnRvUmFkaWFucygxLjU0MykqTWF0aC5jb3MocikrUC50b1JhZGlhbnMoLjI0KSpNYXRoLmNvcyhpKS1QLnRvUmFkaWFucyguMDI4KSpNYXRoLmNvcyhzKStQLnRvUmFkaWFucyguMDA3KSpNYXRoLmNvcyhmKSxMcC5oZWFkaW5nPVAudG9SYWRpYW5zKDI0NC4zNzUtOTApK1AudG9SYWRpYW5zKDEzLjE3NjM1ODMxKSpvK1AudG9SYWRpYW5zKDMuNTU4KSpNYXRoLnNpbihyKStQLnRvUmFkaWFucyguMTIxKSpNYXRoLnNpbihpKS1QLnRvUmFkaWFucyguMDY0KSpNYXRoLnNpbihzKStQLnRvUmFkaWFucyguMDE2KSpNYXRoLnNpbihmKStQLnRvUmFkaWFucyguMDI1KSpNYXRoLnNpbih1KSxaLmZyb21IZWFkaW5nUGl0Y2hSb2xsKExwLEwzKX07UmUuY29tcHV0ZUljcmZUb01vb25GaXhlZE1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJkYXRlIGlzIHJlcXVpcmVkLiIpO20oZSl8fChlPW5ldyBaKTtsZXQgbj1SZS5jb21wdXRlTW9vbkZpeGVkVG9JY3JmTWF0cml4KHQsZSk7aWYobShuKSlyZXR1cm4gWi50cmFuc3Bvc2UobixlKX07QjM9bmV3IHdwKDAsMCwwKSxVMz1uZXcgYWYoMCwwLDAsMCwwLDApLGdoPW5ldyBaLEFoPW5ldyBaO1JlLmNvbXB1dGVGaXhlZFRvSWNyZk1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJkYXRlIGlzIHJlcXVpcmVkLiIpO20oZSl8fChlPW5ldyBaKTtsZXQgbj1SZS5lYXJ0aE9yaWVudGF0aW9uUGFyYW1ldGVycy5jb21wdXRlKHQsVTMpO2lmKCFtKG4pKXJldHVybjtsZXQgbz10LmRheU51bWJlcixyPXQuc2Vjb25kc09mRGF5K2JoLGk9UmUuaWF1MjAwNlh5c0RhdGEuY29tcHV0ZVh5c1JhZGlhbnMobyxyLEIzKTtpZighbShpKSlyZXR1cm47bGV0IHM9aS54K24ueFBvbGVPZmZzZXQsZj1pLnkrbi55UG9sZU9mZnNldCx1PTEvKDErTWF0aC5zcXJ0KDEtcypzLWYqZikpLGM9Z2g7Y1swXT0xLXUqcypzLGNbM109LXUqcypmLGNbNl09cyxjWzFdPS11KnMqZixjWzRdPTEtdSpmKmYsY1s3XT1mLGNbMl09LXMsY1s1XT0tZixjWzhdPTEtdSoocypzK2YqZik7bGV0IGw9Wi5mcm9tUm90YXRpb25aKC1pLnMsQWgpLHA9Wi5tdWx0aXBseShjLGwsZ2gpLGQ9dC5kYXlOdW1iZXIsaD10LnNlY29uZHNPZkRheS1Wbi5jb21wdXRlVGFpTWludXNVdGModCkrbi51dDFNaW51c1V0YyxfPWQtMjQ1MTU0NSxnPWgveW4uU0VDT05EU19QRVJfREFZLGI9Ljc3OTA1NzI3MzI2NCtnKy4wMDI3Mzc4MTE5MTEzNTQ0OCooXytnKTtiPWIlMSpQLlRXT19QSTtsZXQgdz1aLmZyb21Sb3RhdGlvblooYixBaCksTz1aLm11bHRpcGx5KHAsdyxnaCksRT1NYXRoLmNvcyhuLnhQb2xlV2FuZGVyKSxUPU1hdGguY29zKG4ueVBvbGVXYW5kZXIpLHg9TWF0aC5zaW4obi54UG9sZVdhbmRlciksTT1NYXRoLnNpbihuLnlQb2xlV2FuZGVyKSxOPW8tSTMrci95bi5TRUNPTkRTX1BFUl9EQVk7Ti89MzY1MjU7bGV0IEY9LTQ3ZS02Kk4qUC5SQURJQU5TX1BFUl9ERUdSRUUvMzYwMCxJPU1hdGguY29zKEYpLHY9TWF0aC5zaW4oRiksQj1BaDtyZXR1cm4gQlswXT1FKkksQlsxXT1FKnYsQlsyXT14LEJbM109LVQqditNKngqSSxCWzRdPVQqSStNKngqdixCWzVdPS1NKkUsQls2XT0tTSp2LVQqeCpJLEJbN109TSpJLVQqeCp2LEJbOF09VCpFLFoubXVsdGlwbHkoTyxCLGUpfTtrMz1uZXcgbWU7UmUucG9pbnRUb1dpbmRvd0Nvb3JkaW5hdGVzPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiBvPVJlLnBvaW50VG9HTFdpbmRvd0Nvb3JkaW5hdGVzKHQsZSxuLG8pLG8ueT0yKmVbNV0tby55LG99O1JlLnBvaW50VG9HTFdpbmRvd0Nvb3JkaW5hdGVzPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJtb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4IGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJ2aWV3cG9ydFRyYW5zZm9ybWF0aW9uIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG4pKXRocm93IG5ldyBEKCJwb2ludCBpcyByZXF1aXJlZC4iKTttKG8pfHwobz1uZXcgSik7bGV0IHI9azM7cmV0dXJuIHN0Lm11bHRpcGx5QnlWZWN0b3IodCxtZS5mcm9tRWxlbWVudHMobi54LG4ueSxuLnosMSxyKSxyKSxtZS5tdWx0aXBseUJ5U2NhbGFyKHIsMS9yLncsciksc3QubXVsdGlwbHlCeVZlY3RvcihlLHIsciksSi5mcm9tQ2FydGVzaWFuNChyLG8pfTtHMz1uZXcgYSxWMz1uZXcgYSx6Mz1uZXcgYTtSZS5yb3RhdGlvbk1hdHJpeEZyb21Qb3NpdGlvblZlbG9jaXR5PWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJwb3NpdGlvbiBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgidmVsb2NpdHkgaXMgcmVxdWlyZWQuIik7bGV0IHI9KG4/P1kuZGVmYXVsdCkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHQsRzMpLGk9YS5jcm9zcyhlLHIsVjMpO2EuZXF1YWxzRXBzaWxvbihpLGEuWkVSTyxQLkVQU0lMT042KSYmKGk9YS5jbG9uZShhLlVOSVRfWCxpKSk7bGV0IHM9YS5jcm9zcyhpLGUsejMpO3JldHVybiBhLm5vcm1hbGl6ZShzLHMpLGEuY3Jvc3MoZSxzLGkpLGEubmVnYXRlKGksaSksYS5ub3JtYWxpemUoaSxpKSxtKG8pfHwobz1uZXcgWiksb1swXT1lLngsb1sxXT1lLnksb1syXT1lLnosb1szXT1pLngsb1s0XT1pLnksb1s1XT1pLnosb1s2XT1zLngsb1s3XT1zLnksb1s4XT1zLnosb307bWI9bmV3IHN0KDAsMCwxLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwwLDEpLGhiPW5ldyBjdCx3aD1uZXcgYSxqMz1uZXcgYSxIMz1uZXcgWixUaD1uZXcgc3QsX2I9bmV3IHN0O1JlLmJhc2lzVG8yRD1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoInByb2plY3Rpb24gaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoIm1hdHJpeCBpcyByZXF1aXJlZC4iKTtpZighbShuKSl0aHJvdyBuZXcgRCgicmVzdWx0IGlzIHJlcXVpcmVkLiIpO2xldCBvPXN0LmdldFRyYW5zbGF0aW9uKGUsajMpLHI9dC5lbGxpcHNvaWQsaTtpZihhLmVxdWFscyhvLGEuWkVSTykpaT1hLmNsb25lKGEuWkVSTyx3aCk7ZWxzZXtsZXQgbD1yLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG8saGIpO2k9dC5wcm9qZWN0KGwsd2gpLGEuZnJvbUVsZW1lbnRzKGkueixpLngsaS55LGkpfWxldCBzPVJlLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKG8scixUaCksZj1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24ocyxfYiksdT1zdC5nZXRNYXRyaXgzKGUsSDMpLGM9c3QubXVsdGlwbHlCeU1hdHJpeDMoZix1LG4pO3JldHVybiBzdC5tdWx0aXBseShtYixjLG4pLHN0LnNldFRyYW5zbGF0aW9uKG4saSxuKSxufTtSZS5lbGxpcHNvaWRUbzJETW9kZWxNYXRyaXg9ZnVuY3Rpb24odCxlLG4pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJwcm9qZWN0aW9uIGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJjZW50ZXIgaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtsZXQgbz10LmVsbGlwc29pZCxyPVJlLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKGUsbyxUaCksaT1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24ocixfYikscz1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsaGIpLGY9dC5wcm9qZWN0KHMsd2gpO2EuZnJvbUVsZW1lbnRzKGYueixmLngsZi55LGYpO2xldCB1PXN0LmZyb21UcmFuc2xhdGlvbihmLFRoKTtyZXR1cm4gc3QubXVsdGlwbHkobWIsaSxuKSxzdC5tdWx0aXBseSh1LG4sbiksbn07JG89UmV9KTtmdW5jdGlvbiBjZSh0LGUsbixvKXt0aGlzLndlc3Q9dD8/MCx0aGlzLnNvdXRoPWU/PzAsdGhpcy5lYXN0PW4/PzAsdGhpcy5ub3J0aD1vPz8wfXZhciBxMyxLMyxXMyxYMyxZMyxPaCwkMyxOdCxUbj0kKCgpPT57RHQoKTtJZSgpO1d0KCk7ZnQoKTskdCgpO0t0KCk7YXMoKTtrbigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNlLnByb3RvdHlwZSx7d2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjZS5jb21wdXRlV2lkdGgodGhpcyl9fSxoZWlnaHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjZS5jb21wdXRlSGVpZ2h0KHRoaXMpfX19KTtjZS5wYWNrZWRMZW5ndGg9NDtjZS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGVbbisrXT10Lndlc3QsZVtuKytdPXQuc291dGgsZVtuKytdPXQuZWFzdCxlW25dPXQubm9ydGgsZX07Y2UudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLG0obil8fChuPW5ldyBjZSksbi53ZXN0PXRbZSsrXSxuLnNvdXRoPXRbZSsrXSxuLmVhc3Q9dFtlKytdLG4ubm9ydGg9dFtlXSxufTtjZS5jb21wdXRlV2lkdGg9ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpO2xldCBlPXQuZWFzdCxuPXQud2VzdDtyZXR1cm4gZTxuJiYoZSs9UC5UV09fUEkpLGUtbn07Y2UuY29tcHV0ZUhlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHQubm9ydGgtdC5zb3V0aH07Y2UuZnJvbURlZ3JlZXM9ZnVuY3Rpb24odCxlLG4sbyxyKXtyZXR1cm4gdD1QLnRvUmFkaWFucyh0Pz8wKSxlPVAudG9SYWRpYW5zKGU/PzApLG49UC50b1JhZGlhbnMobj8/MCksbz1QLnRvUmFkaWFucyhvPz8wKSxtKHIpPyhyLndlc3Q9dCxyLnNvdXRoPWUsci5lYXN0PW4sci5ub3J0aD1vLHIpOm5ldyBjZSh0LGUsbixvKX07Y2UuZnJvbVJhZGlhbnM9ZnVuY3Rpb24odCxlLG4sbyxyKXtyZXR1cm4gbShyKT8oci53ZXN0PXQ/PzAsci5zb3V0aD1lPz8wLHIuZWFzdD1uPz8wLHIubm9ydGg9bz8/MCxyKTpuZXcgY2UodCxlLG4sbyl9O2NlLmZyb21DYXJ0b2dyYXBoaWNBcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydG9ncmFwaGljcyIsdCk7bGV0IG49TnVtYmVyLk1BWF9WQUxVRSxvPS1OdW1iZXIuTUFYX1ZBTFVFLHI9TnVtYmVyLk1BWF9WQUxVRSxpPS1OdW1iZXIuTUFYX1ZBTFVFLHM9TnVtYmVyLk1BWF9WQUxVRSxmPS1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihsZXQgdT0wLGM9dC5sZW5ndGg7dTxjO3UrKyl7bGV0IGw9dFt1XTtuPU1hdGgubWluKG4sbC5sb25naXR1ZGUpLG89TWF0aC5tYXgobyxsLmxvbmdpdHVkZSkscz1NYXRoLm1pbihzLGwubGF0aXR1ZGUpLGY9TWF0aC5tYXgoZixsLmxhdGl0dWRlKTtsZXQgcD1sLmxvbmdpdHVkZT49MD9sLmxvbmdpdHVkZTpsLmxvbmdpdHVkZStQLlRXT19QSTtyPU1hdGgubWluKHIscCksaT1NYXRoLm1heChpLHApfXJldHVybiBvLW4+aS1yJiYobj1yLG89aSxvPlAuUEkmJihvPW8tUC5UV09fUEkpLG4+UC5QSSYmKG49bi1QLlRXT19QSSkpLG0oZSk/KGUud2VzdD1uLGUuc291dGg9cyxlLmVhc3Q9byxlLm5vcnRoPWYsZSk6bmV3IGNlKG4scyxvLGYpfTtjZS5mcm9tQ2FydGVzaWFuQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiY2FydGVzaWFucyIsdCksZT1lPz9ZLmRlZmF1bHQ7bGV0IG89TnVtYmVyLk1BWF9WQUxVRSxyPS1OdW1iZXIuTUFYX1ZBTFVFLGk9TnVtYmVyLk1BWF9WQUxVRSxzPS1OdW1iZXIuTUFYX1ZBTFVFLGY9TnVtYmVyLk1BWF9WQUxVRSx1PS1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihsZXQgYz0wLGw9dC5sZW5ndGg7YzxsO2MrKyl7bGV0IHA9ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0W2NdKTtvPU1hdGgubWluKG8scC5sb25naXR1ZGUpLHI9TWF0aC5tYXgocixwLmxvbmdpdHVkZSksZj1NYXRoLm1pbihmLHAubGF0aXR1ZGUpLHU9TWF0aC5tYXgodSxwLmxhdGl0dWRlKTtsZXQgZD1wLmxvbmdpdHVkZT49MD9wLmxvbmdpdHVkZTpwLmxvbmdpdHVkZStQLlRXT19QSTtpPU1hdGgubWluKGksZCkscz1NYXRoLm1heChzLGQpfXJldHVybiByLW8+cy1pJiYobz1pLHI9cyxyPlAuUEkmJihyPXItUC5UV09fUEkpLG8+UC5QSSYmKG89by1QLlRXT19QSSkpLG0obik/KG4ud2VzdD1vLG4uc291dGg9ZixuLmVhc3Q9cixuLm5vcnRoPXUsbik6bmV3IGNlKG8sZixyLHUpfTtxMz1uZXcgYSxLMz1uZXcgYSxXMz1uZXcgYSxYMz1uZXcgYSxZMz1uZXcgYSxPaD1uZXcgQXJyYXkoNSk7Zm9yKGxldCB0PTA7dDxPaC5sZW5ndGg7Kyt0KU9oW3RdPW5ldyBhO2NlLmZyb21Cb3VuZGluZ1NwaGVyZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJib3VuZGluZ1NwaGVyZSIsdCk7bGV0IG89dC5jZW50ZXIscj10LnJhZGl1cztpZihtKGUpfHwoZT1ZLmRlZmF1bHQpLG0obil8fChuPW5ldyBjZSksYS5lcXVhbHMobyxhLlpFUk8pKXJldHVybiBjZS5jbG9uZShjZS5NQVhfVkFMVUUsbiksbjtsZXQgaT0kby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShvLGUscTMpLHM9c3QubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IoaSxhLlVOSVRfWCxLMyk7YS5ub3JtYWxpemUocyxzKTtsZXQgZj1zdC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihpLGEuVU5JVF9ZLFczKTthLm5vcm1hbGl6ZShmLGYpLGEubXVsdGlwbHlCeVNjYWxhcihmLHIsZiksYS5tdWx0aXBseUJ5U2NhbGFyKHMscixzKTtsZXQgdT1hLm5lZ2F0ZShmLFkzKSxjPWEubmVnYXRlKHMsWDMpLGw9T2gscD1sWzBdO3JldHVybiBhLmFkZChvLGYscCkscD1sWzFdLGEuYWRkKG8sYyxwKSxwPWxbMl0sYS5hZGQobyx1LHApLHA9bFszXSxhLmFkZChvLHMscCksbFs0XT1vLGNlLmZyb21DYXJ0ZXNpYW5BcnJheShsLGUsbil9O2NlLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYobSh0KSlyZXR1cm4gbShlKT8oZS53ZXN0PXQud2VzdCxlLnNvdXRoPXQuc291dGgsZS5lYXN0PXQuZWFzdCxlLm5vcnRoPXQubm9ydGgsZSk6bmV3IGNlKHQud2VzdCx0LnNvdXRoLHQuZWFzdCx0Lm5vcnRoKX07Y2UuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49bj8/MCx0PT09ZXx8bSh0KSYmbShlKSYmTWF0aC5hYnModC53ZXN0LWUud2VzdCk8PW4mJk1hdGguYWJzKHQuc291dGgtZS5zb3V0aCk8PW4mJk1hdGguYWJzKHQuZWFzdC1lLmVhc3QpPD1uJiZNYXRoLmFicyh0Lm5vcnRoLWUubm9ydGgpPD1ufTtjZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGNlLmNsb25lKHRoaXMsdCl9O2NlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGNlLmVxdWFscyh0aGlzLHQpfTtjZS5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fG0odCkmJm0oZSkmJnQud2VzdD09PWUud2VzdCYmdC5zb3V0aD09PWUuc291dGgmJnQuZWFzdD09PWUuZWFzdCYmdC5ub3J0aD09PWUubm9ydGh9O2NlLnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNlLmVxdWFsc0Vwc2lsb24odGhpcyx0LGUpfTtjZS5fdmFsaWRhdGU9ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpO2xldCBlPXQubm9ydGg7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm5vcnRoIixlLC1QLlBJX09WRVJfVFdPKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygibm9ydGgiLGUsUC5QSV9PVkVSX1RXTyk7bGV0IG49dC5zb3V0aDt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygic291dGgiLG4sLVAuUElfT1ZFUl9UV08pLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJzb3V0aCIsbixQLlBJX09WRVJfVFdPKTtsZXQgbz10Lndlc3Q7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIndlc3QiLG8sLU1hdGguUEkpLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJ3ZXN0IixvLE1hdGguUEkpO2xldCByPXQuZWFzdDt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZWFzdCIsciwtTWF0aC5QSSkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImVhc3QiLHIsTWF0aC5QSSl9O2NlLnNvdXRod2VzdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCksbShlKT8oZS5sb25naXR1ZGU9dC53ZXN0LGUubGF0aXR1ZGU9dC5zb3V0aCxlLmhlaWdodD0wLGUpOm5ldyBjdCh0Lndlc3QsdC5zb3V0aCl9O2NlLm5vcnRod2VzdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCksbShlKT8oZS5sb25naXR1ZGU9dC53ZXN0LGUubGF0aXR1ZGU9dC5ub3J0aCxlLmhlaWdodD0wLGUpOm5ldyBjdCh0Lndlc3QsdC5ub3J0aCl9O2NlLm5vcnRoZWFzdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCksbShlKT8oZS5sb25naXR1ZGU9dC5lYXN0LGUubGF0aXR1ZGU9dC5ub3J0aCxlLmhlaWdodD0wLGUpOm5ldyBjdCh0LmVhc3QsdC5ub3J0aCl9O2NlLnNvdXRoZWFzdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCksbShlKT8oZS5sb25naXR1ZGU9dC5lYXN0LGUubGF0aXR1ZGU9dC5zb3V0aCxlLmhlaWdodD0wLGUpOm5ldyBjdCh0LmVhc3QsdC5zb3V0aCl9O2NlLmNlbnRlcj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KTtsZXQgbj10LmVhc3Qsbz10Lndlc3Q7bjxvJiYobis9UC5UV09fUEkpO2xldCByPVAubmVnYXRpdmVQaVRvUGkoKG8rbikqLjUpLGk9KHQuc291dGgrdC5ub3J0aCkqLjU7cmV0dXJuIG0oZSk/KGUubG9uZ2l0dWRlPXIsZS5sYXRpdHVkZT1pLGUuaGVpZ2h0PTAsZSk6bmV3IGN0KHIsaSl9O2NlLmludGVyc2VjdGlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm9iamVjdCgib3RoZXJSZWN0YW5nbGUiLGUpO2xldCBvPXQuZWFzdCxyPXQud2VzdCxpPWUuZWFzdCxzPWUud2VzdDtvPHImJmk+MD9vKz1QLlRXT19QSTppPHMmJm8+MCYmKGkrPVAuVFdPX1BJKSxvPHImJnM8MD9zKz1QLlRXT19QSTppPHMmJnI8MCYmKHIrPVAuVFdPX1BJKTtsZXQgZj1QLm5lZ2F0aXZlUGlUb1BpKE1hdGgubWF4KHIscykpLHU9UC5uZWdhdGl2ZVBpVG9QaShNYXRoLm1pbihvLGkpKTtpZigodC53ZXN0PHQuZWFzdHx8ZS53ZXN0PGUuZWFzdCkmJnU8PWYpcmV0dXJuO2xldCBjPU1hdGgubWF4KHQuc291dGgsZS5zb3V0aCksbD1NYXRoLm1pbih0Lm5vcnRoLGUubm9ydGgpO2lmKCEoYz49bCkpcmV0dXJuIG0obik/KG4ud2VzdD1mLG4uc291dGg9YyxuLmVhc3Q9dSxuLm5vcnRoPWwsbik6bmV3IGNlKGYsYyx1LGwpfTtjZS5zaW1wbGVJbnRlcnNlY3Rpb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx5LnR5cGVPZi5vYmplY3QoIm90aGVyUmVjdGFuZ2xlIixlKTtsZXQgbz1NYXRoLm1heCh0Lndlc3QsZS53ZXN0KSxyPU1hdGgubWF4KHQuc291dGgsZS5zb3V0aCksaT1NYXRoLm1pbih0LmVhc3QsZS5lYXN0KSxzPU1hdGgubWluKHQubm9ydGgsZS5ub3J0aCk7aWYoIShyPj1zfHxvPj1pKSlyZXR1cm4gbShuKT8obi53ZXN0PW8sbi5zb3V0aD1yLG4uZWFzdD1pLG4ubm9ydGg9cyxuKTpuZXcgY2UobyxyLGkscyl9O2NlLnVuaW9uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCkseS50eXBlT2Yub2JqZWN0KCJvdGhlclJlY3RhbmdsZSIsZSksbShuKXx8KG49bmV3IGNlKTtsZXQgbz10LmVhc3Qscj10Lndlc3QsaT1lLmVhc3Qscz1lLndlc3Q7bzxyJiZpPjA/bys9UC5UV09fUEk6aTxzJiZvPjAmJihpKz1QLlRXT19QSSksbzxyJiZzPDA/cys9UC5UV09fUEk6aTxzJiZyPDAmJihyKz1QLlRXT19QSSk7bGV0IGY9UC5uZWdhdGl2ZVBpVG9QaShNYXRoLm1pbihyLHMpKSx1PVAubmVnYXRpdmVQaVRvUGkoTWF0aC5tYXgobyxpKSk7cmV0dXJuIG4ud2VzdD1mLG4uc291dGg9TWF0aC5taW4odC5zb3V0aCxlLnNvdXRoKSxuLmVhc3Q9dSxuLm5vcnRoPU1hdGgubWF4KHQubm9ydGgsZS5ub3J0aCksbn07Y2UuZXhwYW5kPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydG9ncmFwaGljIixlKSxtKG4pfHwobj1uZXcgY2UpLG4ud2VzdD1NYXRoLm1pbih0Lndlc3QsZS5sb25naXR1ZGUpLG4uc291dGg9TWF0aC5taW4odC5zb3V0aCxlLmxhdGl0dWRlKSxuLmVhc3Q9TWF0aC5tYXgodC5lYXN0LGUubG9uZ2l0dWRlKSxuLm5vcnRoPU1hdGgubWF4KHQubm9ydGgsZS5sYXRpdHVkZSksbn07Y2UuY29udGFpbnM9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCkseS50eXBlT2Yub2JqZWN0KCJjYXJ0b2dyYXBoaWMiLGUpO2xldCBuPWUubG9uZ2l0dWRlLG89ZS5sYXRpdHVkZSxyPXQud2VzdCxpPXQuZWFzdDtyZXR1cm4gaTxyJiYoaSs9UC5UV09fUEksbjwwJiYobis9UC5UV09fUEkpKSwobj5yfHxQLmVxdWFsc0Vwc2lsb24obixyLFAuRVBTSUxPTjE0KSkmJihuPGl8fFAuZXF1YWxzRXBzaWxvbihuLGksUC5FUFNJTE9OMTQpKSYmbz49dC5zb3V0aCYmbzw9dC5ub3J0aH07JDM9bmV3IGN0O2NlLnN1YnNhbXBsZT1mdW5jdGlvbih0LGUsbixvKXt5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCksZT1lPz9ZLmRlZmF1bHQsbj1uPz8wLG0obyl8fChvPVtdKTtsZXQgcj0wLGk9dC5ub3J0aCxzPXQuc291dGgsZj10LmVhc3QsdT10Lndlc3QsYz0kMztjLmhlaWdodD1uLGMubG9uZ2l0dWRlPXUsYy5sYXRpdHVkZT1pLG9bcl09ZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bcl0pLHIrKyxjLmxvbmdpdHVkZT1mLG9bcl09ZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bcl0pLHIrKyxjLmxhdGl0dWRlPXMsb1tyXT1lLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1tyXSkscisrLGMubG9uZ2l0dWRlPXUsb1tyXT1lLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1tyXSkscisrLGk8MD9jLmxhdGl0dWRlPWk6cz4wP2MubGF0aXR1ZGU9czpjLmxhdGl0dWRlPTA7Zm9yKGxldCBsPTE7bDw4OysrbCljLmxvbmdpdHVkZT0tTWF0aC5QSStsKlAuUElfT1ZFUl9UV08sY2UuY29udGFpbnModCxjKSYmKG9bcl09ZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bcl0pLHIrKyk7cmV0dXJuIGMubGF0aXR1ZGU9PT0wJiYoYy5sb25naXR1ZGU9dSxvW3JdPWUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW3JdKSxyKyssYy5sb25naXR1ZGU9ZixvW3JdPWUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW3JdKSxyKyspLG8ubGVuZ3RoPXIsb307Y2Uuc3Vic2VjdGlvbj1mdW5jdGlvbih0LGUsbixvLHIsaSl7aWYoeS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ3ZXN0TGVycCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygid2VzdExlcnAiLGUsMSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInNvdXRoTGVycCIsbiwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygic291dGhMZXJwIixuLDEpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJlYXN0TGVycCIsbywwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiZWFzdExlcnAiLG8sMSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm5vcnRoTGVycCIsciwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygibm9ydGhMZXJwIixyLDEpLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJ3ZXN0TGVycCIsZSxvKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygic291dGhMZXJwIixuLHIpLG0oaSl8fChpPW5ldyBjZSksdC53ZXN0PD10LmVhc3Qpe2xldCBmPXQuZWFzdC10Lndlc3Q7aS53ZXN0PXQud2VzdCtlKmYsaS5lYXN0PXQud2VzdCtvKmZ9ZWxzZXtsZXQgZj1QLlRXT19QSSt0LmVhc3QtdC53ZXN0O2kud2VzdD1QLm5lZ2F0aXZlUGlUb1BpKHQud2VzdCtlKmYpLGkuZWFzdD1QLm5lZ2F0aXZlUGlUb1BpKHQud2VzdCtvKmYpfWxldCBzPXQubm9ydGgtdC5zb3V0aDtyZXR1cm4gaS5zb3V0aD10LnNvdXRoK24qcyxpLm5vcnRoPXQuc291dGgrcipzLGU9PT0xJiYoaS53ZXN0PXQuZWFzdCksbz09PTEmJihpLmVhc3Q9dC5lYXN0KSxuPT09MSYmKGkuc291dGg9dC5ub3J0aCkscj09PTEmJihpLm5vcnRoPXQubm9ydGgpLGl9O2NlLk1BWF9WQUxVRT1PYmplY3QuZnJlZXplKG5ldyBjZSgtTWF0aC5QSSwtUC5QSV9PVkVSX1RXTyxNYXRoLlBJLFAuUElfT1ZFUl9UV08pKTtOdD1jZX0pO2Z1bmN0aW9uIGVlKHQsZSl7dGhpcy5jZW50ZXI9YS5jbG9uZSh0Pz9hLlpFUk8pLHRoaXMucmFkaXVzPWU/PzB9dmFyIFNoLHhoLENoLFBoLE1oLE5oLEloLGFvLHZoLEZoLExoLERoLFozLHliLFEzLEozLEVoLFJoLHRQLGVQLG5QLG9QLHJQLGlQLHNQLGNQLGFQLGZQLHVQLGxQLGdiLHBQLGRQLG1QLGhQLF9QLGJiLEFiLEF0LHZlPSQoKCk9PntEdCgpO0llKCk7V3QoKTtmdCgpOyR0KCk7eGkoKTtWcygpO1dsKCk7S3QoKTtVbigpO2tuKCk7VG4oKTtTaD1uZXcgYSx4aD1uZXcgYSxDaD1uZXcgYSxQaD1uZXcgYSxNaD1uZXcgYSxOaD1uZXcgYSxJaD1uZXcgYSxhbz1uZXcgYSx2aD1uZXcgYSxGaD1uZXcgYSxMaD1uZXcgYSxEaD1uZXcgYSxaMz00LzMqUC5QSTtlZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKHQsZSl7aWYobShlKXx8KGU9bmV3IGVlKSwhbSh0KXx8dC5sZW5ndGg9PT0wKXJldHVybiBlLmNlbnRlcj1hLmNsb25lKGEuWkVSTyxlLmNlbnRlciksZS5yYWRpdXM9MCxlO2xldCBuPWEuY2xvbmUodFswXSxJaCksbz1hLmNsb25lKG4sU2gpLHI9YS5jbG9uZShuLHhoKSxpPWEuY2xvbmUobixDaCkscz1hLmNsb25lKG4sUGgpLGY9YS5jbG9uZShuLE1oKSx1PWEuY2xvbmUobixOaCksYz10Lmxlbmd0aCxsO2ZvcihsPTE7bDxjO2wrKyl7YS5jbG9uZSh0W2xdLG4pO2xldCBGPW4ueCxJPW4ueSx2PW4uejtGPG8ueCYmYS5jbG9uZShuLG8pLEY+cy54JiZhLmNsb25lKG4scyksSTxyLnkmJmEuY2xvbmUobixyKSxJPmYueSYmYS5jbG9uZShuLGYpLHY8aS56JiZhLmNsb25lKG4saSksdj51LnomJmEuY2xvbmUobix1KX1sZXQgcD1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChzLG8sYW8pKSxkPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KGYscixhbykpLGg9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QodSxpLGFvKSksXz1vLGc9cyxiPXA7ZD5iJiYoYj1kLF89cixnPWYpLGg+YiYmKGI9aCxfPWksZz11KTtsZXQgdz12aDt3Lng9KF8ueCtnLngpKi41LHcueT0oXy55K2cueSkqLjUsdy56PShfLnorZy56KSouNTtsZXQgTz1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChnLHcsYW8pKSxFPU1hdGguc3FydChPKSxUPUZoO1QueD1vLngsVC55PXIueSxULno9aS56O2xldCB4PUxoO3gueD1zLngseC55PWYueSx4Lno9dS56O2xldCBNPWEubWlkcG9pbnQoVCx4LERoKSxOPTA7Zm9yKGw9MDtsPGM7bCsrKXthLmNsb25lKHRbbF0sbik7bGV0IEY9YS5tYWduaXR1ZGUoYS5zdWJ0cmFjdChuLE0sYW8pKTtGPk4mJihOPUYpO2xldCBJPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KG4sdyxhbykpO2lmKEk+Tyl7bGV0IHY9TWF0aC5zcXJ0KEkpO0U9KEUrdikqLjUsTz1FKkU7bGV0IEI9di1FO3cueD0oRSp3LngrQipuLngpL3Ysdy55PShFKncueStCKm4ueSkvdix3Lno9KEUqdy56K0Iqbi56KS92fX1yZXR1cm4gRTxOPyhhLmNsb25lKHcsZS5jZW50ZXIpLGUucmFkaXVzPUUpOihhLmNsb25lKE0sZS5jZW50ZXIpLGUucmFkaXVzPU4pLGV9O3liPW5ldyBlbyxRMz1uZXcgYSxKMz1uZXcgYSxFaD1uZXcgY3QsUmg9bmV3IGN0O2VlLmZyb21SZWN0YW5nbGUyRD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGVlLmZyb21SZWN0YW5nbGVXaXRoSGVpZ2h0czJEKHQsZSwwLDAsbil9O2VlLmZyb21SZWN0YW5nbGVXaXRoSGVpZ2h0czJEPWZ1bmN0aW9uKHQsZSxuLG8scil7aWYobShyKXx8KHI9bmV3IGVlKSwhbSh0KSlyZXR1cm4gci5jZW50ZXI9YS5jbG9uZShhLlpFUk8sci5jZW50ZXIpLHIucmFkaXVzPTAscjt5Yi5fZWxsaXBzb2lkPVkuZGVmYXVsdCxlPWU/P3liLE50LnNvdXRod2VzdCh0LEVoKSxFaC5oZWlnaHQ9bixOdC5ub3J0aGVhc3QodCxSaCksUmguaGVpZ2h0PW87bGV0IGk9ZS5wcm9qZWN0KEVoLFEzKSxzPWUucHJvamVjdChSaCxKMyksZj1zLngtaS54LHU9cy55LWkueSxjPXMuei1pLno7ci5yYWRpdXM9TWF0aC5zcXJ0KGYqZit1KnUrYypjKSouNTtsZXQgbD1yLmNlbnRlcjtyZXR1cm4gbC54PWkueCtmKi41LGwueT1pLnkrdSouNSxsLno9aS56K2MqLjUscn07dFA9W107ZWUuZnJvbVJlY3RhbmdsZTNEPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKGU9ZT8/WS5kZWZhdWx0LG49bj8/MCxtKG8pfHwobz1uZXcgZWUpLCFtKHQpKXJldHVybiBvLmNlbnRlcj1hLmNsb25lKGEuWkVSTyxvLmNlbnRlciksby5yYWRpdXM9MCxvO2xldCByPU50LnN1YnNhbXBsZSh0LGUsbix0UCk7cmV0dXJuIGVlLmZyb21Qb2ludHMocixvKX07ZWUuZnJvbVZlcnRpY2VzPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKG0obyl8fChvPW5ldyBlZSksIW0odCl8fHQubGVuZ3RoPT09MClyZXR1cm4gby5jZW50ZXI9YS5jbG9uZShhLlpFUk8sby5jZW50ZXIpLG8ucmFkaXVzPTAsbztlPWU/P2EuWkVSTyxuPW4/PzMseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInN0cmlkZSIsbiwzKTtsZXQgcj1JaDtyLng9dFswXStlLngsci55PXRbMV0rZS55LHIuej10WzJdK2UuejtsZXQgaT1hLmNsb25lKHIsU2gpLHM9YS5jbG9uZShyLHhoKSxmPWEuY2xvbmUocixDaCksdT1hLmNsb25lKHIsUGgpLGM9YS5jbG9uZShyLE1oKSxsPWEuY2xvbmUocixOaCkscD10Lmxlbmd0aCxkO2ZvcihkPTA7ZDxwO2QrPW4pe2xldCB2PXRbZF0rZS54LEI9dFtkKzFdK2UueSxBPXRbZCsyXStlLno7ci54PXYsci55PUIsci56PUEsdjxpLngmJmEuY2xvbmUocixpKSx2PnUueCYmYS5jbG9uZShyLHUpLEI8cy55JiZhLmNsb25lKHIscyksQj5jLnkmJmEuY2xvbmUocixjKSxBPGYueiYmYS5jbG9uZShyLGYpLEE+bC56JiZhLmNsb25lKHIsbCl9bGV0IGg9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QodSxpLGFvKSksXz1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChjLHMsYW8pKSxnPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KGwsZixhbykpLGI9aSx3PXUsTz1oO18+TyYmKE89XyxiPXMsdz1jKSxnPk8mJihPPWcsYj1mLHc9bCk7bGV0IEU9dmg7RS54PShiLngrdy54KSouNSxFLnk9KGIueSt3LnkpKi41LEUuej0oYi56K3cueikqLjU7bGV0IFQ9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QodyxFLGFvKSkseD1NYXRoLnNxcnQoVCksTT1GaDtNLng9aS54LE0ueT1zLnksTS56PWYuejtsZXQgTj1MaDtOLng9dS54LE4ueT1jLnksTi56PWwuejtsZXQgRj1hLm1pZHBvaW50KE0sTixEaCksST0wO2ZvcihkPTA7ZDxwO2QrPW4pe3IueD10W2RdK2UueCxyLnk9dFtkKzFdK2UueSxyLno9dFtkKzJdK2UuejtsZXQgdj1hLm1hZ25pdHVkZShhLnN1YnRyYWN0KHIsRixhbykpO3Y+SSYmKEk9dik7bGV0IEI9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QocixFLGFvKSk7aWYoQj5UKXtsZXQgQT1NYXRoLnNxcnQoQik7eD0oeCtBKSouNSxUPXgqeDtsZXQgUz1BLXg7RS54PSh4KkUueCtTKnIueCkvQSxFLnk9KHgqRS55K1Mqci55KS9BLEUuej0oeCpFLnorUypyLnopL0F9fXJldHVybiB4PEk/KGEuY2xvbmUoRSxvLmNlbnRlciksby5yYWRpdXM9eCk6KGEuY2xvbmUoRixvLmNlbnRlciksby5yYWRpdXM9SSksb307ZWUuZnJvbUVuY29kZWRDYXJ0ZXNpYW5WZXJ0aWNlcz1mdW5jdGlvbih0LGUsbil7aWYobShuKXx8KG49bmV3IGVlKSwhbSh0KXx8IW0oZSl8fHQubGVuZ3RoIT09ZS5sZW5ndGh8fHQubGVuZ3RoPT09MClyZXR1cm4gbi5jZW50ZXI9YS5jbG9uZShhLlpFUk8sbi5jZW50ZXIpLG4ucmFkaXVzPTAsbjtsZXQgbz1JaDtvLng9dFswXStlWzBdLG8ueT10WzFdK2VbMV0sby56PXRbMl0rZVsyXTtsZXQgcj1hLmNsb25lKG8sU2gpLGk9YS5jbG9uZShvLHhoKSxzPWEuY2xvbmUobyxDaCksZj1hLmNsb25lKG8sUGgpLHU9YS5jbG9uZShvLE1oKSxjPWEuY2xvbmUobyxOaCksbD10Lmxlbmd0aCxwO2ZvcihwPTA7cDxsO3ArPTMpe2xldCBJPXRbcF0rZVtwXSx2PXRbcCsxXStlW3ArMV0sQj10W3ArMl0rZVtwKzJdO28ueD1JLG8ueT12LG8uej1CLEk8ci54JiZhLmNsb25lKG8sciksST5mLngmJmEuY2xvbmUobyxmKSx2PGkueSYmYS5jbG9uZShvLGkpLHY+dS55JiZhLmNsb25lKG8sdSksQjxzLnomJmEuY2xvbmUobyxzKSxCPmMueiYmYS5jbG9uZShvLGMpfWxldCBkPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KGYscixhbykpLGg9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QodSxpLGFvKSksXz1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChjLHMsYW8pKSxnPXIsYj1mLHc9ZDtoPncmJih3PWgsZz1pLGI9dSksXz53JiYodz1fLGc9cyxiPWMpO2xldCBPPXZoO08ueD0oZy54K2IueCkqLjUsTy55PShnLnkrYi55KSouNSxPLno9KGcueitiLnopKi41O2xldCBFPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KGIsTyxhbykpLFQ9TWF0aC5zcXJ0KEUpLHg9Rmg7eC54PXIueCx4Lnk9aS55LHguej1zLno7bGV0IE09TGg7TS54PWYueCxNLnk9dS55LE0uej1jLno7bGV0IE49YS5taWRwb2ludCh4LE0sRGgpLEY9MDtmb3IocD0wO3A8bDtwKz0zKXtvLng9dFtwXStlW3BdLG8ueT10W3ArMV0rZVtwKzFdLG8uej10W3ArMl0rZVtwKzJdO2xldCBJPWEubWFnbml0dWRlKGEuc3VidHJhY3QobyxOLGFvKSk7ST5GJiYoRj1JKTtsZXQgdj1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChvLE8sYW8pKTtpZih2PkUpe2xldCBCPU1hdGguc3FydCh2KTtUPShUK0IpKi41LEU9VCpUO2xldCBBPUItVDtPLng9KFQqTy54K0Eqby54KS9CLE8ueT0oVCpPLnkrQSpvLnkpL0IsTy56PShUKk8ueitBKm8ueikvQn19cmV0dXJuIFQ8Rj8oYS5jbG9uZShPLG4uY2VudGVyKSxuLnJhZGl1cz1UKTooYS5jbG9uZShOLG4uY2VudGVyKSxuLnJhZGl1cz1GKSxufTtlZS5mcm9tQ29ybmVyUG9pbnRzPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImNvcm5lciIsdCkseS50eXBlT2Yub2JqZWN0KCJvcHBvc2l0ZUNvcm5lciIsZSksbShuKXx8KG49bmV3IGVlKTtsZXQgbz1hLm1pZHBvaW50KHQsZSxuLmNlbnRlcik7cmV0dXJuIG4ucmFkaXVzPWEuZGlzdGFuY2UobyxlKSxufTtlZS5mcm9tRWxsaXBzb2lkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiZWxsaXBzb2lkIix0KSxtKGUpfHwoZT1uZXcgZWUpLGEuY2xvbmUoYS5aRVJPLGUuY2VudGVyKSxlLnJhZGl1cz10Lm1heGltdW1SYWRpdXMsZX07ZVA9bmV3IGE7ZWUuZnJvbUJvdW5kaW5nU3BoZXJlcz1mdW5jdGlvbih0LGUpe2lmKG0oZSl8fChlPW5ldyBlZSksIW0odCl8fHQubGVuZ3RoPT09MClyZXR1cm4gZS5jZW50ZXI9YS5jbG9uZShhLlpFUk8sZS5jZW50ZXIpLGUucmFkaXVzPTAsZTtsZXQgbj10Lmxlbmd0aDtpZihuPT09MSlyZXR1cm4gZWUuY2xvbmUodFswXSxlKTtpZihuPT09MilyZXR1cm4gZWUudW5pb24odFswXSx0WzFdLGUpO2xldCBvPVtdLHI7Zm9yKHI9MDtyPG47cisrKW8ucHVzaCh0W3JdLmNlbnRlcik7ZT1lZS5mcm9tUG9pbnRzKG8sZSk7bGV0IGk9ZS5jZW50ZXIscz1lLnJhZGl1cztmb3Iocj0wO3I8bjtyKyspe2xldCBmPXRbcl07cz1NYXRoLm1heChzLGEuZGlzdGFuY2UoaSxmLmNlbnRlcixlUCkrZi5yYWRpdXMpfXJldHVybiBlLnJhZGl1cz1zLGV9O25QPW5ldyBhLG9QPW5ldyBhLHJQPW5ldyBhO2VlLmZyb21PcmllbnRlZEJvdW5kaW5nQm94PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJvcmllbnRlZEJvdW5kaW5nQm94Iix0KSxtKGUpfHwoZT1uZXcgZWUpO2xldCBuPXQuaGFsZkF4ZXMsbz1aLmdldENvbHVtbihuLDAsblApLHI9Wi5nZXRDb2x1bW4obiwxLG9QKSxpPVouZ2V0Q29sdW1uKG4sMixyUCk7cmV0dXJuIGEuYWRkKG8scixvKSxhLmFkZChvLGksbyksZS5jZW50ZXI9YS5jbG9uZSh0LmNlbnRlcixlLmNlbnRlciksZS5yYWRpdXM9YS5tYWduaXR1ZGUobyksZX07aVA9bmV3IGEsc1A9bmV3IGE7ZWUuZnJvbVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJ0cmFuc2Zvcm1hdGlvbiIsdCksbShlKXx8KGU9bmV3IGVlKTtsZXQgbj1zdC5nZXRUcmFuc2xhdGlvbih0LGlQKSxvPXN0LmdldFNjYWxlKHQsc1ApLHI9LjUqYS5tYWduaXR1ZGUobyk7cmV0dXJuIGUuY2VudGVyPWEuY2xvbmUobixlLmNlbnRlciksZS5yYWRpdXM9cixlfTtlZS5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKG0odCkpcmV0dXJuIG0oZSk/KGUuY2VudGVyPWEuY2xvbmUodC5jZW50ZXIsZS5jZW50ZXIpLGUucmFkaXVzPXQucmFkaXVzLGUpOm5ldyBlZSh0LmNlbnRlcix0LnJhZGl1cyl9O2VlLnBhY2tlZExlbmd0aD00O2VlLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MDtsZXQgbz10LmNlbnRlcjtyZXR1cm4gZVtuKytdPW8ueCxlW24rK109by55LGVbbisrXT1vLnosZVtuXT10LnJhZGl1cyxlfTtlZS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MCxtKG4pfHwobj1uZXcgZWUpO2xldCBvPW4uY2VudGVyO3JldHVybiBvLng9dFtlKytdLG8ueT10W2UrK10sby56PXRbZSsrXSxuLnJhZGl1cz10W2VdLG59O2NQPW5ldyBhLGFQPW5ldyBhO2VlLnVuaW9uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLG0obil8fChuPW5ldyBlZSk7bGV0IG89dC5jZW50ZXIscj10LnJhZGl1cyxpPWUuY2VudGVyLHM9ZS5yYWRpdXMsZj1hLnN1YnRyYWN0KGksbyxjUCksdT1hLm1hZ25pdHVkZShmKTtpZihyPj11K3MpcmV0dXJuIHQuY2xvbmUobiksbjtpZihzPj11K3IpcmV0dXJuIGUuY2xvbmUobiksbjtsZXQgYz0ocit1K3MpKi41LGw9YS5tdWx0aXBseUJ5U2NhbGFyKGYsKC1yK2MpL3UsYVApO3JldHVybiBhLmFkZChsLG8sbCksYS5jbG9uZShsLG4uY2VudGVyKSxuLnJhZGl1cz1jLG59O2ZQPW5ldyBhO2VlLmV4cGFuZD1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLHkudHlwZU9mLm9iamVjdCgicG9pbnQiLGUpLG49ZWUuY2xvbmUodCxuKTtsZXQgbz1hLm1hZ25pdHVkZShhLnN1YnRyYWN0KGUsbi5jZW50ZXIsZlApKTtyZXR1cm4gbz5uLnJhZGl1cyYmKG4ucmFkaXVzPW8pLG59O2VlLmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLHkudHlwZU9mLm9iamVjdCgicGxhbmUiLGUpO2xldCBuPXQuY2VudGVyLG89dC5yYWRpdXMscj1lLm5vcm1hbCxpPWEuZG90KHIsbikrZS5kaXN0YW5jZTtyZXR1cm4gaTwtbz9Tbi5PVVRTSURFOmk8bz9Tbi5JTlRFUlNFQ1RJTkc6U24uSU5TSURFfTtlZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCkseS50eXBlT2Yub2JqZWN0KCJ0cmFuc2Zvcm0iLGUpLG0obil8fChuPW5ldyBlZSksbi5jZW50ZXI9c3QubXVsdGlwbHlCeVBvaW50KGUsdC5jZW50ZXIsbi5jZW50ZXIpLG4ucmFkaXVzPXN0LmdldE1heGltdW1TY2FsZShlKSp0LnJhZGl1cyxufTt1UD1uZXcgYTtlZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgic3BoZXJlIix0KSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsZSk7bGV0IG49YS5zdWJ0cmFjdCh0LmNlbnRlcixlLHVQKSxvPWEubWFnbml0dWRlKG4pLXQucmFkaXVzO3JldHVybiBvPD0wPzA6bypvfTtlZS50cmFuc2Zvcm1XaXRob3V0U2NhbGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCkseS50eXBlT2Yub2JqZWN0KCJ0cmFuc2Zvcm0iLGUpLG0obil8fChuPW5ldyBlZSksbi5jZW50ZXI9c3QubXVsdGlwbHlCeVBvaW50KGUsdC5jZW50ZXIsbi5jZW50ZXIpLG4ucmFkaXVzPXQucmFkaXVzLG59O2xQPW5ldyBhO2VlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbih0LGUsbixvKXt5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCkseS50eXBlT2Yub2JqZWN0KCJwb3NpdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJkaXJlY3Rpb24iLG4pLG0obyl8fChvPW5ldyBKcik7bGV0IHI9YS5zdWJ0cmFjdCh0LmNlbnRlcixlLGxQKSxpPWEuZG90KG4scik7cmV0dXJuIG8uc3RhcnQ9aS10LnJhZGl1cyxvLnN0b3A9aSt0LnJhZGl1cyxvfTtnYj1uZXcgYSxwUD1uZXcgYSxkUD1uZXcgYSxtUD1uZXcgYSxoUD1uZXcgYSxfUD1uZXcgY3QsYmI9bmV3IEFycmF5KDgpO2ZvcihsZXQgdD0wO3Q8ODsrK3QpYmJbdF09bmV3IGE7QWI9bmV3IGVvO2VlLnByb2plY3RUbzJEPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCksQWIuX2VsbGlwc29pZD1ZLmRlZmF1bHQsZT1lPz9BYjtsZXQgbz1lLmVsbGlwc29pZCxyPXQuY2VudGVyLGk9dC5yYWRpdXMsczthLmVxdWFscyhyLGEuWkVSTyk/cz1hLmNsb25lKGEuVU5JVF9YLGdiKTpzPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHIsZ2IpO2xldCBmPWEuY3Jvc3MoYS5VTklUX1oscyxwUCk7YS5ub3JtYWxpemUoZixmKTtsZXQgdT1hLmNyb3NzKHMsZixkUCk7YS5ub3JtYWxpemUodSx1KSxhLm11bHRpcGx5QnlTY2FsYXIocyxpLHMpLGEubXVsdGlwbHlCeVNjYWxhcih1LGksdSksYS5tdWx0aXBseUJ5U2NhbGFyKGYsaSxmKTtsZXQgYz1hLm5lZ2F0ZSh1LGhQKSxsPWEubmVnYXRlKGYsbVApLHA9YmIsZD1wWzBdO2EuYWRkKHMsdSxkKSxhLmFkZChkLGYsZCksZD1wWzFdLGEuYWRkKHMsdSxkKSxhLmFkZChkLGwsZCksZD1wWzJdLGEuYWRkKHMsYyxkKSxhLmFkZChkLGwsZCksZD1wWzNdLGEuYWRkKHMsYyxkKSxhLmFkZChkLGYsZCksYS5uZWdhdGUocyxzKSxkPXBbNF0sYS5hZGQocyx1LGQpLGEuYWRkKGQsZixkKSxkPXBbNV0sYS5hZGQocyx1LGQpLGEuYWRkKGQsbCxkKSxkPXBbNl0sYS5hZGQocyxjLGQpLGEuYWRkKGQsbCxkKSxkPXBbN10sYS5hZGQocyxjLGQpLGEuYWRkKGQsZixkKTtsZXQgaD1wLmxlbmd0aDtmb3IobGV0IHc9MDt3PGg7Kyt3KXtsZXQgTz1wW3ddO2EuYWRkKHIsTyxPKTtsZXQgRT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKE8sX1ApO2UucHJvamVjdChFLE8pfW49ZWUuZnJvbVBvaW50cyhwLG4pLHI9bi5jZW50ZXI7bGV0IF89ci54LGc9ci55LGI9ci56O3JldHVybiByLng9YixyLnk9XyxyLno9ZyxufTtlZS5pc09jY2x1ZGVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic3BoZXJlIix0KSx5LnR5cGVPZi5vYmplY3QoIm9jY2x1ZGVyIixlKSwhZS5pc0JvdW5kaW5nU3BoZXJlVmlzaWJsZSh0KX07ZWUuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxtKHQpJiZtKGUpJiZhLmVxdWFscyh0LmNlbnRlcixlLmNlbnRlcikmJnQucmFkaXVzPT09ZS5yYWRpdXN9O2VlLnByb3RvdHlwZS5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbih0KXtyZXR1cm4gZWUuaW50ZXJzZWN0UGxhbmUodGhpcyx0KX07ZWUucHJvdG90eXBlLmRpc3RhbmNlU3F1YXJlZFRvPWZ1bmN0aW9uKHQpe3JldHVybiBlZS5kaXN0YW5jZVNxdWFyZWRUbyh0aGlzLHQpfTtlZS5wcm90b3R5cGUuY29tcHV0ZVBsYW5lRGlzdGFuY2VzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZWUuY29tcHV0ZVBsYW5lRGlzdGFuY2VzKHRoaXMsdCxlLG4pfTtlZS5wcm90b3R5cGUuaXNPY2NsdWRlZD1mdW5jdGlvbih0KXtyZXR1cm4gZWUuaXNPY2NsdWRlZCh0aGlzLHQpfTtlZS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBlZS5lcXVhbHModGhpcyx0KX07ZWUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBlZS5jbG9uZSh0aGlzLHQpfTtlZS5wcm90b3R5cGUudm9sdW1lPWZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5yYWRpdXM7cmV0dXJuIFozKnQqdCp0fTtBdD1lZX0pO3ZhciB5UCxGdCxacz0kKCgpPT57eVA9e0RFUFRIX0JVRkZFUl9CSVQ6MjU2LFNURU5DSUxfQlVGRkVSX0JJVDoxMDI0LENPTE9SX0JVRkZFUl9CSVQ6MTYzODQsUE9JTlRTOjAsTElORVM6MSxMSU5FX0xPT1A6MixMSU5FX1NUUklQOjMsVFJJQU5HTEVTOjQsVFJJQU5HTEVfU1RSSVA6NSxUUklBTkdMRV9GQU46NixaRVJPOjAsT05FOjEsU1JDX0NPTE9SOjc2OCxPTkVfTUlOVVNfU1JDX0NPTE9SOjc2OSxTUkNfQUxQSEE6NzcwLE9ORV9NSU5VU19TUkNfQUxQSEE6NzcxLERTVF9BTFBIQTo3NzIsT05FX01JTlVTX0RTVF9BTFBIQTo3NzMsRFNUX0NPTE9SOjc3NCxPTkVfTUlOVVNfRFNUX0NPTE9SOjc3NSxTUkNfQUxQSEFfU0FUVVJBVEU6Nzc2LEZVTkNfQUREOjMyNzc0LEJMRU5EX0VRVUFUSU9OOjMyNzc3LEJMRU5EX0VRVUFUSU9OX1JHQjozMjc3NyxCTEVORF9FUVVBVElPTl9BTFBIQTozNDg3NyxGVU5DX1NVQlRSQUNUOjMyNzc4LEZVTkNfUkVWRVJTRV9TVUJUUkFDVDozMjc3OSxCTEVORF9EU1RfUkdCOjMyOTY4LEJMRU5EX1NSQ19SR0I6MzI5NjksQkxFTkRfRFNUX0FMUEhBOjMyOTcwLEJMRU5EX1NSQ19BTFBIQTozMjk3MSxDT05TVEFOVF9DT0xPUjozMjc2OSxPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6MzI3NzAsQ09OU1RBTlRfQUxQSEE6MzI3NzEsT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOjMyNzcyLEJMRU5EX0NPTE9SOjMyNzczLEFSUkFZX0JVRkZFUjozNDk2MixFTEVNRU5UX0FSUkFZX0JVRkZFUjozNDk2MyxBUlJBWV9CVUZGRVJfQklORElORzozNDk2NCxFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOjM0OTY1LFNUUkVBTV9EUkFXOjM1MDQwLFNUQVRJQ19EUkFXOjM1MDQ0LERZTkFNSUNfRFJBVzozNTA0OCxCVUZGRVJfU0laRTozNDY2MCxCVUZGRVJfVVNBR0U6MzQ2NjEsQ1VSUkVOVF9WRVJURVhfQVRUUklCOjM0MzQyLEZST05UOjEwMjgsQkFDSzoxMDI5LEZST05UX0FORF9CQUNLOjEwMzIsQ1VMTF9GQUNFOjI4ODQsQkxFTkQ6MzA0MixESVRIRVI6MzAyNCxTVEVOQ0lMX1RFU1Q6Mjk2MCxERVBUSF9URVNUOjI5MjksU0NJU1NPUl9URVNUOjMwODksUE9MWUdPTl9PRkZTRVRfRklMTDozMjgyMyxTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6MzI5MjYsU0FNUExFX0NPVkVSQUdFOjMyOTI4LE5PX0VSUk9SOjAsSU5WQUxJRF9FTlVNOjEyODAsSU5WQUxJRF9WQUxVRToxMjgxLElOVkFMSURfT1BFUkFUSU9OOjEyODIsT1VUX09GX01FTU9SWToxMjg1LENXOjIzMDQsQ0NXOjIzMDUsTElORV9XSURUSDoyODQ5LEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRTozMzkwMSxBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6MzM5MDIsQ1VMTF9GQUNFX01PREU6Mjg4NSxGUk9OVF9GQUNFOjI4ODYsREVQVEhfUkFOR0U6MjkyOCxERVBUSF9XUklURU1BU0s6MjkzMCxERVBUSF9DTEVBUl9WQUxVRToyOTMxLERFUFRIX0ZVTkM6MjkzMixTVEVOQ0lMX0NMRUFSX1ZBTFVFOjI5NjEsU1RFTkNJTF9GVU5DOjI5NjIsU1RFTkNJTF9GQUlMOjI5NjQsU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6Mjk2NSxTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoyOTY2LFNURU5DSUxfUkVGOjI5NjcsU1RFTkNJTF9WQUxVRV9NQVNLOjI5NjMsU1RFTkNJTF9XUklURU1BU0s6Mjk2OCxTVEVOQ0lMX0JBQ0tfRlVOQzozNDgxNixTVEVOQ0lMX0JBQ0tfRkFJTDozNDgxNyxTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOjM0ODE4LFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6MzQ4MTksU1RFTkNJTF9CQUNLX1JFRjozNjAwMyxTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzozNjAwNCxTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOjM2MDA1LFZJRVdQT1JUOjI5NzgsU0NJU1NPUl9CT1g6MzA4OCxDT0xPUl9DTEVBUl9WQUxVRTozMTA2LENPTE9SX1dSSVRFTUFTSzozMTA3LFVOUEFDS19BTElHTk1FTlQ6MzMxNyxQQUNLX0FMSUdOTUVOVDozMzMzLE1BWF9URVhUVVJFX1NJWkU6MzM3OSxNQVhfVklFV1BPUlRfRElNUzozMzg2LFNVQlBJWEVMX0JJVFM6MzQwOCxSRURfQklUUzozNDEwLEdSRUVOX0JJVFM6MzQxMSxCTFVFX0JJVFM6MzQxMixBTFBIQV9CSVRTOjM0MTMsREVQVEhfQklUUzozNDE0LFNURU5DSUxfQklUUzozNDE1LFBPTFlHT05fT0ZGU0VUX1VOSVRTOjEwNzUyLFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUjozMjgyNCxURVhUVVJFX0JJTkRJTkdfMkQ6MzI4NzMsU0FNUExFX0JVRkZFUlM6MzI5MzYsU0FNUExFUzozMjkzNyxTQU1QTEVfQ09WRVJBR0VfVkFMVUU6MzI5MzgsU0FNUExFX0NPVkVSQUdFX0lOVkVSVDozMjkzOSxDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzozNDQ2NyxET05UX0NBUkU6NDM1MixGQVNURVNUOjQzNTMsTklDRVNUOjQzNTQsR0VORVJBVEVfTUlQTUFQX0hJTlQ6MzMxNzAsQllURTo1MTIwLFVOU0lHTkVEX0JZVEU6NTEyMSxTSE9SVDo1MTIyLFVOU0lHTkVEX1NIT1JUOjUxMjMsSU5UOjUxMjQsVU5TSUdORURfSU5UOjUxMjUsRkxPQVQ6NTEyNixERVBUSF9DT01QT05FTlQ6NjQwMixBTFBIQTo2NDA2LFJHQjo2NDA3LFJHQkE6NjQwOCxMVU1JTkFOQ0U6NjQwOSxMVU1JTkFOQ0VfQUxQSEE6NjQxMCxVTlNJR05FRF9TSE9SVF80XzRfNF80OjMyODE5LFVOU0lHTkVEX1NIT1JUXzVfNV81XzE6MzI4MjAsVU5TSUdORURfU0hPUlRfNV82XzU6MzM2MzUsRlJBR01FTlRfU0hBREVSOjM1NjMyLFZFUlRFWF9TSEFERVI6MzU2MzMsTUFYX1ZFUlRFWF9BVFRSSUJTOjM0OTIxLE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOjM2MzQ3LE1BWF9WQVJZSU5HX1ZFQ1RPUlM6MzYzNDgsTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6MzU2NjEsTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOjM1NjYwLE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOjM0OTMwLE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6MzYzNDksU0hBREVSX1RZUEU6MzU2NjMsREVMRVRFX1NUQVRVUzozNTcxMixMSU5LX1NUQVRVUzozNTcxNCxWQUxJREFURV9TVEFUVVM6MzU3MTUsQVRUQUNIRURfU0hBREVSUzozNTcxNyxBQ1RJVkVfVU5JRk9STVM6MzU3MTgsQUNUSVZFX0FUVFJJQlVURVM6MzU3MjEsU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOjM1NzI0LENVUlJFTlRfUFJPR1JBTTozNTcyNSxORVZFUjo1MTIsTEVTUzo1MTMsRVFVQUw6NTE0LExFUVVBTDo1MTUsR1JFQVRFUjo1MTYsTk9URVFVQUw6NTE3LEdFUVVBTDo1MTgsQUxXQVlTOjUxOSxLRUVQOjc2ODAsUkVQTEFDRTo3NjgxLElOQ1I6NzY4MixERUNSOjc2ODMsSU5WRVJUOjUzODYsSU5DUl9XUkFQOjM0MDU1LERFQ1JfV1JBUDozNDA1NixWRU5ET1I6NzkzNixSRU5ERVJFUjo3OTM3LFZFUlNJT046NzkzOCxORUFSRVNUOjk3MjgsTElORUFSOjk3MjksTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDo5OTg0LExJTkVBUl9NSVBNQVBfTkVBUkVTVDo5OTg1LE5FQVJFU1RfTUlQTUFQX0xJTkVBUjo5OTg2LExJTkVBUl9NSVBNQVBfTElORUFSOjk5ODcsVEVYVFVSRV9NQUdfRklMVEVSOjEwMjQwLFRFWFRVUkVfTUlOX0ZJTFRFUjoxMDI0MSxURVhUVVJFX1dSQVBfUzoxMDI0MixURVhUVVJFX1dSQVBfVDoxMDI0MyxURVhUVVJFXzJEOjM1NTMsVEVYVFVSRTo1ODkwLFRFWFRVUkVfQ1VCRV9NQVA6MzQwNjcsVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOjM0MDY4LFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDozNDA2OSxURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6MzQwNzAsVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOjM0MDcxLFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWTozNDA3MixURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6MzQwNzMsVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOjM0MDc0LE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6MzQwNzYsVEVYVFVSRTA6MzM5ODQsVEVYVFVSRTE6MzM5ODUsVEVYVFVSRTI6MzM5ODYsVEVYVFVSRTM6MzM5ODcsVEVYVFVSRTQ6MzM5ODgsVEVYVFVSRTU6MzM5ODksVEVYVFVSRTY6MzM5OTAsVEVYVFVSRTc6MzM5OTEsVEVYVFVSRTg6MzM5OTIsVEVYVFVSRTk6MzM5OTMsVEVYVFVSRTEwOjMzOTk0LFRFWFRVUkUxMTozMzk5NSxURVhUVVJFMTI6MzM5OTYsVEVYVFVSRTEzOjMzOTk3LFRFWFRVUkUxNDozMzk5OCxURVhUVVJFMTU6MzM5OTksVEVYVFVSRTE2OjM0ZTMsVEVYVFVSRTE3OjM0MDAxLFRFWFRVUkUxODozNDAwMixURVhUVVJFMTk6MzQwMDMsVEVYVFVSRTIwOjM0MDA0LFRFWFRVUkUyMTozNDAwNSxURVhUVVJFMjI6MzQwMDYsVEVYVFVSRTIzOjM0MDA3LFRFWFRVUkUyNDozNDAwOCxURVhUVVJFMjU6MzQwMDksVEVYVFVSRTI2OjM0MDEwLFRFWFRVUkUyNzozNDAxMSxURVhUVVJFMjg6MzQwMTIsVEVYVFVSRTI5OjM0MDEzLFRFWFRVUkUzMDozNDAxNCxURVhUVVJFMzE6MzQwMTUsQUNUSVZFX1RFWFRVUkU6MzQwMTYsUkVQRUFUOjEwNDk3LENMQU1QX1RPX0VER0U6MzMwNzEsTUlSUk9SRURfUkVQRUFUOjMzNjQ4LEZMT0FUX1ZFQzI6MzU2NjQsRkxPQVRfVkVDMzozNTY2NSxGTE9BVF9WRUM0OjM1NjY2LElOVF9WRUMyOjM1NjY3LElOVF9WRUMzOjM1NjY4LElOVF9WRUM0OjM1NjY5LEJPT0w6MzU2NzAsQk9PTF9WRUMyOjM1NjcxLEJPT0xfVkVDMzozNTY3MixCT09MX1ZFQzQ6MzU2NzMsRkxPQVRfTUFUMjozNTY3NCxGTE9BVF9NQVQzOjM1Njc1LEZMT0FUX01BVDQ6MzU2NzYsU0FNUExFUl8yRDozNTY3OCxTQU1QTEVSX0NVQkU6MzU2ODAsVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOjM0MzM4LFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRTozNDMzOSxWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERTozNDM0MCxWRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6MzQzNDEsVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOjM0OTIyLFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUjozNDM3MyxWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOjM0OTc1LElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRTozNTczOCxJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDozNTczOSxDT01QSUxFX1NUQVRVUzozNTcxMyxMT1dfRkxPQVQ6MzYzMzYsTUVESVVNX0ZMT0FUOjM2MzM3LEhJR0hfRkxPQVQ6MzYzMzgsTE9XX0lOVDozNjMzOSxNRURJVU1fSU5UOjM2MzQwLEhJR0hfSU5UOjM2MzQxLEZSQU1FQlVGRkVSOjM2MTYwLFJFTkRFUkJVRkZFUjozNjE2MSxSR0JBNDozMjg1NCxSR0I1X0ExOjMyODU1LFJHQjU2NTozNjE5NCxERVBUSF9DT01QT05FTlQxNjozMzE4OSxTVEVOQ0lMX0lOREVYOjY0MDEsU1RFTkNJTF9JTkRFWDg6MzYxNjgsREVQVEhfU1RFTkNJTDozNDA0MSxSRU5ERVJCVUZGRVJfV0lEVEg6MzYxNjIsUkVOREVSQlVGRkVSX0hFSUdIVDozNjE2MyxSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOjM2MTY0LFJFTkRFUkJVRkZFUl9SRURfU0laRTozNjE3NixSRU5ERVJCVUZGRVJfR1JFRU5fU0laRTozNjE3NyxSRU5ERVJCVUZGRVJfQkxVRV9TSVpFOjM2MTc4LFJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOjM2MTc5LFJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOjM2MTgwLFJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6MzYxODEsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRTozNjA0OCxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOjM2MDQ5LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDozNjA1MCxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRTozNjA1MSxDT0xPUl9BVFRBQ0hNRU5UMDozNjA2NCxERVBUSF9BVFRBQ0hNRU5UOjM2MDk2LFNURU5DSUxfQVRUQUNITUVOVDozNjEyOCxERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6MzMzMDYsTk9ORTowLEZSQU1FQlVGRkVSX0NPTVBMRVRFOjM2MDUzLEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDozNjA1NCxGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDozNjA1NSxGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM6MzYwNTcsRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ6MzYwNjEsRlJBTUVCVUZGRVJfQklORElORzozNjAwNixSRU5ERVJCVUZGRVJfQklORElORzozNjAwNyxNQVhfUkVOREVSQlVGRkVSX1NJWkU6MzQwMjQsSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046MTI4NixVTlBBQ0tfRkxJUF9ZX1dFQkdMOjM3NDQwLFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDozNzQ0MSxDT05URVhUX0xPU1RfV0VCR0w6Mzc0NDIsVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDozNzQ0MyxCUk9XU0VSX0RFRkFVTFRfV0VCR0w6Mzc0NDQsQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDozMzc3NixDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDozMzc3NyxDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDozMzc3OCxDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDozMzc3OSxDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOjM1ODQwLENPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6MzU4NDEsQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6MzU4NDIsQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6MzU4NDMsQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X1dFQkdMOjM3ODA4LENPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6MzYxOTYsQ09NUFJFU1NFRF9SR0JBX0JQVENfVU5PUk06MzY0OTIsSEFMRl9GTE9BVF9PRVM6MzYxOTMsRE9VQkxFOjUxMzAsUkVBRF9CVUZGRVI6MzA3NCxVTlBBQ0tfUk9XX0xFTkdUSDozMzE0LFVOUEFDS19TS0lQX1JPV1M6MzMxNSxVTlBBQ0tfU0tJUF9QSVhFTFM6MzMxNixQQUNLX1JPV19MRU5HVEg6MzMzMCxQQUNLX1NLSVBfUk9XUzozMzMxLFBBQ0tfU0tJUF9QSVhFTFM6MzMzMixDT0xPUjo2MTQ0LERFUFRIOjYxNDUsU1RFTkNJTDo2MTQ2LFJFRDo2NDAzLFJHQjg6MzI4NDksUkdCQTg6MzI4NTYsUkdCMTBfQTI6MzI4NTcsVEVYVFVSRV9CSU5ESU5HXzNEOjMyODc0LFVOUEFDS19TS0lQX0lNQUdFUzozMjg3NyxVTlBBQ0tfSU1BR0VfSEVJR0hUOjMyODc4LFRFWFRVUkVfM0Q6MzI4NzksVEVYVFVSRV9XUkFQX1I6MzI4ODIsTUFYXzNEX1RFWFRVUkVfU0laRTozMjg4MyxVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6MzM2NDAsTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOjMzZTMsTUFYX0VMRU1FTlRTX0lORElDRVM6MzMwMDEsVEVYVFVSRV9NSU5fTE9EOjMzMDgyLFRFWFRVUkVfTUFYX0xPRDozMzA4MyxURVhUVVJFX0JBU0VfTEVWRUw6MzMwODQsVEVYVFVSRV9NQVhfTEVWRUw6MzMwODUsTUlOOjMyNzc1LE1BWDozMjc3NixERVBUSF9DT01QT05FTlQyNDozMzE5MCxNQVhfVEVYVFVSRV9MT0RfQklBUzozNDA0NSxURVhUVVJFX0NPTVBBUkVfTU9ERTozNDg5MixURVhUVVJFX0NPTVBBUkVfRlVOQzozNDg5MyxDVVJSRU5UX1FVRVJZOjM0OTE3LFFVRVJZX1JFU1VMVDozNDkxOCxRVUVSWV9SRVNVTFRfQVZBSUxBQkxFOjM0OTE5LFNUUkVBTV9SRUFEOjM1MDQxLFNUUkVBTV9DT1BZOjM1MDQyLFNUQVRJQ19SRUFEOjM1MDQ1LFNUQVRJQ19DT1BZOjM1MDQ2LERZTkFNSUNfUkVBRDozNTA0OSxEWU5BTUlDX0NPUFk6MzUwNTAsTUFYX0RSQVdfQlVGRkVSUzozNDg1MixEUkFXX0JVRkZFUjA6MzQ4NTMsRFJBV19CVUZGRVIxOjM0ODU0LERSQVdfQlVGRkVSMjozNDg1NSxEUkFXX0JVRkZFUjM6MzQ4NTYsRFJBV19CVUZGRVI0OjM0ODU3LERSQVdfQlVGRkVSNTozNDg1OCxEUkFXX0JVRkZFUjY6MzQ4NTksRFJBV19CVUZGRVI3OjM0ODYwLERSQVdfQlVGRkVSODozNDg2MSxEUkFXX0JVRkZFUjk6MzQ4NjIsRFJBV19CVUZGRVIxMDozNDg2MyxEUkFXX0JVRkZFUjExOjM0ODY0LERSQVdfQlVGRkVSMTI6MzQ4NjUsRFJBV19CVUZGRVIxMzozNDg2NixEUkFXX0JVRkZFUjE0OjM0ODY3LERSQVdfQlVGRkVSMTU6MzQ4NjgsTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUzozNTY1NyxNQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzozNTY1OCxTQU1QTEVSXzNEOjM1Njc5LFNBTVBMRVJfMkRfU0hBRE9XOjM1NjgyLEZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlQ6MzU3MjMsUElYRUxfUEFDS19CVUZGRVI6MzUwNTEsUElYRUxfVU5QQUNLX0JVRkZFUjozNTA1MixQSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5HOjM1MDUzLFBJWEVMX1VOUEFDS19CVUZGRVJfQklORElORzozNTA1NSxGTE9BVF9NQVQyeDM6MzU2ODUsRkxPQVRfTUFUMng0OjM1Njg2LEZMT0FUX01BVDN4MjozNTY4NyxGTE9BVF9NQVQzeDQ6MzU2ODgsRkxPQVRfTUFUNHgyOjM1Njg5LEZMT0FUX01BVDR4MzozNTY5MCxTUkdCOjM1OTA0LFNSR0I4OjM1OTA1LFNSR0I4X0FMUEhBODozNTkwNyxDT01QQVJFX1JFRl9UT19URVhUVVJFOjM0ODk0LFJHQkEzMkY6MzQ4MzYsUkdCMzJGOjM0ODM3LFJHQkExNkY6MzQ4NDIsUkdCMTZGOjM0ODQzLFZFUlRFWF9BVFRSSUJfQVJSQVlfSU5URUdFUjozNTA2OSxNQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlM6MzUwNzEsTUlOX1BST0dSQU1fVEVYRUxfT0ZGU0VUOjM1MDc2LE1BWF9QUk9HUkFNX1RFWEVMX09GRlNFVDozNTA3NyxNQVhfVkFSWUlOR19DT01QT05FTlRTOjM1NjU5LFRFWFRVUkVfMkRfQVJSQVk6MzU4NjYsVEVYVFVSRV9CSU5ESU5HXzJEX0FSUkFZOjM1ODY5LFIxMUZfRzExRl9CMTBGOjM1ODk4LFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6MzU4OTksUkdCOV9FNTozNTkwMSxVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6MzU5MDIsVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9NT0RFOjM1OTY3LE1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUzozNTk2OCxUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR1M6MzU5NzEsVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TVEFSVDozNTk3MixUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NJWkU6MzU5NzMsVFJBTlNGT1JNX0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTjozNTk3NixSQVNURVJJWkVSX0RJU0NBUkQ6MzU5NzcsTUFYX1RSQU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTOjM1OTc4LE1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQVRUUklCUzozNTk3OSxJTlRFUkxFQVZFRF9BVFRSSUJTOjM1OTgwLFNFUEFSQVRFX0FUVFJJQlM6MzU5ODEsVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjozNTk4MixUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6MzU5ODMsUkdCQTMyVUk6MzYyMDgsUkdCMzJVSTozNjIwOSxSR0JBMTZVSTozNjIxNCxSR0IxNlVJOjM2MjE1LFJHQkE4VUk6MzYyMjAsUkdCOFVJOjM2MjIxLFJHQkEzMkk6MzYyMjYsUkdCMzJJOjM2MjI3LFJHQkExNkk6MzYyMzIsUkdCMTZJOjM2MjMzLFJHQkE4STozNjIzOCxSR0I4STozNjIzOSxSRURfSU5URUdFUjozNjI0NCxSR0JfSU5URUdFUjozNjI0OCxSR0JBX0lOVEVHRVI6MzYyNDksU0FNUExFUl8yRF9BUlJBWTozNjI4OSxTQU1QTEVSXzJEX0FSUkFZX1NIQURPVzozNjI5MixTQU1QTEVSX0NVQkVfU0hBRE9XOjM2MjkzLFVOU0lHTkVEX0lOVF9WRUMyOjM2Mjk0LFVOU0lHTkVEX0lOVF9WRUMzOjM2Mjk1LFVOU0lHTkVEX0lOVF9WRUM0OjM2Mjk2LElOVF9TQU1QTEVSXzJEOjM2Mjk4LElOVF9TQU1QTEVSXzNEOjM2Mjk5LElOVF9TQU1QTEVSX0NVQkU6MzYzMDAsSU5UX1NBTVBMRVJfMkRfQVJSQVk6MzYzMDMsVU5TSUdORURfSU5UX1NBTVBMRVJfMkQ6MzYzMDYsVU5TSUdORURfSU5UX1NBTVBMRVJfM0Q6MzYzMDcsVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRTozNjMwOCxVTlNJR05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWTozNjMxMSxERVBUSF9DT01QT05FTlQzMkY6MzYwMTIsREVQVEgzMkZfU1RFTkNJTDg6MzYwMTMsRkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWOjM2MjY5LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkc6MzMyOTYsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT01QT05FTlRfVFlQRTozMzI5NyxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFOjMzMjk4LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRTozMzI5OSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0JMVUVfU0laRTozMzMwMCxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkU6MzMzMDEsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9ERVBUSF9TSVpFOjMzMzAyLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9TSVpFOjMzMzAzLEZSQU1FQlVGRkVSX0RFRkFVTFQ6MzMzMDQsVU5TSUdORURfSU5UXzI0Xzg6MzQwNDIsREVQVEgyNF9TVEVOQ0lMODozNTA1NixVTlNJR05FRF9OT1JNQUxJWkVEOjM1ODYzLERSQVdfRlJBTUVCVUZGRVJfQklORElORzozNjAwNixSRUFEX0ZSQU1FQlVGRkVSOjM2MDA4LERSQVdfRlJBTUVCVUZGRVI6MzYwMDksUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HOjM2MDEwLFJFTkRFUkJVRkZFUl9TQU1QTEVTOjM2MDExLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MQVlFUjozNjA1MixNQVhfQ09MT1JfQVRUQUNITUVOVFM6MzYwNjMsQ09MT1JfQVRUQUNITUVOVDE6MzYwNjUsQ09MT1JfQVRUQUNITUVOVDI6MzYwNjYsQ09MT1JfQVRUQUNITUVOVDM6MzYwNjcsQ09MT1JfQVRUQUNITUVOVDQ6MzYwNjgsQ09MT1JfQVRUQUNITUVOVDU6MzYwNjksQ09MT1JfQVRUQUNITUVOVDY6MzYwNzAsQ09MT1JfQVRUQUNITUVOVDc6MzYwNzEsQ09MT1JfQVRUQUNITUVOVDg6MzYwNzIsQ09MT1JfQVRUQUNITUVOVDk6MzYwNzMsQ09MT1JfQVRUQUNITUVOVDEwOjM2MDc0LENPTE9SX0FUVEFDSE1FTlQxMTozNjA3NSxDT0xPUl9BVFRBQ0hNRU5UMTI6MzYwNzYsQ09MT1JfQVRUQUNITUVOVDEzOjM2MDc3LENPTE9SX0FUVEFDSE1FTlQxNDozNjA3OCxDT0xPUl9BVFRBQ0hNRU5UMTU6MzYwNzksRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRTozNjE4MixNQVhfU0FNUExFUzozNjE4MyxIQUxGX0ZMT0FUOjUxMzEsUkc6MzMzMTksUkdfSU5URUdFUjozMzMyMCxSODozMzMyMSxSRzg6MzMzMjMsUjE2RjozMzMyNSxSMzJGOjMzMzI2LFJHMTZGOjMzMzI3LFJHMzJGOjMzMzI4LFI4STozMzMyOSxSOFVJOjMzMzMwLFIxNkk6MzMzMzEsUjE2VUk6MzMzMzIsUjMySTozMzMzMyxSMzJVSTozMzMzNCxSRzhJOjMzMzM1LFJHOFVJOjMzMzM2LFJHMTZJOjMzMzM3LFJHMTZVSTozMzMzOCxSRzMySTozMzMzOSxSRzMyVUk6MzMzNDAsVkVSVEVYX0FSUkFZX0JJTkRJTkc6MzQyMjksUjhfU05PUk06MzY3NTYsUkc4X1NOT1JNOjM2NzU3LFJHQjhfU05PUk06MzY3NTgsUkdCQThfU05PUk06MzY3NTksU0lHTkVEX05PUk1BTElaRUQ6MzY3NjQsQ09QWV9SRUFEX0JVRkZFUjozNjY2MixDT1BZX1dSSVRFX0JVRkZFUjozNjY2MyxDT1BZX1JFQURfQlVGRkVSX0JJTkRJTkc6MzY2NjIsQ09QWV9XUklURV9CVUZGRVJfQklORElORzozNjY2MyxVTklGT1JNX0JVRkZFUjozNTM0NSxVTklGT1JNX0JVRkZFUl9CSU5ESU5HOjM1MzY4LFVOSUZPUk1fQlVGRkVSX1NUQVJUOjM1MzY5LFVOSUZPUk1fQlVGRkVSX1NJWkU6MzUzNzAsTUFYX1ZFUlRFWF9VTklGT1JNX0JMT0NLUzozNTM3MSxNQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1M6MzUzNzMsTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTOjM1Mzc0LE1BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUzozNTM3NSxNQVhfVU5JRk9STV9CTE9DS19TSVpFOjM1Mzc2LE1BWF9DT01CSU5FRF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOjM1Mzc3LE1BWF9DT01CSU5FRF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6MzUzNzksVU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVDozNTM4MCxBQ1RJVkVfVU5JRk9STV9CTE9DS1M6MzUzODIsVU5JRk9STV9UWVBFOjM1MzgzLFVOSUZPUk1fU0laRTozNTM4NCxVTklGT1JNX0JMT0NLX0lOREVYOjM1Mzg2LFVOSUZPUk1fT0ZGU0VUOjM1Mzg3LFVOSUZPUk1fQVJSQVlfU1RSSURFOjM1Mzg4LFVOSUZPUk1fTUFUUklYX1NUUklERTozNTM4OSxVTklGT1JNX0lTX1JPV19NQUpPUjozNTM5MCxVTklGT1JNX0JMT0NLX0JJTkRJTkc6MzUzOTEsVU5JRk9STV9CTE9DS19EQVRBX1NJWkU6MzUzOTIsVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STVM6MzUzOTQsVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STV9JTkRJQ0VTOjM1Mzk1LFVOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9WRVJURVhfU0hBREVSOjM1Mzk2LFVOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9GUkFHTUVOVF9TSEFERVI6MzUzOTgsSU5WQUxJRF9JTkRFWDo0Mjk0OTY3Mjk1LE1BWF9WRVJURVhfT1VUUFVUX0NPTVBPTkVOVFM6MzcxNTQsTUFYX0ZSQUdNRU5UX0lOUFVUX0NPTVBPTkVOVFM6MzcxNTcsTUFYX1NFUlZFUl9XQUlUX1RJTUVPVVQ6MzcxMzcsT0JKRUNUX1RZUEU6MzcxMzgsU1lOQ19DT05ESVRJT046MzcxMzksU1lOQ19TVEFUVVM6MzcxNDAsU1lOQ19GTEFHUzozNzE0MSxTWU5DX0ZFTkNFOjM3MTQyLFNZTkNfR1BVX0NPTU1BTkRTX0NPTVBMRVRFOjM3MTQzLFVOU0lHTkFMRUQ6MzcxNDQsU0lHTkFMRUQ6MzcxNDUsQUxSRUFEWV9TSUdOQUxFRDozNzE0NixUSU1FT1VUX0VYUElSRUQ6MzcxNDcsQ09ORElUSU9OX1NBVElTRklFRDozNzE0OCxXQUlUX0ZBSUxFRDozNzE0OSxTWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVDoxLFZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUjozNTA3MCxBTllfU0FNUExFU19QQVNTRUQ6MzU4ODcsQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTozNjIwMixTQU1QTEVSX0JJTkRJTkc6MzUwOTcsUkdCMTBfQTJVSTozNjk3NSxJTlRfMl8xMF8xMF8xMF9SRVY6MzYyNTUsVFJBTlNGT1JNX0ZFRURCQUNLOjM2Mzg2LFRSQU5TRk9STV9GRUVEQkFDS19QQVVTRUQ6MzYzODcsVFJBTlNGT1JNX0ZFRURCQUNLX0FDVElWRTozNjM4OCxUUkFOU0ZPUk1fRkVFREJBQ0tfQklORElORzozNjM4OSxDT01QUkVTU0VEX1IxMV9FQUM6Mzc0ODgsQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQzozNzQ4OSxDT01QUkVTU0VEX1JHMTFfRUFDOjM3NDkwLENPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDOjM3NDkxLENPTVBSRVNTRURfUkdCOF9FVEMyOjM3NDkyLENPTVBSRVNTRURfU1JHQjhfRVRDMjozNzQ5MyxDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOjM3NDk0LENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOjM3NDk1LENPTVBSRVNTRURfUkdCQThfRVRDMl9FQUM6Mzc0OTYsQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUM6Mzc0OTcsVEVYVFVSRV9JTU1VVEFCTEVfRk9STUFUOjM3MTY3LE1BWF9FTEVNRU5UX0lOREVYOjM2MjAzLFRFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUzozMzUwMyxNQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6MzQwNDd9LEZ0PU9iamVjdC5mcmVlemUoeVApfSk7dmFyIHNlLGV0LERlPSQoKCk9PntmdCgpO0h0KCk7WnMoKTtzZT17QllURTpGdC5CWVRFLFVOU0lHTkVEX0JZVEU6RnQuVU5TSUdORURfQllURSxTSE9SVDpGdC5TSE9SVCxVTlNJR05FRF9TSE9SVDpGdC5VTlNJR05FRF9TSE9SVCxJTlQ6RnQuSU5ULFVOU0lHTkVEX0lOVDpGdC5VTlNJR05FRF9JTlQsRkxPQVQ6RnQuRkxPQVQsRE9VQkxFOkZ0LkRPVUJMRX07c2UuZ2V0U2l6ZUluQnl0ZXM9ZnVuY3Rpb24odCl7aWYoIW0odCkpdGhyb3cgbmV3IEQoInZhbHVlIGlzIHJlcXVpcmVkLiIpO3N3aXRjaCh0KXtjYXNlIHNlLkJZVEU6cmV0dXJuIEludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIHNlLlVOU0lHTkVEX0JZVEU6cmV0dXJuIFVpbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBzZS5TSE9SVDpyZXR1cm4gSW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIHNlLlVOU0lHTkVEX1NIT1JUOnJldHVybiBVaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIHNlLklOVDpyZXR1cm4gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIHNlLlVOU0lHTkVEX0lOVDpyZXR1cm4gVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBzZS5GTE9BVDpyZXR1cm4gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugc2UuRE9VQkxFOnJldHVybiBGbG9hdDY0QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7ZGVmYXVsdDp0aHJvdyBuZXcgRCgiY29tcG9uZW50RGF0YXR5cGUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTtzZS5mcm9tVHlwZWRBcnJheT1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgSW50OEFycmF5KXJldHVybiBzZS5CWVRFO2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBzZS5VTlNJR05FRF9CWVRFO2lmKHQgaW5zdGFuY2VvZiBJbnQxNkFycmF5KXJldHVybiBzZS5TSE9SVDtpZih0IGluc3RhbmNlb2YgVWludDE2QXJyYXkpcmV0dXJuIHNlLlVOU0lHTkVEX1NIT1JUO2lmKHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5KXJldHVybiBzZS5JTlQ7aWYodCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KXJldHVybiBzZS5VTlNJR05FRF9JTlQ7aWYodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gc2UuRkxPQVQ7aWYodCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSlyZXR1cm4gc2UuRE9VQkxFO3Rocm93IG5ldyBEKCJhcnJheSBtdXN0IGJlIGFuIEludDhBcnJheSwgVWludDhBcnJheSwgSW50MTZBcnJheSwgVWludDE2QXJyYXksIEludDMyQXJyYXksIFVpbnQzMkFycmF5LCBGbG9hdDMyQXJyYXksIG9yIEZsb2F0NjRBcnJheS4iKX07c2UudmFsaWRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCkmJih0PT09c2UuQllURXx8dD09PXNlLlVOU0lHTkVEX0JZVEV8fHQ9PT1zZS5TSE9SVHx8dD09PXNlLlVOU0lHTkVEX1NIT1JUfHx0PT09c2UuSU5UfHx0PT09c2UuVU5TSUdORURfSU5UfHx0PT09c2UuRkxPQVR8fHQ9PT1zZS5ET1VCTEUpfTtzZS5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKHQsZSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImNvbXBvbmVudERhdGF0eXBlIGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJ2YWx1ZXNPckxlbmd0aCBpcyByZXF1aXJlZC4iKTtzd2l0Y2godCl7Y2FzZSBzZS5CWVRFOnJldHVybiBuZXcgSW50OEFycmF5KGUpO2Nhc2Ugc2UuVU5TSUdORURfQllURTpyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSk7Y2FzZSBzZS5TSE9SVDpyZXR1cm4gbmV3IEludDE2QXJyYXkoZSk7Y2FzZSBzZS5VTlNJR05FRF9TSE9SVDpyZXR1cm4gbmV3IFVpbnQxNkFycmF5KGUpO2Nhc2Ugc2UuSU5UOnJldHVybiBuZXcgSW50MzJBcnJheShlKTtjYXNlIHNlLlVOU0lHTkVEX0lOVDpyZXR1cm4gbmV3IFVpbnQzMkFycmF5KGUpO2Nhc2Ugc2UuRkxPQVQ6cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoZSk7Y2FzZSBzZS5ET1VCTEU6cmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkoZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRCgiY29tcG9uZW50RGF0YXR5cGUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTtzZS5jcmVhdGVBcnJheUJ1ZmZlclZpZXc9ZnVuY3Rpb24odCxlLG4sbyl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImNvbXBvbmVudERhdGF0eXBlIGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJidWZmZXIgaXMgcmVxdWlyZWQuIik7c3dpdGNoKG49bj8/MCxvPW8/PyhlLmJ5dGVMZW5ndGgtbikvc2UuZ2V0U2l6ZUluQnl0ZXModCksdCl7Y2FzZSBzZS5CWVRFOnJldHVybiBuZXcgSW50OEFycmF5KGUsbixvKTtjYXNlIHNlLlVOU0lHTkVEX0JZVEU6cmV0dXJuIG5ldyBVaW50OEFycmF5KGUsbixvKTtjYXNlIHNlLlNIT1JUOnJldHVybiBuZXcgSW50MTZBcnJheShlLG4sbyk7Y2FzZSBzZS5VTlNJR05FRF9TSE9SVDpyZXR1cm4gbmV3IFVpbnQxNkFycmF5KGUsbixvKTtjYXNlIHNlLklOVDpyZXR1cm4gbmV3IEludDMyQXJyYXkoZSxuLG8pO2Nhc2Ugc2UuVU5TSUdORURfSU5UOnJldHVybiBuZXcgVWludDMyQXJyYXkoZSxuLG8pO2Nhc2Ugc2UuRkxPQVQ6cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoZSxuLG8pO2Nhc2Ugc2UuRE9VQkxFOnJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGUsbixvKTtkZWZhdWx0OnRocm93IG5ldyBEKCJjb21wb25lbnREYXRhdHlwZSBpcyBub3QgYSB2YWxpZCB2YWx1ZS4iKX19O3NlLmZyb21OYW1lPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIkJZVEUiOnJldHVybiBzZS5CWVRFO2Nhc2UiVU5TSUdORURfQllURSI6cmV0dXJuIHNlLlVOU0lHTkVEX0JZVEU7Y2FzZSJTSE9SVCI6cmV0dXJuIHNlLlNIT1JUO2Nhc2UiVU5TSUdORURfU0hPUlQiOnJldHVybiBzZS5VTlNJR05FRF9TSE9SVDtjYXNlIklOVCI6cmV0dXJuIHNlLklOVDtjYXNlIlVOU0lHTkVEX0lOVCI6cmV0dXJuIHNlLlVOU0lHTkVEX0lOVDtjYXNlIkZMT0FUIjpyZXR1cm4gc2UuRkxPQVQ7Y2FzZSJET1VCTEUiOnJldHVybiBzZS5ET1VCTEU7ZGVmYXVsdDp0aHJvdyBuZXcgRCgibmFtZSBpcyBub3QgYSB2YWxpZCB2YWx1ZS4iKX19O2V0PU9iamVjdC5mcmVlemUoc2UpfSk7dmFyIGdQLE5pLERwPSQoKCk9PntnUD17Tk9ORTowLFRSSUFOR0xFUzoxLExJTkVTOjIsUE9MWUxJTkVTOjN9LE5pPU9iamVjdC5mcmVlemUoZ1ApfSk7ZnVuY3Rpb24gWHQodCxlLG4sbyl7dGhpc1swXT10Pz8wLHRoaXNbMV09bj8/MCx0aGlzWzJdPWU/PzAsdGhpc1szXT1vPz8wfXZhciBBUCxiUCx3YixUYix3UCxUUCxabyxiZj0kKCgpPT57a2UoKTtXdCgpO2Z0KCk7SHQoKTtYdC5wYWNrZWRMZW5ndGg9NDtYdC5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGVbbisrXT10WzBdLGVbbisrXT10WzFdLGVbbisrXT10WzJdLGVbbisrXT10WzNdLGV9O1h0LnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MCxtKG4pfHwobj1uZXcgWHQpLG5bMF09dFtlKytdLG5bMV09dFtlKytdLG5bMl09dFtlKytdLG5bM109dFtlKytdLG59O1h0LnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiYXJyYXkiLHQpO2xldCBuPXQubGVuZ3RoLG89bio0O2lmKCFtKGUpKWU9bmV3IEFycmF5KG8pO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoIT09byl0aHJvdyBuZXcgRCgiSWYgcmVzdWx0IGlzIGEgdHlwZWQgYXJyYXksIGl0IG11c3QgaGF2ZSBleGFjdGx5IGFycmF5Lmxlbmd0aCAqIDQgZWxlbWVudHMiKTtlLmxlbmd0aCE9PW8mJihlLmxlbmd0aD1vKX1mb3IobGV0IHI9MDtyPG47KytyKVh0LnBhY2sodFtyXSxlLHIqNCk7cmV0dXJuIGV9O1h0LnVucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJhcnJheSIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImFycmF5Lmxlbmd0aCIsdC5sZW5ndGgsNCksdC5sZW5ndGglNCE9PTApdGhyb3cgbmV3IEQoImFycmF5IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4iKTtsZXQgbj10Lmxlbmd0aDttKGUpP2UubGVuZ3RoPW4vNDplPW5ldyBBcnJheShuLzQpO2ZvcihsZXQgbz0wO288bjtvKz00KXtsZXQgcj1vLzQ7ZVtyXT1YdC51bnBhY2sodCxvLGVbcl0pfXJldHVybiBlfTtYdC5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKG0odCkpcmV0dXJuIG0oZSk/KGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlKTpuZXcgWHQodFswXSx0WzJdLHRbMV0sdFszXSl9O1h0LmZyb21BcnJheT1YdC51bnBhY2s7WHQuZnJvbUNvbHVtbk1ham9yQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZXMiLHQpLFh0LmNsb25lKHQsZSl9O1h0LmZyb21Sb3dNYWpvckFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgidmFsdWVzIix0KSxtKGUpPyhlWzBdPXRbMF0sZVsxXT10WzJdLGVbMl09dFsxXSxlWzNdPXRbM10sZSk6bmV3IFh0KHRbMF0sdFsxXSx0WzJdLHRbM10pfTtYdC5mcm9tU2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsdCksbShlKT8oZVswXT10LngsZVsxXT0wLGVbMl09MCxlWzNdPXQueSxlKTpuZXcgWHQodC54LDAsMCx0LnkpfTtYdC5mcm9tVW5pZm9ybVNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigic2NhbGUiLHQpLG0oZSk/KGVbMF09dCxlWzFdPTAsZVsyXT0wLGVbM109dCxlKTpuZXcgWHQodCwwLDAsdCl9O1h0LmZyb21Sb3RhdGlvbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm51bWJlcigiYW5nbGUiLHQpO2xldCBuPU1hdGguY29zKHQpLG89TWF0aC5zaW4odCk7cmV0dXJuIG0oZSk/KGVbMF09bixlWzFdPW8sZVsyXT0tbyxlWzNdPW4sZSk6bmV3IFh0KG4sLW8sbyxuKX07WHQudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCksbShlKT8oZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGUpOlt0WzBdLHRbMV0sdFsyXSx0WzNdXX07WHQuZ2V0RWxlbWVudEluZGV4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJyb3ciLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoInJvdyIsZSwxKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiY29sdW1uIix0LDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJjb2x1bW4iLHQsMSksdCoyK2V9O1h0LmdldENvbHVtbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPWUqMixyPXRbb10saT10W28rMV07cmV0dXJuIG4ueD1yLG4ueT1pLG59O1h0LnNldENvbHVtbj1mdW5jdGlvbih0LGUsbixvKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwxKSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLG89WHQuY2xvbmUodCxvKTtsZXQgcj1lKjI7cmV0dXJuIG9bcl09bi54LG9bcisxXT1uLnksb307WHQuZ2V0Um93PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwxKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFtlXSxyPXRbZSsyXTtyZXR1cm4gbi54PW8sbi55PXIsbn07WHQuc2V0Um93PWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwxKSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLG89WHQuY2xvbmUodCxvKSxvW2VdPW4ueCxvW2UrMl09bi55LG99O0FQPW5ldyBKO1h0LnNldFNjYWxlPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPVh0LmdldFNjYWxlKHQsQVApLHI9ZS54L28ueCxpPWUueS9vLnk7cmV0dXJuIG5bMF09dFswXSpyLG5bMV09dFsxXSpyLG5bMl09dFsyXSppLG5bM109dFszXSppLG59O2JQPW5ldyBKO1h0LnNldFVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1YdC5nZXRTY2FsZSh0LGJQKSxyPWUvby54LGk9ZS9vLnk7cmV0dXJuIG5bMF09dFswXSpyLG5bMV09dFsxXSpyLG5bMl09dFsyXSppLG5bM109dFszXSppLG59O3diPW5ldyBKO1h0LmdldFNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PUoubWFnbml0dWRlKEouZnJvbUVsZW1lbnRzKHRbMF0sdFsxXSx3YikpLGUueT1KLm1hZ25pdHVkZShKLmZyb21FbGVtZW50cyh0WzJdLHRbM10sd2IpKSxlfTtUYj1uZXcgSjtYdC5nZXRNYXhpbXVtU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIFh0LmdldFNjYWxlKHQsVGIpLEoubWF4aW11bUNvbXBvbmVudChUYil9O3dQPW5ldyBKO1h0LnNldFJvdGF0aW9uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPVh0LmdldFNjYWxlKHQsd1ApO3JldHVybiBuWzBdPWVbMF0qby54LG5bMV09ZVsxXSpvLngsblsyXT1lWzJdKm8ueSxuWzNdPWVbM10qby55LG59O1RQPW5ldyBKO1h0LmdldFJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1YdC5nZXRTY2FsZSh0LFRQKTtyZXR1cm4gZVswXT10WzBdL24ueCxlWzFdPXRbMV0vbi54LGVbMl09dFsyXS9uLnksZVszXT10WzNdL24ueSxlfTtYdC5tdWx0aXBseT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFswXSplWzBdK3RbMl0qZVsxXSxyPXRbMF0qZVsyXSt0WzJdKmVbM10saT10WzFdKmVbMF0rdFszXSplWzFdLHM9dFsxXSplWzJdK3RbM10qZVszXTtyZXR1cm4gblswXT1vLG5bMV09aSxuWzJdPXIsblszXT1zLG59O1h0LmFkZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXStlWzBdLG5bMV09dFsxXStlWzFdLG5bMl09dFsyXStlWzJdLG5bM109dFszXStlWzNdLG59O1h0LnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdLWVbMF0sblsxXT10WzFdLWVbMV0sblsyXT10WzJdLWVbMl0sblszXT10WzNdLWVbM10sbn07WHQubXVsdGlwbHlCeVZlY3Rvcj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFswXSplLngrdFsyXSplLnkscj10WzFdKmUueCt0WzNdKmUueTtyZXR1cm4gbi54PW8sbi55PXIsbn07WHQubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxhciIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSplLG5bMV09dFsxXSplLG5bMl09dFsyXSplLG5bM109dFszXSplLG59O1h0Lm11bHRpcGx5QnlTY2FsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUueCxuWzFdPXRbMV0qZS54LG5bMl09dFsyXSplLnksblszXT10WzNdKmUueSxufTtYdC5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0qZSxuWzFdPXRbMV0qZSxuWzJdPXRbMl0qZSxuWzNdPXRbM10qZSxufTtYdC5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlWzBdPS10WzBdLGVbMV09LXRbMV0sZVsyXT0tdFsyXSxlWzNdPS10WzNdLGV9O1h0LnRyYW5zcG9zZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dFswXSxvPXRbMl0scj10WzFdLGk9dFszXTtyZXR1cm4gZVswXT1uLGVbMV09byxlWzJdPXIsZVszXT1pLGV9O1h0LmFicz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGVbMF09TWF0aC5hYnModFswXSksZVsxXT1NYXRoLmFicyh0WzFdKSxlWzJdPU1hdGguYWJzKHRbMl0pLGVbM109TWF0aC5hYnModFszXSksZX07WHQuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxtKHQpJiZtKGUpJiZ0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzNdPT09ZVszXX07WHQuZXF1YWxzQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0WzBdPT09ZVtuXSYmdFsxXT09PWVbbisxXSYmdFsyXT09PWVbbisyXSYmdFszXT09PWVbbiszXX07WHQuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49bj8/MCx0PT09ZXx8bSh0KSYmbShlKSYmTWF0aC5hYnModFswXS1lWzBdKTw9biYmTWF0aC5hYnModFsxXS1lWzFdKTw9biYmTWF0aC5hYnModFsyXS1lWzJdKTw9biYmTWF0aC5hYnModFszXS1lWzNdKTw9bn07WHQuSURFTlRJVFk9T2JqZWN0LmZyZWV6ZShuZXcgWHQoMSwwLDAsMSkpO1h0LlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgWHQoMCwwLDAsMCkpO1h0LkNPTFVNTjBST1cwPTA7WHQuQ09MVU1OMFJPVzE9MTtYdC5DT0xVTU4xUk9XMD0yO1h0LkNPTFVNTjFST1cxPTM7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWHQucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBYdC5wYWNrZWRMZW5ndGh9fX0pO1h0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gWHQuY2xvbmUodGhpcyx0KX07WHQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gWHQuZXF1YWxzKHRoaXMsdCl9O1h0LnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFh0LmVxdWFsc0Vwc2lsb24odGhpcyx0LGUpfTtYdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpc1swXX0sICR7dGhpc1syXX0pCigke3RoaXNbMV19LCAke3RoaXNbM119KWB9O1pvPVh0fSk7dmFyIF9vLEJ0LHRuPSQoKCk9PntacygpO19vPXtQT0lOVFM6RnQuUE9JTlRTLExJTkVTOkZ0LkxJTkVTLExJTkVfTE9PUDpGdC5MSU5FX0xPT1AsTElORV9TVFJJUDpGdC5MSU5FX1NUUklQLFRSSUFOR0xFUzpGdC5UUklBTkdMRVMsVFJJQU5HTEVfU1RSSVA6RnQuVFJJQU5HTEVfU1RSSVAsVFJJQU5HTEVfRkFOOkZ0LlRSSUFOR0xFX0ZBTn07X28uaXNMaW5lcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09PV9vLkxJTkVTfHx0PT09X28uTElORV9MT09QfHx0PT09X28uTElORV9TVFJJUH07X28uaXNUcmlhbmdsZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1fby5UUklBTkdMRVN8fHQ9PT1fby5UUklBTkdMRV9TVFJJUHx8dD09PV9vLlRSSUFOR0xFX0ZBTn07X28udmFsaWRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1fby5QT0lOVFN8fHQ9PT1fby5MSU5FU3x8dD09PV9vLkxJTkVfTE9PUHx8dD09PV9vLkxJTkVfU1RSSVB8fHQ9PT1fby5UUklBTkdMRVN8fHQ9PT1fby5UUklBTkdMRV9TVFJJUHx8dD09PV9vLlRSSUFOR0xFX0ZBTn07QnQ9T2JqZWN0LmZyZWV6ZShfbyl9KTtmdW5jdGlvbiBCaCh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMuYXR0cmlidXRlcyIsdC5hdHRyaWJ1dGVzKSx0aGlzLmF0dHJpYnV0ZXM9dC5hdHRyaWJ1dGVzLHRoaXMuaW5kaWNlcz10LmluZGljZXMsdGhpcy5wcmltaXRpdmVUeXBlPXQucHJpbWl0aXZlVHlwZT8/QnQuVFJJQU5HTEVTLHRoaXMuYm91bmRpbmdTcGhlcmU9dC5ib3VuZGluZ1NwaGVyZSx0aGlzLmdlb21ldHJ5VHlwZT10Lmdlb21ldHJ5VHlwZT8/TmkuTk9ORSx0aGlzLmJvdW5kaW5nU3BoZXJlQ1Y9dC5ib3VuZGluZ1NwaGVyZUNWLHRoaXMub2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlfXZhciBPUCxFUCxPYixSUCxTUCx4UCxDUCxQUCxNUCxOUCxVdCxZZT0kKCgpPT57a2UoKTtEdCgpO0llKCk7V3QoKTt5ZSgpO2Z0KCk7SHQoKTtEcCgpO2JmKCk7VW4oKTtrbigpO3RuKCk7WG8oKTtUbigpO2FzKCk7QmguY29tcHV0ZU51bWJlck9mVmVydGljZXM9ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJnZW9tZXRyeSIsdCk7bGV0IGU9LTE7Zm9yKGxldCBuIGluIHQuYXR0cmlidXRlcylpZih0LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkobikmJm0odC5hdHRyaWJ1dGVzW25dKSYmbSh0LmF0dHJpYnV0ZXNbbl0udmFsdWVzKSl7bGV0IG89dC5hdHRyaWJ1dGVzW25dLHI9by52YWx1ZXMubGVuZ3RoL28uY29tcG9uZW50c1BlckF0dHJpYnV0ZTtpZihlIT09ciYmZSE9PS0xKXRocm93IG5ldyBEKCJBbGwgYXR0cmlidXRlIGxpc3RzIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgYXR0cmlidXRlcy4iKTtlPXJ9cmV0dXJuIGV9O09QPW5ldyBjdCxFUD1uZXcgYSxPYj1uZXcgc3QsUlA9W25ldyBjdCxuZXcgY3QsbmV3IGN0XSxTUD1bbmV3IEosbmV3IEosbmV3IEpdLHhQPVtuZXcgSixuZXcgSixuZXcgSl0sQ1A9bmV3IGEsUFA9bmV3IHRlLE1QPW5ldyBzdCxOUD1uZXcgWm87QmguX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHIsaT1OdC5jZW50ZXIobyxPUCkscz1jdC50b0NhcnRlc2lhbihpLG4sRVApLGY9JG8uZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUocyxuLE9iKSx1PXN0LmludmVyc2UoZixPYiksYz1TUCxsPVJQO2xbMF0ubG9uZ2l0dWRlPW8ud2VzdCxsWzBdLmxhdGl0dWRlPW8uc291dGgsbFsxXS5sb25naXR1ZGU9by53ZXN0LGxbMV0ubGF0aXR1ZGU9by5ub3J0aCxsWzJdLmxvbmdpdHVkZT1vLmVhc3QsbFsyXS5sYXRpdHVkZT1vLnNvdXRoO2xldCBwPUNQO2ZvcihyPTA7cjwzO3IrKyljdC50b0NhcnRlc2lhbihsW3JdLG4scCkscD1zdC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3Rvcih1LHAscCksY1tyXS54PXAueCxjW3JdLnk9cC55O2xldCBkPXRlLmZyb21BeGlzQW5nbGUoYS5VTklUX1osLWUsUFApLGg9Wi5mcm9tUXVhdGVybmlvbihkLE1QKSxfPXQubGVuZ3RoLGc9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHc9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE89TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2ZvcihyPTA7cjxfO3IrKylwPXN0Lm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKHUsdFtyXSxwKSxwPVoubXVsdGlwbHlCeVZlY3RvcihoLHAscCksZz1NYXRoLm1pbihnLHAueCksYj1NYXRoLm1pbihiLHAueSksdz1NYXRoLm1heCh3LHAueCksTz1NYXRoLm1heChPLHAueSk7bGV0IEU9Wm8uZnJvbVJvdGF0aW9uKGUsTlApLFQ9eFA7VFswXS54PWcsVFswXS55PWIsVFsxXS54PWcsVFsxXS55PU8sVFsyXS54PXcsVFsyXS55PWI7bGV0IHg9Y1swXSxNPWNbMl0ueC14LngsTj1jWzFdLnkteC55O2ZvcihyPTA7cjwzO3IrKyl7bGV0IEE9VFtyXTtaby5tdWx0aXBseUJ5VmVjdG9yKEUsQSxBKSxBLng9KEEueC14LngpL00sQS55PShBLnkteC55KS9OfWxldCBGPVRbMF0sST1UWzFdLHY9VFsyXSxCPW5ldyBBcnJheSg2KTtyZXR1cm4gSi5wYWNrKEYsQiksSi5wYWNrKEksQiwyKSxKLnBhY2sodixCLDQpLEJ9O1V0PUJofSk7ZnVuY3Rpb24gSVAodCl7aWYodD10Pz9JdC5FTVBUWV9PQkpFQ1QsIW0odC5jb21wb25lbnREYXRhdHlwZSkpdGhyb3cgbmV3IEQoIm9wdGlvbnMuY29tcG9uZW50RGF0YXR5cGUgaXMgcmVxdWlyZWQuIik7aWYoIW0odC5jb21wb25lbnRzUGVyQXR0cmlidXRlKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5jb21wb25lbnRzUGVyQXR0cmlidXRlIGlzIHJlcXVpcmVkLiIpO2lmKHQuY29tcG9uZW50c1BlckF0dHJpYnV0ZTwxfHx0LmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU+NCl0aHJvdyBuZXcgRCgib3B0aW9ucy5jb21wb25lbnRzUGVyQXR0cmlidXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0LiIpO2lmKCFtKHQudmFsdWVzKSl0aHJvdyBuZXcgRCgib3B0aW9ucy52YWx1ZXMgaXMgcmVxdWlyZWQuIik7dGhpcy5jb21wb25lbnREYXRhdHlwZT10LmNvbXBvbmVudERhdGF0eXBlLHRoaXMuY29tcG9uZW50c1BlckF0dHJpYnV0ZT10LmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsdGhpcy5ub3JtYWxpemU9dC5ub3JtYWxpemU/PyExLHRoaXMudmFsdWVzPXQudmFsdWVzfXZhciBpdCwkZT0kKCgpPT57eWUoKTtmdCgpO0h0KCk7aXQ9SVB9KTtmdW5jdGlvbiB2UCh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx0aGlzLnBvc2l0aW9uPXQucG9zaXRpb24sdGhpcy5ub3JtYWw9dC5ub3JtYWwsdGhpcy5zdD10LnN0LHRoaXMuYml0YW5nZW50PXQuYml0YW5nZW50LHRoaXMudGFuZ2VudD10LnRhbmdlbnQsdGhpcy5jb2xvcj10LmNvbG9yfXZhciBpZSxhbj0kKCgpPT57eWUoKTtpZT12UH0pO3ZhciBxZSxFYixSYj0kKCgpPT57a2UoKTtEdCgpO19yKCk7V3QoKTtIdCgpO2JmKCk7VW4oKTtrbigpO3FlPXtTQ0FMQVI6IlNDQUxBUiIsVkVDMjoiVkVDMiIsVkVDMzoiVkVDMyIsVkVDNDoiVkVDNCIsTUFUMjoiTUFUMiIsTUFUMzoiTUFUMyIsTUFUNDoiTUFUNCJ9O3FlLmdldE1hdGhUeXBlPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIHFlLlNDQUxBUjpyZXR1cm4gTnVtYmVyO2Nhc2UgcWUuVkVDMjpyZXR1cm4gSjtjYXNlIHFlLlZFQzM6cmV0dXJuIGE7Y2FzZSBxZS5WRUM0OnJldHVybiBtZTtjYXNlIHFlLk1BVDI6cmV0dXJuIFpvO2Nhc2UgcWUuTUFUMzpyZXR1cm4gWjtjYXNlIHFlLk1BVDQ6cmV0dXJuIHN0O2RlZmF1bHQ6dGhyb3cgbmV3IEQoImF0dHJpYnV0ZVR5cGUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTtxZS5nZXROdW1iZXJPZkNvbXBvbmVudHM9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgcWUuU0NBTEFSOnJldHVybiAxO2Nhc2UgcWUuVkVDMjpyZXR1cm4gMjtjYXNlIHFlLlZFQzM6cmV0dXJuIDM7Y2FzZSBxZS5WRUM0OmNhc2UgcWUuTUFUMjpyZXR1cm4gNDtjYXNlIHFlLk1BVDM6cmV0dXJuIDk7Y2FzZSBxZS5NQVQ0OnJldHVybiAxNjtkZWZhdWx0OnRocm93IG5ldyBEKCJhdHRyaWJ1dGVUeXBlIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07cWUuZ2V0QXR0cmlidXRlTG9jYXRpb25Db3VudD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBxZS5TQ0FMQVI6Y2FzZSBxZS5WRUMyOmNhc2UgcWUuVkVDMzpjYXNlIHFlLlZFQzQ6cmV0dXJuIDE7Y2FzZSBxZS5NQVQyOnJldHVybiAyO2Nhc2UgcWUuTUFUMzpyZXR1cm4gMztjYXNlIHFlLk1BVDQ6cmV0dXJuIDQ7ZGVmYXVsdDp0aHJvdyBuZXcgRCgiYXR0cmlidXRlVHlwZSBpcyBub3QgYSB2YWxpZCB2YWx1ZS4iKX19O3FlLmdldEdsc2xUeXBlPWZ1bmN0aW9uKHQpe3N3aXRjaCh5LnR5cGVPZi5zdHJpbmcoImF0dHJpYnV0ZVR5cGUiLHQpLHQpe2Nhc2UgcWUuU0NBTEFSOnJldHVybiJmbG9hdCI7Y2FzZSBxZS5WRUMyOnJldHVybiJ2ZWMyIjtjYXNlIHFlLlZFQzM6cmV0dXJuInZlYzMiO2Nhc2UgcWUuVkVDNDpyZXR1cm4idmVjNCI7Y2FzZSBxZS5NQVQyOnJldHVybiJtYXQyIjtjYXNlIHFlLk1BVDM6cmV0dXJuIm1hdDMiO2Nhc2UgcWUuTUFUNDpyZXR1cm4ibWF0NCI7ZGVmYXVsdDp0aHJvdyBuZXcgRCgiYXR0cmlidXRlVHlwZSBpcyBub3QgYSB2YWxpZCB2YWx1ZS4iKX19O0ViPU9iamVjdC5mcmVlemUocWUpfSk7ZnVuY3Rpb24gQnAodCl7cmV0dXJuIENiWzBdPXQsQ2JbMF19ZnVuY3Rpb24gVWgodCl7cmV0dXJuIHQ+PjFeLSh0JjEpfXZhciBTYix4Yixlbix3ZixDYixraCxubixmcz0kKCgpPT57a2UoKTtEdCgpO0RlKCk7V3QoKTtmdCgpO0h0KCk7S3QoKTtSYigpO1NiPTEvMjU2LHhiPTI1Nixlbj17fTtlbi5vY3RFbmNvZGVJblJhbmdlPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoInZlY3RvciIsdCkseS5kZWZpbmVkKCJyZXN1bHQiLG4pO2xldCBvPWEubWFnbml0dWRlU3F1YXJlZCh0KTtpZihNYXRoLmFicyhvLTEpPlAuRVBTSUxPTjYpdGhyb3cgbmV3IEQoInZlY3RvciBtdXN0IGJlIG5vcm1hbGl6ZWQuIik7aWYobi54PXQueC8oTWF0aC5hYnModC54KStNYXRoLmFicyh0LnkpK01hdGguYWJzKHQueikpLG4ueT10LnkvKE1hdGguYWJzKHQueCkrTWF0aC5hYnModC55KStNYXRoLmFicyh0LnopKSx0Lno8MCl7bGV0IHI9bi54LGk9bi55O24ueD0oMS1NYXRoLmFicyhpKSkqUC5zaWduTm90WmVybyhyKSxuLnk9KDEtTWF0aC5hYnMocikpKlAuc2lnbk5vdFplcm8oaSl9cmV0dXJuIG4ueD1QLnRvU05vcm0obi54LGUpLG4ueT1QLnRvU05vcm0obi55LGUpLG59O2VuLm9jdEVuY29kZT1mdW5jdGlvbih0LGUpe3JldHVybiBlbi5vY3RFbmNvZGVJblJhbmdlKHQsMjU1LGUpfTt3Zj1uZXcgSixDYj1uZXcgVWludDhBcnJheSgxKTtlbi5vY3RFbmNvZGVUb0NhcnRlc2lhbjQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZW4ub2N0RW5jb2RlSW5SYW5nZSh0LDY1NTM1LHdmKSxlLng9QnAod2YueCpTYiksZS55PUJwKHdmLngpLGUuej1CcCh3Zi55KlNiKSxlLnc9QnAod2YueSksZX07ZW4ub2N0RGVjb2RlSW5SYW5nZT1mdW5jdGlvbih0LGUsbixvKXtpZih5LmRlZmluZWQoInJlc3VsdCIsbyksdDwwfHx0Pm58fGU8MHx8ZT5uKXRocm93IG5ldyBEKGB4IGFuZCB5IG11c3QgYmUgdW5zaWduZWQgbm9ybWFsaXplZCBpbnRlZ2VycyBiZXR3ZWVuIDAgYW5kICR7bn1gKTtpZihvLng9UC5mcm9tU05vcm0odCxuKSxvLnk9UC5mcm9tU05vcm0oZSxuKSxvLno9MS0oTWF0aC5hYnMoby54KStNYXRoLmFicyhvLnkpKSxvLno8MCl7bGV0IHI9by54O28ueD0oMS1NYXRoLmFicyhvLnkpKSpQLnNpZ25Ob3RaZXJvKHIpLG8ueT0oMS1NYXRoLmFicyhyKSkqUC5zaWduTm90WmVybyhvLnkpfXJldHVybiBhLm5vcm1hbGl6ZShvLG8pfTtlbi5vY3REZWNvZGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlbi5vY3REZWNvZGVJblJhbmdlKHQsZSwyNTUsbil9O2VuLm9jdERlY29kZUZyb21DYXJ0ZXNpYW40PWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJlbmNvZGVkIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dC54LG89dC55LHI9dC56LGk9dC53O2lmKG48MHx8bj4yNTV8fG88MHx8bz4yNTV8fHI8MHx8cj4yNTV8fGk8MHx8aT4yNTUpdGhyb3cgbmV3IEQoIngsIHksIHosIGFuZCB3IG11c3QgYmUgdW5zaWduZWQgbm9ybWFsaXplZCBpbnRlZ2VycyBiZXR3ZWVuIDAgYW5kIDI1NSIpO2xldCBzPW4qeGIrbyxmPXIqeGIraTtyZXR1cm4gZW4ub2N0RGVjb2RlSW5SYW5nZShzLGYsNjU1MzUsZSl9O2VuLm9jdFBhY2tGbG9hdD1mdW5jdGlvbih0KXtyZXR1cm4geS5kZWZpbmVkKCJlbmNvZGVkIix0KSwyNTYqdC54K3QueX07a2g9bmV3IEo7ZW4ub2N0RW5jb2RlRmxvYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGVuLm9jdEVuY29kZSh0LGtoKSxlbi5vY3RQYWNrRmxvYXQoa2gpfTtlbi5vY3REZWNvZGVGbG9hdD1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgidmFsdWUiLHQpO2xldCBuPXQvMjU2LG89TWF0aC5mbG9vcihuKSxyPShuLW8pKjI1NjtyZXR1cm4gZW4ub2N0RGVjb2RlKG8scixlKX07ZW4ub2N0UGFjaz1mdW5jdGlvbih0LGUsbixvKXt5LmRlZmluZWQoInYxIix0KSx5LmRlZmluZWQoInYyIixlKSx5LmRlZmluZWQoInYzIixuKSx5LmRlZmluZWQoInJlc3VsdCIsbyk7bGV0IHI9ZW4ub2N0RW5jb2RlRmxvYXQodCksaT1lbi5vY3RFbmNvZGVGbG9hdChlKSxzPWVuLm9jdEVuY29kZShuLGtoKTtyZXR1cm4gby54PTY1NTM2KnMueCtyLG8ueT02NTUzNipzLnkraSxvfTtlbi5vY3RVbnBhY2s9ZnVuY3Rpb24odCxlLG4sbyl7eS5kZWZpbmVkKCJwYWNrZWQiLHQpLHkuZGVmaW5lZCgidjEiLGUpLHkuZGVmaW5lZCgidjIiLG4pLHkuZGVmaW5lZCgidjMiLG8pO2xldCByPXQueC82NTUzNixpPU1hdGguZmxvb3Iocikscz0oci1pKSo2NTUzNjtyPXQueS82NTUzNjtsZXQgZj1NYXRoLmZsb29yKHIpLHU9KHItZikqNjU1MzY7ZW4ub2N0RGVjb2RlRmxvYXQocyxlKSxlbi5vY3REZWNvZGVGbG9hdCh1LG4pLGVuLm9jdERlY29kZShpLGYsbyl9O2VuLmNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzPWZ1bmN0aW9uKHQpe3kuZGVmaW5lZCgidGV4dHVyZUNvb3JkaW5hdGVzIix0KTtsZXQgZT10LngqNDA5NXwwLG49dC55KjQwOTV8MDtyZXR1cm4gNDA5NiplK259O2VuLmRlY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNvbXByZXNzZWQiLHQpLHkuZGVmaW5lZCgicmVzdWx0IixlKTtsZXQgbj10LzQwOTYsbz1NYXRoLmZsb29yKG4pO3JldHVybiBlLng9by80MDk1LGUueT0odC1vKjQwOTYpLzQwOTUsZX07ZW4uemlnWmFnRGVsdGFEZWNvZGU9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgidUJ1ZmZlciIsdCkseS5kZWZpbmVkKCJ2QnVmZmVyIixlKSx5LnR5cGVPZi5udW1iZXIuZXF1YWxzKCJ1QnVmZmVyLmxlbmd0aCIsInZCdWZmZXIubGVuZ3RoIix0Lmxlbmd0aCxlLmxlbmd0aCksbShuKSYmeS50eXBlT2YubnVtYmVyLmVxdWFscygidUJ1ZmZlci5sZW5ndGgiLCJoZWlnaHRCdWZmZXIubGVuZ3RoIix0Lmxlbmd0aCxuLmxlbmd0aCk7bGV0IG89dC5sZW5ndGgscj0wLGk9MCxzPTA7Zm9yKGxldCBmPTA7ZjxvOysrZilyKz1VaCh0W2ZdKSxpKz1VaChlW2ZdKSx0W2ZdPXIsZVtmXT1pLG0obikmJihzKz1VaChuW2ZdKSxuW2ZdPXMpfTtlbi5kZXF1YW50aXplPWZ1bmN0aW9uKHQsZSxuLG8pe3kuZGVmaW5lZCgidHlwZWRBcnJheSIsdCkseS5kZWZpbmVkKCJjb21wb25lbnREYXRhdHlwZSIsZSkseS5kZWZpbmVkKCJ0eXBlIixuKSx5LmRlZmluZWQoImNvdW50IixvKTtsZXQgcj1FYi5nZXROdW1iZXJPZkNvbXBvbmVudHMobiksaTtzd2l0Y2goZSl7Y2FzZSBldC5CWVRFOmk9MTI3O2JyZWFrO2Nhc2UgZXQuVU5TSUdORURfQllURTppPTI1NTticmVhaztjYXNlIGV0LlNIT1JUOmk9MzI3Njc7YnJlYWs7Y2FzZSBldC5VTlNJR05FRF9TSE9SVDppPTY1NTM1O2JyZWFrO2Nhc2UgZXQuSU5UOmk9MjE0NzQ4MzY0NzticmVhaztjYXNlIGV0LlVOU0lHTkVEX0lOVDppPTQyOTQ5NjcyOTU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRChgQ2Fubm90IGRlcXVhbnRpemUgY29tcG9uZW50IGRhdGF0eXBlOiAke2V9YCl9bGV0IHM9bmV3IEZsb2F0MzJBcnJheShvKnIpO2ZvcihsZXQgZj0wO2Y8bztmKyspZm9yKGxldCB1PTA7dTxyO3UrKyl7bGV0IGM9ZipyK3U7c1tjXT1NYXRoLm1heCh0W2NdL2ksLTEpfXJldHVybiBzfTtlbi5kZWNvZGVSR0I1NjU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoInR5cGVkQXJyYXkiLHQpO2xldCBuPXQubGVuZ3RoKjM7bShlKSYmeS50eXBlT2YubnVtYmVyLmVxdWFscygicmVzdWx0Lmxlbmd0aCIsInR5cGVkQXJyYXkubGVuZ3RoICogMyIsZS5sZW5ndGgsbik7bGV0IG89dC5sZW5ndGg7bShlKXx8KGU9bmV3IEZsb2F0MzJBcnJheShvKjMpKTtsZXQgcj0zMSxpPTYzLHM9MS8zMSxmPTEvNjM7Zm9yKGxldCB1PTA7dTxvO3UrKyl7bGV0IGM9dFt1XSxsPWM+PjExLHA9Yz4+NSZpLGQ9YyZyLGg9Myp1O2VbaF09bCpzLGVbaCsxXT1wKmYsZVtoKzJdPWQqc31yZXR1cm4gZX07bm49ZW59KTtmdW5jdGlvbiBGUCh0LGUsbixvLHIpe3kuZGVmaW5lZCgicG9pbnQiLHQpLHkuZGVmaW5lZCgicDAiLGUpLHkuZGVmaW5lZCgicDEiLG4pLHkuZGVmaW5lZCgicDIiLG8pLG0ocil8fChyPW5ldyBhKTtsZXQgaSxzLGYsdSxjLGwscCxkO2lmKG0oZS56KSl7aWYoYS5lcXVhbHNFcHNpbG9uKHQsZSxQLkVQU0lMT04xNCkpcmV0dXJuIGEuY2xvbmUoYS5VTklUX1gscik7aWYoYS5lcXVhbHNFcHNpbG9uKHQsbixQLkVQU0lMT04xNCkpcmV0dXJuIGEuY2xvbmUoYS5VTklUX1kscik7aWYoYS5lcXVhbHNFcHNpbG9uKHQsbyxQLkVQU0lMT04xNCkpcmV0dXJuIGEuY2xvbmUoYS5VTklUX1oscik7aT1hLnN1YnRyYWN0KG4sZSxQYikscz1hLnN1YnRyYWN0KG8sZSxNYiksZj1hLnN1YnRyYWN0KHQsZSxOYiksdT1hLmRvdChpLGkpLGM9YS5kb3QoaSxzKSxsPWEuZG90KGksZikscD1hLmRvdChzLHMpLGQ9YS5kb3QocyxmKX1lbHNle2lmKEouZXF1YWxzRXBzaWxvbih0LGUsUC5FUFNJTE9OMTQpKXJldHVybiBhLmNsb25lKGEuVU5JVF9YLHIpO2lmKEouZXF1YWxzRXBzaWxvbih0LG4sUC5FUFNJTE9OMTQpKXJldHVybiBhLmNsb25lKGEuVU5JVF9ZLHIpO2lmKEouZXF1YWxzRXBzaWxvbih0LG8sUC5FUFNJTE9OMTQpKXJldHVybiBhLmNsb25lKGEuVU5JVF9aLHIpO2k9Si5zdWJ0cmFjdChuLGUsUGIpLHM9Si5zdWJ0cmFjdChvLGUsTWIpLGY9Si5zdWJ0cmFjdCh0LGUsTmIpLHU9Si5kb3QoaSxpKSxjPUouZG90KGkscyksbD1KLmRvdChpLGYpLHA9Si5kb3QocyxzKSxkPUouZG90KHMsZil9ci55PXAqbC1jKmQsci56PXUqZC1jKmw7bGV0IGg9dSpwLWMqYztpZihoIT09MClyZXR1cm4gci55Lz1oLHIuei89aCxyLng9MS1yLnktci56LHJ9dmFyIFBiLE1iLE5iLEliLHZiPSQoKCk9PntrZSgpO0R0KCk7V3QoKTtmdCgpO0t0KCk7UGI9bmV3IGEsTWI9bmV3IGEsTmI9bmV3IGE7SWI9RlB9KTtmdW5jdGlvbiBpaSgpe3RoaXMuaGlnaD1hLmNsb25lKGEuWkVSTyksdGhpcy5sb3c9YS5jbG9uZShhLlpFUk8pfXZhciBJaSxHaCxRcyxWaD0kKCgpPT57RHQoKTtXdCgpO2Z0KCk7aWkuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YubnVtYmVyKCJ2YWx1ZSIsdCksbShlKXx8KGU9e2hpZ2g6MCxsb3c6MH0pO2xldCBuO3JldHVybiB0Pj0wPyhuPU1hdGguZmxvb3IodC82NTUzNikqNjU1MzYsZS5oaWdoPW4sZS5sb3c9dC1uKToobj1NYXRoLmZsb29yKC10LzY1NTM2KSo2NTUzNixlLmhpZ2g9LW4sZS5sb3c9dCtuKSxlfTtJaT17aGlnaDowLGxvdzowfTtpaS5mcm9tQ2FydGVzaWFuPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLG0oZSl8fChlPW5ldyBpaSk7bGV0IG49ZS5oaWdoLG89ZS5sb3c7cmV0dXJuIGlpLmVuY29kZSh0LngsSWkpLG4ueD1JaS5oaWdoLG8ueD1JaS5sb3csaWkuZW5jb2RlKHQueSxJaSksbi55PUlpLmhpZ2gsby55PUlpLmxvdyxpaS5lbmNvZGUodC56LElpKSxuLno9SWkuaGlnaCxvLno9SWkubG93LGV9O0doPW5ldyBpaTtpaS53cml0ZUVsZW1lbnRzPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImNhcnRlc2lhbkFycmF5IixlKSx5LnR5cGVPZi5udW1iZXIoImluZGV4IixuKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLG4sMCksaWkuZnJvbUNhcnRlc2lhbih0LEdoKTtsZXQgbz1HaC5oaWdoLHI9R2gubG93O2Vbbl09by54LGVbbisxXT1vLnksZVtuKzJdPW8ueixlW24rM109ci54LGVbbis0XT1yLnksZVtuKzVdPXIuen07UXM9aWl9KTt2YXIgbm8sTHQsWmU9JCgoKT0+e2Z0KCk7SHQoKTtLdCgpO1pzKCk7bm89e1VOU0lHTkVEX0JZVEU6RnQuVU5TSUdORURfQllURSxVTlNJR05FRF9TSE9SVDpGdC5VTlNJR05FRF9TSE9SVCxVTlNJR05FRF9JTlQ6RnQuVU5TSUdORURfSU5UfTtuby5nZXRTaXplSW5CeXRlcz1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBuby5VTlNJR05FRF9CWVRFOnJldHVybiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugbm8uVU5TSUdORURfU0hPUlQ6cmV0dXJuIFVpbnQxNkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugbm8uVU5TSUdORURfSU5UOnJldHVybiBVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVH10aHJvdyBuZXcgRCgiaW5kZXhEYXRhdHlwZSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIHZhbGlkIEluZGV4RGF0YXR5cGUgY29uc3RhbnQuIil9O25vLmZyb21TaXplSW5CeXRlcz1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAyOnJldHVybiBuby5VTlNJR05FRF9TSE9SVDtjYXNlIDQ6cmV0dXJuIG5vLlVOU0lHTkVEX0lOVDtjYXNlIDE6cmV0dXJuIG5vLlVOU0lHTkVEX0JZVEU7ZGVmYXVsdDp0aHJvdyBuZXcgRCgiU2l6ZSBpbiBieXRlcyBjYW5ub3QgYmUgbWFwcGVkIHRvIGFuIEluZGV4RGF0YXR5cGUiKX19O25vLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQpJiYodD09PW5vLlVOU0lHTkVEX0JZVEV8fHQ9PT1uby5VTlNJR05FRF9TSE9SVHx8dD09PW5vLlVOU0lHTkVEX0lOVCl9O25vLmNyZWF0ZVR5cGVkQXJyYXk9ZnVuY3Rpb24odCxlKXtpZighbSh0KSl0aHJvdyBuZXcgRCgibnVtYmVyT2ZWZXJ0aWNlcyBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdD49UC5TSVhUWV9GT1VSX0tJTE9CWVRFUz9uZXcgVWludDMyQXJyYXkoZSk6bmV3IFVpbnQxNkFycmF5KGUpfTtuby5jcmVhdGVUeXBlZEFycmF5RnJvbUFycmF5QnVmZmVyPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJudW1iZXJPZlZlcnRpY2VzIGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJzb3VyY2VBcnJheSBpcyByZXF1aXJlZC4iKTtpZighbShuKSl0aHJvdyBuZXcgRCgiYnl0ZU9mZnNldCBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdD49UC5TSVhUWV9GT1VSX0tJTE9CWVRFUz9uZXcgVWludDMyQXJyYXkoZSxuLG8pOm5ldyBVaW50MTZBcnJheShlLG4sbyl9O25vLmZyb21UeXBlZEFycmF5PWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuby5VTlNJR05FRF9CWVRFO2lmKHQgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gbm8uVU5TSUdORURfU0hPUlQ7aWYodCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KXJldHVybiBuby5VTlNJR05FRF9JTlQ7dGhyb3cgbmV3IEQoImFycmF5IG11c3QgYmUgYSBVaW50OEFycmF5LCBVaW50MTZBcnJheSwgb3IgVWludDMyQXJyYXkuIil9O0x0PU9iamVjdC5mcmVlemUobm8pfSk7ZnVuY3Rpb24gRmIodCxlLG4pe2xldCBvPXQrZTtyZXR1cm4gUC5zaWduKHQpIT09UC5zaWduKGUpJiZNYXRoLmFicyhvL01hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKSk8bj8wOm99dmFyIHpoLEFyLFVwPSQoKCk9PntIdCgpO0t0KCk7emg9e307emguY29tcHV0ZURpc2NyaW1pbmFudD1mdW5jdGlvbih0LGUsbil7aWYodHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBEKCJhIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYiBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgbiE9Im51bWJlciIpdGhyb3cgbmV3IEQoImMgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7cmV0dXJuIGUqZS00KnQqbn07emguY29tcHV0ZVJlYWxSb290cz1mdW5jdGlvbih0LGUsbil7aWYodHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBEKCJhIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYiBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgbiE9Im51bWJlciIpdGhyb3cgbmV3IEQoImMgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7bGV0IG87aWYodD09PTApcmV0dXJuIGU9PT0wP1tdOlstbi9lXTtpZihlPT09MCl7aWYobj09PTApcmV0dXJuWzAsMF07bGV0IHU9TWF0aC5hYnMobiksYz1NYXRoLmFicyh0KTtpZih1PGMmJnUvYzxQLkVQU0lMT04xNClyZXR1cm5bMCwwXTtpZih1PmMmJmMvdTxQLkVQU0lMT04xNClyZXR1cm5bXTtpZihvPS1uL3QsbzwwKXJldHVybltdO2xldCBsPU1hdGguc3FydChvKTtyZXR1cm5bLWwsbF19ZWxzZSBpZihuPT09MClyZXR1cm4gbz0tZS90LG88MD9bbywwXTpbMCxvXTtsZXQgcj1lKmUsaT00KnQqbixzPUZiKHIsLWksUC5FUFNJTE9OMTQpO2lmKHM8MClyZXR1cm5bXTtsZXQgZj0tLjUqRmIoZSxQLnNpZ24oZSkqTWF0aC5zcXJ0KHMpLFAuRVBTSUxPTjE0KTtyZXR1cm4gZT4wP1tmL3Qsbi9mXTpbbi9mLGYvdF19O0FyPXpofSk7ZnVuY3Rpb24gamgodCxlLG4sbyl7bGV0IHI9dCxpPWUvMyxzPW4vMyxmPW8sdT1yKnMsYz1pKmYsbD1pKmkscD1zKnMsZD1yKnMtbCxoPXIqZi1pKnMsXz1pKmYtcCxnPTQqZCpfLWgqaCxiLHc7aWYoZzwwKXtsZXQgUixudCxhdDtsKmM+PXUqcD8oUj1yLG50PWQsYXQ9LTIqaSpkK3IqaCk6KFI9ZixudD1fLGF0PS1mKmgrMipzKl8pO2xldCBfdD0tKGF0PDA/LTE6MSkqTWF0aC5hYnMoUikqTWF0aC5zcXJ0KC1nKTt3PS1hdCtfdDtsZXQgb3Q9dy8yLFB0PW90PDA/LU1hdGgucG93KC1vdCwxLzMpOk1hdGgucG93KG90LDEvMyksZ3Q9dz09PV90Py1QdDotbnQvUHQ7cmV0dXJuIGI9bnQ8PTA/UHQrZ3Q6LWF0LyhQdCpQdCtndCpndCtudCksbCpjPj11KnA/WyhiLWkpL3JdOlstZi8oYitzKV19bGV0IE89ZCxFPS0yKmkqZCtyKmgsVD1fLHg9LWYqaCsyKnMqXyxNPU1hdGguc3FydChnKSxOPU1hdGguc3FydCgzKS8yLEY9TWF0aC5hYnMoTWF0aC5hdGFuMihyKk0sLUUpLzMpO2I9MipNYXRoLnNxcnQoLU8pO2xldCBJPU1hdGguY29zKEYpO3c9YipJO2xldCB2PWIqKC1JLzItTipNYXRoLnNpbihGKSksQj13K3Y+MippP3ctaTp2LWksQT1yLFM9Qi9BO0Y9TWF0aC5hYnMoTWF0aC5hdGFuMihmKk0sLXgpLzMpLGI9MipNYXRoLnNxcnQoLVQpLEk9TWF0aC5jb3MoRiksdz1iKkksdj1iKigtSS8yLU4qTWF0aC5zaW4oRikpO2xldCBDPS1mLEw9dyt2PDIqcz93K3M6ditzLHo9Qy9MLGo9QSpMLGs9LUIqTC1BKkMscT1CKkMsVz0ocyprLWkqcSkvKC1pKmsrcypqKTtyZXR1cm4gUzw9Vz9TPD16P1c8PXo/W1MsVyx6XTpbUyx6LFddOlt6LFMsV106Uzw9ej9bVyxTLHpdOlc8PXo/W1cseixTXTpbeixXLFNdfXZhciBIaCxrcCxMYj0kKCgpPT57SHQoKTtVcCgpO0hoPXt9O0hoLmNvbXB1dGVEaXNjcmltaW5hbnQ9ZnVuY3Rpb24odCxlLG4sbyl7aWYodHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBEKCJhIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYiBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgbiE9Im51bWJlciIpdGhyb3cgbmV3IEQoImMgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG8hPSJudW1iZXIiKXRocm93IG5ldyBEKCJkIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2xldCByPXQqdCxpPWUqZSxzPW4qbixmPW8qbztyZXR1cm4gMTgqdCplKm4qbytpKnMtMjcqcipmLTQqKHQqcypuK2kqZSpvKX07SGguY29tcHV0ZVJlYWxSb290cz1mdW5jdGlvbih0LGUsbixvKXtpZih0eXBlb2YgdCE9Im51bWJlciIpdGhyb3cgbmV3IEQoImEgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIGUhPSJudW1iZXIiKXRocm93IG5ldyBEKCJiIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBuIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYyBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgbyE9Im51bWJlciIpdGhyb3cgbmV3IEQoImQgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7bGV0IHIsaTtpZih0PT09MClyZXR1cm4gQXIuY29tcHV0ZVJlYWxSb290cyhlLG4sbyk7aWYoZT09PTApe2lmKG49PT0wKXtpZihvPT09MClyZXR1cm5bMCwwLDBdO2k9LW8vdDtsZXQgcz1pPDA/LU1hdGgucG93KC1pLDEvMyk6TWF0aC5wb3coaSwxLzMpO3JldHVybltzLHMsc119ZWxzZSBpZihvPT09MClyZXR1cm4gcj1Bci5jb21wdXRlUmVhbFJvb3RzKHQsMCxuKSxyLkxlbmd0aD09PTA/WzBdOltyWzBdLDAsclsxXV07cmV0dXJuIGpoKHQsMCxuLG8pfWVsc2V7aWYobj09PTApcmV0dXJuIG89PT0wPyhpPS1lL3QsaTwwP1tpLDAsMF06WzAsMCxpXSk6amgodCxlLDAsbyk7aWYobz09PTApcmV0dXJuIHI9QXIuY29tcHV0ZVJlYWxSb290cyh0LGUsbiksci5sZW5ndGg9PT0wP1swXTpyWzFdPD0wP1tyWzBdLHJbMV0sMF06clswXT49MD9bMCxyWzBdLHJbMV1dOltyWzBdLDAsclsxXV19cmV0dXJuIGpoKHQsZSxuLG8pfTtrcD1IaH0pO2Z1bmN0aW9uIFVyKHQsZSxuLG8pe2xldCByPXQqdCxpPWUtMypyLzgscz1uLWUqdC8yK3IqdC84LGY9by1uKnQvNCtlKnIvMTYtMypyKnIvMjU2LHU9a3AuY29tcHV0ZVJlYWxSb290cygxLDIqaSxpKmktNCpmLC1zKnMpO2lmKHUubGVuZ3RoPjApe2xldCBjPS10LzQsbD11W3UubGVuZ3RoLTFdO2lmKE1hdGguYWJzKGwpPFAuRVBTSUxPTjE0KXtsZXQgcD1Bci5jb21wdXRlUmVhbFJvb3RzKDEsaSxmKTtpZihwLmxlbmd0aD09PTIpe2xldCBkPXBbMF0saD1wWzFdLF87aWYoZD49MCYmaD49MCl7bGV0IGc9TWF0aC5zcXJ0KGQpLGI9TWF0aC5zcXJ0KGgpO3JldHVybltjLWIsYy1nLGMrZyxjK2JdfWVsc2V7aWYoZD49MCYmaDwwKXJldHVybiBfPU1hdGguc3FydChkKSxbYy1fLGMrX107aWYoZDwwJiZoPj0wKXJldHVybiBfPU1hdGguc3FydChoKSxbYy1fLGMrX119fXJldHVybltdfWVsc2UgaWYobD4wKXtsZXQgcD1NYXRoLnNxcnQobCksZD0oaStsLXMvcCkvMixoPShpK2wrcy9wKS8yLF89QXIuY29tcHV0ZVJlYWxSb290cygxLHAsZCksZz1Bci5jb21wdXRlUmVhbFJvb3RzKDEsLXAsaCk7cmV0dXJuIF8ubGVuZ3RoIT09MD8oX1swXSs9YyxfWzFdKz1jLGcubGVuZ3RoIT09MD8oZ1swXSs9YyxnWzFdKz1jLF9bMV08PWdbMF0/W19bMF0sX1sxXSxnWzBdLGdbMV1dOmdbMV08PV9bMF0/W2dbMF0sZ1sxXSxfWzBdLF9bMV1dOl9bMF0+PWdbMF0mJl9bMV08PWdbMV0/W2dbMF0sX1swXSxfWzFdLGdbMV1dOmdbMF0+PV9bMF0mJmdbMV08PV9bMV0/W19bMF0sZ1swXSxnWzFdLF9bMV1dOl9bMF0+Z1swXSYmX1swXTxnWzFdP1tnWzBdLF9bMF0sZ1sxXSxfWzFdXTpbX1swXSxnWzBdLF9bMV0sZ1sxXV0pOl8pOmcubGVuZ3RoIT09MD8oZ1swXSs9YyxnWzFdKz1jLGcpOltdfX1yZXR1cm5bXX1mdW5jdGlvbiBUZih0LGUsbixvKXtsZXQgcj1uKm4saT1lKmUscz10KnQsZj0tMiplLHU9bip0K2ktNCpvLGM9cypvLW4qZSp0K3IsbD1rcC5jb21wdXRlUmVhbFJvb3RzKDEsZix1LGMpO2lmKGwubGVuZ3RoPjApe2xldCBwPWxbMF0sZD1lLXAsaD1kKmQsXz10LzIsZz1kLzIsYj1oLTQqbyx3PWgrNCpNYXRoLmFicyhvKSxPPXMtNCpwLEU9cys0Kk1hdGguYWJzKHApLFQseDtpZihwPDB8fGIqRTxPKncpe2xldCBBPU1hdGguc3FydChPKTtUPUEvMix4PUE9PT0wPzA6KHQqZy1uKS9BfWVsc2V7bGV0IEE9TWF0aC5zcXJ0KGIpO1Q9QT09PTA/MDoodCpnLW4pL0EseD1BLzJ9bGV0IE0sTjtfPT09MCYmVD09PTA/KE09MCxOPTApOlAuc2lnbihfKT09PVAuc2lnbihUKT8oTT1fK1QsTj1wL00pOihOPV8tVCxNPXAvTik7bGV0IEYsSTtnPT09MCYmeD09PTA/KEY9MCxJPTApOlAuc2lnbihnKT09PVAuc2lnbih4KT8oRj1nK3gsST1vL0YpOihJPWcteCxGPW8vSSk7bGV0IHY9QXIuY29tcHV0ZVJlYWxSb290cygxLE0sRiksQj1Bci5jb21wdXRlUmVhbFJvb3RzKDEsTixJKTtpZih2Lmxlbmd0aCE9PTApcmV0dXJuIEIubGVuZ3RoIT09MD92WzFdPD1CWzBdP1t2WzBdLHZbMV0sQlswXSxCWzFdXTpCWzFdPD12WzBdP1tCWzBdLEJbMV0sdlswXSx2WzFdXTp2WzBdPj1CWzBdJiZ2WzFdPD1CWzFdP1tCWzBdLHZbMF0sdlsxXSxCWzFdXTpCWzBdPj12WzBdJiZCWzFdPD12WzFdP1t2WzBdLEJbMF0sQlsxXSx2WzFdXTp2WzBdPkJbMF0mJnZbMF08QlsxXT9bQlswXSx2WzBdLEJbMV0sdlsxXV06W3ZbMF0sQlswXSx2WzFdLEJbMV1dOnY7aWYoQi5sZW5ndGghPT0wKXJldHVybiBCfXJldHVybltdfXZhciBxaCxEYixCYj0kKCgpPT57TGIoKTtIdCgpO0t0KCk7VXAoKTtxaD17fTtxaC5jb21wdXRlRGlzY3JpbWluYW50PWZ1bmN0aW9uKHQsZSxuLG8scil7aWYodHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBEKCJhIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYiBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgbiE9Im51bWJlciIpdGhyb3cgbmV3IEQoImMgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG8hPSJudW1iZXIiKXRocm93IG5ldyBEKCJkIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiByIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiZSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtsZXQgaT10KnQscz1pKnQsZj1lKmUsdT1mKmUsYz1uKm4sbD1jKm4scD1vKm8sZD1wKm8saD1yKnIsXz1oKnI7cmV0dXJuIGYqYypwLTQqdSpkLTQqdCpsKnArMTgqdCplKm4qZC0yNyppKnAqcCsyNTYqcypfK3IqKDE4KnUqbipvLTQqZipsKzE2KnQqYypjLTgwKnQqZSpjKm8tNip0KmYqcCsxNDQqaSpuKnApK2gqKDE0NCp0KmYqbi0yNypmKmYtMTI4KmkqYy0xOTIqaSplKm8pfTtxaC5jb21wdXRlUmVhbFJvb3RzPWZ1bmN0aW9uKHQsZSxuLG8scil7aWYodHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBEKCJhIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYiBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgbiE9Im51bWJlciIpdGhyb3cgbmV3IEQoImMgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG8hPSJudW1iZXIiKXRocm93IG5ldyBEKCJkIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiByIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiZSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZihNYXRoLmFicyh0KTxQLkVQU0lMT04xNSlyZXR1cm4ga3AuY29tcHV0ZVJlYWxSb290cyhlLG4sbyxyKTtsZXQgaT1lL3Qscz1uL3QsZj1vL3QsdT1yL3QsYz1pPDA/MTowO3N3aXRjaChjKz1zPDA/YysxOmMsYys9ZjwwP2MrMTpjLGMrPXU8MD9jKzE6YyxjKXtjYXNlIDA6cmV0dXJuIFVyKGkscyxmLHUpO2Nhc2UgMTpyZXR1cm4gVGYoaSxzLGYsdSk7Y2FzZSAyOnJldHVybiBUZihpLHMsZix1KTtjYXNlIDM6cmV0dXJuIFVyKGkscyxmLHUpO2Nhc2UgNDpyZXR1cm4gVXIoaSxzLGYsdSk7Y2FzZSA1OnJldHVybiBUZihpLHMsZix1KTtjYXNlIDY6cmV0dXJuIFVyKGkscyxmLHUpO2Nhc2UgNzpyZXR1cm4gVXIoaSxzLGYsdSk7Y2FzZSA4OnJldHVybiBUZihpLHMsZix1KTtjYXNlIDk6cmV0dXJuIFVyKGkscyxmLHUpO2Nhc2UgMTA6cmV0dXJuIFVyKGkscyxmLHUpO2Nhc2UgMTE6cmV0dXJuIFRmKGkscyxmLHUpO2Nhc2UgMTI6cmV0dXJuIFVyKGkscyxmLHUpO2Nhc2UgMTM6cmV0dXJuIFVyKGkscyxmLHUpO2Nhc2UgMTQ6cmV0dXJuIFVyKGkscyxmLHUpO2Nhc2UgMTU6cmV0dXJuIFVyKGkscyxmLHUpO2RlZmF1bHQ6cmV0dXJufX07RGI9cWh9KTtmdW5jdGlvbiBHcCh0LGUpe2U9YS5jbG9uZShlPz9hLlpFUk8pLGEuZXF1YWxzKGUsYS5aRVJPKXx8YS5ub3JtYWxpemUoZSxlKSx0aGlzLm9yaWdpbj1hLmNsb25lKHQ/P2EuWkVSTyksdGhpcy5kaXJlY3Rpb249ZX12YXIgSnMsVnA9JCgoKT0+e0R0KCk7V3QoKTtmdCgpO0dwLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYobSh0KSlyZXR1cm4gbShlKT8oZS5vcmlnaW49YS5jbG9uZSh0Lm9yaWdpbiksZS5kaXJlY3Rpb249YS5jbG9uZSh0LmRpcmVjdGlvbiksZSk6bmV3IEdwKHQub3JpZ2luLHQuZGlyZWN0aW9uKX07R3AuZ2V0UG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInJheSIsdCkseS50eXBlT2YubnVtYmVyKCJ0IixlKSxtKG4pfHwobj1uZXcgYSksbj1hLm11bHRpcGx5QnlTY2FsYXIodC5kaXJlY3Rpb24sZSxuKSxhLmFkZCh0Lm9yaWdpbixuLG4pfTtKcz1HcH0pO2Z1bmN0aW9uIFVQKHQsZSxuLG8pe2xldCByPWUqZS00KnQqbjtpZihyPDApcmV0dXJuO2lmKHI+MCl7bGV0IHM9MS8oMip0KSxmPU1hdGguc3FydChyKSx1PSgtZStmKSpzLGM9KC1lLWYpKnM7cmV0dXJuIHU8Yz8oby5yb290MD11LG8ucm9vdDE9Yyk6KG8ucm9vdDA9YyxvLnJvb3QxPXUpLG99bGV0IGk9LWUvKDIqdCk7aWYoaSE9PTApcmV0dXJuIG8ucm9vdDA9by5yb290MT1pLG99ZnVuY3Rpb24gS2IodCxlLG4pe20obil8fChuPW5ldyBKcik7bGV0IG89dC5vcmlnaW4scj10LmRpcmVjdGlvbixpPWUuY2VudGVyLHM9ZS5yYWRpdXMqZS5yYWRpdXMsZj1hLnN1YnRyYWN0KG8saSxxYiksdT1hLmRvdChyLHIpLGM9MiphLmRvdChyLGYpLGw9YS5tYWduaXR1ZGVTcXVhcmVkKGYpLXMscD1VUCh1LGMsbCxrUCk7aWYobShwKSlyZXR1cm4gbi5zdGFydD1wLnJvb3QwLG4uc3RvcD1wLnJvb3QxLG59ZnVuY3Rpb24gdGModCxlLG4pe2xldCBvPXQrZTtyZXR1cm4gUC5zaWduKHQpIT09UC5zaWduKGUpJiZNYXRoLmFicyhvL01hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKSk8bj8wOm99dmFyIGduLExQLERQLHFiLFViLGtiLEJQLGtQLEdQLFZQLHpQLEtoLEdiLFZiLHpwLGpQLEhQLHFQLEtQLFdQLFhQLHpiLGpiLEhiLFlQLCRQLFpQLHlvLGVjPSQoKCk9PntEdCgpO0llKCk7ZnQoKTtIdCgpO1dsKCk7S3QoKTtVbigpO1VwKCk7QmIoKTtWcCgpO2duPXt9O2duLnJheVBsYW5lPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgicmF5IGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJwbGFuZSBpcyByZXF1aXJlZC4iKTttKG4pfHwobj1uZXcgYSk7bGV0IG89dC5vcmlnaW4scj10LmRpcmVjdGlvbixpPWUubm9ybWFsLHM9YS5kb3QoaSxyKTtpZihNYXRoLmFicyhzKTxQLkVQU0lMT04xNSlyZXR1cm47bGV0IGY9KC1lLmRpc3RhbmNlLWEuZG90KGksbykpL3M7aWYoIShmPDApKXJldHVybiBuPWEubXVsdGlwbHlCeVNjYWxhcihyLGYsbiksYS5hZGQobyxuLG4pfTtMUD1uZXcgYSxEUD1uZXcgYSxxYj1uZXcgYSxVYj1uZXcgYSxrYj1uZXcgYTtnbi5yYXlUcmlhbmdsZVBhcmFtZXRyaWM9ZnVuY3Rpb24odCxlLG4sbyxyKXtpZighbSh0KSl0aHJvdyBuZXcgRCgicmF5IGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJwMCBpcyByZXF1aXJlZC4iKTtpZighbShuKSl0aHJvdyBuZXcgRCgicDEgaXMgcmVxdWlyZWQuIik7aWYoIW0obykpdGhyb3cgbmV3IEQoInAyIGlzIHJlcXVpcmVkLiIpO3I9cj8/ITE7bGV0IGk9dC5vcmlnaW4scz10LmRpcmVjdGlvbixmPWEuc3VidHJhY3QobixlLExQKSx1PWEuc3VidHJhY3QobyxlLERQKSxjPWEuY3Jvc3Mocyx1LHFiKSxsPWEuZG90KGYsYykscCxkLGgsXyxnO2lmKHIpe2lmKGw8UC5FUFNJTE9ONnx8KHA9YS5zdWJ0cmFjdChpLGUsVWIpLGg9YS5kb3QocCxjKSxoPDB8fGg+bCl8fChkPWEuY3Jvc3MocCxmLGtiKSxfPWEuZG90KHMsZCksXzwwfHxoK18+bCkpcmV0dXJuO2c9YS5kb3QodSxkKS9sfWVsc2V7aWYoTWF0aC5hYnMobCk8UC5FUFNJTE9ONilyZXR1cm47bGV0IGI9MS9sO2lmKHA9YS5zdWJ0cmFjdChpLGUsVWIpLGg9YS5kb3QocCxjKSpiLGg8MHx8aD4xfHwoZD1hLmNyb3NzKHAsZixrYiksXz1hLmRvdChzLGQpKmIsXzwwfHxoK18+MSkpcmV0dXJuO2c9YS5kb3QodSxkKSpifXJldHVybiBnfTtnbi5yYXlUcmlhbmdsZT1mdW5jdGlvbih0LGUsbixvLHIsaSl7bGV0IHM9Z24ucmF5VHJpYW5nbGVQYXJhbWV0cmljKHQsZSxuLG8scik7aWYoISghbShzKXx8czwwKSlyZXR1cm4gbShpKXx8KGk9bmV3IGEpLGEubXVsdGlwbHlCeVNjYWxhcih0LmRpcmVjdGlvbixzLGkpLGEuYWRkKHQub3JpZ2luLGksaSl9O0JQPW5ldyBKcztnbi5saW5lU2VnbWVudFRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJ2MCBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgidjEgaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoInAwIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG8pKXRocm93IG5ldyBEKCJwMSBpcyByZXF1aXJlZC4iKTtpZighbShyKSl0aHJvdyBuZXcgRCgicDIgaXMgcmVxdWlyZWQuIik7bGV0IGY9QlA7YS5jbG9uZSh0LGYub3JpZ2luKSxhLnN1YnRyYWN0KGUsdCxmLmRpcmVjdGlvbiksYS5ub3JtYWxpemUoZi5kaXJlY3Rpb24sZi5kaXJlY3Rpb24pO2xldCB1PWduLnJheVRyaWFuZ2xlUGFyYW1ldHJpYyhmLG4sbyxyLGkpO2lmKCEoIW0odSl8fHU8MHx8dT5hLmRpc3RhbmNlKHQsZSkpKXJldHVybiBtKHMpfHwocz1uZXcgYSksYS5tdWx0aXBseUJ5U2NhbGFyKGYuZGlyZWN0aW9uLHUscyksYS5hZGQoZi5vcmlnaW4scyxzKX07a1A9e3Jvb3QwOjAscm9vdDE6MH07Z24ucmF5U3BoZXJlPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgicmF5IGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJzcGhlcmUgaXMgcmVxdWlyZWQuIik7aWYobj1LYih0LGUsbiksISghbShuKXx8bi5zdG9wPDApKXJldHVybiBuLnN0YXJ0PU1hdGgubWF4KG4uc3RhcnQsMCksbn07R1A9bmV3IEpzO2duLmxpbmVTZWdtZW50U3BoZXJlPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJwMCBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgicDEgaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoInNwaGVyZSBpcyByZXF1aXJlZC4iKTtsZXQgcj1HUDthLmNsb25lKHQsci5vcmlnaW4pO2xldCBpPWEuc3VidHJhY3QoZSx0LHIuZGlyZWN0aW9uKSxzPWEubWFnbml0dWRlKGkpO2lmKGEubm9ybWFsaXplKGksaSksbz1LYihyLG4sbyksISghbShvKXx8by5zdG9wPDB8fG8uc3RhcnQ+cykpcmV0dXJuIG8uc3RhcnQ9TWF0aC5tYXgoby5zdGFydCwwKSxvLnN0b3A9TWF0aC5taW4oby5zdG9wLHMpLG99O1ZQPW5ldyBhLHpQPW5ldyBhO2duLnJheUVsbGlwc29pZD1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJyYXkgaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoImVsbGlwc29pZCBpcyByZXF1aXJlZC4iKTtsZXQgbj1lLm9uZU92ZXJSYWRpaSxvPWEubXVsdGlwbHlDb21wb25lbnRzKG4sdC5vcmlnaW4sVlApLHI9YS5tdWx0aXBseUNvbXBvbmVudHMobix0LmRpcmVjdGlvbix6UCksaT1hLm1hZ25pdHVkZVNxdWFyZWQobykscz1hLmRvdChvLHIpLGYsdSxjLGwscDtpZihpPjEpe2lmKHM+PTApcmV0dXJuO2xldCBkPXMqcztpZihmPWktMSx1PWEubWFnbml0dWRlU3F1YXJlZChyKSxjPXUqZixkPGMpcmV0dXJuO2lmKGQ+Yyl7bD1zKnMtYyxwPS1zK01hdGguc3FydChsKTtsZXQgXz1wL3UsZz1mL3A7cmV0dXJuIF88Zz9uZXcgSnIoXyxnKTp7c3RhcnQ6ZyxzdG9wOl99fWxldCBoPU1hdGguc3FydChmL3UpO3JldHVybiBuZXcgSnIoaCxoKX1lbHNlIGlmKGk8MSlyZXR1cm4gZj1pLTEsdT1hLm1hZ25pdHVkZVNxdWFyZWQociksYz11KmYsbD1zKnMtYyxwPS1zK01hdGguc3FydChsKSxuZXcgSnIoMCxwL3UpO2lmKHM8MClyZXR1cm4gdT1hLm1hZ25pdHVkZVNxdWFyZWQociksbmV3IEpyKDAsLXMvdSl9O2duLnF1YWRyYXRpY1ZlY3RvckV4cHJlc3Npb249ZnVuY3Rpb24odCxlLG4sbyxyKXtsZXQgaT1vKm8scz1yKnIsZj0odFtaLkNPTFVNTjFST1cxXS10W1ouQ09MVU1OMlJPVzJdKSpzLHU9cioobyp0Yyh0W1ouQ09MVU1OMVJPVzBdLHRbWi5DT0xVTU4wUk9XMV0sUC5FUFNJTE9OMTUpK2UueSksYz10W1ouQ09MVU1OMFJPVzBdKmkrdFtaLkNPTFVNTjJST1cyXSpzK28qZS54K24sbD1zKnRjKHRbWi5DT0xVTU4yUk9XMV0sdFtaLkNPTFVNTjFST1cyXSxQLkVQU0lMT04xNSkscD1yKihvKnRjKHRbWi5DT0xVTU4yUk9XMF0sdFtaLkNPTFVNTjBST1cyXSkrZS56KSxkLGg9W107aWYocD09PTAmJmw9PT0wKXtpZihkPUFyLmNvbXB1dGVSZWFsUm9vdHMoZix1LGMpLGQubGVuZ3RoPT09MClyZXR1cm4gaDtsZXQgRj1kWzBdLEk9TWF0aC5zcXJ0KE1hdGgubWF4KDEtRipGLDApKTtpZihoLnB1c2gobmV3IGEobyxyKkYsciotSSkpLGgucHVzaChuZXcgYShvLHIqRixyKkkpKSxkLmxlbmd0aD09PTIpe2xldCB2PWRbMV0sQj1NYXRoLnNxcnQoTWF0aC5tYXgoMS12KnYsMCkpO2gucHVzaChuZXcgYShvLHIqdixyKi1CKSksaC5wdXNoKG5ldyBhKG8scip2LHIqQikpfXJldHVybiBofWxldCBfPXAqcCxnPWwqbCxiPWYqZix3PXAqbCxPPWIrZyxFPTIqKHUqZit3KSxUPTIqYypmK3UqdS1nK18seD0yKihjKnUtdyksTT1jKmMtXztpZihPPT09MCYmRT09PTAmJlQ9PT0wJiZ4PT09MClyZXR1cm4gaDtkPURiLmNvbXB1dGVSZWFsUm9vdHMoTyxFLFQseCxNKTtsZXQgTj1kLmxlbmd0aDtpZihOPT09MClyZXR1cm4gaDtmb3IobGV0IEY9MDtGPE47KytGKXtsZXQgST1kW0ZdLHY9SSpJLEI9TWF0aC5tYXgoMS12LDApLEE9TWF0aC5zcXJ0KEIpLFM7UC5zaWduKGYpPT09UC5zaWduKGMpP1M9dGMoZip2K2MsdSpJLFAuRVBTSUxPTjEyKTpQLnNpZ24oYyk9PT1QLnNpZ24odSpJKT9TPXRjKGYqdix1KkkrYyxQLkVQU0lMT04xMik6Uz10YyhmKnYrdSpJLGMsUC5FUFNJTE9OMTIpO2xldCBDPXRjKGwqSSxwLFAuRVBTSUxPTjE1KSxMPVMqQztMPDA/aC5wdXNoKG5ldyBhKG8scipJLHIqQSkpOkw+MD9oLnB1c2gobmV3IGEobyxyKkksciotQSkpOkEhPT0wPyhoLnB1c2gobmV3IGEobyxyKkksciotQSkpLGgucHVzaChuZXcgYShvLHIqSSxyKkEpKSwrK0YpOmgucHVzaChuZXcgYShvLHIqSSxyKkEpKX1yZXR1cm4gaH07S2g9bmV3IGEsR2I9bmV3IGEsVmI9bmV3IGEsenA9bmV3IGEsalA9bmV3IGEsSFA9bmV3IFoscVA9bmV3IFosS1A9bmV3IFosV1A9bmV3IFosWFA9bmV3IFosemI9bmV3IFosamI9bmV3IFosSGI9bmV3IGEsWVA9bmV3IGEsJFA9bmV3IGN0O2duLmdyYXppbmdBbHRpdHVkZUxvY2F0aW9uPWZ1bmN0aW9uKHQsZSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoInJheSBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgiZWxsaXBzb2lkIGlzIHJlcXVpcmVkLiIpO2xldCBuPXQub3JpZ2luLG89dC5kaXJlY3Rpb247aWYoIWEuZXF1YWxzKG4sYS5aRVJPKSl7bGV0IE09ZS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobixLaCk7aWYoYS5kb3QobyxNKT49MClyZXR1cm4gbn1sZXQgcj1tKHRoaXMucmF5RWxsaXBzb2lkKHQsZSkpLGk9ZS50cmFuc2Zvcm1Qb3NpdGlvblRvU2NhbGVkU3BhY2UobyxLaCkscz1hLm5vcm1hbGl6ZShpLGkpLGY9YS5tb3N0T3J0aG9nb25hbEF4aXMoaSx6cCksdT1hLm5vcm1hbGl6ZShhLmNyb3NzKGYscyxHYiksR2IpLGM9YS5ub3JtYWxpemUoYS5jcm9zcyhzLHUsVmIpLFZiKSxsPUhQO2xbMF09cy54LGxbMV09cy55LGxbMl09cy56LGxbM109dS54LGxbNF09dS55LGxbNV09dS56LGxbNl09Yy54LGxbN109Yy55LGxbOF09Yy56O2xldCBwPVoudHJhbnNwb3NlKGwscVApLGQ9Wi5mcm9tU2NhbGUoZS5yYWRpaSxLUCksaD1aLmZyb21TY2FsZShlLm9uZU92ZXJSYWRpaSxXUCksXz1YUDtfWzBdPTAsX1sxXT0tby56LF9bMl09by55LF9bM109by56LF9bNF09MCxfWzVdPS1vLngsX1s2XT0tby55LF9bN109by54LF9bOF09MDtsZXQgZz1aLm11bHRpcGx5KFoubXVsdGlwbHkocCxoLHpiKSxfLHpiKSxiPVoubXVsdGlwbHkoWi5tdWx0aXBseShnLGQsamIpLGwsamIpLHc9Wi5tdWx0aXBseUJ5VmVjdG9yKGcsbixqUCksTz1nbi5xdWFkcmF0aWNWZWN0b3JFeHByZXNzaW9uKGIsYS5uZWdhdGUodyxLaCksMCwwLDEpLEUsVCx4PU8ubGVuZ3RoO2lmKHg+MCl7bGV0IE09YS5jbG9uZShhLlpFUk8sWVApLE49TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2ZvcihsZXQgST0wO0k8eDsrK0kpe0U9Wi5tdWx0aXBseUJ5VmVjdG9yKGQsWi5tdWx0aXBseUJ5VmVjdG9yKGwsT1tJXSxIYiksSGIpO2xldCB2PWEubm9ybWFsaXplKGEuc3VidHJhY3QoRSxuLHpwKSx6cCksQj1hLmRvdCh2LG8pO0I+TiYmKE49QixNPWEuY2xvbmUoRSxNKSl9bGV0IEY9ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhNLCRQKTtyZXR1cm4gTj1QLmNsYW1wKE4sMCwxKSxUPWEubWFnbml0dWRlKGEuc3VidHJhY3QoTSxuLHpwKSkqTWF0aC5zcXJ0KDEtTipOKSxUPXI/LVQ6VCxGLmhlaWdodD1ULGUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oRixuZXcgYSl9fTtaUD1uZXcgYTtnbi5saW5lU2VnbWVudFBsYW5lPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJlbmRQb2ludDAgaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoImVuZFBvaW50MSBpcyByZXF1aXJlZC4iKTtpZighbShuKSl0aHJvdyBuZXcgRCgicGxhbmUgaXMgcmVxdWlyZWQuIik7bShvKXx8KG89bmV3IGEpO2xldCByPWEuc3VidHJhY3QoZSx0LFpQKSxpPW4ubm9ybWFsLHM9YS5kb3QoaSxyKTtpZihNYXRoLmFicyhzKTxQLkVQU0lMT042KXJldHVybjtsZXQgZj1hLmRvdChpLHQpLHU9LShuLmRpc3RhbmNlK2YpL3M7aWYoISh1PDB8fHU+MSkpcmV0dXJuIGEubXVsdGlwbHlCeVNjYWxhcihyLHUsbyksYS5hZGQodCxvLG8pLG99O2duLnRyaWFuZ2xlUGxhbmVJbnRlcnNlY3Rpb249ZnVuY3Rpb24odCxlLG4sbyl7aWYoIW0odCl8fCFtKGUpfHwhbShuKXx8IW0obykpdGhyb3cgbmV3IEQoInAwLCBwMSwgcDIsIGFuZCBwbGFuZSBhcmUgcmVxdWlyZWQuIik7bGV0IHI9by5ub3JtYWwsaT1vLmRpc3RhbmNlLHM9YS5kb3Qocix0KStpPDAsZj1hLmRvdChyLGUpK2k8MCx1PWEuZG90KHIsbikraTwwLGM9MDtjKz1zPzE6MCxjKz1mPzE6MCxjKz11PzE6MDtsZXQgbCxwO2lmKChjPT09MXx8Yz09PTIpJiYobD1uZXcgYSxwPW5ldyBhKSxjPT09MSl7aWYocylyZXR1cm4gZ24ubGluZVNlZ21lbnRQbGFuZSh0LGUsbyxsKSxnbi5saW5lU2VnbWVudFBsYW5lKHQsbixvLHApLHtwb3NpdGlvbnM6W3QsZSxuLGwscF0saW5kaWNlczpbMCwzLDQsMSwyLDQsMSw0LDNdfTtpZihmKXJldHVybiBnbi5saW5lU2VnbWVudFBsYW5lKGUsbixvLGwpLGduLmxpbmVTZWdtZW50UGxhbmUoZSx0LG8scCkse3Bvc2l0aW9uczpbdCxlLG4sbCxwXSxpbmRpY2VzOlsxLDMsNCwyLDAsNCwyLDQsM119O2lmKHUpcmV0dXJuIGduLmxpbmVTZWdtZW50UGxhbmUobix0LG8sbCksZ24ubGluZVNlZ21lbnRQbGFuZShuLGUsbyxwKSx7cG9zaXRpb25zOlt0LGUsbixsLHBdLGluZGljZXM6WzIsMyw0LDAsMSw0LDAsNCwzXX19ZWxzZSBpZihjPT09MilpZihzKWlmKGYpe2lmKCF1KXJldHVybiBnbi5saW5lU2VnbWVudFBsYW5lKHQsbixvLGwpLGduLmxpbmVTZWdtZW50UGxhbmUoZSxuLG8scCkse3Bvc2l0aW9uczpbdCxlLG4sbCxwXSxpbmRpY2VzOlswLDEsNCwwLDQsMywyLDMsNF19fWVsc2UgcmV0dXJuIGduLmxpbmVTZWdtZW50UGxhbmUobixlLG8sbCksZ24ubGluZVNlZ21lbnRQbGFuZSh0LGUsbyxwKSx7cG9zaXRpb25zOlt0LGUsbixsLHBdLGluZGljZXM6WzIsMCw0LDIsNCwzLDEsMyw0XX07ZWxzZSByZXR1cm4gZ24ubGluZVNlZ21lbnRQbGFuZShlLHQsbyxsKSxnbi5saW5lU2VnbWVudFBsYW5lKG4sdCxvLHApLHtwb3NpdGlvbnM6W3QsZSxuLGwscF0saW5kaWNlczpbMSwyLDQsMSw0LDMsMCwzLDRdfX07eW89Z259KTtmdW5jdGlvbiBvbyh0LGUpe2lmKHkudHlwZU9mLm9iamVjdCgibm9ybWFsIix0KSwhUC5lcXVhbHNFcHNpbG9uKGEubWFnbml0dWRlKHQpLDEsUC5FUFNJTE9ONikpdGhyb3cgbmV3IEQoIm5vcm1hbCBtdXN0IGJlIG5vcm1hbGl6ZWQuIik7eS50eXBlT2YubnVtYmVyKCJkaXN0YW5jZSIsZSksdGhpcy5ub3JtYWw9YS5jbG9uZSh0KSx0aGlzLmRpc3RhbmNlPWV9dmFyIFFQLEpQLHRNLGVNLG5NLG9uLHVzPSQoKCk9PntEdCgpO19yKCk7V3QoKTtmdCgpO0h0KCk7S3QoKTtrbigpO29vLmZyb21Qb2ludE5vcm1hbD1mdW5jdGlvbih0LGUsbil7aWYoeS50eXBlT2Yub2JqZWN0KCJwb2ludCIsdCkseS50eXBlT2Yub2JqZWN0KCJub3JtYWwiLGUpLCFQLmVxdWFsc0Vwc2lsb24oYS5tYWduaXR1ZGUoZSksMSxQLkVQU0lMT042KSl0aHJvdyBuZXcgRCgibm9ybWFsIG11c3QgYmUgbm9ybWFsaXplZC4iKTtsZXQgbz0tYS5kb3QoZSx0KTtyZXR1cm4gbShuKT8oYS5jbG9uZShlLG4ubm9ybWFsKSxuLmRpc3RhbmNlPW8sbik6bmV3IG9vKGUsbyl9O1FQPW5ldyBhO29vLmZyb21DYXJ0ZXNpYW40PWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjb2VmZmljaWVudHMiLHQpO2xldCBuPWEuZnJvbUNhcnRlc2lhbjQodCxRUCksbz10Lnc7aWYoIVAuZXF1YWxzRXBzaWxvbihhLm1hZ25pdHVkZShuKSwxLFAuRVBTSUxPTjYpKXRocm93IG5ldyBEKCJub3JtYWwgbXVzdCBiZSBub3JtYWxpemVkLiIpO3JldHVybiBtKGUpPyhhLmNsb25lKG4sZS5ub3JtYWwpLGUuZGlzdGFuY2U9byxlKTpuZXcgb28obixvKX07b28uZ2V0UG9pbnREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInBsYW5lIix0KSx5LnR5cGVPZi5vYmplY3QoInBvaW50IixlKSxhLmRvdCh0Lm5vcm1hbCxlKSt0LmRpc3RhbmNlfTtKUD1uZXcgYTtvby5wcm9qZWN0UG9pbnRPbnRvUGxhbmU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicGxhbmUiLHQpLHkudHlwZU9mLm9iamVjdCgicG9pbnQiLGUpLG0obil8fChuPW5ldyBhKTtsZXQgbz1vby5nZXRQb2ludERpc3RhbmNlKHQsZSkscj1hLm11bHRpcGx5QnlTY2FsYXIodC5ub3JtYWwsbyxKUCk7cmV0dXJuIGEuc3VidHJhY3QoZSxyLG4pfTt0TT1uZXcgc3QsZU09bmV3IG1lLG5NPW5ldyBhO29vLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJwbGFuZSIsdCkseS50eXBlT2Yub2JqZWN0KCJ0cmFuc2Zvcm0iLGUpO2xldCBvPXQubm9ybWFsLHI9dC5kaXN0YW5jZSxpPXN0LmludmVyc2VUcmFuc3Bvc2UoZSx0TSkscz1tZS5mcm9tRWxlbWVudHMoby54LG8ueSxvLnoscixlTSk7cz1zdC5tdWx0aXBseUJ5VmVjdG9yKGkscyxzKTtsZXQgZj1hLmZyb21DYXJ0ZXNpYW40KHMsbk0pO3JldHVybiBzPW1lLmRpdmlkZUJ5U2NhbGFyKHMsYS5tYWduaXR1ZGUoZikscyksb28uZnJvbUNhcnRlc2lhbjQocyxuKX07b28uY2xvbmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJwbGFuZSIsdCksbShlKT8oYS5jbG9uZSh0Lm5vcm1hbCxlLm5vcm1hbCksZS5kaXN0YW5jZT10LmRpc3RhbmNlLGUpOm5ldyBvbyh0Lm5vcm1hbCx0LmRpc3RhbmNlKX07b28uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdC5kaXN0YW5jZT09PWUuZGlzdGFuY2UmJmEuZXF1YWxzKHQubm9ybWFsLGUubm9ybWFsKX07b28uT1JJR0lOX1hZX1BMQU5FPU9iamVjdC5mcmVlemUobmV3IG9vKGEuVU5JVF9aLDApKTtvby5PUklHSU5fWVpfUExBTkU9T2JqZWN0LmZyZWV6ZShuZXcgb28oYS5VTklUX1gsMCkpO29vLk9SSUdJTl9aWF9QTEFORT1PYmplY3QuZnJlZXplKG5ldyBvbyhhLlVOSVRfWSwwKSk7b249b299KTt2YXIgV2gsV2IsWGI9JCgoKT0+e3llKCk7ZnQoKTtIdCgpO1doPXt9O1doLmNhbGN1bGF0ZUFDTVI9ZnVuY3Rpb24odCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5pbmRpY2VzLG49dC5tYXhpbXVtSW5kZXgsbz10LmNhY2hlU2l6ZT8/MjQ7aWYoIW0oZSkpdGhyb3cgbmV3IEQoImluZGljZXMgaXMgcmVxdWlyZWQuIik7bGV0IHI9ZS5sZW5ndGg7aWYocjwzfHxyJTMhPT0wKXRocm93IG5ldyBEKCJpbmRpY2VzIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhyZWUuIik7aWYobjw9MCl0aHJvdyBuZXcgRCgibWF4aW11bUluZGV4IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYobzwzKXRocm93IG5ldyBEKCJjYWNoZVNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gdHdvLiIpO2lmKCFtKG4pKXtuPTA7bGV0IGY9MCx1PWVbZl07Zm9yKDtmPHI7KXU+biYmKG49dSksKytmLHU9ZVtmXX1sZXQgaT1bXTtmb3IobGV0IGY9MDtmPG4rMTtmKyspaVtmXT0wO2xldCBzPW8rMTtmb3IobGV0IGY9MDtmPHI7KytmKXMtaVtlW2ZdXT5vJiYoaVtlW2ZdXT1zLCsrcyk7cmV0dXJuKHMtbysxKS8oci8zKX07V2gudGlwc2lmeT1mdW5jdGlvbih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LmluZGljZXMsbj10Lm1heGltdW1JbmRleCxvPXQuY2FjaGVTaXplPz8yNCxyO2Z1bmN0aW9uIGkoQixBLFMsQyl7Zm9yKDtBLmxlbmd0aD49MTspe2xldCBMPUFbQS5sZW5ndGgtMV07aWYoQS5zcGxpY2UoQS5sZW5ndGgtMSwxKSxCW0xdLm51bUxpdmVUcmlhbmdsZXM+MClyZXR1cm4gTH1mb3IoO3I8Qzspe2lmKEJbcl0ubnVtTGl2ZVRyaWFuZ2xlcz4wKXJldHVybisrcixyLTE7KytyfXJldHVybi0xfWZ1bmN0aW9uIHMoQixBLFMsQyxMLHosail7bGV0IGs9LTEscSxXPS0xLFI9MDtmb3IoO1I8Uy5sZW5ndGg7KXtsZXQgbnQ9U1tSXTtDW250XS5udW1MaXZlVHJpYW5nbGVzJiYocT0wLEwtQ1tudF0udGltZVN0YW1wKzIqQ1tudF0ubnVtTGl2ZVRyaWFuZ2xlczw9QSYmKHE9TC1DW250XS50aW1lU3RhbXApLChxPld8fFc9PT0tMSkmJihXPXEsaz1udCkpLCsrUn1yZXR1cm4gaz09PS0xP2koQyx6LEIsaik6a31pZighbShlKSl0aHJvdyBuZXcgRCgiaW5kaWNlcyBpcyByZXF1aXJlZC4iKTtsZXQgZj1lLmxlbmd0aDtpZihmPDN8fGYlMyE9PTApdGhyb3cgbmV3IEQoImluZGljZXMgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aHJlZS4iKTtpZihuPD0wKXRocm93IG5ldyBEKCJtYXhpbXVtSW5kZXggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtpZihvPDMpdGhyb3cgbmV3IEQoImNhY2hlU2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0d28uIik7bGV0IHU9MCxjPTAsbD1lW2NdLHA9ZjtpZihtKG4pKXU9bisxO2Vsc2V7Zm9yKDtjPHA7KWw+dSYmKHU9bCksKytjLGw9ZVtjXTtpZih1PT09LTEpcmV0dXJuIDA7Kyt1fWxldCBkPVtdLGg7Zm9yKGg9MDtoPHU7aCsrKWRbaF09e251bUxpdmVUcmlhbmdsZXM6MCx0aW1lU3RhbXA6MCx2ZXJ0ZXhUcmlhbmdsZXM6W119O2M9MDtsZXQgXz0wO2Zvcig7YzxwOylkW2VbY11dLnZlcnRleFRyaWFuZ2xlcy5wdXNoKF8pLCsrZFtlW2NdXS5udW1MaXZlVHJpYW5nbGVzLGRbZVtjKzFdXS52ZXJ0ZXhUcmlhbmdsZXMucHVzaChfKSwrK2RbZVtjKzFdXS5udW1MaXZlVHJpYW5nbGVzLGRbZVtjKzJdXS52ZXJ0ZXhUcmlhbmdsZXMucHVzaChfKSwrK2RbZVtjKzJdXS5udW1MaXZlVHJpYW5nbGVzLCsrXyxjKz0zO2xldCBnPTAsYj1vKzE7cj0xO2xldCB3PVtdLE89W10sRSxULHg9MCxNPVtdLE49Zi8zLEY9W107Zm9yKGg9MDtoPE47aCsrKUZbaF09ITE7bGV0IEksdjtmb3IoO2chPT0tMTspe3c9W10sVD1kW2ddLHY9VC52ZXJ0ZXhUcmlhbmdsZXMubGVuZ3RoO2ZvcihsZXQgQj0wO0I8djsrK0IpaWYoXz1ULnZlcnRleFRyaWFuZ2xlc1tCXSwhRltfXSl7RltfXT0hMCxjPV8rXytfO2ZvcihsZXQgQT0wO0E8MzsrK0EpST1lW2NdLHcucHVzaChJKSxPLnB1c2goSSksTVt4XT1JLCsreCxFPWRbSV0sLS1FLm51bUxpdmVUcmlhbmdsZXMsYi1FLnRpbWVTdGFtcD5vJiYoRS50aW1lU3RhbXA9YiwrK2IpLCsrY31nPXMoZSxvLHcsZCxiLE8sdSl9cmV0dXJuIE19O1diPVdofSk7ZnVuY3Rpb24gWXAodCxlLG4sbyxyKXt0W2UrK109bix0W2UrK109byx0W2UrK109byx0W2UrK109cix0W2UrK109cix0W2VdPW59ZnVuY3Rpb24gb00odCl7bGV0IGU9dC5sZW5ndGgsbj1lLzMqNixvPUx0LmNyZWF0ZVR5cGVkQXJyYXkoZSxuKSxyPTA7Zm9yKGxldCBpPTA7aTxlO2krPTMscis9NilZcChvLHIsdFtpXSx0W2krMV0sdFtpKzJdKTtyZXR1cm4gb31mdW5jdGlvbiByTSh0KXtsZXQgZT10Lmxlbmd0aDtpZihlPj0zKXtsZXQgbj0oZS0yKSo2LG89THQuY3JlYXRlVHlwZWRBcnJheShlLG4pO1lwKG8sMCx0WzBdLHRbMV0sdFsyXSk7bGV0IHI9Njtmb3IobGV0IGk9MztpPGU7KytpLHIrPTYpWXAobyxyLHRbaS0xXSx0W2ldLHRbaS0yXSk7cmV0dXJuIG99cmV0dXJuIG5ldyBVaW50MTZBcnJheX1mdW5jdGlvbiBpTSh0KXtpZih0Lmxlbmd0aD4wKXtsZXQgZT10Lmxlbmd0aC0xLG49KGUtMSkqNixvPUx0LmNyZWF0ZVR5cGVkQXJyYXkoZSxuKSxyPXRbMF0saT0wO2ZvcihsZXQgcz0xO3M8ZTsrK3MsaSs9NilZcChvLGkscix0W3NdLHRbcysxXSk7cmV0dXJuIG99cmV0dXJuIG5ldyBVaW50MTZBcnJheX1mdW5jdGlvbiBZYih0KXtsZXQgZT17fTtmb3IobGV0IG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pJiZtKHRbbl0pJiZtKHRbbl0udmFsdWVzKSl7bGV0IG89dFtuXTtlW25dPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6by5jb21wb25lbnREYXRhdHlwZSxjb21wb25lbnRzUGVyQXR0cmlidXRlOm8uY29tcG9uZW50c1BlckF0dHJpYnV0ZSxub3JtYWxpemU6by5ub3JtYWxpemUsdmFsdWVzOltdfSl9cmV0dXJuIGV9ZnVuY3Rpb24gc00odCxlLG4pe2ZvcihsZXQgbyBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobykmJm0oZVtvXSkmJm0oZVtvXS52YWx1ZXMpKXtsZXQgcj1lW29dO2ZvcihsZXQgaT0wO2k8ci5jb21wb25lbnRzUGVyQXR0cmlidXRlOysraSl0W29dLnZhbHVlcy5wdXNoKHIudmFsdWVzW24qci5jb21wb25lbnRzUGVyQXR0cmlidXRlK2ldKX19ZnVuY3Rpb24gWWgodCxlKXtpZihtKGUpKXtsZXQgbj1lLnZhbHVlcyxvPW4ubGVuZ3RoO2ZvcihsZXQgcj0wO3I8bztyKz0zKWEudW5wYWNrKG4scixHciksc3QubXVsdGlwbHlCeVBvaW50KHQsR3IsR3IpLGEucGFjayhHcixuLHIpfX1mdW5jdGlvbiAkaCh0LGUpe2lmKG0oZSkpe2xldCBuPWUudmFsdWVzLG89bi5sZW5ndGg7Zm9yKGxldCByPTA7cjxvO3IrPTMpYS51bnBhY2sobixyLEdyKSxaLm11bHRpcGx5QnlWZWN0b3IodCxHcixHciksR3I9YS5ub3JtYWxpemUoR3IsR3IpLGEucGFjayhHcixuLHIpfX1mdW5jdGlvbiBhTSh0LGUpe2xldCBuPXQubGVuZ3RoLG89e30scj10WzBdW2VdLmF0dHJpYnV0ZXMsaTtmb3IoaSBpbiByKWlmKHIuaGFzT3duUHJvcGVydHkoaSkmJm0ocltpXSkmJm0ocltpXS52YWx1ZXMpKXtsZXQgcz1yW2ldLGY9cy52YWx1ZXMubGVuZ3RoLHU9ITA7Zm9yKGxldCBjPTE7YzxuOysrYyl7bGV0IGw9dFtjXVtlXS5hdHRyaWJ1dGVzW2ldO2lmKCFtKGwpfHxzLmNvbXBvbmVudERhdGF0eXBlIT09bC5jb21wb25lbnREYXRhdHlwZXx8cy5jb21wb25lbnRzUGVyQXR0cmlidXRlIT09bC5jb21wb25lbnRzUGVyQXR0cmlidXRlfHxzLm5vcm1hbGl6ZSE9PWwubm9ybWFsaXplKXt1PSExO2JyZWFrfWYrPWwudmFsdWVzLmxlbmd0aH11JiYob1tpXT1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOnMuY29tcG9uZW50RGF0YXR5cGUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTpzLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsbm9ybWFsaXplOnMubm9ybWFsaXplLHZhbHVlczpldC5jcmVhdGVUeXBlZEFycmF5KHMuY29tcG9uZW50RGF0YXR5cGUsZil9KSl9cmV0dXJuIG99ZnVuY3Rpb24gWmgodCxlKXtsZXQgbj10Lmxlbmd0aCxvLHIsaSxzLGY9dFswXS5tb2RlbE1hdHJpeCx1PW0odFswXVtlXS5pbmRpY2VzKSxjPXRbMF1bZV0ucHJpbWl0aXZlVHlwZTtmb3Iocj0xO3I8bjsrK3Ipe2lmKCFzdC5lcXVhbHModFtyXS5tb2RlbE1hdHJpeCxmKSl0aHJvdyBuZXcgRCgiQWxsIGluc3RhbmNlcyBtdXN0IGhhdmUgdGhlIHNhbWUgbW9kZWxNYXRyaXguIik7aWYobSh0W3JdW2VdLmluZGljZXMpIT09dSl0aHJvdyBuZXcgRCgiQWxsIGluc3RhbmNlIGdlb21ldHJpZXMgbXVzdCBoYXZlIGFuIGluZGljZXMgb3Igbm90IGhhdmUgb25lLiIpO2lmKHRbcl1bZV0ucHJpbWl0aXZlVHlwZSE9PWMpdGhyb3cgbmV3IEQoIkFsbCBpbnN0YW5jZSBnZW9tZXRyaWVzIG11c3QgaGF2ZSB0aGUgc2FtZSBwcmltaXRpdmVUeXBlLiIpfWxldCBsPWFNKHQsZSkscCxkLGg7Zm9yKG8gaW4gbClpZihsLmhhc093blByb3BlcnR5KG8pKWZvcihwPWxbb10udmFsdWVzLHM9MCxyPTA7cjxuOysrcilmb3IoZD10W3JdW2VdLmF0dHJpYnV0ZXNbb10udmFsdWVzLGg9ZC5sZW5ndGgsaT0wO2k8aDsrK2kpcFtzKytdPWRbaV07bGV0IF87aWYodSl7bGV0IE89MDtmb3Iocj0wO3I8bjsrK3IpTys9dFtyXVtlXS5pbmRpY2VzLmxlbmd0aDtsZXQgRT1VdC5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyhuZXcgVXQoe2F0dHJpYnV0ZXM6bCxwcmltaXRpdmVUeXBlOkJ0LlBPSU5UU30pKSxUPUx0LmNyZWF0ZVR5cGVkQXJyYXkoRSxPKSx4PTAsTT0wO2ZvcihyPTA7cjxuOysrcil7bGV0IE49dFtyXVtlXS5pbmRpY2VzLEY9Ti5sZW5ndGg7Zm9yKHM9MDtzPEY7KytzKVRbeCsrXT1NK05bc107TSs9VXQuY29tcHV0ZU51bWJlck9mVmVydGljZXModFtyXVtlXSl9Xz1UfWxldCBnPW5ldyBhLGI9MCx3O2ZvcihyPTA7cjxuOysrcil7aWYodz10W3JdW2VdLmJvdW5kaW5nU3BoZXJlLCFtKHcpKXtnPXZvaWQgMDticmVha31hLmFkZCh3LmNlbnRlcixnLGcpfWlmKG0oZykpZm9yKGEuZGl2aWRlQnlTY2FsYXIoZyxuLGcpLHI9MDtyPG47KytyKXt3PXRbcl1bZV0uYm91bmRpbmdTcGhlcmU7bGV0IE89YS5tYWduaXR1ZGUoYS5zdWJ0cmFjdCh3LmNlbnRlcixnLGZNKSkrdy5yYWRpdXM7Tz5iJiYoYj1PKX1yZXR1cm4gbmV3IFV0KHthdHRyaWJ1dGVzOmwsaW5kaWNlczpfLHByaW1pdGl2ZVR5cGU6Yyxib3VuZGluZ1NwaGVyZTptKGcpP25ldyBBdChnLGIpOnZvaWQgMH0pfWZ1bmN0aW9uIHBNKHQpe2lmKG0odC5pbmRpY2VzKSlyZXR1cm4gdDtsZXQgZT1VdC5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyh0KTtpZihlPDMpdGhyb3cgbmV3IEQoIlRoZSBudW1iZXIgb2YgdmVydGljZXMgbXVzdCBiZSBhdCBsZWFzdCB0aHJlZS4iKTtpZihlJTMhPT0wKXRocm93IG5ldyBEKCJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aHJlZS4iKTtsZXQgbj1MdC5jcmVhdGVUeXBlZEFycmF5KGUsZSk7Zm9yKGxldCBvPTA7bzxlOysrbyluW29dPW87cmV0dXJuIHQuaW5kaWNlcz1uLHR9ZnVuY3Rpb24gZE0odCl7bGV0IGU9VXQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYoZTwzKXRocm93IG5ldyBEKCJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIG11c3QgYmUgYXQgbGVhc3QgdGhyZWUuIik7bGV0IG49THQuY3JlYXRlVHlwZWRBcnJheShlLChlLTIpKjMpO25bMF09MSxuWzFdPTAsblsyXT0yO2xldCBvPTM7Zm9yKGxldCByPTM7cjxlOysrciluW28rK109ci0xLG5bbysrXT0wLG5bbysrXT1yO3JldHVybiB0LmluZGljZXM9bix0LnByaW1pdGl2ZVR5cGU9QnQuVFJJQU5HTEVTLHR9ZnVuY3Rpb24gbU0odCl7bGV0IGU9VXQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYoZTwzKXRocm93IG5ldyBEKCJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIG11c3QgYmUgYXQgbGVhc3QgMy4iKTtsZXQgbj1MdC5jcmVhdGVUeXBlZEFycmF5KGUsKGUtMikqMyk7blswXT0wLG5bMV09MSxuWzJdPTIsZT4zJiYoblszXT0wLG5bNF09MixuWzVdPTMpO2xldCBvPTY7Zm9yKGxldCByPTM7cjxlLTE7cis9MiluW28rK109cixuW28rK109ci0xLG5bbysrXT1yKzEscisyPGUmJihuW28rK109cixuW28rK109cisxLG5bbysrXT1yKzIpO3JldHVybiB0LmluZGljZXM9bix0LnByaW1pdGl2ZVR5cGU9QnQuVFJJQU5HTEVTLHR9ZnVuY3Rpb24gaE0odCl7aWYobSh0LmluZGljZXMpKXJldHVybiB0O2xldCBlPVV0LmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKHQpO2lmKGU8Mil0aHJvdyBuZXcgRCgiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGF0IGxlYXN0IHR3by4iKTtpZihlJTIhPT0wKXRocm93IG5ldyBEKCJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyLiIpO2xldCBuPUx0LmNyZWF0ZVR5cGVkQXJyYXkoZSxlKTtmb3IobGV0IG89MDtvPGU7KytvKW5bb109bztyZXR1cm4gdC5pbmRpY2VzPW4sdH1mdW5jdGlvbiBfTSh0KXtsZXQgZT1VdC5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyh0KTtpZihlPDIpdGhyb3cgbmV3IEQoIlRoZSBudW1iZXIgb2YgdmVydGljZXMgbXVzdCBiZSBhdCBsZWFzdCB0d28uIik7bGV0IG49THQuY3JlYXRlVHlwZWRBcnJheShlLChlLTEpKjIpO25bMF09MCxuWzFdPTE7bGV0IG89Mjtmb3IobGV0IHI9MjtyPGU7KytyKW5bbysrXT1yLTEsbltvKytdPXI7cmV0dXJuIHQuaW5kaWNlcz1uLHQucHJpbWl0aXZlVHlwZT1CdC5MSU5FUyx0fWZ1bmN0aW9uIHlNKHQpe2xldCBlPVV0LmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKHQpO2lmKGU8Mil0aHJvdyBuZXcgRCgiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGF0IGxlYXN0IHR3by4iKTtsZXQgbj1MdC5jcmVhdGVUeXBlZEFycmF5KGUsZSoyKTtuWzBdPTAsblsxXT0xO2xldCBvPTI7Zm9yKGxldCByPTI7cjxlOysrciluW28rK109ci0xLG5bbysrXT1yO3JldHVybiBuW28rK109ZS0xLG5bb109MCx0LmluZGljZXM9bix0LnByaW1pdGl2ZVR5cGU9QnQuTElORVMsdH1mdW5jdGlvbiBnTSh0KXtzd2l0Y2godC5wcmltaXRpdmVUeXBlKXtjYXNlIEJ0LlRSSUFOR0xFX0ZBTjpyZXR1cm4gZE0odCk7Y2FzZSBCdC5UUklBTkdMRV9TVFJJUDpyZXR1cm4gbU0odCk7Y2FzZSBCdC5UUklBTkdMRVM6cmV0dXJuIHBNKHQpO2Nhc2UgQnQuTElORV9TVFJJUDpyZXR1cm4gX00odCk7Y2FzZSBCdC5MSU5FX0xPT1A6cmV0dXJuIHlNKHQpO2Nhc2UgQnQuTElORVM6cmV0dXJuIGhNKHQpfXJldHVybiB0fWZ1bmN0aW9uIGxzKHQsZSl7TWF0aC5hYnModC55KTxQLkVQU0lMT042JiYoZT90Lnk9LVAuRVBTSUxPTjY6dC55PVAuRVBTSUxPTjYpfWZ1bmN0aW9uIEFNKHQsZSxuKXtpZih0LnkhPT0wJiZlLnkhPT0wJiZuLnkhPT0wKXtscyh0LHQueTwwKSxscyhlLGUueTwwKSxscyhuLG4ueTwwKTtyZXR1cm59bGV0IG89TWF0aC5hYnModC55KSxyPU1hdGguYWJzKGUueSksaT1NYXRoLmFicyhuLnkpLHM7bz5yP28+aT9zPVAuc2lnbih0LnkpOnM9UC5zaWduKG4ueSk6cj5pP3M9UC5zaWduKGUueSk6cz1QLnNpZ24obi55KTtsZXQgZj1zPDA7bHModCxmKSxscyhlLGYpLGxzKG4sZil9ZnVuY3Rpb24gd3IodCxlLG4sbyl7YS5hZGQodCxhLm11bHRpcGx5QnlTY2FsYXIoYS5zdWJ0cmFjdChlLHQsdHcpLHQueS8odC55LWUueSksdHcpLG4pLGEuY2xvbmUobixvKSxscyhuLCEwKSxscyhvLCExKX1mdW5jdGlvbiBiTSh0LGUsbil7aWYodC54Pj0wfHxlLng+PTB8fG4ueD49MClyZXR1cm47QU0odCxlLG4pO2xldCBvPXQueTwwLHI9ZS55PDAsaT1uLnk8MCxzPTA7cys9bz8xOjAscys9cj8xOjAscys9aT8xOjA7bGV0IGY9UWguaW5kaWNlcztzPT09MT8oZlsxXT0zLGZbMl09NCxmWzVdPTYsZls3XT02LGZbOF09NSxvPyh3cih0LGUsbmMscmMpLHdyKHQsbixvYyxpYyksZlswXT0wLGZbM109MSxmWzRdPTIsZls2XT0xKTpyPyh3cihlLG4sbmMscmMpLHdyKGUsdCxvYyxpYyksZlswXT0xLGZbM109MixmWzRdPTAsZls2XT0yKTppJiYod3Iobix0LG5jLHJjKSx3cihuLGUsb2MsaWMpLGZbMF09MixmWzNdPTAsZls0XT0xLGZbNl09MCkpOnM9PT0yJiYoZlsyXT00LGZbNF09NCxmWzVdPTMsZls3XT01LGZbOF09NixvP3I/aXx8KHdyKG4sdCxuYyxyYyksd3IobixlLG9jLGljKSxmWzBdPTAsZlsxXT0xLGZbM109MCxmWzZdPTIpOih3cihlLG4sbmMscmMpLHdyKGUsdCxvYyxpYyksZlswXT0yLGZbMV09MCxmWzNdPTIsZls2XT0xKTood3IodCxlLG5jLHJjKSx3cih0LG4sb2MsaWMpLGZbMF09MSxmWzFdPTIsZlszXT0xLGZbNl09MCkpO2xldCB1PVFoLnBvc2l0aW9ucztyZXR1cm4gdVswXT10LHVbMV09ZSx1WzJdPW4sdS5sZW5ndGg9Mywocz09PTF8fHM9PT0yKSYmKHVbM109bmMsdVs0XT1vYyx1WzVdPXJjLHVbNl09aWMsdS5sZW5ndGg9NyksUWh9ZnVuY3Rpb24gZXcodCxlKXtsZXQgbj10LmF0dHJpYnV0ZXM7aWYobi5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSYmbShuW3JdKSYmbShuW3JdLnZhbHVlcykpe2xldCBpPW5bcl07aS52YWx1ZXM9ZXQuY3JlYXRlVHlwZWRBcnJheShpLmNvbXBvbmVudERhdGF0eXBlLGkudmFsdWVzKX1sZXQgbz1VdC5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyh0KTtyZXR1cm4gdC5pbmRpY2VzPUx0LmNyZWF0ZVR5cGVkQXJyYXkobyx0LmluZGljZXMpLGUmJih0LmJvdW5kaW5nU3BoZXJlPUF0LmZyb21WZXJ0aWNlcyhuLnBvc2l0aW9uLnZhbHVlcykpLHR9ZnVuY3Rpb24gc2EodCl7bGV0IGU9dC5hdHRyaWJ1dGVzLG49e307Zm9yKGxldCBvIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShvKSYmbShlW29dKSYmbShlW29dLnZhbHVlcykpe2xldCByPWVbb107bltvXT1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOnIuY29tcG9uZW50RGF0YXR5cGUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTpyLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsbm9ybWFsaXplOnIubm9ybWFsaXplLHZhbHVlczpbXX0pfXJldHVybiBuZXcgVXQoe2F0dHJpYnV0ZXM6bixpbmRpY2VzOltdLHByaW1pdGl2ZVR5cGU6dC5wcmltaXRpdmVUeXBlfSl9ZnVuY3Rpb24gbjAodCxlLG4pe2xldCBvPW0odC5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSk7ZT1ldyhlLG8pLG49ZXcobixvKSxtKG4pJiYhbShlKT90Lmdlb21ldHJ5PW46IW0obikmJm0oZSk/dC5nZW9tZXRyeT1lOih0Lndlc3RIZW1pc3BoZXJlR2VvbWV0cnk9ZSx0LmVhc3RIZW1pc3BoZXJlR2VvbWV0cnk9bix0Lmdlb21ldHJ5PXZvaWQgMCl9ZnVuY3Rpb24gbzAodCxlKXtsZXQgbj1uZXcgdCxvPW5ldyB0LHI9bmV3IHQ7cmV0dXJuIGZ1bmN0aW9uKGkscyxmLHUsYyxsLHAsZCl7bGV0IGg9dC5mcm9tQXJyYXkoYyxpKmUsbiksXz10LmZyb21BcnJheShjLHMqZSxvKSxnPXQuZnJvbUFycmF5KGMsZiplLHIpO3QubXVsdGlwbHlCeVNjYWxhcihoLHUueCxoKSx0Lm11bHRpcGx5QnlTY2FsYXIoXyx1LnksXyksdC5tdWx0aXBseUJ5U2NhbGFyKGcsdS56LGcpO2xldCBiPXQuYWRkKGgsXyxoKTt0LmFkZChiLGcsYiksZCYmdC5ub3JtYWxpemUoYixiKSx0LnBhY2soYixsLHAqZSl9fWZ1bmN0aW9uIEtwKHQsZSxuLG8scixpLHMsZix1LGMsbCxwLGQsaCxfLGcpe2lmKCFtKGkpJiYhbShzKSYmIW0oZikmJiFtKHUpJiYhbShjKSYmaD09PTApcmV0dXJuO2xldCBiPWEuZnJvbUFycmF5KHIsdCozLFJmKSx3PWEuZnJvbUFycmF5KHIsZSozLEpoKSxPPWEuZnJvbUFycmF5KHIsbiozLHQwKSxFPUliKG8sYix3LE8sT00pO2lmKG0oRSkpe2lmKG0oaSkmJlhwKHQsZSxuLEUsaSxwLm5vcm1hbC52YWx1ZXMsZywhMCksbShjKSl7bGV0IFQ9YS5mcm9tQXJyYXkoYyx0KjMsUmYpLHg9YS5mcm9tQXJyYXkoYyxlKjMsSmgpLE09YS5mcm9tQXJyYXkoYyxuKjMsdDApO2EubXVsdGlwbHlCeVNjYWxhcihULEUueCxUKSxhLm11bHRpcGx5QnlTY2FsYXIoeCxFLnkseCksYS5tdWx0aXBseUJ5U2NhbGFyKE0sRS56LE0pO2xldCBOOyFhLmVxdWFscyhULGEuWkVSTyl8fCFhLmVxdWFscyh4LGEuWkVSTyl8fCFhLmVxdWFscyhNLGEuWkVSTyk/KE49YS5hZGQoVCx4LFQpLGEuYWRkKE4sTSxOKSxhLm5vcm1hbGl6ZShOLE4pKTooTj1SZixOLng9MCxOLnk9MCxOLno9MCksYS5wYWNrKE4scC5leHRydWRlRGlyZWN0aW9uLnZhbHVlcyxnKjMpfWlmKG0obCkmJlRNKHQsZSxuLEUsbCxwLmFwcGx5T2Zmc2V0LnZhbHVlcyxnKSxtKHMpJiZYcCh0LGUsbixFLHMscC50YW5nZW50LnZhbHVlcyxnLCEwKSxtKGYpJiZYcCh0LGUsbixFLGYscC5iaXRhbmdlbnQudmFsdWVzLGcsITApLG0odSkmJmN3KHQsZSxuLEUsdSxwLnN0LnZhbHVlcyxnKSxoPjApZm9yKGxldCBUPTA7VDxoO1QrKyl7bGV0IHg9ZFtUXTtFTSh0LGUsbixFLGcsX1t4XSxwW3hdKX19fWZ1bmN0aW9uIEVNKHQsZSxuLG8scixpLHMpe2xldCBmPWkuY29tcG9uZW50c1BlckF0dHJpYnV0ZSx1PWkudmFsdWVzLGM9cy52YWx1ZXM7c3dpdGNoKGYpe2Nhc2UgNDp3TSh0LGUsbixvLHUsYyxyLCExKTticmVhaztjYXNlIDM6WHAodCxlLG4sbyx1LGMsciwhMSk7YnJlYWs7Y2FzZSAyOmN3KHQsZSxuLG8sdSxjLHIsITEpO2JyZWFrO2RlZmF1bHQ6Y1tyXT11W3RdKm8ueCt1W2VdKm8ueSt1W25dKm8uen19ZnVuY3Rpb24gc2kodCxlLG4sbyxyLGkpe2xldCBzPXQucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zO2lmKHIhPT0tMSl7bGV0IGY9b1tyXSx1PW5bZl07cmV0dXJuIHU9PT0tMT8obltmXT1zLHQucG9zaXRpb24udmFsdWVzLnB1c2goaS54LGkueSxpLnopLGUucHVzaChzKSxzKTooZS5wdXNoKHUpLHUpfXJldHVybiB0LnBvc2l0aW9uLnZhbHVlcy5wdXNoKGkueCxpLnksaS56KSxlLnB1c2gocyksc31mdW5jdGlvbiBudyh0KXtsZXQgZT10Lmdlb21ldHJ5LG49ZS5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMscj1tKG4ubm9ybWFsKT9uLm5vcm1hbC52YWx1ZXM6dm9pZCAwLGk9bShuLmJpdGFuZ2VudCk/bi5iaXRhbmdlbnQudmFsdWVzOnZvaWQgMCxzPW0obi50YW5nZW50KT9uLnRhbmdlbnQudmFsdWVzOnZvaWQgMCxmPW0obi5zdCk/bi5zdC52YWx1ZXM6dm9pZCAwLHU9bShuLmV4dHJ1ZGVEaXJlY3Rpb24pP24uZXh0cnVkZURpcmVjdGlvbi52YWx1ZXM6dm9pZCAwLGM9bShuLmFwcGx5T2Zmc2V0KT9uLmFwcGx5T2Zmc2V0LnZhbHVlczp2b2lkIDAsbD1lLmluZGljZXMscD1bXTtmb3IobGV0IE4gaW4gbiluLmhhc093blByb3BlcnR5KE4pJiYhUk1bTl0mJm0obltOXSkmJnAucHVzaChOKTtsZXQgZD1wLmxlbmd0aCxoPXNhKGUpLF89c2EoZSksZyxiLHcsTyxFLFQ9W107VC5sZW5ndGg9by5sZW5ndGgvMztsZXQgeD1bXTtmb3IoeC5sZW5ndGg9by5sZW5ndGgvMyxFPTA7RTxULmxlbmd0aDsrK0UpVFtFXT0tMSx4W0VdPS0xO2xldCBNPWwubGVuZ3RoO2ZvcihFPTA7RTxNO0UrPTMpe2xldCBOPWxbRV0sRj1sW0UrMV0sST1sW0UrMl0sdj1hLmZyb21BcnJheShvLE4qMyksQj1hLmZyb21BcnJheShvLEYqMyksQT1hLmZyb21BcnJheShvLEkqMyksUz1iTSh2LEIsQSk7aWYobShTKSYmUy5wb3NpdGlvbnMubGVuZ3RoPjMpe2xldCBDPVMucG9zaXRpb25zLEw9Uy5pbmRpY2VzLHo9TC5sZW5ndGg7Zm9yKGxldCBqPTA7ajx6Oysrail7bGV0IGs9TFtqXSxxPUNba107cS55PDA/KGc9Xy5hdHRyaWJ1dGVzLGI9Xy5pbmRpY2VzLHc9VCk6KGc9aC5hdHRyaWJ1dGVzLGI9aC5pbmRpY2VzLHc9eCksTz1zaShnLGIsdyxsLGs8Mz9FK2s6LTEscSksS3AoTixGLEkscSxvLHIscyxpLGYsdSxjLGcscCxkLG4sTyl9fWVsc2UgbShTKSYmKHY9Uy5wb3NpdGlvbnNbMF0sQj1TLnBvc2l0aW9uc1sxXSxBPVMucG9zaXRpb25zWzJdKSx2Lnk8MD8oZz1fLmF0dHJpYnV0ZXMsYj1fLmluZGljZXMsdz1UKTooZz1oLmF0dHJpYnV0ZXMsYj1oLmluZGljZXMsdz14KSxPPXNpKGcsYix3LGwsRSx2KSxLcChOLEYsSSx2LG8scixzLGksZix1LGMsZyxwLGQsbixPKSxPPXNpKGcsYix3LGwsRSsxLEIpLEtwKE4sRixJLEIsbyxyLHMsaSxmLHUsYyxnLHAsZCxuLE8pLE89c2koZyxiLHcsbCxFKzIsQSksS3AoTixGLEksQSxvLHIscyxpLGYsdSxjLGcscCxkLG4sTyl9bjAodCxfLGgpfWZ1bmN0aW9uIGlhKHQsZSxuLG8scixpLHMpe2lmKCFtKHMpKXJldHVybjtsZXQgZj1hLmZyb21BcnJheShvLHQqMyxSZik7YS5lcXVhbHNFcHNpbG9uKGYsbixQLkVQU0lMT04xMCk/aS5hcHBseU9mZnNldC52YWx1ZXNbcl09c1t0XTppLmFwcGx5T2Zmc2V0LnZhbHVlc1tyXT1zW2VdfWZ1bmN0aW9uIG93KHQpe2xldCBlPXQuZ2VvbWV0cnksbj1lLmF0dHJpYnV0ZXMsbz1uLnBvc2l0aW9uLnZhbHVlcyxyPW0obi5hcHBseU9mZnNldCk/bi5hcHBseU9mZnNldC52YWx1ZXM6dm9pZCAwLGk9ZS5pbmRpY2VzLHM9c2EoZSksZj1zYShlKSx1LGM9aS5sZW5ndGgsbD1bXTtsLmxlbmd0aD1vLmxlbmd0aC8zO2xldCBwPVtdO2ZvcihwLmxlbmd0aD1vLmxlbmd0aC8zLHU9MDt1PGwubGVuZ3RoOysrdSlsW3VdPS0xLHBbdV09LTE7Zm9yKHU9MDt1PGM7dSs9Mil7bGV0IGQ9aVt1XSxoPWlbdSsxXSxfPWEuZnJvbUFycmF5KG8sZCozLFJmKSxnPWEuZnJvbUFycmF5KG8saCozLEpoKSxiO01hdGguYWJzKF8ueSk8UC5FUFNJTE9ONiYmKF8ueTwwP18ueT0tUC5FUFNJTE9ONjpfLnk9UC5FUFNJTE9ONiksTWF0aC5hYnMoZy55KTxQLkVQU0lMT042JiYoZy55PDA/Zy55PS1QLkVQU0lMT042OmcueT1QLkVQU0lMT042KTtsZXQgdz1zLmF0dHJpYnV0ZXMsTz1zLmluZGljZXMsRT1wLFQ9Zi5hdHRyaWJ1dGVzLHg9Zi5pbmRpY2VzLE09bCxOPXlvLmxpbmVTZWdtZW50UGxhbmUoXyxnLGF3LHQwKTtpZihtKE4pKXtsZXQgRj1hLm11bHRpcGx5QnlTY2FsYXIoYS5VTklUX1ksNSpQLkVQU0lMT045LFNNKTtfLnk8MCYmKGEubmVnYXRlKEYsRiksdz1mLmF0dHJpYnV0ZXMsTz1mLmluZGljZXMsRT1sLFQ9cy5hdHRyaWJ1dGVzLHg9cy5pbmRpY2VzLE09cCk7bGV0IEk9YS5hZGQoTixGLHhNKTtiPXNpKHcsTyxFLGksdSxfKSxpYShkLGgsXyxvLGIsdyxyKSxiPXNpKHcsTyxFLGksLTEsSSksaWEoZCxoLEksbyxiLHcsciksYS5uZWdhdGUoRixGKSxhLmFkZChOLEYsSSksYj1zaShULHgsTSxpLC0xLEkpLGlhKGQsaCxJLG8sYixULHIpLGI9c2koVCx4LE0saSx1KzEsZyksaWEoZCxoLGcsbyxiLFQscil9ZWxzZXtsZXQgRixJLHY7Xy55PDA/KEY9Zi5hdHRyaWJ1dGVzLEk9Zi5pbmRpY2VzLHY9bCk6KEY9cy5hdHRyaWJ1dGVzLEk9cy5pbmRpY2VzLHY9cCksYj1zaShGLEksdixpLHUsXyksaWEoZCxoLF8sbyxiLEYsciksYj1zaShGLEksdixpLHUrMSxnKSxpYShkLGgsZyxvLGIsRixyKX19bjAodCxmLHMpfWZ1bmN0aW9uIHN3KHQpe2xldCBlPXQuYXR0cmlidXRlcyxuPWUucG9zaXRpb24udmFsdWVzLG89ZS5wcmV2UG9zaXRpb24udmFsdWVzLHI9ZS5uZXh0UG9zaXRpb24udmFsdWVzLGk9bi5sZW5ndGg7Zm9yKGxldCBzPTA7czxpO3MrPTMpe2xldCBmPWEudW5wYWNrKG4scyxmdyk7aWYoZi54PjApY29udGludWU7bGV0IHU9YS51bnBhY2sobyxzLHV3KTsoZi55PDAmJnUueT4wfHxmLnk+MCYmdS55PDApJiYocy0zPjA/KG9bc109bltzLTNdLG9bcysxXT1uW3MtMl0sb1tzKzJdPW5bcy0xXSk6YS5wYWNrKGYsbyxzKSk7bGV0IGM9YS51bnBhY2socixzLGUwKTsoZi55PDAmJmMueT4wfHxmLnk+MCYmYy55PDApJiYocyszPGk/KHJbc109bltzKzNdLHJbcysxXT1uW3MrNF0scltzKzJdPW5bcys1XSk6YS5wYWNrKGYscixzKSl9fWZ1bmN0aW9uIHZNKHQpe2xldCBlPXQuZ2VvbWV0cnksbj1lLmF0dHJpYnV0ZXMsbz1uLnBvc2l0aW9uLnZhbHVlcyxyPW4ucHJldlBvc2l0aW9uLnZhbHVlcyxpPW4ubmV4dFBvc2l0aW9uLnZhbHVlcyxzPW4uZXhwYW5kQW5kV2lkdGgudmFsdWVzLGY9bShuLnN0KT9uLnN0LnZhbHVlczp2b2lkIDAsdT1tKG4uY29sb3IpP24uY29sb3IudmFsdWVzOnZvaWQgMCxjPXNhKGUpLGw9c2EoZSkscCxkLGgsXz0hMSxnPW8ubGVuZ3RoLzM7Zm9yKHA9MDtwPGc7cCs9NCl7bGV0IGI9cCx3PXArMixPPWEuZnJvbUFycmF5KG8sYiozLGZ3KSxFPWEuZnJvbUFycmF5KG8sdyozLHV3KTtpZihNYXRoLmFicyhPLnkpPFdwKWZvcihPLnk9V3AqKEUueTwwPy0xOjEpLG9bcCozKzFdPU8ueSxvWyhwKzEpKjMrMV09Ty55LGQ9YiozO2Q8YiozKzEyO2QrPTMpcltkXT1vW3AqM10scltkKzFdPW9bcCozKzFdLHJbZCsyXT1vW3AqMysyXTtpZihNYXRoLmFicyhFLnkpPFdwKWZvcihFLnk9V3AqKE8ueTwwPy0xOjEpLG9bKHArMikqMysxXT1FLnksb1socCszKSozKzFdPUUueSxkPWIqMztkPGIqMysxMjtkKz0zKWlbZF09b1socCsyKSozXSxpW2QrMV09b1socCsyKSozKzFdLGlbZCsyXT1vWyhwKzIpKjMrMl07bGV0IFQ9Yy5hdHRyaWJ1dGVzLHg9Yy5pbmRpY2VzLE09bC5hdHRyaWJ1dGVzLE49bC5pbmRpY2VzLEY9eW8ubGluZVNlZ21lbnRQbGFuZShPLEUsYXcsUE0pO2lmKG0oRikpe189ITA7bGV0IEk9YS5tdWx0aXBseUJ5U2NhbGFyKGEuVU5JVF9ZLElNLE1NKTtPLnk8MCYmKGEubmVnYXRlKEksSSksVD1sLmF0dHJpYnV0ZXMseD1sLmluZGljZXMsTT1jLmF0dHJpYnV0ZXMsTj1jLmluZGljZXMpO2xldCB2PWEuYWRkKEYsSSxOTSk7VC5wb3NpdGlvbi52YWx1ZXMucHVzaChPLngsTy55LE8ueixPLngsTy55LE8ueiksVC5wb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksVC5wb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksVC5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2gocltiKjNdLHJbYiozKzFdLHJbYiozKzJdKSxULnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChyW2IqMyszXSxyW2IqMys0XSxyW2IqMys1XSksVC5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goTy54LE8ueSxPLnosTy54LE8ueSxPLnopLFQubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxULm5leHRQb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksVC5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2godi54LHYueSx2LnopLFQubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxhLm5lZ2F0ZShJLEkpLGEuYWRkKEYsSSx2KSxNLnBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxNLnBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxNLnBvc2l0aW9uLnZhbHVlcy5wdXNoKEUueCxFLnksRS56LEUueCxFLnksRS56KSxNLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksTS5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2godi54LHYueSx2LnopLE0ucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxNLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksTS5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goRS54LEUueSxFLnosRS54LEUueSxFLnopLE0ubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKGlbdyozXSxpW3cqMysxXSxpW3cqMysyXSksTS5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goaVt3KjMrM10saVt3KjMrNF0saVt3KjMrNV0pO2xldCBCPUouZnJvbUFycmF5KHMsYioyLHJ3KSxBPU1hdGguYWJzKEIueSk7VC5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSxBLDEsQSksVC5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSwtQSwxLC1BKSxNLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLEEsMSxBKSxNLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLC1BLDEsLUEpO2xldCBTPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KEYsTyxlMCkpO2lmKFMvPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KEUsTyxlMCkpLG0odSkpe2xldCBDPW1lLmZyb21BcnJheSh1LGIqNCxpdyksTD1tZS5mcm9tQXJyYXkodSx3KjQsaXcpLHo9UC5sZXJwKEMueCxMLngsUyksaj1QLmxlcnAoQy55LEwueSxTKSxrPVAubGVycChDLnosTC56LFMpLHE9UC5sZXJwKEMudyxMLncsUyk7Zm9yKGQ9Yio0O2Q8Yio0Kzg7KytkKVQuY29sb3IudmFsdWVzLnB1c2godVtkXSk7Zm9yKFQuY29sb3IudmFsdWVzLnB1c2goeixqLGsscSksVC5jb2xvci52YWx1ZXMucHVzaCh6LGosayxxKSxNLmNvbG9yLnZhbHVlcy5wdXNoKHosaixrLHEpLE0uY29sb3IudmFsdWVzLnB1c2goeixqLGsscSksZD13KjQ7ZDx3KjQrODsrK2QpTS5jb2xvci52YWx1ZXMucHVzaCh1W2RdKX1pZihtKGYpKXtsZXQgQz1KLmZyb21BcnJheShmLGIqMixydyksTD1KLmZyb21BcnJheShmLChwKzMpKjIsQ00pLHo9UC5sZXJwKEMueCxMLngsUyk7Zm9yKGQ9YioyO2Q8YioyKzQ7KytkKVQuc3QudmFsdWVzLnB1c2goZltkXSk7Zm9yKFQuc3QudmFsdWVzLnB1c2goeixDLnkpLFQuc3QudmFsdWVzLnB1c2goeixMLnkpLE0uc3QudmFsdWVzLnB1c2goeixDLnkpLE0uc3QudmFsdWVzLnB1c2goeixMLnkpLGQ9dyoyO2Q8dyoyKzQ7KytkKU0uc3QudmFsdWVzLnB1c2goZltkXSl9aD1ULnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LHgucHVzaChoLGgrMixoKzEpLHgucHVzaChoKzEsaCsyLGgrMyksaD1NLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LE4ucHVzaChoLGgrMixoKzEpLE4ucHVzaChoKzEsaCsyLGgrMyl9ZWxzZXtsZXQgSSx2O2ZvcihPLnk8MD8oST1sLmF0dHJpYnV0ZXMsdj1sLmluZGljZXMpOihJPWMuYXR0cmlidXRlcyx2PWMuaW5kaWNlcyksSS5wb3NpdGlvbi52YWx1ZXMucHVzaChPLngsTy55LE8ueiksSS5wb3NpdGlvbi52YWx1ZXMucHVzaChPLngsTy55LE8ueiksSS5wb3NpdGlvbi52YWx1ZXMucHVzaChFLngsRS55LEUueiksSS5wb3NpdGlvbi52YWx1ZXMucHVzaChFLngsRS55LEUueiksZD1wKjM7ZDxwKjMrMTI7KytkKUkucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKHJbZF0pLEkubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKGlbZF0pO2ZvcihkPXAqMjtkPHAqMis4OysrZClJLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKHNbZF0pLG0oZikmJkkuc3QudmFsdWVzLnB1c2goZltkXSk7aWYobSh1KSlmb3IoZD1wKjQ7ZDxwKjQrMTY7KytkKUkuY29sb3IudmFsdWVzLnB1c2godVtkXSk7aD1JLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LHYucHVzaChoLGgrMixoKzEpLHYucHVzaChoKzEsaCsyLGgrMyl9fV8mJihzdyhsKSxzdyhjKSksbjAodCxsLGMpfXZhciBMbywkYixjTSxYaCxHcixqcCxIcCxmTSxicixPZixvYSxyYSx1TSxaYixsTSxFZixrcixRYixKYixxcCx0dyxuYyxvYyxyYyxpYyxRaCx3TSxYcCxjdyxUTSxSZixKaCx0MCxPTSxSTSxhdyxTTSx4TSxydyxDTSxmdyx1dyxlMCxQTSxNTSxOTSxpdyxJTSxXcCxHZSxjaT0kKCgpPT57ZnMoKTt2YigpO3ZlKCk7a2UoKTtEdCgpO19yKCk7SWUoKTtEZSgpO2Z0KCk7SHQoKTtWaCgpO3hpKCk7WWUoKTskZSgpO0RwKCk7WmUoKTtWcygpO2VjKCk7S3QoKTtVbigpO2tuKCk7dXMoKTt0bigpO1hiKCk7TG89e307TG8udG9XaXJlZnJhbWU9ZnVuY3Rpb24odCl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO2xldCBlPXQuaW5kaWNlcztpZihtKGUpKXtzd2l0Y2godC5wcmltaXRpdmVUeXBlKXtjYXNlIEJ0LlRSSUFOR0xFUzp0LmluZGljZXM9b00oZSk7YnJlYWs7Y2FzZSBCdC5UUklBTkdMRV9TVFJJUDp0LmluZGljZXM9ck0oZSk7YnJlYWs7Y2FzZSBCdC5UUklBTkdMRV9GQU46dC5pbmRpY2VzPWlNKGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEQoImdlb21ldHJ5LnByaW1pdGl2ZVR5cGUgbXVzdCBiZSBUUklBTkdMRVMsIFRSSUFOR0xFX1NUUklQLCBvciBUUklBTkdMRV9GQU4uIil9dC5wcmltaXRpdmVUeXBlPUJ0LkxJTkVTfXJldHVybiB0fTtMby5jcmVhdGVMaW5lU2VnbWVudHNGb3JWZWN0b3JzPWZ1bmN0aW9uKHQsZSxuKXtpZihlPWU/PyJub3JtYWwiLCFtKHQpKXRocm93IG5ldyBEKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtpZighbSh0LmF0dHJpYnV0ZXMucG9zaXRpb24pKXRocm93IG5ldyBEKCJnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uIGlzIHJlcXVpcmVkLiIpO2lmKCFtKHQuYXR0cmlidXRlc1tlXSkpdGhyb3cgbmV3IEQoYGdlb21ldHJ5LmF0dHJpYnV0ZXMgbXVzdCBoYXZlIGFuIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF0dHJpYnV0ZU5hbWUgcGFyYW1ldGVyLCAke2V9LmApO249bj8/MWU0O2xldCBvPXQuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscj10LmF0dHJpYnV0ZXNbZV0udmFsdWVzLGk9by5sZW5ndGgscz1uZXcgRmxvYXQ2NEFycmF5KDIqaSksZj0wO2ZvcihsZXQgbD0wO2w8aTtsKz0zKXNbZisrXT1vW2xdLHNbZisrXT1vW2wrMV0sc1tmKytdPW9bbCsyXSxzW2YrK109b1tsXStyW2xdKm4sc1tmKytdPW9bbCsxXStyW2wrMV0qbixzW2YrK109b1tsKzJdK3JbbCsyXSpuO2xldCB1LGM9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbShjKSYmKHU9bmV3IEF0KGMuY2VudGVyLGMucmFkaXVzK24pKSxuZXcgVXQoe2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6c30pfSxwcmltaXRpdmVUeXBlOkJ0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOnV9KX07TG8uY3JlYXRlQXR0cmlidXRlTG9jYXRpb25zPWZ1bmN0aW9uKHQpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtsZXQgZT1bInBvc2l0aW9uIiwicG9zaXRpb25IaWdoIiwicG9zaXRpb25Mb3ciLCJwb3NpdGlvbjNESGlnaCIsInBvc2l0aW9uM0RMb3ciLCJwb3NpdGlvbjJESGlnaCIsInBvc2l0aW9uMkRMb3ciLCJwaWNrQ29sb3IiLCJub3JtYWwiLCJzdCIsInRhbmdlbnQiLCJiaXRhbmdlbnQiLCJleHRydWRlRGlyZWN0aW9uIiwiY29tcHJlc3NlZEF0dHJpYnV0ZXMiXSxuPXQuYXR0cmlidXRlcyxvPXt9LHI9MCxpLHM9ZS5sZW5ndGg7Zm9yKGk9MDtpPHM7KytpKXtsZXQgZj1lW2ldO20obltmXSkmJihvW2ZdPXIrKyl9Zm9yKGxldCBmIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShmKSYmIW0ob1tmXSkmJihvW2ZdPXIrKyk7cmV0dXJuIG99O0xvLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZT1mdW5jdGlvbih0KXtpZighbSh0KSl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7bGV0IGU9VXQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCksbj10LmluZGljZXM7aWYobShuKSl7bGV0IG89bmV3IEludDMyQXJyYXkoZSk7Zm9yKGxldCBkPTA7ZDxlO2QrKylvW2RdPS0xO2xldCByPW4saT1yLmxlbmd0aCxzPUx0LmNyZWF0ZVR5cGVkQXJyYXkoZSxpKSxmPTAsdT0wLGM9MCxsO2Zvcig7ZjxpOylsPW9bcltmXV0sbCE9PS0xP3NbdV09bDoobD1yW2ZdLG9bbF09YyxzW3VdPWMsKytjKSwrK2YsKyt1O3QuaW5kaWNlcz1zO2xldCBwPXQuYXR0cmlidXRlcztmb3IobGV0IGQgaW4gcClpZihwLmhhc093blByb3BlcnR5KGQpJiZtKHBbZF0pJiZtKHBbZF0udmFsdWVzKSl7bGV0IGg9cFtkXSxfPWgudmFsdWVzLGc9MCxiPWguY29tcG9uZW50c1BlckF0dHJpYnV0ZSx3PWV0LmNyZWF0ZVR5cGVkQXJyYXkoaC5jb21wb25lbnREYXRhdHlwZSxjKmIpO2Zvcig7ZzxlOyl7bGV0IE89b1tnXTtpZihPIT09LTEpZm9yKGxldCBFPTA7RTxiO0UrKyl3W2IqTytFXT1fW2IqZytFXTsrK2d9aC52YWx1ZXM9d319cmV0dXJuIHR9O0xvLnJlb3JkZXJGb3JQb3N0VmVydGV4Q2FjaGU9ZnVuY3Rpb24odCxlKXtpZighbSh0KSl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7bGV0IG49dC5pbmRpY2VzO2lmKHQucHJpbWl0aXZlVHlwZT09PUJ0LlRSSUFOR0xFUyYmbShuKSl7bGV0IG89bi5sZW5ndGgscj0wO2ZvcihsZXQgaT0wO2k8bztpKyspbltpXT5yJiYocj1uW2ldKTt0LmluZGljZXM9V2IudGlwc2lmeSh7aW5kaWNlczpuLG1heGltdW1JbmRleDpyLGNhY2hlU2l6ZTplfSl9cmV0dXJuIHR9O0xvLmZpdFRvVW5zaWduZWRTaG9ydEluZGljZXM9ZnVuY3Rpb24odCl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO2lmKG0odC5pbmRpY2VzKSYmdC5wcmltaXRpdmVUeXBlIT09QnQuVFJJQU5HTEVTJiZ0LnByaW1pdGl2ZVR5cGUhPT1CdC5MSU5FUyYmdC5wcmltaXRpdmVUeXBlIT09QnQuUE9JTlRTKXRocm93IG5ldyBEKCJnZW9tZXRyeS5wcmltaXRpdmVUeXBlIG11c3QgZXF1YWwgdG8gUHJpbWl0aXZlVHlwZS5UUklBTkdMRVMsIFByaW1pdGl2ZVR5cGUuTElORVMsIG9yIFByaW1pdGl2ZVR5cGUuUE9JTlRTLiIpO2xldCBlPVtdLG49VXQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYobSh0LmluZGljZXMpJiZuPj1QLlNJWFRZX0ZPVVJfS0lMT0JZVEVTKXtsZXQgbz1bXSxyPVtdLGk9MCxzPVliKHQuYXR0cmlidXRlcyksZj10LmluZGljZXMsdT1mLmxlbmd0aCxjO3QucHJpbWl0aXZlVHlwZT09PUJ0LlRSSUFOR0xFUz9jPTM6dC5wcmltaXRpdmVUeXBlPT09QnQuTElORVM/Yz0yOnQucHJpbWl0aXZlVHlwZT09PUJ0LlBPSU5UUyYmKGM9MSk7Zm9yKGxldCBsPTA7bDx1O2wrPWMpe2ZvcihsZXQgcD0wO3A8YzsrK3Ape2xldCBkPWZbbCtwXSxoPW9bZF07bShoKXx8KGg9aSsrLG9bZF09aCxzTShzLHQuYXR0cmlidXRlcyxkKSksci5wdXNoKGgpfWkrYz49UC5TSVhUWV9GT1VSX0tJTE9CWVRFUyYmKGUucHVzaChuZXcgVXQoe2F0dHJpYnV0ZXM6cyxpbmRpY2VzOnIscHJpbWl0aXZlVHlwZTp0LnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6dC5ib3VuZGluZ1NwaGVyZSxib3VuZGluZ1NwaGVyZUNWOnQuYm91bmRpbmdTcGhlcmVDVn0pKSxvPVtdLHI9W10saT0wLHM9WWIodC5hdHRyaWJ1dGVzKSl9ci5sZW5ndGghPT0wJiZlLnB1c2gobmV3IFV0KHthdHRyaWJ1dGVzOnMsaW5kaWNlczpyLHByaW1pdGl2ZVR5cGU6dC5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOnQuYm91bmRpbmdTcGhlcmUsYm91bmRpbmdTcGhlcmVDVjp0LmJvdW5kaW5nU3BoZXJlQ1Z9KSl9ZWxzZSBlLnB1c2godCk7cmV0dXJuIGV9OyRiPW5ldyBhLGNNPW5ldyBjdDtMby5wcm9qZWN0VG8yRD1mdW5jdGlvbih0LGUsbixvLHIpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgiYXR0cmlidXRlTmFtZSBpcyByZXF1aXJlZC4iKTtpZighbShuKSl0aHJvdyBuZXcgRCgiYXR0cmlidXRlTmFtZTNEIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG8pKXRocm93IG5ldyBEKCJhdHRyaWJ1dGVOYW1lMkQgaXMgcmVxdWlyZWQuIik7aWYoIW0odC5hdHRyaWJ1dGVzW2VdKSl0aHJvdyBuZXcgRChgZ2VvbWV0cnkgbXVzdCBoYXZlIGF0dHJpYnV0ZSBtYXRjaGluZyB0aGUgYXR0cmlidXRlTmFtZSBhcmd1bWVudDogJHtlfS5gKTtpZih0LmF0dHJpYnV0ZXNbZV0uY29tcG9uZW50RGF0YXR5cGUhPT1ldC5ET1VCTEUpdGhyb3cgbmV3IEQoIlRoZSBhdHRyaWJ1dGUgY29tcG9uZW50RGF0YXR5cGUgbXVzdCBiZSBDb21wb25lbnREYXRhdHlwZS5ET1VCTEUuIik7bGV0IGk9dC5hdHRyaWJ1dGVzW2VdO3I9bShyKT9yOm5ldyBlbztsZXQgcz1yLmVsbGlwc29pZCxmPWkudmFsdWVzLHU9bmV3IEZsb2F0NjRBcnJheShmLmxlbmd0aCksYz0wO2ZvcihsZXQgbD0wO2w8Zi5sZW5ndGg7bCs9Myl7bGV0IHA9YS5mcm9tQXJyYXkoZixsLCRiKSxkPXMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocCxjTSk7aWYoIW0oZCkpdGhyb3cgbmV3IEQoYENvdWxkIG5vdCBwcm9qZWN0IHBvaW50ICgke3AueH0sICR7cC55fSwgJHtwLnp9KSB0byAyRC5gKTtsZXQgaD1yLnByb2plY3QoZCwkYik7dVtjKytdPWgueCx1W2MrK109aC55LHVbYysrXT1oLnp9cmV0dXJuIHQuYXR0cmlidXRlc1tuXT1pLHQuYXR0cmlidXRlc1tvXT1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnV9KSxkZWxldGUgdC5hdHRyaWJ1dGVzW2VdLHR9O1hoPXtoaWdoOjAsbG93OjB9O0xvLmVuY29kZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixvKXtpZighbSh0KSl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoImF0dHJpYnV0ZU5hbWUgaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoImF0dHJpYnV0ZUhpZ2hOYW1lIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG8pKXRocm93IG5ldyBEKCJhdHRyaWJ1dGVMb3dOYW1lIGlzIHJlcXVpcmVkLiIpO2lmKCFtKHQuYXR0cmlidXRlc1tlXSkpdGhyb3cgbmV3IEQoYGdlb21ldHJ5IG11c3QgaGF2ZSBhdHRyaWJ1dGUgbWF0Y2hpbmcgdGhlIGF0dHJpYnV0ZU5hbWUgYXJndW1lbnQ6ICR7ZX0uYCk7aWYodC5hdHRyaWJ1dGVzW2VdLmNvbXBvbmVudERhdGF0eXBlIT09ZXQuRE9VQkxFKXRocm93IG5ldyBEKCJUaGUgYXR0cmlidXRlIGNvbXBvbmVudERhdGF0eXBlIG11c3QgYmUgQ29tcG9uZW50RGF0YXR5cGUuRE9VQkxFLiIpO2xldCByPXQuYXR0cmlidXRlc1tlXSxpPXIudmFsdWVzLHM9aS5sZW5ndGgsZj1uZXcgRmxvYXQzMkFycmF5KHMpLHU9bmV3IEZsb2F0MzJBcnJheShzKTtmb3IobGV0IGw9MDtsPHM7KytsKVFzLmVuY29kZShpW2xdLFhoKSxmW2xdPVhoLmhpZ2gsdVtsXT1YaC5sb3c7bGV0IGM9ci5jb21wb25lbnRzUGVyQXR0cmlidXRlO3JldHVybiB0LmF0dHJpYnV0ZXNbbl09bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOmMsdmFsdWVzOmZ9KSx0LmF0dHJpYnV0ZXNbb109bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOmMsdmFsdWVzOnV9KSxkZWxldGUgdC5hdHRyaWJ1dGVzW2VdLHR9O0dyPW5ldyBhO2pwPW5ldyBzdCxIcD1uZXcgWjtMby50cmFuc2Zvcm1Ub1dvcmxkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24odCl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImluc3RhbmNlIGlzIHJlcXVpcmVkLiIpO2xldCBlPXQubW9kZWxNYXRyaXg7aWYoc3QuZXF1YWxzKGUsc3QuSURFTlRJVFkpKXJldHVybiB0O2xldCBuPXQuZ2VvbWV0cnkuYXR0cmlidXRlcztZaChlLG4ucG9zaXRpb24pLFloKGUsbi5wcmV2UG9zaXRpb24pLFloKGUsbi5uZXh0UG9zaXRpb24pLChtKG4ubm9ybWFsKXx8bShuLnRhbmdlbnQpfHxtKG4uYml0YW5nZW50KSkmJihzdC5pbnZlcnNlKGUsanApLHN0LnRyYW5zcG9zZShqcCxqcCksc3QuZ2V0TWF0cml4MyhqcCxIcCksJGgoSHAsbi5ub3JtYWwpLCRoKEhwLG4udGFuZ2VudCksJGgoSHAsbi5iaXRhbmdlbnQpKTtsZXQgbz10Lmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlO3JldHVybiBtKG8pJiYodC5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZT1BdC50cmFuc2Zvcm0obyxlLG8pKSx0Lm1vZGVsTWF0cml4PXN0LmNsb25lKHN0LklERU5USVRZKSx0fTtmTT1uZXcgYTtMby5jb21iaW5lSW5zdGFuY2VzPWZ1bmN0aW9uKHQpe2lmKCFtKHQpfHx0Lmxlbmd0aDwxKXRocm93IG5ldyBEKCJpbnN0YW5jZXMgaXMgcmVxdWlyZWQgYW5kIG11c3QgaGF2ZSBsZW5ndGggZ3JlYXRlciB0aGFuIHplcm8uIik7bGV0IGU9W10sbj1bXSxvPXQubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bzsrK2kpe2xldCBzPXRbaV07bShzLmdlb21ldHJ5KT9lLnB1c2gocyk6bShzLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZtKHMuZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJm4ucHVzaChzKX1sZXQgcj1bXTtyZXR1cm4gZS5sZW5ndGg+MCYmci5wdXNoKFpoKGUsImdlb21ldHJ5IikpLG4ubGVuZ3RoPjAmJihyLnB1c2goWmgobiwid2VzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSxyLnB1c2goWmgobiwiZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSkscn07YnI9bmV3IGEsT2Y9bmV3IGEsb2E9bmV3IGEscmE9bmV3IGE7TG8uY29tcHV0ZU5vcm1hbD1mdW5jdGlvbih0KXtpZighbSh0KSl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7aWYoIW0odC5hdHRyaWJ1dGVzLnBvc2l0aW9uKXx8IW0odC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcykpdGhyb3cgbmV3IEQoImdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzIGlzIHJlcXVpcmVkLiIpO2lmKCFtKHQuaW5kaWNlcykpdGhyb3cgbmV3IEQoImdlb21ldHJ5LmluZGljZXMgaXMgcmVxdWlyZWQuIik7aWYodC5pbmRpY2VzLmxlbmd0aDwyfHx0LmluZGljZXMubGVuZ3RoJTMhPT0wKXRocm93IG5ldyBEKCJnZW9tZXRyeS5pbmRpY2VzIGxlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBiZSBhIG11bHRpcGxlIG9mIDMuIik7aWYodC5wcmltaXRpdmVUeXBlIT09QnQuVFJJQU5HTEVTKXRocm93IG5ldyBEKCJnZW9tZXRyeS5wcmltaXRpdmVUeXBlIG11c3QgYmUgUHJpbWl0aXZlVHlwZS5UUklBTkdMRVMuIik7bGV0IGU9dC5pbmRpY2VzLG49dC5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMscj1uLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxpPWUubGVuZ3RoLHM9bmV3IEFycmF5KHIpLGY9bmV3IEFycmF5KGkvMyksdT1uZXcgQXJyYXkoaSksYztmb3IoYz0wO2M8cjtjKyspc1tjXT17aW5kZXhPZmZzZXQ6MCxjb3VudDowLGN1cnJlbnRDb3VudDowfTtsZXQgbD0wO2ZvcihjPTA7YzxpO2MrPTMpe2xldCBfPWVbY10sZz1lW2MrMV0sYj1lW2MrMl0sdz1fKjMsTz1nKjMsRT1iKjM7T2YueD1vW3ddLE9mLnk9b1t3KzFdLE9mLno9b1t3KzJdLG9hLng9b1tPXSxvYS55PW9bTysxXSxvYS56PW9bTysyXSxyYS54PW9bRV0scmEueT1vW0UrMV0scmEuej1vW0UrMl0sc1tfXS5jb3VudCsrLHNbZ10uY291bnQrKyxzW2JdLmNvdW50KyssYS5zdWJ0cmFjdChvYSxPZixvYSksYS5zdWJ0cmFjdChyYSxPZixyYSksZltsXT1hLmNyb3NzKG9hLHJhLG5ldyBhKSxsKyt9bGV0IHA9MDtmb3IoYz0wO2M8cjtjKyspc1tjXS5pbmRleE9mZnNldCs9cCxwKz1zW2NdLmNvdW50O2w9MDtsZXQgZDtmb3IoYz0wO2M8aTtjKz0zKXtkPXNbZVtjXV07bGV0IF89ZC5pbmRleE9mZnNldCtkLmN1cnJlbnRDb3VudDt1W19dPWwsZC5jdXJyZW50Q291bnQrKyxkPXNbZVtjKzFdXSxfPWQuaW5kZXhPZmZzZXQrZC5jdXJyZW50Q291bnQsdVtfXT1sLGQuY3VycmVudENvdW50KyssZD1zW2VbYysyXV0sXz1kLmluZGV4T2Zmc2V0K2QuY3VycmVudENvdW50LHVbX109bCxkLmN1cnJlbnRDb3VudCsrLGwrK31sZXQgaD1uZXcgRmxvYXQzMkFycmF5KHIqMyk7Zm9yKGM9MDtjPHI7YysrKXtsZXQgXz1jKjM7aWYoZD1zW2NdLGEuY2xvbmUoYS5aRVJPLGJyKSxkLmNvdW50PjApe2ZvcihsPTA7bDxkLmNvdW50O2wrKylhLmFkZChicixmW3VbZC5pbmRleE9mZnNldCtsXV0sYnIpO2EuZXF1YWxzRXBzaWxvbihhLlpFUk8sYnIsUC5FUFNJTE9OMTApJiZhLmNsb25lKGZbdVtkLmluZGV4T2Zmc2V0XV0sYnIpfWEuZXF1YWxzRXBzaWxvbihhLlpFUk8sYnIsUC5FUFNJTE9OMTApJiYoYnIuej0xKSxhLm5vcm1hbGl6ZShicixiciksaFtfXT1ici54LGhbXysxXT1ici55LGhbXysyXT1ici56fXJldHVybiB0LmF0dHJpYnV0ZXMubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpofSksdH07dU09bmV3IGEsWmI9bmV3IGEsbE09bmV3IGE7TG8uY29tcHV0ZVRhbmdlbnRBbmRCaXRhbmdlbnQ9ZnVuY3Rpb24odCl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO2xldCBlPXQuYXR0cmlidXRlcyxuPXQuaW5kaWNlcztpZighbShlLnBvc2l0aW9uKXx8IW0oZS5wb3NpdGlvbi52YWx1ZXMpKXRocm93IG5ldyBEKCJnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyBpcyByZXF1aXJlZC4iKTtpZighbShlLm5vcm1hbCl8fCFtKGUubm9ybWFsLnZhbHVlcykpdGhyb3cgbmV3IEQoImdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcyBpcyByZXF1aXJlZC4iKTtpZighbShlLnN0KXx8IW0oZS5zdC52YWx1ZXMpKXRocm93IG5ldyBEKCJnZW9tZXRyeS5hdHRyaWJ1dGVzLnN0LnZhbHVlcyBpcyByZXF1aXJlZC4iKTtpZighbShuKSl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkuaW5kaWNlcyBpcyByZXF1aXJlZC4iKTtpZihuLmxlbmd0aDwyfHxuLmxlbmd0aCUzIT09MCl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkuaW5kaWNlcyBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBhbmQgYmUgYSBtdWx0aXBsZSBvZiAzLiIpO2lmKHQucHJpbWl0aXZlVHlwZSE9PUJ0LlRSSUFOR0xFUyl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkucHJpbWl0aXZlVHlwZSBtdXN0IGJlIFByaW1pdGl2ZVR5cGUuVFJJQU5HTEVTLiIpO2xldCBvPXQuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscj10LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcyxpPXQuYXR0cmlidXRlcy5zdC52YWx1ZXMscz10LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLGY9bi5sZW5ndGgsdT1uZXcgQXJyYXkocyozKSxjO2ZvcihjPTA7Yzx1Lmxlbmd0aDtjKyspdVtjXT0wO2xldCBsLHAsZDtmb3IoYz0wO2M8ZjtjKz0zKXtsZXQgZz1uW2NdLGI9bltjKzFdLHc9bltjKzJdO2w9ZyozLHA9YiozLGQ9dyozO2xldCBPPWcqMixFPWIqMixUPXcqMix4PW9bbF0sTT1vW2wrMV0sTj1vW2wrMl0sRj1pW09dLEk9aVtPKzFdLHY9aVtFKzFdLUksQj1pW1QrMV0tSSxBPTEvKChpW0VdLUYpKkItKGlbVF0tRikqdiksUz0oQioob1twXS14KS12KihvW2RdLXgpKSpBLEM9KEIqKG9bcCsxXS1NKS12KihvW2QrMV0tTSkpKkEsTD0oQioob1twKzJdLU4pLXYqKG9bZCsyXS1OKSkqQTt1W2xdKz1TLHVbbCsxXSs9Qyx1W2wrMl0rPUwsdVtwXSs9Uyx1W3ArMV0rPUMsdVtwKzJdKz1MLHVbZF0rPVMsdVtkKzFdKz1DLHVbZCsyXSs9TH1sZXQgaD1uZXcgRmxvYXQzMkFycmF5KHMqMyksXz1uZXcgRmxvYXQzMkFycmF5KHMqMyk7Zm9yKGM9MDtjPHM7YysrKXtsPWMqMyxwPWwrMSxkPWwrMjtsZXQgZz1hLmZyb21BcnJheShyLGwsdU0pLGI9YS5mcm9tQXJyYXkodSxsLGxNKSx3PWEuZG90KGcsYik7YS5tdWx0aXBseUJ5U2NhbGFyKGcsdyxaYiksYS5ub3JtYWxpemUoYS5zdWJ0cmFjdChiLFpiLGIpLGIpLGhbbF09Yi54LGhbcF09Yi55LGhbZF09Yi56LGEubm9ybWFsaXplKGEuY3Jvc3MoZyxiLGIpLGIpLF9bbF09Yi54LF9bcF09Yi55LF9bZF09Yi56fXJldHVybiB0LmF0dHJpYnV0ZXMudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aH0pLHQuYXR0cmlidXRlcy5iaXRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOl99KSx0fTtFZj1uZXcgSixrcj1uZXcgYSxRYj1uZXcgYSxKYj1uZXcgYSxxcD1uZXcgSjtMby5jb21wcmVzc1ZlcnRpY2VzPWZ1bmN0aW9uKHQpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtsZXQgZT10LmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbixuLG87aWYobShlKSl7bGV0IE09ZS52YWx1ZXM7bz1NLmxlbmd0aC8zO2xldCBOPW5ldyBGbG9hdDMyQXJyYXkobyoyKSxGPTA7Zm9yKG49MDtuPG87KytuKXtpZihhLmZyb21BcnJheShNLG4qMyxrciksYS5lcXVhbHMoa3IsYS5aRVJPKSl7Ris9Mjtjb250aW51ZX1xcD1ubi5vY3RFbmNvZGVJblJhbmdlKGtyLDY1NTM1LHFwKSxOW0YrK109cXAueCxOW0YrK109cXAueX1yZXR1cm4gdC5hdHRyaWJ1dGVzLmNvbXByZXNzZWRBdHRyaWJ1dGVzPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpOfSksZGVsZXRlIHQuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uLHR9bGV0IHI9dC5hdHRyaWJ1dGVzLm5vcm1hbCxpPXQuYXR0cmlidXRlcy5zdCxzPW0ociksZj1tKGkpO2lmKCFzJiYhZilyZXR1cm4gdDtsZXQgdT10LmF0dHJpYnV0ZXMudGFuZ2VudCxjPXQuYXR0cmlidXRlcy5iaXRhbmdlbnQsbD1tKHUpLHA9bShjKSxkLGgsXyxnO3MmJihkPXIudmFsdWVzKSxmJiYoaD1pLnZhbHVlcyksbCYmKF89dS52YWx1ZXMpLHAmJihnPWMudmFsdWVzKSxvPShzP2QubGVuZ3RoOmgubGVuZ3RoKS8ocz8zOjIpO2xldCBPPW8sRT1mJiZzPzI6MTtFKz1sfHxwPzE6MCxPKj1FO2xldCBUPW5ldyBGbG9hdDMyQXJyYXkoTykseD0wO2ZvcihuPTA7bjxvOysrbil7ZiYmKEouZnJvbUFycmF5KGgsbioyLEVmKSxUW3grK109bm4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoRWYpKTtsZXQgTT1uKjM7cyYmbShfKSYmbShnKT8oYS5mcm9tQXJyYXkoZCxNLGtyKSxhLmZyb21BcnJheShfLE0sUWIpLGEuZnJvbUFycmF5KGcsTSxKYiksbm4ub2N0UGFjayhrcixRYixKYixFZiksVFt4KytdPUVmLngsVFt4KytdPUVmLnkpOihzJiYoYS5mcm9tQXJyYXkoZCxNLGtyKSxUW3grK109bm4ub2N0RW5jb2RlRmxvYXQoa3IpKSxsJiYoYS5mcm9tQXJyYXkoXyxNLGtyKSxUW3grK109bm4ub2N0RW5jb2RlRmxvYXQoa3IpKSxwJiYoYS5mcm9tQXJyYXkoZyxNLGtyKSxUW3grK109bm4ub2N0RW5jb2RlRmxvYXQoa3IpKSl9cmV0dXJuIHQuYXR0cmlidXRlcy5jb21wcmVzc2VkQXR0cmlidXRlcz1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6RSx2YWx1ZXM6VH0pLHMmJmRlbGV0ZSB0LmF0dHJpYnV0ZXMubm9ybWFsLGYmJmRlbGV0ZSB0LmF0dHJpYnV0ZXMuc3QscCYmZGVsZXRlIHQuYXR0cmlidXRlcy5iaXRhbmdlbnQsbCYmZGVsZXRlIHQuYXR0cmlidXRlcy50YW5nZW50LHR9O3R3PW5ldyBhO25jPW5ldyBhLG9jPW5ldyBhLHJjPW5ldyBhLGljPW5ldyBhLFFoPXtwb3NpdGlvbnM6bmV3IEFycmF5KDcpLGluZGljZXM6bmV3IEFycmF5KDkpfTt3TT1vMChtZSw0KSxYcD1vMChhLDMpLGN3PW8wKEosMiksVE09ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9clt0XSpvLngsdT1yW2VdKm8ueSxjPXJbbl0qby56O2lbc109Zit1K2M+UC5FUFNJTE9ONj8xOjB9LFJmPW5ldyBhLEpoPW5ldyBhLHQwPW5ldyBhLE9NPW5ldyBhO1JNPXtwb3NpdGlvbjohMCxub3JtYWw6ITAsYml0YW5nZW50OiEwLHRhbmdlbnQ6ITAsc3Q6ITAsZXh0cnVkZURpcmVjdGlvbjohMCxhcHBseU9mZnNldDohMH07YXc9b24uZnJvbVBvaW50Tm9ybWFsKGEuWkVSTyxhLlVOSVRfWSksU009bmV3IGEseE09bmV3IGE7cnc9bmV3IEosQ009bmV3IEosZnc9bmV3IGEsdXc9bmV3IGEsZTA9bmV3IGEsUE09bmV3IGEsTU09bmV3IGEsTk09bmV3IGEsaXc9bmV3IG1lO0lNPTUqUC5FUFNJTE9OOSxXcD1QLkVQU0lMT042O0xvLnNwbGl0TG9uZ2l0dWRlPWZ1bmN0aW9uKHQpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJpbnN0YW5jZSBpcyByZXF1aXJlZC4iKTtsZXQgZT10Lmdlb21ldHJ5LG49ZS5ib3VuZGluZ1NwaGVyZTtpZihtKG4pJiYobi5jZW50ZXIueC1uLnJhZGl1cz4wfHxBdC5pbnRlcnNlY3RQbGFuZShuLG9uLk9SSUdJTl9aWF9QTEFORSkhPT1Tbi5JTlRFUlNFQ1RJTkcpKXJldHVybiB0O2lmKGUuZ2VvbWV0cnlUeXBlIT09TmkuTk9ORSlzd2l0Y2goZS5nZW9tZXRyeVR5cGUpe2Nhc2UgTmkuUE9MWUxJTkVTOnZNKHQpO2JyZWFrO2Nhc2UgTmkuVFJJQU5HTEVTOm53KHQpO2JyZWFrO2Nhc2UgTmkuTElORVM6b3codCk7YnJlYWt9ZWxzZSBnTShlKSxlLnByaW1pdGl2ZVR5cGU9PT1CdC5UUklBTkdMRVM/bncodCk6ZS5wcmltaXRpdmVUeXBlPT09QnQuTElORVMmJm93KHQpO3JldHVybiB0fTtHZT1Mb30pO2Z1bmN0aW9uIFNmKHQsZSxuKXt0PXQ/PzAsZT1lPz8wLG49bj8/MCx0aGlzLnZhbHVlPW5ldyBGbG9hdDMyQXJyYXkoW3QsZSxuXSl9dmFyIGx3LHB3PSQoKCk9PntXdCgpO0RlKCk7ZnQoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZi5wcm90b3R5cGUse2NvbXBvbmVudERhdGF0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZXQuRkxPQVR9fSxjb21wb25lbnRzUGVyQXR0cmlidXRlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gM319LG5vcm1hbGl6ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuITF9fX0pO1NmLmZyb21DYXJ0ZXNpYW4zPWZ1bmN0aW9uKHQpe3JldHVybiB5LmRlZmluZWQoIm9mZnNldCIsdCksbmV3IFNmKHQueCx0LnksdC56KX07U2YudG9WYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoIm9mZnNldCIsdCksbShlKXx8KGU9bmV3IEZsb2F0MzJBcnJheShbdC54LHQueSx0LnpdKSksZVswXT10LngsZVsxXT10LnksZVsyXT10LnosZX07bHc9U2Z9KTtmdW5jdGlvbiBRbyh0KXt0aGlzLl9lbGxpcHNvaWQ9dD8/WS5XR1M4NCx0aGlzLl9zZW1pbWFqb3JBeGlzPXRoaXMuX2VsbGlwc29pZC5tYXhpbXVtUmFkaXVzLHRoaXMuX29uZU92ZXJTZW1pbWFqb3JBeGlzPTEvdGhpcy5fc2VtaW1ham9yQXhpc312YXIgcm8sc2M9JCgoKT0+e0R0KCk7SWUoKTtmdCgpO0h0KCk7JHQoKTtLdCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFFvLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX19KTtRby5tZXJjYXRvckFuZ2xlVG9HZW9kZXRpY0xhdGl0dWRlPWZ1bmN0aW9uKHQpe3JldHVybiBQLlBJX09WRVJfVFdPLTIqTWF0aC5hdGFuKE1hdGguZXhwKC10KSl9O1FvLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGU9ZnVuY3Rpb24odCl7dD5Rby5NYXhpbXVtTGF0aXR1ZGU/dD1Rby5NYXhpbXVtTGF0aXR1ZGU6dDwtUW8uTWF4aW11bUxhdGl0dWRlJiYodD0tUW8uTWF4aW11bUxhdGl0dWRlKTtsZXQgZT1NYXRoLnNpbih0KTtyZXR1cm4gLjUqTWF0aC5sb2coKDErZSkvKDEtZSkpfTtRby5NYXhpbXVtTGF0aXR1ZGU9UW8ubWVyY2F0b3JBbmdsZVRvR2VvZGV0aWNMYXRpdHVkZShNYXRoLlBJKTtRby5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbih0LGUpe2xldCBuPXRoaXMuX3NlbWltYWpvckF4aXMsbz10LmxvbmdpdHVkZSpuLHI9UW8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZSh0LmxhdGl0dWRlKSpuLGk9dC5oZWlnaHQ7cmV0dXJuIG0oZSk/KGUueD1vLGUueT1yLGUuej1pLGUpOm5ldyBhKG8scixpKX07UW8ucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJjYXJ0ZXNpYW4gaXMgcmVxdWlyZWQiKTtsZXQgbj10aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcyxvPXQueCpuLHI9UW8ubWVyY2F0b3JBbmdsZVRvR2VvZGV0aWNMYXRpdHVkZSh0LnkqbiksaT10Lno7cmV0dXJuIG0oZSk/KGUubG9uZ2l0dWRlPW8sZS5sYXRpdHVkZT1yLGUuaGVpZ2h0PWksZSk6bmV3IGN0KG8scixpKX07cm89UW99KTtmdW5jdGlvbiBGTSh0LGUsbil7bGV0IG89IW4scj10Lmxlbmd0aCxpO2lmKCFvJiZyPjEpe2xldCBzPXRbMF0ubW9kZWxNYXRyaXg7Zm9yKGk9MTtpPHI7KytpKWlmKCFzdC5lcXVhbHMocyx0W2ldLm1vZGVsTWF0cml4KSl7bz0hMDticmVha319aWYobylmb3IoaT0wO2k8cjsrK2kpbSh0W2ldLmdlb21ldHJ5KSYmR2UudHJhbnNmb3JtVG9Xb3JsZENvb3JkaW5hdGVzKHRbaV0pO2Vsc2Ugc3QubXVsdGlwbHlUcmFuc2Zvcm1hdGlvbihlLHRbMF0ubW9kZWxNYXRyaXgsZSl9ZnVuY3Rpb24gcjAodCxlKXtsZXQgbj10LmF0dHJpYnV0ZXMsbz1uLnBvc2l0aW9uLHI9by52YWx1ZXMubGVuZ3RoL28uY29tcG9uZW50c1BlckF0dHJpYnV0ZTtuLmJhdGNoSWQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOm5ldyBGbG9hdDMyQXJyYXkocil9KTtsZXQgaT1uLmJhdGNoSWQudmFsdWVzO2ZvcihsZXQgcz0wO3M8cjsrK3MpaVtzXT1lfWZ1bmN0aW9uIExNKHQpe2xldCBlPXQubGVuZ3RoO2ZvcihsZXQgbj0wO248ZTsrK24pe2xldCBvPXRbbl07bShvLmdlb21ldHJ5KT9yMChvLmdlb21ldHJ5LG4pOm0oby53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5KSYmbShvLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiYocjAoby53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5LG4pLHIwKG8uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSxuKSl9fWZ1bmN0aW9uIERNKHQpe2xldCBlPXQuaW5zdGFuY2VzLG49dC5wcm9qZWN0aW9uLG89dC5lbGVtZW50SW5kZXhVaW50U3VwcG9ydGVkLHI9dC5zY2VuZTNET25seSxpPXQudmVydGV4Q2FjaGVPcHRpbWl6ZSxzPXQuY29tcHJlc3NWZXJ0aWNlcyxmPXQubW9kZWxNYXRyaXgsdSxjLGwscD1lLmxlbmd0aDtmb3IodT0wO3U8cDsrK3UpaWYobShlW3VdLmdlb21ldHJ5KSl7bD1lW3VdLmdlb21ldHJ5LnByaW1pdGl2ZVR5cGU7YnJlYWt9Zm9yKHU9MTt1PHA7Kyt1KWlmKG0oZVt1XS5nZW9tZXRyeSkmJmVbdV0uZ2VvbWV0cnkucHJpbWl0aXZlVHlwZSE9PWwpdGhyb3cgbmV3IEQoIkFsbCBpbnN0YW5jZSBnZW9tZXRyaWVzIG11c3QgaGF2ZSB0aGUgc2FtZSBwcmltaXRpdmVUeXBlLiIpO2lmKEZNKGUsZixyKSwhcilmb3IodT0wO3U8cDsrK3UpbShlW3VdLmdlb21ldHJ5KSYmR2Uuc3BsaXRMb25naXR1ZGUoZVt1XSk7aWYoTE0oZSksaSlmb3IodT0wO3U8cDsrK3Upe2xldCBoPWVbdV07bShoLmdlb21ldHJ5KT8oR2UucmVvcmRlckZvclBvc3RWZXJ0ZXhDYWNoZShoLmdlb21ldHJ5KSxHZS5yZW9yZGVyRm9yUHJlVmVydGV4Q2FjaGUoaC5nZW9tZXRyeSkpOm0oaC53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5KSYmbShoLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiYoR2UucmVvcmRlckZvclBvc3RWZXJ0ZXhDYWNoZShoLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpLEdlLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZShoLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpLEdlLnJlb3JkZXJGb3JQb3N0VmVydGV4Q2FjaGUoaC5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5KSxHZS5yZW9yZGVyRm9yUHJlVmVydGV4Q2FjaGUoaC5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5KSl9bGV0IGQ9R2UuY29tYmluZUluc3RhbmNlcyhlKTtmb3IocD1kLmxlbmd0aCx1PTA7dTxwOysrdSl7Yz1kW3VdO2xldCBoPWMuYXR0cmlidXRlcztpZihyKWZvcihsZXQgXyBpbiBoKWguaGFzT3duUHJvcGVydHkoXykmJmhbX10uY29tcG9uZW50RGF0YXR5cGU9PT1ldC5ET1VCTEUmJkdlLmVuY29kZUF0dHJpYnV0ZShjLF8sYCR7X30zREhpZ2hgLGAke199M0RMb3dgKTtlbHNlIGZvcihsZXQgXyBpbiBoKWlmKGguaGFzT3duUHJvcGVydHkoXykmJmhbX10uY29tcG9uZW50RGF0YXR5cGU9PT1ldC5ET1VCTEUpe2xldCBnPWAke199M0RgLGI9YCR7X30yRGA7R2UucHJvamVjdFRvMkQoYyxfLGcsYixuKSxtKGMuYm91bmRpbmdTcGhlcmUpJiZfPT09InBvc2l0aW9uIiYmKGMuYm91bmRpbmdTcGhlcmVDVj1BdC5mcm9tVmVydGljZXMoYy5hdHRyaWJ1dGVzLnBvc2l0aW9uMkQudmFsdWVzKSksR2UuZW5jb2RlQXR0cmlidXRlKGMsZyxgJHtnfUhpZ2hgLGAke2d9TG93YCksR2UuZW5jb2RlQXR0cmlidXRlKGMsYixgJHtifUhpZ2hgLGAke2J9TG93YCl9cyYmR2UuY29tcHJlc3NWZXJ0aWNlcyhjKX1pZighbyl7bGV0IGg9W107Zm9yKHA9ZC5sZW5ndGgsdT0wO3U8cDsrK3UpYz1kW3VdLGg9aC5jb25jYXQoR2UuZml0VG9VbnNpZ25lZFNob3J0SW5kaWNlcyhjKSk7ZD1ofXJldHVybiBkfWZ1bmN0aW9uIGkwKHQsZSxuLG8pe2xldCByLGkscyxmPW8ubGVuZ3RoLTE7aWYoZj49MCl7bGV0IGM9b1tmXTtyPWMub2Zmc2V0K2MuY291bnQscz1jLmluZGV4LGk9bltzXS5pbmRpY2VzLmxlbmd0aH1lbHNlIHI9MCxzPTAsaT1uW3NdLmluZGljZXMubGVuZ3RoO2xldCB1PXQubGVuZ3RoO2ZvcihsZXQgYz0wO2M8dTsrK2Mpe2xldCBwPXRbY11bZV07aWYoIW0ocCkpY29udGludWU7bGV0IGQ9cC5pbmRpY2VzLmxlbmd0aDtyK2Q+aSYmKHI9MCxpPW5bKytzXS5pbmRpY2VzLmxlbmd0aCksby5wdXNoKHtpbmRleDpzLG9mZnNldDpyLGNvdW50OmR9KSxyKz1kfX1mdW5jdGlvbiBCTSh0LGUpe2xldCBuPVtdO3JldHVybiBpMCh0LCJnZW9tZXRyeSIsZSxuKSxpMCh0LCJ3ZXN0SGVtaXNwaGVyZUdlb21ldHJ5IixlLG4pLGkwKHQsImVhc3RIZW1pc3BoZXJlR2VvbWV0cnkiLGUsbiksbn1mdW5jdGlvbiBVTSh0LGUpe2xldCBuPXQuYXR0cmlidXRlcztmb3IobGV0IG8gaW4gbilpZihuLmhhc093blByb3BlcnR5KG8pKXtsZXQgcj1uW29dO20ocikmJm0oci52YWx1ZXMpJiZlLnB1c2goci52YWx1ZXMuYnVmZmVyKX1tKHQuaW5kaWNlcykmJmUucHVzaCh0LmluZGljZXMuYnVmZmVyKX1mdW5jdGlvbiBrTSh0LGUpe2xldCBuPXQubGVuZ3RoO2ZvcihsZXQgbz0wO288bjsrK28pVU0odFtvXSxlKX1mdW5jdGlvbiBHTSh0KXtsZXQgZT0xLG49dC5sZW5ndGg7Zm9yKGxldCBvPTA7bzxuO28rKyl7bGV0IHI9dFtvXTtpZigrK2UsIW0ocikpY29udGludWU7bGV0IGk9ci5hdHRyaWJ1dGVzO2UrPTcrMipBdC5wYWNrZWRMZW5ndGgrKG0oci5pbmRpY2VzKT9yLmluZGljZXMubGVuZ3RoOjApO2ZvcihsZXQgcyBpbiBpKWlmKGkuaGFzT3duUHJvcGVydHkocykmJm0oaVtzXSkpe2xldCBmPWlbc107ZSs9NStmLnZhbHVlcy5sZW5ndGh9fXJldHVybiBlfWZ1bmN0aW9uIFZNKHQsZSl7bGV0IG49dC5sZW5ndGgsbz1uZXcgRmxvYXQ2NEFycmF5KDErbioxOSkscj0wO29bcisrXT1uO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBzPXRbaV07aWYoc3QucGFjayhzLm1vZGVsTWF0cml4LG8scikscis9c3QucGFja2VkTGVuZ3RoLG0ocy5hdHRyaWJ1dGVzKSYmbShzLmF0dHJpYnV0ZXMub2Zmc2V0KSl7bGV0IGY9cy5hdHRyaWJ1dGVzLm9mZnNldC52YWx1ZTtvW3JdPWZbMF0sb1tyKzFdPWZbMV0sb1tyKzJdPWZbMl19cis9M31yZXR1cm4gZS5wdXNoKG8uYnVmZmVyKSxvfWZ1bmN0aW9uIHpNKHQpe2xldCBlPXQsbj1uZXcgQXJyYXkoZVswXSksbz0wLHI9MTtmb3IoO3I8ZS5sZW5ndGg7KXtsZXQgaT1zdC51bnBhY2soZSxyKSxzO3IrPXN0LnBhY2tlZExlbmd0aCxtKGVbcl0pJiYocz17b2Zmc2V0Om5ldyBsdyhlW3JdLGVbcisxXSxlW3IrMl0pfSkscis9MyxuW28rK109e21vZGVsTWF0cml4OmksYXR0cmlidXRlczpzfX1yZXR1cm4gbn1mdW5jdGlvbiBkdyh0KXtsZXQgZT10Lmxlbmd0aCxuPTErKEF0LnBhY2tlZExlbmd0aCsxKSplLG89bmV3IEZsb2F0MzJBcnJheShuKSxyPTA7b1tyKytdPWU7Zm9yKGxldCBpPTA7aTxlOysraSl7bGV0IHM9dFtpXTttKHMpPyhvW3IrK109MSxBdC5wYWNrKHRbaV0sbyxyKSk6b1tyKytdPTAscis9QXQucGFja2VkTGVuZ3RofXJldHVybiBvfWZ1bmN0aW9uIG13KHQpe2xldCBlPW5ldyBBcnJheSh0WzBdKSxuPTAsbz0xO2Zvcig7bzx0Lmxlbmd0aDspdFtvKytdPT09MSYmKGVbbl09QXQudW5wYWNrKHQsbykpLCsrbixvKz1BdC5wYWNrZWRMZW5ndGg7cmV0dXJuIGV9dmFyIHZpLGNhLHMwPSQoKCk9Pnt2ZSgpO0RlKCk7ZnQoKTtIdCgpOyR0KCk7eGkoKTtZZSgpOyRlKCk7YW4oKTtjaSgpO1plKCk7a24oKTtwdygpO3NjKCk7dmk9e307dmkuY29tYmluZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlLG4sbz10Lmluc3RhbmNlcyxyPW8ubGVuZ3RoLGkscyxmPSExO3I+MCYmKGU9RE0odCksZS5sZW5ndGg+MCYmKG49R2UuY3JlYXRlQXR0cmlidXRlTG9jYXRpb25zKGVbMF0pLHQuY3JlYXRlUGlja09mZnNldHMmJihpPUJNKG8sZSkpKSxtKG9bMF0uYXR0cmlidXRlcykmJm0ob1swXS5hdHRyaWJ1dGVzLm9mZnNldCkmJihzPW5ldyBBcnJheShyKSxmPSEwKSk7bGV0IHU9bmV3IEFycmF5KHIpLGM9bmV3IEFycmF5KHIpO2ZvcihsZXQgbD0wO2w8cjsrK2wpe2xldCBwPW9bbF0sZD1wLmdlb21ldHJ5O20oZCkmJih1W2xdPWQuYm91bmRpbmdTcGhlcmUsY1tsXT1kLmJvdW5kaW5nU3BoZXJlQ1YsZiYmKHNbbF09cC5nZW9tZXRyeS5vZmZzZXRBdHRyaWJ1dGUpKTtsZXQgaD1wLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnksXz1wLndlc3RIZW1pc3BoZXJlR2VvbWV0cnk7bShoKSYmbShfKSYmKG0oaC5ib3VuZGluZ1NwaGVyZSkmJm0oXy5ib3VuZGluZ1NwaGVyZSkmJih1W2xdPUF0LnVuaW9uKGguYm91bmRpbmdTcGhlcmUsXy5ib3VuZGluZ1NwaGVyZSkpLG0oaC5ib3VuZGluZ1NwaGVyZUNWKSYmbShfLmJvdW5kaW5nU3BoZXJlQ1YpJiYoY1tsXT1BdC51bmlvbihoLmJvdW5kaW5nU3BoZXJlQ1YsXy5ib3VuZGluZ1NwaGVyZUNWKSkpfXJldHVybntnZW9tZXRyaWVzOmUsbW9kZWxNYXRyaXg6dC5tb2RlbE1hdHJpeCxhdHRyaWJ1dGVMb2NhdGlvbnM6bixwaWNrT2Zmc2V0czppLG9mZnNldEluc3RhbmNlRXh0ZW5kOnMsYm91bmRpbmdTcGhlcmVzOnUsYm91bmRpbmdTcGhlcmVzQ1Y6Y319O3ZpLnBhY2tDcmVhdGVHZW9tZXRyeVJlc3VsdHM9ZnVuY3Rpb24odCxlKXtsZXQgbj1uZXcgRmxvYXQ2NEFycmF5KEdNKHQpKSxvPVtdLHI9e30saT10Lmxlbmd0aCxzPTA7bltzKytdPWk7Zm9yKGxldCBmPTA7ZjxpO2YrKyl7bGV0IHU9dFtmXSxjPW0odSk7aWYobltzKytdPWM/MTowLCFjKWNvbnRpbnVlO25bcysrXT11LnByaW1pdGl2ZVR5cGUsbltzKytdPXUuZ2VvbWV0cnlUeXBlLG5bcysrXT11Lm9mZnNldEF0dHJpYnV0ZT8/LTE7bGV0IGw9bSh1LmJvdW5kaW5nU3BoZXJlKT8xOjA7bltzKytdPWwsbCYmQXQucGFjayh1LmJvdW5kaW5nU3BoZXJlLG4scykscys9QXQucGFja2VkTGVuZ3RoO2xldCBwPW0odS5ib3VuZGluZ1NwaGVyZUNWKT8xOjA7bltzKytdPXAscCYmQXQucGFjayh1LmJvdW5kaW5nU3BoZXJlQ1YsbixzKSxzKz1BdC5wYWNrZWRMZW5ndGg7bGV0IGQ9dS5hdHRyaWJ1dGVzLGg9W107Zm9yKGxldCBnIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShnKSYmbShkW2ddKSYmKGgucHVzaChnKSxtKHJbZ10pfHwocltnXT1vLmxlbmd0aCxvLnB1c2goZykpKTtuW3MrK109aC5sZW5ndGg7Zm9yKGxldCBnPTA7ZzxoLmxlbmd0aDtnKyspe2xldCBiPWhbZ10sdz1kW2JdO25bcysrXT1yW2JdLG5bcysrXT13LmNvbXBvbmVudERhdGF0eXBlLG5bcysrXT13LmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsbltzKytdPXcubm9ybWFsaXplPzE6MCxuW3MrK109dy52YWx1ZXMubGVuZ3RoLG4uc2V0KHcudmFsdWVzLHMpLHMrPXcudmFsdWVzLmxlbmd0aH1sZXQgXz1tKHUuaW5kaWNlcyk/dS5pbmRpY2VzLmxlbmd0aDowO25bcysrXT1fLF8+MCYmKG4uc2V0KHUuaW5kaWNlcyxzKSxzKz1fKX1yZXR1cm4gZS5wdXNoKG4uYnVmZmVyKSx7c3RyaW5nVGFibGU6byxwYWNrZWREYXRhOm59fTt2aS51bnBhY2tDcmVhdGVHZW9tZXRyeVJlc3VsdHM9ZnVuY3Rpb24odCl7bGV0IGU9dC5zdHJpbmdUYWJsZSxuPXQucGFja2VkRGF0YSxvLHI9bmV3IEFycmF5KG5bMF0pLGk9MCxzPTE7Zm9yKDtzPG4ubGVuZ3RoOyl7aWYoIShuW3MrK109PT0xKSl7cltpKytdPXZvaWQgMDtjb250aW51ZX1sZXQgdT1uW3MrK10sYz1uW3MrK10sbD1uW3MrK107bD09PS0xJiYobD12b2lkIDApO2xldCBwLGQ7bltzKytdPT09MSYmKHA9QXQudW5wYWNrKG4scykpLHMrPUF0LnBhY2tlZExlbmd0aCxuW3MrK109PT0xJiYoZD1BdC51bnBhY2sobixzKSkscys9QXQucGFja2VkTGVuZ3RoO2xldCBnLGIsdyxPPW5ldyBpZSxFPW5bcysrXTtmb3Iobz0wO288RTtvKyspe2xldCB4PWVbbltzKytdXSxNPW5bcysrXTt3PW5bcysrXTtsZXQgTj1uW3MrK10hPT0wO2c9bltzKytdLGI9ZXQuY3JlYXRlVHlwZWRBcnJheShNLGcpO2ZvcihsZXQgRj0wO0Y8ZztGKyspYltGXT1uW3MrK107T1t4XT1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOk0sY29tcG9uZW50c1BlckF0dHJpYnV0ZTp3LG5vcm1hbGl6ZTpOLHZhbHVlczpifSl9bGV0IFQ7aWYoZz1uW3MrK10sZz4wKXtsZXQgeD1iLmxlbmd0aC93O2ZvcihUPUx0LmNyZWF0ZVR5cGVkQXJyYXkoeCxnKSxvPTA7bzxnO28rKylUW29dPW5bcysrXX1yW2krK109bmV3IFV0KHtwcmltaXRpdmVUeXBlOnUsZ2VvbWV0cnlUeXBlOmMsYm91bmRpbmdTcGhlcmU6cCxib3VuZGluZ1NwaGVyZUNWOmQsaW5kaWNlczpULGF0dHJpYnV0ZXM6TyxvZmZzZXRBdHRyaWJ1dGU6bH0pfXJldHVybiByfTt2aS5wYWNrQ29tYmluZUdlb21ldHJ5UGFyYW1ldGVycz1mdW5jdGlvbih0LGUpe2xldCBuPXQuY3JlYXRlR2VvbWV0cnlSZXN1bHRzLG89bi5sZW5ndGg7Zm9yKGxldCByPTA7cjxvO3IrKyllLnB1c2gobltyXS5wYWNrZWREYXRhLmJ1ZmZlcik7cmV0dXJue2NyZWF0ZUdlb21ldHJ5UmVzdWx0czp0LmNyZWF0ZUdlb21ldHJ5UmVzdWx0cyxwYWNrZWRJbnN0YW5jZXM6Vk0odC5pbnN0YW5jZXMsZSksZWxsaXBzb2lkOnQuZWxsaXBzb2lkLGlzR2VvZ3JhcGhpYzp0LnByb2plY3Rpb24gaW5zdGFuY2VvZiBlbyxlbGVtZW50SW5kZXhVaW50U3VwcG9ydGVkOnQuZWxlbWVudEluZGV4VWludFN1cHBvcnRlZCxzY2VuZTNET25seTp0LnNjZW5lM0RPbmx5LHZlcnRleENhY2hlT3B0aW1pemU6dC52ZXJ0ZXhDYWNoZU9wdGltaXplLGNvbXByZXNzVmVydGljZXM6dC5jb21wcmVzc1ZlcnRpY2VzLG1vZGVsTWF0cml4OnQubW9kZWxNYXRyaXgsY3JlYXRlUGlja09mZnNldHM6dC5jcmVhdGVQaWNrT2Zmc2V0c319O3ZpLnVucGFja0NvbWJpbmVHZW9tZXRyeVBhcmFtZXRlcnM9ZnVuY3Rpb24odCl7bGV0IGU9ek0odC5wYWNrZWRJbnN0YW5jZXMpLG49dC5jcmVhdGVHZW9tZXRyeVJlc3VsdHMsbz1uLmxlbmd0aCxyPTA7Zm9yKGxldCBmPTA7ZjxvO2YrKyl7bGV0IHU9dmkudW5wYWNrQ3JlYXRlR2VvbWV0cnlSZXN1bHRzKG5bZl0pLGM9dS5sZW5ndGg7Zm9yKGxldCBsPTA7bDxjO2wrKyl7bGV0IHA9dVtsXSxkPWVbcl07ZC5nZW9tZXRyeT1wLCsrcn19bGV0IGk9WS5jbG9uZSh0LmVsbGlwc29pZCkscz10LmlzR2VvZ3JhcGhpYz9uZXcgZW8oaSk6bmV3IHJvKGkpO3JldHVybntpbnN0YW5jZXM6ZSxlbGxpcHNvaWQ6aSxwcm9qZWN0aW9uOnMsZWxlbWVudEluZGV4VWludFN1cHBvcnRlZDp0LmVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQsc2NlbmUzRE9ubHk6dC5zY2VuZTNET25seSx2ZXJ0ZXhDYWNoZU9wdGltaXplOnQudmVydGV4Q2FjaGVPcHRpbWl6ZSxjb21wcmVzc1ZlcnRpY2VzOnQuY29tcHJlc3NWZXJ0aWNlcyxtb2RlbE1hdHJpeDpzdC5jbG9uZSh0Lm1vZGVsTWF0cml4KSxjcmVhdGVQaWNrT2Zmc2V0czp0LmNyZWF0ZVBpY2tPZmZzZXRzfX07dmkucGFja0NvbWJpbmVHZW9tZXRyeVJlc3VsdHM9ZnVuY3Rpb24odCxlKXttKHQuZ2VvbWV0cmllcykmJmtNKHQuZ2VvbWV0cmllcyxlKTtsZXQgbj1kdyh0LmJvdW5kaW5nU3BoZXJlcyksbz1kdyh0LmJvdW5kaW5nU3BoZXJlc0NWKTtyZXR1cm4gZS5wdXNoKG4uYnVmZmVyLG8uYnVmZmVyKSx7Z2VvbWV0cmllczp0Lmdlb21ldHJpZXMsYXR0cmlidXRlTG9jYXRpb25zOnQuYXR0cmlidXRlTG9jYXRpb25zLG1vZGVsTWF0cml4OnQubW9kZWxNYXRyaXgscGlja09mZnNldHM6dC5waWNrT2Zmc2V0cyxvZmZzZXRJbnN0YW5jZUV4dGVuZDp0Lm9mZnNldEluc3RhbmNlRXh0ZW5kLGJvdW5kaW5nU3BoZXJlczpuLGJvdW5kaW5nU3BoZXJlc0NWOm99fTt2aS51bnBhY2tDb21iaW5lR2VvbWV0cnlSZXN1bHRzPWZ1bmN0aW9uKHQpe3JldHVybntnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcyxhdHRyaWJ1dGVMb2NhdGlvbnM6dC5hdHRyaWJ1dGVMb2NhdGlvbnMsbW9kZWxNYXRyaXg6dC5tb2RlbE1hdHJpeCxwaWNrT2Zmc2V0czp0LnBpY2tPZmZzZXRzLG9mZnNldEluc3RhbmNlRXh0ZW5kOnQub2Zmc2V0SW5zdGFuY2VFeHRlbmQsYm91bmRpbmdTcGhlcmVzOm13KHQuYm91bmRpbmdTcGhlcmVzKSxib3VuZGluZ1NwaGVyZXNDVjptdyh0LmJvdW5kaW5nU3BoZXJlc0NWKX19O2NhPXZpfSk7ZnVuY3Rpb24gak0odCl7bGV0IGUsbj10Lm5hbWUsbz10Lm1lc3NhZ2U7bShuKSYmbShvKT9lPWAke259OiAke299YDplPXQudG9TdHJpbmcoKTtsZXQgcj10LnN0YWNrO3JldHVybiBtKHIpJiYoZSs9YAoke3J9YCksZX12YXIgaHcsX3c9JCgoKT0+e2Z0KCk7aHc9ak19KTt2YXIgYzA9e307bGUoYzAse2RlZmF1bHQ6KCk9PlVlfSk7ZnVuY3Rpb24gSE0odCl7YXN5bmMgZnVuY3Rpb24gZSh7ZGF0YTpvfSl7bGV0IHI9W10saT17aWQ6by5pZCxyZXN1bHQ6dm9pZCAwLGVycm9yOnZvaWQgMH07c2VsZi5DRVNJVU1fQkFTRV9VUkw9by5iYXNlVXJsO3RyeXtsZXQgcz1hd2FpdCB0KG8ucGFyYW1ldGVycyxyKTtpLnJlc3VsdD1zfWNhdGNoKHMpe3MgaW5zdGFuY2VvZiBFcnJvcj9pLmVycm9yPXtuYW1lOnMubmFtZSxtZXNzYWdlOnMubWVzc2FnZSxzdGFjazpzLnN0YWNrfTppLmVycm9yPXN9by5jYW5UcmFuc2ZlckFycmF5QnVmZmVyfHwoci5sZW5ndGg9MCk7dHJ5e3Bvc3RNZXNzYWdlKGkscil9Y2F0Y2gocyl7aS5yZXN1bHQ9dm9pZCAwLGkuZXJyb3I9YHBvc3RNZXNzYWdlIGZhaWxlZCB3aXRoIGVycm9yOiAke2h3KHMpfQogIHdpdGggcmVzcG9uc2VNZXNzYWdlOiAke0pTT04uc3RyaW5naWZ5KGkpfWAscG9zdE1lc3NhZ2UoaSl9fWZ1bmN0aW9uIG4obyl7cG9zdE1lc3NhZ2Uoe2lkOm8uZGF0YT8uaWQsZXJyb3I6YHBvc3RNZXNzYWdlIGZhaWxlZCB3aXRoIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KG8pfWB9KX1yZXR1cm4gc2VsZi5vbm1lc3NhZ2U9ZSxzZWxmLm9ubWVzc2FnZWVycm9yPW4sc2VsZn12YXIgVWUsWm49JCgoKT0+e193KCk7VWU9SE19KTt2YXIgYTA9e307bGUoYTAse2RlZmF1bHQ6KCk9PktNfSk7ZnVuY3Rpb24gcU0odCxlKXtsZXQgbj1jYS51bnBhY2tDb21iaW5lR2VvbWV0cnlQYXJhbWV0ZXJzKHQpLG89Y2EuY29tYmluZUdlb21ldHJ5KG4pO3JldHVybiBjYS5wYWNrQ29tYmluZUdlb21ldHJ5UmVzdWx0cyhvLGUpfXZhciBLTSxmMD0kKCgpPT57czAoKTtabigpO0tNPVVlKHFNKX0pO3ZhciBXTSxhZSxEbz0kKCgpPT57V009e05PTkU6MCxUT1A6MSxBTEw6Mn0sYWU9T2JqZWN0LmZyZWV6ZShXTSl9KTtmdW5jdGlvbiB6bih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx0aGlzLnBvc2l0aW9uPXQucG9zaXRpb24/PyExLHRoaXMubm9ybWFsPXQubm9ybWFsPz8hMSx0aGlzLnN0PXQuc3Q/PyExLHRoaXMuYml0YW5nZW50PXQuYml0YW5nZW50Pz8hMSx0aGlzLnRhbmdlbnQ9dC50YW5nZW50Pz8hMSx0aGlzLmNvbG9yPXQuY29sb3I/PyExfXZhciBwdCx4bz0kKCgpPT57eWUoKTtmdCgpO0h0KCk7em4uUE9TSVRJT05fT05MWT1PYmplY3QuZnJlZXplKG5ldyB6bih7cG9zaXRpb246ITB9KSk7em4uUE9TSVRJT05fQU5EX05PUk1BTD1PYmplY3QuZnJlZXplKG5ldyB6bih7cG9zaXRpb246ITAsbm9ybWFsOiEwfSkpO3puLlBPU0lUSU9OX05PUk1BTF9BTkRfU1Q9T2JqZWN0LmZyZWV6ZShuZXcgem4oe3Bvc2l0aW9uOiEwLG5vcm1hbDohMCxzdDohMH0pKTt6bi5QT1NJVElPTl9BTkRfU1Q9T2JqZWN0LmZyZWV6ZShuZXcgem4oe3Bvc2l0aW9uOiEwLHN0OiEwfSkpO3puLlBPU0lUSU9OX0FORF9DT0xPUj1PYmplY3QuZnJlZXplKG5ldyB6bih7cG9zaXRpb246ITAsY29sb3I6ITB9KSk7em4uQUxMPU9iamVjdC5mcmVlemUobmV3IHpuKHtwb3NpdGlvbjohMCxub3JtYWw6ITAsc3Q6ITAsdGFuZ2VudDohMCxiaXRhbmdlbnQ6ITB9KSk7em4uREVGQVVMVD16bi5QT1NJVElPTl9OT1JNQUxfQU5EX1NUO3puLnBhY2tlZExlbmd0aD02O3puLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBuPW4/PzAsZVtuKytdPXQucG9zaXRpb24/MTowLGVbbisrXT10Lm5vcm1hbD8xOjAsZVtuKytdPXQuc3Q/MTowLGVbbisrXT10LnRhbmdlbnQ/MTowLGVbbisrXT10LmJpdGFuZ2VudD8xOjAsZVtuXT10LmNvbG9yPzE6MCxlfTt6bi51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBlPWU/PzAsbShuKXx8KG49bmV3IHpuKSxuLnBvc2l0aW9uPXRbZSsrXT09PTEsbi5ub3JtYWw9dFtlKytdPT09MSxuLnN0PXRbZSsrXT09PTEsbi50YW5nZW50PXRbZSsrXT09PTEsbi5iaXRhbmdlbnQ9dFtlKytdPT09MSxuLmNvbG9yPXRbZV09PT0xLG59O3puLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYobSh0KSlyZXR1cm4gbShlKXx8KGU9bmV3IHpuKSxlLnBvc2l0aW9uPXQucG9zaXRpb24sZS5ub3JtYWw9dC5ub3JtYWwsZS5zdD10LnN0LGUudGFuZ2VudD10LnRhbmdlbnQsZS5iaXRhbmdlbnQ9dC5iaXRhbmdlbnQsZS5jb2xvcj10LmNvbG9yLGV9O3B0PXpufSk7ZnVuY3Rpb24gaXIodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5taW5pbXVtLG49dC5tYXhpbXVtO2lmKHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbiksbSh0Lm9mZnNldEF0dHJpYnV0ZSkmJnQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXRocm93IG5ldyBEKCJHZW9tZXRyeU9mZnNldEF0dHJpYnV0ZS5UT1AgaXMgbm90IGEgc3VwcG9ydGVkIG9wdGlvbnMub2Zmc2V0QXR0cmlidXRlIGZvciB0aGlzIGdlb21ldHJ5LiIpO2xldCBvPXQudmVydGV4Rm9ybWF0Pz9wdC5ERUZBVUxUO3RoaXMuX21pbmltdW09YS5jbG9uZShlKSx0aGlzLl9tYXhpbXVtPWEuY2xvbmUobiksdGhpcy5fdmVydGV4Rm9ybWF0PW8sdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUJveEdlb21ldHJ5In12YXIgWE0sZ3csQXcsYncseXcsdTAseGYsbDA9JCgoKT0+e3ZlKCk7RHQoKTtXdCgpO0RlKCk7eWUoKTtmdCgpO0h0KCk7WWUoKTskZSgpO2FuKCk7RG8oKTt0bigpO3hvKCk7WE09bmV3IGE7aXIuZnJvbURpbWVuc2lvbnM9ZnVuY3Rpb24odCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5kaW1lbnNpb25zO3kudHlwZU9mLm9iamVjdCgiZGltZW5zaW9ucyIsZSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImRpbWVuc2lvbnMueCIsZS54LDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJkaW1lbnNpb25zLnkiLGUueSwwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZGltZW5zaW9ucy56IixlLnosMCk7bGV0IG49YS5tdWx0aXBseUJ5U2NhbGFyKGUsLjUsbmV3IGEpO3JldHVybiBuZXcgaXIoe21pbmltdW06YS5uZWdhdGUobixuZXcgYSksbWF4aW11bTpuLHZlcnRleEZvcm1hdDp0LnZlcnRleEZvcm1hdCxvZmZzZXRBdHRyaWJ1dGU6dC5vZmZzZXRBdHRyaWJ1dGV9KX07aXIuZnJvbUF4aXNBbGlnbmVkQm91bmRpbmdCb3g9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiYm91bmRpbmdCb3giLHQpLG5ldyBpcih7bWluaW11bTp0Lm1pbmltdW0sbWF4aW11bTp0Lm1heGltdW19KX07aXIucGFja2VkTGVuZ3RoPTIqYS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RoKzE7aXIucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxhLnBhY2sodC5fbWluaW11bSxlLG4pLGEucGFjayh0Ll9tYXhpbXVtLGUsbithLnBhY2tlZExlbmd0aCkscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKzIqYS5wYWNrZWRMZW5ndGgpLGVbbisyKmEucGFja2VkTGVuZ3RoK3B0LnBhY2tlZExlbmd0aF09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtndz1uZXcgYSxBdz1uZXcgYSxidz1uZXcgcHQseXc9e21pbmltdW06Z3csbWF4aW11bTpBdyx2ZXJ0ZXhGb3JtYXQ6Yncsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07aXIudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89YS51bnBhY2sodCxlLGd3KSxyPWEudW5wYWNrKHQsZSthLnBhY2tlZExlbmd0aCxBdyksaT1wdC51bnBhY2sodCxlKzIqYS5wYWNrZWRMZW5ndGgsYncpLHM9dFtlKzIqYS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RoXTtyZXR1cm4gbShuKT8obi5fbWluaW11bT1hLmNsb25lKG8sbi5fbWluaW11bSksbi5fbWF4aW11bT1hLmNsb25lKHIsbi5fbWF4aW11bSksbi5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKGksbi5fdmVydGV4Rm9ybWF0KSxuLl9vZmZzZXRBdHRyaWJ1dGU9cz09PS0xP3ZvaWQgMDpzLG4pOih5dy5vZmZzZXRBdHRyaWJ1dGU9cz09PS0xP3ZvaWQgMDpzLG5ldyBpcih5dykpfTtpci5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9taW5pbXVtLG49dC5fbWF4aW11bSxvPXQuX3ZlcnRleEZvcm1hdDtpZihhLmVxdWFscyhlLG4pKXJldHVybjtsZXQgcj1uZXcgaWUsaSxzO2lmKG8ucG9zaXRpb24mJihvLnN0fHxvLm5vcm1hbHx8by50YW5nZW50fHxvLmJpdGFuZ2VudCkpe2lmKG8ucG9zaXRpb24mJihzPW5ldyBGbG9hdDY0QXJyYXkoNzIpLHNbMF09ZS54LHNbMV09ZS55LHNbMl09bi56LHNbM109bi54LHNbNF09ZS55LHNbNV09bi56LHNbNl09bi54LHNbN109bi55LHNbOF09bi56LHNbOV09ZS54LHNbMTBdPW4ueSxzWzExXT1uLnosc1sxMl09ZS54LHNbMTNdPWUueSxzWzE0XT1lLnosc1sxNV09bi54LHNbMTZdPWUueSxzWzE3XT1lLnosc1sxOF09bi54LHNbMTldPW4ueSxzWzIwXT1lLnosc1syMV09ZS54LHNbMjJdPW4ueSxzWzIzXT1lLnosc1syNF09bi54LHNbMjVdPWUueSxzWzI2XT1lLnosc1syN109bi54LHNbMjhdPW4ueSxzWzI5XT1lLnosc1szMF09bi54LHNbMzFdPW4ueSxzWzMyXT1uLnosc1szM109bi54LHNbMzRdPWUueSxzWzM1XT1uLnosc1szNl09ZS54LHNbMzddPWUueSxzWzM4XT1lLnosc1szOV09ZS54LHNbNDBdPW4ueSxzWzQxXT1lLnosc1s0Ml09ZS54LHNbNDNdPW4ueSxzWzQ0XT1uLnosc1s0NV09ZS54LHNbNDZdPWUueSxzWzQ3XT1uLnosc1s0OF09ZS54LHNbNDldPW4ueSxzWzUwXT1lLnosc1s1MV09bi54LHNbNTJdPW4ueSxzWzUzXT1lLnosc1s1NF09bi54LHNbNTVdPW4ueSxzWzU2XT1uLnosc1s1N109ZS54LHNbNThdPW4ueSxzWzU5XT1uLnosc1s2MF09ZS54LHNbNjFdPWUueSxzWzYyXT1lLnosc1s2M109bi54LHNbNjRdPWUueSxzWzY1XT1lLnosc1s2Nl09bi54LHNbNjddPWUueSxzWzY4XT1uLnosc1s2OV09ZS54LHNbNzBdPWUueSxzWzcxXT1uLnosci5wb3NpdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnN9KSksby5ub3JtYWwpe2xldCBjPW5ldyBGbG9hdDMyQXJyYXkoNzIpO2NbMF09MCxjWzFdPTAsY1syXT0xLGNbM109MCxjWzRdPTAsY1s1XT0xLGNbNl09MCxjWzddPTAsY1s4XT0xLGNbOV09MCxjWzEwXT0wLGNbMTFdPTEsY1sxMl09MCxjWzEzXT0wLGNbMTRdPS0xLGNbMTVdPTAsY1sxNl09MCxjWzE3XT0tMSxjWzE4XT0wLGNbMTldPTAsY1syMF09LTEsY1syMV09MCxjWzIyXT0wLGNbMjNdPS0xLGNbMjRdPTEsY1syNV09MCxjWzI2XT0wLGNbMjddPTEsY1syOF09MCxjWzI5XT0wLGNbMzBdPTEsY1szMV09MCxjWzMyXT0wLGNbMzNdPTEsY1szNF09MCxjWzM1XT0wLGNbMzZdPS0xLGNbMzddPTAsY1szOF09MCxjWzM5XT0tMSxjWzQwXT0wLGNbNDFdPTAsY1s0Ml09LTEsY1s0M109MCxjWzQ0XT0wLGNbNDVdPS0xLGNbNDZdPTAsY1s0N109MCxjWzQ4XT0wLGNbNDldPTEsY1s1MF09MCxjWzUxXT0wLGNbNTJdPTEsY1s1M109MCxjWzU0XT0wLGNbNTVdPTEsY1s1Nl09MCxjWzU3XT0wLGNbNThdPTEsY1s1OV09MCxjWzYwXT0wLGNbNjFdPS0xLGNbNjJdPTAsY1s2M109MCxjWzY0XT0tMSxjWzY1XT0wLGNbNjZdPTAsY1s2N109LTEsY1s2OF09MCxjWzY5XT0wLGNbNzBdPS0xLGNbNzFdPTAsci5ub3JtYWw9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KX1pZihvLnN0KXtsZXQgYz1uZXcgRmxvYXQzMkFycmF5KDQ4KTtjWzBdPTAsY1sxXT0wLGNbMl09MSxjWzNdPTAsY1s0XT0xLGNbNV09MSxjWzZdPTAsY1s3XT0xLGNbOF09MSxjWzldPTAsY1sxMF09MCxjWzExXT0wLGNbMTJdPTAsY1sxM109MSxjWzE0XT0xLGNbMTVdPTEsY1sxNl09MCxjWzE3XT0wLGNbMThdPTEsY1sxOV09MCxjWzIwXT0xLGNbMjFdPTEsY1syMl09MCxjWzIzXT0xLGNbMjRdPTEsY1syNV09MCxjWzI2XT0wLGNbMjddPTAsY1syOF09MCxjWzI5XT0xLGNbMzBdPTEsY1szMV09MSxjWzMyXT0xLGNbMzNdPTAsY1szNF09MCxjWzM1XT0wLGNbMzZdPTAsY1szN109MSxjWzM4XT0xLGNbMzldPTEsY1s0MF09MCxjWzQxXT0wLGNbNDJdPTEsY1s0M109MCxjWzQ0XT0xLGNbNDVdPTEsY1s0Nl09MCxjWzQ3XT0xLHIuc3Q9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmN9KX1pZihvLnRhbmdlbnQpe2xldCBjPW5ldyBGbG9hdDMyQXJyYXkoNzIpO2NbMF09MSxjWzFdPTAsY1syXT0wLGNbM109MSxjWzRdPTAsY1s1XT0wLGNbNl09MSxjWzddPTAsY1s4XT0wLGNbOV09MSxjWzEwXT0wLGNbMTFdPTAsY1sxMl09LTEsY1sxM109MCxjWzE0XT0wLGNbMTVdPS0xLGNbMTZdPTAsY1sxN109MCxjWzE4XT0tMSxjWzE5XT0wLGNbMjBdPTAsY1syMV09LTEsY1syMl09MCxjWzIzXT0wLGNbMjRdPTAsY1syNV09MSxjWzI2XT0wLGNbMjddPTAsY1syOF09MSxjWzI5XT0wLGNbMzBdPTAsY1szMV09MSxjWzMyXT0wLGNbMzNdPTAsY1szNF09MSxjWzM1XT0wLGNbMzZdPTAsY1szN109LTEsY1szOF09MCxjWzM5XT0wLGNbNDBdPS0xLGNbNDFdPTAsY1s0Ml09MCxjWzQzXT0tMSxjWzQ0XT0wLGNbNDVdPTAsY1s0Nl09LTEsY1s0N109MCxjWzQ4XT0tMSxjWzQ5XT0wLGNbNTBdPTAsY1s1MV09LTEsY1s1Ml09MCxjWzUzXT0wLGNbNTRdPS0xLGNbNTVdPTAsY1s1Nl09MCxjWzU3XT0tMSxjWzU4XT0wLGNbNTldPTAsY1s2MF09MSxjWzYxXT0wLGNbNjJdPTAsY1s2M109MSxjWzY0XT0wLGNbNjVdPTAsY1s2Nl09MSxjWzY3XT0wLGNbNjhdPTAsY1s2OV09MSxjWzcwXT0wLGNbNzFdPTAsci50YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpjfSl9aWYoby5iaXRhbmdlbnQpe2xldCBjPW5ldyBGbG9hdDMyQXJyYXkoNzIpO2NbMF09MCxjWzFdPTEsY1syXT0wLGNbM109MCxjWzRdPTEsY1s1XT0wLGNbNl09MCxjWzddPTEsY1s4XT0wLGNbOV09MCxjWzEwXT0xLGNbMTFdPTAsY1sxMl09MCxjWzEzXT0xLGNbMTRdPTAsY1sxNV09MCxjWzE2XT0xLGNbMTddPTAsY1sxOF09MCxjWzE5XT0xLGNbMjBdPTAsY1syMV09MCxjWzIyXT0xLGNbMjNdPTAsY1syNF09MCxjWzI1XT0wLGNbMjZdPTEsY1syN109MCxjWzI4XT0wLGNbMjldPTEsY1szMF09MCxjWzMxXT0wLGNbMzJdPTEsY1szM109MCxjWzM0XT0wLGNbMzVdPTEsY1szNl09MCxjWzM3XT0wLGNbMzhdPTEsY1szOV09MCxjWzQwXT0wLGNbNDFdPTEsY1s0Ml09MCxjWzQzXT0wLGNbNDRdPTEsY1s0NV09MCxjWzQ2XT0wLGNbNDddPTEsY1s0OF09MCxjWzQ5XT0wLGNbNTBdPTEsY1s1MV09MCxjWzUyXT0wLGNbNTNdPTEsY1s1NF09MCxjWzU1XT0wLGNbNTZdPTEsY1s1N109MCxjWzU4XT0wLGNbNTldPTEsY1s2MF09MCxjWzYxXT0wLGNbNjJdPTEsY1s2M109MCxjWzY0XT0wLGNbNjVdPTEsY1s2Nl09MCxjWzY3XT0wLGNbNjhdPTEsY1s2OV09MCxjWzcwXT0wLGNbNzFdPTEsci5iaXRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KX1pPW5ldyBVaW50MTZBcnJheSgzNiksaVswXT0wLGlbMV09MSxpWzJdPTIsaVszXT0wLGlbNF09MixpWzVdPTMsaVs2XT02LGlbN109NSxpWzhdPTQsaVs5XT03LGlbMTBdPTYsaVsxMV09NCxpWzEyXT04LGlbMTNdPTksaVsxNF09MTAsaVsxNV09OCxpWzE2XT0xMCxpWzE3XT0xMSxpWzE4XT0xNCxpWzE5XT0xMyxpWzIwXT0xMixpWzIxXT0xNSxpWzIyXT0xNCxpWzIzXT0xMixpWzI0XT0xOCxpWzI1XT0xNyxpWzI2XT0xNixpWzI3XT0xOSxpWzI4XT0xOCxpWzI5XT0xNixpWzMwXT0yMCxpWzMxXT0yMSxpWzMyXT0yMixpWzMzXT0yMCxpWzM0XT0yMixpWzM1XT0yM31lbHNlIHM9bmV3IEZsb2F0NjRBcnJheSgyNCksc1swXT1lLngsc1sxXT1lLnksc1syXT1lLnosc1szXT1uLngsc1s0XT1lLnksc1s1XT1lLnosc1s2XT1uLngsc1s3XT1uLnksc1s4XT1lLnosc1s5XT1lLngsc1sxMF09bi55LHNbMTFdPWUueixzWzEyXT1lLngsc1sxM109ZS55LHNbMTRdPW4ueixzWzE1XT1uLngsc1sxNl09ZS55LHNbMTddPW4ueixzWzE4XT1uLngsc1sxOV09bi55LHNbMjBdPW4ueixzWzIxXT1lLngsc1syMl09bi55LHNbMjNdPW4ueixyLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6c30pLGk9bmV3IFVpbnQxNkFycmF5KDM2KSxpWzBdPTQsaVsxXT01LGlbMl09NixpWzNdPTQsaVs0XT02LGlbNV09NyxpWzZdPTEsaVs3XT0wLGlbOF09MyxpWzldPTEsaVsxMF09MyxpWzExXT0yLGlbMTJdPTEsaVsxM109NixpWzE0XT01LGlbMTVdPTEsaVsxNl09MixpWzE3XT02LGlbMThdPTIsaVsxOV09MyxpWzIwXT03LGlbMjFdPTIsaVsyMl09NyxpWzIzXT02LGlbMjRdPTMsaVsyNV09MCxpWzI2XT00LGlbMjddPTMsaVsyOF09NCxpWzI5XT03LGlbMzBdPTAsaVszMV09MSxpWzMyXT01LGlbMzNdPTAsaVszNF09NSxpWzM1XT00O2xldCBmPWEuc3VidHJhY3QobixlLFhNKSx1PWEubWFnbml0dWRlKGYpKi41O2lmKG0odC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGM9cy5sZW5ndGgsbD10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxwPW5ldyBVaW50OEFycmF5KGMvMykuZmlsbChsKTtyLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnB9KX1yZXR1cm4gbmV3IFV0KHthdHRyaWJ1dGVzOnIsaW5kaWNlczppLHByaW1pdGl2ZVR5cGU6QnQuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOm5ldyBBdChhLlpFUk8sdSksb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtpci5nZXRVbml0Qm94PWZ1bmN0aW9uKCl7cmV0dXJuIG0odTApfHwodTA9aXIuY3JlYXRlR2VvbWV0cnkoaXIuZnJvbURpbWVuc2lvbnMoe2RpbWVuc2lvbnM6bmV3IGEoMSwxLDEpLHZlcnRleEZvcm1hdDpwdC5QT1NJVElPTl9PTkxZfSkpKSx1MH07eGY9aXJ9KTt2YXIgcDA9e307bGUocDAse2RlZmF1bHQ6KCk9PiRNfSk7ZnVuY3Rpb24gWU0odCxlKXtyZXR1cm4gbShlKSYmKHQ9eGYudW5wYWNrKHQsZSkpLHhmLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciAkTSxkMD0kKCgpPT57bDAoKTtmdCgpOyRNPVlNfSk7ZnVuY3Rpb24gYWkodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5taW5pbXVtLG49dC5tYXhpbXVtO2lmKHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbiksbSh0Lm9mZnNldEF0dHJpYnV0ZSkmJnQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXRocm93IG5ldyBEKCJHZW9tZXRyeU9mZnNldEF0dHJpYnV0ZS5UT1AgaXMgbm90IGEgc3VwcG9ydGVkIG9wdGlvbnMub2Zmc2V0QXR0cmlidXRlIGZvciB0aGlzIGdlb21ldHJ5LiIpO3RoaXMuX21pbj1hLmNsb25lKGUpLHRoaXMuX21heD1hLmNsb25lKG4pLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVCb3hPdXRsaW5lR2VvbWV0cnkifXZhciBaTSxUdyxPdyx3dyxtMCxFdz0kKCgpPT57dmUoKTtEdCgpO1d0KCk7RGUoKTt5ZSgpO2Z0KCk7SHQoKTtZZSgpOyRlKCk7YW4oKTtEbygpO3RuKCk7Wk09bmV3IGE7YWkuZnJvbURpbWVuc2lvbnM9ZnVuY3Rpb24odCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5kaW1lbnNpb25zO3kudHlwZU9mLm9iamVjdCgiZGltZW5zaW9ucyIsZSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImRpbWVuc2lvbnMueCIsZS54LDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJkaW1lbnNpb25zLnkiLGUueSwwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZGltZW5zaW9ucy56IixlLnosMCk7bGV0IG49YS5tdWx0aXBseUJ5U2NhbGFyKGUsLjUsbmV3IGEpO3JldHVybiBuZXcgYWkoe21pbmltdW06YS5uZWdhdGUobixuZXcgYSksbWF4aW11bTpuLG9mZnNldEF0dHJpYnV0ZTp0Lm9mZnNldEF0dHJpYnV0ZX0pfTthaS5mcm9tQXhpc0FsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJib3VuZGluZEJveCIsdCksbmV3IGFpKHttaW5pbXVtOnQubWluaW11bSxtYXhpbXVtOnQubWF4aW11bX0pfTthaS5wYWNrZWRMZW5ndGg9MiphLnBhY2tlZExlbmd0aCsxO2FpLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsYS5wYWNrKHQuX21pbixlLG4pLGEucGFjayh0Ll9tYXgsZSxuK2EucGFja2VkTGVuZ3RoKSxlW24rYS5wYWNrZWRMZW5ndGgqMl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtUdz1uZXcgYSxPdz1uZXcgYSx3dz17bWluaW11bTpUdyxtYXhpbXVtOk93LG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2FpLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wO2xldCBvPWEudW5wYWNrKHQsZSxUdykscj1hLnVucGFjayh0LGUrYS5wYWNrZWRMZW5ndGgsT3cpLGk9dFtlK2EucGFja2VkTGVuZ3RoKjJdO3JldHVybiBtKG4pPyhuLl9taW49YS5jbG9uZShvLG4uX21pbiksbi5fbWF4PWEuY2xvbmUocixuLl9tYXgpLG4uX29mZnNldEF0dHJpYnV0ZT1pPT09LTE/dm9pZCAwOmksbik6KHd3Lm9mZnNldEF0dHJpYnV0ZT1pPT09LTE/dm9pZCAwOmksbmV3IGFpKHd3KSl9O2FpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX21pbixuPXQuX21heDtpZihhLmVxdWFscyhlLG4pKXJldHVybjtsZXQgbz1uZXcgaWUscj1uZXcgVWludDE2QXJyYXkoMjQpLGk9bmV3IEZsb2F0NjRBcnJheSgyNCk7aVswXT1lLngsaVsxXT1lLnksaVsyXT1lLnosaVszXT1uLngsaVs0XT1lLnksaVs1XT1lLnosaVs2XT1uLngsaVs3XT1uLnksaVs4XT1lLnosaVs5XT1lLngsaVsxMF09bi55LGlbMTFdPWUueixpWzEyXT1lLngsaVsxM109ZS55LGlbMTRdPW4ueixpWzE1XT1uLngsaVsxNl09ZS55LGlbMTddPW4ueixpWzE4XT1uLngsaVsxOV09bi55LGlbMjBdPW4ueixpWzIxXT1lLngsaVsyMl09bi55LGlbMjNdPW4ueixvLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aX0pLHJbMF09NCxyWzFdPTUsclsyXT01LHJbM109NixyWzRdPTYscls1XT03LHJbNl09NyxyWzddPTQscls4XT0wLHJbOV09MSxyWzEwXT0xLHJbMTFdPTIsclsxMl09MixyWzEzXT0zLHJbMTRdPTMsclsxNV09MCxyWzE2XT0wLHJbMTddPTQsclsxOF09MSxyWzE5XT01LHJbMjBdPTIsclsyMV09NixyWzIyXT0zLHJbMjNdPTc7bGV0IHM9YS5zdWJ0cmFjdChuLGUsWk0pLGY9YS5tYWduaXR1ZGUocykqLjU7aWYobSh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdT1pLmxlbmd0aCxjPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLGw9bmV3IFVpbnQ4QXJyYXkodS8zKS5maWxsKGMpO28uYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bH0pfXJldHVybiBuZXcgVXQoe2F0dHJpYnV0ZXM6byxpbmRpY2VzOnIscHJpbWl0aXZlVHlwZTpCdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpuZXcgQXQoYS5aRVJPLGYpLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07bTA9YWl9KTt2YXIgaDA9e307bGUoaDAse2RlZmF1bHQ6KCk9PkpNfSk7ZnVuY3Rpb24gUU0odCxlKXtyZXR1cm4gbShlKSYmKHQ9bTAudW5wYWNrKHQsZSkpLG0wLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBKTSxfMD0kKCgpPT57RXcoKTtmdCgpO0pNPVFNfSk7ZnVuY3Rpb24gYWEodCxlLG4sbyxyLGkscyxmLHUsYyl7bGV0IGw9dCtlO2EubXVsdGlwbHlCeVNjYWxhcihvLE1hdGguY29zKGwpLCRwKSxhLm11bHRpcGx5QnlTY2FsYXIobixNYXRoLnNpbihsKSxSdyksYS5hZGQoJHAsUncsJHApO2xldCBwPU1hdGguY29zKHQpO3A9cCpwO2xldCBkPU1hdGguc2luKHQpO2Q9ZCpkO2xldCBfPWkvTWF0aC5zcXJ0KHMqcCtyKmQpL2Y7cmV0dXJuIHRlLmZyb21BeGlzQW5nbGUoJHAsXyxTdyksWi5mcm9tUXVhdGVybmlvbihTdyx4dyksWi5tdWx0aXBseUJ5VmVjdG9yKHh3LHUsYyksYS5ub3JtYWxpemUoYyxjKSxhLm11bHRpcGx5QnlTY2FsYXIoYyxmLGMpLGN9dmFyIGcwLCRwLFJ3LFN3LHh3LEN3LFB3LHkwLHROLGVOLG5OLG9OLFZyLEEwPSQoKCk9PntEdCgpO0t0KCk7VW4oKTtYbygpO2cwPXt9LCRwPW5ldyBhLFJ3PW5ldyBhLFN3PW5ldyB0ZSx4dz1uZXcgWjtDdz1uZXcgYSxQdz1uZXcgYSx5MD1uZXcgYSx0Tj1uZXcgYTtnMC5yYWlzZVBvc2l0aW9uc1RvSGVpZ2h0PWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1lLmVsbGlwc29pZCxyPWUuaGVpZ2h0LGk9ZS5leHRydWRlZEhlaWdodCxzPW4/dC5sZW5ndGgvMyoyOnQubGVuZ3RoLzMsZj1uZXcgRmxvYXQ2NEFycmF5KHMqMyksdT10Lmxlbmd0aCxjPW4/dTowO2ZvcihsZXQgbD0wO2w8dTtsKz0zKXtsZXQgcD1sKzEsZD1sKzIsaD1hLmZyb21BcnJheSh0LGwsQ3cpO28uc2NhbGVUb0dlb2RldGljU3VyZmFjZShoLGgpO2xldCBfPWEuY2xvbmUoaCxQdyksZz1vLmdlb2RldGljU3VyZmFjZU5vcm1hbChoLHROKSxiPWEubXVsdGlwbHlCeVNjYWxhcihnLHIseTApO2EuYWRkKGgsYixoKSxuJiYoYS5tdWx0aXBseUJ5U2NhbGFyKGcsaSxiKSxhLmFkZChfLGIsXyksZltsK2NdPV8ueCxmW3ArY109Xy55LGZbZCtjXT1fLnopLGZbbF09aC54LGZbcF09aC55LGZbZF09aC56fXJldHVybiBmfTtlTj1uZXcgYSxuTj1uZXcgYSxvTj1uZXcgYTtnMC5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucz1mdW5jdGlvbih0LGUsbil7bGV0IG89dC5zZW1pTWlub3JBeGlzLHI9dC5zZW1pTWFqb3JBeGlzLGk9dC5yb3RhdGlvbixzPXQuY2VudGVyLGY9dC5ncmFudWxhcml0eSo4LHU9bypvLGM9cipyLGw9cipvLHA9YS5tYWduaXR1ZGUocyksZD1hLm5vcm1hbGl6ZShzLGVOKSxoPWEuY3Jvc3MoYS5VTklUX1oscyxuTik7aD1hLm5vcm1hbGl6ZShoLGgpO2xldCBfPWEuY3Jvc3MoZCxoLG9OKSxnPTErTWF0aC5jZWlsKFAuUElfT1ZFUl9UV08vZiksYj1QLlBJX09WRVJfVFdPLyhnLTEpLHc9UC5QSV9PVkVSX1RXTy1nKmI7dzwwJiYoZy09TWF0aC5jZWlsKE1hdGguYWJzKHcpL2IpKTtsZXQgTz0yKihnKihnKzIpKSxFPWU/bmV3IEFycmF5KE8qMyk6dm9pZCAwLFQ9MCx4PUN3LE09UHcsTj1nKjQqMyxGPU4tMSxJPTAsdj1uP25ldyBBcnJheShOKTp2b2lkIDAsQixBLFMsQyxMO2Zvcih3PVAuUElfT1ZFUl9UV08seD1hYSh3LGksXyxoLHUsbCxjLHAsZCx4KSxlJiYoRVtUKytdPXgueCxFW1QrK109eC55LEVbVCsrXT14LnopLG4mJih2W0YtLV09eC56LHZbRi0tXT14LnksdltGLS1dPXgueCksdz1QLlBJX09WRVJfVFdPLWIsQj0xO0I8ZysxOysrQil7aWYoeD1hYSh3LGksXyxoLHUsbCxjLHAsZCx4KSxNPWFhKE1hdGguUEktdyxpLF8saCx1LGwsYyxwLGQsTSksZSl7Zm9yKEVbVCsrXT14LngsRVtUKytdPXgueSxFW1QrK109eC56LFM9MipCKzIsQT0xO0E8Uy0xOysrQSlDPUEvKFMtMSksTD1hLmxlcnAoeCxNLEMseTApLEVbVCsrXT1MLngsRVtUKytdPUwueSxFW1QrK109TC56O0VbVCsrXT1NLngsRVtUKytdPU0ueSxFW1QrK109TS56fW4mJih2W0YtLV09eC56LHZbRi0tXT14LnksdltGLS1dPXgueCx2W0krK109TS54LHZbSSsrXT1NLnksdltJKytdPU0ueiksdz1QLlBJX09WRVJfVFdPLShCKzEpKmJ9Zm9yKEI9ZztCPjE7LS1CKXtpZih3PVAuUElfT1ZFUl9UV08tKEItMSkqYix4PWFhKC13LGksXyxoLHUsbCxjLHAsZCx4KSxNPWFhKHcrTWF0aC5QSSxpLF8saCx1LGwsYyxwLGQsTSksZSl7Zm9yKEVbVCsrXT14LngsRVtUKytdPXgueSxFW1QrK109eC56LFM9MiooQi0xKSsyLEE9MTtBPFMtMTsrK0EpQz1BLyhTLTEpLEw9YS5sZXJwKHgsTSxDLHkwKSxFW1QrK109TC54LEVbVCsrXT1MLnksRVtUKytdPUwuejtFW1QrK109TS54LEVbVCsrXT1NLnksRVtUKytdPU0uen1uJiYodltGLS1dPXgueix2W0YtLV09eC55LHZbRi0tXT14LngsdltJKytdPU0ueCx2W0krK109TS55LHZbSSsrXT1NLnopfXc9UC5QSV9PVkVSX1RXTyx4PWFhKC13LGksXyxoLHUsbCxjLHAsZCx4KTtsZXQgej17fTtyZXR1cm4gZSYmKEVbVCsrXT14LngsRVtUKytdPXgueSxFW1QrK109eC56LHoucG9zaXRpb25zPUUsei5udW1QdHM9ZyksbiYmKHZbRi0tXT14LnosdltGLS1dPXgueSx2W0YtLV09eC54LHoub3V0ZXJQb3NpdGlvbnM9diksen07VnI9ZzB9KTtmdW5jdGlvbiByTih0KXtpZih0PXQ/P0l0LkVNUFRZX09CSkVDVCwhbSh0Lmdlb21ldHJ5KSl0aHJvdyBuZXcgRCgib3B0aW9ucy5nZW9tZXRyeSBpcyByZXF1aXJlZC4iKTt0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpcy5tb2RlbE1hdHJpeD1zdC5jbG9uZSh0Lm1vZGVsTWF0cml4Pz9zdC5JREVOVElUWSksdGhpcy5pZD10LmlkLHRoaXMucGlja1ByaW1pdGl2ZT10LnBpY2tQcmltaXRpdmUsdGhpcy5hdHRyaWJ1dGVzPXQuYXR0cmlidXRlcz8/e30sdGhpcy53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5PXZvaWQgMCx0aGlzLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnk9dm9pZCAwfXZhciBmbyxjYz0kKCgpPT57eWUoKTtmdCgpO0h0KCk7a24oKTtmbz1yTn0pO2Z1bmN0aW9uIFV3KHQsZSxuKXtsZXQgbz1lLnZlcnRleEZvcm1hdCxyPWUuY2VudGVyLGk9ZS5zZW1pTWFqb3JBeGlzLHM9ZS5zZW1pTWlub3JBeGlzLGY9ZS5lbGxpcHNvaWQsdT1lLnN0Um90YXRpb24sYz1uP3QubGVuZ3RoLzMqMjp0Lmxlbmd0aC8zLGw9ZS5zaGFkb3dWb2x1bWUscD1vLnN0P25ldyBGbG9hdDMyQXJyYXkoYyoyKTp2b2lkIDAsZD1vLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLGg9by50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoYyozKTp2b2lkIDAsXz1vLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLGc9bD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLGI9MCx3PUl3LE89dncsRT1GdyxUPW5ldyBlbyhmKSx4PVQucHJvamVjdChmLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHIsSnApLEx3KSxNPWYuc2NhbGVUb0dlb2RldGljU3VyZmFjZShyLGZhKTtmLmdlb2RldGljU3VyZmFjZU5vcm1hbChNLE0pO2xldCBOPU53LEY9aU47aWYodSE9PTApe2xldCBMPXRlLmZyb21BeGlzQW5nbGUoTSx1LFQwKTtOPVouZnJvbVF1YXRlcm5pb24oTCxOKSxMPXRlLmZyb21BeGlzQW5nbGUoTSwtdSxUMCksRj1aLmZyb21RdWF0ZXJuaW9uKEwsRil9ZWxzZSBOPVouY2xvbmUoWi5JREVOVElUWSxOKSxGPVouY2xvbmUoWi5JREVOVElUWSxGKTtsZXQgST1KLmZyb21FbGVtZW50cyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLER3KSx2PUouZnJvbUVsZW1lbnRzKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksQncpLEI9dC5sZW5ndGgsQT1uP0I6MCxTPUEvMyoyO2ZvcihsZXQgTD0wO0w8QjtMKz0zKXtsZXQgej1MKzEsaj1MKzIsaz1hLmZyb21BcnJheSh0LEwsZmEpO2lmKG8uc3Qpe2xldCBxPVoubXVsdGlwbHlCeVZlY3RvcihOLGssYjApLFc9VC5wcm9qZWN0KGYuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocSxKcCksdzApO2Euc3VidHJhY3QoVyx4LFcpLFFuLng9KFcueCtpKS8oMippKSxRbi55PShXLnkrcykvKDIqcyksSS54PU1hdGgubWluKFFuLngsSS54KSxJLnk9TWF0aC5taW4oUW4ueSxJLnkpLHYueD1NYXRoLm1heChRbi54LHYueCksdi55PU1hdGgubWF4KFFuLnksdi55KSxuJiYocFtiK1NdPVFuLngscFtiKzErU109UW4ueSkscFtiKytdPVFuLngscFtiKytdPVFuLnl9KG8ubm9ybWFsfHxvLnRhbmdlbnR8fG8uYml0YW5nZW50fHxsKSYmKHc9Zi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoayx3KSxsJiYoZ1tMK0FdPS13LngsZ1t6K0FdPS13LnksZ1tqK0FdPS13LnopLChvLm5vcm1hbHx8by50YW5nZW50fHxvLmJpdGFuZ2VudCkmJigoby50YW5nZW50fHxvLmJpdGFuZ2VudCkmJihPPWEubm9ybWFsaXplKGEuY3Jvc3MoYS5VTklUX1osdyxPKSxPKSxaLm11bHRpcGx5QnlWZWN0b3IoRixPLE8pKSxvLm5vcm1hbCYmKGRbTF09dy54LGRbel09dy55LGRbal09dy56LG4mJihkW0wrQV09LXcueCxkW3orQV09LXcueSxkW2orQV09LXcueikpLG8udGFuZ2VudCYmKGhbTF09Ty54LGhbel09Ty55LGhbal09Ty56LG4mJihoW0wrQV09LU8ueCxoW3orQV09LU8ueSxoW2orQV09LU8ueikpLG8uYml0YW5nZW50JiYoRT1hLm5vcm1hbGl6ZShhLmNyb3NzKHcsTyxFKSxFKSxfW0xdPUUueCxfW3pdPUUueSxfW2pdPUUueixuJiYoX1tMK0FdPUUueCxfW3orQV09RS55LF9baitBXT1FLnopKSkpfWlmKG8uc3Qpe0I9cC5sZW5ndGg7Zm9yKGxldCBMPTA7TDxCO0wrPTIpcFtMXT0ocFtMXS1JLngpLyh2LngtSS54KSxwW0wrMV09KHBbTCsxXS1JLnkpLyh2LnktSS55KX1sZXQgQz1uZXcgaWU7aWYoby5wb3NpdGlvbil7bGV0IEw9VnIucmFpc2VQb3NpdGlvbnNUb0hlaWdodCh0LGUsbik7Qy5wb3NpdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkx9KX1pZihvLnN0JiYoQy5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6cH0pKSxvLm5vcm1hbCYmKEMubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpkfSkpLG8udGFuZ2VudCYmKEMudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aH0pKSxvLmJpdGFuZ2VudCYmKEMuYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpffSkpLGwmJihDLmV4dHJ1ZGVEaXJlY3Rpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmd9KSksbiYmbShlLm9mZnNldEF0dHJpYnV0ZSkpe2xldCBMPW5ldyBVaW50OEFycmF5KGMpO2lmKGUub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKUw9TC5maWxsKDEsMCxjLzIpO2Vsc2V7bGV0IHo9ZS5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MTtMPUwuZmlsbCh6KX1DLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOkx9KX1yZXR1cm4gQ31mdW5jdGlvbiBrdyh0KXtsZXQgZT1uZXcgQXJyYXkoMTIqKHQqKHQrMSkpLTYpLG49MCxvLHIsaSxzLGY7Zm9yKG89MCxpPTEscz0wO3M8MztzKyspZVtuKytdPWkrKyxlW24rK109byxlW24rK109aTtmb3Iocz0yO3M8dCsxOysrcyl7Zm9yKGk9cyoocysxKS0xLG89KHMtMSkqcy0xLGVbbisrXT1pKyssZVtuKytdPW8sZVtuKytdPWkscj0yKnMsZj0wO2Y8ci0xOysrZillW24rK109aSxlW24rK109bysrLGVbbisrXT1vLGVbbisrXT1pKyssZVtuKytdPW8sZVtuKytdPWk7ZVtuKytdPWkrKyxlW24rK109byxlW24rK109aX1mb3Iocj10KjIsKytpLCsrbyxzPTA7czxyLTE7KytzKWVbbisrXT1pLGVbbisrXT1vKyssZVtuKytdPW8sZVtuKytdPWkrKyxlW24rK109byxlW24rK109aTtmb3IoZVtuKytdPWksZVtuKytdPW8rKyxlW24rK109byxlW24rK109aSsrLGVbbisrXT1vKyssZVtuKytdPW8sKytvLHM9dC0xO3M+MTstLXMpe2ZvcihlW24rK109bysrLGVbbisrXT1vLGVbbisrXT1pLHI9MipzLGY9MDtmPHItMTsrK2YpZVtuKytdPWksZVtuKytdPW8rKyxlW24rK109byxlW24rK109aSsrLGVbbisrXT1vLGVbbisrXT1pO2VbbisrXT1vKyssZVtuKytdPW8rKyxlW24rK109aSsrfWZvcihzPTA7czwzO3MrKyllW24rK109bysrLGVbbisrXT1vLGVbbisrXT1pO3JldHVybiBlfWZ1bmN0aW9uIHNOKHQpe2xldCBlPXQuY2VudGVyO2FjPWEubXVsdGlwbHlCeVNjYWxhcih0LmVsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxhYyksdC5oZWlnaHQsYWMpLGFjPWEuYWRkKGUsYWMsYWMpO2xldCBuPW5ldyBBdChhYyx0LnNlbWlNYWpvckF4aXMpLG89VnIuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnModCwhMCwhMSkscj1vLnBvc2l0aW9ucyxpPW8ubnVtUHRzLHM9VXcocix0LCExKSxmPWt3KGkpO3JldHVybiBmPUx0LmNyZWF0ZVR5cGVkQXJyYXkoci5sZW5ndGgvMyxmKSx7Ym91bmRpbmdTcGhlcmU6bixhdHRyaWJ1dGVzOnMsaW5kaWNlczpmfX1mdW5jdGlvbiBjTih0LGUpe2xldCBuPWUudmVydGV4Rm9ybWF0LG89ZS5jZW50ZXIscj1lLnNlbWlNYWpvckF4aXMsaT1lLnNlbWlNaW5vckF4aXMscz1lLmVsbGlwc29pZCxmPWUuaGVpZ2h0LHU9ZS5leHRydWRlZEhlaWdodCxjPWUuc3RSb3RhdGlvbixsPXQubGVuZ3RoLzMqMixwPW5ldyBGbG9hdDY0QXJyYXkobCozKSxkPW4uc3Q/bmV3IEZsb2F0MzJBcnJheShsKjIpOnZvaWQgMCxoPW4ubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkobCozKTp2b2lkIDAsXz1uLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShsKjMpOnZvaWQgMCxnPW4uYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkobCozKTp2b2lkIDAsYj1lLnNoYWRvd1ZvbHVtZSx3PWI/bmV3IEZsb2F0MzJBcnJheShsKjMpOnZvaWQgMCxPPTAsRT1JdyxUPXZ3LHg9RncsTT1uZXcgZW8ocyksTj1NLnByb2plY3Qocy5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvLEpwKSxMdyksRj1zLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UobyxmYSk7cy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoRixGKTtsZXQgST10ZS5mcm9tQXhpc0FuZ2xlKEYsYyxUMCksdj1aLmZyb21RdWF0ZXJuaW9uKEksTncpLEI9Si5mcm9tRWxlbWVudHMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxEdyksQT1KLmZyb21FbGVtZW50cyhOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLEJ3KSxTPXQubGVuZ3RoLEM9Uy8zKjI7Zm9yKGxldCB6PTA7ejxTO3orPTMpe2xldCBqPXorMSxrPXorMixxPWEuZnJvbUFycmF5KHQseixmYSksVztpZihuLnN0KXtsZXQgbnQ9Wi5tdWx0aXBseUJ5VmVjdG9yKHYscSxiMCksYXQ9TS5wcm9qZWN0KHMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobnQsSnApLHcwKTthLnN1YnRyYWN0KGF0LE4sYXQpLFFuLng9KGF0LngrcikvKDIqciksUW4ueT0oYXQueStpKS8oMippKSxCLng9TWF0aC5taW4oUW4ueCxCLngpLEIueT1NYXRoLm1pbihRbi55LEIueSksQS54PU1hdGgubWF4KFFuLngsQS54KSxBLnk9TWF0aC5tYXgoUW4ueSxBLnkpLGRbTytDXT1Rbi54LGRbTysxK0NdPVFuLnksZFtPKytdPVFuLngsZFtPKytdPVFuLnl9cT1zLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UocSxxKSxXPWEuY2xvbmUocSxiMCksRT1zLmdlb2RldGljU3VyZmFjZU5vcm1hbChxLEUpLGImJih3W3orU109LUUueCx3W2orU109LUUueSx3W2srU109LUUueik7bGV0IFI9YS5tdWx0aXBseUJ5U2NhbGFyKEUsZixNdyk7aWYocT1hLmFkZChxLFIscSksUj1hLm11bHRpcGx5QnlTY2FsYXIoRSx1LFIpLFc9YS5hZGQoVyxSLFcpLG4ucG9zaXRpb24mJihwW3orU109Vy54LHBbaitTXT1XLnkscFtrK1NdPVcueixwW3pdPXEueCxwW2pdPXEueSxwW2tdPXEueiksbi5ub3JtYWx8fG4udGFuZ2VudHx8bi5iaXRhbmdlbnQpe3g9YS5jbG9uZShFLHgpO2xldCBudD1hLmZyb21BcnJheSh0LCh6KzMpJVMsTXcpO2Euc3VidHJhY3QobnQscSxudCk7bGV0IGF0PWEuc3VidHJhY3QoVyxxLHcwKTtFPWEubm9ybWFsaXplKGEuY3Jvc3MoYXQsbnQsRSksRSksbi5ub3JtYWwmJihoW3pdPUUueCxoW2pdPUUueSxoW2tdPUUueixoW3orU109RS54LGhbaitTXT1FLnksaFtrK1NdPUUueiksbi50YW5nZW50JiYoVD1hLm5vcm1hbGl6ZShhLmNyb3NzKHgsRSxUKSxUKSxfW3pdPVQueCxfW2pdPVQueSxfW2tdPVQueixfW3orU109VC54LF9beisxK1NdPVQueSxfW3orMitTXT1ULnopLG4uYml0YW5nZW50JiYoZ1t6XT14LngsZ1tqXT14LnksZ1trXT14LnosZ1t6K1NdPXgueCxnW2orU109eC55LGdbaytTXT14LnopfX1pZihuLnN0KXtTPWQubGVuZ3RoO2ZvcihsZXQgej0wO3o8Uzt6Kz0yKWRbel09KGRbel0tQi54KS8oQS54LUIueCksZFt6KzFdPShkW3orMV0tQi55KS8oQS55LUIueSl9bGV0IEw9bmV3IGllO2lmKG4ucG9zaXRpb24mJihMLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pKSxuLnN0JiYoTC5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6ZH0pKSxuLm5vcm1hbCYmKEwubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpofSkpLG4udGFuZ2VudCYmKEwudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6X30pKSxuLmJpdGFuZ2VudCYmKEwuYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpnfSkpLGImJihMLmV4dHJ1ZGVEaXJlY3Rpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnd9KSksbShlLm9mZnNldEF0dHJpYnV0ZSkpe2xldCB6PW5ldyBVaW50OEFycmF5KGwpO2lmKGUub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXo9ei5maWxsKDEsMCxsLzIpO2Vsc2V7bGV0IGo9ZS5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MTt6PXouZmlsbChqKX1MLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnp9KX1yZXR1cm4gTH1mdW5jdGlvbiBhTih0KXtsZXQgZT10Lmxlbmd0aC8zLG49THQuY3JlYXRlVHlwZWRBcnJheShlLGUqNiksbz0wO2ZvcihsZXQgcj0wO3I8ZTtyKyspe2xldCBpPXIscz1yK2UsZj0oaSsxKSVlLHU9ZitlO25bbysrXT1pLG5bbysrXT1zLG5bbysrXT1mLG5bbysrXT1mLG5bbysrXT1zLG5bbysrXT11fXJldHVybiBufWZ1bmN0aW9uIGZOKHQpe2xldCBlPXQuY2VudGVyLG49dC5lbGxpcHNvaWQsbz10LnNlbWlNYWpvckF4aXMscj1hLm11bHRpcGx5QnlTY2FsYXIobi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxmYSksdC5oZWlnaHQsZmEpO1pwLmNlbnRlcj1hLmFkZChlLHIsWnAuY2VudGVyKSxacC5yYWRpdXM9byxyPWEubXVsdGlwbHlCeVNjYWxhcihuLmdlb2RldGljU3VyZmFjZU5vcm1hbChlLHIpLHQuZXh0cnVkZWRIZWlnaHQsciksUXAuY2VudGVyPWEuYWRkKGUscixRcC5jZW50ZXIpLFFwLnJhZGl1cz1vO2xldCBpPVZyLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKHQsITAsITApLHM9aS5wb3NpdGlvbnMsZj1pLm51bVB0cyx1PWkub3V0ZXJQb3NpdGlvbnMsYz1BdC51bmlvbihacCxRcCksbD1VdyhzLHQsITApLHA9a3coZiksZD1wLmxlbmd0aDtwLmxlbmd0aD1kKjI7bGV0IGg9cy5sZW5ndGgvMztmb3IobGV0IFQ9MDtUPGQ7VCs9MylwW1QrZF09cFtUKzJdK2gscFtUKzErZF09cFtUKzFdK2gscFtUKzIrZF09cFtUXStoO2xldCBfPUx0LmNyZWF0ZVR5cGVkQXJyYXkoaCoyLzMscCksZz1uZXcgVXQoe2F0dHJpYnV0ZXM6bCxpbmRpY2VzOl8scHJpbWl0aXZlVHlwZTpCdC5UUklBTkdMRVN9KSxiPWNOKHUsdCk7cD1hTih1KTtsZXQgdz1MdC5jcmVhdGVUeXBlZEFycmF5KHUubGVuZ3RoKjIvMyxwKSxPPW5ldyBVdCh7YXR0cmlidXRlczpiLGluZGljZXM6dyxwcmltaXRpdmVUeXBlOkJ0LlRSSUFOR0xFU30pLEU9R2UuY29tYmluZUluc3RhbmNlcyhbbmV3IGZvKHtnZW9tZXRyeTpnfSksbmV3IGZvKHtnZW9tZXRyeTpPfSldKTtyZXR1cm57Ym91bmRpbmdTcGhlcmU6YyxhdHRyaWJ1dGVzOkVbMF0uYXR0cmlidXRlcyxpbmRpY2VzOkVbMF0uaW5kaWNlc319ZnVuY3Rpb24gR3codCxlLG4sbyxyLGkscyl7bGV0IHU9VnIuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnMoe2NlbnRlcjp0LHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOm4scm90YXRpb246byxncmFudWxhcml0eTpyfSwhMSwhMCkub3V0ZXJQb3NpdGlvbnMsYz11Lmxlbmd0aC8zLGw9bmV3IEFycmF5KGMpO2ZvcihsZXQgZD0wO2Q8YzsrK2QpbFtkXT1hLmZyb21BcnJheSh1LGQqMyk7bGV0IHA9TnQuZnJvbUNhcnRlc2lhbkFycmF5KGwsaSxzKTtyZXR1cm4gcC53aWR0aD5QLlBJJiYocC5ub3J0aD1wLm5vcnRoPjA/UC5QSV9PVkVSX1RXTy1QLkVQU0lMT043OnAubm9ydGgscC5zb3V0aD1wLnNvdXRoPDA/UC5FUFNJTE9ONy1QLlBJX09WRVJfVFdPOnAuc291dGgscC5lYXN0PVAuUEkscC53ZXN0PS1QLlBJKSxwfWZ1bmN0aW9uIHVpKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQuY2VudGVyLG49dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCxvPXQuc2VtaU1ham9yQXhpcyxyPXQuc2VtaU1pbm9yQXhpcyxpPXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHM9dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQ7aWYoeS5kZWZpbmVkKCJvcHRpb25zLmNlbnRlciIsZSkseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLnNlbWlNYWpvckF4aXMiLG8pLHkudHlwZU9mLm51bWJlcigib3B0aW9ucy5zZW1pTWlub3JBeGlzIixyKSxvPHIpdGhyb3cgbmV3IEQoInNlbWlNYWpvckF4aXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbWlNaW5vckF4aXMuIik7aWYoaTw9MCl0aHJvdyBuZXcgRCgiZ3JhbnVsYXJpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtsZXQgZj10LmhlaWdodD8/MCx1PXQuZXh0cnVkZWRIZWlnaHQ/P2Y7dGhpcy5fY2VudGVyPWEuY2xvbmUoZSksdGhpcy5fc2VtaU1ham9yQXhpcz1vLHRoaXMuX3NlbWlNaW5vckF4aXM9cix0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShuKSx0aGlzLl9yb3RhdGlvbj10LnJvdGF0aW9uPz8wLHRoaXMuX3N0Um90YXRpb249dC5zdFJvdGF0aW9uPz8wLHRoaXMuX2hlaWdodD1NYXRoLm1heCh1LGYpLHRoaXMuX2dyYW51bGFyaXR5PWksdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHMpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKHUsZiksdGhpcy5fc2hhZG93Vm9sdW1lPXQuc2hhZG93Vm9sdW1lPz8hMSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNlR2VvbWV0cnkiLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl9yZWN0YW5nbGU9dm9pZCAwLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9dm9pZCAwfWZ1bmN0aW9uIHVOKHQpe2xldCBlPS10Ll9zdFJvdGF0aW9uO2lmKGU9PT0wKXJldHVyblswLDAsMCwxLDEsMF07bGV0IG89VnIuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnMoe2NlbnRlcjp0Ll9jZW50ZXIsc2VtaU1ham9yQXhpczp0Ll9zZW1pTWFqb3JBeGlzLHNlbWlNaW5vckF4aXM6dC5fc2VtaU1pbm9yQXhpcyxyb3RhdGlvbjp0Ll9yb3RhdGlvbixncmFudWxhcml0eTp0Ll9ncmFudWxhcml0eX0sITEsITApLm91dGVyUG9zaXRpb25zLHI9by5sZW5ndGgvMyxpPW5ldyBBcnJheShyKTtmb3IobGV0IHU9MDt1PHI7Kyt1KWlbdV09YS5mcm9tQXJyYXkobyx1KjMpO2xldCBzPXQuX2VsbGlwc29pZCxmPXQucmVjdGFuZ2xlO3JldHVybiBVdC5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyhpLGUscyxmKX12YXIgZmEsYjAsdzAsTXcsUW4sTncsaU4sVDAsSXcsdncsRncsSnAsTHcsRHcsQncsYWMsWnAsUXAsVncsencsancsZmksenIsTzA9JCgoKT0+e3ZlKCk7a2UoKTtEdCgpO0llKCk7V3QoKTtEZSgpO3llKCk7ZnQoKTtIdCgpO0EwKCk7JHQoKTt4aSgpO1llKCk7JGUoKTthbigpO2NjKCk7RG8oKTtjaSgpO1plKCk7S3QoKTtVbigpO3RuKCk7WG8oKTtUbigpO3hvKCk7ZmE9bmV3IGEsYjA9bmV3IGEsdzA9bmV3IGEsTXc9bmV3IGEsUW49bmV3IEosTnc9bmV3IFosaU49bmV3IFosVDA9bmV3IHRlLEl3PW5ldyBhLHZ3PW5ldyBhLEZ3PW5ldyBhLEpwPW5ldyBjdCxMdz1uZXcgYSxEdz1uZXcgSixCdz1uZXcgSjthYz1uZXcgYTtacD1uZXcgQXQsUXA9bmV3IEF0O3VpLnBhY2tlZExlbmd0aD1hLnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrOTt1aS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGEucGFjayh0Ll9jZW50ZXIsZSxuKSxuKz1hLnBhY2tlZExlbmd0aCxZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX3NlbWlNYWpvckF4aXMsZVtuKytdPXQuX3NlbWlNaW5vckF4aXMsZVtuKytdPXQuX3JvdGF0aW9uLGVbbisrXT10Ll9zdFJvdGF0aW9uLGVbbisrXT10Ll9oZWlnaHQsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fc2hhZG93Vm9sdW1lPzE6MCxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07Vnc9bmV3IGEsenc9bmV3IFksanc9bmV3IHB0LGZpPXtjZW50ZXI6VncsZWxsaXBzb2lkOnp3LHZlcnRleEZvcm1hdDpqdyxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsc3RSb3RhdGlvbjp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLHNoYWRvd1ZvbHVtZTp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07dWkudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89YS51bnBhY2sodCxlLFZ3KTtlKz1hLnBhY2tlZExlbmd0aDtsZXQgcj1ZLnVucGFjayh0LGUsencpO2UrPVkucGFja2VkTGVuZ3RoO2xldCBpPXB0LnVucGFjayh0LGUsancpO2UrPXB0LnBhY2tlZExlbmd0aDtsZXQgcz10W2UrK10sZj10W2UrK10sdT10W2UrK10sYz10W2UrK10sbD10W2UrK10scD10W2UrK10sZD10W2UrK10saD10W2UrK109PT0xLF89dFtlXTtyZXR1cm4gbShuKT8obi5fY2VudGVyPWEuY2xvbmUobyxuLl9jZW50ZXIpLG4uX2VsbGlwc29pZD1ZLmNsb25lKHIsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3NlbWlNYWpvckF4aXM9cyxuLl9zZW1pTWlub3JBeGlzPWYsbi5fcm90YXRpb249dSxuLl9zdFJvdGF0aW9uPWMsbi5faGVpZ2h0PWwsbi5fZ3JhbnVsYXJpdHk9cCxuLl9leHRydWRlZEhlaWdodD1kLG4uX3NoYWRvd1ZvbHVtZT1oLG4uX29mZnNldEF0dHJpYnV0ZT1fPT09LTE/dm9pZCAwOl8sbik6KGZpLmhlaWdodD1sLGZpLmV4dHJ1ZGVkSGVpZ2h0PWQsZmkuZ3JhbnVsYXJpdHk9cCxmaS5zdFJvdGF0aW9uPWMsZmkucm90YXRpb249dSxmaS5zZW1pTWFqb3JBeGlzPXMsZmkuc2VtaU1pbm9yQXhpcz1mLGZpLnNoYWRvd1ZvbHVtZT1oLGZpLm9mZnNldEF0dHJpYnV0ZT1fPT09LTE/dm9pZCAwOl8sbmV3IHVpKGZpKSl9O3VpLmNvbXB1dGVSZWN0YW5nbGU9ZnVuY3Rpb24odCxlKXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgbj10LmNlbnRlcixvPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQscj10LnNlbWlNYWpvckF4aXMsaT10LnNlbWlNaW5vckF4aXMscz10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSxmPXQucm90YXRpb24/PzA7aWYoeS5kZWZpbmVkKCJvcHRpb25zLmNlbnRlciIsbikseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLnNlbWlNYWpvckF4aXMiLHIpLHkudHlwZU9mLm51bWJlcigib3B0aW9ucy5zZW1pTWlub3JBeGlzIixpKSxyPGkpdGhyb3cgbmV3IEQoInNlbWlNYWpvckF4aXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbWlNaW5vckF4aXMuIik7aWYoczw9MCl0aHJvdyBuZXcgRCgiZ3JhbnVsYXJpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtyZXR1cm4gR3cobixyLGksZixzLG8sZSl9O3VpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2lmKHQuX3NlbWlNYWpvckF4aXM8PTB8fHQuX3NlbWlNaW5vckF4aXM8PTApcmV0dXJuO2xldCBlPXQuX2hlaWdodCxuPXQuX2V4dHJ1ZGVkSGVpZ2h0LG89IVAuZXF1YWxzRXBzaWxvbihlLG4sMCxQLkVQU0lMT04yKTt0Ll9jZW50ZXI9dC5fZWxsaXBzb2lkLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodC5fY2VudGVyLHQuX2NlbnRlcik7bGV0IHI9e2NlbnRlcjp0Ll9jZW50ZXIsc2VtaU1ham9yQXhpczp0Ll9zZW1pTWFqb3JBeGlzLHNlbWlNaW5vckF4aXM6dC5fc2VtaU1pbm9yQXhpcyxlbGxpcHNvaWQ6dC5fZWxsaXBzb2lkLHJvdGF0aW9uOnQuX3JvdGF0aW9uLGhlaWdodDplLGdyYW51bGFyaXR5OnQuX2dyYW51bGFyaXR5LHZlcnRleEZvcm1hdDp0Ll92ZXJ0ZXhGb3JtYXQsc3RSb3RhdGlvbjp0Ll9zdFJvdGF0aW9ufSxpO2lmKG8pci5leHRydWRlZEhlaWdodD1uLHIuc2hhZG93Vm9sdW1lPXQuX3NoYWRvd1ZvbHVtZSxyLm9mZnNldEF0dHJpYnV0ZT10Ll9vZmZzZXRBdHRyaWJ1dGUsaT1mTihyKTtlbHNlIGlmKGk9c04ociksbSh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgcz1pLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxmPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLHU9bmV3IFVpbnQ4QXJyYXkocy8zKS5maWxsKGYpO2kuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczp1fSl9cmV0dXJuIG5ldyBVdCh7YXR0cmlidXRlczppLmF0dHJpYnV0ZXMsaW5kaWNlczppLmluZGljZXMscHJpbWl0aXZlVHlwZTpCdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6aS5ib3VuZGluZ1NwaGVyZSxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O3VpLmNyZWF0ZVNoYWRvd1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7bGV0IG89dC5fZ3JhbnVsYXJpdHkscj10Ll9lbGxpcHNvaWQsaT1lKG8scikscz1uKG8scik7cmV0dXJuIG5ldyB1aSh7Y2VudGVyOnQuX2NlbnRlcixzZW1pTWFqb3JBeGlzOnQuX3NlbWlNYWpvckF4aXMsc2VtaU1pbm9yQXhpczp0Ll9zZW1pTWlub3JBeGlzLGVsbGlwc29pZDpyLHJvdGF0aW9uOnQuX3JvdGF0aW9uLHN0Um90YXRpb246dC5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnMsdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHVpLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLl9yZWN0YW5nbGUpfHwodGhpcy5fcmVjdGFuZ2xlPUd3KHRoaXMuX2NlbnRlcix0aGlzLl9zZW1pTWFqb3JBeGlzLHRoaXMuX3NlbWlNaW5vckF4aXMsdGhpcy5fcm90YXRpb24sdGhpcy5fZ3JhbnVsYXJpdHksdGhpcy5fZWxsaXBzb2lkKSksdGhpcy5fcmVjdGFuZ2xlfX0sdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyl8fCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPXVOKHRoaXMpKSx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzfX19KTt6cj11aX0pO2Z1bmN0aW9uIEZpKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucmFkaXVzO3kudHlwZU9mLm51bWJlcigicmFkaXVzIixlKTtsZXQgbj17Y2VudGVyOnQuY2VudGVyLHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOmUsZWxsaXBzb2lkOnQuZWxsaXBzb2lkLGhlaWdodDp0LmhlaWdodCxleHRydWRlZEhlaWdodDp0LmV4dHJ1ZGVkSGVpZ2h0LGdyYW51bGFyaXR5OnQuZ3JhbnVsYXJpdHksdmVydGV4Rm9ybWF0OnQudmVydGV4Rm9ybWF0LHN0Um90YXRpb246dC5zdFJvdGF0aW9uLHNoYWRvd1ZvbHVtZTp0LnNoYWRvd1ZvbHVtZX07dGhpcy5fZWxsaXBzZUdlb21ldHJ5PW5ldyB6cihuKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDaXJjbGVHZW9tZXRyeSJ9dmFyIEh3LGdvLEUwLHF3PSQoKCk9PntEdCgpO1d0KCk7eWUoKTtmdCgpO08wKCk7JHQoKTt4bygpO0ZpLnBhY2tlZExlbmd0aD16ci5wYWNrZWRMZW5ndGg7RmkucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHpyLnBhY2sodC5fZWxsaXBzZUdlb21ldHJ5LGUsbil9O0h3PW5ldyB6cih7Y2VudGVyOm5ldyBhLHNlbWlNYWpvckF4aXM6MSxzZW1pTWlub3JBeGlzOjF9KSxnbz17Y2VudGVyOm5ldyBhLHJhZGl1czp2b2lkIDAsZWxsaXBzb2lkOlkuY2xvbmUoWS5kZWZhdWx0KSxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsdmVydGV4Rm9ybWF0Om5ldyBwdCxzdFJvdGF0aW9uOnZvaWQgMCxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMCxzaGFkb3dWb2x1bWU6dm9pZCAwfTtGaS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXpyLnVucGFjayh0LGUsSHcpO3JldHVybiBnby5jZW50ZXI9YS5jbG9uZShvLl9jZW50ZXIsZ28uY2VudGVyKSxnby5lbGxpcHNvaWQ9WS5jbG9uZShvLl9lbGxpcHNvaWQsZ28uZWxsaXBzb2lkKSxnby5lbGxpcHNvaWQ9WS5jbG9uZShvLl9lbGxpcHNvaWQsSHcuX2VsbGlwc29pZCksZ28uaGVpZ2h0PW8uX2hlaWdodCxnby5leHRydWRlZEhlaWdodD1vLl9leHRydWRlZEhlaWdodCxnby5ncmFudWxhcml0eT1vLl9ncmFudWxhcml0eSxnby52ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoby5fdmVydGV4Rm9ybWF0LGdvLnZlcnRleEZvcm1hdCksZ28uc3RSb3RhdGlvbj1vLl9zdFJvdGF0aW9uLGdvLnNoYWRvd1ZvbHVtZT1vLl9zaGFkb3dWb2x1bWUsbShuKT8oZ28uc2VtaU1ham9yQXhpcz1vLl9zZW1pTWFqb3JBeGlzLGdvLnNlbWlNaW5vckF4aXM9by5fc2VtaU1pbm9yQXhpcyxuLl9lbGxpcHNlR2VvbWV0cnk9bmV3IHpyKGdvKSxuKTooZ28ucmFkaXVzPW8uX3NlbWlNYWpvckF4aXMsbmV3IEZpKGdvKSl9O0ZpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe3JldHVybiB6ci5jcmVhdGVHZW9tZXRyeSh0Ll9lbGxpcHNlR2VvbWV0cnkpfTtGaS5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQuX2VsbGlwc2VHZW9tZXRyeS5fZ3JhbnVsYXJpdHkscj10Ll9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZCxpPWUobyxyKSxzPW4obyxyKTtyZXR1cm4gbmV3IEZpKHtjZW50ZXI6dC5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXIscmFkaXVzOnQuX2VsbGlwc2VHZW9tZXRyeS5fc2VtaU1ham9yQXhpcyxlbGxpcHNvaWQ6cixzdFJvdGF0aW9uOnQuX2VsbGlwc2VHZW9tZXRyeS5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnMsdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzZUdlb21ldHJ5LnJlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNlR2VvbWV0cnkudGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50c319fSk7RTA9Rml9KTt2YXIgUjA9e307bGUoUjAse2RlZmF1bHQ6KCk9PnBOfSk7ZnVuY3Rpb24gbE4odCxlKXtyZXR1cm4gbShlKSYmKHQ9RTAudW5wYWNrKHQsZSkpLHQuX2VsbGlwc2VHZW9tZXRyeS5fY2VudGVyPWEuY2xvbmUodC5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXIpLHQuX2VsbGlwc2VHZW9tZXRyeS5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQpLEUwLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBwTixTMD0kKCgpPT57RHQoKTtxdygpO2Z0KCk7JHQoKTtwTj1sTn0pO2Z1bmN0aW9uIGROKHQpe2xldCBlPXQuY2VudGVyO2ZjPWEubXVsdGlwbHlCeVNjYWxhcih0LmVsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxmYyksdC5oZWlnaHQsZmMpLGZjPWEuYWRkKGUsZmMsZmMpO2xldCBuPW5ldyBBdChmYyx0LnNlbWlNYWpvckF4aXMpLG89VnIuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnModCwhMSwhMCkub3V0ZXJQb3NpdGlvbnMscj1uZXcgaWUoe3Bvc2l0aW9uOm5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6VnIucmFpc2VQb3NpdGlvbnNUb0hlaWdodChvLHQsITEpfSl9KSxpPW8ubGVuZ3RoLzMscz1MdC5jcmVhdGVUeXBlZEFycmF5KGksaSoyKSxmPTA7Zm9yKGxldCB1PTA7dTxpOysrdSlzW2YrK109dSxzW2YrK109KHUrMSklaTtyZXR1cm57Ym91bmRpbmdTcGhlcmU6bixhdHRyaWJ1dGVzOnIsaW5kaWNlczpzfX1mdW5jdGlvbiBtTih0KXtsZXQgZT10LmNlbnRlcixuPXQuZWxsaXBzb2lkLG89dC5zZW1pTWFqb3JBeGlzLHI9YS5tdWx0aXBseUJ5U2NhbGFyKG4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGUsS3cpLHQuaGVpZ2h0LEt3KTt0ZC5jZW50ZXI9YS5hZGQoZSxyLHRkLmNlbnRlciksdGQucmFkaXVzPW8scj1hLm11bHRpcGx5QnlTY2FsYXIobi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxyKSx0LmV4dHJ1ZGVkSGVpZ2h0LHIpLGVkLmNlbnRlcj1hLmFkZChlLHIsZWQuY2VudGVyKSxlZC5yYWRpdXM9bztsZXQgaT1Wci5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyh0LCExLCEwKS5vdXRlclBvc2l0aW9ucyxzPW5ldyBpZSh7cG9zaXRpb246bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpWci5yYWlzZVBvc2l0aW9uc1RvSGVpZ2h0KGksdCwhMCl9KX0pO2k9cy5wb3NpdGlvbi52YWx1ZXM7bGV0IGY9QXQudW5pb24odGQsZWQpLHU9aS5sZW5ndGgvMztpZihtKHQub2Zmc2V0QXR0cmlidXRlKSl7bGV0IF89bmV3IFVpbnQ4QXJyYXkodSk7aWYodC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApXz1fLmZpbGwoMSwwLHUvMik7ZWxzZXtsZXQgZz10Lm9mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO189Xy5maWxsKGcpfXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6X30pfWxldCBjPXQubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPz8xNjtjPVAuY2xhbXAoYywwLHUvMik7bGV0IGw9THQuY3JlYXRlVHlwZWRBcnJheSh1LHUqMitjKjIpO3UvPTI7bGV0IHA9MCxkO2ZvcihkPTA7ZDx1OysrZClsW3ArK109ZCxsW3ArK109KGQrMSkldSxsW3ArK109ZCt1LGxbcCsrXT0oZCsxKSV1K3U7bGV0IGg7aWYoYz4wKXtsZXQgXz1NYXRoLm1pbihjLHUpO2g9TWF0aC5yb3VuZCh1L18pO2xldCBnPU1hdGgubWluKGgqYyx1KTtmb3IoZD0wO2Q8ZztkKz1oKWxbcCsrXT1kLGxbcCsrXT1kK3V9cmV0dXJue2JvdW5kaW5nU3BoZXJlOmYsYXR0cmlidXRlczpzLGluZGljZXM6bH19ZnVuY3Rpb24gdWEodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5jZW50ZXIsbj10LmVsbGlwc29pZD8/WS5kZWZhdWx0LG89dC5zZW1pTWFqb3JBeGlzLHI9dC5zZW1pTWlub3JBeGlzLGk9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUU7aWYoIW0oZSkpdGhyb3cgbmV3IEQoImNlbnRlciBpcyByZXF1aXJlZC4iKTtpZighbShvKSl0aHJvdyBuZXcgRCgic2VtaU1ham9yQXhpcyBpcyByZXF1aXJlZC4iKTtpZighbShyKSl0aHJvdyBuZXcgRCgic2VtaU1pbm9yQXhpcyBpcyByZXF1aXJlZC4iKTtpZihvPHIpdGhyb3cgbmV3IEQoInNlbWlNYWpvckF4aXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbWlNaW5vckF4aXMuIik7aWYoaTw9MCl0aHJvdyBuZXcgRCgiZ3JhbnVsYXJpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtsZXQgcz10LmhlaWdodD8/MCxmPXQuZXh0cnVkZWRIZWlnaHQ/P3M7dGhpcy5fY2VudGVyPWEuY2xvbmUoZSksdGhpcy5fc2VtaU1ham9yQXhpcz1vLHRoaXMuX3NlbWlNaW5vckF4aXM9cix0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShuKSx0aGlzLl9yb3RhdGlvbj10LnJvdGF0aW9uPz8wLHRoaXMuX2hlaWdodD1NYXRoLm1heChmLHMpLHRoaXMuX2dyYW51bGFyaXR5PWksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4oZixzKSx0aGlzLl9udW1iZXJPZlZlcnRpY2FsTGluZXM9TWF0aC5tYXgodC5udW1iZXJPZlZlcnRpY2FsTGluZXM/PzE2LDApLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNlT3V0bGluZUdlb21ldHJ5In12YXIgS3csZmMsdGQsZWQsV3csWHcsTGksanIseDA9JCgoKT0+e3ZlKCk7RHQoKTtEZSgpO3llKCk7ZnQoKTtIdCgpO0EwKCk7JHQoKTtZZSgpOyRlKCk7YW4oKTtEbygpO1plKCk7S3QoKTt0bigpO0t3PW5ldyBhLGZjPW5ldyBhO3RkPW5ldyBBdCxlZD1uZXcgQXQ7dWEucGFja2VkTGVuZ3RoPWEucGFja2VkTGVuZ3RoK1kucGFja2VkTGVuZ3RoKzg7dWEucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoInZhbHVlIGlzIHJlcXVpcmVkIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7cmV0dXJuIG49bj8/MCxhLnBhY2sodC5fY2VudGVyLGUsbiksbis9YS5wYWNrZWRMZW5ndGgsWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9zZW1pTWFqb3JBeGlzLGVbbisrXT10Ll9zZW1pTWlub3JBeGlzLGVbbisrXT10Ll9yb3RhdGlvbixlW24rK109dC5faGVpZ2h0LGVbbisrXT10Ll9ncmFudWxhcml0eSxlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuKytdPXQuX251bWJlck9mVmVydGljYWxMaW5lcyxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07V3c9bmV3IGEsWHc9bmV3IFksTGk9e2NlbnRlcjpXdyxlbGxpcHNvaWQ6WHcsc2VtaU1ham9yQXhpczp2b2lkIDAsc2VtaU1pbm9yQXhpczp2b2lkIDAscm90YXRpb246dm9pZCAwLGhlaWdodDp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O3VhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7ZT1lPz8wO2xldCBvPWEudW5wYWNrKHQsZSxXdyk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IHI9WS51bnBhY2sodCxlLFh3KTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgaT10W2UrK10scz10W2UrK10sZj10W2UrK10sdT10W2UrK10sYz10W2UrK10sbD10W2UrK10scD10W2UrK10sZD10W2VdO3JldHVybiBtKG4pPyhuLl9jZW50ZXI9YS5jbG9uZShvLG4uX2NlbnRlciksbi5fZWxsaXBzb2lkPVkuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3NlbWlNYWpvckF4aXM9aSxuLl9zZW1pTWlub3JBeGlzPXMsbi5fcm90YXRpb249ZixuLl9oZWlnaHQ9dSxuLl9ncmFudWxhcml0eT1jLG4uX2V4dHJ1ZGVkSGVpZ2h0PWwsbi5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzPXAsbi5fb2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuKTooTGkuaGVpZ2h0PXUsTGkuZXh0cnVkZWRIZWlnaHQ9bCxMaS5ncmFudWxhcml0eT1jLExpLnJvdGF0aW9uPWYsTGkuc2VtaU1ham9yQXhpcz1pLExpLnNlbWlNaW5vckF4aXM9cyxMaS5udW1iZXJPZlZlcnRpY2FsTGluZXM9cCxMaS5vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG5ldyB1YShMaSkpfTt1YS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtpZih0Ll9zZW1pTWFqb3JBeGlzPD0wfHx0Ll9zZW1pTWlub3JBeGlzPD0wKXJldHVybjtsZXQgZT10Ll9oZWlnaHQsbj10Ll9leHRydWRlZEhlaWdodCxvPSFQLmVxdWFsc0Vwc2lsb24oZSxuLDAsUC5FUFNJTE9OMik7dC5fY2VudGVyPXQuX2VsbGlwc29pZC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHQuX2NlbnRlcix0Ll9jZW50ZXIpO2xldCByPXtjZW50ZXI6dC5fY2VudGVyLHNlbWlNYWpvckF4aXM6dC5fc2VtaU1ham9yQXhpcyxzZW1pTWlub3JBeGlzOnQuX3NlbWlNaW5vckF4aXMsZWxsaXBzb2lkOnQuX2VsbGlwc29pZCxyb3RhdGlvbjp0Ll9yb3RhdGlvbixoZWlnaHQ6ZSxncmFudWxhcml0eTp0Ll9ncmFudWxhcml0eSxudW1iZXJPZlZlcnRpY2FsTGluZXM6dC5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzfSxpO2lmKG8pci5leHRydWRlZEhlaWdodD1uLHIub2Zmc2V0QXR0cmlidXRlPXQuX29mZnNldEF0dHJpYnV0ZSxpPW1OKHIpO2Vsc2UgaWYoaT1kTihyKSxtKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBzPWkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLGY9dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsdT1uZXcgVWludDhBcnJheShzLzMpLmZpbGwoZik7aS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnV9KX1yZXR1cm4gbmV3IFV0KHthdHRyaWJ1dGVzOmkuYXR0cmlidXRlcyxpbmRpY2VzOmkuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkJ0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmkuYm91bmRpbmdTcGhlcmUsb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtqcj11YX0pO2Z1bmN0aW9uIGxhKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucmFkaXVzO3kudHlwZU9mLm51bWJlcigicmFkaXVzIixlKTtsZXQgbj17Y2VudGVyOnQuY2VudGVyLHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOmUsZWxsaXBzb2lkOnQuZWxsaXBzb2lkLGhlaWdodDp0LmhlaWdodCxleHRydWRlZEhlaWdodDp0LmV4dHJ1ZGVkSGVpZ2h0LGdyYW51bGFyaXR5OnQuZ3JhbnVsYXJpdHksbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOnQubnVtYmVyT2ZWZXJ0aWNhbExpbmVzfTt0aGlzLl9lbGxpcHNlR2VvbWV0cnk9bmV3IGpyKG4pLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNpcmNsZU91dGxpbmVHZW9tZXRyeSJ9dmFyIGhOLHNyLEMwLFl3PSQoKCk9PntEdCgpO1d0KCk7eWUoKTtmdCgpO3gwKCk7JHQoKTtsYS5wYWNrZWRMZW5ndGg9anIucGFja2VkTGVuZ3RoO2xhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSxqci5wYWNrKHQuX2VsbGlwc2VHZW9tZXRyeSxlLG4pfTtoTj1uZXcganIoe2NlbnRlcjpuZXcgYSxzZW1pTWFqb3JBeGlzOjEsc2VtaU1pbm9yQXhpczoxfSksc3I9e2NlbnRlcjpuZXcgYSxyYWRpdXM6dm9pZCAwLGVsbGlwc29pZDpZLmNsb25lKFkuVU5JVF9TUEhFUkUpLGhlaWdodDp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLHNlbWlNYWpvckF4aXM6dm9pZCAwLHNlbWlNaW5vckF4aXM6dm9pZCAwfTtsYS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2xldCBvPWpyLnVucGFjayh0LGUsaE4pO3JldHVybiBzci5jZW50ZXI9YS5jbG9uZShvLl9jZW50ZXIsc3IuY2VudGVyKSxzci5lbGxpcHNvaWQ9WS5jbG9uZShvLl9lbGxpcHNvaWQsc3IuZWxsaXBzb2lkKSxzci5oZWlnaHQ9by5faGVpZ2h0LHNyLmV4dHJ1ZGVkSGVpZ2h0PW8uX2V4dHJ1ZGVkSGVpZ2h0LHNyLmdyYW51bGFyaXR5PW8uX2dyYW51bGFyaXR5LHNyLm51bWJlck9mVmVydGljYWxMaW5lcz1vLl9udW1iZXJPZlZlcnRpY2FsTGluZXMsbShuKT8oc3Iuc2VtaU1ham9yQXhpcz1vLl9zZW1pTWFqb3JBeGlzLHNyLnNlbWlNaW5vckF4aXM9by5fc2VtaU1pbm9yQXhpcyxuLl9lbGxpcHNlR2VvbWV0cnk9bmV3IGpyKHNyKSxuKTooc3IucmFkaXVzPW8uX3NlbWlNYWpvckF4aXMsbmV3IGxhKHNyKSl9O2xhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe3JldHVybiBqci5jcmVhdGVHZW9tZXRyeSh0Ll9lbGxpcHNlR2VvbWV0cnkpfTtDMD1sYX0pO3ZhciBQMD17fTtsZShQMCx7ZGVmYXVsdDooKT0+eU59KTtmdW5jdGlvbiBfTih0LGUpe3JldHVybiBtKGUpJiYodD1DMC51bnBhY2sodCxlKSksdC5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXI9YS5jbG9uZSh0Ll9lbGxpcHNlR2VvbWV0cnkuX2NlbnRlciksdC5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZCksQzAuY3JlYXRlR2VvbWV0cnkodCl9dmFyIHlOLE0wPSQoKCk9PntEdCgpO1l3KCk7ZnQoKTskdCgpO3lOPV9OfSk7ZnVuY3Rpb24gZ04odCxlLG4sbyl7aWYoeS5kZWZpbmVkKCJlcXVhbHNFcHNpbG9uIixlKSwhbSh0KSlyZXR1cm47bj1uPz8hMTtsZXQgcj1tKG8pLGk9dC5sZW5ndGg7aWYoaTwyKXJldHVybiB0O2xldCBzLGY9dFswXSx1LGMsbD0wLHA9LTE7Zm9yKHM9MTtzPGk7KytzKXU9dFtzXSxlKGYsdSwkdyk/KG0oYyl8fChjPXQuc2xpY2UoMCxzKSxsPXMtMSxwPTApLHImJm8ucHVzaChzKSk6KG0oYykmJihjLnB1c2godSksbD1zLHImJihwPW8ubGVuZ3RoKSksZj11KTtyZXR1cm4gbiYmZSh0WzBdLHRbaS0xXSwkdykmJihyJiYobShjKT9vLnNwbGljZShwLDAsbCk6by5wdXNoKGktMSkpLG0oYyk/Yy5sZW5ndGgtPTE6Yz10LnNsaWNlKDAsLTEpKSxtKGMpP2M6dH12YXIgJHcsQ24sSHI9JCgoKT0+e1d0KCk7ZnQoKTtLdCgpOyR3PVAuRVBTSUxPTjEwO0NuPWdOfSk7ZnVuY3Rpb24gSW4odCxlLG4sbyl7dGhpcy54PXQ/PzAsdGhpcy55PWU/PzAsdGhpcy53aWR0aD1uPz8wLHRoaXMuaGVpZ2h0PW8/PzB9dmFyIFp3LEFOLGJOLHFyLENmPSQoKCk9PntrZSgpO0llKCk7V3QoKTtmdCgpOyR0KCk7eGkoKTtWcygpO1RuKCk7SW4ucGFja2VkTGVuZ3RoPTQ7SW4ucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dC54LGVbbisrXT10LnksZVtuKytdPXQud2lkdGgsZVtuXT10LmhlaWdodCxlfTtJbi51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsbShuKXx8KG49bmV3IEluKSxuLng9dFtlKytdLG4ueT10W2UrK10sbi53aWR0aD10W2UrK10sbi5oZWlnaHQ9dFtlXSxufTtJbi5mcm9tUG9pbnRzPWZ1bmN0aW9uKHQsZSl7aWYobShlKXx8KGU9bmV3IEluKSwhbSh0KXx8dC5sZW5ndGg9PT0wKXJldHVybiBlLng9MCxlLnk9MCxlLndpZHRoPTAsZS5oZWlnaHQ9MCxlO2xldCBuPXQubGVuZ3RoLG89dFswXS54LHI9dFswXS55LGk9dFswXS54LHM9dFswXS55O2ZvcihsZXQgZj0xO2Y8bjtmKyspe2xldCB1PXRbZl0sYz11LngsbD11Lnk7bz1NYXRoLm1pbihjLG8pLGk9TWF0aC5tYXgoYyxpKSxyPU1hdGgubWluKGwscikscz1NYXRoLm1heChsLHMpfXJldHVybiBlLng9byxlLnk9cixlLndpZHRoPWktbyxlLmhlaWdodD1zLXIsZX07Wnc9bmV3IGVvLEFOPW5ldyBjdCxiTj1uZXcgY3Q7SW4uZnJvbVJlY3RhbmdsZT1mdW5jdGlvbih0LGUsbil7aWYobShuKXx8KG49bmV3IEluKSwhbSh0KSlyZXR1cm4gbi54PTAsbi55PTAsbi53aWR0aD0wLG4uaGVpZ2h0PTAsbjtady5fZWxsaXBzb2lkPVkuZGVmYXVsdCxlPWU/P1p3O2xldCBvPWUucHJvamVjdChOdC5zb3V0aHdlc3QodCxBTikpLHI9ZS5wcm9qZWN0KE50Lm5vcnRoZWFzdCh0LGJOKSk7cmV0dXJuIEouc3VidHJhY3QocixvLHIpLG4ueD1vLngsbi55PW8ueSxuLndpZHRoPXIueCxuLmhlaWdodD1yLnksbn07SW4uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihtKHQpKXJldHVybiBtKGUpPyhlLng9dC54LGUueT10LnksZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0LGUpOm5ldyBJbih0LngsdC55LHQud2lkdGgsdC5oZWlnaHQpfTtJbi51bmlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSxtKG4pfHwobj1uZXcgSW4pO2xldCBvPU1hdGgubWluKHQueCxlLngpLHI9TWF0aC5taW4odC55LGUueSksaT1NYXRoLm1heCh0LngrdC53aWR0aCxlLngrZS53aWR0aCkscz1NYXRoLm1heCh0LnkrdC5oZWlnaHQsZS55K2UuaGVpZ2h0KTtyZXR1cm4gbi54PW8sbi55PXIsbi53aWR0aD1pLW8sbi5oZWlnaHQ9cy1yLG59O0luLmV4cGFuZD1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm9iamVjdCgicG9pbnQiLGUpLG49SW4uY2xvbmUodCxuKTtsZXQgbz1lLngtbi54LHI9ZS55LW4ueTtyZXR1cm4gbz5uLndpZHRoP24ud2lkdGg9bzpvPDAmJihuLndpZHRoLT1vLG4ueD1lLngpLHI+bi5oZWlnaHQ/bi5oZWlnaHQ9cjpyPDAmJihuLmhlaWdodC09cixuLnk9ZS55KSxufTtJbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpO2xldCBuPXQueCxvPXQueSxyPWUueCxpPWUueTtyZXR1cm4gbj5yK2Uud2lkdGh8fG4rdC53aWR0aDxyfHxvK3QuaGVpZ2h0PGl8fG8+aStlLmhlaWdodD9Tbi5PVVRTSURFOlNuLklOVEVSU0VDVElOR307SW4uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxtKHQpJiZtKGUpJiZ0Lng9PT1lLngmJnQueT09PWUueSYmdC53aWR0aD09PWUud2lkdGgmJnQuaGVpZ2h0PT09ZS5oZWlnaHR9O0luLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gSW4uY2xvbmUodGhpcyx0KX07SW4ucHJvdG90eXBlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gSW4uaW50ZXJzZWN0KHRoaXMsdCl9O0luLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIEluLmVxdWFscyh0aGlzLHQpfTtxcj1Jbn0pO2Z1bmN0aW9uIEJvKHQsZSxuKXt0aGlzLm1pbmltdW09YS5jbG9uZSh0Pz9hLlpFUk8pLHRoaXMubWF4aW11bT1hLmNsb25lKGU/P2EuWkVSTyksbShuKT9uPWEuY2xvbmUobik6bj1hLm1pZHBvaW50KHRoaXMubWluaW11bSx0aGlzLm1heGltdW0sbmV3IGEpLHRoaXMuY2VudGVyPW59dmFyIG5kLERpLFBmPSQoKCk9PntEdCgpO1d0KCk7ZnQoKTtWcygpO0JvLmZyb21Db3JuZXJzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJtaW5pbXVtIix0KSx5LmRlZmluZWQoIm1heGltdW0iLGUpLG0obil8fChuPW5ldyBCbyksbi5taW5pbXVtPWEuY2xvbmUodCxuLm1pbmltdW0pLG4ubWF4aW11bT1hLmNsb25lKGUsbi5tYXhpbXVtKSxuLmNlbnRlcj1hLm1pZHBvaW50KHQsZSxuLmNlbnRlciksbn07Qm8uZnJvbVBvaW50cz1mdW5jdGlvbih0LGUpe2lmKG0oZSl8fChlPW5ldyBCbyksIW0odCl8fHQubGVuZ3RoPT09MClyZXR1cm4gZS5taW5pbXVtPWEuY2xvbmUoYS5aRVJPLGUubWluaW11bSksZS5tYXhpbXVtPWEuY2xvbmUoYS5aRVJPLGUubWF4aW11bSksZS5jZW50ZXI9YS5jbG9uZShhLlpFUk8sZS5jZW50ZXIpLGU7bGV0IG49dFswXS54LG89dFswXS55LHI9dFswXS56LGk9dFswXS54LHM9dFswXS55LGY9dFswXS56LHU9dC5sZW5ndGg7Zm9yKGxldCBwPTE7cDx1O3ArKyl7bGV0IGQ9dFtwXSxoPWQueCxfPWQueSxnPWQuejtuPU1hdGgubWluKGgsbiksaT1NYXRoLm1heChoLGkpLG89TWF0aC5taW4oXyxvKSxzPU1hdGgubWF4KF8scykscj1NYXRoLm1pbihnLHIpLGY9TWF0aC5tYXgoZyxmKX1sZXQgYz1lLm1pbmltdW07Yy54PW4sYy55PW8sYy56PXI7bGV0IGw9ZS5tYXhpbXVtO3JldHVybiBsLng9aSxsLnk9cyxsLno9ZixlLmNlbnRlcj1hLm1pZHBvaW50KGMsbCxlLmNlbnRlciksZX07Qm8uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihtKHQpKXJldHVybiBtKGUpPyhlLm1pbmltdW09YS5jbG9uZSh0Lm1pbmltdW0sZS5taW5pbXVtKSxlLm1heGltdW09YS5jbG9uZSh0Lm1heGltdW0sZS5tYXhpbXVtKSxlLmNlbnRlcj1hLmNsb25lKHQuY2VudGVyLGUuY2VudGVyKSxlKTpuZXcgQm8odC5taW5pbXVtLHQubWF4aW11bSx0LmNlbnRlcil9O0JvLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8bSh0KSYmbShlKSYmYS5lcXVhbHModC5jZW50ZXIsZS5jZW50ZXIpJiZhLmVxdWFscyh0Lm1pbmltdW0sZS5taW5pbXVtKSYmYS5lcXVhbHModC5tYXhpbXVtLGUubWF4aW11bSl9O25kPW5ldyBhO0JvLmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJib3giLHQpLHkuZGVmaW5lZCgicGxhbmUiLGUpLG5kPWEuc3VidHJhY3QodC5tYXhpbXVtLHQubWluaW11bSxuZCk7bGV0IG49YS5tdWx0aXBseUJ5U2NhbGFyKG5kLC41LG5kKSxvPWUubm9ybWFsLHI9bi54Kk1hdGguYWJzKG8ueCkrbi55Kk1hdGguYWJzKG8ueSkrbi56Kk1hdGguYWJzKG8ueiksaT1hLmRvdCh0LmNlbnRlcixvKStlLmRpc3RhbmNlO3JldHVybiBpLXI+MD9Tbi5JTlNJREU6aStyPDA/U24uT1VUU0lERTpTbi5JTlRFUlNFQ1RJTkd9O0JvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gQm8uY2xvbmUodGhpcyx0KX07Qm8ucHJvdG90eXBlLmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKHQpe3JldHVybiBCby5pbnRlcnNlY3RQbGFuZSh0aGlzLHQpfTtCby5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBCby5lcXVhbHModGhpcyx0KX07RGk9Qm99KTtmdW5jdGlvbiBsaSh0LGUpe2lmKHkuZGVmaW5lZCgib3JpZ2luIix0KSxlPWU/P1kuZGVmYXVsdCx0PWUuc2NhbGVUb0dlb2RldGljU3VyZmFjZSh0KSwhbSh0KSl0aHJvdyBuZXcgRCgib3JpZ2luIG11c3Qgbm90IGJlIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc29pZC4iKTtsZXQgbj0kby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZSh0LGUpO3RoaXMuX2VsbGlwc29pZD1lLHRoaXMuX29yaWdpbj10LHRoaXMuX3hBeGlzPWEuZnJvbUNhcnRlc2lhbjQoc3QuZ2V0Q29sdW1uKG4sMCxOMCkpLHRoaXMuX3lBeGlzPWEuZnJvbUNhcnRlc2lhbjQoc3QuZ2V0Q29sdW1uKG4sMSxOMCkpO2xldCBvPWEuZnJvbUNhcnRlc2lhbjQoc3QuZ2V0Q29sdW1uKG4sMixOMCkpO3RoaXMuX3BsYW5lPW9uLmZyb21Qb2ludE5vcm1hbCh0LG8pfXZhciBOMCx3TixRdyxvZCxUTixBbyxwYT0kKCgpPT57UGYoKTtrZSgpO0R0KCk7X3IoKTtXdCgpO2Z0KCk7SHQoKTskdCgpO2VjKCk7a24oKTt1cygpO1ZwKCk7YXMoKTtOMD1uZXcgbWU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGkucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxvcmlnaW46e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW59fSxwbGFuZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lfX0seEF4aXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94QXhpc319LHlBeGlzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUF4aXN9fSx6QXhpczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lLm5vcm1hbH19fSk7d049bmV3IERpO2xpLmZyb21Qb2ludHM9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbnMiLHQpO2xldCBuPURpLmZyb21Qb2ludHModCx3Tik7cmV0dXJuIG5ldyBsaShuLmNlbnRlcixlKX07UXc9bmV3IEpzLG9kPW5ldyBhO2xpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRPbnRvUGxhbmU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbiIsdCk7bGV0IG49UXc7bi5vcmlnaW49dCxhLm5vcm1hbGl6ZSh0LG4uZGlyZWN0aW9uKTtsZXQgbz15by5yYXlQbGFuZShuLHRoaXMuX3BsYW5lLG9kKTtpZihtKG8pfHwoYS5uZWdhdGUobi5kaXJlY3Rpb24sbi5kaXJlY3Rpb24pLG89eW8ucmF5UGxhbmUobix0aGlzLl9wbGFuZSxvZCkpLG0obykpe2xldCByPWEuc3VidHJhY3Qobyx0aGlzLl9vcmlnaW4sbyksaT1hLmRvdCh0aGlzLl94QXhpcyxyKSxzPWEuZG90KHRoaXMuX3lBeGlzLHIpO3JldHVybiBtKGUpPyhlLng9aSxlLnk9cyxlKTpuZXcgSihpLHMpfX07bGkucHJvdG90eXBlLnByb2plY3RQb2ludHNPbnRvUGxhbmU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbnMiLHQpLG0oZSl8fChlPVtdKTtsZXQgbj0wLG89dC5sZW5ndGg7Zm9yKGxldCByPTA7cjxvO3IrKyl7bGV0IGk9dGhpcy5wcm9qZWN0UG9pbnRPbnRvUGxhbmUodFtyXSxlW25dKTttKGkpJiYoZVtuXT1pLG4rKyl9cmV0dXJuIGUubGVuZ3RoPW4sZX07bGkucHJvdG90eXBlLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbiIsdCksbShlKXx8KGU9bmV3IEopO2xldCBuPVF3O24ub3JpZ2luPXQsYS5jbG9uZSh0aGlzLl9wbGFuZS5ub3JtYWwsbi5kaXJlY3Rpb24pO2xldCBvPXlvLnJheVBsYW5lKG4sdGhpcy5fcGxhbmUsb2QpO20obyl8fChhLm5lZ2F0ZShuLmRpcmVjdGlvbixuLmRpcmVjdGlvbiksbz15by5yYXlQbGFuZShuLHRoaXMuX3BsYW5lLG9kKSk7bGV0IHI9YS5zdWJ0cmFjdChvLHRoaXMuX29yaWdpbixvKSxpPWEuZG90KHRoaXMuX3hBeGlzLHIpLHM9YS5kb3QodGhpcy5feUF4aXMscik7cmV0dXJuIGUueD1pLGUueT1zLGV9O2xpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzVG9OZWFyZXN0T25QbGFuZT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFucyIsdCksbShlKXx8KGU9W10pO2xldCBuPXQubGVuZ3RoO2UubGVuZ3RoPW47Zm9yKGxldCBvPTA7bzxuO28rKyllW29dPXRoaXMucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZSh0W29dLGVbb10pO3JldHVybiBlfTtUTj1uZXcgYTtsaS5wcm90b3R5cGUucHJvamVjdFBvaW50T250b0VsbGlwc29pZD1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFuIix0KSxtKGUpfHwoZT1uZXcgYSk7bGV0IG49dGhpcy5fZWxsaXBzb2lkLG89dGhpcy5fb3JpZ2luLHI9dGhpcy5feEF4aXMsaT10aGlzLl95QXhpcyxzPVROO3JldHVybiBhLm11bHRpcGx5QnlTY2FsYXIocix0LngscyksZT1hLmFkZChvLHMsZSksYS5tdWx0aXBseUJ5U2NhbGFyKGksdC55LHMpLGEuYWRkKGUscyxlKSxuLnNjYWxlVG9HZW9jZW50cmljU3VyZmFjZShlLGUpLGV9O2xpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzT250b0VsbGlwc29pZD1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFucyIsdCk7bGV0IG49dC5sZW5ndGg7bShlKT9lLmxlbmd0aD1uOmU9bmV3IEFycmF5KG4pO2ZvcihsZXQgbz0wO288bjsrK28pZVtvXT10aGlzLnByb2plY3RQb2ludE9udG9FbGxpcHNvaWQodFtvXSxlW29dKTtyZXR1cm4gZX07QW89bGl9KTtmdW5jdGlvbiBCZSh0LGUpe3RoaXMuY2VudGVyPWEuY2xvbmUodD8/YS5aRVJPKSx0aGlzLmhhbGZBeGVzPVouY2xvbmUoZT8/Wi5aRVJPKX1mdW5jdGlvbiBKdyh0LGUsbixvLHIsaSxzLGYsdSxjLGwpe2lmKCFtKHIpfHwhbShpKXx8IW0ocyl8fCFtKGYpfHwhbSh1KXx8IW0oYykpdGhyb3cgbmV3IEQoImFsbCBleHRlbnRzIChtaW5pbXVtL21heGltdW0gWC9ZL1opIGFyZSByZXF1aXJlZC4iKTttKGwpfHwobD1uZXcgQmUpO2xldCBwPWwuaGFsZkF4ZXM7Wi5zZXRDb2x1bW4ocCwwLGUscCksWi5zZXRDb2x1bW4ocCwxLG4scCksWi5zZXRDb2x1bW4ocCwyLG8scCk7bGV0IGQ9clQ7ZC54PShyK2kpLzIsZC55PShzK2YpLzIsZC56PSh1K2MpLzI7bGV0IGg9Tk47aC54PShpLXIpLzIsaC55PShmLXMpLzIsaC56PShjLXUpLzI7bGV0IF89bC5jZW50ZXI7cmV0dXJuIGQ9Wi5tdWx0aXBseUJ5VmVjdG9yKHAsZCxkKSxhLmFkZCh0LGQsXyksWi5tdWx0aXBseUJ5U2NhbGUocCxoLHApLGx9dmFyIE9OLEVOLFJOLFNOLHhOLENOLFBOLE1OLHJULE5OLHRULElOLHZOLEZOLExOLEROLEJOLFVOLGVULGtOLG5ULEdOLFZOLHpOLGpOLEhOLHFOLEtOLFdOLFhOLFlOLCROLFpOLFFOLEpOLHRJLGlULHNULGNULGVJLG9ULG5JLG9JLHJJLGlJLHNJLGNJLGFJLGZJLENvLGRhPSQoKCk9Pnt2ZSgpO2tlKCk7RHQoKTtJZSgpO1d0KCk7ZnQoKTtIdCgpOyR0KCk7cGEoKTtWcygpO1dsKCk7S3QoKTtVbigpO2tuKCk7dXMoKTtUbigpO0JlLnBhY2tlZExlbmd0aD1hLnBhY2tlZExlbmd0aCtaLnBhY2tlZExlbmd0aDtCZS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGEucGFjayh0LmNlbnRlcixlLG4pLFoucGFjayh0LmhhbGZBeGVzLGUsbithLnBhY2tlZExlbmd0aCksZX07QmUudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLG0obil8fChuPW5ldyBCZSksYS51bnBhY2sodCxlLG4uY2VudGVyKSxaLnVucGFjayh0LGUrYS5wYWNrZWRMZW5ndGgsbi5oYWxmQXhlcyksbn07T049bmV3IGEsRU49bmV3IGEsUk49bmV3IGEsU049bmV3IGEseE49bmV3IGEsQ049bmV3IGEsUE49bmV3IFosTU49e3VuaXRhcnk6bmV3IFosZGlhZ29uYWw6bmV3IFp9O0JlLmZyb21Qb2ludHM9ZnVuY3Rpb24odCxlKXtpZihtKGUpfHwoZT1uZXcgQmUpLCFtKHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIGUuaGFsZkF4ZXM9Wi5aRVJPLGUuY2VudGVyPWEuWkVSTyxlO2xldCBuLG89dC5sZW5ndGgscj1hLmNsb25lKHRbMF0sT04pO2ZvcihuPTE7bjxvO24rKylhLmFkZChyLHRbbl0scik7bGV0IGk9MS9vO2EubXVsdGlwbHlCeVNjYWxhcihyLGkscik7bGV0IHM9MCxmPTAsdT0wLGM9MCxsPTAscD0wLGQ7Zm9yKG49MDtuPG87bisrKWQ9YS5zdWJ0cmFjdCh0W25dLHIsRU4pLHMrPWQueCpkLngsZis9ZC54KmQueSx1Kz1kLngqZC56LGMrPWQueSpkLnksbCs9ZC55KmQueixwKz1kLnoqZC56O3MqPWksZio9aSx1Kj1pLGMqPWksbCo9aSxwKj1pO2xldCBoPVBOO2hbMF09cyxoWzFdPWYsaFsyXT11LGhbM109ZixoWzRdPWMsaFs1XT1sLGhbNl09dSxoWzddPWwsaFs4XT1wO2xldCBfPVouY29tcHV0ZUVpZ2VuRGVjb21wb3NpdGlvbihoLE1OKSxnPVouY2xvbmUoXy51bml0YXJ5LGUuaGFsZkF4ZXMpLGI9Wi5nZXRDb2x1bW4oZywwLFNOKSx3PVouZ2V0Q29sdW1uKGcsMSx4TiksTz1aLmdldENvbHVtbihnLDIsQ04pLEU9LU51bWJlci5NQVhfVkFMVUUsVD0tTnVtYmVyLk1BWF9WQUxVRSx4PS1OdW1iZXIuTUFYX1ZBTFVFLE09TnVtYmVyLk1BWF9WQUxVRSxOPU51bWJlci5NQVhfVkFMVUUsRj1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihuPTA7bjxvO24rKylkPXRbbl0sRT1NYXRoLm1heChhLmRvdChiLGQpLEUpLFQ9TWF0aC5tYXgoYS5kb3QodyxkKSxUKSx4PU1hdGgubWF4KGEuZG90KE8sZCkseCksTT1NYXRoLm1pbihhLmRvdChiLGQpLE0pLE49TWF0aC5taW4oYS5kb3QodyxkKSxOKSxGPU1hdGgubWluKGEuZG90KE8sZCksRik7Yj1hLm11bHRpcGx5QnlTY2FsYXIoYiwuNSooTStFKSxiKSx3PWEubXVsdGlwbHlCeVNjYWxhcih3LC41KihOK1QpLHcpLE89YS5tdWx0aXBseUJ5U2NhbGFyKE8sLjUqKEYreCksTyk7bGV0IEk9YS5hZGQoYix3LGUuY2VudGVyKTthLmFkZChJLE8sSSk7bGV0IHY9Uk47cmV0dXJuIHYueD1FLU0sdi55PVQtTix2Lno9eC1GLGEubXVsdGlwbHlCeVNjYWxhcih2LC41LHYpLFoubXVsdGlwbHlCeVNjYWxlKGUuaGFsZkF4ZXMsdixlLmhhbGZBeGVzKSxlfTtyVD1uZXcgYSxOTj1uZXcgYTt0VD1uZXcgY3QsSU49bmV3IGEsdk49bmV3IGN0LEZOPW5ldyBjdCxMTj1uZXcgY3QsRE49bmV3IGN0LEJOPW5ldyBjdCxVTj1uZXcgYSxlVD1uZXcgYSxrTj1uZXcgYSxuVD1uZXcgYSxHTj1uZXcgYSxWTj1uZXcgSix6Tj1uZXcgSixqTj1uZXcgSixITj1uZXcgSixxTj1uZXcgSixLTj1uZXcgYSxXTj1uZXcgYSxYTj1uZXcgYSxZTj1uZXcgYSwkTj1uZXcgSixaTj1uZXcgYSxRTj1uZXcgYSxKTj1uZXcgYSx0ST1uZXcgb24oYS5VTklUX1gsMCk7QmUuZnJvbVJlY3RhbmdsZT1mdW5jdGlvbih0LGUsbixvLHIpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJyZWN0YW5nbGUgaXMgcmVxdWlyZWQiKTtpZih0LndpZHRoPDB8fHQud2lkdGg+UC5UV09fUEkpdGhyb3cgbmV3IEQoIlJlY3RhbmdsZSB3aWR0aCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMiAqIHBpIik7aWYodC5oZWlnaHQ8MHx8dC5oZWlnaHQ+UC5QSSl0aHJvdyBuZXcgRCgiUmVjdGFuZ2xlIGhlaWdodCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgcGkiKTtpZihtKG8pJiYhUC5lcXVhbHNFcHNpbG9uKG8ucmFkaWkueCxvLnJhZGlpLnksUC5FUFNJTE9OMTUpKXRocm93IG5ldyBEKCJFbGxpcHNvaWQgbXVzdCBiZSBhbiBlbGxpcHNvaWQgb2YgcmV2b2x1dGlvbiAocmFkaWkueCA9PSByYWRpaS55KSIpO2U9ZT8/MCxuPW4/PzAsbz1vPz9ZLmRlZmF1bHQ7bGV0IGkscyxmLHUsYyxsLHA7aWYodC53aWR0aDw9UC5QSSl7bGV0IE49TnQuY2VudGVyKHQsdFQpLEY9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihOLElOKSxJPW5ldyBBbyhGLG8pO3A9SS5wbGFuZTtsZXQgdj1OLmxvbmdpdHVkZSxCPXQuc291dGg8MCYmdC5ub3J0aD4wPzA6Ti5sYXRpdHVkZSxBPWN0LmZyb21SYWRpYW5zKHYsdC5ub3J0aCxuLHZOKSxTPWN0LmZyb21SYWRpYW5zKHQud2VzdCx0Lm5vcnRoLG4sRk4pLEM9Y3QuZnJvbVJhZGlhbnModC53ZXN0LEIsbixMTiksTD1jdC5mcm9tUmFkaWFucyh0Lndlc3QsdC5zb3V0aCxuLEROKSx6PWN0LmZyb21SYWRpYW5zKHYsdC5zb3V0aCxuLEJOKSxqPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oQSxVTiksaz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFMsZVQpLHE9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihDLGtOKSxXPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTCxuVCksUj1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHosR04pLG50PUkucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShqLFZOKSxhdD1JLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoayx6TiksbHQ9SS5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKHEsak4pLF90PUkucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShXLEhOKSxvdD1JLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoUixxTik7cmV0dXJuIGk9TWF0aC5taW4oYXQueCxsdC54LF90LngpLHM9LWksdT1NYXRoLm1heChhdC55LG50LnkpLGY9TWF0aC5taW4oX3QueSxvdC55KSxTLmhlaWdodD1MLmhlaWdodD1lLGs9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihTLGVUKSxXPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTCxuVCksYz1NYXRoLm1pbihvbi5nZXRQb2ludERpc3RhbmNlKHAsayksb24uZ2V0UG9pbnREaXN0YW5jZShwLFcpKSxsPW4sSncoSS5vcmlnaW4sSS54QXhpcyxJLnlBeGlzLEkuekF4aXMsaSxzLGYsdSxjLGwscil9bGV0IGQ9dC5zb3V0aD4wLGg9dC5ub3J0aDwwLF89ZD90LnNvdXRoOmg/dC5ub3J0aDowLGc9TnQuY2VudGVyKHQsdFQpLmxvbmdpdHVkZSxiPWEuZnJvbVJhZGlhbnMoZyxfLG4sbyxLTik7Yi56PTA7bGV0IE89TWF0aC5hYnMoYi54KTxQLkVQU0lMT04xMCYmTWF0aC5hYnMoYi55KTxQLkVQU0lMT04xMD9hLlVOSVRfWDphLm5vcm1hbGl6ZShiLFdOKSxFPWEuVU5JVF9aLFQ9YS5jcm9zcyhPLEUsWE4pO3A9b24uZnJvbVBvaW50Tm9ybWFsKGIsTyx0SSk7bGV0IHg9YS5mcm9tUmFkaWFucyhnK1AuUElfT1ZFUl9UV08sXyxuLG8sWU4pO3M9YS5kb3Qob24ucHJvamVjdFBvaW50T250b1BsYW5lKHAseCwkTiksVCksaT0tcyx1PWEuZnJvbVJhZGlhbnMoMCx0Lm5vcnRoLGg/ZTpuLG8sWk4pLnosZj1hLmZyb21SYWRpYW5zKDAsdC5zb3V0aCxkP2U6bixvLFFOKS56O2xldCBNPWEuZnJvbVJhZGlhbnModC5lYXN0LF8sbixvLEpOKTtyZXR1cm4gYz1vbi5nZXRQb2ludERpc3RhbmNlKHAsTSksbD0wLEp3KGIsVCxFLE8saSxzLGYsdSxjLGwscil9O0JlLmZyb21UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInRyYW5zZm9ybWF0aW9uIix0KSxtKGUpfHwoZT1uZXcgQmUpLGUuY2VudGVyPXN0LmdldFRyYW5zbGF0aW9uKHQsZS5jZW50ZXIpLGUuaGFsZkF4ZXM9c3QuZ2V0TWF0cml4Myh0LGUuaGFsZkF4ZXMpLGUuaGFsZkF4ZXM9Wi5tdWx0aXBseUJ5U2NhbGFyKGUuaGFsZkF4ZXMsLjUsZS5oYWxmQXhlcyksZX07QmUuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihtKHQpKXJldHVybiBtKGUpPyhhLmNsb25lKHQuY2VudGVyLGUuY2VudGVyKSxaLmNsb25lKHQuaGFsZkF4ZXMsZS5oYWxmQXhlcyksZSk6bmV3IEJlKHQuY2VudGVyLHQuaGFsZkF4ZXMpfTtCZS5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJib3ggaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoInBsYW5lIGlzIHJlcXVpcmVkLiIpO2xldCBuPXQuY2VudGVyLG89ZS5ub3JtYWwscj10LmhhbGZBeGVzLGk9by54LHM9by55LGY9by56LHU9TWF0aC5hYnMoaSpyW1ouQ09MVU1OMFJPVzBdK3MqcltaLkNPTFVNTjBST1cxXStmKnJbWi5DT0xVTU4wUk9XMl0pK01hdGguYWJzKGkqcltaLkNPTFVNTjFST1cwXStzKnJbWi5DT0xVTU4xUk9XMV0rZipyW1ouQ09MVU1OMVJPVzJdKStNYXRoLmFicyhpKnJbWi5DT0xVTU4yUk9XMF0rcypyW1ouQ09MVU1OMlJPVzFdK2YqcltaLkNPTFVNTjJST1cyXSksYz1hLmRvdChvLG4pK2UuZGlzdGFuY2U7cmV0dXJuIGM8PS11P1NuLk9VVFNJREU6Yz49dT9Tbi5JTlNJREU6U24uSU5URVJTRUNUSU5HfTtpVD1uZXcgYSxzVD1uZXcgYSxjVD1uZXcgYSxlST1uZXcgYSxvVD1uZXcgYSxuST1uZXcgYTtCZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJib3ggaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoImNhcnRlc2lhbiBpcyByZXF1aXJlZC4iKTtsZXQgbj1hLnN1YnRyYWN0KGUsdC5jZW50ZXIsclQpLG89dC5oYWxmQXhlcyxyPVouZ2V0Q29sdW1uKG8sMCxpVCksaT1aLmdldENvbHVtbihvLDEsc1QpLHM9Wi5nZXRDb2x1bW4obywyLGNUKSxmPWEubWFnbml0dWRlKHIpLHU9YS5tYWduaXR1ZGUoaSksYz1hLm1hZ25pdHVkZShzKSxsPSEwLHA9ITAsZD0hMDtmPjA/YS5kaXZpZGVCeVNjYWxhcihyLGYscik6bD0hMSx1PjA/YS5kaXZpZGVCeVNjYWxhcihpLHUsaSk6cD0hMSxjPjA/YS5kaXZpZGVCeVNjYWxhcihzLGMscyk6ZD0hMTtsZXQgaD0hbCshcCshZCxfLGcsYjtpZihoPT09MSl7bGV0IFQ9cjtfPWksZz1zLHA/ZHx8KFQ9cyxnPXIpOihUPWksXz1yKSxiPWEuY3Jvc3MoXyxnLG9UKSxUPT09cj9yPWI6VD09PWk/aT1iOlQ9PT1zJiYocz1iKX1lbHNlIGlmKGg9PT0yKXtfPXIscD9fPWk6ZCYmKF89cyk7bGV0IFQ9YS5VTklUX1k7VC5lcXVhbHNFcHNpbG9uKF8sUC5FUFNJTE9OMykmJihUPWEuVU5JVF9YKSxnPWEuY3Jvc3MoXyxULGVJKSxhLm5vcm1hbGl6ZShnLGcpLGI9YS5jcm9zcyhfLGcsb1QpLGEubm9ybWFsaXplKGIsYiksXz09PXI/KGk9ZyxzPWIpOl89PT1pPyhzPWcscj1iKTpfPT09cyYmKHI9ZyxpPWIpfWVsc2UgaD09PTMmJihyPWEuVU5JVF9YLGk9YS5VTklUX1kscz1hLlVOSVRfWik7bGV0IHc9bkk7dy54PWEuZG90KG4sciksdy55PWEuZG90KG4saSksdy56PWEuZG90KG4scyk7bGV0IE89MCxFO3JldHVybiB3Lng8LWY/KEU9dy54K2YsTys9RSpFKTp3Lng+ZiYmKEU9dy54LWYsTys9RSpFKSx3Lnk8LXU/KEU9dy55K3UsTys9RSpFKTp3Lnk+dSYmKEU9dy55LXUsTys9RSpFKSx3Lno8LWM/KEU9dy56K2MsTys9RSpFKTp3Lno+YyYmKEU9dy56LWMsTys9RSpFKSxPfTtvST1uZXcgYSxyST1uZXcgYTtCZS5jb21wdXRlUGxhbmVEaXN0YW5jZXM9ZnVuY3Rpb24odCxlLG4sbyl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImJveCBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgicG9zaXRpb24gaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoImRpcmVjdGlvbiBpcyByZXF1aXJlZC4iKTttKG8pfHwobz1uZXcgSnIpO2xldCByPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxpPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzPXQuY2VudGVyLGY9dC5oYWxmQXhlcyx1PVouZ2V0Q29sdW1uKGYsMCxpVCksYz1aLmdldENvbHVtbihmLDEsc1QpLGw9Wi5nZXRDb2x1bW4oZiwyLGNUKSxwPWEuYWRkKHUsYyxvSSk7YS5hZGQocCxsLHApLGEuYWRkKHAscyxwKTtsZXQgZD1hLnN1YnRyYWN0KHAsZSxySSksaD1hLmRvdChuLGQpO3JldHVybiByPU1hdGgubWluKGgsciksaT1NYXRoLm1heChoLGkpLGEuYWRkKHMsdSxwKSxhLmFkZChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksaD1hLmRvdChuLGQpLHI9TWF0aC5taW4oaCxyKSxpPU1hdGgubWF4KGgsaSksYS5hZGQocyx1LHApLGEuc3VidHJhY3QocCxjLHApLGEuYWRkKHAsbCxwKSxhLnN1YnRyYWN0KHAsZSxkKSxoPWEuZG90KG4sZCkscj1NYXRoLm1pbihoLHIpLGk9TWF0aC5tYXgoaCxpKSxhLmFkZChzLHUscCksYS5zdWJ0cmFjdChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksaD1hLmRvdChuLGQpLHI9TWF0aC5taW4oaCxyKSxpPU1hdGgubWF4KGgsaSksYS5zdWJ0cmFjdChzLHUscCksYS5hZGQocCxjLHApLGEuYWRkKHAsbCxwKSxhLnN1YnRyYWN0KHAsZSxkKSxoPWEuZG90KG4sZCkscj1NYXRoLm1pbihoLHIpLGk9TWF0aC5tYXgoaCxpKSxhLnN1YnRyYWN0KHMsdSxwKSxhLmFkZChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksaD1hLmRvdChuLGQpLHI9TWF0aC5taW4oaCxyKSxpPU1hdGgubWF4KGgsaSksYS5zdWJ0cmFjdChzLHUscCksYS5zdWJ0cmFjdChwLGMscCksYS5hZGQocCxsLHApLGEuc3VidHJhY3QocCxlLGQpLGg9YS5kb3QobixkKSxyPU1hdGgubWluKGgsciksaT1NYXRoLm1heChoLGkpLGEuc3VidHJhY3Qocyx1LHApLGEuc3VidHJhY3QocCxjLHApLGEuc3VidHJhY3QocCxsLHApLGEuc3VidHJhY3QocCxlLGQpLGg9YS5kb3QobixkKSxyPU1hdGgubWluKGgsciksaT1NYXRoLm1heChoLGkpLG8uc3RhcnQ9cixvLnN0b3A9aSxvfTtpST1uZXcgYSxzST1uZXcgYSxjST1uZXcgYTtCZS5jb21wdXRlQ29ybmVycz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiYm94Iix0KSxtKGUpfHwoZT1bbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGFdKTtsZXQgbj10LmNlbnRlcixvPXQuaGFsZkF4ZXMscj1aLmdldENvbHVtbihvLDAsaUkpLGk9Wi5nZXRDb2x1bW4obywxLHNJKSxzPVouZ2V0Q29sdW1uKG8sMixjSSk7cmV0dXJuIGEuY2xvbmUobixlWzBdKSxhLnN1YnRyYWN0KGVbMF0scixlWzBdKSxhLnN1YnRyYWN0KGVbMF0saSxlWzBdKSxhLnN1YnRyYWN0KGVbMF0scyxlWzBdKSxhLmNsb25lKG4sZVsxXSksYS5zdWJ0cmFjdChlWzFdLHIsZVsxXSksYS5zdWJ0cmFjdChlWzFdLGksZVsxXSksYS5hZGQoZVsxXSxzLGVbMV0pLGEuY2xvbmUobixlWzJdKSxhLnN1YnRyYWN0KGVbMl0scixlWzJdKSxhLmFkZChlWzJdLGksZVsyXSksYS5zdWJ0cmFjdChlWzJdLHMsZVsyXSksYS5jbG9uZShuLGVbM10pLGEuc3VidHJhY3QoZVszXSxyLGVbM10pLGEuYWRkKGVbM10saSxlWzNdKSxhLmFkZChlWzNdLHMsZVszXSksYS5jbG9uZShuLGVbNF0pLGEuYWRkKGVbNF0scixlWzRdKSxhLnN1YnRyYWN0KGVbNF0saSxlWzRdKSxhLnN1YnRyYWN0KGVbNF0scyxlWzRdKSxhLmNsb25lKG4sZVs1XSksYS5hZGQoZVs1XSxyLGVbNV0pLGEuc3VidHJhY3QoZVs1XSxpLGVbNV0pLGEuYWRkKGVbNV0scyxlWzVdKSxhLmNsb25lKG4sZVs2XSksYS5hZGQoZVs2XSxyLGVbNl0pLGEuYWRkKGVbNl0saSxlWzZdKSxhLnN1YnRyYWN0KGVbNl0scyxlWzZdKSxhLmNsb25lKG4sZVs3XSksYS5hZGQoZVs3XSxyLGVbN10pLGEuYWRkKGVbN10saSxlWzddKSxhLmFkZChlWzddLHMsZVs3XSksZX07YUk9bmV3IFo7QmUuY29tcHV0ZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJib3giLHQpLG0oZSl8fChlPW5ldyBzdCk7bGV0IG49dC5jZW50ZXIsbz1aLm11bHRpcGx5QnlVbmlmb3JtU2NhbGUodC5oYWxmQXhlcywyLGFJKTtyZXR1cm4gc3QuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24obyxuLGUpfTtmST1uZXcgQXQ7QmUuaXNPY2NsdWRlZD1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJib3ggaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoIm9jY2x1ZGVyIGlzIHJlcXVpcmVkLiIpO2xldCBuPUF0LmZyb21PcmllbnRlZEJvdW5kaW5nQm94KHQsZkkpO3JldHVybiFlLmlzQm91bmRpbmdTcGhlcmVWaXNpYmxlKG4pfTtCZS5wcm90b3R5cGUuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24odCl7cmV0dXJuIEJlLmludGVyc2VjdFBsYW5lKHRoaXMsdCl9O0JlLnByb3RvdHlwZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbih0KXtyZXR1cm4gQmUuZGlzdGFuY2VTcXVhcmVkVG8odGhpcyx0KX07QmUucHJvdG90eXBlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIEJlLmNvbXB1dGVQbGFuZURpc3RhbmNlcyh0aGlzLHQsZSxuKX07QmUucHJvdG90eXBlLmNvbXB1dGVDb3JuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBCZS5jb21wdXRlQ29ybmVycyh0aGlzLHQpfTtCZS5wcm90b3R5cGUuY29tcHV0ZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBCZS5jb21wdXRlVHJhbnNmb3JtYXRpb24odGhpcyx0KX07QmUucHJvdG90eXBlLmlzT2NjbHVkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIEJlLmlzT2NjbHVkZWQodGhpcyx0KX07QmUuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxtKHQpJiZtKGUpJiZhLmVxdWFscyh0LmNlbnRlcixlLmNlbnRlcikmJlouZXF1YWxzKHQuaGFsZkF4ZXMsZS5oYWxmQXhlcyl9O0JlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gQmUuY2xvbmUodGhpcyx0KX07QmUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gQmUuZXF1YWxzKHRoaXMsdCl9O0NvPUJlfSk7ZnVuY3Rpb24gcFQodCxlLG4sbyxyKXtsZXQgaT1hLnN1YnRyYWN0KHQsZSx1SSkscz1hLmRvdChuLGkpLGY9YS5kb3QobyxpKTtyZXR1cm4gSi5mcm9tRWxlbWVudHMocyxmLHIpfXZhciBNZix1SSxhVCxmVCx1VCxsVCxtYSxJMD0kKCgpPT57a2UoKTtEdCgpO1d0KCk7VW4oKTtkYSgpO01mPXt9LHVJPW5ldyBhLGFUPW5ldyBhLGZUPW5ldyBhLHVUPW5ldyBhLGxUPW5ldyBDbztNZi52YWxpZE91dGxpbmU9ZnVuY3Rpb24odCl7eS5kZWZpbmVkKCJwb3NpdGlvbnMiLHQpO2xldCBuPUNvLmZyb21Qb2ludHModCxsVCkuaGFsZkF4ZXMsbz1aLmdldENvbHVtbihuLDAsYVQpLHI9Wi5nZXRDb2x1bW4obiwxLGZUKSxpPVouZ2V0Q29sdW1uKG4sMix1VCkscz1hLm1hZ25pdHVkZShvKSxmPWEubWFnbml0dWRlKHIpLHU9YS5tYWduaXR1ZGUoaSk7cmV0dXJuIShzPT09MCYmKGY9PT0wfHx1PT09MCl8fGY9PT0wJiZ1PT09MCl9O01mLmNvbXB1dGVQcm9qZWN0VG8yREFyZ3VtZW50cz1mdW5jdGlvbih0LGUsbixvKXt5LmRlZmluZWQoInBvc2l0aW9ucyIsdCkseS5kZWZpbmVkKCJjZW50ZXJSZXN1bHQiLGUpLHkuZGVmaW5lZCgicGxhbmVBeGlzMVJlc3VsdCIsbikseS5kZWZpbmVkKCJwbGFuZUF4aXMyUmVzdWx0IixvKTtsZXQgcj1Dby5mcm9tUG9pbnRzKHQsbFQpLGk9ci5oYWxmQXhlcyxzPVouZ2V0Q29sdW1uKGksMCxhVCksZj1aLmdldENvbHVtbihpLDEsZlQpLHU9Wi5nZXRDb2x1bW4oaSwyLHVUKSxjPWEubWFnbml0dWRlKHMpLGw9YS5tYWduaXR1ZGUoZikscD1hLm1hZ25pdHVkZSh1KSxkPU1hdGgubWluKGMsbCxwKTtpZihjPT09MCYmKGw9PT0wfHxwPT09MCl8fGw9PT0wJiZwPT09MClyZXR1cm4hMTtsZXQgaCxfO3JldHVybihkPT09bHx8ZD09PXApJiYoaD1zKSxkPT09Yz9oPWY6ZD09PXAmJihfPWYpLChkPT09Y3x8ZD09PWwpJiYoXz11KSxhLm5vcm1hbGl6ZShoLG4pLGEubm9ybWFsaXplKF8sbyksYS5jbG9uZShyLmNlbnRlcixlKSwhMH07TWYuY3JlYXRlUHJvamVjdFBvaW50c1RvMkRGdW5jdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKG8pe2xldCByPW5ldyBBcnJheShvLmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxvLmxlbmd0aDtpKyspcltpXT1wVChvW2ldLHQsZSxuKTtyZXR1cm4gcn19O01mLmNyZWF0ZVByb2plY3RQb2ludFRvMkRGdW5jdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKG8scil7cmV0dXJuIHBUKG8sdCxlLG4scil9fTttYT1NZn0pO3ZhciBsSSxoZSx1Yz0kKCgpPT57bEk9e05PTkU6MCxHRU9ERVNJQzoxLFJIVU1COjJ9LGhlPU9iamVjdC5mcmVlemUobEkpfSk7ZnVuY3Rpb24gRjAodCxlLG4pe2lmKHQ9PT0wKXJldHVybiBlKm47bGV0IG89dCp0LHI9bypvLGk9cipvLHM9aSpvLGY9cypvLHU9ZipvLGM9bixsPU1hdGguc2luKDIqYykscD1NYXRoLnNpbig0KmMpLGQ9TWF0aC5zaW4oNipjKSxoPU1hdGguc2luKDgqYyksXz1NYXRoLnNpbigxMCpjKSxnPU1hdGguc2luKDEyKmMpO3JldHVybiBlKigoMS1vLzQtMypyLzY0LTUqaS8yNTYtMTc1KnMvMTYzODQtNDQxKmYvNjU1MzYtNDg1MSp1LzEwNDg1NzYpKmMtKDMqby84KzMqci8zMis0NSppLzEwMjQrMTA1KnMvNDA5NisyMjA1KmYvMTMxMDcyKzYyMzcqdS81MjQyODgpKmwrKDE1KnIvMjU2KzQ1KmkvMTAyNCs1MjUqcy8xNjM4NCsxNTc1KmYvNjU1MzYrMTU1OTI1KnUvODM4ODYwOCkqcC0oMzUqaS8zMDcyKzE3NSpzLzEyMjg4KzM2NzUqZi8yNjIxNDQrMTM0NzUqdS8xMDQ4NTc2KSpkKygzMTUqcy8xMzEwNzIrMjIwNSpmLzUyNDI4OCs0MzY1OSp1LzgzODg2MDgpKmgtKDY5MypmLzEzMTA3MjArNjIzNyp1LzUyNDI4ODApKl8rMTAwMSp1LzgzODg2MDgqZyl9ZnVuY3Rpb24gcEkodCxlLG4pe2xldCBvPXQvbjtpZihlPT09MClyZXR1cm4gbztsZXQgcj1vKm8saT1yKm8scz1pKm8sZj1lLHU9ZipmLGM9dSp1LGw9Yyp1LHA9bCp1LGQ9cCp1LGg9ZCp1LF89TWF0aC5zaW4oMipvKSxnPU1hdGguY29zKDIqbyksYj1NYXRoLnNpbig0Km8pLHc9TWF0aC5jb3MoNCpvKSxPPU1hdGguc2luKDYqbyksRT1NYXRoLmNvcyg2Km8pLFQ9TWF0aC5zaW4oOCpvKSx4PU1hdGguY29zKDgqbyksTT1NYXRoLnNpbigxMCpvKSxOPU1hdGguY29zKDEwKm8pLEY9TWF0aC5zaW4oMTIqbyk7cmV0dXJuIG8rbyp1LzQrNypvKmMvNjQrMTUqbypsLzI1Nis1NzkqbypwLzE2Mzg0KzE1MTUqbypkLzY1NTM2KzE2ODM3Km8qaC8xMDQ4NTc2KygzKm8qYy8xNis0NSpvKmwvMjU2LW8qKDMyKnItNTYxKSpwLzQwOTYtbyooMjMyKnItMTY3NykqZC8xNjM4NCtvKigzOTk5ODUtOTA1NjAqcis1MTIqcykqaC81MjQyODgwKSpnKygyMSpvKmwvMjU2KzQ4MypvKnAvNDA5Ni1vKigyMjQqci0xOTY5KSpkLzE2Mzg0LW8qKDMzMTUyKnItMTEyNTk5KSpoLzEwNDg1NzYpKncrKDE1MSpvKnAvNDA5Nis0NjgxKm8qZC82NTUzNisxNDc5Km8qaC8xNjM4NC00NTMqaSpoLzMyNzY4KSpFKygxMDk3Km8qZC82NTUzNis0Mjc4MypvKmgvMTA0ODU3NikqeCs4MDExKm8qaC8xMDQ4NTc2Kk4rKDMqdS84KzMqYy8xNisyMTMqbC8yMDQ4LTMqcipsLzY0KzI1NSpwLzQwOTYtMzMqcipwLzUxMisyMDg2MSpkLzUyNDI4OC0zMypyKmQvNTEyK3MqZC8xMDI0KzI4MjczKmgvMTA0ODU3Ni00NzEqcipoLzgxOTIrOSpzKmgvNDA5NikqXysoMjEqYy8yNTYrMjEqbC8yNTYrNTMzKnAvODE5Mi0yMSpyKnAvNTEyKzE5NypkLzQwOTYtMzE1KnIqZC80MDk2KzU4NDAzOSpoLzE2Nzc3MjE2LTEyNTE3KnIqaC8xMzEwNzIrNypzKmgvMjA0OCkqYisoMTUxKmwvNjE0NCsxNTEqcC80MDk2KzUwMTkqZC8xMzEwNzItNDUzKnIqZC8xNjM4NCsyNjk2NSpoLzc4NjQzMi04NjA3KnIqaC8xMzEwNzIpKk8rKDEwOTcqcC8xMzEwNzIrMTA5NypkLzY1NTM2KzIyNTc5NypoLzEwNDg1NzYwLTEwOTcqcipoLzY1NTM2KSpUKyg4MDExKmQvMjYyMTQ0MCs4MDExKmgvMTA0ODU3NikqTSsyOTMzOTMqaC8yNTE2NTgyNDAqRn1mdW5jdGlvbiBoYSh0LGUpe2lmKHQ9PT0wKXJldHVybiBNYXRoLmxvZyhNYXRoLnRhbiguNSooUC5QSV9PVkVSX1RXTytlKSkpO2xldCBuPXQqTWF0aC5zaW4oZSk7cmV0dXJuIE1hdGgubG9nKE1hdGgudGFuKC41KihQLlBJX09WRVJfVFdPK2UpKSktdC8yKk1hdGgubG9nKCgxK24pLygxLW4pKX1mdW5jdGlvbiBkSSh0LGUsbixvLHIpe2xldCBpPWhhKHQuX2VsbGlwdGljaXR5LG4pLHM9aGEodC5fZWxsaXB0aWNpdHkscik7cmV0dXJuIE1hdGguYXRhbjIoUC5uZWdhdGl2ZVBpVG9QaShvLWUpLHMtaSl9ZnVuY3Rpb24gbUkodCxlLG4sbyxyLGkscyl7bGV0IGY9dC5faGVhZGluZyx1PWktbyxjPTA7aWYoUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGYpLFAuUElfT1ZFUl9UV08sUC5FUFNJTE9OOCkpaWYoZT09PW4pYz1lKk1hdGguY29zKHIpKlAubmVnYXRpdmVQaVRvUGkodSk7ZWxzZXtsZXQgbD1NYXRoLnNpbihyKTtjPWUqTWF0aC5jb3MocikqUC5uZWdhdGl2ZVBpVG9QaSh1KS9NYXRoLnNxcnQoMS10Ll9lbGxpcHRpY2l0eVNxdWFyZWQqbCpsKX1lbHNle2xldCBsPUYwKHQuX2VsbGlwdGljaXR5LGUscik7Yz0oRjAodC5fZWxsaXB0aWNpdHksZSxzKS1sKS9NYXRoLmNvcyhmKX1yZXR1cm4gTWF0aC5hYnMoYyl9ZnVuY3Rpb24gZFQodCxlLG4sbyl7bGV0IHI9YS5ub3JtYWxpemUoby5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihlLHYwKSxoSSksaT1hLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKG4sdjApLHYwKTt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygidmFsdWUiLE1hdGguYWJzKE1hdGguYWJzKGEuYW5nbGVCZXR3ZWVuKHIsaSkpLU1hdGguUEkpLC4wMTI1KTtsZXQgcz1vLm1heGltdW1SYWRpdXMsZj1vLm1pbmltdW1SYWRpdXMsdT1zKnMsYz1mKmY7dC5fZWxsaXB0aWNpdHlTcXVhcmVkPSh1LWMpL3UsdC5fZWxsaXB0aWNpdHk9TWF0aC5zcXJ0KHQuX2VsbGlwdGljaXR5U3F1YXJlZCksdC5fc3RhcnQ9Y3QuY2xvbmUoZSx0Ll9zdGFydCksdC5fc3RhcnQuaGVpZ2h0PTAsdC5fZW5kPWN0LmNsb25lKG4sdC5fZW5kKSx0Ll9lbmQuaGVpZ2h0PTAsdC5faGVhZGluZz1kSSh0LGUubG9uZ2l0dWRlLGUubGF0aXR1ZGUsbi5sb25naXR1ZGUsbi5sYXRpdHVkZSksdC5fZGlzdGFuY2U9bUkodCxvLm1heGltdW1SYWRpdXMsby5taW5pbXVtUmFkaXVzLGUubG9uZ2l0dWRlLGUubGF0aXR1ZGUsbi5sb25naXR1ZGUsbi5sYXRpdHVkZSl9ZnVuY3Rpb24gbVQodCxlLG4sbyxyLGkpe2lmKG49PT0wKXJldHVybiBjdC5jbG9uZSh0LGkpO2xldCBzPXIqcixmLHUsYztpZihNYXRoLmFicyhQLlBJX09WRVJfVFdPLU1hdGguYWJzKGUpKT5QLkVQU0lMT044KXtsZXQgbD1GMChyLG8sdC5sYXRpdHVkZSkscD1uKk1hdGguY29zKGUpLGQ9bCtwO2lmKHU9cEkoZCxyLG8pLE1hdGguYWJzKGUpPFAuRVBTSUxPTjEwKWY9UC5uZWdhdGl2ZVBpVG9QaSh0LmxvbmdpdHVkZSk7ZWxzZXtsZXQgaD1oYShyLHQubGF0aXR1ZGUpLF89aGEocix1KTtjPU1hdGgudGFuKGUpKihfLWgpLGY9UC5uZWdhdGl2ZVBpVG9QaSh0LmxvbmdpdHVkZStjKX19ZWxzZXt1PXQubGF0aXR1ZGU7bGV0IGw7aWYocj09PTApbD1vKk1hdGguY29zKHQubGF0aXR1ZGUpO2Vsc2V7bGV0IHA9TWF0aC5zaW4odC5sYXRpdHVkZSk7bD1vKk1hdGguY29zKHQubGF0aXR1ZGUpL01hdGguc3FydCgxLXMqcCpwKX1jPW4vbCxlPjA/Zj1QLm5lZ2F0aXZlUGlUb1BpKHQubG9uZ2l0dWRlK2MpOmY9UC5uZWdhdGl2ZVBpVG9QaSh0LmxvbmdpdHVkZS1jKX1yZXR1cm4gbShpKT8oaS5sb25naXR1ZGU9ZixpLmxhdGl0dWRlPXUsaS5oZWlnaHQ9MCxpKTpuZXcgY3QoZix1LDApfWZ1bmN0aW9uIEJpKHQsZSxuKXtsZXQgbz1uPz9ZLmRlZmF1bHQ7dGhpcy5fZWxsaXBzb2lkPW8sdGhpcy5fc3RhcnQ9bmV3IGN0LHRoaXMuX2VuZD1uZXcgY3QsdGhpcy5faGVhZGluZz12b2lkIDAsdGhpcy5fZGlzdGFuY2U9dm9pZCAwLHRoaXMuX2VsbGlwdGljaXR5PXZvaWQgMCx0aGlzLl9lbGxpcHRpY2l0eVNxdWFyZWQ9dm9pZCAwLG0odCkmJm0oZSkmJmRUKHRoaXMsdCxlLG8pfXZhciBoSSx2MCxKbyxOZj0kKCgpPT57RHQoKTtJZSgpO1d0KCk7ZnQoKTtIdCgpOyR0KCk7S3QoKTtoST1uZXcgYSx2MD1uZXcgYTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaS5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH19LHN1cmZhY2VEaXN0YW5jZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuZGVmaW5lZCgiZGlzdGFuY2UiLHRoaXMuX2Rpc3RhbmNlKSx0aGlzLl9kaXN0YW5jZX19LHN0YXJ0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9fSxlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmR9fSxoZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZpbmVkKCJkaXN0YW5jZSIsdGhpcy5fZGlzdGFuY2UpLHRoaXMuX2hlYWRpbmd9fX0pO0JpLmZyb21TdGFydEhlYWRpbmdEaXN0YW5jZT1mdW5jdGlvbih0LGUsbixvLHIpe3kuZGVmaW5lZCgic3RhcnQiLHQpLHkuZGVmaW5lZCgiaGVhZGluZyIsZSkseS5kZWZpbmVkKCJkaXN0YW5jZSIsbikseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuKCJkaXN0YW5jZSIsbiwwKTtsZXQgaT1vPz9ZLmRlZmF1bHQscz1pLm1heGltdW1SYWRpdXMsZj1pLm1pbmltdW1SYWRpdXMsdT1zKnMsYz1mKmYsbD1NYXRoLnNxcnQoKHUtYykvdSk7ZT1QLm5lZ2F0aXZlUGlUb1BpKGUpO2xldCBwPW1UKHQsZSxuLGkubWF4aW11bVJhZGl1cyxsKTtyZXR1cm4hbShyKXx8bShvKSYmIW8uZXF1YWxzKHIuZWxsaXBzb2lkKT9uZXcgQmkodCxwLGkpOihyLnNldEVuZFBvaW50cyh0LHApLHIpfTtCaS5wcm90b3R5cGUuc2V0RW5kUG9pbnRzPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJzdGFydCIsdCkseS5kZWZpbmVkKCJlbmQiLGUpLGRUKHRoaXMsdCxlLHRoaXMuX2VsbGlwc29pZCl9O0JpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKHQqdGhpcy5fZGlzdGFuY2UsZSl9O0JpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJkaXN0YW5jZSIsdCksIW0odGhpcy5fZGlzdGFuY2UpfHx0aGlzLl9kaXN0YW5jZT09PTApdGhyb3cgbmV3IEQoIkVsbGlwc29pZFJodW1iTGluZSBtdXN0IGhhdmUgZGlzdGluY3Qgc3RhcnQgYW5kIGVuZCBzZXQuIik7cmV0dXJuIG1UKHRoaXMuX3N0YXJ0LHRoaXMuX2hlYWRpbmcsdCx0aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9lbGxpcHRpY2l0eSxlKX07QmkucHJvdG90eXBlLmZpbmRJbnRlcnNlY3Rpb25XaXRoTG9uZ2l0dWRlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJpbnRlcnNlY3Rpb25Mb25naXR1ZGUiLHQpLCFtKHRoaXMuX2Rpc3RhbmNlKXx8dGhpcy5fZGlzdGFuY2U9PT0wKXRocm93IG5ldyBEKCJFbGxpcHNvaWRSaHVtYkxpbmUgbXVzdCBoYXZlIGRpc3RpbmN0IHN0YXJ0IGFuZCBlbmQgc2V0LiIpO2xldCBuPXRoaXMuX2VsbGlwdGljaXR5LG89dGhpcy5faGVhZGluZyxyPU1hdGguYWJzKG8pLGk9dGhpcy5fc3RhcnQ7aWYodD1QLm5lZ2F0aXZlUGlUb1BpKHQpLFAuZXF1YWxzRXBzaWxvbihNYXRoLmFicyh0KSxNYXRoLlBJLFAuRVBTSUxPTjE0KSYmKHQ9UC5zaWduKGkubG9uZ2l0dWRlKSpNYXRoLlBJKSxtKGUpfHwoZT1uZXcgY3QpLE1hdGguYWJzKFAuUElfT1ZFUl9UV08tcik8PVAuRVBTSUxPTjgpcmV0dXJuIGUubG9uZ2l0dWRlPXQsZS5sYXRpdHVkZT1pLmxhdGl0dWRlLGUuaGVpZ2h0PTAsZTtpZihQLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMoUC5QSV9PVkVSX1RXTy1yKSxQLlBJX09WRVJfVFdPLFAuRVBTSUxPTjgpKXJldHVybiBQLmVxdWFsc0Vwc2lsb24odCxpLmxvbmdpdHVkZSxQLkVQU0lMT04xMik/dm9pZCAwOihlLmxvbmdpdHVkZT10LGUubGF0aXR1ZGU9UC5QSV9PVkVSX1RXTypQLnNpZ24oUC5QSV9PVkVSX1RXTy1vKSxlLmhlaWdodD0wLGUpO2xldCBzPWkubGF0aXR1ZGUsZj1uKk1hdGguc2luKHMpLHU9TWF0aC50YW4oLjUqKFAuUElfT1ZFUl9UV08rcykpKk1hdGguZXhwKCh0LWkubG9uZ2l0dWRlKS9NYXRoLnRhbihvKSksYz0oMStmKS8oMS1mKSxsPWkubGF0aXR1ZGUscDtkb3twPWw7bGV0IGQ9bipNYXRoLnNpbihwKSxoPSgxK2QpLygxLWQpO2w9MipNYXRoLmF0YW4odSpNYXRoLnBvdyhoL2Msbi8yKSktUC5QSV9PVkVSX1RXT313aGlsZSghUC5lcXVhbHNFcHNpbG9uKGwscCxQLkVQU0lMT04xMikpO3JldHVybiBlLmxvbmdpdHVkZT10LGUubGF0aXR1ZGU9bCxlLmhlaWdodD0wLGV9O0JpLnByb3RvdHlwZS5maW5kSW50ZXJzZWN0aW9uV2l0aExhdGl0dWRlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJpbnRlcnNlY3Rpb25MYXRpdHVkZSIsdCksIW0odGhpcy5fZGlzdGFuY2UpfHx0aGlzLl9kaXN0YW5jZT09PTApdGhyb3cgbmV3IEQoIkVsbGlwc29pZFJodW1iTGluZSBtdXN0IGhhdmUgZGlzdGluY3Qgc3RhcnQgYW5kIGVuZCBzZXQuIik7bGV0IG49dGhpcy5fZWxsaXB0aWNpdHksbz10aGlzLl9oZWFkaW5nLHI9dGhpcy5fc3RhcnQ7aWYoUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKG8pLFAuUElfT1ZFUl9UV08sUC5FUFNJTE9OOCkpcmV0dXJuO2xldCBpPWhhKG4sci5sYXRpdHVkZSkscz1oYShuLHQpLGY9TWF0aC50YW4obykqKHMtaSksdT1QLm5lZ2F0aXZlUGlUb1BpKHIubG9uZ2l0dWRlK2YpO3JldHVybiBtKGUpPyhlLmxvbmdpdHVkZT11LGUubGF0aXR1ZGU9dCxlLmhlaWdodD0wLGUpOm5ldyBjdCh1LHQsMCl9O0pvPUJpfSk7ZnVuY3Rpb24gX0kodCxlKXt0aGlzLnBvc2l0aW9ucz1tKHQpP3Q6W10sdGhpcy5ob2xlcz1tKGUpP2U6W119dmFyIGhULF9UPSQoKCk9PntmdCgpO2hUPV9JfSk7ZnVuY3Rpb24gQjAodCxlLG49Mil7bGV0IG89ZSYmZS5sZW5ndGgscj1vP2VbMF0qbjp0Lmxlbmd0aCxpPWdUKHQsMCxyLG4sITApLHM9W107aWYoIWl8fGkubmV4dD09PWkucHJldilyZXR1cm4gcztsZXQgZix1LGM7aWYobyYmKGk9d0kodCxlLGksbikpLHQubGVuZ3RoPjgwKm4pe2Y9dFswXSx1PXRbMV07bGV0IGw9ZixwPXU7Zm9yKGxldCBkPW47ZDxyO2QrPW4pe2xldCBoPXRbZF0sXz10W2QrMV07aDxmJiYoZj1oKSxfPHUmJih1PV8pLGg+bCYmKGw9aCksXz5wJiYocD1fKX1jPU1hdGgubWF4KGwtZixwLXUpLGM9YyE9PTA/MzI3NjcvYzowfXJldHVybiB2ZihpLHMsbixmLHUsYywwKSxzfWZ1bmN0aW9uIGdUKHQsZSxuLG8scil7bGV0IGk7aWYocj09PUlJKHQsZSxuLG8pPjApZm9yKGxldCBzPWU7czxuO3MrPW8paT15VChzL298MCx0W3NdLHRbcysxXSxpKTtlbHNlIGZvcihsZXQgcz1uLW87cz49ZTtzLT1vKWk9eVQocy9vfDAsdFtzXSx0W3MrMV0saSk7cmV0dXJuIGkmJl9hKGksaS5uZXh0KSYmKExmKGkpLGk9aS5uZXh0KSxpfWZ1bmN0aW9uIGxjKHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7bGV0IG49dCxvO2RvIGlmKG89ITEsIW4uc3RlaW5lciYmKF9hKG4sbi5uZXh0KXx8dm4obi5wcmV2LG4sbi5uZXh0KT09PTApKXtpZihMZihuKSxuPWU9bi5wcmV2LG49PT1uLm5leHQpYnJlYWs7bz0hMH1lbHNlIG49bi5uZXh0O3doaWxlKG98fG4hPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiB2Zih0LGUsbixvLHIsaSxzKXtpZighdClyZXR1cm47IXMmJmkmJlNJKHQsbyxyLGkpO2xldCBmPXQ7Zm9yKDt0LnByZXYhPT10Lm5leHQ7KXtsZXQgdT10LnByZXYsYz10Lm5leHQ7aWYoaT9nSSh0LG8scixpKTp5SSh0KSl7ZS5wdXNoKHUuaSx0LmksYy5pKSxMZih0KSx0PWMubmV4dCxmPWMubmV4dDtjb250aW51ZX1pZih0PWMsdD09PWYpe3M/cz09PTE/KHQ9QUkobGModCksZSksdmYodCxlLG4sbyxyLGksMikpOnM9PT0yJiZiSSh0LGUsbixvLHIsaSk6dmYobGModCksZSxuLG8scixpLDEpO2JyZWFrfX19ZnVuY3Rpb24geUkodCl7bGV0IGU9dC5wcmV2LG49dCxvPXQubmV4dDtpZih2bihlLG4sbyk+PTApcmV0dXJuITE7bGV0IHI9ZS54LGk9bi54LHM9by54LGY9ZS55LHU9bi55LGM9by55LGw9TWF0aC5taW4ocixpLHMpLHA9TWF0aC5taW4oZix1LGMpLGQ9TWF0aC5tYXgocixpLHMpLGg9TWF0aC5tYXgoZix1LGMpLF89by5uZXh0O2Zvcig7XyE9PWU7KXtpZihfLng+PWwmJl8ueDw9ZCYmXy55Pj1wJiZfLnk8PWgmJklmKHIsZixpLHUscyxjLF8ueCxfLnkpJiZ2bihfLnByZXYsXyxfLm5leHQpPj0wKXJldHVybiExO189Xy5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIGdJKHQsZSxuLG8pe2xldCByPXQucHJldixpPXQscz10Lm5leHQ7aWYodm4ocixpLHMpPj0wKXJldHVybiExO2xldCBmPXIueCx1PWkueCxjPXMueCxsPXIueSxwPWkueSxkPXMueSxoPU1hdGgubWluKGYsdSxjKSxfPU1hdGgubWluKGwscCxkKSxnPU1hdGgubWF4KGYsdSxjKSxiPU1hdGgubWF4KGwscCxkKSx3PUwwKGgsXyxlLG4sbyksTz1MMChnLGIsZSxuLG8pLEU9dC5wcmV2WixUPXQubmV4dFo7Zm9yKDtFJiZFLno+PXcmJlQmJlQuejw9Tzspe2lmKEUueD49aCYmRS54PD1nJiZFLnk+PV8mJkUueTw9YiYmRSE9PXImJkUhPT1zJiZJZihmLGwsdSxwLGMsZCxFLngsRS55KSYmdm4oRS5wcmV2LEUsRS5uZXh0KT49MHx8KEU9RS5wcmV2WixULng+PWgmJlQueDw9ZyYmVC55Pj1fJiZULnk8PWImJlQhPT1yJiZUIT09cyYmSWYoZixsLHUscCxjLGQsVC54LFQueSkmJnZuKFQucHJldixULFQubmV4dCk+PTApKXJldHVybiExO1Q9VC5uZXh0Wn1mb3IoO0UmJkUuej49dzspe2lmKEUueD49aCYmRS54PD1nJiZFLnk+PV8mJkUueTw9YiYmRSE9PXImJkUhPT1zJiZJZihmLGwsdSxwLGMsZCxFLngsRS55KSYmdm4oRS5wcmV2LEUsRS5uZXh0KT49MClyZXR1cm4hMTtFPUUucHJldlp9Zm9yKDtUJiZULno8PU87KXtpZihULng+PWgmJlQueDw9ZyYmVC55Pj1fJiZULnk8PWImJlQhPT1yJiZUIT09cyYmSWYoZixsLHUscCxjLGQsVC54LFQueSkmJnZuKFQucHJldixULFQubmV4dCk+PTApcmV0dXJuITE7VD1ULm5leHRafXJldHVybiEwfWZ1bmN0aW9uIEFJKHQsZSl7bGV0IG49dDtkb3tsZXQgbz1uLnByZXYscj1uLm5leHQubmV4dDshX2EobyxyKSYmYlQobyxuLG4ubmV4dCxyKSYmRmYobyxyKSYmRmYocixvKSYmKGUucHVzaChvLmksbi5pLHIuaSksTGYobiksTGYobi5uZXh0KSxuPXQ9ciksbj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiBsYyhuKX1mdW5jdGlvbiBiSSh0LGUsbixvLHIsaSl7bGV0IHM9dDtkb3tsZXQgZj1zLm5leHQubmV4dDtmb3IoO2YhPT1zLnByZXY7KXtpZihzLmkhPT1mLmkmJlBJKHMsZikpe2xldCB1PXdUKHMsZik7cz1sYyhzLHMubmV4dCksdT1sYyh1LHUubmV4dCksdmYocyxlLG4sbyxyLGksMCksdmYodSxlLG4sbyxyLGksMCk7cmV0dXJufWY9Zi5uZXh0fXM9cy5uZXh0fXdoaWxlKHMhPT10KX1mdW5jdGlvbiB3SSh0LGUsbixvKXtsZXQgcj1bXTtmb3IobGV0IGk9MCxzPWUubGVuZ3RoO2k8cztpKyspe2xldCBmPWVbaV0qbyx1PWk8cy0xP2VbaSsxXSpvOnQubGVuZ3RoLGM9Z1QodCxmLHUsbywhMSk7Yz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksci5wdXNoKENJKGMpKX1yLnNvcnQoVEkpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKW49T0kocltpXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBUSSh0LGUpe2xldCBuPXQueC1lLng7aWYobj09PTAmJihuPXQueS1lLnksbj09PTApKXtsZXQgbz0odC5uZXh0LnktdC55KS8odC5uZXh0LngtdC54KSxyPShlLm5leHQueS1lLnkpLyhlLm5leHQueC1lLngpO249by1yfXJldHVybiBufWZ1bmN0aW9uIE9JKHQsZSl7bGV0IG49RUkodCxlKTtpZighbilyZXR1cm4gZTtsZXQgbz13VChuLHQpO3JldHVybiBsYyhvLG8ubmV4dCksbGMobixuLm5leHQpfWZ1bmN0aW9uIEVJKHQsZSl7bGV0IG49ZSxvPXQueCxyPXQueSxpPS0xLzAscztpZihfYSh0LG4pKXJldHVybiBuO2Rve2lmKF9hKHQsbi5uZXh0KSlyZXR1cm4gbi5uZXh0O2lmKHI8PW4ueSYmcj49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXtsZXQgcD1uLngrKHItbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihwPD1vJiZwPmkmJihpPXAscz1uLng8bi5uZXh0Lng/bjpuLm5leHQscD09PW8pKXJldHVybiBzfW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcylyZXR1cm4gbnVsbDtsZXQgZj1zLHU9cy54LGM9cy55LGw9MS8wO249cztkb3tpZihvPj1uLngmJm4ueD49dSYmbyE9PW4ueCYmQVQocjxjP286aSxyLHUsYyxyPGM/aTpvLHIsbi54LG4ueSkpe2xldCBwPU1hdGguYWJzKHItbi55KS8oby1uLngpO0ZmKG4sdCkmJihwPGx8fHA9PT1sJiYobi54PnMueHx8bi54PT09cy54JiZSSShzLG4pKSkmJihzPW4sbD1wKX1uPW4ubmV4dH13aGlsZShuIT09Zik7cmV0dXJuIHN9ZnVuY3Rpb24gUkkodCxlKXtyZXR1cm4gdm4odC5wcmV2LHQsZS5wcmV2KTwwJiZ2bihlLm5leHQsdCx0Lm5leHQpPDB9ZnVuY3Rpb24gU0kodCxlLG4sbyl7bGV0IHI9dDtkbyByLno9PT0wJiYoci56PUwwKHIueCxyLnksZSxuLG8pKSxyLnByZXZaPXIucHJldixyLm5leHRaPXIubmV4dCxyPXIubmV4dDt3aGlsZShyIT09dCk7ci5wcmV2Wi5uZXh0Wj1udWxsLHIucHJldlo9bnVsbCx4SShyKX1mdW5jdGlvbiB4SSh0KXtsZXQgZSxuPTE7ZG97bGV0IG89dCxyO3Q9bnVsbDtsZXQgaT1udWxsO2ZvcihlPTA7bzspe2UrKztsZXQgcz1vLGY9MDtmb3IobGV0IGM9MDtjPG4mJihmKysscz1zLm5leHRaLCEhcyk7YysrKTtsZXQgdT1uO2Zvcig7Zj4wfHx1PjAmJnM7KWYhPT0wJiYodT09PTB8fCFzfHxvLno8PXMueik/KHI9byxvPW8ubmV4dFosZi0tKToocj1zLHM9cy5uZXh0Wix1LS0pLGk/aS5uZXh0Wj1yOnQ9cixyLnByZXZaPWksaT1yO289c31pLm5leHRaPW51bGwsbio9Mn13aGlsZShlPjEpO3JldHVybiB0fWZ1bmN0aW9uIEwwKHQsZSxuLG8scil7cmV0dXJuIHQ9KHQtbikqcnwwLGU9KGUtbykqcnwwLHQ9KHR8dDw8OCkmMTY3MTE5MzUsdD0odHx0PDw0KSYyNTI2NDUxMzUsdD0odHx0PDwyKSY4NTg5OTM0NTksdD0odHx0PDwxKSYxNDMxNjU1NzY1LGU9KGV8ZTw8OCkmMTY3MTE5MzUsZT0oZXxlPDw0KSYyNTI2NDUxMzUsZT0oZXxlPDwyKSY4NTg5OTM0NTksZT0oZXxlPDwxKSYxNDMxNjU1NzY1LHR8ZTw8MX1mdW5jdGlvbiBDSSh0KXtsZXQgZT10LG49dDtkbyhlLng8bi54fHxlLng9PT1uLngmJmUueTxuLnkpJiYobj1lKSxlPWUubmV4dDt3aGlsZShlIT09dCk7cmV0dXJuIG59ZnVuY3Rpb24gQVQodCxlLG4sbyxyLGkscyxmKXtyZXR1cm4oci1zKSooZS1mKT49KHQtcykqKGktZikmJih0LXMpKihvLWYpPj0obi1zKSooZS1mKSYmKG4tcykqKGktZik+PShyLXMpKihvLWYpfWZ1bmN0aW9uIElmKHQsZSxuLG8scixpLHMsZil7cmV0dXJuISh0PT09cyYmZT09PWYpJiZBVCh0LGUsbixvLHIsaSxzLGYpfWZ1bmN0aW9uIFBJKHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIU1JKHQsZSkmJihGZih0LGUpJiZGZihlLHQpJiZOSSh0LGUpJiYodm4odC5wcmV2LHQsZS5wcmV2KXx8dm4odCxlLnByZXYsZSkpfHxfYSh0LGUpJiZ2bih0LnByZXYsdCx0Lm5leHQpPjAmJnZuKGUucHJldixlLGUubmV4dCk+MCl9ZnVuY3Rpb24gdm4odCxlLG4pe3JldHVybihlLnktdC55KSoobi54LWUueCktKGUueC10LngpKihuLnktZS55KX1mdW5jdGlvbiBfYSh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiBiVCh0LGUsbixvKXtsZXQgcj1pZCh2bih0LGUsbikpLGk9aWQodm4odCxlLG8pKSxzPWlkKHZuKG4sbyx0KSksZj1pZCh2bihuLG8sZSkpO3JldHVybiEhKHIhPT1pJiZzIT09Znx8cj09PTAmJnJkKHQsbixlKXx8aT09PTAmJnJkKHQsbyxlKXx8cz09PTAmJnJkKG4sdCxvKXx8Zj09PTAmJnJkKG4sZSxvKSl9ZnVuY3Rpb24gcmQodCxlLG4pe3JldHVybiBlLng8PU1hdGgubWF4KHQueCxuLngpJiZlLng+PU1hdGgubWluKHQueCxuLngpJiZlLnk8PU1hdGgubWF4KHQueSxuLnkpJiZlLnk+PU1hdGgubWluKHQueSxuLnkpfWZ1bmN0aW9uIGlkKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBNSSh0LGUpe2xldCBuPXQ7ZG97aWYobi5pIT09dC5pJiZuLm5leHQuaSE9PXQuaSYmbi5pIT09ZS5pJiZuLm5leHQuaSE9PWUuaSYmYlQobixuLm5leHQsdCxlKSlyZXR1cm4hMDtuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuITF9ZnVuY3Rpb24gRmYodCxlKXtyZXR1cm4gdm4odC5wcmV2LHQsdC5uZXh0KTwwP3ZuKHQsZSx0Lm5leHQpPj0wJiZ2bih0LHQucHJldixlKT49MDp2bih0LGUsdC5wcmV2KTwwfHx2bih0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIE5JKHQsZSl7bGV0IG49dCxvPSExLHI9KHQueCtlLngpLzIsaT0odC55K2UueSkvMjtkbyBuLnk+aSE9bi5uZXh0Lnk+aSYmbi5uZXh0LnkhPT1uLnkmJnI8KG4ubmV4dC54LW4ueCkqKGktbi55KS8obi5uZXh0Lnktbi55KStuLngmJihvPSFvKSxuPW4ubmV4dDt3aGlsZShuIT09dCk7cmV0dXJuIG99ZnVuY3Rpb24gd1QodCxlKXtsZXQgbj1EMCh0LmksdC54LHQueSksbz1EMChlLmksZS54LGUueSkscj10Lm5leHQsaT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LG4ubmV4dD1yLHIucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLGkubmV4dD1vLG8ucHJldj1pLG99ZnVuY3Rpb24geVQodCxlLG4sbyl7bGV0IHI9RDAodCxlLG4pO3JldHVybiBvPyhyLm5leHQ9by5uZXh0LHIucHJldj1vLG8ubmV4dC5wcmV2PXIsby5uZXh0PXIpOihyLnByZXY9cixyLm5leHQ9cikscn1mdW5jdGlvbiBMZih0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIEQwKHQsZSxuKXtyZXR1cm57aTp0LHg6ZSx5Om4scHJldjpudWxsLG5leHQ6bnVsbCx6OjAscHJldlo6bnVsbCxuZXh0WjpudWxsLHN0ZWluZXI6ITF9fWZ1bmN0aW9uIElJKHQsZSxuLG8pe2xldCByPTA7Zm9yKGxldCBpPWUscz1uLW87aTxuO2krPW8pcis9KHRbc10tdFtpXSkqKHRbaSsxXSt0W3MrMV0pLHM9aTtyZXR1cm4gcn12YXIgVFQ9JCgoKT0+e30pO3ZhciBzZCxQbyxwYz0kKCgpPT57WnMoKTtzZD17Q0xPQ0tXSVNFOkZ0LkNXLENPVU5URVJfQ0xPQ0tXSVNFOkZ0LkNDV307c2QudmFsaWRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1zZC5DTE9DS1dJU0V8fHQ9PT1zZC5DT1VOVEVSX0NMT0NLV0lTRX07UG89T2JqZWN0LmZyZWV6ZShzZCl9KTt2YXIgdkksRkkscHMsU1QseFQsQ1QsT1QsRVQsUlQsVWksUFQsTVQsTlQseWEsTEksREksQkksVTAsUGUsS3I9JCgoKT0+e1RUKCk7a2UoKTtEdCgpO0llKCk7V3QoKTtEZSgpO2Z0KCk7JHQoKTtOZigpO1llKCk7JGUoKTtLdCgpO3RuKCk7cGMoKTt2ST1uZXcgYSxGST1uZXcgYSxwcz17fTtwcy5jb21wdXRlQXJlYTJEPWZ1bmN0aW9uKHQpe3kuZGVmaW5lZCgicG9zaXRpb25zIix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygicG9zaXRpb25zLmxlbmd0aCIsdC5sZW5ndGgsMyk7bGV0IGU9dC5sZW5ndGgsbj0wO2ZvcihsZXQgbz1lLTEscj0wO3I8ZTtvPXIrKyl7bGV0IGk9dFtvXSxzPXRbcl07bis9aS54KnMueS1zLngqaS55fXJldHVybiBuKi41fTtwcy5jb21wdXRlV2luZGluZ09yZGVyMkQ9ZnVuY3Rpb24odCl7cmV0dXJuIHBzLmNvbXB1dGVBcmVhMkQodCk+MD9Qby5DT1VOVEVSX0NMT0NLV0lTRTpQby5DTE9DS1dJU0V9O3BzLnRyaWFuZ3VsYXRlPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJwb3NpdGlvbnMiLHQpO2xldCBuPUoucGFja0FycmF5KHQpO3JldHVybiBCMChuLGUsMil9O1NUPW5ldyBhLHhUPW5ldyBhLENUPW5ldyBhLE9UPW5ldyBhLEVUPW5ldyBhLFJUPW5ldyBhLFVpPW5ldyBhLFBUPW5ldyBKLE1UPW5ldyBKLE5UPW5ldyBKLHlhPW5ldyBKO3BzLmNvbXB1dGVTdWJkaXZpc2lvbj1mdW5jdGlvbih0LGUsbixvLHIpe3I9cj8/UC5SQURJQU5TX1BFUl9ERUdSRUU7bGV0IGk9bShvKTt5LnR5cGVPZi5vYmplY3QoImVsbGlwc29pZCIsdCkseS5kZWZpbmVkKCJwb3NpdGlvbnMiLGUpLHkuZGVmaW5lZCgiaW5kaWNlcyIsbikseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGljZXMubGVuZ3RoIixuLmxlbmd0aCwzKSx5LnR5cGVPZi5udW1iZXIuZXF1YWxzKCJpbmRpY2VzLmxlbmd0aCAlIDMiLCIwIixuLmxlbmd0aCUzLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbigiZ3JhbnVsYXJpdHkiLHIsMCk7bGV0IHM9bi5zbGljZSgwKSxmLHU9ZS5sZW5ndGgsYz1uZXcgQXJyYXkodSozKSxsPW5ldyBBcnJheSh1KjIpLHA9MCxkPTA7Zm9yKGY9MDtmPHU7ZisrKXtsZXQgRT1lW2ZdO2lmKGNbcCsrXT1FLngsY1twKytdPUUueSxjW3ArK109RS56LGkpe2xldCBUPW9bZl07bFtkKytdPVQueCxsW2QrK109VC55fX1sZXQgaD1bXSxfPXt9LGc9dC5tYXhpbXVtUmFkaXVzLGI9UC5jaG9yZExlbmd0aChyLGcpLHc9YipiO2Zvcig7cy5sZW5ndGg+MDspe2xldCBFPXMucG9wKCksVD1zLnBvcCgpLHg9cy5wb3AoKSxNPWEuZnJvbUFycmF5KGMseCozLFNUKSxOPWEuZnJvbUFycmF5KGMsVCozLHhUKSxGPWEuZnJvbUFycmF5KGMsRSozLENUKSxJLHYsQjtpJiYoST1KLmZyb21BcnJheShsLHgqMixQVCksdj1KLmZyb21BcnJheShsLFQqMixNVCksQj1KLmZyb21BcnJheShsLEUqMixOVCkpO2xldCBBPWEubXVsdGlwbHlCeVNjYWxhcihhLm5vcm1hbGl6ZShNLE9UKSxnLE9UKSxTPWEubXVsdGlwbHlCeVNjYWxhcihhLm5vcm1hbGl6ZShOLEVUKSxnLEVUKSxDPWEubXVsdGlwbHlCeVNjYWxhcihhLm5vcm1hbGl6ZShGLFJUKSxnLFJUKSxMPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KEEsUyxVaSkpLHo9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoUyxDLFVpKSksaj1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChDLEEsVWkpKSxrPU1hdGgubWF4KEwseixqKSxxLFcsUjtrPnc/TD09PWs/KHE9YCR7TWF0aC5taW4oeCxUKX0gJHtNYXRoLm1heCh4LFQpfWAsZj1fW3FdLG0oZil8fChXPWEuYWRkKE0sTixVaSksYS5tdWx0aXBseUJ5U2NhbGFyKFcsLjUsVyksYy5wdXNoKFcueCxXLnksVy56KSxmPWMubGVuZ3RoLzMtMSxfW3FdPWYsaSYmKFI9Si5hZGQoSSx2LHlhKSxKLm11bHRpcGx5QnlTY2FsYXIoUiwuNSxSKSxsLnB1c2goUi54LFIueSkpKSxzLnB1c2goeCxmLEUpLHMucHVzaChmLFQsRSkpOno9PT1rPyhxPWAke01hdGgubWluKFQsRSl9ICR7TWF0aC5tYXgoVCxFKX1gLGY9X1txXSxtKGYpfHwoVz1hLmFkZChOLEYsVWkpLGEubXVsdGlwbHlCeVNjYWxhcihXLC41LFcpLGMucHVzaChXLngsVy55LFcueiksZj1jLmxlbmd0aC8zLTEsX1txXT1mLGkmJihSPUouYWRkKHYsQix5YSksSi5tdWx0aXBseUJ5U2NhbGFyKFIsLjUsUiksbC5wdXNoKFIueCxSLnkpKSkscy5wdXNoKFQsZix4KSxzLnB1c2goZixFLHgpKTpqPT09ayYmKHE9YCR7TWF0aC5taW4oRSx4KX0gJHtNYXRoLm1heChFLHgpfWAsZj1fW3FdLG0oZil8fChXPWEuYWRkKEYsTSxVaSksYS5tdWx0aXBseUJ5U2NhbGFyKFcsLjUsVyksYy5wdXNoKFcueCxXLnksVy56KSxmPWMubGVuZ3RoLzMtMSxfW3FdPWYsaSYmKFI9Si5hZGQoQixJLHlhKSxKLm11bHRpcGx5QnlTY2FsYXIoUiwuNSxSKSxsLnB1c2goUi54LFIueSkpKSxzLnB1c2goRSxmLFQpLHMucHVzaChmLHgsVCkpOihoLnB1c2goeCksaC5wdXNoKFQpLGgucHVzaChFKSl9bGV0IE89e2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfSxpbmRpY2VzOmgscHJpbWl0aXZlVHlwZTpCdC5UUklBTkdMRVN9O3JldHVybiBpJiYoTy5hdHRyaWJ1dGVzLnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpsfSkpLG5ldyBVdChPKX07TEk9bmV3IGN0LERJPW5ldyBjdCxCST1uZXcgY3QsVTA9bmV3IGN0O3BzLmNvbXB1dGVSaHVtYkxpbmVTdWJkaXZpc2lvbj1mdW5jdGlvbih0LGUsbixvLHIpe3I9cj8/UC5SQURJQU5TX1BFUl9ERUdSRUU7bGV0IGk9bShvKTt5LnR5cGVPZi5vYmplY3QoImVsbGlwc29pZCIsdCkseS5kZWZpbmVkKCJwb3NpdGlvbnMiLGUpLHkuZGVmaW5lZCgiaW5kaWNlcyIsbikseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGljZXMubGVuZ3RoIixuLmxlbmd0aCwzKSx5LnR5cGVPZi5udW1iZXIuZXF1YWxzKCJpbmRpY2VzLmxlbmd0aCAlIDMiLCIwIixuLmxlbmd0aCUzLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbigiZ3JhbnVsYXJpdHkiLHIsMCk7bGV0IHM9bi5zbGljZSgwKSxmLHU9ZS5sZW5ndGgsYz1uZXcgQXJyYXkodSozKSxsPW5ldyBBcnJheSh1KjIpLHA9MCxkPTA7Zm9yKGY9MDtmPHU7ZisrKXtsZXQgeD1lW2ZdO2lmKGNbcCsrXT14LngsY1twKytdPXgueSxjW3ArK109eC56LGkpe2xldCBNPW9bZl07bFtkKytdPU0ueCxsW2QrK109TS55fX1sZXQgaD1bXSxfPXt9LGc9dC5tYXhpbXVtUmFkaXVzLGI9UC5jaG9yZExlbmd0aChyLGcpLHc9bmV3IEpvKHZvaWQgMCx2b2lkIDAsdCksTz1uZXcgSm8odm9pZCAwLHZvaWQgMCx0KSxFPW5ldyBKbyh2b2lkIDAsdm9pZCAwLHQpO2Zvcig7cy5sZW5ndGg+MDspe2xldCB4PXMucG9wKCksTT1zLnBvcCgpLE49cy5wb3AoKSxGPWEuZnJvbUFycmF5KGMsTiozLFNUKSxJPWEuZnJvbUFycmF5KGMsTSozLHhUKSx2PWEuZnJvbUFycmF5KGMseCozLENUKSxCLEEsUztpJiYoQj1KLmZyb21BcnJheShsLE4qMixQVCksQT1KLmZyb21BcnJheShsLE0qMixNVCksUz1KLmZyb21BcnJheShsLHgqMixOVCkpO2xldCBDPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoRixMSSksTD10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKEksREkpLHo9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh2LEJJKTt3LnNldEVuZFBvaW50cyhDLEwpO2xldCBqPXcuc3VyZmFjZURpc3RhbmNlO08uc2V0RW5kUG9pbnRzKEwseik7bGV0IGs9Ty5zdXJmYWNlRGlzdGFuY2U7RS5zZXRFbmRQb2ludHMoeixDKTtsZXQgcT1FLnN1cmZhY2VEaXN0YW5jZSxXPU1hdGgubWF4KGosayxxKSxSLG50LGF0LGx0LF90O1c+Yj9qPT09Vz8oUj1gJHtNYXRoLm1pbihOLE0pfSAke01hdGgubWF4KE4sTSl9YCxmPV9bUl0sbShmKXx8KG50PXcuaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uKC41LFUwKSxhdD0oQy5oZWlnaHQrTC5oZWlnaHQpKi41LGx0PWEuZnJvbVJhZGlhbnMobnQubG9uZ2l0dWRlLG50LmxhdGl0dWRlLGF0LHQsVWkpLGMucHVzaChsdC54LGx0LnksbHQueiksZj1jLmxlbmd0aC8zLTEsX1tSXT1mLGkmJihfdD1KLmFkZChCLEEseWEpLEoubXVsdGlwbHlCeVNjYWxhcihfdCwuNSxfdCksbC5wdXNoKF90LngsX3QueSkpKSxzLnB1c2goTixmLHgpLHMucHVzaChmLE0seCkpOms9PT1XPyhSPWAke01hdGgubWluKE0seCl9ICR7TWF0aC5tYXgoTSx4KX1gLGY9X1tSXSxtKGYpfHwobnQ9Ty5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb24oLjUsVTApLGF0PShMLmhlaWdodCt6LmhlaWdodCkqLjUsbHQ9YS5mcm9tUmFkaWFucyhudC5sb25naXR1ZGUsbnQubGF0aXR1ZGUsYXQsdCxVaSksYy5wdXNoKGx0LngsbHQueSxsdC56KSxmPWMubGVuZ3RoLzMtMSxfW1JdPWYsaSYmKF90PUouYWRkKEEsUyx5YSksSi5tdWx0aXBseUJ5U2NhbGFyKF90LC41LF90KSxsLnB1c2goX3QueCxfdC55KSkpLHMucHVzaChNLGYsTikscy5wdXNoKGYseCxOKSk6cT09PVcmJihSPWAke01hdGgubWluKHgsTil9ICR7TWF0aC5tYXgoeCxOKX1gLGY9X1tSXSxtKGYpfHwobnQ9RS5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb24oLjUsVTApLGF0PSh6LmhlaWdodCtDLmhlaWdodCkqLjUsbHQ9YS5mcm9tUmFkaWFucyhudC5sb25naXR1ZGUsbnQubGF0aXR1ZGUsYXQsdCxVaSksYy5wdXNoKGx0LngsbHQueSxsdC56KSxmPWMubGVuZ3RoLzMtMSxfW1JdPWYsaSYmKF90PUouYWRkKFMsQix5YSksSi5tdWx0aXBseUJ5U2NhbGFyKF90LC41LF90KSxsLnB1c2goX3QueCxfdC55KSkpLHMucHVzaCh4LGYsTSkscy5wdXNoKGYsTixNKSk6KGgucHVzaChOKSxoLnB1c2goTSksaC5wdXNoKHgpKX1sZXQgVD17YXR0cmlidXRlczp7cG9zaXRpb246bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpjfSl9LGluZGljZXM6aCxwcmltaXRpdmVUeXBlOkJ0LlRSSUFOR0xFU307cmV0dXJuIGkmJihULmF0dHJpYnV0ZXMuc3Q9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmx9KSksbmV3IFV0KFQpfTtwcy5zY2FsZVRvR2VvZGV0aWNIZWlnaHQ9ZnVuY3Rpb24odCxlLG4sbyl7bj1uPz9ZLmRlZmF1bHQ7bGV0IHI9dkksaT1GSTtpZihlPWU/PzAsbz1vPz8hMCxtKHQpKXtsZXQgcz10Lmxlbmd0aDtmb3IobGV0IGY9MDtmPHM7Zis9MylhLmZyb21BcnJheSh0LGYsaSksbyYmKGk9bi5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGksaSkpLGUhPT0wJiYocj1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChpLHIpLGEubXVsdGlwbHlCeVNjYWxhcihyLGUsciksYS5hZGQoaSxyLGkpKSx0W2ZdPWkueCx0W2YrMV09aS55LHRbZisyXT1pLnp9cmV0dXJuIHR9O1BlPXBzfSk7ZnVuY3Rpb24gZHMoKXt0aGlzLl9hcnJheT1bXSx0aGlzLl9vZmZzZXQ9MCx0aGlzLl9sZW5ndGg9MH12YXIgazAsSVQ9JCgoKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGRzLnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGVuZ3RofX19KTtkcy5wcm90b3R5cGUuZW5xdWV1ZT1mdW5jdGlvbih0KXt0aGlzLl9hcnJheS5wdXNoKHQpLHRoaXMuX2xlbmd0aCsrfTtkcy5wcm90b3R5cGUuZGVxdWV1ZT1mdW5jdGlvbigpe2lmKHRoaXMuX2xlbmd0aD09PTApcmV0dXJuO2xldCB0PXRoaXMuX2FycmF5LGU9dGhpcy5fb2Zmc2V0LG49dFtlXTtyZXR1cm4gdFtlXT12b2lkIDAsZSsrLGU+MTAmJmUqMj50Lmxlbmd0aCYmKHRoaXMuX2FycmF5PXQuc2xpY2UoZSksZT0wKSx0aGlzLl9vZmZzZXQ9ZSx0aGlzLl9sZW5ndGgtLSxufTtkcy5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe2lmKHRoaXMuX2xlbmd0aCE9PTApcmV0dXJuIHRoaXMuX2FycmF5W3RoaXMuX29mZnNldF19O2RzLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXJyYXkuaW5kZXhPZih0KSE9PS0xfTtkcy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9hcnJheS5sZW5ndGg9dGhpcy5fb2Zmc2V0PXRoaXMuX2xlbmd0aD0wfTtkcy5wcm90b3R5cGUuc29ydD1mdW5jdGlvbih0KXt0aGlzLl9vZmZzZXQ+MCYmKHRoaXMuX2FycmF5PXRoaXMuX2FycmF5LnNsaWNlKHRoaXMuX29mZnNldCksdGhpcy5fb2Zmc2V0PTApLHRoaXMuX2FycmF5LnNvcnQodCl9O2swPWRzfSk7ZnVuY3Rpb24gTFQodCxlLG4sbyl7cmV0dXJuIEouc3VidHJhY3QoZSx0LGRjKSxKLm11bHRpcGx5QnlTY2FsYXIoZGMsbi9vLGRjKSxKLmFkZCh0LGRjLGRjKSxbZGMueCxkYy55XX1mdW5jdGlvbiBVSSh0LGUsbixvKXtyZXR1cm4gYS5zdWJ0cmFjdChlLHQsbXMpLGEubXVsdGlwbHlCeVNjYWxhcihtcyxuL28sbXMpLGEuYWRkKHQsbXMsbXMpLFttcy54LG1zLnksbXMuel19ZnVuY3Rpb24gS0kodCxlLG4pe2xldCBvPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxhZCkscj1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsZmQpO2lmKE1hdGguc2lnbihvLmxhdGl0dWRlKT09PU1hdGguc2lnbihyLmxhdGl0dWRlKSlyZXR1cm47Y2Quc2V0RW5kUG9pbnRzKG8scik7bGV0IGk9Y2QuZmluZEludGVyc2VjdGlvbldpdGhMYXRpdHVkZSgwLHFJKTtpZighbShpKSlyZXR1cm47bGV0IHM9TWF0aC5taW4oby5sb25naXR1ZGUsci5sb25naXR1ZGUpLGY9TWF0aC5tYXgoby5sb25naXR1ZGUsci5sb25naXR1ZGUpO2lmKE1hdGguYWJzKGYtcyk+UC5QSSl7bGV0IHU9cztzPWYsZj11fWlmKCEoaS5sb25naXR1ZGU8c3x8aS5sb25naXR1ZGU+ZikpcmV0dXJuIG4uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oaSl9ZnVuY3Rpb24gV0kodCxlLG4sbyl7aWYobz09PWhlLlJIVU1CKXJldHVybiBLSSh0LGUsbik7bGV0IHI9eW8ubGluZVNlZ21lbnRQbGFuZSh0LGUsb24uT1JJR0lOX1hZX1BMQU5FKTtpZihtKHIpKXJldHVybiBuLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UocixyKX1mdW5jdGlvbiBZSSh0LGUsbil7bGV0IG89W10scixpLHMsZix1LGM9MDtmb3IoO2M8dC5sZW5ndGg7KXtyPXRbY10saT10WyhjKzEpJXQubGVuZ3RoXSxzPVAuc2lnbihyLnopLGY9UC5zaWduKGkueik7bGV0IGw9cD0+ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhwLFhJKS5sb25naXR1ZGU7aWYocz09PTApby5wdXNoKHtwb3NpdGlvbjpjLHR5cGU6cyx2aXNpdGVkOiExLG5leHQ6Zix0aGV0YTpsKHIpfSk7ZWxzZSBpZihmIT09MCl7aWYodT1XSShyLGksZSxuKSwrK2MsIW0odSkpY29udGludWU7dC5zcGxpY2UoYywwLHUpLG8ucHVzaCh7cG9zaXRpb246Yyx0eXBlOnMsdmlzaXRlZDohMSxuZXh0OmYsdGhldGE6bCh1KX0pfSsrY31yZXR1cm4gb31mdW5jdGlvbiBEVCh0LGUsbixvLHIsaSxzKXtsZXQgZj1bXSx1PWksYz1wPT5kPT5kLnBvc2l0aW9uPT09cCxsPVtdO2Rve2xldCBwPW5bdV07Zi5wdXNoKHApO2xldCBkPW8uZmluZEluZGV4KGModSkpLGg9b1tkXTtpZighbShoKSl7Kyt1O2NvbnRpbnVlfWxldHt2aXNpdGVkOl8sdHlwZTpnLG5leHQ6Yn09aDtpZihoLnZpc2l0ZWQ9ITAsZz09PTApe2lmKGI9PT0wKXtsZXQgVD1vW2QtKHM/MTotMSldO2lmKFQ/LnBvc2l0aW9uPT09dSsxKVQudmlzaXRlZD0hMDtlbHNleysrdTtjb250aW51ZX19aWYoIV8mJnMmJmI+MHx8aT09PXUmJiFzJiZiPDApeysrdTtjb250aW51ZX19aWYoIShzP2c+PTA6Zzw9MCkpeysrdTtjb250aW51ZX1ffHxsLnB1c2godSk7bGV0IE89ZCsocz8xOi0xKSxFPW9bT107aWYoIW0oRSkpeysrdTtjb250aW51ZX11PUUucG9zaXRpb259d2hpbGUodTxuLmxlbmd0aCYmdT49MCYmdSE9PWkmJmYubGVuZ3RoPG4ubGVuZ3RoKTt0LnNwbGljZShlLHIsZik7Zm9yKGxldCBwIG9mIGwpZT1EVCh0LCsrZSxuLG8sMCxwLCFzKTtyZXR1cm4gZX12YXIgT24sZGMsbXMsYWQsZmQsa0ksR0ksY2QsVkksekksakksSEkscUksWEksJEksWkksUUksSkksdlQsRlQsdHYsZXYsX2UsRGY9JCgoKT0+e3VjKCk7SHIoKTtrZSgpO0R0KCk7SWUoKTtEZSgpO2Z0KCk7JHQoKTtOZigpO1llKCk7JGUoKTthbigpO2NpKCk7WmUoKTtlYygpO0t0KCk7VW4oKTt1cygpO19UKCk7S3IoKTt0bigpO1hvKCk7SVQoKTtwYygpO09uPXt9O09uLmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGg9ZnVuY3Rpb24odCxlKXtsZXQgbj0wLG89W3RdO2Zvcig7by5sZW5ndGg+MDspe2xldCByPW8ucG9wKCk7aWYoIW0ocikpY29udGludWU7bis9MjtsZXQgaT1yLnBvc2l0aW9ucyxzPXIuaG9sZXM7aWYobShpKSYmaS5sZW5ndGg+MCYmKG4rPWkubGVuZ3RoKmUucGFja2VkTGVuZ3RoKSxtKHMpKXtsZXQgZj1zLmxlbmd0aDtmb3IobGV0IHU9MDt1PGY7Kyt1KW8ucHVzaChzW3VdKX19cmV0dXJuIG59O09uLnBhY2tQb2x5Z29uSGllcmFyY2h5PWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPVt0XTtmb3IoO3IubGVuZ3RoPjA7KXtsZXQgaT1yLnBvcCgpO2lmKCFtKGkpKWNvbnRpbnVlO2xldCBzPWkucG9zaXRpb25zLGY9aS5ob2xlcztpZihlW24rK109bShzKT9zLmxlbmd0aDowLGVbbisrXT1tKGYpP2YubGVuZ3RoOjAsbShzKSl7bGV0IHU9cy5sZW5ndGg7Zm9yKGxldCBjPTA7Yzx1OysrYyxuKz1vLnBhY2tlZExlbmd0aClvLnBhY2soc1tjXSxlLG4pfWlmKG0oZikpe2xldCB1PWYubGVuZ3RoO2ZvcihsZXQgYz0wO2M8dTsrK2Mpci5wdXNoKGZbY10pfX1yZXR1cm4gbn07T24udW5wYWNrUG9seWdvbkhpZXJhcmNoeT1mdW5jdGlvbih0LGUsbil7bGV0IG89dFtlKytdLHI9dFtlKytdLGk9bmV3IEFycmF5KG8pLHM9cj4wP25ldyBBcnJheShyKTp2b2lkIDA7Zm9yKGxldCBmPTA7ZjxvOysrZixlKz1uLnBhY2tlZExlbmd0aClpW2ZdPW4udW5wYWNrKHQsZSk7Zm9yKGxldCBmPTA7ZjxyOysrZilzW2ZdPU9uLnVucGFja1BvbHlnb25IaWVyYXJjaHkodCxlLG4pLGU9c1tmXS5zdGFydGluZ0luZGV4LGRlbGV0ZSBzW2ZdLnN0YXJ0aW5nSW5kZXg7cmV0dXJue3Bvc2l0aW9uczppLGhvbGVzOnMsc3RhcnRpbmdJbmRleDplfX07ZGM9bmV3IEo7bXM9bmV3IGE7T24uc3ViZGl2aWRlTGluZUNvdW50PWZ1bmN0aW9uKHQsZSxuKXtsZXQgcj1hLmRpc3RhbmNlKHQsZSkvbixpPU1hdGgubWF4KDAsTWF0aC5jZWlsKFAubG9nMihyKSkpO3JldHVybiBNYXRoLnBvdygyLGkpfTthZD1uZXcgY3QsZmQ9bmV3IGN0LGtJPW5ldyBjdCxHST1uZXcgYSxjZD1uZXcgSm87T24uc3ViZGl2aWRlUmh1bWJMaW5lQ291bnQ9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLGFkKSxpPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobixmZCksZj1uZXcgSm8ocixpLHQpLnN1cmZhY2VEaXN0YW5jZS9vLHU9TWF0aC5tYXgoMCxNYXRoLmNlaWwoUC5sb2cyKGYpKSk7cmV0dXJuIE1hdGgucG93KDIsdSl9O09uLnN1YmRpdmlkZVRleGNvb3JkTGluZT1mdW5jdGlvbih0LGUsbixvLHIsaSl7bGV0IHM9T24uc3ViZGl2aWRlTGluZUNvdW50KG4sbyxyKSxmPUouZGlzdGFuY2UodCxlKSx1PWYvcyxjPWk7Yy5sZW5ndGg9cyoyO2xldCBsPTA7Zm9yKGxldCBwPTA7cDxzO3ArKyl7bGV0IGQ9TFQodCxlLHAqdSxmKTtjW2wrK109ZFswXSxjW2wrK109ZFsxXX1yZXR1cm4gY307T24uc3ViZGl2aWRlTGluZT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1Pbi5zdWJkaXZpZGVMaW5lQ291bnQodCxlLG4pLGk9YS5kaXN0YW5jZSh0LGUpLHM9aS9yO20obyl8fChvPVtdKTtsZXQgZj1vO2YubGVuZ3RoPXIqMztsZXQgdT0wO2ZvcihsZXQgYz0wO2M8cjtjKyspe2xldCBsPVVJKHQsZSxjKnMsaSk7Zlt1KytdPWxbMF0sZlt1KytdPWxbMV0sZlt1KytdPWxbMl19cmV0dXJuIGZ9O09uLnN1YmRpdmlkZVRleGNvb3JkUmh1bWJMaW5lPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe2xldCBmPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobyxhZCksdT1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHIsZmQpO2NkLnNldEVuZFBvaW50cyhmLHUpO2xldCBjPWNkLnN1cmZhY2VEaXN0YW5jZS9pLGw9TWF0aC5tYXgoMCxNYXRoLmNlaWwoUC5sb2cyKGMpKSkscD1NYXRoLnBvdygyLGwpLGQ9Si5kaXN0YW5jZSh0LGUpLGg9ZC9wLF89cztfLmxlbmd0aD1wKjI7bGV0IGc9MDtmb3IobGV0IGI9MDtiPHA7YisrKXtsZXQgdz1MVCh0LGUsYipoLGQpO19bZysrXT13WzBdLF9bZysrXT13WzFdfXJldHVybiBffTtPbi5zdWJkaXZpZGVSaHVtYkxpbmU9ZnVuY3Rpb24odCxlLG4sbyxyKXtsZXQgaT10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsYWQpLHM9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhuLGZkKSxmPW5ldyBKbyhpLHMsdCk7aWYobShyKXx8KHI9W10pLGYuc3VyZmFjZURpc3RhbmNlPD1vKXJldHVybiByLmxlbmd0aD0zLHJbMF09ZS54LHJbMV09ZS55LHJbMl09ZS56LHI7bGV0IHU9Zi5zdXJmYWNlRGlzdGFuY2UvbyxjPU1hdGgubWF4KDAsTWF0aC5jZWlsKFAubG9nMih1KSkpLGw9TWF0aC5wb3coMixjKSxwPWYuc3VyZmFjZURpc3RhbmNlL2wsZD1yO2QubGVuZ3RoPWwqMztsZXQgaD0wO2ZvcihsZXQgXz0wO188bDtfKyspe2xldCBnPWYuaW50ZXJwb2xhdGVVc2luZ1N1cmZhY2VEaXN0YW5jZShfKnAsa0kpLGI9dC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihnLEdJKTtkW2grK109Yi54LGRbaCsrXT1iLnksZFtoKytdPWIuen1yZXR1cm4gZH07Vkk9bmV3IGEsekk9bmV3IGEsakk9bmV3IGEsSEk9bmV3IGE7T24uc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQ9ZnVuY3Rpb24odCxlLG4sbyxyKXtvPW8/P1kuZGVmYXVsdDtsZXQgaT1WSSxzPXpJLGY9akksdT1ISTtpZihtKHQpJiZtKHQuYXR0cmlidXRlcykmJm0odC5hdHRyaWJ1dGVzLnBvc2l0aW9uKSl7bGV0IGM9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxsPWMubGVuZ3RoLzI7Zm9yKGxldCBwPTA7cDxsO3ArPTMpYS5mcm9tQXJyYXkoYyxwLGYpLG8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGYsaSksdT1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZix1KSxzPWEubXVsdGlwbHlCeVNjYWxhcihpLG4scykscz1hLmFkZCh1LHMscyksY1twK2xdPXMueCxjW3ArMStsXT1zLnksY1twKzIrbF09cy56LHImJih1PWEuY2xvbmUoZix1KSkscz1hLm11bHRpcGx5QnlTY2FsYXIoaSxlLHMpLHM9YS5hZGQodSxzLHMpLGNbcF09cy54LGNbcCsxXT1zLnksY1twKzJdPXMuen1yZXR1cm4gdH07T24ucG9seWdvbk91dGxpbmVzRnJvbUhpZXJhcmNoeT1mdW5jdGlvbih0LGUsbil7bGV0IG89W10scj1uZXcgazA7ci5lbnF1ZXVlKHQpO2xldCBpLHMsZjtmb3IoO3IubGVuZ3RoIT09MDspe2xldCB1PXIuZGVxdWV1ZSgpLGM9dS5wb3NpdGlvbnM7aWYoZSlmb3IoZj1jLmxlbmd0aCxpPTA7aTxmO2krKyluLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoY1tpXSxjW2ldKTtpZihjPUNuKGMsYS5lcXVhbHNFcHNpbG9uLCEwKSxjLmxlbmd0aDwzKWNvbnRpbnVlO2xldCBsPXUuaG9sZXM/dS5ob2xlcy5sZW5ndGg6MDtmb3IoaT0wO2k8bDtpKyspe2xldCBwPXUuaG9sZXNbaV0sZD1wLnBvc2l0aW9ucztpZihlKWZvcihmPWQubGVuZ3RoLHM9MDtzPGY7KytzKW4uc2NhbGVUb0dlb2RldGljU3VyZmFjZShkW3NdLGRbc10pO2lmKGQ9Q24oZCxhLmVxdWFsc0Vwc2lsb24sITApLGQubGVuZ3RoPDMpY29udGludWU7by5wdXNoKGQpO2xldCBoPTA7Zm9yKG0ocC5ob2xlcykmJihoPXAuaG9sZXMubGVuZ3RoKSxzPTA7czxoO3MrKylyLmVucXVldWUocC5ob2xlc1tzXSl9by5wdXNoKGMpfXJldHVybiBvfTtxST1uZXcgY3Q7WEk9bmV3IGN0O09uLnNwbGl0UG9seWdvbnNPbkVxdWF0b3I9ZnVuY3Rpb24odCxlLG4sbyl7bShvKXx8KG89W10pLG8uc3BsaWNlKDAsMCwuLi50KSxvLmxlbmd0aD10Lmxlbmd0aDtsZXQgcj0wO2Zvcig7cjxvLmxlbmd0aDspe2xldCBpPW9bcl0scz1pLnNsaWNlKCk7aWYoaS5sZW5ndGg8Myl7b1tyXT1zLCsrcjtjb250aW51ZX1sZXQgZj1ZSShzLGUsbik7aWYocy5sZW5ndGg9PT1pLmxlbmd0aHx8Zi5sZW5ndGg8PTEpe29bcl09cywrK3I7Y29udGludWV9Zi5zb3J0KChjLGwpPT5jLnRoZXRhLWwudGhldGEpO2xldCB1PXNbMF0uej49MDtyPURUKG8scixzLGYsMSwwLHUpfXJldHVybiBvfTtPbi5wb2x5Z29uc0Zyb21IaWVyYXJjaHk9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzPVtdLGY9W10sdT1uZXcgazA7dS5lbnF1ZXVlKHQpO2xldCBjPW0oaSk7Zm9yKDt1Lmxlbmd0aCE9PTA7KXtsZXQgbD11LmRlcXVldWUoKSxwPWwucG9zaXRpb25zLGQ9bC5ob2xlcyxoLF87aWYobylmb3IoXz1wLmxlbmd0aCxoPTA7aDxfO2grKylyLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UocFtoXSxwW2hdKTtpZihlfHwocD1DbihwLGEuZXF1YWxzRXBzaWxvbiwhMCkpLHAubGVuZ3RoPDMpY29udGludWU7bGV0IGc9bihwKTtpZighbShnKSljb250aW51ZTtsZXQgYj1bXSx3PVBlLmNvbXB1dGVXaW5kaW5nT3JkZXIyRChnKTtpZih3PT09UG8uQ0xPQ0tXSVNFJiYoZy5yZXZlcnNlKCkscD1wLnNsaWNlKCkucmV2ZXJzZSgpKSxjKXtjPSExO2xldCBNPVtwXTtpZihNPWkoTSxNKSxNLmxlbmd0aD4xKXtmb3IobGV0IE4gb2YgTSl1LmVucXVldWUobmV3IGhUKE4sZCkpO2NvbnRpbnVlfX1sZXQgTz1wLnNsaWNlKCksRT1tKGQpP2QubGVuZ3RoOjAsVD1bXSx4O2ZvcihoPTA7aDxFO2grKyl7bGV0IE09ZFtoXSxOPU0ucG9zaXRpb25zO2lmKG8pZm9yKF89Ti5sZW5ndGgseD0wO3g8XzsrK3gpci5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKE5beF0sTlt4XSk7aWYoZXx8KE49Q24oTixhLmVxdWFsc0Vwc2lsb24sITApKSxOLmxlbmd0aDwzKWNvbnRpbnVlO2xldCBGPW4oTik7aWYoIW0oRikpY29udGludWU7dz1QZS5jb21wdXRlV2luZGluZ09yZGVyMkQoRiksdz09PVBvLkNMT0NLV0lTRSYmKEYucmV2ZXJzZSgpLE49Ti5zbGljZSgpLnJldmVyc2UoKSksVC5wdXNoKE4pLGIucHVzaChPLmxlbmd0aCksTz1PLmNvbmNhdChOKSxnPWcuY29uY2F0KEYpO2xldCBJPTA7Zm9yKG0oTS5ob2xlcykmJihJPU0uaG9sZXMubGVuZ3RoKSx4PTA7eDxJO3grKyl1LmVucXVldWUoTS5ob2xlc1t4XSl9cy5wdXNoKHtvdXRlclJpbmc6cCxob2xlczpUfSksZi5wdXNoKHtwb3NpdGlvbnM6Tyxwb3NpdGlvbnMyRDpnLGhvbGVzOmJ9KX1yZXR1cm57aGllcmFyY2h5OnMscG9seWdvbnM6Zn19OyRJPW5ldyBKLFpJPW5ldyBhLFFJPW5ldyB0ZSxKST1uZXcgWjtPbi5jb21wdXRlQm91bmRpbmdSZWN0YW5nbGU9ZnVuY3Rpb24odCxlLG4sbyxyKXtsZXQgaT10ZS5mcm9tQXhpc0FuZ2xlKHQsbyxRSSkscz1aLmZyb21RdWF0ZXJuaW9uKGksSkkpLGY9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHU9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGw9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHA9bi5sZW5ndGg7Zm9yKGxldCBkPTA7ZDxwOysrZCl7bGV0IGg9YS5jbG9uZShuW2RdLFpJKTtaLm11bHRpcGx5QnlWZWN0b3IocyxoLGgpO2xldCBfPWUoaCwkSSk7bShfKSYmKGY9TWF0aC5taW4oZixfLngpLHU9TWF0aC5tYXgodSxfLngpLGM9TWF0aC5taW4oYyxfLnkpLGw9TWF0aC5tYXgobCxfLnkpKX1yZXR1cm4gci54PWYsci55PWMsci53aWR0aD11LWYsci5oZWlnaHQ9bC1jLHJ9O09uLmNyZWF0ZUdlb21ldHJ5RnJvbVBvc2l0aW9ucz1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXtsZXQgZj1QZS50cmlhbmd1bGF0ZShlLnBvc2l0aW9uczJELGUuaG9sZXMpO2YubGVuZ3RoPDMmJihmPVswLDEsMl0pO2xldCB1PWUucG9zaXRpb25zLGM9bShuKSxsPWM/bi5wb3NpdGlvbnM6dm9pZCAwO2lmKHIpe2xldCBwPXUubGVuZ3RoLGQ9bmV3IEFycmF5KHAqMyksaD0wO2ZvcihsZXQgYj0wO2I8cDtiKyspe2xldCB3PXVbYl07ZFtoKytdPXcueCxkW2grK109dy55LGRbaCsrXT13Lnp9bGV0IF89e2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZH0pfSxpbmRpY2VzOmYscHJpbWl0aXZlVHlwZTpCdC5UUklBTkdMRVN9O2MmJihfLmF0dHJpYnV0ZXMuc3Q9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOkoucGFja0FycmF5KGwpfSkpO2xldCBnPW5ldyBVdChfKTtyZXR1cm4gaS5ub3JtYWw/R2UuY29tcHV0ZU5vcm1hbChnKTpnfWlmKHM9PT1oZS5HRU9ERVNJQylyZXR1cm4gUGUuY29tcHV0ZVN1YmRpdmlzaW9uKHQsdSxmLGwsbyk7aWYocz09PWhlLlJIVU1CKXJldHVybiBQZS5jb21wdXRlUmh1bWJMaW5lU3ViZGl2aXNpb24odCx1LGYsbCxvKX07dlQ9W10sRlQ9W10sdHY9bmV3IGEsZXY9bmV3IGE7T24uY29tcHV0ZVdhbGxHZW9tZXRyeT1mdW5jdGlvbih0LGUsbixvLHIsaSl7bGV0IHMsZix1LGMsbCxwLGQsaCxfLGc9dC5sZW5ndGgsYj0wLHc9MCxPPW0oZSksRT1PP2UucG9zaXRpb25zOnZvaWQgMDtpZihyKWZvcihmPWcqMyoyLHM9bmV3IEFycmF5KGYqMiksTyYmKF89ZyoyKjIsaD1uZXcgQXJyYXkoXyoyKSksdT0wO3U8Zzt1KyspYz10W3VdLGw9dFsodSsxKSVnXSxzW2JdPXNbYitmXT1jLngsKytiLHNbYl09c1tiK2ZdPWMueSwrK2Isc1tiXT1zW2IrZl09Yy56LCsrYixzW2JdPXNbYitmXT1sLngsKytiLHNbYl09c1tiK2ZdPWwueSwrK2Isc1tiXT1zW2IrZl09bC56LCsrYixPJiYocD1FW3VdLGQ9RVsodSsxKSVnXSxoW3ddPWhbdytfXT1wLngsKyt3LGhbd109aFt3K19dPXAueSwrK3csaFt3XT1oW3crX109ZC54LCsrdyxoW3ddPWhbdytfXT1kLnksKyt3KTtlbHNle2xldCBGPVAuY2hvcmRMZW5ndGgobyxuLm1heGltdW1SYWRpdXMpLEk9MDtpZihpPT09aGUuR0VPREVTSUMpZm9yKHU9MDt1PGc7dSsrKUkrPU9uLnN1YmRpdmlkZUxpbmVDb3VudCh0W3VdLHRbKHUrMSklZ10sRik7ZWxzZSBpZihpPT09aGUuUkhVTUIpZm9yKHU9MDt1PGc7dSsrKUkrPU9uLnN1YmRpdmlkZVJodW1iTGluZUNvdW50KG4sdFt1XSx0Wyh1KzEpJWddLEYpO2ZvcihmPShJK2cpKjMscz1uZXcgQXJyYXkoZioyKSxPJiYoXz0oSStnKSoyLGg9bmV3IEFycmF5KF8qMikpLHU9MDt1PGc7dSsrKXtjPXRbdV0sbD10Wyh1KzEpJWddO2xldCB2LEI7TyYmKHA9RVt1XSxkPUVbKHUrMSklZ10pLGk9PT1oZS5HRU9ERVNJQz8odj1Pbi5zdWJkaXZpZGVMaW5lKGMsbCxGLEZUKSxPJiYoQj1Pbi5zdWJkaXZpZGVUZXhjb29yZExpbmUocCxkLGMsbCxGLHZUKSkpOmk9PT1oZS5SSFVNQiYmKHY9T24uc3ViZGl2aWRlUmh1bWJMaW5lKG4sYyxsLEYsRlQpLE8mJihCPU9uLnN1YmRpdmlkZVRleGNvb3JkUmh1bWJMaW5lKHAsZCxuLGMsbCxGLHZUKSkpO2xldCBBPXYubGVuZ3RoO2ZvcihsZXQgUz0wO1M8QTsrK1MsKytiKXNbYl09dltTXSxzW2IrZl09dltTXTtpZihzW2JdPWwueCxzW2IrZl09bC54LCsrYixzW2JdPWwueSxzW2IrZl09bC55LCsrYixzW2JdPWwueixzW2IrZl09bC56LCsrYixPKXtsZXQgUz1CLmxlbmd0aDtmb3IobGV0IEM9MDtDPFM7KytDLCsrdyloW3ddPUJbQ10saFt3K19dPUJbQ107aFt3XT1kLngsaFt3K19dPWQueCwrK3csaFt3XT1kLnksaFt3K19dPWQueSwrK3d9fX1nPXMubGVuZ3RoO2xldCBUPUx0LmNyZWF0ZVR5cGVkQXJyYXkoZy8zLGctdC5sZW5ndGgqNikseD0wO2ZvcihnLz02LHU9MDt1PGc7dSsrKXtsZXQgRj11LEk9RisxLHY9RitnLEI9disxO2M9YS5mcm9tQXJyYXkocyxGKjMsdHYpLGw9YS5mcm9tQXJyYXkocyxJKjMsZXYpLCFhLmVxdWFsc0Vwc2lsb24oYyxsLFAuRVBTSUxPTjEwLFAuRVBTSUxPTjEwKSYmKFRbeCsrXT1GLFRbeCsrXT12LFRbeCsrXT1JLFRbeCsrXT1JLFRbeCsrXT12LFRbeCsrXT1CKX1sZXQgTT17YXR0cmlidXRlczpuZXcgaWUoe3Bvc2l0aW9uOm5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6c30pfSksaW5kaWNlczpULHByaW1pdGl2ZVR5cGU6QnQuVFJJQU5HTEVTfTtyZXR1cm4gTyYmKE0uYXR0cmlidXRlcy5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6aH0pKSxuZXcgVXQoTSl9O19lPU9ufSk7ZnVuY3Rpb24gbXYodCxlLG4sbyxyLGkscyxmLHUpe2xldCBjPXQucG9zaXRpb25zLGw9UGUudHJpYW5ndWxhdGUodC5wb3NpdGlvbnMyRCx0LmhvbGVzKTtsLmxlbmd0aDwzJiYobD1bMCwxLDJdKTtsZXQgcD1MdC5jcmVhdGVUeXBlZEFycmF5KGMubGVuZ3RoLGwubGVuZ3RoKTtwLnNldChsKTtsZXQgZD1sdjtpZihvIT09MCl7bGV0IEI9dGUuZnJvbUF4aXNBbmdsZShzLG8sQlQpO2lmKGQ9Wi5mcm9tUXVhdGVybmlvbihCLGQpLGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpe0I9dGUuZnJvbUF4aXNBbmdsZShzLC1vLEJUKTtsZXQgQT1aLmZyb21RdWF0ZXJuaW9uKEIscHYpO2Y9YS5ub3JtYWxpemUoWi5tdWx0aXBseUJ5VmVjdG9yKEEsZixmKSxmKSxlLmJpdGFuZ2VudCYmKHU9YS5ub3JtYWxpemUoYS5jcm9zcyhzLGYsdSksdSkpfX1lbHNlIGQ9Wi5jbG9uZShaLklERU5USVRZLGQpO2xldCBoPWl2O2Uuc3QmJihoLng9bi54LGgueT1uLnkpO2xldCBfPWMubGVuZ3RoLGc9XyozLGI9bmV3IEZsb2F0NjRBcnJheShnKSx3PWUubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoZyk6dm9pZCAwLE89ZS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoZyk6dm9pZCAwLEU9ZS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShnKTp2b2lkIDAsVD1lLnN0P25ldyBGbG9hdDMyQXJyYXkoXyoyKTp2b2lkIDAseD0wLE09MCxOPTAsRj0wLEk9MDtmb3IobGV0IEI9MDtCPF87QisrKXtsZXQgQT1jW0JdO2lmKGJbeCsrXT1BLngsYlt4KytdPUEueSxiW3grK109QS56LGUuc3QpaWYobShyKSYmci5wb3NpdGlvbnMubGVuZ3RoPT09XylUW0krK109ci5wb3NpdGlvbnNbQl0ueCxUW0krK109ci5wb3NpdGlvbnNbQl0ueTtlbHNle2xldCBTPVoubXVsdGlwbHlCeVZlY3RvcihkLEEsbnYpLEM9aShTLHJ2KTtKLnN1YnRyYWN0KEMsaCxDKTtsZXQgTD1QLmNsYW1wKEMueC9uLndpZHRoLDAsMSksej1QLmNsYW1wKEMueS9uLmhlaWdodCwwLDEpO1RbSSsrXT1MLFRbSSsrXT16fWUubm9ybWFsJiYod1tNKytdPXMueCx3W00rK109cy55LHdbTSsrXT1zLnopLGUudGFuZ2VudCYmKE9bRisrXT1mLngsT1tGKytdPWYueSxPW0YrK109Zi56KSxlLmJpdGFuZ2VudCYmKEVbTisrXT11LngsRVtOKytdPXUueSxFW04rK109dS56KX1sZXQgdj1uZXcgaWU7cmV0dXJuIGUucG9zaXRpb24mJih2LnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Yn0pKSxlLm5vcm1hbCYmKHYubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp3fSkpLGUudGFuZ2VudCYmKHYudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6T30pKSxlLmJpdGFuZ2VudCYmKHYuYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpFfSkpLGUuc3QmJih2LnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpUfSkpLG5ldyBVdCh7YXR0cmlidXRlczp2LGluZGljZXM6cCxwcmltaXRpdmVUeXBlOkJ0LlRSSUFOR0xFU30pfWZ1bmN0aW9uIG1jKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9seWdvbkhpZXJhcmNoeSxuPXQudGV4dHVyZUNvb3JkaW5hdGVzO3kuZGVmaW5lZCgib3B0aW9ucy5wb2x5Z29uSGllcmFyY2h5IixlKTtsZXQgbz10LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVDt0aGlzLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUobyksdGhpcy5fcG9seWdvbkhpZXJhcmNoeT1lLHRoaXMuX3N0Um90YXRpb249dC5zdFJvdGF0aW9uPz8wLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNvcGxhbmFyUG9seWdvbkdlb21ldHJ5Iix0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZXM9bix0aGlzLnBhY2tlZExlbmd0aD1fZS5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKGUsYSkrcHQucGFja2VkTGVuZ3RoK1kucGFja2VkTGVuZ3RoKyhtKG4pP19lLmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgobixKKToxKSsyfXZhciBudixvdixydixpdixzdixjdixhdixCZixmdix1dixCVCxsdixwdixkdixodixfdix5dixHMCxVVD0kKCgpPT57SHIoKTtDZigpO3ZlKCk7a2UoKTtEdCgpO1d0KCk7RGUoKTtJMCgpO3llKCk7ZnQoKTskdCgpO1llKCk7JGUoKTthbigpO2NjKCk7Y2koKTtaZSgpO0t0KCk7VW4oKTtEZigpO0tyKCk7dG4oKTtYbygpO3hvKCk7bnY9bmV3IGEsb3Y9bmV3IHFyLHJ2PW5ldyBKLGl2PW5ldyBKLHN2PW5ldyBhLGN2PW5ldyBhLGF2PW5ldyBhLEJmPW5ldyBhLGZ2PW5ldyBhLHV2PW5ldyBhLEJUPW5ldyB0ZSxsdj1uZXcgWixwdj1uZXcgWixkdj1uZXcgYTttYy5mcm9tUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNULHkuZGVmaW5lZCgib3B0aW9ucy5wb3NpdGlvbnMiLHQucG9zaXRpb25zKTtsZXQgZT17cG9seWdvbkhpZXJhcmNoeTp7cG9zaXRpb25zOnQucG9zaXRpb25zfSx2ZXJ0ZXhGb3JtYXQ6dC52ZXJ0ZXhGb3JtYXQsc3RSb3RhdGlvbjp0LnN0Um90YXRpb24sZWxsaXBzb2lkOnQuZWxsaXBzb2lkLHRleHR1cmVDb29yZGluYXRlczp0LnRleHR1cmVDb29yZGluYXRlc307cmV0dXJuIG5ldyBtYyhlKX07bWMucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxuPV9lLnBhY2tQb2x5Z29uSGllcmFyY2h5KHQuX3BvbHlnb25IaWVyYXJjaHksZSxuLGEpLFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPXB0LnBhY2tlZExlbmd0aCxlW24rK109dC5fc3RSb3RhdGlvbixtKHQuX3RleHR1cmVDb29yZGluYXRlcyk/bj1fZS5wYWNrUG9seWdvbkhpZXJhcmNoeSh0Ll90ZXh0dXJlQ29vcmRpbmF0ZXMsZSxuLEopOmVbbisrXT0tMSxlW24rK109dC5wYWNrZWRMZW5ndGgsZX07aHY9WS5jbG9uZShZLlVOSVRfU1BIRVJFKSxfdj1uZXcgcHQseXY9e3BvbHlnb25IaWVyYXJjaHk6e319O21jLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wO2xldCBvPV9lLnVucGFja1BvbHlnb25IaWVyYXJjaHkodCxlLGEpO2U9by5zdGFydGluZ0luZGV4LGRlbGV0ZSBvLnN0YXJ0aW5nSW5kZXg7bGV0IHI9WS51bnBhY2sodCxlLGh2KTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgaT1wdC51bnBhY2sodCxlLF92KTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IHM9dFtlKytdLGY9dFtlXT09PS0xP3ZvaWQgMDpfZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxKKTttKGYpPyhlPWYuc3RhcnRpbmdJbmRleCxkZWxldGUgZi5zdGFydGluZ0luZGV4KTplKys7bGV0IHU9dFtlKytdO3JldHVybiBtKG4pfHwobj1uZXcgbWMoeXYpKSxuLl9wb2x5Z29uSGllcmFyY2h5PW8sbi5fZWxsaXBzb2lkPVkuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShpLG4uX3ZlcnRleEZvcm1hdCksbi5fc3RSb3RhdGlvbj1zLG4uX3RleHR1cmVDb29yZGluYXRlcz1mLG4ucGFja2VkTGVuZ3RoPXUsbn07bWMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fdmVydGV4Rm9ybWF0LG49dC5fcG9seWdvbkhpZXJhcmNoeSxvPXQuX3N0Um90YXRpb24scj10Ll90ZXh0dXJlQ29vcmRpbmF0ZXMsaT1tKHIpLHM9bi5wb3NpdGlvbnM7aWYocz1DbihzLGEuZXF1YWxzRXBzaWxvbiwhMCkscy5sZW5ndGg8MylyZXR1cm47bGV0IGY9c3YsdT1jdixjPWF2LGw9ZnYscD11djtpZighbWEuY29tcHV0ZVByb2plY3RUbzJEQXJndW1lbnRzKHMsQmYsbCxwKSlyZXR1cm47aWYoZj1hLmNyb3NzKGwscCxmKSxmPWEubm9ybWFsaXplKGYsZiksIWEuZXF1YWxzRXBzaWxvbihCZixhLlpFUk8sUC5FUFNJTE9ONikpe2xldCBJPXQuX2VsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoQmYsZHYpO2EuZG90KGYsSSk8MCYmKGY9YS5uZWdhdGUoZixmKSxsPWEubmVnYXRlKGwsbCkpfWxldCBoPW1hLmNyZWF0ZVByb2plY3RQb2ludHNUbzJERnVuY3Rpb24oQmYsbCxwKSxfPW1hLmNyZWF0ZVByb2plY3RQb2ludFRvMkRGdW5jdGlvbihCZixsLHApO2UudGFuZ2VudCYmKHU9YS5jbG9uZShsLHUpKSxlLmJpdGFuZ2VudCYmKGM9YS5jbG9uZShwLGMpKTtsZXQgZz1fZS5wb2x5Z29uc0Zyb21IaWVyYXJjaHkobixpLGgsITEpLGI9Zy5oaWVyYXJjaHksdz1nLnBvbHlnb25zLE89ZnVuY3Rpb24oSSl7cmV0dXJuIEl9LEU9aT9fZS5wb2x5Z29uc0Zyb21IaWVyYXJjaHkociwhMCxPLCExKS5wb2x5Z29uczp2b2lkIDA7aWYoYi5sZW5ndGg9PT0wKXJldHVybjtzPWJbMF0ub3V0ZXJSaW5nO2xldCBUPUF0LmZyb21Qb2ludHMocykseD1fZS5jb21wdXRlQm91bmRpbmdSZWN0YW5nbGUoZixfLHMsbyxvdiksTT1bXTtmb3IobGV0IEk9MDtJPHcubGVuZ3RoO0krKyl7bGV0IHY9bmV3IGZvKHtnZW9tZXRyeTptdih3W0ldLGUseCxvLGk/RVtJXTp2b2lkIDAsXyxmLHUsYyl9KTtNLnB1c2godil9bGV0IE49R2UuY29tYmluZUluc3RhbmNlcyhNKVswXTtOLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPW5ldyBGbG9hdDY0QXJyYXkoTi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyksTi5pbmRpY2VzPUx0LmNyZWF0ZVR5cGVkQXJyYXkoTi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxOLmluZGljZXMpO2xldCBGPU4uYXR0cmlidXRlcztyZXR1cm4gZS5wb3NpdGlvbnx8ZGVsZXRlIEYucG9zaXRpb24sbmV3IFV0KHthdHRyaWJ1dGVzOkYsaW5kaWNlczpOLmluZGljZXMscHJpbWl0aXZlVHlwZTpOLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6VH0pfTtHMD1tY30pO3ZhciBWMD17fTtsZShWMCx7ZGVmYXVsdDooKT0+QXZ9KTtmdW5jdGlvbiBndih0LGUpe3JldHVybiBtKGUpJiYodD1HMC51bnBhY2sodCxlKSksRzAuY3JlYXRlR2VvbWV0cnkodCl9dmFyIEF2LHowPSQoKCk9PntVVCgpO2Z0KCk7QXY9Z3Z9KTtmdW5jdGlvbiBidih0KXtsZXQgZT10Lmxlbmd0aCxuPW5ldyBGbG9hdDY0QXJyYXkoZSozKSxvPUx0LmNyZWF0ZVR5cGVkQXJyYXkoZSxlKjIpLHI9MCxpPTA7Zm9yKGxldCBmPTA7ZjxlO2YrKyl7bGV0IHU9dFtmXTtuW3IrK109dS54LG5bcisrXT11LnksbltyKytdPXUueixvW2krK109ZixvW2krK109KGYrMSklZX1sZXQgcz1uZXcgaWUoe3Bvc2l0aW9uOm5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bn0pfSk7cmV0dXJuIG5ldyBVdCh7YXR0cmlidXRlczpzLGluZGljZXM6byxwcmltaXRpdmVUeXBlOkJ0LkxJTkVTfSl9ZnVuY3Rpb24gaGModCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5wb2x5Z29uSGllcmFyY2h5O3kuZGVmaW5lZCgib3B0aW9ucy5wb2x5Z29uSGllcmFyY2h5IixlKSx0aGlzLl9wb2x5Z29uSGllcmFyY2h5PWUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ29wbGFuYXJQb2x5Z29uT3V0bGluZUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD1fZS5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKGUsYSkrMX12YXIgd3YsajAsa1Q9JCgoKT0+e0hyKCk7dmUoKTtEdCgpO1d0KCk7RGUoKTtJMCgpO3llKCk7ZnQoKTtZZSgpOyRlKCk7YW4oKTtjYygpO2NpKCk7WmUoKTtEZigpO3RuKCk7aGMuZnJvbVBvc2l0aW9ucz1mdW5jdGlvbih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx5LmRlZmluZWQoIm9wdGlvbnMucG9zaXRpb25zIix0LnBvc2l0aW9ucyk7bGV0IGU9e3BvbHlnb25IaWVyYXJjaHk6e3Bvc2l0aW9uczp0LnBvc2l0aW9uc319O3JldHVybiBuZXcgaGMoZSl9O2hjLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsbj1fZS5wYWNrUG9seWdvbkhpZXJhcmNoeSh0Ll9wb2x5Z29uSGllcmFyY2h5LGUsbixhKSxlW25dPXQucGFja2VkTGVuZ3RoLGV9O3d2PXtwb2x5Z29uSGllcmFyY2h5Ont9fTtoYy51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1fZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxhKTtlPW8uc3RhcnRpbmdJbmRleCxkZWxldGUgby5zdGFydGluZ0luZGV4O2xldCByPXRbZV07cmV0dXJuIG0obil8fChuPW5ldyBoYyh3dikpLG4uX3BvbHlnb25IaWVyYXJjaHk9byxuLnBhY2tlZExlbmd0aD1yLG59O2hjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3BvbHlnb25IaWVyYXJjaHksbj1lLnBvc2l0aW9ucztpZihuPUNuKG4sYS5lcXVhbHNFcHNpbG9uLCEwKSxuLmxlbmd0aDwzfHwhbWEudmFsaWRPdXRsaW5lKG4pKXJldHVybjtsZXQgcj1fZS5wb2x5Z29uT3V0bGluZXNGcm9tSGllcmFyY2h5KGUsITEpO2lmKHIubGVuZ3RoPT09MClyZXR1cm47bGV0IGk9W107Zm9yKGxldCB1PTA7dTxyLmxlbmd0aDt1Kyspe2xldCBjPW5ldyBmbyh7Z2VvbWV0cnk6YnYoclt1XSl9KTtpLnB1c2goYyl9bGV0IHM9R2UuY29tYmluZUluc3RhbmNlcyhpKVswXSxmPUF0LmZyb21Qb2ludHMoZS5wb3NpdGlvbnMpO3JldHVybiBuZXcgVXQoe2F0dHJpYnV0ZXM6cy5hdHRyaWJ1dGVzLGluZGljZXM6cy5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6cy5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOmZ9KX07ajA9aGN9KTt2YXIgSDA9e307bGUoSDAse2RlZmF1bHQ6KCk9Pk92fSk7ZnVuY3Rpb24gVHYodCxlKXtyZXR1cm4gbShlKSYmKHQ9ajAudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksajAuY3JlYXRlR2VvbWV0cnkodCl9dmFyIE92LHEwPSQoKCk9PntrVCgpO2Z0KCk7JHQoKTtPdj1Udn0pO3ZhciBFdixmbixfYz0kKCgpPT57RXY9e1JPVU5ERUQ6MCxNSVRFUkVEOjEsQkVWRUxFRDoyfSxmbj1PYmplY3QuZnJlZXplKEV2KX0pO2Z1bmN0aW9uIFJ2KHQpe2xldCBlPXQuX3VTcXVhcmVkLG49dC5fZWxsaXBzb2lkLm1heGltdW1SYWRpdXMsbz10Ll9lbGxpcHNvaWQubWluaW11bVJhZGl1cyxyPShuLW8pL24saT1NYXRoLmNvcyh0Ll9zdGFydEhlYWRpbmcpLHM9TWF0aC5zaW4odC5fc3RhcnRIZWFkaW5nKSxmPSgxLXIpKk1hdGgudGFuKHQuX3N0YXJ0LmxhdGl0dWRlKSx1PTEvTWF0aC5zcXJ0KDErZipmKSxjPXUqZixsPU1hdGguYXRhbjIoZixpKSxwPXUqcyxkPXAqcCxoPTEtZCxfPU1hdGguc3FydChoKSxnPWUvNCxiPWcqZyx3PWIqZyxPPWIqYixFPTErZy0zKmIvNCs1KncvNC0xNzUqTy82NCxUPTEtZysxNSpiLzgtMzUqdy84LHg9MS0zKmcrMzUqYi80LE09MS01KmcsTj1FKmwtVCpNYXRoLnNpbigyKmwpKmcvMi14Kk1hdGguc2luKDQqbCkqYi8xNi1NKk1hdGguc2luKDYqbCkqdy80OC1NYXRoLnNpbig4KmwpKjUqTy81MTIsRj10Ll9jb25zdGFudHM7Ri5hPW4sRi5iPW8sRi5mPXIsRi5jb3NpbmVIZWFkaW5nPWksRi5zaW5lSGVhZGluZz1zLEYudGFuVT1mLEYuY29zaW5lVT11LEYuc2luZVU9YyxGLnNpZ21hPWwsRi5zaW5lQWxwaGE9cCxGLnNpbmVTcXVhcmVkQWxwaGE9ZCxGLmNvc2luZVNxdWFyZWRBbHBoYT1oLEYuY29zaW5lQWxwaGE9XyxGLnUyT3ZlcjQ9ZyxGLnU0T3ZlcjE2PWIsRi51Nk92ZXI2ND13LEYudThPdmVyMjU2PU8sRi5hMD1FLEYuYTE9VCxGLmEyPXgsRi5hMz1NLEYuZGlzdGFuY2VSYXRpbz1OfWZ1bmN0aW9uIFN2KHQsZSl7cmV0dXJuIHQqZSooNCt0Kig0LTMqZSkpLzE2fWZ1bmN0aW9uIEdUKHQsZSxuLG8scixpLHMpe2xldCBmPVN2KHQsbik7cmV0dXJuKDEtZikqdCplKihvK2YqcioocytmKmkqKDIqcypzLTEpKSl9ZnVuY3Rpb24geHYodCxlLG4sbyxyLGkscyl7bGV0IGY9KGUtbikvZSx1PWktbyxjPU1hdGguYXRhbigoMS1mKSpNYXRoLnRhbihyKSksbD1NYXRoLmF0YW4oKDEtZikqTWF0aC50YW4ocykpLHA9TWF0aC5jb3MoYyksZD1NYXRoLnNpbihjKSxoPU1hdGguY29zKGwpLF89TWF0aC5zaW4obCksZz1wKmgsYj1wKl8sdz1kKl8sTz1kKmgsRT11LFQ9UC5UV09fUEkseD1NYXRoLmNvcyhFKSxNPU1hdGguc2luKEUpLE4sRixJLHYsQjtkb3t4PU1hdGguY29zKEUpLE09TWF0aC5zaW4oRSk7bGV0IFc9Yi1PKng7ST1NYXRoLnNxcnQoaCpoKk0qTStXKlcpLEY9dytnKngsTj1NYXRoLmF0YW4yKEksRik7bGV0IFI7ST09PTA/KFI9MCx2PTEpOihSPWcqTS9JLHY9MS1SKlIpLFQ9RSxCPUYtMip3L3YsaXNGaW5pdGUoQil8fChCPTApLEU9dStHVChmLFIsdixOLEksRixCKX13aGlsZShNYXRoLmFicyhFLVQpPlAuRVBTSUxPTjEyKTtsZXQgQT12KihlKmUtbipuKS8obipuKSxTPTErQSooNDA5NitBKihBKigzMjAtMTc1KkEpLTc2OCkpLzE2Mzg0LEM9QSooMjU2K0EqKEEqKDc0LTQ3KkEpLTEyOCkpLzEwMjQsTD1CKkIsej1DKkkqKEIrQyooRiooMipMLTEpLUMqQiooNCpJKkktMykqKDQqTC0zKS82KS80KSxqPW4qUyooTi16KSxrPU1hdGguYXRhbjIoaCpNLGItTyp4KSxxPU1hdGguYXRhbjIocCpNLGIqeC1PKTt0Ll9kaXN0YW5jZT1qLHQuX3N0YXJ0SGVhZGluZz1rLHQuX2VuZEhlYWRpbmc9cSx0Ll91U3F1YXJlZD1BfWZ1bmN0aW9uIFZUKHQsZSxuLG8pe2xldCByPWEubm9ybWFsaXplKG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZSxLMCksQ3YpLGk9YS5ub3JtYWxpemUoby5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihuLEswKSxLMCk7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInZhbHVlIixNYXRoLmFicyhNYXRoLmFicyhhLmFuZ2xlQmV0d2VlbihyLGkpKS1NYXRoLlBJKSwuMDEyNSkseHYodCxvLm1heGltdW1SYWRpdXMsby5taW5pbXVtUmFkaXVzLGUubG9uZ2l0dWRlLGUubGF0aXR1ZGUsbi5sb25naXR1ZGUsbi5sYXRpdHVkZSksdC5fc3RhcnQ9Y3QuY2xvbmUoZSx0Ll9zdGFydCksdC5fZW5kPWN0LmNsb25lKG4sdC5fZW5kKSx0Ll9zdGFydC5oZWlnaHQ9MCx0Ll9lbmQuaGVpZ2h0PTAsUnYodCl9ZnVuY3Rpb24gVWYodCxlLG4pe2xldCBvPW4/P1kuZGVmYXVsdDt0aGlzLl9lbGxpcHNvaWQ9byx0aGlzLl9zdGFydD1uZXcgY3QsdGhpcy5fZW5kPW5ldyBjdCx0aGlzLl9jb25zdGFudHM9e30sdGhpcy5fc3RhcnRIZWFkaW5nPXZvaWQgMCx0aGlzLl9lbmRIZWFkaW5nPXZvaWQgMCx0aGlzLl9kaXN0YW5jZT12b2lkIDAsdGhpcy5fdVNxdWFyZWQ9dm9pZCAwLG0odCkmJm0oZSkmJlZUKHRoaXMsdCxlLG8pfXZhciBDdixLMCx1ZCxXMD0kKCgpPT57RHQoKTtJZSgpO1d0KCk7ZnQoKTskdCgpO0t0KCk7Q3Y9bmV3IGEsSzA9bmV3IGE7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVWYucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxzdXJmYWNlRGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiB5LmRlZmluZWQoImRpc3RhbmNlIix0aGlzLl9kaXN0YW5jZSksdGhpcy5fZGlzdGFuY2V9fSxzdGFydDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0fX0sZW5kOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5kfX0sc3RhcnRIZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZpbmVkKCJkaXN0YW5jZSIsdGhpcy5fZGlzdGFuY2UpLHRoaXMuX3N0YXJ0SGVhZGluZ319LGVuZEhlYWRpbmc6e2dldDpmdW5jdGlvbigpe3JldHVybiB5LmRlZmluZWQoImRpc3RhbmNlIix0aGlzLl9kaXN0YW5jZSksdGhpcy5fZW5kSGVhZGluZ319fSk7VWYucHJvdG90eXBlLnNldEVuZFBvaW50cz1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgic3RhcnQiLHQpLHkuZGVmaW5lZCgiZW5kIixlKSxWVCh0aGlzLHQsZSx0aGlzLl9lbGxpcHNvaWQpfTtVZi5wcm90b3R5cGUuaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVVc2luZ1N1cmZhY2VEaXN0YW5jZSh0aGlzLl9kaXN0YW5jZSp0LGUpfTtVZi5wcm90b3R5cGUuaW50ZXJwb2xhdGVVc2luZ1N1cmZhY2VEaXN0YW5jZT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiZGlzdGFuY2UiLHRoaXMuX2Rpc3RhbmNlKTtsZXQgbj10aGlzLl9jb25zdGFudHMsbz1uLmRpc3RhbmNlUmF0aW8rdC9uLmIscj1NYXRoLmNvcygyKm8pLGk9TWF0aC5jb3MoNCpvKSxzPU1hdGguY29zKDYqbyksZj1NYXRoLnNpbigyKm8pLHU9TWF0aC5zaW4oNCpvKSxjPU1hdGguc2luKDYqbyksbD1NYXRoLnNpbig4Km8pLHA9bypvLGQ9bypwLGg9bi51OE92ZXIyNTYsXz1uLnUyT3ZlcjQsZz1uLnU2T3ZlcjY0LGI9bi51NE92ZXIxNix3PTIqZCpoKnIvMytvKigxLV8rNypiLzQtMTUqZy80KzU3OSpoLzY0LShiLTE1KmcvNCsxODcqaC8xNikqci0oNSpnLzQtMTE1KmgvMTYpKmktMjkqaCpzLzE2KSsoXy8yLWIrNzEqZy8zMi04NSpoLzE2KSpmKyg1KmIvMTYtNSpnLzQrMzgzKmgvOTYpKnUtcCooKGctMTEqaC8yKSpmKzUqaCp1LzIpKygyOSpnLzk2LTI5KmgvMTYpKmMrNTM5KmgqbC8xNTM2LE89TWF0aC5hc2luKE1hdGguc2luKHcpKm4uY29zaW5lQWxwaGEpLEU9TWF0aC5hdGFuKG4uYS9uLmIqTWF0aC50YW4oTykpO3c9dy1uLnNpZ21hO2xldCBUPU1hdGguY29zKDIqbi5zaWdtYSt3KSx4PU1hdGguc2luKHcpLE09TWF0aC5jb3ModyksTj1uLmNvc2luZVUqTSxGPW4uc2luZVUqeCx2PU1hdGguYXRhbjIoeCpuLnNpbmVIZWFkaW5nLE4tRipuLmNvc2luZUhlYWRpbmcpLUdUKG4uZixuLnNpbmVBbHBoYSxuLmNvc2luZVNxdWFyZWRBbHBoYSx3LHgsTSxUKTtyZXR1cm4gbShlKT8oZS5sb25naXR1ZGU9dGhpcy5fc3RhcnQubG9uZ2l0dWRlK3YsZS5sYXRpdHVkZT1FLGUuaGVpZ2h0PTAsZSk6bmV3IGN0KHRoaXMuX3N0YXJ0LmxvbmdpdHVkZSt2LEUsMCl9O3VkPVVmfSk7ZnVuY3Rpb24gcVQodCxlLG4pe2xldCBvPVkwO28ubGVuZ3RoPXQ7bGV0IHI7aWYoZT09PW4pe2ZvcihyPTA7cjx0O3IrKylvW3JdPWU7cmV0dXJuIG99bGV0IHM9KG4tZSkvdDtmb3Iocj0wO3I8dDtyKyspe2xldCBmPWUrcipzO29bcl09Zn1yZXR1cm4gb31mdW5jdGlvbiBCdih0LGUsbixvLHIsaSxzLGYpe2xldCB1PW8uc2NhbGVUb0dlb2RldGljU3VyZmFjZSh0LCQwKSxjPW8uc2NhbGVUb0dlb2RldGljU3VyZmFjZShlLER2KSxsPVVvLm51bWJlck9mUG9pbnRzKHQsZSxuKSxwPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModSxwZCksZD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGMsbGQpLGg9cVQobCxyLGkpO1gwLnNldEVuZFBvaW50cyhwLGQpO2xldCBfPVgwLnN1cmZhY2VEaXN0YW5jZS9sLGc9ZjtwLmhlaWdodD1yO2xldCBiPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4ocCxocyk7YS5wYWNrKGIscyxnKSxnKz0zO2ZvcihsZXQgdz0xO3c8bDt3Kyspe2xldCBPPVgwLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UodypfLGxkKTtPLmhlaWdodD1oW3ddLGI9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihPLGhzKSxhLnBhY2soYixzLGcpLGcrPTN9cmV0dXJuIGd9ZnVuY3Rpb24gVXYodCxlLG4sbyxyLGkscyxmKXtsZXQgdT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHQscGQpLGM9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLGxkKSxsPVVvLm51bWJlck9mUG9pbnRzUmh1bWJMaW5lKHUsYyxuKTt1LmhlaWdodD0wLGMuaGVpZ2h0PTA7bGV0IHA9cVQobCxyLGkpO2tmLmVsbGlwc29pZC5lcXVhbHMobyl8fChrZj1uZXcgSm8odm9pZCAwLHZvaWQgMCxvKSksa2Yuc2V0RW5kUG9pbnRzKHUsYyk7bGV0IGQ9a2Yuc3VyZmFjZURpc3RhbmNlL2wsaD1mO3UuaGVpZ2h0PXI7bGV0IF89by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih1LGhzKTthLnBhY2soXyxzLGgpLGgrPTM7Zm9yKGxldCBnPTE7ZzxsO2crKyl7bGV0IGI9a2YuaW50ZXJwb2xhdGVVc2luZ1N1cmZhY2VEaXN0YW5jZShnKmQsbGQpO2IuaGVpZ2h0PXBbZ10sXz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGIsaHMpLGEucGFjayhfLHMsaCksaCs9M31yZXR1cm4gaH12YXIgVW8sUHYsTXYsTnYselQsSXYsalQsdnYsRnYsTHYsWTAscGQsbGQsaHMsJDAsRHYsWDAsa2YsSFQsa3YsQW4sZ2E9JCgoKT0+e0R0KCk7SWUoKTtmdCgpO0h0KCk7JHQoKTtXMCgpO05mKCk7ZWMoKTtLdCgpO2tuKCk7dXMoKTtVbz17fTtVby5udW1iZXJPZlBvaW50cz1mdW5jdGlvbih0LGUsbil7bGV0IG89YS5kaXN0YW5jZSh0LGUpO3JldHVybiBNYXRoLmNlaWwoby9uKX07VW8ubnVtYmVyT2ZQb2ludHNSaHVtYkxpbmU9ZnVuY3Rpb24odCxlLG4pe2xldCBvPU1hdGgucG93KHQubG9uZ2l0dWRlLWUubG9uZ2l0dWRlLDIpK01hdGgucG93KHQubGF0aXR1ZGUtZS5sYXRpdHVkZSwyKTtyZXR1cm4gTWF0aC5tYXgoMSxNYXRoLmNlaWwoTWF0aC5zcXJ0KG8vKG4qbikpKSl9O1B2PW5ldyBjdDtVby5leHRyYWN0SGVpZ2h0cz1mdW5jdGlvbih0LGUpe2xldCBuPXQubGVuZ3RoLG89bmV3IEFycmF5KG4pO2ZvcihsZXQgcj0wO3I8bjtyKyspe2xldCBpPXRbcl07b1tyXT1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGksUHYpLmhlaWdodH1yZXR1cm4gb307TXY9bmV3IHN0LE52PW5ldyBhLHpUPW5ldyBhLEl2PW5ldyBvbihhLlVOSVRfWCwwKSxqVD1uZXcgYSx2dj1uZXcgb24oYS5VTklUX1gsMCksRnY9bmV3IGEsTHY9bmV3IGEsWTA9W107cGQ9bmV3IGN0LGxkPW5ldyBjdCxocz1uZXcgYSwkMD1uZXcgYSxEdj1uZXcgYSxYMD1uZXcgdWQsa2Y9bmV3IEpvO1VvLndyYXBMb25naXR1ZGU9ZnVuY3Rpb24odCxlKXtsZXQgbj1bXSxvPVtdO2lmKG0odCkmJnQubGVuZ3RoPjApe2U9ZT8/c3QuSURFTlRJVFk7bGV0IHI9c3QuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGUsTXYpLGk9c3QubXVsdGlwbHlCeVBvaW50KHIsYS5aRVJPLE52KSxzPWEubm9ybWFsaXplKHN0Lm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKHIsYS5VTklUX1kselQpLHpUKSxmPW9uLmZyb21Qb2ludE5vcm1hbChpLHMsSXYpLHU9YS5ub3JtYWxpemUoc3QubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IocixhLlVOSVRfWCxqVCksalQpLGM9b24uZnJvbVBvaW50Tm9ybWFsKGksdSx2diksbD0xO24ucHVzaChhLmNsb25lKHRbMF0pKTtsZXQgcD1uWzBdLGQ9dC5sZW5ndGg7Zm9yKGxldCBoPTE7aDxkOysraCl7bGV0IF89dFtoXTtpZihvbi5nZXRQb2ludERpc3RhbmNlKGMscCk8MHx8b24uZ2V0UG9pbnREaXN0YW5jZShjLF8pPDApe2xldCBnPXlvLmxpbmVTZWdtZW50UGxhbmUocCxfLGYsRnYpO2lmKG0oZykpe2xldCBiPWEubXVsdGlwbHlCeVNjYWxhcihzLDVlLTksTHYpO29uLmdldFBvaW50RGlzdGFuY2UoZixwKTwwJiZhLm5lZ2F0ZShiLGIpLG4ucHVzaChhLmFkZChnLGIsbmV3IGEpKSxvLnB1c2gobCsxKSxhLm5lZ2F0ZShiLGIpLG4ucHVzaChhLmFkZChnLGIsbmV3IGEpKSxsPTF9fW4ucHVzaChhLmNsb25lKHRbaF0pKSxsKysscD1ffW8ucHVzaChsKX1yZXR1cm57cG9zaXRpb25zOm4sbGVuZ3RoczpvfX07VW8uZ2VuZXJhdGVBcmM9ZnVuY3Rpb24odCl7bSh0KXx8KHQ9e30pO2xldCBlPXQucG9zaXRpb25zO2lmKCFtKGUpKXRocm93IG5ldyBEKCJvcHRpb25zLnBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtsZXQgbj1lLmxlbmd0aCxvPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQscj10LmhlaWdodD8/MCxpPUFycmF5LmlzQXJyYXkocik7aWYobjwxKXJldHVybltdO2lmKG49PT0xKXtsZXQgZz1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZVswXSwkMCk7aWYocj1pP3JbMF06cixyIT09MCl7bGV0IGI9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZyxocyk7YS5tdWx0aXBseUJ5U2NhbGFyKGIscixiKSxhLmFkZChnLGIsZyl9cmV0dXJuW2cueCxnLnksZy56XX1sZXQgcz10Lm1pbkRpc3RhbmNlO2lmKCFtKHMpKXtsZXQgZz10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRTtzPVAuY2hvcmRMZW5ndGgoZyxvLm1heGltdW1SYWRpdXMpfWxldCBmPTAsdTtmb3IodT0wO3U8bi0xO3UrKylmKz1Vby5udW1iZXJPZlBvaW50cyhlW3VdLGVbdSsxXSxzKTtsZXQgYz0oZisxKSozLGw9bmV3IEFycmF5KGMpLHA9MDtmb3IodT0wO3U8bi0xO3UrKyl7bGV0IGc9ZVt1XSxiPWVbdSsxXSx3PWk/clt1XTpyLE89aT9yW3UrMV06cjtwPUJ2KGcsYixzLG8sdyxPLGwscCl9WTAubGVuZ3RoPTA7bGV0IGQ9ZVtuLTFdLGg9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhkLHBkKTtoLmhlaWdodD1pP3Jbbi0xXTpyO2xldCBfPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oaCxocyk7cmV0dXJuIGEucGFjayhfLGwsYy0zKSxsfTtIVD1uZXcgY3Qsa3Y9bmV3IGN0O1VvLmdlbmVyYXRlUmh1bWJBcmM9ZnVuY3Rpb24odCl7bSh0KXx8KHQ9e30pO2xldCBlPXQucG9zaXRpb25zO2lmKCFtKGUpKXRocm93IG5ldyBEKCJvcHRpb25zLnBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtsZXQgbj1lLmxlbmd0aCxvPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQscj10LmhlaWdodD8/MCxpPUFycmF5LmlzQXJyYXkocik7aWYobjwxKXJldHVybltdO2lmKG49PT0xKXtsZXQgdz1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZVswXSwkMCk7aWYocj1pP3JbMF06cixyIT09MCl7bGV0IE89by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodyxocyk7YS5tdWx0aXBseUJ5U2NhbGFyKE8scixPKSxhLmFkZCh3LE8sdyl9cmV0dXJuW3cueCx3Lnksdy56XX1sZXQgcz10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSxmPTAsdSxjPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZVswXSxIVCksbDtmb3IodT0wO3U8bi0xO3UrKylsPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZVt1KzFdLGt2KSxmKz1Vby5udW1iZXJPZlBvaW50c1JodW1iTGluZShjLGwscyksYz1jdC5jbG9uZShsLEhUKTtsZXQgcD0oZisxKSozLGQ9bmV3IEFycmF5KHApLGg9MDtmb3IodT0wO3U8bi0xO3UrKyl7bGV0IHc9ZVt1XSxPPWVbdSsxXSxFPWk/clt1XTpyLFQ9aT9yW3UrMV06cjtoPVV2KHcsTyxzLG8sRSxULGQsaCl9WTAubGVuZ3RoPTA7bGV0IF89ZVtuLTFdLGc9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhfLHBkKTtnLmhlaWdodD1pP3Jbbi0xXTpyO2xldCBiPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZyxocyk7cmV0dXJuIGEucGFjayhiLGQscC0zKSxkfTtVby5nZW5lcmF0ZUNhcnRlc2lhbkFyYz1mdW5jdGlvbih0KXtsZXQgZT1Vby5nZW5lcmF0ZUFyYyh0KSxuPWUubGVuZ3RoLzMsbz1uZXcgQXJyYXkobik7Zm9yKGxldCByPTA7cjxuO3IrKylvW3JdPWEudW5wYWNrKGUsciozKTtyZXR1cm4gb307VW8uZ2VuZXJhdGVDYXJ0ZXNpYW5SaHVtYkFyYz1mdW5jdGlvbih0KXtsZXQgZT1Vby5nZW5lcmF0ZVJodW1iQXJjKHQpLG49ZS5sZW5ndGgvMyxvPW5ldyBBcnJheShuKTtmb3IobGV0IHI9MDtyPG47cisrKW9bcl09YS51bnBhY2soZSxyKjMpO3JldHVybiBvfTtBbj1Vb30pO2Z1bmN0aW9uIEdmKHQsZSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImlkZW50aWZpZXIgaXMgcmVxdWlyZWQuIik7bShLVFt0XSl8fChLVFt0XT0hMCxjb25zb2xlLndhcm4oZT8/dCkpfXZhciBLVCxkZCxaMD0kKCgpPT57ZnQoKTtIdCgpO0tUPXt9O0dmLmdlb21ldHJ5T3V0bGluZXM9IkVudGl0eSBnZW9tZXRyeSBvdXRsaW5lcyBhcmUgdW5zdXBwb3J0ZWQgb24gdGVycmFpbi4gT3V0bGluZXMgd2lsbCBiZSBkaXNhYmxlZC4gVG8gZW5hYmxlIG91dGxpbmVzLCBkaXNhYmxlIGdlb21ldHJ5IHRlcnJhaW4gY2xhbXBpbmcgYnkgZXhwbGljaXRseSBzZXR0aW5nIGhlaWdodCB0byAwLiI7R2YuZ2VvbWV0cnlaSW5kZXg9IkVudGl0eSBnZW9tZXRyeSB3aXRoIHpJbmRleCBhcmUgdW5zdXBwb3J0ZWQgd2hlbiBoZWlnaHQgb3IgZXh0cnVkZWRIZWlnaHQgYXJlIGRlZmluZWQuICB6SW5kZXggd2lsbCBiZSBpZ25vcmVkIjtHZi5nZW9tZXRyeUhlaWdodFJlZmVyZW5jZT0iRW50aXR5IGNvcnJpZG9yLCBlbGxpcHNlLCBwb2x5Z29uIG9yIHJlY3RhbmdsZSB3aXRoIGhlaWdodFJlZmVyZW5jZSBtdXN0IGFsc28gaGF2ZSBhIGRlZmluZWQgaGVpZ2h0LiAgaGVpZ2h0UmVmZXJlbmNlIHdpbGwgYmUgaWdub3JlZCI7R2YuZ2VvbWV0cnlFeHRydWRlZEhlaWdodFJlZmVyZW5jZT0iRW50aXR5IGNvcnJpZG9yLCBlbGxpcHNlLCBwb2x5Z29uIG9yIHJlY3RhbmdsZSB3aXRoIGV4dHJ1ZGVkSGVpZ2h0UmVmZXJlbmNlIG11c3QgYWxzbyBoYXZlIGEgZGVmaW5lZCBleHRydWRlZEhlaWdodC4gIGV4dHJ1ZGVkSGVpZ2h0UmVmZXJlbmNlIHdpbGwgYmUgaWdub3JlZCI7ZGQ9R2Z9KTtmdW5jdGlvbiBZdih0LGUpe2xldCBuPW5ldyBBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2xldCByPXRbb107UTA9ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhyLFEwKSxuW29dPVEwLmhlaWdodCx0W29dPWUuc2NhbGVUb0dlb2RldGljU3VyZmFjZShyLHIpfXJldHVybiBufWZ1bmN0aW9uIEowKHQsZSxuLG8pe2xldCByPXRbMF0saT10WzFdLHM9YS5hbmdsZUJldHdlZW4ocixpKSxmPU1hdGguY2VpbChzL28pLHU9bmV3IEFycmF5KGYpLGM7aWYoZT09PW4pe2ZvcihjPTA7YzxmO2MrKyl1W2NdPWU7cmV0dXJuIHUucHVzaChuKSx1fWxldCBwPShuLWUpL2Y7Zm9yKGM9MTtjPGY7YysrKXtsZXQgZD1lK2MqcDt1W2NdPWR9cmV0dXJuIHVbMF09ZSx1LnB1c2gobiksdX1mdW5jdGlvbiAkdih0LGUsbixvKXtsZXQgcj1uZXcgQW8obixvKSxpPXIucHJvamVjdFBvaW50T250b1BsYW5lKGEuYWRkKG4sdCxoZCksaGQpLHM9ci5wcm9qZWN0UG9pbnRPbnRvUGxhbmUoYS5hZGQobixlLF9kKSxfZCksZj1KLmFuZ2xlQmV0d2VlbihpLHMpO3JldHVybiBzLngqaS55LXMueSppLng+PTA/LWY6Zn1mdW5jdGlvbiBraSh0LGUsbixvLHIsaSxzLGYpe2xldCB1PXRGLGM9ZUY7eWM9JG8uZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUodCxyLHljKSx1PXN0Lm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKHljLFp2LHUpLHU9YS5ub3JtYWxpemUodSx1KTtsZXQgbD0kdih1LGUsdCxyKTt0Xz1aLmZyb21Sb3RhdGlvbloobCx0XyksV1Quej1pLHljPXN0Lm11bHRpcGx5VHJhbnNmb3JtYXRpb24oeWMsc3QuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24odF8sV1QsUXYpLHljKTtsZXQgcD1KdjtwWzBdPXM7Zm9yKGxldCBkPTA7ZDxmO2QrKylmb3IobGV0IGg9MDtoPG4ubGVuZ3RoO2grPTMpYz1hLmZyb21BcnJheShuLGgsYyksYz1aLm11bHRpcGx5QnlWZWN0b3IocCxjLGMpLGM9c3QubXVsdGlwbHlCeVBvaW50KHljLGMsYyksby5wdXNoKGMueCxjLnksYy56KTtyZXR1cm4gb31mdW5jdGlvbiBlXyh0LGUsbixvLHIsaSxzKXtmb3IobGV0IGY9MDtmPHQubGVuZ3RoO2YrPTMpe2xldCB1PWEuZnJvbUFycmF5KHQsZixuRik7bz1raSh1LGUsbixvLHIsaVtmLzNdLHMsMSl9cmV0dXJuIG99ZnVuY3Rpb24gb0YodCxlKXtsZXQgbj10Lmxlbmd0aCxvPW5ldyBBcnJheShuKjYpLHI9MCxpPWUueCtlLndpZHRoLzIscz1lLnkrZS5oZWlnaHQvMixmPXRbMF07b1tyKytdPWYueC1pLG9bcisrXT0wLG9bcisrXT1mLnktcztmb3IobGV0IHU9MTt1PG47dSsrKXtmPXRbdV07bGV0IGM9Zi54LWksbD1mLnktcztvW3IrK109YyxvW3IrK109MCxvW3IrK109bCxvW3IrK109YyxvW3IrK109MCxvW3IrK109bH1yZXR1cm4gZj10WzBdLG9bcisrXT1mLngtaSxvW3IrK109MCxvW3IrK109Zi55LXMsb31mdW5jdGlvbiBYVCh0LGUpe2xldCBuPXQubGVuZ3RoLG89bmV3IEFycmF5KG4qMykscj0wLGk9ZS54K2Uud2lkdGgvMixzPWUueStlLmhlaWdodC8yO2ZvcihsZXQgZj0wO2Y8bjtmKyspb1tyKytdPXRbZl0ueC1pLG9bcisrXT0wLG9bcisrXT10W2ZdLnktcztyZXR1cm4gb31mdW5jdGlvbiBRVCh0LGUsbixvLHIsaSxzLGYsdSxjKXtsZXQgbD1hLmFuZ2xlQmV0d2VlbihhLnN1YnRyYWN0KGUsdCxBYSksYS5zdWJ0cmFjdChuLHQsbWQpKSxwPW89PT1mbi5CRVZFTEVEPzA6TWF0aC5jZWlsKGwvUC50b1JhZGlhbnMoNSkpLGQ7cj9kPVouZnJvbVF1YXRlcm5pb24odGUuZnJvbUF4aXNBbmdsZShhLm5lZ2F0ZSh0LEFhKSxsLyhwKzEpLFlUKSxaVCk6ZD1aLmZyb21RdWF0ZXJuaW9uKHRlLmZyb21BeGlzQW5nbGUodCxsLyhwKzEpLFlUKSxaVCk7bGV0IGgsXztpZihlPWEuY2xvbmUoZSwkVCkscD4wKXtsZXQgZz1jPzI6MTtmb3IobGV0IGI9MDtiPHA7YisrKWU9Wi5tdWx0aXBseUJ5VmVjdG9yKGQsZSxlKSxoPWEuc3VidHJhY3QoZSx0LEFhKSxoPWEubm9ybWFsaXplKGgsaCkscnx8KGg9YS5uZWdhdGUoaCxoKSksXz1pLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZSxtZCkscz1raShfLGgsZixzLGksdSwxLGcpfWVsc2UgaD1hLnN1YnRyYWN0KGUsdCxBYSksaD1hLm5vcm1hbGl6ZShoLGgpLHJ8fChoPWEubmVnYXRlKGgsaCkpLF89aS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGUsbWQpLHM9a2koXyxoLGYscyxpLHUsMSwxKSxuPWEuY2xvbmUobiwkVCksaD1hLnN1YnRyYWN0KG4sdCxBYSksaD1hLm5vcm1hbGl6ZShoLGgpLHJ8fChoPWEubmVnYXRlKGgsaCkpLF89aS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKG4sbWQpLHM9a2koXyxoLGYscyxpLHUsMSwxKTtyZXR1cm4gc312YXIgdW8sR3YsVnYsenYsanYsSHYscXYsS3YsV3YsWHYsQWEsbWQsVmYsUTAsaGQsX2QsWnYseWMsUXYsdF8sSnYsdEYsZUYsV1QsbkYsWVQsJFQsWlQsckYsaUYsX3MseWQ9JCgoKT0+e2tlKCk7RHQoKTtfcigpO0llKCk7X2MoKTtwYSgpO0t0KCk7VW4oKTtrbigpO2dhKCk7WG8oKTthcygpO1owKCk7dW89W25ldyBhLG5ldyBhXSxHdj1uZXcgYSxWdj1uZXcgYSx6dj1uZXcgYSxqdj1uZXcgYSxIdj1uZXcgYSxxdj1uZXcgYSxLdj1uZXcgYSxXdj1uZXcgYSxYdj1uZXcgYSxBYT1uZXcgYSxtZD1uZXcgYSxWZj17fSxRMD1uZXcgY3Q7aGQ9bmV3IGEsX2Q9bmV3IGE7WnY9bmV3IGEoLTEsMCwwKSx5Yz1uZXcgc3QsUXY9bmV3IHN0LHRfPW5ldyBaLEp2PVouSURFTlRJVFkuY2xvbmUoKSx0Rj1uZXcgYSxlRj1uZXcgbWUsV1Q9bmV3IGE7bkY9bmV3IGE7WVQ9bmV3IHRlLCRUPW5ldyBhLFpUPW5ldyBaO1ZmLnJlbW92ZUR1cGxpY2F0ZXNGcm9tU2hhcGU9ZnVuY3Rpb24odCl7bGV0IGU9dC5sZW5ndGgsbj1bXTtmb3IobGV0IG89ZS0xLHI9MDtyPGU7bz1yKyspe2xldCBpPXRbb10scz10W3JdO0ouZXF1YWxzKGkscyl8fG4ucHVzaChzKX1yZXR1cm4gbn07VmYuYW5nbGVJc0dyZWF0ZXJUaGFuUGk9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9bmV3IEFvKG4sbyksaT1yLnByb2plY3RQb2ludE9udG9QbGFuZShhLmFkZChuLHQsaGQpLGhkKSxzPXIucHJvamVjdFBvaW50T250b1BsYW5lKGEuYWRkKG4sZSxfZCksX2QpO3JldHVybiBzLngqaS55LXMueSppLng+PTB9O3JGPW5ldyBhLGlGPW5ldyBhO1ZmLmNvbXB1dGVQb3NpdGlvbnM9ZnVuY3Rpb24odCxlLG4sbyxyKXtsZXQgaT1vLl9lbGxpcHNvaWQscz1Zdih0LGkpLGY9by5fZ3JhbnVsYXJpdHksdT1vLl9jb3JuZXJUeXBlLGM9cj9vRihlLG4pOlhUKGUsbiksbD1yP1hUKGUsbik6dm9pZCAwLHA9bi5oZWlnaHQvMixkPW4ud2lkdGgvMixoPXQubGVuZ3RoLF89W10sZz1yP1tdOnZvaWQgMCxiPUd2LHc9VnYsTz16dixFPWp2LFQ9SHYseD1xdixNPUt2LE49V3YsRj1YdixJPXRbMF0sdj10WzFdO0U9aS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoSSxFKSxiPWEuc3VidHJhY3QodixJLGIpLGI9YS5ub3JtYWxpemUoYixiKSxOPWEuY3Jvc3MoRSxiLE4pLE49YS5ub3JtYWxpemUoTixOKTtsZXQgQj1zWzBdLEE9c1sxXTtyJiYoZz1raShJLE4sbCxnLGksQitwLDEsMSkpLEY9YS5jbG9uZShJLEYpLEk9dix3PWEubmVnYXRlKGIsdyk7bGV0IFMsQztmb3IobGV0IGo9MTtqPGgtMTtqKyspe2xldCBrPXI/MjoxO2lmKHY9dFtqKzFdLEkuZXF1YWxzKHYpKXtkZCgiUG9zaXRpb25zIGFyZSB0b28gY2xvc2UgYW5kIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgd2l0aCByb3VuZGluZyBlcnJvci4iKTtjb250aW51ZX1iPWEuc3VidHJhY3QodixJLGIpLGI9YS5ub3JtYWxpemUoYixiKSxFPWkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEksRSk7bGV0IHE9YS5tdWx0aXBseUJ5U2NhbGFyKEUsYS5kb3QoYixFKSxyRik7YS5zdWJ0cmFjdChiLHEscSksYS5ub3JtYWxpemUocSxxKTtsZXQgVz1hLm11bHRpcGx5QnlTY2FsYXIoRSxhLmRvdCh3LEUpLGlGKTtpZihhLnN1YnRyYWN0KHcsVyxXKSxhLm5vcm1hbGl6ZShXLFcpLCFQLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMoYS5kb3QocSxXKSksMSxQLkVQU0lMT043KSl7Tz1hLmFkZChiLHcsTyksTz1hLm5vcm1hbGl6ZShPLE8pLE89YS5jcm9zcyhPLEUsTyksTz1hLmNyb3NzKEUsTyxPKSxPPWEubm9ybWFsaXplKE8sTyk7bGV0IG50PTEvTWF0aC5tYXgoLjI1LGEubWFnbml0dWRlKGEuY3Jvc3MoTyx3LEFhKSkpLGF0PVZmLmFuZ2xlSXNHcmVhdGVyVGhhblBpKGIsdyxJLGkpO2F0PyhUPWEuYWRkKEksYS5tdWx0aXBseUJ5U2NhbGFyKE8sbnQqZCxPKSxUKSx4PWEuYWRkKFQsYS5tdWx0aXBseUJ5U2NhbGFyKE4sZCx4KSx4KSx1b1swXT1hLmNsb25lKEYsdW9bMF0pLHVvWzFdPWEuY2xvbmUoeCx1b1sxXSksUz1KMCh1byxCK3AsQStwLGYpLEM9QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczp1byxncmFudWxhcml0eTpmLGVsbGlwc29pZDppfSksXz1lXyhDLE4sYyxfLGksUywxKSxOPWEuY3Jvc3MoRSxiLE4pLE49YS5ub3JtYWxpemUoTixOKSxNPWEuYWRkKFQsYS5tdWx0aXBseUJ5U2NhbGFyKE4sZCxNKSxNKSx1PT09Zm4uUk9VTkRFRHx8dT09PWZuLkJFVkVMRUQ/UVQoVCx4LE0sdSxhdCxpLF8sYyxBK3Ascik6KE89YS5uZWdhdGUoTyxPKSxfPWtpKEksTyxjLF8saSxBK3AsbnQsaykpLEY9YS5jbG9uZShNLEYpKTooVD1hLmFkZChJLGEubXVsdGlwbHlCeVNjYWxhcihPLG50KmQsTyksVCkseD1hLmFkZChULGEubXVsdGlwbHlCeVNjYWxhcihOLC1kLHgpLHgpLHVvWzBdPWEuY2xvbmUoRix1b1swXSksdW9bMV09YS5jbG9uZSh4LHVvWzFdKSxTPUowKHVvLEIrcCxBK3AsZiksQz1Bbi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOnVvLGdyYW51bGFyaXR5OmYsZWxsaXBzb2lkOml9KSxfPWVfKEMsTixjLF8saSxTLDEpLE49YS5jcm9zcyhFLGIsTiksTj1hLm5vcm1hbGl6ZShOLE4pLE09YS5hZGQoVCxhLm11bHRpcGx5QnlTY2FsYXIoTiwtZCxNKSxNKSx1PT09Zm4uUk9VTkRFRHx8dT09PWZuLkJFVkVMRUQ/UVQoVCx4LE0sdSxhdCxpLF8sYyxBK3Ascik6Xz1raShJLE8sYyxfLGksQStwLG50LGspLEY9YS5jbG9uZShNLEYpKSx3PWEubmVnYXRlKGIsdyl9ZWxzZSBfPWtpKEYsTixjLF8saSxCK3AsMSwxKSxGPUk7Qj1BLEE9c1tqKzFdLEk9dn11b1swXT1hLmNsb25lKEYsdW9bMF0pLHVvWzFdPWEuY2xvbmUoSSx1b1sxXSksUz1KMCh1byxCK3AsQStwLGYpLEM9QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczp1byxncmFudWxhcml0eTpmLGVsbGlwc29pZDppfSksXz1lXyhDLE4sYyxfLGksUywxKSxyJiYoZz1raShJLE4sbCxnLGksQStwLDEsMSkpLGg9Xy5sZW5ndGg7bGV0IEw9cj9oK2cubGVuZ3RoOmgsej1uZXcgRmxvYXQ2NEFycmF5KEwpO3JldHVybiB6LnNldChfKSxyJiZ6LnNldChnLGgpLHp9O19zPVZmfSk7ZnVuY3Rpb24gZ2QodCxlLG4sbyxyKXtsZXQgaT1hLmFuZ2xlQmV0d2VlbihhLnN1YnRyYWN0KGUsdCxiYSksYS5zdWJ0cmFjdChuLHQsb08pKSxzPW89PT1mbi5CRVZFTEVEPzE6TWF0aC5jZWlsKGkvUC50b1JhZGlhbnMoNSkpKzEsZj1zKjMsdT1uZXcgQXJyYXkoZik7dVtmLTNdPW4ueCx1W2YtMl09bi55LHVbZi0xXT1uLno7bGV0IGM7cj9jPVouZnJvbVF1YXRlcm5pb24odGUuZnJvbUF4aXNBbmdsZShhLm5lZ2F0ZSh0LGJhKSxpL3MsdE8pLGVPKTpjPVouZnJvbVF1YXRlcm5pb24odGUuZnJvbUF4aXNBbmdsZSh0LGkvcyx0TyksZU8pO2xldCBsPTA7ZT1hLmNsb25lKGUsYmEpO2ZvcihsZXQgcD0wO3A8cztwKyspZT1aLm11bHRpcGx5QnlWZWN0b3IoYyxlLGUpLHVbbCsrXT1lLngsdVtsKytdPWUueSx1W2wrK109ZS56O3JldHVybiB1fWZ1bmN0aW9uIG1GKHQpe2xldCBlPXJPLG49aU8sbz1zTyxyPXRbMV07bj1hLmZyb21BcnJheSh0WzFdLHIubGVuZ3RoLTMsbiksbz1hLmZyb21BcnJheSh0WzBdLDAsbyksZT1hLm1pZHBvaW50KG4sbyxlKTtsZXQgaT1nZChlLG4sbyxmbi5ST1VOREVELCExKSxzPXQubGVuZ3RoLTEsZj10W3MtMV07cj10W3NdLG49YS5mcm9tQXJyYXkoZixmLmxlbmd0aC0zLG4pLG89YS5mcm9tQXJyYXkociwwLG8pLGU9YS5taWRwb2ludChuLG8sZSk7bGV0IHU9Z2QoZSxuLG8sZm4uUk9VTkRFRCwhMSk7cmV0dXJuW2ksdV19ZnVuY3Rpb24gbk8odCxlLG4sbyl7bGV0IHI9YmE7cmV0dXJuIG8/cj1hLmFkZCh0LGUscik6KGU9YS5uZWdhdGUoZSxlKSxyPWEuYWRkKHQsZSxyKSksW3IueCxyLnksci56LG4ueCxuLnksbi56XX1mdW5jdGlvbiBuXyh0LGUsbixvKXtsZXQgcj1uZXcgQXJyYXkodC5sZW5ndGgpLGk9bmV3IEFycmF5KHQubGVuZ3RoKSxzPWEubXVsdGlwbHlCeVNjYWxhcihlLG4sYmEpLGY9YS5uZWdhdGUocyxvTyksdT0wLGM9dC5sZW5ndGgtMTtmb3IobGV0IGw9MDtsPHQubGVuZ3RoO2wrPTMpe2xldCBwPWEuZnJvbUFycmF5KHQsbCxzRiksZD1hLmFkZChwLGYsSlQpO3JbdSsrXT1kLngsclt1KytdPWQueSxyW3UrK109ZC56O2xldCBoPWEuYWRkKHAscyxKVCk7aVtjLS1dPWgueixpW2MtLV09aC55LGlbYy0tXT1oLnh9cmV0dXJuIG8ucHVzaChyLGkpLG99dmFyIG9fLGJhLG9PLHNGLEpULGtvLHJPLGlPLHNPLGNGLGFGLGZGLHVGLGxGLHBGLGRGLHRPLGVPLGhGLF9GLEtlLHJfPSQoKCk9PntEdCgpO19jKCk7ZnQoKTtLdCgpO1VuKCk7Z2EoKTt5ZCgpO1hvKCk7b189e30sYmE9bmV3IGEsb089bmV3IGEsc0Y9bmV3IGEsSlQ9bmV3IGEsa289W25ldyBhLG5ldyBhXSxyTz1uZXcgYSxpTz1uZXcgYSxzTz1uZXcgYSxjRj1uZXcgYSxhRj1uZXcgYSxmRj1uZXcgYSx1Rj1uZXcgYSxsRj1uZXcgYSxwRj1uZXcgYSxkRj1uZXcgYSx0Tz1uZXcgdGUsZU89bmV3IFo7b18uYWRkQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPWUueCxpPWUueSxzPWUuejttKG4pJiYodFtuXT1yLHRbbisxXT1pLHRbbisyXT1zKSxtKG8pJiYodFtvXT1zLHRbby0xXT1pLHRbby0yXT1yKX07aEY9bmV3IGEsX0Y9bmV3IGE7b18uY29tcHV0ZVBvc2l0aW9ucz1mdW5jdGlvbih0KXtsZXQgZT10LmdyYW51bGFyaXR5LG49dC5wb3NpdGlvbnMsbz10LmVsbGlwc29pZCxyPXQud2lkdGgvMixpPXQuY29ybmVyVHlwZSxzPXQuc2F2ZUF0dHJpYnV0ZXMsZj1yTyx1PWlPLGM9c08sbD1jRixwPWFGLGQ9ZkYsaD11RixfPWxGLGc9cEYsYj1kRix3PVtdLE89cz9bXTp2b2lkIDAsRT1zP1tdOnZvaWQgMCxUPW5bMF0seD1uWzFdO3U9YS5ub3JtYWxpemUoYS5zdWJ0cmFjdCh4LFQsdSksdSksZj1vLmdlb2RldGljU3VyZmFjZU5vcm1hbChULGYpLGw9YS5ub3JtYWxpemUoYS5jcm9zcyhmLHUsbCksbCkscyYmKE8ucHVzaChsLngsbC55LGwueiksRS5wdXNoKGYueCxmLnksZi56KSksaD1hLmNsb25lKFQsaCksVD14LGM9YS5uZWdhdGUodSxjKTtsZXQgTSxOPVtdLEYsST1uLmxlbmd0aDtmb3IoRj0xO0Y8SS0xO0YrKyl7Zj1vLmdlb2RldGljU3VyZmFjZU5vcm1hbChULGYpLHg9bltGKzFdLHU9YS5ub3JtYWxpemUoYS5zdWJ0cmFjdCh4LFQsdSksdSk7bGV0IEI9YS5tdWx0aXBseUJ5U2NhbGFyKGYsYS5kb3QodSxmKSxoRik7YS5zdWJ0cmFjdCh1LEIsQiksYS5ub3JtYWxpemUoQixCKTtsZXQgQT1hLm11bHRpcGx5QnlTY2FsYXIoZixhLmRvdChjLGYpLF9GKTtpZihhLnN1YnRyYWN0KGMsQSxBKSxhLm5vcm1hbGl6ZShBLEEpLCFQLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMoYS5kb3QoQixBKSksMSxQLkVQU0lMT043KSl7cD1hLm5vcm1hbGl6ZShhLmFkZCh1LGMscCkscCkscD1hLmNyb3NzKHAsZixwKSxwPWEuY3Jvc3MoZixwLHApLHA9YS5ub3JtYWxpemUocCxwKTtsZXQgQz1yL01hdGgubWF4KC4yNSxhLm1hZ25pdHVkZShhLmNyb3NzKHAsYyxiYSkpKSxMPV9zLmFuZ2xlSXNHcmVhdGVyVGhhblBpKHUsYyxULG8pO3A9YS5tdWx0aXBseUJ5U2NhbGFyKHAsQyxwKSxMPyhfPWEuYWRkKFQscCxfKSxiPWEuYWRkKF8sYS5tdWx0aXBseUJ5U2NhbGFyKGwscixiKSxiKSxnPWEuYWRkKF8sYS5tdWx0aXBseUJ5U2NhbGFyKGwscioyLGcpLGcpLGtvWzBdPWEuY2xvbmUoaCxrb1swXSksa29bMV09YS5jbG9uZShiLGtvWzFdKSxNPUFuLmdlbmVyYXRlQXJjKHtwb3NpdGlvbnM6a28sZ3JhbnVsYXJpdHk6ZSxlbGxpcHNvaWQ6b30pLHc9bl8oTSxsLHIsdykscyYmKE8ucHVzaChsLngsbC55LGwueiksRS5wdXNoKGYueCxmLnksZi56KSksZD1hLmNsb25lKGcsZCksbD1hLm5vcm1hbGl6ZShhLmNyb3NzKGYsdSxsKSxsKSxnPWEuYWRkKF8sYS5tdWx0aXBseUJ5U2NhbGFyKGwscioyLGcpLGcpLGg9YS5hZGQoXyxhLm11bHRpcGx5QnlTY2FsYXIobCxyLGgpLGgpLGk9PT1mbi5ST1VOREVEfHxpPT09Zm4uQkVWRUxFRD9OLnB1c2goe2xlZnRQb3NpdGlvbnM6Z2QoXyxkLGcsaSxMKX0pOk4ucHVzaCh7bGVmdFBvc2l0aW9uczpuTyhULGEubmVnYXRlKHAscCksZyxMKX0pKTooZz1hLmFkZChULHAsZyksYj1hLmFkZChnLGEubmVnYXRlKGEubXVsdGlwbHlCeVNjYWxhcihsLHIsYiksYiksYiksXz1hLmFkZChnLGEubmVnYXRlKGEubXVsdGlwbHlCeVNjYWxhcihsLHIqMixfKSxfKSxfKSxrb1swXT1hLmNsb25lKGgsa29bMF0pLGtvWzFdPWEuY2xvbmUoYixrb1sxXSksTT1Bbi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOmtvLGdyYW51bGFyaXR5OmUsZWxsaXBzb2lkOm99KSx3PW5fKE0sbCxyLHcpLHMmJihPLnB1c2gobC54LGwueSxsLnopLEUucHVzaChmLngsZi55LGYueikpLGQ9YS5jbG9uZShfLGQpLGw9YS5ub3JtYWxpemUoYS5jcm9zcyhmLHUsbCksbCksXz1hLmFkZChnLGEubmVnYXRlKGEubXVsdGlwbHlCeVNjYWxhcihsLHIqMixfKSxfKSxfKSxoPWEuYWRkKGcsYS5uZWdhdGUoYS5tdWx0aXBseUJ5U2NhbGFyKGwscixoKSxoKSxoKSxpPT09Zm4uUk9VTkRFRHx8aT09PWZuLkJFVkVMRUQ/Ti5wdXNoKHtyaWdodFBvc2l0aW9uczpnZChnLGQsXyxpLEwpfSk6Ti5wdXNoKHtyaWdodFBvc2l0aW9uczpuTyhULHAsXyxMKX0pKSxjPWEubmVnYXRlKHUsYyl9VD14fWY9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoVCxmKSxrb1swXT1hLmNsb25lKGgsa29bMF0pLGtvWzFdPWEuY2xvbmUoVCxrb1sxXSksTT1Bbi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOmtvLGdyYW51bGFyaXR5OmUsZWxsaXBzb2lkOm99KSx3PW5fKE0sbCxyLHcpLHMmJihPLnB1c2gobC54LGwueSxsLnopLEUucHVzaChmLngsZi55LGYueikpO2xldCB2O3JldHVybiBpPT09Zm4uUk9VTkRFRCYmKHY9bUYodykpLHtwb3NpdGlvbnM6dyxjb3JuZXJzOk4sbGVmdHM6Tyxub3JtYWxzOkUsZW5kUG9zaXRpb25zOnZ9fTtLZT1vX30pO2Z1bmN0aW9uIHBPKHQsZSl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT1lLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodFtuXSx0W25dKTtyZXR1cm4gdH1mdW5jdGlvbiBXcih0LGUsbixvLHIsaSl7bGV0IHM9dC5ub3JtYWxzLGY9dC50YW5nZW50cyx1PXQuYml0YW5nZW50cyxjPWEubm9ybWFsaXplKGEuY3Jvc3MobixlLHlzKSx5cyk7aS5ub3JtYWwmJktlLmFkZEF0dHJpYnV0ZShzLGUsbyxyKSxpLnRhbmdlbnQmJktlLmFkZEF0dHJpYnV0ZShmLGMsbyxyKSxpLmJpdGFuZ2VudCYmS2UuYWRkQXR0cmlidXRlKHUsbixvLHIpfWZ1bmN0aW9uIGRPKHQsZSxuKXtsZXQgbz10LnBvc2l0aW9ucyxyPXQuY29ybmVycyxpPXQuZW5kUG9zaXRpb25zLHM9dC5sZWZ0cyxmPXQubm9ybWFscyx1PW5ldyBpZSxjLGw9MCxwPTAsZCxoPTAsXztmb3IoZD0wO2Q8by5sZW5ndGg7ZCs9MilfPW9bZF0ubGVuZ3RoLTMsbCs9XyxoKz1fKjIscCs9b1tkKzFdLmxlbmd0aC0zO2ZvcihsKz0zLHArPTMsZD0wO2Q8ci5sZW5ndGg7ZCsrKXtjPXJbZF07bGV0IG90PXJbZF0ubGVmdFBvc2l0aW9uczttKG90KT8oXz1vdC5sZW5ndGgsbCs9XyxoKz1fKTooXz1yW2RdLnJpZ2h0UG9zaXRpb25zLmxlbmd0aCxwKz1fLGgrPV8pfWxldCBnPW0oaSksYjtnJiYoYj1pWzBdLmxlbmd0aC0zLGwrPWIscCs9YixiLz0zLGgrPWIqNik7bGV0IHc9bCtwLE89bmV3IEZsb2F0NjRBcnJheSh3KSxFPWUubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkodyk6dm9pZCAwLFQ9ZS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkodyk6dm9pZCAwLHg9ZS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheSh3KTp2b2lkIDAsTT17bm9ybWFsczpFLHRhbmdlbnRzOlQsYml0YW5nZW50czp4fSxOPTAsRj13LTEsSSx2LEIsQSxTPWZPLEM9dU8sTCx6LGo9Yi8yLGs9THQuY3JlYXRlVHlwZWRBcnJheSh3LzMsaCkscT0wO2lmKGcpe3o9QWQsTD1iZDtsZXQgb3Q9aVswXTtmb3IoUz1hLmZyb21BcnJheShmLDAsUyksQz1hLmZyb21BcnJheShzLDAsQyksZD0wO2Q8ajtkKyspej1hLmZyb21BcnJheShvdCwoai0xLWQpKjMseiksTD1hLmZyb21BcnJheShvdCwoaitkKSozLEwpLEtlLmFkZEF0dHJpYnV0ZShPLEwsTiksS2UuYWRkQXR0cmlidXRlKE8seix2b2lkIDAsRiksV3IoTSxTLEMsTixGLGUpLHY9Ti8zLEE9disxLEk9KEYtMikvMyxCPUktMSxrW3ErK109SSxrW3ErK109dixrW3ErK109QixrW3ErK109QixrW3ErK109dixrW3ErK109QSxOKz0zLEYtPTN9bGV0IFc9MCxSPTAsbnQ9b1tXKytdLGF0PW9bVysrXTtPLnNldChudCxOKSxPLnNldChhdCxGLWF0Lmxlbmd0aCsxKSxDPWEuZnJvbUFycmF5KHMsUixDKTtsZXQgbHQsX3Q7Zm9yKF89YXQubGVuZ3RoLTMsZD0wO2Q8XztkKz0zKWx0PW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGEuZnJvbUFycmF5KG50LGQseXMpLHlzKSxfdD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChhLmZyb21BcnJheShhdCxfLWQsd2EpLHdhKSxTPWEubm9ybWFsaXplKGEuYWRkKGx0LF90LFMpLFMpLFdyKE0sUyxDLE4sRixlKSx2PU4vMyxBPXYrMSxJPShGLTIpLzMsQj1JLTEsa1txKytdPUksa1txKytdPXYsa1txKytdPUIsa1txKytdPUIsa1txKytdPXYsa1txKytdPUEsTis9MyxGLT0zO2ZvcihsdD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChhLmZyb21BcnJheShudCxfLHlzKSx5cyksX3Q9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkoYXQsXyx3YSksd2EpLFM9YS5ub3JtYWxpemUoYS5hZGQobHQsX3QsUyksUyksUis9MyxkPTA7ZDxyLmxlbmd0aDtkKyspe2xldCBvdDtjPXJbZF07bGV0IFB0PWMubGVmdFBvc2l0aW9ucyxndD1jLnJpZ2h0UG9zaXRpb25zLFJ0LGR0LHJ0PWxPLHh0PUFkLEd0PWJkO2lmKFM9YS5mcm9tQXJyYXkoZixSLFMpLG0oUHQpKXtmb3IoV3IoTSxTLEMsdm9pZCAwLEYsZSksRi09MyxSdD1BLGR0PUIsb3Q9MDtvdDxQdC5sZW5ndGgvMztvdCsrKXJ0PWEuZnJvbUFycmF5KFB0LG90KjMscnQpLGtbcSsrXT1SdCxrW3ErK109ZHQtb3QtMSxrW3ErK109ZHQtb3QsS2UuYWRkQXR0cmlidXRlKE8scnQsdm9pZCAwLEYpLHh0PWEuZnJvbUFycmF5KE8sKGR0LW90LTEpKjMseHQpLEd0PWEuZnJvbUFycmF5KE8sUnQqMyxHdCksQz1hLm5vcm1hbGl6ZShhLnN1YnRyYWN0KHh0LEd0LEMpLEMpLFdyKE0sUyxDLHZvaWQgMCxGLGUpLEYtPTM7cnQ9YS5mcm9tQXJyYXkoTyxSdCozLHJ0KSx4dD1hLnN1YnRyYWN0KGEuZnJvbUFycmF5KE8sZHQqMyx4dCkscnQseHQpLEd0PWEuc3VidHJhY3QoYS5mcm9tQXJyYXkoTywoZHQtb3QpKjMsR3QpLHJ0LEd0KSxDPWEubm9ybWFsaXplKGEuYWRkKHh0LEd0LEMpLEMpLFdyKE0sUyxDLE4sdm9pZCAwLGUpLE4rPTN9ZWxzZXtmb3IoV3IoTSxTLEMsTix2b2lkIDAsZSksTis9MyxSdD1CLGR0PUEsb3Q9MDtvdDxndC5sZW5ndGgvMztvdCsrKXJ0PWEuZnJvbUFycmF5KGd0LG90KjMscnQpLGtbcSsrXT1SdCxrW3ErK109ZHQrb3Qsa1txKytdPWR0K290KzEsS2UuYWRkQXR0cmlidXRlKE8scnQsTikseHQ9YS5mcm9tQXJyYXkoTyxSdCozLHh0KSxHdD1hLmZyb21BcnJheShPLChkdCtvdCkqMyxHdCksQz1hLm5vcm1hbGl6ZShhLnN1YnRyYWN0KHh0LEd0LEMpLEMpLFdyKE0sUyxDLE4sdm9pZCAwLGUpLE4rPTM7cnQ9YS5mcm9tQXJyYXkoTyxSdCozLHJ0KSx4dD1hLnN1YnRyYWN0KGEuZnJvbUFycmF5KE8sKGR0K290KSozLHh0KSxydCx4dCksR3Q9YS5zdWJ0cmFjdChhLmZyb21BcnJheShPLGR0KjMsR3QpLHJ0LEd0KSxDPWEubm9ybWFsaXplKGEubmVnYXRlKGEuYWRkKEd0LHh0LEMpLEMpLEMpLFdyKE0sUyxDLHZvaWQgMCxGLGUpLEYtPTN9Zm9yKG50PW9bVysrXSxhdD1vW1crK10sbnQuc3BsaWNlKDAsMyksYXQuc3BsaWNlKGF0Lmxlbmd0aC0zLDMpLE8uc2V0KG50LE4pLE8uc2V0KGF0LEYtYXQubGVuZ3RoKzEpLF89YXQubGVuZ3RoLTMsUis9MyxDPWEuZnJvbUFycmF5KHMsUixDKSxvdD0wO290PGF0Lmxlbmd0aDtvdCs9MylsdD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChhLmZyb21BcnJheShudCxvdCx5cykseXMpLF90PW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGEuZnJvbUFycmF5KGF0LF8tb3Qsd2EpLHdhKSxTPWEubm9ybWFsaXplKGEuYWRkKGx0LF90LFMpLFMpLFdyKE0sUyxDLE4sRixlKSxBPU4vMyx2PUEtMSxCPShGLTIpLzMsST1CKzEsa1txKytdPUksa1txKytdPXYsa1txKytdPUIsa1txKytdPUIsa1txKytdPXYsa1txKytdPUEsTis9MyxGLT0zO04tPTMsRis9M31pZihTPWEuZnJvbUFycmF5KGYsZi5sZW5ndGgtMyxTKSxXcihNLFMsQyxOLEYsZSksZyl7Tis9MyxGLT0zLHo9QWQsTD1iZDtsZXQgb3Q9aVsxXTtmb3IoZD0wO2Q8ajtkKyspej1hLmZyb21BcnJheShvdCwoYi1kLTEpKjMseiksTD1hLmZyb21BcnJheShvdCxkKjMsTCksS2UuYWRkQXR0cmlidXRlKE8seix2b2lkIDAsRiksS2UuYWRkQXR0cmlidXRlKE8sTCxOKSxXcihNLFMsQyxOLEYsZSksQT1OLzMsdj1BLTEsQj0oRi0yKS8zLEk9QisxLGtbcSsrXT1JLGtbcSsrXT12LGtbcSsrXT1CLGtbcSsrXT1CLGtbcSsrXT12LGtbcSsrXT1BLE4rPTMsRi09M31pZih1LnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6T30pLGUuc3Qpe2xldCBvdD1uZXcgRmxvYXQzMkFycmF5KHcvMyoyKSxQdCxndCxSdD0wO2lmKGcpe2wvPTMscC89MztsZXQgZHQ9TWF0aC5QSS8oYisxKTtndD0xLyhsLWIrMSksUHQ9MS8ocC1iKzEpO2xldCBydCx4dD1iLzI7Zm9yKGQ9eHQrMTtkPGIrMTtkKyspcnQ9UC5QSV9PVkVSX1RXTytkdCpkLG90W1J0KytdPVB0KigxK01hdGguY29zKHJ0KSksb3RbUnQrK109LjUqKDErTWF0aC5zaW4ocnQpKTtmb3IoZD0xO2Q8cC1iKzE7ZCsrKW90W1J0KytdPWQqUHQsb3RbUnQrK109MDtmb3IoZD1iO2Q+eHQ7ZC0tKXJ0PVAuUElfT1ZFUl9UV08tZCpkdCxvdFtSdCsrXT0xLVB0KigxK01hdGguY29zKHJ0KSksb3RbUnQrK109LjUqKDErTWF0aC5zaW4ocnQpKTtmb3IoZD14dDtkPjA7ZC0tKXJ0PVAuUElfT1ZFUl9UV08tZHQqZCxvdFtSdCsrXT0xLWd0KigxK01hdGguY29zKHJ0KSksb3RbUnQrK109LjUqKDErTWF0aC5zaW4ocnQpKTtmb3IoZD1sLWI7ZD4wO2QtLSlvdFtSdCsrXT1kKmd0LG90W1J0KytdPTE7Zm9yKGQ9MTtkPHh0KzE7ZCsrKXJ0PVAuUElfT1ZFUl9UV08rZHQqZCxvdFtSdCsrXT1ndCooMStNYXRoLmNvcyhydCkpLG90W1J0KytdPS41KigxK01hdGguc2luKHJ0KSl9ZWxzZXtmb3IobC89MyxwLz0zLGd0PTEvKGwtMSksUHQ9MS8ocC0xKSxkPTA7ZDxwO2QrKylvdFtSdCsrXT1kKlB0LG90W1J0KytdPTA7Zm9yKGQ9bDtkPjA7ZC0tKW90W1J0KytdPShkLTEpKmd0LG90W1J0KytdPTF9dS5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6b3R9KX1yZXR1cm4gZS5ub3JtYWwmJih1Lm5vcm1hbD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6TS5ub3JtYWxzfSkpLGUudGFuZ2VudCYmKHUudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6TS50YW5nZW50c30pKSxlLmJpdGFuZ2VudCYmKHUuYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpNLmJpdGFuZ2VudHN9KSkse2F0dHJpYnV0ZXM6dSxpbmRpY2VzOmt9fWZ1bmN0aW9uIGdGKHQsZSl7aWYoIWUubm9ybWFsJiYhZS50YW5nZW50JiYhZS5iaXRhbmdlbnQmJiFlLnN0KXJldHVybiB0O2xldCBuPXQucG9zaXRpb24udmFsdWVzLG8scjsoZS5ub3JtYWx8fGUuYml0YW5nZW50KSYmKG89dC5ub3JtYWwudmFsdWVzLHI9dC5iaXRhbmdlbnQudmFsdWVzKTtsZXQgaT10LnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMTgscz1pKjMsZj1pKjIsdT1zKjIsYztpZihlLm5vcm1hbHx8ZS5iaXRhbmdlbnR8fGUudGFuZ2VudCl7bGV0IGw9ZS5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShzKjYpOnZvaWQgMCxwPWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHMqNik6dm9pZCAwLGQ9ZS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShzKjYpOnZvaWQgMCxoPWZPLF89dU8sZz1BZCxiPWJkLHc9eUYsTz1sTyxFPXU7Zm9yKGM9MDtjPHM7Yys9Myl7bGV0IFQ9RSt1O2g9YS5mcm9tQXJyYXkobixjLGgpLF89YS5mcm9tQXJyYXkobixjK3MsXyksZz1hLmZyb21BcnJheShuLChjKzMpJXMsZyksXz1hLnN1YnRyYWN0KF8saCxfKSxnPWEuc3VidHJhY3QoZyxoLGcpLGI9YS5ub3JtYWxpemUoYS5jcm9zcyhfLGcsYiksYiksZS5ub3JtYWwmJihLZS5hZGRBdHRyaWJ1dGUobCxiLFQpLEtlLmFkZEF0dHJpYnV0ZShsLGIsVCszKSxLZS5hZGRBdHRyaWJ1dGUobCxiLEUpLEtlLmFkZEF0dHJpYnV0ZShsLGIsRSszKSksKGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpJiYoTz1hLmZyb21BcnJheShvLGMsTyksZS5iaXRhbmdlbnQmJihLZS5hZGRBdHRyaWJ1dGUoZCxPLFQpLEtlLmFkZEF0dHJpYnV0ZShkLE8sVCszKSxLZS5hZGRBdHRyaWJ1dGUoZCxPLEUpLEtlLmFkZEF0dHJpYnV0ZShkLE8sRSszKSksZS50YW5nZW50JiYodz1hLm5vcm1hbGl6ZShhLmNyb3NzKE8sYix3KSx3KSxLZS5hZGRBdHRyaWJ1dGUocCx3LFQpLEtlLmFkZEF0dHJpYnV0ZShwLHcsVCszKSxLZS5hZGRBdHRyaWJ1dGUocCx3LEUpLEtlLmFkZEF0dHJpYnV0ZShwLHcsRSszKSkpLEUrPTZ9aWYoZS5ub3JtYWwpe2ZvcihsLnNldChvKSxjPTA7YzxzO2MrPTMpbFtjK3NdPS1vW2NdLGxbYytzKzFdPS1vW2MrMV0sbFtjK3MrMl09LW9bYysyXTt0Lm5vcm1hbC52YWx1ZXM9bH1lbHNlIHQubm9ybWFsPXZvaWQgMDtpZihlLmJpdGFuZ2VudD8oZC5zZXQociksZC5zZXQocixzKSx0LmJpdGFuZ2VudC52YWx1ZXM9ZCk6dC5iaXRhbmdlbnQ9dm9pZCAwLGUudGFuZ2VudCl7bGV0IFQ9dC50YW5nZW50LnZhbHVlcztwLnNldChUKSxwLnNldChULHMpLHQudGFuZ2VudC52YWx1ZXM9cH19aWYoZS5zdCl7bGV0IGw9dC5zdC52YWx1ZXMscD1uZXcgRmxvYXQzMkFycmF5KGYqNik7cC5zZXQobCkscC5zZXQobCxmKTtsZXQgZD1mKjI7Zm9yKGxldCBoPTA7aDwyO2grKyl7Zm9yKHBbZCsrXT1sWzBdLHBbZCsrXT1sWzFdLGM9MjtjPGY7Yys9Mil7bGV0IF89bFtjXSxnPWxbYysxXTtwW2QrK109XyxwW2QrK109ZyxwW2QrK109XyxwW2QrK109Z31wW2QrK109bFswXSxwW2QrK109bFsxXX10LnN0LnZhbHVlcz1wfXJldHVybiB0fWZ1bmN0aW9uIGlfKHQsZSxuKXtuW2UrK109dFswXSxuW2UrK109dFsxXSxuW2UrK109dFsyXTtmb3IobGV0IG89MztvPHQubGVuZ3RoO28rPTMpe2xldCByPXRbb10saT10W28rMV0scz10W28rMl07bltlKytdPXIsbltlKytdPWksbltlKytdPXMsbltlKytdPXIsbltlKytdPWksbltlKytdPXN9cmV0dXJuIG5bZSsrXT10WzBdLG5bZSsrXT10WzFdLG5bZSsrXT10WzJdLG59ZnVuY3Rpb24gQUYodCxlKXtsZXQgbj1uZXcgcHQoe3Bvc2l0aW9uOmUucG9zaXRpb24sbm9ybWFsOmUubm9ybWFsfHxlLmJpdGFuZ2VudHx8dC5zaGFkb3dWb2x1bWUsdGFuZ2VudDplLnRhbmdlbnQsYml0YW5nZW50OmUubm9ybWFsfHxlLmJpdGFuZ2VudCxzdDplLnN0fSksbz10LmVsbGlwc29pZCxyPUtlLmNvbXB1dGVQb3NpdGlvbnModCksaT1kTyhyLG4sbykscz10LmhlaWdodCxmPXQuZXh0cnVkZWRIZWlnaHQsdT1pLmF0dHJpYnV0ZXMsYz1pLmluZGljZXMsbD11LnBvc2l0aW9uLnZhbHVlcyxwPWwubGVuZ3RoLGQ9bmV3IEZsb2F0NjRBcnJheShwKjYpLGg9bmV3IEZsb2F0NjRBcnJheShwKTtoLnNldChsKTtsZXQgXz1uZXcgRmxvYXQ2NEFycmF5KHAqNCk7bD1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQobCxzLG8pLF89aV8obCwwLF8pLGg9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGgsZixvKSxfPWlfKGgscCoyLF8pLGQuc2V0KGwpLGQuc2V0KGgscCksZC5zZXQoXyxwKjIpLHUucG9zaXRpb24udmFsdWVzPWQsdT1nRih1LGUpO2xldCBnLGI9cC8zO2lmKHQuc2hhZG93Vm9sdW1lKXtsZXQgST11Lm5vcm1hbC52YWx1ZXM7cD1JLmxlbmd0aDtsZXQgdj1uZXcgRmxvYXQzMkFycmF5KHAqNik7Zm9yKGc9MDtnPHA7ZysrKUlbZ109LUlbZ107di5zZXQoSSxwKSx2PWlfKEkscCo0LHYpLHUuZXh0cnVkZURpcmVjdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6dn0pLGUubm9ybWFsfHwodS5ub3JtYWw9dm9pZCAwKX1pZihtKHQub2Zmc2V0QXR0cmlidXRlKSl7bGV0IEk9bmV3IFVpbnQ4QXJyYXkoYio2KTtpZih0Lm9mZnNldEF0dHJpYnV0ZT09PWFlLlRPUClJPUkuZmlsbCgxLDAsYikuZmlsbCgxLGIqMixiKjQpO2Vsc2V7bGV0IHY9dC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MTtJPUkuZmlsbCh2KX11LmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOkl9KX1sZXQgdz1jLmxlbmd0aCxPPWIrYixFPUx0LmNyZWF0ZVR5cGVkQXJyYXkoZC5sZW5ndGgvMyx3KjIrTyozKTtFLnNldChjKTtsZXQgVD13O2ZvcihnPTA7Zzx3O2crPTMpe2xldCBJPWNbZ10sdj1jW2crMV0sQj1jW2crMl07RVtUKytdPUIrYixFW1QrK109ditiLEVbVCsrXT1JK2J9bGV0IHgsTSxOLEY7Zm9yKGc9MDtnPE87Zys9Mil4PWcrTyxNPXgrTyxOPXgrMSxGPU0rMSxFW1QrK109eCxFW1QrK109TSxFW1QrK109TixFW1QrK109TixFW1QrK109TSxFW1QrK109RjtyZXR1cm57YXR0cmlidXRlczp1LGluZGljZXM6RX19ZnVuY3Rpb24gYU8odCxlLG4sbyxyLGkpe2xldCBzPWEuc3VidHJhY3QoZSx0LGNPKTthLm5vcm1hbGl6ZShzLHMpO2xldCBmPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHQsemYpLHU9YS5jcm9zcyhzLGYsY08pO2EubXVsdGlwbHlCeVNjYWxhcih1LG8sdSk7bGV0IGM9ci5sYXRpdHVkZSxsPXIubG9uZ2l0dWRlLHA9aS5sYXRpdHVkZSxkPWkubG9uZ2l0dWRlO2EuYWRkKHQsdSx6Ziksbi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh6ZixPcik7bGV0IGg9T3IubGF0aXR1ZGUsXz1Pci5sb25naXR1ZGU7Yz1NYXRoLm1pbihjLGgpLGw9TWF0aC5taW4obCxfKSxwPU1hdGgubWF4KHAsaCksZD1NYXRoLm1heChkLF8pLGEuc3VidHJhY3QodCx1LHpmKSxuLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHpmLE9yKSxoPU9yLmxhdGl0dWRlLF89T3IubG9uZ2l0dWRlLGM9TWF0aC5taW4oYyxoKSxsPU1hdGgubWluKGwsXykscD1NYXRoLm1heChwLGgpLGQ9TWF0aC5tYXgoZCxfKSxyLmxhdGl0dWRlPWMsci5sb25naXR1ZGU9bCxpLmxhdGl0dWRlPXAsaS5sb25naXR1ZGU9ZH1mdW5jdGlvbiBtTyh0LGUsbixvLHIpe3Q9cE8odCxlKTtsZXQgaT1Dbih0LGEuZXF1YWxzRXBzaWxvbikscz1pLmxlbmd0aDtpZihzPDJ8fG48PTApcmV0dXJuIG5ldyBOdDtsZXQgZj1uKi41O3RyLmxhdGl0dWRlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx0ci5sb25naXR1ZGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGVyLmxhdGl0dWRlPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxlci5sb25naXR1ZGU9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2xldCB1LGM7aWYobz09PWZuLlJPVU5ERUQpe2xldCBkPWlbMF07YS5zdWJ0cmFjdChkLGlbMV0sVHIpLGEubm9ybWFsaXplKFRyLFRyKSxhLm11bHRpcGx5QnlTY2FsYXIoVHIsZixUciksYS5hZGQoZCxUcixqZiksZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhqZixPciksdT1Pci5sYXRpdHVkZSxjPU9yLmxvbmdpdHVkZSx0ci5sYXRpdHVkZT1NYXRoLm1pbih0ci5sYXRpdHVkZSx1KSx0ci5sb25naXR1ZGU9TWF0aC5taW4odHIubG9uZ2l0dWRlLGMpLGVyLmxhdGl0dWRlPU1hdGgubWF4KGVyLmxhdGl0dWRlLHUpLGVyLmxvbmdpdHVkZT1NYXRoLm1heChlci5sb25naXR1ZGUsYyl9Zm9yKGxldCBkPTA7ZDxzLTE7KytkKWFPKGlbZF0saVtkKzFdLGUsZix0cixlcik7bGV0IGw9aVtzLTFdO2Euc3VidHJhY3QobCxpW3MtMl0sVHIpLGEubm9ybWFsaXplKFRyLFRyKSxhLm11bHRpcGx5QnlTY2FsYXIoVHIsZixUciksYS5hZGQobCxUcixqZiksYU8obCxqZixlLGYsdHIsZXIpLG89PT1mbi5ST1VOREVEJiYoZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhqZixPciksdT1Pci5sYXRpdHVkZSxjPU9yLmxvbmdpdHVkZSx0ci5sYXRpdHVkZT1NYXRoLm1pbih0ci5sYXRpdHVkZSx1KSx0ci5sb25naXR1ZGU9TWF0aC5taW4odHIubG9uZ2l0dWRlLGMpLGVyLmxhdGl0dWRlPU1hdGgubWF4KGVyLmxhdGl0dWRlLHUpLGVyLmxvbmdpdHVkZT1NYXRoLm1heChlci5sb25naXR1ZGUsYykpO2xldCBwPW0ocik/cjpuZXcgTnQ7cmV0dXJuIHAubm9ydGg9ZXIubGF0aXR1ZGUscC5zb3V0aD10ci5sYXRpdHVkZSxwLmVhc3Q9ZXIubG9uZ2l0dWRlLHAud2VzdD10ci5sb25naXR1ZGUscH1mdW5jdGlvbiBWaSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvc2l0aW9ucyxuPXQud2lkdGg7eS5kZWZpbmVkKCJvcHRpb25zLnBvc2l0aW9ucyIsZSkseS5kZWZpbmVkKCJvcHRpb25zLndpZHRoIixuKTtsZXQgbz10LmhlaWdodD8/MCxyPXQuZXh0cnVkZWRIZWlnaHQ/P287dGhpcy5fcG9zaXRpb25zPWUsdGhpcy5fZWxsaXBzb2lkPVkuY2xvbmUodC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCksdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHQudmVydGV4Rm9ybWF0Pz9wdC5ERUZBVUxUKSx0aGlzLl93aWR0aD1uLHRoaXMuX2hlaWdodD1NYXRoLm1heChvLHIpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKG8sciksdGhpcy5fY29ybmVyVHlwZT10LmNvcm5lclR5cGU/P2ZuLlJPVU5ERUQsdGhpcy5fZ3JhbnVsYXJpdHk9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUUsdGhpcy5fc2hhZG93Vm9sdW1lPXQuc2hhZG93Vm9sdW1lPz8hMSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3JyaWRvckdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fcmVjdGFuZ2xlPXZvaWQgMCx0aGlzLnBhY2tlZExlbmd0aD0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoK1kucGFja2VkTGVuZ3RoK3B0LnBhY2tlZExlbmd0aCs3fXZhciBmTyx1TyxBZCxiZCx5RixsTyx5cyx3YSxjTyx6ZixPcixUcixqZix0cixlcixoTyxfTyxHaSxzXyx5Tz0kKCgpPT57SHIoKTt2ZSgpO0R0KCk7SWUoKTtXdCgpO0RlKCk7X2MoKTtyXygpO3llKCk7ZnQoKTskdCgpO1llKCk7JGUoKTthbigpO0RvKCk7WmUoKTtLdCgpO0tyKCk7dG4oKTtUbigpO3hvKCk7Zk89bmV3IGEsdU89bmV3IGEsQWQ9bmV3IGEsYmQ9bmV3IGEseUY9bmV3IGEsbE89bmV3IGEseXM9bmV3IGEsd2E9bmV3IGE7Y089bmV3IGEsemY9bmV3IGEsT3I9bmV3IGN0O1RyPW5ldyBhLGpmPW5ldyBhLHRyPW5ldyBjdCxlcj1uZXcgY3Q7VmkucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wO2xldCBvPXQuX3Bvc2l0aW9ucyxyPW8ubGVuZ3RoO2VbbisrXT1yO2ZvcihsZXQgaT0wO2k8cjsrK2ksbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKG9baV0sZSxuKTtyZXR1cm4gWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLHB0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksbis9cHQucGFja2VkTGVuZ3RoLGVbbisrXT10Ll93aWR0aCxlW24rK109dC5faGVpZ2h0LGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fY29ybmVyVHlwZSxlW24rK109dC5fZ3JhbnVsYXJpdHksZVtuKytdPXQuX3NoYWRvd1ZvbHVtZT8xOjAsZVtuXT10Ll9vZmZzZXRBdHRyaWJ1dGU/Py0xLGV9O2hPPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksX089bmV3IHB0LEdpPXtwb3NpdGlvbnM6dm9pZCAwLGVsbGlwc29pZDpoTyx2ZXJ0ZXhGb3JtYXQ6X08sd2lkdGg6dm9pZCAwLGhlaWdodDp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLGNvcm5lclR5cGU6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxzaGFkb3dWb2x1bWU6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O1ZpLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wO2xldCBvPXRbZSsrXSxyPW5ldyBBcnJheShvKTtmb3IobGV0IF89MDtfPG87KytfLGUrPWEucGFja2VkTGVuZ3RoKXJbX109YS51bnBhY2sodCxlKTtsZXQgaT1ZLnVucGFjayh0LGUsaE8pO2UrPVkucGFja2VkTGVuZ3RoO2xldCBzPXB0LnVucGFjayh0LGUsX08pO2UrPXB0LnBhY2tlZExlbmd0aDtsZXQgZj10W2UrK10sdT10W2UrK10sYz10W2UrK10sbD10W2UrK10scD10W2UrK10sZD10W2UrK109PT0xLGg9dFtlXTtyZXR1cm4gbShuKT8obi5fcG9zaXRpb25zPXIsbi5fZWxsaXBzb2lkPVkuY2xvbmUoaSxuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShzLG4uX3ZlcnRleEZvcm1hdCksbi5fd2lkdGg9ZixuLl9oZWlnaHQ9dSxuLl9leHRydWRlZEhlaWdodD1jLG4uX2Nvcm5lclR5cGU9bCxuLl9ncmFudWxhcml0eT1wLG4uX3NoYWRvd1ZvbHVtZT1kLG4uX29mZnNldEF0dHJpYnV0ZT1oPT09LTE/dm9pZCAwOmgsbik6KEdpLnBvc2l0aW9ucz1yLEdpLndpZHRoPWYsR2kuaGVpZ2h0PXUsR2kuZXh0cnVkZWRIZWlnaHQ9YyxHaS5jb3JuZXJUeXBlPWwsR2kuZ3JhbnVsYXJpdHk9cCxHaS5zaGFkb3dWb2x1bWU9ZCxHaS5vZmZzZXRBdHRyaWJ1dGU9aD09PS0xP3ZvaWQgMDpoLG5ldyBWaShHaSkpfTtWaS5jb21wdXRlUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IG49dC5wb3NpdGlvbnMsbz10LndpZHRoO3kuZGVmaW5lZCgib3B0aW9ucy5wb3NpdGlvbnMiLG4pLHkuZGVmaW5lZCgib3B0aW9ucy53aWR0aCIsbyk7bGV0IHI9dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCxpPXQuY29ybmVyVHlwZT8/Zm4uUk9VTkRFRDtyZXR1cm4gbU8obixyLG8saSxlKX07VmkuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcG9zaXRpb25zLG49dC5fd2lkdGgsbz10Ll9lbGxpcHNvaWQ7ZT1wTyhlLG8pO2xldCByPUNuKGUsYS5lcXVhbHNFcHNpbG9uKTtpZihyLmxlbmd0aDwyfHxuPD0wKXJldHVybjtsZXQgaT10Ll9oZWlnaHQscz10Ll9leHRydWRlZEhlaWdodCxmPSFQLmVxdWFsc0Vwc2lsb24oaSxzLDAsUC5FUFNJTE9OMiksdT10Ll92ZXJ0ZXhGb3JtYXQsYz17ZWxsaXBzb2lkOm8scG9zaXRpb25zOnIsd2lkdGg6bixjb3JuZXJUeXBlOnQuX2Nvcm5lclR5cGUsZ3JhbnVsYXJpdHk6dC5fZ3JhbnVsYXJpdHksc2F2ZUF0dHJpYnV0ZXM6ITB9LGw7aWYoZiljLmhlaWdodD1pLGMuZXh0cnVkZWRIZWlnaHQ9cyxjLnNoYWRvd1ZvbHVtZT10Ll9zaGFkb3dWb2x1bWUsYy5vZmZzZXRBdHRyaWJ1dGU9dC5fb2Zmc2V0QXR0cmlidXRlLGw9QUYoYyx1KTtlbHNle2xldCBoPUtlLmNvbXB1dGVQb3NpdGlvbnMoYyk7aWYobD1kTyhoLHUsbyksbC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQobC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxpLG8pLG0odC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IF89dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsZz1sLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxiPW5ldyBVaW50OEFycmF5KGcvMykuZmlsbChfKTtsLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6Yn0pfX1sZXQgcD1sLmF0dHJpYnV0ZXMsZD1BdC5mcm9tVmVydGljZXMocC5wb3NpdGlvbi52YWx1ZXMsdm9pZCAwLDMpO3JldHVybiB1LnBvc2l0aW9ufHwobC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz12b2lkIDApLG5ldyBVdCh7YXR0cmlidXRlczpwLGluZGljZXM6bC5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6QnQuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOmQsb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtWaS5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQuX2dyYW51bGFyaXR5LHI9dC5fZWxsaXBzb2lkLGk9ZShvLHIpLHM9bihvLHIpO3JldHVybiBuZXcgVmkoe3Bvc2l0aW9uczp0Ll9wb3NpdGlvbnMsd2lkdGg6dC5fd2lkdGgsY29ybmVyVHlwZTp0Ll9jb3JuZXJUeXBlLGVsbGlwc29pZDpyLGdyYW51bGFyaXR5Om8sZXh0cnVkZWRIZWlnaHQ6aSxoZWlnaHQ6cyx2ZXJ0ZXhGb3JtYXQ6cHQuUE9TSVRJT05fT05MWSxzaGFkb3dWb2x1bWU6ITB9KX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVmkucHJvdG90eXBlLHtyZWN0YW5nbGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBtKHRoaXMuX3JlY3RhbmdsZSl8fCh0aGlzLl9yZWN0YW5nbGU9bU8odGhpcy5fcG9zaXRpb25zLHRoaXMuX2VsbGlwc29pZCx0aGlzLl93aWR0aCx0aGlzLl9jb3JuZXJUeXBlKSksdGhpcy5fcmVjdGFuZ2xlfX0sdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuWzAsMCwwLDEsMSwwXX19fSk7c189Vml9KTt2YXIgY189e307bGUoY18se2RlZmF1bHQ6KCk9PndGfSk7ZnVuY3Rpb24gYkYodCxlKXtyZXR1cm4gbShlKSYmKHQ9c18udW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksc18uY3JlYXRlR2VvbWV0cnkodCl9dmFyIHdGLGFfPSQoKCk9Pnt5TygpO2Z0KCk7JHQoKTt3Rj1iRn0pO2Z1bmN0aW9uIE9GKHQsZSl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT1lLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodFtuXSx0W25dKTtyZXR1cm4gdH1mdW5jdGlvbiBiTyh0LGUpe2xldCBuPVtdLG89dC5wb3NpdGlvbnMscj10LmNvcm5lcnMsaT10LmVuZFBvc2l0aW9ucyxzPW5ldyBpZSxmLHU9MCxjPTAsbCxwPTAsZDtmb3IobD0wO2w8by5sZW5ndGg7bCs9MilkPW9bbF0ubGVuZ3RoLTMsdSs9ZCxwKz1kLzMqNCxjKz1vW2wrMV0ubGVuZ3RoLTM7Zm9yKHUrPTMsYys9MyxsPTA7bDxyLmxlbmd0aDtsKyspe2Y9cltsXTtsZXQgTD1yW2xdLmxlZnRQb3NpdGlvbnM7bShMKT8oZD1MLmxlbmd0aCx1Kz1kLHArPWQvMyoyKTooZD1yW2xdLnJpZ2h0UG9zaXRpb25zLmxlbmd0aCxjKz1kLHArPWQvMyoyKX1sZXQgaD1tKGkpLF87aCYmKF89aVswXS5sZW5ndGgtMyx1Kz1fLGMrPV8sXy89MyxwKz1fKjQpO2xldCBnPXUrYyxiPW5ldyBGbG9hdDY0QXJyYXkoZyksdz0wLE89Zy0xLEUsVCx4LE0sTixGLEk9Xy8yLHY9THQuY3JlYXRlVHlwZWRBcnJheShnLzMscCs0KSxCPTA7aWYodltCKytdPXcvMyx2W0IrK109KE8tMikvMyxoKXtuLnB1c2gody8zKSxGPWdPLE49QU87bGV0IEw9aVswXTtmb3IobD0wO2w8STtsKyspRj1hLmZyb21BcnJheShMLChJLTEtbCkqMyxGKSxOPWEuZnJvbUFycmF5KEwsKEkrbCkqMyxOKSxLZS5hZGRBdHRyaWJ1dGUoYixOLHcpLEtlLmFkZEF0dHJpYnV0ZShiLEYsdm9pZCAwLE8pLFQ9dy8zLE09VCsxLEU9KE8tMikvMyx4PUUtMSx2W0IrK109RSx2W0IrK109eCx2W0IrK109VCx2W0IrK109TSx3Kz0zLE8tPTN9bGV0IEE9MCxTPW9bQSsrXSxDPW9bQSsrXTtmb3IoYi5zZXQoUyx3KSxiLnNldChDLE8tQy5sZW5ndGgrMSksZD1DLmxlbmd0aC0zLG4ucHVzaCh3LzMsKE8tMikvMyksbD0wO2w8ZDtsKz0zKVQ9dy8zLE09VCsxLEU9KE8tMikvMyx4PUUtMSx2W0IrK109RSx2W0IrK109eCx2W0IrK109VCx2W0IrK109TSx3Kz0zLE8tPTM7Zm9yKGw9MDtsPHIubGVuZ3RoO2wrKyl7bGV0IEw7Zj1yW2xdO2xldCB6PWYubGVmdFBvc2l0aW9ucyxqPWYucmlnaHRQb3NpdGlvbnMsayxxPVRGO2lmKG0oeikpe2ZvcihPLT0zLGs9eCxuLnB1c2goTSksTD0wO0w8ei5sZW5ndGgvMztMKyspcT1hLmZyb21BcnJheSh6LEwqMyxxKSx2W0IrK109ay1MLTEsdltCKytdPWstTCxLZS5hZGRBdHRyaWJ1dGUoYixxLHZvaWQgMCxPKSxPLT0zO24ucHVzaChrLU1hdGguZmxvb3Ioei5sZW5ndGgvNikpLGU9PT1mbi5CRVZFTEVEJiZuLnB1c2goKE8tMikvMysxKSx3Kz0zfWVsc2V7Zm9yKHcrPTMsaz1NLG4ucHVzaCh4KSxMPTA7TDxqLmxlbmd0aC8zO0wrKylxPWEuZnJvbUFycmF5KGosTCozLHEpLHZbQisrXT1rK0wsdltCKytdPWsrTCsxLEtlLmFkZEF0dHJpYnV0ZShiLHEsdyksdys9MztuLnB1c2goaytNYXRoLmZsb29yKGoubGVuZ3RoLzYpKSxlPT09Zm4uQkVWRUxFRCYmbi5wdXNoKHcvMy0xKSxPLT0zfWZvcihTPW9bQSsrXSxDPW9bQSsrXSxTLnNwbGljZSgwLDMpLEMuc3BsaWNlKEMubGVuZ3RoLTMsMyksYi5zZXQoUyx3KSxiLnNldChDLE8tQy5sZW5ndGgrMSksZD1DLmxlbmd0aC0zLEw9MDtMPEMubGVuZ3RoO0wrPTMpTT13LzMsVD1NLTEseD0oTy0yKS8zLEU9eCsxLHZbQisrXT1FLHZbQisrXT14LHZbQisrXT1ULHZbQisrXT1NLHcrPTMsTy09Mzt3LT0zLE8rPTMsbi5wdXNoKHcvMywoTy0yKS8zKX1pZihoKXt3Kz0zLE8tPTMsRj1nTyxOPUFPO2xldCBMPWlbMV07Zm9yKGw9MDtsPEk7bCsrKUY9YS5mcm9tQXJyYXkoTCwoXy1sLTEpKjMsRiksTj1hLmZyb21BcnJheShMLGwqMyxOKSxLZS5hZGRBdHRyaWJ1dGUoYixGLHZvaWQgMCxPKSxLZS5hZGRBdHRyaWJ1dGUoYixOLHcpLE09dy8zLFQ9TS0xLHg9KE8tMikvMyxFPXgrMSx2W0IrK109RSx2W0IrK109eCx2W0IrK109VCx2W0IrK109TSx3Kz0zLE8tPTM7bi5wdXNoKHcvMyl9ZWxzZSBuLnB1c2gody8zLChPLTIpLzMpO3JldHVybiB2W0IrK109dy8zLHZbQisrXT0oTy0yKS8zLHMucG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSkse2F0dHJpYnV0ZXM6cyxpbmRpY2VzOnYsd2FsbEluZGljZXM6bn19ZnVuY3Rpb24gRUYodCl7bGV0IGU9dC5lbGxpcHNvaWQsbj1LZS5jb21wdXRlUG9zaXRpb25zKHQpLG89Yk8obix0LmNvcm5lclR5cGUpLHI9by53YWxsSW5kaWNlcyxpPXQuaGVpZ2h0LHM9dC5leHRydWRlZEhlaWdodCxmPW8uYXR0cmlidXRlcyx1PW8uaW5kaWNlcyxjPWYucG9zaXRpb24udmFsdWVzLGw9Yy5sZW5ndGgscD1uZXcgRmxvYXQ2NEFycmF5KGwpO3Auc2V0KGMpO2xldCBkPW5ldyBGbG9hdDY0QXJyYXkobCoyKTtpZihjPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChjLGksZSkscD1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQocCxzLGUpLGQuc2V0KGMpLGQuc2V0KHAsbCksZi5wb3NpdGlvbi52YWx1ZXM9ZCxsLz0zLG0odC5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgRT1uZXcgVWludDhBcnJheShsKjIpO2lmKHQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKUU9RS5maWxsKDEsMCxsKTtlbHNle2xldCBUPXQub2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjE7RT1FLmZpbGwoVCl9Zi5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpFfSl9bGV0IGgsXz11Lmxlbmd0aCxnPUx0LmNyZWF0ZVR5cGVkQXJyYXkoZC5sZW5ndGgvMywoXytyLmxlbmd0aCkqMik7Zy5zZXQodSk7bGV0IGI9Xztmb3IoaD0wO2g8XztoKz0yKXtsZXQgRT11W2hdLFQ9dVtoKzFdO2dbYisrXT1FK2wsZ1tiKytdPVQrbH1sZXQgdyxPO2ZvcihoPTA7aDxyLmxlbmd0aDtoKyspdz1yW2hdLE89dytsLGdbYisrXT13LGdbYisrXT1PO3JldHVybnthdHRyaWJ1dGVzOmYsaW5kaWNlczpnfX1mdW5jdGlvbiBIZih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvc2l0aW9ucyxuPXQud2lkdGg7eS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLnBvc2l0aW9ucyIsZSkseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLndpZHRoIixuKTtsZXQgbz10LmhlaWdodD8/MCxyPXQuZXh0cnVkZWRIZWlnaHQ/P287dGhpcy5fcG9zaXRpb25zPWUsdGhpcy5fZWxsaXBzb2lkPVkuY2xvbmUodC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCksdGhpcy5fd2lkdGg9bix0aGlzLl9oZWlnaHQ9TWF0aC5tYXgobyxyKSx0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbihvLHIpLHRoaXMuX2Nvcm5lclR5cGU9dC5jb3JuZXJUeXBlPz9mbi5ST1VOREVELHRoaXMuX2dyYW51bGFyaXR5PXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3JyaWRvck91dGxpbmVHZW9tZXRyeSIsdGhpcy5wYWNrZWRMZW5ndGg9MStlLmxlbmd0aCphLnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCs2fXZhciBnTyxBTyxURix3TyxncyxmXyxUTz0kKCgpPT57SHIoKTt2ZSgpO0R0KCk7V3QoKTtEZSgpO19jKCk7cl8oKTt5ZSgpO2Z0KCk7JHQoKTtZZSgpOyRlKCk7YW4oKTtEbygpO1plKCk7S3QoKTtLcigpO3RuKCk7Z089bmV3IGEsQU89bmV3IGEsVEY9bmV3IGE7SGYucGFjaz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS50eXBlT2Yub2JqZWN0KCJhcnJheSIsZSksbj1uPz8wO2xldCBvPXQuX3Bvc2l0aW9ucyxyPW8ubGVuZ3RoO2VbbisrXT1yO2ZvcihsZXQgaT0wO2k8cjsrK2ksbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKG9baV0sZSxuKTtyZXR1cm4gWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLGVbbisrXT10Ll93aWR0aCxlW24rK109dC5faGVpZ2h0LGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fY29ybmVyVHlwZSxlW24rK109dC5fZ3JhbnVsYXJpdHksZVtuXT10Ll9vZmZzZXRBdHRyaWJ1dGU/Py0xLGV9O3dPPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksZ3M9e3Bvc2l0aW9uczp2b2lkIDAsZWxsaXBzb2lkOndPLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxjb3JuZXJUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07SGYudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89dFtlKytdLHI9bmV3IEFycmF5KG8pO2ZvcihsZXQgZD0wO2Q8bzsrK2QsZSs9YS5wYWNrZWRMZW5ndGgpcltkXT1hLnVucGFjayh0LGUpO2xldCBpPVkudW5wYWNrKHQsZSx3Tyk7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IHM9dFtlKytdLGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdLHA9dFtlXTtyZXR1cm4gbShuKT8obi5fcG9zaXRpb25zPXIsbi5fZWxsaXBzb2lkPVkuY2xvbmUoaSxuLl9lbGxpcHNvaWQpLG4uX3dpZHRoPXMsbi5faGVpZ2h0PWYsbi5fZXh0cnVkZWRIZWlnaHQ9dSxuLl9jb3JuZXJUeXBlPWMsbi5fZ3JhbnVsYXJpdHk9bCxuLl9vZmZzZXRBdHRyaWJ1dGU9cD09PS0xP3ZvaWQgMDpwLG4pOihncy5wb3NpdGlvbnM9cixncy53aWR0aD1zLGdzLmhlaWdodD1mLGdzLmV4dHJ1ZGVkSGVpZ2h0PXUsZ3MuY29ybmVyVHlwZT1jLGdzLmdyYW51bGFyaXR5PWwsZ3Mub2Zmc2V0QXR0cmlidXRlPXA9PT0tMT92b2lkIDA6cCxuZXcgSGYoZ3MpKX07SGYuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcG9zaXRpb25zLG49dC5fd2lkdGgsbz10Ll9lbGxpcHNvaWQ7ZT1PRihlLG8pO2xldCByPUNuKGUsYS5lcXVhbHNFcHNpbG9uKTtpZihyLmxlbmd0aDwyfHxuPD0wKXJldHVybjtsZXQgaT10Ll9oZWlnaHQscz10Ll9leHRydWRlZEhlaWdodCxmPSFQLmVxdWFsc0Vwc2lsb24oaSxzLDAsUC5FUFNJTE9OMiksdT17ZWxsaXBzb2lkOm8scG9zaXRpb25zOnIsd2lkdGg6bixjb3JuZXJUeXBlOnQuX2Nvcm5lclR5cGUsZ3JhbnVsYXJpdHk6dC5fZ3JhbnVsYXJpdHksc2F2ZUF0dHJpYnV0ZXM6ITF9LGM7aWYoZil1LmhlaWdodD1pLHUuZXh0cnVkZWRIZWlnaHQ9cyx1Lm9mZnNldEF0dHJpYnV0ZT10Ll9vZmZzZXRBdHRyaWJ1dGUsYz1FRih1KTtlbHNle2xldCBkPUtlLmNvbXB1dGVQb3NpdGlvbnModSk7aWYoYz1iTyhkLHUuY29ybmVyVHlwZSksYy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoYy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxpLG8pLG0odC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGg9Yy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsXz10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxnPW5ldyBVaW50OEFycmF5KGgvMykuZmlsbChfKTtjLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6Z30pfX1sZXQgbD1jLmF0dHJpYnV0ZXMscD1BdC5mcm9tVmVydGljZXMobC5wb3NpdGlvbi52YWx1ZXMsdm9pZCAwLDMpO3JldHVybiBuZXcgVXQoe2F0dHJpYnV0ZXM6bCxpbmRpY2VzOmMuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkJ0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOnAsb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtmXz1IZn0pO3ZhciB1Xz17fTtsZSh1Xyx7ZGVmYXVsdDooKT0+U0Z9KTtmdW5jdGlvbiBSRih0LGUpe3JldHVybiBtKGUpJiYodD1mXy51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSxmXy5jcmVhdGVHZW9tZXRyeSh0KX12YXIgU0YsbF89JCgoKT0+e1RPKCk7ZnQoKTskdCgpO1NGPVJGfSk7dmFyIE9PLHdkLHBfPSQoKCk9PntLdCgpO09PPXt9O09PLmNvbXB1dGVQb3NpdGlvbnM9ZnVuY3Rpb24odCxlLG4sbyxyKXtsZXQgaT10Ki41LHM9LWksZj1vK28sdT1yPzIqZjpmLGM9bmV3IEZsb2F0NjRBcnJheSh1KjMpLGwscD0wLGQ9MCxoPXI/ZiozOjAsXz1yPyhmK28pKjM6byozO2ZvcihsPTA7bDxvO2wrKyl7bGV0IGc9bC9vKlAuVFdPX1BJLGI9TWF0aC5jb3MoZyksdz1NYXRoLnNpbihnKSxPPWIqbixFPXcqbixUPWIqZSx4PXcqZTtjW2QraF09TyxjW2QraCsxXT1FLGNbZCtoKzJdPXMsY1tkK19dPVQsY1tkK18rMV09eCxjW2QrXysyXT1pLGQrPTMsciYmKGNbcCsrXT1PLGNbcCsrXT1FLGNbcCsrXT1zLGNbcCsrXT1ULGNbcCsrXT14LGNbcCsrXT1pKX1yZXR1cm4gY307d2Q9T099KTtmdW5jdGlvbiB6aSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10Lmxlbmd0aCxuPXQudG9wUmFkaXVzLG89dC5ib3R0b21SYWRpdXMscj10LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVCxpPXQuc2xpY2VzPz8xMjg7aWYoIW0oZSkpdGhyb3cgbmV3IEQoIm9wdGlvbnMubGVuZ3RoIG11c3QgYmUgZGVmaW5lZC4iKTtpZighbShuKSl0aHJvdyBuZXcgRCgib3B0aW9ucy50b3BSYWRpdXMgbXVzdCBiZSBkZWZpbmVkLiIpO2lmKCFtKG8pKXRocm93IG5ldyBEKCJvcHRpb25zLmJvdHRvbVJhZGl1cyBtdXN0IGJlIGRlZmluZWQuIik7aWYoaTwzKXRocm93IG5ldyBEKCJvcHRpb25zLnNsaWNlcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAzLiIpO2lmKG0odC5vZmZzZXRBdHRyaWJ1dGUpJiZ0Lm9mZnNldEF0dHJpYnV0ZT09PWFlLlRPUCl0aHJvdyBuZXcgRCgiR2VvbWV0cnlPZmZzZXRBdHRyaWJ1dGUuVE9QIGlzIG5vdCBhIHN1cHBvcnRlZCBvcHRpb25zLm9mZnNldEF0dHJpYnV0ZSBmb3IgdGhpcyBnZW9tZXRyeS4iKTt0aGlzLl9sZW5ndGg9ZSx0aGlzLl90b3BSYWRpdXM9bix0aGlzLl9ib3R0b21SYWRpdXM9byx0aGlzLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUociksdGhpcy5fc2xpY2VzPWksdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUN5bGluZGVyR2VvbWV0cnkifXZhciBkXyx4RixDRixQRixNRixFTyxUYSxtXyxxZixoXz0kKCgpPT57dmUoKTtrZSgpO0R0KCk7RGUoKTtwXygpO3llKCk7ZnQoKTtIdCgpO1llKCk7JGUoKTthbigpO0RvKCk7WmUoKTtLdCgpO3RuKCk7eG8oKTtkXz1uZXcgSix4Rj1uZXcgYSxDRj1uZXcgYSxQRj1uZXcgYSxNRj1uZXcgYTt6aS5wYWNrZWRMZW5ndGg9cHQucGFja2VkTGVuZ3RoKzU7emkucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoInZhbHVlIGlzIHJlcXVpcmVkIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7cmV0dXJuIG49bj8/MCxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPXB0LnBhY2tlZExlbmd0aCxlW24rK109dC5fbGVuZ3RoLGVbbisrXT10Ll90b3BSYWRpdXMsZVtuKytdPXQuX2JvdHRvbVJhZGl1cyxlW24rK109dC5fc2xpY2VzLGVbbl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtFTz1uZXcgcHQsVGE9e3ZlcnRleEZvcm1hdDpFTyxsZW5ndGg6dm9pZCAwLHRvcFJhZGl1czp2b2lkIDAsYm90dG9tUmFkaXVzOnZvaWQgMCxzbGljZXM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O3ppLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7ZT1lPz8wO2xldCBvPXB0LnVucGFjayh0LGUsRU8pO2UrPXB0LnBhY2tlZExlbmd0aDtsZXQgcj10W2UrK10saT10W2UrK10scz10W2UrK10sZj10W2UrK10sdT10W2VdO3JldHVybiBtKG4pPyhuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUobyxuLl92ZXJ0ZXhGb3JtYXQpLG4uX2xlbmd0aD1yLG4uX3RvcFJhZGl1cz1pLG4uX2JvdHRvbVJhZGl1cz1zLG4uX3NsaWNlcz1mLG4uX29mZnNldEF0dHJpYnV0ZT11PT09LTE/dm9pZCAwOnUsbik6KFRhLmxlbmd0aD1yLFRhLnRvcFJhZGl1cz1pLFRhLmJvdHRvbVJhZGl1cz1zLFRhLnNsaWNlcz1mLFRhLm9mZnNldEF0dHJpYnV0ZT11PT09LTE/dm9pZCAwOnUsbmV3IHppKFRhKSl9O3ppLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX2xlbmd0aCxuPXQuX3RvcFJhZGl1cyxvPXQuX2JvdHRvbVJhZGl1cyxyPXQuX3ZlcnRleEZvcm1hdCxpPXQuX3NsaWNlcztpZihlPD0wfHxuPDB8fG88MHx8bj09PTAmJm89PT0wKXJldHVybjtsZXQgcz1pK2ksZj1pK3MsdT1zK3MsYz13ZC5jb21wdXRlUG9zaXRpb25zKGUsbixvLGksITApLGw9ci5zdD9uZXcgRmxvYXQzMkFycmF5KHUqMik6dm9pZCAwLHA9ci5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheSh1KjMpOnZvaWQgMCxkPXIudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHUqMyk6dm9pZCAwLGg9ci5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheSh1KjMpOnZvaWQgMCxfLGc9ci5ub3JtYWx8fHIudGFuZ2VudHx8ci5iaXRhbmdlbnQ7aWYoZyl7bGV0IE49ci50YW5nZW50fHxyLmJpdGFuZ2VudCxGPTAsST0wLHY9MCxCPU1hdGguYXRhbjIoby1uLGUpLEE9eEY7QS56PU1hdGguc2luKEIpO2xldCBTPU1hdGguY29zKEIpLEM9UEYsTD1DRjtmb3IoXz0wO188aTtfKyspe2xldCB6PV8vaSpQLlRXT19QSSxqPVMqTWF0aC5jb3Moeiksaz1TKk1hdGguc2luKHopO2cmJihBLng9aixBLnk9ayxOJiYoQz1hLm5vcm1hbGl6ZShhLmNyb3NzKGEuVU5JVF9aLEEsQyksQykpLHIubm9ybWFsJiYocFtGKytdPUEueCxwW0YrK109QS55LHBbRisrXT1BLnoscFtGKytdPUEueCxwW0YrK109QS55LHBbRisrXT1BLnopLHIudGFuZ2VudCYmKGRbSSsrXT1DLngsZFtJKytdPUMueSxkW0krK109Qy56LGRbSSsrXT1DLngsZFtJKytdPUMueSxkW0krK109Qy56KSxyLmJpdGFuZ2VudCYmKEw9YS5ub3JtYWxpemUoYS5jcm9zcyhBLEMsTCksTCksaFt2KytdPUwueCxoW3YrK109TC55LGhbdisrXT1MLnosaFt2KytdPUwueCxoW3YrK109TC55LGhbdisrXT1MLnopKX1mb3IoXz0wO188aTtfKyspci5ub3JtYWwmJihwW0YrK109MCxwW0YrK109MCxwW0YrK109LTEpLHIudGFuZ2VudCYmKGRbSSsrXT0xLGRbSSsrXT0wLGRbSSsrXT0wKSxyLmJpdGFuZ2VudCYmKGhbdisrXT0wLGhbdisrXT0tMSxoW3YrK109MCk7Zm9yKF89MDtfPGk7XysrKXIubm9ybWFsJiYocFtGKytdPTAscFtGKytdPTAscFtGKytdPTEpLHIudGFuZ2VudCYmKGRbSSsrXT0xLGRbSSsrXT0wLGRbSSsrXT0wKSxyLmJpdGFuZ2VudCYmKGhbdisrXT0wLGhbdisrXT0xLGhbdisrXT0wKX1sZXQgYj0xMippLTEyLHc9THQuY3JlYXRlVHlwZWRBcnJheSh1LGIpLE89MCxFPTA7Zm9yKF89MDtfPGktMTtfKyspd1tPKytdPUUsd1tPKytdPUUrMix3W08rK109RSszLHdbTysrXT1FLHdbTysrXT1FKzMsd1tPKytdPUUrMSxFKz0yO2Zvcih3W08rK109cy0yLHdbTysrXT0wLHdbTysrXT0xLHdbTysrXT1zLTIsd1tPKytdPTEsd1tPKytdPXMtMSxfPTE7XzxpLTE7XysrKXdbTysrXT1zK18rMSx3W08rK109cytfLHdbTysrXT1zO2ZvcihfPTE7XzxpLTE7XysrKXdbTysrXT1mLHdbTysrXT1mK18sd1tPKytdPWYrXysxO2xldCBUPTA7aWYoci5zdCl7bGV0IE49TWF0aC5tYXgobixvKTtmb3IoXz0wO188dTtfKyspe2xldCBGPWEuZnJvbUFycmF5KGMsXyozLE1GKTtsW1QrK109KEYueCtOKS8oMipOKSxsW1QrK109KEYueStOKS8oMipOKX19bGV0IHg9bmV3IGllO3IucG9zaXRpb24mJih4LnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pKSxyLm5vcm1hbCYmKHgubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpwfSkpLHIudGFuZ2VudCYmKHgudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZH0pKSxyLmJpdGFuZ2VudCYmKHguYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpofSkpLHIuc3QmJih4LnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpsfSkpLGRfLng9ZSouNSxkXy55PU1hdGgubWF4KG8sbik7bGV0IE09bmV3IEF0KGEuWkVSTyxKLm1hZ25pdHVkZShkXykpO2lmKG0odC5fb2Zmc2V0QXR0cmlidXRlKSl7ZT1jLmxlbmd0aDtsZXQgTj10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxGPW5ldyBVaW50OEFycmF5KGUvMykuZmlsbChOKTt4LmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOkZ9KX1yZXR1cm4gbmV3IFV0KHthdHRyaWJ1dGVzOngsaW5kaWNlczp3LHByaW1pdGl2ZVR5cGU6QnQuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOk0sb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTt6aS5nZXRVbml0Q3lsaW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbShtXyl8fChtXz16aS5jcmVhdGVHZW9tZXRyeShuZXcgemkoe3RvcFJhZGl1czoxLGJvdHRvbVJhZGl1czoxLGxlbmd0aDoxLHZlcnRleEZvcm1hdDpwdC5QT1NJVElPTl9PTkxZfSkpKSxtX307cWY9eml9KTt2YXIgX189e307bGUoX18se2RlZmF1bHQ6KCk9PklGfSk7ZnVuY3Rpb24gTkYodCxlKXtyZXR1cm4gbShlKSYmKHQ9cWYudW5wYWNrKHQsZSkpLHFmLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBJRix5Xz0kKCgpPT57aF8oKTtmdCgpO0lGPU5GfSk7ZnVuY3Rpb24gT2EodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5sZW5ndGgsbj10LnRvcFJhZGl1cyxvPXQuYm90dG9tUmFkaXVzLHI9dC5zbGljZXM/PzEyOCxpPU1hdGgubWF4KHQubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPz8xNiwwKTtpZih5LnR5cGVPZi5udW1iZXIoIm9wdGlvbnMucG9zaXRpb25zIixlKSx5LnR5cGVPZi5udW1iZXIoIm9wdGlvbnMudG9wUmFkaXVzIixuKSx5LnR5cGVPZi5udW1iZXIoIm9wdGlvbnMuYm90dG9tUmFkaXVzIixvKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygib3B0aW9ucy5zbGljZXMiLHIsMyksbSh0Lm9mZnNldEF0dHJpYnV0ZSkmJnQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXRocm93IG5ldyBEKCJHZW9tZXRyeU9mZnNldEF0dHJpYnV0ZS5UT1AgaXMgbm90IGEgc3VwcG9ydGVkIG9wdGlvbnMub2Zmc2V0QXR0cmlidXRlIGZvciB0aGlzIGdlb21ldHJ5LiIpO3RoaXMuX2xlbmd0aD1lLHRoaXMuX3RvcFJhZGl1cz1uLHRoaXMuX2JvdHRvbVJhZGl1cz1vLHRoaXMuX3NsaWNlcz1yLHRoaXMuX251bWJlck9mVmVydGljYWxMaW5lcz1pLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDeWxpbmRlck91dGxpbmVHZW9tZXRyeSJ9dmFyIGdfLGdjLEFfLFJPPSQoKCk9Pnt2ZSgpO2tlKCk7RHQoKTtXdCgpO0RlKCk7cF8oKTt5ZSgpO2Z0KCk7SHQoKTtZZSgpOyRlKCk7YW4oKTtEbygpO1plKCk7dG4oKTtnXz1uZXcgSjtPYS5wYWNrZWRMZW5ndGg9NjtPYS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGVbbisrXT10Ll9sZW5ndGgsZVtuKytdPXQuX3RvcFJhZGl1cyxlW24rK109dC5fYm90dG9tUmFkaXVzLGVbbisrXT10Ll9zbGljZXMsZVtuKytdPXQuX251bWJlck9mVmVydGljYWxMaW5lcyxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07Z2M9e2xlbmd0aDp2b2lkIDAsdG9wUmFkaXVzOnZvaWQgMCxib3R0b21SYWRpdXM6dm9pZCAwLHNsaWNlczp2b2lkIDAsbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtPYS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz10W2UrK10scj10W2UrK10saT10W2UrK10scz10W2UrK10sZj10W2UrK10sdT10W2VdO3JldHVybiBtKG4pPyhuLl9sZW5ndGg9byxuLl90b3BSYWRpdXM9cixuLl9ib3R0b21SYWRpdXM9aSxuLl9zbGljZXM9cyxuLl9udW1iZXJPZlZlcnRpY2FsTGluZXM9ZixuLl9vZmZzZXRBdHRyaWJ1dGU9dT09PS0xP3ZvaWQgMDp1LG4pOihnYy5sZW5ndGg9byxnYy50b3BSYWRpdXM9cixnYy5ib3R0b21SYWRpdXM9aSxnYy5zbGljZXM9cyxnYy5udW1iZXJPZlZlcnRpY2FsTGluZXM9ZixnYy5vZmZzZXRBdHRyaWJ1dGU9dT09PS0xP3ZvaWQgMDp1LG5ldyBPYShnYykpfTtPYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9sZW5ndGgsbj10Ll90b3BSYWRpdXMsbz10Ll9ib3R0b21SYWRpdXMscj10Ll9zbGljZXMsaT10Ll9udW1iZXJPZlZlcnRpY2FsTGluZXM7aWYoZTw9MHx8bjwwfHxvPDB8fG49PT0wJiZvPT09MClyZXR1cm47bGV0IHM9cioyLGY9d2QuY29tcHV0ZVBvc2l0aW9ucyhlLG4sbyxyLCExKSx1PXIqMixjO2lmKGk+MCl7bGV0IGc9TWF0aC5taW4oaSxyKTtjPU1hdGgucm91bmQoci9nKSx1Kz1nfWxldCBsPUx0LmNyZWF0ZVR5cGVkQXJyYXkocyx1KjIpLHA9MCxkO2ZvcihkPTA7ZDxyLTE7ZCsrKWxbcCsrXT1kLGxbcCsrXT1kKzEsbFtwKytdPWQrcixsW3ArK109ZCsxK3I7aWYobFtwKytdPXItMSxsW3ArK109MCxsW3ArK109cityLTEsbFtwKytdPXIsaT4wKWZvcihkPTA7ZDxyO2QrPWMpbFtwKytdPWQsbFtwKytdPWQrcjtsZXQgaD1uZXcgaWU7aC5wb3NpdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmZ9KSxnXy54PWUqLjUsZ18ueT1NYXRoLm1heChvLG4pO2xldCBfPW5ldyBBdChhLlpFUk8sSi5tYWduaXR1ZGUoZ18pKTtpZihtKHQuX29mZnNldEF0dHJpYnV0ZSkpe2U9Zi5sZW5ndGg7bGV0IGc9dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsYj1uZXcgVWludDhBcnJheShlLzMpLmZpbGwoZyk7aC5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpifSl9cmV0dXJuIG5ldyBVdCh7YXR0cmlidXRlczpoLGluZGljZXM6bCxwcmltaXRpdmVUeXBlOkJ0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOl8sb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtBXz1PYX0pO3ZhciBiXz17fTtsZShiXyx7ZGVmYXVsdDooKT0+RkZ9KTtmdW5jdGlvbiB2Rih0LGUpe3JldHVybiBtKGUpJiYodD1BXy51bnBhY2sodCxlKSksQV8uY3JlYXRlR2VvbWV0cnkodCl9dmFyIEZGLHdfPSQoKCk9PntSTygpO2Z0KCk7RkY9dkZ9KTt2YXIgVF89e307bGUoVF8se2RlZmF1bHQ6KCk9PkRGfSk7ZnVuY3Rpb24gTEYodCxlKXtyZXR1cm4gbShlKSYmKHQ9enIudW5wYWNrKHQsZSkpLHQuX2NlbnRlcj1hLmNsb25lKHQuX2NlbnRlciksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSx6ci5jcmVhdGVHZW9tZXRyeSh0KX12YXIgREYsT189JCgoKT0+e0R0KCk7ZnQoKTtPMCgpOyR0KCk7REY9TEZ9KTt2YXIgRV89e307bGUoRV8se2RlZmF1bHQ6KCk9PlVGfSk7ZnVuY3Rpb24gQkYodCxlKXtyZXR1cm4gbShlKSYmKHQ9anIudW5wYWNrKHQsZSkpLHQuX2NlbnRlcj1hLmNsb25lKHQuX2NlbnRlciksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSxqci5jcmVhdGVHZW9tZXRyeSh0KX12YXIgVUYsUl89JCgoKT0+e0R0KCk7ZnQoKTt4MCgpOyR0KCk7VUY9QkZ9KTtmdW5jdGlvbiBqaSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnJhZGlpPz9IRixuPXQuaW5uZXJSYWRpaT8/ZSxvPXQubWluaW11bUNsb2NrPz8wLHI9dC5tYXhpbXVtQ2xvY2s/P1AuVFdPX1BJLGk9dC5taW5pbXVtQ29uZT8/MCxzPXQubWF4aW11bUNvbmU/P1AuUEksZj1NYXRoLnJvdW5kKHQuc3RhY2tQYXJ0aXRpb25zPz82NCksdT1NYXRoLnJvdW5kKHQuc2xpY2VQYXJ0aXRpb25zPz82NCksYz10LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVDtpZih1PDMpdGhyb3cgbmV3IEQoIm9wdGlvbnMuc2xpY2VQYXJ0aXRpb25zIGNhbm5vdCBiZSBsZXNzIHRoYW4gdGhyZWUuIik7aWYoZjwzKXRocm93IG5ldyBEKCJvcHRpb25zLnN0YWNrUGFydGl0aW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIHRocmVlLiIpO3RoaXMuX3JhZGlpPWEuY2xvbmUoZSksdGhpcy5faW5uZXJSYWRpaT1hLmNsb25lKG4pLHRoaXMuX21pbmltdW1DbG9jaz1vLHRoaXMuX21heGltdW1DbG9jaz1yLHRoaXMuX21pbmltdW1Db25lPWksdGhpcy5fbWF4aW11bUNvbmU9cyx0aGlzLl9zdGFja1BhcnRpdGlvbnM9Zix0aGlzLl9zbGljZVBhcnRpdGlvbnM9dSx0aGlzLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoYyksdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUVsbGlwc29pZEdlb21ldHJ5In12YXIga0YsR0YsVkYsekYsakYsSEYsU08seE8sQ08sUE8sTU8sQXMsU18sY3IsVGQ9JCgoKT0+e3ZlKCk7a2UoKTtEdCgpO0RlKCk7eWUoKTtmdCgpO0h0KCk7JHQoKTtZZSgpOyRlKCk7YW4oKTtEbygpO1plKCk7S3QoKTt0bigpO3hvKCk7a0Y9bmV3IGEsR0Y9bmV3IGEsVkY9bmV3IGEsekY9bmV3IGEsakY9bmV3IGEsSEY9bmV3IGEoMSwxLDEpLFNPPU1hdGguY29zLHhPPU1hdGguc2luO2ppLnBhY2tlZExlbmd0aD0yKmEucGFja2VkTGVuZ3RoK3B0LnBhY2tlZExlbmd0aCs3O2ppLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBuPW4/PzAsYS5wYWNrKHQuX3JhZGlpLGUsbiksbis9YS5wYWNrZWRMZW5ndGgsYS5wYWNrKHQuX2lubmVyUmFkaWksZSxuKSxuKz1hLnBhY2tlZExlbmd0aCxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPXB0LnBhY2tlZExlbmd0aCxlW24rK109dC5fbWluaW11bUNsb2NrLGVbbisrXT10Ll9tYXhpbXVtQ2xvY2ssZVtuKytdPXQuX21pbmltdW1Db25lLGVbbisrXT10Ll9tYXhpbXVtQ29uZSxlW24rK109dC5fc3RhY2tQYXJ0aXRpb25zLGVbbisrXT10Ll9zbGljZVBhcnRpdGlvbnMsZVtuXT10Ll9vZmZzZXRBdHRyaWJ1dGU/Py0xLGV9O0NPPW5ldyBhLFBPPW5ldyBhLE1PPW5ldyBwdCxBcz17cmFkaWk6Q08saW5uZXJSYWRpaTpQTyx2ZXJ0ZXhGb3JtYXQ6TU8sbWluaW11bUNsb2NrOnZvaWQgMCxtYXhpbXVtQ2xvY2s6dm9pZCAwLG1pbmltdW1Db25lOnZvaWQgMCxtYXhpbXVtQ29uZTp2b2lkIDAsc3RhY2tQYXJ0aXRpb25zOnZvaWQgMCxzbGljZVBhcnRpdGlvbnM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2ppLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7ZT1lPz8wO2xldCBvPWEudW5wYWNrKHQsZSxDTyk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IHI9YS51bnBhY2sodCxlLFBPKTtlKz1hLnBhY2tlZExlbmd0aDtsZXQgaT1wdC51bnBhY2sodCxlLE1PKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IHM9dFtlKytdLGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdLHA9dFtlKytdLGQ9dFtlXTtyZXR1cm4gbShuKT8obi5fcmFkaWk9YS5jbG9uZShvLG4uX3JhZGlpKSxuLl9pbm5lclJhZGlpPWEuY2xvbmUocixuLl9pbm5lclJhZGlpKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX21pbmltdW1DbG9jaz1zLG4uX21heGltdW1DbG9jaz1mLG4uX21pbmltdW1Db25lPXUsbi5fbWF4aW11bUNvbmU9YyxuLl9zdGFja1BhcnRpdGlvbnM9bCxuLl9zbGljZVBhcnRpdGlvbnM9cCxuLl9vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG4pOihBcy5taW5pbXVtQ2xvY2s9cyxBcy5tYXhpbXVtQ2xvY2s9ZixBcy5taW5pbXVtQ29uZT11LEFzLm1heGltdW1Db25lPWMsQXMuc3RhY2tQYXJ0aXRpb25zPWwsQXMuc2xpY2VQYXJ0aXRpb25zPXAsQXMub2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuZXcgamkoQXMpKX07amkuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcmFkaWk7aWYoZS54PD0wfHxlLnk8PTB8fGUuejw9MClyZXR1cm47bGV0IG49dC5faW5uZXJSYWRpaTtpZihuLng8PTB8fG4ueTw9MHx8bi56PD0wKXJldHVybjtsZXQgbz10Ll9taW5pbXVtQ2xvY2sscj10Ll9tYXhpbXVtQ2xvY2ssaT10Ll9taW5pbXVtQ29uZSxzPXQuX21heGltdW1Db25lLGY9dC5fdmVydGV4Rm9ybWF0LHU9dC5fc2xpY2VQYXJ0aXRpb25zKzEsYz10Ll9zdGFja1BhcnRpdGlvbnMrMTt1PU1hdGgucm91bmQodSpNYXRoLmFicyhyLW8pL1AuVFdPX1BJKSxjPU1hdGgucm91bmQoYypNYXRoLmFicyhzLWkpL1AuUEkpLHU8MiYmKHU9MiksYzwyJiYoYz0yKTtsZXQgbCxwLGQ9MCxoPVtpXSxfPVtvXTtmb3IobD0wO2w8YztsKyspaC5wdXNoKGkrbCoocy1pKS8oYy0xKSk7Zm9yKGgucHVzaChzKSxwPTA7cDx1O3ArKylfLnB1c2gobytwKihyLW8pLyh1LTEpKTtfLnB1c2gocik7bGV0IGc9aC5sZW5ndGgsYj1fLmxlbmd0aCx3PTAsTz0xLEU9bi54IT09ZS54fHxuLnkhPT1lLnl8fG4ueiE9PWUueixUPSExLHg9ITEsTT0hMTtFJiYoTz0yLGk+MCYmKFQ9ITAsdys9dS0xKSxzPE1hdGguUEkmJih4PSEwLHcrPXUtMSksKHItbyklUC5UV09fUEk/KE09ITAsdys9KGMtMSkqMisxKTp3Kz0xKTtsZXQgTj1iKmcqTyxGPW5ldyBGbG9hdDY0QXJyYXkoTiozKSxJPW5ldyBBcnJheShOKS5maWxsKCExKSx2PW5ldyBBcnJheShOKS5maWxsKCExKSxCPXUqYypPLEE9NiooQit3KzEtKHUrYykqTyksUz1MdC5jcmVhdGVUeXBlZEFycmF5KEIsQSksQz1mLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KE4qMyk6dm9pZCAwLEw9Zi50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoTiozKTp2b2lkIDAsej1mLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KE4qMyk6dm9pZCAwLGo9Zi5zdD9uZXcgRmxvYXQzMkFycmF5KE4qMik6dm9pZCAwLGs9bmV3IEFycmF5KGcpLHE9bmV3IEFycmF5KGcpO2ZvcihsPTA7bDxnO2wrKylrW2xdPXhPKGhbbF0pLHFbbF09U08oaFtsXSk7bGV0IFc9bmV3IEFycmF5KGIpLFI9bmV3IEFycmF5KGIpO2ZvcihwPTA7cDxiO3ArKylSW3BdPVNPKF9bcF0pLFdbcF09eE8oX1twXSk7Zm9yKGw9MDtsPGc7bCsrKWZvcihwPTA7cDxiO3ArKylGW2QrK109ZS54KmtbbF0qUltwXSxGW2QrK109ZS55KmtbbF0qV1twXSxGW2QrK109ZS56KnFbbF07bGV0IG50PU4vMjtpZihFKWZvcihsPTA7bDxnO2wrKylmb3IocD0wO3A8YjtwKyspRltkKytdPW4ueCprW2xdKlJbcF0sRltkKytdPW4ueSprW2xdKldbcF0sRltkKytdPW4ueipxW2xdLElbbnRdPSEwLGw+MCYmbCE9PWctMSYmcCE9PTAmJnAhPT1iLTEmJih2W250XT0hMCksbnQrKztkPTA7bGV0IGF0LGx0O2ZvcihsPTE7bDxnLTI7bCsrKWZvcihhdD1sKmIsbHQ9KGwrMSkqYixwPTE7cDxiLTI7cCsrKVNbZCsrXT1sdCtwLFNbZCsrXT1sdCtwKzEsU1tkKytdPWF0K3ArMSxTW2QrK109bHQrcCxTW2QrK109YXQrcCsxLFNbZCsrXT1hdCtwO2lmKEUpe2xldCBkZT1nKmI7Zm9yKGw9MTtsPGctMjtsKyspZm9yKGF0PWRlK2wqYixsdD1kZSsobCsxKSpiLHA9MTtwPGItMjtwKyspU1tkKytdPWx0K3AsU1tkKytdPWF0K3AsU1tkKytdPWF0K3ArMSxTW2QrK109bHQrcCxTW2QrK109YXQrcCsxLFNbZCsrXT1sdCtwKzF9bGV0IF90LG90O2lmKEUpe2lmKFQpZm9yKG90PWcqYixsPTE7bDxiLTI7bCsrKVNbZCsrXT1sLFNbZCsrXT1sKzEsU1tkKytdPW90K2wrMSxTW2QrK109bCxTW2QrK109b3QrbCsxLFNbZCsrXT1vdCtsO2lmKHgpZm9yKF90PWcqYi1iLG90PWcqYipPLWIsbD0xO2w8Yi0yO2wrKylTW2QrK109X3QrbCsxLFNbZCsrXT1fdCtsLFNbZCsrXT1vdCtsLFNbZCsrXT1fdCtsKzEsU1tkKytdPW90K2wsU1tkKytdPW90K2wrMX1pZihNKXtmb3IobD0xO2w8Zy0yO2wrKylvdD1iKmcrYipsLF90PWIqbCxTW2QrK109b3QsU1tkKytdPV90K2IsU1tkKytdPV90LFNbZCsrXT1vdCxTW2QrK109b3QrYixTW2QrK109X3QrYjtmb3IobD0xO2w8Zy0yO2wrKylvdD1iKmcrYioobCsxKS0xLF90PWIqKGwrMSktMSxTW2QrK109X3QrYixTW2QrK109b3QsU1tkKytdPV90LFNbZCsrXT1fdCtiLFNbZCsrXT1vdCtiLFNbZCsrXT1vdH1sZXQgUHQ9bmV3IGllO2YucG9zaXRpb24mJihQdC5wb3NpdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkZ9KSk7bGV0IGd0PTAsUnQ9MCxkdD0wLHJ0PTAseHQ9Ti8yLEd0LHBlPVkuZnJvbUNhcnRlc2lhbjMoZSkscmU9WS5mcm9tQ2FydGVzaWFuMyhuKTtpZihmLnN0fHxmLm5vcm1hbHx8Zi50YW5nZW50fHxmLmJpdGFuZ2VudCl7Zm9yKGw9MDtsPE47bCsrKXtHdD1JW2xdP3JlOnBlO2xldCBkZT1hLmZyb21BcnJheShGLGwqMyxrRiksZmU9R3QuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGRlLEdGKTtpZih2W2xdJiZhLm5lZ2F0ZShmZSxmZSksZi5zdCl7bGV0IFp0PUoubmVnYXRlKGZlLGpGKTtqW2d0KytdPU1hdGguYXRhbjIoWnQueSxadC54KS9QLlRXT19QSSsuNSxqW2d0KytdPU1hdGguYXNpbihmZS56KS9NYXRoLlBJKy41fWlmKGYubm9ybWFsJiYoQ1tSdCsrXT1mZS54LENbUnQrK109ZmUueSxDW1J0KytdPWZlLnopLGYudGFuZ2VudHx8Zi5iaXRhbmdlbnQpe2xldCBadD1WRixRdD0wLE5lO2lmKElbbF0mJihRdD14dCksIVQmJmw+PVF0JiZsPFF0K2IqMj9OZT1hLlVOSVRfWDpOZT1hLlVOSVRfWixhLmNyb3NzKE5lLGZlLFp0KSxhLm5vcm1hbGl6ZShadCxadCksZi50YW5nZW50JiYoTFtkdCsrXT1adC54LExbZHQrK109WnQueSxMW2R0KytdPVp0LnopLGYuYml0YW5nZW50KXtsZXQgZ2U9YS5jcm9zcyhmZSxadCx6Rik7YS5ub3JtYWxpemUoZ2UsZ2UpLHpbcnQrK109Z2UueCx6W3J0KytdPWdlLnkseltydCsrXT1nZS56fX19Zi5zdCYmKFB0LnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpqfSkpLGYubm9ybWFsJiYoUHQubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpDfSkpLGYudGFuZ2VudCYmKFB0LnRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkx9KSksZi5iaXRhbmdlbnQmJihQdC5iaXRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnp9KSl9aWYobSh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgZGU9Ri5sZW5ndGgsZmU9dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsWnQ9bmV3IFVpbnQ4QXJyYXkoZGUvMykuZmlsbChmZSk7UHQuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6WnR9KX1yZXR1cm4gbmV3IFV0KHthdHRyaWJ1dGVzOlB0LGluZGljZXM6UyxwcmltaXRpdmVUeXBlOkJ0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpBdC5mcm9tRWxsaXBzb2lkKHBlKSxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O2ppLmdldFVuaXRFbGxpcHNvaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbShTXyl8fChTXz1qaS5jcmVhdGVHZW9tZXRyeShuZXcgamkoe3JhZGlpOm5ldyBhKDEsMSwxKSx2ZXJ0ZXhGb3JtYXQ6cHQuUE9TSVRJT05fT05MWX0pKSksU199O2NyPWppfSk7dmFyIHhfPXt9O2xlKHhfLHtkZWZhdWx0OigpPT5LRn0pO2Z1bmN0aW9uIHFGKHQsZSl7cmV0dXJuIG0oZSkmJih0PWNyLnVucGFjayh0LGUpKSxjci5jcmVhdGVHZW9tZXRyeSh0KX12YXIgS0YsQ189JCgoKT0+e2Z0KCk7VGQoKTtLRj1xRn0pO2Z1bmN0aW9uIEVhKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucmFkaWk/P1dGLG49dC5pbm5lclJhZGlpPz9lLG89dC5taW5pbXVtQ2xvY2s/PzAscj10Lm1heGltdW1DbG9jaz8/UC5UV09fUEksaT10Lm1pbmltdW1Db25lPz8wLHM9dC5tYXhpbXVtQ29uZT8/UC5QSSxmPU1hdGgucm91bmQodC5zdGFja1BhcnRpdGlvbnM/PzEwKSx1PU1hdGgucm91bmQodC5zbGljZVBhcnRpdGlvbnM/PzgpLGM9TWF0aC5yb3VuZCh0LnN1YmRpdmlzaW9ucz8/MTI4KTtpZihmPDEpdGhyb3cgbmV3IEQoIm9wdGlvbnMuc3RhY2tQYXJ0aXRpb25zIGNhbm5vdCBiZSBsZXNzIHRoYW4gMSIpO2lmKHU8MCl0aHJvdyBuZXcgRCgib3B0aW9ucy5zbGljZVBhcnRpdGlvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiAwIik7aWYoYzwwKXRocm93IG5ldyBEKCJvcHRpb25zLnN1YmRpdmlzaW9ucyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLiIpO2lmKG0odC5vZmZzZXRBdHRyaWJ1dGUpJiZ0Lm9mZnNldEF0dHJpYnV0ZT09PWFlLlRPUCl0aHJvdyBuZXcgRCgiR2VvbWV0cnlPZmZzZXRBdHRyaWJ1dGUuVE9QIGlzIG5vdCBhIHN1cHBvcnRlZCBvcHRpb25zLm9mZnNldEF0dHJpYnV0ZSBmb3IgdGhpcyBnZW9tZXRyeS4iKTt0aGlzLl9yYWRpaT1hLmNsb25lKGUpLHRoaXMuX2lubmVyUmFkaWk9YS5jbG9uZShuKSx0aGlzLl9taW5pbXVtQ2xvY2s9byx0aGlzLl9tYXhpbXVtQ2xvY2s9cix0aGlzLl9taW5pbXVtQ29uZT1pLHRoaXMuX21heGltdW1Db25lPXMsdGhpcy5fc3RhY2tQYXJ0aXRpb25zPWYsdGhpcy5fc2xpY2VQYXJ0aXRpb25zPXUsdGhpcy5fc3ViZGl2aXNpb25zPWMsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUVsbGlwc29pZE91dGxpbmVHZW9tZXRyeSJ9dmFyIFdGLE9kLEVkLE5PLElPLEhpLFhyLFBfPSQoKCk9Pnt2ZSgpO0R0KCk7RGUoKTt5ZSgpO2Z0KCk7SHQoKTskdCgpO1llKCk7JGUoKTthbigpO0RvKCk7WmUoKTtLdCgpO3RuKCk7V0Y9bmV3IGEoMSwxLDEpLE9kPU1hdGguY29zLEVkPU1hdGguc2luO0VhLnBhY2tlZExlbmd0aD0yKmEucGFja2VkTGVuZ3RoKzg7RWEucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoInZhbHVlIGlzIHJlcXVpcmVkIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7cmV0dXJuIG49bj8/MCxhLnBhY2sodC5fcmFkaWksZSxuKSxuKz1hLnBhY2tlZExlbmd0aCxhLnBhY2sodC5faW5uZXJSYWRpaSxlLG4pLG4rPWEucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9taW5pbXVtQ2xvY2ssZVtuKytdPXQuX21heGltdW1DbG9jayxlW24rK109dC5fbWluaW11bUNvbmUsZVtuKytdPXQuX21heGltdW1Db25lLGVbbisrXT10Ll9zdGFja1BhcnRpdGlvbnMsZVtuKytdPXQuX3NsaWNlUGFydGl0aW9ucyxlW24rK109dC5fc3ViZGl2aXNpb25zLGVbbl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtOTz1uZXcgYSxJTz1uZXcgYSxIaT17cmFkaWk6Tk8saW5uZXJSYWRpaTpJTyxtaW5pbXVtQ2xvY2s6dm9pZCAwLG1heGltdW1DbG9jazp2b2lkIDAsbWluaW11bUNvbmU6dm9pZCAwLG1heGltdW1Db25lOnZvaWQgMCxzdGFja1BhcnRpdGlvbnM6dm9pZCAwLHNsaWNlUGFydGl0aW9uczp2b2lkIDAsc3ViZGl2aXNpb25zOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtFYS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9ZT8/MDtsZXQgbz1hLnVucGFjayh0LGUsTk8pO2UrPWEucGFja2VkTGVuZ3RoO2xldCByPWEudW5wYWNrKHQsZSxJTyk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IGk9dFtlKytdLHM9dFtlKytdLGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdLHA9dFtlKytdLGQ9dFtlXTtyZXR1cm4gbShuKT8obi5fcmFkaWk9YS5jbG9uZShvLG4uX3JhZGlpKSxuLl9pbm5lclJhZGlpPWEuY2xvbmUocixuLl9pbm5lclJhZGlpKSxuLl9taW5pbXVtQ2xvY2s9aSxuLl9tYXhpbXVtQ2xvY2s9cyxuLl9taW5pbXVtQ29uZT1mLG4uX21heGltdW1Db25lPXUsbi5fc3RhY2tQYXJ0aXRpb25zPWMsbi5fc2xpY2VQYXJ0aXRpb25zPWwsbi5fc3ViZGl2aXNpb25zPXAsbi5fb2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuKTooSGkubWluaW11bUNsb2NrPWksSGkubWF4aW11bUNsb2NrPXMsSGkubWluaW11bUNvbmU9ZixIaS5tYXhpbXVtQ29uZT11LEhpLnN0YWNrUGFydGl0aW9ucz1jLEhpLnNsaWNlUGFydGl0aW9ucz1sLEhpLnN1YmRpdmlzaW9ucz1wLEhpLm9mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsbmV3IEVhKEhpKSl9O0VhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3JhZGlpO2lmKGUueDw9MHx8ZS55PD0wfHxlLno8PTApcmV0dXJuO2xldCBuPXQuX2lubmVyUmFkaWk7aWYobi54PD0wfHxuLnk8PTB8fG4uejw9MClyZXR1cm47bGV0IG89dC5fbWluaW11bUNsb2NrLHI9dC5fbWF4aW11bUNsb2NrLGk9dC5fbWluaW11bUNvbmUscz10Ll9tYXhpbXVtQ29uZSxmPXQuX3N1YmRpdmlzaW9ucyx1PVkuZnJvbUNhcnRlc2lhbjMoZSksYz10Ll9zbGljZVBhcnRpdGlvbnMrMSxsPXQuX3N0YWNrUGFydGl0aW9ucysxO2M9TWF0aC5yb3VuZChjKk1hdGguYWJzKHItbykvUC5UV09fUEkpLGw9TWF0aC5yb3VuZChsKk1hdGguYWJzKHMtaSkvUC5QSSksYzwyJiYoYz0yKSxsPDImJihsPTIpO2xldCBwPTAsZD0xLGg9bi54IT09ZS54fHxuLnkhPT1lLnl8fG4ueiE9PWUueixfPSExLGc9ITE7aCYmKGQ9MixpPjAmJihfPSEwLHArPWMpLHM8TWF0aC5QSSYmKGc9ITAscCs9YykpO2xldCBiPWYqZCoobCtjKSx3PW5ldyBGbG9hdDY0QXJyYXkoYiozKSxPPTIqKGIrcC0oYytsKSpkKSxFPUx0LmNyZWF0ZVR5cGVkQXJyYXkoYixPKSxULHgsTSxOLEY9MCxJPW5ldyBBcnJheShsKSx2PW5ldyBBcnJheShsKTtmb3IoVD0wO1Q8bDtUKyspTj1pK1QqKHMtaSkvKGwtMSksSVtUXT1FZChOKSx2W1RdPU9kKE4pO2xldCBCPW5ldyBBcnJheShmKSxBPW5ldyBBcnJheShmKTtmb3IoVD0wO1Q8ZjtUKyspTT1vK1QqKHItbykvKGYtMSksQltUXT1FZChNKSxBW1RdPU9kKE0pO2ZvcihUPTA7VDxsO1QrKylmb3IoeD0wO3g8Zjt4Kyspd1tGKytdPWUueCpJW1RdKkFbeF0sd1tGKytdPWUueSpJW1RdKkJbeF0sd1tGKytdPWUueip2W1RdO2lmKGgpZm9yKFQ9MDtUPGw7VCsrKWZvcih4PTA7eDxmO3grKyl3W0YrK109bi54KklbVF0qQVt4XSx3W0YrK109bi55KklbVF0qQlt4XSx3W0YrK109bi56KnZbVF07Zm9yKEkubGVuZ3RoPWYsdi5sZW5ndGg9ZixUPTA7VDxmO1QrKylOPWkrVCoocy1pKS8oZi0xKSxJW1RdPUVkKE4pLHZbVF09T2QoTik7Zm9yKEIubGVuZ3RoPWMsQS5sZW5ndGg9YyxUPTA7VDxjO1QrKylNPW8rVCooci1vKS8oYy0xKSxCW1RdPUVkKE0pLEFbVF09T2QoTSk7Zm9yKFQ9MDtUPGY7VCsrKWZvcih4PTA7eDxjO3grKyl3W0YrK109ZS54KklbVF0qQVt4XSx3W0YrK109ZS55KklbVF0qQlt4XSx3W0YrK109ZS56KnZbVF07aWYoaClmb3IoVD0wO1Q8ZjtUKyspZm9yKHg9MDt4PGM7eCsrKXdbRisrXT1uLngqSVtUXSpBW3hdLHdbRisrXT1uLnkqSVtUXSpCW3hdLHdbRisrXT1uLnoqdltUXTtmb3IoRj0wLFQ9MDtUPGwqZDtUKyspe2xldCBMPVQqZjtmb3IoeD0wO3g8Zi0xO3grKylFW0YrK109TCt4LEVbRisrXT1MK3grMX1sZXQgUz1sKmYqZDtmb3IoVD0wO1Q8YztUKyspZm9yKHg9MDt4PGYtMTt4KyspRVtGKytdPVMrVCt4KmMsRVtGKytdPVMrVCsoeCsxKSpjO2lmKGgpZm9yKFM9bCpmKmQrYypmLFQ9MDtUPGM7VCsrKWZvcih4PTA7eDxmLTE7eCsrKUVbRisrXT1TK1QreCpjLEVbRisrXT1TK1QrKHgrMSkqYztpZihoKXtsZXQgTD1sKmYqZCx6PUwrZipjO2lmKF8pZm9yKFQ9MDtUPGM7VCsrKUVbRisrXT1MK1QsRVtGKytdPXorVDtpZihnKWZvcihMKz1mKmMtYyx6Kz1mKmMtYyxUPTA7VDxjO1QrKylFW0YrK109TCtULEVbRisrXT16K1R9bGV0IEM9bmV3IGllKHtwb3NpdGlvbjpuZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnd9KX0pO2lmKG0odC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IEw9dy5sZW5ndGgsej10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxqPW5ldyBVaW50OEFycmF5KEwvMykuZmlsbCh6KTtDLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmp9KX1yZXR1cm4gbmV3IFV0KHthdHRyaWJ1dGVzOkMsaW5kaWNlczpFLHByaW1pdGl2ZVR5cGU6QnQuTElORVMsYm91bmRpbmdTcGhlcmU6QXQuZnJvbUVsbGlwc29pZCh1KSxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O1hyPUVhfSk7dmFyIE1fPXt9O2xlKE1fLHtkZWZhdWx0OigpPT5ZRn0pO2Z1bmN0aW9uIFhGKHQsZSl7cmV0dXJuIG0odC5idWZmZXIsZSkmJih0PVhyLnVucGFjayh0LGUpKSxYci5jcmVhdGVHZW9tZXRyeSh0KX12YXIgWUYsTl89JCgoKT0+e2Z0KCk7UF8oKTtZRj1YRn0pO2Z1bmN0aW9uIEVyKHQpe3RoaXMucGxhbmVzPXQ/P1tdfXZhciBLZixicywkRix2TyxSZCxJXz0kKCgpPT57RHQoKTtfcigpO2Z0KCk7SHQoKTtWcygpO3VzKCk7S2Y9W25ldyBhLG5ldyBhLG5ldyBhXTthLmNsb25lKGEuVU5JVF9YLEtmWzBdKTthLmNsb25lKGEuVU5JVF9ZLEtmWzFdKTthLmNsb25lKGEuVU5JVF9aLEtmWzJdKTticz1uZXcgYSwkRj1uZXcgYSx2Tz1uZXcgb24obmV3IGEoMSwwLDApLDApO0VyLmZyb21Cb3VuZGluZ1NwaGVyZT1mdW5jdGlvbih0LGUpe2lmKCFtKHQpKXRocm93IG5ldyBEKCJib3VuZGluZ1NwaGVyZSBpcyByZXF1aXJlZC4iKTttKGUpfHwoZT1uZXcgRXIpO2xldCBuPUtmLmxlbmd0aCxvPWUucGxhbmVzO28ubGVuZ3RoPTIqbjtsZXQgcj10LmNlbnRlcixpPXQucmFkaXVzLHM9MDtmb3IobGV0IGY9MDtmPG47KytmKXtsZXQgdT1LZltmXSxjPW9bc10sbD1vW3MrMV07bShjKXx8KGM9b1tzXT1uZXcgbWUpLG0obCl8fChsPW9bcysxXT1uZXcgbWUpLGEubXVsdGlwbHlCeVNjYWxhcih1LC1pLGJzKSxhLmFkZChyLGJzLGJzKSxjLng9dS54LGMueT11LnksYy56PXUueixjLnc9LWEuZG90KHUsYnMpLGEubXVsdGlwbHlCeVNjYWxhcih1LGksYnMpLGEuYWRkKHIsYnMsYnMpLGwueD0tdS54LGwueT0tdS55LGwuej0tdS56LGwudz0tYS5kb3QoYS5uZWdhdGUodSwkRiksYnMpLHMrPTJ9cmV0dXJuIGV9O0VyLnByb3RvdHlwZS5jb21wdXRlVmlzaWJpbGl0eT1mdW5jdGlvbih0KXtpZighbSh0KSl0aHJvdyBuZXcgRCgiYm91bmRpbmdWb2x1bWUgaXMgcmVxdWlyZWQuIik7bGV0IGU9dGhpcy5wbGFuZXMsbj0hMTtmb3IobGV0IG89MCxyPWUubGVuZ3RoO288cjsrK28pe2xldCBpPXQuaW50ZXJzZWN0UGxhbmUob24uZnJvbUNhcnRlc2lhbjQoZVtvXSx2TykpO2lmKGk9PT1Tbi5PVVRTSURFKXJldHVybiBTbi5PVVRTSURFO2k9PT1Tbi5JTlRFUlNFQ1RJTkcmJihuPSEwKX1yZXR1cm4gbj9Tbi5JTlRFUlNFQ1RJTkc6U24uSU5TSURFfTtFci5wcm90b3R5cGUuY29tcHV0ZVZpc2liaWxpdHlXaXRoUGxhbmVNYXNrPWZ1bmN0aW9uKHQsZSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoImJvdW5kaW5nVm9sdW1lIGlzIHJlcXVpcmVkLiIpO2lmKCFtKGUpKXRocm93IG5ldyBEKCJwYXJlbnRQbGFuZU1hc2sgaXMgcmVxdWlyZWQuIik7aWYoZT09PUVyLk1BU0tfT1VUU0lERXx8ZT09PUVyLk1BU0tfSU5TSURFKXJldHVybiBlO2xldCBuPUVyLk1BU0tfSU5TSURFLG89dGhpcy5wbGFuZXM7Zm9yKGxldCByPTAsaT1vLmxlbmd0aDtyPGk7KytyKXtsZXQgcz1yPDMxPzE8PHI6MDtpZihyPDMxJiYoZSZzKT09PTApY29udGludWU7bGV0IGY9dC5pbnRlcnNlY3RQbGFuZShvbi5mcm9tQ2FydGVzaWFuNChvW3JdLHZPKSk7aWYoZj09PVNuLk9VVFNJREUpcmV0dXJuIEVyLk1BU0tfT1VUU0lERTtmPT09U24uSU5URVJTRUNUSU5HJiYobnw9cyl9cmV0dXJuIG59O0VyLk1BU0tfT1VUU0lERT00Mjk0OTY3Mjk1O0VyLk1BU0tfSU5TSURFPTA7RXIuTUFTS19JTkRFVEVSTUlOQVRFPTIxNDc0ODM2NDc7UmQ9RXJ9KTtmdW5jdGlvbiBwaSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMuX2xlZnQ9dm9pZCAwLHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLl9yaWdodD12b2lkIDAsdGhpcy50b3A9dC50b3AsdGhpcy5fdG9wPXZvaWQgMCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLl9ib3R0b209dm9pZCAwLHRoaXMubmVhcj10Lm5lYXI/PzEsdGhpcy5fbmVhcj10aGlzLm5lYXIsdGhpcy5mYXI9dC5mYXI/PzVlOCx0aGlzLl9mYXI9dGhpcy5mYXIsdGhpcy5fY3VsbGluZ1ZvbHVtZT1uZXcgUmQsdGhpcy5fb3J0aG9ncmFwaGljTWF0cml4PW5ldyBzdH1mdW5jdGlvbiBGTyh0KXtpZighbSh0LnJpZ2h0KXx8IW0odC5sZWZ0KXx8IW0odC50b3ApfHwhbSh0LmJvdHRvbSl8fCFtKHQubmVhcil8fCFtKHQuZmFyKSl0aHJvdyBuZXcgRCgicmlnaHQsIGxlZnQsIHRvcCwgYm90dG9tLCBuZWFyLCBvciBmYXIgcGFyYW1ldGVycyBhcmUgbm90IHNldC4iKTtpZih0LnRvcCE9PXQuX3RvcHx8dC5ib3R0b20hPT10Ll9ib3R0b218fHQubGVmdCE9PXQuX2xlZnR8fHQucmlnaHQhPT10Ll9yaWdodHx8dC5uZWFyIT09dC5fbmVhcnx8dC5mYXIhPT10Ll9mYXIpe2lmKHQubGVmdD50LnJpZ2h0KXRocm93IG5ldyBEKCJyaWdodCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBsZWZ0LiIpO2lmKHQuYm90dG9tPnQudG9wKXRocm93IG5ldyBEKCJ0b3AgbXVzdCBiZSBncmVhdGVyIHRoYW4gYm90dG9tLiIpO2lmKHQubmVhcjw9MHx8dC5uZWFyPnQuZmFyKXRocm93IG5ldyBEKCJuZWFyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGxlc3MgdGhhbiBmYXIuIik7dC5fbGVmdD10LmxlZnQsdC5fcmlnaHQ9dC5yaWdodCx0Ll90b3A9dC50b3AsdC5fYm90dG9tPXQuYm90dG9tLHQuX25lYXI9dC5uZWFyLHQuX2Zhcj10LmZhcix0Ll9vcnRob2dyYXBoaWNNYXRyaXg9c3QuY29tcHV0ZU9ydGhvZ3JhcGhpY09mZkNlbnRlcih0LmxlZnQsdC5yaWdodCx0LmJvdHRvbSx0LnRvcCx0Lm5lYXIsdC5mYXIsdC5fb3J0aG9ncmFwaGljTWF0cml4KX19dmFyIFpGLFFGLEpGLHZfLExPLERPPSQoKCk9PntEdCgpO19yKCk7SV8oKTt5ZSgpO2Z0KCk7SHQoKTtLdCgpO2tuKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocGkucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRk8odGhpcyksdGhpcy5fb3J0aG9ncmFwaGljTWF0cml4fX19KTtaRj1uZXcgYSxRRj1uZXcgYSxKRj1uZXcgYSx2Xz1uZXcgYTtwaS5wcm90b3R5cGUuY29tcHV0ZUN1bGxpbmdWb2x1bWU9ZnVuY3Rpb24odCxlLG4pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJwb3NpdGlvbiBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgiZGlyZWN0aW9uIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG4pKXRocm93IG5ldyBEKCJ1cCBpcyByZXF1aXJlZC4iKTtsZXQgbz10aGlzLl9jdWxsaW5nVm9sdW1lLnBsYW5lcyxyPXRoaXMudG9wLGk9dGhpcy5ib3R0b20scz10aGlzLnJpZ2h0LGY9dGhpcy5sZWZ0LHU9dGhpcy5uZWFyLGM9dGhpcy5mYXIsbD1hLmNyb3NzKGUsbixaRik7YS5ub3JtYWxpemUobCxsKTtsZXQgcD1RRjthLm11bHRpcGx5QnlTY2FsYXIoZSx1LHApLGEuYWRkKHQscCxwKTtsZXQgZD1KRjthLm11bHRpcGx5QnlTY2FsYXIobCxmLGQpLGEuYWRkKHAsZCxkKTtsZXQgaD1vWzBdO3JldHVybiBtKGgpfHwoaD1vWzBdPW5ldyBtZSksaC54PWwueCxoLnk9bC55LGguej1sLnosaC53PS1hLmRvdChsLGQpLGEubXVsdGlwbHlCeVNjYWxhcihsLHMsZCksYS5hZGQocCxkLGQpLGg9b1sxXSxtKGgpfHwoaD1vWzFdPW5ldyBtZSksaC54PS1sLngsaC55PS1sLnksaC56PS1sLnosaC53PS1hLmRvdChhLm5lZ2F0ZShsLHZfKSxkKSxhLm11bHRpcGx5QnlTY2FsYXIobixpLGQpLGEuYWRkKHAsZCxkKSxoPW9bMl0sbShoKXx8KGg9b1syXT1uZXcgbWUpLGgueD1uLngsaC55PW4ueSxoLno9bi56LGgudz0tYS5kb3QobixkKSxhLm11bHRpcGx5QnlTY2FsYXIobixyLGQpLGEuYWRkKHAsZCxkKSxoPW9bM10sbShoKXx8KGg9b1szXT1uZXcgbWUpLGgueD0tbi54LGgueT0tbi55LGguej0tbi56LGgudz0tYS5kb3QoYS5uZWdhdGUobix2XyksZCksaD1vWzRdLG0oaCl8fChoPW9bNF09bmV3IG1lKSxoLng9ZS54LGgueT1lLnksaC56PWUueixoLnc9LWEuZG90KGUscCksYS5tdWx0aXBseUJ5U2NhbGFyKGUsYyxkKSxhLmFkZCh0LGQsZCksaD1vWzVdLG0oaCl8fChoPW9bNV09bmV3IG1lKSxoLng9LWUueCxoLnk9LWUueSxoLno9LWUueixoLnc9LWEuZG90KGEubmVnYXRlKGUsdl8pLGQpLHRoaXMuX2N1bGxpbmdWb2x1bWV9O3BpLnByb3RvdHlwZS5nZXRQaXhlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlLG4sbyxyKXtpZihGTyh0aGlzKSwhbSh0KXx8IW0oZSkpdGhyb3cgbmV3IEQoIkJvdGggZHJhd2luZ0J1ZmZlcldpZHRoIGFuZCBkcmF3aW5nQnVmZmVySGVpZ2h0IGFyZSByZXF1aXJlZC4iKTtpZih0PD0wKXRocm93IG5ldyBEKCJkcmF3aW5nQnVmZmVyV2lkdGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtpZihlPD0wKXRocm93IG5ldyBEKCJkcmF3aW5nQnVmZmVySGVpZ2h0IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYoIW0obikpdGhyb3cgbmV3IEQoImRpc3RhbmNlIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG8pKXRocm93IG5ldyBEKCJwaXhlbFJhdGlvIGlzIHJlcXVpcmVkLiIpO2lmKG88PTApdGhyb3cgbmV3IEQoInBpeGVsUmF0aW8gbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtpZighbShyKSl0aHJvdyBuZXcgRCgiQSByZXN1bHQgb2JqZWN0IGlzIHJlcXVpcmVkLiIpO2xldCBpPXRoaXMucmlnaHQtdGhpcy5sZWZ0LHM9dGhpcy50b3AtdGhpcy5ib3R0b20sZj1vKmkvdCx1PW8qcy9lO3JldHVybiByLng9ZixyLnk9dSxyfTtwaS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCl8fCh0PW5ldyBwaSksdC5sZWZ0PXRoaXMubGVmdCx0LnJpZ2h0PXRoaXMucmlnaHQsdC50b3A9dGhpcy50b3AsdC5ib3R0b209dGhpcy5ib3R0b20sdC5uZWFyPXRoaXMubmVhcix0LmZhcj10aGlzLmZhcix0Ll9sZWZ0PXZvaWQgMCx0Ll9yaWdodD12b2lkIDAsdC5fdG9wPXZvaWQgMCx0Ll9ib3R0b209dm9pZCAwLHQuX25lYXI9dm9pZCAwLHQuX2Zhcj12b2lkIDAsdH07cGkucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gbSh0KSYmdCBpbnN0YW5jZW9mIHBpJiZ0aGlzLnJpZ2h0PT09dC5yaWdodCYmdGhpcy5sZWZ0PT09dC5sZWZ0JiZ0aGlzLnRvcD09PXQudG9wJiZ0aGlzLmJvdHRvbT09PXQuYm90dG9tJiZ0aGlzLm5lYXI9PT10Lm5lYXImJnRoaXMuZmFyPT09dC5mYXJ9O3BpLnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD09PXRoaXN8fG0odCkmJnQgaW5zdGFuY2VvZiBwaSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMucmlnaHQsdC5yaWdodCxlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5sZWZ0LHQubGVmdCxlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy50b3AsdC50b3AsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMuYm90dG9tLHQuYm90dG9tLGUsbikmJlAuZXF1YWxzRXBzaWxvbih0aGlzLm5lYXIsdC5uZWFyLGUsbikmJlAuZXF1YWxzRXBzaWxvbih0aGlzLmZhcix0LmZhcixlLG4pfTtMTz1waX0pO2Z1bmN0aW9uIG5yKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNULHRoaXMuX29mZkNlbnRlckZydXN0dW09bmV3IExPLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLl93aWR0aD12b2lkIDAsdGhpcy5hc3BlY3RSYXRpbz10LmFzcGVjdFJhdGlvLHRoaXMuX2FzcGVjdFJhdGlvPXZvaWQgMCx0aGlzLm5lYXI9dC5uZWFyPz8xLHRoaXMuX25lYXI9dGhpcy5uZWFyLHRoaXMuZmFyPXQuZmFyPz81ZTgsdGhpcy5fZmFyPXRoaXMuZmFyfWZ1bmN0aW9uIHdzKHQpe2lmKCFtKHQud2lkdGgpfHwhbSh0LmFzcGVjdFJhdGlvKXx8IW0odC5uZWFyKXx8IW0odC5mYXIpKXRocm93IG5ldyBEKCJ3aWR0aCwgYXNwZWN0UmF0aW8sIG5lYXIsIG9yIGZhciBwYXJhbWV0ZXJzIGFyZSBub3Qgc2V0LiIpO2xldCBlPXQuX29mZkNlbnRlckZydXN0dW07aWYodC53aWR0aCE9PXQuX3dpZHRofHx0LmFzcGVjdFJhdGlvIT09dC5fYXNwZWN0UmF0aW98fHQubmVhciE9PXQuX25lYXJ8fHQuZmFyIT09dC5fZmFyKXtpZih0LmFzcGVjdFJhdGlvPDApdGhyb3cgbmV3IEQoImFzcGVjdFJhdGlvIG11c3QgYmUgcG9zaXRpdmUuIik7aWYodC5uZWFyPDB8fHQubmVhcj50LmZhcil0aHJvdyBuZXcgRCgibmVhciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBsZXNzIHRoYW4gZmFyLiIpO3QuX2FzcGVjdFJhdGlvPXQuYXNwZWN0UmF0aW8sdC5fd2lkdGg9dC53aWR0aCx0Ll9uZWFyPXQubmVhcix0Ll9mYXI9dC5mYXI7bGV0IG49MS90LmFzcGVjdFJhdGlvO2UucmlnaHQ9dC53aWR0aCouNSxlLmxlZnQ9LWUucmlnaHQsZS50b3A9biplLnJpZ2h0LGUuYm90dG9tPS1lLnRvcCxlLm5lYXI9dC5uZWFyLGUuZmFyPXQuZmFyfX12YXIgTW8sRl89JCgoKT0+e1d0KCk7eWUoKTtmdCgpO0h0KCk7S3QoKTtETygpO25yLnBhY2tlZExlbmd0aD00O25yLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXQud2lkdGgsZVtuKytdPXQuYXNwZWN0UmF0aW8sZVtuKytdPXQubmVhcixlW25dPXQuZmFyLGV9O25yLnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MCxtKG4pfHwobj1uZXcgbnIpLG4ud2lkdGg9dFtlKytdLG4uYXNwZWN0UmF0aW89dFtlKytdLG4ubmVhcj10W2UrK10sbi5mYXI9dFtlXSxufTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuci5wcm90b3R5cGUse3Byb2plY3Rpb25NYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiB3cyh0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLnByb2plY3Rpb25NYXRyaXh9fSxvZmZDZW50ZXJGcnVzdHVtOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gd3ModGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bX19fSk7bnIucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gd3ModGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5jb21wdXRlQ3VsbGluZ1ZvbHVtZSh0LGUsbil9O25yLnByb3RvdHlwZS5nZXRQaXhlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlLG4sbyxyKXtyZXR1cm4gd3ModGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5nZXRQaXhlbERpbWVuc2lvbnModCxlLG4sbyxyKX07bnIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQpfHwodD1uZXcgbnIpLHQuYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyx0LndpZHRoPXRoaXMud2lkdGgsdC5uZWFyPXRoaXMubmVhcix0LmZhcj10aGlzLmZhcix0Ll9hc3BlY3RSYXRpbz12b2lkIDAsdC5fd2lkdGg9dm9pZCAwLHQuX25lYXI9dm9pZCAwLHQuX2Zhcj12b2lkIDAsdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5jbG9uZSh0Ll9vZmZDZW50ZXJGcnVzdHVtKSx0fTtuci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiFtKHQpfHwhKHQgaW5zdGFuY2VvZiBucik/ITE6KHdzKHRoaXMpLHdzKHQpLHRoaXMud2lkdGg9PT10LndpZHRoJiZ0aGlzLmFzcGVjdFJhdGlvPT09dC5hc3BlY3RSYXRpbyYmdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5lcXVhbHModC5fb2ZmQ2VudGVyRnJ1c3R1bSkpfTtuci5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIW0odCl8fCEodCBpbnN0YW5jZW9mIG5yKT8hMTood3ModGhpcyksd3ModCksUC5lcXVhbHNFcHNpbG9uKHRoaXMud2lkdGgsdC53aWR0aCxlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5hc3BlY3RSYXRpbyx0LmFzcGVjdFJhdGlvLGUsbikmJnRoaXMuX29mZkNlbnRlckZydXN0dW0uZXF1YWxzRXBzaWxvbih0Ll9vZmZDZW50ZXJGcnVzdHVtLGUsbikpfTtNbz1ucn0pO2Z1bmN0aW9uIGRpKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNULHRoaXMubGVmdD10LmxlZnQsdGhpcy5fbGVmdD12b2lkIDAsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMuX3JpZ2h0PXZvaWQgMCx0aGlzLnRvcD10LnRvcCx0aGlzLl90b3A9dm9pZCAwLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMuX2JvdHRvbT12b2lkIDAsdGhpcy5uZWFyPXQubmVhcj8/MSx0aGlzLl9uZWFyPXRoaXMubmVhcix0aGlzLmZhcj10LmZhcj8/NWU4LHRoaXMuX2Zhcj10aGlzLmZhcix0aGlzLl9jdWxsaW5nVm9sdW1lPW5ldyBSZCx0aGlzLl9wZXJzcGVjdGl2ZU1hdHJpeD1uZXcgc3QsdGhpcy5faW5maW5pdGVQZXJzcGVjdGl2ZT1uZXcgc3R9ZnVuY3Rpb24gTF8odCl7aWYoIW0odC5yaWdodCl8fCFtKHQubGVmdCl8fCFtKHQudG9wKXx8IW0odC5ib3R0b20pfHwhbSh0Lm5lYXIpfHwhbSh0LmZhcikpdGhyb3cgbmV3IEQoInJpZ2h0LCBsZWZ0LCB0b3AsIGJvdHRvbSwgbmVhciwgb3IgZmFyIHBhcmFtZXRlcnMgYXJlIG5vdCBzZXQuIik7bGV0e3RvcDplLGJvdHRvbTpuLHJpZ2h0Om8sbGVmdDpyLG5lYXI6aSxmYXI6c309dDtpZihlIT09dC5fdG9wfHxuIT09dC5fYm90dG9tfHxyIT09dC5fbGVmdHx8byE9PXQuX3JpZ2h0fHxpIT09dC5fbmVhcnx8cyE9PXQuX2Zhcil7aWYodC5uZWFyPD0wfHx0Lm5lYXI+dC5mYXIpdGhyb3cgbmV3IEQoIm5lYXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyBhbmQgbGVzcyB0aGFuIGZhci4iKTt0Ll9sZWZ0PXIsdC5fcmlnaHQ9byx0Ll90b3A9ZSx0Ll9ib3R0b209bix0Ll9uZWFyPWksdC5fZmFyPXMsdC5fcGVyc3BlY3RpdmVNYXRyaXg9c3QuY29tcHV0ZVBlcnNwZWN0aXZlT2ZmQ2VudGVyKHIsbyxuLGUsaSxzLHQuX3BlcnNwZWN0aXZlTWF0cml4KSx0Ll9pbmZpbml0ZVBlcnNwZWN0aXZlPXN0LmNvbXB1dGVJbmZpbml0ZVBlcnNwZWN0aXZlT2ZmQ2VudGVyKHIsbyxuLGUsaSx0Ll9pbmZpbml0ZVBlcnNwZWN0aXZlKX19dmFyIHRMLGVMLG5MLG9MLEJPLFVPPSQoKCk9PntEdCgpO19yKCk7SV8oKTt5ZSgpO2Z0KCk7SHQoKTtLdCgpO2tuKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZGkucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTF8odGhpcyksdGhpcy5fcGVyc3BlY3RpdmVNYXRyaXh9fSxpbmZpbml0ZVByb2plY3Rpb25NYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBMXyh0aGlzKSx0aGlzLl9pbmZpbml0ZVBlcnNwZWN0aXZlfX19KTt0TD1uZXcgYSxlTD1uZXcgYSxuTD1uZXcgYSxvTD1uZXcgYTtkaS5wcm90b3R5cGUuY29tcHV0ZUN1bGxpbmdWb2x1bWU9ZnVuY3Rpb24odCxlLG4pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJwb3NpdGlvbiBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgiZGlyZWN0aW9uIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG4pKXRocm93IG5ldyBEKCJ1cCBpcyByZXF1aXJlZC4iKTtsZXQgbz10aGlzLl9jdWxsaW5nVm9sdW1lLnBsYW5lcyxyPXRoaXMudG9wLGk9dGhpcy5ib3R0b20scz10aGlzLnJpZ2h0LGY9dGhpcy5sZWZ0LHU9dGhpcy5uZWFyLGM9dGhpcy5mYXIsbD1hLmNyb3NzKGUsbix0TCkscD1lTDthLm11bHRpcGx5QnlTY2FsYXIoZSx1LHApLGEuYWRkKHQscCxwKTtsZXQgZD1uTDthLm11bHRpcGx5QnlTY2FsYXIoZSxjLGQpLGEuYWRkKHQsZCxkKTtsZXQgaD1vTDthLm11bHRpcGx5QnlTY2FsYXIobCxmLGgpLGEuYWRkKHAsaCxoKSxhLnN1YnRyYWN0KGgsdCxoKSxhLm5vcm1hbGl6ZShoLGgpLGEuY3Jvc3MoaCxuLGgpLGEubm9ybWFsaXplKGgsaCk7bGV0IF89b1swXTtyZXR1cm4gbShfKXx8KF89b1swXT1uZXcgbWUpLF8ueD1oLngsXy55PWgueSxfLno9aC56LF8udz0tYS5kb3QoaCx0KSxhLm11bHRpcGx5QnlTY2FsYXIobCxzLGgpLGEuYWRkKHAsaCxoKSxhLnN1YnRyYWN0KGgsdCxoKSxhLmNyb3NzKG4saCxoKSxhLm5vcm1hbGl6ZShoLGgpLF89b1sxXSxtKF8pfHwoXz1vWzFdPW5ldyBtZSksXy54PWgueCxfLnk9aC55LF8uej1oLnosXy53PS1hLmRvdChoLHQpLGEubXVsdGlwbHlCeVNjYWxhcihuLGksaCksYS5hZGQocCxoLGgpLGEuc3VidHJhY3QoaCx0LGgpLGEuY3Jvc3MobCxoLGgpLGEubm9ybWFsaXplKGgsaCksXz1vWzJdLG0oXyl8fChfPW9bMl09bmV3IG1lKSxfLng9aC54LF8ueT1oLnksXy56PWgueixfLnc9LWEuZG90KGgsdCksYS5tdWx0aXBseUJ5U2NhbGFyKG4scixoKSxhLmFkZChwLGgsaCksYS5zdWJ0cmFjdChoLHQsaCksYS5jcm9zcyhoLGwsaCksYS5ub3JtYWxpemUoaCxoKSxfPW9bM10sbShfKXx8KF89b1szXT1uZXcgbWUpLF8ueD1oLngsXy55PWgueSxfLno9aC56LF8udz0tYS5kb3QoaCx0KSxfPW9bNF0sbShfKXx8KF89b1s0XT1uZXcgbWUpLF8ueD1lLngsXy55PWUueSxfLno9ZS56LF8udz0tYS5kb3QoZSxwKSxhLm5lZ2F0ZShlLGgpLF89b1s1XSxtKF8pfHwoXz1vWzVdPW5ldyBtZSksXy54PWgueCxfLnk9aC55LF8uej1oLnosXy53PS1hLmRvdChoLGQpLHRoaXMuX2N1bGxpbmdWb2x1bWV9O2RpLnByb3RvdHlwZS5nZXRQaXhlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlLG4sbyxyKXtpZihMXyh0aGlzKSwhbSh0KXx8IW0oZSkpdGhyb3cgbmV3IEQoIkJvdGggZHJhd2luZ0J1ZmZlcldpZHRoIGFuZCBkcmF3aW5nQnVmZmVySGVpZ2h0IGFyZSByZXF1aXJlZC4iKTtpZih0PD0wKXRocm93IG5ldyBEKCJkcmF3aW5nQnVmZmVyV2lkdGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtpZihlPD0wKXRocm93IG5ldyBEKCJkcmF3aW5nQnVmZmVySGVpZ2h0IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYoIW0obikpdGhyb3cgbmV3IEQoImRpc3RhbmNlIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG8pKXRocm93IG5ldyBEKCJwaXhlbFJhdGlvIGlzIHJlcXVpcmVkIik7aWYobzw9MCl0aHJvdyBuZXcgRCgicGl4ZWxSYXRpbyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpO2lmKCFtKHIpKXRocm93IG5ldyBEKCJBIHJlc3VsdCBvYmplY3QgaXMgcmVxdWlyZWQuIik7bGV0IGk9MS90aGlzLm5lYXIscz10aGlzLnRvcCppLGY9MipvKm4qcy9lO3M9dGhpcy5yaWdodCppO2xldCB1PTIqbypuKnMvdDtyZXR1cm4gci54PXUsci55PWYscn07ZGkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQpfHwodD1uZXcgZGkpLHQucmlnaHQ9dGhpcy5yaWdodCx0LmxlZnQ9dGhpcy5sZWZ0LHQudG9wPXRoaXMudG9wLHQuYm90dG9tPXRoaXMuYm90dG9tLHQubmVhcj10aGlzLm5lYXIsdC5mYXI9dGhpcy5mYXIsdC5fbGVmdD12b2lkIDAsdC5fcmlnaHQ9dm9pZCAwLHQuX3RvcD12b2lkIDAsdC5fYm90dG9tPXZvaWQgMCx0Ll9uZWFyPXZvaWQgMCx0Ll9mYXI9dm9pZCAwLHR9O2RpLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCkmJnQgaW5zdGFuY2VvZiBkaSYmdGhpcy5yaWdodD09PXQucmlnaHQmJnRoaXMubGVmdD09PXQubGVmdCYmdGhpcy50b3A9PT10LnRvcCYmdGhpcy5ib3R0b209PT10LmJvdHRvbSYmdGhpcy5uZWFyPT09dC5uZWFyJiZ0aGlzLmZhcj09PXQuZmFyfTtkaS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9PT10aGlzfHxtKHQpJiZ0IGluc3RhbmNlb2YgZGkmJlAuZXF1YWxzRXBzaWxvbih0aGlzLnJpZ2h0LHQucmlnaHQsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMubGVmdCx0LmxlZnQsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMudG9wLHQudG9wLGUsbikmJlAuZXF1YWxzRXBzaWxvbih0aGlzLmJvdHRvbSx0LmJvdHRvbSxlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5uZWFyLHQubmVhcixlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5mYXIsdC5mYXIsZSxuKX07Qk89ZGl9KTtmdW5jdGlvbiBvcih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtPW5ldyBCTyx0aGlzLmZvdj10LmZvdix0aGlzLl9mb3Y9dm9pZCAwLHRoaXMuX2Zvdnk9dm9pZCAwLHRoaXMuX3NzZURlbm9taW5hdG9yPXZvaWQgMCx0aGlzLmFzcGVjdFJhdGlvPXQuYXNwZWN0UmF0aW8sdGhpcy5fYXNwZWN0UmF0aW89dm9pZCAwLHRoaXMubmVhcj10Lm5lYXI/PzEsdGhpcy5fbmVhcj10aGlzLm5lYXIsdGhpcy5mYXI9dC5mYXI/PzVlOCx0aGlzLl9mYXI9dGhpcy5mYXIsdGhpcy54T2Zmc2V0PXQueE9mZnNldD8/MCx0aGlzLl94T2Zmc2V0PXRoaXMueE9mZnNldCx0aGlzLnlPZmZzZXQ9dC55T2Zmc2V0Pz8wLHRoaXMuX3lPZmZzZXQ9dGhpcy55T2Zmc2V0fWZ1bmN0aW9uIFlyKHQpe2lmKCFtKHQuZm92KXx8IW0odC5hc3BlY3RSYXRpbyl8fCFtKHQubmVhcil8fCFtKHQuZmFyKSl0aHJvdyBuZXcgRCgiZm92LCBhc3BlY3RSYXRpbywgbmVhciwgb3IgZmFyIHBhcmFtZXRlcnMgYXJlIG5vdCBzZXQuIik7aWYoISh0LmZvdiE9PXQuX2Zvdnx8dC5hc3BlY3RSYXRpbyE9PXQuX2FzcGVjdFJhdGlvfHx0Lm5lYXIhPT10Ll9uZWFyfHx0LmZhciE9PXQuX2Zhcnx8dC54T2Zmc2V0IT09dC5feE9mZnNldHx8dC55T2Zmc2V0IT09dC5feU9mZnNldCkpcmV0dXJuO2lmKHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJmb3YiLHQuZm92LDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbigiZm92Iix0LmZvdixNYXRoLlBJKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiYXNwZWN0UmF0aW8iLHQuYXNwZWN0UmF0aW8sMCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm5lYXIiLHQubmVhciwwKSx0Lm5lYXI+dC5mYXIpdGhyb3cgbmV3IEQoIm5lYXIgbXVzdCBiZSBsZXNzIHRoYW4gZmFyLiIpO3QuX2FzcGVjdFJhdGlvPXQuYXNwZWN0UmF0aW8sdC5fZm92PXQuZm92LHQuX2Zvdnk9dC5hc3BlY3RSYXRpbzw9MT90LmZvdjpNYXRoLmF0YW4oTWF0aC50YW4odC5mb3YqLjUpL3QuYXNwZWN0UmF0aW8pKjIsdC5fbmVhcj10Lm5lYXIsdC5fZmFyPXQuZmFyLHQuX3NzZURlbm9taW5hdG9yPTIqTWF0aC50YW4oLjUqdC5fZm92eSksdC5feE9mZnNldD10LnhPZmZzZXQsdC5feU9mZnNldD10LnlPZmZzZXQ7bGV0IG49dC5fb2ZmQ2VudGVyRnJ1c3R1bTtuLnRvcD10Lm5lYXIqTWF0aC50YW4oLjUqdC5fZm92eSksbi5ib3R0b209LW4udG9wLG4ucmlnaHQ9dC5hc3BlY3RSYXRpbypuLnRvcCxuLmxlZnQ9LW4ucmlnaHQsbi5uZWFyPXQubmVhcixuLmZhcj10LmZhcixuLnJpZ2h0Kz10LnhPZmZzZXQsbi5sZWZ0Kz10LnhPZmZzZXQsbi50b3ArPXQueU9mZnNldCxuLmJvdHRvbSs9dC55T2Zmc2V0fXZhciBObyxEXz0kKCgpPT57V3QoKTt5ZSgpO2Z0KCk7SHQoKTtLdCgpO1VPKCk7b3IucGFja2VkTGVuZ3RoPTY7b3IucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dC5mb3YsZVtuKytdPXQuYXNwZWN0UmF0aW8sZVtuKytdPXQubmVhcixlW24rK109dC5mYXIsZVtuKytdPXQueE9mZnNldCxlW25dPXQueU9mZnNldCxlfTtvci51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsbShuKXx8KG49bmV3IG9yKSxuLmZvdj10W2UrK10sbi5hc3BlY3RSYXRpbz10W2UrK10sbi5uZWFyPXRbZSsrXSxuLmZhcj10W2UrK10sbi54T2Zmc2V0PXRbZSsrXSxuLnlPZmZzZXQ9dFtlXSxufTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvci5wcm90b3R5cGUse3Byb2plY3Rpb25NYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBZcih0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLnByb2plY3Rpb25NYXRyaXh9fSxpbmZpbml0ZVByb2plY3Rpb25NYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBZcih0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmluZmluaXRlUHJvamVjdGlvbk1hdHJpeH19LGZvdnk6e2dldDpmdW5jdGlvbigpe3JldHVybiBZcih0aGlzKSx0aGlzLl9mb3Z5fX0sc3NlRGVub21pbmF0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiBZcih0aGlzKSx0aGlzLl9zc2VEZW5vbWluYXRvcn19LG9mZkNlbnRlckZydXN0dW06e2dldDpmdW5jdGlvbigpe3JldHVybiBZcih0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtfX19KTtvci5wcm90b3R5cGUuY29tcHV0ZUN1bGxpbmdWb2x1bWU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBZcih0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmNvbXB1dGVDdWxsaW5nVm9sdW1lKHQsZSxuKX07b3IucHJvdG90eXBlLmdldFBpeGVsRGltZW5zaW9ucz1mdW5jdGlvbih0LGUsbixvLHIpe3JldHVybiBZcih0aGlzKSx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmdldFBpeGVsRGltZW5zaW9ucyh0LGUsbixvLHIpfTtvci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCl8fCh0PW5ldyBvciksdC5hc3BlY3RSYXRpbz10aGlzLmFzcGVjdFJhdGlvLHQuZm92PXRoaXMuZm92LHQubmVhcj10aGlzLm5lYXIsdC5mYXI9dGhpcy5mYXIsdC5fYXNwZWN0UmF0aW89dm9pZCAwLHQuX2Zvdj12b2lkIDAsdC5fbmVhcj12b2lkIDAsdC5fZmFyPXZvaWQgMCx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmNsb25lKHQuX29mZkNlbnRlckZydXN0dW0pLHR9O29yLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIW0odCl8fCEodCBpbnN0YW5jZW9mIG9yKT8hMTooWXIodGhpcyksWXIodCksdGhpcy5mb3Y9PT10LmZvdiYmdGhpcy5hc3BlY3RSYXRpbz09PXQuYXNwZWN0UmF0aW8mJnRoaXMuX29mZkNlbnRlckZydXN0dW0uZXF1YWxzKHQuX29mZkNlbnRlckZydXN0dW0pKX07b3IucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiFtKHQpfHwhKHQgaW5zdGFuY2VvZiBvcik/ITE6KFlyKHRoaXMpLFlyKHQpLFAuZXF1YWxzRXBzaWxvbih0aGlzLmZvdix0LmZvdixlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5hc3BlY3RSYXRpbyx0LmFzcGVjdFJhdGlvLGUsbikmJnRoaXMuX29mZkNlbnRlckZydXN0dW0uZXF1YWxzRXBzaWxvbih0Ll9vZmZDZW50ZXJGcnVzdHVtLGUsbikpfTtObz1vcn0pO2Z1bmN0aW9uIEFjKHQpe3kudHlwZU9mLm9iamVjdCgib3B0aW9ucyIsdCkseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLmZydXN0dW0iLHQuZnJ1c3R1bSkseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLm9yaWdpbiIsdC5vcmlnaW4pLHkudHlwZU9mLm9iamVjdCgib3B0aW9ucy5vcmllbnRhdGlvbiIsdC5vcmllbnRhdGlvbik7bGV0IGU9dC5mcnVzdHVtLG49dC5vcmllbnRhdGlvbixvPXQub3JpZ2luLHI9dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQsaT10Ll9kcmF3TmVhclBsYW5lPz8hMCxzLGY7ZSBpbnN0YW5jZW9mIE5vPyhzPVNkLGY9Tm8ucGFja2VkTGVuZ3RoKTplIGluc3RhbmNlb2YgTW8mJihzPXJMLGY9TW8ucGFja2VkTGVuZ3RoKSx0aGlzLl9mcnVzdHVtVHlwZT1zLHRoaXMuX2ZydXN0dW09ZS5jbG9uZSgpLHRoaXMuX29yaWdpbj1hLmNsb25lKG8pLHRoaXMuX29yaWVudGF0aW9uPXRlLmNsb25lKG4pLHRoaXMuX2RyYXdOZWFyUGxhbmU9aSx0aGlzLl92ZXJ0ZXhGb3JtYXQ9cix0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVGcnVzdHVtR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPTIrZithLnBhY2tlZExlbmd0aCt0ZS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RofWZ1bmN0aW9uIFJhKHQsZSxuLG8scixpLHMsZil7bGV0IHU9dC8zKjI7Zm9yKGxldCBjPTA7Yzw0OysrYyltKGUpJiYoZVt0XT1pLngsZVt0KzFdPWkueSxlW3QrMl09aS56KSxtKG4pJiYoblt0XT1zLngsblt0KzFdPXMueSxuW3QrMl09cy56KSxtKG8pJiYob1t0XT1mLngsb1t0KzFdPWYueSxvW3QrMl09Zi56KSx0Kz0zO3JbdV09MCxyW3UrMV09MCxyW3UrMl09MSxyW3UrM109MCxyW3UrNF09MSxyW3UrNV09MSxyW3UrNl09MCxyW3UrN109MX12YXIgU2QsckwsaUwsc0wsY0wsYUwsZkwsdUwsbEwsQl8sa08sR08sVk8scEwsZEwsbUwsVHMsV2Ysek8sWGYsVV89JCgoKT0+e3ZlKCk7RHQoKTtfcigpO1d0KCk7RGUoKTtmdCgpO1llKCk7JGUoKTthbigpO1VuKCk7a24oKTtGXygpO0RfKCk7dG4oKTtYbygpO3hvKCk7U2Q9MCxyTD0xO0FjLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MDtsZXQgbz10Ll9mcnVzdHVtVHlwZSxyPXQuX2ZydXN0dW07cmV0dXJuIGVbbisrXT1vLG89PT1TZD8oTm8ucGFjayhyLGUsbiksbis9Tm8ucGFja2VkTGVuZ3RoKTooTW8ucGFjayhyLGUsbiksbis9TW8ucGFja2VkTGVuZ3RoKSxhLnBhY2sodC5fb3JpZ2luLGUsbiksbis9YS5wYWNrZWRMZW5ndGgsdGUucGFjayh0Ll9vcmllbnRhdGlvbixlLG4pLG4rPXRlLnBhY2tlZExlbmd0aCxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPXB0LnBhY2tlZExlbmd0aCxlW25dPXQuX2RyYXdOZWFyUGxhbmU/MTowLGV9O2lMPW5ldyBObyxzTD1uZXcgTW8sY0w9bmV3IHRlLGFMPW5ldyBhLGZMPW5ldyBwdDtBYy51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz10W2UrK10scjtvPT09U2Q/KHI9Tm8udW5wYWNrKHQsZSxpTCksZSs9Tm8ucGFja2VkTGVuZ3RoKToocj1Nby51bnBhY2sodCxlLHNMKSxlKz1Nby5wYWNrZWRMZW5ndGgpO2xldCBpPWEudW5wYWNrKHQsZSxhTCk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IHM9dGUudW5wYWNrKHQsZSxjTCk7ZSs9dGUucGFja2VkTGVuZ3RoO2xldCBmPXB0LnVucGFjayh0LGUsZkwpO2UrPXB0LnBhY2tlZExlbmd0aDtsZXQgdT10W2VdPT09MTtpZighbShuKSlyZXR1cm4gbmV3IEFjKHtmcnVzdHVtOnIsb3JpZ2luOmksb3JpZW50YXRpb246cyx2ZXJ0ZXhGb3JtYXQ6ZixfZHJhd05lYXJQbGFuZTp1fSk7bGV0IGM9bz09PW4uX2ZydXN0dW1UeXBlP24uX2ZydXN0dW06dm9pZCAwO3JldHVybiBuLl9mcnVzdHVtPXIuY2xvbmUoYyksbi5fZnJ1c3R1bVR5cGU9byxuLl9vcmlnaW49YS5jbG9uZShpLG4uX29yaWdpbiksbi5fb3JpZW50YXRpb249dGUuY2xvbmUocyxuLl9vcmllbnRhdGlvbiksbi5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKGYsbi5fdmVydGV4Rm9ybWF0KSxuLl9kcmF3TmVhclBsYW5lPXUsbn07dUw9bmV3IFosbEw9bmV3IHN0LEJfPW5ldyBzdCxrTz1uZXcgYSxHTz1uZXcgYSxWTz1uZXcgYSxwTD1uZXcgYSxkTD1uZXcgYSxtTD1uZXcgYSxUcz1uZXcgQXJyYXkoMyksV2Y9bmV3IEFycmF5KDQpO1dmWzBdPW5ldyBtZSgtMSwtMSwxLDEpO1dmWzFdPW5ldyBtZSgxLC0xLDEsMSk7V2ZbMl09bmV3IG1lKDEsMSwxLDEpO1dmWzNdPW5ldyBtZSgtMSwxLDEsMSk7ek89bmV3IEFycmF5KDQpO2ZvcihsZXQgdD0wO3Q8NDsrK3Qpek9bdF09bmV3IG1lO0FjLl9jb21wdXRlTmVhckZhclBsYW5lcz1mdW5jdGlvbih0LGUsbixvLHIsaSxzLGYpe2xldCB1PVouZnJvbVF1YXRlcm5pb24oZSx1TCksYz1pPz9rTyxsPXM/P0dPLHA9Zj8/Vk87Yz1aLmdldENvbHVtbih1LDAsYyksbD1aLmdldENvbHVtbih1LDEsbCkscD1aLmdldENvbHVtbih1LDIscCksYS5ub3JtYWxpemUoYyxjKSxhLm5vcm1hbGl6ZShsLGwpLGEubm9ybWFsaXplKHAscCksYS5uZWdhdGUoYyxjKTtsZXQgZD1zdC5jb21wdXRlVmlldyh0LHAsbCxjLGxMKSxoLF8sZz1vLnByb2plY3Rpb25NYXRyaXg7aWYobj09PVNkKXtsZXQgYj1zdC5tdWx0aXBseShnLGQsQl8pO189c3QuaW52ZXJzZShiLEJfKX1lbHNlIGg9c3QuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGQsQl8pO20oXyk/KFRzWzBdPW8ubmVhcixUc1sxXT1vLmZhcik6KFRzWzBdPTAsVHNbMV09by5uZWFyLFRzWzJdPW8uZmFyKTtmb3IobGV0IGI9MDtiPDI7KytiKWZvcihsZXQgdz0wO3c8NDsrK3cpe2xldCBPPW1lLmNsb25lKFdmW3ddLHpPW3ddKTtpZihtKF8pKXtPPXN0Lm11bHRpcGx5QnlWZWN0b3IoXyxPLE8pO2xldCBFPTEvTy53O2EubXVsdGlwbHlCeVNjYWxhcihPLEUsTyksYS5zdWJ0cmFjdChPLHQsTyksYS5ub3JtYWxpemUoTyxPKTtsZXQgVD1hLmRvdChwLE8pO2EubXVsdGlwbHlCeVNjYWxhcihPLFRzW2JdL1QsTyksYS5hZGQoTyx0LE8pfWVsc2V7bGV0IEU9by5vZmZDZW50ZXJGcnVzdHVtO20oRSkmJihvPUUpO2xldCBUPVRzW2JdLHg9VHNbYisxXTtPLng9KE8ueCooby5yaWdodC1vLmxlZnQpK28ubGVmdCtvLnJpZ2h0KSouNSxPLnk9KE8ueSooby50b3Atby5ib3R0b20pK28uYm90dG9tK28udG9wKSouNSxPLno9KE8ueiooVC14KS1ULXgpKi41LE8udz0xLHN0Lm11bHRpcGx5QnlWZWN0b3IoaCxPLE8pfXJbMTIqYit3KjNdPU8ueCxyWzEyKmIrdyozKzFdPU8ueSxyWzEyKmIrdyozKzJdPU8uen19O0FjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX2ZydXN0dW1UeXBlLG49dC5fZnJ1c3R1bSxvPXQuX29yaWdpbixyPXQuX29yaWVudGF0aW9uLGk9dC5fZHJhd05lYXJQbGFuZSxzPXQuX3ZlcnRleEZvcm1hdCxmPWk/Njo1LHU9bmV3IEZsb2F0NjRBcnJheSg3Mik7QWMuX2NvbXB1dGVOZWFyRmFyUGxhbmVzKG8scixlLG4sdSk7bGV0IGM9MjQ7dVtjXT11WzEyXSx1W2MrMV09dVsxM10sdVtjKzJdPXVbMTRdLHVbYyszXT11WzBdLHVbYys0XT11WzFdLHVbYys1XT11WzJdLHVbYys2XT11WzldLHVbYys3XT11WzEwXSx1W2MrOF09dVsxMV0sdVtjKzldPXVbMjFdLHVbYysxMF09dVsyMl0sdVtjKzExXT11WzIzXSxjKz0xMix1W2NdPXVbMTVdLHVbYysxXT11WzE2XSx1W2MrMl09dVsxN10sdVtjKzNdPXVbM10sdVtjKzRdPXVbNF0sdVtjKzVdPXVbNV0sdVtjKzZdPXVbMF0sdVtjKzddPXVbMV0sdVtjKzhdPXVbMl0sdVtjKzldPXVbMTJdLHVbYysxMF09dVsxM10sdVtjKzExXT11WzE0XSxjKz0xMix1W2NdPXVbM10sdVtjKzFdPXVbNF0sdVtjKzJdPXVbNV0sdVtjKzNdPXVbMTVdLHVbYys0XT11WzE2XSx1W2MrNV09dVsxN10sdVtjKzZdPXVbMThdLHVbYys3XT11WzE5XSx1W2MrOF09dVsyMF0sdVtjKzldPXVbNl0sdVtjKzEwXT11WzddLHVbYysxMV09dVs4XSxjKz0xMix1W2NdPXVbNl0sdVtjKzFdPXVbN10sdVtjKzJdPXVbOF0sdVtjKzNdPXVbMThdLHVbYys0XT11WzE5XSx1W2MrNV09dVsyMF0sdVtjKzZdPXVbMjFdLHVbYys3XT11WzIyXSx1W2MrOF09dVsyM10sdVtjKzldPXVbOV0sdVtjKzEwXT11WzEwXSx1W2MrMTFdPXVbMTFdLGl8fCh1PXUuc3ViYXJyYXkoMTIpKTtsZXQgbD1uZXcgaWUoe3Bvc2l0aW9uOm5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6dX0pfSk7aWYobShzLm5vcm1hbCl8fG0ocy50YW5nZW50KXx8bShzLmJpdGFuZ2VudCl8fG0ocy5zdCkpe2xldCBkPW0ocy5ub3JtYWwpP25ldyBGbG9hdDMyQXJyYXkoMTIqZik6dm9pZCAwLGg9bShzLnRhbmdlbnQpP25ldyBGbG9hdDMyQXJyYXkoMTIqZik6dm9pZCAwLF89bShzLmJpdGFuZ2VudCk/bmV3IEZsb2F0MzJBcnJheSgxMipmKTp2b2lkIDAsZz1tKHMuc3QpP25ldyBGbG9hdDMyQXJyYXkoOCpmKTp2b2lkIDAsYj1rTyx3PUdPLE89Vk8sRT1hLm5lZ2F0ZShiLHBMKSxUPWEubmVnYXRlKHcsZEwpLHg9YS5uZWdhdGUoTyxtTCk7Yz0wLGkmJihSYShjLGQsaCxfLGcseCxiLHcpLGMrPTEyKSxSYShjLGQsaCxfLGcsTyxFLHcpLGMrPTEyLFJhKGMsZCxoLF8sZyxFLHgsdyksYys9MTIsUmEoYyxkLGgsXyxnLFQseCxFKSxjKz0xMixSYShjLGQsaCxfLGcsYixPLHcpLGMrPTEyLFJhKGMsZCxoLF8sZyx3LE8sRSksbShkKSYmKGwubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpkfSkpLG0oaCkmJihsLnRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmh9KSksbShfKSYmKGwuYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpffSkpLG0oZykmJihsLnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpnfSkpfWxldCBwPW5ldyBVaW50MTZBcnJheSg2KmYpO2ZvcihsZXQgZD0wO2Q8ZjsrK2Qpe2xldCBoPWQqNixfPWQqNDtwW2hdPV8scFtoKzFdPV8rMSxwW2grMl09XysyLHBbaCszXT1fLHBbaCs0XT1fKzIscFtoKzVdPV8rM31yZXR1cm4gbmV3IFV0KHthdHRyaWJ1dGVzOmwsaW5kaWNlczpwLHByaW1pdGl2ZVR5cGU6QnQuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOkF0LmZyb21WZXJ0aWNlcyh1KX0pfTtYZj1BY30pO3ZhciBrXz17fTtsZShrXyx7ZGVmYXVsdDooKT0+X0x9KTtmdW5jdGlvbiBoTCh0LGUpe3JldHVybiBtKGUpJiYodD1YZi51bnBhY2sodCxlKSksWGYuY3JlYXRlR2VvbWV0cnkodCl9dmFyIF9MLEdfPSQoKCk9PntmdCgpO1VfKCk7X0w9aEx9KTtmdW5jdGlvbiBZZih0KXt5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMiLHQpLHkudHlwZU9mLm9iamVjdCgib3B0aW9ucy5mcnVzdHVtIix0LmZydXN0dW0pLHkudHlwZU9mLm9iamVjdCgib3B0aW9ucy5vcmlnaW4iLHQub3JpZ2luKSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMub3JpZW50YXRpb24iLHQub3JpZW50YXRpb24pO2xldCBlPXQuZnJ1c3R1bSxuPXQub3JpZW50YXRpb24sbz10Lm9yaWdpbixyPXQuX2RyYXdOZWFyUGxhbmU/PyEwLGkscztlIGluc3RhbmNlb2YgTm8/KGk9Vl8scz1Oby5wYWNrZWRMZW5ndGgpOmUgaW5zdGFuY2VvZiBNbyYmKGk9eUwscz1Nby5wYWNrZWRMZW5ndGgpLHRoaXMuX2ZydXN0dW1UeXBlPWksdGhpcy5fZnJ1c3R1bT1lLmNsb25lKCksdGhpcy5fb3JpZ2luPWEuY2xvbmUobyksdGhpcy5fb3JpZW50YXRpb249dGUuY2xvbmUobiksdGhpcy5fZHJhd05lYXJQbGFuZT1yLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUZydXN0dW1PdXRsaW5lR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPTIrcythLnBhY2tlZExlbmd0aCt0ZS5wYWNrZWRMZW5ndGh9dmFyIFZfLHlMLGdMLEFMLGJMLHdMLHpfLGpPPSQoKCk9Pnt2ZSgpO0R0KCk7V3QoKTtEZSgpO2Z0KCk7VV8oKTtZZSgpOyRlKCk7YW4oKTtGXygpO0RfKCk7dG4oKTtYbygpO1ZfPTAseUw9MTtZZi5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzA7bGV0IG89dC5fZnJ1c3R1bVR5cGUscj10Ll9mcnVzdHVtO3JldHVybiBlW24rK109byxvPT09Vl8/KE5vLnBhY2socixlLG4pLG4rPU5vLnBhY2tlZExlbmd0aCk6KE1vLnBhY2socixlLG4pLG4rPU1vLnBhY2tlZExlbmd0aCksYS5wYWNrKHQuX29yaWdpbixlLG4pLG4rPWEucGFja2VkTGVuZ3RoLHRlLnBhY2sodC5fb3JpZW50YXRpb24sZSxuKSxuKz10ZS5wYWNrZWRMZW5ndGgsZVtuXT10Ll9kcmF3TmVhclBsYW5lPzE6MCxlfTtnTD1uZXcgTm8sQUw9bmV3IE1vLGJMPW5ldyB0ZSx3TD1uZXcgYTtZZi51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz10W2UrK10scjtvPT09Vl8/KHI9Tm8udW5wYWNrKHQsZSxnTCksZSs9Tm8ucGFja2VkTGVuZ3RoKToocj1Nby51bnBhY2sodCxlLEFMKSxlKz1Nby5wYWNrZWRMZW5ndGgpO2xldCBpPWEudW5wYWNrKHQsZSx3TCk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IHM9dGUudW5wYWNrKHQsZSxiTCk7ZSs9dGUucGFja2VkTGVuZ3RoO2xldCBmPXRbZV09PT0xO2lmKCFtKG4pKXJldHVybiBuZXcgWWYoe2ZydXN0dW06cixvcmlnaW46aSxvcmllbnRhdGlvbjpzLF9kcmF3TmVhclBsYW5lOmZ9KTtsZXQgdT1vPT09bi5fZnJ1c3R1bVR5cGU/bi5fZnJ1c3R1bTp2b2lkIDA7cmV0dXJuIG4uX2ZydXN0dW09ci5jbG9uZSh1KSxuLl9mcnVzdHVtVHlwZT1vLG4uX29yaWdpbj1hLmNsb25lKGksbi5fb3JpZ2luKSxuLl9vcmllbnRhdGlvbj10ZS5jbG9uZShzLG4uX29yaWVudGF0aW9uKSxuLl9kcmF3TmVhclBsYW5lPWYsbn07WWYuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fZnJ1c3R1bVR5cGUsbj10Ll9mcnVzdHVtLG89dC5fb3JpZ2luLHI9dC5fb3JpZW50YXRpb24saT10Ll9kcmF3TmVhclBsYW5lLHM9bmV3IEZsb2F0NjRBcnJheSgyNCk7WGYuX2NvbXB1dGVOZWFyRmFyUGxhbmVzKG8scixlLG4scyk7bGV0IGY9bmV3IGllKHtwb3NpdGlvbjpuZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnN9KX0pLHUsYyxsPWk/MjoxLHA9bmV3IFVpbnQxNkFycmF5KDgqKGwrMSkpLGQ9aT8wOjE7Zm9yKDtkPDI7KytkKXU9aT9kKjg6MCxjPWQqNCxwW3VdPWMscFt1KzFdPWMrMSxwW3UrMl09YysxLHBbdSszXT1jKzIscFt1KzRdPWMrMixwW3UrNV09YyszLHBbdSs2XT1jKzMscFt1KzddPWM7Zm9yKGQ9MDtkPDI7KytkKXU9KGwrZCkqOCxjPWQqNCxwW3VdPWMscFt1KzFdPWMrNCxwW3UrMl09YysxLHBbdSszXT1jKzUscFt1KzRdPWMrMixwW3UrNV09Yys2LHBbdSs2XT1jKzMscFt1KzddPWMrNztyZXR1cm4gbmV3IFV0KHthdHRyaWJ1dGVzOmYsaW5kaWNlczpwLHByaW1pdGl2ZVR5cGU6QnQuTElORVMsYm91bmRpbmdTcGhlcmU6QXQuZnJvbVZlcnRpY2VzKHMpfSl9O3pfPVlmfSk7dmFyIGpfPXt9O2xlKGpfLHtkZWZhdWx0OigpPT5PTH0pO2Z1bmN0aW9uIFRMKHQsZSl7cmV0dXJuIG0oZSkmJih0PXpfLnVucGFjayh0LGUpKSx6Xy5jcmVhdGVHZW9tZXRyeSh0KX12YXIgT0wsSF89JCgoKT0+e2Z0KCk7ak8oKTtPTD1UTH0pO2Z1bmN0aW9uIE9zKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNULHRoaXMuX2VsbGlwc29pZD10LmVsbGlwc29pZD8/WS5kZWZhdWx0LHRoaXMuX3JlY3RhbmdsZT10LnJlY3RhbmdsZT8/TnQuTUFYX1ZBTFVFLHRoaXMuX3Byb2plY3Rpb249bmV3IGVvKHRoaXMuX2VsbGlwc29pZCksdGhpcy5fbnVtYmVyT2ZMZXZlbFplcm9UaWxlc1g9dC5udW1iZXJPZkxldmVsWmVyb1RpbGVzWD8/Mix0aGlzLl9udW1iZXJPZkxldmVsWmVyb1RpbGVzWT10Lm51bWJlck9mTGV2ZWxaZXJvVGlsZXNZPz8xfXZhciBITyxxTz0kKCgpPT57a2UoKTtXdCgpO3llKCk7ZnQoKTskdCgpO3hpKCk7S3QoKTtUbigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9zLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX0scmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVjdGFuZ2xlfX0scHJvamVjdGlvbjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb2plY3Rpb259fX0pO09zLnByb3RvdHlwZS5nZXROdW1iZXJPZlhUaWxlc0F0TGV2ZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX251bWJlck9mTGV2ZWxaZXJvVGlsZXNYPDx0fTtPcy5wcm90b3R5cGUuZ2V0TnVtYmVyT2ZZVGlsZXNBdExldmVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJPZkxldmVsWmVyb1RpbGVzWTw8dH07T3MucHJvdG90eXBlLnJlY3RhbmdsZVRvTmF0aXZlUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJyZWN0YW5nbGUiLHQpO2xldCBuPVAudG9EZWdyZWVzKHQud2VzdCksbz1QLnRvRGVncmVlcyh0LnNvdXRoKSxyPVAudG9EZWdyZWVzKHQuZWFzdCksaT1QLnRvRGVncmVlcyh0Lm5vcnRoKTtyZXR1cm4gbShlKT8oZS53ZXN0PW4sZS5zb3V0aD1vLGUuZWFzdD1yLGUubm9ydGg9aSxlKTpuZXcgTnQobixvLHIsaSl9O09zLnByb3RvdHlwZS50aWxlWFlUb05hdGl2ZVJlY3RhbmdsZT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj10aGlzLnRpbGVYWVRvUmVjdGFuZ2xlKHQsZSxuLG8pO3JldHVybiByLndlc3Q9UC50b0RlZ3JlZXMoci53ZXN0KSxyLnNvdXRoPVAudG9EZWdyZWVzKHIuc291dGgpLHIuZWFzdD1QLnRvRGVncmVlcyhyLmVhc3QpLHIubm9ydGg9UC50b0RlZ3JlZXMoci5ub3J0aCkscn07T3MucHJvdG90eXBlLnRpbGVYWVRvUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPXRoaXMuX3JlY3RhbmdsZSxpPXRoaXMuZ2V0TnVtYmVyT2ZYVGlsZXNBdExldmVsKG4pLHM9dGhpcy5nZXROdW1iZXJPZllUaWxlc0F0TGV2ZWwobiksZj1yLndpZHRoL2ksdT10KmYrci53ZXN0LGM9KHQrMSkqZityLndlc3QsbD1yLmhlaWdodC9zLHA9ci5ub3J0aC1lKmwsZD1yLm5vcnRoLShlKzEpKmw7cmV0dXJuIG0obyl8fChvPW5ldyBOdCh1LGQsYyxwKSksby53ZXN0PXUsby5zb3V0aD1kLG8uZWFzdD1jLG8ubm9ydGg9cCxvfTtPcy5wcm90b3R5cGUucG9zaXRpb25Ub1RpbGVYWT1mdW5jdGlvbih0LGUsbil7bGV0IG89dGhpcy5fcmVjdGFuZ2xlO2lmKCFOdC5jb250YWlucyhvLHQpKXJldHVybjtsZXQgcj10aGlzLmdldE51bWJlck9mWFRpbGVzQXRMZXZlbChlKSxpPXRoaXMuZ2V0TnVtYmVyT2ZZVGlsZXNBdExldmVsKGUpLHM9by53aWR0aC9yLGY9by5oZWlnaHQvaSx1PXQubG9uZ2l0dWRlO28uZWFzdDxvLndlc3QmJih1Kz1QLlRXT19QSSk7bGV0IGM9KHUtby53ZXN0KS9zfDA7Yz49ciYmKGM9ci0xKTtsZXQgbD0oby5ub3J0aC10LmxhdGl0dWRlKS9mfDA7cmV0dXJuIGw+PWkmJihsPWktMSksbShuKT8obi54PWMsbi55PWwsbik6bmV3IEooYyxsKX07SE89T3N9KTtmdW5jdGlvbiAkTyh0KXtjdC5mcm9tUmFkaWFucyh0LmVhc3QsdC5ub3J0aCwwLCRmWzBdKSxjdC5mcm9tUmFkaWFucyh0Lndlc3QsdC5ub3J0aCwwLCRmWzFdKSxjdC5mcm9tUmFkaWFucyh0LmVhc3QsdC5zb3V0aCwwLCRmWzJdKSxjdC5mcm9tUmFkaWFucyh0Lndlc3QsdC5zb3V0aCwwLCRmWzNdKTtsZXQgZT0wLG49MCxvPTAscj0wLGk9UG4uX3RlcnJhaW5IZWlnaHRzTWF4TGV2ZWwscztmb3Iocz0wO3M8PWk7KytzKXtsZXQgZj0hMTtmb3IobGV0IHU9MDt1PDQ7Kyt1KXtsZXQgYz0kZlt1XTtpZihSTC5wb3NpdGlvblRvVGlsZVhZKGMscyxaZiksdT09PTApbz1aZi54LHI9WmYueTtlbHNlIGlmKG8hPT1aZi54fHxyIT09WmYueSl7Zj0hMDticmVha319aWYoZilicmVhaztlPW8sbj1yfWlmKHMhPT0wKXJldHVybnt4OmUseTpuLGxldmVsOnM+aT9pOnMtMX19dmFyIEtPLFdPLFhPLHFfLEVMLFlPLFJMLCRmLFpmLFBuLHhkLEtfPSQoKCk9Pnt2ZSgpO1FtKCk7a2UoKTtEdCgpO0llKCk7V3QoKTtmdCgpO0h0KCk7JHQoKTtxTygpO1RuKCk7bWYoKTtLTz1uZXcgYSxXTz1uZXcgYSxYTz1uZXcgY3QscV89bmV3IGEsRUw9bmV3IGEsWU89bmV3IEF0LFJMPW5ldyBITywkZj1bbmV3IGN0LG5ldyBjdCxuZXcgY3QsbmV3IGN0XSxaZj1uZXcgSixQbj17fTtQbi5pbml0aWFsaXplPWZ1bmN0aW9uKCl7bGV0IHQ9UG4uX2luaXRQcm9taXNlO3JldHVybiBtKHQpfHwodD1yaS5mZXRjaEpzb24oYnAoIkFzc2V0cy9hcHByb3hpbWF0ZVRlcnJhaW5IZWlnaHRzLmpzb24iKSkudGhlbihmdW5jdGlvbihlKXtQbi5fdGVycmFpbkhlaWdodHM9ZX0pLFBuLl9pbml0UHJvbWlzZT10KSx0fTtQbi5nZXRNaW5pbXVtTWF4aW11bUhlaWdodHM9ZnVuY3Rpb24odCxlKXtpZih5LmRlZmluZWQoInJlY3RhbmdsZSIsdCksIW0oUG4uX3RlcnJhaW5IZWlnaHRzKSl0aHJvdyBuZXcgRCgiWW91IG11c3QgY2FsbCBBcHByb3hpbWF0ZVRlcnJhaW5IZWlnaHRzLmluaXRpYWxpemUgYW5kIHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24iKTtlPWU/P1kuZGVmYXVsdDtsZXQgbj0kTyh0KSxvPVBuLl9kZWZhdWx0TWluVGVycmFpbkhlaWdodCxyPVBuLl9kZWZhdWx0TWF4VGVycmFpbkhlaWdodDtpZihtKG4pKXtsZXQgaT1gJHtuLmxldmVsfS0ke24ueH0tJHtuLnl9YCxzPVBuLl90ZXJyYWluSGVpZ2h0c1tpXTttKHMpJiYobz1zWzBdLHI9c1sxXSksZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihOdC5ub3J0aGVhc3QodCxYTyksS08pLGUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTnQuc291dGh3ZXN0KHQsWE8pLFdPKSxhLm1pZHBvaW50KFdPLEtPLHFfKTtsZXQgZj1lLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UocV8sRUwpO2lmKG0oZikpe2xldCB1PWEuZGlzdGFuY2UocV8sZik7bz1NYXRoLm1pbihvLC11KX1lbHNlIG89UG4uX2RlZmF1bHRNaW5UZXJyYWluSGVpZ2h0fXJldHVybiBvPU1hdGgubWF4KFBuLl9kZWZhdWx0TWluVGVycmFpbkhlaWdodCxvKSx7bWluaW11bVRlcnJhaW5IZWlnaHQ6byxtYXhpbXVtVGVycmFpbkhlaWdodDpyfX07UG4uZ2V0Qm91bmRpbmdTcGhlcmU9ZnVuY3Rpb24odCxlKXtpZih5LmRlZmluZWQoInJlY3RhbmdsZSIsdCksIW0oUG4uX3RlcnJhaW5IZWlnaHRzKSl0aHJvdyBuZXcgRCgiWW91IG11c3QgY2FsbCBBcHByb3hpbWF0ZVRlcnJhaW5IZWlnaHRzLmluaXRpYWxpemUgYW5kIHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24iKTtlPWU/P1kuZGVmYXVsdDtsZXQgbj0kTyh0KSxvPVBuLl9kZWZhdWx0TWF4VGVycmFpbkhlaWdodDtpZihtKG4pKXtsZXQgaT1gJHtuLmxldmVsfS0ke24ueH0tJHtuLnl9YCxzPVBuLl90ZXJyYWluSGVpZ2h0c1tpXTttKHMpJiYobz1zWzFdKX1sZXQgcj1BdC5mcm9tUmVjdGFuZ2xlM0QodCxlLDApO3JldHVybiBBdC5mcm9tUmVjdGFuZ2xlM0QodCxlLG8sWU8pLEF0LnVuaW9uKHIsWU8scil9O1BuLl90ZXJyYWluSGVpZ2h0c01heExldmVsPTY7UG4uX2RlZmF1bHRNYXhUZXJyYWluSGVpZ2h0PTllMztQbi5fZGVmYXVsdE1pblRlcnJhaW5IZWlnaHQ9LTFlNTtQbi5fdGVycmFpbkhlaWdodHM9dm9pZCAwO1BuLl9pbml0UHJvbWlzZT12b2lkIDA7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUG4se2luaXRpYWxpemVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbShQbi5fdGVycmFpbkhlaWdodHMpfX19KTt4ZD1Qbn0pO2Z1bmN0aW9uIFJzKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9zaXRpb25zO2lmKCFtKGUpfHxlLmxlbmd0aDwyKXRocm93IG5ldyBEKCJBdCBsZWFzdCB0d28gcG9zaXRpb25zIGFyZSByZXF1aXJlZC4iKTtpZihtKHQuYXJjVHlwZSkmJnQuYXJjVHlwZSE9PWhlLkdFT0RFU0lDJiZ0LmFyY1R5cGUhPT1oZS5SSFVNQil0aHJvdyBuZXcgRCgiVmFsaWQgb3B0aW9ucyBmb3IgYXJjVHlwZSBhcmUgQXJjVHlwZS5HRU9ERVNJQyBhbmQgQXJjVHlwZS5SSFVNQi4iKTt0aGlzLndpZHRoPXQud2lkdGg/PzEsdGhpcy5fcG9zaXRpb25zPWUsdGhpcy5ncmFudWxhcml0eT10LmdyYW51bGFyaXR5Pz85OTk5LHRoaXMubG9vcD10Lmxvb3A/PyExLHRoaXMuYXJjVHlwZT10LmFyY1R5cGU/P2hlLkdFT0RFU0lDLHRoaXMuX2VsbGlwc29pZD1ZLmRlZmF1bHQsdGhpcy5fcHJvamVjdGlvbkluZGV4PTAsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlR3JvdW5kUG9seWxpbmVHZW9tZXRyeSIsdGhpcy5fc2NlbmUzRE9ubHk9ITF9ZnVuY3Rpb24gSl8odCxlLG4sbyxyKXtsZXQgaT1HbyhvLHQsMCx4TCkscz1HbyhvLHQsbixRTyksZj1HbyhvLGUsMCxKTyksdT1xaShzLGksUU8pLGM9cWkoZixpLEpPKTtyZXR1cm4gYS5jcm9zcyhjLHUsciksYS5ub3JtYWxpemUocixyKX1mdW5jdGlvbiBXXyh0LGUsbixvLHIsaSxzLGYsdSxjLGwpe2lmKHI9PT0wKXJldHVybjtsZXQgcDtpPT09aGUuR0VPREVTSUM/cD1uZXcgdWQodCxlLHMpOmk9PT1oZS5SSFVNQiYmKHA9bmV3IEpvKHQsZSxzKSk7bGV0IGQ9cC5zdXJmYWNlRGlzdGFuY2U7aWYoZDxyKXJldHVybjtsZXQgaD1KXyh0LGUsbyxzLE5MKSxfPU1hdGguY2VpbChkL3IpLGc9ZC9fLGI9Zyx3PV8tMSxPPWYubGVuZ3RoO2ZvcihsZXQgRT0wO0U8dztFKyspe2xldCBUPXAuaW50ZXJwb2xhdGVVc2luZ1N1cmZhY2VEaXN0YW5jZShiLENMKSx4PUdvKHMsVCxuLFBMKSxNPUdvKHMsVCxvLE1MKTthLnBhY2soaCxmLE8pLGEucGFjayh4LHUsTyksYS5wYWNrKE0sYyxPKSxsLnB1c2goVC5sYXRpdHVkZSksbC5wdXNoKFQubG9uZ2l0dWRlKSxPKz0zLGIrPWd9fWZ1bmN0aW9uIEdvKHQsZSxuLG8pe3JldHVybiBjdC5jbG9uZShlLFhfKSxYXy5oZWlnaHQ9bixjdC50b0NhcnRlc2lhbihYXyx0LG8pfWZ1bmN0aW9uIHFpKHQsZSxuKXtyZXR1cm4gYS5zdWJ0cmFjdCh0LGUsbiksYS5ub3JtYWxpemUobixuKSxufWZ1bmN0aW9uIHRFKHQsZSxuLG8pe3JldHVybiBvPXFpKHQsZSxvKSxvPWEuY3Jvc3MobyxuLG8pLG89YS5ub3JtYWxpemUobyxvKSxvPWEuY3Jvc3MobixvLG8pLG99ZnVuY3Rpb24gWV8odCxlLG4sbyxyKXtsZXQgaT1xaShuLGUsQUUpLHM9dEUodCxlLGksSUwpLGY9dEUobyxlLGksdkwpO2lmKFAuZXF1YWxzRXBzaWxvbihhLmRvdChzLGYpLERMLFAuRVBTSUxPTjUpKXJldHVybiByPWEuY3Jvc3MoaSxzLHIpLHI9YS5ub3JtYWxpemUocixyKSxyO3I9YS5hZGQoZixzLHIpLHI9YS5ub3JtYWxpemUocixyKTtsZXQgdT1hLmNyb3NzKGkscixGTCk7cmV0dXJuIGEuZG90KGYsdSk8TEwmJihyPWEubmVnYXRlKHIscikpLHJ9ZnVuY3Rpb24gb0UodCxlLG4sbyl7bGV0IHI9cWkobixlLHpMKSxpPWEuZG90KHIsdCk7aWYoaT5fRXx8aTxaTyl7bGV0IHM9cWkobyxuLEFFKSxmPWk8Wk8/UC5QSV9PVkVSX1RXTzotUC5QSV9PVkVSX1RXTyx1PXRlLmZyb21BeGlzQW5nbGUocyxmLEhMKSxjPVouZnJvbVF1YXRlcm5pb24odSxqTCk7cmV0dXJuIFoubXVsdGlwbHlCeVZlY3RvcihjLHQsdCksITB9cmV0dXJuITF9ZnVuY3Rpb24gUWYodCxlLG4sbyxyKXtsZXQgaT1jdC50b0NhcnRlc2lhbihlLHQuX2VsbGlwc29pZCxxTCkscz1hLmFkZChpLG4saUUpLGY9ITEsdT10Ll9lbGxpcHNvaWQsYz11LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHMsckUpO01hdGguYWJzKGUubG9uZ2l0dWRlLWMubG9uZ2l0dWRlKT5QLlBJX09WRVJfVFdPJiYoZj0hMCxzPWEuc3VidHJhY3QoaSxuLGlFKSxjPXUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocyxyRSkpLGMuaGVpZ2h0PTA7bGV0IGw9dC5wcm9qZWN0KGMscik7cmV0dXJuIHI9YS5zdWJ0cmFjdChsLG8sciksci56PTAscj1hLm5vcm1hbGl6ZShyLHIpLGYmJmEubmVnYXRlKHIscikscn1mdW5jdGlvbiBjRSh0LGUsbixvLHIsaSl7bGV0IHM9YS5zdWJ0cmFjdChlLHQsS0wpO2Eubm9ybWFsaXplKHMscyk7bGV0IGY9bi15RSx1PWEubXVsdGlwbHlCeVNjYWxhcihzLGYsc0UpO2EuYWRkKHQsdSxyKTtsZXQgYz1vLWdFO3U9YS5tdWx0aXBseUJ5U2NhbGFyKHMsYyxzRSksYS5hZGQoZSx1LGkpfWZ1bmN0aW9uIE1kKHQsZSl7bGV0IG49b24uZ2V0UG9pbnREaXN0YW5jZShOZCx0KSxvPW9uLmdldFBvaW50RGlzdGFuY2UoTmQsZSkscj1XTDtQLmVxdWFsc0Vwc2lsb24obiwwLFAuRVBTSUxPTjIpPyhyPXFpKGUsdCxyKSxhLm11bHRpcGx5QnlTY2FsYXIocixQLkVQU0lMT04yLHIpLGEuYWRkKHQscix0KSk6UC5lcXVhbHNFcHNpbG9uKG8sMCxQLkVQU0lMT04yKSYmKHI9cWkodCxlLHIpLGEubXVsdGlwbHlCeVNjYWxhcihyLFAuRVBTSUxPTjIsciksYS5hZGQoZSxyLGUpKX1mdW5jdGlvbiBYTCh0LGUpe2xldCBuPU1hdGguYWJzKHQubG9uZ2l0dWRlKSxvPU1hdGguYWJzKGUubG9uZ2l0dWRlKTtpZihQLmVxdWFsc0Vwc2lsb24obixQLlBJLFAuRVBTSUxPTjExKSl7bGV0IHI9UC5zaWduKGUubG9uZ2l0dWRlKTtyZXR1cm4gdC5sb25naXR1ZGU9cioobi1QLkVQU0lMT04xMSksMX1lbHNlIGlmKFAuZXF1YWxzRXBzaWxvbihvLFAuUEksUC5FUFNJTE9OMTEpKXtsZXQgcj1QLnNpZ24odC5sb25naXR1ZGUpO3JldHVybiBlLmxvbmdpdHVkZT1yKihvLVAuRVBTSUxPTjExKSwyfXJldHVybiAwfWZ1bmN0aW9uIGREKHQsZSxuLG8scixpLHMpe2xldCBmLHUsYz1lLl9lbGxpcHNvaWQsbD1uLmxlbmd0aC8zLTEscD1sKjgsZD1wKjQsaD1sKjM2LF89cD42NTUzNT9uZXcgVWludDMyQXJyYXkoaCk6bmV3IFVpbnQxNkFycmF5KGgpLGc9bmV3IEZsb2F0NjRBcnJheShwKjMpLGI9bmV3IEZsb2F0MzJBcnJheShkKSx3PW5ldyBGbG9hdDMyQXJyYXkoZCksTz1uZXcgRmxvYXQzMkFycmF5KGQpLEU9bmV3IEZsb2F0MzJBcnJheShkKSxUPW5ldyBGbG9hdDMyQXJyYXkoZCkseCxNLE4sRjtzJiYoeD1uZXcgRmxvYXQzMkFycmF5KGQpLE09bmV3IEZsb2F0MzJBcnJheShkKSxOPW5ldyBGbG9hdDMyQXJyYXkoZCksRj1uZXcgRmxvYXQzMkFycmF5KHAqMikpO2xldCBJPWkubGVuZ3RoLzIsdj0wLEI9YkU7Qi5oZWlnaHQ9MDtsZXQgQT13RTtBLmhlaWdodD0wO2xldCBTPWFFLEM9JF87aWYocylmb3IodT0wLGY9MTtmPEk7ZisrKUIubGF0aXR1ZGU9aVt1XSxCLmxvbmdpdHVkZT1pW3UrMV0sQS5sYXRpdHVkZT1pW3UrMl0sQS5sb25naXR1ZGU9aVt1KzNdLFM9ZS5wcm9qZWN0KEIsUyksQz1lLnByb2plY3QoQSxDKSx2Kz1hLmRpc3RhbmNlKFMsQyksdSs9MjtsZXQgTD1vLmxlbmd0aC8zO0M9YS51bnBhY2sobywwLEMpO2xldCB6PTA7Zm9yKHU9MyxmPTE7ZjxMO2YrKylTPWEuY2xvbmUoQyxTKSxDPWEudW5wYWNrKG8sdSxDKSx6Kz1hLmRpc3RhbmNlKFMsQyksdSs9MztsZXQgajt1PTM7bGV0IGs9MCxxPTAsVz0wLFI9MCxudD0hMSxhdD1hLnVucGFjayhuLDAsdUUpLGx0PWEudW5wYWNrKG8sMCwkXyksX3Q9YS51bnBhY2sociwwLGxFKTtpZih0KXtsZXQgR3Q9YS51bnBhY2sobixuLmxlbmd0aC02LGZFKTtvRShfdCxHdCxhdCxsdCkmJihfdD1hLm5lZ2F0ZShfdCxfdCkpfWxldCBvdD0wLFB0PTAsZ3Q9MDtmb3IoZj0wO2Y8bDtmKyspe2xldCBHdD1hLmNsb25lKGF0LGZFKSxwZT1hLmNsb25lKGx0LGFFKSxyZT1hLmNsb25lKF90LFlMKTtudCYmKHJlPWEubmVnYXRlKHJlLHJlKSksYXQ9YS51bnBhY2sobix1LHVFKSxsdD1hLnVucGFjayhvLHUsJF8pLF90PWEudW5wYWNrKHIsdSxsRSksbnQ9b0UoX3QsR3QsYXQsbHQpLEIubGF0aXR1ZGU9aVtrXSxCLmxvbmdpdHVkZT1pW2srMV0sQS5sYXRpdHVkZT1pW2srMl0sQS5sb25naXR1ZGU9aVtrKzNdO2xldCBkZSxmZSxadCxRdDtpZihzKXtsZXQgRmU9WEwoQixBKTtkZT1lLnByb2plY3QoQixuRCksZmU9ZS5wcm9qZWN0KEEsb0QpO2xldCBEbj1xaShmZSxkZSxkRSk7RG4ueT1NYXRoLmFicyhEbi55KSxadD1aXyxRdD1RXyxGZT09PTB8fGEuZG90KERuLGEuVU5JVF9ZKT5fRT8oWnQ9UWYoZSxCLHJlLGRlLFpfKSxRdD1RZihlLEEsX3QsZmUsUV8pKTpGZT09PTE/KFF0PVFmKGUsQSxfdCxmZSxRXyksWnQueD0wLFp0Lnk9UC5zaWduKEIubG9uZ2l0dWRlLU1hdGguYWJzKEEubG9uZ2l0dWRlKSksWnQuej0wKTooWnQ9UWYoZSxCLHJlLGRlLFpfKSxRdC54PTAsUXQueT1QLnNpZ24oQi5sb25naXR1ZGUtQS5sb25naXR1ZGUpLFF0Lno9MCl9bGV0IE5lPWEuZGlzdGFuY2UocGUsbHQpLGdlPVFzLmZyb21DYXJ0ZXNpYW4oR3QsZkQpLEVlPWEuc3VidHJhY3QoYXQsR3QsckQpLHVuPWEubm9ybWFsaXplKEVlLHBFKSxWZT1hLnN1YnRyYWN0KHBlLEd0LGlEKTtWZT1hLm5vcm1hbGl6ZShWZSxWZSk7bGV0IGJlPWEuY3Jvc3ModW4sVmUscEUpO2JlPWEubm9ybWFsaXplKGJlLGJlKTtsZXQgbG49YS5jcm9zcyhWZSxyZSxjRCk7bG49YS5ub3JtYWxpemUobG4sbG4pO2xldCBwbj1hLnN1YnRyYWN0KGx0LGF0LHNEKTtwbj1hLm5vcm1hbGl6ZShwbixwbik7bGV0IEVuPWEuY3Jvc3MoX3QscG4sYUQpO0VuPWEubm9ybWFsaXplKEVuLEVuKTtsZXQgb2U9TmUveixZdD1vdC96LHplPTAsZG4sc24sbW4sbG89MCxxbj0wO2lmKHMpe3plPWEuZGlzdGFuY2UoZGUsZmUpLGRuPVFzLmZyb21DYXJ0ZXNpYW4oZGUsdUQpLHNuPWEuc3VidHJhY3QoZmUsZGUsZEUpLG1uPWEubm9ybWFsaXplKHNuLGxEKTtsZXQgRmU9bW4ueDttbi54PW1uLnksbW4ueT0tRmUsbG89emUvdixxbj1QdC92fWZvcihqPTA7ajw4O2orKyl7bGV0IEZlPVIraio0LERuPXEraioyLFhuPUZlKzMsSG89ajw0PzE6LTEscm49aj09PTJ8fGo9PT0zfHxqPT09Nnx8aj09PTc/MTotMTthLnBhY2soZ2UuaGlnaCxiLEZlKSxiW1huXT1FZS54LGEucGFjayhnZS5sb3csdyxGZSksd1tYbl09RWUueSxhLnBhY2sobG4sTyxGZSksT1tYbl09RWUueixhLnBhY2soRW4sRSxGZSksRVtYbl09b2UqSG8sYS5wYWNrKGJlLFQsRmUpO2xldCBSbj1ZdCpybjtSbj09PTAmJnJuPDAmJihSbj05KSxUW1huXT1SbixzJiYoeFtGZV09ZG4uaGlnaC54LHhbRmUrMV09ZG4uaGlnaC55LHhbRmUrMl09ZG4ubG93LngseFtGZSszXT1kbi5sb3cueSxOW0ZlXT0tWnQueSxOW0ZlKzFdPVp0LngsTltGZSsyXT1RdC55LE5bRmUrM109LVF0LngsTVtGZV09c24ueCxNW0ZlKzFdPXNuLnksTVtGZSsyXT1tbi54LE1bRmUrM109bW4ueSxGW0RuXT1sbypIbyxSbj1xbipybixSbj09PTAmJnJuPDAmJihSbj05KSxGW0RuKzFdPVJuKX1sZXQgUWU9dEQsY249ZUQsV2U9UUwsaG49SkwscG89TnQuZnJvbUNhcnRvZ3JhcGhpY0FycmF5KCRMLFpMKSxLbj14ZC5nZXRNaW5pbXVtTWF4aW11bUhlaWdodHMocG8sYyksV249S24ubWluaW11bVRlcnJhaW5IZWlnaHQsbW89S24ubWF4aW11bVRlcnJhaW5IZWlnaHQ7Z3QrPU1hdGguYWJzKFduKSxndCs9TWF0aC5hYnMobW8pLGNFKEd0LHBlLFduLG1vLFFlLFdlKSxjRShhdCxsdCxXbixtbyxjbixobik7bGV0IGplPWEubXVsdGlwbHlCeVNjYWxhcihiZSxQLkVQU0lMT041LG1FKTthLmFkZChRZSxqZSxRZSksYS5hZGQoY24samUsY24pLGEuYWRkKFdlLGplLFdlKSxhLmFkZChobixqZSxobiksTWQoUWUsY24pLE1kKFdlLGhuKSxhLnBhY2soUWUsZyxXKSxhLnBhY2soY24sZyxXKzMpLGEucGFjayhobixnLFcrNiksYS5wYWNrKFdlLGcsVys5KSxqZT1hLm11bHRpcGx5QnlTY2FsYXIoYmUsLTIqUC5FUFNJTE9ONSxtRSksYS5hZGQoUWUsamUsUWUpLGEuYWRkKGNuLGplLGNuKSxhLmFkZChXZSxqZSxXZSksYS5hZGQoaG4samUsaG4pLE1kKFFlLGNuKSxNZChXZSxobiksYS5wYWNrKFFlLGcsVysxMiksYS5wYWNrKGNuLGcsVysxNSksYS5wYWNrKGhuLGcsVysxOCksYS5wYWNrKFdlLGcsVysyMSksays9Mix1Kz0zLHErPTE2LFcrPTI0LFIrPTMyLG90Kz1OZSxQdCs9emV9dT0wO2xldCBSdD0wO2ZvcihmPTA7ZjxsO2YrKyl7Zm9yKGo9MDtqPGhFO2orKylfW3Ural09VEVbal0rUnQ7UnQrPTgsdSs9aEV9bGV0IGR0PXBEO0F0LmZyb21WZXJ0aWNlcyhuLGEuWkVSTywzLGR0WzBdKSxBdC5mcm9tVmVydGljZXMobyxhLlpFUk8sMyxkdFsxXSk7bGV0IHJ0PUF0LmZyb21Cb3VuZGluZ1NwaGVyZXMoZHQpO3J0LnJhZGl1cys9Z3QvKGwqMik7bGV0IHh0PXtwb3NpdGlvbjpuZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsbm9ybWFsaXplOiExLHZhbHVlczpnfSksc3RhcnRIaUFuZEZvcndhcmRPZmZzZXRYOkVzKGIpLHN0YXJ0TG9BbmRGb3J3YXJkT2Zmc2V0WTpFcyh3KSxzdGFydE5vcm1hbEFuZEZvcndhcmRPZmZzZXRaOkVzKE8pLGVuZE5vcm1hbEFuZFRleHR1cmVDb29yZGluYXRlTm9ybWFsaXphdGlvblg6RXMoRSkscmlnaHROb3JtYWxBbmRUZXh0dXJlQ29vcmRpbmF0ZU5vcm1hbGl6YXRpb25ZOkVzKFQpfTtyZXR1cm4gcyYmKHh0LnN0YXJ0SGlMbzJEPUVzKHgpLHh0Lm9mZnNldEFuZFJpZ2h0MkQ9RXMoTSkseHQuc3RhcnRFbmROb3JtYWxzMkQ9RXMoTikseHQudGV4Y29vcmROb3JtYWxpemF0aW9uMkQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsbm9ybWFsaXplOiExLHZhbHVlczpGfSkpLG5ldyBVdCh7YXR0cmlidXRlczp4dCxpbmRpY2VzOl8sYm91bmRpbmdTcGhlcmU6cnR9KX1mdW5jdGlvbiBFcyh0KXtyZXR1cm4gbmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjQsbm9ybWFsaXplOiExLHZhbHVlczp0fSl9dmFyIHR5LFNMLF9FLFpPLHlFLGdFLHhMLFFPLEpPLENMLFBMLE1MLE5MLFhfLElMLHZMLEZMLEFFLExMLERMLE5kLEJMLFVMLGtMLEdMLFZMLENkLFBkLGVFLG5FLHpMLGpMLEhMLHJFLHFMLGlFLEtMLHNFLFdMLGJFLHdFLGFFLCRfLGZFLHVFLFlMLGxFLCRMLFpMLFFMLEpMLHRELGVELG5ELG9ELFpfLFFfLHJELGlELHNELHBFLGNELGFELGZELHVELGRFLGxELG1FLHBELFRFLGhFLGV5LE9FPSQoKCk9PntLXygpO3VjKCk7SHIoKTt2ZSgpO0R0KCk7SWUoKTtXdCgpO0RlKCk7eWUoKTtmdCgpO0h0KCk7JHQoKTtXMCgpO05mKCk7VmgoKTt4aSgpO1llKCk7JGUoKTtlYygpO0t0KCk7VW4oKTt1cygpO1hvKCk7VG4oKTtzYygpO3R5PVtlbyxyb10sU0w9dHkubGVuZ3RoLF9FPU1hdGguY29zKFAudG9SYWRpYW5zKDMwKSksWk89TWF0aC5jb3MoUC50b1JhZGlhbnMoMTUwKSkseUU9MCxnRT0xZTM7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUnMucHJvdG90eXBlLHtwYWNrZWRMZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiAxK3RoaXMuX3Bvc2l0aW9ucy5sZW5ndGgqMysxKzErMStZLnBhY2tlZExlbmd0aCsxKzF9fX0pO1JzLnNldFByb2plY3Rpb25BbmRFbGxpcHNvaWQ9ZnVuY3Rpb24odCxlKXtsZXQgbj0wO2ZvcihsZXQgbz0wO288U0w7bysrKWlmKGUgaW5zdGFuY2VvZiB0eVtvXSl7bj1vO2JyZWFrfXQuX3Byb2plY3Rpb25JbmRleD1uLHQuX2VsbGlwc29pZD1lLmVsbGlwc29pZH07eEw9bmV3IGEsUU89bmV3IGEsSk89bmV3IGE7Q0w9bmV3IGN0LFBMPW5ldyBhLE1MPW5ldyBhLE5MPW5ldyBhO1hfPW5ldyBjdDtScy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKTtsZXQgbz1uPz8wLHI9dC5fcG9zaXRpb25zLGk9ci5sZW5ndGg7ZVtvKytdPWk7Zm9yKGxldCBzPTA7czxpOysrcyl7bGV0IGY9cltzXTthLnBhY2soZixlLG8pLG8rPTN9cmV0dXJuIGVbbysrXT10LmdyYW51bGFyaXR5LGVbbysrXT10Lmxvb3A/MTowLGVbbysrXT10LmFyY1R5cGUsWS5wYWNrKHQuX2VsbGlwc29pZCxlLG8pLG8rPVkucGFja2VkTGVuZ3RoLGVbbysrXT10Ll9wcm9qZWN0aW9uSW5kZXgsZVtvKytdPXQuX3NjZW5lM0RPbmx5PzE6MCxlfTtScy51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpO2xldCBvPWU/PzAscj10W28rK10saT1uZXcgQXJyYXkocik7Zm9yKGxldCBkPTA7ZDxyO2QrKylpW2RdPWEudW5wYWNrKHQsbyksbys9MztsZXQgcz10W28rK10sZj10W28rK109PT0xLHU9dFtvKytdLGM9WS51bnBhY2sodCxvKTtvKz1ZLnBhY2tlZExlbmd0aDtsZXQgbD10W28rK10scD10W28rK109PT0xO3JldHVybiBtKG4pfHwobj1uZXcgUnMoe3Bvc2l0aW9uczppfSkpLG4uX3Bvc2l0aW9ucz1pLG4uZ3JhbnVsYXJpdHk9cyxuLmxvb3A9ZixuLmFyY1R5cGU9dSxuLl9lbGxpcHNvaWQ9YyxuLl9wcm9qZWN0aW9uSW5kZXg9bCxuLl9zY2VuZTNET25seT1wLG59O0lMPW5ldyBhLHZMPW5ldyBhLEZMPW5ldyBhLEFFPW5ldyBhLExMPTAsREw9LTE7TmQ9b24uZnJvbVBvaW50Tm9ybWFsKGEuWkVSTyxhLlVOSVRfWSksQkw9bmV3IGEsVUw9bmV3IGEsa0w9bmV3IGEsR0w9bmV3IGEsVkw9bmV3IGEsQ2Q9bmV3IGEsUGQ9bmV3IGN0LGVFPW5ldyBjdCxuRT1uZXcgY3Q7UnMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9IXQuX3NjZW5lM0RPbmx5LG49dC5sb29wLG89dC5fZWxsaXBzb2lkLHI9dC5ncmFudWxhcml0eSxpPXQuYXJjVHlwZSxzPW5ldyB0eVt0Ll9wcm9qZWN0aW9uSW5kZXhdKG8pLGY9eUUsdT1nRSxjLGwscD10Ll9wb3NpdGlvbnMsZD1wLmxlbmd0aDtkPT09MiYmKG49ITEpO2xldCBoLF8sZyxiLHc9bmV3IEpvKHZvaWQgMCx2b2lkIDAsbyksTyxFLFQseD1bcFswXV07Zm9yKGw9MDtsPGQtMTtsKyspaD1wW2xdLF89cFtsKzFdLE89eW8ubGluZVNlZ21lbnRQbGFuZShoLF8sTmQsQ2QpLG0oTykmJiFhLmVxdWFsc0Vwc2lsb24oTyxoLFAuRVBTSUxPTjcpJiYhYS5lcXVhbHNFcHNpbG9uKE8sXyxQLkVQU0lMT043KSYmKHQuYXJjVHlwZT09PWhlLkdFT0RFU0lDP3gucHVzaChhLmNsb25lKE8pKTp0LmFyY1R5cGU9PT1oZS5SSFVNQiYmKFQ9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhPLFBkKS5sb25naXR1ZGUsZz1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGgsUGQpLGI9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhfLGVFKSx3LnNldEVuZFBvaW50cyhnLGIpLEU9dy5maW5kSW50ZXJzZWN0aW9uV2l0aExvbmdpdHVkZShULG5FKSxPPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oRSxDZCksbShPKSYmIWEuZXF1YWxzRXBzaWxvbihPLGgsUC5FUFNJTE9ONykmJiFhLmVxdWFsc0Vwc2lsb24oTyxfLFAuRVBTSUxPTjcpJiZ4LnB1c2goYS5jbG9uZShPKSkpKSx4LnB1c2goXyk7biYmKGg9cFtkLTFdLF89cFswXSxPPXlvLmxpbmVTZWdtZW50UGxhbmUoaCxfLE5kLENkKSxtKE8pJiYhYS5lcXVhbHNFcHNpbG9uKE8saCxQLkVQU0lMT043KSYmIWEuZXF1YWxzRXBzaWxvbihPLF8sUC5FUFNJTE9ONykmJih0LmFyY1R5cGU9PT1oZS5HRU9ERVNJQz94LnB1c2goYS5jbG9uZShPKSk6dC5hcmNUeXBlPT09aGUuUkhVTUImJihUPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoTyxQZCkubG9uZ2l0dWRlLGc9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhoLFBkKSxiPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoXyxlRSksdy5zZXRFbmRQb2ludHMoZyxiKSxFPXcuZmluZEludGVyc2VjdGlvbldpdGhMb25naXR1ZGUoVCxuRSksTz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEUsQ2QpLG0oTykmJiFhLmVxdWFsc0Vwc2lsb24oTyxoLFAuRVBTSUxPTjcpJiYhYS5lcXVhbHNFcHNpbG9uKE8sXyxQLkVQU0lMT043KSYmeC5wdXNoKGEuY2xvbmUoTykpKSkpO2xldCBNPXgubGVuZ3RoLE49bmV3IEFycmF5KE0pO2ZvcihsPTA7bDxNO2wrKyl7bGV0IG50PWN0LmZyb21DYXJ0ZXNpYW4oeFtsXSxvKTtudC5oZWlnaHQ9MCxOW2xdPW50fWlmKE49Q24oTixjdC5lcXVhbHNFcHNpbG9uKSxNPU4ubGVuZ3RoLE08MilyZXR1cm47bGV0IEY9W10sST1bXSx2PVtdLEI9W10sQT1CTCxTPVVMLEM9a0wsTD1HTCx6PVZMLGo9TlswXSxrPU5bMV0scT1OW00tMV07Zm9yKEE9R28obyxxLGYsQSksTD1HbyhvLGssZixMKSxTPUdvKG8saixmLFMpLEM9R28obyxqLHUsQyksbj96PVlfKEEsUyxDLEwseik6ej1KXyhqLGssdSxvLHopLGEucGFjayh6LEksMCksYS5wYWNrKFMsdiwwKSxhLnBhY2soQyxCLDApLEYucHVzaChqLmxhdGl0dWRlKSxGLnB1c2goai5sb25naXR1ZGUpLFdfKGosayxmLHUscixpLG8sSSx2LEIsRiksbD0xO2w8TS0xOysrbCl7QT1hLmNsb25lKFMsQSksUz1hLmNsb25lKEwsUyk7bGV0IG50PU5bbF07R28obyxudCx1LEMpLEdvKG8sTltsKzFdLGYsTCksWV8oQSxTLEMsTCx6KSxjPUkubGVuZ3RoLGEucGFjayh6LEksYyksYS5wYWNrKFMsdixjKSxhLnBhY2soQyxCLGMpLEYucHVzaChudC5sYXRpdHVkZSksRi5wdXNoKG50LmxvbmdpdHVkZSksV18oTltsXSxOW2wrMV0sZix1LHIsaSxvLEksdixCLEYpfWxldCBXPU5bTS0xXSxSPU5bTS0yXTtpZihTPUdvKG8sVyxmLFMpLEM9R28obyxXLHUsQyksbil7bGV0IG50PU5bMF07QT1HbyhvLFIsZixBKSxMPUdvKG8sbnQsZixMKSx6PVlfKEEsUyxDLEwseil9ZWxzZSB6PUpfKFIsVyx1LG8seik7aWYoYz1JLmxlbmd0aCxhLnBhY2soeixJLGMpLGEucGFjayhTLHYsYyksYS5wYWNrKEMsQixjKSxGLnB1c2goVy5sYXRpdHVkZSksRi5wdXNoKFcubG9uZ2l0dWRlKSxuKXtmb3IoV18oVyxqLGYsdSxyLGksbyxJLHYsQixGKSxjPUkubGVuZ3RoLGw9MDtsPDM7KytsKUlbYytsXT1JW2xdLHZbYytsXT12W2xdLEJbYytsXT1CW2xdO0YucHVzaChqLmxhdGl0dWRlKSxGLnB1c2goai5sb25naXR1ZGUpfXJldHVybiBkRChuLHMsdixCLEksRixlKX07ekw9bmV3IGEsakw9bmV3IFosSEw9bmV3IHRlO3JFPW5ldyBjdCxxTD1uZXcgYSxpRT1uZXcgYTtLTD1uZXcgYSxzRT1uZXcgYTtXTD1uZXcgYTtiRT1uZXcgY3Qsd0U9bmV3IGN0LGFFPW5ldyBhLCRfPW5ldyBhLGZFPW5ldyBhLHVFPW5ldyBhLFlMPW5ldyBhLGxFPW5ldyBhLCRMPVtiRSx3RV0sWkw9bmV3IE50LFFMPW5ldyBhLEpMPW5ldyBhLHREPW5ldyBhLGVEPW5ldyBhLG5EPW5ldyBhLG9EPW5ldyBhLFpfPW5ldyBhLFFfPW5ldyBhLHJEPW5ldyBhLGlEPW5ldyBhLHNEPW5ldyBhLHBFPW5ldyBhLGNEPW5ldyBhLGFEPW5ldyBhLGZEPW5ldyBRcyx1RD1uZXcgUXMsZEU9bmV3IGEsbEQ9bmV3IGEsbUU9bmV3IGEscEQ9W25ldyBBdCxuZXcgQXRdLFRFPVswLDIsMSwwLDMsMiwwLDcsMywwLDQsNywwLDUsNCwwLDEsNSw1LDcsNCw1LDYsNyw1LDIsNiw1LDEsMiwzLDYsMiwzLDcsNl0saEU9VEUubGVuZ3RoO1JzLl9wcm9qZWN0Tm9ybWFsPVFmO2V5PVJzfSk7dmFyIG55PXt9O2xlKG55LHtkZWZhdWx0OigpPT5oRH0pO2Z1bmN0aW9uIG1EKHQsZSl7cmV0dXJuIHhkLmluaXRpYWxpemUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG0oZSkmJih0PWV5LnVucGFjayh0LGUpKSxleS5jcmVhdGVHZW9tZXRyeSh0KX0pfXZhciBoRCxveT0kKCgpPT57S18oKTtmdCgpO09FKCk7aEQ9bUR9KTtmdW5jdGlvbiBTYSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVDt0aGlzLl92ZXJ0ZXhGb3JtYXQ9ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQbGFuZUdlb21ldHJ5In12YXIgRUUsX0QsSWQsdmQscnksUkU9JCgoKT0+e3ZlKCk7RHQoKTtXdCgpO0RlKCk7eWUoKTtmdCgpO1llKCk7JGUoKTthbigpO3RuKCk7eG8oKTtTYS5wYWNrZWRMZW5ndGg9cHQucGFja2VkTGVuZ3RoO1NhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxlfTtFRT1uZXcgcHQsX0Q9e3ZlcnRleEZvcm1hdDpFRX07U2EudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89cHQudW5wYWNrKHQsZSxFRSk7cmV0dXJuIG0obik/KG4uX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShvLG4uX3ZlcnRleEZvcm1hdCksbik6bmV3IFNhKF9EKX07SWQ9bmV3IGEoLS41LC0uNSwwKSx2ZD1uZXcgYSguNSwuNSwwKTtTYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll92ZXJ0ZXhGb3JtYXQsbj1uZXcgaWUsbyxyO2lmKGUucG9zaXRpb24pe2lmKHI9bmV3IEZsb2F0NjRBcnJheSgxMiksclswXT1JZC54LHJbMV09SWQueSxyWzJdPTAsclszXT12ZC54LHJbNF09SWQueSxyWzVdPTAscls2XT12ZC54LHJbN109dmQueSxyWzhdPTAscls5XT1JZC54LHJbMTBdPXZkLnksclsxMV09MCxuLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cn0pLGUubm9ybWFsKXtsZXQgaT1uZXcgRmxvYXQzMkFycmF5KDEyKTtpWzBdPTAsaVsxXT0wLGlbMl09MSxpWzNdPTAsaVs0XT0wLGlbNV09MSxpWzZdPTAsaVs3XT0wLGlbOF09MSxpWzldPTAsaVsxMF09MCxpWzExXT0xLG4ubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczppfSl9aWYoZS5zdCl7bGV0IGk9bmV3IEZsb2F0MzJBcnJheSg4KTtpWzBdPTAsaVsxXT0wLGlbMl09MSxpWzNdPTAsaVs0XT0xLGlbNV09MSxpWzZdPTAsaVs3XT0xLG4uc3Q9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOml9KX1pZihlLnRhbmdlbnQpe2xldCBpPW5ldyBGbG9hdDMyQXJyYXkoMTIpO2lbMF09MSxpWzFdPTAsaVsyXT0wLGlbM109MSxpWzRdPTAsaVs1XT0wLGlbNl09MSxpWzddPTAsaVs4XT0wLGlbOV09MSxpWzEwXT0wLGlbMTFdPTAsbi50YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczppfSl9aWYoZS5iaXRhbmdlbnQpe2xldCBpPW5ldyBGbG9hdDMyQXJyYXkoMTIpO2lbMF09MCxpWzFdPTEsaVsyXT0wLGlbM109MCxpWzRdPTEsaVs1XT0wLGlbNl09MCxpWzddPTEsaVs4XT0wLGlbOV09MCxpWzEwXT0xLGlbMTFdPTAsbi5iaXRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KX1vPW5ldyBVaW50MTZBcnJheSg2KSxvWzBdPTAsb1sxXT0xLG9bMl09MixvWzNdPTAsb1s0XT0yLG9bNV09M31yZXR1cm4gbmV3IFV0KHthdHRyaWJ1dGVzOm4saW5kaWNlczpvLHByaW1pdGl2ZVR5cGU6QnQuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOm5ldyBBdChhLlpFUk8sTWF0aC5zcXJ0KDIpKX0pfTtyeT1TYX0pO3ZhciBpeT17fTtsZShpeSx7ZGVmYXVsdDooKT0+Z0R9KTtmdW5jdGlvbiB5RCh0LGUpe3JldHVybiBtKGUpJiYodD1yeS51bnBhY2sodCxlKSkscnkuY3JlYXRlR2VvbWV0cnkodCl9dmFyIGdELHN5PSQoKCk9PntmdCgpO1JFKCk7Z0Q9eUR9KTtmdW5jdGlvbiB4YSgpe3RoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBsYW5lT3V0bGluZUdlb21ldHJ5In12YXIgU3MsRmQsY3ksU0U9JCgoKT0+e3ZlKCk7RHQoKTtXdCgpO0RlKCk7ZnQoKTtZZSgpOyRlKCk7YW4oKTt0bigpO3hhLnBhY2tlZExlbmd0aD0wO3hhLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksZX07eGEudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksbShuKT9uOm5ldyB4YX07U3M9bmV3IGEoLS41LC0uNSwwKSxGZD1uZXcgYSguNSwuNSwwKTt4YS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbigpe2xldCB0PW5ldyBpZSxlPW5ldyBVaW50MTZBcnJheSg4KSxuPW5ldyBGbG9hdDY0QXJyYXkoMTIpO3JldHVybiBuWzBdPVNzLngsblsxXT1Tcy55LG5bMl09U3MueixuWzNdPUZkLngsbls0XT1Tcy55LG5bNV09U3MueixuWzZdPUZkLngsbls3XT1GZC55LG5bOF09U3MueixuWzldPVNzLngsblsxMF09RmQueSxuWzExXT1Tcy56LHQucG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpufSksZVswXT0wLGVbMV09MSxlWzJdPTEsZVszXT0yLGVbNF09MixlWzVdPTMsZVs2XT0zLGVbN109MCxuZXcgVXQoe2F0dHJpYnV0ZXM6dCxpbmRpY2VzOmUscHJpbWl0aXZlVHlwZTpCdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpuZXcgQXQoYS5aRVJPLE1hdGguc3FydCgyKSl9KX07Y3k9eGF9KTt2YXIgYXk9e307bGUoYXkse2RlZmF1bHQ6KCk9PmJEfSk7ZnVuY3Rpb24gQUQodCxlKXtyZXR1cm4gbShlKSYmKHQ9Y3kudW5wYWNrKHQsZSkpLGN5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBiRCxmeT0kKCgpPT57ZnQoKTtTRSgpO2JEPUFEfSk7ZnVuY3Rpb24gRm4odCxlKXt0aGlzLnBvc2l0aW9uPXQsbSh0aGlzLnBvc2l0aW9uKXx8KHRoaXMucG9zaXRpb249bmV3IEopLHRoaXMudGFuZ2VudFBsYW5lPWUsbSh0aGlzLnRhbmdlbnRQbGFuZSl8fCh0aGlzLnRhbmdlbnRQbGFuZT1Gbi5OT1JUSF9QT0xFX1RBTkdFTlRfUExBTkUpfXZhciBDYSx3RCxURCxPRCxFRCxhcix4RT0kKCgpPT57a2UoKTtEdCgpO0llKCk7V3QoKTtmdCgpOyR0KCk7cGEoKTtlYygpO0t0KCk7VnAoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhGbi5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFuZ2VudFBsYW5lLmVsbGlwc29pZH19LHg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uLnh9fSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3NpdGlvbi55fX0sY29uZm9ybWFsTGF0aXR1ZGU6e2dldDpmdW5jdGlvbigpe2xldCB0PUoubWFnbml0dWRlKHRoaXMucG9zaXRpb24pLGU9Mip0aGlzLmVsbGlwc29pZC5tYXhpbXVtUmFkaXVzO3JldHVybiB0aGlzLnRhbmdlbnRQbGFuZS5wbGFuZS5ub3JtYWwueiooUC5QSV9PVkVSX1RXTy0yKk1hdGguYXRhbjIodCxlKSl9fSxsb25naXR1ZGU6e2dldDpmdW5jdGlvbigpe2xldCB0PVAuUElfT1ZFUl9UV08rTWF0aC5hdGFuMih0aGlzLnksdGhpcy54KTtyZXR1cm4gdD5NYXRoLlBJJiYodC09UC5UV09fUEkpLHR9fX0pO0NhPW5ldyBjdCx3RD1uZXcgYTtGbi5wcm90b3R5cGUuZ2V0TGF0aXR1ZGU9ZnVuY3Rpb24odCl7bSh0KXx8KHQ9WS5kZWZhdWx0KSxDYS5sYXRpdHVkZT10aGlzLmNvbmZvcm1hbExhdGl0dWRlLENhLmxvbmdpdHVkZT10aGlzLmxvbmdpdHVkZSxDYS5oZWlnaHQ9MDtsZXQgZT10aGlzLmVsbGlwc29pZC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihDYSx3RCk7cmV0dXJuIHQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSxDYSksQ2EubGF0aXR1ZGV9O1REPW5ldyBKcyxPRD1uZXcgYSxFRD1uZXcgYTtGbi5mcm9tQ2FydGVzaWFuPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0ZXNpYW4iLHQpO2xldCBuPVAuc2lnbk5vdFplcm8odC56KSxvPUZuLk5PUlRIX1BPTEVfVEFOR0VOVF9QTEFORSxyPUZuLlNPVVRIX1BPTEU7bjwwJiYobz1Gbi5TT1VUSF9QT0xFX1RBTkdFTlRfUExBTkUscj1Gbi5OT1JUSF9QT0xFKTtsZXQgaT1URDtpLm9yaWdpbj1vLmVsbGlwc29pZC5zY2FsZVRvR2VvY2VudHJpY1N1cmZhY2UodCxpLm9yaWdpbiksaS5kaXJlY3Rpb249YS5zdWJ0cmFjdChpLm9yaWdpbixyLE9EKSxhLm5vcm1hbGl6ZShpLmRpcmVjdGlvbixpLmRpcmVjdGlvbik7bGV0IHM9eW8ucmF5UGxhbmUoaSxvLnBsYW5lLEVEKSxmPWEuc3VidHJhY3QocyxyLHMpLHU9YS5kb3Qoby54QXhpcyxmKSxjPW4qYS5kb3Qoby55QXhpcyxmKTtyZXR1cm4gbShlKT8oZS5wb3NpdGlvbj1uZXcgSih1LGMpLGUudGFuZ2VudFBsYW5lPW8sZSk6bmV3IEZuKG5ldyBKKHUsYyksbyl9O0ZuLmZyb21DYXJ0ZXNpYW5BcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFucyIsdCk7bGV0IG49dC5sZW5ndGg7bShlKT9lLmxlbmd0aD1uOmU9bmV3IEFycmF5KG4pO2ZvcihsZXQgbz0wO288bjtvKyspZVtvXT1Gbi5mcm9tQ2FydGVzaWFuKHRbb10sZVtvXSk7cmV0dXJuIGV9O0ZuLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYobSh0KSlyZXR1cm4gbShlKT8oZS5wb3NpdGlvbj10LnBvc2l0aW9uLGUudGFuZ2VudFBsYW5lPXQudGFuZ2VudFBsYW5lLGUpOm5ldyBGbih0LnBvc2l0aW9uLHQudGFuZ2VudFBsYW5lKX07Rm4uSEFMRl9VTklUX1NQSEVSRT1PYmplY3QuZnJlZXplKG5ldyBZKC41LC41LC41KSk7Rm4uTk9SVEhfUE9MRT1PYmplY3QuZnJlZXplKG5ldyBhKDAsMCwuNSkpO0ZuLlNPVVRIX1BPTEU9T2JqZWN0LmZyZWV6ZShuZXcgYSgwLDAsLS41KSk7Rm4uTk9SVEhfUE9MRV9UQU5HRU5UX1BMQU5FPU9iamVjdC5mcmVlemUobmV3IEFvKEZuLk5PUlRIX1BPTEUsRm4uSEFMRl9VTklUX1NQSEVSRSkpO0ZuLlNPVVRIX1BPTEVfVEFOR0VOVF9QTEFORT1PYmplY3QuZnJlZXplKG5ldyBBbyhGbi5TT1VUSF9QT0xFLEZuLkhBTEZfVU5JVF9TUEhFUkUpKTthcj1Gbn0pO2Z1bmN0aW9uIFNEKHQsZSxuLG8pe2xldCBpPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxSRCkuaGVpZ2h0LHM9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLENFKTtzLmhlaWdodD1pLG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4ocyxlKTtsZXQgZj1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG4sQ0UpO2YuaGVpZ2h0PWktMTAwLG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZixuKX1mdW5jdGlvbiB1eSh0KXtsZXQgZT10LnZlcnRleEZvcm1hdCxuPXQuZ2VvbWV0cnksbz10LnNoYWRvd1ZvbHVtZSxyPW4uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsaT1tKG4uYXR0cmlidXRlcy5zdCk/bi5hdHRyaWJ1dGVzLnN0LnZhbHVlczp2b2lkIDAscz1yLmxlbmd0aCxmPXQud2FsbCx1PXQudG9wfHxmLGM9dC5ib3R0b218fGY7aWYoZS5zdHx8ZS5ub3JtYWx8fGUudGFuZ2VudHx8ZS5iaXRhbmdlbnR8fG8pe2xldCBsPXQuYm91bmRpbmdSZWN0YW5nbGUscD10LnJvdGF0aW9uQXhpcyxkPXQucHJvamVjdFRvMmQsaD10LmVsbGlwc29pZCxfPXQuc3RSb3RhdGlvbixnPXQucGVyUG9zaXRpb25IZWlnaHQsYj12RDtiLng9bC54LGIueT1sLnk7bGV0IHc9ZS5zdD9uZXcgRmxvYXQzMkFycmF5KDIqKHMvMykpOnZvaWQgMCxPO2Uubm9ybWFsJiYoZyYmdSYmIWY/Tz1uLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlczpPPW5ldyBGbG9hdDMyQXJyYXkocykpO2xldCBFPWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHMpOnZvaWQgMCxUPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkocyk6dm9pZCAwLHg9bz9uZXcgRmxvYXQzMkFycmF5KHMpOnZvaWQgMCxNPTAsTj0wLEY9Q0QsST1QRCx2PU1ELEI9ITAsQT1ERCxTPUJEO2lmKF8hPT0wKXtsZXQgej10ZS5mcm9tQXhpc0FuZ2xlKHAsXyxNRSk7QT1aLmZyb21RdWF0ZXJuaW9uKHosQSksej10ZS5mcm9tQXhpc0FuZ2xlKHAsLV8sTUUpLFM9Wi5mcm9tUXVhdGVybmlvbih6LFMpfWVsc2UgQT1aLmNsb25lKFouSURFTlRJVFksQSksUz1aLmNsb25lKFouSURFTlRJVFksUyk7bGV0IEM9MCxMPTA7dSYmYyYmKEM9cy8yLEw9cy8zLHMvPTIpO2ZvcihsZXQgej0wO3o8czt6Kz0zKXtsZXQgaj1hLmZyb21BcnJheShyLHosTEQpO2lmKGUuc3QmJiFtKGkpKXtsZXQgaz1aLm11bHRpcGx5QnlWZWN0b3IoQSxqLHhEKTtrPWguc2NhbGVUb0dlb2RldGljU3VyZmFjZShrLGspO2xldCBxPWQoW2tdLEZEKVswXTtKLnN1YnRyYWN0KHEsYixxKTtsZXQgVz1QLmNsYW1wKHEueC9sLndpZHRoLDAsMSksUj1QLmNsYW1wKHEueS9sLmhlaWdodCwwLDEpO2MmJih3W00rTF09Vyx3W00rMStMXT1SKSx1JiYod1tNXT1XLHdbTSsxXT1SKSxNKz0yfWlmKGUubm9ybWFsfHxlLnRhbmdlbnR8fGUuYml0YW5nZW50fHxvKXtsZXQgaz1OKzEscT1OKzI7aWYoZil7aWYoeiszPHMpe2xldCBXPWEuZnJvbUFycmF5KHIseiszLE5EKTtpZihCKXtsZXQgUj1hLmZyb21BcnJheShyLHorcyxJRCk7ZyYmU0QoaixXLFIsaCksYS5zdWJ0cmFjdChXLGosVyksYS5zdWJ0cmFjdChSLGosUiksRj1hLm5vcm1hbGl6ZShhLmNyb3NzKFIsVyxGKSxGKSxCPSExfWEuZXF1YWxzRXBzaWxvbihXLGosUC5FUFNJTE9OMTApJiYoQj0hMCl9KGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpJiYodj1oLmdlb2RldGljU3VyZmFjZU5vcm1hbChqLHYpLGUudGFuZ2VudCYmKEk9YS5ub3JtYWxpemUoYS5jcm9zcyh2LEYsSSksSSkpKX1lbHNlIEY9aC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoaixGKSwoZS50YW5nZW50fHxlLmJpdGFuZ2VudCkmJihnJiYoTGQ9YS5mcm9tQXJyYXkoTyxOLExkKSxtaT1hLmNyb3NzKGEuVU5JVF9aLExkLG1pKSxtaT1hLm5vcm1hbGl6ZShaLm11bHRpcGx5QnlWZWN0b3IoUyxtaSxtaSksbWkpLGUuYml0YW5nZW50JiYoUGE9YS5ub3JtYWxpemUoYS5jcm9zcyhMZCxtaSxQYSksUGEpKSksST1hLmNyb3NzKGEuVU5JVF9aLEYsSSksST1hLm5vcm1hbGl6ZShaLm11bHRpcGx5QnlWZWN0b3IoUyxJLEkpLEkpLGUuYml0YW5nZW50JiYodj1hLm5vcm1hbGl6ZShhLmNyb3NzKEYsSSx2KSx2KSkpO2Uubm9ybWFsJiYodC53YWxsPyhPW04rQ109Ri54LE9baytDXT1GLnksT1txK0NdPUYueik6YyYmKE9bTitDXT0tRi54LE9baytDXT0tRi55LE9bcStDXT0tRi56KSwodSYmIWd8fGYpJiYoT1tOXT1GLngsT1trXT1GLnksT1txXT1GLnopKSxvJiYoZiYmKEY9aC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoaixGKSkseFtOK0NdPS1GLngseFtrK0NdPS1GLnkseFtxK0NdPS1GLnopLGUudGFuZ2VudCYmKHQud2FsbD8oRVtOK0NdPUkueCxFW2srQ109SS55LEVbcStDXT1JLnopOmMmJihFW04rQ109LUkueCxFW2srQ109LUkueSxFW3ErQ109LUkueiksdSYmKGc/KEVbTl09bWkueCxFW2tdPW1pLnksRVtxXT1taS56KTooRVtOXT1JLngsRVtrXT1JLnksRVtxXT1JLnopKSksZS5iaXRhbmdlbnQmJihjJiYoVFtOK0NdPXYueCxUW2srQ109di55LFRbcStDXT12LnopLHUmJihnPyhUW05dPVBhLngsVFtrXT1QYS55LFRbcV09UGEueik6KFRbTl09di54LFRba109di55LFRbcV09di56KSkpLE4rPTN9fWUuc3QmJiFtKGkpJiYobi5hdHRyaWJ1dGVzLnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczp3fSkpLGUubm9ybWFsJiYobi5hdHRyaWJ1dGVzLm5vcm1hbD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6T30pKSxlLnRhbmdlbnQmJihuLmF0dHJpYnV0ZXMudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6RX0pKSxlLmJpdGFuZ2VudCYmKG4uYXR0cmlidXRlcy5iaXRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlR9KSksbyYmKG4uYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp4fSkpfWlmKHQuZXh0cnVkZSYmbSh0Lm9mZnNldEF0dHJpYnV0ZSkpe2xldCBsPXIubGVuZ3RoLzMscD1uZXcgVWludDhBcnJheShsKTtpZih0Lm9mZnNldEF0dHJpYnV0ZT09PWFlLlRPUCl1JiZjfHxmP3A9cC5maWxsKDEsMCxsLzIpOnUmJihwPXAuZmlsbCgxKSk7ZWxzZXtsZXQgZD10Lm9mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO3A9cC5maWxsKGQpfW4uYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpwfSl9cmV0dXJuIG59ZnVuY3Rpb24gVUQodCxlLG4sbyxyLGkscyxmLHUsYyl7bGV0IGw9e3dhbGxzOltdfSxwO2lmKHN8fGYpe2xldCBPPV9lLmNyZWF0ZUdlb21ldHJ5RnJvbVBvc2l0aW9ucyh0LGUsbixvLGksdSxjKSxFPU8uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsVD1PLmluZGljZXMseCxNO2lmKHMmJmYpe2xldCBOPUUuY29uY2F0KEUpO3g9Ti5sZW5ndGgvMyxNPUx0LmNyZWF0ZVR5cGVkQXJyYXkoeCxULmxlbmd0aCoyKSxNLnNldChUKTtsZXQgRj1ULmxlbmd0aCxJPXgvMjtmb3IocD0wO3A8RjtwKz0zKXtsZXQgdj1NW3BdK0ksQj1NW3ArMV0rSSxBPU1bcCsyXStJO01bcCtGXT1BLE1bcCsxK0ZdPUIsTVtwKzIrRl09dn1pZihPLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPU4saSYmdS5ub3JtYWwpe2xldCB2PU8uYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzO08uYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzPW5ldyBGbG9hdDMyQXJyYXkoTi5sZW5ndGgpLE8uYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzLnNldCh2KX1pZih1LnN0JiZtKG4pKXtsZXQgdj1PLmF0dHJpYnV0ZXMuc3QudmFsdWVzO08uYXR0cmlidXRlcy5zdC52YWx1ZXM9bmV3IEZsb2F0MzJBcnJheSh4KjIpLE8uYXR0cmlidXRlcy5zdC52YWx1ZXM9di5jb25jYXQodil9Ty5pbmRpY2VzPU19ZWxzZSBpZihmKXtmb3IoeD1FLmxlbmd0aC8zLE09THQuY3JlYXRlVHlwZWRBcnJheSh4LFQubGVuZ3RoKSxwPTA7cDxULmxlbmd0aDtwKz0zKU1bcF09VFtwKzJdLE1bcCsxXT1UW3ArMV0sTVtwKzJdPVRbcF07Ty5pbmRpY2VzPU19bC50b3BBbmRCb3R0b209bmV3IGZvKHtnZW9tZXRyeTpPfSl9bGV0IGQ9ci5vdXRlclJpbmcsaD1Bby5mcm9tUG9pbnRzKGQsdCksXz1oLnByb2plY3RQb2ludHNPbnRvUGxhbmUoZCxORSksZz1QZS5jb21wdXRlV2luZGluZ09yZGVyMkQoXyk7Zz09PVBvLkNMT0NLV0lTRSYmKGQ9ZC5zbGljZSgpLnJldmVyc2UoKSk7bGV0IGI9X2UuY29tcHV0ZVdhbGxHZW9tZXRyeShkLG4sdCxvLGksYyk7bC53YWxscy5wdXNoKG5ldyBmbyh7Z2VvbWV0cnk6Yn0pKTtsZXQgdz1yLmhvbGVzO2ZvcihwPTA7cDx3Lmxlbmd0aDtwKyspe2xldCBPPXdbcF07Xz1oLnByb2plY3RQb2ludHNPbnRvUGxhbmUoTyxORSksZz1QZS5jb21wdXRlV2luZGluZ09yZGVyMkQoXyksZz09PVBvLkNPVU5URVJfQ0xPQ0tXSVNFJiYoTz1PLnNsaWNlKCkucmV2ZXJzZSgpKSxiPV9lLmNvbXB1dGVXYWxsR2VvbWV0cnkoTyxuLHQsbyxpLGMpLGwud2FsbHMucHVzaChuZXcgZm8oe2dlb21ldHJ5OmJ9KSl9cmV0dXJuIGx9ZnVuY3Rpb24gU3IodCl7aWYoeS50eXBlT2Yub2JqZWN0KCJvcHRpb25zIix0KSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMucG9seWdvbkhpZXJhcmNoeSIsdC5wb2x5Z29uSGllcmFyY2h5KSxtKHQucGVyUG9zaXRpb25IZWlnaHQpJiZ0LnBlclBvc2l0aW9uSGVpZ2h0JiZtKHQuaGVpZ2h0KSl0aHJvdyBuZXcgRCgiQ2Fubm90IHVzZSBib3RoIG9wdGlvbnMucGVyUG9zaXRpb25IZWlnaHQgYW5kIG9wdGlvbnMuaGVpZ2h0Iik7aWYobSh0LmFyY1R5cGUpJiZ0LmFyY1R5cGUhPT1oZS5HRU9ERVNJQyYmdC5hcmNUeXBlIT09aGUuUkhVTUIpdGhyb3cgbmV3IEQoIkludmFsaWQgYXJjVHlwZS4gVmFsaWQgb3B0aW9ucyBhcmUgQXJjVHlwZS5HRU9ERVNJQyBhbmQgQXJjVHlwZS5SSFVNQi4iKTtsZXQgZT10LnBvbHlnb25IaWVyYXJjaHksbj10LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVCxvPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQscj10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSxpPXQuc3RSb3RhdGlvbj8/MCxzPXQudGV4dHVyZUNvb3JkaW5hdGVzLGY9dC5wZXJQb3NpdGlvbkhlaWdodD8/ITEsdT1mJiZtKHQuZXh0cnVkZWRIZWlnaHQpLGM9dC5oZWlnaHQ/PzAsbD10LmV4dHJ1ZGVkSGVpZ2h0Pz9jO2lmKCF1KXtsZXQgcD1NYXRoLm1heChjLGwpO2w9TWF0aC5taW4oYyxsKSxjPXB9dGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKG4pLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKG8pLHRoaXMuX2dyYW51bGFyaXR5PXIsdGhpcy5fc3RSb3RhdGlvbj1pLHRoaXMuX2hlaWdodD1jLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PWwsdGhpcy5fY2xvc2VUb3A9dC5jbG9zZVRvcD8/ITAsdGhpcy5fY2xvc2VCb3R0b209dC5jbG9zZUJvdHRvbT8/ITAsdGhpcy5fcG9seWdvbkhpZXJhcmNoeT1lLHRoaXMuX3BlclBvc2l0aW9uSGVpZ2h0PWYsdGhpcy5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPXUsdGhpcy5fc2hhZG93Vm9sdW1lPXQuc2hhZG93Vm9sdW1lPz8hMSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5Z29uR2VvbWV0cnkiLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl9hcmNUeXBlPXQuYXJjVHlwZT8/aGUuR0VPREVTSUMsdGhpcy5fcmVjdGFuZ2xlPXZvaWQgMCx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPXZvaWQgMCx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZXM9cyx0aGlzLnBhY2tlZExlbmd0aD1fZS5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKGUsYSkrWS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RoKyhzP19lLmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgocyxKKToxKSsxMn1mdW5jdGlvbiBJRSh0LGUsbixvLHIsaSl7bGV0IHM9dC5sb25naXR1ZGUsZj1zPj0wP3M6cytQLlRXT19QSTtyLndlc3RPdmVySWRsPU1hdGgubWluKHIud2VzdE92ZXJJZGwsZiksci5lYXN0T3ZlcklkbD1NYXRoLm1heChyLmVhc3RPdmVySWRsLGYpLGkud2VzdD1NYXRoLm1pbihpLndlc3QscyksaS5lYXN0PU1hdGgubWF4KGkuZWFzdCxzKTtsZXQgdT10LmdldExhdGl0dWRlKG4pLGM9dTtpZihpLnNvdXRoPU1hdGgubWluKGkuc291dGgsdSksaS5ub3J0aD1NYXRoLm1heChpLm5vcnRoLHUpLG8hPT1oZS5SSFVNQil7bGV0IGQ9Si5zdWJ0cmFjdChlLnBvc2l0aW9uLHQucG9zaXRpb24sekQpLGg9Si5kb3QoZS5wb3NpdGlvbixkKS9KLmRvdChkLGQpO2lmKGg+MCYmaDwxKXtsZXQgXz1KLmFkZChlLnBvc2l0aW9uLEoubXVsdGlwbHlCeVNjYWxhcihkLC1oLGQpLGpEKSxnPWFyLmNsb25lKGUsSEQpO2cucG9zaXRpb249XztsZXQgYj1nLmdldExhdGl0dWRlKG4pO2kuc291dGg9TWF0aC5taW4oaS5zb3V0aCxiKSxpLm5vcnRoPU1hdGgubWF4KGkubm9ydGgsYiksTWF0aC5hYnModSk+TWF0aC5hYnMoYikmJihjPWIpfX1sZXQgbD1lLngqdC55LXQueCplLnkscD1NYXRoLnNpZ24obCk7cCE9PTAmJihwKj1KLmFuZ2xlQmV0d2VlbihlLnBvc2l0aW9uLHQucG9zaXRpb24pKSxjPj0wJiYoci5ub3J0aEFuZ2xlKz1wKSxjPD0wJiYoci5zb3V0aEFuZ2xlKz1wKX1mdW5jdGlvbiBXRCh0LGUsbil7cmV0dXJuIHQuaGVpZ2h0Pj1QLlBJfHx0LndpZHRoPj1QLlBJP2FyLmZyb21DYXJ0ZXNpYW4oZVswXSxLRCkudGFuZ2VudFBsYW5lOkFvLmZyb21Qb2ludHMoZSxuKX1mdW5jdGlvbiBYRCh0LGUsbil7cmV0dXJuKG8scik9PntpZih0LmhlaWdodD49UC5QSXx8dC53aWR0aD49UC5QSSl7aWYodC5zb3V0aDwwJiZ0Lm5vcnRoPjApe20ocil8fChyPVtdKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoOysrcyl7bGV0IGY9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvW3NdLEZFKTtyW3NdPW5ldyBKKGYubG9uZ2l0dWRlL1AuUEksZi5sYXRpdHVkZS9QLlBJX09WRVJfVFdPKX1yZXR1cm4gci5sZW5ndGg9by5sZW5ndGgscn1yZXR1cm4gYXIuZnJvbUNhcnRlc2lhbkFycmF5KG8scil9cmV0dXJuIEFvLmZyb21Qb2ludHMoZSxuKS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKG8scil9fWZ1bmN0aW9uIFlEKHQsZSxuKXtpZih0LmhlaWdodD49UC5QSXx8dC53aWR0aD49UC5QSSlyZXR1cm4ocixpKT0+e2lmKHQuc291dGg8MCYmdC5ub3J0aD4wKXtsZXQgcz1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHIsRkUpO3JldHVybiBtKGkpfHwoaT1uZXcgSiksaS54PXMubG9uZ2l0dWRlL1AuUEksaS55PXMubGF0aXR1ZGUvUC5QSV9PVkVSX1RXTyxpfXJldHVybiBhci5mcm9tQ2FydGVzaWFuKHIsaSl9O2xldCBvPUFvLmZyb21Qb2ludHMoZSxuKTtyZXR1cm4ocixpKT0+by5wcm9qZWN0UG9pbnRzT250b1BsYW5lKHIsaSl9ZnVuY3Rpb24gJEQodCxlLG4sbyl7cmV0dXJuKHIsaSk9PiFvJiYodC5oZWlnaHQ+PVAuUElfT1ZFUl9UV098fHQud2lkdGg+PTIqUC5QSV9PVkVSX1RIUkVFKT9fZS5zcGxpdFBvbHlnb25zT25FcXVhdG9yKHIsZSxuLGkpOnJ9ZnVuY3Rpb24gWkQodCxlLG4sbyl7aWYoZS5oZWlnaHQ+PVAuUEl8fGUud2lkdGg+PVAuUEkpcmV0dXJuIHFyLmZyb21SZWN0YW5nbGUoZSx2b2lkIDAsUEUpO2xldCByPXQsaT1Bby5mcm9tUG9pbnRzKHIsbik7cmV0dXJuIF9lLmNvbXB1dGVCb3VuZGluZ1JlY3RhbmdsZShpLnBsYW5lLm5vcm1hbCxpLnByb2plY3RQb2ludE9udG9QbGFuZS5iaW5kKGkpLHIsbyxQRSl9ZnVuY3Rpb24gUUQodCl7bGV0IGU9LXQuX3N0Um90YXRpb247aWYoZT09PTApcmV0dXJuWzAsMCwwLDEsMSwwXTtsZXQgbj10Ll9lbGxpcHNvaWQsbz10Ll9wb2x5Z29uSGllcmFyY2h5LnBvc2l0aW9ucyxyPXQucmVjdGFuZ2xlO3JldHVybiBVdC5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyhvLGUsbixyKX12YXIgUkQsQ0UsUEUseEQsQ0QsUEQsTUQsTkQsSUQsTGQsbWksUGEsdkQsRkQsTEQsTUUsREQsQkQsTkUsa0QsR0QsVkQsekQsakQsSEQsdkUscUQsUnIsS0QsRkUsbHksTEU9JCgoKT0+e3VjKCk7Q2YoKTt2ZSgpO2tlKCk7RHQoKTtJZSgpO1d0KCk7RGUoKTt5ZSgpO2Z0KCk7SHQoKTskdCgpO3BhKCk7WWUoKTskZSgpO2NjKCk7RG8oKTtjaSgpO1plKCk7S3QoKTtVbigpO0RmKCk7S3IoKTtYbygpO1RuKCk7eEUoKTt4bygpO3BjKCk7UkQ9bmV3IGN0LENFPW5ldyBjdDtQRT1uZXcgcXIseEQ9bmV3IGEsQ0Q9bmV3IGEsUEQ9bmV3IGEsTUQ9bmV3IGEsTkQ9bmV3IGEsSUQ9bmV3IGEsTGQ9bmV3IGEsbWk9bmV3IGEsUGE9bmV3IGEsdkQ9bmV3IEosRkQ9bmV3IEosTEQ9bmV3IGEsTUU9bmV3IHRlLEREPW5ldyBaLEJEPW5ldyBaO05FPVtdO1NyLmZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24odCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1QseS5kZWZpbmVkKCJvcHRpb25zLnBvc2l0aW9ucyIsdC5wb3NpdGlvbnMpO2xldCBlPXtwb2x5Z29uSGllcmFyY2h5Ontwb3NpdGlvbnM6dC5wb3NpdGlvbnN9LGhlaWdodDp0LmhlaWdodCxleHRydWRlZEhlaWdodDp0LmV4dHJ1ZGVkSGVpZ2h0LHZlcnRleEZvcm1hdDp0LnZlcnRleEZvcm1hdCxzdFJvdGF0aW9uOnQuc3RSb3RhdGlvbixlbGxpcHNvaWQ6dC5lbGxpcHNvaWQsZ3JhbnVsYXJpdHk6dC5ncmFudWxhcml0eSxwZXJQb3NpdGlvbkhlaWdodDp0LnBlclBvc2l0aW9uSGVpZ2h0LGNsb3NlVG9wOnQuY2xvc2VUb3AsY2xvc2VCb3R0b206dC5jbG9zZUJvdHRvbSxvZmZzZXRBdHRyaWJ1dGU6dC5vZmZzZXRBdHRyaWJ1dGUsYXJjVHlwZTp0LmFyY1R5cGUsdGV4dHVyZUNvb3JkaW5hdGVzOnQudGV4dHVyZUNvb3JkaW5hdGVzfTtyZXR1cm4gbmV3IFNyKGUpfTtTci5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLG49X2UucGFja1BvbHlnb25IaWVyYXJjaHkodC5fcG9seWdvbkhpZXJhcmNoeSxlLG4sYSksWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLHB0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksbis9cHQucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9oZWlnaHQsZVtuKytdPXQuX2V4dHJ1ZGVkSGVpZ2h0LGVbbisrXT10Ll9ncmFudWxhcml0eSxlW24rK109dC5fc3RSb3RhdGlvbixlW24rK109dC5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPzE6MCxlW24rK109dC5fcGVyUG9zaXRpb25IZWlnaHQ/MTowLGVbbisrXT10Ll9jbG9zZVRvcD8xOjAsZVtuKytdPXQuX2Nsb3NlQm90dG9tPzE6MCxlW24rK109dC5fc2hhZG93Vm9sdW1lPzE6MCxlW24rK109dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlW24rK109dC5fYXJjVHlwZSxtKHQuX3RleHR1cmVDb29yZGluYXRlcyk/bj1fZS5wYWNrUG9seWdvbkhpZXJhcmNoeSh0Ll90ZXh0dXJlQ29vcmRpbmF0ZXMsZSxuLEopOmVbbisrXT0tMSxlW24rK109dC5wYWNrZWRMZW5ndGgsZX07a0Q9WS5jbG9uZShZLlVOSVRfU1BIRVJFKSxHRD1uZXcgcHQsVkQ9e3BvbHlnb25IaWVyYXJjaHk6e319O1NyLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wO2xldCBvPV9lLnVucGFja1BvbHlnb25IaWVyYXJjaHkodCxlLGEpO2U9by5zdGFydGluZ0luZGV4LGRlbGV0ZSBvLnN0YXJ0aW5nSW5kZXg7bGV0IHI9WS51bnBhY2sodCxlLGtEKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgaT1wdC51bnBhY2sodCxlLEdEKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IHM9dFtlKytdLGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdPT09MSxwPXRbZSsrXT09PTEsZD10W2UrK109PT0xLGg9dFtlKytdPT09MSxfPXRbZSsrXT09PTEsZz10W2UrK10sYj10W2UrK10sdz10W2VdPT09LTE/dm9pZCAwOl9lLnVucGFja1BvbHlnb25IaWVyYXJjaHkodCxlLEopO20odyk/KGU9dy5zdGFydGluZ0luZGV4LGRlbGV0ZSB3LnN0YXJ0aW5nSW5kZXgpOmUrKztsZXQgTz10W2UrK107cmV0dXJuIG0obil8fChuPW5ldyBTcihWRCkpLG4uX3BvbHlnb25IaWVyYXJjaHk9byxuLl9lbGxpcHNvaWQ9WS5jbG9uZShyLG4uX2VsbGlwc29pZCksbi5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKGksbi5fdmVydGV4Rm9ybWF0KSxuLl9oZWlnaHQ9cyxuLl9leHRydWRlZEhlaWdodD1mLG4uX2dyYW51bGFyaXR5PXUsbi5fc3RSb3RhdGlvbj1jLG4uX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT1sLG4uX3BlclBvc2l0aW9uSGVpZ2h0PXAsbi5fY2xvc2VUb3A9ZCxuLl9jbG9zZUJvdHRvbT1oLG4uX3NoYWRvd1ZvbHVtZT1fLG4uX29mZnNldEF0dHJpYnV0ZT1nPT09LTE/dm9pZCAwOmcsbi5fYXJjVHlwZT1iLG4uX3RleHR1cmVDb29yZGluYXRlcz13LG4ucGFja2VkTGVuZ3RoPU8sbn07ekQ9bmV3IEosakQ9bmV3IEosSEQ9bmV3IGFyO3ZFPW5ldyBhcixxRD1uZXcgYXIsUnI9e25vcnRoQW5nbGU6MCxzb3V0aEFuZ2xlOjAsd2VzdE92ZXJJZGw6MCxlYXN0T3ZlcklkbDowfTtTci5jb21wdXRlUmVjdGFuZ2xlRnJvbVBvc2l0aW9ucz1mdW5jdGlvbih0LGUsbixvKXtpZih5LmRlZmluZWQoInBvc2l0aW9ucyIsdCksbShvKXx8KG89bmV3IE50KSx0Lmxlbmd0aDwzKXJldHVybiBvO28ud2VzdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksby5lYXN0PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxvLnNvdXRoPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxvLm5vcnRoPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxSci5ub3J0aEFuZ2xlPTAsUnIuc291dGhBbmdsZT0wLFJyLndlc3RPdmVySWRsPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxSci5lYXN0T3ZlcklkbD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7bGV0IHI9dC5sZW5ndGgsaT1hci5mcm9tQ2FydGVzaWFuKHRbMF0scUQpO2ZvcihsZXQgcz0xO3M8cjtzKyspe2xldCBmPWFyLmZyb21DYXJ0ZXNpYW4odFtzXSx2RSk7SUUoZixpLGUsbixScixvKSxpPWFyLmNsb25lKGYsaSl9cmV0dXJuIElFKGFyLmZyb21DYXJ0ZXNpYW4odFswXSx2RSksaSxlLG4sUnIsbyksby5lYXN0LW8ud2VzdD5Sci5lYXN0T3ZlcklkbC1Sci53ZXN0T3ZlcklkbCYmKG8ud2VzdD1Sci53ZXN0T3ZlcklkbCxvLmVhc3Q9UnIuZWFzdE92ZXJJZGwsby5lYXN0PlAuUEkmJihvLmVhc3Q9by5lYXN0LVAuVFdPX1BJKSxvLndlc3Q+UC5QSSYmKG8ud2VzdD1vLndlc3QtUC5UV09fUEkpKSxQLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMoUnIubm9ydGhBbmdsZSksUC5UV09fUEksUC5FUFNJTE9OMTApJiYoby5ub3J0aD1QLlBJX09WRVJfVFdPLG8uZWFzdD1QLlBJLG8ud2VzdD0tUC5QSSksUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKFJyLnNvdXRoQW5nbGUpLFAuVFdPX1BJLFAuRVBTSUxPTjEwKSYmKG8uc291dGg9LVAuUElfT1ZFUl9UV08sby5lYXN0PVAuUEksby53ZXN0PS1QLlBJKSxvfTtLRD1uZXcgYXI7RkU9bmV3IGN0O1NyLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3ZlcnRleEZvcm1hdCxuPXQuX2VsbGlwc29pZCxvPXQuX2dyYW51bGFyaXR5LHI9dC5fc3RSb3RhdGlvbixpPXQuX3BvbHlnb25IaWVyYXJjaHkscz10Ll9wZXJQb3NpdGlvbkhlaWdodCxmPXQuX2Nsb3NlVG9wLHU9dC5fY2xvc2VCb3R0b20sYz10Ll9hcmNUeXBlLGw9dC5fdGV4dHVyZUNvb3JkaW5hdGVzLHA9bShsKSxkPWkucG9zaXRpb25zO2lmKGQubGVuZ3RoPDMpcmV0dXJuO2xldCBoPXQucmVjdGFuZ2xlLF89X2UucG9seWdvbnNGcm9tSGllcmFyY2h5KGkscCxYRChoLGQsbiksIXMsbiwkRChoLG4sYyxzKSksZz1fLmhpZXJhcmNoeSxiPV8ucG9seWdvbnMsdz1mdW5jdGlvbihDKXtyZXR1cm4gQ30sTz1wP19lLnBvbHlnb25zRnJvbUhpZXJhcmNoeShsLCEwLHcsITEsbikucG9seWdvbnM6dm9pZCAwO2lmKGcubGVuZ3RoPT09MClyZXR1cm47bGV0IEU9Z1swXS5vdXRlclJpbmcsVD1aRChFLGgsbixyKSx4PVtdLE09dC5faGVpZ2h0LE49dC5fZXh0cnVkZWRIZWlnaHQsRj10Ll9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGV8fCFQLmVxdWFsc0Vwc2lsb24oTSxOLDAsUC5FUFNJTE9OMiksST17cGVyUG9zaXRpb25IZWlnaHQ6cyx2ZXJ0ZXhGb3JtYXQ6ZSxnZW9tZXRyeTp2b2lkIDAscm90YXRpb25BeGlzOldEKGgsRSxuKS5wbGFuZS5ub3JtYWwscHJvamVjdFRvMmQ6WUQoaCxFLG4pLGJvdW5kaW5nUmVjdGFuZ2xlOlQsZWxsaXBzb2lkOm4sc3RSb3RhdGlvbjpyLHRleHR1cmVDb29yZGluYXRlczp2b2lkIDAsYm90dG9tOiExLHRvcDohMCx3YWxsOiExLGV4dHJ1ZGU6ITEsYXJjVHlwZTpjfSx2O2lmKEYpZm9yKEkuZXh0cnVkZT0hMCxJLnRvcD1mLEkuYm90dG9tPXUsSS5zaGFkb3dWb2x1bWU9dC5fc2hhZG93Vm9sdW1lLEkub2Zmc2V0QXR0cmlidXRlPXQuX29mZnNldEF0dHJpYnV0ZSx2PTA7djxiLmxlbmd0aDt2Kyspe2xldCBDPVVEKG4sYlt2XSxwP09bdl06dm9pZCAwLG8sZ1t2XSxzLGYsdSxlLGMpLEw7ZiYmdT8oTD1DLnRvcEFuZEJvdHRvbSxJLmdlb21ldHJ5PV9lLnNjYWxlVG9HZW9kZXRpY0hlaWdodEV4dHJ1ZGVkKEwuZ2VvbWV0cnksTSxOLG4scykpOmY/KEw9Qy50b3BBbmRCb3R0b20sTC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoTC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxNLG4sIXMpLEkuZ2VvbWV0cnk9TC5nZW9tZXRyeSk6dSYmKEw9Qy50b3BBbmRCb3R0b20sTC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoTC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxOLG4sITApLEkuZ2VvbWV0cnk9TC5nZW9tZXRyeSksKGZ8fHUpJiYoSS53YWxsPSExLEwuZ2VvbWV0cnk9dXkoSSkseC5wdXNoKEwpKTtsZXQgej1DLndhbGxzO0kud2FsbD0hMDtmb3IobGV0IGo9MDtqPHoubGVuZ3RoO2orKyl7bGV0IGs9eltqXTtJLmdlb21ldHJ5PV9lLnNjYWxlVG9HZW9kZXRpY0hlaWdodEV4dHJ1ZGVkKGsuZ2VvbWV0cnksTSxOLG4scyksay5nZW9tZXRyeT11eShJKSx4LnB1c2goayl9fWVsc2UgZm9yKHY9MDt2PGIubGVuZ3RoO3YrKyl7bGV0IEM9bmV3IGZvKHtnZW9tZXRyeTpfZS5jcmVhdGVHZW9tZXRyeUZyb21Qb3NpdGlvbnMobixiW3ZdLHA/T1t2XTp2b2lkIDAsbyxzLGUsYyl9KTtpZihDLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChDLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLE0sbiwhcyksSS5nZW9tZXRyeT1DLmdlb21ldHJ5LEMuZ2VvbWV0cnk9dXkoSSksbSh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgTD1DLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCx6PXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLGo9bmV3IFVpbnQ4QXJyYXkoTC8zKS5maWxsKHopO0MuZ2VvbWV0cnkuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpqfSl9eC5wdXNoKEMpfWxldCBCPUdlLmNvbWJpbmVJbnN0YW5jZXMoeClbMF07Qi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1uZXcgRmxvYXQ2NEFycmF5KEIuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMpLEIuaW5kaWNlcz1MdC5jcmVhdGVUeXBlZEFycmF5KEIuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMsQi5pbmRpY2VzKTtsZXQgQT1CLmF0dHJpYnV0ZXMsUz1BdC5mcm9tVmVydGljZXMoQS5wb3NpdGlvbi52YWx1ZXMpO3JldHVybiBlLnBvc2l0aW9ufHxkZWxldGUgQS5wb3NpdGlvbixuZXcgVXQoe2F0dHJpYnV0ZXM6QSxpbmRpY2VzOkIuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkIucHJpbWl0aXZlVHlwZSxib3VuZGluZ1NwaGVyZTpTLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07U3IuY3JlYXRlU2hhZG93Vm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10Ll9ncmFudWxhcml0eSxyPXQuX2VsbGlwc29pZCxpPWUobyxyKSxzPW4obyxyKTtyZXR1cm4gbmV3IFNyKHtwb2x5Z29uSGllcmFyY2h5OnQuX3BvbHlnb25IaWVyYXJjaHksZWxsaXBzb2lkOnIsc3RSb3RhdGlvbjp0Ll9zdFJvdGF0aW9uLGdyYW51bGFyaXR5Om8scGVyUG9zaXRpb25IZWlnaHQ6ITEsZXh0cnVkZWRIZWlnaHQ6aSxoZWlnaHQ6cyx2ZXJ0ZXhGb3JtYXQ6cHQuUE9TSVRJT05fT05MWSxzaGFkb3dWb2x1bWU6ITAsYXJjVHlwZTp0Ll9hcmNUeXBlfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNyLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtpZighbSh0aGlzLl9yZWN0YW5nbGUpKXtsZXQgdD10aGlzLl9wb2x5Z29uSGllcmFyY2h5LnBvc2l0aW9uczt0aGlzLl9yZWN0YW5nbGU9U3IuY29tcHV0ZVJlY3RhbmdsZUZyb21Qb3NpdGlvbnModCx0aGlzLl9lbGxpcHNvaWQsdGhpcy5fYXJjVHlwZSl9cmV0dXJuIHRoaXMuX3JlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBtKHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHMpfHwodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz1RRCh0aGlzKSksdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50c319fSk7bHk9U3J9KTt2YXIgcHk9e307bGUocHkse2RlZmF1bHQ6KCk9PnRCfSk7ZnVuY3Rpb24gSkQodCxlKXtyZXR1cm4gbShlKSYmKHQ9bHkudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksbHkuY3JlYXRlR2VvbWV0cnkodCl9dmFyIHRCLGR5PSQoKCk9PntmdCgpOyR0KCk7TEUoKTt0Qj1KRH0pO2Z1bmN0aW9uIGVCKHQsZSxuLG8scil7bGV0IHM9QW8uZnJvbVBvaW50cyhlLHQpLnByb2plY3RQb2ludHNPbnRvUGxhbmUoZSxERSk7UGUuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKHMpPT09UG8uQ0xPQ0tXSVNFJiYocy5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTtsZXQgdSxjLGw9ZS5sZW5ndGgscD0wO2lmKG8pZm9yKHU9bmV3IEZsb2F0NjRBcnJheShsKjIqMyksYz0wO2M8bDtjKyspe2xldCBfPWVbY10sZz1lWyhjKzEpJWxdO3VbcCsrXT1fLngsdVtwKytdPV8ueSx1W3ArK109Xy56LHVbcCsrXT1nLngsdVtwKytdPWcueSx1W3ArK109Zy56fWVsc2V7bGV0IF89MDtpZihyPT09aGUuR0VPREVTSUMpZm9yKGM9MDtjPGw7YysrKV8rPV9lLnN1YmRpdmlkZUxpbmVDb3VudChlW2NdLGVbKGMrMSklbF0sbik7ZWxzZSBpZihyPT09aGUuUkhVTUIpZm9yKGM9MDtjPGw7YysrKV8rPV9lLnN1YmRpdmlkZVJodW1iTGluZUNvdW50KHQsZVtjXSxlWyhjKzEpJWxdLG4pO2Zvcih1PW5ldyBGbG9hdDY0QXJyYXkoXyozKSxjPTA7YzxsO2MrKyl7bGV0IGc7cj09PWhlLkdFT0RFU0lDP2c9X2Uuc3ViZGl2aWRlTGluZShlW2NdLGVbKGMrMSklbF0sbixEZCk6cj09PWhlLlJIVU1CJiYoZz1fZS5zdWJkaXZpZGVSaHVtYkxpbmUodCxlW2NdLGVbKGMrMSklbF0sbixEZCkpO2xldCBiPWcubGVuZ3RoO2ZvcihsZXQgdz0wO3c8YjsrK3cpdVtwKytdPWdbd119fWw9dS5sZW5ndGgvMztsZXQgZD1sKjIsaD1MdC5jcmVhdGVUeXBlZEFycmF5KGwsZCk7Zm9yKHA9MCxjPTA7YzxsLTE7YysrKWhbcCsrXT1jLGhbcCsrXT1jKzE7cmV0dXJuIGhbcCsrXT1sLTEsaFtwKytdPTAsbmV3IGZvKHtnZW9tZXRyeTpuZXcgVXQoe2F0dHJpYnV0ZXM6bmV3IGllKHtwb3NpdGlvbjpuZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnV9KX0pLGluZGljZXM6aCxwcmltaXRpdmVUeXBlOkJ0LkxJTkVTfSl9KX1mdW5jdGlvbiBuQih0LGUsbixvLHIpe2xldCBzPUFvLmZyb21Qb2ludHMoZSx0KS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKGUsREUpO1BlLmNvbXB1dGVXaW5kaW5nT3JkZXIyRChzKT09PVBvLkNMT0NLV0lTRSYmKHMucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7bGV0IHUsYyxsPWUubGVuZ3RoLHA9bmV3IEFycmF5KGwpLGQ9MDtpZihvKWZvcih1PW5ldyBGbG9hdDY0QXJyYXkobCoyKjMqMiksYz0wO2M8bDsrK2Mpe3BbY109ZC8zO2xldCBiPWVbY10sdz1lWyhjKzEpJWxdO3VbZCsrXT1iLngsdVtkKytdPWIueSx1W2QrK109Yi56LHVbZCsrXT13LngsdVtkKytdPXcueSx1W2QrK109dy56fWVsc2V7bGV0IGI9MDtpZihyPT09aGUuR0VPREVTSUMpZm9yKGM9MDtjPGw7YysrKWIrPV9lLnN1YmRpdmlkZUxpbmVDb3VudChlW2NdLGVbKGMrMSklbF0sbik7ZWxzZSBpZihyPT09aGUuUkhVTUIpZm9yKGM9MDtjPGw7YysrKWIrPV9lLnN1YmRpdmlkZVJodW1iTGluZUNvdW50KHQsZVtjXSxlWyhjKzEpJWxdLG4pO2Zvcih1PW5ldyBGbG9hdDY0QXJyYXkoYiozKjIpLGM9MDtjPGw7KytjKXtwW2NdPWQvMztsZXQgdztyPT09aGUuR0VPREVTSUM/dz1fZS5zdWJkaXZpZGVMaW5lKGVbY10sZVsoYysxKSVsXSxuLERkKTpyPT09aGUuUkhVTUImJih3PV9lLnN1YmRpdmlkZVJodW1iTGluZSh0LGVbY10sZVsoYysxKSVsXSxuLERkKSk7bGV0IE89dy5sZW5ndGg7Zm9yKGxldCBFPTA7RTxPOysrRSl1W2QrK109d1tFXX19bD11Lmxlbmd0aC82O2xldCBoPXAubGVuZ3RoLF89KGwqMitoKSoyLGc9THQuY3JlYXRlVHlwZWRBcnJheShsK2gsXyk7Zm9yKGQ9MCxjPTA7YzxsOysrYylnW2QrK109YyxnW2QrK109KGMrMSklbCxnW2QrK109YytsLGdbZCsrXT0oYysxKSVsK2w7Zm9yKGM9MDtjPGg7YysrKXtsZXQgYj1wW2NdO2dbZCsrXT1iLGdbZCsrXT1iK2x9cmV0dXJuIG5ldyBmbyh7Z2VvbWV0cnk6bmV3IFV0KHthdHRyaWJ1dGVzOm5ldyBpZSh7cG9zaXRpb246bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp1fSl9KSxpbmRpY2VzOmcscHJpbWl0aXZlVHlwZTpCdC5MSU5FU30pfSl9ZnVuY3Rpb24gYmModCl7aWYoeS50eXBlT2Yub2JqZWN0KCJvcHRpb25zIix0KSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMucG9seWdvbkhpZXJhcmNoeSIsdC5wb2x5Z29uSGllcmFyY2h5KSx0LnBlclBvc2l0aW9uSGVpZ2h0JiZtKHQuaGVpZ2h0KSl0aHJvdyBuZXcgRCgiQ2Fubm90IHVzZSBib3RoIG9wdGlvbnMucGVyUG9zaXRpb25IZWlnaHQgYW5kIG9wdGlvbnMuaGVpZ2h0Iik7aWYobSh0LmFyY1R5cGUpJiZ0LmFyY1R5cGUhPT1oZS5HRU9ERVNJQyYmdC5hcmNUeXBlIT09aGUuUkhVTUIpdGhyb3cgbmV3IEQoIkludmFsaWQgYXJjVHlwZS4gVmFsaWQgb3B0aW9ucyBhcmUgQXJjVHlwZS5HRU9ERVNJQyBhbmQgQXJjVHlwZS5SSFVNQi4iKTtsZXQgZT10LnBvbHlnb25IaWVyYXJjaHksbj10LmVsbGlwc29pZD8/WS5kZWZhdWx0LG89dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUUscj10LnBlclBvc2l0aW9uSGVpZ2h0Pz8hMSxpPXImJm0odC5leHRydWRlZEhlaWdodCkscz10LmFyY1R5cGU/P2hlLkdFT0RFU0lDLGY9dC5oZWlnaHQ/PzAsdT10LmV4dHJ1ZGVkSGVpZ2h0Pz9mO2lmKCFpKXtsZXQgYz1NYXRoLm1heChmLHUpO3U9TWF0aC5taW4oZix1KSxmPWN9dGhpcy5fZWxsaXBzb2lkPVkuY2xvbmUobiksdGhpcy5fZ3JhbnVsYXJpdHk9byx0aGlzLl9oZWlnaHQ9Zix0aGlzLl9leHRydWRlZEhlaWdodD11LHRoaXMuX2FyY1R5cGU9cyx0aGlzLl9wb2x5Z29uSGllcmFyY2h5PWUsdGhpcy5fcGVyUG9zaXRpb25IZWlnaHQ9cix0aGlzLl9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU9aSx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUG9seWdvbk91dGxpbmVHZW9tZXRyeSIsdGhpcy5wYWNrZWRMZW5ndGg9X2UuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChlLGEpK1kucGFja2VkTGVuZ3RoKzh9dmFyIERFLERkLG9CLHJCLG15LEJFPSQoKCk9Pnt1YygpO3ZlKCk7RHQoKTtXdCgpO0RlKCk7eWUoKTtmdCgpO0h0KCk7JHQoKTtwYSgpO1llKCk7JGUoKTthbigpO2NjKCk7RG8oKTtjaSgpO1plKCk7S3QoKTtEZigpO0tyKCk7dG4oKTtwYygpO0RFPVtdLERkPVtdO2JjLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsbj1fZS5wYWNrUG9seWdvbkhpZXJhcmNoeSh0Ll9wb2x5Z29uSGllcmFyY2h5LGUsbixhKSxZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2hlaWdodCxlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbisrXT10Ll9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU/MTowLGVbbisrXT10Ll9wZXJQb3NpdGlvbkhlaWdodD8xOjAsZVtuKytdPXQuX2FyY1R5cGUsZVtuKytdPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZVtuXT10LnBhY2tlZExlbmd0aCxlfTtvQj1ZLmNsb25lKFkuVU5JVF9TUEhFUkUpLHJCPXtwb2x5Z29uSGllcmFyY2h5Ont9fTtiYy51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1fZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxhKTtlPW8uc3RhcnRpbmdJbmRleCxkZWxldGUgby5zdGFydGluZ0luZGV4O2xldCByPVkudW5wYWNrKHQsZSxvQik7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IGk9dFtlKytdLHM9dFtlKytdLGY9dFtlKytdLHU9dFtlKytdPT09MSxjPXRbZSsrXT09PTEsbD10W2UrK10scD10W2UrK10sZD10W2VdO3JldHVybiBtKG4pfHwobj1uZXcgYmMockIpKSxuLl9wb2x5Z29uSGllcmFyY2h5PW8sbi5fZWxsaXBzb2lkPVkuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX2hlaWdodD1pLG4uX2V4dHJ1ZGVkSGVpZ2h0PXMsbi5fZ3JhbnVsYXJpdHk9ZixuLl9wZXJQb3NpdGlvbkhlaWdodD1jLG4uX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT11LG4uX2FyY1R5cGU9bCxuLl9vZmZzZXRBdHRyaWJ1dGU9cD09PS0xP3ZvaWQgMDpwLG4ucGFja2VkTGVuZ3RoPWQsbn07YmMuZnJvbVBvc2l0aW9ucz1mdW5jdGlvbih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx5LmRlZmluZWQoIm9wdGlvbnMucG9zaXRpb25zIix0LnBvc2l0aW9ucyk7bGV0IGU9e3BvbHlnb25IaWVyYXJjaHk6e3Bvc2l0aW9uczp0LnBvc2l0aW9uc30saGVpZ2h0OnQuaGVpZ2h0LGV4dHJ1ZGVkSGVpZ2h0OnQuZXh0cnVkZWRIZWlnaHQsZWxsaXBzb2lkOnQuZWxsaXBzb2lkLGdyYW51bGFyaXR5OnQuZ3JhbnVsYXJpdHkscGVyUG9zaXRpb25IZWlnaHQ6dC5wZXJQb3NpdGlvbkhlaWdodCxhcmNUeXBlOnQuYXJjVHlwZSxvZmZzZXRBdHRyaWJ1dGU6dC5vZmZzZXRBdHRyaWJ1dGV9O3JldHVybiBuZXcgYmMoZSl9O2JjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX2VsbGlwc29pZCxuPXQuX2dyYW51bGFyaXR5LG89dC5fcG9seWdvbkhpZXJhcmNoeSxyPXQuX3BlclBvc2l0aW9uSGVpZ2h0LGk9dC5fYXJjVHlwZSxzPV9lLnBvbHlnb25PdXRsaW5lc0Zyb21IaWVyYXJjaHkobywhcixlKTtpZihzLmxlbmd0aD09PTApcmV0dXJuO2xldCBmLHU9W10sYz1QLmNob3JkTGVuZ3RoKG4sZS5tYXhpbXVtUmFkaXVzKSxsPXQuX2hlaWdodCxwPXQuX2V4dHJ1ZGVkSGVpZ2h0LGQ9dC5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlfHwhUC5lcXVhbHNFcHNpbG9uKGwscCwwLFAuRVBTSUxPTjIpLGgsXztpZihkKWZvcihfPTA7XzxzLmxlbmd0aDtfKyspe2lmKGY9bkIoZSxzW19dLGMscixpKSxmLmdlb21ldHJ5PV9lLnNjYWxlVG9HZW9kZXRpY0hlaWdodEV4dHJ1ZGVkKGYuZ2VvbWV0cnksbCxwLGUsciksbSh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdz1mLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLE89bmV3IFVpbnQ4QXJyYXkodyk7dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QP089Ty5maWxsKDEsMCx3LzIpOihoPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLE89Ty5maWxsKGgpKSxmLmdlb21ldHJ5LmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6T30pfXUucHVzaChmKX1lbHNlIGZvcihfPTA7XzxzLmxlbmd0aDtfKyspe2lmKGY9ZUIoZSxzW19dLGMscixpKSxmLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChmLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGwsZSwhciksbSh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdz1mLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aDtoPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO2xldCBPPW5ldyBVaW50OEFycmF5KHcvMykuZmlsbChoKTtmLmdlb21ldHJ5LmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6T30pfXUucHVzaChmKX1sZXQgZz1HZS5jb21iaW5lSW5zdGFuY2VzKHUpWzBdLGI9QXQuZnJvbVZlcnRpY2VzKGcuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMpO3JldHVybiBuZXcgVXQoe2F0dHJpYnV0ZXM6Zy5hdHRyaWJ1dGVzLGluZGljZXM6Zy5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6Zy5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOmIsb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtteT1iY30pO3ZhciBoeT17fTtsZShoeSx7ZGVmYXVsdDooKT0+c0J9KTtmdW5jdGlvbiBpQih0LGUpe3JldHVybiBtKGUpJiYodD1teS51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSxteS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgc0IsX3k9JCgoKT0+e2Z0KCk7JHQoKTtCRSgpO3NCPWlCfSk7ZnVuY3Rpb24geXkodCxlLG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuKjY8MT90KyhlLXQpKjYqbjpuKjI8MT9lOm4qMzwyP3QrKGUtdCkqKDIvMy1uKSo2OnR9ZnVuY3Rpb24gSCh0LGUsbixvKXt0aGlzLnJlZD10Pz8xLHRoaXMuZ3JlZW49ZT8/MSx0aGlzLmJsdWU9bj8/MSx0aGlzLmFscGhhPW8/PzF9dmFyIGd5LEF5LEtpLGNCLGFCLGZCLHVCLG5lLE1hPSQoKCk9PntXdCgpO3llKCk7ZnQoKTt1aCgpO0t0KCk7SC5mcm9tQ2FydGVzaWFuND1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCksbShlKT8oZS5yZWQ9dC54LGUuZ3JlZW49dC55LGUuYmx1ZT10LnosZS5hbHBoYT10LncsZSk6bmV3IEgodC54LHQueSx0LnosdC53KX07SC5mcm9tQnl0ZXM9ZnVuY3Rpb24odCxlLG4sbyxyKXtyZXR1cm4gdD1ILmJ5dGVUb0Zsb2F0KHQ/PzI1NSksZT1ILmJ5dGVUb0Zsb2F0KGU/PzI1NSksbj1ILmJ5dGVUb0Zsb2F0KG4/PzI1NSksbz1ILmJ5dGVUb0Zsb2F0KG8/PzI1NSksbShyKT8oci5yZWQ9dCxyLmdyZWVuPWUsci5ibHVlPW4sci5hbHBoYT1vLHIpOm5ldyBIKHQsZSxuLG8pfTtILmZyb21BbHBoYT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY29sb3IiLHQpLHkudHlwZU9mLm51bWJlcigiYWxwaGEiLGUpLG0obik/KG4ucmVkPXQucmVkLG4uZ3JlZW49dC5ncmVlbixuLmJsdWU9dC5ibHVlLG4uYWxwaGE9ZSxuKTpuZXcgSCh0LnJlZCx0LmdyZWVuLHQuYmx1ZSxlKX07JHMuc3VwcG9ydHNUeXBlZEFycmF5cygpJiYoZ3k9bmV3IEFycmF5QnVmZmVyKDQpLEF5PW5ldyBVaW50MzJBcnJheShneSksS2k9bmV3IFVpbnQ4QXJyYXkoZ3kpKTtILmZyb21SZ2JhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEF5WzBdPXQsSC5mcm9tQnl0ZXMoS2lbMF0sS2lbMV0sS2lbMl0sS2lbM10sZSl9O0guZnJvbUhzbD1mdW5jdGlvbih0LGUsbixvLHIpe3Q9KHQ/PzApJTEsZT1lPz8wLG49bj8/MCxvPW8/PzE7bGV0IGk9bixzPW4sZj1uO2lmKGUhPT0wKXtsZXQgdTtuPC41P3U9biooMStlKTp1PW4rZS1uKmU7bGV0IGM9MipuLXU7aT15eShjLHUsdCsxLzMpLHM9eXkoYyx1LHQpLGY9eXkoYyx1LHQtMS8zKX1yZXR1cm4gbShyKT8oci5yZWQ9aSxyLmdyZWVuPXMsci5ibHVlPWYsci5hbHBoYT1vLHIpOm5ldyBIKGkscyxmLG8pfTtILmZyb21SYW5kb209ZnVuY3Rpb24odCxlKXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgbj10LnJlZDtpZighbShuKSl7bGV0IHM9dC5taW5pbXVtUmVkPz8wLGY9dC5tYXhpbXVtUmVkPz8xO3kudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJtaW5pbXVtUmVkIixzLGYpLG49cytQLm5leHRSYW5kb21OdW1iZXIoKSooZi1zKX1sZXQgbz10LmdyZWVuO2lmKCFtKG8pKXtsZXQgcz10Lm1pbmltdW1HcmVlbj8/MCxmPXQubWF4aW11bUdyZWVuPz8xO3kudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJtaW5pbXVtR3JlZW4iLHMsZiksbz1zK1AubmV4dFJhbmRvbU51bWJlcigpKihmLXMpfWxldCByPXQuYmx1ZTtpZighbShyKSl7bGV0IHM9dC5taW5pbXVtQmx1ZT8/MCxmPXQubWF4aW11bUJsdWU/PzE7eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm1pbmltdW1CbHVlIixzLGYpLHI9cytQLm5leHRSYW5kb21OdW1iZXIoKSooZi1zKX1sZXQgaT10LmFscGhhO2lmKCFtKGkpKXtsZXQgcz10Lm1pbmltdW1BbHBoYT8/MCxmPXQubWF4aW11bUFscGhhPz8xO3kudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJtaW5pbXVtQWxwaGEiLHMsZiksaT1zK1AubmV4dFJhbmRvbU51bWJlcigpKihmLXMpfXJldHVybiBtKGUpPyhlLnJlZD1uLGUuZ3JlZW49byxlLmJsdWU9cixlLmFscGhhPWksZSk6bmV3IEgobixvLHIsaSl9O2NCPS9eIyhbMC05YS1mXSkoWzAtOWEtZl0pKFswLTlhLWZdKShbMC05YS1mXSk/JC9pLGFCPS9eIyhbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSk/JC9pLGZCPS9ecmdiYT9ccypcKFxzKihbMC05Ll0rJT8pXHMqWyxcc10rXHMqKFswLTkuXSslPylccypbLFxzXStccyooWzAtOS5dKyU/KSg/OlxzKlssXHMvXStccyooWzAtOS5dKykpP1xzKlwpJC9pLHVCPS9eaHNsYT9ccypcKFxzKihbMC05Ll0rKVxzKlssXHNdK1xzKihbMC05Ll0rJSlccypbLFxzXStccyooWzAtOS5dKyUpKD86XHMqWyxccy9dK1xzKihbMC05Ll0rKSk/XHMqXCkkL2k7SC5mcm9tQ3NzQ29sb3JTdHJpbmc9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5zdHJpbmcoImNvbG9yIix0KSxtKGUpfHwoZT1uZXcgSCksdD10LnRyaW0oKTtsZXQgbj1IW3QudG9VcHBlckNhc2UoKV07aWYobShuKSlyZXR1cm4gSC5jbG9uZShuLGUpLGU7bGV0IG89Y0IuZXhlYyh0KTtyZXR1cm4gbyE9PW51bGw/KGUucmVkPXBhcnNlSW50KG9bMV0sMTYpLzE1LGUuZ3JlZW49cGFyc2VJbnQob1syXSwxNikvMTUsZS5ibHVlPXBhcnNlSW50KG9bM10sMTYpLzE1LGUuYWxwaGE9cGFyc2VJbnQob1s0XT8/ImYiLDE2KS8xNSxlKToobz1hQi5leGVjKHQpLG8hPT1udWxsPyhlLnJlZD1wYXJzZUludChvWzFdLDE2KS8yNTUsZS5ncmVlbj1wYXJzZUludChvWzJdLDE2KS8yNTUsZS5ibHVlPXBhcnNlSW50KG9bM10sMTYpLzI1NSxlLmFscGhhPXBhcnNlSW50KG9bNF0/PyJmZiIsMTYpLzI1NSxlKToobz1mQi5leGVjKHQpLG8hPT1udWxsPyhlLnJlZD1wYXJzZUZsb2F0KG9bMV0pLyhvWzFdLnN1YnN0cigtMSk9PT0iJSI/MTAwOjI1NSksZS5ncmVlbj1wYXJzZUZsb2F0KG9bMl0pLyhvWzJdLnN1YnN0cigtMSk9PT0iJSI/MTAwOjI1NSksZS5ibHVlPXBhcnNlRmxvYXQob1szXSkvKG9bM10uc3Vic3RyKC0xKT09PSIlIj8xMDA6MjU1KSxlLmFscGhhPXBhcnNlRmxvYXQob1s0XT8/IjEuMCIpLGUpOihvPXVCLmV4ZWModCksbyE9PW51bGw/SC5mcm9tSHNsKHBhcnNlRmxvYXQob1sxXSkvMzYwLHBhcnNlRmxvYXQob1syXSkvMTAwLHBhcnNlRmxvYXQob1szXSkvMTAwLHBhcnNlRmxvYXQob1s0XT8/IjEuMCIpLGUpOihlPXZvaWQgMCxlKSkpKX07SC5wYWNrZWRMZW5ndGg9NDtILnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXQucmVkLGVbbisrXT10LmdyZWVuLGVbbisrXT10LmJsdWUsZVtuXT10LmFscGhhLGV9O0gudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLG0obil8fChuPW5ldyBIKSxuLnJlZD10W2UrK10sbi5ncmVlbj10W2UrK10sbi5ibHVlPXRbZSsrXSxuLmFscGhhPXRbZV0sbn07SC5ieXRlVG9GbG9hdD1mdW5jdGlvbih0KXtyZXR1cm4gdC8yNTV9O0guZmxvYXRUb0J5dGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0xPzI1NTp0KjI1NnwwfTtILmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYobSh0KSlyZXR1cm4gbShlKT8oZS5yZWQ9dC5yZWQsZS5ncmVlbj10LmdyZWVuLGUuYmx1ZT10LmJsdWUsZS5hbHBoYT10LmFscGhhLGUpOm5ldyBIKHQucmVkLHQuZ3JlZW4sdC5ibHVlLHQuYWxwaGEpfTtILmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8bSh0KSYmbShlKSYmdC5yZWQ9PT1lLnJlZCYmdC5ncmVlbj09PWUuZ3JlZW4mJnQuYmx1ZT09PWUuYmx1ZSYmdC5hbHBoYT09PWUuYWxwaGF9O0guZXF1YWxzQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LnJlZD09PWVbbl0mJnQuZ3JlZW49PT1lW24rMV0mJnQuYmx1ZT09PWVbbisyXSYmdC5hbHBoYT09PWVbbiszXX07SC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIEguY2xvbmUodGhpcyx0KX07SC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBILmVxdWFscyh0aGlzLHQpfTtILnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXM9PT10fHxtKHQpJiZNYXRoLmFicyh0aGlzLnJlZC10LnJlZCk8PWUmJk1hdGguYWJzKHRoaXMuZ3JlZW4tdC5ncmVlbik8PWUmJk1hdGguYWJzKHRoaXMuYmx1ZS10LmJsdWUpPD1lJiZNYXRoLmFicyh0aGlzLmFscGhhLXQuYWxwaGEpPD1lfTtILnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzLnJlZH0sICR7dGhpcy5ncmVlbn0sICR7dGhpcy5ibHVlfSwgJHt0aGlzLmFscGhhfSlgfTtILnByb3RvdHlwZS50b0Nzc0NvbG9yU3RyaW5nPWZ1bmN0aW9uKCl7bGV0IHQ9SC5mbG9hdFRvQnl0ZSh0aGlzLnJlZCksZT1ILmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pLG49SC5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpO3JldHVybiB0aGlzLmFscGhhPT09MT9gcmdiKCR7dH0sJHtlfSwke259KWA6YHJnYmEoJHt0fSwke2V9LCR7bn0sJHt0aGlzLmFscGhhfSlgfTtILnByb3RvdHlwZS50b0Nzc0hleFN0cmluZz1mdW5jdGlvbigpe2xldCB0PUguZmxvYXRUb0J5dGUodGhpcy5yZWQpLnRvU3RyaW5nKDE2KTt0Lmxlbmd0aDwyJiYodD1gMCR7dH1gKTtsZXQgZT1ILmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pLnRvU3RyaW5nKDE2KTtlLmxlbmd0aDwyJiYoZT1gMCR7ZX1gKTtsZXQgbj1ILmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSkudG9TdHJpbmcoMTYpO2lmKG4ubGVuZ3RoPDImJihuPWAwJHtufWApLHRoaXMuYWxwaGE8MSl7bGV0IG89SC5mbG9hdFRvQnl0ZSh0aGlzLmFscGhhKS50b1N0cmluZygxNik7cmV0dXJuIG8ubGVuZ3RoPDImJihvPWAwJHtvfWApLGAjJHt0fSR7ZX0ke259JHtvfWB9cmV0dXJuYCMke3R9JHtlfSR7bn1gfTtILnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKHQpe2xldCBlPUguZmxvYXRUb0J5dGUodGhpcy5yZWQpLG49SC5mbG9hdFRvQnl0ZSh0aGlzLmdyZWVuKSxvPUguZmxvYXRUb0J5dGUodGhpcy5ibHVlKSxyPUguZmxvYXRUb0J5dGUodGhpcy5hbHBoYSk7cmV0dXJuIG0odCk/KHRbMF09ZSx0WzFdPW4sdFsyXT1vLHRbM109cix0KTpbZSxuLG8scl19O0gucHJvdG90eXBlLnRvUmdiYT1mdW5jdGlvbigpe3JldHVybiBLaVswXT1ILmZsb2F0VG9CeXRlKHRoaXMucmVkKSxLaVsxXT1ILmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pLEtpWzJdPUguZmxvYXRUb0J5dGUodGhpcy5ibHVlKSxLaVszXT1ILmZsb2F0VG9CeXRlKHRoaXMuYWxwaGEpLEF5WzBdfTtILnByb3RvdHlwZS5icmlnaHRlbj1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoIm1hZ25pdHVkZSIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm1hZ25pdHVkZSIsdCwwKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksdD0xLXQsZS5yZWQ9MS0oMS10aGlzLnJlZCkqdCxlLmdyZWVuPTEtKDEtdGhpcy5ncmVlbikqdCxlLmJsdWU9MS0oMS10aGlzLmJsdWUpKnQsZS5hbHBoYT10aGlzLmFscGhhLGV9O0gucHJvdG90eXBlLmRhcmtlbj1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoIm1hZ25pdHVkZSIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm1hZ25pdHVkZSIsdCwwKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksdD0xLXQsZS5yZWQ9dGhpcy5yZWQqdCxlLmdyZWVuPXRoaXMuZ3JlZW4qdCxlLmJsdWU9dGhpcy5ibHVlKnQsZS5hbHBoYT10aGlzLmFscGhhLGV9O0gucHJvdG90eXBlLndpdGhBbHBoYT1mdW5jdGlvbih0LGUpe3JldHVybiBILmZyb21BbHBoYSh0aGlzLHQsZSl9O0guYWRkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi5yZWQ9dC5yZWQrZS5yZWQsbi5ncmVlbj10LmdyZWVuK2UuZ3JlZW4sbi5ibHVlPXQuYmx1ZStlLmJsdWUsbi5hbHBoYT10LmFscGhhK2UuYWxwaGEsbn07SC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ucmVkPXQucmVkLWUucmVkLG4uZ3JlZW49dC5ncmVlbi1lLmdyZWVuLG4uYmx1ZT10LmJsdWUtZS5ibHVlLG4uYWxwaGE9dC5hbHBoYS1lLmFscGhhLG59O0gubXVsdGlwbHk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZCplLnJlZCxuLmdyZWVuPXQuZ3JlZW4qZS5ncmVlbixuLmJsdWU9dC5ibHVlKmUuYmx1ZSxuLmFscGhhPXQuYWxwaGEqZS5hbHBoYSxufTtILmRpdmlkZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ucmVkPXQucmVkL2UucmVkLG4uZ3JlZW49dC5ncmVlbi9lLmdyZWVuLG4uYmx1ZT10LmJsdWUvZS5ibHVlLG4uYWxwaGE9dC5hbHBoYS9lLmFscGhhLG59O0gubW9kPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi5yZWQ9dC5yZWQlZS5yZWQsbi5ncmVlbj10LmdyZWVuJWUuZ3JlZW4sbi5ibHVlPXQuYmx1ZSVlLmJsdWUsbi5hbHBoYT10LmFscGhhJWUuYWxwaGEsbn07SC5sZXJwPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksby5yZWQ9UC5sZXJwKHQucmVkLGUucmVkLG4pLG8uZ3JlZW49UC5sZXJwKHQuZ3JlZW4sZS5ncmVlbixuKSxvLmJsdWU9UC5sZXJwKHQuYmx1ZSxlLmJsdWUsbiksby5hbHBoYT1QLmxlcnAodC5hbHBoYSxlLmFscGhhLG4pLG99O0gubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY29sb3IiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi5yZWQ9dC5yZWQqZSxuLmdyZWVuPXQuZ3JlZW4qZSxuLmJsdWU9dC5ibHVlKmUsbi5hbHBoYT10LmFscGhhKmUsbn07SC5kaXZpZGVCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY29sb3IiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi5yZWQ9dC5yZWQvZSxuLmdyZWVuPXQuZ3JlZW4vZSxuLmJsdWU9dC5ibHVlL2Usbi5hbHBoYT10LmFscGhhL2Usbn07SC5BTElDRUJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0YwRjhGRiIpKTtILkFOVElRVUVXSElURT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkFFQkQ3IikpO0guQVFVQT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBGRkZGIikpO0guQVFVQU1BUklORT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjN0ZGRkQ0IikpO0guQVpVUkU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0YwRkZGRiIpKTtILkJFSUdFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGNUY1REMiKSk7SC5CSVNRVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRTRDNCIpKTtILkJMQUNLPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwMDAiKSk7SC5CTEFOQ0hFREFMTU9ORD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFQkNEIikpO0guQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDAwMEZGIikpO0guQkxVRVZJT0xFVD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEEyQkUyIikpO0guQlJPV049T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0E1MkEyQSIpKTtILkJVUkxZV09PRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjREVCODg3IikpO0guQ0FERVRCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM1RjlFQTAiKSk7SC5DSEFSVFJFVVNFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3RkZGMDAiKSk7SC5DSE9DT0xBVEU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0QyNjkxRSIpKTtILkNPUkFMPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjdGNTAiKSk7SC5DT1JORkxPV0VSQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNjQ5NUVEIikpO0guQ09STlNJTEs9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRjhEQyIpKTtILkNSSU1TT049T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0RDMTQzQyIpKTtILkNZQU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkZGRiIpKTtILkRBUktCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwOEIiKSk7SC5EQVJLQ1lBTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDA4QjhCIikpO0guREFSS0dPTERFTlJPRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjg4NjBCIikpO0guREFSS0dSQVk9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0E5QTlBOSIpKTtILkRBUktHUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDA2NDAwIikpO0guREFSS0dSRVk9SC5EQVJLR1JBWTtILkRBUktLSEFLST1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQkRCNzZCIikpO0guREFSS01BR0VOVEE9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzhCMDA4QiIpKTtILkRBUktPTElWRUdSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM1NTZCMkYiKSk7SC5EQVJLT1JBTkdFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjhDMDAiKSk7SC5EQVJLT1JDSElEPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5OTMyQ0MiKSk7SC5EQVJLUkVEPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4QjAwMDAiKSk7SC5EQVJLU0FMTU9OPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFOTk2N0EiKSk7SC5EQVJLU0VBR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzhGQkM4RiIpKTtILkRBUktTTEFURUJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzQ4M0Q4QiIpKTtILkRBUktTTEFURUdSQVk9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzJGNEY0RiIpKTtILkRBUktTTEFURUdSRVk9SC5EQVJLU0xBVEVHUkFZO0guREFSS1RVUlFVT0lTRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBDRUQxIikpO0guREFSS1ZJT0xFVD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjOTQwMEQzIikpO0guREVFUFBJTks9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMTQ5MyIpKTtILkRFRVBTS1lCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEJGRkYiKSk7SC5ESU1HUkFZPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2OTY5NjkiKSk7SC5ESU1HUkVZPUguRElNR1JBWTtILkRPREdFUkJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzFFOTBGRiIpKTtILkZJUkVCUklDSz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjIyMjIyIikpO0guRkxPUkFMV0hJVEU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkFGMCIpKTtILkZPUkVTVEdSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMyMjhCMjIiKSk7SC5GVUNIU0lBPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjAwRkYiKSk7SC5HQUlOU0JPUk89T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0RDRENEQyIpKTtILkdIT1NUV0hJVEU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0Y4RjhGRiIpKTtILkdPTEQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRDcwMCIpKTtILkdPTERFTlJPRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjREFBNTIwIikpO0guR1JBWT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjODA4MDgwIikpO0guR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwODAwMCIpKTtILkdSRUVOWUVMTE9XPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNBREZGMkYiKSk7SC5HUkVZPUguR1JBWTtILkhPTkVZREVXPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGMEZGRjAiKSk7SC5IT1RQSU5LPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjY5QjQiKSk7SC5JTkRJQU5SRUQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0NENUM1QyIpKTtILklORElHTz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNEIwMDgyIikpO0guSVZPUlk9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkZGMCIpKTtILktIQUtJPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGMEU2OEMiKSk7SC5MQVZFTkRFUj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRTZFNkZBIikpO0guTEFWRU5EQVJfQkxVU0g9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRjBGNSIpKTtILkxBV05HUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjN0NGQzAwIikpO0guTEVNT05DSElGRk9OPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkZBQ0QiKSk7SC5MSUdIVEJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0FERDhFNiIpKTtILkxJR0hUQ09SQUw9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0YwODA4MCIpKTtILkxJR0hUQ1lBTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRTBGRkZGIikpO0guTElHSFRHT0xERU5ST0RZRUxMT1c9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZBRkFEMiIpKTtILkxJR0hUR1JBWT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRDNEM0QzIikpO0guTElHSFRHUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjOTBFRTkwIikpO0guTElHSFRHUkVZPUguTElHSFRHUkFZO0guTElHSFRQSU5LPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkI2QzEiKSk7SC5MSUdIVFNFQUdSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMyMEIyQUEiKSk7SC5MSUdIVFNLWUJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzg3Q0VGQSIpKTtILkxJR0hUU0xBVEVHUkFZPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3Nzg4OTkiKSk7SC5MSUdIVFNMQVRFR1JFWT1ILkxJR0hUU0xBVEVHUkFZO0guTElHSFRTVEVFTEJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0IwQzRERSIpKTtILkxJR0hUWUVMTE9XPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkZGRTAiKSk7SC5MSU1FPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZGMDAiKSk7SC5MSU1FR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzMyQ0QzMiIpKTtILkxJTkVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGQUYwRTYiKSk7SC5NQUdFTlRBPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjAwRkYiKSk7SC5NQVJPT049T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzgwMDAwMCIpKTtILk1FRElVTUFRVUFNQVJJTkU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzY2Q0RBQSIpKTtILk1FRElVTUJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDBDRCIpKTtILk1FRElVTU9SQ0hJRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQkE1NUQzIikpO0guTUVESVVNUFVSUExFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5MzcwREIiKSk7SC5NRURJVU1TRUFHUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjM0NCMzcxIikpO0guTUVESVVNU0xBVEVCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3QjY4RUUiKSk7SC5NRURJVU1TUFJJTkdHUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBGQTlBIikpO0guTUVESVVNVFVSUVVPSVNFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0OEQxQ0MiKSk7SC5NRURJVU1WSU9MRVRSRUQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0M3MTU4NSIpKTtILk1JRE5JR0hUQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMTkxOTcwIikpO0guTUlOVENSRUFNPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGNUZGRkEiKSk7SC5NSVNUWVJPU0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRTRFMSIpKTtILk1PQ0NBU0lOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkU0QjUiKSk7SC5OQVZBSk9XSElURT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZERUFEIikpO0guTkFWWT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDAwMDgwIikpO0guT0xETEFDRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkRGNUU2IikpO0guT0xJVkU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzgwODAwMCIpKTtILk9MSVZFRFJBQj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNkI4RTIzIikpO0guT1JBTkdFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkE1MDAiKSk7SC5PUkFOR0VSRUQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGNDUwMCIpKTtILk9SQ0hJRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjREE3MEQ2IikpO0guUEFMRUdPTERFTlJPRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRUVFOEFBIikpO0guUEFMRUdSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5OEZCOTgiKSk7SC5QQUxFVFVSUVVPSVNFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNBRkVFRUUiKSk7SC5QQUxFVklPTEVUUkVEPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQjcwOTMiKSk7SC5QQVBBWUFXSElQPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkVGRDUiKSk7SC5QRUFDSFBVRkY9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGREFCOSIpKTtILlBFUlU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0NEODUzRiIpKTtILlBJTks9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGQzBDQiIpKTtILlBMVU09T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0REQTBERCIpKTtILlBPV0RFUkJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0IwRTBFNiIpKTtILlBVUlBMRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjODAwMDgwIikpO0guUkVEPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjAwMDAiKSk7SC5ST1NZQlJPV049T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0JDOEY4RiIpKTtILlJPWUFMQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDE2OUUxIikpO0guU0FERExFQlJPV049T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzhCNDUxMyIpKTtILlNBTE1PTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkE4MDcyIikpO0guU0FORFlCUk9XTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjRBNDYwIikpO0guU0VBR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzJFOEI1NyIpKTtILlNFQVNIRUxMPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkY1RUUiKSk7SC5TSUVOTkE9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0EwNTIyRCIpKTtILlNJTFZFUj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQzBDMEMwIikpO0guU0tZQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjODdDRUVCIikpO0guU0xBVEVCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2QTVBQ0QiKSk7SC5TTEFURUdSQVk9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzcwODA5MCIpKTtILlNMQVRFR1JFWT1ILlNMQVRFR1JBWTtILlNOT1c9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkFGQSIpKTtILlNQUklOR0dSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZGN0YiKSk7SC5TVEVFTEJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzQ2ODJCNCIpKTtILlRBTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRDJCNDhDIikpO0guVEVBTD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDA4MDgwIikpO0guVEhJU1RMRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRDhCRkQ4IikpO0guVE9NQVRPPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRjYzNDciKSk7SC5UVVJRVU9JU0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzQwRTBEMCIpKTtILlZJT0xFVD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRUU4MkVFIikpO0guV0hFQVQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0Y1REVCMyIpKTtILldISVRFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkZGRkYiKSk7SC5XSElURVNNT0tFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGNUY1RjUiKSk7SC5ZRUxMT1c9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkYwMCIpKTtILllFTExPV0dSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5QUNEMzIiKSk7SC5UUkFOU1BBUkVOVD1PYmplY3QuZnJlZXplKG5ldyBIKDAsMCwwLDApKTtuZT1IfSk7ZnVuY3Rpb24gbEIodCxlLG4sbyxyKXtsZXQgaT16RTtpLmxlbmd0aD1yO2xldCBzLGY9bi5yZWQsdT1uLmdyZWVuLGM9bi5ibHVlLGw9bi5hbHBoYSxwPW8ucmVkLGQ9by5ncmVlbixoPW8uYmx1ZSxfPW8uYWxwaGE7aWYobmUuZXF1YWxzKG4sbykpe2ZvcihzPTA7czxyO3MrKylpW3NdPW5lLmNsb25lKG4pO3JldHVybiBpfWxldCBnPShwLWYpL3IsYj0oZC11KS9yLHc9KGgtYykvcixPPShfLWwpL3I7Zm9yKHM9MDtzPHI7cysrKWlbc109bmV3IG5lKGYrcypnLHUrcypiLGMrcyp3LGwrcypPKTtyZXR1cm4gaX1mdW5jdGlvbiBKZih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvc2l0aW9ucyxuPXQuY29sb3JzLG89dC53aWR0aD8/MSxyPXQuY29sb3JzUGVyVmVydGV4Pz8hMTtpZighbShlKXx8ZS5sZW5ndGg8Mil0aHJvdyBuZXcgRCgiQXQgbGVhc3QgdHdvIHBvc2l0aW9ucyBhcmUgcmVxdWlyZWQuIik7aWYodHlwZW9mIG8hPSJudW1iZXIiKXRocm93IG5ldyBEKCJ3aWR0aCBtdXN0IGJlIGEgbnVtYmVyIik7aWYobShuKSYmKHImJm4ubGVuZ3RoPGUubGVuZ3RofHwhciYmbi5sZW5ndGg8ZS5sZW5ndGgtMSkpdGhyb3cgbmV3IEQoImNvbG9ycyBoYXMgYW4gaW52YWxpZCBsZW5ndGguIik7dGhpcy5fcG9zaXRpb25zPWUsdGhpcy5fY29sb3JzPW4sdGhpcy5fd2lkdGg9byx0aGlzLl9jb2xvcnNQZXJWZXJ0ZXg9cix0aGlzLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUodC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQpLHRoaXMuX2FyY1R5cGU9dC5hcmNUeXBlPz9oZS5HRU9ERVNJQyx0aGlzLl9ncmFudWxhcml0eT10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZSh0LmVsbGlwc29pZD8/WS5kZWZhdWx0KSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5bGluZUdlb21ldHJ5IjtsZXQgaT0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoO2krPW0obik/MStuLmxlbmd0aCpuZS5wYWNrZWRMZW5ndGg6MSx0aGlzLnBhY2tlZExlbmd0aD1pK1kucGFja2VkTGVuZ3RoK3B0LnBhY2tlZExlbmd0aCs0fXZhciB6RSxqRSxIRSx3YyxVRSxrRSxHRSxWRSxieSxxRT0kKCgpPT57dWMoKTtIcigpO3ZlKCk7RHQoKTtNYSgpO0RlKCk7eWUoKTtmdCgpO0h0KCk7JHQoKTtZZSgpOyRlKCk7YW4oKTtEcCgpO1plKCk7S3QoKTtnYSgpO3RuKCk7eG8oKTt6RT1bXTtKZi5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighbShlKSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPW4/PzA7bGV0IG8scj10Ll9wb3NpdGlvbnMsaT1yLmxlbmd0aDtmb3IoZVtuKytdPWksbz0wO288aTsrK28sbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKHJbb10sZSxuKTtsZXQgcz10Ll9jb2xvcnM7Zm9yKGk9bShzKT9zLmxlbmd0aDowLGVbbisrXT1pLG89MDtvPGk7KytvLG4rPW5lLnBhY2tlZExlbmd0aCluZS5wYWNrKHNbb10sZSxuKTtyZXR1cm4gWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLHB0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksbis9cHQucGFja2VkTGVuZ3RoLGVbbisrXT10Ll93aWR0aCxlW24rK109dC5fY29sb3JzUGVyVmVydGV4PzE6MCxlW24rK109dC5fYXJjVHlwZSxlW25dPXQuX2dyYW51bGFyaXR5LGV9O2pFPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksSEU9bmV3IHB0LHdjPXtwb3NpdGlvbnM6dm9pZCAwLGNvbG9yczp2b2lkIDAsZWxsaXBzb2lkOmpFLHZlcnRleEZvcm1hdDpIRSx3aWR0aDp2b2lkIDAsY29sb3JzUGVyVmVydGV4OnZvaWQgMCxhcmNUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDB9O0pmLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7ZT1lPz8wO2xldCBvLHI9dFtlKytdLGk9bmV3IEFycmF5KHIpO2ZvcihvPTA7bzxyOysrbyxlKz1hLnBhY2tlZExlbmd0aClpW29dPWEudW5wYWNrKHQsZSk7cj10W2UrK107bGV0IHM9cj4wP25ldyBBcnJheShyKTp2b2lkIDA7Zm9yKG89MDtvPHI7KytvLGUrPW5lLnBhY2tlZExlbmd0aClzW29dPW5lLnVucGFjayh0LGUpO2xldCBmPVkudW5wYWNrKHQsZSxqRSk7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IHU9cHQudW5wYWNrKHQsZSxIRSk7ZSs9cHQucGFja2VkTGVuZ3RoO2xldCBjPXRbZSsrXSxsPXRbZSsrXT09PTEscD10W2UrK10sZD10W2VdO3JldHVybiBtKG4pPyhuLl9wb3NpdGlvbnM9aSxuLl9jb2xvcnM9cyxuLl9lbGxpcHNvaWQ9WS5jbG9uZShmLG4uX2VsbGlwc29pZCksbi5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHUsbi5fdmVydGV4Rm9ybWF0KSxuLl93aWR0aD1jLG4uX2NvbG9yc1BlclZlcnRleD1sLG4uX2FyY1R5cGU9cCxuLl9ncmFudWxhcml0eT1kLG4pOih3Yy5wb3NpdGlvbnM9aSx3Yy5jb2xvcnM9cyx3Yy53aWR0aD1jLHdjLmNvbG9yc1BlclZlcnRleD1sLHdjLmFyY1R5cGU9cCx3Yy5ncmFudWxhcml0eT1kLG5ldyBKZih3YykpfTtVRT1uZXcgYSxrRT1uZXcgYSxHRT1uZXcgYSxWRT1uZXcgYTtKZi5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll93aWR0aCxuPXQuX3ZlcnRleEZvcm1hdCxvPXQuX2NvbG9ycyxyPXQuX2NvbG9yc1BlclZlcnRleCxpPXQuX2FyY1R5cGUscz10Ll9ncmFudWxhcml0eSxmPXQuX2VsbGlwc29pZCx1LGMsbCxwPVtdLGQ9Q24odC5fcG9zaXRpb25zLGEuZXF1YWxzRXBzaWxvbiwhMSxwKTtpZihtKG8pJiZwLmxlbmd0aD4wKXtsZXQgTD0wLHo9cFswXTtvPW8uZmlsdGVyKGZ1bmN0aW9uKGosayl7bGV0IHE9ITE7cmV0dXJuIHI/cT1rPT09enx8az09PTAmJno9PT0xOnE9aysxPT09eixxPyhMKyssej1wW0xdLCExKTohMH0pfWxldCBoPWQubGVuZ3RoO2lmKGg8Mnx8ZTw9MClyZXR1cm47aWYoaT09PWhlLkdFT0RFU0lDfHxpPT09aGUuUkhVTUIpe2xldCBMLHo7aT09PWhlLkdFT0RFU0lDPyhMPVAuY2hvcmRMZW5ndGgocyxmLm1heGltdW1SYWRpdXMpLHo9QW4ubnVtYmVyT2ZQb2ludHMpOihMPXMsej1Bbi5udW1iZXJPZlBvaW50c1JodW1iTGluZSk7bGV0IGo9QW4uZXh0cmFjdEhlaWdodHMoZCxmKTtpZihtKG8pKXtsZXQgaz0xO2Zvcih1PTA7dTxoLTE7Kyt1KWsrPXooZFt1XSxkW3UrMV0sTCk7bGV0IHE9bmV3IEFycmF5KGspLFc9MDtmb3IodT0wO3U8aC0xOysrdSl7bGV0IFI9ZFt1XSxudD1kW3UrMV0sYXQ9b1t1XSxsdD16KFIsbnQsTCk7aWYociYmdTxrKXtsZXQgX3Q9b1t1KzFdLG90PWxCKFIsbnQsYXQsX3QsbHQpLFB0PW90Lmxlbmd0aDtmb3IoYz0wO2M8UHQ7KytjKXFbVysrXT1vdFtjXX1lbHNlIGZvcihjPTA7YzxsdDsrK2MpcVtXKytdPW5lLmNsb25lKGF0KX1xW1ddPW5lLmNsb25lKG9bby5sZW5ndGgtMV0pLG89cSx6RS5sZW5ndGg9MH1pPT09aGUuR0VPREVTSUM/ZD1Bbi5nZW5lcmF0ZUNhcnRlc2lhbkFyYyh7cG9zaXRpb25zOmQsbWluRGlzdGFuY2U6TCxlbGxpcHNvaWQ6ZixoZWlnaHQ6an0pOmQ9QW4uZ2VuZXJhdGVDYXJ0ZXNpYW5SaHVtYkFyYyh7cG9zaXRpb25zOmQsZ3JhbnVsYXJpdHk6TCxlbGxpcHNvaWQ6ZixoZWlnaHQ6an0pfWg9ZC5sZW5ndGg7bGV0IF89aCo0LTQsZz1uZXcgRmxvYXQ2NEFycmF5KF8qMyksYj1uZXcgRmxvYXQ2NEFycmF5KF8qMyksdz1uZXcgRmxvYXQ2NEFycmF5KF8qMyksTz1uZXcgRmxvYXQzMkFycmF5KF8qMiksRT1uLnN0P25ldyBGbG9hdDMyQXJyYXkoXyoyKTp2b2lkIDAsVD1tKG8pP25ldyBVaW50OEFycmF5KF8qNCk6dm9pZCAwLHg9MCxNPTAsTj0wLEY9MCxJO2ZvcihjPTA7YzxoOysrYyl7Yz09PTA/KEk9VUUsYS5zdWJ0cmFjdChkWzBdLGRbMV0sSSksYS5hZGQoZFswXSxJLEkpKTpJPWRbYy0xXSxhLmNsb25lKEksR0UpLGEuY2xvbmUoZFtjXSxrRSksYz09PWgtMT8oST1VRSxhLnN1YnRyYWN0KGRbaC0xXSxkW2gtMl0sSSksYS5hZGQoZFtoLTFdLEksSSkpOkk9ZFtjKzFdLGEuY2xvbmUoSSxWRSk7bGV0IEwsejttKFQpJiYoYyE9PTAmJiFyP0w9b1tjLTFdOkw9b1tjXSxjIT09aC0xJiYoej1vW2NdKSk7bGV0IGo9Yz09PTA/MjowLGs9Yz09PWgtMT8yOjQ7Zm9yKGw9ajtsPGs7KytsKXthLnBhY2soa0UsZyx4KSxhLnBhY2soR0UsYix4KSxhLnBhY2soVkUsdyx4KSx4Kz0zO2xldCBxPWwtMjwwPy0xOjE7aWYoT1tNKytdPTIqKGwlMiktMSxPW00rK109cSplLG4uc3QmJihFW04rK109Yy8oaC0xKSxFW04rK109TWF0aC5tYXgoT1tNLTJdLDApKSxtKFQpKXtsZXQgVz1sPDI/TDp6O1RbRisrXT1uZS5mbG9hdFRvQnl0ZShXLnJlZCksVFtGKytdPW5lLmZsb2F0VG9CeXRlKFcuZ3JlZW4pLFRbRisrXT1uZS5mbG9hdFRvQnl0ZShXLmJsdWUpLFRbRisrXT1uZS5mbG9hdFRvQnl0ZShXLmFscGhhKX19fWxldCB2PW5ldyBpZTt2LnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Z30pLHYucHJldlBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Yn0pLHYubmV4dFBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6d30pLHYuZXhwYW5kQW5kV2lkdGg9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOk99KSxuLnN0JiYodi5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6RX0pKSxtKFQpJiYodi5jb2xvcj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTo0LHZhbHVlczpULG5vcm1hbGl6ZTohMH0pKTtsZXQgQj1MdC5jcmVhdGVUeXBlZEFycmF5KF8saCo2LTYpLEE9MCxTPTAsQz1oLTE7Zm9yKGM9MDtjPEM7KytjKUJbUysrXT1BLEJbUysrXT1BKzIsQltTKytdPUErMSxCW1MrK109QSsxLEJbUysrXT1BKzIsQltTKytdPUErMyxBKz00O3JldHVybiBuZXcgVXQoe2F0dHJpYnV0ZXM6dixpbmRpY2VzOkIscHJpbWl0aXZlVHlwZTpCdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6QXQuZnJvbVBvaW50cyhkKSxnZW9tZXRyeVR5cGU6TmkuUE9MWUxJTkVTfSl9O2J5PUpmfSk7dmFyIHd5PXt9O2xlKHd5LHtkZWZhdWx0OigpPT5kQn0pO2Z1bmN0aW9uIHBCKHQsZSl7cmV0dXJuIG0oZSkmJih0PWJ5LnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLGJ5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBkQixUeT0kKCgpPT57ZnQoKTskdCgpO3FFKCk7ZEI9cEJ9KTtmdW5jdGlvbiBtQih0LGUsbixvKXtsZXQgcj1uZXcgaWU7by5wb3NpdGlvbiYmKHIucG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp0fSkpO2xldCBpPWUubGVuZ3RoLHM9dC5sZW5ndGgvMyxmPShzLWkqMikvKGkqMiksdT1QZS50cmlhbmd1bGF0ZShlKSxjPShmLTEpKmkqNit1Lmxlbmd0aCoyLGw9THQuY3JlYXRlVHlwZWRBcnJheShzLGMpLHAsZCxoLF8sZyxiLHc9aSoyLE89MDtmb3IocD0wO3A8Zi0xO3ArKyl7Zm9yKGQ9MDtkPGktMTtkKyspaD1kKjIrcCppKjIsYj1oK3csXz1oKzEsZz1fK3csbFtPKytdPV8sbFtPKytdPWgsbFtPKytdPWcsbFtPKytdPWcsbFtPKytdPWgsbFtPKytdPWI7aD1pKjItMitwKmkqMixfPWgrMSxnPV8rdyxiPWgrdyxsW08rK109XyxsW08rK109aCxsW08rK109ZyxsW08rK109ZyxsW08rK109aCxsW08rK109Yn1pZihvLnN0fHxvLnRhbmdlbnR8fG8uYml0YW5nZW50KXtsZXQgeD1uZXcgRmxvYXQzMkFycmF5KHMqMiksTT0xLyhmLTEpLE49MS9uLmhlaWdodCxGPW4uaGVpZ2h0LzIsSSx2LEI9MDtmb3IocD0wO3A8ZjtwKyspe2ZvcihJPXAqTSx2PU4qKGVbMF0ueStGKSx4W0IrK109SSx4W0IrK109dixkPTE7ZDxpO2QrKyl2PU4qKGVbZF0ueStGKSx4W0IrK109SSx4W0IrK109dix4W0IrK109SSx4W0IrK109djt2PU4qKGVbMF0ueStGKSx4W0IrK109SSx4W0IrK109dn1mb3IoZD0wO2Q8aTtkKyspST0wLHY9TiooZVtkXS55K0YpLHhbQisrXT1JLHhbQisrXT12O2ZvcihkPTA7ZDxpO2QrKylJPShmLTEpKk0sdj1OKihlW2RdLnkrRikseFtCKytdPUkseFtCKytdPXY7ci5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6bmV3IEZsb2F0MzJBcnJheSh4KX0pfWxldCBFPXMtaSoyO2ZvcihwPTA7cDx1Lmxlbmd0aDtwKz0zKXtsZXQgeD11W3BdK0UsTT11W3ArMV0rRSxOPXVbcCsyXStFO2xbTysrXT14LGxbTysrXT1NLGxbTysrXT1OLGxbTysrXT1OK2ksbFtPKytdPU0raSxsW08rK109eCtpfWxldCBUPW5ldyBVdCh7YXR0cmlidXRlczpyLGluZGljZXM6bCxib3VuZGluZ1NwaGVyZTpBdC5mcm9tVmVydGljZXModCkscHJpbWl0aXZlVHlwZTpCdC5UUklBTkdMRVN9KTtpZihvLm5vcm1hbCYmKFQ9R2UuY29tcHV0ZU5vcm1hbChUKSksby50YW5nZW50fHxvLmJpdGFuZ2VudCl7dHJ5e1Q9R2UuY29tcHV0ZVRhbmdlbnRBbmRCaXRhbmdlbnQoVCl9Y2F0Y2h7ZGQoInBvbHlsaW5lLXZvbHVtZS10YW5nZW50LWJpdGFuZ2VudCIsIlVuYWJsZSB0byBjb21wdXRlIHRhbmdlbnRzIGFuZCBiaXRhbmdlbnRzIGZvciBwb2x5bGluZSB2b2x1bWUgZ2VvbWV0cnkiKX1vLnRhbmdlbnR8fChULmF0dHJpYnV0ZXMudGFuZ2VudD12b2lkIDApLG8uYml0YW5nZW50fHwoVC5hdHRyaWJ1dGVzLmJpdGFuZ2VudD12b2lkIDApLG8uc3R8fChULmF0dHJpYnV0ZXMuc3Q9dm9pZCAwKX1yZXR1cm4gVH1mdW5jdGlvbiBldSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvbHlsaW5lUG9zaXRpb25zLG49dC5zaGFwZVBvc2l0aW9ucztpZighbShlKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5wb2x5bGluZVBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtpZighbShuKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5zaGFwZVBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9zaGFwZT1uLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX2Nvcm5lclR5cGU9dC5jb3JuZXJUeXBlPz9mbi5ST1VOREVELHRoaXMuX3ZlcnRleEZvcm1hdD1wdC5jbG9uZSh0LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVCksdGhpcy5fZ3JhbnVsYXJpdHk9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUG9seWxpbmVWb2x1bWVHZW9tZXRyeSI7bGV0IG89MStlLmxlbmd0aCphLnBhY2tlZExlbmd0aDtvKz0xK24ubGVuZ3RoKkoucGFja2VkTGVuZ3RoLHRoaXMucGFja2VkTGVuZ3RoPW8rWS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RoKzJ9dmFyIEtFLFdFLHR1LGhCLE95LFhFPSQoKCk9PntIcigpO0NmKCk7dmUoKTtrZSgpO0R0KCk7RGUoKTtfYygpO3llKCk7ZnQoKTtIdCgpOyR0KCk7WWUoKTskZSgpO2FuKCk7Y2koKTtaZSgpO0t0KCk7WjAoKTtLcigpO3lkKCk7dG4oKTt4bygpO3BjKCk7ZXUucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoInZhbHVlIGlzIHJlcXVpcmVkIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7bj1uPz8wO2xldCBvLHI9dC5fcG9zaXRpb25zLGk9ci5sZW5ndGg7Zm9yKGVbbisrXT1pLG89MDtvPGk7KytvLG4rPWEucGFja2VkTGVuZ3RoKWEucGFjayhyW29dLGUsbik7bGV0IHM9dC5fc2hhcGU7Zm9yKGk9cy5sZW5ndGgsZVtuKytdPWksbz0wO288aTsrK28sbis9Si5wYWNrZWRMZW5ndGgpSi5wYWNrKHNbb10sZSxuKTtyZXR1cm4gWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLHB0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksbis9cHQucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9jb3JuZXJUeXBlLGVbbl09dC5fZ3JhbnVsYXJpdHksZX07S0U9WS5jbG9uZShZLlVOSVRfU1BIRVJFKSxXRT1uZXcgcHQsdHU9e3BvbHlsaW5lUG9zaXRpb25zOnZvaWQgMCxzaGFwZVBvc2l0aW9uczp2b2lkIDAsZWxsaXBzb2lkOktFLHZlcnRleEZvcm1hdDpXRSxjb3JuZXJUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDB9O2V1LnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7ZT1lPz8wO2xldCBvLHI9dFtlKytdLGk9bmV3IEFycmF5KHIpO2ZvcihvPTA7bzxyOysrbyxlKz1hLnBhY2tlZExlbmd0aClpW29dPWEudW5wYWNrKHQsZSk7cj10W2UrK107bGV0IHM9bmV3IEFycmF5KHIpO2ZvcihvPTA7bzxyOysrbyxlKz1KLnBhY2tlZExlbmd0aClzW29dPUoudW5wYWNrKHQsZSk7bGV0IGY9WS51bnBhY2sodCxlLEtFKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgdT1wdC51bnBhY2sodCxlLFdFKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IGM9dFtlKytdLGw9dFtlXTtyZXR1cm4gbShuKT8obi5fcG9zaXRpb25zPWksbi5fc2hhcGU9cyxuLl9lbGxpcHNvaWQ9WS5jbG9uZShmLG4uX2VsbGlwc29pZCksbi5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHUsbi5fdmVydGV4Rm9ybWF0KSxuLl9jb3JuZXJUeXBlPWMsbi5fZ3JhbnVsYXJpdHk9bCxuKToodHUucG9seWxpbmVQb3NpdGlvbnM9aSx0dS5zaGFwZVBvc2l0aW9ucz1zLHR1LmNvcm5lclR5cGU9Yyx0dS5ncmFudWxhcml0eT1sLG5ldyBldSh0dSkpfTtoQj1uZXcgcXI7ZXUuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcG9zaXRpb25zLG49Q24oZSxhLmVxdWFsc0Vwc2lsb24pLG89dC5fc2hhcGU7aWYobz1fcy5yZW1vdmVEdXBsaWNhdGVzRnJvbVNoYXBlKG8pLG4ubGVuZ3RoPDJ8fG8ubGVuZ3RoPDMpcmV0dXJuO1BlLmNvbXB1dGVXaW5kaW5nT3JkZXIyRChvKT09PVBvLkNMT0NLV0lTRSYmby5yZXZlcnNlKCk7bGV0IHI9cXIuZnJvbVBvaW50cyhvLGhCKSxpPV9zLmNvbXB1dGVQb3NpdGlvbnMobixvLHIsdCwhMCk7cmV0dXJuIG1CKGksbyxyLHQuX3ZlcnRleEZvcm1hdCl9O095PWV1fSk7dmFyIEV5PXt9O2xlKEV5LHtkZWZhdWx0OigpPT55Qn0pO2Z1bmN0aW9uIF9CKHQsZSl7cmV0dXJuIG0oZSkmJih0PU95LnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLE95LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciB5QixSeT0kKCgpPT57ZnQoKTskdCgpO1hFKCk7eUI9X0J9KTtmdW5jdGlvbiBnQih0LGUpe2xldCBuPW5ldyBpZTtuLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6dH0pO2xldCBvPWUubGVuZ3RoLHI9bi5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMscz10Lmxlbmd0aC8zL28sZj1MdC5jcmVhdGVUeXBlZEFycmF5KHIsMipvKihzKzEpKSx1LGMsbD0wO3U9MDtsZXQgcD11Km87Zm9yKGM9MDtjPG8tMTtjKyspZltsKytdPWMrcCxmW2wrK109YytwKzE7Zm9yKGZbbCsrXT1vLTErcCxmW2wrK109cCx1PXMtMSxwPXUqbyxjPTA7YzxvLTE7YysrKWZbbCsrXT1jK3AsZltsKytdPWMrcCsxO2ZvcihmW2wrK109by0xK3AsZltsKytdPXAsdT0wO3U8cy0xO3UrKyl7bGV0IGg9byp1LF89aCtvO2ZvcihjPTA7YzxvO2MrKylmW2wrK109YytoLGZbbCsrXT1jK199cmV0dXJuIG5ldyBVdCh7YXR0cmlidXRlczpuLGluZGljZXM6THQuY3JlYXRlVHlwZWRBcnJheShyLGYpLGJvdW5kaW5nU3BoZXJlOkF0LmZyb21WZXJ0aWNlcyh0KSxwcmltaXRpdmVUeXBlOkJ0LkxJTkVTfSl9ZnVuY3Rpb24gb3UodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5wb2x5bGluZVBvc2l0aW9ucyxuPXQuc2hhcGVQb3NpdGlvbnM7aWYoIW0oZSkpdGhyb3cgbmV3IEQoIm9wdGlvbnMucG9seWxpbmVQb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoIm9wdGlvbnMuc2hhcGVQb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7dGhpcy5fcG9zaXRpb25zPWUsdGhpcy5fc2hhcGU9bix0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZSh0LmVsbGlwc29pZD8/WS5kZWZhdWx0KSx0aGlzLl9jb3JuZXJUeXBlPXQuY29ybmVyVHlwZT8/Zm4uUk9VTkRFRCx0aGlzLl9ncmFudWxhcml0eT10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5bGluZVZvbHVtZU91dGxpbmVHZW9tZXRyeSI7bGV0IG89MStlLmxlbmd0aCphLnBhY2tlZExlbmd0aDtvKz0xK24ubGVuZ3RoKkoucGFja2VkTGVuZ3RoLHRoaXMucGFja2VkTGVuZ3RoPW8rWS5wYWNrZWRMZW5ndGgrMn12YXIgWUUsbnUsQUIsU3ksJEU9JCgoKT0+e0hyKCk7Q2YoKTt2ZSgpO2tlKCk7RHQoKTtEZSgpO19jKCk7eWUoKTtmdCgpO0h0KCk7JHQoKTtZZSgpOyRlKCk7YW4oKTtaZSgpO0t0KCk7S3IoKTt5ZCgpO3RuKCk7cGMoKTtvdS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighbShlKSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPW4/PzA7bGV0IG8scj10Ll9wb3NpdGlvbnMsaT1yLmxlbmd0aDtmb3IoZVtuKytdPWksbz0wO288aTsrK28sbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKHJbb10sZSxuKTtsZXQgcz10Ll9zaGFwZTtmb3IoaT1zLmxlbmd0aCxlW24rK109aSxvPTA7bzxpOysrbyxuKz1KLnBhY2tlZExlbmd0aClKLnBhY2soc1tvXSxlLG4pO3JldHVybiBZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2Nvcm5lclR5cGUsZVtuXT10Ll9ncmFudWxhcml0eSxlfTtZRT1ZLmNsb25lKFkuVU5JVF9TUEhFUkUpLG51PXtwb2x5bGluZVBvc2l0aW9uczp2b2lkIDAsc2hhcGVQb3NpdGlvbnM6dm9pZCAwLGVsbGlwc29pZDpZRSxoZWlnaHQ6dm9pZCAwLGNvcm5lclR5cGU6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMH07b3UudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPWU/PzA7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcz1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPUoucGFja2VkTGVuZ3RoKXNbb109Si51bnBhY2sodCxlKTtsZXQgZj1ZLnVucGFjayh0LGUsWUUpO2UrPVkucGFja2VkTGVuZ3RoO2xldCB1PXRbZSsrXSxjPXRbZV07cmV0dXJuIG0obik/KG4uX3Bvc2l0aW9ucz1pLG4uX3NoYXBlPXMsbi5fZWxsaXBzb2lkPVkuY2xvbmUoZixuLl9lbGxpcHNvaWQpLG4uX2Nvcm5lclR5cGU9dSxuLl9ncmFudWxhcml0eT1jLG4pOihudS5wb2x5bGluZVBvc2l0aW9ucz1pLG51LnNoYXBlUG9zaXRpb25zPXMsbnUuY29ybmVyVHlwZT11LG51LmdyYW51bGFyaXR5PWMsbmV3IG91KG51KSl9O0FCPW5ldyBxcjtvdS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9wb3NpdGlvbnMsbj1DbihlLGEuZXF1YWxzRXBzaWxvbiksbz10Ll9zaGFwZTtpZihvPV9zLnJlbW92ZUR1cGxpY2F0ZXNGcm9tU2hhcGUobyksbi5sZW5ndGg8Mnx8by5sZW5ndGg8MylyZXR1cm47UGUuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKG8pPT09UG8uQ0xPQ0tXSVNFJiZvLnJldmVyc2UoKTtsZXQgcj1xci5mcm9tUG9pbnRzKG8sQUIpLGk9X3MuY29tcHV0ZVBvc2l0aW9ucyhuLG8scix0LCExKTtyZXR1cm4gZ0IoaSxvKX07U3k9b3V9KTt2YXIgeHk9e307bGUoeHkse2RlZmF1bHQ6KCk9PndCfSk7ZnVuY3Rpb24gYkIodCxlKXtyZXR1cm4gbShlKSYmKHQ9U3kudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksU3kuY3JlYXRlR2VvbWV0cnkodCl9dmFyIHdCLEN5PSQoKCk9PntmdCgpOyR0KCk7JEUoKTt3Qj1iQn0pO2Z1bmN0aW9uIEpFKHQsZSxuLG8scixpLHMpe2xldCBmPU1hdGguY29zKGUpLHU9bypmLGM9bipmLGw9TWF0aC5zaW4oZSkscD1vKmwsZD1uKmw7cnUuX2VsbGlwc29pZD1ZLmRlZmF1bHQseHI9cnUucHJvamVjdCh0LHhyKSx4cj1hLnN1YnRyYWN0KHhyLEJkLHhyKTtsZXQgaD1aby5mcm9tUm90YXRpb24oZSxPQik7eHI9Wm8ubXVsdGlwbHlCeVZlY3RvcihoLHhyLHhyKSx4cj1hLmFkZCh4cixCZCx4ciksdD1ydS51bnByb2plY3QoeHIsdCksaS09MSxzLT0xO2xldCBfPXQubGF0aXR1ZGUsZz1fK2kqZCxiPV8tdSpzLHc9Xy11KnMraSpkLE89TWF0aC5tYXgoXyxnLGIsdyksRT1NYXRoLm1pbihfLGcsYix3KSxUPXQubG9uZ2l0dWRlLHg9VCtpKmMsTT1UK3MqcCxOPVQrcypwK2kqYyxGPU1hdGgubWF4KFQseCxNLE4pLEk9TWF0aC5taW4oVCx4LE0sTik7cmV0dXJue25vcnRoOk8sc291dGg6RSxlYXN0OkYsd2VzdDpJLGdyYW5ZQ29zOnUsZ3JhbllTaW46cCxncmFuWENvczpjLGdyYW5YU2luOmQsbndDb3JuZXI6dH19dmFyIFpFLFFFLFRCLFB5LE9CLHhyLEVCLEJkLHJ1LGJvLE15PSQoKCk9PntEdCgpO0llKCk7ZnQoKTtIdCgpOyR0KCk7eGkoKTtLdCgpO2JmKCk7VG4oKTtaRT1NYXRoLmNvcyxRRT1NYXRoLnNpbixUQj1NYXRoLnNxcnQsUHk9e307UHkuY29tcHV0ZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe2xldCBmPWUucmFkaWlTcXVhcmVkLHU9dC5ud0Nvcm5lcixjPXQuYm91bmRpbmdSZWN0YW5nbGUsbD11LmxhdGl0dWRlLXQuZ3JhbllDb3MqbytyKnQuZ3JhblhTaW4scD1aRShsKSxkPVFFKGwpLGg9Zi56KmQsXz11LmxvbmdpdHVkZStvKnQuZ3JhbllTaW4rcip0LmdyYW5YQ29zLGc9cCpaRShfKSxiPXAqUUUoXyksdz1mLngqZyxPPWYueSpiLEU9VEIodypnK08qYitoKmQpO2lmKGkueD13L0UsaS55PU8vRSxpLno9aC9FLG4pe2xldCBUPXQuc3ROd0Nvcm5lcjttKFQpPyhsPVQubGF0aXR1ZGUtdC5zdEdyYW5ZQ29zKm8rcip0LnN0R3JhblhTaW4sXz1ULmxvbmdpdHVkZStvKnQuc3RHcmFuWVNpbityKnQuc3RHcmFuWENvcyxzLng9KF8tdC5zdFdlc3QpKnQubG9uU2NhbGFyLHMueT0obC10LnN0U291dGgpKnQubGF0U2NhbGFyKToocy54PShfLWMud2VzdCkqdC5sb25TY2FsYXIscy55PShsLWMuc291dGgpKnQubGF0U2NhbGFyKX19O09CPW5ldyBabyx4cj1uZXcgYSxFQj1uZXcgY3QsQmQ9bmV3IGEscnU9bmV3IGVvO1B5LmNvbXB1dGVPcHRpb25zPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe2xldCBmPXQuZWFzdCx1PXQud2VzdCxjPXQubm9ydGgsbD10LnNvdXRoLHA9ITEsZD0hMTtjPT09UC5QSV9PVkVSX1RXTyYmKHA9ITApLGw9PT0tUC5QSV9PVkVSX1RXTyYmKGQ9ITApO2xldCBoLF89Yy1sO3U+Zj9oPVAuVFdPX1BJLXUrZjpoPWYtdTtsZXQgZz1NYXRoLmNlaWwoaC9lKSsxLGI9TWF0aC5jZWlsKF8vZSkrMSx3PWgvKGctMSksTz1fLyhiLTEpLEU9TnQubm9ydGh3ZXN0KHQsaSksVD1OdC5jZW50ZXIodCxFQik7KG4hPT0wfHxvIT09MCkmJihULmxvbmdpdHVkZTxFLmxvbmdpdHVkZSYmKFQubG9uZ2l0dWRlKz1QLlRXT19QSSkscnUuX2VsbGlwc29pZD1ZLmRlZmF1bHQsQmQ9cnUucHJvamVjdChULEJkKSk7bGV0IHg9TyxNPXcsTj0wLEY9MCxJPU50LmNsb25lKHQsciksdj17Z3JhbllDb3M6eCxncmFuWVNpbjpOLGdyYW5YQ29zOk0sZ3JhblhTaW46Rixud0Nvcm5lcjpFLGJvdW5kaW5nUmVjdGFuZ2xlOkksd2lkdGg6ZyxoZWlnaHQ6Yixub3J0aENhcDpwLHNvdXRoQ2FwOmR9O2lmKG4hPT0wKXtsZXQgQj1KRShFLG4sdyxPLFQsZyxiKTtpZihjPUIubm9ydGgsbD1CLnNvdXRoLGY9Qi5lYXN0LHU9Qi53ZXN0LGM8LVAuUElfT1ZFUl9UV098fGM+UC5QSV9PVkVSX1RXT3x8bDwtUC5QSV9PVkVSX1RXT3x8bD5QLlBJX09WRVJfVFdPKXRocm93IG5ldyBEKCJSb3RhdGVkIHJlY3RhbmdsZSBpcyBpbnZhbGlkLiAgSXQgY3Jvc3NlcyBvdmVyIGVpdGhlciB0aGUgbm9ydGggb3Igc291dGggcG9sZS4iKTt2LmdyYW5ZQ29zPUIuZ3JhbllDb3Msdi5ncmFuWVNpbj1CLmdyYW5ZU2luLHYuZ3JhblhDb3M9Qi5ncmFuWENvcyx2LmdyYW5YU2luPUIuZ3JhblhTaW4sSS5ub3J0aD1jLEkuc291dGg9bCxJLmVhc3Q9ZixJLndlc3Q9dX1pZihvIT09MCl7bj1uLW87bGV0IEI9TnQubm9ydGh3ZXN0KEkscyksQT1KRShCLG4sdyxPLFQsZyxiKTt2LnN0R3JhbllDb3M9QS5ncmFuWUNvcyx2LnN0R3JhblhDb3M9QS5ncmFuWENvcyx2LnN0R3JhbllTaW49QS5ncmFuWVNpbix2LnN0R3JhblhTaW49QS5ncmFuWFNpbix2LnN0TndDb3JuZXI9Qix2LnN0V2VzdD1BLndlc3Qsdi5zdFNvdXRoPUEuc291dGh9cmV0dXJuIHZ9O2JvPVB5fSk7ZnVuY3Rpb24gc1IodCxlKXtsZXQgbj1uZXcgVXQoe2F0dHJpYnV0ZXM6bmV3IGllLHByaW1pdGl2ZVR5cGU6QnQuVFJJQU5HTEVTfSk7cmV0dXJuIG4uYXR0cmlidXRlcy5wb3NpdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmUucG9zaXRpb25zfSksdC5ub3JtYWwmJihuLmF0dHJpYnV0ZXMubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczplLm5vcm1hbHN9KSksdC50YW5nZW50JiYobi5hdHRyaWJ1dGVzLnRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmUudGFuZ2VudHN9KSksdC5iaXRhbmdlbnQmJihuLmF0dHJpYnV0ZXMuYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczplLmJpdGFuZ2VudHN9KSksbn1mdW5jdGlvbiBDQih0LGUsbixvKXtsZXQgcj10Lmxlbmd0aCxpPWUubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkocik6dm9pZCAwLHM9ZS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkocik6dm9pZCAwLGY9ZS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShyKTp2b2lkIDAsdT0wLGM9clIsbD1vUixwPW5SO2lmKGUubm9ybWFsfHxlLnRhbmdlbnR8fGUuYml0YW5nZW50KWZvcihsZXQgZD0wO2Q8cjtkKz0zKXtsZXQgaD1hLmZyb21BcnJheSh0LGQsTnkpLF89dSsxLGc9dSsyO3A9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoaCxwKSwoZS50YW5nZW50fHxlLmJpdGFuZ2VudCkmJihhLmNyb3NzKGEuVU5JVF9aLHAsbCksWi5tdWx0aXBseUJ5VmVjdG9yKG8sbCxsKSxhLm5vcm1hbGl6ZShsLGwpLGUuYml0YW5nZW50JiZhLm5vcm1hbGl6ZShhLmNyb3NzKHAsbCxjKSxjKSksZS5ub3JtYWwmJihpW3VdPXAueCxpW19dPXAueSxpW2ddPXAueiksZS50YW5nZW50JiYoc1t1XT1sLngsc1tfXT1sLnksc1tnXT1sLnopLGUuYml0YW5nZW50JiYoZlt1XT1jLngsZltfXT1jLnksZltnXT1jLnopLHUrPTN9cmV0dXJuIHNSKGUse3Bvc2l0aW9uczp0LG5vcm1hbHM6aSx0YW5nZW50czpzLGJpdGFuZ2VudHM6Zn0pfWZ1bmN0aW9uIFBCKHQsZSxuKXtsZXQgbz10Lmxlbmd0aCxyPWUubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkobyk6dm9pZCAwLGk9ZS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkobyk6dm9pZCAwLHM9ZS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShvKTp2b2lkIDAsZj0wLHU9MCxjPTAsbD0hMCxwPXJSLGQ9b1IsaD1uUjtpZihlLm5vcm1hbHx8ZS50YW5nZW50fHxlLmJpdGFuZ2VudClmb3IobGV0IF89MDtfPG87Xys9Nil7bGV0IGc9YS5mcm9tQXJyYXkodCxfLE55KSxiPWEuZnJvbUFycmF5KHQsKF8rNiklbyxJeSk7aWYobCl7bGV0IHc9YS5mcm9tQXJyYXkodCwoXyszKSVvLGNSKTthLnN1YnRyYWN0KGIsZyxiKSxhLnN1YnRyYWN0KHcsZyx3KSxoPWEubm9ybWFsaXplKGEuY3Jvc3ModyxiLGgpLGgpLGw9ITF9YS5lcXVhbHNFcHNpbG9uKGIsZyxQLkVQU0lMT04xMCkmJihsPSEwKSwoZS50YW5nZW50fHxlLmJpdGFuZ2VudCkmJihwPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGcscCksZS50YW5nZW50JiYoZD1hLm5vcm1hbGl6ZShhLmNyb3NzKHAsaCxkKSxkKSkpLGUubm9ybWFsJiYocltmKytdPWgueCxyW2YrK109aC55LHJbZisrXT1oLnoscltmKytdPWgueCxyW2YrK109aC55LHJbZisrXT1oLnopLGUudGFuZ2VudCYmKGlbdSsrXT1kLngsaVt1KytdPWQueSxpW3UrK109ZC56LGlbdSsrXT1kLngsaVt1KytdPWQueSxpW3UrK109ZC56KSxlLmJpdGFuZ2VudCYmKHNbYysrXT1wLngsc1tjKytdPXAueSxzW2MrK109cC56LHNbYysrXT1wLngsc1tjKytdPXAueSxzW2MrK109cC56KX1yZXR1cm4gc1IoZSx7cG9zaXRpb25zOnQsbm9ybWFsczpyLHRhbmdlbnRzOmksYml0YW5nZW50czpzfSl9ZnVuY3Rpb24gYVIodCxlKXtsZXQgbj10Ll92ZXJ0ZXhGb3JtYXQsbz10Ll9lbGxpcHNvaWQscj1lLmhlaWdodCxpPWUud2lkdGgscz1lLm5vcnRoQ2FwLGY9ZS5zb3V0aENhcCx1PTAsYz1yLGw9cixwPTA7cyYmKHU9MSxsLT0xLHArPTEpLGYmJihjLT0xLGwtPTEscCs9MSkscCs9aSpsO2xldCBkPW4ucG9zaXRpb24/bmV3IEZsb2F0NjRBcnJheShwKjMpOnZvaWQgMCxoPW4uc3Q/bmV3IEZsb2F0MzJBcnJheShwKjIpOnZvaWQgMCxfPTAsZz0wLGI9Tnksdz1SQixPPU51bWJlci5NQVhfVkFMVUUsRT1OdW1iZXIuTUFYX1ZBTFVFLFQ9LU51bWJlci5NQVhfVkFMVUUseD0tTnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IEE9dTtBPGM7KytBKWZvcihsZXQgUz0wO1M8aTsrK1MpYm8uY29tcHV0ZVBvc2l0aW9uKGUsbyxuLnN0LEEsUyxiLHcpLGRbXysrXT1iLngsZFtfKytdPWIueSxkW18rK109Yi56LG4uc3QmJihoW2crK109dy54LGhbZysrXT13LnksTz1NYXRoLm1pbihPLHcueCksRT1NYXRoLm1pbihFLHcueSksVD1NYXRoLm1heChULHcueCkseD1NYXRoLm1heCh4LHcueSkpO2lmKHMmJihiby5jb21wdXRlUG9zaXRpb24oZSxvLG4uc3QsMCwwLGIsdyksZFtfKytdPWIueCxkW18rK109Yi55LGRbXysrXT1iLnosbi5zdCYmKGhbZysrXT13LngsaFtnKytdPXcueSxPPXcueCxFPXcueSxUPXcueCx4PXcueSkpLGYmJihiby5jb21wdXRlUG9zaXRpb24oZSxvLG4uc3Qsci0xLDAsYix3KSxkW18rK109Yi54LGRbXysrXT1iLnksZFtfXT1iLnosbi5zdCYmKGhbZysrXT13LngsaFtnXT13LnksTz1NYXRoLm1pbihPLHcueCksRT1NYXRoLm1pbihFLHcueSksVD1NYXRoLm1heChULHcueCkseD1NYXRoLm1heCh4LHcueSkpKSxuLnN0JiYoTzwwfHxFPDB8fFQ+MXx8eD4xKSlmb3IobGV0IEE9MDtBPGgubGVuZ3RoO0ErPTIpaFtBXT0oaFtBXS1PKS8oVC1PKSxoW0ErMV09KGhbQSsxXS1FKS8oeC1FKTtsZXQgTT1DQihkLG4sbyxlLnRhbmdlbnRSb3RhdGlvbk1hdHJpeCksTj02KihpLTEpKihsLTEpO3MmJihOKz0zKihpLTEpKSxmJiYoTis9MyooaS0xKSk7bGV0IEY9THQuY3JlYXRlVHlwZWRBcnJheShwLE4pLEk9MCx2PTAsQjtmb3IoQj0wO0I8bC0xOysrQil7Zm9yKGxldCBBPTA7QTxpLTE7KytBKXtsZXQgUz1JLEM9UytpLEw9QysxLHo9UysxO0ZbdisrXT1TLEZbdisrXT1DLEZbdisrXT16LEZbdisrXT16LEZbdisrXT1DLEZbdisrXT1MLCsrSX0rK0l9aWYoc3x8Zil7bGV0IEE9cC0xLFM9cC0xO3MmJmYmJihBPXAtMik7bGV0IEMsTDtpZihJPTAscylmb3IoQj0wO0I8aS0xO0IrKylDPUksTD1DKzEsRlt2KytdPUEsRlt2KytdPUMsRlt2KytdPUwsKytJO2lmKGYpZm9yKEk9KGwtMSkqaSxCPTA7QjxpLTE7QisrKUM9SSxMPUMrMSxGW3YrK109QyxGW3YrK109UyxGW3YrK109TCwrK0l9cmV0dXJuIE0uaW5kaWNlcz1GLG4uc3QmJihNLmF0dHJpYnV0ZXMuc3Q9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmh9KSksTX1mdW5jdGlvbiBOYSh0LGUsbixvLHIpe3JldHVybiB0W2UrK109b1tuXSx0W2UrK109b1tuKzFdLHRbZSsrXT1vW24rMl0sdFtlKytdPXJbbl0sdFtlKytdPXJbbisxXSx0W2VdPXJbbisyXSx0fWZ1bmN0aW9uIElhKHQsZSxuLG8pe3JldHVybiB0W2UrK109b1tuXSx0W2UrK109b1tuKzFdLHRbZSsrXT1vW25dLHRbZV09b1tuKzFdLHR9ZnVuY3Rpb24gTUIodCxlKXtsZXQgbj10Ll9zaGFkb3dWb2x1bWUsbz10Ll9vZmZzZXRBdHRyaWJ1dGUscj10Ll92ZXJ0ZXhGb3JtYXQsaT10Ll9leHRydWRlZEhlaWdodCxzPXQuX3N1cmZhY2VIZWlnaHQsZj10Ll9lbGxpcHNvaWQsdT1lLmhlaWdodCxjPWUud2lkdGgsbDtpZihuKXtsZXQgUXQ9cHQuY2xvbmUocix2eSk7UXQubm9ybWFsPSEwLHQuX3ZlcnRleEZvcm1hdD1RdH1sZXQgcD1hUih0LGUpO24mJih0Ll92ZXJ0ZXhGb3JtYXQ9cik7bGV0IGQ9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KHAuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscyxmLCExKTtkPW5ldyBGbG9hdDY0QXJyYXkoZCk7bGV0IGg9ZC5sZW5ndGgsXz1oKjIsZz1uZXcgRmxvYXQ2NEFycmF5KF8pO2cuc2V0KGQpO2xldCBiPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChwLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGksZik7Zy5zZXQoYixoKSxwLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPWc7bGV0IHc9ci5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShfKTp2b2lkIDAsTz1yLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShfKTp2b2lkIDAsRT1yLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KF8pOnZvaWQgMCxUPXIuc3Q/bmV3IEZsb2F0MzJBcnJheShfLzMqMik6dm9pZCAwLHgsTTtpZihyLm5vcm1hbCl7Zm9yKE09cC5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXMsdy5zZXQoTSksbD0wO2w8aDtsKyspTVtsXT0tTVtsXTt3LnNldChNLGgpLHAuYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzPXd9aWYobil7TT1wLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcyxyLm5vcm1hbHx8KHAuYXR0cmlidXRlcy5ub3JtYWw9dm9pZCAwKTtsZXQgUXQ9bmV3IEZsb2F0MzJBcnJheShfKTtmb3IobD0wO2w8aDtsKyspTVtsXT0tTVtsXTtRdC5zZXQoTSxoKSxwLmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6UXR9KX1sZXQgTixGPW0obyk7aWYoRil7bGV0IFF0PWgvMyoyLE5lPW5ldyBVaW50OEFycmF5KFF0KTtvPT09YWUuVE9QP05lPU5lLmZpbGwoMSwwLFF0LzIpOihOPW89PT1hZS5OT05FPzA6MSxOZT1OZS5maWxsKE4pKSxwLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6TmV9KX1pZihyLnRhbmdlbnQpe2xldCBRdD1wLmF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZXM7Zm9yKE8uc2V0KFF0KSxsPTA7bDxoO2wrKylRdFtsXT0tUXRbbF07Ty5zZXQoUXQsaCkscC5hdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWVzPU99aWYoci5iaXRhbmdlbnQpe2xldCBRdD1wLmF0dHJpYnV0ZXMuYml0YW5nZW50LnZhbHVlcztFLnNldChRdCksRS5zZXQoUXQsaCkscC5hdHRyaWJ1dGVzLmJpdGFuZ2VudC52YWx1ZXM9RX1yLnN0JiYoeD1wLmF0dHJpYnV0ZXMuc3QudmFsdWVzLFQuc2V0KHgpLFQuc2V0KHgsaC8zKjIpLHAuYXR0cmlidXRlcy5zdC52YWx1ZXM9VCk7bGV0IEk9cC5pbmRpY2VzLHY9SS5sZW5ndGgsQj1oLzMsQT1MdC5jcmVhdGVUeXBlZEFycmF5KF8vMyx2KjIpO2ZvcihBLnNldChJKSxsPTA7bDx2O2wrPTMpQVtsK3ZdPUlbbCsyXStCLEFbbCsxK3ZdPUlbbCsxXStCLEFbbCsyK3ZdPUlbbF0rQjtwLmluZGljZXM9QTtsZXQgUz1lLm5vcnRoQ2FwLEM9ZS5zb3V0aENhcCxMPXUsej0yLGo9MCxrPTQscT00O1MmJih6LT0xLEwtPTEsais9MSxrLT0yLHEtPTEpLEMmJih6LT0xLEwtPTEsais9MSxrLT0yLHEtPTEpLGorPXoqYysyKkwtaztsZXQgVz0oaitxKSoyLFI9bmV3IEZsb2F0NjRBcnJheShXKjMpLG50PW4/bmV3IEZsb2F0MzJBcnJheShXKjMpOnZvaWQgMCxhdD1GP25ldyBVaW50OEFycmF5KFcpOnZvaWQgMCxsdD1yLnN0P25ldyBGbG9hdDMyQXJyYXkoVyoyKTp2b2lkIDAsX3Q9bz09PWFlLlRPUDtGJiYhX3QmJihOPW89PT1hZS5BTEw/MTowLGF0PWF0LmZpbGwoTikpO2xldCBvdD0wLFB0PTAsZ3Q9MCxSdD0wLGR0PWMqTCxydDtmb3IobD0wO2w8ZHQ7bCs9YylydD1sKjMsUj1OYShSLG90LHJ0LGQsYiksb3QrPTYsci5zdCYmKGx0PUlhKGx0LFB0LGwqMix4KSxQdCs9NCksbiYmKGd0Kz0zLG50W2d0KytdPU1bcnRdLG50W2d0KytdPU1bcnQrMV0sbnRbZ3QrK109TVtydCsyXSksX3QmJihhdFtSdCsrXT0xLFJ0Kz0xKTtpZihDKXtsZXQgUXQ9Uz9kdCsxOmR0O2ZvcihydD1RdCozLGw9MDtsPDI7bCsrKVI9TmEoUixvdCxydCxkLGIpLG90Kz02LHIuc3QmJihsdD1JYShsdCxQdCxRdCoyLHgpLFB0Kz00KSxuJiYoZ3QrPTMsbnRbZ3QrK109TVtydF0sbnRbZ3QrK109TVtydCsxXSxudFtndCsrXT1NW3J0KzJdKSxfdCYmKGF0W1J0KytdPTEsUnQrPTEpfWVsc2UgZm9yKGw9ZHQtYztsPGR0O2wrKylydD1sKjMsUj1OYShSLG90LHJ0LGQsYiksb3QrPTYsci5zdCYmKGx0PUlhKGx0LFB0LGwqMix4KSxQdCs9NCksbiYmKGd0Kz0zLG50W2d0KytdPU1bcnRdLG50W2d0KytdPU1bcnQrMV0sbnRbZ3QrK109TVtydCsyXSksX3QmJihhdFtSdCsrXT0xLFJ0Kz0xKTtmb3IobD1kdC0xO2w+MDtsLT1jKXJ0PWwqMyxSPU5hKFIsb3QscnQsZCxiKSxvdCs9NixyLnN0JiYobHQ9SWEobHQsUHQsbCoyLHgpLFB0Kz00KSxuJiYoZ3QrPTMsbnRbZ3QrK109TVtydF0sbnRbZ3QrK109TVtydCsxXSxudFtndCsrXT1NW3J0KzJdKSxfdCYmKGF0W1J0KytdPTEsUnQrPTEpO2lmKFMpe2xldCBRdD1kdDtmb3IocnQ9UXQqMyxsPTA7bDwyO2wrKylSPU5hKFIsb3QscnQsZCxiKSxvdCs9NixyLnN0JiYobHQ9SWEobHQsUHQsUXQqMix4KSxQdCs9NCksbiYmKGd0Kz0zLG50W2d0KytdPU1bcnRdLG50W2d0KytdPU1bcnQrMV0sbnRbZ3QrK109TVtydCsyXSksX3QmJihhdFtSdCsrXT0xLFJ0Kz0xKX1lbHNlIGZvcihsPWMtMTtsPj0wO2wtLSlydD1sKjMsUj1OYShSLG90LHJ0LGQsYiksb3QrPTYsci5zdCYmKGx0PUlhKGx0LFB0LGwqMix4KSxQdCs9NCksbiYmKGd0Kz0zLG50W2d0KytdPU1bcnRdLG50W2d0KytdPU1bcnQrMV0sbnRbZ3QrK109TVtydCsyXSksX3QmJihhdFtSdCsrXT0xLFJ0Kz0xKTtsZXQgeHQ9UEIoUixyLGYpO3Iuc3QmJih4dC5hdHRyaWJ1dGVzLnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpsdH0pKSxuJiYoeHQuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpudH0pKSxGJiYoeHQuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczphdH0pKTtsZXQgR3Q9THQuY3JlYXRlVHlwZWRBcnJheShXLGoqNikscGUscmUsZGUsZmU7aD1SLmxlbmd0aC8zO2xldCBadD0wO2ZvcihsPTA7bDxoLTE7bCs9Mil7cGU9bCxmZT0ocGUrMiklaDtsZXQgUXQ9YS5mcm9tQXJyYXkoUixwZSozLEl5KSxOZT1hLmZyb21BcnJheShSLGZlKjMsY1IpO2EuZXF1YWxzRXBzaWxvbihRdCxOZSxQLkVQU0lMT04xMCl8fChyZT0ocGUrMSklaCxkZT0ocmUrMiklaCxHdFtadCsrXT1wZSxHdFtadCsrXT1yZSxHdFtadCsrXT1mZSxHdFtadCsrXT1mZSxHdFtadCsrXT1yZSxHdFtadCsrXT1kZSl9cmV0dXJuIHh0LmluZGljZXM9R3QseHQ9R2UuY29tYmluZUluc3RhbmNlcyhbbmV3IGZvKHtnZW9tZXRyeTpwfSksbmV3IGZvKHtnZW9tZXRyeTp4dH0pXSkseHRbMF19ZnVuY3Rpb24gRnkodCxlLG4sbyxyKXtpZihuPT09MClyZXR1cm4gTnQuY2xvbmUodCxyKTtsZXQgaT1iby5jb21wdXRlT3B0aW9ucyh0LGUsbiwwLGlSLGZSKSxzPWkuaGVpZ2h0LGY9aS53aWR0aCx1PU5CO3JldHVybiBiby5jb21wdXRlUG9zaXRpb24oaSxvLCExLDAsMCx1WzBdKSxiby5jb21wdXRlUG9zaXRpb24oaSxvLCExLDAsZi0xLHVbMV0pLGJvLmNvbXB1dGVQb3NpdGlvbihpLG8sITEscy0xLDAsdVsyXSksYm8uY29tcHV0ZVBvc2l0aW9uKGksbywhMSxzLTEsZi0xLHVbM10pLE50LmZyb21DYXJ0ZXNpYW5BcnJheSh1LG8scil9ZnVuY3Rpb24gaGkodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5yZWN0YW5nbGU7aWYoeS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLGUpLE50Ll92YWxpZGF0ZShlKSxlLm5vcnRoPGUuc291dGgpdGhyb3cgbmV3IEQoIm9wdGlvbnMucmVjdGFuZ2xlLm5vcnRoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG9wdGlvbnMucmVjdGFuZ2xlLnNvdXRoIik7bGV0IG49dC5oZWlnaHQ/PzAsbz10LmV4dHJ1ZGVkSGVpZ2h0Pz9uO3RoaXMuX3JlY3RhbmdsZT1OdC5jbG9uZShlKSx0aGlzLl9ncmFudWxhcml0eT10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZSh0LmVsbGlwc29pZD8/WS5kZWZhdWx0KSx0aGlzLl9zdXJmYWNlSGVpZ2h0PU1hdGgubWF4KG4sbyksdGhpcy5fcm90YXRpb249dC5yb3RhdGlvbj8/MCx0aGlzLl9zdFJvdGF0aW9uPXQuc3RSb3RhdGlvbj8/MCx0aGlzLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUodC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKG4sbyksdGhpcy5fc2hhZG93Vm9sdW1lPXQuc2hhZG93Vm9sdW1lPz8hMSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVSZWN0YW5nbGVHZW9tZXRyeSIsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3JvdGF0ZWRSZWN0YW5nbGU9dm9pZCAwLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9dm9pZCAwfWZ1bmN0aW9uIFVCKHQpe2lmKHQuX3N0Um90YXRpb249PT0wKXJldHVyblswLDAsMCwxLDEsMF07bGV0IGU9TnQuY2xvbmUodC5fcmVjdGFuZ2xlLGVSKSxuPXQuX2dyYW51bGFyaXR5LG89dC5fZWxsaXBzb2lkLHI9dC5fcm90YXRpb24tdC5fc3RSb3RhdGlvbixpPUZ5KGUsbixyLG8sZVIpLHM9TEI7c1swXS54PWkud2VzdCxzWzBdLnk9aS5zb3V0aCxzWzFdLng9aS53ZXN0LHNbMV0ueT1pLm5vcnRoLHNbMl0ueD1pLmVhc3Qsc1syXS55PWkuc291dGg7bGV0IGY9dC5yZWN0YW5nbGUsdT1aby5mcm9tUm90YXRpb24odC5fc3RSb3RhdGlvbixEQiksYz1OdC5jZW50ZXIoZixCQik7Zm9yKGxldCBfPTA7XzwzOysrXyl7bGV0IGc9c1tfXTtnLngtPWMubG9uZ2l0dWRlLGcueS09Yy5sYXRpdHVkZSxaby5tdWx0aXBseUJ5VmVjdG9yKHUsZyxnKSxnLngrPWMubG9uZ2l0dWRlLGcueSs9Yy5sYXRpdHVkZSxnLng9KGcueC1mLndlc3QpL2Yud2lkdGgsZy55PShnLnktZi5zb3V0aCkvZi5oZWlnaHR9bGV0IGw9c1swXSxwPXNbMV0sZD1zWzJdLGg9bmV3IEFycmF5KDYpO3JldHVybiBKLnBhY2sobCxoKSxKLnBhY2socCxoLDIpLEoucGFjayhkLGgsNCksaH12YXIgTnksblIsb1IsclIsaVIsUkIsU0IseEIsSXksY1IsdnksTkIsZlIsSUIsdVIsbFIseHMsdkIsdFIsRkIsZVIsTEIsREIsQkIsTHkscFI9JCgoKT0+e3ZlKCk7a2UoKTtEdCgpO0llKCk7V3QoKTtEZSgpO3llKCk7ZnQoKTtIdCgpOyR0KCk7WWUoKTskZSgpO2FuKCk7Y2MoKTtEbygpO2NpKCk7WmUoKTtLdCgpO2JmKCk7VW4oKTtLcigpO3RuKCk7WG8oKTtUbigpO015KCk7eG8oKTtOeT1uZXcgYSxuUj1uZXcgYSxvUj1uZXcgYSxyUj1uZXcgYSxpUj1uZXcgTnQsUkI9bmV3IEosU0I9bmV3IEF0LHhCPW5ldyBBdDtJeT1uZXcgYSxjUj1uZXcgYTt2eT1uZXcgcHQ7TkI9W25ldyBhLG5ldyBhLG5ldyBhLG5ldyBhXSxmUj1uZXcgY3QsSUI9bmV3IGN0O2hpLnBhY2tlZExlbmd0aD1OdC5wYWNrZWRMZW5ndGgrWS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RoKzc7aGkucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxOdC5wYWNrKHQuX3JlY3RhbmdsZSxlLG4pLG4rPU50LnBhY2tlZExlbmd0aCxZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbisrXT10Ll9zdXJmYWNlSGVpZ2h0LGVbbisrXT10Ll9yb3RhdGlvbixlW24rK109dC5fc3RSb3RhdGlvbixlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuKytdPXQuX3NoYWRvd1ZvbHVtZT8xOjAsZVtuXT10Ll9vZmZzZXRBdHRyaWJ1dGU/Py0xLGV9O3VSPW5ldyBOdCxsUj1ZLmNsb25lKFkuVU5JVF9TUEhFUkUpLHhzPXtyZWN0YW5nbGU6dVIsZWxsaXBzb2lkOmxSLHZlcnRleEZvcm1hdDp2eSxncmFudWxhcml0eTp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsc3RSb3RhdGlvbjp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLHNoYWRvd1ZvbHVtZTp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07aGkudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89TnQudW5wYWNrKHQsZSx1Uik7ZSs9TnQucGFja2VkTGVuZ3RoO2xldCByPVkudW5wYWNrKHQsZSxsUik7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IGk9cHQudW5wYWNrKHQsZSx2eSk7ZSs9cHQucGFja2VkTGVuZ3RoO2xldCBzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXSxwPXRbZSsrXT09PTEsZD10W2VdO3JldHVybiBtKG4pPyhuLl9yZWN0YW5nbGU9TnQuY2xvbmUobyxuLl9yZWN0YW5nbGUpLG4uX2VsbGlwc29pZD1ZLmNsb25lKHIsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX2dyYW51bGFyaXR5PXMsbi5fc3VyZmFjZUhlaWdodD1mLG4uX3JvdGF0aW9uPXUsbi5fc3RSb3RhdGlvbj1jLG4uX2V4dHJ1ZGVkSGVpZ2h0PWwsbi5fc2hhZG93Vm9sdW1lPXAsbi5fb2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuKTooeHMuZ3JhbnVsYXJpdHk9cyx4cy5oZWlnaHQ9Zix4cy5yb3RhdGlvbj11LHhzLnN0Um90YXRpb249Yyx4cy5leHRydWRlZEhlaWdodD1sLHhzLnNoYWRvd1ZvbHVtZT1wLHhzLm9mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsbmV3IGhpKHhzKSl9O2hpLmNvbXB1dGVSZWN0YW5nbGU9ZnVuY3Rpb24odCxlKXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgbj10LnJlY3RhbmdsZTtpZih5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsbiksTnQuX3ZhbGlkYXRlKG4pLG4ubm9ydGg8bi5zb3V0aCl0aHJvdyBuZXcgRCgib3B0aW9ucy5yZWN0YW5nbGUubm9ydGggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb3B0aW9ucy5yZWN0YW5nbGUuc291dGgiKTtsZXQgbz10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSxyPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQsaT10LnJvdGF0aW9uPz8wO3JldHVybiBGeShuLG8saSxyLGUpfTt2Qj1uZXcgWix0Uj1uZXcgdGUsRkI9bmV3IGN0O2hpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2lmKFAuZXF1YWxzRXBzaWxvbih0Ll9yZWN0YW5nbGUubm9ydGgsdC5fcmVjdGFuZ2xlLnNvdXRoLFAuRVBTSUxPTjEwKXx8UC5lcXVhbHNFcHNpbG9uKHQuX3JlY3RhbmdsZS5lYXN0LHQuX3JlY3RhbmdsZS53ZXN0LFAuRVBTSUxPTjEwKSlyZXR1cm47bGV0IGU9dC5fcmVjdGFuZ2xlLG49dC5fZWxsaXBzb2lkLG89dC5fcm90YXRpb24scj10Ll9zdFJvdGF0aW9uLGk9dC5fdmVydGV4Rm9ybWF0LHM9Ym8uY29tcHV0ZU9wdGlvbnMoZSx0Ll9ncmFudWxhcml0eSxvLHIsaVIsZlIsSUIpLGY9dkI7aWYociE9PTB8fG8hPT0wKXtsZXQgaD1OdC5jZW50ZXIoZSxGQiksXz1uLmdlb2RldGljU3VyZmFjZU5vcm1hbENhcnRvZ3JhcGhpYyhoLEl5KTt0ZS5mcm9tQXhpc0FuZ2xlKF8sLXIsdFIpLFouZnJvbVF1YXRlcm5pb24odFIsZil9ZWxzZSBaLmNsb25lKFouSURFTlRJVFksZik7bGV0IHU9dC5fc3VyZmFjZUhlaWdodCxjPXQuX2V4dHJ1ZGVkSGVpZ2h0LGw9IVAuZXF1YWxzRXBzaWxvbih1LGMsMCxQLkVQU0lMT04yKTtzLmxvblNjYWxhcj0xL3QuX3JlY3RhbmdsZS53aWR0aCxzLmxhdFNjYWxhcj0xL3QuX3JlY3RhbmdsZS5oZWlnaHQscy50YW5nZW50Um90YXRpb25NYXRyaXg9ZjtsZXQgcCxkO2lmKGU9dC5fcmVjdGFuZ2xlLGwpe3A9TUIodCxzKTtsZXQgaD1BdC5mcm9tUmVjdGFuZ2xlM0QoZSxuLHUseEIpLF89QXQuZnJvbVJlY3RhbmdsZTNEKGUsbixjLFNCKTtkPUF0LnVuaW9uKGgsXyl9ZWxzZXtpZihwPWFSKHQscykscC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQocC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyx1LG4sITEpLG0odC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGg9cC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsXz10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxnPW5ldyBVaW50OEFycmF5KGgvMykuZmlsbChfKTtwLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6Z30pfWQ9QXQuZnJvbVJlY3RhbmdsZTNEKGUsbix1KX1yZXR1cm4gaS5wb3NpdGlvbnx8ZGVsZXRlIHAuYXR0cmlidXRlcy5wb3NpdGlvbixuZXcgVXQoe2F0dHJpYnV0ZXM6cC5hdHRyaWJ1dGVzLGluZGljZXM6cC5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6cC5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOmQsb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtoaS5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQuX2dyYW51bGFyaXR5LHI9dC5fZWxsaXBzb2lkLGk9ZShvLHIpLHM9bihvLHIpO3JldHVybiBuZXcgaGkoe3JlY3RhbmdsZTp0Ll9yZWN0YW5nbGUscm90YXRpb246dC5fcm90YXRpb24sZWxsaXBzb2lkOnIsc3RSb3RhdGlvbjp0Ll9zdFJvdGF0aW9uLGdyYW51bGFyaXR5Om8sZXh0cnVkZWRIZWlnaHQ6cyxoZWlnaHQ6aSx2ZXJ0ZXhGb3JtYXQ6cHQuUE9TSVRJT05fT05MWSxzaGFkb3dWb2x1bWU6ITB9KX07ZVI9bmV3IE50LExCPVtuZXcgSixuZXcgSixuZXcgSl0sREI9bmV3IFpvLEJCPW5ldyBjdDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhoaS5wcm90b3R5cGUse3JlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5fcm90YXRlZFJlY3RhbmdsZSl8fCh0aGlzLl9yb3RhdGVkUmVjdGFuZ2xlPUZ5KHRoaXMuX3JlY3RhbmdsZSx0aGlzLl9ncmFudWxhcml0eSx0aGlzLl9yb3RhdGlvbix0aGlzLl9lbGxpcHNvaWQpKSx0aGlzLl9yb3RhdGVkUmVjdGFuZ2xlfX0sdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyl8fCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPVVCKHRoaXMpKSx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzfX19KTtMeT1oaX0pO3ZhciBEeT17fTtsZShEeSx7ZGVmYXVsdDooKT0+R0J9KTtmdW5jdGlvbiBrQih0LGUpe3JldHVybiBtKGUpJiYodD1MeS51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSx0Ll9yZWN0YW5nbGU9TnQuY2xvbmUodC5fcmVjdGFuZ2xlKSxMeS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgR0IsQnk9JCgoKT0+e2Z0KCk7JHQoKTtUbigpO3BSKCk7R0I9a0J9KTtmdW5jdGlvbiBkUih0LGUpe2xldCBuPXQuX2VsbGlwc29pZCxvPWUuaGVpZ2h0LHI9ZS53aWR0aCxpPWUubm9ydGhDYXAscz1lLnNvdXRoQ2FwLGY9byx1PTIsYz0wLGw9NDtpJiYodS09MSxmLT0xLGMrPTEsbC09MikscyYmKHUtPTEsZi09MSxjKz0xLGwtPTIpLGMrPXUqcisyKmYtbDtsZXQgcD1uZXcgRmxvYXQ2NEFycmF5KGMqMyksZD0wLGg9MCxfLGc9akI7aWYoaSliby5jb21wdXRlUG9zaXRpb24oZSxuLCExLGgsMCxnKSxwW2QrK109Zy54LHBbZCsrXT1nLnkscFtkKytdPWcuejtlbHNlIGZvcihfPTA7XzxyO18rKyliby5jb21wdXRlUG9zaXRpb24oZSxuLCExLGgsXyxnKSxwW2QrK109Zy54LHBbZCsrXT1nLnkscFtkKytdPWcuejtmb3IoXz1yLTEsaD0xO2g8bztoKyspYm8uY29tcHV0ZVBvc2l0aW9uKGUsbiwhMSxoLF8sZykscFtkKytdPWcueCxwW2QrK109Zy55LHBbZCsrXT1nLno7aWYoaD1vLTEsIXMpZm9yKF89ci0yO18+PTA7Xy0tKWJvLmNvbXB1dGVQb3NpdGlvbihlLG4sITEsaCxfLGcpLHBbZCsrXT1nLngscFtkKytdPWcueSxwW2QrK109Zy56O2ZvcihfPTAsaD1vLTI7aD4wO2gtLSliby5jb21wdXRlUG9zaXRpb24oZSxuLCExLGgsXyxnKSxwW2QrK109Zy54LHBbZCsrXT1nLnkscFtkKytdPWcuejtsZXQgYj1wLmxlbmd0aC8zKjIsdz1MdC5jcmVhdGVUeXBlZEFycmF5KHAubGVuZ3RoLzMsYiksTz0wO2ZvcihsZXQgVD0wO1Q8cC5sZW5ndGgvMy0xO1QrKyl3W08rK109VCx3W08rK109VCsxO3dbTysrXT1wLmxlbmd0aC8zLTEsd1tPKytdPTA7bGV0IEU9bmV3IFV0KHthdHRyaWJ1dGVzOm5ldyBpZSxwcmltaXRpdmVUeXBlOkJ0LkxJTkVTfSk7cmV0dXJuIEUuYXR0cmlidXRlcy5wb3NpdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnB9KSxFLmluZGljZXM9dyxFfWZ1bmN0aW9uIHFCKHQsZSl7bGV0IG49dC5fc3VyZmFjZUhlaWdodCxvPXQuX2V4dHJ1ZGVkSGVpZ2h0LHI9dC5fZWxsaXBzb2lkLGk9ZFIodCxlKSxzPWUuaGVpZ2h0LGY9ZS53aWR0aCx1PVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChpLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLG4sciwhMSksYz11Lmxlbmd0aCxsPW5ldyBGbG9hdDY0QXJyYXkoYyoyKTtsLnNldCh1KTtsZXQgcD1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoaS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxvLHIpO2wuc2V0KHAsYyksaS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1sO2xldCBkPWUubm9ydGhDYXAsaD1lLnNvdXRoQ2FwLF89NDtkJiYoXy09MSksaCYmKF8tPTEpO2xldCBnPShsLmxlbmd0aC8zK18pKjIsYj1MdC5jcmVhdGVUeXBlZEFycmF5KGwubGVuZ3RoLzMsZyk7Yz1sLmxlbmd0aC82O2xldCB3PTA7Zm9yKGxldCBFPTA7RTxjLTE7RSsrKWJbdysrXT1FLGJbdysrXT1FKzEsYlt3KytdPUUrYyxiW3crK109RStjKzE7Ylt3KytdPWMtMSxiW3crK109MCxiW3crK109YytjLTEsYlt3KytdPWMsYlt3KytdPTAsYlt3KytdPWM7bGV0IE87aWYoZClPPXMtMTtlbHNle2xldCBFPWYtMTtiW3crK109RSxiW3crK109RStjLE89ZitzLTJ9aWYoYlt3KytdPU8sYlt3KytdPU8rYywhaCl7bGV0IEU9ZitPLTE7Ylt3KytdPUUsYlt3XT1FK2N9cmV0dXJuIGkuaW5kaWNlcz1iLGl9ZnVuY3Rpb24gRmEodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5yZWN0YW5nbGUsbj10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSxvPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQscj10LnJvdGF0aW9uPz8wO2lmKCFtKGUpKXRocm93IG5ldyBEKCJyZWN0YW5nbGUgaXMgcmVxdWlyZWQuIik7aWYoTnQuX3ZhbGlkYXRlKGUpLGUubm9ydGg8ZS5zb3V0aCl0aHJvdyBuZXcgRCgib3B0aW9ucy5yZWN0YW5nbGUubm9ydGggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3B0aW9ucy5yZWN0YW5nbGUuc291dGgiKTtsZXQgaT10LmhlaWdodD8/MCxzPXQuZXh0cnVkZWRIZWlnaHQ/P2k7dGhpcy5fcmVjdGFuZ2xlPU50LmNsb25lKGUpLHRoaXMuX2dyYW51bGFyaXR5PW4sdGhpcy5fZWxsaXBzb2lkPW8sdGhpcy5fc3VyZmFjZUhlaWdodD1NYXRoLm1heChpLHMpLHRoaXMuX3JvdGF0aW9uPXIsdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4oaSxzKSx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUmVjdGFuZ2xlT3V0bGluZUdlb21ldHJ5In12YXIgVkIsekIsakIsSEIsbVIsaFIsdmEsS0IsVXksX1I9JCgoKT0+e3ZlKCk7RHQoKTtJZSgpO0RlKCk7eWUoKTtmdCgpO0h0KCk7JHQoKTtZZSgpOyRlKCk7YW4oKTtEbygpO1plKCk7S3QoKTtLcigpO3RuKCk7VG4oKTtNeSgpO1ZCPW5ldyBBdCx6Qj1uZXcgQXQsakI9bmV3IGEsSEI9bmV3IE50O0ZhLnBhY2tlZExlbmd0aD1OdC5wYWNrZWRMZW5ndGgrWS5wYWNrZWRMZW5ndGgrNTtGYS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighbShlKSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtyZXR1cm4gbj1uPz8wLE50LnBhY2sodC5fcmVjdGFuZ2xlLGUsbiksbis9TnQucGFja2VkTGVuZ3RoLFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxlW24rK109dC5fZ3JhbnVsYXJpdHksZVtuKytdPXQuX3N1cmZhY2VIZWlnaHQsZVtuKytdPXQuX3JvdGF0aW9uLGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07bVI9bmV3IE50LGhSPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksdmE9e3JlY3RhbmdsZTptUixlbGxpcHNvaWQ6aFIsZ3JhbnVsYXJpdHk6dm9pZCAwLGhlaWdodDp2b2lkIDAscm90YXRpb246dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtGYS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFtKHQpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9ZT8/MDtsZXQgbz1OdC51bnBhY2sodCxlLG1SKTtlKz1OdC5wYWNrZWRMZW5ndGg7bGV0IHI9WS51bnBhY2sodCxlLGhSKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgaT10W2UrK10scz10W2UrK10sZj10W2UrK10sdT10W2UrK10sYz10W2VdO3JldHVybiBtKG4pPyhuLl9yZWN0YW5nbGU9TnQuY2xvbmUobyxuLl9yZWN0YW5nbGUpLG4uX2VsbGlwc29pZD1ZLmNsb25lKHIsbi5fZWxsaXBzb2lkKSxuLl9zdXJmYWNlSGVpZ2h0PXMsbi5fcm90YXRpb249ZixuLl9leHRydWRlZEhlaWdodD11LG4uX29mZnNldEF0dHJpYnV0ZT1jPT09LTE/dm9pZCAwOmMsbik6KHZhLmdyYW51bGFyaXR5PWksdmEuaGVpZ2h0PXMsdmEucm90YXRpb249Zix2YS5leHRydWRlZEhlaWdodD11LHZhLm9mZnNldEF0dHJpYnV0ZT1jPT09LTE/dm9pZCAwOmMsbmV3IEZhKHZhKSl9O0tCPW5ldyBjdDtGYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9yZWN0YW5nbGUsbj10Ll9lbGxpcHNvaWQsbz1iby5jb21wdXRlT3B0aW9ucyhlLHQuX2dyYW51bGFyaXR5LHQuX3JvdGF0aW9uLDAsSEIsS0IpLHIsaTtpZihQLmVxdWFsc0Vwc2lsb24oZS5ub3J0aCxlLnNvdXRoLFAuRVBTSUxPTjEwKXx8UC5lcXVhbHNFcHNpbG9uKGUuZWFzdCxlLndlc3QsUC5FUFNJTE9OMTApKXJldHVybjtsZXQgcz10Ll9zdXJmYWNlSGVpZ2h0LGY9dC5fZXh0cnVkZWRIZWlnaHQsdT0hUC5lcXVhbHNFcHNpbG9uKHMsZiwwLFAuRVBTSUxPTjIpLGM7aWYodSl7aWYocj1xQih0LG8pLG0odC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGQ9ci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxoPW5ldyBVaW50OEFycmF5KGQpO3QuX29mZnNldEF0dHJpYnV0ZT09PWFlLlRPUD9oPWguZmlsbCgxLDAsZC8yKTooYz10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxoPWguZmlsbChjKSksci5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmh9KX1sZXQgbD1BdC5mcm9tUmVjdGFuZ2xlM0QoZSxuLHMsekIpLHA9QXQuZnJvbVJlY3RhbmdsZTNEKGUsbixmLFZCKTtpPUF0LnVuaW9uKGwscCl9ZWxzZXtpZihyPWRSKHQsbyksci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxzLG4sITEpLG0odC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGw9ci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGg7Yz10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MTtsZXQgcD1uZXcgVWludDhBcnJheShsLzMpLmZpbGwoYyk7ci5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnB9KX1pPUF0LmZyb21SZWN0YW5nbGUzRChlLG4scyl9cmV0dXJuIG5ldyBVdCh7YXR0cmlidXRlczpyLmF0dHJpYnV0ZXMsaW5kaWNlczpyLmluZGljZXMscHJpbWl0aXZlVHlwZTpCdC5MSU5FUyxib3VuZGluZ1NwaGVyZTppLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07VXk9RmF9KTt2YXIga3k9e307bGUoa3kse2RlZmF1bHQ6KCk9PlhCfSk7ZnVuY3Rpb24gV0IodCxlKXtyZXR1cm4gbShlKSYmKHQ9VXkudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksdC5fcmVjdGFuZ2xlPU50LmNsb25lKHQuX3JlY3RhbmdsZSksVXkuY3JlYXRlR2VvbWV0cnkodCl9dmFyIFhCLEd5PSQoKCk9PntmdCgpOyR0KCk7VG4oKTtfUigpO1hCPVdCfSk7ZnVuY3Rpb24gWUIodCxlLG4sbyxyLGkscyl7bGV0IGY9QW4ubnVtYmVyT2ZQb2ludHModCxlLHIpLHUsYz1uLnJlZCxsPW4uZ3JlZW4scD1uLmJsdWUsZD1uLmFscGhhLGg9by5yZWQsXz1vLmdyZWVuLGc9by5ibHVlLGI9by5hbHBoYTtpZihuZS5lcXVhbHMobixvKSl7Zm9yKHU9MDt1PGY7dSsrKWlbcysrXT1uZS5mbG9hdFRvQnl0ZShjKSxpW3MrK109bmUuZmxvYXRUb0J5dGUobCksaVtzKytdPW5lLmZsb2F0VG9CeXRlKHApLGlbcysrXT1uZS5mbG9hdFRvQnl0ZShkKTtyZXR1cm4gc31sZXQgdz0oaC1jKS9mLE89KF8tbCkvZixFPShnLXApL2YsVD0oYi1kKS9mLHg9cztmb3IodT0wO3U8Zjt1KyspaVt4KytdPW5lLmZsb2F0VG9CeXRlKGMrdSp3KSxpW3grK109bmUuZmxvYXRUb0J5dGUobCt1Kk8pLGlbeCsrXT1uZS5mbG9hdFRvQnl0ZShwK3UqRSksaVt4KytdPW5lLmZsb2F0VG9CeXRlKGQrdSpUKTtyZXR1cm4geH1mdW5jdGlvbiBpdSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvc2l0aW9ucyxuPXQuY29sb3JzLG89dC5jb2xvcnNQZXJWZXJ0ZXg/PyExO2lmKCFtKGUpfHxlLmxlbmd0aDwyKXRocm93IG5ldyBEKCJBdCBsZWFzdCB0d28gcG9zaXRpb25zIGFyZSByZXF1aXJlZC4iKTtpZihtKG4pJiYobyYmbi5sZW5ndGg8ZS5sZW5ndGh8fCFvJiZuLmxlbmd0aDxlLmxlbmd0aC0xKSl0aHJvdyBuZXcgRCgiY29sb3JzIGhhcyBhbiBpbnZhbGlkIGxlbmd0aC4iKTt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9jb2xvcnM9bix0aGlzLl9jb2xvcnNQZXJWZXJ0ZXg9byx0aGlzLl9hcmNUeXBlPXQuYXJjVHlwZT8/aGUuR0VPREVTSUMsdGhpcy5fZ3JhbnVsYXJpdHk9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUUsdGhpcy5fZWxsaXBzb2lkPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlU2ltcGxlUG9seWxpbmVHZW9tZXRyeSI7bGV0IHI9MStlLmxlbmd0aCphLnBhY2tlZExlbmd0aDtyKz1tKG4pPzErbi5sZW5ndGgqbmUucGFja2VkTGVuZ3RoOjEsdGhpcy5wYWNrZWRMZW5ndGg9citZLnBhY2tlZExlbmd0aCszfXZhciBVZCxrZCwkQixWeSx5Uj0kKCgpPT57dWMoKTt2ZSgpO0R0KCk7TWEoKTtEZSgpO3llKCk7ZnQoKTtIdCgpOyR0KCk7WWUoKTskZSgpO2FuKCk7WmUoKTtLdCgpO2dhKCk7dG4oKTtpdS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighbShlKSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPW4/PzA7bGV0IG8scj10Ll9wb3NpdGlvbnMsaT1yLmxlbmd0aDtmb3IoZVtuKytdPWksbz0wO288aTsrK28sbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKHJbb10sZSxuKTtsZXQgcz10Ll9jb2xvcnM7Zm9yKGk9bShzKT9zLmxlbmd0aDowLGVbbisrXT1pLG89MDtvPGk7KytvLG4rPW5lLnBhY2tlZExlbmd0aCluZS5wYWNrKHNbb10sZSxuKTtyZXR1cm4gWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9jb2xvcnNQZXJWZXJ0ZXg/MTowLGVbbisrXT10Ll9hcmNUeXBlLGVbbl09dC5fZ3JhbnVsYXJpdHksZX07aXUudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPWU/PzA7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcz1yPjA/bmV3IEFycmF5KHIpOnZvaWQgMDtmb3Iobz0wO288cjsrK28sZSs9bmUucGFja2VkTGVuZ3RoKXNbb109bmUudW5wYWNrKHQsZSk7bGV0IGY9WS51bnBhY2sodCxlKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgdT10W2UrK109PT0xLGM9dFtlKytdLGw9dFtlXTtyZXR1cm4gbShuKT8obi5fcG9zaXRpb25zPWksbi5fY29sb3JzPXMsbi5fZWxsaXBzb2lkPWYsbi5fY29sb3JzUGVyVmVydGV4PXUsbi5fYXJjVHlwZT1jLG4uX2dyYW51bGFyaXR5PWwsbik6bmV3IGl1KHtwb3NpdGlvbnM6aSxjb2xvcnM6cyxlbGxpcHNvaWQ6Zixjb2xvcnNQZXJWZXJ0ZXg6dSxhcmNUeXBlOmMsZ3JhbnVsYXJpdHk6bH0pfTtVZD1uZXcgQXJyYXkoMiksa2Q9bmV3IEFycmF5KDIpLCRCPXtwb3NpdGlvbnM6VWQsaGVpZ2h0OmtkLGVsbGlwc29pZDp2b2lkIDAsbWluRGlzdGFuY2U6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMH07aXUuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcG9zaXRpb25zLG49dC5fY29sb3JzLG89dC5fY29sb3JzUGVyVmVydGV4LHI9dC5fYXJjVHlwZSxpPXQuX2dyYW51bGFyaXR5LHM9dC5fZWxsaXBzb2lkLGY9UC5jaG9yZExlbmd0aChpLHMubWF4aW11bVJhZGl1cyksdT1tKG4pJiYhbyxjLGw9ZS5sZW5ndGgscCxkLGgsXyxnPTA7aWYocj09PWhlLkdFT0RFU0lDfHxyPT09aGUuUkhVTUIpe2xldCBULHgsTTtyPT09aGUuR0VPREVTSUM/KFQ9UC5jaG9yZExlbmd0aChpLHMubWF4aW11bVJhZGl1cykseD1Bbi5udW1iZXJPZlBvaW50cyxNPUFuLmdlbmVyYXRlQXJjKTooVD1pLHg9QW4ubnVtYmVyT2ZQb2ludHNSaHVtYkxpbmUsTT1Bbi5nZW5lcmF0ZVJodW1iQXJjKTtsZXQgTj1Bbi5leHRyYWN0SGVpZ2h0cyhlLHMpLEY9JEI7aWYocj09PWhlLkdFT0RFU0lDP0YubWluRGlzdGFuY2U9ZjpGLmdyYW51bGFyaXR5PWksRi5lbGxpcHNvaWQ9cyx1KXtsZXQgST0wO2ZvcihjPTA7YzxsLTE7YysrKUkrPXgoZVtjXSxlW2MrMV0sVCkrMTtwPW5ldyBGbG9hdDY0QXJyYXkoSSozKSxoPW5ldyBVaW50OEFycmF5KEkqNCksRi5wb3NpdGlvbnM9VWQsRi5oZWlnaHQ9a2Q7bGV0IHY9MDtmb3IoYz0wO2M8bC0xOysrYyl7VWRbMF09ZVtjXSxVZFsxXT1lW2MrMV0sa2RbMF09TltjXSxrZFsxXT1OW2MrMV07bGV0IEI9TShGKTtpZihtKG4pKXtsZXQgQT1CLmxlbmd0aC8zO189bltjXTtmb3IobGV0IFM9MDtTPEE7KytTKWhbdisrXT1uZS5mbG9hdFRvQnl0ZShfLnJlZCksaFt2KytdPW5lLmZsb2F0VG9CeXRlKF8uZ3JlZW4pLGhbdisrXT1uZS5mbG9hdFRvQnl0ZShfLmJsdWUpLGhbdisrXT1uZS5mbG9hdFRvQnl0ZShfLmFscGhhKX1wLnNldChCLGcpLGcrPUIubGVuZ3RofX1lbHNlIGlmKEYucG9zaXRpb25zPWUsRi5oZWlnaHQ9TixwPW5ldyBGbG9hdDY0QXJyYXkoTShGKSksbShuKSl7Zm9yKGg9bmV3IFVpbnQ4QXJyYXkocC5sZW5ndGgvMyo0KSxjPTA7YzxsLTE7KytjKXtsZXQgdj1lW2NdLEI9ZVtjKzFdLEE9bltjXSxTPW5bYysxXTtnPVlCKHYsQixBLFMsZixoLGcpfWxldCBJPW5bbC0xXTtoW2crK109bmUuZmxvYXRUb0J5dGUoSS5yZWQpLGhbZysrXT1uZS5mbG9hdFRvQnl0ZShJLmdyZWVuKSxoW2crK109bmUuZmxvYXRUb0J5dGUoSS5ibHVlKSxoW2crK109bmUuZmxvYXRUb0J5dGUoSS5hbHBoYSl9fWVsc2V7ZD11P2wqMi0yOmwscD1uZXcgRmxvYXQ2NEFycmF5KGQqMyksaD1tKG4pP25ldyBVaW50OEFycmF5KGQqNCk6dm9pZCAwO2xldCBUPTAseD0wO2ZvcihjPTA7YzxsOysrYyl7bGV0IE09ZVtjXTtpZih1JiZjPjAmJihhLnBhY2soTSxwLFQpLFQrPTMsXz1uW2MtMV0saFt4KytdPW5lLmZsb2F0VG9CeXRlKF8ucmVkKSxoW3grK109bmUuZmxvYXRUb0J5dGUoXy5ncmVlbiksaFt4KytdPW5lLmZsb2F0VG9CeXRlKF8uYmx1ZSksaFt4KytdPW5lLmZsb2F0VG9CeXRlKF8uYWxwaGEpKSx1JiZjPT09bC0xKWJyZWFrO2EucGFjayhNLHAsVCksVCs9MyxtKG4pJiYoXz1uW2NdLGhbeCsrXT1uZS5mbG9hdFRvQnl0ZShfLnJlZCksaFt4KytdPW5lLmZsb2F0VG9CeXRlKF8uZ3JlZW4pLGhbeCsrXT1uZS5mbG9hdFRvQnl0ZShfLmJsdWUpLGhbeCsrXT1uZS5mbG9hdFRvQnl0ZShfLmFscGhhKSl9fWxldCBiPW5ldyBpZTtiLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pLG0obikmJihiLmNvbG9yPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjQsdmFsdWVzOmgsbm9ybWFsaXplOiEwfSkpLGQ9cC5sZW5ndGgvMztsZXQgdz0oZC0xKSoyLE89THQuY3JlYXRlVHlwZWRBcnJheShkLHcpLEU9MDtmb3IoYz0wO2M8ZC0xOysrYylPW0UrK109YyxPW0UrK109YysxO3JldHVybiBuZXcgVXQoe2F0dHJpYnV0ZXM6YixpbmRpY2VzOk8scHJpbWl0aXZlVHlwZTpCdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpBdC5mcm9tUG9pbnRzKGUpfSl9O1Z5PWl1fSk7dmFyIHp5PXt9O2xlKHp5LHtkZWZhdWx0OigpPT5RQn0pO2Z1bmN0aW9uIFpCKHQsZSl7cmV0dXJuIG0oZSkmJih0PVZ5LnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLFZ5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBRQixqeT0kKCgpPT57ZnQoKTskdCgpO3lSKCk7UUI9WkJ9KTtmdW5jdGlvbiBMYSh0KXtsZXQgZT10LnJhZGl1cz8/MSxvPXtyYWRpaTpuZXcgYShlLGUsZSksc3RhY2tQYXJ0aXRpb25zOnQuc3RhY2tQYXJ0aXRpb25zLHNsaWNlUGFydGl0aW9uczp0LnNsaWNlUGFydGl0aW9ucyx2ZXJ0ZXhGb3JtYXQ6dC52ZXJ0ZXhGb3JtYXR9O3RoaXMuX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBjcihvKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVTcGhlcmVHZW9tZXRyeSJ9dmFyIEpCLENzLEh5LGdSPSQoKCk9PntEdCgpO1d0KCk7ZnQoKTtUZCgpO3hvKCk7TGEucGFja2VkTGVuZ3RoPWNyLnBhY2tlZExlbmd0aDtMYS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCksY3IucGFjayh0Ll9lbGxpcHNvaWRHZW9tZXRyeSxlLG4pfTtKQj1uZXcgY3IsQ3M9e3JhZGl1czp2b2lkIDAscmFkaWk6bmV3IGEsdmVydGV4Rm9ybWF0Om5ldyBwdCxzdGFja1BhcnRpdGlvbnM6dm9pZCAwLHNsaWNlUGFydGl0aW9uczp2b2lkIDB9O0xhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7bGV0IG89Y3IudW5wYWNrKHQsZSxKQik7cmV0dXJuIENzLnZlcnRleEZvcm1hdD1wdC5jbG9uZShvLl92ZXJ0ZXhGb3JtYXQsQ3MudmVydGV4Rm9ybWF0KSxDcy5zdGFja1BhcnRpdGlvbnM9by5fc3RhY2tQYXJ0aXRpb25zLENzLnNsaWNlUGFydGl0aW9ucz1vLl9zbGljZVBhcnRpdGlvbnMsbShuKT8oYS5jbG9uZShvLl9yYWRpaSxDcy5yYWRpaSksbi5fZWxsaXBzb2lkR2VvbWV0cnk9bmV3IGNyKENzKSxuKTooQ3MucmFkaXVzPW8uX3JhZGlpLngsbmV3IExhKENzKSl9O0xhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe3JldHVybiBjci5jcmVhdGVHZW9tZXRyeSh0Ll9lbGxpcHNvaWRHZW9tZXRyeSl9O0h5PUxhfSk7dmFyIHF5PXt9O2xlKHF5LHtkZWZhdWx0OigpPT5lNH0pO2Z1bmN0aW9uIHQ0KHQsZSl7cmV0dXJuIG0oZSkmJih0PUh5LnVucGFjayh0LGUpKSxIeS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgZTQsS3k9JCgoKT0+e2Z0KCk7Z1IoKTtlND10NH0pO2Z1bmN0aW9uIERhKHQpe2xldCBlPXQucmFkaXVzPz8xLG89e3JhZGlpOm5ldyBhKGUsZSxlKSxzdGFja1BhcnRpdGlvbnM6dC5zdGFja1BhcnRpdGlvbnMsc2xpY2VQYXJ0aXRpb25zOnQuc2xpY2VQYXJ0aXRpb25zLHN1YmRpdmlzaW9uczp0LnN1YmRpdmlzaW9uc307dGhpcy5fZWxsaXBzb2lkR2VvbWV0cnk9bmV3IFhyKG8pLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVNwaGVyZU91dGxpbmVHZW9tZXRyeSJ9dmFyIG40LFRjLFd5LEFSPSQoKCk9PntEdCgpO1d0KCk7ZnQoKTtQXygpO0RhLnBhY2tlZExlbmd0aD1Yci5wYWNrZWRMZW5ndGg7RGEucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLFhyLnBhY2sodC5fZWxsaXBzb2lkR2VvbWV0cnksZSxuKX07bjQ9bmV3IFhyLFRjPXtyYWRpdXM6dm9pZCAwLHJhZGlpOm5ldyBhLHN0YWNrUGFydGl0aW9uczp2b2lkIDAsc2xpY2VQYXJ0aXRpb25zOnZvaWQgMCxzdWJkaXZpc2lvbnM6dm9pZCAwfTtEYS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2xldCBvPVhyLnVucGFjayh0LGUsbjQpO3JldHVybiBUYy5zdGFja1BhcnRpdGlvbnM9by5fc3RhY2tQYXJ0aXRpb25zLFRjLnNsaWNlUGFydGl0aW9ucz1vLl9zbGljZVBhcnRpdGlvbnMsVGMuc3ViZGl2aXNpb25zPW8uX3N1YmRpdmlzaW9ucyxtKG4pPyhhLmNsb25lKG8uX3JhZGlpLFRjLnJhZGlpKSxuLl9lbGxpcHNvaWRHZW9tZXRyeT1uZXcgWHIoVGMpLG4pOihUYy5yYWRpdXM9by5fcmFkaWkueCxuZXcgRGEoVGMpKX07RGEuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7cmV0dXJuIFhyLmNyZWF0ZUdlb21ldHJ5KHQuX2VsbGlwc29pZEdlb21ldHJ5KX07V3k9RGF9KTt2YXIgWHk9e307bGUoWHkse2RlZmF1bHQ6KCk9PnI0fSk7ZnVuY3Rpb24gbzQodCxlKXtyZXR1cm4gbShlKSYmKHQ9V3kudW5wYWNrKHQsZSkpLFd5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciByNCxZeT0kKCgpPT57ZnQoKTtBUigpO3I0PW80fSk7dmFyICR5PXt9O2xlKCR5LHtkZWZhdWx0OigpPT5FNH0pO2Z1bmN0aW9uIGE0KHQsZSxuLG8scixpLHMpe2xldCBmPXQubGVuZ3RoLHU9bmV3IEZsb2F0NjRBcnJheShmKjMpO2ZvcihsZXQgYz0wO2M8ZjsrK2Mpe2xldCBsPXRbY10scD1lW2NdLGQ9bltjXSxoPVAubGVycChvLndlc3Qsby5lYXN0LGwvc3UpLF89UC5sZXJwKG8uc291dGgsby5ub3J0aCxwL3N1KSxnPVAubGVycChyLGksZC9zdSksYj1jdC5mcm9tUmFkaWFucyhoLF8sZyxzNCksdz1zLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGIsYzQpO2EucGFjayh3LHUsYyozKX1yZXR1cm4gdX1mdW5jdGlvbiBmNCh0KXtsZXQgZT10Lmxlbmd0aCxuPW5ldyBVaW50MzJBcnJheShlKzEpLG89MDtmb3IobGV0IHI9MDtyPGU7KytyKW5bcl09byxvKz10W3JdO3JldHVybiBuW2VdPW8sbn1mdW5jdGlvbiBwNCh0LGUsbixvKXtsZXQgcj1vLmxlbmd0aCxpPXQubGVuZ3RoLHM9bmV3IFVpbnQ4QXJyYXkoaSksZj11NCx1PWw0LGM9MDtmb3IobGV0IHA9MDtwPHI7cCsrKXtsZXQgZD1vW3BdLGg9ZDtmb3IobGV0IF89MTtfPGQ7XysrKXtsZXQgZz1jK18sYj1nLTE7dS5sb25naXR1ZGU9dFtnXSx1LmxhdGl0dWRlPWVbZ10sZi5sb25naXR1ZGU9dFtiXSxmLmxhdGl0dWRlPWVbYl0sY3QuZXF1YWxzKHUsZikmJihoLS0sc1tiXT0xKX1vW3BdPWgsYys9ZH1sZXQgbD0wO2ZvcihsZXQgcD0wO3A8aTtwKyspc1twXSE9PTEmJih0W2xdPXRbcF0sZVtsXT1lW3BdLG5bbF09bltwXSxsKyspfWZ1bmN0aW9uIEVSKHQpe2xldCBlPXQqOCxuPWUqMyxvPWUqNDt0aGlzLnN0YXJ0RWxsaXBzb2lkTm9ybWFscz1uZXcgRmxvYXQzMkFycmF5KG4pLHRoaXMuZW5kRWxsaXBzb2lkTm9ybWFscz1uZXcgRmxvYXQzMkFycmF5KG4pLHRoaXMuc3RhcnRQb3NpdGlvbkFuZEhlaWdodHM9bmV3IEZsb2F0MzJBcnJheShvKSx0aGlzLnN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkcz1uZXcgRmxvYXQzMkFycmF5KG8pLHRoaXMuZW5kUG9zaXRpb25BbmRIZWlnaHRzPW5ldyBGbG9hdDMyQXJyYXkobyksdGhpcy5lbmRGYWNlTm9ybWFsQW5kSGFsZldpZHRocz1uZXcgRmxvYXQzMkFycmF5KG8pLHRoaXMudmVydGV4QmF0Y2hJZHM9bmV3IFVpbnQxNkFycmF5KGUpLHRoaXMuaW5kaWNlcz1MdC5jcmVhdGVUeXBlZEFycmF5KGUsMzYqdCksdGhpcy52ZWMzT2Zmc2V0PTAsdGhpcy52ZWM0T2Zmc2V0PTAsdGhpcy5iYXRjaElkT2Zmc2V0PTAsdGhpcy5pbmRleE9mZnNldD0wLHRoaXMudm9sdW1lU3RhcnRJbmRleD0wfWZ1bmN0aW9uIHdSKHQsZSxuLG8scil7bGV0IGk9YS5zdWJ0cmFjdChuLGUsZDQpLHM9YS5zdWJ0cmFjdChlLHQsYlIpO3JldHVybiBhLm5vcm1hbGl6ZShpLGkpLGEubm9ybWFsaXplKHMscyksYS5kb3QoaSxzKTxpNCYmKHM9YS5tdWx0aXBseUJ5U2NhbGFyKHMsLTEsYlIpKSxhLmFkZChpLHMsciksYS5lcXVhbHMocixhLlpFUk8pJiYocj1hLnN1YnRyYWN0KHQsZSkpLGEuY3Jvc3MocixvLHIpLGEuY3Jvc3MobyxyLHIpLGEubm9ybWFsaXplKHIscikscn1mdW5jdGlvbiBPNCh0LGUpe2xldCBuPW5ldyBVaW50MTZBcnJheSh0LnBvc2l0aW9ucyksbz1uZXcgVWludDE2QXJyYXkodC53aWR0aHMpLHI9bmV3IFVpbnQzMkFycmF5KHQuY291bnRzKSxpPW5ldyBVaW50MTZBcnJheSh0LmJhdGNoSWRzKSxzPWc0LGY9QTQsdT1iNCxjPW5ldyBGbG9hdDY0QXJyYXkodC5wYWNrZWRCdWZmZXIpLGw9MCxwPWNbbCsrXSxkPWNbbCsrXTtOdC51bnBhY2soYyxsLHMpLGwrPU50LnBhY2tlZExlbmd0aCxZLnVucGFjayhjLGwsZiksbCs9WS5wYWNrZWRMZW5ndGgsYS51bnBhY2soYyxsLHUpO2xldCBoLF89bi5sZW5ndGgvMyxnPW4uc3ViYXJyYXkoMCxfKSxiPW4uc3ViYXJyYXkoXywyKl8pLHc9bi5zdWJhcnJheSgyKl8sMypfKTtubi56aWdaYWdEZWx0YURlY29kZShnLGIsdykscDQoZyxiLHcscik7bGV0IE89ci5sZW5ndGgsRT0wO2ZvcihoPTA7aDxPO2grKyl7bGV0IEI9cltoXTtFKz1CLTF9bGV0IFQ9bmV3IEVSKEUpLHg9YTQoZyxiLHcscyxwLGQsZix1KTtfPWcubGVuZ3RoO2xldCBNPW5ldyBGbG9hdDMyQXJyYXkoXyozKTtmb3IoaD0wO2g8XzsrK2gpTVtoKjNdPXhbaCozXS11LngsTVtoKjMrMV09eFtoKjMrMV0tdS55LE1baCozKzJdPXhbaCozKzJdLXUuejtsZXQgTj0wLEY9MDtmb3IoaD0wO2g8TztoKyspe2xldCBCPXJbaF0tMSxBPW9baF0qLjUsUz1pW2hdLEM9Tjtmb3IobGV0IEw9MDtMPEI7TCsrKXtsZXQgej1hLnVucGFjayhNLE4sdzQpLGo9YS51bnBhY2soTSxOKzMsVDQpLGs9d1tGXSxxPXdbRisxXTtrPVAubGVycChwLGQsay9zdSkscT1QLmxlcnAocCxkLHEvc3UpLEYrKztsZXQgVz1HZCxSPVZkO2lmKEw9PT0wKXtsZXQgbnQ9QytCKjMsYXQ9YS51bnBhY2soTSxudCxHZCk7aWYoYS5lcXVhbHMoYXQseikpYS51bnBhY2soTSxudC0zLFcpO2Vsc2V7bGV0IGx0PWEuc3VidHJhY3QoeixqLEdkKTtXPWEuYWRkKGx0LHosR2QpfX1lbHNlIGEudW5wYWNrKE0sTi0zLFcpO2lmKEw9PT1CLTEpe2xldCBudD1hLnVucGFjayhNLEMsVmQpO2lmKGEuZXF1YWxzKG50LGopKWEudW5wYWNrKE0sQyszLFIpO2Vsc2V7bGV0IGF0PWEuc3VidHJhY3Qoaix6LFZkKTtSPWEuYWRkKGF0LGosVmQpfX1lbHNlIGEudW5wYWNrKE0sTis2LFIpO1QuYWRkVm9sdW1lKFcseixqLFIsayxxLEEsUyx1LGYpLE4rPTN9Tis9MyxGKyt9bGV0IEk9VC5pbmRpY2VzO2UucHVzaChULnN0YXJ0RWxsaXBzb2lkTm9ybWFscy5idWZmZXIpLGUucHVzaChULmVuZEVsbGlwc29pZE5vcm1hbHMuYnVmZmVyKSxlLnB1c2goVC5zdGFydFBvc2l0aW9uQW5kSGVpZ2h0cy5idWZmZXIpLGUucHVzaChULnN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkcy5idWZmZXIpLGUucHVzaChULmVuZFBvc2l0aW9uQW5kSGVpZ2h0cy5idWZmZXIpLGUucHVzaChULmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzLmJ1ZmZlciksZS5wdXNoKFQudmVydGV4QmF0Y2hJZHMuYnVmZmVyKSxlLnB1c2goSS5idWZmZXIpO2xldCB2PXtpbmRleERhdGF0eXBlOkkuQllURVNfUEVSX0VMRU1FTlQ9PT0yP0x0LlVOU0lHTkVEX1NIT1JUOkx0LlVOU0lHTkVEX0lOVCxzdGFydEVsbGlwc29pZE5vcm1hbHM6VC5zdGFydEVsbGlwc29pZE5vcm1hbHMuYnVmZmVyLGVuZEVsbGlwc29pZE5vcm1hbHM6VC5lbmRFbGxpcHNvaWROb3JtYWxzLmJ1ZmZlcixzdGFydFBvc2l0aW9uQW5kSGVpZ2h0czpULnN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlcixzdGFydEZhY2VOb3JtYWxBbmRWZXJ0ZXhDb3JuZXJJZHM6VC5zdGFydEZhY2VOb3JtYWxBbmRWZXJ0ZXhDb3JuZXJJZHMuYnVmZmVyLGVuZFBvc2l0aW9uQW5kSGVpZ2h0czpULmVuZFBvc2l0aW9uQW5kSGVpZ2h0cy5idWZmZXIsZW5kRmFjZU5vcm1hbEFuZEhhbGZXaWR0aHM6VC5lbmRGYWNlTm9ybWFsQW5kSGFsZldpZHRocy5idWZmZXIsdmVydGV4QmF0Y2hJZHM6VC52ZXJ0ZXhCYXRjaElkcy5idWZmZXIsaW5kaWNlczpJLmJ1ZmZlcn07aWYodC5rZWVwRGVjb2RlZFBvc2l0aW9ucyl7bGV0IEI9ZjQocik7ZS5wdXNoKHguYnVmZmVyLEIuYnVmZmVyKSx2PXlyKHYse2RlY29kZWRQb3NpdGlvbnM6eC5idWZmZXIsZGVjb2RlZFBvc2l0aW9uT2Zmc2V0czpCLmJ1ZmZlcn0pfXJldHVybiB2fXZhciBzdSxpNCxzNCxjNCx1NCxsNCxiUixkNCxSUixUUixPUixtNCxoNCxfNCx5NCxnNCxBNCxiNCxHZCx3NCxUNCxWZCxFNCxaeT0kKCgpPT57ZnMoKTtEdCgpO0llKCk7Y3AoKTskdCgpO1plKCk7S3QoKTtUbigpO1puKCk7c3U9MzI3NjcsaTQ9TWF0aC5jb3MoUC50b1JhZGlhbnMoMTUwKSksczQ9bmV3IGN0LGM0PW5ldyBhO3U0PW5ldyBjdCxsND1uZXcgY3Q7YlI9bmV3IGEsZDQ9bmV3IGE7UlI9WzAsMiw2LDAsNiw0LDAsMSwzLDAsMywyLDAsNCw1LDAsNSwxLDUsMywxLDUsNywzLDcsNSw0LDcsNCw2LDcsNiwyLDcsMiwzXSxUUj1SUi5sZW5ndGgsT1I9bmV3IGEsbTQ9bmV3IGEsaDQ9bmV3IGEsXzQ9bmV3IGEseTQ9bmV3IGE7RVIucHJvdG90eXBlLmFkZFZvbHVtZT1mdW5jdGlvbih0LGUsbixvLHIsaSxzLGYsdSxjKXtsZXQgbD1hLmFkZChlLHUsT1IpLHA9Yy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobCxtNCk7bD1hLmFkZChuLHUsT1IpO2xldCBkPWMuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGwsXzQpLGg9d1IodCxlLG4scCxoNCksXz13UihvLG4sZSxkLHk0KSxnPXRoaXMuc3RhcnRFbGxpcHNvaWROb3JtYWxzLGI9dGhpcy5lbmRFbGxpcHNvaWROb3JtYWxzLHc9dGhpcy5zdGFydFBvc2l0aW9uQW5kSGVpZ2h0cyxPPXRoaXMuc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzLEU9dGhpcy5lbmRQb3NpdGlvbkFuZEhlaWdodHMsVD10aGlzLmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzLHg9dGhpcy52ZXJ0ZXhCYXRjaElkcyxNPXRoaXMuYmF0Y2hJZE9mZnNldCxOPXRoaXMudmVjM09mZnNldCxGPXRoaXMudmVjNE9mZnNldCxJO2ZvcihJPTA7STw4O0krKylhLnBhY2socCxnLE4pLGEucGFjayhkLGIsTiksYS5wYWNrKGUsdyxGKSx3W0YrM109cixhLnBhY2sobixFLEYpLEVbRiszXT1pLGEucGFjayhoLE8sRiksT1tGKzNdPUksYS5wYWNrKF8sVCxGKSxUW0YrM109cyx4W00rK109ZixOKz0zLEYrPTQ7dGhpcy5iYXRjaElkT2Zmc2V0PU0sdGhpcy52ZWMzT2Zmc2V0PU4sdGhpcy52ZWM0T2Zmc2V0PUY7bGV0IHY9dGhpcy5pbmRpY2VzLEI9dGhpcy52b2x1bWVTdGFydEluZGV4LEE9dGhpcy5pbmRleE9mZnNldDtmb3IoST0wO0k8VFI7SSsrKXZbQStJXT1SUltJXStCO3RoaXMudm9sdW1lU3RhcnRJbmRleCs9OCx0aGlzLmluZGV4T2Zmc2V0Kz1UUn07ZzQ9bmV3IE50LEE0PW5ldyBZLGI0PW5ldyBhLEdkPW5ldyBhLHc0PW5ldyBhLFQ0PW5ldyBhLFZkPW5ldyBhO0U0PVVlKE80KX0pO2Z1bmN0aW9uIFI0KHQpe3RoaXMub2Zmc2V0PXQub2Zmc2V0LHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLmNvbG9yPXQuY29sb3IsdGhpcy5iYXRjaElkcz10LmJhdGNoSWRzfXZhciBTUix4Uj0kKCgpPT57U1I9UjR9KTt2YXIgUXk9e307bGUoUXkse2RlZmF1bHQ6KCk9Pms0fSk7ZnVuY3Rpb24gTTQodCxlKXtsZXQgbj1lKlM0LG89YS51bnBhY2sodCxuLGpkKTtuKz1hLnBhY2tlZExlbmd0aDtsZXQgcj1zdC51bnBhY2sodCxuLENyLm1vZGVsTWF0cml4KTtzdC5tdWx0aXBseUJ5U2NhbGUocixvLHIpO2xldCBpPUNyLmJvdW5kaW5nVm9sdW1lO3JldHVybiBhLmNsb25lKGEuWkVSTyxpLmNlbnRlciksaS5yYWRpdXM9TWF0aC5zcXJ0KDMpLENyfWZ1bmN0aW9uIE40KHQsZSl7bGV0IG49ZSp4NCxvPXRbbisrXSxyPXRbbisrXSxpPWEuZnJvbUVsZW1lbnRzKG8sbyxyLGpkKSxzPXN0LnVucGFjayh0LG4sQ3IubW9kZWxNYXRyaXgpO3N0Lm11bHRpcGx5QnlTY2FsZShzLGkscyk7bGV0IGY9Q3IuYm91bmRpbmdWb2x1bWU7cmV0dXJuIGEuY2xvbmUoYS5aRVJPLGYuY2VudGVyKSxmLnJhZGl1cz1NYXRoLnNxcnQoMiksQ3J9ZnVuY3Rpb24gSTQodCxlKXtsZXQgbj1lKkM0LG89YS51bnBhY2sodCxuLGpkKTtuKz1hLnBhY2tlZExlbmd0aDtsZXQgcj1zdC51bnBhY2sodCxuLENyLm1vZGVsTWF0cml4KTtzdC5tdWx0aXBseUJ5U2NhbGUocixvLHIpO2xldCBpPUNyLmJvdW5kaW5nVm9sdW1lO3JldHVybiBhLmNsb25lKGEuWkVSTyxpLmNlbnRlciksaS5yYWRpdXM9MSxDcn1mdW5jdGlvbiB2NCh0LGUpe2xldCBuPWUqUDQsbz10W24rK10scj1hLnVucGFjayh0LG4samQpLGk9c3QuZnJvbVRyYW5zbGF0aW9uKHIsQ3IubW9kZWxNYXRyaXgpO3N0Lm11bHRpcGx5QnlVbmlmb3JtU2NhbGUoaSxvLGkpO2xldCBzPUNyLmJvdW5kaW5nVm9sdW1lO3JldHVybiBhLmNsb25lKGEuWkVSTyxzLmNlbnRlcikscy5yYWRpdXM9MSxDcn1mdW5jdGlvbiB6ZCh0LGUsbixvLHIpe2lmKCFtKGUpKXJldHVybjtsZXQgaT1uLmxlbmd0aCxzPW8uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsZj1vLmluZGljZXMsdT10LnBvc2l0aW9ucyxjPXQudmVydGV4QmF0Y2hJZHMsbD10LmluZGljZXMscD10LmJhdGNoSWRzLGQ9dC5iYXRjaFRhYmxlQ29sb3JzLGg9dC5iYXRjaGVkSW5kaWNlcyxfPXQuaW5kZXhPZmZzZXRzLGc9dC5pbmRleENvdW50cyxiPXQuYm91bmRpbmdWb2x1bWVzLHc9dC5tb2RlbE1hdHJpeCxPPXQuY2VudGVyLEU9dC5wb3NpdGlvbk9mZnNldCxUPXQuYmF0Y2hJZEluZGV4LHg9dC5pbmRleE9mZnNldCxNPXQuYmF0Y2hlZEluZGljZXNPZmZzZXQ7Zm9yKGxldCBOPTA7TjxpOysrTil7bGV0IEY9cihlLE4pLEk9Ri5tb2RlbE1hdHJpeDtzdC5tdWx0aXBseSh3LEksSSk7bGV0IHY9bltOXSxCPXMubGVuZ3RoO2ZvcihsZXQgQz0wO0M8QjtDKz0zKXtsZXQgTD1hLnVucGFjayhzLEMsRjQpO3N0Lm11bHRpcGx5QnlQb2ludChJLEwsTCksYS5zdWJ0cmFjdChMLE8sTCksYS5wYWNrKEwsdSxFKjMrQyksY1tUKytdPXZ9bGV0IEE9Zi5sZW5ndGg7Zm9yKGxldCBDPTA7QzxBOysrQylsW3grQ109ZltDXStFO2xldCBTPU4rTTtoW1NdPW5ldyBTUih7b2Zmc2V0OngsY291bnQ6QSxjb2xvcjpuZS5mcm9tUmdiYShkW3ZdKSxiYXRjaElkczpbdl19KSxwW1NdPXYsX1tTXT14LGdbU109QSxiW1NdPUF0LnRyYW5zZm9ybShGLmJvdW5kaW5nVm9sdW1lLEkpLEUrPUIvMyx4Kz1BfXQucG9zaXRpb25PZmZzZXQ9RSx0LmJhdGNoSWRJbmRleD1ULHQuaW5kZXhPZmZzZXQ9eCx0LmJhdGNoZWRJbmRpY2VzT2Zmc2V0Kz1pfWZ1bmN0aW9uIEw0KHQpe2xldCBlPW5ldyBGbG9hdDY0QXJyYXkodCksbj0wO2EudW5wYWNrKGUsbixDUiksbis9YS5wYWNrZWRMZW5ndGgsc3QudW5wYWNrKGUsbixQUil9ZnVuY3Rpb24gRDQodCl7bGV0IGU9dC5sZW5ndGgsbj0wO2ZvcihsZXQgbz0wO288ZTsrK28pbis9bmUucGFja2VkTGVuZ3RoKzMrdFtvXS5iYXRjaElkcy5sZW5ndGg7cmV0dXJuIG59ZnVuY3Rpb24gQjQodCxlLG4pe2xldCBvPW4ubGVuZ3RoLHI9MitvKkF0LnBhY2tlZExlbmd0aCsxK0Q0KGUpLGk9bmV3IEZsb2F0NjRBcnJheShyKSxzPTA7aVtzKytdPXQsaVtzKytdPW87Zm9yKGxldCB1PTA7dTxvOysrdSlBdC5wYWNrKG5bdV0saSxzKSxzKz1BdC5wYWNrZWRMZW5ndGg7bGV0IGY9ZS5sZW5ndGg7aVtzKytdPWY7Zm9yKGxldCB1PTA7dTxmOysrdSl7bGV0IGM9ZVt1XTtuZS5wYWNrKGMuY29sb3IsaSxzKSxzKz1uZS5wYWNrZWRMZW5ndGgsaVtzKytdPWMub2Zmc2V0LGlbcysrXT1jLmNvdW50O2xldCBsPWMuYmF0Y2hJZHMscD1sLmxlbmd0aDtpW3MrK109cDtmb3IobGV0IGQ9MDtkPHA7KytkKWlbcysrXT1sW2RdfXJldHVybiBpfWZ1bmN0aW9uIFU0KHQsZSl7bGV0IG49bSh0LmJveGVzKT9uZXcgRmxvYXQzMkFycmF5KHQuYm94ZXMpOnZvaWQgMCxvPW0odC5ib3hCYXRjaElkcyk/bmV3IFVpbnQxNkFycmF5KHQuYm94QmF0Y2hJZHMpOnZvaWQgMCxyPW0odC5jeWxpbmRlcnMpP25ldyBGbG9hdDMyQXJyYXkodC5jeWxpbmRlcnMpOnZvaWQgMCxpPW0odC5jeWxpbmRlckJhdGNoSWRzKT9uZXcgVWludDE2QXJyYXkodC5jeWxpbmRlckJhdGNoSWRzKTp2b2lkIDAscz1tKHQuZWxsaXBzb2lkcyk/bmV3IEZsb2F0MzJBcnJheSh0LmVsbGlwc29pZHMpOnZvaWQgMCxmPW0odC5lbGxpcHNvaWRCYXRjaElkcyk/bmV3IFVpbnQxNkFycmF5KHQuZWxsaXBzb2lkQmF0Y2hJZHMpOnZvaWQgMCx1PW0odC5zcGhlcmVzKT9uZXcgRmxvYXQzMkFycmF5KHQuc3BoZXJlcyk6dm9pZCAwLGM9bSh0LnNwaGVyZUJhdGNoSWRzKT9uZXcgVWludDE2QXJyYXkodC5zcGhlcmVCYXRjaElkcyk6dm9pZCAwLGw9bShuKT9vLmxlbmd0aDowLHA9bShyKT9pLmxlbmd0aDowLGQ9bShzKT9mLmxlbmd0aDowLGg9bSh1KT9jLmxlbmd0aDowLF89eGYuZ2V0VW5pdEJveCgpLGc9cWYuZ2V0VW5pdEN5bGluZGVyKCksYj1jci5nZXRVbml0RWxsaXBzb2lkKCksdz1fLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLE89Zy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxFPWIuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsVD13Lmxlbmd0aCpsO1QrPU8ubGVuZ3RoKnAsVCs9RS5sZW5ndGgqKGQraCk7bGV0IHg9Xy5pbmRpY2VzLE09Zy5pbmRpY2VzLE49Yi5pbmRpY2VzLEY9eC5sZW5ndGgqbDtGKz1NLmxlbmd0aCpwLEYrPU4ubGVuZ3RoKihkK2gpO2xldCBJPW5ldyBGbG9hdDMyQXJyYXkoVCksdj1uZXcgVWludDE2QXJyYXkoVC8zKSxCPUx0LmNyZWF0ZVR5cGVkQXJyYXkoVC8zLEYpLEE9bCtwK2QraCxTPW5ldyBVaW50MTZBcnJheShBKSxDPW5ldyBBcnJheShBKSxMPW5ldyBVaW50MzJBcnJheShBKSx6PW5ldyBVaW50MzJBcnJheShBKSxqPW5ldyBBcnJheShBKTtMNCh0LnBhY2tlZEJ1ZmZlcik7bGV0IGs9e2JhdGNoVGFibGVDb2xvcnM6bmV3IFVpbnQzMkFycmF5KHQuYmF0Y2hUYWJsZUNvbG9ycykscG9zaXRpb25zOkksdmVydGV4QmF0Y2hJZHM6dixpbmRpY2VzOkIsYmF0Y2hJZHM6UyxiYXRjaGVkSW5kaWNlczpDLGluZGV4T2Zmc2V0czpMLGluZGV4Q291bnRzOnosYm91bmRpbmdWb2x1bWVzOmoscG9zaXRpb25PZmZzZXQ6MCxiYXRjaElkSW5kZXg6MCxpbmRleE9mZnNldDowLGJhdGNoZWRJbmRpY2VzT2Zmc2V0OjAsbW9kZWxNYXRyaXg6UFIsY2VudGVyOkNSfTt6ZChrLG4sbyxfLE00KSx6ZChrLHIsaSxnLE40KSx6ZChrLHMsZixiLEk0KSx6ZChrLHUsYyxiLHY0KTtsZXQgcT1CNChCLkJZVEVTX1BFUl9FTEVNRU5ULEMsaik7cmV0dXJuIGUucHVzaChJLmJ1ZmZlcix2LmJ1ZmZlcixCLmJ1ZmZlciksZS5wdXNoKFMuYnVmZmVyLEwuYnVmZmVyLHouYnVmZmVyKSxlLnB1c2gocS5idWZmZXIpLHtwb3NpdGlvbnM6SS5idWZmZXIsdmVydGV4QmF0Y2hJZHM6di5idWZmZXIsaW5kaWNlczpCLmJ1ZmZlcixpbmRleE9mZnNldHM6TC5idWZmZXIsaW5kZXhDb3VudHM6ei5idWZmZXIsYmF0Y2hJZHM6Uy5idWZmZXIscGFja2VkQnVmZmVyOnEuYnVmZmVyfX12YXIgamQsUzQseDQsQzQsUDQsQ3IsRjQsQ1IsUFIsazQsSnk9JCgoKT0+e3ZlKCk7bDAoKTtEdCgpO01hKCk7aF8oKTtmdCgpO1RkKCk7WmUoKTtrbigpO3hSKCk7Wm4oKTtqZD1uZXcgYSxTND1zdC5wYWNrZWRMZW5ndGgrYS5wYWNrZWRMZW5ndGgseDQ9c3QucGFja2VkTGVuZ3RoKzIsQzQ9c3QucGFja2VkTGVuZ3RoK2EucGFja2VkTGVuZ3RoLFA0PWEucGFja2VkTGVuZ3RoKzEsQ3I9e21vZGVsTWF0cml4Om5ldyBzdCxib3VuZGluZ1ZvbHVtZTpuZXcgQXR9O0Y0PW5ldyBhO0NSPW5ldyBhLFBSPW5ldyBzdDtrND1VZShVNCl9KTt2YXIgZWc9e307bGUoZWcse2RlZmF1bHQ6KCk9Pkg0fSk7ZnVuY3Rpb24gejQodCl7dD1uZXcgRmxvYXQ2NEFycmF5KHQpO2xldCBlPTA7SGQubWluPXRbZSsrXSxIZC5tYXg9dFtlKytdLE50LnVucGFjayh0LGUsTVIpLGUrPU50LnBhY2tlZExlbmd0aCxZLnVucGFjayh0LGUsTlIpfWZ1bmN0aW9uIGo0KHQsZSl7bGV0IG49bmV3IFVpbnQxNkFycmF5KHQucG9zaXRpb25zKTt6NCh0LnBhY2tlZEJ1ZmZlcik7bGV0IG89TVIscj1OUixpPUhkLm1pbixzPUhkLm1heCxmPW4ubGVuZ3RoLzMsdT1uLnN1YmFycmF5KDAsZiksYz1uLnN1YmFycmF5KGYsMipmKSxsPW4uc3ViYXJyYXkoMipmLDMqZik7bm4uemlnWmFnRGVsdGFEZWNvZGUodSxjLGwpO2xldCBwPW5ldyBGbG9hdDY0QXJyYXkobi5sZW5ndGgpO2ZvcihsZXQgZD0wO2Q8ZjsrK2Qpe2xldCBoPXVbZF0sXz1jW2RdLGc9bFtkXSxiPVAubGVycChvLndlc3Qsby5lYXN0LGgvdGcpLHc9UC5sZXJwKG8uc291dGgsby5ub3J0aCxfL3RnKSxPPVAubGVycChpLHMsZy90ZyksRT1jdC5mcm9tUmFkaWFucyhiLHcsTyxHNCksVD1yLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEUsVjQpO2EucGFjayhULHAsZCozKX1yZXR1cm4gZS5wdXNoKHAuYnVmZmVyKSx7cG9zaXRpb25zOnAuYnVmZmVyfX12YXIgdGcsRzQsVjQsTVIsTlIsSGQsSDQsbmc9JCgoKT0+e2ZzKCk7RHQoKTtJZSgpOyR0KCk7S3QoKTtUbigpO1puKCk7dGc9MzI3NjcsRzQ9bmV3IGN0LFY0PW5ldyBhLE1SPW5ldyBOdCxOUj1uZXcgWSxIZD17bWluOnZvaWQgMCxtYXg6dm9pZCAwfTtIND1VZShqNCl9KTt2YXIgb2c9e307bGUob2cse2RlZmF1bHQ6KCk9PnRVfSk7ZnVuY3Rpb24gcTQodCl7bGV0IGU9bmV3IEZsb2F0NjRBcnJheSh0KSxuPTA7QmEuaW5kZXhCeXRlc1BlckVsZW1lbnQ9ZVtuKytdLEJhLm1pbj1lW24rK10sQmEubWF4PWVbbisrXSxhLnVucGFjayhlLG4sTFIpLG4rPWEucGFja2VkTGVuZ3RoLFkudW5wYWNrKGUsbixEUiksbis9WS5wYWNrZWRMZW5ndGgsTnQudW5wYWNrKGUsbixCUil9ZnVuY3Rpb24gSzQodCl7bGV0IGU9dC5sZW5ndGgsbj0wO2ZvcihsZXQgbz0wO288ZTsrK28pbis9bmUucGFja2VkTGVuZ3RoKzMrdFtvXS5iYXRjaElkcy5sZW5ndGg7cmV0dXJuIG59ZnVuY3Rpb24gVzQodCxlLG4pe2xldCBvPWUubGVuZ3RoLHI9MitvKkNvLnBhY2tlZExlbmd0aCsxK0s0KG4pLGk9bmV3IEZsb2F0NjRBcnJheShyKSxzPTA7aVtzKytdPXQsaVtzKytdPW87Zm9yKGxldCB1PTA7dTxvOysrdSlDby5wYWNrKGVbdV0saSxzKSxzKz1Dby5wYWNrZWRMZW5ndGg7bGV0IGY9bi5sZW5ndGg7aVtzKytdPWY7Zm9yKGxldCB1PTA7dTxmOysrdSl7bGV0IGM9blt1XTtuZS5wYWNrKGMuY29sb3IsaSxzKSxzKz1uZS5wYWNrZWRMZW5ndGgsaVtzKytdPWMub2Zmc2V0LGlbcysrXT1jLmNvdW50O2xldCBsPWMuYmF0Y2hJZHMscD1sLmxlbmd0aDtpW3MrK109cDtmb3IobGV0IGQ9MDtkPHA7KytkKWlbcysrXT1sW2RdfXJldHVybiBpfWZ1bmN0aW9uIEo0KHQsZSl7cTQodC5wYWNrZWRCdWZmZXIpO2xldCBuO0JhLmluZGV4Qnl0ZXNQZXJFbGVtZW50PT09Mj9uPW5ldyBVaW50MTZBcnJheSh0LmluZGljZXMpOm49bmV3IFVpbnQzMkFycmF5KHQuaW5kaWNlcyk7bGV0IHI9bmV3IFVpbnQxNkFycmF5KHQucG9zaXRpb25zKSxpPW5ldyBVaW50MzJBcnJheSh0LmNvdW50cykscz1uZXcgVWludDMyQXJyYXkodC5pbmRleENvdW50cyksZj1uZXcgVWludDMyQXJyYXkodC5iYXRjaElkcyksdT1uZXcgVWludDMyQXJyYXkodC5iYXRjaFRhYmxlQ29sb3JzKSxjPW5ldyBBcnJheShpLmxlbmd0aCksbD1MUixwPURSLGQ9QlIsaD1CYS5taW4sXz1CYS5tYXgsZz10Lm1pbmltdW1IZWlnaHRzLGI9dC5tYXhpbXVtSGVpZ2h0czttKGcpJiZtKGIpJiYoZz1uZXcgRmxvYXQzMkFycmF5KGcpLGI9bmV3IEZsb2F0MzJBcnJheShiKSk7bGV0IHcsTyxFLFQ9ci5sZW5ndGgvMix4PXIuc3ViYXJyYXkoMCxUKSxNPXIuc3ViYXJyYXkoVCwyKlQpO25uLnppZ1phZ0RlbHRhRGVjb2RlKHgsTSk7bGV0IE49bmV3IEZsb2F0NjRBcnJheShUKjMpO2Zvcih3PTA7dzxUOysrdyl7bGV0IG90PXhbd10sUHQ9TVt3XSxndD1QLmxlcnAoZC53ZXN0LGQuZWFzdCxvdC9JUiksUnQ9UC5sZXJwKGQuc291dGgsZC5ub3J0aCxQdC9JUiksZHQ9Y3QuZnJvbVJhZGlhbnMoZ3QsUnQsMCxGUikscnQ9cC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihkdCx2Uik7YS5wYWNrKHJ0LE4sdyozKX1sZXQgRj1pLmxlbmd0aCxJPW5ldyBBcnJheShGKSx2PW5ldyBBcnJheShGKSxCPTAsQT0wO2Zvcih3PTA7dzxGOysrdylJW3ddPUIsdlt3XT1BLEIrPWlbd10sQSs9c1t3XTtsZXQgUz1uZXcgRmxvYXQzMkFycmF5KFQqMyoyKSxDPW5ldyBVaW50MTZBcnJheShUKjIpLEw9bmV3IFVpbnQzMkFycmF5KHYubGVuZ3RoKSx6PW5ldyBVaW50MzJBcnJheShzLmxlbmd0aCksaj1bXSxrPXt9O2Zvcih3PTA7dzxGOysrdylFPXVbd10sbShrW0VdKT8oa1tFXS5wb3NpdGlvbkxlbmd0aCs9aVt3XSxrW0VdLmluZGV4TGVuZ3RoKz1zW3ddLGtbRV0uYmF0Y2hJZHMucHVzaCh3KSk6a1tFXT17cG9zaXRpb25MZW5ndGg6aVt3XSxpbmRleExlbmd0aDpzW3ddLG9mZnNldDowLGluZGV4T2Zmc2V0OjAsYmF0Y2hJZHM6W3ddfTtsZXQgcSxXPTAsUj0wO2ZvcihFIGluIGspaWYoay5oYXNPd25Qcm9wZXJ0eShFKSl7cT1rW0VdLHEub2Zmc2V0PVcscS5pbmRleE9mZnNldD1SO2xldCBvdD1xLnBvc2l0aW9uTGVuZ3RoKjIsUHQ9cS5pbmRleExlbmd0aCoyK3EucG9zaXRpb25MZW5ndGgqNjtXKz1vdCxSKz1QdCxxLmluZGV4TGVuZ3RoPVB0fWxldCBudD1bXTtmb3IoRSBpbiBrKWsuaGFzT3duUHJvcGVydHkoRSkmJihxPWtbRV0sbnQucHVzaCh7Y29sb3I6bmUuZnJvbVJnYmEocGFyc2VJbnQoRSkpLG9mZnNldDpxLmluZGV4T2Zmc2V0LGNvdW50OnEuaW5kZXhMZW5ndGgsYmF0Y2hJZHM6cS5iYXRjaElkc30pKTtmb3Iodz0wO3c8RjsrK3cpe0U9dVt3XSxxPWtbRV07bGV0IG90PXEub2Zmc2V0LFB0PW90KjMsZ3Q9b3QsUnQ9SVt3XSxkdD1pW3ddLHJ0PWZbd10seHQ9aCxHdD1fO20oZykmJm0oYikmJih4dD1nW3ddLEd0PWJbd10pO2xldCBwZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscmU9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGRlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKE89MDtPPGR0OysrTyl7bGV0IGdlPWEudW5wYWNrKE4sUnQqMytPKjMsdlIpO3Auc2NhbGVUb0dlb2RldGljU3VyZmFjZShnZSxnZSk7bGV0IEVlPXAuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZ2UsRlIpLHVuPUVlLmxhdGl0dWRlLFZlPUVlLmxvbmdpdHVkZTtwZT1NYXRoLm1pbih1bixwZSkscmU9TWF0aC5tYXgodW4scmUpLGRlPU1hdGgubWluKFZlLGRlKSxmZT1NYXRoLm1heChWZSxmZSk7bGV0IGJlPXAuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGdlLFg0KSxsbj1hLm11bHRpcGx5QnlTY2FsYXIoYmUseHQsWTQpLHBuPWEuYWRkKGdlLGxuLCQ0KTtsbj1hLm11bHRpcGx5QnlTY2FsYXIoYmUsR3QsbG4pO2xldCBFbj1hLmFkZChnZSxsbixaNCk7YS5zdWJ0cmFjdChFbixsLEVuKSxhLnN1YnRyYWN0KHBuLGwscG4pLGEucGFjayhFbixTLFB0KSxhLnBhY2socG4sUyxQdCszKSxDW2d0XT1ydCxDW2d0KzFdPXJ0LFB0Kz02LGd0Kz0yfWQ9UTQsZC53ZXN0PWRlLGQuZWFzdD1mZSxkLnNvdXRoPXBlLGQubm9ydGg9cmUsY1t3XT1Dby5mcm9tUmVjdGFuZ2xlKGQsaCxfLHApO2xldCBadD1xLmluZGV4T2Zmc2V0LFF0PXZbd10sTmU9c1t3XTtmb3IoTFt3XT1adCxPPTA7TzxOZTtPKz0zKXtsZXQgZ2U9bltRdCtPXS1SdCxFZT1uW1F0K08rMV0tUnQsdW49bltRdCtPKzJdLVJ0O2pbWnQrK109Z2UqMitvdCxqW1p0KytdPUVlKjIrb3QsaltadCsrXT11bioyK290LGpbWnQrK109dW4qMisxK290LGpbWnQrK109RWUqMisxK290LGpbWnQrK109Z2UqMisxK290fWZvcihPPTA7TzxkdDsrK08pe2xldCBnZT1PLEVlPShPKzEpJWR0O2pbWnQrK109Z2UqMisxK290LGpbWnQrK109RWUqMitvdCxqW1p0KytdPWdlKjIrb3QsaltadCsrXT1nZSoyKzErb3QsaltadCsrXT1FZSoyKzErb3QsaltadCsrXT1FZSoyK290fXEub2Zmc2V0Kz1kdCoyLHEuaW5kZXhPZmZzZXQ9WnQselt3XT1adC1MW3ddfWo9THQuY3JlYXRlVHlwZWRBcnJheShTLmxlbmd0aC8zLGopO2xldCBhdD1udC5sZW5ndGg7Zm9yKGxldCBvdD0wO290PGF0Oysrb3Qpe2xldCBQdD1udFtvdF0uYmF0Y2hJZHMsZ3Q9MCxSdD1QdC5sZW5ndGg7Zm9yKGxldCBkdD0wO2R0PFJ0OysrZHQpZ3QrPXpbUHRbZHRdXTtudFtvdF0uY291bnQ9Z3R9bGV0IGx0PWouQllURVNfUEVSX0VMRU1FTlQ9PT0yP0x0LlVOU0lHTkVEX1NIT1JUOkx0LlVOU0lHTkVEX0lOVCxfdD1XNChsdCxjLG50KTtyZXR1cm4gZS5wdXNoKFMuYnVmZmVyLGouYnVmZmVyLEwuYnVmZmVyLHouYnVmZmVyLEMuYnVmZmVyLF90LmJ1ZmZlcikse3Bvc2l0aW9uczpTLmJ1ZmZlcixpbmRpY2VzOmouYnVmZmVyLGluZGV4T2Zmc2V0czpMLmJ1ZmZlcixpbmRleENvdW50czp6LmJ1ZmZlcixiYXRjaElkczpDLmJ1ZmZlcixwYWNrZWRCdWZmZXI6X3QuYnVmZmVyfX12YXIgTFIsRFIsQlIsQmEsSVIsdlIsWDQsWTQsJDQsWjQsRlIsUTQsdFUscmc9JCgoKT0+e2ZzKCk7RHQoKTtJZSgpO01hKCk7ZnQoKTskdCgpO1plKCk7S3QoKTtkYSgpO1RuKCk7Wm4oKTtMUj1uZXcgYSxEUj1uZXcgWSxCUj1uZXcgTnQsQmE9e21pbjp2b2lkIDAsbWF4OnZvaWQgMCxpbmRleEJ5dGVzUGVyRWxlbWVudDp2b2lkIDB9O0lSPTMyNzY3LHZSPW5ldyBhLFg0PW5ldyBhLFk0PW5ldyBhLCQ0PW5ldyBhLFo0PW5ldyBhLEZSPW5ldyBjdCxRND1uZXcgTnQ7dFU9VWUoSjQpfSk7ZnVuY3Rpb24gb1UodCxlLG4sbyxyKXtsZXQgaT10Lmxlbmd0aC8zLHM9dC5zdWJhcnJheSgwLGkpLGY9dC5zdWJhcnJheShpLDIqaSksdT10LnN1YmFycmF5KDIqaSwzKmkpO25uLnppZ1phZ0RlbHRhRGVjb2RlKHMsZix1KTtsZXQgYz1uZXcgRmxvYXQ2NEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IGw9MDtsPGk7KytsKXtsZXQgcD1zW2xdLGQ9ZltsXSxoPXVbbF0sXz1QLmxlcnAoZS53ZXN0LGUuZWFzdCxwL2lnKSxnPVAubGVycChlLnNvdXRoLGUubm9ydGgsZC9pZyksYj1QLmxlcnAobixvLGgvaWcpLHc9Y3QuZnJvbVJhZGlhbnMoXyxnLGIsZVUpLE89ci5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih3LG5VKTthLnBhY2soTyxjLGwqMyl9cmV0dXJuIGN9dmFyIGlnLGVVLG5VLFVSLGtSPSQoKCk9PntmcygpO0R0KCk7SWUoKTtLdCgpO2lnPTMyNzY3LGVVPW5ldyBjdCxuVT1uZXcgYTtVUj1vVX0pO3ZhciBzZz17fTtsZShzZyx7ZGVmYXVsdDooKT0+YVV9KTtmdW5jdGlvbiByVSh0KXt0PW5ldyBGbG9hdDY0QXJyYXkodCk7bGV0IGU9MDtxZC5taW49dFtlKytdLHFkLm1heD10W2UrK10sTnQudW5wYWNrKHQsZSxIUiksZSs9TnQucGFja2VkTGVuZ3RoLFkudW5wYWNrKHQsZSxxUiksZSs9WS5wYWNrZWRMZW5ndGgsYS51bnBhY2sodCxlLEtSKX1mdW5jdGlvbiBpVSh0KXtsZXQgZT10Lmxlbmd0aCxuPW5ldyBVaW50MzJBcnJheShlKzEpLG89MDtmb3IobGV0IHI9MDtyPGU7KytyKW5bcl09byxvKz10W3JdO3JldHVybiBuW2VdPW8sbn1mdW5jdGlvbiBjVSh0LGUpe2xldCBuPW5ldyBVaW50MTZBcnJheSh0LnBvc2l0aW9ucyksbz1uZXcgVWludDE2QXJyYXkodC53aWR0aHMpLHI9bmV3IFVpbnQzMkFycmF5KHQuY291bnRzKSxpPW5ldyBVaW50MTZBcnJheSh0LmJhdGNoSWRzKTtyVSh0LnBhY2tlZEJ1ZmZlcik7bGV0IHM9SFIsZj1xUix1PUtSLGM9cWQubWluLGw9cWQubWF4LHA9VVIobixzLGMsbCxmKSxkPXAubGVuZ3RoLzMsaD1kKjQtNCxfPW5ldyBGbG9hdDMyQXJyYXkoaCozKSxnPW5ldyBGbG9hdDMyQXJyYXkoaCozKSxiPW5ldyBGbG9hdDMyQXJyYXkoaCozKSx3PW5ldyBGbG9hdDMyQXJyYXkoaCoyKSxPPW5ldyBVaW50MTZBcnJheShoKSxFPTAsVD0wLHg9MCxNLE49MCxGPXIubGVuZ3RoO2ZvcihNPTA7TTxGOysrTSl7bGV0IFM9cltNXSxDPW9bTV0sTD1pW01dO2ZvcihsZXQgej0wO3o8UzsrK3ope2xldCBqO2lmKHo9PT0wKXtsZXQgbnQ9YS51bnBhY2socCxOKjMsR1IpLGF0PWEudW5wYWNrKHAsKE4rMSkqMyxWUik7aj1hLnN1YnRyYWN0KG50LGF0LHpSKSxhLmFkZChudCxqLGopfWVsc2Ugaj1hLnVucGFjayhwLChOK3otMSkqMyx6Uik7bGV0IGs9YS51bnBhY2socCwoTit6KSozLHNVKSxxO2lmKHo9PT1TLTEpe2xldCBudD1hLnVucGFjayhwLChOK1MtMSkqMyxHUiksYXQ9YS51bnBhY2socCwoTitTLTIpKjMsVlIpO3E9YS5zdWJ0cmFjdChudCxhdCxqUiksYS5hZGQobnQscSxxKX1lbHNlIHE9YS51bnBhY2socCwoTit6KzEpKjMsalIpO2Euc3VidHJhY3Qoaix1LGopLGEuc3VidHJhY3Qoayx1LGspLGEuc3VidHJhY3QocSx1LHEpO2xldCBXPXo9PT0wPzI6MCxSPXo9PT1TLTE/Mjo0O2ZvcihsZXQgbnQ9VztudDxSOysrbnQpe2EucGFjayhrLF8sRSksYS5wYWNrKGosZyxFKSxhLnBhY2socSxiLEUpLEUrPTM7bGV0IGF0PW50LTI8MD8tMToxO3dbVCsrXT0yKihudCUyKS0xLHdbVCsrXT1hdCpDLE9beCsrXT1MfX1OKz1TfWxldCBJPUx0LmNyZWF0ZVR5cGVkQXJyYXkoaCxkKjYtNiksdj0wLEI9MDtmb3IoRj1kLTEsTT0wO008RjsrK00pSVtCKytdPXYsSVtCKytdPXYrMixJW0IrK109disxLElbQisrXT12KzEsSVtCKytdPXYrMixJW0IrK109diszLHYrPTQ7ZS5wdXNoKF8uYnVmZmVyLGcuYnVmZmVyLGIuYnVmZmVyKSxlLnB1c2gody5idWZmZXIsTy5idWZmZXIsSS5idWZmZXIpO2xldCBBPXtpbmRleERhdGF0eXBlOkkuQllURVNfUEVSX0VMRU1FTlQ9PT0yP0x0LlVOU0lHTkVEX1NIT1JUOkx0LlVOU0lHTkVEX0lOVCxjdXJyZW50UG9zaXRpb25zOl8uYnVmZmVyLHByZXZpb3VzUG9zaXRpb25zOmcuYnVmZmVyLG5leHRQb3NpdGlvbnM6Yi5idWZmZXIsZXhwYW5kQW5kV2lkdGg6dy5idWZmZXIsYmF0Y2hJZHM6Ty5idWZmZXIsaW5kaWNlczpJLmJ1ZmZlcn07aWYodC5rZWVwRGVjb2RlZFBvc2l0aW9ucyl7bGV0IFM9aVUocik7ZS5wdXNoKHAuYnVmZmVyLFMuYnVmZmVyKSxBPXlyKEEse2RlY29kZWRQb3NpdGlvbnM6cC5idWZmZXIsZGVjb2RlZFBvc2l0aW9uT2Zmc2V0czpTLmJ1ZmZlcn0pfXJldHVybiBBfXZhciBIUixxUixLUixxZCxHUixWUix6UixzVSxqUixhVSxjZz0kKCgpPT57RHQoKTtjcCgpO2tSKCk7JHQoKTtaZSgpO1RuKCk7Wm4oKTtIUj1uZXcgTnQscVI9bmV3IFksS1I9bmV3IGEscWQ9e21pbjp2b2lkIDAsbWF4OnZvaWQgMH07R1I9bmV3IGEsVlI9bmV3IGEselI9bmV3IGEsc1U9bmV3IGEsalI9bmV3IGE7YVU9VWUoY1UpfSk7ZnVuY3Rpb24gX2kodCxlKXt5LnR5cGVPZi5vYmplY3QoImVsbGlwc29pZCIsdCksdGhpcy5fZWxsaXBzb2lkPXQsdGhpcy5fY2FtZXJhUG9zaXRpb249bmV3IGEsdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlPW5ldyBhLHRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQ9MCxtKGUpJiYodGhpcy5jYW1lcmFQb3NpdGlvbj1lKX1mdW5jdGlvbiBZUih0LGUsbil7aWYobShlKSYmZTwwJiZ0Lm1pbmltdW1SYWRpdXM+LWUpe2xldCBvPWEuZnJvbUVsZW1lbnRzKHQucmFkaWkueCtlLHQucmFkaWkueStlLHQucmFkaWkueitlLGxVKTt0PVkuZnJvbUNhcnRlc2lhbjMobyxuKX1yZXR1cm4gdH1mdW5jdGlvbiAkUih0LGUsbixvKXt5LnR5cGVPZi5vYmplY3QoImRpcmVjdGlvblRvUG9pbnQiLGUpLHkuZGVmaW5lZCgicG9zaXRpb25zIixuKSxtKG8pfHwobz1uZXcgYSk7bGV0IHI9dDIodCxlKSxpPTA7Zm9yKGxldCBzPTAsZj1uLmxlbmd0aDtzPGY7KytzKXtsZXQgdT1uW3NdLGM9UVIodCx1LHIpO2lmKGM8MClyZXR1cm47aT1NYXRoLm1heChpLGMpfXJldHVybiBKUihyLGksbyl9ZnVuY3Rpb24gWlIodCxlLG4sbyxyLGkpe3kudHlwZU9mLm9iamVjdCgiZGlyZWN0aW9uVG9Qb2ludCIsZSkseS5kZWZpbmVkKCJ2ZXJ0aWNlcyIsbikseS50eXBlT2YubnVtYmVyKCJzdHJpZGUiLG8pLG0oaSl8fChpPW5ldyBhKSxvPW8/PzMscj1yPz9hLlpFUk87bGV0IHM9dDIodCxlKSxmPTA7Zm9yKGxldCB1PTAsYz1uLmxlbmd0aDt1PGM7dSs9byl7S2QueD1uW3VdK3IueCxLZC55PW5bdSsxXStyLnksS2Quej1uW3UrMl0rci56O2xldCBsPVFSKHQsS2Qscyk7aWYobDwwKXJldHVybjtmPU1hdGgubWF4KGYsbCl9cmV0dXJuIEpSKHMsZixpKX1mdW5jdGlvbiBmZyh0LGUsbil7bGV0IG89ZSxyPW4saT1hLnN1YnRyYWN0KHQsbyxXUikscz0tYS5kb3QoaSxvKTtyZXR1cm4hKHI8MD9zPjA6cz5yJiZzKnMvYS5tYWduaXR1ZGVTcXVhcmVkKGkpPnIpfWZ1bmN0aW9uIFFSKHQsZSxuKXtsZXQgbz10LnRyYW5zZm9ybVBvc2l0aW9uVG9TY2FsZWRTcGFjZShlLHBVKSxyPWEubWFnbml0dWRlU3F1YXJlZChvKSxpPU1hdGguc3FydChyKSxzPWEuZGl2aWRlQnlTY2FsYXIobyxpLGRVKTtyPU1hdGgubWF4KDEsciksaT1NYXRoLm1heCgxLGkpO2xldCBmPWEuZG90KHMsbiksdT1hLm1hZ25pdHVkZShhLmNyb3NzKHMsbixzKSksYz0xL2ksbD1NYXRoLnNxcnQoci0xKSpjO3JldHVybiAxLyhmKmMtdSpsKX1mdW5jdGlvbiBKUih0LGUsbil7aWYoIShlPD0wfHxlPT09MS8wfHxlIT09ZSkpcmV0dXJuIGEubXVsdGlwbHlCeVNjYWxhcih0LGUsbil9ZnVuY3Rpb24gdDIodCxlKXtyZXR1cm4gYS5lcXVhbHMoZSxhLlpFUk8pP2U6KHQudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKGUsYWcpLGEubm9ybWFsaXplKGFnLGFnKSl9dmFyIFdSLGZVLFhSLHVVLGxVLEtkLHBVLGRVLGFnLFBzLGN1PSQoKCk9Pnt2ZSgpO0R0KCk7V3QoKTtmdCgpOyR0KCk7VG4oKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhfaS5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH19LGNhbWVyYVBvc2l0aW9uOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FtZXJhUG9zaXRpb259LHNldDpmdW5jdGlvbih0KXtsZXQgbj10aGlzLl9lbGxpcHNvaWQudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKHQsdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlKSxvPWEubWFnbml0dWRlU3F1YXJlZChuKS0xO2EuY2xvbmUodCx0aGlzLl9jYW1lcmFQb3NpdGlvbiksdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlPW4sdGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZD1vfX19KTtXUj1uZXcgYTtfaS5wcm90b3R5cGUuaXNQb2ludFZpc2libGU9ZnVuY3Rpb24odCl7bGV0IG49dGhpcy5fZWxsaXBzb2lkLnRyYW5zZm9ybVBvc2l0aW9uVG9TY2FsZWRTcGFjZSh0LFdSKTtyZXR1cm4gZmcobix0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2UsdGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZCl9O19pLnByb3RvdHlwZS5pc1NjYWxlZFNwYWNlUG9pbnRWaXNpYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBmZyh0LHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZSx0aGlzLl9kaXN0YW5jZVRvTGltYkluU2NhbGVkU3BhY2VTcXVhcmVkKX07ZlU9bmV3IGE7X2kucHJvdG90eXBlLmlzU2NhbGVkU3BhY2VQb2ludFZpc2libGVQb3NzaWJseVVuZGVyRWxsaXBzb2lkPWZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5fZWxsaXBzb2lkLG8scjtyZXR1cm4gbShlKSYmZTwwJiZuLm1pbmltdW1SYWRpdXM+LWU/KHI9ZlUsci54PXRoaXMuX2NhbWVyYVBvc2l0aW9uLngvKG4ucmFkaWkueCtlKSxyLnk9dGhpcy5fY2FtZXJhUG9zaXRpb24ueS8obi5yYWRpaS55K2UpLHIuej10aGlzLl9jYW1lcmFQb3NpdGlvbi56LyhuLnJhZGlpLnorZSksbz1yLngqci54K3IueSpyLnkrci56KnIuei0xKToocj10aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2Usbz10aGlzLl9kaXN0YW5jZVRvTGltYkluU2NhbGVkU3BhY2VTcXVhcmVkKSxmZyh0LHIsbyl9O19pLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludD1mdW5jdGlvbih0LGUsbil7cmV0dXJuICRSKHRoaXMuX2VsbGlwc29pZCx0LGUsbil9O1hSPVkuY2xvbmUoWS5VTklUX1NQSEVSRSk7X2kucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50UG9zc2libHlVbmRlckVsbGlwc29pZD1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1ZUih0aGlzLl9lbGxpcHNvaWQsbixYUik7cmV0dXJuICRSKHIsdCxlLG8pfTtfaS5wcm90b3R5cGUuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRGcm9tVmVydGljZXM9ZnVuY3Rpb24odCxlLG4sbyxyKXtyZXR1cm4gWlIodGhpcy5fZWxsaXBzb2lkLHQsZSxuLG8scil9O19pLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21WZXJ0aWNlc1Bvc3NpYmx5VW5kZXJFbGxpcHNvaWQ9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzPVlSKHRoaXMuX2VsbGlwc29pZCxyLFhSKTtyZXR1cm4gWlIocyx0LGUsbixvLGkpfTt1VT1bXTtfaS5wcm90b3R5cGUuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRGcm9tUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCk7bGV0IG89TnQuc3Vic2FtcGxlKHQsZSwwLHVVKSxyPUF0LmZyb21Qb2ludHMobyk7aWYoIShhLm1hZ25pdHVkZShyLmNlbnRlcik8LjEqZS5taW5pbXVtUmFkaXVzKSlyZXR1cm4gdGhpcy5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludChyLmNlbnRlcixvLG4pfTtsVT1uZXcgYTtLZD1uZXcgYTtwVT1uZXcgYSxkVT1uZXcgYTthZz1uZXcgYTtQcz1faX0pO3ZhciBXZCxtVSxlMixuMj0kKCgpPT57RHQoKTtJZSgpO0h0KCk7ZnQoKTtXZD17fTtXZC5nZXRIZWlnaHQ9ZnVuY3Rpb24odCxlLG4pe2lmKCFOdW1iZXIuaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEQoInNjYWxlIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyLiIpO2lmKCFOdW1iZXIuaXNGaW5pdGUobikpdGhyb3cgbmV3IEQoInJlbGF0aXZlSGVpZ2h0IG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyLiIpO3JldHVybih0LW4pKmUrbn07bVU9bmV3IGN0O1dkLmdldFBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0LG1VKTtpZighbShpKSlyZXR1cm4gYS5jbG9uZSh0LHIpO2xldCBzPVdkLmdldEhlaWdodChpLmhlaWdodCxuLG8pO3JldHVybiBhLmZyb21SYWRpYW5zKGkubG9uZ2l0dWRlLGkubGF0aXR1ZGUscyxlLHIpfTtlMj1XZH0pO3ZhciBoVSxQcixvMj0kKCgpPT57aFU9e05PTkU6MCxCSVRTMTI6MX0sUHI9T2JqZWN0LmZyZWV6ZShoVSl9KTtmdW5jdGlvbiBJbyh0LGUsbixvLHIsaSxzLGYsdSxjKXtsZXQgbD1Qci5OT05FLHAsZDtpZihtKGUpJiZtKG4pJiZtKG8pJiZtKHIpKXtsZXQgaD1lLm1pbmltdW0sXz1lLm1heGltdW0sZz1hLnN1YnRyYWN0KF8saCxfVSksYj1vLW47TWF0aC5tYXgoYS5tYXhpbXVtQ29tcG9uZW50KGcpLGIpPGdVLTE/bD1Qci5CSVRTMTI6bD1Qci5OT05FLHA9c3QuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKHIsbmV3IHN0KTtsZXQgTz1hLm5lZ2F0ZShoLE9jKTtzdC5tdWx0aXBseShzdC5mcm9tVHJhbnNsYXRpb24oTyxYZCkscCxwKTtsZXQgRT1PYztFLng9MS9nLngsRS55PTEvZy55LEUuej0xL2cueixzdC5tdWx0aXBseShzdC5mcm9tU2NhbGUoRSxYZCkscCxwKSxkPXN0LmNsb25lKHIpLHN0LnNldFRyYW5zbGF0aW9uKGQsYS5aRVJPLGQpLHI9c3QuY2xvbmUocixuZXcgc3QpO2xldCBUPXN0LmZyb21UcmFuc2xhdGlvbihoLFhkKSx4PXN0LmZyb21TY2FsZShnLHlVKSxNPXN0Lm11bHRpcGx5KFQseCxYZCk7c3QubXVsdGlwbHkocixNLHIpLHN0Lm11bHRpcGx5KGQsTSxkKX10aGlzLnF1YW50aXphdGlvbj1sLHRoaXMubWluaW11bUhlaWdodD1uLHRoaXMubWF4aW11bUhlaWdodD1vLHRoaXMuY2VudGVyPWEuY2xvbmUodCksdGhpcy50b1NjYWxlZEVOVT1wLHRoaXMuZnJvbVNjYWxlZEVOVT1yLHRoaXMubWF0cml4PWQsdGhpcy5oYXNWZXJ0ZXhOb3JtYWxzPWksdGhpcy5oYXNXZWJNZXJjYXRvclQ9cz8/ITEsdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPWY/PyExLHRoaXMuZXhhZ2dlcmF0aW9uPXU/PzEsdGhpcy5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodD1jPz8wLHRoaXMuc3RyaWRlPTAsdGhpcy5fb2Zmc2V0R2VvZGV0aWNTdXJmYWNlTm9ybWFsPTAsdGhpcy5fb2Zmc2V0VmVydGV4Tm9ybWFsPTAsdGhpcy5fY2FsY3VsYXRlU3RyaWRlQW5kT2Zmc2V0cygpfXZhciBPYyxfVSxNcixYZCx5VSxnVSxBVSxyMixZZCwkZCxNcyxhdT0kKCgpPT57ZnMoKTtrZSgpO0R0KCk7RGUoKTtmdCgpO0t0KCk7a24oKTtuMigpO28yKCk7T2M9bmV3IGEsX1U9bmV3IGEsTXI9bmV3IEosWGQ9bmV3IHN0LHlVPW5ldyBzdCxnVT1NYXRoLnBvdygyLDEyKTtJby5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMsZil7bGV0IHU9by54LGM9by55O2lmKHRoaXMucXVhbnRpemF0aW9uPT09UHIuQklUUzEyKXtuPXN0Lm11bHRpcGx5QnlQb2ludCh0aGlzLnRvU2NhbGVkRU5VLG4sT2MpLG4ueD1QLmNsYW1wKG4ueCwwLDEpLG4ueT1QLmNsYW1wKG4ueSwwLDEpLG4uej1QLmNsYW1wKG4ueiwwLDEpO2xldCBsPXRoaXMubWF4aW11bUhlaWdodC10aGlzLm1pbmltdW1IZWlnaHQscD1QLmNsYW1wKChyLXRoaXMubWluaW11bUhlaWdodCkvbCwwLDEpO0ouZnJvbUVsZW1lbnRzKG4ueCxuLnksTXIpO2xldCBkPW5uLmNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKE1yKTtKLmZyb21FbGVtZW50cyhuLnoscCxNcik7bGV0IGg9bm4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoTXIpO0ouZnJvbUVsZW1lbnRzKHUsYyxNcik7bGV0IF89bm4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoTXIpO2lmKHRbZSsrXT1kLHRbZSsrXT1oLHRbZSsrXT1fLHRoaXMuaGFzV2ViTWVyY2F0b3JUKXtKLmZyb21FbGVtZW50cyhzLDAsTXIpO2xldCBnPW5uLmNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKE1yKTt0W2UrK109Z319ZWxzZSBhLnN1YnRyYWN0KG4sdGhpcy5jZW50ZXIsT2MpLHRbZSsrXT1PYy54LHRbZSsrXT1PYy55LHRbZSsrXT1PYy56LHRbZSsrXT1yLHRbZSsrXT11LHRbZSsrXT1jLHRoaXMuaGFzV2ViTWVyY2F0b3JUJiYodFtlKytdPXMpO3JldHVybiB0aGlzLmhhc1ZlcnRleE5vcm1hbHMmJih0W2UrK109bm4ub2N0UGFja0Zsb2F0KGkpKSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMmJih0W2UrK109Zi54LHRbZSsrXT1mLnksdFtlKytdPWYueiksZX07QVU9bmV3IGEscjI9bmV3IGE7SW8ucHJvdG90eXBlLmFkZEdlb2RldGljU3VyZmFjZU5vcm1hbHM9ZnVuY3Rpb24odCxlLG4pe2lmKHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscylyZXR1cm47bGV0IG89dGhpcy5zdHJpZGUscj10Lmxlbmd0aC9vO3RoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscz0hMCx0aGlzLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCk7bGV0IGk9dGhpcy5zdHJpZGU7Zm9yKGxldCBzPTA7czxyO3MrKyl7Zm9yKGxldCBsPTA7bDxvO2wrKyl7bGV0IHA9cypvK2wsZD1zKmkrbDtlW2RdPXRbcF19bGV0IGY9dGhpcy5kZWNvZGVQb3NpdGlvbihlLHMsQVUpLHU9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZixyMiksYz1zKmkrdGhpcy5fb2Zmc2V0R2VvZGV0aWNTdXJmYWNlTm9ybWFsO2VbY109dS54LGVbYysxXT11LnksZVtjKzJdPXUuen19O0lvLnByb3RvdHlwZS5yZW1vdmVHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscylyZXR1cm47bGV0IG49dGhpcy5zdHJpZGUsbz10Lmxlbmd0aC9uO3RoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscz0hMSx0aGlzLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCk7bGV0IHI9dGhpcy5zdHJpZGU7Zm9yKGxldCBpPTA7aTxvO2krKylmb3IobGV0IHM9MDtzPHI7cysrKXtsZXQgZj1pKm4rcyx1PWkqcitzO2VbdV09dFtmXX19O0lvLnByb3RvdHlwZS5kZWNvZGVQb3NpdGlvbj1mdW5jdGlvbih0LGUsbil7aWYobShuKXx8KG49bmV3IGEpLGUqPXRoaXMuc3RyaWRlLHRoaXMucXVhbnRpemF0aW9uPT09UHIuQklUUzEyKXtsZXQgbz1ubi5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKHRbZV0sTXIpO24ueD1vLngsbi55PW8ueTtsZXQgcj1ubi5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKHRbZSsxXSxNcik7cmV0dXJuIG4uej1yLngsc3QubXVsdGlwbHlCeVBvaW50KHRoaXMuZnJvbVNjYWxlZEVOVSxuLG4pfXJldHVybiBuLng9dFtlXSxuLnk9dFtlKzFdLG4uej10W2UrMl0sYS5hZGQobix0aGlzLmNlbnRlcixuKX07SW8ucHJvdG90eXBlLmdldEV4YWdnZXJhdGVkUG9zaXRpb249ZnVuY3Rpb24odCxlLG4pe249dGhpcy5kZWNvZGVQb3NpdGlvbih0LGUsbik7bGV0IG89dGhpcy5leGFnZ2VyYXRpb24scj10aGlzLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0O2lmKG8hPT0xJiZ0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMpe2xldCBzPXRoaXMuZGVjb2RlR2VvZGV0aWNTdXJmYWNlTm9ybWFsKHQsZSxyMiksZj10aGlzLmRlY29kZUhlaWdodCh0LGUpLHU9ZTIuZ2V0SGVpZ2h0KGYsbyxyKS1mO24ueCs9cy54KnUsbi55Kz1zLnkqdSxuLnorPXMueip1fXJldHVybiBufTtJby5wcm90b3R5cGUuZGVjb2RlVGV4dHVyZUNvb3JkaW5hdGVzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbShuKXx8KG49bmV3IEopLGUqPXRoaXMuc3RyaWRlLHRoaXMucXVhbnRpemF0aW9uPT09UHIuQklUUzEyP25uLmRlY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXModFtlKzJdLG4pOkouZnJvbUVsZW1lbnRzKHRbZSs0XSx0W2UrNV0sbil9O0lvLnByb3RvdHlwZS5kZWNvZGVIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT1Qci5CSVRTMTI/bm4uZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh0W2UrMV0sTXIpLnkqKHRoaXMubWF4aW11bUhlaWdodC10aGlzLm1pbmltdW1IZWlnaHQpK3RoaXMubWluaW11bUhlaWdodDp0W2UrM119O0lvLnByb3RvdHlwZS5kZWNvZGVXZWJNZXJjYXRvclQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT1Qci5CSVRTMTI/bm4uZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh0W2UrM10sTXIpLng6dFtlKzZdfTtJby5wcm90b3R5cGUuZ2V0T2N0RW5jb2RlZE5vcm1hbD1mdW5jdGlvbih0LGUsbil7ZT1lKnRoaXMuc3RyaWRlK3RoaXMuX29mZnNldFZlcnRleE5vcm1hbDtsZXQgbz10W2VdLzI1NixyPU1hdGguZmxvb3IobyksaT0oby1yKSoyNTY7cmV0dXJuIEouZnJvbUVsZW1lbnRzKHIsaSxuKX07SW8ucHJvdG90eXBlLmRlY29kZUdlb2RldGljU3VyZmFjZU5vcm1hbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGU9ZSp0aGlzLnN0cmlkZSt0aGlzLl9vZmZzZXRHZW9kZXRpY1N1cmZhY2VOb3JtYWwsbi54PXRbZV0sbi55PXRbZSsxXSxuLno9dFtlKzJdLG59O0lvLnByb3RvdHlwZS5fY2FsY3VsYXRlU3RyaWRlQW5kT2Zmc2V0cz1mdW5jdGlvbigpe2xldCB0PTA7c3dpdGNoKHRoaXMucXVhbnRpemF0aW9uKXtjYXNlIFByLkJJVFMxMjp0Kz0zO2JyZWFrO2RlZmF1bHQ6dCs9Nn10aGlzLmhhc1dlYk1lcmNhdG9yVCYmKHQrPTEpLHRoaXMuaGFzVmVydGV4Tm9ybWFscyYmKHRoaXMuX29mZnNldFZlcnRleE5vcm1hbD10LHQrPTEpLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmKHRoaXMuX29mZnNldEdlb2RldGljU3VyZmFjZU5vcm1hbD10LHQrPTMpLHRoaXMuc3RyaWRlPXR9O1lkPXtwb3NpdGlvbjNEQW5kSGVpZ2h0OjAsdGV4dHVyZUNvb3JkQW5kRW5jb2RlZE5vcm1hbHM6MSxnZW9kZXRpY1N1cmZhY2VOb3JtYWw6Mn0sJGQ9e2NvbXByZXNzZWQwOjAsY29tcHJlc3NlZDE6MSxnZW9kZXRpY1N1cmZhY2VOb3JtYWw6Mn07SW8ucHJvdG90eXBlLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7bGV0IGU9ZXQuRkxPQVQsbj1ldC5nZXRTaXplSW5CeXRlcyhlKSxvPXRoaXMuc3RyaWRlKm4scj0wLGk9W107ZnVuY3Rpb24gcyhmLHUpe2kucHVzaCh7aW5kZXg6Zix2ZXJ0ZXhCdWZmZXI6dCxjb21wb25lbnREYXRhdHlwZTplLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6dSxvZmZzZXRJbkJ5dGVzOnIsc3RyaWRlSW5CeXRlczpvfSkscis9dSpufWlmKHRoaXMucXVhbnRpemF0aW9uPT09UHIuTk9ORSl7cyhZZC5wb3NpdGlvbjNEQW5kSGVpZ2h0LDQpO2xldCBmPTI7Zis9dGhpcy5oYXNXZWJNZXJjYXRvclQ/MTowLGYrPXRoaXMuaGFzVmVydGV4Tm9ybWFscz8xOjAscyhZZC50ZXh0dXJlQ29vcmRBbmRFbmNvZGVkTm9ybWFscyxmKSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMmJnMoWWQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsLDMpfWVsc2V7bGV0IGY9dGhpcy5oYXNXZWJNZXJjYXRvclR8fHRoaXMuaGFzVmVydGV4Tm9ybWFscyx1PXRoaXMuaGFzV2ViTWVyY2F0b3JUJiZ0aGlzLmhhc1ZlcnRleE5vcm1hbHM7cygkZC5jb21wcmVzc2VkMCxmPzQ6MyksdSYmcygkZC5jb21wcmVzc2VkMSwxKSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMmJnMoJGQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsLDMpfXJldHVybiBpfTtJby5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTG9jYXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVhbnRpemF0aW9uPT09UHIuTk9ORT9ZZDokZH07SW8uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihtKHQpKXJldHVybiBtKGUpfHwoZT1uZXcgSW8pLGUucXVhbnRpemF0aW9uPXQucXVhbnRpemF0aW9uLGUubWluaW11bUhlaWdodD10Lm1pbmltdW1IZWlnaHQsZS5tYXhpbXVtSGVpZ2h0PXQubWF4aW11bUhlaWdodCxlLmNlbnRlcj1hLmNsb25lKHQuY2VudGVyKSxlLnRvU2NhbGVkRU5VPXN0LmNsb25lKHQudG9TY2FsZWRFTlUpLGUuZnJvbVNjYWxlZEVOVT1zdC5jbG9uZSh0LmZyb21TY2FsZWRFTlUpLGUubWF0cml4PXN0LmNsb25lKHQubWF0cml4KSxlLmhhc1ZlcnRleE5vcm1hbHM9dC5oYXNWZXJ0ZXhOb3JtYWxzLGUuaGFzV2ViTWVyY2F0b3JUPXQuaGFzV2ViTWVyY2F0b3JULGUuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscz10Lmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMsZS5leGFnZ2VyYXRpb249dC5leGFnZ2VyYXRpb24sZS5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodD10LmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0LGUuX2NhbGN1bGF0ZVN0cmlkZUFuZE9mZnNldHMoKSxlfTtNcz1Jb30pO3ZhciBsZz17fTtsZShsZyx7ZGVmYXVsdDooKT0+eFV9KTtmdW5jdGlvbiBmdSh0LGUsbil7bj1uPz9QO2xldCBvPXQubGVuZ3RoO2ZvcihsZXQgcj0wO3I8bzsrK3IpaWYobi5lcXVhbHNFcHNpbG9uKHRbcl0sZSxQLkVQU0lMT04xMikpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gVFUodCxlKXt0LmVsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkKSx0LnJlY3RhbmdsZT1OdC5jbG9uZSh0LnJlY3RhbmdsZSk7bGV0IG49U1UodC5idWZmZXIsdC5yZWxhdGl2ZVRvQ2VudGVyLHQuZWxsaXBzb2lkLHQucmVjdGFuZ2xlLHQubmF0aXZlUmVjdGFuZ2xlLHQuZXhhZ2dlcmF0aW9uLHQuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQsdC5za2lydEhlaWdodCx0LmluY2x1ZGVXZWJNZXJjYXRvclQsdC5uZWdhdGl2ZUFsdGl0dWRlRXhwb25lbnRCaWFzLHQubmVnYXRpdmVFbGV2YXRpb25UaHJlc2hvbGQpLG89bi52ZXJ0aWNlcztlLnB1c2goby5idWZmZXIpO2xldCByPW4uaW5kaWNlcztyZXR1cm4gZS5wdXNoKHIuYnVmZmVyKSx7dmVydGljZXM6by5idWZmZXIsaW5kaWNlczpyLmJ1ZmZlcixudW1iZXJPZkF0dHJpYnV0ZXM6bi5lbmNvZGluZy5zdHJpZGUsbWluaW11bUhlaWdodDpuLm1pbmltdW1IZWlnaHQsbWF4aW11bUhlaWdodDpuLm1heGltdW1IZWlnaHQsYm91bmRpbmdTcGhlcmUzRDpuLmJvdW5kaW5nU3BoZXJlM0Qsb3JpZW50ZWRCb3VuZGluZ0JveDpuLm9yaWVudGVkQm91bmRpbmdCb3gsb2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2U6bi5vY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZSxlbmNvZGluZzpuLmVuY29kaW5nLHZlcnRleENvdW50V2l0aG91dFNraXJ0czpuLnZlcnRleENvdW50V2l0aG91dFNraXJ0cyxpbmRleENvdW50V2l0aG91dFNraXJ0czpuLmluZGV4Q291bnRXaXRob3V0U2tpcnRzLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOm4ud2VzdEluZGljZXNTb3V0aFRvTm9ydGgsc291dGhJbmRpY2VzRWFzdFRvV2VzdDpuLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QsZWFzdEluZGljZXNOb3J0aFRvU291dGg6bi5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aCxub3J0aEluZGljZXNXZXN0VG9FYXN0Om4ubm9ydGhJbmRpY2VzV2VzdFRvRWFzdH19ZnVuY3Rpb24gU1UodCxlLG4sbyxyLGkscyxmLHUsYyxsKXtsZXQgcCxkLGgsXyxnLGI7bShvKT8ocD1vLndlc3QsZD1vLnNvdXRoLGg9by5lYXN0LF89by5ub3J0aCxnPW8ud2lkdGgsYj1vLmhlaWdodCk6KHA9UC50b1JhZGlhbnMoci53ZXN0KSxkPVAudG9SYWRpYW5zKHIuc291dGgpLGg9UC50b1JhZGlhbnMoci5lYXN0KSxfPVAudG9SYWRpYW5zKHIubm9ydGgpLGc9UC50b1JhZGlhbnMoby53aWR0aCksYj1QLnRvUmFkaWFucyhvLmhlaWdodCkpO2xldCB3PVtkLF9dLE89W3AsaF0sRT0kby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShlLG4pLFQ9c3QuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKEUsUlUpLHgsTTt1JiYoeD1yby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKGQpLE09MS8ocm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShfKS14KSk7bGV0IEY9aSE9PTEsST1uZXcgRGF0YVZpZXcodCksdj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksQj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksQT1PVTtBLng9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEEueT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksQS56PU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgUz1FVTtTLng9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFMueT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksUy56PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgQz0wLEw9MCx6PTAsaixrO2ZvcihrPTA7azw0Oysrayl7bGV0IG9lPUM7aj1JLmdldFVpbnQzMihvZSwhMCksb2UrPXVnO2xldCBZdD1QLnRvUmFkaWFucyhJLmdldEZsb2F0NjQob2UsITApKjE4MCk7b2UrPUVjLGZ1KE8sWXQpPT09LTEmJk8ucHVzaChZdCk7bGV0IHplPVAudG9SYWRpYW5zKEkuZ2V0RmxvYXQ2NChvZSwhMCkqMTgwKTtvZSs9RWMsZnUodyx6ZSk9PT0tMSYmdy5wdXNoKHplKSxvZSs9MipFYztsZXQgZG49SS5nZXRJbnQzMihvZSwhMCk7b2UrPVpkLEwrPWRuLGRuPUkuZ2V0SW50MzIob2UsITApLHorPWRuKjMsQys9ait1Z31sZXQgcT1bXSxXPVtdLFI9bmV3IEFycmF5KEwpLG50PW5ldyBBcnJheShMKSxhdD1uZXcgQXJyYXkoTCksbHQ9dT9uZXcgQXJyYXkoTCk6W10sX3Q9Rj9uZXcgQXJyYXkoTCk6W10sb3Q9bmV3IEFycmF5KHopLFB0PVtdLGd0PVtdLFJ0PVtdLGR0PVtdLHJ0PTAseHQ9MDtmb3IoQz0wLGs9MDtrPDQ7KytrKXtqPUkuZ2V0VWludDMyKEMsITApLEMrPXVnO2xldCBvZT1DLFl0PVAudG9SYWRpYW5zKEkuZ2V0RmxvYXQ2NChDLCEwKSoxODApO0MrPUVjO2xldCB6ZT1QLnRvUmFkaWFucyhJLmdldEZsb2F0NjQoQywhMCkqMTgwKTtDKz1FYztsZXQgZG49UC50b1JhZGlhbnMoSS5nZXRGbG9hdDY0KEMsITApKjE4MCksc249ZG4qLjU7Qys9RWM7bGV0IG1uPVAudG9SYWRpYW5zKEkuZ2V0RmxvYXQ2NChDLCEwKSoxODApLGxvPW1uKi41O0MrPUVjO2xldCBxbj1JLmdldEludDMyKEMsITApO0MrPVpkO2xldCBRZT1JLmdldEludDMyKEMsITApO0MrPVpkLEMrPVpkO2xldCBjbj1uZXcgQXJyYXkocW4pO2ZvcihsZXQgaG49MDtobjxxbjsrK2huKXtsZXQgcG89WXQrSS5nZXRVaW50OChDKyspKmRuO3ZvLmxvbmdpdHVkZT1wbztsZXQgS249emUrSS5nZXRVaW50OChDKyspKm1uO3ZvLmxhdGl0dWRlPUtuO2xldCBXbj1JLmdldEZsb2F0MzIoQywhMCk7aWYoQys9d1UsV24hPT0wJiZXbjxsJiYoV24qPS1NYXRoLnBvdygyLGMpKSxXbio9NjM3MTAxMCx2by5oZWlnaHQ9V24sZnUoTyxwbykhPT0tMXx8ZnUodyxLbikhPT0tMSl7bGV0IERuPWZ1KHEsdm8sY3QpO2lmKERuPT09LTEpcS5wdXNoKGN0LmNsb25lKHZvKSksVy5wdXNoKHJ0KTtlbHNle2NuW2huXT1XW0RuXTtjb250aW51ZX19Y25baG5dPXJ0LE1hdGguYWJzKHBvLXApPHNuP1B0LnB1c2goe2luZGV4OnJ0LGNhcnRvZ3JhcGhpYzpjdC5jbG9uZSh2byl9KTpNYXRoLmFicyhwby1oKTxzbj9SdC5wdXNoKHtpbmRleDpydCxjYXJ0b2dyYXBoaWM6Y3QuY2xvbmUodm8pfSk6TWF0aC5hYnMoS24tZCk8bG8/Z3QucHVzaCh7aW5kZXg6cnQsY2FydG9ncmFwaGljOmN0LmNsb25lKHZvKX0pOk1hdGguYWJzKEtuLV8pPGxvJiZkdC5wdXNoKHtpbmRleDpydCxjYXJ0b2dyYXBoaWM6Y3QuY2xvbmUodm8pfSksdj1NYXRoLm1pbihXbix2KSxCPU1hdGgubWF4KFduLEIpLGF0W3J0XT1XbjtsZXQgbW89bi5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih2byk7aWYoUltydF09bW8sdSYmKGx0W3J0XT0ocm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShLbikteCkqTSksRil7bGV0IERuPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKG1vKTtfdFtydF09RG59c3QubXVsdGlwbHlCeVBvaW50KFQsbW8sVWEpLGEubWluaW11bUJ5Q29tcG9uZW50KFVhLEEsQSksYS5tYXhpbXVtQnlDb21wb25lbnQoVWEsUyxTKTtsZXQgamU9KHBvLXApLyhoLXApO2plPVAuY2xhbXAoamUsMCwxKTtsZXQgRmU9KEtuLWQpLyhfLWQpO0ZlPVAuY2xhbXAoRmUsMCwxKSxudFtydF09bmV3IEooamUsRmUpLCsrcnR9bGV0IFdlPVFlKjM7Zm9yKGxldCBobj0wO2huPFdlOysraG4sKyt4dClvdFt4dF09Y25bSS5nZXRVaW50MTYoQywhMCldLEMrPWJVO2lmKGohPT1DLW9lKXRocm93IG5ldyBBZSgiSW52YWxpZCB0ZXJyYWluIHRpbGUuIil9Ui5sZW5ndGg9cnQsbnQubGVuZ3RoPXJ0LGF0Lmxlbmd0aD1ydCx1JiYobHQubGVuZ3RoPXJ0KSxGJiYoX3QubGVuZ3RoPXJ0KTtsZXQgR3Q9cnQscGU9eHQscmU9e2hNaW46dixsYXN0Qm9yZGVyUG9pbnQ6dm9pZCAwLHNraXJ0SGVpZ2h0OmYsdG9FTlU6VCxlbGxpcHNvaWQ6bixtaW5pbXVtOkEsbWF4aW11bTpTfTtQdC5zb3J0KGZ1bmN0aW9uKG9lLFl0KXtyZXR1cm4gWXQuY2FydG9ncmFwaGljLmxhdGl0dWRlLW9lLmNhcnRvZ3JhcGhpYy5sYXRpdHVkZX0pLGd0LnNvcnQoZnVuY3Rpb24ob2UsWXQpe3JldHVybiBvZS5jYXJ0b2dyYXBoaWMubG9uZ2l0dWRlLVl0LmNhcnRvZ3JhcGhpYy5sb25naXR1ZGV9KSxSdC5zb3J0KGZ1bmN0aW9uKG9lLFl0KXtyZXR1cm4gb2UuY2FydG9ncmFwaGljLmxhdGl0dWRlLVl0LmNhcnRvZ3JhcGhpYy5sYXRpdHVkZX0pLGR0LnNvcnQoZnVuY3Rpb24ob2UsWXQpe3JldHVybiBZdC5jYXJ0b2dyYXBoaWMubG9uZ2l0dWRlLW9lLmNhcnRvZ3JhcGhpYy5sb25naXR1ZGV9KTtsZXQgZGU9MWUtNTtpZihRZChSLGF0LG50LGx0LF90LG90LHJlLFB0LC1kZSpnLCEwLC1kZSpiKSxRZChSLGF0LG50LGx0LF90LG90LHJlLGd0LC1kZSpiLCExKSxRZChSLGF0LG50LGx0LF90LG90LHJlLFJ0LGRlKmcsITAsZGUqYiksUWQoUixhdCxudCxsdCxfdCxvdCxyZSxkdCxkZSpiLCExKSxQdC5sZW5ndGg+MCYmZHQubGVuZ3RoPjApe2xldCBvZT1QdFswXS5pbmRleCxZdD1HdCx6ZT1kdFtkdC5sZW5ndGgtMV0uaW5kZXgsZG49Ui5sZW5ndGgtMTtvdC5wdXNoKHplLGRuLFl0LFl0LG9lLHplKX1MPVIubGVuZ3RoO2xldCBmZT1BdC5mcm9tUG9pbnRzKFIpLFp0O20obykmJihadD1Dby5mcm9tUmVjdGFuZ2xlKG8sdixCLG4pKTtsZXQgTmU9bmV3IFBzKG4pLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50UG9zc2libHlVbmRlckVsbGlwc29pZChlLFIsdiksZ2U9bmV3IERpKEEsUyxlKSxFZT1uZXcgTXMoZSxnZSxyZS5oTWluLEIsRSwhMSx1LEYsaSxzKSx1bj1uZXcgRmxvYXQzMkFycmF5KEwqRWUuc3RyaWRlKSxWZT0wO2ZvcihsZXQgb2U9MDtvZTxMOysrb2UpVmU9RWUuZW5jb2RlKHVuLFZlLFJbb2VdLG50W29lXSxhdFtvZV0sdm9pZCAwLGx0W29lXSxfdFtvZV0pO2xldCBiZT1QdC5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5pbmRleH0pLnJldmVyc2UoKSxsbj1ndC5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5pbmRleH0pLnJldmVyc2UoKSxwbj1SdC5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5pbmRleH0pLnJldmVyc2UoKSxFbj1kdC5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5pbmRleH0pLnJldmVyc2UoKTtyZXR1cm4gbG4udW5zaGlmdChwbltwbi5sZW5ndGgtMV0pLGxuLnB1c2goYmVbMF0pLEVuLnVuc2hpZnQoYmVbYmUubGVuZ3RoLTFdKSxFbi5wdXNoKHBuWzBdKSx7dmVydGljZXM6dW4saW5kaWNlczpuZXcgVWludDE2QXJyYXkob3QpLG1heGltdW1IZWlnaHQ6QixtaW5pbXVtSGVpZ2h0OnYsZW5jb2Rpbmc6RWUsYm91bmRpbmdTcGhlcmUzRDpmZSxvcmllbnRlZEJvdW5kaW5nQm94Olp0LG9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlOk5lLHZlcnRleENvdW50V2l0aG91dFNraXJ0czpHdCxpbmRleENvdW50V2l0aG91dFNraXJ0czpwZSx3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpiZSxzb3V0aEluZGljZXNFYXN0VG9XZXN0OmxuLGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOnBuLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6RW59fWZ1bmN0aW9uIFFkKHQsZSxuLG8scixpLHMsZix1LGMsbCl7bGV0IHA9Zi5sZW5ndGg7Zm9yKGxldCBkPTA7ZDxwOysrZCl7bGV0IGg9ZltkXSxfPWguY2FydG9ncmFwaGljLGc9aC5pbmRleCxiPXQubGVuZ3RoLHc9Xy5sb25naXR1ZGUsTz1fLmxhdGl0dWRlO089UC5jbGFtcChPLC1QLlBJX09WRVJfVFdPLFAuUElfT1ZFUl9UV08pO2xldCBFPV8uaGVpZ2h0LXMuc2tpcnRIZWlnaHQ7cy5oTWluPU1hdGgubWluKHMuaE1pbixFKSxjdC5mcm9tUmFkaWFucyh3LE8sRSx2byksYyYmKHZvLmxvbmdpdHVkZSs9dSksYz9kPT09cC0xP3ZvLmxhdGl0dWRlKz1sOmQ9PT0wJiYodm8ubGF0aXR1ZGUtPWwpOnZvLmxhdGl0dWRlKz11O2xldCBUPXMuZWxsaXBzb2lkLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHZvKTt0LnB1c2goVCksZS5wdXNoKEUpLG4ucHVzaChKLmNsb25lKG5bZ10pKSxvLmxlbmd0aD4wJiZvLnB1c2gob1tnXSksci5sZW5ndGg+MCYmci5wdXNoKHJbZ10pLHN0Lm11bHRpcGx5QnlQb2ludChzLnRvRU5VLFQsVWEpO2xldCB4PXMubWluaW11bSxNPXMubWF4aW11bTthLm1pbmltdW1CeUNvbXBvbmVudChVYSx4LHgpLGEubWF4aW11bUJ5Q29tcG9uZW50KFVhLE0sTSk7bGV0IE49cy5sYXN0Qm9yZGVyUG9pbnQ7aWYobShOKSl7bGV0IEY9Ti5pbmRleDtpLnB1c2goRixiLTEsYixiLGcsRil9cy5sYXN0Qm9yZGVyUG9pbnQ9aH19dmFyIGJVLFpkLHVnLHdVLEVjLHZvLFVhLE9VLEVVLFJVLHhVLHBnPSQoKCk9PntQZigpO3ZlKCk7a2UoKTtEdCgpO0llKCk7ZnQoKTskdCgpO2N1KCk7S3QoKTtrbigpO2RhKCk7VG4oKTt0aSgpO2F1KCk7YXMoKTtzYygpO1puKCk7YlU9VWludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQsWmQ9SW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCx1Zz1VaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCx3VT1GbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsRWM9RmxvYXQ2NEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO3ZvPW5ldyBjdCxVYT1uZXcgYSxPVT1uZXcgYSxFVT1uZXcgYSxSVT1uZXcgc3Q7eFU9VWUoVFUpfSk7dmFyIENVLGkyLHMyPSQoKCk9PntDVT17Tk9ORTowLExFUkM6MX0saTI9T2JqZWN0LmZyZWV6ZShDVSl9KTt2YXIgeWksZGcsUFUsTVUsTlUsYzIsYTI9JCgoKT0+e1BmKCk7dmUoKTtrZSgpO0R0KCk7ZnQoKTtIdCgpOyR0KCk7Y3UoKTtLdCgpO2tuKCk7ZGEoKTtUbigpO2F1KCk7YXMoKTtzYygpO3lpPXt9O3lpLkRFRkFVTFRfU1RSVUNUVVJFPU9iamVjdC5mcmVlemUoe2hlaWdodFNjYWxlOjEsaGVpZ2h0T2Zmc2V0OjAsZWxlbWVudHNQZXJIZWlnaHQ6MSxzdHJpZGU6MSxlbGVtZW50TXVsdGlwbGllcjoyNTYsaXNCaWdFbmRpYW46ITF9KTtkZz1uZXcgYSxQVT1uZXcgc3QsTVU9bmV3IGEsTlU9bmV3IGE7eWkuY29tcHV0ZVZlcnRpY2VzPWZ1bmN0aW9uKHQpe2lmKCFtKHQpfHwhbSh0LmhlaWdodG1hcCkpdGhyb3cgbmV3IEQoIm9wdGlvbnMuaGVpZ2h0bWFwIGlzIHJlcXVpcmVkLiIpO2lmKCFtKHQud2lkdGgpfHwhbSh0LmhlaWdodCkpdGhyb3cgbmV3IEQoIm9wdGlvbnMud2lkdGggYW5kIG9wdGlvbnMuaGVpZ2h0IGFyZSByZXF1aXJlZC4iKTtpZighbSh0Lm5hdGl2ZVJlY3RhbmdsZSkpdGhyb3cgbmV3IEQoIm9wdGlvbnMubmF0aXZlUmVjdGFuZ2xlIGlzIHJlcXVpcmVkLiIpO2lmKCFtKHQuc2tpcnRIZWlnaHQpKXRocm93IG5ldyBEKCJvcHRpb25zLnNraXJ0SGVpZ2h0IGlzIHJlcXVpcmVkLiIpO2xldCBlPU1hdGguY29zLG49TWF0aC5zaW4sbz1NYXRoLnNxcnQscj1NYXRoLmF0YW4saT1NYXRoLmV4cCxzPVAuUElfT1ZFUl9UV08sZj1QLnRvUmFkaWFucyx1PXQuaGVpZ2h0bWFwLGM9dC53aWR0aCxsPXQuaGVpZ2h0LHA9dC5za2lydEhlaWdodCxkPXA+MCxoPXQuaXNHZW9ncmFwaGljPz8hMCxfPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQsZz0xL18ubWF4aW11bVJhZGl1cyxiPU50LmNsb25lKHQubmF0aXZlUmVjdGFuZ2xlKSx3PU50LmNsb25lKHQucmVjdGFuZ2xlKSxPLEUsVCx4O20odyk/KE89dy53ZXN0LEU9dy5zb3V0aCxUPXcuZWFzdCx4PXcubm9ydGgpOmg/KE89ZihiLndlc3QpLEU9ZihiLnNvdXRoKSxUPWYoYi5lYXN0KSx4PWYoYi5ub3J0aCkpOihPPWIud2VzdCpnLEU9cy0yKnIoaSgtYi5zb3V0aCpnKSksVD1iLmVhc3QqZyx4PXMtMipyKGkoLWIubm9ydGgqZykpKTtsZXQgTT10LnJlbGF0aXZlVG9DZW50ZXIsTj1tKE0pO009Tj9NOmEuWkVSTztsZXQgRj10LmluY2x1ZGVXZWJNZXJjYXRvclQ/PyExLEk9dC5leGFnZ2VyYXRpb24/PzEsdj10LmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0Pz8wLEE9SSE9PTEsUz10LnN0cnVjdHVyZT8/eWkuREVGQVVMVF9TVFJVQ1RVUkUsQz1TLmhlaWdodFNjYWxlPz95aS5ERUZBVUxUX1NUUlVDVFVSRS5oZWlnaHRTY2FsZSxMPVMuaGVpZ2h0T2Zmc2V0Pz95aS5ERUZBVUxUX1NUUlVDVFVSRS5oZWlnaHRPZmZzZXQsej1TLmVsZW1lbnRzUGVySGVpZ2h0Pz95aS5ERUZBVUxUX1NUUlVDVFVSRS5lbGVtZW50c1BlckhlaWdodCxqPVMuc3RyaWRlPz95aS5ERUZBVUxUX1NUUlVDVFVSRS5zdHJpZGUsaz1TLmVsZW1lbnRNdWx0aXBsaWVyPz95aS5ERUZBVUxUX1NUUlVDVFVSRS5lbGVtZW50TXVsdGlwbGllcixxPVMuaXNCaWdFbmRpYW4/P3lpLkRFRkFVTFRfU1RSVUNUVVJFLmlzQmlnRW5kaWFuLFc9TnQuY29tcHV0ZVdpZHRoKGIpLFI9TnQuY29tcHV0ZUhlaWdodChiKSxudD1XLyhjLTEpLGF0PVIvKGwtMSk7aHx8KFcqPWcsUio9Zyk7bGV0IGx0PV8ucmFkaWlTcXVhcmVkLF90PWx0Lngsb3Q9bHQueSxQdD1sdC56LGd0PTY1NTM2LFJ0PS02NTUzNixkdD0kby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShNLF8pLHJ0PXN0LmludmVyc2VUcmFuc2Zvcm1hdGlvbihkdCxQVSkseHQsR3Q7RiYmKHh0PXJvLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoRSksR3Q9MS8ocm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZSh4KS14dCkpO2xldCBwZT1NVTtwZS54PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxwZS55PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxwZS56PU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgcmU9TlU7cmUueD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkscmUueT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkscmUuej1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7bGV0IGRlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmZT1jKmwsWnQ9cD4wP2MqMitsKjI6MCxRdD1mZStadCxOZT1uZXcgQXJyYXkoUXQpLGdlPW5ldyBBcnJheShRdCksRWU9bmV3IEFycmF5KFF0KSx1bj1GP25ldyBBcnJheShRdCk6W10sVmU9QT9uZXcgQXJyYXkoUXQpOltdLGJlPTAsbG49bCxwbj0wLEVuPWM7ZCYmKC0tYmUsKytsbiwtLXBuLCsrRW4pO2xldCBvZT0xZS01O2ZvcihsZXQgUWU9YmU7UWU8bG47KytRZSl7bGV0IGNuPVFlO2NuPDAmJihjbj0wKSxjbj49bCYmKGNuPWwtMSk7bGV0IFdlPWIubm9ydGgtYXQqY247aD9XZT1mKFdlKTpXZT1zLTIqcihpKC1XZSpnKSk7bGV0IGhuPShXZS1FKS8oeC1FKTtobj1QLmNsYW1wKGhuLDAsMSk7bGV0IHBvPVFlPT09YmUsS249UWU9PT1sbi0xO3A+MCYmKHBvP1dlKz1vZSpSOktuJiYoV2UtPW9lKlIpKTtsZXQgV249ZShXZSksbW89bihXZSksamU9UHQqbW8sRmU7RiYmKEZlPShyby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKFdlKS14dCkqR3QpO2ZvcihsZXQgRG49cG47RG48RW47KytEbil7bGV0IFhuPURuO1huPDAmJihYbj0wKSxYbj49YyYmKFhuPWMtMSk7bGV0IEhvPWNuKihjKmopK1huKmoscm47aWYoej09PTEpcm49dVtIb107ZWxzZXtybj0wO2xldCBobztpZihxKWZvcihobz0wO2hvPHo7Kytobylybj1ybiprK3VbSG8raG9dO2Vsc2UgZm9yKGhvPXotMTtobz49MDstLWhvKXJuPXJuKmsrdVtIbytob119cm49cm4qQytMLFJ0PU1hdGgubWF4KFJ0LHJuKSxndD1NYXRoLm1pbihndCxybik7bGV0IFJuPWIud2VzdCtudCpYbjtoP1JuPWYoUm4pOlJuPVJuKmc7bGV0IGZyPShSbi1PKS8oVC1PKTtmcj1QLmNsYW1wKGZyLDAsMSk7bGV0IHRvPWNuKmMrWG47aWYocD4wKXtsZXQgaG89RG49PT1wbixGcj1Ebj09PUVuLTEsTmM9cG98fEtufHxob3x8RnI7aWYoKHBvfHxLbikmJihob3x8RnIpKWNvbnRpbnVlO05jJiYocm4tPXAsaG8/KHRvPWZlKyhsLWNuLTEpLFJuLT1vZSpXKTpLbj90bz1mZStsKyhjLVhuLTEpOkZyPyh0bz1mZStsK2MrY24sUm4rPW9lKlcpOnBvJiYodG89ZmUrbCtjK2wrWG4pKX1sZXQgcW89V24qZShSbiksSXI9V24qbihSbiksSXM9X3QqcW8sdnM9b3QqSXIsdnI9MS9vKElzKnFvK3ZzKklyK2plKm1vKSxaaT1Jcyp2cixGcz12cyp2cix3aT1qZSp2cixzbz1uZXcgYTtzby54PVppK3FvKnJuLHNvLnk9RnMrSXIqcm4sc28uej13aSttbypybixzdC5tdWx0aXBseUJ5UG9pbnQocnQsc28sZGcpLGEubWluaW11bUJ5Q29tcG9uZW50KGRnLHBlLHBlKSxhLm1heGltdW1CeUNvbXBvbmVudChkZyxyZSxyZSksZGU9TWF0aC5taW4oZGUscm4pLE5lW3RvXT1zbyxFZVt0b109bmV3IEooZnIsaG4pLGdlW3RvXT1ybixGJiYodW5bdG9dPUZlKSxBJiYoVmVbdG9dPV8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHNvKSl9fWxldCBZdD1BdC5mcm9tUG9pbnRzKE5lKSx6ZTttKHcpJiYoemU9Q28uZnJvbVJlY3RhbmdsZSh3LGd0LFJ0LF8pKTtsZXQgZG47TiYmKGRuPW5ldyBQcyhfKS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludFBvc3NpYmx5VW5kZXJFbGxpcHNvaWQoTSxOZSxndCkpO2xldCBzbj1uZXcgRGkocGUscmUsTSksbW49bmV3IE1zKE0sc24sZGUsUnQsZHQsITEsRixBLEksdiksbG89bmV3IEZsb2F0MzJBcnJheShRdCptbi5zdHJpZGUpLHFuPTA7Zm9yKGxldCBRZT0wO1FlPFF0OysrUWUpcW49bW4uZW5jb2RlKGxvLHFuLE5lW1FlXSxFZVtRZV0sZ2VbUWVdLHZvaWQgMCx1bltRZV0sVmVbUWVdKTtyZXR1cm57dmVydGljZXM6bG8sbWF4aW11bUhlaWdodDpSdCxtaW5pbXVtSGVpZ2h0Omd0LGVuY29kaW5nOm1uLGJvdW5kaW5nU3BoZXJlM0Q6WXQsb3JpZW50ZWRCb3VuZGluZ0JveDp6ZSxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpkbn19O2MyPXlpfSk7dmFyIGYyPVluKChXYXQsSmQpPT57LyogQ29weXJpZ2h0IDIwMTUtMjAxOCBFc3JpLiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEBwcmVzZXJ2ZSAqLyhmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7dmFyIHI9e307ci5kZWZhdWx0Tm9EYXRhVmFsdWU9LTM0MDI3OTk5Mzg3OTAxNDg0ZTIyLHIuZGVjb2RlPWZ1bmN0aW9uKGwscCl7cD1wfHx7fTt2YXIgZD1wLmVuY29kZWRNYXNrRGF0YXx8cC5lbmNvZGVkTWFza0RhdGE9PT1udWxsLGg9dShsLHAuaW5wdXRPZmZzZXR8fDAsZCksXz1wLm5vRGF0YVZhbHVlIT09bnVsbD9wLm5vRGF0YVZhbHVlOnIuZGVmYXVsdE5vRGF0YVZhbHVlLGc9aShoLHAucGl4ZWxUeXBlfHxGbG9hdDMyQXJyYXkscC5lbmNvZGVkTWFza0RhdGEsXyxwLnJldHVybk1hc2spLGI9e3dpZHRoOmgud2lkdGgsaGVpZ2h0OmguaGVpZ2h0LHBpeGVsRGF0YTpnLnJlc3VsdFBpeGVscyxtaW5WYWx1ZTpnLm1pblZhbHVlLG1heFZhbHVlOmgucGl4ZWxzLm1heFZhbHVlLG5vRGF0YVZhbHVlOl99O3JldHVybiBnLnJlc3VsdE1hc2smJihiLm1hc2tEYXRhPWcucmVzdWx0TWFzaykscC5yZXR1cm5FbmNvZGVkTWFzayYmaC5tYXNrJiYoYi5lbmNvZGVkTWFza0RhdGE9aC5tYXNrLmJpdHNldD9oLm1hc2suYml0c2V0Om51bGwpLHAucmV0dXJuRmlsZUluZm8mJihiLmZpbGVJbmZvPXMoaCkscC5jb21wdXRlVXNlZEJpdERlcHRocyYmKGIuZmlsZUluZm8uYml0RGVwdGhzPWYoaCkpKSxifTt2YXIgaT1mdW5jdGlvbihsLHAsZCxoLF8pe3ZhciBnPTAsYj1sLnBpeGVscy5udW1CbG9ja3NYLHc9bC5waXhlbHMubnVtQmxvY2tzWSxPPU1hdGguZmxvb3IobC53aWR0aC9iKSxFPU1hdGguZmxvb3IobC5oZWlnaHQvdyksVD0yKmwubWF4WkVycm9yLHg9TnVtYmVyLk1BWF9WQUxVRSxNO2Q9ZHx8KGwubWFzaz9sLm1hc2suYml0c2V0Om51bGwpO3ZhciBOLEY7Tj1uZXcgcChsLndpZHRoKmwuaGVpZ2h0KSxfJiZkJiYoRj1uZXcgVWludDhBcnJheShsLndpZHRoKmwuaGVpZ2h0KSk7Zm9yKHZhciBJPW5ldyBGbG9hdDMyQXJyYXkoTypFKSx2LEIsQT0wO0E8PXc7QSsrKXt2YXIgUz1BIT09dz9FOmwuaGVpZ2h0JXc7aWYoUyE9PTApZm9yKHZhciBDPTA7Qzw9YjtDKyspe3ZhciBMPUMhPT1iP086bC53aWR0aCViO2lmKEwhPT0wKXt2YXIgej1BKmwud2lkdGgqRStDKk8saj1sLndpZHRoLUwsaz1sLnBpeGVscy5ibG9ja3NbZ10scSxXLFI7ay5lbmNvZGluZzwyPyhrLmVuY29kaW5nPT09MD9xPWsucmF3RGF0YTooYyhrLnN0dWZmZWREYXRhLGsuYml0c1BlclBpeGVsLGsubnVtVmFsaWRQaXhlbHMsay5vZmZzZXQsVCxJLGwucGl4ZWxzLm1heFZhbHVlKSxxPUkpLFc9MCk6ay5lbmNvZGluZz09PTI/Uj0wOlI9ay5vZmZzZXQ7dmFyIG50O2lmKGQpZm9yKEI9MDtCPFM7QisrKXtmb3IoeiY3JiYobnQ9ZFt6Pj4zXSxudDw8PXomNyksdj0wO3Y8TDt2KyspeiY3fHwobnQ9ZFt6Pj4zXSksbnQmMTI4PyhGJiYoRlt6XT0xKSxNPWsuZW5jb2Rpbmc8Mj9xW1crK106Uix4PXg+TT9NOngsTlt6KytdPU0pOihGJiYoRlt6XT0wKSxOW3orK109aCksbnQ8PD0xO3orPWp9ZWxzZSBpZihrLmVuY29kaW5nPDIpZm9yKEI9MDtCPFM7QisrKXtmb3Iodj0wO3Y8TDt2KyspTT1xW1crK10seD14Pk0/TTp4LE5beisrXT1NO3orPWp9ZWxzZSBmb3IoeD14PlI/Ujp4LEI9MDtCPFM7QisrKXtmb3Iodj0wO3Y8TDt2KyspTlt6KytdPVI7eis9an1pZihrLmVuY29kaW5nPT09MSYmVyE9PWsubnVtVmFsaWRQaXhlbHMpdGhyb3ciQmxvY2sgYW5kIE1hc2sgZG8gbm90IG1hdGNoIjtnKyt9fX1yZXR1cm57cmVzdWx0UGl4ZWxzOk4scmVzdWx0TWFzazpGLG1pblZhbHVlOnh9fSxzPWZ1bmN0aW9uKGwpe3JldHVybntmaWxlSWRlbnRpZmllclN0cmluZzpsLmZpbGVJZGVudGlmaWVyU3RyaW5nLGZpbGVWZXJzaW9uOmwuZmlsZVZlcnNpb24saW1hZ2VUeXBlOmwuaW1hZ2VUeXBlLGhlaWdodDpsLmhlaWdodCx3aWR0aDpsLndpZHRoLG1heFpFcnJvcjpsLm1heFpFcnJvcixlb2ZPZmZzZXQ6bC5lb2ZPZmZzZXQsbWFzazpsLm1hc2s/e251bUJsb2Nrc1g6bC5tYXNrLm51bUJsb2Nrc1gsbnVtQmxvY2tzWTpsLm1hc2subnVtQmxvY2tzWSxudW1CeXRlczpsLm1hc2subnVtQnl0ZXMsbWF4VmFsdWU6bC5tYXNrLm1heFZhbHVlfTpudWxsLHBpeGVsczp7bnVtQmxvY2tzWDpsLnBpeGVscy5udW1CbG9ja3NYLG51bUJsb2Nrc1k6bC5waXhlbHMubnVtQmxvY2tzWSxudW1CeXRlczpsLnBpeGVscy5udW1CeXRlcyxtYXhWYWx1ZTpsLnBpeGVscy5tYXhWYWx1ZSxub0RhdGFWYWx1ZTpsLm5vRGF0YVZhbHVlfX19LGY9ZnVuY3Rpb24obCl7Zm9yKHZhciBwPWwucGl4ZWxzLm51bUJsb2Nrc1gqbC5waXhlbHMubnVtQmxvY2tzWSxkPXt9LGg9MDtoPHA7aCsrKXt2YXIgXz1sLnBpeGVscy5ibG9ja3NbaF07Xy5lbmNvZGluZz09PTA/ZC5mbG9hdDMyPSEwOl8uZW5jb2Rpbmc9PT0xP2RbXy5iaXRzUGVyUGl4ZWxdPSEwOmRbMF09ITB9cmV0dXJuIE9iamVjdC5rZXlzKGQpfSx1PWZ1bmN0aW9uKGwscCxkKXt2YXIgaD17fSxfPW5ldyBVaW50OEFycmF5KGwscCwxMCk7aWYoaC5maWxlSWRlbnRpZmllclN0cmluZz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsXyksaC5maWxlSWRlbnRpZmllclN0cmluZy50cmltKCkhPT0iQ250WkltYWdlIil0aHJvdyJVbmV4cGVjdGVkIGZpbGUgaWRlbnRpZmllciBzdHJpbmc6ICIraC5maWxlSWRlbnRpZmllclN0cmluZztwKz0xMDt2YXIgZz1uZXcgRGF0YVZpZXcobCxwLDI0KTtpZihoLmZpbGVWZXJzaW9uPWcuZ2V0SW50MzIoMCwhMCksaC5pbWFnZVR5cGU9Zy5nZXRJbnQzMig0LCEwKSxoLmhlaWdodD1nLmdldFVpbnQzMig4LCEwKSxoLndpZHRoPWcuZ2V0VWludDMyKDEyLCEwKSxoLm1heFpFcnJvcj1nLmdldEZsb2F0NjQoMTYsITApLHArPTI0LCFkKWlmKGc9bmV3IERhdGFWaWV3KGwscCwxNiksaC5tYXNrPXt9LGgubWFzay5udW1CbG9ja3NZPWcuZ2V0VWludDMyKDAsITApLGgubWFzay5udW1CbG9ja3NYPWcuZ2V0VWludDMyKDQsITApLGgubWFzay5udW1CeXRlcz1nLmdldFVpbnQzMig4LCEwKSxoLm1hc2subWF4VmFsdWU9Zy5nZXRGbG9hdDMyKDEyLCEwKSxwKz0xNixoLm1hc2subnVtQnl0ZXM+MCl7dmFyIGI9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKGgud2lkdGgqaC5oZWlnaHQvOCkpO2c9bmV3IERhdGFWaWV3KGwscCxoLm1hc2subnVtQnl0ZXMpO3ZhciB3PWcuZ2V0SW50MTYoMCwhMCksTz0yLEU9MDtkb3tpZih3PjApZm9yKDt3LS07KWJbRSsrXT1nLmdldFVpbnQ4KE8rKyk7ZWxzZXt2YXIgVD1nLmdldFVpbnQ4KE8rKyk7Zm9yKHc9LXc7dy0tOyliW0UrK109VH13PWcuZ2V0SW50MTYoTywhMCksTys9Mn13aGlsZShPPGgubWFzay5udW1CeXRlcyk7aWYodyE9PS0zMjc2OHx8RTxiLmxlbmd0aCl0aHJvdyJVbmV4cGVjdGVkIGVuZCBvZiBtYXNrIFJMRSBlbmNvZGluZyI7aC5tYXNrLmJpdHNldD1iLHArPWgubWFzay5udW1CeXRlc31lbHNlKGgubWFzay5udW1CeXRlc3xoLm1hc2subnVtQmxvY2tzWXxoLm1hc2subWF4VmFsdWUpPT09MCYmKGgubWFzay5iaXRzZXQ9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKGgud2lkdGgqaC5oZWlnaHQvOCkpKTtnPW5ldyBEYXRhVmlldyhsLHAsMTYpLGgucGl4ZWxzPXt9LGgucGl4ZWxzLm51bUJsb2Nrc1k9Zy5nZXRVaW50MzIoMCwhMCksaC5waXhlbHMubnVtQmxvY2tzWD1nLmdldFVpbnQzMig0LCEwKSxoLnBpeGVscy5udW1CeXRlcz1nLmdldFVpbnQzMig4LCEwKSxoLnBpeGVscy5tYXhWYWx1ZT1nLmdldEZsb2F0MzIoMTIsITApLHArPTE2O3ZhciB4PWgucGl4ZWxzLm51bUJsb2Nrc1gsTT1oLnBpeGVscy5udW1CbG9ja3NZLE49eCsoaC53aWR0aCV4PjA/MTowKSxGPU0rKGguaGVpZ2h0JU0+MD8xOjApO2gucGl4ZWxzLmJsb2Nrcz1uZXcgQXJyYXkoTipGKTtmb3IodmFyIEk9MCx2PTA7djxGO3YrKylmb3IodmFyIEI9MDtCPE47QisrKXt2YXIgQT0wLFM9bC5ieXRlTGVuZ3RoLXA7Zz1uZXcgRGF0YVZpZXcobCxwLE1hdGgubWluKDEwLFMpKTt2YXIgQz17fTtoLnBpeGVscy5ibG9ja3NbSSsrXT1DO3ZhciBMPWcuZ2V0VWludDgoMCk7aWYoQSsrLEMuZW5jb2Rpbmc9TCY2MyxDLmVuY29kaW5nPjMpdGhyb3ciSW52YWxpZCBibG9jayBlbmNvZGluZyAoIitDLmVuY29kaW5nKyIpIjtpZihDLmVuY29kaW5nPT09Mil7cCsrO2NvbnRpbnVlfWlmKEwhPT0wJiZMIT09Mil7aWYoTD4+PTYsQy5vZmZzZXRUeXBlPUwsTD09PTIpQy5vZmZzZXQ9Zy5nZXRJbnQ4KDEpLEErKztlbHNlIGlmKEw9PT0xKUMub2Zmc2V0PWcuZ2V0SW50MTYoMSwhMCksQSs9MjtlbHNlIGlmKEw9PT0wKUMub2Zmc2V0PWcuZ2V0RmxvYXQzMigxLCEwKSxBKz00O2Vsc2UgdGhyb3ciSW52YWxpZCBibG9jayBvZmZzZXQgdHlwZSI7aWYoQy5lbmNvZGluZz09PTEpaWYoTD1nLmdldFVpbnQ4KEEpLEErKyxDLmJpdHNQZXJQaXhlbD1MJjYzLEw+Pj02LEMubnVtVmFsaWRQaXhlbHNUeXBlPUwsTD09PTIpQy5udW1WYWxpZFBpeGVscz1nLmdldFVpbnQ4KEEpLEErKztlbHNlIGlmKEw9PT0xKUMubnVtVmFsaWRQaXhlbHM9Zy5nZXRVaW50MTYoQSwhMCksQSs9MjtlbHNlIGlmKEw9PT0wKUMubnVtVmFsaWRQaXhlbHM9Zy5nZXRVaW50MzIoQSwhMCksQSs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSJ9aWYocCs9QSxDLmVuY29kaW5nIT09Myl7dmFyIHosajtpZihDLmVuY29kaW5nPT09MCl7dmFyIGs9KGgucGl4ZWxzLm51bUJ5dGVzLTEpLzQ7aWYoayE9PU1hdGguZmxvb3IoaykpdGhyb3cidW5jb21wcmVzc2VkIGJsb2NrIGhhcyBpbnZhbGlkIGxlbmd0aCI7ej1uZXcgQXJyYXlCdWZmZXIoayo0KSxqPW5ldyBVaW50OEFycmF5KHopLGouc2V0KG5ldyBVaW50OEFycmF5KGwscCxrKjQpKTt2YXIgcT1uZXcgRmxvYXQzMkFycmF5KHopO0MucmF3RGF0YT1xLHArPWsqNH1lbHNlIGlmKEMuZW5jb2Rpbmc9PT0xKXt2YXIgVz1NYXRoLmNlaWwoQy5udW1WYWxpZFBpeGVscypDLmJpdHNQZXJQaXhlbC84KSxSPU1hdGguY2VpbChXLzQpO3o9bmV3IEFycmF5QnVmZmVyKFIqNCksaj1uZXcgVWludDhBcnJheSh6KSxqLnNldChuZXcgVWludDhBcnJheShsLHAsVykpLEMuc3R1ZmZlZERhdGE9bmV3IFVpbnQzMkFycmF5KHopLHArPVd9fX1yZXR1cm4gaC5lb2ZPZmZzZXQ9cCxofSxjPWZ1bmN0aW9uKGwscCxkLGgsXyxnLGIpe3ZhciB3PSgxPDxwKS0xLE89MCxFLFQ9MCx4LE0sTj1NYXRoLmNlaWwoKGItaCkvXyksRj1sLmxlbmd0aCo0LU1hdGguY2VpbChwKmQvOCk7Zm9yKGxbbC5sZW5ndGgtMV08PD04KkYsRT0wO0U8ZDtFKyspe2lmKFQ9PT0wJiYoTT1sW08rK10sVD0zMiksVD49cCl4PU0+Pj5ULXAmdyxULT1wO2Vsc2V7dmFyIEk9cC1UO3g9KE0mdyk8PEkmdyxNPWxbTysrXSxUPTMyLUkseCs9TT4+PlR9Z1tFXT14PE4/aCt4Kl86Yn1yZXR1cm4gZ307cmV0dXJuIHJ9KCksZT1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgcj17dW5zdHVmZjpmdW5jdGlvbih1LGMsbCxwLGQsaCxfLGcpe3ZhciBiPSgxPDxsKS0xLHc9MCxPLEU9MCxULHgsTSxOLEY9dS5sZW5ndGgqNC1NYXRoLmNlaWwobCpwLzgpO2lmKHVbdS5sZW5ndGgtMV08PD04KkYsZClmb3IoTz0wO088cDtPKyspRT09PTAmJih4PXVbdysrXSxFPTMyKSxFPj1sPyhUPXg+Pj5FLWwmYixFLT1sKTooTT1sLUUsVD0oeCZiKTw8TSZiLHg9dVt3KytdLEU9MzItTSxUKz14Pj4+RSksY1tPXT1kW1RdO2Vsc2UgZm9yKE49TWF0aC5jZWlsKChnLWgpL18pLE89MDtPPHA7TysrKUU9PT0wJiYoeD11W3crK10sRT0zMiksRT49bD8oVD14Pj4+RS1sJmIsRS09bCk6KE09bC1FLFQ9KHgmYik8PE0mYix4PXVbdysrXSxFPTMyLU0sVCs9eD4+PkUpLGNbT109VDxOP2grVCpfOmd9LHVuc3R1ZmZMVVQ6ZnVuY3Rpb24odSxjLGwscCxkLGgpe3ZhciBfPSgxPDxjKS0xLGc9MCxiPTAsdz0wLE89MCxFPTAsVCx4PVtdLE09dS5sZW5ndGgqNC1NYXRoLmNlaWwoYypsLzgpO3VbdS5sZW5ndGgtMV08PD04Kk07dmFyIE49TWF0aC5jZWlsKChoLXApL2QpO2ZvcihiPTA7YjxsO2IrKylPPT09MCYmKFQ9dVtnKytdLE89MzIpLE8+PWM/KEU9VD4+Pk8tYyZfLE8tPWMpOih3PWMtTyxFPShUJl8pPDx3Jl8sVD11W2crK10sTz0zMi13LEUrPVQ+Pj5PKSx4W2JdPUU8Tj9wK0UqZDpoO3JldHVybiB4LnVuc2hpZnQocCkseH0sdW5zdHVmZjI6ZnVuY3Rpb24odSxjLGwscCxkLGgsXyxnKXt2YXIgYj0oMTw8bCktMSx3PTAsTyxFPTAsVD0wLHgsTSxOO2lmKGQpZm9yKE89MDtPPHA7TysrKUU9PT0wJiYoTT11W3crK10sRT0zMixUPTApLEU+PWw/KHg9TT4+PlQmYixFLT1sLFQrPWwpOihOPWwtRSx4PU0+Pj5UJmIsTT11W3crK10sRT0zMi1OLHh8PShNJigxPDxOKS0xKTw8bC1OLFQ9TiksY1tPXT1kW3hdO2Vsc2V7dmFyIEY9TWF0aC5jZWlsKChnLWgpL18pO2ZvcihPPTA7TzxwO08rKylFPT09MCYmKE09dVt3KytdLEU9MzIsVD0wKSxFPj1sPyh4PU0+Pj5UJmIsRS09bCxUKz1sKTooTj1sLUUseD1NPj4+VCZiLE09dVt3KytdLEU9MzItTix4fD0oTSYoMTw8TiktMSk8PGwtTixUPU4pLGNbT109eDxGP2greCpfOmd9cmV0dXJuIGN9LHVuc3R1ZmZMVVQyOmZ1bmN0aW9uKHUsYyxsLHAsZCxoKXt2YXIgXz0oMTw8YyktMSxnPTAsYj0wLHc9MCxPPTAsRT0wLFQ9MCx4LE09W10sTj1NYXRoLmNlaWwoKGgtcCkvZCk7Zm9yKGI9MDtiPGw7YisrKU89PT0wJiYoeD11W2crK10sTz0zMixUPTApLE8+PWM/KEU9eD4+PlQmXyxPLT1jLFQrPWMpOih3PWMtTyxFPXg+Pj5UJl8seD11W2crK10sTz0zMi13LEV8PSh4JigxPDx3KS0xKTw8Yy13LFQ9dyksTVtiXT1FPE4/cCtFKmQ6aDtyZXR1cm4gTS51bnNoaWZ0KHApLE19LG9yaWdpbmFsVW5zdHVmZjpmdW5jdGlvbih1LGMsbCxwKXt2YXIgZD0oMTw8bCktMSxoPTAsXyxnPTAsYix3LE8sRT11Lmxlbmd0aCo0LU1hdGguY2VpbChsKnAvOCk7Zm9yKHVbdS5sZW5ndGgtMV08PD04KkUsXz0wO188cDtfKyspZz09PTAmJih3PXVbaCsrXSxnPTMyKSxnPj1sPyhiPXc+Pj5nLWwmZCxnLT1sKTooTz1sLWcsYj0odyZkKTw8TyZkLHc9dVtoKytdLGc9MzItTyxiKz13Pj4+ZyksY1tfXT1iO3JldHVybiBjfSxvcmlnaW5hbFVuc3R1ZmYyOmZ1bmN0aW9uKHUsYyxsLHApe3ZhciBkPSgxPDxsKS0xLGg9MCxfLGc9MCxiPTAsdyxPLEU7Zm9yKF89MDtfPHA7XysrKWc9PT0wJiYoTz11W2grK10sZz0zMixiPTApLGc+PWw/KHc9Tz4+PmImZCxnLT1sLGIrPWwpOihFPWwtZyx3PU8+Pj5iJmQsTz11W2grK10sZz0zMi1FLHd8PShPJigxPDxFKS0xKTw8bC1FLGI9RSksY1tfXT13O3JldHVybiBjfX0saT17SFVGRk1BTl9MVVRfQklUU19NQVg6MTIsY29tcHV0ZUNoZWNrc3VtRmxldGNoZXIzMjpmdW5jdGlvbih1KXtmb3IodmFyIGM9NjU1MzUsbD02NTUzNSxwPXUubGVuZ3RoLGQ9TWF0aC5mbG9vcihwLzIpLGg9MDtkOyl7dmFyIF89ZD49MzU5PzM1OTpkO2QtPV87ZG8gYys9dVtoKytdPDw4LGwrPWMrPXVbaCsrXTt3aGlsZSgtLV8pO2M9KGMmNjU1MzUpKyhjPj4+MTYpLGw9KGwmNjU1MzUpKyhsPj4+MTYpfXJldHVybiBwJjEmJihsKz1jKz11W2hdPDw4KSxjPShjJjY1NTM1KSsoYz4+PjE2KSxsPShsJjY1NTM1KSsobD4+PjE2KSwobDw8MTZ8Yyk+Pj4wfSxyZWFkSGVhZGVySW5mbzpmdW5jdGlvbih1LGMpe3ZhciBsPWMucHRyLHA9bmV3IFVpbnQ4QXJyYXkodSxsLDYpLGQ9e307aWYoZC5maWxlSWRlbnRpZmllclN0cmluZz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwscCksZC5maWxlSWRlbnRpZmllclN0cmluZy5sYXN0SW5kZXhPZigiTGVyYzIiLDApIT09MCl0aHJvdyJVbmV4cGVjdGVkIGZpbGUgaWRlbnRpZmllciBzdHJpbmcgKGV4cGVjdCBMZXJjMiApOiAiK2QuZmlsZUlkZW50aWZpZXJTdHJpbmc7bCs9Njt2YXIgaD1uZXcgRGF0YVZpZXcodSxsLDgpLF89aC5nZXRJbnQzMigwLCEwKTtkLmZpbGVWZXJzaW9uPV8sbCs9NCxfPj0zJiYoZC5jaGVja3N1bT1oLmdldFVpbnQzMig0LCEwKSxsKz00KSxoPW5ldyBEYXRhVmlldyh1LGwsMTIpLGQuaGVpZ2h0PWguZ2V0VWludDMyKDAsITApLGQud2lkdGg9aC5nZXRVaW50MzIoNCwhMCksbCs9OCxfPj00PyhkLm51bURpbXM9aC5nZXRVaW50MzIoOCwhMCksbCs9NCk6ZC5udW1EaW1zPTEsaD1uZXcgRGF0YVZpZXcodSxsLDQwKSxkLm51bVZhbGlkUGl4ZWw9aC5nZXRVaW50MzIoMCwhMCksZC5taWNyb0Jsb2NrU2l6ZT1oLmdldEludDMyKDQsITApLGQuYmxvYlNpemU9aC5nZXRJbnQzMig4LCEwKSxkLmltYWdlVHlwZT1oLmdldEludDMyKDEyLCEwKSxkLm1heFpFcnJvcj1oLmdldEZsb2F0NjQoMTYsITApLGQuek1pbj1oLmdldEZsb2F0NjQoMjQsITApLGQuek1heD1oLmdldEZsb2F0NjQoMzIsITApLGwrPTQwLGMuaGVhZGVySW5mbz1kLGMucHRyPWw7dmFyIGcsYjtpZihfPj0zJiYoYj1fPj00PzUyOjQ4LGc9dGhpcy5jb21wdXRlQ2hlY2tzdW1GbGV0Y2hlcjMyKG5ldyBVaW50OEFycmF5KHUsbC1iLGQuYmxvYlNpemUtMTQpKSxnIT09ZC5jaGVja3N1bSkpdGhyb3ciQ2hlY2tzdW0gZmFpbGVkLiI7cmV0dXJuITB9LGNoZWNrTWluTWF4UmFuZ2VzOmZ1bmN0aW9uKHUsYyl7dmFyIGw9Yy5oZWFkZXJJbmZvLHA9dGhpcy5nZXREYXRhVHlwZUFycmF5KGwuaW1hZ2VUeXBlKSxkPWwubnVtRGltcyp0aGlzLmdldERhdGFUeXBlU2l6ZShsLmltYWdlVHlwZSksaD10aGlzLnJlYWRTdWJBcnJheSh1LGMucHRyLHAsZCksXz10aGlzLnJlYWRTdWJBcnJheSh1LGMucHRyK2QscCxkKTtjLnB0cis9MipkO3ZhciBnLGI9ITA7Zm9yKGc9MDtnPGwubnVtRGltcztnKyspaWYoaFtnXSE9PV9bZ10pe2I9ITE7YnJlYWt9cmV0dXJuIGwubWluVmFsdWVzPWgsbC5tYXhWYWx1ZXM9XyxifSxyZWFkU3ViQXJyYXk6ZnVuY3Rpb24odSxjLGwscCl7dmFyIGQ7aWYobD09PVVpbnQ4QXJyYXkpZD1uZXcgVWludDhBcnJheSh1LGMscCk7ZWxzZXt2YXIgaD1uZXcgQXJyYXlCdWZmZXIocCksXz1uZXcgVWludDhBcnJheShoKTtfLnNldChuZXcgVWludDhBcnJheSh1LGMscCkpLGQ9bmV3IGwoaCl9cmV0dXJuIGR9LHJlYWRNYXNrOmZ1bmN0aW9uKHUsYyl7dmFyIGw9Yy5wdHIscD1jLmhlYWRlckluZm8sZD1wLndpZHRoKnAuaGVpZ2h0LGg9cC5udW1WYWxpZFBpeGVsLF89bmV3IERhdGFWaWV3KHUsbCw0KSxnPXt9O2lmKGcubnVtQnl0ZXM9Xy5nZXRVaW50MzIoMCwhMCksbCs9NCwoaD09PTB8fGQ9PT1oKSYmZy5udW1CeXRlcyE9PTApdGhyb3ciaW52YWxpZCBtYXNrIjt2YXIgYix3O2lmKGg9PT0wKWI9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKGQvOCkpLGcuYml0c2V0PWIsdz1uZXcgVWludDhBcnJheShkKSxjLnBpeGVscy5yZXN1bHRNYXNrPXcsbCs9Zy5udW1CeXRlcztlbHNlIGlmKGcubnVtQnl0ZXM+MCl7Yj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoZC84KSksXz1uZXcgRGF0YVZpZXcodSxsLGcubnVtQnl0ZXMpO3ZhciBPPV8uZ2V0SW50MTYoMCwhMCksRT0yLFQ9MCx4PTA7ZG97aWYoTz4wKWZvcig7Ty0tOyliW1QrK109Xy5nZXRVaW50OChFKyspO2Vsc2UgZm9yKHg9Xy5nZXRVaW50OChFKyspLE89LU87Ty0tOyliW1QrK109eDtPPV8uZ2V0SW50MTYoRSwhMCksRSs9Mn13aGlsZShFPGcubnVtQnl0ZXMpO2lmKE8hPT0tMzI3Njh8fFQ8Yi5sZW5ndGgpdGhyb3ciVW5leHBlY3RlZCBlbmQgb2YgbWFzayBSTEUgZW5jb2RpbmciO3c9bmV3IFVpbnQ4QXJyYXkoZCk7dmFyIE09MCxOPTA7Zm9yKE49MDtOPGQ7TisrKU4mNz8oTT1iW04+PjNdLE08PD1OJjcpOk09YltOPj4zXSxNJjEyOCYmKHdbTl09MSk7Yy5waXhlbHMucmVzdWx0TWFzaz13LGcuYml0c2V0PWIsbCs9Zy5udW1CeXRlc31yZXR1cm4gYy5wdHI9bCxjLm1hc2s9ZywhMH0scmVhZERhdGFPbmVTd2VlcDpmdW5jdGlvbih1LGMsbCl7dmFyIHA9Yy5wdHIsZD1jLmhlYWRlckluZm8saD1kLm51bURpbXMsXz1kLndpZHRoKmQuaGVpZ2h0LGc9ZC5pbWFnZVR5cGUsYj1kLm51bVZhbGlkUGl4ZWwqaS5nZXREYXRhVHlwZVNpemUoZykqaCx3LE89Yy5waXhlbHMucmVzdWx0TWFzaztpZihsPT09VWludDhBcnJheSl3PW5ldyBVaW50OEFycmF5KHUscCxiKTtlbHNle3ZhciBFPW5ldyBBcnJheUJ1ZmZlcihiKSxUPW5ldyBVaW50OEFycmF5KEUpO1Quc2V0KG5ldyBVaW50OEFycmF5KHUscCxiKSksdz1uZXcgbChFKX1pZih3Lmxlbmd0aD09PV8qaCljLnBpeGVscy5yZXN1bHRQaXhlbHM9dztlbHNle2MucGl4ZWxzLnJlc3VsdFBpeGVscz1uZXcgbChfKmgpO3ZhciB4PTAsTT0wLE49MCxGPTA7aWYoaD4xKWZvcihOPTA7TjxoO04rKylmb3IoRj1OKl8sTT0wO008XztNKyspT1tNXSYmKGMucGl4ZWxzLnJlc3VsdFBpeGVsc1tGK01dPXdbeCsrXSk7ZWxzZSBmb3IoTT0wO008XztNKyspT1tNXSYmKGMucGl4ZWxzLnJlc3VsdFBpeGVsc1tNXT13W3grK10pfXJldHVybiBwKz1iLGMucHRyPXAsITB9LHJlYWRIdWZmbWFuVHJlZTpmdW5jdGlvbih1LGMpe3ZhciBsPXRoaXMuSFVGRk1BTl9MVVRfQklUU19NQVgscD1uZXcgRGF0YVZpZXcodSxjLnB0ciwxNik7Yy5wdHIrPTE2O3ZhciBkPXAuZ2V0SW50MzIoMCwhMCk7aWYoZDwyKXRocm93InVuc3VwcG9ydGVkIEh1ZmZtYW4gdmVyc2lvbiI7dmFyIGg9cC5nZXRJbnQzMig0LCEwKSxfPXAuZ2V0SW50MzIoOCwhMCksZz1wLmdldEludDMyKDEyLCEwKTtpZihfPj1nKXJldHVybiExO3ZhciBiPW5ldyBVaW50MzJBcnJheShnLV8pO2kuZGVjb2RlQml0cyh1LGMsYik7dmFyIHc9W10sTyxFLFQseDtmb3IoTz1fO088ZztPKyspRT1PLShPPGg/MDpoKSx3W0VdPXtmaXJzdDpiW08tX10sc2Vjb25kOm51bGx9O3ZhciBNPXUuYnl0ZUxlbmd0aC1jLnB0cixOPU1hdGguY2VpbChNLzQpLEY9bmV3IEFycmF5QnVmZmVyKE4qNCksST1uZXcgVWludDhBcnJheShGKTtJLnNldChuZXcgVWludDhBcnJheSh1LGMucHRyLE0pKTt2YXIgdj1uZXcgVWludDMyQXJyYXkoRiksQj0wLEEsUz0wO2ZvcihBPXZbMF0sTz1fO088ZztPKyspRT1PLShPPGg/MDpoKSx4PXdbRV0uZmlyc3QseD4wJiYod1tFXS5zZWNvbmQ9QTw8Qj4+PjMyLXgsMzItQj49eD8oQis9eCxCPT09MzImJihCPTAsUysrLEE9dltTXSkpOihCKz14LTMyLFMrKyxBPXZbU10sd1tFXS5zZWNvbmR8PUE+Pj4zMi1CKSk7dmFyIEM9MCxMPTAsej1uZXcgcztmb3IoTz0wO088dy5sZW5ndGg7TysrKXdbT10hPT12b2lkIDAmJihDPU1hdGgubWF4KEMsd1tPXS5maXJzdCkpO0M+PWw/TD1sOkw9QyxDPj0zMCYmY29uc29sZS5sb2coIldBUm5pbmcsIGxhcmdlIE5VTSBMVVQgQklUUyBJUyAiK0MpO3ZhciBqPVtdLGsscSxXLFIsbnQsYXQ7Zm9yKE89XztPPGc7TysrKWlmKEU9Ty0oTzxoPzA6aCkseD13W0VdLmZpcnN0LHg+MClpZihrPVt4LEVdLHg8PUwpZm9yKHE9d1tFXS5zZWNvbmQ8PEwteCxXPTE8PEwteCxUPTA7VDxXO1QrKylqW3F8VF09aztlbHNlIGZvcihxPXdbRV0uc2Vjb25kLGF0PXosUj14LTE7Uj49MDtSLS0pbnQ9cT4+PlImMSxudD8oYXQucmlnaHR8fChhdC5yaWdodD1uZXcgcyksYXQ9YXQucmlnaHQpOihhdC5sZWZ0fHwoYXQubGVmdD1uZXcgcyksYXQ9YXQubGVmdCksUj09PTAmJiFhdC52YWwmJihhdC52YWw9a1sxXSk7cmV0dXJue2RlY29kZUx1dDpqLG51bUJpdHNMVVRRaWNrOkwsbnVtQml0c0xVVDpDLHRyZWU6eixzdHVmZmVkRGF0YTp2LHNyY1B0cjpTLGJpdFBvczpCfX0scmVhZEh1ZmZtYW46ZnVuY3Rpb24odSxjLGwpe3ZhciBwPWMuaGVhZGVySW5mbyxkPXAubnVtRGltcyxoPWMuaGVhZGVySW5mby5oZWlnaHQsXz1jLmhlYWRlckluZm8ud2lkdGgsZz1fKmgsYj10aGlzLnJlYWRIdWZmbWFuVHJlZSh1LGMpLHc9Yi5kZWNvZGVMdXQsTz1iLnRyZWUsRT1iLnN0dWZmZWREYXRhLFQ9Yi5zcmNQdHIseD1iLmJpdFBvcyxNPWIubnVtQml0c0xVVFFpY2ssTj1iLm51bUJpdHNMVVQsRj1jLmhlYWRlckluZm8uaW1hZ2VUeXBlPT09MD8xMjg6MCxJLHYsQixBPWMucGl4ZWxzLnJlc3VsdE1hc2ssUyxDLEwseixqLGsscSxXPTA7eD4wJiYoVCsrLHg9MCk7dmFyIFI9RVtUXSxudD1jLmVuY29kZU1vZGU9PT0xLGF0PW5ldyBsKGcqZCksbHQ9YXQsX3Q7Zm9yKF90PTA7X3Q8cC5udW1EaW1zO190Kyspe2lmKGQ+MSYmKGx0PW5ldyBsKGF0LmJ1ZmZlcixnKl90LGcpLFc9MCksYy5oZWFkZXJJbmZvLm51bVZhbGlkUGl4ZWw9PT1fKmgpZm9yKGs9MCx6PTA7ejxoO3orKylmb3Ioaj0wO2o8XztqKyssaysrKXtpZih2PTAsUz1SPDx4Pj4+MzItTSxDPVMsMzIteDxNJiYoU3w9RVtUKzFdPj4+NjQteC1NLEM9Uyksd1tDXSl2PXdbQ11bMV0seCs9d1tDXVswXTtlbHNlIGZvcihTPVI8PHg+Pj4zMi1OLEM9UywzMi14PE4mJihTfD1FW1QrMV0+Pj42NC14LU4sQz1TKSxJPU8scT0wO3E8TjtxKyspaWYoTD1TPj4+Ti1xLTEmMSxJPUw/SS5yaWdodDpJLmxlZnQsIShJLmxlZnR8fEkucmlnaHQpKXt2PUkudmFsLHg9eCtxKzE7YnJlYWt9eD49MzImJih4LT0zMixUKyssUj1FW1RdKSxCPXYtRixudD8oaj4wP0IrPVc6ej4wP0IrPWx0W2stX106Qis9VyxCJj0yNTUsbHRba109QixXPUIpOmx0W2tdPUJ9ZWxzZSBmb3Ioaz0wLHo9MDt6PGg7eisrKWZvcihqPTA7ajxfO2orKyxrKyspaWYoQVtrXSl7aWYodj0wLFM9Ujw8eD4+PjMyLU0sQz1TLDMyLXg8TSYmKFN8PUVbVCsxXT4+PjY0LXgtTSxDPVMpLHdbQ10pdj13W0NdWzFdLHgrPXdbQ11bMF07ZWxzZSBmb3IoUz1SPDx4Pj4+MzItTixDPVMsMzIteDxOJiYoU3w9RVtUKzFdPj4+NjQteC1OLEM9UyksST1PLHE9MDtxPE47cSsrKWlmKEw9Uz4+Pk4tcS0xJjEsST1MP0kucmlnaHQ6SS5sZWZ0LCEoSS5sZWZ0fHxJLnJpZ2h0KSl7dj1JLnZhbCx4PXgrcSsxO2JyZWFrfXg+PTMyJiYoeC09MzIsVCsrLFI9RVtUXSksQj12LUYsbnQ/KGo+MCYmQVtrLTFdP0IrPVc6ej4wJiZBW2stX10/Qis9bHRbay1fXTpCKz1XLEImPTI1NSxsdFtrXT1CLFc9Qik6bHRba109Qn1jLnB0cj1jLnB0cisoVCsxKSo0Kyh4PjA/NDowKX1jLnBpeGVscy5yZXN1bHRQaXhlbHM9YXR9LGRlY29kZUJpdHM6ZnVuY3Rpb24odSxjLGwscCxkKXt7dmFyIGg9Yy5oZWFkZXJJbmZvLF89aC5maWxlVmVyc2lvbixnPTAsYj1uZXcgRGF0YVZpZXcodSxjLnB0ciw1KSx3PWIuZ2V0VWludDgoMCk7ZysrO3ZhciBPPXc+PjYsRT1PPT09MD80OjMtTyxUPSh3JjMyKT4wLHg9dyYzMSxNPTA7aWYoRT09PTEpTT1iLmdldFVpbnQ4KGcpLGcrKztlbHNlIGlmKEU9PT0yKU09Yi5nZXRVaW50MTYoZywhMCksZys9MjtlbHNlIGlmKEU9PT00KU09Yi5nZXRVaW50MzIoZywhMCksZys9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSI7dmFyIE49MipoLm1heFpFcnJvcixGLEksdixCLEEsUyxDLEwseixqLGs9aC5udW1EaW1zPjE/aC5tYXhWYWx1ZXNbZF06aC56TWF4O2lmKFQpe2ZvcihjLmNvdW50ZXIubHV0KyssTD1iLmdldFVpbnQ4KGcpLHo9eCxnKyssQj1NYXRoLmNlaWwoKEwtMSkqeC84KSxBPU1hdGguY2VpbChCLzQpLEk9bmV3IEFycmF5QnVmZmVyKEEqNCksdj1uZXcgVWludDhBcnJheShJKSxjLnB0cis9Zyx2LnNldChuZXcgVWludDhBcnJheSh1LGMucHRyLEIpKSxDPW5ldyBVaW50MzJBcnJheShJKSxjLnB0cis9QixqPTA7TC0xPj4+ajspaisrO0I9TWF0aC5jZWlsKE0qai84KSxBPU1hdGguY2VpbChCLzQpLEk9bmV3IEFycmF5QnVmZmVyKEEqNCksdj1uZXcgVWludDhBcnJheShJKSx2LnNldChuZXcgVWludDhBcnJheSh1LGMucHRyLEIpKSxGPW5ldyBVaW50MzJBcnJheShJKSxjLnB0cis9QixfPj0zP1M9ci51bnN0dWZmTFVUMihDLHgsTC0xLHAsTixrKTpTPXIudW5zdHVmZkxVVChDLHgsTC0xLHAsTixrKSxfPj0zP3IudW5zdHVmZjIoRixsLGosTSxTKTpyLnVuc3R1ZmYoRixsLGosTSxTKX1lbHNlIGMuY291bnRlci5iaXRzdHVmZmVyKyssaj14LGMucHRyKz1nLGo+MCYmKEI9TWF0aC5jZWlsKE0qai84KSxBPU1hdGguY2VpbChCLzQpLEk9bmV3IEFycmF5QnVmZmVyKEEqNCksdj1uZXcgVWludDhBcnJheShJKSx2LnNldChuZXcgVWludDhBcnJheSh1LGMucHRyLEIpKSxGPW5ldyBVaW50MzJBcnJheShJKSxjLnB0cis9QixfPj0zP3A9PW51bGw/ci5vcmlnaW5hbFVuc3R1ZmYyKEYsbCxqLE0pOnIudW5zdHVmZjIoRixsLGosTSwhMSxwLE4sayk6cD09bnVsbD9yLm9yaWdpbmFsVW5zdHVmZihGLGwsaixNKTpyLnVuc3R1ZmYoRixsLGosTSwhMSxwLE4saykpfX0scmVhZFRpbGVzOmZ1bmN0aW9uKHUsYyxsKXt2YXIgcD1jLmhlYWRlckluZm8sZD1wLndpZHRoLGg9cC5oZWlnaHQsXz1wLm1pY3JvQmxvY2tTaXplLGc9cC5pbWFnZVR5cGUsYj1pLmdldERhdGFUeXBlU2l6ZShnKSx3PU1hdGguY2VpbChkL18pLE89TWF0aC5jZWlsKGgvXyk7Yy5waXhlbHMubnVtQmxvY2tzWT1PLGMucGl4ZWxzLm51bUJsb2Nrc1g9dyxjLnBpeGVscy5wdHI9MDt2YXIgRT0wLFQ9MCx4PTAsTT0wLE49MCxGPTAsST0wLHY9MCxCPTAsQT0wLFM9MCxDPTAsTD0wLHo9MCxqPTAsaz0wLHEsVyxSLG50LGF0LGx0LF90PW5ldyBsKF8qXyksb3Q9aCVffHxfLFB0PWQlX3x8XyxndCxSdCxkdD1wLm51bURpbXMscnQseHQ9Yy5waXhlbHMucmVzdWx0TWFzayxHdD1jLnBpeGVscy5yZXN1bHRQaXhlbHM7Zm9yKHg9MDt4PE87eCsrKWZvcihOPXghPT1PLTE/XzpvdCxNPTA7TTx3O00rKylmb3IoRj1NIT09dy0xP186UHQsUz14KmQqXytNKl8sQz1kLUYscnQ9MDtydDxkdDtydCsrKXtpZihkdD4xJiYoR3Q9bmV3IGwoYy5waXhlbHMucmVzdWx0UGl4ZWxzLmJ1ZmZlcixkKmgqcnQqYixkKmgpKSxJPXUuYnl0ZUxlbmd0aC1jLnB0cixxPW5ldyBEYXRhVmlldyh1LGMucHRyLE1hdGgubWluKDEwLEkpKSxXPXt9LGs9MCx2PXEuZ2V0VWludDgoMCksaysrLEI9dj4+NiYyNTUsQT12Pj4yJjE1LEEhPT0oTSpfPj4zJjE1KSl0aHJvdyJpbnRlZ3JpdHkgaXNzdWUiO2lmKGx0PXYmMyxsdD4zKXRocm93IGMucHRyKz1rLCJJbnZhbGlkIGJsb2NrIGVuY29kaW5nICgiK2x0KyIpIjtpZihsdD09PTIpe2MuY291bnRlci5jb25zdGFudCsrLGMucHRyKz1rO2NvbnRpbnVlfWVsc2UgaWYobHQ9PT0wKXtpZihjLmNvdW50ZXIudW5jb21wcmVzc2VkKyssYy5wdHIrPWssTD1OKkYqYix6PXUuYnl0ZUxlbmd0aC1jLnB0cixMPUw8ej9MOnosUj1uZXcgQXJyYXlCdWZmZXIoTCViPT09MD9MOkwrYi1MJWIpLG50PW5ldyBVaW50OEFycmF5KFIpLG50LnNldChuZXcgVWludDhBcnJheSh1LGMucHRyLEwpKSxhdD1uZXcgbChSKSxqPTAseHQpZm9yKEU9MDtFPE47RSsrKXtmb3IoVD0wO1Q8RjtUKyspeHRbU10mJihHdFtTXT1hdFtqKytdKSxTKys7Uys9Q31lbHNlIGZvcihFPTA7RTxOO0UrKyl7Zm9yKFQ9MDtUPEY7VCsrKUd0W1MrK109YXRbaisrXTtTKz1DfWMucHRyKz1qKmJ9ZWxzZSBpZihndD1pLmdldERhdGFUeXBlVXNlZChnLEIpLFJ0PWkuZ2V0T25lUGl4ZWwoVyxrLGd0LHEpLGsrPWkuZ2V0RGF0YVR5cGVTaXplKGd0KSxsdD09PTMpaWYoYy5wdHIrPWssYy5jb3VudGVyLmNvbnN0YW50b2Zmc2V0KysseHQpZm9yKEU9MDtFPE47RSsrKXtmb3IoVD0wO1Q8RjtUKyspeHRbU10mJihHdFtTXT1SdCksUysrO1MrPUN9ZWxzZSBmb3IoRT0wO0U8TjtFKyspe2ZvcihUPTA7VDxGO1QrKylHdFtTKytdPVJ0O1MrPUN9ZWxzZSBpZihjLnB0cis9ayxpLmRlY29kZUJpdHModSxjLF90LFJ0LHJ0KSxrPTAseHQpZm9yKEU9MDtFPE47RSsrKXtmb3IoVD0wO1Q8RjtUKyspeHRbU10mJihHdFtTXT1fdFtrKytdKSxTKys7Uys9Q31lbHNlIGZvcihFPTA7RTxOO0UrKyl7Zm9yKFQ9MDtUPEY7VCsrKUd0W1MrK109X3RbaysrXTtTKz1DfX19LGZvcm1hdEZpbGVJbmZvOmZ1bmN0aW9uKHUpe3JldHVybntmaWxlSWRlbnRpZmllclN0cmluZzp1LmhlYWRlckluZm8uZmlsZUlkZW50aWZpZXJTdHJpbmcsZmlsZVZlcnNpb246dS5oZWFkZXJJbmZvLmZpbGVWZXJzaW9uLGltYWdlVHlwZTp1LmhlYWRlckluZm8uaW1hZ2VUeXBlLGhlaWdodDp1LmhlYWRlckluZm8uaGVpZ2h0LHdpZHRoOnUuaGVhZGVySW5mby53aWR0aCxudW1WYWxpZFBpeGVsOnUuaGVhZGVySW5mby5udW1WYWxpZFBpeGVsLG1pY3JvQmxvY2tTaXplOnUuaGVhZGVySW5mby5taWNyb0Jsb2NrU2l6ZSxibG9iU2l6ZTp1LmhlYWRlckluZm8uYmxvYlNpemUsbWF4WkVycm9yOnUuaGVhZGVySW5mby5tYXhaRXJyb3IscGl4ZWxUeXBlOmkuZ2V0UGl4ZWxUeXBlKHUuaGVhZGVySW5mby5pbWFnZVR5cGUpLGVvZk9mZnNldDp1LmVvZk9mZnNldCxtYXNrOnUubWFzaz97bnVtQnl0ZXM6dS5tYXNrLm51bUJ5dGVzfTpudWxsLHBpeGVsczp7bnVtQmxvY2tzWDp1LnBpeGVscy5udW1CbG9ja3NYLG51bUJsb2Nrc1k6dS5waXhlbHMubnVtQmxvY2tzWSxtYXhWYWx1ZTp1LmhlYWRlckluZm8uek1heCxtaW5WYWx1ZTp1LmhlYWRlckluZm8uek1pbixub0RhdGFWYWx1ZTp1Lm5vRGF0YVZhbHVlfX19LGNvbnN0cnVjdENvbnN0YW50U3VyZmFjZTpmdW5jdGlvbih1KXt2YXIgYz11LmhlYWRlckluZm8uek1heCxsPXUuaGVhZGVySW5mby5udW1EaW1zLHA9dS5oZWFkZXJJbmZvLmhlaWdodCp1LmhlYWRlckluZm8ud2lkdGgsZD1wKmwsaD0wLF89MCxnPTAsYj11LnBpeGVscy5yZXN1bHRNYXNrO2lmKGIpaWYobD4xKWZvcihoPTA7aDxsO2grKylmb3IoZz1oKnAsXz0wO188cDtfKyspYltfXSYmKHUucGl4ZWxzLnJlc3VsdFBpeGVsc1tnK19dPWMpO2Vsc2UgZm9yKF89MDtfPHA7XysrKWJbX10mJih1LnBpeGVscy5yZXN1bHRQaXhlbHNbX109Yyk7ZWxzZSBpZih1LnBpeGVscy5yZXN1bHRQaXhlbHMuZmlsbCl1LnBpeGVscy5yZXN1bHRQaXhlbHMuZmlsbChjKTtlbHNlIGZvcihfPTA7XzxkO18rKyl1LnBpeGVscy5yZXN1bHRQaXhlbHNbX109Y30sZ2V0RGF0YVR5cGVBcnJheTpmdW5jdGlvbih1KXt2YXIgYztzd2l0Y2godSl7Y2FzZSAwOmM9SW50OEFycmF5O2JyZWFrO2Nhc2UgMTpjPVVpbnQ4QXJyYXk7YnJlYWs7Y2FzZSAyOmM9SW50MTZBcnJheTticmVhaztjYXNlIDM6Yz1VaW50MTZBcnJheTticmVhaztjYXNlIDQ6Yz1JbnQzMkFycmF5O2JyZWFrO2Nhc2UgNTpjPVVpbnQzMkFycmF5O2JyZWFrO2Nhc2UgNjpjPUZsb2F0MzJBcnJheTticmVhaztjYXNlIDc6Yz1GbG9hdDY0QXJyYXk7YnJlYWs7ZGVmYXVsdDpjPUZsb2F0MzJBcnJheX1yZXR1cm4gY30sZ2V0UGl4ZWxUeXBlOmZ1bmN0aW9uKHUpe3ZhciBjO3N3aXRjaCh1KXtjYXNlIDA6Yz0iUzgiO2JyZWFrO2Nhc2UgMTpjPSJVOCI7YnJlYWs7Y2FzZSAyOmM9IlMxNiI7YnJlYWs7Y2FzZSAzOmM9IlUxNiI7YnJlYWs7Y2FzZSA0OmM9IlMzMiI7YnJlYWs7Y2FzZSA1OmM9IlUzMiI7YnJlYWs7Y2FzZSA2OmM9IkYzMiI7YnJlYWs7Y2FzZSA3OmM9IkY2NCI7YnJlYWs7ZGVmYXVsdDpjPSJGMzIifXJldHVybiBjfSxpc1ZhbGlkUGl4ZWxWYWx1ZTpmdW5jdGlvbih1LGMpe2lmKGM9PW51bGwpcmV0dXJuITE7dmFyIGw7c3dpdGNoKHUpe2Nhc2UgMDpsPWM+PS0xMjgmJmM8PTEyNzticmVhaztjYXNlIDE6bD1jPj0wJiZjPD0yNTU7YnJlYWs7Y2FzZSAyOmw9Yz49LTMyNzY4JiZjPD0zMjc2NzticmVhaztjYXNlIDM6bD1jPj0wJiZjPD02NTUzNjticmVhaztjYXNlIDQ6bD1jPj0tMjE0NzQ4MzY0OCYmYzw9MjE0NzQ4MzY0NzticmVhaztjYXNlIDU6bD1jPj0wJiZjPD00Mjk0OTY3Mjk2O2JyZWFrO2Nhc2UgNjpsPWM+PS0zNDAyNzk5OTM4NzkwMTQ4NGUyMiYmYzw9MzQwMjc5OTkzODc5MDE0ODRlMjI7YnJlYWs7Y2FzZSA3Omw9Yz49NWUtMzI0JiZjPD0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7YnJlYWs7ZGVmYXVsdDpsPSExfXJldHVybiBsfSxnZXREYXRhVHlwZVNpemU6ZnVuY3Rpb24odSl7dmFyIGM9MDtzd2l0Y2godSl7Y2FzZSAwOmNhc2UgMTpjPTE7YnJlYWs7Y2FzZSAyOmNhc2UgMzpjPTI7YnJlYWs7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Yz00O2JyZWFrO2Nhc2UgNzpjPTg7YnJlYWs7ZGVmYXVsdDpjPXV9cmV0dXJuIGN9LGdldERhdGFUeXBlVXNlZDpmdW5jdGlvbih1LGMpe3ZhciBsPXU7c3dpdGNoKHUpe2Nhc2UgMjpjYXNlIDQ6bD11LWM7YnJlYWs7Y2FzZSAzOmNhc2UgNTpsPXUtMipjO2JyZWFrO2Nhc2UgNjpjPT09MD9sPXU6Yz09PTE/bD0yOmw9MTticmVhaztjYXNlIDc6Yz09PTA/bD11Omw9dS0yKmMrMTticmVhaztkZWZhdWx0Omw9dTticmVha31yZXR1cm4gbH0sZ2V0T25lUGl4ZWw6ZnVuY3Rpb24odSxjLGwscCl7dmFyIGQ9MDtzd2l0Y2gobCl7Y2FzZSAwOmQ9cC5nZXRJbnQ4KGMpO2JyZWFrO2Nhc2UgMTpkPXAuZ2V0VWludDgoYyk7YnJlYWs7Y2FzZSAyOmQ9cC5nZXRJbnQxNihjLCEwKTticmVhaztjYXNlIDM6ZD1wLmdldFVpbnQxNihjLCEwKTticmVhaztjYXNlIDQ6ZD1wLmdldEludDMyKGMsITApO2JyZWFrO2Nhc2UgNTpkPXAuZ2V0VUludDMyKGMsITApO2JyZWFrO2Nhc2UgNjpkPXAuZ2V0RmxvYXQzMihjLCEwKTticmVhaztjYXNlIDc6ZD1wLmdldEZsb2F0NjQoYywhMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJ0aGUgZGVjb2RlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoaXMgcGl4ZWwgdHlwZSJ9cmV0dXJuIGR9fSxzPWZ1bmN0aW9uKHUsYyxsKXt0aGlzLnZhbD11LHRoaXMubGVmdD1jLHRoaXMucmlnaHQ9bH0sZj17ZGVjb2RlOmZ1bmN0aW9uKHUsYyl7Yz1jfHx7fTt2YXIgbD1jLm5vRGF0YVZhbHVlLHA9MCxkPXt9O2lmKGQucHRyPWMuaW5wdXRPZmZzZXR8fDAsZC5waXhlbHM9e30sISFpLnJlYWRIZWFkZXJJbmZvKHUsZCkpe3ZhciBoPWQuaGVhZGVySW5mbyxfPWguZmlsZVZlcnNpb24sZz1pLmdldERhdGFUeXBlQXJyYXkoaC5pbWFnZVR5cGUpO2kucmVhZE1hc2sodSxkKSxoLm51bVZhbGlkUGl4ZWwhPT1oLndpZHRoKmguaGVpZ2h0JiYhZC5waXhlbHMucmVzdWx0TWFzayYmKGQucGl4ZWxzLnJlc3VsdE1hc2s9Yy5tYXNrRGF0YSk7dmFyIGI9aC53aWR0aCpoLmhlaWdodDtpZihkLnBpeGVscy5yZXN1bHRQaXhlbHM9bmV3IGcoYipoLm51bURpbXMpLGQuY291bnRlcj17b25lc3dlZXA6MCx1bmNvbXByZXNzZWQ6MCxsdXQ6MCxiaXRzdHVmZmVyOjAsY29uc3RhbnQ6MCxjb25zdGFudG9mZnNldDowfSxoLm51bVZhbGlkUGl4ZWwhPT0wKWlmKGguek1heD09PWguek1pbilpLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZShkKTtlbHNlIGlmKF8+PTQmJmkuY2hlY2tNaW5NYXhSYW5nZXModSxkKSlpLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZShkKTtlbHNle3ZhciB3PW5ldyBEYXRhVmlldyh1LGQucHRyLDIpLE89dy5nZXRVaW50OCgwKTtpZihkLnB0cisrLE8paS5yZWFkRGF0YU9uZVN3ZWVwKHUsZCxnKTtlbHNlIGlmKF8+MSYmaC5pbWFnZVR5cGU8PTEmJk1hdGguYWJzKGgubWF4WkVycm9yLS41KTwxZS01KXt2YXIgRT13LmdldFVpbnQ4KDEpO2lmKGQucHRyKyssZC5lbmNvZGVNb2RlPUUsRT4yfHxfPDQmJkU+MSl0aHJvdyJJbnZhbGlkIEh1ZmZtYW4gZmxhZyAiK0U7RT9pLnJlYWRIdWZmbWFuKHUsZCxnKTppLnJlYWRUaWxlcyh1LGQsZyl9ZWxzZSBpLnJlYWRUaWxlcyh1LGQsZyl9ZC5lb2ZPZmZzZXQ9ZC5wdHI7dmFyIFQ7Yy5pbnB1dE9mZnNldD8oVD1kLmhlYWRlckluZm8uYmxvYlNpemUrYy5pbnB1dE9mZnNldC1kLnB0cixNYXRoLmFicyhUKT49MSYmKGQuZW9mT2Zmc2V0PWMuaW5wdXRPZmZzZXQrZC5oZWFkZXJJbmZvLmJsb2JTaXplKSk6KFQ9ZC5oZWFkZXJJbmZvLmJsb2JTaXplLWQucHRyLE1hdGguYWJzKFQpPj0xJiYoZC5lb2ZPZmZzZXQ9ZC5oZWFkZXJJbmZvLmJsb2JTaXplKSk7dmFyIHg9e3dpZHRoOmgud2lkdGgsaGVpZ2h0OmguaGVpZ2h0LHBpeGVsRGF0YTpkLnBpeGVscy5yZXN1bHRQaXhlbHMsbWluVmFsdWU6aC56TWluLG1heFZhbHVlOmguek1heCx2YWxpZFBpeGVsQ291bnQ6aC5udW1WYWxpZFBpeGVsLGRpbUNvdW50OmgubnVtRGltcyxkaW1TdGF0czp7bWluVmFsdWVzOmgubWluVmFsdWVzLG1heFZhbHVlczpoLm1heFZhbHVlc30sbWFza0RhdGE6ZC5waXhlbHMucmVzdWx0TWFza307aWYoZC5waXhlbHMucmVzdWx0TWFzayYmaS5pc1ZhbGlkUGl4ZWxWYWx1ZShoLmltYWdlVHlwZSxsKSl7dmFyIE09ZC5waXhlbHMucmVzdWx0TWFzaztmb3IocD0wO3A8YjtwKyspTVtwXXx8KHgucGl4ZWxEYXRhW3BdPWwpO3gubm9EYXRhVmFsdWU9bH1yZXR1cm4gZC5ub0RhdGFWYWx1ZT1sLGMucmV0dXJuRmlsZUluZm8mJih4LmZpbGVJbmZvPWkuZm9ybWF0RmlsZUluZm8oZCkpLHh9fSxnZXRCYW5kQ291bnQ6ZnVuY3Rpb24odSl7dmFyIGM9MCxsPTAscD17fTtmb3IocC5wdHI9MCxwLnBpeGVscz17fTtsPHUuYnl0ZUxlbmd0aC01ODspaS5yZWFkSGVhZGVySW5mbyh1LHApLGwrPXAuaGVhZGVySW5mby5ibG9iU2l6ZSxjKysscC5wdHI9bDtyZXR1cm4gY319O3JldHVybiBmfSgpLG49ZnVuY3Rpb24oKXt2YXIgcj1uZXcgQXJyYXlCdWZmZXIoNCksaT1uZXcgVWludDhBcnJheShyKSxzPW5ldyBVaW50MzJBcnJheShyKTtyZXR1cm4gc1swXT0xLGlbMF09PT0xfSgpLG89e2RlY29kZTpmdW5jdGlvbihyLGkpe2lmKCFuKXRocm93IkJpZyBlbmRpYW4gc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQuIjtpPWl8fHt9O3ZhciBzPWkuaW5wdXRPZmZzZXR8fDAsZj1uZXcgVWludDhBcnJheShyLHMsMTApLHU9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGYpLGMsbDtpZih1LnRyaW0oKT09PSJDbnRaSW1hZ2UiKWM9dCxsPTE7ZWxzZSBpZih1LnN1YnN0cmluZygwLDUpPT09IkxlcmMyIiljPWUsbD0yO2Vsc2UgdGhyb3ciVW5leHBlY3RlZCBmaWxlIGlkZW50aWZpZXIgc3RyaW5nOiAiK3U7Zm9yKHZhciBwPTAsZD1yLmJ5dGVMZW5ndGgtMTAsaCxfPVtdLGcsYix3PXt3aWR0aDowLGhlaWdodDowLHBpeGVsczpbXSxwaXhlbFR5cGU6aS5waXhlbFR5cGUsbWFzazpudWxsLHN0YXRpc3RpY3M6W119O3M8ZDspe3ZhciBPPWMuZGVjb2RlKHIse2lucHV0T2Zmc2V0OnMsZW5jb2RlZE1hc2tEYXRhOmgsbWFza0RhdGE6YixyZXR1cm5NYXNrOnA9PT0wLHJldHVybkVuY29kZWRNYXNrOnA9PT0wLHJldHVybkZpbGVJbmZvOiEwLHBpeGVsVHlwZTppLnBpeGVsVHlwZXx8bnVsbCxub0RhdGFWYWx1ZTppLm5vRGF0YVZhbHVlfHxudWxsfSk7cz1PLmZpbGVJbmZvLmVvZk9mZnNldCxwPT09MCYmKGg9Ty5lbmNvZGVkTWFza0RhdGEsYj1PLm1hc2tEYXRhLHcud2lkdGg9Ty53aWR0aCx3LmhlaWdodD1PLmhlaWdodCx3LmRpbUNvdW50PU8uZGltQ291bnR8fDEsdy5waXhlbFR5cGU9Ty5waXhlbFR5cGV8fE8uZmlsZUluZm8ucGl4ZWxUeXBlLHcubWFzaz1PLm1hc2tEYXRhKSxsPjEmJk8uZmlsZUluZm8ubWFzayYmTy5maWxlSW5mby5tYXNrLm51bUJ5dGVzPjAmJl8ucHVzaChPLm1hc2tEYXRhKSxwKyssdy5waXhlbHMucHVzaChPLnBpeGVsRGF0YSksdy5zdGF0aXN0aWNzLnB1c2goe21pblZhbHVlOk8ubWluVmFsdWUsbWF4VmFsdWU6Ty5tYXhWYWx1ZSxub0RhdGFWYWx1ZTpPLm5vRGF0YVZhbHVlLGRpbVN0YXRzOk8uZGltU3RhdHN9KX12YXIgRSxULHg7aWYobD4xJiZfLmxlbmd0aD4xKXtmb3IoeD13LndpZHRoKncuaGVpZ2h0LHcuYmFuZE1hc2tzPV8sYj1uZXcgVWludDhBcnJheSh4KSxiLnNldChfWzBdKSxFPTE7RTxfLmxlbmd0aDtFKyspZm9yKGc9X1tFXSxUPTA7VDx4O1QrKyliW1RdPWJbVF0mZ1tUXTt3Lm1hc2tEYXRhPWJ9cmV0dXJuIHd9fTt0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBvfSk6dHlwZW9mIEpkPCJ1IiYmSmQuZXhwb3J0cz9KZC5leHBvcnRzPW86dGhpcy5MZXJjPW99KSgpfSk7dmFyIG1nPXt9O2xlKG1nLHtkZWZhdWx0OigpPT52VX0pO2Z1bmN0aW9uIElVKHQsZSl7aWYodC5lbmNvZGluZz09PWkyLkxFUkMpe2xldCByO3RyeXtyPXUyLmRlZmF1bHQuZGVjb2RlKHQuaGVpZ2h0bWFwKX1jYXRjaChzKXt0aHJvdyBuZXcgQWUocyl9aWYoci5zdGF0aXN0aWNzWzBdLm1pblZhbHVlPT09TnVtYmVyLk1BWF9WQUxVRSl0aHJvdyBuZXcgQWUoIkludmFsaWQgdGlsZSBkYXRhIik7dC5oZWlnaHRtYXA9ci5waXhlbHNbMF0sdC53aWR0aD1yLndpZHRoLHQuaGVpZ2h0PXIuaGVpZ2h0fXQuZWxsaXBzb2lkPVkuY2xvbmUodC5lbGxpcHNvaWQpLHQucmVjdGFuZ2xlPU50LmNsb25lKHQucmVjdGFuZ2xlKTtsZXQgbj1jMi5jb21wdXRlVmVydGljZXModCksbz1uLnZlcnRpY2VzO3JldHVybiBlLnB1c2goby5idWZmZXIpLHt2ZXJ0aWNlczpvLmJ1ZmZlcixudW1iZXJPZkF0dHJpYnV0ZXM6bi5lbmNvZGluZy5zdHJpZGUsbWluaW11bUhlaWdodDpuLm1pbmltdW1IZWlnaHQsbWF4aW11bUhlaWdodDpuLm1heGltdW1IZWlnaHQsZ3JpZFdpZHRoOnQud2lkdGgsZ3JpZEhlaWdodDp0LmhlaWdodCxib3VuZGluZ1NwaGVyZTNEOm4uYm91bmRpbmdTcGhlcmUzRCxvcmllbnRlZEJvdW5kaW5nQm94Om4ub3JpZW50ZWRCb3VuZGluZ0JveCxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpuLm9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlLGVuY29kaW5nOm4uZW5jb2Rpbmcsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6bi53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxzb3V0aEluZGljZXNFYXN0VG9XZXN0Om4uc291dGhJbmRpY2VzRWFzdFRvV2VzdCxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDpuLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6bi5ub3J0aEluZGljZXNXZXN0VG9FYXN0fX12YXIgdTIsdlUsaGc9JCgoKT0+eyR0KCk7czIoKTthMigpO1RuKCk7dGkoKTt1Mj1tcihmMigpLDEpO1puKCk7dlU9VWUoSVUpfSk7ZnVuY3Rpb24gVm8oKXtELnRocm93SW5zdGFudGlhdGlvbkVycm9yKCl9ZnVuY3Rpb24gbTIodCxlKXtsZXQgbj1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkodCkscj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkodCkscztmb3Iocz0wO3M8dDsrK3MpaVtzXT1zLG9bc109dCplLTEtcztmb3Iocz0wO3M8ZTsrK3MpcltzXT0ocysxKSp0LTEsbltzXT0oZS1zLTEpKnQ7cmV0dXJue3dlc3RJbmRpY2VzU291dGhUb05vcnRoOm4sc291dGhJbmRpY2VzRWFzdFRvV2VzdDpvLGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOnIsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDppfX1mdW5jdGlvbiBoMih0LGUsbixvKXtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8ZS0xOysraSl7Zm9yKGxldCBzPTA7czx0LTE7KytzKXtsZXQgZj1yLHU9Zit0LGM9dSsxLGw9ZisxO25bbysrXT1mLG5bbysrXT11LG5bbysrXT1sLG5bbysrXT1sLG5bbysrXT11LG5bbysrXT1jLCsrcn0rK3J9fWZ1bmN0aW9uIHRtKHQsZSxuLG8pe2xldCByPXRbMF0saT10Lmxlbmd0aDtmb3IobGV0IHM9MTtzPGk7KytzKXtsZXQgZj10W3NdO25bbysrXT1yLG5bbysrXT1mLG5bbysrXT1lLG5bbysrXT1lLG5bbysrXT1mLG5bbysrXT1lKzEscj1mLCsrZX1yZXR1cm4gb312YXIgbDIscDIsZDIsXzIseTI9JCgoKT0+e2Z0KCk7SHQoKTtaZSgpO0t0KCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVm8ucHJvdG90eXBlLHtlcnJvckV2ZW50OntnZXQ6RC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0sY3JlZGl0OntnZXQ6RC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0sdGlsaW5nU2NoZW1lOntnZXQ6RC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0saGFzV2F0ZXJNYXNrOntnZXQ6RC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0saGFzVmVydGV4Tm9ybWFsczp7Z2V0OkQudGhyb3dJbnN0YW50aWF0aW9uRXJyb3J9LGF2YWlsYWJpbGl0eTp7Z2V0OkQudGhyb3dJbnN0YW50aWF0aW9uRXJyb3J9fSk7bDI9W107Vm8uZ2V0UmVndWxhckdyaWRJbmRpY2VzPWZ1bmN0aW9uKHQsZSl7aWYodCplPj1QLkZPVVJfR0lHQUJZVEVTKXRocm93IG5ldyBEKCJUaGUgdG90YWwgbnVtYmVyIG9mIHZlcnRpY2VzICh3aWR0aCAqIGhlaWdodCkgbXVzdCBiZSBsZXNzIHRoYW4gNCwyOTQsOTY3LDI5Ni4iKTtsZXQgbj1sMlt0XTttKG4pfHwobDJbdF09bj1bXSk7bGV0IG89bltlXTtyZXR1cm4gbShvKXx8KHQqZTxQLlNJWFRZX0ZPVVJfS0lMT0JZVEVTP289bltlXT1uZXcgVWludDE2QXJyYXkoKHQtMSkqKGUtMSkqNik6bz1uW2VdPW5ldyBVaW50MzJBcnJheSgodC0xKSooZS0xKSo2KSxoMih0LGUsbywwKSksb307cDI9W107Vm8uZ2V0UmVndWxhckdyaWRJbmRpY2VzQW5kRWRnZUluZGljZXM9ZnVuY3Rpb24odCxlKXtpZih0KmU+PVAuRk9VUl9HSUdBQllURVMpdGhyb3cgbmV3IEQoIlRoZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMgKHdpZHRoICogaGVpZ2h0KSBtdXN0IGJlIGxlc3MgdGhhbiA0LDI5NCw5NjcsMjk2LiIpO2xldCBuPXAyW3RdO20obil8fChwMlt0XT1uPVtdKTtsZXQgbz1uW2VdO2lmKCFtKG8pKXtsZXQgcj1Wby5nZXRSZWd1bGFyR3JpZEluZGljZXModCxlKSxpPW0yKHQsZSkscz1pLndlc3RJbmRpY2VzU291dGhUb05vcnRoLGY9aS5zb3V0aEluZGljZXNFYXN0VG9XZXN0LHU9aS5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aCxjPWkubm9ydGhJbmRpY2VzV2VzdFRvRWFzdDtvPW5bZV09e2luZGljZXM6cix3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpzLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6ZixlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDp1LG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6Y319cmV0dXJuIG99O2QyPVtdO1ZvLmdldFJlZ3VsYXJHcmlkQW5kU2tpcnRJbmRpY2VzQW5kRWRnZUluZGljZXM9ZnVuY3Rpb24odCxlKXtpZih0KmU+PVAuRk9VUl9HSUdBQllURVMpdGhyb3cgbmV3IEQoIlRoZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMgKHdpZHRoICogaGVpZ2h0KSBtdXN0IGJlIGxlc3MgdGhhbiA0LDI5NCw5NjcsMjk2LiIpO2xldCBuPWQyW3RdO20obil8fChkMlt0XT1uPVtdKTtsZXQgbz1uW2VdO2lmKCFtKG8pKXtsZXQgcj10KmUsaT0odC0xKSooZS0xKSo2LHM9dCoyK2UqMixmPU1hdGgubWF4KDAscy00KSo2LHU9citzLGM9aStmLGw9bTIodCxlKSxwPWwud2VzdEluZGljZXNTb3V0aFRvTm9ydGgsZD1sLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QsaD1sLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLF89bC5ub3J0aEluZGljZXNXZXN0VG9FYXN0LGc9THQuY3JlYXRlVHlwZWRBcnJheSh1LGMpO2gyKHQsZSxnLDApLFZvLmFkZFNraXJ0SW5kaWNlcyhwLGQsaCxfLHIsZyxpKSxvPW5bZV09e2luZGljZXM6Zyx3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpwLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6ZCxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDpoLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6XyxpbmRleENvdW50V2l0aG91dFNraXJ0czppfX1yZXR1cm4gb307Vm8uYWRkU2tpcnRJbmRpY2VzPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe2xldCBmPXI7cz10bSh0LGYsaSxzKSxmKz10Lmxlbmd0aCxzPXRtKGUsZixpLHMpLGYrPWUubGVuZ3RoLHM9dG0obixmLGkscyksZis9bi5sZW5ndGgsdG0obyxmLGkscyl9O1ZvLmhlaWdodG1hcFRlcnJhaW5RdWFsaXR5PS4yNTtWby5nZXRFc3RpbWF0ZWRMZXZlbFplcm9HZW9tZXRyaWNFcnJvckZvckFIZWlnaHRtYXA9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lm1heGltdW1SYWRpdXMqMipNYXRoLlBJKlZvLmhlaWdodG1hcFRlcnJhaW5RdWFsaXR5LyhlKm4pfTtWby5wcm90b3R5cGUucmVxdWVzdFRpbGVHZW9tZXRyeT1ELnRocm93SW5zdGFudGlhdGlvbkVycm9yO1ZvLnByb3RvdHlwZS5nZXRMZXZlbE1heGltdW1HZW9tZXRyaWNFcnJvcj1ELnRocm93SW5zdGFudGlhdGlvbkVycm9yO1ZvLnByb3RvdHlwZS5nZXRUaWxlRGF0YUF2YWlsYWJsZT1ELnRocm93SW5zdGFudGlhdGlvbkVycm9yO1ZvLnByb3RvdHlwZS5sb2FkVGlsZURhdGFBdmFpbGFiaWxpdHk9RC50aHJvd0luc3RhbnRpYXRpb25FcnJvcjtfMj1Wb30pO3ZhciB5Zz17fTtsZSh5Zyx7ZGVmYXVsdDooKT0+QlV9KTtmdW5jdGlvbiBEVSh0LGUpe2xldCBuPXQucXVhbnRpemVkVmVydGljZXMsbz1uLmxlbmd0aC8zLHI9dC5vY3RFbmNvZGVkTm9ybWFscyxpPXQud2VzdEluZGljZXMubGVuZ3RoK3QuZWFzdEluZGljZXMubGVuZ3RoK3Quc291dGhJbmRpY2VzLmxlbmd0aCt0Lm5vcnRoSW5kaWNlcy5sZW5ndGgscz10LmluY2x1ZGVXZWJNZXJjYXRvclQsZj10LmV4YWdnZXJhdGlvbix1PXQuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQsbD1mIT09MSxwPU50LmNsb25lKHQucmVjdGFuZ2xlKSxkPXAud2VzdCxoPXAuc291dGgsXz1wLmVhc3QsZz1wLm5vcnRoLGI9WS5jbG9uZSh0LmVsbGlwc29pZCksdz10Lm1pbmltdW1IZWlnaHQsTz10Lm1heGltdW1IZWlnaHQsRT10LnJlbGF0aXZlVG9DZW50ZXIsVD0kby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShFLGIpLHg9c3QuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKFQsbmV3IHN0KSxNLE47cyYmKE09cm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShoKSxOPTEvKHJvLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoZyktTSkpO2xldCBGPW4uc3ViYXJyYXkoMCxvKSxJPW4uc3ViYXJyYXkobywyKm8pLHY9bi5zdWJhcnJheShvKjIsMypvKSxCPW0ociksQT1uZXcgQXJyYXkobyksUz1uZXcgQXJyYXkobyksQz1uZXcgQXJyYXkobyksTD1zP25ldyBBcnJheShvKTpbXSx6PWw/bmV3IEFycmF5KG8pOltdLGo9RlU7ai54PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxqLnk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGouej1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IGs9TFU7ay54PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxrLnk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGsuej1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7bGV0IHE9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFc9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG50PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IobGV0IFl0PTA7WXQ8bzsrK1l0KXtsZXQgemU9RltZdF0sZG49SVtZdF0sc249emUvX2csbW49ZG4vX2csbG89UC5sZXJwKHcsTyx2W1l0XS9fZyk7Sm4ubG9uZ2l0dWRlPVAubGVycChkLF8sc24pLEpuLmxhdGl0dWRlPVAubGVycChoLGcsbW4pLEpuLmhlaWdodD1sbyxxPU1hdGgubWluKEpuLmxvbmdpdHVkZSxxKSxXPU1hdGgubWF4KEpuLmxvbmdpdHVkZSxXKSxSPU1hdGgubWluKEpuLmxhdGl0dWRlLFIpLG50PU1hdGgubWF4KEpuLmxhdGl0dWRlLG50KTtsZXQgcW49Yi5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihKbik7QVtZdF09bmV3IEooc24sbW4pLFNbWXRdPWxvLENbWXRdPXFuLHMmJihMW1l0XT0ocm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShKbi5sYXRpdHVkZSktTSkqTiksbCYmKHpbWXRdPWIuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHFuKSksc3QubXVsdGlwbHlCeVBvaW50KHgscW4sdXUpLGEubWluaW11bUJ5Q29tcG9uZW50KHV1LGosaiksYS5tYXhpbXVtQnlDb21wb25lbnQodXUsayxrKX1sZXQgYXQ9b20odC53ZXN0SW5kaWNlcyxmdW5jdGlvbihZdCx6ZSl7cmV0dXJuIEFbWXRdLnktQVt6ZV0ueX0pLGx0PW9tKHQuZWFzdEluZGljZXMsZnVuY3Rpb24oWXQsemUpe3JldHVybiBBW3plXS55LUFbWXRdLnl9KSxfdD1vbSh0LnNvdXRoSW5kaWNlcyxmdW5jdGlvbihZdCx6ZSl7cmV0dXJuIEFbemVdLngtQVtZdF0ueH0pLG90PW9tKHQubm9ydGhJbmRpY2VzLGZ1bmN0aW9uKFl0LHplKXtyZXR1cm4gQVtZdF0ueC1BW3plXS54fSksUHQ7dzwwJiYoUHQ9bmV3IFBzKGIpLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50UG9zc2libHlVbmRlckVsbGlwc29pZChFLEMsdykpO2xldCBndD13O2d0PU1hdGgubWluKGd0LGVtKHQud2VzdEluZGljZXMsdC53ZXN0U2tpcnRIZWlnaHQsUyxBLHAsYix4LGosaykpLGd0PU1hdGgubWluKGd0LGVtKHQuc291dGhJbmRpY2VzLHQuc291dGhTa2lydEhlaWdodCxTLEEscCxiLHgsaixrKSksZ3Q9TWF0aC5taW4oZ3QsZW0odC5lYXN0SW5kaWNlcyx0LmVhc3RTa2lydEhlaWdodCxTLEEscCxiLHgsaixrKSksZ3Q9TWF0aC5taW4oZ3QsZW0odC5ub3J0aEluZGljZXMsdC5ub3J0aFNraXJ0SGVpZ2h0LFMsQSxwLGIseCxqLGspKTtsZXQgUnQ9bmV3IERpKGosayxFKSxkdD1uZXcgTXMoRSxSdCxndCxPLFQsQixzLGwsZix1KSxydD1kdC5zdHJpZGUseHQ9bypydCtpKnJ0LEd0PW5ldyBGbG9hdDMyQXJyYXkoeHQpLHBlPTA7Zm9yKGxldCBZdD0wO1l0PG87KytZdCl7aWYoQil7bGV0IHplPVl0KjI7a2EueD1yW3plXSxrYS55PXJbemUrMV19cGU9ZHQuZW5jb2RlKEd0LHBlLENbWXRdLEFbWXRdLFNbWXRdLGthLExbWXRdLHpbWXRdKX1sZXQgcmU9TWF0aC5tYXgoMCwoaS00KSoyKSxkZT10LmluZGljZXMubGVuZ3RoK3JlKjMsZmU9THQuY3JlYXRlVHlwZWRBcnJheShvK2ksZGUpO2ZlLnNldCh0LmluZGljZXMsMCk7bGV0IFp0PTFlLTQsUXQ9KFctcSkqWnQsTmU9KG50LVIpKlp0LGdlPS1RdCxFZT0wLHVuPVF0LFZlPTAsYmU9MCxsbj1OZSxwbj0wLEVuPS1OZSxvZT1vKnJ0O3JldHVybiBubShHdCxvZSxhdCxkdCxTLEEscixiLHAsdC53ZXN0U2tpcnRIZWlnaHQsTSxOLGdlLEVlKSxvZSs9dC53ZXN0SW5kaWNlcy5sZW5ndGgqcnQsbm0oR3Qsb2UsX3QsZHQsUyxBLHIsYixwLHQuc291dGhTa2lydEhlaWdodCxNLE4scG4sRW4pLG9lKz10LnNvdXRoSW5kaWNlcy5sZW5ndGgqcnQsbm0oR3Qsb2UsbHQsZHQsUyxBLHIsYixwLHQuZWFzdFNraXJ0SGVpZ2h0LE0sTix1bixWZSksb2UrPXQuZWFzdEluZGljZXMubGVuZ3RoKnJ0LG5tKEd0LG9lLG90LGR0LFMsQSxyLGIscCx0Lm5vcnRoU2tpcnRIZWlnaHQsTSxOLGJlLGxuKSxfMi5hZGRTa2lydEluZGljZXMoYXQsX3QsbHQsb3QsbyxmZSx0LmluZGljZXMubGVuZ3RoKSxlLnB1c2goR3QuYnVmZmVyLGZlLmJ1ZmZlcikse3ZlcnRpY2VzOkd0LmJ1ZmZlcixpbmRpY2VzOmZlLmJ1ZmZlcix3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDphdCxzb3V0aEluZGljZXNFYXN0VG9XZXN0Ol90LGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOmx0LG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6b3QsdmVydGV4U3RyaWRlOnJ0LGNlbnRlcjpFLG1pbmltdW1IZWlnaHQ6dyxtYXhpbXVtSGVpZ2h0Ok8sb2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2U6UHQsZW5jb2Rpbmc6ZHQsaW5kZXhDb3VudFdpdGhvdXRTa2lydHM6dC5pbmRpY2VzLmxlbmd0aH19ZnVuY3Rpb24gZW0odCxlLG4sbyxyLGkscyxmLHUpe2xldCBjPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxsPXIubm9ydGgscD1yLnNvdXRoLGQ9ci5lYXN0LGg9ci53ZXN0O2Q8aCYmKGQrPVAuVFdPX1BJKTtsZXQgXz10Lmxlbmd0aDtmb3IobGV0IGc9MDtnPF87KytnKXtsZXQgYj10W2ddLHc9bltiXSxPPW9bYl07Sm4ubG9uZ2l0dWRlPVAubGVycChoLGQsTy54KSxKbi5sYXRpdHVkZT1QLmxlcnAocCxsLE8ueSksSm4uaGVpZ2h0PXctZTtsZXQgRT1pLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEpuLHV1KTtzdC5tdWx0aXBseUJ5UG9pbnQocyxFLEUpLGEubWluaW11bUJ5Q29tcG9uZW50KEUsZixmKSxhLm1heGltdW1CeUNvbXBvbmVudChFLHUsdSksYz1NYXRoLm1pbihjLEpuLmhlaWdodCl9cmV0dXJuIGN9ZnVuY3Rpb24gbm0odCxlLG4sbyxyLGkscyxmLHUsYyxsLHAsZCxoKXtsZXQgXz1tKHMpLGc9dS5ub3J0aCxiPXUuc291dGgsdz11LmVhc3QsTz11Lndlc3Q7dzxPJiYodys9UC5UV09fUEkpO2xldCBFPW4ubGVuZ3RoO2ZvcihsZXQgVD0wO1Q8RTsrK1Qpe2xldCB4PW5bVF0sTT1yW3hdLE49aVt4XTtKbi5sb25naXR1ZGU9UC5sZXJwKE8sdyxOLngpK2QsSm4ubGF0aXR1ZGU9UC5sZXJwKGIsZyxOLnkpK2gsSm4uaGVpZ2h0PU0tYztsZXQgRj1mLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEpuLHV1KTtpZihfKXtsZXQgQj14KjI7a2EueD1zW0JdLGthLnk9c1tCKzFdfWxldCBJO28uaGFzV2ViTWVyY2F0b3JUJiYoST0ocm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShKbi5sYXRpdHVkZSktbCkqcCk7bGV0IHY7by5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiYodj1mLmdlb2RldGljU3VyZmFjZU5vcm1hbChGKSksZT1vLmVuY29kZSh0LGUsRixOLEpuLmhlaWdodCxrYSxJLHYpfX1mdW5jdGlvbiBvbSh0LGUpe2xldCBuO3JldHVybiB0eXBlb2YgdC5zbGljZT09ImZ1bmN0aW9uIiYmKG49dC5zbGljZSgpLHR5cGVvZiBuLnNvcnQhPSJmdW5jdGlvbiImJihuPXZvaWQgMCkpLG0obil8fChuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKSxuLnNvcnQoZSksbn12YXIgX2csdXUsRlUsTFUsSm4sa2EsQlUsZ2c9JCgoKT0+e1BmKCk7a2UoKTtEdCgpO0llKCk7ZnQoKTskdCgpO2N1KCk7WmUoKTtLdCgpO2tuKCk7VG4oKTthdSgpO3kyKCk7YXMoKTtzYygpO1puKCk7X2c9MzI3NjcsdXU9bmV3IGEsRlU9bmV3IGEsTFU9bmV3IGEsSm49bmV3IGN0LGthPW5ldyBKO0JVPVVlKERVKX0pO2Z1bmN0aW9uIFVVKHQsZSl7cmV0dXJuIFAuZXF1YWxzRXBzaWxvbih0LmxhdGl0dWRlLGUubGF0aXR1ZGUsUC5FUFNJTE9OMTApJiZQLmVxdWFsc0Vwc2lsb24odC5sb25naXR1ZGUsZS5sb25naXR1ZGUsUC5FUFNJTE9OMTApfWZ1bmN0aW9uIFZVKHQsZSxuLG8pe2U9Q24oZSxhLmVxdWFsc0Vwc2lsb24pO2xldCByPWUubGVuZ3RoO2lmKHI8MilyZXR1cm47bGV0IGk9bShvKSxzPW0obiksZj1uZXcgQXJyYXkociksdT1uZXcgQXJyYXkociksYz1uZXcgQXJyYXkociksbD1lWzBdO2ZbMF09bDtsZXQgcD10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGwsa1UpO3MmJihwLmhlaWdodD1uWzBdKSx1WzBdPXAuaGVpZ2h0LGk/Y1swXT1vWzBdOmNbMF09MDtsZXQgZD11WzBdLGg9Y1swXSxfPWQ9PT1oLGc9MTtmb3IobGV0IGI9MTtiPHI7KytiKXtsZXQgdz1lW2JdLE89dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh3LEdVKTtzJiYoTy5oZWlnaHQ9bltiXSksXz1fJiZPLmhlaWdodD09PTAsVVUocCxPKT9wLmhlaWdodDxPLmhlaWdodCYmKHVbZy0xXT1PLmhlaWdodCk6KGZbZ109dyx1W2ddPU8uaGVpZ2h0LGk/Y1tnXT1vW2JdOmNbZ109MCxfPV8mJnVbZ109PT1jW2ddLGN0LmNsb25lKE8scCksKytnKX1pZighKF98fGc8MikpcmV0dXJuIGYubGVuZ3RoPWcsdS5sZW5ndGg9ZyxjLmxlbmd0aD1nLHtwb3NpdGlvbnM6Zix0b3BIZWlnaHRzOnUsYm90dG9tSGVpZ2h0czpjfX12YXIgZzIsa1UsR1UselUsalUsSFUscm0sQWc9JCgoKT0+e0hyKCk7RHQoKTtJZSgpO2Z0KCk7S3QoKTtnYSgpO2cyPXt9O2tVPW5ldyBjdCxHVT1uZXcgY3Q7elU9bmV3IEFycmF5KDIpLGpVPW5ldyBBcnJheSgyKSxIVT17cG9zaXRpb25zOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxlbGxpcHNvaWQ6dm9pZCAwfTtnMi5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSxuLG8scixpKXtsZXQgcz1WVSh0LGUsbixvKTtpZighbShzKSlyZXR1cm47ZT1zLnBvc2l0aW9ucyxuPXMudG9wSGVpZ2h0cyxvPXMuYm90dG9tSGVpZ2h0cztsZXQgZj1lLmxlbmd0aCx1PWYtMixjLGwscD1QLmNob3JkTGVuZ3RoKHIsdC5tYXhpbXVtUmFkaXVzKSxkPUhVO2lmKGQubWluRGlzdGFuY2U9cCxkLmVsbGlwc29pZD10LGkpe2xldCBoPTAsXztmb3IoXz0wO188Zi0xO18rKyloKz1Bbi5udW1iZXJPZlBvaW50cyhlW19dLGVbXysxXSxwKSsxO2M9bmV3IEZsb2F0NjRBcnJheShoKjMpLGw9bmV3IEZsb2F0NjRBcnJheShoKjMpO2xldCBnPXpVLGI9alU7ZC5wb3NpdGlvbnM9ZyxkLmhlaWdodD1iO2xldCB3PTA7Zm9yKF89MDtfPGYtMTtfKyspe2dbMF09ZVtfXSxnWzFdPWVbXysxXSxiWzBdPW5bX10sYlsxXT1uW18rMV07bGV0IE89QW4uZ2VuZXJhdGVBcmMoZCk7Yy5zZXQoTyx3KSxiWzBdPW9bX10sYlsxXT1vW18rMV0sbC5zZXQoQW4uZ2VuZXJhdGVBcmMoZCksdyksdys9Ty5sZW5ndGh9fWVsc2UgZC5wb3NpdGlvbnM9ZSxkLmhlaWdodD1uLGM9bmV3IEZsb2F0NjRBcnJheShBbi5nZW5lcmF0ZUFyYyhkKSksZC5oZWlnaHQ9byxsPW5ldyBGbG9hdDY0QXJyYXkoQW4uZ2VuZXJhdGVBcmMoZCkpO3JldHVybntib3R0b21Qb3NpdGlvbnM6bCx0b3BQb3NpdGlvbnM6YyxudW1Db3JuZXJzOnV9fTtybT1nMn0pO2Z1bmN0aW9uIFJjKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9zaXRpb25zLG49dC5tYXhpbXVtSGVpZ2h0cyxvPXQubWluaW11bUhlaWdodHM7aWYoIW0oZSkpdGhyb3cgbmV3IEQoIm9wdGlvbnMucG9zaXRpb25zIGlzIHJlcXVpcmVkLiIpO2lmKG0obikmJm4ubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEQoIm9wdGlvbnMucG9zaXRpb25zIGFuZCBvcHRpb25zLm1heGltdW1IZWlnaHRzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGguIik7aWYobShvKSYmby5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRCgib3B0aW9ucy5wb3NpdGlvbnMgYW5kIG9wdGlvbnMubWluaW11bUhlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4iKTtsZXQgcj10LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVCxpPXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHM9dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdDt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9taW5pbXVtSGVpZ2h0cz1vLHRoaXMuX21heGltdW1IZWlnaHRzPW4sdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHIpLHRoaXMuX2dyYW51bGFyaXR5PWksdGhpcy5fZWxsaXBzb2lkPVkuY2xvbmUocyksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlV2FsbEdlb21ldHJ5IjtsZXQgZj0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoKzI7bShvKSYmKGYrPW8ubGVuZ3RoKSxtKG4pJiYoZis9bi5sZW5ndGgpLHRoaXMucGFja2VkTGVuZ3RoPWYrWS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RoKzF9dmFyIGJnLGltLHFVLEEyLEtVLFdVLFhVLGIyLHcyLGx1LHdnLFQyPSQoKCk9Pnt2ZSgpO0R0KCk7RGUoKTt5ZSgpO2Z0KCk7SHQoKTskdCgpO1llKCk7JGUoKTthbigpO1plKCk7S3QoKTt0bigpO3hvKCk7QWcoKTtiZz1uZXcgYSxpbT1uZXcgYSxxVT1uZXcgYSxBMj1uZXcgYSxLVT1uZXcgYSxXVT1uZXcgYSxYVT1uZXcgYTtSYy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighbShlKSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPW4/PzA7bGV0IG8scj10Ll9wb3NpdGlvbnMsaT1yLmxlbmd0aDtmb3IoZVtuKytdPWksbz0wO288aTsrK28sbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKHJbb10sZSxuKTtsZXQgcz10Ll9taW5pbXVtSGVpZ2h0cztpZihpPW0ocyk/cy5sZW5ndGg6MCxlW24rK109aSxtKHMpKWZvcihvPTA7bzxpOysrbyllW24rK109c1tvXTtsZXQgZj10Ll9tYXhpbXVtSGVpZ2h0cztpZihpPW0oZik/Zi5sZW5ndGg6MCxlW24rK109aSxtKGYpKWZvcihvPTA7bzxpOysrbyllW24rK109ZltvXTtyZXR1cm4gWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLHB0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksbis9cHQucGFja2VkTGVuZ3RoLGVbbl09dC5fZ3JhbnVsYXJpdHksZX07YjI9WS5jbG9uZShZLlVOSVRfU1BIRVJFKSx3Mj1uZXcgcHQsbHU9e3Bvc2l0aW9uczp2b2lkIDAsbWluaW11bUhlaWdodHM6dm9pZCAwLG1heGltdW1IZWlnaHRzOnZvaWQgMCxlbGxpcHNvaWQ6YjIsdmVydGV4Rm9ybWF0OncyLGdyYW51bGFyaXR5OnZvaWQgMH07UmMudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPWU/PzA7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcztpZihyPjApZm9yKHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKXNbb109dFtlKytdO3I9dFtlKytdO2xldCBmO2lmKHI+MClmb3IoZj1uZXcgQXJyYXkociksbz0wO288cjsrK28pZltvXT10W2UrK107bGV0IHU9WS51bnBhY2sodCxlLGIyKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgYz1wdC51bnBhY2sodCxlLHcyKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IGw9dFtlXTtyZXR1cm4gbShuKT8obi5fcG9zaXRpb25zPWksbi5fbWluaW11bUhlaWdodHM9cyxuLl9tYXhpbXVtSGVpZ2h0cz1mLG4uX2VsbGlwc29pZD1ZLmNsb25lKHUsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoYyxuLl92ZXJ0ZXhGb3JtYXQpLG4uX2dyYW51bGFyaXR5PWwsbik6KGx1LnBvc2l0aW9ucz1pLGx1Lm1pbmltdW1IZWlnaHRzPXMsbHUubWF4aW11bUhlaWdodHM9ZixsdS5ncmFudWxhcml0eT1sLG5ldyBSYyhsdSkpfTtSYy5mcm9tQ29uc3RhbnRIZWlnaHRzPWZ1bmN0aW9uKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9zaXRpb25zO2lmKCFtKGUpKXRocm93IG5ldyBEKCJvcHRpb25zLnBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtsZXQgbixvLHI9dC5taW5pbXVtSGVpZ2h0LGk9dC5tYXhpbXVtSGVpZ2h0LHM9bShyKSxmPW0oaSk7aWYoc3x8Zil7bGV0IGM9ZS5sZW5ndGg7bj1zP25ldyBBcnJheShjKTp2b2lkIDAsbz1mP25ldyBBcnJheShjKTp2b2lkIDA7Zm9yKGxldCBsPTA7bDxjOysrbClzJiYobltsXT1yKSxmJiYob1tsXT1pKX1sZXQgdT17cG9zaXRpb25zOmUsbWF4aW11bUhlaWdodHM6byxtaW5pbXVtSGVpZ2h0czpuLGVsbGlwc29pZDp0LmVsbGlwc29pZCx2ZXJ0ZXhGb3JtYXQ6dC52ZXJ0ZXhGb3JtYXR9O3JldHVybiBuZXcgUmModSl9O1JjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPXQuX21pbmltdW1IZWlnaHRzLG89dC5fbWF4aW11bUhlaWdodHMscj10Ll92ZXJ0ZXhGb3JtYXQsaT10Ll9ncmFudWxhcml0eSxzPXQuX2VsbGlwc29pZCxmPXJtLmNvbXB1dGVQb3NpdGlvbnMocyxlLG8sbixpLCEwKTtpZighbShmKSlyZXR1cm47bGV0IHU9Zi5ib3R0b21Qb3NpdGlvbnMsYz1mLnRvcFBvc2l0aW9ucyxsPWYubnVtQ29ybmVycyxwPWMubGVuZ3RoLGQ9cCoyLGg9ci5wb3NpdGlvbj9uZXcgRmxvYXQ2NEFycmF5KGQpOnZvaWQgMCxfPXIubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoZCk6dm9pZCAwLGc9ci50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoZCk6dm9pZCAwLGI9ci5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShkKTp2b2lkIDAsdz1yLnN0P25ldyBGbG9hdDMyQXJyYXkoZC8zKjIpOnZvaWQgMCxPPTAsRT0wLFQ9MCx4PTAsTT0wLE49WFUsRj1XVSxJPUtVLHY9ITA7cC89MztsZXQgQixBPTAsUz0xLyhwLWwtMSk7Zm9yKEI9MDtCPHA7KytCKXtsZXQgaz1CKjMscT1hLmZyb21BcnJheShjLGssYmcpLFc9YS5mcm9tQXJyYXkodSxrLGltKTtpZihyLnBvc2l0aW9uJiYoaFtPKytdPVcueCxoW08rK109Vy55LGhbTysrXT1XLnosaFtPKytdPXEueCxoW08rK109cS55LGhbTysrXT1xLnopLHIuc3QmJih3W00rK109QSx3W00rK109MCx3W00rK109QSx3W00rK109MSksci5ub3JtYWx8fHIudGFuZ2VudHx8ci5iaXRhbmdlbnQpe2xldCBSPWEuY2xvbmUoYS5aRVJPLEEyKSxudD1hLnN1YnRyYWN0KHEscy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocSxpbSksaW0pO2lmKEIrMTxwJiYoUj1hLmZyb21BcnJheShjLGsrMyxBMikpLHYpe2xldCBhdD1hLnN1YnRyYWN0KFIscSxxVSksbHQ9YS5zdWJ0cmFjdChudCxxLGJnKTtOPWEubm9ybWFsaXplKGEuY3Jvc3MobHQsYXQsTiksTiksdj0hMX1hLmVxdWFsc0Vwc2lsb24ocSxSLFAuRVBTSUxPTjEwKT92PSEwOihBKz1TLHIudGFuZ2VudCYmKEY9YS5ub3JtYWxpemUoYS5zdWJ0cmFjdChSLHEsRiksRikpLHIuYml0YW5nZW50JiYoST1hLm5vcm1hbGl6ZShhLmNyb3NzKE4sRixJKSxJKSkpLHIubm9ybWFsJiYoX1tFKytdPU4ueCxfW0UrK109Ti55LF9bRSsrXT1OLnosX1tFKytdPU4ueCxfW0UrK109Ti55LF9bRSsrXT1OLnopLHIudGFuZ2VudCYmKGdbeCsrXT1GLngsZ1t4KytdPUYueSxnW3grK109Ri56LGdbeCsrXT1GLngsZ1t4KytdPUYueSxnW3grK109Ri56KSxyLmJpdGFuZ2VudCYmKGJbVCsrXT1JLngsYltUKytdPUkueSxiW1QrK109SS56LGJbVCsrXT1JLngsYltUKytdPUkueSxiW1QrK109SS56KX19bGV0IEM9bmV3IGllO3IucG9zaXRpb24mJihDLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aH0pKSxyLm5vcm1hbCYmKEMubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpffSkpLHIudGFuZ2VudCYmKEMudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Z30pKSxyLmJpdGFuZ2VudCYmKEMuYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSkpLHIuc3QmJihDLnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczp3fSkpO2xldCBMPWQvMztkLT02KihsKzEpO2xldCB6PUx0LmNyZWF0ZVR5cGVkQXJyYXkoTCxkKSxqPTA7Zm9yKEI9MDtCPEwtMjtCKz0yKXtsZXQgaz1CLHE9QisyLFc9YS5mcm9tQXJyYXkoaCxrKjMsYmcpLFI9YS5mcm9tQXJyYXkoaCxxKjMsaW0pO2lmKGEuZXF1YWxzRXBzaWxvbihXLFIsUC5FUFNJTE9OMTApKWNvbnRpbnVlO2xldCBudD1CKzEsYXQ9QiszO3pbaisrXT1udCx6W2orK109ayx6W2orK109YXQseltqKytdPWF0LHpbaisrXT1rLHpbaisrXT1xfXJldHVybiBuZXcgVXQoe2F0dHJpYnV0ZXM6QyxpbmRpY2VzOnoscHJpbWl0aXZlVHlwZTpCdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6bmV3IEF0LmZyb21WZXJ0aWNlcyhoKX0pfTt3Zz1SY30pO3ZhciBUZz17fTtsZShUZyx7ZGVmYXVsdDooKT0+JFV9KTtmdW5jdGlvbiBZVSh0LGUpe3JldHVybiBtKGUpJiYodD13Zy51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSx3Zy5jcmVhdGVHZW9tZXRyeSh0KX12YXIgJFUsT2c9JCgoKT0+e2Z0KCk7JHQoKTtUMigpOyRVPVlVfSk7ZnVuY3Rpb24gU2ModCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5wb3NpdGlvbnMsbj10Lm1heGltdW1IZWlnaHRzLG89dC5taW5pbXVtSGVpZ2h0cztpZighbShlKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5wb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7aWYobShuKSYmbi5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRCgib3B0aW9ucy5wb3NpdGlvbnMgYW5kIG9wdGlvbnMubWF4aW11bUhlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4iKTtpZihtKG8pJiZvLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBEKCJvcHRpb25zLnBvc2l0aW9ucyBhbmQgb3B0aW9ucy5taW5pbXVtSGVpZ2h0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiIpO2xldCByPXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLGk9dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdDt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9taW5pbXVtSGVpZ2h0cz1vLHRoaXMuX21heGltdW1IZWlnaHRzPW4sdGhpcy5fZ3JhbnVsYXJpdHk9cix0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShpKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVXYWxsT3V0bGluZUdlb21ldHJ5IjtsZXQgcz0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoKzI7bShvKSYmKHMrPW8ubGVuZ3RoKSxtKG4pJiYocys9bi5sZW5ndGgpLHRoaXMucGFja2VkTGVuZ3RoPXMrWS5wYWNrZWRMZW5ndGgrMX12YXIgTzIsRTIsUjIscHUsRWcsUzI9JCgoKT0+e3ZlKCk7RHQoKTtEZSgpO3llKCk7ZnQoKTtIdCgpOyR0KCk7WWUoKTskZSgpO2FuKCk7WmUoKTtLdCgpO3RuKCk7QWcoKTtPMj1uZXcgYSxFMj1uZXcgYTtTYy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighbSh0KSl0aHJvdyBuZXcgRCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighbShlKSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPW4/PzA7bGV0IG8scj10Ll9wb3NpdGlvbnMsaT1yLmxlbmd0aDtmb3IoZVtuKytdPWksbz0wO288aTsrK28sbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKHJbb10sZSxuKTtsZXQgcz10Ll9taW5pbXVtSGVpZ2h0cztpZihpPW0ocyk/cy5sZW5ndGg6MCxlW24rK109aSxtKHMpKWZvcihvPTA7bzxpOysrbyllW24rK109c1tvXTtsZXQgZj10Ll9tYXhpbXVtSGVpZ2h0cztpZihpPW0oZik/Zi5sZW5ndGg6MCxlW24rK109aSxtKGYpKWZvcihvPTA7bzxpOysrbyllW24rK109ZltvXTtyZXR1cm4gWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLGVbbl09dC5fZ3JhbnVsYXJpdHksZX07UjI9WS5jbG9uZShZLlVOSVRfU1BIRVJFKSxwdT17cG9zaXRpb25zOnZvaWQgMCxtaW5pbXVtSGVpZ2h0czp2b2lkIDAsbWF4aW11bUhlaWdodHM6dm9pZCAwLGVsbGlwc29pZDpSMixncmFudWxhcml0eTp2b2lkIDB9O1NjLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIW0odCkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7ZT1lPz8wO2xldCBvLHI9dFtlKytdLGk9bmV3IEFycmF5KHIpO2ZvcihvPTA7bzxyOysrbyxlKz1hLnBhY2tlZExlbmd0aClpW29dPWEudW5wYWNrKHQsZSk7cj10W2UrK107bGV0IHM7aWYocj4wKWZvcihzPW5ldyBBcnJheShyKSxvPTA7bzxyOysrbylzW29dPXRbZSsrXTtyPXRbZSsrXTtsZXQgZjtpZihyPjApZm9yKGY9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKWZbb109dFtlKytdO2xldCB1PVkudW5wYWNrKHQsZSxSMik7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IGM9dFtlXTtyZXR1cm4gbShuKT8obi5fcG9zaXRpb25zPWksbi5fbWluaW11bUhlaWdodHM9cyxuLl9tYXhpbXVtSGVpZ2h0cz1mLG4uX2VsbGlwc29pZD1ZLmNsb25lKHUsbi5fZWxsaXBzb2lkKSxuLl9ncmFudWxhcml0eT1jLG4pOihwdS5wb3NpdGlvbnM9aSxwdS5taW5pbXVtSGVpZ2h0cz1zLHB1Lm1heGltdW1IZWlnaHRzPWYscHUuZ3JhbnVsYXJpdHk9YyxuZXcgU2MocHUpKX07U2MuZnJvbUNvbnN0YW50SGVpZ2h0cz1mdW5jdGlvbih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvc2l0aW9ucztpZighbShlKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5wb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7bGV0IG4sbyxyPXQubWluaW11bUhlaWdodCxpPXQubWF4aW11bUhlaWdodCxzPW0ociksZj1tKGkpO2lmKHN8fGYpe2xldCBjPWUubGVuZ3RoO249cz9uZXcgQXJyYXkoYyk6dm9pZCAwLG89Zj9uZXcgQXJyYXkoYyk6dm9pZCAwO2ZvcihsZXQgbD0wO2w8YzsrK2wpcyYmKG5bbF09ciksZiYmKG9bbF09aSl9bGV0IHU9e3Bvc2l0aW9uczplLG1heGltdW1IZWlnaHRzOm8sbWluaW11bUhlaWdodHM6bixlbGxpcHNvaWQ6dC5lbGxpcHNvaWR9O3JldHVybiBuZXcgU2ModSl9O1NjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPXQuX21pbmltdW1IZWlnaHRzLG89dC5fbWF4aW11bUhlaWdodHMscj10Ll9ncmFudWxhcml0eSxpPXQuX2VsbGlwc29pZCxzPXJtLmNvbXB1dGVQb3NpdGlvbnMoaSxlLG8sbixyLCExKTtpZighbShzKSlyZXR1cm47bGV0IGY9cy5ib3R0b21Qb3NpdGlvbnMsdT1zLnRvcFBvc2l0aW9ucyxjPXUubGVuZ3RoLGw9YyoyLHA9bmV3IEZsb2F0NjRBcnJheShsKSxkPTA7Yy89MztsZXQgaDtmb3IoaD0wO2g8YzsrK2gpe2xldCBPPWgqMyxFPWEuZnJvbUFycmF5KHUsTyxPMiksVD1hLmZyb21BcnJheShmLE8sRTIpO3BbZCsrXT1ULngscFtkKytdPVQueSxwW2QrK109VC56LHBbZCsrXT1FLngscFtkKytdPUUueSxwW2QrK109RS56fWxldCBfPW5ldyBpZSh7cG9zaXRpb246bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpwfSl9KSxnPWwvMztsPTIqZy00K2c7bGV0IGI9THQuY3JlYXRlVHlwZWRBcnJheShnLGwpLHc9MDtmb3IoaD0wO2g8Zy0yO2grPTIpe2xldCBPPWgsRT1oKzIsVD1hLmZyb21BcnJheShwLE8qMyxPMikseD1hLmZyb21BcnJheShwLEUqMyxFMik7aWYoYS5lcXVhbHNFcHNpbG9uKFQseCxQLkVQU0lMT04xMCkpY29udGludWU7bGV0IE09aCsxLE49aCszO2JbdysrXT1NLGJbdysrXT1PLGJbdysrXT1NLGJbdysrXT1OLGJbdysrXT1PLGJbdysrXT1FfXJldHVybiBiW3crK109Zy0yLGJbdysrXT1nLTEsbmV3IFV0KHthdHRyaWJ1dGVzOl8saW5kaWNlczpiLHByaW1pdGl2ZVR5cGU6QnQuTElORVMsYm91bmRpbmdTcGhlcmU6bmV3IEF0LmZyb21WZXJ0aWNlcyhwKX0pfTtFZz1TY30pO3ZhciBSZz17fTtsZShSZyx7ZGVmYXVsdDooKT0+UVV9KTtmdW5jdGlvbiBaVSh0LGUpe3JldHVybiBtKGUpJiYodD1FZy51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSxFZy5jcmVhdGVHZW9tZXRyeSh0KX12YXIgUVUsU2c9JCgoKT0+e2Z0KCk7JHQoKTtTMigpO1FVPVpVfSk7dmFyIFBnPVluKChkdSxDZyk9Pnt2YXIga3Q9a3R8fHt9O2t0LnNjb3BlPXt9O2t0LmFycmF5SXRlcmF0b3JJbXBsPWZ1bmN0aW9uKHQpe3ZhciBlPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGU8dC5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6dFtlKytdfTp7ZG9uZTohMH19fTtrdC5hcnJheUl0ZXJhdG9yPWZ1bmN0aW9uKHQpe3JldHVybntuZXh0Omt0LmFycmF5SXRlcmF0b3JJbXBsKHQpfX07a3QubWFrZUl0ZXJhdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuaXRlcmF0b3ImJnRbU3ltYm9sLml0ZXJhdG9yXTtyZXR1cm4gZT9lLmNhbGwodCk6a3QuYXJyYXlJdGVyYXRvcih0KX07a3QuQVNTVU1FX0VTNT0hMTtrdC5BU1NVTUVfTk9fTkFUSVZFX01BUD0hMTtrdC5BU1NVTUVfTk9fTkFUSVZFX1NFVD0hMTtrdC5TSU1QTEVfRlJPVU5EX1BPTFlGSUxMPSExO2t0LklTT0xBVEVfUE9MWUZJTExTPSExO2t0LkZPUkNFX1BPTFlGSUxMX1BST01JU0U9ITE7a3QuRk9SQ0VfUE9MWUZJTExfUFJPTUlTRV9XSEVOX05PX1VOSEFORExFRF9SRUpFQ1RJT049ITE7a3QuZ2V0R2xvYmFsPWZ1bmN0aW9uKHQpe3Q9W3R5cGVvZiBnbG9iYWxUaGlzPT0ib2JqZWN0IiYmZ2xvYmFsVGhpcyx0LHR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3csdHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmLHR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWxdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgbj10W2VdO2lmKG4mJm4uTWF0aD09TWF0aClyZXR1cm4gbn10aHJvdyBFcnJvcigiQ2Fubm90IGZpbmQgZ2xvYmFsIG9iamVjdCIpfTtrdC5nbG9iYWw9a3QuZ2V0R2xvYmFsKGR1KTtrdC5kZWZpbmVQcm9wZXJ0eT1rdC5BU1NVTUVfRVM1fHx0eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM9PSJmdW5jdGlvbiI/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD09QXJyYXkucHJvdG90eXBlfHx0PT1PYmplY3QucHJvdG90eXBlfHwodFtlXT1uLnZhbHVlKSx0fTtrdC5JU19TWU1CT0xfTkFUSVZFPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2woIngiKT09InN5bWJvbCI7a3QuVFJVU1RfRVM2X1BPTFlGSUxMUz0ha3QuSVNPTEFURV9QT0xZRklMTFN8fGt0LklTX1NZTUJPTF9OQVRJVkU7a3QucG9seWZpbGxzPXt9O2t0LnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbD17fTtrdC5QT0xZRklMTF9QUkVGSVg9IiRqc2NwJCI7a3QucG9seWZpbGw9ZnVuY3Rpb24odCxlLG4sbyl7ZSYmKGt0LklTT0xBVEVfUE9MWUZJTExTP2t0LnBvbHlmaWxsSXNvbGF0ZWQodCxlLG4sbyk6a3QucG9seWZpbGxVbmlzb2xhdGVkKHQsZSxuLG8pKX07a3QucG9seWZpbGxVbmlzb2xhdGVkPWZ1bmN0aW9uKHQsZSxuLG8pe2ZvcihuPWt0Lmdsb2JhbCx0PXQuc3BsaXQoIi4iKSxvPTA7bzx0Lmxlbmd0aC0xO28rKyl7dmFyIHI9dFtvXTtpZighKHIgaW4gbikpcmV0dXJuO249bltyXX10PXRbdC5sZW5ndGgtMV0sbz1uW3RdLGU9ZShvKSxlIT1vJiZlIT1udWxsJiZrdC5kZWZpbmVQcm9wZXJ0eShuLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTplfSl9O2t0LnBvbHlmaWxsSXNvbGF0ZWQ9ZnVuY3Rpb24odCxlLG4sbyl7dmFyIHI9dC5zcGxpdCgiLiIpO3Q9ci5sZW5ndGg9PT0xLG89clswXSxvPSF0JiZvIGluIGt0LnBvbHlmaWxscz9rdC5wb2x5ZmlsbHM6a3QuZ2xvYmFsO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGgtMTtpKyspe3ZhciBzPXJbaV07aWYoIShzIGluIG8pKXJldHVybjtvPW9bc119cj1yW3IubGVuZ3RoLTFdLG49a3QuSVNfU1lNQk9MX05BVElWRSYmbj09PSJlczYiP29bcl06bnVsbCxlPWUobiksZSE9bnVsbCYmKHQ/a3QuZGVmaW5lUHJvcGVydHkoa3QucG9seWZpbGxzLHIse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTplfSk6ZSE9PW4mJihrdC5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2xbcl09PT12b2lkIDAmJihuPTFlOSpNYXRoLnJhbmRvbSgpPj4+MCxrdC5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2xbcl09a3QuSVNfU1lNQk9MX05BVElWRT9rdC5nbG9iYWwuU3ltYm9sKHIpOmt0LlBPTFlGSUxMX1BSRUZJWCtuKyIkIityKSxrdC5kZWZpbmVQcm9wZXJ0eShvLGt0LnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFtyXSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KSkpfTtrdC5wb2x5ZmlsbCgiUHJvbWlzZSIsZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3RoaXMuYmF0Y2hfPW51bGx9ZnVuY3Rpb24gbihzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIHI/czpuZXcgcihmdW5jdGlvbihmLHUpe2Yocyl9KX1pZih0JiYoIShrdC5GT1JDRV9QT0xZRklMTF9QUk9NSVNFfHxrdC5GT1JDRV9QT0xZRklMTF9QUk9NSVNFX1dIRU5fTk9fVU5IQU5ETEVEX1JFSkVDVElPTiYmdHlwZW9mIGt0Lmdsb2JhbC5Qcm9taXNlUmVqZWN0aW9uRXZlbnQ+InUiKXx8IWt0Lmdsb2JhbC5Qcm9taXNlfHxrdC5nbG9iYWwuUHJvbWlzZS50b1N0cmluZygpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKT09PS0xKSlyZXR1cm4gdDtlLnByb3RvdHlwZS5hc3luY0V4ZWN1dGU9ZnVuY3Rpb24ocyl7aWYodGhpcy5iYXRjaF89PW51bGwpe3RoaXMuYmF0Y2hfPVtdO3ZhciBmPXRoaXM7dGhpcy5hc3luY0V4ZWN1dGVGdW5jdGlvbihmdW5jdGlvbigpe2YuZXhlY3V0ZUJhdGNoXygpfSl9dGhpcy5iYXRjaF8ucHVzaChzKX07dmFyIG89a3QuZ2xvYmFsLnNldFRpbWVvdXQ7ZS5wcm90b3R5cGUuYXN5bmNFeGVjdXRlRnVuY3Rpb249ZnVuY3Rpb24ocyl7byhzLDApfSxlLnByb3RvdHlwZS5leGVjdXRlQmF0Y2hfPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmJhdGNoXyYmdGhpcy5iYXRjaF8ubGVuZ3RoOyl7dmFyIHM9dGhpcy5iYXRjaF87dGhpcy5iYXRjaF89W107Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2Ype3ZhciB1PXNbZl07c1tmXT1udWxsO3RyeXt1KCl9Y2F0Y2goYyl7dGhpcy5hc3luY1Rocm93XyhjKX19fXRoaXMuYmF0Y2hfPW51bGx9LGUucHJvdG90eXBlLmFzeW5jVGhyb3dfPWZ1bmN0aW9uKHMpe3RoaXMuYXN5bmNFeGVjdXRlRnVuY3Rpb24oZnVuY3Rpb24oKXt0aHJvdyBzfSl9O3ZhciByPWZ1bmN0aW9uKHMpe3RoaXMuc3RhdGVfPTAsdGhpcy5yZXN1bHRfPXZvaWQgMCx0aGlzLm9uU2V0dGxlZENhbGxiYWNrc189W10sdGhpcy5pc1JlamVjdGlvbkhhbmRsZWRfPSExO3ZhciBmPXRoaXMuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF8oKTt0cnl7cyhmLnJlc29sdmUsZi5yZWplY3QpfWNhdGNoKHUpe2YucmVqZWN0KHUpfX07ci5wcm90b3R5cGUuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGMpe3JldHVybiBmdW5jdGlvbihsKXt1fHwodT0hMCxjLmNhbGwoZixsKSl9fXZhciBmPXRoaXMsdT0hMTtyZXR1cm57cmVzb2x2ZTpzKHRoaXMucmVzb2x2ZVRvXykscmVqZWN0OnModGhpcy5yZWplY3RfKX19LHIucHJvdG90eXBlLnJlc29sdmVUb189ZnVuY3Rpb24ocyl7aWYocz09PXRoaXMpdGhpcy5yZWplY3RfKG5ldyBUeXBlRXJyb3IoIkEgUHJvbWlzZSBjYW5ub3QgcmVzb2x2ZSB0byBpdHNlbGYiKSk7ZWxzZSBpZihzIGluc3RhbmNlb2Ygcil0aGlzLnNldHRsZVNhbWVBc1Byb21pc2VfKHMpO2Vsc2V7dDpzd2l0Y2godHlwZW9mIHMpe2Nhc2Uib2JqZWN0Ijp2YXIgZj1zIT1udWxsO2JyZWFrIHQ7Y2FzZSJmdW5jdGlvbiI6Zj0hMDticmVhayB0O2RlZmF1bHQ6Zj0hMX1mP3RoaXMucmVzb2x2ZVRvTm9uUHJvbWlzZU9ial8ocyk6dGhpcy5mdWxmaWxsXyhzKX19LHIucHJvdG90eXBlLnJlc29sdmVUb05vblByb21pc2VPYmpfPWZ1bmN0aW9uKHMpe3ZhciBmPXZvaWQgMDt0cnl7Zj1zLnRoZW59Y2F0Y2godSl7dGhpcy5yZWplY3RfKHUpO3JldHVybn10eXBlb2YgZj09ImZ1bmN0aW9uIj90aGlzLnNldHRsZVNhbWVBc1RoZW5hYmxlXyhmLHMpOnRoaXMuZnVsZmlsbF8ocyl9LHIucHJvdG90eXBlLnJlamVjdF89ZnVuY3Rpb24ocyl7dGhpcy5zZXR0bGVfKDIscyl9LHIucHJvdG90eXBlLmZ1bGZpbGxfPWZ1bmN0aW9uKHMpe3RoaXMuc2V0dGxlXygxLHMpfSxyLnByb3RvdHlwZS5zZXR0bGVfPWZ1bmN0aW9uKHMsZil7aWYodGhpcy5zdGF0ZV8hPTApdGhyb3cgRXJyb3IoIkNhbm5vdCBzZXR0bGUoIitzKyIsICIrZisiKTogUHJvbWlzZSBhbHJlYWR5IHNldHRsZWQgaW4gc3RhdGUiK3RoaXMuc3RhdGVfKTt0aGlzLnN0YXRlXz1zLHRoaXMucmVzdWx0Xz1mLHRoaXMuc3RhdGVfPT09MiYmdGhpcy5zY2hlZHVsZVVuaGFuZGxlZFJlamVjdGlvbkNoZWNrXygpLHRoaXMuZXhlY3V0ZU9uU2V0dGxlZENhbGxiYWNrc18oKX0sci5wcm90b3R5cGUuc2NoZWR1bGVVbmhhbmRsZWRSZWplY3Rpb25DaGVja189ZnVuY3Rpb24oKXt2YXIgcz10aGlzO28oZnVuY3Rpb24oKXtpZihzLm5vdGlmeVVuaGFuZGxlZFJlamVjdGlvbl8oKSl7dmFyIGY9a3QuZ2xvYmFsLmNvbnNvbGU7dHlwZW9mIGY8InUiJiZmLmVycm9yKHMucmVzdWx0Xyl9fSwxKX0sci5wcm90b3R5cGUubm90aWZ5VW5oYW5kbGVkUmVqZWN0aW9uXz1mdW5jdGlvbigpe2lmKHRoaXMuaXNSZWplY3Rpb25IYW5kbGVkXylyZXR1cm4hMTt2YXIgcz1rdC5nbG9iYWwuQ3VzdG9tRXZlbnQsZj1rdC5nbG9iYWwuRXZlbnQsdT1rdC5nbG9iYWwuZGlzcGF0Y2hFdmVudDtyZXR1cm4gdHlwZW9mIHU+InUiPyEwOih0eXBlb2Ygcz09ImZ1bmN0aW9uIj9zPW5ldyBzKCJ1bmhhbmRsZWRyZWplY3Rpb24iLHtjYW5jZWxhYmxlOiEwfSk6dHlwZW9mIGY9PSJmdW5jdGlvbiI/cz1uZXcgZigidW5oYW5kbGVkcmVqZWN0aW9uIix7Y2FuY2VsYWJsZTohMH0pOihzPWt0Lmdsb2JhbC5kb2N1bWVudC5jcmVhdGVFdmVudCgiQ3VzdG9tRXZlbnQiKSxzLmluaXRDdXN0b21FdmVudCgidW5oYW5kbGVkcmVqZWN0aW9uIiwhMSwhMCxzKSkscy5wcm9taXNlPXRoaXMscy5yZWFzb249dGhpcy5yZXN1bHRfLHUocykpfSxyLnByb3RvdHlwZS5leGVjdXRlT25TZXR0bGVkQ2FsbGJhY2tzXz1mdW5jdGlvbigpe2lmKHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXyE9bnVsbCl7Zm9yKHZhciBzPTA7czx0aGlzLm9uU2V0dGxlZENhbGxiYWNrc18ubGVuZ3RoOysrcylpLmFzeW5jRXhlY3V0ZSh0aGlzLm9uU2V0dGxlZENhbGxiYWNrc19bc10pO3RoaXMub25TZXR0bGVkQ2FsbGJhY2tzXz1udWxsfX07dmFyIGk9bmV3IGU7cmV0dXJuIHIucHJvdG90eXBlLnNldHRsZVNhbWVBc1Byb21pc2VfPWZ1bmN0aW9uKHMpe3ZhciBmPXRoaXMuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF8oKTtzLmNhbGxXaGVuU2V0dGxlZF8oZi5yZXNvbHZlLGYucmVqZWN0KX0sci5wcm90b3R5cGUuc2V0dGxlU2FtZUFzVGhlbmFibGVfPWZ1bmN0aW9uKHMsZil7dmFyIHU9dGhpcy5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0XygpO3RyeXtzLmNhbGwoZix1LnJlc29sdmUsdS5yZWplY3QpfWNhdGNoKGMpe3UucmVqZWN0KGMpfX0sci5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihzLGYpe2Z1bmN0aW9uIHUoZCxoKXtyZXR1cm4gdHlwZW9mIGQ9PSJmdW5jdGlvbiI/ZnVuY3Rpb24oXyl7dHJ5e2MoZChfKSl9Y2F0Y2goZyl7bChnKX19Omh9dmFyIGMsbCxwPW5ldyByKGZ1bmN0aW9uKGQsaCl7Yz1kLGw9aH0pO3JldHVybiB0aGlzLmNhbGxXaGVuU2V0dGxlZF8odShzLGMpLHUoZixsKSkscH0sci5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAscyl9LHIucHJvdG90eXBlLmNhbGxXaGVuU2V0dGxlZF89ZnVuY3Rpb24ocyxmKXtmdW5jdGlvbiB1KCl7c3dpdGNoKGMuc3RhdGVfKXtjYXNlIDE6cyhjLnJlc3VsdF8pO2JyZWFrO2Nhc2UgMjpmKGMucmVzdWx0Xyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBzdGF0ZTogIitjLnN0YXRlXyl9fXZhciBjPXRoaXM7dGhpcy5vblNldHRsZWRDYWxsYmFja3NfPT1udWxsP2kuYXN5bmNFeGVjdXRlKHUpOnRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXy5wdXNoKHUpLHRoaXMuaXNSZWplY3Rpb25IYW5kbGVkXz0hMH0sci5yZXNvbHZlPW4sci5yZWplY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyByKGZ1bmN0aW9uKGYsdSl7dShzKX0pfSxyLnJhY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyByKGZ1bmN0aW9uKGYsdSl7Zm9yKHZhciBjPWt0Lm1ha2VJdGVyYXRvcihzKSxsPWMubmV4dCgpOyFsLmRvbmU7bD1jLm5leHQoKSluKGwudmFsdWUpLmNhbGxXaGVuU2V0dGxlZF8oZix1KX0pfSxyLmFsbD1mdW5jdGlvbihzKXt2YXIgZj1rdC5tYWtlSXRlcmF0b3IocyksdT1mLm5leHQoKTtyZXR1cm4gdS5kb25lP24oW10pOm5ldyByKGZ1bmN0aW9uKGMsbCl7ZnVuY3Rpb24gcChfKXtyZXR1cm4gZnVuY3Rpb24oZyl7ZFtfXT1nLGgtLSxoPT0wJiZjKGQpfX12YXIgZD1bXSxoPTA7ZG8gZC5wdXNoKHZvaWQgMCksaCsrLG4odS52YWx1ZSkuY2FsbFdoZW5TZXR0bGVkXyhwKGQubGVuZ3RoLTEpLGwpLHU9Zi5uZXh0KCk7d2hpbGUoIXUuZG9uZSl9KX0scn0sImVzNiIsImVzMyIpO2t0Lm93bnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9O2t0LmFzc2lnbj1rdC5UUlVTVF9FUzZfUE9MWUZJTExTJiZ0eXBlb2YgT2JqZWN0LmFzc2lnbj09ImZ1bmN0aW9uIj9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIG89YXJndW1lbnRzW25dO2lmKG8pZm9yKHZhciByIGluIG8pa3Qub3ducyhvLHIpJiYodFtyXT1vW3JdKX1yZXR1cm4gdH07a3QucG9seWZpbGwoIk9iamVjdC5hc3NpZ24iLGZ1bmN0aW9uKHQpe3JldHVybiB0fHxrdC5hc3NpZ259LCJlczYiLCJlczMiKTtrdC5jaGVja1N0cmluZ0FyZ3M9ZnVuY3Rpb24odCxlLG4pe2lmKHQ9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlICd0aGlzJyB2YWx1ZSBmb3IgU3RyaW5nLnByb3RvdHlwZS4iK24rIiBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCIpO2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApdGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgdG8gU3RyaW5nLnByb3RvdHlwZS4iK24rIiBtdXN0IG5vdCBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiIpO3JldHVybiB0KyIifTtrdC5wb2x5ZmlsbCgiU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoIixmdW5jdGlvbih0KXtyZXR1cm4gdHx8ZnVuY3Rpb24oZSxuKXt2YXIgbz1rdC5jaGVja1N0cmluZ0FyZ3ModGhpcyxlLCJzdGFydHNXaXRoIik7ZSs9IiI7dmFyIHI9by5sZW5ndGgsaT1lLmxlbmd0aDtuPU1hdGgubWF4KDAsTWF0aC5taW4obnwwLG8ubGVuZ3RoKSk7Zm9yKHZhciBzPTA7czxpJiZuPHI7KWlmKG9bbisrXSE9ZVtzKytdKXJldHVybiExO3JldHVybiBzPj1pfX0sImVzNiIsImVzMyIpO2t0LnBvbHlmaWxsKCJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm4gbj1OdW1iZXIobiksbj09PTEvMHx8bj09PS0xLzA/bjpufDB9cmV0dXJuIHR8fGZ1bmN0aW9uKG4sbyxyKXt2YXIgaT10aGlzLmxlbmd0aDtpZihuPWUobiksbz1lKG8pLHI9cj09PXZvaWQgMD9pOmUociksbj0wPm4/TWF0aC5tYXgoaStuLDApOk1hdGgubWluKG4saSksbz0wPm8/TWF0aC5tYXgoaStvLDApOk1hdGgubWluKG8saSkscj0wPnI/TWF0aC5tYXgoaStyLDApOk1hdGgubWluKHIsaSksbjxvKWZvcig7bzxyOylvIGluIHRoaXM/dGhpc1tuKytdPXRoaXNbbysrXTooZGVsZXRlIHRoaXNbbisrXSxvKyspO2Vsc2UgZm9yKHI9TWF0aC5taW4ocixpK28tbiksbis9ci1vO3I+bzspLS1yIGluIHRoaXM/dGhpc1stLW5dPXRoaXNbcl06ZGVsZXRlIHRoaXNbLS1uXTtyZXR1cm4gdGhpc319LCJlczYiLCJlczMiKTtrdC50eXBlZEFycmF5Q29weVdpdGhpbj1mdW5jdGlvbih0KXtyZXR1cm4gdHx8QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW59O2t0LnBvbHlmaWxsKCJJbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLGt0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtrdC5wb2x5ZmlsbCgiVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsa3QudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO2t0LnBvbHlmaWxsKCJVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsa3QudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO2t0LnBvbHlmaWxsKCJJbnQxNkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixrdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7a3QucG9seWZpbGwoIlVpbnQxNkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixrdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7a3QucG9seWZpbGwoIkludDMyQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLGt0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtrdC5wb2x5ZmlsbCgiVWludDMyQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLGt0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtrdC5wb2x5ZmlsbCgiRmxvYXQzMkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixrdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7a3QucG9seWZpbGwoIkZsb2F0NjRBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsa3QudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO3ZhciB4Zz1mdW5jdGlvbigpe3ZhciB0PXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiB0eXBlb2YgX19maWxlbmFtZTwidSImJih0PXR8fF9fZmlsZW5hbWUpLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oVil7cmV0dXJuIFIubG9jYXRlRmlsZT9SLmxvY2F0ZUZpbGUoVixkdCk6ZHQrVn1mdW5jdGlvbiBvKFYsSyx0dCl7dmFyIE10PUsrdHQ7Zm9yKHR0PUs7Vlt0dF0mJiEodHQ+PU10KTspKyt0dDtpZigxNjx0dC1LJiZWLmJ1ZmZlciYmZ2UpcmV0dXJuIGdlLmRlY29kZShWLnN1YmFycmF5KEssdHQpKTtmb3IoTXQ9IiI7Szx0dDspe3ZhciB1ZT1WW0srK107aWYodWUmMTI4KXt2YXIgd2U9VltLKytdJjYzO2lmKCh1ZSYyMjQpPT0xOTIpTXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoKHVlJjMxKTw8Nnx3ZSk7ZWxzZXt2YXIgRWk9VltLKytdJjYzO3VlPSh1ZSYyNDApPT0yMjQ/KHVlJjE1KTw8MTJ8d2U8PDZ8RWk6KHVlJjcpPDwxOHx3ZTw8MTJ8RWk8PDZ8VltLKytdJjYzLDY1NTM2PnVlP010Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHVlKToodWUtPTY1NTM2LE10Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHVlPj4xMCw1NjMyMHx1ZSYxMDIzKSl9fWVsc2UgTXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodWUpfXJldHVybiBNdH1mdW5jdGlvbiByKFYsSyl7cmV0dXJuIFY/byh1bixWLEspOiIifWZ1bmN0aW9uIGkoKXt2YXIgVj1RdC5idWZmZXI7Ui5IRUFQOD1FZT1uZXcgSW50OEFycmF5KFYpLFIuSEVBUDE2PW5ldyBJbnQxNkFycmF5KFYpLFIuSEVBUDMyPVZlPW5ldyBJbnQzMkFycmF5KFYpLFIuSEVBUFU4PXVuPW5ldyBVaW50OEFycmF5KFYpLFIuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoViksUi5IRUFQVTMyPWJlPW5ldyBVaW50MzJBcnJheShWKSxSLkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShWKSxSLkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShWKX1mdW5jdGlvbiBzKFYpe3Rocm93IFIub25BYm9ydCYmUi5vbkFib3J0KFYpLFY9IkFib3J0ZWQoIitWKyIpIixmZShWKSxOZT0hMCxWPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoVisiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiIpLGF0KFYpLFZ9ZnVuY3Rpb24gZihWKXt0cnl7aWYoVj09c24mJlp0KXJldHVybiBuZXcgVWludDhBcnJheShadCk7aWYocGUpcmV0dXJuIHBlKFYpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChLKXtzKEspfX1mdW5jdGlvbiB1KCl7aWYoIVp0JiYoUHR8fGd0KSl7aWYodHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiYhc24uc3RhcnRzV2l0aCgiZmlsZTovLyIpKXJldHVybiBmZXRjaChzbix7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oVil7aWYoIVYub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitzbisiJyI7cmV0dXJuIFYuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIGYoc24pfSk7aWYocmUpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFYsSyl7cmUoc24sZnVuY3Rpb24odHQpe1YobmV3IFVpbnQ4QXJyYXkodHQpKX0sSyl9KX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBmKHNuKX0pfWZ1bmN0aW9uIGMoVil7Zm9yKDswPFYubGVuZ3RoOylWLnNoaWZ0KCkoUil9ZnVuY3Rpb24gbChWKXt0aGlzLmV4Y1B0cj1WLHRoaXMucHRyPVYtMjQsdGhpcy5zZXRfdHlwZT1mdW5jdGlvbihLKXtiZVt0aGlzLnB0cis0Pj4yXT1LfSx0aGlzLmdldF90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGJlW3RoaXMucHRyKzQ+PjJdfSx0aGlzLnNldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKEspe2JlW3RoaXMucHRyKzg+PjJdPUt9LHRoaXMuZ2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gYmVbdGhpcy5wdHIrOD4+Ml19LHRoaXMuc2V0X3JlZmNvdW50PWZ1bmN0aW9uKEspe1ZlW3RoaXMucHRyPj4yXT1LfSx0aGlzLnNldF9jYXVnaHQ9ZnVuY3Rpb24oSyl7RWVbdGhpcy5wdHIrMTI+PjBdPUs/MTowfSx0aGlzLmdldF9jYXVnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gRWVbdGhpcy5wdHIrMTI+PjBdIT0wfSx0aGlzLnNldF9yZXRocm93bj1mdW5jdGlvbihLKXtFZVt0aGlzLnB0cisxMz4+MF09Sz8xOjB9LHRoaXMuZ2V0X3JldGhyb3duPWZ1bmN0aW9uKCl7cmV0dXJuIEVlW3RoaXMucHRyKzEzPj4wXSE9MH0sdGhpcy5pbml0PWZ1bmN0aW9uKEssdHQpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKEspLHRoaXMuc2V0X2Rlc3RydWN0b3IodHQpLHRoaXMuc2V0X3JlZmNvdW50KDApLHRoaXMuc2V0X2NhdWdodCghMSksdGhpcy5zZXRfcmV0aHJvd24oITEpfSx0aGlzLmFkZF9yZWY9ZnVuY3Rpb24oKXtWZVt0aGlzLnB0cj4+Ml0rPTF9LHRoaXMucmVsZWFzZV9yZWY9ZnVuY3Rpb24oKXt2YXIgSz1WZVt0aGlzLnB0cj4+Ml07cmV0dXJuIFZlW3RoaXMucHRyPj4yXT1LLTEsSz09PTF9LHRoaXMuc2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbihLKXtiZVt0aGlzLnB0cisxNj4+Ml09S30sdGhpcy5nZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKCl7cmV0dXJuIGJlW3RoaXMucHRyKzE2Pj4yXX0sdGhpcy5nZXRfZXhjZXB0aW9uX3B0cj1mdW5jdGlvbigpe2lmKGtsKHRoaXMuZ2V0X3R5cGUoKSkpcmV0dXJuIGJlW3RoaXMuZXhjUHRyPj4yXTt2YXIgSz10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtyZXR1cm4gSyE9PTA/Szp0aGlzLmV4Y1B0cn19ZnVuY3Rpb24gcCgpe2Z1bmN0aW9uIFYoKXtpZighb2YmJihvZj0hMCxSLmNhbGxlZFJ1bj0hMCwhTmUpKXtpZihvZT0hMCxjKHBuKSxudChSKSxSLm9uUnVudGltZUluaXRpYWxpemVkJiZSLm9uUnVudGltZUluaXRpYWxpemVkKCksUi5wb3N0UnVuKWZvcih0eXBlb2YgUi5wb3N0UnVuPT0iZnVuY3Rpb24iJiYoUi5wb3N0UnVuPVtSLnBvc3RSdW5dKTtSLnBvc3RSdW4ubGVuZ3RoOylFbi51bnNoaWZ0KFIucG9zdFJ1bi5zaGlmdCgpKTtjKEVuKX19aWYoISgwPFl0KSl7aWYoUi5wcmVSdW4pZm9yKHR5cGVvZiBSLnByZVJ1bj09ImZ1bmN0aW9uIiYmKFIucHJlUnVuPVtSLnByZVJ1bl0pO1IucHJlUnVuLmxlbmd0aDspbG4udW5zaGlmdChSLnByZVJ1bi5zaGlmdCgpKTtjKGxuKSwwPFl0fHwoUi5zZXRTdGF0dXM/KFIuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtSLnNldFN0YXR1cygiIil9LDEpLFYoKX0sMSkpOlYoKSl9fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gaChWKXtyZXR1cm4oVnx8ZCkuX19jYWNoZV9ffWZ1bmN0aW9uIF8oVixLKXt2YXIgdHQ9aChLKSxNdD10dFtWXTtyZXR1cm4gTXR8fChNdD1PYmplY3QuY3JlYXRlKChLfHxkKS5wcm90b3R5cGUpLE10LnB0cj1WLHR0W1ZdPU10KX1mdW5jdGlvbiBnKFYpe2lmKHR5cGVvZiBWPT0ic3RyaW5nIil7Zm9yKHZhciBLPTAsdHQ9MDt0dDxWLmxlbmd0aDsrK3R0KXt2YXIgTXQ9Vi5jaGFyQ29kZUF0KHR0KTsxMjc+PU10P0srKzoyMDQ3Pj1NdD9LKz0yOjU1Mjk2PD1NdCYmNTczNDM+PU10PyhLKz00LCsrdHQpOksrPTN9aWYoSz1BcnJheShLKzEpLHR0PTAsTXQ9Sy5sZW5ndGgsMDxNdCl7TXQ9dHQrTXQtMTtmb3IodmFyIHVlPTA7dWU8Vi5sZW5ndGg7Kyt1ZSl7dmFyIHdlPVYuY2hhckNvZGVBdCh1ZSk7aWYoNTUyOTY8PXdlJiY1NzM0Mz49d2Upe3ZhciBFaT1WLmNoYXJDb2RlQXQoKyt1ZSk7d2U9NjU1MzYrKCh3ZSYxMDIzKTw8MTApfEVpJjEwMjN9aWYoMTI3Pj13ZSl7aWYodHQ+PU10KWJyZWFrO0tbdHQrK109d2V9ZWxzZXtpZigyMDQ3Pj13ZSl7aWYodHQrMT49TXQpYnJlYWs7S1t0dCsrXT0xOTJ8d2U+PjZ9ZWxzZXtpZig2NTUzNT49d2Upe2lmKHR0KzI+PU10KWJyZWFrO0tbdHQrK109MjI0fHdlPj4xMn1lbHNle2lmKHR0KzM+PU10KWJyZWFrO0tbdHQrK109MjQwfHdlPj4xOCxLW3R0KytdPTEyOHx3ZT4+MTImNjN9S1t0dCsrXT0xMjh8d2U+PjYmNjN9S1t0dCsrXT0xMjh8d2UmNjN9fUtbdHRdPTB9cmV0dXJuIFY9eGUuYWxsb2MoSyxFZSkseGUuY29weShLLEVlLFYpLFZ9cmV0dXJuIFZ9ZnVuY3Rpb24gYihWKXtpZih0eXBlb2YgVj09Im9iamVjdCIpe3ZhciBLPXhlLmFsbG9jKFYsRWUpO3JldHVybiB4ZS5jb3B5KFYsRWUsSyksS31yZXR1cm4gVn1mdW5jdGlvbiB3KCl7dGhyb3ciY2Fubm90IGNvbnN0cnVjdCBhIFZvaWRQdHIsIG5vIGNvbnN0cnVjdG9yIGluIElETCJ9ZnVuY3Rpb24gTygpe3RoaXMucHRyPWNuKCksaChPKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBFKCl7dGhpcy5wdHI9cG8oKSxoKEUpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIFQoKXt0aGlzLnB0cj1tbygpLGgoVClbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24geCgpe3RoaXMucHRyPUZlKCksaCh4KVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBNKCl7dGhpcy5wdHI9dnMoKSxoKE0pW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIE4oKXt0aGlzLnB0cj1zbygpLGgoTilbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gRigpe3RoaXMucHRyPUljKCksaChGKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBJKCl7dGhpcy5wdHI9cnIoKSxoKEkpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIHYoKXt0aGlzLnB0cj1GYygpLGgodilbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gQigpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBTdGF0dXMsIG5vIGNvbnN0cnVjdG9yIGluIElETCJ9ZnVuY3Rpb24gQSgpe3RoaXMucHRyPXh1KCksaChBKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBTKCl7dGhpcy5wdHI9TGMoKSxoKFMpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEMoKXt0aGlzLnB0cj1XYSgpLGgoQylbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gTCgpe3RoaXMucHRyPUJjKCksaChMKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiB6KCl7dGhpcy5wdHI9THUoKSxoKHopW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIGooKXt0aGlzLnB0cj1VdSgpLGgoailbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gaygpe3RoaXMucHRyPWVzKCksaChrKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBxKCl7dGhpcy5wdHI9SHUoKSxoKHEpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIFcoKXt0aGlzLnB0cj1RYSgpLGgoVylbdGhpcy5wdHJdPXRoaXN9ZT1lPT09dm9pZCAwP3t9OmU7dmFyIFI9dHlwZW9mIGU8InUiP2U6e30sbnQsYXQ7Ui5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihWLEspe250PVYsYXQ9S30pO3ZhciBsdD0hMSxfdD0hMTtSLm9uUnVudGltZUluaXRpYWxpemVkPWZ1bmN0aW9uKCl7bHQ9ITAsX3QmJnR5cGVvZiBSLm9uTW9kdWxlTG9hZGVkPT0iZnVuY3Rpb24iJiZSLm9uTW9kdWxlTG9hZGVkKFIpfSxSLm9uTW9kdWxlUGFyc2VkPWZ1bmN0aW9uKCl7X3Q9ITAsbHQmJnR5cGVvZiBSLm9uTW9kdWxlTG9hZGVkPT0iZnVuY3Rpb24iJiZSLm9uTW9kdWxlTG9hZGVkKFIpfSxSLmlzVmVyc2lvblN1cHBvcnRlZD1mdW5jdGlvbihWKXtyZXR1cm4gdHlwZW9mIFYhPSJzdHJpbmciPyExOihWPVYuc3BsaXQoIi4iKSwyPlYubGVuZ3RofHwzPFYubGVuZ3RoPyExOlZbMF09PTEmJjA8PVZbMV0mJjU+PVZbMV0/ITA6IShWWzBdIT0wfHwxMDxWWzFdKSl9O3ZhciBvdD1PYmplY3QuYXNzaWduKHt9LFIpLFB0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiLGd0PXR5cGVvZiBpbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLFJ0PXR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlPT0ic3RyaW5nIixkdD0iIjtpZihSdCl7dmFyIHJ0PWRyKCJmcyIpLHh0PWRyKCJwYXRoIik7ZHQ9Z3Q/eHQuZGlybmFtZShkdCkrIi8iOl9fZGlybmFtZSsiLyI7dmFyIEd0PWZ1bmN0aW9uKFYsSyl7cmV0dXJuIFY9Vi5zdGFydHNXaXRoKCJmaWxlOi8vIik/bmV3IFVSTChWKTp4dC5ub3JtYWxpemUoVikscnQucmVhZEZpbGVTeW5jKFYsSz92b2lkIDA6InV0ZjgiKX0scGU9ZnVuY3Rpb24oVil7cmV0dXJuIFY9R3QoViwhMCksVi5idWZmZXJ8fChWPW5ldyBVaW50OEFycmF5KFYpKSxWfSxyZT1mdW5jdGlvbihWLEssdHQpe1Y9Vi5zdGFydHNXaXRoKCJmaWxlOi8vIik/bmV3IFVSTChWKTp4dC5ub3JtYWxpemUoVikscnQucmVhZEZpbGUoVixmdW5jdGlvbihNdCx1ZSl7TXQ/dHQoTXQpOksodWUuYnVmZmVyKX0pfTsxPHByb2Nlc3MuYXJndi5sZW5ndGgmJnByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXC9nLCIvIikscHJvY2Vzcy5hcmd2LnNsaWNlKDIpLFIuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9fWVsc2UoUHR8fGd0KSYmKGd0P2R0PXNlbGYubG9jYXRpb24uaHJlZjp0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoZHQ9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHQmJihkdD10KSxkdD1kdC5pbmRleE9mKCJibG9iOiIpIT09MD9kdC5zdWJzdHIoMCxkdC5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOiIiLEd0PWZ1bmN0aW9uKFYpe3ZhciBLPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gSy5vcGVuKCJHRVQiLFYsITEpLEsuc2VuZChudWxsKSxLLnJlc3BvbnNlVGV4dH0sZ3QmJihwZT1mdW5jdGlvbihWKXt2YXIgSz1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIEsub3BlbigiR0VUIixWLCExKSxLLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLEsuc2VuZChudWxsKSxuZXcgVWludDhBcnJheShLLnJlc3BvbnNlKX0pLHJlPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIE10PW5ldyBYTUxIdHRwUmVxdWVzdDtNdC5vcGVuKCJHRVQiLFYsITApLE10LnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLE10Lm9ubG9hZD1mdW5jdGlvbigpe010LnN0YXR1cz09MjAwfHxNdC5zdGF0dXM9PTAmJk10LnJlc3BvbnNlP0soTXQucmVzcG9uc2UpOnR0KCl9LE10Lm9uZXJyb3I9dHQsTXQuc2VuZChudWxsKX0pO3ZhciBkZT1SLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGZlPVIucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oUixvdCksb3Q9bnVsbDt2YXIgWnQ7Ui53YXNtQmluYXJ5JiYoWnQ9Ui53YXNtQmluYXJ5KSx0eXBlb2YgV2ViQXNzZW1ibHkhPSJvYmplY3QiJiZzKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIFF0LE5lPSExLGdlPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwLEVlLHVuLFZlLGJlLGxuPVtdLHBuPVtdLEVuPVtdLG9lPSExLFl0PTAsemU9bnVsbCxkbj1udWxsLHNuPSJkcmFjb19kZWNvZGVyLndhc20iO3NuLnN0YXJ0c1dpdGgoImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiKXx8KHNuPW4oc24pKTt2YXIgbW49MCxsbz1bbnVsbCxbXSxbXV0scW49e2I6ZnVuY3Rpb24oVixLLHR0KXt0aHJvdyBuZXcgbChWKS5pbml0KEssdHQpLG1uKyssVn0sYTpmdW5jdGlvbigpe3MoIiIpfSxnOmZ1bmN0aW9uKFYsSyx0dCl7dW4uY29weVdpdGhpbihWLEssSyt0dCl9LGU6ZnVuY3Rpb24oVil7dmFyIEs9dW4ubGVuZ3RoO2lmKFY+Pj49MCwyMTQ3NDgzNjQ4PFYpcmV0dXJuITE7Zm9yKHZhciB0dD0xOzQ+PXR0O3R0Kj0yKXt2YXIgTXQ9SyooMSsuMi90dCk7TXQ9TWF0aC5taW4oTXQsVisxMDA2NjMyOTYpO3ZhciB1ZT1NYXRoO010PU1hdGgubWF4KFYsTXQpLHVlPXVlLm1pbi5jYWxsKHVlLDIxNDc0ODM2NDgsTXQrKDY1NTM2LU10JTY1NTM2KSU2NTUzNik7dDp7TXQ9UXQuYnVmZmVyO3RyeXtRdC5ncm93KHVlLU10LmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNiksaSgpO3ZhciB3ZT0xO2JyZWFrIHR9Y2F0Y2h7fXdlPXZvaWQgMH1pZih3ZSlyZXR1cm4hMH1yZXR1cm4hMX0sZjpmdW5jdGlvbihWKXtyZXR1cm4gNTJ9LGQ6ZnVuY3Rpb24oVixLLHR0LE10LHVlKXtyZXR1cm4gNzB9LGM6ZnVuY3Rpb24oVixLLHR0LE10KXtmb3IodmFyIHVlPTAsd2U9MDt3ZTx0dDt3ZSsrKXt2YXIgRWk9YmVbSz4+Ml0semM9YmVbSys0Pj4yXTtLKz04O2Zvcih2YXIgVT0wO1U8emM7VSsrKXt2YXIgRz11bltFaStVXSxYPWxvW1ZdO0c9PT0wfHxHPT09MTA/KChWPT09MT9kZTpmZSkobyhYLDApKSxYLmxlbmd0aD0wKTpYLnB1c2goRyl9dWUrPXpjfXJldHVybiBiZVtNdD4+Ml09dWUsMH19OyhmdW5jdGlvbigpe2Z1bmN0aW9uIFYodWUsd2Upe1IuYXNtPXVlLmV4cG9ydHMsUXQ9Ui5hc20uaCxpKCkscG4udW5zaGlmdChSLmFzbS5pKSxZdC0tLFIubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmUi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFl0KSxZdD09MCYmKHplIT09bnVsbCYmKGNsZWFySW50ZXJ2YWwoemUpLHplPW51bGwpLGRuJiYodWU9ZG4sZG49bnVsbCx1ZSgpKSl9ZnVuY3Rpb24gSyh1ZSl7Vih1ZS5pbnN0YW5jZSl9ZnVuY3Rpb24gdHQodWUpe3JldHVybiB1KCkudGhlbihmdW5jdGlvbih3ZSl7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHdlLE10KX0pLnRoZW4oZnVuY3Rpb24od2Upe3JldHVybiB3ZX0pLnRoZW4odWUsZnVuY3Rpb24od2Upe2ZlKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK3dlKSxzKHdlKX0pfXZhciBNdD17YTpxbn07aWYoWXQrKyxSLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJlIubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhZdCksUi5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBSLmluc3RhbnRpYXRlV2FzbShNdCxWKX1jYXRjaCh1ZSl7ZmUoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrdWUpLGF0KHVlKX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWnR8fHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyE9ImZ1bmN0aW9uInx8c24uc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpfHxzbi5zdGFydHNXaXRoKCJmaWxlOi8vIil8fFJ0fHx0eXBlb2YgZmV0Y2ghPSJmdW5jdGlvbiI/dHQoSyk6ZmV0Y2goc24se2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKHVlKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcodWUsTXQpLnRoZW4oSyxmdW5jdGlvbih3ZSl7cmV0dXJuIGZlKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIit3ZSksZmUoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksdHQoSyl9KX0pfSgpLmNhdGNoKGF0KSx7fX0pKCk7dmFyIFFlPVIuX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oUWU9Ui5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1SLmFzbS5rKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGNuPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX0RlY29kZXJCdWZmZXJfMD1mdW5jdGlvbigpe3JldHVybihjbj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9EZWNvZGVyQnVmZmVyXzA9Ui5hc20ubCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxXZT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9Jbml0XzI9ZnVuY3Rpb24oKXtyZXR1cm4oV2U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfSW5pdF8yPVIuYXNtLm0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saG49Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihobj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9fX2Rlc3Ryb3lfX18wPVIuYXNtLm4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scG89Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHBvPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfMD1SLmFzbS5vKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEtuPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX3RyYW5zZm9ybV90eXBlXzA9ZnVuY3Rpb24oKXtyZXR1cm4oS249Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfdHJhbnNmb3JtX3R5cGVfMD1SLmFzbS5wKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFduPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oV249Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfX19kZXN0cm95X19fMD1SLmFzbS5xKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG1vPVIuX2Vtc2NyaXB0ZW5fYmluZF9HZW9tZXRyeUF0dHJpYnV0ZV9HZW9tZXRyeUF0dHJpYnV0ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKG1vPVIuX2Vtc2NyaXB0ZW5fYmluZF9HZW9tZXRyeUF0dHJpYnV0ZV9HZW9tZXRyeUF0dHJpYnV0ZV8wPVIuYXNtLnIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0samU9Ui5fZW1zY3JpcHRlbl9iaW5kX0dlb21ldHJ5QXR0cmlidXRlX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oamU9Ui5fZW1zY3JpcHRlbl9iaW5kX0dlb21ldHJ5QXR0cmlidXRlX19fZGVzdHJveV9fXzA9Ui5hc20ucykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxGZT1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfUG9pbnRBdHRyaWJ1dGVfMD1mdW5jdGlvbigpe3JldHVybihGZT1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfUG9pbnRBdHRyaWJ1dGVfMD1SLmFzbS50KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERuPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRG49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX3NpemVfMD1SLmFzbS51KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFhuPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9HZXRBdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhXzA9ZnVuY3Rpb24oKXtyZXR1cm4oWG49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX0dldEF0dHJpYnV0ZVRyYW5zZm9ybURhdGFfMD1SLmFzbS52KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEhvPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9hdHRyaWJ1dGVfdHlwZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEhvPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9hdHRyaWJ1dGVfdHlwZV8wPVIuYXNtLncpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scm49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2RhdGFfdHlwZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHJuPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9kYXRhX3R5cGVfMD1SLmFzbS54KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFJuPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9udW1fY29tcG9uZW50c18wPWZ1bmN0aW9uKCl7cmV0dXJuKFJuPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9udW1fY29tcG9uZW50c18wPVIuYXNtLnkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZnI9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX25vcm1hbGl6ZWRfMD1mdW5jdGlvbigpe3JldHVybihmcj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfbm9ybWFsaXplZF8wPVIuYXNtLnopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdG89Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2J5dGVfc3RyaWRlXzA9ZnVuY3Rpb24oKXtyZXR1cm4odG89Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2J5dGVfc3RyaWRlXzA9Ui5hc20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxxbz1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYnl0ZV9vZmZzZXRfMD1mdW5jdGlvbigpe3JldHVybihxbz1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYnl0ZV9vZmZzZXRfMD1SLmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LElyPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV91bmlxdWVfaWRfMD1mdW5jdGlvbigpe3JldHVybihJcj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfdW5pcXVlX2lkXzA9Ui5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxJcz1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihJcz1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfX19kZXN0cm95X19fMD1SLmFzbS5EKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHZzPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtXzA9ZnVuY3Rpb24oKXtyZXR1cm4odnM9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fMD1SLmFzbS5FKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LCRpPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fSW5pdEZyb21BdHRyaWJ1dGVfMT1mdW5jdGlvbigpe3JldHVybigkaT1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX0luaXRGcm9tQXR0cmlidXRlXzE9Ui5hc20uRikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx2cj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX3F1YW50aXphdGlvbl9iaXRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4odnI9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9xdWFudGl6YXRpb25fYml0c18wPVIuYXNtLkcpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWmk9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9taW5fdmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihaaT1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX21pbl92YWx1ZV8xPVIuYXNtLkgpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRnM9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9yYW5nZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEZzPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fcmFuZ2VfMD1SLmFzbS5JKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHdpPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybih3aT1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX19fZGVzdHJveV9fXzA9Ui5hc20uSikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxzbz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtXzA9ZnVuY3Rpb24oKXtyZXR1cm4oc289Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV8wPVIuYXNtLkspLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saG89Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fSW5pdEZyb21BdHRyaWJ1dGVfMT1mdW5jdGlvbigpe3JldHVybihobz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9Jbml0RnJvbUF0dHJpYnV0ZV8xPVIuYXNtLkwpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRnI9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fcXVhbnRpemF0aW9uX2JpdHNfMD1mdW5jdGlvbigpe3JldHVybihGcj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9xdWFudGl6YXRpb25fYml0c18wPVIuYXNtLk0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTmM9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihOYz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9fX2Rlc3Ryb3lfX18wPVIuYXNtLk4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSWM9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfUG9pbnRDbG91ZF8wPWZ1bmN0aW9uKCl7cmV0dXJuKEljPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX1BvaW50Q2xvdWRfMD1SLmFzbS5PKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEJuPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX251bV9hdHRyaWJ1dGVzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oQm49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfbnVtX2F0dHJpYnV0ZXNfMD1SLmFzbS5QKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFRpPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX251bV9wb2ludHNfMD1mdW5jdGlvbigpe3JldHVybihUaT1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9udW1fcG9pbnRzXzA9Ui5hc20uUSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMZT1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKExlPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX19fZGVzdHJveV9fXzA9Ui5hc20uUikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxycj1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9NZXNoXzA9ZnVuY3Rpb24oKXtyZXR1cm4ocnI9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfTWVzaF8wPVIuYXNtLlMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVHU9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX2ZhY2VzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oVHU9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX2ZhY2VzXzA9Ui5hc20uVCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxPdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fYXR0cmlidXRlc18wPWZ1bmN0aW9uKCl7cmV0dXJuKE91PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9hdHRyaWJ1dGVzXzA9Ui5hc20uVSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fcG9pbnRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRXU9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX3BvaW50c18wPVIuYXNtLlYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdmM9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybih2Yz1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9fX2Rlc3Ryb3lfX18wPVIuYXNtLlcpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRmM9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhX01ldGFkYXRhXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRmM9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhX01ldGFkYXRhXzA9Ui5hc20uWCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxxYT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihxYT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFfX19kZXN0cm95X19fMD1SLmFzbS5ZKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFJ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfY29kZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKFJ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfY29kZV8wPVIuYXNtLlopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sS2E9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19va18wPWZ1bmN0aW9uKCl7cmV0dXJuKEthPVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfb2tfMD1SLmFzbS5fKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFFpPVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfZXJyb3JfbXNnXzA9ZnVuY3Rpb24oKXtyZXR1cm4oUWk9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19lcnJvcl9tc2dfMD1SLmFzbS4kKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFN1PVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihTdT1SLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX19fZGVzdHJveV9fXzA9Ui5hc20uYWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0RyYWNvRmxvYXQzMkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oeHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0RyYWNvRmxvYXQzMkFycmF5XzA9Ui5hc20uYmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQ3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oQ3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0dldFZhbHVlXzE9Ui5hc20uY2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSmk9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihKaT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfc2l6ZV8wPVIuYXNtLmRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHRzPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKHRzPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9fX2Rlc3Ryb3lfX18wPVIuYXNtLmVhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LExjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9EcmFjb0ludDhBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKExjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9EcmFjb0ludDhBcnJheV8wPVIuYXNtLmZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFB1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFB1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9HZXRWYWx1ZV8xPVIuYXNtLmdhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE11PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X3NpemVfMD1SLmFzbS5oYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMcj1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihMcj1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfX19kZXN0cm95X19fMD1SLmFzbS5pYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxXYT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X0RyYWNvVUludDhBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKFdhPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfRHJhY29VSW50OEFycmF5XzA9Ui5hc20uamEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWGE9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFhhPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfR2V0VmFsdWVfMT1SLmFzbS5rYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxEYz1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihEYz1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X3NpemVfMD1SLmFzbS5sYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxOdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9fX2Rlc3Ryb3lfX18wPVIuYXNtLm1hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEJjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfRHJhY29JbnQxNkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oQmM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9EcmFjb0ludDE2QXJyYXlfMD1SLmFzbS5uYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxJdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oSXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9HZXRWYWx1ZV8xPVIuYXNtLm9hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHZ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHZ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfc2l6ZV8wPVIuYXNtLnBhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEZ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihGdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X19fZGVzdHJveV9fXzA9Ui5hc20ucWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfRHJhY29VSW50MTZBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEx1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X0RyYWNvVUludDE2QXJyYXlfMD1SLmFzbS5yYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxEdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKER1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X0dldFZhbHVlXzE9Ui5hc20uc2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEJ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X3NpemVfMD1SLmFzbS50YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxZYT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKFlhPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X19fZGVzdHJveV9fXzA9Ui5hc20udWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9EcmFjb0ludDMyQXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihVdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X0RyYWNvSW50MzJBcnJheV8wPVIuYXNtLnZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGt1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihrdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X0dldFZhbHVlXzE9Ui5hc20ud2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sR3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oR3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9zaXplXzA9Ui5hc20ueGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKFZ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfX19kZXN0cm95X19fMD1SLmFzbS55YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlcz1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9EcmFjb1VJbnQzMkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oZXM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfRHJhY29VSW50MzJBcnJheV8wPVIuYXNtLnphKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHp1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oenU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfR2V0VmFsdWVfMT1SLmFzbS5BYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxqdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oanU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfc2l6ZV8wPVIuYXNtLkJhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LExzPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTHM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfX19kZXN0cm95X19fMD1SLmFzbS5DYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxIdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX01ldGFkYXRhUXVlcmllcl8wPWZ1bmN0aW9uKCl7cmV0dXJuKEh1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfTWV0YWRhdGFRdWVyaWVyXzA9Ui5hc20uRGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scXU9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9IYXNFbnRyeV8yPWZ1bmN0aW9uKCl7cmV0dXJuKHF1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfSGFzRW50cnlfMj1SLmFzbS5FYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx1cj1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEludEVudHJ5XzI9ZnVuY3Rpb24oKXtyZXR1cm4odXI9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRJbnRFbnRyeV8yPVIuYXNtLkZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LCRhPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0SW50RW50cnlBcnJheV8zPWZ1bmN0aW9uKCl7cmV0dXJuKCRhPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0SW50RW50cnlBcnJheV8zPVIuYXNtLkdhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEt1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0RG91YmxlRW50cnlfMj1mdW5jdGlvbigpe3JldHVybihLdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldERvdWJsZUVudHJ5XzI9Ui5hc20uSGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV3U9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRTdHJpbmdFbnRyeV8yPWZ1bmN0aW9uKCl7cmV0dXJuKFd1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0U3RyaW5nRW50cnlfMj1SLmFzbS5JYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxYdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX051bUVudHJpZXNfMT1mdW5jdGlvbigpe3JldHVybihYdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX051bUVudHJpZXNfMT1SLmFzbS5KYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLbz1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEVudHJ5TmFtZV8yPWZ1bmN0aW9uKCl7cmV0dXJuKEtvPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0RW50cnlOYW1lXzI9Ui5hc20uS2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWmE9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKFphPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfX19kZXN0cm95X19fMD1SLmFzbS5MYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxRYT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVyXzA9ZnVuY3Rpb24oKXtyZXR1cm4oUWE9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2Rlcl8wPVIuYXNtLk1hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERzPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUFycmF5VG9Qb2ludENsb3VkXzM9ZnVuY3Rpb24oKXtyZXR1cm4oRHM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQXJyYXlUb1BvaW50Q2xvdWRfMz1SLmFzbS5OYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxZdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVBcnJheVRvTWVzaF8zPWZ1bmN0aW9uKCl7cmV0dXJuKFl1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUFycmF5VG9NZXNoXzM9Ui5hc20uT2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVWM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRfMj1mdW5jdGlvbigpe3JldHVybihVYz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZF8yPVIuYXNtLlBhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LCR1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkQnlOYW1lXzI9ZnVuY3Rpb24oKXtyZXR1cm4oJHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRCeU5hbWVfMj1SLmFzbS5RYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxKYT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZEJ5TWV0YWRhdGFFbnRyeV8zPWZ1bmN0aW9uKCl7cmV0dXJuKEphPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkQnlNZXRhZGF0YUVudHJ5XzM9Ui5hc20uUmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdGY9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlXzI9ZnVuY3Rpb24oKXtyZXR1cm4odGY9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlXzI9Ui5hc20uU2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlQnlVbmlxdWVJZF8yPWZ1bmN0aW9uKCl7cmV0dXJuKFp1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUJ5VW5pcXVlSWRfMj1SLmFzbS5UYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxRdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRNZXRhZGF0YV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFF1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldE1ldGFkYXRhXzE9Ui5hc20uVWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sa2M9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlTWV0YWRhdGFfMj1mdW5jdGlvbigpe3JldHVybihrYz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVNZXRhZGF0YV8yPVIuYXNtLlZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHdvPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEZhY2VGcm9tTWVzaF8zPWZ1bmN0aW9uKCl7cmV0dXJuKHdvPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEZhY2VGcm9tTWVzaF8zPVIuYXNtLldhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEdjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlU3RyaXBzRnJvbU1lc2hfMj1mdW5jdGlvbigpe3JldHVybihHYz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZVN0cmlwc0Zyb21NZXNoXzI9Ui5hc20uWGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVzVUludDE2QXJyYXlfMz1mdW5jdGlvbigpe3JldHVybihKdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZXNVSW50MTZBcnJheV8zPVIuYXNtLllhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHRsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlc1VJbnQzMkFycmF5XzM9ZnVuY3Rpb24oKXtyZXR1cm4odGw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVzVUludDMyQXJyYXlfMz1SLmFzbS5aYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVGbG9hdF8zPWZ1bmN0aW9uKCl7cmV0dXJuKGVsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUZsb2F0XzM9Ui5hc20uX2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sbHI9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihscj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50c18zPVIuYXNtLiRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG5sPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludEZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKG5sPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludEZvckFsbFBvaW50c18zPVIuYXNtLmFiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG9sPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihvbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzXzM9Ui5hc20uYmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scmw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihybD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50c18zPVIuYXNtLmNiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEJzPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDE2Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oQnM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHNfMz1SLmFzbS5kYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxpbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihpbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHNfMz1SLmFzbS5lYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxPaT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKE9pPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDMyRm9yQWxsUG9pbnRzXzM9Ui5hc20uZmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sc2w9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oc2w9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzXzM9Ui5hc20uZ2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sY2w9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRGF0YUFycmF5Rm9yQWxsUG9pbnRzXzU9ZnVuY3Rpb24oKXtyZXR1cm4oY2w9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRGF0YUFycmF5Rm9yQWxsUG9pbnRzXzU9Ui5hc20uaGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYWw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybV8xPWZ1bmN0aW9uKCl7cmV0dXJuKGFsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX1NraXBBdHRyaWJ1dGVUcmFuc2Zvcm1fMT1SLmFzbS5pYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxmbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRFbmNvZGVkR2VvbWV0cnlUeXBlX0RlcHJlY2F0ZWRfMT1mdW5jdGlvbigpe3JldHVybihmbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRFbmNvZGVkR2VvbWV0cnlUeXBlX0RlcHJlY2F0ZWRfMT1SLmFzbS5qYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx1bD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWRfMj1mdW5jdGlvbigpe3JldHVybih1bD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWRfMj1SLmFzbS5rYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxsbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb01lc2hfMj1mdW5jdGlvbigpe3JldHVybihsbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb01lc2hfMj1SLmFzbS5sYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxwbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKHBsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX19fZGVzdHJveV9fXzA9Ui5hc20ubWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX0lOVkFMSURfVFJBTlNGT1JNPWZ1bmN0aW9uKCl7cmV0dXJuKGRsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9JTlZBTElEX1RSQU5TRk9STT1SLmFzbS5uYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxtbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfTk9fVFJBTlNGT1JNPWZ1bmN0aW9uKCl7cmV0dXJuKG1sPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9OT19UUkFOU0ZPUk09Ui5hc20ub2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX1FVQU5USVpBVElPTl9UUkFOU0ZPUk09ZnVuY3Rpb24oKXtyZXR1cm4oaGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX1FVQU5USVpBVElPTl9UUkFOU0ZPUk09Ui5hc20ucGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sX2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX09DVEFIRURST05fVFJBTlNGT1JNPWZ1bmN0aW9uKCl7cmV0dXJuKF9sPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9PQ1RBSEVEUk9OX1RSQU5TRk9STT1SLmFzbS5xYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxucz1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9JTlZBTElEPWZ1bmN0aW9uKCl7cmV0dXJuKG5zPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0lOVkFMSUQ9Ui5hc20ucmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfUE9TSVRJT049ZnVuY3Rpb24oKXtyZXR1cm4oeWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfUE9TSVRJT049Ui5hc20uc2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZ2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfTk9STUFMPWZ1bmN0aW9uKCl7cmV0dXJuKGdsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX05PUk1BTD1SLmFzbS50YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxVcz1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9DT0xPUj1mdW5jdGlvbigpe3JldHVybihVcz1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9DT0xPUj1SLmFzbS51YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxWYz1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9URVhfQ09PUkQ9ZnVuY3Rpb24oKXtyZXR1cm4oVmM9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfVEVYX0NPT1JEPVIuYXNtLnZiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEFsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0dFTkVSSUM9ZnVuY3Rpb24oKXtyZXR1cm4oQWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfR0VORVJJQz1SLmFzbS53YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlZj1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9JTlZBTElEX0dFT01FVFJZX1RZUEU9ZnVuY3Rpb24oKXtyZXR1cm4oZWY9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfSU5WQUxJRF9HRU9NRVRSWV9UWVBFPVIuYXNtLnhiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGJsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX1BPSU5UX0NMT1VEPWZ1bmN0aW9uKCl7cmV0dXJuKGJsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX1BPSU5UX0NMT1VEPVIuYXNtLnliKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHdsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX1RSSUFOR1VMQVJfTUVTSD1mdW5jdGlvbigpe3JldHVybih3bD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9UUklBTkdVTEFSX01FU0g9Ui5hc20uemIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVkFMSUQ9ZnVuY3Rpb24oKXtyZXR1cm4oVGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVkFMSUQ9Ui5hc20uQWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sT2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDg9ZnVuY3Rpb24oKXtyZXR1cm4oT2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDg9Ui5hc20uQmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQ4PWZ1bmN0aW9uKCl7cmV0dXJuKEVsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UOD1SLmFzbS5DYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxSbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UMTY9ZnVuY3Rpb24oKXtyZXR1cm4oUmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDE2PVIuYXNtLkRiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFNsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UMTY9ZnVuY3Rpb24oKXtyZXR1cm4oU2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQxNj1SLmFzbS5FYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx4bD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UMzI9ZnVuY3Rpb24oKXtyZXR1cm4oeGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDMyPVIuYXNtLkZiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG5mPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UMzI9ZnVuY3Rpb24oKXtyZXR1cm4obmY9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQzMj1SLmFzbS5HYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxDbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UNjQ9ZnVuY3Rpb24oKXtyZXR1cm4oQ2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDY0PVIuYXNtLkhiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFBsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UNjQ9ZnVuY3Rpb24oKXtyZXR1cm4oUGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQ2ND1SLmFzbS5JYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxNbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQzMj1mdW5jdGlvbigpe3JldHVybihNbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQzMj1SLmFzbS5KYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxObD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQ2ND1mdW5jdGlvbigpe3JldHVybihObD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQ2ND1SLmFzbS5LYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxJbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfQk9PTD1mdW5jdGlvbigpe3JldHVybihJbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfQk9PTD1SLmFzbS5MYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx2bD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVFlQRVNfQ09VTlQ9ZnVuY3Rpb24oKXtyZXR1cm4odmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1RZUEVTX0NPVU5UPVIuYXNtLk1iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEZsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX09LPWZ1bmN0aW9uKCl7cmV0dXJuKEZsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX09LPVIuYXNtLk5iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGtzPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0RSQUNPX0VSUk9SPWZ1bmN0aW9uKCl7cmV0dXJuKGtzPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0RSQUNPX0VSUk9SPVIuYXNtLk9iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LExsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lPX0VSUk9SPWZ1bmN0aW9uKCl7cmV0dXJuKExsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lPX0VSUk9SPVIuYXNtLlBiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lOVkFMSURfUEFSQU1FVEVSPWZ1bmN0aW9uKCl7cmV0dXJuKERsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lOVkFMSURfUEFSQU1FVEVSPVIuYXNtLlFiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEJsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX1VOU1VQUE9SVEVEX1ZFUlNJT049ZnVuY3Rpb24oKXtyZXR1cm4oQmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfVU5TVVBQT1JURURfVkVSU0lPTj1SLmFzbS5SYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxVbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9VTktOT1dOX1ZFUlNJT049ZnVuY3Rpb24oKXtyZXR1cm4oVWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfVU5LTk9XTl9WRVJTSU9OPVIuYXNtLlNiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O1IuX21hbGxvYz1mdW5jdGlvbigpe3JldHVybihSLl9tYWxsb2M9Ui5hc20uVGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUi5fZnJlZT1mdW5jdGlvbigpe3JldHVybihSLl9mcmVlPVIuYXNtLlViKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBrbD1mdW5jdGlvbigpe3JldHVybihrbD1SLmFzbS5WYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtSLl9fX3N0YXJ0X2VtX2pzPTE1ODU2LFIuX19fc3RvcF9lbV9qcz0xNTk1NDt2YXIgb2Y7aWYoZG49ZnVuY3Rpb24gVigpe29mfHxwKCksb2Z8fChkbj1WKX0sUi5wcmVJbml0KWZvcih0eXBlb2YgUi5wcmVJbml0PT0iZnVuY3Rpb24iJiYoUi5wcmVJbml0PVtSLnByZUluaXRdKTswPFIucHJlSW5pdC5sZW5ndGg7KVIucHJlSW5pdC5wb3AoKSgpO3AoKSxkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1kLGQucHJvdG90eXBlLl9fY2xhc3NfXz1kLGQuX19jYWNoZV9fPXt9LFIuV3JhcHBlck9iamVjdD1kLFIuZ2V0Q2FjaGU9aCxSLndyYXBQb2ludGVyPV8sUi5jYXN0T2JqZWN0PWZ1bmN0aW9uKFYsSyl7cmV0dXJuIF8oVi5wdHIsSyl9LFIuTlVMTD1fKDApLFIuZGVzdHJveT1mdW5jdGlvbihWKXtpZighVi5fX2Rlc3Ryb3lfXyl0aHJvdyJFcnJvcjogQ2Fubm90IGRlc3Ryb3kgb2JqZWN0LiAoRGlkIHlvdSBjcmVhdGUgaXQgeW91cnNlbGY/KSI7Vi5fX2Rlc3Ryb3lfXygpLGRlbGV0ZSBoKFYuX19jbGFzc19fKVtWLnB0cl19LFIuY29tcGFyZT1mdW5jdGlvbihWLEspe3JldHVybiBWLnB0cj09PUsucHRyfSxSLmdldFBvaW50ZXI9ZnVuY3Rpb24oVil7cmV0dXJuIFYucHRyfSxSLmdldENsYXNzPWZ1bmN0aW9uKFYpe3JldHVybiBWLl9fY2xhc3NfX307dmFyIHhlPXtidWZmZXI6MCxzaXplOjAscG9zOjAsdGVtcHM6W10sbmVlZGVkOjAscHJlcGFyZTpmdW5jdGlvbigpe2lmKHhlLm5lZWRlZCl7Zm9yKHZhciBWPTA7Vjx4ZS50ZW1wcy5sZW5ndGg7VisrKVIuX2ZyZWUoeGUudGVtcHNbVl0pO3hlLnRlbXBzLmxlbmd0aD0wLFIuX2ZyZWUoeGUuYnVmZmVyKSx4ZS5idWZmZXI9MCx4ZS5zaXplKz14ZS5uZWVkZWQseGUubmVlZGVkPTB9eGUuYnVmZmVyfHwoeGUuc2l6ZSs9MTI4LHhlLmJ1ZmZlcj1SLl9tYWxsb2MoeGUuc2l6ZSkseGUuYnVmZmVyfHxzKHZvaWQgMCkpLHhlLnBvcz0wfSxhbGxvYzpmdW5jdGlvbihWLEspe3JldHVybiB4ZS5idWZmZXJ8fHModm9pZCAwKSxWPVYubGVuZ3RoKksuQllURVNfUEVSX0VMRU1FTlQsVj1WKzcmLTgseGUucG9zK1Y+PXhlLnNpemU/KDA8Vnx8cyh2b2lkIDApLHhlLm5lZWRlZCs9VixLPVIuX21hbGxvYyhWKSx4ZS50ZW1wcy5wdXNoKEspKTooSz14ZS5idWZmZXIreGUucG9zLHhlLnBvcys9ViksS30sY29weTpmdW5jdGlvbihWLEssdHQpe3N3aXRjaCh0dD4+Pj0wLEsuQllURVNfUEVSX0VMRU1FTlQpe2Nhc2UgMjp0dD4+Pj0xO2JyZWFrO2Nhc2UgNDp0dD4+Pj0yO2JyZWFrO2Nhc2UgODp0dD4+Pj0zfWZvcih2YXIgTXQ9MDtNdDxWLmxlbmd0aDtNdCsrKUtbdHQrTXRdPVZbTXRdfX07cmV0dXJuIHcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLHcucHJvdG90eXBlLmNvbnN0cnVjdG9yPXcsdy5wcm90b3R5cGUuX19jbGFzc19fPXcsdy5fX2NhY2hlX189e30sUi5Wb2lkUHRyPXcsdy5wcm90b3R5cGUuX19kZXN0cm95X189dy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtRZSh0aGlzLnB0cil9LE8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLE8ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU8sTy5wcm90b3R5cGUuX19jbGFzc19fPU8sTy5fX2NhY2hlX189e30sUi5EZWNvZGVyQnVmZmVyPU8sTy5wcm90b3R5cGUuSW5pdD1PLnByb3RvdHlwZS5Jbml0PWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3hlLnByZXBhcmUoKSx0eXBlb2YgVj09Im9iamVjdCImJihWPWIoVikpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLFdlKHR0LFYsSyl9LE8ucHJvdG90eXBlLl9fZGVzdHJveV9fPU8ucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7aG4odGhpcy5wdHIpfSxFLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxFLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FLEUucHJvdG90eXBlLl9fY2xhc3NfXz1FLEUuX19jYWNoZV9fPXt9LFIuQXR0cmlidXRlVHJhbnNmb3JtRGF0YT1FLEUucHJvdG90eXBlLnRyYW5zZm9ybV90eXBlPUUucHJvdG90eXBlLnRyYW5zZm9ybV90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIEtuKHRoaXMucHRyKX0sRS5wcm90b3R5cGUuX19kZXN0cm95X189RS5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtXbih0aGlzLnB0cil9LFQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLFQucHJvdG90eXBlLmNvbnN0cnVjdG9yPVQsVC5wcm90b3R5cGUuX19jbGFzc19fPVQsVC5fX2NhY2hlX189e30sUi5HZW9tZXRyeUF0dHJpYnV0ZT1ULFQucHJvdG90eXBlLl9fZGVzdHJveV9fPVQucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7amUodGhpcy5wdHIpfSx4LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSx4LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj14LHgucHJvdG90eXBlLl9fY2xhc3NfXz14LHguX19jYWNoZV9fPXt9LFIuUG9pbnRBdHRyaWJ1dGU9eCx4LnByb3RvdHlwZS5zaXplPXgucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gRG4odGhpcy5wdHIpfSx4LnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhPXgucHJvdG90eXBlLkdldEF0dHJpYnV0ZVRyYW5zZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gXyhYbih0aGlzLnB0ciksRSl9LHgucHJvdG90eXBlLmF0dHJpYnV0ZV90eXBlPXgucHJvdG90eXBlLmF0dHJpYnV0ZV90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIEhvKHRoaXMucHRyKX0seC5wcm90b3R5cGUuZGF0YV90eXBlPXgucHJvdG90eXBlLmRhdGFfdHlwZT1mdW5jdGlvbigpe3JldHVybiBybih0aGlzLnB0cil9LHgucHJvdG90eXBlLm51bV9jb21wb25lbnRzPXgucHJvdG90eXBlLm51bV9jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIFJuKHRoaXMucHRyKX0seC5wcm90b3R5cGUubm9ybWFsaXplZD14LnByb3RvdHlwZS5ub3JtYWxpemVkPWZ1bmN0aW9uKCl7cmV0dXJuISFmcih0aGlzLnB0cil9LHgucHJvdG90eXBlLmJ5dGVfc3RyaWRlPXgucHJvdG90eXBlLmJ5dGVfc3RyaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRvKHRoaXMucHRyKX0seC5wcm90b3R5cGUuYnl0ZV9vZmZzZXQ9eC5wcm90b3R5cGUuYnl0ZV9vZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gcW8odGhpcy5wdHIpfSx4LnByb3RvdHlwZS51bmlxdWVfaWQ9eC5wcm90b3R5cGUudW5pcXVlX2lkPWZ1bmN0aW9uKCl7cmV0dXJuIElyKHRoaXMucHRyKX0seC5wcm90b3R5cGUuX19kZXN0cm95X189eC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtJcyh0aGlzLnB0cil9LE0ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLE0ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU0sTS5wcm90b3R5cGUuX19jbGFzc19fPU0sTS5fX2NhY2hlX189e30sUi5BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm09TSxNLnByb3RvdHlwZS5Jbml0RnJvbUF0dHJpYnV0ZT1NLnByb3RvdHlwZS5Jbml0RnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksISEkaShLLFYpfSxNLnByb3RvdHlwZS5xdWFudGl6YXRpb25fYml0cz1NLnByb3RvdHlwZS5xdWFudGl6YXRpb25fYml0cz1mdW5jdGlvbigpe3JldHVybiB2cih0aGlzLnB0cil9LE0ucHJvdG90eXBlLm1pbl92YWx1ZT1NLnByb3RvdHlwZS5taW5fdmFsdWU9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLFppKEssVil9LE0ucHJvdG90eXBlLnJhbmdlPU0ucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIEZzKHRoaXMucHRyKX0sTS5wcm90b3R5cGUuX19kZXN0cm95X189TS5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXt3aSh0aGlzLnB0cil9LE4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLE4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU4sTi5wcm90b3R5cGUuX19jbGFzc19fPU4sTi5fX2NhY2hlX189e30sUi5BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtPU4sTi5wcm90b3R5cGUuSW5pdEZyb21BdHRyaWJ1dGU9Ti5wcm90b3R5cGUuSW5pdEZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLCEhaG8oSyxWKX0sTi5wcm90b3R5cGUucXVhbnRpemF0aW9uX2JpdHM9Ti5wcm90b3R5cGUucXVhbnRpemF0aW9uX2JpdHM9ZnVuY3Rpb24oKXtyZXR1cm4gRnIodGhpcy5wdHIpfSxOLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1OLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe05jKHRoaXMucHRyKX0sRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksRi5wcm90b3R5cGUuY29uc3RydWN0b3I9RixGLnByb3RvdHlwZS5fX2NsYXNzX189RixGLl9fY2FjaGVfXz17fSxSLlBvaW50Q2xvdWQ9RixGLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1GLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBCbih0aGlzLnB0cil9LEYucHJvdG90eXBlLm51bV9wb2ludHM9Ri5wcm90b3R5cGUubnVtX3BvaW50cz1mdW5jdGlvbigpe3JldHVybiBUaSh0aGlzLnB0cil9LEYucHJvdG90eXBlLl9fZGVzdHJveV9fPUYucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7TGUodGhpcy5wdHIpfSxJLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxJLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1JLEkucHJvdG90eXBlLl9fY2xhc3NfXz1JLEkuX19jYWNoZV9fPXt9LFIuTWVzaD1JLEkucHJvdG90eXBlLm51bV9mYWNlcz1JLnByb3RvdHlwZS5udW1fZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm4gVHUodGhpcy5wdHIpfSxJLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1JLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBPdSh0aGlzLnB0cil9LEkucHJvdG90eXBlLm51bV9wb2ludHM9SS5wcm90b3R5cGUubnVtX3BvaW50cz1mdW5jdGlvbigpe3JldHVybiBFdSh0aGlzLnB0cil9LEkucHJvdG90eXBlLl9fZGVzdHJveV9fPUkucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7dmModGhpcy5wdHIpfSx2LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSx2LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj12LHYucHJvdG90eXBlLl9fY2xhc3NfXz12LHYuX19jYWNoZV9fPXt9LFIuTWV0YWRhdGE9dix2LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz12LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3FhKHRoaXMucHRyKX0sQi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksQi5wcm90b3R5cGUuY29uc3RydWN0b3I9QixCLnByb3RvdHlwZS5fX2NsYXNzX189QixCLl9fY2FjaGVfXz17fSxSLlN0YXR1cz1CLEIucHJvdG90eXBlLmNvZGU9Qi5wcm90b3R5cGUuY29kZT1mdW5jdGlvbigpe3JldHVybiBSdSh0aGlzLnB0cil9LEIucHJvdG90eXBlLm9rPUIucHJvdG90eXBlLm9rPWZ1bmN0aW9uKCl7cmV0dXJuISFLYSh0aGlzLnB0cil9LEIucHJvdG90eXBlLmVycm9yX21zZz1CLnByb3RvdHlwZS5lcnJvcl9tc2c9ZnVuY3Rpb24oKXtyZXR1cm4gcihRaSh0aGlzLnB0cikpfSxCLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1CLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1N1KHRoaXMucHRyKX0sQS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxBLnByb3RvdHlwZS5fX2NsYXNzX189QSxBLl9fY2FjaGVfXz17fSxSLkRyYWNvRmxvYXQzMkFycmF5PUEsQS5wcm90b3R5cGUuR2V0VmFsdWU9QS5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEN1KEssVil9LEEucHJvdG90eXBlLnNpemU9QS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBKaSh0aGlzLnB0cil9LEEucHJvdG90eXBlLl9fZGVzdHJveV9fPUEucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7dHModGhpcy5wdHIpfSxTLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxTLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TLFMucHJvdG90eXBlLl9fY2xhc3NfXz1TLFMuX19jYWNoZV9fPXt9LFIuRHJhY29JbnQ4QXJyYXk9UyxTLnByb3RvdHlwZS5HZXRWYWx1ZT1TLnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksUHUoSyxWKX0sUy5wcm90b3R5cGUuc2l6ZT1TLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE11KHRoaXMucHRyKX0sUy5wcm90b3R5cGUuX19kZXN0cm95X189Uy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtMcih0aGlzLnB0cil9LEMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLEMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUMsQy5wcm90b3R5cGUuX19jbGFzc19fPUMsQy5fX2NhY2hlX189e30sUi5EcmFjb1VJbnQ4QXJyYXk9QyxDLnByb3RvdHlwZS5HZXRWYWx1ZT1DLnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksWGEoSyxWKX0sQy5wcm90b3R5cGUuc2l6ZT1DLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIERjKHRoaXMucHRyKX0sQy5wcm90b3R5cGUuX19kZXN0cm95X189Qy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtOdSh0aGlzLnB0cil9LEwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLEwucHJvdG90eXBlLmNvbnN0cnVjdG9yPUwsTC5wcm90b3R5cGUuX19jbGFzc19fPUwsTC5fX2NhY2hlX189e30sUi5EcmFjb0ludDE2QXJyYXk9TCxMLnByb3RvdHlwZS5HZXRWYWx1ZT1MLnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSXUoSyxWKX0sTC5wcm90b3R5cGUuc2l6ZT1MLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHZ1KHRoaXMucHRyKX0sTC5wcm90b3R5cGUuX19kZXN0cm95X189TC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtGdSh0aGlzLnB0cil9LHoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLHoucHJvdG90eXBlLmNvbnN0cnVjdG9yPXosei5wcm90b3R5cGUuX19jbGFzc19fPXosei5fX2NhY2hlX189e30sUi5EcmFjb1VJbnQxNkFycmF5PXosei5wcm90b3R5cGUuR2V0VmFsdWU9ei5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLER1KEssVil9LHoucHJvdG90eXBlLnNpemU9ei5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBCdSh0aGlzLnB0cil9LHoucHJvdG90eXBlLl9fZGVzdHJveV9fPXoucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7WWEodGhpcy5wdHIpfSxqLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxqLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1qLGoucHJvdG90eXBlLl9fY2xhc3NfXz1qLGouX19jYWNoZV9fPXt9LFIuRHJhY29JbnQzMkFycmF5PWosai5wcm90b3R5cGUuR2V0VmFsdWU9ai5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLGt1KEssVil9LGoucHJvdG90eXBlLnNpemU9ai5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBHdSh0aGlzLnB0cil9LGoucHJvdG90eXBlLl9fZGVzdHJveV9fPWoucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7VnUodGhpcy5wdHIpfSxrLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxrLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1rLGsucHJvdG90eXBlLl9fY2xhc3NfXz1rLGsuX19jYWNoZV9fPXt9LFIuRHJhY29VSW50MzJBcnJheT1rLGsucHJvdG90eXBlLkdldFZhbHVlPWsucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKFYpe3ZhciBLPXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSx6dShLLFYpfSxrLnByb3RvdHlwZS5zaXplPWsucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4ganUodGhpcy5wdHIpfSxrLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1rLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0xzKHRoaXMucHRyKX0scS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSkscS5wcm90b3R5cGUuY29uc3RydWN0b3I9cSxxLnByb3RvdHlwZS5fX2NsYXNzX189cSxxLl9fY2FjaGVfXz17fSxSLk1ldGFkYXRhUXVlcmllcj1xLHEucHJvdG90eXBlLkhhc0VudHJ5PXEucHJvdG90eXBlLkhhc0VudHJ5PWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiB4ZS5wcmVwYXJlKCksViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6ZyhLKSwhIXF1KHR0LFYsSyl9LHEucHJvdG90eXBlLkdldEludEVudHJ5PXEucHJvdG90eXBlLkdldEludEVudHJ5PWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiB4ZS5wcmVwYXJlKCksViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6ZyhLKSx1cih0dCxWLEspfSxxLnByb3RvdHlwZS5HZXRJbnRFbnRyeUFycmF5PXEucHJvdG90eXBlLkdldEludEVudHJ5QXJyYXk9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7eGUucHJlcGFyZSgpLFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOmcoSyksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLCRhKE10LFYsSyx0dCl9LHEucHJvdG90eXBlLkdldERvdWJsZUVudHJ5PXEucHJvdG90eXBlLkdldERvdWJsZUVudHJ5PWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiB4ZS5wcmVwYXJlKCksViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6ZyhLKSxLdSh0dCxWLEspfSxxLnByb3RvdHlwZS5HZXRTdHJpbmdFbnRyeT1xLnByb3RvdHlwZS5HZXRTdHJpbmdFbnRyeT1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4geGUucHJlcGFyZSgpLFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOmcoSykscihXdSh0dCxWLEspKX0scS5wcm90b3R5cGUuTnVtRW50cmllcz1xLnByb3RvdHlwZS5OdW1FbnRyaWVzPWZ1bmN0aW9uKFYpe3ZhciBLPXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxYdShLLFYpfSxxLnByb3RvdHlwZS5HZXRFbnRyeU5hbWU9cS5wcm90b3R5cGUuR2V0RW50cnlOYW1lPWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxyKEtvKHR0LFYsSykpfSxxLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1xLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1phKHRoaXMucHRyKX0sVy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksVy5wcm90b3R5cGUuY29uc3RydWN0b3I9VyxXLnByb3RvdHlwZS5fX2NsYXNzX189VyxXLl9fY2FjaGVfXz17fSxSLkRlY29kZXI9VyxXLnByb3RvdHlwZS5EZWNvZGVBcnJheVRvUG9pbnRDbG91ZD1XLnByb3RvdHlwZS5EZWNvZGVBcnJheVRvUG9pbnRDbG91ZD1mdW5jdGlvbihWLEssdHQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4geGUucHJlcGFyZSgpLHR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9YihWKSksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLF8oRHMoTXQsVixLLHR0KSxCKX0sVy5wcm90b3R5cGUuRGVjb2RlQXJyYXlUb01lc2g9Vy5wcm90b3R5cGUuRGVjb2RlQXJyYXlUb01lc2g9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIHhlLnByZXBhcmUoKSx0eXBlb2YgVj09Im9iamVjdCImJihWPWIoVikpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSxfKFl1KE10LFYsSyx0dCksQil9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkPWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxVYyh0dCxWLEspfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZEJ5TmFtZT1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZEJ5TmFtZT1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4geGUucHJlcGFyZSgpLFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOmcoSyksJHUodHQsVixLKX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWRCeU1ldGFkYXRhRW50cnk9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWRCeU1ldGFkYXRhRW50cnk9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIHhlLnByZXBhcmUoKSxWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLPUsmJnR5cGVvZiBLPT0ib2JqZWN0Ij9LLnB0cjpnKEspLHR0PXR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiP3R0LnB0cjpnKHR0KSxKYShNdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGU9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlPWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxfKHRmKHR0LFYsSykseCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUJ5VW5pcXVlSWQ9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlQnlVbmlxdWVJZD1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksXyhadSh0dCxWLEspLHgpfSxXLnByb3RvdHlwZS5HZXRNZXRhZGF0YT1XLnByb3RvdHlwZS5HZXRNZXRhZGF0YT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksXyhRdShLLFYpLHYpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVNZXRhZGF0YT1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVNZXRhZGF0YT1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksXyhrYyh0dCxWLEspLHYpfSxXLnByb3RvdHlwZS5HZXRGYWNlRnJvbU1lc2g9Vy5wcm90b3R5cGUuR2V0RmFjZUZyb21NZXNoPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIE10PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISF3byhNdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRUcmlhbmdsZVN0cmlwc0Zyb21NZXNoPVcucHJvdG90eXBlLkdldFRyaWFuZ2xlU3RyaXBzRnJvbU1lc2g9ZnVuY3Rpb24oVixLKXt2YXIgdHQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLEdjKHR0LFYsSyl9LFcucHJvdG90eXBlLkdldFRyaWFuZ2xlc1VJbnQxNkFycmF5PVcucHJvdG90eXBlLkdldFRyaWFuZ2xlc1VJbnQxNkFycmF5PWZ1bmN0aW9uKFYsSyx0dCl7dmFyIE10PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISFKdShNdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRUcmlhbmdsZXNVSW50MzJBcnJheT1XLnByb3RvdHlwZS5HZXRUcmlhbmdsZXNVSW50MzJBcnJheT1mdW5jdGlvbihWLEssdHQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLCEhdGwoTXQsVixLLHR0KX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlRmxvYXQ9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlRmxvYXQ9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIWVsKE10LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIE10PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISFscihNdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnRGb3JBbGxQb2ludHM9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIE10PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISFubChNdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHM9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIW9sKE10LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIE10PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISFybChNdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cz1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cz1mdW5jdGlvbihWLEssdHQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLCEhQnMoTXQsVixLLHR0KX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cz1mdW5jdGlvbihWLEssdHQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLCEhaWwoTXQsVixLLHR0KX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHM9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHM9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIU9pKE10LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cz1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHM9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIXNsKE10LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZURhdGFBcnJheUZvckFsbFBvaW50cz1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVEYXRhQXJyYXlGb3JBbGxQb2ludHM9ZnVuY3Rpb24oVixLLHR0LE10LHVlKXt2YXIgd2U9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSxNdCYmdHlwZW9mIE10PT0ib2JqZWN0IiYmKE10PU10LnB0ciksdWUmJnR5cGVvZiB1ZT09Im9iamVjdCImJih1ZT11ZS5wdHIpLCEhY2wod2UsVixLLHR0LE10LHVlKX0sVy5wcm90b3R5cGUuU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybT1XLnByb3RvdHlwZS5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtPWZ1bmN0aW9uKFYpe3ZhciBLPXRoaXMucHRyO1YmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLGFsKEssVil9LFcucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZD1XLnByb3RvdHlwZS5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlX0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLGZsKEssVil9LFcucHJvdG90eXBlLkRlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZD1XLnByb3RvdHlwZS5EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWQ9ZnVuY3Rpb24oVixLKXt2YXIgdHQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLF8odWwodHQsVixLKSxCKX0sVy5wcm90b3R5cGUuRGVjb2RlQnVmZmVyVG9NZXNoPVcucHJvdG90eXBlLkRlY29kZUJ1ZmZlclRvTWVzaD1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksXyhsbCh0dCxWLEspLEIpfSxXLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1XLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3BsKHRoaXMucHRyKX0sZnVuY3Rpb24oKXtmdW5jdGlvbiBWKCl7Ui5BVFRSSUJVVEVfSU5WQUxJRF9UUkFOU0ZPUk09ZGwoKSxSLkFUVFJJQlVURV9OT19UUkFOU0ZPUk09bWwoKSxSLkFUVFJJQlVURV9RVUFOVElaQVRJT05fVFJBTlNGT1JNPWhsKCksUi5BVFRSSUJVVEVfT0NUQUhFRFJPTl9UUkFOU0ZPUk09X2woKSxSLklOVkFMSUQ9bnMoKSxSLlBPU0lUSU9OPXlsKCksUi5OT1JNQUw9Z2woKSxSLkNPTE9SPVVzKCksUi5URVhfQ09PUkQ9VmMoKSxSLkdFTkVSSUM9QWwoKSxSLklOVkFMSURfR0VPTUVUUllfVFlQRT1lZigpLFIuUE9JTlRfQ0xPVUQ9YmwoKSxSLlRSSUFOR1VMQVJfTUVTSD13bCgpLFIuRFRfSU5WQUxJRD1UbCgpLFIuRFRfSU5UOD1PbCgpLFIuRFRfVUlOVDg9RWwoKSxSLkRUX0lOVDE2PVJsKCksUi5EVF9VSU5UMTY9U2woKSxSLkRUX0lOVDMyPXhsKCksUi5EVF9VSU5UMzI9bmYoKSxSLkRUX0lOVDY0PUNsKCksUi5EVF9VSU5UNjQ9UGwoKSxSLkRUX0ZMT0FUMzI9TWwoKSxSLkRUX0ZMT0FUNjQ9TmwoKSxSLkRUX0JPT0w9SWwoKSxSLkRUX1RZUEVTX0NPVU5UPXZsKCksUi5PSz1GbCgpLFIuRFJBQ09fRVJST1I9a3MoKSxSLklPX0VSUk9SPUxsKCksUi5JTlZBTElEX1BBUkFNRVRFUj1EbCgpLFIuVU5TVVBQT1JURURfVkVSU0lPTj1CbCgpLFIuVU5LTk9XTl9WRVJTSU9OPVVsKCl9b2U/VigpOnBuLnVuc2hpZnQoVil9KCksdHlwZW9mIFIub25Nb2R1bGVQYXJzZWQ9PSJmdW5jdGlvbiImJlIub25Nb2R1bGVQYXJzZWQoKSxSLkRlY29kZXIucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGU9ZnVuY3Rpb24oVil7aWYoVi5fX2NsYXNzX18mJlYuX19jbGFzc19fPT09Ui5EZWNvZGVyQnVmZmVyKXJldHVybiBSLkRlY29kZXIucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZChWKTtpZig4PlYuYnl0ZUxlbmd0aClyZXR1cm4gUi5JTlZBTElEX0dFT01FVFJZX1RZUEU7c3dpdGNoKFZbN10pe2Nhc2UgMDpyZXR1cm4gUi5QT0lOVF9DTE9VRDtjYXNlIDE6cmV0dXJuIFIuVFJJQU5HVUxBUl9NRVNIO2RlZmF1bHQ6cmV0dXJuIFIuSU5WQUxJRF9HRU9NRVRSWV9UWVBFfX0sZS5yZWFkeX19KCk7dHlwZW9mIGR1PT0ib2JqZWN0IiYmdHlwZW9mIENnPT0ib2JqZWN0Ij9DZy5leHBvcnRzPXhnOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHhnfSk6dHlwZW9mIGR1PT0ib2JqZWN0IiYmKGR1LkRyYWNvRGVjb2Rlck1vZHVsZT14Zyl9KTt2YXIgTmc9e307bGUoTmcse2RlZmF1bHQ6KCk9PmM2fSk7ZnVuY3Rpb24gSlUodCxlKXtsZXQgbj10Lm51bV9wb2ludHMoKSxvPXQubnVtX2ZhY2VzKCkscj1uZXcgTWUuRHJhY29JbnQzMkFycmF5LGk9byozLHM9THQuY3JlYXRlVHlwZWRBcnJheShuLGkpLGY9MDtmb3IobGV0IHU9MDt1PG87Kyt1KWUuR2V0RmFjZUZyb21NZXNoKHQsdSxyKSxzW2YrMF09ci5HZXRWYWx1ZSgwKSxzW2YrMV09ci5HZXRWYWx1ZSgxKSxzW2YrMl09ci5HZXRWYWx1ZSgyKSxmKz0zO3JldHVybiBNZS5kZXN0cm95KHIpLHt0eXBlZEFycmF5OnMsbnVtYmVyT2ZJbmRpY2VzOml9fWZ1bmN0aW9uIHQ2KHQsZSxuLG8scil7bGV0IGkscztvLnF1YW50aXphdGlvbkJpdHM8PTg/KHM9bmV3IE1lLkRyYWNvVUludDhBcnJheSxpPW5ldyBVaW50OEFycmF5KHIpLGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHModCxuLHMpKTpvLnF1YW50aXphdGlvbkJpdHM8PTE2PyhzPW5ldyBNZS5EcmFjb1VJbnQxNkFycmF5LGk9bmV3IFVpbnQxNkFycmF5KHIpLGUuR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzKHQsbixzKSk6KHM9bmV3IE1lLkRyYWNvRmxvYXQzMkFycmF5LGk9bmV3IEZsb2F0MzJBcnJheShyKSxlLkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzKHQsbixzKSk7Zm9yKGxldCBmPTA7ZjxyOysrZilpW2ZdPXMuR2V0VmFsdWUoZik7cmV0dXJuIE1lLmRlc3Ryb3kocyksaX1mdW5jdGlvbiBlNih0LGUsbixvKXtsZXQgcixpO3N3aXRjaChuLmRhdGFfdHlwZSgpKXtjYXNlIDE6Y2FzZSAxMTppPW5ldyBNZS5EcmFjb0ludDhBcnJheSxyPW5ldyBJbnQ4QXJyYXkobyksZS5HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzKHQsbixpKTticmVhaztjYXNlIDI6aT1uZXcgTWUuRHJhY29VSW50OEFycmF5LHI9bmV3IFVpbnQ4QXJyYXkobyksZS5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cyh0LG4saSk7YnJlYWs7Y2FzZSAzOmk9bmV3IE1lLkRyYWNvSW50MTZBcnJheSxyPW5ldyBJbnQxNkFycmF5KG8pLGUuR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHModCxuLGkpO2JyZWFrO2Nhc2UgNDppPW5ldyBNZS5EcmFjb1VJbnQxNkFycmF5LHI9bmV3IFVpbnQxNkFycmF5KG8pLGUuR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzKHQsbixpKTticmVhaztjYXNlIDU6Y2FzZSA3Omk9bmV3IE1lLkRyYWNvSW50MzJBcnJheSxyPW5ldyBJbnQzMkFycmF5KG8pLGUuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHModCxuLGkpO2JyZWFrO2Nhc2UgNjpjYXNlIDg6aT1uZXcgTWUuRHJhY29VSW50MzJBcnJheSxyPW5ldyBVaW50MzJBcnJheShvKSxlLkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cyh0LG4saSk7YnJlYWs7Y2FzZSA5OmNhc2UgMTA6aT1uZXcgTWUuRHJhY29GbG9hdDMyQXJyYXkscj1uZXcgRmxvYXQzMkFycmF5KG8pLGUuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHModCxuLGkpO2JyZWFrfWZvcihsZXQgcz0wO3M8bzsrK3MpcltzXT1pLkdldFZhbHVlKHMpO3JldHVybiBNZS5kZXN0cm95KGkpLHJ9ZnVuY3Rpb24geDIodCxlLG4pe2xldCBvPXQubnVtX3BvaW50cygpLHI9bi5udW1fY29tcG9uZW50cygpLGkscz1uZXcgTWUuQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtO2lmKHMuSW5pdEZyb21BdHRyaWJ1dGUobikpe2xldCBsPW5ldyBBcnJheShyKTtmb3IobGV0IHA9MDtwPHI7KytwKWxbcF09cy5taW5fdmFsdWUocCk7aT17cXVhbnRpemF0aW9uQml0czpzLnF1YW50aXphdGlvbl9iaXRzKCksbWluVmFsdWVzOmwscmFuZ2U6cy5yYW5nZSgpLG9jdEVuY29kZWQ6ITF9fU1lLmRlc3Ryb3kocykscz1uZXcgTWUuQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybSxzLkluaXRGcm9tQXR0cmlidXRlKG4pJiYoaT17cXVhbnRpemF0aW9uQml0czpzLnF1YW50aXphdGlvbl9iaXRzKCksb2N0RW5jb2RlZDohMH0pLE1lLmRlc3Ryb3kocyk7bGV0IGY9bypyLHU7bShpKT91PXQ2KHQsZSxuLGksZik6dT1lNih0LGUsbixmKTtsZXQgYz1ldC5mcm9tVHlwZWRBcnJheSh1KTtyZXR1cm57YXJyYXk6dSxkYXRhOntjb21wb25lbnRzUGVyQXR0cmlidXRlOnIsY29tcG9uZW50RGF0YXR5cGU6YyxieXRlT2Zmc2V0Om4uYnl0ZV9vZmZzZXQoKSxieXRlU3RyaWRlOmV0LmdldFNpemVJbkJ5dGVzKGMpKnIsbm9ybWFsaXplZDpuLm5vcm1hbGl6ZWQoKSxxdWFudGl6YXRpb246aX19fWZ1bmN0aW9uIG42KHQpe2xldCBlPW5ldyBNZS5EZWNvZGVyO3QuZGVxdWFudGl6ZUluU2hhZGVyJiYoZS5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtKE1lLlBPU0lUSU9OKSxlLlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm0oTWUuTk9STUFMKSk7bGV0IG49bmV3IE1lLkRlY29kZXJCdWZmZXI7aWYobi5Jbml0KHQuYnVmZmVyLHQuYnVmZmVyLmxlbmd0aCksZS5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlKG4pIT09TWUuUE9JTlRfQ0xPVUQpdGhyb3cgbmV3IEFlKCJEcmFjbyBnZW9tZXRyeSB0eXBlIG11c3QgYmUgUE9JTlRfQ0xPVUQuIik7bGV0IHI9bmV3IE1lLlBvaW50Q2xvdWQsaT1lLkRlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZChuLHIpO2lmKCFpLm9rKCl8fHIucHRyPT09MCl0aHJvdyBuZXcgQWUoYEVycm9yIGRlY29kaW5nIGRyYWNvIHBvaW50IGNsb3VkOiAke2kuZXJyb3JfbXNnKCl9YCk7TWUuZGVzdHJveShuKTtsZXQgcz17fSxmPXQucHJvcGVydGllcztmb3IobGV0IHUgaW4gZilpZihmLmhhc093blByb3BlcnR5KHUpKXtsZXQgYztpZih1PT09IlBPU0lUSU9OInx8dT09PSJOT1JNQUwiKXtsZXQgbD1lLkdldEF0dHJpYnV0ZUlkKHIsTWVbdV0pO2M9ZS5HZXRBdHRyaWJ1dGUocixsKX1lbHNle2xldCBsPWZbdV07Yz1lLkdldEF0dHJpYnV0ZUJ5VW5pcXVlSWQocixsKX1zW3VdPXgyKHIsZSxjKX1yZXR1cm4gTWUuZGVzdHJveShyKSxNZS5kZXN0cm95KGUpLHN9ZnVuY3Rpb24gbzYodCl7bGV0IGU9bmV3IE1lLkRlY29kZXI7aWYodC5kZXF1YW50aXplSW5TaGFkZXIpZm9yKGxldCBsPTA7bDx0LmF0dHJpYnV0ZXNUb1NraXBUcmFuc2Zvcm0ubGVuZ3RoOysrbCllLlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm0oTWVbdC5hdHRyaWJ1dGVzVG9Ta2lwVHJhbnNmb3JtW2xdXSk7bGV0IG49dC5idWZmZXJWaWV3LG89bmV3IE1lLkRlY29kZXJCdWZmZXI7aWYoby5Jbml0KHQuYXJyYXksbi5ieXRlTGVuZ3RoKSxlLkdldEVuY29kZWRHZW9tZXRyeVR5cGUobykhPT1NZS5UUklBTkdVTEFSX01FU0gpdGhyb3cgbmV3IEFlKCJVbnN1cHBvcnRlZCBkcmFjbyBtZXNoIGdlb21ldHJ5IHR5cGUuIik7bGV0IGk9bmV3IE1lLk1lc2gscz1lLkRlY29kZUJ1ZmZlclRvTWVzaChvLGkpO2lmKCFzLm9rKCl8fGkucHRyPT09MCl0aHJvdyBuZXcgQWUoYEVycm9yIGRlY29kaW5nIGRyYWNvIG1lc2ggZ2VvbWV0cnk6ICR7cy5lcnJvcl9tc2coKX1gKTtNZS5kZXN0cm95KG8pO2xldCBmPXt9LHU9dC5jb21wcmVzc2VkQXR0cmlidXRlcztmb3IobGV0IGwgaW4gdSlpZih1Lmhhc093blByb3BlcnR5KGwpKXtsZXQgcD11W2xdLGQ9ZS5HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkKGkscCk7ZltsXT14MihpLGUsZCl9bGV0IGM9e2luZGV4QXJyYXk6SlUoaSxlKSxhdHRyaWJ1dGVEYXRhOmZ9O3JldHVybiBNZS5kZXN0cm95KGkpLE1lLmRlc3Ryb3koZSksY31hc3luYyBmdW5jdGlvbiByNih0LGUpe3JldHVybiBtKHQuYnVmZmVyVmlldyk/bzYodCk6bjYodCl9YXN5bmMgZnVuY3Rpb24gaTYodCxlKXtsZXQgbj10LndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBtKG4pJiZtKG4ud2FzbUJpbmFyeUZpbGUpP01lPWF3YWl0KDAsTWcuZGVmYXVsdCkobik6TWU9YXdhaXQoMCxNZy5kZWZhdWx0KSgpLCEwfWFzeW5jIGZ1bmN0aW9uIHM2KHQsZSl7bGV0IG49dC53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gbShuKT9pNih0LGUpOnI2KHQsZSl9dmFyIE1nLE1lLGM2LElnPSQoKCk9PntEZSgpO2Z0KCk7WmUoKTt0aSgpO1puKCk7TWc9bXIoUGcoKSwxKTtjNj1VZShzNil9KTtmdW5jdGlvbiB2Zyh0LGUpe2lmKHZnLnBhc3NUaHJvdWdoRGF0YUZvclRlc3RpbmcpcmV0dXJuIGU7eS50eXBlT2Yub2JqZWN0KCJrZXkiLHQpLHkudHlwZU9mLm9iamVjdCgiZGF0YSIsZSk7bGV0IG49dC5ieXRlTGVuZ3RoO2lmKG49PT0wfHxuJTQhPT0wKXRocm93IG5ldyBBZSgiVGhlIGxlbmd0aCBvZiBrZXkgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBhbmQgYSBtdWx0aXBsZSBvZiA0LiIpO2xldCBvPW5ldyBEYXRhVmlldyhlKSxyPW8uZ2V0VWludDMyKDAsITApO2lmKHI9PT1hNnx8cj09PWY2KXJldHVybiBlO2xldCBpPW5ldyBEYXRhVmlldyh0KSxzPTAsZj1lLmJ5dGVMZW5ndGgsdT1mLWYlOCxjPW4sbCxwPTg7Zm9yKDtzPHU7KWZvcihwPShwKzgpJTI0LGw9cDtzPHUmJmw8Yzspby5zZXRVaW50MzIocyxvLmdldFVpbnQzMihzLCEwKV5pLmdldFVpbnQzMihsLCEwKSwhMCksby5zZXRVaW50MzIocys0LG8uZ2V0VWludDMyKHMrNCwhMCleaS5nZXRVaW50MzIobCs0LCEwKSwhMCkscys9OCxsKz0yNDtpZihzPGYpZm9yKGw+PWMmJihwPShwKzgpJTI0LGw9cCk7czxmOylvLnNldFVpbnQ4KHMsby5nZXRVaW50OChzKV5pLmdldFVpbnQ4KGwpKSxzKyssbCsrfXZhciBhNixmNixDMixQMj0kKCgpPT57V3QoKTt0aSgpO2E2PTE5NTMwMjk4MDUsZjY9MjkxNzAzNDEwMDt2Zy5wYXNzVGhyb3VnaERhdGFGb3JUZXN0aW5nPSExO0MyPXZnfSk7ZnVuY3Rpb24gdTYodCxlKXtyZXR1cm4odCZlKSE9PTB9dmFyIEdhLE0yPSQoKCk9PntHYT11Nn0pO2Z1bmN0aW9uIGdpKHQsZSxuLG8scixpKXt0aGlzLl9iaXRzPXQsdGhpcy5jbm9kZVZlcnNpb249ZSx0aGlzLmltYWdlcnlWZXJzaW9uPW4sdGhpcy50ZXJyYWluVmVyc2lvbj1vLHRoaXMuaW1hZ2VyeVByb3ZpZGVyPXIsdGhpcy50ZXJyYWluUHJvdmlkZXI9aSx0aGlzLmFuY2VzdG9ySGFzVGVycmFpbj0hMSx0aGlzLnRlcnJhaW5TdGF0ZT12b2lkIDB9dmFyIGw2LE4yLHA2LGQ2LG02LEkyLHYyPSQoKCk9PntmdCgpO00yKCk7bDY9WzEsMiw0LDhdLE4yPTE1LHA2PTE2LGQ2PTY0LG02PTEyODtnaS5jbG9uZT1mdW5jdGlvbih0LGUpe3JldHVybiBtKGUpPyhlLl9iaXRzPXQuX2JpdHMsZS5jbm9kZVZlcnNpb249dC5jbm9kZVZlcnNpb24sZS5pbWFnZXJ5VmVyc2lvbj10LmltYWdlcnlWZXJzaW9uLGUudGVycmFpblZlcnNpb249dC50ZXJyYWluVmVyc2lvbixlLmltYWdlcnlQcm92aWRlcj10LmltYWdlcnlQcm92aWRlcixlLnRlcnJhaW5Qcm92aWRlcj10LnRlcnJhaW5Qcm92aWRlcik6ZT1uZXcgZ2kodC5fYml0cyx0LmNub2RlVmVyc2lvbix0LmltYWdlcnlWZXJzaW9uLHQudGVycmFpblZlcnNpb24sdC5pbWFnZXJ5UHJvdmlkZXIsdC50ZXJyYWluUHJvdmlkZXIpLGUuYW5jZXN0b3JIYXNUZXJyYWluPXQuYW5jZXN0b3JIYXNUZXJyYWluLGUudGVycmFpblN0YXRlPXQudGVycmFpblN0YXRlLGV9O2dpLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24odCl7dGhpcy5hbmNlc3Rvckhhc1RlcnJhaW49dC5hbmNlc3Rvckhhc1RlcnJhaW58fHRoaXMuaGFzVGVycmFpbigpfTtnaS5wcm90b3R5cGUuaGFzU3VidHJlZT1mdW5jdGlvbigpe3JldHVybiBHYSh0aGlzLl9iaXRzLHA2KX07Z2kucHJvdG90eXBlLmhhc0ltYWdlcnk9ZnVuY3Rpb24oKXtyZXR1cm4gR2EodGhpcy5fYml0cyxkNil9O2dpLnByb3RvdHlwZS5oYXNUZXJyYWluPWZ1bmN0aW9uKCl7cmV0dXJuIEdhKHRoaXMuX2JpdHMsbTYpfTtnaS5wcm90b3R5cGUuaGFzQ2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4gR2EodGhpcy5fYml0cyxOMil9O2dpLnByb3RvdHlwZS5oYXNDaGlsZD1mdW5jdGlvbih0KXtyZXR1cm4gR2EodGhpcy5fYml0cyxsNlt0XSl9O2dpLnByb3RvdHlwZS5nZXRDaGlsZEJpdG1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYml0cyZOMn07STI9Z2l9KTt2YXIgTDI9WW4oKE91dCxGMik9PnsidXNlIHN0cmljdCI7dmFyIGg2PSh0LGUsbixvKT0+e2xldCByPXQmNjU1MzV8MCxpPXQ+Pj4xNiY2NTUzNXwwLHM9MDtmb3IoO24hPT0wOyl7cz1uPjJlMz8yZTM6bixuLT1zO2RvIHI9citlW28rK118MCxpPWkrcnwwO3doaWxlKC0tcyk7ciU9NjU1MjEsaSU9NjU1MjF9cmV0dXJuIHJ8aTw8MTZ8MH07RjIuZXhwb3J0cz1oNn0pO3ZhciBCMj1ZbigoRXV0LEQyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXzY9KCk9PntsZXQgdCxlPVtdO2Zvcih2YXIgbj0wO248MjU2O24rKyl7dD1uO2Zvcih2YXIgbz0wO288ODtvKyspdD10JjE/Mzk4ODI5MjM4NF50Pj4+MTp0Pj4+MTtlW25dPXR9cmV0dXJuIGV9LHk2PW5ldyBVaW50MzJBcnJheShfNigpKSxnNj0odCxlLG4sbyk9PntsZXQgcj15NixpPW8rbjt0Xj0tMTtmb3IobGV0IHM9bztzPGk7cysrKXQ9dD4+PjheclsodF5lW3NdKSYyNTVdO3JldHVybiB0Xi0xfTtEMi5leHBvcnRzPWc2fSk7dmFyIGsyPVluKChSdXQsVTIpPT57InVzZSBzdHJpY3QiO1UyLmV4cG9ydHM9ZnVuY3Rpb24oZSxuKXtsZXQgbyxyLGkscyxmLHUsYyxsLHAsZCxoLF8sZyxiLHcsTyxFLFQseCxNLE4sRixJLHYsQj1lLnN0YXRlO289ZS5uZXh0X2luLEk9ZS5pbnB1dCxyPW8rKGUuYXZhaWxfaW4tNSksaT1lLm5leHRfb3V0LHY9ZS5vdXRwdXQscz1pLShuLWUuYXZhaWxfb3V0KSxmPWkrKGUuYXZhaWxfb3V0LTI1NyksdT1CLmRtYXgsYz1CLndzaXplLGw9Qi53aGF2ZSxwPUIud25leHQsZD1CLndpbmRvdyxoPUIuaG9sZCxfPUIuYml0cyxnPUIubGVuY29kZSxiPUIuZGlzdGNvZGUsdz0oMTw8Qi5sZW5iaXRzKS0xLE89KDE8PEIuZGlzdGJpdHMpLTE7dDpkb3tfPDE1JiYoaCs9SVtvKytdPDxfLF8rPTgsaCs9SVtvKytdPDxfLF8rPTgpLEU9Z1toJnddO2U6Zm9yKDs7KXtpZihUPUU+Pj4yNCxoPj4+PVQsXy09VCxUPUU+Pj4xNiYyNTUsVD09PTApdltpKytdPUUmNjU1MzU7ZWxzZSBpZihUJjE2KXt4PUUmNjU1MzUsVCY9MTUsVCYmKF88VCYmKGgrPUlbbysrXTw8XyxfKz04KSx4Kz1oJigxPDxUKS0xLGg+Pj49VCxfLT1UKSxfPDE1JiYoaCs9SVtvKytdPDxfLF8rPTgsaCs9SVtvKytdPDxfLF8rPTgpLEU9YltoJk9dO246Zm9yKDs7KXtpZihUPUU+Pj4yNCxoPj4+PVQsXy09VCxUPUU+Pj4xNiYyNTUsVCYxNil7aWYoTT1FJjY1NTM1LFQmPTE1LF88VCYmKGgrPUlbbysrXTw8XyxfKz04LF88VCYmKGgrPUlbbysrXTw8XyxfKz04KSksTSs9aCYoMTw8VCktMSxNPnUpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsQi5tb2RlPTE2MjA5O2JyZWFrIHR9aWYoaD4+Pj1ULF8tPVQsVD1pLXMsTT5UKXtpZihUPU0tVCxUPmwmJkIuc2FuZSl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixCLm1vZGU9MTYyMDk7YnJlYWsgdH1pZihOPTAsRj1kLHA9PT0wKXtpZihOKz1jLVQsVDx4KXt4LT1UO2RvIHZbaSsrXT1kW04rK107d2hpbGUoLS1UKTtOPWktTSxGPXZ9fWVsc2UgaWYocDxUKXtpZihOKz1jK3AtVCxULT1wLFQ8eCl7eC09VDtkbyB2W2krK109ZFtOKytdO3doaWxlKC0tVCk7aWYoTj0wLHA8eCl7VD1wLHgtPVQ7ZG8gdltpKytdPWRbTisrXTt3aGlsZSgtLVQpO049aS1NLEY9dn19fWVsc2UgaWYoTis9cC1ULFQ8eCl7eC09VDtkbyB2W2krK109ZFtOKytdO3doaWxlKC0tVCk7Tj1pLU0sRj12fWZvcig7eD4yOyl2W2krK109RltOKytdLHZbaSsrXT1GW04rK10sdltpKytdPUZbTisrXSx4LT0zO3gmJih2W2krK109RltOKytdLHg+MSYmKHZbaSsrXT1GW04rK10pKX1lbHNle049aS1NO2RvIHZbaSsrXT12W04rK10sdltpKytdPXZbTisrXSx2W2krK109dltOKytdLHgtPTM7d2hpbGUoeD4yKTt4JiYodltpKytdPXZbTisrXSx4PjEmJih2W2krK109dltOKytdKSl9fWVsc2UgaWYoKFQmNjQpPT09MCl7RT1iWyhFJjY1NTM1KSsoaCYoMTw8VCktMSldO2NvbnRpbnVlIG59ZWxzZXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixCLm1vZGU9MTYyMDk7YnJlYWsgdH1icmVha319ZWxzZSBpZigoVCY2NCk9PT0wKXtFPWdbKEUmNjU1MzUpKyhoJigxPDxUKS0xKV07Y29udGludWUgZX1lbHNlIGlmKFQmMzIpe0IubW9kZT0xNjE5MTticmVhayB0fWVsc2V7ZS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsQi5tb2RlPTE2MjA5O2JyZWFrIHR9YnJlYWt9fXdoaWxlKG88ciYmaTxmKTt4PV8+PjMsby09eCxfLT14PDwzLGgmPSgxPDxfKS0xLGUubmV4dF9pbj1vLGUubmV4dF9vdXQ9aSxlLmF2YWlsX2luPW88cj81KyhyLW8pOjUtKG8tciksZS5hdmFpbF9vdXQ9aTxmPzI1NysoZi1pKToyNTctKGktZiksQi5ob2xkPWgsQi5iaXRzPV99fSk7dmFyIFYyPVluKChTdXQsRzIpPT57InVzZSBzdHJpY3QiO3ZhciBBNj1uZXcgVWludDE2QXJyYXkoWzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSksYjY9bmV3IFVpbnQ4QXJyYXkoWzE2LDE2LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIwLDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSksdzY9bmV3IFVpbnQxNkFycmF5KFsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSksVDY9bmV3IFVpbnQ4QXJyYXkoWzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XSksTzY9KHQsZSxuLG8scixpLHMsZik9PntsZXQgdT1mLmJpdHMsYz0wLGw9MCxwPTAsZD0wLGg9MCxfPTAsZz0wLGI9MCx3PTAsTz0wLEUsVCx4LE0sTixGPW51bGwsSSx2PW5ldyBVaW50MTZBcnJheSgxNiksQj1uZXcgVWludDE2QXJyYXkoMTYpLEE9bnVsbCxTLEMsTDtmb3IoYz0wO2M8PTE1O2MrKyl2W2NdPTA7Zm9yKGw9MDtsPG87bCsrKXZbZVtuK2xdXSsrO2ZvcihoPXUsZD0xNTtkPj0xJiZ2W2RdPT09MDtkLS0pO2lmKGg+ZCYmKGg9ZCksZD09PTApcmV0dXJuIHJbaSsrXT0xPDwyNHw2NDw8MTZ8MCxyW2krK109MTw8MjR8NjQ8PDE2fDAsZi5iaXRzPTEsMDtmb3IocD0xO3A8ZCYmdltwXT09PTA7cCsrKTtmb3IoaDxwJiYoaD1wKSxiPTEsYz0xO2M8PTE1O2MrKylpZihiPDw9MSxiLT12W2NdLGI8MClyZXR1cm4tMTtpZihiPjAmJih0PT09MHx8ZCE9PTEpKXJldHVybi0xO2ZvcihCWzFdPTAsYz0xO2M8MTU7YysrKUJbYysxXT1CW2NdK3ZbY107Zm9yKGw9MDtsPG87bCsrKWVbbitsXSE9PTAmJihzW0JbZVtuK2xdXSsrXT1sKTtpZih0PT09MD8oRj1BPXMsST0yMCk6dD09PTE/KEY9QTYsQT1iNixJPTI1Nyk6KEY9dzYsQT1UNixJPTApLE89MCxsPTAsYz1wLE49aSxfPWgsZz0wLHg9LTEsdz0xPDxoLE09dy0xLHQ9PT0xJiZ3Pjg1Mnx8dD09PTImJnc+NTkyKXJldHVybiAxO2Zvcig7Oyl7Uz1jLWcsc1tsXSsxPEk/KEM9MCxMPXNbbF0pOnNbbF0+PUk/KEM9QVtzW2xdLUldLEw9RltzW2xdLUldKTooQz05NixMPTApLEU9MTw8Yy1nLFQ9MTw8XyxwPVQ7ZG8gVC09RSxyW04rKE8+PmcpK1RdPVM8PDI0fEM8PDE2fEx8MDt3aGlsZShUIT09MCk7Zm9yKEU9MTw8Yy0xO08mRTspRT4+PTE7aWYoRSE9PTA/KE8mPUUtMSxPKz1FKTpPPTAsbCsrLC0tdltjXT09PTApe2lmKGM9PT1kKWJyZWFrO2M9ZVtuK3NbbF1dfWlmKGM+aCYmKE8mTSkhPT14KXtmb3IoZz09PTAmJihnPWgpLE4rPXAsXz1jLWcsYj0xPDxfO18rZzxkJiYoYi09dltfK2ddLCEoYjw9MCkpOylfKyssYjw8PTE7aWYodys9MTw8Xyx0PT09MSYmdz44NTJ8fHQ9PT0yJiZ3PjU5MilyZXR1cm4gMTt4PU8mTSxyW3hdPWg8PDI0fF88PDE2fE4taXwwfX1yZXR1cm4gTyE9PTAmJihyW04rT109Yy1nPDwyNHw2NDw8MTZ8MCksZi5iaXRzPWgsMH07RzIuZXhwb3J0cz1PNn0pO3ZhciBzbT1ZbigoeHV0LHoyKT0+eyJ1c2Ugc3RyaWN0Ijt6Mi5leHBvcnRzPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfTUVNX0VSUk9SOi00LFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9fSk7dmFyIE9TPVluKChDdXQsJHIpPT57InVzZSBzdHJpY3QiO3ZhciBrZz1MMigpLEFpPUIyKCksRTY9azIoKSxtdT1WMigpLFI2PTAsbVM9MSxoUz0yLHtaX0ZJTklTSDpqMixaX0JMT0NLOlM2LFpfVFJFRVM6Y20sWl9PSzp4YyxaX1NUUkVBTV9FTkQ6eDYsWl9ORUVEX0RJQ1Q6QzYsWl9TVFJFQU1fRVJST1I6TnIsWl9EQVRBX0VSUk9SOl9TLFpfTUVNX0VSUk9SOkdnLFpfQlVGX0VSUk9SOlA2LFpfREVGTEFURUQ6SDJ9PXNtKCksbG09MTYxODAscTI9MTYxODEsSzI9MTYxODIsVzI9MTYxODMsWDI9MTYxODQsWTI9MTYxODUsJDI9MTYxODYsWjI9MTYxODcsUTI9MTYxODgsSjI9MTYxODksdW09MTYxOTAsV2k9MTYxOTEsRmc9MTYxOTIsdFM9MTYxOTMsTGc9MTYxOTQsZVM9MTYxOTUsblM9MTYxOTYsb1M9MTYxOTcsclM9MTYxOTgsYW09MTYxOTksZm09MTYyMDAsaVM9MTYyMDEsc1M9MTYyMDIsY1M9MTYyMDMsYVM9MTYyMDQsZlM9MTYyMDUsRGc9MTYyMDYsdVM9MTYyMDcsbFM9MTYyMDgsTW49MTYyMDksVmc9MTYyMTAseVM9MTYyMTEsTTY9ODUyLE42PTU5MixJNj0xNSx2Nj1JNixwUz10PT4odD4+PjI0JjI1NSkrKHQ+Pj44JjY1MjgwKSsoKHQmNjUyODApPDw4KSsoKHQmMjU1KTw8MjQpO2Z1bmN0aW9uIEY2KCl7dGhpcy5zdHJtPW51bGwsdGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyBVaW50MTZBcnJheSgzMjApLHRoaXMud29yaz1uZXcgVWludDE2QXJyYXkoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9dmFyIENjPXQ9PntpZighdClyZXR1cm4gMTtsZXQgZT10LnN0YXRlO3JldHVybiFlfHxlLnN0cm0hPT10fHxlLm1vZGU8bG18fGUubW9kZT55Uz8xOjB9LGdTPXQ9PntpZihDYyh0KSlyZXR1cm4gTnI7bGV0IGU9dC5zdGF0ZTtyZXR1cm4gdC50b3RhbF9pbj10LnRvdGFsX291dD1lLnRvdGFsPTAsdC5tc2c9IiIsZS53cmFwJiYodC5hZGxlcj1lLndyYXAmMSksZS5tb2RlPWxtLGUubGFzdD0wLGUuaGF2ZWRpY3Q9MCxlLmZsYWdzPS0xLGUuZG1heD0zMjc2OCxlLmhlYWQ9bnVsbCxlLmhvbGQ9MCxlLmJpdHM9MCxlLmxlbmNvZGU9ZS5sZW5keW49bmV3IEludDMyQXJyYXkoTTYpLGUuZGlzdGNvZGU9ZS5kaXN0ZHluPW5ldyBJbnQzMkFycmF5KE42KSxlLnNhbmU9MSxlLmJhY2s9LTEseGN9LEFTPXQ9PntpZihDYyh0KSlyZXR1cm4gTnI7bGV0IGU9dC5zdGF0ZTtyZXR1cm4gZS53c2l6ZT0wLGUud2hhdmU9MCxlLnduZXh0PTAsZ1ModCl9LGJTPSh0LGUpPT57bGV0IG47aWYoQ2ModCkpcmV0dXJuIE5yO2xldCBvPXQuc3RhdGU7cmV0dXJuIGU8MD8obj0wLGU9LWUpOihuPShlPj40KSs1LGU8NDgmJihlJj0xNSkpLGUmJihlPDh8fGU+MTUpP05yOihvLndpbmRvdyE9PW51bGwmJm8ud2JpdHMhPT1lJiYoby53aW5kb3c9bnVsbCksby53cmFwPW4sby53Yml0cz1lLEFTKHQpKX0sd1M9KHQsZSk9PntpZighdClyZXR1cm4gTnI7bGV0IG49bmV3IEY2O3Quc3RhdGU9bixuLnN0cm09dCxuLndpbmRvdz1udWxsLG4ubW9kZT1sbTtsZXQgbz1iUyh0LGUpO3JldHVybiBvIT09eGMmJih0LnN0YXRlPW51bGwpLG99LEw2PXQ9PndTKHQsdjYpLGRTPSEwLEJnLFVnLEQ2PXQ9PntpZihkUyl7Qmc9bmV3IEludDMyQXJyYXkoNTEyKSxVZz1uZXcgSW50MzJBcnJheSgzMik7bGV0IGU9MDtmb3IoO2U8MTQ0Oyl0LmxlbnNbZSsrXT04O2Zvcig7ZTwyNTY7KXQubGVuc1tlKytdPTk7Zm9yKDtlPDI4MDspdC5sZW5zW2UrK109Nztmb3IoO2U8Mjg4Oyl0LmxlbnNbZSsrXT04O2ZvcihtdShtUyx0LmxlbnMsMCwyODgsQmcsMCx0Lndvcmsse2JpdHM6OX0pLGU9MDtlPDMyOyl0LmxlbnNbZSsrXT01O211KGhTLHQubGVucywwLDMyLFVnLDAsdC53b3JrLHtiaXRzOjV9KSxkUz0hMX10LmxlbmNvZGU9QmcsdC5sZW5iaXRzPTksdC5kaXN0Y29kZT1VZyx0LmRpc3RiaXRzPTV9LFRTPSh0LGUsbixvKT0+e2xldCByLGk9dC5zdGF0ZTtyZXR1cm4gaS53aW5kb3c9PT1udWxsJiYoaS53c2l6ZT0xPDxpLndiaXRzLGkud25leHQ9MCxpLndoYXZlPTAsaS53aW5kb3c9bmV3IFVpbnQ4QXJyYXkoaS53c2l6ZSkpLG8+PWkud3NpemU/KGkud2luZG93LnNldChlLnN1YmFycmF5KG4taS53c2l6ZSxuKSwwKSxpLnduZXh0PTAsaS53aGF2ZT1pLndzaXplKToocj1pLndzaXplLWkud25leHQscj5vJiYocj1vKSxpLndpbmRvdy5zZXQoZS5zdWJhcnJheShuLW8sbi1vK3IpLGkud25leHQpLG8tPXIsbz8oaS53aW5kb3cuc2V0KGUuc3ViYXJyYXkobi1vLG4pLDApLGkud25leHQ9byxpLndoYXZlPWkud3NpemUpOihpLnduZXh0Kz1yLGkud25leHQ9PT1pLndzaXplJiYoaS53bmV4dD0wKSxpLndoYXZlPGkud3NpemUmJihpLndoYXZlKz1yKSkpLDB9LEI2PSh0LGUpPT57bGV0IG4sbyxyLGkscyxmLHUsYyxsLHAsZCxoLF8sZyxiPTAsdyxPLEUsVCx4LE0sTixGLEk9bmV3IFVpbnQ4QXJyYXkoNCksdixCLEE9bmV3IFVpbnQ4QXJyYXkoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKTtpZihDYyh0KXx8IXQub3V0cHV0fHwhdC5pbnB1dCYmdC5hdmFpbF9pbiE9PTApcmV0dXJuIE5yO249dC5zdGF0ZSxuLm1vZGU9PT1XaSYmKG4ubW9kZT1GZykscz10Lm5leHRfb3V0LHI9dC5vdXRwdXQsdT10LmF2YWlsX291dCxpPXQubmV4dF9pbixvPXQuaW5wdXQsZj10LmF2YWlsX2luLGM9bi5ob2xkLGw9bi5iaXRzLHA9ZixkPXUsRj14Yzt0OmZvcig7Oylzd2l0Y2gobi5tb2RlKXtjYXNlIGxtOmlmKG4ud3JhcD09PTApe24ubW9kZT1GZzticmVha31mb3IoO2w8MTY7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1pZihuLndyYXAmMiYmYz09PTM1NjE1KXtuLndiaXRzPT09MCYmKG4ud2JpdHM9MTUpLG4uY2hlY2s9MCxJWzBdPWMmMjU1LElbMV09Yz4+PjgmMjU1LG4uY2hlY2s9QWkobi5jaGVjayxJLDIsMCksYz0wLGw9MCxuLm1vZGU9cTI7YnJlYWt9aWYobi5oZWFkJiYobi5oZWFkLmRvbmU9ITEpLCEobi53cmFwJjEpfHwoKChjJjI1NSk8PDgpKyhjPj44KSklMzEpe3QubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixuLm1vZGU9TW47YnJlYWt9aWYoKGMmMTUpIT09SDIpe3QubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPU1uO2JyZWFrfWlmKGM+Pj49NCxsLT00LE49KGMmMTUpKzgsbi53Yml0cz09PTAmJihuLndiaXRzPU4pLE4+MTV8fE4+bi53Yml0cyl7dC5tc2c9ImludmFsaWQgd2luZG93IHNpemUiLG4ubW9kZT1NbjticmVha31uLmRtYXg9MTw8bi53Yml0cyxuLmZsYWdzPTAsdC5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPWMmNTEyP0oyOldpLGM9MCxsPTA7YnJlYWs7Y2FzZSBxMjpmb3IoO2w8MTY7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1pZihuLmZsYWdzPWMsKG4uZmxhZ3MmMjU1KSE9PUgyKXt0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLG4ubW9kZT1NbjticmVha31pZihuLmZsYWdzJjU3MzQ0KXt0Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixuLm1vZGU9TW47YnJlYWt9bi5oZWFkJiYobi5oZWFkLnRleHQ9Yz4+OCYxKSxuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihJWzBdPWMmMjU1LElbMV09Yz4+PjgmMjU1LG4uY2hlY2s9QWkobi5jaGVjayxJLDIsMCkpLGM9MCxsPTAsbi5tb2RlPUsyO2Nhc2UgSzI6Zm9yKDtsPDMyOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9bi5oZWFkJiYobi5oZWFkLnRpbWU9Yyksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYoSVswXT1jJjI1NSxJWzFdPWM+Pj44JjI1NSxJWzJdPWM+Pj4xNiYyNTUsSVszXT1jPj4+MjQmMjU1LG4uY2hlY2s9QWkobi5jaGVjayxJLDQsMCkpLGM9MCxsPTAsbi5tb2RlPVcyO2Nhc2UgVzI6Zm9yKDtsPDE2Oyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9bi5oZWFkJiYobi5oZWFkLnhmbGFncz1jJjI1NSxuLmhlYWQub3M9Yz4+OCksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYoSVswXT1jJjI1NSxJWzFdPWM+Pj44JjI1NSxuLmNoZWNrPUFpKG4uY2hlY2ssSSwyLDApKSxjPTAsbD0wLG4ubW9kZT1YMjtjYXNlIFgyOmlmKG4uZmxhZ3MmMTAyNCl7Zm9yKDtsPDE2Oyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9bi5sZW5ndGg9YyxuLmhlYWQmJihuLmhlYWQuZXh0cmFfbGVuPWMpLG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKElbMF09YyYyNTUsSVsxXT1jPj4+OCYyNTUsbi5jaGVjaz1BaShuLmNoZWNrLEksMiwwKSksYz0wLGw9MH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5leHRyYT1udWxsKTtuLm1vZGU9WTI7Y2FzZSBZMjppZihuLmZsYWdzJjEwMjQmJihoPW4ubGVuZ3RoLGg+ZiYmKGg9ZiksaCYmKG4uaGVhZCYmKE49bi5oZWFkLmV4dHJhX2xlbi1uLmxlbmd0aCxuLmhlYWQuZXh0cmF8fChuLmhlYWQuZXh0cmE9bmV3IFVpbnQ4QXJyYXkobi5oZWFkLmV4dHJhX2xlbikpLG4uaGVhZC5leHRyYS5zZXQoby5zdWJhcnJheShpLGkraCksTikpLG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKG4uY2hlY2s9QWkobi5jaGVjayxvLGgsaSkpLGYtPWgsaSs9aCxuLmxlbmd0aC09aCksbi5sZW5ndGgpKWJyZWFrIHQ7bi5sZW5ndGg9MCxuLm1vZGU9JDI7Y2FzZSAkMjppZihuLmZsYWdzJjIwNDgpe2lmKGY9PT0wKWJyZWFrIHQ7aD0wO2RvIE49b1tpK2grK10sbi5oZWFkJiZOJiZuLmxlbmd0aDw2NTUzNiYmKG4uaGVhZC5uYW1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE4pKTt3aGlsZShOJiZoPGYpO2lmKG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKG4uY2hlY2s9QWkobi5jaGVjayxvLGgsaSkpLGYtPWgsaSs9aCxOKWJyZWFrIHR9ZWxzZSBuLmhlYWQmJihuLmhlYWQubmFtZT1udWxsKTtuLmxlbmd0aD0wLG4ubW9kZT1aMjtjYXNlIFoyOmlmKG4uZmxhZ3MmNDA5Nil7aWYoZj09PTApYnJlYWsgdDtoPTA7ZG8gTj1vW2kraCsrXSxuLmhlYWQmJk4mJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoTikpO3doaWxlKE4mJmg8Zik7aWYobi5mbGFncyY1MTImJm4ud3JhcCY0JiYobi5jaGVjaz1BaShuLmNoZWNrLG8saCxpKSksZi09aCxpKz1oLE4pYnJlYWsgdH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5jb21tZW50PW51bGwpO24ubW9kZT1RMjtjYXNlIFEyOmlmKG4uZmxhZ3MmNTEyKXtmb3IoO2w8MTY7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1pZihuLndyYXAmNCYmYyE9PShuLmNoZWNrJjY1NTM1KSl7dC5tc2c9ImhlYWRlciBjcmMgbWlzbWF0Y2giLG4ubW9kZT1NbjticmVha31jPTAsbD0wfW4uaGVhZCYmKG4uaGVhZC5oY3JjPW4uZmxhZ3M+PjkmMSxuLmhlYWQuZG9uZT0hMCksdC5hZGxlcj1uLmNoZWNrPTAsbi5tb2RlPVdpO2JyZWFrO2Nhc2UgSjI6Zm9yKDtsPDMyOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9dC5hZGxlcj1uLmNoZWNrPXBTKGMpLGM9MCxsPTAsbi5tb2RlPXVtO2Nhc2UgdW06aWYobi5oYXZlZGljdD09PTApcmV0dXJuIHQubmV4dF9vdXQ9cyx0LmF2YWlsX291dD11LHQubmV4dF9pbj1pLHQuYXZhaWxfaW49ZixuLmhvbGQ9YyxuLmJpdHM9bCxDNjt0LmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9V2k7Y2FzZSBXaTppZihlPT09UzZ8fGU9PT1jbSlicmVhayB0O2Nhc2UgRmc6aWYobi5sYXN0KXtjPj4+PWwmNyxsLT1sJjcsbi5tb2RlPURnO2JyZWFrfWZvcig7bDwzOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9c3dpdGNoKG4ubGFzdD1jJjEsYz4+Pj0xLGwtPTEsYyYzKXtjYXNlIDA6bi5tb2RlPXRTO2JyZWFrO2Nhc2UgMTppZihENihuKSxuLm1vZGU9YW0sZT09PWNtKXtjPj4+PTIsbC09MjticmVhayB0fWJyZWFrO2Nhc2UgMjpuLm1vZGU9blM7YnJlYWs7Y2FzZSAzOnQubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLG4ubW9kZT1Nbn1jPj4+PTIsbC09MjticmVhaztjYXNlIHRTOmZvcihjPj4+PWwmNyxsLT1sJjc7bDwzMjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKChjJjY1NTM1KSE9PShjPj4+MTZeNjU1MzUpKXt0Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsbi5tb2RlPU1uO2JyZWFrfWlmKG4ubGVuZ3RoPWMmNjU1MzUsYz0wLGw9MCxuLm1vZGU9TGcsZT09PWNtKWJyZWFrIHQ7Y2FzZSBMZzpuLm1vZGU9ZVM7Y2FzZSBlUzppZihoPW4ubGVuZ3RoLGgpe2lmKGg+ZiYmKGg9ZiksaD51JiYoaD11KSxoPT09MClicmVhayB0O3Iuc2V0KG8uc3ViYXJyYXkoaSxpK2gpLHMpLGYtPWgsaSs9aCx1LT1oLHMrPWgsbi5sZW5ndGgtPWg7YnJlYWt9bi5tb2RlPVdpO2JyZWFrO2Nhc2UgblM6Zm9yKDtsPDE0Oyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9aWYobi5ubGVuPShjJjMxKSsyNTcsYz4+Pj01LGwtPTUsbi5uZGlzdD0oYyYzMSkrMSxjPj4+PTUsbC09NSxuLm5jb2RlPShjJjE1KSs0LGM+Pj49NCxsLT00LG4ubmxlbj4yODZ8fG4ubmRpc3Q+MzApe3QubXNnPSJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyIsbi5tb2RlPU1uO2JyZWFrfW4uaGF2ZT0wLG4ubW9kZT1vUztjYXNlIG9TOmZvcig7bi5oYXZlPG4ubmNvZGU7KXtmb3IoO2w8Mzspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fW4ubGVuc1tBW24uaGF2ZSsrXV09YyY3LGM+Pj49MyxsLT0zfWZvcig7bi5oYXZlPDE5OyluLmxlbnNbQVtuLmhhdmUrK11dPTA7aWYobi5sZW5jb2RlPW4ubGVuZHluLG4ubGVuYml0cz03LHY9e2JpdHM6bi5sZW5iaXRzfSxGPW11KFI2LG4ubGVucywwLDE5LG4ubGVuY29kZSwwLG4ud29yayx2KSxuLmxlbmJpdHM9di5iaXRzLEYpe3QubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLG4ubW9kZT1NbjticmVha31uLmhhdmU9MCxuLm1vZGU9clM7Y2FzZSByUzpmb3IoO24uaGF2ZTxuLm5sZW4rbi5uZGlzdDspe2Zvcig7Yj1uLmxlbmNvZGVbYyYoMTw8bi5sZW5iaXRzKS0xXSx3PWI+Pj4yNCxPPWI+Pj4xNiYyNTUsRT1iJjY1NTM1LCEodzw9bCk7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1pZihFPDE2KWM+Pj49dyxsLT13LG4ubGVuc1tuLmhhdmUrK109RTtlbHNle2lmKEU9PT0xNil7Zm9yKEI9dysyO2w8Qjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKGM+Pj49dyxsLT13LG4uaGF2ZT09PTApe3QubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixuLm1vZGU9TW47YnJlYWt9Tj1uLmxlbnNbbi5oYXZlLTFdLGg9MysoYyYzKSxjPj4+PTIsbC09Mn1lbHNlIGlmKEU9PT0xNyl7Zm9yKEI9dyszO2w8Qjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWM+Pj49dyxsLT13LE49MCxoPTMrKGMmNyksYz4+Pj0zLGwtPTN9ZWxzZXtmb3IoQj13Kzc7bDxCOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9Yz4+Pj13LGwtPXcsTj0wLGg9MTErKGMmMTI3KSxjPj4+PTcsbC09N31pZihuLmhhdmUraD5uLm5sZW4rbi5uZGlzdCl7dC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG4ubW9kZT1NbjticmVha31mb3IoO2gtLTspbi5sZW5zW24uaGF2ZSsrXT1OfX1pZihuLm1vZGU9PT1NbilicmVhaztpZihuLmxlbnNbMjU2XT09PTApe3QubXNnPSJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siLG4ubW9kZT1NbjticmVha31pZihuLmxlbmJpdHM9OSx2PXtiaXRzOm4ubGVuYml0c30sRj1tdShtUyxuLmxlbnMsMCxuLm5sZW4sbi5sZW5jb2RlLDAsbi53b3JrLHYpLG4ubGVuYml0cz12LmJpdHMsRil7dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsbi5tb2RlPU1uO2JyZWFrfWlmKG4uZGlzdGJpdHM9NixuLmRpc3Rjb2RlPW4uZGlzdGR5bix2PXtiaXRzOm4uZGlzdGJpdHN9LEY9bXUoaFMsbi5sZW5zLG4ubmxlbixuLm5kaXN0LG4uZGlzdGNvZGUsMCxuLndvcmssdiksbi5kaXN0Yml0cz12LmJpdHMsRil7dC5tc2c9ImludmFsaWQgZGlzdGFuY2VzIHNldCIsbi5tb2RlPU1uO2JyZWFrfWlmKG4ubW9kZT1hbSxlPT09Y20pYnJlYWsgdDtjYXNlIGFtOm4ubW9kZT1mbTtjYXNlIGZtOmlmKGY+PTYmJnU+PTI1OCl7dC5uZXh0X291dD1zLHQuYXZhaWxfb3V0PXUsdC5uZXh0X2luPWksdC5hdmFpbF9pbj1mLG4uaG9sZD1jLG4uYml0cz1sLEU2KHQsZCkscz10Lm5leHRfb3V0LHI9dC5vdXRwdXQsdT10LmF2YWlsX291dCxpPXQubmV4dF9pbixvPXQuaW5wdXQsZj10LmF2YWlsX2luLGM9bi5ob2xkLGw9bi5iaXRzLG4ubW9kZT09PVdpJiYobi5iYWNrPS0xKTticmVha31mb3Iobi5iYWNrPTA7Yj1uLmxlbmNvZGVbYyYoMTw8bi5sZW5iaXRzKS0xXSx3PWI+Pj4yNCxPPWI+Pj4xNiYyNTUsRT1iJjY1NTM1LCEodzw9bCk7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1pZihPJiYoTyYyNDApPT09MCl7Zm9yKFQ9dyx4PU8sTT1FO2I9bi5sZW5jb2RlW00rKChjJigxPDxUK3gpLTEpPj5UKV0sdz1iPj4+MjQsTz1iPj4+MTYmMjU1LEU9YiY2NTUzNSwhKFQrdzw9bCk7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1jPj4+PVQsbC09VCxuLmJhY2srPVR9aWYoYz4+Pj13LGwtPXcsbi5iYWNrKz13LG4ubGVuZ3RoPUUsTz09PTApe24ubW9kZT1mUzticmVha31pZihPJjMyKXtuLmJhY2s9LTEsbi5tb2RlPVdpO2JyZWFrfWlmKE8mNjQpe3QubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLG4ubW9kZT1NbjticmVha31uLmV4dHJhPU8mMTUsbi5tb2RlPWlTO2Nhc2UgaVM6aWYobi5leHRyYSl7Zm9yKEI9bi5leHRyYTtsPEI7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLmxlbmd0aCs9YyYoMTw8bi5leHRyYSktMSxjPj4+PW4uZXh0cmEsbC09bi5leHRyYSxuLmJhY2srPW4uZXh0cmF9bi53YXM9bi5sZW5ndGgsbi5tb2RlPXNTO2Nhc2Ugc1M6Zm9yKDtiPW4uZGlzdGNvZGVbYyYoMTw8bi5kaXN0Yml0cyktMV0sdz1iPj4+MjQsTz1iPj4+MTYmMjU1LEU9YiY2NTUzNSwhKHc8PWwpOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9aWYoKE8mMjQwKT09PTApe2ZvcihUPXcseD1PLE09RTtiPW4uZGlzdGNvZGVbTSsoKGMmKDE8PFQreCktMSk+PlQpXSx3PWI+Pj4yNCxPPWI+Pj4xNiYyNTUsRT1iJjY1NTM1LCEoVCt3PD1sKTspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWM+Pj49VCxsLT1ULG4uYmFjays9VH1pZihjPj4+PXcsbC09dyxuLmJhY2srPXcsTyY2NCl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsbi5tb2RlPU1uO2JyZWFrfW4ub2Zmc2V0PUUsbi5leHRyYT1PJjE1LG4ubW9kZT1jUztjYXNlIGNTOmlmKG4uZXh0cmEpe2ZvcihCPW4uZXh0cmE7bDxCOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9bi5vZmZzZXQrPWMmKDE8PG4uZXh0cmEpLTEsYz4+Pj1uLmV4dHJhLGwtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfWlmKG4ub2Zmc2V0Pm4uZG1heCl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixuLm1vZGU9TW47YnJlYWt9bi5tb2RlPWFTO2Nhc2UgYVM6aWYodT09PTApYnJlYWsgdDtpZihoPWQtdSxuLm9mZnNldD5oKXtpZihoPW4ub2Zmc2V0LWgsaD5uLndoYXZlJiZuLnNhbmUpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPU1uO2JyZWFrfWg+bi53bmV4dD8oaC09bi53bmV4dCxfPW4ud3NpemUtaCk6Xz1uLnduZXh0LWgsaD5uLmxlbmd0aCYmKGg9bi5sZW5ndGgpLGc9bi53aW5kb3d9ZWxzZSBnPXIsXz1zLW4ub2Zmc2V0LGg9bi5sZW5ndGg7aD51JiYoaD11KSx1LT1oLG4ubGVuZ3RoLT1oO2RvIHJbcysrXT1nW18rK107d2hpbGUoLS1oKTtuLmxlbmd0aD09PTAmJihuLm1vZGU9Zm0pO2JyZWFrO2Nhc2UgZlM6aWYodT09PTApYnJlYWsgdDtyW3MrK109bi5sZW5ndGgsdS0tLG4ubW9kZT1mbTticmVhaztjYXNlIERnOmlmKG4ud3JhcCl7Zm9yKDtsPDMyOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sY3w9b1tpKytdPDxsLGwrPTh9aWYoZC09dSx0LnRvdGFsX291dCs9ZCxuLnRvdGFsKz1kLG4ud3JhcCY0JiZkJiYodC5hZGxlcj1uLmNoZWNrPW4uZmxhZ3M/QWkobi5jaGVjayxyLGQscy1kKTprZyhuLmNoZWNrLHIsZCxzLWQpKSxkPXUsbi53cmFwJjQmJihuLmZsYWdzP2M6cFMoYykpIT09bi5jaGVjayl7dC5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixuLm1vZGU9TW47YnJlYWt9Yz0wLGw9MH1uLm1vZGU9dVM7Y2FzZSB1UzppZihuLndyYXAmJm4uZmxhZ3Mpe2Zvcig7bDwzMjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKG4ud3JhcCY0JiZjIT09KG4udG90YWwmNDI5NDk2NzI5NSkpe3QubXNnPSJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIixuLm1vZGU9TW47YnJlYWt9Yz0wLGw9MH1uLm1vZGU9bFM7Y2FzZSBsUzpGPXg2O2JyZWFrIHQ7Y2FzZSBNbjpGPV9TO2JyZWFrIHQ7Y2FzZSBWZzpyZXR1cm4gR2c7Y2FzZSB5UzpkZWZhdWx0OnJldHVybiBOcn1yZXR1cm4gdC5uZXh0X291dD1zLHQuYXZhaWxfb3V0PXUsdC5uZXh0X2luPWksdC5hdmFpbF9pbj1mLG4uaG9sZD1jLG4uYml0cz1sLChuLndzaXplfHxkIT09dC5hdmFpbF9vdXQmJm4ubW9kZTxNbiYmKG4ubW9kZTxEZ3x8ZSE9PWoyKSkmJlRTKHQsdC5vdXRwdXQsdC5uZXh0X291dCxkLXQuYXZhaWxfb3V0KT8obi5tb2RlPVZnLEdnKToocC09dC5hdmFpbF9pbixkLT10LmF2YWlsX291dCx0LnRvdGFsX2luKz1wLHQudG90YWxfb3V0Kz1kLG4udG90YWwrPWQsbi53cmFwJjQmJmQmJih0LmFkbGVyPW4uY2hlY2s9bi5mbGFncz9BaShuLmNoZWNrLHIsZCx0Lm5leHRfb3V0LWQpOmtnKG4uY2hlY2sscixkLHQubmV4dF9vdXQtZCkpLHQuZGF0YV90eXBlPW4uYml0cysobi5sYXN0PzY0OjApKyhuLm1vZGU9PT1XaT8xMjg6MCkrKG4ubW9kZT09PWFtfHxuLm1vZGU9PT1MZz8yNTY6MCksKHA9PT0wJiZkPT09MHx8ZT09PWoyKSYmRj09PXhjJiYoRj1QNiksRil9LFU2PXQ9PntpZihDYyh0KSlyZXR1cm4gTnI7bGV0IGU9dC5zdGF0ZTtyZXR1cm4gZS53aW5kb3cmJihlLndpbmRvdz1udWxsKSx0LnN0YXRlPW51bGwseGN9LGs2PSh0LGUpPT57aWYoQ2ModCkpcmV0dXJuIE5yO2xldCBuPXQuc3RhdGU7cmV0dXJuKG4ud3JhcCYyKT09PTA/TnI6KG4uaGVhZD1lLGUuZG9uZT0hMSx4Yyl9LEc2PSh0LGUpPT57bGV0IG49ZS5sZW5ndGgsbyxyLGk7cmV0dXJuIENjKHQpfHwobz10LnN0YXRlLG8ud3JhcCE9PTAmJm8ubW9kZSE9PXVtKT9OcjpvLm1vZGU9PT11bSYmKHI9MSxyPWtnKHIsZSxuLDApLHIhPT1vLmNoZWNrKT9fUzooaT1UUyh0LGUsbixuKSxpPyhvLm1vZGU9VmcsR2cpOihvLmhhdmVkaWN0PTEseGMpKX07JHIuZXhwb3J0cy5pbmZsYXRlUmVzZXQ9QVM7JHIuZXhwb3J0cy5pbmZsYXRlUmVzZXQyPWJTOyRyLmV4cG9ydHMuaW5mbGF0ZVJlc2V0S2VlcD1nUzskci5leHBvcnRzLmluZmxhdGVJbml0PUw2OyRyLmV4cG9ydHMuaW5mbGF0ZUluaXQyPXdTOyRyLmV4cG9ydHMuaW5mbGF0ZT1CNjskci5leHBvcnRzLmluZmxhdGVFbmQ9VTY7JHIuZXhwb3J0cy5pbmZsYXRlR2V0SGVhZGVyPWs2OyRyLmV4cG9ydHMuaW5mbGF0ZVNldERpY3Rpb25hcnk9RzY7JHIuZXhwb3J0cy5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9KTt2YXIgRVM9WW4oKFB1dCx6Zyk9PnsidXNlIHN0cmljdCI7dmFyIFY2PSh0LGUpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKTt6Zy5leHBvcnRzLmFzc2lnbj1mdW5jdGlvbih0KXtsZXQgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Zm9yKDtlLmxlbmd0aDspe2xldCBuPWUuc2hpZnQoKTtpZihuKXtpZih0eXBlb2YgbiE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcihuKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IobGV0IG8gaW4gbilWNihuLG8pJiYodFtvXT1uW29dKX19cmV0dXJuIHR9O3pnLmV4cG9ydHMuZmxhdHRlbkNodW5rcz10PT57bGV0IGU9MDtmb3IobGV0IG89MCxyPXQubGVuZ3RoO288cjtvKyspZSs9dFtvXS5sZW5ndGg7bGV0IG49bmV3IFVpbnQ4QXJyYXkoZSk7Zm9yKGxldCBvPTAscj0wLGk9dC5sZW5ndGg7bzxpO28rKyl7bGV0IHM9dFtvXTtuLnNldChzLHIpLHIrPXMubGVuZ3RofXJldHVybiBufX0pO3ZhciBTUz1ZbigoTXV0LHBtKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUlM9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7UlM9ITF9dmFyIGh1PW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKGxldCB0PTA7dDwyNTY7dCsrKWh1W3RdPXQ+PTI1Mj82OnQ+PTI0OD81OnQ+PTI0MD80OnQ+PTIyND8zOnQ+PTE5Mj8yOjE7aHVbMjU0XT1odVsyNTRdPTE7cG0uZXhwb3J0cy5zdHJpbmcyYnVmPXQ9PntpZih0eXBlb2YgVGV4dEVuY29kZXI9PSJmdW5jdGlvbiImJlRleHRFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUpcmV0dXJuIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KTtsZXQgZSxuLG8scixpLHM9dC5sZW5ndGgsZj0wO2ZvcihyPTA7cjxzO3IrKyluPXQuY2hhckNvZGVBdChyKSwobiY2NDUxMik9PT01NTI5NiYmcisxPHMmJihvPXQuY2hhckNvZGVBdChyKzEpLChvJjY0NTEyKT09PTU2MzIwJiYobj02NTUzNisobi01NTI5Njw8MTApKyhvLTU2MzIwKSxyKyspKSxmKz1uPDEyOD8xOm48MjA0OD8yOm48NjU1MzY/Mzo0O2ZvcihlPW5ldyBVaW50OEFycmF5KGYpLGk9MCxyPTA7aTxmO3IrKyluPXQuY2hhckNvZGVBdChyKSwobiY2NDUxMik9PT01NTI5NiYmcisxPHMmJihvPXQuY2hhckNvZGVBdChyKzEpLChvJjY0NTEyKT09PTU2MzIwJiYobj02NTUzNisobi01NTI5Njw8MTApKyhvLTU2MzIwKSxyKyspKSxuPDEyOD9lW2krK109bjpuPDIwNDg/KGVbaSsrXT0xOTJ8bj4+PjYsZVtpKytdPTEyOHxuJjYzKTpuPDY1NTM2PyhlW2krK109MjI0fG4+Pj4xMixlW2krK109MTI4fG4+Pj42JjYzLGVbaSsrXT0xMjh8biY2Myk6KGVbaSsrXT0yNDB8bj4+PjE4LGVbaSsrXT0xMjh8bj4+PjEyJjYzLGVbaSsrXT0xMjh8bj4+PjYmNjMsZVtpKytdPTEyOHxuJjYzKTtyZXR1cm4gZX07dmFyIHo2PSh0LGUpPT57aWYoZTw2NTUzNCYmdC5zdWJhcnJheSYmUlMpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0Lmxlbmd0aD09PWU/dDp0LnN1YmFycmF5KDAsZSkpO2xldCBuPSIiO2ZvcihsZXQgbz0wO288ZTtvKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W29dKTtyZXR1cm4gbn07cG0uZXhwb3J0cy5idWYyc3RyaW5nPSh0LGUpPT57bGV0IG49ZXx8dC5sZW5ndGg7aWYodHlwZW9mIFRleHREZWNvZGVyPT0iZnVuY3Rpb24iJiZUZXh0RGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlKXJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodC5zdWJhcnJheSgwLGUpKTtsZXQgbyxyLGk9bmV3IEFycmF5KG4qMik7Zm9yKHI9MCxvPTA7bzxuOyl7bGV0IHM9dFtvKytdO2lmKHM8MTI4KXtpW3IrK109cztjb250aW51ZX1sZXQgZj1odVtzXTtpZihmPjQpe2lbcisrXT02NTUzMyxvKz1mLTE7Y29udGludWV9Zm9yKHMmPWY9PT0yPzMxOmY9PT0zPzE1Ojc7Zj4xJiZvPG47KXM9czw8Nnx0W28rK10mNjMsZi0tO2lmKGY+MSl7aVtyKytdPTY1NTMzO2NvbnRpbnVlfXM8NjU1MzY/aVtyKytdPXM6KHMtPTY1NTM2LGlbcisrXT01NTI5NnxzPj4xMCYxMDIzLGlbcisrXT01NjMyMHxzJjEwMjMpfXJldHVybiB6NihpLHIpfTtwbS5leHBvcnRzLnV0Zjhib3JkZXI9KHQsZSk9PntlPWV8fHQubGVuZ3RoLGU+dC5sZW5ndGgmJihlPXQubGVuZ3RoKTtsZXQgbj1lLTE7Zm9yKDtuPj0wJiYodFtuXSYxOTIpPT09MTI4OyluLS07cmV0dXJuIG48MHx8bj09PTA/ZTpuK2h1W3Rbbl1dPmU/bjplfX0pO3ZhciBDUz1ZbigoTnV0LHhTKT0+eyJ1c2Ugc3RyaWN0Ijt4Uy5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19KTt2YXIgTVM9WW4oKEl1dCxQUyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gajYoKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfVBTLmV4cG9ydHM9ajZ9KTt2YXIgSVM9WW4oKHZ1dCxOUyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSDYoKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX1OUy5leHBvcnRzPUg2fSk7dmFyIERTPVluKChGdXQsVmEpPT57InVzZSBzdHJpY3QiO3ZhciBYaT1PUygpLEZTPUVTKCkscWc9U1MoKSxLZz1DUygpLHE2PU1TKCksSzY9SVMoKSxMUz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHtaX05PX0ZMVVNIOlc2LFpfRklOSVNIOlg2LFpfT0s6X3UsWl9TVFJFQU1fRU5EOmpnLFpfTkVFRF9ESUNUOkhnLFpfU1RSRUFNX0VSUk9SOlk2LFpfREFUQV9FUlJPUjp2UyxaX01FTV9FUlJPUjokNn09c20oKTtmdW5jdGlvbiB5dSh0KXt0aGlzLm9wdGlvbnM9RlMuYXNzaWduKHtjaHVua1NpemU6MTAyNCo2NCx3aW5kb3dCaXRzOjE1LHRvOiIifSx0fHx7fSk7bGV0IGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNiYmKGUud2luZG93Qml0cz0tZS53aW5kb3dCaXRzLGUud2luZG93Qml0cz09PTAmJihlLndpbmRvd0JpdHM9LTE1KSksZS53aW5kb3dCaXRzPj0wJiZlLndpbmRvd0JpdHM8MTYmJiEodCYmdC53aW5kb3dCaXRzKSYmKGUud2luZG93Qml0cys9MzIpLGUud2luZG93Qml0cz4xNSYmZS53aW5kb3dCaXRzPDQ4JiYoZS53aW5kb3dCaXRzJjE1KT09PTAmJihlLndpbmRvd0JpdHN8PTE1KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBxNix0aGlzLnN0cm0uYXZhaWxfb3V0PTA7bGV0IG49WGkuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSxlLndpbmRvd0JpdHMpO2lmKG4hPT1fdSl0aHJvdyBuZXcgRXJyb3IoS2dbbl0pO2lmKHRoaXMuaGVhZGVyPW5ldyBLNixYaS5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSx0aGlzLmhlYWRlciksZS5kaWN0aW9uYXJ5JiYodHlwZW9mIGUuZGljdGlvbmFyeT09InN0cmluZyI/ZS5kaWN0aW9uYXJ5PXFnLnN0cmluZzJidWYoZS5kaWN0aW9uYXJ5KTpMUy5jYWxsKGUuZGljdGlvbmFyeSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iJiYoZS5kaWN0aW9uYXJ5PW5ldyBVaW50OEFycmF5KGUuZGljdGlvbmFyeSkpLGUucmF3JiYobj1YaS5pbmZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sZS5kaWN0aW9uYXJ5KSxuIT09X3UpKSl0aHJvdyBuZXcgRXJyb3IoS2dbbl0pfXl1LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5zdHJtLG89dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxyPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LGkscyxmO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7Zm9yKGU9PT1+fmU/cz1lOnM9ZT09PSEwP1g2Olc2LExTLmNhbGwodCk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP24uaW5wdXQ9bmV3IFVpbnQ4QXJyYXkodCk6bi5pbnB1dD10LG4ubmV4dF9pbj0wLG4uYXZhaWxfaW49bi5pbnB1dC5sZW5ndGg7Oyl7Zm9yKG4uYXZhaWxfb3V0PT09MCYmKG4ub3V0cHV0PW5ldyBVaW50OEFycmF5KG8pLG4ubmV4dF9vdXQ9MCxuLmF2YWlsX291dD1vKSxpPVhpLmluZmxhdGUobixzKSxpPT09SGcmJnImJihpPVhpLmluZmxhdGVTZXREaWN0aW9uYXJ5KG4sciksaT09PV91P2k9WGkuaW5mbGF0ZShuLHMpOmk9PT12UyYmKGk9SGcpKTtuLmF2YWlsX2luPjAmJmk9PT1qZyYmbi5zdGF0ZS53cmFwPjAmJnRbbi5uZXh0X2luXSE9PTA7KVhpLmluZmxhdGVSZXNldChuKSxpPVhpLmluZmxhdGUobixzKTtzd2l0Y2goaSl7Y2FzZSBZNjpjYXNlIHZTOmNhc2UgSGc6Y2FzZSAkNjpyZXR1cm4gdGhpcy5vbkVuZChpKSx0aGlzLmVuZGVkPSEwLCExfWlmKGY9bi5hdmFpbF9vdXQsbi5uZXh0X291dCYmKG4uYXZhaWxfb3V0PT09MHx8aT09PWpnKSlpZih0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIil7bGV0IHU9cWcudXRmOGJvcmRlcihuLm91dHB1dCxuLm5leHRfb3V0KSxjPW4ubmV4dF9vdXQtdSxsPXFnLmJ1ZjJzdHJpbmcobi5vdXRwdXQsdSk7bi5uZXh0X291dD1jLG4uYXZhaWxfb3V0PW8tYyxjJiZuLm91dHB1dC5zZXQobi5vdXRwdXQuc3ViYXJyYXkodSx1K2MpLDApLHRoaXMub25EYXRhKGwpfWVsc2UgdGhpcy5vbkRhdGEobi5vdXRwdXQubGVuZ3RoPT09bi5uZXh0X291dD9uLm91dHB1dDpuLm91dHB1dC5zdWJhcnJheSgwLG4ubmV4dF9vdXQpKTtpZighKGk9PT1fdSYmZj09PTApKXtpZihpPT09amcpcmV0dXJuIGk9WGkuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoaSksdGhpcy5lbmRlZD0hMCwhMDtpZihuLmF2YWlsX2luPT09MClicmVha319cmV0dXJuITB9O3l1LnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24odCl7dGhpcy5jaHVua3MucHVzaCh0KX07eXUucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKHQpe3Q9PT1fdSYmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PUZTLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj10LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9O2Z1bmN0aW9uIFdnKHQsZSl7bGV0IG49bmV3IHl1KGUpO2lmKG4ucHVzaCh0KSxuLmVycil0aHJvdyBuLm1zZ3x8S2dbbi5lcnJdO3JldHVybiBuLnJlc3VsdH1mdW5jdGlvbiBaNih0LGUpe3JldHVybiBlPWV8fHt9LGUucmF3PSEwLFdnKHQsZSl9VmEuZXhwb3J0cy5JbmZsYXRlPXl1O1ZhLmV4cG9ydHMuaW5mbGF0ZT1XZztWYS5leHBvcnRzLmluZmxhdGVSYXc9WjY7VmEuZXhwb3J0cy51bmd6aXA9V2c7VmEuZXhwb3J0cy5jb25zdGFudHM9c20oKX0pO3ZhciBYZz17fTtsZShYZyx7ZGVmYXVsdDooKT0+czh9KTtmdW5jdGlvbiBRNih0LGUpe2xldCBuPU5zLmZyb21TdHJpbmcodC50eXBlKSxvPXQuYnVmZmVyO0MyKHQua2V5LG8pO2xldCByPWk4KG8pO289ci5idWZmZXI7bGV0IGk9ci5sZW5ndGg7c3dpdGNoKG4pe2Nhc2UgTnMuTUVUQURBVEE6cmV0dXJuIHQ4KG8saSx0LnF1YWRLZXkpO2Nhc2UgTnMuVEVSUkFJTjpyZXR1cm4gbzgobyxpLGUpO2Nhc2UgTnMuREJST09UOnJldHVybiBlLnB1c2gobykse2J1ZmZlcjpvfX19ZnVuY3Rpb24gdDgodCxlLG4pe2xldCBvPW5ldyBEYXRhVmlldyh0KSxyPTAsaT1vLmdldFVpbnQzMihyLCEwKTtpZihyKz1qYSxpIT09SjYpdGhyb3cgbmV3IEFlKCJJbnZhbGlkIG1hZ2ljIik7bGV0IHM9by5nZXRVaW50MzIociwhMCk7aWYocis9amEscyE9PTEpdGhyb3cgbmV3IEFlKCJJbnZhbGlkIGRhdGEgdHlwZS4gTXVzdCBiZSAxIGZvciBRdWFkVHJlZVBhY2tldCIpO2xldCBmPW8uZ2V0VWludDMyKHIsITApO2lmKHIrPWphLGYhPT0yKXRocm93IG5ldyBBZSgiSW52YWxpZCBRdWFkVHJlZVBhY2tldCB2ZXJzaW9uLiBPbmx5IHZlcnNpb24gMiBpcyBzdXBwb3J0ZWQuIik7bGV0IHU9by5nZXRJbnQzMihyLCEwKTtyKz1QYztsZXQgYz1vLmdldEludDMyKHIsITApO2lmKHIrPVBjLGMhPT0zMil0aHJvdyBuZXcgQWUoIkludmFsaWQgaW5zdGFuY2Ugc2l6ZS4iKTtsZXQgbD1vLmdldEludDMyKHIsITApO3IrPVBjO2xldCBwPW8uZ2V0SW50MzIociwhMCk7cis9UGM7bGV0IGQ9by5nZXRJbnQzMihyLCEwKTtpZihyKz1QYyxsIT09dSpjK3IpdGhyb3cgbmV3IEFlKCJJbnZhbGlkIGRhdGFCdWZmZXJPZmZzZXQiKTtpZihsK3ArZCE9PWUpdGhyb3cgbmV3IEFlKCJJbnZhbGlkIHBhY2tldCBvZmZzZXRzIik7bGV0IGg9W107Zm9yKGxldCBFPTA7RTx1OysrRSl7bGV0IFQ9by5nZXRVaW50OChyKTsrK3IsKytyO2xldCB4PW8uZ2V0VWludDE2KHIsITApO3IrPXphO2xldCBNPW8uZ2V0VWludDE2KHIsITApO3IrPXphO2xldCBOPW8uZ2V0VWludDE2KHIsITApO3IrPXphLHIrPXphLHIrPXphLHIrPVBjLHIrPVBjLHIrPTg7bGV0IEY9by5nZXRVaW50OChyKyspLEk9by5nZXRVaW50OChyKyspO3IrPXphLGgucHVzaChuZXcgSTIoVCx4LE0sTixGLEkpKX1sZXQgXz1bXSxnPTA7ZnVuY3Rpb24gYihFLFQseCl7bGV0IE09ITE7aWYoeD09PTQpe2lmKFQuaGFzU3VidHJlZSgpKXJldHVybjtNPSEwfWZvcihsZXQgTj0wO048NDsrK04pe2xldCBGPUUrTi50b1N0cmluZygpO2lmKE0pX1tGXT1udWxsO2Vsc2UgaWYoeDw0KWlmKCFULmhhc0NoaWxkKE4pKV9bRl09bnVsbDtlbHNle2lmKGc9PT11KXtjb25zb2xlLmxvZygiSW5jb3JyZWN0IG51bWJlciBvZiBpbnN0YW5jZXMiKTtyZXR1cm59bGV0IEk9aFtnKytdO19bRl09SSxiKEYsSSx4KzEpfX19bGV0IHc9MCxPPWhbZysrXTtyZXR1cm4gbj09PSIiPysrdzpfW25dPU8sYihuLE8sdyksX31mdW5jdGlvbiBvOCh0LGUsbil7bGV0IG89bmV3IERhdGFWaWV3KHQpLHI9ZnVuY3Rpb24oZil7Zm9yKGxldCB1PTA7dTxuODsrK3Upe2xldCBjPW8uZ2V0VWludDMyKGYsITApO2lmKGYrPWphLGYrPWMsZj5lKXRocm93IG5ldyBBZSgiTWFsZm9ybWVkIHRlcnJhaW4gcGFja2V0IGZvdW5kLiIpfXJldHVybiBmfSxpPTAscz1bXTtmb3IoO3MubGVuZ3RoPGU4Oyl7bGV0IGY9aTtpPXIoaSk7bGV0IHU9dC5zbGljZShmLGkpO24ucHVzaCh1KSxzLnB1c2godSl9cmV0dXJuIHN9ZnVuY3Rpb24gaTgodCl7bGV0IGU9bmV3IERhdGFWaWV3KHQpLG49MCxvPWUuZ2V0VWludDMyKG4sITApO2lmKG4rPWphLG8hPT1CUyYmbyE9PXI4KXRocm93IG5ldyBBZSgiSW52YWxpZCBtYWdpYyIpO2xldCByPWUuZ2V0VWludDMyKG4sbz09PUJTKTtuKz1qYTtsZXQgaT1uZXcgVWludDhBcnJheSh0LG4pLHM9VVMuZGVmYXVsdC5pbmZsYXRlKGkpO2lmKHMubGVuZ3RoIT09cil0aHJvdyBuZXcgQWUoIlNpemUgb2YgcGFja2V0IGRvZXNuJ3QgbWF0Y2ggaGVhZGVyIik7cmV0dXJuIHN9dmFyIFVTLHphLFBjLGphLE5zLEo2LGU4LG44LEJTLHI4LHM4LFlnPSQoKCk9PntQMigpO3YyKCk7dGkoKTtVUz1tcihEUygpLDEpO1puKCk7emE9VWludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQsUGM9SW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxqYT1VaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxOcz17TUVUQURBVEE6MCxURVJSQUlOOjEsREJST09UOjJ9O05zLmZyb21TdHJpbmc9ZnVuY3Rpb24odCl7aWYodD09PSJNZXRhZGF0YSIpcmV0dXJuIE5zLk1FVEFEQVRBO2lmKHQ9PT0iVGVycmFpbiIpcmV0dXJuIE5zLlRFUlJBSU47aWYodD09PSJEYlJvb3QiKXJldHVybiBOcy5EQlJPT1R9O0o2PTMyMzAxO2U4PTUsbjg9NDtCUz0xOTUzMDI5ODA1LHI4PTI5MTcwMzQxMDA7czg9VWUoUTYpfSk7ZnVuY3Rpb24gYzgodCl7cmV0dXJuIHkuZGVmaW5lZCgidmFsdWUiLHQpLHQ8PS4wNDA0NT90Ki4wNzczOTkzODA4MDQ5NTM1NzpNYXRoLnBvdygodCsuMDU1KSouOTQ3ODY3Mjk4NTc4MTk5MSwyLjQpfXZhciBkbSxrUz0kKCgpPT57V3QoKTtkbT1jOH0pO3ZhciBKZz17fTtsZShKZyx7ZGVmYXVsdDooKT0+djh9KTtmdW5jdGlvbiBhOCh0LGUsbixvLHIsaSl7bGV0IHM9biooMS10KStvKnQsZj1yKigxLXQpK2kqdDtyZXR1cm4gcyooMS1lKStmKmV9ZnVuY3Rpb24gbW0odCxlLG4sbyl7bGV0IHI9dCtlKm47cmV0dXJuIG9bcl19ZnVuY3Rpb24gZjgodCxlLG4pe2xldCBvPW4ubmF0aXZlRXh0ZW50LHI9KHQtby53ZXN0KS8oby5lYXN0LW8ud2VzdCkqKG4ud2lkdGgtMSksaT0oZS1vLnNvdXRoKS8oby5ub3J0aC1vLnNvdXRoKSoobi5oZWlnaHQtMSkscz1NYXRoLmZsb29yKHIpLGY9TWF0aC5mbG9vcihpKTtyLT1zLGktPWY7bGV0IHU9czxuLndpZHRoP3MrMTpzLGM9ZjxuLmhlaWdodD9mKzE6ZjtmPW4uaGVpZ2h0LTEtZixjPW4uaGVpZ2h0LTEtYztsZXQgbD1tbShzLGYsbi53aWR0aCxuLmJ1ZmZlcikscD1tbSh1LGYsbi53aWR0aCxuLmJ1ZmZlciksZD1tbShzLGMsbi53aWR0aCxuLmJ1ZmZlciksaD1tbSh1LGMsbi53aWR0aCxuLmJ1ZmZlciksXz1hOChyLGksbCxwLGQsaCk7cmV0dXJuIF89XypuLnNjYWxlK24ub2Zmc2V0LF99ZnVuY3Rpb24gR1ModCxlLG4pe2ZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKXtsZXQgcj1uW29dLm5hdGl2ZUV4dGVudCxpPW5ldyBhO2lmKG5bb10ucHJvamVjdGlvblR5cGU9PT0iV2ViTWVyY2F0b3IiKXtsZXQgcz1uW29dLnByb2plY3Rpb24uX2VsbGlwc29pZC5fcmFkaWk7aT1uZXcgcm8obmV3IFkocy54LHMueSxzLnopKS5wcm9qZWN0KG5ldyBjdCh0LGUsMCkpfWVsc2UgaS54PXQsaS55PWU7aWYoaS54PnIud2VzdCYmaS54PHIuZWFzdCYmaS55PnIuc291dGgmJmkueTxyLm5vcnRoKXJldHVybiBmOChpLngsaS55LG5bb10pfXJldHVybiAwfWZ1bmN0aW9uIHU4KHQsZSxuLG8scixpLHMpe2lmKHMpcmV0dXJuO2xldCBmPUdTKHIubG9uZ2l0dWRlLHIubGF0aXR1ZGUsaSk7Zm9yKGxldCB1PTA7dTx0OysrdSl7bGV0IGM9R1Moci5sb25naXR1ZGUrUC50b1JhZGlhbnMobiplW3UqM10pLHIubGF0aXR1ZGUrUC50b1JhZGlhbnMobyplW3UqMysxXSksaSk7ZVt1KjMrMl0rPWMtZn19ZnVuY3Rpb24gbDgodCxlLG4sbyxyLGkscyxmLHUpe2lmKHQ9PT0wfHwhbShlKXx8ZS5sZW5ndGg9PT0wKXJldHVybjtsZXQgYz1uZXcgWShNYXRoLnNxcnQocy54KSxNYXRoLnNxcnQocy55KSxNYXRoLnNxcnQocy56KSk7Zm9yKGxldCBsPTA7bDx0OysrbCl7bGV0IHA9bCozLGQ9cCsxLGg9cCsyLF89bmV3IGN0O18ubG9uZ2l0dWRlPW8ubG9uZ2l0dWRlK1AudG9SYWRpYW5zKGYqZVtwXSksXy5sYXRpdHVkZT1vLmxhdGl0dWRlK1AudG9SYWRpYW5zKHUqZVtkXSksXy5oZWlnaHQ9by5oZWlnaHQrZVtoXTtsZXQgZz17fTtjLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKF8sZyksZy54LT1yLngsZy55LT1yLnksZy56LT1yLno7bGV0IGI9e307aWYoWi5tdWx0aXBseUJ5VmVjdG9yKGksZyxiKSxlW3BdPWIueCxlW2RdPWIueSxlW2hdPWIueixtKG4pKXtsZXQgdz1uZXcgYShuW3BdLG5bZF0sbltoXSksTz17fTtaLm11bHRpcGx5QnlWZWN0b3IoaSx3LE8pLG5bcF09Ty54LG5bZF09Ty55LG5baF09Ty56fX19ZnVuY3Rpb24gcDgodCxlLG4pe2ZvcihsZXQgbz0wO288dDsrK28pe2xldCByPW5bbyo0XS82NTUzNSxpPW5bbyo0KzFdLzY1NTM1LHM9KG5bbyo0KzJdLW5bbyo0XSkvNjU1MzUsZj0obltvKjQrM10tbltvKjQrMV0pLzY1NTM1O2VbbyoyXSo9cyxlW28qMl0rPXIsZVtvKjIrMV0qPWYsZVtvKjIrMV0rPWl9fWZ1bmN0aW9uIGQ4KHQsZSxuLG8pe2xldCByPW5ldyBVaW50MzJBcnJheSh0KSxpPW0oZSk/Zj0+ZVtmXTpmPT5mLHM9MDtpZihvJiZtKG4pKXtsZXQgZj11PT5uW2kodSkqNCszXTwyNTU7Zm9yKGxldCB1PTA7dTx0O3UrPTMpIWYodSkmJiFmKHUrMSkmJiFmKHUrMikmJihyW3MrK109aSh1KSxyW3MrK109aSh1KzEpLHJbcysrXT1pKHUrMikpO2lmKHM+MCl7bGV0IHU9cztmb3IobGV0IGM9MDtjPHQ7Yys9MykoZihjKXx8ZihjKzEpfHxmKGMrMikpJiYoclt1KytdPWkoYyksclt1KytdPWkoYysxKSxyW3UrK109aShjKzIpKX1lbHNlIGZvcihsZXQgdT0wO3U8dDsrK3Upclt1XT1pKHUpfWVsc2V7cz10O2ZvcihsZXQgZj0wO2Y8dDsrK2YpcltmXT1pKGYpfXJldHVybntpbmRleEFycmF5OnIsdHJhbnNwYXJlbnRWZXJ0ZXhPZmZzZXQ6c319ZnVuY3Rpb24gbTgodCxlLG4pe2xldCBvPWVbbl07aWYobShvKSlyZXR1cm4gbztsZXQgcj1lW25dPXtwb3NpdGlvbnM6e30saW5kaWNlczp7fSxlZGdlczp7fX0saT10W25dPz90LmRlZmF1bHQ7cmV0dXJuIHIuaGFzT3V0bGluZT1tKGk/LmVkZ2VzKSxyfWZ1bmN0aW9uIGg4KHQsZSxuLG8pe2lmKCFtKHRbbl0pKXtsZXQgcj1uKjMsaT1lO2ZvcihsZXQgcz0wO3M8MztzKyspe2xldCBmPW9bcitzXTttKGlbZl0pfHwoaVtmXT17fSksaT1pW2ZdfW0oaS5pbmRleCl8fChpLmluZGV4PW4pLHRbbl09aS5pbmRleH19ZnVuY3Rpb24gXzgodCxlLG4sbyxyLGkpe2xldCBzLGY7bzxyPyhzPW8sZj1yKToocz1yLGY9byk7bGV0IHU9dFtzXTttKHUpfHwodT10W3NdPXt9KTtsZXQgYz11W2ZdO20oYyl8fChjPXVbZl09e25vcm1hbHNJbmRleDpbXSxvdXRsaW5lczpbXX0pLGMubm9ybWFsc0luZGV4LnB1c2goaSksKGMub3V0bGluZXMubGVuZ3RoPT09MHx8ZSE9PW98fG4hPT1yKSYmYy5vdXRsaW5lcy5wdXNoKGUsbil9ZnVuY3Rpb24geTgodCxlLG4sbyl7bGV0IHI9W107Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKz0zKXtsZXQgcz1tKGUpP2VbbltpXV06ImRlZmF1bHQiLGY9bTgodCxyLHMpO2lmKCFmLmhhc091dGxpbmUpY29udGludWU7bGV0IHU9Zi5pbmRpY2VzLGM9Zi5wb3NpdGlvbnM7Zm9yKGxldCBwPTA7cDwzO3ArKyl7bGV0IGQ9bltpK3BdO2g4KHUsYyxkLG8pfWxldCBsPWYuZWRnZXM7Zm9yKGxldCBwPTA7cDwzO3ArKyl7bGV0IGQ9bltpK3BdLGg9bltpKyhwKzEpJTNdLF89dVtkXSxnPXVbaF07XzgobCxkLGgsXyxnLGkpfX1yZXR1cm4gcn1mdW5jdGlvbiBWUyh0LGUsbixvKXtsZXQgcj1uW2VdKjMsaT1uW2UrMV0qMyxzPW5bZSsyXSozO2EuZnJvbUFycmF5KG8scixiaSksYS5mcm9tQXJyYXkobyxpLGhtKSxhLmZyb21BcnJheShvLHMsX20pLGEuc3VidHJhY3QoaG0sYmksaG0pLGEuc3VidHJhY3QoX20sYmksX20pLGEuY3Jvc3MoaG0sX20sYmkpO2xldCBmPWEubWFnbml0dWRlKGJpKTtmIT09MCYmYS5kaXZpZGVCeVNjYWxhcihiaSxmLGJpKTtsZXQgdT1lKjMsYz0oZSsxKSozLGw9KGUrMikqMzthLnBhY2soYmksdCx1KSxhLnBhY2soYmksdCxjKSxhLnBhY2soYmksdCxsKX1mdW5jdGlvbiBnOCh0LGUsbil7YS5mcm9tQXJyYXkodCxlLHltKSxhLmZyb21BcnJheSh0LG4sJGcpO2xldCBvPWEuZG90KHltLCRnKSxyPWEubWFnbml0dWRlKGEuY3Jvc3MoeW0sJGcseW0pKTtyZXR1cm4gTWF0aC5hdGFuMihyLG8pPC4yNX1mdW5jdGlvbiBBOCh0LGUsbixvLHIpe2lmKGUubm9ybWFsc0luZGV4Lmxlbmd0aD4xKXtsZXQgaT1vLmxlbmd0aD09PXIubGVuZ3RoO2ZvcihsZXQgcz0wO3M8ZS5ub3JtYWxzSW5kZXgubGVuZ3RoO3MrKyl7bGV0IGY9ZS5ub3JtYWxzSW5kZXhbc107aWYobShyW2YqM10pfHxWUyhyLGYsbixvKSxzIT09MClmb3IobGV0IHU9MDt1PHM7dSsrKXtsZXQgYz1lLm5vcm1hbHNJbmRleFt1XSxsPWk/bltmXSozOmYqMyxwPWk/bltjXSozOmMqMztpZihnOChyLGwscCkpcmV0dXJufX19dC5wdXNoKC4uLmUub3V0bGluZXMpfWZ1bmN0aW9uIGI4KHQsZSxuLG8scil7bGV0IGk9T2JqZWN0LmtleXMoZSk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspe2xldCBmPWVbaVtzXV0sdT1PYmplY3Qua2V5cyhmKTtmb3IobGV0IGM9MDtjPHUubGVuZ3RoO2MrKyl7bGV0IGw9Zlt1W2NdXTtBOCh0LGwsbixvLHIpfX19ZnVuY3Rpb24gdzgodCxlLG4sbyl7bGV0IHI9W10saT1PYmplY3Qua2V5cyh0KTtmb3IobGV0IHM9MDtzPGkubGVuZ3RoO3MrKyl7bGV0IGY9dFtpW3NdXS5lZGdlcztiOChyLGYsZSxuLG8pfXJldHVybiByfWZ1bmN0aW9uIFQ4KHQsZSxuLG8scil7aWYoIW0odCl8fE9iamVjdC5rZXlzKHQpLmxlbmd0aD09PTApcmV0dXJuO2xldCBpPXk4KHQsZSxuLG8pOyghbShyKXx8bi5sZW5ndGgqMyE9PXIubGVuZ3RoKSYmKHI9W10pO2xldCBzPXc4KGksbixvLHIpO3JldHVybiBzLmxlbmd0aD4wP25ldyBVaW50MzJBcnJheShzKTp2b2lkIDB9ZnVuY3Rpb24gTzgodCl7bGV0IGU9bmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKz00KWVbbl09ZG0obmUuYnl0ZVRvRmxvYXQodFtuXSkpLGVbbisxXT1kbShuZS5ieXRlVG9GbG9hdCh0W24rMV0pKSxlW24rMl09ZG0obmUuYnl0ZVRvRmxvYXQodFtuKzJdKSksZVtuKzNdPW5lLmJ5dGVUb0Zsb2F0KHRbbiszXSk7cmV0dXJuIGV9ZnVuY3Rpb24gRTgodCxlLG4sbyxyLGkscyl7bGV0IGY9e25vcm1hbHM6dm9pZCAwLHBvc2l0aW9uczp2b2lkIDAsdXYwczp2b2lkIDAsY29sb3JzOnZvaWQgMCxmZWF0dXJlSW5kZXg6dm9pZCAwLHZlcnRleENvdW50OnZvaWQgMH07aWYodD09PTB8fCFtKG4pfHxuLmxlbmd0aD09PTB8fG0obykpcmV0dXJuIGY7aWYobShlKSl7Zi52ZXJ0ZXhDb3VudD1lLmxlbmd0aCxmLnBvc2l0aW9ucz1uZXcgRmxvYXQzMkFycmF5KGUubGVuZ3RoKjMpLGYudXYwcz1tKHIpP25ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgqMik6dm9pZCAwLGYuY29sb3JzPW0oaSk/bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgqNCk6dm9pZCAwLGYuZmVhdHVyZUluZGV4PW0ocyk/bmV3IEFycmF5KGUubGVuZ3RoKTp2b2lkIDA7Zm9yKGxldCB1PTA7dTxlLmxlbmd0aDt1Kyspe2xldCBjPWVbdV07Zi5wb3NpdGlvbnNbdSozXT1uW2MqM10sZi5wb3NpdGlvbnNbdSozKzFdPW5bYyozKzFdLGYucG9zaXRpb25zW3UqMysyXT1uW2MqMysyXSxtKGYudXYwcykmJihmLnV2MHNbdSoyXT1yW2MqMl0sZi51djBzW3UqMisxXT1yW2MqMisxXSksbShmLmNvbG9ycykmJihmLmNvbG9yc1t1KjRdPWlbYyo0XSxmLmNvbG9yc1t1KjQrMV09aVtjKjQrMV0sZi5jb2xvcnNbdSo0KzJdPWlbYyo0KzJdLGYuY29sb3JzW3UqNCszXT1pW2MqNCszXSksbShmLmZlYXR1cmVJbmRleCkmJihmLmZlYXR1cmVJbmRleFt1XT1zW2NdKX10PWUubGVuZ3RoLG49Zi5wb3NpdGlvbnN9ZT1uZXcgQXJyYXkodCk7Zm9yKGxldCB1PTA7dTx0O3UrKyllW3VdPXU7Zi5ub3JtYWxzPW5ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgqMyk7Zm9yKGxldCB1PTA7dTxlLmxlbmd0aDt1Kz0zKVZTKGYubm9ybWFscyx1LGUsbik7cmV0dXJuIGZ9ZnVuY3Rpb24gUjgodCxlLG4sbyxyLGkscyxmKXtpZih0PT09MHx8IW0obil8fG4ubGVuZ3RoPT09MClyZXR1cm57YnVmZmVyczpbXSxidWZmZXJWaWV3czpbXSxhY2Nlc3NvcnM6W10sbWVzaGVzOltdLG5vZGVzOltdLG5vZGVzSW5TY2VuZTpbXX07bGV0IHU9W10sYz1bXSxsPVtdLHA9W10sZD1bXSxoPVtdLF89e30sZz1bXTttKGUpJiYodD1lLmxlbmd0aCk7bGV0e2luZGV4QXJyYXk6Yix0cmFuc3BhcmVudFZlcnRleE9mZnNldDp3fT1kOCh0LGUsaSxmLnNwbGl0R2VvbWV0cnlCeUNvbG9yVHJhbnNwYXJlbmN5KSxPPW5ldyBCbG9iKFtiXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pLEU9VVJMLmNyZWF0ZU9iamVjdFVSTChPKSxUPXQseD1mLmVuYWJsZUZlYXR1cmVzJiZtKHMpP25ldyBGbG9hdDMyQXJyYXkocy5sZW5ndGgpOnZvaWQgMCxNPTA7aWYobSh4KSlmb3IobGV0IHJ0PTA7cnQ8cy5sZW5ndGg7KytydCl7eFtydF09c1tydF07bGV0IHh0PXNbcnRdKzE7TTx4dCYmKE09eHQpfWxldCBOLEY9VDgoZi5zeW1ib2xvZ3lEYXRhLHMsYixuLG8pO2lmKG0oRikpe2xldCBydD1uZXcgQmxvYihbRl0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtOPVVSTC5jcmVhdGVPYmplY3RVUkwocnQpfWxldCBJPW4uc3ViYXJyYXkoMCxUKjMpLHY9bmV3IEJsb2IoW0ldLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSksQj1VUkwuY3JlYXRlT2JqZWN0VVJMKHYpLEE9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFM9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLEM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEw9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHo9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGo9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2ZvcihsZXQgcnQ9MDtydDxJLmxlbmd0aC8zO3J0KyspQT1NYXRoLm1pbihBLElbcnQqMyswXSksUz1NYXRoLm1heChTLElbcnQqMyswXSksQz1NYXRoLm1pbihDLElbcnQqMysxXSksTD1NYXRoLm1heChMLElbcnQqMysxXSksej1NYXRoLm1pbih6LElbcnQqMysyXSksaj1NYXRoLm1heChqLElbcnQqMysyXSk7bGV0IGs9bz9vLnN1YmFycmF5KDAsVCozKTp2b2lkIDAscTtpZihtKGspKXtsZXQgcnQ9bmV3IEJsb2IoW2tdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSk7cT1VUkwuY3JlYXRlT2JqZWN0VVJMKHJ0KX1sZXQgVz1yP3Iuc3ViYXJyYXkoMCxUKjIpOnZvaWQgMCxSO2lmKG0oVykpe2xldCBydD1uZXcgQmxvYihbV10se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtSPVVSTC5jcmVhdGVPYmplY3RVUkwocnQpfWxldCBudD1tKGkpP084KGkuc3ViYXJyYXkoMCxUKjQpKTp2b2lkIDAsYXQ7aWYobShudCkpe2xldCBydD1uZXcgQmxvYihbbnRdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSk7YXQ9VVJMLmNyZWF0ZU9iamVjdFVSTChydCl9bGV0IGx0PW0oeCk/eC5zdWJhcnJheSgwLFQpOnZvaWQgMCxfdDtpZihtKGx0KSl7bGV0IHJ0PW5ldyBCbG9iKFtsdF0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtfdD1VUkwuY3JlYXRlT2JqZWN0VVJMKHJ0KX1sZXQgb3Q9bSh4KT9uZXcgRmxvYXQzMkFycmF5KE0pOnZvaWQgMCxQdDtpZihtKG90KSl7Zm9yKGxldCB4dD0wO3h0PG90Lmxlbmd0aDsrK3h0KW90W3h0XT14dDtsZXQgcnQ9bmV3IEJsb2IoW290XSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO1B0PVVSTC5jcmVhdGVPYmplY3RVUkwocnQpfWxldCBndD17fSxSdD17fTtndC5QT1NJVElPTj1sLmxlbmd0aCx1LnB1c2goe3VyaTpCLGJ5dGVMZW5ndGg6SS5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6dS5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpJLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYyfSksbC5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNixjb3VudDpJLmxlbmd0aC8zLHR5cGU6IlZFQzMiLG1heDpbQSxDLHpdLG1pbjpbUyxMLGpdfSksbShxKSYmKGd0Lk5PUk1BTD1sLmxlbmd0aCx1LnB1c2goe3VyaTpxLGJ5dGVMZW5ndGg6ay5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6dS5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDprLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYyfSksbC5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNixjb3VudDprLmxlbmd0aC8zLHR5cGU6IlZFQzMifSkpLG0oUikmJihndC5URVhDT09SRF8wPWwubGVuZ3RoLHUucHVzaCh7dXJpOlIsYnl0ZUxlbmd0aDpXLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjp1Lmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOlcuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSxsLnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OlcubGVuZ3RoLzIsdHlwZToiVkVDMiJ9KSksbShhdCkmJihndC5DT0xPUl8wPWwubGVuZ3RoLHUucHVzaCh7dXJpOmF0LGJ5dGVMZW5ndGg6bnQuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOnUubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6bnQuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSxsLnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50Om50Lmxlbmd0aC80LHR5cGU6IlZFQzQifSkpLG0oX3QpJiYoZ3QuX0ZFQVRVUkVfSURfMD1sLmxlbmd0aCx1LnB1c2goe3VyaTpfdCxieXRlTGVuZ3RoOmx0LmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjp1Lmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOmx0LmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYzfSksbC5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNixjb3VudDpsdC5sZW5ndGgsdHlwZToiU0NBTEFSIn0pLFJ0LkVYVF9tZXNoX2ZlYXR1cmVzPXtmZWF0dXJlSWRzOlt7YXR0cmlidXRlOjAscHJvcGVydHlUYWJsZTowLGZlYXR1cmVDb3VudDpNfV19LGcucHVzaCgiRVhUX21lc2hfZmVhdHVyZXMiKSksbShQdCkmJih1LnB1c2goe3VyaTpQdCxieXRlTGVuZ3RoOm90LmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjp1Lmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOm90LmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYzfSksXy5FWFRfc3RydWN0dXJhbF9tZXRhZGF0YT17c2NoZW1hOntpZDoiaTNzLW1ldGFkYXRhLXNjaGVtYS0wMDEiLG5hbWU6IkkzUyBtZXRhZGF0YSBzY2hlbWEgMDAxIixkZXNjcmlwdGlvbjoiVGhlIHNjaGVtYSBmb3IgSTNTIG1ldGFkYXRhIix2ZXJzaW9uOiIxLjAiLGNsYXNzZXM6e2ZlYXR1cmU6e25hbWU6ImZlYXR1cmUiLGRlc2NyaXB0aW9uOiJGZWF0dXJlIG1ldGFkYXRhIixwcm9wZXJ0aWVzOntpbmRleDp7ZGVzY3JpcHRpb246IlRoZSBmZWF0dXJlIGluZGV4Iix0eXBlOiJTQ0FMQVIiLGNvbXBvbmVudFR5cGU6IkZMT0FUMzIiLHJlcXVpcmVkOiEwfX19fX0scHJvcGVydHlUYWJsZXM6W3tuYW1lOiJmZWF0dXJlLWluZGljZXMtbWFwcGluZyIsY2xhc3M6ImZlYXR1cmUiLGNvdW50Ok0scHJvcGVydGllczp7aW5kZXg6e3ZhbHVlczpjLmxlbmd0aC0xfX19XX0sZy5wdXNoKCJFWFRfc3RydWN0dXJhbF9tZXRhZGF0YSIpKSxtKE4pJiYodS5wdXNoKHt1cmk6TixieXRlTGVuZ3RoOkYuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOnUubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6Ri5ieXRlTGVuZ3RoLHRhcmdldDozNDk2M30pLGwucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjUsY291bnQ6Ri5sZW5ndGgsdHlwZToiU0NBTEFSIn0pLFJ0LkNFU0lVTV9wcmltaXRpdmVfb3V0bGluZT17aW5kaWNlczpsLmxlbmd0aC0xfSxnLnB1c2goIkNFU0lVTV9wcmltaXRpdmVfb3V0bGluZSIpKSx1LnB1c2goe3VyaTpFLGJ5dGVMZW5ndGg6Yi5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6dS5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpiLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYzfSk7bGV0IGR0PVtdO3JldHVybiB3PjAmJihsLnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI1LGNvdW50OncsdHlwZToiU0NBTEFSIn0pLGR0LnB1c2goe2F0dHJpYnV0ZXM6Z3QsaW5kaWNlczpsLmxlbmd0aC0xLG1hdGVyaWFsOmR0Lmxlbmd0aCxleHRlbnNpb25zOlJ0fSkpLHc8dCYmKGwucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6NCp3LGNvbXBvbmVudFR5cGU6NTEyNSxjb3VudDp0LXcsdHlwZToiU0NBTEFSIn0pLGR0LnB1c2goe2F0dHJpYnV0ZXM6Z3QsaW5kaWNlczpsLmxlbmd0aC0xLG1hdGVyaWFsOmR0Lmxlbmd0aCxleHRlbnNpb25zOlJ0LGV4dHJhOntpc1RyYW5zcGFyZW50OiEwfX0pKSxwLnB1c2goe3ByaW1pdGl2ZXM6ZHR9KSxoLnB1c2goMCksZC5wdXNoKHttZXNoOjB9KSx7YnVmZmVyczp1LGJ1ZmZlclZpZXdzOmMsYWNjZXNzb3JzOmwsbWVzaGVzOnAsbm9kZXM6ZCxub2Rlc0luU2NlbmU6aCxyb290RXh0ZW5zaW9uczpfLGV4dGVuc2lvbnNVc2VkOmd9fWZ1bmN0aW9uIFM4KHQsZSxuLG8pe2xldCByPW5ldyBVaW50OEFycmF5KHQsMCw1KTtyZXR1cm4gclswXT09PTY4JiZyWzFdPT09ODImJnJbMl09PT02NSYmclszXT09PTY3JiZyWzRdPT09Nzk/eDgodCxuKTpQOCh0LGUsbixvKX1mdW5jdGlvbiB4OCh0KXtsZXQgZT1RZyxuPW5ldyBlLkRlY29kZXJCdWZmZXIsbz1uZXcgVWludDhBcnJheSh0KTtuLkluaXQobyxvLmxlbmd0aCk7bGV0IHI9bmV3IGUuRGVjb2RlcixpPXIuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZShuKSxzPW5ldyBlLk1ldGFkYXRhUXVlcmllcixmLHU7aT09PWUuVFJJQU5HVUxBUl9NRVNIJiYoZj1uZXcgZS5NZXNoLHU9ci5EZWNvZGVCdWZmZXJUb01lc2gobixmKSk7bGV0IGM9e3ZlcnRleENvdW50OlswXSxmZWF0dXJlQ291bnQ6MH07aWYobSh1KSYmdS5vaygpJiZmLnB0ciE9PTApe2xldCBsPWYubnVtX2ZhY2VzKCkscD1mLm51bV9hdHRyaWJ1dGVzKCksZD1mLm51bV9wb2ludHMoKTtjLmluZGljZXM9bmV3IFVpbnQzMkFycmF5KGwqMyk7bGV0IGg9Yy5pbmRpY2VzO2MudmVydGV4Q291bnRbMF09ZCxjLnNjYWxlX3g9MSxjLnNjYWxlX3k9MTtsZXQgXz1uZXcgZS5EcmFjb0ludDMyQXJyYXkoMyk7Zm9yKGxldCBnPTA7ZzxsOysrZylyLkdldEZhY2VGcm9tTWVzaChmLGcsXyksaFtnKjNdPV8uR2V0VmFsdWUoMCksaFtnKjMrMV09Xy5HZXRWYWx1ZSgxKSxoW2cqMysyXT1fLkdldFZhbHVlKDIpO2UuZGVzdHJveShfKTtmb3IobGV0IGc9MDtnPHA7KytnKXtsZXQgYj1yLkdldEF0dHJpYnV0ZShmLGcpLHc9QzgoZSxyLGYsYixkKSxPPWIuYXR0cmlidXRlX3R5cGUoKSxFPSJ1bmtub3duIjtPPT09ZS5QT1NJVElPTj9FPSJwb3NpdGlvbnMiOk89PT1lLk5PUk1BTD9FPSJub3JtYWxzIjpPPT09ZS5DT0xPUj9FPSJjb2xvcnMiOk89PT1lLlRFWF9DT09SRCYmKEU9InV2MHMiKTtsZXQgVD1yLkdldEF0dHJpYnV0ZU1ldGFkYXRhKGYsZyk7aWYoVC5wdHIhPT0wKXtsZXQgeD1zLk51bUVudHJpZXMoVCk7Zm9yKGxldCBNPTA7TTx4OysrTSl7bGV0IE49cy5HZXRFbnRyeU5hbWUoVCxNKTtOPT09Imkzcy1zY2FsZV94Ij9jLnNjYWxlX3g9cy5HZXREb3VibGVFbnRyeShULCJpM3Mtc2NhbGVfeCIpOk49PT0iaTNzLXNjYWxlX3kiP2Muc2NhbGVfeT1zLkdldERvdWJsZUVudHJ5KFQsImkzcy1zY2FsZV95Iik6Tj09PSJpM3MtYXR0cmlidXRlLXR5cGUiJiYoRT1zLkdldFN0cmluZ0VudHJ5KFQsImkzcy1hdHRyaWJ1dGUtdHlwZSIpKX19bShjW0VdKSYmY29uc29sZS5sb2coIkF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyIsRSksY1tFXT13LEU9PT0iZmVhdHVyZS1pbmRleCImJmMuZmVhdHVyZUNvdW50Kyt9ZS5kZXN0cm95KGYpfXJldHVybiBlLmRlc3Ryb3kocyksZS5kZXN0cm95KHIpLGN9ZnVuY3Rpb24gQzgodCxlLG4sbyxyKXtsZXQgaT1vLm51bV9jb21wb25lbnRzKCkqcixzLHU9W2Z1bmN0aW9uKCl7fSxmdW5jdGlvbigpe3M9bmV3IHQuRHJhY29JbnQ4QXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzKG4sbyxzKXx8Y29uc29sZS5lcnJvcigiQmFkIHN0cmVhbSIpO2xldCBsPW5ldyBJbnQ4QXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDhBcnJheShpKSxlLkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzKG4sbyxzKXx8Y29uc29sZS5lcnJvcigiQmFkIHN0cmVhbSIpO2xldCBsPW5ldyBVaW50OEFycmF5KGkpO2ZvcihsZXQgcD0wO3A8aTsrK3ApbFtwXT1zLkdldFZhbHVlKHApO3JldHVybiBsfSxmdW5jdGlvbigpe3M9bmV3IHQuRHJhY29JbnQxNkFycmF5KGkpLGUuR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IEludDE2QXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDE2QXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IFVpbnQxNkFycmF5KGkpO2ZvcihsZXQgcD0wO3A8aTsrK3ApbFtwXT1zLkdldFZhbHVlKHApO3JldHVybiBsfSxmdW5jdGlvbigpe3M9bmV3IHQuRHJhY29JbnQzMkFycmF5KGkpLGUuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IEludDMyQXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDMyQXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IFVpbnQzMkFycmF5KGkpO2ZvcihsZXQgcD0wO3A8aTsrK3ApbFtwXT1zLkdldFZhbHVlKHApO3JldHVybiBsfSxmdW5jdGlvbigpe30sZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0Zsb2F0MzJBcnJheShpKSxlLkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzKG4sbyxzKXx8Y29uc29sZS5lcnJvcigiQmFkIHN0cmVhbSIpO2xldCBsPW5ldyBGbG9hdDMyQXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe3M9bmV3IHQuRHJhY29VSW50OEFycmF5KGkpLGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IFVpbnQ4QXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9XVtvLmRhdGFfdHlwZSgpXSgpO3JldHVybiBtKHMpJiZ0LmRlc3Ryb3kocyksdX1mdW5jdGlvbiBQOCh0LGUsbixvKXtsZXQgcj17dmVydGV4Q291bnQ6MH0saT1uZXcgRGF0YVZpZXcodCk7dHJ5e2xldCBzPTA7aWYoci52ZXJ0ZXhDb3VudD1pLmdldFVpbnQzMihzLDEpLHMrPTQsci5mZWF0dXJlQ291bnQ9aS5nZXRVaW50MzIocywxKSxzKz00LG0obikpZm9yKGxldCBmPTA7ZjxuLmF0dHJpYnV0ZXMubGVuZ3RoO2YrKyltKGdtW24uYXR0cmlidXRlc1tmXV0pP3M9Z21bbi5hdHRyaWJ1dGVzW2ZdXShyLHQscyk6Y29uc29sZS5lcnJvcigiVW5rbm93biBkZWNvZGVyIGZvciIsbi5hdHRyaWJ1dGVzW2ZdKTtlbHNle2xldCBmPWUub3JkZXJpbmcsdT1lLmZlYXR1cmVBdHRyaWJ1dGVPcmRlcjttKG8pJiZtKG8uZ2VvbWV0cnlEYXRhKSYmbShvLmdlb21ldHJ5RGF0YVswXSkmJm0oby5nZW9tZXRyeURhdGFbMF0ucGFyYW1zKSYmKGY9T2JqZWN0LmtleXMoby5nZW9tZXRyeURhdGFbMF0ucGFyYW1zLnZlcnRleEF0dHJpYnV0ZXMpLHU9T2JqZWN0LmtleXMoby5nZW9tZXRyeURhdGFbMF0ucGFyYW1zLmZlYXR1cmVBdHRyaWJ1dGVzKSk7Zm9yKGxldCBjPTA7YzxmLmxlbmd0aDtjKyspe2xldCBsPWdtW2ZbY11dO3M9bChyLHQscyl9Zm9yKGxldCBjPTA7Yzx1Lmxlbmd0aDtjKyspe2xldCBsPWdtW3VbY11dO3M9bChyLHQscyl9fX1jYXRjaChzKXtjb25zb2xlLmVycm9yKHMpfXJldHVybiByLnNjYWxlX3g9MSxyLnNjYWxlX3k9MSxyfWZ1bmN0aW9uIE04KHQpe2xldCBlPVM4KHQuYmluYXJ5RGF0YSx0LnNjaGVtYSx0LmJ1ZmZlckluZm8sdC5mZWF0dXJlRGF0YSk7bSh0Lmdlb2lkRGF0YUxpc3QpJiZ0Lmdlb2lkRGF0YUxpc3QubGVuZ3RoPjAmJnU4KGUudmVydGV4Q291bnQsZS5wb3NpdGlvbnMsZS5zY2FsZV94LGUuc2NhbGVfeSx0LmNhcnRvZ3JhcGhpY0NlbnRlcix0Lmdlb2lkRGF0YUxpc3QsITEpLGw4KGUudmVydGV4Q291bnQsZS5wb3NpdGlvbnMsZS5ub3JtYWxzLHQuY2FydG9ncmFwaGljQ2VudGVyLHQuY2FydGVzaWFuQ2VudGVyLHQucGFyZW50Um90YXRpb24sdC5lbGxpcHNvaWRSYWRpaVNxdWFyZSxlLnNjYWxlX3gsZS5zY2FsZV95KSxtKGUudXYwcykmJm0oZVsidXYtcmVnaW9uIl0pJiZwOChlLnZlcnRleENvdW50LGUudXYwcyxlWyJ1di1yZWdpb24iXSk7bGV0IG47aWYobShlWyJmZWF0dXJlLWluZGV4Il0pKW49ZVsiZmVhdHVyZS1pbmRleCJdO2Vsc2UgaWYobShlLmZhY2VSYW5nZSkpe249bmV3IEFycmF5KGUudmVydGV4Q291bnQpO2ZvcihsZXQgcz0wO3M8ZS5mYWNlUmFuZ2UubGVuZ3RoLTE7cys9Mil7bGV0IGY9cy8yLHU9ZS5mYWNlUmFuZ2Vbc10sYz1lLmZhY2VSYW5nZVtzKzFdO2ZvcihsZXQgbD11O2w8PWM7bCsrKW5bbCozXT1mLG5bbCozKzFdPWYsbltsKjMrMl09Zn19aWYodC5jYWxjdWxhdGVOb3JtYWxzKXtsZXQgcz1FOChlLnZlcnRleENvdW50LGUuaW5kaWNlcyxlLnBvc2l0aW9ucyxlLm5vcm1hbHMsZS51djBzLGUuY29sb3JzLG4pO20ocy5ub3JtYWxzKSYmKGUubm9ybWFscz1zLm5vcm1hbHMsbShzLnZlcnRleENvdW50KSYmKGUudmVydGV4Q291bnQ9cy52ZXJ0ZXhDb3VudCxlLmluZGljZXM9cy5pbmRpY2VzLGUucG9zaXRpb25zPXMucG9zaXRpb25zLGUudXYwcz1zLnV2MHMsZS5jb2xvcnM9cy5jb2xvcnMsbj1zLmZlYXR1cmVJbmRleCkpfWxldCBvPVI4KGUudmVydGV4Q291bnQsZS5pbmRpY2VzLGUucG9zaXRpb25zLGUubm9ybWFscyxlLnV2MHMsZS5jb2xvcnMsbix0KSxyPXtwb3NpdGlvbnM6ZS5wb3NpdGlvbnMsaW5kaWNlczplLmluZGljZXMsZmVhdHVyZUluZGV4Om4sc291cmNlVVJMOnQudXJsLGNhcnRlc2lhbkNlbnRlcjp0LmNhcnRlc2lhbkNlbnRlcixwYXJlbnRSb3RhdGlvbjp0LnBhcmVudFJvdGF0aW9ufTtyZXR1cm4gby5fY3VzdG9tQXR0cmlidXRlcz1yLHttZXNoRGF0YTpvfX1hc3luYyBmdW5jdGlvbiBOOCh0LGUpe2xldCBuPXQud2ViQXNzZW1ibHlDb25maWc7cmV0dXJuIG0obikmJm0obi53YXNtQmluYXJ5RmlsZSk/UWc9YXdhaXQoMCxaZy5kZWZhdWx0KShuKTpRZz1hd2FpdCgwLFpnLmRlZmF1bHQpKCksITB9ZnVuY3Rpb24gSTgodCxlKXtsZXQgbj10LndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBtKG4pP044KHQsZSk6TTgodCxlKX12YXIgWmcsUWcsYmksaG0sX20seW0sJGcsZ20sdjgsdDE9JCgoKT0+e1puKCk7ZnQoKTtzYygpOyR0KCk7SWUoKTtEdCgpO01hKCk7VW4oKTtLdCgpO1pnPW1yKFBnKCksMSk7a1MoKTtiaT1uZXcgYSxobT1uZXcgYSxfbT1uZXcgYTt5bT1uZXcgYSwkZz1uZXcgYTtnbT17cG9zaXRpb246ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQudmVydGV4Q291bnQqMztyZXR1cm4gdC5wb3NpdGlvbnM9bmV3IEZsb2F0MzJBcnJheShlLG4sbyksbis9byo0LG59LG5vcm1hbDpmdW5jdGlvbih0LGUsbil7bGV0IG89dC52ZXJ0ZXhDb3VudCozO3JldHVybiB0Lm5vcm1hbHM9bmV3IEZsb2F0MzJBcnJheShlLG4sbyksbis9byo0LG59LHV2MDpmdW5jdGlvbih0LGUsbil7bGV0IG89dC52ZXJ0ZXhDb3VudCoyO3JldHVybiB0LnV2MHM9bmV3IEZsb2F0MzJBcnJheShlLG4sbyksbis9byo0LG59LGNvbG9yOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LnZlcnRleENvdW50KjQ7cmV0dXJuIHQuY29sb3JzPW5ldyBVaW50OEFycmF5KGUsbixvKSxuKz1vLG59LGZlYXR1cmVJZDpmdW5jdGlvbih0LGUsbil7bGV0IG89dC5mZWF0dXJlQ291bnQ7cmV0dXJuIG4rPW8qOCxufSxpZDpmdW5jdGlvbih0LGUsbil7bGV0IG89dC5mZWF0dXJlQ291bnQ7cmV0dXJuIG4rPW8qOCxufSxmYWNlUmFuZ2U6ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQuZmVhdHVyZUNvdW50KjI7cmV0dXJuIHQuZmFjZVJhbmdlPW5ldyBVaW50MzJBcnJheShlLG4sbyksbis9byo0LG59LHV2UmVnaW9uOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LnZlcnRleENvdW50KjQ7cmV0dXJuIHRbInV2LXJlZ2lvbiJdPW5ldyBVaW50MTZBcnJheShlLG4sbyksbis9byoyLG59LHJlZ2lvbjpmdW5jdGlvbih0LGUsbil7bGV0IG89dC52ZXJ0ZXhDb3VudCo0O3JldHVybiB0WyJ1di1yZWdpb24iXT1uZXcgVWludDE2QXJyYXkoZSxuLG8pLG4rPW8qMixufX07djg9VWUoSTgpfSk7ZnVuY3Rpb24gRjgoKXtyZXR1cm4oZ3U9PT1udWxsfHxndS5ieXRlTGVuZ3RoPT09MCkmJihndT1uZXcgVWludDhBcnJheShMbi5tZW1vcnkuYnVmZmVyKSksZ3V9ZnVuY3Rpb24gelModCxlKXtyZXR1cm4gdD10Pj4+MCxIUy5kZWNvZGUoRjgoKS5zdWJhcnJheSh0LHQrZSkpfWZ1bmN0aW9uIHFTKCl7cmV0dXJuKEF1PT09bnVsbHx8QXUuYnl0ZUxlbmd0aD09PTApJiYoQXU9bmV3IFVpbnQzMkFycmF5KExuLm1lbW9yeS5idWZmZXIpKSxBdX1mdW5jdGlvbiBMOCh0LGUpe3JldHVybiB0PXQ+Pj4wLHFTKCkuc3ViYXJyYXkodC80LHQvNCtlKX1mdW5jdGlvbiBEOCh0LGUpe2xldCBuPWUodC5sZW5ndGgqNCw0KT4+PjA7cmV0dXJuIHFTKCkuc2V0KHQsbi80KSxLUz10Lmxlbmd0aCxufWZ1bmN0aW9uIGUxKHQpe2xldCBlPUxuLl9fd2JpbmRnZW5fZXhwb3J0XzAuZ2V0KHQpO3JldHVybiBMbi5fX2V4dGVybnJlZl90YWJsZV9kZWFsbG9jKHQpLGV9ZnVuY3Rpb24gV1ModCxlLG4sbyxyKXtsZXQgaT1Mbi5nZW5lcmF0ZV9zcGxhdF90ZXh0dXJlKHQsZSxuLG8scik7aWYoaVsyXSl0aHJvdyBlMShpWzFdKTtyZXR1cm4gbjEuX193cmFwKGlbMF0pfWZ1bmN0aW9uIFhTKHQsZSxuKXtsZXQgbz1Mbi5yYWRpeF9zb3J0X2dhdXNzaWFuc19pbmRleGVzKHQsZSxuKTtpZihvWzJdKXRocm93IGUxKG9bMV0pO3JldHVybiBlMShvWzBdKX1hc3luYyBmdW5jdGlvbiBCOCh0LGUpe2lmKHR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIiYmdCBpbnN0YW5jZW9mIFJlc3BvbnNlKXtpZih0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh0LGUpfWNhdGNoKG8pe2lmKHQuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpIT0iYXBwbGljYXRpb24vd2FzbSIpY29uc29sZS53YXJuKCJgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmdgIGZhaWxlZCBiZWNhdXNlIHlvdXIgc2VydmVyIGRvZXMgbm90IHNlcnZlIFdhc20gd2l0aCBgYXBwbGljYXRpb24vd2FzbWAgTUlNRSB0eXBlLiBGYWxsaW5nIGJhY2sgdG8gYFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlYCB3aGljaCBpcyBzbG93ZXIuIE9yaWdpbmFsIGVycm9yOlxuIixvKTtlbHNlIHRocm93IG99bGV0IG49YXdhaXQgdC5hcnJheUJ1ZmZlcigpO3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShuLGUpfWVsc2V7bGV0IG49YXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodCxlKTtyZXR1cm4gbiBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lkluc3RhbmNlP3tpbnN0YW5jZTpuLG1vZHVsZTp0fTpufX1mdW5jdGlvbiBZUygpe2xldCB0PXt9O3JldHVybiB0LndiZz17fSx0LndiZy5fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OD1mdW5jdGlvbihlKXtyZXR1cm4gZS5idWZmZXJ9LHQud2JnLl9fd2JnX2xlbmd0aF8zYjRmMDIyMTg4YWU4ZGI2PWZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aH0sdC53YmcuX193YmdfbGVuZ3RoX2E0NDYxOTNkYzIyYzEyZjg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RofSx0LndiZy5fX3diZ19uZXdfNzgwYWJlZTVjMTczOWZkNz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShlKX0sdC53YmcuX193YmdfbmV3X2ExMjAwMmE3ZjkxYzc1YmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSx0LndiZy5fX3diZ19uZXdfZTNiMzIxZGNmZWY4OWZjNz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KGUpfSx0LndiZy5fX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyPWZ1bmN0aW9uKGUsbixvKXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KGUsbj4+PjAsbz4+PjApfSx0LndiZy5fX3diZ19zZXRfMTBiYWQ5YmVlMGU5YzU4Yj1mdW5jdGlvbihlLG4sbyl7ZS5zZXQobixvPj4+MCl9LHQud2JnLl9fd2JnX3NldF82NTU5NWJkZDg2OGIzMDA5PWZ1bmN0aW9uKGUsbixvKXtlLnNldChuLG8+Pj4wKX0sdC53YmcuX193YmluZGdlbl9pbml0X2V4dGVybnJlZl90YWJsZT1mdW5jdGlvbigpe2xldCBlPUxuLl9fd2JpbmRnZW5fZXhwb3J0XzAsbj1lLmdyb3coNCk7ZS5zZXQoMCx2b2lkIDApLGUuc2V0KG4rMCx2b2lkIDApLGUuc2V0KG4rMSxudWxsKSxlLnNldChuKzIsITApLGUuc2V0KG4rMywhMSl9LHQud2JnLl9fd2JpbmRnZW5fbWVtb3J5PWZ1bmN0aW9uKCl7cmV0dXJuIExuLm1lbW9yeX0sdC53YmcuX193YmluZGdlbl9zdHJpbmdfbmV3PWZ1bmN0aW9uKGUsbil7cmV0dXJuIHpTKGUsbil9LHQud2JnLl9fd2JpbmRnZW5fdGhyb3c9ZnVuY3Rpb24oZSxuKXt0aHJvdyBuZXcgRXJyb3IoelMoZSxuKSl9LHR9ZnVuY3Rpb24gJFModCxlKXtyZXR1cm4gTG49dC5leHBvcnRzLFU4Ll9fd2JpbmRnZW5fd2FzbV9tb2R1bGU9ZSxBdT1udWxsLGd1PW51bGwsTG4uX193YmluZGdlbl9zdGFydCgpLExufWZ1bmN0aW9uIEFtKHQpe2lmKExuIT09dm9pZCAwKXJldHVybiBMbjt0eXBlb2YgdDwidSImJihPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1PYmplY3QucHJvdG90eXBlP3ttb2R1bGU6dH09dDpjb25zb2xlLndhcm4oInVzaW5nIGRlcHJlY2F0ZWQgcGFyYW1ldGVycyBmb3IgYGluaXRTeW5jKClgOyBwYXNzIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIikpO2xldCBlPVlTKCk7dCBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZXx8KHQ9bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSh0KSk7bGV0IG49bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKHQsZSk7cmV0dXJuICRTKG4sdCl9YXN5bmMgZnVuY3Rpb24gVTgodCl7aWYoTG4hPT12b2lkIDApcmV0dXJuIExuO3R5cGVvZiB0PCJ1IiYmKE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PU9iamVjdC5wcm90b3R5cGU/e21vZHVsZV9vcl9wYXRoOnR9PXQ6Y29uc29sZS53YXJuKCJ1c2luZyBkZXByZWNhdGVkIHBhcmFtZXRlcnMgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbjsgcGFzcyBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCIpKSx0eXBlb2YgdD4idSImJih0PW5ldyBVUkwoIndhc21fc3BsYXRzX2JnLndhc20iLGs4LnVybCkpO2xldCBlPVlTKCk7KHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnQgaW5zdGFuY2VvZiBSZXF1ZXN0fHx0eXBlb2YgVVJMPT0iZnVuY3Rpb24iJiZ0IGluc3RhbmNlb2YgVVJMKSYmKHQ9ZmV0Y2godCkpO2xldHtpbnN0YW5jZTpuLG1vZHVsZTpvfT1hd2FpdCBCOChhd2FpdCB0LGUpO3JldHVybiAkUyhuLG8pfXZhciBrOCxMbixIUyxndSxBdSxLUyxqUyxuMSxvMT0kKCgpPT57azg9e30sSFM9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0Zi04Iix7aWdub3JlQk9NOiEwLGZhdGFsOiEwfSk6e2RlY29kZTooKT0+e3Rocm93IEVycm9yKCJUZXh0RGVjb2RlciBub3QgYXZhaWxhYmxlIil9fTt0eXBlb2YgVGV4dERlY29kZXI8InUiJiZIUy5kZWNvZGUoKTtndT1udWxsO0F1PW51bGw7S1M9MDtqUz10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk+InUiP3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSh0PT5Mbi5fX3diZ190ZXh0dXJlZGF0YV9mcmVlKHQ+Pj4wLDEpKSxuMT1jbGFzcyB0e3N0YXRpYyBfX3dyYXAoZSl7ZT1lPj4+MDtsZXQgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtyZXR1cm4gbi5fX3diZ19wdHI9ZSxqUy5yZWdpc3RlcihuLG4uX193YmdfcHRyLG4pLG59X19kZXN0cm95X2ludG9fcmF3KCl7bGV0IGU9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsalMudW5yZWdpc3Rlcih0aGlzKSxlfWZyZWUoKXtsZXQgZT10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO0xuLl9fd2JnX3RleHR1cmVkYXRhX2ZyZWUoZSwwKX1nZXQgZGF0YSgpe2xldCBlPUxuLnRleHR1cmVkYXRhX2RhdGEodGhpcy5fX3diZ19wdHIpO3ZhciBuPUw4KGVbMF0sZVsxXSkuc2xpY2UoKTtyZXR1cm4gTG4uX193YmluZGdlbl9mcmVlKGVbMF0sZVsxXSo0LDQpLG59Z2V0IHdpZHRoKCl7cmV0dXJuIExuLnRleHR1cmVkYXRhX3dpZHRoKHRoaXMuX193YmdfcHRyKT4+PjB9Z2V0IGhlaWdodCgpe3JldHVybiBMbi50ZXh0dXJlZGF0YV9oZWlnaHQodGhpcy5fX3diZ19wdHIpPj4+MH1zdGF0aWMgbmV3KGUsbixvKXtsZXQgcj1EOChlLExuLl9fd2JpbmRnZW5fbWFsbG9jKSxpPUtTLHM9TG4udGV4dHVyZWRhdGFfbmV3KHIsaSxuLG8pO3JldHVybiB0Ll9fd3JhcChzKX19fSk7dmFyIHIxPXt9O2xlKHIxLHtkZWZhdWx0OigpPT56OH0pO2FzeW5jIGZ1bmN0aW9uIEc4KHQsZSl7bGV0IG49dC53ZWJBc3NlbWJseUNvbmZpZztpZihtKG4pJiZtKG4ud2FzbUJpbmFyeSkpcmV0dXJuIEFtKHttb2R1bGU6bi53YXNtQmluYXJ5fSksITB9ZnVuY3Rpb24gVjgodCxlKXtsZXQgbj10LndlYkFzc2VtYmx5Q29uZmlnO2lmKG0obikpcmV0dXJuIEc4KHQsZSk7bGV0e3ByaW1pdGl2ZTpvLHNvcnRUeXBlOnJ9PXQ7aWYocj09PSJJbmRleCIpcmV0dXJuIFhTKG8ucG9zaXRpb25zLG8ubW9kZWxWaWV3LG8uY291bnQpfXZhciB6OCxpMT0kKCgpPT57Wm4oKTtmdCgpO28xKCk7ejg9VWUoVjgpfSk7dmFyIHMxPXt9O2xlKHMxLHtkZWZhdWx0OigpPT5xOH0pO2FzeW5jIGZ1bmN0aW9uIGo4KHQsZSl7bGV0IG49dC53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gbShuKSYmbShuLndhc21CaW5hcnkpPyhBbSh7bW9kdWxlOm4ud2FzbUJpbmFyeX0pLCEwKTohMX1hc3luYyBmdW5jdGlvbiBIOCh0LGUpe2xldCBuPXQud2ViQXNzZW1ibHlDb25maWc7aWYobShuKSlyZXR1cm4gajgodCxlKTtsZXR7YXR0cmlidXRlczpvLGNvdW50OnJ9PXQsaT1XUyhvLnBvc2l0aW9ucyxvLnNjYWxlcyxvLnJvdGF0aW9ucyxvLmNvbG9ycyxyKTtyZXR1cm57ZGF0YTppLmRhdGEsd2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9fXZhciBxOCxjMT0kKCgpPT57Wm4oKTtmdCgpO28xKCk7cTg9VWUoSDgpfSk7dmFyIFNlLGlvLGExPSQoKCk9PntacygpO1NlPXtVTlNJR05FRF9CWVRFOkZ0LlVOU0lHTkVEX0JZVEUsVU5TSUdORURfU0hPUlQ6RnQuVU5TSUdORURfU0hPUlQsVU5TSUdORURfSU5UOkZ0LlVOU0lHTkVEX0lOVCxGTE9BVDpGdC5GTE9BVCxIQUxGX0ZMT0FUOkZ0LkhBTEZfRkxPQVRfT0VTLFVOU0lHTkVEX0lOVF8yNF84OkZ0LlVOU0lHTkVEX0lOVF8yNF84LFVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6RnQuVU5TSUdORURfU0hPUlRfNF80XzRfNCxVTlNJR05FRF9TSE9SVF81XzVfNV8xOkZ0LlVOU0lHTkVEX1NIT1JUXzVfNV81XzEsVU5TSUdORURfU0hPUlRfNV82XzU6RnQuVU5TSUdORURfU0hPUlRfNV82XzV9O1NlLnRvV2ViR0xDb25zdGFudD1mdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIFNlLlVOU0lHTkVEX0JZVEU6cmV0dXJuIEZ0LlVOU0lHTkVEX0JZVEU7Y2FzZSBTZS5VTlNJR05FRF9TSE9SVDpyZXR1cm4gRnQuVU5TSUdORURfU0hPUlQ7Y2FzZSBTZS5VTlNJR05FRF9JTlQ6cmV0dXJuIEZ0LlVOU0lHTkVEX0lOVDtjYXNlIFNlLkZMT0FUOnJldHVybiBGdC5GTE9BVDtjYXNlIFNlLkhBTEZfRkxPQVQ6cmV0dXJuIGUud2ViZ2wyP0Z0LkhBTEZfRkxPQVQ6RnQuSEFMRl9GTE9BVF9PRVM7Y2FzZSBTZS5VTlNJR05FRF9JTlRfMjRfODpyZXR1cm4gRnQuVU5TSUdORURfSU5UXzI0Xzg7Y2FzZSBTZS5VTlNJR05FRF9TSE9SVF80XzRfNF80OnJldHVybiBGdC5VTlNJR05FRF9TSE9SVF80XzRfNF80O2Nhc2UgU2UuVU5TSUdORURfU0hPUlRfNV81XzVfMTpyZXR1cm4gRnQuVU5TSUdORURfU0hPUlRfNV81XzVfMTtjYXNlIFNlLlVOU0lHTkVEX1NIT1JUXzVfNl81OnJldHVybiBTZS5VTlNJR05FRF9TSE9SVF81XzZfNX19O1NlLmlzUGFja2VkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09U2UuVU5TSUdORURfSU5UXzI0Xzh8fHQ9PT1TZS5VTlNJR05FRF9TSE9SVF80XzRfNF80fHx0PT09U2UuVU5TSUdORURfU0hPUlRfNV81XzVfMXx8dD09PVNlLlVOU0lHTkVEX1NIT1JUXzVfNl81fTtTZS5zaXplSW5CeXRlcz1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBTZS5VTlNJR05FRF9CWVRFOnJldHVybiAxO2Nhc2UgU2UuVU5TSUdORURfU0hPUlQ6Y2FzZSBTZS5VTlNJR05FRF9TSE9SVF80XzRfNF80OmNhc2UgU2UuVU5TSUdORURfU0hPUlRfNV81XzVfMTpjYXNlIFNlLlVOU0lHTkVEX1NIT1JUXzVfNl81OmNhc2UgU2UuSEFMRl9GTE9BVDpyZXR1cm4gMjtjYXNlIFNlLlVOU0lHTkVEX0lOVDpjYXNlIFNlLkZMT0FUOmNhc2UgU2UuVU5TSUdORURfSU5UXzI0Xzg6cmV0dXJuIDR9fTtTZS52YWxpZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVNlLlVOU0lHTkVEX0JZVEV8fHQ9PT1TZS5VTlNJR05FRF9TSE9SVHx8dD09PVNlLlVOU0lHTkVEX0lOVHx8dD09PVNlLkZMT0FUfHx0PT09U2UuSEFMRl9GTE9BVHx8dD09PVNlLlVOU0lHTkVEX0lOVF8yNF84fHx0PT09U2UuVU5TSUdORURfU0hPUlRfNF80XzRfNHx8dD09PVNlLlVOU0lHTkVEX1NIT1JUXzVfNV81XzF8fHQ9PT1TZS5VTlNJR05FRF9TSE9SVF81XzZfNX07U2UuZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yPWZ1bmN0aW9uKHQpe2xldCBlPVNlLnNpemVJbkJ5dGVzKHQpO3JldHVybiBlPT09VWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVD9VaW50OEFycmF5OmU9PT1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVD9VaW50MTZBcnJheTplPT09RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UJiZ0PT09U2UuRkxPQVQ/RmxvYXQzMkFycmF5OlVpbnQzMkFycmF5fTtpbz1PYmplY3QuZnJlZXplKFNlKX0pO3ZhciBtdCxHbixaUz0kKCgpPT57YTEoKTtacygpO210PXtERVBUSF9DT01QT05FTlQ6RnQuREVQVEhfQ09NUE9ORU5ULERFUFRIX1NURU5DSUw6RnQuREVQVEhfU1RFTkNJTCxBTFBIQTpGdC5BTFBIQSxSRUQ6RnQuUkVELFJHOkZ0LlJHLFJHQjpGdC5SR0IsUkdCQTpGdC5SR0JBLFJFRF9JTlRFR0VSOkZ0LlJFRF9JTlRFR0VSLFJHX0lOVEVHRVI6RnQuUkdfSU5URUdFUixSR0JfSU5URUdFUjpGdC5SR0JfSU5URUdFUixSR0JBX0lOVEVHRVI6RnQuUkdCQV9JTlRFR0VSLExVTUlOQU5DRTpGdC5MVU1JTkFOQ0UsTFVNSU5BTkNFX0FMUEhBOkZ0LkxVTUlOQU5DRV9BTFBIQSxSR0JfRFhUMTpGdC5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULFJHQkFfRFhUMTpGdC5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCxSR0JBX0RYVDM6RnQuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQsUkdCQV9EWFQ1OkZ0LkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhULFJHQl9QVlJUQ180QlBQVjE6RnQuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyxSR0JfUFZSVENfMkJQUFYxOkZ0LkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUcsUkdCQV9QVlJUQ180QlBQVjE6RnQuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUcsUkdCQV9QVlJUQ18yQlBQVjE6RnQuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcsUkdCQV9BU1RDOkZ0LkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9XRUJHTCxSR0JfRVRDMTpGdC5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMLFJHQjhfRVRDMjpGdC5DT01QUkVTU0VEX1JHQjhfRVRDMixSR0JBOF9FVEMyX0VBQzpGdC5DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDLFJHQkFfQkM3OkZ0LkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNfTttdC5jb21wb25lbnRzTGVuZ3RoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIG10LlJHQjpjYXNlIG10LlJHQl9JTlRFR0VSOnJldHVybiAzO2Nhc2UgbXQuUkdCQTpjYXNlIG10LlJHQkFfSU5URUdFUjpyZXR1cm4gNDtjYXNlIG10LkxVTUlOQU5DRV9BTFBIQTpjYXNlIG10LlJHOmNhc2UgbXQuUkdfSU5URUdFUjpyZXR1cm4gMjtjYXNlIG10LkFMUEhBOmNhc2UgbXQuUkVEOmNhc2UgbXQuUkVEX0lOVEVHRVI6Y2FzZSBtdC5MVU1JTkFOQ0U6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gMX19O210LnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09bXQuREVQVEhfQ09NUE9ORU5UfHx0PT09bXQuREVQVEhfU1RFTkNJTHx8dD09PW10LkFMUEhBfHx0PT09bXQuUkVEfHx0PT09bXQuUkd8fHQ9PT1tdC5SR0J8fHQ9PT1tdC5SR0JBfHx0PT09bXQuUkVEX0lOVEVHRVJ8fHQ9PT1tdC5SR19JTlRFR0VSfHx0PT09bXQuUkdCX0lOVEVHRVJ8fHQ9PT1tdC5SR0JBX0lOVEVHRVJ8fHQ9PT1tdC5MVU1JTkFOQ0V8fHQ9PT1tdC5MVU1JTkFOQ0VfQUxQSEF8fHQ9PT1tdC5SR0JfRFhUMXx8dD09PW10LlJHQkFfRFhUMXx8dD09PW10LlJHQkFfRFhUM3x8dD09PW10LlJHQkFfRFhUNXx8dD09PW10LlJHQl9QVlJUQ180QlBQVjF8fHQ9PT1tdC5SR0JfUFZSVENfMkJQUFYxfHx0PT09bXQuUkdCQV9QVlJUQ180QlBQVjF8fHQ9PT1tdC5SR0JBX1BWUlRDXzJCUFBWMXx8dD09PW10LlJHQkFfQVNUQ3x8dD09PW10LlJHQl9FVEMxfHx0PT09bXQuUkdCOF9FVEMyfHx0PT09bXQuUkdCQThfRVRDMl9FQUN8fHQ9PT1tdC5SR0JBX0JDN307bXQuaXNDb2xvckZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PW10LlJFRHx8dD09PW10LkFMUEhBfHx0PT09bXQuUkdCfHx0PT09bXQuUkdCQXx8dD09PW10LkxVTUlOQU5DRXx8dD09PW10LkxVTUlOQU5DRV9BTFBIQX07bXQuaXNEZXB0aEZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PW10LkRFUFRIX0NPTVBPTkVOVHx8dD09PW10LkRFUFRIX1NURU5DSUx9O210LmlzQ29tcHJlc3NlZEZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PW10LlJHQl9EWFQxfHx0PT09bXQuUkdCQV9EWFQxfHx0PT09bXQuUkdCQV9EWFQzfHx0PT09bXQuUkdCQV9EWFQ1fHx0PT09bXQuUkdCX1BWUlRDXzRCUFBWMXx8dD09PW10LlJHQl9QVlJUQ18yQlBQVjF8fHQ9PT1tdC5SR0JBX1BWUlRDXzRCUFBWMXx8dD09PW10LlJHQkFfUFZSVENfMkJQUFYxfHx0PT09bXQuUkdCQV9BU1RDfHx0PT09bXQuUkdCX0VUQzF8fHQ9PT1tdC5SR0I4X0VUQzJ8fHQ9PT1tdC5SR0JBOF9FVEMyX0VBQ3x8dD09PW10LlJHQkFfQkM3fTttdC5pc0RYVEZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PW10LlJHQl9EWFQxfHx0PT09bXQuUkdCQV9EWFQxfHx0PT09bXQuUkdCQV9EWFQzfHx0PT09bXQuUkdCQV9EWFQ1fTttdC5pc1BWUlRDRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09bXQuUkdCX1BWUlRDXzRCUFBWMXx8dD09PW10LlJHQl9QVlJUQ18yQlBQVjF8fHQ9PT1tdC5SR0JBX1BWUlRDXzRCUFBWMXx8dD09PW10LlJHQkFfUFZSVENfMkJQUFYxfTttdC5pc0FTVENGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1tdC5SR0JBX0FTVEN9O210LmlzRVRDMUZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PW10LlJHQl9FVEMxfTttdC5pc0VUQzJGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1tdC5SR0I4X0VUQzJ8fHQ9PT1tdC5SR0JBOF9FVEMyX0VBQ307bXQuaXNCQzdGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1tdC5SR0JBX0JDN307bXQuY29tcHJlc3NlZFRleHR1cmVTaXplSW5CeXRlcz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKHQpe2Nhc2UgbXQuUkdCX0RYVDE6Y2FzZSBtdC5SR0JBX0RYVDE6Y2FzZSBtdC5SR0JfRVRDMTpjYXNlIG10LlJHQjhfRVRDMjpyZXR1cm4gTWF0aC5mbG9vcigoZSszKS80KSpNYXRoLmZsb29yKChuKzMpLzQpKjg7Y2FzZSBtdC5SR0JBX0RYVDM6Y2FzZSBtdC5SR0JBX0RYVDU6Y2FzZSBtdC5SR0JBX0FTVEM6Y2FzZSBtdC5SR0JBOF9FVEMyX0VBQzpyZXR1cm4gTWF0aC5mbG9vcigoZSszKS80KSpNYXRoLmZsb29yKChuKzMpLzQpKjE2O2Nhc2UgbXQuUkdCX1BWUlRDXzRCUFBWMTpjYXNlIG10LlJHQkFfUFZSVENfNEJQUFYxOnJldHVybiBNYXRoLmZsb29yKChNYXRoLm1heChlLDgpKk1hdGgubWF4KG4sOCkqNCs3KS84KTtjYXNlIG10LlJHQl9QVlJUQ18yQlBQVjE6Y2FzZSBtdC5SR0JBX1BWUlRDXzJCUFBWMTpyZXR1cm4gTWF0aC5mbG9vcigoTWF0aC5tYXgoZSwxNikqTWF0aC5tYXgobiw4KSoyKzcpLzgpO2Nhc2UgbXQuUkdCQV9CQzc6cmV0dXJuIE1hdGguY2VpbChlLzQpKk1hdGguY2VpbChuLzQpKjE2O2RlZmF1bHQ6cmV0dXJuIDB9fTttdC50ZXh0dXJlU2l6ZUluQnl0ZXM9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9bXQuY29tcG9uZW50c0xlbmd0aCh0KTtyZXR1cm4gaW8uaXNQYWNrZWQoZSkmJihyPTEpLHIqaW8uc2l6ZUluQnl0ZXMoZSkqbipvfTttdC50ZXh0dXJlM0RTaXplSW5CeXRlcz1mdW5jdGlvbih0LGUsbixvLHIpe2xldCBpPW10LmNvbXBvbmVudHNMZW5ndGgodCk7cmV0dXJuIGlvLmlzUGFja2VkKGUpJiYoaT0xKSxpKmlvLnNpemVJbkJ5dGVzKGUpKm4qbypyfTttdC5hbGlnbm1lbnRJbkJ5dGVzPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1tdC50ZXh0dXJlU2l6ZUluQnl0ZXModCxlLG4sMSklNDtyZXR1cm4gbz09PTA/NDpvPT09Mj8yOjF9O210LmNyZWF0ZVR5cGVkQXJyYXk9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9aW8uZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yKGUpLGk9bXQuY29tcG9uZW50c0xlbmd0aCh0KSpuKm87cmV0dXJuIG5ldyByKGkpfTttdC5mbGlwWT1mdW5jdGlvbih0LGUsbixvLHIpe2lmKHI9PT0xKXJldHVybiB0O2xldCBpPW10LmNyZWF0ZVR5cGVkQXJyYXkoZSxuLG8scikscz1tdC5jb21wb25lbnRzTGVuZ3RoKGUpLGY9bypzO2ZvcihsZXQgdT0wO3U8cjsrK3Upe2xldCBjPXUqbypzLGw9KHItdS0xKSpvKnM7Zm9yKGxldCBwPTA7cDxmOysrcClpW2wrcF09dFtjK3BdfXJldHVybiBpfTttdC50b0ludGVybmFsRm9ybWF0PWZ1bmN0aW9uKHQsZSxuKXtpZighbi53ZWJnbDIpcmV0dXJuIHQ7aWYodD09PW10LkRFUFRIX1NURU5DSUwpcmV0dXJuIEZ0LkRFUFRIMjRfU1RFTkNJTDg7aWYodD09PW10LkRFUFRIX0NPTVBPTkVOVCl7aWYoZT09PWlvLlVOU0lHTkVEX1NIT1JUKXJldHVybiBGdC5ERVBUSF9DT01QT05FTlQxNjtpZihlPT09aW8uVU5TSUdORURfSU5UKXJldHVybiBGdC5ERVBUSF9DT01QT05FTlQyNH1pZihlPT09aW8uRkxPQVQpc3dpdGNoKHQpe2Nhc2UgbXQuUkdCQTpyZXR1cm4gRnQuUkdCQTMyRjtjYXNlIG10LlJHQjpyZXR1cm4gRnQuUkdCMzJGO2Nhc2UgbXQuUkc6cmV0dXJuIEZ0LlJHMzJGO2Nhc2UgbXQuUkVEOnJldHVybiBGdC5SMzJGfWlmKGU9PT1pby5IQUxGX0ZMT0FUKXN3aXRjaCh0KXtjYXNlIG10LlJHQkE6cmV0dXJuIEZ0LlJHQkExNkY7Y2FzZSBtdC5SR0I6cmV0dXJuIEZ0LlJHQjE2RjtjYXNlIG10LlJHOnJldHVybiBGdC5SRzE2RjtjYXNlIG10LlJFRDpyZXR1cm4gRnQuUjE2Rn1pZihlPT09aW8uVU5TSUdORURfQllURSlzd2l0Y2godCl7Y2FzZSBtdC5SR0JBOnJldHVybiBGdC5SR0JBODtjYXNlIG10LlJHQjpyZXR1cm4gRnQuUkdCODtjYXNlIG10LlJHOnJldHVybiBGdC5SRzg7Y2FzZSBtdC5SRUQ6cmV0dXJuIEZ0LlI4fWlmKGU9PT1pby5JTlQpc3dpdGNoKHQpe2Nhc2UgbXQuUkdCQV9JTlRFR0VSOnJldHVybiBGdC5SR0JBMzJJO2Nhc2UgbXQuUkdCX0lOVEVHRVI6cmV0dXJuIEZ0LlJHQjMySTtjYXNlIG10LlJHX0lOVEVHRVI6cmV0dXJuIEZ0LlJHMzJJO2Nhc2UgbXQuUkVEX0lOVEVHRVI6cmV0dXJuIEZ0LlIzMkl9aWYoZT09PWlvLlVOU0lHTkVEX0lOVClzd2l0Y2godCl7Y2FzZSBtdC5SR0JBX0lOVEVHRVI6cmV0dXJuIEZ0LlJHQkEzMlVJO2Nhc2UgbXQuUkdCX0lOVEVHRVI6cmV0dXJuIEZ0LlJHQjMyVUk7Y2FzZSBtdC5SR19JTlRFR0VSOnJldHVybiBGdC5SRzMyVUk7Y2FzZSBtdC5SRURfSU5URUdFUjpyZXR1cm4gRnQuUjMyVUl9cmV0dXJuIHR9O0duPU9iamVjdC5mcmVlemUobXQpfSk7dmFyIEs4LGJ1LFFTPSQoKCk9PntLOD17VktfRk9STUFUX1VOREVGSU5FRDowLFZLX0ZPUk1BVF9SNEc0X1VOT1JNX1BBQ0s4OjEsVktfRk9STUFUX1I0RzRCNEE0X1VOT1JNX1BBQ0sxNjoyLFZLX0ZPUk1BVF9CNEc0UjRBNF9VTk9STV9QQUNLMTY6MyxWS19GT1JNQVRfUjVHNkI1X1VOT1JNX1BBQ0sxNjo0LFZLX0ZPUk1BVF9CNUc2UjVfVU5PUk1fUEFDSzE2OjUsVktfRk9STUFUX1I1RzVCNUExX1VOT1JNX1BBQ0sxNjo2LFZLX0ZPUk1BVF9CNUc1UjVBMV9VTk9STV9QQUNLMTY6NyxWS19GT1JNQVRfQTFSNUc1QjVfVU5PUk1fUEFDSzE2OjgsVktfRk9STUFUX1I4X1VOT1JNOjksVktfRk9STUFUX1I4X1NOT1JNOjEwLFZLX0ZPUk1BVF9SOF9VU0NBTEVEOjExLFZLX0ZPUk1BVF9SOF9TU0NBTEVEOjEyLFZLX0ZPUk1BVF9SOF9VSU5UOjEzLFZLX0ZPUk1BVF9SOF9TSU5UOjE0LFZLX0ZPUk1BVF9SOF9TUkdCOjE1LFZLX0ZPUk1BVF9SOEc4X1VOT1JNOjE2LFZLX0ZPUk1BVF9SOEc4X1NOT1JNOjE3LFZLX0ZPUk1BVF9SOEc4X1VTQ0FMRUQ6MTgsVktfRk9STUFUX1I4RzhfU1NDQUxFRDoxOSxWS19GT1JNQVRfUjhHOF9VSU5UOjIwLFZLX0ZPUk1BVF9SOEc4X1NJTlQ6MjEsVktfRk9STUFUX1I4RzhfU1JHQjoyMixWS19GT1JNQVRfUjhHOEI4X1VOT1JNOjIzLFZLX0ZPUk1BVF9SOEc4QjhfU05PUk06MjQsVktfRk9STUFUX1I4RzhCOF9VU0NBTEVEOjI1LFZLX0ZPUk1BVF9SOEc4QjhfU1NDQUxFRDoyNixWS19GT1JNQVRfUjhHOEI4X1VJTlQ6MjcsVktfRk9STUFUX1I4RzhCOF9TSU5UOjI4LFZLX0ZPUk1BVF9SOEc4QjhfU1JHQjoyOSxWS19GT1JNQVRfQjhHOFI4X1VOT1JNOjMwLFZLX0ZPUk1BVF9COEc4UjhfU05PUk06MzEsVktfRk9STUFUX0I4RzhSOF9VU0NBTEVEOjMyLFZLX0ZPUk1BVF9COEc4UjhfU1NDQUxFRDozMyxWS19GT1JNQVRfQjhHOFI4X1VJTlQ6MzQsVktfRk9STUFUX0I4RzhSOF9TSU5UOjM1LFZLX0ZPUk1BVF9COEc4UjhfU1JHQjozNixWS19GT1JNQVRfUjhHOEI4QThfVU5PUk06MzcsVktfRk9STUFUX1I4RzhCOEE4X1NOT1JNOjM4LFZLX0ZPUk1BVF9SOEc4QjhBOF9VU0NBTEVEOjM5LFZLX0ZPUk1BVF9SOEc4QjhBOF9TU0NBTEVEOjQwLFZLX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOjQxLFZLX0ZPUk1BVF9SOEc4QjhBOF9TSU5UOjQyLFZLX0ZPUk1BVF9SOEc4QjhBOF9TUkdCOjQzLFZLX0ZPUk1BVF9COEc4UjhBOF9VTk9STTo0NCxWS19GT1JNQVRfQjhHOFI4QThfU05PUk06NDUsVktfRk9STUFUX0I4RzhSOEE4X1VTQ0FMRUQ6NDYsVktfRk9STUFUX0I4RzhSOEE4X1NTQ0FMRUQ6NDcsVktfRk9STUFUX0I4RzhSOEE4X1VJTlQ6NDgsVktfRk9STUFUX0I4RzhSOEE4X1NJTlQ6NDksVktfRk9STUFUX0I4RzhSOEE4X1NSR0I6NTAsVktfRk9STUFUX0E4QjhHOFI4X1VOT1JNX1BBQ0szMjo1MSxWS19GT1JNQVRfQThCOEc4UjhfU05PUk1fUEFDSzMyOjUyLFZLX0ZPUk1BVF9BOEI4RzhSOF9VU0NBTEVEX1BBQ0szMjo1MyxWS19GT1JNQVRfQThCOEc4UjhfU1NDQUxFRF9QQUNLMzI6NTQsVktfRk9STUFUX0E4QjhHOFI4X1VJTlRfUEFDSzMyOjU1LFZLX0ZPUk1BVF9BOEI4RzhSOF9TSU5UX1BBQ0szMjo1NixWS19GT1JNQVRfQThCOEc4UjhfU1JHQl9QQUNLMzI6NTcsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VOT1JNX1BBQ0szMjo1OCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU05PUk1fUEFDSzMyOjU5LFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9VU0NBTEVEX1BBQ0szMjo2MCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU1NDQUxFRF9QQUNLMzI6NjEsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VJTlRfUEFDSzMyOjYyLFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9TSU5UX1BBQ0szMjo2MyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVU5PUk1fUEFDSzMyOjY0LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TTk9STV9QQUNLMzI6NjUsVktfRk9STUFUX0EyQjEwRzEwUjEwX1VTQ0FMRURfUEFDSzMyOjY2LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TU0NBTEVEX1BBQ0szMjo2NyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVUlOVF9QQUNLMzI6NjgsVktfRk9STUFUX0EyQjEwRzEwUjEwX1NJTlRfUEFDSzMyOjY5LFZLX0ZPUk1BVF9SMTZfVU5PUk06NzAsVktfRk9STUFUX1IxNl9TTk9STTo3MSxWS19GT1JNQVRfUjE2X1VTQ0FMRUQ6NzIsVktfRk9STUFUX1IxNl9TU0NBTEVEOjczLFZLX0ZPUk1BVF9SMTZfVUlOVDo3NCxWS19GT1JNQVRfUjE2X1NJTlQ6NzUsVktfRk9STUFUX1IxNl9TRkxPQVQ6NzYsVktfRk9STUFUX1IxNkcxNl9VTk9STTo3NyxWS19GT1JNQVRfUjE2RzE2X1NOT1JNOjc4LFZLX0ZPUk1BVF9SMTZHMTZfVVNDQUxFRDo3OSxWS19GT1JNQVRfUjE2RzE2X1NTQ0FMRUQ6ODAsVktfRk9STUFUX1IxNkcxNl9VSU5UOjgxLFZLX0ZPUk1BVF9SMTZHMTZfU0lOVDo4MixWS19GT1JNQVRfUjE2RzE2X1NGTE9BVDo4MyxWS19GT1JNQVRfUjE2RzE2QjE2X1VOT1JNOjg0LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU05PUk06ODUsVktfRk9STUFUX1IxNkcxNkIxNl9VU0NBTEVEOjg2LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU1NDQUxFRDo4NyxWS19GT1JNQVRfUjE2RzE2QjE2X1VJTlQ6ODgsVktfRk9STUFUX1IxNkcxNkIxNl9TSU5UOjg5LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU0ZMT0FUOjkwLFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk06OTEsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STTo5MixWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1VTQ0FMRUQ6OTMsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TU0NBTEVEOjk0LFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlOVDo5NSxWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6OTYsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TRkxPQVQ6OTcsVktfRk9STUFUX1IzMl9VSU5UOjk4LFZLX0ZPUk1BVF9SMzJfU0lOVDo5OSxWS19GT1JNQVRfUjMyX1NGTE9BVDoxMDAsVktfRk9STUFUX1IzMkczMl9VSU5UOjEwMSxWS19GT1JNQVRfUjMyRzMyX1NJTlQ6MTAyLFZLX0ZPUk1BVF9SMzJHMzJfU0ZMT0FUOjEwMyxWS19GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6MTA0LFZLX0ZPUk1BVF9SMzJHMzJCMzJfU0lOVDoxMDUsVktfRk9STUFUX1IzMkczMkIzMl9TRkxPQVQ6MTA2LFZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoxMDcsVktfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOjEwOCxWS19GT1JNQVRfUjMyRzMyQjMyQTMyX1NGTE9BVDoxMDksVktfRk9STUFUX1I2NF9VSU5UOjExMCxWS19GT1JNQVRfUjY0X1NJTlQ6MTExLFZLX0ZPUk1BVF9SNjRfU0ZMT0FUOjExMixWS19GT1JNQVRfUjY0RzY0X1VJTlQ6MTEzLFZLX0ZPUk1BVF9SNjRHNjRfU0lOVDoxMTQsVktfRk9STUFUX1I2NEc2NF9TRkxPQVQ6MTE1LFZLX0ZPUk1BVF9SNjRHNjRCNjRfVUlOVDoxMTYsVktfRk9STUFUX1I2NEc2NEI2NF9TSU5UOjExNyxWS19GT1JNQVRfUjY0RzY0QjY0X1NGTE9BVDoxMTgsVktfRk9STUFUX1I2NEc2NEI2NEE2NF9VSU5UOjExOSxWS19GT1JNQVRfUjY0RzY0QjY0QTY0X1NJTlQ6MTIwLFZLX0ZPUk1BVF9SNjRHNjRCNjRBNjRfU0ZMT0FUOjEyMSxWS19GT1JNQVRfQjEwRzExUjExX1VGTE9BVF9QQUNLMzI6MTIyLFZLX0ZPUk1BVF9FNUI5RzlSOV9VRkxPQVRfUEFDSzMyOjEyMyxWS19GT1JNQVRfRDE2X1VOT1JNOjEyNCxWS19GT1JNQVRfWDhfRDI0X1VOT1JNX1BBQ0szMjoxMjUsVktfRk9STUFUX0QzMl9TRkxPQVQ6MTI2LFZLX0ZPUk1BVF9TOF9VSU5UOjEyNyxWS19GT1JNQVRfRDE2X1VOT1JNX1M4X1VJTlQ6MTI4LFZLX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoxMjksVktfRk9STUFUX0QzMl9TRkxPQVRfUzhfVUlOVDoxMzAsVktfRk9STUFUX0JDMV9SR0JfVU5PUk1fQkxPQ0s6MTMxLFZLX0ZPUk1BVF9CQzFfUkdCX1NSR0JfQkxPQ0s6MTMyLFZLX0ZPUk1BVF9CQzFfUkdCQV9VTk9STV9CTE9DSzoxMzMsVktfRk9STUFUX0JDMV9SR0JBX1NSR0JfQkxPQ0s6MTM0LFZLX0ZPUk1BVF9CQzJfVU5PUk1fQkxPQ0s6MTM1LFZLX0ZPUk1BVF9CQzJfU1JHQl9CTE9DSzoxMzYsVktfRk9STUFUX0JDM19VTk9STV9CTE9DSzoxMzcsVktfRk9STUFUX0JDM19TUkdCX0JMT0NLOjEzOCxWS19GT1JNQVRfQkM0X1VOT1JNX0JMT0NLOjEzOSxWS19GT1JNQVRfQkM0X1NOT1JNX0JMT0NLOjE0MCxWS19GT1JNQVRfQkM1X1VOT1JNX0JMT0NLOjE0MSxWS19GT1JNQVRfQkM1X1NOT1JNX0JMT0NLOjE0MixWS19GT1JNQVRfQkM2SF9VRkxPQVRfQkxPQ0s6MTQzLFZLX0ZPUk1BVF9CQzZIX1NGTE9BVF9CTE9DSzoxNDQsVktfRk9STUFUX0JDN19VTk9STV9CTE9DSzoxNDUsVktfRk9STUFUX0JDN19TUkdCX0JMT0NLOjE0NixWS19GT1JNQVRfRVRDMl9SOEc4QjhfVU5PUk1fQkxPQ0s6MTQ3LFZLX0ZPUk1BVF9FVEMyX1I4RzhCOF9TUkdCX0JMT0NLOjE0OCxWS19GT1JNQVRfRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9DSzoxNDksVktfRk9STUFUX0VUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSzoxNTAsVktfRk9STUFUX0VUQzJfUjhHOEI4QThfVU5PUk1fQkxPQ0s6MTUxLFZLX0ZPUk1BVF9FVEMyX1I4RzhCOEE4X1NSR0JfQkxPQ0s6MTUyLFZLX0ZPUk1BVF9FQUNfUjExX1VOT1JNX0JMT0NLOjE1MyxWS19GT1JNQVRfRUFDX1IxMV9TTk9STV9CTE9DSzoxNTQsVktfRk9STUFUX0VBQ19SMTFHMTFfVU5PUk1fQkxPQ0s6MTU1LFZLX0ZPUk1BVF9FQUNfUjExRzExX1NOT1JNX0JMT0NLOjE1NixWS19GT1JNQVRfQVNUQ180eDRfVU5PUk1fQkxPQ0s6MTU3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TUkdCX0JMT0NLOjE1OCxWS19GT1JNQVRfQVNUQ181eDRfVU5PUk1fQkxPQ0s6MTU5LFZLX0ZPUk1BVF9BU1RDXzV4NF9TUkdCX0JMT0NLOjE2MCxWS19GT1JNQVRfQVNUQ181eDVfVU5PUk1fQkxPQ0s6MTYxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TUkdCX0JMT0NLOjE2MixWS19GT1JNQVRfQVNUQ182eDVfVU5PUk1fQkxPQ0s6MTYzLFZLX0ZPUk1BVF9BU1RDXzZ4NV9TUkdCX0JMT0NLOjE2NCxWS19GT1JNQVRfQVNUQ182eDZfVU5PUk1fQkxPQ0s6MTY1LFZLX0ZPUk1BVF9BU1RDXzZ4Nl9TUkdCX0JMT0NLOjE2NixWS19GT1JNQVRfQVNUQ184eDVfVU5PUk1fQkxPQ0s6MTY3LFZLX0ZPUk1BVF9BU1RDXzh4NV9TUkdCX0JMT0NLOjE2OCxWS19GT1JNQVRfQVNUQ184eDZfVU5PUk1fQkxPQ0s6MTY5LFZLX0ZPUk1BVF9BU1RDXzh4Nl9TUkdCX0JMT0NLOjE3MCxWS19GT1JNQVRfQVNUQ184eDhfVU5PUk1fQkxPQ0s6MTcxLFZLX0ZPUk1BVF9BU1RDXzh4OF9TUkdCX0JMT0NLOjE3MixWS19GT1JNQVRfQVNUQ18xMHg1X1VOT1JNX0JMT0NLOjE3MyxWS19GT1JNQVRfQVNUQ18xMHg1X1NSR0JfQkxPQ0s6MTc0LFZLX0ZPUk1BVF9BU1RDXzEweDZfVU5PUk1fQkxPQ0s6MTc1LFZLX0ZPUk1BVF9BU1RDXzEweDZfU1JHQl9CTE9DSzoxNzYsVktfRk9STUFUX0FTVENfMTB4OF9VTk9STV9CTE9DSzoxNzcsVktfRk9STUFUX0FTVENfMTB4OF9TUkdCX0JMT0NLOjE3OCxWS19GT1JNQVRfQVNUQ18xMHgxMF9VTk9STV9CTE9DSzoxNzksVktfRk9STUFUX0FTVENfMTB4MTBfU1JHQl9CTE9DSzoxODAsVktfRk9STUFUX0FTVENfMTJ4MTBfVU5PUk1fQkxPQ0s6MTgxLFZLX0ZPUk1BVF9BU1RDXzEyeDEwX1NSR0JfQkxPQ0s6MTgyLFZLX0ZPUk1BVF9BU1RDXzEyeDEyX1VOT1JNX0JMT0NLOjE4MyxWS19GT1JNQVRfQVNUQ18xMngxMl9TUkdCX0JMT0NLOjE4NCxWS19GT1JNQVRfRzhCOEc4UjhfNDIyX1VOT1JNOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNOjEwMDAxNTYwMDEsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjBfVU5PUk06MTAwMDE1NjAwMixWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIwX1VOT1JNOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk06MTAwMDE1NjAwNCxWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIyX1VOT1JNOjEwMDAxNTYwMDUsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80NDRfVU5PUk06MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2OjEwMDAxNTYwMDcsVktfRk9STUFUX1IxMFg2RzEwWDZfVU5PUk1fMlBBQ0sxNjoxMDAwMTU2MDA4LFZLX0ZPUk1BVF9SMTBYNkcxMFg2QjEwWDZBMTBYNl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTAsVktfRk9STUFUX0IxMFg2RzEwWDZSMTBYNkcxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTEsVktfRk9STUFUX0cxMFg2X0IxMFg2X1IxMFg2XzNQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEzLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNl9SMTBYNl8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNCxWS19GT1JNQVRfRzEwWDZfQjEwWDZSMTBYNl8yUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMTYsVktfRk9STUFUX1IxMlg0X1VOT1JNX1BBQ0sxNjoxMDAwMTU2MDE3LFZLX0ZPUk1BVF9SMTJYNEcxMlg0X1VOT1JNXzJQQUNLMTY6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDE5LFZLX0ZPUk1BVF9HMTJYNEIxMlg0RzEyWDRSMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIwLFZLX0ZPUk1BVF9CMTJYNEcxMlg0UjEyWDRHMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMixWS19GT1JNQVRfRzEyWDRfQjEyWDRSMTJYNF8yUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMyxWS19GT1JNQVRfRzEyWDRfQjEyWDRfUjEyWDRfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjUsVktfRk9STUFUX0cxMlg0X0IxMlg0X1IxMlg0XzNQTEFORV80NDRfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDI2LFZLX0ZPUk1BVF9HMTZCMTZHMTZSMTZfNDIyX1VOT1JNOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk06MTAwMDE1NjAyOCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMF9VTk9STToxMDAwMTU2MDI5LFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjBfVU5PUk06MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STToxMDAwMTU2MDMxLFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjJfVU5PUk06MTAwMDE1NjAzMixWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STToxMDAwMTU2MDMzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NGUzLFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NDAwMSxWS19GT1JNQVRfUFZSVEMyXzJCUFBfVU5PUk1fQkxPQ0tfSU1HOjEwMDAwNTQwMDIsVktfRk9STUFUX1BWUlRDMl80QlBQX1VOT1JNX0JMT0NLX0lNRzoxMDAwMDU0MDAzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA0LFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA1LFZLX0ZPUk1BVF9QVlJUQzJfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA2LFZLX0ZPUk1BVF9QVlJUQzJfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjZlMyxWS19GT1JNQVRfQVNUQ181eDRfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDAxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDIsVktfRk9STUFUX0FTVENfNng1X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwMyxWS19GT1JNQVRfQVNUQ182eDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA0LFZLX0ZPUk1BVF9BU1RDXzh4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDUsVktfRk9STUFUX0FTVENfOHg2X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwNixWS19GT1JNQVRfQVNUQ184eDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA3LFZLX0ZPUk1BVF9BU1RDXzEweDVfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA4LFZLX0ZPUk1BVF9BU1RDXzEweDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA5LFZLX0ZPUk1BVF9BU1RDXzEweDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEwLFZLX0ZPUk1BVF9BU1RDXzEweDEwX1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAxMSxWS19GT1JNQVRfQVNUQ18xMngxMF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMTIsVktfRk9STUFUX0FTVENfMTJ4MTJfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEzLFZLX0ZPUk1BVF9HOEI4RzhSOF80MjJfVU5PUk1fS0hSOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDAxLFZLX0ZPUk1BVF9HOF9COF9SOF8zUExBTkVfNDIwX1VOT1JNX0tIUjoxMDAwMTU2MDAyLFZLX0ZPUk1BVF9HOF9COFI4XzJQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMDQsVktfRk9STUFUX0c4X0I4UjhfMlBMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAwNSxWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQ0NF9VTk9STV9LSFI6MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2X0tIUjoxMDAwMTU2MDA3LFZLX0ZPUk1BVF9SMTBYNkcxMFg2X1VOT1JNXzJQQUNLMTZfS0hSOjEwMDAxNTYwMDgsVktfRk9STUFUX1IxMFg2RzEwWDZCMTBYNkExMFg2X1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDEwLFZLX0ZPUk1BVF9CMTBYNkcxMFg2UjEwWDZHMTBYNl80MjJfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxMSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxMyxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE0LFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjJfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE2LFZLX0ZPUk1BVF9SMTJYNF9VTk9STV9QQUNLMTZfS0hSOjEwMDAxNTYwMTcsVktfRk9STUFUX1IxMlg0RzEyWDRfVU5PUk1fMlBBQ0sxNl9LSFI6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxOSxWS19GT1JNQVRfRzEyWDRCMTJYNEcxMlg0UjEyWDRfNDIyX1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMjAsVktfRk9STUFUX0IxMlg0RzEyWDRSMTJYNEcxMlg0XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjIsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDIzLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDI1LFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDQ0X1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjYsVktfRk9STUFUX0cxNkIxNkcxNlIxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjgsVktfRk9STUFUX0cxNl9CMTZfUjE2XzNQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMjksVktfRk9STUFUX0cxNl9CMTZSMTZfMlBMQU5FXzQyMF9VTk9STV9LSFI6MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAzMSxWS19GT1JNQVRfRzE2X0IxNlIxNl8yUExBTkVfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDMyLFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDQ0X1VOT1JNX0tIUjoxMDAwMTU2MDMzfSxidT1PYmplY3QuZnJlZXplKEs4KX0pO2Z1bmN0aW9uIFc4KCl7cmV0dXJue3ZrRm9ybWF0OjAsdHlwZVNpemU6MSxwaXhlbFdpZHRoOjAscGl4ZWxIZWlnaHQ6MCxwaXhlbERlcHRoOjAsbGF5ZXJDb3VudDowLGZhY2VDb3VudDoxLHN1cGVyY29tcHJlc3Npb25TY2hlbWU6MCxsZXZlbHM6W10sZGF0YUZvcm1hdERlc2NyaXB0b3I6W3t2ZW5kb3JJZDowLGRlc2NyaXB0b3JUeXBlOjAsdmVyc2lvbk51bWJlcjoyLGNvbG9yTW9kZWw6MCxjb2xvclByaW1hcmllczoxLHRyYW5zZmVyRnVuY3Rpb246MixmbGFnczowLHRleGVsQmxvY2tEaW1lbnNpb246WzAsMCwwLDBdLGJ5dGVzUGxhbmU6WzAsMCwwLDAsMCwwLDAsMF0sc2FtcGxlczpbXX1dLGtleVZhbHVlOnt9LGdsb2JhbERhdGE6bnVsbH19ZnVuY3Rpb24gSlModCl7cmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KX1mdW5jdGlvbiB0eCh0KXtsZXQgZT1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsem8ubGVuZ3RoKTtpZihlWzBdIT09em9bMF18fGVbMV0hPT16b1sxXXx8ZVsyXSE9PXpvWzJdfHxlWzNdIT09em9bM118fGVbNF0hPT16b1s0XXx8ZVs1XSE9PXpvWzVdfHxlWzZdIT09em9bNl18fGVbN10hPT16b1s3XXx8ZVs4XSE9PXpvWzhdfHxlWzldIT09em9bOV18fGVbMTBdIT09em9bMTBdfHxlWzExXSE9PXpvWzExXSl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgS1RYIDIuMCBpZGVudGlmaWVyLiIpO2xldCBuPVc4KCksbz0xNypVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxyPW5ldyBNYyh0LHpvLmxlbmd0aCxvLCEwKTtuLnZrRm9ybWF0PXIuX25leHRVaW50MzIoKSxuLnR5cGVTaXplPXIuX25leHRVaW50MzIoKSxuLnBpeGVsV2lkdGg9ci5fbmV4dFVpbnQzMigpLG4ucGl4ZWxIZWlnaHQ9ci5fbmV4dFVpbnQzMigpLG4ucGl4ZWxEZXB0aD1yLl9uZXh0VWludDMyKCksbi5sYXllckNvdW50PXIuX25leHRVaW50MzIoKSxuLmZhY2VDb3VudD1yLl9uZXh0VWludDMyKCk7bGV0IGk9ci5fbmV4dFVpbnQzMigpO24uc3VwZXJjb21wcmVzc2lvblNjaGVtZT1yLl9uZXh0VWludDMyKCk7bGV0IHM9ci5fbmV4dFVpbnQzMigpLGY9ci5fbmV4dFVpbnQzMigpLHU9ci5fbmV4dFVpbnQzMigpLGM9ci5fbmV4dFVpbnQzMigpLGw9ci5fbmV4dFVpbnQ2NCgpLHA9ci5fbmV4dFVpbnQ2NCgpLGQ9aSozKjgsaD1uZXcgTWModCx6by5sZW5ndGgrbyxkLCEwKTtmb3IobGV0IHJ0PTA7cnQ8aTtydCsrKW4ubGV2ZWxzLnB1c2goe2xldmVsRGF0YTpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQraC5fbmV4dFVpbnQ2NCgpLGguX25leHRVaW50NjQoKSksdW5jb21wcmVzc2VkQnl0ZUxlbmd0aDpoLl9uZXh0VWludDY0KCl9KTtsZXQgXz1uZXcgTWModCxzLGYsITApO18uX3NraXAoNCk7bGV0IGc9Xy5fbmV4dFVpbnQxNigpLGI9Xy5fbmV4dFVpbnQxNigpLHc9Xy5fbmV4dFVpbnQxNigpLE89Xy5fbmV4dFVpbnQxNigpLEU9Xy5fbmV4dFVpbnQ4KCksVD1fLl9uZXh0VWludDgoKSx4PV8uX25leHRVaW50OCgpLE09Xy5fbmV4dFVpbnQ4KCksTj1bXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCldLEY9W18uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpXSx2PXt2ZW5kb3JJZDpnLGRlc2NyaXB0b3JUeXBlOmIsdmVyc2lvbk51bWJlcjp3LGNvbG9yTW9kZWw6RSxjb2xvclByaW1hcmllczpULHRyYW5zZmVyRnVuY3Rpb246eCxmbGFnczpNLHRleGVsQmxvY2tEaW1lbnNpb246TixieXRlc1BsYW5lOkYsc2FtcGxlczpbXX0sUz0oTy80LTYpLzQ7Zm9yKGxldCBydD0wO3J0PFM7cnQrKyl7bGV0IHh0PXtiaXRPZmZzZXQ6Xy5fbmV4dFVpbnQxNigpLGJpdExlbmd0aDpfLl9uZXh0VWludDgoKSxjaGFubmVsVHlwZTpfLl9uZXh0VWludDgoKSxzYW1wbGVQb3NpdGlvbjpbXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCldLHNhbXBsZUxvd2VyOk51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzYW1wbGVVcHBlcjpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9O3h0LmNoYW5uZWxUeXBlJjY0Pyh4dC5zYW1wbGVMb3dlcj1fLl9uZXh0SW50MzIoKSx4dC5zYW1wbGVVcHBlcj1fLl9uZXh0SW50MzIoKSk6KHh0LnNhbXBsZUxvd2VyPV8uX25leHRVaW50MzIoKSx4dC5zYW1wbGVVcHBlcj1fLl9uZXh0VWludDMyKCkpLHYuc2FtcGxlc1tydF09eHR9bi5kYXRhRm9ybWF0RGVzY3JpcHRvci5sZW5ndGg9MCxuLmRhdGFGb3JtYXREZXNjcmlwdG9yLnB1c2godik7bGV0IEM9bmV3IE1jKHQsdSxjLCEwKTtmb3IoO0MuX29mZnNldDxjOyl7bGV0IHJ0PUMuX25leHRVaW50MzIoKSx4dD1DLl9zY2FuKHJ0KSxHdD1KUyh4dCk7aWYobi5rZXlWYWx1ZVtHdF09Qy5fbmV4dFVpbnQ4QXJyYXkocnQteHQuYnl0ZUxlbmd0aC0xKSxHdC5tYXRjaCgvXmt0eC9pKSl7bGV0IHJlPUpTKG4ua2V5VmFsdWVbR3RdKTtuLmtleVZhbHVlW0d0XT1yZS5zdWJzdHJpbmcoMCxyZS5sYXN0SW5kZXhPZigiXDAiKSl9bGV0IHBlPXJ0JTQ/NC1ydCU0OjA7Qy5fc2tpcChwZSl9aWYocDw9MClyZXR1cm4gbjtsZXQgTD1uZXcgTWModCxsLHAsITApLHo9TC5fbmV4dFVpbnQxNigpLGo9TC5fbmV4dFVpbnQxNigpLGs9TC5fbmV4dFVpbnQzMigpLHE9TC5fbmV4dFVpbnQzMigpLFc9TC5fbmV4dFVpbnQzMigpLFI9TC5fbmV4dFVpbnQzMigpLG50PVtdO2ZvcihsZXQgcnQ9MDtydDxpO3J0KyspbnQucHVzaCh7aW1hZ2VGbGFnczpMLl9uZXh0VWludDMyKCkscmdiU2xpY2VCeXRlT2Zmc2V0OkwuX25leHRVaW50MzIoKSxyZ2JTbGljZUJ5dGVMZW5ndGg6TC5fbmV4dFVpbnQzMigpLGFscGhhU2xpY2VCeXRlT2Zmc2V0OkwuX25leHRVaW50MzIoKSxhbHBoYVNsaWNlQnl0ZUxlbmd0aDpMLl9uZXh0VWludDMyKCl9KTtsZXQgYXQ9bCtMLl9vZmZzZXQsbHQ9YXQrayxfdD1sdCtxLG90PV90K1csUHQ9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0K2F0LGspLGd0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtsdCxxKSxSdD1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrX3QsVyksZHQ9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0K290LFIpO3JldHVybiBuLmdsb2JhbERhdGE9e2VuZHBvaW50Q291bnQ6eixzZWxlY3RvckNvdW50OmosaW1hZ2VEZXNjczpudCxlbmRwb2ludHNEYXRhOlB0LHNlbGVjdG9yc0RhdGE6Z3QsdGFibGVzRGF0YTpSdCxleHRlbmRlZERhdGE6ZHR9LG59dmFyIE1jLHVsdCx6byxleD0kKCgpPT57TWM9Y2xhc3N7Y29uc3RydWN0b3IoZSxuLG8scil7dGhpcy5fZGF0YVZpZXc9dm9pZCAwLHRoaXMuX2xpdHRsZUVuZGlhbj12b2lkIDAsdGhpcy5fb2Zmc2V0PXZvaWQgMCx0aGlzLl9kYXRhVmlldz1uZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0K24sbyksdGhpcy5fbGl0dGxlRW5kaWFuPXIsdGhpcy5fb2Zmc2V0PTB9X25leHRVaW50OCgpe2xldCBlPXRoaXMuX2RhdGFWaWV3LmdldFVpbnQ4KHRoaXMuX29mZnNldCk7cmV0dXJuIHRoaXMuX29mZnNldCs9MSxlfV9uZXh0VWludDE2KCl7bGV0IGU9dGhpcy5fZGF0YVZpZXcuZ2V0VWludDE2KHRoaXMuX29mZnNldCx0aGlzLl9saXR0bGVFbmRpYW4pO3JldHVybiB0aGlzLl9vZmZzZXQrPTIsZX1fbmV4dFVpbnQzMigpe2xldCBlPXRoaXMuX2RhdGFWaWV3LmdldFVpbnQzMih0aGlzLl9vZmZzZXQsdGhpcy5fbGl0dGxlRW5kaWFuKTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz00LGV9X25leHRVaW50NjQoKXtsZXQgZT10aGlzLl9kYXRhVmlldy5nZXRVaW50MzIodGhpcy5fb2Zmc2V0LHRoaXMuX2xpdHRsZUVuZGlhbiksbj10aGlzLl9kYXRhVmlldy5nZXRVaW50MzIodGhpcy5fb2Zmc2V0KzQsdGhpcy5fbGl0dGxlRW5kaWFuKSxvPWUrMioqMzIqbjtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz04LG99X25leHRJbnQzMigpe2xldCBlPXRoaXMuX2RhdGFWaWV3LmdldEludDMyKHRoaXMuX29mZnNldCx0aGlzLl9saXR0bGVFbmRpYW4pO3JldHVybiB0aGlzLl9vZmZzZXQrPTQsZX1fbmV4dFVpbnQ4QXJyYXkoZSl7bGV0IG49bmV3IFVpbnQ4QXJyYXkodGhpcy5fZGF0YVZpZXcuYnVmZmVyLHRoaXMuX2RhdGFWaWV3LmJ5dGVPZmZzZXQrdGhpcy5fb2Zmc2V0LGUpO3JldHVybiB0aGlzLl9vZmZzZXQrPWUsbn1fc2tpcChlKXtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz1lLHRoaXN9X3NjYW4oZSxuPTApe2xldCBvPXRoaXMuX29mZnNldCxyPTA7Zm9yKDt0aGlzLl9kYXRhVmlldy5nZXRVaW50OCh0aGlzLl9vZmZzZXQpIT09biYmcjxlOylyKyssdGhpcy5fb2Zmc2V0Kys7cmV0dXJuIHI8ZSYmdGhpcy5fb2Zmc2V0KyssbmV3IFVpbnQ4QXJyYXkodGhpcy5fZGF0YVZpZXcuYnVmZmVyLHRoaXMuX2RhdGFWaWV3LmJ5dGVPZmZzZXQrbyxyKX19LHVsdD1uZXcgVWludDhBcnJheShbMF0pLHpvPVsxNzEsNzUsODQsODgsMzIsNTAsNDgsMTg3LDEzLDEwLDI2LDEwXX0pO3ZhciBueD1ZbigoYm0sdTEpPT57dmFyIGYxPWZ1bmN0aW9uKCl7dmFyIHQ9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzp2b2lkIDA7cmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lPCJ1IiYmKHQ9dHx8X19maWxlbmFtZSksZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgbj10eXBlb2YgZTwidSI/ZTp7fSxvLHI7bi5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihVLEcpe289VSxyPUd9KTt2YXIgaT17fSxzO2ZvcihzIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109bltzXSk7dmFyIGY9W10sdT0iLi90aGlzLnByb2dyYW0iLGM9ZnVuY3Rpb24oVSxHKXt0aHJvdyBHfSxsPSExLHA9ITEsZD0hMSxoPSExO2w9dHlwZW9mIHdpbmRvdz09Im9iamVjdCIscD10eXBlb2YgaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIixkPXR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlPT0ic3RyaW5nIixoPSFsJiYhZCYmIXA7dmFyIF89IiI7ZnVuY3Rpb24gZyhVKXtyZXR1cm4gbi5sb2NhdGVGaWxlP24ubG9jYXRlRmlsZShVLF8pOl8rVX12YXIgYix3LE8sRSxULHg7ZD8ocD9fPWRyKCJwYXRoIikuZGlybmFtZShfKSsiLyI6Xz1fX2Rpcm5hbWUrIi8iLGI9ZnVuY3Rpb24oRyxYKXtyZXR1cm4gVHx8KFQ9ZHIoImZzIikpLHh8fCh4PWRyKCJwYXRoIikpLEc9eC5ub3JtYWxpemUoRyksVC5yZWFkRmlsZVN5bmMoRyxYP251bGw6InV0ZjgiKX0sTz1mdW5jdGlvbihHKXt2YXIgWD1iKEcsITApO3JldHVybiBYLmJ1ZmZlcnx8KFg9bmV3IFVpbnQ4QXJyYXkoWCkpLEwoWC5idWZmZXIpLFh9LHByb2Nlc3MuYXJndi5sZW5ndGg+MSYmKHU9cHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcL2csIi8iKSksZj1wcm9jZXNzLmFyZ3Yuc2xpY2UoMikscHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLGZ1bmN0aW9uKFUpe2lmKCEoVSBpbnN0YW5jZW9mIEVpKSl0aHJvdyBVfSkscHJvY2Vzcy5vbigidW5oYW5kbGVkUmVqZWN0aW9uIixXZSksYz1mdW5jdGlvbihVKXtwcm9jZXNzLmV4aXQoVSl9LG4uaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9KTpoPyh0eXBlb2YgcmVhZDwidSImJihiPWZ1bmN0aW9uKEcpe3JldHVybiByZWFkKEcpfSksTz1mdW5jdGlvbihHKXt2YXIgWDtyZXR1cm4gdHlwZW9mIHJlYWRidWZmZXI9PSJmdW5jdGlvbiI/bmV3IFVpbnQ4QXJyYXkocmVhZGJ1ZmZlcihHKSk6KFg9cmVhZChHLCJiaW5hcnkiKSxMKHR5cGVvZiBYPT0ib2JqZWN0IiksWCl9LHR5cGVvZiBzY3JpcHRBcmdzPCJ1Ij9mPXNjcmlwdEFyZ3M6dHlwZW9mIGFyZ3VtZW50czwidSImJihmPWFyZ3VtZW50cyksdHlwZW9mIHF1aXQ9PSJmdW5jdGlvbiImJihjPWZ1bmN0aW9uKFUpe3F1aXQoVSl9KSx0eXBlb2YgcHJpbnQ8InUiJiYodHlwZW9mIGNvbnNvbGU+InUiJiYoY29uc29sZT17fSksY29uc29sZS5sb2c9cHJpbnQsY29uc29sZS53YXJuPWNvbnNvbGUuZXJyb3I9dHlwZW9mIHByaW50RXJyPCJ1Ij9wcmludEVycjpwcmludCkpOihsfHxwKSYmKHA/Xz1zZWxmLmxvY2F0aW9uLmhyZWY6dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKF89ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHQmJihfPXQpLF8uaW5kZXhPZigiYmxvYjoiKSE9PTA/Xz1fLnN1YnN0cigwLF8ubGFzdEluZGV4T2YoIi8iKSsxKTpfPSIiLGI9ZnVuY3Rpb24oVSl7dmFyIEc9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBHLm9wZW4oIkdFVCIsVSwhMSksRy5zZW5kKG51bGwpLEcucmVzcG9uc2VUZXh0fSxwJiYoTz1mdW5jdGlvbihVKXt2YXIgRz1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIEcub3BlbigiR0VUIixVLCExKSxHLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLEcuc2VuZChudWxsKSxuZXcgVWludDhBcnJheShHLnJlc3BvbnNlKX0pLHc9ZnVuY3Rpb24oVSxHLFgpe3ZhciBRPW5ldyBYTUxIdHRwUmVxdWVzdDtRLm9wZW4oIkdFVCIsVSwhMCksUS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixRLm9ubG9hZD1mdW5jdGlvbigpe2lmKFEuc3RhdHVzPT0yMDB8fFEuc3RhdHVzPT0wJiZRLnJlc3BvbnNlKXtHKFEucmVzcG9uc2UpO3JldHVybn1YKCl9LFEub25lcnJvcj1YLFEuc2VuZChudWxsKX0sRT1mdW5jdGlvbihVKXtkb2N1bWVudC50aXRsZT1VfSk7dmFyIE09bi5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxOPW4ucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO2ZvcihzIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShzKSYmKG5bc109aVtzXSk7aT1udWxsLG4uYXJndW1lbnRzJiYoZj1uLmFyZ3VtZW50cyksbi50aGlzUHJvZ3JhbSYmKHU9bi50aGlzUHJvZ3JhbSksbi5xdWl0JiYoYz1uLnF1aXQpO3ZhciBGPTAsST1mdW5jdGlvbihVKXtGPVV9LHY7bi53YXNtQmluYXJ5JiYodj1uLndhc21CaW5hcnkpO3ZhciBCPW4ubm9FeGl0UnVudGltZXx8ITA7dHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IiYmV2UoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgQSxTPSExLEM7ZnVuY3Rpb24gTChVLEcpe1V8fFdlKCJBc3NlcnRpb24gZmFpbGVkOiAiK0cpfXZhciB6PXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIGooVSxHLFgpe2Zvcih2YXIgUT1HK1gsdXQ9RztVW3V0XSYmISh1dD49USk7KSsrdXQ7aWYodXQtRz4xNiYmVS5zdWJhcnJheSYmeilyZXR1cm4gei5kZWNvZGUoVS5zdWJhcnJheShHLHV0KSk7Zm9yKHZhciBPdD0iIjtHPHV0Oyl7dmFyIFN0PVVbRysrXTtpZighKFN0JjEyOCkpe090Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFN0KTtjb250aW51ZX12YXIgaHQ9VVtHKytdJjYzO2lmKChTdCYyMjQpPT0xOTIpe090Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKChTdCYzMSk8PDZ8aHQpO2NvbnRpbnVlfXZhciB5dD1VW0crK10mNjM7aWYoKFN0JjI0MCk9PTIyND9TdD0oU3QmMTUpPDwxMnxodDw8Nnx5dDpTdD0oU3QmNyk8PDE4fGh0PDwxMnx5dDw8NnxVW0crK10mNjMsU3Q8NjU1MzYpT3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoU3QpO2Vsc2V7dmFyIHF0PVN0LTY1NTM2O090Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHF0Pj4xMCw1NjMyMHxxdCYxMDIzKX19cmV0dXJuIE90fWZ1bmN0aW9uIGsoVSxHKXtyZXR1cm4gVT9qKHh0LFUsRyk6IiJ9ZnVuY3Rpb24gcShVLEcsWCxRKXtpZighKFE+MCkpcmV0dXJuIDA7Zm9yKHZhciB1dD1YLE90PVgrUS0xLFN0PTA7U3Q8VS5sZW5ndGg7KytTdCl7dmFyIGh0PVUuY2hhckNvZGVBdChTdCk7aWYoaHQ+PTU1Mjk2JiZodDw9NTczNDMpe3ZhciB5dD1VLmNoYXJDb2RlQXQoKytTdCk7aHQ9NjU1MzYrKChodCYxMDIzKTw8MTApfHl0JjEwMjN9aWYoaHQ8PTEyNyl7aWYoWD49T3QpYnJlYWs7R1tYKytdPWh0fWVsc2UgaWYoaHQ8PTIwNDcpe2lmKFgrMT49T3QpYnJlYWs7R1tYKytdPTE5MnxodD4+NixHW1grK109MTI4fGh0JjYzfWVsc2UgaWYoaHQ8PTY1NTM1KXtpZihYKzI+PU90KWJyZWFrO0dbWCsrXT0yMjR8aHQ+PjEyLEdbWCsrXT0xMjh8aHQ+PjYmNjMsR1tYKytdPTEyOHxodCY2M31lbHNle2lmKFgrMz49T3QpYnJlYWs7R1tYKytdPTI0MHxodD4+MTgsR1tYKytdPTEyOHxodD4+MTImNjMsR1tYKytdPTEyOHxodD4+NiY2MyxHW1grK109MTI4fGh0JjYzfX1yZXR1cm4gR1tYXT0wLFgtdXR9ZnVuY3Rpb24gVyhVLEcsWCl7cmV0dXJuIHEoVSx4dCxHLFgpfWZ1bmN0aW9uIFIoVSl7Zm9yKHZhciBHPTAsWD0wO1g8VS5sZW5ndGg7KytYKXt2YXIgUT1VLmNoYXJDb2RlQXQoWCk7UT49NTUyOTYmJlE8PTU3MzQzJiYoUT02NTUzNisoKFEmMTAyMyk8PDEwKXxVLmNoYXJDb2RlQXQoKytYKSYxMDIzKSxRPD0xMjc/KytHOlE8PTIwNDc/Rys9MjpRPD02NTUzNT9HKz0zOkcrPTR9cmV0dXJuIEd9dmFyIG50PXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpOnZvaWQgMDtmdW5jdGlvbiBhdChVLEcpe2Zvcih2YXIgWD1VLFE9WD4+MSx1dD1RK0cvMjshKFE+PXV0KSYmcGVbUV07KSsrUTtpZihYPVE8PDEsWC1VPjMyJiZudClyZXR1cm4gbnQuZGVjb2RlKHh0LnN1YmFycmF5KFUsWCkpO2Zvcih2YXIgT3Q9IiIsU3Q9MDshKFN0Pj1HLzIpOysrU3Qpe3ZhciBodD1HdFtVK1N0KjI+PjFdO2lmKGh0PT0wKWJyZWFrO090Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGh0KX1yZXR1cm4gT3R9ZnVuY3Rpb24gbHQoVSxHLFgpe2lmKFg9PT12b2lkIDAmJihYPTIxNDc0ODM2NDcpLFg8MilyZXR1cm4gMDtYLT0yO2Zvcih2YXIgUT1HLHV0PVg8VS5sZW5ndGgqMj9YLzI6VS5sZW5ndGgsT3Q9MDtPdDx1dDsrK090KXt2YXIgU3Q9VS5jaGFyQ29kZUF0KE90KTtHdFtHPj4xXT1TdCxHKz0yfXJldHVybiBHdFtHPj4xXT0wLEctUX1mdW5jdGlvbiBfdChVKXtyZXR1cm4gVS5sZW5ndGgqMn1mdW5jdGlvbiBvdChVLEcpe2Zvcih2YXIgWD0wLFE9IiI7IShYPj1HLzQpOyl7dmFyIHV0PXJlW1UrWCo0Pj4yXTtpZih1dD09MClicmVhaztpZigrK1gsdXQ+PTY1NTM2KXt2YXIgT3Q9dXQtNjU1MzY7USs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxPdD4+MTAsNTYzMjB8T3QmMTAyMyl9ZWxzZSBRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHV0KX1yZXR1cm4gUX1mdW5jdGlvbiBQdChVLEcsWCl7aWYoWD09PXZvaWQgMCYmKFg9MjE0NzQ4MzY0NyksWDw0KXJldHVybiAwO2Zvcih2YXIgUT1HLHV0PVErWC00LE90PTA7T3Q8VS5sZW5ndGg7KytPdCl7dmFyIFN0PVUuY2hhckNvZGVBdChPdCk7aWYoU3Q+PTU1Mjk2JiZTdDw9NTczNDMpe3ZhciBodD1VLmNoYXJDb2RlQXQoKytPdCk7U3Q9NjU1MzYrKChTdCYxMDIzKTw8MTApfGh0JjEwMjN9aWYocmVbRz4+Ml09U3QsRys9NCxHKzQ+dXQpYnJlYWt9cmV0dXJuIHJlW0c+PjJdPTAsRy1RfWZ1bmN0aW9uIGd0KFUpe2Zvcih2YXIgRz0wLFg9MDtYPFUubGVuZ3RoOysrWCl7dmFyIFE9VS5jaGFyQ29kZUF0KFgpO1E+PTU1Mjk2JiZRPD01NzM0MyYmKytYLEcrPTR9cmV0dXJuIEd9ZnVuY3Rpb24gUnQoVSxHKXtyZXR1cm4gVSVHPjAmJihVKz1HLVUlRyksVX12YXIgZHQscnQseHQsR3QscGUscmUsZGUsZmUsWnQ7ZnVuY3Rpb24gUXQoVSl7ZHQ9VSxuLkhFQVA4PXJ0PW5ldyBJbnQ4QXJyYXkoVSksbi5IRUFQMTY9R3Q9bmV3IEludDE2QXJyYXkoVSksbi5IRUFQMzI9cmU9bmV3IEludDMyQXJyYXkoVSksbi5IRUFQVTg9eHQ9bmV3IFVpbnQ4QXJyYXkoVSksbi5IRUFQVTE2PXBlPW5ldyBVaW50MTZBcnJheShVKSxuLkhFQVBVMzI9ZGU9bmV3IFVpbnQzMkFycmF5KFUpLG4uSEVBUEYzMj1mZT1uZXcgRmxvYXQzMkFycmF5KFUpLG4uSEVBUEY2ND1adD1uZXcgRmxvYXQ2NEFycmF5KFUpfXZhciBOZT1uLklOSVRJQUxfTUVNT1JZfHwxNjc3NzIxNixnZSxFZT1bXSx1bj1bXSxWZT1bXSxiZT1bXSxsbj0hMTtmdW5jdGlvbiBwbigpe2lmKG4ucHJlUnVuKWZvcih0eXBlb2Ygbi5wcmVSdW49PSJmdW5jdGlvbiImJihuLnByZVJ1bj1bbi5wcmVSdW5dKTtuLnByZVJ1bi5sZW5ndGg7KXplKG4ucHJlUnVuLnNoaWZ0KCkpO0hvKEVlKX1mdW5jdGlvbiBFbigpe2xuPSEwLEhvKHVuKX1mdW5jdGlvbiBvZSgpe0hvKFZlKX1mdW5jdGlvbiBZdCgpe2lmKG4ucG9zdFJ1bilmb3IodHlwZW9mIG4ucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKG4ucG9zdFJ1bj1bbi5wb3N0UnVuXSk7bi5wb3N0UnVuLmxlbmd0aDspc24obi5wb3N0UnVuLnNoaWZ0KCkpO0hvKGJlKX1mdW5jdGlvbiB6ZShVKXtFZS51bnNoaWZ0KFUpfWZ1bmN0aW9uIGRuKFUpe3VuLnVuc2hpZnQoVSl9ZnVuY3Rpb24gc24oVSl7YmUudW5zaGlmdChVKX12YXIgbW49MCxsbz1udWxsLHFuPW51bGw7ZnVuY3Rpb24gUWUoVSl7bW4rKyxuLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJm4ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhtbil9ZnVuY3Rpb24gY24oVSl7aWYobW4tLSxuLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJm4ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhtbiksbW49PTAmJihsbyE9PW51bGwmJihjbGVhckludGVydmFsKGxvKSxsbz1udWxsKSxxbikpe3ZhciBHPXFuO3FuPW51bGwsRygpfX1uLnByZWxvYWRlZEltYWdlcz17fSxuLnByZWxvYWRlZEF1ZGlvcz17fTtmdW5jdGlvbiBXZShVKXtuLm9uQWJvcnQmJm4ub25BYm9ydChVKSxVKz0iIixOKFUpLFM9ITAsQz0xLFU9ImFib3J0KCIrVSsiKS4gQnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgZm9yIG1vcmUgaW5mby4iO3ZhciBHPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoVSk7dGhyb3cgcihHKSxHfWZ1bmN0aW9uIGhuKFUsRyl7cmV0dXJuIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aD9VLnN0YXJ0c1dpdGgoRyk6VS5pbmRleE9mKEcpPT09MH12YXIgcG89ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiO2Z1bmN0aW9uIEtuKFUpe3JldHVybiBobihVLHBvKX12YXIgV249ImZpbGU6Ly8iO2Z1bmN0aW9uIG1vKFUpe3JldHVybiBobihVLFduKX12YXIgamU9ImJhc2lzX3RyYW5zY29kZXIud2FzbSI7S24oamUpfHwoamU9ZyhqZSkpO2Z1bmN0aW9uIEZlKFUpe3RyeXtpZihVPT1qZSYmdilyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodik7aWYoTylyZXR1cm4gTyhVKTt0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2goRyl7V2UoRyl9fWZ1bmN0aW9uIERuKCl7aWYoIXYmJihsfHxwKSl7aWYodHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiYhbW8oamUpKXJldHVybiBmZXRjaChqZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oVSl7aWYoIVUub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitqZSsiJyI7cmV0dXJuIFUuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIEZlKGplKX0pO2lmKHcpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFUsRyl7dyhqZSxmdW5jdGlvbihYKXtVKG5ldyBVaW50OEFycmF5KFgpKX0sRyl9KX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBGZShqZSl9KX1mdW5jdGlvbiBYbigpe3ZhciBVPXthOmtsfTtmdW5jdGlvbiBHKFN0LGh0KXt2YXIgeXQ9U3QuZXhwb3J0cztuLmFzbT15dCxBPW4uYXNtLkssUXQoQS5idWZmZXIpLGdlPW4uYXNtLk8sZG4obi5hc20uTCksY24oIndhc20taW5zdGFudGlhdGUiKX1RZSgid2FzbS1pbnN0YW50aWF0ZSIpO2Z1bmN0aW9uIFgoU3Qpe0coU3QuaW5zdGFuY2UpfWZ1bmN0aW9uIFEoU3Qpe3JldHVybiBEbigpLnRoZW4oZnVuY3Rpb24oaHQpe3ZhciB5dD1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShodCxVKTtyZXR1cm4geXR9KS50aGVuKFN0LGZ1bmN0aW9uKGh0KXtOKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK2h0KSxXZShodCl9KX1mdW5jdGlvbiB1dCgpe3JldHVybiF2JiZ0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiImJiFLbihqZSkmJiFtbyhqZSkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChqZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oU3Qpe3ZhciBodD1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhTdCxVKTtyZXR1cm4gaHQudGhlbihYLGZ1bmN0aW9uKHl0KXtyZXR1cm4gTigid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIreXQpLE4oImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksUShYKX0pfSk6UShYKX1pZihuLmluc3RhbnRpYXRlV2FzbSl0cnl7dmFyIE90PW4uaW5zdGFudGlhdGVXYXNtKFUsRyk7cmV0dXJuIE90fWNhdGNoKFN0KXtyZXR1cm4gTigiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIitTdCksITF9cmV0dXJuIHV0KCkuY2F0Y2gocikse319ZnVuY3Rpb24gSG8oVSl7Zm9yKDtVLmxlbmd0aD4wOyl7dmFyIEc9VS5zaGlmdCgpO2lmKHR5cGVvZiBHPT0iZnVuY3Rpb24iKXtHKG4pO2NvbnRpbnVlfXZhciBYPUcuZnVuYzt0eXBlb2YgWD09Im51bWJlciI/Ry5hcmc9PT12b2lkIDA/Z2UuZ2V0KFgpKCk6Z2UuZ2V0KFgpKEcuYXJnKTpYKEcuYXJnPT09dm9pZCAwP251bGw6Ry5hcmcpfX12YXIgcm49e307ZnVuY3Rpb24gUm4oVSl7Zm9yKDtVLmxlbmd0aDspe3ZhciBHPVUucG9wKCksWD1VLnBvcCgpO1goRyl9fWZ1bmN0aW9uIGZyKFUpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShkZVtVPj4yXSl9dmFyIHRvPXt9LHFvPXt9LElyPXt9LElzPTQ4LHZzPTU3O2Z1bmN0aW9uICRpKFUpe2lmKFU9PT12b2lkIDApcmV0dXJuIl91bmtub3duIjtVPVUucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCIkIik7dmFyIEc9VS5jaGFyQ29kZUF0KDApO3JldHVybiBHPj1JcyYmRzw9dnM/Il8iK1U6VX1mdW5jdGlvbiB2cihVLEcpe3JldHVybiBVPSRpKFUpLG5ldyBGdW5jdGlvbigiYm9keSIsInJldHVybiBmdW5jdGlvbiAiK1UrYCgpIHsKICAgICJ1c2Ugc3RyaWN0IjsgICAgcmV0dXJuIGJvZHkuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfTsKYCkoRyl9ZnVuY3Rpb24gWmkoVSxHKXt2YXIgWD12cihHLGZ1bmN0aW9uKFEpe3RoaXMubmFtZT1HLHRoaXMubWVzc2FnZT1RO3ZhciB1dD1uZXcgRXJyb3IoUSkuc3RhY2s7dXQhPT12b2lkIDAmJih0aGlzLnN0YWNrPXRoaXMudG9TdHJpbmcoKStgCmArdXQucmVwbGFjZSgvXkVycm9yKDpbXlxuXSopP1xuLywiIikpfSk7cmV0dXJuIFgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVS5wcm90b3R5cGUpLFgucHJvdG90eXBlLmNvbnN0cnVjdG9yPVgsWC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlPT09dm9pZCAwP3RoaXMubmFtZTp0aGlzLm5hbWUrIjogIit0aGlzLm1lc3NhZ2V9LFh9dmFyIEZzPXZvaWQgMDtmdW5jdGlvbiB3aShVKXt0aHJvdyBuZXcgRnMoVSl9ZnVuY3Rpb24gc28oVSxHLFgpe1UuZm9yRWFjaChmdW5jdGlvbihodCl7SXJbaHRdPUd9KTtmdW5jdGlvbiBRKGh0KXt2YXIgeXQ9WChodCk7eXQubGVuZ3RoIT09VS5sZW5ndGgmJndpKCJNaXNtYXRjaGVkIHR5cGUgY29udmVydGVyIGNvdW50Iik7Zm9yKHZhciBxdD0wO3F0PFUubGVuZ3RoOysrcXQpcnIoVVtxdF0seXRbcXRdKX12YXIgdXQ9bmV3IEFycmF5KEcubGVuZ3RoKSxPdD1bXSxTdD0wO0cuZm9yRWFjaChmdW5jdGlvbihodCx5dCl7cW8uaGFzT3duUHJvcGVydHkoaHQpP3V0W3l0XT1xb1todF06KE90LnB1c2goaHQpLHRvLmhhc093blByb3BlcnR5KGh0KXx8KHRvW2h0XT1bXSksdG9baHRdLnB1c2goZnVuY3Rpb24oKXt1dFt5dF09cW9baHRdLCsrU3QsU3Q9PT1PdC5sZW5ndGgmJlEodXQpfSkpfSksT3QubGVuZ3RoPT09MCYmUSh1dCl9ZnVuY3Rpb24gaG8oVSl7dmFyIEc9cm5bVV07ZGVsZXRlIHJuW1VdO3ZhciBYPUcucmF3Q29uc3RydWN0b3IsUT1HLnJhd0Rlc3RydWN0b3IsdXQ9Ry5maWVsZHMsT3Q9dXQubWFwKGZ1bmN0aW9uKFN0KXtyZXR1cm4gU3QuZ2V0dGVyUmV0dXJuVHlwZX0pLmNvbmNhdCh1dC5tYXAoZnVuY3Rpb24oU3Qpe3JldHVybiBTdC5zZXR0ZXJBcmd1bWVudFR5cGV9KSk7c28oW1VdLE90LGZ1bmN0aW9uKFN0KXt2YXIgaHQ9e307cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oeXQscXQpe3ZhciBKdD15dC5maWVsZE5hbWUsVGU9U3RbcXRdLEplPXl0LmdldHRlcixibj15dC5nZXR0ZXJDb250ZXh0LGNvPVN0W3F0K3V0Lmxlbmd0aF0sRm89eXQuc2V0dGVyLHByPXl0LnNldHRlckNvbnRleHQ7aHRbSnRdPXtyZWFkOmZ1bmN0aW9uKFFyKXtyZXR1cm4gVGUuZnJvbVdpcmVUeXBlKEplKGJuLFFyKSl9LHdyaXRlOmZ1bmN0aW9uKFFyLHJmKXt2YXIgUmk9W107Rm8ocHIsUXIsY28udG9XaXJlVHlwZShSaSxyZikpLFJuKFJpKX19fSksW3tuYW1lOkcubmFtZSxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oeXQpe3ZhciBxdD17fTtmb3IodmFyIEp0IGluIGh0KXF0W0p0XT1odFtKdF0ucmVhZCh5dCk7cmV0dXJuIFEoeXQpLHF0fSx0b1dpcmVUeXBlOmZ1bmN0aW9uKHl0LHF0KXtmb3IodmFyIEp0IGluIGh0KWlmKCEoSnQgaW4gcXQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgZmllbGQ6ICAiJytKdCsnIicpO3ZhciBUZT1YKCk7Zm9yKEp0IGluIGh0KWh0W0p0XS53cml0ZShUZSxxdFtKdF0pO3JldHVybiB5dCE9PW51bGwmJnl0LnB1c2goUSxUZSksVGV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6ZnIsZGVzdHJ1Y3RvckZ1bmN0aW9uOlF9XX0pfWZ1bmN0aW9uIEZyKFUpe3N3aXRjaChVKXtjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiAxO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDg6cmV0dXJuIDM7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIHR5cGUgc2l6ZTogIitVKX19ZnVuY3Rpb24gTmMoKXtmb3IodmFyIFU9bmV3IEFycmF5KDI1NiksRz0wO0c8MjU2OysrRylVW0ddPVN0cmluZy5mcm9tQ2hhckNvZGUoRyk7SWM9VX12YXIgSWM9dm9pZCAwO2Z1bmN0aW9uIEJuKFUpe2Zvcih2YXIgRz0iIixYPVU7eHRbWF07KUcrPUljW3h0W1grK11dO3JldHVybiBHfXZhciBUaT12b2lkIDA7ZnVuY3Rpb24gTGUoVSl7dGhyb3cgbmV3IFRpKFUpfWZ1bmN0aW9uIHJyKFUsRyxYKXtpZihYPVh8fHt9LCEoImFyZ1BhY2tBZHZhbmNlImluIEcpKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZ2lzdGVyVHlwZSByZWdpc3RlcmVkSW5zdGFuY2UgcmVxdWlyZXMgYXJnUGFja0FkdmFuY2UiKTt2YXIgUT1HLm5hbWU7aWYoVXx8TGUoJ3R5cGUgIicrUSsnIiBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHR5cGVpZCBwb2ludGVyJykscW8uaGFzT3duUHJvcGVydHkoVSkpe2lmKFguaWdub3JlRHVwbGljYXRlUmVnaXN0cmF0aW9ucylyZXR1cm47TGUoIkNhbm5vdCByZWdpc3RlciB0eXBlICciK1ErIicgdHdpY2UiKX1pZihxb1tVXT1HLGRlbGV0ZSBJcltVXSx0by5oYXNPd25Qcm9wZXJ0eShVKSl7dmFyIHV0PXRvW1VdO2RlbGV0ZSB0b1tVXSx1dC5mb3JFYWNoKGZ1bmN0aW9uKE90KXtPdCgpfSl9fWZ1bmN0aW9uIFR1KFUsRyxYLFEsdXQpe3ZhciBPdD1GcihYKTtHPUJuKEcpLHJyKFUse25hbWU6Ryxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oU3Qpe3JldHVybiEhU3R9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oU3QsaHQpe3JldHVybiBodD9ROnV0fSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZ1bmN0aW9uKFN0KXt2YXIgaHQ7aWYoWD09PTEpaHQ9cnQ7ZWxzZSBpZihYPT09MilodD1HdDtlbHNlIGlmKFg9PT00KWh0PXJlO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBib29sZWFuIHR5cGUgc2l6ZTogIitHKTtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoaHRbU3Q+Pk90XSl9LGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9ZnVuY3Rpb24gT3UoVSl7aWYoISh0aGlzIGluc3RhbmNlb2YgTHIpfHwhKFUgaW5zdGFuY2VvZiBMcikpcmV0dXJuITE7Zm9yKHZhciBHPXRoaXMuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MsWD10aGlzLiQkLnB0cixRPVUuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MsdXQ9VS4kJC5wdHI7Ry5iYXNlQ2xhc3M7KVg9Ry51cGNhc3QoWCksRz1HLmJhc2VDbGFzcztmb3IoO1EuYmFzZUNsYXNzOyl1dD1RLnVwY2FzdCh1dCksUT1RLmJhc2VDbGFzcztyZXR1cm4gRz09PVEmJlg9PT11dH1mdW5jdGlvbiBFdShVKXtyZXR1cm57Y291bnQ6VS5jb3VudCxkZWxldGVTY2hlZHVsZWQ6VS5kZWxldGVTY2hlZHVsZWQscHJlc2VydmVQb2ludGVyT25EZWxldGU6VS5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSxwdHI6VS5wdHIscHRyVHlwZTpVLnB0clR5cGUsc21hcnRQdHI6VS5zbWFydFB0cixzbWFydFB0clR5cGU6VS5zbWFydFB0clR5cGV9fWZ1bmN0aW9uIHZjKFUpe2Z1bmN0aW9uIEcoWCl7cmV0dXJuIFguJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MubmFtZX1MZShHKFUpKyIgaW5zdGFuY2UgYWxyZWFkeSBkZWxldGVkIil9dmFyIEZjPSExO2Z1bmN0aW9uIHFhKFUpe31mdW5jdGlvbiBSdShVKXtVLnNtYXJ0UHRyP1Uuc21hcnRQdHJUeXBlLnJhd0Rlc3RydWN0b3IoVS5zbWFydFB0cik6VS5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcy5yYXdEZXN0cnVjdG9yKFUucHRyKX1mdW5jdGlvbiBLYShVKXtVLmNvdW50LnZhbHVlLT0xO3ZhciBHPVUuY291bnQudmFsdWU9PT0wO0cmJlJ1KFUpfWZ1bmN0aW9uIFFpKFUpe3JldHVybiB0eXBlb2YgRmluYWxpemF0aW9uR3JvdXA+InUiPyhRaT1mdW5jdGlvbihHKXtyZXR1cm4gR30sVSk6KEZjPW5ldyBGaW5hbGl6YXRpb25Hcm91cChmdW5jdGlvbihHKXtmb3IodmFyIFg9Ry5uZXh0KCk7IVguZG9uZTtYPUcubmV4dCgpKXt2YXIgUT1YLnZhbHVlO1EucHRyP0thKFEpOmNvbnNvbGUud2Fybigib2JqZWN0IGFscmVhZHkgZGVsZXRlZDogIitRLnB0cil9fSksUWk9ZnVuY3Rpb24oRyl7cmV0dXJuIEZjLnJlZ2lzdGVyKEcsRy4kJCxHLiQkKSxHfSxxYT1mdW5jdGlvbihHKXtGYy51bnJlZ2lzdGVyKEcuJCQpfSxRaShVKSl9ZnVuY3Rpb24gU3UoKXtpZih0aGlzLiQkLnB0cnx8dmModGhpcyksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSlyZXR1cm4gdGhpcy4kJC5jb3VudC52YWx1ZSs9MSx0aGlzO3ZhciBVPVFpKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHskJDp7dmFsdWU6RXUodGhpcy4kJCl9fSkpO3JldHVybiBVLiQkLmNvdW50LnZhbHVlKz0xLFUuJCQuZGVsZXRlU2NoZWR1bGVkPSExLFV9ZnVuY3Rpb24geHUoKXt0aGlzLiQkLnB0cnx8dmModGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZMZSgiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLHFhKHRoaXMpLEthKHRoaXMuJCQpLHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGV8fCh0aGlzLiQkLnNtYXJ0UHRyPXZvaWQgMCx0aGlzLiQkLnB0cj12b2lkIDApfWZ1bmN0aW9uIEN1KCl7cmV0dXJuIXRoaXMuJCQucHRyfXZhciBKaT12b2lkIDAsdHM9W107ZnVuY3Rpb24gTGMoKXtmb3IoO3RzLmxlbmd0aDspe3ZhciBVPXRzLnBvcCgpO1UuJCQuZGVsZXRlU2NoZWR1bGVkPSExLFUuZGVsZXRlKCl9fWZ1bmN0aW9uIFB1KCl7cmV0dXJuIHRoaXMuJCQucHRyfHx2Yyh0aGlzKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZCYmIXRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUmJkxlKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksdHMucHVzaCh0aGlzKSx0cy5sZW5ndGg9PT0xJiZKaSYmSmkoTGMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkPSEwLHRoaXN9ZnVuY3Rpb24gTXUoKXtMci5wcm90b3R5cGUuaXNBbGlhc09mPU91LExyLnByb3RvdHlwZS5jbG9uZT1TdSxMci5wcm90b3R5cGUuZGVsZXRlPXh1LExyLnByb3RvdHlwZS5pc0RlbGV0ZWQ9Q3UsTHIucHJvdG90eXBlLmRlbGV0ZUxhdGVyPVB1fWZ1bmN0aW9uIExyKCl7fXZhciBXYT17fTtmdW5jdGlvbiBYYShVLEcsWCl7aWYoVVtHXS5vdmVybG9hZFRhYmxlPT09dm9pZCAwKXt2YXIgUT1VW0ddO1VbR109ZnVuY3Rpb24oKXtyZXR1cm4gVVtHXS5vdmVybG9hZFRhYmxlLmhhc093blByb3BlcnR5KGFyZ3VtZW50cy5sZW5ndGgpfHxMZSgiRnVuY3Rpb24gJyIrWCsiJyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgKCIrYXJndW1lbnRzLmxlbmd0aCsiKSAtIGV4cGVjdHMgb25lIG9mICgiK1VbR10ub3ZlcmxvYWRUYWJsZSsiKSEiKSxVW0ddLm92ZXJsb2FkVGFibGVbYXJndW1lbnRzLmxlbmd0aF0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxVW0ddLm92ZXJsb2FkVGFibGU9W10sVVtHXS5vdmVybG9hZFRhYmxlW1EuYXJnQ291bnRdPVF9fWZ1bmN0aW9uIERjKFUsRyxYKXtuLmhhc093blByb3BlcnR5KFUpPygoWD09PXZvaWQgMHx8bltVXS5vdmVybG9hZFRhYmxlIT09dm9pZCAwJiZuW1VdLm92ZXJsb2FkVGFibGVbWF0hPT12b2lkIDApJiZMZSgiQ2Fubm90IHJlZ2lzdGVyIHB1YmxpYyBuYW1lICciK1UrIicgdHdpY2UiKSxYYShuLFUsVSksbi5oYXNPd25Qcm9wZXJ0eShYKSYmTGUoIkNhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBvdmVybG9hZHMgb2YgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMgKCIrWCsiKSEiKSxuW1VdLm92ZXJsb2FkVGFibGVbWF09Ryk6KG5bVV09RyxYIT09dm9pZCAwJiYobltVXS5udW1Bcmd1bWVudHM9WCkpfWZ1bmN0aW9uIE51KFUsRyxYLFEsdXQsT3QsU3QsaHQpe3RoaXMubmFtZT1VLHRoaXMuY29uc3RydWN0b3I9Ryx0aGlzLmluc3RhbmNlUHJvdG90eXBlPVgsdGhpcy5yYXdEZXN0cnVjdG9yPVEsdGhpcy5iYXNlQ2xhc3M9dXQsdGhpcy5nZXRBY3R1YWxUeXBlPU90LHRoaXMudXBjYXN0PVN0LHRoaXMuZG93bmNhc3Q9aHQsdGhpcy5wdXJlVmlydHVhbEZ1bmN0aW9ucz1bXX1mdW5jdGlvbiBCYyhVLEcsWCl7Zm9yKDtHIT09WDspRy51cGNhc3R8fExlKCJFeHBlY3RlZCBudWxsIG9yIGluc3RhbmNlIG9mICIrWC5uYW1lKyIsIGdvdCBhbiBpbnN0YW5jZSBvZiAiK0cubmFtZSksVT1HLnVwY2FzdChVKSxHPUcuYmFzZUNsYXNzO3JldHVybiBVfWZ1bmN0aW9uIEl1KFUsRyl7aWYoRz09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkxlKCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSwwO0cuJCR8fExlKCdDYW5ub3QgcGFzcyAiJytPaShHKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxHLiQkLnB0cnx8TGUoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKTt2YXIgWD1HLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLFE9QmMoRy4kJC5wdHIsWCx0aGlzLnJlZ2lzdGVyZWRDbGFzcyk7cmV0dXJuIFF9ZnVuY3Rpb24gdnUoVSxHKXt2YXIgWDtpZihHPT09bnVsbClyZXR1cm4gdGhpcy5pc1JlZmVyZW5jZSYmTGUoIm51bGwgaXMgbm90IGEgdmFsaWQgIit0aGlzLm5hbWUpLHRoaXMuaXNTbWFydFBvaW50ZXI/KFg9dGhpcy5yYXdDb25zdHJ1Y3RvcigpLFUhPT1udWxsJiZVLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLFgpLFgpOjA7Ry4kJHx8TGUoJ0Nhbm5vdCBwYXNzICInK09pKEcpKyciIGFzIGEgJyt0aGlzLm5hbWUpLEcuJCQucHRyfHxMZSgiQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgIit0aGlzLm5hbWUpLCF0aGlzLmlzQ29uc3QmJkcuJCQucHRyVHlwZS5pc0NvbnN0JiZMZSgiQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAiKyhHLiQkLnNtYXJ0UHRyVHlwZT9HLiQkLnNtYXJ0UHRyVHlwZS5uYW1lOkcuJCQucHRyVHlwZS5uYW1lKSsiIHRvIHBhcmFtZXRlciB0eXBlICIrdGhpcy5uYW1lKTt2YXIgUT1HLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzO2lmKFg9QmMoRy4kJC5wdHIsUSx0aGlzLnJlZ2lzdGVyZWRDbGFzcyksdGhpcy5pc1NtYXJ0UG9pbnRlcilzd2l0Y2goRy4kJC5zbWFydFB0cj09PXZvaWQgMCYmTGUoIlBhc3NpbmcgcmF3IHBvaW50ZXIgdG8gc21hcnQgcG9pbnRlciBpcyBpbGxlZ2FsIiksdGhpcy5zaGFyaW5nUG9saWN5KXtjYXNlIDA6Ry4kJC5zbWFydFB0clR5cGU9PT10aGlzP1g9Ry4kJC5zbWFydFB0cjpMZSgiQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAiKyhHLiQkLnNtYXJ0UHRyVHlwZT9HLiQkLnNtYXJ0UHRyVHlwZS5uYW1lOkcuJCQucHRyVHlwZS5uYW1lKSsiIHRvIHBhcmFtZXRlciB0eXBlICIrdGhpcy5uYW1lKTticmVhaztjYXNlIDE6WD1HLiQkLnNtYXJ0UHRyO2JyZWFrO2Nhc2UgMjppZihHLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXMpWD1HLiQkLnNtYXJ0UHRyO2Vsc2V7dmFyIHV0PUcuY2xvbmUoKTtYPXRoaXMucmF3U2hhcmUoWCxscihmdW5jdGlvbigpe3V0LmRlbGV0ZSgpfSkpLFUhPT1udWxsJiZVLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLFgpfWJyZWFrO2RlZmF1bHQ6TGUoIlVuc3VwcG9ydGluZyBzaGFyaW5nIHBvbGljeSIpfXJldHVybiBYfWZ1bmN0aW9uIEZ1KFUsRyl7aWYoRz09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkxlKCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSwwO0cuJCR8fExlKCdDYW5ub3QgcGFzcyAiJytPaShHKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxHLiQkLnB0cnx8TGUoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKSxHLiQkLnB0clR5cGUuaXNDb25zdCYmTGUoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIitHLiQkLnB0clR5cGUubmFtZSsiIHRvIHBhcmFtZXRlciB0eXBlICIrdGhpcy5uYW1lKTt2YXIgWD1HLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLFE9QmMoRy4kJC5wdHIsWCx0aGlzLnJlZ2lzdGVyZWRDbGFzcyk7cmV0dXJuIFF9ZnVuY3Rpb24gTHUoVSl7cmV0dXJuIHRoaXMucmF3R2V0UG9pbnRlZSYmKFU9dGhpcy5yYXdHZXRQb2ludGVlKFUpKSxVfWZ1bmN0aW9uIER1KFUpe3RoaXMucmF3RGVzdHJ1Y3RvciYmdGhpcy5yYXdEZXN0cnVjdG9yKFUpfWZ1bmN0aW9uIEJ1KFUpe1UhPT1udWxsJiZVLmRlbGV0ZSgpfWZ1bmN0aW9uIFlhKFUsRyxYKXtpZihHPT09WClyZXR1cm4gVTtpZihYLmJhc2VDbGFzcz09PXZvaWQgMClyZXR1cm4gbnVsbDt2YXIgUT1ZYShVLEcsWC5iYXNlQ2xhc3MpO3JldHVybiBRPT09bnVsbD9udWxsOlguZG93bmNhc3QoUSl9ZnVuY3Rpb24gVXUoKXtyZXR1cm4gT2JqZWN0LmtleXMoZXMpLmxlbmd0aH1mdW5jdGlvbiBrdSgpe3ZhciBVPVtdO2Zvcih2YXIgRyBpbiBlcyllcy5oYXNPd25Qcm9wZXJ0eShHKSYmVS5wdXNoKGVzW0ddKTtyZXR1cm4gVX1mdW5jdGlvbiBHdShVKXtKaT1VLHRzLmxlbmd0aCYmSmkmJkppKExjKX1mdW5jdGlvbiBWdSgpe24uZ2V0SW5oZXJpdGVkSW5zdGFuY2VDb3VudD1VdSxuLmdldExpdmVJbmhlcml0ZWRJbnN0YW5jZXM9a3Usbi5mbHVzaFBlbmRpbmdEZWxldGVzPUxjLG4uc2V0RGVsYXlGdW5jdGlvbj1HdX12YXIgZXM9e307ZnVuY3Rpb24genUoVSxHKXtmb3IoRz09PXZvaWQgMCYmTGUoInB0ciBzaG91bGQgbm90IGJlIHVuZGVmaW5lZCIpO1UuYmFzZUNsYXNzOylHPVUudXBjYXN0KEcpLFU9VS5iYXNlQ2xhc3M7cmV0dXJuIEd9ZnVuY3Rpb24ganUoVSxHKXtyZXR1cm4gRz16dShVLEcpLGVzW0ddfWZ1bmN0aW9uIExzKFUsRyl7KCFHLnB0clR5cGV8fCFHLnB0cikmJndpKCJtYWtlQ2xhc3NIYW5kbGUgcmVxdWlyZXMgcHRyIGFuZCBwdHJUeXBlIik7dmFyIFg9ISFHLnNtYXJ0UHRyVHlwZSxRPSEhRy5zbWFydFB0cjtyZXR1cm4gWCE9PVEmJndpKCJCb3RoIHNtYXJ0UHRyVHlwZSBhbmQgc21hcnRQdHIgbXVzdCBiZSBzcGVjaWZpZWQiKSxHLmNvdW50PXt2YWx1ZToxfSxRaShPYmplY3QuY3JlYXRlKFUseyQkOnt2YWx1ZTpHfX0pKX1mdW5jdGlvbiBIdShVKXt2YXIgRz10aGlzLmdldFBvaW50ZWUoVSk7aWYoIUcpcmV0dXJuIHRoaXMuZGVzdHJ1Y3RvcihVKSxudWxsO3ZhciBYPWp1KHRoaXMucmVnaXN0ZXJlZENsYXNzLEcpO2lmKFghPT12b2lkIDApe2lmKFguJCQuY291bnQudmFsdWU9PT0wKXJldHVybiBYLiQkLnB0cj1HLFguJCQuc21hcnRQdHI9VSxYLmNsb25lKCk7dmFyIFE9WC5jbG9uZSgpO3JldHVybiB0aGlzLmRlc3RydWN0b3IoVSksUX1mdW5jdGlvbiB1dCgpe3JldHVybiB0aGlzLmlzU21hcnRQb2ludGVyP0xzKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMucG9pbnRlZVR5cGUscHRyOkcsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6VX0pOkxzKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMscHRyOlV9KX12YXIgT3Q9dGhpcy5yZWdpc3RlcmVkQ2xhc3MuZ2V0QWN0dWFsVHlwZShHKSxTdD1XYVtPdF07aWYoIVN0KXJldHVybiB1dC5jYWxsKHRoaXMpO3ZhciBodDt0aGlzLmlzQ29uc3Q/aHQ9U3QuY29uc3RQb2ludGVyVHlwZTpodD1TdC5wb2ludGVyVHlwZTt2YXIgeXQ9WWEoRyx0aGlzLnJlZ2lzdGVyZWRDbGFzcyxodC5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiB5dD09PW51bGw/dXQuY2FsbCh0aGlzKTp0aGlzLmlzU21hcnRQb2ludGVyP0xzKGh0LnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpodCxwdHI6eXQsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6VX0pOkxzKGh0LnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpodCxwdHI6eXR9KX1mdW5jdGlvbiBxdSgpe3VyLnByb3RvdHlwZS5nZXRQb2ludGVlPUx1LHVyLnByb3RvdHlwZS5kZXN0cnVjdG9yPUR1LHVyLnByb3RvdHlwZS5hcmdQYWNrQWR2YW5jZT04LHVyLnByb3RvdHlwZS5yZWFkVmFsdWVGcm9tUG9pbnRlcj1mcix1ci5wcm90b3R5cGUuZGVsZXRlT2JqZWN0PUJ1LHVyLnByb3RvdHlwZS5mcm9tV2lyZVR5cGU9SHV9ZnVuY3Rpb24gdXIoVSxHLFgsUSx1dCxPdCxTdCxodCx5dCxxdCxKdCl7dGhpcy5uYW1lPVUsdGhpcy5yZWdpc3RlcmVkQ2xhc3M9Ryx0aGlzLmlzUmVmZXJlbmNlPVgsdGhpcy5pc0NvbnN0PVEsdGhpcy5pc1NtYXJ0UG9pbnRlcj11dCx0aGlzLnBvaW50ZWVUeXBlPU90LHRoaXMuc2hhcmluZ1BvbGljeT1TdCx0aGlzLnJhd0dldFBvaW50ZWU9aHQsdGhpcy5yYXdDb25zdHJ1Y3Rvcj15dCx0aGlzLnJhd1NoYXJlPXF0LHRoaXMucmF3RGVzdHJ1Y3Rvcj1KdCwhdXQmJkcuYmFzZUNsYXNzPT09dm9pZCAwP1E/KHRoaXMudG9XaXJlVHlwZT1JdSx0aGlzLmRlc3RydWN0b3JGdW5jdGlvbj1udWxsKToodGhpcy50b1dpcmVUeXBlPUZ1LHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uPW51bGwpOnRoaXMudG9XaXJlVHlwZT12dX1mdW5jdGlvbiAkYShVLEcsWCl7bi5oYXNPd25Qcm9wZXJ0eShVKXx8d2koIlJlcGxhY2luZyBub25leGlzdGFudCBwdWJsaWMgc3ltYm9sIiksbltVXS5vdmVybG9hZFRhYmxlIT09dm9pZCAwJiZYIT09dm9pZCAwP25bVV0ub3ZlcmxvYWRUYWJsZVtYXT1HOihuW1VdPUcsbltVXS5hcmdDb3VudD1YKX1mdW5jdGlvbiBLdShVLEcsWCl7dmFyIFE9blsiZHluQ2FsbF8iK1VdO3JldHVybiBYJiZYLmxlbmd0aD9RLmFwcGx5KG51bGwsW0ddLmNvbmNhdChYKSk6US5jYWxsKG51bGwsRyl9ZnVuY3Rpb24gV3UoVSxHLFgpe3JldHVybiBVLmluZGV4T2YoImoiKSE9LTE/S3UoVSxHLFgpOmdlLmdldChHKS5hcHBseShudWxsLFgpfWZ1bmN0aW9uIFh1KFUsRyl7dmFyIFg9W107cmV0dXJuIGZ1bmN0aW9uKCl7WC5sZW5ndGg9YXJndW1lbnRzLmxlbmd0aDtmb3IodmFyIFE9MDtRPGFyZ3VtZW50cy5sZW5ndGg7USsrKVhbUV09YXJndW1lbnRzW1FdO3JldHVybiBXdShVLEcsWCl9fWZ1bmN0aW9uIEtvKFUsRyl7VT1CbihVKTtmdW5jdGlvbiBYKCl7cmV0dXJuIFUuaW5kZXhPZigiaiIpIT0tMT9YdShVLEcpOmdlLmdldChHKX12YXIgUT1YKCk7cmV0dXJuIHR5cGVvZiBRIT0iZnVuY3Rpb24iJiZMZSgidW5rbm93biBmdW5jdGlvbiBwb2ludGVyIHdpdGggc2lnbmF0dXJlICIrVSsiOiAiK0cpLFF9dmFyIFphPXZvaWQgMDtmdW5jdGlvbiBRYShVKXt2YXIgRz10dChVKSxYPUJuKEcpO3JldHVybiBLKEcpLFh9ZnVuY3Rpb24gRHMoVSxHKXt2YXIgWD1bXSxRPXt9O2Z1bmN0aW9uIHV0KE90KXtpZighUVtPdF0mJiFxb1tPdF0pe2lmKElyW090XSl7SXJbT3RdLmZvckVhY2godXQpO3JldHVybn1YLnB1c2goT3QpLFFbT3RdPSEwfX10aHJvdyBHLmZvckVhY2godXQpLG5ldyBaYShVKyI6ICIrWC5tYXAoUWEpLmpvaW4oWyIsICJdKSl9ZnVuY3Rpb24gWXUoVSxHLFgsUSx1dCxPdCxTdCxodCx5dCxxdCxKdCxUZSxKZSl7SnQ9Qm4oSnQpLE90PUtvKHV0LE90KSxodCYmKGh0PUtvKFN0LGh0KSkscXQmJihxdD1Lbyh5dCxxdCkpLEplPUtvKFRlLEplKTt2YXIgYm49JGkoSnQpO0RjKGJuLGZ1bmN0aW9uKCl7RHMoIkNhbm5vdCBjb25zdHJ1Y3QgIitKdCsiIGR1ZSB0byB1bmJvdW5kIHR5cGVzIixbUV0pfSksc28oW1UsRyxYXSxRP1tRXTpbXSxmdW5jdGlvbihjbyl7Y289Y29bMF07dmFyIEZvLHByO1E/KEZvPWNvLnJlZ2lzdGVyZWRDbGFzcyxwcj1Gby5pbnN0YW5jZVByb3RvdHlwZSk6cHI9THIucHJvdG90eXBlO3ZhciBRcj12cihibixmdW5jdGlvbigpe2lmKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSE9PXJmKXRocm93IG5ldyBUaSgiVXNlICduZXcnIHRvIGNvbnN0cnVjdCAiK0p0KTtpZihSaS5jb25zdHJ1Y3Rvcl9ib2R5PT09dm9pZCAwKXRocm93IG5ldyBUaShKdCsiIGhhcyBubyBhY2Nlc3NpYmxlIGNvbnN0cnVjdG9yIik7dmFyIHcxPVJpLmNvbnN0cnVjdG9yX2JvZHlbYXJndW1lbnRzLmxlbmd0aF07aWYodzE9PT12b2lkIDApdGhyb3cgbmV3IFRpKCJUcmllZCB0byBpbnZva2UgY3RvciBvZiAiK0p0KyIgd2l0aCBpbnZhbGlkIG51bWJlciBvZiBwYXJhbWV0ZXJzICgiK2FyZ3VtZW50cy5sZW5ndGgrIikgLSBleHBlY3RlZCAoIitPYmplY3Qua2V5cyhSaS5jb25zdHJ1Y3Rvcl9ib2R5KS50b1N0cmluZygpKyIpIHBhcmFtZXRlcnMgaW5zdGVhZCEiKTtyZXR1cm4gdzEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkscmY9T2JqZWN0LmNyZWF0ZShwcix7Y29uc3RydWN0b3I6e3ZhbHVlOlFyfX0pO1FyLnByb3RvdHlwZT1yZjt2YXIgUmk9bmV3IE51KEp0LFFyLHJmLEplLEZvLE90LGh0LHF0KSxweD1uZXcgdXIoSnQsUmksITAsITEsITEpLEExPW5ldyB1cihKdCsiKiIsUmksITEsITEsITEpLGIxPW5ldyB1cihKdCsiIGNvbnN0KiIsUmksITEsITAsITEpO3JldHVybiBXYVtVXT17cG9pbnRlclR5cGU6QTEsY29uc3RQb2ludGVyVHlwZTpiMX0sJGEoYm4sUXIpLFtweCxBMSxiMV19KX1mdW5jdGlvbiBVYyhVLEcpe2Zvcih2YXIgWD1bXSxRPTA7UTxVO1ErKylYLnB1c2gocmVbKEc+PjIpK1FdKTtyZXR1cm4gWH1mdW5jdGlvbiAkdShVLEcsWCxRLHV0LE90KXtMKEc+MCk7dmFyIFN0PVVjKEcsWCk7dXQ9S28oUSx1dCk7dmFyIGh0PVtPdF0seXQ9W107c28oW10sW1VdLGZ1bmN0aW9uKHF0KXtxdD1xdFswXTt2YXIgSnQ9ImNvbnN0cnVjdG9yICIrcXQubmFtZTtpZihxdC5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keT09PXZvaWQgMCYmKHF0LnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5PVtdKSxxdC5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtHLTFdIT09dm9pZCAwKXRocm93IG5ldyBUaSgiQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIGNvbnN0cnVjdG9ycyB3aXRoIGlkZW50aWNhbCBudW1iZXIgb2YgcGFyYW1ldGVycyAoIisoRy0xKSsiKSBmb3IgY2xhc3MgJyIrcXQubmFtZSsiJyEgT3ZlcmxvYWQgcmVzb2x1dGlvbiBpcyBjdXJyZW50bHkgb25seSBwZXJmb3JtZWQgdXNpbmcgdGhlIHBhcmFtZXRlciBjb3VudCwgbm90IGFjdHVhbCB0eXBlIGluZm8hIik7cmV0dXJuIHF0LnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W0ctMV09ZnVuY3Rpb24oKXtEcygiQ2Fubm90IGNvbnN0cnVjdCAiK3F0Lm5hbWUrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsU3QpfSxzbyhbXSxTdCxmdW5jdGlvbihUZSl7cmV0dXJuIHF0LnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W0ctMV09ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoIT09Ry0xJiZMZShKdCsiIGNhbGxlZCB3aXRoICIrYXJndW1lbnRzLmxlbmd0aCsiIGFyZ3VtZW50cywgZXhwZWN0ZWQgIisoRy0xKSkseXQubGVuZ3RoPTAsaHQubGVuZ3RoPUc7Zm9yKHZhciBibj0xO2JuPEc7KytibilodFtibl09VGVbYm5dLnRvV2lyZVR5cGUoeXQsYXJndW1lbnRzW2JuLTFdKTt2YXIgY289dXQuYXBwbHkobnVsbCxodCk7cmV0dXJuIFJuKHl0KSxUZVswXS5mcm9tV2lyZVR5cGUoY28pfSxbXX0pLFtdfSl9ZnVuY3Rpb24gSmEoVSxHKXtpZighKFUgaW5zdGFuY2VvZiBGdW5jdGlvbikpdGhyb3cgbmV3IFR5cGVFcnJvcigibmV3XyBjYWxsZWQgd2l0aCBjb25zdHJ1Y3RvciB0eXBlICIrdHlwZW9mIFUrIiB3aGljaCBpcyBub3QgYSBmdW5jdGlvbiIpO3ZhciBYPXZyKFUubmFtZXx8InVua25vd25GdW5jdGlvbk5hbWUiLGZ1bmN0aW9uKCl7fSk7WC5wcm90b3R5cGU9VS5wcm90b3R5cGU7dmFyIFE9bmV3IFgsdXQ9VS5hcHBseShRLEcpO3JldHVybiB1dCBpbnN0YW5jZW9mIE9iamVjdD91dDpRfWZ1bmN0aW9uIHRmKFUsRyxYLFEsdXQpe3ZhciBPdD1HLmxlbmd0aDtPdDwyJiZMZSgiYXJnVHlwZXMgYXJyYXkgc2l6ZSBtaXNtYXRjaCEgTXVzdCBhdCBsZWFzdCBnZXQgcmV0dXJuIHZhbHVlIGFuZCAndGhpcycgdHlwZXMhIik7Zm9yKHZhciBTdD1HWzFdIT09bnVsbCYmWCE9PW51bGwsaHQ9ITEseXQ9MTt5dDxHLmxlbmd0aDsrK3l0KWlmKEdbeXRdIT09bnVsbCYmR1t5dF0uZGVzdHJ1Y3RvckZ1bmN0aW9uPT09dm9pZCAwKXtodD0hMDticmVha31mb3IodmFyIHF0PUdbMF0ubmFtZSE9PSJ2b2lkIixKdD0iIixUZT0iIix5dD0wO3l0PE90LTI7Kyt5dClKdCs9KHl0IT09MD8iLCAiOiIiKSsiYXJnIit5dCxUZSs9KHl0IT09MD8iLCAiOiIiKSsiYXJnIit5dCsiV2lyZWQiO3ZhciBKZT0icmV0dXJuIGZ1bmN0aW9uICIrJGkoVSkrIigiK0p0K2ApIHsKaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IGArKE90LTIpK2ApIHsKdGhyb3dCaW5kaW5nRXJyb3IoJ2Z1bmN0aW9uIGArVSsiIGNhbGxlZCB3aXRoICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMsIGV4cGVjdGVkICIrKE90LTIpK2AgYXJncyEnKTsKfQpgO2h0JiYoSmUrPWB2YXIgZGVzdHJ1Y3RvcnMgPSBbXTsKYCk7dmFyIGJuPWh0PyJkZXN0cnVjdG9ycyI6Im51bGwiLGNvPVsidGhyb3dCaW5kaW5nRXJyb3IiLCJpbnZva2VyIiwiZm4iLCJydW5EZXN0cnVjdG9ycyIsInJldFR5cGUiLCJjbGFzc1BhcmFtIl0sRm89W0xlLFEsdXQsUm4sR1swXSxHWzFdXTtTdCYmKEplKz0idmFyIHRoaXNXaXJlZCA9IGNsYXNzUGFyYW0udG9XaXJlVHlwZSgiK2JuK2AsIHRoaXMpOwpgKTtmb3IodmFyIHl0PTA7eXQ8T3QtMjsrK3l0KUplKz0idmFyIGFyZyIreXQrIldpcmVkID0gYXJnVHlwZSIreXQrIi50b1dpcmVUeXBlKCIrYm4rIiwgYXJnIit5dCsiKTsgLy8gIitHW3l0KzJdLm5hbWUrYApgLGNvLnB1c2goImFyZ1R5cGUiK3l0KSxGby5wdXNoKEdbeXQrMl0pO2lmKFN0JiYoVGU9InRoaXNXaXJlZCIrKFRlLmxlbmd0aD4wPyIsICI6IiIpK1RlKSxKZSs9KHF0PyJ2YXIgcnYgPSAiOiIiKSsiaW52b2tlcihmbiIrKFRlLmxlbmd0aD4wPyIsICI6IiIpK1RlK2ApOwpgLGh0KUplKz1gcnVuRGVzdHJ1Y3RvcnMoZGVzdHJ1Y3RvcnMpOwpgO2Vsc2UgZm9yKHZhciB5dD1TdD8xOjI7eXQ8Ry5sZW5ndGg7Kyt5dCl7dmFyIHByPXl0PT09MT8idGhpc1dpcmVkIjoiYXJnIisoeXQtMikrIldpcmVkIjtHW3l0XS5kZXN0cnVjdG9yRnVuY3Rpb24hPT1udWxsJiYoSmUrPXByKyJfZHRvcigiK3ByKyIpOyAvLyAiK0dbeXRdLm5hbWUrYApgLGNvLnB1c2gocHIrIl9kdG9yIiksRm8ucHVzaChHW3l0XS5kZXN0cnVjdG9yRnVuY3Rpb24pKX1xdCYmKEplKz1gdmFyIHJldCA9IHJldFR5cGUuZnJvbVdpcmVUeXBlKHJ2KTsKcmV0dXJuIHJldDsKYCksSmUrPWB9CmAsY28ucHVzaChKZSk7dmFyIFFyPUphKEZ1bmN0aW9uLGNvKS5hcHBseShudWxsLEZvKTtyZXR1cm4gUXJ9ZnVuY3Rpb24gWnUoVSxHLFgsUSx1dCxPdCxTdCxodCl7dmFyIHl0PVVjKFgsUSk7Rz1CbihHKSxPdD1Lbyh1dCxPdCksc28oW10sW1VdLGZ1bmN0aW9uKHF0KXtxdD1xdFswXTt2YXIgSnQ9cXQubmFtZSsiLiIrRztodCYmcXQucmVnaXN0ZXJlZENsYXNzLnB1cmVWaXJ0dWFsRnVuY3Rpb25zLnB1c2goRyk7ZnVuY3Rpb24gVGUoKXtEcygiQ2Fubm90IGNhbGwgIitKdCsiIGR1ZSB0byB1bmJvdW5kIHR5cGVzIix5dCl9dmFyIEplPXF0LnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSxibj1KZVtHXTtyZXR1cm4gYm49PT12b2lkIDB8fGJuLm92ZXJsb2FkVGFibGU9PT12b2lkIDAmJmJuLmNsYXNzTmFtZSE9PXF0Lm5hbWUmJmJuLmFyZ0NvdW50PT09WC0yPyhUZS5hcmdDb3VudD1YLTIsVGUuY2xhc3NOYW1lPXF0Lm5hbWUsSmVbR109VGUpOihYYShKZSxHLEp0KSxKZVtHXS5vdmVybG9hZFRhYmxlW1gtMl09VGUpLHNvKFtdLHl0LGZ1bmN0aW9uKGNvKXt2YXIgRm89dGYoSnQsY28scXQsT3QsU3QpO3JldHVybiBKZVtHXS5vdmVybG9hZFRhYmxlPT09dm9pZCAwPyhGby5hcmdDb3VudD1YLTIsSmVbR109Rm8pOkplW0ddLm92ZXJsb2FkVGFibGVbWC0yXT1GbyxbXX0pLFtdfSl9ZnVuY3Rpb24gUXUoVSxHLFgpe1U9Qm4oVSksc28oW10sW0ddLGZ1bmN0aW9uKFEpe3JldHVybiBRPVFbMF0sbltVXT1RLmZyb21XaXJlVHlwZShYKSxbXX0pfXZhciBrYz1bXSx3bz1be30se3ZhbHVlOnZvaWQgMH0se3ZhbHVlOm51bGx9LHt2YWx1ZTohMH0se3ZhbHVlOiExfV07ZnVuY3Rpb24gR2MoVSl7VT40JiYtLXdvW1VdLnJlZmNvdW50PT09MCYmKHdvW1VdPXZvaWQgMCxrYy5wdXNoKFUpKX1mdW5jdGlvbiBKdSgpe2Zvcih2YXIgVT0wLEc9NTtHPHdvLmxlbmd0aDsrK0cpd29bR10hPT12b2lkIDAmJisrVTtyZXR1cm4gVX1mdW5jdGlvbiB0bCgpe2Zvcih2YXIgVT01O1U8d28ubGVuZ3RoOysrVSlpZih3b1tVXSE9PXZvaWQgMClyZXR1cm4gd29bVV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gZWwoKXtuLmNvdW50X2VtdmFsX2hhbmRsZXM9SnUsbi5nZXRfZmlyc3RfZW12YWw9dGx9ZnVuY3Rpb24gbHIoVSl7c3dpdGNoKFUpe2Nhc2Ugdm9pZCAwOnJldHVybiAxO2Nhc2UgbnVsbDpyZXR1cm4gMjtjYXNlITA6cmV0dXJuIDM7Y2FzZSExOnJldHVybiA0O2RlZmF1bHQ6e3ZhciBHPWtjLmxlbmd0aD9rYy5wb3AoKTp3by5sZW5ndGg7cmV0dXJuIHdvW0ddPXtyZWZjb3VudDoxLHZhbHVlOlV9LEd9fX1mdW5jdGlvbiBubChVLEcpe0c9Qm4oRykscnIoVSx7bmFtZTpHLGZyb21XaXJlVHlwZTpmdW5jdGlvbihYKXt2YXIgUT13b1tYXS52YWx1ZTtyZXR1cm4gR2MoWCksUX0sdG9XaXJlVHlwZTpmdW5jdGlvbihYLFEpe3JldHVybiBscihRKX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpmcixkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfWZ1bmN0aW9uIG9sKFUsRyxYKXtzd2l0Y2goRyl7Y2FzZSAwOnJldHVybiBmdW5jdGlvbihRKXt2YXIgdXQ9WD9ydDp4dDtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUodXRbUV0pfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKFEpe3ZhciB1dD1YP0d0OnBlO3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh1dFtRPj4xXSl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oUSl7dmFyIHV0PVg/cmU6ZGU7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHV0W1E+PjJdKX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGludGVnZXIgdHlwZTogIitVKX19ZnVuY3Rpb24gcmwoVSxHLFgsUSl7dmFyIHV0PUZyKFgpO0c9Qm4oRyk7ZnVuY3Rpb24gT3QoKXt9T3QudmFsdWVzPXt9LHJyKFUse25hbWU6Ryxjb25zdHJ1Y3RvcjpPdCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oU3Qpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnZhbHVlc1tTdF19LHRvV2lyZVR5cGU6ZnVuY3Rpb24oU3QsaHQpe3JldHVybiBodC52YWx1ZX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpvbChHLHV0LFEpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSksRGMoRyxPdCl9ZnVuY3Rpb24gQnMoVSxHKXt2YXIgWD1xb1tVXTtyZXR1cm4gWD09PXZvaWQgMCYmTGUoRysiIGhhcyB1bmtub3duIHR5cGUgIitRYShVKSksWH1mdW5jdGlvbiBpbChVLEcsWCl7dmFyIFE9QnMoVSwiZW51bSIpO0c9Qm4oRyk7dmFyIHV0PVEuY29uc3RydWN0b3IsT3Q9T2JqZWN0LmNyZWF0ZShRLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx7dmFsdWU6e3ZhbHVlOlh9LGNvbnN0cnVjdG9yOnt2YWx1ZTp2cihRLm5hbWUrIl8iK0csZnVuY3Rpb24oKXt9KX19KTt1dC52YWx1ZXNbWF09T3QsdXRbR109T3R9ZnVuY3Rpb24gT2koVSl7aWYoVT09PW51bGwpcmV0dXJuIm51bGwiO3ZhciBHPXR5cGVvZiBVO3JldHVybiBHPT09Im9iamVjdCJ8fEc9PT0iYXJyYXkifHxHPT09ImZ1bmN0aW9uIj9VLnRvU3RyaW5nKCk6IiIrVX1mdW5jdGlvbiBzbChVLEcpe3N3aXRjaChHKXtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKFgpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShmZVtYPj4yXSl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oWCl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKFp0W1g+PjNdKX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGZsb2F0IHR5cGU6ICIrVSl9fWZ1bmN0aW9uIGNsKFUsRyxYKXt2YXIgUT1GcihYKTtHPUJuKEcpLHJyKFUse25hbWU6Ryxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24odXQpe3JldHVybiB1dH0sdG9XaXJlVHlwZTpmdW5jdGlvbih1dCxPdCl7aWYodHlwZW9mIE90IT0ibnVtYmVyIiYmdHlwZW9mIE90IT0iYm9vbGVhbiIpdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgIicrT2koT3QpKyciIHRvICcrdGhpcy5uYW1lKTtyZXR1cm4gT3R9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6c2woRyxRKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfWZ1bmN0aW9uIGFsKFUsRyxYLFEsdXQsT3Qpe3ZhciBTdD1VYyhHLFgpO1U9Qm4oVSksdXQ9S28oUSx1dCksRGMoVSxmdW5jdGlvbigpe0RzKCJDYW5ub3QgY2FsbCAiK1UrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsU3QpfSxHLTEpLHNvKFtdLFN0LGZ1bmN0aW9uKGh0KXt2YXIgeXQ9W2h0WzBdLG51bGxdLmNvbmNhdChodC5zbGljZSgxKSk7cmV0dXJuICRhKFUsdGYoVSx5dCxudWxsLHV0LE90KSxHLTEpLFtdfSl9ZnVuY3Rpb24gZmwoVSxHLFgpe3N3aXRjaChHKXtjYXNlIDA6cmV0dXJuIFg/ZnVuY3Rpb24odXQpe3JldHVybiBydFt1dF19OmZ1bmN0aW9uKHV0KXtyZXR1cm4geHRbdXRdfTtjYXNlIDE6cmV0dXJuIFg/ZnVuY3Rpb24odXQpe3JldHVybiBHdFt1dD4+MV19OmZ1bmN0aW9uKHV0KXtyZXR1cm4gcGVbdXQ+PjFdfTtjYXNlIDI6cmV0dXJuIFg/ZnVuY3Rpb24odXQpe3JldHVybiByZVt1dD4+Ml19OmZ1bmN0aW9uKHV0KXtyZXR1cm4gZGVbdXQ+PjJdfTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gaW50ZWdlciB0eXBlOiAiK1UpfX1mdW5jdGlvbiB1bChVLEcsWCxRLHV0KXtHPUJuKEcpLHV0PT09LTEmJih1dD00Mjk0OTY3Mjk1KTt2YXIgT3Q9RnIoWCksU3Q9ZnVuY3Rpb24ocXQpe3JldHVybiBxdH07aWYoUT09PTApe3ZhciBodD0zMi04Klg7U3Q9ZnVuY3Rpb24ocXQpe3JldHVybiBxdDw8aHQ+Pj5odH19dmFyIHl0PUcuaW5kZXhPZigidW5zaWduZWQiKSE9LTE7cnIoVSx7bmFtZTpHLGZyb21XaXJlVHlwZTpTdCx0b1dpcmVUeXBlOmZ1bmN0aW9uKHF0LEp0KXtpZih0eXBlb2YgSnQhPSJudW1iZXIiJiZ0eXBlb2YgSnQhPSJib29sZWFuIil0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAiJytPaShKdCkrJyIgdG8gJyt0aGlzLm5hbWUpO2lmKEp0PFF8fEp0PnV0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1Bhc3NpbmcgYSBudW1iZXIgIicrT2koSnQpKyciIGZyb20gSlMgc2lkZSB0byBDL0MrKyBzaWRlIHRvIGFuIGFyZ3VtZW50IG9mIHR5cGUgIicrRysnIiwgd2hpY2ggaXMgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UgWycrUSsiLCAiK3V0KyJdISIpO3JldHVybiB5dD9KdD4+PjA6SnR8MH0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpmbChHLE90LFEhPT0wKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfWZ1bmN0aW9uIGxsKFUsRyxYKXt2YXIgUT1bSW50OEFycmF5LFVpbnQ4QXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXldLHV0PVFbR107ZnVuY3Rpb24gT3QoU3Qpe1N0PVN0Pj4yO3ZhciBodD1kZSx5dD1odFtTdF0scXQ9aHRbU3QrMV07cmV0dXJuIG5ldyB1dChkdCxxdCx5dCl9WD1CbihYKSxycihVLHtuYW1lOlgsZnJvbVdpcmVUeXBlOk90LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6T3R9LHtpZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zOiEwfSl9ZnVuY3Rpb24gcGwoVSxHKXtHPUJuKEcpO3ZhciBYPUc9PT0ic3RkOjpzdHJpbmciO3JyKFUse25hbWU6Ryxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oUSl7dmFyIHV0PWRlW1E+PjJdLE90O2lmKFgpZm9yKHZhciBTdD1RKzQsaHQ9MDtodDw9dXQ7KytodCl7dmFyIHl0PVErNCtodDtpZihodD09dXR8fHh0W3l0XT09MCl7dmFyIHF0PXl0LVN0LEp0PWsoU3QscXQpO090PT09dm9pZCAwP090PUp0OihPdCs9IlwwIixPdCs9SnQpLFN0PXl0KzF9fWVsc2V7Zm9yKHZhciBUZT1uZXcgQXJyYXkodXQpLGh0PTA7aHQ8dXQ7KytodClUZVtodF09U3RyaW5nLmZyb21DaGFyQ29kZSh4dFtRKzQraHRdKTtPdD1UZS5qb2luKCIiKX1yZXR1cm4gSyhRKSxPdH0sdG9XaXJlVHlwZTpmdW5jdGlvbihRLHV0KXt1dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYodXQ9bmV3IFVpbnQ4QXJyYXkodXQpKTt2YXIgT3QsU3Q9dHlwZW9mIHV0PT0ic3RyaW5nIjtTdHx8dXQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx1dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHx1dCBpbnN0YW5jZW9mIEludDhBcnJheXx8TGUoIkNhbm5vdCBwYXNzIG5vbi1zdHJpbmcgdG8gc3RkOjpzdHJpbmciKSxYJiZTdD9PdD1mdW5jdGlvbigpe3JldHVybiBSKHV0KX06T3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdXQubGVuZ3RofTt2YXIgaHQ9T3QoKSx5dD1WKDQraHQrMSk7aWYoZGVbeXQ+PjJdPWh0LFgmJlN0KVcodXQseXQrNCxodCsxKTtlbHNlIGlmKFN0KWZvcih2YXIgcXQ9MDtxdDxodDsrK3F0KXt2YXIgSnQ9dXQuY2hhckNvZGVBdChxdCk7SnQ+MjU1JiYoSyh5dCksTGUoIlN0cmluZyBoYXMgVVRGLTE2IGNvZGUgdW5pdHMgdGhhdCBkbyBub3QgZml0IGluIDggYml0cyIpKSx4dFt5dCs0K3F0XT1KdH1lbHNlIGZvcih2YXIgcXQ9MDtxdDxodDsrK3F0KXh0W3l0KzQrcXRdPXV0W3F0XTtyZXR1cm4gUSE9PW51bGwmJlEucHVzaChLLHl0KSx5dH0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpmcixkZXN0cnVjdG9yRnVuY3Rpb246ZnVuY3Rpb24oUSl7SyhRKX19KX1mdW5jdGlvbiBkbChVLEcsWCl7WD1CbihYKTt2YXIgUSx1dCxPdCxTdCxodDtHPT09Mj8oUT1hdCx1dD1sdCxTdD1fdCxPdD1mdW5jdGlvbigpe3JldHVybiBwZX0saHQ9MSk6Rz09PTQmJihRPW90LHV0PVB0LFN0PWd0LE90PWZ1bmN0aW9uKCl7cmV0dXJuIGRlfSxodD0yKSxycihVLHtuYW1lOlgsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKHl0KXtmb3IodmFyIHF0PWRlW3l0Pj4yXSxKdD1PdCgpLFRlLEplPXl0KzQsYm49MDtibjw9cXQ7Kytibil7dmFyIGNvPXl0KzQrYm4qRztpZihibj09cXR8fEp0W2NvPj5odF09PTApe3ZhciBGbz1jby1KZSxwcj1RKEplLEZvKTtUZT09PXZvaWQgMD9UZT1wcjooVGUrPSJcMCIsVGUrPXByKSxKZT1jbytHfX1yZXR1cm4gSyh5dCksVGV9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oeXQscXQpe3R5cGVvZiBxdCE9InN0cmluZyImJkxlKCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIEMrKyBzdHJpbmcgdHlwZSAiK1gpO3ZhciBKdD1TdChxdCksVGU9Vig0K0p0K0cpO3JldHVybiBkZVtUZT4+Ml09SnQ+Pmh0LHV0KHF0LFRlKzQsSnQrRykseXQhPT1udWxsJiZ5dC5wdXNoKEssVGUpLFRlfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZyLGRlc3RydWN0b3JGdW5jdGlvbjpmdW5jdGlvbih5dCl7Syh5dCl9fSl9ZnVuY3Rpb24gbWwoVSxHLFgsUSx1dCxPdCl7cm5bVV09e25hbWU6Qm4oRykscmF3Q29uc3RydWN0b3I6S28oWCxRKSxyYXdEZXN0cnVjdG9yOktvKHV0LE90KSxmaWVsZHM6W119fWZ1bmN0aW9uIGhsKFUsRyxYLFEsdXQsT3QsU3QsaHQseXQscXQpe3JuW1VdLmZpZWxkcy5wdXNoKHtmaWVsZE5hbWU6Qm4oRyksZ2V0dGVyUmV0dXJuVHlwZTpYLGdldHRlcjpLbyhRLHV0KSxnZXR0ZXJDb250ZXh0Ok90LHNldHRlckFyZ3VtZW50VHlwZTpTdCxzZXR0ZXI6S28oaHQseXQpLHNldHRlckNvbnRleHQ6cXR9KX1mdW5jdGlvbiBfbChVLEcpe0c9Qm4oRykscnIoVSx7aXNWb2lkOiEwLG5hbWU6RyxhcmdQYWNrQWR2YW5jZTowLGZyb21XaXJlVHlwZTpmdW5jdGlvbigpe30sdG9XaXJlVHlwZTpmdW5jdGlvbihYLFEpe319KX1mdW5jdGlvbiBucyhVKXtyZXR1cm4gVXx8TGUoIkNhbm5vdCB1c2UgZGVsZXRlZCB2YWwuIGhhbmRsZSA9ICIrVSksd29bVV0udmFsdWV9ZnVuY3Rpb24geWwoVSxHLFgpe1U9bnMoVSksRz1CcyhHLCJlbXZhbDo6YXMiKTt2YXIgUT1bXSx1dD1scihRKTtyZXR1cm4gcmVbWD4+Ml09dXQsRy50b1dpcmVUeXBlKFEsVSl9dmFyIGdsPXt9O2Z1bmN0aW9uIFVzKFUpe3ZhciBHPWdsW1VdO3JldHVybiBHPT09dm9pZCAwP0JuKFUpOkd9dmFyIFZjPVtdO2Z1bmN0aW9uIEFsKFUsRyxYLFEpe1U9VmNbVV0sRz1ucyhHKSxYPVVzKFgpLFUoRyxYLG51bGwsUSl9ZnVuY3Rpb24gZWYoKXtyZXR1cm4gdHlwZW9mIGdsb2JhbFRoaXM9PSJvYmplY3QiP2dsb2JhbFRoaXM6ZnVuY3Rpb24oKXtyZXR1cm4gRnVuY3Rpb259KCkoInJldHVybiB0aGlzIikoKX1mdW5jdGlvbiBibChVKXtyZXR1cm4gVT09PTA/bHIoZWYoKSk6KFU9VXMoVSksbHIoZWYoKVtVXSkpfWZ1bmN0aW9uIHdsKFUpe3ZhciBHPVZjLmxlbmd0aDtyZXR1cm4gVmMucHVzaChVKSxHfWZ1bmN0aW9uIFRsKFUsRyl7Zm9yKHZhciBYPW5ldyBBcnJheShVKSxRPTA7UTxVOysrUSlYW1FdPUJzKHJlWyhHPj4yKStRXSwicGFyYW1ldGVyICIrUSk7cmV0dXJuIFh9ZnVuY3Rpb24gT2woVSxHKXtmb3IodmFyIFg9VGwoVSxHKSxRPVhbMF0sdXQ9US5uYW1lKyJfJCIrWC5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYm4pe3JldHVybiBibi5uYW1lfSkuam9pbigiXyIpKyIkIixPdD1bInJldFR5cGUiXSxTdD1bUV0saHQ9IiIseXQ9MDt5dDxVLTE7Kyt5dClodCs9KHl0IT09MD8iLCAiOiIiKSsiYXJnIit5dCxPdC5wdXNoKCJhcmdUeXBlIit5dCksU3QucHVzaChYWzEreXRdKTtmb3IodmFyIHF0PSRpKCJtZXRob2RDYWxsZXJfIit1dCksSnQ9InJldHVybiBmdW5jdGlvbiAiK3F0K2AoaGFuZGxlLCBuYW1lLCBkZXN0cnVjdG9ycywgYXJncykgewpgLFRlPTAseXQ9MDt5dDxVLTE7Kyt5dClKdCs9IiAgICB2YXIgYXJnIit5dCsiID0gYXJnVHlwZSIreXQrIi5yZWFkVmFsdWVGcm9tUG9pbnRlcihhcmdzIisoVGU/IisiK1RlOiIiKStgKTsKYCxUZSs9WFt5dCsxXS5hcmdQYWNrQWR2YW5jZTtKdCs9IiAgICB2YXIgcnYgPSBoYW5kbGVbbmFtZV0oIitodCtgKTsKYDtmb3IodmFyIHl0PTA7eXQ8VS0xOysreXQpWFt5dCsxXS5kZWxldGVPYmplY3QmJihKdCs9IiAgICBhcmdUeXBlIit5dCsiLmRlbGV0ZU9iamVjdChhcmciK3l0K2ApOwpgKTtRLmlzVm9pZHx8KEp0Kz1gICAgIHJldHVybiByZXRUeXBlLnRvV2lyZVR5cGUoZGVzdHJ1Y3RvcnMsIHJ2KTsKYCksSnQrPWB9OwpgLE90LnB1c2goSnQpO3ZhciBKZT1KYShGdW5jdGlvbixPdCkuYXBwbHkobnVsbCxTdCk7cmV0dXJuIHdsKEplKX1mdW5jdGlvbiBFbChVKXtyZXR1cm4gVT1VcyhVKSxscihuW1VdKX1mdW5jdGlvbiBSbChVLEcpe3JldHVybiBVPW5zKFUpLEc9bnMoRyksbHIoVVtHXSl9ZnVuY3Rpb24gU2woVSl7VT40JiYod29bVV0ucmVmY291bnQrPTEpfWZ1bmN0aW9uIHhsKFUpe2Zvcih2YXIgRz0iIixYPTA7WDxVOysrWClHKz0oWCE9PTA/IiwgIjoiIikrImFyZyIrWDtmb3IodmFyIFE9InJldHVybiBmdW5jdGlvbiBlbXZhbF9hbGxvY2F0b3JfIitVK2AoY29uc3RydWN0b3IsIGFyZ1R5cGVzLCBhcmdzKSB7CmAsWD0wO1g8VTsrK1gpUSs9InZhciBhcmdUeXBlIitYKyIgPSByZXF1aXJlUmVnaXN0ZXJlZFR5cGUoTW9kdWxlWydIRUFQMzInXVsoYXJnVHlwZXMgPj4+IDIpICsgIitYKyddLCAicGFyYW1ldGVyICcrWCtgIik7CnZhciBhcmdgK1grIiA9IGFyZ1R5cGUiK1grYC5yZWFkVmFsdWVGcm9tUG9pbnRlcihhcmdzKTsKYXJncyArPSBhcmdUeXBlYCtYK2BbJ2FyZ1BhY2tBZHZhbmNlJ107CmA7cmV0dXJuIFErPSJ2YXIgb2JqID0gbmV3IGNvbnN0cnVjdG9yKCIrRytgKTsKcmV0dXJuIF9fZW12YWxfcmVnaXN0ZXIob2JqKTsKfQpgLG5ldyBGdW5jdGlvbigicmVxdWlyZVJlZ2lzdGVyZWRUeXBlIiwiTW9kdWxlIiwiX19lbXZhbF9yZWdpc3RlciIsUSkoQnMsbixscil9dmFyIG5mPXt9O2Z1bmN0aW9uIENsKFUsRyxYLFEpe1U9bnMoVSk7dmFyIHV0PW5mW0ddO3JldHVybiB1dHx8KHV0PXhsKEcpLG5mW0ddPXV0KSx1dChVLFgsUSl9ZnVuY3Rpb24gUGwoVSl7cmV0dXJuIGxyKFVzKFUpKX1mdW5jdGlvbiBNbChVKXt2YXIgRz13b1tVXS52YWx1ZTtSbihHKSxHYyhVKX1mdW5jdGlvbiBObCgpe1dlKCl9ZnVuY3Rpb24gSWwoVSxHLFgpe3h0LmNvcHlXaXRoaW4oVSxHLEcrWCl9ZnVuY3Rpb24gdmwoVSl7dHJ5e3JldHVybiBBLmdyb3coVS1kdC5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLFF0KEEuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24gRmwoVSl7dmFyIEc9eHQubGVuZ3RoO1U9VT4+PjA7dmFyIFg9MjE0NzQ4MzY0ODtpZihVPlgpcmV0dXJuITE7Zm9yKHZhciBRPTE7UTw9NDtRKj0yKXt2YXIgdXQ9RyooMSsuMi9RKTt1dD1NYXRoLm1pbih1dCxVKzEwMDY2MzI5Nik7dmFyIE90PU1hdGgubWluKFgsUnQoTWF0aC5tYXgoVSx1dCksNjU1MzYpKSxTdD12bChPdCk7aWYoU3QpcmV0dXJuITB9cmV0dXJuITF9dmFyIGtzPXttYXBwaW5nczp7fSxidWZmZXJzOltudWxsLFtdLFtdXSxwcmludENoYXI6ZnVuY3Rpb24oVSxHKXt2YXIgWD1rcy5idWZmZXJzW1VdO0c9PT0wfHxHPT09MTA/KChVPT09MT9NOk4pKGooWCwwKSksWC5sZW5ndGg9MCk6WC5wdXNoKEcpfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtrcy52YXJhcmdzKz00O3ZhciBVPXJlW2tzLnZhcmFyZ3MtND4+Ml07cmV0dXJuIFV9LGdldFN0cjpmdW5jdGlvbihVKXt2YXIgRz1rKFUpO3JldHVybiBHfSxnZXQ2NDpmdW5jdGlvbihVLEcpe3JldHVybiBVfX07ZnVuY3Rpb24gTGwoVSl7cmV0dXJuIDB9ZnVuY3Rpb24gRGwoVSxHLFgsUSx1dCl7fWZ1bmN0aW9uIEJsKFUsRyxYLFEpe2Zvcih2YXIgdXQ9MCxPdD0wO090PFg7T3QrKyl7Zm9yKHZhciBTdD1yZVtHK090Kjg+PjJdLGh0PXJlW0crKE90KjgrNCk+PjJdLHl0PTA7eXQ8aHQ7eXQrKylrcy5wcmludENoYXIoVSx4dFtTdCt5dF0pO3V0Kz1odH1yZXR1cm4gcmVbUT4+Ml09dXQsMH1mdW5jdGlvbiBVbChVKXtJKFV8MCl9RnM9bi5JbnRlcm5hbEVycm9yPVppKEVycm9yLCJJbnRlcm5hbEVycm9yIiksTmMoKSxUaT1uLkJpbmRpbmdFcnJvcj1aaShFcnJvciwiQmluZGluZ0Vycm9yIiksTXUoKSxxdSgpLFZ1KCksWmE9bi5VbmJvdW5kVHlwZUVycm9yPVppKEVycm9yLCJVbmJvdW5kVHlwZUVycm9yIiksZWwoKTt2YXIga2w9e3Q6aG8sSTpUdSx4Oll1LHc6JHUsZDpadSxrOlF1LEg6bmwsbjpybCxhOmlsLEE6Y2wsaTphbCxqOnVsLGg6bGwsQjpwbCx2OmRsLHU6bWwsYzpobCxKOl9sLG06eWwsczpBbCxiOkdjLHk6YmwscDpPbCxyOkVsLGU6UmwsZzpTbCxxOkNsLGY6UGwsbDpNbCxvOk5sLEU6SWwsRjpGbCxHOkxsLEM6RGwsejpCbCxEOlVsfSxvZj1YbigpLHhlPW4uX19fd2FzbV9jYWxsX2N0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuKHhlPW4uX19fd2FzbV9jYWxsX2N0b3JzPW4uYXNtLkwpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVj1uLl9tYWxsb2M9ZnVuY3Rpb24oKXtyZXR1cm4oVj1uLl9tYWxsb2M9bi5hc20uTSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLPW4uX2ZyZWU9ZnVuY3Rpb24oKXtyZXR1cm4oSz1uLl9mcmVlPW4uYXNtLk4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdHQ9bi5fX19nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybih0dD1uLl9fX2dldFR5cGVOYW1lPW4uYXNtLlApLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTXQ9bi5fX19lbWJpbmRfcmVnaXN0ZXJfbmF0aXZlX2FuZF9idWlsdGluX3R5cGVzPWZ1bmN0aW9uKCl7cmV0dXJuKE10PW4uX19fZW1iaW5kX3JlZ2lzdGVyX25hdGl2ZV9hbmRfYnVpbHRpbl90eXBlcz1uLmFzbS5RKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHVlPW4uZHluQ2FsbF9qaWppPWZ1bmN0aW9uKCl7cmV0dXJuKHVlPW4uZHluQ2FsbF9qaWppPW4uYXNtLlIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sd2U7ZnVuY3Rpb24gRWkoVSl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitVKyIpIix0aGlzLnN0YXR1cz1VfXFuPWZ1bmN0aW9uIFUoKXt3ZXx8emMoKSx3ZXx8KHFuPVUpfTtmdW5jdGlvbiB6YyhVKXtpZihVPVV8fGYsbW4+MHx8KHBuKCksbW4+MCkpcmV0dXJuO2Z1bmN0aW9uIEcoKXt3ZXx8KHdlPSEwLG4uY2FsbGVkUnVuPSEwLCFTJiYoRW4oKSxvZSgpLG8obiksbi5vblJ1bnRpbWVJbml0aWFsaXplZCYmbi5vblJ1bnRpbWVJbml0aWFsaXplZCgpLFl0KCkpKX1uLnNldFN0YXR1cz8obi5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe24uc2V0U3RhdHVzKCIiKX0sMSksRygpfSwxKSk6RygpfWlmKG4ucnVuPXpjLG4ucHJlSW5pdClmb3IodHlwZW9mIG4ucHJlSW5pdD09ImZ1bmN0aW9uIiYmKG4ucHJlSW5pdD1bbi5wcmVJbml0XSk7bi5wcmVJbml0Lmxlbmd0aD4wOyluLnByZUluaXQucG9wKCkoKTtyZXR1cm4gemMoKSxlLnJlYWR5fX0oKTt0eXBlb2YgYm09PSJvYmplY3QiJiZ0eXBlb2YgdTE9PSJvYmplY3QiP3UxLmV4cG9ydHM9ZjE6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gZjF9KTp0eXBlb2YgYm09PSJvYmplY3QiJiYoYm0uQkFTSVM9ZjEpfSk7dmFyIGwxPXt9O2xlKGwxLHtkZWZhdWx0OigpPT5KOH0pO2Z1bmN0aW9uIFg4KHQsZSl7eS50eXBlT2Yub2JqZWN0KCJ0cmFuc2NvZGVyTW9kdWxlIix3dSk7bGV0IG49dC5rdHgyQnVmZmVyLG89dC5zdXBwb3J0ZWRUYXJnZXRGb3JtYXRzLHI7dHJ5e3I9dHgobil9Y2F0Y2h7dGhyb3cgbmV3IEFlKCJJbnZhbGlkIEtUWDIgZmlsZS4iKX1pZihyLmxheWVyQ291bnQhPT0wKXRocm93IG5ldyBBZSgiS1RYMiB0ZXh0dXJlIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZC4iKTtpZihyLnBpeGVsRGVwdGghPT0wKXRocm93IG5ldyBBZSgiS1RYMiAzRCB0ZXh0dXJlcyBhcmUgdW5zdXBwb3J0ZWQuIik7bGV0IGk9ci5kYXRhRm9ybWF0RGVzY3JpcHRvclswXSxzPW5ldyBBcnJheShyLmxldmVsQ291bnQpO3JldHVybiByLnZrRm9ybWF0PT09MCYmKGkuY29sb3JNb2RlbD09PWl4fHxpLmNvbG9yTW9kZWw9PT1zeCk/JDgobixyLG8sd3UsZSxzKTooZS5wdXNoKG4uYnVmZmVyKSxZOChyLHMpKSxzfWZ1bmN0aW9uIFk4KHQsZSl7bGV0IG49dC52a0Zvcm1hdD09PWJ1LlZLX0ZPUk1BVF9SOEc4QjhfU1JHQj9Hbi5SR0I6R24uUkdCQSxvO3QudmtGb3JtYXQ9PT1idS5WS19GT1JNQVRfUjhHOEI4QThfVU5PUk0/bz1pby5VTlNJR05FRF9CWVRFOnQudmtGb3JtYXQ9PT1idS5WS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NGTE9BVD9vPWlvLkhBTEZfRkxPQVQ6dC52a0Zvcm1hdD09PWJ1LlZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfU0ZMT0FUJiYobz1pby5GTE9BVCk7Zm9yKGxldCByPTA7cjx0LmxldmVscy5sZW5ndGg7KytyKXtsZXQgaT17fTtlW3JdPWk7bGV0IHM9dC5sZXZlbHNbcl0ubGV2ZWxEYXRhLGY9dC5waXhlbFdpZHRoPj5yLHU9dC5waXhlbEhlaWdodD4+cixjPWYqdSpHbi5jb21wb25lbnRzTGVuZ3RoKG4pO2ZvcihsZXQgbD0wO2w8dC5mYWNlQ291bnQ7KytsKXtsZXQgcD1zLmJ5dGVPZmZzZXQrYyp0LnR5cGVTaXplKmwsZDshbShvKXx8aW8uc2l6ZUluQnl0ZXMobyk9PT0xP2Q9bmV3IFVpbnQ4QXJyYXkocy5idWZmZXIscCxjKTppby5zaXplSW5CeXRlcyhvKT09PTI/ZD1uZXcgVWludDE2QXJyYXkocy5idWZmZXIscCxjKTpkPW5ldyBGbG9hdDMyQXJyYXkocy5idWZmZXIscCxjKSxpW3J4W2xdXT17aW50ZXJuYWxGb3JtYXQ6bixkYXRhdHlwZTpvLHdpZHRoOmYsaGVpZ2h0OnUsbGV2ZWxCdWZmZXI6ZH19fX1mdW5jdGlvbiAkOCh0LGUsbixvLHIsaSl7bGV0IHM9bmV3IG8uS1RYMkZpbGUodCksZj1zLmdldFdpZHRoKCksdT1zLmdldEhlaWdodCgpLGM9cy5nZXRMZXZlbHMoKSxsPXMuZ2V0SGFzQWxwaGEoKTtpZighKGY+MCl8fCEodT4wKXx8IShjPjApKXRocm93IHMuY2xvc2UoKSxzLmRlbGV0ZSgpLG5ldyBBZSgiSW52YWxpZCBLVFgyIGZpbGUiKTtsZXQgcCxkLGg9ZS5kYXRhRm9ybWF0RGVzY3JpcHRvclswXSxfPW8udHJhbnNjb2Rlcl90ZXh0dXJlX2Zvcm1hdDtpZihoLmNvbG9yTW9kZWw9PT1peClpZihuLmV0YylwPWw/R24uUkdCQThfRVRDMl9FQUM6R24uUkdCOF9FVEMyLGQ9bD9fLmNURkVUQzJfUkdCQTpfLmNURkVUQzFfUkdCO2Vsc2UgaWYobi5ldGMxJiYhbClwPUduLlJHQl9FVEMxLGQ9Xy5jVEZFVEMxX1JHQjtlbHNlIGlmKG4uczN0YylwPWw/R24uUkdCQV9EWFQ1OkduLlJHQl9EWFQxLGQ9bD9fLmNURkJDM19SR0JBOl8uY1RGQkMxX1JHQjtlbHNlIGlmKG4ucHZydGMpcD1sP0duLlJHQkFfUFZSVENfNEJQUFYxOkduLlJHQl9QVlJUQ180QlBQVjEsZD1sP18uY1RGUFZSVEMxXzRfUkdCQTpfLmNURlBWUlRDMV80X1JHQjtlbHNlIGlmKG4uYXN0YylwPUduLlJHQkFfQVNUQyxkPV8uY1RGQVNUQ180eDRfUkdCQTtlbHNlIGlmKG4uYmM3KXA9R24uUkdCQV9CQzcsZD1fLmNURkJDN19SR0JBO2Vsc2UgdGhyb3cgbmV3IEFlKCJObyB0cmFuc2NvZGluZyBmb3JtYXQgdGFyZ2V0IGF2YWlsYWJsZSBmb3IgRVRDMVMgY29tcHJlc3NlZCBrdHgyLiIpO2Vsc2UgaWYoaC5jb2xvck1vZGVsPT09c3gpaWYobi5hc3RjKXA9R24uUkdCQV9BU1RDLGQ9Xy5jVEZBU1RDXzR4NF9SR0JBO2Vsc2UgaWYobi5iYzcpcD1Hbi5SR0JBX0JDNyxkPV8uY1RGQkM3X1JHQkE7ZWxzZSBpZihuLnMzdGMpcD1sP0duLlJHQkFfRFhUNTpHbi5SR0JfRFhUMSxkPWw/Xy5jVEZCQzNfUkdCQTpfLmNURkJDMV9SR0I7ZWxzZSBpZihuLmV0YylwPWw/R24uUkdCQThfRVRDMl9FQUM6R24uUkdCOF9FVEMyLGQ9bD9fLmNURkVUQzJfUkdCQTpfLmNURkVUQzFfUkdCO2Vsc2UgaWYobi5ldGMxJiYhbClwPUduLlJHQl9FVEMxLGQ9Xy5jVEZFVEMxX1JHQjtlbHNlIGlmKG4ucHZydGMpcD1sP0duLlJHQkFfUFZSVENfNEJQUFYxOkduLlJHQl9QVlJUQ180QlBQVjEsZD1sP18uY1RGUFZSVEMxXzRfUkdCQTpfLmNURlBWUlRDMV80X1JHQjtlbHNlIHRocm93IG5ldyBBZSgiTm8gdHJhbnNjb2RpbmcgZm9ybWF0IHRhcmdldCBhdmFpbGFibGUgZm9yIFVBU1RDIGNvbXByZXNzZWQga3R4Mi4iKTtpZighcy5zdGFydFRyYW5zY29kaW5nKCkpdGhyb3cgcy5jbG9zZSgpLHMuZGVsZXRlKCksbmV3IEFlKCJzdGFydFRyYW5zY29kaW5nKCkgZmFpbGVkIik7Zm9yKGxldCBnPTA7ZzxlLmxldmVscy5sZW5ndGg7KytnKXtsZXQgYj17fTtpW2ddPWIsZj1lLnBpeGVsV2lkdGg+PmcsdT1lLnBpeGVsSGVpZ2h0Pj5nO2xldCB3PXMuZ2V0SW1hZ2VUcmFuc2NvZGVkU2l6ZUluQnl0ZXMoZywwLDAsZC52YWx1ZSksTz1uZXcgVWludDhBcnJheSh3KSxFPXMudHJhbnNjb2RlSW1hZ2UoTyxnLDAsMCxkLnZhbHVlLDAsLTEsLTEpO2lmKCFtKEUpKXRocm93IG5ldyBBZSgidHJhbnNjb2RlSW1hZ2UoKSBmYWlsZWQuIik7ci5wdXNoKE8uYnVmZmVyKSxiW3J4WzBdXT17aW50ZXJuYWxGb3JtYXQ6cCx3aWR0aDpmLGhlaWdodDp1LGxldmVsQnVmZmVyOk99fXJldHVybiBzLmNsb3NlKCkscy5kZWxldGUoKSxpfWFzeW5jIGZ1bmN0aW9uIFo4KHQsZSl7bGV0IG49dC53ZWJBc3NlbWJseUNvbmZpZyxvPW94LmRlZmF1bHQ/P3NlbGYuQkFTSVM7cmV0dXJuIG0obi53YXNtQmluYXJ5RmlsZSk/d3U9YXdhaXQgbyhuKTp3dT1hd2FpdCBvKCksd3UuaW5pdGlhbGl6ZUJhc2lzKCksITB9ZnVuY3Rpb24gUTgodCxlKXtsZXQgbj10LndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBtKG4pP1o4KHQsZSk6WDgodCxlKX12YXIgb3gscngsaXgsc3gsd3UsSjgscDE9JCgoKT0+e2Z0KCk7V3QoKTtaUygpO3RpKCk7UVMoKTthMSgpO1puKCk7ZXgoKTtveD1tcihueCgpLDEpLHJ4PVsicG9zaXRpdmVYIiwibmVnYXRpdmVYIiwicG9zaXRpdmVZIiwibmVnYXRpdmVZIiwicG9zaXRpdmVaIiwibmVnYXRpdmVaIl0saXg9MTYzLHN4PTE2NjtKOD1VZShROCl9KTt2YXIgY3g9e307dmFyIGQxPSQoKCk9PntzZWxmLm9ubWVzc2FnZT1mdW5jdGlvbih0KXtsZXQgZT10LmRhdGEuYXJyYXksbj1zZWxmLndlYmtpdFBvc3RNZXNzYWdlfHxzZWxmLnBvc3RNZXNzYWdlO3RyeXtuKHthcnJheTplfSxbZS5idWZmZXJdKX1jYXRjaHtuKHt9KX19fSk7dmFyIHdtLFRtLGF4PSQoKCk9PntrZSgpO0R0KCk7V3QoKTtmdCgpO0h0KCk7d209e307d20uY2xpcFRyaWFuZ2xlQXRBeGlzQWxpZ25lZFRocmVzaG9sZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoInRocmVzaG9sZCBpcyByZXF1aXJlZC4iKTtpZighbShlKSl0aHJvdyBuZXcgRCgia2VlcEFib3ZlIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG4pKXRocm93IG5ldyBEKCJ1MCBpcyByZXF1aXJlZC4iKTtpZighbShvKSl0aHJvdyBuZXcgRCgidTEgaXMgcmVxdWlyZWQuIik7aWYoIW0ocikpdGhyb3cgbmV3IEQoInUyIGlzIHJlcXVpcmVkLiIpO20oaSk/aS5sZW5ndGg9MDppPVtdO2xldCBzLGYsdTtlPyhzPW48dCxmPW88dCx1PXI8dCk6KHM9bj50LGY9bz50LHU9cj50KTtsZXQgYz1zK2YrdSxsLHAsZCxoLF8sZztyZXR1cm4gYz09PTE/cz8obD0odC1uKS8oby1uKSxwPSh0LW4pLyhyLW4pLGkucHVzaCgxKSxpLnB1c2goMikscCE9PTEmJihpLnB1c2goLTEpLGkucHVzaCgwKSxpLnB1c2goMiksaS5wdXNoKHApKSxsIT09MSYmKGkucHVzaCgtMSksaS5wdXNoKDApLGkucHVzaCgxKSxpLnB1c2gobCkpKTpmPyhkPSh0LW8pLyhyLW8pLGg9KHQtbykvKG4tbyksaS5wdXNoKDIpLGkucHVzaCgwKSxoIT09MSYmKGkucHVzaCgtMSksaS5wdXNoKDEpLGkucHVzaCgwKSxpLnB1c2goaCkpLGQhPT0xJiYoaS5wdXNoKC0xKSxpLnB1c2goMSksaS5wdXNoKDIpLGkucHVzaChkKSkpOnUmJihfPSh0LXIpLyhuLXIpLGc9KHQtcikvKG8tciksaS5wdXNoKDApLGkucHVzaCgxKSxnIT09MSYmKGkucHVzaCgtMSksaS5wdXNoKDIpLGkucHVzaCgxKSxpLnB1c2goZykpLF8hPT0xJiYoaS5wdXNoKC0xKSxpLnB1c2goMiksaS5wdXNoKDApLGkucHVzaChfKSkpOmM9PT0yPyFzJiZuIT09dD8oaD0odC1vKS8obi1vKSxfPSh0LXIpLyhuLXIpLGkucHVzaCgwKSxpLnB1c2goLTEpLGkucHVzaCgxKSxpLnB1c2goMCksaS5wdXNoKGgpLGkucHVzaCgtMSksaS5wdXNoKDIpLGkucHVzaCgwKSxpLnB1c2goXykpOiFmJiZvIT09dD8oZz0odC1yKS8oby1yKSxsPSh0LW4pLyhvLW4pLGkucHVzaCgxKSxpLnB1c2goLTEpLGkucHVzaCgyKSxpLnB1c2goMSksaS5wdXNoKGcpLGkucHVzaCgtMSksaS5wdXNoKDApLGkucHVzaCgxKSxpLnB1c2gobCkpOiF1JiZyIT09dCYmKHA9KHQtbikvKHItbiksZD0odC1vKS8oci1vKSxpLnB1c2goMiksaS5wdXNoKC0xKSxpLnB1c2goMCksaS5wdXNoKDIpLGkucHVzaChwKSxpLnB1c2goLTEpLGkucHVzaCgxKSxpLnB1c2goMiksaS5wdXNoKGQpKTpjIT09MyYmKGkucHVzaCgwKSxpLnB1c2goMSksaS5wdXNoKDIpKSxpfTt3bS5jb21wdXRlQmFyeWNlbnRyaWNDb29yZGluYXRlcz1mdW5jdGlvbih0LGUsbixvLHIsaSxzLGYsdSl7aWYoIW0odCkpdGhyb3cgbmV3IEQoInggaXMgcmVxdWlyZWQuIik7aWYoIW0oZSkpdGhyb3cgbmV3IEQoInkgaXMgcmVxdWlyZWQuIik7aWYoIW0obikpdGhyb3cgbmV3IEQoIngxIGlzIHJlcXVpcmVkLiIpO2lmKCFtKG8pKXRocm93IG5ldyBEKCJ5MSBpcyByZXF1aXJlZC4iKTtpZighbShyKSl0aHJvdyBuZXcgRCgieDIgaXMgcmVxdWlyZWQuIik7aWYoIW0oaSkpdGhyb3cgbmV3IEQoInkyIGlzIHJlcXVpcmVkLiIpO2lmKCFtKHMpKXRocm93IG5ldyBEKCJ4MyBpcyByZXF1aXJlZC4iKTtpZighbShmKSl0aHJvdyBuZXcgRCgieTMgaXMgcmVxdWlyZWQuIik7bGV0IGM9bi1zLGw9cy1yLHA9aS1mLGQ9by1mLGg9MS8ocCpjK2wqZCksXz1lLWYsZz10LXMsYj0ocCpnK2wqXykqaCx3PSgtZCpnK2MqXykqaCxPPTEtYi13O3JldHVybiBtKHUpPyh1Lng9Yix1Lnk9dyx1Lno9Tyx1KTpuZXcgYShiLHcsTyl9O3dtLmNvbXB1dGVMaW5lU2VnbWVudExpbmVTZWdtZW50SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMsZix1KXt5LnR5cGVPZi5udW1iZXIoIngwMCIsdCkseS50eXBlT2YubnVtYmVyKCJ5MDAiLGUpLHkudHlwZU9mLm51bWJlcigieDAxIixuKSx5LnR5cGVPZi5udW1iZXIoInkwMSIsbykseS50eXBlT2YubnVtYmVyKCJ4MTAiLHIpLHkudHlwZU9mLm51bWJlcigieTEwIixpKSx5LnR5cGVPZi5udW1iZXIoIngxMSIscykseS50eXBlT2YubnVtYmVyKCJ5MTEiLGYpO2xldCBjPShzLXIpKihlLWkpLShmLWkpKih0LXIpLGw9KG4tdCkqKGUtaSktKG8tZSkqKHQtcikscD0oZi1pKSoobi10KS0ocy1yKSooby1lKTtpZihwPT09MClyZXR1cm47bGV0IGQ9Yy9wLGg9bC9wO2lmKGQ+PTAmJmQ8PTEmJmg+PTAmJmg8PTEpcmV0dXJuIG0odSl8fCh1PW5ldyBKKSx1Lng9dCtkKihuLXQpLHUueT1lK2QqKG8tZSksdX07VG09d219KTt2YXIgbTE9e307bGUobTEse2RlZmF1bHQ6KCk9PmhrfSk7ZnVuY3Rpb24gcGsodCxlKXtsZXQgbj10LmlzRWFzdENoaWxkLG89dC5pc05vcnRoQ2hpbGQscj1uP1pyOjAsaT1uP2puOlpyLHM9bz9acjowLGY9bz9qbjpacix1PW5rLGM9b2ssbD1yayxwPXNrO3UubGVuZ3RoPTAsYy5sZW5ndGg9MCxsLmxlbmd0aD0wLHAubGVuZ3RoPTA7bGV0IGQ9aWs7ZC5sZW5ndGg9MDtsZXQgaD17fSxfPXQudmVydGljZXMsZz10LmluZGljZXM7Zz1nLnN1YmFycmF5KDAsdC5pbmRleENvdW50V2l0aG91dFNraXJ0cyk7bGV0IGI9TXMuY2xvbmUodC5lbmNvZGluZyksdz1iLmhhc1ZlcnRleE5vcm1hbHMsTz0wLEU9dC52ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsVD10Lm1pbmltdW1IZWlnaHQseD10Lm1heGltdW1IZWlnaHQsTT1uZXcgQXJyYXkoRSksTj1uZXcgQXJyYXkoRSksRj1uZXcgQXJyYXkoRSksST13P25ldyBBcnJheShFKjIpOnZvaWQgMCx2PTIwLEIsQSxTLEMsTDtmb3IoQT0wLFM9MDtBPEU7KytBLFMrPTIpe2xldCBWZT1iLmRlY29kZVRleHR1cmVDb29yZGluYXRlcyhfLEEsdWspO2lmKEI9Yi5kZWNvZGVIZWlnaHQoXyxBKSxDPVAuY2xhbXAoVmUueCpqbnwwLDAsam4pLEw9UC5jbGFtcChWZS55KmpufDAsMCxqbiksRltBXT1QLmNsYW1wKChCLVQpLyh4LVQpKmpufDAsMCxqbiksQzx2JiYoQz0wKSxMPHYmJihMPTApLGpuLUM8diYmKEM9am4pLGpuLUw8diYmKEw9am4pLE1bQV09QyxOW0FdPUwsdyl7bGV0IGJlPWIuZ2V0T2N0RW5jb2RlZE5vcm1hbChfLEEsbGspO0lbU109YmUueCxJW1MrMV09YmUueX0obiYmQz49WnJ8fCFuJiZDPD1acikmJihvJiZMPj1acnx8IW8mJkw8PVpyKSYmKGhbQV09Tyx1LnB1c2goQyksYy5wdXNoKEwpLGwucHVzaChGW0FdKSx3JiYocC5wdXNoKElbU10pLHAucHVzaChJW1MrMV0pKSwrK08pfWxldCB6PVtdO3oucHVzaChuZXcgSG4pLHoucHVzaChuZXcgSG4pLHoucHVzaChuZXcgSG4pO2xldCBqPVtdO2oucHVzaChuZXcgSG4pLGoucHVzaChuZXcgSG4pLGoucHVzaChuZXcgSG4pO2xldCBrLHE7Zm9yKEE9MDtBPGcubGVuZ3RoO0ErPTMpe2xldCBWZT1nW0FdLGJlPWdbQSsxXSxsbj1nW0ErMl0scG49TVtWZV0sRW49TVtiZV0sb2U9TVtsbl07elswXS5pbml0aWFsaXplSW5kZXhlZChNLE4sRixJLFZlKSx6WzFdLmluaXRpYWxpemVJbmRleGVkKE0sTixGLEksYmUpLHpbMl0uaW5pdGlhbGl6ZUluZGV4ZWQoTSxOLEYsSSxsbik7bGV0IFl0PVRtLmNsaXBUcmlhbmdsZUF0QXhpc0FsaWduZWRUaHJlc2hvbGQoWnIsbixwbixFbixvZSx0ayk7az0wLCEoaz49WXQubGVuZ3RoKSYmKGs9alswXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQoWXQsayx6KSwhKGs+PVl0Lmxlbmd0aCkmJihrPWpbMV0uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KFl0LGsseiksIShrPj1ZdC5sZW5ndGgpJiYoaz1qWzJdLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdChZdCxrLHopLHE9VG0uY2xpcFRyaWFuZ2xlQXRBeGlzQWxpZ25lZFRocmVzaG9sZChacixvLGpbMF0uZ2V0VigpLGpbMV0uZ2V0VigpLGpbMl0uZ2V0VigpLGZ4KSx1eCh1LGMsbCxwLGQsaCxxLGosdyksazxZdC5sZW5ndGgmJihqWzJdLmNsb25lKGpbMV0pLGpbMl0uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KFl0LGsseikscT1UbS5jbGlwVHJpYW5nbGVBdEF4aXNBbGlnbmVkVGhyZXNob2xkKFpyLG8salswXS5nZXRWKCksalsxXS5nZXRWKCksalsyXS5nZXRWKCksZngpLHV4KHUsYyxsLHAsZCxoLHEsaix3KSkpKSl9bGV0IFc9bj8tam46MCxSPW8/LWpuOjAsbnQ9W10sYXQ9W10sbHQ9W10sX3Q9W10sb3Q9TnVtYmVyLk1BWF9WQUxVRSxQdD0tb3QsZ3Q9ZWs7Z3QubGVuZ3RoPTA7bGV0IFJ0PVkuY2xvbmUodC5lbGxpcHNvaWQpLGR0PU50LmNsb25lKHQuY2hpbGRSZWN0YW5nbGUpLHJ0PWR0Lm5vcnRoLHh0PWR0LnNvdXRoLEd0PWR0LmVhc3QscGU9ZHQud2VzdDtmb3IoR3Q8cGUmJihHdCs9UC5UV09fUEkpLEE9MDtBPHUubGVuZ3RoOysrQSlDPU1hdGgucm91bmQodVtBXSksQzw9cj8obnQucHVzaChBKSxDPTApOkM+PWk/KGx0LnB1c2goQSksQz1qbik6Qz1DKjIrVyx1W0FdPUMsTD1NYXRoLnJvdW5kKGNbQV0pLEw8PXM/KGF0LnB1c2goQSksTD0wKTpMPj1mPyhfdC5wdXNoKEEpLEw9am4pOkw9TCoyK1IsY1tBXT1MLEI9UC5sZXJwKFQseCxsW0FdL2puKSxCPG90JiYob3Q9QiksQj5QdCYmKFB0PUIpLGxbQV09QixPbS5sb25naXR1ZGU9UC5sZXJwKHBlLEd0LEMvam4pLE9tLmxhdGl0dWRlPVAubGVycCh4dCxydCxML2puKSxPbS5oZWlnaHQ9QixSdC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihPbSxZaSksZ3QucHVzaChZaS54KSxndC5wdXNoKFlpLnkpLGd0LnB1c2goWWkueik7bGV0IHJlPUF0LmZyb21WZXJ0aWNlcyhndCxhLlpFUk8sMyxhayksZGU9Q28uZnJvbVJlY3RhbmdsZShkdCxvdCxQdCxSdCxmayksWnQ9bmV3IFBzKFJ0KS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21WZXJ0aWNlc1Bvc3NpYmx5VW5kZXJFbGxpcHNvaWQocmUuY2VudGVyLGd0LDMscmUuY2VudGVyLG90LGNrKSxRdD1QdC1vdCxOZT1uZXcgVWludDE2QXJyYXkodS5sZW5ndGgrYy5sZW5ndGgrbC5sZW5ndGgpO2ZvcihBPTA7QTx1Lmxlbmd0aDsrK0EpTmVbQV09dVtBXTtsZXQgZ2U9dS5sZW5ndGg7Zm9yKEE9MDtBPGMubGVuZ3RoOysrQSlOZVtnZStBXT1jW0FdO2ZvcihnZSs9Yy5sZW5ndGgsQT0wO0E8bC5sZW5ndGg7KytBKU5lW2dlK0FdPWpuKihsW0FdLW90KS9RdDtsZXQgRWU9THQuY3JlYXRlVHlwZWRBcnJheSh1Lmxlbmd0aCxkKSx1bjtpZih3KXtsZXQgVmU9bmV3IFVpbnQ4QXJyYXkocCk7ZS5wdXNoKE5lLmJ1ZmZlcixFZS5idWZmZXIsVmUuYnVmZmVyKSx1bj1WZS5idWZmZXJ9ZWxzZSBlLnB1c2goTmUuYnVmZmVyLEVlLmJ1ZmZlcik7cmV0dXJue3ZlcnRpY2VzOk5lLmJ1ZmZlcixlbmNvZGVkTm9ybWFsczp1bixpbmRpY2VzOkVlLmJ1ZmZlcixtaW5pbXVtSGVpZ2h0Om90LG1heGltdW1IZWlnaHQ6UHQsd2VzdEluZGljZXM6bnQsc291dGhJbmRpY2VzOmF0LGVhc3RJbmRpY2VzOmx0LG5vcnRoSW5kaWNlczpfdCxib3VuZGluZ1NwaGVyZTpyZSxvcmllbnRlZEJvdW5kaW5nQm94OmRlLGhvcml6b25PY2NsdXNpb25Qb2ludDpadH19ZnVuY3Rpb24gSG4oKXt0aGlzLnZlcnRleEJ1ZmZlcj12b2lkIDAsdGhpcy5pbmRleD12b2lkIDAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5zZWNvbmQ9dm9pZCAwLHRoaXMucmF0aW89dm9pZCAwfWZ1bmN0aW9uIGx4KHQsZSl7KytFbTtsZXQgbj1ka1tFbV0sbz1ta1tFbV07cmV0dXJuIG49bm4ub2N0RGVjb2RlKHQuZmlyc3QuZ2V0Tm9ybWFsWCgpLHQuZmlyc3QuZ2V0Tm9ybWFsWSgpLG4pLG89bm4ub2N0RGVjb2RlKHQuc2Vjb25kLmdldE5vcm1hbFgoKSx0LnNlY29uZC5nZXROb3JtYWxZKCksbyksWWk9YS5sZXJwKG4sbyx0LnJhdGlvLFlpKSxhLm5vcm1hbGl6ZShZaSxZaSksbm4ub2N0RW5jb2RlKFlpLGUpLC0tRW0sZX1mdW5jdGlvbiB1eCh0LGUsbixvLHIsaSxzLGYsdSl7aWYocy5sZW5ndGg9PT0wKXJldHVybjtsZXQgYz0wLGw9MDtmb3IoO2w8cy5sZW5ndGg7KWw9am9bYysrXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQocyxsLGYpO2ZvcihsZXQgcD0wO3A8YzsrK3Ape2xldCBkPWpvW3BdO2lmKGQuaXNJbmRleGVkKCkpZC5uZXdJbmRleD1pW2QuaW5kZXhdLGQudUJ1ZmZlcj10LGQudkJ1ZmZlcj1lLGQuaGVpZ2h0QnVmZmVyPW4sdSYmKGQubm9ybWFsQnVmZmVyPW8pO2Vsc2V7bGV0IGg9ZC5nZXRLZXkoKTtpZihtKGlbaF0pKWQubmV3SW5kZXg9aVtoXTtlbHNle2xldCBfPXQubGVuZ3RoO3QucHVzaChkLmdldFUoKSksZS5wdXNoKGQuZ2V0VigpKSxuLnB1c2goZC5nZXRIKCkpLHUmJihvLnB1c2goZC5nZXROb3JtYWxYKCkpLG8ucHVzaChkLmdldE5vcm1hbFkoKSkpLGQubmV3SW5kZXg9XyxpW2hdPV99fX1jPT09Mz8oci5wdXNoKGpvWzBdLm5ld0luZGV4KSxyLnB1c2goam9bMV0ubmV3SW5kZXgpLHIucHVzaChqb1syXS5uZXdJbmRleCkpOmM9PT00JiYoci5wdXNoKGpvWzBdLm5ld0luZGV4KSxyLnB1c2goam9bMV0ubmV3SW5kZXgpLHIucHVzaChqb1syXS5uZXdJbmRleCksci5wdXNoKGpvWzBdLm5ld0luZGV4KSxyLnB1c2goam9bMl0ubmV3SW5kZXgpLHIucHVzaChqb1szXS5uZXdJbmRleCkpfXZhciBqbixacix0ayxmeCxlayxPbSxZaSxuayxvayxyayxpayxzayxjayxhayxmayx1ayxsayxIYSxFbSxkayxtayxqbyxoayxoMT0kKCgpPT57ZnMoKTt2ZSgpO2tlKCk7RHQoKTtJZSgpO2Z0KCk7JHQoKTtjdSgpO1plKCk7YXgoKTtLdCgpO2RhKCk7VG4oKTthdSgpO1puKCk7am49MzI3NjcsWnI9am4vMnwwLHRrPVtdLGZ4PVtdLGVrPVtdLE9tPW5ldyBjdCxZaT1uZXcgYSxuaz1bXSxvaz1bXSxyaz1bXSxpaz1bXSxzaz1bXSxjaz1uZXcgYSxhaz1uZXcgQXQsZms9bmV3IENvLHVrPW5ldyBKLGxrPW5ldyBhO0huLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gbSh0KXx8KHQ9bmV3IEhuKSx0LnVCdWZmZXI9dGhpcy51QnVmZmVyLHQudkJ1ZmZlcj10aGlzLnZCdWZmZXIsdC5oZWlnaHRCdWZmZXI9dGhpcy5oZWlnaHRCdWZmZXIsdC5ub3JtYWxCdWZmZXI9dGhpcy5ub3JtYWxCdWZmZXIsdC5pbmRleD10aGlzLmluZGV4LHQuZmlyc3Q9dGhpcy5maXJzdCx0LnNlY29uZD10aGlzLnNlY29uZCx0LnJhdGlvPXRoaXMucmF0aW8sdH07SG4ucHJvdG90eXBlLmluaXRpYWxpemVJbmRleGVkPWZ1bmN0aW9uKHQsZSxuLG8scil7dGhpcy51QnVmZmVyPXQsdGhpcy52QnVmZmVyPWUsdGhpcy5oZWlnaHRCdWZmZXI9bix0aGlzLm5vcm1hbEJ1ZmZlcj1vLHRoaXMuaW5kZXg9cix0aGlzLmZpcnN0PXZvaWQgMCx0aGlzLnNlY29uZD12b2lkIDAsdGhpcy5yYXRpbz12b2lkIDB9O0huLnByb3RvdHlwZS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQ9ZnVuY3Rpb24odCxlLG4pe2xldCBvPWUrMTtyZXR1cm4gdFtlXSE9PS0xP25bdFtlXV0uY2xvbmUodGhpcyk6KHRoaXMudmVydGV4QnVmZmVyPXZvaWQgMCx0aGlzLmluZGV4PXZvaWQgMCx0aGlzLmZpcnN0PW5bdFtvXV0sKytvLHRoaXMuc2Vjb25kPW5bdFtvXV0sKytvLHRoaXMucmF0aW89dFtvXSwrK28pLG99O0huLnByb3RvdHlwZS5nZXRLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZGV4ZWQoKT90aGlzLmluZGV4OkpTT04uc3RyaW5naWZ5KHtmaXJzdDp0aGlzLmZpcnN0LmdldEtleSgpLHNlY29uZDp0aGlzLnNlY29uZC5nZXRLZXkoKSxyYXRpbzp0aGlzLnJhdGlvfSl9O0huLnByb3RvdHlwZS5pc0luZGV4ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLmluZGV4KX07SG4ucHJvdG90eXBlLmdldEg9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLmluZGV4KT90aGlzLmhlaWdodEJ1ZmZlclt0aGlzLmluZGV4XTpQLmxlcnAodGhpcy5maXJzdC5nZXRIKCksdGhpcy5zZWNvbmQuZ2V0SCgpLHRoaXMucmF0aW8pfTtIbi5wcm90b3R5cGUuZ2V0VT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMuaW5kZXgpP3RoaXMudUJ1ZmZlclt0aGlzLmluZGV4XTpQLmxlcnAodGhpcy5maXJzdC5nZXRVKCksdGhpcy5zZWNvbmQuZ2V0VSgpLHRoaXMucmF0aW8pfTtIbi5wcm90b3R5cGUuZ2V0Vj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMuaW5kZXgpP3RoaXMudkJ1ZmZlclt0aGlzLmluZGV4XTpQLmxlcnAodGhpcy5maXJzdC5nZXRWKCksdGhpcy5zZWNvbmQuZ2V0VigpLHRoaXMucmF0aW8pfTtIYT1uZXcgSixFbT0tMSxkaz1bbmV3IGEsbmV3IGFdLG1rPVtuZXcgYSxuZXcgYV07SG4ucHJvdG90eXBlLmdldE5vcm1hbFg9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLmluZGV4KT90aGlzLm5vcm1hbEJ1ZmZlclt0aGlzLmluZGV4KjJdOihIYT1seCh0aGlzLEhhKSxIYS54KX07SG4ucHJvdG90eXBlLmdldE5vcm1hbFk9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLmluZGV4KT90aGlzLm5vcm1hbEJ1ZmZlclt0aGlzLmluZGV4KjIrMV06KEhhPWx4KHRoaXMsSGEpLEhhLnkpfTtqbz1bXTtqby5wdXNoKG5ldyBIbik7am8ucHVzaChuZXcgSG4pO2pvLnB1c2gobmV3IEhuKTtqby5wdXNoKG5ldyBIbik7aGs9VWUocGspfSk7dmFyIF9rLF8xPSQoKCk9Pntfaz1UMSh7Ii4vY29tYmluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGYwKCksYTApKSwiLi9jcmVhdGVCb3hHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihkMCgpLHAwKSksIi4vY3JlYXRlQm94T3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KF8wKCksaDApKSwiLi9jcmVhdGVDaXJjbGVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihTMCgpLFIwKSksIi4vY3JlYXRlQ2lyY2xlT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KE0wKCksUDApKSwiLi9jcmVhdGVDb3BsYW5hclBvbHlnb25HZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih6MCgpLFYwKSksIi4vY3JlYXRlQ29wbGFuYXJQb2x5Z29uT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHEwKCksSDApKSwiLi9jcmVhdGVDb3JyaWRvckdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGFfKCksY18pKSwiLi9jcmVhdGVDb3JyaWRvck91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihsXygpLHVfKSksIi4vY3JlYXRlQ3lsaW5kZXJHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih5XygpLF9fKSksIi4vY3JlYXRlQ3lsaW5kZXJPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4od18oKSxiXykpLCIuL2NyZWF0ZUVsbGlwc2VHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihPXygpLFRfKSksIi4vY3JlYXRlRWxsaXBzZU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihSXygpLEVfKSksIi4vY3JlYXRlRWxsaXBzb2lkR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQ18oKSx4XykpLCIuL2NyZWF0ZUVsbGlwc29pZE91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihOXygpLE1fKSksIi4vY3JlYXRlRnJ1c3R1bUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEdfKCksa18pKSwiLi9jcmVhdGVGcnVzdHVtT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEhfKCksal8pKSwiLi9jcmVhdGVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihnMSgpLHkxKSksIi4vY3JlYXRlR3JvdW5kUG9seWxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihveSgpLG55KSksIi4vY3JlYXRlUGxhbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihzeSgpLGl5KSksIi4vY3JlYXRlUGxhbmVPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZnkoKSxheSkpLCIuL2NyZWF0ZVBvbHlnb25HZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihkeSgpLHB5KSksIi4vY3JlYXRlUG9seWdvbk91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihfeSgpLGh5KSksIi4vY3JlYXRlUG9seWxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihUeSgpLHd5KSksIi4vY3JlYXRlUG9seWxpbmVWb2x1bWVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihSeSgpLEV5KSksIi4vY3JlYXRlUG9seWxpbmVWb2x1bWVPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQ3koKSx4eSkpLCIuL2NyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEJ5KCksRHkpKSwiLi9jcmVhdGVSZWN0YW5nbGVPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oR3koKSxreSkpLCIuL2NyZWF0ZVNpbXBsZVBvbHlsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oankoKSx6eSkpLCIuL2NyZWF0ZVNwaGVyZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEt5KCkscXkpKSwiLi9jcmVhdGVTcGhlcmVPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oWXkoKSxYeSkpLCIuL2NyZWF0ZVRhc2tQcm9jZXNzb3JXb3JrZXIuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oWm4oKSxjMCkpLCIuL2NyZWF0ZVZlY3RvclRpbGVDbGFtcGVkUG9seWxpbmVzLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFp5KCksJHkpKSwiLi9jcmVhdGVWZWN0b3JUaWxlR2VvbWV0cmllcy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihKeSgpLFF5KSksIi4vY3JlYXRlVmVjdG9yVGlsZVBvaW50cy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihuZygpLGVnKSksIi4vY3JlYXRlVmVjdG9yVGlsZVBvbHlnb25zLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHJnKCksb2cpKSwiLi9jcmVhdGVWZWN0b3JUaWxlUG9seWxpbmVzLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGNnKCksc2cpKSwiLi9jcmVhdGVWZXJ0aWNlc0Zyb21Hb29nbGVFYXJ0aEVudGVycHJpc2VCdWZmZXIuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocGcoKSxsZykpLCIuL2NyZWF0ZVZlcnRpY2VzRnJvbUhlaWdodG1hcC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihoZygpLG1nKSksIi4vY3JlYXRlVmVydGljZXNGcm9tUXVhbnRpemVkVGVycmFpbk1lc2guanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZ2coKSx5ZykpLCIuL2NyZWF0ZVdhbGxHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihPZygpLFRnKSksIi4vY3JlYXRlV2FsbE91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihTZygpLFJnKSksIi4vZGVjb2RlRHJhY28uanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSWcoKSxOZykpLCIuL2RlY29kZUdvb2dsZUVhcnRoRW50ZXJwcmlzZVBhY2tldC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihZZygpLFhnKSksIi4vZGVjb2RlSTNTLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHQxKCksSmcpKSwiLi9nYXVzc2lhblNwbGF0U29ydGVyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGkxKCkscjEpKSwiLi9nYXVzc2lhblNwbGF0VGV4dHVyZUdlbmVyYXRvci5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihjMSgpLHMxKSksIi4vdHJhbnNjb2RlS1RYMi5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihwMSgpLGwxKSksIi4vdHJhbnNmZXJUeXBlZEFycmF5VGVzdC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihkMSgpLGN4KSksIi4vdXBzYW1wbGVRdWFudGl6ZWRUZXJyYWluTWVzaC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihoMSgpLG0xKSl9KX0pO3ZhciB5MT17fTtsZSh5MSx7ZGVmYXVsdDooKT0+QWt9KTthc3luYyBmdW5jdGlvbiB5ayh0LGUpe2xldCBuPVJtW2VdPz9SbVt0XTtyZXR1cm4gbShuKT9uOm0oZSk/KHR5cGVvZiBleHBvcnRzPT0ib2JqZWN0Ij9uPWRyKGUpOm49KGF3YWl0IGltcG9ydChlKSkuZGVmYXVsdCxSbVtlXT1uLG4pOih0eXBlb2YgZXhwb3J0cz09Im9iamVjdCI/bj1kcihgV29ya2Vycy8ke3R9YCk6bj0obShlKT9hd2FpdCBpbXBvcnQoZSk6YXdhaXQgX2soYC4vJHt0fS5qc2ApKS5kZWZhdWx0LFJtW3RdPW4sbil9YXN5bmMgZnVuY3Rpb24gZ2sodCxlKXtsZXQgbj10LnN1YlRhc2tzLG89bi5sZW5ndGgscj1uZXcgQXJyYXkobyk7Zm9yKGxldCBpPTA7aTxvO2krKyl7bGV0IHM9bltpXSxmPXMuZ2VvbWV0cnksdT1zLm1vZHVsZU5hbWUsYz1zLm1vZHVsZVBhdGg7aWYobSh1KSYmbShjKSl0aHJvdyBuZXcgRCgiTXVzdCBvbmx5IHNldCBtb2R1bGVOYW1lIG9yIG1vZHVsZVBhdGgiKTttKHUpfHxtKGMpP3JbaV09eWsodSxjKS50aGVuKGw9PmwoZixzLm9mZnNldCkpOnJbaV09Zn1yZXR1cm4gUHJvbWlzZS5hbGwocikudGhlbihmdW5jdGlvbihpKXtyZXR1cm4gY2EucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cyhpLGUpfSl9dmFyIFJtLEFrLGcxPSQoKCk9PntIdCgpO2Z0KCk7czAoKTtabigpO18xKCk7Um09e307QWs9VWUoZ2spfSk7dmFyIF9HPXt9O2xlKF9HLHtjb21iaW5lR2VvbWV0cnk6KCk9PmJrLGNyZWF0ZUJveEdlb21ldHJ5OigpPT53ayxjcmVhdGVCb3hPdXRsaW5lR2VvbWV0cnk6KCk9PlRrLGNyZWF0ZUNpcmNsZUdlb21ldHJ5OigpPT5PayxjcmVhdGVDaXJjbGVPdXRsaW5lR2VvbWV0cnk6KCk9PkVrLGNyZWF0ZUNvcGxhbmFyUG9seWdvbkdlb21ldHJ5OigpPT5SayxjcmVhdGVDb3BsYW5hclBvbHlnb25PdXRsaW5lR2VvbWV0cnk6KCk9PlNrLGNyZWF0ZUNvcnJpZG9yR2VvbWV0cnk6KCk9PnhrLGNyZWF0ZUNvcnJpZG9yT3V0bGluZUdlb21ldHJ5OigpPT5DayxjcmVhdGVDeWxpbmRlckdlb21ldHJ5OigpPT5QayxjcmVhdGVDeWxpbmRlck91dGxpbmVHZW9tZXRyeTooKT0+TWssY3JlYXRlRWxsaXBzZUdlb21ldHJ5OigpPT5OayxjcmVhdGVFbGxpcHNlT3V0bGluZUdlb21ldHJ5OigpPT5JayxjcmVhdGVFbGxpcHNvaWRHZW9tZXRyeTooKT0+dmssY3JlYXRlRWxsaXBzb2lkT3V0bGluZUdlb21ldHJ5OigpPT5GayxjcmVhdGVGcnVzdHVtR2VvbWV0cnk6KCk9PkxrLGNyZWF0ZUZydXN0dW1PdXRsaW5lR2VvbWV0cnk6KCk9PkRrLGNyZWF0ZUdlb21ldHJ5OigpPT5CayxjcmVhdGVHcm91bmRQb2x5bGluZUdlb21ldHJ5OigpPT5VayxjcmVhdGVQbGFuZUdlb21ldHJ5OigpPT5rayxjcmVhdGVQbGFuZU91dGxpbmVHZW9tZXRyeTooKT0+R2ssY3JlYXRlUG9seWdvbkdlb21ldHJ5OigpPT5WayxjcmVhdGVQb2x5Z29uT3V0bGluZUdlb21ldHJ5OigpPT56ayxjcmVhdGVQb2x5bGluZUdlb21ldHJ5OigpPT5qayxjcmVhdGVQb2x5bGluZVZvbHVtZUdlb21ldHJ5OigpPT5IayxjcmVhdGVQb2x5bGluZVZvbHVtZU91dGxpbmVHZW9tZXRyeTooKT0+cWssY3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnk6KCk9PktrLGNyZWF0ZVJlY3RhbmdsZU91dGxpbmVHZW9tZXRyeTooKT0+V2ssY3JlYXRlU2ltcGxlUG9seWxpbmVHZW9tZXRyeTooKT0+WGssY3JlYXRlU3BoZXJlR2VvbWV0cnk6KCk9PllrLGNyZWF0ZVNwaGVyZU91dGxpbmVHZW9tZXRyeTooKT0+JGssY3JlYXRlVGFza1Byb2Nlc3NvcldvcmtlcjooKT0+WmssY3JlYXRlVmVjdG9yVGlsZUNsYW1wZWRQb2x5bGluZXM6KCk9PlFrLGNyZWF0ZVZlY3RvclRpbGVHZW9tZXRyaWVzOigpPT5KayxjcmVhdGVWZWN0b3JUaWxlUG9pbnRzOigpPT50RyxjcmVhdGVWZWN0b3JUaWxlUG9seWdvbnM6KCk9PmVHLGNyZWF0ZVZlY3RvclRpbGVQb2x5bGluZXM6KCk9Pm5HLGNyZWF0ZVZlcnRpY2VzRnJvbUdvb2dsZUVhcnRoRW50ZXJwcmlzZUJ1ZmZlcjooKT0+b0csY3JlYXRlVmVydGljZXNGcm9tSGVpZ2h0bWFwOigpPT5yRyxjcmVhdGVWZXJ0aWNlc0Zyb21RdWFudGl6ZWRUZXJyYWluTWVzaDooKT0+aUcsY3JlYXRlV2FsbEdlb21ldHJ5OigpPT5zRyxjcmVhdGVXYWxsT3V0bGluZUdlb21ldHJ5OigpPT5jRyxkZWNvZGVEcmFjbzooKT0+YUcsZGVjb2RlR29vZ2xlRWFydGhFbnRlcnByaXNlUGFja2V0OigpPT5mRyxkZWNvZGVJM1M6KCk9PnVHLGdhdXNzaWFuU3BsYXRTb3J0ZXI6KCk9PmxHLGdhdXNzaWFuU3BsYXRUZXh0dXJlR2VuZXJhdG9yOigpPT5wRyx0cmFuc2NvZGVLVFgyOigpPT5kRyx0cmFuc2ZlclR5cGVkQXJyYXlUZXN0OigpPT5tRyx1cHNhbXBsZVF1YW50aXplZFRlcnJhaW5NZXNoOigpPT5oR30pO3ZhciBiaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmYwKCkpfSx3az0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmQwKCkpfSxUaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pl8wKCkpfSxPaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlMwKCkpfSxFaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pk0wKCkpfSxSaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnowKCkpfSxTaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnEwKCkpfSx4az0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmFfKCkpfSxDaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmxfKCkpfSxQaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnlfKCkpfSxNaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PndfKCkpfSxOaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pk9fKCkpfSxJaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlJfKCkpfSx2az0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkNfKCkpfSxGaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pk5fKCkpfSxMaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkdfKCkpfSxEaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkhfKCkpfSxCaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmcxKCkpfSxVaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm95KCkpfSxraz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnN5KCkpfSxHaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmZ5KCkpfSxWaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmR5KCkpfSx6az0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pl95KCkpfSxqaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlR5KCkpfSxIaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlJ5KCkpfSxxaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkN5KCkpfSxLaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkJ5KCkpfSxXaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pkd5KCkpfSxYaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pmp5KCkpfSxZaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pkt5KCkpfSwkaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pll5KCkpfSxaaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlpuKCkpfSxRaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Plp5KCkpfSxKaz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pkp5KCkpfSx0Rz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm5nKCkpfSxlRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnJnKCkpfSxuRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmNnKCkpfSxvRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnBnKCkpfSxyRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmhnKCkpfSxpRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmdnKCkpfSxzRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pk9nKCkpfSxjRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlNnKCkpfSxhRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PklnKCkpfSxmRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PllnKCkpfSx1Rz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnQxKCkpfSxsRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmkxKCkpfSxwRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmMxKCkpfSxkRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnAxKCkpfSxtRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmQxKCkpfSxoRz0oKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmgxKCkpfTtyZXR1cm4gZ3goX0cpO30pKCk7Cg==")});var T9=Pu((YVt,Xee)=>{var OVt=y(C()),kp=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)};kp.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}};kp.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};kp.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};kp.prototype.random_int31=function(){return this.random_int()>>>1};kp.prototype.random_incl=function(){return this.random_int()*(1/4294967295)};kp.prototype.random=function(){return this.random_int()*(1/4294967296)};kp.prototype.random_excl=function(){return(this.random_int()+.5)*(1/4294967296)};kp.prototype.random_long=function(){var e=this.random_int()>>>5,t=this.random_int()>>>6;return(e*67108864+t)*(1/9007199254740992)};Xee.exports=kp});var Hee=Pu((G_,Z_)=>{var sZt=y(C());/*! https://mths.be/punycode v1.4.0 by @mathias */(function(e){var t=typeof G_=="object"&&G_&&!G_.nodeType&&G_,n=typeof Z_=="object"&&Z_&&!Z_.nodeType&&Z_,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,h=72,p=128,g="-",f=/^xn--/,b=/[^\x20-\x7E]/,x=/[\x2E\u3002\uFF0E\uFF61]/g,I={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},_=s-a,E=Math.floor,S=String.fromCharCode,R;function G(N){throw new RangeError(I[N])}function B(N,k){for(var v=N.length,O=[];v--;)O[v]=k(N[v]);return O}function w(N,k){var v=N.split("@"),O="";v.length>1&&(O=v[0]+"@",N=v[1]),N=N.replace(x,".");var H=N.split("."),ee=B(H,k).join(".");return O+ee}function F(N){for(var k=[],v=0,O=N.length,H,ee;v=55296&&H<=56319&&v65535&&(k-=65536,v+=S(k>>>10&1023|55296),k=56320|k&1023),v+=S(k),v}).join("")}function A(N){return N-48<10?N-22:N-65<26?N-65:N-97<26?N-97:s}function T(N,k){return N+22+75*(N<26)-((k!=0)<<5)}function L(N,k,v){var O=0;for(N=v?E(N/u):N>>1,N+=E(N/k);N>_*c>>1;O+=s)N=E(N/_);return E(O+(_+1)*N/(N+d))}function V(N){var k=[],v=N.length,O,H=0,ee=p,K=h,te,q,pe,ye,he,xe,Te,Be,Le;for(te=N.lastIndexOf(g),te<0&&(te=0),q=0;q=128&&G("not-basic"),k.push(N.charCodeAt(q));for(pe=te>0?te+1:0;pe=v&&G("invalid-input"),Te=A(N.charCodeAt(pe++)),(Te>=s||Te>E((r-H)/he))&&G("overflow"),H+=Te*he,Be=xe<=K?a:xe>=K+c?c:xe-K,!(TeE(r/Le)&&G("overflow"),he*=Le;O=k.length+1,K=L(H-ye,O,ye==0),E(H/O)>r-ee&&G("overflow"),ee+=E(H/O),H%=O,k.splice(H++,0,ee)}return P(k)}function W(N){var k,v,O,H,ee,K,te,q,pe,ye,he,xe=[],Te,Be,Le,De;for(N=F(N),Te=N.length,k=p,v=0,ee=h,K=0;K=k&&heE((r-v)/Be)&&G("overflow"),v+=(te-k)*Be,k=te,K=0;Kr&&G("overflow"),he==k){for(q=v,pe=s;ye=pe<=ee?a:pe>=ee+c?c:pe-ee,!(q{var aZt=y(C());/*! * 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 X9=="object"&&X9.exports?X9.exports=t():typeof define=="function"&&define.amd?define(t):e.IPv6=t(e)})(zee,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[h]=u.join("")}var g=-1,f=0,b=0,x=-1,I=!1;for(h=0;hf&&(g=x,f=b)):s[h]==="0"&&(I=!0,x=h,b=1);b>f&&(g=x,f=b),f>1&&s.splice(g,f,""),a=s.length;var _="";for(s[0]===""&&(_=":"),h=0;h{var cZt=y(C());/*! * 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 W9=="object"&&W9.exports?W9.exports=t():typeof define=="function"&&define.amd?define(t):e.SecondLevelDomains=t(e)})(Jee,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 Bd=Pu((qee,F9)=>{var lZt=y(C());/*! * 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 F9=="object"&&F9.exports?F9.exports=t(Hee(),Kee(),jee()):typeof define=="function"&&define.amd?define(["./punycode","./IPv6","./SecondLevelDomains"],t):e.URI=t(e.punycode,e.IPv6,e.SecondLevelDomains,e)})(qee,function(e,t,n,i){"use strict";var o=i&&i.URI;function r(T,L){var V=arguments.length>=1,W=arguments.length>=2;if(!(this instanceof r))return V?W?new r(T,L):new r(T):new r;if(T===void 0){if(V)throw new TypeError("undefined is not a valid argument for URI");typeof location<"u"?T=location.href+"":T=""}if(T===null&&V)throw new TypeError("null is not a valid argument for URI");return this.href(T),L!==void 0?this.absoluteTo(L):this}function s(T){return/^[0-9]+$/.test(T)}r.version="1.19.11";var a=r.prototype,c=Object.prototype.hasOwnProperty;function d(T){return T.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function u(T){return T===void 0?"Undefined":String(Object.prototype.toString.call(T)).slice(8,-1)}function h(T){return u(T)==="Array"}function p(T,L){var V={},W,M;if(u(L)==="RegExp")V=null;else if(h(L))for(W=0,M=L.length;W]+|\(([^\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(T){if(!(!T||!T.nodeName)){var L=T.nodeName.toLowerCase();if(!(L==="input"&&T.type!=="image"))return r.domAttributes[L]}};function x(T){return escape(T)}function I(T){return encodeURIComponent(T).replace(/[!'()*]/g,x).replace(/\*/g,"%2A")}r.encode=I,r.decode=decodeURIComponent,r.iso8859=function(){r.encode=escape,r.decode=unescape},r.unicode=function(){r.encode=I,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(T,L){var V=r.encode(T+"");return L===void 0&&(L=r.escapeQuerySpace),L?V.replace(/%20/g,"+"):V},r.decodeQuery=function(T,L){T+="",L===void 0&&(L=r.escapeQuerySpace);try{return r.decode(L?T.replace(/\+/g,"%20"):T)}catch{return T}};var _={encode:"encode",decode:"decode"},E,S=function(T,L){return function(V){try{return r[L](V+"").replace(r.characters[T][L].expression,function(W){return r.characters[T][L].map[W]})}catch{return V}}};for(E in _)r[E+"PathSegment"]=S("pathname",_[E]),r[E+"UrnPathSegment"]=S("urnpath",_[E]);var R=function(T,L,V){return function(W){var M;V?M=function(v){return r[L](r[V](v))}:M=r[L];for(var Q=(W+"").split(T),N=0,k=Q.length;N-1&&(L.fragment=T.substring(V+1)||null,T=T.substring(0,V)),V=T.indexOf("?"),V>-1&&(L.query=T.substring(V+1)||null,T=T.substring(0,V)),T=T.replace(/^(https?|ftp|wss?)?:+[/\\]*/i,"$1://"),T=T.replace(/^[/\\]{2,}/i,"//"),T.substring(0,2)==="//"?(L.protocol=null,T=T.substring(2),T=r.parseAuthority(T,L)):(V=T.indexOf(":"),V>-1&&(L.protocol=T.substring(0,V)||null,L.protocol&&!L.protocol.match(r.protocol_expression)?L.protocol=void 0:T.substring(V+1,V+3).replace(/\\/g,"/")==="//"?(T=T.substring(V+3),T=r.parseAuthority(T,L)):(T=T.substring(V+1),L.urn=!0))),L.path=T,L},r.parseHost=function(T,L){T||(T=""),T=T.replace(/\\/g,"/");var V=T.indexOf("/"),W,M;if(V===-1&&(V=T.length),T.charAt(0)==="[")W=T.indexOf("]"),L.hostname=T.substring(1,W)||null,L.port=T.substring(W+2,V)||null,L.port==="/"&&(L.port=null);else{var Q=T.indexOf(":"),N=T.indexOf("/"),k=T.indexOf(":",Q+1);k!==-1&&(N===-1||k-1?M:T.length-1),N;return Q>-1&&(M===-1||Q-1?K=K.slice(0,te)+K.slice(te).replace(Q,""):K=K.replace(Q,""),!(K.length<=v[0].length)&&!(V.ignore&&V.ignore.test(K))){ee=O+K.length;var ye=L(K,O,ee,T);if(ye===void 0){W.lastIndex=ee;continue}ye=String(ye),T=T.slice(0,O)+ye+T.slice(ee),W.lastIndex=O+ye.length}}return W.lastIndex=0,T},r.ensureValidHostname=function(T,L){var V=!!T,W=!!L,M=!1;if(W&&(M=g(r.hostProtocols,L)),M&&!V)throw new TypeError("Hostname cannot be empty, if protocol is "+L);if(T&&T.match(r.invalid_hostname_characters)){if(!e)throw new TypeError('Hostname "'+T+'" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');if(e.toASCII(T).match(r.invalid_hostname_characters))throw new TypeError('Hostname "'+T+'" contains characters other than [A-Z0-9.-:_]')}},r.ensureValidPort=function(T){if(T){var L=Number(T);if(!(s(L)&&L>0&&L<65536))throw new TypeError('Port "'+T+'" is not a valid port')}},r.noConflict=function(T){if(T){var L={URI:this.noConflict()};return i.URITemplate&&typeof i.URITemplate.noConflict=="function"&&(L.URITemplate=i.URITemplate.noConflict()),i.IPv6&&typeof i.IPv6.noConflict=="function"&&(L.IPv6=i.IPv6.noConflict()),i.SecondLevelDomains&&typeof i.SecondLevelDomains.noConflict=="function"&&(L.SecondLevelDomains=i.SecondLevelDomains.noConflict()),L}else i.URI===this&&(i.URI=o);return this},a.build=function(T){return T===!0?this._deferred_build=!0:(T===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 G(T){return function(L,V){return L===void 0?this._parts[T]||"":(this._parts[T]=L||null,this.build(!V),this)}}function B(T,L){return function(V,W){return V===void 0?this._parts[T]||"":(V!==null&&(V=V+"",V.charAt(0)===L&&(V=V.substring(1))),this._parts[T]=V,this.build(!W),this)}}a.protocol=G("protocol"),a.username=G("username"),a.password=G("password"),a.hostname=G("hostname"),a.port=G("port"),a.query=B("query","?"),a.fragment=B("fragment","#"),a.search=function(T,L){var V=this.query(T,L);return typeof V=="string"&&V.length?"?"+V:V},a.hash=function(T,L){var V=this.fragment(T,L);return typeof V=="string"&&V.length?"#"+V:V},a.pathname=function(T,L){if(T===void 0||T===!0){var V=this._parts.path||(this._parts.hostname?"/":"");return T?(this._parts.urn?r.decodeUrnPath:r.decodePath)(V):V}else return this._parts.urn?this._parts.path=T?r.recodeUrnPath(T):"":this._parts.path=T?r.recodePath(T):"/",this.build(!L),this},a.path=a.pathname,a.href=function(T,L){var V;if(T===void 0)return this.toString();this._string="",this._parts=r._parts();var W=T instanceof r,M=typeof T=="object"&&(T.hostname||T.path||T.pathname);if(T.nodeName){var Q=r.getDomAttribute(T);T=T[Q]||"",M=!1}if(!W&&M&&T.pathname!==void 0&&(T=T.toString()),typeof T=="string"||T instanceof String)this._parts=r.parse(String(T),this._parts);else if(W||M){var N=W?T._parts:T;for(V in N)V!=="query"&&c.call(this._parts,V)&&(this._parts[V]=N[V]);N.query&&this.query(N.query,!1)}else throw new TypeError("invalid input");return this.build(!L),this},a.is=function(T){var L=!1,V=!1,W=!1,M=!1,Q=!1,N=!1,k=!1,v=!this._parts.urn;switch(this._parts.hostname&&(v=!1,V=r.ip4_expression.test(this._parts.hostname),W=r.ip6_expression.test(this._parts.hostname),L=V||W,M=!L,Q=M&&n&&n.has(this._parts.hostname),N=M&&r.idn_expression.test(this._parts.hostname),k=M&&r.punycode_expression.test(this._parts.hostname)),T.toLowerCase()){case"relative":return v;case"absolute":return!v;case"domain":case"name":return M;case"sld":return Q;case"ip":return L;case"ip4":case"ipv4":case"inet4":return V;case"ip6":case"ipv6":case"inet6":return W;case"idn":return N;case"url":return!this._parts.urn;case"urn":return!!this._parts.urn;case"punycode":return k}return null};var w=a.protocol,F=a.port,P=a.hostname;a.protocol=function(T,L){if(T&&(T=T.replace(/:(\/\/)?$/,""),!T.match(r.protocol_expression)))throw new TypeError('Protocol "'+T+`" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]`);return w.call(this,T,L)},a.scheme=a.protocol,a.port=function(T,L){return this._parts.urn?T===void 0?"":this:(T!==void 0&&(T===0&&(T=null),T&&(T+="",T.charAt(0)===":"&&(T=T.substring(1)),r.ensureValidPort(T))),F.call(this,T,L))},a.hostname=function(T,L){if(this._parts.urn)return T===void 0?"":this;if(T!==void 0){var V={preventInvalidHostname:this._parts.preventInvalidHostname},W=r.parseHost(T,V);if(W!=="/")throw new TypeError('Hostname "'+T+'" contains characters other than [A-Z0-9.-]');T=V.hostname,this._parts.preventInvalidHostname&&r.ensureValidHostname(T,this._parts.protocol)}return P.call(this,T,L)},a.origin=function(T,L){if(this._parts.urn)return T===void 0?"":this;if(T===void 0){var V=this.protocol(),W=this.authority();return W?(V?V+"://":"")+this.authority():""}else{var M=r(T);return this.protocol(M.protocol()).authority(M.authority()).build(!L),this}},a.host=function(T,L){if(this._parts.urn)return T===void 0?"":this;if(T===void 0)return this._parts.hostname?r.buildHost(this._parts):"";var V=r.parseHost(T,this._parts);if(V!=="/")throw new TypeError('Hostname "'+T+'" contains characters other than [A-Z0-9.-]');return this.build(!L),this},a.authority=function(T,L){if(this._parts.urn)return T===void 0?"":this;if(T===void 0)return this._parts.hostname?r.buildAuthority(this._parts):"";var V=r.parseAuthority(T,this._parts);if(V!=="/")throw new TypeError('Hostname "'+T+'" contains characters other than [A-Z0-9.-]');return this.build(!L),this},a.userinfo=function(T,L){if(this._parts.urn)return T===void 0?"":this;if(T===void 0){var V=r.buildUserinfo(this._parts);return V&&V.substring(0,V.length-1)}else return T[T.length-1]!=="@"&&(T+="@"),r.parseUserinfo(T,this._parts),this.build(!L),this},a.resource=function(T,L){var V;return T===void 0?this.path()+this.search()+this.hash():(V=r.parse(T),this._parts.path=V.path,this._parts.query=V.query,this._parts.fragment=V.fragment,this.build(!L),this)},a.subdomain=function(T,L){if(this._parts.urn)return T===void 0?"":this;if(T===void 0){if(!this._parts.hostname||this.is("IP"))return"";var V=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0,V)||""}else{var W=this._parts.hostname.length-this.domain().length,M=this._parts.hostname.substring(0,W),Q=new RegExp("^"+d(M));if(T&&T.charAt(T.length-1)!=="."&&(T+="."),T.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");return T&&r.ensureValidHostname(T,this._parts.protocol),this._parts.hostname=this._parts.hostname.replace(Q,T),this.build(!L),this}},a.domain=function(T,L){if(this._parts.urn)return T===void 0?"":this;if(typeof T=="boolean"&&(L=T,T=void 0),T===void 0){if(!this._parts.hostname||this.is("IP"))return"";var V=this._parts.hostname.match(/\./g);if(V&&V.length<2)return this._parts.hostname;var W=this._parts.hostname.length-this.tld(L).length-1;return W=this._parts.hostname.lastIndexOf(".",W-1)+1,this._parts.hostname.substring(W)||""}else{if(!T)throw new TypeError("cannot set domain empty");if(T.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");if(r.ensureValidHostname(T,this._parts.protocol),!this._parts.hostname||this.is("IP"))this._parts.hostname=T;else{var M=new RegExp(d(this.domain())+"$");this._parts.hostname=this._parts.hostname.replace(M,T)}return this.build(!L),this}},a.tld=function(T,L){if(this._parts.urn)return T===void 0?"":this;if(typeof T=="boolean"&&(L=T,T=void 0),T===void 0){if(!this._parts.hostname||this.is("IP"))return"";var V=this._parts.hostname.lastIndexOf("."),W=this._parts.hostname.substring(V+1);return L!==!0&&n&&n.list[W.toLowerCase()]&&n.get(this._parts.hostname)||W}else{var M;if(T)if(T.match(/[^a-zA-Z0-9-]/))if(n&&n.is(T))M=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(M,T);else throw new TypeError('TLD "'+T+'" 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");M=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(M,T)}else throw new TypeError("cannot set TLD empty");return this.build(!L),this}},a.directory=function(T,L){if(this._parts.urn)return T===void 0?"":this;if(T===void 0||T===!0){if(!this._parts.path&&!this._parts.hostname)return"";if(this._parts.path==="/")return"/";var V=this._parts.path.length-this.filename().length-1,W=this._parts.path.substring(0,V)||(this._parts.hostname?"/":"");return T?r.decodePath(W):W}else{var M=this._parts.path.length-this.filename().length,Q=this._parts.path.substring(0,M),N=new RegExp("^"+d(Q));return this.is("relative")||(T||(T="/"),T.charAt(0)!=="/"&&(T="/"+T)),T&&T.charAt(T.length-1)!=="/"&&(T+="/"),T=r.recodePath(T),this._parts.path=this._parts.path.replace(N,T),this.build(!L),this}},a.filename=function(T,L){if(this._parts.urn)return T===void 0?"":this;if(typeof T!="string"){if(!this._parts.path||this._parts.path==="/")return"";var V=this._parts.path.lastIndexOf("/"),W=this._parts.path.substring(V+1);return T?r.decodePathSegment(W):W}else{var M=!1;T.charAt(0)==="/"&&(T=T.substring(1)),T.match(/\.?\//)&&(M=!0);var Q=new RegExp(d(this.filename())+"$");return T=r.recodePath(T),this._parts.path=this._parts.path.replace(Q,T),M?this.normalizePath(L):this.build(!L),this}},a.suffix=function(T,L){if(this._parts.urn)return T===void 0?"":this;if(T===void 0||T===!0){if(!this._parts.path||this._parts.path==="/")return"";var V=this.filename(),W=V.lastIndexOf("."),M,Q;return W===-1?"":(M=V.substring(W+1),Q=/^[a-z0-9%]+$/i.test(M)?M:"",T?r.decodePathSegment(Q):Q)}else{T.charAt(0)==="."&&(T=T.substring(1));var N=this.suffix(),k;if(N)T?k=new RegExp(d(N)+"$"):k=new RegExp(d("."+N)+"$");else{if(!T)return this;this._parts.path+="."+r.recodePath(T)}return k&&(T=r.recodePath(T),this._parts.path=this._parts.path.replace(k,T)),this.build(!L),this}},a.segment=function(T,L,V){var W=this._parts.urn?":":"/",M=this.path(),Q=M.substring(0,1)==="/",N=M.split(W);if(T!==void 0&&typeof T!="number"&&(V=L,L=T,T=void 0),T!==void 0&&typeof T!="number")throw new Error('Bad segment "'+T+'", must be 0-based integer');if(Q&&N.shift(),T<0&&(T=Math.max(N.length+T,0)),L===void 0)return T===void 0?N:N[T];if(T===null||N[T]===void 0)if(h(L)){N=[];for(var k=0,v=L.length;k{"use strict";var wUn=y(C());xue.exports=QJe;var t2=1e20;function QJe(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,h,p,g,f,b;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,h=p.getContext("2d"),r=p.width,s=p.height,g=h.getImageData(0,0,r,s),c=g.data,u=4):window.CanvasRenderingContext2D&&e instanceof window.CanvasRenderingContext2D?(p=e.canvas,h=e,r=p.width,s=p.height,g=h.getImageData(0,0,r,s),c=g.data,u=4):window.ImageData&&e instanceof window.ImageData&&(g=e,r=e.width,s=e.height,c=g.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,b=Math.floor(d.length/u);f{var $Un=y(C());function $Je(){var e=0,t=1,n=2,i=3,o=4,r=5,s=6,a=7,c=8,d=9,u=10,h=11,p=12,g=13,f=14,b=15,x=16,I=17,_=0,E=1,S=2,R=3,G=4;function B(A,T){return 55296<=A.charCodeAt(T)&&A.charCodeAt(T)<=56319&&56320<=A.charCodeAt(T+1)&&A.charCodeAt(T+1)<=57343}function w(A,T){T===void 0&&(T=0);var L=A.charCodeAt(T);if(55296<=L&&L<=56319&&T=1){var V=A.charCodeAt(T-1),W=L;return 55296<=V&&V<=56319?(V-55296)*1024+(W-56320)+65536:W}return L}function F(A,T,L){var V=[A].concat(T).concat([L]),W=V[V.length-2],M=L,Q=V.lastIndexOf(f);if(Q>1&&V.slice(1,Q).every(function(v){return v==i})&&[i,g,I].indexOf(A)==-1)return S;var N=V.lastIndexOf(o);if(N>0&&V.slice(1,N).every(function(v){return v==o})&&[p,o].indexOf(W)==-1)return V.filter(function(v){return v==o}).length%2==1?R:G;if(W==e&&M==t)return _;if(W==n||W==e||W==t)return M==f&&T.every(function(v){return v==i})?S:E;if(M==n||M==e||M==t)return E;if(W==s&&(M==s||M==a||M==d||M==u))return _;if((W==d||W==a)&&(M==a||M==c))return _;if((W==u||W==c)&&M==c)return _;if(M==i||M==b)return _;if(M==r)return _;if(W==p)return _;var k=V.indexOf(i)!=-1?V.lastIndexOf(i)-1:V.length-2;return[g,I].indexOf(V[k])!=-1&&V.slice(k+1,-1).every(function(v){return v==i})&&M==f||W==b&&[x,I].indexOf(M)!=-1?_:T.indexOf(o)!=-1?S:W==o&&M==o?_:E}this.nextBreak=function(A,T){if(T===void 0&&(T=0),T<0)return 0;if(T>=A.length-1)return A.length;for(var L=P(w(A,T)),V=[],W=T+1;W{var weo=y(C());/*! * protobuf.js v7.5.3 (c) 2016, daniel wirtz * compiled wed, 28 may 2025 22:23:47 utc * licensed under the bsd-3-clause license * see: https://github.com/dcodeio/protobuf.js for details */(function(undefined){"use strict";(function(t,n,i){function o(s){var a=n[s];return a||t[s][0].call(a=n[s]={exports:{}},o,a,a.exports),a.exports}var r=o(i[0]);r.util.global.protobuf=r,typeof define=="function"&&define.amd&&define(["long"],function(s){return s&&s.isLong&&(r.util.Long=s,r.configure()),r}),typeof module=="object"&&module&&module.exports&&(module.exports=r)})({1:[function(e,t,n){"use strict";t.exports=i;function i(o,r){for(var s=new Array(arguments.length-1),a=0,c=2,d=!0;c1&&d.charAt(u)==="=";)++h;return Math.ceil(d.length*3)/4-h};for(var o=new Array(64),r=new Array(123),s=0;s<64;)r[o[s]=s<26?s+65:s<52?s+71:s<62?s-4:s-59|43]=s++;i.encode=function(d,u,h){for(var p=null,g=[],f=0,b=0,x;u>2],x=(I&3)<<4,b=1;break;case 1:g[f++]=o[x|I>>4],x=(I&15)<<2,b=2;break;case 2:g[f++]=o[x|I>>6],g[f++]=o[I&63],b=0;break}f>8191&&((p||(p=[])).push(String.fromCharCode.apply(String,g)),f=0)}return b&&(g[f++]=o[x],g[f++]=61,b===1&&(g[f++]=61)),p?(f&&p.push(String.fromCharCode.apply(String,g.slice(0,f))),p.join("")):String.fromCharCode.apply(String,g.slice(0,f))};var a="invalid encoding";i.decode=function(d,u,h){for(var p=h,g=0,f,b=0;b1)break;if((x=r[x])===undefined)throw Error(a);switch(g){case 0:f=x,g=1;break;case 1:u[h++]=f<<2|(x&48)>>4,f=x,g=2;break;case 2:u[h++]=(f&15)<<4|(x&60)>>2,f=x,g=3;break;case 3:u[h++]=(f&3)<<6|x,g=0;break}}if(g===1)throw Error(a);return h-p},i.test=function(d){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(d)}},{}],3:[function(e,t,n){"use strict";t.exports=i;function i(){this._listeners={}}i.prototype.on=function(r,s,a){return(this._listeners[r]||(this._listeners[r]=[])).push({fn:s,ctx:a||this}),this},i.prototype.off=function(r,s){if(r===undefined)this._listeners={};else if(s===undefined)this._listeners[r]=[];else for(var a=this._listeners[r],c=0;c0?0:2147483648,g,f);else if(isNaN(p))h(2143289344,g,f);else if(p>34028234663852886e22)h((b<<31|2139095040)>>>0,g,f);else if(p<11754943508222875e-54)h((b<<31|Math.round(p/1401298464324817e-60))>>>0,g,f);else{var x=Math.floor(Math.log(p)/Math.LN2),I=Math.round(p*Math.pow(2,-x)*8388608)&8388607;h((b<<31|x+127<<23|I)>>>0,g,f)}}c.writeFloatLE=d.bind(null,o),c.writeFloatBE=d.bind(null,r);function u(h,p,g){var f=h(p,g),b=(f>>31)*2+1,x=f>>>23&255,I=f&8388607;return x===255?I?NaN:b*(1/0):x===0?b*1401298464324817e-60*I:b*Math.pow(2,x-150)*(I+8388608)}c.readFloatLE=u.bind(null,s),c.readFloatBE=u.bind(null,a)}(),typeof Float64Array<"u"?function(){var d=new Float64Array([-0]),u=new Uint8Array(d.buffer),h=u[7]===128;function p(x,I,_){d[0]=x,I[_]=u[0],I[_+1]=u[1],I[_+2]=u[2],I[_+3]=u[3],I[_+4]=u[4],I[_+5]=u[5],I[_+6]=u[6],I[_+7]=u[7]}function g(x,I,_){d[0]=x,I[_]=u[7],I[_+1]=u[6],I[_+2]=u[5],I[_+3]=u[4],I[_+4]=u[3],I[_+5]=u[2],I[_+6]=u[1],I[_+7]=u[0]}c.writeDoubleLE=h?p:g,c.writeDoubleBE=h?g:p;function f(x,I){return u[0]=x[I],u[1]=x[I+1],u[2]=x[I+2],u[3]=x[I+3],u[4]=x[I+4],u[5]=x[I+5],u[6]=x[I+6],u[7]=x[I+7],d[0]}function b(x,I){return u[7]=x[I],u[6]=x[I+1],u[5]=x[I+2],u[4]=x[I+3],u[3]=x[I+4],u[2]=x[I+5],u[1]=x[I+6],u[0]=x[I+7],d[0]}c.readDoubleLE=h?f:b,c.readDoubleBE=h?b:f}():function(){function d(h,p,g,f,b,x){var I=f<0?1:0;if(I&&(f=-f),f===0)h(0,b,x+p),h(1/f>0?0:2147483648,b,x+g);else if(isNaN(f))h(0,b,x+p),h(2146959360,b,x+g);else if(f>17976931348623157e292)h(0,b,x+p),h((I<<31|2146435072)>>>0,b,x+g);else{var _;if(f<22250738585072014e-324)_=f/5e-324,h(_>>>0,b,x+p),h((I<<31|_/4294967296)>>>0,b,x+g);else{var E=Math.floor(Math.log(f)/Math.LN2);E===1024&&(E=1023),_=f*Math.pow(2,-E),h(_*4503599627370496>>>0,b,x+p),h((I<<31|E+1023<<20|_*1048576&1048575)>>>0,b,x+g)}}}c.writeDoubleLE=d.bind(null,o,0,4),c.writeDoubleBE=d.bind(null,r,4,0);function u(h,p,g,f,b){var x=h(f,b+p),I=h(f,b+g),_=(I>>31)*2+1,E=I>>>20&2047,S=4294967296*(I&1048575)+x;return E===2047?S?NaN:_*(1/0):E===0?_*5e-324*S:_*Math.pow(2,E-1075)*(S+4503599627370496)}c.readDoubleLE=u.bind(null,s,0,4),c.readDoubleBE=u.bind(null,a,4,0)}(),c}function o(c,d,u){d[u]=c&255,d[u+1]=c>>>8&255,d[u+2]=c>>>16&255,d[u+3]=c>>>24}function r(c,d,u){d[u]=c>>>24,d[u+1]=c>>>16&255,d[u+2]=c>>>8&255,d[u+3]=c&255}function s(c,d){return(c[d]|c[d+1]<<8|c[d+2]<<16|c[d+3]<<24)>>>0}function a(c,d){return(c[d]<<24|c[d+1]<<16|c[d+2]<<8|c[d+3])>>>0}},{}],5:[function(require,module,exports){"use strict";module.exports=inquire;function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}},{}],6:[function(e,t,n){"use strict";t.exports=i;function i(o,r,s){var a=s||8192,c=a>>>1,d=null,u=a;return function(p){if(p<1||p>c)return o(p);u+p>a&&(d=o(a),u=0);var g=r.call(d,u,u+=p);return u&7&&(u=(u|7)+1),g}}},{}],7:[function(e,t,n){"use strict";var i=n;i.length=function(r){for(var s=0,a=0,c=0;c191&&p<224?u[h++]=(p&31)<<6|r[s++]&63:p>239&&p<365?(p=((p&7)<<18|(r[s++]&63)<<12|(r[s++]&63)<<6|r[s++]&63)-65536,u[h++]=55296+(p>>10),u[h++]=56320+(p&1023)):u[h++]=(p&15)<<12|(r[s++]&63)<<6|r[s++]&63,h>8191&&((d||(d=[])).push(String.fromCharCode.apply(String,u)),h=0);return d?(h&&d.push(String.fromCharCode.apply(String,u.slice(0,h))),d.join("")):String.fromCharCode.apply(String,u.slice(0,h))},i.write=function(r,s,a){for(var c=a,d,u,h=0;h>6|192,s[a++]=d&63|128):(d&64512)===55296&&((u=r.charCodeAt(h+1))&64512)===56320?(d=65536+((d&1023)<<10)+(u&1023),++h,s[a++]=d>>18|240,s[a++]=d>>12&63|128,s[a++]=d>>6&63|128,s[a++]=d&63|128):(s[a++]=d>>12|224,s[a++]=d>>6&63|128,s[a++]=d&63|128);return a-c}},{}],8:[function(e,t,n){"use strict";var i=n;i.build="minimal",i.Writer=e(16),i.BufferWriter=e(17),i.Reader=e(9),i.BufferReader=e(10),i.util=e(15),i.rpc=e(12),i.roots=e(11),i.configure=o;function o(){i.util._configure(),i.Writer._configure(i.BufferWriter),i.Reader._configure(i.BufferReader)}o()},{10:10,11:11,12:12,15:15,16:16,17:17,9:9}],9:[function(e,t,n){"use strict";t.exports=c;var i=e(15),o,r=i.LongBits,s=i.utf8;function a(f,b){return RangeError("index out of range: "+f.pos+" + "+(b||1)+" > "+f.len)}function c(f){this.buf=f,this.pos=0,this.len=f.length}var d=typeof Uint8Array<"u"?function(b){if(b instanceof Uint8Array||Array.isArray(b))return new c(b);throw Error("illegal buffer")}:function(b){if(Array.isArray(b))return new c(b);throw Error("illegal buffer")},u=function(){return i.Buffer?function(x){return(c.create=function(_){return i.Buffer.isBuffer(_)?new o(_):d(_)})(x)}:d};c.create=u(),c.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,c.prototype.uint32=function(){var b=4294967295;return function(){if(b=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(b=(b|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(b=(b|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(b=(b|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(b=(b|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return b;if((this.pos+=5)>this.len)throw this.pos=this.len,a(this,10);return b}}(),c.prototype.int32=function(){return this.uint32()|0},c.prototype.sint32=function(){var b=this.uint32();return b>>>1^-(b&1)|0};function h(){var f=new r(0,0),b=0;if(this.len-this.pos>4){for(;b<4;++b)if(f.lo=(f.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return f;if(f.lo=(f.lo|(this.buf[this.pos]&127)<<28)>>>0,f.hi=(f.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return f;b=0}else{for(;b<3;++b){if(this.pos>=this.len)throw a(this);if(f.lo=(f.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return f}return f.lo=(f.lo|(this.buf[this.pos++]&127)<>>0,f}if(this.len-this.pos>4){for(;b<5;++b)if(f.hi=(f.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return f}else for(;b<5;++b){if(this.pos>=this.len)throw a(this);if(f.hi=(f.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return f}throw Error("invalid varint encoding")}c.prototype.bool=function(){return this.uint32()!==0};function p(f,b){return(f[b-4]|f[b-3]<<8|f[b-2]<<16|f[b-1]<<24)>>>0}c.prototype.fixed32=function(){if(this.pos+4>this.len)throw a(this,4);return p(this.buf,this.pos+=4)},c.prototype.sfixed32=function(){if(this.pos+4>this.len)throw a(this,4);return p(this.buf,this.pos+=4)|0};function g(){if(this.pos+8>this.len)throw a(this,8);return new r(p(this.buf,this.pos+=4),p(this.buf,this.pos+=4))}c.prototype.float=function(){if(this.pos+4>this.len)throw a(this,4);var b=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,b},c.prototype.double=function(){if(this.pos+8>this.len)throw a(this,4);var b=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,b},c.prototype.bytes=function(){var b=this.uint32(),x=this.pos,I=this.pos+b;if(I>this.len)throw a(this,b);if(this.pos+=b,Array.isArray(this.buf))return this.buf.slice(x,I);if(x===I){var _=i.Buffer;return _?_.alloc(0):new this.buf.constructor(0)}return this._slice.call(this.buf,x,I)},c.prototype.string=function(){var b=this.bytes();return s.read(b,0,b.length)},c.prototype.skip=function(b){if(typeof b=="number"){if(this.pos+b>this.len)throw a(this,b);this.pos+=b}else do if(this.pos>=this.len)throw a(this);while(this.buf[this.pos++]&128);return this},c.prototype.skipType=function(f){switch(f){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(f=this.uint32()&7)!==4;)this.skipType(f);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+f+" at offset "+this.pos)}return this},c._configure=function(f){o=f,c.create=u(),o._configure();var b=i.Long?"toLong":"toNumber";i.merge(c.prototype,{int64:function(){return h.call(this)[b](!1)},uint64:function(){return h.call(this)[b](!0)},sint64:function(){return h.call(this).zzDecode()[b](!1)},fixed64:function(){return g.call(this)[b](!0)},sfixed64:function(){return g.call(this)[b](!1)}})}},{15:15}],10:[function(e,t,n){"use strict";t.exports=r;var i=e(9);(r.prototype=Object.create(i.prototype)).constructor=r;var o=e(15);function r(s){i.call(this,s)}r._configure=function(){o.Buffer&&(r.prototype._slice=o.Buffer.prototype.slice)},r.prototype.string=function(){var a=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+a,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+a,this.len))},r._configure()},{15:15,9:9}],11:[function(e,t,n){"use strict";t.exports={}},{}],12:[function(e,t,n){"use strict";var i=n;i.Service=e(13)},{13:13}],13:[function(e,t,n){"use strict";t.exports=o;var i=e(15);(o.prototype=Object.create(i.EventEmitter.prototype)).constructor=o;function o(r,s,a){if(typeof r!="function")throw TypeError("rpcImpl must be a function");i.EventEmitter.call(this),this.rpcImpl=r,this.requestDelimited=!!s,this.responseDelimited=!!a}o.prototype.rpcCall=function r(s,a,c,d,u){if(!d)throw TypeError("request must be specified");var h=this;if(!u)return i.asPromise(r,h,s,a,c,d);if(!h.rpcImpl)return setTimeout(function(){u(Error("already ended"))},0),undefined;try{return h.rpcImpl(s,a[h.requestDelimited?"encodeDelimited":"encode"](d).finish(),function(g,f){if(g)return h.emit("error",g,s),u(g);if(f===null)return h.end(!0),undefined;if(!(f instanceof c))try{f=c[h.responseDelimited?"decodeDelimited":"decode"](f)}catch(b){return h.emit("error",b,s),u(b)}return h.emit("data",f,s),u(null,f)})}catch(p){return h.emit("error",p,s),setTimeout(function(){u(p)},0),undefined}},o.prototype.end=function(s){return this.rpcImpl&&(s||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}},{15:15}],14:[function(e,t,n){"use strict";t.exports=o;var i=e(15);function o(c,d){this.lo=c>>>0,this.hi=d>>>0}var r=o.zero=new o(0,0);r.toNumber=function(){return 0},r.zzEncode=r.zzDecode=function(){return this},r.length=function(){return 1};var s=o.zeroHash="\0\0\0\0\0\0\0\0";o.fromNumber=function(d){if(d===0)return r;var u=d<0;u&&(d=-d);var h=d>>>0,p=(d-h)/4294967296>>>0;return u&&(p=~p>>>0,h=~h>>>0,++h>4294967295&&(h=0,++p>4294967295&&(p=0))),new o(h,p)},o.from=function(d){if(typeof d=="number")return o.fromNumber(d);if(i.isString(d))if(i.Long)d=i.Long.fromString(d);else return o.fromNumber(parseInt(d,10));return d.low||d.high?new o(d.low>>>0,d.high>>>0):r},o.prototype.toNumber=function(d){if(!d&&this.hi>>>31){var u=~this.lo+1>>>0,h=~this.hi>>>0;return u||(h=h+1>>>0),-(u+h*4294967296)}return this.lo+this.hi*4294967296},o.prototype.toLong=function(d){return i.Long?new i.Long(this.lo|0,this.hi|0,!!d):{low:this.lo|0,high:this.hi|0,unsigned:!!d}};var a=String.prototype.charCodeAt;o.fromHash=function(d){return d===s?r:new o((a.call(d,0)|a.call(d,1)<<8|a.call(d,2)<<16|a.call(d,3)<<24)>>>0,(a.call(d,4)|a.call(d,5)<<8|a.call(d,6)<<16|a.call(d,7)<<24)>>>0)},o.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)},o.prototype.zzEncode=function(){var d=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^d)>>>0,this.lo=(this.lo<<1^d)>>>0,this},o.prototype.zzDecode=function(){var d=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^d)>>>0,this.hi=(this.hi>>>1^d)>>>0,this},o.prototype.length=function(){var d=this.lo,u=(this.lo>>>28|this.hi<<4)>>>0,h=this.hi>>>24;return h===0?u===0?d<16384?d<128?1:2:d<2097152?3:4:u<16384?u<128?5:6:u<2097152?7:8:h<128?9:10}},{15:15}],15:[function(e,t,n){"use strict";var i=n;i.asPromise=e(1),i.base64=e(2),i.EventEmitter=e(3),i.float=e(4),i.inquire=e(5),i.utf8=e(7),i.pool=e(6),i.LongBits=e(14),i.isNode=!!(typeof global<"u"&&global&&global.process&&global.process.versions&&global.process.versions.node),i.global=i.isNode&&global||typeof window<"u"&&window||typeof self<"u"&&self||this,i.emptyArray=Object.freeze?Object.freeze([]):[],i.emptyObject=Object.freeze?Object.freeze({}):{},i.isInteger=Number.isInteger||function(a){return typeof a=="number"&&isFinite(a)&&Math.floor(a)===a},i.isString=function(a){return typeof a=="string"||a instanceof String},i.isObject=function(a){return a&&typeof a=="object"},i.isset=i.isSet=function(a,c){var d=a[c];return d!=null&&a.hasOwnProperty(c)?typeof d!="object"||(Array.isArray(d)?d.length:Object.keys(d).length)>0:!1},i.Buffer=function(){try{var s=i.inquire("buffer").Buffer;return s.prototype.utf8Write?s:null}catch{return null}}(),i._Buffer_from=null,i._Buffer_allocUnsafe=null,i.newBuffer=function(a){return typeof a=="number"?i.Buffer?i._Buffer_allocUnsafe(a):new i.Array(a):i.Buffer?i._Buffer_from(a):typeof Uint8Array>"u"?a:new Uint8Array(a)},i.Array=typeof Uint8Array<"u"?Uint8Array:Array,i.Long=i.global.dcodeIO&&i.global.dcodeIO.Long||i.global.Long||i.inquire("long"),i.key2Re=/^true|false|0|1$/,i.key32Re=/^-?(?:0|[1-9][0-9]*)$/,i.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,i.longToHash=function(a){return a?i.LongBits.from(a).toHash():i.LongBits.zeroHash},i.longFromHash=function(a,c){var d=i.LongBits.fromHash(a);return i.Long?i.Long.fromBits(d.lo,d.hi,c):d.toNumber(!!c)};function o(s,a,c){for(var d=Object.keys(a),u=0;u-1;--h)if(c[u[h]]===1&&this[u[h]]!==undefined&&this[u[h]]!==null)return u[h]}},i.oneOfSetter=function(a){return function(c){for(var d=0;d127;)S[R++]=E&127|128,E>>>=7;S[R]=E}function b(E,S){this.len=E,this.next=undefined,this.val=S}b.prototype=Object.create(c.prototype),b.prototype.fn=f,h.prototype.uint32=function(S){return this.len+=(this.tail=this.tail.next=new b((S=S>>>0)<128?1:S<16384?2:S<2097152?3:S<268435456?4:5,S)).len,this},h.prototype.int32=function(S){return S<0?this._push(x,10,r.fromNumber(S)):this.uint32(S)},h.prototype.sint32=function(S){return this.uint32((S<<1^S>>31)>>>0)};function x(E,S,R){for(;E.hi;)S[R++]=E.lo&127|128,E.lo=(E.lo>>>7|E.hi<<25)>>>0,E.hi>>>=7;for(;E.lo>127;)S[R++]=E.lo&127|128,E.lo=E.lo>>>7;S[R++]=E.lo}h.prototype.uint64=function(S){var R=r.from(S);return this._push(x,R.length(),R)},h.prototype.int64=h.prototype.uint64,h.prototype.sint64=function(S){var R=r.from(S).zzEncode();return this._push(x,R.length(),R)},h.prototype.bool=function(S){return this._push(g,1,S?1:0)};function I(E,S,R){S[R]=E&255,S[R+1]=E>>>8&255,S[R+2]=E>>>16&255,S[R+3]=E>>>24}h.prototype.fixed32=function(S){return this._push(I,4,S>>>0)},h.prototype.sfixed32=h.prototype.fixed32,h.prototype.fixed64=function(S){var R=r.from(S);return this._push(I,4,R.lo)._push(I,4,R.hi)},h.prototype.sfixed64=h.prototype.fixed64,h.prototype.float=function(S){return this._push(i.float.writeFloatLE,4,S)},h.prototype.double=function(S){return this._push(i.float.writeDoubleLE,8,S)};var _=i.Array.prototype.set?function(S,R,G){R.set(S,G)}:function(S,R,G){for(var B=0;B>>0;if(!R)return this._push(g,1,0);if(i.isString(S)){var G=h.alloc(R=s.length(S));s.decode(S,G,0),S=G}return this.uint32(R)._push(_,R,S)},h.prototype.string=function(S){var R=a.length(S);return R?this.uint32(R)._push(a.write,R,S):this._push(g,1,0)},h.prototype.fork=function(){return this.states=new u(this),this.head=this.tail=new c(d,0,0),this.len=0,this},h.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new c(d,0,0),this.len=0),this},h.prototype.ldelim=function(){var S=this.head,R=this.tail,G=this.len;return this.reset().uint32(G),G&&(this.tail.next=S.next,this.tail=R,this.len+=G),this},h.prototype.finish=function(){for(var S=this.head.next,R=this.constructor.alloc(this.len),G=0;S;)S.fn(S.val,R,G),G+=S.len,S=S.next;return R},h._configure=function(E){o=E,h.create=p(),o._configure()}},{15:15}],17:[function(e,t,n){"use strict";t.exports=r;var i=e(16);(r.prototype=Object.create(i.prototype)).constructor=r;var o=e(15);function r(){i.call(this)}r._configure=function(){r.alloc=o._Buffer_allocUnsafe,r.writeBytesBuffer=o.Buffer&&o.Buffer.prototype instanceof Uint8Array&&o.Buffer.prototype.set.name==="set"?function(c,d,u){d.set(c,u)}:function(c,d,u){if(c.copy)c.copy(d,u,0,c.length);else for(var h=0;h>>0;return this.uint32(d),d&&this._push(r.writeBytesBuffer,d,c),this};function s(a,c,d){a.length<40?o.utf8.write(a,c,d):c.utf8Write?c.utf8Write(a,d):c.write(a,d)}r.prototype.string=function(c){var d=o.Buffer.byteLength(c);return this.uint32(d),d&&this._push(s,d,c),this},r._configure()},{15:15,16:16}]},{},[8])})()});var kTe=Pu((Wco,JY)=>{var Fco=y(C());/* 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,h){h=h||{};var p=h.encodedMaskData||h.encodedMaskData===null,g=c(u,h.inputOffset||0,p),f=h.noDataValue!==null?h.noDataValue:o.defaultNoDataValue,b=r(g,h.pixelType||Float32Array,h.encodedMaskData,f,h.returnMask),x={width:g.width,height:g.height,pixelData:b.resultPixels,minValue:b.minValue,maxValue:g.pixels.maxValue,noDataValue:f};return b.resultMask&&(x.maskData=b.resultMask),h.returnEncodedMask&&g.mask&&(x.encodedMaskData=g.mask.bitset?g.mask.bitset:null),h.returnFileInfo&&(x.fileInfo=s(g),h.computeUsedBitDepths&&(x.fileInfo.bitDepths=a(g))),x};var r=function(u,h,p,g,f){var b=0,x=u.pixels.numBlocksX,I=u.pixels.numBlocksY,_=Math.floor(u.width/x),E=Math.floor(u.height/I),S=2*u.maxZError,R=Number.MAX_VALUE,G;p=p||(u.mask?u.mask.bitset:null);var B,w;B=new h(u.width*u.height),f&&p&&(w=new Uint8Array(u.width*u.height));for(var F=new Float32Array(_*E),P,A,T=0;T<=I;T++){var L=T!==I?E:u.height%I;if(L!==0)for(var V=0;V<=x;V++){var W=V!==x?_:u.width%x;if(W!==0){var M=T*u.width*E+V*_,Q=u.width-W,N=u.pixels.blocks[b],k,v,O;N.encoding<2?(N.encoding===0?k=N.rawData:(d(N.stuffedData,N.bitsPerPixel,N.numValidPixels,N.offset,S,F,u.pixels.maxValue),k=F),v=0):N.encoding===2?O=0:O=N.offset;var H;if(p)for(A=0;A>3],H<<=M&7),P=0;P>3]),H&128?(w&&(w[M]=1),G=N.encoding<2?k[v++]:O,R=R>G?G:R,B[M++]=G):(w&&(w[M]=0),B[M++]=g),H<<=1;M+=Q}else if(N.encoding<2)for(A=0;AG?G:R,B[M++]=G;M+=Q}else for(R=R>O?O:R,A=0;A0){var x=new Uint8Array(Math.ceil(g.width*g.height/8));b=new DataView(u,h,g.mask.numBytes);var I=b.getInt16(0,!0),_=2,E=0;do{if(I>0)for(;I--;)x[E++]=b.getUint8(_++);else{var S=b.getUint8(_++);for(I=-I;I--;)x[E++]=S}I=b.getInt16(_,!0),_+=2}while(_0?1:0),w=G+(g.height%G>0?1:0);g.pixels.blocks=new Array(B*w);for(var F=0,P=0;P3)throw"Invalid block encoding ("+V.encoding+")";if(V.encoding===2){h++;continue}if(W!==0&&W!==2){if(W>>=6,V.offsetType=W,W===2)V.offset=b.getInt8(1),T++;else if(W===1)V.offset=b.getInt16(1,!0),T+=2;else if(W===0)V.offset=b.getFloat32(1,!0),T+=4;else throw"Invalid block offset type";if(V.encoding===1)if(W=b.getUint8(T),T++,V.bitsPerPixel=W&63,W>>=6,V.numValidPixelsType=W,W===2)V.numValidPixels=b.getUint8(T),T++;else if(W===1)V.numValidPixels=b.getUint16(T,!0),T+=2;else if(W===0)V.numValidPixels=b.getUint32(T,!0),T+=4;else throw"Invalid valid pixel count type"}if(h+=T,V.encoding!==3){var M,Q;if(V.encoding===0){var N=(g.pixels.numBytes-1)/4;if(N!==Math.floor(N))throw"uncompressed block has invalid length";M=new ArrayBuffer(N*4),Q=new Uint8Array(M),Q.set(new Uint8Array(u,h,N*4));var k=new Float32Array(M);V.rawData=k,h+=N*4}else if(V.encoding===1){var v=Math.ceil(V.numValidPixels*V.bitsPerPixel/8),O=Math.ceil(v/4);M=new ArrayBuffer(O*4),Q=new Uint8Array(M),Q.set(new Uint8Array(u,h,v)),V.stuffedData=new Uint32Array(M),h+=v}}}return g.eofOffset=h,g},d=function(u,h,p,g,f,b,x){var I=(1<=h)R=G>>>S-h&I,S-=h;else{var F=h-S;R=(G&I)<>>S}b[E]=R=u?(S=R>>>E-u&x,E-=u):(G=u-E,S=(R&x)<>>E),d[_]=p[S];else for(B=Math.ceil((b-g)/f),_=0;_=u?(S=R>>>E-u&x,E-=u):(G=u-E,S=(R&x)<>>E),d[_]=S=d?(E=S>>>_-d&f,_-=d):(I=d-_,E=(S&f)<>>_),R[x]=E=u?(R=G>>>S&x,E-=u,S+=u):(B=u-E,R=G>>>S&x,G=c[I++],E=32-B,R|=(G&(1<=u?(R=G>>>S&x,E-=u,S+=u):(B=u-E,R=G>>>S&x,G=c[I++],E=32-B,R|=(G&(1<=d?(E=R>>>S&f,_-=d,S+=d):(I=d-_,E=R>>>S&f,R=c[b++],_=32-I,E|=(R&(1<=u?(x=I>>>b-u&p,b-=u):(_=u-b,x=(I&p)<<_&p,I=c[g++],b=32-_,x+=I>>>b),d[f]=x;return d},originalUnstuff2:function(c,d,u,h){var p=(1<=u?(I=_>>>x&p,b-=u,x+=u):(E=u-b,I=_>>>x&p,_=c[g++],b=32-E,I|=(_&(1<=359?359:p;p-=f;do d+=c[g++]<<8,u+=d+=c[g++];while(--f);d=(d&65535)+(d>>>16),u=(u&65535)+(u>>>16)}return h&1&&(u+=d+=c[g]<<8),d=(d&65535)+(d>>>16),u=(u&65535)+(u>>>16),(u<<16|d)>>>0},readHeaderInfo:function(c,d){var u=d.ptr,h=new Uint8Array(c,u,6),p={};if(p.fileIdentifierString=String.fromCharCode.apply(null,h),p.fileIdentifierString.lastIndexOf("Lerc2",0)!==0)throw"Unexpected file identifier string (expect Lerc2 ): "+p.fileIdentifierString;u+=6;var g=new DataView(c,u,8),f=g.getInt32(0,!0);p.fileVersion=f,u+=4,f>=3&&(p.checksum=g.getUint32(4,!0),u+=4),g=new DataView(c,u,12),p.height=g.getUint32(0,!0),p.width=g.getUint32(4,!0),u+=8,f>=4?(p.numDims=g.getUint32(8,!0),u+=4):p.numDims=1,g=new DataView(c,u,40),p.numValidPixel=g.getUint32(0,!0),p.microBlockSize=g.getInt32(4,!0),p.blobSize=g.getInt32(8,!0),p.imageType=g.getInt32(12,!0),p.maxZError=g.getFloat64(16,!0),p.zMin=g.getFloat64(24,!0),p.zMax=g.getFloat64(32,!0),u+=40,d.headerInfo=p,d.ptr=u;var b,x;if(f>=3&&(x=f>=4?52:48,b=this.computeChecksumFletcher32(new Uint8Array(c,u-x,p.blobSize-14)),b!==p.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(c,d){var u=d.headerInfo,h=this.getDataTypeArray(u.imageType),p=u.numDims*this.getDataTypeSize(u.imageType),g=this.readSubArray(c,d.ptr,h,p),f=this.readSubArray(c,d.ptr+p,h,p);d.ptr+=2*p;var b,x=!0;for(b=0;b0){x=new Uint8Array(Math.ceil(p/8)),f=new DataView(c,u,b.numBytes);var _=f.getInt16(0,!0),E=2,S=0,R=0;do{if(_>0)for(;_--;)x[S++]=f.getUint8(E++);else for(R=f.getUint8(E++),_=-_;_--;)x[S++]=R;_=f.getInt16(E,!0),E+=2}while(E>3],G<<=B&7):G=x[B>>3],G&128&&(I[B]=1);d.pixels.resultMask=I,b.bitset=x,u+=b.numBytes}return d.ptr=u,d.mask=b,!0},readDataOneSweep:function(c,d,u){var h=d.ptr,p=d.headerInfo,g=p.numDims,f=p.width*p.height,b=p.imageType,x=p.numValidPixel*r.getDataTypeSize(b)*g,I,_=d.pixels.resultMask;if(u===Uint8Array)I=new Uint8Array(c,h,x);else{var E=new ArrayBuffer(x),S=new Uint8Array(E);S.set(new Uint8Array(c,h,x)),I=new u(E)}if(I.length===f*g)d.pixels.resultPixels=I;else{d.pixels.resultPixels=new u(f*g);var R=0,G=0,B=0,w=0;if(g>1)for(B=0;B=b)return!1;var x=new Uint32Array(b-f);r.decodeBits(c,d,x);var I=[],_,E,S,R;for(_=f;_0&&(I[E].second=T<>>32-R,32-A>=R?(A+=R,A===32&&(A=0,L++,T=P[L])):(A+=R-32,L++,T=P[L],I[E].second|=T>>>32-A));var V=0,W=0,M=new s;for(_=0;_=u?W=u:W=V,V>=30&&console.log("WARning, large NUM LUT BITS IS "+V);var Q=[],N,k,v,O,H,ee;for(_=f;_0)if(N=[R,E],R<=W)for(k=I[E].second<=0;O--)H=k>>>O&1,H?(ee.right||(ee.right=new s),ee=ee.right):(ee.left||(ee.left=new s),ee=ee.left),O===0&&!ee.val&&(ee.val=N[1]);return{decodeLut:Q,numBitsLUTQick:W,numBitsLUT:V,tree:M,stuffedData:P,srcPtr:L,bitPos:A}},readHuffman:function(c,d,u){var h=d.headerInfo,p=h.numDims,g=d.headerInfo.height,f=d.headerInfo.width,b=f*g,x=this.readHuffmanTree(c,d),I=x.decodeLut,_=x.tree,E=x.stuffedData,S=x.srcPtr,R=x.bitPos,G=x.numBitsLUTQick,B=x.numBitsLUT,w=d.headerInfo.imageType===0?128:0,F,P,A,T=d.pixels.resultMask,L,V,W,M,Q,N,k,v=0;R>0&&(S++,R=0);var O=E[S],H=d.encodeMode===1,ee=new u(b*p),K=ee,te;for(te=0;te1&&(K=new u(ee.buffer,b*te,b),v=0),d.headerInfo.numValidPixel===f*g)for(N=0,M=0;M>>32-G,V=L,32-R>>64-R-G,V=L),I[V])P=I[V][1],R+=I[V][0];else for(L=O<>>32-B,V=L,32-R>>64-R-B,V=L),F=_,k=0;k>>B-k-1&1,F=W?F.right:F.left,!(F.left||F.right)){P=F.val,R=R+k+1;break}R>=32&&(R-=32,S++,O=E[S]),A=P-w,H?(Q>0?A+=v:M>0?A+=K[N-f]:A+=v,A&=255,K[N]=A,v=A):K[N]=A}else for(N=0,M=0;M>>32-G,V=L,32-R>>64-R-G,V=L),I[V])P=I[V][1],R+=I[V][0];else for(L=O<>>32-B,V=L,32-R>>64-R-B,V=L),F=_,k=0;k>>B-k-1&1,F=W?F.right:F.left,!(F.left||F.right)){P=F.val,R=R+k+1;break}R>=32&&(R-=32,S++,O=E[S]),A=P-w,H?(Q>0&&T[N-1]?A+=v:M>0&&T[N-f]?A+=K[N-f]:A+=v,A&=255,K[N]=A,v=A):K[N]=A}d.ptr=d.ptr+(S+1)*4+(R>0?4:0)}d.pixels.resultPixels=ee},decodeBits:function(c,d,u,h,p){{var g=d.headerInfo,f=g.fileVersion,b=0,x=new DataView(c,d.ptr,5),I=x.getUint8(0);b++;var _=I>>6,E=_===0?4:3-_,S=(I&32)>0,R=I&31,G=0;if(E===1)G=x.getUint8(b),b++;else if(E===2)G=x.getUint16(b,!0),b+=2;else if(E===4)G=x.getUint32(b,!0),b+=4;else throw"Invalid valid pixel count type";var B=2*g.maxZError,w,F,P,A,T,L,V,W,M,Q,N=g.numDims>1?g.maxValues[p]:g.zMax;if(S){for(d.counter.lut++,W=x.getUint8(b),M=R,b++,A=Math.ceil((W-1)*R/8),T=Math.ceil(A/4),F=new ArrayBuffer(T*4),P=new Uint8Array(F),d.ptr+=b,P.set(new Uint8Array(c,d.ptr,A)),V=new Uint32Array(F),d.ptr+=A,Q=0;W-1>>>Q;)Q++;A=Math.ceil(G*Q/8),T=Math.ceil(A/4),F=new ArrayBuffer(T*4),P=new Uint8Array(F),P.set(new Uint8Array(c,d.ptr,A)),w=new Uint32Array(F),d.ptr+=A,f>=3?L=o.unstuffLUT2(V,R,W-1,h,B,N):L=o.unstuffLUT(V,R,W-1,h,B,N),f>=3?o.unstuff2(w,u,Q,G,L):o.unstuff(w,u,Q,G,L)}else d.counter.bitstuffer++,Q=R,d.ptr+=b,Q>0&&(A=Math.ceil(G*Q/8),T=Math.ceil(A/4),F=new ArrayBuffer(T*4),P=new Uint8Array(F),P.set(new Uint8Array(c,d.ptr,A)),w=new Uint32Array(F),d.ptr+=A,f>=3?h==null?o.originalUnstuff2(w,u,Q,G):o.unstuff2(w,u,Q,G,!1,h,B,N):h==null?o.originalUnstuff(w,u,Q,G):o.unstuff(w,u,Q,G,!1,h,B,N))}},readTiles:function(c,d,u){var h=d.headerInfo,p=h.width,g=h.height,f=h.microBlockSize,b=h.imageType,x=r.getDataTypeSize(b),I=Math.ceil(p/f),_=Math.ceil(g/f);d.pixels.numBlocksY=_,d.pixels.numBlocksX=I,d.pixels.ptr=0;var E=0,S=0,R=0,G=0,B=0,w=0,F=0,P=0,A=0,T=0,L=0,V=0,W=0,M=0,Q=0,N=0,k,v,O,H,ee,K,te=new u(f*f),q=g%f||f,pe=p%f||f,ye,he,xe=h.numDims,Te,Be=d.pixels.resultMask,Le=d.pixels.resultPixels;for(R=0;R<_;R++)for(B=R!==_-1?f:q,G=0;G1&&(Le=new u(d.pixels.resultPixels.buffer,p*g*Te*x,p*g)),F=c.byteLength-d.ptr,k=new DataView(c,d.ptr,Math.min(10,F)),v={},N=0,P=k.getUint8(0),N++,A=P>>6&255,T=P>>2&15,T!==(G*f>>3&15))throw"integrity issue";if(K=P&3,K>3)throw d.ptr+=N,"Invalid block encoding ("+K+")";if(K===2){d.counter.constant++,d.ptr+=N;continue}else if(K===0){if(d.counter.uncompressed++,d.ptr+=N,W=B*w*x,M=c.byteLength-d.ptr,W=W1)for(g=0;g=-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,h){var p=0;switch(u){case 0:p=h.getInt8(d);break;case 1:p=h.getUint8(d);break;case 2:p=h.getInt16(d,!0);break;case 3:p=h.getUint16(d,!0);break;case 4:p=h.getInt32(d,!0);break;case 5:p=h.getUInt32(d,!0);break;case 6:p=h.getFloat32(d,!0);break;case 7:p=h.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,h=0,p={};if(p.ptr=d.inputOffset||0,p.pixels={},!!r.readHeaderInfo(c,p)){var g=p.headerInfo,f=g.fileVersion,b=r.getDataTypeArray(g.imageType);r.readMask(c,p),g.numValidPixel!==g.width*g.height&&!p.pixels.resultMask&&(p.pixels.resultMask=d.maskData);var x=g.width*g.height;if(p.pixels.resultPixels=new b(x*g.numDims),p.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0},g.numValidPixel!==0)if(g.zMax===g.zMin)r.constructConstantSurface(p);else if(f>=4&&r.checkMinMaxRanges(c,p))r.constructConstantSurface(p);else{var I=new DataView(c,p.ptr,2),_=I.getUint8(0);if(p.ptr++,_)r.readDataOneSweep(c,p,b);else if(f>1&&g.imageType<=1&&Math.abs(g.maxZError-.5)<1e-5){var E=I.getUint8(1);if(p.ptr++,p.encodeMode=E,E>2||f<4&&E>1)throw"Invalid Huffman flag "+E;E?r.readHuffman(c,p,b):r.readTiles(c,p,b)}else r.readTiles(c,p,b)}p.eofOffset=p.ptr;var S;d.inputOffset?(S=p.headerInfo.blobSize+d.inputOffset-p.ptr,Math.abs(S)>=1&&(p.eofOffset=d.inputOffset+p.headerInfo.blobSize)):(S=p.headerInfo.blobSize-p.ptr,Math.abs(S)>=1&&(p.eofOffset=p.headerInfo.blobSize));var R={width:g.width,height:g.height,pixelData:p.pixels.resultPixels,minValue:g.zMin,maxValue:g.zMax,validPixelCount:g.numValidPixel,dimCount:g.numDims,dimStats:{minValues:g.minValues,maxValues:g.maxValues},maskData:p.pixels.resultMask};if(p.pixels.resultMask&&r.isValidPixelValue(g.imageType,u)){var G=p.pixels.resultMask;for(h=0;h1&&_.fileInfo.mask&&_.fileInfo.mask.numBytes>0&&f.push(_.maskData),h++,I.pixels.push(_.pixelData),I.statistics.push({minValue:_.minValue,maxValue:_.maxValue,noDataValue:_.noDataValue,dimStats:_.dimStats})}var E,S,R;if(u>1&&f.length>1){for(R=I.width*I.height,I.bandMasks=f,x=new Uint8Array(R),x.set(f[0]),E=1;E{var HWo=y(C());BSe.exports={webm:"data:video/webm;base64,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",mp4:"data:video/mp4;base64,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"}});var WSe=Pu((zWo,XSe)=>{var KWo=y(C()),{webm:NRt,mp4:DRt}=wSe(),bee=()=>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,yee=()=>"wakeLock"in navigator,Cee=class{constructor(){if(this.enabled=!1,yee()){this._wakeLock=null;let t=()=>{this._wakeLock!==null&&document.visibilityState==="visible"&&this.enable()};document.addEventListener("visibilitychange",t),document.addEventListener("fullscreenchange",t)}else bee()?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm",NRt),this._addSourceToVideo(this.noSleepVideo,"mp4",DRt),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 yee()?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}):bee()?(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(){yee()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):bee()?this.noSleepTimer&&(console.warn(` NoSleep now disabled for older iOS devices. `),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}};XSe.exports=Cee});var dVt={};qSe(dVt,{AlphaMode:()=>Yf,AlphaPipelineStage:()=>Cw,AnchorPointDirect:()=>IB,AnchorPointIndirect:()=>_B,Animation:()=>WN,AnimationViewModel:()=>FN,Appearance:()=>go,ApproximateTerrainHeights:()=>Si,ArcGISTiledElevationTerrainProvider:()=>hq,ArcGisBaseMapType:()=>Gh,ArcGisMapServerImageryProvider:()=>QA,ArcGisMapService:()=>zd,ArcType:()=>dn,ArticulationStageType:()=>Pc,AssociativeArray:()=>Bt,Atmosphere:()=>JC,AtmospherePipelineStage:()=>ew,AttributeCompression:()=>Mn,AttributeType:()=>kt,AutoExposure:()=>OM,AutomaticUniforms:()=>tA,Axis:()=>ho,AxisAlignedBoundingBox:()=>Ib,B3dmLoader:()=>MB,B3dmParser:()=>WB,BaseLayerPicker:()=>MN,BaseLayerPickerViewModel:()=>PN,BatchTable:()=>oC,BatchTableHierarchy:()=>LC,BatchTexture:()=>yl,BatchTexturePipelineStage:()=>xw,Billboard:()=>Eo,BillboardCollection:()=>qd,BillboardGraphics:()=>_c,BillboardLoadState:()=>Ts,BillboardTexture:()=>JA,BillboardVisualizer:()=>h1,BingMapsGeocoderService:()=>pq,BingMapsImageryProvider:()=>Dw,BingMapsStyle:()=>JE,BlendEquation:()=>ac,BlendFunction:()=>Po,BlendOption:()=>No,BlendingState:()=>bn,BoundingRectangle:()=>Ke,BoundingSphere:()=>ue,BoundingSphereState:()=>At,BoundingVolumeSemantics:()=>YC,BoxEmitter:()=>s$,BoxGeometry:()=>sc,BoxGeometryUpdater:()=>AZ,BoxGraphics:()=>mC,BoxOutlineGeometry:()=>nh,BrdfLutGenerator:()=>JP,Buffer:()=>It,BufferLoader:()=>wC,BufferUsage:()=>Ne,CPUStylingPipelineStage:()=>Tw,CallbackPositionProperty:()=>gZ,CallbackProperty:()=>hh,Camera:()=>xo,CameraEventAggregator:()=>$M,CameraEventType:()=>qi,CameraFlightPath:()=>qP,Cartesian2:()=>D,Cartesian3:()=>m,Cartesian4:()=>ce,CartesianRectangle:()=>rT,Cartographic:()=>ge,CartographicGeocoderService:()=>gq,CatmullRomSpline:()=>bq,Cesium3DContentGroup:()=>SC,Cesium3DTile:()=>ym,Cesium3DTileBatchTable:()=>bA,Cesium3DTileColorBlendMode:()=>ed,Cesium3DTileContent:()=>a$,Cesium3DTileContentFactory:()=>Cx,Cesium3DTileContentState:()=>ir,Cesium3DTileContentType:()=>Js,Cesium3DTileFeature:()=>ma,Cesium3DTileFeatureTable:()=>Sh,Cesium3DTileOptimizationHint:()=>fm,Cesium3DTileOptimizations:()=>W2,Cesium3DTilePass:()=>zo,Cesium3DTilePassState:()=>vm,Cesium3DTilePointFeature:()=>jA,Cesium3DTileRefine:()=>tr,Cesium3DTileStyle:()=>p_,Cesium3DTileStyleEngine:()=>D2,Cesium3DTilesInspector:()=>kN,Cesium3DTilesInspectorViewModel:()=>UN,Cesium3DTilesVoxelProvider:()=>c$,Cesium3DTileset:()=>Ps,Cesium3DTilesetBaseTraversal:()=>H2,Cesium3DTilesetCache:()=>M2,Cesium3DTilesetGraphics:()=>yC,Cesium3DTilesetHeatmap:()=>v2,Cesium3DTilesetMetadata:()=>Gx,Cesium3DTilesetMostDetailedTraversal:()=>k2,Cesium3DTilesetSkipTraversal:()=>J2,Cesium3DTilesetStatistics:()=>Nh,Cesium3DTilesetTraversal:()=>ya,Cesium3DTilesetVisualizer:()=>j2,CesiumInspector:()=>HN,CesiumInspectorViewModel:()=>ON,CesiumTerrainProvider:()=>c_,CesiumWidget:()=>Hv,Check:()=>Bo,CheckerboardMaterialProperty:()=>BT,CircleEmitter:()=>aN,CircleGeometry:()=>Eq,CircleOutlineGeometry:()=>Tq,ClassificationModelDrawCommand:()=>PX,ClassificationPipelineStage:()=>Iw,ClassificationPrimitive:()=>$_,ClassificationType:()=>$n,ClearCommand:()=>xi,ClippingPlane:()=>OC,ClippingPlaneCollection:()=>Ws,ClippingPolygon:()=>GE,ClippingPolygonCollection:()=>Ih,Clock:()=>Yh,ClockRange:()=>ls,ClockStep:()=>Ro,ClockViewModel:()=>BN,CloudCollection:()=>f$,CloudType:()=>PL,Color:()=>U,ColorBlendMode:()=>Fc,ColorGeometryInstanceAttribute:()=>tn,ColorMaterialProperty:()=>qt,Command:()=>oee,ComponentDatatype:()=>J,Composite3DTileContent:()=>LZ,CompositeEntityCollection:()=>wJ,CompositeMaterialProperty:()=>XT,CompositePositionProperty:()=>ka,CompositeProperty:()=>Uc,CompressedTextureBuffer:()=>I1,ComputeCommand:()=>Il,ComputeEngine:()=>nP,ConditionsExpression:()=>iN,ConeEmitter:()=>A$,ConstantPositionProperty:()=>dl,ConstantProperty:()=>di,ConstantSpline:()=>QB,ContentMetadata:()=>S2,Context:()=>xI,ContextLimits:()=>Kt,CoplanarPolygonGeometry:()=>WW,CoplanarPolygonGeometryLibrary:()=>sg,CoplanarPolygonOutlineGeometry:()=>bm,CornerType:()=>Hi,CorrelationGroup:()=>EB,CorridorGeometry:()=>Px,CorridorGeometryLibrary:()=>io,CorridorGeometryUpdater:()=>sW,CorridorGraphics:()=>fC,CorridorOutlineGeometry:()=>rW,Credit:()=>Gt,CreditDisplay:()=>nM,CubeMap:()=>Pr,CubeMapFace:()=>B1,CubicRealPolynomial:()=>zy,CullFace:()=>Xi,CullingVolume:()=>Xs,CumulusCloud:()=>Bu,CustomDataSource:()=>mW,CustomHeightmapTerrainProvider:()=>Sq,CustomShader:()=>KI,CustomShaderMode:()=>DA,CustomShaderPipelineStage:()=>Bw,CustomShaderTranslucencyMode:()=>c0,CylinderGeometry:()=>hW,CylinderGeometryLibrary:()=>Mx,CylinderGeometryUpdater:()=>pW,CylinderGraphics:()=>pC,CylinderOutlineGeometry:()=>fW,CzmlDataSource:()=>TW,DataSource:()=>cs,DataSourceClock:()=>Oh,DataSourceCollection:()=>SW,DataSourceDisplay:()=>fF,DebugAppearance:()=>g$,DebugCameraPrimitive:()=>Rp,DebugInspector:()=>av,DebugModelMatrixPrimitive:()=>lN,DefaultProxy:()=>Lq,DepthFunction:()=>Fa,DepthPlane:()=>cM,DequantizationPipelineStage:()=>Xw,DerivedCommand:()=>Vp,DeveloperError:()=>Ae,DeviceOrientationCameraController:()=>lM,DirectionalLight:()=>b$,DiscardEmptyTileImagePolicy:()=>jE,DiscardMissingTileImagePolicy:()=>vw,DistanceDisplayCondition:()=>Qt,DistanceDisplayConditionGeometryInstanceAttribute:()=>jn,DoubleEndedPriorityQueue:()=>e_,DoublyLinkedList:()=>P2,DracoLoader:()=>TA,DrawCommand:()=>ot,DynamicAtmosphereLightingType:()=>GA,DynamicEnvironmentMapManager:()=>ZA,DynamicGeometryBatch:()=>Yx,DynamicGeometryUpdater:()=>yi,EarthOrientationParameters:()=>a1,EarthOrientationParametersSample:()=>ub,EasingFunction:()=>ms,EllipseGeometry:()=>Fl,EllipseGeometryLibrary:()=>Ad,EllipseGeometryUpdater:()=>RW,EllipseGraphics:()=>AC,EllipseOutlineGeometry:()=>du,Ellipsoid:()=>ie,EllipsoidGeodesic:()=>sA,EllipsoidGeometry:()=>xa,EllipsoidGeometryUpdater:()=>GW,EllipsoidGraphics:()=>gC,EllipsoidOutlineGeometry:()=>nu,EllipsoidPrimitive:()=>YP,EllipsoidRhumbLine:()=>cc,EllipsoidSurfaceAppearance:()=>y$,EllipsoidTangentPlane:()=>gs,EllipsoidTerrainProvider:()=>Tp,EllipsoidalOccluder:()=>gg,Empty3DTileContent:()=>yT,EncodedCartesian3:()=>ni,Entity:()=>ur,EntityCluster:()=>ou,EntityCollection:()=>Ca,EntityView:()=>AF,Event:()=>Ce,EventHelper:()=>Lr,Expression:()=>$u,ExpressionNodeType:()=>Et,ExtrapolationType:()=>su,FeatureDetection:()=>Ht,FeatureIdPipelineStage:()=>a0,Fog:()=>dM,ForEach:()=>Xe,FrameRateMonitor:()=>mN,FrameState:()=>uM,Framebuffer:()=>jr,FramebufferManager:()=>Gi,Frozen:()=>Y,FrustumCommands:()=>AM,FrustumGeometry:()=>RI,FrustumOutlineGeometry:()=>rM,Fullscreen:()=>Wr,FullscreenButton:()=>KN,FullscreenButtonViewModel:()=>zN,GaussianSplat3DTileContent:()=>bT,GaussianSplatPrimitive:()=>gT,GaussianSplatRenderResources:()=>I2,GaussianSplatSorter:()=>AT,GaussianSplatTextureGenerator:()=>x2,GeoJsonDataSource:()=>Q0,GeoJsonLoader:()=>vB,GeocodeType:()=>_y,Geocoder:()=>jN,GeocoderService:()=>BL,GeocoderViewModel:()=>JN,GeographicProjection:()=>Di,GeographicTilingScheme:()=>ao,Geometry:()=>pt,Geometry3DTileContent:()=>GZ,GeometryAttribute:()=>Ze,GeometryAttributes:()=>xn,GeometryFactory:()=>Rq,GeometryInstance:()=>wt,GeometryInstanceAttribute:()=>Gc,GeometryOffsetAttribute:()=>pn,GeometryPipeline:()=>Yn,GeometryPipelineStage:()=>Mw,GeometryType:()=>Qu,GeometryUpdater:()=>Ci,GeometryUpdaterSet:()=>nI,GeometryVisualizer:()=>nF,GetFeatureInfoFormat:()=>ox,Globe:()=>DP,GlobeDepth:()=>gM,GlobeSurfaceShaderSet:()=>GP,GlobeSurfaceTile:()=>Pm,GlobeSurfaceTileProvider:()=>BP,GlobeTranslucency:()=>wP,GlobeTranslucencyFramebuffer:()=>bM,GlobeTranslucencyState:()=>mM,GltfBufferViewLoader:()=>mE,GltfDracoLoader:()=>hE,GltfGpmLoader:()=>SB,GltfGpmLocal:()=>BE,GltfImageLoader:()=>fE,GltfIndexBufferLoader:()=>pE,GltfJsonLoader:()=>gE,GltfLoader:()=>Od,GltfLoaderUtil:()=>id,GltfMeshPrimitiveGpmLoader:()=>GB,GltfSpzLoader:()=>KZ,GltfStructuralMetadataLoader:()=>CB,GltfTextureLoader:()=>bE,GltfVertexBufferLoader:()=>yE,GoogleEarthEnterpriseImageryProvider:()=>x$,GoogleEarthEnterpriseMapsProvider:()=>kw,GoogleEarthEnterpriseMetadata:()=>ib,GoogleEarthEnterpriseTerrainData:()=>wL,GoogleEarthEnterpriseTerrainProvider:()=>Fq,GoogleEarthEnterpriseTileInformation:()=>Jv,GoogleGeocoderService:()=>Mq,GoogleMaps:()=>d_,GpxDataSource:()=>IF,GregorianDate:()=>Yp,GridImageryProvider:()=>I$,GridMaterialProperty:()=>kT,GroundGeometryUpdater:()=>ii,GroundPolylineGeometry:()=>cC,GroundPolylinePrimitive:()=>ch,GroundPrimitive:()=>cl,GroupMetadata:()=>VT,HeadingPitchRange:()=>Vm,HeadingPitchRoll:()=>ic,Heap:()=>n1,HeightReference:()=>et,HeightmapEncoding:()=>Xm,HeightmapTerrainData:()=>yc,HeightmapTessellator:()=>eL,HermitePolynomialApproximation:()=>AW,HermiteSpline:()=>o0,HilbertOrder:()=>cE,HomeButton:()=>$N,HomeButtonViewModel:()=>qN,HorizontalOrigin:()=>wi,I3SBuildingSceneLayerExplorer:()=>hee,I3SBuildingSceneLayerExplorerViewModel:()=>e9,I3SDataProvider:()=>_f,I3SDecoder:()=>hN,I3SFeature:()=>fN,I3SField:()=>pN,I3SGeometry:()=>ML,I3SLayer:()=>C_,I3SNode:()=>vL,I3SStatistics:()=>bN,I3SSublayer:()=>CN,I3SSymbology:()=>gN,I3dmLoader:()=>DB,I3dmParser:()=>NB,ITwinData:()=>S$,ITwinPlatform:()=>oa,Iau2000Orientation:()=>UP,Iau2006XysData:()=>c1,Iau2006XysSample:()=>ky,IauOrientationAxes:()=>kP,IauOrientationParameters:()=>QP,ImageBasedLighting:()=>TC,ImageBasedLightingPipelineStage:()=>nw,ImageMaterialProperty:()=>Lb,Imagery:()=>iT,ImageryConfiguration:()=>OX,ImageryCoverage:()=>sT,ImageryFlags:()=>$w,ImageryInput:()=>nX,ImageryLayer:()=>is,ImageryLayerCollection:()=>Xx,ImageryLayerFeatureInfo:()=>Vh,ImageryPipelineStage:()=>iX,ImageryProvider:()=>Sl,ImageryState:()=>Jn,Implicit3DTileContent:()=>EE,ImplicitAvailabilityBitstream:()=>dE,ImplicitMetadataView:()=>uE,ImplicitSubdivisionScheme:()=>Cs,ImplicitSubtree:()=>UC,ImplicitSubtreeCache:()=>rN,ImplicitSubtreeMetadata:()=>ZZ,ImplicitTileCoordinates:()=>wx,ImplicitTileset:()=>Bx,IndexDatatype:()=>Me,InfoBox:()=>n9,InfoBoxViewModel:()=>t9,InspectorShared:()=>Vd,InstanceAttributeSemantic:()=>Is,InstancingPipelineStage:()=>Aw,InterpolationAlgorithm:()=>vq,InterpolationType:()=>Eh,Intersect:()=>on,IntersectionTests:()=>fi,Intersections2D:()=>tb,Interval:()=>oc,InvertClassification:()=>uL,Ion:()=>Ah,IonGeocodeProviderType:()=>ob,IonGeocoderService:()=>u_,IonImageryProvider:()=>UA,IonResource:()=>Nd,IonWorldImageryStyle:()=>kA,Iso8601:()=>ze,JobScheduler:()=>hM,JobType:()=>uc,JsonMetadataTable:()=>BA,JulianDate:()=>j,KTX2Transcoder:()=>_1,KeyboardEventModifier:()=>La,KeyframeNode:()=>Go,KmlCamera:()=>_F,KmlDataSource:()=>pI,KmlLookAt:()=>HF,KmlTour:()=>zF,KmlTourFlyTo:()=>JF,KmlTourWait:()=>jF,Label:()=>p0,LabelCollection:()=>ep,LabelGraphics:()=>dh,LabelStyle:()=>nr,LabelVisualizer:()=>iF,LagrangePolynomialApproximation:()=>gW,LeapSecond:()=>ro,Light:()=>L$,LightingModel:()=>jf,LightingPipelineStage:()=>rX,LinearApproximation:()=>Nx,LinearSpline:()=>i0,ManagedArray:()=>bl,MapMode2D:()=>_d,MapProjection:()=>Qq,MapboxImageryProvider:()=>Yw,MapboxStyleImageryProvider:()=>R$,MappedPositions:()=>tX,Material:()=>so,MaterialAppearance:()=>Io,MaterialPipelineStage:()=>aX,MaterialProperty:()=>dr,Math:()=>Z,Matrix2:()=>Qi,Matrix3:()=>$,Matrix4:()=>X,Megatexture:()=>yL,MeshPrimitiveGpmLocal:()=>VB,MetadataClass:()=>Ch,MetadataClassProperty:()=>Qf,MetadataComponentType:()=>Ut,MetadataEntity:()=>Kn,MetadataEnum:()=>qZ,MetadataEnumValue:()=>jZ,MetadataPicking:()=>fM,MetadataPickingPipelineStage:()=>Jd,MetadataPipelineStage:()=>rm,MetadataSchema:()=>kd,MetadataSchemaLoader:()=>xE,MetadataSemantic:()=>kC,MetadataTable:()=>em,MetadataTableProperty:()=>wZ,MetadataType:()=>bt,MipmapHint:()=>Yu,Model:()=>Bh,Model3DTileContent:()=>jd,ModelAlphaOptions:()=>lx,ModelAnimation:()=>OB,ModelAnimationChannel:()=>YB,ModelAnimationCollection:()=>HB,ModelAnimationLoop:()=>od,ModelAnimationState:()=>Lh,ModelArticulation:()=>ow,ModelArticulationStage:()=>iw,ModelClippingPlanesPipelineStage:()=>aw,ModelClippingPolygonsPipelineStage:()=>dw,ModelColorPipelineStage:()=>s0,ModelComponents:()=>Tn,ModelDrawCommand:()=>MX,ModelDrawCommands:()=>DX,ModelFeature:()=>zB,ModelFeatureTable:()=>JB,ModelGraphics:()=>uA,ModelImagery:()=>HX,ModelImageryMapping:()=>sx,ModelLightingOptions:()=>XX,ModelMatrixUpdateStage:()=>gw,ModelNode:()=>uw,ModelPrimitiveImagery:()=>ax,ModelReader:()=>eX,ModelRenderResources:()=>LX,ModelRuntimeNode:()=>yw,ModelRuntimePrimitive:()=>_X,ModelSceneGraph:()=>QX,ModelSilhouettePipelineStage:()=>GX,ModelSkin:()=>EX,ModelSplitterPipelineStage:()=>BX,ModelStatistics:()=>UX,ModelType:()=>Tr,ModelUtility:()=>Mt,ModelVisualizer:()=>oF,Moon:()=>HP,MorphTargetsPipelineStage:()=>lX,MorphWeightSpline:()=>Uq,MortonOrder:()=>x0,Multiple3DTileContent:()=>V2,MultisampleFramebuffer:()=>ZB,NavigationHelpButton:()=>o9,NavigationHelpButtonViewModel:()=>i9,NearFarScalar:()=>zt,NeverTileDiscardPolicy:()=>G$,NodeRenderResources:()=>wX,NodeStatisticsPipelineStage:()=>bw,NodeTransformationProperty:()=>bC,OIT:()=>yM,Occluder:()=>zP,OffsetGeometryInstanceAttribute:()=>mo,OpenCageGeocoderService:()=>Yq,OpenStreetMapImageryProvider:()=>sb,OrderedGroundPrimitiveCollection:()=>LW,OrientedBoundingBox:()=>vn,OrthographicFrustum:()=>gn,OrthographicOffCenterFrustum:()=>qr,Packable:()=>Oq,PackableForInterpolation:()=>Hq,Particle:()=>QL,ParticleBurst:()=>B$,ParticleEmitter:()=>w$,ParticleSystem:()=>X$,Pass:()=>Ge,PassState:()=>Hc,PathGraphics:()=>mA,PathVisualizer:()=>sF,PeliasGeocoderService:()=>qv,PerInstanceColorAppearance:()=>yn,PerformanceDisplay:()=>kg,PerformanceWatchdog:()=>s9,PerformanceWatchdogViewModel:()=>r9,PerspectiveFrustum:()=>Ni,PerspectiveOffCenterFrustum:()=>vl,PickDepth:()=>pM,PickDepthFramebuffer:()=>xM,PickFramebuffer:()=>_M,PickedMetadataInfo:()=>Wv,Picking:()=>LM,PickingPipelineStage:()=>dX,PinBuilder:()=>Bg,PixelDatatype:()=>Ye,PixelFormat:()=>tt,Plane:()=>An,PlaneGeometry:()=>ZW,PlaneGeometryUpdater:()=>wW,PlaneGraphics:()=>lZ,PlaneOutlineGeometry:()=>BW,PntsLoader:()=>YX,PntsParser:()=>ux,PointCloud:()=>Yv,PointCloudEyeDomeLighting:()=>XA,PointCloudShading:()=>Hf,PointCloudStylingPipelineStage:()=>mX,PointGraphics:()=>CC,PointPrimitive:()=>$s,PointPrimitiveCollection:()=>vT,PointVisualizer:()=>cF,PolygonGeometry:()=>VA,PolygonGeometryLibrary:()=>ti,PolygonGeometryUpdater:()=>PW,PolygonGraphics:()=>uh,PolygonHierarchy:()=>lc,PolygonOutlineGeometry:()=>FW,PolygonPipeline:()=>_i,Polyline:()=>dm,PolylineArrowMaterialProperty:()=>OT,PolylineCollection:()=>Wh,PolylineColorAppearance:()=>bs,PolylineDashMaterialProperty:()=>zT,PolylineGeometry:()=>Zg,PolylineGeometryUpdater:()=>uF,PolylineGlowMaterialProperty:()=>JT,PolylineGraphics:()=>Zc,PolylineMaterialAppearance:()=>Pa,PolylineOutlineMaterialProperty:()=>V0,PolylinePipeline:()=>Oi,PolylineVisualizer:()=>hF,PolylineVolumeGeometry:()=>NW,PolylineVolumeGeometryLibrary:()=>Dh,PolylineVolumeGeometryUpdater:()=>kW,PolylineVolumeGraphics:()=>xC,PolylineVolumeOutlineGeometry:()=>UW,PositionProperty:()=>lh,PositionPropertyArray:()=>xg,PostProcessStage:()=>Lo,PostProcessStageCollection:()=>KM,PostProcessStageComposite:()=>Td,PostProcessStageLibrary:()=>Eu,PostProcessStageSampleMode:()=>_u,PostProcessStageTextureCache:()=>NI,PpeMetadata:()=>RB,PpeSource:()=>eee,PpeTexture:()=>LB,Primitive:()=>Nn,PrimitiveCollection:()=>Wl,PrimitiveLoadPlan:()=>$C,PrimitiveOutlineGenerator:()=>qC,PrimitiveOutlinePipelineStage:()=>pX,PrimitivePipeline:()=>rC,PrimitiveRenderResources:()=>WX,PrimitiveState:()=>Nr,PrimitiveStatisticsPipelineStage:()=>AX,PrimitiveType:()=>We,ProjectionPicker:()=>c9,ProjectionPickerViewModel:()=>a9,Property:()=>z,PropertyArray:()=>qT,PropertyAttribute:()=>jC,PropertyAttributeProperty:()=>AB,PropertyBag:()=>ml,PropertyTable:()=>_l,PropertyTexture:()=>wA,PropertyTextureProperty:()=>pB,ProviderViewModel:()=>Ls,Proxy:()=>zq,QuadraticRealPolynomial:()=>rl,QuadtreeOccluders:()=>XP,QuadtreePrimitive:()=>NP,QuadtreeTile:()=>WP,QuadtreeTileLoadState:()=>_a,QuadtreeTileProvider:()=>W$,QuantizedMeshTerrainData:()=>a_,QuarticRealPolynomial:()=>S1,Quaternion:()=>Pe,QuaternionSpline:()=>kB,Queue:()=>Jb,Ray:()=>En,Rectangle:()=>le,RectangleCollisionChecker:()=>oI,RectangleGeometry:()=>Jx,RectangleGeometryLibrary:()=>js,RectangleGeometryUpdater:()=>YW,RectangleGraphics:()=>mh,RectangleOutlineGeometry:()=>_x,ReferenceFrame:()=>eo,ReferenceProperty:()=>Ig,RenderState:()=>Qe,Renderbuffer:()=>Hd,RenderbufferFormat:()=>Tl,Request:()=>sr,RequestErrorEvent:()=>Lf,RequestScheduler:()=>Sc,RequestState:()=>mi,RequestType:()=>Zs,Resource:()=>Ve,ResourceCache:()=>Mi,ResourceCacheKey:()=>Cl,ResourceCacheStatistics:()=>tB,ResourceLoader:()=>Yi,ResourceLoaderState:()=>ft,Rotation:()=>_m,RuntimeError:()=>de,S2Cell:()=>xA,SDFSettings:()=>ga,SampledPositionProperty:()=>Oa,SampledProperty:()=>cu,Sampler:()=>sn,ScaledPositionProperty:()=>up,Scene:()=>Pv,SceneFramebuffer:()=>wI,SceneMode:()=>re,SceneMode2DPipelineStage:()=>gX,SceneModePicker:()=>d9,SceneModePickerViewModel:()=>l9,SceneTransforms:()=>to,SceneTransitioner:()=>qM,ScreenSpaceCameraController:()=>nv,ScreenSpaceEventHandler:()=>Su,ScreenSpaceEventType:()=>Zn,SelectedFeatureIdPipelineStage:()=>l0,SelectionIndicator:()=>h9,SelectionIndicatorViewModel:()=>m9,SensorVolumePortionToDisplay:()=>nS,ShaderBuilder:()=>OA,ShaderCache:()=>iP,ShaderDestination:()=>be,ShaderFunction:()=>SX,ShaderProgram:()=>ln,ShaderSource:()=>Oe,ShaderStruct:()=>TX,ShadowMap:()=>Hg,ShadowMapShader:()=>Bp,ShadowMode:()=>Gn,ShadowVolumeAppearance:()=>Pd,SharedContext:()=>aP,ShowGeometryInstanceAttribute:()=>Vn,Simon1994PlanetaryPositions:()=>ry,SimplePolylineGeometry:()=>Kq,SingleTileImageryProvider:()=>Ow,SkinningPipelineStage:()=>yX,SkyAtmosphere:()=>Mv,SkyBox:()=>vv,SpatialNode:()=>Bv,Spdcf:()=>TB,SpecularEnvironmentCubeMap:()=>ph,SphereEmitter:()=>P$,SphereGeometry:()=>Jq,SphereOutlineGeometry:()=>cg,Spherical:()=>bW,Spline:()=>yo,SplitDirection:()=>Ir,Splitter:()=>_L,StaticGeometryColorBatch:()=>Lm,StaticGeometryPerMaterialBatch:()=>Rm,StaticGroundGeometryColorBatch:()=>IS,StaticGroundGeometryPerMaterialBatch:()=>tF,StaticGroundPolylinePerMaterialBatch:()=>mF,StaticOutlineGeometryBatch:()=>TS,StencilConstants:()=>jt,StencilFunction:()=>ei,StencilOperation:()=>Ct,SteppedSpline:()=>UB,Stereographic:()=>Wc,StorageType:()=>$b,StripeMaterialProperty:()=>eS,StripeOrientation:()=>Hh,StructuralMetadata:()=>fa,StyleCommandsNeeded:()=>Rh,StyleExpression:()=>M$,Sun:()=>Qv,SunLight:()=>Ng,SunPostProcess:()=>rv,SupportedImageFormats:()=>xB,SvgPathBindingHandler:()=>GN,TaskProcessor:()=>hi,Terrain:()=>EN,TerrainData:()=>df,TerrainEncoding:()=>Kc,TerrainFillMesh:()=>oL,TerrainMesh:()=>Fm,TerrainOffsetProperty:()=>IC,TerrainProvider:()=>Es,TerrainQuantization:()=>Ia,TerrainState:()=>So,Texture:()=>Wt,Texture3D:()=>d7,TextureAtlas:()=>mx,TextureCache:()=>oP,TextureMagnificationFilter:()=>pi,TextureManager:()=>Lv,TextureMinificationFilter:()=>en,TexturePacker:()=>uT,TextureUniform:()=>q$,TextureWrap:()=>Ln,TileAvailability:()=>bf,TileBoundingRegion:()=>tu,TileBoundingS2Cell:()=>w2,TileBoundingSphere:()=>lg,TileBoundingVolume:()=>v$,TileCoordinatesImageryProvider:()=>SN,TileDiscardPolicy:()=>D$,TileEdge:()=>Rn,TileImagery:()=>oT,TileMapServiceImageryProvider:()=>u0,TileMetadata:()=>L2,TileOrientedBoundingBox:()=>hd,TileProviderError:()=>vo,TileReplacementQueue:()=>FP,TileSelectionResult:()=>li,TileState:()=>Q$,Tileset3DTileContent:()=>JX,TilesetMetadata:()=>X2,TilesetPipelineStage:()=>jB,TilingScheme:()=>jq,TimeConstants:()=>ai,TimeDynamicImagery:()=>rx,TimeDynamicPointCloud:()=>TL,TimeInterval:()=>wn,TimeIntervalCollection:()=>as,TimeIntervalCollectionPositionProperty:()=>_g,TimeIntervalCollectionProperty:()=>Eg,TimeStandard:()=>oi,Timeline:()=>A9,TimelineHighlightRange:()=>f9,TimelineTrack:()=>p9,Tipsify:()=>L1,ToggleButtonViewModel:()=>Vy,Tonemapper:()=>Kg,TrackingReferenceFrame:()=>rA,Transforms:()=>Dt,TranslationRotationScale:()=>Rb,TranslucentTileClassification:()=>EM,TridiagonalSystemSolver:()=>NE,TrustedServers:()=>X_,TweenCollection:()=>kI,UniformState:()=>sP,UniformType:()=>gL,UrlTemplateImageryProvider:()=>hc,VERSION:()=>lVt,VRButton:()=>b9,VRButtonViewModel:()=>g9,VRTheWorldTerrainProvider:()=>qq,VaryingType:()=>$$,Vector3DTileBatch:()=>Nf,Vector3DTileClampedPolylines:()=>b2,Vector3DTileContent:()=>C2,Vector3DTileGeometry:()=>CA,Vector3DTilePoints:()=>u2,Vector3DTilePolygons:()=>m2,Vector3DTilePolylines:()=>bx,Vector3DTilePrimitive:()=>GC,VelocityOrientationProperty:()=>CW,VelocityVectorProperty:()=>Tg,VertexArray:()=>ui,VertexArrayFacade:()=>zA,VertexAttributeSemantic:()=>lt,VertexFormat:()=>we,VerticalExaggeration:()=>Mr,VerticalExaggerationPipelineStage:()=>xX,VerticalOrigin:()=>kn,VideoSynchronizer:()=>$q,View:()=>FI,Viewer:()=>Iee,ViewportQuad:()=>U$,Visibility:()=>Zr,Visualizer:()=>J8,VoxelBoxShape:()=>jI,VoxelCell:()=>cv,VoxelContent:()=>JI,VoxelCylinderShape:()=>qI,VoxelEllipsoidShape:()=>$I,VoxelInspector:()=>C9,VoxelInspectorViewModel:()=>y9,VoxelMetadataOrder:()=>Um,VoxelPrimitive:()=>by,VoxelProvider:()=>Y$,VoxelRenderResources:()=>_v,VoxelShape:()=>O$,VoxelShapeType:()=>qa,VoxelTraversal:()=>wv,VulkanConstants:()=>e$,WallGeometry:()=>HW,WallGeometryLibrary:()=>jx,WallGeometryUpdater:()=>JW,WallGraphics:()=>hA,WallOutlineGeometry:()=>KW,WebGLConstants:()=>ne,WebMapServiceImageryProvider:()=>zw,WebMapTileServiceImageryProvider:()=>Jw,WebMercatorProjection:()=>Ui,WebMercatorTilingScheme:()=>_s,WindingOrder:()=>ws,WireframeIndexGenerator:()=>aT,WireframePipelineStage:()=>IX,_shadersAcesTonemappingStage:()=>RM,_shadersAdditiveBlend:()=>iv,_shadersAdjustTranslucentFS:()=>KS,_shadersAllMaterialAppearanceFS:()=>A1,_shadersAllMaterialAppearanceVS:()=>g1,_shadersAmbientOcclusionGenerate:()=>VM,_shadersAmbientOcclusionModulate:()=>GM,_shadersAspectRampMaterial:()=>X1,_shadersAtmosphereCommon:()=>_h,_shadersAtmosphereStageFS:()=>qB,_shadersAtmosphereStageVS:()=>$B,_shadersBasicMaterialAppearanceFS:()=>b1,_shadersBasicMaterialAppearanceVS:()=>y1,_shadersBillboardCollectionFS:()=>jX,_shadersBillboardCollectionVS:()=>qX,_shadersBlackAndWhite:()=>ZM,_shadersBloomComposite:()=>BM,_shadersBrdfLutGeneratorFS:()=>lP,_shadersBrightPass:()=>ov,_shadersBrightness:()=>wM,_shadersBumpMapMaterial:()=>W1,_shadersCPUStylingStageFS:()=>Ew,_shadersCPUStylingStageVS:()=>_w,_shadersCheckerboardMaterial:()=>F1,_shadersCloudCollectionFS:()=>dP,_shadersCloudCollectionVS:()=>uP,_shadersCloudNoiseFS:()=>mP,_shadersCloudNoiseVS:()=>hP,_shadersCompareAndPackTranslucentDepth:()=>fP,_shadersCompositeOITFS:()=>pP,_shadersCompositeTranslucentClassification:()=>WI,_shadersComputeIrradianceFS:()=>cB,_shadersComputeRadianceMapFS:()=>lB,_shadersContrastBias:()=>XM,_shadersConvolveSpecularMapFS:()=>dB,_shadersConvolveSpecularMapVS:()=>uB,_shadersCustomShaderStageFS:()=>Lw,_shadersCustomShaderStageVS:()=>Sw,_shadersCzmBuiltins:()=>iC,_shadersDepthOfField:()=>WM,_shadersDepthPlaneFS:()=>AP,_shadersDepthPlaneVS:()=>gP,_shadersDepthView:()=>FM,_shadersDepthViewPacked:()=>j$,_shadersDotMaterial:()=>P1,_shadersEdgeDetection:()=>PM,_shadersElevationBandMaterial:()=>M1,_shadersElevationContourMaterial:()=>v1,_shadersElevationRampMaterial:()=>N1,_shadersEllipsoidFS:()=>JS,_shadersEllipsoidSurfaceAppearanceFS:()=>dN,_shadersEllipsoidSurfaceAppearanceVS:()=>uN,_shadersEllipsoidVS:()=>jS,_shadersFXAA:()=>NM,_shadersFXAA3_11:()=>bP,_shadersFadeMaterial:()=>D1,_shadersFeatureIdStageFS:()=>Rw,_shadersFeatureIdStageVS:()=>Vw,_shadersFilmicTonemapping:()=>MM,_shadersGaussianBlur1D:()=>fy,_shadersGeometryStageFS:()=>Ww,_shadersGeometryStageVS:()=>Fw,_shadersGlobeFS:()=>yP,_shadersGlobeVS:()=>CP,_shadersGridMaterial:()=>Q1,_shadersGroundAtmosphere:()=>qS,_shadersHSBToRGB:()=>tV,_shadersHSLToRGB:()=>nV,_shadersImageBasedLightingStageFS:()=>tw,_shadersInstancingStageCommon:()=>mw,_shadersInstancingStageVS:()=>hw,_shadersIntersectBox:()=>pv,_shadersIntersectClippingPlanes:()=>fv,_shadersIntersectCylinder:()=>Av,_shadersIntersectDepth:()=>hv,_shadersIntersectEllipsoid:()=>gv,_shadersIntersectLongitude:()=>AL,_shadersIntersection:()=>HI,_shadersIntersectionUtils:()=>mv,_shadersLegacyInstancingStageVS:()=>fw,_shadersLensFlare:()=>DM,_shadersLightingStageFS:()=>oX,_shadersMaterialStageFS:()=>sX,_shadersMegatexture:()=>Iv,_shadersMetadataStageFS:()=>Gw,_shadersMetadataStageVS:()=>Zw,_shadersModelClippingPlanesStageFS:()=>sw,_shadersModelClippingPolygonsStageFS:()=>lw,_shadersModelClippingPolygonsStageVS:()=>cw,_shadersModelColorStageFS:()=>rw,_shadersModelFS:()=>NX,_shadersModelSilhouetteStageFS:()=>RX,_shadersModelSilhouetteStageVS:()=>VX,_shadersModelSplitterStageFS:()=>ZX,_shadersModelVS:()=>vX,_shadersModifiedReinhardTonemapping:()=>QM,_shadersMorphTargetsStageVS:()=>cX,_shadersNightVision:()=>UM,_shadersNormalMapMaterial:()=>U1,_shadersOctree:()=>xv,_shadersPassThrough:()=>Ed,_shadersPassThroughDepth:()=>uy,_shadersPbrNeutralTonemapping:()=>vM,_shadersPerInstanceColorAppearanceFS:()=>eR,_shadersPerInstanceColorAppearanceVS:()=>tR,_shadersPerInstanceFlatColorAppearanceFS:()=>tC,_shadersPerInstanceFlatColorAppearanceVS:()=>nR,_shadersPointCloudEyeDomeLighting:()=>wB,_shadersPointCloudStylingStageVS:()=>uX,_shadersPointPrimitiveCollectionFS:()=>R0,_shadersPointPrimitiveCollectionVS:()=>aW,_shadersPolygonSignedDistanceFS:()=>sB,_shadersPolylineArrowMaterial:()=>k1,_shadersPolylineColorAppearanceVS:()=>JG,_shadersPolylineCommon:()=>Md,_shadersPolylineDashMaterial:()=>Y1,_shadersPolylineFS:()=>dC,_shadersPolylineGlowMaterial:()=>O1,_shadersPolylineMaterialAppearanceVS:()=>jG,_shadersPolylineOutlineMaterial:()=>H1,_shadersPolylineShadowVolumeFS:()=>OG,_shadersPolylineShadowVolumeMorphFS:()=>HG,_shadersPolylineShadowVolumeMorphVS:()=>zG,_shadersPolylineShadowVolumeVS:()=>KG,_shadersPolylineVS:()=>r2,_shadersPrimitiveGaussianSplatFS:()=>E2,_shadersPrimitiveGaussianSplatVS:()=>_2,_shadersPrimitiveOutlineStageFS:()=>fX,_shadersPrimitiveOutlineStageVS:()=>hX,_shadersRGBToHSB:()=>iV,_shadersRGBToHSL:()=>oV,_shadersRGBToXYZ:()=>rV,_shadersReinhardTonemapping:()=>kM,_shadersReprojectWebMercatorFS:()=>jw,_shadersReprojectWebMercatorVS:()=>qw,_shadersRimLightingMaterial:()=>z1,_shadersSelectedFeatureIdStageCommon:()=>HE,_shadersShadowVolumeAppearanceFS:()=>j_,_shadersShadowVolumeAppearanceVS:()=>MG,_shadersShadowVolumeFS:()=>Eb,_shadersSilhouette:()=>YM,_shadersSkinningStageVS:()=>bX,_shadersSkyAtmosphereCommon:()=>$S,_shadersSkyAtmosphereFS:()=>xP,_shadersSkyAtmosphereVS:()=>IP,_shadersSkyBoxFS:()=>_P,_shadersSkyBoxVS:()=>EP,_shadersSlopeRampMaterial:()=>K1,_shadersStripeMaterial:()=>J1,_shadersSunFS:()=>TP,_shadersSunTextureFS:()=>SP,_shadersSunVS:()=>LP,_shadersTexturedMaterialAppearanceFS:()=>C1,_shadersTexturedMaterialAppearanceVS:()=>x1,_shadersVector3DTileClampedPolylinesFS:()=>A2,_shadersVector3DTileClampedPolylinesVS:()=>p2,_shadersVector3DTilePolylinesVS:()=>h2,_shadersVectorTileVS:()=>aE,_shadersVerticalExaggerationStageVS:()=>CX,_shadersViewportQuadFS:()=>RP,_shadersViewportQuadVS:()=>yI,_shadersVoxelFS:()=>dv,_shadersVoxelUtils:()=>lv,_shadersVoxelVS:()=>uv,_shadersWater:()=>q1,_shadersWaterMaskMaterial:()=>j1,_shadersXYZToRGB:()=>sV,_shadersacesTonemapping:()=>aV,_shadersalphaWeight:()=>cV,_shadersantialias:()=>lV,_shadersapplyHSBShift:()=>dV,_shadersapproximateSphericalCoordinates:()=>uV,_shadersapproximateTanh:()=>mV,_shadersbackFacing:()=>hV,_shadersbranchFreeTernary:()=>fV,_shaderscascadeColor:()=>pV,_shaderscascadeDistance:()=>AV,_shaderscascadeMatrix:()=>gV,_shaderscascadeWeights:()=>bV,_shadersclipPolygons:()=>yV,_shaderscolumbusViewMorph:()=>CV,_shaderscomputeAtmosphereColor:()=>xV,_shaderscomputeGroundAtmosphereScattering:()=>IV,_shaderscomputePosition:()=>_V,_shaderscomputeScattering:()=>EV,_shadersconvertUvToBox:()=>bv,_shadersconvertUvToCylinder:()=>yv,_shadersconvertUvToEllipsoid:()=>Cv,_shaderscosineAndSine:()=>TV,_shadersdecompressTextureCoordinates:()=>SV,_shadersdegreesPerRadian:()=>cR,_shadersdepthClamp:()=>LV,_shadersdepthRange:()=>lR,_shadersdepthRangeStruct:()=>HR,_shaderseastNorthUpToEyeCoordinates:()=>RV,_shadersellipsoidContainsPoint:()=>VV,_shadersellipsoidTextureCoordinates:()=>GV,_shadersepsilon1:()=>dR,_shadersepsilon2:()=>uR,_shadersepsilon3:()=>mR,_shadersepsilon4:()=>hR,_shadersepsilon5:()=>fR,_shadersepsilon6:()=>pR,_shadersepsilon7:()=>AR,_shadersequalsEpsilon:()=>ZV,_shaderseyeOffset:()=>BV,_shaderseyeToWindowCoordinates:()=>wV,_shadersfastApproximateAtan:()=>XV,_shadersfog:()=>WV,_shadersgammaCorrect:()=>FV,_shadersgeodeticSurfaceNormal:()=>PV,_shadersgetDefaultMaterial:()=>MV,_shadersgetDynamicAtmosphereLightDirection:()=>vV,_shadersgetLambertDiffuse:()=>NV,_shadersgetSpecular:()=>DV,_shadersgetWaterNoise:()=>QV,_shadershue:()=>UV,_shadersinfinity:()=>gR,_shadersinverseGamma:()=>kV,_shadersisEmpty:()=>YV,_shadersisFull:()=>OV,_shaderslatitudeToWebMercatorFraction:()=>HV,_shaderslineDistance:()=>zV,_shaderslinearToSrgb:()=>KV,_shadersluminance:()=>JV,_shadersmaterial:()=>zR,_shadersmaterialInput:()=>KR,_shadersmaximumComponent:()=>jV,_shadersmetersPerPixel:()=>qV,_shadersmodelMaterial:()=>JR,_shadersmodelToWindowCoordinates:()=>$V,_shadersmodelVertexOutput:()=>jR,_shadersmultiplyWithColorBalance:()=>eG,_shadersnearFarScalar:()=>tG,_shadersoctDecode:()=>nG,_shadersoneOverPi:()=>bR,_shadersoneOverTwoPi:()=>yR,_shaderspackDepth:()=>iG,_shaderspassCesium3DTile:()=>CR,_shaderspassCesium3DTileClassification:()=>xR,_shaderspassCesium3DTileClassificationIgnoreShow:()=>IR,_shaderspassClassification:()=>_R,_shaderspassCompute:()=>ER,_shaderspassEnvironment:()=>TR,_shaderspassGaussianSplats:()=>SR,_shaderspassGlobe:()=>LR,_shaderspassOpaque:()=>RR,_shaderspassOverlay:()=>VR,_shaderspassTerrainClassification:()=>GR,_shaderspassTranslucent:()=>ZR,_shaderspassVoxels:()=>BR,_shaderspbrLighting:()=>oG,_shaderspbrNeutralTonemapping:()=>rG,_shadersphong:()=>sG,_shaderspi:()=>wR,_shaderspiOverFour:()=>XR,_shaderspiOverSix:()=>WR,_shaderspiOverThree:()=>FR,_shaderspiOverTwo:()=>PR,_shadersplaneDistance:()=>aG,_shaderspointAlongRay:()=>cG,_shadersradiansPerDegree:()=>MR,_shadersray:()=>qR,_shadersrayEllipsoidIntersectionInterval:()=>lG,_shadersraySegment:()=>$R,_shadersraySphereIntersectionInterval:()=>dG,_shadersreadDepth:()=>uG,_shadersreadNonPerspective:()=>mG,_shadersreverseLogDepth:()=>hG,_shadersround:()=>fG,_shaderssaturation:()=>pG,_shaderssceneMode2D:()=>vR,_shaderssceneMode3D:()=>NR,_shaderssceneModeColumbusView:()=>DR,_shaderssceneModeMorphing:()=>QR,_shadersshadowDepthCompare:()=>AG,_shadersshadowParameters:()=>eV,_shadersshadowVisibility:()=>gG,_shaderssignNotZero:()=>bG,_shaderssolarRadius:()=>UR,_shaderssphericalHarmonics:()=>yG,_shaderssrgbToLinear:()=>CG,_shaderstangentToEyeSpaceMatrix:()=>xG,_shaderstextureCube:()=>IG,_shadersthreePiOver2:()=>kR,_shaderstransformPlane:()=>_G,_shaderstranslateRelativeToEye:()=>EG,_shaderstranslucentPhong:()=>TG,_shaderstranspose:()=>SG,_shaderstwoPi:()=>YR,_shadersunpackClippingExtents:()=>LG,_shadersunpackDepth:()=>RG,_shadersunpackFloat:()=>VG,_shadersunpackUint:()=>GG,_shadersvalueTransform:()=>ZG,_shadersvertexLogDepth:()=>BG,_shaderswebMercatorMaxLatitude:()=>OR,_shaderswindowToEyeCoordinates:()=>wG,_shaderswriteDepthClamp:()=>XG,_shaderswriteLogDepth:()=>WG,_shaderswriteNonPerspective:()=>FG,addAllToArray:()=>ci,addBuffer:()=>QZ,addDefaults:()=>XZ,addExtensionsRequired:()=>vZ,addExtensionsUsed:()=>tm,addPipelineExtras:()=>Db,addToArray:()=>Os,appendForwardSlash:()=>$L,arrayRemoveDuplicates:()=>Xo,barycentricCoordinates:()=>Hy,binarySearch:()=>Yo,buildModuleUrl:()=>hn,buildVoxelDrawCommands:()=>Tv,clone:()=>ke,combine:()=>Lt,computeFlyToLocationForRectangle:()=>EI,createBillboardPointCallback:()=>fx,createCommand:()=>Xn,createDefaultImageryProviderViewModels:()=>vN,createDefaultTerrainProviderViewModels:()=>NN,createElevationBandMaterial:()=>H$,createGooglePhotorealistic3DTileset:()=>z$,createGuid:()=>qn,createMaterialPropertyDescriptor:()=>Oo,createOsmBuildingsAsync:()=>K$,createPropertyDescriptor:()=>fe,createRawPropertyDescriptor:()=>ul,createTangentSpaceDebugPrimitive:()=>J$,createTaskProcessorWorker:()=>tee,createUniform:()=>sR,createUniformArray:()=>aR,createWorldBathymetryAsync:()=>eN,createWorldImageryAsync:()=>YA,createWorldTerrainAsync:()=>h_,decodeGoogleEarthEnterpriseData:()=>tN,decodeVectorPolylinePositions:()=>y2,defaultValue:()=>n$,defer:()=>Ol,defined:()=>l,demodernizeShader:()=>PG,deprecationWarning:()=>_r,destroyObject:()=>me,exportKml:()=>t7,findAccessorMinMax:()=>vC,findContentMetadata:()=>xx,findGroupMetadata:()=>Ix,findTileMetadata:()=>R2,forEachTextureInMaterial:()=>AE,formatError:()=>Kf,freezeRenderState:()=>lH,getAbsoluteUri:()=>Tf,getAccessorByteStride:()=>nd,getBaseUri:()=>e1,getBinaryAccessor:()=>Dd,getClipAndStyleCode:()=>Uv,getClippingFunction:()=>Qg,getComponentReader:()=>LA,getElement:()=>Dn,getExtensionFromUri:()=>Fy,getFilenameFromUri:()=>yg,getImageFromTypedArray:()=>Sv,getImagePixels:()=>$m,getJsonFromTypedArray:()=>mr,getMagic:()=>gh,getMetadataClassProperty:()=>Xv,getMetadataProperty:()=>Fv,getStringFromTypedArray:()=>$l,getTimestamp:()=>Fi,hasExtension:()=>Ii,heightReferenceOnEntityPropertyChanged:()=>fA,isBitSet:()=>el,isBlobUri:()=>Py,isCrossOriginUrl:()=>hb,isDataUri:()=>Op,isLeapYear:()=>qm,knockout:()=>Ee,knockout_3_5_1:()=>I_,knockout_es5:()=>VN,loadAndExecuteScript:()=>My,loadCubeMap:()=>cP,loadImageFromTypedArray:()=>FC,loadKTX2:()=>Kl,mergeSort:()=>Sp,moveTechniqueRenderStates:()=>MZ,moveTechniquesToExtension:()=>NZ,numberOfComponentsForType:()=>Ud,objectToQuery:()=>vy,oneTimeWarning:()=>xt,parseBatchTable:()=>PA,parseFeatureMetadataLegacy:()=>yB,parseGlb:()=>FZ,parseResponseHeaders:()=>t1,parseStructuralMetadata:()=>bB,pickModel:()=>dT,pointInsideTriangle:()=>i$,preprocess3DTileContent:()=>rg,processVoxelProperties:()=>Ev,queryToObject:()=>wd,readAccessorPacked:()=>UZ,removeExtension:()=>NC,removeExtensionsRequired:()=>WZ,removeExtensionsUsed:()=>MC,removePipelineExtras:()=>PZ,removeUnusedElements:()=>DZ,resizeImageToNextPowerOfTwo:()=>kb,sampleTerrain:()=>VP,sampleTerrainMostDetailed:()=>_I,scaleToGeodeticSurface:()=>Wy,srgbToLinear:()=>f_,subdivideArray:()=>vG,subscribeAndEvaluate:()=>$a,updateAccessorComponentTypes:()=>kZ,updateVersion:()=>YZ,usesExtension:()=>Er,viewerCesium3DTilesInspectorMixin:()=>_ee,viewerCesiumInspectorMixin:()=>Eee,viewerDragDropMixin:()=>See,viewerPerformanceWatchdogMixin:()=>Lee,viewerVoxelInspectorMixin:()=>Vee,webGLConstantToGlslType:()=>o$,wrapFunction:()=>nN,writeTextToCanvas:()=>Ax});var lMo=y(C(),1);var imo=y(C(),1);var DVt=y(C(),1);var pVt=y(C(),1),Z3={};Z3.EMPTY_OBJECT=Object.freeze({});Z3.EMPTY_ARRAY=Object.freeze([]);var Y=Z3;var gVt=y(C(),1);function eLe(e){return e!=null}var l=eLe;var CVt=y(C(),1);function wy(e){this.name="DeveloperError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}l(Object.create)&&(wy.prototype=Object.create(Error.prototype),wy.prototype.constructor=wy);wy.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return l(this.stack)&&(e+=` ${this.stack.toString()}`),e};wy.throwInstantiationError=function(){throw new wy("This function defines an interface and should not be called directly.")};var Ae=wy;var LVt=y(C(),1);var EVt=y(C(),1);var Ys={};Ys.typeOf={};function tLe(e){return`${e} is required, actual value was undefined`}function L_(e,t,n){return`Expected ${n} to be typeof ${t}, actual typeof was ${e}`}Ys.defined=function(e,t){if(!l(t))throw new Ae(tLe(e))};Ys.typeOf.func=function(e,t){if(typeof t!="function")throw new Ae(L_(typeof t,"function",e))};Ys.typeOf.string=function(e,t){if(typeof t!="string")throw new Ae(L_(typeof t,"string",e))};Ys.typeOf.number=function(e,t){if(typeof t!="number")throw new Ae(L_(typeof t,"number",e))};Ys.typeOf.number.lessThan=function(e,t,n){if(Ys.typeOf.number(e,t),t>=n)throw new Ae(`Expected ${e} to be less than ${n}, actual value was ${t}`)};Ys.typeOf.number.lessThanOrEquals=function(e,t,n){if(Ys.typeOf.number(e,t),t>n)throw new Ae(`Expected ${e} to be less than or equal to ${n}, actual value was ${t}`)};Ys.typeOf.number.greaterThan=function(e,t,n){if(Ys.typeOf.number(e,t),t<=n)throw new Ae(`Expected ${e} to be greater than ${n}, actual value was ${t}`)};Ys.typeOf.number.greaterThanOrEquals=function(e,t,n){if(Ys.typeOf.number(e,t),t0){for(o.sort(nLe),e=0;e0&&(this._hash={},e.length=0)};var Bt=Xy;var vXt=y(C(),1);var qVt=y(C(),1);var zVt=y(C(),1),B3=y(T9(),1);var ht={};ht.EPSILON1=.1;ht.EPSILON2=.01;ht.EPSILON3=.001;ht.EPSILON4=1e-4;ht.EPSILON5=1e-5;ht.EPSILON6=1e-6;ht.EPSILON7=1e-7;ht.EPSILON8=1e-8;ht.EPSILON9=1e-9;ht.EPSILON10=1e-10;ht.EPSILON11=1e-11;ht.EPSILON12=1e-12;ht.EPSILON13=1e-13;ht.EPSILON14=1e-14;ht.EPSILON15=1e-15;ht.EPSILON16=1e-16;ht.EPSILON17=1e-17;ht.EPSILON18=1e-18;ht.EPSILON19=1e-19;ht.EPSILON20=1e-20;ht.EPSILON21=1e-21;ht.GRAVITATIONALPARAMETER=3986004418e5;ht.SOLAR_RADIUS=6955e5;ht.LUNAR_RADIUS=1737400;ht.SIXTY_FOUR_KILOBYTES=64*1024;ht.FOUR_GIGABYTES=4*1024*1024*1024;ht.sign=Math.sign??function(t){return t=+t,t===0||t!==t?t:t>0?1:-1};ht.signNotZero=function(e){return e<0?-1:1};ht.toSNorm=function(e,t){return t=t??255,Math.round((ht.clamp(e,-1,1)*.5+.5)*t)};ht.fromSNorm=function(e,t){return t=t??255,ht.clamp(e,0,t)/t*2-1};ht.normalize=function(e,t,n){return n=Math.max(n-t,0),n===0?0:ht.clamp((e-t)/n,0,1)};ht.sinh=Math.sinh??function(t){return(Math.exp(t)-Math.exp(-t))/2};ht.cosh=Math.cosh??function(t){return(Math.exp(t)+Math.exp(-t))/2};ht.lerp=function(e,t,n){return(1-n)*e+n*t};ht.PI=Math.PI;ht.ONE_OVER_PI=1/Math.PI;ht.PI_OVER_TWO=Math.PI/2;ht.PI_OVER_THREE=Math.PI/3;ht.PI_OVER_FOUR=Math.PI/4;ht.PI_OVER_SIX=Math.PI/6;ht.THREE_PI_OVER_TWO=3*Math.PI/2;ht.TWO_PI=2*Math.PI;ht.ONE_OVER_TWO_PI=1/(2*Math.PI);ht.RADIANS_PER_DEGREE=Math.PI/180;ht.DEGREES_PER_RADIAN=180/Math.PI;ht.RADIANS_PER_ARCSECOND=ht.RADIANS_PER_DEGREE/3600;ht.toRadians=function(e){return e*ht.RADIANS_PER_DEGREE};ht.toDegrees=function(e){return e*ht.DEGREES_PER_RADIAN};ht.convertLongitudeRange=function(e){let t=ht.TWO_PI,n=e-Math.floor(e/t)*t;return n<-Math.PI?n+t:n>=Math.PI?n-t:n};ht.clampToLatitudeRange=function(e){return ht.clamp(e,-1*ht.PI_OVER_TWO,ht.PI_OVER_TWO)};ht.negativePiToPi=function(e){return e>=-ht.PI&&e<=ht.PI?e:ht.zeroToTwoPi(e+ht.PI)-ht.PI};ht.zeroToTwoPi=function(e){if(e>=0&&e<=ht.TWO_PI)return e;let t=ht.mod(e,ht.TWO_PI);return Math.abs(t)ht.EPSILON14?ht.TWO_PI:t};ht.mod=function(e,t){return ht.sign(e)===ht.sign(t)&&Math.abs(e)n};ht.greaterThanOrEquals=function(e,t,n){return e-t>-n};var S9=[1];ht.factorial=function(e){let t=S9.length;if(e>=t){let n=S9[t-1];for(let i=t;i<=e;i++){let o=n*i;S9.push(o),n=o}}return S9[e]};ht.incrementWrap=function(e,t,n){return n=n??0,++e,e>t&&(e=n),e};ht.isPowerOfTwo=function(e){return e!==0&&(e&e-1)===0};ht.nextPowerOfTwo=function(e){return--e,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e,e};ht.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};ht.clamp=function(e,t,n){return en?n:e};var Wee=new B3.default;ht.setRandomNumberSeed=function(e){Wee=new B3.default(e)};ht.nextRandomNumber=function(){return Wee.random()};ht.randomBetween=function(e,t){return ht.nextRandomNumber()*(t-e)+e};ht.acosClamped=function(e){return Math.acos(ht.clamp(e,-1,1))};ht.asinClamped=function(e){return Math.asin(ht.clamp(e,-1,1))};ht.chordLength=function(e,t){return 2*t*Math.sin(e*.5)};ht.logBase=function(e,t){return Math.log(e)/Math.log(t)};ht.cbrt=Math.cbrt??function(t){let n=Math.pow(Math.abs(t),.3333333333333333);return t<0?-n:n};ht.log2=Math.log2??function(t){return Math.log(t)*Math.LOG2E};ht.fog=function(e,t){let n=e*t;return 1-Math.exp(-(n*n))};ht.fastApproximateAtan=function(e){return e*(-.1784*Math.abs(e)-.0663*e*e+1.0301)};ht.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=ht.fastApproximateAtan(r),i=Math.abs(t)>Math.abs(e)?ht.PI_OVER_TWO-i:i,i=e<0?ht.PI-i:i,i=t<0?-i:i,i};var Z=ht;function Ot(e,t){this.x=e??0,this.y=t??0}Ot.fromElements=function(e,t,n){return l(n)?(n.x=e,n.y=t,n):new Ot(e,t)};Ot.clone=function(e,t){if(l(e))return l(t)?(t.x=e.x,t.y=e.y,t):new Ot(e.x,e.y)};Ot.fromCartesian3=Ot.clone;Ot.fromCartesian4=Ot.clone;Ot.packedLength=2;Ot.pack=function(e,t,n){return n=n??0,t[n++]=e.x,t[n]=e.y,t};Ot.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Ot),n.x=e[t++],n.y=e[t],n};Ot.packArray=function(e,t){let n=e.length,i=n*2;l(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;oZ.EPSILON12);return l(o)?(o.x=r*F,o.y=s*P,o.z=a*A,o):new m(r*F,s*P,a*A)}var Wy=dLe;function qo(e,t,n){this.longitude=e??0,this.latitude=t??0,this.height=n??0}qo.fromRadians=function(e,t,n,i){return n=n??0,l(i)?(i.longitude=e,i.latitude=t,i.height=n,i):new qo(e,t,n)};qo.fromDegrees=function(e,t,n,i){return e=Z.toRadians(e),t=Z.toRadians(t),qo.fromRadians(e,t,n,i)};var uLe=new m,mLe=new m,hLe=new m;qo._ellipsoidOneOverRadii=new m(1/6378137,1/6378137,1/6356752314245179e-9);qo._ellipsoidOneOverRadiiSquared=new m(1/(6378137*6378137),1/(6378137*6378137),1/(6356752314245179e-9*6356752314245179e-9));qo._ellipsoidCenterToleranceSquared=Z.EPSILON1;qo.fromCartesian=function(e,t,n){let i=l(t)?t.oneOverRadii:qo._ellipsoidOneOverRadii,o=l(t)?t.oneOverRadiiSquared:qo._ellipsoidOneOverRadiiSquared,r=l(t)?t._centerToleranceSquared:qo._ellipsoidCenterToleranceSquared,s=Wy(e,i,o,r,mLe);if(!l(s))return;let a=m.multiplyComponents(s,o,uLe);a=m.normalize(a,a);let c=m.subtract(e,s,hLe),d=Math.atan2(a.y,a.x),u=Math.asin(a.z),h=Z.sign(m.dot(c,e))*m.magnitude(c);return l(n)?(n.longitude=d,n.latitude=u,n.height=h,n):new qo(d,u,h)};qo.toCartesian=function(e,t,n){return m.fromRadians(e.longitude,e.latitude,e.height,t,n)};qo.clone=function(e,t){if(l(e))return l(t)?(t.longitude=e.longitude,t.latitude=e.latitude,t.height=e.height,t):new qo(e.longitude,e.latitude,e.height)};qo.equals=function(e,t){return e===t||l(e)&&l(t)&&e.longitude===t.longitude&&e.latitude===t.latitude&&e.height===t.height};qo.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e.longitude-t.longitude)<=n&&Math.abs(e.latitude-t.latitude)<=n&&Math.abs(e.height-t.height)<=n};qo.ZERO=Object.freeze(new qo(0,0,0));qo.prototype.clone=function(e){return qo.clone(this,e)};qo.prototype.equals=function(e){return qo.equals(this,e)};qo.prototype.equalsEpsilon=function(e,t){return qo.equalsEpsilon(this,e,t)};qo.prototype.toString=function(){return`(${this.longitude}, ${this.latitude}, ${this.height})`};var ge=qo;var xGt=y(C(),1);function Dee(e,t,n,i){t=t??0,n=n??0,i=i??0,e._radii=new m(t,n,i),e._radiiSquared=new m(t*t,n*n,i*i),e._radiiToTheFourth=new m(t*t*t*t,n*n*n*n,i*i*i*i),e._oneOverRadii=new m(t===0?0:1/t,n===0?0:1/n,i===0?0:1/i),e._oneOverRadiiSquared=new m(t===0?0:1/(t*t),n===0?0:1/(n*n),i===0?0:1/(i*i)),e._minimumRadius=Math.min(t,n,i),e._maximumRadius=Math.max(t,n,i),e._centerToleranceSquared=Z.EPSILON1,e._radiiSquared.z!==0&&(e._squaredXOverSquaredZ=e._radiiSquared.x/e._radiiSquared.z)}function Bi(e,t,n){this._radii=void 0,this._radiiSquared=void 0,this._radiiToTheFourth=void 0,this._oneOverRadii=void 0,this._oneOverRadiiSquared=void 0,this._minimumRadius=void 0,this._maximumRadius=void 0,this._centerToleranceSquared=void 0,this._squaredXOverSquaredZ=void 0,Dee(this,e,t,n)}Object.defineProperties(Bi.prototype,{radii:{get:function(){return this._radii}},radiiSquared:{get:function(){return this._radiiSquared}},radiiToTheFourth:{get:function(){return this._radiiToTheFourth}},oneOverRadii:{get:function(){return this._oneOverRadii}},oneOverRadiiSquared:{get:function(){return this._oneOverRadiiSquared}},minimumRadius:{get:function(){return this._minimumRadius}},maximumRadius:{get:function(){return this._maximumRadius}}});Bi.clone=function(e,t){if(!l(e))return;let n=e._radii;return l(t)?(m.clone(n,t._radii),m.clone(e._radiiSquared,t._radiiSquared),m.clone(e._radiiToTheFourth,t._radiiToTheFourth),m.clone(e._oneOverRadii,t._oneOverRadii),m.clone(e._oneOverRadiiSquared,t._oneOverRadiiSquared),t._minimumRadius=e._minimumRadius,t._maximumRadius=e._maximumRadius,t._centerToleranceSquared=e._centerToleranceSquared,t):new Bi(n.x,n.y,n.z)};Bi.fromCartesian3=function(e,t){return l(t)||(t=new Bi),l(e)&&Dee(t,e.x,e.y,e.z),t};Bi.WGS84=Object.freeze(new Bi(6378137,6378137,6356752314245179e-9));Bi.UNIT_SPHERE=Object.freeze(new Bi(1,1,1));Bi.MOON=Object.freeze(new Bi(Z.LUNAR_RADIUS,Z.LUNAR_RADIUS,Z.LUNAR_RADIUS));Bi._default=Bi.WGS84;Object.defineProperties(Bi,{default:{get:function(){return Bi._default},set:function(e){Bi._default=e,m._ellipsoidRadiiSquared=e.radiiSquared,ge._ellipsoidOneOverRadii=e.oneOverRadii,ge._ellipsoidOneOverRadiiSquared=e.oneOverRadiiSquared,ge._ellipsoidCenterToleranceSquared=e._centerToleranceSquared}}});Bi.prototype.clone=function(e){return Bi.clone(this,e)};Bi.packedLength=m.packedLength;Bi.pack=function(e,t,n){return n=n??0,m.pack(e._radii,t,n),t};Bi.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t);return Bi.fromCartesian3(i,n)};Bi.prototype.geocentricSurfaceNormal=m.normalize;Bi.prototype.geodeticSurfaceNormalCartographic=function(e,t){let n=e.longitude,i=e.latitude,o=Math.cos(i),r=o*Math.cos(n),s=o*Math.sin(n),a=Math.sin(i);return l(t)||(t=new m),t.x=r,t.y=s,t.z=a,m.normalize(t,t)};Bi.prototype.geodeticSurfaceNormal=function(e,t){if(!m.equalsEpsilon(e,m.ZERO,Z.EPSILON14))return l(t)||(t=new m),t=m.multiplyComponents(e,this._oneOverRadiiSquared,t),m.normalize(t,t)};var fLe=new m,pLe=new m;Bi.prototype.cartographicToCartesian=function(e,t){let n=fLe,i=pLe;this.geodeticSurfaceNormalCartographic(e,n),m.multiplyComponents(this._radiiSquared,n,i);let o=Math.sqrt(m.dot(n,i));return m.divideByScalar(i,o,i),m.multiplyByScalar(n,e.height,n),l(t)||(t=new m),m.add(i,n,t)};Bi.prototype.cartographicArrayToCartesianArray=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i=this._radii.z-t))return n};var yLe=new m;Bi.prototype.getLocalCurvature=function(e,t){l(t)||(t=new D);let n=this.getSurfaceNormalIntersectionWithZAxis(e,0,yLe),i=m.distance(e,n),o=this.minimumRadius*i/this.maximumRadius**2,r=i*o**2;return D.fromElements(1/i,1/r,t)};var CLe=[.14887433898163,.43339539412925,.67940956829902,.86506336668898,.97390652851717,0],xLe=[.29552422471475,.26926671930999,.21908636251598,.14945134915058,.066671344308684,0];function Nee(e,t,n){let i=.5*(t+e),o=.5*(t-e),r=0;for(let s=0;s<5;s++){let a=o*CLe[s];r+=xLe[s]*(n(i+a)+n(i-a))}return r*=o,r}Bi.prototype.surfaceArea=function(e){let t=e.west,n=e.east,i=e.south,o=e.north;for(;n0){o=r-1;continue}return r}return~(o+1)}var Yo=SLe;var PGt=y(C(),1);function LLe(e,t,n,i,o){this.xPoleWander=e,this.yPoleWander=t,this.xPoleOffset=n,this.yPoleOffset=i,this.ut1MinusUtc=o}var ub=LLe;var rZt=y(C(),1);var kGt=y(C(),1);var vGt=y(C(),1);function RLe(e){return e%4===0&&e%100!==0||e%400===0}var qm=RLe;var kee=[31,28,31,30,31,30,31,31,30,31,30,31];function VLe(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 b(){Bo.typeOf.number.greaterThanOrEquals("Year",e,1),Bo.typeOf.number.lessThanOrEquals("Year",e,9999),Bo.typeOf.number.greaterThanOrEquals("Month",t,1),Bo.typeOf.number.lessThanOrEquals("Month",t,12),Bo.typeOf.number.greaterThanOrEquals("Day",n,1),Bo.typeOf.number.lessThanOrEquals("Day",n,31),Bo.typeOf.number.greaterThanOrEquals("Hour",i,0),Bo.typeOf.number.lessThanOrEquals("Hour",i,23),Bo.typeOf.number.greaterThanOrEquals("Minute",o,0),Bo.typeOf.number.lessThanOrEquals("Minute",o,59),Bo.typeOf.bool("IsLeapSecond",a),Bo.typeOf.number.greaterThanOrEquals("Second",r,0),Bo.typeOf.number.lessThanOrEquals("Second",r,a?60:59),Bo.typeOf.number.greaterThanOrEquals("Millisecond",s,0),Bo.typeOf.number.lessThan("Millisecond",s,1e3)}function x(){let I=t===2&&qm(e)?kee[t-1]+1:kee[t-1];if(n>I)throw new Ae("Month and Day represents invalid date")}}var Yp=VLe;var OGt=y(C(),1);function GLe(e,t){this.julianDate=e,this.offset=t}var ro=GLe;var zGt=y(C(),1),ZLe={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},ai=Object.freeze(ZLe);var JGt=y(C(),1),BLe={UTC:0,TAI:1},oi=Object.freeze(BLe);var Oee=new Yp,W3=[31,28,31,30,31,30,31,31,30,31,30,31],F3=29;function P3(e,t){return Nt.compare(e.julianDate,t.julianDate)}var V_=new ro;function w9(e){V_.julianDate=e;let t=Nt.leapSeconds,n=Yo(t,V_,P3);n<0&&(n=~n),n>=t.length&&(n=t.length-1);let i=t[n].offset;n>0&&Nt.secondsDifference(t[n].julianDate,e)>i&&(n--,i=t[n].offset),Nt.addSeconds(e,i,e)}function Yee(e,t){V_.julianDate=e;let n=Nt.leapSeconds,i=Yo(n,V_,P3);if(i<0&&(i=~i),i===0)return Nt.addSeconds(e,-n[0].offset,t);if(i>=n.length)return Nt.addSeconds(e,-n[i-1].offset,t);let o=Nt.secondsDifference(n[i].julianDate,e);if(o===0)return Nt.addSeconds(e,-n[i].offset,t);if(!(o<=1))return Nt.addSeconds(e,-n[--i].offset,t)}function mb(e,t,n){let i=t/ai.SECONDS_PER_DAY|0;return e+=i,t-=ai.SECONDS_PER_DAY*i,t<0&&(e--,t+=ai.SECONDS_PER_DAY),n.dayNumber=e,n.secondsOfDay=t,n}function M3(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*ai.SECONDS_PER_HOUR+o*ai.SECONDS_PER_MINUTE+s*ai.SECONDS_PER_MILLISECOND);return u>=43200&&(d-=1),[d,u]}var wLe=/^(\d{4})$/,XLe=/^(\d{4})-(\d{2})$/,WLe=/^(\d{4})-?(\d{3})$/,FLe=/^(\d{4})-?W(\d{2})-?(\d{1})?$/,PLe=/^(\d{4})-?(\d{2})-?(\d{2})$/,v3=/([Z+\-])?(\d{2})?:?(\d{2})?$/,MLe=/^(\d{2})(\.\d+)?/.source+v3.source,vLe=/^(\d{2}):?(\d{2})(\.\d+)?/.source+v3.source,NLe=/^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source+v3.source;function Nt(e,t,n){this.dayNumber=void 0,this.secondsOfDay=void 0,e=e??0,t=t??0,n=n??oi.UTC;let i=e|0;t=t+(e-i)*ai.SECONDS_PER_DAY,mb(i,t,this),n===oi.UTC&&w9(this)}Nt.fromGregorianDate=function(e,t){let n=M3(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond);return l(t)?(mb(n[0],n[1],t),w9(t),t):new Nt(n[0],n[1],oi.UTC)};Nt.fromDate=function(e,t){let n=M3(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds());return l(t)?(mb(n[0],n[1],t),w9(t),t):new Nt(n[0],n[1],oi.UTC)};Nt.fromIso8601=function(e,t){e=e.replace(",",".");let n=e.split("T"),i,o=1,r=1,s=0,a=0,c=0,d=0,u=n[0],h=n[1],p,g;if(n=u.match(PLe),n!==null)i=+n[1],o=+n[2],r=+n[3];else if(n=u.match(XLe),n!==null)i=+n[1],o=+n[2];else if(n=u.match(wLe),n!==null)i=+n[1];else{let I;if(n=u.match(WLe),n!==null)i=+n[1],I=+n[2],g=qm(i);else if(n=u.match(FLe),n!==null){i=+n[1];let _=+n[2],E=+n[3]||0,S=new Date(Date.UTC(i,0,4));I=_*7+E-S.getUTCDay()-3}p=new Date(Date.UTC(i,0,1)),p.setUTCDate(I),o=p.getUTCMonth()+1,r=p.getUTCDate()}g=qm(i);let f;if(l(h)){n=h.match(NLe),n!==null?(s=+n[1],a=+n[2],c=+n[3],d=+(n[4]||0)*1e3,f=5):(n=h.match(vLe),n!==null?(s=+n[1],a=+n[2],c=+(n[3]||0)*60,f=4):(n=h.match(MLe),n!==null&&(s=+n[1],a=+(n[2]||0)*60,f=3)));let I=n[f],_=+n[f+1],E=+(n[f+2]||0);switch(I){case"+":s=s-_,a=a-E;break;case"-":s=s+_,a=a+E;break;case"Z":break;default:a=a+new Date(Date.UTC(i,o-1,r,s,a)).getTimezoneOffset();break}}let b=c===60;for(b&&c--;a>=60;)a-=60,s++;for(;s>=24;)s-=24,r++;for(p=g&&o===2?F3:W3[o-1];r>p;)r-=p,o++,o>12&&(o-=12,i++),p=g&&o===2?F3:W3[o-1];for(;a<0;)a+=60,s--;for(;s<0;)s+=24,r--;for(;r<1;)o--,o<1&&(o+=12,i--),p=g&&o===2?F3:W3[o-1],r+=p;let x=M3(i,o,r,s,a,c,d);return l(t)?(mb(x[0],x[1],t),w9(t)):t=new Nt(x[0],x[1],oi.UTC),b&&Nt.addSeconds(t,1,t),t};Nt.now=function(e){return Nt.fromDate(new Date,e)};var B9=new Nt(0,0,oi.TAI);Nt.toGregorianDate=function(e,t){let n=!1,i=Yee(e,B9);l(i)||(Nt.addSeconds(e,-1,B9),i=Yee(B9,B9),n=!0);let o=i.dayNumber,r=i.secondsOfDay;r>=43200&&(o+=1);let s=o+68569|0,a=4*s/146097|0;s=s-((146097*a+3)/4|0)|0;let c=4e3*(s+1)/1461001|0;s=s-(1461*c/4|0)+31|0;let d=80*s/2447|0,u=s-(2447*d/80|0)|0;s=d/11|0;let h=d+2-12*s|0,p=100*(a-49)+c+s|0,g=r/ai.SECONDS_PER_HOUR|0,f=r-g*ai.SECONDS_PER_HOUR,b=f/ai.SECONDS_PER_MINUTE|0;f=f-b*ai.SECONDS_PER_MINUTE;let x=f|0,I=(f-x)/ai.SECONDS_PER_MILLISECOND;return g+=12,g>23&&(g-=24),n&&(x+=1),l(t)?(t.year=p,t.month=h,t.day=u,t.hour=g,t.minute=b,t.second=x,t.millisecond=I,t.isLeapSecond=n,t):new Yp(p,h,u,g,b,x,I,n)};Nt.toDate=function(e){let t=Nt.toGregorianDate(e,Oee),n=t.second;return t.isLeapSecond&&(n-=1),new Date(Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,n,t.millisecond))};Nt.toIso8601=function(e,t){let n=Nt.toGregorianDate(e,Oee),i=n.year,o=n.month,r=n.day,s=n.hour,a=n.minute,c=n.second,d=n.millisecond;i===1e4&&o===1&&r===1&&s===0&&a===0&&c===0&&d===0&&(i=9999,o=12,r=31,s=24);let u;if(!l(t)&&d!==0){let h=d*.01;return u=h<1e-6?h.toFixed(20).replace(".","").replace(/0+$/,""):h.toString().replace(".",""),`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}.${u}Z`}return!l(t)||t===0?`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}Z`:(u=(d*.01).toFixed(t).replace(".","").slice(0,t),`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}.${u}Z`)};Nt.clone=function(e,t){if(l(e))return l(t)?(t.dayNumber=e.dayNumber,t.secondsOfDay=e.secondsOfDay,t):new Nt(e.dayNumber,e.secondsOfDay,oi.TAI)};Nt.compare=function(e,t){let n=e.dayNumber-t.dayNumber;return n!==0?n:e.secondsOfDay-t.secondsOfDay};Nt.equals=function(e,t){return e===t||l(e)&&l(t)&&e.dayNumber===t.dayNumber&&e.secondsOfDay===t.secondsOfDay};Nt.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(Nt.secondsDifference(e,t))<=n};Nt.totalDays=function(e){return e.dayNumber+e.secondsOfDay/ai.SECONDS_PER_DAY};Nt.secondsDifference=function(e,t){return(e.dayNumber-t.dayNumber)*ai.SECONDS_PER_DAY+(e.secondsOfDay-t.secondsOfDay)};Nt.daysDifference=function(e,t){let n=e.dayNumber-t.dayNumber,i=(e.secondsOfDay-t.secondsOfDay)/ai.SECONDS_PER_DAY;return n+i};Nt.computeTaiMinusUtc=function(e){V_.julianDate=e;let t=Nt.leapSeconds,n=Yo(t,V_,P3);return n<0&&(n=~n,--n,n<0&&(n=0)),t[n].offset};Nt.addSeconds=function(e,t,n){return mb(e.dayNumber,e.secondsOfDay+t,n)};Nt.addMinutes=function(e,t,n){let i=e.secondsOfDay+t*ai.SECONDS_PER_MINUTE;return mb(e.dayNumber,i,n)};Nt.addHours=function(e,t,n){let i=e.secondsOfDay+t*ai.SECONDS_PER_HOUR;return mb(e.dayNumber,i,n)};Nt.addDays=function(e,t,n){let i=e.dayNumber+t;return mb(i,e.secondsOfDay,n)};Nt.lessThan=function(e,t){return Nt.compare(e,t)<0};Nt.lessThanOrEquals=function(e,t){return Nt.compare(e,t)<=0};Nt.greaterThan=function(e,t){return Nt.compare(e,t)>0};Nt.greaterThanOrEquals=function(e,t){return Nt.compare(e,t)>=0};Nt.prototype.clone=function(e){return Nt.clone(this,e)};Nt.prototype.equals=function(e){return Nt.equals(this,e)};Nt.prototype.equalsEpsilon=function(e,t){return Nt.equalsEpsilon(this,e,t)};Nt.prototype.toString=function(){return Nt.toIso8601(this)};Nt.leapSeconds=[new ro(new Nt(2441317,43210,oi.TAI),10),new ro(new Nt(2441499,43211,oi.TAI),11),new ro(new Nt(2441683,43212,oi.TAI),12),new ro(new Nt(2442048,43213,oi.TAI),13),new ro(new Nt(2442413,43214,oi.TAI),14),new ro(new Nt(2442778,43215,oi.TAI),15),new ro(new Nt(2443144,43216,oi.TAI),16),new ro(new Nt(2443509,43217,oi.TAI),17),new ro(new Nt(2443874,43218,oi.TAI),18),new ro(new Nt(2444239,43219,oi.TAI),19),new ro(new Nt(2444786,43220,oi.TAI),20),new ro(new Nt(2445151,43221,oi.TAI),21),new ro(new Nt(2445516,43222,oi.TAI),22),new ro(new Nt(2446247,43223,oi.TAI),23),new ro(new Nt(2447161,43224,oi.TAI),24),new ro(new Nt(2447892,43225,oi.TAI),25),new ro(new Nt(2448257,43226,oi.TAI),26),new ro(new Nt(2448804,43227,oi.TAI),27),new ro(new Nt(2449169,43228,oi.TAI),28),new ro(new Nt(2449534,43229,oi.TAI),29),new ro(new Nt(2450083,43230,oi.TAI),30),new ro(new Nt(2450630,43231,oi.TAI),31),new ro(new Nt(2451179,43232,oi.TAI),32),new ro(new Nt(2453736,43233,oi.TAI),33),new ro(new Nt(2454832,43234,oi.TAI),34),new ro(new Nt(2456109,43235,oi.TAI),35),new ro(new Nt(2457204,43236,oi.TAI),36),new ro(new Nt(2457754,43237,oi.TAI),37)];var j=Nt;var zBt=y(C(),1),ute=y(Bd(),1);var uZt=y(C(),1);function DLe(e){return(e.length===0||e[e.length-1]!=="/")&&(e=`${e}/`),e}var $L=DLe;var hZt=y(C(),1);function $ee(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=$ee(o,t)),n[i]=o}return n}var ke=$ee;var AZt=y(C(),1);function ete(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]=ete(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 Lt=ete;var bZt=y(C(),1);function QLe(){let e,t,n=new Promise(function(i,o){e=i,t=o});return{resolve:e,reject:t,promise:n}}var Ol=QLe;var xZt=y(C(),1),tte=y(Bd(),1);function N3(e,t){let n;return typeof document<"u"&&(n=document),N3._implementation(e,t,n)}N3._implementation=function(e,t,n){if(!l(t)){if(typeof n>"u")return e;t=n.baseURI??n.location.href}let i=new tte.default(e);return i.scheme()!==""?i.toString():i.absoluteTo(t).toString()};var Tf=N3;var _Zt=y(C(),1),nte=y(Bd(),1);function ULe(e,t){let n="",i=e.lastIndexOf("/");return i!==-1&&(n=e.substring(0,i+1)),t&&(e=new nte.default(e),e.query().length!==0&&(n+=`?${e.query()}`),e.fragment().length!==0&&(n+=`#${e.fragment()}`)),n}var e1=ULe;var TZt=y(C(),1),ite=y(Bd(),1);function kLe(e){let t=new ite.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 Fy=kLe;var RZt=y(C(),1);var ote={};function YLe(e,t,n){l(t)||(t=e.width),l(n)||(n=e.height);let i=ote[t];l(i)||(i={},ote[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 $m=YLe;var GZt=y(C(),1);var OLe=/^blob:/i;function HLe(e){return OLe.test(e)}var Py=HLe;var wZt=y(C(),1);var Sf;function zLe(e){l(Sf)||(Sf=document.createElement("a")),Sf.href=window.location.href;let t=Sf.host,n=Sf.protocol;return Sf.href=e,Sf.href=Sf.href,n!==Sf.protocol||t!==Sf.host}var hb=zLe;var WZt=y(C(),1);var KLe=/^data:/i;function JLe(e){return KLe.test(e)}var Op=JLe;var PZt=y(C(),1);function jLe(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 My=jLe;var vZt=y(C(),1);function qLe(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 t1=n1e;function rte(e,t,n){this.statusCode=e,this.response=t,this.responseHeaders=n,typeof this.responseHeaders=="string"&&(this.responseHeaders=t1(this.responseHeaders))}rte.prototype.toString=function(){let e="Request has failed.";return l(this.statusCode)&&(e+=` Status Code: ${this.statusCode}`),e};var Lf=rte;var ABt=y(C(),1),M9=y(Bd(),1);var aBt=y(C(),1);function Ny(e){this._comparator=e.comparator,this._array=[],this._length=0,this._maximumLength=void 0}Object.defineProperties(Ny.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)};Ny.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};Ny.prototype.pop=function(e){if(e=e??0,this._length===0)return;let t=this._array,n=t[e];return D3(t,e,--this._length),this.heapify(e),t[this._length]=void 0,n};var n1=Ny;function i1e(e,t){return e.priority-t.priority}var Ao={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},B_=20,Tc=new n1({comparator:i1e});Tc.maximumLength=B_;Tc.reserve(B_);var Rf=[],Hp={},o1e=typeof document<"u"?new M9.default(document.location.href):new M9.default,v9=new Ce;function ar(){}ar.maximumRequests=50;ar.maximumRequestsPerServer=18;ar.requestsByServer={};ar.throttleRequests=!0;ar.debugShowStatistics=!1;ar.requestCompletedEvent=v9;Object.defineProperties(ar,{statistics:{get:function(){return Ao}},priorityHeapLength:{get:function(){return B_},set:function(e){if(ee;){let t=Tc.pop();Dy(t)}B_=e,Tc.maximumLength=e,Tc.reserve(e)}}});function ste(e){l(e.priorityFunction)&&(e.priority=e.priorityFunction())}ar.serverHasOpenSlots=function(e,t){t=t??1;let n=ar.requestsByServer[e]??ar.maximumRequestsPerServer;return Hp[e]+t<=n};ar.heapHasOpenSlots=function(e){return Tc.length+e<=B_};function ate(e){return e.state===mi.UNISSUED&&(e.state=mi.ISSUED,e.deferred=Ol()),e.deferred.promise}function r1e(e){return function(t){if(e.state===mi.CANCELLED)return;let n=e.deferred;--Ao.numberOfActiveRequests,--Hp[e.serverKey],v9.raiseEvent(),e.state=mi.RECEIVED,e.deferred=void 0,n.resolve(t)}}function s1e(e){return function(t){e.state!==mi.CANCELLED&&(++Ao.numberOfFailedRequests,--Ao.numberOfActiveRequests,--Hp[e.serverKey],v9.raiseEvent(t),e.state=mi.FAILED,e.deferred.reject(t))}}function cte(e){let t=ate(e);return e.state=mi.ACTIVE,Rf.push(e),++Ao.numberOfActiveRequests,++Ao.numberOfActiveRequestsEver,++Hp[e.serverKey],e.requestFunction().then(r1e(e)).catch(s1e(e)),t}function Dy(e){let t=e.state===mi.ACTIVE;if(e.state=mi.CANCELLED,++Ao.numberOfCancelledRequests,l(e.deferred)){let n=e.deferred;e.deferred=void 0,n.reject()}t&&(--Ao.numberOfActiveRequests,--Hp[e.serverKey],++Ao.numberOfCancelledActiveRequests),l(e.cancelFunction)&&e.cancelFunction()}ar.update=function(){let e,t,n=0,i=Rf.length;for(e=0;e0&&(Rf[e-n]=t)}Rf.length-=n;let o=Tc.internalArray,r=Tc.length;for(e=0;e0;){if(t=Tc.pop(),t.cancelled){Dy(t);continue}if(t.throttleByServer&&!ar.serverHasOpenSlots(t.serverKey)){Dy(t);continue}cte(t),++a}a1e()};ar.getServerKey=function(e){let t=new M9.default(e);t.scheme()===""&&(t=t.absoluteTo(o1e),t.normalize());let n=t.authority();/:/.test(n)||(n=`${n}:${t.scheme()==="https"?"443":"80"}`);let i=Hp[n];return l(i)||(Hp[n]=0),n};ar.request=function(e){if(Op(e.url)||Py(e.url))return v9.raiseEvent(),e.state=mi.RECEIVED,e.requestFunction();if(++Ao.numberOfAttemptedRequests,l(e.serverKey)||(e.serverKey=ar.getServerKey(e.url)),ar.throttleRequests&&e.throttleByServer&&!ar.serverHasOpenSlots(e.serverKey))return;if(!ar.throttleRequests||!e.throttle)return cte(e);if(Rf.length>=ar.maximumRequests)return;ste(e);let t=Tc.insert(e);if(l(t)){if(t===e)return;Dy(t)}return ate(e)};function a1e(){ar.debugShowStatistics&&(Ao.numberOfActiveRequests===0&&Ao.lastNumberOfActiveRequests>0&&(Ao.numberOfAttemptedRequests>0&&(console.log(`Number of attempted requests: ${Ao.numberOfAttemptedRequests}`),Ao.numberOfAttemptedRequests=0),Ao.numberOfCancelledRequests>0&&(console.log(`Number of cancelled requests: ${Ao.numberOfCancelledRequests}`),Ao.numberOfCancelledRequests=0),Ao.numberOfCancelledActiveRequests>0&&(console.log(`Number of cancelled active requests: ${Ao.numberOfCancelledActiveRequests}`),Ao.numberOfCancelledActiveRequests=0),Ao.numberOfFailedRequests>0&&(console.log(`Number of failed requests: ${Ao.numberOfFailedRequests}`),Ao.numberOfFailedRequests=0)),Ao.lastNumberOfActiveRequests=Ao.numberOfActiveRequests)}ar.clearForSpecs=function(){for(;Tc.length>0;){let t=Tc.pop();Dy(t)}let e=Rf.length;for(let t=0;t0}},credits:{get:function(){return this._credits}}});Ft.prototype.toString=function(){return this.getUrlComponent(!0,!0)};Ft.prototype.parseUrl=function(e,t,n,i){let o=new ute.default(e),r=l1e(o.query());this._queryParameters=t?D9(r,this.queryParameters,n):r,o.search(""),o.fragment(""),l(i)&&o.scheme()===""&&(o=o.absoluteTo(Tf(i))),this._url=o.toString()};function l1e(e){return e.length===0?{}:e.indexOf("=")===-1?{[e]:void 0}:wd(e)}function D9(e,t,n){if(!n)return Lt(e,t);let i=ke(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}Ft.prototype.getUrlComponent=function(e,t){if(this.isDataUri)return this._url;let n=this._url;e&&(n=`${n}${d1e(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 d1e(e){let t=Object.keys(e);return t.length===0?"":t.length===1&&!l(e[t[0]])?`?${t[0]}`:`?${vy(e)}`}Ft.prototype.setQueryParameters=function(e,t){t?this._queryParameters=D9(this._queryParameters,e,!1):this._queryParameters=D9(e,this._queryParameters,!1)};Ft.prototype.appendQueryParameters=function(e){this._queryParameters=D9(e,this._queryParameters,!0)};Ft.prototype.setTemplateValues=function(e,t){t?this._templateValues=Lt(this._templateValues,e):this._templateValues=Lt(e,this._templateValues)};Ft.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=Lt(e.queryParameters,t.queryParameters)),l(e.templateValues)&&(t._templateValues=Lt(e.templateValues,t.templateValues)),l(e.headers)&&(t.headers=Lt(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};Ft.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})};Ft.prototype.clone=function(e){return l(e)?(e._url=this._url,e._queryParameters=ke(this._queryParameters),e._templateValues=ke(this._templateValues),e.headers=ke(this.headers),e.proxy=this.proxy,e.retryCallback=this.retryCallback,e.retryAttempts=this.retryAttempts,e._retryCount=0,e.request=this.request.clone(),e):new Ft({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})};Ft.prototype.getBaseUri=function(e){return e1(this.getUrlComponent(e),e)};Ft.prototype.appendForwardSlash=function(){this._url=$L(this._url)};Ft.prototype.fetchArrayBuffer=function(){return this.fetch({responseType:"arraybuffer"})};Ft.fetchArrayBuffer=function(e){return new Ft(e).fetchArrayBuffer()};Ft.prototype.fetchBlob=function(){return this.fetch({responseType:"blob"})};Ft.fetchBlob=function(e){return new Ft(e).fetchBlob()};Ft.prototype.fetchImage=function(e){e=e??Y.EMPTY_OBJECT;let t=e.preferImageBitmap??!1,n=e.preferBlob??!1,i=e.flipY??!1,o=e.skipColorSpaceConversion??!1;if(U3(this.request),!mte||this.isDataUri||this.isBlobUri||!this.hasHeaders&&!n)return Q3({resource:this,flipY:i,skipColorSpaceConversion:o,preferImageBitmap:t});let r=this.fetchBlob();if(!l(r))return;let s,a,c,d;return Ft.supportsImageBitmapOptions().then(function(u){return s=u,a=s&&t,r}).then(function(u){if(!l(u))return;if(d=u,a)return Ft.createImageBitmapFromBlob(u,{flipY:i,premultiplyAlpha:!1,skipColorSpaceConversion:o});let h=window.URL.createObjectURL(u);return c=new Ft({url:h}),Q3({resource:c,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)})};function Q3(e){let t=e.resource,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=Ol();return Ft._Implementations.createImage(r,a,c,n,i,o),c.promise};let s=Sc.request(r);if(l(s))return s.catch(function(a){return r.state!==mi.FAILED?Promise.reject(a):t.retryOnError(a).then(function(c){return c?(r.state=mi.UNISSUED,r.deferred=void 0,Q3({resource:t,flipY:n,skipColorSpaceConversion:i,preferImageBitmap:o})):Promise.reject(a)})})}Ft.fetchImage=function(e){return new Ft(e).fetchImage({flipY:e.flipY,skipColorSpaceConversion:e.skipColorSpaceConversion,preferBlob:e.preferBlob,preferImageBitmap:e.preferImageBitmap})};Ft.prototype.fetchText=function(){return this.fetch({responseType:"text"})};Ft.fetchText=function(e){return new Ft(e).fetchText()};Ft.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)})};Ft.fetchJson=function(e){return new Ft(e).fetchJson()};Ft.prototype.fetchXML=function(){return this.fetch({responseType:"document",overrideMimeType:"text/xml"})};Ft.fetchXML=function(e){return new Ft(e).fetchXML()};Ft.prototype.fetchJsonp=function(e){e=e??"callback",U3(this.request);let t;do t=`loadJsonp${Z.nextRandomNumber().toString().substring(2,8)}`;while(l(window[t]));return hte(this,e,t)};function hte(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=Ol();return window[n]=function(c){a.resolve(c);try{delete window[n]}catch{window[n]=void 0}},Ft._Implementations.loadAndExecuteScript(r,n,a),a.promise};let s=Sc.request(o);if(l(s))return s.catch(function(a){return o.state!==mi.FAILED?Promise.reject(a):e.retryOnError(a).then(function(c){return c?(o.state=mi.UNISSUED,o.deferred=void 0,hte(e,t,n)):Promise.reject(a)})})}Ft.fetchJsonp=function(e){return new Ft(e).fetchJsonp(e.callbackParameterName)};Ft.prototype._makeRequest=function(e){let t=this;U3(t.request);let n=t.request,i=t.url;n.url=i,n.requestFunction=function(){let r=e.responseType,s=Lt(e.headers,t.headers),a=e.overrideMimeType,c=e.method,d=e.data,u=Ol(),h=Ft._Implementations.loadWithXhr(i,r,c,d,s,u,a);return l(h)&&l(h.abort)&&(n.cancelFunction=function(){h.abort()}),u.promise};let o=Sc.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!==mi.FAILED?Promise.reject(r):t.retryOnError(r).then(function(s){return s?(n.state=mi.UNISSUED,n.deferred=void 0,t.fetch(e)):Promise.reject(r)})})};function U3(e){if(e.state===mi.ISSUED||e.state===mi.ACTIVE)throw new de("The Resource is already being fetched.");e.state=mi.UNISSUED,e.deferred=void 0}var u1e=/^data:(.*?)(;base64)?,(.*)$/;function N9(e,t){let n=decodeURIComponent(t);return e?atob(n):n}function dte(e,t){let n=N9(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 Lf(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 Lf)})}var f1e=typeof XMLHttpRequest>"u";Ft._Implementations.loadWithXhr=function(e,t,n,i,o,r,s){let a=u1e.exec(e);if(a!==null){r.resolve(m1e(a,t));return}if(f1e){h1e(e,t,n,i,o,r,s);return}let c=new XMLHttpRequest;if(X_.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 Lf(c.status,c.response,c.getAllResponseHeaders()));return}let u=c.response,h=c.responseType;if(n==="HEAD"||n==="OPTIONS"){let g=c.getAllResponseHeaders().trim().split(/[\r\n]+/),f={};g.forEach(function(b){let x=b.split(": "),I=x.shift();f[I]=x.join(": ")}),r.resolve(f);return}if(c.status===204)r.resolve(void 0);else if(l(u)&&(!l(t)||h===t))r.resolve(u);else if(t==="json"&&typeof u=="string")try{r.resolve(JSON.parse(u))}catch(p){r.reject(p)}else(h===""||h==="document")&&l(c.responseXML)&&c.responseXML.hasChildNodes()?r.resolve(c.responseXML):(h===""||h==="text")&&l(c.responseText)?r.resolve(c.responseText):r.reject(new de("Invalid XMLHttpRequest response type."))},c.onerror=function(u){r.reject(new Lf)},c.send(i),c};Ft._Implementations.loadAndExecuteScript=function(e,t,n){return My(e,t).catch(function(i){n.reject(i)})};Ft._DefaultImplementations={};Ft._DefaultImplementations.createImage=Ft._Implementations.createImage;Ft._DefaultImplementations.loadWithXhr=Ft._Implementations.loadWithXhr;Ft._DefaultImplementations.loadAndExecuteScript=Ft._Implementations.loadAndExecuteScript;Ft.DEFAULT=Object.freeze(new Ft({url:typeof document>"u"?"":document.location.href.split("?")[0]}));var Ve=Ft;function s1(e){e=e??Y.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)?fte(this,e.data):fte(this,{columnNames:["dateIso8601","modifiedJulianDateUtc","xPoleWanderRadians","yPoleWanderRadians","ut1MinusUtcSeconds","lengthOfDayCorrectionSeconds","xCelestialPoleOffsetRadians","yCelestialPoleOffsetRadians","taiMinusUtcSeconds"],samples:[]})}s1.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=Ve.createIfNeeded(e),i;try{i=await n.fetchJson()}catch{throw new de(`An error occurred while retrieving the EOP data from the URL ${n.url}.`)}return new s1({addNewLeapSeconds:t.addNewLeapSeconds,data:i})};s1.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 ub(0,0,0,0,0),t}});s1.prototype.compute=function(e,t){if(!l(this._samples))return;if(l(t)||(t=new ub(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=0,r=0;if(l(i)){let a=n[i],c=n[i+1],d=j.lessThanOrEquals(a,e),u=!l(c),h=u||j.greaterThanOrEquals(c,e);if(d&&h)return o=i,!u&&c.equals(e)&&++o,r=o+1,Ate(this,n,this._samples,e,o,r,t),t}let s=Yo(n,e,j.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 pte(e,n,o,a,s),s;if(i.equals(d))return pte(e,n,r,a,s),s;let u=j.secondsDifference(i,c)/j.secondsDifference(d,c),h=o*a,p=r*a,g=n[h+e._ut1MinusUtcSecondsColumn],f=n[p+e._ut1MinusUtcSecondsColumn],b=f-g;if(b>.5||b<-.5){let x=n[h+e._taiMinusUtcSecondsColumn],I=n[p+e._taiMinusUtcSecondsColumn];x!==I&&(d.equals(i)?g=f:f-=I-x)}return s.xPoleWander=r1(u,n[h+e._xPoleWanderRadiansColumn],n[p+e._xPoleWanderRadiansColumn]),s.yPoleWander=r1(u,n[h+e._yPoleWanderRadiansColumn],n[p+e._yPoleWanderRadiansColumn]),s.xPoleOffset=r1(u,n[h+e._xCelestialPoleOffsetRadiansColumn],n[p+e._xCelestialPoleOffsetRadiansColumn]),s.yPoleOffset=r1(u,n[h+e._yCelestialPoleOffsetRadiansColumn],n[p+e._yCelestialPoleOffsetRadiansColumn]),s.ut1MinusUtc=r1(u,g,f),s}var a1=s1;var dwt=y(C(),1);function Lc(e,t,n){this.heading=e??0,this.pitch=t??0,this.roll=n??0}Lc.fromQuaternion=function(e,t){l(t)||(t=new Lc);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=-Z.asinClamped(n),t};Lc.fromDegrees=function(e,t,n,i){return l(i)||(i=new Lc),i.heading=e*Z.RADIANS_PER_DEGREE,i.pitch=t*Z.RADIANS_PER_DEGREE,i.roll=n*Z.RADIANS_PER_DEGREE,i};Lc.clone=function(e,t){if(l(e))return l(t)?(t.heading=e.heading,t.pitch=e.pitch,t.roll=e.roll,t):new Lc(e.heading,e.pitch,e.roll)};Lc.equals=function(e,t){return e===t||l(e)&&l(t)&&e.heading===t.heading&&e.pitch===t.pitch&&e.roll===t.roll};Lc.equalsEpsilon=function(e,t,n,i){return e===t||l(e)&&l(t)&&Z.equalsEpsilon(e.heading,t.heading,n,i)&&Z.equalsEpsilon(e.pitch,t.pitch,n,i)&&Z.equalsEpsilon(e.roll,t.roll,n,i)};Lc.prototype.clone=function(e){return Lc.clone(this,e)};Lc.prototype.equals=function(e){return Lc.equals(this,e)};Lc.prototype.equalsEpsilon=function(e,t,n){return Lc.equalsEpsilon(this,e,t,n)};Lc.prototype.toString=function(){return`(${this.heading}, ${this.pitch}, ${this.roll})`};var ic=Lc;var Lwt=y(C(),1);var pwt=y(C(),1);var gte={};var bte=/((?:.*\/)|^)Cesium\.js(?:\?|\#|$)/;function A1e(){let e=document.getElementsByTagName("script");for(let t=0,n=e.length;t"u"?e:(l(Q9)||(Q9=document.createElement("a")),Q9.href=e,Q9.href)}var Qy;function Cte(){if(l(Qy))return Qy;let e;return typeof CESIUM_BASE_URL<"u"?e=CESIUM_BASE_URL:l(gte?.url)?e=Tf(".",gte.url):typeof define=="object"&&l(define.amd)&&!define.amd.toUrlUndefined&&l(E9.toUrl)?e=Tf("..",Uy("Core/buildModuleUrl.js")):e=A1e(),Qy=new Ve({url:yte(e)}),Qy.appendForwardSlash(),Qy}function g1e(e){return yte(E9.toUrl(`../${e}`))}function xte(e){return Cte().getDerivedResource({url:e}).url}var U9;function Uy(e){return l(U9)||(typeof define=="object"&&l(define.amd)&&!define.amd.toUrlUndefined&&l(E9.toUrl)?U9=g1e:U9=xte),U9(e)}Uy._cesiumScriptRegex=bte;Uy._buildModuleUrlFromBaseUrl=xte;Uy._clearBaseResource=function(){Qy=void 0};Uy.setBaseUrl=function(e){Qy=Ve.DEFAULT.getDerivedResource({url:e})};Uy.getCesiumBaseUrl=Cte;var hn=Uy;var bwt=y(C(),1);function b1e(e,t,n){this.x=e,this.y=t,this.s=n}var ky=b1e;function O3(e){e=e??Y.EMPTY_OBJECT,this._xysFileUrlTemplate=Ve.createIfNeeded(e.xysFileUrlTemplate),this._interpolationOrder=e.interpolationOrder??9,this._sampleZeroJulianEphemerisDate=e.sampleZeroJulianEphemerisDate??24423965e-1,this._sampleZeroDateTT=new j(this._sampleZeroJulianEphemerisDate,0,oi.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 y1e=new j(0,0,oi.TAI);function k3(e,t,n){let i=y1e;return i.dayNumber=t,i.secondsOfDay=n,j.daysDifference(i,e._sampleZeroDateTT)}O3.prototype.preload=function(e,t,n,i){let o=k3(this,e,t),r=k3(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 h=c;h<=d;++h)u.push(Y3(this,h));return Promise.all(u)};O3.prototype.computeXysRadians=function(e,t,n){let i=k3(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])||(Y3(this,s/this._samplesPerXysFile|0),c=!0),l(d[a*3])||(Y3(this,a/this._samplesPerXysFile|0),c=!0),c)return;l(n)?(n.x=0,n.y=0,n.s=0):n=new ky(0,0,0);let u=i-s*this._stepSizeDays,h=this._work,p=this._denominators,g=this._coef,f=this._xTable,b,x;for(b=0;b<=r;++b)h[b]=u-f[b];for(b=0;b<=r;++b){for(g[b]=1,x=0;x<=r;++x)x!==b&&(g[b]*=h[x]);g[b]*=p[b];let I=(s+b)*3;n.x+=g[b]*d[I++],n.y+=g[b]*d[I++],n.s+=g[b]*d[I]}return n};function Y3(e,t){if(e._chunkDownloadsInProgress[t])return e._chunkDownloadsInProgress[t];let n,i=e._xysFileUrlTemplate;l(i)?n=i.getDerivedResource({templateValues:{0:t}}):n=new Ve({url:hn(`Assets/IAU2006_XYS/IAU2006_XYS_${t}.json`)});let o=n.fetchJson().then(function(r){e._chunkDownloadsInProgress[t]=!1;let s=e._samples,a=r.samples,c=t*e._samplesPerXysFile*3;for(let d=0,u=a.length;di&&(o=d,i=u)}let r=1,s=0,a=z3[o],c=K3[o];if(Math.abs(e[ct.getElementIndex(c,a)])>n){let d=e[ct.getElementIndex(c,c)],u=e[ct.getElementIndex(a,a)],h=e[ct.getElementIndex(c,a)],p=(d-u)/2/h,g;p<0?g=-1/(-p+Math.sqrt(1+p*p)):g=1/(p+Math.sqrt(1+p*p)),r=1/Math.sqrt(1+g*g),s=g*r}return t=ct.clone(ct.IDENTITY,t),t[ct.getElementIndex(a,a)]=t[ct.getElementIndex(c,c)]=r,t[ct.getElementIndex(c,a)]=s,t[ct.getElementIndex(a,c)]=-s,t}var k9=new ct,_te=new ct;ct.computeEigenDecomposition=function(e,t){let n=Z.EPSILON20,i=10,o=0,r=0;l(t)||(t={});let s=t.unitary=ct.clone(ct.IDENTITY,t.unitary),a=t.diagonal=ct.clone(e,t.diagonal),c=n*E1e(a);for(;rc;)S1e(a,k9),ct.transpose(k9,_te),ct.multiply(a,k9,a),ct.multiply(_te,a,a),ct.multiply(s,k9,s),++o>2&&(++r,o=0);return t};ct.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t};ct.determinant=function(e){let t=e[0],n=e[3],i=e[6],o=e[1],r=e[4],s=e[7],a=e[2],c=e[5],d=e[8];return t*(r*d-c*s)+o*(c*i-n*d)+a*(n*s-r*i)};ct.inverse=function(e,t){let n=e[0],i=e[1],o=e[2],r=e[3],s=e[4],a=e[5],c=e[6],d=e[7],u=e[8],h=ct.determinant(e);t[0]=s*u-d*a,t[1]=d*o-i*u,t[2]=i*a-s*o,t[3]=c*a-r*u,t[4]=n*u-c*o,t[5]=r*o-n*a,t[6]=r*d-c*s,t[7]=c*i-n*d,t[8]=n*s-r*i;let p=1/h;return ct.multiplyByScalar(t,p,t)};var L1e=new ct;ct.inverseTranspose=function(e,t){return ct.inverse(ct.transpose(e,L1e),t)};ct.equals=function(e,t){return e===t||l(e)&&l(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]};ct.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n};ct.IDENTITY=Object.freeze(new ct(1,0,0,0,1,0,0,0,1));ct.ZERO=Object.freeze(new ct(0,0,0,0,0,0,0,0,0));ct.COLUMN0ROW0=0;ct.COLUMN0ROW1=1;ct.COLUMN0ROW2=2;ct.COLUMN1ROW0=3;ct.COLUMN1ROW1=4;ct.COLUMN1ROW2=5;ct.COLUMN2ROW0=6;ct.COLUMN2ROW1=7;ct.COLUMN2ROW2=8;Object.defineProperties(ct.prototype,{length:{get:function(){return ct.packedLength}}});ct.prototype.clone=function(e){return ct.clone(this,e)};ct.prototype.equals=function(e){return ct.equals(this,e)};ct.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]&&e[4]===t[n+4]&&e[5]===t[n+5]&&e[6]===t[n+6]&&e[7]===t[n+7]&&e[8]===t[n+8]};ct.prototype.equalsEpsilon=function(e,t){return ct.equalsEpsilon(this,e,t)};ct.prototype.toString=function(){return`(${this[0]}, ${this[3]}, ${this[6]}) (${this[1]}, ${this[4]}, ${this[7]}) (${this[2]}, ${this[5]}, ${this[8]})`};var $=ct;var Dwt=y(C(),1);function at(e,t,n,i,o,r,s,a,c,d,u,h,p,g,f,b){this[0]=e??0,this[1]=o??0,this[2]=c??0,this[3]=p??0,this[4]=t??0,this[5]=r??0,this[6]=d??0,this[7]=g??0,this[8]=n??0,this[9]=s??0,this[10]=u??0,this[11]=f??0,this[12]=i??0,this[13]=a??0,this[14]=h??0,this[15]=b??0}at.packedLength=16;at.pack=function(e,t,n){return n=n??0,t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t[n++]=e[4],t[n++]=e[5],t[n++]=e[6],t[n++]=e[7],t[n++]=e[8],t[n++]=e[9],t[n++]=e[10],t[n++]=e[11],t[n++]=e[12],t[n++]=e[13],t[n++]=e[14],t[n]=e[15],t};at.unpack=function(e,t,n){return t=t??0,l(n)||(n=new at),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n[4]=e[t++],n[5]=e[t++],n[6]=e[t++],n[7]=e[t++],n[8]=e[t++],n[9]=e[t++],n[10]=e[t++],n[11]=e[t++],n[12]=e[t++],n[13]=e[t++],n[14]=e[t++],n[15]=e[t],n};at.packArray=function(e,t){let n=e.length,i=n*16;l(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o{let t=new Image;t.onload=function(){ol._result=t.width>0&&t.height>0,e(ol._result)},t.onerror=function(){ol._result=!1,e(ol._result)},t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"})),ol._promise};Object.defineProperties(ol,{initialized:{get:function(){return l(ol._result)}}});var M_=[];typeof ArrayBuffer<"u"&&(M_.push(Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array),typeof Uint8ClampedArray<"u"&&M_.push(Uint8ClampedArray),typeof Uint8ClampedArray<"u"&&M_.push(Uint8ClampedArray),typeof BigInt64Array<"u"&&M_.push(BigInt64Array),typeof BigUint64Array<"u"&&M_.push(BigUint64Array));var vu={isChrome:nO,chromeVersion:P1e,isSafari:Lte,safariVersion:M1e,isWebkit:Rte,webkitVersion:v1e,isInternetExplorer:Vte,internetExplorerVersion:N1e,isEdge:j9,edgeVersion:D1e,isFirefox:q9,firefoxVersion:k1e,isWindows:Q1e,isIPadOrIOS:U1e,hardwareConcurrency:Rc.hardwareConcurrency??3,supportsPointerEvents:Y1e,supportsImageRenderingPixelated:Bte,supportsWebP:ol,imageRenderingValue:O1e,typedArrayTypes:M_};vu.supportsBasis=function(e){return vu.supportsWebAssembly()&&e.context.supportsBasis};vu.supportsFullscreen=function(){return Wr.supportsFullscreen()};vu.supportsTypedArrays=function(){return typeof ArrayBuffer<"u"};vu.supportsBigInt64Array=function(){return typeof BigInt64Array<"u"};vu.supportsBigUint64Array=function(){return typeof BigUint64Array<"u"};vu.supportsBigInt=function(){return typeof BigInt<"u"};vu.supportsWebWorkers=function(){return typeof Worker<"u"};vu.supportsWebAssembly=function(){return typeof WebAssembly<"u"};vu.supportsWebgl2=function(e){return e.context.webgl2};vu.supportsEsmWebWorkers=function(){return!q9()||parseInt(iO)>=114};var Ht=vu;function dt(e,t,n,i){this.x=e??0,this.y=t??0,this.z=n??0,this.w=i??0}var u1=new m;dt.fromAxisAngle=function(e,t,n){let i=t/2,o=Math.sin(i);u1=m.normalize(e,u1);let r=u1.x*o,s=u1.y*o,a=u1.z*o,c=Math.cos(i);return l(n)?(n.x=r,n.y=s,n.z=a,n.w=c,n):new dt(r,s,a,c)};var H1e=[1,2,0],z1e=new Array(3);dt.fromRotationMatrix=function(e,t){let n,i,o,r,s,a=e[$.COLUMN0ROW0],c=e[$.COLUMN1ROW1],d=e[$.COLUMN2ROW2],u=a+c+d;if(u>0)n=Math.sqrt(u+1),s=.5*n,n=.5/n,i=(e[$.COLUMN1ROW2]-e[$.COLUMN2ROW1])*n,o=(e[$.COLUMN2ROW0]-e[$.COLUMN0ROW2])*n,r=(e[$.COLUMN0ROW1]-e[$.COLUMN1ROW0])*n;else{let h=H1e,p=0;c>a&&(p=1),d>a&&d>c&&(p=2);let g=h[p],f=h[g];n=Math.sqrt(e[$.getElementIndex(p,p)]-e[$.getElementIndex(g,g)]-e[$.getElementIndex(f,f)]+1);let b=z1e;b[p]=.5*n,n=.5/n,s=(e[$.getElementIndex(f,g)]-e[$.getElementIndex(g,f)])*n,b[g]=(e[$.getElementIndex(g,p)]+e[$.getElementIndex(p,g)])*n,b[f]=(e[$.getElementIndex(f,p)]+e[$.getElementIndex(p,f)])*n,i=-b[0],o=-b[1],r=-b[2]}return l(t)?(t.x=i,t.y=o,t.z=r,t.w=s,t):new dt(i,o,r,s)};var wte=new dt,Xte=new dt,oO=new dt,Wte=new dt;dt.fromHeadingPitchRoll=function(e,t){return Wte=dt.fromAxisAngle(m.UNIT_X,e.roll,wte),oO=dt.fromAxisAngle(m.UNIT_Y,-e.pitch,t),t=dt.multiply(oO,Wte,oO),Xte=dt.fromAxisAngle(m.UNIT_Z,-e.heading,wte),dt.multiply(Xte,t,t)};var $9=new m,rO=new m,eh=new dt,Fte=new dt,eD=new dt;dt.packedLength=4;dt.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};dt.unpack=function(e,t,n){return t=t??0,l(n)||(n=new dt),n.x=e[t],n.y=e[t+1],n.z=e[t+2],n.w=e[t+3],n};dt.packedInterpolationLength=3;dt.convertPackedArrayForInterpolation=function(e,t,n,i){dt.unpack(e,n*4,eD),dt.conjugate(eD,eD);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 g=7;g>=0;--g)zp[g]=(tD[g]*c-nD[g])*s,Kp[g]=(tD[g]*d-nD[g])*s;let u=r*n*(1+zp[0]*(1+zp[1]*(1+zp[2]*(1+zp[3]*(1+zp[4]*(1+zp[5]*(1+zp[6]*(1+zp[7])))))))),h=a*(1+Kp[0]*(1+Kp[1]*(1+Kp[2]*(1+Kp[3]*(1+Kp[4]*(1+Kp[5]*(1+Kp[6]*(1+Kp[7])))))))),p=dt.multiplyByScalar(e,h,j1e);return dt.multiplyByScalar(t,u,i),dt.add(p,i,i)};dt.fastSquad=function(e,t,n,i,o,r){let s=dt.fastSlerp(e,t,o,m1),a=dt.fastSlerp(n,i,o,v_);return dt.fastSlerp(s,a,2*o*(1-o),r)};dt.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};dt.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};dt.ZERO=Object.freeze(new dt(0,0,0,0));dt.IDENTITY=Object.freeze(new dt(0,0,0,1));dt.prototype.clone=function(e){return dt.clone(this,e)};dt.prototype.equals=function(e){return dt.equals(this,e)};dt.prototype.equalsEpsilon=function(e,t){return dt.equalsEpsilon(this,e,t)};dt.prototype.toString=function(){return`(${this.x}, ${this.y}, ${this.z}, ${this.w})`};var Pe=dt;var Ri={},lO={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"}},N_={north:[-1,0,0],east:[0,1,0],up:[0,0,1],south:[1,0,0],west:[0,-1,0],down:[0,0,-1]},dO={},zl={east:new m,north:new m,up:new m,west:new m,south:new m,down:new m},pb=new m,Ab=new m,gb=new m;Ri.localFrameToFixedFrameGenerator=function(e,t){if(!lO.hasOwnProperty(e)||!lO[e].hasOwnProperty(t))throw new Ae("firstAxis and secondAxis must be east, north, up, west, south or down.");let n=lO[e][t],i,o=e+t;return l(dO[o])?i=dO[o]:(i=function(r,s,a){if(l(a)||(a=new X),m.equalsEpsilon(r,m.ZERO,Z.EPSILON14))m.unpack(N_[e],0,pb),m.unpack(N_[t],0,Ab),m.unpack(N_[n],0,gb);else if(Z.equalsEpsilon(r.x,0,Z.EPSILON14)&&Z.equalsEpsilon(r.y,0,Z.EPSILON14)){let c=Z.sign(r.z);m.unpack(N_[e],0,pb),e!=="east"&&e!=="west"&&m.multiplyByScalar(pb,c,pb),m.unpack(N_[t],0,Ab),t!=="east"&&t!=="west"&&m.multiplyByScalar(Ab,c,Ab),m.unpack(N_[n],0,gb),n!=="east"&&n!=="west"&&m.multiplyByScalar(gb,c,gb)}else{s=s??ie.default,s.geodeticSurfaceNormal(r,zl.up);let c=zl.up,d=zl.east;d.x=-r.y,d.y=r.x,d.z=0,m.normalize(d,zl.east),m.cross(c,d,zl.north),m.multiplyByScalar(zl.up,-1,zl.down),m.multiplyByScalar(zl.east,-1,zl.west),m.multiplyByScalar(zl.north,-1,zl.south),pb=zl[e],Ab=zl[t],gb=zl[n]}return a[0]=pb.x,a[1]=pb.y,a[2]=pb.z,a[3]=0,a[4]=Ab.x,a[5]=Ab.y,a[6]=Ab.z,a[7]=0,a[8]=gb.x,a[9]=gb.y,a[10]=gb.z,a[11]=0,a[12]=r.x,a[13]=r.y,a[14]=r.z,a[15]=1,a},dO[o]=i),i};Ri.eastNorthUpToFixedFrame=Ri.localFrameToFixedFrameGenerator("east","north");Ri.northEastDownToFixedFrame=Ri.localFrameToFixedFrameGenerator("north","east");Ri.northUpEastToFixedFrame=Ri.localFrameToFixedFrameGenerator("north","up");Ri.northWestUpToFixedFrame=Ri.localFrameToFixedFrameGenerator("north","west");var q1e=new Pe,$1e=new m(1,1,1),eRe=new X;Ri.headingPitchRollToFixedFrame=function(e,t,n,i,o){i=i??Ri.eastNorthUpToFixedFrame;let r=Pe.fromHeadingPitchRoll(t,q1e),s=X.fromTranslationQuaternionRotationScale(m.ZERO,r,$1e,eRe);return o=i(e,n,o),X.multiply(o,s,o)};var tRe=new X,nRe=new $;Ri.headingPitchRollQuaternion=function(e,t,n,i,o){let r=Ri.headingPitchRollToFixedFrame(e,t,n,i,tRe),s=X.getMatrix3(r,nRe);return Pe.fromRotationMatrix(s,o)};var iRe=new m(1,1,1),oRe=new m,vte=new X,rRe=new X,sRe=new $,aRe=new Pe;Ri.fixedFrameToHeadingPitchRoll=function(e,t,n,i){t=t??ie.default,n=n??Ri.eastNorthUpToFixedFrame,l(i)||(i=new ic);let o=X.getTranslation(e,oRe);if(m.equals(o,m.ZERO))return i.heading=0,i.pitch=0,i.roll=0,i;let r=X.inverseTransformation(n(o,t,vte),vte),s=X.setScale(e,iRe,rRe);s=X.setTranslation(s,m.ZERO,s),r=X.multiply(r,s,r);let a=Pe.fromRotationMatrix(X.getMatrix3(r,sRe),aRe);return a=Pe.normalize(a,a),ic.fromQuaternion(a,i)};var cRe=6*3600+2460+50.54841,lRe=8640184812866e-6,dRe=.093104,uRe=-62e-7,mRe=11772758384668e-32,hRe=72921158553e-15,fRe=Z.TWO_PI/86400,iD=new j;Ri.computeIcrfToCentralBodyFixedMatrix=function(e,t){let n=Ri.computeIcrfToFixedMatrix(e,t);return l(n)||(n=Ri.computeTemeToPseudoFixedMatrix(e,t)),n};Ri.computeTemeToPseudoFixedMatrix=function(e,t){iD=j.addSeconds(e,-j.computeTaiMinusUtc(e),iD);let n=iD.dayNumber,i=iD.secondsOfDay,o,r=n-2451545;i>=43200?o=(r+.5)/ai.DAYS_PER_JULIAN_CENTURY:o=(r-.5)/ai.DAYS_PER_JULIAN_CENTURY;let a=(cRe+o*(lRe+o*(dRe+o*uRe)))*fRe%Z.TWO_PI,c=hRe+mRe*(n-24515455e-1),d=(i+ai.SECONDS_PER_DAY*.5)%ai.SECONDS_PER_DAY,u=a+c*d,h=Math.cos(u),p=Math.sin(u);return l(t)?(t[0]=h,t[1]=-p,t[2]=0,t[3]=p,t[4]=h,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new $(h,p,0,-p,h,0,0,0,1)};Ri.iau2006XysData=new c1;Ri.earthOrientationParameters=a1.NONE;var hO=32.184,pRe=2451545;Ri.preloadIcrfFixed=function(e){let t=e.start.dayNumber,n=e.start.secondsOfDay+hO,i=e.stop.dayNumber,o=e.stop.secondsOfDay+hO;return Ri.iau2006XysData.preload(t,n,i,o)};Ri.computeIcrfToFixedMatrix=function(e,t){l(t)||(t=new $);let n=Ri.computeFixedToIcrfMatrix(e,t);if(l(n))return $.transpose(n,t)};var ARe=32.184,gRe=2451545,oD=new ic,bRe=new $,yRe=new j;Ri.computeMoonFixedToIcrfMatrix=function(e,t){l(t)||(t=new $);let n=j.addSeconds(e,ARe,yRe),i=j.totalDays(n)-gRe,o=Z.toRadians(12.112)-Z.toRadians(.052992)*i,r=Z.toRadians(24.224)-Z.toRadians(.105984)*i,s=Z.toRadians(227.645)+Z.toRadians(13.012)*i,a=Z.toRadians(261.105)+Z.toRadians(13.340716)*i,c=Z.toRadians(358)+Z.toRadians(.9856)*i;return oD.pitch=Z.toRadians(180)-Z.toRadians(3.878)*Math.sin(o)-Z.toRadians(.12)*Math.sin(r)+Z.toRadians(.07)*Math.sin(s)-Z.toRadians(.017)*Math.sin(a),oD.roll=Z.toRadians(66.53-90)+Z.toRadians(1.543)*Math.cos(o)+Z.toRadians(.24)*Math.cos(r)-Z.toRadians(.028)*Math.cos(s)+Z.toRadians(.007)*Math.cos(a),oD.heading=Z.toRadians(244.375-90)+Z.toRadians(13.17635831)*i+Z.toRadians(3.558)*Math.sin(o)+Z.toRadians(.121)*Math.sin(r)-Z.toRadians(.064)*Math.sin(s)+Z.toRadians(.016)*Math.sin(a)+Z.toRadians(.025)*Math.sin(c),$.fromHeadingPitchRoll(oD,bRe)};Ri.computeIcrfToMoonFixedMatrix=function(e,t){l(t)||(t=new $);let n=Ri.computeMoonFixedToIcrfMatrix(e,t);if(l(n))return $.transpose(n,t)};var CRe=new ky(0,0,0),xRe=new ub(0,0,0,0,0,0),uO=new $,mO=new $;Ri.computeFixedToIcrfMatrix=function(e,t){l(t)||(t=new $);let n=Ri.earthOrientationParameters.compute(e,xRe);if(!l(n))return;let i=e.dayNumber,o=e.secondsOfDay+hO,r=Ri.iau2006XysData.computeXysRadians(i,o,CRe);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=uO;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=$.fromRotationZ(-r.s,mO),h=$.multiply(d,u,uO),p=e.dayNumber,g=e.secondsOfDay-j.computeTaiMinusUtc(e)+n.ut1MinusUtc,f=p-2451545,b=g/ai.SECONDS_PER_DAY,x=.779057273264+b+.00273781191135448*(f+b);x=x%1*Z.TWO_PI;let I=$.fromRotationZ(x,mO),_=$.multiply(h,I,uO),E=Math.cos(n.xPoleWander),S=Math.cos(n.yPoleWander),R=Math.sin(n.xPoleWander),G=Math.sin(n.yPoleWander),B=i-pRe+o/ai.SECONDS_PER_DAY;B/=36525;let w=-47e-6*B*Z.RADIANS_PER_DEGREE/3600,F=Math.cos(w),P=Math.sin(w),A=mO;return A[0]=E*F,A[1]=E*P,A[2]=R,A[3]=-S*P+G*R*F,A[4]=S*F+G*R*P,A[5]=-G*E,A[6]=-G*P-S*R*F,A[7]=G*F-S*R*P,A[8]=S*E,$.multiply(_,A,t)};var IRe=new ce;Ri.pointToWindowCoordinates=function(e,t,n,i){return i=Ri.pointToGLWindowCoordinates(e,t,n,i),i.y=2*t[5]-i.y,i};Ri.pointToGLWindowCoordinates=function(e,t,n,i){l(i)||(i=new D);let o=IRe;return X.multiplyByVector(e,ce.fromElements(n.x,n.y,n.z,1,o),o),ce.multiplyByScalar(o,1/o.w,o),X.multiplyByVector(t,o,o),D.fromCartesian4(o,i)};var _Re=new m,ERe=new m,TRe=new m;Ri.rotationMatrixFromPositionVelocity=function(e,t,n,i){let o=(n??ie.default).geodeticSurfaceNormal(e,_Re),r=m.cross(t,o,ERe);m.equalsEpsilon(r,m.ZERO,Z.EPSILON6)&&(r=m.clone(m.UNIT_X,r));let s=m.cross(r,t,TRe);return m.normalize(s,s),m.cross(t,s,r),m.negate(r,r),m.normalize(r,r),l(i)||(i=new $),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};var Nte=new X(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1),Dte=new ge,fO=new m,SRe=new m,LRe=new $,pO=new X,Qte=new X;Ri.basisTo2D=function(e,t,n){let i=X.getTranslation(t,SRe),o=e.ellipsoid,r;if(m.equals(i,m.ZERO))r=m.clone(m.ZERO,fO);else{let u=o.cartesianToCartographic(i,Dte);r=e.project(u,fO),m.fromElements(r.z,r.x,r.y,r)}let s=Ri.eastNorthUpToFixedFrame(i,o,pO),a=X.inverseTransformation(s,Qte),c=X.getMatrix3(t,LRe),d=X.multiplyByMatrix3(a,c,n);return X.multiply(Nte,d,n),X.setTranslation(n,r,n),n};Ri.ellipsoidTo2DModelMatrix=function(e,t,n){let i=e.ellipsoid,o=Ri.eastNorthUpToFixedFrame(t,i,pO),r=X.inverseTransformation(o,Qte),s=i.cartesianToCartographic(t,Dte),a=e.project(s,fO);m.fromElements(a.z,a.x,a.y,a);let c=X.fromTranslation(a,pO);return X.multiply(Nte,r,n),X.multiply(c,n,n),n};var Dt=Ri;function Pn(e,t,n,i){this.west=e??0,this.south=t??0,this.east=n??0,this.north=i??0}Object.defineProperties(Pn.prototype,{width:{get:function(){return Pn.computeWidth(this)}},height:{get:function(){return Pn.computeHeight(this)}}});Pn.packedLength=4;Pn.pack=function(e,t,n){return n=n??0,t[n++]=e.west,t[n++]=e.south,t[n++]=e.east,t[n]=e.north,t};Pn.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Pn),n.west=e[t++],n.south=e[t++],n.east=e[t++],n.north=e[t],n};Pn.computeWidth=function(e){let t=e.east,n=e.west;return t=0?u.longitude:u.longitude+Z.TWO_PI;o=Math.min(o,h),r=Math.max(r,h)}return i-n>r-o&&(n=o,i=r,i>Z.PI&&(i=i-Z.TWO_PI),n>Z.PI&&(n=n-Z.TWO_PI)),l(t)?(t.west=n,t.south=s,t.east=i,t.north=a,t):new Pn(n,s,i,a)};Pn.fromCartesianArray=function(e,t,n){t=t??ie.default;let i=Number.MAX_VALUE,o=-Number.MAX_VALUE,r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=Number.MAX_VALUE,c=-Number.MAX_VALUE;for(let d=0,u=e.length;d=0?h.longitude:h.longitude+Z.TWO_PI;r=Math.min(r,p),s=Math.max(s,p)}return o-i>s-r&&(i=r,o=s,o>Z.PI&&(o=o-Z.TWO_PI),i>Z.PI&&(i=i-Z.TWO_PI)),l(n)?(n.west=i,n.south=a,n.east=o,n.north=c,n):new Pn(i,a,o,c)};var RRe=new m,VRe=new m,GRe=new m,ZRe=new m,BRe=new m,AO=new Array(5);for(let e=0;e0?i+=Z.TWO_PI:r0&&(r+=Z.TWO_PI),i=u))return l(n)?(n.west=a,n.south=d,n.east=c,n.north=u,n):new Pn(a,d,c,u)};Pn.simpleIntersection=function(e,t,n){let i=Math.max(e.west,t.west),o=Math.max(e.south,t.south),r=Math.min(e.east,t.east),s=Math.min(e.north,t.north);if(!(o>=s||i>=r))return l(n)?(n.west=i,n.south=o,n.east=r,n.north=s,n):new Pn(i,o,r,s)};Pn.union=function(e,t,n){l(n)||(n=new Pn);let i=e.east,o=e.west,r=t.east,s=t.west;i0?i+=Z.TWO_PI:r0&&(r+=Z.TWO_PI),io||Z.equalsEpsilon(n,o,Z.EPSILON14))&&(n=e.south&&i<=e.north};var wRe=new ge;Pn.subsample=function(e,t,n,i){t=t??ie.default,n=n??0,l(i)||(i=[]);let o=0,r=e.north,s=e.south,a=e.east,c=e.west,d=wRe;d.height=n,d.longitude=c,d.latitude=r,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.longitude=a,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.latitude=s,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.longitude=c,i[o]=t.cartographicToCartesian(d,i[o]),o++,r<0?d.latitude=r:s>0?d.latitude=s:d.latitude=0;for(let u=1;u<8;++u)d.longitude=-Math.PI+u*Z.PI_OVER_TWO,Pn.contains(e,d)&&(i[o]=t.cartographicToCartesian(d,i[o]),o++);return d.latitude===0&&(d.longitude=c,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.longitude=a,i[o]=t.cartographicToCartesian(d,i[o]),o++),i.length=o,i};Pn.subsection=function(e,t,n,i,o,r){if(l(r)||(r=new Pn),e.west<=e.east){let a=e.east-e.west;r.west=e.west+t*a,r.east=e.west+i*a}else{let a=Z.TWO_PI+e.east-e.west;r.west=Z.negativePiToPi(e.west+t*a),r.east=Z.negativePiToPi(e.west+i*a)}let s=e.north-e.south;return r.south=e.south+n*s,r.north=e.south+o*s,t===1&&(r.west=e.east),i===1&&(r.east=e.east),n===1&&(r.south=e.north),o===1&&(r.north=e.north),r};Pn.MAX_VALUE=Object.freeze(new Pn(-Math.PI,-Z.PI_OVER_TWO,Math.PI,Z.PI_OVER_TWO));var le=Pn;function Jr(e,t,n,i){this.x=e??0,this.y=t??0,this.width=n??0,this.height=i??0}Jr.packedLength=4;Jr.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};Jr.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Jr),n.x=e[t++],n.y=e[t++],n.width=e[t++],n.height=e[t],n};Jr.fromPoints=function(e,t){if(l(t)||(t=new Jr),!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};Jr.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?on.OUTSIDE:on.INTERSECTING};Jr.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};Jr.prototype.clone=function(e){return Jr.clone(this,e)};Jr.prototype.intersect=function(e){return Jr.intersect(this,e)};Jr.prototype.equals=function(e){return Jr.equals(this,e)};var Ke=Jr;var YXt=y(C(),1);function gO(e,t,n){return n<0&&(n+=1),n>1&&(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}function ae(e,t,n,i){this.red=e??1,this.green=t??1,this.blue=n??1,this.alpha=i??1}ae.fromCartesian4=function(e,t){return l(t)?(t.red=e.x,t.green=e.y,t.blue=e.z,t.alpha=e.w,t):new ae(e.x,e.y,e.z,e.w)};ae.fromBytes=function(e,t,n,i,o){return e=ae.byteToFloat(e??255),t=ae.byteToFloat(t??255),n=ae.byteToFloat(n??255),i=ae.byteToFloat(i??255),l(o)?(o.red=e,o.green=t,o.blue=n,o.alpha=i,o):new ae(e,t,n,i)};ae.fromAlpha=function(e,t,n){return l(n)?(n.red=e.red,n.green=e.green,n.blue=e.blue,n.alpha=t,n):new ae(e.red,e.green,e.blue,t)};var bO,yO,Jp;Ht.supportsTypedArrays()&&(bO=new ArrayBuffer(4),yO=new Uint32Array(bO),Jp=new Uint8Array(bO));ae.fromRgba=function(e,t){return yO[0]=e,ae.fromBytes(Jp[0],Jp[1],Jp[2],Jp[3],t)};ae.fromHsl=function(e,t,n,i,o){e=(e??0)%1,t=t??0,n=n??0,i=i??1;let r=n,s=n,a=n;if(t!==0){let c;n<.5?c=n*(1+t):c=n+t-n*t;let d=2*n-c;r=gO(d,c,e+1/3),s=gO(d,c,e),a=gO(d,c,e-1/3)}return l(o)?(o.red=r,o.green=s,o.blue=a,o.alpha=i,o):new ae(r,s,a,i)};ae.fromRandom=function(e,t){e=e??Y.EMPTY_OBJECT;let n=e.red;if(!l(n)){let s=e.minimumRed??0,a=e.maximumRed??1;n=s+Z.nextRandomNumber()*(a-s)}let i=e.green;if(!l(i)){let s=e.minimumGreen??0,a=e.maximumGreen??1;i=s+Z.nextRandomNumber()*(a-s)}let o=e.blue;if(!l(o)){let s=e.minimumBlue??0,a=e.maximumBlue??1;o=s+Z.nextRandomNumber()*(a-s)}let r=e.alpha;if(!l(r)){let s=e.minimumAlpha??0,a=e.maximumAlpha??1;r=s+Z.nextRandomNumber()*(a-s)}return l(t)?(t.red=n,t.green=i,t.blue=o,t.alpha=r,t):new ae(n,i,o,r)};var FRe=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,PRe=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,MRe=/^rgba?\s*\(\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i,vRe=/^hsla?\s*\(\s*([0-9.]+)\s*[,\s]+\s*([0-9.]+%)\s*[,\s]+\s*([0-9.]+%)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i;ae.fromCssColorString=function(e,t){l(t)||(t=new ae),e=e.trim();let n=ae[e.toUpperCase()];if(l(n))return ae.clone(n,t),t;let i=FRe.exec(e);return i!==null?(t.red=parseInt(i[1],16)/15,t.green=parseInt(i[2],16)/15,t.blue=parseInt(i[3],16)/15,t.alpha=parseInt(i[4]??"f",16)/15,t):(i=PRe.exec(e),i!==null?(t.red=parseInt(i[1],16)/255,t.green=parseInt(i[2],16)/255,t.blue=parseInt(i[3],16)/255,t.alpha=parseInt(i[4]??"ff",16)/255,t):(i=MRe.exec(e),i!==null?(t.red=parseFloat(i[1])/(i[1].substr(-1)==="%"?100:255),t.green=parseFloat(i[2])/(i[2].substr(-1)==="%"?100:255),t.blue=parseFloat(i[3])/(i[3].substr(-1)==="%"?100:255),t.alpha=parseFloat(i[4]??"1.0"),t):(i=vRe.exec(e),i!==null?ae.fromHsl(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,parseFloat(i[4]??"1.0"),t):(t=void 0,t))))};ae.packedLength=4;ae.pack=function(e,t,n){return n=n??0,t[n++]=e.red,t[n++]=e.green,t[n++]=e.blue,t[n]=e.alpha,t};ae.unpack=function(e,t,n){return t=t??0,l(n)||(n=new ae),n.red=e[t++],n.green=e[t++],n.blue=e[t++],n.alpha=e[t],n};ae.byteToFloat=function(e){return e/255};ae.floatToByte=function(e){return e===1?255:e*256|0};ae.clone=function(e,t){if(l(e))return l(t)?(t.red=e.red,t.green=e.green,t.blue=e.blue,t.alpha=e.alpha,t):new ae(e.red,e.green,e.blue,e.alpha)};ae.equals=function(e,t){return e===t||l(e)&&l(t)&&e.red===t.red&&e.green===t.green&&e.blue===t.blue&&e.alpha===t.alpha};ae.equalsArray=function(e,t,n){return e.red===t[n]&&e.green===t[n+1]&&e.blue===t[n+2]&&e.alpha===t[n+3]};ae.prototype.clone=function(e){return ae.clone(this,e)};ae.prototype.equals=function(e){return ae.equals(this,e)};ae.prototype.equalsEpsilon=function(e,t){return this===e||l(e)&&Math.abs(this.red-e.red)<=t&&Math.abs(this.green-e.green)<=t&&Math.abs(this.blue-e.blue)<=t&&Math.abs(this.alpha-e.alpha)<=t};ae.prototype.toString=function(){return`(${this.red}, ${this.green}, ${this.blue}, ${this.alpha})`};ae.prototype.toCssColorString=function(){let e=ae.floatToByte(this.red),t=ae.floatToByte(this.green),n=ae.floatToByte(this.blue);return this.alpha===1?`rgb(${e},${t},${n})`:`rgba(${e},${t},${n},${this.alpha})`};ae.prototype.toCssHexString=function(){let e=ae.floatToByte(this.red).toString(16);e.length<2&&(e=`0${e}`);let t=ae.floatToByte(this.green).toString(16);t.length<2&&(t=`0${t}`);let n=ae.floatToByte(this.blue).toString(16);if(n.length<2&&(n=`0${n}`),this.alpha<1){let i=ae.floatToByte(this.alpha).toString(16);return i.length<2&&(i=`0${i}`),`#${e}${t}${n}${i}`}return`#${e}${t}${n}`};ae.prototype.toBytes=function(e){let t=ae.floatToByte(this.red),n=ae.floatToByte(this.green),i=ae.floatToByte(this.blue),o=ae.floatToByte(this.alpha);return l(e)?(e[0]=t,e[1]=n,e[2]=i,e[3]=o,e):[t,n,i,o]};ae.prototype.toRgba=function(){return Jp[0]=ae.floatToByte(this.red),Jp[1]=ae.floatToByte(this.green),Jp[2]=ae.floatToByte(this.blue),Jp[3]=ae.floatToByte(this.alpha),yO[0]};ae.prototype.brighten=function(e,t){return e=1-e,t.red=1-(1-this.red)*e,t.green=1-(1-this.green)*e,t.blue=1-(1-this.blue)*e,t.alpha=this.alpha,t};ae.prototype.darken=function(e,t){return e=1-e,t.red=this.red*e,t.green=this.green*e,t.blue=this.blue*e,t.alpha=this.alpha,t};ae.prototype.withAlpha=function(e,t){return ae.fromAlpha(this,e,t)};ae.add=function(e,t,n){return n.red=e.red+t.red,n.green=e.green+t.green,n.blue=e.blue+t.blue,n.alpha=e.alpha+t.alpha,n};ae.subtract=function(e,t,n){return n.red=e.red-t.red,n.green=e.green-t.green,n.blue=e.blue-t.blue,n.alpha=e.alpha-t.alpha,n};ae.multiply=function(e,t,n){return n.red=e.red*t.red,n.green=e.green*t.green,n.blue=e.blue*t.blue,n.alpha=e.alpha*t.alpha,n};ae.divide=function(e,t,n){return n.red=e.red/t.red,n.green=e.green/t.green,n.blue=e.blue/t.blue,n.alpha=e.alpha/t.alpha,n};ae.mod=function(e,t,n){return n.red=e.red%t.red,n.green=e.green%t.green,n.blue=e.blue%t.blue,n.alpha=e.alpha%t.alpha,n};ae.lerp=function(e,t,n,i){return i.red=Z.lerp(e.red,t.red,n),i.green=Z.lerp(e.green,t.green,n),i.blue=Z.lerp(e.blue,t.blue,n),i.alpha=Z.lerp(e.alpha,t.alpha,n),i};ae.multiplyByScalar=function(e,t,n){return n.red=e.red*t,n.green=e.green*t,n.blue=e.blue*t,n.alpha=e.alpha*t,n};ae.divideByScalar=function(e,t,n){return n.red=e.red/t,n.green=e.green/t,n.blue=e.blue/t,n.alpha=e.alpha/t,n};ae.ALICEBLUE=Object.freeze(ae.fromCssColorString("#F0F8FF"));ae.ANTIQUEWHITE=Object.freeze(ae.fromCssColorString("#FAEBD7"));ae.AQUA=Object.freeze(ae.fromCssColorString("#00FFFF"));ae.AQUAMARINE=Object.freeze(ae.fromCssColorString("#7FFFD4"));ae.AZURE=Object.freeze(ae.fromCssColorString("#F0FFFF"));ae.BEIGE=Object.freeze(ae.fromCssColorString("#F5F5DC"));ae.BISQUE=Object.freeze(ae.fromCssColorString("#FFE4C4"));ae.BLACK=Object.freeze(ae.fromCssColorString("#000000"));ae.BLANCHEDALMOND=Object.freeze(ae.fromCssColorString("#FFEBCD"));ae.BLUE=Object.freeze(ae.fromCssColorString("#0000FF"));ae.BLUEVIOLET=Object.freeze(ae.fromCssColorString("#8A2BE2"));ae.BROWN=Object.freeze(ae.fromCssColorString("#A52A2A"));ae.BURLYWOOD=Object.freeze(ae.fromCssColorString("#DEB887"));ae.CADETBLUE=Object.freeze(ae.fromCssColorString("#5F9EA0"));ae.CHARTREUSE=Object.freeze(ae.fromCssColorString("#7FFF00"));ae.CHOCOLATE=Object.freeze(ae.fromCssColorString("#D2691E"));ae.CORAL=Object.freeze(ae.fromCssColorString("#FF7F50"));ae.CORNFLOWERBLUE=Object.freeze(ae.fromCssColorString("#6495ED"));ae.CORNSILK=Object.freeze(ae.fromCssColorString("#FFF8DC"));ae.CRIMSON=Object.freeze(ae.fromCssColorString("#DC143C"));ae.CYAN=Object.freeze(ae.fromCssColorString("#00FFFF"));ae.DARKBLUE=Object.freeze(ae.fromCssColorString("#00008B"));ae.DARKCYAN=Object.freeze(ae.fromCssColorString("#008B8B"));ae.DARKGOLDENROD=Object.freeze(ae.fromCssColorString("#B8860B"));ae.DARKGRAY=Object.freeze(ae.fromCssColorString("#A9A9A9"));ae.DARKGREEN=Object.freeze(ae.fromCssColorString("#006400"));ae.DARKGREY=ae.DARKGRAY;ae.DARKKHAKI=Object.freeze(ae.fromCssColorString("#BDB76B"));ae.DARKMAGENTA=Object.freeze(ae.fromCssColorString("#8B008B"));ae.DARKOLIVEGREEN=Object.freeze(ae.fromCssColorString("#556B2F"));ae.DARKORANGE=Object.freeze(ae.fromCssColorString("#FF8C00"));ae.DARKORCHID=Object.freeze(ae.fromCssColorString("#9932CC"));ae.DARKRED=Object.freeze(ae.fromCssColorString("#8B0000"));ae.DARKSALMON=Object.freeze(ae.fromCssColorString("#E9967A"));ae.DARKSEAGREEN=Object.freeze(ae.fromCssColorString("#8FBC8F"));ae.DARKSLATEBLUE=Object.freeze(ae.fromCssColorString("#483D8B"));ae.DARKSLATEGRAY=Object.freeze(ae.fromCssColorString("#2F4F4F"));ae.DARKSLATEGREY=ae.DARKSLATEGRAY;ae.DARKTURQUOISE=Object.freeze(ae.fromCssColorString("#00CED1"));ae.DARKVIOLET=Object.freeze(ae.fromCssColorString("#9400D3"));ae.DEEPPINK=Object.freeze(ae.fromCssColorString("#FF1493"));ae.DEEPSKYBLUE=Object.freeze(ae.fromCssColorString("#00BFFF"));ae.DIMGRAY=Object.freeze(ae.fromCssColorString("#696969"));ae.DIMGREY=ae.DIMGRAY;ae.DODGERBLUE=Object.freeze(ae.fromCssColorString("#1E90FF"));ae.FIREBRICK=Object.freeze(ae.fromCssColorString("#B22222"));ae.FLORALWHITE=Object.freeze(ae.fromCssColorString("#FFFAF0"));ae.FORESTGREEN=Object.freeze(ae.fromCssColorString("#228B22"));ae.FUCHSIA=Object.freeze(ae.fromCssColorString("#FF00FF"));ae.GAINSBORO=Object.freeze(ae.fromCssColorString("#DCDCDC"));ae.GHOSTWHITE=Object.freeze(ae.fromCssColorString("#F8F8FF"));ae.GOLD=Object.freeze(ae.fromCssColorString("#FFD700"));ae.GOLDENROD=Object.freeze(ae.fromCssColorString("#DAA520"));ae.GRAY=Object.freeze(ae.fromCssColorString("#808080"));ae.GREEN=Object.freeze(ae.fromCssColorString("#008000"));ae.GREENYELLOW=Object.freeze(ae.fromCssColorString("#ADFF2F"));ae.GREY=ae.GRAY;ae.HONEYDEW=Object.freeze(ae.fromCssColorString("#F0FFF0"));ae.HOTPINK=Object.freeze(ae.fromCssColorString("#FF69B4"));ae.INDIANRED=Object.freeze(ae.fromCssColorString("#CD5C5C"));ae.INDIGO=Object.freeze(ae.fromCssColorString("#4B0082"));ae.IVORY=Object.freeze(ae.fromCssColorString("#FFFFF0"));ae.KHAKI=Object.freeze(ae.fromCssColorString("#F0E68C"));ae.LAVENDER=Object.freeze(ae.fromCssColorString("#E6E6FA"));ae.LAVENDAR_BLUSH=Object.freeze(ae.fromCssColorString("#FFF0F5"));ae.LAWNGREEN=Object.freeze(ae.fromCssColorString("#7CFC00"));ae.LEMONCHIFFON=Object.freeze(ae.fromCssColorString("#FFFACD"));ae.LIGHTBLUE=Object.freeze(ae.fromCssColorString("#ADD8E6"));ae.LIGHTCORAL=Object.freeze(ae.fromCssColorString("#F08080"));ae.LIGHTCYAN=Object.freeze(ae.fromCssColorString("#E0FFFF"));ae.LIGHTGOLDENRODYELLOW=Object.freeze(ae.fromCssColorString("#FAFAD2"));ae.LIGHTGRAY=Object.freeze(ae.fromCssColorString("#D3D3D3"));ae.LIGHTGREEN=Object.freeze(ae.fromCssColorString("#90EE90"));ae.LIGHTGREY=ae.LIGHTGRAY;ae.LIGHTPINK=Object.freeze(ae.fromCssColorString("#FFB6C1"));ae.LIGHTSEAGREEN=Object.freeze(ae.fromCssColorString("#20B2AA"));ae.LIGHTSKYBLUE=Object.freeze(ae.fromCssColorString("#87CEFA"));ae.LIGHTSLATEGRAY=Object.freeze(ae.fromCssColorString("#778899"));ae.LIGHTSLATEGREY=ae.LIGHTSLATEGRAY;ae.LIGHTSTEELBLUE=Object.freeze(ae.fromCssColorString("#B0C4DE"));ae.LIGHTYELLOW=Object.freeze(ae.fromCssColorString("#FFFFE0"));ae.LIME=Object.freeze(ae.fromCssColorString("#00FF00"));ae.LIMEGREEN=Object.freeze(ae.fromCssColorString("#32CD32"));ae.LINEN=Object.freeze(ae.fromCssColorString("#FAF0E6"));ae.MAGENTA=Object.freeze(ae.fromCssColorString("#FF00FF"));ae.MAROON=Object.freeze(ae.fromCssColorString("#800000"));ae.MEDIUMAQUAMARINE=Object.freeze(ae.fromCssColorString("#66CDAA"));ae.MEDIUMBLUE=Object.freeze(ae.fromCssColorString("#0000CD"));ae.MEDIUMORCHID=Object.freeze(ae.fromCssColorString("#BA55D3"));ae.MEDIUMPURPLE=Object.freeze(ae.fromCssColorString("#9370DB"));ae.MEDIUMSEAGREEN=Object.freeze(ae.fromCssColorString("#3CB371"));ae.MEDIUMSLATEBLUE=Object.freeze(ae.fromCssColorString("#7B68EE"));ae.MEDIUMSPRINGGREEN=Object.freeze(ae.fromCssColorString("#00FA9A"));ae.MEDIUMTURQUOISE=Object.freeze(ae.fromCssColorString("#48D1CC"));ae.MEDIUMVIOLETRED=Object.freeze(ae.fromCssColorString("#C71585"));ae.MIDNIGHTBLUE=Object.freeze(ae.fromCssColorString("#191970"));ae.MINTCREAM=Object.freeze(ae.fromCssColorString("#F5FFFA"));ae.MISTYROSE=Object.freeze(ae.fromCssColorString("#FFE4E1"));ae.MOCCASIN=Object.freeze(ae.fromCssColorString("#FFE4B5"));ae.NAVAJOWHITE=Object.freeze(ae.fromCssColorString("#FFDEAD"));ae.NAVY=Object.freeze(ae.fromCssColorString("#000080"));ae.OLDLACE=Object.freeze(ae.fromCssColorString("#FDF5E6"));ae.OLIVE=Object.freeze(ae.fromCssColorString("#808000"));ae.OLIVEDRAB=Object.freeze(ae.fromCssColorString("#6B8E23"));ae.ORANGE=Object.freeze(ae.fromCssColorString("#FFA500"));ae.ORANGERED=Object.freeze(ae.fromCssColorString("#FF4500"));ae.ORCHID=Object.freeze(ae.fromCssColorString("#DA70D6"));ae.PALEGOLDENROD=Object.freeze(ae.fromCssColorString("#EEE8AA"));ae.PALEGREEN=Object.freeze(ae.fromCssColorString("#98FB98"));ae.PALETURQUOISE=Object.freeze(ae.fromCssColorString("#AFEEEE"));ae.PALEVIOLETRED=Object.freeze(ae.fromCssColorString("#DB7093"));ae.PAPAYAWHIP=Object.freeze(ae.fromCssColorString("#FFEFD5"));ae.PEACHPUFF=Object.freeze(ae.fromCssColorString("#FFDAB9"));ae.PERU=Object.freeze(ae.fromCssColorString("#CD853F"));ae.PINK=Object.freeze(ae.fromCssColorString("#FFC0CB"));ae.PLUM=Object.freeze(ae.fromCssColorString("#DDA0DD"));ae.POWDERBLUE=Object.freeze(ae.fromCssColorString("#B0E0E6"));ae.PURPLE=Object.freeze(ae.fromCssColorString("#800080"));ae.RED=Object.freeze(ae.fromCssColorString("#FF0000"));ae.ROSYBROWN=Object.freeze(ae.fromCssColorString("#BC8F8F"));ae.ROYALBLUE=Object.freeze(ae.fromCssColorString("#4169E1"));ae.SADDLEBROWN=Object.freeze(ae.fromCssColorString("#8B4513"));ae.SALMON=Object.freeze(ae.fromCssColorString("#FA8072"));ae.SANDYBROWN=Object.freeze(ae.fromCssColorString("#F4A460"));ae.SEAGREEN=Object.freeze(ae.fromCssColorString("#2E8B57"));ae.SEASHELL=Object.freeze(ae.fromCssColorString("#FFF5EE"));ae.SIENNA=Object.freeze(ae.fromCssColorString("#A0522D"));ae.SILVER=Object.freeze(ae.fromCssColorString("#C0C0C0"));ae.SKYBLUE=Object.freeze(ae.fromCssColorString("#87CEEB"));ae.SLATEBLUE=Object.freeze(ae.fromCssColorString("#6A5ACD"));ae.SLATEGRAY=Object.freeze(ae.fromCssColorString("#708090"));ae.SLATEGREY=ae.SLATEGRAY;ae.SNOW=Object.freeze(ae.fromCssColorString("#FFFAFA"));ae.SPRINGGREEN=Object.freeze(ae.fromCssColorString("#00FF7F"));ae.STEELBLUE=Object.freeze(ae.fromCssColorString("#4682B4"));ae.TAN=Object.freeze(ae.fromCssColorString("#D2B48C"));ae.TEAL=Object.freeze(ae.fromCssColorString("#008080"));ae.THISTLE=Object.freeze(ae.fromCssColorString("#D8BFD8"));ae.TOMATO=Object.freeze(ae.fromCssColorString("#FF6347"));ae.TURQUOISE=Object.freeze(ae.fromCssColorString("#40E0D0"));ae.VIOLET=Object.freeze(ae.fromCssColorString("#EE82EE"));ae.WHEAT=Object.freeze(ae.fromCssColorString("#F5DEB3"));ae.WHITE=Object.freeze(ae.fromCssColorString("#FFFFFF"));ae.WHITESMOKE=Object.freeze(ae.fromCssColorString("#F5F5F5"));ae.YELLOW=Object.freeze(ae.fromCssColorString("#FFFF00"));ae.YELLOWGREEN=Object.freeze(ae.fromCssColorString("#9ACD32"));ae.TRANSPARENT=Object.freeze(new ae(0,0,0,0));var U=ae;var HXt=y(C(),1);function NRe(){return!0}function DRe(e,t){t=t??"This object was destroyed, i.e., destroy() was called.";function n(){}for(let i in e)typeof e[i]=="function"&&(e[i]=n);e.isDestroyed=NRe}var me=DRe;var JXt=y(C(),1);function Xd(e,t){e=e??0,this._near=e,t=t??Number.MAX_VALUE,this._far=t}Object.defineProperties(Xd.prototype,{near:{get:function(){return this._near},set:function(e){this._near=e}},far:{get:function(){return this._far},set:function(e){this._far=e}}});Xd.packedLength=2;Xd.pack=function(e,t,n){return n=n??0,t[n++]=e.near,t[n]=e.far,t};Xd.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Xd),n.near=e[t++],n.far=e[t],n};Xd.equals=function(e,t){return e===t||l(e)&&l(t)&&e.near===t.near&&e.far===t.far};Xd.clone=function(e,t){if(l(e))return l(t)||(t=new Xd),t.near=e.near,t.far=e.far,t};Xd.prototype.clone=function(e){return Xd.clone(this,e)};Xd.prototype.equals=function(e){return Xd.equals(this,e)};var Qt=Xd;var $Xt=y(C(),1);function Nu(e,t,n,i){this.near=e??0,this.nearValue=t??0,this.far=n??1,this.farValue=i??0}Nu.clone=function(e,t){if(l(e))return l(t)?(t.near=e.near,t.nearValue=e.nearValue,t.far=e.far,t.farValue=e.farValue,t):new Nu(e.near,e.nearValue,e.far,e.farValue)};Nu.packedLength=4;Nu.pack=function(e,t,n){return n=n??0,t[n++]=e.near,t[n++]=e.nearValue,t[n++]=e.far,t[n]=e.farValue,t};Nu.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Nu),n.near=e[t++],n.nearValue=e[t++],n.far=e[t++],n.farValue=e[t],n};Nu.equals=function(e,t){return e===t||l(e)&&l(t)&&e.near===t.near&&e.nearValue===t.nearValue&&e.far===t.far&&e.farValue===t.farValue};Nu.prototype.clone=function(e){return Nu.clone(this,e)};Nu.prototype.equals=function(e){return Nu.equals(this,e)};var zt=Nu;var t2t=y(C(),1),Oy={NONE:0,CLAMP_TO_GROUND:1,RELATIVE_TO_GROUND:2,CLAMP_TO_TERRAIN:3,RELATIVE_TO_TERRAIN:4,CLAMP_TO_3D_TILE:5,RELATIVE_TO_3D_TILE:6},et=Object.freeze(Oy);function Du(e){return e===Oy.CLAMP_TO_GROUND||e===Oy.CLAMP_TO_3D_TILE||e===Oy.CLAMP_TO_TERRAIN}function D_(e){return e===Oy.RELATIVE_TO_GROUND||e===Oy.RELATIVE_TO_3D_TILE||e===Oy.RELATIVE_TO_TERRAIN}var i2t=y(C(),1),QRe={CENTER:0,LEFT:1,RIGHT:-1},wi=Object.freeze(QRe);var r2t=y(C(),1),URe={CENTER:0,BOTTOM:1,BASELINE:2,TOP:-1},kn=Object.freeze(URe);var a2t=y(C(),1),kRe=Object.freeze({DONE:0,PENDING:1,FAILED:2}),At=kRe;var u2t=y(C(),1);function th(){Ae.throwInstantiationError()}Object.defineProperties(th.prototype,{isConstant:{get:Ae.throwInstantiationError},definitionChanged:{get:Ae.throwInstantiationError}});th.prototype.getValue=Ae.throwInstantiationError;th.prototype.equals=Ae.throwInstantiationError;th.equals=function(e,t){return e===t||l(e)&&e.equals(t)};th.arrayEquals=function(e,t){if(e===t)return!0;if(!l(e)||!l(t)||e.length!==t.length)return!1;let n=e.length;for(let i=0;i-1;o--)r=t[o],l(r._billboard)&&l(r._position)&&s.set(r.id,new kte(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 kte(r)):(CO(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],CO(s.get(r.id),r,a),s.remove(r.id)};function CO(e,t,n){l(e)&&(e.billboard=void 0,n.removeBillboard(t))}var h1=bb;var rin=y(C(),1);var OWt=y(C(),1);var Y2t=y(C(),1);var B2t=y(C(),1);function mVe(e,t){this.start=e??0,this.stop=t??0}var oc=mVe;function _n(e,t){this.center=m.clone(e??m.ZERO),this.radius=t??0}var _O=new m,EO=new m,TO=new m,SO=new m,LO=new m,RO=new m,VO=new m,wa=new m,GO=new m,ZO=new m,BO=new m,wO=new m,hVe=4/3*Z.PI;_n.fromPoints=function(e,t){if(l(t)||(t=new _n),!l(e)||e.length===0)return t.center=m.clone(m.ZERO,t.center),t.radius=0,t;let n=m.clone(e[0],VO),i=m.clone(n,_O),o=m.clone(n,EO),r=m.clone(n,TO),s=m.clone(n,SO),a=m.clone(n,LO),c=m.clone(n,RO),d=e.length,u;for(u=1;us.x&&m.clone(n,s),Fa.y&&m.clone(n,a),Pc.z&&m.clone(n,c)}let h=m.magnitudeSquared(m.subtract(s,i,wa)),p=m.magnitudeSquared(m.subtract(a,o,wa)),g=m.magnitudeSquared(m.subtract(c,r,wa)),f=i,b=s,x=h;p>x&&(x=p,f=o,b=a),g>x&&(x=g,f=r,b=c);let I=GO;I.x=(f.x+b.x)*.5,I.y=(f.y+b.y)*.5,I.z=(f.z+b.z)*.5;let _=m.magnitudeSquared(m.subtract(b,I,wa)),E=Math.sqrt(_),S=ZO;S.x=i.x,S.y=o.y,S.z=r.z;let R=BO;R.x=s.x,R.y=a.y,R.z=c.z;let G=m.midpoint(S,R,wO),B=0;for(u=0;uB&&(B=w);let F=m.magnitudeSquared(m.subtract(n,I,wa));if(F>_){let P=Math.sqrt(F);E=(E+P)*.5,_=E*E;let A=P-E;I.x=(E*I.x+A*n.x)/P,I.y=(E*I.y+A*n.y)/P,I.z=(E*I.z+A*n.z)/P}}return Ec.x&&m.clone(o,c),Ad.y&&m.clone(o,d),Tu.z&&m.clone(o,u)}let g=m.magnitudeSquared(m.subtract(c,r,wa)),f=m.magnitudeSquared(m.subtract(d,s,wa)),b=m.magnitudeSquared(m.subtract(u,a,wa)),x=r,I=c,_=g;f>_&&(_=f,x=s,I=d),b>_&&(_=b,x=a,I=u);let E=GO;E.x=(x.x+I.x)*.5,E.y=(x.y+I.y)*.5,E.z=(x.z+I.z)*.5;let S=m.magnitudeSquared(m.subtract(I,E,wa)),R=Math.sqrt(S),G=ZO;G.x=r.x,G.y=s.y,G.z=a.z;let B=BO;B.x=c.x,B.y=d.y,B.z=u.z;let w=m.midpoint(G,B,wO),F=0;for(p=0;pF&&(F=P);let A=m.magnitudeSquared(m.subtract(o,E,wa));if(A>S){let T=Math.sqrt(A);R=(R+T)*.5,S=R*R;let L=T-R;E.x=(R*E.x+L*o.x)/T,E.y=(R*E.y+L*o.y)/T,E.z=(R*E.z+L*o.z)/T}}return Ra.x&&m.clone(i,a),Pc.y&&m.clone(i,c),Ad.z&&m.clone(i,d)}let p=m.magnitudeSquared(m.subtract(a,o,wa)),g=m.magnitudeSquared(m.subtract(c,r,wa)),f=m.magnitudeSquared(m.subtract(d,s,wa)),b=o,x=a,I=p;g>I&&(I=g,b=r,x=c),f>I&&(I=f,b=s,x=d);let _=GO;_.x=(b.x+x.x)*.5,_.y=(b.y+x.y)*.5,_.z=(b.z+x.z)*.5;let E=m.magnitudeSquared(m.subtract(x,_,wa)),S=Math.sqrt(E),R=ZO;R.x=o.x,R.y=r.y,R.z=s.z;let G=BO;G.x=a.x,G.y=c.y,G.z=d.z;let B=m.midpoint(R,G,wO),w=0;for(h=0;hw&&(w=F);let P=m.magnitudeSquared(m.subtract(i,_,wa));if(P>E){let A=Math.sqrt(P);S=(S+A)*.5,E=S*S;let T=A-S;_.x=(S*_.x+T*i.x)/A,_.y=(S*_.y+T*i.y)/A,_.z=(S*_.z+T*i.z)/A}}return S=c+s)return e.clone(n),n;if(s>=c+o)return t.clone(n),n;let d=(o+c+s)*.5,u=m.multiplyByScalar(a,(-o+d)/c,EVe);return m.add(u,i,u),m.clone(u,n.center),n.radius=d,n};var TVe=new m;_n.expand=function(e,t,n){n=_n.clone(e,n);let i=m.magnitude(m.subtract(t,n.center,TVe));return i>n.radius&&(n.radius=i),n};_n.intersectPlane=function(e,t){let n=e.center,i=e.radius,o=t.normal,r=m.dot(o,n)+t.distance;return r<-i?on.OUTSIDE:r{e.onmessage=function(o){let r=o.data.array,s=l(r)&&r[0]===t;i(s),e.terminate(),Xa._canTransferArrayBuffer=s}})}return Xa._canTransferArrayBuffer}var PO=new Ce;function FO(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 MO(e){let t=new ane.default(e),n=t.scheme().length!==0&&t.fragment().length===0,i=e.replace(/\.js$/,""),o={},r,s;if(hb(e))s=e;else if(!n){let a=hn(`${Xa._workerModulePrefix}/${i}.js`);hb(a)&&(s=a)}if(s){let a=`import "${s}";`;return r=FO(a),o.type="module",new Worker(r,o)}if(!n&&typeof CESIUM_WORKERS<"u"){let a=` importScripts("${FO(CESIUM_WORKERS)}"); CesiumWorkers["${i}"](); `;return r=FO(a),new Worker(r,o)}if(r=e,n||(r=hn(`${Xa._workerModulePrefix+i}.js`)),!Ht.supportsEsmWebWorkers())throw new de("This browser is not supported. Please update your browser to continue.");return o.type="module",new Worker(r,o)}async function aGe(e,t){let n={modulePath:void 0,wasmBinaryFile:void 0,wasmBinary:void 0};if(!Ht.supportsWebAssembly()){if(!l(t.fallbackModulePath))throw new de(`This browser does not support Web Assembly, and no backup module was provided for ${e._workerPath}`);return n.modulePath=hn(t.fallbackModulePath),n}n.wasmBinaryFile=hn(t.wasmBinaryFile);let i=await Ve.fetchArrayBuffer({url:n.wasmBinaryFile});return n.wasmBinary=i,n}function Xa(e,t){this._workerPath=e,this._maximumActiveTasks=t??Number.POSITIVE_INFINITY,this._activeTasks=0,this._nextID=0,this._webAssemblyPromise=void 0}var cGe=(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 de(r.error.message),s.stack=r.error.stack):s.name==="DeveloperError"?(s=new Ae(r.error.message),s.stack=r.error.stack):s.name==="Error"&&(s=new Error(r.error.message),s.stack=r.error.stack),PO.raiseEvent(s),i(s)}else PO.raiseEvent(),n(r.result);e.removeEventListener("message",o)}};return o},lGe=[];async function dGe(e,t,n){let i=await Promise.resolve(cne());l(n)?i||(n.length=0):n=lGe;let o=e._nextID++,r=new Promise((s,a)=>{e._worker.addEventListener("message",cGe(e._worker,o,s,a))});return e._worker.postMessage({id:o,baseUrl:hn.getCesiumBaseUrl().url,parameters:t,canTransferArrayBuffer:i},n),r}async function uGe(e,t,n){++e._activeTasks;try{let i=await dGe(e,t,n);return--e._activeTasks,i}catch(i){throw--e._activeTasks,i}}Xa.prototype.scheduleTask=function(e,t){if(l(this._worker)||(this._worker=MO(this._workerPath)),!(this._activeTasks>=this._maximumActiveTasks))return uGe(this,e,t)};Xa.prototype.initWebAssemblyModule=async function(e){if(l(this._webAssemblyPromise))return this._webAssemblyPromise;let t=async()=>{let n=this._worker=MO(this._workerPath),i=await aGe(this,e),o=await Promise.resolve(cne()),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 de("Could not configure wasm module"))}});return n.postMessage({canTransferArrayBuffer:o,parameters:{webAssemblyConfig:i}},r),a};return this._webAssemblyPromise=t(),this._webAssemblyPromise};Xa.prototype.isDestroyed=function(){return!1};Xa.prototype.destroy=function(){return l(this._worker)&&this._worker.terminate(),me(this)};Xa.taskCompletedEvent=PO;Xa._defaultWorkerModulePrefix="Workers/";Xa._workerModulePrefix=Xa._defaultWorkerModulePrefix;Xa._canTransferArrayBuffer=void 0;var hi=Xa;function jp(){}jp._transcodeTaskProcessor=new hi("transcodeKTX2",Number.POSITIVE_INFINITY);jp._readyPromise=void 0;function mGe(){let e=jp._transcodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/basis_transcoder.wasm"}).then(function(t){if(t)return jp._transcodeTaskProcessor;throw new de("KTX2 transcoder could not be initialized.")});jp._readyPromise=e}jp.transcode=function(e,t){return l(jp._readyPromise)||mGe(),jp._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^-(e&1)}wo.zigZagDeltaDecode=function(e,t,n){let i=e.length,o=0,r=0,s=0;for(let a=0;a>11,u=c>>5&o,h=c&i,p=3*a;t[p]=d*r,t[p+1]=u*s,t[p+2]=h*r}return t};var Mn=wo;var cMt=y(C(),1);var fne=new m,pne=new m,Ane=new m;function hGe(e,t,n,i,o){l(o)||(o=new m);let r,s,a,c,d,u,h,p;if(l(t.z)){if(m.equalsEpsilon(e,t,Z.EPSILON14))return m.clone(m.UNIT_X,o);if(m.equalsEpsilon(e,n,Z.EPSILON14))return m.clone(m.UNIT_Y,o);if(m.equalsEpsilon(e,i,Z.EPSILON14))return m.clone(m.UNIT_Z,o);r=m.subtract(n,t,fne),s=m.subtract(i,t,pne),a=m.subtract(e,t,Ane),c=m.dot(r,r),d=m.dot(r,s),u=m.dot(r,a),h=m.dot(s,s),p=m.dot(s,a)}else{if(D.equalsEpsilon(e,t,Z.EPSILON14))return m.clone(m.UNIT_X,o);if(D.equalsEpsilon(e,n,Z.EPSILON14))return m.clone(m.UNIT_Y,o);if(D.equalsEpsilon(e,i,Z.EPSILON14))return m.clone(m.UNIT_Z,o);r=D.subtract(n,t,fne),s=D.subtract(i,t,pne),a=D.subtract(e,t,Ane),c=D.dot(r,r),d=D.dot(r,s),u=D.dot(r,a),h=D.dot(s,s),p=D.dot(s,a)}o.y=h*u-d*p,o.z=c*p-d*u;let g=c*h-d*d;if(g!==0)return o.y/=g,o.z/=g,o.x=1-o.y-o.z,o}var Hy=hGe;var mMt=y(C(),1);function Zf(){this.high=m.clone(m.ZERO),this.low=m.clone(m.ZERO)}Zf.encode=function(e,t){l(t)||(t={high:0,low:0});let n;return e>=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 qp={high:0,low:0};Zf.fromCartesian=function(e,t){l(t)||(t=new Zf);let n=t.high,i=t.low;return Zf.encode(e.x,qp),n.x=qp.high,i.x=qp.low,Zf.encode(e.y,qp),n.y=qp.high,i.y=qp.low,Zf.encode(e.z,qp),n.z=qp.high,i.z=qp.low,t};var DO=new Zf;Zf.writeElements=function(e,t,n){Zf.fromCartesian(e,DO);let i=DO.high,o=DO.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 ni=Zf;var gMt=y(C(),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>=Z.SIXTY_FOUR_KILOBYTES?new Uint32Array(t):new Uint16Array(t)};ca.createTypedArrayFromArrayBuffer=function(e,t,n,i){return e>=Z.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};var Me=Object.freeze(ca);var UMt=y(C(),1);var CMt=y(C(),1);var QO={};QO.computeDiscriminant=function(e,t,n){return t*t-4*e*n};function gne(e,t,n){let i=e+t;return Z.sign(e)!==Z.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 rl=QO;var RMt=y(C(),1);var _Mt=y(C(),1);var kO={};kO.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 UO(e,t,n,i){let o=e,r=t/3,s=n/3,a=i,c=o*s,d=r*a,u=r*r,h=s*s,p=o*s-u,g=o*a-r*s,f=r*a-h,b=4*p*f-g*g,x,I;if(b<0){let O,H,ee;u*d>=c*h?(O=o,H=p,ee=-2*r*p+o*g):(O=a,H=f,ee=-a*g+2*s*f);let te=-(ee<0?-1:1)*Math.abs(O)*Math.sqrt(-b);I=-ee+te;let q=I/2,pe=q<0?-Math.pow(-q,1/3):Math.pow(q,1/3),ye=I===te?-pe:-H/pe;return x=H<=0?pe+ye:-ee/(pe*pe+ye*ye+H),u*d>=c*h?[(x-r)/o]:[-a/(x+s)]}let _=p,E=-2*r*p+o*g,S=f,R=-a*g+2*s*f,G=Math.sqrt(b),B=Math.sqrt(3)/2,w=Math.abs(Math.atan2(o*G,-E)/3);x=2*Math.sqrt(-_);let F=Math.cos(w);I=x*F;let P=x*(-F/2-B*Math.sin(w)),A=I+P>2*r?I-r:P-r,T=o,L=A/T;w=Math.abs(Math.atan2(a*G,-R)/3),x=2*Math.sqrt(-S),F=Math.cos(w),I=x*F,P=x*(-F/2-B*Math.sin(w));let V=-a,W=I+P<2*s?I+s:P+s,M=V/W,Q=T*W,N=-A*W-T*V,k=A*V,v=(s*N-r*k)/(-r*N+s*Q);return L<=v?L<=M?v<=M?[L,v,M]:[L,M,v]:[M,L,v]:L<=M?[v,L,M]:v<=M?[v,M,L]:[M,v,L]}kO.computeRealRoots=function(e,t,n,i){let o,r;if(e===0)return rl.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=rl.computeRealRoots(e,0,n),o.Length===0?[0]:[o[0],0,o[1]];return UO(e,0,n,i)}else{if(n===0)return i===0?(r=-t/e,r<0?[r,0,0]:[0,0,r]):UO(e,t,0,i);if(i===0)return o=rl.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 UO(e,t,n,i)};var zy=kO;var YO={};YO.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,h=i*i,p=h*i,g=o*o,f=g*o;return a*d*h-4*c*p-4*e*u*h+18*e*t*n*p-27*r*h*h+256*s*f+o*(18*c*n*i-4*a*u+16*e*d*d-80*e*t*d*i-6*e*a*h+144*r*n*h)+g*(144*e*a*n-27*a*a-128*r*d-192*r*t*i)};function ih(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=zy.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&&g>=0){let b=Math.sqrt(p),x=Math.sqrt(g);return[d-x,d-b,d+b,d+x]}else{if(p>=0&&g<0)return f=Math.sqrt(p),[d-f,d+f];if(p<0&&g>=0)return f=Math.sqrt(g),[d-f,d+f]}}return[]}else if(u>0){let h=Math.sqrt(u),p=(r+u-s/h)/2,g=(r+u+s/h)/2,f=rl.computeRealRoots(1,h,p),b=rl.computeRealRoots(1,-h,g);return f.length!==0?(f[0]+=d,f[1]+=d,b.length!==0?(b[0]+=d,b[1]+=d,f[1]<=b[0]?[f[0],f[1],b[0],b[1]]:b[1]<=f[0]?[b[0],b[1],f[0],f[1]]:f[0]>=b[0]&&f[1]<=b[1]?[b[0],f[0],f[1],b[1]]:b[0]>=f[0]&&b[1]<=f[1]?[f[0],b[0],b[1],f[1]]:f[0]>b[0]&&f[0]0){let h=u[0],p=t-h,g=p*p,f=e/2,b=p/2,x=g-4*i,I=g+4*Math.abs(i),_=s-4*h,E=s+4*Math.abs(h),S,R;if(h<0||x*E<_*I){let T=Math.sqrt(_);S=T/2,R=T===0?0:(e*b-n)/T}else{let T=Math.sqrt(x);S=T===0?0:(e*b-n)/T,R=T/2}let G,B;f===0&&S===0?(G=0,B=0):Z.sign(f)===Z.sign(S)?(G=f+S,B=h/G):(B=f-S,G=h/B);let w,F;b===0&&R===0?(w=0,F=0):Z.sign(b)===Z.sign(R)?(w=b+R,F=i/w):(F=b-R,w=i/F);let P=rl.computeRealRoots(1,G,w),A=rl.computeRealRoots(1,B,F);if(P.length!==0)return A.length!==0?P[1]<=A[0]?[P[0],P[1],A[0],A[1]]:A[1]<=P[0]?[A[0],A[1],P[0],P[1]]:P[0]>=A[0]&&P[1]<=A[1]?[A[0],P[0],P[1],A[1]]:A[0]>=P[0]&&A[1]<=P[1]?[P[0],A[0],A[1],P[1]]:P[0]>A[0]&&P[0]u)||(p=m.cross(h,a,yne),f=m.dot(s,p),f<0||g+f>u))return;b=m.dot(c,p)/u}else{if(Math.abs(u)1||(p=m.cross(h,a,yne),f=m.dot(s,p)*x,f<0||g+f>1))return;b=m.dot(c,p)*x}return b};$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 m),m.multiplyByScalar(e.direction,s,r),m.add(e.origin,r,r)};var AGe=new En;$o.lineSegmentTriangle=function(e,t,n,i,o,r,s){let a=AGe;m.clone(e,a.origin),m.subtract(t,e,a.direction),m.normalize(a.direction,a.direction);let c=$o.rayTriangleParametric(a,n,i,o,r);if(!(!l(c)||c<0||c>m.distance(e,t)))return l(s)||(s=new m),m.multiplyByScalar(a.direction,c,s),m.add(a.origin,s,s)};function gGe(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 CGe=new m,xGe=new m;$o.rayEllipsoid=function(e,t){let n=t.oneOverRadii,i=m.multiplyComponents(n,e.origin,CGe),o=m.multiplyComponents(n,e.direction,xGe),r=m.magnitudeSquared(i),s=m.dot(i,o),a,c,d,u,h;if(r>1){if(s>=0)return;let p=s*s;if(a=r-1,c=m.magnitudeSquared(o),d=c*a,pd){u=s*s-d,h=-s+Math.sqrt(u);let f=h/c,b=a/h;return f0?g.push(new m(i,o*F,o*-T)):T!==0?(g.push(new m(i,o*F,o*-T)),g.push(new m(i,o*F,o*T)),++w):g.push(new m(i,o*F,o*T))}return g};var OO=new m,Cne=new m,xne=new m,cD=new m,IGe=new m,_Ge=new $,EGe=new $,TGe=new $,SGe=new $,LGe=new $,Ine=new $,_ne=new $,Ene=new m,RGe=new m,VGe=new ge;$o.grazingAltitudeLocation=function(e,t){let n=e.origin,i=e.direction;if(!m.equals(n,m.ZERO)){let G=t.geodeticSurfaceNormal(n,OO);if(m.dot(i,G)>=0)return n}let o=l(this.rayEllipsoid(e,t)),r=t.transformPositionToScaledSpace(i,OO),s=m.normalize(r,r),a=m.mostOrthogonalAxis(r,cD),c=m.normalize(m.cross(a,s,Cne),Cne),d=m.normalize(m.cross(s,c,xne),xne),u=_Ge;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 h=$.transpose(u,EGe),p=$.fromScale(t.radii,TGe),g=$.fromScale(t.oneOverRadii,SGe),f=LGe;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 b=$.multiply($.multiply(h,g,Ine),f,Ine),x=$.multiply($.multiply(b,p,_ne),u,_ne),I=$.multiplyByVector(b,n,IGe),_=$o.quadraticVectorExpression(x,m.negate(I,OO),0,0,1),E,S,R=_.length;if(R>0){let G=m.clone(m.ZERO,RGe),B=Number.NEGATIVE_INFINITY;for(let F=0;FB&&(B=A,G=m.clone(E,G))}let w=t.cartesianToCartographic(G,VGe);return B=Z.clamp(B,0,1),S=m.magnitude(m.subtract(G,n,cD))*Math.sqrt(1-B*B),S=o?-S:S,w.height=S,t.cartographicToCartesian(w,new m)}};var GGe=new m;$o.lineSegmentPlane=function(e,t,n,i){l(i)||(i=new m);let o=m.subtract(t,e,GGe),r=n.normal,s=m.dot(r,o);if(Math.abs(s)1))return m.multiplyByScalar(o,c,i),m.add(e,i,i),i};$o.trianglePlaneIntersection=function(e,t,n,i){let o=i.normal,r=i.distance,s=m.dot(o,e)+r<0,a=m.dot(o,t)+r<0,c=m.dot(o,n)+r<0,d=0;d+=s?1:0,d+=a?1:0,d+=c?1:0;let u,h;if((d===1||d===2)&&(u=new m,h=new m),d===1){if(s)return $o.lineSegmentPlane(e,t,i,u),$o.lineSegmentPlane(e,n,i,h),{positions:[e,t,n,u,h],indices:[0,3,4,1,2,4,1,4,3]};if(a)return $o.lineSegmentPlane(t,n,i,u),$o.lineSegmentPlane(t,e,i,h),{positions:[e,t,n,u,h],indices:[1,3,4,2,0,4,2,4,3]};if(c)return $o.lineSegmentPlane(n,e,i,u),$o.lineSegmentPlane(n,t,i,h),{positions:[e,t,n,u,h],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,h),{positions:[e,t,n,u,h],indices:[0,1,4,0,4,3,2,3,4]}}else return $o.lineSegmentPlane(n,t,i,u),$o.lineSegmentPlane(e,t,i,h),{positions:[e,t,n,u,h],indices:[2,0,4,2,4,3,1,3,4]};else return $o.lineSegmentPlane(t,e,i,u),$o.lineSegmentPlane(n,e,i,h),{positions:[e,t,n,u,h],indices:[1,2,4,1,4,3,0,3,4]}};var fi=$o;var KMt=y(C(),1);function la(e,t){this.normal=m.clone(e),this.distance=t}la.fromPointNormal=function(e,t,n){let i=-m.dot(t,e);return l(n)?(m.clone(t,n.normal),n.distance=i,n):new la(t,i)};var ZGe=new m;la.fromCartesian4=function(e,t){let n=m.fromCartesian4(e,ZGe),i=e.w;return l(t)?(m.clone(n,t.normal),t.distance=i,t):new la(n,i)};la.getPointDistance=function(e,t){return m.dot(e.normal,t)+e.distance};var BGe=new m;la.projectPointOntoPlane=function(e,t,n){l(n)||(n=new m);let i=la.getPointDistance(e,t),o=m.multiplyByScalar(e.normal,i,BGe);return m.subtract(t,o,n)};var wGe=new X,XGe=new ce,WGe=new m;la.transform=function(e,t,n){let i=e.normal,o=e.distance,r=X.inverseTranspose(t,wGe),s=ce.fromElements(i.x,i.y,i.z,o,XGe);s=X.multiplyByVector(r,s,s);let a=m.fromCartesian4(s,WGe);return s=ce.divideByScalar(s,m.magnitude(a),s),la.fromCartesian4(s,n)};la.clone=function(e,t){return l(t)?(m.clone(e.normal,t.normal),t.distance=e.distance,t):new la(e.normal,e.distance)};la.equals=function(e,t){return e.distance===t.distance&&m.equals(e.normal,t.normal)};la.ORIGIN_XY_PLANE=Object.freeze(new la(m.UNIT_Z,0));la.ORIGIN_YZ_PLANE=Object.freeze(new la(m.UNIT_X,0));la.ORIGIN_ZX_PLANE=Object.freeze(new la(m.UNIT_Y,0));var An=la;var $Mt=y(C(),1);var HO={};HO.calculateACMR=function(e){e=e??Y.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)};HO.tipsify=function(e){e=e??Y.EMPTY_OBJECT;let t=e.indices,n=e.maximumIndex,i=e.cacheSize??24,o;function r(A,T,L,V){for(;T.length>=1;){let W=T[T.length-1];if(T.splice(T.length-1,1),A[W].numLiveTriangles>0)return W}for(;o0)return++o,o-1;++o}return-1}function s(A,T,L,V,W,M,Q){let N=-1,k,v=-1,O=0;for(;Ov||v===-1)&&(v=k,N=H)),++O}return N===-1?r(V,M,A,Q):N}let a=t.length,c=0,d=0,u=t[d],h=a;if(l(n))c=n+1;else{for(;dc&&(c=u),++d,u=t[d];if(c===-1)return 0;++c}let p=[],g;for(g=0;gi&&(E.timeStamp=x,++x),++d}b=s(t,i,I,p,x,_,c)}return G};var L1=HO;var sl={};function pD(e,t,n,i,o){e[t++]=n,e[t++]=i,e[t++]=i,e[t++]=o,e[t++]=o,e[t]=n}function FGe(e){let t=e.length,n=t/3*6,i=Me.createTypedArray(t,n),o=0;for(let r=0;r=3){let n=(t-2)*6,i=Me.createTypedArray(t,n);pD(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=Me.createTypedArray(t,n),o=e[0],r=0;for(let s=1;so&&(o=n[r]);e.indices=L1.tipsify({indices:n,maximumIndex:o,cacheSize:t})}return e};function Lne(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 Ze({componentDatatype:i.componentDatatype,componentsPerAttribute:i.componentsPerAttribute,normalize:i.normalize,values:[]})}return t}function vGe(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=Z.SIXTY_FOUR_KILOBYTES){let i=[],o=[],r=0,s=Lne(e.attributes),a=e.indices,c=a.length,d;e.primitiveType===We.TRIANGLES?d=3:e.primitiveType===We.LINES?d=2:e.primitiveType===We.POINTS&&(d=1);for(let u=0;u=Z.SIXTY_FOUR_KILOBYTES&&(t.push(new pt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV})),i=[],o=[],r=0,s=Lne(e.attributes))}o.length!==0&&t.push(new pt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV}))}else t.push(e);return t};var Rne=new m,NGe=new ge;sl.projectTo2D=function(e,t,n,i,o){let r=e.attributes[t];o=l(o)?o:new Di;let s=o.ellipsoid,a=r.values,c=new Float64Array(a.length),d=0;for(let u=0;ux&&(x=_)}return new pt({attributes:u,indices:f,primitiveType:d,boundingSphere:l(b)?new ue(b,x):void 0})}sl.combineInstances=function(e){let t=[],n=[],i=e.length;for(let r=0;r0&&o.push(jO(t,"geometry")),n.length>0&&(o.push(jO(n,"westHemisphereGeometry")),o.push(jO(n,"eastHemisphereGeometry"))),o};var Uu=new m,R1=new m,O_=new m,H_=new m;sl.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=Z.sign(e.y):s=Z.sign(n.y):o>r?s=Z.sign(t.y):s=Z.sign(n.y);let a=s<0;yb(e,a),yb(t,a),yb(n,a)}var Bne=new m;function ku(e,t,n,i){m.add(e,m.multiplyByScalar(m.subtract(t,e,Bne),e.y/(e.y-t.y),Bne),n),m.clone(n,i),yb(n,!0),yb(i,!1)}var Jy=new m,jy=new m,qy=new m,$y=new m,qO={positions:new Array(7),indices:new Array(9)};function $Ge(e,t,n){if(e.x>=0||t.x>=0||n.x>=0)return;qGe(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=qO.indices;s===1?(a[1]=3,a[2]=4,a[5]=6,a[7]=6,a[8]=5,i?(ku(e,t,Jy,qy),ku(e,n,jy,$y),a[0]=0,a[3]=1,a[4]=2,a[6]=1):o?(ku(t,n,Jy,qy),ku(t,e,jy,$y),a[0]=1,a[3]=2,a[4]=0,a[6]=2):r&&(ku(n,e,Jy,qy),ku(n,t,jy,$y),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||(ku(n,e,Jy,qy),ku(n,t,jy,$y),a[0]=0,a[1]=1,a[3]=0,a[6]=2):(ku(t,n,Jy,qy),ku(t,e,jy,$y),a[0]=2,a[1]=0,a[3]=2,a[6]=1):(ku(e,t,Jy,qy),ku(e,n,jy,$y),a[0]=1,a[1]=2,a[3]=1,a[6]=0));let c=qO.positions;return c[0]=e,c[1]=t,c[2]=n,c.length=3,(s===1||s===2)&&(c[3]=Jy,c[4]=jy,c[5]=qy,c[6]=$y,c.length=7),qO}function wne(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=pt.computeNumberOfVertices(e);return e.indices=Me.createTypedArray(i,e.indices),t&&(e.boundingSphere=ue.fromVertices(n.position.values)),e}function K_(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 Ze({componentDatatype:o.componentDatatype,componentsPerAttribute:o.componentsPerAttribute,normalize:o.normalize,values:[]})}return new pt({attributes:n,indices:[],primitiveType:e.primitiveType})}function nH(e,t,n){let i=l(e.geometry.boundingSphere);t=wne(t,i),n=wne(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 iH(e,t){let n=new e,i=new e,o=new e;return function(r,s,a,c,d,u,h,p){let g=e.fromArray(d,r*t,n),f=e.fromArray(d,s*t,i),b=e.fromArray(d,a*t,o);e.multiplyByScalar(g,c.x,g),e.multiplyByScalar(f,c.y,f),e.multiplyByScalar(b,c.z,b);let x=e.add(g,f,g);e.add(x,b,x),p&&e.normalize(x,x),e.pack(x,u,h*t)}}var eZe=iH(ce,4),fD=iH(m,3),vne=iH(D,2),tZe=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>Z.EPSILON6?1:0},G1=new m,$O=new m,eH=new m,nZe=new m;function mD(e,t,n,i,o,r,s,a,c,d,u,h,p,g,f,b){if(!l(r)&&!l(s)&&!l(a)&&!l(c)&&!l(d)&&g===0)return;let x=m.fromArray(o,e*3,G1),I=m.fromArray(o,t*3,$O),_=m.fromArray(o,n*3,eH),E=Hy(i,x,I,_,nZe);if(l(E)){if(l(r)&&fD(e,t,n,E,r,h.normal.values,b,!0),l(d)){let S=m.fromArray(d,e*3,G1),R=m.fromArray(d,t*3,$O),G=m.fromArray(d,n*3,eH);m.multiplyByScalar(S,E.x,S),m.multiplyByScalar(R,E.y,R),m.multiplyByScalar(G,E.z,G);let B;!m.equals(S,m.ZERO)||!m.equals(R,m.ZERO)||!m.equals(G,m.ZERO)?(B=m.add(S,R,S),m.add(B,G,B),m.normalize(B,B)):(B=G1,B.x=0,B.y=0,B.z=0),m.pack(B,h.extrudeDirection.values,b*3)}if(l(u)&&tZe(e,t,n,E,u,h.applyOffset.values,b),l(s)&&fD(e,t,n,E,s,h.tangent.values,b,!0),l(a)&&fD(e,t,n,E,a,h.bitangent.values,b,!0),l(c)&&vne(e,t,n,E,c,h.st.values,b),g>0)for(let S=0;S3){let V=L.positions,W=L.indices,M=W.length;for(let Q=0;Q0)continue;let c=m.unpack(i,s,Qne);(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]):m.pack(a,i,s));let d=m.unpack(o,s,tH);(a.y<0&&d.y>0||a.y>0&&d.y<0)&&(s+30||ue.intersectPlane(n,An.ORIGIN_ZX_PLANE)!==on.INTERSECTING))return e;if(t.geometryType!==Qu.NONE)switch(t.geometryType){case Qu.POLYLINES:mZe(e);break;case Qu.TRIANGLES:Xne(e);break;case Qu.LINES:Wne(e);break}else jGe(t),t.primitiveType===We.TRIANGLES?Xne(e):t.primitiveType===We.LINES&&Wne(e);return e};var Yn=sl;var Zvt=y(C(),1);var Lvt=y(C(),1);var Vi={UNSIGNED_BYTE:ne.UNSIGNED_BYTE,UNSIGNED_SHORT:ne.UNSIGNED_SHORT,UNSIGNED_INT:ne.UNSIGNED_INT,FLOAT:ne.FLOAT,HALF_FLOAT:ne.HALF_FLOAT_OES,UNSIGNED_INT_24_8:ne.UNSIGNED_INT_24_8,UNSIGNED_SHORT_4_4_4_4:ne.UNSIGNED_SHORT_4_4_4_4,UNSIGNED_SHORT_5_5_5_1:ne.UNSIGNED_SHORT_5_5_5_1,UNSIGNED_SHORT_5_6_5:ne.UNSIGNED_SHORT_5_6_5};Vi.toWebGLConstant=function(e,t){switch(e){case Vi.UNSIGNED_BYTE:return ne.UNSIGNED_BYTE;case Vi.UNSIGNED_SHORT:return ne.UNSIGNED_SHORT;case Vi.UNSIGNED_INT:return ne.UNSIGNED_INT;case Vi.FLOAT:return ne.FLOAT;case Vi.HALF_FLOAT:return t.webgl2?ne.HALF_FLOAT:ne.HALF_FLOAT_OES;case Vi.UNSIGNED_INT_24_8:return ne.UNSIGNED_INT_24_8;case Vi.UNSIGNED_SHORT_4_4_4_4:return ne.UNSIGNED_SHORT_4_4_4_4;case Vi.UNSIGNED_SHORT_5_5_5_1:return ne.UNSIGNED_SHORT_5_5_5_1;case Vi.UNSIGNED_SHORT_5_6_5:return Vi.UNSIGNED_SHORT_5_6_5}};Vi.isPacked=function(e){return e===Vi.UNSIGNED_INT_24_8||e===Vi.UNSIGNED_SHORT_4_4_4_4||e===Vi.UNSIGNED_SHORT_5_5_5_1||e===Vi.UNSIGNED_SHORT_5_6_5};Vi.sizeInBytes=function(e){switch(e){case Vi.UNSIGNED_BYTE:return 1;case Vi.UNSIGNED_SHORT:case Vi.UNSIGNED_SHORT_4_4_4_4:case Vi.UNSIGNED_SHORT_5_5_5_1:case Vi.UNSIGNED_SHORT_5_6_5:case Vi.HALF_FLOAT:return 2;case Vi.UNSIGNED_INT:case Vi.FLOAT:case Vi.UNSIGNED_INT_24_8:return 4}};Vi.validate=function(e){return e===Vi.UNSIGNED_BYTE||e===Vi.UNSIGNED_SHORT||e===Vi.UNSIGNED_INT||e===Vi.FLOAT||e===Vi.HALF_FLOAT||e===Vi.UNSIGNED_INT_24_8||e===Vi.UNSIGNED_SHORT_4_4_4_4||e===Vi.UNSIGNED_SHORT_5_5_5_1||e===Vi.UNSIGNED_SHORT_5_6_5};Vi.getTypedArrayConstructor=function(e){let t=Vi.sizeInBytes(e);return t===Uint8Array.BYTES_PER_ELEMENT?Uint8Array:t===Uint16Array.BYTES_PER_ELEMENT?Uint16Array:t===Float32Array.BYTES_PER_ELEMENT&&e===Vi.FLOAT?Float32Array:Uint32Array};var Ye=Object.freeze(Vi);var $e={DEPTH_COMPONENT:ne.DEPTH_COMPONENT,DEPTH_STENCIL:ne.DEPTH_STENCIL,ALPHA:ne.ALPHA,RED:ne.RED,RG:ne.RG,RGB:ne.RGB,RGBA:ne.RGBA,RED_INTEGER:ne.RED_INTEGER,RG_INTEGER:ne.RG_INTEGER,RGB_INTEGER:ne.RGB_INTEGER,RGBA_INTEGER:ne.RGBA_INTEGER,LUMINANCE:ne.LUMINANCE,LUMINANCE_ALPHA:ne.LUMINANCE_ALPHA,RGB_DXT1:ne.COMPRESSED_RGB_S3TC_DXT1_EXT,RGBA_DXT1:ne.COMPRESSED_RGBA_S3TC_DXT1_EXT,RGBA_DXT3:ne.COMPRESSED_RGBA_S3TC_DXT3_EXT,RGBA_DXT5:ne.COMPRESSED_RGBA_S3TC_DXT5_EXT,RGB_PVRTC_4BPPV1:ne.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,RGB_PVRTC_2BPPV1:ne.COMPRESSED_RGB_PVRTC_2BPPV1_IMG,RGBA_PVRTC_4BPPV1:ne.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,RGBA_PVRTC_2BPPV1:ne.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,RGBA_ASTC:ne.COMPRESSED_RGBA_ASTC_4x4_WEBGL,RGB_ETC1:ne.COMPRESSED_RGB_ETC1_WEBGL,RGB8_ETC2:ne.COMPRESSED_RGB8_ETC2,RGBA8_ETC2_EAC:ne.COMPRESSED_RGBA8_ETC2_EAC,RGBA_BC7:ne.COMPRESSED_RGBA_BPTC_UNORM};$e.componentsLength=function(e){switch(e){case $e.RGB:case $e.RGB_INTEGER:return 3;case $e.RGBA:case $e.RGBA_INTEGER:return 4;case $e.LUMINANCE_ALPHA:case $e.RG:case $e.RG_INTEGER:return 2;case $e.ALPHA:case $e.RED:case $e.RED_INTEGER:case $e.LUMINANCE:return 1;default:return 1}};$e.validate=function(e){return e===$e.DEPTH_COMPONENT||e===$e.DEPTH_STENCIL||e===$e.ALPHA||e===$e.RED||e===$e.RG||e===$e.RGB||e===$e.RGBA||e===$e.RED_INTEGER||e===$e.RG_INTEGER||e===$e.RGB_INTEGER||e===$e.RGBA_INTEGER||e===$e.LUMINANCE||e===$e.LUMINANCE_ALPHA||e===$e.RGB_DXT1||e===$e.RGBA_DXT1||e===$e.RGBA_DXT3||e===$e.RGBA_DXT5||e===$e.RGB_PVRTC_4BPPV1||e===$e.RGB_PVRTC_2BPPV1||e===$e.RGBA_PVRTC_4BPPV1||e===$e.RGBA_PVRTC_2BPPV1||e===$e.RGBA_ASTC||e===$e.RGB_ETC1||e===$e.RGB8_ETC2||e===$e.RGBA8_ETC2_EAC||e===$e.RGBA_BC7};$e.isColorFormat=function(e){return e===$e.RED||e===$e.ALPHA||e===$e.RGB||e===$e.RGBA||e===$e.LUMINANCE||e===$e.LUMINANCE_ALPHA};$e.isDepthFormat=function(e){return e===$e.DEPTH_COMPONENT||e===$e.DEPTH_STENCIL};$e.isCompressedFormat=function(e){return e===$e.RGB_DXT1||e===$e.RGBA_DXT1||e===$e.RGBA_DXT3||e===$e.RGBA_DXT5||e===$e.RGB_PVRTC_4BPPV1||e===$e.RGB_PVRTC_2BPPV1||e===$e.RGBA_PVRTC_4BPPV1||e===$e.RGBA_PVRTC_2BPPV1||e===$e.RGBA_ASTC||e===$e.RGB_ETC1||e===$e.RGB8_ETC2||e===$e.RGBA8_ETC2_EAC||e===$e.RGBA_BC7};$e.isDXTFormat=function(e){return e===$e.RGB_DXT1||e===$e.RGBA_DXT1||e===$e.RGBA_DXT3||e===$e.RGBA_DXT5};$e.isPVRTCFormat=function(e){return e===$e.RGB_PVRTC_4BPPV1||e===$e.RGB_PVRTC_2BPPV1||e===$e.RGBA_PVRTC_4BPPV1||e===$e.RGBA_PVRTC_2BPPV1};$e.isASTCFormat=function(e){return e===$e.RGBA_ASTC};$e.isETC1Format=function(e){return e===$e.RGB_ETC1};$e.isETC2Format=function(e){return e===$e.RGB8_ETC2||e===$e.RGBA8_ETC2_EAC};$e.isBC7Format=function(e){return e===$e.RGBA_BC7};$e.compressedTextureSizeInBytes=function(e,t,n){switch(e){case $e.RGB_DXT1:case $e.RGBA_DXT1:case $e.RGB_ETC1:case $e.RGB8_ETC2:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*8;case $e.RGBA_DXT3:case $e.RGBA_DXT5:case $e.RGBA_ASTC:case $e.RGBA8_ETC2_EAC:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*16;case $e.RGB_PVRTC_4BPPV1:case $e.RGBA_PVRTC_4BPPV1:return Math.floor((Math.max(t,8)*Math.max(n,8)*4+7)/8);case $e.RGB_PVRTC_2BPPV1:case $e.RGBA_PVRTC_2BPPV1:return Math.floor((Math.max(t,16)*Math.max(n,8)*2+7)/8);case $e.RGBA_BC7:return Math.ceil(t/4)*Math.ceil(n/4)*16;default:return 0}};$e.textureSizeInBytes=function(e,t,n,i){let o=$e.componentsLength(e);return Ye.isPacked(t)&&(o=1),o*Ye.sizeInBytes(t)*n*i};$e.texture3DSizeInBytes=function(e,t,n,i,o){let r=$e.componentsLength(e);return Ye.isPacked(t)&&(r=1),r*Ye.sizeInBytes(t)*n*i*o};$e.alignmentInBytes=function(e,t,n){let i=$e.textureSizeInBytes(e,t,n,1)%4;return i===0?4:i===2?2:1};$e.createTypedArray=function(e,t,n,i){let o=Ye.getTypedArrayConstructor(t),r=$e.componentsLength(e)*n*i;return new o(r)};$e.flipY=function(e,t,n,i,o){if(o===1)return e;let r=$e.createTypedArray(t,n,i,o),s=$e.componentsLength(t),a=i*s;for(let c=0;c0&&(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 kne(e,t,n){for(let i=0;i0&&(c=!0),l(s[r].value)&&(d=!0);let h;t.vertexArrayObject&&(h=t.glCreateVertexArray(),t.glBindVertexArray(h),kne(n,s,o),t.glBindVertexArray(null)),this._numberOfVertices=a,this._hasInstancedAttributes=c,this._hasConstantAttributes=d,this._context=t,this._gl=n,this._vao=h,this._attributes=s,this._indexBuffer=o}function Une(e){return e.values.length/e.componentsPerAttribute}function fZe(e){return J.getSizeInBytes(e.componentDatatype)*e.componentsPerAttribute}function pZe(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=Une(e[o[0]]),t=1;t0){let d=J.getSizeInBytes(e[o[0]].componentDatatype),u=a%d;u!==0&&(a+=d-u);let h=r*a,p=new ArrayBuffer(h),g={};for(t=0;t=Z.SIXTY_FOUR_KILOBYTES&&t.elementIndexUint?p=It.createIndexBuffer({context:t,typedArray:new Uint32Array(g),usage:i,indexDatatype:Me.UNSIGNED_INT}):p=It.createIndexBuffer({context:t,typedArray:new Uint16Array(g),usage:i,indexDatatype:Me.UNSIGNED_SHORT})),new $p({context:t,attributes:u,indexBuffer:p})};Object.defineProperties($p.prototype,{numberOfAttributes:{get:function(){return this._attributes.length}},numberOfVertices:{get:function(){return this._numberOfVertices}},indexBuffer:{get:function(){return this._indexBuffer}}});$p.prototype.getAttribute=function(e){return this._attributes[e]};function AZe(e){let t=e._context,n=e._hasInstancedAttributes;if(!n&&!t._previousDrawInstanced)return;t._previousDrawInstanced=n;let i=t._vertexAttribDivisors,o=e._attributes,r=Kt.maximumVertexAttributes,s;if(n){let a=o.length;for(s=0;s0&&(t.glVertexAttribDivisor(s,0),i[s]=0)}function gZe(e,t){let n=e._attributes,i=n.length;for(let o=0;o 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 E9t=y(C(),1),v1=`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 S9t=y(C(),1),N1=`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 R9t=y(C(),1),D1=`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 G9t=y(C(),1),Q1=`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 B9t=y(C(),1),U1=`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 X9t=y(C(),1),k1=`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 F9t=y(C(),1),Y1=`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 M9t=y(C(),1),O1=`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(0.0, 1.0, glow) * color.a; fragColor = czm_gammaCorrect(fragColor); material.emission = fragColor.rgb; material.alpha = fragColor.a; return material; } `;var N9t=y(C(),1),H1=`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 Q9t=y(C(),1),z1=`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 k9t=y(C(),1),K1=`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 O9t=y(C(),1),J1=`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 z9t=y(C(),1),j1=`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 J9t=y(C(),1),q1=`// 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 Je(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??en.LINEAR,this._magnificationFilter=e.magnificationFilter??pi.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,_Ze(e,this),Object.defineProperties(this,{type:{value:this.type,writable:!1}}),l(Je._uniformList[this.type])||(Je._uniformList[this.type]=Object.keys(this._uniforms))}Je._uniformList={};Je.fromType=function(e,t){let n=new Je({fabric:{type:e}});if(l(t))for(let i in t)t.hasOwnProperty(i)&&(n.uniforms[i]=t[i]);return n};Je.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 VZe(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&&RZe(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 jne={mat2:Qi,mat3:$,mat4:X},GZe=/\.ktx2$/i;function ZZe(e){let t;return function(n,i){let o=n.uniforms,r=o[e],s=t!==r,a=!l(r)||r===Je.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 p=new sn({minificationFilter:n._minificationFilter,magnificationFilter:n._magnificationFilter});c=new Wt({context:i,source:r,sampler:p}),n._textures[e]=c;return}c.copyFrom({source:r})}else l(c)||(n._textures[e]=i.defaultTexture);return}if(r instanceof Wt&&r!==c){n._texturePaths[e]=void 0;let p=n._textures[e];l(p)&&p!==n._defaultTexture&&p.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),l(c)||(n._texturePaths[e]=void 0,c=n._textures[e]=n._defaultTexture,d=`${e}Dimensions`,o.hasOwnProperty(d)&&(u=o[d],u.x=c._width,u.y=c._height)),a)return;let h=r instanceof Ve;if(!l(n._texturePaths[e])||h&&r.url!==n._texturePaths[e].url||!h&&r!==n._texturePaths[e]){if(typeof r=="string"||h){let p=h?r:Ve.createIfNeeded(r),g;GZe.test(p.url)?g=Kl(p.url):g=p.fetchImage(),Promise.resolve(g).then(function(f){n._loadedImages.push({id:e,image:f})}).catch(function(){l(c)&&c!==n._defaultTexture&&c.destroy(),n._textures[e]=n._defaultTexture})}else(r instanceof HTMLCanvasElement||r instanceof HTMLImageElement||r instanceof ImageBitmap||r instanceof OffscreenCanvas)&&n._loadedImages.push({id:e,image:r});n._texturePaths[e]=r}}}function BZe(e){return function(t,n){let i=t.uniforms[e];if(i instanceof Pr){let r=t._textures[e];r!==t._defaultTexture&&r.destroy(),t._texturePaths[e]=void 0,t._textures[e]=i;return}if(l(t._textures[e])||(t._texturePaths[e]=void 0,t._textures[e]=n.defaultCubeMap),i===Je.DefaultCubeMapId)return;let o=i.positiveX+i.negativeX+i.positiveY+i.negativeY+i.positiveZ+i.negativeZ;if(o!==t._texturePaths[e]){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()];Promise.all(r).then(function(s){t._loadedCubeMaps.push({id:e,images:s})}),t._texturePaths[e]=o}}}function wZe(e){let t=e._template.uniforms;for(let n in t)t.hasOwnProperty(n)&&qne(e,n)}function qne(e,t){let n=e._strict,i=e._template.uniforms,o=i[t],r=XZe(o),s;if(r==="channels")s=$1(e,t,o,!1);else{if(r==="sampler2D"){let d=`${t}Dimensions`;FZe(e,d)>0&&(i[d]={type:"ivec3",x:1,y:1},qne(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=$1(e,t,c),e.uniforms[t]=o,r==="sampler2D")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(ZZe(t));else if(r==="samplerCube")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(BZe(t));else if(r.indexOf("mat")!==-1){let d=new jne[r];e._uniforms[c]=function(){return jne[r].fromColumnMajorArray(e.uniforms[t],d)}}else e._uniforms[c]=function(){return e.uniforms[t]}}}function XZe(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===Je.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 WZe(e){let t=e._strict,n=e._template.materials;for(let i in n)if(n.hasOwnProperty(i)){let o=new Je({strict:t,fabric:n[i],count:e._count});e._count=o._count,e._uniforms=Lt(e._uniforms,o._uniforms,!0),e.materials[i]=o,e._translucentFunctions=e._translucentFunctions.concat(o._translucentFunctions);let r="czm_getMaterial",s=`${r}_${e._count++}`;$1(o,r,s),e.shaderSource=o.shaderSource+e.shaderSource;let a=`${s}(materialInput)`,c=$1(e,i,a)}}function $1(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 FZe(e,t,n){return $1(e,t,t,n)}Je._materialCache={_materials:{},addMaterial:function(e,t){this._materials[e]=t},getMaterial:function(e){return this._materials[e]}};Je.DefaultImageId="czm_defaultImage";Je.DefaultCubeMapId="czm_defaultCubeMap";Je.ColorType="Color";Je._materialCache.addMaterial(Je.ColorType,{fabric:{type:Je.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}});Je.ImageType="Image";Je._materialCache.addMaterial(Je.ImageType,{fabric:{type:Je.ImageType,uniforms:{image:Je.DefaultImageId,repeat:new D(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}});Je.DiffuseMapType="DiffuseMap";Je._materialCache.addMaterial(Je.DiffuseMapType,{fabric:{type:Je.DiffuseMapType,uniforms:{image:Je.DefaultImageId,channels:"rgb",repeat:new D(1,1)},components:{diffuse:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});Je.AlphaMapType="AlphaMap";Je._materialCache.addMaterial(Je.AlphaMapType,{fabric:{type:Je.AlphaMapType,uniforms:{image:Je.DefaultImageId,channel:"a",repeat:new D(1,1)},components:{alpha:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!0});Je.SpecularMapType="SpecularMap";Je._materialCache.addMaterial(Je.SpecularMapType,{fabric:{type:Je.SpecularMapType,uniforms:{image:Je.DefaultImageId,channel:"r",repeat:new D(1,1)},components:{specular:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!1});Je.EmissionMapType="EmissionMap";Je._materialCache.addMaterial(Je.EmissionMapType,{fabric:{type:Je.EmissionMapType,uniforms:{image:Je.DefaultImageId,channels:"rgb",repeat:new D(1,1)},components:{emission:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});Je.BumpMapType="BumpMap";Je._materialCache.addMaterial(Je.BumpMapType,{fabric:{type:Je.BumpMapType,uniforms:{image:Je.DefaultImageId,channel:"r",strength:.8,repeat:new D(1,1)},source:W1},translucent:!1});Je.NormalMapType="NormalMap";Je._materialCache.addMaterial(Je.NormalMapType,{fabric:{type:Je.NormalMapType,uniforms:{image:Je.DefaultImageId,channels:"rgb",strength:.8,repeat:new D(1,1)},source:U1},translucent:!1});Je.GridType="Grid";Je._materialCache.addMaterial(Je.GridType,{fabric:{type:Je.GridType,uniforms:{color:new U(0,1,0,1),cellAlpha:.1,lineCount:new D(8,8),lineThickness:new D(1,1),lineOffset:new D(0,0)},source:Q1},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.cellAlpha<1}});Je.StripeType="Stripe";Je._materialCache.addMaterial(Je.StripeType,{fabric:{type:Je.StripeType,uniforms:{horizontal:!0,evenColor:new U(1,1,1,.5),oddColor:new U(0,0,1,.5),offset:0,repeat:5},source:J1},translucent:function(e){let t=e.uniforms;return t.evenColor.alpha<1||t.oddColor.alpha<1}});Je.CheckerboardType="Checkerboard";Je._materialCache.addMaterial(Je.CheckerboardType,{fabric:{type:Je.CheckerboardType,uniforms:{lightColor:new U(1,1,1,.5),darkColor:new U(0,0,0,.5),repeat:new D(5,5)},source:F1},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});Je.DotType="Dot";Je._materialCache.addMaterial(Je.DotType,{fabric:{type:Je.DotType,uniforms:{lightColor:new U(1,1,0,.75),darkColor:new U(0,1,1,.75),repeat:new D(5,5)},source:P1},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});Je.WaterType="Water";Je._materialCache.addMaterial(Je.WaterType,{fabric:{type:Je.WaterType,uniforms:{baseWaterColor:new U(.2,.3,.6,1),blendColor:new U(0,1,.699,1),specularMap:Je.DefaultImageId,normalMap:Je.DefaultImageId,frequency:10,animationSpeed:.01,amplitude:1,specularIntensity:.5,fadeFactor:1},source:q1},translucent:function(e){let t=e.uniforms;return t.baseWaterColor.alpha<1||t.blendColor.alpha<1}});Je.RimLightingType="RimLighting";Je._materialCache.addMaterial(Je.RimLightingType,{fabric:{type:Je.RimLightingType,uniforms:{color:new U(1,0,0,.7),rimColor:new U(1,1,1,.4),width:.3},source:z1},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.rimColor.alpha<1}});Je.FadeType="Fade";Je._materialCache.addMaterial(Je.FadeType,{fabric:{type:Je.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 D(.5,.5)},source:D1},translucent:function(e){let t=e.uniforms;return t.fadeInColor.alpha<1||t.fadeOutColor.alpha<1}});Je.PolylineArrowType="PolylineArrow";Je._materialCache.addMaterial(Je.PolylineArrowType,{fabric:{type:Je.PolylineArrowType,uniforms:{color:new U(1,1,1,1)},source:k1},translucent:!0});Je.PolylineDashType="PolylineDash";Je._materialCache.addMaterial(Je.PolylineDashType,{fabric:{type:Je.PolylineDashType,uniforms:{color:new U(1,0,1,1),gapColor:new U(0,0,0,0),dashLength:16,dashPattern:255},source:Y1},translucent:!0});Je.PolylineGlowType="PolylineGlow";Je._materialCache.addMaterial(Je.PolylineGlowType,{fabric:{type:Je.PolylineGlowType,uniforms:{color:new U(0,.5,1,1),glowPower:.25,taperPower:1},source:O1},translucent:!0});Je.PolylineOutlineType="PolylineOutline";Je._materialCache.addMaterial(Je.PolylineOutlineType,{fabric:{type:Je.PolylineOutlineType,uniforms:{color:new U(1,1,1,1),outlineColor:new U(1,0,0,1),outlineWidth:1},source:H1},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.outlineColor.alpha<1}});Je.ElevationContourType="ElevationContour";Je._materialCache.addMaterial(Je.ElevationContourType,{fabric:{type:Je.ElevationContourType,uniforms:{spacing:100,color:new U(1,0,0,1),width:1},source:v1},translucent:!1});Je.ElevationRampType="ElevationRamp";Je._materialCache.addMaterial(Je.ElevationRampType,{fabric:{type:Je.ElevationRampType,uniforms:{image:Je.DefaultImageId,minimumHeight:0,maximumHeight:1e4},source:N1},translucent:!1});Je.SlopeRampMaterialType="SlopeRamp";Je._materialCache.addMaterial(Je.SlopeRampMaterialType,{fabric:{type:Je.SlopeRampMaterialType,uniforms:{image:Je.DefaultImageId},source:K1},translucent:!1});Je.AspectRampMaterialType="AspectRamp";Je._materialCache.addMaterial(Je.AspectRampMaterialType,{fabric:{type:Je.AspectRampMaterialType,uniforms:{image:Je.DefaultImageId},source:X1},translucent:!1});Je.ElevationBandType="ElevationBand";Je._materialCache.addMaterial(Je.ElevationBandType,{fabric:{type:Je.ElevationBandType,uniforms:{heights:Je.DefaultImageId,colors:Je.DefaultImageId},source:M1},translucent:!0});Je.WaterMaskType="WaterMask";Je._materialCache.addMaterial(Je.WaterMaskType,{fabric:{type:Je.WaterMaskType,source:j1,uniforms:{waterColor:new U(1,1,1,1),landColor:new U(0,0,0,0)}},translucent:!1});var so=Je;function eC(e){e=e??Y.EMPTY_OBJECT;let t=e.translucent??!0,n=e.closed??!1,i=e.materialSupport??eC.MaterialSupport.TEXTURED;this.material=l(e.material)?e.material:so.fromType(so.ColorType),this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??i.vertexShaderSource,this._fragmentShaderSource=e.fragmentShaderSource??i.fragmentShaderSource,this._renderState=go.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._materialSupport=i,this._vertexFormat=i.vertexFormat,this._flat=e.flat??!1,this._faceForward=e.faceForward??!n}Object.defineProperties(eC.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}},materialSupport:{get:function(){return this._materialSupport}},vertexFormat:{get:function(){return this._vertexFormat}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}}});eC.prototype.getFragmentShaderSource=go.prototype.getFragmentShaderSource;eC.prototype.isTranslucent=go.prototype.isTranslucent;eC.prototype.getRenderState=go.prototype.getRenderState;eC.MaterialSupport={BASIC:Object.freeze({vertexFormat:we.POSITION_AND_NORMAL,vertexShaderSource:y1,fragmentShaderSource:b1}),TEXTURED:Object.freeze({vertexFormat:we.POSITION_NORMAL_AND_ST,vertexShaderSource:x1,fragmentShaderSource:C1}),ALL:Object.freeze({vertexFormat:we.ALL,vertexShaderSource:g1,fragmentShaderSource:A1})};var Io=eC;var uQt=y(C(),1);var JDt=y(C(),1),eR=`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 qDt=y(C(),1),tR=`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 eQt=y(C(),1),tC=`in vec4 v_color; void main() { out_FragColor = czm_gammaCorrect(v_color); } `;var nQt=y(C(),1),nR=`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 eA(e){e=e??Y.EMPTY_OBJECT;let t=e.translucent??!0,n=e.closed??!1,i=e.flat??!1,o=i?nR:tR,r=i?tC:eR,s=i?eA.FLAT_VERTEX_FORMAT:eA.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??o,this._fragmentShaderSource=e.fragmentShaderSource??r,this._renderState=go.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=s,this._flat=i,this._faceForward=e.faceForward??!n}Object.defineProperties(eA.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}}});eA.VERTEX_FORMAT=we.POSITION_AND_NORMAL;eA.FLAT_VERTEX_FORMAT=we.POSITION_ONLY;eA.prototype.getFragmentShaderSource=go.prototype.getFragmentShaderSource;eA.prototype.isTranslucent=go.prototype.isTranslucent;eA.prototype.getRenderState=go.prototype.getRenderState;var yn=eA;var yQt=y(C(),1);function J_(e){this._definitionChanged=new Ce,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(J_.prototype,{isConstant:{get:function(){return z.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:fe("color")});J_.prototype.getType=function(e){return"Color"};var PZe=new j;J_.prototype.getValue=function(e,t){return l(e)||(e=j.now(PZe)),l(t)||(t={}),t.color=z.getValueOrClonedDefault(this._color,e,U.WHITE,t.color),t};J_.prototype.equals=function(e){return this===e||e instanceof J_&&z.equals(this._color,e._color)};var qt=J_;var O8t=y(C(),1);var T8t=y(C(),1);var NQt=y(C(),1);var RQt=y(C(),1);function xb(e){e=e??Y.EMPTY_OBJECT,this._ellipsoid=e.ellipsoid??ie.default,this._rectangle=e.rectangle??le.MAX_VALUE,this._projection=new Di(this._ellipsoid),this._numberOfLevelZeroTilesX=e.numberOfLevelZeroTilesX??2,this._numberOfLevelZeroTilesY=e.numberOfLevelZeroTilesY??1}Object.defineProperties(xb.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}});xb.prototype.getNumberOfXTilesAtLevel=function(e){return this._numberOfLevelZeroTilesX<=o&&(d=o-1);let u=(i.north-e.latitude)/a|0;return u>=r&&(u=r-1),l(n)?(n.x=d,n.y=u,n):new D(d,u)};var ao=xb;var $ne=new m,eie=new m,tie=new ge,aH=new m,MZe=new m,nie=new ue,vZe=new ao,iR=[new ge,new ge,new ge,new ge],oR=new D,As={};As.initialize=function(){let e=As._initPromise;return l(e)||(e=Ve.fetchJson(hn("Assets/approximateTerrainHeights.json")).then(function(t){As._terrainHeights=t}),As._initPromise=e),e};As.getMinimumMaximumHeights=function(e,t){t=t??ie.default;let n=iie(e),i=As._defaultMinTerrainHeight,o=As._defaultMaxTerrainHeight;if(l(n)){let r=`${n.level}-${n.x}-${n.y}`,s=As._terrainHeights[r];l(s)&&(i=s[0],o=s[1]),t.cartographicToCartesian(le.northeast(e,tie),$ne),t.cartographicToCartesian(le.southwest(e,tie),eie),m.midpoint(eie,$ne,aH);let a=t.scaleToGeodeticSurface(aH,MZe);if(l(a)){let c=m.distance(aH,a);i=Math.min(i,-c)}else i=As._defaultMinTerrainHeight}return i=Math.max(As._defaultMinTerrainHeight,i),{minimumTerrainHeight:i,maximumTerrainHeight:o}};As.getBoundingSphere=function(e,t){t=t??ie.default;let n=iie(e),i=As._defaultMaxTerrainHeight;if(l(n)){let r=`${n.level}-${n.x}-${n.y}`,s=As._terrainHeights[r];l(s)&&(i=s[1])}let o=ue.fromRectangle3D(e,t,0);return ue.fromRectangle3D(e,t,i,nie),ue.union(o,nie,o)};function iie(e){ge.fromRadians(e.east,e.north,0,iR[0]),ge.fromRadians(e.west,e.north,0,iR[1]),ge.fromRadians(e.east,e.south,0,iR[2]),ge.fromRadians(e.west,e.south,0,iR[3]);let t=0,n=0,i=0,o=0,r=As._terrainHeightsMaxLevel,s;for(s=0;s<=r;++s){let a=!1;for(let c=0;c<4;++c){let d=iR[c];if(vZe.positionToTileXY(d,s,oR),c===0)i=oR.x,o=oR.y;else if(i!==oR.x||o!==oR.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}}As._terrainHeightsMaxLevel=6;As._defaultMaxTerrainHeight=9e3;As._defaultMinTerrainHeight=-1e5;As._terrainHeights=void 0;As._initPromise=void 0;Object.defineProperties(As,{initialized:{get:function(){return l(As._terrainHeights)}}});var Si=As;var C5t=y(C(),1);var o5t=y(C(),1);var YQt=y(C(),1);function al(e,t,n){this.minimum=m.clone(e??m.ZERO),this.maximum=m.clone(t??m.ZERO),l(n)?n=m.clone(n):n=m.midpoint(this.minimum,this.maximum,new m),this.center=n}al.fromCorners=function(e,t,n){return l(n)||(n=new al),n.minimum=m.clone(e,n.minimum),n.maximum=m.clone(t,n.maximum),n.center=m.midpoint(e,t,n.center),n};al.fromPoints=function(e,t){if(l(t)||(t=new al),!l(e)||e.length===0)return t.minimum=m.clone(m.ZERO,t.minimum),t.maximum=m.clone(m.ZERO,t.maximum),t.center=m.clone(m.ZERO,t.center),t;let n=e[0].x,i=e[0].y,o=e[0].z,r=e[0].x,s=e[0].y,a=e[0].z,c=e.length;for(let h=1;h0?on.INSIDE:r+o<0?on.OUTSIDE:on.INTERSECTING};al.prototype.clone=function(e){return al.clone(this,e)};al.prototype.intersectPlane=function(e){return al.intersectPlane(this,e)};al.prototype.equals=function(e){return al.equals(this,e)};var Ib=al;var cH=new ce;function wf(e,t){t=t??ie.default,e=t.scaleToGeodeticSurface(e);let n=Dt.eastNorthUpToFixedFrame(e,t);this._ellipsoid=t,this._origin=e,this._xAxis=m.fromCartesian4(X.getColumn(n,0,cH)),this._yAxis=m.fromCartesian4(X.getColumn(n,1,cH));let i=m.fromCartesian4(X.getColumn(n,2,cH));this._plane=An.fromPointNormal(e,i)}Object.defineProperties(wf.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 NZe=new Ib;wf.fromPoints=function(e,t){let n=Ib.fromPoints(e,NZe);return new wf(n.center,t)};var oie=new En,_D=new m;wf.prototype.projectPointOntoPlane=function(e,t){let n=oie;n.origin=e,m.normalize(e,n.direction);let i=fi.rayPlane(n,this._plane,_D);if(l(i)||(m.negate(n.direction,n.direction),i=fi.rayPlane(n,this._plane,_D)),l(i)){let o=m.subtract(i,this._origin,i),r=m.dot(this._xAxis,o),s=m.dot(this._yAxis,o);return l(t)?(t.x=r,t.y=s,t):new D(r,s)}};wf.prototype.projectPointsOntoPlane=function(e,t){l(t)||(t=[]);let n=0,i=e.length;for(let o=0;o0?0:B.latitude,T=ge.fromRadians(P,e.north,n,qZe),L=ge.fromRadians(e.west,e.north,n,$Ze),V=ge.fromRadians(e.west,A,n,eBe),W=ge.fromRadians(e.west,e.south,n,tBe),M=ge.fromRadians(P,e.south,n,nBe),Q=i.cartographicToCartesian(T,iBe),N=i.cartographicToCartesian(L,aie),k=i.cartographicToCartesian(V,oBe),v=i.cartographicToCartesian(W,cie),O=i.cartographicToCartesian(M,rBe),H=F.projectPointToNearestOnPlane(Q,sBe),ee=F.projectPointToNearestOnPlane(N,aBe),K=F.projectPointToNearestOnPlane(k,cBe),te=F.projectPointToNearestOnPlane(v,lBe),q=F.projectPointToNearestOnPlane(O,dBe);return r=Math.min(ee.x,K.x,te.x),s=-r,c=Math.max(ee.y,H.y),a=Math.min(te.y,q.y),L.height=W.height=t,N=i.cartographicToCartesian(L,aie),v=i.cartographicToCartesian(W,cie),d=Math.min(An.getPointDistance(h,N),An.getPointDistance(h,v)),u=n,rie(F.origin,F.xAxis,F.yAxis,F.zAxis,r,s,a,c,d,u,o)}let p=e.south>0,g=e.north<0,f=p?e.south:g?e.north:0,b=le.center(e,sie).longitude,x=m.fromRadians(b,f,n,i,uBe);x.z=0;let _=Math.abs(x.x)=c?on.INSIDE:on.INTERSECTING};var uie=new m,mie=new m,hie=new m,CBe=new m,lie=new m,xBe=new m;$i.distanceSquaredTo=function(e,t){let n=m.subtract(t,e.center,die),i=e.halfAxes,o=$.getColumn(i,0,uie),r=$.getColumn(i,1,mie),s=$.getColumn(i,2,hie),a=m.magnitude(o),c=m.magnitude(r),d=m.magnitude(s),u=!0,h=!0,p=!0;a>0?m.divideByScalar(o,a,o):u=!1,c>0?m.divideByScalar(r,c,r):h=!1,d>0?m.divideByScalar(s,d,s):p=!1;let g=!u+!h+!p,f,b,x;if(g===1){let S=o;f=r,b=s,h?p||(S=s,b=o):(S=r,f=o),x=m.cross(f,b,lie),S===o?o=x:S===r?r=x:S===s&&(s=x)}else if(g===2){f=o,h?f=r:p&&(f=s);let S=m.UNIT_Y;S.equalsEpsilon(f,Z.EPSILON3)&&(S=m.UNIT_X),b=m.cross(f,S,CBe),m.normalize(b,b),x=m.cross(f,b,lie),m.normalize(x,x),f===o?(r=b,s=x):f===r?(s=b,o=x):f===s&&(o=b,r=x)}else g===3&&(o=m.UNIT_X,r=m.UNIT_Y,s=m.UNIT_Z);let I=xBe;I.x=m.dot(n,o),I.y=m.dot(n,r),I.z=m.dot(n,s);let _=0,E;return I.x<-a?(E=I.x+a,_+=E*E):I.x>a&&(E=I.x-a,_+=E*E),I.y<-c?(E=I.y+c,_+=E*E):I.y>c&&(E=I.y-c,_+=E*E),I.z<-d?(E=I.z+d,_+=E*E):I.z>d&&(E=I.z-d,_+=E*E),_};var IBe=new m,_Be=new m;$i.computePlaneDistances=function(e,t,n,i){l(i)||(i=new oc);let o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=e.center,a=e.halfAxes,c=$.getColumn(a,0,uie),d=$.getColumn(a,1,mie),u=$.getColumn(a,2,hie),h=m.add(c,d,IBe);m.add(h,u,h),m.add(h,s,h);let p=m.subtract(h,t,_Be),g=m.dot(n,p);return o=Math.min(g,o),r=Math.max(g,r),m.add(s,c,h),m.add(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.add(s,c,h),m.subtract(h,d,h),m.add(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.add(s,c,h),m.subtract(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.subtract(s,c,h),m.add(h,d,h),m.add(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.subtract(s,c,h),m.add(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.subtract(s,c,h),m.subtract(h,d,h),m.add(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.subtract(s,c,h),m.subtract(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),i.start=o,i.stop=r,i};var EBe=new m,TBe=new m,SBe=new m;$i.computeCorners=function(e,t){l(t)||(t=[new m,new m,new m,new m,new m,new m,new m,new m]);let n=e.center,i=e.halfAxes,o=$.getColumn(i,0,EBe),r=$.getColumn(i,1,TBe),s=$.getColumn(i,2,SBe);return m.clone(n,t[0]),m.subtract(t[0],o,t[0]),m.subtract(t[0],r,t[0]),m.subtract(t[0],s,t[0]),m.clone(n,t[1]),m.subtract(t[1],o,t[1]),m.subtract(t[1],r,t[1]),m.add(t[1],s,t[1]),m.clone(n,t[2]),m.subtract(t[2],o,t[2]),m.add(t[2],r,t[2]),m.subtract(t[2],s,t[2]),m.clone(n,t[3]),m.subtract(t[3],o,t[3]),m.add(t[3],r,t[3]),m.add(t[3],s,t[3]),m.clone(n,t[4]),m.add(t[4],o,t[4]),m.subtract(t[4],r,t[4]),m.subtract(t[4],s,t[4]),m.clone(n,t[5]),m.add(t[5],o,t[5]),m.subtract(t[5],r,t[5]),m.add(t[5],s,t[5]),m.clone(n,t[6]),m.add(t[6],o,t[6]),m.add(t[6],r,t[6]),m.subtract(t[6],s,t[6]),m.clone(n,t[7]),m.add(t[7],o,t[7]),m.add(t[7],r,t[7]),m.add(t[7],s,t[7]),t};var LBe=new $;$i.computeTransformation=function(e,t){l(t)||(t=new X);let n=e.center,i=$.multiplyByUniformScale(e.halfAxes,2,LBe);return X.fromRotationTranslation(i,n,t)};var RBe=new ue;$i.isOccluded=function(e,t){let n=ue.fromOrientedBoundingBox(e,RBe);return!t.isBoundingSphereVisible(n)};$i.prototype.intersectPlane=function(e){return $i.intersectPlane(this,e)};$i.prototype.distanceSquaredTo=function(e){return $i.distanceSquaredTo(this,e)};$i.prototype.computePlaneDistances=function(e,t,n){return $i.computePlaneDistances(this,e,t,n)};$i.prototype.computeCorners=function(e){return $i.computeCorners(this,e)};$i.prototype.computeTransformation=function(e){return $i.computeTransformation(this,e)};$i.prototype.isOccluded=function(e){return $i.isOccluded(this,e)};$i.equals=function(e,t){return e===t||l(e)&&l(t)&&m.equals(e.center,t.center)&&$.equals(e.halfAxes,t.halfAxes)};$i.prototype.clone=function(e){return $i.clone(this,e)};$i.prototype.equals=function(e){return $i.equals(this,e)};var vn=$i;var T5t=y(C(),1);var ED={};ED.getHeight=function(e,t,n){return(e-n)*t+n};var VBe=new ge;ED.getPosition=function(e,t,n,i,o){let r=t.cartesianToCartographic(e,VBe);if(!l(r))return m.clone(e,o);let s=ED.getHeight(r.height,n,i);return m.fromRadians(r.longitude,r.latitude,s,t,o)};var Mr=ED;var a8t=y(C(),1);var G5t=y(C(),1);var vr={CULL:1,OCCLUDE:2,EXECUTE_IN_CLOSEST_FRUSTUM:4,DEBUG_SHOW_BOUNDING_VOLUME:8,CAST_SHADOWS:16,RECEIVE_SHADOWS:32,PICK_ONLY:64,DEPTH_FOR_TRANSLUCENT_CLASSIFICATION:128};function rR(e){e=e??Y.EMPTY_OBJECT,this._boundingVolume=e.boundingVolume,this._orientedBoundingBox=e.orientedBoundingBox,this._modelMatrix=e.modelMatrix,this._primitiveType=e.primitiveType??We.TRIANGLES,this._vertexArray=e.vertexArray,this._count=e.count,this._offset=e.offset??0,this._instanceCount=e.instanceCount??0,this._shaderProgram=e.shaderProgram,this._uniformMap=e.uniformMap,this._renderState=e.renderState,this._framebuffer=e.framebuffer,this._pass=e.pass,this._owner=e.owner,this._debugOverlappingFrustums=0,this._pickId=e.pickId,this._pickMetadataAllowed=e.pickMetadataAllowed===!0,this._pickedMetadataInfo=void 0,this._flags=0,this.cull=e.cull??!0,this.occlude=e.occlude??!0,this.executeInClosestFrustum=e.executeInClosestFrustum??!1,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.castShadows=e.castShadows??!1,this.receiveShadows=e.receiveShadows??!1,this.pickOnly=e.pickOnly??!1,this.depthForTranslucentClassification=e.depthForTranslucentClassification??!1,this.dirty=!0,this.lastDirtyTime=0,this.derivedCommands={}}function Vc(e,t){return(e._flags&t)===t}function _b(e,t,n){n?e._flags|=t:e._flags&=~t}Object.defineProperties(rR.prototype,{boundingVolume:{get:function(){return this._boundingVolume},set:function(e){this._boundingVolume!==e&&(this._boundingVolume=e,this.dirty=!0)}},orientedBoundingBox:{get:function(){return this._orientedBoundingBox},set:function(e){this._orientedBoundingBox!==e&&(this._orientedBoundingBox=e,this.dirty=!0)}},cull:{get:function(){return Vc(this,vr.CULL)},set:function(e){Vc(this,vr.CULL)!==e&&(_b(this,vr.CULL,e),this.dirty=!0)}},occlude:{get:function(){return Vc(this,vr.OCCLUDE)},set:function(e){Vc(this,vr.OCCLUDE)!==e&&(_b(this,vr.OCCLUDE,e),this.dirty=!0)}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix!==e&&(this._modelMatrix=e,this.dirty=!0)}},primitiveType:{get:function(){return this._primitiveType},set:function(e){this._primitiveType!==e&&(this._primitiveType=e,this.dirty=!0)}},vertexArray:{get:function(){return this._vertexArray},set:function(e){this._vertexArray!==e&&(this._vertexArray=e,this.dirty=!0)}},count:{get:function(){return this._count},set:function(e){this._count!==e&&(this._count=e,this.dirty=!0)}},offset:{get:function(){return this._offset},set:function(e){this._offset!==e&&(this._offset=e,this.dirty=!0)}},instanceCount:{get:function(){return this._instanceCount},set:function(e){this._instanceCount!==e&&(this._instanceCount=e,this.dirty=!0)}},shaderProgram:{get:function(){return this._shaderProgram},set:function(e){this._shaderProgram!==e&&(this._shaderProgram=e,this.dirty=!0)}},castShadows:{get:function(){return Vc(this,vr.CAST_SHADOWS)},set:function(e){Vc(this,vr.CAST_SHADOWS)!==e&&(_b(this,vr.CAST_SHADOWS,e),this.dirty=!0)}},receiveShadows:{get:function(){return Vc(this,vr.RECEIVE_SHADOWS)},set:function(e){Vc(this,vr.RECEIVE_SHADOWS)!==e&&(_b(this,vr.RECEIVE_SHADOWS,e),this.dirty=!0)}},uniformMap:{get:function(){return this._uniformMap},set:function(e){this._uniformMap!==e&&(this._uniformMap=e,this.dirty=!0)}},renderState:{get:function(){return this._renderState},set:function(e){this._renderState!==e&&(this._renderState=e,this.dirty=!0)}},framebuffer:{get:function(){return this._framebuffer},set:function(e){this._framebuffer!==e&&(this._framebuffer=e,this.dirty=!0)}},pass:{get:function(){return this._pass},set:function(e){this._pass!==e&&(this._pass=e,this.dirty=!0)}},executeInClosestFrustum:{get:function(){return Vc(this,vr.EXECUTE_IN_CLOSEST_FRUSTUM)},set:function(e){Vc(this,vr.EXECUTE_IN_CLOSEST_FRUSTUM)!==e&&(_b(this,vr.EXECUTE_IN_CLOSEST_FRUSTUM,e),this.dirty=!0)}},owner:{get:function(){return this._owner},set:function(e){this._owner!==e&&(this._owner=e,this.dirty=!0)}},debugShowBoundingVolume:{get:function(){return Vc(this,vr.DEBUG_SHOW_BOUNDING_VOLUME)},set:function(e){Vc(this,vr.DEBUG_SHOW_BOUNDING_VOLUME)!==e&&(_b(this,vr.DEBUG_SHOW_BOUNDING_VOLUME,e),this.dirty=!0)}},debugOverlappingFrustums:{get:function(){return this._debugOverlappingFrustums},set:function(e){this._debugOverlappingFrustums!==e&&(this._debugOverlappingFrustums=e,this.dirty=!0)}},pickId:{get:function(){return this._pickId},set:function(e){this._pickId!==e&&(this._pickId=e,this.dirty=!0)}},pickMetadataAllowed:{get:function(){return this._pickMetadataAllowed}},pickedMetadataInfo:{get:function(){return this._pickedMetadataInfo},set:function(e){this._pickedMetadataInfo!==e&&(this._pickedMetadataInfo=e,this.dirty=!0)}},pickOnly:{get:function(){return Vc(this,vr.PICK_ONLY)},set:function(e){Vc(this,vr.PICK_ONLY)!==e&&(_b(this,vr.PICK_ONLY,e),this.dirty=!0)}},depthForTranslucentClassification:{get:function(){return Vc(this,vr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)},set:function(e){Vc(this,vr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)!==e&&(_b(this,vr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION,e),this.dirty=!0)}}});rR.shallowClone=function(e,t){if(l(e))return l(t)||(t=new rR),t._boundingVolume=e._boundingVolume,t._orientedBoundingBox=e._orientedBoundingBox,t._modelMatrix=e._modelMatrix,t._primitiveType=e._primitiveType,t._vertexArray=e._vertexArray,t._count=e._count,t._offset=e._offset,t._instanceCount=e._instanceCount,t._shaderProgram=e._shaderProgram,t._uniformMap=e._uniformMap,t._renderState=e._renderState,t._framebuffer=e._framebuffer,t._pass=e._pass,t._owner=e._owner,t._debugOverlappingFrustums=e._debugOverlappingFrustums,t._pickId=e._pickId,t._pickMetadataAllowed=e._pickMetadataAllowed,t._pickedMetadataInfo=e._pickedMetadataInfo,t._flags=e._flags,t.dirty=!0,t.lastDirtyTime=0,t};rR.prototype.execute=function(e,t){e.draw(this,t)};var ot=rR;var B5t=y(C(),1),GBe={ENVIRONMENT:0,COMPUTE:1,GLOBE:2,TERRAIN_CLASSIFICATION:3,CESIUM_3D_TILE:4,CESIUM_3D_TILE_CLASSIFICATION:5,CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW:6,OPAQUE:7,TRANSLUCENT:8,VOXELS:9,GAUSSIAN_SPLATS:10,OVERLAY:11,NUMBER_OF_PASSES:12},Ge=Object.freeze(GBe);var Y5t=y(C(),1);var W5t=y(C(),1);var TD={CLOCKWISE:ne.CW,COUNTER_CLOCKWISE:ne.CCW};TD.validate=function(e){return e===TD.CLOCKWISE||e===TD.COUNTER_CLOCKWISE};var ws=Object.freeze(TD);var P5t=y(C(),1);function fie(e){if(typeof e!="object"||e===null)return e;let t,n=Object.keys(e);for(let i=0;i0&&console.log(`${Ff}Vertex shader compile log: ${c}`),c=e.getShaderInfoLog(r),l(c)&&c.length>0&&console.log(`${Ff}Fragment shader compile log: ${c}`),c=e.getProgramInfoLog(s),l(c)&&c.length>0&&console.log(`${Ff}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(`${Ff}Shader program link log: ${c}`),h(o,"vertex"),h(r,"fragment"),d=`Program failed to link. Link log: ${c}`):(c=e.getShaderInfoLog(o),console.error(`${Ff}Vertex shader compile log: ${c}`),console.error(`${Ff} Vertex shader source: ${n}`),d=`Vertex shader failed to compile. Compile log: ${c}`):(c=e.getShaderInfoLog(r),console.error(`${Ff}Fragment shader compile log: ${c}`),console.error(`${Ff} Fragment shader source: ${i}`),d=`Fragment shader failed to compile. Compile log: ${c}`),e.deleteShader(o),e.deleteShader(r),e.deleteProgram(s),new de(d);function h(p,g){if(!l(u))return;let f=u.getTranslatedShaderSource(p);if(f===""){console.error(`${Ff}${g} shader translation failed.`);return}console.error(`${Ff}Translated ${g} shaderSource: ${f}`)}}function YBe(e,t,n){let i={};for(let o=0;o=0){if(u=n[d.slice(0,f)],!l(u))continue;h=u._locations,h.length<=1&&(p=u.value,g=e.getUniformLocation(t,d),g!==null&&(h.push(g),p.push(e.getUniform(t,g))))}else{h=[];for(let b=0;b 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 G3t=y(C(),1),WV=`/** * 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 B3t=y(C(),1),FV=`/** * 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 X3t=y(C(),1),PV=`/** * 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 F3t=y(C(),1),MV=`/** * 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 M3t=y(C(),1),vV=`/** * 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 N3t=y(C(),1),NV=`/** * 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 Q3t=y(C(),1),DV=`/** * 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 k3t=y(C(),1),QV=`/** * @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 O3t=y(C(),1),UV=`/** * 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 z3t=y(C(),1),kV=`/** * 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 J3t=y(C(),1),YV=`/** * 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 q3t=y(C(),1),OV=`/** * 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 eOt=y(C(),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 nOt=y(C(),1),zV=`/** * 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 oOt=y(C(),1),KV=`/** * 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 sOt=y(C(),1),JV=`/** * 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 cOt=y(C(),1),jV=`/** * 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 dOt=y(C(),1),qV=`/** * 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 mOt=y(C(),1),$V=`/** * 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 fOt=y(C(),1),eG=`/** * 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 AOt=y(C(),1),tG=`/** * 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 bOt=y(C(),1),nG=` /** * 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 COt=y(C(),1),iG=`/** * 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 IOt=y(C(),1),oG=`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 EOt=y(C(),1),rG=`// 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 SOt=y(C(),1),sG=`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 ROt=y(C(),1),aG=`/** * 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 GOt=y(C(),1),cG=`/** * 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 BOt=y(C(),1),lG=`/** * 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 XOt=y(C(),1),dG=`/** * 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 FOt=y(C(),1),uG=`float czm_readDepth(sampler2D depthTexture, vec2 texCoords) { return czm_reverseLogDepth(texture(depthTexture, texCoords).r); } `;var MOt=y(C(),1),mG=`/** * 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 NOt=y(C(),1),hG=`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 QOt=y(C(),1),fG=`/** * 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 kOt=y(C(),1),pG=`/** * 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 OOt=y(C(),1),AG=` 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 zOt=y(C(),1),gG=` 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 JOt=y(C(),1),bG=`/** * 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 qOt=y(C(),1),yG=`/** * 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 eHt=y(C(),1),CG=`/** * 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 nHt=y(C(),1),xG=`/** * 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 oHt=y(C(),1),IG=`/** * 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 sHt=y(C(),1),_G=`/** * 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 cHt=y(C(),1),EG=`/** * 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 dHt=y(C(),1),TG=`/** * @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 mHt=y(C(),1),SG=`/** * 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 fHt=y(C(),1),LG=`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 AHt=y(C(),1),RG=`/** * 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 bHt=y(C(),1),VG=`/** * 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 CHt=y(C(),1),GG=`/** * 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 IHt=y(C(),1),ZG=`/** * 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 EHt=y(C(),1),BG=`#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 SHt=y(C(),1),wG=`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 RHt=y(C(),1),XG=`// 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 GHt=y(C(),1),WG=`#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 BHt=y(C(),1),FG=`/** * 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 iC={czm_degreesPerRadian:cR,czm_depthRange:lR,czm_epsilon1:dR,czm_epsilon2:uR,czm_epsilon3:mR,czm_epsilon4:hR,czm_epsilon5:fR,czm_epsilon6:pR,czm_epsilon7:AR,czm_infinity:gR,czm_oneOverPi:bR,czm_oneOverTwoPi:yR,czm_passCesium3DTile:CR,czm_passCesium3DTileClassification:xR,czm_passCesium3DTileClassificationIgnoreShow:IR,czm_passClassification:_R,czm_passCompute:ER,czm_passEnvironment:TR,czm_passGaussianSplats:SR,czm_passGlobe:LR,czm_passOpaque:RR,czm_passOverlay:VR,czm_passTerrainClassification:GR,czm_passTranslucent:ZR,czm_passVoxels:BR,czm_pi:wR,czm_piOverFour:XR,czm_piOverSix:WR,czm_piOverThree:FR,czm_piOverTwo:PR,czm_radiansPerDegree:MR,czm_sceneMode2D:vR,czm_sceneMode3D:NR,czm_sceneModeColumbusView:DR,czm_sceneModeMorphing:QR,czm_solarRadius:UR,czm_threePiOver2:kR,czm_twoPi:YR,czm_webMercatorMaxLatitude:OR,czm_depthRangeStruct:HR,czm_material:zR,czm_materialInput:KR,czm_modelMaterial:JR,czm_modelVertexOutput:jR,czm_ray:qR,czm_raySegment:$R,czm_shadowParameters:eV,czm_HSBToRGB:tV,czm_HSLToRGB:nV,czm_RGBToHSB:iV,czm_RGBToHSL:oV,czm_RGBToXYZ:rV,czm_XYZToRGB:sV,czm_acesTonemapping:aV,czm_alphaWeight:cV,czm_antialias:lV,czm_applyHSBShift:dV,czm_approximateSphericalCoordinates:uV,czm_approximateTanh:mV,czm_backFacing:hV,czm_branchFreeTernary:fV,czm_cascadeColor:pV,czm_cascadeDistance:AV,czm_cascadeMatrix:gV,czm_cascadeWeights:bV,czm_clipPolygons:yV,czm_columbusViewMorph:CV,czm_computeAtmosphereColor:xV,czm_computeGroundAtmosphereScattering:IV,czm_computePosition:_V,czm_computeScattering:EV,czm_cosineAndSine:TV,czm_decompressTextureCoordinates:SV,czm_depthClamp:LV,czm_eastNorthUpToEyeCoordinates:RV,czm_ellipsoidContainsPoint:VV,czm_ellipsoidTextureCoordinates:GV,czm_equalsEpsilon:ZV,czm_eyeOffset:BV,czm_eyeToWindowCoordinates:wV,czm_fastApproximateAtan:XV,czm_fog:WV,czm_gammaCorrect:FV,czm_geodeticSurfaceNormal:PV,czm_getDefaultMaterial:MV,czm_getDynamicAtmosphereLightDirection:vV,czm_getLambertDiffuse:NV,czm_getSpecular:DV,czm_getWaterNoise:QV,czm_hue:UV,czm_inverseGamma:kV,czm_isEmpty:YV,czm_isFull:OV,czm_latitudeToWebMercatorFraction:HV,czm_lineDistance:zV,czm_linearToSrgb:KV,czm_luminance:JV,czm_maximumComponent:jV,czm_metersPerPixel:qV,czm_modelToWindowCoordinates:$V,czm_multiplyWithColorBalance:eG,czm_nearFarScalar:tG,czm_octDecode:nG,czm_packDepth:iG,czm_pbrLighting:oG,czm_pbrNeutralTonemapping:rG,czm_phong:sG,czm_planeDistance:aG,czm_pointAlongRay:cG,czm_rayEllipsoidIntersectionInterval:lG,czm_raySphereIntersectionInterval:dG,czm_readDepth:uG,czm_readNonPerspective:mG,czm_reverseLogDepth:hG,czm_round:fG,czm_saturation:pG,czm_shadowDepthCompare:AG,czm_shadowVisibility:gG,czm_signNotZero:bG,czm_sphericalHarmonics:yG,czm_srgbToLinear:CG,czm_tangentToEyeSpaceMatrix:xG,czm_textureCube:IG,czm_transformPlane:_G,czm_translateRelativeToEye:EG,czm_translucentPhong:TG,czm_transpose:SG,czm_unpackClippingExtents:LG,czm_unpackDepth:RG,czm_unpackFloat:VG,czm_unpackUint:GG,czm_valueTransform:ZG,czm_vertexLogDepth:BG,czm_windowToEyeCoordinates:wG,czm_writeDepthClamp:XG,czm_writeLogDepth:WG,czm_writeNonPerspective:FG};var uJt=y(C(),1);function KBe(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 PG=KBe;function $ie(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 noe(e,t,n){let i,o,r="",s=e.sources;if(l(s))for(i=0,o=s.length;i 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 IJt=y(C(),1),Eb=`#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 EJt=y(C(),1),roe={TERRAIN:0,CESIUM_3D_TILE:1,BOTH:2};roe.NUMBER_OF_CLASSIFICATION_TYPES=3;var $n=Object.freeze(roe);var LJt=y(C(),1);var twe={NEVER:ne.NEVER,LESS:ne.LESS,EQUAL:ne.EQUAL,LESS_OR_EQUAL:ne.LEQUAL,GREATER:ne.GREATER,NOT_EQUAL:ne.NOTEQUAL,GREATER_OR_EQUAL:ne.GEQUAL,ALWAYS:ne.ALWAYS},Fa=Object.freeze(twe);var ojt=y(C(),1);var VJt=y(C(),1);function nwe(e,t){let n=[],i=e.length,o=0;for(;oJl.MaximumLatitude?e=Jl.MaximumLatitude:e<-Jl.MaximumLatitude&&(e=-Jl.MaximumLatitude);let t=Math.sin(e);return .5*Math.log((1+t)/(1-t))};Jl.MaximumLatitude=Jl.mercatorAngleToGeodeticLatitude(Math.PI);Jl.prototype.project=function(e,t){let n=this._semimajorAxis,i=e.longitude*n,o=Jl.geodeticLatitudeToMercatorAngle(e.latitude)*n,r=e.height;return l(t)?(t.x=i,t.y=o,t.z=r,t):new m(i,o,r)};Jl.prototype.unproject=function(e,t){let n=this._oneOverSemimajorAxis,i=e.x*n,o=Jl.mercatorAngleToGeodeticLatitude(e.y*n),r=e.z;return l(t)?(t.longitude=i,t.latitude=o,t.height=r,t):new ge(i,o,r)};var Ui=Jl;function Awe(e,t,n){let i=!n,o=e.length,r;if(!i&&o>1){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 ywe(e,t){let n=[];return mH(e,"geometry",t,n),mH(e,"westHemisphereGeometry",t,n),mH(e,"eastHemisphereGeometry",t,n),n}var oA={};oA.combineGeometry=function(e){let t,n,i=e.instances,o=i.length,r,s,a=!1;o>0&&(t=bwe(e),t.length>0&&(n=Yn.createAttributeLocations(t[0]),e.createPickOffsets&&(r=ywe(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}};oA.unpackCreateGeometryResults=function(e){let t=e.stringTable,n=e.packedData,i,o=new Array(n[0]),r=0,s=1;for(;s0){let R=x.length/I;for(S=Me.createTypedArray(R,b),i=0;i= nearSq && distanceSq <= farSq) ? 1.0 : 0.0; gl_Position *= show; }`,`${i} ${o}`};function moe(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="",h="";if(i){u+=`vec2 st; `;let f=s>1?`${c}.x`:c;h+=` st = czm_decompressTextureCoordinates(${f}); `}n&&o&&r?(u+=`vec3 normal; vec3 tangent; vec3 bitangent; `,h+=` czm_octDecode(${c}.${i?"yz":"xy"}, normal, tangent, bitangent); `):(n&&(u+=`vec3 normal; `,h+=` normal = czm_octDecode(${c}${s>1?`.${i?"y":"x"}`:""}); `),o&&(u+=`vec3 tangent; `,h+=` tangent = czm_octDecode(${c}.${i&&n?"z":"y"}); `),r&&(u+=`vec3 bitangent; `,h+=` 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=Oe.replaceMain(p,"czm_non_compressed_main");let g=`void main() { ${h} czm_non_compressed_main(); }`;return[d,u,p,g].join(` `)}function Xwe(e){let t=Oe.replaceMain(e,"czm_non_depth_clamp_main");return t+=`void main() { czm_non_depth_clamp_main(); gl_Position = czm_depthClamp(gl_Position);} `,t}function Wwe(e){let t=Oe.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 hoe(e,t){let n=e.vertexAttributes}function Fwe(e,t){return function(){return e[t]}}var hH=Math.max(Ht.hardwareConcurrency-1,1),VD,Pwe=new hi("combineGeometry");function Mwe(e,t){let n,i,o,r,s=e._instanceIds;if(e._state===Nr.READY){n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];let a=e._numberOfInstances=n.length,c=[],d=[];for(o=0;o0){let b=new Float64Array(h);for(f=[b.buffer],r=0;r0?(e._recomputeBoundingSpheres=!0,e._state=Nr.COMBINED):QG(e,t,Nr.FAILED,void 0)}).catch(function(h){QG(e,t,Nr.FAILED,h)})}}function vwe(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=Nr.COMBINED):QG(e,t,Nr.FAILED,void 0)}function Nwe(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||ue.intersectPlane(b,An.ORIGIN_ZX_PLANE)!==on.INTERSECTING?c.push(b):(d.push(b),u.push(b))}let h=c[0],p=u[0],g=d[0];for(i=1;i0){if(Kt.maximumVertexTextureImageUnits===0)throw new de("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!==Nr.COMPLETE&&this._state!==Nr.COMBINED&&(this.asynchronous?Mwe(this,e):vwe(this,e)),this._state===Nr.COMBINED&&(Dwe(this,e),poe(this,e),Uwe(this,e)),!this.show||this._state!==Nr.COMPLETE)return;this._batchTableOffsetsUpdated||poe(this,e),this._recomputeBoundingSpheres&&Nwe(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??kwe)(this,t,n,d),r&&(this._createShaderProgramFunction??Ywe)(this,e,n),(o||r)&&(this._createCommandsFunction??Owe)(this,n,i,c,d,this._colorCommands,this._pickCommands,e),(this._updateAndQueueCommandsFunction??Hwe)(this,e,this._colorCommands,this._pickCommands,this.modelMatrix,this.cull,this.debugShowBoundingVolume,d)};var zwe=new ue,Kwe=new ue;function _oe(e,t,n){if(n===pn.TOP){let i=ue.clone(e,zwe),o=ue.clone(e,Kwe);o.center=m.add(o.center,t,o.center),e=ue.union(i,o,e)}else n===pn.ALL&&(e.center=m.add(e.center,t,e.center));return e}function Jwe(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 jwe(e,t,n,i,o){return function(r){let s=yoe(r);e.setBatchedAttribute(t,n,s),o==="offset"&&(i._recomputeBoundingSpheres=!0,i._batchTableOffsetsUpdated=!1)}}var qwe=new m;function $we(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)&&_oe(i,m.fromArray(r.get(),0,qwe),e._offsetInstanceExtend[n]),l(o)&&(i=ue.transform(i,o))}return i}},t.boundingSphereCV={get:function(){return e._instanceBoundingSpheresCV[n]}}}function eXe(e,t,n){t.pickId={get:function(){return e._pickIds[n]}}}Dr.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 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 PICK #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. // Check for logDepthOrDepth != 0.0 to make sure this should be classified. if (0.0 <= uv.x && uv.x <= 1.0 && 0.0 <= uv.y && uv.y <= 1.0 || logDepthOrDepth != 0.0) { out_FragColor.a = 1.0; // 0.0 alpha leads to discard from ShaderSource.createPickFragmentShaderSource czm_writeDepthClamp(); } #else // CULL_FRAGMENTS out_FragColor.a = 1.0; #endif // CULL_FRAGMENTS #else // PICK #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 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 Hu(e,t,n){this._projectionExtentDefines={eastMostYhighDefine:"",eastMostYlowDefine:"",westMostYhighDefine:"",westMostYlowDefine:""};let i=new pH;i.requiresTextureCoordinates=e,i.requiresEC=!n.flat;let o=new pH;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}Hu.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 Oe({defines:i,sources:[o,j_]})};Hu.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 Oe({defines:n,sources:[j_],pickColorQualifier:"in"})};Hu.prototype.createVertexShader=function(e,t,n,i){return Zoe(this._colorShaderDependencies,this._planarExtents,n,e,t,this._appearance,i,this._projectionExtentDefines)};Hu.prototype.createPickVertexShader=function(e,t,n,i){return Zoe(this._pickShaderDependencies,this._planarExtents,n,e,t,void 0,i,this._projectionExtentDefines)};var Eoe=new m,Toe=new ge,Soe={high:0,low:0};function Zoe(e,t,n,i,o,r,s,a){let c=i.slice();if(a.eastMostYhighDefine===""){let d=Toe;d.longitude=Z.PI,d.latitude=0,d.height=0;let u=s.project(d,Eoe),h=ni.encode(u.x,Soe);a.eastMostYhighDefine=`EAST_MOST_X_HIGH ${h.high.toFixed(`${h.high}`.length+1)}`,a.eastMostYlowDefine=`EAST_MOST_X_LOW ${h.low.toFixed(`${h.low}`.length+1)}`;let p=Toe;p.longitude=-Z.PI,p.latitude=0,p.height=0;let g=s.project(p,Eoe);h=ni.encode(g.x,Soe),a.westMostYhighDefine=`WEST_MOST_X_HIGH ${h.high.toFixed(`${h.high}`.length+1)}`,a.westMostYlowDefine=`WEST_MOST_X_LOW ${h.low.toFixed(`${h.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 Oe({defines:c,sources:[o]})}function pH(){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(pH.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 Loe(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)/D.distance(t,e)}var nXe=[new D,new D,new D,new D];function Boe(e,t){let n=nXe,i=D.unpack(t,0,n[0]),o=D.unpack(t,2,n[1]),r=D.unpack(t,4,n[2]);e.uMaxVmax=new Gc({componentDatatype:J.FLOAT,componentsPerAttribute:4,normalize:!1,value:[o.x,o.y,r.x,r.y]});let s=1/Loe(i,o,r),a=1/Loe(i,r,o);e.uvMinAndExtents=new Gc({componentDatatype:J.FLOAT,componentsPerAttribute:4,normalize:!1,value:[i.x,i.y,s,a]})}var woe=new ge,Xoe=new m,iXe=new m,oXe=new m,GD={high:0,low:0};function Woe(e,t,n){let i=woe;i.height=0,i.longitude=e.west,i.latitude=e.south;let o=t.project(i,Xoe);i.latitude=e.north;let r=t.project(i,iXe);i.longitude=e.east,i.latitude=e.south;let s=t.project(i,oXe),a=[0,0,0,0],c=[0,0,0,0],d=ni.encode(o.x,GD);a[0]=d.high,c[0]=d.low,d=ni.encode(o.y,GD),a[1]=d.high,c[1]=d.low,d=ni.encode(r.y,GD),a[2]=d.high,c[2]=d.low,d=ni.encode(s.x,GD),a[3]=d.high,c[3]=d.low,n.planes2D_HIGH=new Gc({componentDatatype:J.FLOAT,componentsPerAttribute:4,normalize:!1,value:a}),n.planes2D_LOW=new Gc({componentDatatype:J.FLOAT,componentsPerAttribute:4,normalize:!1,value:c})}var rXe=new X,sXe=new X,Roe=new m,aXe=new ge,cXe=[new ge,new ge,new ge,new ge,new ge,new ge,new ge,new ge];function lXe(e,t,n,i,o,r){let s=le.center(e,aXe);s.height=n;let a=ge.toCartesian(s,t,Roe),c=Dt.eastNorthUpToFixedFrame(a,t,rXe),d=X.inverse(c,sXe),u=e.west,h=e.east,p=e.north,g=e.south,f=cXe;f[0].latitude=g,f[0].longitude=u,f[1].latitude=p,f[1].longitude=u,f[2].latitude=p,f[2].longitude=h,f[3].latitude=g,f[3].longitude=h;let b=(u+h)*.5,x=(p+g)*.5;f[4].latitude=g,f[4].longitude=b,f[5].latitude=p,f[5].longitude=b,f[6].latitude=x,f[6].longitude=u,f[7].latitude=x,f[7].longitude=h;let I=Number.POSITIVE_INFINITY,_=Number.NEGATIVE_INFINITY,E=Number.POSITIVE_INFINITY,S=Number.NEGATIVE_INFINITY;for(let w=0;w<8;w++){f[w].height=n;let F=ge.toCartesian(f[w],t,Roe);X.multiplyByPoint(d,F,F),F.z=0,I=Math.min(I,F.x),_=Math.max(_,F.x),E=Math.min(E,F.y),S=Math.max(S,F.y)}let R=i;R.x=I,R.y=E,R.z=0,X.multiplyByPoint(c,R,R);let G=o;G.x=_,G.y=E,G.z=0,X.multiplyByPoint(c,G,G),m.subtract(G,R,o);let B=r;B.x=I,B.y=S,B.z=0,X.multiplyByPoint(c,B,B),m.subtract(B,R,r)}var dXe=new m,uXe=new m,mXe=new ni;Hu.getPlanarTextureCoordinateAttributes=function(e,t,n,i,o){let r=Xoe,s=dXe,a=uXe;lXe(e,n,o??0,r,s,a);let c={};Boe(c,t);let d=ni.fromCartesian(r,mXe);return c.southWest_HIGH=new Gc({componentDatatype:J.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(d.high,[0,0,0])}),c.southWest_LOW=new Gc({componentDatatype:J.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(d.low,[0,0,0])}),c.eastward=new Gc({componentDatatype:J.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(s,[0,0,0])}),c.northward=new Gc({componentDatatype:J.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(a,[0,0,0])}),Woe(e,i,c),c};var hXe=new m;function Voe(e,t,n,i){let o=woe;o.latitude=e,o.longitude=t,o.height=0;let r=ge.toCartesian(o,n,hXe),s=Math.sqrt(r.x*r.x+r.y*r.y),a=Z.fastApproximateAtan2(s,r.z),c=Z.fastApproximateAtan2(r.x,r.y);return i.x=a,i.y=c,i}var Goe=new D;Hu.getSphericalExtentGeometryInstanceAttributes=function(e,t,n,i){let o=Voe(e.south,e.west,n,Goe),r=o.x,s=o.y,a=Voe(e.north,e.east,n,Goe),c=a.x,d=a.y,u=0;s>d&&(u=Z.PI-s,s=-Z.PI,d+=u),r-=Z.EPSILON5,s-=Z.EPSILON5,c+=Z.EPSILON5,d+=Z.EPSILON5;let h=1/(d-s),p=1/(c-r),g={sphericalExtents:new Gc({componentDatatype:J.FLOAT,componentsPerAttribute:4,normalize:!1,value:[r,s,p,h]}),longitudeRotation:new Gc({componentDatatype:J.FLOAT,componentsPerAttribute:1,normalize:!1,value:[u]})};return Boe(g,t),Woe(e,i,g),g};Hu.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)};Hu.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 fXe(e){return Math.max(e.width,e.height)>Hu.MAX_WIDTH_FOR_PLANAR_EXTENTS}Hu.shouldUseSphericalCoordinates=function(e){return fXe(e)};Hu.MAX_WIDTH_FOR_PLANAR_EXTENTS=Z.toRadians(1);var Pd=Hu;var Wjt=y(C(),1);var Rjt=y(C(),1);var pXe={NEVER:ne.NEVER,LESS:ne.LESS,EQUAL:ne.EQUAL,LESS_OR_EQUAL:ne.LEQUAL,GREATER:ne.GREATER,NOT_EQUAL:ne.NOTEQUAL,GREATER_OR_EQUAL:ne.GEQUAL,ALWAYS:ne.ALWAYS},ei=Object.freeze(pXe);var Zjt=y(C(),1);var AXe={ZERO:ne.ZERO,KEEP:ne.KEEP,REPLACE:ne.REPLACE,INCREMENT:ne.INCR,DECREMENT:ne.DECR,INVERT:ne.INVERT,INCREMENT_WRAP:ne.INCR_WRAP,DECREMENT_WRAP:ne.DECR_WRAP},Ct=Object.freeze(AXe);var ZD={CESIUM_3D_TILE_MASK:128,SKIP_LOD_MASK:112,SKIP_LOD_BIT_SHIFT:4,CLASSIFICATION_MASK:15};ZD.setCesium3DTileBit=function(){return{enabled:!0,frontFunction:ei.ALWAYS,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.REPLACE},backFunction:ei.ALWAYS,backOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.REPLACE},reference:ZD.CESIUM_3D_TILE_MASK,mask:ZD.CESIUM_3D_TILE_MASK}};var jt=Object.freeze(ZD);function sC(e){e=e??Y.EMPTY_OBJECT;let t=e.geometryInstances;this.geometryInstances=t,this.show=e.show??!0,this.classificationType=e.classificationType??$n.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(sC.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}}});sC.isSupported=function(e){return e.context.stencilBuffer};function q_(e,t){let n=t?ei.EQUAL:ei.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:e,frontFunction:n,frontOperation:{fail:Ct.KEEP,zFail:Ct.DECREMENT_WRAP,zPass:Ct.KEEP},backFunction:n,backOperation:{fail:Ct.KEEP,zFail:Ct.INCREMENT_WRAP,zPass:Ct.KEEP},reference:jt.CESIUM_3D_TILE_MASK,mask:jt.CESIUM_3D_TILE_MASK},stencilMask:jt.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:Fa.LESS_OR_EQUAL},depthMask:!1}}function gH(e){return{stencilTest:{enabled:e,frontFunction:ei.NOT_EQUAL,frontOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},backFunction:ei.NOT_EQUAL,backOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},reference:0,mask:jt.CLASSIFICATION_MASK},stencilMask:jt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:bn.PRE_MULTIPLIED_ALPHA_BLEND}}var gXe={stencilTest:{enabled:!0,frontFunction:ei.NOT_EQUAL,frontOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},backFunction:ei.NOT_EQUAL,backOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},reference:0,mask:jt.CLASSIFICATION_MASK},stencilMask:jt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function bXe(e,t,n,i){if(l(e._rsStencilDepthPass))return;let o=!e.debugShowShadowVolume;e._rsStencilDepthPass=Qe.fromCache(q_(o,!1)),e._rsStencilDepthPass3DTiles=Qe.fromCache(q_(o,!0)),e._rsColorPass=Qe.fromCache(gH(o,!1)),e._rsPickPass=Qe.fromCache(gXe)}function yXe(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=Oe.replaceMain(s,"czm_non_compressed_main");let a=`void main() { ${r} czm_non_compressed_main(); }`;return[i,o,s,a].join(` `)}}function CXe(e,t){let n=t.context,i=e._primitive,o=MG;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=yXe(i,o));let a=e._extruded?"EXTRUDED_GEOMETRY":"",c=new Oe({defines:[a],sources:[o]}),d=new Oe({sources:[Eb]}),u=e._primitive._attributeLocations,h=new Pd(s,r,e.appearance);if(e._spStencil=ln.replaceCache({context:n,shaderProgram:e._spStencil,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u}),e._primitive.allowPicking){let f=Oe.createPickVertexShaderSource(o);f=Nn._appendShowToShader(i,f),f=Nn._updatePickColorAttribute(f);let b=h.createPickFragmentShader(!1),x=h.createPickVertexShader([a],f,!1,t.mapProjection);if(e._spPick=ln.replaceCache({context:n,shaderProgram:e._spPick,vertexShaderSource:x,fragmentShaderSource:b,attributeLocations:u}),s){let I=n.shaderCache.getDerivedShaderProgram(e._spPick,"2dPick");if(!l(I)){let _=h.createPickFragmentShader(!0),E=h.createPickVertexShader([a],f,!0,t.mapProjection);I=n.shaderCache.createDerivedShaderProgram(e._spPick,"2dPick",{vertexShaderSource:E,fragmentShaderSource:_,attributeLocations:u})}e._spPick2D=I}}else e._spPick=ln.fromCache({context:n,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u});o=Nn._appendShowToShader(i,o),c=new Oe({defines:[a],sources:[o]}),e._sp=ln.replaceCache({context:n,shaderProgram:e._sp,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u});let p=h.createFragmentShader(!1),g=h.createVertexShader([a],o,!1,t.mapProjection);if(e._spColor=ln.replaceCache({context:n,shaderProgram:e._spColor,vertexShaderSource:g,fragmentShaderSource:p,attributeLocations:u}),s){let f=n.shaderCache.getDerivedShaderProgram(e._spColor,"2dColor");if(!l(f)){let b=h.createFragmentShader(!0),x=h.createVertexShader([a],o,!0,t.mapProjection);f=n.shaderCache.createDerivedShaderProgram(e._spColor,"2dColor",{vertexShaderSource:x,fragmentShaderSource:b,attributeLocations:u})}e._spColor2D=f}}function xXe(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=Pd.hasAttributesForSphericalExtents(c),g=Pd.hasAttributesForTextureCoordinatePlanes(c),h=c.color),s=0;s{l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};sC.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};sC.prototype.isDestroyed=function(){return!1};sC.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 $_=sC;var TXe={u_globeMinimumAltitude:function(){return 55e3}};function jl(e){e=e??Y.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))})};jl.prototype.getBoundingSphere=function(e){let t=this._boundingSpheresKeys.indexOf(e);if(t!==-1)return this._boundingSpheres[t]};jl.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};jl.prototype.isDestroyed=function(){return!1};jl.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};jl._supportsMaterials=function(e){return e.depthTexture};jl.supportsMaterials=function(e){return jl._supportsMaterials(e.frameState.context)};var cl=jl;var B8t=y(C(),1);function eE(){Ae.throwInstantiationError()}Object.defineProperties(eE.prototype,{isConstant:{get:Ae.throwInstantiationError},definitionChanged:{get:Ae.throwInstantiationError}});eE.prototype.getType=Ae.throwInstantiationError;eE.prototype.getValue=Ae.throwInstantiationError;eE.prototype.equals=Ae.throwInstantiationError;var XXe=new j;eE.getValue=function(e,t,n){let i;return l(e)||(e=j.now(XXe)),l(t)&&(i=t.getType(e),l(i))?((!l(n)||n.type!==i)&&(n=so.fromType(i)),t.getValue(e,n.uniforms),n):((!l(n)||n.type!==so.ColorType)&&(n=so.fromType(so.ColorType)),U.clone(U.WHITE,n.uniforms.color),n)};var dr=eE;function aC(e,t,n){this._primitives=t,this._orderedGroundPrimitives=n,this._primitive=void 0,this._outlinePrimitive=void 0,this._geometryUpdater=e,this._options=e._options,this._entity=e._entity,this._material=void 0}aC.prototype._isHidden=function(e,t,n){return!e.isShowing||!e.isAvailable(n)||!z.getValueOrDefault(t.show,n,!0)};aC.prototype._setOptions=Ae.throwInstantiationError;aC.prototype.update=function(e){let t=this._geometryUpdater,n=t._onTerrain,i=this._primitives,o=this._orderedGroundPrimitives;n?o.remove(this._primitive):(i.removeAndDestroy(this._primitive),i.removeAndDestroy(this._outlinePrimitive),this._outlinePrimitive=void 0),this._primitive=void 0;let r=this._entity,s=r[this._geometryUpdater._geometryPropertyName];if(this._setOptions(r,s,e),this._isHidden(r,s,e))return;let a=this._geometryUpdater.shadowsProperty.getValue(e),c=this._options;if(!l(s.fill)||s.fill.getValue(e)){let d=t.fillMaterialProperty,u=d instanceof qt,h,p=t._getIsClosed(c);if(u)h=new yn({closed:p,flat:n&&!t._supportsMaterialsforEntitiesOnTerrain});else{let g=dr.getValue(e,d,this._material);this._material=g,h=new Io({material:g,translucent:g.isTranslucent(),closed:p})}if(n)c.vertexFormat=yn.VERTEX_FORMAT,this._primitive=o.add(new cl({geometryInstances:this._geometryUpdater.createFillGeometryInstance(e),appearance:h,asynchronous:!1,shadows:a,classificationType:this._geometryUpdater.classificationTypeProperty.getValue(e)}),z.getValueOrUndefined(this._geometryUpdater.zIndex,e));else{c.vertexFormat=h.vertexFormat;let g=this._geometryUpdater.createFillGeometryInstance(e);u&&(h.translucent=g.attributes.color.value[3]!==255),this._primitive=i.add(new Nn({geometryInstances:g,appearance:h,asynchronous:!1,shadows:a}))}}if(!n&&l(s.outline)&&s.outline.getValue(e)){let d=this._geometryUpdater.createOutlineGeometryInstance(e),u=z.getValueOrDefault(s.outlineWidth,e,1);this._outlinePrimitive=i.add(new Nn({geometryInstances:d,appearance:new yn({flat:!0,translucent:d.attributes.color.value[3]!==255,renderState:{lineWidth:t._scene.clampLineWidth(u)}}),asynchronous:!1,shadows:a}))}};aC.prototype.getBoundingSphere=function(e){let t=this._entity,n=this._primitive,i=this._outlinePrimitive,o;return l(n)&&n.show&&n.ready&&(o=n.getGeometryInstanceAttributes(t),l(o)&&l(o.boundingSphere))?(ue.clone(o.boundingSphere,e),At.DONE):l(i)&&i.show&&i.ready&&(o=i.getGeometryInstanceAttributes(t),l(o)&&l(o.boundingSphere))?(ue.clone(o.boundingSphere,e),At.DONE):l(n)&&!n.ready||l(i)&&!i.ready?At.PENDING:At.FAILED};aC.prototype.isDestroyed=function(){return!1};aC.prototype.destroy=function(){let e=this._primitives,t=this._orderedGroundPrimitives;this._geometryUpdater._onTerrain?t.remove(this._primitive):e.removeAndDestroy(this._primitive),e.removeAndDestroy(this._outlinePrimitive),me(this)};var yi=aC;var fnn=y(C(),1);var K8t=y(C(),1);var Doe={};function UG(e,t){l(Doe[e])||(Doe[e]=!0,console.warn(t??e))}UG.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.";UG.geometryZIndex="Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored";UG.geometryHeightReference="Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored";UG.geometryExtrudedHeightReference="Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored";var xt=UG;var qtn=y(C(),1);var j8t=y(C(),1),WXe={AUTODETECT:0,ENU:1,INERTIAL:2,VELOCITY:3},rA=Object.freeze(WXe);var eqt=y(C(),1);var Q7t=y(C(),1);var $8t=y(C(),1),FXe={NONE:0,GEODESIC:1,RHUMB:2},dn=Object.freeze(FXe);var i7t=y(C(),1);var Qoe=Z.EPSILON10;function PXe(e,t,n,i){if(!l(e))return;n=n??!1;let o=l(i),r=e.length;if(r<2)return e;let s,a=e[0],c,d,u=0,h=-1;for(s=1;sZ.EPSILON12);let T=P*(t*t-n*n)/(n*n),L=1+T*(4096+T*(T*(320-175*T)-768))/16384,V=T*(256+T*(T*(74-47*T)-128))/1024,W=A*A,M=V*F*(A+V*(w*(2*W-1)-V*A*(4*F*F-3)*(4*W-3)/6)/4),Q=n*L*(B-M),N=Math.atan2(g*G,x-_*R),k=Math.atan2(h*G,x*R-_);e._distance=Q,e._startHeading=N,e._endHeading=k,e._uSquared=T}var DXe=new m,CH=new m;function koe(e,t,n,i){let o=m.normalize(i.cartographicToCartesian(t,CH),DXe),r=m.normalize(i.cartographicToCartesian(n,CH),CH);NXe(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude),e._start=ge.clone(t,e._start),e._end=ge.clone(n,e._end),e._start.height=0,e._end.height=0,MXe(e)}function kG(e,t,n){let i=n??ie.default;this._ellipsoid=i,this._start=new ge,this._end=new ge,this._constants={},this._startHeading=void 0,this._endHeading=void 0,this._distance=void 0,this._uSquared=void 0,l(e)&&l(t)&&koe(this,e,t,i)}Object.defineProperties(kG.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}}});kG.prototype.setEndPoints=function(e,t){koe(this,e,t,this._ellipsoid)};kG.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(this._distance*e,t)};kG.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),h=i*i,p=i*h,g=n.u8Over256,f=n.u2Over4,b=n.u6Over64,x=n.u4Over16,I=2*p*g*o/3+i*(1-f+7*x/4-15*b/4+579*g/64-(x-15*b/4+187*g/16)*o-(5*b/4-115*g/16)*r-29*g*s/16)+(f/2-x+71*b/32-85*g/16)*a+(5*x/16-5*b/4+383*g/96)*c-h*((b-11*g/2)*a+5*g*c/2)+(29*b/96-29*g/16)*d+539*g*u/1536,_=Math.asin(Math.sin(I)*n.cosineAlpha),E=Math.atan(n.a/n.b*Math.tan(_));I=I-n.sigma;let S=Math.cos(2*n.sigma+I),R=Math.sin(I),G=Math.cos(I),B=n.cosineU*G,w=n.sineU*R,P=Math.atan2(R*n.sineHeading,B-w*n.cosineHeading)-Uoe(n.f,n.sineAlpha,n.cosineSquaredAlpha,I,R,G,S);return l(t)?(t.longitude=this._start.longitude+P,t.latitude=E,t.height=0,t):new ge(this._start.longitude+P,E,0)};var sA=kG;var g7t=y(C(),1);function IH(e,t,n){if(e===0)return t*n;let i=e*e,o=i*i,r=o*i,s=r*i,a=s*i,c=a*i,d=n,u=Math.sin(2*d),h=Math.sin(4*d),p=Math.sin(6*d),g=Math.sin(8*d),f=Math.sin(10*d),b=Math.sin(12*d);return t*((1-i/4-3*o/64-5*r/256-175*s/16384-441*a/65536-4851*c/1048576)*d-(3*i/8+3*o/32+45*r/1024+105*s/4096+2205*a/131072+6237*c/524288)*u+(15*o/256+45*r/1024+525*s/16384+1575*a/65536+155925*c/8388608)*h-(35*r/3072+175*s/12288+3675*a/262144+13475*c/1048576)*p+(315*s/131072+2205*a/524288+43659*c/8388608)*g-(693*a/1310720+6237*c/5242880)*f+1001*c/8388608*b)}function QXe(e,t,n){let i=e/n;if(t===0)return i;let o=i*i,r=o*i,s=r*i,a=t,c=a*a,d=c*c,u=d*c,h=u*c,p=h*c,g=p*c,f=Math.sin(2*i),b=Math.cos(2*i),x=Math.sin(4*i),I=Math.cos(4*i),_=Math.sin(6*i),E=Math.cos(6*i),S=Math.sin(8*i),R=Math.cos(8*i),G=Math.sin(10*i),B=Math.cos(10*i),w=Math.sin(12*i);return i+i*c/4+7*i*d/64+15*i*u/256+579*i*h/16384+1515*i*p/65536+16837*i*g/1048576+(3*i*d/16+45*i*u/256-i*(32*o-561)*h/4096-i*(232*o-1677)*p/16384+i*(399985-90560*o+512*s)*g/5242880)*b+(21*i*u/256+483*i*h/4096-i*(224*o-1969)*p/16384-i*(33152*o-112599)*g/1048576)*I+(151*i*h/4096+4681*i*p/65536+1479*i*g/16384-453*r*g/32768)*E+(1097*i*p/65536+42783*i*g/1048576)*R+8011*i*g/1048576*B+(3*c/8+3*d/16+213*u/2048-3*o*u/64+255*h/4096-33*o*h/512+20861*p/524288-33*o*p/512+s*p/1024+28273*g/1048576-471*o*g/8192+9*s*g/4096)*f+(21*d/256+21*u/256+533*h/8192-21*o*h/512+197*p/4096-315*o*p/4096+584039*g/16777216-12517*o*g/131072+7*s*g/2048)*x+(151*u/6144+151*h/4096+5019*p/131072-453*o*p/16384+26965*g/786432-8607*o*g/131072)*_+(1097*h/131072+1097*p/65536+225797*g/10485760-1097*o*g/65536)*S+(8011*p/2621440+8011*g/1048576)*G+293393*g/251658240*w}function tE(e,t){if(e===0)return Math.log(Math.tan(.5*(Z.PI_OVER_TWO+t)));let n=e*Math.sin(t);return Math.log(Math.tan(.5*(Z.PI_OVER_TWO+t)))-e/2*Math.log((1+n)/(1-n))}function UXe(e,t,n,i,o){let r=tE(e._ellipticity,n),s=tE(e._ellipticity,o);return Math.atan2(Z.negativePiToPi(i-t),s-r)}function kXe(e,t,n,i,o,r,s){let a=e._heading,c=r-i,d=0;if(Z.equalsEpsilon(Math.abs(a),Z.PI_OVER_TWO,Z.EPSILON8))if(t===n)d=t*Math.cos(o)*Z.negativePiToPi(c);else{let u=Math.sin(o);d=t*Math.cos(o)*Z.negativePiToPi(c)/Math.sqrt(1-e._ellipticitySquared*u*u)}else{let u=IH(e._ellipticity,t,o);d=(IH(e._ellipticity,t,s)-u)/Math.cos(a)}return Math.abs(d)}var YXe=new m,xH=new m;function Yoe(e,t,n,i){let o=m.normalize(i.cartographicToCartesian(t,xH),YXe),r=m.normalize(i.cartographicToCartesian(n,xH),xH),s=i.maximumRadius,a=i.minimumRadius,c=s*s,d=a*a;e._ellipticitySquared=(c-d)/c,e._ellipticity=Math.sqrt(e._ellipticitySquared),e._start=ge.clone(t,e._start),e._start.height=0,e._end=ge.clone(n,e._end),e._end.height=0,e._heading=UXe(e,t.longitude,t.latitude,n.longitude,n.latitude),e._distance=kXe(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude)}function Ooe(e,t,n,i,o,r){if(n===0)return ge.clone(e,r);let s=o*o,a,c,d;if(Math.abs(Z.PI_OVER_TWO-Math.abs(t))>Z.EPSILON8){let u=IH(o,i,e.latitude),h=n*Math.cos(t),p=u+h;if(c=QXe(p,o,i),Math.abs(t)0?a=Z.negativePiToPi(e.longitude+d):a=Z.negativePiToPi(e.longitude-d)}return l(r)?(r.longitude=a,r.latitude=c,r.height=0,r):new ge(a,c,0)}function aA(e,t,n){let i=n??ie.default;this._ellipsoid=i,this._start=new ge,this._end=new ge,this._heading=void 0,this._distance=void 0,this._ellipticity=void 0,this._ellipticitySquared=void 0,l(e)&&l(t)&&Yoe(this,e,t,i)}Object.defineProperties(aA.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}}});aA.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=Z.negativePiToPi(t);let h=Ooe(e,t,n,r.maximumRadius,u);return!l(o)||l(i)&&!i.equals(o.ellipsoid)?new aA(e,h,r):(o.setEndPoints(e,h),o)};aA.prototype.setEndPoints=function(e,t){Yoe(this,e,t,this._ellipsoid)};aA.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(e*this._distance,t)};aA.prototype.interpolateUsingSurfaceDistance=function(e,t){return Ooe(this._start,this._heading,e,this._ellipsoid.maximumRadius,this._ellipticity,t)};aA.prototype.findIntersectionWithLongitude=function(e,t){let n=this._ellipticity,i=this._heading,o=Math.abs(i),r=this._start;if(e=Z.negativePiToPi(e),Z.equalsEpsilon(Math.abs(e),Math.PI,Z.EPSILON14)&&(e=Z.sign(r.longitude)*Math.PI),l(t)||(t=new ge),Math.abs(Z.PI_OVER_TWO-o)<=Z.EPSILON8)return t.longitude=e,t.latitude=r.latitude,t.height=0,t;if(Z.equalsEpsilon(Math.abs(Z.PI_OVER_TWO-o),Z.PI_OVER_TWO,Z.EPSILON8))return Z.equalsEpsilon(e,r.longitude,Z.EPSILON12)?void 0:(t.longitude=e,t.latitude=Z.PI_OVER_TWO*Z.sign(Z.PI_OVER_TWO-i),t.height=0,t);let s=r.latitude,a=n*Math.sin(s),c=Math.tan(.5*(Z.PI_OVER_TWO+s))*Math.exp((e-r.longitude)/Math.tan(i)),d=(1+a)/(1-a),u=r.latitude,h;do{h=u;let p=n*Math.sin(h),g=(1+p)/(1-p);u=2*Math.atan(c*Math.pow(g/d,n/2))-Z.PI_OVER_TWO}while(!Z.equalsEpsilon(u,h,Z.EPSILON12));return t.longitude=e,t.latitude=u,t.height=0,t};aA.prototype.findIntersectionWithLatitude=function(e,t){let n=this._ellipticity,i=this._heading,o=this._start;if(Z.equalsEpsilon(Math.abs(i),Z.PI_OVER_TWO,Z.EPSILON8))return;let r=tE(n,o.latitude),s=tE(n,e),a=Math.tan(i)*(s-r),c=Z.negativePiToPi(o.longitude+a);return l(t)?(t.longitude=c,t.latitude=e,t.height=0,t):new ge(c,e,0)};var cc=aA;var GH=[Di,Ui],OXe=GH.length,mre=Math.cos(Z.toRadians(30)),Hoe=Math.cos(Z.toRadians(150)),hre=0,fre=1e3;function Sb(e){e=e??Y.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??dn.GEODESIC,this._ellipsoid=ie.default,this._projectionIndex=0,this._workerName="createGroundPolylineGeometry",this._scene3DOnly=!1}Object.defineProperties(Sb.prototype,{packedLength:{get:function(){return 1+this._positions.length*3+1+1+1+ie.packedLength+1+1}}});Sb.setProjectionAndEllipsoid=function(e,t){let n=0;for(let i=0;imre||rZ.PI_OVER_TWO&&(a=!0,s=m.subtract(r,n,tre),d=c.cartesianToCartographic(s,ere)),d.height=0;let u=e.project(d,o);return o=m.subtract(u,i,o),o.z=0,o=m.normalize(o,o),a&&m.negate(o,o),o}var m2e=new m,nre=new m;function ire(e,t,n,i,o,r){let s=m.subtract(t,e,m2e);m.normalize(s,s);let a=n-hre,c=m.multiplyByScalar(s,a,nre);m.add(e,c,o);let d=i-fre;c=m.multiplyByScalar(s,d,nre),m.add(t,c,r)}var h2e=new m;function WD(e,t){let n=An.getPointDistance(FD,e),i=An.getPointDistance(FD,t),o=h2e;Z.equalsEpsilon(n,0,Z.EPSILON2)?(o=cA(t,e,o),m.multiplyByScalar(o,Z.EPSILON2,o),m.add(e,o,e)):Z.equalsEpsilon(i,0,Z.EPSILON2)&&(o=cA(e,t,o),m.multiplyByScalar(o,Z.EPSILON2,o),m.add(t,o,t))}function f2e(e,t){let n=Math.abs(e.longitude),i=Math.abs(t.longitude);if(Z.equalsEpsilon(n,Z.PI,Z.EPSILON11)){let o=Z.sign(t.longitude);return e.longitude=o*(n-Z.EPSILON11),1}else if(Z.equalsEpsilon(i,Z.PI,Z.EPSILON11)){let o=Z.sign(e.longitude);return t.longitude=o*(i-Z.EPSILON11),2}return 0}var Are=new ge,gre=new ge,ore=new m,SH=new m,rre=new m,sre=new m,p2e=new m,are=new m,A2e=[Are,gre],g2e=new le,b2e=new m,y2e=new m,C2e=new m,x2e=new m,I2e=new m,_2e=new m,LH=new m,RH=new m,E2e=new m,T2e=new m,S2e=new m,cre=new m,L2e=new m,R2e=new m,V2e=new ni,G2e=new ni,lre=new m,Z2e=new m,dre=new m,B2e=[new ue,new ue],bre=[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],ure=bre.length;function w2e(e,t,n,i,o,r,s){let a,c,d=t._ellipsoid,u=n.length/3-1,h=u*8,p=h*4,g=u*36,f=h>65535?new Uint32Array(g):new Uint16Array(g),b=new Float64Array(h*3),x=new Float32Array(p),I=new Float32Array(p),_=new Float32Array(p),E=new Float32Array(p),S=new Float32Array(p),R,G,B,w;s&&(R=new Float32Array(p),G=new Float32Array(p),B=new Float32Array(p),w=new Float32Array(h*2));let F=r.length/2,P=0,A=Are;A.height=0;let T=gre;T.height=0;let L=ore,V=SH;if(s)for(c=0,a=1;amre?(nn=YG(t,A,Ue,je,LH),rt=YG(t,T,te,it,RH)):Ti===1?(rt=YG(t,T,te,it,RH),nn.x=0,nn.y=Z.sign(A.longitude-Math.abs(T.longitude)),nn.z=0):(nn=YG(t,A,Ue,je,LH),rt.x=0,rt.y=Z.sign(A.longitude-T.longitude),rt.z=0)}let rn=m.distance(De,K),Jt=ni.fromCartesian(Le,V2e),Xt=m.subtract(ee,Le,E2e),Li=m.normalize(Xt,cre),bi=m.subtract(De,Le,T2e);bi=m.normalize(bi,bi);let vt=m.cross(Li,bi,cre);vt=m.normalize(vt,vt);let Rt=m.cross(bi,Ue,L2e);Rt=m.normalize(Rt,Rt);let si=m.subtract(K,ee,S2e);si=m.normalize(si,si);let _t=m.cross(te,si,R2e);_t=m.normalize(_t,_t);let Fo=rn/M,Uo=q/M,Va=0,Cr,wr,ve,ut=0,qe=0;if(s){Va=m.distance(je,it),Cr=ni.fromCartesian(je,G2e),wr=m.subtract(it,je,lre),ve=m.normalize(wr,Z2e);let Ti=ve.x;ve.x=ve.y,ve.y=-Ti,ut=Va/P,qe=pe/P}for(Q=0;Q<8;Q++){let Ti=O+Q*4,Rs=k+Q*2,Jo=Ti+3,Ga=Q<4?1:-1,po=Q===2||Q===3||Q===6||Q===7?1:-1;m.pack(Jt.high,x,Ti),x[Jo]=Xt.x,m.pack(Jt.low,I,Ti),I[Jo]=Xt.y,m.pack(Rt,_,Ti),_[Jo]=Xt.z,m.pack(_t,E,Ti),E[Jo]=Fo*Ga,m.pack(vt,S,Ti);let jo=Uo*po;jo===0&&po<0&&(jo=9),S[Jo]=jo,s&&(R[Ti]=Cr.high.x,R[Ti+1]=Cr.high.y,R[Ti+2]=Cr.low.x,R[Ti+3]=Cr.low.y,B[Ti]=-nn.y,B[Ti+1]=nn.x,B[Ti+2]=rt.y,B[Ti+3]=-rt.x,G[Ti]=wr.x,G[Ti+1]=wr.y,G[Ti+2]=ve.x,G[Ti+3]=ve.y,w[Rs]=ut*Ga,jo=qe*po,jo===0&&po<0&&(jo=9),w[Rs+1]=jo)}let nt=C2e,yt=x2e,$t=b2e,Sn=y2e,fo=le.fromCartographicArray(A2e,g2e),uo=Si.getMinimumMaximumHeights(fo,d),ra=uo.minimumTerrainHeight,sa=uo.maximumTerrainHeight;ye+=Math.abs(ra),ye+=Math.abs(sa),ire(Le,De,ra,sa,nt,$t),ire(ee,K,ra,sa,yt,Sn);let Hn=m.multiplyByScalar(vt,Z.EPSILON5,dre);m.add(nt,Hn,nt),m.add(yt,Hn,yt),m.add($t,Hn,$t),m.add(Sn,Hn,Sn),WD(nt,yt),WD($t,Sn),m.pack(nt,b,v),m.pack(yt,b,v+3),m.pack(Sn,b,v+6),m.pack($t,b,v+9),Hn=m.multiplyByScalar(vt,-2*Z.EPSILON5,dre),m.add(nt,Hn,nt),m.add(yt,Hn,yt),m.add($t,Hn,$t),m.add(Sn,Hn,Sn),WD(nt,yt),WD($t,Sn),m.pack(nt,b,v+12),m.pack(yt,b,v+15),m.pack(Sn,b,v+18),m.pack($t,b,v+21),N+=2,c+=3,k+=16,v+=24,O+=32,q+=rn,pe+=Va}c=0;let he=0;for(a=0;a 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 O7t=y(C(),1),HG=`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 z7t=y(C(),1),zG=`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 J7t=y(C(),1),KG=`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 l6t=y(C(),1);var q7t=y(C(),1),JG=`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 e6t=y(C(),1),Md=`void clipLineSegmentToNearPlane( vec3 p0, vec3 p1, out vec4 positionWC, out bool clipped, out bool culledByNearPlane, out vec4 clippedPositionEC) { culledByNearPlane = false; clipped = false; vec3 p0ToP1 = p1 - p0; float magnitude = length(p0ToP1); vec3 direction = normalize(p0ToP1); // Distance that p0 is behind the near plane. Negative means p0 is // in front of the near plane. float endPoint0Distance = czm_currentFrustum.x + p0.z; // Camera looks down -Z. // When moving a point along +Z: LESS VISIBLE // * Points in front of the camera move closer to the camera. // * Points behind the camrea move farther away from the camera. // When moving a point along -Z: MORE VISIBLE // * Points in front of the camera move farther away from the camera. // * Points behind the camera move closer to the camera. // Positive denominator: -Z, becoming more visible // Negative denominator: +Z, becoming less visible // Nearly zero: parallel to near plane float denominator = -direction.z; if (endPoint0Distance > 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 ZH=`${Md} ${JG}`,X2e=tC;Ht.isInternetExplorer()||(ZH=`#define CLIP_POLYLINE ${ZH}`);function lC(e){e=e??Y.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=lC.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??ZH,this._fragmentShaderSource=e.fragmentShaderSource??X2e,this._renderState=go.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(lC.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}}});lC.VERTEX_FORMAT=we.POSITION_ONLY;lC.prototype.getFragmentShaderSource=go.prototype.getFragmentShaderSource;lC.prototype.isTranslucent=go.prototype.isTranslucent;lC.prototype.getRenderState=go.prototype.getRenderState;var bs=lC;var E6t=y(C(),1);var u6t=y(C(),1),jG=`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 h6t=y(C(),1),dC=`#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 BH=`${Md} ${jG}`,W2e=dC;Ht.isInternetExplorer()||(BH=`#define CLIP_POLYLINE ${BH}`);function uC(e){e=e??Y.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=uC.VERTEX_FORMAT;this.material=l(e.material)?e.material:so.fromType(so.ColorType),this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??BH,this._fragmentShaderSource=e.fragmentShaderSource??W2e,this._renderState=go.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(uC.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}}});uC.VERTEX_FORMAT=we.POSITION_AND_ST;uC.prototype.getFragmentShaderSource=go.prototype.getFragmentShaderSource;uC.prototype.isTranslucent=go.prototype.isTranslucent;uC.prototype.getRenderState=go.prototype.getRenderState;var Pa=uC;function lA(e){e=e??Y.EMPTY_OBJECT,this.geometryInstances=e.geometryInstances,this._hasPerInstanceColors=!0;let t=e.appearance;l(t)||(t=new Pa),this.appearance=t,this.show=e.show??!0,this.classificationType=e.classificationType??$n.BOTH,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this._debugShowShadowVolume=e.debugShowShadowVolume??!1,this._primitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:!1,interleave:e.interleave??!1,releaseGeometryInstances:e.releaseGeometryInstances??!0,allowPicking:e.allowPicking??!0,asynchronous:e.asynchronous??!0,compressVertices:!1,_createShaderProgramFunction:void 0,_createCommandsFunction:void 0,_updateAndQueueCommandsFunction:void 0},this._zIndex=void 0,this._ready=!1,this._primitive=void 0,this._sp=void 0,this._sp2D=void 0,this._spMorph=void 0,this._renderState=yre(!1),this._renderState3DTiles=yre(!0),this._renderStateMorph=Qe.fromCache({cull:{enabled:!0,face:Xi.FRONT},depthTest:{enabled:!0},blending:bn.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1})}Object.defineProperties(lA.prototype,{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}},ready:{get:function(){return this._ready}},debugShowShadowVolume:{get:function(){return this._debugShowShadowVolume}}});lA.initializeTerrainHeights=function(){return Si.initialize()};function F2e(e,t,n){let i=t.context,o=e._primitive,r=o._attributeLocations,s=o._batchTable.getVertexShaderCallback()(KG);s=Nn._appendShowToShader(o,s),s=Nn._appendDistanceDisplayConditionToShader(o,s),s=Nn._modifyShaderPosition(e,s,t.scene3DOnly);let a=o._batchTable.getVertexShaderCallback()(zG);a=Nn._appendShowToShader(o,a),a=Nn._appendDistanceDisplayConditionToShader(o,a),a=Nn._modifyShaderPosition(e,a,t.scene3DOnly);let c=o._batchTable.getVertexShaderCallback()(OG),d=[`GLOBE_MINIMUM_ALTITUDE ${t.mapProjection.ellipsoid.minimumRadius.toFixed(1)}`],u="",h="";l(n.material)?(h=l(n.material)?n.material.shaderSource:"",h.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&d.push("ANGLE_VARYING"),h.search(/in\s+float\s+v_width;/g)!==-1&&d.push("WIDTH_VARYING")):u="PER_INSTANCE_COLOR",d.push(u);let p=e.debugShowShadowVolume?["DEBUG_SHOW_VOLUME",u]:[u],g=new Oe({defines:d,sources:[s]}),f=new Oe({defines:p,sources:[h,c]});e._sp=ln.replaceCache({context:i,shaderProgram:o._sp,vertexShaderSource:g,fragmentShaderSource:f,attributeLocations:r});let b=i.shaderCache.getDerivedShaderProgram(e._sp,"2dColor");if(!l(b)){let I=new Oe({defines:d.concat(["COLUMBUS_VIEW_2D"]),sources:[s]});b=i.shaderCache.createDerivedShaderProgram(e._sp,"2dColor",{context:i,shaderProgram:e._sp2D,vertexShaderSource:I,fragmentShaderSource:f,attributeLocations:r})}e._sp2D=b;let x=i.shaderCache.getDerivedShaderProgram(e._sp,"MorphColor");if(!l(x)){let I=new Oe({defines:d.concat([`MAX_TERRAIN_HEIGHT ${Si._defaultMaxTerrainHeight.toFixed(1)}`]),sources:[a]});c=o._batchTable.getVertexShaderCallback()(HG);let _=new Oe({defines:p,sources:[h,c]});x=i.shaderCache.createDerivedShaderProgram(e._sp,"MorphColor",{context:i,shaderProgram:e._spMorph,vertexShaderSource:I,fragmentShaderSource:_,attributeLocations:r})}e._spMorph=x}function yre(e){return Qe.fromCache({cull:{enabled:!0},blending:bn.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:ei.EQUAL,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},backFunction:ei.EQUAL,backOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},reference:jt.CESIUM_3D_TILE_MASK,mask:jt.CESIUM_3D_TILE_MASK}})}function P2e(e,t,n,i,o,r){let s=e._primitive,a=s._va.length;o.length=a,r.length=a;let d=t instanceof bs?{}:n._uniforms,u=s._batchTable.getUniformMapCallback()(d);for(let h=0;h{!this._ready&&l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};lA.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};lA.isSupported=function(e){return e.frameState.context.depthTexture};lA.prototype.isDestroyed=function(){return!1};lA.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 ch=lA;var Eqt=y(C(),1);var gqt=y(C(),1);var dqt=y(C(),1);var v2e=new D(1,1),N2e=!1,D2e=U.WHITE;function nE(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new Ce,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(nE.prototype,{isConstant:{get:function(){return z.isConstant(this._image)&&z.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},image:fe("image"),repeat:fe("repeat"),color:fe("color"),transparent:fe("transparent")});nE.prototype.getType=function(e){return"Image"};var Q2e=new j;nE.prototype.getValue=function(e,t){return l(e)||(e=j.now(Q2e)),l(t)||(t={}),t.image=z.getValueOrUndefined(this._image,e),t.repeat=z.getValueOrClonedDefault(this._repeat,e,v2e,t.repeat),t.color=z.getValueOrClonedDefault(this._color,e,D2e,t.color),z.getValueOrDefault(this._transparent,e,N2e)&&(t.color.alpha=Math.min(.99,t.color.alpha)),t};nE.prototype.equals=function(e){return this===e||e instanceof nE&&z.equals(this._image,e._image)&&z.equals(this._repeat,e._repeat)&&z.equals(this._color,e._color)&&z.equals(this._transparent,e._transparent)};var Lb=nE;function U2e(e){if(e instanceof U)return new qt(e);if(typeof e=="string"||e instanceof Ve||e instanceof HTMLCanvasElement||e instanceof HTMLVideoElement){let t=new Lb;return t.image=e,t}}function k2e(e,t){return fe(e,t,U2e)}var Oo=k2e;function qG(e){this._definitionChanged=new Ce,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??Y.EMPTY_OBJECT)}Object.defineProperties(qG.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:fe("show"),dimensions:fe("dimensions"),heightReference:fe("heightReference"),fill:fe("fill"),material:Oo("material"),outline:fe("outline"),outlineColor:fe("outlineColor"),outlineWidth:fe("outlineWidth"),shadows:fe("shadows"),distanceDisplayCondition:fe("distanceDisplayCondition")});qG.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 qG(this)};qG.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 mC=qG;var Qqt=y(C(),1);var Sqt=y(C(),1),Y2e={FIXED:0,INERTIAL:1},eo=Object.freeze(Y2e);var Xqt=y(C(),1);function iE(){Ae.throwInstantiationError()}Object.defineProperties(iE.prototype,{isConstant:{get:Ae.throwInstantiationError},definitionChanged:{get:Ae.throwInstantiationError},referenceFrame:{get:Ae.throwInstantiationError}});iE.prototype.getValue=Ae.throwInstantiationError;iE.prototype.getValueInReferenceFrame=Ae.throwInstantiationError;iE.prototype.equals=Ae.throwInstantiationError;var xre=new $;iE.convertToReferenceFrame=function(e,t,n,i,o){if(!l(t))return t;if(l(o)||(o=new m),n===i)return m.clone(t,o);let r=Dt.computeIcrfToCentralBodyFixedMatrix(e,xre);if(n===eo.INERTIAL)return $.multiplyByVector(r,t,o);if(n===eo.FIXED)return $.multiplyByVector($.transpose(r,xre),t,o)};var lh=iE;function hC(e,t){this._definitionChanged=new Ce,this._value=m.clone(e),this._referenceFrame=t??eo.FIXED}Object.defineProperties(hC.prototype,{isConstant:{get:function(){return!l(this._value)||this._referenceFrame===eo.FIXED}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var O2e=new j;hC.prototype.getValue=function(e,t){return l(e)||(e=j.now(O2e)),this.getValueInReferenceFrame(e,eo.FIXED,t)};hC.prototype.setValue=function(e,t){let n=!1;m.equals(this._value,e)||(n=!0,this._value=m.clone(e)),l(t)&&this._referenceFrame!==t&&(n=!0,this._referenceFrame=t),n&&this._definitionChanged.raiseEvent(this)};hC.prototype.getValueInReferenceFrame=function(e,t,n){return lh.convertToReferenceFrame(e,this._value,this._referenceFrame,t,n)};hC.prototype.equals=function(e){return this===e||e instanceof hC&&m.equals(this._value,e._value)&&this._referenceFrame===e._referenceFrame};var dl=hC;var Kqt=y(C(),1);function $G(e){this._definitionChanged=new Ce,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??Y.EMPTY_OBJECT)}Object.defineProperties($G.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:fe("show"),positions:fe("positions"),width:fe("width"),height:fe("height"),heightReference:fe("heightReference"),extrudedHeight:fe("extrudedHeight"),extrudedHeightReference:fe("extrudedHeightReference"),cornerType:fe("cornerType"),granularity:fe("granularity"),fill:fe("fill"),material:Oo("material"),outline:fe("outline"),outlineColor:fe("outlineColor"),outlineWidth:fe("outlineWidth"),shadows:fe("shadows"),distanceDisplayCondition:fe("distanceDisplayCondition"),classificationType:fe("classificationType"),zIndex:fe("zIndex")});$G.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 $G(this)};$G.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 fC=$G;var qqt=y(C(),1);function H2e(e){return e}function z2e(e,t){return fe(e,t,H2e)}var ul=z2e;var r$t=y(C(),1);function eZ(e){this._definitionChanged=new Ce,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??Y.EMPTY_OBJECT)}Object.defineProperties(eZ.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:fe("show"),length:fe("length"),topRadius:fe("topRadius"),bottomRadius:fe("bottomRadius"),heightReference:fe("heightReference"),fill:fe("fill"),material:Oo("material"),outline:fe("outline"),outlineColor:fe("outlineColor"),outlineWidth:fe("outlineWidth"),numberOfVerticalLines:fe("numberOfVerticalLines"),slices:fe("slices"),shadows:fe("shadows"),distanceDisplayCondition:fe("distanceDisplayCondition")});eZ.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 eZ(this)};eZ.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 pC=eZ;var m$t=y(C(),1);function tZ(e){this._definitionChanged=new Ce,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??Y.EMPTY_OBJECT)}Object.defineProperties(tZ.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:fe("show"),semiMajorAxis:fe("semiMajorAxis"),semiMinorAxis:fe("semiMinorAxis"),height:fe("height"),heightReference:fe("heightReference"),extrudedHeight:fe("extrudedHeight"),extrudedHeightReference:fe("extrudedHeightReference"),rotation:fe("rotation"),stRotation:fe("stRotation"),granularity:fe("granularity"),fill:fe("fill"),material:Oo("material"),outline:fe("outline"),outlineColor:fe("outlineColor"),outlineWidth:fe("outlineWidth"),numberOfVerticalLines:fe("numberOfVerticalLines"),shadows:fe("shadows"),distanceDisplayCondition:fe("distanceDisplayCondition"),classificationType:fe("classificationType"),zIndex:fe("zIndex")});tZ.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 tZ(this)};tZ.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 AC=tZ;var y$t=y(C(),1);function nZ(e){this._definitionChanged=new Ce,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??Y.EMPTY_OBJECT)}Object.defineProperties(nZ.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:fe("show"),radii:fe("radii"),innerRadii:fe("innerRadii"),minimumClock:fe("minimumClock"),maximumClock:fe("maximumClock"),minimumCone:fe("minimumCone"),maximumCone:fe("maximumCone"),heightReference:fe("heightReference"),fill:fe("fill"),material:Oo("material"),outline:fe("outline"),outlineColor:fe("outlineColor"),outlineWidth:fe("outlineWidth"),stackPartitions:fe("stackPartitions"),slicePartitions:fe("slicePartitions"),subdivisions:fe("subdivisions"),shadows:fe("shadows"),distanceDisplayCondition:fe("distanceDisplayCondition")});nZ.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 nZ(this)};nZ.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 gC=nZ;var T$t=y(C(),1);function iZ(e){this._definitionChanged=new Ce,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??Y.EMPTY_OBJECT)}Object.defineProperties(iZ.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:fe("show"),text:fe("text"),font:fe("font"),style:fe("style"),scale:fe("scale"),showBackground:fe("showBackground"),backgroundColor:fe("backgroundColor"),backgroundPadding:fe("backgroundPadding"),pixelOffset:fe("pixelOffset"),eyeOffset:fe("eyeOffset"),horizontalOrigin:fe("horizontalOrigin"),verticalOrigin:fe("verticalOrigin"),heightReference:fe("heightReference"),fillColor:fe("fillColor"),outlineColor:fe("outlineColor"),outlineWidth:fe("outlineWidth"),translucencyByDistance:fe("translucencyByDistance"),pixelOffsetScaleByDistance:fe("pixelOffsetScaleByDistance"),scaleByDistance:fe("scaleByDistance"),distanceDisplayCondition:fe("distanceDisplayCondition"),disableDepthTestDistance:fe("disableDepthTestDistance")});iZ.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 iZ(this)};iZ.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 dh=iZ;var ten=y(C(),1);var v$t=y(C(),1);var G$t=y(C(),1);var K2e=new m(1,1,1),J2e=m.ZERO,j2e=Pe.IDENTITY;function Ire(e,t,n){this.translation=m.clone(e??J2e),this.rotation=Pe.clone(t??j2e),this.scale=m.clone(n??K2e)}Ire.prototype.equals=function(e){return this===e||l(e)&&m.equals(this.translation,e.translation)&&Pe.equals(this.rotation,e.rotation)&&m.equals(this.scale,e.scale)};var Rb=Ire;var wH=new Rb;function oZ(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new Ce,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(oZ.prototype,{isConstant:{get:function(){return z.isConstant(this._translation)&&z.isConstant(this._rotation)&&z.isConstant(this._scale)}},definitionChanged:{get:function(){return this._definitionChanged}},translation:fe("translation"),rotation:fe("rotation"),scale:fe("scale")});var q2e=new j;oZ.prototype.getValue=function(e,t){return l(e)||(e=j.now(q2e)),l(t)||(t=new Rb),t.translation=z.getValueOrClonedDefault(this._translation,e,wH.translation,t.translation),t.rotation=z.getValueOrClonedDefault(this._rotation,e,wH.rotation,t.rotation),t.scale=z.getValueOrClonedDefault(this._scale,e,wH.scale,t.scale),t};oZ.prototype.equals=function(e){return this===e||e instanceof oZ&&z.equals(this._translation,e._translation)&&z.equals(this._rotation,e._rotation)&&z.equals(this._scale,e._scale)};var bC=oZ;var H$t=y(C(),1);function dA(e,t){this._propertyNames=[],this._definitionChanged=new Ce,l(e)&&this.merge(e,t)}Object.defineProperties(dA.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 yWe=new j;rE.prototype.getValue=function(e,t){l(e)||(e=j.now(yWe));let n=z.getValueOrDefault(this._heightReference,e,et.NONE),i=z.getValueOrDefault(this._extrudedHeightReference,e,et.NONE);if(n===et.NONE&&!D_(i))return this._position=m.clone(m.ZERO,this._position),m.clone(m.ZERO,t);if(this._positionProperty.isConstant)return m.multiplyByScalar(this._normal,this._terrainHeight,t);let o=this._scene,r=this._positionProperty.getValue(e,Lre);if(!l(r)||m.equals(r,m.ZERO)||!l(o.globe))return m.clone(m.ZERO,t);if(m.equalsEpsilon(this._position,r,Z.EPSILON10))return m.multiplyByScalar(this._normal,this._terrainHeight,t);this._position=m.clone(r,this._position),this._updateClamping();let s=o.ellipsoid.geodeticSurfaceNormal(r,this._normal);return m.multiplyByScalar(s,this._terrainHeight,t)};rE.prototype.isDestroyed=function(){return!1};rE.prototype.destroy=function(){return l(this._removeEventListener)&&this._removeEventListener(),l(this._removeModeListener)&&this._removeModeListener(),l(this._removeCallbackFunc)&&this._removeCallbackFunc(),me(this)};var IC=rE;function CWe(e,t,n,i){if(Ci.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 hh(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new IC(this._scene,s,r)}}var fA=CWe;var Rre=m.ZERO,Vre=new m,xWe=new m,Gre=new U;function IWe(e){this.id=e,this.vertexFormat=void 0,this.dimensions=void 0,this.offsetAttribute=void 0}function vd(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new IWe(e),geometryPropertyName:"box",observedPropertyNames:["availability","position","orientation","box"]}),this._onEntityPropertyChanged(e,"box",e.box,void 0)}l(Object.create)&&(vd.prototype=Object.create(Ci.prototype),vd.prototype.constructor=vd);Object.defineProperties(vd.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});vd.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=jn.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r,color:void 0,offset:void 0};if(this._materialProperty instanceof qt){let a;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,Gre)),l(a)||(a=U.WHITE),s.color=tn.fromColor(a)}return l(this._options.offsetAttribute)&&(s.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,Rre,Vre))),new wt({id:t,geometry:sc.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:s})};vd.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=z.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,Gre),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:tn.fromColor(i),distanceDisplayCondition:jn.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,Rre,Vre))),new wt({id:t,geometry:nh.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:r})};vd.prototype._computeCenter=function(e,t){return z.getValueOrUndefined(this._entity.position,e,t)};vd.prototype._isHidden=function(e,t){return!l(t.dimensions)||!l(e.position)||Ci.prototype._isHidden.call(this,e,t)};vd.prototype._isDynamic=function(e,t){return!e.position.isConstant||!z.isConstant(e.orientation)||!t.dimensions.isConstant||!z.isConstant(t.outlineWidth)};vd.prototype._setStaticOptions=function(e,t){let n=z.getValueOrDefault(t.heightReference,ze.MINIMUM_VALUE,et.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof qt?yn.VERTEX_FORMAT:Io.MaterialSupport.TEXTURED.vertexFormat,i.dimensions=t.dimensions.getValue(ze.MINIMUM_VALUE,i.dimensions),i.offsetAttribute=n!==et.NONE?pn.ALL:void 0};vd.prototype._onEntityPropertyChanged=fA;vd.DynamicGeometryUpdater=sE;function sE(e,t,n){yi.call(this,e,t,n)}l(Object.create)&&(sE.prototype=Object.create(yi.prototype),sE.prototype.constructor=sE);sE.prototype._isHidden=function(e,t,n){let i=z.getValueOrUndefined(e.position,n,xWe),o=this._options.dimensions;return!l(i)||!l(o)||yi.prototype._isHidden.call(this,e,t,n)};sE.prototype._setOptions=function(e,t,n){let i=z.getValueOrDefault(t.heightReference,n,et.NONE),o=this._options;o.dimensions=z.getValueOrUndefined(t.dimensions,n,o.dimensions),o.offsetAttribute=i!==et.NONE?pn.ALL:void 0};var AZ=vd;var min=y(C(),1);function _C(e,t,n){this._callback=void 0,this._isConstant=void 0,this._referenceFrame=n??eo.FIXED,this._definitionChanged=new Ce,this.setCallback(e,t)}Object.defineProperties(_C.prototype,{isConstant:{get:function(){return this._isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var _We=new j;_C.prototype.getValue=function(e,t){return l(e)||(e=j.now(_We)),this.getValueInReferenceFrame(e,eo.FIXED,t)};_C.prototype.setCallback=function(e,t){let n=this._callback!==e||this._isConstant!==t;this._callback=e,this._isConstant=t,n&&this._definitionChanged.raiseEvent(this)};_C.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._callback(e,n);return lh.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};_C.prototype.equals=function(e){return this===e||e instanceof _C&&this._callback===e._callback&&this._isConstant===e._isConstant&&this._referenceFrame===e._referenceFrame};var gZ=_C;var O6n=y(C(),1);var W6n=y(C(),1);var bin=y(C(),1);var fin=y(C(),1);/*! @license DOMPurify 3.2.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.6/LICENSE */var{entries:Nre,setPrototypeOf:Zre,isFrozen:EWe,getPrototypeOf:TWe,getOwnPropertyDescriptor:SWe}=Object,{freeze:pl,seal:Ku,create:Dre}=Object,{apply:DH,construct:QH}=typeof Reflect<"u"&&Reflect;pl||(pl=function(t){return t});Ku||(Ku=function(t){return t});DH||(DH=function(t,n,i){return t.apply(n,i)});QH||(QH=function(t,n){return new t(...n)});var PD=Al(Array.prototype.forEach),LWe=Al(Array.prototype.lastIndexOf),Bre=Al(Array.prototype.pop),bZ=Al(Array.prototype.push),RWe=Al(Array.prototype.splice),vD=Al(String.prototype.toLowerCase),FH=Al(String.prototype.toString),wre=Al(String.prototype.match),yZ=Al(String.prototype.replace),VWe=Al(String.prototype.indexOf),GWe=Al(String.prototype.trim),fh=Al(Object.prototype.hasOwnProperty),fl=Al(RegExp.prototype.test),CZ=ZWe(TypeError);function Al(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]:vD;Zre&&Zre(e,null);let i=t.length;for(;i--;){let o=t[i];if(typeof o=="string"){let r=n(o);r!==o&&(EWe(t)||(t[i]=r),o=r)}e[o]=!0}return e}function BWe(e){for(let t=0;t/gm),PWe=Ku(/\$\{[\w\W]*/gm),MWe=Ku(/^data-[\-\w.\u00B7-\uFFFF]+$/),vWe=Ku(/^aria-[\-\w]+$/),Qre=Ku(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),NWe=Ku(/^(?:\w+script|data):/i),DWe=Ku(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Ure=Ku(/^html$/i),QWe=Ku(/^[a-z][.\w]*(-[.\w]+)+$/i),Mre=Object.freeze({__proto__:null,ARIA_ATTR:vWe,ATTR_WHITESPACE:DWe,CUSTOM_ELEMENT:QWe,DATA_ATTR:MWe,DOCTYPE_NAME:Ure,ERB_EXPR:FWe,IS_ALLOWED_URI:Qre,IS_SCRIPT_OR_DATA:NWe,MUSTACHE_EXPR:WWe,TMPLIT_EXPR:PWe}),IZ={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},UWe=function(){return typeof window>"u"?null:window},kWe=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}},vre=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function kre(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:UWe(),t=mn=>kre(mn);if(t.version="3.2.6",t.removed=[],!e||!e.document||e.document.nodeType!==IZ.document||!e.Element)return t.isSupported=!1,t;let{document:n}=e,i=n,o=i.currentScript,{DocumentFragment:r,HTMLTemplateElement:s,Node:a,Element:c,NodeFilter:d,NamedNodeMap:u=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:h,DOMParser:p,trustedTypes:g}=e,f=c.prototype,b=xZ(f,"cloneNode"),x=xZ(f,"remove"),I=xZ(f,"nextSibling"),_=xZ(f,"childNodes"),E=xZ(f,"parentNode");if(typeof s=="function"){let mn=n.createElement("template");mn.content&&mn.content.ownerDocument&&(n=mn.content.ownerDocument)}let S,R="",{implementation:G,createNodeIterator:B,createDocumentFragment:w,getElementsByTagName:F}=n,{importNode:P}=i,A=vre();t.isSupported=typeof Nre=="function"&&typeof E=="function"&&G&&G.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:T,ERB_EXPR:L,TMPLIT_EXPR:V,DATA_ATTR:W,ARIA_ATTR:M,IS_SCRIPT_OR_DATA:Q,ATTR_WHITESPACE:N,CUSTOM_ELEMENT:k}=Mre,{IS_ALLOWED_URI:v}=Mre,O=null,H=ki({},[...Xre,...PH,...MH,...vH,...Wre]),ee=null,K=ki({},[...Fre,...NH,...Pre,...MD]),te=Object.seal(Dre(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}})),q=null,pe=null,ye=!0,he=!0,xe=!1,Te=!0,Be=!1,Le=!0,De=!1,Ue=!1,je=!1,it=!1,nn=!1,rt=!1,rn=!0,Jt=!1,Xt="user-content-",Li=!0,bi=!1,vt={},Rt=null,si=ki({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),_t=null,Fo=ki({},["audio","video","img","source","image","track"]),Uo=null,Va=ki({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Cr="http://www.w3.org/1998/Math/MathML",wr="http://www.w3.org/2000/svg",ve="http://www.w3.org/1999/xhtml",ut=ve,qe=!1,nt=null,yt=ki({},[Cr,wr,ve],FH),$t=ki({},["mi","mo","mn","ms","mtext"]),Sn=ki({},["annotation-xml"]),fo=ki({},["title","style","font","a","script"]),uo=null,ra=["application/xhtml+xml","text/html"],sa="text/html",Hn=null,Ti=null,Rs=n.createElement("form"),Jo=function(Re){return Re instanceof RegExp||Re instanceof Function},Ga=function(){let Re=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Ti&&Ti===Re)){if((!Re||typeof Re!="object")&&(Re={}),Re=pA(Re),uo=ra.indexOf(Re.PARSER_MEDIA_TYPE)===-1?sa:Re.PARSER_MEDIA_TYPE,Hn=uo==="application/xhtml+xml"?FH:vD,O=fh(Re,"ALLOWED_TAGS")?ki({},Re.ALLOWED_TAGS,Hn):H,ee=fh(Re,"ALLOWED_ATTR")?ki({},Re.ALLOWED_ATTR,Hn):K,nt=fh(Re,"ALLOWED_NAMESPACES")?ki({},Re.ALLOWED_NAMESPACES,FH):yt,Uo=fh(Re,"ADD_URI_SAFE_ATTR")?ki(pA(Va),Re.ADD_URI_SAFE_ATTR,Hn):Va,_t=fh(Re,"ADD_DATA_URI_TAGS")?ki(pA(Fo),Re.ADD_DATA_URI_TAGS,Hn):Fo,Rt=fh(Re,"FORBID_CONTENTS")?ki({},Re.FORBID_CONTENTS,Hn):si,q=fh(Re,"FORBID_TAGS")?ki({},Re.FORBID_TAGS,Hn):pA({}),pe=fh(Re,"FORBID_ATTR")?ki({},Re.FORBID_ATTR,Hn):pA({}),vt=fh(Re,"USE_PROFILES")?Re.USE_PROFILES:!1,ye=Re.ALLOW_ARIA_ATTR!==!1,he=Re.ALLOW_DATA_ATTR!==!1,xe=Re.ALLOW_UNKNOWN_PROTOCOLS||!1,Te=Re.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Be=Re.SAFE_FOR_TEMPLATES||!1,Le=Re.SAFE_FOR_XML!==!1,De=Re.WHOLE_DOCUMENT||!1,it=Re.RETURN_DOM||!1,nn=Re.RETURN_DOM_FRAGMENT||!1,rt=Re.RETURN_TRUSTED_TYPE||!1,je=Re.FORCE_BODY||!1,rn=Re.SANITIZE_DOM!==!1,Jt=Re.SANITIZE_NAMED_PROPS||!1,Li=Re.KEEP_CONTENT!==!1,bi=Re.IN_PLACE||!1,v=Re.ALLOWED_URI_REGEXP||Qre,ut=Re.NAMESPACE||ve,$t=Re.MATHML_TEXT_INTEGRATION_POINTS||$t,Sn=Re.HTML_INTEGRATION_POINTS||Sn,te=Re.CUSTOM_ELEMENT_HANDLING||{},Re.CUSTOM_ELEMENT_HANDLING&&Jo(Re.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(te.tagNameCheck=Re.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Re.CUSTOM_ELEMENT_HANDLING&&Jo(Re.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(te.attributeNameCheck=Re.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Re.CUSTOM_ELEMENT_HANDLING&&typeof Re.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(te.allowCustomizedBuiltInElements=Re.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Be&&(he=!1),nn&&(it=!0),vt&&(O=ki({},Wre),ee=[],vt.html===!0&&(ki(O,Xre),ki(ee,Fre)),vt.svg===!0&&(ki(O,PH),ki(ee,NH),ki(ee,MD)),vt.svgFilters===!0&&(ki(O,MH),ki(ee,NH),ki(ee,MD)),vt.mathMl===!0&&(ki(O,vH),ki(ee,Pre),ki(ee,MD))),Re.ADD_TAGS&&(O===H&&(O=pA(O)),ki(O,Re.ADD_TAGS,Hn)),Re.ADD_ATTR&&(ee===K&&(ee=pA(ee)),ki(ee,Re.ADD_ATTR,Hn)),Re.ADD_URI_SAFE_ATTR&&ki(Uo,Re.ADD_URI_SAFE_ATTR,Hn),Re.FORBID_CONTENTS&&(Rt===si&&(Rt=pA(Rt)),ki(Rt,Re.FORBID_CONTENTS,Hn)),Li&&(O["#text"]=!0),De&&ki(O,["html","head","body"]),O.table&&(ki(O,["tbody"]),delete q.tbody),Re.TRUSTED_TYPES_POLICY){if(typeof Re.TRUSTED_TYPES_POLICY.createHTML!="function")throw CZ('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Re.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw CZ('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');S=Re.TRUSTED_TYPES_POLICY,R=S.createHTML("")}else S===void 0&&(S=kWe(g,o)),S!==null&&typeof R=="string"&&(R=S.createHTML(""));pl&&pl(Re),Ti=Re}},po=ki({},[...PH,...MH,...wWe]),jo=ki({},[...vH,...XWe]),Wu=function(Re){let Vt=E(Re);(!Vt||!Vt.tagName)&&(Vt={namespaceURI:ut,tagName:"template"});let Cn=vD(Re.tagName),rr=vD(Vt.tagName);return nt[Re.namespaceURI]?Re.namespaceURI===wr?Vt.namespaceURI===ve?Cn==="svg":Vt.namespaceURI===Cr?Cn==="svg"&&(rr==="annotation-xml"||$t[rr]):!!po[Cn]:Re.namespaceURI===Cr?Vt.namespaceURI===ve?Cn==="math":Vt.namespaceURI===wr?Cn==="math"&&Sn[rr]:!!jo[Cn]:Re.namespaceURI===ve?Vt.namespaceURI===wr&&!Sn[rr]||Vt.namespaceURI===Cr&&!$t[rr]?!1:!jo[Cn]&&(fo[Cn]||!po[Cn]):!!(uo==="application/xhtml+xml"&&nt[Re.namespaceURI]):!1},xr=function(Re){bZ(t.removed,{element:Re});try{E(Re).removeChild(Re)}catch{x(Re)}},Vs=function(Re,Vt){try{bZ(t.removed,{attribute:Vt.getAttributeNode(Re),from:Vt})}catch{bZ(t.removed,{attribute:null,from:Vt})}if(Vt.removeAttribute(Re),Re==="is")if(it||nn)try{xr(Vt)}catch{}else try{Vt.setAttribute(Re,"")}catch{}},ks=function(Re){let Vt=null,Cn=null;if(je)Re=""+Re;else{let Gs=wre(Re,/^[\r\n\t ]+/);Cn=Gs&&Gs[0]}uo==="application/xhtml+xml"&&ut===ve&&(Re=''+Re+"");let rr=S?S.createHTML(Re):Re;if(ut===ve)try{Vt=new p().parseFromString(rr,uo)}catch{}if(!Vt||!Vt.documentElement){Vt=G.createDocument(ut,"template",null);try{Vt.documentElement.innerHTML=qe?R:rr}catch{}}let Za=Vt.body||Vt.documentElement;return Re&&Cn&&Za.insertBefore(n.createTextNode(Cn),Za.childNodes[0]||null),ut===ve?F.call(Vt,De?"html":"body")[0]:De?Vt.documentElement:Za},Jm=function(Re){return B.call(Re.ownerDocument||Re,Re,d.SHOW_ELEMENT|d.SHOW_COMMENT|d.SHOW_TEXT|d.SHOW_PROCESSING_INSTRUCTION|d.SHOW_CDATA_SECTION,null)},fs=function(Re){return Re instanceof h&&(typeof Re.nodeName!="string"||typeof Re.textContent!="string"||typeof Re.removeChild!="function"||!(Re.attributes instanceof u)||typeof Re.removeAttribute!="function"||typeof Re.setAttribute!="function"||typeof Re.namespaceURI!="string"||typeof Re.insertBefore!="function"||typeof Re.hasChildNodes!="function")},tc=function(Re){return typeof a=="function"&&Re instanceof a};function nc(mn,Re,Vt){PD(mn,Cn=>{Cn.call(t,Re,Vt,Ti)})}let Xr=function(Re){let Vt=null;if(nc(A.beforeSanitizeElements,Re,null),fs(Re))return xr(Re),!0;let Cn=Hn(Re.nodeName);if(nc(A.uponSanitizeElement,Re,{tagName:Cn,allowedTags:O}),Le&&Re.hasChildNodes()&&!tc(Re.firstElementChild)&&fl(/<[/\w!]/g,Re.innerHTML)&&fl(/<[/\w!]/g,Re.textContent)||Re.nodeType===IZ.progressingInstruction||Le&&Re.nodeType===IZ.comment&&fl(/<[/\w]/g,Re.data))return xr(Re),!0;if(!O[Cn]||q[Cn]){if(!q[Cn]&&Yl(Cn)&&(te.tagNameCheck instanceof RegExp&&fl(te.tagNameCheck,Cn)||te.tagNameCheck instanceof Function&&te.tagNameCheck(Cn)))return!1;if(Li&&!Rt[Cn]){let rr=E(Re)||Re.parentNode,Za=_(Re)||Re.childNodes;if(Za&&rr){let Gs=Za.length;for(let Ic=Gs-1;Ic>=0;--Ic){let jm=b(Za[Ic],!0);jm.__removalCount=(Re.__removalCount||0)+1,rr.insertBefore(jm,I(Re))}}}return xr(Re),!0}return Re instanceof c&&!Wu(Re)||(Cn==="noscript"||Cn==="noembed"||Cn==="noframes")&&fl(/<\/no(script|embed|frames)/i,Re.innerHTML)?(xr(Re),!0):(Be&&Re.nodeType===IZ.text&&(Vt=Re.textContent,PD([T,L,V],rr=>{Vt=yZ(Vt,rr," ")}),Re.textContent!==Vt&&(bZ(t.removed,{element:Re.cloneNode()}),Re.textContent=Vt)),nc(A.afterSanitizeElements,Re,null),!1)},kl=function(Re,Vt,Cn){if(rn&&(Vt==="id"||Vt==="name")&&(Cn in n||Cn in Rs))return!1;if(!(he&&!pe[Vt]&&fl(W,Vt))){if(!(ye&&fl(M,Vt))){if(!ee[Vt]||pe[Vt]){if(!(Yl(Re)&&(te.tagNameCheck instanceof RegExp&&fl(te.tagNameCheck,Re)||te.tagNameCheck instanceof Function&&te.tagNameCheck(Re))&&(te.attributeNameCheck instanceof RegExp&&fl(te.attributeNameCheck,Vt)||te.attributeNameCheck instanceof Function&&te.attributeNameCheck(Vt))||Vt==="is"&&te.allowCustomizedBuiltInElements&&(te.tagNameCheck instanceof RegExp&&fl(te.tagNameCheck,Cn)||te.tagNameCheck instanceof Function&&te.tagNameCheck(Cn))))return!1}else if(!Uo[Vt]){if(!fl(v,yZ(Cn,N,""))){if(!((Vt==="src"||Vt==="xlink:href"||Vt==="href")&&Re!=="script"&&VWe(Cn,"data:")===0&&_t[Re])){if(!(xe&&!fl(Q,yZ(Cn,N,"")))){if(Cn)return!1}}}}}}return!0},Yl=function(Re){return Re!=="annotation-xml"&&wre(Re,k)},aa=function(Re){nc(A.beforeSanitizeAttributes,Re,null);let{attributes:Vt}=Re;if(!Vt||fs(Re))return;let Cn={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ee,forceKeepAttr:void 0},rr=Vt.length;for(;rr--;){let Za=Vt[rr],{name:Gs,namespaceURI:Ic,value:jm}=Za,Dp=Hn(Gs),zL=jm,Ba=Gs==="value"?zL:GWe(zL);if(Cn.attrName=Dp,Cn.attrValue=Ba,Cn.keepAttr=!0,Cn.forceKeepAttr=void 0,nc(A.uponSanitizeAttribute,Re,Cn),Ba=Cn.attrValue,Jt&&(Dp==="id"||Dp==="name")&&(Vs(Gs,Re),Ba=Xt+Ba),Le&&fl(/((--!?|])>)|<\/(style|title)/i,Ba)){Vs(Gs,Re);continue}if(Cn.forceKeepAttr)continue;if(!Cn.keepAttr){Vs(Gs,Re);continue}if(!Te&&fl(/\/>/i,Ba)){Vs(Gs,Re);continue}Be&&PD([T,L,V],I9=>{Ba=yZ(Ba,I9," ")});let x9=Hn(Re.nodeName);if(!kl(x9,Dp,Ba)){Vs(Gs,Re);continue}if(S&&typeof g=="object"&&typeof g.getAttributeType=="function"&&!Ic)switch(g.getAttributeType(x9,Dp)){case"TrustedHTML":{Ba=S.createHTML(Ba);break}case"TrustedScriptURL":{Ba=S.createScriptURL(Ba);break}}if(Ba!==zL)try{Ic?Re.setAttributeNS(Ic,Gs,Ba):Re.setAttribute(Gs,Ba),fs(Re)?xr(Re):Bre(t.removed)}catch{Vs(Gs,Re)}}nc(A.afterSanitizeAttributes,Re,null)},Zo=function mn(Re){let Vt=null,Cn=Jm(Re);for(nc(A.beforeSanitizeShadowDOM,Re,null);Vt=Cn.nextNode();)nc(A.uponSanitizeShadowNode,Vt,null),Xr(Vt),aa(Vt),Vt.content instanceof r&&mn(Vt.content);nc(A.afterSanitizeShadowDOM,Re,null)};return t.sanitize=function(mn){let Re=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Vt=null,Cn=null,rr=null,Za=null;if(qe=!mn,qe&&(mn=""),typeof mn!="string"&&!tc(mn))if(typeof mn.toString=="function"){if(mn=mn.toString(),typeof mn!="string")throw CZ("dirty is not a string, aborting")}else throw CZ("toString is not a function");if(!t.isSupported)return mn;if(Ue||Ga(Re),t.removed=[],typeof mn=="string"&&(bi=!1),bi){if(mn.nodeName){let jm=Hn(mn.nodeName);if(!O[jm]||q[jm])throw CZ("root node is forbidden and cannot be sanitized in-place")}}else if(mn instanceof a)Vt=ks(""),Cn=Vt.ownerDocument.importNode(mn,!0),Cn.nodeType===IZ.element&&Cn.nodeName==="BODY"||Cn.nodeName==="HTML"?Vt=Cn:Vt.appendChild(Cn);else{if(!it&&!Be&&!De&&mn.indexOf("<")===-1)return S&&rt?S.createHTML(mn):mn;if(Vt=ks(mn),!Vt)return it?null:rt?R:""}Vt&&je&&xr(Vt.firstChild);let Gs=Jm(bi?mn:Vt);for(;rr=Gs.nextNode();)Xr(rr),aa(rr),rr.content instanceof r&&Zo(rr.content);if(bi)return mn;if(it){if(nn)for(Za=w.call(Vt.ownerDocument);Vt.firstChild;)Za.appendChild(Vt.firstChild);else Za=Vt;return(ee.shadowroot||ee.shadowrootmode)&&(Za=P.call(i,Za,!0)),Za}let Ic=De?Vt.outerHTML:Vt.innerHTML;return De&&O["!doctype"]&&Vt.ownerDocument&&Vt.ownerDocument.doctype&&Vt.ownerDocument.doctype.name&&fl(Ure,Vt.ownerDocument.doctype.name)&&(Ic=" `+Ic),Be&&PD([T,L,V],jm=>{Ic=yZ(Ic,jm," ")}),S&&rt?S.createHTML(Ic):Ic},t.setConfig=function(){let mn=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ga(mn),Ue=!0},t.clearConfig=function(){Ti=null,Ue=!1},t.isValidAttribute=function(mn,Re,Vt){Ti||Ga({});let Cn=Hn(mn),rr=Hn(Re);return kl(Cn,rr,Vt)},t.addHook=function(mn,Re){typeof Re=="function"&&bZ(A[mn],Re)},t.removeHook=function(mn,Re){if(Re!==void 0){let Vt=LWe(A[mn],Re);return Vt===-1?void 0:RWe(A[mn],Vt,1)[0]}return Bre(A[mn])},t.removeHooks=function(mn){A[mn]=[]},t.removeAllHooks=function(){A=vre()},t}var Yre=kre();var YWe=0,UH={};function Pf(e,t){let n,i=e;l(UH[i])?n=UH[i]:(n=YWe++,UH[i]=n),t=t??!1,this._id=n,this._html=e,this._showOnScreen=t,this._element=void 0}Object.defineProperties(Pf.prototype,{html:{get:function(){return this._html}},id:{get:function(){return this._id}},showOnScreen:{get:function(){return this._showOnScreen},set:function(e){this._showOnScreen=e}},element:{get:function(){if(!l(this._element)){let e=Yre.sanitize(this._html),t=document.createElement("div");t.className="cesium-credit-wrapper",t._creditId=this._id,t.style.display="inline",t.innerHTML=e;let n=t.querySelectorAll("a");for(let i=0;i{u[h]=void 0});for(let h=r;h0||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 HWe(e,t){if(ph.isSupported(t)){if(e._specularEnvironmentCubeMap=e._specularEnvironmentCubeMap&&e._specularEnvironmentCubeMap.destroy(),l(e._specularEnvironmentMaps)){let n=new ph(e._specularEnvironmentMaps);e._specularEnvironmentCubeMap=n,e._removeErrorListener=n.errorEvent.addEventListener(i=>{console.error(`Error loading specularEnvironmentMaps: ${i}`)})}e._shouldRegenerateShaders=!0}}_Z.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;D.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=D.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&&(HWe(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)};_Z.prototype.isDestroyed=function(){return!1};_Z.prototype.destroy=function(){return this._specularEnvironmentCubeMap=this._specularEnvironmentCubeMap&&this._specularEnvironmentCubeMap.destroy(),this._removeErrorListener=this._removeErrorListener&&this._removeErrorListener(),me(this)};var TC=_Z;var qin=y(C(),1),OH=y(Bd(),1);var kin=y(C(),1);var YH,Ore="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJhNzg4MTAwYi1kMTg5LTRjNDItYTVlMi0wOTlhNGM0NTc5Y2YiLCJpZCI6MjU5LCJpYXQiOjE3NTQwNjAzNjJ9.5ei_XzXku4PefU_uHUlbhQnPS1sbv-BHo28oU2fj0Ig",ND={};ND.defaultAccessToken=Ore;ND.defaultServer=new Ve({url:"https://api.cesium.com/"});ND.getDefaultTokenCredit=function(e){if(e===Ore){if(!l(YH)){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.`;YH=new Gt(t,!0)}return YH}};var Ah=ND;function gl(e,t){let n,i=e.externalType,o=l(i);if(!o)n={url:e.url,retryAttempts:1,retryCallback:zWe};else if(i==="3DTILES"||i==="STK_TERRAIN_SERVER")n={url:e.options.url};else throw new de("Ion.createResource does not support external imagery assets; use IonImageryProvider instead.");Ve.call(this,n),this._ionEndpoint=e,this._ionEndpointDomain=o?void 0:new OH.default(e.url).authority(),this._ionEndpointResource=t,this._ionRoot=void 0,this._pendingPromise=void 0,this._credits=void 0,this._isExternal=o}l(Object.create)&&(gl.prototype=Object.create(Ve.prototype),gl.prototype.constructor=gl);gl.fromAssetId=function(e,t){let n=gl._createEndpointResource(e,t);return n.fetchJson().then(function(i){return new gl(i,n)})};Object.defineProperties(gl.prototype,{credits:{get:function(){return l(this._ionRoot)?this._ionRoot.credits:l(this._credits)?this._credits:(this._credits=gl.getCreditsFromEndpoint(this._ionEndpoint,this._ionEndpointResource),this._credits)}}});gl.getCreditsFromEndpoint=function(e,t){let n=e.attributions.map(Gt.getIonCredit),i=Ah.getDefaultTokenCredit(t.queryParameters.access_token);return l(i)&&n.push(Gt.clone(i)),n};gl.prototype.clone=function(e){let t=this._ionRoot??this;return l(e)||(e=new gl(t._ionEndpoint,t._ionEndpointResource)),e=Ve.prototype.clone.call(this,e),e._ionRoot=t,e._isExternal=this._isExternal,e};gl.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)};gl.prototype._makeRequest=function(e){return this._isExternal||new OH.default(this.url).authority()!==this._ionEndpointDomain?Ve.prototype._makeRequest.call(this,e):(l(e.headers)||(e.headers={}),e.headers.Authorization=`Bearer ${this._ionEndpoint.accessToken}`,e.headers["X-Cesium-Client"]="CesiumJS",typeof CESIUM_VERSION<"u"&&(e.headers["X-Cesium-Client-Version"]=CESIUM_VERSION),Ve.prototype._makeRequest.call(this,e))};gl._createEndpointResource=function(e,t){t=t??Y.EMPTY_OBJECT;let n=t.server??Ah.defaultServer,i=t.accessToken??Ah.defaultAccessToken;n=Ve.createIfNeeded(n);let o={url:`v1/assets/${e}/endpoint`};return l(i)&&(o.queryParameters={access_token:i}),n.getDerivedResource(o)};function zWe(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){return n._ionEndpoint=r,r}).finally(function(r){return n._pendingPromise=void 0,r})),n._pendingPromise.then(function(r){return e._ionEndpoint=r,!0}))}var Nd=gl;var eon=y(C(),1);function Mf(e){e=e??0,this._array=new Array(e),this._length=e}Object.defineProperties(Mf.prototype,{length:{get:function(){return this._length},set:function(e){let t=this._array,n=this._length;if(et.length&&(t.length=e);this._length=e}},values:{get:function(){return this._array}}});Mf.prototype.get=function(e){return this._array[e]};Mf.prototype.set=function(e,t){e>=this._length&&(this.length=e+1),this._array[e]=t};Mf.prototype.peek=function(){return this._array[this._length-1]};Mf.prototype.push=function(e){let t=this.length++;this._array[t]=e};Mf.prototype.pop=function(){if(this._length===0)return;let e=this._array[this._length-1];return--this.length,e};Mf.prototype.reserve=function(e){e>this._array.length&&(this._array.length=e)};Mf.prototype.resize=function(e){this.length=e};Mf.prototype.trim=function(e){e=e??this._length,this._array.length=e};var bl=Mf;var oon=y(C(),1);function DD(e){e=e??Y.EMPTY_OBJECT,this.color=e.color,this.depth=e.depth,this.stencil=e.stencil,this.renderState=e.renderState,this.framebuffer=e.framebuffer,this.owner=e.owner,this.pass=e.pass}DD.ALL=Object.freeze(new DD({color:new U(0,0,0,0),depth:1,stencil:0}));DD.prototype.execute=function(e,t){e.clear(this,t)};var xi=DD;var con=y(C(),1);var AA={X:0,Y:1,Z:2};AA.Y_UP_TO_Z_UP=X.fromRotationTranslation($.fromArray([1,0,0,0,0,1,0,-1,0]));AA.Z_UP_TO_Y_UP=X.fromRotationTranslation($.fromArray([1,0,0,0,0,-1,0,1,0]));AA.X_UP_TO_Z_UP=X.fromRotationTranslation($.fromArray([0,0,1,0,1,0,-1,0,0]));AA.Z_UP_TO_X_UP=X.fromRotationTranslation($.fromArray([0,0,-1,0,1,0,1,0,0]));AA.X_UP_TO_Y_UP=X.fromRotationTranslation($.fromArray([0,1,0,-1,0,0,0,0,1]));AA.Y_UP_TO_X_UP=X.fromRotationTranslation($.fromArray([0,-1,0,1,0,0,0,0,1]));AA.fromName=function(e){return AA[e]};var ho=Object.freeze(AA);var Njn=y(C(),1);var pon=y(C(),1);function Ju(e){this.planes=e??[]}var EZ=[new m,new m,new m];m.clone(m.UNIT_X,EZ[0]);m.clone(m.UNIT_Y,EZ[1]);m.clone(m.UNIT_Z,EZ[2]);var Vb=new m,KWe=new m,Hre=new An(new m(1,0,0),0);Ju.fromBoundingSphere=function(e,t){l(t)||(t=new Ju);let n=EZ.length,i=t.planes;i.length=2*n;let o=e.center,r=e.radius,s=0;for(let a=0;a>10)+55296,(r&1023)+56320))}return t};function TZ(e,t,n){return t<=e&&e<=n}function $We(e){let t=0,n=0,i=0,o=128,r=191,s=[],a=e.length;for(let c=0;c0){let o=Math.min(t,Kt.maximumTextureSize),r=Math.ceil(t/Kt.maximumTextureSize),s=1/o,a=s*.5,c=1/r,d=c*.5;n=new D(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(Bc.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}}});Bc.DEFAULT_COLOR_VALUE=U.WHITE;Bc.DEFAULT_SHOW_VALUE=!0;function Jre(e){let t=e._textureDimensions;return t.x*t.y*4}function jre(e){if(!l(e._batchValues)){let t=Jre(e),n=new Uint8Array(t).fill(255);e._batchValues=n}return e._batchValues}function qre(e){if(!l(e._showAlphaProperties)){let t=2*e._featuresLength,n=new Uint8Array(t).fill(255);e._showAlphaProperties=n}return e._showAlphaProperties}Bc.prototype.setShow=function(e,t){if(t&&!l(this._showAlphaProperties))return;let n=qre(this),i=e*2,o=t?255:0;if(n[i]!==o){n[i]=o;let r=jre(this),s=e*4+3;r[s]=t?n[i+1]:0,this._batchValuesDirty=!0}};Bc.prototype.setAllShow=function(e){let t=this._featuresLength;for(let n=0;n0){let i=e._pickIds,o=Jre(e),r=new Uint8Array(o),s=e._owner,a=e._statistics;for(let c=0;c0;){if(t=u.pop(),c[t]===d)continue;c[t]=d;let h=n(e,t);if(l(h))return h;let p=o[t],g=s[t];for(let f=0;f0?(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} ${SFe(i)}${s}`}};function ese(e,t){return e=Oe.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 LFe(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 RFe(e){let t=e._content.tileset,n=t.colorBlendMode,i=t.colorBlendAmount;if(n===ed.HIGHLIGHT)return 0;if(n===ed.REPLACE)return 1;if(n===ed.MIX)return Z.clamp(i,Z.EPSILON4,1)}Wo.prototype.getUniformMapCallback=function(){if(this.featuresLength===0)return;let e=this;return function(t){return Lt(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 RFe(e)},tile_pickTexture:function(){return e._batchTexture.pickTexture}})}};Wo.prototype.getPickId=function(){return"texture(tile_pickTexture, tile_featureSt)"};var Bb={ALL_OPAQUE:0,ALL_TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2};Wo.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=VFe(this);for(let d=t;d>>jt.SKIP_LOD_BIT_SHIFT}function PFe(e){let t=ke(e,!0);return t.cull.enabled=!1,t.depthTest.enabled=!0,t.depthMask=!1,t.blending=bn.ALPHA_BLEND,t.stencilTest=jt.setCesium3DTileBit(),t.stencilMask=jt.CESIUM_3D_TILE_MASK,Qe.fromCache(t)}function MFe(e){let t=ke(e,!0);return t.stencilTest=jt.setCesium3DTileBit(),t.stencilMask=jt.CESIUM_3D_TILE_MASK,Qe.fromCache(t)}Wo.prototype.update=function(e,t){this._batchTexture.update(e,t)};Wo.prototype.isDestroyed=function(){return!1};Wo.prototype.destroy=function(){return this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),me(this)};var bA=Wo;var pan=y(C(),1);var rsn=y(C(),1);function vFe(e){this.offset=e.offset,this.count=e.count,this.color=e.color,this.batchIds=e.batchIds}var Nf=vFe;var ian=y(C(),1);var asn=y(C(),1),aE=`in vec3 position; in float a_batchId; uniform mat4 u_modifiedModelViewProjection; void main() { gl_Position = czm_depthClamp(u_modifiedModelViewProjection * vec4(position, 1.0)); } `;var usn=y(C(),1);function qu(e,t){this._content=e,this._batchId=t,this._color=void 0}Object.defineProperties(qu.prototype,{show:{get:function(){return this._content.batchTable.getShow(this._batchId)},set:function(e){this._content.batchTable.setShow(this._batchId,e)}},color:{get:function(){return l(this._color)||(this._color=new U),this._content.batchTable.getColor(this._batchId,this._color)},set:function(e){this._content.batchTable.setColor(this._batchId,e)}},polylinePositions:{get:function(){if(l(this._content.getPolylinePositions))return this._content.getPolylinePositions(this._batchId)}},content:{get:function(){return this._content}},tileset:{get:function(){return this._content.tileset}},primitive:{get:function(){return this._content.tileset}},featureId:{get:function(){return this._batchId}},pickId:{get:function(){return this._content.batchTable.getPickColor(this._batchId)}}});qu.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)};qu.prototype.getPropertyIds=function(e){return this._content.batchTable.getPropertyIds(this._batchId,e)};qu.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)};qu.getPropertyInherited=function(e,t,n){let i=e.batchTable;if(l(i)){if(i.hasPropertyBySemantic(t,n))return i.getPropertyBySemantic(t,n);if(i.hasProperty(t,n))return i.getProperty(t,n)}let o=e.metadata;if(l(o)){if(o.hasPropertyBySemantic(n))return o.getPropertyBySemantic(n);if(o.hasProperty(n))return o.getProperty(n)}let r=e.tile,s=r.metadata;if(l(s)){if(s.hasPropertyBySemantic(n))return s.getPropertyBySemantic(n);if(s.hasProperty(n))return s.getProperty(n)}let a;if(l(r.implicitSubtree)&&(a=r.implicitSubtree.metadata),l(a)){if(a.hasPropertyBySemantic(n))return a.getPropertyBySemantic(n);if(a.hasProperty(n))return a.getProperty(n)}let c=l(e.group)?e.group.metadata:void 0;if(l(c)){if(c.hasPropertyBySemantic(n))return c.getPropertyBySemantic(n);if(c.hasProperty(n))return c.getProperty(n)}let d=e.tileset.metadata;if(l(d)){if(d.hasPropertyBySemantic(n))return d.getPropertyBySemantic(n);if(d.hasProperty(n))return d.getProperty(n)}};qu.prototype.getPropertyInherited=function(e){return qu.getPropertyInherited(this._content,this._batchId,e)};qu.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0};qu.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)};qu.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)};qu.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var ma=qu;var Lsn=y(C(),1);var fsn=y(C(),1),JH=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)})}},jH=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)})}},td=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.index0;){if(e.binary_ops.hasOwnProperty(t)&&(!e.isIdentifierStart(this.code)||this.index+t.lengthr.right_a&&h.right_a?i>h.prec:i<=h.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=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":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"});td.max_unop_len=td.getMaxKeyLen(td.unary_ops);td.max_binop_len=td.getMaxKeyLen(td.binary_ops);var wb=e=>new td(e).parse(),DFe=Object.getOwnPropertyNames(class{});Object.getOwnPropertyNames(td).filter(e=>!DFe.includes(e)&&wb[e]===void 0).forEach(e=>{wb[e]=td[e]});wb.Jsep=td;var QFe="ConditionalExpression",UFe={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:QFe,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 :")}})}};wb.plugins.register(UFe);var Asn=y(C(),1),kFe={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},Et=Object.freeze(kFe);function bh(e,t){this._expression=e,e=iPe(e,t),e=rPe(oPe(e)),wb.addBinaryOp("=~",0),wb.addBinaryOp("!~",0);let n;try{n=wb(e)}catch(i){throw new de(i)}this._runtimeAst=Pi(this,n)}Object.defineProperties(bh.prototype,{expression:{get:function(){return this._expression}}});var Un={arrayIndex:0,arrayArray:[[]],cartesian2Index:0,cartesian3Index:0,cartesian4Index:0,cartesian2Array:[new D],cartesian3Array:[new m],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 D),this.cartesian2Array[this.cartesian2Index++]},getCartesian3:function(){return this.cartesian3Index>=this.cartesian3Array.length&&this.cartesian3Array.push(new m),this.cartesian3Array[this.cartesian3Index++]},getCartesian4:function(){return this.cartesian4Index>=this.cartesian4Array.length&&this.cartesian4Array.push(new ce),this.cartesian4Array[this.cartesian4Index++]}};bh.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 D||n instanceof m||n instanceof ce?n.clone(t):n};bh.prototype.evaluateColor=function(e,t){Un.reset();let n=this._runtimeAst.evaluate(e);return U.fromCartesian4(n,t)};bh.prototype.getShaderFunction=function(e,t,n,i){let o=this.getShaderExpression(t,n);return o=`${i} ${e} { return ${o}; } `,o};bh.prototype.getShaderExpression=function(e,t){return this._runtimeAst.getShaderExpression(e,t)};bh.prototype.getVariables=function(){let e=[];return this._runtimeAst.getVariables(e),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var YFe=["!","-","+"],ise=["+","-","*","/","%","===","!==",">",">=","<","<=","&&","||","!~","=~"],VZ=/\${(.*?)}/g,OFe=/\\/g,HFe="@#%",zFe=/@#%/g,kD=new U,YD={abs:ha(Math.abs),sqrt:ha(Math.sqrt),cos:ha(Math.cos),sin:ha(Math.sin),tan:ha(Math.tan),acos:ha(Math.acos),asin:ha(Math.asin),atan:ha(Math.atan),radians:ha(Z.toRadians),degrees:ha(Z.toDegrees),sign:ha(Z.sign),floor:ha(Math.floor),ceil:ha(Math.ceil),round:ha(Math.round),exp:ha(Math.exp),exp2:ha(JFe),log:ha(Math.log),log2:ha(jFe),fract:ha(KFe),length:qFe,normalize:$Fe},OD={atan2:QD(Math.atan2,!1),pow:QD(Math.pow,!1),min:QD(Math.min,!0),max:QD(Math.max,!0),distance:ePe,dot:tPe,cross:nPe},ez={clamp:ose(Z.clamp,!0),mix:ose(Z.lerp,!0)};function KFe(e){return e-Math.floor(e)}function JFe(e){return Math.pow(2,e)}function jFe(e){return Z.log2(e)}function ha(e){return function(t,n){if(typeof n=="number")return e(n);if(n instanceof D)return D.fromElements(e(n.x),e(n.y),Un.getCartesian2());if(n instanceof m)return m.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 de(`Function "${t}" requires a vector or number argument. Argument is ${n}.`)}}function QD(e,t){return function(n,i,o){if(t&&typeof o=="number"){if(typeof i=="number")return e(i,o);if(i instanceof D)return D.fromElements(e(i.x,o),e(i.y,o),Un.getCartesian2());if(i instanceof m)return m.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 D&&o instanceof D)return D.fromElements(e(i.x,o.x),e(i.y,o.y),Un.getCartesian2());if(i instanceof m&&o instanceof m)return m.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 de(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i} and ${o}.`)}}function ose(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 D&&o instanceof D)return D.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),Un.getCartesian2());if(i instanceof m&&o instanceof m)return m.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 D&&o instanceof D&&r instanceof D)return D.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),Un.getCartesian2());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),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 de(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i}, ${o}, and ${r}.`)}}function qFe(e,t){if(typeof t=="number")return Math.abs(t);if(t instanceof D)return D.magnitude(t);if(t instanceof m)return m.magnitude(t);if(t instanceof ce)return ce.magnitude(t);throw new de(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function $Fe(e,t){if(typeof t=="number")return 1;if(t instanceof D)return D.normalize(t,Un.getCartesian2());if(t instanceof m)return m.normalize(t,Un.getCartesian3());if(t instanceof ce)return ce.normalize(t,Un.getCartesian4());throw new de(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function ePe(e,t,n){if(typeof t=="number"&&typeof n=="number")return Math.abs(t-n);if(t instanceof D&&n instanceof D)return D.distance(t,n);if(t instanceof m&&n instanceof m)return m.distance(t,n);if(t instanceof ce&&n instanceof ce)return ce.distance(t,n);throw new de(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function tPe(e,t,n){if(typeof t=="number"&&typeof n=="number")return t*n;if(t instanceof D&&n instanceof D)return D.dot(t,n);if(t instanceof m&&n instanceof m)return m.dot(t,n);if(t instanceof ce&&n instanceof ce)return ce.dot(t,n);throw new de(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function nPe(e,t,n){if(t instanceof m&&n instanceof m)return m.cross(t,n,Un.getCartesian3());throw new de(`Function "${e}" requires vec3 arguments. Arguments are ${t} and ${n}.`)}function Zt(e,t,n,i,o){this._type=e,this._value=t,this._left=n,this._right=i,this._test=o,this.evaluate=void 0,pPe(this)}function iPe(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 oPe(e){return e.replace(OFe,HFe)}function $H(e){return e.replace(zFe,"\\")}function rPe(e){let t=e,n="",i=t.indexOf("${");for(;i>=0;){let o=t.indexOf("'"),r=t.indexOf('"'),s;if(o>=0&&o=0&&r=0?new Zt(Et.VARIABLE_IN_STRING,e.value):new Zt(Et.LITERAL_STRING,$H(e.value))}function aPe(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 de(`${o} is not a function.`);return i===0?o==="test"?new Zt(Et.LITERAL_BOOLEAN,!1):new Zt(Et.LITERAL_NULL,null):(s=Pi(e,c),a=Pi(e,n[0]),new Zt(Et.FUNCTION_CALL,o,s,a))}else if(o==="toString")return r=Pi(e,c),new Zt(Et.FUNCTION_CALL,o,r);throw new de(`Unexpected function call "${o}".`)}if(o=t.callee.name,o==="color"){if(i===0)return new Zt(Et.LITERAL_COLOR,o);if(r=Pi(e,n[0]),l(n[1])){let c=Pi(e,n[1]);return new Zt(Et.LITERAL_COLOR,o,[r,c])}return new Zt(Et.LITERAL_COLOR,o,[r])}else if(o==="rgb"||o==="hsl"){if(i<3)throw new de(`${o} requires three arguments.`);return r=[Pi(e,n[0]),Pi(e,n[1]),Pi(e,n[2])],new Zt(Et.LITERAL_COLOR,o,r)}else if(o==="rgba"||o==="hsla"){if(i<4)throw new de(`${o} requires four arguments.`);return r=[Pi(e,n[0]),Pi(e,n[1]),Pi(e,n[2]),Pi(e,n[3])],new Zt(Et.LITERAL_COLOR,o,r)}else if(o==="vec2"||o==="vec3"||o==="vec4"){r=new Array(i);for(let c=0;c1)throw new de(`${o} requires exactly one argument.`);return r=Pi(e,n[0]),new Zt(Et.UNARY,o,r)}else if(o==="getExactClassName"){if(i>0)throw new de(`${o} does not take any argument.`);return new Zt(Et.UNARY,o)}else if(l(YD[o])){if(i!==1)throw new de(`${o} requires exactly one argument.`);return r=Pi(e,n[0]),new Zt(Et.UNARY,o,r)}else if(l(OD[o])){if(i!==2)throw new de(`${o} requires exactly two arguments.`);return s=Pi(e,n[0]),a=Pi(e,n[1]),new Zt(Et.BINARY,o,s,a)}else if(l(ez[o])){if(i!==3)throw new de(`${o} requires exactly three arguments.`);s=Pi(e,n[0]),a=Pi(e,n[1]);let c=Pi(e,n[2]);return new Zt(Et.TERNARY,o,s,a,c)}else{if(o==="Boolean")return i===0?new Zt(Et.LITERAL_BOOLEAN,!1):(r=Pi(e,n[0]),new Zt(Et.UNARY,o,r));if(o==="Number")return i===0?new Zt(Et.LITERAL_NUMBER,0):(r=Pi(e,n[0]),new Zt(Et.UNARY,o,r));if(o==="String")return i===0?new Zt(Et.LITERAL_STRING,""):(r=Pi(e,n[0]),new Zt(Et.UNARY,o,r));if(o==="regExp")return cPe(e,t)}}throw new de(`Unexpected function call "${o}".`)}function cPe(e,t){let n=t.arguments;if(n.length===0)return new Zt(Et.LITERAL_REGEX,new RegExp);let i=Pi(e,n[0]),o;if(n.length>1){let r=Pi(e,n[1]);if(qH(i)&&qH(r)){try{o=new RegExp($H(String(i._value)),r._value)}catch(s){throw new de(s)}return new Zt(Et.LITERAL_REGEX,o)}return new Zt(Et.REGEX,i,r)}if(qH(i)){try{o=new RegExp($H(String(i._value)))}catch(r){throw new de(r)}return new Zt(Et.LITERAL_REGEX,o)}return new Zt(Et.REGEX,i)}function lPe(e){if(hPe(e.name)){let t=fPe(e.name);return t.substr(0,8)==="tiles3d_"?new Zt(Et.BUILTIN_VARIABLE,t):new Zt(Et.VARIABLE,t)}else{if(e.name==="NaN")return new Zt(Et.LITERAL_NUMBER,NaN);if(e.name==="Infinity")return new Zt(Et.LITERAL_NUMBER,1/0);if(e.name==="undefined")return new Zt(Et.LITERAL_UNDEFINED,void 0)}throw new de(`${e.name} is not defined.`)}function dPe(e){let t=e.property.name;if(t==="PI")return new Zt(Et.LITERAL_NUMBER,Math.PI);if(t==="E")return new Zt(Et.LITERAL_NUMBER,Math.E)}function uPe(e){if(e.property.name==="POSITIVE_INFINITY")return new Zt(Et.LITERAL_NUMBER,Number.POSITIVE_INFINITY)}function mPe(e,t){if(t.object.name==="Math")return dPe(t);if(t.object.name==="Number")return uPe(t);let n,i=Pi(e,t.object);return t.computed?(n=Pi(e,t.property),new Zt(Et.MEMBER,"brackets",i,n)):(n=new Zt(Et.LITERAL_STRING,t.property.name),new Zt(Et.MEMBER,"dot",i,n))}function qH(e){return e._type>=Et.LITERAL_NULL}function hPe(e){return e.substr(0,4)==="czm_"}function fPe(e){return e.substr(4)}function Pi(e,t){let n,i,o,r;if(t.type==="Literal")n=sPe(t);else if(t.type==="CallExpression")n=aPe(e,t);else if(t.type==="Identifier")n=lPe(t);else if(t.type==="UnaryExpression"){i=t.operator;let s=Pi(e,t.argument);if(YFe.indexOf(i)>-1)n=new Zt(Et.UNARY,i,s);else throw new de(`Unexpected operator "${i}".`)}else if(t.type==="BinaryExpression")if(i=t.operator,o=Pi(e,t.left),r=Pi(e,t.right),ise.indexOf(i)>-1)n=new Zt(Et.BINARY,i,o,r);else throw new de(`Unexpected operator "${i}".`);else if(t.type==="LogicalExpression")i=t.operator,o=Pi(e,t.left),r=Pi(e,t.right),ise.indexOf(i)>-1&&(n=new Zt(Et.BINARY,i,o,r));else if(t.type==="ConditionalExpression"){let s=Pi(e,t.test);o=Pi(e,t.consequent),r=Pi(e,t.alternate),n=new Zt(Et.CONDITIONAL,"?",o,r,s)}else if(t.type==="MemberExpression")n=mPe(e,t);else if(t.type==="ArrayExpression"){let s=[];for(let a=0;a"?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(OD[e._value])&&(e.evaluate=bPe(e._value)):e._type===Et.TERNARY?e.evaluate=yPe(e._value):e._type===Et.MEMBER?e._value==="brackets"?e.evaluate=e._evaluateMemberBrackets:e.evaluate=e._evaluateMemberDot:e._type===Et.ARRAY?e.evaluate=e._evaluateArray:e._type===Et.VARIABLE?e.evaluate=e._evaluateVariable:e._type===Et.VARIABLE_IN_STRING?e.evaluate=e._evaluateVariableString:e._type===Et.LITERAL_COLOR?e.evaluate=e._evaluateLiteralColor:e._type===Et.LITERAL_VECTOR?e.evaluate=e._evaluateLiteralVector:e._type===Et.LITERAL_STRING?e.evaluate=e._evaluateLiteralString:e._type===Et.REGEX?e.evaluate=e._evaluateRegExp:e._type===Et.BUILTIN_VARIABLE?e._value==="tiles3d_tileset_time"&&(e.evaluate=APe):e.evaluate=e._evaluateLiteral}function APe(e){return l(e)?e.content.tileset.timeSinceLoad:0}function gPe(e){let t=YD[e];return function(n){let i=this._left.evaluate(n);return t(e,i)}}function bPe(e){let t=OD[e];return function(n){let i=this._left.evaluate(n),o=this._right.evaluate(n);return t(e,i,o)}}function yPe(e){let t=ez[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 HD(e,t){if(l(e))return e.getPropertyInherited(t)}Zt.prototype._evaluateLiteral=function(){return this._value};Zt.prototype._evaluateLiteralColor=function(e){let t=kD,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())};Zt.prototype._evaluateLiteralVector=function(e){let t=Un.getArray(),n=this._value,i=this._left,o=i.length;for(let a=0;a1)throw new de(`Invalid ${n} constructor. Not enough arguments.`);if(r>s&&o>1)throw new de(`Invalid ${n} constructor. Too many arguments.`);if(r===1){let a=t[0];t.push(a,a,a)}if(n==="vec2")return D.fromArray(t,0,Un.getCartesian2());if(n==="vec3")return m.fromArray(t,0,Un.getCartesian3());if(n==="vec4")return ce.fromArray(t,0,Un.getCartesian4())};Zt.prototype._evaluateLiteralString=function(){return this._value};Zt.prototype._evaluateVariableString=function(e){let t=this._value,n=VZ.exec(t);for(;n!==null;){let i=n[0],o=n[1],r=HD(e,o);l(r)||(r=""),t=t.replace(i,r),VZ.lastIndex+=r.length-i.length,n=VZ.exec(t)}return t};Zt.prototype._evaluateVariable=function(e){return HD(e,this._value)};function RC(e){return e._value==="feature"}Zt.prototype._evaluateMemberDot=function(e){if(RC(this._left))return HD(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!l(t))return;let n=this._right.evaluate(e);if(t instanceof D||t instanceof m||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]};Zt.prototype._evaluateMemberBrackets=function(e){if(RC(this._left))return HD(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!l(t))return;let n=this._right.evaluate(e);if(t instanceof D||t instanceof m||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]};Zt.prototype._evaluateArray=function(e){let t=[];for(let n=0;n" requires number arguments. Arguments are ${t} and ${n}.`);return t>n};Zt.prototype._evaluateGreaterThanOrEquals=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new de(`Operator ">=" requires number arguments. Arguments are ${t} and ${n}.`);return t>=n};Zt.prototype._evaluateOr=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new de(`Operator "||" requires boolean arguments. First argument is ${t}.`);if(t)return!0;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new de(`Operator "||" requires boolean arguments. Second argument is ${n}.`);return t||n};Zt.prototype._evaluateAnd=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new de(`Operator "&&" requires boolean arguments. First argument is ${t}.`);if(!t)return!1;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new de(`Operator "&&" requires boolean arguments. Second argument is ${n}.`);return t&&n};Zt.prototype._evaluatePlus=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof D&&t instanceof D)return D.add(t,n,Un.getCartesian2());if(n instanceof m&&t instanceof m)return m.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 de(`Operator "+" requires vector or number arguments of matching types, or at least one string argument. Arguments are ${t} and ${n}.`)};Zt.prototype._evaluateMinus=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof D&&t instanceof D)return D.subtract(t,n,Un.getCartesian2());if(n instanceof m&&t instanceof m)return m.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 de(`Operator "-" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};Zt.prototype._evaluateTimes=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof D&&t instanceof D)return D.multiplyComponents(t,n,Un.getCartesian2());if(n instanceof D&&typeof t=="number")return D.multiplyByScalar(n,t,Un.getCartesian2());if(t instanceof D&&typeof n=="number")return D.multiplyByScalar(t,n,Un.getCartesian2());if(n instanceof m&&t instanceof m)return m.multiplyComponents(t,n,Un.getCartesian3());if(n instanceof m&&typeof t=="number")return m.multiplyByScalar(n,t,Un.getCartesian3());if(t instanceof m&&typeof n=="number")return m.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 de(`Operator "*" requires vector or number arguments. If both arguments are vectors they must be matching types. Arguments are ${t} and ${n}.`)};Zt.prototype._evaluateDivide=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof D&&t instanceof D)return D.divideComponents(t,n,Un.getCartesian2());if(t instanceof D&&typeof n=="number")return D.divideByScalar(t,n,Un.getCartesian2());if(n instanceof m&&t instanceof m)return m.divideComponents(t,n,Un.getCartesian3());if(t instanceof m&&typeof n=="number")return m.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 de(`Operator "/" requires vector or number arguments of matching types, or a number as the second argument. Arguments are ${t} and ${n}.`)};Zt.prototype._evaluateMod=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof D&&t instanceof D)return D.fromElements(t.x%n.x,t.y%n.y,Un.getCartesian2());if(n instanceof m&&t instanceof m)return m.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 de(`Operator "%" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};Zt.prototype._evaluateEqualsStrict=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof D&&t instanceof D||n instanceof m&&t instanceof m||n instanceof ce&&t instanceof ce?t.equals(n):t===n};Zt.prototype._evaluateNotEqualsStrict=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof D&&t instanceof D||n instanceof m&&t instanceof m||n instanceof ce&&t instanceof ce?!t.equals(n):t!==n};Zt.prototype._evaluateConditional=function(e){let t=this._test.evaluate(e);if(typeof t!="boolean")throw new de(`Conditional argument of conditional expression must be a boolean. Argument is ${t}.`);return t?this._left.evaluate(e):this._right.evaluate(e)};Zt.prototype._evaluateNaN=function(e){return isNaN(this._left.evaluate(e))};Zt.prototype._evaluateIsFinite=function(e){return isFinite(this._left.evaluate(e))};Zt.prototype._evaluateIsExactClass=function(e){return l(e)?e.isExactClass(this._left.evaluate(e)):!1};Zt.prototype._evaluateIsClass=function(e){return l(e)?e.isClass(this._left.evaluate(e)):!1};Zt.prototype._evaluateGetExactClassName=function(e){if(l(e))return e.getExactClassName()};Zt.prototype._evaluateBooleanConversion=function(e){return!!this._left.evaluate(e)};Zt.prototype._evaluateNumberConversion=function(e){return Number(this._left.evaluate(e))};Zt.prototype._evaluateStringConversion=function(e){return String(this._left.evaluate(e))};Zt.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 de(o)}return i};Zt.prototype._evaluateRegExpTest=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new de(`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)};Zt.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 de(`Operator "=~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};Zt.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 de(`Operator "!~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};Zt.prototype._evaluateRegExpExec=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new de(`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};Zt.prototype._evaluateToString=function(e){let t=this._left.evaluate(e);if(t instanceof RegExp||t instanceof D||t instanceof m||t instanceof ce)return String(t);throw new de(`Unexpected function call "${this._value}".`)};function rse(e){let t=e._left,n=t.length;for(let a=0;a1){let p=d[0],g=d[1];return g!=="1.0"&&(t.translucent=!0),`vec4(${p}, ${g})`}}else return"vec4(1.0)";return`vec4(${d[0]}, 1.0)`}else{if(c==="rgb")return i=sse(this),l(i)?UD(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=sse(this),l(i)?UD(i):`vec4(${d[0]} / 255.0, ${d[1]} / 255.0, ${d[2]} / 255.0, ${d[3]})`;if(c==="hsl")return i=rse(this),l(i)?UD(i):`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), 1.0)`;if(c==="hsla")return i=rse(this),l(i)?(i.alpha!==1&&(t.translucent=!0),UD(i)):(d[3]!=="1.0"&&(t.translucent=!0),`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), ${d[3]})`)}break;case Et.LITERAL_VECTOR:u=o.length,h=`${c}(`;for(let p=0;p0;){let u=t.pop();if(U.equals(u.color,a.color))d=tz(n,s,d,i,o,u.batchIds,r),a.batchIds=a.batchIds.concat(u.batchIds),a.count=d-a.offset;else{let h=d;d=tz(n,s,d,i,o,u.batchIds,r),u.offset=h,u.count=d-h,c.push(u),a=u}}e._va.indexBuffer.copyFromArrayView(s),e._indices=s,e._batchedIndices=c}function nz(e,t,n,i,o,r,s){let a=e.bytesPerIndex,c=r.length;for(let d=0;d0;){let h=t.pop();if(U.equals(h.color,r.color))d=nz(a,c,d,n,i,h.batchIds,o),r.batchIds=r.batchIds.concat(h.batchIds),r.count=d-r.offset;else{let p=d;d=nz(a,c,d,n,i,h.batchIds,o),h.offset=p,h.count=d-p,s.push(h),r=h}}let u=e._va;e._va=e._vaSwap,e._vaSwap=u,e._batchedIndices=s}function GPe(e,t){return t.color.toRgba()-e.color.toRgba()}function ZPe(e,t){if(!e._batchDirty)return!1;let n=e._batchedIndices,i=n.length,o=!1,r={};for(let s=0;s=b&&s{e.isDestroyed()||(e._error=f)}):void 0}}function HPe(e){l(e._primitive)||(e._primitive=new GC({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)}Qd.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};Qd.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};Qd.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};Qd.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};Qd.prototype.update=function(e){if(!this._ready){if(l(this._promise)||(this._promise=OPe(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)};Qd.prototype.isDestroyed=function(){return!1};Qd.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};var CA=Qd;function Df(e,t,n,i,o){this._tileset=e,this._tile=t,this._resource=n,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,JPe(this,i,o)}Object.defineProperties(Df.prototype,{featuresLength:{get:function(){return l(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return l(this._geometries)?this._geometries.trianglesLength:0}},geometryByteLength:{get:function(){return l(this._geometries)?this._geometries.geometryByteLength:0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return l(this._batchTable)?this._batchTable.batchTableByteLength:0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},batchTable:{get:function(){return this._batchTable}},group:{get:function(){return this._group},set:function(e){this._group=e}}});function zPe(e){return function(t,n){l(e._geometries)&&e._geometries.updateCommands(t,n)}}function KPe(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 h=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(h&&p)throw new de("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;s0)for(i=new Uint16Array(c),s=0;s0)for(o=new Uint16Array(d),s=0;s0)for(r=new Uint16Array(u),s=0;s0&&(g=mr(i,n,d),n+=d,u>0&&(f=new Uint8Array(t,n,u),f=new Uint8Array(f)));let b=h.BOXES_LENGTH??0,x=h.CYLINDERS_LENGTH??0,I=h.ELLIPSOIDS_LENGTH??0,_=h.SPHERES_LENGTH??0,E=b+x+I+_,S=new bA(e,E,g,f,zPe(e));if(e._batchTable=S,E===0)return;let R=e.tile.computedTransform,G;l(h.RTC_CENTER)&&(G=m.unpack(h.RTC_CENTER),X.multiplyByPoint(R,G,G));let B=KPe(h,p);if(b>0||x>0||I>0||_>0){let w,F,P,A;if(b>0){let T=p.byteOffset+h.BOXES.byteOffset;w=new Float32Array(p.buffer,T,CA.packedBoxLength*b)}if(x>0){let T=p.byteOffset+h.CYLINDERS.byteOffset;F=new Float32Array(p.buffer,T,CA.packedCylinderLength*x)}if(I>0){let T=p.byteOffset+h.ELLIPSOIDS.byteOffset;P=new Float32Array(p.buffer,T,CA.packedEllipsoidLength*I)}if(_>0){let T=p.byteOffset+h.SPHERES.byteOffset;A=new Float32Array(p.buffer,T,CA.packedSphereLength*_)}return e._geometries=new CA({boxes:w,boxBatchIds:B.boxes,cylinders:F,cylinderBatchIds:B.cylinders,ellipsoids:P,ellipsoidBatchIds:B.ellipsoids,spheres:A,sphereBatchIds:B.spheres,center:G,modelMatrix:R,batchTable:S,boundingVolume:e.tile.boundingVolume.boundingVolume}),e}return Promise.resolve(e)}function mse(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}}Df.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};Df.prototype.getFeature=function(e){return mse(this),this._features[e]};Df.prototype.applyDebugSettings=function(e,t){l(this._geometries)&&this._geometries.applyDebugSettings(e,t)};Df.prototype.applyStyle=function(e){mse(this),l(this._geometries)&&this._geometries.applyStyle(e,this._features)};Df.prototype.update=function(e,t){l(this._geometries)&&(this._geometries.classificationType=this._tileset.classificationType,this._geometries.debugWireframe=this._tileset.debugWireframe,this._geometries.update(t)),l(this._batchTable)&&this._geometries.ready&&(this._batchTable.update(e,t),this._ready=!0)};Df.prototype.pick=function(e,t,n){};Df.prototype.isDestroyed=function(){return!1};Df.prototype.destroy=function(){return this._geometries=this._geometries&&this._geometries.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),me(this)};var GZ=Df;var fAn=y(C(),1);var Lan=y(C(),1);var iz={};iz.encode2D=function(e,t,n){let i=Math.pow(2,e),o={x:t,y:n},r,s,a,c=BigInt(0);for(a=i/2;a>0;a/=2)r=(o.x&a)>0?1:0,s=(o.y&a)>0?1:0,c+=BigInt((3*r^s)*a*a),hse(i,o,r,s);return c};iz.decode2D=function(e,t){let n=Math.pow(2,e),i={x:0,y:0},o,r,s,a;for(s=1,a=t;s>>0,oz=2*BC+1,Wb=4,Ase=[],gse=[],$Pe=[[0,1,3,2],[0,2,3,1],[3,2,0,1],[3,1,0,2]],Fb=1,lE=2,zD=[Fb,0,0,Fb|lE];function ys(e){if(!Ht.supportsBigInt())throw new de("S2 required BigInt support");this._cellId=e,this._level=ys.getLevel(e)}ys.fromToken=function(e){return new ys(ys.getIdFromToken(e))};ys.isValidId=function(e){return!(e<=0||e>>BigInt(oz)>5||!(e&~e+BigInt(1)&BigInt("0x1555555555555555")))};ys.isValidToken=function(e){return/^[0-9a-fA-F]{1,16}$/.test(e)?ys.isValidId(ys.getIdFromToken(e)):!1};ys.getIdFromToken=function(e){return BigInt("0x"+e+"0".repeat(16-e.length))};ys.getTokenFromId=function(e){let t=Math.floor(lMe(e)/4),n=e.toString(16).replace(/0*$/,"");return Array(17-t-n.length).join("0")+n};ys.getLevel=function(e){let t=0;for(;e!==BigInt(0)&&!(e&BigInt(1));)t++,e=e>>BigInt(1);return BC-(t>>1)};ys.prototype.getChild=function(e){let t=Cse(this._cellId)>>BigInt(2),n=this._cellId+BigInt(2*e+1-4)*t;return new ys(n)};ys.prototype.getParent=function(){let e=Cse(this._cellId)<>1&1;return yse(i[0],o[0][r^n&1],o[1][r])}function nMe(e,t){let n=bse(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 bse(e){Ase.length===0&&sMe();let t=Number(e>>BigInt(oz)),n=t&Fb,i=(1<=0;s--){let c=(1<<2*(s===7?BC-7*Wb:Wb))-1;n+=Number(e>>BigInt(s*2*Wb+1)&BigInt(c))<<2,n=gse[n];let d=s*Wb;o+=n>>Wb+2<>2&i)<=.5?1/3*(4*e*e-1):1/3*(1-4*(1-e)*(1-e))}function fse(e){return 1/qPe*e}function oMe(e,t){let n=[[],[]],i=rMe(t);for(let o=0;o<2;++o){let r=e[o]&-i,s=r+i;n[o][0]=KD(pse(r)),n[o][1]=KD(pse(s))}return n}function rMe(e){return 1<>>0}function pse(e){return 1/jPe*e}function Pb(e,t,n,i,o,r){if(e===Wb){let s=(t<>1),n+(s[0]&1),i,o,r^zD[0]),Pb(e,t+(s[1]>>1),n+(s[1]&1),i,o+1,r^zD[1]),Pb(e,t+(s[2]>>1),n+(s[2]&1),i,o+2,r^zD[2]),Pb(e,t+(s[3]>>1),n+(s[3]&1),i,o+3,r^zD[3])}}function sMe(){Pb(0,0,0,0,0,0),Pb(0,0,0,Fb,0,Fb),Pb(0,0,0,lE,0,lE),Pb(0,0,0,Fb|lE,0,Fb|lE)}function Cse(e){return e&~e+BigInt(1)}function aMe(e){return BigInt(1)<>3,r=i%8;n+=e[o]>>r&1}return n}Object.defineProperties(rz.prototype,{lengthBits:{get:function(){return this._lengthBits}},availableCount:{get:function(){return this._availableCount}}});rz.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 dE=rz;var kan=y(C(),1);function IA(e){e=e??Y.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(IA.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});IA.prototype.hasProperty=function(e){return this._metadataTable.hasProperty(e)};IA.prototype.hasPropertyBySemantic=function(e){return this._metadataTable.hasPropertyBySemantic(e)};IA.prototype.getPropertyIds=function(e){return this._metadataTable.getPropertyIds(e)};IA.prototype.getProperty=function(e){return this._metadataTable.getProperty(this._entityId,e)};IA.prototype.setProperty=function(e,t){return this._metadataTable.setProperty(this._entityId,e,t)};IA.prototype.getPropertyBySemantic=function(e){return this._metadataTable.getPropertyBySemantic(this._entityId,e)};IA.prototype.setPropertyBySemantic=function(e,t){return this._metadataTable.setPropertyBySemantic(this._entityId,e,t)};var uE=IA;var Oan=y(C(),1);var JD={QUADTREE:"QUADTREE",OCTREE:"OCTREE"};JD.getBranchingFactor=function(e){switch(e){case JD.OCTREE:return 8;case JD.QUADTREE:return 4}};var Cs=Object.freeze(JD);var ncn=y(C(),1);var jan=y(C(),1);function Ma(){}Object.defineProperties(Ma.prototype,{class:{get:function(){Ae.throwInstantiationError()}}});Ma.prototype.hasProperty=function(e){Ae.throwInstantiationError()};Ma.prototype.hasPropertyBySemantic=function(e){Ae.throwInstantiationError()};Ma.prototype.getPropertyIds=function(e){Ae.throwInstantiationError()};Ma.prototype.getProperty=function(e){Ae.throwInstantiationError()};Ma.prototype.setProperty=function(e,t){Ae.throwInstantiationError()};Ma.prototype.getPropertyBySemantic=function(e){Ae.throwInstantiationError()};Ma.prototype.setPropertyBySemantic=function(e,t){Ae.throwInstantiationError()};Ma.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))};Ma.hasPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!l(i))return!1;let o=i[e];return l(o)};Ma.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};Ma.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=ke(i.default,!0),i.unpackVectorAndMatrixTypes(o,r);if(l(o))return o=i.normalize(o),o=i.applyValueTransform(o),i.unpackVectorAndMatrixTypes(o,r)};Ma.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};Ma.getPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!l(i))return;let o=i[e];if(l(o))return Ma.getProperty(o.id,t,n)};Ma.setPropertyBySemantic=function(e,t,n,i){let o=i.propertiesBySemantic;if(!l(o))return!1;let r=i.propertiesBySemantic[e];return l(r)?Ma.setProperty(r.id,t,n,i):!1};var Kn=Ma;function _A(e){e=e??Y.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(_A.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});_A.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};_A.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};_A.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};_A.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};_A.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};_A.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};_A.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var ZZ=_A;var zcn=y(C(),1);var Dcn=y(C(),1);var acn=y(C(),1);var Yt={INT8:"INT8",UINT8:"UINT8",INT16:"INT16",UINT16:"UINT16",INT32:"INT32",UINT32:"UINT32",INT64:"INT64",UINT64:"UINT64",FLOAT32:"FLOAT32",FLOAT64:"FLOAT64"};Yt.getMinimum=function(e){switch(e){case Yt.INT8:return-128;case Yt.UINT8:return 0;case Yt.INT16:return-32768;case Yt.UINT16:return 0;case Yt.INT32:return-2147483648;case Yt.UINT32:return 0;case Yt.INT64:return Ht.supportsBigInt()?BigInt("-9223372036854775808"):-Math.pow(2,63);case Yt.UINT64:return Ht.supportsBigInt()?BigInt(0):0;case Yt.FLOAT32:return-34028234663852886e22;case Yt.FLOAT64:return-Number.MAX_VALUE}};Yt.getMaximum=function(e){switch(e){case Yt.INT8:return 127;case Yt.UINT8:return 255;case Yt.INT16:return 32767;case Yt.UINT16:return 65535;case Yt.INT32:return 2147483647;case Yt.UINT32:return 4294967295;case Yt.INT64:return Ht.supportsBigInt()?BigInt("9223372036854775807"):Math.pow(2,63)-1;case Yt.UINT64:return Ht.supportsBigInt()?BigInt("18446744073709551615"):Math.pow(2,64)-1;case Yt.FLOAT32:return 34028234663852886e22;case Yt.FLOAT64:return Number.MAX_VALUE}};Yt.isIntegerType=function(e){switch(e){case Yt.INT8:case Yt.UINT8:case Yt.INT16:case Yt.UINT16:case Yt.INT32:case Yt.UINT32:case Yt.INT64:case Yt.UINT64:return!0;default:return!1}};Yt.isUnsignedIntegerType=function(e){switch(e){case Yt.UINT8:case Yt.UINT16:case Yt.UINT32:case Yt.UINT64:return!0;default:return!1}};Yt.isVectorCompatible=function(e){switch(e){case Yt.INT8:case Yt.UINT8:case Yt.INT16:case Yt.UINT16:case Yt.INT32:case Yt.UINT32:case Yt.FLOAT32:case Yt.FLOAT64:return!0;default:return!1}};Yt.normalize=function(e,t){return Math.max(Number(e)/Number(Yt.getMaximum(t)),-1)};Yt.unnormalize=function(e,t){let n=Yt.getMaximum(t),i=Yt.isUnsignedIntegerType(t)?0:-n;return e=Z.sign(e)*Math.round(Math.abs(e)*Number(n)),(t===Yt.INT64||t===Yt.UINT64)&&Ht.supportsBigInt()&&(e=BigInt(e)),e>n?n:e1;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)};dc.prototype.handleNoData=function(e){let t=this._noData;if(!l(t))return e;if(!Ese(e,t))return e};function Ese(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};dc.prototype.packVectorAndMatrixTypes=function(e,t){t=t??!1;let n=bt.getMathType(this._type),i=this._isArray,o=bt.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};dc.prototype.validate=function(e){if(!(!l(e)&&l(this._default)))return this._required&&!l(e)?"required property must have a value":this._isArray?fMe(this,e):Tse(this,e)};function fMe(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?xse(e,t,n):void 0}if(eUt.getMaximum(t))return xse(e,t,n)}function _se(e,t){return`value ${e} of type ${t} must be finite`}function sz(e,t,n){if(!Array.isArray(e))return n(e,t);for(let i=0;i>3,i=e%8;return(t.typedArray[n]>>i&1)===1}function TMe(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 LMe(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)<96?x-97:x>64?x-39:x+4}for(var I=0,b=0;b=3),c(n.exports.meshopt_spatialSortRemap,g,g.length/f,f*4)},encodeVertexBuffer:function(g,f,b){r(b>0&&b<=256),r(b%4==0);var x=n.exports.meshopt_encodeVertexBufferBound(f,b);return d(n.exports.meshopt_encodeVertexBuffer,x,g,f,b)},encodeIndexBuffer:function(g,f,b){r(b==2||b==4),r(f%3==0);var x=h(g,b),I=n.exports.meshopt_encodeIndexBufferBound(f,u(x)+1);return d(n.exports.meshopt_encodeIndexBuffer,I,x,f,4)},encodeIndexSequence:function(g,f,b){r(b==2||b==4);var x=h(g,b),I=n.exports.meshopt_encodeIndexSequenceBound(f,u(x)+1);return d(n.exports.meshopt_encodeIndexSequence,I,x,f,4)},encodeGltfBuffer:function(g,f,b,x){var I={ATTRIBUTES:this.encodeVertexBuffer,TRIANGLES:this.encodeIndexBuffer,INDICES:this.encodeIndexSequence};return r(I[x]),I[x](g,f,b)},encodeFilterOct:function(g,f,b,x){return r(b==4||b==8),r(x>=1&&x<=16),p(n.exports.meshopt_encodeFilterOct,g,f,b,x,16)},encodeFilterQuat:function(g,f,b,x){return r(b==8),r(x>=4&&x<=16),p(n.exports.meshopt_encodeFilterQuat,g,f,b,x,16)},encodeFilterExp:function(g,f,b,x,I){r(b>0&&b%4==0),r(x>=1&&x<=24);var _={Separate:0,SharedVector:1,SharedComponent:2,Clamped:3};return p(n.exports.meshopt_encodeFilterExp,g,f,b,x,b,I?_[I]:1)}}}();var hln=y(C()),Gse=function(){var e="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:W:Odkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:S86qdbk;jYi5ud9:du8Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxcj;abad9Uc;WFbGcjdadca0EhmaialfgPar9Rgoadfhsavaoadz1jjjbgzceVhHcbhOdndninaeaO9nmeaPax9RaD6mdamaeaO9RaOamfgoae6EgAcsfglc9WGhCabaOad2fhXaAcethQaxaDfhiaOaeaoaeao6E9RhLalcl4cifcd4hKazcj;cbfaAfhYcbh8AazcjdfhEaHh3incbhodnawTmbaxa8Acd4fRbbhokaocFeGh5cbh8Eazcj;cbfhqinaih8Fdndndndna5a8Ecet4ciGgoc9:fPdebdkaPa8F9RaA6mrazcj;cbfa8EaA2fa8FaAz1jjjb8Aa8FaAfhixdkazcj;cbfa8EaA2fcbaAz:jjjjb8Aa8FhixekaPa8F9RaK6mva8FaKfhidnaCTmbaPai9RcK6mbaocdtc:q1jjbfcj1jjbawEhaczhrcbhlinargoc9Wfghaqfhrdndndndndndnaaa8Fahco4fRbbalcoG4ciGcdtfydbPDbedvivvvlvkar9cb83bbarcwf9cb83bbxlkarcbaiRbdai8Xbb9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbaqaofgrcGfag9c8F1:NghcKtc8F91aicdfa8J9c8N1:Nfg8KRbbG86bbarcVfcba8KahcjeGcr4fghRbbag9cjjjjjl: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:dg8J9qE86bbarc95fag9c8F1:NgicKtc8F91aha8J9c8N1:NfghRbbG86bbarc96fcbahaicjeGcr4fgiRbbag9cjjjjjl:dg8J9qE86bbarc97fcbaia8J9c8L1:NfgiRbbag9cjjjjjd:dg8J9qE86bbarc98fcbaia8J9c8K1:NfgiRbbag9cjjjjje:dg8J9qE86bbarc99fcbaia8J9c8J1:NfgiRbbag9cjjjj;ab:dg8J9qE86bbarc9:fcbaia8J9cg1:NfgiRbbag9cjjjja:dg8J9qE86bbarcufcbaia8J9ch1:NfgiRbbag9cjjjjz:dgg9qE86bbaiag9ca1:NfhixikaraiRblaiRbbghco4g8Ka8KciSg8KE86bbaqaofgrcGfaiclfa8Kfg8KRbbahcl4ciGg8La8LciSg8LE86bbarcVfa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc7fa8Ka8Lfg8KRbbahciGghahciSghE86bbarctfa8Kahfg8KRbbaiRbeghco4g8La8LciSg8LE86bbarc91fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc4fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc93fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc94fa8Kahfg8KRbbaiRbdghco4g8La8LciSg8LE86bbarc95fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc96fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc97fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc98fa8KahfghRbbaiRbigico4g8Ka8KciSg8KE86bbarc99faha8KfghRbbaicl4ciGg8Ka8KciSg8KE86bbarc9:faha8KfghRbbaicd4ciGg8Ka8KciSg8KE86bbarcufaha8KfgrRbbaiciGgiaiciSgiE86bbaraifhixdkaraiRbwaiRbbghcl4g8Ka8KcsSg8KE86bbaqaofgrcGfaicwfa8Kfg8KRbbahcsGghahcsSghE86bbarcVfa8KahfghRbbaiRbeg8Kcl4g8La8LcsSg8LE86bbarc7faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarctfaha8KfghRbbaiRbdg8Kcl4g8La8LcsSg8LE86bbarc91faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc4faha8KfghRbbaiRbig8Kcl4g8La8LcsSg8LE86bbarc93faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc94faha8KfghRbbaiRblg8Kcl4g8La8LcsSg8LE86bbarc95faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc96faha8KfghRbbaiRbvg8Kcl4g8La8LcsSg8LE86bbarc97faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc98faha8KfghRbbaiRbog8Kcl4g8La8LcsSg8LE86bbarc99faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc9:faha8KfghRbbaiRbrgicl4g8Ka8KcsSg8KE86bbarcufaha8KfgrRbbaicsGgiaicsSgiE86bbaraifhixekarai8Pbb83bbarcwfaicwf8Pbb83bbaiczfhikdnaoaC9pmbalcdfhlaoczfhraPai9RcL0mekkaoaC6moaimexokaCmva8FTmvkaqaAfhqa8Ecefg8Ecl9hmbkdndndndnawTmbasa8Acd4fRbbgociGPlbedrbkaATmdaza8Afh8Fazcj;cbfhhcbh8EaEhaina8FRbbhraahocbhlinaoahalfRbbgqce4cbaqceG9R7arfgr86bbaoadfhoaAalcefgl9hmbkaacefhaa8Fcefh8FahaAfhha8Ecefg8Ecl9hmbxikkaATmeaza8Afhaazcj;cbfhhcbhoceh8EaYh8FinaEaofhlaa8Vbbhrcbhoinala8FaofRbbcwtahaofRbbgqVc;:FiGce4cbaqceG9R7arfgr87bbaladfhlaLaocefgofmbka8FaQfh8FcdhoaacdfhaahaQfhha8EceGhlcbh8EalmbxdkkaATmbcbaocl49Rh8Eaza8AfRbbhqcwhoa3hlinalRbbaotaqVhqalcefhlaocwfgoca9hmbkcbhhaEh8FaYhainazcj;cbfahfRbbhrcwhoaahlinalRbbaotarVhralaAfhlaocwfgoca9hmbkara8E93aq7hqcbhoa8Fhlinalaqao486bbalcefhlaocwfgoca9hmbka8Fadfh8FaacefhaahcefghaA9hmbkkaEclfhEa3clfh3a8Aclfg8Aad6mbkaXazcjdfaAad2z1jjjb8AazazcjdfaAcufad2fadz1jjjb8AaAaOfhOaihxaimbkc9:hoxdkcbc99aPax9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaok:XseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiaPfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaOfhiazaOfhxxekaxcbalRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhAascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhzaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkaOhlxekalcefhlkaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDclfaO87ebaDcdfaz87ebxekabarcdtfgDaABdbaDcwfaOBdbaDclfazBdbkavc;abfaocitfgDazBdbaDaABdlavaicdtfaABdbavc;abfaocefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfaocdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnaecvfal9nmbc9: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;oiliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavciGfgkcd7cetfaD87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavcufciGfcetfaD87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohvxekcjjjj94hvkabakcetfav87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbyd:K1jjbgeabcifc98GfgbBd:K1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkk81dbcjwk8Kbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbc:Kwkl8WNbb",t="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q:6dkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;G9Mqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:183lYud97dur978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxavaialfgmar9Rgoad;8qbbcj;abad9Uc;WFbGcjdadca0EhPdndndnadTmbaoadfhscbhzinaeaz9nmdamax9RaD6miabazad2fhHaxaDfhOaPaeaz9RazaPfae6EgAcsfgocl4cifcd4hCavcj;cbfaoc9WGgXcetfhQavcj;cbfaXci2fhLavcj;cbfaXfhKcbhYaoc;ab6h8AincbhodnawTmbaxaYcd4fRbbhokaocFeGhEcbh3avcj;cbfh5indndndndnaEa3cet4ciGgoc9:fPdebdkamaO9RaX6mwavcj;cbfa3aX2faOaX;8qbbaOaAfhOxdkavcj;cbfa3aX2fcbaX;8kbxekamaO9RaC6moaoclVcbawEhraOaCfhocbhidna8Ambamao9Rc;Gb6mbcbhlina5alfhidndndndndndnaOalco4fRbbgqciGarfPDbedibledibkaipxbbbbbbbbbbbbbbbbpklbxlkaiaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiaopbbbpklbaoczfhoxekaiaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcd4ciGarfPDbedibledibkaiczfpxbbbbbbbbbbbbbbbbpklbxlkaiczfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiczfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiczfaopbbbpklbaoczfhoxekaiczfaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcl4ciGarfPDbedibledibkaicafpxbbbbbbbbbbbbbbbbpklbxlkaicafaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaicafaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaicafaopbbbpklbaoczfhoxekaicafaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqco4arfPDbedibledibkaic8Wfpxbbbbbbbbbbbbbbbbpklbxlkaic8Wfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaoclffaqc:q:yjjbfRbbfhoxikaic8Wfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaocwffaqc:q:yjjbfRbbfhoxdkaic8Wfaopbbbpklbaoczfhoxekaic8WfaopbbdaoRbbgicitc:q1jjbfpbibaic:q:yjjbfRbbgipsaoRbegqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaiaocdffaqc:q:yjjbfRbbfhokalc;abfhialcjefaX0meaihlamao9Rc;Fb0mbkkdnaiaX9pmbaici4hlinamao9RcK6mwa5aifhqdndndndndndnaOaico4fRbbalcoG4ciGarfPDbedibledibkaqpxbbbbbbbbbbbbbbbbpkbbxlkaqaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spkbbaaaoclffahc:q:yjjbfRbbfhoxikaqaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spkbbaaaocwffahc:q:yjjbfRbbfhoxdkaqaopbbbpkbbaoczfhoxekaqaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpkbbaaaocdffahc:q:yjjbfRbbfhokalcdfhlaiczfgiaX6mbkkaohOaoTmoka5aXfh5a3cefg3cl9hmbkdndndndnawTmbasaYcd4fRbbglciGPlbedwbkaXTmdavcjdfaYfhlavaYfpbdbhgcbhoinalavcj;cbfaofpblbg8JaKaofpblbg8KpmbzeHdOiAlCvXoQrLg8LaQaofpblbg8MaLaofpblbg8NpmbzeHdOiAlCvXoQrLgypmbezHdiOAlvCXorQLg8Ecep9Ta8Epxeeeeeeeeeeeeeeeeg8Fp9op9Hp9rg8Eagp9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8LaypmwDKYqk8AExm35Ps8E8Fg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8Ja8KpmwKDYq8AkEx3m5P8Es8Fg8Ja8Ma8NpmwKDYq8AkEx3m5P8Es8Fg8KpmbezHdiOAlvCXorQLg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8Ja8KpmwDKYqk8AExm35Ps8E8Fg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Ug8Fp9Abbbaladfgla8Fa8Ea8Epmlvorlvorlvorlvorp9Ug8Fp9Abbbaladfgla8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9Ug8Fp9Abbbaladfgla8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9AbbbaladfhlaoczfgoaX6mbxikkaXTmeavcjdfaYfhlavaYfpbdbhgcbhoinalavcj;cbfaofpblbg8JaKaofpblbg8KpmbzeHdOiAlCvXoQrLg8LaQaofpblbg8MaLaofpblbg8NpmbzeHdOiAlCvXoQrLgypmbezHdiOAlvCXorQLg8Ecep:nea8Epxebebebebebebebebg8Fp9op:bep9rg8Eagp:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8LaypmwDKYqk8AExm35Ps8E8Fg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8Ja8KpmwKDYq8AkEx3m5P8Es8Fg8Ja8Ma8NpmwKDYq8AkEx3m5P8Es8Fg8KpmbezHdiOAlvCXorQLg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8Ja8KpmwDKYqk8AExm35Ps8E8Fg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeg8Fp9Abbbaladfgla8Fa8Ea8Epmlvorlvorlvorlvorp:oeg8Fp9Abbbaladfgla8Fa8Ea8EpmwDqkwDqkwDqkwDqkp:oeg8Fp9Abbbaladfgla8Fa8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9AbbbaladfhlaoczfgoaX6mbxdkkaXTmbcbhocbalcl4gl9Rc8FGhiavcjdfaYfhravaYfpbdbh8Finaravcj;cbfaofpblbggaKaofpblbg8JpmbzeHdOiAlCvXoQrLg8KaQaofpblbg8LaLaofpblbg8MpmbzeHdOiAlCvXoQrLg8NpmbezHdiOAlvCXorQLg8Eaip:Rea8Ealp:Sep9qg8Ea8Fp9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Fa8Ka8NpmwDKYqk8AExm35Ps8E8Fg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Faga8JpmwKDYq8AkEx3m5P8Es8Fgga8La8MpmwKDYq8AkEx3m5P8Es8Fg8JpmbezHdiOAlvCXorQLg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Faga8JpmwDKYqk8AExm35Ps8E8Fg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9AbbbaradfhraoczfgoaX6mbkkaYclfgYad6mbkaHavcjdfaAad2;8qbbavavcjdfaAcufad2fad;8qbbaAazfhzc9:hoaOhxaOmbxlkkaeTmbaDalfhrcbhocuhlinaralaD9RglfaD6mdaPaeao9RaoaPfae6Eaofgoae6mbkaial9Rhxkcbc99amax9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaokwbz:bjjjbk:TseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiaPfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaOfhiazaOfhxxekaxcbalRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhAascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhzaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkaOhlxekalcefhlkaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDclfaO87ebaDcdfaz87ebxekabarcdtfgDaABdbaDcwfaOBdbaDclfazBdbkavc;abfaocitfgDazBdbaDaABdlavaicdtfaABdbavc;abfaocefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfaocdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnaecvfal9nmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk:SPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;7eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiczfpxbbbbbbbbbbbbbbbbgopklbaiaopklbaiabalcitfgdaeciGglcitgv;8qbbdnalTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;7eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkadaiav;8qbbkk:oDllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiczfpxbbbbbbbbbbbbbbbbgkpklbaiakpklbaiabalcitfgoaeciGgvcitgw;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkaoaiaw;8qbbkk;uddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaic8WfpxbbbbbbbbbbbbbbbbgopklbaicafaopklbaiczfaopklbaiaopklbaiabavcdtfgdalciGgecdtgv;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkadaiav;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb",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(I){r=I.instance,r.exports.__wasm_call_ctors()});function a(I){for(var _=new Uint8Array(I.length),E=0;E96?S-97:S>64?S-39:S+4}for(var R=0,E=0;E0?b(I,_,E,u[S],d[R]):s.then(function(){var G=new Uint8Array(I*_);return c(r,r.exports[u[S]],G,I,_,E,r.exports[d[R]]),G})}}}();var Aln=y(C()),fln=function(){var e="b9H79Tebbbetm9Geueu9Geub9Gbb9Gsuuuuuuuuuuuu99uueu9Gvuuuuub9Gruuuuuuub9Gvuuuuue999Gvuuuuueu9Gquuuuuuu99uueu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9GiuuueuiOHdilvorlwiDqkbxxbelve9Weiiviebeoweuec:G:Pdkr:Tewo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95br8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bwQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7bDX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2Wbqa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9Wbkl79IV9RbxDwebcekdzsq;B:xeHdbkM9Hi8Au8A99Au8Jjjjjbc;W;qb9Rgs8Kjjjjbcbhzascxfcbc;Kbz:ojjjb8AdnabaeSmbabaeadcdtz:njjjb8AkdndnamcdGmbascxfhHcbhOxekasalcrfci4gecbyd:m:jjjbHjjjjbbgABdxasceBd2aAcbaez:ojjjbhCcbhlcbhednadTmbcbhlabheadhAinaCaeydbgXci4fgQaQRbbgQceaXcrGgXtV86bbaQcu7aX4ceGalfhlaeclfheaAcufgAmbkcualcdtalcFFFFi0EhekascCfhHasaecbyd:m:jjjbHjjjjbbgOBdzascdBd2alcd4alfhXcehAinaAgecethAaeaX6mbkcdhzcbhLascuaecdtgAaecFFFFi0Ecbyd:m:jjjbHjjjjbbgXBdCasciBd2aXcFeaAz:ojjjbhKdnadTmbaecufhYcbh8AindndnaKabaLcdtfgEydbgQc:v;t;h;Ev2aYGgXcdtfgCydbgAcuSmbceheinaOaAcdtfydbaQSmdaXaefhAaecefheaKaAaYGgXcdtfgCydbgAcu9hmbkkaOa8AcdtfaQBdbaCa8ABdba8AhAa8Acefh8AkaEaABdbaLcefgLad9hmbkkaKcbyd1:jjjbH:bjjjbbascdBd2kcbh3aHcualcefgecdtaecFFFFi0Ecbyd:m:jjjbHjjjjbbg5Bdbasa5BdlasazceVgeBd2ascxfaecdtfcuadcitadcFFFFe0Ecbyd:m:jjjbHjjjjbbg8EBdbasa8EBdwasazcdfgeBd2asclfabadalcbz:cjjjbascxfaecdtfcualcdtgealcFFFFi0Eg8Fcbyd:m:jjjbHjjjjbbgABdbasazcifgXBd2ascxfaXcdtfa8Fcbyd:m:jjjbHjjjjbbgaBdbasazclVBd2aAaaaialavaOascxfz:djjjbalcbyd:m:jjjbHjjjjbbhCascxfasyd2ghcdtfaCBdbasahcefgXBd2ascxfaXcdtfa8Fcbyd:m:jjjbHjjjjbbgXBdbasahcdfgQBd2ascxfaQcdtfa8Fcbyd:m:jjjbHjjjjbbgQBdbasahcifggBd2aXcFeaez:ojjjbh8JaQcFeaez:ojjjbh8KdnalTmba8Ecwfh8Lindna5a3gQcefg3cdtfydbgKa5aQcdtgefydbgXSmbaKaX9Rhza8EaXcitfhHa8Kaefh8Ma8JaefhEcbhYindndnaHaYcitfydbg8AaQ9hmbaEaQBdba8MaQBdbxekdna5a8Acdtg8NfgeclfydbgXaeydbgeSmba8EaecitgKfydbaQSmeaXae9Rhyaecu7aXfhLa8LaKfhXcbheinaLaeSmeaecefheaXydbhKaXcwfhXaKaQ9hmbkaeay6meka8Ka8NfgeaQa8AaeydbcuSEBdbaEa8AaQaEydbcuSEBdbkaYcefgYaz9hmbkka3al9hmbkaAhXaahQa8KhKa8JhYcbheindndnaeaXydbg8A9hmbdnaeaQydbg8A9hmbaYydbh8AdnaKydbgLcu9hmba8Acu9hmbaCaefcb86bbxikaCaefhEdnaeaLSmbaea8ASmbaEce86bbxikaEcl86bbxdkdnaeaaa8AcdtgLfydb9hmbdnaKydbgEcuSmbaeaESmbaYydbgzcuSmbaeazSmba8KaLfydbgHcuSmbaHa8ASmba8JaLfydbgLcuSmbaLa8ASmbdnaAaEcdtfydbg8AaAaLcdtfydb9hmba8AaAazcdtfydbgLSmbaLaAaHcdtfydb9hmbaCaefcd86bbxlkaCaefcl86bbxikaCaefcl86bbxdkaCaefcl86bbxekaCaefaCa8AfRbb86bbkaXclfhXaQclfhQaKclfhKaYclfhYalaecefge9hmbkdnaqTmbdndnaOTmbaOheaAhXalhQindnaqaeydbfRbbTmbaCaXydbfcl86bbkaeclfheaXclfhXaQcufgQmbxdkkaAhealhXindnaqRbbTmbaCaeydbfcl86bbkaqcefhqaeclfheaXcufgXmbkkaAhealhQaChXindnaCaeydbfRbbcl9hmbaXcl86bbkaeclfheaXcefhXaQcufgQmbkkamceGTmbaChealhXindnaeRbbce9hmbaecl86bbkaecefheaXcufgXmbkkascxfagcdtfcualcx2alc;v:Q;v:Qe0Ecbyd:m:jjjbHjjjjbbg3BdbasahclfgHBd2a3aialavaOz:ejjjbh8PdndnaDmbcbhgcbh8Lxekcbh8LawhecbhXindnaeIdbJbbbb9ETmbasc;Wbfa8LcdtfaXBdba8Lcefh8LkaeclfheaDaXcefgX9hmbkascxfaHcdtfcua8Lal2gecdtaecFFFFi0Ecbyd:m:jjjbHjjjjbbggBdbasahcvfgHBd2alTmba8LTmbarcd4hEdnaOTmba8Lcdthzcbh8AaghLinaoaOa8AcdtfydbaE2cdtfhYasc;WbfheaLhXa8LhQinaXaYaeydbcdtgKfIdbawaKfIdbNUdbaeclfheaXclfhXaQcufgQmbkaLazfhLa8Acefg8Aal9hmbxdkka8Lcdthzcbh8AaghLinaoa8AaE2cdtfhYasc;WbfheaLhXa8LhQinaXaYaeydbcdtgKfIdbawaKfIdbNUdbaeclfheaXclfhXaQcufgQmbkaLazfhLa8Acefg8Aal9hmbkkascxfaHcdtfcualc8S2gealc;D;O;f8U0EgQcbyd:m:jjjbHjjjjbbgXBdbasaHcefgKBd2aXcbaez:ojjjbhqdndndna8LTmbascxfaKcdtfaQcbyd:m:jjjbHjjjjbbgvBdbasaHcdfgXBd2avcbaez:ojjjb8AascxfaXcdtfcua8Lal2gecltgXaecFFFFb0Ecbyd:m:jjjbHjjjjbbgiBdbasaHcifBd2aicbaXz:ojjjb8AadmexdkcbhvcbhiadTmekcbhYabhXindna3aXclfydbg8Acx2fgeIdba3aXydbgLcx2fgQIdbgI:tg8Ra3aXcwfydbgEcx2fgKIdlaQIdlg8S:tgRNaKIdbaI:tg8UaeIdla8S:tg8VN:tg8Wa8WNa8VaKIdwaQIdwg8X:tg8YNaRaeIdwa8X:tg8VN:tgRaRNa8Va8UNa8Ya8RN:tg8Ra8RNMM:rg8UJbbbb9ETmba8Wa8U:vh8Wa8Ra8U:vh8RaRa8U:vhRkaqaAaLcdtfydbc8S2fgeaRa8U:rg8UaRNNg8VaeIdbMUdbaea8Ra8Ua8RNg8ZNg8YaeIdlMUdlaea8Wa8Ua8WNg80Ng81aeIdwMUdwaea8ZaRNg8ZaeIdxMUdxaea80aRNgBaeIdzMUdzaea80a8RNg80aeIdCMUdCaeaRa8Ua8Wa8XNaRaINa8Sa8RNMM:mg8SNgINgRaeIdKMUdKaea8RaINg8RaeId3MUd3aea8WaINg8WaeIdaMUdaaeaIa8SNgIaeId8KMUd8Kaea8UaeIdyMUdyaqaAa8Acdtfydbc8S2fgea8VaeIdbMUdbaea8YaeIdlMUdlaea81aeIdwMUdwaea8ZaeIdxMUdxaeaBaeIdzMUdzaea80aeIdCMUdCaeaRaeIdKMUdKaea8RaeId3MUd3aea8WaeIdaMUdaaeaIaeId8KMUd8Kaea8UaeIdyMUdyaqaAaEcdtfydbc8S2fgea8VaeIdbMUdbaea8YaeIdlMUdlaea81aeIdwMUdwaea8ZaeIdxMUdxaeaBaeIdzMUdzaea80aeIdCMUdCaeaRaeIdKMUdKaea8RaeId3MUd3aea8WaeIdaMUdaaeaIaeId8KMUd8Kaea8UaeIdyMUdyaXcxfhXaYcifgYad6mbkcbhzabhLinabazcdtfh8AcbhXinaCa8AaXc;a1jjbfydbcdtfydbgQfRbbhedndnaCaLaXfydbgKfRbbgYc99fcFeGcpe0mbaec99fcFeGc;:e6mekdnaYcufcFeGce0mba8JaKcdtfydbaQ9hmekdnaecufcFeGce0mba8KaQcdtfydbaK9hmekdnaYcv2aefc:G1jjbfRbbTmbaAaQcdtfydbaAaKcdtfydb0mekJbbacJbbacJbbjZaecFeGceSEaYceSEh80dna3a8AaXc;e1jjbfydbcdtfydbcx2fgeIdwa3aKcx2fgYIdwg8S:tg8Wa3aQcx2fgEIdwa8S:tgRaRNaEIdbaYIdbg8X:tg8Ra8RNaEIdlaYIdlg8V:tg8Ua8UNMMgINa8WaRNaeIdba8X:tg81a8RNa8UaeIdla8V:tg8ZNMMg8YaRN:tg8Wa8WNa81aINa8Ya8RN:tgRaRNa8ZaINa8Ya8UN:tg8Ra8RNMM:rg8UJbbbb9ETmba8Wa8U:vh8Wa8Ra8U:vh8RaRa8U:vhRkaqaAaKcdtfydbc8S2fgeaRa80aI:rNg8UaRNNg8YaeIdbMUdbaea8Ra8Ua8RNg80Ng81aeIdlMUdlaea8Wa8Ua8WNgINg8ZaeIdwMUdwaea80aRNg80aeIdxMUdxaeaIaRNgBaeIdzMUdzaeaIa8RNg83aeIdCMUdCaeaRa8Ua8Wa8SNaRa8XNa8Va8RNMM:mg8SNgINgRaeIdKMUdKaea8RaINg8RaeId3MUd3aea8WaINg8WaeIdaMUdaaeaIa8SNgIaeId8KMUd8Kaea8UaeIdyMUdyaqaAaQcdtfydbc8S2fgea8YaeIdbMUdbaea81aeIdlMUdlaea8ZaeIdwMUdwaea80aeIdxMUdxaeaBaeIdzMUdzaea83aeIdCMUdCaeaRaeIdKMUdKaea8RaeId3MUd3aea8WaeIdaMUdaaeaIaeId8KMUd8Kaea8UaeIdyMUdykaXclfgXcx9hmbkaLcxfhLazcifgzad6mbka8LTmbcbhLinJbbbbh8Xa3abaLcdtfgeclfydbgEcx2fgXIdwa3aeydbgzcx2fgQIdwg8Z:tg8Ra8RNaXIdbaQIdbgB:tg8Wa8WNaXIdlaQIdlg83:tg8Ua8UNMMg80a3aecwfydbgHcx2fgeIdwa8Z:tgINa8Ra8RaINa8WaeIdbaB:tg8SNa8UaeIdla83:tg8VNMMgRN:tJbbbbJbbjZa80aIaINa8Sa8SNa8Va8VNMMg81NaRaRN:tg8Y:va8YJbbbb9BEg8YNhUa81a8RNaIaRN:ta8YNh85a80a8VNa8UaRN:ta8YNh86a81a8UNa8VaRN:ta8YNh87a80a8SNa8WaRN:ta8YNh88a81a8WNa8SaRN:ta8YNh89a8Wa8VNa8Sa8UN:tgRaRNa8UaINa8Va8RN:tgRaRNa8Ra8SNaIa8WN:tgRaRNMM:rJbbbZNhRagaza8L2gwcdtfhXagaHa8L2g8NcdtfhQagaEa8L2g5cdtfhKa8Z:mh8:a83:mhZaB:mhncbhYa8Lh8AJbbbbh8VJbbbbh8YJbbbbh80Jbbbbh81Jbbbbh8ZJbbbbhBJbbbbh83JbbbbhcJbbbbh9cinasc;WbfaYfgecwfaRa85aKIdbaXIdbgI:tg8UNaUaQIdbaI:tg8SNMg8RNUdbaeclfaRa87a8UNa86a8SNMg8WNUdbaeaRa89a8UNa88a8SNMg8UNUdbaecxfaRa8:a8RNaZa8WNaIana8UNMMMgINUdbaRa8Ra8WNNa81Mh81aRa8Ra8UNNa8ZMh8ZaRa8Wa8UNNaBMhBaRaIaINNa8XMh8XaRa8RaINNa8VMh8VaRa8WaINNa8YMh8YaRa8UaINNa80Mh80aRa8Ra8RNNa83Mh83aRa8Wa8WNNacMhcaRa8Ua8UNNa9cMh9caXclfhXaKclfhKaQclfhQaYczfhYa8Acufg8Ambkavazc8S2fgea9caeIdbMUdbaeacaeIdlMUdlaea83aeIdwMUdwaeaBaeIdxMUdxaea8ZaeIdzMUdzaea81aeIdCMUdCaea80aeIdKMUdKaea8YaeId3MUd3aea8VaeIdaMUdaaea8XaeId8KMUd8KaeaRaeIdyMUdyavaEc8S2fgea9caeIdbMUdbaeacaeIdlMUdlaea83aeIdwMUdwaeaBaeIdxMUdxaea8ZaeIdzMUdzaea81aeIdCMUdCaea80aeIdKMUdKaea8YaeId3MUd3aea8VaeIdaMUdaaea8XaeId8KMUd8KaeaRaeIdyMUdyavaHc8S2fgea9caeIdbMUdbaeacaeIdlMUdlaea83aeIdwMUdwaeaBaeIdxMUdxaea8ZaeIdzMUdzaea81aeIdCMUdCaea80aeIdKMUdKaea8YaeId3MUd3aea8VaeIdaMUdaaea8XaeId8KMUd8KaeaRaeIdyMUdyaiawcltfh8AcbhXa8LhKina8AaXfgeasc;WbfaXfgQIdbaeIdbMUdbaeclfgYaQclfIdbaYIdbMUdbaecwfgYaQcwfIdbaYIdbMUdbaecxfgeaQcxfIdbaeIdbMUdbaXczfhXaKcufgKmbkaia5cltfh8AcbhXa8LhKina8AaXfgeasc;WbfaXfgQIdbaeIdbMUdbaeclfgYaQclfIdbaYIdbMUdbaecwfgYaQcwfIdbaYIdbMUdbaecxfgeaQcxfIdbaeIdbMUdbaXczfhXaKcufgKmbkaia8Ncltfh8AcbhXa8LhKina8AaXfgeasc;WbfaXfgQIdbaeIdbMUdbaeclfgYaQclfIdbaYIdbMUdbaecwfgYaQcwfIdbaYIdbMUdbaecxfgeaQcxfIdbaeIdbMUdbaXczfhXaKcufgKmbkaLcifgLad6mbkkcbhQdndnamcwGgJmbJbbbbh8Vcbh9ecbhocbhhxekcbh9ea8Fcbyd:m:jjjbHjjjjbbhhascxfasyd2gecdtfahBdbasaecefgXBd2ascxfaXcdtfcuahalabadaAz:fjjjbgKcltaKcjjjjiGEcbyd:m:jjjbHjjjjbbgoBdbasaecdfBd2aoaKaha3alz:gjjjbJFFuuh8VaKTmbaoheaKhXinaeIdbgRa8Va8VaR9EEh8VaeclfheaXcufgXmbkaKh9ekasydlhTdnalTmbaTclfheaTydbhKaChXalhYcbhQincbaeydbg8AaK9RaXRbbcpeGEaQfhQaXcefhXaeclfhea8AhKaYcufgYmbkaQce4hQkcuadaQ9RcifgScx2aSc;v:Q;v:Qe0Ecbyd:m:jjjbHjjjjbbhDascxfasyd2g9hcdtfaDBdbasa9hcefgeBd2ascxfaecdtfcuaScdtaScFFFFi0Ecbyd:m:jjjbHjjjjbbgrBdbasa9hcdfgeBd2ascxfaecdtfa8Fcbyd:m:jjjbHjjjjbbgyBdbasa9hcifgeBd2ascxfaecdtfalcbyd:m:jjjbHjjjjbbg9iBdbasa9hclfg6Bd2axaxNa8PJbbjZamclGEgUaUN:vh9cJbbbbhcdnadak9nmbdnaSci6mba8Lclth9kaDcwfh0Jbbbbh83JbbbbhcinasclfabadalaAz:cjjjbabhzcbh8Ecbh8Finaba8FcdtfhHcbheindnaAazaefydbgQcdtgEfydbgYaAaHaec;q1jjbfydbcdtfydbgXcdtgwfydbg8ASmbaCaXfRbbgLcv2aCaQfRbbgKfc;G1jjbfRbbg5aKcv2aLfg8Nc;G1jjbfRbbg8MVcFeGTmbdna8AaY9nmba8Nc:G1jjbfRbbcFeGmekaKcufhYdnaKaL9hmbaYcFeGce0mba8JaEfydbaX9hmekdndnaKclSmbaLcl9hmekdnaYcFeGce0mba8JaEfydbaX9hmdkaLcufcFeGce0mba8KawfydbaQ9hmekaDa8Ecx2fgKaXaQa8McFeGgYEBdlaKaQaXaYEBdbaKaYa5Gcb9hBdwa8Ecefh8Ekaeclfgecx9hmbkdna8Fcifg8Fad9pmbazcxfhza8EcifaS9nmekka8ETmdcbhLinaqaAaDaLcx2fgKydbgYcdtgzfydbc8S2fgeIdwa3aKydlg8Acx2fgXIdwg8WNaeIdzaXIdbg8UNaeIdaMgRaRMMa8WNaeIdlaXIdlgINaeIdCa8WNaeId3MgRaRMMaINaeIdba8UNaeIdxaINaeIdKMgRaRMMa8UNaeId8KMMM:lhRJbbbbJbbjZaeIdyg8R:va8RJbbbb9BEh8RdndnaKydwgEmbJFFuuh8YxekJbbbbJbbjZaqaAa8Acdtfydbc8S2fgeIdyg8S:va8SJbbbb9BEaeIdwa3aYcx2fgXIdwg8SNaeIdzaXIdbg8XNaeIdaMg8Ya8YMMa8SNaeIdlaXIdlg8YNaeIdCa8SNaeId3Mg8Sa8SMMa8YNaeIdba8XNaeIdxa8YNaeIdKMg8Sa8SMMa8XNaeId8KMMM:lNh8Yka8RaRNh80dna8LTmbavaYc8S2fgQIdwa8WNaQIdza8UNaQIdaMgRaRMMa8WNaQIdlaINaQIdCa8WNaQId3MgRaRMMaINaQIdba8UNaQIdxaINaQIdKMgRaRMMa8UNaQId8KMMMhRaga8Aa8L2gHcdtfhXaiaYa8L2gwcltfheaQIdyh8Sa8LhQinaXIdbg8Ra8Ra8SNaecxfIdba8WaecwfIdbNa8UaeIdbNaIaeclfIdbNMMMg8Ra8RM:tNaRMhRaXclfhXaeczfheaQcufgQmbkdndnaEmbJbbbbh8Rxekava8Ac8S2fgQIdwa3aYcx2fgeIdwg8UNaQIdzaeIdbgINaQIdaMg8Ra8RMMa8UNaQIdlaeIdlg8SNaQIdCa8UNaQId3Mg8Ra8RMMa8SNaQIdbaINaQIdxa8SNaQIdKMg8Ra8RMMaINaQId8KMMMh8RagawcdtfhXaiaHcltfheaQIdyh8Xa8LhQinaXIdbg8Wa8Wa8XNaecxfIdba8UaecwfIdbNaIaeIdbNa8SaeclfIdbNMMMg8Wa8WM:tNa8RMh8RaXclfhXaeczfheaQcufgQmbka8R:lh8Rka80aR:lMh80a8Ya8RMh8YaCaYfRbbcd9hmbdna8Ka8Ja8Jazfydba8ASEaaazfydbgHcdtfydbgzcu9hmbaaa8AcdtfydbhzkavaHc8S2fgQIdwa3azcx2fgeIdwg8WNaQIdzaeIdbg8UNaQIdaMgRaRMMa8WNaQIdlaeIdlgINaQIdCa8WNaQId3MgRaRMMaINaQIdba8UNaQIdxaINaQIdKMgRaRMMa8UNaQId8KMMMhRagaza8L2gwcdtfhXaiaHa8L2g8NcltfheaQIdyh8Sa8LhQinaXIdbg8Ra8Ra8SNaecxfIdba8WaecwfIdbNa8UaeIdbNaIaeclfIdbNMMMg8Ra8RM:tNaRMhRaXclfhXaeczfheaQcufgQmbkdndnaEmbJbbbbh8Rxekavazc8S2fgQIdwa3aHcx2fgeIdwg8UNaQIdzaeIdbgINaQIdaMg8Ra8RMMa8UNaQIdlaeIdlg8SNaQIdCa8UNaQId3Mg8Ra8RMMa8SNaQIdbaINaQIdxa8SNaQIdKMg8Ra8RMMaINaQId8KMMMh8Raga8NcdtfhXaiawcltfheaQIdyh8Xa8LhQinaXIdbg8Wa8Wa8XNaecxfIdba8UaecwfIdbNaIaeIdbNa8SaeclfIdbNMMMg8Wa8WM:tNa8RMh8RaXclfhXaeczfheaQcufgQmbka8R:lh8Rka80aR:lMh80a8Ya8RMh8YkaKa80a8Ya80a8Y9FgeEUdwaKa8AaYaeaETVgeEBdlaKaYa8AaeEBdbaLcefgLa8E9hmbkasc;Wbfcbcj;qbz:ojjjb8Aa0hea8EhXinasc;WbfaeydbcA4cF8FGgQcFAaQcFA6EcdtfgQaQydbcefBdbaecxfheaXcufgXmbkcbhecbhXinasc;WbfaefgQydbhKaQaXBdbaKaXfhXaeclfgecj;qb9hmbkcbhea0hXinasc;WbfaXydbcA4cF8FGgQcFAaQcFA6EcdtfgQaQydbgQcefBdbaraQcdtfaeBdbaXcxfhXa8Eaecefge9hmbkadak9RgQci9Uh9mdnalTmbcbheayhXinaXaeBdbaXclfhXalaecefge9hmbkkcbh9na9icbalz:ojjjbh8FaQcO9Uh9oa9mce4h9pasydwh9qcbh8Mcbh5dninaDara5cdtfydbcx2fg8NIdwgRa9c9Emea8Ma9m9pmeJFFuuh8Rdna9pa8E9pmbaDara9pcdtfydbcx2fIdwJbb;aZNh8RkdnaRa8R9ETmbaRac9ETmba8Ma9o0mdkdna8FaAa8NydlgHcdtg9rfydbgKfg9sRbba8FaAa8Nydbgzcdtg9tfydbgefg9uRbbVmbaCazfRbbh9vdnaTaecdtfgXclfydbgQaXydbgXSmbaQaX9RhYa3aKcx2fhLa3aecx2fhEa9qaXcitfhecbhXcehwdnindnayaeydbcdtfydbgQaKSmbayaeclfydbcdtfydbg8AaKSmbaQa8ASmba3a8Acx2fg8AIdba3aQcx2fgQIdbg8W:tgRaEIdlaQIdlg8U:tg8XNaEIdba8W:tg8Ya8AIdla8U:tg8RN:tgIaRaLIdla8U:tg80NaLIdba8W:tg81a8RN:tg8UNa8RaEIdwaQIdwg8S:tg8ZNa8Xa8AIdwa8S:tg8WN:tg8Xa8RaLIdwa8S:tgBNa80a8WN:tg8RNa8Wa8YNa8ZaRN:tg8Sa8Wa81NaBaRN:tgRNMMaIaINa8Xa8XNa8Sa8SNMMa8Ua8UNa8Ra8RNaRaRNMMN:rJbbj8:N9FmdkaecwfheaXcefgXaY6hwaYaX9hmbkkawceGTmba9pcefh9pxekdndndndna9vc9:fPdebdkazheinayaecdtgefaHBdbaaaefydbgeaz9hmbxikkdna8Ka8Ja8Ja9tfydbaHSEaaa9tfydbgzcdtfydbgecu9hmbaaa9rfydbhekaya9tfaHBdbaehHkayazcdtfaHBdbka9uce86bba9sce86bba8NIdwgRacacaR9DEhca9ncefh9ncecda9vceSEa8Mfh8Mka5cefg5a8E9hmbkka9nTmddnalTmbcbh8AcbhEindnayaEcdtgefydbgQaESmbaAaQcdtfydbhzdnaEaAaefydb9hgHmbaqazc8S2fgeaqaEc8S2fgXIdbaeIdbMUdbaeaXIdlaeIdlMUdlaeaXIdwaeIdwMUdwaeaXIdxaeIdxMUdxaeaXIdzaeIdzMUdzaeaXIdCaeIdCMUdCaeaXIdKaeIdKMUdKaeaXId3aeId3MUd3aeaXIdaaeIdaMUdaaeaXId8KaeId8KMUd8KaeaXIdyaeIdyMUdyka8LTmbavaQc8S2fgeavaEc8S2gwfgXIdbaeIdbMUdbaeaXIdlaeIdlMUdlaeaXIdwaeIdwMUdwaeaXIdxaeIdxMUdxaeaXIdzaeIdzMUdzaeaXIdCaeIdCMUdCaeaXIdKaeIdKMUdKaeaXId3aeId3MUd3aeaXIdaaeIdaMUdaaeaXId8KaeId8KMUd8KaeaXIdyaeIdyMUdya9kaQ2hLaihXa8LhKinaXaLfgeaXa8AfgQIdbaeIdbMUdbaeclfgYaQclfIdbaYIdbMUdbaecwfgYaQcwfIdbaYIdbMUdbaecxfgeaQcxfIdbaeIdbMUdbaXczfhXaKcufgKmbkaHmbJbbbbJbbjZaqawfgeIdygR:vaRJbbbb9BEaeIdwa3azcx2fgXIdwgRNaeIdzaXIdbg8RNaeIdaMg8Wa8WMMaRNaeIdlaXIdlg8WNaeIdCaRNaeId3MgRaRMMa8WNaeIdba8RNaeIdxa8WNaeIdKMgRaRMMa8RNaeId8KMMM:lNgRa83a83aR9DEh83ka8Aa9kfh8AaEcefgEal9hmbkcbhXa8JheindnaeydbgQcuSmbdnaXayaQcdtgKfydbgQ9hmbcuhQa8JaKfydbgKcuSmbayaKcdtfydbhQkaeaQBdbkaeclfhealaXcefgX9hmbkcbhXa8KheindnaeydbgQcuSmbdnaXayaQcdtgKfydbgQ9hmbcuhQa8KaKfydbgKcuSmbayaKcdtfydbhQkaeaQBdbkaeclfhealaXcefgX9hmbkka83aca8LEh83cbhKabhecbhYindnayaeydbcdtfydbgXayaeclfydbcdtfydbgQSmbaXayaecwfydbcdtfydbg8ASmbaQa8ASmbabaKcdtfgLaXBdbaLcwfa8ABdbaLclfaQBdbaKcifhKkaecxfheaYcifgYad6mbkdndnaJTmbaKak9nmba8Va839FTmbcbhdabhecbhXindnaoahaeydbgQcdtfydbcdtfIdba839ETmbabadcdtfgYaQBdbaYclfaeclfydbBdbaYcwfaecwfydbBdbadcifhdkaecxfheaXcifgXaK6mbkJFFuuh8Va9eTmeaohea9ehXJFFuuhRinaeIdbg8RaRaRa8R9EEg8WaRa8Ra839EgQEhRa8Wa8VaQEh8VaeclfheaXcufgXmbxdkkaKhdkadak0mbxdkkasclfabadalaAz:cjjjbkdndnadak0mbadhXxekdnaJmbadhXxekdna8Va9c9FmbadhXxekina8VJbb;aZNgRa9caRa9c9DEh8WJbbbbhRdna9eTmbaohea9ehAinaeIdbg8RaRa8Ra8W9FEaRa8RaR9EEhRaeclfheaAcufgAmbkkcbhXabhecbhAindnaoahaeydbgQcdtfydbcdtfIdba8W9ETmbabaXcdtfgKaQBdbaKclfaeclfydbBdbaKcwfaecwfydbBdbaXcifhXkaecxfheaAcifgAad6mbkJFFuuh8Vdna9eTmbaohea9ehAJFFuuh8RinaeIdbg8Ua8Ra8Ra8U9EEgIa8Ra8Ua8W9EgQEh8RaIa8VaQEh8VaeclfheaAcufgAmbkkdnaXad9hmbadhXxdkaRacacaR9DEhcaXak9nmeaXhda8Va9c9FmbkkdnamcjjjjlGTmbaOmbaXTmbcbh8AabheinaCaeydbgKfRbbc3thLaecwfgEydbhAdndna8JaKcdtgHfydbaeclfgzydbgQSmbcbhYa8KaQcdtfydbaK9hmekcjjjj94hYkaeaLaYVaKVBdbaCaQfRbbc3thLdndna8JaQcdtfydbaASmbcbhYa8KaAcdtfydbaQ9hmekcjjjj94hYkazaLaYVaQVBdbaCaAfRbbc3thYdndna8JaAcdtfydbaKSmbcbhQa8KaHfydbaA9hmekcjjjj94hQkaEaYaQVaAVBdbaecxfhea8Acifg8AaX6mbkkdnaOTmbaXTmbaXheinabaOabydbcdtfydbBdbabclfhbaecufgembkkdnaPTmbaPaUac:rNUdbka9hcdtascxffcxfhednina6Tmeaeydbcbyd1:jjjbH:bjjjbbaec98fhea6cufh6xbkkasc;W;qbf8KjjjjbaXk;Yieouabydlhvabydbclfcbaicdtz:ojjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfhearcufgrmbkkabydbcbBdbk:todDue99aicd4aifhrcehwinawgDcethwaDar6mbkcuaDcdtgraDcFFFFi0Ecbyd:m:jjjbHjjjjbbhwaoaoyd9GgqcefBd9GaoaqcdtfawBdbawcFearz:ojjjbhkdnaiTmbalcd4hlaDcufhxcbhminamhDdnavTmbavamcdtfydbhDkcbadaDal2cdtfgDydlgwawcjjjj94SEgwcH4aw7c:F:b:DD2cbaDydbgwawcjjjj94SEgwcH4aw7c;D;O:B8J27cbaDydwgDaDcjjjj94SEgDcH4aD7c:3F;N8N27axGhwamcdthPdndndnavTmbakawcdtfgrydbgDcuSmeadavaPfydbal2cdtfgsIdbhzcehqinaqhrdnadavaDcdtfydbal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmlkarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbxdkkakawcdtfgrydbgDcuSmbadamal2cdtfgsIdbhzcehqinaqhrdnadaDal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmikarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbkkaramBdbamhDkabaPfaDBdbamcefgmai9hmbkkakcbyd1:jjjbH:bjjjbbaoaoyd9GcufBd9GdnaeTmbaiTmbcbhDaehwinawaDBdbawclfhwaiaDcefgD9hmbkcbhDaehwindnaDabydbgrSmbawaearcdtfgrydbBdbaraDBdbkawclfhwabclfhbaiaDcefgD9hmbkkk;Qodvuv998Jjjjjbca9Rgvczfcwfcbyd11jjbBdbavcb8Pdj1jjb83izavcwfcbydN1jjbBdbavcb8Pd:m1jjb83ibdnadTmbaicd4hodnabmbdnalTmbcbhrinaealarcdtfydbao2cdtfhwcbhiinavczfaifgDawaifIdbgqaDIdbgkakaq9EEUdbavaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkarcefgrad9hmbxikkaocdthrcbhwincbhiinavczfaifgDaeaifIdbgqaDIdbgkakaq9EEUdbavaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkaearfheawcefgwad9hmbxdkkdnalTmbcbhrinabarcx2fgiaealarcdtfydbao2cdtfgwIdbUdbaiawIdlUdlaiawIdwUdwcbhiinavczfaifgDawaifIdbgqaDIdbgkakaq9EEUdbavaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkarcefgrad9hmbxdkkaocdthlcbhraehwinabarcx2fgiaearao2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinavczfaifgDawaifIdbgqaDIdbgkakaq9EEUdbavaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkawalfhwarcefgrad9hmbkkJbbbbavIdbavIdzgk:tgqaqJbbbb9DEgqavIdlavIdCgx:tgmamaq9DEgqavIdwavIdKgm:tgPaPaq9DEhPdnabTmbadTmbJbbbbJbbjZaP:vaPJbbbb9BEhqinabaqabIdbak:tNUdbabclfgvaqavIdbax:tNUdbabcwfgvaqavIdbam:tNUdbabcxfhbadcufgdmbkkaPk:ZlewudnaeTmbcbhvabhoinaoavBdbaoclfhoaeavcefgv9hmbkkdnaiTmbcbhrinadarcdtfhwcbhDinalawaDcdtgvc;a1jjbfydbcdtfydbcdtfydbhodnabalawavfydbcdtfydbgqcdtfgkydbgvaqSmbinakabavgqcdtfgxydbgvBdbaxhkaqav9hmbkkdnabaocdtfgkydbgvaoSmbinakabavgocdtfgxydbgvBdbaxhkaoav9hmbkkdnaqaoSmbabaqaoaqao0Ecdtfaqaoaqao6EBdbkaDcefgDci9hmbkarcifgrai6mbkkdnaembcbskcbhxindnalaxcdtgvfydbax9hmbaxhodnabavfgDydbgvaxSmbaDhqinaqabavgocdtfgkydbgvBdbakhqaoav9hmbkkaDaoBdbkaxcefgxae9hmbkcbhvabhocbhkindndnavalydbgq9hmbdnavaoydbgq9hmbaoakBdbakcefhkxdkaoabaqcdtfydbBdbxekaoabaqcdtfydbBdbkaoclfhoalclfhlaeavcefgv9hmbkakk;Jiilud99duabcbaecltz:ojjjbhvdnalTmbadhoaihralhwinarcwfIdbhDarclfIdbhqavaoydbcltfgkarIdbakIdbMUdbakclfgxaqaxIdbMUdbakcwfgxaDaxIdbMUdbakcxfgkakIdbJbbjZMUdbaoclfhoarcxfhrawcufgwmbkkdnaeTmbavhraehkinarcxfgoIdbhDaocbBdbararIdbJbbbbJbbjZaD:vaDJbbbb9BEgDNUdbarclfgoaDaoIdbNUdbarcwfgoaDaoIdbNUdbarczfhrakcufgkmbkkdnalTmbinavadydbcltfgrcxfgkaicwfIdbarcwfIdb:tgDaDNaiIdbarIdb:tgDaDNaiclfIdbarclfIdb:tgDaDNMMgDakIdbgqaqaD9DEUdbadclfhdaicxfhialcufglmbkkdnaeTmbavcxfhrinabarIdbUdbarczfhrabclfhbaecufgembkkk8MbabaeadaialavcbcbcbcbcbaoarawaDz:bjjjbk8MbabaeadaialavaoarawaDaqakaxamaPz:bjjjbk:DCoDud99rue99iul998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcxfcbc;Kbz:ojjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd:m:jjjbHjjjjbbgqBdxawceBd2aqaeadaicbz:ejjjb8AawcuadcdtadcFFFFi0Egkcbyd:m:jjjbHjjjjbbgxBdzawcdBd2adcd4adfhmceheinaegicetheaiam6mbkcbhPawcuaicdtgsaicFFFFi0Ecbyd:m:jjjbHjjjjbbgzBdCawciBd2dndnar:ZgH:rJbbbZMgO:lJbbb9p9DTmbaO:Ohexekcjjjj94hekaicufhAc:bwhmcbhCadhXcbhQinaChLaeamgKcufaeaK9iEaPgDcefaeaD9kEhYdndnadTmbaYcuf:YhOaqhiaxheadhmindndnaiIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcCthCdndnaiclfIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhExekcjjjj94hEkaEcqtaCVhCdndnaicwfIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhExekcjjjj94hEkaeaCaEVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:ojjjbh3cbh5cbhPindna3axaPcdtfydbgCcm4aC7c:v;t;h;Ev2gics4ai7aAGgmcdtfgEydbgecuSmbaeaCSmbcehiina3amaifaAGgmcdtfgEydbgecuSmeaicefhiaeaC9hmbkkaEaCBdba5aecuSfh5aPcefgPad9hmbxdkkazcFeasz:ojjjb8Acbh5kaDaYa5ar0giEhPaLa5aiEhCdna5arSmbaYaKaiEgmaP9Rcd9imbdndnaQcl0mbdnaX:ZgOaL:Zg8A:taY:Yg8EaD:Y:tg8Fa8EaK:Y:tgaa5:ZghaH:tNNNaOaH:taaNa8Aah:tNa8AaH:ta8FNahaO:tNM:va8EMJbbbZMgO:lJbbb9p9DTmbaO:Ohexdkcjjjj94hexekaPamfcd9Theka5aXaiEhXaQcefgQcs9hmekkdndnaCmbcihicbhDxekcbhiawakcbyd:m:jjjbHjjjjbbg5BdKawclBd2aPcuf:Yh8AdndnadTmbaqhiaxheadhmindndnaiIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhCxekcjjjj94hCkaCcCthCdndnaiclfIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhExekcjjjj94hEkaEcqtaCVhCdndnaicwfIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhExekcjjjj94hEkaeaCaEVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:ojjjbh3cbhDcbhYindndndna3axaYcdtgKfydbgCcm4aC7c:v;t;h;Ev2gics4ai7aAGgmcdtfgEydbgecuSmbcehiinaxaecdtgefydbaCSmdamaifheaicefhia3aeaAGgmcdtfgEydbgecu9hmbkkaEaYBdbaDhiaDcefhDxeka5aefydbhika5aKfaiBdbaYcefgYad9hmbkcuaDc32giaDc;j:KM;jb0EhexekazcFeasz:ojjjb8AcbhDcbhekawaecbyd:m:jjjbHjjjjbbgeBd3awcvBd2aecbaiz:ojjjbhEavcd4hKdnadTmbdnalTmbaKcdth3a5hCaqhealhmadhAinaEaCydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiamIdbaiIdxMUdxaiamclfIdbaiIdzMUdzaiamcwfIdbaiIdCMUdCaiaiIdKJbbjZMUdKaCclfhCaecxfheama3fhmaAcufgAmbxdkka5hmaqheadhCinaEamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaiIdxJbbbbMUdxaiaiIdzJbbbbMUdzaiaiIdCJbbbbMUdCaiaiIdKJbbjZMUdKamclfhmaecxfheaCcufgCmbkkdnaDTmbaEhiaDheinaiaiIdbJbbbbJbbjZaicKfIdbgO:vaOJbbbb9BEgONUdbaiclfgmaOamIdbNUdbaicwfgmaOamIdbNUdbaicxfgmaOamIdbNUdbaiczfgmaOamIdbNUdbaicCfgmaOamIdbNUdbaic3fhiaecufgembkkcbhCawcuaDcdtgYaDcFFFFi0Egicbyd:m:jjjbHjjjjbbgeBdaawcoBd2awaicbyd:m:jjjbHjjjjbbg3Bd8KaecFeaYz:ojjjbhxdnadTmbJbbjZJbbjZa8A:vaPceSEaoNgOaONh8AaKcdthPalheina8Aaec;81jjbalEgmIdwaEa5ydbgAc32fgiIdC:tgOaONamIdbaiIdx:tgOaONamIdlaiIdz:tgOaONMMNaqcwfIdbaiIdw:tgOaONaqIdbaiIdb:tgOaONaqclfIdbaiIdl:tgOaONMMMhOdndnaxaAcdtgifgmydbcuSmba3aifIdbaO9ETmekamaCBdba3aifaOUdbka5clfh5aqcxfhqaeaPfheadaCcefgC9hmbkkabaxaYz:njjjb8AcrhikaicdthiinaiTmeaic98fgiawcxffydbcbyd1:jjjbH:bjjjbbxbkkawc;Wbf8KjjjjbaDk:Ydidui99ducbhi8Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdndnaembJbbjFhvJbbjFhoJbbjFhrxekadcd4cdthwincbhdinalczfadfgDabadfIdbgvaDIdbgoaoav9EEUdbaladfgDavaDIdbgoaoav9DEUdbadclfgdcx9hmbkabawfhbaicefgiae9hmbkalIdwalIdK:thralIdlalIdC:thoalIdbalIdz:thvkJbbbbavavJbbbb9DEgvaoaoav9DEgvararav9DEk9DeeuabcFeaicdtz:ojjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcifc98GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcrfc94GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd:q:jjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd:q:jjjbfgdBd:q:jjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akkk:Iedbcjwk1eFFuuFFuuFFuuFFuFFFuFFFuFbbbbbbbbeeebeebebbeeebebbbbbebebbbbbbbbbebbbdbbbbbbbebbbebbbdbbbbbbbbbbbeeeeebebbebbebebbbeebbbbbbbbbbbbbbbbbbbbbc1Dkxebbbdbbb:GNbb",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(f){n=f.instance,n.exports.__wasm_call_ctors()});function o(f){for(var b=new Uint8Array(f.length),x=0;x96?I-97:I>64?I-39:I+4}for(var _=0,x=0;x=3),r(I>=0&&I<=f.length),r(I%3==0),r(_>=0);for(var S=0,R=0;R<(E?E.length:0);++R)r(E[R]in g),S|=g[E[R]];var G=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f),B=d(n.exports.meshopt_simplify,G,f.length,b,b.length/x,x*4,I,_,S);return B[0]=f instanceof Uint32Array?B[0]:new f.constructor(B[0]),B},simplifyWithAttributes:function(f,b,x,I,_,E,S,R,G,B){r(f instanceof Uint32Array||f instanceof Int32Array||f instanceof Uint16Array||f instanceof Int16Array),r(f.length%3==0),r(b instanceof Float32Array),r(b.length%x==0),r(x>=3),r(I instanceof Float32Array),r(I.length%_==0),r(_>=0),r(S==null||S instanceof Uint8Array),r(S==null||S.length==b.length/x),r(R>=0&&R<=f.length),r(R%3==0),r(G>=0),r(Array.isArray(E)),r(_>=E.length),r(E.length<=32);for(var w=0;w=0);for(var F=0,w=0;w<(B?B.length:0);++w)r(B[w]in g),F|=g[B[w]];var P=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f),A=u(n.exports.meshopt_simplifyWithAttributes,P,f.length,b,b.length/x,x*4,I,_*4,new Float32Array(E),S?new Uint8Array(S):null,R,G,F);return A[0]=f instanceof Uint32Array?A[0]:new f.constructor(A[0]),A},getScale:function(f,b){return r(f instanceof Float32Array),r(f.length%b==0),r(b>=3),h(n.exports.meshopt_simplifyScale,f,f.length/b,b*4)},simplifyPoints:function(f,b,x,I,_,E){return r(f instanceof Float32Array),r(f.length%b==0),r(b>=3),r(x>=0&&x<=f.length/b),I?(r(I instanceof Float32Array),r(I.length%_==0),r(_>=3),r(f.length/b==I.length/_),p(n.exports.meshopt_simplifyPoints,f,f.length/b,b*4,I,_*4,E,x)):p(n.exports.meshopt_simplifyPoints,f,f.length/b,b*4,void 0,0,0,x)}}}();var yln=y(C()),gln=function(){var e="b9H79TebbbeVx9Geueu9Geub9Gbb9Giuuueu9Gmuuuuuuuuuuu9999eu9Gvuuuuueu9Gwuuuuuuuub9Gxuuuuuuuuuuuueu9Gkuuuuuuuuuu99eu9Gouuuuuub9Gruuuuuuub9GluuuubiOHdilvorwDqqkbiibeilve9Weiiviebeoweuec;G:Odkr:Yewo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9I919P29K9nW79O2Wt79c9V919U9KbeX9TW79O9V9Wt9F9I919P29K9nW79O2Wt7bo39TW79O9V9Wt9F9J9V9T9W91tWJ2917tWV9c9V919U9K7br39TW79O9V9Wt9F9J9V9T9W91tW9nW79O2Wt9c9V919U9K7bDL9TW79O9V9Wt9F9V9Wt9P9T9P96W9nW79O2Wtbql79IV9RbkDwebcekdsPq;Q9BHdbkIbabaec9:fgefcufae9Ugeabci9Uadfcufad9Ugbaeab0Ek:w8KDPue99eux99dui99euo99iu8Jjjjjbc:WD9Rgm8KjjjjbdndnalmbcbhPxekamc:Cwfcbc;Kbz:njjjb8Adndnalcb9imbaoal9nmbamcuaocdtaocFFFFi0Egscbyd;y1jjbHjjjjbbgzBd:CwamceBd;8wamascbyd;y1jjbHjjjjbbgHBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;y1jjbHjjjjbbgOBd:KwamciBd;8waihsalhAinazasydbcdtfcbBdbasclfhsaAcufgAmbkaihsalhAinazasydbcdtfgCaCydbcefBdbasclfhsaAcufgAmbkaihsalhCcbhXindnazasydbcdtgQfgAydbcb9imbaHaQfaXBdbaAaAydbgQcjjjj94VBdbaQaXfhXkasclfhsaCcufgCmbkalci9UhLdnalci6mbcbhsaihAinaAcwfydbhCaAclfydbhXaHaAydbcdtfgQaQydbgQcefBdbaOaQcdtfasBdbaHaXcdtfgXaXydbgXcefBdbaOaXcdtfasBdbaHaCcdtfgCaCydbgCcefBdbaOaCcdtfasBdbaAcxfhAaLascefgs9hmbkkaihsalhAindnazasydbcdtgCfgXydbgQcu9kmbaXaQcFFFFrGgQBdbaHaCfgCaCydbaQ9RBdbkasclfhsaAcufgAmbxdkkamcuaocdtgsaocFFFFi0EgAcbyd;y1jjbHjjjjbbgzBd:CwamceBd;8wamaAcbyd;y1jjbHjjjjbbgHBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;y1jjbHjjjjbbgOBd:KwamciBd;8wazcbasz:njjjbhXalci9UhLaihsalhAinaXasydbcdtfgCaCydbcefBdbasclfhsaAcufgAmbkdnaoTmbcbhsaHhAaXhCaohQinaAasBdbaAclfhAaCydbasfhsaCclfhCaQcufgQmbkkdnalci6mbcbhsaihAinaAcwfydbhCaAclfydbhQaHaAydbcdtfgKaKydbgKcefBdbaOaKcdtfasBdbaHaQcdtfgQaQydbgQcefBdbaOaQcdtfasBdbaHaCcdtfgCaCydbgCcefBdbaOaCcdtfasBdbaAcxfhAaLascefgs9hmbkkaoTmbcbhsaohAinaHasfgCaCydbaXasfydb9RBdbasclfhsaAcufgAmbkkamaLcbyd;y1jjbHjjjjbbgsBd:OwamclBd;8wascbaLz:njjjbhYamcuaLcK2alcjjjjd0Ecbyd;y1jjbHjjjjbbg8ABd:SwamcvBd;8wJbbbbhEdnalci6g3mbarcd4hKaihAa8AhsaLhrJbbbbh5inavaAclfydbaK2cdtfgCIdlh8EavaAydbaK2cdtfgXIdlhEavaAcwfydbaK2cdtfgQIdlh8FaCIdwhaaXIdwhhaQIdwhgasaCIdbg8JaXIdbg8KMaQIdbg8LMJbbnn:vUdbasclfaXIdlaCIdlMaQIdlMJbbnn:vUdbaQIdwh8MaCIdwh8NaXIdwhyascxfa8EaE:tg8Eagah:tggNa8FaE:tg8Faaah:tgaN:tgEJbbbbJbbjZa8Ja8K:tg8Ja8FNa8La8K:tg8Ka8EN:tghahNaEaENaaa8KNaga8JN:tgEaENMM:rg8K:va8KJbbbb9BEg8ENUdbasczfaEa8ENUdbascCfaha8ENUdbascwfa8Maya8NMMJbbnn:vUdba5a8KMh5aAcxfhAascKfhsarcufgrmbka5aL:Z:vJbbbZNhEkamcuaLcdtalcFFFF970Ecbyd;y1jjbHjjjjbbgCBd:WwamcoBd;8waEaq:ZNhEdna3mbcbhsaChAinaAasBdbaAclfhAaLascefgs9hmbkkaE:rhhcuh8PamcuaLcltalcFFFFd0Ecbyd;y1jjbHjjjjbbgIBd:0wamcrBd;8wcbaIa8AaCaLz:djjjb8AJFFuuhyJFFuuh8RJFFuuh8Sdnalci6gXmbJFFuuh8Sa8AhsaLhAJFFuuh8RJFFuuhyinascwfIdbgEayayaE9EEhyasclfIdbgEa8Ra8RaE9EEh8RasIdbgEa8Sa8SaE9EEh8SascKfhsaAcufgAmbkkahJbbbZNhgamaocetgscuaocu9kEcbyd;y1jjbHjjjjbbgABd:4waAcFeasz:njjjbhCdnaXmbcbhAJFFuuhEa8Ahscuh8PinascwfIdbay:tghahNasIdba8S:tghahNasclfIdba8R:tghahNMM:rghaEa8PcuSahaE9DVgXEhEaAa8PaXEh8PascKfhsaLaAcefgA9hmbkkamczfcbcjwz:njjjb8Aamcwf9cb83ibam9cb83ibagaxNhRJbbjZak:th8Ncbh8UJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8YJbbbbh8ZJbbbbh80cbh81cbhPinJbbbbhEdna8UTmbJbbjZa8U:Z:vhEkJbbbbhhdna80a80Na8Ya8YNa8Za8ZNMMg8KJbbbb9BmbJbbjZa8K:r:vhhka8XaENh5a8WaENh8Fa8VaENhaa8PhQdndndndndna8UaPVTmbamydwgBTmea80ahNh8Ja8ZahNh8La8YahNh8Maeamydbcdtfh83cbh3JFFuuhEcvhXcuhQindnaza83a3cdtfydbcdtgsfydbgvTmbaOaHasfydbcdtfhAindndnaCaiaAydbgKcx2fgsclfydbgrcetf8Vebcs4aCasydbgLcetf8Vebcs4faCascwfydbglcetf8Vebcs4fgombcbhsxekcehsazaLcdtfydbgLceSmbcehsazarcdtfydbgrceSmbcehsazalcdtfydbglceSmbdnarcdSaLcdSfalcdSfcd6mbaocefhsxekaocdfhskdnasaX9kmba8AaKcK2fgLIdwa5:thhaLIdla8F:th8KaLIdbaa:th8EdndnakJbbbb9DTmba8E:lg8Ea8K:lg8Ka8Ea8K9EEg8Kah:lgha8Kah9EEag:vJbbjZMhhxekahahNa8Ea8ENa8Ka8KNMM:rag:va8NNJbbjZMJ9VO:d86JbbjZaLIdCa8JNaLIdxa8MNa8LaLIdzNMMakN:tghahJ9VO:d869DENhhkaKaQasaX6ahaE9DVgLEhQasaXaLEhXahaEaLEhEkaAclfhAavcufgvmbkka3cefg3aB9hmbkkaQcu9hmekama5Ud:ODama8FUd:KDamaaUd:GDamcuBd:qDamcFFF;7rBdjDaIcba8AaYamc:GDfakJbbbb9Damc:qDfamcjDfz:ejjjbamyd:qDhQdndnaxJbbbb9ETmba8UaD6mbaQcuSmeceh3amIdjDaR9EmixdkaQcu9hmekdna8UTmbdnamydlgza8Uci2fgsciGTmbadasfcba8Uazcu7fciGcefz:njjjb8AkabaPcltfgzam8Pib83dbazcwfamcwf8Pib83dbaPcefhPkc3hzinazc98Smvamc:Cwfazfydbcbyd;u1jjbH:bjjjbbazc98fhzxbkkcbh3a8Uaq9pmbamydwaCaiaQcx2fgsydbcetf8Vebcs4aCascwfydbcetf8Vebcs4faCasclfydbcetf8Vebcs4ffaw9nmekcbhscbhAdna81TmbcbhAamczfhXinamczfaAcdtfaXydbgLBdbaXclfhXaAaYaLfRbbTfhAa81cufg81mbkkamydwhlamydbhXam9cu83i:GDam9cu83i:ODam9cu83i:qDam9cu83i:yDaAc;8eaAclfc:bd6Eh81inamcjDfasfcFFF;7rBdbasclfgscz9hmbka81cdthBdnalTmbaeaXcdtfhocbhrindnazaoarcdtfydbcdtgsfydbgvTmbaOaHasfydbcdtfhAcuhLcuhsinazaiaAydbgKcx2fgXclfydbcdtfydbazaXydbcdtfydbfazaXcwfydbcdtfydbfgXasaXas6gXEhsaKaLaXEhLaAclfhAavcufgvmbkaLcuSmba8AaLcK2fgAIdway:tgEaENaAIdba8S:tgEaENaAIdla8R:tgEaENMM:rhEcbhAindndnasamc:qDfaAfgvydbgX6mbasaX9hmeaEamcjDfaAfIdb9FTmekavasBdbamc:GDfaAfaLBdbamcjDfaAfaEUdbxdkaAclfgAcz9hmbkkarcefgral9hmbkkamczfaBfhLcbhscbhAindnamc:GDfasfydbgXcuSmbaLaAcdtfaXBdbaAcefhAkasclfgscz9hmbkaAa81fg81TmbJFFuuhhcuhKamczfhsa81hvcuhLina8AasydbgXcK2fgAIdway:tgEaENaAIdba8S:tgEaENaAIdla8R:tgEaENMM:rhEdndnazaiaXcx2fgAclfydbcdtfydbazaAydbcdtfydbfazaAcwfydbcdtfydbfgAaL6mbaAaL9hmeaEah9DTmekaEhhaAhLaXhKkasclfhsavcufgvmbkaKcuSmbaKhQkdnamaiaQcx2fgrydbarclfydbarcwfydbaCabaeadaPawaqa3z:fjjjbTmbaPcefhPJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8YJbbbbh8ZJbbbbh80kcbhXinaOaHaraXcdtfydbcdtgAfydbcdtfgKhsazaAfgvydbgLhAdnaLTmbdninasydbaQSmeasclfhsaAcufgATmdxbkkasaKaLcdtfc98fydbBdbavavydbcufBdbkaXcefgXci9hmbka8AaQcK2fgsIdbhEasIdlhhasIdwh8KasIdxh8EasIdzh5asIdCh8FaYaQfce86bba80a8FMh80a8Za5Mh8Za8Ya8EMh8Ya8Xa8KMh8Xa8WahMh8Wa8VaEMh8Vamydxh8Uxbkkamc:WDf8KjjjjbaPk;Vvivuv99lu8Jjjjjbca9Rgv8Kjjjjbdndnalcw0mbaiydbhoaeabcitfgralcdtcufBdlaraoBdbdnalcd6mbaiclfhoalcufhwarcxfhrinaoydbhDarcuBdbarc98faDBdbarcwfhraoclfhoawcufgwmbkkalabfhrxekcbhDavczfcwfcbBdbav9cb83izavcwfcbBdbav9cb83ibJbbjZhqJbbjZhkinadaiaDcdtfydbcK2fhwcbhrinavczfarfgoawarfIdbgxaoIdbgm:tgPakNamMgmUdbavarfgoaPaxam:tNaoIdbMUdbarclfgrcx9hmbkJbbjZaqJbbjZMgq:vhkaDcefgDal9hmbkcbhoadcbcecdavIdlgxavIdwgm9GEgravIdbgPam9GEaraPax9GEgscdtgrfhzavczfarfIdbhxaihralhwinaiaocdtfgDydbhHaDarydbgOBdbaraHBdbarclfhraoazaOcK2fIdbax9Dfhoawcufgwmbkaeabcitfhrdndnaocv6mbaoalc98f6mekaraiydbBdbaralcdtcufBdlaiclfhoalcufhwarcxfhrinaoydbhDarcuBdbarc98faDBdbarcwfhraoclfhoawcufgwmbkalabfhrxekaraxUdbararydlc98GasVBdlabcefaeadaiaoz:djjjbhwararydlciGawabcu7fcdtVBdlawaeadaiaocdtfalao9Rz:djjjbhrkavcaf8Kjjjjbark:;idiud99dndnabaecitfgwydlgDciGgqciSmbinabcbaDcd4gDalaqcdtfIdbawIdb:tgkJbbbb9FEgwaecefgefadaialavaoarz:ejjjbak:larIdb9FTmdabawaD7aefgecitfgwydlgDciGgqci9hmbkkabaecitfgeclfhbdnavmbcuhwindnaiaeydbgDfRbbmbadaDcK2fgqIdwalIdw:tgkakNaqIdbalIdb:tgkakNaqIdlalIdl:tgkakNMM:rgkarIdb9DTmbarakUdbaoaDBdbkaecwfheawcefgwabydbcd46mbxdkkcuhwindnaiaeydbgDfRbbmbadaDcK2fgqIdbalIdb:t:lgkaqIdlalIdl:t:lgxakax9EEgkaqIdwalIdw:t:lgxakax9EEgkarIdb9DTmbarakUdbaoaDBdbkaecwfheawcefgwabydbcd46mbkkk;llevudnabydwgxaladcetfgm8Vebcs4alaecetfgP8Vebgscs4falaicetfgz8Vebcs4ffaD0abydxaq9pVakVgDce9hmbavawcltfgxab8Pdb83dbaxcwfabcwfgx8Pdb83dbdnaxydbgqTmbaoabydbcdtfhxaqhsinalaxydbcetfcFFi87ebaxclfhxascufgsmbkkdnabydxglci2gsabydlgxfgkciGTmbarakfcbalaxcu7fciGcefz:njjjb8Aabydxci2hsabydlhxabydwhqkab9cb83dwababydbaqfBdbabascifc98GaxfBdlaP8Vebhscbhxkdnascztcz91cu9kmbabaxcefBdwaPax87ebaoabydbcdtfaxcdtfaeBdbkdnam8Uebcu9kmbababydwgxcefBdwamax87ebaoabydbcdtfaxcdtfadBdbkdnaz8Uebcu9kmbababydwgxcefBdwazax87ebaoabydbcdtfaxcdtfaiBdbkarabydlfabydxci2faPRbb86bbarabydlfabydxci2fcefamRbb86bbarabydlfabydxci2fcdfazRbb86bbababydxcefBdxaDk8LbabaeadaialavaoarawaDaDaqJbbbbz:cjjjbk;Nkovud99euv99eul998Jjjjjbc:W;ae9Rgo8KjjjjbdndnadTmbavcd4hrcbhwcbhDindnaiaeclfydbar2cdtfgvIdbaiaeydbar2cdtfgqIdbgk:tgxaiaecwfydbar2cdtfgmIdlaqIdlgP:tgsNamIdbak:tgzavIdlaP:tgPN:tgkakNaPamIdwaqIdwgH:tgONasavIdwaH:tgHN:tgPaPNaHazNaOaxN:tgxaxNMM:rgsJbbbb9Bmbaoc:W:qefawcx2fgAakas:vUdwaAaxas:vUdlaAaPas:vUdbaoc8Wfawc8K2fgAaq8Pdb83dbaAav8Pdb83dxaAam8Pdb83dKaAcwfaqcwfydbBdbaAcCfavcwfydbBdbaAcafamcwfydbBdbawcefhwkaecxfheaDcifgDad6mbkab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbawTmeaocbBd8Sao9cb83iKao9cb83izaoczfaoc8Wfawci2cxaoc8Sfcbcrz1jjjbaoIdKhCaoIdChXaoIdzhQao9cb83iwao9cb83ibaoaoc:W:qefawcxaoc8Sfcbciz1jjjbJbbjZhkaoIdwgPJbbbbJbbjZaPaPNaoIdbgPaPNaoIdlgsasNMM:rgx:vaxJbbbb9BEgzNhxasazNhsaPazNhzaoc:W:qefheawhvinaecwfIdbaxNaeIdbazNasaeclfIdbNMMgPakaPak9DEhkaecxfheavcufgvmbkabaCUdwabaXUdlabaQUdbabaoId3UdxdndnakJ;n;m;m899FmbJbbbbhPaoc:W:qefheaoc8WfhvinaCavcwfIdb:taecwfIdbgHNaQavIdb:taeIdbgONaXavclfIdb:taeclfIdbgLNMMaxaHNazaONasaLNMM:vgHaPaHaP9EEhPavc8KfhvaecxfheawcufgwmbkabaxUd8KabasUdaabazUd3abaCaxaPN:tUdKabaXasaPN:tUdCabaQazaPN:tUdzabJbbjZakakN:t:rgkUdydndnaxJbbj:;axJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;axJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohexekcjjjj94hekabae86b8UdndnasJbbj:;asJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;asJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohvxekcjjjj94hvkabav86bRdndnazJbbj:;azJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;azJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohqxekcjjjj94hqkabaq86b8SdndnaecKtcK91:YJbb;:9c:vax:t:lavcKtcK91:YJbb;:9c:vas:t:laqcKtcK91:YJbb;:9c:vaz:t:lakMMMJbb;:9cNJbbjZMgk:lJbbb9p9DTmbak:Ohexekcjjjj94hekaecFbaecFb9iEhexekabcjjj;8iBdycFbhekabae86b8Vxekab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbkaoc:W;aef8Kjjjjbk;Iwwvul99iud99eue99eul998Jjjjjbcje9Rgr8Kjjjjbavcd4hwaicd4hDdndnaoTmbarc;abfcbaocdtgvz:njjjb8Aarc;Gbfcbavz:njjjb8AarhvarcafhiaohqinavcFFF97BdbaicFFF;7rBdbaiclfhiavclfhvaqcufgqmbkdnadTmbcbhkinaeakaD2cdtfgvIdwhxavIdlhmavIdbhPalakaw2cdtfIdbhsarc;abfhzarhiarc;GbfhHarcafhqcj1jjbhvaohOinasavcwfIdbaxNavIdbaPNavclfIdbamNMMgAMhCakhXdnaAas:tgAaqIdbgQ9DgLmbaHydbhXkaHaXBdbakhXdnaCaiIdbgK9EmbazydbhXaKhCkazaXBdbaiaCUdbaqaAaQaLEUdbavcxfhvaqclfhqaHclfhHaiclfhiazclfhzaOcufgOmbkakcefgkad9hmbkkadThkJbbbbhCcbhXarc;abfhvarc;Gbfhicbhqinalavydbgzaw2cdtfIdbalaiydbgHaw2cdtfIdbaeazaD2cdtfgzIdwaeaHaD2cdtfgHIdw:tgsasNazIdbaHIdb:tgsasNazIdlaHIdl:tgsasNMM:rMMgsaCasaC9EgzEhCaqaXazEhXaiclfhiavclfhvaoaqcefgq9hmbkaCJbbbZNhKxekadThkcbhXJbbbbhKkJbbbbhCdnaearc;abfaXcdtgifydbgqaD2cdtfgvIdwaearc;GbfaifydbgzaD2cdtfgiIdwgm:tgsasNavIdbaiIdbgY:tgAaANavIdlaiIdlgP:tgQaQNMM:rgxJbbbb9ETmbaxalaqaw2cdtfIdbMalazaw2cdtfIdb:taxaxM:vhCkasaCNamMhmaQaCNaPMhPaAaCNaYMhYdnakmbaDcdthvawcdthiindnalIdbg8AaecwfIdbam:tgCaCNaeIdbaY:tgsasNaeclfIdbaP:tgAaANMM:rgQMgEaK9ETmbJbbbbhxdnaQJbbbb9ETmbaEaK:taQaQM:vhxkaxaCNamMhmaxaANaPMhPaxasNaYMhYa8AaKaQMMJbbbZNhKkaeavfhealaifhladcufgdmbkkabaKUdxabamUdwabaPUdlabaYUdbarcjef8Kjjjjbkjeeiu8Jjjjjbcj8W9Rgr8Kjjjjbaici2hwdnaiTmbawceawce0EhDarhiinaiaeadRbbcdtfydbBdbadcefhdaiclfhiaDcufgDmbkkabarawaladaoz:hjjjbarcj8Wf8Kjjjjbk:3lequ8JjjjjbcjP9Rgl8Kjjjjbcbhvalcjxfcbaiz:njjjb8AdndnadTmbcjehoaehrincuhwarhDcuhqavhkdninawakaoalcjxfaDcefRbbfRbb9RcFeGci6aoalcjxfaDRbbfRbb9RcFeGci6faoalcjxfaDcdfRbbfRbb9RcFeGci6fgxaq9mgmEhwdnammbaxce0mdkaxaqaxaq9kEhqaDcifhDadakcefgk9hmbkkaeawci2fgDcdfRbbhqaDcefRbbhxaDRbbhkaeavci2fgDcifaDawav9Rci2z:qjjjb8Aakalcjxffaocefgo86bbaxalcjxffao86bbaDcdfaq86bbaDcefax86bbaDak86bbaqalcjxffao86bbarcifhravcefgvad9hmbkalcFeaicetz:njjjbhoadci2gDceaDce0EhqcbhxindnaoaeRbbgkcetfgw8UebgDcu9kmbawax87ebaocjlfaxcdtfabakcdtfydbBdbaxhDaxcefhxkaeaD86bbaecefheaqcufgqmbkaxcdthDxekcbhDkabalcjlfaDz:mjjjb8AalcjPf8Kjjjjbk9teiucbcbyd;C1jjbgeabcifc98GfgbBd;C1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;C1jjbgeabcrfc94GfgbBd;C1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd;C1jjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd;C1jjbfgdBd;C1jjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akk:;Deludndndnadch9pmbabaeSmdaeabadfgi9Rcbadcet9R0mekabaead;8qbbxekaeab7ciGhldndndnabae9pmbdnalTmbadhvabhixikdnabciGmbadhvabhixdkadTmiabaeRbb86bbadcufhvdnabcefgiciGmbaecefhexdkavTmiabaeRbe86beadc9:fhvdnabcdfgiciGmbaecdfhexdkavTmiabaeRbd86bdadc99fhvdnabcifgiciGmbaecifhexdkavTmiabaeRbi86biabclfhiaeclfheadc98fhvxekdnalmbdnaiciGTmbadTmlabadcufgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc9:fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc99fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc98fgdfaeadfRbb86bbkadcl6mbdnadc98fgocd4cefciGgiTmbaec98fhlabc98fhvinavadfaladfydbBdbadc98fhdaicufgimbkkaocx6mbaec9Wfhvabc9WfhoinaoadfgicxfavadfglcxfydbBdbaicwfalcwfydbBdbaiclfalclfydbBdbaialydbBdbadc9Wfgdci0mbkkadTmdadhidnadciGglTmbaecufhvabcufhoadhiinaoaifavaifRbb86bbaicufhialcufglmbkkadcl6mdaec98fhlabc98fhvinavaifgecifalaifgdcifRbb86bbaecdfadcdfRbb86bbaecefadcefRbb86bbaeadRbb86bbaic98fgimbxikkavcl6mbdnavc98fglcd4cefcrGgdTmbavadcdt9RhvinaiaeydbBdbaeclfheaiclfhiadcufgdmbkkalc36mbinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaiaeydzBdzaiaeydCBdCaiaeydKBdKaiaeyd3Bd3aecafheaicafhiavc9Gfgvci0mbkkavTmbdndnavcrGgdmbavhlxekavc94GhlinaiaeRbb86bbaicefhiaecefheadcufgdmbkkavcw6mbinaiaeRbb86bbaiaeRbe86beaiaeRbd86bdaiaeRbi86biaiaeRbl86blaiaeRbv86bvaiaeRbo86boaiaeRbr86braicwfhiaecwfhealc94fglmbkkabkk9Tdbcjwk9ubbjZbbbbbbbbbbbbbbjZbbbbbbbbbbbbbbjZ86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;bc;uwkxebbbdbbb9GNbb",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(f){n=f.instance,n.exports.__wasm_call_ctors()});function o(f){for(var b=new Uint8Array(f.length),x=0;x96?I-97:I>64?I-39:I+4}for(var _=0,x=0;x=3),r(I<=256||I>0),r(_<=512),r(_%4==0),E=E||0;var S=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f);return u(S,b,b.length/x,x*4,I,_,E)},computeClusterBounds:function(f,b,x){r(f.length%3==0),r(f.length/3<=512),r(b instanceof Float32Array),r(b.length%x==0),r(x>=3);var I=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f);return g(I,b,b.length/x,x*4)},computeMeshletBounds:function(f,b,x){return r(f.meshletCount!=0),r(b instanceof Float32Array),r(b.length%x==0),r(x>=3),p(f,b,b.length/x,x*4)},extractMeshlet:function(f,b){return r(b>=0&&b{$r._error=t}),$r._decoderTaskProcessor=e}return $r._decoderTaskProcessor};$r.decodePointCloud=function(e){let t=$r._getDecoderTaskProcessor();if(l($r._error))throw $r._error;if($r._taskProcessorReady)return t.scheduleTask(e,[e.buffer.buffer])};$r.decodeBufferView=function(e){let t=$r._getDecoderTaskProcessor();if(l($r._error))throw $r._error;if($r._taskProcessorReady)return t.scheduleTask(e,[e.array.buffer])};var TA=$r;var Qln=y(C(),1);var On={POSITION:"POSITION",NORMAL:"NORMAL",TANGENT:"TANGENT",TEXCOORD:"TEXCOORD",COLOR:"COLOR",JOINTS:"JOINTS",WEIGHTS:"WEIGHTS",FEATURE_ID:"_FEATURE_ID",SCALE:"_SCALE",ROTATION:"_ROTATION"};function NMe(e){switch(e){case On.POSITION:return"positionMC";case On.NORMAL:return"normalMC";case On.TANGENT:return"tangentMC";case On.TEXCOORD:return"texCoord";case On.COLOR:return"color";case On.JOINTS:return"joints";case On.WEIGHTS:return"weights";case On.FEATURE_ID:return"featureId";case On.SCALE:return"scale";case On.ROTATION:return"rotation"}}On.hasSetIndex=function(e){switch(e){case On.POSITION:case On.NORMAL:case On.TANGENT:return!1;case On.TEXCOORD:case On.COLOR:case On.JOINTS:case On.WEIGHTS:case On.FEATURE_ID:case On.SCALE:case On.ROTATION:return!0}};On.fromGltfSemantic=function(e){let t=e,i=/^(\w+)_\d+$/.exec(e);switch(i!==null&&(t=i[1]),t){case"POSITION":return On.POSITION;case"NORMAL":return On.NORMAL;case"TANGENT":return On.TANGENT;case"TEXCOORD":return On.TEXCOORD;case"COLOR":return On.COLOR;case"JOINTS":return On.JOINTS;case"WEIGHTS":return On.WEIGHTS;case"_FEATURE_ID":return On.FEATURE_ID;case"_SCALE":return On.SCALE;case"_ROTATION":return On.ROTATION}};On.fromPntsSemantic=function(e){switch(e){case"POSITION":case"POSITION_QUANTIZED":return On.POSITION;case"RGBA":case"RGB":case"RGB565":return On.COLOR;case"NORMAL":case"NORMAL_OCT16P":return On.NORMAL;case"BATCH_ID":return On.FEATURE_ID}};On.getGlslType=function(e){switch(e){case On.POSITION:case On.NORMAL:case On.TANGENT:return"vec3";case On.TEXCOORD:return"vec2";case On.COLOR:return"vec4";case On.JOINTS:return"ivec4";case On.WEIGHTS:return"vec4";case On.FEATURE_ID:return"int";case On.SCALE:return"vec3";case On.ROTATION:return"vec4";case On.OPACITY:return"float"}};On.getVariableName=function(e,t){let n=NMe(e);return l(t)&&(n+=`_${t}`),n};var lt=Object.freeze(On);function vb(e){e=e??Y.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.primitive,o=e.draco,r=e.gltfResource,s=e.baseResource,a=e.cacheKey;this._resourceCache=t,this._gltfResource=r,this._baseResource=s,this._gltf=n,this._primitive=i,this._draco=o,this._cacheKey=a,this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodePromise=void 0,this._decodedData=void 0,this._state=ft.UNLOADED,this._promise=void 0,this._dracoError=void 0}l(Object.create)&&(vb.prototype=Object.create(Yi.prototype),vb.prototype.constructor=vb);Object.defineProperties(vb.prototype,{cacheKey:{get:function(){return this._cacheKey}},decodedData:{get:function(){return this._decodedData}}});async function DMe(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=ft.PROCESSING,e)}catch(n){if(e.isDestroyed())return;Zse(e,n)}}vb.prototype.load=async function(){return l(this._promise)?this._promise:(this._state=ft.LOADING,this._promise=DMe(this),this._promise)};function Zse(e,t){throw e.unload(),e._state=ft.FAILED,e.getError("Failed to load Draco",t)}async function QMe(e,t){try{let n=await t;return e.isDestroyed()?void 0:(e.unload(),e._decodedData={indices:n.indexArray,vertexAttributes:n.attributeData},e._state=ft.READY,e._baseResource)}catch(n){if(e.isDestroyed())return;e._dracoError=n}}var WC={};WC[lt.POSITION]="POSITION";WC[lt.NORMAL]="NORMAL";WC[lt.COLOR]="COLOR";WC[lt.TEXCOORD]="TEX_COORD";function UMe(e){for(let t in WC)if(WC.hasOwnProperty(t)&&e.startsWith(t))return WC[t]}vb.prototype.process=function(e){if(this._state===ft.READY)return!0;if(this._state!==ft.PROCESSING||(l(this._dracoError)&&Zse(this,this._dracoError),!l(this._bufferViewTypedArray))||l(this._decodePromise))return!1;let t=this._draco,n=this._primitive,i=this._gltf,o=i.bufferViews,r=t.bufferView,s=o[r],a=t.attributes,c=[];for(let h in n.attributes)if(n.attributes.hasOwnProperty(h)){let p=UMe(h);l(p)&&i.accessors[n.attributes[h]].componentType===J.FLOAT&&(c.includes(p)||c.push(p))}let d={array:new Uint8Array(this._bufferViewTypedArray),bufferView:s,compressedAttributes:a,dequantizeInShader:!0,attributesToSkipTransform:c},u=TA.decodeBufferView(d);if(!l(u))return!1;this._decodePromise=QMe(this,u)};vb.prototype.unload=function(){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};var hE=vb;var ddn=y(C(),1);var tdn=y(C(),1);function kMe(e){let t=e.uint8Array,n=e.format,i=e.request,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 FC=kMe;function SA(e){e=e??Y.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.imageId,o=e.gltfResource,r=e.baseResource,s=e.cacheKey,a=n.images[i],c=a.bufferView,d=a.uri;this._resourceCache=t,this._gltfResource=o,this._baseResource=r,this._gltf=n,this._bufferViewId=c,this._uri=d,this._cacheKey=s,this._bufferViewLoader=void 0,this._image=void 0,this._mipLevels=void 0,this._state=ft.UNLOADED,this._promise=void 0}l(Object.create)&&(SA.prototype=Object.create(Yi.prototype),SA.prototype.constructor=SA);Object.defineProperties(SA.prototype,{cacheKey:{get:function(){return this._cacheKey}},image:{get:function(){return this._image}},mipLevels:{get:function(){return this._mipLevels}}});SA.prototype.load=function(){return l(this._promise)?this._promise:l(this._bufferViewId)?(this._promise=YMe(this),this._promise):(this._promise=OMe(this),this._promise)};function Bse(e){let t;return Array.isArray(e)&&(t=e.slice(1,e.length).map(function(n){return n.bufferView}),e=e[0]),{image:e,mipLevels:t}}async function YMe(e){e._state=ft.LOADING;let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._bufferViewId,gltfResource:e._gltfResource,baseResource:e._baseResource});if(e._bufferViewLoader=n,await n.load(),e.isDestroyed())return;let i=n.typedArray,o=await zMe(i);if(e.isDestroyed())return;let r=Bse(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=ft.READY,e}catch(n){return e.isDestroyed()?void 0:wse(e,n,"Failed to load embedded image")}}async function OMe(e){e._state=ft.LOADING;let t=e._baseResource,n=e._uri,i=t.getDerivedResource({url:n});try{let o=await JMe(i);if(e.isDestroyed())return;let r=Bse(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=ft.READY,e}catch(o){return e.isDestroyed()?void 0:wse(e,o,`Failed to load image: ${n}`)}}function wse(e,t,n){return e.unload(),e._state=ft.FAILED,Promise.reject(e.getError(n,t))}function HMe(e){let t=e.subarray(0,2),n=e.subarray(0,4),i=e.subarray(8,12);if(t[0]===255&&t[1]===216)return"image/jpeg";if(t[0]===137&&t[1]===80)return"image/png";if(t[0]===171&&t[1]===75)return"image/ktx2";if(n[0]===82&&n[1]===73&&n[2]===70&&n[3]===70&&i[0]===87&&i[1]===69&&i[2]===66&&i[3]===80)return"image/webp";throw new de("Image format is not recognized")}async function zMe(e){let t=HMe(e);if(t==="image/ktx2"){let n=new Uint8Array(e);return Kl(n)}return SA._loadImageFromTypedArray({uint8Array:e,format:t,flipY:!1,skipColorSpaceConversion:!0})}var KMe=/(^data:image\/ktx2)|(\.ktx2$)/i;function JMe(e){let t=e.getUrlComponent(!1,!0);return KMe.test(t)?Kl(e):e.fetchImage({skipColorSpaceConversion:!0,preferImageBitmap:!0})}SA.prototype.unload=function(){l(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&this._resourceCache.unload(this._bufferViewLoader),this._bufferViewLoader=void 0,this._uri=void 0,this._image=void 0,this._mipLevels=void 0,this._gltf=void 0};SA._loadImageFromTypedArray=FC;var fE=SA;var Edn=y(C(),1);var mdn=y(C(),1),jMe={TEXTURE:0,PROGRAM:1,BUFFER:2,NUMBER_OF_JOB_TYPES:3},uc=Object.freeze(jMe);function Nb(e){e=e??Y.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.accessorId,o=e.gltfResource,r=e.baseResource,s=e.primitive,a=e.draco,c=e.cacheKey,d=e.asynchronous??!0,u=e.loadBuffer??!1,h=e.loadTypedArray??!1,p=n.accessors[i].componentType;this._resourceCache=t,this._gltfResource=o,this._baseResource=r,this._gltf=n,this._accessorId=i,this._indexDatatype=p,this._primitive=s,this._draco=a,this._cacheKey=c,this._asynchronous=d,this._loadBuffer=u,this._loadTypedArray=h,this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._state=ft.UNLOADED,this._promise=void 0}l(Object.create)&&(Nb.prototype=Object.create(Yi.prototype),Nb.prototype.constructor=Nb);Object.defineProperties(Nb.prototype,{cacheKey:{get:function(){return this._cacheKey}},buffer:{get:function(){return this._buffer}},typedArray:{get:function(){return this._typedArray}},indexDatatype:{get:function(){return this._indexDatatype}}});var qMe=new lz;Nb.prototype.load=async function(){return l(this._promise)?this._promise:l(this._draco)?(this._promise=$Me(this),this._promise):(this._promise=eve(this),this._promise)};async function $Me(e){e._state=ft.LOADING;let t=e._resourceCache;try{let n=t.getDracoLoader({gltf:e._gltf,primitive:e._primitive,draco:e._draco,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._dracoLoader=n,await n.load(),e.isDestroyed()?void 0:(e._state=ft.LOADED,e)}catch(n){if(e.isDestroyed())return;cz(e,n)}}async function eve(e){let t=e._gltf,n=e._accessorId,o=t.accessors[n].bufferView;e._state=ft.LOADING;let r=e._resourceCache;try{let s=r.getBufferViewLoader({gltf:t,bufferViewId:o,gltfResource:e._gltfResource,baseResource:e._baseResource});if(e._bufferViewLoader=s,await s.load(),e.isDestroyed())return;let a=s.typedArray;return e._typedArray=tve(e,a),e._state=ft.PROCESSING,e}catch(s){if(e.isDestroyed())return;cz(e,s)}}function tve(e,t){let n=e._gltf,i=e._accessorId,o=n.accessors[i],r=o.count,s=o.componentType,a=Me.getSizeInBytes(s),c=t.buffer,d=t.byteOffset+o.byteOffset;if(d%a!==0){let h=r*a,p=new Uint8Array(c,d,h);c=new Uint8Array(p).buffer,d=0,_r("index-buffer-unaligned",`The index array is not aligned to a ${a}-byte boundary.`)}let u;return s===Me.UNSIGNED_BYTE?u=new Uint8Array(c,d,r):s===Me.UNSIGNED_SHORT?u=new Uint16Array(c,d,r):s===Me.UNSIGNED_INT&&(u=new Uint32Array(c,d,r)),u}function cz(e,t){throw e.unload(),e._state=ft.FAILED,e.getError("Failed to load index buffer",t)}function lz(){this.typedArray=void 0,this.indexDatatype=void 0,this.context=void 0,this.buffer=void 0}lz.prototype.set=function(e,t,n){this.typedArray=e,this.indexDatatype=t,this.context=n};lz.prototype.execute=function(){this.buffer=Xse(this.typedArray,this.indexDatatype,this.context)};function Xse(e,t,n){let i=It.createIndexBuffer({typedArray:e,context:n,usage:Ne.STATIC_DRAW,indexDatatype:t});return i.vertexArrayDestroyable=!1,i}Nb.prototype.process=function(e){if(this._state===ft.READY)return!0;if(this._state!==ft.LOADED&&this._state!==ft.PROCESSING)return!1;let t=this._typedArray,n=this._indexDatatype;if(l(this._dracoLoader))try{this._dracoLoader.process(e)&&(t=this._dracoLoader.decodedData.indices.typedArray,this._typedArray=t,n=J.fromTypedArray(t),this._indexDatatype=n)}catch(o){cz(this,o)}if(!l(t))return!1;let i;if(this._loadBuffer&&this._asynchronous){let o=qMe;if(o.set(t,n,e.context),!e.jobScheduler.execute(o,uc.BUFFER))return!1;i=o.buffer}else this._loadBuffer&&(i=Xse(t,n,e.context));return this.unload(),this._buffer=i,this._typedArray=this._loadTypedArray?t:void 0,this._state=ft.READY,this._resourceCache.statistics.addGeometryLoader(this),!0};Nb.prototype.unload=function(){l(this._buffer)&&this._buffer.destroy();let e=this._resourceCache;l(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&e.unload(this._bufferViewLoader),l(this._dracoLoader)&&e.unload(this._dracoLoader),this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._gltf=void 0,this._primitive=void 0};var pE=Nb;var Shn=y(C(),1);var Hdn=y(C(),1);var Sdn=y(C(),1);function nve(e,t,n){if(n=n??!1,n){let i=e.indexOf(t);if(i>-1)return i}return e.push(t),e.length-1}var Os=nve;var wdn=y(C(),1);var Vdn=y(C(),1);function ive(e,t){return l(e.extensionsUsed)&&e.extensionsUsed.indexOf(t)>=0}var Er=ive;function an(){}an.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}}};an.object=function(e,t){if(l(e)){let n=e.length;for(let i=0;i0)return i.byteStride}return J.getSizeInBytes(t.componentType)*Ud(t.type)}var nd=rve;function sve(e){Xe.accessor(e,function(n){l(n.bufferView)&&(n.byteOffset=n.byteOffset??0)}),Xe.bufferView(e,function(n){l(n.buffer)&&(n.byteOffset=n.byteOffset??0)}),Xe.mesh(e,function(n){Xe.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=Os(e.materials,o)}})}),Xe.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=nd(e,i),r.target=ne.ARRAY_BUFFER}}),Xe.accessorContainingIndexData(e,function(n){let o=e.accessors[n].bufferView;if(l(o)){let r=e.bufferViews[o];r.target=ne.ELEMENT_ARRAY_BUFFER}}),Xe.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)&&Xe.materialValue(n,function(c){l(c.index)&&PC(c)}),PC(n.emissiveTexture),PC(n.normalTexture),PC(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,PC(s.baseColorTexture),PC(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,PC(a.specularGlossinessTexture))}),Xe.animation(e,function(n){Xe.animationSampler(n,function(i){i.interpolation=i.interpolation??"LINEAR"})});let t=ave(e);return Xe.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]}),Xe.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 ave(e){let t={};return Xe.animation(e,function(n){Xe.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 PC(e){l(e)&&(e.texCoord=e.texCoord??0)}var XZ=sve;var jdn=y(C(),1);function cve(e){return Xe.shader(e,function(t){qD(t)}),Xe.buffer(e,function(t){qD(t)}),Xe.image(e,function(t){qD(t)}),qD(e),e}function qD(e){e.extras=l(e.extras)?e.extras:{},e.extras._pipeline=l(e.extras._pipeline)?e.extras._pipeline:{}}var Db=cve;var mun=y(C(),1);var oun=y(C(),1);var eun=y(C(),1);function lve(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 WZ=lve;function dve(e,t){let n=e.extensionsUsed;if(l(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),WZ(e,t),n.length===0&&delete e.extensionsUsed}}var MC=dve;var uve=4;function mve(e){if(gh(e)!=="glTF")throw new de("File is not valid binary glTF");let n=Wse(e,0,5),i=n[1];if(i!==1&&i!==2)throw new de("Binary glTF version is not 1 or 2");return i===1?hve(e,n):fve(e,n)}function Wse(e,t,n){let i=new DataView(e.buffer),o=new Array(n);for(let r=0;r0){let h=u.binary_glTF??u.KHR_binary_glTF;l(h)&&(h.extras._pipeline.source=d,delete h.uri)}return MC(c,"KHR_binary_glTF"),c}function fve(e,t){let n=t[2],i=12,o,r;for(;i0){let a=s[0];a.extras._pipeline.source=r}}return o}var FZ=mve;var Aun=y(C(),1);function pve(e){return Xe.shader(e,function(t){$D(t)}),Xe.buffer(e,function(t){$D(t)}),Xe.image(e,function(t){$D(t)}),$D(e),e}function $D(e){l(e.extras)&&(l(e.extras._pipeline)&&delete e.extras._pipeline,Object.keys(e.extras).length===0&&delete e.extras)}var PZ=pve;var zmn=y(C(),1);var Cun=y(C(),1);function Ave(e,t){let n=e.extensionsUsed;l(n)||(n=[],e.extensionsUsed=n),Os(n,t,!0)}var tm=Ave;var Gun=y(C(),1);var _un=y(C(),1);function gve(e){switch(e){case J.BYTE:return function(t,n,i,o,r){for(let s=0;s-1:!1}var xve=[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 Ive(e,t){if(!l(e))return t;for(let n=0;n<4;n++)if(xve.indexOf(e[n])===-1)return t;return e}function _ve(e){let t={},n={},i=e.techniques;return l(i)&&(Xe.technique(e,function(o,r){let s=o.states;if(l(s)){let a=n[r]={};if(Fse(s,ne.BLEND)){a.alphaMode="BLEND";let c=s.functions;l(c)&&(l(c.blendEquationSeparate)||l(c.blendFuncSeparate))&&(t[r]={blendEquation:c.blendEquationSeparate??yve,blendFactors:Ive(c.blendFuncSeparate,Cve)})}Fse(s,ne.CULL_FACE)||(a.doubleSided=!0),delete o.states}}),Object.keys(t).length>0&&(l(e.extensions)||(e.extensions={}),tm(e,"KHR_blend")),Xe.material(e,function(o){if(l(o.technique)){let r=n[o.technique];Xe.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 MZ=_ve;var zun=y(C(),1);var Dun=y(C(),1);function Eve(e,t){let n=e.extensionsRequired;l(n)||(n=[],e.extensionsRequired=n),Os(n,t,!0),tm(e,t)}var vZ=Eve;function Tve(e){let t=e.techniques,n={},i={},o={};if(l(t)){let r={programs:[],shaders:[],techniques:[]},s=e.glExtensionsUsed;delete e.glExtensionsUsed,Xe.technique(e,function(a,c){let d={name:a.name,program:void 0,attributes:{},uniforms:{}},u;if(Xe.techniqueAttribute(a,function(h,p){u=a.parameters[h],d.attributes[p]={semantic:u.semantic}}),Xe.techniqueUniform(a,function(h,p){u=a.parameters[h],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][h]=p}),l(o[a.program]))d.program=o[a.program];else{let h=e.programs[a.program],p={name:h.name,fragmentShader:void 0,vertexShader:void 0,glExtensions:s},g=e.shaders[h.fragmentShader];p.fragmentShader=Os(r.shaders,g,!0);let f=e.shaders[h.vertexShader];p.vertexShader=Os(r.shaders,f,!0),d.program=Os(r.programs,p),o[a.program]=d.program}i[c]=Os(r.techniques,d)}),r.techniques.length>0&&(l(e.extensions)||(e.extensions={}),e.extensions.KHR_techniques_webgl=r,tm(e,"KHR_techniques_webgl"),vZ(e,"KHR_techniques_webgl"))}return Xe.material(e,function(r){if(l(r.technique)){let s={technique:i[r.technique]};Xe.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 NZ=Tve;var rmn=y(C(),1);var $un=y(C(),1);function Sve(e,t){Bo.typeOf.object("material",e),Bo.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 c=r.diffuseTexture,d=t(c.index,c);if(l(d))return d}if(l(r.specularGlossinessTexture)){let c=r.specularGlossinessTexture,d=t(c.index,c);if(l(d))return d}}let s=i.KHR_materials_specular;if(l(s)){let{specularTexture:c,specularColorTexture:d}=s;if(l(c)){let u=t(c.index,c);if(l(u))return u}if(l(d)){let u=t(d.index,d);if(l(u))return u}}let a=i.KHR_materials_common;if(l(a)&&l(a.values)){let{diffuse:c,ambient:d,emission:u,specular:h}=a.values;if(l(c)&&l(c.index)){let p=t(c.index,c);if(l(p))return p}if(l(d)&&l(d.index)){let p=t(d.index,d);if(l(p))return p}if(l(u)&&l(u.index)){let p=t(u.index,u);if(l(p))return p}if(l(h)&&l(h.index)){let p=t(h.index,h);if(l(p))return p}}}let o=Xe.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 AE=Sve;var Pse=["mesh","node","material","accessor","bufferView","buffer","texture","sampler","image"];function Lve(e,t){return t=t??Pse,Pse.forEach(function(n){t.indexOf(n)>-1&&Vve(e,n)}),e}var Rve={accessor:"accessors",buffer:"buffers",bufferView:"bufferViews",image:"images",node:"nodes",material:"materials",mesh:"meshes",sampler:"samplers",texture:"textures"};function Vve(e,t){let n=Rve[t],i=e[n];if(l(i)){let o=0,r=kf[t](e),s=i.length;for(let a=0;at&&o.attributes[c]--}),Xe.meshPrimitiveTarget(o,function(a){Xe.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})}),Xe.skin(e,function(i){l(i.inverseBindMatrices)&&i.inverseBindMatrices>t&&i.inverseBindMatrices--}),Xe.animation(e,function(i){Xe.animationSampler(i,function(o){l(o.input)&&o.input>t&&o.input--,l(o.output)&&o.output>t&&o.output--})})};Uf.buffer=function(e,t){e.buffers.splice(t,1),Xe.bufferView(e,function(i){l(i.buffer)&&i.buffer>t&&i.buffer--,l(i.extensions)&&l(i.extensions.EXT_meshopt_compression)&&i.extensions.EXT_meshopt_compression.buffer--})};Uf.bufferView=function(e,t){if(e.bufferViews.splice(t,1),Xe.accessor(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),Xe.shader(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),Xe.image(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),Er(e,"KHR_draco_mesh_compression")&&Xe.mesh(e,function(i){Xe.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--})}),Er(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(Er(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--}}}}};Uf.image=function(e,t){e.images.splice(t,1),Xe.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})};Uf.mesh=function(e,t){e.meshes.splice(t,1),Xe.node(e,function(i){l(i.mesh)&&(i.mesh>t?i.mesh--:i.mesh===t&&delete i.mesh)})};Uf.node=function(e,t){e.nodes.splice(t,1),Xe.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})}),Xe.animation(e,function(i){Xe.animationChannel(i,function(o){l(o.target)&&l(o.target.node)&&o.target.node>t&&o.target.node--})}),Xe.technique(e,function(i){Xe.techniqueUniform(i,function(o){l(o.node)&&o.node>t&&o.node--})}),Xe.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}))}),Xe.scene(e,function(i){i.nodes=i.nodes.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o})})};Uf.material=function(e,t){e.materials.splice(t,1),Xe.mesh(e,function(i){Xe.meshPrimitive(i,function(o){l(o.material)&&o.material>t&&o.material--})})};Uf.sampler=function(e,t){e.samplers.splice(t,1),Xe.texture(e,function(i){l(i.sampler)&&i.sampler>t&&--i.sampler})};Uf.texture=function(e,t){if(e.textures.splice(t,1),Xe.material(e,function(i){AE(i,function(o,r){r.index>t&&--r.index})}),Er(e,"EXT_feature_metadata")){Xe.mesh(e,function(r){Xe.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 h=0;ht&&--g.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(Er(e,"EXT_mesh_features")&&Xe.mesh(e,function(i){Xe.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}}}})}),Er(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 kf(){}kf.accessor=function(e){let t={};return Xe.mesh(e,function(n){Xe.meshPrimitive(n,function(i){Xe.meshPrimitiveAttribute(i,function(r){t[r]=!0}),Xe.meshPrimitiveTarget(i,function(r){Xe.meshPrimitiveTargetAttribute(r,function(s){t[s]=!0})});let o=i.indices;l(o)&&(t[o]=!0)})}),Xe.skin(e,function(n){l(n.inverseBindMatrices)&&(t[n.inverseBindMatrices]=!0)}),Xe.animation(e,function(n){Xe.animationSampler(n,function(i){l(i.input)&&(t[i.input]=!0),l(i.output)&&(t[i.output]=!0)})}),Er(e,"EXT_mesh_gpu_instancing")&&Xe.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})}),Er(e,"CESIUM_primitive_outline")&&Xe.mesh(e,function(n){Xe.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};kf.buffer=function(e){let t={};return Xe.bufferView(e,function(n){l(n.buffer)&&(t[n.buffer]=!0),l(n.extensions)&&l(n.extensions.EXT_meshopt_compression)&&(t[n.extensions.EXT_meshopt_compression.buffer]=!0)}),t};kf.bufferView=function(e){let t={};if(Xe.accessor(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),Xe.shader(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),Xe.image(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),Er(e,"KHR_draco_mesh_compression")&&Xe.mesh(e,function(n){Xe.meshPrimitive(n,function(i){l(i.extensions)&&l(i.extensions.KHR_draco_mesh_compression)&&(t[i.extensions.KHR_draco_mesh_compression.bufferView]=!0)})}),Er(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(Er(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 Mse(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!Mse(e,o,n)}).length===0}kf.node=function(e){let t={};return Xe.skin(e,function(n){l(n.skeleton)&&(t[n.skeleton]=!0),Xe.skinJoint(n,function(i){t[i]=!0})}),Xe.animation(e,function(n){Xe.animationChannel(n,function(i){l(i.target)&&l(i.target.node)&&(t[i.target.node]=!0)})}),Xe.technique(e,function(n){Xe.techniqueUniform(n,function(i){l(i.node)&&(t[i.node]=!0)})}),Xe.node(e,function(n,i){Mse(e,i,t)||(t[i]=!0)}),t};kf.material=function(e){let t={};return Xe.mesh(e,function(n){Xe.meshPrimitive(n,function(i){l(i.material)&&(t[i.material]=!0)})}),t};kf.texture=function(e){let t={};if(Xe.material(e,function(n){AE(n,function(i){t[i]=!0})}),Er(e,"EXT_feature_metadata")){Xe.mesh(e,function(o){Xe.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}),Xe.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=qve[a];l(u)?(d=u+c,t[r]=d):l(jve[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)}})}),Xe.technique(e,function(n){Xe.techniqueParameter(n,function(i){let o=t[i.semantic];l(o)&&(i.semantic=o)})})}function eNe(e){Xe.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 mz(e,t){return l(t.byteStride)&&t.byteStride!==0?t.byteStride:nd(e,t)}function tNe(e){Xe.buffer(e,function(t){l(t.byteLength)||(t.byteLength=t.extras._pipeline.source.length)}),Xe.accessor(e,function(t){let n=t.bufferView;if(l(n)){let i=e.bufferViews[n],o=mz(e,t),r=t.byteOffset+t.count*o;i.byteLength=Math.max(i.byteLength??0,r)}})}function nNe(e){let t,n,i,o=e.bufferViews,r={};Xe.accessorContainingVertexAttributeData(e,function(a){let c=e.accessors[a];l(c.bufferView)&&(r[c.bufferView]=!0)});let s={};Xe.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,g){return p.byteOffset-g.byteOffset});let d=0,u=0,h=c.length;for(t=0;t=0;--r)if(i[r]===t){i.splice(r,1);return}}}),Xe.node(e,function(n,i){if(l(n.children)){let o=n.children.indexOf(t);o>-1&&(n.children.splice(o,1),Qse(n)&&Use(e,i))}}),delete e.nodes[t]}function oNe(e){return Xe.node(e,function(t,n){Qse(t)&&Use(e,n)}),e}function rNe(e){Xe.animation(e,function(t){Xe.animationSampler(t,function(n){let i=e.accessors[n.input];if(!l(i.min)||!l(i.max)){let o=vC(e,i);i.min=o.min,i.max=o.max}})})}function sNe(e){Xe.accessor(e,function(t){if(l(t.min)||l(t.max)){let n=vC(e,t);l(t.min)&&(t.min=n.min),l(t.max)&&(t.max=n.max)}})}function aNe(e){e.asset=e.asset??{},e.asset.version="2.0",Dse(e),Dve(e),oNe(e),Qve(e),Uve(e),Yve(e),Hve(e),tNe(e),nNe(e),iNe(e),rNe(e),sNe(e),zve(e),Kve(e),Jve(e),$ve(e),kZ(e),eNe(e),MZ(e),NZ(e),kve(e)}var cNe=["u_tex","u_diffuse","u_emission","u_diffuse_tex"],lNe=["u_diffuse","u_diffuse_mat"];function hz(e){e.pbrMetallicRoughness=l(e.pbrMetallicRoughness)?e.pbrMetallicRoughness:{},e.pbrMetallicRoughness.roughnessFactor=1,e.pbrMetallicRoughness.metallicFactor=0}function fz(e){return l(e.index)}function pz(e){return Array.isArray(e)&&e.length===4}function kse(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 dNe(e,t){t=t??{};let n=t.baseColorTextureNames??cNe,i=t.baseColorFactorNames??lNe;Xe.material(e,function(o){Xe.materialValue(o,function(r,s){n.indexOf(s)!==-1&&fz(r)?(hz(o),o.pbrMetallicRoughness.baseColorTexture=r):i.indexOf(s)!==-1&&pz(r)&&(hz(o),o.pbrMetallicRoughness.baseColorFactor=kse(r))})}),NC(e,"KHR_techniques_webgl"),NC(e,"KHR_blend")}function uz(e,t){l(t)&&(pz(t)?e.pbrMetallicRoughness.baseColorFactor=kse(t):fz(t)&&(e.pbrMetallicRoughness.baseColorTexture=t))}function Nse(e,t){l(t)&&(pz(t)?e.emissiveFactor=t.slice(0,3):fz(t)&&(e.emissiveTexture=t))}function uNe(e){Xe.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;hz(t),n.technique==="CONSTANT"?(tm(e,"KHR_materials_unlit"),t.extensions=l(t.extensions)?t.extensions:{},t.extensions.KHR_materials_unlit={},uz(t,s),uz(t,o)):(uz(t,r),Nse(t,o),Nse(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")}),NC(e,"KHR_materials_common")}var YZ=Wve;var ahn=y(C(),1);function wc(){}wc.getError=function(e,t,n){let i=`Failed to load ${e}: ${t}`;l(n)&&l(n.message)&&(i+=` ${n.message}`);let o=new de(i);return l(n)&&(o.stack=`Original stack: ${n.stack} Handler stack: ${o.stack}`),o};wc.getNodeTransform=function(e){return l(e.matrix)?e.matrix:X.fromTranslationQuaternionRotationScale(l(e.translation)?e.translation:m.ZERO,l(e.rotation)?e.rotation:Pe.IDENTITY,l(e.scale)?e.scale:m.ONE)};wc.getAttributeBySemantic=function(e,t,n){let i=e.attributes,o=i.length;for(let r=0;ro9e);var a=se(Jse.url)}var c="./this.program",d=Jse.url,u;if(s){var h=a("fs");d.startsWith("file:")&&a("path").dirname(a("url").fileURLToPath(d)),u=se=>(se=x(se)?new URL(se):se,h.readFileSync(se)),1{var oe=new XMLHttpRequest;return oe.open("GET",se,!1),oe.responseType="arraybuffer",oe.send(null),new Uint8Array(oe.response)})}var p=console.log.bind(console),g=console.error.bind(console),f,b=!1,x=se=>se.startsWith("file://"),I,_,E,S,R,G,B,w,F,P,A,T,L,V=!1;function W(){var se=E.buffer;S=new Int8Array(se),G=new Int16Array(se),i.HEAPU8=R=new Uint8Array(se),B=new Uint16Array(se),w=new Int32Array(se),F=new Uint32Array(se),i.HEAPF32=P=new Float32Array(se),A=new Float64Array(se),T=new BigInt64Array(se),L=new BigUint64Array(se)}var M=0,Q=null;function N(se){var oe;throw(oe=i.onAbort)==null||oe.call(i,se),se="Aborted("+se+")",g(se),b=!0,se=new WebAssembly.RuntimeError(se+". Build with -sASSERTIONS for more info."),_?.(se),se}var k;async function v(se){if(!ArrayBuffer.isView(se))if(se==k&&f)se=new Uint8Array(f);else if(u)se=u(se);else throw"both async and sync fetching of the wasm failed";return se}async function O(se){var oe=k;try{var _e=await v(oe);return await WebAssembly.instantiate(_e,se)}catch(Se){g(`failed to asynchronously prepare wasm: ${Se}`),N(Se)}}async function H(se){return O(se)}var ee=se=>{for(;0{var se=i.preRun.shift();te.push(se)},pe=se=>{if(s)return se=Buffer.from(se,"base64"),new Uint8Array(se.buffer,se.byteOffset,se.length);for(var oe,_e,Se=0,He=0,gt=se.length,mt=new Uint8Array((3*gt>>2)-(se[gt-2]=="=")-(se[gt-1]=="="));Se>4,mt[He+1]=oe<<4|_e>>2,mt[He+2]=_e<<6|Qp[se.charCodeAt(Se+3)];return mt},ye={},he=se=>{for(;se.length;){var oe=se.pop();se.pop()(oe)}};function xe(se){return this.N(F[se>>2])}var Te={},Be={},Le={},De=class extends Error{constructor(se){super(se),this.name="InternalError"}},Ue=(se,oe,_e)=>{function Se(Tt){if(Tt=_e(Tt),Tt.length!==se.length)throw new De("Mismatched type converter count");for(var Bn=0;BnLe[Tt]=oe);var He=Array(oe.length),gt=[],mt=0;oe.forEach((Tt,Bn)=>{Be.hasOwnProperty(Tt)?He[Bn]=Be[Tt]:(gt.push(Tt),Te.hasOwnProperty(Tt)||(Te[Tt]=[]),Te[Tt].push(()=>{He[Bn]=Be[Tt],++mt,mt===gt.length&&Se(He)}))}),gt.length===0&&Se(He)},je=se=>{for(var oe="";;){var _e=R[se++];if(!_e)return oe;oe+=String.fromCharCode(_e)}},it=class extends Error{constructor(se){super(se),this.name="BindingError"}},nn=se=>{throw new it(se)};function rt(se,oe,_e={}){var Se=oe.name;if(!se)throw new it(`type "${Se}" must have a positive integer typeid pointer`);if(Be.hasOwnProperty(se)){if(_e.wa)return;throw new it(`Cannot register type '${Se}' twice`)}Be[se]=oe,delete Le[se],Te.hasOwnProperty(se)&&(oe=Te[se],delete Te[se],oe.forEach(He=>He()))}function rn(se,oe,_e={}){return rt(se,oe,_e)}var Jt=(se,oe,_e)=>{switch(oe){case 1:return _e?Se=>S[Se]:Se=>R[Se];case 2:return _e?Se=>G[Se>>1]:Se=>B[Se>>1];case 4:return _e?Se=>w[Se>>2]:Se=>F[Se>>2];case 8:return _e?Se=>T[Se>>3]:Se=>L[Se>>3];default:throw new TypeError(`invalid integer width (${oe}): ${se}`)}},Xt=se=>{throw new it(se.L.P.M.name+" instance already deleted")},Li=!1,bi=()=>{},vt=se=>typeof FinalizationRegistry>"u"?(vt=oe=>oe,se):(Li=new FinalizationRegistry(oe=>{oe=oe.L,--oe.count.value,oe.count.value===0&&(oe.S?oe.W.Y(oe.S):oe.P.M.Y(oe.O))}),vt=oe=>{var _e=oe.L;return _e.S&&Li.register(oe,{L:_e},oe),oe},bi=oe=>{Li.unregister(oe)},vt(se));function Rt(){}var si=(se,oe)=>Object.defineProperty(oe,"name",{value:se}),_t={},Fo=(se,oe,_e)=>{if(se[oe].R===void 0){var Se=se[oe];se[oe]=function(...He){if(!se[oe].R.hasOwnProperty(He.length))throw new it(`Function '${_e}' called with an invalid number of arguments (${He.length}) - expects one of (${se[oe].R})!`);return se[oe].R[He.length].apply(this,He)},se[oe].R=[],se[oe].R[Se.aa]=Se}},Uo=(se,oe,_e)=>{if(i.hasOwnProperty(se)){if(_e===void 0||i[se].R!==void 0&&i[se].R[_e]!==void 0)throw new it(`Cannot register public name '${se}' twice`);if(Fo(i,se,se),i[se].R.hasOwnProperty(_e))throw new it(`Cannot register multiple overloads of a function with the same number of arguments (${_e})!`);i[se].R[_e]=oe}else i[se]=oe,i[se].aa=_e},Va=se=>{se=se.replace(/[^a-zA-Z0-9_]/g,"$");var oe=se.charCodeAt(0);return 48<=oe&&57>=oe?`_${se}`:se};function Cr(se,oe,_e,Se,He,gt,mt,Tt){this.name=se,this.constructor=oe,this.$=_e,this.Y=Se,this.U=He,this.ra=gt,this.ea=mt,this.pa=Tt,this.ya=[]}var wr=(se,oe,_e)=>{for(;oe!==_e;){if(!oe.ea)throw new it(`Expected null or instance of ${_e.name}, got an instance of ${oe.name}`);se=oe.ea(se),oe=oe.U}return se},ve=se=>{if(se===null)return"null";var oe=typeof se;return oe==="object"||oe==="array"||oe==="function"?se.toString():""+se};function ut(se,oe){if(oe===null){if(this.ha)throw new it(`null is not a valid ${this.name}`);return 0}if(!oe.L)throw new it(`Cannot pass "${ve(oe)}" as a ${this.name}`);if(!oe.L.O)throw new it(`Cannot pass deleted object as a pointer of type ${this.name}`);return wr(oe.L.O,oe.L.P.M,this.M)}function qe(se,oe){if(oe===null){if(this.ha)throw new it(`null is not a valid ${this.name}`);if(this.ga){var _e=this.ia();return se!==null&&se.push(this.Y,_e),_e}return 0}if(!oe||!oe.L)throw new it(`Cannot pass "${ve(oe)}" as a ${this.name}`);if(!oe.L.O)throw new it(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.fa&&oe.L.P.fa)throw new it(`Cannot convert argument of type ${oe.L.W?oe.L.W.name:oe.L.P.name} to parameter type ${this.name}`);if(_e=wr(oe.L.O,oe.L.P.M,this.M),this.ga){if(oe.L.S===void 0)throw new it("Passing raw pointer to smart pointer is illegal");switch(this.Da){case 0:if(oe.L.W===this)_e=oe.L.S;else throw new it(`Cannot convert argument of type ${oe.L.W?oe.L.W.name:oe.L.P.name} to parameter type ${this.name}`);break;case 1:_e=oe.L.S;break;case 2:if(oe.L.W===this)_e=oe.L.S;else{var Se=oe.clone();_e=this.za(_e,fs(()=>Se.delete())),se!==null&&se.push(this.Y,_e)}break;default:throw new it("Unsupporting sharing policy")}}return _e}function nt(se,oe){if(oe===null){if(this.ha)throw new it(`null is not a valid ${this.name}`);return 0}if(!oe.L)throw new it(`Cannot pass "${ve(oe)}" as a ${this.name}`);if(!oe.L.O)throw new it(`Cannot pass deleted object as a pointer of type ${this.name}`);if(oe.L.P.fa)throw new it(`Cannot convert argument of type ${oe.L.P.name} to parameter type ${this.name}`);return wr(oe.L.O,oe.L.P.M,this.M)}var yt=(se,oe,_e)=>oe===_e?se:_e.U===void 0?null:(se=yt(se,oe,_e.U),se===null?null:_e.pa(se)),$t={},Sn=(se,oe)=>{if(oe===void 0)throw new it("ptr should not be undefined");for(;se.U;)oe=se.ea(oe),se=se.U;return $t[oe]},fo=(se,oe)=>{if(!oe.P||!oe.O)throw new De("makeClassHandle requires ptr and ptrType");if(!!oe.W!=!!oe.S)throw new De("Both smartPtrType and smartPtr must be specified");return oe.count={value:1},vt(Object.create(se,{L:{value:oe,writable:!0}}))};function uo(se,oe,_e,Se,He,gt,mt,Tt,Bn,zn,fn){this.name=se,this.M=oe,this.ha=_e,this.fa=Se,this.ga=He,this.xa=gt,this.Da=mt,this.na=Tt,this.ia=Bn,this.za=zn,this.Y=fn,He||oe.U!==void 0?this.T=qe:(this.T=Se?ut:nt,this.V=null)}var ra=(se,oe,_e)=>{if(!i.hasOwnProperty(se))throw new De("Replacing nonexistent public symbol");i[se].R!==void 0&&_e!==void 0?i[se].R[_e]=oe:(i[se]=oe,i[se].aa=_e)},sa,Hn=(se,oe)=>{se=je(se);var _e=sa.get(oe);if(typeof _e!="function")throw new it(`unknown function pointer with signature ${se}: ${oe}`);return _e};class Ti extends Error{}var Rs=se=>{se=Zee(se);var oe=je(se);return lb(se),oe},Jo=(se,oe)=>{function _e(gt){He[gt]||Be[gt]||(Le[gt]?Le[gt].forEach(_e):(Se.push(gt),He[gt]=!0))}var Se=[],He={};throw oe.forEach(_e),new Ti(`${se}: `+Se.map(Rs).join([", "]))},Ga=(se,oe)=>{for(var _e=[],Se=0;Se>2]);return _e};function po(se){for(var oe=1;oemt)throw new it("argTypes array size mismatch! Must at least get return value and 'this' types!");var Tt=oe[1]!==null&&_e!==null,Bn=po(oe);_e=!oe[0].ma;var zn=oe[0],fn=oe[1];for(Se=[se,nn,Se,He,he,zn.N.bind(zn),fn?.T.bind(fn)],He=2;He{se=se.trim();let oe=se.indexOf("(");return oe===-1?se:se.slice(0,oe)},xr=[],Vs=[0,1,,1,null,1,!0,1,!1,1],ks=se=>{9{if(!se)throw new it(`Cannot use deleted val. handle = ${se}`);return Vs[se]},fs=se=>{switch(se){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:let oe=xr.pop()||Vs.length;return Vs[oe]=se,Vs[oe+1]=1,oe}},tc={name:"emscripten::val",N:se=>{var oe=Jm(se);return ks(se),oe},T:(se,oe)=>fs(oe),X:xe,V:null},nc=(se,oe,_e)=>{switch(oe){case 1:return _e?function(Se){return this.N(S[Se])}:function(Se){return this.N(R[Se])};case 2:return _e?function(Se){return this.N(G[Se>>1])}:function(Se){return this.N(B[Se>>1])};case 4:return _e?function(Se){return this.N(w[Se>>2])}:function(Se){return this.N(F[Se>>2])};default:throw new TypeError(`invalid integer width (${oe}): ${se}`)}},Xr=(se,oe)=>{var _e=Be[se];if(_e===void 0)throw se=`${oe} has unknown type ${Rs(se)}`,new it(se);return _e},kl=(se,oe)=>{switch(oe){case 4:return function(_e){return this.N(P[_e>>2])};case 8:return function(_e){return this.N(A[_e>>3])};default:throw new TypeError(`invalid float width (${oe}): ${se}`)}},Yl=Object.assign({optional:!0},tc),aa=(se,oe,_e)=>{var Se=R;if(!(0<_e))return 0;var He=oe;_e=oe+_e-1;for(var gt=0;gt=mt){if(oe>=_e)break;Se[oe++]=mt}else if(2047>=mt){if(oe+1>=_e)break;Se[oe++]=192|mt>>6,Se[oe++]=128|mt&63}else if(65535>=mt){if(oe+2>=_e)break;Se[oe++]=224|mt>>12,Se[oe++]=128|mt>>6&63,Se[oe++]=128|mt&63}else{if(oe+3>=_e)break;Se[oe++]=240|mt>>18,Se[oe++]=128|mt>>12&63,Se[oe++]=128|mt>>6&63,Se[oe++]=128|mt&63,gt++}}return Se[oe]=0,oe-He},Zo=se=>{for(var oe=0,_e=0;_e=Se?oe++:2047>=Se?oe+=2:55296<=Se&&57343>=Se?(oe+=4,++_e):oe+=3}return oe},mn=new TextDecoder,Re=(se,oe,_e,Se)=>{if(_e=oe+_e,Se)return _e;for(;se[oe]&&!(oe>=_e);)++oe;return oe},Vt=new TextDecoder("utf-16le"),Cn=(se,oe,_e)=>(se>>=1,Vt.decode(B.subarray(se,Re(B,se,oe/2,_e)))),rr=(se,oe,_e)=>{if(_e??(_e=2147483647),2>_e)return 0;_e-=2;var Se=oe;_e=_e<2*se.length?_e/2:se.length;for(var He=0;He<_e;++He)G[oe>>1]=se.charCodeAt(He),oe+=2;return G[oe>>1]=0,oe-Se},Za=se=>2*se.length,Gs=(se,oe,_e)=>{var Se="";se>>=2;for(var He=0;!(He>=oe/4);He++){var gt=F[se+He];if(!gt&&!_e)break;Se+=String.fromCodePoint(gt)}return Se},Ic=(se,oe,_e)=>{if(_e??(_e=2147483647),4>_e)return 0;var Se=oe;_e=Se+_e-4;for(var He=0;He>2]=gt,oe+=4,oe+4>_e)break}return w[oe>>2]=0,oe-Se},jm=se=>{for(var oe=0,_e=0;_e{var oe=Dp.length;return Dp.push(se),oe},Ba=(se,oe)=>{for(var _e=Array(se),Se=0;Se>2],`parameter ${Se}`);return _e},x9=(se,oe,_e)=>{var Se=[];return se=se(Se,_e),Se.length&&(F[oe>>2]=fs(Se)),se},I9={},kSe=se=>{var oe=I9[se];return oe===void 0?je(se):oe},S3={},Gee=()=>{if(!L3){var se={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(typeof navigator=="object"&&navigator.language||"C").replace("-","_")+".UTF-8",_:c||"./this.program"},oe;for(oe in S3)S3[oe]===void 0?delete se[oe]:se[oe]=S3[oe];var _e=[];for(oe in se)_e.push(`${oe}=${se[oe]}`);L3=_e}return L3},L3,YSe=[null,[],[]],Qp=new Uint8Array(123),cb=25;0<=cb;--cb)Qp[48+cb]=52+cb,Qp[65+cb]=cb,Qp[97+cb]=26+cb;Qp[43]=62,Qp[47]=63,(()=>{let se=Rt.prototype;Object.assign(se,{isAliasOf:function(_e){if(!(this instanceof Rt&&_e instanceof Rt))return!1;var Se=this.L.P.M,He=this.L.O;_e.L=_e.L;var gt=_e.L.P.M;for(_e=_e.L.O;Se.U;)He=Se.ea(He),Se=Se.U;for(;gt.U;)_e=gt.ea(_e),gt=gt.U;return Se===gt&&He===_e},clone:function(){if(this.L.O||Xt(this),this.L.da)return this.L.count.value+=1,this;var _e=vt,Se=Object,He=Se.create,gt=Object.getPrototypeOf(this),mt=this.L;return _e=_e(He.call(Se,gt,{L:{value:{count:mt.count,ba:mt.ba,da:mt.da,O:mt.O,P:mt.P,S:mt.S,W:mt.W}}})),_e.L.count.value+=1,_e.L.ba=!1,_e},delete(){if(this.L.O||Xt(this),this.L.ba&&!this.L.da)throw new it("Object already scheduled for deletion");bi(this);var _e=this.L;--_e.count.value,_e.count.value===0&&(_e.S?_e.W.Y(_e.S):_e.P.M.Y(_e.O)),this.L.da||(this.L.S=void 0,this.L.O=void 0)},isDeleted:function(){return!this.L.O},deleteLater:function(){if(this.L.O||Xt(this),this.L.ba&&!this.L.da)throw new it("Object already scheduled for deletion");return this.L.ba=!0,this}});let oe=Symbol.dispose;oe&&(se[oe]=se.delete)})(),Object.assign(uo.prototype,{sa(se){return this.na&&(se=this.na(se)),se},ka(se){var oe;(oe=this.Y)==null||oe.call(this,se)},X:xe,N:function(se){function oe(){return this.ga?fo(this.M.$,{P:this.xa,O:_e,W:this,S:se}):fo(this.M.$,{P:this,O:se})}var _e=this.sa(se);if(!_e)return this.ka(se),null;var Se=Sn(this.M,_e);if(Se!==void 0)return Se.L.count.value===0?(Se.L.O=_e,Se.L.S=se,Se.clone()):(Se=Se.clone(),this.ka(se),Se);if(Se=this.M.ra(_e),Se=_t[Se],!Se)return oe.call(this);Se=this.fa?Se.oa:Se.pointerType;var He=yt(_e,this.M,Se.M);return He===null?oe.call(this):this.ga?fo(Se.M.$,{P:Se,O:He,W:this,S:se}):fo(Se.M.$,{P:Se,O:He})}}),i.print&&(p=i.print),i.printErr&&(g=i.printErr),i.wasmBinary&&(f=i.wasmBinary),i.thisProgram&&(c=i.thisProgram);var Zee,R3,lb,OSe={x:()=>N(""),q:se=>{var oe=ye[se];delete ye[se];var _e=oe.ia,Se=oe.Y,He=oe.la,gt=He.map(mt=>mt.va).concat(He.map(mt=>mt.Ba));Ue([se],gt,mt=>{var Tt={};return He.forEach((Bn,zn)=>{var fn=mt[zn],ps=Bn.ta,Gd=Bn.ua,nl=mt[zn+He.length],il=Bn.Aa,Fu=Bn.Ca;Tt[Bn.qa]={read:Up=>fn.N(ps(Gd,Up)),write:(Up,KL)=>{var Zd=[];il(Fu,Up,nl.T(Zd,KL)),he(Zd)},optional:mt[zn].optional}}),[{name:oe.name,N:Bn=>{var zn={},fn;for(fn in Tt)zn[fn]=Tt[fn].read(Bn);return Se(Bn),zn},T:(Bn,zn)=>{for(var fn in Tt)if(!(fn in zn||Tt[fn].optional))throw new TypeError(`Missing field: "${fn}"`);var ps=_e();for(fn in Tt)Tt[fn].write(ps,zn[fn]);return Bn!==null&&Bn.push(Se,ps),ps},X:xe,V:Se}]})},n:(se,oe,_e,Se,He)=>{oe=je(oe),Se=Se===0n;let gt=mt=>mt;if(Se){let mt=8*_e;gt=Tt=>BigInt.asUintN(mt,Tt),He=gt(He)}rn(se,{name:oe,N:gt,T:(mt,Tt)=>(typeof Tt=="number"&&(Tt=BigInt(Tt)),Tt),X:Jt(oe,_e,!Se),V:null})},B:(se,oe,_e,Se)=>{oe=je(oe),rn(se,{name:oe,N:function(He){return!!He},T:function(He,gt){return gt?_e:Se},X:function(He){return this.N(R[He])},V:null})},j:(se,oe,_e,Se,He,gt,mt,Tt,Bn,zn,fn,ps,Gd)=>{fn=je(fn),gt=Hn(He,gt),Tt&&(Tt=Hn(mt,Tt)),zn&&(zn=Hn(Bn,zn)),Gd=Hn(ps,Gd);var nl=Va(fn);Uo(nl,function(){Jo(`Cannot construct ${fn} due to unbound types`,[Se])}),Ue([se,oe,_e],Se?[Se]:[],il=>{if(il=il[0],Se)var Fu=il.M,Up=Fu.$;else Up=Rt.prototype;il=si(fn,function(...G3){if(Object.getPrototypeOf(this)!==KL)throw new it(`Use 'new' to construct ${fn}`);if(Zd.Z===void 0)throw new it(`${fn} has no accessible constructor`);var Bee=Zd.Z[G3.length];if(Bee===void 0)throw new it(`Tried to invoke ctor of ${fn} with invalid number of parameters (${G3.length}) - expected (${Object.keys(Zd.Z).toString()}) parameters instead!`);return Bee.apply(this,G3)});var KL=Object.create(Up,{constructor:{value:il}});il.prototype=KL;var Zd=new Cr(fn,il,KL,Gd,Fu,gt,Tt,zn);if(Zd.U){var JL;(JL=Zd.U).ja??(JL.ja=[]),Zd.U.ja.push(Zd)}return Fu=new uo(fn,Zd,!0,!1,!1),JL=new uo(fn+"*",Zd,!1,!1,!1),Up=new uo(fn+" const*",Zd,!1,!0,!1),_t[se]={pointerType:JL,oa:Up},ra(nl,il),[Fu,JL,Up]})},g:(se,oe,_e,Se,He,gt)=>{var mt=Ga(oe,_e);He=Hn(Se,He),Ue([],[se],Tt=>{Tt=Tt[0];var Bn=`constructor ${Tt.name}`;if(Tt.M.Z===void 0&&(Tt.M.Z=[]),Tt.M.Z[oe-1]!==void 0)throw new it(`Cannot register multiple constructors with identical number of parameters (${oe-1}) for class '${Tt.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return Tt.M.Z[oe-1]=()=>{Jo(`Cannot construct ${Tt.name} due to unbound types`,mt)},Ue([],mt,zn=>(zn.splice(1,0,null),Tt.M.Z[oe-1]=jo(Bn,zn,null,He,gt),[])),[]})},b:(se,oe,_e,Se,He,gt,mt,Tt,Bn)=>{var zn=Ga(_e,Se);oe=je(oe),oe=Wu(oe),gt=Hn(He,gt),Ue([],[se],fn=>{function ps(){Jo(`Cannot call ${Gd} due to unbound types`,zn)}fn=fn[0];var Gd=`${fn.name}.${oe}`;oe.startsWith("@@")&&(oe=Symbol[oe.substring(2)]),Tt&&fn.M.ya.push(oe);var nl=fn.M.$,il=nl[oe];return il===void 0||il.R===void 0&&il.className!==fn.name&&il.aa===_e-2?(ps.aa=_e-2,ps.className=fn.name,nl[oe]=ps):(Fo(nl,oe,Gd),nl[oe].R[_e-2]=ps),Ue([],zn,Fu=>(Fu=jo(Gd,Fu,fn,gt,mt,Bn),nl[oe].R===void 0?(Fu.aa=_e-2,nl[oe]=Fu):nl[oe].R[_e-2]=Fu,[])),[]})},z:se=>rn(se,tc),r:(se,oe,_e,Se)=>{function He(){}oe=je(oe),He.values={},rn(se,{name:oe,constructor:He,N:function(gt){return this.constructor.values[gt]},T:(gt,mt)=>mt.value,X:nc(oe,_e,Se),V:null}),Uo(oe,He)},d:(se,oe,_e)=>{var Se=Xr(se,"enum");oe=je(oe),se=Se.constructor,Se=Object.create(Se.constructor.prototype,{value:{value:_e},constructor:{value:si(`${Se.name}_${oe}`,function(){})}}),se.values[_e]=Se,se[oe]=Se},m:(se,oe,_e)=>{oe=je(oe),rn(se,{name:oe,N:Se=>Se,T:(Se,He)=>He,X:kl(oe,_e),V:null})},l:(se,oe,_e,Se,He,gt,mt)=>{var Tt=Ga(oe,_e);se=je(se),se=Wu(se),He=Hn(Se,He),Uo(se,function(){Jo(`Cannot call ${se} due to unbound types`,Tt)},oe-1),Ue([],Tt,Bn=>(Bn=[Bn[0],null].concat(Bn.slice(1)),ra(se,jo(se,Bn,null,He,gt,mt),oe-1),[]))},c:(se,oe,_e,Se,He)=>{oe=je(oe);let gt=Tt=>Tt;if(Se===0){var mt=32-8*_e;gt=Tt=>Tt<>>mt,He=gt(He)}rn(se,{name:oe,N:gt,T:(Tt,Bn)=>Bn,X:Jt(oe,_e,Se!==0),V:null})},a:(se,oe,_e)=>{function Se(gt){return new He(S.buffer,F[gt+4>>2],F[gt>>2])}var He=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][oe];_e=je(_e),rn(se,{name:_e,N:Se,X:Se},{wa:!0})},h:se=>{rn(se,Yl)},A:(se,oe)=>{oe=je(oe),rn(se,{name:oe,N(_e){var Se=(Se=_e+4)?mn.decode(R.subarray(Se,Re(R,Se,F[_e>>2],!0))):"";return lb(_e),Se},T(_e,Se){Se instanceof ArrayBuffer&&(Se=new Uint8Array(Se));var He=typeof Se=="string";if(!(He||ArrayBuffer.isView(Se)&&Se.BYTES_PER_ELEMENT==1))throw new it("Cannot pass non-string to std::string");var gt=He?Zo(Se):Se.length,mt=R3(4+gt+1),Tt=mt+4;return F[mt>>2]=gt,He?aa(Se,Tt,gt+1):R.set(Se,Tt),_e!==null&&_e.push(lb,mt),mt},X:xe,V(_e){lb(_e)}})},f:(se,oe,_e)=>{if(_e=je(_e),oe===2)var Se=Cn,He=rr,gt=Za;else Se=Gs,He=Ic,gt=jm;rn(se,{name:_e,N:mt=>{var Tt=Se(mt+4,F[mt>>2]*oe,!0);return lb(mt),Tt},T:(mt,Tt)=>{if(typeof Tt!="string")throw new it(`Cannot pass non-string to C++ string type ${_e}`);var Bn=gt(Tt),zn=R3(4+Bn+oe);return F[zn>>2]=Bn/oe,He(Tt,zn+4,Bn+oe),mt!==null&&mt.push(lb,zn),zn},X:xe,V(mt){lb(mt)}})},i:(se,oe,_e,Se,He,gt)=>{ye[se]={name:je(oe),ia:Hn(_e,Se),Y:Hn(He,gt),la:[]}},e:(se,oe,_e,Se,He,gt,mt,Tt,Bn,zn)=>{ye[se].la.push({qa:je(oe),va:_e,ta:Hn(Se,He),ua:gt,Ba:mt,Aa:Hn(Tt,Bn),Ca:zn})},C:(se,oe)=>{oe=je(oe),rn(se,{ma:!0,name:oe,N:()=>{},T:()=>{}})},p:(se,oe,_e)=>{var[Se,...He]=Ba(se,oe);oe=Se.T.bind(Se);var gt=He.map(Bn=>Bn.X.bind(Bn));se--;var mt={toValue:Jm};switch(se=gt.map((Bn,zn)=>{var fn=`argFromPtr${zn}`;return mt[fn]=Bn,`${fn}(args${zn?"+"+8*zn:""})`}),_e){case 0:var Tt="toValue(handle)";break;case 2:Tt="new (toValue(handle))";break;case 3:Tt="";break;case 1:mt.getStringOrSymbol=kSe,Tt="toValue(handle)[getStringOrSymbol(methodName)]"}return Tt+=`(${se})`,Se.ma||(mt.toReturnWire=oe,mt.emval_returnValue=x9,Tt=`return emval_returnValue(toReturnWire, destructorsRef, ${Tt})`),Tt=`return function (handle, methodName, destructorsRef, args) { ${Tt} }`,_e=new Function(Object.keys(mt),Tt)(...Object.values(mt)),Tt=`methodCaller<(${He.map(Bn=>Bn.name)}) => ${Se.name}>`,zL(si(Tt,_e))},E:ks,o:(se,oe,_e,Se,He)=>Dp[se](oe,_e,Se,He),D:se=>{var oe=Jm(se);he(oe),ks(se)},s:(se,oe,_e,Se)=>{var He=new Date().getFullYear(),gt=new Date(He,0,1).getTimezoneOffset();He=new Date(He,6,1).getTimezoneOffset(),F[se>>2]=60*Math.max(gt,He),w[oe>>2]=+(gt!=He),oe=mt=>{var Tt=Math.abs(mt);return`UTC${0<=mt?"-":"+"}${String(Math.floor(Tt/60)).padStart(2,"0")}${String(Tt%60).padStart(2,"0")}`},se=oe(gt),oe=oe(He),He{var oe=R.length;if(se>>>=0,2147483648=_e;_e*=2){var Se=oe*(1+.2/_e);Se=Math.min(Se,se+100663296);e:{Se=(Math.min(2147483648,65536*Math.ceil(Math.max(se,Se)/65536))-E.buffer.byteLength+65535)/65536|0;try{E.grow(Se),W();var He=1;break e}catch{}He=void 0}if(He)return!0}return!1},t:(se,oe)=>{var _e=0,Se=0,He;for(He of Gee()){var gt=oe+_e;F[se+Se>>2]=gt,_e+=aa(He,gt,1/0)+1,Se+=4}return 0},u:(se,oe)=>{var _e=Gee();F[se>>2]=_e.length,se=0;for(var Se of _e)se+=Zo(Se)+1;return F[oe>>2]=se,0},v:()=>52,w:function(){return 70},k:(se,oe,_e,Se)=>{for(var He=0,gt=0;gt<_e;gt++){var mt=F[oe>>2],Tt=F[oe+4>>2];oe+=8;for(var Bn=0;Bn>2]=He,0}},S_=await async function(){var se;function oe(Se){var He;return S_=Se.exports,E=S_.F,W(),sa=S_.H,Se=S_,Zee=Se.I,i._malloc=R3=Se.J,i._free=lb=Se.K,M--,(He=i.monitorRunDependencies)==null||He.call(i,M),M==0&&Q&&(Se=Q,Q=null,Se()),S_}M++,(se=i.monitorRunDependencies)==null||se.call(i,M);var _e={a:OSe};return i.instantiateWasm?new Promise(Se=>{i.instantiateWasm(_e,(He,gt)=>{Se(oe(He))})}):(k??(k=pe("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C0EAEKEDRQRAQZiDASEBIARBmIMBQRgQiwFFDQJBsIMBIQEgBEGwgwFBGBCLAUUNAkEAIQBBvO4BLQAARQRAA0AgAEECdCAAQcYfEKIDNgKM7gEgAEEBaiIAQQZHDQALQbzuAUEBOgAAQaTuAUGM7gEoAgA2AgALQYzuASEBIAJBCGoiAEGM7gFBGBCLAUUNAkGk7gEhASAAQaTuAUEYEIsBRQ0CQRgQNCIBRQ0BCyABIAIpAgg3AgAgASACKQIYNwIQIAEgAikCEDcCCAwBC0EAIQELIAJBIGokAEGc8QFBAToAAEGY8QEgATYCACABC80KAgV/CX4jAEHgAGsiBSQAIARC////////P4MhCiACIASFQoCAgICAgICAgH+DIQsgAkL///////8/gyIMQiCIIQ8gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyINQoCAgICAgMD//wBUIA1CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCwwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCELIAMhAQwCCyABIA1CgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACELQgAhAQwDCyALQoCAgICAgMD//wCEIQtCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASANhEIAIQFQBEBCgICAgICA4P//ACELDAMLIAtCgICAgICAwP//AIQhCwwCCyABIA2EUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyANQv///////z9YBEAgBUHQAGogASAMIAEgDCAMUCIGG3lCwABCACAGG3ynIgZBD2sQREEQIAZrIQYgBSkDWCIMQiCIIQ8gBSkDUCEBCyACQv///////z9WDQAgBUFAayADIAogAyAKIApQIggbeULAAEIAIAgbfKciCEEPaxBEIAYgCGtBEGohBiAFKQNIIQogBSkDQCEDCyAHIAlqIAZqQf//AGshBgJAIApCD4YiDkIgiEKAgICACIQiAiABQiCIIgR+IhAgA0IPhiIRQiCIIgogD0KAgASEIg1+fCIPIBBUrSAPIANCMYggDoRC/////w+DIgMgDEL/////D4MiDH58Ig4gD1StfCACIA1+fCAOIA4gEUKAgP7/D4MiDyAMfiIRIAQgCn58IhAgEVStIBAgECADIAFC/////w+DIgF+fCIQVq18fCIOVq18IAMgDX4iEiACIAx+fCIRIBJUrUIghiARQiCIhHwgDiAOIBFCIIZ8Ig5WrXwgDiANIA9+Ig0gCiAMfnwiDCABIAJ+fCICIAMgBH58IgNCIIggAiADVq0gDCANVK0gAiAMVK18fEIghoR8IgIgDlStfCACIBAgBCAPfiIMIAEgCn58IgRCIIggBCAMVK1CIIaEfCIKIBBUrSAKIANCIIZ8IgMgClStfHwiCiACVK18IAogAyAEQiCGIgIgASAPfnwiASACVK18IgIgA1StfCIEIApUrXwiA0KAgICAgIDAAINQRQRAIAZBAWohBgwBCyABQj+IIANCAYYgBEI/iIQhAyAEQgGGIAJCP4iEIQQgAUIBhiEBIAJCAYaEIQILIAZB//8BTgRAIAtCgICAgICAwP//AIQhC0IAIQEMAQsCfiAGQQBMBEBBASAGayIHQf8ATQRAIAVBMGogASACIAZB/wBqIgYQRCAFQSBqIAQgAyAGEEQgBUEQaiABIAIgBxCKASAFIAQgAyAHEIoBIAUpAzAgBSkDOIRCAFKtIAUpAyAgBSkDEISEIQEgBSkDKCAFKQMYhCECIAUpAwAhBCAFKQMIDAILQgAhAQwCCyADQv///////z+DIAatQjCGhAsgC4QhCyABUCACQgBZIAJCgICAgICAgICAf1EbRQRAIAsgBEIBfCIBUK18IQsMAQsgASACQoCAgICAgICAgH+FhFBFBEAgBCEBDAELIAsgBCAEQgGDfCIBIARUrXwhCwsgACABNwMAIAAgCzcDCCAFQeAAaiQACwYAIAAQLQt8AQN/IwBBEGsiASQAIAEgADYCDCMAQRBrIgIkACAAKAIAQX9HBEAgAkEIaiACQQxqIAFBDGoQVRBVIQMDQCAAKAIAQQFGDQALIAAoAgBFBEAgAEEBNgIAIAMQ0gIgAEF/NgIACwsgAkEQaiQAIAAoAgQgAUEQaiQAQQFrCyAAIAAgAUEBazYCBCAAQeDVATYCACAAQZCtATYCACAAC/cFAQl/IwBBEGsiCSQAIAEQ1wIgCUEMaiABEFUhCCAAQQhqIgMQayACTQRAAkAgAkEBaiIAIAMQayIBSwRAIwBBIGsiCiQAAkAgACABayIHIAMoAgggAygCBGtBAnVNBEAgAyAHENkCDAELIApBDGohAQJ/IAMQayAHaiEFIwBBEGsiACQAIAAgBTYCDCAFELwCIgRNBEAgAxC5AiIFIARBAXZJBEAgACAFQQF0NgIIIABBCGogAEEMahCgASgCACEECyAAQRBqJAAgBAwBCxCMAQALIQQgAxBrIQUjAEEQayIAJAAgASADQQxqIgs2AhAgAUEANgIMIAQEfyAAQQhqIAsgBBC7AiAAKAIIIQYgACgCDAVBAAshBCABIAY2AgAgASAGIAVBAnRqIgU2AgggASAGIARBAnRqNgIMIAEgBTYCBCAAQRBqJAAjAEEQayIGJAAgASgCCCEEIAZBBGoiACABQQhqNgIIIAAgBDYCACAAIAQgB0ECdGo2AgQgACgCACEEA0AgACgCBCAERwRAIAEoAhAaIAQQugIgACAAKAIAQQRqIgQ2AgAMAQsLIAAoAgggACgCADYCACAGQRBqJAAgASgCBCADKAIAIgAgAygCBGtqIQQgAygCBCAAayIHBEAgBCAAIAf8CgAACyABIAQ2AgQgAyADKAIANgIEIAMgAUEEahDXASADQQRqIAFBCGoQ1wEgA0EIaiABQQxqENcBIAEgASgCBDYCACADEGsaIAEoAgQhAANAIAEoAggiBCAARwRAIAEgBEEEazYCCCABKAIQGgwBCwsgASgCACIABEAgASgCECAAIAEoAgwgASgCAGtBAnUQuAILCyAKQSBqJAAMAQsgACABSQRAIAMoAgAgAEECdGohACADEGsaIAMgABDYAgsLCyADIAIQggEoAgAEQCADIAIQggEoAgAQvwELIAgQrAEhACADIAIQggEgADYCACAIKAIAIQAgCEEANgIAIAAEQCAAEL8BCyAJQRBqJAALySgBC38jAEEQayIKJAACQAJAAkACQAJAAkACQAJAAkACQCAAQfQBTQRAQYzqASgCACIEQRAgAEELakH4A3EgAEELSRsiBkEDdiIAdiIBQQNxBEACQCABQX9zQQFxIABqIgJBA3QiAUG06gFqIgAgASgCvOoBIgEoAggiBUYEQEGM6gEgBEF+IAJ3cTYCAAwBCyAFIAA2AgwgACAFNgIICyABQQhqIQAgASACQQN0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KAIAKAIcEQQAC8EBAQN/IAAtAABBIHFFBEACQCAAKAIQIgMEfyADBSAAEN8BDQEgACgCEAsgACgCFCIEayACSQRAIAAgASACIAAoAiQRAwAaDAELAkACQCACRSAAKAJQQQBIcg0AIAIhAwNAIAEgA2oiBUEBay0AAEEKRwRAIANBAWsiAw0BDAILCyAAIAEgAyAAKAIkEQMAIANJDQIgAiADayECIAAoAhQhBAwBCyABIQULIAQgBSACEHEaIAAgACgCFCACajYCFAsLC6EBAQJ/AkAgABAfRSACIAFrQQVIcg0AIAEgAhDHASACQQRrIQQgABAjIgIgABAfaiEFAkADQAJAIAIsAAAhACABIARPDQAgAEEATCAAQf8ATnJFBEAgASgCACACLAAARw0DCyABQQRqIQEgAiAFIAJrQQFKaiECDAELCyAAQQBMIABB/wBOcg0BIAIsAAAgBCgCAEEBa0sNAQsgA0EENgIACwtQAQF+AkAgA0HAAHEEQCABIANBQGqthiECQgAhAQwBCyADRQ0AIAIgA60iBIYgAUHAACADa62IhCECIAEgBIYhAQsgACABNwMAIAAgAjcDCAtpAQF/IwBBgAJrIgUkACAEQYDABHEgAiADTHJFBEAgBSABIAIgA2siA0GAAiADQYACSSIBGxCYAiABRQRAA0AgACAFQYACEEIgA0GAAmsiA0H/AUsNAAsLIAAgBSADEEILIAVBgAJqJAALBABBAAsKACAALQALQQd2CwoAIABB0PIBEHoLCgAgAEHY8gEQegvPCQIEfwR+IwBB8ABrIgYkACAEQv///////////wCDIQkCQAJAIAFQIgUgAkL///////////8AgyIKQoCAgICAgMD//wB9QoCAgICAgMCAgH9UIApQG0UEQCADQgBSIAlCgICAgICAwP//AH0iC0KAgICAgIDAgIB/ViALQoCAgICAgMCAgH9RGw0BCyAFIApCgICAgICAwP//AFQgCkKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEEIAEhAwwCCyADUCAJQoCAgICAgMD//wBUIAlCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhBAwCCyABIApCgICAgICAwP//AIWEUARAQoCAgICAgOD//wAgAiABIAOFIAIgBIVCgICAgICAgICAf4WEUCIFGyEEQgAgASAFGyEDDAILIAMgCUKAgICAgIDA//8AhYRQDQEgASAKhFAEQCADIAmEQgBSDQIgASADgyEDIAIgBIMhBAwCCyADIAmEUEUNACABIQMgAiEEDAELIAMgASABIANUIAkgClYgCSAKURsiCBshCiAEIAIgCBsiDEL///////8/gyEJIAIgBCAIGyILQjCIp0H//wFxIQcgDEIwiKdB//8BcSIFRQRAIAZB4ABqIAogCSAKIAkgCVAiBRt5QsAAQgAgBRt8pyIFQQ9rEEQgBikDaCEJIAYpA2AhCkEQIAVrIQULIAEgAyAIGyEDIAtC////////P4MhASAHBH4gAQUgBkHQAGogAyABIAMgASABUCIHG3lCwABCACAHG3ynIgdBD2sQREEQIAdrIQcgBikDUCEDIAYpA1gLQgOGIANCPYiEQoCAgICAgIAEhCEBIAlCA4YgCkI9iIQgAiAEhSEEAn4gA0IDhiICIAUgB0YNABogBSAHayIHQf8ASwRAQgAhAUIBDAELIAZBQGsgAiABQYABIAdrEEQgBkEwaiACIAEgBxCKASAGKQM4IQEgBikDMCAGKQNAIAYpA0iEQgBSrYQLIQlCgICAgICAgASEIQsgCkIDhiEKAkAgBEIAUwRAQgAhA0IAIQQgCSAKhSABIAuFhFANAiAKIAl9IQIgCyABfSAJIApWrX0iBEL/////////A1YNASAGQSBqIAIgBCACIAQgBFAiBxt5QsAAQgAgBxt8p0EMayIHEEQgBSAHayEFIAYpAyghBCAGKQMgIQIMAQsgCSAKfCICIAlUrSABIAt8fCIEQoCAgICAgIAIg1ANACAJQgGDIARCP4YgAkIBiISEIQIgBUEBaiEFIARCAYghBAsgDEKAgICAgICAgIB/gyEDIAVB//8BTgRAIANCgICAgICAwP//AIQhBEIAIQMMAQtBACEHAkAgBUEASgRAIAUhBwwBCyAGQRBqIAIgBCAFQf8AahBEIAYgAiAEQQEgBWsQigEgBikDACAGKQMQIAYpAxiEQgBSrYQhAiAGKQMIIQQLIARCPYYgAkIDiIQhASAEQgOIQv///////z+DIAetQjCGhCADhCEEAkACQCACp0EHcSIFQQRHBEAgBCABIAEgBUEES618IgNWrXwhBAwBCyAEIAEgASABQgGDfCIDVq18IQQMAQsgBUUNAQsLIAAgAzcDACAAIAQ3AwggBkHwAGokAAsRACAAIAEgACgCACgCLBEEAAsIACAAQYABSQsRACACBEAgACABIAL8CgAACwsJACAAECMQ9wELhAECAn8BfiMAQRBrIgMkACAAAn4gAUUEQEIADAELIAMgASABQR91IgJzIAJrIgKtQgAgAmciAkHRAGoQRCADKQMIQoCAgICAgMAAhUGegAEgAmutQjCGfEKAgICAgICAgIB/QgAgAUEASBuEIQQgAykDAAs3AwAgACAENwMIIANBEGokAAsNACAAIAFB/wBxOgALC6oMAQh/An9BACABRQ0AGiAAQX9zIQMgAkEXTwRAAkAgAUEDcUUNACABLQAAIANzQf8BcUECdCgC0DMgA0EIdnMhAyACQQFrIgBFIAFBAWoiBEEDcUVyRQRAIAEtAAEgA3NB/wFxQQJ0KALQMyADQQh2cyEDIAJBAmsiAEUgAUECaiIEQQNxRXJFBEAgAS0AAiADc0H/AXFBAnQoAtAzIANBCHZzIQMgAkEDayIARSABQQNqIgRBA3FFckUEQCABLQADIANzQf8BcUECdCgC0DMgA0EIdnMhAyABQQRqIQEgAkEEayECDAMLIAAhAiAEIQEMAgsgACECIAQhAQwBCyAAIQIgBCEBCyACQRRuIghBbGwhCgJAIAhBAWsiCUUEQEEAIQQMAQsgASEAQQAhBANAIAAoAhAgB3MiB0EWdkH8B3EoAtBTIAdBDnZB/AdxKALQSyAHQQZ2QfwHcSgC0EMgB0H/AXFBAnQoAtA7c3NzIQcgACgCDCAGcyIGQRZ2QfwHcSgC0FMgBkEOdkH8B3EoAtBLIAZBBnZB/AdxKALQQyAGQf8BcUECdCgC0Dtzc3MhBiAAKAIIIARzIgRBFnZB/AdxKALQUyAEQQ52QfwHcSgC0EsgBEEGdkH8B3EoAtBDIARB/wFxQQJ0KALQO3NzcyEEIAAoAgQgBXMiBUEWdkH8B3EoAtBTIAVBDnZB/AdxKALQSyAFQQZ2QfwHcSgC0EMgBUH/AXFBAnQoAtA7c3NzIQUgACgCACADcyIDQRZ2QfwHcSgC0FMgA0EOdkH8B3EoAtBLIANBBnZB/AdxKALQQyADQf8BcUECdCgC0Dtzc3MhAyAAQRRqIQAgCUEBayIJDQALIAEgCEEUbGpBFGshAQsgAiAKaiECIAEoAhAgASgCDCABKAIIIAEoAgQgASgCACADcyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQf8BcUECdCgC0DMgBXNzIABBCHZzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBB/wFxQQJ0KALQMyAEc3MgAEEIdnMiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQQh2IABB/wFxQQJ0KALQM3MiAEH/AXFBAnQoAtAzIAZzcyAAQQh2cyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQf8BcUECdCgC0DMgB3NzIABBCHZzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyEDIAFBFGohAQsgAkEHSwRAA0AgAS0AACADc0H/AXFBAnQoAtAzIANBCHZzIgBBCHYgAS0AASAAc0H/AXFBAnQoAtAzcyIAQQh2IAEtAAIgAHNB/wFxQQJ0KALQM3MiAEEIdiABLQADIABzQf8BcUECdCgC0DNzIgBBCHYgAS0ABCAAc0H/AXFBAnQoAtAzcyIAQQh2IAEtAAUgAHNB/wFxQQJ0KALQM3MiAEEIdiABLQAGIABzQf8BcUECdCgC0DNzIgBBCHYgAS0AByAAc0H/AXFBAnQoAtAzcyEDIAFBCGohASACQQhrIgJBB0sNAAsLAkAgAkUNACABLQAAIANzQf8BcUECdCgC0DMgA0EIdnMhAyACQQFGDQAgAS0AASADc0H/AXFBAnQoAtAzIANBCHZzIQMgAkECRg0AIAEtAAIgA3NB/wFxQQJ0KALQMyADQQh2cyEDIAJBA0YNACABLQADIANzQf8BcUECdCgC0DMgA0EIdnMhAyACQQRGDQAgAS0ABCADc0H/AXFBAnQoAtAzIANBCHZzIQMgAkEFRg0AIAEtAAUgA3NB/wFxQQJ0KALQMyADQQh2cyEDIAJBBkYNACABLQAGIANzQf8BcUECdCgC0DMgA0EIdnMhAwsgA0F/cwsL5QMBBX8jAEEQayIDJAAgAyAAKAIAIgRBCGsoAgAiAjYCDCADIAAgAmo2AgQgAyAEQQRrKAIANgIIIAMoAggiBCABQQAQOyECIAMoAgQhBQJAIAIEQCADKAIMIQAjAEFAaiIBJAAgAUFAayQAQQAgBSAAGyECDAELIwBBQGoiAiQAIAAgBU4EQCACQgA3AhwgAkIANwIkIAJCADcCLCACQgA3AhQgAkEANgIQIAIgATYCDCACIAQ2AgQgAkEANgI8IAJCgYCAgICAgIABNwI0IAIgADYCCCAEIAJBBGogBSAFQQFBACAEKAIAKAIUEQoAIABBACACKAIcGyEGCyACQUBrJAAgBiICDQAjAEFAaiICJAAgAkEANgIQIAJBlNYBNgIMIAIgADYCCCACIAE2AgRBACEAIAJBFGpBAEEn/AsAIAJBADYCPCACQQE6ADsgBCACQQRqIAVBAUEAIAQoAgAoAhgRCwACQAJAAkAgAigCKA4CAAECCyACKAIYQQAgAigCJEEBRhtBACACKAIgQQFGG0EAIAIoAixBAUYbIQAMAQsgAigCHEEBRwRAIAIoAiwNASACKAIgQQFHDQEgAigCJEEBRw0BCyACKAIUIQALIAJBQGskACAAIQILIANBEGokACACCzwBAn9BASAAIABBAU0bIQEDQAJAIAEQNCIADQBB5P4BKAIAIgJFDQAgAhEMAAwBCwsgAEUEQBDrAQsgAAsUAQF/QQQQUyIBIAAoAgA2AgAgAQsLACAAIAE2AgAgAAsMACAAIAEoAgA2AgALBwAgABAkGgsRACAAIAEgASgCACgCFBEBAAsPACAAIAAoAgAoAhARAAALBwAgABAfRQsJAEGFEBCuAgALEAAgACABQYCAgIB4cjYCCAsMACAAIAEtAAA6AAALCwAgAC0AC0H/AHELEwAgACABIAIgACgCACgCDBEDAAsiAQF/IAIQTAR/IAAoAgggAkECdGooAgAgAXFBAEcFQQALC+wBAQN/IABFBEBB0N4BKAIABEBB0N4BKAIAEGEhAQtBgOABKAIABEBBgOABKAIAEGEgAXIhAQtBwOABKAIAIgAEQANAIAAoAkwaIAAoAhQgACgCHEcEQCAAEGEgAXIhAQsgACgCOCIADQALCyABDwsgACgCTEEASCECAkACQCAAKAIUIAAoAhxGDQAgAEEAQQAgACgCJBEDABogACgCFA0AQX8hAQwBCyAAKAIEIgEgACgCCCIDRwRAIAAgASADa6xBASAAKAIoERYAGgtBACEBIABBADYCHCAAQgA3AxAgAEIANwIEIAINAAsgAQsSACAAKAIAIgAEQCAAEJwDGgsLEQAgACABKAIAEJwDNgIAIAALQQEBfyAAIAE3A3AgACAAKAIsIAAoAgQiAmusNwN4IAAgAVAgASAAKAIIIgAgAmusWXIEfyAABSACIAGnags2AmgLHgACQCACRQ0AIAJBAnQiAkUNACAAIAEgAvwKAAALCxYAIAAgASgCADYCACAAIAIoAgA2AgQLtQEBAn8jAEEQayIFJAAgBSABNgIMQQAhAQJAIAICf0EGIAAgBUEMahArDQAaQQQgA0HAACAAEDciBhBfRQ0AGiADIAYQlAEhAQNAAkAgABA+GiABQTBrIQEgACAFQQxqECsgBEECSHINACADQcAAIAAQNyIGEF9FDQMgBEEBayEEIAMgBhCUASABQQpsaiEBDAELCyAAIAVBDGoQK0UNAUECCyACKAIAcjYCAAsgBUEQaiQAIAELtQEBAn8jAEEQayIFJAAgBSABNgIMQQAhAQJAIAICf0EGIAAgBUEMahAsDQAaQQQgA0HAACAAEDgiBhBgRQ0AGiADIAYQlQEhAQNAAkAgABA/GiABQTBrIQEgACAFQQxqECwgBEECSHINACADQcAAIAAQOCIGEGBFDQMgBEEBayEEIAMgBhCVASABQQpsaiEBDAELCyAAIAVBDGoQLEUNAUECCyACKAIAcjYCAAsgBUEQaiQAIAELYwAgAigCBEGwAXEiAkEgRgRAIAEPCwJAIAJBEEcNAAJAAkAgAC0AACICQStrDgMAAQABCyAAQQFqDwsgAkEwRyABIABrQQJIcg0AIAAtAAFBIHJB+ABHDQAgAEECaiEACyAACy4AAkAgACgCBEHKAHEiAARAIABBwABGBEBBCA8LIABBCEcNAUEQDwtBAA8LQQoLEAAgACgCBCAAKAIAa0ECdQvOAQIEfgJ/IwBBEGsiBiQAIAG9IgVC/////////weDIQIgAAJ+IAVCNIhC/w+DIgNQRQRAIANC/w9SBEAgAkIEiCEEIANCgPgAfCEDIAJCPIYMAgsgAkIEiCEEQv//ASEDIAJCPIYMAQsgAlAEQEIAIQNCAAwBCyAGIAJCACACeaciB0ExahBEIAYpAwhCgICAgICAwACFIQRBjPgAIAdrrSEDIAYpAwALNwMAIAAgBUKAgICAgICAgIB/gyADQjCGhCAEhDcDCCAGQRBqJAALsgMBA38jAEEQayIIJAAgCCACNgIIIAggATYCDCAIQQRqIgEgAxAnIAEQSCEJIAEQJSAEQQA2AgBBACEBAkADQCAGIAdGIAFyDQECQCAIQQxqIAhBCGoQKw0AAkAgCSAGKAIAEJQBQSVGBEAgBkEEaiAHRg0CQQAhAgJ/AkAgCSAGKAIEEJQBIgFBxQBGDQBBBCEKIAFB/wFxQTBGDQAgAQwBCyAGQQhqIAdGDQNBCCEKIAEhAiAJIAYoAggQlAELIQEgCCAAIAgoAgwgCCgCCCADIAQgBSABIAIgACgCACgCJBENADYCDCAGIApqQQRqIQYMAQsgCUEBIAYoAgAQXwRAA0AgByAGQQRqIgZHBEAgCUEBIAYoAgAQXw0BCwsDQCAIQQxqIgEgCEEIahArDQIgCUEBIAEQNxBfRQ0CIAEQPhoMAAsACyAJIAhBDGoiARA3EEEgCSAGKAIAEEFGBEAgBkEEaiEGIAEQPhoMAQsgBEEENgIACyAEKAIAIQEMAQsLIARBBDYCAAsgCEEMaiAIQQhqECsEQCAEIAQoAgBBAnI2AgALIAgoAgwgCEEQaiQAC7QDAQN/IwBBEGsiCCQAIAggAjYCCCAIIAE2AgwgCEEEaiIBIAMQJyABEEkhCSABECUgBEEANgIAQQAhAQJAA0AgBiAHRiABcg0BAkAgCEEMaiAIQQhqECwNAAJAIAkgBiwAABCVAUElRgRAIAZBAWogB0YNAkEAIQICfwJAIAkgBiwAARCVASIBQcUARg0AQQEhCiABQf8BcUEwRg0AIAEMAQsgBkECaiAHRg0DQQIhCiABIQIgCSAGLAACEJUBCyEBIAggACAIKAIMIAgoAgggAyAEIAUgASACIAAoAgAoAiQRDQA2AgwgBiAKakEBaiEGDAELIAlBASAGLAAAEGAEQANAIAcgBkEBaiIGRwRAIAlBASAGLAAAEGANAQsLA0AgCEEMaiIBIAhBCGoQLA0CIAlBASABEDgQYEUNAiABED8aDAALAAsgCSAIQQxqIgEQOBDOASAJIAYsAAAQzgFGBEAgBkEBaiEGIAEQPxoMAQsgBEEENgIACyAEKAIAIQEMAQsLIARBBDYCAAsgCEEMaiAIQQhqECwEQCAEIAQoAgBBAnI2AgALIAgoAgwgCEEQaiQACxYAIAAgASACIAMgACgCACgCMBEJABoLPAAgACwAC0EASARAIAAoAggaIAAoAgAQLQsgACABKQIANwIAIAAgASgCCDYCCCABQQA6AAsgAUEAOgAACxMAIAIEQCAAIAEgAvwKAAALIAALKwEBfyMAQRBrIgIkACACIAE2AgxBwN0BIAAgAUEAQQAQ0QMaIAJBEGokAAsjAQF/IwBBEGsiASQAIAEgADYCDCABQQxqEOwBIAFBEGokAAsMACAAQYKGgCA2AAALEQAgABAjIAAQH0ECdGoQ9wELDQAgACgCACABKAIARgsOACAAECMgABAfahD3AQsPACAAIAAoAgAoAgwRAAALFgAgACABIAIgAyAAKAIAKAIgEQkAGgtEAQF/IAAoAgAhAiABEDEhACACQQhqIgEQayAASwR/IAEgABCCASgCAEEARwVBAAtFBEAQPQALIAJBCGogABCCASgCAAsRACAAIAEgASgCACgCHBEBAAsRACAAIAEgASgCACgCGBEBAAsQACAAQSBGIABBCWtBBUlyCw4AIAAoAghB/////wdxC9cBAQF/AkBBjN4BKAIAIgBBAE4EQCAARQ0BQZThASgCACAAQf////8DcUcNAQsCQEGQ3gEoAgBBCkYNAEHU3QEoAgAiAEHQ3QEoAgBGDQBB1N0BIABBAWo2AgAgAEEKOgAADwtBwN0BEN4BDwtBjN4BQYzeASgCACIAQf////8DIAAbNgIAAkACQEGQ3gEoAgBBCkYNAEHU3QEoAgAiAEHQ3QEoAgBGDQBB1N0BIABBAWo2AgAgAEEKOgAADAELQcDdARDeAQtBjN4BKAIAGkGM3gFBADYCAAvDAQEEfyMAQRBrIgckAAJAIABFDQAgBCgCDCEJIAIgAWsiBkEASgRAIAAgASAGIAAoAgAoAjARAwAgBkcNAQsgAyABayIBIAlIBEAgB0EEaiIGIAkgAWsiASAFELACIAAgBygCBCAGIAcsAA9BAEgbIAEgACgCACgCMBEDACEFIAYQIBogASAFRw0BCyADIAJrIgFBAEoEQCAAIAIgASAAKAIAKAIwEQMAIAFHDQELIARBADYCDCAAIQgLIAdBEGokACAIC14BA38gAEEANgIIIABCADcCACABKAIAIQMgASgCBCIBIANrIgRBAnUiAgRAIAAgAhCuAyAAKAIEIQIgBEUgASADRnJFBEAgAiADIAT8CgAACyAAIAIgBGo2AgQLIAALDQAgACgCACABQQJ0agsXACAAEEcEQCAAIAE2AgQPCyAAIAEQUAthAQF/IwBBEGsiAiQAIAIgADYCDAJAIAAgAUYNAANAIAIgAUEBayIBNgIIIAAgAU8NASACKAIMIAIoAggQ8wIgAiACKAIMQQFqIgA2AgwgAigCCCEBDAALAAsgAkEQaiQAC6wBAQR/IwBBEGsiByQAAkAgAEUNACAEKAIMIQYgAiABa0ECdSIIQQBKBEAgACABIAgQjQIgCEcNAQsgAyABa0ECdSIBIAZIBEAgACAHQQRqIAYgAWsiASAFEP0CIgUQIyABEI0CIQYgBRA5GiABIAZHDQELIAMgAmtBAnUiAUEASgRAIAAgAiABEI0CIAFHDQELIAQoAgwaIARBADYCDCAAIQkLIAdBEGokACAJCycBAX8jAEEQayIDJAAgAyACNgIMIABB5AAgASACENEBIANBEGokAAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEAgACACVCABIANTIAEgA1EbBEBBfw8LIAAgAoUgASADhYRCAFIPCyAAIAJWIAEgA1UgASADURsEQEF/DwsgACAChSABIAOFhEIAUiEECyAEC+wBAQR/IwBBEGsiBCQAIABBADYCBCMAQRBrIgUkACAEQQA6AA8gACAAKAIAQQxrKAIAahDZASEGIAAgACgCAEEMaygCAGohAwJAIAYEQCADKAJIBEAgACAAKAIAQQxrKAIAaigCSBDFAwsgBCAAIAAoAgBBDGsoAgBqENkBOgAPDAELIANBBBDVAQsgBUEQaiQAQQQhAyAELQAPBEAgACAAIAAoAgBBDGsoAgBqKAIYIgMgASACIAMoAgAoAiARAwAiATYCBEEGQQAgASACRxshAwsgACAAKAIAQQxrKAIAaiADENUBIARB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AxsLPAAgAEEANgIIIABCADcCACAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCABQQA2AgggAUIANwIACywBAX8gAEEANgIIIABCADcCACAAIAEoAgAiAiABKAIEIgEgASACaxDAAyAACwgAIABB/wFxC/wBAQN/IAAoAgQgACgCACIDa0ECdSICIAFJBEAjAEEgayIDJAACQCABIAJrIgIgACgCCCAAKAIEIgFrQQJ1TQRAIAAoAgQiASACQQJ0aiECA0AgASACRgRAIAAgAjYCBAUgAUEANgIAIAFBBGohAQwBCwsMAQsgA0EMaiAAIAEgACgCAGtBAnUgAmoQtgEgACgCBCAAKAIAa0ECdSAAEIcCIgQoAggiASACQQJ0aiECA0AgASACRwRAIAFBADYCACABQQRqIQEMAQsLIAQgAjYCCCAAIAQQhQIgBBCBAgsgA0EgaiQADwsgASACSQRAIAAgAyABQQJ0ajYCBAsLUgECf0HU3gEoAgAiASAAQQdqQXhxIgJqIQACQCACQQAgACABTRtFBEAgAD8AQRB0TQ0BIAAQGA0BC0GI6gFBMDYCAEF/DwtB1N4BIAA2AgAgAQt/AgF+A38CQCAAQoCAgIAQVARAIAAhAgwBCwNAIAFBAWsiASAAIABCCoAiAkIKfn2nQTByOgAAIABC/////58BViACIQANAAsLIAJQRQRAIAKnIQMDQCABQQFrIgEgAyADQQpuIgRBCmxrQTByOgAAIANBCUsgBCEDDQALCyABC78BAQN/IAAoAgQgACgCACIDayICIAFJBEAjAEEgayIDJAACQCABIAJrIgIgACgCCCAAKAIEIgFrTQRAIAAgAhCYAwwBCyACIANBDGogACABIAJqIAAoAgBrELQBIAAoAgQgACgCAGsgABDGASIEKAIIIgFqIQIDQCABIAJHBEAgAUEAOgAAIAFBAWohAQwBCwsgBCACNgIIIAAgBBDvASAEELoBCyADQSBqJAAPCyABIAJJBEAgACABIANqNgIECwt9AQN/AkACQCAAIgFBA3FFDQAgAS0AAEUEQEEADwsDQCABQQFqIgFBA3FFDQEgAS0AAA0ACwwBCwNAIAEiAkEEaiEBQYCChAggAigCACIDayADckGAgYKEeHFBgIGChHhGDQALA0AgAiIBQQFqIQIgAS0AAA0ACwsgASAA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BEBBCiEBIAAQXgwBCyAAEH5BAWshASAAKAIECyIDIAFGBEAgACABQQEgASABEPQBIAAQIxoMAQsgABAjGiAEDQAgACIBIANBAWoQUAwBCyAAKAIAIQEgACADQQFqNgIECyABIANqIgAgAkEPahBdIAJBADoADiAAQQFqIAJBDmoQXSACQRBqJAALoQIBA38jAEEgayIIJABB9////wciCSABQX9zaiACTwRAIAAQIyEKIAFB8////wNJBEAgCCABQQF0NgIcIAggASACajYCECAIQRBqIAhBHGoQoAEoAgAQnwFBAWohCQsgCEEcaiAIQRhqIAAQVSgCABC8ASAIQRBqIAkQngEgCCgCECECIAgoAhQaIAQEQCACIAogBBBNCyAGBEAgAiAEaiAHIAYQTQsgAyAEIAVqIglrIQcgAyAJRwRAIAIgBGogBmogBCAKaiAFaiAHEE0LIAFBCkcEQCAKEIsCCyAAIAI2AgAgACAIKAIUEFwgACAEIAZqIAdqIgA2AgQgCEEAOgAPIAAgAmogCEEPahBdIAhBHGoQuwEgCEEgaiQADwsQWwALCQAgAEEBEKgCCwoAIAAoAgAQHxoLCQAgACABEFUaCwcAIABBAkkLBABBBAsoAQF/IAAgACgCBEEBayIBNgIEIAFBf0YEQCAAIAAoAgAoAggRAgALC5UBAQN/IwBBEGsiBCQAIAQgATYCDCAEIAM2AgggBEEEaiAEQQxqEGMgBCgCCCEDIwBBEGsiASQAIAEgAzYCDCABIAM2AghBfyEFAkBBAEEAIAIgAxDRASIDQQBIDQAgACADQQFqIgMQNCIANgIAIABFDQAgACADIAIgASgCDBDRASEFCyABQRBqJAAQYiAEQRBqJAAgBQsPACAAIAAoAgAoAiQRAAALEQAgACABIAEoAgAoAiARAQALDgAgACABKAIANgIAIAALCABB/////wcLBQBB/wALOwAgACADNgIQIAAgAQR/IAEQUwVBAAsiAzYCACAAIAIgA2oiAjYCCCAAIAEgA2o2AgwgACACNgIEIAALYQEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBBGsiATYCCCAAIAFPDQEgAigCDCACKAIIENcBIAIgAigCDEEEaiIANgIMIAIoAgghAQwACwALIAJBEGokAAs5AgF/AX4jAEEQayIEJAAgAykDACEFIAQgAykDCDcDCCAEIAU3AwAgACABIAIgBBDAASAEQRBqJAAL0AEBAn8gAkGAEHEEQCAAQSs6AAAgAEEBaiEACyACQYAIcQRAIABBIzoAACAAQQFqIQALIAJBhAJxIgNBhAJHBEAgAEGu1AA7AAAgAEECaiEACyACQYCAAXEhAgNAIAEtAAAiBARAIAAgBDoAACAAQQFqIQAgAUEBaiEBDAELCyAAAn8CQCADQYACRwRAIANBBEcNAUHGAEHmACACGwwCC0HFAEHlACACGwwBC0HBAEHhACACGyADQYQCRg0AGkHHAEHnACACGws6AAAgA0GEAkcLKwEBfyMAQRBrIgUkACAFIAQoAgA2AgAgACABIAIgAyAFEJYBIAVBEGokAAuqAQEBfwJAIANBgBBxRSACRXINACADQcoAcSIEQQhGIARBwABGcg0AIABBKzoAACAAQQFqIQALIANBgARxBEAgAEEjOgAAIABBAWohAAsDQCABLQAAIgQEQCAAIAQ6AAAgAEEBaiEAIAFBAWohAQwBCwsgAAJ/Qe8AIANBygBxIgFBwABGDQAaQdgAQfgAIANBgIABcRsgAUEIRg0AGkHkAEH1ACACGws6AAALDAAgABAjIAFBAnRqC5IEAQt/IwBBgAFrIgokACAKIAE2AnwgAiADELUCIQggCkHjADYCECAKQQhqQQAgCkEQaiIJEDYhDwJAAkACQCAIQeUATwRAIAgQNCIJRQ0BIA8gCRA8CyAJIQcgAiEBA0AgASADRgRAA0AgACAKQfwAaiIBECtBASAIGwRAIAAgARArBEAgBSAFKAIAQQJyNgIACwNAIAIgA0YNBiAJLQAAQQJGDQcgCUEBaiEJIAJBDGohAgwACwALIAAQNyEOIAZFBEAgBCAOEEEhDgsgDUEBaiEMQQAhECAJIQcgAiEBA0AgASADRgRAIAwhDSAQRQ0CIAAQPhogCSEHIAIhASAIIAtqQQJJDQIDQCABIANGBEAMBAUCQCAHLQAAQQJHDQAgARAfIA1GDQAgB0EAOgAAIAtBAWshCwsgB0EBaiEHIAFBDGohAQwBCwALAAUCQCAHLQAAQQFHDQAgASANEMwBKAIAIRECQCAGBH8gEQUgBCAREEELIA5GBEBBASEQIAEQHyAMRw0CIAdBAjoAACALQQFqIQsMAQsgB0EAOgAACyAIQQFrIQgLIAdBAWohByABQQxqIQEMAQsACwALAAUgB0ECQQEgARBaIgwbOgAAIAdBAWohByABQQxqIQEgCyAMaiELIAggDGshCAwBCwALAAsQPQALIAUgBSgCAEEEcjYCAAsgDxA1IApBgAFqJAAgAgsRACAAIAEgACgCACgCDBEEAAuTBAELfyMAQYABayIKJAAgCiABNgJ8IAIgAxC1AiEIIApB4wA2AhAgCkEIakEAIApBEGoiCRA2IQ8CQAJAAkAgCEHlAE8EQCAIEDQiCUUNASAPIAkQPAsgCSEHIAIhAQNAIAEgA0YEQANAIAAgCkH8AGoiARAsQQEgCBsEQCAAIAEQLARAIAUgBSgCAEECcjYCAAsDQCACIANGDQYgCS0AAEECRg0HIAlBAWohCSACQQxqIQIMAAsACyAAEDghDiAGRQRAIAQgDhDOASEOCyANQQFqIQxBACEQIAkhByACIQEDQCABIANGBEAgDCENIBBFDQIgABA/GiAJIQcgAiEBIAggC2pBAkkNAgNAIAEgA0YEQAwEBQJAIActAABBAkcNACABEB8gDUYNACAHQQA6AAAgC0EBayELCyAHQQFqIQcgAUEMaiEBDAELAAsABQJAIActAABBAUcNACABIA0QIiwAACERAkAgBgR/IBEFIAQgERDOAQsgDkYEQEEBIRAgARAfIAxHDQIgB0ECOgAAIAtBAWohCwwBCyAHQQA6AAALIAhBAWshCAsgB0EBaiEHIAFBDGohAQwBCwALAAsABSAHQQJBASABEFoiDBs6AAAgB0EBaiEHIAFBDGohASALIAxqIQsgCCAMayEIDAELAAsACxA9AAsgBSAFKAIAQQRyNgIACyAPEDUgCkGAAWokACACC0oBAn8CQCAALQAAIgJFIAIgAS0AACIDR3INAANAIAEtAAEhAyAALQABIgJFDQEgAUEBaiEBIABBAWohACACIANGDQALCyACIANrC4QBAQJ/IwBBoAFrIgQkACAEIAAgBEGeAWogARsiADYClAEgBCABQQFrIgVBACABIAVPGzYCmAEgBEEAQZAB/AsAIARBfzYCTCAEQeIANgIkIARBfzYCUCAEIARBnwFqNgIsIAQgBEGUAWo2AlQgAEEAOgAAIAQgAiADEM0DIARBoAFqJAALuwIBBH8gA0H87QEgAxsiBSgCACEDAkAC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IBAtIAAoAiQQLSAAKAIwEC0gACgCPBAtCyAACwcAIAEgAGsLDABBARDWARogABAtCwkAIAAQsQEQLQsTACAAIAEgAiAAKAIAKAIwEQMACwkAIAAQ2AEQLQsMACAAQQRqENoBIAALDAAgAEEIahDaASAACygBAn8jAEEQayICJAAgASgCACAAKAIASCEDIAJBEGokACABIAAgAxsLEAAgACABNwMIIABCADcDAAsCAAsUACAAQZj1ADYCACAAQQRqECUgAAvyAwICfgV/IwBBIGsiBSQAIAFC////////P4MhAgJ+IAFCMIhC//8BgyIDpyIEQYH4AGtB/Q9NBEAgAkIEhiAAQjyIhCECIARBgPgAa60hAwJAIABC//////////8PgyIAQoGAgICAgICACFoEQCACQgF8IQIMAQsgAEKAgICAgICAgAhSDQAgAkIBgyACfCECC0IAIAIgAkL/////////B1YiBBshACAErSADfAwBCyAAIAKEUCADQv//AVJyRQRAIAJCBIYgAEI8iIRCgICAgICAgASEIQBC/w8MAQsgBEH+hwFLBEBCACEAQv8PDAELQYD4AEGB+AAgA1AiBxsiCCAEayIGQfAASgRAQgAhAEIADAELIAVBEGogACACIAJCgICAgICAwACEIAcbIgJBgAEgBmsQRCAFIAAgAiAGEIoBIAUpAwhCBIYgBSkDACICQjyIhCEAAkAgBCAIRyAFKQMQIAUpAxiEQgBSca0gAkL//////////w+DhCICQoGAgICAgICACFoEQCAAQgF8IQAMAQsgAkKAgICAgICAgAhSDQAgAEIBgyAAfCEACyAAQoCAgICAgIAIhSAAIABC/////////wdWIgQbIQAgBK0LIQIgBUEgaiQAIAFCgICAgICAgICAf4MgAkI0hoQgAIS/C4kCAAJAIAAEfyABQf8ATQ0BAkBB3OEBKAIAKAIARQRAIAFBgH9xQYC/A0YNAwwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMPCyABQYCABGtB//8/TQRAIAAgAUE/cUGAAXI6AAMgACABQRJ2QfABcjoAACAA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AXI2AgQgCSAGIAkoAgBBAXFyQQJyNgIAIAEgBmoiAiACKAIEQQFyNgIEIAEgBhDbAQsCQCAAKAIEIgJBA3FFDQAgAkF4cSIBIAVBEGpNDQAgACAFIAJBAXFyQQJyNgIEIAAgBWoiBCABIAVrIgJBA3I2AgQgACABaiIBIAEoAgRBAXI2AgQgBCACENsBCyAAQQhqCwsiAEUNARogCCAANgIMQQAhAQsgAQshAEEAIAgoAgwgABshAQsgCEEQaiQAIAENAEHk/gEoAgAiAEUNACAAEQwADAELCyABRQRAEOsBCyABCwoAIAEgAGtBDG0LCQAgABAuNgIACyMBAn8gACEBA0AgASICQQRqIQEgAigCAA0ACyACIABrQQJ1Cy8BAX8jAEEQayIDJAACQCAAIAFGBEAgAEEAOgB4DAELIAEgAhCpAQsgA0EQaiQACxAAIAAoAgggACgCAGtBAnULCQAgAEEANgIAC0kBAX8jAEEQayIDJAACQAJAIAJBHksNACABLQB4QQFxDQAgAUEBOgB4DAELIAIQwQIhAQsgA0EQaiQAIAAgAjYCBCAAIAE2AgALOgECfyMAQRBrIgAkACAAQf////8DNgIMIABB/////wc2AgggAEEMaiAAQQhqELUDKAIAIABBEGokAAs0AQF/IwBBEGsiAyQAIAMgARBzNgIMIAMgAhBzNgIIIAAgA0EMaiADQQhqEGYgA0EQaiQAC04BAX8jAEEQayIDJAAgAyABNgIIIAMgADYCDCADIAI2AgRBACEBIANBBGoiACADQQxqENMBRQRAIAAgA0EIahDTASEBCyADQRBqJAAgAQswAQF/IwBBEGsiAyQAIAMgATYCDCADIAI2AgggACADQQxqIANBCGoQZiADQRBqJAALMwEBfyMAQRBrIgMkACAAEB8aIAAgAhCDASADQQA6AA8gASACaiADQQ9qEF0gA0EQaiQACzEAIABB/////wNLBEAQqgIACwJ/IABBAnQhAEEEENYBBEAgAEEEELQCDAELIAAQUwsLCQAgABDtARAtCxUAIABB8KoBNgIAIABBEGoQIBogAAsVACAAQciqATYCACAAQQxqECAaIAALgAMBBH8gAiEAA0ACQCAEIAdNIAAgA09yDQAgACwAACIBQf8BcSEFAn9BASABQQBODQAaIAFBQkkNASABQV9NBEAgAyAA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ZEYNAEEAIQAgC0EANgIQIBEgDygCACALKAJkIAtBEGoQQyALKAIQBEAgBSAFKAIAQQRyNgIADAELQQEhAAsgEBAgGiANECAaIA4QIBogDBAgGiARECAaIA8QNQwDCyACIQELIANBAWohAwwACwALIAtBkARqJAAgAAsMACAAQQFBLRD9AhoLCwAgAEEBQS0QsAILHAEBfyAALQAAIQIgACABLQAAOgAAIAEgAjoAAAtlAQF/IwBBEGsiBiQAIAZBADoADyAGIAU6AA4gBiAEOgANIAZBJToADCAFBEAgBkENaiAGQQ5qEPMCCyACIAEgASACKAIAEIoCIAZBDGogAyAAKAIAEJ4DIAFqNgIAIAZBEGokAAtBACABIAIgAyAEQQQQZyEBIAMtAABBBHFFBEAgACABQdAPaiABQewOaiABIAFB5ABJGyABQcUASBtB7A5rNgIACwtAACACIAMgAEEIaiAAKAIIKAIEEQAAIgAgAEGgAmogBSAEQQAQzQEgAGsiAEGfAkwEQCABIABBDG1BDG82AgALC0AAIAIgAyAAQQhqIAAoAggoAgARAAAiACAAQagBaiAFIARBABDNASAAayIAQacBTARAIAEgAEEMbUEHbzYCAAsLQQAgASACIAMgBEEEEGghASADLQAAQQRxRQRAIAAgAUHQD2ogAUHsDmogASABQeQASRsgAUHFAEgbQewOazYCAAsLQAAgAiADIABBCGogACgCCCgCBBEAACIAIABBoAJqIAUgBEEAEM8BIABrIgBBnwJMBEAgASAAQQxtQQxvNgIACwtAACACIAMgAEEIaiAAKAIIKAIAEQAAIgAgAEGoAWogBSAEQQAQzwEgAGsiAEGnAUwEQCABIABBDG1BB282AgALCxgBAX9BDBBTIgBBADYCCCAAQgA3AgAgAAsEAEECC8oBAQR/IwBBEGsiAyQAAkAgAUH3////A00EQAJAIAEQvQEEQCAAIAEQUCAAIQQMAQsgA0EIaiABEJABQQFqEI8BIAMoAgwaIAAgAygCCCIENgIAIAAgAygCDBBcIAAgATYCBAsjAEEQayIFJAAgBSACNgIMIAQhBiABIQIDQCACBEAgBiAFKAIMNgIAIAJBAWshAiAGQQRqIQYMAQsLIAVBEGokACADQQA2AgQgBCABQQJ0aiADQQRqEFYgA0EQaiQADAELEFsA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hoRCAEKAgICAgIDAwz8QLyAFKQNIIQIgBSkDQCEEDAELIAlC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAuIEAIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQsgAkL///////8/gyEKIAIgBIVCgICAgICAgICAf4MhDCAEQjCIp0H//wFxIQcCQAJAIAJCMIinQf//AXEiCEH//wFrQYKAfk8EQCAHQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIg5CgICAgICAwP//AFQgDkKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEMDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQwgAyEBDAILIAEgDkKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACEMDAMLIAxCgICAgICAwP//AIQhDEIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASAOhFAEQEKAgICAgIDg//8AIAwgAiADhFAbIQxCACEBDAILIAIgA4RQBEAgDEKAgICAgIDA//8AhCEMQgAhAQwCCyAOQv///////z9YBEAgBUHAAmogASAKIAEgCiAKUCIGG3lCwABCACAGG3ynIgZBD2sQREEQIAZrIQYgBSkDyAIhCiAFKQPAAiEBCyACQv///////z9WDQAgBUGwAmogAyALIAMgCyALUCIJG3lCwABCACAJG3ynIglBD2sQRCAGIAlqQRBrIQYgBSkDuAIhCyAFKQOwAiEDCyAFQaACaiALQoCAgICAgMAAhCISQg+GIANCMYiEIgJCAEKAgICAsOa8gvUAIAJ9IgRCABBAIAVBkAJqQgAgBSkDqAJ9QgAgBEIAEEAgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQQCAFQfABaiAEQgBCACAFKQOIAn1CABBAIAVB4AFqIAUpA/gBQgGGIAUpA/ABQj+IhCIEQgAgAkIAEEAgBUHQAWogBEIAQgAgBSkD6AF9QgAQQCAFQcABaiAFKQPYAUIBhiAFKQPQAUI/iIQiBEIAIAJCABBAIAVBsAFqIARCAEIAIAUpA8gBfUIAEEAgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQQCAFQZABaiADQg+GQgAgAkIAEEAgBUHwAGogAkIAQgAgBSkDqAEgBSkDoAEiDiAFKQOYAXwiBCAOVK18IARCAVatfH1CABBAIAVBgAFqQgEgBH1CACACQgAQQCAGIAggB2tqIghB//8AaiEGAn4gBSkDcCITQgGGIg0gBSkDiAEiD0IBhiAFKQOAAUI/iIR8IhBC5+wAfSIUQiCIIgIgCkKAgICAgIDAAIQiFUIBhiIWQiCIIgR+IhEgAUIBhiIOQiCIIgsgECAUVq0gDSAQVq0gBSkDeEIBhiATQj+IhCAPQj+IfHx8QgF9IhNCIIgiEH58Ig0gEVStIA0gDSATQv////8PgyITIAFCP4giFyAKQgGGhEL/////D4MiCn58Ig1WrXwgBCAQfnwgBCATfiIRIAogEH58Ig8gEVStQiCGIA9CIIiEfCANIA9CIIZ8Ig8gDVStfCAPIA8gFEL/////D4MiFCAKfiINIAIgC358IhEgDVStIBEgESATIA5C/v///w+DIg1+fCIRVq18fCIPVq18IA8gBCAUfiIYIA0gEH58IgQgAiAKfnwiCiALIBN+fCIQQiCIIAogEFatIAQgGFStIAQgClatfHxCIIaEfCIEIA9UrXwgBCAEIBEgAiANfiIKIAsgFH58IgJCIIggAiAKVK1CIIaEfCIKIBFUrSAKIAogEEIghnwiClatfHwiBFatfCAEIAQgCiACQiCGIgIgDSAUfnwgAlStQn+FIgJWIAIgClJxrXwiBFatfCICQv////////8AWARAIBYgF4QhFSAFQdAAaiAEIAJCgICAgICAwABUIgetIguGIgogAiALhiAEQgGIIAdBP3OtiIQiBCADIBIQQCAIQf7/AGogBiAHG0EBayEGIAFCMYYgBSkDWH0gBSkDUCIBQgBSrX0hC0IAIAF9DAELIAVB4ABqIAJCP4YgBEIBiIQiCiACQgGIIgQgAyASEEAgAUIwhiAFKQNofSAFKQNgIgJCAFKtfSELIAEhDkIAIAJ9CyECIAZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgC0IBhiACQj+IhCEBIARC////////P4MgBq1CMIaEIQsgAkIBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAogBEEBIAZrEIoBIAVBMGogDiAVIAZB8ABqEEQgBUEgaiADIBIgBSkDQCIKIAUpA0giCxBAIAUpAzggBSkDKEIBhiAFKQMgIgFCP4iEfSAFKQMwIgIgAUIBhiIEVK19IQEgAiAEfQshAiAFQRBqIAMgEkIDQgAQQCAFIAMgEkIFQgAQQCALIAogAyAKQgGDIgMgAnwiAlQgASACIANUrXwiASASViABIBJRG618IgMgClStfCIEIAMgAyAEQoCAgICAgMD//wBUIAIgBSkDEFYgASAFKQMYIgRWIAEgBFEbca18IgNWrXwiBCADIARCgICAgICAwP//AFQgAiAFKQMAViABIAUpAwgiAlYgASACURtxrXwiASADVK18IAyEIQwLIAAgATcDACAAIAw3AwggBUHQAmokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQLyAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABAvQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORAvIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORAvQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhAvIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAs8ACAAIAE3AwAgACACQv///////z+DIAJCgICAgICAwP//AINCMIinIANCMIinQYCAAnFyrUIwhoQ3AwgLwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCABIAJSIAEgAlNxDQEgACABIAKFhEIAUg8LIABCAFIgASACVSABIAJRGw0AIAAg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EKYCCyEAIAEQTAR/QZiEASgCACABQf8BcUECdGooAgAFIAELwAsJACAAENACEC0LOwADQCABIAJGRQRAIAMhACAEIAEoAgAQTAR/IAEoAgAFIAALOgAAIARBAWohBCABQQRqIQEMAQsLIAELDAAgASACIAEQTBvACyoAA0AgASACRkUEQCADIAEsAAA2AgAgA0EEaiEDIAFBAWohAQwBCwsgAQsPACAAIAEgAkGgkAEQpwILHAAgARBMBH9BoJABKAIAIAFBAnRqKAIABSABCwsPACAAIAEgAkGYhAEQpwILHAAgARBMBH9BmIQBKAIAIAFBAnRqKAIABSABCwsQACAABEAgABDHAwsgABAtCzoAA0ACQCACIANGDQAgAigCABBMRQ0AIAIoAgBBAnRBkKIBaigCACABcUUNACACQQRqIQIMAQsLIAILOQADQAJAIAIgA0YNACACKAIAEEwEQCACKAIAQQJ0QZCiAWooAgAgAXENAQsgAkEEaiECDAELCyACC0YAA0AgASACRkUEQEEAIQAgAyABKAIAEEwEfyABKAIAQQJ0QZCiAWooAgAFQQALNgIAIANBBGohAyABQQRqIQEMAQsLIAELIwBBACEAIAIQTAR/IAJBAnRBkKIBaigCACABcUEARwVBAAsLDwAgACAAKAIAKAIEEQIACwkAIAAQ1gIQLQsVAQF/QdQAEFMiAEEAQdQA/AsAIAALFAAgACgCACABaiACLQAAOgAAQQELrgEAAkAgBRBHRQRAIAAgBSkCADcCACAAIAUoAgg2AgggABBeGgwBCyAFKAIAIQQgBSgCBCECIwBBEGsiAyQAAkACQAJAIAIQvQEEQCAAIgEgAhBQDAELIAJB9////wNLDQEgA0EIaiACEJABQQFqEI8BIAMoAgwaIAAgAygCCCIBNgIAIAAgAygCDBBcIAAgAjYCBAsgASAEIAJBAWoQZSADQRBqJAAMAQsQWwALCwsJACAAIAUQ5AELhAMBCH8jAEHgA2siACQAIABB3ANqIgYgAxAnIAYQSCEKIAUQHwRAIAVBABDMASgCACAKQS0QS0YhCwsgAiALIABB3ANqIABB2ANqIABB1ANqIABB0ANqIABBxANqECQiDCAAQbgDahAkIgYgAEGsA2oQJCIHIABBqANqEN8CIABB4wA2AhAgAEEIakEAIABBEGoiAhA2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KAK8ASAEEI8DOQMAIABBzAFqIABBEGogACgCDCAEEEMgAEHcAmogAEHYAmoQKwRAIAQgBCgCAEECcjYCAAsgACgC3AIgARAgGiAAQcwBahAgGiAAQeACaiQADAMLQQEhAwsgAEHcAmoQPhoMAAsACwvKBAEDfwJ/IwBB4AJrIgAkACAAIAI2AtgCIAAgATYC3AIgAEHMAWogAyAAQeABaiAAQdwBaiAAQdgBahD7ASAAQcABahAkIgEgARAoECEgACABQQAQIiICNgK8ASAAIABBEGo2AgwgAEEANgIIIABBAToAByAAQcUAOgAGQQAhAwNAAkACQAJAIABB3AJqIABB2AJqECsNACAAKAK8ASABEB8gAmpGBEAgARAfIQYgASABEB9BAXQQISABIAEQKBAhIAAgBiABQQAQIiICajYCvAELIABB3AJqEDcgAEEHaiAAQQZqIAIgAEG8AWogACgC3AEgACgC2AEgAEHMAWogAEEQaiAAQQxqIABBCGogAEHgAWoQ+gENACADDQFBACEDIAAoArwBIAJrIgdBAEwNAgJAAkAgAi0AACIGQStrIggOAwEAAQALIAZBLkYNAkEBIQMgBkEwa0H/AXFBCkkNAwwBCyAHQQFGDQICQCAIDgMAAwADCyACLQABIgZBLkYNAUEBIQMgBkEwa0H/AXFBCU0NAgsCQCAAQcwBahAfRQ0AIAAtAAdBAXFFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK8ASAEEJEDOAIAIABBzAFqIABBEGogACgCDCAEEEMgAEHcAmogAEHYAmoQKwRAIAQgBCgCAEECcjYCAAsgACgC3AIgARAgGiAAQcwBahAgGiAAQeACaiQADAMLQQEhAwsgAEHcAmoQPhoMAAsACwuWAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQaiEGIAMgAEHQAWoQrgEhByAAQcQBaiADIABBxAJqEK0BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECsNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABBzAJqIgMQNyAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxCYAQ0AIAMQPhoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCSAzcDACAAQcQBaiAAQRBqIAAoAgwgBBBDIABBzAJqIABByAJqECsEQCAEIAQoAgBBAnI2AgALIAAoAswCIAEQIBogAEHEAWoQIBogAEHQAmokAAuWAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQaiEGIAMgAEHQAWoQrgEhByAAQcQBaiADIABBxAJqEK0BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECsNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABBzAJqIgMQNyAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxCYAQ0AIAMQPhoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCVAzsBACAAQcQBaiAAQRBqIAAoAgwgBBBDIABBzAJqIABByAJqECsEQCAEIAQoAgBBAnI2AgALIAAoAswCIAEQIBogAEHEAWoQIBogAEHQAmokAAuWAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQaiEGIAMgAEHQAWoQrgEhByAAQcQBaiADIABBxAJqEK0BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECsNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABBzAJqIgMQNyAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxCYAQ0AIAMQPhoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtB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DCECDAYLIANBIHIhAyABQQRqIQIgBEEEayEEIAEtAAMgCHQgB2ohBwsCQCAFQQRxRQ0AIAcgBigCIEYNACAKQd4ONgIYIAZB0f4ANgIEIAIhASAGKAIEIQUMAQsLIAIhAUEAIQdBACEDCyAGQdD+ADYCBAtBASECDAELQQAhBCAMIQILIAogDzYCECAKIBA2AgwgCiAENgIEIAogATYCACAGIAM2AkAgBiAHNgI8AkACQCAGKAIsRQRAIA8gFUYNASAGKAIEQdD+AEsNAQsCfyAVIA9rIQMCQAJAIAooAhwiASgCOCIMRQRAQQEhBSABIAooAihBASABKAIodEEBIAooAiARAwAiDDYCOCAMRQ0BCyABKAIsIgRFBEAgAUIANwIwIAFBASABKAIodCIENgIsCyADIARPBEAgBARAIAwgECAEayAE/AoAAAsgAUEANgI0DAILIAQgASgCNCIIayIFIAMgAyAFSxsiBARAIAggDGogECADayAE/AoAAAsgAyAFSwRAIAMgBGsiAwRAIAEoAjggECADayAD/AoAAAsgASADNgI0DAILQQAhBSABIAEoAjQgBGoiA0EAIAMgASgCLCIMRxs2AjQgDCABKAIwIgNNDQAgASADIARqNgIwCyAFDAELIAEgASgCLDYCMEEACw0BIAooAhAhDyAKKAIEIQQLIAogCigCCCAkIARrajYCCCAKIBUgD2siASAKKAIUajYCFCAGIAYoAiAgAWo2AiAgBi0ADEEEcUUgDyAVRnJFBEAgCigCDCABayEDIAYoAhwhBSAGAn8gBigCFARAIAUgAyABEFEMAQsgBSADIAEQswELIgE2AhwgCiABNgIwCyAKIAYoAkBBwABBACAGKAIIG2pBgAFBACAGKAIEIgFBv/4ARhtqQYACQYACQQAgAUHC/gBGGyABQcf+AEYbajYCLCACQXsgAhsgAiAPIBVGGyACIAQgJEYbIRwMAgsgBkHS/gA2AgQLQXwhHAsgF0EQaiQAIBxBAUsNASATQagBaiEBIBMoAqwBIQMgGigCACEJIBooAgQgEygCFGshDCMAQSBrIggkAAJAIAwgCWsiBUEATA0AIAEoAgggASgCBCICayAFTgRAIAIgA2siBCAFSARAIAwgBCAJaiIHayILRSAHIAxGckUEQCACIAcgC/wKAAALIAEgAiALajYCBCAE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eQAtKyAgIDBYMHgALTBYKzBYIDBYLTB4KzB4IDB4AE5vdgBUaHUAQXVndXN0AHVuc2lnbmVkIHNob3J0AHVuc2lnbmVkIGludABpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQAaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0AHVua25vd24gaGVhZGVyIGZsYWdzIHNldABpbnZhbGlkIGRpc3RhbmNlcyBzZXQAZ2V0AE9jdABmbG9hdABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AFNhdABudW1Qb2ludHMAY29sb3JzAFVucGFja09wdGlvbnMAcG9zaXRpb25zAHJvdGF0aW9ucwB0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scwBpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzAHNjYWxlcwBhbHBoYXMAW1NQWjogRVJST1JdIENoZWNrIGZhaWxlZDogJXM6JWQ6ICVzAHZmMzJfcHRyAEFwcgB2ZWN0b3IAbW9uZXlfZ2V0IGVycm9yAFtTUFogRVJST1JdIGRlc2VyaWFsaXplUGFja2VkR2F1c3NpYW5zOiByZWFkIGVycm9yAE9jdG9iZXIATm92ZW1iZXIAU2VwdGVtYmVyAERlY2VtYmVyAHVuc2lnbmVkIGNoYXIAaW9zX2Jhc2U6OmNsZWFyAE1hcgAvZW1zZGsvZW1zY3JpcHRlbi9zeXN0ZW0vbGliL2xpYmN4eGFiaS9zcmMvcHJpdmF0ZV90eXBlaW5mby5jcHAAU2VwACVJOiVNOiVTICVwAFN1bgBKdW4ATW9uAG5hbgBKYW4AY29vcmRpbmF0ZVN5c3RlbQBDb29yZGluYXRlU3lzdGVtAEp1bABib29sAGxsAEFwcmlsAGludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jawBpbmNvcnJlY3QgaGVhZGVyIGNoZWNrAGluY29ycmVjdCBsZW5ndGggY2hlY2sAaW5jb3JyZWN0IGRhdGEgY2hlY2sAcHVzaF9iYWNrAGludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrAEZyaQBzaABoZWFkZXIgY3JjIG1pc21hdGNoAE1hcmNoAEF1ZwB1bnNpZ25lZCBsb25nIGxvbmcAdW5zaWduZWQgbG9uZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgAlLjBMZgAlTGYAcmVzaXplAGludmFsaWQgd2luZG93IHNpemUAdHJ1ZQBUdWUAZmFsc2UAaW52YWxpZCBibG9jayB0eXBlAEp1bmUAZG91YmxlAHNoRGVncmVlAGJhZF9hcnJheV9uZXdfbGVuZ3RoIHdhcyB0aHJvd24gaW4gLWZuby1leGNlcHRpb25zIG1vZGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQBSYXdHYXVzc2lhbkNsb3VkAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAFtTUFogRVJST1JdIGRlc2VyaWFsaXplUGFja2VkR2F1c3NpYW5zOiBoZWFkZXIgbm90IGZvdW5kACUwKmxsZAAlKmxsZAArJWxsZAAlKy40bGQAdm9pZABsb2NhbGUgbm90IHN1cHBvcnRlZABhbnRpYWxpYXNlZABXZWQAJVktJW0tJWQAW1NQWiBFUlJPUl0gZGVzZXJpYWxpemVQYWNrZWRHYXVzc2lhbnM6IFRvbyBtYW55IHBvaW50czogJWQAW1NQWiBFUlJPUl0gZGVzZXJpYWxpemVQYWNrZWRHYXVzc2lhbnM6IFVuc3VwcG9ydGVkIFNIIGRlZ3JlZTogJWQAW1NQWiBFUlJPUl0gZGVzZXJpYWxpemVQYWNrZWRHYXVzc2lhbnM6IHZlcnNpb24gbm90IHN1cHBvcnRlZDogJWQARGVjAC4vc3B6L3NyYy9jYy9sb2FkLXNwei5jYwBGZWIAJWEgJWIgJWQgJUg6JU06JVMgJVkAUE9TSVgAVmVjdG9yVUludDhUACVIOiVNOiVTAE5BTgBQTQBBTQAlSDolTQBMQ19BTEwAQVNDSUkATEFORwBSVUYATFVGAElORgBSREYATERGAFVOU1BFQ0lGSUVEAEMAUlVCAExVQgBSREIATERCAGNhdGNoaW5nIGEgY2xhc3Mgd2l0aG91dCBhbiBvYmplY3Q/AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+ADAxMjM0NTY3ODkAQy5VVEYtOABWZWN0b3JGbG9hdDMyADEuMy4xAC4ALQAocGFja2VkLmFscGhhcy5zaXplKCkpID09IChudW1Qb2ludHMpAChudWxsKQAocGFja2VkLmNvbG9ycy5zaXplKCkpID09IChudW1Qb2ludHMgKiAzKQAocGFja2VkLnNjYWxlcy5zaXplKCkpID09IChudW1Qb2ludHMgKiAzKQAocGFja2VkLnNoLnNpemUoKSkgPT0gKG51bVBvaW50cyAqIHNoRGltICogMykAKHBhY2tlZC5yb3RhdGlvbnMuc2l6ZSgpKSA9PSAobnVtUG9pbnRzICogKHBhY2tlZC51c2VzUXVhdGVybmlvblNtYWxsZXN0VGhyZWUgPyA0IDogMykpAChwYWNrZWQucG9zaXRpb25zLnNpemUoKSkgPT0gKG51bVBvaW50cyAqIDMgKiAodXNlc0Zsb2F0MTYgPyAyIDogMykpACUAbGVuZ3RoX2Vycm9yIHdhcyB0aHJvd24gaW4gLWZuby1leGNlcHRpb25zIG1vZGUgd2l0aCBtZXNzYWdlICIlcyIAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAW1NQWjogRVJST1JdIFVuc3VwcG9ydGVkIFNIIGRlZ3JlZTogJWQKAAkAAAAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwBBkCALthMgEAAA9GwAAPRsAABAEAAAqG0AACgQAABOM3NwejEzR2F1c3NpYW5DbG91ZEUAAACobQAASBAAAE4zc3B6MTNVbnBhY2tPcHRpb25zRQBwcGlpcAD0bAAAbBAAAKhtAAB0EAAATlN0M19fMjZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRUUAaXBwACxuAADEEAAAAAAAAAMAAADcEAAAAAAAACgSAAAAAAAAWBIAAAAAAABOU3QzX18yOG9wdGlvbmFsSWZFRQAAAADQbQAA6BAAABgRAABOU3QzX18yMjdfX29wdGlvbmFsX21vdmVfYXNzaWduX2Jhc2VJZkxiMUVFRQAAAADQbQAAJBEAAFQRAABOU3QzX18yMjdfX29wdGlvbmFsX2NvcHlfYXNzaWduX2Jhc2VJZkxiMUVFRQAAAADQbQAAYBEAAIgRAABOU3QzX18yMjBfX29wdGlvbmFsX21vdmVfYmFzZUlmTGIxRUVFAAAA0G0AAJQRAAC8EQAATlN0M19fMjIwX19vcHRpb25hbF9jb3B5X2Jhc2VJZkxiMUVFRQAAANBtAADIEQAA9BEAAE5TdDNfXzIyM19fb3B0aW9uYWxfc3RvcmFnZV9iYXNlSWZMYjBFRUUAAAAAqG0AAPwRAABOU3QzX18yMjRfX29wdGlvbmFsX2Rlc3RydWN0X2Jhc2VJZkxiMUVFRQAAAKhtAAAwEgAATlN0M19fMjE4X19zZmluYWVfY3Rvcl9iYXNlSUxiMUVMYjFFRUUAAKhtAABgEgAATlN0M19fMjIwX19zZmluYWVfYXNzaWduX2Jhc2VJTGIxRUxiMUVFRQAAAACIbgAAnBIAAAAAAABsEAAAUE5TdDNfXzI2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVFAAAAAIhuAADUEgAAAQAAAGwQAABQS05TdDNfXzI2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVFAHBwAHYAdnAAAACMEgAAcHAAAJRsAACMEgAAPG0AAHZwcGQAAAAAlGwAAIwSAAAYbQAAPG0AAHZwcHBkAAAAGG0AAMQSAABwcHAATBMAADxtAACobQAAVBMAAE4xMGVtc2NyaXB0ZW4zdmFsRQAAnBAAAGwQAAAYbQAAcHBwcAAAAAAAAAAArGwAAGwQAAAYbQAAPG0AAGlwcHBkAAAALG4AAMATAAAAAAAAAwAAANgTAAAAAAAAKBIAAAAAAABYEgAAAAAAAE5TdDNfXzI4b3B0aW9uYWxJaEVFAAAAANBtAADkEwAAFBQAAE5TdDNfXzIyN19fb3B0aW9uYWxfbW92ZV9hc3NpZ25fYmFzZUloTGIxRUVFAAAAANBtAAAgFAAAUBQAAE5TdDNfXzIyN19fb3B0aW9uYWxfY29weV9hc3NpZ25fYmFzZUloTGIxRUVFAAAAANBtAABcFAAAhBQAAE5TdDNfXzIyMF9fb3B0aW9uYWxfbW92ZV9iYXNlSWhMYjFFRUUAAADQbQAAkBQAALgUAABOU3QzX18yMjBfX29wdGlvbmFsX2NvcHlfYmFzZUloTGIxRUVFAAAA0G0AAMQUAADwFAAATlN0M19fMjIzX19vcHRpb25hbF9zdG9yYWdlX2Jhc2VJaExiMEVFRQAAAACobQAA+BQAAE5TdDNfXzIyNF9fb3B0aW9uYWxfZGVzdHJ1Y3RfYmFzZUloTGIxRUVFAAAAqG0AACwVAABOU3QzX18yNnZlY3RvckloTlNfOWFsbG9jYXRvckloRUVFRQCIbgAAYBUAAAAAAAAkFQAAUE5TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAAAAAIhuAACYFQAAAQAAACQVAABQS05TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAHBwAHZwAFAVAABwcAAAlGwAAFAVAADEbAAAdnBwaQAAAACUbAAAUBUAABhtAADEbAAAdnBwcGkAAAAYbQAAiBUAAHBwcABMEwAAxGwAAJgTAAAkFQAAGG0AAHBwcHAAAAAArGwAACQVAAAYbQAAxGwAAGlwcHBpAHAAdnAAaXBwAHZwcGkAaXBwAHZwcGkAcHBwAHZwcHAAAABcbQAAYBYAAE4zc3B6MTZDb29yZGluYXRlU3lzdGVtRQBwAHZwAGlwcAB2cHBpAAAAAAAAAwAAAAgAAAAPAAAAqG0AAKAWAABOU3QzX18yMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQAAqG0AAOgWAABOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQAAqG0AADAXAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQAAAKhtAAB8FwAATlN0M19fMjEyYmFzaWNfc3RyaW5nSURpTlNfMTFjaGFyX3RyYWl0c0lEaUVFTlNfOWFsbG9jYXRvcklEaUVFRUUAAACobQAAyBcAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWNFRQAAqG0AAPAXAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUAAKhtAAAYGAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaEVFAACobQAAQBgAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXNFRQAAqG0AAGgYAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUAAKhtAACQGAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaUVFAACobQAAuBgAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWpFRQAAqG0AAOAYAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUAAKhtAAAIGQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbUVFAACobQAAMBkAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXhFRQAAqG0AAFgZAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l5RUUAAKhtAACAGQAATjEwZW1zY3Jp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AAAJqAAACAQAAAiEAAAIRAAACegAEAcIAAAIXAAACBwAAAmYABQHUwAACHwAAAg8AAAJ2AASBxcAAAhsAAAILAAACbgAAAgMAAAIjAAACEwAAAn4ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcQAEQcLAAAIYgAACCIAAAmkAAAIAgAACIIAAAhCAAAJ5AAQBwcAAAhaAAAIGgAACZQAFAdDAAAIegAACDoAAAnUABIHEwAACGoAAAgqAAAJtAAACAoAAAiKAAAISgAACfQAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzAARBw8AAAhmAAAIJgAACawAAAgGAAAIhgAACEYAAAnsABAHCQAACF4AAAgeAAAJnAAUB2MAAAh+AAAIPgAACdwAEgcbAAAIbgAACC4AAAm8AAAIDgAACI4AAAhOAAAJ/ABgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnCABAHCgAACGEAAAghAAAJogAACAEAAAiBAAAIQQAACeIAEAcGAAAIWQAACBkAAAmSABMHOwAACHkAAAg5AAAJ0gARBxEAAAhpAAAIKQAACbIAAAgJAAAIiQAACEkAAAnyABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcoAEQcNAAAIZQAACCUAAAmqAAAIBQAACIUAAAhFAAAJ6gAQBwgAAAhdAAAIHQAACZoAFAdTAAAIfQAACD0AAAnaABIHFwAACG0AAAgtAAAJugAACA0AAAiNAAAITQAACfoAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxgARBwsAAAhjAAAIIwAACaYAAAgDAAAIgwAACEMAAAnmABAHBwAACFsAAAgbAAAJlgAUB0MAAAh7AAAIOwAACdYAEgcTAAAIawAACCsAAAm2AAAICwAACIsAAAhLAAAJ9gAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnOABEHDwAACGcAAAgnAAAJrgAACAcAAAiHAAAIRwAACe4AEAcJAAAIXwAACB8AAAmeABQHYwAACH8AAAg/AAAJ3gASBxsAAAhvAAAILwAACb4AAAgPAAAIjwAACE8AAAn+AGAHAAAACFAAAAgQABQIcwASBx8AAAhwAAAIMAAACcEAEAcKAAAIYAAACCAAAAmhAAAIAAAACIAAAAhAAAAJ4QAQBwYAAAhYAAAIGAAACZEAEwc7AAAIeAAACDgAAAnRABEHEQAACGgAAAgoAAAJsQAACAgAAAiIAAAISAAACfEAEAcEAAAIVAAACBQAFQjjABMHKwAACHQAAAg0AAAJyQARBw0AAAhkAAAIJAAACakAAAgEAAAIhAAACEQAAAnpABAHCAAACFwAAAgcAAAJmQAUB1MAAAh8AAAIPAAACdkAEgcXAAAIbAAACCwAAAm5AAAIDAAACIwAAAhMAAAJ+QAQBwMAAAhSAAAIEgAVCKMAEwcjAAAIcgAACDIAAAnFABEHCwAACGIAAAgiAAAJpQAACAIAAAiCAAAIQgAACeUAEAcHAAAIWgAACBoAAAmVABQHQwAACHoAAAg6AAAJ1QASBxMAAAhqAAAIKgAACbUAAAgKAAAIigAACEoAAAn1ABAHBQAACFYAAAgWAEAIAAATBzMAAAh2AAAINgAACc0AEQcPAAAIZgAACCYAAAmtAAAIBgAACIYAAAhGAAAJ7QAQBwkAAAheAAAIHgAACZ0AFAdjAAAIfgAACD4AAAndABIHGwAACG4AAAguAAAJvQAACA4AAAiOAAAITgAACf0AYAcAAAAIUQAACBEAFQiDABIHHwAACHEAAAgxAAAJwwAQBwoAAAhhAAAIIQAACaMAAAgBAAAIgQAACEEAAAnjABAHBgAACFkAAAgZAAAJkwATBzsAAAh5AAAIOQAACdMAEQcRAAAIaQAACCkAAAmzAAAICQAACIkAAAhJAAAJ8wAQBwQAAAhVAAAIFQAQCAIBEwcrAAAIdQAACDUAAAnLABEHDQAACGUAAAglAAAJqwAACAUAAAiFAAAIRQAACesAEAcIAAAIXQAACB0AAAmbABQHUwAACH0AAAg9AAAJ2wASBxcAAAhtAAAILQAACbsAAAgNAAAIjQAACE0AAAn7ABAHAwAACFMAAAgTABUIwwATByMAAAhzAAAIMwAACccAEQcLAAAIYwAACCMAAAmnAAAIAwAACIMAAAhDAAAJ5wAQBwcAAAhbAAAIGwAACZcAFAdDAAAIewAACDsAAAnXABIHEwAACGsAAAgrAAAJtwAACAsAAAiLAAAISwAACfcAEAcFAAAIVwAACBcAQAgAABMHMwAACHcAAAg3AAAJzwARBw8AAAhnAAAIJwAACa8AAAgH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Y05TXzExY2hhcl90cmFpdHNJY0VFRUUA0G0AAHg9AAAAPAAATlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAABAAAAAAAAAAKw+AABZAAAAWgAAADgAAAD4////rD4AAFsAAABcAAAAwP///8D///+sPgAAXQAAAF4AAADIPQAALD4AAGg+AAB8PgAAkD4AAKQ+AABUPgAAQD4AAPA9AADcPQAAQAAAAAAAAAAcPQAATAAAAE0AAAA4AAAA+P///xw9AABOAAAATwAAAMD////A////HD0AAFAAAABRAAAAQAAAAAAAAAA8PAAARAAAAEUAAADA////wP///zw8AABGAAAARwAAADgAAAAAAAAAhDwAAEgAAABJAAAAyP///8j///+EPAAASgAAAEsAAADQbQAAuD4AABw9AABOU3QzX18yMThiYXNpY19zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQAAAAAAAAAAED8AAF8AAABgAAAAqG0AABg/AABOU3QzX18yOGlvc19iYXNlRQAAAAAAAADRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAAAAAAAAAAgAAwAMAAMAEAADABQAAwAYAAMAHAADACAAAwAkAAMAKAADACwAAwAwAAMANAADADgAAwA8AAMAQAADAEQAAwBIAAMATAADA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")),oe((await H(_e)).instance))}();function V3(){function se(){var oe;if(i.calledRun=!0,!b){if(V=!0,S_.G(),I?.(i),(oe=i.onRuntimeInitialized)==null||oe.call(i),i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;){var _e=i.postRun.shift();K.push(_e)}ee(K)}}if(0{setTimeout(()=>i.setStatus(""),1),se()},1)):se()}}if(i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);0{I=se,_=oe}),n}var CE=(e,t,n=i=>i)=>{let i=e.vf32_ptr(t),o=t.size();return new Float32Array(e.HEAPF32.buffer,i,o).map(n)},e9e=e=>1/(1+Math.exp(-e)),t9e=e=>t=>t*e+.5,n9e=(e,t,n)=>{let i=n?.colorScaleFactor??.282;return{numPoints:t.numPoints,shDegree:t.shDegree,antialiased:t.antialiased,positions:CE(e,t.positions),scales:CE(e,t.scales,Math.exp),rotations:CE(e,t.rotations),alphas:CE(e,t.alphas,e9e),colors:CE(e,t.colors,t9e(i)),sh:CE(e,t.sh)}},i9e=(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))},jse=async(e,t)=>{var n;let i=await $Ne(),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=n9e(i,a,t);return i9e(i,a),c}catch(s){throw s}finally{r!==null&&i._free(r)}};var o9e=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));function Hb(e){e=e??Y.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.primitive,o=e.spz,r=e.gltfResource,s=e.baseResource,a=e.cacheKey;this._resourceCache=t,this._gltfResource=r,this._baseResource=s,this._gltf=n,this._primitive=i,this._spz=o,this._cacheKey=a,this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodePromise=void 0,this._decodedData=void 0,this._state=ft.UNLOADED,this._promise=void 0,this._spzError=void 0}l(Object.create)&&(Hb.prototype=Object.create(Yi.prototype),Hb.prototype.constructor=Hb);Object.defineProperties(Hb.prototype,{cacheKey:{get:function(){return this._cacheKey}},decodedData:{get:function(){return this._decodedData}}});async function r9e(e){let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:0,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoader=n,await n.load(),e.isDestroyed()?void 0:(e._bufferViewTypedArray=n.typedArray,e._state=ft.PROCESSING,e)}catch(n){if(e.isDestroyed())return;qse(e,n)}}Hb.prototype.load=async function(){return l(this._promise)?this._promise:(this._state=ft.LOADING,this._promise=r9e(this),this._promise)};function qse(e,t){throw e.unload(),e._state=ft.FAILED,e.getError("Failed to load SPZ",t)}async function s9e(e,t){try{let n=await t;return e.isDestroyed()?void 0:(e.unload(),e._decodedData={gcloud:n},e._state=ft.READY,e._baseResource)}catch(n){if(e.isDestroyed())return;e._spzError=n}}Hb.prototype.process=function(e){if(this._state===ft.READY)return!0;if(this._state!==ft.PROCESSING||(l(this._spzError)&&qse(this,this._spzError),!l(this._bufferViewTypedArray))||l(this._decodePromise))return!1;let t=jse(this._bufferViewTypedArray,{unpackOptions:{coordinateSystem:"UNSPECIFIED"}});if(!l(t))return!1;this._decodePromise=s9e(this,t)};Hb.prototype.unload=function(){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};var KZ=Hb;var cpn=y(C(),1);var tpn=y(C(),1);var Mfn=y(C(),1);function JZ(e){e=e??Y.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=ke(e.extras,!0),this._extensions=ke(e.extensions,!0)}JZ.fromJson=function(e){e=e??Y.EMPTY_OBJECT;let t=e.id,n=e.class,i={};for(let o in n.properties)if(n.properties.hasOwnProperty(o)){let r=Qf.fromJson({id:o,property:n.properties[o],enums:e.enums});i[o]=r}return new JZ({id:t,name:n.name,description:n.description,properties:i,extras:n.extras,extensions:n.extensions})};Object.defineProperties(JZ.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}}});JZ.BATCH_TABLE_CLASS_NAME="_batchTable";var Ch=JZ;var zfn=y(C(),1);var Qfn=y(C(),1);function oQ(e){e=e??Y.EMPTY_OBJECT;let t=e.value,n=e.name;this._value=t,this._name=n,this._description=e.description,this._extras=ke(e.extras,!0),this._extensions=ke(e.extensions,!0)}oQ.fromJson=function(e){return new oQ({value:e.value,name:e.name,description:e.description,extras:e.extras,extensions:e.extensions})};Object.defineProperties(oQ.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 jZ=oQ;function rQ(e){e=e??Y.EMPTY_OBJECT;let t=e.id,n=e.values,i={},o={},r=n.length;for(let a=0;a>t};va.fromSubtreeJson=async function(e,t,n,i,o){let r=new va(e,i,o),s;l(t)?s={json:t,binary:void 0}:s=u9e(n);let a=s.json;r._subtreeJson=a;let c;if(Ii(a,"3DTILES_metadata"))c=a.extensions["3DTILES_metadata"];else if(l(a.tileMetadata)){let _=a.tileMetadata;c=a.propertyTables[_]}let d=[];if(l(a.contentMetadata)){let _=a.contentMetadata.length;for(let E=0;E<_;E++){let S=a.contentMetadata[E];d.push(a.propertyTables[S])}}let u,h=i.metadataSchema,p=a.subtreeMetadata;if(l(p)){let _=p.class,E=h.classes[_];u=new ZZ({subtreeMetadata:p,class:E})}r._metadata=u,r._tilePropertyTableJson=c,r._contentPropertyTableJsons=d;let g={constant:0};a.contentAvailabilityHeaders=[],Ii(a,"3DTILES_multiple_contents")?a.contentAvailabilityHeaders=a.extensions["3DTILES_multiple_contents"].contentAvailability:Array.isArray(a.contentAvailability)?a.contentAvailabilityHeaders=a.contentAvailability:a.contentAvailabilityHeaders.push(a.contentAvailability??g);let f=m9e(a.buffers),b=h9e(a.bufferViews,f);f9e(a,b),l(c)&&nae(c,b);for(let _=0;_0;u=u||h;for(let p=0;p>BigInt(61)),d=c%2===0?cE.encode2D(i,o,r):cE.encode2D(i,r,o),u=xA.fromFacePositionLevel(c,BigInt(d),i),h,p;if(l(s)){let g=(a.maximumHeight+a.minimumHeight)/2;h=n<4?a.minimumHeight:g,p=n<4?g:a.maximumHeight}else h=a.minimumHeight,p=a.maximumHeight;return{extensions:{"3DTILES_bounding_volume_S2":{token:xA.getTokenFromId(u._cellId),minimumHeight:h,maximumHeight:p}}}}var w9e=new m,X9e=new m,Iz=new m,W9e=new $;function cae(e,t,n,i,o){if(t===0)return e;let r=m.unpack(e,0,X9e),s=$.unpack(e,3,W9e),a=Math.pow(2,-t),c=-1+(2*n+1)*a,d=-1+(2*i+1)*a,u=0,h=m.fromElements(a,a,1,w9e);l(o)&&(u=-1+(2*o+1)*a,h.z=a);let p=m.fromElements(c,d,u,Iz);p=$.multiplyByVector(s,p,Iz),p=m.add(p,r,Iz);let g=$.clone(s);g=$.multiplyByScale(g,h,g);let f=new Array(12);return m.pack(p,f),$.pack(g,f,3),f}var F9e=new le;function lae(e,t,n,i,o){if(t===0)return e.slice();let r=le.unpack(e,0,F9e),s=e[4],a=e[5],c=Math.pow(2,-t),d=c*r.width,u=Z.negativePiToPi(r.west+n*d),h=Z.negativePiToPi(u+d),p=c*r.height,g=Z.negativePiToPi(r.south+i*p),f=Z.negativePiToPi(g+p),b=s,x=a;if(l(o)){let I=c*(a-s);b+=o*I,x=b+I}return[u,g,h,f,b,x]}function P9e(e,t,n){let i=e._implicitTileset,o=t.implicitCoordinates.getChildCoordinates(n),r=sae(i,o,n,!1,t),s=rae(void 0,i,o),a=i.subtreeUriTemplate.getDerivedResource({templateValues:o.getTemplateValues()}).url,c={boundingVolume:r,geometricError:s,refine:i.refine,contents:[{uri:a}]},d=dae(e,i.baseResource,c,t);return d.implicitTileset=i,d.implicitCoordinates=o,d}function dae(e,t,n,i){let o=e._tile.constructor;return new o(e._tileset,t,n,i)}xl.prototype.hasProperty=function(e,t){return!1};xl.prototype.getFeature=function(e){};xl.prototype.applyDebugSettings=function(e,t){};xl.prototype.applyStyle=function(e){};xl.prototype.update=function(e,t){};xl.prototype.pick=function(e,t,n){};xl.prototype.isDestroyed=function(){return!1};xl.prototype.destroy=function(){return this._implicitSubtree=this._implicitSubtree&&this._implicitSubtree.destroy(),me(this)};xl._deriveBoundingBox=cae;xl._deriveBoundingRegion=lae;xl._deriveBoundingVolumeS2=aae;var EE=xl;var CQn=y(C(),1);var AAn=y(C(),1),M9e={NONE:0,REPEAT:1,MIRRORED_REPEAT:2},od=Object.freeze(M9e);var dQn=y(C(),1);var NAn=y(C(),1);var CAn=y(C(),1);function TE(e,t){this._distance=t,this._normal=new uae(e,this),this.onChangeCallback=void 0,this.index=-1}Object.defineProperties(TE.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)&&!m.equals(this._normal._cartesian3,e)&&this.onChangeCallback(this.index),m.clone(e,this._normal._cartesian3)}}});TE.fromPlane=function(e,t){return l(t)?(t.normal=e.normal,t.distance=e.distance):t=new TE(e.normal,e.distance),t};TE.clone=function(e,t){return l(t)?(t.normal=e.normal,t.distance=e.distance,t):new TE(e.normal,e.distance)};function uae(e,t){this._clippingPlane=t,this._cartesian3=m.clone(e)}Object.defineProperties(uae.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 OC=TE;function Xc(e){e=e??Y.EMPTY_OBJECT,this._planes=[],this._dirtyIndex=-1,this._multipleDirtyPlanes=!1,this._enabled=e.enabled??!0,this.modelMatrix=X.clone(e.modelMatrix??X.IDENTITY),this.edgeColor=U.clone(e.edgeColor??U.WHITE),this.edgeWidth=e.edgeWidth??0,this.planeAdded=new Ce,this.planeRemoved=new Ce,this._owner=void 0;let t=e.unionClippingRegions??!1;this._unionClippingRegions=t,this._testIntersection=t?Aae:gae,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=on.OUTSIDE);for(let s=0;s80*n){a=e[0],c=e[1];let u=a,h=c;for(let p=n;pu&&(u=g),f>h&&(h=f)}d=Math.max(u-a,h-c),d=d!==0?32767/d:0}return iB(r,s,n,a,c,d,0),s}function xae(e,t,n,i,o){let r;if(o===oDe(e,t,n,i)>0)for(let s=t;s=t;s-=i)r=Cae(s/i|0,e[s],e[s+1],r);return r&&SE(r,r.next)&&(rB(r),r=r.next),r}function HC(e,t){if(!e)return e;t||(t=e);let n=e,i;do if(i=!1,!n.steiner&&(SE(n,n.next)||es(n.prev,n,n.next)===0)){if(rB(n),n=t=n.prev,n===n.next)break;i=!0}else n=n.next;while(i||n!==t);return t}function iB(e,t,n,i,o,r,s){if(!e)return;!s&&r&&q9e(e,i,o,r);let a=e;for(;e.prev!==e.next;){let c=e.prev,d=e.next;if(r?k9e(e,i,o,r):U9e(e)){t.push(c.i,e.i,d.i),rB(e),e=d.next,a=d.next;continue}if(e=d,e===a){s?s===1?(e=Y9e(HC(e),t),iB(e,t,n,i,o,r,2)):s===2&&O9e(e,t,n,i,o,r):iB(HC(e),t,n,i,o,r,1);break}}}function U9e(e){let t=e.prev,n=e,i=e.next;if(es(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),h=Math.min(a,c,d),p=Math.max(o,r,s),g=Math.max(a,c,d),f=i.next;for(;f!==t;){if(f.x>=u&&f.x<=p&&f.y>=h&&f.y<=g&&nB(o,a,r,c,s,d,f.x,f.y)&&es(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}function k9e(e,t,n,i){let o=e.prev,r=e,s=e.next;if(es(o,r,s)>=0)return!1;let a=o.x,c=r.x,d=s.x,u=o.y,h=r.y,p=s.y,g=Math.min(a,c,d),f=Math.min(u,h,p),b=Math.max(a,c,d),x=Math.max(u,h,p),I=Ez(g,f,t,n,i),_=Ez(b,x,t,n,i),E=e.prevZ,S=e.nextZ;for(;E&&E.z>=I&&S&&S.z<=_;){if(E.x>=g&&E.x<=b&&E.y>=f&&E.y<=x&&E!==o&&E!==s&&nB(a,u,c,h,d,p,E.x,E.y)&&es(E.prev,E,E.next)>=0||(E=E.prevZ,S.x>=g&&S.x<=b&&S.y>=f&&S.y<=x&&S!==o&&S!==s&&nB(a,u,c,h,d,p,S.x,S.y)&&es(S.prev,S,S.next)>=0))return!1;S=S.nextZ}for(;E&&E.z>=I;){if(E.x>=g&&E.x<=b&&E.y>=f&&E.y<=x&&E!==o&&E!==s&&nB(a,u,c,h,d,p,E.x,E.y)&&es(E.prev,E,E.next)>=0)return!1;E=E.prevZ}for(;S&&S.z<=_;){if(S.x>=g&&S.x<=b&&S.y>=f&&S.y<=x&&S!==o&&S!==s&&nB(a,u,c,h,d,p,S.x,S.y)&&es(S.prev,S,S.next)>=0)return!1;S=S.nextZ}return!0}function Y9e(e,t){let n=e;do{let i=n.prev,o=n.next.next;!SE(i,o)&&_ae(i,n,n.next,o)&&oB(i,o)&&oB(o,i)&&(t.push(i.i,n.i,o.i),rB(n),rB(n.next),n=e=o),n=n.next}while(n!==e);return HC(n)}function O9e(e,t,n,i,o,r){let s=e;do{let a=s.next.next;for(;a!==s.prev;){if(s.i!==a.i&&tDe(s,a)){let c=Eae(s,a);s=HC(s,s.next),c=HC(c,c.next),iB(s,t,n,i,o,r,0),iB(c,t,n,i,o,r,0);return}a=a.next}s=s.next}while(s!==e)}function H9e(e,t,n,i){let o=[];for(let r=0,s=t.length;r=n.next.y&&n.next.y!==n.y){let h=n.x+(o-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(h<=i&&h>r&&(r=h,s=n.x=n.x&&n.x>=c&&i!==n.x&&Iae(os.x||n.x===s.x&&j9e(s,n)))&&(s=n,u=h)}n=n.next}while(n!==a);return s}function j9e(e,t){return es(e.prev,e,t.prev)<0&&es(t.next,e,e.next)<0}function q9e(e,t,n,i){let o=e;do o.z===0&&(o.z=Ez(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,$9e(o)}function $9e(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 Ez(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 eDe(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 nB(e,t,n,i,o,r,s,a){return!(e===s&&t===a)&&Iae(e,t,n,i,o,r,s,a)}function tDe(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!nDe(e,t)&&(oB(e,t)&&oB(t,e)&&iDe(e,t)&&(es(e.prev,e,t.prev)||es(e,t.prev,t))||SE(e,t)&&es(e.prev,e,e.next)>0&&es(t.prev,t,t.next)>0)}function es(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function SE(e,t){return e.x===t.x&&e.y===t.y}function _ae(e,t,n,i){let o=lQ(es(e,t,n)),r=lQ(es(e,t,i)),s=lQ(es(n,i,e)),a=lQ(es(n,i,t));return!!(o!==r&&s!==a||o===0&&cQ(e,n,t)||r===0&&cQ(e,i,t)||s===0&&cQ(n,e,i)||a===0&&cQ(n,t,i))}function cQ(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 lQ(e){return e>0?1:e<0?-1:0}function nDe(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&&_ae(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function oB(e,t){return es(e.prev,e,e.next)<0?es(e,t,e.next)>=0&&es(e,e.prev,t)>=0:es(e,t,e.prev)<0||es(e,e.next,t)<0}function iDe(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 Eae(e,t){let n=Tz(e.i,e.x,e.y),i=Tz(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 Cae(e,t,n,i){let o=Tz(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 rB(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 Tz(e,t,n){return{i:e,x:t,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function oDe(e,t,n,i){let o=0;for(let r=t,s=n-i;r0?ws.COUNTER_CLOCKWISE:ws.CLOCKWISE};zb.triangulate=function(e,t){let n=D.packArray(e);return Sz(n,t,2)};var Rae=new m,Vae=new m,Gae=new m,Tae=new m,Sae=new m,Lae=new m,RA=new m,Zae=new D,Bae=new D,wae=new D,LE=new D;zb.computeSubdivision=function(e,t,n,i,o){o=o??Z.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),h=0,p=0;for(a=0;a0;){let E=s.pop(),S=s.pop(),R=s.pop(),G=m.fromArray(d,R*3,Rae),B=m.fromArray(d,S*3,Vae),w=m.fromArray(d,E*3,Gae),F,P,A;r&&(F=D.fromArray(u,R*2,Zae),P=D.fromArray(u,S*2,Bae),A=D.fromArray(u,E*2,wae));let T=m.multiplyByScalar(m.normalize(G,Tae),b,Tae),L=m.multiplyByScalar(m.normalize(B,Sae),b,Sae),V=m.multiplyByScalar(m.normalize(w,Lae),b,Lae),W=m.magnitudeSquared(m.subtract(T,L,RA)),M=m.magnitudeSquared(m.subtract(L,V,RA)),Q=m.magnitudeSquared(m.subtract(V,T,RA)),N=Math.max(W,M,Q),k,v,O;N>I?W===N?(k=`${Math.min(R,S)} ${Math.max(R,S)}`,a=f[k],l(a)||(v=m.add(G,B,RA),m.multiplyByScalar(v,.5,v),d.push(v.x,v.y,v.z),a=d.length/3-1,f[k]=a,r&&(O=D.add(F,P,LE),D.multiplyByScalar(O,.5,O),u.push(O.x,O.y))),s.push(R,a,E),s.push(a,S,E)):M===N?(k=`${Math.min(S,E)} ${Math.max(S,E)}`,a=f[k],l(a)||(v=m.add(B,w,RA),m.multiplyByScalar(v,.5,v),d.push(v.x,v.y,v.z),a=d.length/3-1,f[k]=a,r&&(O=D.add(P,A,LE),D.multiplyByScalar(O,.5,O),u.push(O.x,O.y))),s.push(S,a,R),s.push(a,E,R)):Q===N&&(k=`${Math.min(E,R)} ${Math.max(E,R)}`,a=f[k],l(a)||(v=m.add(w,G,RA),m.multiplyByScalar(v,.5,v),d.push(v.x,v.y,v.z),a=d.length/3-1,f[k]=a,r&&(O=D.add(A,F,LE),D.multiplyByScalar(O,.5,O),u.push(O.x,O.y))),s.push(E,a,S),s.push(a,R,S)):(g.push(R),g.push(S),g.push(E))}let _={attributes:{position:new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:d})},indices:g,primitiveType:We.TRIANGLES};return r&&(_.attributes.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:u})),new pt(_)};var aDe=new ge,cDe=new ge,lDe=new ge,Lz=new ge;zb.computeRhumbLineSubdivision=function(e,t,n,i,o){o=o??Z.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),h=0,p=0;for(a=0;a0;){let R=s.pop(),G=s.pop(),B=s.pop(),w=m.fromArray(d,B*3,Rae),F=m.fromArray(d,G*3,Vae),P=m.fromArray(d,R*3,Gae),A,T,L;r&&(A=D.fromArray(u,B*2,Zae),T=D.fromArray(u,G*2,Bae),L=D.fromArray(u,R*2,wae));let V=e.cartesianToCartographic(w,aDe),W=e.cartesianToCartographic(F,cDe),M=e.cartesianToCartographic(P,lDe);I.setEndPoints(V,W);let Q=I.surfaceDistance;_.setEndPoints(W,M);let N=_.surfaceDistance;E.setEndPoints(M,V);let k=E.surfaceDistance,v=Math.max(Q,N,k),O,H,ee,K,te;v>x?Q===v?(O=`${Math.min(B,G)} ${Math.max(B,G)}`,a=f[O],l(a)||(H=I.interpolateUsingFraction(.5,Lz),ee=(V.height+W.height)*.5,K=m.fromRadians(H.longitude,H.latitude,ee,e,RA),d.push(K.x,K.y,K.z),a=d.length/3-1,f[O]=a,r&&(te=D.add(A,T,LE),D.multiplyByScalar(te,.5,te),u.push(te.x,te.y))),s.push(B,a,R),s.push(a,G,R)):N===v?(O=`${Math.min(G,R)} ${Math.max(G,R)}`,a=f[O],l(a)||(H=_.interpolateUsingFraction(.5,Lz),ee=(W.height+M.height)*.5,K=m.fromRadians(H.longitude,H.latitude,ee,e,RA),d.push(K.x,K.y,K.z),a=d.length/3-1,f[O]=a,r&&(te=D.add(T,L,LE),D.multiplyByScalar(te,.5,te),u.push(te.x,te.y))),s.push(G,a,B),s.push(a,R,B)):k===v&&(O=`${Math.min(R,B)} ${Math.max(R,B)}`,a=f[O],l(a)||(H=E.interpolateUsingFraction(.5,Lz),ee=(M.height+V.height)*.5,K=m.fromRadians(H.longitude,H.latitude,ee,e,RA),d.push(K.x,K.y,K.z),a=d.length/3-1,f[O]=a,r&&(te=D.add(L,A,LE),D.multiplyByScalar(te,.5,te),u.push(te.x,te.y))),s.push(R,a,G),s.push(a,B,G)):(g.push(B),g.push(G),g.push(R))}let S={attributes:{position:new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:d})},indices:g,primitiveType:We.TRIANGLES};return r&&(S.attributes.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:u})),new pt(S)};zb.scaleToGeodeticHeight=function(e,t,n,i){n=n??ie.default;let o=rDe,r=sDe;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};Kb.prototype.peek=function(){if(this._length!==0)return this._array[this._offset]};Kb.prototype.contains=function(e){return this._array.indexOf(e)!==-1};Kb.prototype.clear=function(){this._array.length=this._offset=this._length=0};Kb.prototype.sort=function(e){this._offset>0&&(this._array=this._array.slice(this._offset),this._offset=0),this._array.sort(e)};var Jb=Kb;var hr={};hr.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;aZ.PI){let c=s;s=a,a=c}if(!(r.longitudea))return n.cartographicToCartesian(r)}function yDe(e,t,n,i){if(i===dn.RHUMB)return bDe(e,t,n);let o=fi.lineSegmentPlane(e,t,An.ORIGIN_XY_PLANE);if(l(o))return n.scaleToGeodeticSurface(o,o)}var CDe=new ge;function xDe(e,t,n){let i=[],o,r,s,a,c,d=0;for(;dt.cartesianToCartographic(h,CDe).longitude;if(s===0)i.push({position:d,type:s,visited:!1,next:a,theta:u(o)});else if(a!==0){if(c=yDe(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 Pae(e,t,n,i,o,r,s){let a=[],c=r,d=h=>p=>p.position===h,u=[];do{let h=n[c];a.push(h);let p=i.findIndex(d(c)),g=i[p];if(!l(g)){++c;continue}let{visited:f,type:b,next:x}=g;if(g.visited=!0,b===0){if(x===0){let S=i[p-(s?1:-1)];if(S?.position===c+1)S.visited=!0;else{++c;continue}}if(!f&&s&&x>0||r===c&&!s&&x<0){++c;continue}}if(!(s?b>=0:b<=0)){++c;continue}f||u.push(c);let _=p+(s?1:-1),E=i[_];if(!l(E)){++c;continue}c=E.position}while(c=0&&c!==r&&a.lengthd.theta-u.theta);let c=s[0].z>=0;o=Pae(i,o,s,a,1,0,c)}return i};hr.polygonsFromHierarchy=function(e,t,n,i,o,r){let s=[],a=[],c=new Jb;c.enqueue(e);let d=l(r);for(;c.length!==0;){let u=c.dequeue(),h=u.positions,p=u.holes,g,f;if(i)for(f=h.length,g=0;g1){for(let B of G)c.enqueue(new lc(B,p));continue}}let _=h.slice(),E=l(p)?p.length:0,S=[],R;for(g=0;gMath.PI&&(e-=Z.TWO_PI),e}}});var RE=new ge,RDe=new m;ts.prototype.getLatitude=function(e){l(e)||(e=ie.default),RE.latitude=this.conformalLatitude,RE.longitude=this.longitude,RE.height=0;let t=this.ellipsoid.cartographicToCartesian(RE,RDe);return e.cartesianToCartographic(t,RE),RE.latitude};var VDe=new En,GDe=new m,ZDe=new m;ts.fromCartesian=function(e,t){let n=Z.signNotZero(e.z),i=ts.NORTH_POLE_TANGENT_PLANE,o=ts.SOUTH_POLE;n<0&&(i=ts.SOUTH_POLE_TANGENT_PLANE,o=ts.NORTH_POLE);let r=VDe;r.origin=i.ellipsoid.scaleToGeocentricSurface(e,r.origin),r.direction=m.subtract(r.origin,o,GDe),m.normalize(r.direction,r.direction);let s=fi.rayPlane(r,i.plane,ZDe),a=m.subtract(s,o,s),c=m.dot(i.xAxis,a),d=n*m.dot(i.yAxis,a);return l(t)?(t.position=new D(c,d),t.tangentPlane=i,t):new ts(new D(c,d),i)};ts.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+Z.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!==dn.RHUMB){let p=D.subtract(t.position,e.position,KDe),g=D.dot(t.position,p)/D.dot(p,p);if(g>0&&g<1){let f=D.add(t.position,D.multiplyByScalar(p,-g,p),JDe),b=Wc.clone(t,jDe);b.position=f;let x=b.getLatitude(n);r.south=Math.min(r.south,x),r.north=Math.max(r.north,x),Math.abs(c)>Math.abs(x)&&(d=x)}}let u=t.x*e.y-e.x*t.y,h=Math.sign(u);h!==0&&(h*=D.angleBetween(t.position,e.position)),d>=0&&(o.northAngle+=h),d<=0&&(o.southAngle+=h)}var Uae=new Wc,qDe=new Wc,im={northAngle:0,southAngle:0,westOverIdl:0,eastOverIdl:0};om.computeRectangleFromPositions=function(e,t,n,i){if(l(i)||(i=new le),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,im.northAngle=0,im.southAngle=0,im.westOverIdl=Number.POSITIVE_INFINITY,im.eastOverIdl=Number.NEGATIVE_INFINITY;let o=e.length,r=Wc.fromCartesian(e[0],qDe);for(let s=1;sim.eastOverIdl-im.westOverIdl&&(i.west=im.westOverIdl,i.east=im.eastOverIdl,i.east>Z.PI&&(i.east=i.east-Z.TWO_PI),i.west>Z.PI&&(i.west=i.west-Z.TWO_PI)),Z.equalsEpsilon(Math.abs(im.northAngle),Z.TWO_PI,Z.EPSILON10)&&(i.north=Z.PI_OVER_TWO,i.east=Z.PI,i.west=-Z.PI),Z.equalsEpsilon(Math.abs(im.southAngle),Z.TWO_PI,Z.EPSILON10)&&(i.south=-Z.PI_OVER_TWO,i.east=Z.PI,i.west=-Z.PI),i};var $De=new Wc;function eQe(e,t,n){return e.height>=Z.PI||e.width>=Z.PI?Wc.fromCartesian(t[0],$De).tangentPlane:gs.fromPoints(t,n)}var kae=new ge;function tQe(e,t,n){return(i,o)=>{if(e.height>=Z.PI||e.width>=Z.PI){if(e.south<0&&e.north>0){l(o)||(o=[]);for(let s=0;s=Z.PI||e.width>=Z.PI)return(o,r)=>{if(e.south<0&&e.north>0){let s=n.cartesianToCartographic(o,kae);return l(r)||(r=new D),r.x=s.longitude/Z.PI,r.y=s.latitude/Z.PI_OVER_TWO,r}return Wc.fromCartesian(o,r)};let i=gs.fromPoints(t,n);return(o,r)=>i.projectPointsOntoPlane(o,r)}function iQe(e,t,n,i){return(o,r)=>!i&&(e.height>=Z.PI_OVER_TWO||e.width>=2*Z.PI_OVER_THREE)?ti.splitPolygonsOnEquator(o,t,n,r):o}function oQe(e,t,n,i){if(t.height>=Z.PI||t.width>=Z.PI)return Ke.fromRectangle(t,void 0,vae);let o=e,r=gs.fromPoints(o,n);return ti.computeBoundingRectangle(r.plane.normal,r.projectPointOntoPlane.bind(r),o,i,vae)}om.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,h=l(u),p=r.positions;if(p.length<3)return;let g=e.rectangle,f=ti.polygonsFromHierarchy(r,h,tQe(g,p,n),!s,n,iQe(g,n,d,s)),b=f.hierarchy,x=f.polygons,I=function(V){return V},_=h?ti.polygonsFromHierarchy(u,!0,I,!1,n).polygons:void 0;if(b.length===0)return;let E=b[0].outerRing,S=oQe(E,g,n,o),R=[],G=e._height,B=e._extrudedHeight,w=e._perPositionHeightExtrude||!Z.equalsEpsilon(G,B,0,Z.EPSILON2),F={perPositionHeight:s,vertexFormat:t,geometry:void 0,rotationAxis:eQe(g,E,n).plane.normal,projectTo2d:nQe(g,E,n),boundingRectangle:S,ellipsoid:n,stRotation:o,textureCoordinates:void 0,bottom:!1,top:!0,wall:!1,extrude:!1,arcType:d},P;if(w)for(F.extrude=!0,F.top=a,F.bottom=c,F.shadowVolume=e._shadowVolume,F.offsetAttribute=e._offsetAttribute,P=0;P 2) { dimension = ceil(log2(float(u_extentsLength))); } int regionIndex = getPolygonIndex(dimension, v_textureCoordinates); for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) { ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex); int positionsLength = positionsLengthAndExtents.x; int polygonExtentsIndex = positionsLengthAndExtents.y; lastPolygonIndex += 1; // Only compute signed distance for the relevant part of the atlas if (polygonExtentsIndex == regionIndex) { 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); float s = 1.0; // Check each edge for absolute distance for (int i = 0, j = positionsLength - 1; i < positionsLength; j = i, i++) { vec2 a = getPolygonPosition(lastPolygonIndex + i); vec2 b = getPolygonPosition(lastPolygonIndex + j); 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 xs(e){e=e??Y.EMPTY_OBJECT,this._polygons=[],this._totalPositions=0,this.enabled=e.enabled??!0,this.inverse=e.inverse??!1,this.polygonAdded=new Ce,this.polygonRemoved=new Ce,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;iGE.equals(t,e))};xs.prototype.remove=function(e){let t=this._polygons,n=t.findIndex(i=>GE.equals(i,e));return n===-1?!1:(t.splice(n,1),this.polygonRemoved.raiseEvent(e,n),!0)};var aQe=new le;function cQe(e){let t=[],n=[],i=e.length;for(let r=0;rle.union(e[x].computeSphericalExtents(aQe),b,b),a),t[p]=void 0,n[p]=void 0,c=Math.max(a.height*2.5,.001),d=Math.max(a.width*2.5,.001),u=le.clone(a,u),u.south-=c,u.west-=d,u.north+=c,u.east+=d,u.south=Math.max(u.south,-Math.PI),u.west=Math.max(u.west,-Math.PI),u.north=Math.min(u.north,Math.PI),u.east=Math.min(u.east,Math.PI),p=-1}}t.push(u),n.push(h)}let o=new Map;return n.filter(l).forEach((r,s)=>r.forEach(a=>o.set(a,s))),{extentsList:t.filter(l),extentsIndexByPolygon:o}}xs.prototype.removeAll=function(){let e=this._polygons,t=e.length;for(let n=0;ns+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{e._signedDistanceComputeCommand=void 0}})}var Hae=new le,uQe=new le;xs.prototype.computeIntersectionWithBoundingVolume=function(e,t){let n=this._polygons,i=n.length,o=on.OUTSIDE;this.inverse&&(o=on.INSIDE);for(let r=0;r= 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 d0n=y(C(),1),cB=`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 m0n=y(C(),1),lB=`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 f0n=y(C(),1),dB=`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 A0n=y(C(),1),uB=`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 Ai(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??Y.EMPTY_OBJECT;let t=Math.min(e.mipmapLevels??7,Math.log2(Kt.maximumCubeMapSize));this._mipmapLevels=t,this._radianceMapComputeCommands=new Array(6),this._convolutionComputeCommands=new Array((t-1)*6),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((t-1)*6),this._radianceCubeMap=void 0,this._irradianceMapTexture=void 0,this._sphericalHarmonicCoefficients=Ai.DEFAULT_SPHERICAL_HARMONIC_COEFFICIENTS.slice(),this._lastTime=new j;let n=Math.pow(2,t-1);this._textureDimensions=new D(n,n),this._radiiAndDynamicAtmosphereColor=new m,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??Ai.AVERAGE_EARTH_GROUND_COLOR,this.groundAlbedo=e.groundAlbedo??.31}Object.defineProperties(Ai.prototype,{owner:{get:function(){return this._owner}},shouldRegenerateShaders:{get:function(){return this._shouldRegenerateShaders}},position:{get:function(){return this._position},set:function(e){m.equalsEpsilon(e,this._position,0,this.maximumPositionEpsilon)||(this._position=m.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}}});Ai._maximumComputeCommandCount=8;Ai._activeComputeCommandCount=0;Ai._nextFrameCommandQueue=[];Ai._queueCommand=(e,t)=>{if(Ai._activeComputeCommandCount>=Ai._maximumComputeCommandCount){Ai._nextFrameCommandQueue.push(e);return}t.commandList.push(e),Ai._activeComputeCommandCount++};Ai._updateCommandQueue=e=>{if(Ai._maximumComputeCommandCount=Math.log2(Kt.maximumCubeMapSize),Ai._nextFrameCommandQueue.length>0&&Ai._activeComputeCommandCounts,u_enuToFixedFrame:()=>c,u_faceDirection:()=>Pr.getDirection(h,Kae),u_positionWC:()=>r,u_brightnessSaturationGammaIntensity:()=>d,u_groundColor:()=>e.groundColor.withAlpha(e.groundAlbedo,gQe)},owner:e});f.postExecute=()=>{if(e.isDestroyed()||f.canceled){Ai._activeComputeCommandCount--;return}let b=e._radianceMapComputeCommands;b[g]=void 0;let x=new jr({context:n,colorTextures:[e._radianceMapTextures[g]]});x._bind(),e._radianceCubeMap[h].copyFromFramebuffer(),x._unBind(),x.destroy(),Ai._activeComputeCommandCount--,b.some(l)||(e._convolutionsCommandsDirty=!0,e._shouldRegenerateShaders=!0)},e._radianceMapComputeCommands[u]=f,Ai._queueCommand(f,t),u++}e._radianceCommandsDirty=!1}}function yQe(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=(h,p,g,f,b)=>()=>{if(e.isDestroyed()||h.canceled){Ai._activeComputeCommandCount--;return}let x=e._convolutionComputeCommands;x[p]=void 0,n.copyFace(t,g,f,b),c++,Ai._activeComputeCommandCount--,g.destroy(),e._specularMapTextures[p]=void 0;let I=e._specularMapTextures.length;c>=I&&(e._irradianceCommandDirty=!0,n.sampler=new sn({minificationFilter:en.LINEAR_MIPMAP_LINEAR}),e._shouldRegenerateShaders=!0,e._va.destroy(),e._va=void 0,e._convolveSP.destroy(),e._convolveSP=void 0)},u=0;for(let h=1;hh/(i-1),u_radianceTexture:()=>n??a.defaultTexture,u_faceDirection:()=>Pr.getDirection(p,Kae)}});x.postExecute=d(x,u,g,p,h),e._convolutionComputeCommands[u]=x,Ai._queueCommand(x,t),++u}r/=2,s/=2}}var Jae=new D(3,3);function CQe(e,t){let n=t.context,i=Jae,o=e._irradianceMapTexture;l(o)&&!o.isDestroyed()&&o.destroy(),o=new Wt({context:n,width:i.x,height:i.y,pixelDatatype:Ye.FLOAT,pixelFormat:tt.RGBA}),e._irradianceMapTexture=o;let r=e._irradianceMapFS;l(r)||(r=new Oe({sources:[cB]}),e._irradianceMapFS=r);let s=new Il({fragmentShaderSource:r,outputTexture:o,owner:e,uniformMap:{u_radianceMap:()=>e._radianceCubeMap??n.defaultTexture}});s.postExecute=()=>{if(e.isDestroyed()||s.canceled){Ai._activeComputeCommandCount--;return}e._irradianceTextureDirty=!1,e._irradianceComputeCommand=void 0,e._sphericalHarmonicCoefficientsDirty=!0,e._irradianceMapFS=void 0,Ai._activeComputeCommandCount--},e._irradianceComputeCommand=s,Ai._queueCommand(s,t),e._irradianceTextureDirty=!0}function xQe(e,t){let n=t.context;if(!l(e._irradianceMapTexture))return;let i=new jr({context:n,colorTextures:[e._irradianceMapTexture],destroyAttachments:!1}),o=Jae,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]=m.unpack(r,s*4),m.multiplyByScalar(e._sphericalHarmonicCoefficients[s],e.atmosphereScatteringIntensity,e._sphericalHarmonicCoefficients[s]);i.destroy(),e._irradianceMapTexture.destroy(),e._irradianceMapTexture=void 0,e._shouldRegenerateShaders=!0}Ai.prototype.update=function(e){let t=e.mode;if(!Ai.isDynamicUpdateSupported(e)||!this.enabled||!this.shouldUpdate||!l(this._position)||t===re.MORPHING){this._shouldRegenerateShaders=!1;return}Ai._updateCommandQueue(e);let i=e.atmosphere.dynamicLighting,o=fQe(this,e)||i===GA.SUNLIGHT&&!j.equalsEpsilon(e.time,this._lastTime,this.maximumSecondsDifference);if(this._shouldReset||o){this.reset(),this._shouldReset=!1,this._lastTime=j.clone(e.time,this._lastTime);return}if(this._radianceMapDirty&&(bQe(this,e),this._radianceMapDirty=!1),this._convolutionsCommandsDirty&&(yQe(this,e),this._convolutionsCommandsDirty=!1),this._irradianceCommandDirty&&(CQe(this,e),this._irradianceCommandDirty=!1),this._irradianceTextureDirty){this._shouldRegenerateShaders=!1;return}if(this._sphericalHarmonicCoefficientsDirty){xQe(this,e),this._sphericalHarmonicCoefficientsDirty=!1;return}this._shouldRegenerateShaders=!1};Ai.prototype.isDestroyed=function(){return!1};Ai.prototype.destroy=function(){let e=this._radianceMapComputeCommands.length;for(let t=0;t4?(xt(`Property texture property ${e.id} is an array of length ${e.arrayLength}, but may have at most a length of 4`),!1):t!==bt.SCALAR?(xt(`Property texture property ${e.id} is an array of type ${t}, but only SCALAR is supported`),!1):n!==Ut.UINT8?(xt(`Property texture property ${e.id} is an array with component type ${n}, but only UINT8 is supported`),!1):!0:bt.isVectorType(t)||t===bt.SCALAR?n!==Ut.UINT8?(xt(`Property texture property ${e.id} has component type ${n}, but only UINT8 is supported`),!1):!0:(xt(`Property texture property ${e.id} has an unsupported type`),!1)};var EQe=[void 0,"float","vec2","vec3","vec4"],TQe=[void 0,"int","ivec2","ivec3","ivec4"];fB.prototype.getGlslType=function(){let e=this._classProperty,t=bt.getComponentCount(e.type);return e.isArray&&(t=e.arrayLength),e.normalized?EQe[t]:TQe[t]};fB.prototype.unpackInShader=function(e){return this._classProperty.normalized?e:`${this.getGlslType()}(255.0 * ${e})`};function SQe(e){return e.map(function(t){return"rgba".charAt(t)}).join("")}var pB=fB;function Zz(e){e=e??Y.EMPTY_OBJECT;let t=e.propertyTexture,n=e.class,i=e.textures,o=t.extensions,r=t.extras,s={};if(l(t.properties))for(let a in t.properties)t.properties.hasOwnProperty(a)&&(s[a]=new pB({property:t.properties[a],classProperty:n.properties[a],textures:i}));this._name=e.name,this._id=e.id,this._class=n,this._properties=s,this._extras=r,this._extensions=o}Object.defineProperties(Zz.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},class:{get:function(){return this._class}},properties:{get:function(){return this._properties}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Zz.prototype.getProperty=function(e){return this._properties[e]};var wA=Zz;var wyn=y(C(),1);var Ryn=y(C(),1);function qae(e){e=e??Y.EMPTY_OBJECT;let t=e.property,n=e.classProperty;this._attribute=t.attribute,this._classProperty=n,this._min=t.min,this._max=t.max;let i=t.offset,o=t.scale,r=n.hasValueTransform||l(i)||l(o);i=i??n.offset,o=o??n.scale,i=n.unpackVectorAndMatrixTypes(i),o=n.unpackVectorAndMatrixTypes(o),this._offset=i,this._scale=o,this._hasValueTransform=r,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(qae.prototype,{attribute:{get:function(){return this._attribute}},hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},classProperty:{get:function(){return this._classProperty}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var AB=qae;function Bz(e){e=e??Y.EMPTY_OBJECT;let t=e.propertyAttribute,n=e.class,i={};if(l(t.properties))for(let o in t.properties)t.properties.hasOwnProperty(o)&&(i[o]=new AB({property:t.properties[o],classProperty:n.properties[o]}));this._name=e.name,this._id=e.id,this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(Bz.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},class:{get:function(){return this._class}},properties:{get:function(){return this._properties}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Bz.prototype.getProperty=function(e){return this._properties[e]};var jC=Bz;var Pyn=y(C(),1);function gB(e){e=e??Y.EMPTY_OBJECT,this._schema=e.schema;let t=e.propertyTables;this._propertyTableCount=l(t)?t.length:0,this._propertyTables=t,this._propertyTextures=e.propertyTextures,this._propertyAttributes=e.propertyAttributes,this._statistics=e.statistics,this._extras=e.extras,this._extensions=e.extensions}Object.defineProperties(gB.prototype,{schema:{get:function(){return this._schema}},statistics:{get:function(){return this._statistics}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}},propertyTableCount:{get:function(){return this._propertyTableCount}},propertyTables:{get:function(){return this._propertyTables}},propertyTextures:{get:function(){return this._propertyTextures}},propertyAttributes:{get:function(){return this._propertyAttributes}},propertyTablesByteLength:{get:function(){if(!l(this._propertyTables))return 0;let e=0,t=this._propertyTables.length;for(let n=0;n=r;)I=o[I-r];o.push(I),s[b]=x}x>kQe&&(t instanceof Uint16Array||t instanceof Uint8Array)?t=new Uint32Array(t):x>YQe&&t instanceof Uint8Array&&(t=new Uint16Array(t)),b===c?(c=x,t[a]=x):b===d?(d=x,t[a+1]=x):(u=x,t[a+2]=x),b=ece(i,c,d,u,p,g,f)}}e._triangleIndices=t,e._outlineCoordinatesTypedArray=new Float32Array(i)}function ece(e,t,n,i,o,r,s){let a=s?1:0,c=o?1:0,d=0,u=wz(e,t,a,c,d);if(u===0)return t;let h=0,p=o?1:0,g=r?1:0,f=wz(e,n,h,p,g);if(f===0)return n;let b=s?1:0,x=0,I=r?1:0,_=wz(e,i,b,x,I);if(_===0)return i;let E=u&f&_,S,R,G;if(E&1)S=0,R=1,G=2;else if(E&2)S=0,G=1,R=2;else if(E&4)R=0,S=1,G=2;else if(E&8)R=0,G=1,S=2;else if(E&16)G=0,S=1,R=2;else if(E&32)G=0,R=1,S=2;else{let P=Xz(u),A=Xz(f),T=Xz(_);return P>1&1)+(e>>2&1)+(e>>3&1)+(e>>4&1)+(e>>5&1)}fQ.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(tce(i));let s=new Wt({context:e,source:{arrayBufferView:o,mipLevels:r},width:n,height:1,pixelFormat:tt.LUMINANCE,sampler:new sn({wrapS:Ln.CLAMP_TO_EDGE,wrapT:Ln.CLAMP_TO_EDGE,minificationFilter:en.LINEAR_MIPMAP_LINEAR,magnificationFilter:pi.LINEAR})});return t.outlineTexture=s,s};function tce(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 nce(e,t){this._originalVertexCount=t,this._edges=new Set;for(let n=0;n{this._resourcesLoaded=!0}).catch(o=>{this._processError=o})),l(this._processError)){this._state=Ho.FAILED;let o=this._processError;this._processError=void 0,AQ(this,o)}let t=this._textureErrors.pop();if(l(t)){let o=this.getError("Failed to load glTF texture",t);throw o.name="TextureError",o}if(this._state===Ho.FAILED)return!1;let n=!1;try{n=this._process(e)}catch(o){this._state=Ho.FAILED,AQ(this,o)}let i=!1;try{i=this._processTextures(e)}catch(o){this._textureState=Ho.FAILED,AQ(this,o)}return this._incrementallyLoadTextures?n:n&&i};function B5e(e,t,n,i,o,r,s,a,c){let d=e.gltfJson,h=d.accessors[t].bufferView;return Mi.getVertexBufferLoader({gltf:d,gltfResource:e._gltfResource,baseResource:e._baseResource,frameState:c,bufferViewId:h,primitive:i,draco:o,spz:r,attributeSemantic:n,accessorId:t,asynchronous:e._asynchronous,loadBuffer:s,loadTypedArray:a})}function w5e(e,t,n,i,o,r,s){return Mi.getIndexBufferLoader({gltf:e.gltfJson,accessorId:t,gltfResource:e._gltfResource,baseResource:e._baseResource,frameState:s,primitive:n,draco:i,asynchronous:e._asynchronous,loadBuffer:o,loadTypedArray:r})}function X5e(e,t){let n=Mi.getBufferViewLoader({gltf:e.gltfJson,bufferViewId:t,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoaders.push(n),n}function Ace(e,t,n){let i=t.byteOffset,o=nd(e,t),r=t.count,s=Ud(t.type),a=t.componentType,c=J.getSizeInBytes(a),d=c*s,u=r*s;if(o===d)return n=new Uint8Array(n),J.createArrayBufferView(a,n.buffer,n.byteOffset+i,u);let h=J.createTypedArray(a,u),p=new DataView(n.buffer),g=new Array(s),f=LA(t.componentType);i=n.byteOffset+i;for(let b=0;b{let a=1/0,c=-1/0,d=1/0,u=-1/0,h=1/0,p=-1/0;for(let g=0;g{l(o)&&l(o.attributes)&&l(o.attributes[p])?O5e(I,_,s,a):l(r)?H5e(I,_,s,a):z5e(d,u,I,_,s,a)},I}function yce(e,t,n,i,o,r,s,a,c){let d=n.modelSemantic,u=d===lt.POSITION,h=d===lt.FEATURE_ID,p=u&&!s&&e._loadAttributesFor2D&&!c.scene3DOnly,g=u&&e._enablePick&&!c.context.webgl2,f=e._loadForClassification&&h,b=e._loadAttributesAsTypedArray,x=!b,I=b||p||g||f,S=bce(e,t,n,i,o,r,a?!1:x,a?!0:I,c),R=new $C.AttributeLoadPlan(S);return R.loadBuffer=x,R.loadTypedArray=I,R}function K5e(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=Pz(e,Is,i),d=c.modelSemantic,u=d===Is.TRANSLATION||d===Is.ROTATION||d===Is.SCALE,h=d===Is.TRANSLATION,p=e._loadAttributesAsTypedArray||s&&u||!o.context.instancedArrays,g=e._enablePick&&!o.context.webgl2,f=!p,b=e._loadAttributesFor2D&&!o.scene3DOnly;return bce(e,t,c,void 0,void 0,void 0,f,p||h&&(!a||b||g),o)}function J5e(e,t,n,i,o,r,s){let a=e.gltfJson.accessors[t],c=a.bufferView;if(!l(i)&&!l(c))return;let d=new a5e;d.count=a.count;let u=e._loadAttributesAsTypedArray,h=(e._loadIndicesForWireframe||e._enablePick)&&!s.context.webgl2,p=e._loadForClassification&&o,f=!u,b=u||h||p,_=w5e(e,t,n,i,r?!1:f,r?!0:b,s),E=e._geometryLoaders.length;e._geometryLoaders.push(_);let S=_.load();e._loaderPromises.push(S),e._geometryCallbacks[E]=()=>{d.indexDatatype=_.indexDatatype,d.buffer=_.buffer,d.typedArray=_.typedArray};let R=new $C.IndicesLoadPlan(d);return R.loadBuffer=f,R.loadTypedArray=b,R}function El(e,t,n,i){let o=e.gltfJson,r=id.getImageIdFromTexture({gltf:o,textureId:t.index,supportedImageFormats:e._supportedImageFormats});if(!l(r))return;let s=Mi.getTextureLoader({gltf:o,textureInfo:t,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:e._supportedImageFormats,frameState:n,asynchronous:e._asynchronous}),a=id.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=Ho.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 j5e(e,t,n){let{diffuseTexture:i,specularGlossinessTexture:o,diffuseFactor:r,specularFactor:s,glossinessFactor:a}=t,c=new E5e;return l(i)&&(c.diffuseTexture=El(e,i,n)),l(o)&&(c.specularGlossinessTexture=El(e,o,n)),c.diffuseFactor=Yd(ce,r),c.specularFactor=Yd(m,s),c.glossinessFactor=a,c}function q5e(e,t,n){let{baseColorTexture:i,metallicRoughnessTexture:o,baseColorFactor:r,metallicFactor:s,roughnessFactor:a}=t,c=new _5e;return l(i)&&(c.baseColorTexture=El(e,i,n)),l(o)&&(c.metallicRoughnessTexture=El(e,o,n)),c.baseColorFactor=Yd(ce,r),c.metallicFactor=s,c.roughnessFactor=a,c}function $5e(e,t,n){let{specularFactor:i,specularTexture:o,specularColorFactor:r,specularColorTexture:s}=t,a=new T5e;return l(o)&&(a.specularTexture=El(e,o,n)),l(s)&&(a.specularColorTexture=El(e,s,n)),a.specularFactor=i,a.specularColorFactor=Yd(m,r),a}function eUe(e,t,n){let{anisotropyStrength:i=Wz.DEFAULT_ANISOTROPY_STRENGTH,anisotropyRotation:o=Wz.DEFAULT_ANISOTROPY_ROTATION,anisotropyTexture:r}=t,s=new Wz;return l(r)&&(s.anisotropyTexture=El(e,r,n)),s.anisotropyStrength=i,s.anisotropyRotation=o,s}function tUe(e,t,n){let{clearcoatFactor:i=Fz.DEFAULT_CLEARCOAT_FACTOR,clearcoatTexture:o,clearcoatRoughnessFactor:r=Fz.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR,clearcoatRoughnessTexture:s,clearcoatNormalTexture:a}=t,c=new Fz;return l(o)&&(c.clearcoatTexture=El(e,o,n)),l(s)&&(c.clearcoatRoughnessTexture=El(e,s,n)),l(a)&&(c.clearcoatNormalTexture=El(e,a,n)),c.clearcoatFactor=i,c.clearcoatRoughnessFactor=r,c}function nUe(e,t,n){let i=new S5e,o=t.extensions??Y.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;return i.unlit=l(o.KHR_materials_unlit),l(r)?i.specularGlossiness=j5e(e,r,n):(l(d)&&(i.metallicRoughness=q5e(e,d,n)),l(s)&&!i.unlit&&(i.specular=$5e(e,s,n)),l(a)&&!i.unlit&&(i.anisotropy=eUe(e,a,n)),l(c)&&!i.unlit&&(i.clearcoat=tUe(e,c,n))),l(t.emissiveTexture)&&(i.emissiveTexture=El(e,t.emissiveTexture,n)),l(t.normalTexture)&&!e._loadForClassification&&(i.normalTexture=El(e,t.normalTexture,n)),l(t.occlusionTexture)&&(i.occlusionTexture=El(e,t.occlusionTexture,n)),i.emissiveFactor=Yd(m,t.emissiveFactor),i.alphaMode=t.alphaMode,i.alphaCutoff=t.alphaCutoff,i.doubleSided=t.doubleSided,i}function Cce(e,t){let n=new hce;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 xce(e,t,n,i){let o=new hce,r=e.featureIds;return o.featureCount=n,o.propertyTableId=t,o.setIndex=gce(r.attribute),o.positionalLabel=i,o}function Ice(e,t){let n=new pce;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 _ce(e,t,n,i){let o=new pce,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 iUe(e,t,n,i){let o=new fce;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=El(e,r,n,sn.NEAREST);let a=(l(r.channels)?r.channels:[0]).map(function(c){return"rgba".charAt(c)}).join("");return o.textureReader.channels=a,o}function oUe(e,t,n,i,o,r){let s=new fce,a=t.featureIds,c=a.texture;return s.featureCount=o,s.propertyTableId=n,s.textureReader=El(e,c,i,sn.NEAREST),s.textureReader.channels=a.channels,s.positionalLabel=r,s}function rUe(e,t,n,i,o){let r=new c5e,s=void 0,a=void 0,c=void 0,d=!1;for(let u in t){if(!t.hasOwnProperty(u))continue;let h=t[u],p=Pz(e,lt,u),g=yce(e,h,p,s,a,c,d,n,o);r.attributes.push(g.attribute),i.attributePlans.push(g)}return r}function sUe(e,t,n,i){let o=new l5e,r=new $C(o);e._primitiveLoadPlans.push(r);let s=t.material;l(s)&&(o.material=nUe(e,e.gltfJson.materials[s],i));let a=t.extensions??Y.EMPTY_OBJECT,c=!1,d=a.CESIUM_primitive_outline;e._loadPrimitiveOutline&&l(d)&&(c=!0,r.needsOutlines=!0,r.outlineIndices=aUe(e,d,r));let u=a.KHR_spz_gaussian_splats_compression;l(u)&&(c=!0,r.needsGaussianSplats=!0);let h=e._loadForClassification,p=a.KHR_draco_mesh_compression,g=!1,f=t.attributes;if(l(f))for(let G in f){if(!f.hasOwnProperty(G))continue;let B=f[G],w=Pz(e,lt,G),F=w.modelSemantic;if(h&&!Y5e(F))continue;F===lt.FEATURE_ID&&(g=!0);let P=yce(e,B,w,t,p,u,n,c,i);r.attributePlans.push(P),o.attributes.push(P.attribute)}let b=t.targets;if(l(b)&&!h)for(let G=0;Gn[s]);let r=t.inverseBindMatrices;if(l(r)){let s=e.gltfJson.accessors[r];i.inverseBindMatrices=gQ(e,s)}else i.inverseBindMatrices=new Array(o.length).fill(X.IDENTITY);return i}function bUe(e,t){let n=e.gltfJson.skins;if(e._loadForClassification||!l(n))return[];let i=n.map(function(r,s){let a=gUe(e,r,t);return a.index=s,a}),o=e.gltfJson.nodes;for(let r=0;r0&&(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)};XE.prototype.isDestroyed=function(){return!1};XE.prototype.destroy=function(){return this._renderFramebuffer.destroy(),this._colorFramebuffer.destroy(),me(this)};var ZB=XE;var _In=y(C(),1);var AIn=y(C(),1);var rd={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===rd.RGBA4||e===rd.RGBA8||e===rd.RGBA16F||e===rd.RGBA32F||e===rd.RGB5_A1||e===rd.RGB565||e===rd.DEPTH_COMPONENT16||e===rd.STENCIL_INDEX8||e===rd.DEPTH_STENCIL||e===rd.DEPTH24_STENCIL8},getColorFormat:function(e){return e===ne.FLOAT?rd.RGBA32F:e===ne.HALF_FLOAT_OES?rd.RGBA16F:rd.RGBA8}},Tl=Object.freeze(rd);function BB(e){e=e??Y.EMPTY_OBJECT;let t=e.context,n=t._gl,i=Kt.maximumRenderbufferSize,o=e.format??Tl.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(BB.prototype,{format:{get:function(){return this._format}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});BB.prototype._getRenderbuffer=function(){return this._renderbuffer};BB.prototype.isDestroyed=function(){return!1};BB.prototype.destroy=function(){return this._gl.deleteRenderbuffer(this._renderbuffer),me(this)};var Hd=BB;function Hs(e){e=e??Y.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(Hs.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}}});Hs.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])};Hs.prototype.update=function(e,t,n,i,o,r){if(i=e.msaa?i??1:1,o=o??(this._color?this._pixelDatatype??Ye.UNSIGNED_BYTE:void 0),r=r??(this._color?this._pixelFormat??tt.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=Tl.getColorFormat(o);this._colorRenderbuffers[s]=new Hd({context:e,width:t,height:n,format:a,numSamples:this._numSamples})}}this._depthStencil&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?(this._depthStencilTexture=new Wt({context:e,width:t,height:n,pixelFormat:tt.DEPTH_STENCIL,pixelDatatype:Ye.UNSIGNED_INT_24_8,sampler:sn.NEAREST}),this._numSamples>1&&(this._depthStencilRenderbuffer=new Hd({context:e,width:t,height:n,format:Tl.DEPTH24_STENCIL8,numSamples:this._numSamples}))):this._depthStencilRenderbuffer=new Hd({context:e,width:t,height:n,format:Tl.DEPTH_STENCIL})),this._depth&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?this._depthTexture=new Wt({context:e,width:t,height:n,pixelFormat:tt.DEPTH_COMPONENT,pixelDatatype:Ye.UNSIGNED_INT,sampler:sn.NEAREST}):this._depthRenderbuffer=new Hd({context:e,width:t,height:n,format:Tl.DEPTH_COMPONENT16})),this._numSamples>1?this._multisampleFramebuffer=new ZB({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 jr({context:e,colorTextures:this._colorTextures,depthTexture:this._depthTexture,depthRenderbuffer:this._depthRenderbuffer,depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1})}};Hs.prototype.getColorTexture=function(e){return e=e??0,this._colorTextures[e]};Hs.prototype.setColorTexture=function(e,t){t=t??0,this._attachmentsDirty=e!==this._colorTextures[t],this._colorTextures[t]=e};Hs.prototype.getColorRenderbuffer=function(e){return e=e??0,this._colorRenderbuffers[e]};Hs.prototype.setColorRenderbuffer=function(e,t){t=t??0,this._attachmentsDirty=e!==this._colorRenderbuffers[t],this._colorRenderbuffers[t]=e};Hs.prototype.getDepthRenderbuffer=function(){return this._depthRenderbuffer};Hs.prototype.setDepthRenderbuffer=function(e){this._attachmentsDirty=e!==this._depthRenderbuffer,this._depthRenderbuffer=e};Hs.prototype.getDepthTexture=function(){return this._depthTexture};Hs.prototype.setDepthTexture=function(e){this._attachmentsDirty=e!==this._depthTexture,this._depthTexture=e};Hs.prototype.getDepthStencilRenderbuffer=function(){return this._depthStencilRenderbuffer};Hs.prototype.setDepthStencilRenderbuffer=function(e){this._attachmentsDirty=e!==this._depthStencilRenderbuffer,this._depthStencilRenderbuffer=e};Hs.prototype.getDepthStencilTexture=function(){return this._depthStencilTexture};Hs.prototype.setDepthStencilTexture=function(e){this._attachmentsDirty=e!==this._depthStencilTexture,this._depthStencilTexture=e};Hs.prototype.prepareTextures=function(e,t){this._numSamples>1&&this._multisampleFramebuffer.blitFramebuffers(e,t)};Hs.prototype.clear=function(e,t,n){let i=t.framebuffer;t.framebuffer=this.framebuffer,t.execute(e,n),t.framebuffer=i};Hs.prototype.destroyFramebuffer=function(){this._framebuffer=this._framebuffer&&this._framebuffer.destroy(),this._multisampleFramebuffer=this._multisampleFramebuffer&&this._multisampleFramebuffer.destroy()};Hs.prototype.destroy=function(){if(this._color){let e=this._colorTextures,t=this._colorRenderbuffers;for(let n=0;n=s.clientWidth)d=!0;else{if(E.x>s.clientWidth*.5){a.width=E.x,c.frustum.right=p.x-I,vc=XB(r,n,c,vc),mc.clipToGLWindowCoordinates(a,vc,vz),a.x+=E.x,c.position.x=-c.position.x;let S=c.frustum.right;c.frustum.right=-c.frustum.left,c.frustum.left=-S,vc=XB(r,n,c,vc),mc.clipToGLWindowCoordinates(a,vc,Nz)}else{a.x+=E.x,a.width-=E.x,c.frustum.left=-p.x-I,vc=XB(r,n,c,vc),mc.clipToGLWindowCoordinates(a,vc,vz),a.x=a.x-a.width,c.position.x=-c.position.x;let S=c.frustum.left;c.frustum.left=-c.frustum.right,c.frustum.right=-S,vc=XB(r,n,c,vc),mc.clipToGLWindowCoordinates(a,vc,Nz)}m.clone(g,c.position),c.frustum=f.clone(),i=D.clone(vz,i),(i.x<0||i.x>s.clientWidth)&&(i.x=Nz.x)}}if(o.mode!==re.SCENE2D||d){if(vc=XB(r,n,c,vc),vc.z<0&&!(c.frustum instanceof gn)&&!(c.frustum instanceof qr))return;i=mc.clipToGLWindowCoordinates(a,vc,i)}return i.y=s.clientHeight-i.y,i};mc.worldToDrawingBufferCoordinates=function(e,t,n){if(n=mc.worldToWindowCoordinates(e,t,n),!!l(n))return mc.transformWindowToDrawingBuffer(e,n,n)};var WA=new m,HUe=new ge;mc.computeActualEllipsoidPosition=function(e,t,n){let i=e.mode;if(i===re.SCENE3D)return m.clone(t,n);let o=e.mapProjection,r=o.ellipsoid.cartesianToCartographic(t,HUe);if(!l(r))return;if(o.project(r,WA),i===re.COLUMBUS_VIEW)return m.fromElements(WA.z,WA.x,WA.y,n);if(i===re.SCENE2D)return m.fromElements(0,WA.x,WA.y,n);let s=e.morphTime;return m.fromElements(Z.lerp(WA.z,t.x,s),Z.lerp(WA.x,t.y,s),Z.lerp(WA.y,t.z,s),n)};var Vce=new m,Gce=new m,Zce=new X;mc.clipToGLWindowCoordinates=function(e,t,n){return m.divideByScalar(t,t.w,Vce),X.computeViewportTransformation(e,0,1,Zce),X.multiplyByPoint(Zce,Vce,Gce),D.fromCartesian3(Gce,n)};mc.transformWindowToDrawingBuffer=function(e,t,n){let i=e.canvas,o=e.drawingBufferWidth/i.clientWidth,r=e.drawingBufferHeight/i.clientHeight;return D.fromElements(t.x*o,t.y*r,n)};var zUe=new ce,Bce=new ce;mc.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 g=n*r.log2FarDepthFromNearPlusOne,f=Math.pow(2,g)-1;n=c*(1-a/(f+a))/(c-a)}let d=e.view.passState.viewport,u=ce.clone(ce.UNIT_W,zUe);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 h,p=e.camera.frustum;if(l(p.fovy)){h=X.multiplyByVector(r.inverseViewProjection,u,Bce);let g=1/h.w;m.multiplyByScalar(h,g,h)}else{let g=p.offCenterFrustum;l(g)&&(p=g),h=Bce,h.x=(u.x*(p.right-p.left)+p.left+p.right)*.5,h.y=(u.y*(p.top-p.bottom)+p.bottom+p.top)*.5,h.z=(u.z*(a-c)-a-c)*.5,h.w=1,h=X.multiplyByVector(r.inverseView,h,h)}return m.fromCartesian4(h,i)};var to=mc;var cEn=y(C(),1);var x_n=y(C(),1);var FE={};FE._deprecationWarning=_r;var FA=Uint32Array.BYTES_PER_ELEMENT;FE.parse=function(e,t){let n=t??0;t=n;let i=new Uint8Array(e),o=new DataView(e);t+=FA;let r=o.getUint32(t,!0);if(r!==1)throw new de(`Only Batched 3D Model version 1 is supported. Version ${r} is not.`);t+=FA;let s=o.getUint32(t,!0);t+=FA;let a=o.getUint32(t,!0);t+=FA;let c=o.getUint32(t,!0);t+=FA;let d=o.getUint32(t,!0);t+=FA;let u=o.getUint32(t,!0);t+=FA;let h;d>=570425344?(t-=FA*2,h=a,d=c,u=0,a=0,c=0,FE._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-=FA,h=d,d=a,u=c,a=0,c=0,FE._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:h??0}:(p=mr(i,t,a),t+=a);let g=new Uint8Array(e,t,c);t+=c;let f,b;d>0&&(f=mr(i,t,d),t+=d,u>0&&(b=new Uint8Array(e,t,u),b=new Uint8Array(b),t+=u));let x=n+s-t;if(x===0)throw new de("glTF byte length must be greater than 0.");let I;return t%4===0?I=new Uint8Array(e,t,x):(FE._deprecationWarning("b3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),I=new Uint8Array(i.subarray(t,t+x))),{batchLength:h,featureTableJson:p,featureTableBinary:g,batchTableJson:f,batchTableBinary:b,gltf:I}};var WB=FE;var T_n=y(C(),1);function FB(e,t){this.json=e,this.buffer=t,this._cachedTypedArrays={},this.featuresLength=0}function wce(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 KUe(e,t,n,i){let o=e._cachedTypedArrays,r=o[t];return l(r)||(r=J.createTypedArray(n,i),o[t]=r),r}FB.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,wce(this,e,t,n,1,i.byteOffset)):i};FB.prototype.hasProperty=function(e){return l(this.json[e])};FB.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)),wce(this,e,t,n,this.featuresLength,i.byteOffset)):KUe(this,e,t,i)};FB.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&&(f=mr(i,t,d),t+=d,u>0&&(b=new Uint8Array(e,t,u),b=new Uint8Array(b),t+=u));let x=n+s-t;if(x===0)throw new de("glTF byte length must be greater than 0.");let I;return t%4===0?I=new Uint8Array(e,t,x):(yQ._deprecationWarning("i3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),I=new Uint8Array(i.subarray(t,t+x))),{gltfFormat:h,featureTableJson:p,featureTableBinary:g,batchTableJson:f,batchTableBinary:b,gltf:I}};var NB=yQ;var MA={NOT_LOADED:0,LOADING:1,PROCESSING:2,POST_PROCESSING:3,READY:4,FAILED:5,UNLOADED:6},CQ=Tn.Attribute,Ake=Tn.FeatureIdAttribute,vce=Tn.Instances;function vA(e){e=e??Y.EMPTY_OBJECT;let t=e.i3dmResource,n=e.arrayBuffer,i=e.baseResource,o=e.byteOffset??0,r=e.releaseGltfJson??!1,s=e.asynchronous??!0,a=e.incrementallyLoadTextures??!0,c=e.upAxis??ho.Y,d=e.forwardAxis??ho.X,u=e.loadAttributesAsTypedArray??!1,h=e.loadIndicesForWireframe??!1,p=e.loadPrimitiveOutline??!0,g=e.enablePick??!1;i=l(i)?i:t.clone(),this._i3dmResource=t,this._baseResource=i,this._arrayBuffer=n,this._byteOffset=o,this._releaseGltfJson=r,this._asynchronous=s,this._incrementallyLoadTextures=a,this._upAxis=c,this._forwardAxis=d,this._loadAttributesAsTypedArray=u,this._loadIndicesForWireframe=h,this._loadPrimitiveOutline=p,this._enablePick=g,this._state=MA.NOT_LOADED,this._promise=void 0,this._gltfLoader=void 0,this._buffers=[],this._components=void 0,this._transform=X.IDENTITY,this._batchTable=void 0,this._featureTable=void 0,this._instancesLength=0}l(Object.create)&&(vA.prototype=Object.create(Yi.prototype),vA.prototype.constructor=vA);Object.defineProperties(vA.prototype,{texturesLoaded:{get:function(){return this._gltfLoader?.texturesLoaded}},cacheKey:{get:function(){}},components:{get:function(){return this._components}}});vA.prototype.load=function(){if(l(this._promise))return this._promise;let e=NB.parse(this._arrayBuffer,this._byteOffset),t=e.featureTableJson,n=e.featureTableBinary,i=e.batchTableJson,o=e.batchTableBinary,r=e.gltfFormat,s=new Sh(t,n);this._featureTable=s;let a=s.getGlobalProperty("INSTANCES_LENGTH");if(s.featuresLength=a,!l(a))throw new de("Feature table global property: INSTANCES_LENGTH must be defined");this._instancesLength=a;let c=s.getGlobalProperty("RTC_CENTER",J.FLOAT,3);l(c)&&(this._transform=X.fromTranslation(m.fromArray(c))),this._batchTable={json:i,binary:o};let d={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(r===0){let h=$l(e.gltf);h=h.replace(/[\s\0]+$/,"");let p=this._baseResource.getDerivedResource({url:h});d.gltfResource=p,d.baseResource=p}else d.gltfResource=this._i3dmResource,d.typedArray=e.gltf;let u=new Od(d);return this._gltfLoader=u,this._state=MA.LOADING,this._promise=u.load().then(()=>{if(!this.isDestroyed())return this._state=MA.PROCESSING,this}).catch(h=>{if(!this.isDestroyed())throw gke(this,h)}),this._promise};function gke(e,t){return e.unload(),e._state=MA.FAILED,e.getError("Failed to load i3dm",t)}vA.prototype.process=function(e){if(this._state===MA.READY)return!0;let t=this._gltfLoader,n=!1;if(this._state===MA.PROCESSING&&(n=t.process(e)),!n)return!1;let i=t.components;return i.transform=X.multiplyTransformation(this._transform,i.transform,i.transform),Cke(this,i,e),bke(this,i),this._components=i,this._arrayBuffer=void 0,this._state=MA.READY,!0};function bke(e,t){let n=e._batchTable,i=e._instancesLength;if(i===0)return;let o;if(l(n.json))o=PA({count:i,batchTable:n.json,binaryBody:n.binary});else{let r=new _l({name:Ch.BATCH_TABLE_CLASS_NAME,count:i});o=new fa({schema:{},propertyTables:[r]})}t.structuralMetadata=o}var xQ=new m,Uz=new Array(4),yke=new X;function Cke(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=Ike(o,r),h;c&&(h=new Float32Array(4*r));let p;d&&(p=new Float32Array(3*r));let g=new Float32Array(r),f=m.unpackArray(u),b=new m,x=new m,I=new m,_=new m,E=new $,S=new Pe,R=new Array(4),G=new m,B=new Array(3),w=new X;if(!l(s)||m.equals(m.unpack(s),m.ZERO)){let N=ue.fromPoints(f);for(i=0;i0&&(N.instances=Q?xke(F):F,Q=!0)}}function xke(e){let t=new vce;t.transformInWorldSpace=e.transformInWorldSpace;let n=e.attributes,i=n.length;for(let 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};PE.prototype.clampTime=function(e){let t=this.times;return Z.clamp(e,t[0],t[t.length-1])};var yo=PE;function ME(e){this._value=e,this._valueType=yo.getPointType(e)}Object.defineProperties(ME.prototype,{value:{get:function(){return this._value}}});ME.prototype.findTimeInterval=function(e){};ME.prototype.wrapTime=function(e){return 0};ME.prototype.clampTime=function(e){return 0};ME.prototype.evaluate=function(e,t){let n=this._value,i=this._valueType;return i===Number?n:i.clone(n,t)};var QB=ME;var QTn=y(C(),1);var VTn=y(C(),1);function vE(e){e=e??Y.EMPTY_OBJECT;let t=e.points,n=e.times;this._times=n,this._points=t,this._pointType=yo.getPointType(t[0]),this._lastTimeIndex=0}Object.defineProperties(vE.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});vE.prototype.findTimeInterval=yo.prototype.findTimeInterval;vE.prototype.wrapTime=yo.prototype.wrapTime;vE.prototype.clampTime=yo.prototype.clampTime;vE.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 m),m.lerp(n[o],n[o+1],r,t))};var i0=vE;var BTn=y(C(),1);var Nce={};Nce.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]=m.subtract(r[a],m.multiplyByScalar(s[a+1],o[a],s[a]),s[a]);return s};var NE=Nce;var Dce=[],Qce=[],Uce=[],kce=[];function Lke(e,t,n){let i=Dce,o=Uce,r=Qce,s=kce;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 m),m.clone(t,c),a=1;a0&&e.afterRender.push(a._raiseStartEvent)),a.loop===od.REPEAT)g=g-Math.floor(g);else if(a.loop===od.MIRRORED_REPEAT){let I=Math.floor(g),_=g-I;g=I%2===1?1-_:_}a.reverse&&(g=1-g);let x=g*d*a.multiplier;x=Z.clamp(x,a.localStartTime,a.localStopTime),a.animate(x),a.update.numberOfListeners>0&&(a._updateEventTime=x,e.afterRender.push(a._raiseUpdateEvent)),i=!0,b||(a._state=Lh.STOPPED,a.stop.numberOfListeners>0&&e.afterRender.push(a._raiseStopEvent),a.removeOnStop&&IQ.push(a))}}n=IQ.length;for(let s=0;sZ.EPSILON3}};var ew=Hce;var _Ln=y(C(),1);var pLn=y(C(),1),tw=`#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 zce={name:"ImageBasedLightingPipelineStage"},Nke=new D;zce.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,be.FRAGMENT),r.addUniform("vec2","model_iblFactor",be.FRAGMENT),ph.isSupported(n.context)&&((i.useSphericalHarmonics||i.useSpecularEnvironmentMaps||i.enabled)&&r.addUniform("mat3","model_iblReferenceFrameMatrix",be.FRAGMENT),l(s)&&r.addDefine("COMPUTE_POSITION_WC_ATMOSPHERE",void 0,be.BOTH),l(a)&&l(a[0])?(r.addDefine("DIFFUSE_IBL",void 0,be.FRAGMENT),r.addDefine("CUSTOM_SPHERICAL_HARMONICS",void 0,be.FRAGMENT),r.addUniform("vec3","model_sphericalHarmonicCoefficients[9]",be.FRAGMENT)):i.useDefaultSphericalHarmonics&&r.addDefine("DIFFUSE_IBL",void 0,be.FRAGMENT),l(i.specularEnvironmentCubeMap)&&i.specularEnvironmentCubeMap.ready||l(s)?(r.addDefine("SPECULAR_IBL",void 0,be.FRAGMENT),r.addDefine("CUSTOM_SPECULAR_IBL",void 0,be.FRAGMENT),r.addUniform("samplerCube","model_specularEnvironmentMaps",be.FRAGMENT),r.addUniform("float","model_specularEnvironmentMapsMaximumLOD",be.FRAGMENT)):t.useDefaultSpecularMaps&&r.addDefine("SPECULAR_IBL",void 0,be.FRAGMENT)),r.addFragmentLines(tw);let c={model_iblFactor:function(){return D.multiplyByScalar(i.imageBasedLightingFactor,o?.intensity||1,Nke)},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=Lt(c,e.uniformMap)};var nw=zce;var PLn=y(C(),1);var ZLn=y(C(),1);var Dke=Z.EPSILON16;function zz(e){e=e??Y.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(zz.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=Z.clamp(e,this.minimumValue,this.maximumValue),Z.equalsEpsilon(this._currentValue,e,Dke)||(this._currentValue=e,this.runtimeArticulation._dirty=!0)}}});var Qke=new m,Hz=new $;zz.prototype.applyStageToMatrix=function(e){let t=this.type,n=this.currentValue,i=Qke,o;switch(t){case Pc.XROTATE:o=$.fromRotationX(Z.toRadians(n),Hz),e=X.multiplyByMatrix3(e,o,e);break;case Pc.YROTATE:o=$.fromRotationY(Z.toRadians(n),Hz),e=X.multiplyByMatrix3(e,o,e);break;case Pc.ZROTATE:o=$.fromRotationZ(Z.toRadians(n),Hz),e=X.multiplyByMatrix3(e,o,e);break;case Pc.XTRANSLATE:i.x=n,i.y=0,i.z=0,e=X.multiplyByTranslation(e,i,e);break;case Pc.YTRANSLATE:i.x=0,i.y=n,i.z=0,e=X.multiplyByTranslation(e,i,e);break;case Pc.ZTRANSLATE:i.x=0,i.y=0,i.z=n,e=X.multiplyByTranslation(e,i,e);break;case Pc.XSCALE:i.x=n,i.y=1,i.z=1,e=X.multiplyByScale(e,i,e);break;case Pc.YSCALE:i.x=1,i.y=n,i.z=1,e=X.multiplyByScale(e,i,e);break;case Pc.ZSCALE:i.x=1,i.y=1,i.z=n,e=X.multiplyByScale(e,i,e);break;case Pc.UNIFORMSCALE:e=X.multiplyByUniformScale(e,n,e);break;default:break}return e};var iw=zz;function _Q(e){e=e??Y.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,Uke(this)}Object.defineProperties(_Q.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 Uke(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 Kce={name:"ModelClippingPlanesPipelineStage"},Oke=new D;Kce.process=function(e,t,n){let i=t.clippingPlanes,o=n.context,r=e.shaderBuilder;r.addDefine("HAS_CLIPPING_PLANES",void 0,be.FRAGMENT),r.addDefine("CLIPPING_PLANES_LENGTH",i.length,be.FRAGMENT),i.unionClippingRegions&&r.addDefine("UNION_CLIPPING_REGIONS",void 0,be.FRAGMENT),Ws.useFloatTexture(o)&&r.addDefine("USE_CLIPPING_PLANES_FLOAT_TEXTURE",void 0,be.FRAGMENT);let s=Ws.getTextureResolution(i,o,Oke);r.addDefine("CLIPPING_PLANES_TEXTURE_WIDTH",s.x,be.FRAGMENT),r.addDefine("CLIPPING_PLANES_TEXTURE_HEIGHT",s.y,be.FRAGMENT),r.addUniform("sampler2D","model_clippingPlanes",be.FRAGMENT),r.addUniform("vec4","model_clippingPlanesEdgeStyle",be.FRAGMENT),r.addUniform("mat4","model_clippingPlanesMatrix",be.FRAGMENT),r.addFragmentLines(sw);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(){return t._clippingPlanesMatrix}};e.uniformMap=Lt(a,e.uniformMap)};var aw=Kce;var m1n=y(C(),1);var o1n=y(C(),1),cw=`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 s1n=y(C(),1),lw=`void modelClippingPolygonsStage() { vec2 clippingPosition = v_clippingPosition; int regionIndex = v_regionIndex; czm_clipPolygons(model_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex); } `;var Jce={name:"ModelClippingPolygonsPipelineStage"};Jce.process=function(e,t,n){let i=t.clippingPolygons,o=e.shaderBuilder;o.addDefine("ENABLE_CLIPPING_POLYGONS",void 0,be.BOTH),i.inverse&&o.addDefine("CLIPPING_INVERSE",void 0,be.FRAGMENT),o.addDefine("CLIPPING_POLYGON_REGIONS_LENGTH",i.extentsCount,be.BOTH),o.addUniform("sampler2D","model_clippingDistance",be.FRAGMENT),o.addUniform("sampler2D","model_clippingExtents",be.VERTEX),o.addVarying("vec2","v_clippingPosition"),o.addVarying("int","v_regionIndex","flat"),o.addVertexLines(cw),o.addFragmentLines(lw);let r={model_clippingDistance:function(){return i.clippingTexture},model_clippingExtents:function(){return i.extentsTexture}};e.uniformMap=Lt(r,e.uniformMap)};var dw=Jce;var p1n=y(C(),1);function jce(e,t){this._model=e,this._runtimeNode=t}Object.defineProperties(jce.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 uw=jce;var lRn=y(C(),1);var k1n=y(C(),1);var g1n=y(C(),1),mw=`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 y1n=y(C(),1),hw=`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 x1n=y(C(),1),fw=`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 EQ=new X,Hke=new X,zke=new X,$ce={name:"InstancingPipelineStage",_getInstanceTransformsAsMatrices:ole,_transformsToTypedArray:Jz};$ce.process=function(e,t,n){let i=t.instances,o=i.attributes[0].count,r=e.shaderBuilder;r.addDefine("HAS_INSTANCING"),r.addVertexLines(mw);let s=e.model,a=s.sceneGraph,c=e.runtimeNode,d=n.mode!==re.SCENE3D&&!n.scene3DOnly&&s._projectTo2D,u=s._enablePick&&!n.context.webgl2,h=[];lYe(e,n,i,h,d,u),mYe(e,n,i,h);let p={};if(i.transformInWorldSpace?(r.addDefine("USE_LEGACY_INSTANCING",void 0,be.VERTEX),r.addUniform("mat4","u_instance_modifiedModelView",be.VERTEX),r.addUniform("mat4","u_instance_nodeTransform",be.VERTEX),p.u_instance_modifiedModelView=function(){let g=X.multiplyTransformation(s.modelMatrix,a.components.transform,EQ);return d?X.multiplyTransformation(n.context.uniformState.view3D,g,EQ):(n.mode!==re.SCENE3D&&(g=Dt.basisTo2D(n.mapProjection,g,EQ)),X.multiplyTransformation(n.context.uniformState.view,g,EQ))},p.u_instance_nodeTransform=function(){return X.multiplyTransformation(a.axisCorrectionMatrix,c.computedTransform,Hke)},r.addVertexLines(fw)):r.addVertexLines(hw),d){r.addDefine("USE_2D_INSTANCING",void 0,be.VERTEX),r.addUniform("mat4","u_modelView2D",be.VERTEX);let g=n.context,f=X.fromTranslation(c.instancingReferencePoint2D,new X);p.u_modelView2D=function(){return X.multiplyTransformation(g.uniformState.view,f,zke)}}e.uniformMap=Lt(p,e.uniformMap),e.instanceCount=o,ci(e.attributes,h)};var pw=new X,Kke=new m;function Jke(e,t,n,i,o){let r=X.multiplyTransformation(t,e,pw);return r=X.multiplyTransformation(r,n,pw),o=Dt.basisTo2D(i.mapProjection,r,o),o}function jke(e,t,n,i,o){let r=X.fromTranslation(e,pw),s=X.multiplyTransformation(t,r,pw);s=X.multiplyTransformation(s,n,pw);let a=X.getTranslation(s,Kke);return o=to.computeActualEllipsoidPosition(i,a,o),o}function ele(e,t,n){let i=e.model,o=i.sceneGraph;e.runtimeNode.node.instances.transformInWorldSpace?(t=X.multiplyTransformation(i.modelMatrix,o.components.transform,t),n=X.multiplyTransformation(o.axisCorrectionMatrix,e.runtimeNode.computedTransform,n)):(t=X.clone(o.computedModelMatrix,t),t=X.multiplyTransformation(t,e.runtimeNode.computedTransform,t),n=X.clone(X.IDENTITY,n))}var tle=new X,nle=new X,qke=new X,$ke=new m;function eYe(e,t,n,i){let o=tle,r=nle;ele(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:kt.getNumberOfComponents(a.type),componentDatatype:a.componentDatatype,normalize:!1,offsetInBytes:a.byteOffset,strideInBytes:a.byteStride,instanceDivisor:1}),r.addAttribute("float",`a_instanceFeatureId_${a.setIndex}`))}}var Aw=$ce;var K1n=y(C(),1);var qz={};qz.name="ModelMatrixUpdateStage";qz.update=function(e,t,n){let i=n.mode!==re.SCENE3D;if(!(i&&t._model._projectTo2D)&&e._transformDirty){let o=i?t._computedModelMatrix2D:t._computedModelMatrix;rle(e,t,o,e.transformToRoot),e._transformDirty=!1}};function hYe(e,t,n){e.modelMatrix=X.multiplyTransformation(t,n,e.modelMatrix),e.cullFace=Mt.getCullFace(e.modelMatrix,e.primitiveType)}function rle(e,t,n,i){let o;i=X.multiplyTransformation(i,e.transform,new X),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=Lt(o,e.uniformMap)};var xw=dle;var TRn=y(C(),1);var ule={name:"ClassificationPipelineStage"};ule.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_CLASSIFICATION",void 0,be.BOTH);let o=e.runtimePrimitive;l(o.batchLengths)||pYe(t,o)};function pYe(e,t){let n=Mt.getAttributeBySemantic(e,lt.POSITION);if(!l(n))throw new de("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=Mt.getAttributeBySemantic(e,lt.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],h=r?i[0]:0,p=c[h],g=0;for(let b=1;bTYe(i,t,n)):[]}function TYe(e,t,n){let{getAttributeByName:i,getAttributeInfo:o,sanitizeGlslIdentifier:r}=Mt,s=e.class.id,a=n?.classes[s],c=Object.entries(e.properties),d=new Array(c.length);for(let u=0;uLYe(n,t)):[]}function LYe(e,t){let{sanitizeGlslIdentifier:n}=Mt,i=e.class.id,o=t?.classes[i],r=Object.entries(e.properties).filter(([a,c])=>c.isGpuCompatible()),s=new Array(r.length);for(let a=0;au),n.addStructField(vi.STRUCT_ID_METADATA_FS,r,o);let g=`attributes.texCoord_${a}`,f=g;if(l(h)&&!$.equals(h,$.IDENTITY)){let E=`${p}Transform`;n.addUniform("mat3",E,be.FRAGMENT),i[E]=function(){return h},f=`vec2(${E} * vec3(${g}, 1.0))`}let b=`texture(${p}, ${f}).${c}`,x=s.unpackInShader(b),I=yle({valueExpression:x,renderResources:e,glslType:r,metadataVariable:o,shaderDestination:be.FRAGMENT,property:s}),_=`metadata.${o} = ${I};`;n.addFunctionLines(vi.FUNCTION_ID_INITIALIZE_METADATA_FS,[_])}function Ale(e,t){let{classProperty:n}=t.property,{metadataVariable:i,glslType:o,shaderDestination:r}=t,s=ble(vi.METADATA_CLASS_FIELDS,n,`metadataClass.${i}`,o),a=`${o}MetadataClass`;e.addStructField(vi.STRUCT_ID_METADATA_CLASS_FS,a,i),e.addFunctionLines(vi.FUNCTION_ID_INITIALIZE_METADATA_FS,s),be.includesVertexShader(r)&&(e.addStructField(vi.STRUCT_ID_METADATA_CLASS_VS,a,i),e.addFunctionLines(vi.FUNCTION_ID_INITIALIZE_METADATA_VS,s))}function gle(e,t){let{propertyStatistics:n}=t;if(!l(n))return;let{metadataVariable:i,type:o,glslType:r}=t;if(o===bt.ENUM)return;let s=vi.METADATA_STATISTICS_FIELDS,a=`metadataStatistics.${i}`,c=ble(s,n,a,r),d=`${r}MetadataStatistics`;e.addStructField(vi.STRUCT_ID_METADATA_STATISTICS_FS,d,i),e.addFunctionLines(vi.FUNCTION_ID_INITIALIZE_METADATA_FS,c),be.includesVertexShader(t.shaderDestination)&&(e.addStructField(vi.STRUCT_ID_METADATA_STATISTICS_VS,d,i),e.addFunctionLines(vi.FUNCTION_ID_INITIALIZE_METADATA_VS,c))}function ble(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 yle(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:h}=n;return a[o]=()=>u,a[r]=()=>h,`czm_valueTransform(${o}, ${r}, ${t})`}var rm=vi;var IVn=y(C(),1),FYe={INHERIT:0,OPAQUE:1,TRANSLUCENT:2},c0=Object.freeze(FYe);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:xt};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===c0.TRANSLUCENT?r.pass=Ge.TRANSLUCENT:c===c0.OPAQUE&&(r.pass=void 0);let d=kYe(s,t);if(!d.customShaderEnabled)return;if(zYe(i,s,d),d.shouldComputePositionWC&&i.addDefine("COMPUTE_POSITION_WC_CUSTOM_SHADER",void 0,be.BOTH),l(s.vertexShaderText)&&i.addDefine("HAS_CUSTOM_VERTEX_SHADER",void 0,be.VERTEX),l(s.fragmentShaderText)){i.addDefine("HAS_CUSTOM_FRAGMENT_SHADER",void 0,be.FRAGMENT);let p=DA.getDefineName(s.mode);i.addDefine(p,void 0,be.FRAGMENT)}let u=s.uniforms;for(let p in u)if(u.hasOwnProperty(p)){let g=u[p];i.addUniform(g.type,p)}let h=s.varyings;for(let p in h)if(h.hasOwnProperty(p)){let g=h[p];i.addVarying(g,p)}e.uniformMap=Lt(e.uniformMap,s.uniformMap)};function PYe(e){let t={};for(let n=0;n1?(g=e.attributeIndex,e.attributeIndex+=h):p&&!a?g=0:g=e.attributeIndex++,t3e(e,u,g,h,r,s)}d3e(i,t.attributes),t.primitiveType===We.POINTS&&i.addDefine("PRIMITIVE_TYPE_POINTS"),i.addVertexLines(Fw),i.addFragmentLines(Ww)};function t3e(e,t,n,i,o,r){let s=e.shaderBuilder,a=Mt.getAttributeInfo(t),c=o&&!r;i>1?o3e(e,t,n,i):i3e(e,t,n,c),s3e(s,a,c),r3e(s,a),l(t.semantic)&&n3e(s,t),a3e(s,a,o),c3e(s,a,c),l3e(s,a)}function n3e(e,t){let{semantic:n,setIndex:i}=t;switch(n){case lt.NORMAL:e.addDefine("HAS_NORMALS");break;case lt.TANGENT:e.addDefine("HAS_TANGENTS");break;case lt.FEATURE_ID:e.addDefine(`HAS${n}_${i}`);break;case lt.TEXCOORD:case lt.COLOR:e.addDefine(`HAS_${n}_${i}`)}}function i3e(e,t,n,i){let{quantization:o,semantic:r,setIndex:s}=t,{type:a,componentDatatype:c}=l(o)?o:t;r===lt.FEATURE_ID&&s>=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=s+1);let d=r===lt.POSITION,u=d?0:n,h=kt.getNumberOfComponents(a),p={index:u,value:l(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,count:t.count,componentsPerAttribute:h,componentDatatype:c,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};if(e.attributes.push(p),!d||!i)return;let g=e.runtimePrimitive.positionBuffer2D,f={index:n,vertexBuffer:g,count:t.count,componentsPerAttribute:h,componentDatatype:J.FLOAT,offsetInBytes:0,strideInBytes:void 0,normalize:t.normalized};e.attributes.push(f)}function o3e(e,t,n,i){let{quantization:o,normalized:r}=t,{type:s,componentDatatype:a}=l(o)?o:t,d=kt.getNumberOfComponents(s)/i,u=J.getSizeInBytes(a),h=d*u,p=t.byteStride;for(let g=0;g=o&&(f=o-1);let b=g/d|0;return b>=r&&(b=r-1),l(n)?(n.x=f,n.y=b,n):new D(f,b)};var _s=d0;var VGn=y(C(),1);var eK,Sle="AAPTxy8BH1VEsoebNVZXo8HurEOF051kAEKlhkOhBEc9BmRpOZfBt2Ic5blmnx9xwwyG_Mt0EmBxpEa6xCqXn5V_qFEgJ0edE9ixiefKjMiv986NGSn2HB8y6x0GtSOCBkg19K6rBgZ7Upl7ABEnaFh4dD73GW0gUAJ9hHWhqd1qgHkBuctWiFEJUmQjs_52tdx6l5bDGoeXVvmelklmEJOshCRV_s3kLPC19ENRNLc18eA.AT1_EXUMUBsi",zE={};zE.defaultAccessToken=Sle;zE.defaultWorldImageryServer=new Ve({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/World_Imagery/MapServer"});zE.defaultWorldHillshadeServer=new Ve({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer"});zE.defaultWorldOceanServer=new Ve({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer"});zE.getDefaultTokenCredit=function(e){if(e===Sle){if(!l(eK)){let t=' This application is using a default ArcGIS access token. Please assign Cesium.ArcGisMapService.defaultAccessToken with an API key from your ArcGIS Developer account before using the ArcGIS tile services. You can sign up for a free ArcGIS Developer account at https://developers.arcgis.com/.';eK=new Gt(t,!0)}return eK}};var zd=zE;var WGn=y(C(),1);function tK(e){e=e??Y.EMPTY_OBJECT,this._pixelsToCheck=e.pixelsToCheck,this._missingImagePixels=void 0,this._missingImageByteLength=void 0,this._isReady=!1;let t=Ve.createIfNeeded(e.missingImageUrl),n=this;function i(r){l(r.blob)&&(n._missingImageByteLength=r.blob.size);let s=$m(r);if(e.disableCheckIfAllPixelsAreTransparent){let a=!0,c=r.width,d=e.pixelsToCheck;for(let u=0,h=d.length;a&&u0&&(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)}tK.prototype.isReady=function(){return this._isReady};tK.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=$m(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])};nK.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 Vh=nK;var kGn=y(C(),1);function KE(){Ae.throwInstantiationError()}Object.defineProperties(KE.prototype,{rectangle:{get:Ae.throwInstantiationError},tileWidth:{get:Ae.throwInstantiationError},tileHeight:{get:Ae.throwInstantiationError},maximumLevel:{get:Ae.throwInstantiationError},minimumLevel:{get:Ae.throwInstantiationError},tilingScheme:{get:Ae.throwInstantiationError},tileDiscardPolicy:{get:Ae.throwInstantiationError},errorEvent:{get:Ae.throwInstantiationError},credit:{get:Ae.throwInstantiationError},proxy:{get:Ae.throwInstantiationError},hasAlphaChannel:{get:Ae.throwInstantiationError}});KE.prototype.getTileCredits=function(e,t,n){Ae.throwInstantiationError()};KE.prototype.requestImage=function(e,t,n,i){Ae.throwInstantiationError()};KE.prototype.pickFeatures=function(e,t,n,i,o){Ae.throwInstantiationError()};var u3e=/\.ktx2$/i;KE.loadImage=function(e,t){let n=Ve.createIfNeeded(t);return u3e.test(n.url)?Kl(n):l(e)&&l(e.tileDiscardPolicy)?n.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}):n.fetchImage({preferImageBitmap:!0,flipY:!0})};var Sl=KE;var OGn=y(C(),1),m3e={SATELLITE:1,OCEANS:2,HILLSHADE:3},Gh=Object.freeze(m3e);function Lle(e){this.useTiles=e.usePreCachedTilesIfAvailable??!0;let t=e.ellipsoid;this.tilingScheme=e.tilingScheme??new ao({ellipsoid:t}),this.rectangle=e.rectangle??this.tilingScheme.rectangle,this.ellipsoid=t;let n=e.credit;typeof n=="string"&&(n=new Gt(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}Lle.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 vw({missingImageUrl:Rle(e,0,0,this.maximumLevel).url,pixelsToCheck:[new D(0,0),new D(200,20),new D(20,200),new D(80,110),new D(160,130)],disableCheckIfAllPixelsAreTransparent:!0}))};function h3e(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 _s({ellipsoid:t.ellipsoid});else if(e.tileInfo.spatialReference.wkid===4326)t.tilingScheme=new ao({ellipsoid:t.ellipsoid});else{let i=`Tile spatial reference WKID ${e.tileInfo.spatialReference.wkid} is not supported.`;throw new de(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 Ui,o=e.fullExtent,r=i.unproject(new m(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 m(Math.min(o.xmax,t.tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.min(o.ymax,t.tilingScheme.ellipsoid.maximumRadius*Math.PI),0));t.rectangle=new le(r.longitude,r.latitude,s.longitude,s.latitude)}else if(e.fullExtent.spatialReference.wkid===4326)t.rectangle=le.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 de(i)}}else t.rectangle=t.tilingScheme.rectangle;t.useTiles=!0}l(e.copyrightText)&&e.copyrightText.length>0&&(l(t.credit)?t.tileCredits=[new Gt(e.copyrightText)]:t.credit=new Gt(e.copyrightText))}function f3e(e,t){let n=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(n+=`: ${t.message}`),new de(n)}async function p3e(e,t){let n=e.getDerivedResource({queryParameters:{f:"json"}});try{let i=await n.fetchJson();h3e(i,t)}catch(i){f3e(e,i)}}function zf(e){e=e??Y.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 ao({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;let t=e.credit;typeof t=="string"&&(t=new Gt(t)),this.enablePickFeatures=e.enablePickFeatures??!0,this._errorEvent=new Ce}zf.fromBasemapType=async function(e,t){t=t??Y.EMPTY_OBJECT;let n,i,o;switch(e){case Gh.SATELLITE:{n=t.token??zd.defaultAccessToken,i=Ve.createIfNeeded(zd.defaultWorldImageryServer),i.appendForwardSlash();let r=zd.getDefaultTokenCredit(n);l(r)&&(o=Gt.clone(r))}break;case Gh.OCEANS:{n=t.token??zd.defaultAccessToken,i=Ve.createIfNeeded(zd.defaultWorldOceanServer),i.appendForwardSlash();let r=zd.getDefaultTokenCredit(n);l(r)&&(o=Gt.clone(r))}break;case Gh.HILLSHADE:{n=t.token??zd.defaultAccessToken,i=Ve.createIfNeeded(zd.defaultWorldHillshadeServer),i.appendForwardSlash();let r=zd.getDefaultTokenCredit(n);l(r)&&(o=Gt.clone(r))}break;default:}return zf.fromUrl(i,{...t,token:n,credit:o,usePreCachedTilesIfAvailable:!0})};function Rle(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 Di?(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(zf.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}}});zf.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=Ve.createIfNeeded(e);n.appendForwardSlash(),l(t.token)&&n.setQueryParameters({token:t.token});let i=new zf(t);i._resource=n;let o=new Lle(t);return(t.usePreCachedTilesIfAvailable??!0)&&await p3e(n,o),o.build(i),i};zf.prototype.getTileCredits=function(e,t,n){return this._tileCredits};zf.prototype.requestImage=function(e,t,n,i){return Sl.loadImage(this,Rle(this,e,t,n,i))};zf.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 Di)s=Z.toDegrees(i),a=Z.toDegrees(o),c="4326";else{let p=this._tilingScheme.projection.project(new ge(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 g=[],f=p.results;if(!l(f))return g;for(let b=0;b0?n.raiseEvent(c):l(t)&&console.log(`An error occurred in "${t.constructor.name}": ${Kf(i)}`),c};TQ.reportSuccess=function(e){l(e)&&(e.timesRetried=-1)};var vo=TQ;var _Zn=y(C(),1),g3e={AERIAL:"Aerial",AERIAL_WITH_LABELS:"AerialWithLabels",AERIAL_WITH_LABELS_ON_DEMAND:"AerialWithLabelsOnDemand",ROAD:"Road",ROAD_ON_DEMAND:"RoadOnDemand",CANVAS_DARK:"CanvasDark",CANVAS_LIGHT:"CanvasLight",CANVAS_GRAY:"CanvasGray",ORDNANCE_SURVEY:"OrdnanceSurvey",COLLINS_BART:"CollinsBart"},JE=Object.freeze(g3e);var SZn=y(C(),1);function Nw(e){}Nw.prototype.isReady=function(){return!0};Nw.prototype.shouldDiscardImage=function(e){return Nw.EMPTY_IMAGE===e};var SQ;Object.defineProperties(Nw,{EMPTY_IMAGE:{get:function(){return l(SQ)||(SQ=new Image,SQ.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),SQ}}});var jE=Nw;function Vle(e){this.tileWidth=void 0,this.tileHeight=void 0,this.maximumLevel=void 0,this.imageUrlSubdomains=void 0,this.imageUrlTemplate=void 0,this.attributionList=void 0}Vle.prototype.build=function(e){e._tileWidth=this.tileWidth,e._tileHeight=this.tileHeight,e._maximumLevel=this.maximumLevel,e._imageUrlSubdomains=this.imageUrlSubdomains,e._imageUrlTemplate=this.imageUrlTemplate;let t=e._attributionList=this.attributionList;t||(t=[]),e._attributionList=t;for(let n=0,i=t.length;no.coverageAreas?.some(r=>l(r.bbox)))),t.attributionList=i}function y3e(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(i+=`: ${t.message}`),vo.reportError(void 0,n,l(n)?n._errorEvent:void 0,i,void 0,void 0,void 0,t),new de(i)}async function C3e(e,t,n){let i=e.url,o=zs._metadataCache[i];l(o)||(o=e.fetchJsonp("jsonp"),zs._metadataCache[i]=o);try{let r=await o;return b3e(r,t)}catch(r){y3e(e,r,n)}}function zs(e){e=e??Y.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??JE.AERIAL,this._mapLayer=e.mapLayer,this._culture=e.culture??"",this._key=e.key,this._tileDiscardPolicy=e.tileDiscardPolicy,l(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new jE),this._proxy=e.proxy,this._credit=new Gt(``),this._tilingScheme=new _s({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 Ce}Object.defineProperties(zs.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)}}});zs.fromUrl=async function(e,t){t=t??Y.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??JE.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 zs(t);a._resource=o;let c=new Vle(t);return await C3e(s,c),c.build(a),a};var x3e=new le;zs.prototype.getTileCredits=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(e,t,n,x3e);return E3e(this._attributionList,n,i)};zs.prototype.requestImage=function(e,t,n,i){let o=Sl.loadImage(this,I3e(this,e,t,n,i));if(l(o))return o.catch(function(r){return l(r.blob)&&r.blob.size===0?jE.EMPTY_IMAGE:Promise.reject(r)})};zs.prototype.pickFeatures=function(e,t,n,i,o){};zs.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<=0;--o){let r=1<=h.zoomMin&&t<=h.zoomMax){let p=le.intersection(n,h.bbox,_3e);l(p)&&(c=!0)}}c&&i.push(s.credit)}return i}zs._metadataCache={};var Dw=zs;var yBn=y(C(),1);var oBn=y(C(),1);var Gle=/{[^}]+}/g,Zle={x:R3e,y:G3e,z:w3e,s:X3e,reverseX:V3e,reverseY:Z3e,reverseZ:B3e,westDegrees:W3e,southDegrees:F3e,eastDegrees:P3e,northDegrees:M3e,westProjected:v3e,southProjected:N3e,eastProjected:D3e,northProjected:Q3e,width:U3e,height:k3e},T3e=Lt(Zle,{i:Y3e,j:O3e,reverseI:H3e,reverseJ:z3e,longitudeDegrees:J3e,latitudeDegrees:j3e,longitudeProjected:q3e,latitudeProjected:$3e,format:tOe});function Qw(e){e=e??Y.EMPTY_OBJECT,this._errorEvent=new Ce;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 _s({ellipsoid:e.ellipsoid}),this._rectangle=e.rectangle??this._tilingScheme.rectangle,this._rectangle=le.intersection(this._rectangle,this._tilingScheme.rectangle),this._tileDiscardPolicy=e.tileDiscardPolicy;let o=e.credit;typeof o=="string"&&(o=new Gt(o)),this._credit=o,this._hasAlphaChannel=e.hasAlphaChannel??!0;let r=e.customTags,s=Lt(Zle,r),a=Lt(T3e,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(Qw.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}}});Qw.prototype.getTileCredits=function(e,t,n){};Qw.prototype.requestImage=function(e,t,n,i){return Sl.loadImage(this,S3e(this,e,t,n,i))};Qw.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=L3e(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 LQ=!1,Kd=new le,RQ=!1,Uw=new le;function S3e(e,t,n,i,o){LQ=!1,RQ=!1;let r=e._resource,s=r.getUrlComponent(!0),a=e._tags,c={},d=s.match(Gle);return l(d)&&d.forEach(function(u){let h=u.substring(1,u.length-1);l(a[h])&&(c[h]=a[h](e,t,n,i))}),r.getDerivedResource({request:o,templateValues:c})}var iK=!1,$E=new D,oK=!1;function L3e(e,t,n,i,o,r,s){LQ=!1,RQ=!1,iK=!1,oK=!1;let a=e._pickFeaturesResource,c=a.getUrlComponent(!0),d=e._pickFeaturesTags,u={},h=c.match(Gle);return l(h)&&h.forEach(function(p){let g=p.substring(1,p.length-1);l(d[g])&&(u[g]=d[g](e,t,n,i,o,r,s))}),a.getDerivedResource({templateValues:u})}function eT(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 R3e(e,t,n,i){return eT(e,"{x}",t)}function V3e(e,t,n,i){let o=e.tilingScheme.getNumberOfXTilesAtLevel(i)-t-1;return eT(e,"{reverseX}",o)}function G3e(e,t,n,i){return eT(e,"{y}",n)}function Z3e(e,t,n,i){let o=e.tilingScheme.getNumberOfYTilesAtLevel(i)-n-1;return eT(e,"{reverseY}",o)}function B3e(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 wle(e,t,n){let i=e.positionToTileXY(le.southwest(t),n),o=e.positionToTileXY(le.northeast(t),n);return(Math.abs(o.x-i.x)+1)*(Math.abs(o.y-i.y)+1)>4?0:n}sm._metadataSuccess=function(e,t,n,i,o){let r=/tileformat/i,s=/tileset/i,a=/tilesets/i,c=/boundingbox/i,d,u,h,p=[],g=e.childNodes[0].childNodes;for(let w=0;w`),this._tilingScheme=void 0,this._version=void 0,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=e.maximumLevel,this._errorEvent=new Ce}Object.defineProperties(ad.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}}});ad.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 Xle(n);s.channel=t,await oOe(r,s);let a=new ad(n);return s.build(a),a._resource=o,a._url=e,a._path=i,a};ad.prototype.getTileCredits=function(e,t,n){};ad.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 Sl.loadImage(this,o)};ad.prototype.pickFeatures=function(e,t,n,i,o){};ad._logoUrl=void 0;Object.defineProperties(ad,{logoUrl:{get:function(){return l(ad._logoUrl)||(ad._logoUrl=hn("Assets/Images/google_earth_credit.png")),ad._logoUrl},set:function(e){ad._logoUrl=e}}});var kw=ad;var vBn=y(C(),1);var rOe=/\/$/,Wle=new Gt('© Mapbox © OpenStreetMap Improve this map');function tT(e){e=e??Y.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();rOe.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 Gt(s))):s=Wle,this._resource=i,this._imageryProvider=new hc({url:i,credit:s,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(tT.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}}});tT.prototype.getTileCredits=function(e,t,n){};tT.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};tT.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};tT._defaultCredit=Wle;var Yw=tT;var jBn=y(C(),1);function ix(e){e=e??Y.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??le.MAX_VALUE,n=new ao({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 Ce;let i=e.credit;typeof i=="string"&&(i=new Gt(i)),this._credit=i;let o=Ve.createIfNeeded(e.url);this._resource=o,this._tileWidth=e.tileWidth,this._tileHeight=e.tileHeight}Object.defineProperties(ix.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 sOe(e,t,n,i){let o=`Failed to load image ${e.url}`;l(t)&&l(t.message)&&(o+=`: ${t.message}`);let r=vo.reportError(i,n,l(n)?n._errorEvent:void 0,o,0,0,0,t);if(r.retry)return sK(e,n,r);throw l(n)&&(n._hasError=!0),new de(o)}async function sK(e,t,n){try{return await Sl.loadImage(null,e)}catch(i){return sOe(e,i,t,n)}}ix.fromUrl=async function(e,t){let n=Ve.createIfNeeded(e),i=await sK(n);t=t??Y.EMPTY_OBJECT;let o=new ix({...t,url:e,tileWidth:i.width,tileHeight:i.height});return o._image=i,o};ix.prototype.getTileCredits=function(e,t,n){};ix.prototype.requestImage=async function(e,t,n,i){if(!this._hasError&&!l(this._image)){let o=await sK(this._resource,this);return this._image=o,vo.reportSuccess(this._errorEvent),o}return this._image};ix.prototype.pickFeatures=function(e,t,n,i,o){};var Ow=ix;var xwn=y(C(),1);var iwn=y(C(),1);function aOe(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=cOe:e==="xml"?n=mOe:(e==="html"||e==="text")&&(n=Fle)),this.callback=n}function cOe(e){let t=[],n=e.features;for(let i=0;i0)for(let r=0;r\s*<\/body>/im,yOe=//im,COe=/([\s\S]*)<\/title>/im;function Fle(e){if(bOe.test(e)||yOe.test(e))return;let t,n=COe.exec(e);n&&n.length>1&&(t=n[1]);let i=new Vh;return i.name=t,i.description=e,i.data=e,[i]}var ox=aOe;var dwn=y(C(),1);function Hw(e){e=e??Y.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(Hw.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)}}});Hw.prototype.getFromCache=function(e,t,n,i){let o=Ple(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};Hw.prototype.checkApproachingInterval=function(e,t,n,i){let o=Ple(e,t,n),r=this._tilesRequestedForInterval,s=Mle(this),a={key:o,priorityFunction:i.priorityFunction};(!l(s)||!vle(this,a,s))&&r.push(a),r.length>=512&&r.splice(0,256)};Hw.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=Mle(this);if(l(r)){let s=this._tilesRequestedForInterval,a=!0;for(;a&&s.length!==0;){let c=s.pop();a=vle(this,c,r),a||s.push(c)}}};function Ple(e,t,n){return`${e}-${t}-${n}`}function xOe(e){let t=e.split("-");if(t.length===3)return{x:Number(t[0]),y:Number(t[1]),level:Number(t[2])}}function Mle(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=j.secondsDifference(c.stop,i),++a):(s=j.secondsDifference(c.start,i),--a),s/=r,a>=0&&s<=5?t.get(a):void 0}function vle(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=xOe(s),c=new sr({throttle:!1,throttleByServer:!0,type:Zs.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 rx=Hw;var IOe=[3034,3035,3042,3043,3044],_Oe=[4471,4559];function Zh(e){if(e=e??Y.EMPTY_OBJECT,l(e.times)&&!l(e.clock))throw new Ae("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(Zh.DefaultParameters,!0),n.setQueryParameters(Zh.GetFeatureInfoDefaultParameters,!0),l(e.parameters)&&t.setQueryParameters(Nle(e.parameters)),l(e.getFeatureInfoParameters)&&n.setQueryParameters(Nle(e.getFeatureInfoParameters));let i=this;this._reload=void 0,l(e.times)&&(this._timeDynamicImagery=new rx({clock:e.clock,times:e.times,requestImageFunction:function(s,a,c,d,u){return Dle(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 Ui?"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&&!_Oe.includes(a)||IOe.includes(a))&&(o.bbox="{southProjected},{westProjected},{northProjected},{eastProjected}")}}else o.srs=e.srs??(e.tilingScheme&&e.tilingScheme.projection instanceof Ui?"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 hc({url:t,pickFeaturesUrl:n,tilingScheme:e.tilingScheme??new ao({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??Zh.DefaultGetFeatureInfoFormats,enablePickFeatures:e.enablePickFeatures})}function Dle(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 EOe(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(Zh.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}}});Zh.prototype.getTileCredits=function(e,t,n){return this._tileProvider.getTileCredits(e,t,n)};Zh.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=Dle(this,e,t,n,i,s)),l(o)&&l(r)&&r.checkApproachingInterval(e,t,n,i),o};Zh.prototype.pickFeatures=function(e,t,n,i,o){let r=this._timeDynamicImagery,s=l(r)?r.currentInterval:void 0;return EOe(this,e,t,n,i,o,s)};Zh.DefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetMap",styles:"",format:"image/jpeg"});Zh.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetFeatureInfo"});Zh.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new ox("json","application/json")),Object.freeze(new ox("xml","text/xml")),Object.freeze(new ox("text","text/html"))]);function Nle(e){let t={};for(let n in e)e.hasOwnProperty(n)&&(t[n.toLowerCase()]=e[n]);return t}var zw=Zh;var wwn=y(C(),1);var TOe=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetTile"});function Kw(e){e=e??Y.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=Ve.createIfNeeded(e.url),n=e.style,i=e.tileMatrixSetID,o=t.url,r=o.match(/{/g);if(!l(r)||r.length===1&&/{s}/.test(o))t.setQueryParameters(TOe),this._useKvp=!0;else{let h={style:n,Style:n,TileMatrixSet:i};t.setTemplateValues(h),this._useKvp=!1}this._resource=t,this._layer=e.layer,this._style=n,this._tileMatrixSetID=i,this._tileMatrixLabels=e.tileMatrixLabels,this._format=e.format??"image/jpeg",this._tileDiscardPolicy=e.tileDiscardPolicy,this._tilingScheme=l(e.tilingScheme)?e.tilingScheme:new _s({ellipsoid:e.ellipsoid}),this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._minimumLevel=e.minimumLevel??0,this._maximumLevel=e.maximumLevel,this._rectangle=e.rectangle??this._tilingScheme.rectangle,this._dimensions=e.dimensions;let s=this;this._reload=void 0,l(e.times)&&(this._timeDynamicImagery=new rx({clock:e.clock,times:e.times,requestImageFunction:function(h,p,g,f,b){return Qle(s,h,p,g,f,b)},reloadFunction:function(){l(s._reload)&&s._reload()}}));let a=this._tilingScheme.positionToTileXY(le.southwest(this._rectangle),this._minimumLevel),c=this._tilingScheme.positionToTileXY(le.northeast(this._rectangle),this._minimumLevel),d=(Math.abs(c.x-a.x)+1)*(Math.abs(c.y-a.y)+1);this._errorEvent=new Ce;let u=e.credit;this._credit=typeof u=="string"?new Gt(u):u,this._subdomains=e.subdomains,Array.isArray(this._subdomains)?this._subdomains=this._subdomains.slice():l(this._subdomains)&&this._subdomains.length>0?this._subdomains=this._subdomains.split(""):this._subdomains=["a","b","c"]}function Qle(e,t,n,i,o,r){let s=e._tileMatrixLabels,a=l(s)?s[i]:i.toString(),c=e._subdomains,d=e._dimensions,u=l(r)?r.data:void 0,h,p;if(!e._useKvp)p={TileMatrix:a,TileRow:n.toString(),TileCol:t.toString(),s:c[(t+n+i)%c.length]},h=e._resource.getDerivedResource({request:o}),h.setTemplateValues(p),l(d)&&h.setTemplateValues(d),l(u)&&h.setTemplateValues(u);else{let g={};g.tilematrix=a,g.layer=e._layer,g.style=e._style,g.tilerow=n,g.tilecol=t,g.tilematrixset=e._tileMatrixSetID,g.format=e._format,l(d)&&(g=Lt(g,d)),l(u)&&(g=Lt(g,u)),p={s:c[(t+n+i)%c.length]},h=e._resource.getDerivedResource({queryParameters:g,request:o}),h.setTemplateValues(p)}return Sl.loadImage(e,h)}Object.defineProperties(Kw.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 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}},format:{get:function(){return this._format}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}},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())}}});Kw.prototype.getTileCredits=function(e,t,n){};Kw.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=Qle(this,e,t,n,i,s)),l(o)&&l(r)&&r.checkApproachingInterval(e,t,n,i),o};Kw.prototype.pickFeatures=function(e,t,n,i,o){};var Jw=Kw;var SOe={ARCGIS_MAPSERVER:QA.fromUrl,BING:async(e,t)=>Dw.fromUrl(e,t),GOOGLE_EARTH:async(e,t)=>{let n=t.channel;return delete t.channel,kw.fromUrl(e,n,t)},MAPBOX:(e,t)=>new Yw({url:e,...t}),SINGLE_TILE:Ow.fromUrl,TMS:u0.fromUrl,URL_TEMPLATE:(e,t)=>new hc({url:e,...t}),WMS:(e,t)=>new zw({url:e,...t}),WMTS:(e,t)=>new Jw({url:e,...t})};function Jf(e){e=e??Y.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._tileCredits=void 0,this._errorEvent=new Ce}Object.defineProperties(Jf.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(){}}});Jf.fromAssetId=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=Nd._createEndpointResource(e,t),i=e.toString()+t.accessToken+t.server,o=Jf._endpointCache[i];l(o)||(o=n.fetchJson(),Jf._endpointCache[i]=o);let r=await o;if(r.type!=="IMAGERY")throw new de(`Cesium ion asset ${e} is not an imagery asset.`);let s,a=r.externalType;if(!l(a))s=await u0.fromUrl(new Nd(r,n));else{let d=SOe[a];if(!l(d))throw new de(`Unrecognized Cesium ion imagery type: ${a}`);let u={...r.options},h=u.url;delete u.url,s=await d(h,u)}let c=new Jf(t);return s.errorEvent.addEventListener(function(d){d.provider=c,c._errorEvent.raiseEvent(d)}),c._tileCredits=Nd.getCreditsFromEndpoint(r,n),c._imageryProvider=s,c};Jf.prototype.getTileCredits=function(e,t,n){let i=this._imageryProvider.getTileCredits(e,t,n);return l(i)?this._tileCredits.concat(i):this._tileCredits};Jf.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};Jf.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};Jf._endpointCache={};var UA=Jf;var jwn=y(C(),1),LOe={AERIAL:2,AERIAL_WITH_LABELS:3,ROAD:4},kA=Object.freeze(LOe);function ROe(e){e=e??Y.EMPTY_OBJECT;let t=e.style??kA.AERIAL;return UA.fromAssetId(t)}var YA=ROe;var cXn=y(C(),1);function Ll(){Ae.throwInstantiationError()}Object.defineProperties(Ll.prototype,{errorEvent:{get:Ae.throwInstantiationError},credit:{get:Ae.throwInstantiationError},tilingScheme:{get:Ae.throwInstantiationError},hasWaterMask:{get:Ae.throwInstantiationError},hasVertexNormals:{get:Ae.throwInstantiationError},availability:{get:Ae.throwInstantiationError}});var Ule=[];Ll.getRegularGridIndices=function(e,t){let n=Ule[e];l(n)||(Ule[e]=n=[]);let i=n[t];return l(i)||(e*t<Z.SIXTY_FOUR_KILOBYTES?i=n[t]=new Uint16Array((e-1)*(t-1)*6):i=n[t]=new Uint32Array((e-1)*(t-1)*6),Hle(e,t,i,0)),i};var kle=[];Ll.getRegularGridIndicesAndEdgeIndices=function(e,t){let n=kle[e];l(n)||(kle[e]=n=[]);let i=n[t];if(!l(i)){let o=Ll.getRegularGridIndices(e,t),r=Ole(e,t),s=r.westIndicesSouthToNorth,a=r.southIndicesEastToWest,c=r.eastIndicesNorthToSouth,d=r.northIndicesWestToEast;i=n[t]={indices:o,westIndicesSouthToNorth:s,southIndicesEastToWest:a,eastIndicesNorthToSouth:c,northIndicesWestToEast:d}}return i};var Yle=[];Ll.getRegularGridAndSkirtIndicesAndEdgeIndices=function(e,t){let n=Yle[e];l(n)||(Yle[e]=n=[]);let i=n[t];if(!l(i)){let o=e*t,r=(e-1)*(t-1)*6,s=e*2+t*2,a=Math.max(0,s-4)*6,c=o+s,d=r+a,u=Ole(e,t),h=u.westIndicesSouthToNorth,p=u.southIndicesEastToWest,g=u.eastIndicesNorthToSouth,f=u.northIndicesWestToEast,b=Me.createTypedArray(c,d);Hle(e,t,b,0),Ll.addSkirtIndices(h,p,g,f,o,b,r),i=n[t]={indices:b,westIndicesSouthToNorth:h,southIndicesEastToWest:p,eastIndicesNorthToSouth:g,northIndicesWestToEast:f,indexCountWithoutSkirts:r}}return i};Ll.addSkirtIndices=function(e,t,n,i,o,r,s){let a=o;s=wQ(e,a,r,s),a+=e.length,s=wQ(t,a,r,s),a+=t.length,s=wQ(n,a,r,s),a+=n.length,wQ(i,a,r,s)};function Ole(e,t){let n=new Array(t),i=new Array(e),o=new Array(t),r=new Array(e),s;for(s=0;s<e;++s)r[s]=s,i[s]=e*t-1-s;for(s=0;s<t;++s)o[s]=(s+1)*e-1,n[s]=(t-s-1)*e;return{westIndicesSouthToNorth:n,southIndicesEastToWest:i,eastIndicesNorthToSouth:o,northIndicesWestToEast:r}}function Hle(e,t,n,i){let o=0;for(let r=0;r<t-1;++r){for(let s=0;s<e-1;++s){let a=o,c=a+e,d=c+1,u=a+1;n[i++]=a,n[i++]=c,n[i++]=u,n[i++]=u,n[i++]=c,n[i++]=d,++o}++o}}function wQ(e,t,n,i){let o=e[0],r=e.length;for(let s=1;s<r;++s){let a=e[s];n[i++]=o,n[i++]=a,n[i++]=t,n[i++]=t,n[i++]=a,n[i++]=t+1,o=a,++t}return i}Ll.heightmapTerrainQuality=.25;Ll.getEstimatedLevelZeroGeometricErrorForAHeightmap=function(e,t,n){return e.maximumRadius*2*Math.PI*Ll.heightmapTerrainQuality/(t*n)};Ll.prototype.requestTileGeometry=Ae.throwInstantiationError;Ll.prototype.getLevelMaximumGeometricError=Ae.throwInstantiationError;Ll.prototype.getTileDataAvailable=Ae.throwInstantiationError;Ll.prototype.loadTileDataAvailability=Ae.throwInstantiationError;var Es=Ll;var dXn=y(C(),1),jw=`uniform sampler2D u_texture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(u_texture, v_textureCoordinates); } `;var mXn=y(C(),1),qw=`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 yXn=y(C(),1);var fXn=y(C(),1),VOe={UNLOADED:0,TRANSITIONING:1,RECEIVED:2,TEXTURE_LOADED:3,READY:4,FAILED:5,INVALID:6,PLACEHOLDER:7},Jn=Object.freeze(VOe);function nT(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=Jn.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}nT.createPlaceholder=function(e){let t=new nT(e,0,0,0);return t.addReference(),t.state=Jn.PLACEHOLDER,t};nT.prototype.addReference=function(){++this.referenceCount};nT.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};nT.prototype.processStateMachine=function(e,t,n){this.state===Jn.UNLOADED&&!n&&(this.state=Jn.TRANSITIONING,this.imageryLayer._requestImagery(this)),this.state===Jn.RECEIVED&&(this.state=Jn.TRANSITIONING,this.imageryLayer._createTexture(e.context,this));let i=this.state===Jn.READY&&t&&!this.texture;(this.state===Jn.TEXTURE_LOADED||i)&&(this.state=Jn.TRANSITIONING,this.imageryLayer._reprojectTexture(e,this,t))};var iT=nT;var _Xn=y(C(),1);function lK(e,t,n){this.readyImagery=void 0,this.loadingImagery=e,this.textureCoordinateRectangle=t,this.textureTranslationAndScale=void 0,this.useWebMercatorT=n}lK.prototype.freeResources=function(){l(this.readyImagery)&&this.readyImagery.releaseReference(),l(this.loadingImagery)&&this.loadingImagery.releaseReference()};lK.prototype.processStateMachine=function(e,t,n){let i=this.loadingImagery,o=i.imageryLayer;if(i.processStateMachine(t,!this.useWebMercatorT,n),i.state===Jn.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!==Jn.READY||!this.useWebMercatorT&&!l(r.texture));)r.state!==Jn.FAILED&&r.state!==Jn.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===Jn.FAILED||i.state===Jn.INVALID?l(s)?(s.processStateMachine(t,!this.useWebMercatorT,n),!1):!0:!1};var oT=lK;function Wi(e,t){this._imageryProvider=e,this._readyEvent=new Ce,this._errorEvent=new Ce,t=t??Y.EMPTY_OBJECT,e=e??Y.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??Wi.DEFAULT_BRIGHTNESS,this.contrast=t.contrast??e._defaultContrast??Wi.DEFAULT_CONTRAST,this.hue=t.hue??e._defaultHue??Wi.DEFAULT_HUE,this.saturation=t.saturation??e._defaultSaturation??Wi.DEFAULT_SATURATION,this.gamma=t.gamma??e._defaultGamma??Wi.DEFAULT_GAMMA,this.splitDirection=t.splitDirection??Wi.DEFAULT_SPLIT,this.minificationFilter=t.minificationFilter??e._defaultMinificationFilter??Wi.DEFAULT_MINIFICATION_FILTER,this.magnificationFilter=t.magnificationFilter??e._defaultMagnificationFilter??Wi.DEFAULT_MAGNIFICATION_FILTER,this.show=t.show??!0,this._minimumTerrainLevel=t.minimumTerrainLevel,this._maximumTerrainLevel=t.maximumTerrainLevel,this._rectangle=t.rectangle??le.MAX_VALUE,this._maximumAnisotropy=t.maximumAnisotropy,this._imageryCache={},this._skeletonPlaceholder=new oT(iT.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??Wi.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD}Object.defineProperties(Wi.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}}});Wi.DEFAULT_BRIGHTNESS=1;Wi.DEFAULT_CONTRAST=1;Wi.DEFAULT_HUE=0;Wi.DEFAULT_SATURATION=1;Wi.DEFAULT_GAMMA=1;Wi.DEFAULT_SPLIT=Ir.NONE;Wi.DEFAULT_MINIFICATION_FILTER=en.LINEAR;Wi.DEFAULT_MAGNIFICATION_FILTER=pi.LINEAR;Wi.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD=.004;Wi.fromProviderAsync=function(e,t){let n=new Wi(void 0,t);return XOe(n,Promise.resolve(e)),n};Wi.fromWorldImagery=function(e){return e=e??Y.EMPTY_OBJECT,Wi.fromProviderAsync(YA({style:e.style}),e)};Wi.prototype.isBaseLayer=function(){return this._isBaseLayer};Wi.prototype.isDestroyed=function(){return!1};Wi.prototype.destroy=function(){return me(this)};var Jle=new le,zle=new le,dK=new le,jle=new le;Wi.prototype.getImageryRectangle=function(){let e=this._imageryProvider,t=this._rectangle;return le.intersection(e.rectangle,t)};Wi.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 Ui&&e.rectangle.north<Ui.MaximumLatitude&&e.rectangle.south>-Ui.MaximumLatitude,s=le.intersection(o.rectangle,this._rectangle,Jle),a=le.intersection(e.rectangle,s,zle);if(!l(a)){if(!this.isBaseLayer())return!1;let L=s,V=e.rectangle;a=zle,V.south>=L.north?a.north=a.south=L.north:V.north<=L.south?a.north=a.south=L.south:(a.south=Math.max(V.south,L.south),a.north=Math.min(V.north,L.north)),V.west>=L.east?a.west=a.east=L.east:V.east<=L.west?a.west=a.east=L.west:(a.west=Math.max(V.west,L.west),a.east=Math.min(V.east,L.east))}let c=0;a.south>0?c=a.south:a.north<0&&(c=a.north);let u=1*t.getLevelMaximumGeometricError(e.level),h=BOe(this,u,c);h=Math.max(0,h);let p=o.maximumLevel;if(h>p&&(h=p),l(o.minimumLevel)){let L=o.minimumLevel;h<L&&(h=L)}let g=o.tilingScheme,f=g.positionToTileXY(le.northwest(a),h),b=g.positionToTileXY(le.southeast(a),h),x=e.rectangle.width/512,I=e.rectangle.height/512,_=g.tileXYToRectangle(f.x,f.y,h);Math.abs(_.south-e.rectangle.north)<I&&f.y<b.y&&++f.y,Math.abs(_.east-e.rectangle.west)<x&&f.x<b.x&&++f.x;let E=g.tileXYToRectangle(b.x,b.y,h);Math.abs(E.north-e.rectangle.south)<I&&b.y>f.y&&--b.y,Math.abs(E.west-e.rectangle.east)<x&&b.x>f.x&&--b.x;let S=le.clone(e.rectangle,jle),R=g.tileXYToRectangle(f.x,f.y,h),G=le.intersection(R,s,dK),B;r?(g.rectangleToNativeRectangle(S,S),g.rectangleToNativeRectangle(R,R),g.rectangleToNativeRectangle(G,G),g.rectangleToNativeRectangle(s,s),B=g.tileXYToNativeRectangle.bind(g),x=S.width/512,I=S.height/512):B=g.tileXYToRectangle.bind(g);let w,F=0,P=1,A;!this.isBaseLayer()&&Math.abs(G.west-S.west)>=x&&(F=Math.min(1,(G.west-S.west)/S.width)),!this.isBaseLayer()&&Math.abs(G.north-S.north)>=I&&(P=Math.max(0,(G.north-S.south)/S.height));let T=P;for(let L=f.x;L<=b.x;L++)if(w=F,R=B(L,f.y,h),G=le.simpleIntersection(R,s,dK),!!l(G)){F=Math.min(1,(G.east-S.west)/S.width),L===b.x&&(this.isBaseLayer()||Math.abs(G.east-S.east)<x)&&(F=1),P=T;for(let V=f.y;V<=b.y;V++){if(A=P,R=B(L,V,h),G=le.simpleIntersection(R,s,dK),!l(G))continue;P=Math.max(0,(G.south-S.south)/S.height),V===b.y&&(this.isBaseLayer()||Math.abs(G.south-S.south)<I)&&(P=0);let W=new ce(w,P,F,A),M=this.getImageryFromCache(L,V,h);i.imagery.splice(n,0,new oT(M,W,r)),++n}}return!0};Wi.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,Jle),i=c.rectangleToNativeRectangle(i,jle)}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)};Wi.prototype._requestImagery=function(e){let t=this._imageryProvider,n=this;function i(s){if(!l(s))return o();e.image=s,e.state=Jn.RECEIVED,e.request=void 0,vo.reportSuccess(n._requestImageError)}function o(s){if(e.request.state===mi.CANCELLED){e.state=Jn.UNLOADED,e.request=void 0;return}e.state=Jn.FAILED,e.request=void 0;let a=`Failed to obtain image tile X: ${e.x} Y: ${e.y} Level: ${e.level}.`;n._requestImageError=vo.reportError(n._requestImageError,t,t.errorEvent,a,e.x,e.y,e.level,s),n._requestImageError.retry&&r()}function r(){let s=new sr({throttle:!1,throttleByServer:!0,type:Zs.IMAGERY});e.request=s,e.state=Jn.TRANSITIONING;let a=t.requestImage(e.x,e.y,e.level,s);if(!l(a)){e.state=Jn.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()};Wi.prototype._createTextureWebGL=function(e,t){let n=new sn({minificationFilter:this.minificationFilter,magnificationFilter:this.magnificationFilter}),i=t.image;return l(i.internalFormat)?new Wt({context:e,pixelFormat:i.internalFormat,width:i.width,height:i.height,source:{arrayBufferView:i.bufferView},sampler:n}):new Wt({context:e,source:i,pixelFormat:this._imageryProvider.hasAlphaChannel?tt.RGBA:tt.RGB,sampler:n})};Wi.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=Jn.RECEIVED;return}if(r.shouldDiscardImage(i)){t.state=Jn.INVALID;return}}}let o=this._createTextureWebGL(e,t);n.tilingScheme.projection instanceof Ui?t.textureWebMercator=o:t.texture=o,t.image=void 0,t.state=Jn.TEXTURE_LOADED};function Kle(e,t,n){return`${e}:${t}:${n}`}Wi.prototype._finalizeReprojectTexture=function(e,t){let n=this.minificationFilter,i=this.magnificationFilter;if(n===en.LINEAR&&i===pi.LINEAR&&!tt.isCompressedFormat(t.pixelFormat)&&Z.isPowerOfTwo(t.width)&&Z.isPowerOfTwo(t.height)){n=en.LINEAR_MIPMAP_LINEAR;let r=Kt.maximumTextureFilterAnisotropy,s=Math.min(r,this._maximumAnisotropy??r),a=Kle(n,i,s),c=e.cache.imageryLayerMipmapSamplers;l(c)||(c={},e.cache.imageryLayerMipmapSamplers=c);let d=c[a];l(d)||(d=c[a]=new sn({wrapS:Ln.CLAMP_TO_EDGE,wrapT:Ln.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i,maximumAnisotropy:s})),t.generateMipmap(Yu.NICEST),t.sampler=d}else{let r=Kle(n,i,0),s=e.cache.imageryLayerNonMipmapSamplers;l(s)||(s={},e.cache.imageryLayerNonMipmapSamplers=s);let a=s[r];l(a)||(a=s[r]=new sn({wrapS:Ln.CLAMP_TO_EDGE,wrapT:Ln.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i})),t.sampler=a}};Wi.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 Di)&&o.width/i.width>1e-5){let s=this;t.addReference();let a=new Il({persists:!0,owner:this,preExecute:function(c){ZOe(c,r,i,t.rectangle)},postExecute:function(c){t.texture=c,s._finalizeReprojectTexture(r,c),t.state=Jn.READY,t.releaseReference()},canceled:function(){t.state=Jn.TEXTURE_LOADED,t.releaseReference()}});this._reprojectComputeCommands.push(a)}else n&&(t.texture=i),this._finalizeReprojectTexture(r,i),t.state=Jn.READY};Wi.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};Wi.prototype.cancelReprojections=function(){this._reprojectComputeCommands.forEach(function(e){l(e.canceled)&&e.canceled()}),this._reprojectComputeCommands.length=0};Wi.prototype.getImageryFromCache=function(e,t,n,i){let o=qle(e,t,n),r=this._imageryCache[o];return l(r)||(r=new iT(this,e,t,n,i),this._imageryCache[o]=r),r.addReference(),r};Wi.prototype.removeImageryFromCache=function(e){let t=qle(e.x,e.y,e.level);delete this._imageryCache[t]};function qle(e,t,n){return JSON.stringify([e,t,n])}var XQ={u_textureDimensions:function(){return this.textureDimensions},u_texture:function(){return this.texture},textureDimensions:new D,texture:void 0},GOe=Ht.supportsTypedArrays()?new Float32Array(128):void 0;function ZOe(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 x=new Float32Array(256),I=0;for(let G=0;G<64;++G){let B=G/63;x[I++]=0,x[I++]=B,x[I++]=1,x[I++]=B}let _={position:0,webMercatorT:1},E=Es.getRegularGridIndices(2,64),S=It.createIndexBuffer({context:t,typedArray:E,usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT});o.vertexArray=new ui({context:t,attributes:[{index:_.position,vertexBuffer:It.createVertexBuffer({context:t,typedArray:x,usage:Ne.STATIC_DRAW}),componentsPerAttribute:2},{index:_.webMercatorT,vertexBuffer:It.createVertexBuffer({context:t,sizeInBytes:512,usage:Ne.STREAM_DRAW}),componentsPerAttribute:1}],indexBuffer:S});let R=new Oe({sources:[qw]});o.shaderProgram=ln.fromCache({context:t,vertexShaderSource:R,fragmentShaderSource:jw,attributeLocations:_}),o.sampler=new sn({wrapS:Ln.CLAMP_TO_EDGE,wrapT:Ln.CLAMP_TO_EDGE,minificationFilter:en.LINEAR,magnificationFilter:pi.LINEAR})}n.sampler=o.sampler;let r=n.width,s=n.height;XQ.textureDimensions.x=r,XQ.textureDimensions.y=s,XQ.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),h=new Wt({context:t,width:r,height:s,pixelFormat:n.pixelFormat,pixelDatatype:n.pixelDatatype,preMultiplyAlpha:n.preMultiplyAlpha});Z.isPowerOfTwo(r)&&Z.isPowerOfTwo(s)&&h.generateMipmap(Yu.NICEST);let p=i.south,g=i.north,f=GOe,b=0;for(let x=0;x<64;++x){let I=x/63,_=Z.lerp(p,g,I);a=Math.sin(_);let S=(.5*Math.log((1+a)/(1-a))-c)*u;f[b++]=S,f[b++]=S}o.vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(f),e.shaderProgram=o.shaderProgram,e.outputTexture=h,e.uniformMap=XQ,e.vertexArray=o.vertexArray}function BOe(e,t,n){let i=e._imageryProvider,o=i.tilingScheme,r=o.ellipsoid,s=e._imageryProvider.tilingScheme.projection instanceof Di?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 wOe(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function XOe(e,t){let n;try{if(n=await Promise.resolve(t),e.isDestroyed())return;e._imageryProvider=n,e._readyEvent.raiseEvent(n)}catch(i){wOe(e._errorEvent,i)}}var is=Wi;var u2n=y(C(),1),uK=class{constructor(){this.alpha=!1,this.brightness=!1,this.contrast=!1,this.hue=!1,this.saturation=!1,this.gamma=!1,this.colorToAlpha=!1}},$w=uK;var rWn=y(C(),1);var b2n=y(C(),1);var h2n=y(C(),1),mK=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}},rT=mK;var WOe=new le,$le=new le,FOe=new le,POe=new le,MOe=new le,vOe=new le,hK=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=le.intersection(o.rectangle,n.rectangle,WOe),a=o.tilingScheme,c=e._computeImageryRange(t,s,a,r),d=POe;a.rectangleToNativeRectangle(t,d);let u=MOe;a.rectangleToNativeRectangle(s,u);let h=(g,f,b)=>{let x=a.tileXYToRectangle(g,f,b),I=le.intersection(x,s,FOe);if(!l(I))return;let _=vOe;return a.rectangleToNativeRectangle(I,_),_};return e._computeImageryCoverages(n,c,r,d,h)}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(le.northwest(r),o),a=i.positionToTileXY(le.southeast(r),o),c=new rT;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,h=i.tileXYToRectangle(c.minX,c.minY,o);Math.abs(h.south-t.north)<u&&c.minY<c.maxY&&++c.minY,Math.abs(h.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 le),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=le.intersection(t,n,$le);return l(i)?i:e._clampRectangle(t,n,$le)}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 h=e._localizeToCartesianRectangle(u,o,void 0),p=t.getImageryFromCache(a,d,i),g=new e(a,d,i,h,p);s.push(g)}}return s}static _localizeToCartesianRectangle(t,n,i){l(i)||(i=new rT);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}},sT=hK;var k2n=y(C(),1);var Z2n=y(C(),1);var fK=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=Mn.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=kt.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,h=J.getSizeInBytes(s),p=o*h;if(!l(u)||u===p){let E=J.createTypedArray(s,r);return c.getBufferData(E,d),E}let g=new Uint8Array(c.sizeInBytes);c.getBufferData(g);let f=J.createTypedArray(s,r),b=u??p,x=new DataView(g.buffer,g.byteOffset,g.byteLength),I=new Array(o),_=e.createComponentsReader(s);for(let E=0;E<i;++E){let S=d+E*b;_(x,S,o,I);for(let R=0;R<o;++R)f[E*o+R]=I[R]}return f}static dequantize(t,n,i,o){if(o.octEncoded){let a=e.octDecode(t,n,o.normalizationRange,void 0);return o.octEncodedZXY&&e.convertZxyToXyz(a,a),a}let r=o.quantizedVolumeStepSize,s=o.quantizedVolumeOffset;if(i===kt.SCALAR)return e.dequantize1D(t,n,r,s,void 0);if(i===kt.VEC2)return e.dequantize2D(t,n,r,s,void 0);if(i===kt.VEC3)return e.dequantize3D(t,n,r,s,void 0);if(i===kt.VEC4)return e.dequantize4D(t,n,r,s,void 0);throw new Ae(`Element type for dequantization must be SCALAR, VEC2, VEC3, or VEC4, but is ${i}`)}static octDecode(t,n,i,o){l(o)||(o=new Float32Array(t.length));let r=new m;for(let s=0;s<n;s++)m.unpack(t,s*3,r),Mn.octDecodeInRange(r,i,r),m.pack(o,r,s*3);return o}static convertZxyToXyz(t,n,i){l(i)||(i=new Float32Array(t.length));let o=0;for(let r=0;r<n;r++,o+=3){let s=t[o+0],a=t[o+1],c=t[o+2];i[o+0]=a,i[o+1]=c,i[o+2]=s}return i}static dequantize1D(t,n,i,o,r){l(r)||(r=new Float32Array(t.length));for(let s=0;s<n;s++){let c=t[s]*i+o;r[s]=c}return r}static dequantize2D(t,n,i,o,r){l(r)||(r=new Float32Array(t.length));let s=new D;for(let a=0;a<n;a++)D.unpack(t,a*2,s),D.multiplyComponents(s,i,s),D.add(s,o,s),D.pack(s,r,a*2);return r}static dequantize3D(t,n,i,o,r){l(r)||(r=new Float32Array(t.length));let s=new m;for(let a=0;a<n;a++)m.unpack(t,a*3,s),m.multiplyComponents(s,i,s),m.add(s,o,s),m.pack(s,r,a*3);return r}static dequantize4D(t,n,i,o,r){l(r)||(r=new Float32Array(t.length));let s=new ce;for(let a=0;a<n;a++)ce.unpack(t,a*4,s),ce.multiplyComponents(s,i,s),ce.add(s,o,s),ce.pack(s,r,a*4);return r}static createComponentsReader(t){let n=e.createComponentReader(t),i=J.getSizeInBytes(t);return function(o,r,s,a){let c=r;for(let d=0;d<s;++d)a[d]=n(o,c),c+=i}}static createComponentReader(t){switch(t){case J.BYTE:return function(n,i){return n.getInt8(i)};case J.UNSIGNED_BYTE:return function(n,i){return n.getUint8(i)};case J.SHORT:return function(n,i){return n.getInt16(i,!0)};case J.UNSIGNED_SHORT:return function(n,i){return n.getUint16(i,!0)};case J.INT:return function(n,i){return n.getInt32(i,!0)};case J.UNSIGNED_INT:return function(n,i){return n.getUint32(i,!0)};case J.FLOAT:return function(n,i){return n.getFloat32(i,!0)};case J.DOUBLE:return function(n,i){return n.getFloat64(i,!0)}}throw new Ae(`The componentType must be a valid ComponentDatatype, but is ${t}`)}static transform3D(t,n,i){l(i)||(i=new Float32Array(t.length));let o=new m,r=t.length/3;for(let s=0;s<r;s++)m.unpack(t,s*3,o),X.multiplyByPoint(n,o,o),m.pack(o,i,s*3);return i}static readIndicesAsTypedArray(t){let n=t.typedArray;if(l(n))return n;let i=t.buffer,o=t.count,r=t.indexDatatype,s=e.createIndexTypedArray(r,o);return i.getBufferData(s),s}static readIndicesAsTriangleIndicesTypedArray(t,n){let i=e.readIndicesAsTypedArray(t);if(n===We.TRIANGLES)return i;if(n===We.TRIANGLE_STRIP)return e.convertTriangleStripToTriangleIndices(i);if(n===We.TRIANGLE_FAN)return e.convertTriangleFanToTriangleIndices(i);throw new Ae(`The primitiveType must be TRIANGLES (${We.TRIANGLES}, TRIANGLE_STRIP (${We.TRIANGLE_STRIP}, or TRIANGLE_FAN (${We.TRIANGLE_FAN}, but is ${n}`)}static convertTriangleStripToTriangleIndices(t){let n=t.constructor((t.length-2)*3);for(let i=0;i<t.length-2;i++)i%2===1?(n[i*3+0]=t[i+0],n[i*3+1]=t[i+2],n[i*3+2]=t[i+1]):(n[i*3+0]=t[i+0],n[i*3+1]=t[i+1],n[i*3+2]=t[i+2]);return n}static convertTriangleFanToTriangleIndices(t){let n=t.constructor((t.length-2)*3);for(let i=0;i<t.length-2;i++)n[i*3+0]=t[i+0],n[i*3+1]=t[i+1],n[i*3+2]=t[i+2];return n}static createIndexTypedArray(t,n){switch(t){case Me.UNSIGNED_BYTE:return new Uint8Array(n);case Me.UNSIGNED_SHORT:return new Uint16Array(n);case Me.UNSIGNED_INT:return new Uint32Array(n)}throw new Ae(`The indexDatatype must be UNSIGNED_BYTE (${Me.UNSIGNED_BYTE}, UNSIGNED_SHORT (${Me.UNSIGNED_SHORT}, or UNSIGNED_INT (${Me.UNSIGNED_INT}, but is ${t}`)}},eX=fK;var pK=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 Ke;Ke.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=eX.readAttributeAsTypedArray(t),r=t.type,s=kt.getNumberOfComponents(r),a=e.createIterableCartesian3FromTypedArray(o,s),c=e.transformCartesians3(a,n);return e.transformToCartographic(c,i)}static createIterableCartesian3FromTypedArray(t,n){let i=new m,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 le);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 m;return e.map(t,r=>(X.multiplyByPoint(n,r,i),i))}static transformToCartographic(t,n){let i=new ge;return e.map(t,r=>(n.cartesianToCartographic(r,i),i))}static createProjectedPositions(t,n){let i=new m;return e.map(t,r=>(n.project(r,i),i))}static computeTexCoords(t,n){let i=new D,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),h=Math.min(Math.max(d,0),1);return i.x=u,i.y=h,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:lt.TEXCOORD,setIndex:0,componentDatatype:J.FLOAT,type:kt.VEC2,normalized:!1,count:t.length/2,min:void 0,max:void 0,constant:new D(0,0),quantization:void 0,typedArray:t,byteOffset:0,byteStride:void 0}}},sx=pK;var O2n=y(C(),1);var AK=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}},tX=AK;var gK=class e{constructor(t,n,i){this._model=t,this._runtimeNode=n,this._runtimePrimitive=i,this._mappedPositionsPerEllipsoid=void 0,this._mappedPositionsModelMatrix=new X,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 Ae("Imagery layer is not part of the model");let r=this._coveragesPerLayer;if(!l(r))throw new Ae("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=It.createVertexBuffer({context:t,typedArray:r.typedArray,usage:Ne.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!X.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 h=c[u],p=sx.createCartographicPositions(o,s,h),g=sx.computeCartographicBoundingRectangle(p),f=new tX(p,r,g,h);a.push(f)}return X.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=sx.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 sT.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 sT._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 h=a[d].imagery;h.state===Jn.READY||h.state===Jn.FAILED||h.state===Jn.INVALID||(r=!1,h.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 Ae("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 Ae(`Could not find mapped positions for ellipsoid ${t}`)}imageryTexCoordAttributesPerProjection(){let t=this._imageryTexCoordAttributesPerProjection;if(!l(t))throw new Ae("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 X);let o=t.sceneGraph;return X.clone(X.IDENTITY,i),X.multiply(i,t.modelMatrix,i),X.multiply(i,o.components.transform,i),X.multiply(i,o.axisCorrectionMatrix,i),X.multiply(i,n.computedTransform,i),i}static _obtainPrimitivePositionAttribute(t){let n=Mt.getAttributeBySemantic(t,"POSITION");if(!l(n))throw new Ae("The primitive does not have a POSITION attribute");return n}static _getEllipsoid(t){return t.imageryProvider.tilingScheme.projection.ellipsoid}},ax=gK;var aWn=y(C(),1),bK=class{constructor(t,n,i,o,r){this.imageryLayer=t,this.texture=n,this.textureTranslationAndScale=i,this.textureCoordinateRectangle=o,this.imageryTexCoordAttributeSetIndex=r}},nX=bK;var NOe=!1,DOe=new le,QOe=new le,yK=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=ax._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&&(xt("imagery-texture-units",`Warning: Draped imagery requires ${u.length} texture units, truncating`),u.length=10),e._addImageryTexCoordAttributesToRenderResources(r,t);let h=[];for(let p=0;p<s.length;p++)h.push(s.get(p));e._processImageryInputs(h,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=kt.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,be.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 $w;for(let i=0;i<t.length;i++){let o=t[i];n.alpha|=o.alpha!==1,n.brightness|=o.brightness!==is.DEFAULT_BRIGHTNESS,n.contrast|=o.contrast!==is.DEFAULT_CONTRAST,n.hue|=o.hue!==is.DEFAULT_HUE,n.saturation|=o.saturation!==is.DEFAULT_SATURATION,n.gamma|=o.gamma!==is.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]",be.FRAGMENT),t.addUniform("vec4","u_imageryTextureCoordinateRectangle[IMAGERY_TEXTURE_UNITS]",be.FRAGMENT),t.addUniform("vec4","u_imageryTextureTranslationAndScale[IMAGERY_TEXTURE_UNITS]",be.FRAGMENT),n.alpha&&t.addUniform("float","u_imageryTextureAlpha[IMAGERY_TEXTURE_UNITS]",be.FRAGMENT),n.brightness&&t.addUniform("float","u_imageryTextureBrightness[IMAGERY_TEXTURE_UNITS]",be.FRAGMENT),n.contrast&&t.addUniform("float","u_imageryTextureContrast[IMAGERY_TEXTURE_UNITS]",be.FRAGMENT),n.hue&&t.addUniform("float","u_imageryTextureHue[IMAGERY_TEXTURE_UNITS]",be.FRAGMENT),n.saturation&&t.addUniform("float","u_imageryTextureSaturation[IMAGERY_TEXTURE_UNITS]",be.FRAGMENT),n.gamma&&t.addUniform("float","u_imageryTextureOneOverGamma[IMAGERY_TEXTURE_UNITS]",be.FRAGMENT),n.colorToAlpha&&t.addUniform("vec4","u_imageryTextureColorToAlpha[IMAGERY_TEXTURE_UNITS]",be.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,be.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));"]),NOe&&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)",be.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 h=0;h<u.length;h++){let p=u[h],g=e._createImageryInput(s,p,d,a);l(g)&&o.push(g)}}return o}static _createImageryInput(t,n,i,o){let r=n.imagery;if(r.state===Jn.FAILED||r.state===Jn.INVALID)return;let s=r.textureWebMercator;if(!l(s)&&(s=r.texture,!l(s))){r.state===Jn.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 nX(t,s,a,d,o)}static _computeTextureTranslationAndScale(t,n,i){let o=t.imageryProvider.tilingScheme,r=o.rectangleToNativeRectangle(n,DOe),s=o.rectangleToNativeRectangle(i,QOe);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}},iX=yK;var GWn=y(C(),1);var IWn=y(C(),1),oX=`#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 EWn=y(C(),1),UOe={UNLIT:0,PBR:1},jf=Object.freeze(UOe);var ede={name:"LightingPipelineStage"};ede.process=function(e,t){let{model:n,lightingOptions:i,shaderBuilder:o}=e;if(l(n.lightColor)){o.addDefine("USE_CUSTOM_LIGHT_COLOR",void 0,be.FRAGMENT),o.addUniform("vec3","model_lightColorHdr",be.FRAGMENT);let s=e.uniformMap;s.model_lightColorHdr=function(){return n.lightColor}}let{lightingModel:r}=i;r===jf.PBR?o.addDefine("LIGHTING_PBR",void 0,be.FRAGMENT):o.addDefine("LIGHTING_UNLIT",void 0,be.FRAGMENT),o.addFragmentLines(oX)};var rX=ede;var OWn=y(C(),1);var BWn=y(C(),1),sX=`// 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; } vec2 computeTextureTransform(vec2 texCoord, mat3 textureTransform) { return vec2(textureTransform * vec3(texCoord, 1.0)); } #ifdef HAS_NORMAL_TEXTURE vec2 getNormalTexCoords() { vec2 texCoord = TEXCOORD_NORMAL; #ifdef HAS_NORMAL_TEXTURE_TRANSFORM texCoord = vec2(u_normalTextureTransform * vec3(texCoord, 1.0)); #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 = texture(u_normalTexture, normalTexCoords).rgb; 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 = texture(u_normalTexture, normalTexCoords).rgb; 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 = computeTextureTransform(baseColorTexCoords, u_baseColorTextureTransform); #endif vec4 baseColorWithAlpha = czm_srgbToLinear(texture(u_baseColorTexture, baseColorTexCoords)); #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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 #ifdef 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 = 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{Material:kOe,MetallicRoughness:CK,SpecularGlossiness:xK,Specular:tde,Clearcoat:nde}=Tn,ide={name:"MaterialPipelineStage",_processTexture:cd,_processTextureTransform:ode};ide.process=function(e,t,n){let i=t.material,{model:o,uniformMap:r,shaderBuilder:s}=e,a=l(o.classificationType),c=a,{defaultTexture:d,defaultNormalTexture:u,defaultEmissiveTexture:h}=n.context;OOe(i,r,s,d,u,h,c),l(i.specularGlossiness)?HOe(i.specularGlossiness,r,s,d,c):(l(i.specular)&&Mt.supportedExtensions.KHR_materials_specular&&zOe(i.specular,r,s,d,c),l(i.anisotropy)&&Mt.supportedExtensions.KHR_materials_anisotropy&&JOe(i.anisotropy,r,s,d,c),l(i.clearcoat)&&Mt.supportedExtensions.KHR_materials_clearcoat&&jOe(i.clearcoat,r,s,d,c),qOe(i.metallicRoughness,r,s,d,c));let p=Mt.getAttributeBySemantic(t,lt.NORMAL),g=l(o.pointCloudShading)&&!o.pointCloudShading.normalShading,f=e.lightingOptions;i.unlit||!p||a||g?f.lightingModel=jf.UNLIT:f.lightingModel=jf.PBR;let b=o.backFaceCulling&&!i.doubleSided;e.renderStateOptions.cull.enabled=b;let x=e.alphaOptions;i.alphaMode===Yf.BLEND?x.pass=Ge.TRANSLUCENT:i.alphaMode===Yf.MASK&&(x.alphaCutoff=i.alphaCutoff),s.addFragmentLines(sX),i.doubleSided&&s.addDefine("HAS_DOUBLE_SIDED_MATERIAL",void 0,be.BOTH)};function ode(e,t,n,i,o){let r=`HAS_${o}_TEXTURE_TRANSFORM`;e.addDefine(r,void 0,be.FRAGMENT);let s=`${i}Transform`;e.addUniform("mat3",s,be.FRAGMENT),t[s]=function(){return n.transform}}function YOe(e,t,n,i,o){let r=`HAS_${o}_TEXTURE_SCALE`;e.addDefine(r,void 0,be.FRAGMENT);let s=`${i}Scale`;e.addUniform("float",s,be.FRAGMENT),t[s]=function(){return n.scale}}function cd(e,t,n,i,o,r){e.addUniform("sampler2D",i,be.FRAGMENT),t[i]=function(){return n.texture??r};let s=`HAS_${o}_TEXTURE`;e.addDefine(s,void 0,be.FRAGMENT);let c=`v_texCoord_${n.texCoord}`,d=`TEXCOORD_${o}`;e.addDefine(d,c,be.FRAGMENT);let u=n.transform;l(u)&&!$.equals(u,$.IDENTITY)&&ode(e,t,n,i,o);let{scale:h}=n;l(h)&&h!==1&&YOe(e,t,n,i,o)}function OOe(e,t,n,i,o,r,s){let{emissiveFactor:a,emissiveTexture:c,normalTexture:d,occlusionTexture:u}=e;l(a)&&!m.equals(a,kOe.DEFAULT_EMISSIVE_FACTOR)&&(n.addUniform("vec3","u_emissiveFactor",be.FRAGMENT),t.u_emissiveFactor=function(){return e.emissiveFactor},n.addDefine("HAS_EMISSIVE_FACTOR",void 0,be.FRAGMENT),l(c)&&!s&&cd(n,t,c,"u_emissiveTexture","EMISSIVE",r)),l(d)&&!s&&cd(n,t,d,"u_normalTexture","NORMAL",o),l(u)&&!s&&cd(n,t,u,"u_occlusionTexture","OCCLUSION",i)}function HOe(e,t,n,i,o){let{diffuseTexture:r,diffuseFactor:s,specularGlossinessTexture:a,specularFactor:c,glossinessFactor:d}=e;n.addDefine("USE_SPECULAR_GLOSSINESS",void 0,be.FRAGMENT),l(r)&&!o&&cd(n,t,r,"u_diffuseTexture","DIFFUSE",i),l(s)&&!ce.equals(s,xK.DEFAULT_DIFFUSE_FACTOR)&&(n.addUniform("vec4","u_diffuseFactor",be.FRAGMENT),t.u_diffuseFactor=function(){return e.diffuseFactor},n.addDefine("HAS_DIFFUSE_FACTOR",void 0,be.FRAGMENT)),l(a)&&!o&&cd(n,t,a,"u_specularGlossinessTexture","SPECULAR_GLOSSINESS",i),l(c)&&!m.equals(c,xK.DEFAULT_SPECULAR_FACTOR)&&(n.addUniform("vec3","u_legacySpecularFactor",be.FRAGMENT),t.u_legacySpecularFactor=function(){return e.specularFactor},n.addDefine("HAS_LEGACY_SPECULAR_FACTOR",void 0,be.FRAGMENT)),l(d)&&d!==xK.DEFAULT_GLOSSINESS_FACTOR&&(n.addUniform("float","u_glossinessFactor",be.FRAGMENT),t.u_glossinessFactor=function(){return e.glossinessFactor},n.addDefine("HAS_GLOSSINESS_FACTOR",void 0,be.FRAGMENT))}function zOe(e,t,n,i,o){let{specularTexture:r,specularFactor:s,specularColorTexture:a,specularColorFactor:c}=e;n.addDefine("USE_SPECULAR",void 0,be.FRAGMENT),l(r)&&!o&&cd(n,t,r,"u_specularTexture","SPECULAR",i),l(s)&&s!==tde.DEFAULT_SPECULAR_FACTOR&&(n.addUniform("float","u_specularFactor",be.FRAGMENT),t.u_specularFactor=function(){return e.specularFactor},n.addDefine("HAS_SPECULAR_FACTOR",void 0,be.FRAGMENT)),l(a)&&!o&&cd(n,t,a,"u_specularColorTexture","SPECULAR_COLOR",i),l(c)&&!m.equals(c,tde.DEFAULT_SPECULAR_COLOR_FACTOR)&&(n.addUniform("vec3","u_specularColorFactor",be.FRAGMENT),t.u_specularColorFactor=function(){return e.specularColorFactor},n.addDefine("HAS_SPECULAR_COLOR_FACTOR",void 0,be.FRAGMENT))}var KOe=new m;function JOe(e,t,n,i,o){let{anisotropyStrength:r,anisotropyRotation:s,anisotropyTexture:a}=e;n.addDefine("USE_ANISOTROPY",void 0,be.FRAGMENT),l(a)&&!o&&cd(n,t,a,"u_anisotropyTexture","ANISOTROPY",i);let c=Math.cos(s),d=Math.sin(s);n.addUniform("vec3","u_anisotropy",be.FRAGMENT),t.u_anisotropy=function(){return m.fromElements(c,d,r,KOe)}}function jOe(e,t,n,i,o){let{clearcoatFactor:r,clearcoatTexture:s,clearcoatRoughnessFactor:a,clearcoatRoughnessTexture:c,clearcoatNormalTexture:d}=e;n.addDefine("USE_CLEARCOAT",void 0,be.FRAGMENT),l(r)&&r!==nde.DEFAULT_CLEARCOAT_FACTOR&&(n.addUniform("float","u_clearcoatFactor",be.FRAGMENT),t.u_clearcoatFactor=function(){return e.clearcoatFactor},n.addDefine("HAS_CLEARCOAT_FACTOR",void 0,be.FRAGMENT)),l(s)&&!o&&cd(n,t,s,"u_clearcoatTexture","CLEARCOAT",i),l(a)&&r!==nde.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR&&(n.addUniform("float","u_clearcoatRoughnessFactor",be.FRAGMENT),t.u_clearcoatRoughnessFactor=function(){return e.clearcoatRoughnessFactor},n.addDefine("HAS_CLEARCOAT_ROUGHNESS_FACTOR",void 0,be.FRAGMENT)),l(c)&&!o&&cd(n,t,c,"u_clearcoatRoughnessTexture","CLEARCOAT_ROUGHNESS",i),l(d)&&!o&&cd(n,t,d,"u_clearcoatNormalTexture","CLEARCOAT_NORMAL",i)}function qOe(e,t,n,i,o){n.addDefine("USE_METALLIC_ROUGHNESS",void 0,be.FRAGMENT);let r=e.baseColorTexture;l(r)&&!o&&cd(n,t,r,"u_baseColorTexture","BASE_COLOR",i);let s=e.baseColorFactor;l(s)&&!ce.equals(s,CK.DEFAULT_BASE_COLOR_FACTOR)&&(n.addUniform("vec4","u_baseColorFactor",be.FRAGMENT),t.u_baseColorFactor=function(){return e.baseColorFactor},n.addDefine("HAS_BASE_COLOR_FACTOR",void 0,be.FRAGMENT));let a=e.metallicRoughnessTexture;l(a)&&!o&&cd(n,t,a,"u_metallicRoughnessTexture","METALLIC_ROUGHNESS",i);let c=e.metallicFactor;l(c)&&c!==CK.DEFAULT_METALLIC_FACTOR&&(n.addUniform("float","u_metallicFactor",be.FRAGMENT),t.u_metallicFactor=function(){return e.metallicFactor},n.addDefine("HAS_METALLIC_FACTOR",void 0,be.FRAGMENT));let d=e.roughnessFactor;l(d)&&d!==CK.DEFAULT_ROUGHNESS_FACTOR&&(n.addUniform("float","u_roughnessFactor",be.FRAGMENT),t.u_roughnessFactor=function(){return e.roughnessFactor},n.addDefine("HAS_ROUGHNESS_FACTOR",void 0,be.FRAGMENT))}var aX=ide;var KWn=y(C(),1);var Rl={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"};Rl.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine(Rl.METADATA_PICKING_VALUE_TYPE,"float",be.FRAGMENT),i.addDefine(Rl.METADATA_PICKING_VALUE_STRING,"0.0",be.FRAGMENT),i.addDefine(Rl.METADATA_PICKING_VALUE_COMPONENT_X,"0.0",be.FRAGMENT),i.addDefine(Rl.METADATA_PICKING_VALUE_COMPONENT_Y,"0.0",be.FRAGMENT),i.addDefine(Rl.METADATA_PICKING_VALUE_COMPONENT_Z,"0.0",be.FRAGMENT),i.addDefine(Rl.METADATA_PICKING_VALUE_COMPONENT_W,"0.0",be.FRAGMENT),i.addFunction("metadataPickingStage","void metadataPickingStage(Metadata metadata, MetadataClass metadataClass, inout vec4 metadataValues)",be.FRAGMENT),i.addFunctionLines("metadataPickingStage",[`${Rl.METADATA_PICKING_VALUE_TYPE} value = ${Rl.METADATA_PICKING_VALUE_TYPE}(${Rl.METADATA_PICKING_VALUE_STRING});`,`metadataValues.x = ${Rl.METADATA_PICKING_VALUE_COMPONENT_X};`,`metadataValues.y = ${Rl.METADATA_PICKING_VALUE_COMPONENT_Y};`,`metadataValues.z = ${Rl.METADATA_PICKING_VALUE_COMPONENT_Z};`,`metadataValues.w = ${Rl.METADATA_PICKING_VALUE_COMPONENT_W};`],be.FRAGMENT)};var Jd=Rl;var rFn=y(C(),1);var jWn=y(C(),1),cX=`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 fc={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)"};fc.process=function(e,t){let n=e.shaderBuilder;n.addDefine("HAS_MORPH_TARGETS",void 0,be.VERTEX),oHe(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 h=c[u],p=h.semantic;p!==lt.POSITION&&p!==lt.NORMAL&&p!==lt.TANGENT||(eHe(e,h,e.attributeIndex,a),e.attributeIndex++)}}rHe(n);let r=e.runtimeNode.morphWeights.length;n.addUniform("float",`u_morphWeights[${r}]`,be.VERTEX),n.addVertexLines(cX);let s={u_morphWeights:function(){return e.runtimeNode.morphWeights}};e.uniformMap=Lt(s,e.uniformMap)};var $Oe={attributeString:void 0,functionId:void 0};function eHe(e,t,n,i){let o=e.shaderBuilder;tHe(e,t,n);let r=nHe(t,$Oe);iHe(o,r,i)}function tHe(e,t,n){let i={index:n,value:l(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,componentsPerAttribute:kt.getNumberOfComponents(t.type),componentDatatype:t.componentDatatype,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};e.attributes.push(i)}function nHe(e,t){switch(e.semantic){case lt.POSITION:t.attributeString="Position",t.functionId=fc.FUNCTION_ID_GET_MORPHED_POSITION;break;case lt.NORMAL:t.attributeString="Normal",t.functionId=fc.FUNCTION_ID_GET_MORPHED_NORMAL;break;case lt.TANGENT:t.attributeString="Tangent",t.functionId=fc.FUNCTION_ID_GET_MORPHED_TANGENT;break;default:break}return t}function iHe(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 oHe(e){e.addFunction(fc.FUNCTION_ID_GET_MORPHED_POSITION,fc.FUNCTION_SIGNATURE_GET_MORPHED_POSITION,be.VERTEX),e.addFunctionLines(fc.FUNCTION_ID_GET_MORPHED_POSITION,["vec3 morphedPosition = position;"]),e.addFunction(fc.FUNCTION_ID_GET_MORPHED_NORMAL,fc.FUNCTION_SIGNATURE_GET_MORPHED_NORMAL,be.VERTEX),e.addFunctionLines(fc.FUNCTION_ID_GET_MORPHED_NORMAL,["vec3 morphedNormal = normal;"]),e.addFunction(fc.FUNCTION_ID_GET_MORPHED_TANGENT,fc.FUNCTION_SIGNATURE_GET_MORPHED_TANGENT,be.VERTEX),e.addFunctionLines(fc.FUNCTION_ID_GET_MORPHED_TANGENT,["vec3 morphedTangent = tangent;"])}function rHe(e){e.addFunctionLines(fc.FUNCTION_ID_GET_MORPHED_POSITION,["return morphedPosition;"]),e.addFunctionLines(fc.FUNCTION_ID_GET_MORPHED_NORMAL,["return morphedNormal;"]),e.addFunctionLines(fc.FUNCTION_ID_GET_MORPHED_TANGENT,["return morphedTangent;"])}var lX=fc;var pFn=y(C(),1);var rde={name:"PickingPipelineStage"};rde.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)sHe(e,t,a,i);else if(l(a))aHe(e,i);else{let c=sde(e),d=i.createPickId(c);s._pipelineResources.push(d),s._pickIds.push(d),r.addUniform("vec4","czm_pickColor",be.FRAGMENT);let u=e.uniformMap;u.czm_pickColor=function(){return d.color},e.pickId="czm_pickColor"}};function sde(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(Tr.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 sHe(e,t,n){let i=e.model,o,r,s=i.featureIdLabel,a=i.instanceFeatureIdLabel;l(i.featureTableId)?o=i.featureTableId:l(n)?(r=Mt.getFeatureIdsByLabel(n.featureIds,a),o=r.propertyTableId):(r=Mt.getFeatureIdsByLabel(t.featureIds,s),o=r.propertyTableId);let c=i.featureTables[o];e.shaderBuilder.addUniform("sampler2D","model_pickTexture",be.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))"}function aHe(e,t){let n=e.instanceCount,i=new Array(n),o=new Uint8Array(n*4),r=e.model,s=r._pipelineResources;for(let h=0;h<n;h++){let p=sde(e,h),g=t.createPickId(p);s.push(g),i[h]=g;let f=g.color;o[h*4+0]=U.floatToByte(f.red),o[h*4+1]=U.floatToByte(f.green),o[h*4+2]=U.floatToByte(f.blue),o[h*4+3]=U.floatToByte(f.alpha)}r._pickIds=i;let a=It.createVertexBuffer({context:t,typedArray:o,usage:Ne.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,be.BOTH),u.addAttribute("vec4","a_pickColor"),u.addVarying("vec4","v_pickColor"),e.pickId="v_pickColor"}var dX=rde;var PFn=y(C(),1);var gFn=y(C(),1),cHe={ADD:0,REPLACE:1},tr=Object.freeze(cHe);var yFn=y(C(),1),uX=`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 lHe=new ce,cde={name:"PointCloudStylingPipelineStage"};cde.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 b=hHe(a),x=fHe(r,b);pHe(i,x);let _=AHe(x).indexOf("normalMC")>=0,E=Mt.getAttributeBySemantic(t,lt.NORMAL);if(_&&!E)throw new de("Style references the NORMAL semantic but the point cloud does not have normals");i.addDefine("COMPUTE_POSITION_WC_STYLE",void 0,be.VERTEX),x.styleTranslucent&&(e.alphaOptions.pass=Ge.TRANSLUCENT)}let u=o.pointCloudShading;u.attenuation&&i.addDefine("HAS_POINT_CLOUD_ATTENUATION",void 0,be.VERTEX),u.backFaceCulling&&i.addDefine("HAS_POINT_CLOUD_BACK_FACE_CULLING",void 0,be.VERTEX);let h,p,g;Tr.is3DTiles(o.type)&&(p=!0,h=o.content,g=h.tile.refine===tr.ADD),i.addUniform("vec4","model_pointCloudParameters",be.VERTEX),i.addVertexLines(uX);let f=e.uniformMap;f.model_pointCloudParameters=function(){let b=lHe,x=1;p&&(x=g?5:h.tileset.memoryAdjustedScreenSpaceError),b.x=u.maximumAttenuation??x,b.x*=n.pixelRatio;let I=dHe(e,t,u,h);b.y=I*u.geometricErrorScale;let _=n.context,E=n.camera.frustum,S;return n.mode===re.SCENE2D||E instanceof gn?S=Number.POSITIVE_INFINITY:S=_.drawingBufferHeight/n.camera.frustum.sseDenominator,b.z=S,p&&(b.w=h.tileset.timeSinceLoad),b}};var ade=new m;function dHe(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=Mt.getAttributeBySemantic(t,lt.POSITION),r=o.count,s=e.runtimeNode.transform,a=m.subtract(o.max,o.min,ade);a=X.multiplyByPointAsVector(s,a,ade);let c=a.x*a.y*a.z;return Z.cbrt(c/r)}var uHe={colorStyleFunction:void 0,showStyleFunction:void 0,pointSizeStyleFunction:void 0,styleTranslucent:!1},mHe={POSITION:"attributes.positionMC",POSITION_ABSOLUTE:"v_positionWC",COLOR:"attributes.color_0",NORMAL:"attributes.normalMC"};function hHe(e){let t=ke(mHe);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 IK="ProcessedAttributes attributes, Metadata metadata, float tiles3d_tileset_time";function fHe(e,t){let n=uHe,i={translucent:!1};return n.colorStyleFunction=e.getColorShaderFunction(`getColorFromStyle(${IK})`,t,i),n.showStyleFunction=e.getShowShaderFunction(`getShowFromStyle(${IK})`,t,i),n.pointSizeStyleFunction=e.getPointSizeShaderFunction(`getPointSizeFromStyle(${IK})`,t,i),n.styleTranslucent=l(n.colorStyleFunction)&&i.translucent,n}function pHe(e,t){let n=t.colorStyleFunction;l(n)&&(e.addDefine("HAS_POINT_CLOUD_COLOR_STYLE",void 0,be.BOTH),e.addVertexLines(n),e.addVarying("vec4","v_pointCloudColor"));let i=t.showStyleFunction;l(i)&&(e.addDefine("HAS_POINT_CLOUD_SHOW_STYLE",void 0,be.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,be.VERTEX),e.addVertexLines(o))}function _K(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 AHe(e){let t=e.colorStyleFunction,n=e.showStyleFunction,i=e.pointSizeStyleFunction,o=[];return l(t)&&_K(t,o),l(n)&&_K(n,o),l(i)&&_K(i,o),o}var mX=cde;var zFn=y(C(),1);var vFn=y(C(),1),hX=`void primitiveOutlineStage() { v_outlineCoordinates = a_outlineCoordinates; } `;var DFn=y(C(),1),fX=`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 lde={name:"PrimitiveOutlinePipelineStage"};lde.process=function(e,t,n){let i=e.shaderBuilder,o=e.uniformMap;i.addDefine("HAS_PRIMITIVE_OUTLINE",void 0,be.BOTH),i.addAttribute("vec3","a_outlineCoordinates"),i.addVarying("vec3","v_outlineCoordinates");let r=t.outlineCoordinates,s={index:e.attributeIndex++,vertexBuffer:r.buffer,componentsPerAttribute:kt.getNumberOfComponents(r.type),componentDatatype:r.componentDatatype,offsetInBytes:r.byteOffset,strideInBytes:r.byteStride,normalize:r.normalized};e.attributes.push(s),i.addUniform("sampler2D","model_outlineTexture",be.FRAGMENT);let a=qC.createTexture(n.context);o.model_outlineTexture=function(){return a};let c=e.model;i.addUniform("vec4","model_outlineColor",be.FRAGMENT),o.model_outlineColor=function(){return c.outlineColor},i.addUniform("bool","model_showOutline",be.FRAGMENT),o.model_showOutline=function(){return c.showOutline},i.addVertexLines(hX),i.addFragmentLines(fX)};var pX=lde;var ePn=y(C(),1);var dde={name:"PrimitiveStatisticsPipelineStage",_countGeometry:ude,_count2DPositions:mde,_countMorphTargetAttributes:hde,_countMaterialTextures:fde,_countFeatureIdTextures:pde,_countBinaryMetadata:Ade};dde.process=function(e,t,n){let i=e.model,o=i.statistics;ude(o,t),mde(o,e.runtimePrimitive),hde(o,t),fde(o,t.material),pde(o,t.featureIds),Ade(o,i)};function ude(e,t){let n=l(t.indices)?t.indices.count:Mt.getAttributeBySemantic(t,"POSITION").count,i=t.primitiveType;i===We.POINTS?e.pointsLength+=n:We.isTriangles(i)&&(e.trianglesLength+=gHe(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 gHe(e,t){switch(e){case We.TRIANGLES:return t/3;case We.TRIANGLE_STRIP:case We.TRIANGLE_FAN:return Math.max(t-2,0);default:return 0}}function mde(e,t){let n=t.positionBuffer2D;l(n)&&e.addBuffer(n,!0)}function hde(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 fde(e,t){let n=bHe(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 bHe(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 pde(e,t){let n=t.length;for(let i=0;i<n;i++){let o=t[i];if(o instanceof Tn.FeatureIdTexture){let r=o.textureReader;l(r.texture)&&e.addTexture(r.texture)}}}function Ade(e,t){let n=t.structuralMetadata;l(n)&&(yHe(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 yHe(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 AX=dde;var pPn=y(C(),1);var CHe=new X,xHe=new X,gde={name:"SceneMode2DPipelineStage"};gde.process=function(e,t,n){let i=Mt.getAttributeBySemantic(t,lt.POSITION),o=e.shaderBuilder,r=e.model,s=r.sceneGraph.computedModelMatrix,a=e.runtimeNode.computedTransform,c=X.multiplyTransformation(s,a,CHe),d=EHe(e,c,n),u=e.runtimePrimitive;u.boundingSphere2D=d;let h=e.runtimeNode.node.instances;if(l(h))return;if(l(i.typedArray)){let b=LHe(i,c,d,n);u.positionBuffer2D=b,r._modelResources.push(b),i.typedArray=void 0}o.addDefine("USE_2D_POSITIONS",void 0,be.VERTEX),o.addUniform("mat4","u_modelView2D",be.VERTEX);let p=X.fromTranslation(d.center,new X),g=n.context,f={u_modelView2D:function(){return X.multiplyTransformation(g.uniformState.view,p,xHe)}};e.uniformMap=Lt(f,e.uniformMap)};var IHe=new m,_He=new m;function EHe(e,t,n){let i=X.multiplyByPoint(t,e.positionMin,IHe),o=to.computeActualEllipsoidPosition(n,i,i),r=X.multiplyByPoint(t,e.positionMax,_He),s=to.computeActualEllipsoidPosition(n,r,r);return ue.fromCornerPoints(o,s,new ue)}var bde=new m;function THe(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=m.fromArray(e,s,bde),c=m.multiplyComponents(a,r,a),d=m.add(c,o,c);i[s]=d.x,i[s+1]=d.y,i[s+2]=d.z}return i}function SHe(e,t,n,i){let o;l(e.quantization)?o=THe(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=m.fromArray(o,c,bde);if(isNaN(d.x)||isNaN(d.y)||isNaN(d.z))continue;let u=X.multiplyByPoint(t,d,d),h=to.computeActualEllipsoidPosition(i,u,u),p=m.subtract(h,n,h);o[c]=p.x,o[c+1]=p.y,o[c+2]=p.z}return o}function LHe(e,t,n,i){let o=ke(i);o.mode=re.COLUMBUS_VIEW;let r=n.center,s=SHe(e,t,r,o),a=It.createVertexBuffer({context:i.context,typedArray:s,usage:Ne.STATIC_DRAW});return a.vertexArrayDestroyable=!1,a}var gX=gde;var _Pn=y(C(),1);var gPn=y(C(),1),bX=`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 cx={name:"SkinningPipelineStage",FUNCTION_ID_GET_SKINNING_MATRIX:"getSkinningMatrix",FUNCTION_SIGNATURE_GET_SKINNING_MATRIX:"mat4 getSkinningMatrix()"};cx.process=function(e,t){let n=e.shaderBuilder;n.addDefine("HAS_SKINNING",void 0,be.VERTEX),VHe(n,t);let i=e.runtimeNode,o=i.computedJointMatrices;n.addUniform("mat4",`u_jointMatrices[${o.length}]`,be.VERTEX),n.addVertexLines(bX);let r={u_jointMatrices:function(){return i.computedJointMatrices}};e.uniformMap=Lt(r,e.uniformMap)};function RHe(e){let t=-1,n=e.attributes,i=n.length;for(let o=0;o<i;o++){let r=n[o];(r.semantic===lt.JOINTS||r.semantic===lt.WEIGHTS)&&(t=Math.max(t,r.setIndex))}return t}function VHe(e,t){e.addFunction(cx.FUNCTION_ID_GET_SKINNING_MATRIX,cx.FUNCTION_SIGNATURE_GET_SKINNING_MATRIX,be.VERTEX),e.addFunctionLines(cx.FUNCTION_ID_GET_SKINNING_MATRIX,["mat4 skinnedMatrix = mat4(0);"]);let i,o,r=["x","y","z","w"],s=RHe(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(cx.FUNCTION_ID_GET_SKINNING_MATRIX,[d])}e.addFunctionLines(cx.FUNCTION_ID_GET_SKINNING_MATRIX,["return skinnedMatrix;"])}var yX=cx;var GPn=y(C(),1);var TPn=y(C(),1),CX=`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 yde={name:"VerticalExaggerationPipelineStage"},GHe=new D;yde.process=function(e,t,n){let{shaderBuilder:i,uniformMap:o}=e;i.addVertexLines(CX),i.addDefine("HAS_VERTICAL_EXAGGERATION",void 0,be.VERTEX),i.addUniform("vec2","u_verticalExaggerationAndRelativeHeight",be.VERTEX),o.u_verticalExaggerationAndRelativeHeight=function(){return D.fromElements(n.verticalExaggeration,n.verticalExaggerationRelativeHeight,GHe)}};var xX=yde;var OPn=y(C(),1);var WPn=y(C(),1);var EK={};function ZHe(e){let t=Me.createTypedArray(e,e*2),n=e,i=0;for(let o=0;o<n;o+=3)t[i++]=o,t[i++]=o+1,t[i++]=o+1,t[i++]=o+2,t[i++]=o+2,t[i++]=o;return t}function BHe(e,t){let n=t.length,i=Me.createTypedArray(e,n*2),o=0;for(let r=0;r<n;r+=3){let s=t[r],a=t[r+1],c=t[r+2];i[o++]=s,i[o++]=a,i[o++]=a,i[o++]=c,i[o++]=c,i[o++]=s}return i}function wHe(e){let t=e-2,n=2+t*4,i=Me.createTypedArray(e,n),o=0;i[o++]=0,i[o++]=1;for(let r=0;r<t;r++)i[o++]=r+1,i[o++]=r+2,i[o++]=r+2,i[o++]=r;return i}function XHe(e,t){let i=t.length-2,o=2+i*4,r=Me.createTypedArray(e,o),s=0;r[s++]=t[0],r[s++]=t[1];for(let a=0;a<i;a++){let c=t[a],d=t[a+1],u=t[a+2];r[s++]=d,r[s++]=u,r[s++]=u,r[s++]=c}return r}function WHe(e){let t=e-2,n=2+t*4,i=Me.createTypedArray(e,n),o=0;i[o++]=0,i[o++]=1;for(let r=0;r<t;r++)i[o++]=r+1,i[o++]=r+2,i[o++]=r+2,i[o++]=0;return i}function FHe(e,t){let i=t.length-2,o=2+i*4,r=Me.createTypedArray(e,o),s=0,a=t[0];r[s++]=a,r[s++]=t[1];for(let c=0;c<i;c++){let d=t[c+1],u=t[c+2];r[s++]=d,r[s++]=u,r[s++]=u,r[s++]=a}return r}EK.createWireframeIndices=function(e,t,n){let i=l(n);if(e===We.TRIANGLES)return i?BHe(t,n):ZHe(t);if(e===We.TRIANGLE_STRIP)return i?XHe(t,n):wHe(t);if(e===We.TRIANGLE_FAN)return i?FHe(t,n):WHe(t)};EK.getWireframeIndicesCount=function(e,t){return e===We.TRIANGLES?t*2:e===We.TRIANGLE_STRIP||e===We.TRIANGLE_FAN?2+(t-2)*4:t};var aT=EK;var Cde={name:"WireframePipelineStage"};Cde.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_WIREFRAME",void 0,be.FRAGMENT);let o=e.model,r=PHe(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=We.LINES,e.count=aT.getWireframeIndicesCount(a,c)};function PHe(e,t,n){let o=Mt.getAttributeBySemantic(e,lt.POSITION).count,r=n.context.webgl2,s;if(l(t)){let u=t.buffer,h=t.count;l(u)&&r?(s=u.sizeInBytes===h?new Uint8Array(h):Me.createTypedArray(o,h),u.getBufferData(s)):s=t.typedArray}let a=e.primitiveType,c=aT.createWireframeIndices(a,o,s),d=Me.fromSizeInBytes(c.BYTES_PER_ELEMENT);return It.createIndexBuffer({context:n.context,typedArray:c,usage:Ne.STATIC_DRAW,indexDatatype:d})}var IX=Cde;function xde(e){e=e??Y.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=[]}xde.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!==re.SCENE3D&&!e.scene3DOnly&&o._projectTo2D,u=e.verticalExaggeration!==1&&o.hasVerticalExaggeration,h=l(n.morphTargets)&&n.morphTargets.length>0,p=l(i.skin),g=l(o.imageryLayers),f=l(r),x=!(f&&l(r.fragmentShaderText))||r.mode!==DA.REPLACE_MATERIAL,I=Mt.hasQuantizedAttributes(n.attributes),_=o.debugWireframe&&We.isTriangles(n.primitiveType)&&(o._enableDebugWireframe||a),E=o.pointCloudShading,S=l(E)&&E.attenuation,R=l(E)&&E.backFaceCulling,G=n.primitiveType===We.POINTS&&(l(s)||S||R),B=o._enableShowOutline&&l(n.outlineCoordinates),w=MHe(o,i,n),F=l(o.classificationType);d&&t.push(gX),t.push(Mw),_&&t.push(IX),F&&t.push(Iw),h&&t.push(lX),p&&t.push(yX),G&&t.push(mX),I&&t.push(Xw),g&&(B?xt("outlines-and-draping","Primitive outlines disable imagery draping"):t.push(iX)),x&&t.push(aX),t.push(a0),t.push(rm),t.push(Jd),w.hasPropertyTable&&(t.push(l0),t.push(xw),t.push(Tw)),u&&t.push(xX),f&&t.push(Bw),t.push(rX),o.allowPicking&&t.push(dX),B&&t.push(pX),t.push(Cw),t.push(AX)};function MHe(e,t,n){let i;return l(t.instances)&&(i=Mt.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),l(i))?{hasFeatureIds:!0,hasPropertyTable:l(i.propertyTableId)}:(i=Mt.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),l(i)?{hasFeatureIds:!0,hasPropertyTable:l(i.propertyTableId)}:{hasFeatureIds:!1,hasPropertyTable:!1})}var _X=xde;var RMn=y(C(),1);function TK(e){e=e??Y.EMPTY_OBJECT,this._sceneGraph=e.sceneGraph;let t=e.skin;this._skin=t,this._inverseBindMatrices=void 0,this._joints=[],this._jointMatrices=[],vHe(this)}Object.defineProperties(TK.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 vHe(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 h=n[c],p=Ide(u,h,new X);a.push(p)}}function Ide(e,t,n){let i=X.multiplyTransformation(e.transformToRoot,e.transform,n);return n=X.multiplyTransformation(i,t,n),n}TK.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]=Ide(i,o,e[n])}};var EX=TK;var JMn=y(C(),1);var GMn=y(C(),1);function NHe(){this.pass=void 0,this.alphaCutoff=void 0}var lx=NHe;var kMn=y(C(),1);var BMn=y(C(),1);function SK(e){this.name=e,this.fields=[]}SK.prototype.addField=function(e,t){let n=` ${e} ${t};`;this.fields.push(n)};SK.prototype.generateGlslLines=function(){let e=this.fields;return e.length===0&&(e=[" float _empty;"]),[].concat(`struct ${this.name}`,"{",e,"};")};var TX=SK;var XMn=y(C(),1);function LK(e){this.signature=e,this.body=[]}LK.prototype.addLines=function(e){let t=this.body;if(Array.isArray(e)){let n=e.length;for(let i=0;i<n;i++)t.push(` ${e[i]}`)}else t.push(` ${e}`)};LK.prototype.generateGlslLines=function(){return[].concat(this.signature,"{",this.body,"}")};var SX=LK;function Vl(){this._positionAttributeLine=void 0,this._nextAttributeLocation=1,this._attributeLocations={},this._attributeLines=[],this._structs={},this._functions={},this._vertexShaderParts={defineLines:[],uniformLines:[],shaderLines:[],varyingLines:[],structIds:[],functionIds:[]},this._fragmentShaderParts={defineLines:[],uniformLines:[],shaderLines:[],varyingLines:[],structIds:[],functionIds:[]}}Object.defineProperties(Vl.prototype,{attributeLocations:{get:function(){return this._attributeLocations}}});Vl.prototype.addDefine=function(e,t,n){n=n??be.BOTH;let i=e;l(t)&&(i+=` ${t.toString()}`),be.includesVertexShader(n)&&this._vertexShaderParts.defineLines.push(i),be.includesFragmentShader(n)&&this._fragmentShaderParts.defineLines.push(i)};Vl.prototype.addStruct=function(e,t,n){this._structs[e]=new TX(t),be.includesVertexShader(n)&&this._vertexShaderParts.structIds.push(e),be.includesFragmentShader(n)&&this._fragmentShaderParts.structIds.push(e)};Vl.prototype.addStructField=function(e,t,n){this._structs[e].addField(t,n)};Vl.prototype.addFunction=function(e,t,n){this._functions[e]=new SX(t),be.includesVertexShader(n)&&this._vertexShaderParts.functionIds.push(e),be.includesFragmentShader(n)&&this._fragmentShaderParts.functionIds.push(e)};Vl.prototype.addFunctionLines=function(e,t){this._functions[e].addLines(t)};Vl.prototype.addUniform=function(e,t,n){n=n??be.BOTH;let i=`uniform ${e} ${t};`;be.includesVertexShader(n)&&this._vertexShaderParts.uniformLines.push(i),be.includesFragmentShader(n)&&this._fragmentShaderParts.uniformLines.push(i)};Vl.prototype.setPositionAttribute=function(e,t){return this._positionAttributeLine=`in ${e} ${t};`,this._attributeLocations[t]=0,0};Vl.prototype.addAttribute=function(e,t){let n=`in ${e} ${t};`;this._attributeLines.push(n);let i=this._nextAttributeLocation;return this._attributeLocations[t]=i,this._nextAttributeLocation+=QHe(e),i};Vl.prototype.addVarying=function(e,t,n){n=l(n)?`${n} `:"";let i=`${e} ${t};`;this._vertexShaderParts.varyingLines.push(`${n}out ${i}`),this._fragmentShaderParts.varyingLines.push(`${n}in ${i}`)};Vl.prototype.addVertexLines=function(e){let t=this._vertexShaderParts.shaderLines;Array.isArray(e)?ci(t,e):t.push(e)};Vl.prototype.addFragmentLines=function(e){let t=this._fragmentShaderParts.shaderLines;Array.isArray(e)?ci(t,e):t.push(e)};Vl.prototype.buildShaderProgram=function(e){let t=l(this._positionAttributeLine)?[this._positionAttributeLine]:[],n=DHe(this),i=UHe(this),o=t.concat(this._attributeLines,this._vertexShaderParts.uniformLines,this._vertexShaderParts.varyingLines,n.vertexLines,i.vertexLines,this._vertexShaderParts.shaderLines).join(` `),r=new Oe({defines:this._vertexShaderParts.defineLines,sources:[o]}),s=this._fragmentShaderParts.uniformLines.concat(this._fragmentShaderParts.varyingLines,n.fragmentLines,i.fragmentLines,this._fragmentShaderParts.shaderLines).join(` `),a=new Oe({defines:this._fragmentShaderParts.defineLines,sources:[s]});return ln.fromCache({context:e,vertexShaderSource:r,fragmentShaderSource:a,attributeLocations:this._attributeLocations})};Vl.prototype.clone=function(){return ke(this,!0)};function DHe(e){let t=[],n=[],i,o=e._vertexShaderParts.structIds,r,s,a;for(i=0;i<o.length;i++)r=o[i],s=e._structs[r],a=s.generateGlslLines(),ci(t,a);for(o=e._fragmentShaderParts.structIds,i=0;i<o.length;i++)r=o[i],s=e._structs[r],a=s.generateGlslLines(),ci(n,a);return{vertexLines:t,fragmentLines:n}}function QHe(e){switch(e){case"mat2":return 2;case"mat3":return 3;case"mat4":return 4;default:return 1}}function UHe(e){let t=[],n=[],i,o=e._vertexShaderParts.functionIds,r,s,a;for(i=0;i<o.length;i++)r=o[i],s=e._functions[r],a=s.generateGlslLines(),ci(t,a);for(o=e._fragmentShaderParts.functionIds,i=0;i<o.length;i++)r=o[i],s=e._functions[r],a=s.generateGlslLines(),ci(n,a);return{vertexLines:t,fragmentLines:n}}var OA=Vl;function kHe(e){this.shaderBuilder=new OA,this.model=e,this.uniformMap={},this.alphaOptions=new lx,this.renderStateOptions=Qe.getState(Qe.fromCache({depthTest:{enabled:!0,func:Fa.LESS_OR_EQUAL}})),this.hasSilhouette=!1,this.hasSkipLevelOfDetail=!1,this.nodeRenderResources=[]}var LX=kHe;var avn=y(C(),1);var qMn=y(C(),1),RX=`void silhouetteStage(inout vec4 color) { if(model_silhouettePass) { color = czm_gammaCorrect(model_silhouetteColor); } }`;var evn=y(C(),1),VX=`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 WQ={name:"ModelSilhouettePipelineStage"};WQ.silhouettesLength=0;WQ.process=function(e,t,n){l(t._silhouetteId)||(t._silhouetteId=++WQ.silhouettesLength);let i=e.shaderBuilder;i.addDefine("HAS_SILHOUETTE",void 0,be.BOTH),i.addVertexLines(VX),i.addFragmentLines(RX),i.addUniform("vec4","model_silhouetteColor",be.FRAGMENT),i.addUniform("float","model_silhouetteSize",be.VERTEX),i.addUniform("bool","model_silhouettePass",be.BOTH);let o={model_silhouetteColor:function(){return t.silhouetteColor},model_silhouetteSize:function(){return t.silhouetteSize},model_silhouettePass:function(){return!1}};e.uniformMap=Lt(o,e.uniformMap),e.hasSilhouette=!0};var GX=WQ;var fvn=y(C(),1);var lvn=y(C(),1),ZX=`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 FQ={name:"ModelSplitterPipelineStage",SPLIT_DIRECTION_UNIFORM_NAME:"model_splitDirection"};FQ.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_MODEL_SPLITTER",void 0,be.FRAGMENT),i.addFragmentLines(ZX);let o={};i.addUniform("float",FQ.SPLIT_DIRECTION_UNIFORM_NAME,be.FRAGMENT),o[FQ.SPLIT_DIRECTION_UNIFORM_NAME]=function(){return t.splitDirection},e.uniformMap=Lt(o,e.uniformMap)};var BX=FQ;var gvn=y(C(),1);function YHe(e,t){this.model=e.model,this.shaderBuilder=e.shaderBuilder.clone(),this.uniformMap=ke(e.uniformMap),this.alphaOptions=ke(e.alphaOptions),this.renderStateOptions=ke(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 wX=YHe;var Vvn=y(C(),1);var xvn=y(C(),1);function OHe(e){e=e??Y.EMPTY_OBJECT,this.lightingModel=e.lightingModel??jf.UNLIT}var XX=OHe;function HHe(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=ke(e.uniformMap),this.alphaOptions=ke(e.alphaOptions),this.renderStateOptions=ke(e.renderStateOptions,!0),this.hasSilhouette=e.hasSilhouette,this.hasSkipLevelOfDetail=e.hasSkipLevelOfDetail,this.shaderBuilder=e.shaderBuilder.clone(),this.instanceCount=e.instanceCount,this.runtimePrimitive=t;let n=t.primitive;this.count=l(n.indices)?n.indices.count:Mt.getAttributeBySemantic(n,"POSITION").count,this.hasPropertyTable=!1,this.indices=n.indices,this.wireframeIndexBuffer=void 0,this.primitiveType=n.primitiveType;let i=Mt.getPositionMinMax(n,this.runtimeNode.instancingTranslationMin,this.runtimeNode.instancingTranslationMax);this.positionMin=m.clone(i.min,new m),this.positionMax=m.clone(i.max,new m),this.boundingSphere=ue.fromCornerPoints(this.positionMin,this.positionMax,new ue),this.lightingOptions=new XX,this.pickId=void 0}var WX=HHe;var ZNn=y(C(),1);var kvn=y(C(),1);function VK(e){e=e??Y.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!==$n.CESIUM_3D_TILE,this._classifies3DTiles=o!==$n.TERRAIN,this._useDebugWireframe=i._enableDebugWireframe&&i.debugWireframe,this._pickId=n.pickId,this._commandListTerrain=[],this._commandList3DTiles=[],this._commandListIgnoreShow=[],this._commandListDebugWireframe=[],this._commandListTerrainPicking=[],this._commandList3DTilesPicking=[],jHe(this)}function zHe(e){return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:e,frontOperation:{fail:Ct.KEEP,zFail:Ct.DECREMENT_WRAP,zPass:Ct.KEEP},backFunction:e,backOperation:{fail:Ct.KEEP,zFail:Ct.INCREMENT_WRAP,zPass:Ct.KEEP},reference:jt.CESIUM_3D_TILE_MASK,mask:jt.CESIUM_3D_TILE_MASK},stencilMask:jt.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:Fa.LESS_OR_EQUAL},depthMask:!1}}var KHe={stencilTest:{enabled:!0,frontFunction:ei.NOT_EQUAL,frontOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},backFunction:ei.NOT_EQUAL,backOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},reference:0,mask:jt.CLASSIFICATION_MASK},stencilMask:jt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:bn.PRE_MULTIPLIED_ALPHA_BLEND},JHe={stencilTest:{enabled:!0,frontFunction:ei.NOT_EQUAL,frontOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},backFunction:ei.NOT_EQUAL,backOperation:{fail:Ct.ZERO,zFail:Ct.ZERO,zPass:Ct.ZERO},reference:0,mask:jt.CLASSIFICATION_MASK},stencilMask:jt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1},Tde=[];function jHe(e){let t=e._command,n=Tde;if(e._useDebugWireframe){t.pass=Ge.OPAQUE,n.length=0,n.push(t),e._commandListDebugWireframe=FX(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=Ge.TERRAIN_CLASSIFICATION,s=RK(t,r),a=_de(t,r);n.length=0,n.push(s,a),e._commandListTerrain=FX(e,n,e._commandListTerrain),o&&(e._commandListTerrainPicking=Ede(e,n,e._commandListTerrainPicking))}if(e._classifies3DTiles){let r=Ge.CESIUM_3D_TILE_CLASSIFICATION,s=RK(t,r),a=_de(t,r);n.length=0,n.push(s,a),e._commandList3DTiles=FX(e,n,e._commandList3DTiles),o&&(e._commandList3DTilesPicking=Ede(e,n,e._commandList3DTilesPicking))}}function FX(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 h=0;h<a;h++){let p=t[h],g=ot.shallowClone(p);g.count=d,g.offset=u,n.push(g)}}return n}function RK(e,t){let n=ot.shallowClone(e);n.cull=!1,n.pass=t;let i=t===Ge.TERRAIN_CLASSIFICATION?ei.ALWAYS:ei.EQUAL,o=zHe(i);return n.renderState=Qe.fromCache(o),n}function _de(e,t){let n=ot.shallowClone(e);return n.cull=!1,n.pass=t,n.renderState=Qe.fromCache(KHe),n}var qHe=[];function Ede(e,t,n){let i=Qe.fromCache(JHe),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=qHe;return c.length=0,c.push(s,a),FX(e,c,n)}Object.defineProperties(VK.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=X.clone(e,this._modelMatrix);let t=this._runtimePrimitive.boundingSphere;this._boundingVolume=ue.transform(t,this._modelMatrix,this._boundingVolume)}},boundingVolume:{get:function(){return this._boundingVolume}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace=e}}});VK.prototype.pushCommands=function(e,t){let n=e.passes;if(n.render){if(this._useDebugWireframe){ci(t,this._commandListDebugWireframe);return}if(this._classifiesTerrain&&ci(t,this._commandListTerrain),this._classifies3DTiles&&ci(t,this._commandList3DTiles),e.invertClassification&&this._classifies3DTiles){if(this._commandListIgnoreShow.length===0){let o=Ge.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,r=RK(this._command,o),s=Tde;s.length=0,s.push(r),this._commandListIgnoreShow=FX(this,s,this._commandListIgnoreShow)}ci(t,this._commandListIgnoreShow)}}return n.pick&&(this._classifiesTerrain&&ci(t,this._commandListTerrainPicking),this._classifies3DTiles&&ci(t,this._commandList3DTilesPicking)),t};var PX=VK;var uNn=y(C(),1);function PQ(e){e=e??Y.EMPTY_OBJECT;let t=e.command,n=e.primitiveRenderResources,i=n.model;this._model=i;let o=n.runtimePrimitive;this._runtimePrimitive=o;let r=t.pass===Ge.TRANSLUCENT,a=!o.primitive.material.doubleSided&&!r,c=n.hasSilhouette,d=!r&&!c,u=n.hasSkipLevelOfDetail&&!r,h=c;this._command=t,this._modelMatrix=X.clone(t.modelMatrix),this._boundingVolume=ue.clone(t.boundingVolume),this._modelMatrix2D=new X,this._boundingVolume2D=new ue,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=h,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._derivedCommands=[],this._has2DCommands=!1,$He(this)}function HA(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}HA.clone=function(e){return new HA({command:e.command,updateShadows:e.updateShadows,updateBackFaceCulling:e.updateBackFaceCulling,updateCullFace:e.updateCullFace,updateDebugShowBoundingVolume:e.updateDebugShowBoundingVolume,is2D:e.is2D,derivedCommand2D:e.derivedCommand2D})};function $He(e){let t=e._command;t.modelMatrix=e._modelMatrix,t.boundingVolume=e._boundingVolume;let n=e._model,i=e._usesBackFaceCulling,o=e._derivedCommands;e._originalCommand=new HA({command:t,updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0,is2D:!1}),o.push(e._originalCommand),e._needsTranslucentCommand&&(e._translucentCommand=new HA({command:sze(t),updateShadows:!0,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!0}),o.push(e._translucentCommand)),e._needsSkipLevelOfDetailCommands&&(e._skipLodBackfaceCommand=new HA({command:mze(t),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:i,updateDebugShowBoundingVolume:!1}),e._skipLodStencilCommand=new HA({command:hze(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),o.push(e._skipLodBackfaceCommand),o.push(e._skipLodStencilCommand)),e._needsSilhouetteCommands&&(e._silhouetteModelCommand=new HA({command:aze(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),e._silhouetteColorCommand=new HA({command:cze(t,n),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!1}),o.push(e._silhouetteModelCommand),o.push(e._silhouetteColorCommand))}Object.defineProperties(PQ.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=X.clone(e,this._modelMatrix),this._modelMatrix2DDirty=!0,this._boundingVolume=ue.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,tze(this)}},backFaceCulling:{get:function(){return this._backFaceCulling},set:function(e){this._backFaceCulling!==e&&(this._backFaceCulling=e,nze(this))}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace!==e&&(this._cullFace=e,ize(this))}},debugShowBoundingVolume:{get:function(){return this._debugShowBoundingVolume},set:function(e){this._debugShowBoundingVolume!==e&&(this._debugShowBoundingVolume=e,oze(this))}}});function eze(e,t){let n=e._modelMatrix;e._modelMatrix2D=X.clone(n,e._modelMatrix2D),e._modelMatrix2D[13]-=Z.sign(n[13])*2*Z.PI*t.mapProjection.ellipsoid.maximumRadius,e._boundingVolume2D=ue.transform(e.runtimePrimitive.boundingSphere,e._modelMatrix2D,e._boundingVolume2D)}function tze(e){let t=e.shadows,n=Gn.castShadows(t),i=Gn.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 nze(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=ke(r.renderState,!0);s.cull.enabled=t,r.renderState=Qe.fromCache(s)}}}function ize(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=ke(r.renderState,!0);s.cull.face=t,r.renderState=Qe.fromCache(s)}}}function oze(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}}}PQ.prototype.pushCommands=function(e,t){let n=Sde(this,e);n&&!this._has2DCommands&&(rze(this),this._has2DCommands=!0,this._modelMatrix2DDirty=!0),this._modelMatrix2DDirty&&(eze(this,e),this._modelMatrix2DDirty=!1);let i=this.model.styleCommandsNeeded;if(!(this._needsTranslucentCommand&&l(i)&&(i!==Rh.ALL_OPAQUE&&lT(t,this._translucentCommand,n),i===Rh.ALL_TRANSLUCENT))){if(this._needsSkipLevelOfDetailCommands){let{tileset:o,tile:r}=this._model.content;if(o.hasMixedContent){r._finalResolution||lT(o._backfaceCommands,this._skipLodBackfaceCommand,n),lze(this,r,n),lT(t,this._skipLodStencilCommand,n);return}}if(this._needsSilhouetteCommands){lT(t,this._silhouetteModelCommand,n);return}return lT(t,this._originalCommand,n),t}};PQ.prototype.pushSilhouetteCommands=function(e,t){let n=Sde(this,e);return lT(t,this._silhouetteColorCommand,n),t};function lT(e,t,n){e.push(t.command),n&&e.push(t.derivedCommand2D.command)}function Sde(e,t){if(t.mode!==re.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*Z.PI;return o<s&&r>s||o<-s&&r>-s}function cT(e,t){if(!l(t))return;let n=HA.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 rze(e){cT(e,e._originalCommand),cT(e,e._translucentCommand),cT(e,e._skipLodBackfaceCommand),cT(e,e._skipLodStencilCommand),cT(e,e._silhouetteModelCommand),cT(e,e._silhouetteColorCommand)}function sze(e){let t=ot.shallowClone(e);t.pass=Ge.TRANSLUCENT;let n=ke(e.renderState,!0);return n.cull.enabled=!1,n.depthMask=!1,n.blending=bn.ALPHA_BLEND,t.renderState=Qe.fromCache(n),t}function aze(e,t){let n=t._silhouetteId%255,i=ot.shallowClone(e),o=ke(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=Qe.fromCache(o),i}function cze(e,t){let n=t._silhouetteId%255,i=ot.shallowClone(e),o=ke(e.renderState,!0);o.cull.enabled=!1,(e.pass===Ge.TRANSLUCENT||t.silhouetteColor.alpha<1)&&(i.pass=Ge.TRANSLUCENT,o.depthMask=!1,o.blending=bn.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=ke(e.uniformMap);return s.model_silhouettePass=function(){return!0},i.renderState=Qe.fromCache(o),i.uniformMap=s,i.castShadows=!1,i.receiveShadows=!1,i}function lze(e,t,n){let i=e._skipLodStencilCommand,o=i.command,r=t._selectionDepth,s=dze(o);if(r!==s){let a=uze(r),c=ke(o.renderState,!0);c.stencilTest.reference=a,o.renderState=Qe.fromCache(c),n&&(i.derivedCommand2D.renderState=c)}}function dze(e){return(e.renderState.stencilTest.reference&jt.SKIP_LOD_MASK)>>>jt.SKIP_LOD_BIT_SHIFT}function uze(e){return jt.CESIUM_3D_TILE_MASK|e<<jt.SKIP_LOD_BIT_SHIFT}function mze(e){let t=ot.shallowClone(e),n=ke(e.renderState,!0);n.cull.enabled=!0,n.cull.face=Xi.FRONT,n.colorMask={red:!1,green:!1,blue:!1,alpha:!1},n.polygonOffset={enabled:!0,factor:5,units:5};let i=ke(t.uniformMap),o=new D(5,5);return i.u_polygonOffset=function(){return o},t.renderState=Qe.fromCache(n),t.uniformMap=i,t.castShadows=!1,t.receiveShadows=!1,t}function hze(e){let t=ot.shallowClone(e),n=ke(e.renderState,!0),{stencilTest:i}=n;return i.enabled=!0,i.mask=jt.SKIP_LOD_MASK,i.reference=jt.CESIUM_3D_TILE_MASK,i.frontFunction=ei.GREATER_OR_EQUAL,i.frontOperation.zPass=Ct.REPLACE,i.backFunction=ei.GREATER_OR_EQUAL,i.backOperation.zPass=Ct.REPLACE,n.stencilMask=jt.CESIUM_3D_TILE_MASK|jt.SKIP_LOD_MASK,t.renderState=Qe.fromCache(n),t}var MX=PQ;var hNn=y(C(),1),vX=`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(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); // 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); #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_POINT_CLOUD_SHOW_STYLE v_pointCloudShow = show; #endif } `;var pNn=y(C(),1),NX=` precision highp float; 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); } SelectedFeature selectedFeature; void main() { #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); Metadata metadata; MetadataClass metadataClass; MetadataStatistics metadataStatistics; metadataStage(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 //======================================================================== #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 #endif // When not picking metadata END //======================================================================== out_FragColor = color; } `;function Lde(){}Lde.buildModelDrawCommand=function(e,t){let n=e.shaderBuilder,i=fze(e,n,t),o=pze(e,i,t),r=e.model;return l(r.classificationType)?new PX({primitiveRenderResources:e,command:o}):new MX({primitiveRenderResources:e,command:o})};function fze(e,t,n){t.addVertexLines(vX),t.addFragmentLines(NX);let i=e.model,o=t.buildShaderProgram(n.context);return i._pipelineResources.push(o),o}function pze(e,t,n){let i=Aze(e),o=new ui({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===re.SCENE3D,d,u;if(!c&&!n.scene3DOnly&&r._projectTo2D)d=X.multiplyTransformation(a._computedModelMatrix,e.runtimeNode.computedTransform,new X),u=e.runtimePrimitive.boundingSphere2D;else{let I=c?a._computedModelMatrix:a._computedModelMatrix2D;d=X.multiplyTransformation(I,e.runtimeNode.computedTransform,new X),u=ue.transform(e.boundingSphere,d)}let h=ke(Qe.fromCache(e.renderStateOptions),!0);h.cull.face=Mt.getCullFace(d,e.primitiveType),h=Qe.fromCache(h);let p=l(r.classificationType),g=p?!1:Gn.castShadows(r.shadows),f=p?!1:Gn.receiveShadows(r.shadows),b=p?void 0:e.pickId;return new ot({boundingVolume:u,modelMatrix:d,uniformMap:e.uniformMap,renderState:h,vertexArray:o,shaderProgram:t,cull:r.cull,pass:s,count:e.count,owner:r,pickId:b,pickMetadataAllowed:!0,instanceCount:e.instanceCount,primitiveType:e.primitiveType,debugShowBoundingVolume:r.debugShowBoundingVolume,castShadows:g,receiveShadows:f})}function Aze(e){let t=e.wireframeIndexBuffer;if(l(t))return t;let n=e.indices;if(l(n))return n.buffer}var DX=Lde;function Nc(e){e=e??Y.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=X.clone(X.IDENTITY),this._computedModelMatrix2D=X.clone(X.IDENTITY),this._axisCorrectionMatrix=Mt.getAxisCorrectionMatrix(t.upAxis,t.forwardAxis,new X),this._runtimeArticulations={},gze(this)}Object.defineProperties(Nc.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 gze(e){let t=e._components,n=t.scene,o=e._model.modelMatrix;Rde(e,o);let r=t.articulations,s=r.length,a=e._runtimeArticulations;for(let _=0;_<s;_++){let E=r[_],S=new ow({articulation:E,sceneGraph:e}),R=S.name;a[R]=S}let c=t.nodes,d=c.length;e._runtimeNodes=new Array(d);let h=n.nodes.length,p=X.IDENTITY;for(let _=0;_<h;_++){let E=n.nodes[_],S=Vde(e,E,p);e._rootNodes.push(S)}let g=t.skins,f=e._runtimeSkins,b=g.length;for(let _=0;_<b;_++){let E=g[_];f.push(new EX({skin:E,sceneGraph:e}))}let x=e._skinnedNodes,I=x.length;for(let _=0;_<I;_++){let E=x[_],S=e._runtimeNodes[E],G=c[E].skin.index;S._runtimeSkin=f[G],S.updateJointMatrices()}e.applyArticulations()}function Rde(e,t){let n=e._components,i=e._model;e._computedModelMatrix=X.multiplyTransformation(t,n.transform,e._computedModelMatrix),e._computedModelMatrix=X.multiplyTransformation(e._computedModelMatrix,e._axisCorrectionMatrix,e._computedModelMatrix),e._computedModelMatrix=X.multiplyByUniformScale(e._computedModelMatrix,i.computedScale,e._computedModelMatrix)}var bze=new m;function yze(e,t){let n=e._computedModelMatrix,i=X.getTranslation(n,bze);if(!m.equals(i,m.ZERO))e._computedModelMatrix2D=Dt.basisTo2D(t.mapProjection,n,e._computedModelMatrix2D);else{let o=e.boundingSphere.center,r=Dt.ellipsoidTo2DModelMatrix(t.mapProjection,o,e._computedModelMatrix2D);e._computedModelMatrix2D=X.multiply(r,n,e._computedModelMatrix2D)}e._boundingSphere2D=ue.transform(e._boundingSphere,e._computedModelMatrix2D,e._boundingSphere2D)}function Vde(e,t,n){let i=[],o=Mt.getNodeTransform(t),r=t.children.length;for(let u=0;u<r;u++){let h=t.children[u],p=X.multiplyTransformation(n,o,new X),g=Vde(e,h,p);i.push(g)}let s=new yw({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 _X({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,h=new uw(u,s);u._nodesByName[d]=h}return c}var Cze=new m,xze=new m,Ize=new m,_ze=new m;Nc.prototype.buildDrawCommands=function(e){let t=this.buildRenderResources(e);this.computeBoundingVolumes(t),this.createDrawCommands(t,e)};Nc.prototype.buildRenderResources=function(e){let t=this._model,n=new LX(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 wX(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,h=new WX(a,d);a.primitiveRenderResources[c]=h;for(let p=0;p<u.length;p++)u[p].process(h,d.primitive,e)}}return n};Nc.prototype.computeBoundingVolumes=function(e){let t=this._model,n=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,Cze),i=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,xze);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=ue.clone(u.boundingSphere,new ue);let h=X.multiplyByPoint(a,u.positionMin,Ize),p=X.multiplyByPoint(a,u.positionMax,_ze);m.minimumByComponent(n,h,n),m.maximumByComponent(i,p,i)}}this._boundingSphere=ue.fromCornerPoints(n,i,new ue),this._boundingSphere=ue.transformWithoutScale(this._boundingSphere,this._axisCorrectionMatrix,this._boundingSphere),this._boundingSphere=ue.transform(this._boundingSphere,this._components.transform,this._boundingSphere),t._boundingSphere=ue.transform(this._boundingSphere,t.modelMatrix,t._boundingSphere),t._initialRadius=t._boundingSphere.radius,t._boundingSphere.radius*=t._clampedScale};Nc.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=DX.buildModelDrawCommand(a,t);s.drawCommand=c}}};Nc.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(s0),!l(n.classificationType)&&(n.imageBasedLighting.enabled&&t.push(nw),n.isClippingEnabled()&&t.push(aw),n.isClippingPolygonsEnabled()&&t.push(dw),n.hasSilhouette(e)&&t.push(GX),l(n.splitDirection)&&n.splitDirection!==Ir.NONE&&t.push(BX),Tr.is3DTiles(n.type)&&t.push(jB),i&&t.push(ew))};Nc.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!==re.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)}}};Nc.prototype.updateModelMatrix=function(e,t){Rde(this,e),t.mode!==re.SCENE3D&&yze(this,t);let n=this._rootNodes;for(let i=0;i<n.length;i++){let o=this._runtimeNodes[n[i]];o._transformDirty=!0}};Nc.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 Gde(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);Gde(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 MQ(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];Gde(e,c,t,n,i)}}var Eze={backFaceCulling:void 0};Nc.prototype.updateBackFaceCulling=function(e){let t=Eze;t.backFaceCulling=e,MQ(this,!1,Tze,t)};function Tze(e,t){let n=e.drawCommand;n.backFaceCulling=t.backFaceCulling}var Sze={shadowMode:void 0};Nc.prototype.updateShadows=function(e){let t=Sze;t.shadowMode=e,MQ(this,!1,Lze,t)};function Lze(e,t){let n=e.drawCommand;n.shadows=t.shadowMode}var Rze={debugShowBoundingVolume:void 0};Nc.prototype.updateShowBoundingVolume=function(e){let t=Rze;t.debugShowBoundingVolume=e,MQ(this,!1,Vze,t)};function Vze(e,t){let n=e.drawCommand;n.debugShowBoundingVolume=t.debugShowBoundingVolume}var Zde=[],Gze={frameState:void 0,hasSilhouette:void 0};Nc.prototype.pushDrawCommands=function(e){let t=Zde;t.length=0;let n=Gze;n.hasSilhouette=this._model.hasSilhouette(e),n.frameState=e,MQ(this,!0,Zze,n),ci(e.commandList,t)};function Zze(e,t){let n=t.frameState,i=t.hasSilhouette,o=n.passes,r=Zde,s=e.drawCommand;s.pushCommands(n,n.commandList),i&&!o.pick&&s.pushSilhouetteCommands(n,r)}Nc.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)};Nc.prototype.applyArticulations=function(){let e=this._runtimeArticulations;for(let t in e)e.hasOwnProperty(t)&&e[t].apply()};var QX=Nc;var d9n=y(C(),1);function m0(){this.pointsLength=0,this.trianglesLength=0,this.geometryByteLength=0,this.texturesByteLength=0,this.propertyTablesByteLength=0,this._bufferIdSet={},this._textureIdByteLengths={},this._batchTextureIdMap=new Bt}Object.defineProperties(m0.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}}});m0.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()};m0.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};m0.prototype.addTexture=function(e){this._textureIdByteLengths.hasOwnProperty(e._id)||(this.texturesByteLength+=e.sizeInBytes,this._textureIdByteLengths[e._id]=e.sizeInBytes)};m0.prototype.getTextureIds=function(){return Object.keys(this._textureIdByteLengths)};m0.prototype.getTextureByteLengthById=function(e){return this._textureIdByteLengths[e]};m0.prototype.addBatchTexture=function(e){this._batchTextureIdMap.contains(e._id)||this._batchTextureIdMap.set(e._id,e)};var UX=m0;var O9n=y(C(),1);var Wde=y(T9(),1);var I9n=y(C(),1);var Bde={},dx=Uint32Array.BYTES_PER_ELEMENT;Bde.parse=function(e,t){t=t??0;let n=new Uint8Array(e),i=new DataView(e);t+=dx;let o=i.getUint32(t,!0);if(o!==1)throw new de(`Only Point Cloud tile version 1 is supported. Version ${o} is not.`);t+=dx,t+=dx;let r=i.getUint32(t,!0);if(r===0)throw new de("Feature table must have a byte length greater than zero");t+=dx;let s=i.getUint32(t,!0);t+=dx;let a=i.getUint32(t,!0);t+=dx;let c=i.getUint32(t,!0);t+=dx;let d=mr(n,t,r);t+=r;let u=new Uint8Array(e,t,s);t+=s;let h,p;a>0&&(h=mr(n,t,a),t+=a,c>0&&(p=new Uint8Array(e,t,c),t+=c));let g=new Sh(d,u),f=g.getGlobalProperty("POINTS_LENGTH");if(g.featuresLength=f,!l(f))throw new de("Feature table global property: POINTS_LENGTH must be defined");let b=g.getGlobalProperty("RTC_CENTER",J.FLOAT,3);l(b)&&(b=m.unpack(b));let x=Bze(g,h);if(x.rtcCenter=b,x.pointsLength=f,!x.hasPositions){let I=wze(g);x.positions=I,x.hasPositions=x.hasPositions||l(I)}if(!x.hasPositions)throw new de("Either POSITION or POSITION_QUANTIZED must be defined.");if(!x.hasNormals){let I=Wze(g);x.normals=I,x.hasNormals=x.hasNormals||l(I)}if(!x.hasColors){let I=Xze(g);x.colors=I,x.hasColors=x.hasColors||l(I),x.hasConstantColor=l(x.constantColor),x.isTranslucent=l(I)&&I.isTranslucent}if(!x.hasBatchIds){let I=Fze(g);x.batchIds=I,x.hasBatchIds=x.hasBatchIds||l(I)}if(x.hasBatchIds){let I=g.getGlobalProperty("BATCH_LENGTH");if(!l(I))throw new de("Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.");x.batchLength=I}return l(p)&&(p=new Uint8Array(p),x.batchTableJson=h,x.batchTableBinary=p),x};function Bze(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,h,p;if(l(s)){o=s.properties;let f=s.byteOffset,b=s.byteLength;if(!l(o)||!l(f)||!l(b))throw new de("Draco properties, byteOffset, and byteLength must be defined");i=e.buffer.slice(f,f+b),c=l(o.POSITION),d=l(o.RGB)||l(o.RGBA),u=l(o.NORMAL),h=l(o.BATCH_ID),p=l(o.RGBA)}let g;return l(i)&&(g={buffer:i,featureTableProperties:o,batchTableProperties:r,properties:Lt(o,r),dequantizeInShader:!0}),{draco:g,hasPositions:c,hasColors:d,isTranslucent:p,hasNormals:u,hasBatchIds:h}}function wze(e){let t=e.json,n;if(l(t.POSITION))return n=e.getPropertyArray("POSITION",J.FLOAT,3),{name:lt.POSITION,semantic:lt.POSITION,typedArray:n,isQuantized:!1,componentDatatype:J.FLOAT,type:kt.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 de("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 de("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");return{name:lt.POSITION,semantic:lt.POSITION,typedArray:n,isQuantized:!0,componentDatatype:J.FLOAT,type:kt.VEC3,quantizedRange:o,quantizedVolumeOffset:m.unpack(r),quantizedVolumeScale:m.unpack(i),quantizedComponentDatatype:J.UNSIGNED_SHORT,quantizedType:kt.VEC3}}}function Xze(e){let t=e.json,n;if(l(t.RGBA))return n=e.getPropertyArray("RGBA",J.UNSIGNED_BYTE,4),{name:lt.COLOR,semantic:lt.COLOR,setIndex:0,typedArray:n,componentDatatype:J.UNSIGNED_BYTE,type:kt.VEC4,normalized:!0,isRGB565:!1,isTranslucent:!0};if(l(t.RGB))return n=e.getPropertyArray("RGB",J.UNSIGNED_BYTE,3),{name:"COLOR",semantic:lt.COLOR,setIndex:0,typedArray:n,componentDatatype:J.UNSIGNED_BYTE,type:kt.VEC3,normalized:!0,isRGB565:!1,isTranslucent:!1};if(l(t.RGB565))return n=e.getPropertyArray("RGB565",J.UNSIGNED_SHORT,1),{name:"COLOR",semantic:lt.COLOR,setIndex:0,typedArray:n,componentDatatype:J.FLOAT,type:kt.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:lt.COLOR,semantic:lt.COLOR,setIndex:0,constantColor:r,componentDatatype:J.FLOAT,type:kt.VEC4,isQuantized:!1,isTranslucent:s}}}function Wze(e){let t=e.json,n;if(l(t.NORMAL))return n=e.getPropertyArray("NORMAL",J.FLOAT,3),{name:lt.NORMAL,semantic:lt.NORMAL,typedArray:n,octEncoded:!1,octEncodedZXY:!1,componentDatatype:J.FLOAT,type:kt.VEC3};if(l(t.NORMAL_OCT16P))return n=e.getPropertyArray("NORMAL_OCT16P",J.UNSIGNED_BYTE,2),{name:lt.NORMAL,semantic:lt.NORMAL,typedArray:n,octEncoded:!0,octEncodedZXY:!1,quantizedRange:(1<<8)-1,quantizedType:kt.VEC2,quantizedComponentDatatype:J.UNSIGNED_BYTE,componentDatatype:J.FLOAT,type:kt.VEC3}}function Fze(e){let t=e.json;if(l(t.BATCH_ID)){let n=e.getPropertyArray("BATCH_ID",J.UNSIGNED_SHORT,1);return{name:lt.FEATURE_ID,semantic:lt.FEATURE_ID,setIndex:0,typedArray:n,componentDatatype:J.fromTypedArray(n),type:kt.SCALAR}}}var ux=Bde;var Pze=Tn.Components,Mze=Tn.Scene,vze=Tn.Node,Nze=Tn.Primitive,Dze=Tn.Attribute,wde=Tn.Quantization,Qze=Tn.FeatureIdAttribute,Uze=Tn.Material,kze=Tn.MetallicRoughness;function h0(e){e=e??Y.EMPTY_OBJECT;let t=e.arrayBuffer,n=e.byteOffset??0;this._arrayBuffer=t,this._byteOffset=n,this._loadAttributesFor2D=e.loadAttributesFor2D??!1,this._parsedContent=void 0,this._decodePromise=void 0,this._decodedAttributes=void 0,this._promise=void 0,this._error=void 0,this._state=ft.UNLOADED,this._buffers=[],this._components=void 0,this._transform=X.IDENTITY}l(Object.create)&&(h0.prototype=Object.create(Yi.prototype),h0.prototype.constructor=h0);Object.defineProperties(h0.prototype,{cacheKey:{get:function(){}},components:{get:function(){return this._components}},transform:{get:function(){return this._transform}}});h0.prototype.load=function(){if(l(this._promise))return this._promise;this._parsedContent=ux.parse(this._arrayBuffer,this._byteOffset),this._state=ft.PROCESSING,this._promise=Promise.resolve(this)};h0.prototype.process=function(e){if(l(this._error)){let t=this._error;throw this._error=void 0,t}if(this._state===ft.READY)return!0;if(this._state===ft.PROCESSING){if(l(this._decodePromise))return!1;this._decodePromise=Yze(this,e.context)}return!1};function Yze(e,t){let i=e._parsedContent.draco,o;if(l(i)?o=TA.decodePointCloud(i,t):o=Promise.resolve(),!!l(o))return e._decodePromise=o,o.then(function(r){if(!e.isDestroyed())return l(r)&&Oze(e,i,r),iKe(e,t),e._state=ft.READY,e}).catch(function(r){e.unload(),e._state=ft.FAILED;let s="Failed to load Draco pnts";e._error=e.getError(s,r)})}function Oze(e,t,n){e._state=ft.READY;let i=e._parsedContent,o;if(l(n.POSITION)){if(o={name:"POSITION",semantic:lt.POSITION,typedArray:n.POSITION.array,componentDatatype:J.FLOAT,type:kt.VEC3,isQuantized:!1},l(n.POSITION.data.quantization)){let a=n.POSITION.data.quantization,c=a.range,d=m.fromElements(c,c,c),u=m.unpack(a.minValues),h=(1<<a.quantizationBits)-1;o.isQuantized=!0,o.quantizedRange=h,o.quantizedVolumeOffset=u,o.quantizedVolumeScale=d,o.quantizedComponentDatatype=h<=255?J.UNSIGNED_BYTE:J.UNSIGNED_SHORT,o.quantizedType=kt.VEC3}i.positions=o}if(l(n.NORMAL)){if(o={name:"NORMAL",semantic:lt.NORMAL,typedArray:n.NORMAL.array,componentDatatype:J.FLOAT,type:kt.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=kt.VEC2}i.normals=o}if(l(n.RGBA)?i.colors={name:"COLOR",semantic:lt.COLOR,setIndex:0,typedArray:n.RGBA.array,componentDatatype:J.UNSIGNED_BYTE,type:kt.VEC4,normalized:!0,isTranslucent:!0}:l(n.RGB)&&(i.colors={name:"COLOR",semantic:lt.COLOR,setIndex:0,typedArray:n.RGB.array,componentDatatype:J.UNSIGNED_BYTE,type:kt.VEC3,normalized:!0,isTranslucent:!1}),l(n.BATCH_ID)){let a=n.BATCH_ID.array;i.batchIds={name:"_FEATURE_ID",semantic:lt.FEATURE_ID,setIndex:0,typedArray:a,componentDatatype:J.fromTypedArray(a),type:kt.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:Hze(d.componentsPerAttribute),componentType:zze(d.componentDatatype),typedArray:c.array}}i.batchTableJson=r}function Hze(e){switch(e){case 1:return"SCALAR";case 2:return"VEC2";case 3:return"VEC3";case 4:return"VEC4"}}function zze(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 kX(e,t,n){let i=t.typedArray,o;if(t.octEncoded&&(o=new wde,o.octEncoded=t.octEncoded,o.octEncodedZXY=t.octEncodedZXY,o.normalizationRange=t.quantizedRange,o.type=t.quantizedType,o.componentDatatype=t.quantizedComponentDatatype),t.isQuantized){o=new wde;let a=t.quantizedRange;o.normalizationRange=a,o.quantizedVolumeOffset=m.ZERO;let c=t.quantizedVolumeScale;o.quantizedVolumeDimensions=c,o.quantizedVolumeStepSize=m.divideByScalar(c,a,new m),o.componentDatatype=t.quantizedComponentDatatype,o.type=t.quantizedType}let r=new Dze;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=Mn.decodeRGB565(i)),l(t.constantColor)){let a=new Array(4);r.constant=U.pack(t.constantColor,a)}else{let a=It.createVertexBuffer({typedArray:i,context:n,usage:Ne.STATIC_DRAW});a.vertexArrayDestroyable=!1,e._buffers.push(a),r.buffer=a}let s=e._loadAttributesFor2D;return r.semantic===lt.POSITION&&s&&(r.typedArray=i),r}var Xde,vQ;function Kze(e){if(!l(vQ)){Xde=new Wde.default(0),vQ=new Array(e);for(let t=0;t<e;++t)vQ[t]=Xde.random()}return vQ}var Jze=new m,jze=new m,qze=new m;function $ze(e){let t=e.typedArray,n=20,i=t.length/3,o=Math.min(i,n),r=Kze(n),s=Number.MAX_VALUE,a=-Number.MAX_VALUE,c=m.fromElements(s,s,s,Jze),d=m.fromElements(a,a,a,jze),u,h,p;if(e.isQuantized)c=m.ZERO,d=e.quantizedVolumeScale;else for(u=0;u<o;++u)h=Math.floor(r[u]*i),p=m.unpack(t,h*3,qze),m.minimumByComponent(c,p,c),m.maximumByComponent(d,p,d);e.min=m.clone(c),e.max=m.clone(d)}var eKe={name:lt.COLOR,semantic:lt.COLOR,setIndex:0,constantColor:U.DARKGRAY,componentDatatype:J.FLOAT,type:kt.VEC4,isQuantized:!1,isTranslucent:!1};function tKe(e,t,n){let i=[],o,r=t.positions;return l(r)&&($ze(r),o=kX(e,r,n),o.count=t.pointsLength,i.push(o)),l(t.normals)&&(o=kX(e,t.normals,n),i.push(o)),l(t.colors)?(o=kX(e,t.colors,n),i.push(o)):(o=kX(e,eKe,n),i.push(o)),l(t.batchIds)&&(o=kX(e,t.batchIds,n),i.push(o)),i}function nKe(e,t){let n=e.batchLength,i=e.pointsLength,o=e.batchTableBinary,r=!l(e.batchIds);return l(o)||e.hasDracoBatchTable?PA({count:n??i,batchTable:e.batchTableJson,binaryBody:o,parseAsPropertyAttributes:r,customAttributeOutput:t}):new fa({schema:{},propertyTables:[]})}function iKe(e,t){let n=e._parsedContent,i=new kze;i.metallicFactor=0,i.roughnessFactor=.9;let o=new Uze;o.metallicRoughness=i;let r=n.colors;l(r)&&r.isTranslucent&&(o.alphaMode=Yf.BLEND);let s=!l(n.normals);o.unlit=s;let a=new Nze;if(a.attributes=tKe(e,n,t),a.primitiveType=We.POINTS,a.material=o,l(n.batchIds)){let g=new Qze;g.propertyTableId=0,g.setIndex=0,g.positionalLabel="featureId_0",a.featureIds.push(g)}let c=new vze;c.index=0,c.primitives=[a];let d=new Mze;d.nodes=[c],d.upAxis=ho.Z,d.forwardAxis=ho.X;let u=new Pze;u.scene=d,u.nodes=[c];let h=[];u.structuralMetadata=nKe(n,h),h.length>0&&oKe(e,a,h,t),l(n.rtcCenter)&&(u.transform=X.multiplyByTranslation(u.transform,n.rtcCenter,u.transform));let p=n.positions;l(p)&&p.isQuantized&&(u.transform=X.multiplyByTranslation(u.transform,p.quantizedVolumeOffset,u.transform)),e._components=u,e._parsedContent=void 0,e._arrayBuffer=void 0}function oKe(e,t,n,i){let o=t.attributes,r=n.length;for(let s=0;s<r;s++){let a=n[s],c=It.createVertexBuffer({typedArray:a.typedArray,context:i,usage:Ne.STATIC_DRAW});c.vertexArrayDestroyable=!1,e._buffers.push(c),a.buffer=c,a.typedArray=void 0,o.push(a)}t.propertyAttributeIds=[0]}h0.prototype.unload=function(){let e=this._buffers;for(let t=0;t<e.length;t++)e[t].destroy();e.length=0,this._components=void 0,this._parsedContent=void 0,this._arrayBuffer=void 0};var YX=h0;var uDn=y(C(),1);var rKe=new m,sKe=new m,aKe=new m,cKe=new X,lKe=new X,dKe=new X,uKe=new ge,mKe=new ue;function dT(e,t,n,i,o,r,s){if(!e._ready||n.mode===re.MORPHING)return;let a=Number.MAX_VALUE,c=e.sceneGraph,d=c._runtimeNodes;for(let u=0;u<d.length;u++){let h=d[u],p=h.node,g=X.clone(h.computedTransform,cKe),f=X.clone(c.computedModelMatrix,lKe),b=p.instances;l(b)&&b.transformInWorldSpace&&(f=X.multiplyTransformation(e.modelMatrix,c.components.transform,f),g=X.multiplyTransformation(c.axisCorrectionMatrix,h.computedTransform,g));let x=X.multiplyTransformation(f,g,dKe);n.mode!==re.SCENE3D&&(x=Dt.basisTo2D(n.mapProjection,x,x));let I=[];if(l(b)){let E=b.attributes[0].count,S=b.attributes[0].componentDatatype,R=12,G=h.transformsTypedArray;if(!l(G)){let B=h.instancingTransformsBuffer;l(B)&&n.context.webgl2&&(G=J.createTypedArray(S,E*R),B.getBufferData(G))}if(l(G))for(let B=0;B<E;B++){let w=B*R,F=new X(G[w],G[w+1],G[w+2],G[w+3],G[w+4],G[w+5],G[w+6],G[w+7],G[w+8],G[w+9],G[w+10],G[w+11],0,0,0,1);b.transformInWorldSpace?(X.multiplyTransformation(F,g,F),X.multiplyTransformation(f,F,F)):X.multiplyTransformation(F,x,F),I.push(F)}}I.length===0&&I.push(x);let _=h.runtimePrimitives.length;for(let E=0;E<_;E++){let S=h.runtimePrimitives[E],R=S.primitive;if(l(S.boundingSphere)&&!l(b)){let H=ue.transform(S.boundingSphere,x,mKe),ee=fi.raySphere(t,H);if(!l(ee))continue}let G=Mt.getAttributeBySemantic(R,lt.POSITION),B=G.byteOffset,w=G.byteStride,F=G.count;if(!l(R.indices))continue;let P=R.indices.typedArray;if(!l(P)){let H=R.indices.buffer,ee=R.indices.count,K=R.indices.indexDatatype;l(H)&&n.context.webgl2&&(K===Me.UNSIGNED_BYTE?P=new Uint8Array(ee):K===Me.UNSIGNED_SHORT?P=new Uint16Array(ee):K===Me.UNSIGNED_INT&&(P=new Uint32Array(ee)),H.getBufferData(P))}let A=G.typedArray,T=G.componentDatatype,L=G.type,V=G.quantization;l(V)&&(T=G.quantization.componentDatatype,L=G.quantization.type);let W=kt.getNumberOfComponents(L),M=J.getSizeInBytes(T),Q=!l(A)&&l(w)&&w!==W*M,N=W,k=0;Q&&(N=w/M,k=B/M);let v=F*N;if(!l(A)){let H=G.buffer;l(H)&&n.context.webgl2&&(A=J.createTypedArray(T,v),H.getBufferData(A,Q?0:B,0,v)),V&&G.normalized&&(A=Mn.dequantize(A,T,L,F))}if(!l(P)||!l(A))return;r=r??ie.default,i=i??1,o=o??0;let O=P.length;for(let H=0;H<O;H+=3){let ee=P[H],K=P[H+1],te=P[H+2];for(let q of I){let pe=GK(A,ee,k,N,V,q,i,o,r,rKe),ye=GK(A,K,k,N,V,q,i,o,r,sKe),he=GK(A,te,k,N,V,q,i,o,r,aKe),xe=fi.rayTriangleParametric(t,pe,ye,he,e.backFaceCulling??!0);l(xe)&&xe<a&&xe>=0&&(a=xe)}}}}if(a!==Number.MAX_VALUE){if(s=En.getPoint(t,a,s),n.mode!==re.SCENE3D){m.fromElements(s.y,s.z,s.x,s);let u=n.mapProjection,h=u.ellipsoid,p=u.unproject(s,uKe);h.cartographicToCartesian(p,s)}return s}}function GK(e,t,n,i,o,r,s,a,c,d){let u=n+t*i;if(d.x=e[u],d.y=e[u+1],d.z=e[u+2],l(o))if(o.octEncoded){if(d=Mn.octDecodeInRange(d,o.normalizationRange,d),o.octEncodedZXY){let h=d.x;d.x=d.z,d.z=d.y,d.y=h}}else d=m.multiplyComponents(d,o.quantizedVolumeStepSize,d),d=m.add(d,o.quantizedVolumeOffset,d);return d=X.multiplyByPoint(r,d,d),s!==1&&Mr.getPosition(d,c,s,a,d),d}var CDn=y(C(),1);var hDn=y(C(),1),ZK=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}},OX=ZK;var BK=class{constructor(t){this._model=t,this._modelPrimitiveImageries=void 0,this._imageryConfigurations=[]}update(t){this._hasImagery&&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 ax(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 Ae("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}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 OX(r)}}isDestroyed(){return!1}destroy(){if(!this.isDestroyed())return this._deleteModelPrimitiveImageries(),me(this)}},HX=BK;function _o(e){e=e??Y.EMPTY_OBJECT,this._loader=e.loader,this._resource=e.resource,this.type=e.type??Tr.GLTF,this.modelMatrix=X.clone(e.modelMatrix??X.IDENTITY),this._modelMatrix=X.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=$.clone($.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 HB(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??Fc.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??Ge.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 ue,this._initialRadius=void 0,this._heightReference=e.heightReference??et.NONE,this._heightDirty=this._heightReference!==et.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 Hf(e.pointCloudShading);this._pointCloudShading=r,this._attenuation=r.attenuation,this._pointCloudBackFaceCulling=r.backFaceCulling;let s=e.clippingPlanes;l(s)&&s.owner===void 0?Ws.setOwner(s,this,"_clippingPlanes"):this._clippingPlanes=s,this._clippingPlanesState=0,this._clippingPlanesMatrix=X.clone(X.IDENTITY);let a=e.clippingPolygons;l(a)&&a.owner===void 0?Ih.setOwner(a,this,"_clippingPolygons"):this._clippingPolygons=a,this._clippingPolygonsState=0,this._modelImagery=new HX(this),this._lightColor=m.clone(e.lightColor),this._imageBasedLighting=l(e.imageBasedLighting)?e.imageBasedLighting:new TC,this._shouldDestroyImageBasedLighting=!l(e.imageBasedLighting),this._environmentMapManager=void 0;let c=new ZA(e.environmentMapOptions);ZA.setOwner(c,this,"_environmentMapManager"),this._backFaceCulling=e.backFaceCulling??!0,this._backFaceCullingDirty=!1,this._shadows=e.shadows??Gn.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._debugWireframe===!0&&this._enableDebugWireframe===!1&&this.type===Tr.GLTF&&xt("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 Gt(d)),this._credits=[],this._credit=d,this._resourceCredits=[],this._gltfCredits=[],this._showCreditsOnScreen=e.showCreditsOnScreen??!1,this._showCreditsOnScreenDirty=!0,this._splitDirection=e.splitDirection??Ir.NONE,this._enableShowOutline=e.enableShowOutline??!0,this.showOutline=e.showOutline??!0,this.outlineColor=e.outlineColor??U.BLACK,this._classificationType=e.classificationType,this._statistics=new UX,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 Ce,this._readyEvent=new Ce,this._texturesReadyEvent=new Ce,this._sceneGraph=void 0,this._nodesByName={},this.pickObject=e.pickObject}function wK(e,t){if(e._errorEvent.numberOfListeners>0){e._errorEvent.raiseEvent(t);return}console.log(t)}function hKe(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 JB({model:e,propertyTable:s});n.push(a)}return n}function fKe(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=Mt.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=Mt.getFeatureIdsByLabel(c.featureIds,n);if(l(d))return d.propertyTableId}if(t._featureTables.length===1)return 0}function FK(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(_o.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=Qt.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){FK(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=FK(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 Mde(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===Tr.GLTF&&xt("model-debug-wireframe-ignored","enableDebugWireframe must be set to true in Model.fromGltfAsync, otherwise debugWireframe will be ignored.")}},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&&(Ws.setOwner(e,this,"_clippingPlanes"),this.resetDrawCommands())}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){e!==this._clippingPolygons&&(Ih.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=m.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&&(ZA.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}}});_o.prototype.getNode=function(e){return this._nodesByName[e]};_o.prototype.setArticulationStage=function(e,t){this._sceneGraph.setArticulationStage(e,t)};_o.prototype.applyArticulations=function(){this._sceneGraph.applyArticulations()};_o.prototype.getExtension=function(e){return this._loader.components.extensions[e]};_o.prototype.makeStyleDirty=function(){this._styleDirty=!0};_o.prototype.resetDrawCommands=function(){this._drawCommandsBuilt=!1};var pKe=new X,AKe=new $,gKe=new X;_o.prototype.update=function(e){let t=!1;try{t=bKe(this,e)}catch(i){if(!this._loader.incrementallyLoadTextures&&i.name==="TextureError")wK(this,i);else{let o=Mt.getError("model",this._resource,i);wK(this,o)}}if(yKe(this,e),CKe(this,e),xKe(this,e),!this._resourcesLoaded&&t){this._resourcesLoaded=!0;let i=this._loader.components;if(!l(i)){if(this._loader.isUnloaded())return;let s=Mt.getError("model",this._resource,new de("Failed to load model."));wK(s),this._rejectLoad=this._rejectLoad&&this._rejectLoad(s)}let o=i.structuralMetadata;l(o)&&o.propertyTableCount>0&&hKe(this,o);let r=new QX({model:this,modelComponents:i});this._sceneGraph=r,this._gltfCredits=r.components.asset.credits}if(!this._resourcesLoaded||e.mode===re.MORPHING)return;let n=this._modelImagery;if(n.update(e),!(!n.ready&&!(this._content?.tileset?._asynchronouslyLoadImagery??!1))){if(IKe(this),_Ke(this),EKe(this,e),TKe(this),SKe(this,e),LKe(this,e),RKe(this,e),VKe(this,e),GKe(this,e),ZKe(this,e),BKe(this,e),this._defaultTexture=e.context.defaultTexture,wKe(this,e),XKe(this,e),WKe(this),FKe(this,e),NKe(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)),MKe(this),DKe(this,e),QKe(this),UKe(this,e)}};function bKe(e,t){return!e._resourcesLoaded||e._loader.incrementallyLoadTextures&&!e._texturesLoaded?(t.afterRender.push(()=>!0),e._loader.process(t)):!0}function yKe(e,t){l(e._customShader)&&e._customShader.update(t)}function CKe(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 xKe(e,t){e._imageBasedLighting.update(t),e._imageBasedLighting.shouldRegenerateShaders&&e.resetDrawCommands()}function IKe(e){if(!e._featureTableIdDirty)return;e._featureTableIdDirty=!1;let t=e._sceneGraph.components,n=t.structuralMetadata;l(n)&&n.propertyTableCount>0&&(e.featureTableId=fKe(t,e),e._styleDirty=!0,e.resetDrawCommands())}function _Ke(e){e._styleDirty&&(e.applyStyle(e._style),e._styleDirty=!1)}function EKe(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&&Pde(e)}function Pde(e){let t=e.featureTables[e.featureTableId];e._styleCommandsNeeded=Rh.getStyleCommandsNeeded(t.featuresLength,t.batchTexture.translucentFeaturesLength)}function TKe(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 SKe(e,t){e._silhouetteDirty&&(vde(t)&&e.resetDrawCommands(),e._silhouetteDirty=!1)}function LKe(e,t){let n=e.hasSkipLevelOfDetail(t);n!==e._skipLevelOfDetail&&(e.resetDrawCommands(),e._skipLevelOfDetail=n)}function RKe(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 VKe(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 GKe(e,t){t.mode!==e._sceneMode&&(e._projectTo2D?e.resetDrawCommands():e._updateModelMatrix=!0,e._sceneMode=t.mode)}function ZKe(e,t){let n=t.fog.enabled&&t.fog.renderable;n!==e._fogRenderable&&(e.resetDrawCommands(),e._fogRenderable=n)}function BKe(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 wKe(e,t){e._drawCommandsBuilt||(e.destroyPipelineResources(),e._sceneGraph.buildDrawCommands(t),e._drawCommandsBuilt=!0)}function XKe(e,t){X.equals(e.modelMatrix,e._modelMatrix)||(e._updateModelMatrix=!0,e._modelMatrix=X.clone(e.modelMatrix,e._modelMatrix))}var f0=new m,XK=new ge;function WKe(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===et.NONE){e._clampedModelMatrix=void 0;return}let n=t.ellipsoid??ie.default,i=e.modelMatrix;f0.x=i[12],f0.y=i[13],f0.z=i[14];let o=n.cartesianToCartographic(f0);l(e._clampedModelMatrix)||(e._clampedModelMatrix=X.clone(i,new X)),e._removeUpdateHeightCallback=t.updateHeight(o,Fde(e,n,o),e.heightReference);let r=t.getHeight(o,e.heightReference);if(l(r)){let s=Fde(e,n,o);ge.clone(o,XK),XK.height=r,s(XK)}e._heightDirty=!1,e._updateModelMatrix=!0}function FKe(e,t){if(!e._updateModelMatrix&&e._minimumPixelSize===0)return;let n=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix;Mde(e,n),PKe(e,n,t)}function Mde(e,t){e._clampedScale=l(e._maximumScale)?Math.min(e._scale,e._maximumScale):e._scale,e._boundingSphere.center=m.multiplyByScalar(e._sceneGraph.boundingSphere.center,e._clampedScale,e._boundingSphere.center),e._boundingSphere.radius=e._initialRadius*e._clampedScale,e._boundingSphere=ue.transform(e._boundingSphere,t,e._boundingSphere)}function PKe(e,t,n){let i=e.scale;if(e.minimumPixelSize!==0&&!e._projectTo2D){let o=n.context,r=Math.max(o.drawingBufferWidth,o.drawingBufferHeight);X.getTranslation(t,f0),e._sceneMode!==re.SCENE3D&&to.computeActualEllipsoidPosition(n,f0,f0);let s=e._boundingSphere.radius,a=kKe(f0,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 MKe(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 vKe=new $(1,0,0,0,0,1,0,-1,0);function NKe(e,t){let n=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix,i=e.referenceMatrix??n,o=t.context,r=AKe,s=pKe;if(s=X.multiply(o.uniformState.view3D,i,s),r=X.getRotation(s,r),r=$.transpose(r,r),e._iblReferenceFrameMatrix=$.multiply(vKe,r,e._iblReferenceFrameMatrix),e.isClippingEnabled()){let a=gKe;a=X.multiply(o.uniformState.view3D,i,a),a=X.multiply(a,e._clippingPlanes.modelMatrix,a),e._clippingPlanesMatrix=X.inverseTranspose(a,e._clippingPlanesMatrix)}}function DKe(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 QKe(e){if(!e._showCreditsOnScreenDirty)return;e._showCreditsOnScreenDirty=!1,e._credits.length=0;let t=e._showCreditsOnScreen;if(l(e._credit)){let s=Gt.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=Gt.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=Gt.clone(o[s]);a.showOnScreen=a.showOnScreen||t,e._credits.push(a)}}function UKe(e,t){let n=OKe(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&&(HKe(e,t),e._sceneGraph.pushDrawCommands(t))}var WK=new ue;function kKe(e,t,n){return WK.center=e,WK.radius=t,n.camera.getPixelSize(WK,n.context.drawingBufferWidth,n.context.drawingBufferHeight)}var NQ=new m;function Fde(e,t,n){return function(i){D_(e.heightReference)&&(i.height+=n.height),t.cartographicToCartesian(i,NQ);let o=e._clampedModelMatrix;X.clone(e.modelMatrix,o),o[12]=NQ.x,o[13]=NQ.y,o[14]=NQ.z,e._heightDirty=!0}}var YKe=new m;function OKe(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===re.SCENE2D){let a=(t.camera.frustum.right-t.camera.frustum.left)*.5;r=a*a}else{let s=X.getTranslation(e.modelMatrix,YKe);to.computeActualEllipsoidPosition(t,s,s),r=m.distanceSquared(s,t.camera.positionWC)}return r>=i&&r<=o}function HKe(e,t){let n=t.creditDisplay,i=e._credits,o=i.length;for(let r=0;r<o;r++)n.addCreditToNextFrame(i[r])}_o.prototype.isTranslucent=function(){let e=this.color;return l(e)&&e.alpha>0&&e.alpha<1};_o.prototype.isInvisible=function(){let e=this.color;return l(e)&&e.alpha===0};function vde(e){return e.context.stencilBuffer}_o.prototype.hasSilhouette=function(e){return vde(e)&&this._silhouetteSize>0&&this._silhouetteColor.alpha>0&&!l(this._classificationType)};_o.prototype.hasSkipLevelOfDetail=function(e){if(!Tr.is3DTiles(this.type))return!1;let t=e.context.stencilBuffer,n=this._content.tileset;return t&&n.isSkippingLevelOfDetail};_o.prototype.isClippingEnabled=function(){let e=this._clippingPlanes;return l(e)&&e.enabled&&e.length!==0};_o.prototype.pick=function(e,t,n,i,o){return dT(this,e,t,n,i,o)};_o.prototype.isClippingPolygonsEnabled=function(){let e=this._clippingPolygons;return l(e)&&e.enabled&&e.length!==0};_o.prototype.isDestroyed=function(){return!1};_o.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)};_o.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};_o.prototype.destroyModelResources=function(){let e=this._modelResources;for(let t=0;t<e.length;t++)e[t].destroy();this._modelResources.length=0};_o.fromGltfAsync=async function(e){e=e??Y.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 Od(n),a=l(e.content)?Tr.TILE_GLTF:Tr.GLTF,c=n.gltfResource,d=zX(r,a,e);d.resource=c,d.environmentMapOptions=e.environmentMapOptions;try{await r.load()}catch(g){throw r.destroy(),Mt.getError("model",c,g)}let u=e.gltfCallback;l(u)&&u(r.gltfJson);let h=new _o(d),p=h._resource.credits;if(l(p)){let g=p.length;for(let f=0;f<g;f++)h._resourceCredits.push(Gt.clone(p[f]))}return h};_o.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 MB(t);try{await n.load();let i=zX(n,Tr.TILE_B3DM,e);return new _o(i)}catch(i){throw n.destroy(),i}};_o.fromPnts=async function(e){let t={arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,loadAttributesFor2D:e.projectTo2D},n=new YX(t);try{await n.load();let i=zX(n,Tr.TILE_PNTS,e);return new _o(i)}catch(i){throw n.destroy(),i}};_o.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 DB(t);try{await n.load();let i=zX(n,Tr.TILE_I3DM,e);return new _o(i)}catch(i){throw n.destroy(),i}};_o.fromGeoJson=async function(e){let t={geoJson:e.geoJson},n=new vB(t),i=zX(n,Tr.TILE_GEOJSON,e);return new _o(i)};var zKe=new U;_o.prototype.applyColorAndShow=function(e){let t=U.clone(this._color,zKe),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,FK(t,this._color)&&this.resetDrawCommands()};_o.prototype.applyStyle=function(e){let t=this.type===Tr.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),Pde(this,e)):(this.applyColorAndShow(e),this._styleCommandsNeeded=void 0)};function zX(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,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 Bh=_o;function os(e,t,n){this._tileset=e,this._tile=t,this._resource=n,this._model=void 0,this._metadata=void 0,this._group=void 0,this._ready=!1}Object.defineProperties(os.prototype,{featuresLength:{get:function(){let e=this._model,t=e.featureTables,n=e.featureTableId;return l(t)&&l(t[n])?t[n].featuresLength:0}},pointsLength:{get:function(){return this._model.statistics.pointsLength}},trianglesLength:{get:function(){return this._model.statistics.trianglesLength}},geometryByteLength:{get:function(){return this._model.statistics.geometryByteLength}},texturesByteLength:{get:function(){return this._model.statistics.texturesByteLength}},batchTableByteLength:{get:function(){let e=this._model.statistics;return e.propertyTablesByteLength+e.batchTexturesByteLength}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){let e=this._model,t=e.featureTables,n=e.featureTableId;if(l(t)&&l(t[n]))return t[n]}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},group:{get:function(){return this._group},set:function(e){this._group=e}}});os.prototype.getTextureIds=function(){return this._model.statistics.getTextureIds()};os.prototype.getTextureByteLengthById=function(e){return this._model.statistics.getTextureByteLengthById(e)};os.prototype.getExtension=function(e){return this._model.getExtension(e)};os.prototype.getFeature=function(e){let t=this._model,n=t.featureTableId;return t.featureTables[n].getFeature(e)};os.prototype.hasProperty=function(e,t){let n=this._model,i=n.featureTableId;return l(i)?n.featureTables[i].hasProperty(e,t):!1};os.prototype.applyDebugSettings=function(e,t){t=e?t:U.WHITE,this.featuresLength===0?this._model.color=t:l(this.batchTable)&&this.batchTable.setAllColor(t)};os.prototype.applyStyle=function(e){this._model.style=e};os.prototype.update=function(e,t){let n=this._model,i=this._tile;n.colorBlendAmount=e.colorBlendAmount,n.colorBlendMode=e.colorBlendMode,n.modelMatrix=i.computedTransform,n.customShader=e.customShader,n.featureIdLabel=e.featureIdLabel,n.instanceFeatureIdLabel=e.instanceFeatureIdLabel,n.lightColor=e.lightColor,n.imageBasedLighting=e.imageBasedLighting,n.backFaceCulling=e.backFaceCulling,n.shadows=e.shadows,n.showCreditsOnScreen=e.showCreditsOnScreen,n.splitDirection=e.splitDirection,n.debugWireframe=e.debugWireframe,n.showOutline=e.showOutline,n.outlineColor=e.outlineColor,n.pointCloudShading=e.pointCloudShading;let o=e.clippingPlanes;n.referenceMatrix=e.clippingPlanesOriginMatrix,l(o)&&i.clippingPlanesDirty&&(n._clippingPlanes=o.enabled&&i._isClipped?o:void 0);let r=e.environmentMapManager;n.environmentMapManager!==o&&(n._environmentMapManager=r),l(o)&&l(n._clippingPlanes)&&n._clippingPlanes!==o&&(n._clippingPlanes=o,n._clippingPlanesState=0);let s=e.clippingPolygons;l(s)&&i.clippingPolygonsDirty&&(n._clippingPolygons=s.enabled&&i._isClippedByPolygon?s:void 0),l(s)&&l(n._clippingPolygons)&&n._clippingPolygons!==s&&(n._clippingPolygons=s,n._clippingPolygonsState=0),n.update(t),!this._ready&&n.ready&&(n.activeAnimations.addAll({loop:od.REPEAT}),this._ready=!0)};os.prototype.isDestroyed=function(){return!1};os.prototype.destroy=function(){return this._model=this._model&&this._model.destroy(),me(this)};os.fromGltf=async function(e,t,n,i){let o=new os(e,t,n),s=KX(e,t,o,{gltf:i,basePath:n}),a=e.vectorClassificationOnly?void 0:e.classificationType;s.classificationType=a;let c=await Bh.fromGltfAsync(s);return o._model=c,o};os.fromB3dm=async function(e,t,n,i,o){let r=new os(e,t,n),a=KX(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=e.vectorClassificationOnly?void 0:e.classificationType;a.classificationType=c;let d=await Bh.fromB3dm(a);return r._model=d,r};os.fromI3dm=async function(e,t,n,i,o){let r=new os(e,t,n),a=KX(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=await Bh.fromI3dm(a);return r._model=c,r};os.fromPnts=async function(e,t,n,i,o){let r=new os(e,t,n),a=KX(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=await Bh.fromPnts(a);return r._model=c,r};os.fromGeoJson=async function(e,t,n,i){let o=new os(e,t,n),s=KX(e,t,o,{geoJson:i,resource:n}),a=await Bh.fromGeoJson(s);return o._model=a,o};os.prototype.pick=function(e,t,n){if(!l(this._model)||!this._ready)return;let i=t.verticalExaggeration,o=t.verticalExaggerationRelativeHeight;return this._model.pick(e,t,i,o,ie.WGS84,n)};function KX(e,t,n,i){let o={cull:!1,releaseGltfJson:!0,opaquePass:Ge.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 Lt(i,o)}var jd=os;var _Qn=y(C(),1);function am(e,t,n){this._tileset=e,this._tile=t,this._resource=n,this.featurePropertiesDirty=!1,this._metadata=void 0,this._group=void 0,this._ready=!1}Object.defineProperties(am.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},group:{get:function(){return this._group},set:function(e){this._group=e}}});am.fromJson=function(e,t,n,i){let o=new am(e,t,n);return o._tileset.loadTileset(o._resource,i,o._tile),o._ready=!0,o};am.prototype.hasProperty=function(e,t){return!1};am.prototype.getFeature=function(e){};am.prototype.applyDebugSettings=function(e,t){};am.prototype.applyStyle=function(e){};am.prototype.update=function(e,t){};am.prototype.pick=function(e,t,n){};am.prototype.isDestroyed=function(){return!1};am.prototype.destroy=function(){return me(this)};var JX=am;var HOn=y(C(),1);var JYn=y(C(),1);var gUn=y(C(),1);var BQn=y(C(),1);function Aa(e,t,n,i){let o=Aa._verifyAttributes(t);n=n??0;let r=[],s={},a,c,d=o.length;for(let h=0;h<d;++h){let p=o[h];if(p.vertexBuffer){r.push(p);continue}c=p.usage,a=s[c],l(a)||(a=s[c]=[]),a.push(p)}function u(h,p){return J.getSizeInBytes(p.componentDatatype)-J.getSizeInBytes(h.componentDatatype)}this._allBuffers=[];for(c in s)if(s.hasOwnProperty(c)){a=s[c],a.sort(u);let h=Aa._vertexSizeInBytes(a),p=a[0].usage,g={vertexSizeInBytes:h,vertexBuffer:void 0,usage:p,needsCommit:!1,arrayBuffer:void 0,arrayViews:Aa._createArrayViews(a,h)};this._allBuffers.push(g)}this._size=0,this._instanced=i??!1,this._precreated=r,this._context=e,this.writers=void 0,this.va=void 0,this.resize(n)}Aa._verifyAttributes=function(e){let t=[];for(let i=0;i<e.length;++i){let o=e[i],r={index:o.index??i,enabled:o.enabled??!0,componentsPerAttribute:o.componentsPerAttribute,componentDatatype:o.componentDatatype??J.FLOAT,normalize:o.normalize??!1,vertexBuffer:o.vertexBuffer,usage:o.usage??Ne.STATIC_DRAW};t.push(r)}let n=new Array(t.length);for(let i=0;i<t.length;++i){let r=t[i].index;n[r]=!0}return t};Aa._vertexSizeInBytes=function(e){let t=0,n=e.length;for(let s=0;s<n;++s){let a=e[s];t+=a.componentsPerAttribute*J.getSizeInBytes(a.componentDatatype)}let i=n>0?J.getSizeInBytes(e[0].componentDatatype):0,o=i>0?t%i:0,r=o===0?0:i-o;return t+=r,t};Aa._createArrayViews=function(e,t){let n=[],i=0,o=e.length;for(let r=0;r<o;++r){let s=e[r],a=s.componentDatatype;n.push({index:s.index,enabled:s.enabled,componentsPerAttribute:s.componentsPerAttribute,componentDatatype:a,normalize:s.normalize,offsetInBytes:i,vertexSizeInComponentType:t/J.getSizeInBytes(a),view:void 0}),i+=s.componentsPerAttribute*J.getSizeInBytes(a)}return n};Aa.prototype.resize=function(e){this._size=e;let t=this._allBuffers;this.writers=[];for(let n=0,i=t.length;n<i;++n){let o=t[n];Aa._resize(o,this._size),Aa._appendWriters(this.writers,o)}PK(this)};Aa._resize=function(e,t){if(e.vertexSizeInBytes>0){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;c<a;++c)r[c]=s[c]}let i=e.arrayViews,o=i.length;for(let r=0;r<o;++r){let s=i[r];s.view=J.createArrayBufferView(s.componentDatatype,n,s.offsetInBytes)}e.arrayBuffer=n}};var KKe=[function(e,t,n){return function(i,o){t[i*n]=o,e.needsCommit=!0}},function(e,t,n){return function(i,o,r){let s=i*n;t[s]=o,t[s+1]=r,e.needsCommit=!0}},function(e,t,n){return function(i,o,r,s){let a=i*n;t[a]=o,t[a+1]=r,t[a+2]=s,e.needsCommit=!0}},function(e,t,n){return function(i,o,r,s,a){let c=i*n;t[c]=o,t[c+1]=r,t[c+2]=s,t[c+3]=a,e.needsCommit=!0}}];Aa._appendWriters=function(e,t){let n=t.arrayViews,i=n.length;for(let o=0;o<i;++o){let r=n[o];e[r.index]=KKe[r.componentsPerAttribute-1](t,r.view,r.vertexSizeInComponentType)}};Aa.prototype.commit=function(e){let t=!1,n=this._allBuffers,i,o,r;for(o=0,r=n.length;o<r;++o)i=n[o],t=JKe(this,i)||t;if(t||!l(this.va)){PK(this);let s=this.va=[],a=Z.SIXTY_FOUR_KILOBYTES-4,c=l(e)&&!this._instanced?Math.ceil(this._size/a):1;for(let d=0;d<c;++d){let u=[];for(o=0,r=n.length;o<r;++o){i=n[o];let h=d*(i.vertexSizeInBytes*a);Aa._appendAttributes(u,i,h,this._instanced)}u=u.concat(this._precreated),s.push({va:new ui({context:this._context,attributes:u,indexBuffer:e}),indicesCount:1.5*(d!==c-1?a:this._size%a)})}}};function JKe(e,t){if(t.needsCommit&&t.vertexSizeInBytes>0){t.needsCommit=!1;let n=t.vertexBuffer,i=e._size*t.vertexSizeInBytes,o=l(n);if(!o||n.sizeInBytes<i)return o&&n.destroy(),t.vertexBuffer=It.createVertexBuffer({context:e._context,typedArray:t.arrayBuffer,usage:t.usage}),t.vertexBuffer.vertexArrayDestroyable=!1,!0;t.vertexBuffer.copyFromArrayView(t.arrayBuffer)}return!1}Aa._appendAttributes=function(e,t,n,i){let o=t.arrayViews,r=o.length;for(let s=0;s<r;++s){let a=o[s];e.push({index:a.index,enabled:a.enabled,componentsPerAttribute:a.componentsPerAttribute,componentDatatype:a.componentDatatype,normalize:a.normalize,vertexBuffer:t.vertexBuffer,offsetInBytes:n+a.offsetInBytes,strideInBytes:t.vertexSizeInBytes,instanceDivisor:i?1:0})}};Aa.prototype.subCommit=function(e,t){let n=this._allBuffers;for(let i=0,o=n.length;i<o;++i)jKe(n[i],e,t)};function jKe(e,t,n){if(e.needsCommit&&e.vertexSizeInBytes>0){let i=e.vertexSizeInBytes*t,o=e.vertexSizeInBytes*n;e.vertexBuffer.copyFromArrayView(new Uint8Array(e.arrayBuffer,i,o),i)}}Aa.prototype.endSubCommits=function(){let e=this._allBuffers;for(let t=0,n=e.length;t<n;++t)e[t].needsCommit=!1};function PK(e){let t=e.va;if(!l(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].va.destroy();e.va=void 0}Aa.prototype.isDestroyed=function(){return!1};Aa.prototype.destroy=function(){let e=this._allBuffers;for(let t=0,n=e.length;t<n;++t){let i=e[t];i.vertexBuffer=i.vertexBuffer&&i.vertexBuffer.destroy()}return PK(this),me(this)};var zA=Aa;var XQn=y(C(),1),jX=`uniform sampler2D u_atlas; #ifdef VECTOR_TILE uniform vec4 u_highlightColor; #endif in vec2 v_textureCoordinates; in vec4 v_pickColor; in vec4 v_color; in float v_splitDirection; #ifdef SDF in vec4 v_outlineColor; in float v_outlineWidth; #endif #ifdef FRAGMENT_DEPTH_CHECK in vec4 v_textureCoordinateBounds; // the min and max x and y values for the texture coordinates in vec4 v_originTextureCoordinateAndTranslate; // texture coordinate at the origin, billboard translate (used for label glyphs) in vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize in mat2 v_rotationMatrix; const float SHIFT_LEFT12 = 4096.0; const float SHIFT_LEFT1 = 2.0; const float SHIFT_RIGHT12 = 1.0 / 4096.0; const float SHIFT_RIGHT1 = 1.0 / 2.0; float getGlobeDepth(vec2 adjustedST, vec2 depthLookupST, bool applyTranslate, vec2 dimensions, vec2 imageSize) { vec2 lookupVector = imageSize * (depthLookupST - adjustedST); lookupVector = v_rotationMatrix * lookupVector; vec2 labelOffset = (dimensions - imageSize) * (depthLookupST - vec2(0.0, v_originTextureCoordinateAndTranslate.y)); // aligns label glyph with bounding rectangle. Will be zero for billboards because dimensions and imageSize will be equal vec2 translation = v_originTextureCoordinateAndTranslate.zw; if (applyTranslate) { // this is only needed for labels where the horizontal origin is not LEFT // it moves the label back to where the "origin" should be since all label glyphs are set to HorizontalOrigin.LEFT translation += (dimensions * v_originTextureCoordinateAndTranslate.xy * vec2(1.0, 0.0)); } vec2 st = ((lookupVector - translation + labelOffset) + gl_FragCoord.xy) / czm_viewport.zw; 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; } #endif #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 void main() { if (v_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard; if (v_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard; 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; #ifdef LOG_DEPTH czm_writeLogDepth(); #endif #ifdef FRAGMENT_DEPTH_CHECK float temp = v_compressed.y; temp = temp * SHIFT_RIGHT1; float temp2 = (temp - floor(temp)) * SHIFT_LEFT1; bool enableDepthTest = temp2 != 0.0; bool applyTranslate = floor(temp) != 0.0; if (enableDepthTest) { temp = v_compressed.z; temp = temp * SHIFT_RIGHT12; vec2 dimensions; dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12; dimensions.x = floor(temp); temp = v_compressed.w; temp = temp * SHIFT_RIGHT12; vec2 imageSize; imageSize.y = (temp - floor(temp)) * SHIFT_LEFT12; imageSize.x = floor(temp); vec2 adjustedST = v_textureCoordinates - v_textureCoordinateBounds.xy; adjustedST = adjustedST / vec2(v_textureCoordinateBounds.z - v_textureCoordinateBounds.x, v_textureCoordinateBounds.w - v_textureCoordinateBounds.y); float epsilonEyeDepth = v_compressed.x + czm_epsilon1; float globeDepth1 = getGlobeDepth(adjustedST, v_originTextureCoordinateAndTranslate.xy, applyTranslate, dimensions, imageSize); // negative values go into the screen if (globeDepth1 != 0.0 && globeDepth1 > epsilonEyeDepth) { float globeDepth2 = getGlobeDepth(adjustedST, vec2(0.0, 1.0), applyTranslate, dimensions, imageSize); // top left corner if (globeDepth2 != 0.0 && globeDepth2 > epsilonEyeDepth) { float globeDepth3 = getGlobeDepth(adjustedST, vec2(1.0, 1.0), applyTranslate, dimensions, imageSize); // top right corner if (globeDepth3 != 0.0 && globeDepth3 > epsilonEyeDepth) { discard; } } } } #endif } `;var FQn=y(C(),1),qX=`#ifdef INSTANCED in vec2 direction; #endif 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, disableDepthTestDistance, dimensions in vec2 sdf; // sdf outline color (rgb) and width (w) in float splitDirection; // splitDirection #if defined(VERTEX_DEPTH_CHECK) || defined(FRAGMENT_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; #ifdef FRAGMENT_DEPTH_CHECK out vec4 v_textureCoordinateBounds; out vec4 v_originTextureCoordinateAndTranslate; out vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize out mat2 v_rotationMatrix; #endif out vec4 v_pickColor; out vec4 v_color; out float v_splitDirection; #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 VERTEX_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; #ifdef FRAGMENT_DEPTH_CHECK vec2 depthOrigin = origin.xy; #endif origin -= vec2(1.0); float show = floor(compressed * SHIFT_RIGHT2); compressed -= show * SHIFT_LEFT2; #ifdef INSTANCED vec2 textureCoordinatesBottomLeft = czm_decompressTextureCoordinates(compressedAttribute0.w); vec2 textureCoordinatesRange = czm_decompressTextureCoordinates(eyeOffset.w); vec2 textureCoordinates = textureCoordinatesBottomLeft + direction * textureCoordinatesRange; #else vec2 direction; direction.x = floor(compressed * SHIFT_RIGHT1); direction.y = compressed - direction.x * SHIFT_LEFT1; vec2 textureCoordinates = czm_decompressTextureCoordinates(compressedAttribute0.w); #endif 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.y += (temp - floor(temp)) * SHIFT_LEFT8; translate.y -= UPPER_BOUND; temp = compressedAttribute1.x * SHIFT_RIGHT8; float temp2 = floor(compressedAttribute2.w * SHIFT_RIGHT2); vec2 imageSize = vec2(floor(temp), temp2); #ifdef FRAGMENT_DEPTH_CHECK float labelHorizontalOrigin = floor(compressedAttribute2.w - (temp2 * SHIFT_LEFT2)); float applyTranslate = 0.0; if (labelHorizontalOrigin != 0.0) // is a billboard, so set apply translate to false { applyTranslate = 1.0; labelHorizontalOrigin -= 2.0; depthOrigin.x = labelHorizontalOrigin + 1.0; } depthOrigin = vec2(1.0) - (depthOrigin * 0.5); #endif #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 #if defined(VERTEX_DEPTH_CHECK) || defined(FRAGMENT_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 pickColor; vec4 color; temp = compressedAttribute2.y; temp = temp * SHIFT_RIGHT8; pickColor.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; pickColor.g = (temp - floor(temp)) * SHIFT_LEFT8; pickColor.r = floor(temp); temp = compressedAttribute2.x; temp = temp * SHIFT_RIGHT8; color.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; color.g = (temp - floor(temp)) * SHIFT_LEFT8; color.r = floor(temp); 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 /= 255.0; color.a = floor(temp); color /= 255.0; /////////////////////////////////////////////////////////////////////////// vec4 p = czm_translateRelativeToEye(positionHigh, positionLow); vec4 positionEC = czm_modelViewRelativeToEye * p; #if defined(FRAGMENT_DEPTH_CHECK) || defined(VERTEX_DEPTH_CHECK) float eyeDepth = positionEC.z; #endif 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; #ifdef DISABLE_DEPTH_DISTANCE float disableDepthTestDistance = compressedAttribute3.z; #endif #ifdef VERTEX_DEPTH_CHECK if (lengthSq < disableDepthTestDistance) { float depthsilon = 10.0; vec2 labelTranslate = textureCoordinateBoundsOrLabelTranslate.xy; vec4 pEC1 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0), origin, labelTranslate, 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), origin, labelTranslate, 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), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp); float globeDepth3 = getGlobeDepth(pEC3); if (globeDepth3 != 0.0 && pEC3.z + depthsilon < globeDepth3) { positionEC.xyz = vec3(0.0); } } } } #endif 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 (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 v_depthFromNearPlusOne = 1.0; #endif } } #endif #ifdef FRAGMENT_DEPTH_CHECK if (sizeInMeters) { translate /= mpp; dimensions /= mpp; imageSize /= mpp; } #if defined(ROTATION) || defined(ALIGNED_AXIS) v_rotationMatrix = rotationMatrix; #else v_rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0); #endif float enableDepthCheck = 0.0; if (lengthSq < disableDepthTestDistance) { enableDepthCheck = 1.0; } float dw = floor(clamp(dimensions.x, 0.0, SHIFT_LEFT12)); float dh = floor(clamp(dimensions.y, 0.0, SHIFT_LEFT12)); float iw = floor(clamp(imageSize.x, 0.0, SHIFT_LEFT12)); float ih = floor(clamp(imageSize.y, 0.0, SHIFT_LEFT12)); v_compressed.x = eyeDepth; v_compressed.y = applyTranslate * SHIFT_LEFT1 + enableDepthCheck; v_compressed.z = dw * SHIFT_LEFT12 + dh; v_compressed.w = iw * SHIFT_LEFT12 + ih; v_originTextureCoordinateAndTranslate.xy = depthOrigin; v_originTextureCoordinateAndTranslate.zw = translate; v_textureCoordinateBounds = textureCoordinateBoundsOrLabelTranslate; #endif #ifdef SDF vec4 outlineColor; float outlineWidth; temp = sdf.x; temp = temp * SHIFT_RIGHT8; outlineColor.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; outlineColor.g = (temp - floor(temp)) * SHIFT_LEFT8; outlineColor.r = floor(temp); 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 /= 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_splitDirection = splitDirection; } `;var u5n=y(C(),1);var QQn=y(C(),1);var MQn=y(C(),1),qKe=Object.freeze({NONE:0,LOADING:2,LOADED:3,ERROR:4,FAILED:5}),Ts=qKe;function KA(e){this._billboardCollection=e,this._id=void 0,this._loadState=Ts.NONE,this._loadError=void 0,this._index=-1,this._width=void 0,this._height=void 0,this._hasSubregion=!1,this.dirty=!1}Object.defineProperties(KA.prototype,{loadError:{get:function(){return this._loadError}},loadState:{get:function(){return this._loadState}},ready:{get:function(){return this._loadState===Ts.LOADED}},hasImage:{get:function(){return this._loadState!==Ts.NONE}},id:{get:function(){return this._id}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});KA.prototype.unload=async function(){this._loadState!==Ts.NONE&&(this._id=void 0,this._loadError=void 0,this._loadState=Ts.NONE,this._index=-1,this._width=void 0,this._height=void 0,this.dirty=!0)};KA.prototype.loadImage=async function(e,t){if(this._id===e)return;let n=this._billboardCollection,i=n.billboardTextureCache,o=i.get(e);if(l(o)&&t.loadState===Ts.LOADING||t.loadState===Ts.LOADED){KA.clone(o,this);return}l(o)||(o=new KA(n),i.set(e,o)),o._id=this._id=e,o._loadState=this._loadState=Ts.LOADING,o._loadError=this._loadError=void 0;let r,s=this._billboardCollection.textureAtlas;try{r=await s.addImage(e,t)}catch(c){if(o._loadState=Ts.ERROR,o._loadError=c,this._id!==e)return;this._loadState=Ts.ERROR,this._loadError=c;return}if(!l(r)||r===-1){if(o._loadState=Ts.FAILED,o._index=-1,this._id!==e)return;this._loadState=Ts.FAILED,this._index=-1;return}o._index=r,o._loadState=Ts.LOADED;let a=s.rectangles[r];o._width=a.width,o._height=a.height,this._id===e&&(this._index=r,this._loadState=Ts.LOADED,this._width=a.width,this._height=a.height,this.dirty=!0)};KA.prototype.addImageSubRegion=async function(e,t){this._id=e,this._loadState=Ts.LOADING,this._loadError=void 0,this._hasSubregion=!0;let n,i=this._billboardCollection.textureAtlas;try{n=await i.addImageSubRegion(e,t)}catch(o){this._loadState=Ts.ERROR,this._loadError=o;return}if(!l(n)||n===-1){this._loadState=Ts.FAILED,this._index=-1,this._width=void 0,this._height=void 0;return}this._width=t.width,this._height=t.height,this._index=n,this._loadState=Ts.LOADED,this.dirty=!0};KA.prototype.computeTextureCoordinates=function(e){return this._billboardCollection.textureAtlas.computeTextureCoordinates(this._index,e)};KA.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 JA=KA;function Zi(e,t){e=e??Y.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;l(n)&&(n=zt.clone(n)),l(i)&&(i=zt.clone(i)),l(o)&&(o=zt.clone(o)),l(r)&&(r=Qt.clone(r)),this._show=e.show??!0,this._position=m.clone(e.position??m.ZERO),this._actualPosition=m.clone(this._position),this._pixelOffset=D.clone(e.pixelOffset??D.ZERO),this._translate=new D(0,0),this._eyeOffset=m.clone(e.eyeOffset??m.ZERO),this._heightReference=e.heightReference??et.NONE,this._verticalOrigin=e.verticalOrigin??kn.CENTER,this._horizontalOrigin=e.horizontalOrigin??wi.CENTER,this._scale=e.scale??1,this._color=U.clone(e.color??U.WHITE),this._rotation=e.rotation??0,this._alignedAxis=m.clone(e.alignedAxis??m.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 JA(t),this._imageWidth=void 0,this._imageHeight=void 0,this._labelDimensions=void 0,this._labelHorizontalOrigin=void 0,this._labelTranslate=void 0;let s=e.image,a=e.imageId;l(s)&&(l(a)||(typeof s=="string"?a=s:l(s.src)?a=s.src:a=qn()),this._imageTexture.loadImage(a,s)),l(e.imageSubRegion)&&this._imageTexture.addImageSubRegion(a,e.imageSubRegion),this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=re.SCENE3D,this._clusterShow=!0,this._outlineColor=U.clone(e.outlineColor??U.BLACK),this._outlineWidth=e.outlineWidth??0,this._updateClamping(),this._splitDirection=e.splitDirection??Ir.NONE}var Nde=Zi.SHOW_INDEX=0,QQ=Zi.POSITION_INDEX=1,Yde=Zi.PIXEL_OFFSET_INDEX=2,$Ke=Zi.EYE_OFFSET_INDEX=3,eJe=Zi.HORIZONTAL_ORIGIN_INDEX=4,tJe=Zi.VERTICAL_ORIGIN_INDEX=5,nJe=Zi.SCALE_INDEX=6,Dde=Zi.IMAGE_INDEX_INDEX=7,Qde=Zi.COLOR_INDEX=8,iJe=Zi.ROTATION_INDEX=9,oJe=Zi.ALIGNED_AXIS_INDEX=10,rJe=Zi.SCALE_BY_DISTANCE_INDEX=11,sJe=Zi.TRANSLUCENCY_BY_DISTANCE_INDEX=12,aJe=Zi.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX=13,cJe=Zi.DISTANCE_DISPLAY_CONDITION=14,lJe=Zi.DISABLE_DEPTH_DISTANCE=15;Zi.TEXTURE_COORDINATE_BOUNDS=16;var Ude=Zi.SDF_INDEX=17,dJe=Zi.SPLIT_DIRECTION_INDEX=18;Zi.NUMBER_OF_PROPERTIES=19;function fr(e,t){let n=e._billboardCollection;l(n)&&(n._updateBillboard(e,t),e._dirty=!0)}Object.defineProperties(Zi.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,fr(this,Nde))}},position:{get:function(){return this._position},set:function(e){let t=this._position;m.equals(t,e)||(m.clone(e,t),m.clone(e,this._actualPosition),this._updateClamping(),fr(this,QQ))}},heightReference:{get:function(){return this._heightReference},set:function(e){let t=this._heightReference;e!==t&&(this._heightReference=e,this._updateClamping(),fr(this,QQ))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){let t=this._pixelOffset;D.equals(t,e)||(D.clone(e,t),fr(this,Yde))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;zt.equals(t,e)||(this._scaleByDistance=zt.clone(e,t),fr(this,rJe))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;zt.equals(t,e)||(this._translucencyByDistance=zt.clone(e,t),fr(this,sJe))}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){let t=this._pixelOffsetScaleByDistance;zt.equals(t,e)||(this._pixelOffsetScaleByDistance=zt.clone(e,t),fr(this,aJe))}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){let t=this._eyeOffset;m.equals(t,e)||(m.clone(e,t),fr(this,$Ke))}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin!==e&&(this._horizontalOrigin=e,fr(this,eJe))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin!==e&&(this._verticalOrigin=e,fr(this,tJe))}},scale:{get:function(){return this._scale},set:function(e){this._scale!==e&&(this._scale=e,fr(this,nJe))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),fr(this,Qde))}},rotation:{get:function(){return this._rotation},set:function(e){this._rotation!==e&&(this._rotation=e,fr(this,iJe))}},alignedAxis:{get:function(){return this._alignedAxis},set:function(e){let t=this._alignedAxis;m.equals(t,e)||(m.clone(e,t),fr(this,oJe))}},width:{get:function(){return this._width??this._imageTexture.width},set:function(e){this._width!==e&&(this._width=e,fr(this,Dde))}},height:{get:function(){return this._height??this._imageTexture.height},set:function(e){this._height!==e&&(this._height=e,fr(this,Dde))}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters!==e&&(this._sizeInMeters=e,fr(this,Qde))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){Qt.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=Qt.clone(e,this._distanceDisplayCondition),fr(this,cJe))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,fr(this,lJe))}},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}let t;typeof e=="string"?t=e:e instanceof Ve?t=e._url:l(e.src)?t=e.src:t=qn(),this._imageTexture.loadImage(t,e)}},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=m.clone(e,this._actualClampedPosition),fr(this,QQ)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,fr(this,Nde))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;U.equals(t,e)||(U.clone(e,t),fr(this,Ude))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,fr(this,Ude))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,fr(this,dJe))}}});Zi.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this._pickPrimitive,collection:this._collection,id:this._id})),this._pickId};Zi.prototype._updateClamping=function(){Zi._updateClamping(this._billboardCollection,this)};var UQ=new ge;Zi._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===et.NONE||r)&&l(t._removeCallbackFunc)&&(t._removeCallbackFunc(),t._removeCallbackFunc=void 0,t._clampedPosition=void 0),t._heightReference===et.NONE||!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);D_(t._heightReference)&&(t._mode===re.SCENE3D?(d.height+=s.height,i.cartographicToCartesian(d,u)):u.x+=s.height),t._clampedPosition=u}t._removeCallbackFunc=n.updateHeight(s,a,t._heightReference),ge.clone(s,UQ);let c=n.getHeight(s,t._heightReference);l(c)&&(UQ.height=c),a(UQ)};Zi.prototype.computeTextureCoordinates=function(e){return this._imageTexture.computeTextureCoordinates(e)};Zi.prototype.setImage=function(e,t){this._imageTexture.loadImage(e,t)};Zi.prototype.setImageTexture=function(e){JA.clone(e,this._imageTexture)};Zi.prototype.setImageSubRegion=function(e,t){this._imageTexture.addImageSubRegion(e,t)};Zi.prototype._setTranslate=function(e){let t=this._translate;D.equals(t,e)||(D.clone(e,t),fr(this,Yde))};Zi.prototype._getActualPosition=function(){return l(this._clampedPosition)?this._clampedPosition:this._actualPosition};Zi.prototype._setActualPosition=function(e){l(this._clampedPosition)||m.clone(e,this._actualPosition),fr(this,QQ)};var kde=new ce;Zi._computeActualPosition=function(e,t,n,i){return l(e._clampedPosition)?(n.mode!==e._mode&&e._updateClamping(),e._clampedPosition):n.mode===re.SCENE3D?t:(X.multiplyByPoint(i,t,kde),to.computeActualEllipsoidPosition(n,kde))};var Ode=new m;Zi._computeScreenSpacePosition=function(e,t,n,i,o,r){let s=X.multiplyByPoint(e,t,Ode),a=to.worldWithEyeOffsetToWindowCoordinates(o,s,n,r);if(l(a))return D.add(a,i,a),a};var DQ=new D(0,0);Zi.prototype.computeScreenSpacePosition=function(e,t){let n=this._billboardCollection;l(t)||(t=new D),D.clone(this._pixelOffset,DQ),D.add(DQ,this._translate,DQ);let i=n.modelMatrix,o=this._position;if(l(this._clampedPosition)&&(o=this._clampedPosition,e.mode!==re.SCENE3D)){let s=e.mapProjection,a=s.ellipsoid,c=s.unproject(o,UQ);o=a.cartographicToCartesian(c,Ode),i=X.IDENTITY}return Zi._computeScreenSpacePosition(i,o,this._eyeOffset,DQ,e,t)};Zi.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===wi.RIGHT?s-=i:e.horizontalOrigin===wi.CENTER&&(s-=i*.5);let a=t.y;return e.verticalOrigin===kn.BOTTOM||e.verticalOrigin===kn.BASELINE?a-=o:e.verticalOrigin===kn.CENTER&&(a-=o*.5),l(n)||(n=new Ke),n.x=s,n.y=a,n.width=i,n.height=o,n};Zi.prototype.equals=function(e){return this===e||l(e)&&this._id===e._id&&m.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)&&D.equals(this._pixelOffset,e._pixelOffset)&&D.equals(this._translate,e._translate)&&m.equals(this._eyeOffset,e._eyeOffset)&&zt.equals(this._scaleByDistance,e._scaleByDistance)&&zt.equals(this._translucencyByDistance,e._translucencyByDistance)&&zt.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&Qt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};Zi.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 Eo=Zi;var h5n=y(C(),1),uJe={OPAQUE:0,TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2},No=Object.freeze(uJe);var p5n=y(C(),1),mJe={FONT_SIZE:48,PADDING:10,RADIUS:8,CUTOFF:.25},ga=Object.freeze(mJe);var X5n=y(C(),1);var y5n=y(C(),1);function $X({x:e,y:t,width:n,height:i}){this.rectangle=new Ke(e,t,n,i),this.childNode1=void 0,this.childNode2=void 0,this.index=void 0}function MK({width:e,height:t,borderPadding:n}){this._width=e,this._height=t,this._borderPadding=n,this._root=new $X({x:n,y:n,width:e-2*n,height:t-2*n})}MK.prototype.pack=function(e,{width:t,height:n}){let i=this._findNode(this._root,{width:t,height:n});if(l(i))return i.index=e,i};MK.prototype._findNode=function(e,{width:t,height:n}){if(l(e)){if(!l(e.childNode1)&&!l(e.childNode2)){if(l(e.index))return;let{rectangle:i}=e,o=i.width,r=i.height,s=o-t,a=r-n;return s<0||a<0?void 0:s===0&&a===0?e:s>a?(e.childNode1=new $X({x:i.x,y:i.y,width:t,height:r}),e.childNode2=new $X({x:i.x+t,y:i.y,width:s,height:r}),this._findNode(e.childNode1,{width:t,height:n})):(e.childNode1=new $X({x:i.x,y:i.y,width:o,height:n}),e.childNode2=new $X({x:i.x,y:i.y+n,width:o,height:a}),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 uT=MK;var Hde=16;function ld(e){e=e??Y.EMPTY_OBJECT;let t=e.borderWidthInPixels??1,n=e.initialSize??new D(Hde,Hde);this._pixelFormat=e.pixelFormat??tt.RGBA,this._sampler=e.sampler,this._borderWidthInPixels=t,this._initialSize=n,this._texturePacker=void 0,this._rectangles=[],this._subRegions=new Map,this._guid=qn(),this._imagesToAddQueue=[],this._indexById=new Map,this._indexPromiseById=new Map,this._nextIndex=0}Object.defineProperties(ld.prototype,{borderWidthInPixels:{get:function(){return this._borderWidthInPixels}},rectangles:{get:function(){return this._rectangles}},texture:{get:function(){return this._texture}},pixelFormat:{get:function(){return this._pixelFormat}},sampler:{get:function(){return this._sampler}},numberOfImages:{get:function(){return this._nextIndex}},guid:{get:function(){return this._guid}},sizeInBytes:{get:function(){return l(this._texture)?this._texture.sizeInBytes:0}}});ld.prototype.computeTextureCoordinates=function(e,t){let n=this._texture,i=this._rectangles[e];if(l(t)||(t=new Ke),!l(i))return t.x=0,t.y=0,t.width=0,t.height=0,t;let o=n.width,r=n.height,s=i.width,a=i.height,c=i.x,d=i.y,u=this._subRegions.get(e);if(l(u)){let h=this._rectangles[u];c+=h.x,d+=h.y}return t.x=c/o,t.y=d/r,t.width=s/o,t.height=a/r,t};ld.prototype._copyFromTexture=function(e,t,n,i){let o=this._pixelFormat,r=this._sampler,s=new Wt({context:e,height:n,width:t,pixelFormat:o,sampler:r}),a=e._gl,c=s._textureTarget,d=this._texture,u=new jr({context:e,colorTextures:[d],destroyAttachments:!1});a.activeTexture(a.TEXTURE0),a.bindTexture(c,s._texture),u._bind();let h=this.rectangles,p=this._subRegions;for(let g=0;g<h.length;++g){let f=i[g],b=h[g];if(!l(f)||!l(b)||l(p.get(g)))continue;let{x,y:I,width:_,height:E}=f;a.copyTexSubImage2D(c,0,x,I,b.x,b.y,_,E)}return a.bindTexture(c,null),s._initialized=!0,u._unBind(),u.destroy(),s};ld.prototype._resize=function(e,t=0){let n=this._borderWidthInPixels,i=this._rectangles,o=this._imagesToAddQueue,r=this._texture,s=r.width,a=r.height,c=this._subRegions,d=i.map((_,E)=>new zde({index:E,image:_})).filter((_,E)=>l(_.image)&&!l(c.get(E))),u=0,h=0,p=0;for(let _=t;_<o.length;++_){let{width:E,height:S}=o[_].image;u=Math.max(u,E),h=Math.max(h,S),p+=E*S,d.push(o[_])}s=Math.max(u,s),a=Math.max(h,a),e.webgl2||(s=Z.nextPowerOfTwo(s),a=Z.nextPowerOfTwo(a));let g=p,f=1;for(;g/s/a>=1;)f*=2,s>a?a*=f:s*=f;d.sort(({image:_},{image:E})=>E.height*E.width-_.height*_.width);let b=new Array(this._nextIndex);for(let _ of this._subRegions.keys())l(c.get(_))&&(b[_]=i[_]);let x,I=!1;for(;!I;){x=new uT({height:a,width:s,borderPadding:n});let _;for(_=0;_<d.length;++_){let{index:E,image:S}=d[_];if(!l(S))continue;let R=x.pack(E,S);if(!l(R)){s>a?a*=2:s*=2;break}b[E]=R.rectangle}I=_===d.length}this._texturePacker=x,this._texture=this._copyFromTexture(e,s,a,b),r.destroy(),this._rectangles=b,this._guid=qn()};ld.prototype.getImageIndex=function(e){return this._indexById.get(e)};ld.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 zde({index:e,image:t,resolve:n,reject:i}){this.index=e,this.image=t,this.resolve=n,this.reject=i,this.rectangle=void 0}ld.prototype._addImage=function(e,t){return new Promise((n,i)=>{this._imagesToAddQueue.push(new zde({index:e,image:t,resolve:n,reject:i})),this._imagesToAddQueue.sort(({image:o},{image:r})=>r.height*r.width-o.height*o.width)})};ld.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<t.length;++n){let o=t[n],{image:r,index:s}=o,a=this._texturePacker.pack(s,r);if(!l(a)){try{this._resize(e,n)}catch(c){i=c,l(o.reject)&&o.reject(i)}break}this._rectangles[s]=a.rectangle}if(l(i)){for(n=n+1;n<t.length;++n){let{resolve:o}=t[n];l(o)&&o(-1)}return t.length=0,!1}for(let o=0;o<t.length;++o)this._copyImageToTexture(t[o]);return t.length=0,!0};ld.prototype.update=function(e){if(!l(this._texture)){let t=this._initialSize.x,n=this._initialSize.y,i=this._pixelFormat,o=this._sampler,r=this._borderWidthInPixels;this._texture=new Wt({context:e,width:t,height:n,pixelFormat:i,sampler:o}),this._texturePacker=new uT({height:n,width:t,borderPadding:r})}return this._processImageQueue(e)};async function hJe(e,t){return typeof e=="function"&&(e=e(t)),(typeof e=="string"||e instanceof Ve)&&(e=Ve.createIfNeeded(e).fetchImage()),e}ld.prototype.addImage=function(e,t){let n=this._indexPromiseById.get(e);if(l(n))return n;let i=this._nextIndex++;return this._indexById.set(e,i),n=(async()=>(t=await hJe(t,e),this.isDestroyed()||!l(t)?-1:this._addImage(i,t)))(),this._indexPromiseById.set(e,n),n};ld.prototype.addImageSubRegion=function(e,t){let n=this._indexById.get(e);if(!l(n))throw new de(`image with id "${e}" not found in the atlas.`);let i=this._indexPromiseById.get(e);for(let[r,s]of this._subRegions.entries())if(n===s&&this._rectangles[r].equals(t))return i.then(c=>c===-1?-1:r);let o=this._nextIndex++;return this._subRegions.set(o,n),this._rectangles[o]=t.clone(),i.then(r=>{if(r===-1)return-1;let s=this._rectangles[r];return o})};ld.prototype.isDestroyed=function(){return!1};ld.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),this._imagesToAddQueue.forEach(({resolve:e})=>{l(e)&&e(-1)}),me(this)};var mx=ld;var fJe=Eo.SHOW_INDEX,e2=Eo.POSITION_INDEX,Kde=Eo.PIXEL_OFFSET_INDEX,Jde=Eo.EYE_OFFSET_INDEX,pJe=Eo.HORIZONTAL_ORIGIN_INDEX,AJe=Eo.VERTICAL_ORIGIN_INDEX,gJe=Eo.SCALE_INDEX,hx=Eo.IMAGE_INDEX_INDEX,jde=Eo.COLOR_INDEX,bJe=Eo.ROTATION_INDEX,yJe=Eo.ALIGNED_AXIS_INDEX,qde=Eo.SCALE_BY_DISTANCE_INDEX,$de=Eo.TRANSLUCENCY_BY_DISTANCE_INDEX,eue=Eo.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX,tue=Eo.DISTANCE_DISPLAY_CONDITION,CJe=Eo.DISABLE_DEPTH_DISTANCE,xJe=Eo.TEXTURE_COORDINATE_BOUNDS,nue=Eo.SDF_INDEX,iue=Eo.SPLIT_DIRECTION_INDEX,YK=Eo.NUMBER_OF_PROPERTIES,To,IJe={positionHighAndScale:0,positionLowAndRotation:1,compressedAttribute0:2,compressedAttribute1:3,compressedAttribute2:4,eyeOffset:5,scaleByDistance:6,pixelOffsetScaleByDistance:7,compressedAttribute3:8,textureCoordinateBoundsOrLabelTranslate:9,a_batchId:10,sdf:11,splitDirection:12},_Je={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 lm(e){e=e??Y.EMPTY_OBJECT,this._scene=e.scene,this._batchTable=e.batchTable;let t=e.textureAtlas;l(t)||(t=new mx),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(YK),this._maxSize=0,this._maxEyeOffset=0,this._maxScale=1,this._maxPixelOffset=0,this._allHorizontalCenter=!0,this._allVerticalCenter=!0,this._allSizedInMeters=!0,this._baseVolume=new ue,this._baseVolumeWC=new ue,this._baseVolume2D=new ue,this._boundingVolume=new ue,this._boundingVolumeDirty=!1,this._colorCommands=[],this._allBillboardsReady=!1,this.show=e.show??!0,this.modelMatrix=X.clone(e.modelMatrix??X.IDENTITY),this._modelMatrix=X.clone(X.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowTextureAtlas=e.debugShowTextureAtlas??!1,this.blendOption=e.blendOption??No.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=re.SCENE3D,this._buffersUsage=[Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW],this._highlightColor=U.clone(U.WHITE),this._uniforms={u_atlas:()=>this.textureAtlas.texture,u_highlightColor:()=>this._highlightColor};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;r<o;++r)l(i[r])&&i[r]._updateClamping()},this))}Object.defineProperties(lm.prototype,{length:{get:function(){return OK(this),this._billboards.length}},textureAtlas:{get:function(){return this._textureAtlas},set:function(e){this._textureAtlas!==e&&(this._textureAtlas=this._destroyTextureAtlas&&this._textureAtlas&&this._textureAtlas.destroy(),this._textureAtlas=e)}},destroyTextureAtlas:{get:function(){return this._destroyTextureAtlas},set:function(e){this._destroyTextureAtlas=e}},sizeInBytes:{get:function(){return this._textureAtlas.sizeInBytes}},ready:{get:function(){return this._allBillboardsReady}},billboardTextureCache:{get:function(){return this._billboardTextureCache}}});function oue(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}lm.prototype.add=function(e){let t=new Eo(e,this);return t._index=this._billboards.length,this._billboards.push(t),this._createVertexArray=!0,t};lm.prototype.remove=function(e){return this.contains(e)?(this._billboards[e._index]=void 0,this._billboardsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};lm.prototype.removeAll=function(){oue(this._billboards),this._billboards=[],this._billboardsToUpdate=[],this._billboardsToUpdateIndex=0,this._billboardsRemoved=!1,this._createVertexArray=!0};function OK(e){if(e._billboardsRemoved){e._billboardsRemoved=!1;let t=[],n=e._billboards,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];l(s)&&(s._index=r++,t.push(s))}e._billboards=t}}lm.prototype._updateBillboard=function(e,t){e._dirty||(this._billboardsToUpdate[this._billboardsToUpdateIndex++]=e),++this._propertiesChanged[t]};lm.prototype.contains=function(e){return l(e)&&e._billboardCollection===this};lm.prototype.get=function(e){return OK(this),this._billboards[e]};var vK;function EJe(e){let n=e.cache.billboardCollection_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+0,o[r+4]=s+2,o[r+5]=s+3;return n=It.createIndexBuffer({context:e,typedArray:o,usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT}),n.vertexArrayDestroyable=!1,e.cache.billboardCollection_indexBufferBatched=n,n}function TJe(e){let t=e.cache.billboardCollection_indexBufferInstanced;return l(t)||(t=It.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT}),t.vertexArrayDestroyable=!1,e.cache.billboardCollection_indexBufferInstanced=t),t}function SJe(e){let t=e.cache.billboardCollection_vertexBufferInstanced;return l(t)||(t=It.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:Ne.STATIC_DRAW}),t.vertexArrayDestroyable=!1,e.cache.billboardCollection_vertexBufferInstanced=t),t}lm.prototype.computeNewBuffersUsage=function(){let e=this._buffersUsage,t=!1,n=this._propertiesChanged;for(let i=0;i<YK;++i){let o=n[i]===0?Ne.STATIC_DRAW:Ne.STREAM_DRAW;t=t||e[i]!==o,e[i]=o}return t};function LJe(e,t,n,i,o,r){let s=[{index:To.positionHighAndScale,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[e2]},{index:To.positionLowAndRotation,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[e2]},{index:To.compressedAttribute0,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[Kde]},{index:To.compressedAttribute1,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[$de]},{index:To.compressedAttribute2,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[jde]},{index:To.eyeOffset,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[Jde]},{index:To.scaleByDistance,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[qde]},{index:To.pixelOffsetScaleByDistance,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[eue]},{index:To.compressedAttribute3,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[tue]},{index:To.textureCoordinateBoundsOrLabelTranslate,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[xJe]},{index:To.splitDirection,componentsPerAttribute:1,componentDatatype:J.FLOAT,usage:n[iue]}];i&&s.push({index:To.direction,componentsPerAttribute:2,componentDatatype:J.FLOAT,vertexBuffer:SJe(e)}),l(o)&&s.push({index:To.a_batchId,componentsPerAttribute:1,componentDatatype:J.FLOAT,bufferUsage:Ne.STATIC_DRAW}),r&&s.push({index:To.sdf,componentsPerAttribute:2,componentDatatype:J.FLOAT,usage:n[nue]});let a=i?t:4*t;return new zA(e,s,a,i)}var NK=new ni;function rue(e,t,n,i){let o,r=n[To.positionHighAndScale],s=n[To.positionLowAndRotation],a=i._getActualPosition();e._mode===re.SCENE3D&&(ue.expand(e._baseVolume,a,e._baseVolume),e._boundingVolumeDirty=!0),ni.fromCartesian(a,NK);let c=i.scale,d=i.rotation;d!==0&&(e._shaderRotation=!0),e._maxScale=Math.max(e._maxScale,c);let u=NK.high,h=NK.low;e._instanced?(o=i._index,r(o,u.x,u.y,u.z,c),s(o,h.x,h.y,h.z,d)):(o=i._index*4,r(o+0,u.x,u.y,u.z,c),r(o+1,u.x,u.y,u.z,c),r(o+2,u.x,u.y,u.z,c),r(o+3,u.x,u.y,u.z,c),s(o+0,h.x,h.y,h.z,d),s(o+1,h.x,h.y,h.z,d),s(o+2,h.x,h.y,h.z,d),s(o+3,h.x,h.y,h.z,d))}var dd=new D,cm=32768,mT=65536,DK=4096,qf=256,RJe=128,VJe=32,GJe=8,sue=4,ZJe=1/256,aue=0,cue=2,lue=3,due=1,HK=new Ke;function uue(e,t,n,i){let o,r=n[To.compressedAttribute0],s=i.pixelOffset,a=s.x,c=s.y,d=i._translate,u=d.x,h=d.y;e._maxPixelOffset=Math.max(e._maxPixelOffset,Math.abs(a+u),Math.abs(-c+h));let p=i.horizontalOrigin,g=i._verticalOrigin,f=i.show&&i.clusterShow;i.color.alpha===0&&(f=!1),g===kn.BASELINE&&(g=kn.BOTTOM),e._allHorizontalCenter=e._allHorizontalCenter&&p===wi.CENTER,e._allVerticalCenter=e._allVerticalCenter&&g===kn.CENTER;let b=0,x=0,I=0,_=0;if(i.ready){let W=i.computeTextureCoordinates(HK);b=W.x,x=W.y,I=W.width,_=W.height}let E=b+I,S=x+_,R=Math.floor(Z.clamp(a,-cm,cm)+cm)*RJe;R+=(p+1)*VJe,R+=(g+1)*GJe,R+=(f?1:0)*sue;let G=Math.floor(Z.clamp(c,-cm,cm)+cm)*qf,B=Math.floor(Z.clamp(u,-cm,cm)+cm)*qf,w=(Z.clamp(h,-cm,cm)+cm)*ZJe,F=Math.floor(w),P=Math.floor((w-F)*qf);G+=F,B+=P,dd.x=b,dd.y=x;let A=Mn.compressTextureCoordinates(dd);dd.x=E;let T=Mn.compressTextureCoordinates(dd);dd.y=S;let L=Mn.compressTextureCoordinates(dd);dd.x=b;let V=Mn.compressTextureCoordinates(dd);e._instanced?(o=i._index,r(o,R,G,B,A)):(o=i._index*4,r(o+0,R+aue,G,B,A),r(o+1,R+cue,G,B,T),r(o+2,R+lue,G,B,L),r(o+3,R+due,G,B,V))}function mue(e,t,n,i){let o,r=n[To.compressedAttribute1],s=i.alignedAxis;m.equals(s,m.ZERO)||(e._shaderAlignedAxis=!0);let a=0,c=1,d=1,u=1,h=i.translucencyByDistance;l(h)&&(a=h.near,c=h.nearValue,d=h.far,u=h.farValue,(c!==1||u!==1)&&(e._shaderTranslucencyByDistance=!0));let p=Math.round(i.width??0);e._maxSize=Math.max(e._maxSize,p);let g=Z.clamp(p,0,mT),f=0;Math.abs(m.magnitudeSquared(s)-1)<Z.EPSILON6&&(f=Mn.octEncodeFloat(s)),c=Z.clamp(c,0,1),c=c===1?255:c*255|0,g=g*qf+c,u=Z.clamp(u,0,1),u=u===1?255:u*255|0,f=f*qf+u,e._instanced?(o=i._index,r(o,g,f,a,d)):(o=i._index*4,r(o+0,g,f,a,d),r(o+1,g,f,a,d),r(o+2,g,f,a,d),r(o+3,g,f,a,d))}function UK(e,t,n,i){let o,r=n[To.compressedAttribute2],s=i.color,a=l(e._batchTable)?U.WHITE:i.getPickId(t.context).color,c=i.sizeInMeters?1:0,d=Math.abs(m.magnitudeSquared(i.alignedAxis)-1)<Z.EPSILON6?1:0;e._allSizedInMeters=e._allSizedInMeters&&c===1;let u=i.height??0;e._maxSize=Math.max(e._maxSize,u);let h=i._labelHorizontalOrigin??-2;h+=2;let p=u*sue+h,g=U.floatToByte(s.red),f=U.floatToByte(s.green),b=U.floatToByte(s.blue),x=g*mT+f*qf+b;g=U.floatToByte(a.red),f=U.floatToByte(a.green),b=U.floatToByte(a.blue);let I=g*mT+f*qf+b,_=U.floatToByte(s.alpha)*mT+U.floatToByte(a.alpha)*qf;_+=c*2+d,e._instanced?(o=i._index,r(o,x,I,_,p)):(o=i._index*4,r(o+0,x,I,_,p),r(o+1,x,I,_,p),r(o+2,x,I,_,p),r(o+3,x,I,_,p))}function kK(e,t,n,i){let o,r=n[To.eyeOffset],s=i.eyeOffset,a=s.z;if(i._heightReference!==et.NONE&&(a*=1.005),e._maxEyeOffset=Math.max(e._maxEyeOffset,Math.abs(s.x),Math.abs(s.y),Math.abs(a)),e._instanced){if(dd.x=0,dd.y=0,i.ready){let d=i.computeTextureCoordinates(HK);dd.x=d.width,dd.y=d.height}let c=Mn.compressTextureCoordinates(dd);o=i._index,r(o,s.x,s.y,a,c)}else o=i._index*4,r(o+0,s.x,s.y,a,0),r(o+1,s.x,s.y,a,0),r(o+2,s.x,s.y,a,0),r(o+3,s.x,s.y,a,0)}function hue(e,t,n,i){let o,r=n[To.scaleByDistance],s=0,a=1,c=1,d=1,u=i.scaleByDistance;l(u)&&(s=u.near,a=u.nearValue,c=u.far,d=u.farValue,(a!==1||d!==1)&&(e._shaderScaleByDistance=!0)),e._instanced?(o=i._index,r(o,s,a,c,d)):(o=i._index*4,r(o+0,s,a,c,d),r(o+1,s,a,c,d),r(o+2,s,a,c,d),r(o+3,s,a,c,d))}function fue(e,t,n,i){let o,r=n[To.pixelOffsetScaleByDistance],s=0,a=1,c=1,d=1,u=i.pixelOffsetScaleByDistance;l(u)&&(s=u.near,a=u.nearValue,c=u.far,d=u.farValue,(a!==1||d!==1)&&(e._shaderPixelOffsetScaleByDistance=!0)),e._instanced?(o=i._index,r(o,s,a,c,d)):(o=i._index*4,r(o+0,s,a,c,d),r(o+1,s,a,c,d),r(o+2,s,a,c,d),r(o+3,s,a,c,d))}function pue(e,t,n,i){let o,r=n[To.compressedAttribute3],s=0,a=Number.MAX_VALUE,c=i.distanceDisplayCondition;l(c)&&(s=c.near,a=c.far,s*=s,a*=a,e._shaderDistanceDisplayCondition=!0);let d=i.disableDepthTestDistance,u=Du(i.heightReference)&&t.context.depthTexture;l(d)||(d=u?5e3:0),d*=d,(u||d>0)&&(e._shaderDisableDepthDistance=!0,d===Number.POSITIVE_INFINITY&&(d=-1));let h,p;l(i._labelDimensions)?(p=i._labelDimensions.x,h=i._labelDimensions.y):(p=i.width??0,h=i.height??0);let g=Math.floor(Z.clamp(p,0,DK)),f=Math.floor(Z.clamp(h,0,DK)),b=g*DK+f;e._instanced?(o=i._index,r(o,s,a,d,b)):(o=i._index*4,r(o+0,s,a,d,b),r(o+1,s,a,d,b),r(o+2,s,a,d,b),r(o+3,s,a,d,b))}function Aue(e,t,n,i){if(Du(i.heightReference)){let p=e._scene,g=t.context,f=t.globeTranslucencyState.translucent,b=l(p.globe)&&p.globe.depthTestAgainstTerrain;e._shaderClampToGround=g.depthTexture&&!f&&b}let o,r=n[To.textureCoordinateBoundsOrLabelTranslate];if(Kt.maximumVertexTextureImageUnits>0){let p=0,g=0;l(i._labelTranslate)&&(p=i._labelTranslate.x,g=i._labelTranslate.y),e._instanced?(o=i._index,r(o,p,g,0,0)):(o=i._index*4,r(o+0,p,g,0,0),r(o+1,p,g,0,0),r(o+2,p,g,0,0),r(o+3,p,g,0,0));return}let s=0,a=0,c=0,d=0;if(i.ready){let p=i.computeTextureCoordinates(HK);s=p.x,a=p.y,c=p.width,d=p.height}let u=s+c,h=a+d;e._instanced?(o=i._index,r(o,s,a,u,h)):(o=i._index*4,r(o+0,s,a,u,h),r(o+1,s,a,u,h),r(o+2,s,a,u,h),r(o+3,s,a,u,h))}function BJe(e,t,n,i){if(!l(e._batchTable))return;let o=n[To.a_batchId],r=i._batchIndex,s;e._instanced?(s=i._index,o(s,r)):(s=i._index*4,o(s+0,r),o(s+1,r),o(s+2,r),o(s+3,r))}function gue(e,t,n,i){if(!e._sdf)return;let o,r=n[To.sdf],s=i.outlineColor,a=i.outlineWidth,c=U.floatToByte(s.red),d=U.floatToByte(s.green),u=U.floatToByte(s.blue),h=c*mT+d*qf+u,p=a/ga.RADIUS,g=U.floatToByte(s.alpha)*mT+U.floatToByte(p)*qf;e._instanced?(o=i._index,r(o,h,g)):(o=i._index*4,r(o+0,h+aue,g),r(o+1,h+cue,g),r(o+2,h+lue,g),r(o+3,h+due,g))}function bue(e,t,n,i){let o=n[To.splitDirection],r=0,s=i.splitDirection;l(s)&&(r=s);let a;e._instanced?(a=i._index,o(a,r)):(a=i._index*4,o(a+0,r),o(a+1,r),o(a+2,r),o(a+3,r))}function wJe(e,t,n,i){rue(e,t,n,i),uue(e,t,n,i),mue(e,t,n,i),UK(e,t,n,i),kK(e,t,n,i),hue(e,t,n,i),fue(e,t,n,i),pue(e,t,n,i),Aue(e,t,n,i),BJe(e,t,n,i),gue(e,t,n,i),bue(e,t,n,i)}function QK(e,t,n,i,o,r){let s;i.mode===re.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let c=0;c<n;++c){let d=t[c],u=d.position,h=Eo._computeActualPosition(d,u,i,o);l(h)&&(d._setActualPosition(h),r?a.push(h):ue.expand(s,h,s))}r&&ue.fromPoints(a,s)}function XJe(e,t){let n=t.mode,i=e._billboards,o=e._billboardsToUpdate,r=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==re.SCENE3D&&!X.equals(r,e.modelMatrix)?(e._mode=n,X.clone(e.modelMatrix,r),e._createVertexArray=!0,(n===re.SCENE3D||n===re.SCENE2D||n===re.COLUMBUS_VIEW)&&QK(e,i,i.length,t,r,!0)):n===re.MORPHING?QK(e,i,i.length,t,r,!0):(n===re.SCENE2D||n===re.COLUMBUS_VIEW)&&QK(e,o,e._billboardsToUpdateIndex,t,r,!1)}function WJe(e,t,n){let i=1;(!e._allSizedInMeters||e._maxPixelOffset!==0)&&(i=t.camera.getPixelSize(n,t.context.drawingBufferWidth,t.context.drawingBufferHeight));let o=i*e._maxScale*e._maxSize*2;e._allHorizontalCenter&&e._allVerticalCenter&&(o*=.5);let r=i*e._maxPixelOffset+e._maxEyeOffset;n.radius+=o+r}function FJe(e,t){let i=t.createViewportQuadCommand(`uniform sampler2D billboard_texture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(billboard_texture, v_textureCoordinates); } `,{uniformMap:{billboard_texture:function(){return e.textureAtlas.texture}}});return i.pass=Ge.OVERLAY,i}var PJe=[];lm.prototype.update=function(e){if(OK(this),!this.show)return;let t=e.context;this._instanced=t.instancedArrays,To=this._instanced?_Je:IJe,vK=this._instanced?TJe:EJe;let n=this._billboards,i=n.length,o=!0;for(let w=0;w<i;++w){let F=n[w];l(F.loadError)&&(console.error(`Error loading image for billboard: ${F.loadError}`),F.image=void 0),F.textureDirty&&this._updateBillboard(F,hx),F.show&&(o=o&&F.ready)}let r=this._textureAtlas;if(e.afterRender.push(()=>{if(!this.isDestroyed())return r.update(e.context)}),!l(r.texture))return;XJe(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 h,p=e.passes,g=p.pick;if(u||!g&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(let w=0;w<YK;++w)c[w]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),i>0){this._vaf=LJe(t,i,this._buffersUsage,this._instanced,this._batchTable,this._sdf),h=this._vaf.writers;for(let w=0;w<i;++w){let F=this._billboards[w];F._dirty=!1,F.textureDirty=!1,wJe(this,e,h,F)}this._vaf.commit(vK(t))}this._billboardsToUpdateIndex=0}else if(a>0){let w=PJe;w.length=0,(c[e2]||c[bJe]||c[gJe])&&w.push(rue),(c[hx]||c[Kde]||c[pJe]||c[AJe]||c[fJe])&&(w.push(uue),this._instanced&&w.push(kK)),(c[hx]||c[yJe]||c[$de])&&(w.push(mue),w.push(UK)),(c[hx]||c[jde])&&w.push(UK),(c[hx]||c[Jde])&&w.push(kK),c[qde]&&w.push(hue),c[eue]&&w.push(fue),(c[tue]||c[CJe]||c[hx]||c[e2])&&w.push(pue),(c[hx]||c[e2])&&w.push(Aue),c[nue]&&w.push(gue),c[iue]&&w.push(bue);let F=w.length;if(h=this._vaf.writers,a/i>.1){for(let P=0;P<a;++P){let A=s[P];A._dirty=!1,A.textureDirty=!1;for(let T=0;T<F;++T)w[T](this,e,h,A)}this._vaf.commit(vK(t))}else{for(let P=0;P<a;++P){let A=s[P];A._dirty=!1,A.textureDirty=!1;for(let T=0;T<F;++T)w[T](this,e,h,A);this._instanced?this._vaf.subCommit(A._index,1):this._vaf.subCommit(A._index*4,4)}this._vaf.endSubCommits()}this._billboardsToUpdateIndex=0}if(a>i*1.5&&(s.length=i),!l(this._vaf)||!l(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,ue.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let f,b=X.IDENTITY;e.mode===re.SCENE3D?(b=this.modelMatrix,f=ue.clone(this._baseVolumeWC,this._boundingVolume)):f=ue.clone(this._baseVolume2D,this._boundingVolume),WJe(this,e,f);let x=this._blendOption!==this.blendOption;if(this._blendOption=this.blendOption,x){this._blendOption===No.OPAQUE||this._blendOption===No.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Qe.fromCache({depthTest:{enabled:!0,func:ne.LESS},depthMask:!0}):this._rsOpaque=void 0;let w=this._blendOption===No.TRANSLUCENT;this._blendOption===No.TRANSLUCENT||this._blendOption===No.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Qe.fromCache({depthTest:{enabled:!0,func:w?ne.LEQUAL:ne.LESS},depthMask:w,blending:bn.ALPHA_BLEND}):this._rsTranslucent=void 0}this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let I,_,E,S,R,G=Kt.maximumVertexTextureImageUnits>0;if(x||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){I=qX,_=jX,R=[],l(this._batchTable)&&(R.push("VECTOR_TILE"),I=this._batchTable.getVertexShaderCallback(!1,"a_batchId",void 0)(I),_=this._batchTable.getFragmentShaderCallback(!1,void 0)(_)),E=new Oe({defines:R,sources:[I]}),this._instanced&&E.defines.push("INSTANCED"),this._shaderRotation&&E.defines.push("ROTATION"),this._shaderAlignedAxis&&E.defines.push("ALIGNED_AXIS"),this._shaderScaleByDistance&&E.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&E.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderPixelOffsetScaleByDistance&&E.defines.push("EYE_DISTANCE_PIXEL_OFFSET"),this._shaderDistanceDisplayCondition&&E.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&E.defines.push("DISABLE_DEPTH_DISTANCE"),this._shaderClampToGround&&(G?E.defines.push("VERTEX_DEPTH_CHECK"):E.defines.push("FRAGMENT_DEPTH_CHECK"));let w=1-ga.CUTOFF;this._sdf&&E.defines.push("SDF");let F=l(this._batchTable)?"VECTOR_TILE":"";this._blendOption===No.OPAQUE_AND_TRANSLUCENT&&(S=new Oe({defines:["OPAQUE",F],sources:[_]}),this._shaderClampToGround&&(G?S.defines.push("VERTEX_DEPTH_CHECK"):S.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(S.defines.push("SDF"),S.defines.push(`SDF_EDGE ${w}`)),this._sp=ln.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:E,fragmentShaderSource:S,attributeLocations:To}),S=new Oe({defines:["TRANSLUCENT",F],sources:[_]}),this._shaderClampToGround&&(G?S.defines.push("VERTEX_DEPTH_CHECK"):S.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(S.defines.push("SDF"),S.defines.push(`SDF_EDGE ${w}`)),this._spTranslucent=ln.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:E,fragmentShaderSource:S,attributeLocations:To})),this._blendOption===No.OPAQUE&&(S=new Oe({defines:[F],sources:[_]}),this._shaderClampToGround&&(G?S.defines.push("VERTEX_DEPTH_CHECK"):S.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(S.defines.push("SDF"),S.defines.push(`SDF_EDGE ${w}`)),this._sp=ln.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:E,fragmentShaderSource:S,attributeLocations:To})),this._blendOption===No.TRANSLUCENT&&(S=new Oe({defines:[F],sources:[_]}),this._shaderClampToGround&&(G?S.defines.push("VERTEX_DEPTH_CHECK"):S.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(S.defines.push("SDF"),S.defines.push(`SDF_EDGE ${w}`)),this._spTranslucent=ln.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:E,fragmentShaderSource:S,attributeLocations:To})),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 B=e.commandList;if(p.render||p.pick){let w=this._colorCommands,F=this._blendOption===No.OPAQUE,P=this._blendOption===No.OPAQUE_AND_TRANSLUCENT,A=this._vaf.va,T=A.length,L=this._uniforms,V;l(this._batchTable)?(L=this._batchTable.getUniformMapCallback()(L),V=this._batchTable.getPickId()):V="v_pickColor",w.length=T;let W=P?T*2:T;for(let M=0;M<W;++M){let Q=w[M];l(Q)||(Q=w[M]=new ot);let N=F||P&&M%2===0;Q.pass=N||!P?Ge.OPAQUE:Ge.TRANSLUCENT,Q.owner=this;let k=P?Math.floor(M/2):M;Q.boundingVolume=f,Q.modelMatrix=b,Q.count=A[k].indicesCount,Q.shaderProgram=N?this._sp:this._spTranslucent,Q.uniformMap=L,Q.vertexArray=A[k].va,Q.renderState=N?this._rsOpaque:this._rsTranslucent,Q.debugShowBoundingVolume=this.debugShowBoundingVolume,Q.pickId=V,this._instanced&&(Q.count=6,Q.instanceCount=i),B.push(Q)}this.debugShowTextureAtlas&&(l(this.debugCommand)||(this.debugCommand=FJe(this,e.context)),B.push(this.debugCommand))}this._allBillboardsReady=o};lm.prototype.isDestroyed=function(){return!1};lm.prototype.destroy=function(){return l(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this._textureAtlas=this._destroyTextureAtlas&&this._textureAtlas&&this._textureAtlas.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spTranslucent=this._spTranslucent&&this._spTranslucent.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),oue(this._billboards),me(this)};var qd=lm;var SUn=y(C(),1);var yUn=y(C(),1);function MJe(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 fx=MJe;function Da(e,t,n,i,o){this._content=e,this._billboard=n,this._label=i,this._polyline=o,this._batchId=t,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),hT(this)}var vJe=new ge;Object.defineProperties(Da.prototype,{show:{get:function(){return this._label.show},set:function(e){this._label.show=e,this._billboard.show=e,this._polyline.show=e}},color:{get:function(){return this._color},set:function(e){this._color=U.clone(e,this._color),hT(this)}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=e,hT(this)}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=U.clone(e,this._pointOutlineColor),hT(this)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=e,hT(this)}},labelColor:{get:function(){return this._label.fillColor},set:function(e){this._label.fillColor=e,this._polyline.show=this._label.show&&e.alpha>0}},labelOutlineColor:{get:function(){return this._label.outlineColor},set:function(e){this._label.outlineColor=e}},labelOutlineWidth:{get:function(){return this._label.outlineWidth},set:function(e){this._label.outlineWidth=e}},font:{get:function(){return this._label.font},set:function(e){this._label.font=e}},labelStyle:{get:function(){return this._label.style},set:function(e){this._label.style=e}},labelText:{get:function(){return this._label.text},set:function(e){l(e)||(e=""),this._label.text=e}},backgroundColor:{get:function(){return this._label.backgroundColor},set:function(e){this._label.backgroundColor=e}},backgroundPadding:{get:function(){return this._label.backgroundPadding},set:function(e){this._label.backgroundPadding=e}},backgroundEnabled:{get:function(){return this._label.showBackground},set:function(e){this._label.showBackground=e}},scaleByDistance:{get:function(){return this._label.scaleByDistance},set:function(e){this._label.scaleByDistance=e,this._billboard.scaleByDistance=e}},translucencyByDistance:{get:function(){return this._label.translucencyByDistance},set:function(e){this._label.translucencyByDistance=e,this._billboard.translucencyByDistance=e}},distanceDisplayCondition:{get:function(){return this._label.distanceDisplayCondition},set:function(e){this._label.distanceDisplayCondition=e,this._polyline.distanceDisplayCondition=e,this._billboard.distanceDisplayCondition=e}},heightOffset:{get:function(){return this._heightOffset},set:function(e){let t=this._heightOffset??0,n=this._content.tileset.ellipsoid,i=n.cartesianToCartographic(this._billboard.position,vJe);i.height=i.height-t+e;let o=n.cartographicToCartesian(i);this._billboard.position=o,this._label.position=this._billboard.position,this._polyline.positions=[this._polyline.positions[0],o],this._heightOffset=e}},anchorLineEnabled:{get:function(){return this._polyline.show},set:function(e){this._polyline.show=e}},anchorLineColor:{get:function(){return this._polyline.material.uniforms.color},set:function(e){this._polyline.material.uniforms.color=U.clone(e,this._polyline.material.uniforms.color)}},image:{get:function(){return this._billboardImage},set:function(e){let t=this._billboardImage!==e;this._billboardImage=e,t&&hT(this)}},disableDepthTestDistance:{get:function(){return this._label.disableDepthTestDistance},set:function(e){this._label.disableDepthTestDistance=e,this._billboard.disableDepthTestDistance=e}},horizontalOrigin:{get:function(){return this._billboard.horizontalOrigin},set:function(e){this._billboard.horizontalOrigin=e}},verticalOrigin:{get:function(){return this._billboard.verticalOrigin},set:function(e){this._billboard.verticalOrigin=e}},labelHorizontalOrigin:{get:function(){return this._label.horizontalOrigin},set:function(e){this._label.horizontalOrigin=e}},labelVerticalOrigin:{get:function(){return this._label.verticalOrigin},set:function(e){this._label.verticalOrigin=e}},content:{get:function(){return this._content}},tileset:{get:function(){return this._content.tileset}},primitive:{get:function(){return this._content.tileset}},pickIds:{get:function(){let e=this._pickIds;return e[0]=this._billboard.pickId,e[1]=this._label.pickId,e[2]=this._polyline.pickId,e}}});Da.defaultColor=U.WHITE;Da.defaultPointOutlineColor=U.BLACK;Da.defaultPointOutlineWidth=0;Da.defaultPointSize=8;function hT(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??Da.defaultColor,i=e._pointOutlineColor??Da.defaultPointOutlineColor,o=e._pointOutlineWidth??Da.defaultPointOutlineWidth,r=e._pointSize??Da.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,h=n.toCssColorString(),p=i.toCssColorString(),g=JSON.stringify([h,r,p,o]);t.setImage(g,fx(u,h,p,o,r))}Da.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)};Da.prototype.getPropertyIds=function(e){return this._content.batchTable.getPropertyIds(this._batchId,e)};Da.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)};Da.prototype.getPropertyInherited=function(e){return ma.getPropertyInherited(this._content,this._batchId,e)};Da.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0};Da.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)};Da.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)};Da.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var jA=Da;var ykn=y(C(),1);var ZUn=y(C(),1);function NJe(e,t,n,i,o){let r=e.measureText(t);if(!!/\S/.test(t)){let a=document.defaultView.getComputedStyle(e.canvas).getPropertyValue("font-size").replace("px",""),c=document.createElement("canvas"),d=100,u=r.width+d|0,h=3*a,p=h/2;c.width=u,c.height=h;let g=c.getContext("2d");g.font=n,g.fillStyle="white",g.fillRect(0,0,c.width+1,c.height+1),i&&(g.strokeStyle="black",g.lineWidth=e.lineWidth,g.strokeText(t,d/2,p)),o&&(g.fillStyle="black",g.fillText(t,d/2,p));let f=g.getImageData(0,0,u,h).data,b=f.length,x=u*4,I,_,E,S;for(I=0;I<b;++I)if(f[I]!==255){E=I/x|0;break}for(I=b-1;I>=0;--I)if(f[I]!==255){S=I/x|0;break}let R=-1;for(I=0;I<u&&R===-1;++I)for(_=0;_<h;++_){let G=I*4+_*x;if(f[G]!==255||f[G+1]!==255||f[G+2]!==255||f[G+3]!==255){R=I;break}}return{width:r.width,height:S-E,ascent:p-E,descent:S-p,minx:R-d/2}}return{width:r.width,height:0,ascent:0,descent:0,minx:0}}var px;function DJe(e,t){if(e==="")return;t=t??Y.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(px)||(l(u.imageSmoothingEnabled)?px="imageSmoothingEnabled":l(u.mozImageSmoothingEnabled)?px="mozImageSmoothingEnabled":l(u.webkitImageSmoothingEnabled)?px="webkitImageSmoothingEnabled":l(u.msImageSmoothingEnabled)&&(px="msImageSmoothingEnabled")),u.font=n,u.lineJoin="round",u.lineWidth=r,u[px]=!1,d.style.visibility="hidden",document.body.appendChild(d);let h=NJe(u,e,n,i,o);d.dimensions=h,document.body.removeChild(d),d.style.visibility="";let p=-h.minx,g=Math.ceil(h.width)+p+c,f=h.height+c,b=f-h.ascent+a,x=f-b+c;if(d.width=g,d.height=f,u.font=n,u.lineJoin="round",u.lineWidth=r,u[px]=!1,s!==U.TRANSPARENT&&(u.fillStyle=s.toCssColorString(),u.fillRect(0,0,d.width,d.height)),i){let I=t.strokeColor??U.BLACK;u.strokeStyle=I.toCssColorString(),u.strokeText(e,p+a,x)}if(o){let I=t.fillColor??U.WHITE;u.fillStyle=I.toCssColorString(),u.fillText(e,p+a,x)}return d}var Ax=DJe;var Gue=y(Iue(),1);var jUn=y(C(),1);var WUn=y(C(),1),UJe={FILL:0,OUTLINE:1,FILL_AND_OUTLINE:2},nr=Object.freeze(UJe);var _ue={},Eue=0,kJe=256,YJe=new U(.165,.165,.165,.8),OJe=new D(7,5),Fs=Object.freeze({LTR:0,RTL:1,WEAK:2,BRACKETS:3});function gx(e){!e._rebindAllGlyphs&&!e._repositionAllGlyphs&&e._labelCollection._labelsToUpdate.push(e),e._rebindAllGlyphs=!0}function n2(e){!e._rebindAllGlyphs&&!e._repositionAllGlyphs&&e._labelCollection._labelsToUpdate.push(e),e._repositionAllGlyphs=!0}function i2(e,t){return document.defaultView.getComputedStyle(e,null).getPropertyValue(t)}function Sue(e){let t=_ue[e._font];if(!l(t)){let n=document.createElement("div");n.style.position="absolute",n.style.opacity=0,n.style.font=e._font,document.body.appendChild(n);let i=parseFloat(i2(n,"line-height"));isNaN(i)&&(i=void 0),t={family:i2(n,"font-family"),size:i2(n,"font-size").replace("px",""),style:i2(n,"font-style"),weight:i2(n,"font-weight"),lineHeight:i},document.body.removeChild(n),Eue<kJe&&(_ue[e._font]=t,Eue++)}e._fontFamily=t.family,e._fontSize=t.size,e._fontStyle=t.style,e._fontWeight=t.weight,e._lineHeight=t.lineHeight}function wh(e,t){e=e??Y.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;l(n)&&(n=zt.clone(n)),l(i)&&(i=zt.clone(i)),l(o)&&(o=zt.clone(o)),l(r)&&(r=Qt.clone(r)),this._renderedText=void 0,this._text=void 0,this._show=e.show??!0,this._font=e.font??"30px sans-serif",this._fillColor=U.clone(e.fillColor??U.WHITE),this._outlineColor=U.clone(e.outlineColor??U.BLACK),this._outlineWidth=e.outlineWidth??1,this._showBackground=e.showBackground??!1,this._backgroundColor=U.clone(e.backgroundColor??YJe),this._backgroundPadding=D.clone(e.backgroundPadding??OJe),this._style=e.style??nr.FILL,this._verticalOrigin=e.verticalOrigin??kn.BASELINE,this._horizontalOrigin=e.horizontalOrigin??wi.LEFT,this._pixelOffset=D.clone(e.pixelOffset??D.ZERO),this._eyeOffset=m.clone(e.eyeOffset??m.ZERO),this._position=m.clone(e.position??m.ZERO),this._scale=e.scale??1,this._id=e.id,this._translucencyByDistance=n,this._pixelOffsetScaleByDistance=i,this._scaleByDistance=o,this._heightReference=e.heightReference??et.NONE,this._distanceDisplayCondition=r,this._disableDepthTestDistance=e.disableDepthTestDistance,this._labelCollection=t,this._glyphs=[],this._backgroundBillboard=void 0,this._batchIndex=void 0,this._rebindAllGlyphs=!0,this._repositionAllGlyphs=!0,this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=void 0,this._clusterShow=!0,this.text=e.text??"",this._relativeSize=1,Sue(this),this._updateClamping()}Object.defineProperties(wh.prototype,{show:{get:function(){return this._show},set:function(e){if(this._show!==e){this._show=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i].billboard;l(r)&&(r.show=e)}let n=this._backgroundBillboard;l(n)&&(n.show=e)}}},position:{get:function(){return this._position},set:function(e){let t=this._position;if(!m.equals(t,e)){m.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o].billboard;l(s)&&(s.position=e)}let i=this._backgroundBillboard;l(i)&&(i.position=e),this._updateClamping()}}},heightReference:{get:function(){return this._heightReference},set:function(e){if(e!==this._heightReference){this._heightReference=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i].billboard;l(r)&&(r.heightReference=e)}let n=this._backgroundBillboard;l(n)&&(n.heightReference=e),n2(this),this._updateClamping()}}},text:{get:function(){return this._text},set:function(e){if(this._text!==e){this._text=e;let t=wh.filterUnsupportedCharacters(e);this._renderedText=wh.enableRightToLeftDetection?qJe(t):t,gx(this)}}},font:{get:function(){return this._font},set:function(e){this._font!==e&&(this._font=e,gx(this),Sue(this))}},fillColor:{get:function(){return this._fillColor},set:function(e){let t=this._fillColor;U.equals(t,e)||(U.clone(e,t),gx(this))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;U.equals(t,e)||(U.clone(e,t),gx(this))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,gx(this))}},showBackground:{get:function(){return this._showBackground},set:function(e){this._showBackground!==e&&(this._showBackground=e,gx(this))}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){let t=this._backgroundColor;if(!U.equals(t,e)){U.clone(e,t);let n=this._backgroundBillboard;l(n)&&(n.color=t)}}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){let t=this._backgroundPadding;D.equals(t,e)||(D.clone(e,t),n2(this))}},style:{get:function(){return this._style},set:function(e){this._style!==e&&(this._style=e,gx(this))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){let t=this._pixelOffset;if(!D.equals(t,e)){D.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.pixelOffset=e)}let i=this._backgroundBillboard;l(i)&&(i.pixelOffset=e)}}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;if(!zt.equals(t,e)){this._translucencyByDistance=zt.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.translucencyByDistance=e)}let i=this._backgroundBillboard;l(i)&&(i.translucencyByDistance=e)}}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){let t=this._pixelOffsetScaleByDistance;if(!zt.equals(t,e)){this._pixelOffsetScaleByDistance=zt.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.pixelOffsetScaleByDistance=e)}let i=this._backgroundBillboard;l(i)&&(i.pixelOffsetScaleByDistance=e)}}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;if(!zt.equals(t,e)){this._scaleByDistance=zt.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.scaleByDistance=e)}let i=this._backgroundBillboard;l(i)&&(i.scaleByDistance=e)}}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){let t=this._eyeOffset;if(!m.equals(t,e)){m.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.eyeOffset=e)}let i=this._backgroundBillboard;l(i)&&(i.eyeOffset=e)}}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin!==e&&(this._horizontalOrigin=e,n2(this))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){if(this._verticalOrigin!==e){this._verticalOrigin=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.verticalOrigin=e)}let n=this._backgroundBillboard;l(n)&&(n.verticalOrigin=e),n2(this)}}},scale:{get:function(){return this._scale},set:function(e){if(this._scale!==e){this._scale=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.scale=e*this._relativeSize)}let n=this._backgroundBillboard;l(n)&&(n.scale=e*this._relativeSize),n2(this)}}},totalScale:{get:function(){return this._scale*this._relativeSize}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(!Qt.equals(e,this._distanceDisplayCondition)){this._distanceDisplayCondition=Qt.clone(e,this._distanceDisplayCondition);let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.distanceDisplayCondition=e)}let n=this._backgroundBillboard;l(n)&&(n.distanceDisplayCondition=e)}}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){if(this._disableDepthTestDistance!==e){this._disableDepthTestDistance=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.disableDepthTestDistance=e)}let n=this._backgroundBillboard;l(n)&&(n.disableDepthTestDistance=e)}}},id:{get:function(){return this._id},set:function(e){if(this._id!==e){this._id=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.id=e)}let n=this._backgroundBillboard;l(n)&&(n.id=e)}}},pickId:{get:function(){if(!(this._glyphs.length===0||!l(this._glyphs[0].billboard)))return this._glyphs[0].billboard.pickId}},_clampedPosition:{get:function(){return this._actualClampedPosition},set:function(e){this._actualClampedPosition=m.clone(e,this._actualClampedPosition);let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard._clampedPosition=e)}let n=this._backgroundBillboard;l(n)&&(n._clampedPosition=e)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){if(this._clusterShow!==e){this._clusterShow=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.clusterShow=e)}let n=this._backgroundBillboard;l(n)&&(n.clusterShow=e)}}}});wh.prototype._updateClamping=function(){Eo._updateClamping(this._labelCollection,this)};wh.prototype.computeScreenSpacePosition=function(e,t){l(t)||(t=new D);let i=this._labelCollection.modelMatrix,o=l(this._actualClampedPosition)?this._actualClampedPosition:this._position;return Eo._computeScreenSpacePosition(i,o,this._eyeOffset,this._pixelOffset,e,t)};wh.getScreenSpaceBoundingBox=function(e,t,n){let i=0,o=0,r=0,s=0,a=e.totalScale,c=e._backgroundBillboard;if(l(c))i=t.x+c._translate.x,o=t.y-c._translate.y,r=c.width*a,s=c.height*a,e.verticalOrigin===kn.BOTTOM||e.verticalOrigin===kn.BASELINE?o-=s:e.verticalOrigin===kn.CENTER&&(o-=s*.5);else{i=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY;let d=0,u=0,h=e._glyphs,p=h.length;for(let g=0;g<p;++g){let f=h[g],b=f.billboard;if(!l(b))continue;let x=t.x+b._translate.x,I=t.y-b._translate.y,_=f.dimensions.width*a,E=f.dimensions.height*a;e.verticalOrigin===kn.BOTTOM||e.verticalOrigin===kn.BASELINE?I-=E:e.verticalOrigin===kn.CENTER&&(I-=E*.5),e._verticalOrigin===kn.TOP?I+=ga.PADDING*a:(e._verticalOrigin===kn.BOTTOM||e._verticalOrigin===kn.BASELINE)&&(I-=ga.PADDING*a),i=Math.min(i,x),o=Math.min(o,I),d=Math.max(d,x+_),u=Math.max(u,I+E)}r=d-i,s=u-o}return l(n)||(n=new Ke),n.x=i,n.y=o,n.width=r,n.height=s,n};wh.filterUnsupportedCharacters=function(e){let t=new RegExp(/[\u0000-\u0008\u000E-\u001F\u00ad\u202a-\u206f\u200b-\u200f]/,"g");return e.replace(t,"")};wh.prototype.equals=function(e){return this===e||l(e)&&this._show===e._show&&this._scale===e._scale&&this._outlineWidth===e._outlineWidth&&this._showBackground===e._showBackground&&this._style===e._style&&this._verticalOrigin===e._verticalOrigin&&this._horizontalOrigin===e._horizontalOrigin&&this._heightReference===e._heightReference&&this._renderedText===e._renderedText&&this._font===e._font&&m.equals(this._position,e._position)&&U.equals(this._fillColor,e._fillColor)&&U.equals(this._outlineColor,e._outlineColor)&&U.equals(this._backgroundColor,e._backgroundColor)&&D.equals(this._backgroundPadding,e._backgroundPadding)&&D.equals(this._pixelOffset,e._pixelOffset)&&m.equals(this._eyeOffset,e._eyeOffset)&&zt.equals(this._translucencyByDistance,e._translucencyByDistance)&&zt.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&zt.equals(this._scaleByDistance,e._scaleByDistance)&&Qt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._id===e._id};wh.prototype.isDestroyed=function(){return!1};wh.enableRightToLeftDetection=!1;function HJe(e,t){let n=/[a-zA-Z0-9]/,i=/[()[\]{}<>]/,o=[],r="",s=Fs.LTR,a="",c=e.length;for(let d=0;d<c;++d){let u=e.charAt(d);t.test(u)?a=Fs.RTL:n.test(u)?a=Fs.LTR:i.test(u)?a=Fs.BRACKETS:a=Fs.WEAK,d===0&&(s=a),s===a&&a!==Fs.BRACKETS?r+=u:(r!==""&&o.push({Type:s,Word:r}),s=a,r=u)}return o.push({Type:a,Word:r}),o}function zJe(e){return e.split("").reverse().join("")}function o2(e,t,n){return e.slice(0,t)+n+e.slice(t)}function KJe(e){switch(e){case"(":return")";case")":return"(";case"[":return"]";case"]":return"[";case"{":return"}";case"}":return"{";case"<":return">";case">":return"<"}}var JJe="\u05D0-\u05EA",jJe="\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF",Tue=new RegExp(`[${JJe}${jJe}]`);function qJe(e){let t=e.split(` `),n="";for(let i=0;i<t.length;i++){let o=t[i],r=Tue.test(o.charAt(0)),s=HJe(o,Tue),a=0,c="";for(let d=0;d<s.length;++d){let u=s[d],h=u.Type===Fs.BRACKETS?KJe(u.Word):zJe(u.Word);r?u.Type===Fs.RTL?(c=h+c,a=0):u.Type===Fs.LTR?(c=o2(c,a,u.Word),a+=u.Word.length):(u.Type===Fs.WEAK||u.Type===Fs.BRACKETS)&&(u.Type===Fs.WEAK&&s[d-1].Type===Fs.BRACKETS?c=h+c:s[d-1].Type===Fs.RTL?(c=h+c,a=0):s.length>d+1?s[d+1].Type===Fs.RTL?(c=h+c,a=0):(c=o2(c,a,u.Word),a+=u.Word.length):c=o2(c,0,h)):u.Type===Fs.RTL?c=o2(c,a,h):u.Type===Fs.LTR?(c+=u.Word,a=c.length):(u.Type===Fs.WEAK||u.Type===Fs.BRACKETS)&&(d>0&&s[d-1].Type===Fs.RTL?s.length>d+1?s[d+1].Type===Fs.RTL?c=o2(c,a,h):(c+=u.Word,a=c.length):c+=u.Word:(c+=u.Word,a=c.length))}n+=c,i<t.length-1&&(n+=` `)}return n}var p0=wh;var Zue=y(Lue(),1);function e4e(){this.dimensions=void 0,this.billboardTexture=void 0,this.billboard=void 0}var t4e=1.2,Rue="ID_WHITE_PIXEL",zK=new D(4,4),n4e=new Ke(1,1,1,1);function i4e(e,t){let n=t._backgroundBillboardTexture;if(!n.hasImage){let o=document.createElement("canvas");o.width=zK.x,o.height=zK.y;let r=o.getContext("2d");r.fillStyle="#fff",r.fillRect(0,0,o.width,o.height),n.loadImage(Rue,o),n.addImageSubRegion(Rue,n4e)}let i=e.add({collection:t});return i.setImageTexture(n),i}var qA={};function o4e(e,t,n,i,o,r){return qA.font=t,qA.fillColor=n,qA.strokeColor=i,qA.strokeWidth=o,qA.padding=ga.PADDING,qA.fill=r===nr.FILL||r===nr.FILL_AND_OUTLINE,qA.stroke=r===nr.OUTLINE||r===nr.FILL_AND_OUTLINE,qA.backgroundColor=U.BLACK,Ax(e,qA)}function KK(e,t){let n=t.billboard;l(n)&&(n.show=!1,l(n._removeCallbackFunc)&&(n._removeCallbackFunc(),n._removeCallbackFunc=void 0),e._spareBillboards.push(n),t.billboard=void 0)}var r4e=new Zue.default,s4e=/\s/;function a4e(e,t){let n=t._renderedText,i=r4e.splitGraphemes(n),o=i.length,r=t._glyphs,s=r.length;if(t._relativeSize=t._fontSize/ga.FONT_SIZE,o<s)for(let g=o;g<s;++g)KK(e,r[g]);r.length=o;let a=t.show&&t._showBackground&&n.split(` `).join("").length>0,c=t._backgroundBillboard,d=e._backgroundBillboardCollection;a?(l(c)||(c=i4e(d,e),t._backgroundBillboard=c),c.color=t._backgroundColor,c.show=t._show,c.position=t._position,c.eyeOffset=t._eyeOffset,c.pixelOffset=t._pixelOffset,c.horizontalOrigin=wi.LEFT,c.verticalOrigin=t._verticalOrigin,c.heightReference=t._heightReference,c.scale=t.totalScale,c.pickPrimitive=t,c.id=t._id,c.translucencyByDistance=t._translucencyByDistance,c.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,c.scaleByDistance=t._scaleByDistance,c.distanceDisplayCondition=t._distanceDisplayCondition,c.disableDepthTestDistance=t._disableDepthTestDistance,c.clusterShow=t.clusterShow):l(c)&&(d.remove(c),t._backgroundBillboard=c=void 0);let u=e._glyphBillboardCollection,h=u.billboardTextureCache,p=e._textDimensionsCache;for(let g=0;g<o;++g){let f=i[g],b=t._verticalOrigin,x=JSON.stringify([f,t._fontFamily,t._fontStyle,t._fontWeight,+b]),I=p[x],_=h.get(x);if(!l(_)||!l(I)){_=new JA(u),h.set(x,_);let G=`${t._fontStyle} ${t._fontWeight} ${ga.FONT_SIZE}px ${t._fontFamily}`,B=o4e(f,G,U.WHITE,U.WHITE,0,nr.FILL);if(I=B.dimensions,p[x]=I,B.width>0&&B.height>0&&!s4e.test(f)){let w=(0,Gue.default)(B,{cutoff:ga.CUTOFF,radius:ga.RADIUS}),F=B.getContext("2d"),P=B.width,A=B.height,T=F.getImageData(0,0,P,A);for(let L=0;L<P;L++)for(let V=0;V<A;V++){let W=V*P+L,M=w[W]*255,Q=W*4;T.data[Q+0]=M,T.data[Q+1]=M,T.data[Q+2]=M,T.data[Q+3]=M}F.putImageData(T,0,0),_.loadImage(x,B)}}let E=r[g];if(l(E)||(E=new e4e,E.dimensions=I,E.billboardTexture=_,r[g]=E),E.billboardTexture.id!==x&&(E.billboardTexture=_,E.dimensions=I),!_.hasImage){KK(e,E);continue}let S=E.billboard,R=e._spareBillboards;l(S)||(R.length>0?S=R.pop():(S=u.add({collection:e}),S._labelDimensions=new D,S._labelTranslate=new D),E.billboard=S),S.setImageTexture(_),S.show=t._show,S.position=t._position,S.eyeOffset=t._eyeOffset,S.pixelOffset=t._pixelOffset,S.horizontalOrigin=wi.LEFT,S.verticalOrigin=t._verticalOrigin,S.heightReference=t._heightReference,S.scale=t.totalScale,S.pickPrimitive=t,S.id=t._id,S.translucencyByDistance=t._translucencyByDistance,S.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,S.scaleByDistance=t._scaleByDistance,S.distanceDisplayCondition=t._distanceDisplayCondition,S.disableDepthTestDistance=t._disableDepthTestDistance,S._batchIndex=t._batchIndex,S.outlineColor=t.outlineColor,t.style===nr.FILL_AND_OUTLINE?(S.color=t._fillColor,S.outlineWidth=t.outlineWidth):t.style===nr.FILL?(S.color=t._fillColor,S.outlineWidth=0):t.style===nr.OUTLINE&&(S.color=U.TRANSPARENT,S.outlineWidth=t.outlineWidth)}t._repositionAllGlyphs=!0}function Vue(e,t,n){return t===wi.CENTER?-e/2:t===wi.RIGHT?-(e+n.x):n.x}var Sr=new D,c4e=new D;function l4e(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,h=D.clone(l(u)?e._backgroundPadding:D.ZERO,c4e);h.x/=e._relativeSize,h.y/=e._relativeSize;for(let F=0;F<d;++F){if(n.charAt(F)===` `){r.push(i),++c,i=0;continue}let A=t[F].dimensions;l(A)&&(a=Math.max(a,A.height-A.descent),s=Math.max(s,A.descent),i+=A.width-A.minx,F<d-1&&(i+=t[F+1].dimensions.minx),o=Math.max(o,i))}r.push(i);let p=a+s,g=e.totalScale,f=e._horizontalOrigin,b=e._verticalOrigin,x=0,I=r[x],_=Vue(I,f,h),E=(l(e._lineHeight)?e._lineHeight:t4e*e._fontSize)/e._relativeSize,S=E*(c-1),R=o,G=p+S;l(u)&&(R+=h.x*2,G+=h.y*2,u._labelHorizontalOrigin=f),Sr.x=_*g,Sr.y=0;let B=!0,w=0;for(let F=0;F<d;++F){if(n.charAt(F)===` `){++x,w+=E,I=r[x],_=Vue(I,f,h),Sr.x=_*g,B=!0;continue}let P=t[F],A=P.dimensions;if(l(A)&&(b===kn.TOP?(Sr.y=A.height-a-h.y,Sr.y+=ga.PADDING):b===kn.CENTER?Sr.y=(S+A.height-a)/2:b===kn.BASELINE?(Sr.y=S,Sr.y-=ga.PADDING):(Sr.y=S+s+h.y,Sr.y-=ga.PADDING),Sr.y=(Sr.y-A.descent-w)*g,B&&(Sr.x-=ga.PADDING*g,B=!1),l(P.billboard)&&(P.billboard._setTranslate(Sr),P.billboard._labelDimensions.x=R,P.billboard._labelDimensions.y=G,P.billboard._labelHorizontalOrigin=f),F<d-1)){let T=t[F+1];Sr.x+=(A.width-A.minx+T.dimensions.minx)*g}}if(l(u)&&n.split(` `).join("").length>0&&(f===wi.CENTER?_=-o/2-h.x:f===wi.RIGHT?_=-(o+h.x*2):_=0,Sr.x=_*g,b===kn.TOP?Sr.y=p-a-s:b===kn.CENTER?Sr.y=(p-a)/2-s:b===kn.BASELINE?Sr.y=-h.y-s:Sr.y=0,Sr.y=Sr.y*g,u.width=R,u.height=G,u._setTranslate(Sr),u._labelTranslate=D.clone(Sr,u._labelTranslate)),Du(e.heightReference))for(let F=0;F<d;++F){let A=t[F].billboard;l(A)&&(A._labelTranslate=D.clone(Sr,A._labelTranslate))}}function Bue(e,t){let n=t._glyphs;for(let i=0,o=n.length;i<o;++i)KK(e,n[i]);l(t._backgroundBillboard)&&(e._backgroundBillboardCollection.remove(t._backgroundBillboard),t._backgroundBillboard=void 0),t._labelCollection=void 0,l(t._removeCallbackFunc)&&t._removeCallbackFunc(),me(t)}function $f(e){e=e??Y.EMPTY_OBJECT,this._scene=e.scene,this._batchTable=e.batchTable;let t=new qd({scene:this._scene,textureAtlas:new mx({initialSize:zK})});this._backgroundBillboardCollection=t,this._backgroundBillboardTexture=new JA(t),this._glyphBillboardCollection=new qd({scene:this._scene,batchTable:this._batchTable}),this._glyphBillboardCollection._sdf=!0,this._spareBillboards=[],this._textDimensionsCache={},this._labels=[],this._labelsToUpdate=[],this._totalGlyphCount=0,this._highlightColor=U.clone(U.WHITE),this.show=e.show??!0,this.modelMatrix=X.clone(e.modelMatrix??X.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.blendOption=e.blendOption??No.OPAQUE_AND_TRANSLUCENT}Object.defineProperties($f.prototype,{length:{get:function(){return this._labels.length}},sizeInBytes:{get:function(){return this._glyphBillboardCollection.sizeInBytes+this._backgroundBillboardCollection.sizeInBytes}},ready:{get:function(){let e=this._backgroundBillboardCollection.get(0);return l(e)&&!e.ready?!1:this._glyphBillboardCollection.ready}}});$f.prototype.add=function(e){let t=new p0(e,this);return this._labels.push(t),this._labelsToUpdate.push(t),t};$f.prototype.remove=function(e){if(l(e)&&e._labelCollection===this){let t=this._labels.indexOf(e);if(t!==-1)return this._labels.splice(t,1),Bue(this,e),!0}return!1};$f.prototype.removeAll=function(){let e=this._labels;for(let t=0,n=e.length;t<n;++t)Bue(this,e[t]);e.length=0};$f.prototype.contains=function(e){return l(e)&&e._labelCollection===this};$f.prototype.get=function(e){return this._labels[e]};$f.prototype.update=function(e){if(!this.show)return;let t=this._glyphBillboardCollection,n=this._backgroundBillboardCollection;t.modelMatrix=this.modelMatrix,t.debugShowBoundingVolume=this.debugShowBoundingVolume,n.modelMatrix=this.modelMatrix,n.debugShowBoundingVolume=this.debugShowBoundingVolume;let i=this._labelsToUpdate.length;for(let r=0;r<i;++r){let s=this._labelsToUpdate[r];if(s.isDestroyed())continue;let a=s._glyphs.length;s._rebindAllGlyphs&&(a4e(this,s),s._rebindAllGlyphs=!1),s._repositionAllGlyphs&&(l4e(s),s._repositionAllGlyphs=!1);let c=s._glyphs.length-a;this._totalGlyphCount+=c}let o=n.length>0?No.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)};$f.prototype.isDestroyed=function(){return!1};$f.prototype.destroy=function(){return this.removeAll(),this._glyphBillboardCollection=this._glyphBillboardCollection.destroy(),this._backgroundBillboardCollection=this._backgroundBillboardCollection.destroy(),me(this)};var ep=$f;var GYn=y(C(),1);var xkn=y(C(),1),r2=`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 Ykn=y(C(),1);var wkn=y(C(),1);var Gl={};Gl.numberOfPoints=function(e,t,n){let i=m.distance(e,t);return Math.ceil(i/n)};Gl.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 d4e=new ge;Gl.extractHeights=function(e,t){let n=e.length,i=new Array(n);for(let o=0;o<n;o++){let r=e[o];i[o]=t.cartesianToCartographic(r,d4e).height}return i};var u4e=new X,m4e=new m,wue=new m,h4e=new An(m.UNIT_X,0),Xue=new m,f4e=new An(m.UNIT_X,0),p4e=new m,A4e=new m,jK=[];function Fue(e,t,n){let i=jK;i.length=e;let o;if(t===n){for(o=0;o<e;o++)i[o]=t;return i}let s=(n-t)/e;for(o=0;o<e;o++){let a=t+o*s;i[o]=a}return i}var OQ=new ge,YQ=new ge,A0=new m,qK=new m,g4e=new m,JK=new sA,s2=new cc;function b4e(e,t,n,i,o,r,s,a){let c=i.scaleToGeodeticSurface(e,qK),d=i.scaleToGeodeticSurface(t,g4e),u=Gl.numberOfPoints(e,t,n),h=i.cartesianToCartographic(c,OQ),p=i.cartesianToCartographic(d,YQ),g=Fue(u,o,r);JK.setEndPoints(h,p);let f=JK.surfaceDistance/u,b=a;h.height=o;let x=i.cartographicToCartesian(h,A0);m.pack(x,s,b),b+=3;for(let I=1;I<u;I++){let _=JK.interpolateUsingSurfaceDistance(I*f,YQ);_.height=g[I],x=i.cartographicToCartesian(_,A0),m.pack(x,s,b),b+=3}return b}function y4e(e,t,n,i,o,r,s,a){let c=i.cartesianToCartographic(e,OQ),d=i.cartesianToCartographic(t,YQ),u=Gl.numberOfPointsRhumbLine(c,d,n);c.height=0,d.height=0;let h=Fue(u,o,r);s2.ellipsoid.equals(i)||(s2=new cc(void 0,void 0,i)),s2.setEndPoints(c,d);let p=s2.surfaceDistance/u,g=a;c.height=o;let f=i.cartographicToCartesian(c,A0);m.pack(f,s,g),g+=3;for(let b=1;b<u;b++){let x=s2.interpolateUsingSurfaceDistance(b*p,YQ);x.height=h[b],f=i.cartographicToCartesian(x,A0),m.pack(f,s,g),g+=3}return g}Gl.wrapLongitude=function(e,t){let n=[],i=[];if(l(e)&&e.length>0){t=t??X.IDENTITY;let o=X.inverseTransformation(t,u4e),r=X.multiplyByPoint(o,m.ZERO,m4e),s=m.normalize(X.multiplyByPointAsVector(o,m.UNIT_Y,wue),wue),a=An.fromPointNormal(r,s,h4e),c=m.normalize(X.multiplyByPointAsVector(o,m.UNIT_X,Xue),Xue),d=An.fromPointNormal(r,c,f4e),u=1;n.push(m.clone(e[0]));let h=n[0],p=e.length;for(let g=1;g<p;++g){let f=e[g];if(An.getPointDistance(d,h)<0||An.getPointDistance(d,f)<0){let b=fi.lineSegmentPlane(h,f,a,p4e);if(l(b)){let x=m.multiplyByScalar(s,5e-9,A4e);An.getPointDistance(a,h)<0&&m.negate(x,x),n.push(m.add(b,x,new m)),i.push(u+1),m.negate(x,x),n.push(m.add(b,x,new m)),u=1}}n.push(m.clone(e[g])),u++,h=f}i.push(u)}return{positions:n,lengths:i}};Gl.generateArc=function(e){l(e)||(e={});let t=e.positions,n=t.length,i=e.ellipsoid??ie.default,o=e.height??0,r=Array.isArray(o);if(n<1)return[];if(n===1){let b=i.scaleToGeodeticSurface(t[0],qK);if(o=r?o[0]:o,o!==0){let x=i.geodeticSurfaceNormal(b,A0);m.multiplyByScalar(x,o,x),m.add(b,x,b)}return[b.x,b.y,b.z]}let s=e.minDistance;if(!l(s)){let b=e.granularity??Z.RADIANS_PER_DEGREE;s=Z.chordLength(b,i.maximumRadius)}let a=0,c;for(c=0;c<n-1;c++)a+=Gl.numberOfPoints(t[c],t[c+1],s);let d=(a+1)*3,u=new Array(d),h=0;for(c=0;c<n-1;c++){let b=t[c],x=t[c+1],I=r?o[c]:o,_=r?o[c+1]:o;h=b4e(b,x,s,i,I,_,u,h)}jK.length=0;let p=t[n-1],g=i.cartesianToCartographic(p,OQ);g.height=r?o[n-1]:o;let f=i.cartographicToCartesian(g,A0);return m.pack(f,u,d-3),u};var Wue=new ge,C4e=new ge;Gl.generateRhumbArc=function(e){l(e)||(e={});let t=e.positions,n=t.length,i=e.ellipsoid??ie.default,o=e.height??0,r=Array.isArray(o);if(n<1)return[];if(n===1){let I=i.scaleToGeodeticSurface(t[0],qK);if(o=r?o[0]:o,o!==0){let _=i.geodeticSurfaceNormal(I,A0);m.multiplyByScalar(_,o,_),m.add(I,_,I)}return[I.x,I.y,I.z]}let s=e.granularity??Z.RADIANS_PER_DEGREE,a=0,c,d=i.cartesianToCartographic(t[0],Wue),u;for(c=0;c<n-1;c++)u=i.cartesianToCartographic(t[c+1],C4e),a+=Gl.numberOfPointsRhumbLine(d,u,s),d=ge.clone(u,Wue);let h=(a+1)*3,p=new Array(h),g=0;for(c=0;c<n-1;c++){let I=t[c],_=t[c+1],E=r?o[c]:o,S=r?o[c+1]:o;g=y4e(I,_,s,i,E,S,p,g)}jK.length=0;let f=t[n-1],b=i.cartesianToCartographic(f,OQ);b.height=r?o[n-1]:o;let x=i.cartographicToCartesian(b,A0);return m.pack(x,p,h-3),p};Gl.generateCartesianArc=function(e){let t=Gl.generateArc(e),n=t.length/3,i=new Array(n);for(let o=0;o<n;o++)i[o]=m.unpack(t,o*3);return i};Gl.generateCartesianRhumbArc=function(e){let t=Gl.generateRhumbArc(e),n=t.length/3,i=new Array(n);for(let o=0;o<n;o++)i[o]=m.unpack(t,o*3);return i};var Oi=Gl;function $d(e,t){e=e??Y.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=so.fromType(so.ColorType,{color:new U(1,1,1,1)}));let n=e.positions;l(n)||(n=[]),this._positions=n,this._actualPositions=Xo(n,m.equalsEpsilon),this._loop&&this._actualPositions.length>2&&(this._actualPositions===this._positions&&(this._actualPositions=n.slice()),this._actualPositions.push(m.clone(this._actualPositions[0]))),this._length=this._actualPositions.length,this._id=e.id;let i;l(t)&&(i=X.clone(t.modelMatrix)),this._modelMatrix=i,this._segments=Oi.wrapLongitude(this._actualPositions,i),this._actualLength=void 0,this._propertiesChanged=new Uint32Array(Mue),this._polylineCollection=t,this._dirty=!1,this._pickId=void 0,this._boundingVolume=ue.fromPoints(this._actualPositions),this._boundingVolumeWC=ue.transform(this._boundingVolume,this._modelMatrix),this._boundingVolume2D=new ue}var Pue=$d.POSITION_INDEX=0,x4e=$d.SHOW_INDEX=1,I4e=$d.WIDTH_INDEX=2,_4e=$d.MATERIAL_INDEX=3,a2=$d.POSITION_SIZE_INDEX=4,E4e=$d.DISTANCE_DISPLAY_CONDITION=5,Mue=$d.NUMBER_OF_PROPERTIES=6;function $A(e,t){++e._propertiesChanged[t];let n=e._polylineCollection;l(n)&&(n._updatePolyline(e,t),e._dirty=!0)}Object.defineProperties($d.prototype,{show:{get:function(){return this._show},set:function(e){e!==this._show&&(this._show=e,$A(this,x4e))}},positions:{get:function(){return this._positions},set:function(e){let t=Xo(e,m.equalsEpsilon);this._loop&&t.length>2&&(t===e&&(t=e.slice()),t.push(m.clone(t[0]))),(this._actualPositions.length!==t.length||this._actualPositions.length!==this._length)&&$A(this,a2),this._positions=e,this._actualPositions=t,this._length=t.length,this._boundingVolume=ue.fromPoints(this._actualPositions,this._boundingVolume),this._boundingVolumeWC=ue.transform(this._boundingVolume,this._modelMatrix,this._boundingVolumeWC),$A(this,Pue),this.update()}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,$A(this,_4e))}},width:{get:function(){return this._width},set:function(e){let t=this._width;e!==t&&(this._width=e,$A(this,I4e))}},loop:{get:function(){return this._loop},set:function(e){if(e!==this._loop){let t=this._actualPositions;e?t.length>2&&!m.equals(t[0],t[t.length-1])&&(t.length===this._positions.length&&(this._actualPositions=t=this._positions.slice()),t.push(m.clone(t[0]))):t.length>2&&m.equals(t[0],t[t.length-1])&&(t.length-1===this._positions.length?this._actualPositions=this._positions:t.pop()),this._loop=e,$A(this,a2)}}},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){Qt.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=Qt.clone(e,this._distanceDisplayCondition),$A(this,E4e))}}});$d.prototype.update=function(){let e=X.IDENTITY;l(this._polylineCollection)&&(e=this._polylineCollection.modelMatrix);let t=this._segments.positions.length,n=this._segments.lengths,i=this._propertiesChanged[Pue]>0||this._propertiesChanged[a2]>0;if((!X.equals(e,this._modelMatrix)||i)&&(this._segments=Oi.wrapLongitude(this._actualPositions,e),this._boundingVolumeWC=ue.transform(this._boundingVolume,e,this._boundingVolumeWC)),this._modelMatrix=X.clone(e,this._modelMatrix),this._segments.positions.length!==t)$A(this,a2);else{let o=n.length;for(let r=0;r<o;++r)if(n[r]!==this._segments.lengths[r]){$A(this,a2);break}}};$d.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._polylineCollection,id:this._id})),this._pickId};$d.prototype._clean=function(){this._dirty=!1;let e=this._propertiesChanged;for(let t=0;t<Mue-1;++t)e[t]=0};$d.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._material=this._material&&this._material.destroy(),this._polylineCollection=void 0};var dm=$d;var T4e=dm.SHOW_INDEX,S4e=dm.WIDTH_INDEX,eJ=dm.POSITION_INDEX,L4e=dm.MATERIAL_INDEX,vue=dm.POSITION_SIZE_INDEX,R4e=dm.DISTANCE_DISPLAY_CONDITION,Oue=dm.NUMBER_OF_PROPERTIES,ud={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 Xh(e){e=e??Y.EMPTY_OBJECT,this.show=e.show??!0,this.modelMatrix=X.clone(e.modelMatrix??X.IDENTITY),this._modelMatrix=X.clone(X.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(Oue),this._polylines=[],this._polylineBuckets={},this._positionBufferUsage={bufferUsage:Ne.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(Xh.prototype,{length:{get:function(){return tJ(this),this._polylines.length}}});Xh.prototype.add=function(e){let t=new dm(e,this);return t._index=this._polylines.length,this._polylines.push(t),this._createVertexArray=!0,this._createBatchTable=!0,t};Xh.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};Xh.prototype.removeAll=function(){nJ(this),jue(this),this._polylineBuckets={},this._polylinesRemoved=!1,this._polylines.length=0,this._polylinesToUpdate.length=0,this._createVertexArray=!0};Xh.prototype.contains=function(e){return l(e)&&e._polylineCollection===this};Xh.prototype.get=function(e){return tJ(this),this._polylines[e]};function V4e(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 oC(t,n,e._polylines.length)}var Hue=new ni,zue=new ce,Kue=new D;Xh.prototype.update=function(e){if(tJ(this),this._polylines.length===0||!this.show)return;W4e(this,e);let t=e.context,n=e.mapProjection,i,o=this._propertiesChanged;if(this._createBatchTable){if(Kt.maximumVertexTextureImageUnits===0)throw new de("Vertex texture fetch support is required to render polylines. The maximum number of vertex texture image units must be greater than zero.");V4e(this,t),this._createBatchTable=!1}if(this._createVertexArray||Z4e(this))Que(this,t,n);else if(this._polylinesUpdated){let c=this._polylinesToUpdate;if(this._mode!==re.SCENE3D){let d=c.length;for(let u=0;u<d;++u)i=c[u],i.update()}if(o[vue]||o[L4e])Que(this,t,n);else{let d=c.length,u=this._polylineBuckets;for(let h=0;h<d;++h){i=c[h],o=i._propertiesChanged;let p=i._bucket,g=0;for(let f in u)if(u.hasOwnProperty(f)){if(u[f]===p){o[eJ]&&p.writeUpdate(g,i,this._positionBuffer,n);break}g+=u[f].lengthOfPositions}if((o[T4e]||o[S4e])&&this._batchTable.setBatchedAttribute(i._index,0,new D(i._width,i._show)),this._batchTable.attributes.length>2){if(o[eJ]||o[vue]){let f=e.mode===re.SCENE2D?i._boundingVolume2D:i._boundingVolumeWC,b=ni.fromCartesian(f.center,Hue),x=ce.fromElements(b.low.x,b.low.y,b.low.z,f.radius,zue);this._batchTable.setBatchedAttribute(i._index,2,b.high),this._batchTable.setBatchedAttribute(i._index,3,x)}if(o[R4e]){let f=Kue;f.x=0,f.y=Number.MAX_VALUE;let b=i.distanceDisplayCondition;l(b)&&(f.x=b.near,f.y=b.far),this._batchTable.setBatchedAttribute(i._index,4,f)}}i._clean()}}c.length=0,this._polylinesUpdated=!1}o=this._propertiesChanged;for(let c=0;c<Oue;++c)o[c]=0;let r=X.IDENTITY;e.mode===re.SCENE3D&&(r=this.modelMatrix);let s=e.passes,a=e.morphTime!==0;if((!l(this._opaqueRS)||this._opaqueRS.depthTest.enabled!==a)&&(this._opaqueRS=Qe.fromCache({depthMask:a,depthTest:{enabled:a}})),(!l(this._translucentRS)||this._translucentRS.depthTest.enabled!==a)&&(this._translucentRS=Qe.fromCache({blending:bn.ALPHA_BLEND,depthMask:!a,depthTest:{enabled:a}})),this._batchTable.update(e),s.render||s.pick){let c=this._colorCommands;G4e(this,e,c,r)}};var c2=new ue,Nue=new ue;function G4e(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(),g=d.length;for(let f=0;f<g;++f){let b=d[f],x=b.buckets,I=x.length;for(let _=0;_<I;++_){let E=x[_],S=E.offset,R=E.bucket.shaderProgram,G=E.bucket.polylines,B=G.length,w,F,P=0,A,T;for(let L=0;L<B;++L){let V=G[L],W=w4e(V._material);if(W!==w){if(l(w)&&P>0){let k=F.isTranslucent();a>=s?(A=new ot({owner:e}),n.push(A)):A=n[a],++a,T=Lt(p(F._uniforms),e._uniformMap),A.boundingVolume=ue.clone(c2,A.boundingVolume),A.modelMatrix=i,A.shaderProgram=R,A.vertexArray=b.va,A.renderState=k?e._translucentRS:e._opaqueRS,A.pass=k?Ge.TRANSLUCENT:Ge.OPAQUE,A.debugShowBoundingVolume=u,A.pickId="v_pickColor",A.uniformMap=T,A.count=P,A.offset=S,S+=P,P=0,c=!0,r.push(A)}F=V._material,F.update(o),w=W}let M=V._locatorBuckets,Q=M.length;for(let k=0;k<Q;++k){let v=M[k];v.locator===E&&(P+=v.count)}let N;t.mode===re.SCENE3D?N=V._boundingVolumeWC:t.mode===re.COLUMBUS_VIEW?N=V._boundingVolume2D:t.mode===re.SCENE2D?l(V._boundingVolume2D)&&(N=ue.clone(V._boundingVolume2D,Nue),N.center.x=0):l(V._boundingVolumeWC)&&l(V._boundingVolume2D)&&(N=ue.union(V._boundingVolumeWC,V._boundingVolume2D,Nue)),c?(c=!1,ue.clone(N,c2)):ue.union(N,c2,c2)}l(w)&&P>0&&(a>=s?(A=new ot({owner:e}),n.push(A)):A=n[a],++a,T=Lt(p(F._uniforms),e._uniformMap),A.boundingVolume=ue.clone(c2,A.boundingVolume),A.modelMatrix=i,A.shaderProgram=R,A.vertexArray=b.va,A.renderState=F.isTranslucent()?e._translucentRS:e._opaqueRS,A.pass=F.isTranslucent()?Ge.TRANSLUCENT:Ge.OPAQUE,A.debugShowBoundingVolume=u,A.pickId="v_pickColor",A.uniformMap=T,A.count=P,A.offset=S,c=!0,r.push(A)),w=void 0}}n.length=a}Xh.prototype.isDestroyed=function(){return!1};Xh.prototype.destroy=function(){return Jue(this),nJ(this),jue(this),this._batchTable=this._batchTable&&this._batchTable.destroy(),me(this)};function Z4e(e){let t=!1,n=e._propertiesChanged,i=e._positionBufferUsage;return n[eJ]?(i.bufferUsage!==Ne.STREAM_DRAW&&(t=!0,i.bufferUsage=Ne.STREAM_DRAW),i.frameCount=100):i.bufferUsage!==Ne.STATIC_DRAW&&(i.frameCount===0?(t=!0,i.bufferUsage=Ne.STATIC_DRAW):i.frameCount--),t}var Due=[0,0,0];function Que(e,t,n){e._createVertexArray=!1,nJ(e),Jue(e),X4e(e);let i=[[]],o=i[0],r=e._batchTable,s=e._useHighlightColor,a=[0],c=0,d=[[]],u=0,h=e._polylineBuckets,p,g;for(p in h)h.hasOwnProperty(p)&&(g=h[p],g.updateShader(t,r,s),u+=g.lengthOfPositions);if(u>0){let f=e._mode,b=new Float32Array(6*u*3),x=new Float32Array(u*4),I,_=0,E=0,S=0;for(p in h)if(h.hasOwnProperty(p)){g=h[p],g.write(b,x,_,E,S,r,t,n),f===re.MORPHING&&(l(I)||(I=new Float32Array(6*u*3)),g.writeForMorph(I,_));let T=g.lengthOfPositions;_+=6*T*3,E+=T*4,S+=T*4,c=g.updateIndices(i,a,d,c)}let R=e._positionBufferUsage.bufferUsage,G=Ne.STATIC_DRAW;e._positionBuffer=It.createVertexBuffer({context:t,typedArray:b,usage:R});let B;l(I)&&(B=It.createVertexBuffer({context:t,typedArray:I,usage:R})),e._texCoordExpandAndBatchIndexBuffer=It.createVertexBuffer({context:t,typedArray:x,usage:G});let w=3*Float32Array.BYTES_PER_ELEMENT,F=4*Float32Array.BYTES_PER_ELEMENT,P=0,A=i.length;for(let T=0;T<A;++T)if(o=i[T],o.length>0){let L=new Uint16Array(o),V=It.createIndexBuffer({context:t,typedArray:L,usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT});P+=a[T];let W=6*(T*(w*Z.SIXTY_FOUR_KILOBYTES)-P*w),M=w+W,Q=w+M,N=w+Q,k=w+N,v=w+k,O=T*(F*Z.SIXTY_FOUR_KILOBYTES)-P*F,H=[{index:ud.position3DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:W,strideInBytes:6*w},{index:ud.position3DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:M,strideInBytes:6*w},{index:ud.position2DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:W,strideInBytes:6*w},{index:ud.position2DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:M,strideInBytes:6*w},{index:ud.prevPosition3DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:Q,strideInBytes:6*w},{index:ud.prevPosition3DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:N,strideInBytes:6*w},{index:ud.prevPosition2DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:Q,strideInBytes:6*w},{index:ud.prevPosition2DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:N,strideInBytes:6*w},{index:ud.nextPosition3DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:k,strideInBytes:6*w},{index:ud.nextPosition3DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:v,strideInBytes:6*w},{index:ud.nextPosition2DHigh,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:k,strideInBytes:6*w},{index:ud.nextPosition2DLow,componentsPerAttribute:3,componentDatatype:J.FLOAT,offsetInBytes:v,strideInBytes:6*w},{index:ud.texCoordExpandAndBatchIndex,componentsPerAttribute:4,componentDatatype:J.FLOAT,vertexBuffer:e._texCoordExpandAndBatchIndexBuffer,offsetInBytes:O}],ee,K,te,q;f===re.SCENE3D?(K=e._positionBuffer,ee="vertexBuffer",te=Due,q="value"):f===re.SCENE2D||f===re.COLUMBUS_VIEW?(K=Due,ee="value",te=e._positionBuffer,q="vertexBuffer"):(K=B,ee="vertexBuffer",te=e._positionBuffer,q="vertexBuffer"),H[0][ee]=K,H[1][ee]=K,H[2][q]=te,H[3][q]=te,H[4][ee]=K,H[5][ee]=K,H[6][q]=te,H[7][q]=te,H[8][ee]=K,H[9][ee]=K,H[10][q]=te,H[11][q]=te;let pe=new ui({context:t,attributes:H,indexBuffer:V});e._vertexArrays.push({va:pe,buckets:d[T]})}}}function B4e(e,t){return t instanceof Wt?t.id:t}var HQ=[];function w4e(e){let t=so._uniformList[e.type],n=t.length;HQ.length=2*n;let i=0;for(let o=0;o<n;++o){let r=t[o];HQ[i]=r,HQ[i+1]=e._uniforms[r](),i+=2}return`${e.type}:${JSON.stringify(HQ,B4e)}`}function X4e(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 tp(c,t,n)),d.addPolyline(a)}}}function W4e(e,t){let n=t.mode;(e._mode!==n||!X.equals(e._modelMatrix,e.modelMatrix))&&(e._mode=n,e._modelMatrix=X.clone(e.modelMatrix),e._createVertexArray=!0)}function tJ(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 nJ(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 Jue(e){let t=e._vertexArrays.length;for(let n=0;n<t;++n)e._vertexArrays[n].va.destroy();e._vertexArrays.length=0}Xh.prototype._updatePolyline=function(e,t){this._polylinesUpdated=!0,e._dirty||this._polylinesToUpdate.push(e),++this._propertiesChanged[t]};function jue(e){let t=e._polylines,n=t.length;for(let i=0;i<n;++i)t[i].isDestroyed||t[i]._destroy()}function $K(e,t,n){this.count=e,this.offset=t,this.bucket=n}function tp(e,t,n){this.polylines=[],this.lengthOfPositions=0,this.material=e,this.shaderProgram=void 0,this.mode=t,this.modelMatrix=n}tp.prototype.addPolyline=function(e){this.polylines.push(e),e._actualLength=this.getPolylinePositionsLength(e),this.lengthOfPositions+=e._actualLength,e._bucket=this};tp.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"),Ht.isInternetExplorer()||i.push("CLIP_POLYLINE");let o=new Oe({defines:i,sources:[`in vec4 v_pickColor; `,this.material.shaderSource,dC]}),r=t.getVertexShaderCallback()(r2),s=new Oe({defines:i,sources:[Md,r]});this.shaderProgram=ln.fromCache({context:e,vertexShaderSource:s,fragmentShaderSource:o,attributeLocations:ud})};function que(e){return m.dot(m.UNIT_X,e._boundingVolume.center)<0||e._boundingVolume.intersectPlane(An.ORIGIN_ZX_PLANE)===on.INTERSECTING}tp.prototype.getPolylinePositionsLength=function(e){let t;if(this.mode===re.SCENE3D||!que(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 Ks=new m,um=new m,mm=new m,zQ=new m,F4e=new ce,P4e=new D;tp.prototype.write=function(e,t,n,i,o,r,s,a){let c=this.mode,d=a.ellipsoid.maximumRadius*Z.PI,u=this.polylines,h=u.length;for(let p=0;p<h;++p){let g=u[p],f=g.width,b=g.show&&f>0,x=g._index,I=this.getSegments(g,a),_=I.positions,E=I.lengths,S=_.length,R=g.getPickId(s).color,G=0,B=0,w;for(let Q=0;Q<S;++Q){Q===0?g._loop?w=_[S-2]:(w=zQ,m.subtract(_[0],_[1],w),m.add(_[0],w,w)):w=_[Q-1],m.clone(w,um),m.clone(_[Q],Ks),Q===S-1?g._loop?w=_[1]:(w=zQ,m.subtract(_[S-1],_[S-2],w),m.add(_[S-1],w,w)):w=_[Q+1],m.clone(w,mm);let N=E[G];Q===B+N&&(B+=N,++G);let k=Q-B===0,v=Q===B+E[G]-1;c===re.SCENE2D&&(um.z=0,Ks.z=0,mm.z=0),(c===re.SCENE2D||c===re.MORPHING)&&(k||v)&&d-Math.abs(Ks.x)<1&&((Ks.x<0&&um.x>0||Ks.x>0&&um.x<0)&&m.clone(Ks,um),(Ks.x<0&&mm.x>0||Ks.x>0&&mm.x<0)&&m.clone(Ks,mm));let O=k?2:0,H=v?2:4;for(let ee=O;ee<H;++ee){ni.writeElements(Ks,e,n),ni.writeElements(um,e,n+6),ni.writeElements(mm,e,n+12);let K=ee-2<0?-1:1;t[o]=Q/(S-1),t[o+1]=2*(ee%2)-1,t[o+2]=K,t[o+3]=x,n+=18,o+=4}}let F=F4e;F.x=U.floatToByte(R.red),F.y=U.floatToByte(R.green),F.z=U.floatToByte(R.blue),F.w=U.floatToByte(R.alpha);let P=P4e;P.x=f,P.y=b?1:0;let A=c===re.SCENE2D?g._boundingVolume2D:g._boundingVolumeWC,T=ni.fromCartesian(A.center,Hue),L=T.high,V=ce.fromElements(T.low.x,T.low.y,T.low.z,A.radius,zue),W=Kue;W.x=0,W.y=Number.MAX_VALUE;let M=g.distanceDisplayCondition;l(M)&&(W.x=M.near,W.y=M.far),r.setBatchedAttribute(x,0,P),r.setBatchedAttribute(x,1,F),r.attributes.length>2&&(r.setBatchedAttribute(x,2,L),r.setBatchedAttribute(x,3,V),r.setBatchedAttribute(x,4,W))}};var M4e=new m,v4e=new m,N4e=new m,Uue=new m;tp.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,h=0;for(let p=0;p<d;++p){let g;p===0?s._loop?g=a[d-2]:(g=Uue,m.subtract(a[0],a[1],g),m.add(a[0],g,g)):g=a[p-1],g=X.multiplyByPoint(n,g,v4e);let f=X.multiplyByPoint(n,a[p],M4e),b;p===d-1?s._loop?b=a[1]:(b=Uue,m.subtract(a[d-1],a[d-2],b),m.add(a[d-1],b,b)):b=a[p+1],b=X.multiplyByPoint(n,b,N4e);let x=c[u];p===h+x&&(h+=x,++u);let I=p-h===0,_=p===h+c[u]-1,E=I?2:0,S=_?2:4;for(let R=E;R<S;++R)ni.writeElements(f,e,t),ni.writeElements(g,e,t+6),ni.writeElements(b,e,t+12),t+=18}}};var D4e=new Array(1);tp.prototype.updateIndices=function(e,t,n,i){let o=n.length-1,r=new $K(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 h=0;h<u;++h){let p=d[h];p._locatorBuckets=[];let g;if(this.mode===re.SCENE3D){g=D4e;let b=p._actualPositions.length;if(b>0)g[0]=b;else continue}else g=p._segments.lengths;let f=g.length;if(f>0){let b=0;for(let x=0;x<f;++x){let I=g[x]-1;for(let _=0;_<I;++_)c+4>Z.SIXTY_FOUR_KILOBYTES&&(p._locatorBuckets.push({locator:r,count:b}),b=0,t.push(4),a=[],e.push(a),c=0,r.count=s,s=0,i=0,r=new $K(0,0,this),n[++o]=[r]),a.push(c,c+2,c+1),a.push(c+1,c+2,c+3),b+=6,s+=6,i+=6,c+=4}p._locatorBuckets.push({locator:r,count:b}),c+4>Z.SIXTY_FOUR_KILOBYTES&&(t.push(0),a=[],e.push(a),c=0,r.count=s,i=0,s=0,r=new $K(0,0,this),n[++o]=[r])}p._clean()}return r.count=s,i};tp.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 fT={positions:void 0,lengths:void 0},kue=new Array(1),Q4e=new m,U4e=new ge;tp.prototype.getSegments=function(e,t){let n=e._actualPositions;if(this.mode===re.SCENE3D)return kue[0]=n.length,fT.positions=n,fT.lengths=kue,fT;que(e)&&(n=e._segments.positions);let i=t.ellipsoid,o=[],r=this.modelMatrix,s=n.length,a,c=Q4e;for(let d=0;d<s;++d)a=n[d],c=X.multiplyByPoint(r,a,c),o.push(t.project(i.cartesianToCartographic(c,U4e)));if(o.length>0){e._boundingVolume2D=ue.fromPoints(o,e._boundingVolume2D);let d=e._boundingVolume2D.center;e._boundingVolume2D.center=new m(d.z,d.x,d.y)}return fT.positions=o,fT.lengths=e._segments.lengths,fT};var Yue;tp.prototype.writeUpdate=function(e,t,n,i){let o=this.mode,r=i.ellipsoid.maximumRadius*Z.PI,s=t._actualLength;if(s){e+=this.getPolylineStartIndex(t);let a=Yue,c=6*s*3;!l(a)||a.length<c?a=Yue=new Float32Array(c):a.length>c&&(a=new Float32Array(a.buffer,0,c));let d=this.getSegments(t,i),u=d.positions,h=d.lengths,p=0,g=0,f=0,b;s=u.length;for(let x=0;x<s;++x){x===0?t._loop?b=u[s-2]:(b=zQ,m.subtract(u[0],u[1],b),m.add(u[0],b,b)):b=u[x-1],m.clone(b,um),m.clone(u[x],Ks),x===s-1?t._loop?b=u[1]:(b=zQ,m.subtract(u[s-1],u[s-2],b),m.add(u[s-1],b,b)):b=u[x+1],m.clone(b,mm);let I=h[g];x===f+I&&(f+=I,++g);let _=x-f===0,E=x===f+h[g]-1;o===re.SCENE2D&&(um.z=0,Ks.z=0,mm.z=0),(o===re.SCENE2D||o===re.MORPHING)&&(_||E)&&r-Math.abs(Ks.x)<1&&((Ks.x<0&&um.x>0||Ks.x>0&&um.x<0)&&m.clone(Ks,um),(Ks.x<0&&mm.x>0||Ks.x>0&&mm.x<0)&&m.clone(Ks,mm));let S=_?2:0,R=E?2:4;for(let G=S;G<R;++G)ni.writeElements(Ks,a,p),ni.writeElements(um,a,p+6),ni.writeElements(mm,a,p+12),p+=18}n.copyFromArrayView(a,18*Float32Array.BYTES_PER_ELEMENT*e)}};var Wh=Xh;function g0(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 qd({batchTable:e.batchTable,scene:e.scene}),this._labelCollection=new ep({batchTable:e.batchTable,scene:e.scene}),this._polylineCollection=new Wh,this._polylineCollection._useHighlightColor=!0,this._packedBuffer=void 0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(g0.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 k4e(e,t){let n=e._rectangle,i=e._minHeight,o=e._maxHeight,r=2+le.packedLength+ie.packedLength,s=new Float64Array(r),a=0;return s[a++]=i,s[a++]=o,le.pack(n,s,a),a+=le.packedLength,ie.pack(t,s,a),s}var Y4e=new hi("createVectorTilePoints",5),O4e=new m;function H4e(e,t){let n=e._positions,i=e._packedBuffer;l(i)||(n=e._positions=n.slice(),e._batchIds=e._batchIds.slice(),i=e._packedBuffer=k4e(e,t));let o=[n.buffer,i.buffer],r={positions:n.buffer,packedBuffer:i.buffer},s=Y4e.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 h=e._batchIds,p=n.length/3,g=e._heightReference??et.NONE;for(let f=0;f<p;++f){let b=h[f],x=m.unpack(n,f*3,O4e),I=c.add();I.position=x,I._batchIndex=b,I.heightReference=g;let _=d.add();_.text=" ",_.position=x,_._batchIndex=b,_.heightReference=g;let E=u.add();E.positions=[m.clone(x),m.clone(x)]}e._positions=void 0,e._packedBuffer=void 0,e._ready=!0}).catch(a=>{e.isDestroyed()||(e._error=a)})}g0.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),h=o.get(a);t[c]=new jA(e,c,d,u,h)}};g0.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 z4e(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=jA.defaultPointSize,s.color=jA.defaultColor,s.pointOutlineColor=jA.defaultPointOutlineColor,s.pointOutlineWidth=jA.defaultPointOutlineWidth,s.labelColor=U.WHITE,s.labelOutlineColor=U.WHITE,s.labelOutlineWidth=1,s.font="30px sans-serif",s.labelStyle=nr.FILL,s.labelText=void 0,s.backgroundColor=new U(.165,.165,.165,.8),s.backgroundPadding=new D(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=wi.CENTER,s.verticalOrigin=kn.CENTER,s.labelHorizontalOrigin=wi.RIGHT,s.labelVerticalOrigin=kn.BASELINE}}var K4e=new U,J4e=new U,j4e=new U,q4e=new U,$4e=new U,eje=new U,l2=new zt,d2=new zt,iJ=new Qt;g0.prototype.applyStyle=function(e,t){if(!l(e)){z4e(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,K4e)),l(e.pointOutlineColor)&&(s.pointOutlineColor=e.pointOutlineColor.evaluateColor(s,J4e)),l(e.pointOutlineWidth)&&(s.pointOutlineWidth=e.pointOutlineWidth.evaluate(s)),l(e.labelColor)&&(s.labelColor=e.labelColor.evaluateColor(s,j4e)),l(e.labelOutlineColor)&&(s.labelOutlineColor=e.labelOutlineColor.evaluateColor(s,q4e)),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,$4e)),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)?(l2.near=a.x,l2.nearValue=a.y,l2.far=a.z,l2.farValue=a.w,s.scaleByDistance=l2):s.scaleByDistance=void 0}else s.scaleByDistance=void 0;if(l(e.translucencyByDistance)){let a=e.translucencyByDistance.evaluate(s);l(a)?(d2.near=a.x,d2.nearValue=a.y,d2.far=a.z,d2.farValue=a.w,s.translucencyByDistance=d2):s.translucencyByDistance=void 0}else s.translucencyByDistance=void 0;if(l(e.distanceDisplayCondition)){let a=e.distanceDisplayCondition.evaluate(s);l(a)?(iJ.near=a.x,iJ.far=a.y,s.distanceDisplayCondition=iJ):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,eje)),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))}};g0.prototype.update=function(e){if(!this._ready&&(l(this._promise)||(this._promise=H4e(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)};g0.prototype.isDestroyed=function(){return!1};g0.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 u2=g0;var d3n=y(C(),1);function eg(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??m.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=$n.BOTH}Object.defineProperties(eg.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 tje(e){let t=new Float64Array(3+m.packedLength+ie.packedLength+le.packedLength),n=0;return t[n++]=e._indices.BYTES_PER_ELEMENT,t[n++]=e._minimumHeight,t[n++]=e._maximumHeight,m.pack(e._center,t,n),n+=m.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,le.pack(e._rectangle,t,n),t}function nje(e,t){let n=1,i=t[n++],o=e._boundingVolumes=new Array(i);for(let a=0;a<i;++a)o[a]=vn.unpack(t,n),n+=vn.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++],h=t[n++],p=new Array(h);for(let g=0;g<h;++g)p[g]=t[n++];s[a]=new Nf({color:c,offset:d,count:u,batchIds:p})}}var ije=new hi("createVectorTilePolygons",5),oje=new U;function rje(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(le.center(e._rectangle)),r=e._transferrableBatchIds=new Uint32Array(e._batchIds),s=e._batchTableColors=new Uint32Array(r.length);let g=e._batchTable,f=s.length;for(let b=0;b<f;++b){let x=g.getColor(b,oje);s[b]=x.toRgba()}a=e._packedBuffer=tje(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,h=e._polygonMaximumHeights;l(u)&&l(h)&&(u=u.slice(),h=h.slice(),c.push(u.buffer,h.buffer),d.minimumHeights=u,d.maximumHeights=h);let p=ije.scheduleTask(d,c);if(l(p))return p.then(g=>{if(e.isDestroyed())return;e._positions=void 0,e._counts=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0;let f=new Float64Array(g.packedBuffer),b=f[0];nje(e,f),e._indices=Me.getSizeInBytes(b)===2?new Uint16Array(g.indices):new Uint32Array(g.indices),e._indexOffsets=new Uint32Array(g.indexOffsets),e._indexCounts=new Uint32Array(g.indexCounts),e._batchedPositions=new Float32Array(g.positions),e._vertexBatchIds=new Uint16Array(g.batchIds),sje(e),e._ready=!0}).catch(g=>{e.isDestroyed()||(e._error=g)})}function sje(e){l(e._primitive)||(e._primitive=new GC({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)}eg.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};eg.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};eg.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};eg.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};eg.prototype.update=function(e){if(!this._ready){if(l(this._promise)||(this._promise=rje(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)};eg.prototype.isDestroyed=function(){return!1};eg.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};var m2=eg;var P3n=y(C(),1);var m3n=y(C(),1),h2=`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 Fh(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(Fh.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function aje(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+le.packedLength+ie.packedLength+m.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,le.pack(t,a,c),c+=le.packedLength,ie.pack(o,a,c),c+=ie.packedLength,m.pack(r,a,c),a}var cje=new hi("createVectorTilePolylines",5),pT={previousPosition:0,currentPosition:1,nextPosition:2,expandAndWidth:3,a_batchId:4};function lje(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=aje(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=cje.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 h=u.indexDatatype;e._indices=h===Me.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),dje(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function dje(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=It.createVertexBuffer({context:t,typedArray:i,usage:Ne.STATIC_DRAW}),u=It.createVertexBuffer({context:t,typedArray:n,usage:Ne.STATIC_DRAW}),h=It.createVertexBuffer({context:t,typedArray:o,usage:Ne.STATIC_DRAW}),p=It.createVertexBuffer({context:t,typedArray:r,usage:Ne.STATIC_DRAW}),g=It.createVertexBuffer({context:t,typedArray:s,usage:Ne.STATIC_DRAW}),f=It.createIndexBuffer({context:t,typedArray:a,usage:Ne.STATIC_DRAW,indexDatatype:a.BYTES_PER_ELEMENT===2?Me.UNSIGNED_SHORT:Me.UNSIGNED_INT}),b=[{index:pT.previousPosition,vertexBuffer:d,componentDatatype:J.FLOAT,componentsPerAttribute:3},{index:pT.currentPosition,vertexBuffer:u,componentDatatype:J.FLOAT,componentsPerAttribute:3},{index:pT.nextPosition,vertexBuffer:h,componentDatatype:J.FLOAT,componentsPerAttribute:3},{index:pT.expandAndWidth,vertexBuffer:p,componentDatatype:J.FLOAT,componentsPerAttribute:2},{index:pT.a_batchId,vertexBuffer:g,componentDatatype:J.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new ui({context:t,attributes:b,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 f2=new X,$ue=new m;function uje(e,t){l(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return X.clone(n,f2),X.multiplyByPoint(f2,e._center,$ue),X.setTranslation(f2,$ue,f2),f2},u_highlightColor:function(){return e._highlightColor}})}function mje(e){if(l(e._rs))return;let t={enabled:!0,factor:-5,units:-5};e._rs=Qe.fromCache({blending:bn.ALPHA_BLEND,depthMask:!1,depthTest:{enabled:!0},polygonOffset:t})}var hje=`uniform vec4 u_highlightColor; void main() { out_FragColor = u_highlightColor; } `;function fje(e,t){if(l(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(h2),o=n.getFragmentShaderCallback(!1,void 0,!1)(hje),r=new Oe({defines:["VECTOR_TILE",Ht.isInternetExplorer()?"":"CLIP_POLYLINE"],sources:[Md,i]}),s=new Oe({defines:["VECTOR_TILE"],sources:[o]});e._sp=ln.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:pT})}function pje(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:Ge.TRANSLUCENT,pickId:e._batchTable.getPickId()})}t.commandList.push(e._command)}Fh.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 h=o[r],p=o[r+1]-h;for(s=0;s<p;++s){let g=(h+s)*3;u[d++]=i[g],u[d++]=i[g+1],u[d++]=i[g+2]}}return u};Fh.prototype.getPositions=function(e){return Fh.getPolylinePositions(this,e)};Fh.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 ma(e,r)}};Fh.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function Aje(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 gje=new U,bje=U.WHITE,yje=!0;Fh.prototype.applyStyle=function(e,t){if(!l(e)){Aje(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,gje):bje,s.show=l(e.show)?e.show.evaluate(s):yje}};Fh.prototype.update=function(e){let t=e.context;if(!this._ready){if(l(this._promise)||(this._promise=lje(this,t)),l(this._error)){let i=this._error;throw this._error=void 0,i}return}uje(this,t),fje(this,t),mje(this);let n=e.passes;(n.render||n.pick)&&pje(this,e)};Fh.prototype.isDestroyed=function(){return!1};Fh.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),me(this)};var bx=Fh;var IOn=y(C(),1);var v3n=y(C(),1),p2=`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 D3n=y(C(),1),A2=`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 tg(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 D(Si._defaultMinTerrainHeight,Si._defaultMaxTerrainHeight),this._boundingVolume=vn.fromRectangle(e.rectangle,Si._defaultMinTerrainHeight,Si._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(tg.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function Cje(e,t,n){let i=Si.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;vn.fromRectangle(c,o,r,n,a)}function xje(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+le.packedLength+ie.packedLength+m.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,le.pack(t,a,c),c+=le.packedLength,ie.pack(o,a,c),c+=ie.packedLength,m.pack(r,a,c),a}var Ije=new hi("createVectorTileClampedPolylines"),b0={startEllipsoidNormal:0,endEllipsoidNormal:1,startPositionAndHeight:2,endPositionAndHeight:3,startFaceNormalAndVertexCorner:4,endFaceNormalAndHalfWidth:5,a_batchId:6};function _je(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=xje(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=Ije.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 h=u.indexDatatype;e._indices=h===Me.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),Eje(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function Eje(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 h=It.createVertexBuffer({context:t,typedArray:n,usage:Ne.STATIC_DRAW}),p=It.createVertexBuffer({context:t,typedArray:i,usage:Ne.STATIC_DRAW}),g=It.createVertexBuffer({context:t,typedArray:o,usage:Ne.STATIC_DRAW}),f=It.createVertexBuffer({context:t,typedArray:r,usage:Ne.STATIC_DRAW}),b=It.createVertexBuffer({context:t,typedArray:s,usage:Ne.STATIC_DRAW}),x=It.createVertexBuffer({context:t,typedArray:a,usage:Ne.STATIC_DRAW}),I=It.createVertexBuffer({context:t,typedArray:c,usage:Ne.STATIC_DRAW}),_=It.createIndexBuffer({context:t,typedArray:d,usage:Ne.STATIC_DRAW,indexDatatype:d.BYTES_PER_ELEMENT===2?Me.UNSIGNED_SHORT:Me.UNSIGNED_INT}),E=[{index:b0.startEllipsoidNormal,vertexBuffer:h,componentDatatype:J.FLOAT,componentsPerAttribute:3},{index:b0.endEllipsoidNormal,vertexBuffer:p,componentDatatype:J.FLOAT,componentsPerAttribute:3},{index:b0.startPositionAndHeight,vertexBuffer:g,componentDatatype:J.FLOAT,componentsPerAttribute:4},{index:b0.endPositionAndHeight,vertexBuffer:f,componentDatatype:J.FLOAT,componentsPerAttribute:4},{index:b0.startFaceNormalAndVertexCorner,vertexBuffer:b,componentDatatype:J.FLOAT,componentsPerAttribute:4},{index:b0.endFaceNormalAndHalfWidth,vertexBuffer:x,componentDatatype:J.FLOAT,componentsPerAttribute:4},{index:b0.a_batchId,vertexBuffer:I,componentDatatype:J.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new ui({context:t,attributes:E,indexBuffer:_}),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 g2=new X,eme=new m;function Tje(e,t){l(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return X.clone(n,g2),X.multiplyByPoint(g2,e._center,eme),X.setTranslation(g2,eme,g2),g2},u_highlightColor:function(){return e._highlightColor},u_minimumMaximumVectorHeights:function(){return e._minimumMaximumVectorHeights}})}function tme(e){return Qe.fromCache({cull:{enabled:!0,face:Xi.FRONT},blending:bn.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:ei.EQUAL,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},backFunction:ei.EQUAL,backOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},reference:jt.CESIUM_3D_TILE_MASK,mask:jt.CESIUM_3D_TILE_MASK}})}function Sje(e){l(e._rs)||(e._rs=tme(!1),e._rs3DTiles=tme(!0))}function Lje(e,t){if(l(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(p2),o=n.getFragmentShaderCallback(!1,void 0,!0)(A2),r=new Oe({defines:["VECTOR_TILE",Ht.isInternetExplorer()?"":"CLIP_POLYLINE"],sources:[Md,i]}),s=new Oe({defines:["VECTOR_TILE"],sources:[o]});e._sp=ln.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:b0})}function Rje(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:Ge.TERRAIN_CLASSIFICATION,pickId:e._batchTable.getPickId()});let r=ot.shallowClone(n,n.derivedCommands.tileset);r.renderState=e._rs3DTiles,r.pass=Ge.CESIUM_3D_TILE_CLASSIFICATION,n.derivedCommands.tileset=r}let i=e._classificationType;(i===$n.TERRAIN||i===$n.BOTH)&&t.commandList.push(n),(i===$n.CESIUM_3D_TILE||i===$n.BOTH)&&t.commandList.push(n.derivedCommands.tileset)}tg.prototype.getPositions=function(e){return bx.getPolylinePositions(this,e)};tg.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 ma(e,r)}};tg.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function Vje(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 Gje=new U,Zje=U.WHITE,Bje=!0;tg.prototype.applyStyle=function(e,t){if(!l(e)){Vje(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,Gje):Zje,s.show=l(e.show)?e.show.evaluate(s):Bje}};function wje(e){return Si.initialize().then(function(){Cje(e,e._rectangle,e._ellipsoid)}).catch(t=>{e.isDestroyed()||(e._error=t)})}tg.prototype.update=function(e){let t=e.context;if(!this._ready){if(l(this._promise)||(this._promise=wje(this).then(_je(this,t))),l(this._error)){let i=this._error;throw this._error=void 0,i}return}Tje(this,t),Lje(this,t),Sje(this);let n=e.passes;(n.render||n.pick)&&Rje(this,e)};tg.prototype.isDestroyed=function(){return!1};tg.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),me(this)};var b2=tg;var ROn=y(C(),1);var oJ=32767,Xje=new ge,Wje=new m;function Fje(e,t,n,i,o){let r=e.length/3,s=e.subarray(0,r),a=e.subarray(r,2*r),c=e.subarray(2*r,3*r);Mn.zigZagDeltaDecode(s,a,c);let d=new Float64Array(e.length);for(let u=0;u<r;++u){let h=s[u],p=a[u],g=c[u],f=Z.lerp(t.west,t.east,h/oJ),b=Z.lerp(t.south,t.north,p/oJ),x=Z.lerp(n,i,g/oJ),I=ge.fromRadians(f,b,x,Xje),_=o.cartographicToCartesian(I,Wje);m.pack(_,d,u*3)}return d}var y2=Fje;function Mh(e,t,n,i,o){this._tileset=e,this._tile=t,this._resource=n,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,Dje(this,i,o)}Object.defineProperties(Mh.prototype,{featuresLength:{get:function(){return l(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return l(this._points)?this._points.pointsLength:0}},trianglesLength:{get:function(){let e=0;return l(this._polygons)&&(e+=this._polygons.trianglesLength),l(this._polylines)&&(e+=this._polylines.trianglesLength),e}},geometryByteLength:{get:function(){let e=0;return l(this._polygons)&&(e+=this._polygons.geometryByteLength),l(this._polylines)&&(e+=this._polylines.geometryByteLength),e}},texturesByteLength:{get:function(){return l(this._points)?this._points.texturesByteLength:0}},batchTableByteLength:{get:function(){return l(this._batchTable)?this._batchTable.batchTableByteLength:0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},batchTable:{get:function(){return this._batchTable}},group:{get:function(){return this._group},set:function(e){this._group=e}}});function Pje(e){return function(t,n){l(e._polygons)&&e._polygons.updateCommands(t,n)}}function Mje(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 de("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 Ph=Uint32Array.BYTES_PER_ELEMENT;function vje(e){return new bx(e)}function Nje(e){return new b2(e)}function Dje(e,t,n){n=n??0;let i=new Uint8Array(t),o=new DataView(t);n+=Ph;let r=o.getUint32(n,!0);if(r!==1)throw new de(`Only Vector tile version 1 is supported. Version ${r} is not.`);n+=Ph;let s=o.getUint32(n,!0);if(n+=Ph,s===0){e._ready=!0;return}let a=o.getUint32(n,!0);if(n+=Ph,a===0)throw new de("Feature table must have a byte length greater than zero");let c=o.getUint32(n,!0);n+=Ph;let d=o.getUint32(n,!0);n+=Ph;let u=o.getUint32(n,!0);n+=Ph;let h=o.getUint32(n,!0);n+=Ph;let p=o.getUint32(n,!0);n+=Ph;let g=o.getUint32(n,!0);n+=Ph;let f=o.getUint32(n,!0);n+=Ph;let b=mr(i,n,a);n+=a;let x=new Uint8Array(t,n,c);n+=c;let I,_;d>0&&(I=mr(i,n,d),n+=d,u>0&&(_=new Uint8Array(t,n,u),_=new Uint8Array(_),n+=u));let E=b.POLYGONS_LENGTH??0,S=b.POLYLINES_LENGTH??0,R=b.POINTS_LENGTH??0,G=E+S+R,B=new bA(e,G,I,_,Pje(e));if(e._batchTable=B,G===0)return;let w=new Sh(b,x),F=w.getGlobalProperty("REGION");if(!l(F))throw new de("Feature table global property: REGION must be defined");let P=le.unpack(F),A=F[4],T=F[5],L=e._tile.computedTransform,V=w.getGlobalProperty("RTC_CENTER",J.FLOAT,3);l(V)?(V=m.unpack(V),X.multiplyByPoint(L,V,V)):(V=le.center(P),V.height=Z.lerp(A,T,.5),V=ie.WGS84.cartographicToCartesian(V));let W=Mje(b,x);if(n+=(4-n%4)%4,E>0){w.featuresLength=E;let Q=w.getPropertyArray("POLYGON_COUNTS",J.UNSIGNED_INT,1)??w.getPropertyArray("POLYGON_COUNT",J.UNSIGNED_INT,1);if(!l(Q))throw new de("Feature table property: POLYGON_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let N=w.getPropertyArray("POLYGON_INDEX_COUNTS",J.UNSIGNED_INT,1)??w.getPropertyArray("POLYGON_INDEX_COUNT",J.UNSIGNED_INT,1);if(!l(N))throw new de("Feature table property: POLYGON_INDEX_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let k=Q.reduce(function(te,q){return te+q*2},0),v=N.reduce(function(te,q){return te+q},0),O=new Uint32Array(t,n,v);n+=h;let H=new Uint16Array(t,n,k);n+=p;let ee,K;l(b.POLYGON_MINIMUM_HEIGHTS)&&l(b.POLYGON_MAXIMUM_HEIGHTS)&&(ee=w.getPropertyArray("POLYGON_MINIMUM_HEIGHTS",J.FLOAT,1),K=w.getPropertyArray("POLYGON_MAXIMUM_HEIGHTS",J.FLOAT,1)),e._polygons=new m2({positions:H,counts:Q,indexCounts:N,indices:O,minimumHeight:A,maximumHeight:T,polygonMinimumHeights:ee,polygonMaximumHeights:K,center:V,rectangle:P,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:B,batchIds:W.polygons,modelMatrix:L})}let M=e._tileset;if(S>0){w.featuresLength=S;let Q=w.getPropertyArray("POLYLINE_COUNTS",J.UNSIGNED_INT,1)??w.getPropertyArray("POLYLINE_COUNT",J.UNSIGNED_INT,1);if(!l(Q))throw new de("Feature table property: POLYLINE_COUNTS must be defined when POLYLINES_LENGTH is greater than 0");let N=w.getPropertyArray("POLYLINE_WIDTHS",J.UNSIGNED_SHORT,1);if(!l(N)){N=new Uint16Array(S);for(let ee=0;ee<S;++ee)N[ee]=2}let k=Q.reduce(function(ee,K){return ee+K*3},0),v=new Uint16Array(t,n,k);n+=g;let O=M.examineVectorLinesFunction;if(l(O)){let ee=y2(new Uint16Array(v),P,A,T,ie.WGS84);Qje(ee,Q,W.polylines,B,e.url,O)}let H=vje;l(M.classificationType)&&(H=Nje),e._polylines=H({positions:v,widths:N,counts:Q,batchIds:W.polylines,minimumHeight:A,maximumHeight:T,center:V,rectangle:P,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:B,classificationType:M.classificationType,keepDecodedPositions:M.vectorKeepDecodedPositions})}if(R>0){let Q=new Uint16Array(t,n,R*3);n+=f,e._points=new u2({positions:Q,batchIds:W.points,minimumHeight:A,maximumHeight:T,rectangle:P,batchTable:B,heightReference:M.heightReference,scene:M.scene})}}function rJ(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}}Mh.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};Mh.prototype.getFeature=function(e){return l(this._features)||rJ(this),this._features[e]};Mh.prototype.applyDebugSettings=function(e,t){l(this._polygons)&&this._polygons.applyDebugSettings(e,t),l(this._polylines)&&this._polylines.applyDebugSettings(e,t),l(this._points)&&this._points.applyDebugSettings(e,t)};Mh.prototype.applyStyle=function(e){l(this._features)||rJ(this),l(this._polygons)&&this._polygons.applyStyle(e,this._features),l(this._polylines)&&this._polylines.applyStyle(e,this._features),l(this._points)&&this._points.applyStyle(e,this._features)};Mh.prototype.update=function(e,t){let n=!0;l(this._polygons)&&(this._polygons.classificationType=this._tileset.classificationType,this._polygons.debugWireframe=this._tileset.debugWireframe,this._polygons.update(t),n=n&&this._polygons.ready),l(this._polylines)&&(this._polylines.update(t),n=n&&this._polylines.ready),l(this._points)&&(this._points.update(t),n=n&&this._points.ready),l(this._batchTable)&&n&&(l(this._features)||rJ(this),this._batchTable.update(e,t),this._ready=!0)};Mh.prototype.pick=function(e,t,n){};Mh.prototype.getPolylinePositions=function(e){let t=this._polylines;if(l(t))return t.getPositions(e)};Mh.prototype.isDestroyed=function(){return!1};Mh.prototype.destroy=function(){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 Qje(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 C2=Mh;var czn=y(C(),1);var jHn=y(C(),1);var $On=y(C(),1);function Qa(){}Qa._maxSortingConcurrency=Math.max(Ht.hardwareConcurrency-1,1);Qa._sorterTaskProcessor=void 0;Qa._taskProcessorReady=!1;Qa._error=void 0;Qa._getSorterTaskProcessor=function(){if(!l(Qa._sorterTaskProcessor)){let e=new hi("gaussianSplatSorter",Qa._maxSortingConcurrency);e.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/wasm_splats_bg.wasm"}).then(function(t){t?Qa._taskProcessorReady=!0:Qa._error=new de("Gaussian splat sorter could not be initialized.")}).catch(t=>{Qa._error=t}),Qa._sorterTaskProcessor=e}return Qa._sorterTaskProcessor};Qa.radixSortIndexes=function(e){let t=Qa._getSorterTaskProcessor();if(l(Qa._error))throw Qa._error;if(Qa._taskProcessorReady)return t.scheduleTask(e,[e.primitive.positions.buffer])};var AT=Qa;var rHn=y(C(),1);function Ua(){}Ua._maxSortingConcurrency=Math.max(Ht.hardwareConcurrency-1,1);Ua._textureTaskProcessor=void 0;Ua._taskProcessorReady=!1;Ua._error=void 0;Ua._getTextureTaskProcessor=function(){if(!l(Ua._textureTaskProcessor)){let e=new hi("gaussianSplatTextureGenerator",Ua._maxSortingConcurrency);e.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/wasm_splats_bg.wasm"}).then(function(t){t?Ua._taskProcessorReady=!0:Ua._error=new de("Gaussian splat sorter could not be initialized.")}).catch(t=>{Ua._error=t}),Ua._textureTaskProcessor=e}return Ua._textureTaskProcessor};Ua.generateFromAttributes=function(e){let t=Ua._getTextureTaskProcessor();if(l(Ua._error))throw Ua._error;if(!Ua._taskProcessorReady)return;let{attributes:n}=e;return t.scheduleTask(e,[n.positions.buffer,n.scales.buffer,n.rotations.buffer,n.colors.buffer])};var x2=Ua;var mHn=y(C(),1);function Uje(e){let t=new OA;this.shaderBuilder=t,this.uniformMap={},this.renderStateOptions=Qe.getState(Qe.fromCache({depthTest:{enabled:!0,func:Fa.LESS_OR_EQUAL}})),this.alphaOptions=new lx,this.hasSkipLevelOfDetail=!1,e._useLogDepth&&t.addDefine("LOG_DEPTH_READ_ONLY",void 0,be.FRAGMENT)}var I2=Uje;var fHn=y(C(),1),_2=`// // 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. // // 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); float focal = czm_viewport.z * czm_projection[0][0]; float J1 = focal / t.z; vec2 J2 = -J1 / t.z * t.xy; mat3 J = mat3( J1, 0.0, J2.x, 0.0, J1, 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); ivec2 posCoord = ivec2((texIdx & 0x3ffu) << 1, texIdx >> 10); 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(((texIdx & 0x3ffu) << 1) | 1u, texIdx >> 10); 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; v_splitDirection = u_splitDirection; }`;var AHn=y(C(),1),E2=`// // 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; mediump float A = dot(v_vertPos, v_vertPos); if(A > 1.0) { discard; } mediump float scale = 4.0; mediump float B = exp(-A * scale) * (v_splatColor.a); out_FragColor = vec4(v_splatColor.rgb * B, B); } `;var T2=new X,ime=new X,yx=new X,md={IDLE:0,WAITING:1,SORTING:2,SORTED:3,ERROR:4};function nme(e,t){return new Wt({context:e,source:{width:t.width,height:t.height,arrayBufferView:t.data},preMultiplyAlpha:!1,skipColorSpaceConversion:!0,pixelFormat:tt.RGBA_INTEGER,pixelDatatype:Ye.UNSIGNED_INT,flipY:!1,sampler:sn.NEAREST})}function eu(e){e=e??Y.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._prevViewMatrix=new X,this._debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.gaussianSplatTexture=void 0,this._lastTextureWidth=0,this._lastTextureHeight=0,this._vertexArray=void 0,this._vertexArrayLen=-1,this._splitDirection=Ir.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._ready=!1,this._hasGaussianSplatTexture=!1,this._gaussianSplatTexturePending=!1,this._drawCommand=void 0,this._rootTransform=void 0,this._axisCorrectionMatrix=Mt.getAxisCorrectionMatrix(ho.Y,ho.X,new X),this._isDestroyed=!1,this._sorterState=md.IDLE,this._sorterPromise=void 0,this._sorterError=void 0}Object.defineProperties(eu.prototype,{ready:{get:function(){return this._ready}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,this._dirty=!0)}}});eu.prototype._wrappedUpdate=function(e){this._baseTilesetUpdate.call(this._tileset,e),this.update(e)};eu.prototype.destroy=function(){this._positions=void 0,this._rotations=void 0,this._scales=void 0,this._colors=void 0,this._indexes=void 0,l(this.gaussianSplatTexture)&&(this.gaussianSplatTexture.destroy(),this.gaussianSplatTexture=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)};eu.prototype.isDestroyed=function(){return this._isDestroyed};eu.prototype.onTileLoad=function(e){this._dirty=!0};eu.prototype.onTileVisible=function(e){};eu.transformTile=function(e){let t=e.computedTransform,n=e.content.splatPrimitive,i=e.tileset.gaussianSplatPrimitive,o=X.multiplyTransformation(t,i._axisCorrectionMatrix,T2);X.multiplyTransformation(o,e.content.worldTransform,o);let r=X.multiply(e.tileset.modelMatrix,X.fromArray(e.tileset.root.transform),ime),s=X.inverse(r,yx),a=X.multiplyTransformation(s,o,T2),c=e.content._originalPositions,d=e.content._originalRotations,u=e.content._originalScales,h=Mt.getAttributeBySemantic(n,lt.POSITION).typedArray,p=Mt.getAttributeBySemantic(n,lt.ROTATION).typedArray,g=Mt.getAttributeBySemantic(n,lt.SCALE).typedArray,f=new m,b=new Pe,x=new m;for(let I=0;I<c.length/3;++I)f.x=c[I*3],f.y=c[I*3+1],f.z=c[I*3+2],b.x=d[I*4],b.y=d[I*4+1],b.z=d[I*4+2],b.w=d[I*4+3],x.x=u[I*3],x.y=u[I*3+1],x.z=u[I*3+2],X.fromTranslationQuaternionRotationScale(f,b,x,yx),X.multiplyTransformation(a,yx,yx),X.getTranslation(yx,f),X.getRotation(yx,b),X.getScale(yx,x),h[I*3]=f.x,h[I*3+1]=f.y,h[I*3+2]=f.z,p[I*4]=b.x,p[I*4+1]=b.y,p[I*4+2]=b.z,p[I*4+3]=b.w,g[I*3]=x.x,g[I*3+1]=x.y,g[I*3+2]=x.z};eu.generateSplatTexture=function(e,t){e._gaussianSplatTexturePending=!0;let n=x2.generateFromAttributes({attributes:{positions:new Float32Array(e._positions),scales:new Float32Array(e._scales),rotations:new Float32Array(e._rotations),colors:new Uint8Array(e._colors)},count:e._numSplats});if(!l(n)){e._gaussianSplatTexturePending=!1;return}n.then(i=>{if(!e._gaussianSplatTexture)e.gaussianSplatTexture=nme(t.context,i);else if(e._lastTextureHeight!==i.height||e._lastTextureWidth!==i.width){let o=e.gaussianSplatTexture;e._gaussianSplatTexture=nme(t.context,i),o.destroy()}else e.gaussianSplatTexture.copyFrom({source:{width:i.width,height:i.height,arrayBufferView:i.data}});e._lastTextureHeight=i.height,e._lastTextureWidth=i.width,e._hasGaussianSplatTexture=!0,e._needsGaussianSplatTexture=!1,e._gaussianSplatTexturePending=!1,(!l(e._indexes)||e._indexes.length<e._numSplats)&&(e._indexes=new Uint32Array(e._numSplats));for(let o=0;o<e._numSplats;++o)e._indexes[o]=o}).catch(i=>{console.error("Error generating Gaussian splat texture:",i),e._gaussianSplatTexturePending=!1})};eu.buildGSplatDrawCommand=function(e,t){let n=e._tileset,i=new I2(e),{shaderBuilder:o}=i,r=i.renderStateOptions;r.cull.enabled=!1,r.depthMask=!1,r.depthTest.enabled=!0,r.blending=bn.PRE_MULTIPLIED_ALPHA_BLEND,i.alphaOptions.pass=Ge.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",be.VERTEX),o.addVarying("float","v_splitDirection"),o.addUniform("highp usampler2D","u_splatAttributeTexture",be.VERTEX);let s=i.uniformMap;s.u_splatAttributeTexture=function(){return e.gaussianSplatTexture},s.u_splitDirection=function(){return e.splitDirection},i.instanceCount=e._numSplats,i.count=4,i.primitiveType=We.TRIANGLE_STRIP,o.addVertexLines(_2),o.addFragmentLines(E2);let a=o.buildShaderProgram(t.context),c=ke(Qe.fromCache(i.renderStateOptions),!0);c.cull.face=Mt.getCullFace(n.modelMatrix,We.TRIANGLE_STRIP),c=Qe.fromCache(c);let d={screenQuadPosition:0,splatIndex:2},u=new Tn.Attribute;if(u.name="_SPLAT_INDEXES",u.typedArray=e._indexes,u.componentDatatype=J.UNSIGNED_INT,u.type=kt.SCALAR,u.normalized=!1,u.count=i.instanceCount,u.constant=0,u.instanceDivisor=1,!l(e._vertexArray)||e._indexes.length>e._vertexArrayLen){let g=new pt({attributes:{screenQuadPosition:new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1],name:"_SCREEN_QUAD_POS",variableName:"screenQuadPosition"}),splatIndex:{...u,variableName:"splatIndex"}},primitiveType:We.TRIANGLE_STRIP});e._vertexArray=ui.fromGeometry({context:t.context,geometry:g,attributeLocations:d,bufferUsage:Ne.DYNAMIC_DRAW,interleave:!1})}else e._vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(e._indexes);e._vertexArrayLen=e._indexes.length;let h=X.multiply(n.modelMatrix,X.fromArray(n.root.transform),ime),p=new ot({boundingVolume:n.boundingSphere,modelMatrix:h,uniformMap:s,renderState:c,vertexArray:e._vertexArray,shaderProgram:a,cull:r.cull.enabled,pass:Ge.GAUSSIAN_SPLATS,count:i.count,owner:this,instanceCount:i.instanceCount,primitiveType:We.TRIANGLE_STRIP,debugShowBoundingVolume:n.debugShowBoundingVolume,castShadows:!1,receiveShadows:!1});e._drawCommand=p};eu.prototype.update=function(e){let t=this._tileset;if(l(this._rootTransform)||(this._rootTransform=t.root.computedTransform),this._drawCommand&&t.show&&e.commandList.push(this._drawCommand),t._modelMatrixChanged){this._dirty=!0;return}if(e.passes.pick!==!0){if(this.splitDirection!==t.splitDirection&&(this.splitDirection=t.splitDirection),this._sorterState===md.IDLE){if(!this._dirty&&X.equals(e.camera.viewMatrix,this._prevViewMatrix))return;if(t._selectedTiles.length!==0&&t._selectedTiles.length!==this.selectedTileLength){this._numSplats=0,this._positions=void 0,this._rotations=void 0,this._scales=void 0,this._colors=void 0,this._indexes=void 0,this._needsGaussianSplatTexture=!0,this._gaussianSplatTexturePending=!1;let n=t._selectedTiles,i=n.reduce((r,s)=>r+s.content.pointsLength,0),o=(r,s)=>{let a,c=0;for(let d of n){let u=d.content.splatPrimitive,h=s(u);l(a)||(a=J.createTypedArray(r,i*kt.getNumberOfComponents(h.type))),a.set(h.typedArray,c),c+=h.typedArray.length}return a};this._positions=o(J.FLOAT,r=>Mt.getAttributeBySemantic(r,lt.POSITION)),this._scales=o(J.FLOAT,r=>Mt.getAttributeBySemantic(r,lt.SCALE)),this._rotations=o(J.FLOAT,r=>Mt.getAttributeBySemantic(r,lt.ROTATION)),this._colors=o(J.UNSIGNED_BYTE,r=>Mt.getAttributeBySemantic(r,lt.COLOR)),this._numSplats=i,this.selectedTileLength=t._selectedTiles.length}if(this._numSplats===0)return;if(this._needsGaussianSplatTexture){this._gaussianSplatTexturePending||eu.generateSplatTexture(this,e);return}if(X.clone(e.camera.viewMatrix,this._prevViewMatrix),X.multiply(e.camera.viewMatrix,this._rootTransform,T2),l(this._sorterPromise)||(this._sorterPromise=AT.radixSortIndexes({primitive:{positions:new Float32Array(this._positions),modelView:Float32Array.from(T2),count:this._numSplats},sortType:"Index"})),!l(this._sorterPromise)){this._sorterState=md.WAITING;return}this._sorterPromise.catch(n=>{this._sorterState=md.ERROR,this._sorterError=n}),this._sorterPromise.then(n=>{this._indexes=n,this._sorterState=md.SORTED})}else if(this._sorterState===md.WAITING){if(l(this._sorterPromise)||(this._sorterPromise=AT.radixSortIndexes({primitive:{positions:new Float32Array(this._positions),modelView:Float32Array.from(T2),count:this._numSplats},sortType:"Index"})),!l(this._sorterPromise)){this._sorterState=md.WAITING;return}this._sorterPromise.catch(n=>{this._sorterState=md.ERROR,this._sorterError=n}),this._sorterPromise.then(n=>{this._indexes=n,this._sorterState=md.SORTED}),this._sorterState=md.SORTING}else{if(this._sorterState===md.SORTING)return;if(this._sorterState===md.SORTED)eu.buildGSplatDrawCommand(this,e),this._sorterState=md.IDLE,this._dirty=!1,this._sorterPromise=void 0;else if(this._sorterState===md.ERROR)throw this._sorterError}this._dirty=!1}};var gT=eu;function hm(e,t,n,i){this._tileset=t,this._tile=n,this._resource=i,this._loader=e,l(this._tileset.gaussianSplatPrimitive)||(this._tileset.gaussianSplatPrimitive=new gT({tileset:this._tileset})),this._originalPositions=void 0,this._originalRotations=void 0,this._originalScales=void 0,this.splatPrimitive=void 0,this.worldTransform=void 0,this.featurePropertiesDirty=!1,this._metadata=void 0,this._group=void 0,this._ready=!1,this._transformed=!1}Object.defineProperties(hm.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return this.splatPrimitive.attributes[0].count}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return this.splatPrimitive.attributes.reduce((e,t)=>e+t.byteLength,0)}},texturesByteLength:{get:function(){let e=this._tileset.gaussianSplatPrimitive.gaussianSplatTexture,t=this._tileset.gaussianSplatPrimitive.selectedTileLength;return!l(e)||t===0?0:e.sizeInBytes/t}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},transformed:{get:function(){return this._transformed}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},group:{get:function(){return this._group},set:function(e){this._group=e}}});hm.fromGltf=async function(e,t,n,i){let o=n,r=Ve.createIfNeeded(o),s={releaseGltfJson:!1,upAxis:ho.Y,forwardAxis:ho.Z};l(i.asset)?(s.gltfJson=i,s.baseResource=r,s.gltfResource=r):i instanceof Uint8Array?(s.typedArray=i,s.baseResource=r,s.gltfResource=r):s.gltfResource=Ve.createIfNeeded(i);let a=new Od(s);try{await a.load()}catch(c){throw a.destroy(),new de(`Failed to load glTF: ${c.message}`)}return new hm(a,e,t,n)};hm.prototype.update=function(e,t){let n=this._loader;if(this._ready){!this._transformed&&e.root.content.ready&&(gT.transformTile(this._tile),this._transformed=!0);return}if(t.afterRender.push(()=>!0),!l(n)){this._ready=!0;return}if(this._resourcesLoaded){this.splatPrimitive=n.components.scene.nodes[0].primitives[0],this.worldTransform=n.components.scene.nodes[0].matrix,this._ready=!0,this._originalPositions=new Float32Array(Mt.getAttributeBySemantic(this.splatPrimitive,lt.POSITION).typedArray),this._originalRotations=new Float32Array(Mt.getAttributeBySemantic(this.splatPrimitive,lt.ROTATION).typedArray),this._originalScales=new Float32Array(Mt.getAttributeBySemantic(this.splatPrimitive,lt.SCALE).typedArray);return}this._resourcesLoaded=n.process(t)};hm.prototype.hasProperty=function(e,t){return!1};hm.prototype.getFeature=function(e){};hm.prototype.applyDebugSettings=function(e,t){};hm.prototype.applyStyle=function(e){};hm.prototype.pick=function(e,t,n){};hm.prototype.isDestroyed=function(){return this.isDestroyed};hm.prototype.destroy=function(){return this.splatPrimitive=void 0,l(this._tileset.gaussianSplatPrimitive)&&!this._tileset.gaussianSplatPrimitive.isDestroyed()&&this._tileset.gaussianSplatPrimitive.destroy(),this._tileset.gaussianSplatPrimitive=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,l(this._loader)&&(this._loader.destroy(),this._loader=void 0),me(this)};var bT=hm;var ome={b3dm:function(e,t,n,i,o){return jd.fromB3dm(e,t,n,i,o)},pnts:function(e,t,n,i,o){return jd.fromPnts(e,t,n,i,o)},i3dm:function(e,t,n,i,o){return jd.fromI3dm(e,t,n,i,o)},cmpt:function(e,t,n,i,o){return LZ.fromTileType(e,t,n,i,o,ome)},externalTileset:function(e,t,n,i){return JX.fromJson(e,t,n,i)},geom:function(e,t,n,i,o){return new GZ(e,t,n,i,o)},vctr:function(e,t,n,i,o){return new C2(e,t,n,i,o)},subt:function(e,t,n,i,o){return EE.fromSubtreeJson(e,t,n,void 0,i,o)},subtreeJson:function(e,t,n,i){return EE.fromSubtreeJson(e,t,n,i)},glb:function(e,t,n,i,o){if(i.byteLength<12)throw new de("Invalid glb content");let a=new DataView(i,o).getUint32(8,!0),c=new Uint8Array(i,o,a),d=!1;return e.isGltfExtensionRequired instanceof Function&&(d=e.isGltfExtensionRequired("KHR_spz_gaussian_splats_compression")),d?bT.fromGltf(e,t,n,c):jd.fromGltf(e,t,n,c)},gltf:function(e,t,n,i){let o=e.debugTreatTilesetAsGaussianSplats??!1,r=!1;return e.isGltfExtensionRequired instanceof Function&&(r=e.isGltfExtensionRequired("KHR_spz_gaussian_splats_compression")),o||r?bT.fromGltf(e,t,n,i):jd.fromGltf(e,t,n,i)},geoJson:function(e,t,n,i){return jd.fromGeoJson(e,t,n,i)}},Cx=ome;var Czn=y(C(),1),kje={UNLOADED:0,LOADING:1,PROCESSING:2,READY:3,EXPIRED:4,FAILED:5},ir=Object.freeze(kje);var Izn=y(C(),1),vh={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"};vh.isBinaryFormat=function(e){switch(e){case vh.BATCHED_3D_MODEL:case vh.INSTANCED_3D_MODEL:case vh.COMPOSITE:case vh.POINT_CLOUD:case vh.VECTOR:case vh.GEOMETRY:case vh.IMPLICIT_SUBTREE:case vh.VOXEL_BINARY:case vh.GLTF_BINARY:return!0;default:return!1}};var Js=Object.freeze(vh);var Ezn=y(C(),1),Yje={NOT_COMPUTED:-1,USE_OPTIMIZATION:1,SKIP_OPTIMIZATION:0},fm=Object.freeze(Yje);var Szn=y(C(),1),ba={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},ng=new Array(ba.NUMBER_OF_PASSES);ng[ba.RENDER]=Object.freeze({pass:ba.RENDER,isRender:!0,requestTiles:!0,ignoreCommands:!1});ng[ba.PICK]=Object.freeze({pass:ba.PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});ng[ba.SHADOW]=Object.freeze({pass:ba.SHADOW,isRender:!1,requestTiles:!0,ignoreCommands:!1});ng[ba.PRELOAD]=Object.freeze({pass:ba.PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});ng[ba.PRELOAD_FLIGHT]=Object.freeze({pass:ba.PRELOAD_FLIGHT,isRender:!1,requestTiles:!0,ignoreCommands:!0});ng[ba.REQUEST_RENDER_MODE_DEFER_CHECK]=Object.freeze({pass:ba.REQUEST_RENDER_MODE_DEFER_CHECK,isRender:!1,requestTiles:!0,ignoreCommands:!0});ng[ba.MOST_DETAILED_PRELOAD]=Object.freeze({pass:ba.MOST_DETAILED_PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});ng[ba.MOST_DETAILED_PICK]=Object.freeze({pass:ba.MOST_DETAILED_PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});ba.getPassOptions=function(e){return ng[e]};var zo=Object.freeze(ba);var Vzn=y(C(),1);function np(e,t){this._tileset=e,this._tile=t,this.featurePropertiesDirty=!1}Object.defineProperties(np.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return!0}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){}},metadata:{get:function(){},set:function(e){}},batchTable:{get:function(){}},group:{get:function(){},set:function(e){}}});np.prototype.hasProperty=function(e,t){return!1};np.prototype.getFeature=function(e){};np.prototype.applyDebugSettings=function(e,t){};np.prototype.applyStyle=function(e){};np.prototype.update=function(e,t){};np.prototype.pick=function(e,t,n){};np.prototype.isDestroyed=function(){return!1};np.prototype.destroy=function(){return me(this)};var yT=np;var Nzn=y(C(),1);var wzn=y(C(),1);function ig(e){e=e??Y.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(ig.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});ig.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};ig.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};ig.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};ig.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};ig.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};ig.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};ig.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var S2=ig;function sJ(e,t){let n=Ii(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!l(n))return;if(!l(e.schema)){sJ._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??Y.EMPTY_OBJECT;if(l(n.class)){let o=i[n.class];return new S2({content:n,class:o})}}sJ._oneTimeWarning=xt;var xx=sJ;var kzn=y(C(),1);function Oje(e,t){let n=e.metadataExtension;if(!l(n))return;let i=n.groups,o=Ii(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 Ix=Oje;var tKn=y(C(),1);var zzn=y(C(),1);function og(e){e=e??Y.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(og.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});og.prototype.hasProperty=function(e){return Kn.hasProperty(e,this._properties,this._class)};og.prototype.hasPropertyBySemantic=function(e){return Kn.hasPropertyBySemantic(e,this._properties,this._class)};og.prototype.getPropertyIds=function(e){return Kn.getPropertyIds(this._properties,this._class,e)};og.prototype.getProperty=function(e){return Kn.getProperty(e,this._properties,this._class)};og.prototype.setProperty=function(e,t){return Kn.setProperty(e,t,this._properties,this._class)};og.prototype.getPropertyBySemantic=function(e){return Kn.getPropertyBySemantic(e,this._properties,this._class)};og.prototype.setPropertyBySemantic=function(e,t){return Kn.setPropertyBySemantic(e,t,this._properties,this._class)};var L2=og;function aJ(e,t){let n=Ii(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!l(n))return;if(!l(e.schema)){aJ._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??Y.EMPTY_OBJECT;if(l(n.class)){let o=i[n.class];return new L2({tile:n,class:o})}}aJ._oneTimeWarning=xt;var R2=aJ;var _Kn=y(C(),1);var cKn=y(C(),1);function Hje(e){let t=new Uint8Array(e),n=gh(t);if(n==="glTF"&&(n="glb"),Js.isBinaryFormat(n))return{contentType:n,binaryPayload:t};let i=zje(t);if(l(i.root))return{contentType:Js.EXTERNAL_TILESET,jsonPayload:i};if(l(i.asset))return{contentType:Js.GLTF,jsonPayload:i};if(l(i.tileAvailability))return{contentType:Js.IMPLICIT_SUBTREE_JSON,jsonPayload:i};if(l(i.type))return{contentType:Js.GEOJSON,jsonPayload:i};if(l(i.voxelTable))return{contentType:Js.VOXEL_JSON,jsonPayload:i};throw new de("Invalid tile content.")}function zje(e){let t;try{t=mr(e)}catch{throw new de("Invalid tile content.")}return t}var rg=Hje;function pm(e,t,n,i){this._tileset=e,this._tile=t,this._tilesetResource=n,this._contents=[],this._contentsCreated=!1;let o=l(i.contents)?i.contents:i.content;this._innerContentHeaders=o,this._requestsInFlight=0,this._cancelCount=0,this._externalTilesetCount=0;let r=this._innerContentHeaders.length;this._arrayFetchPromises=new Array(r),this._requests=new Array(r),this._ready=!1,this._innerContentResources=new Array(r),this._serverKeys=new Array(r);for(let s=0;s<r;s++){let a=n.getDerivedResource({url:o[s].uri}),c=Sc.getServerKey(a.getUrlComponent());this._innerContentResources[s]=a,this._serverKeys[s]=c}}Object.defineProperties(pm.prototype,{featurePropertiesDirty:{get:function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)if(e[n].featurePropertiesDirty)return!0;return!1},set:function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].featurePropertiesDirty=e}},featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){return this._contents}},ready:{get:function(){return this._contentsCreated?this._ready:!1}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){}},metadata:{get:function(){},set:function(){}},batchTable:{get:function(){}},group:{get:function(){},set:function(){}},innerContentUrls:{get:function(){return this._innerContentHeaders.map(function(e){return e.uri})}}});function cJ(e,t){e._requestsInFlight+=t,e.tileset.statistics.numberOfPendingRequests+=t}function rme(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)}pm.prototype.requestInnerContents=function(){if(!Kje(this._serverKeys)){this.tileset.statistics.numberOfAttemptedRequests+=this._serverKeys.length;return}let e=this._innerContentHeaders;cJ(this,e.length);let t=this._cancelCount;for(let n=0;n<e.length;n++)this._arrayFetchPromises[n]=Jje(this,n,t,this._tile._contentState);return jje(this)};function Kje(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)&&!Sc.serverHasOpenSlots(n,t[n]))return!1;return Sc.heapHasOpenSlots(e.length)}function Jje(e,t,n,i){let o=e._innerContentResources[t].clone(),r=e.tile,s=function(){return r._priority},a=e._serverKeys[t],c=new sr({throttle:!0,throttleByServer:!0,type:Zs.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===mi.CANCELLED){rme(e,i);return}return cJ(e,-1),u}}).catch(function(u){if(!(n<e._cancelCount)){if(o.request.cancelled||o.request.state===mi.CANCELLED){rme(e,i);return}cJ(e,-1),sme(e,t,u)}})}async function jje(e){let t=e._cancelCount,n=await Promise.all(e._arrayFetchPromises);if(t<e._cancelCount)return;let i=n.map((r,s)=>qje(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 qje(e,t,n){if(l(t))try{let i=rg(t),o=e._tileset,r=e._innerContentResources[n],s=e._tile;i.contentType===Js.EXTERNAL_TILESET&&(e._externalTilesetCount++,s.hasTilesetContent=!0),e._disableSkipLevelOfDetail=e._disableSkipLevelOfDetail||i.contentType===Js.GEOMETRY||i.contentType===Js.VECTOR;let a,c=Cx[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 h=s.implicitSubtree,p=s.implicitCoordinates;a.metadata=h.getContentMetadataView(p,n)}else s.hasImplicitContent||(a.metadata=xx(o,d));let u=Ix(o,d);return l(u)&&(a.group=new SC({metadata:u})),a}catch(i){sme(e,n,i)}}function sme(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}`))}pm.prototype.cancelRequests=function(){for(let e=0;e<this._requests.length;e++){let t=this._requests[e];l(t)&&t.cancel()}};pm.prototype.hasProperty=function(e,t){return!1};pm.prototype.getFeature=function(e){};pm.prototype.applyDebugSettings=function(e,t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].applyDebugSettings(e,t)};pm.prototype.applyStyle=function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].applyStyle(e)};pm.prototype.update=function(e,t){let n=this._contents,i=n.length,o=!0;for(let r=0;r<i;++r)n[r].update(e,t),o=o&&n[r].ready;!this._ready&&o&&(this._ready=!0)};pm.prototype.pick=function(e,t,n){if(!this._ready)return;let i,o=Number.POSITIVE_INFINITY,r=this._contents,s=r.length;for(let a=0;a<s;++a){let c=r[a].pick(e,t,n);if(!l(c))continue;let d=m.distance(e.origin,c);d<o&&(i=c,o=d)}if(l(i))return n};pm.prototype.isDestroyed=function(){return!1};pm.prototype.destroy=function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return me(this)};var V2=pm;var gJn=y(C(),1);var qKn=y(C(),1);var wKn=y(C(),1);var ame=Math.cos,cme=Math.sin,$je=Math.sqrt,lJ={};lJ.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,h=ame(u),p=cme(u),g=a.z*p,f=c.longitude+i*e.granYSin+o*e.granXCos,b=h*ame(f),x=h*cme(f),I=a.x*b,_=a.y*x,E=$je(I*b+_*x+g*p);if(r.x=I/E,r.y=_/E,r.z=g/E,n){let S=e.stNwCorner;l(S)?(u=S.latitude-e.stGranYCos*i+o*e.stGranXSin,f=S.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 e8e=new Qi,Am=new m,t8e=new ge,KQ=new m,G2=new Di;function lme(e,t,n,i,o,r,s){let a=Math.cos(t),c=i*a,d=n*a,u=Math.sin(t),h=i*u,p=n*u;G2._ellipsoid=ie.default,Am=G2.project(e,Am),Am=m.subtract(Am,KQ,Am);let g=Qi.fromRotation(t,e8e);Am=Qi.multiplyByVector(g,Am,Am),Am=m.add(Am,KQ,Am),e=G2.unproject(Am,e),r-=1,s-=1;let f=e.latitude,b=f+r*p,x=f-c*s,I=f-c*s+r*p,_=Math.max(f,b,x,I),E=Math.min(f,b,x,I),S=e.longitude,R=S+r*d,G=S+s*h,B=S+s*h+r*d,w=Math.max(S,R,G,B),F=Math.min(S,R,G,B);return{north:_,south:E,east:w,west:F,granYCos:c,granYSin:h,granXCos:d,granXSin:p,nwCorner:e}}lJ.computeOptions=function(e,t,n,i,o,r,s){let a=e.east,c=e.west,d=e.north,u=e.south,h=!1,p=!1;d===Z.PI_OVER_TWO&&(h=!0),u===-Z.PI_OVER_TWO&&(p=!0);let g,f=d-u;c>a?g=Z.TWO_PI-c+a:g=a-c;let b=Math.ceil(g/t)+1,x=Math.ceil(f/t)+1,I=g/(b-1),_=f/(x-1),E=le.northwest(e,r),S=le.center(e,t8e);(n!==0||i!==0)&&(S.longitude<E.longitude&&(S.longitude+=Z.TWO_PI),G2._ellipsoid=ie.default,KQ=G2.project(S,KQ));let R=_,G=I,B=0,w=0,F=le.clone(e,o),P={granYCos:R,granYSin:B,granXCos:G,granXSin:w,nwCorner:E,boundingRectangle:F,width:b,height:x,northCap:h,southCap:p};if(n!==0){let A=lme(E,n,I,_,S,b,x);d=A.north,u=A.south,a=A.east,c=A.west,P.granYCos=A.granYCos,P.granYSin=A.granYSin,P.granXCos=A.granXCos,P.granXSin=A.granXSin,F.north=d,F.south=u,F.east=a,F.west=c}if(i!==0){n=n-i;let A=le.northwest(F,s),T=lme(A,n,I,_,S,b,x);P.stGranYCos=T.granYCos,P.stGranXCos=T.granXCos,P.stGranYSin=T.granYSin,P.stGranXSin=T.granXSin,P.stNwCorner=A,P.stWest=T.west,P.stSouth=T.south}return P};var js=lJ;var n8e=new ue,i8e=new ue,o8e=new m,r8e=new le;function dme(e,t){let n=e._ellipsoid,i=t.height,o=t.width,r=t.northCap,s=t.southCap,a=i,c=2,d=0,u=4;r&&(c-=1,a-=1,d+=1,u-=2),s&&(c-=1,a-=1,d+=1,u-=2),d+=c*o+2*a-u;let h=new Float64Array(d*3),p=0,g=0,f,b=o8e;if(r)js.computePosition(t,n,!1,g,0,b),h[p++]=b.x,h[p++]=b.y,h[p++]=b.z;else for(f=0;f<o;f++)js.computePosition(t,n,!1,g,f,b),h[p++]=b.x,h[p++]=b.y,h[p++]=b.z;for(f=o-1,g=1;g<i;g++)js.computePosition(t,n,!1,g,f,b),h[p++]=b.x,h[p++]=b.y,h[p++]=b.z;if(g=i-1,!s)for(f=o-2;f>=0;f--)js.computePosition(t,n,!1,g,f,b),h[p++]=b.x,h[p++]=b.y,h[p++]=b.z;for(f=0,g=i-2;g>0;g--)js.computePosition(t,n,!1,g,f,b),h[p++]=b.x,h[p++]=b.y,h[p++]=b.z;let x=h.length/3*2,I=Me.createTypedArray(h.length/3,x),_=0;for(let S=0;S<h.length/3-1;S++)I[_++]=S,I[_++]=S+1;I[_++]=h.length/3-1,I[_++]=0;let E=new pt({attributes:new xn,primitiveType:We.LINES});return E.attributes.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:h}),E.indices=I,E}function s8e(e,t){let n=e._surfaceHeight,i=e._extrudedHeight,o=e._ellipsoid,r=dme(e,t),s=t.height,a=t.width,c=_i.scaleToGeodeticHeight(r.attributes.position.values,n,o,!1),d=c.length,u=new Float64Array(d*2);u.set(c);let h=_i.scaleToGeodeticHeight(r.attributes.position.values,i,o);u.set(h,d),r.attributes.position.values=u;let p=t.northCap,g=t.southCap,f=4;p&&(f-=1),g&&(f-=1);let b=(u.length/3+f)*2,x=Me.createTypedArray(u.length/3,b);d=u.length/6;let I=0;for(let E=0;E<d-1;E++)x[I++]=E,x[I++]=E+1,x[I++]=E+d,x[I++]=E+d+1;x[I++]=d-1,x[I++]=0,x[I++]=d+d-1,x[I++]=d,x[I++]=0,x[I++]=d;let _;if(p)_=s-1;else{let E=a-1;x[I++]=E,x[I++]=E+d,_=a+s-2}if(x[I++]=_,x[I++]=_+d,!g){let E=a+_-1;x[I++]=E,x[I]=E+d}return r.indices=x,r}function xT(e){e=e??Y.EMPTY_OBJECT;let t=e.rectangle,n=e.granularity??Z.RADIANS_PER_DEGREE,i=e.ellipsoid??ie.default,o=e.rotation??0,r=e.height??0,s=e.extrudedHeight??r;this._rectangle=le.clone(t),this._granularity=n,this._ellipsoid=i,this._surfaceHeight=Math.max(r,s),this._rotation=o,this._extrudedHeight=Math.min(r,s),this._offsetAttribute=e.offsetAttribute,this._workerName="createRectangleOutlineGeometry"}xT.packedLength=le.packedLength+ie.packedLength+5;xT.pack=function(e,t,n){return n=n??0,le.pack(e._rectangle,t,n),n+=le.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._granularity,t[n++]=e._surfaceHeight,t[n++]=e._rotation,t[n++]=e._extrudedHeight,t[n]=e._offsetAttribute??-1,t};var ume=new le,mme=ie.clone(ie.UNIT_SPHERE),CT={rectangle:ume,ellipsoid:mme,granularity:void 0,height:void 0,rotation:void 0,extrudedHeight:void 0,offsetAttribute:void 0};xT.unpack=function(e,t,n){t=t??0;let i=le.unpack(e,t,ume);t+=le.packedLength;let o=ie.unpack(e,t,mme);t+=ie.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],d=e[t];return l(n)?(n._rectangle=le.clone(i,n._rectangle),n._ellipsoid=ie.clone(o,n._ellipsoid),n._surfaceHeight=s,n._rotation=a,n._extrudedHeight=c,n._offsetAttribute=d===-1?void 0:d,n):(CT.granularity=r,CT.height=s,CT.rotation=a,CT.extrudedHeight=c,CT.offsetAttribute=d===-1?void 0:d,new xT(CT))};var a8e=new ge;xT.createGeometry=function(e){let t=e._rectangle,n=e._ellipsoid,i=js.computeOptions(t,e._granularity,e._rotation,0,r8e,a8e),o,r;if(Z.equalsEpsilon(t.north,t.south,Z.EPSILON10)||Z.equalsEpsilon(t.east,t.west,Z.EPSILON10))return;let s=e._surfaceHeight,a=e._extrudedHeight,c=!Z.equalsEpsilon(s,a,0,Z.EPSILON2),d;if(c){if(o=s8e(e,i),l(e._offsetAttribute)){let p=o.attributes.position.values.length/3,g=new Uint8Array(p);e._offsetAttribute===pn.TOP?g=g.fill(1,0,p/2):(d=e._offsetAttribute===pn.NONE?0:1,g=g.fill(d)),o.attributes.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:g})}let u=ue.fromRectangle3D(t,n,s,i8e),h=ue.fromRectangle3D(t,n,a,n8e);r=ue.union(u,h)}else{if(o=dme(e,i),o.attributes.position.values=_i.scaleToGeodeticHeight(o.attributes.position.values,s,n,!1),l(e._offsetAttribute)){let u=o.attributes.position.values.length;d=e._offsetAttribute===pn.NONE?0:1;let h=new Uint8Array(u/3).fill(d);o.attributes.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:h})}r=ue.fromRectangle3D(t,n,s)}return new pt({attributes:o.attributes,indices:o.indices,primitiveType:We.LINES,boundingSphere:r,offsetAttribute:e._offsetAttribute})};var _x=xT;function _T(e){this.rectangle=le.clone(e.rectangle),this.minimumHeight=e.minimumHeight??0,this.maximumHeight=e.maximumHeight??0,this.southwestCornerCartesian=new m,this.northeastCornerCartesian=new m,this.westNormal=new m,this.southNormal=new m,this.eastNormal=new m,this.northNormal=new m;let t=e.ellipsoid??ie.WGS84;m8e(this,e.rectangle,t),this._orientedBoundingBox=void 0,this._boundingSphere=void 0,(e.computeBoundingVolumes??!0)&&this.computeBoundingVolumes(t)}Object.defineProperties(_T.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});_T.prototype.computeBoundingVolumes=function(e){this._orientedBoundingBox=vn.fromRectangle(this.rectangle,this.minimumHeight,this.maximumHeight,e),this._boundingSphere=ue.fromOrientedBoundingBox(this._orientedBoundingBox)};var hme=new m,JQ=new m,fme=new m,c8e=new m,l8e=new m,d8e=new m,u8e=new m,gm=new ge,pme=new An(m.UNIT_X,0),IT=new En;function m8e(e,t,n){n.cartographicToCartesian(le.southwest(t),e.southwestCornerCartesian),n.cartographicToCartesian(le.northeast(t),e.northeastCornerCartesian),gm.longitude=t.west,gm.latitude=(t.south+t.north)*.5,gm.height=0;let i=n.cartographicToCartesian(gm,d8e),o=m.cross(i,m.UNIT_Z,c8e);m.normalize(o,e.westNormal),gm.longitude=t.east;let r=n.cartographicToCartesian(gm,u8e),s=m.cross(m.UNIT_Z,r,hme);m.normalize(s,e.eastNormal);let a=m.subtract(i,r,hme);m.magnitude(a)===0&&(a=m.clone(o,a));let c=m.normalize(a,l8e),d=t.south,u;if(d>0){gm.longitude=(t.west+t.east)*.5,gm.latitude=d;let b=n.cartographicToCartesian(gm,IT.origin);m.clone(c,IT.direction);let x=An.fromPointNormal(e.southwestCornerCartesian,e.westNormal,pme);fi.rayPlane(IT,x,e.southwestCornerCartesian),u=n.geodeticSurfaceNormal(b,JQ)}else u=n.geodeticSurfaceNormalCartographic(le.southeast(t),JQ);let h=m.cross(u,a,fme);m.normalize(h,e.southNormal);let p=t.north,g;if(p<0){gm.longitude=(t.west+t.east)*.5,gm.latitude=p;let b=n.cartographicToCartesian(gm,IT.origin);m.negate(c,IT.direction);let x=An.fromPointNormal(e.northeastCornerCartesian,e.eastNormal,pme);fi.rayPlane(IT,x,e.northeastCornerCartesian),g=n.geodeticSurfaceNormal(b,JQ)}else g=n.geodeticSurfaceNormalCartographic(le.northwest(t),JQ);let f=m.cross(a,g,fme);m.normalize(f,e.northNormal)}var h8e=new m,f8e=new m,p8e=new m(0,-1,0),A8e=new m(0,0,-1),Ame=new m;function g8e(e,t){let n=t.camera,i=n.positionWC,o=n.positionCartographic,r=0;if(!le.contains(e.rectangle,o)){let d=e.southwestCornerCartesian,u=e.northeastCornerCartesian,h=e.westNormal,p=e.southNormal,g=e.eastNormal,f=e.northNormal;t.mode!==re.SCENE3D&&(d=t.mapProjection.project(le.southwest(e.rectangle),h8e),d.z=d.y,d.y=d.x,d.x=0,u=t.mapProjection.project(le.northeast(e.rectangle),f8e),u.z=u.y,u.y=u.x,u.x=0,h=p8e,g=m.UNIT_Y,p=A8e,f=m.UNIT_Z);let b=m.subtract(i,d,Ame),x=m.dot(b,h),I=m.dot(b,p),_=m.subtract(i,u,Ame),E=m.dot(_,g),S=m.dot(_,f);x>0?r+=x*x:E>0&&(r+=E*E),I>0?r+=I*I:S>0&&(r+=S*S)}let s,a,c;if(t.mode===re.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)}_T.prototype.distanceToCamera=function(e){let t=g8e(this,e);if(e.mode===re.SCENE3D&&l(this._orientedBoundingBox)){let n=Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC));return Math.max(t,n)}return t};_T.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};_T.prototype.createDebugVolume=function(e){let t=new X.clone(X.IDENTITY),n=new _x({rectangle:this.rectangle,height:this.minimumHeight,extrudedHeight:this.maximumHeight}),i=new wt({geometry:n,id:"outline",modelMatrix:t,attributes:{color:tn.fromColor(e)}});return new Nn({geometryInstances:i,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})};var tu=_T;var i4n=y(C(),1);var NJn=y(C(),1);var _Jn=y(C(),1);var Z2={},b8e=new m,gme=new m,bme=new m,yme=new m,Cme=new vn;Z2.validOutline=function(e){let n=vn.fromPoints(e,Cme).halfAxes,i=$.getColumn(n,0,gme),o=$.getColumn(n,1,bme),r=$.getColumn(n,2,yme),s=m.magnitude(i),a=m.magnitude(o),c=m.magnitude(r);return!(s===0&&(a===0||c===0)||a===0&&c===0)};Z2.computeProjectTo2DArguments=function(e,t,n,i){let o=vn.fromPoints(e,Cme),r=o.halfAxes,s=$.getColumn(r,0,gme),a=$.getColumn(r,1,bme),c=$.getColumn(r,2,yme),d=m.magnitude(s),u=m.magnitude(a),h=m.magnitude(c),p=Math.min(d,u,h);if(d===0&&(u===0||h===0)||u===0&&h===0)return!1;let g,f;return(p===u||p===h)&&(g=s),p===d?g=a:p===h&&(f=a),(p===d||p===u)&&(f=c),m.normalize(g,n),m.normalize(f,i),m.clone(o.center,t),!0};function xme(e,t,n,i,o){let r=m.subtract(e,t,b8e),s=m.dot(n,r),a=m.dot(i,r);return D.fromElements(s,a,o)}Z2.createProjectPointsTo2DFunction=function(e,t,n){return function(i){let o=new Array(i.length);for(let r=0;r<i.length;r++)o[r]=xme(i[r],e,t,n);return o}};Z2.createProjectPointTo2DFunction=function(e,t,n){return function(i,o){return xme(i,e,t,n,o)}};var sg=Z2;function y8e(e){let t=e.length,n=new Float64Array(t*3),i=Me.createTypedArray(t,t*2),o=0,r=0;for(let a=0;a<t;a++){let c=e[a];n[o++]=c.x,n[o++]=c.y,n[o++]=c.z,i[r++]=a,i[r++]=(a+1)%t}let s=new xn({position:new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:n})});return new pt({attributes:s,indices:i,primitiveType:We.LINES})}function Ex(e){e=e??Y.EMPTY_OBJECT;let t=e.polygonHierarchy;this._polygonHierarchy=t,this._workerName="createCoplanarPolygonOutlineGeometry",this.packedLength=ti.computeHierarchyPackedLength(t,m)+1}Ex.fromPositions=function(e){e=e??Y.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions}};return new Ex(t)};Ex.pack=function(e,t,n){return n=n??0,n=ti.packPolygonHierarchy(e._polygonHierarchy,t,n,m),t[n]=e.packedLength,t};var C8e={polygonHierarchy:{}};Ex.unpack=function(e,t,n){t=t??0;let i=ti.unpackPolygonHierarchy(e,t,m);t=i.startingIndex,delete i.startingIndex;let o=e[t];return l(n)||(n=new Ex(C8e)),n._polygonHierarchy=i,n.packedLength=o,n};Ex.createGeometry=function(e){let t=e._polygonHierarchy,n=t.positions;if(n=Xo(n,m.equalsEpsilon,!0),n.length<3||!sg.validOutline(n))return;let o=ti.polygonOutlinesFromHierarchy(t,!1);if(o.length===0)return;let r=[];for(let c=0;c<o.length;c++){let d=new wt({geometry:y8e(o[c])});r.push(d)}let s=Yn.combineInstances(r)[0],a=ue.fromPoints(t.positions);return new pt({attributes:s.attributes,indices:s.indices,primitiveType:s.primitiveType,boundingSphere:a})};var bm=Ex;var jQ=new ge;function B2(e){let t=xA.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=V8e(t,n,i,o);this._boundingPlanes=r;let s=w8e(r);this._vertices=s,this._edgeNormals=new Array(6),this._edgeNormals[0]=gJ(r[0],s.slice(0,4));let a;for(a=0;a<4;a++)this._edgeNormals[0][a]=m.negate(this._edgeNormals[0][a],this._edgeNormals[0][a]);for(this._edgeNormals[1]=gJ(r[1],s.slice(4,8)),a=0;a<4;a++)this._edgeNormals[2+a]=gJ(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();jQ=o.cartesianToCartographic(c,jQ),jQ.height=(i+n)/2,this.center=o.cartographicToCartesian(jQ,c),this._boundingSphere=ue.fromPoints(s)}var x8e=new m,I8e=new ge,_8e=new m,E8e=new ge,T8e=new m,S8e=new m,L8e=new m,R8e=new m;function V8e(e,t,n,i){let o=new Array(6),r=e.getCenter(),s=i.geodeticSurfaceNormal(r,x8e),a=i.cartesianToCartographic(r,I8e);a.height=n;let c=i.cartographicToCartesian(a,_8e),d=An.fromPointNormal(c,s);o[0]=d;let u=0,h,p=[],g,f;for(h=0;h<4;h++){g=e.getVertex(h),p[h]=g,f=i.cartesianToCartographic(g,E8e),f.height=t;let x=An.getPointDistance(d,i.cartographicToCartesian(f,T8e));x<u&&(u=x)}let b=An.clone(d);for(b.normal=m.negate(b.normal,b.normal),b.distance=b.distance*-1+u,o[1]=b,h=0;h<4;h++){g=p[h];let x=p[(h+1)%4],I=i.geodeticSurfaceNormal(g,S8e),_=m.subtract(x,g,R8e),E=m.cross(_,I,L8e);E=m.normalize(E,E),o[2+h]=An.fromPointNormal(g,E)}return o}var Tx=new m,Sx=new m,Lx=new m,dJ=new m,uJ=new m,mJ=new m,G8e=new m,Z8e=new m,B8e=new m,hJ=new m,fJ=new m,pJ=new m,y0=new m,ip=new $;function Ime(e,t,n){Tx=e.normal,Sx=t.normal,Lx=n.normal,dJ=m.multiplyByScalar(e.normal,-e.distance,dJ),uJ=m.multiplyByScalar(t.normal,-t.distance,uJ),mJ=m.multiplyByScalar(n.normal,-n.distance,mJ),hJ=m.multiplyByScalar(m.cross(Sx,Lx,G8e),m.dot(dJ,Tx),hJ),fJ=m.multiplyByScalar(m.cross(Lx,Tx,Z8e),m.dot(uJ,Sx),fJ),pJ=m.multiplyByScalar(m.cross(Tx,Sx,B8e),m.dot(mJ,Lx),pJ),ip[0]=Tx.x,ip[1]=Sx.x,ip[2]=Lx.x,ip[3]=Tx.y,ip[4]=Sx.y,ip[5]=Lx.y,ip[6]=Tx.z,ip[7]=Sx.z,ip[8]=Lx.z;let i=$.determinant(ip);return y0=m.add(hJ,fJ,y0),y0=m.add(y0,pJ,y0),new m(y0.x/i,y0.y/i,y0.z/i)}function w8e(e){let t=new Array(8);for(let n=0;n<4;n++)t[n]=Ime(e[0],e[2+(n+3)%4],e[2+n%4]),t[n+4]=Ime(e[1],e[2+(n+3)%4],e[2+n%4]);return t}var AJ=new m,ET=new m;function gJ(e,t){let n=[];for(let i=0;i<4;i++)AJ=m.subtract(t[(i+1)%4],t[i],AJ),ET=m.cross(e.normal,AJ,ET),ET=m.normalize(ET,ET),n[i]=m.clone(ET);return n}Object.defineProperties(B2.prototype,{boundingVolume:{get:function(){return this}},boundingSphere:{get:function(){return this._boundingSphere}}});var bJ=new m;B2.prototype.distanceToCamera=function(e){let t=e.camera.positionWC,n=[],i=[],o;An.getPointDistance(this._boundingPlanes[0],t)>0?(n.push(0),i.push(this._planeVertices[0]),o=this._edgeNormals[0]):An.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,An.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=yJ(An.projectPointOntoPlane(c,t,bJ),i[0],c,o),m.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=_me(t,p[0],p[1]),m.distance(a,t)}let u=Number.MAX_VALUE,h;for(r=0;r<2;r++)c=this._boundingPlanes[n[r]],a=yJ(An.projectPointOntoPlane(c,t,bJ),i[r],c,this._edgeNormals[n[r]]),h=m.distanceSquared(a,t),h<u&&(u=h);return Math.sqrt(u)}else if(n.length>3)return a=yJ(An.projectPointOntoPlane(this._boundingPlanes[1],t,bJ),this._planeVertices[1],this._boundingPlanes[1],this._edgeNormals[1]),m.distance(a,t);let d=n[1]===2&&n[2]===5?0:1;return n[0]===0?m.distance(t,this._vertices[(n[1]-2+d)%4]):m.distance(t,this._vertices[4+(n[1]-2+d)%4])};var X8e=new m,W8e=new m;function _me(e,t,n){let i=m.subtract(n,t,X8e),o=m.subtract(e,t,W8e),r=m.dot(i,o);if(r<=0)return t;let s=m.dot(i,i);return r>=s?n:(r=r/s,new m((1-r)*t.x+r*n.x,(1-r)*t.y+r*n.y,(1-r)*t.z+r*n.z))}var F8e=new An(m.UNIT_X,0);function yJ(e,t,n,i){let o=Number.MAX_VALUE,r,s,a;for(let c=0;c<t.length;c++){let d=An.fromPointNormal(t[c],i[c],F8e);An.getPointDistance(d,e)<0||(a=_me(e,t[c],t[(c+1)%4]),r=m.distance(e,a),r<o&&(o=r,s=a))}return l(s)?s:e}B2.prototype.intersectPlane=function(e){let t=0,n=0;for(let i=0;i<this._vertices.length;i++)m.dot(e.normal,this._vertices[i])+e.distance<0?n++:t++;return t===this._vertices.length?on.INSIDE:n===this._vertices.length?on.OUTSIDE:on.INTERSECTING};B2.prototype.createDebugVolume=function(e){let t=new X.clone(X.IDENTITY),n=new bm({polygonHierarchy:{positions:this._planeVertices[0]}}),i=bm.createGeometry(n),o=new wt({geometry:i,id:"outline",modelMatrix:t,attributes:{color:tn.fromColor(e)}}),r=new bm({polygonHierarchy:{positions:this._planeVertices[1]}}),s=bm.createGeometry(r),a=new wt({geometry:s,id:"outline",modelMatrix:t,attributes:{color:tn.fromColor(e)}}),c=[];for(let d=0;d<4;d++){let u=new bm({polygonHierarchy:{positions:this._planeVertices[2+d]}}),h=bm.createGeometry(u);c[d]=new wt({geometry:h,id:"outline",modelMatrix:t,attributes:{color:tn.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 w2=B2;var X4n=y(C(),1);var _4n=y(C(),1);var b4n=y(C(),1);var P8e=new m(1,1,1),qQ=Math.cos,$Q=Math.sin;function TT(e){e=e??Y.EMPTY_OBJECT;let t=e.radii??P8e,n=e.innerRadii??t,i=e.minimumClock??0,o=e.maximumClock??Z.TWO_PI,r=e.minimumCone??0,s=e.maximumCone??Z.PI,a=Math.round(e.stackPartitions??10),c=Math.round(e.slicePartitions??8),d=Math.round(e.subdivisions??128);this._radii=m.clone(t),this._innerRadii=m.clone(n),this._minimumClock=i,this._maximumClock=o,this._minimumCone=r,this._maximumCone=s,this._stackPartitions=a,this._slicePartitions=c,this._subdivisions=d,this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipsoidOutlineGeometry"}TT.packedLength=2*m.packedLength+8;TT.pack=function(e,t,n){return n=n??0,m.pack(e._radii,t,n),n+=m.packedLength,m.pack(e._innerRadii,t,n),n+=m.packedLength,t[n++]=e._minimumClock,t[n++]=e._maximumClock,t[n++]=e._minimumCone,t[n++]=e._maximumCone,t[n++]=e._stackPartitions,t[n++]=e._slicePartitions,t[n++]=e._subdivisions,t[n]=e._offsetAttribute??-1,t};var Eme=new m,Tme=new m,ag={radii:Eme,innerRadii:Tme,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0,offsetAttribute:void 0};TT.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,Eme);t+=m.packedLength;let o=m.unpack(e,t,Tme);t+=m.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t];return l(n)?(n._radii=m.clone(i,n._radii),n._innerRadii=m.clone(o,n._innerRadii),n._minimumClock=r,n._maximumClock=s,n._minimumCone=a,n._maximumCone=c,n._stackPartitions=d,n._slicePartitions=u,n._subdivisions=h,n._offsetAttribute=p===-1?void 0:p,n):(ag.minimumClock=r,ag.maximumClock=s,ag.minimumCone=a,ag.maximumCone=c,ag.stackPartitions=d,ag.slicePartitions=u,ag.subdivisions=h,ag.offsetAttribute=p===-1?void 0:p,new TT(ag))};TT.createGeometry=function(e){let t=e._radii;if(t.x<=0||t.y<=0||t.z<=0)return;let n=e._innerRadii;if(n.x<=0||n.y<=0||n.z<=0)return;let i=e._minimumClock,o=e._maximumClock,r=e._minimumCone,s=e._maximumCone,a=e._subdivisions,c=ie.fromCartesian3(t),d=e._slicePartitions+1,u=e._stackPartitions+1;d=Math.round(d*Math.abs(o-i)/Z.TWO_PI),u=Math.round(u*Math.abs(s-r)/Z.PI),d<2&&(d=2),u<2&&(u=2);let h=0,p=1,g=n.x!==t.x||n.y!==t.y||n.z!==t.z,f=!1,b=!1;g&&(p=2,r>0&&(f=!0,h+=d),s<Math.PI&&(b=!0,h+=d));let x=a*p*(u+d),I=new Float64Array(x*3),_=2*(x+h-(d+u)*p),E=Me.createTypedArray(x,_),S,R,G,B,w=0,F=new Array(u),P=new Array(u);for(S=0;S<u;S++)B=r+S*(s-r)/(u-1),F[S]=$Q(B),P[S]=qQ(B);let A=new Array(a),T=new Array(a);for(S=0;S<a;S++)G=i+S*(o-i)/(a-1),A[S]=$Q(G),T[S]=qQ(G);for(S=0;S<u;S++)for(R=0;R<a;R++)I[w++]=t.x*F[S]*T[R],I[w++]=t.y*F[S]*A[R],I[w++]=t.z*P[S];if(g)for(S=0;S<u;S++)for(R=0;R<a;R++)I[w++]=n.x*F[S]*T[R],I[w++]=n.y*F[S]*A[R],I[w++]=n.z*P[S];for(F.length=a,P.length=a,S=0;S<a;S++)B=r+S*(s-r)/(a-1),F[S]=$Q(B),P[S]=qQ(B);for(A.length=d,T.length=d,S=0;S<d;S++)G=i+S*(o-i)/(d-1),A[S]=$Q(G),T[S]=qQ(G);for(S=0;S<a;S++)for(R=0;R<d;R++)I[w++]=t.x*F[S]*T[R],I[w++]=t.y*F[S]*A[R],I[w++]=t.z*P[S];if(g)for(S=0;S<a;S++)for(R=0;R<d;R++)I[w++]=n.x*F[S]*T[R],I[w++]=n.y*F[S]*A[R],I[w++]=n.z*P[S];for(w=0,S=0;S<u*p;S++){let W=S*a;for(R=0;R<a-1;R++)E[w++]=W+R,E[w++]=W+R+1}let L=u*a*p;for(S=0;S<d;S++)for(R=0;R<a-1;R++)E[w++]=L+S+R*d,E[w++]=L+S+(R+1)*d;if(g)for(L=u*a*p+d*a,S=0;S<d;S++)for(R=0;R<a-1;R++)E[w++]=L+S+R*d,E[w++]=L+S+(R+1)*d;if(g){let W=u*a*p,M=W+a*d;if(f)for(S=0;S<d;S++)E[w++]=W+S,E[w++]=M+S;if(b)for(W+=a*d-d,M+=a*d-d,S=0;S<d;S++)E[w++]=W+S,E[w++]=M+S}let V=new xn({position:new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:I})});if(l(e._offsetAttribute)){let W=I.length,M=e._offsetAttribute===pn.NONE?0:1,Q=new Uint8Array(W/3).fill(M);V.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:Q})}return new pt({attributes:V,indices:E,primitiveType:We.LINES,boundingSphere:ue.fromEllipsoid(c),offsetAttribute:e._offsetAttribute})};var nu=TT;function ST(e){let t=e.radius??1,i={radii:new m(t,t,t),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,subdivisions:e.subdivisions};this._ellipsoidGeometry=new nu(i),this._workerName="createSphereOutlineGeometry"}ST.packedLength=nu.packedLength;ST.pack=function(e,t,n){return nu.pack(e._ellipsoidGeometry,t,n)};var M8e=new nu,Rx={radius:void 0,radii:new m,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0};ST.unpack=function(e,t,n){let i=nu.unpack(e,t,M8e);return Rx.stackPartitions=i._stackPartitions,Rx.slicePartitions=i._slicePartitions,Rx.subdivisions=i._subdivisions,l(n)?(m.clone(i._radii,Rx.radii),n._ellipsoidGeometry=new nu(Rx),n):(Rx.radius=i._radii.x,new ST(Rx))};ST.createGeometry=function(e){return nu.createGeometry(e._ellipsoidGeometry)};var cg=ST;function LT(e,t){t===0&&(t=Z.EPSILON7),this._boundingSphere=new ue(e,t)}Object.defineProperties(LT.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}}});LT.prototype.distanceToCamera=function(e){let t=this._boundingSphere;return Math.max(0,m.distance(t.center,e.camera.positionWC)-t.radius)};LT.prototype.intersectPlane=function(e){return ue.intersectPlane(this._boundingSphere,e)};LT.prototype.update=function(e,t){m.clone(e,this._boundingSphere.center),this._boundingSphere.radius=t};LT.prototype.createDebugVolume=function(e){let t=new cg({radius:this.radius}),n=X.fromTranslation(this.center,new X.clone(X.IDENTITY)),i=new wt({geometry:t,id:"outline",modelMatrix:n,attributes:{color:tn.fromColor(e)}});return new Nn({geometryInstances:i,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})};var lg=LT;var H4n=y(C(),1);var v8e=new m,N8e=new m,D8e=new m,Q8e=new m;function Vx(e,t,n){n=m.cross(e,t,n);let i=m.magnitude(n);return m.multiplyByScalar(n,Z.EPSILON7/i,n)}function CJ(e,t){let n=m.normalize(e,Q8e),i=m.equalsEpsilon(n,m.UNIT_X,Z.EPSILON6)?m.UNIT_Y:m.UNIT_X;return Vx(e,i,t)}function Sme(e){let t=$.getColumn(e,0,v8e),n=$.getColumn(e,1,N8e),i=$.getColumn(e,2,D8e),o=m.equals(t,m.ZERO),r=m.equals(n,m.ZERO),s=m.equals(i,m.ZERO);return!o&&!r&&!s?e:o&&r&&s?(e[0]=Z.EPSILON7,e[4]=Z.EPSILON7,e[8]=Z.EPSILON7,e):(o&&!r&&!s?t=Vx(n,i,t):!o&&r&&!s?n=Vx(t,i,n):!o&&!r&&s?i=Vx(n,t,i):o?r?s||(t=CJ(i,t),n=Vx(i,t,n)):(t=CJ(n,t),i=Vx(n,t,i)):(n=CJ(t,n),i=Vx(n,t,i)),$.setColumn(e,0,t,e),$.setColumn(e,1,n,e),$.setColumn(e,2,i,e),e)}function RT(e,t){t=Sme(t),this._orientedBoundingBox=new vn(e,t),this._boundingSphere=ue.fromOrientedBoundingBox(this._orientedBoundingBox)}Object.defineProperties(RT.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});RT.prototype.distanceToCamera=function(e){return Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC))};RT.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};RT.prototype.update=function(e,t){m.clone(e,this._orientedBoundingBox.center),t=Sme(t),$.clone(t,this._orientedBoundingBox.halfAxes),ue.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere)};RT.prototype.createDebugVolume=function(e){let t=new nh({minimum:new m(-1,-1,-1),maximum:new m(1,1,1)}),n=X.fromRotationTranslation(this.boundingVolume.halfAxes,this.boundingVolume.center),i=new wt({geometry:t,id:"outline",modelMatrix:n,attributes:{color:tn.fromColor(e)}});return new Nn({geometryInstances:i,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})};var hd=RT;function pr(e,t,n,i){this._tileset=e,this._header=n;let o=l(n.contents),r=o&&n.contents.length>1||Ii(n,"3DTILES_multiple_contents"),s=o&&!r?n.contents[0]:n.content;this._contentHeader=s,this.transform=l(n.transform)?X.unpack(n.transform):X.clone(X.IDENTITY);let a=l(i)?i.computedTransform:e.modelMatrix,c=X.multiply(a,this.transform,new X),d=l(i)?i._initialTransform:X.IDENTITY;this._initialTransform=X.multiply(d,this.transform,new X),this.computedTransform=c,this.metadata=R2(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 h;l(n.viewerRequestVolume)&&(h=this.createBoundingVolume(n.viewerRequestVolume,c)),this._viewerRequestVolume=h,this.geometricError=n.geometricError,this._geometricError=n.geometricError,l(this._geometricError)||(this._geometricError=l(i)?i._geometricError:e._geometricError,pr._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")&&pr._deprecationWarning("lowercase-refine",`This tile uses a lowercase refine "${n.refine}". Instead use "${n.refine.toUpperCase()}".`),p=n.refine.toUpperCase()==="REPLACE"?tr.REPLACE:tr.ADD):l(i)?p=i.refine:p=tr.REPLACE,this.refine=p,this.children=[],this.parent=i;let g,f=!1,b,x,I;if(t=Ve.createIfNeeded(t),r)b=ir.UNLOADED,x=t.clone();else if(l(s)){let R=s.uri;l(s.url)&&(pr._deprecationWarning("contentUrl",'This tileset JSON uses the "content.url" property which has been deprecated. Use "content.uri" instead.'),R=s.url),R===""?(pr._deprecationWarning("contentUriEmpty","content.uri property is an empty string, which creates a circular dependency, making this tileset invalid. Omit the content property instead"),g=new yT(e,this),f=!0,b=ir.READY):(b=ir.UNLOADED,x=t.getDerivedResource({url:R}),I=Sc.getServerKey(x.getUrlComponent()))}else g=new yT(e,this),f=!0,b=ir.READY;this._content=g,this._contentResource=x,this._contentState=b,this._expiredContent=void 0,this._serverKey=I,this.hasEmptyContent=f,this.hasTilesetContent=!1,this.hasImplicitContent=!1,this.hasRenderableContent=!f,this.hasImplicitContentMetadata=!1,this.hasMultipleContents=r,this.cacheNode=void 0;let _=n.expire,E,S;l(_)&&(E=_.duration,l(_.date)&&(S=j.fromIso8601(_.date))),this.expireDuration=E,this.expireDate=S,this.lastStyleTime=0,this._optimChildrenWithinParent=fm.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 j,this._commandsLength=0,this._color=void 0,this._colorDirty=!1,this._request=void 0}pr._deprecationWarning=_r;Object.defineProperties(pr.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 C0=new m;function U8e(e,t){let{tileset:n,boundingSphere:i}=e,{radius:o,center:r}=i,{camera:s}=t,a=m.multiplyByScalar(s.directionWC,e._centerZDepth,C0),c=m.add(s.positionWC,a,C0),d=m.subtract(c,r,C0);if(m.magnitude(d)>o){let S=m.normalize(d,C0),R=m.multiplyByScalar(S,o,C0),G=m.add(r,R,C0),B=m.subtract(G,s.positionWC,C0),w=m.normalize(B,C0);e._foveatedFactor=1-Math.abs(m.dot(s.directionWC,w))}else e._foveatedFactor=0;let p=e.refine===tr.REPLACE,g=n.isSkippingLevelOfDetail;if(p&&!g||!n.foveatedScreenSpaceError||n.foveatedConeSize===1||e._priorityProgressiveResolution&&p&&g||n._pass===zo.PRELOAD_FLIGHT||n._pass===zo.PRELOAD)return!1;let f=1-Math.cos(s.frustum.fov*.5),b=n.foveatedConeSize*f;if(e._foveatedFactor<=b)return!1;let x=f-b,I=Z.clamp((e._foveatedFactor-b)/x,0,1),_=n.foveatedInterpolationCallback(n.foveatedMinimumScreenSpaceErrorRelaxation,n.memoryAdjustedScreenSpaceError,I),E=e._screenSpaceError===0&&l(e.parent)?e.parent._screenSpaceError*.5:e._screenSpaceError;return n.memoryAdjustedScreenSpaceError-_<=E}var Zme=new j;pr.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,h=c.drawingBufferHeight*o,p;if(e.mode===re.SCENE2D||d instanceof gn){let g=d.offCenterFrustum;l(g)&&(d=g);let f=Math.max(d.top-d.bottom,d.right-d.left)/Math.max(u,h);p=s/f}else{let g=Math.max(this._distanceToCamera,Z.EPSILON7),f=d.sseDenominator;if(p=s*h/(g*f),i.dynamicScreenSpaceError){let b=i._dynamicScreenSpaceErrorComputedDensity,x=i.dynamicScreenSpaceErrorFactor,I=Z.fog(g,b)*x;p-=I}}return p/=e.pixelRatio,p};function k8e(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 Y8e(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}pr.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:Xs.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!==Xs.MASK_OUTSIDE,this._inRequestVolume=this.insideViewerRequestVolume(e),this._priorityReverseScreenSpaceError=Y8e(n,this),this._priorityProgressiveResolution=k8e(n,this),this.priorityDeferred=U8e(this,e),this._updatedVisibilityFrame=n._updatedVisibilityFrame};pr.prototype.updateExpiration=function(){if(l(this.expireDate)&&this.contentReady&&!this.hasEmptyContent&&!this.hasMultipleContents){let e=j.now(Zme);j.lessThan(this.expireDate,e)&&(this._contentState=ir.EXPIRED,this._expiredContent=this._content)}};function O8e(e){if(!l(e.expireDuration))return;let t=j.now(Zme);j.addSeconds(t,e.expireDuration,t),l(e.expireDate)?j.lessThan(e.expireDate,t)&&j.clone(t,e.expireDate):e.expireDate=j.clone(t)}function H8e(e){return function(){return e._priority}}pr.prototype.requestContent=function(){if(!this.hasEmptyContent)return this.hasMultipleContents?z8e(this):J8e(this)};function z8e(e){let t=e._content,n=e._tileset;if(!l(t)){let o=Ii(e._header,"3DTILES_multiple_contents")?e._header.extensions["3DTILES_multiple_contents"]:e._header;t=new V2(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 K8e(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===mi.CANCELLED){e._contentState=r,++t.statistics.numberOfAttemptedRequests;return}throw e._contentState=ir.FAILED,a}if(e.isDestroyed()){--t.statistics.numberOfPendingRequests;return}if(n.cancelled||n.state===mi.CANCELLED){e._contentState=r,--t.statistics.numberOfPendingRequests,++t.statistics.numberOfAttemptedRequests;return}try{let a=await j8e(e,s);return--t.statistics.numberOfPendingRequests,e.isDestroyed()?void 0:(i&&(e.expireDate=void 0),e._content=a,e._contentState=ir.PROCESSING,a)}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;throw e._contentState=ir.FAILED,a}}function J8e(e){let t=e._contentResource.clone(),n=e.contentExpired;n&&t.setQueryParameters({expired:e.expireDate.toString()});let i=new sr({throttle:!0,throttleByServer:!0,type:Zs.TILES3D,priorityFunction:H8e(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 K8e(e,o,i,n,r)}async function j8e(e,t){let n=rg(t),i=e._tileset;i._disableSkipLevelOfDetail=i._disableSkipLevelOfDetail||n.contentType===Js.GEOMETRY||n.contentType===Js.VECTOR,(n.contentType===Js.IMPLICIT_SUBTREE||n.contentType===Js.IMPLICIT_SUBTREE_JSON)&&(e.hasImplicitContent=!0,e.hasRenderableContent=!1),n.contentType===Js.EXTERNAL_TILESET&&(e.hasTilesetContent=!0,e.hasRenderableContent=!1);let o,r=Cx[n.contentType];if(e.isDestroyed())return;l(n.binaryPayload)?o=await Promise.resolve(r(i,e,e._contentResource,n.binaryPayload.buffer,0)):o=await Promise.resolve(r(i,e,e._contentResource,n.jsonPayload));let s=e._contentHeader;if(e.hasImplicitContentMetadata){let c=e.implicitSubtree,d=e.implicitCoordinates;o.metadata=c.getContentMetadataView(d,0)}else e.hasImplicitContent||(o.metadata=xx(i,s));let a=Ix(i,s);return l(a)&&(o.group=new SC({metadata:a})),o}pr.prototype.cancelRequests=function(){this.hasMultipleContents?this._content.cancelRequests():this._request.cancel()};pr.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 Bme=new ue;function IJ(e,t){if(t.mode!==re.SCENE3D&&!l(e._boundingVolume2D)){let n=e._boundingVolume.boundingSphere,i=ue.projectTo2D(n,t.mapProjection,Bme);e._boundingVolume2D=new lg(i.center,i.radius)}return t.mode!==re.SCENE3D?e._boundingVolume2D:e._boundingVolume}function q8e(e,t){if(t.mode!==re.SCENE3D&&!l(e._contentBoundingVolume2D)){let n=e._contentBoundingVolume.boundingSphere,i=ue.projectTo2D(n,t.mapProjection,Bme);e._contentBoundingVolume2D=new lg(i.center,i.radius)}return t.mode!==re.SCENE3D?e._contentBoundingVolume2D:e._contentBoundingVolume}pr.prototype.visibility=function(e,t){let n=e.cullingVolume,i=IJ(this,e),o=this._tileset,r=o.clippingPlanes;if(l(r)&&r.enabled){let a=r.computeIntersectionWithBoundingVolume(i,o.clippingPlanesOriginMatrix);if(this._isClipped=a!==on.INSIDE,a===on.OUTSIDE)return Xs.MASK_OUTSIDE}let s=o.clippingPolygons;if(l(s)&&s.enabled){let a=s.computeIntersectionWithBoundingVolume(i);this._isClippedByPolygon=a!==on.OUTSIDE}return n.computeVisibilityWithPlaneMask(i,t)};pr.prototype.contentVisibility=function(e){if(!l(this._contentBoundingVolume))return on.INSIDE;if(this._visibilityPlaneMask===Xs.MASK_INSIDE)return on.INSIDE;let t=e.cullingVolume,n=q8e(this,e),i=this._tileset,o=i.clippingPlanes;if(l(o)&&o.enabled){let s=o.computeIntersectionWithBoundingVolume(n,i.clippingPlanesOriginMatrix);if(this._isClipped=s!==on.INSIDE,s===on.OUTSIDE)return on.OUTSIDE}let r=i.clippingPolygons;if(l(r)&&r.enabled){let s=r.computeIntersectionWithBoundingVolume(n);if(this._isClippedByPolygon=s!==on.OUTSIDE,s===on.INSIDE)return on.OUTSIDE}return t.computeVisibility(n)};pr.prototype.distanceToTile=function(e){return IJ(this,e).distanceToCamera(e)};var $8e=new m;pr.prototype.distanceToTileCenter=function(e){let n=IJ(this,e).boundingVolume,i=m.subtract(n.center,e.camera.positionWC,$8e);return m.dot(e.camera.directionWC,i)};pr.prototype.insideViewerRequestVolume=function(e){let t=this._viewerRequestVolume;return!l(t)||t.distanceToCamera(e)===0};var wme=new $,Xme=new m,e7e=new $,_J=new m,Wme=new le,Fme=new vn,xJ=new X;function t7e(e,t,n){let i=m.fromElements(e[0],e[1],e[2],_J),o=$.fromArray(e,3,e7e);i=X.multiplyByPoint(t,i,i);let r=X.getMatrix3(t,wme);return o=$.multiply(r,o,o),l(n)?(n.update(i,o),n):new hd(i,o)}function Lme(e,t,n,i){let o=le.unpack(e,0,Wme),r=e[4],s=e[5],a=vn.fromRectangle(o,r,s,ie.WGS84,Fme),c=a.center,d=a.halfAxes;t=X.multiplyTransformation(t,X.inverseTransformation(n,xJ),xJ),c=X.multiplyByPoint(t,c,c);let u=X.getMatrix3(t,wme);return d=$.multiply(u,d,d),l(i)&&i instanceof hd?(i.update(c,d),i):new hd(c,d)}function n7e(e,t,n,i){if(!X.equalsEpsilon(t,n,Z.EPSILON8))return i instanceof hd?Lme(e,t,n,i):Lme(e,t,n,void 0);let o=le.unpack(e,0,Wme);return i instanceof tu?(i.rectangle=le.clone(o,i.rectangle),i.minimumHeight=e[4],i.maximumHeight=e[5],i.computeBoundingVolumes(ie.WGS84),i):new tu({rectangle:o,minimumHeight:e[4],maximumHeight:e[5]})}function i7e(e,t,n){let i=m.fromElements(e[0],e[1],e[2],_J),o=e[3];i=X.multiplyByPoint(t,i,i);let r=X.getScale(t,Xme),s=m.maximumComponent(r);return o*=s,l(n)?(n.update(i,o),n):new lg(i,o)}pr.prototype.createBoundingVolume=function(e,t,n){let i=this.metadata,o;if(l(i)&&(o=YC.parseBoundingVolumeSemantic("TILE",i)),l(o)&&(e=o),!l(e))throw new de("boundingVolume must be defined");if(Ii(e,"3DTILES_bounding_volume_S2"))return new w2(e.extensions["3DTILES_bounding_volume_S2"]);let{box:r,region:s,sphere:a}=e;if(l(r)){let c=t7e(r,t,n);return this._verticalExaggeration!==1&&Rme(c,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c}if(l(s)){let c=n7e(s,t,this._initialTransform,n);return this._verticalExaggeration===1||(c instanceof hd?Rme(c,this._verticalExaggeration,this._verticalExaggerationRelativeHeight):(c.minimumHeight=Mr.getHeight(c.minimumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c.maximumHeight=Mr.getHeight(c.maximumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c.computeBoundingVolumes(ie.WGS84))),c}if(l(a)){let c=i7e(a,t,n);if(this._verticalExaggeration!==1){let d=Mr.getPosition(c.center,ie.WGS84,this._verticalExaggeration,this._verticalExaggerationRelativeHeight,_J),u=c.radius*this._verticalExaggeration;c.update(d,u)}return c}throw new de("boundingVolume must contain a sphere, region, or box")};var o7e=m.unpackArray(new Array(24).fill(0));function Rme(e,t,n){let i=e.boundingVolume.computeCorners(o7e).map(r=>Mr.getPosition(r,ie.WGS84,t,n,r)),o=vn.fromPoints(i,Fme);e.update(o.center,o.halfAxes)}pr.prototype.updateTransform=function(e,t){e=e??X.IDENTITY;let n=X.multiplyTransformation(e,this.transform,xJ),i=!X.equals(n,this.computedTransform),o=l(t)&&(this._verticalExaggeration!==t.verticalExaggeration||this._verticalExaggerationRelativeHeight!==t.verticalExaggerationRelativeHeight);if(!i&&!o)return;i&&X.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()};pr.prototype.updateGeometricErrorScale=function(){let e=X.getScale(this.computedTransform,Xme),t=m.maximumComponent(e);if(this.geometricError=this._geometricError*t,!l(this.parent)){let n=this._tileset;n._scaledGeometricError=n._geometricError*t}};function r7e(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=tn.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 s7e(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 a7e(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 c7e(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)}pr.prototype.update=function(e,t,n){let{commandList:i}=t,o=i.length;a7e(this,e),c7e(this,e),r7e(this,e,t,n),s7e(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===Ge.TRANSLUCENT;a.depthForTranslucentClassification=c}this.clippingPlanesDirty=!1,this.clippingPolygonsDirty=!1};var Vme=[];pr.prototype.process=function(e,t){!this.contentExpired&&!this.contentReady&&this._content.ready&&(O8e(this),this._selectedFrame=0,this.lastStyleTime=0,j.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=Vme;try{this._content.update(e,t)}catch(i){throw this._contentState=ir.FAILED,i}Vme.length=0,t.commandList=n};function Gme(e,t,n){let i=e*Math.pow(10,t);return parseInt(i)*Math.pow(10,n)}function e5(e,t,n){return Math.max(Z.normalize(e,t,n)-Z.EPSILON7,0)}pr.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,h=r,p=Math.pow(10,u),g=u+h,f=r,b=Math.pow(10,g),x=g+f,I=Math.pow(10,x),_=e5(this._depth,n.depth,i.depth);_=t?1-_:_;let S=!e.isSkippingLevelOfDetail&&this.refine===tr.REPLACE?e5(this._priorityHolder._distanceToCamera,n.distance,i.distance):e5(this._priorityReverseScreenSpaceError,n.reverseScreenSpaceError,i.reverseScreenSpaceError),R=Gme(S,a,s),G=this._priorityProgressiveResolution?0:p,B=e5(this._priorityHolder._foveatedFactor,n.foveatedFactor,i.foveatedFactor),w=Gme(B,d,c),F=this.priorityDeferred?b:0,P=e._pass===zo.PRELOAD_FLIGHT?0:I;this._priority=_+R+G+w+F+P};pr.prototype.isDestroyed=function(){return!1};pr.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 ym=pr;var n8n=y(C(),1);var Yjn=y(C(),1);function dg(e){e=e??Y.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 VT=dg;var Jjn=y(C(),1);function ug(e){e=e??Y.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 X2=ug;function Pme(e){e=e??Y.EMPTY_OBJECT;let t=e.metadataJson,n=e.schema,i=t.metadata??t.tileset,o;l(i)&&(o=new X2({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 VT({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 h=a[u];s.push(new VT({id:u,group:a[u],class:n.classes[h.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(Pme.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 Gx=Pme;var c8n=y(C(),1);var Mme={},l7e=new m;Mme.checkChildrenWithinParent=function(e){let t=e.children,n=t.length,i=e.boundingVolume;if(i instanceof hd||i instanceof tu){let o=i._orientedBoundingBox;e._optimChildrenWithinParent=fm.USE_OPTIMIZATION;for(let r=0;r<n;++r){let a=t[r].boundingVolume;if(!(a instanceof hd||a instanceof tu)){e._optimChildrenWithinParent=fm.SKIP_OPTIMIZATION;break}let c=a._orientedBoundingBox,d=m.subtract(c.center,o.center,l7e),u=m.magnitude(d);m.divideByScalar(d,u,d);let h=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(h<=p+u){e._optimChildrenWithinParent=fm.SKIP_OPTIMIZATION;break}}}return e._optimChildrenWithinParent===fm.USE_OPTIMIZATION};var W2=Mme;var p8n=y(C(),1);var u8n=y(C(),1);function F2(){this.head=void 0,this.tail=void 0,this._length=0}Object.defineProperties(F2.prototype,{length:{get:function(){return this._length}}});function d7e(e,t,n){this.item=e,this.previous=t,this.next=n}F2.prototype.add=function(e){let t=new d7e(e,this.tail,void 0);return l(this.tail)?(this.tail.next=t,this.tail=t):(this.head=t,this.tail=t),++this._length,t};function vme(e,t){l(t.previous)&&l(t.next)?(t.previous.next=t.next,t.next.previous=t.previous):l(t.previous)?(t.previous.next=void 0,e.tail=t.previous):l(t.next)?(t.next.previous=void 0,e.head=t.next):(e.head=void 0,e.tail=void 0),t.next=void 0,t.previous=void 0}F2.prototype.remove=function(e){l(e)&&(vme(this,e),--this._length)};F2.prototype.splice=function(e,t){if(e===t)return;vme(this,t);let n=e.next;e.next=t,this.tail===e?this.tail=t:n.previous=t,t.next=n,t.previous=e};var P2=F2;function Zx(){this._list=new P2,this._sentinel=this._list.add(),this._trimTiles=!1}Zx.prototype.reset=function(){this._list.splice(this._list.tail,this._sentinel)};Zx.prototype.touch=function(e){let t=e.cacheNode;l(t)&&this._list.splice(this._sentinel,t)};Zx.prototype.add=function(e){l(e.cacheNode)||(e.cacheNode=this._list.add(e))};Zx.prototype.unloadTile=function(e,t,n){let i=t.cacheNode;l(i)&&(this._list.remove(i),t.cacheNode=void 0,n(e,t))};Zx.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)}};Zx.prototype.trim=function(){this._trimTiles=!0};var M2=Zx;var x8n=y(C(),1);function t5(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 TJ(e,t){let n;return t==="_loadTimestamp"?n=j.toDate(e).getTime():n=e,n}t5.prototype.setReferenceMinimumMaximum=function(e,t,n){this._referenceMinimum[n]=TJ(e,n),this._referenceMaximum[n]=TJ(t,n)};function u7e(e,t){let n=e.tilePropertyName;if(l(n)){let i=TJ(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 EJ=[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)];t5.prototype.colorize=function(e,t){let n=this.tilePropertyName;if(!l(n)||!e.contentAvailable||e._selectedFrame!==t.frameNumber)return;let i=u7e(this,e),o=this._previousMinimum,r=this._previousMaximum;if(o===Number.MAX_VALUE||r===-Number.MAX_VALUE)return;let s=r-o+Z.EPSILON7,c=Z.clamp(i-o,0,s)/s,d=EJ.length-1,u=c*d,h=Math.floor(u),p=Math.ceil(u),g=u-h,f=EJ[h],b=EJ[p],x=U.clone(U.WHITE);x.red=Z.lerp(f.red,b.red,g),x.green=Z.lerp(f.green,b.green,g),x.blue=Z.lerp(f.blue,b.blue,g),e._debugColor=x};t5.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 v2=t5;var T8n=y(C(),1);function GT(){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}GT.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};GT.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])}};GT.prototype.incrementLoadCounts=function(e){if(this.numberOfFeaturesLoaded+=e.featuresLength,this.numberOfPointsLoaded+=e.pointsLength,this.geometryByteLength+=e.geometryByteLength,this.batchTableByteLength+=e.batchTableByteLength,!(e instanceof jd))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])}};GT.prototype.decrementLoadCounts=function(e){if(this.numberOfFeaturesLoaded-=e.featuresLength,this.numberOfPointsLoaded-=e.pointsLength,this.geometryByteLength-=e.geometryByteLength,this.batchTableByteLength-=e.batchTableByteLength,!(e instanceof jd))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])}};GT.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 Nh=GT;var R8n=y(C(),1);function N2(){this._style=void 0,this._styleDirty=!1,this._lastStyleTime=0}Object.defineProperties(N2.prototype,{style:{get:function(){return this._style},set:function(e){e!==this._style&&(this._style=e,this._styleDirty=!0)}}});N2.prototype.makeDirty=function(){this._styleDirty=!0};N2.prototype.resetDirty=function(){this._styleDirty=!1};N2.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 D2=N2;var F8n=y(C(),1);function m7e(e,t,n){let i=Ii(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)&&!Ii(o,"3DTILES_bounding_volume_S2")&&!Ii(o,"3DTILES_bounding_volume_cylinder"))throw new de("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=h7e(t);for(let s=0;s<r.length;s++){let a=r[s];this.contentHeaders.push(ke(a,!0));let c=new Ve({url:a.uri});this.contentUriTemplates.push(c)}this.contentCount=this.contentHeaders.length,this.tileHeader=f7e(t),this.subdivisionScheme=Cs[i.subdivisionScheme],this.branchingFactor=Cs.getBranchingFactor(this.subdivisionScheme),this.subtreeLevels=i.subtreeLevels,l(i.availableLevels)?this.availableLevels=i.availableLevels:this.availableLevels=i.maximumLevel+1}function h7e(e){if(Ii(e,"3DTILES_multiple_contents")){let t=e.extensions["3DTILES_multiple_contents"];return l(t.contents)?t.contents:t.content}return l(e.contents)?e.contents:l(e.content)?[e.content]:[]}function f7e(e){let t=ke(e,!0);return l(t.extensions)&&(delete t.extensions["3DTILES_implicit_tiling"],delete t.extensions["3DTILES_multiple_contents"],Object.keys(t.extensions).length===0&&delete t.extensions),delete t.implicitTiling,delete t.contents,delete t.content,t}var Bx=m7e;var k8n=y(C(),1);var v8n=y(C(),1);var Q2={};function Nme(e){return e=(e^e<<8)&16711935,e=(e^e<<4)&252645135,e=(e^e<<2)&858993459,e=(e^e<<1)&1431655765,e}function SJ(e){return e=(e^e<<16)&50331903,e=(e^e<<8)&50393103,e=(e^e<<4)&51130563,e=(e^e<<2)&153391689,e}function Dme(e){return e&=1431655765,e=(e^e>>1)&858993459,e=(e^e>>2)&252645135,e=(e^e>>4)&16711935,e=(e^e>>8)&65535,e}function LJ(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}Q2.encode2D=function(e,t){return(Nme(e)|Nme(t)<<1)>>>0};Q2.decode2D=function(e,t){return l(t)||(t=new Array(2)),t[0]=Dme(e),t[1]=Dme(e>>1),t};Q2.encode3D=function(e,t,n){return SJ(e)|SJ(t)<<1|SJ(n)<<2};Q2.decode3D=function(e,t){return l(t)||(t=new Array(3)),t[0]=LJ(e),t[1]=LJ(e>>1),t[2]=LJ(e>>2),t};var x0=Q2;function or(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===Cs.OCTREE&&(this.z=e.z)}Object.defineProperties(or.prototype,{childIndex:{get:function(){let e=0;return e|=this.x&1,e|=(this.y&1)<<1,this.subdivisionScheme===Cs.OCTREE&&(e|=(this.z&1)<<2),e}},mortonIndex:{get:function(){return this.subdivisionScheme===Cs.OCTREE?x0.encode3D(this.x,this.y,this.z):x0.encode2D(this.x,this.y)}},tileIndex:{get:function(){let e=this.subdivisionScheme===Cs.OCTREE?((1<<3*this.level)-1)/7:((1<<2*this.level)-1)/3,t=this.mortonIndex;return e+t}}});or.prototype.getDescendantCoordinates=function(e){let t=this.level+e.level,n=(this.x<<e.level)+e.x,i=(this.y<<e.level)+e.y;if(this.subdivisionScheme===Cs.OCTREE){let o=(this.z<<e.level)+e.z;return new or({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i,z:o})}return new or({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i})};or.prototype.getAncestorCoordinates=function(e){let t=1<<e,n=this.level-e,i=Math.floor(this.x/t),o=Math.floor(this.y/t);if(this.subdivisionScheme===Cs.OCTREE){let r=Math.floor(this.z/t);return new or({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:n,x:i,y:o,z:r})}return new or({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:n,x:i,y:o})};or.prototype.getOffsetCoordinates=function(e){let t=e.level-this.level,n=1<<t,i=e.x%n,o=e.y%n;if(this.subdivisionScheme===Cs.OCTREE){let r=e.z%n;return new or({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:i,y:o,z:r})}return new or({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:i,y:o})};or.prototype.getChildCoordinates=function(e){let t=this.level+1,n=2*this.x+e%2,i=2*this.y+Math.floor(e/2)%2;if(this.subdivisionScheme===Cs.OCTREE){let o=2*this.z+Math.floor(e/4)%2;return new or({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i,z:o})}return new or({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i})};or.prototype.getSubtreeCoordinates=function(){return this.getAncestorCoordinates(this.level%this.subtreeLevels)};or.prototype.getParentSubtreeCoordinates=function(){return this.getAncestorCoordinates(this.level%this.subtreeLevels+this.subtreeLevels)};or.prototype.isAncestor=function(e){let t=e.level-this.level;if(t<=0)return!1;let n=e.x>>t,i=e.y>>t,o=this.x===n,r=this.y===i;if(this.subdivisionScheme===Cs.OCTREE){let s=e.z>>t,a=this.z===s;return o&&r&&a}return o&&r};or.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===Cs.OCTREE?this.z===e.z:!0)};or.prototype.isImplicitTilesetRoot=function(){return this.level===0};or.prototype.isSubtreeRoot=function(){return this.level%this.subtreeLevels===0};or.prototype.isBottomOfSubtree=function(){return this.level%this.subtreeLevels===this.subtreeLevels-1};or.prototype.getTemplateValues=function(){let e={level:this.level,x:this.x,y:this.y};return this.subdivisionScheme===Cs.OCTREE&&(e.z=this.z),e};var Qme=[0,0,0];or.fromMortonIndex=function(e,t,n,i){let o;return e===Cs.OCTREE?(o=x0.decode3D(i,Qme),new or({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1],z:o[2]})):(o=x0.decode2D(i,Qme),new or({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1]}))};or.fromTileIndex=function(e,t,n){let i,o,r;return e===Cs.OCTREE?(i=Math.floor(Z.log2(7*n+1)/3),o=((1<<3*i)-1)/7,r=n-o):(i=Math.floor(Z.log2(3*n+1)/2),o=((1<<2*i)-1)/3,r=n-o),or.fromMortonIndex(e,t,i,r)};var wx=or;var i7n=y(C(),1);var j8n=y(C(),1);function mg(){}mg.selectTiles=function(e,t){Ae.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)===on.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||!p7e(e,t))return;let i=t.camera.timeSinceMoved<n.foveatedTimeDelay;e.priorityDeferred&&i||(e._requestedFrame=t.frameNumber,n._requestedTiles.push(e))};function p7e(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){Ume(e,t),e.updateExpiration(),e._wasMinPriorityChild=!1,e._priorityHolder=e,b7e(e),e._shouldSelect=!1,e._finalResolution=!0};function Ume(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];Ume(r,t),e._visible=r._visible;return}if(A7e(e,t)){e._visible=!1;return}let i=e.refine===tr.REPLACE,o=e._optimChildrenWithinParent===fm.USE_OPTIMIZATION;if(i&&o&&n&&!g7e(e,t)){++e.tileset._statistics.numberOfTilesCulledWithChildrenUnion,e._visible=!1;return}}function A7e(e,t){let{parent:n,tileset:i}=e;return!l(n)||n.hasTilesetContent||n.hasImplicitContent||n.refine!==tr.ADD?!1:e.getScreenSpaceError(t,!0)<=i.memoryAdjustedScreenSpaceError}function g7e(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 b7e(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 ya=mg;function kme(){}var U2={stack:new bl,stackMaximumLength:0};kme.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}=ya,s=U2.stack;for(s.push(i);s.length>0;){U2.stackMaximumLength=Math.max(U2.stackMaximumLength,s.length);let a=s.pop(),c=a.refine===tr.ADD,d=a.refine===tr.REPLACE,u=y7e(a);u&&C7e(a,s,t),(c||d&&!u)&&(x7e(e,a),o(a,t),I7e(a,t),a.hasRenderableContent&&!a.contentAvailable&&(n=!1)),r(a,t)}return U2.stack.trim(U2.stackMaximumLength),n};function y7e(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:(e.hasEmptyContent,!0)}function C7e(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 x7e(e,t){(t.hasUnloadedRenderableContent||t.contentExpired)&&(t._priority=0,e._requestedTiles.push(t))}function I7e(e,t){e.contentAvailable&&e.contentVisibility(t)!==on.OUTSIDE&&e.tileset._selectedTiles.push(e)}var k2=kme;var l7n=y(C(),1);function Yme(){}var Y2={stack:new bl,stackMaximumLength:0},O2={stack:new bl,stackMaximumLength:0};Yme.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(ya.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;E7e(n,t),Y2.stack.trim(Y2.stackMaximumLength),O2.stack.trim(O2.stackMaximumLength);let i=e._requestedTiles;for(let o=0;o<i.length;++o)i[o].updatePriority()};function RJ(e,t){e.contentAvailable&&ya.selectTile(e,t)}function _7e(e,t,n){let i=e.refine===tr.REPLACE,{tileset:o,children:r}=e,{updateTile:s,loadTile:a,touchTile:c}=ya;for(let f=0;f<r.length;++f)s(r[f],n);r.sort(ya.sortChildrenByDistanceToCamera);let d=i&&e.hasRenderableContent,u=!0,h=!1,p=-1,g=Number.MAX_VALUE;for(let f=0;f<r.length;++f){let b=r[f];if(b.isVisible?(t.push(b),b._foveatedFactor<g&&(p=f,g=b._foveatedFactor),h=!0):(d||o.loadSiblings)&&(b._foveatedFactor<g&&(p=f,g=b._foveatedFactor),a(b,n),c(b,n)),d){let x;b._inRequestVolume?b.hasRenderableContent?x=b.contentAvailable:x=T7e(b,n):x=!1,u=u&&x}}if(h||(u=!1),p!==-1&&i){let f=r[p];f._wasMinPriorityChild=!0;let b=(e._wasMinPriorityChild||e===o.root)&&g<=e._priorityHolder._foveatedFactor?e._priorityHolder:e;b._foveatedFactor=Math.min(f._foveatedFactor,b._foveatedFactor),b._distanceToCamera=Math.min(f._distanceToCamera,b._distanceToCamera);for(let x=0;x<r.length;++x)r[x]._priorityHolder=b}return u}function E7e(e,t){let{tileset:n}=e,{canTraverse:i,loadTile:o,visitTile:r,touchTile:s}=ya,a=Y2.stack;for(a.push(e);a.length>0;){Y2.stackMaximumLength=Math.max(Y2.stackMaximumLength,a.length);let c=a.pop(),d=c.parent,u=!l(d)||d._refines;c._refines=i(c)?_7e(c,a,t)&&u:!1;let h=!c._refines&&u;c.hasRenderableContent?c.refine===tr.ADD?(RJ(c,t),o(c,t)):c.refine===tr.REPLACE&&(o(c,t),h&&RJ(c,t)):(n._emptyTiles.push(c),o(c,t),h&&RJ(c,t)),r(c,t),s(c,t)}}function T7e(e,t){let{canTraverse:n,updateTile:i,loadTile:o,touchTile:r}=ya,s=!0,a=O2.stack;for(a.push(e);a.length>0;){O2.stackMaximumLength=Math.max(O2.stackMaximumLength,a.length);let c=a.pop(),d=c.children,u=d.length,h=!c.hasRenderableContent&&n(c);if(!h&&!c.contentAvailable&&(s=!1),i(c,t),c.isVisible||(o(c,t),r(c,t)),h)for(let p=0;p<u;++p){let g=d[p];a.push(g)}}return e.hasEmptyContent||s}var H2=Yme;var p7n=y(C(),1);function Ome(){}var z2={stack:new bl,stackMaximumLength:0},K2={stack:new bl,stackMaximumLength:0},hg={stack:new bl,stackMaximumLength:0,ancestorStack:new bl,ancestorStackMaximumLength:0},S7e=2;Ome.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(ya.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;B7e(n,t),w7e(n,t),z2.stack.trim(z2.stackMaximumLength),K2.stack.trim(K2.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 L7e(e,t){let{updateTile:n,touchTile:i,selectTile:o}=ya,r=K2.stack;for(r.push(e);r.length>0;){K2.stackMaximumLength=Math.max(K2.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<S7e&&r.push(d))}}}function n5(e,t){let n=e.contentAvailable?e:e._ancestorWithContentAvailable;l(n)?n._shouldSelect=!0:L7e(e,t)}function R7e(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 V7e(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 G7e(e,t,n){let{tileset:i,children:o}=e,{updateTile:r,loadTile:s,touchTile:a}=ya;for(let d=0;d<o.length;++d)r(o[d],n);o.sort(ya.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 Z7e(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 B7e(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}=ya,c=z2.stack;for(c.push(e);c.length>0;){z2.stackMaximumLength=Math.max(z2.stackMaximumLength,c.length);let d=c.pop();R7e(d,t);let u=d.parent,h=!l(u)||u._refines;d._refines=o(d)?G7e(d,c,t)&&h:!1;let p=!d._refines&&h;d.hasRenderableContent?d.refine===tr.ADD?(n5(d,t),r(d,t)):d.refine===tr.REPLACE&&(Z7e(d,i)?(r(d,t),p&&n5(d,t)):p?(n5(d,t),r(d,t)):V7e(n,d)&&r(d,t)):(n._emptyTiles.push(d),r(d,t),p&&n5(d,t)),s(d,t),a(d,t)}}function w7e(e,t){let{selectTile:n,canTraverse:i}=ya,{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===tr.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 h=d[u];h.isVisible&&o.push(h)}}}}var J2=Ome;var _7n=y(C(),1);function qs(){this._layers=[],this.layerAdded=new Ce,this.layerRemoved=new Ce,this.layerMoved=new Ce,this.layerShownOrHidden=new Ce}Object.defineProperties(qs.prototype,{length:{get:function(){return this._layers.length}}});qs.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()})};qs.prototype.addImageryProvider=function(e,t){let n=new is(e);return this.add(n,t),n};qs.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};qs.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=[]};qs.prototype.contains=function(e){return this.indexOf(e)!==-1};qs.prototype.indexOf=function(e){return this._layers.indexOf(e)};qs.prototype.get=function(e){return this._layers[e]};function i5(e,t){return e.indexOf(t)}function Hme(e,t,n){let i=e._layers;if(t=Z.clamp(t,0,i.length-1),n=Z.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)}qs.prototype.raise=function(e){let t=i5(this._layers,e);Hme(this,t,t+1)};qs.prototype.lower=function(e){let t=i5(this._layers,e);Hme(this,t,t-1)};qs.prototype.raiseToTop=function(e){let t=i5(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))};qs.prototype.lowerToBottom=function(e){let t=i5(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 X7e=new le;function zme(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];le.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)||!le.contains(d.rectangle,t))continue;let h=X7e,p=1/1024;h.west=Z.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.x-p),h.east=Z.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.z+p),h.south=Z.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.y-p),h.north=Z.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.w+p),le.contains(h,t)&&i(d)}}qs.prototype.pickImageryLayers=function(e,t){let n=t.globe.pick(e,t);if(!l(n))return;let i=t.ellipsoid.cartesianToCartographic(n),o=[];if(zme(t,i,!1,function(r){o.push(r.imageryLayer)}),o.length!==0)return o};qs.prototype.pickImageryLayerFeatures=function(e,t){let n=t.globe.pick(e,t);if(!l(n))return;let i=t.ellipsoid.cartesianToCartographic(n),o=[],r=[];if(zme(t,i,!0,function(s){if(!s.imageryLayer.ready)return;let c=s.imageryLayer.imageryProvider.pickFeatures(s.x,s.y,s.level,i.longitude,i.latitude);l(c)&&(o.push(c),r.push(s.imageryLayer))}),o.length!==0)return Promise.all(o).then(function(s){let a=[];for(let c=0;c<s.length;++c){let d=s[c],u=r[c];if(l(d)&&d.length>0)for(let h=0;h<d.length;++h){let p=d[h];p.imageryLayer=u,l(p.position)||(p.position=i),a.push(p)}}return a})};qs.prototype.queueReprojectionCommands=function(e){let t=this._layers;for(let n=0,i=t.length;n<i;++n)t[n].queueReprojectionCommands(e)};qs.prototype.cancelReprojections=function(){let e=this._layers;for(let t=0,n=e.length;t<n;++t)e[t].cancelReprojections()};qs.prototype.isDestroyed=function(){return!1};qs.prototype.destroy=function(){return this.removeAll(!0),me(this)};qs.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 Xx=qs;function Ko(e){e=e??Y.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 M2,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 bl,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 D2,this._styleApplied=!1,this._modelMatrix=l(e.modelMatrix)?X.clone(e.modelMatrix):X.clone(X.IDENTITY),this._addHeightCallbacks=[],this._statistics=new Nh,this._statisticsLast=new Nh,this._statisticsPerPass=new Array(zo.NUMBER_OF_PASSES);for(let o=0;o<zo.NUMBER_OF_PASSES;++o)this._statisticsPerPass[o]=new Nh;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 v2(e.debugHeatmapTilePropertyName),this.cullRequestsWhileMoving=e.cullRequestsWhileMoving??!0,this._cullRequestsWhileMoving=!1,this.cullRequestsWhileMovingMultiplier=e.cullRequestsWhileMovingMultiplier??60,this.progressiveResolutionHeightFraction=Z.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=X.IDENTITY,this._clippingPlanesOriginMatrix=void 0,this._clippingPlanesOriginMatrixDirty=!0,this._vectorClassificationOnly=e.vectorClassificationOnly??!1,this._vectorKeepDecodedPositions=e.vectorKeepDecodedPositions??!1,this._imageryLayers=new Xx(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??Z.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??Gn.ENABLED,this.show=e.show??!0,this.colorBlendMode=ed.HIGHLIGHT,this.colorBlendAmount=.5,this._pointCloudShading=new Hf(e.pointCloudShading),this._pointCloudEyeDomeLighting=new XA,this.loadProgress=new Ce,this.allTilesLoaded=new Ce,this.initialTilesLoaded=new Ce,this.tileLoad=new Ce,this.tileUnload=new Ce,this.tileFailed=new Ce,this.tileVisible=new Ce,this.skipLevelOfDetail=e.skipLevelOfDetail??!1,this._disableSkipLevelOfDetail=!1,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)&&Ws.setOwner(e.clippingPlanes,this,"_clippingPlanes"),this._clippingPolygons=void 0,l(e.clippingPolygons)&&Ih.setOwner(e.clippingPolygons,this,"_clippingPolygons"),l(e.imageBasedLighting)?(this._imageBasedLighting=e.imageBasedLighting,this._shouldDestroyImageBasedLighting=!1):(this._imageBasedLighting=new TC,this._shouldDestroyImageBasedLighting=!0),this._environmentMapManager=new ZA(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??Ir.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&&xt("tileset-debug-wireframe-ignored","enableDebugWireframe must be set to true in the Cesium3DTileset constructor, otherwise debugWireframe will be ignored."),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(Ko.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){Ws.setOwner(e,this,"_clippingPlanes")}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){Ih.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 _r("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=X.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&&(X.multiply(this.root.computedTransform,this._initialClippingPlanesOriginMatrix,this._clippingPlanesOriginMatrix),this._clippingPlanesOriginMatrixDirty=!1),this._clippingPlanesOriginMatrix):X.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,nhe(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}}});Ko.fromIonAssetId=async function(e,t){let n=await Nd.fromAssetId(e);return Ko.fromUrl(n,t)};Ko.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=Ve.createIfNeeded(e),i;n.extension==="json"?i=n.getBaseUri(!0):n.isDataUri&&(i="");let o=await Ko.loadJson(n),r=await W7e(n,o),s=new Ko(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,nhe(s);let c=l(o.asset.gltfUpAxis)?ho.fromName(o.asset.gltfUpAxis):ho.Y,d=t.modelUpAxis??c,u=t.modelForwardAxis??ho.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,X.IDENTITY).boundingSphere.center,g=s._ellipsoid.cartesianToCartographic(p);return l(g)&&g.height>Si._defaultMinTerrainHeight&&(s._initialClippingPlanesOriginMatrix=Dt.eastNorthUpToFixedFrame(p)),s._clippingPlanesOriginMatrix=X.clone(s._initialClippingPlanesOriginMatrix),s};Ko.loadJson=function(e){return Ve.createIfNeeded(e).fetchJson()};Ko.prototype.makeStyleDirty=function(){this._styleEngine.makeDirty()};Ko.prototype.loadTileset=function(e,t,n){let i=t.asset;if(!l(i))throw new de("Tileset must have an asset property.");if(i.version!=="0.0"&&i.version!=="1.0"&&i.version!=="1.1")throw new de("The tileset must be 3D Tiles version 0.0, 1.0, or 1.1");l(t.extensionsRequired)&&Ko.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=Kme(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===tr.ADD;let d=c._header.children;if(l(d))for(let u=0;u<d.length;++u){let h=d[u],p=Kme(this,e,h,c);c.children.push(p),p._depth=c._depth+1,a.push(p)}this._cullWithChildrenBounds&&W2.checkChildrenWithinParent(c)}return s};function Kme(e,t,n,i){if(!(l(n.implicitTiling)||Ii(n,"3DTILES_implicit_tiling")))return new ym(e,t,n,i);let r=e.schema,s=new Bx(t,n,r),a=new wx({subdivisionScheme:s.subdivisionScheme,subtreeLevels:s.subtreeLevels,level:0,x:0,y:0,z:0}),c=s.subtreeUriTemplate.getDerivedResource({templateValues:a.getTemplateValues()}).url,u=ke(n,!0);u.contents=[{uri:c}],delete u.content,delete u.extensions;let h=new ym(e,t,u,i);return h.implicitTileset=s,h.implicitCoordinates=a,h}async function W7e(e,t){let n=Ii(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t,i;if(l(n.schemaUri))e=e.getDerivedResource({url:n.schemaUri}),i=Mi.getSchemaLoader({resource:e});else if(l(n.schema))i=Mi.getSchemaLoader({schema:n.schema});else return;await i.load();let o=new Gx({schema:i.schema,metadataJson:n});return Mi.unload(i),o}var Jme=new m,F7e=new ge,P7e=new X,M7e=new m,v7e=new m,N7e=new m,D7e=new m;function Q7e(e,t){let n,i,o,r,s,a=t.camera,c=e._root,d=c.contentBoundingVolume;if(d instanceof tu)n=m.normalize(a.positionWC,Jme),i=a.directionWC,o=a.positionCartographic.height,r=d.minimumHeight,s=d.maximumHeight;else{let b=X.inverseTransformation(c.computedTransform,P7e),x=t.mapProjection.ellipsoid,I=d.boundingVolume,_=X.multiplyByPoint(b,I.center,M7e);if(m.magnitude(_)>x.minimumRadius){let E=ge.fromCartesian(_,x,F7e);n=m.normalize(a.positionWC,Jme),i=a.directionWC,o=a.positionCartographic.height,r=0,s=E.height*2}else{let E=X.multiplyByPoint(b,a.positionWC,v7e);if(n=m.UNIT_Z,i=X.multiplyByPointAsVector(b,a.directionWC,N7e),i=m.normalize(i,i),o=E.z,d instanceof hd){let S=$.getColumn(I.halfAxes,2,D7e),R=m.magnitude(S);r=_.z-R,s=_.z+R}else if(d instanceof lg){let S=I.radius;r=_.z-S,s=_.z+S}}}let u=e.dynamicScreenSpaceErrorHeightFalloff,h=r+(s-r)*u,p=s,g=Z.clamp((o-h)/(p-h),0,1),f=1-Math.abs(m.dot(i,n));f=f*(1-g),e._dynamicScreenSpaceErrorComputedDensity=e.dynamicScreenSpaceErrorDensity*f}function U7e(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=>{$me(r,e,t)}),i&&(t.hasTilesetContent||t.hasImplicitContent?i6e(e,t):(n.decrementLoadCounts(t.content),--n.numberOfTilesWithContentReady)),e._requestedTilesInFlight.push(t))}function qme(e,t){return e._priority-t._priority}Ko.prototype.postPassesUpdate=function(e){l(this._root)&&(k7e(this,e),r6e(this,e),this._cache.unloadTiles(this,the),this._styleApplied&&this._styleEngine.resetDirty(),this._styleApplied=!1)};Ko.prototype.prePassesUpdate=function(e){if(!l(this._root))return;j7e(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=j.clone(e.time)),this._timeSinceLoad=Math.max(j.secondsDifference(e.time,this._loadTimestamp)*1e3,0),this.dynamicScreenSpaceError&&Q7e(this,e),e.newFrame&&this._cache.reset()};function k7e(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 Y7e(e){let t=e._requestedTiles;t.sort(qme);for(let n=0;n<t.length;++n)U7e(e,t[n])}function $me(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 O7e(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 H7e=new ge,z7e=new ge,K7e=new m;function J7e(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=ge.clone(r.positionCartographic,H7e),c=ge.fromCartesian(o.center,s,z7e);l(c)&&(a.height=c.height);let d=ge.toCartesian(a,s,K7e);m.distance(d,o.center)<=o.radius&&(r.invoked=!0,n.afterRender.push(()=>{l(r.callback)&&r.callback(),r.invoked=!1}))}}function j7e(e,t){O7e(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,$me(u,e,d)}}e.totalMemoryUsageInBytes<i?$7e(e):a&&n.length>0&&q7e(e)}function q7e(e){e._memoryAdjustedScreenSpaceError*=1.02;let t=e._processingQueue;for(let n=0;n<t.length;++n)t[n].updatePriority();t.sort(qme)}function $7e(e){e._memoryAdjustedScreenSpaceError=Math.max(e.memoryAdjustedScreenSpaceError/1.02,e.maximumScreenSpaceError)}var o5=new m,e6e={maximumFractionDigits:3};function jme(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,e6e):Math.round(t).toLocaleString()}function VJ(e){let{halfAxes:t,radius:n,center:i}=e.boundingVolume.boundingVolume,o=m.clone(i,o5);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=m.normalize(i,o5);r=m.multiplyByScalar(r,.75*n,o5),o=m.add(r,i,o5)}return o}function GJ(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: ${jme(e.content.texturesByteLength)}`,i+=` Geometry Memory: ${jme(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 t6e(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:VJ(e.debugPickedTile),a=GJ(e.debugPickedTile,e,s);a.pixelOffset=new D(15,-15)}}else{for(let s=0;s<i;++s){let a=n[s];GJ(a,e,VJ(a))}for(let s=0;s<r;++s){let a=o[s];(a.hasTilesetContent||a.hasImplicitContent)&&GJ(a,e,VJ(a))}}e._tileDebugLabels.update(t)}function n6e(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 xi({stencil:0,pass:Ge.CESIUM_3D_TILE,renderState:Qe.fromCache({stencilMask:jt.SKIP_LOD_MASK})})),i.push(e._stencilClearCommand));let{statistics:c,tileVisible:d}=e,u=n.isRender,h=i.length;for(let f=0;f<s.length;++f){let b=s[f];u&&d.raiseEvent(b),J7e(e,b,t),b.update(e,t,n),c.incrementSelectionCounts(b.content),++c.selected}let p=e._emptyTiles;for(let f=0;f<p.length;++f)p[f].update(e,t,n);let g=i.length-h;if(e._backfaceCommands.trim(),a){let f=e._backfaceCommands.values,b=f.length;i.length+=b;for(let x=g-1;x>=0;--x)i[h+b+x]=i[h+x];for(let x=0;x<b;++x)i[h+x]=f[x]}g=i.length-r,c.numberOfCommands=g,u&&(e.pointCloudShading.attenuation&&e.pointCloudShading.eyeDomeLighting&&g>0&&e._pointCloudEyeDomeLighting.update(t,r,e.pointCloudShading,e.boundingSphere),e.debugShowGeometricError||e.debugShowRenderingStatistics||e.debugShowMemoryUsage||e.debugShowUrl?(l(e._tileDebugLabels)||(e._tileDebugLabels=new ep),t6e(e,t)):e._tileDebugLabels=e._tileDebugLabels&&e._tileDebugLabels.destroy())}var ehe=[];function i6e(e,t){let n=t,i=ehe;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&&(o6e(e,t),--e._statistics.numberOfTilesTotal)}n.children=[]}function the(e,t){e.tileUnload.raiseEvent(t),e._statistics.decrementLoadCounts(t.content),--e._statistics.numberOfTilesWithContentReady,t.unloadContent()}function o6e(e,t){e._cache.unloadTile(e,t,the),t.destroy()}Ko.prototype.trimLoadedTiles=function(){this._cache.trim()};function r6e(e,t){let n=e._statistics,i=e._statisticsLast,o=n.numberOfPendingRequests,r=n.numberOfTilesProcessing,s=i.numberOfPendingRequests,a=i.numberOfTilesProcessing;Nh.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 s6e(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 a6e(e,t){t.frameNumber===e._updatedModelMatrixFrame&&l(e._previousModelMatrix)||(e._updatedModelMatrixFrame=t.frameNumber,e._modelMatrixChanged=!X.equals(e.modelMatrix,e._previousModelMatrix),e._modelMatrixChanged&&(e._previousModelMatrix=X.clone(e.modelMatrix,e._previousModelMatrix)))}function c6e(e,t,n,i){if(t.mode===re.MORPHING||!l(e._root))return!1;let o=e._statistics;o.clear(),++e._updatedVisibilityFrame,s6e(e),a6e(e,t),e._cullRequestsWhileMoving=e.cullRequestsWhileMoving&&!e._modelMatrixChanged;let r=e.getTraversal(i).selectTiles(e,t);if(i.requestTiles&&Y7e(e),n6e(e,t,i),Nh.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 nhe(e){let t=e._credits;l(t)||(t=[]),t.length=0,l(e.resource.credits)&&e.resource.credits.forEach(i=>{t.push(Gt.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 Gt(r.html))}}t.forEach(i=>i.showOnScreen=i.showOnScreen||e._showCreditsOnScreen),e._credits=t}Ko.prototype.getTraversal=function(e){let{pass:t}=e;return t===zo.MOST_DETAILED_PRELOAD||t===zo.MOST_DETAILED_PICK?k2:this.isSkippingLevelOfDetail?J2:H2};Ko.prototype.update=function(e){this.updateForPass(e,e.tilesetPassState)};Ko.prototype.updateForPass=function(e,t){this.imageryLayers._update();let n=t.pass;if(n===zo.PRELOAD&&(!this.preloadWhenHidden||this.show)||n===zo.PRELOAD_FLIGHT&&(!this.preloadFlightDestinations||!this.show&&!this.preloadWhenHidden)||n===zo.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=zo.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 h=this._statisticsPerPass[n];(this.show||a)&&(this._pass=n,t.ready=c6e(this,e,h,s)),a&&(c.length=d),e.commandList=i,e.camera=o,e.cullingVolume=r};Ko.prototype.hasExtension=function(e){return l(this._extensionsUsed)?this._extensionsUsed.indexOf(e)>-1:!1};Ko.prototype.isDestroyed=function(){return!1};Ko.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=ehe;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)};Ko.supportedExtensions={"3DTILES_metadata":!0,"3DTILES_implicit_tiling":!0,"3DTILES_content_gltf":!0,"3DTILES_multiple_contents":!0,"3DTILES_bounding_volume_S2":!0,"3DTILES_batch_table_hierarchy":!0,"3DTILES_draco_point_compression":!0,MAXAR_content_geojson:!0};Ko.checkSupportedExtensions=function(e){for(let t=0;t<e.length;t++)if(!Ko.supportedExtensions[e[t]])throw new de(`Unsupported 3D Tiles Extension: ${e[t]}`)};var l6e=new En,d6e=new m,u6e=new ge;Ko.prototype.getHeight=function(e,t){let n=t.ellipsoid;l(n)||(n=ie.WGS84);let i=l6e,o=n.cartographicToCartesian(e,i.direction);m.normalize(i.direction,i.direction),i.direction=m.normalize(o,i.direction),i.direction=m.negate(o,i.direction),i.origin=m.multiplyByScalar(i.direction,-2*n.maximumRadius,i.origin);let r=this.pick(i,t.frameState,d6e);if(l(r))return n.cartesianToCartographic(r,u6e)?.height};Ko.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 m6e=new oc,h6e=new m;Ko.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=fi.raySphere(e,d.contentBoundingVolume.boundingSphere,m6e);!l(u)||!l(d.content)||r.push(d)}let s=r.length;r.sort((c,d)=>{let u=ue.distanceSquaredTo(c.contentBoundingVolume.boundingSphere,e.origin),h=ue.distanceSquaredTo(d.contentBoundingVolume.boundingSphere,e.origin);return u-h});let a;for(let c=0;c<s;++c){let u=r[c].content.pick(e,t,h6e);if(l(u))return a=m.clone(u,n),a}};Ko.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};Ko.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 Ps=Ko;var f6e=new X;function I0(e,t){t.collectionChanged.addEventListener(I0.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._tilesetHash={},this._entitiesToVisualize=new Bt,this._onCollectionChanged(t,t.values,[],[])}I0.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)&&z.getValueOrDefault(a._show,e,!0),h;u&&(h=s.computeModelMatrix(e,f6e),c=Ve.createIfNeeded(z.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],p6e(c,n,s,i)),l(p)&&(p.show=!0,l(h)&&(p.modelMatrix=h),p.maximumScreenSpaceError=z.getValueOrDefault(a.maximumScreenSpaceError,e,p.maximumScreenSpaceError))}return!0};I0.prototype.isDestroyed=function(){return!1};I0.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(I0.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._tilesetHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)ZJ(this,e[i],t,n);return me(this)};I0.prototype.getBoundingSphere=function(e,t){let n=this._tilesetHash[e.id];if(!l(n)||n.loadFail)return At.FAILED;let i=n.tilesetPrimitive;return l(i)?i.show?(ue.clone(i.boundingSphere,t),At.DONE):At.FAILED:At.PENDING};I0.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):(ZJ(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],ZJ(this,r,a,c),s.remove(r.id)};function ZJ(e,t,n,i){let o=n[t.id];l(o)&&(l(o.tilesetPrimitive)&&i.removeAndDestroy(o.tilesetPrimitive),delete n[t.id])}async function p6e(e,t,n,i){t[n.id]={url:e.url,loadFail:!1};try{let o=await Ps.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 j2=I0;var nqn=y(C(),1);var A6e=U.WHITE,g6e=U.BLACK,b6e=new D(2,2);function ZT(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new Ce,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(ZT.prototype,{isConstant:{get:function(){return z.isConstant(this._evenColor)&&z.isConstant(this._oddColor)&&z.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},evenColor:fe("evenColor"),oddColor:fe("oddColor"),repeat:fe("repeat")});ZT.prototype.getType=function(e){return"Checkerboard"};var y6e=new j;ZT.prototype.getValue=function(e,t){return l(e)||(e=j.now(y6e)),l(t)||(t={}),t.lightColor=z.getValueOrClonedDefault(this._evenColor,e,A6e,t.lightColor),t.darkColor=z.getValueOrClonedDefault(this._oddColor,e,g6e,t.darkColor),t.repeat=z.getValueOrDefault(this._repeat,e,b6e),t};ZT.prototype.equals=function(e){return this===e||e instanceof ZT&&z.equals(this._evenColor,e._evenColor)&&z.equals(this._oddColor,e._oddColor)&&z.equals(this._repeat,e._repeat)};var BT=ZT;var Cqn=y(C(),1);var hqn=y(C(),1);var ihe={id:void 0};function q2(e){if(e._firing){e._refire=!0;return}if(e._suspendCount===0){let t=e._addedEntities,n=e._removedEntities,i=e._changedEntities;if(i.length!==0||t.length!==0||n.length!==0){e._firing=!0;do{e._refire=!1;let o=t.values.slice(0),r=n.values.slice(0),s=i.values.slice(0);t.removeAll(),n.removeAll(),i.removeAll(),e._collectionChanged.raiseEvent(e,o,r,s)}while(e._refire);e._firing=!1}}}function Dc(e){this._owner=e,this._entities=new Bt,this._addedEntities=new Bt,this._removedEntities=new Bt,this._changedEntities=new Bt,this._suspendCount=0,this._collectionChanged=new Ce,this._id=qn(),this._show=!0,this._firing=!1,this._refire=!1}Dc.prototype.suspendEvents=function(){this._suspendCount++};Dc.prototype.resumeEvents=function(){this._suspendCount--,q2(this)};Object.defineProperties(Dc.prototype,{collectionChanged:{get:function(){return this._collectionChanged}},id:{get:function(){return this._id}},values:{get:function(){return this._entities.values}},show:{get:function(){return this._show},set:function(e){if(e===this._show)return;this.suspendEvents();let t,n=[],i=this._entities.values,o=i.length;for(t=0;t<o;t++)n.push(i[t].isShowing);for(this._show=e,t=0;t<o;t++){let r=n[t],s=i[t];r!==s.isShowing&&s.definitionChanged.raiseEvent(s,"isShowing",s.isShowing,r)}this.resumeEvents()}},owner:{get:function(){return this._owner}}});Dc.prototype.computeAvailability=function(){let e=ze.MAXIMUM_VALUE,t=ze.MINIMUM_VALUE,n=this._entities.values;for(let i=0,o=n.length;i<o;i++){let s=n[i].availability;if(l(s)){let a=s.start,c=s.stop;j.lessThan(a,e)&&!a.equals(ze.MINIMUM_VALUE)&&(e=a),j.greaterThan(c,t)&&!c.equals(ze.MAXIMUM_VALUE)&&(t=c)}}return ze.MAXIMUM_VALUE.equals(e)&&(e=ze.MINIMUM_VALUE),ze.MINIMUM_VALUE.equals(t)&&(t=ze.MAXIMUM_VALUE),new wn({start:e,stop:t})};Dc.prototype.add=function(e){e instanceof ur||(e=new ur(e));let t=e.id,n=this._entities;if(n.contains(t))throw new Ae(`An entity with id ${t} already exists in this collection.`);return e.entityCollection=this,n.set(t,e),this._removedEntities.remove(t)||this._addedEntities.set(t,e),e.definitionChanged.addEventListener(Dc.prototype._onEntityDefinitionChanged,this),q2(this),e};Dc.prototype.remove=function(e){return l(e)?this.removeById(e.id):!1};Dc.prototype.contains=function(e){return this._entities.get(e.id)===e};Dc.prototype.removeById=function(e){if(!l(e))return!1;let n=this._entities.get(e);return this._entities.remove(e)?(this._addedEntities.remove(e)||(this._removedEntities.set(e,n),this._changedEntities.remove(e)),this._entities.remove(e),n.definitionChanged.removeEventListener(Dc.prototype._onEntityDefinitionChanged,this),q2(this),!0):!1};Dc.prototype.removeAll=function(){let e=this._entities,t=e.length,n=e.values,i=this._addedEntities,o=this._removedEntities;for(let r=0;r<t;r++){let s=n[r],a=s.id,c=i.get(a);l(c)||(s.definitionChanged.removeEventListener(Dc.prototype._onEntityDefinitionChanged,this),o.set(a,s))}e.removeAll(),i.removeAll(),this._changedEntities.removeAll(),q2(this)};Dc.prototype.getById=function(e){return this._entities.get(e)};Dc.prototype.getOrCreateEntity=function(e){let t=this._entities.get(e);return l(t)||(ihe.id=e,t=new ur(ihe),this.add(t)),t};Dc.prototype._onEntityDefinitionChanged=function(e){let t=e.id;this._addedEntities.contains(t)||this._changedEntities.set(t,e),q2(this)};var Ca=Dc;var r5={id:void 0},wT=new Array(2);function BJ(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 ohe(e,t,n,i){wT[0]=n,wT[1]=i.id,t[JSON.stringify(wT)]=i.definitionChanged.addEventListener(rs.prototype._onDefinitionChanged,e)}function rhe(e,t,n,i){wT[0]=n,wT[1]=i.id;let o=JSON.stringify(wT);t[o](),t[o]=void 0}function _0(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,h=new Ca(e),p=e._eventHash,g;for(r=0;r<o;r++)for(d=i[r],d.collectionChanged.removeEventListener(rs.prototype._onCollectionChanged,e),a=d.values,g=d.id,c=a.length-1;c>-1;c--)s=a[c],rhe(e,p,g,s);for(r=n-1;r>=0;r--)for(d=t[r],d.collectionChanged.addEventListener(rs.prototype._onCollectionChanged,e),a=d.values,g=d.id,c=a.length-1;c>-1;c--){s=a[c],ohe(e,p,g,s);let b=h.getById(s.id);l(b)||(b=u.getById(s.id),l(b)?BJ(b):(r5.id=s.id,b=new ur(r5)),h.add(b)),b.merge(s)}e._collectionsCopy=t.slice(0),u.suspendEvents(),u.removeAll();let f=h.values;for(r=0;r<f.length;r++)u.add(f[r]);u.resumeEvents()}function rs(e,t){this._owner=t,this._composite=new Ca(this),this._suspendCount=0,this._collections=l(e)?e.slice():[],this._collectionsCopy=[],this._id=qn(),this._eventHash={},_0(this),this._shouldRecomposite=!1}Object.defineProperties(rs.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}}});rs.prototype.addCollection=function(e,t){l(t)?this._collections.splice(t,0,e):(t=this._collections.length,this._collections.push(e)),_0(this)};rs.prototype.removeCollection=function(e){let t=this._collections.indexOf(e);return t!==-1?(this._collections.splice(t,1),_0(this),!0):!1};rs.prototype.removeAllCollections=function(){this._collections.length=0,_0(this)};rs.prototype.containsCollection=function(e){return this._collections.indexOf(e)!==-1};rs.prototype.contains=function(e){return this._composite.contains(e)};rs.prototype.indexOfCollection=function(e){return this._collections.indexOf(e)};rs.prototype.getCollection=function(e){return this._collections[e]};rs.prototype.getCollectionsLength=function(){return this._collections.length};function s5(e,t){return e.indexOf(t)}function she(e,t,n){let i=e._collections;if(t=Z.clamp(t,0,i.length-1),n=Z.clamp(n,0,i.length-1),t===n)return;let o=i[t];i[t]=i[n],i[n]=o,_0(e)}rs.prototype.raiseCollection=function(e){let t=s5(this._collections,e);she(this,t,t+1)};rs.prototype.lowerCollection=function(e){let t=s5(this._collections,e);she(this,t,t-1)};rs.prototype.raiseCollectionToTop=function(e){let t=s5(this._collections,e);t!==this._collections.length-1&&(this._collections.splice(t,1),this._collections.push(e),_0(this))};rs.prototype.lowerCollectionToBottom=function(e){let t=s5(this._collections,e);t!==0&&(this._collections.splice(t,1),this._collections.splice(0,0,e),_0(this))};rs.prototype.suspendEvents=function(){this._suspendCount++,this._composite.suspendEvents()};rs.prototype.resumeEvents=function(){this._suspendCount--,this._shouldRecomposite&&this._suspendCount===0&&(_0(this),this._shouldRecomposite=!1),this._composite.resumeEvents()};rs.prototype.computeAvailability=function(){return this._composite.computeAvailability()};rs.prototype.getById=function(e){return this._composite.getById(e)};rs.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,h=this._eventHash,p=e.id;for(s=0;s<u;s++){let f=n[s];rhe(this,h,p,f);let b=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(b),l(c)&&(l(d)||(d=r.getById(b),BJ(d)),d.merge(c));l(d)||r.removeById(b),d=void 0}let g=t.length;for(s=0;s<g;s++){let f=t[s];ohe(this,h,p,f);let b=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(b),l(c)&&(l(d)||(d=r.getById(b),l(d)?BJ(d):(r5.id=b,d=new ur(r5),r.add(d))),d.merge(c));d=void 0}r.resumeEvents()};rs.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),h=!0;for(let p=s-1;p>=0;p--){let g=o[p].getById(e.id);if(l(g)){let f=g[t];if(l(f)){if(h)if(h=!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 wJ=rs;var zqn=y(C(),1);var Dqn=y(C(),1);var Iqn=y(C(),1);function XJ(){this._removalFunctions=[]}XJ.prototype.add=function(e,t,n){let i=e.addEventListener(t,n);this._removalFunctions.push(i);let o=this;return function(){i();let r=o._removalFunctions;r.splice(r.indexOf(i),1)}};XJ.prototype.removeAll=function(){let e=this._removalFunctions;for(let t=0,n=e.length;t<n;++t)e[t]();e.length=0};var Lr=XJ;var wqn=y(C(),1);function PJ(e,t){return j.compare(e.start,t.start)}function ss(e){if(this._intervals=[],this._changedEvent=new Ce,l(e)){let t=e.length;for(let n=0;n<t;n++)this.addInterval(e[n])}}Object.defineProperties(ss.prototype,{changedEvent:{get:function(){return this._changedEvent}},start:{get:function(){let e=this._intervals;return e.length===0?void 0:e[0].start}},isStartIncluded:{get:function(){let e=this._intervals;return e.length===0?!1:e[0].isStartIncluded}},stop:{get:function(){let e=this._intervals,t=e.length;return t===0?void 0:e[t-1].stop}},isStopIncluded:{get:function(){let e=this._intervals,t=e.length;return t===0?!1:e[t-1].isStopIncluded}},length:{get:function(){return this._intervals.length}},isEmpty:{get:function(){return this._intervals.length===0}}});ss.prototype.equals=function(e,t){if(this===e)return!0;if(!(e instanceof ss))return!1;let n=this._intervals,i=e._intervals,o=n.length;if(o!==i.length)return!1;for(let r=0;r<o;r++)if(!wn.equals(n[r],i[r],t))return!1;return!0};ss.prototype.get=function(e){return this._intervals[e]};ss.prototype.removeAll=function(){this._intervals.length>0&&(this._intervals.length=0,this._changedEvent.raiseEvent(this))};ss.prototype.findIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t]:void 0};ss.prototype.findDataForIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t].data:void 0};ss.prototype.contains=function(e){return this.indexOf(e)>=0};var WJ=new wn;ss.prototype.indexOf=function(e){let t=this._intervals;WJ.start=e,WJ.stop=e;let n=Yo(t,WJ,PJ);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-1<t.length&&wn.contains(t[n-1],e)?n-1:~n)};ss.prototype.findInterval=function(e){e=e??Y.EMPTY_OBJECT;let t=e.start,n=e.stop,i=e.isStartIncluded,o=e.isStopIncluded,r=this._intervals;for(let s=0,a=r.length;s<a;s++){let c=r[s];if((!l(t)||c.start.equals(t))&&(!l(n)||c.stop.equals(n))&&(!l(i)||c.isStartIncluded===i)&&(!l(o)||c.isStopIncluded===o))return r[s]}};ss.prototype.addInterval=function(e,t){if(e.isEmpty)return;let n=this._intervals;if(n.length===0||j.greaterThan(e.start,n[n.length-1].stop)){n.push(e),this._changedEvent.raiseEvent(this);return}let i=Yo(n,e,PJ);i<0?i=~i:i>0&&e.isStartIncluded&&n[i-1].isStartIncluded&&n[i-1].start.equals(e.start)?--i:i<n.length&&!e.isStartIncluded&&n[i].isStartIncluded&&n[i].start.equals(e.start)&&++i;let o;for(i>0&&(o=j.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)?(j.greaterThan(e.stop,n[i-1].stop)?e=new wn({start:n[i-1].start,stop:e.stop,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:e.isStopIncluded,data:e.data}):e=new wn({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=j.compare(n[i-1].stop,e.stop),(o>0||o===0&&n[i-1].isStopIncluded&&!e.isStopIncluded)&&n.splice(i,0,new wn({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 wn({start:n[i-1].start,stop:e.start,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:n[i-1].data}))));i<n.length&&(o=j.compare(e.stop,n[i].start),o>0||o===0&&(e.isStopIncluded||n[i].isStartIncluded));)if(l(t)?t(n[i].data,e.data):n[i].data===e.data)e=new wn({start:e.start,stop:j.greaterThan(n[i].stop,e.stop)?n[i].stop:e.stop,isStartIncluded:e.isStartIncluded,isStopIncluded:j.greaterThan(n[i].stop,e.stop)?n[i].isStopIncluded:e.isStopIncluded,data:e.data}),n.splice(i,1);else if(n[i]=new wn({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)};ss.prototype.removeInterval=function(e){if(e.isEmpty)return!1;let t=this._intervals,n=Yo(t,e,PJ);n<0&&(n=~n);let i=!1;for(n>0&&(j.greaterThan(t[n-1].stop,e.start)||t[n-1].stop.equals(e.start)&&t[n-1].isStopIncluded&&e.isStartIncluded)&&(i=!0,(j.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 wn({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 wn({start:t[n-1].start,stop:e.start,isStartIncluded:t[n-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:t[n-1].data})),n<t.length&&!e.isStartIncluded&&t[n].isStartIncluded&&e.start.equals(t[n].start)&&(i=!0,t.splice(n,0,new wn({start:t[n].start,stop:t[n].start,isStartIncluded:!0,isStopIncluded:!0,data:t[n].data})),++n);n<t.length&&j.greaterThan(e.stop,t[n].stop);)i=!0,t.splice(n,1);return n<t.length&&e.stop.equals(t[n].stop)&&(i=!0,!e.isStopIncluded&&t[n].isStopIncluded?n+1<t.length&&t[n+1].start.equals(e.stop)&&t[n].data===t[n+1].data?(t.splice(n,1),t[n]=new wn({start:t[n].start,stop:t[n].stop,isStartIncluded:!0,isStopIncluded:t[n].isStopIncluded,data:t[n].data})):t[n]=new wn({start:e.stop,stop:e.stop,isStartIncluded:!0,isStopIncluded:!0,data:t[n].data}):t.splice(n,1)),n<t.length&&(j.greaterThan(e.stop,t[n].start)||e.stop.equals(t[n].start)&&e.isStopIncluded&&t[n].isStartIncluded)&&(i=!0,t[n]=new wn({start:e.stop,stop:t[n].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:t[n].isStopIncluded,data:t[n].data})),i&&this._changedEvent.raiseEvent(this),i};ss.prototype.intersect=function(e,t,n){let i=new ss,o=0,r=0,s=this._intervals,a=e._intervals;for(;o<s.length&&r<a.length;){let c=s[o],d=a[r];if(j.lessThan(c.stop,d.start))++o;else if(j.lessThan(d.stop,c.start))++r;else{if(l(n)||l(t)&&t(c.data,d.data)||!l(t)&&d.data===c.data){let u=wn.intersect(c,d,new wn,n);u.isEmpty||i.addInterval(u,t)}j.lessThan(c.stop,d.stop)||c.stop.equals(d.stop)&&!c.isStopIncluded&&d.isStopIncluded?++o:++r}}return i};ss.fromJulianDateArray=function(e,t){l(t)||(t=new ss);let n=e.julianDates,i=n.length,o=e.dataCallback,r=e.isStartIncluded??!0,s=e.isStopIncluded??!0,a=e.leadingInterval??!1,c=e.trailingInterval??!1,d,u=0;a&&(++u,d=new wn({start:ze.MINIMUM_VALUE,stop:n[0],isStartIncluded:!0,isStopIncluded:!r}),d.data=l(o)?o(d,t.length):t.length,t.addInterval(d));for(let h=0;h<i-1;++h){let p=n[h],g=n[h+1];d=new wn({start:p,stop:g,isStartIncluded:t.length===u?r:!0,isStopIncluded:h===i-2?s:!1}),d.data=l(o)?o(d,t.length):t.length,t.addInterval(d),p=g}return c&&(d=new wn({start:n[i-1],stop:ze.MAXIMUM_VALUE,isStartIncluded:!s,isStopIncluded:!0}),d.data=l(o)?o(d,t.length):t.length,t.addInterval(d)),t};var Qc=new Yp,$2=[0,31,28,31,30,31,30,31,31,30,31,30,31];function FJ(e,t,n){l(n)||(n=new j),j.toGregorianDate(e,Qc);let i=Qc.millisecond+t.millisecond,o=Qc.second+t.second,r=Qc.minute+t.minute,s=Qc.hour+t.hour,a=Qc.day+t.day,c=Qc.month+t.month,d=Qc.year+t.year;for(i>=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),$2[2]=qm(d)?29:28;a>$2[c]||c>=13;)a>$2[c]&&(a-=$2[c],++c),c>=13&&(--c,d+=Math.floor(c/12),c=c%12,++c),$2[2]=qm(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,j.fromGregorianDate(Qc,n)}var C6e=new j,x6e=/P(?:([\d.,]+)Y)?(?:([\d.,]+)M)?(?:([\d.,]+)W)?(?:([\d.,]+)D)?(?:T(?:([\d.,]+)H)?(?:([\d.,]+)M)?(?:([\d.,]+)S)?)?/;function ahe(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(x6e);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"),j.toGregorianDate(j.fromIso8601(e,C6e),t);return t.year||t.month||t.day||t.hour||t.minute||t.second||t.millisecond}var eW=new Yp;ss.fromIso8601=function(e,t){let n=e.iso8601.split("/"),i=j.fromIso8601(n[0]),o=j.fromIso8601(n[1]),r=[];if(!ahe(n[2],eW))r.push(i,o);else{let s=j.clone(i);for(r.push(s);j.compare(s,o)<0;)s=FJ(s,eW),j.compare(o,s)<=0&&j.clone(o,s),r.push(s)}return ss.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};ss.fromIso8601DateArray=function(e,t){return ss.fromJulianDateArray({julianDates:e.iso8601Dates.map(function(n){return j.fromIso8601(n)}),isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};ss.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;d<c;++d)(ahe(i[d],eW)||d===0)&&(o&&l(a)?s=FJ(a,eW):s=FJ(n,eW),r.push(s),a=s);return ss.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};var as=ss;function I6e(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 Wx(){this._eventHelper=new Lr,this._definitionChanged=new Ce,this._intervals=new as,this._intervals.changedEvent.addEventListener(Wx.prototype._intervalsChanged,this)}Object.defineProperties(Wx.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});var _6e=new j;Wx.prototype.getValue=function(e,t){l(e)||(e=j.now(_6e));let n=this._intervals.findDataForIntervalContainingDate(e);if(l(n))return n.getValue(e,t)};Wx.prototype.equals=function(e){return this===e||e instanceof Wx&&this._intervals.equals(e._intervals,z.equals)};Wx.prototype._intervalsChanged=function(){I6e(this,this._eventHelper,this._definitionChanged,this._intervals),this._definitionChanged.raiseEvent(this)};var Uc=Wx;function E0(){this._definitionChanged=new Ce,this._composite=new Uc,this._composite.definitionChanged.addEventListener(E0.prototype._raiseDefinitionChanged,this)}Object.defineProperties(E0.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite._intervals}}});E0.prototype.getType=function(e){let t=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(t))return t.getType(e)};var E6e=new j;E0.prototype.getValue=function(e,t){l(e)||(e=j.now(E6e));let n=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(n))return n.getValue(e,t)};E0.prototype.equals=function(e){return this===e||e instanceof E0&&this._composite.equals(e._composite,z.equals)};E0.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var XT=E0;var n$n=y(C(),1);function T0(e){this._referenceFrame=e??eo.FIXED,this._definitionChanged=new Ce,this._composite=new Uc,this._composite.definitionChanged.addEventListener(T0.prototype._raiseDefinitionChanged,this)}Object.defineProperties(T0.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 T6e=new j;T0.prototype.getValue=function(e,t){return l(e)||(e=j.now(T6e)),this.getValueInReferenceFrame(e,eo.FIXED,t)};T0.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(i))return i.getValueInReferenceFrame(e,t,n)};T0.prototype.equals=function(e){return this===e||e instanceof T0&&this._referenceFrame===e._referenceFrame&&this._composite.equals(e._composite,z.equals)};T0.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var ka=T0;var jei=y(C(),1);var j$n=y(C(),1);var o$n=y(C(),1),S6e={ROUNDED:0,MITERED:1,BEVELED:2},Hi=Object.freeze(S6e);var V$n=y(C(),1);var y$n=y(C(),1);var Ya=[new m,new m],L6e=new m,R6e=new m,V6e=new m,G6e=new m,Z6e=new m,B6e=new m,w6e=new m,X6e=new m,W6e=new m,WT=new m,a5=new m,tW={},MJ=new ge;function F6e(e,t){let n=new Array(e.length);for(let i=0;i<e.length;i++){let o=e[i];MJ=t.cartesianToCartographic(o,MJ),n[i]=MJ.height,e[i]=t.scaleToGeodeticSurface(o,o)}return n}function vJ(e,t,n,i){let o=e[0],r=e[1],s=m.angleBetween(o,r),a=Math.ceil(s/i),c=new Array(a),d;if(t===n){for(d=0;d<a;d++)c[d]=t;return c.push(n),c}let h=(n-t)/a;for(d=1;d<a;d++){let p=t+d*h;c[d]=p}return c[0]=t,c.push(n),c}var c5=new m,l5=new m;function P6e(e,t,n,i){let o=new gs(n,i),r=o.projectPointOntoPlane(m.add(n,e,c5),c5),s=o.projectPointOntoPlane(m.add(n,t,l5),l5),a=D.angleBetween(r,s);return s.x*r.y-s.y*r.x>=0?-a:a}var M6e=new m(-1,0,0),Fx=new X,v6e=new X,NJ=new $,N6e=$.IDENTITY.clone(),D6e=new m,Q6e=new ce,che=new m;function fg(e,t,n,i,o,r,s,a){let c=D6e,d=Q6e;Fx=Dt.eastNorthUpToFixedFrame(e,o,Fx),c=X.multiplyByPointAsVector(Fx,M6e,c),c=m.normalize(c,c);let u=P6e(c,t,e,o);NJ=$.fromRotationZ(u,NJ),che.z=r,Fx=X.multiplyTransformation(Fx,X.fromRotationTranslation(NJ,che,v6e),Fx);let h=N6e;h[0]=s;for(let p=0;p<a;p++)for(let g=0;g<n.length;g+=3)d=m.fromArray(n,g,d),d=$.multiplyByVector(h,d,d),d=X.multiplyByPoint(Fx,d,d),i.push(d.x,d.y,d.z);return i}var U6e=new m;function DJ(e,t,n,i,o,r,s){for(let a=0;a<e.length;a+=3){let c=m.fromArray(e,a,U6e);i=fg(c,t,n,i,o,r[a/3],s,1)}return i}function k6e(e,t){let n=e.length,i=new Array(n*6),o=0,r=t.x+t.width/2,s=t.y+t.height/2,a=e[0];i[o++]=a.x-r,i[o++]=0,i[o++]=a.y-s;for(let c=1;c<n;c++){a=e[c];let d=a.x-r,u=a.y-s;i[o++]=d,i[o++]=0,i[o++]=u,i[o++]=d,i[o++]=0,i[o++]=u}return a=e[0],i[o++]=a.x-r,i[o++]=0,i[o++]=a.y-s,i}function lhe(e,t){let n=e.length,i=new Array(n*3),o=0,r=t.x+t.width/2,s=t.y+t.height/2;for(let a=0;a<n;a++)i[o++]=e[a].x-r,i[o++]=0,i[o++]=e[a].y-s;return i}var dhe=new Pe,uhe=new m,mhe=new $;function hhe(e,t,n,i,o,r,s,a,c,d){let u=m.angleBetween(m.subtract(t,e,WT),m.subtract(n,e,a5)),h=i===Hi.BEVELED?0:Math.ceil(u/Z.toRadians(5)),p;o?p=$.fromQuaternion(Pe.fromAxisAngle(m.negate(e,WT),u/(h+1),dhe),mhe):p=$.fromQuaternion(Pe.fromAxisAngle(e,u/(h+1),dhe),mhe);let g,f;if(t=m.clone(t,uhe),h>0){let b=d?2:1;for(let x=0;x<h;x++)t=$.multiplyByVector(p,t,t),g=m.subtract(t,e,WT),g=m.normalize(g,g),o||(g=m.negate(g,g)),f=r.scaleToGeodeticSurface(t,a5),s=fg(f,g,a,s,r,c,1,b)}else g=m.subtract(t,e,WT),g=m.normalize(g,g),o||(g=m.negate(g,g)),f=r.scaleToGeodeticSurface(t,a5),s=fg(f,g,a,s,r,c,1,1),n=m.clone(n,uhe),g=m.subtract(n,e,WT),g=m.normalize(g,g),o||(g=m.negate(g,g)),f=r.scaleToGeodeticSurface(n,a5),s=fg(f,g,a,s,r,c,1,1);return s}tW.removeDuplicatesFromShape=function(e){let t=e.length,n=[];for(let i=t-1,o=0;o<t;i=o++){let r=e[i],s=e[o];D.equals(r,s)||n.push(s)}return n};tW.angleIsGreaterThanPi=function(e,t,n,i){let o=new gs(n,i),r=o.projectPointOntoPlane(m.add(n,e,c5),c5),s=o.projectPointOntoPlane(m.add(n,t,l5),l5);return s.x*r.y-s.y*r.x>=0};var Y6e=new m,O6e=new m;tW.computePositions=function(e,t,n,i,o){let r=i._ellipsoid,s=F6e(e,r),a=i._granularity,c=i._cornerType,d=o?k6e(t,n):lhe(t,n),u=o?lhe(t,n):void 0,h=n.height/2,p=n.width/2,g=e.length,f=[],b=o?[]:void 0,x=L6e,I=R6e,_=V6e,E=G6e,S=Z6e,R=B6e,G=w6e,B=X6e,w=W6e,F=e[0],P=e[1];E=r.geodeticSurfaceNormal(F,E),x=m.subtract(P,F,x),x=m.normalize(x,x),B=m.cross(E,x,B),B=m.normalize(B,B);let A=s[0],T=s[1];o&&(b=fg(F,B,u,b,r,A+h,1,1)),w=m.clone(F,w),F=P,I=m.negate(x,I);let L,V;for(let Q=1;Q<g-1;Q++){let N=o?2:1;if(P=e[Q+1],F.equals(P)){xt("Positions are too close and are considered equivalent with rounding error.");continue}x=m.subtract(P,F,x),x=m.normalize(x,x),E=r.geodeticSurfaceNormal(F,E);let k=m.multiplyByScalar(E,m.dot(x,E),Y6e);m.subtract(x,k,k),m.normalize(k,k);let v=m.multiplyByScalar(E,m.dot(I,E),O6e);if(m.subtract(I,v,v),m.normalize(v,v),!Z.equalsEpsilon(Math.abs(m.dot(k,v)),1,Z.EPSILON7)){_=m.add(x,I,_),_=m.normalize(_,_),_=m.cross(_,E,_),_=m.cross(E,_,_),_=m.normalize(_,_);let H=1/Math.max(.25,m.magnitude(m.cross(_,I,WT))),ee=tW.angleIsGreaterThanPi(x,I,F,r);ee?(S=m.add(F,m.multiplyByScalar(_,H*p,_),S),R=m.add(S,m.multiplyByScalar(B,p,R),R),Ya[0]=m.clone(w,Ya[0]),Ya[1]=m.clone(R,Ya[1]),L=vJ(Ya,A+h,T+h,a),V=Oi.generateArc({positions:Ya,granularity:a,ellipsoid:r}),f=DJ(V,B,d,f,r,L,1),B=m.cross(E,x,B),B=m.normalize(B,B),G=m.add(S,m.multiplyByScalar(B,p,G),G),c===Hi.ROUNDED||c===Hi.BEVELED?hhe(S,R,G,c,ee,r,f,d,T+h,o):(_=m.negate(_,_),f=fg(F,_,d,f,r,T+h,H,N)),w=m.clone(G,w)):(S=m.add(F,m.multiplyByScalar(_,H*p,_),S),R=m.add(S,m.multiplyByScalar(B,-p,R),R),Ya[0]=m.clone(w,Ya[0]),Ya[1]=m.clone(R,Ya[1]),L=vJ(Ya,A+h,T+h,a),V=Oi.generateArc({positions:Ya,granularity:a,ellipsoid:r}),f=DJ(V,B,d,f,r,L,1),B=m.cross(E,x,B),B=m.normalize(B,B),G=m.add(S,m.multiplyByScalar(B,-p,G),G),c===Hi.ROUNDED||c===Hi.BEVELED?hhe(S,R,G,c,ee,r,f,d,T+h,o):f=fg(F,_,d,f,r,T+h,H,N),w=m.clone(G,w)),I=m.negate(x,I)}else f=fg(w,B,d,f,r,A+h,1,1),w=F;A=T,T=s[Q+1],F=P}Ya[0]=m.clone(w,Ya[0]),Ya[1]=m.clone(F,Ya[1]),L=vJ(Ya,A+h,T+h,a),V=Oi.generateArc({positions:Ya,granularity:a,ellipsoid:r}),f=DJ(V,B,d,f,r,L,1),o&&(b=fg(F,B,u,b,r,T+h,1,1)),g=f.length;let W=o?g+b.length:g,M=new Float64Array(W);return M.set(f),o&&M.set(b,g),M};var Dh=tW;var UJ={},FT=new m,bhe=new m,H6e=new m,fhe=new m,Zl=[new m,new m],yhe=new m,Che=new m,xhe=new m,z6e=new m,K6e=new m,J6e=new m,j6e=new m,q6e=new m,$6e=new m,eqe=new m,phe=new Pe,Ahe=new $;function d5(e,t,n,i,o){let r=m.angleBetween(m.subtract(t,e,FT),m.subtract(n,e,bhe)),s=i===Hi.BEVELED?1:Math.ceil(r/Z.toRadians(5))+1,a=s*3,c=new Array(a);c[a-3]=n.x,c[a-2]=n.y,c[a-1]=n.z;let d;o?d=$.fromQuaternion(Pe.fromAxisAngle(m.negate(e,FT),r/s,phe),Ahe):d=$.fromQuaternion(Pe.fromAxisAngle(e,r/s,phe),Ahe);let u=0;t=m.clone(t,FT);for(let h=0;h<s;h++)t=$.multiplyByVector(d,t,t),c[u++]=t.x,c[u++]=t.y,c[u++]=t.z;return c}function tqe(e){let t=yhe,n=Che,i=xhe,o=e[1];n=m.fromArray(e[1],o.length-3,n),i=m.fromArray(e[0],0,i),t=m.midpoint(n,i,t);let r=d5(t,n,i,Hi.ROUNDED,!1),s=e.length-1,a=e[s-1];o=e[s],n=m.fromArray(a,a.length-3,n),i=m.fromArray(o,0,i),t=m.midpoint(n,i,t);let c=d5(t,n,i,Hi.ROUNDED,!1);return[r,c]}function ghe(e,t,n,i){let o=FT;return i?o=m.add(e,t,o):(t=m.negate(t,t),o=m.add(e,t,o)),[o.x,o.y,o.z,n.x,n.y,n.z]}function QJ(e,t,n,i){let o=new Array(e.length),r=new Array(e.length),s=m.multiplyByScalar(t,n,FT),a=m.negate(s,bhe),c=0,d=e.length-1;for(let u=0;u<e.length;u+=3){let h=m.fromArray(e,u,H6e),p=m.add(h,a,fhe);o[c++]=p.x,o[c++]=p.y,o[c++]=p.z;let g=m.add(h,s,fhe);r[d--]=g.z,r[d--]=g.y,r[d--]=g.x}return i.push(o,r),i}UJ.addAttribute=function(e,t,n,i){let o=t.x,r=t.y,s=t.z;l(n)&&(e[n]=o,e[n+1]=r,e[n+2]=s),l(i)&&(e[i]=s,e[i-1]=r,e[i-2]=o)};var nqe=new m,iqe=new m;UJ.computePositions=function(e){let t=e.granularity,n=e.positions,i=e.ellipsoid,o=e.width/2,r=e.cornerType,s=e.saveAttributes,a=yhe,c=Che,d=xhe,u=z6e,h=K6e,p=J6e,g=j6e,f=q6e,b=$6e,x=eqe,I=[],_=s?[]:void 0,E=s?[]:void 0,S=n[0],R=n[1];c=m.normalize(m.subtract(R,S,c),c),a=i.geodeticSurfaceNormal(S,a),u=m.normalize(m.cross(a,c,u),u),s&&(_.push(u.x,u.y,u.z),E.push(a.x,a.y,a.z)),g=m.clone(S,g),S=R,d=m.negate(c,d);let G,B=[],w,F=n.length;for(w=1;w<F-1;w++){a=i.geodeticSurfaceNormal(S,a),R=n[w+1],c=m.normalize(m.subtract(R,S,c),c);let A=m.multiplyByScalar(a,m.dot(c,a),nqe);m.subtract(c,A,A),m.normalize(A,A);let T=m.multiplyByScalar(a,m.dot(d,a),iqe);if(m.subtract(d,T,T),m.normalize(T,T),!Z.equalsEpsilon(Math.abs(m.dot(A,T)),1,Z.EPSILON7)){h=m.normalize(m.add(c,d,h),h),h=m.cross(h,a,h),h=m.cross(a,h,h),h=m.normalize(h,h);let V=o/Math.max(.25,m.magnitude(m.cross(h,d,FT))),W=Dh.angleIsGreaterThanPi(c,d,S,i);h=m.multiplyByScalar(h,V,h),W?(f=m.add(S,h,f),x=m.add(f,m.multiplyByScalar(u,o,x),x),b=m.add(f,m.multiplyByScalar(u,o*2,b),b),Zl[0]=m.clone(g,Zl[0]),Zl[1]=m.clone(x,Zl[1]),G=Oi.generateArc({positions:Zl,granularity:t,ellipsoid:i}),I=QJ(G,u,o,I),s&&(_.push(u.x,u.y,u.z),E.push(a.x,a.y,a.z)),p=m.clone(b,p),u=m.normalize(m.cross(a,c,u),u),b=m.add(f,m.multiplyByScalar(u,o*2,b),b),g=m.add(f,m.multiplyByScalar(u,o,g),g),r===Hi.ROUNDED||r===Hi.BEVELED?B.push({leftPositions:d5(f,p,b,r,W)}):B.push({leftPositions:ghe(S,m.negate(h,h),b,W)})):(b=m.add(S,h,b),x=m.add(b,m.negate(m.multiplyByScalar(u,o,x),x),x),f=m.add(b,m.negate(m.multiplyByScalar(u,o*2,f),f),f),Zl[0]=m.clone(g,Zl[0]),Zl[1]=m.clone(x,Zl[1]),G=Oi.generateArc({positions:Zl,granularity:t,ellipsoid:i}),I=QJ(G,u,o,I),s&&(_.push(u.x,u.y,u.z),E.push(a.x,a.y,a.z)),p=m.clone(f,p),u=m.normalize(m.cross(a,c,u),u),f=m.add(b,m.negate(m.multiplyByScalar(u,o*2,f),f),f),g=m.add(b,m.negate(m.multiplyByScalar(u,o,g),g),g),r===Hi.ROUNDED||r===Hi.BEVELED?B.push({rightPositions:d5(b,p,f,r,W)}):B.push({rightPositions:ghe(S,h,f,W)})),d=m.negate(c,d)}S=R}a=i.geodeticSurfaceNormal(S,a),Zl[0]=m.clone(g,Zl[0]),Zl[1]=m.clone(S,Zl[1]),G=Oi.generateArc({positions:Zl,granularity:t,ellipsoid:i}),I=QJ(G,u,o,I),s&&(_.push(u.x,u.y,u.z),E.push(a.x,a.y,a.z));let P;return r===Hi.ROUNDED&&(P=tqe(I)),{positions:I,corners:B,lefts:_,normals:E,endPositions:P}};var io=UJ;var Ehe=new m,The=new m,u5=new m,m5=new m,oqe=new m,She=new m,S0=new m,PT=new m;function Lhe(e,t){for(let n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}function Qh(e,t,n,i,o,r){let s=e.normals,a=e.tangents,c=e.bitangents,d=m.normalize(m.cross(n,t,S0),S0);r.normal&&io.addAttribute(s,t,i,o),r.tangent&&io.addAttribute(a,d,i,o),r.bitangent&&io.addAttribute(c,n,i,o)}function Rhe(e,t,n){let i=e.positions,o=e.corners,r=e.endPositions,s=e.lefts,a=e.normals,c=new xn,d,u=0,h=0,p,g=0,f;for(p=0;p<i.length;p+=2)f=i[p].length-3,u+=f,g+=f*2,h+=i[p+1].length-3;for(u+=3,h+=3,p=0;p<o.length;p++){d=o[p];let q=o[p].leftPositions;l(q)?(f=q.length,u+=f,g+=f):(f=o[p].rightPositions.length,h+=f,g+=f)}let b=l(r),x;b&&(x=r[0].length-3,u+=x,h+=x,x/=3,g+=x*6);let I=u+h,_=new Float64Array(I),E=t.normal?new Float32Array(I):void 0,S=t.tangent?new Float32Array(I):void 0,R=t.bitangent?new Float32Array(I):void 0,G={normals:E,tangents:S,bitangents:R},B=0,w=I-1,F,P,A,T,L=Ehe,V=The,W,M,Q=x/2,N=Me.createTypedArray(I/3,g),k=0;if(b){M=u5,W=m5;let q=r[0];for(L=m.fromArray(a,0,L),V=m.fromArray(s,0,V),p=0;p<Q;p++)M=m.fromArray(q,(Q-1-p)*3,M),W=m.fromArray(q,(Q+p)*3,W),io.addAttribute(_,W,B),io.addAttribute(_,M,void 0,w),Qh(G,L,V,B,w,t),P=B/3,T=P+1,F=(w-2)/3,A=F-1,N[k++]=F,N[k++]=P,N[k++]=A,N[k++]=A,N[k++]=P,N[k++]=T,B+=3,w-=3}let v=0,O=0,H=i[v++],ee=i[v++];_.set(H,B),_.set(ee,w-ee.length+1),V=m.fromArray(s,O,V);let K,te;for(f=ee.length-3,p=0;p<f;p+=3)K=n.geodeticSurfaceNormal(m.fromArray(H,p,S0),S0),te=n.geodeticSurfaceNormal(m.fromArray(ee,f-p,PT),PT),L=m.normalize(m.add(K,te,L),L),Qh(G,L,V,B,w,t),P=B/3,T=P+1,F=(w-2)/3,A=F-1,N[k++]=F,N[k++]=P,N[k++]=A,N[k++]=A,N[k++]=P,N[k++]=T,B+=3,w-=3;for(K=n.geodeticSurfaceNormal(m.fromArray(H,f,S0),S0),te=n.geodeticSurfaceNormal(m.fromArray(ee,f,PT),PT),L=m.normalize(m.add(K,te,L),L),O+=3,p=0;p<o.length;p++){let q;d=o[p];let pe=d.leftPositions,ye=d.rightPositions,he,xe,Te=She,Be=u5,Le=m5;if(L=m.fromArray(a,O,L),l(pe)){for(Qh(G,L,V,void 0,w,t),w-=3,he=T,xe=A,q=0;q<pe.length/3;q++)Te=m.fromArray(pe,q*3,Te),N[k++]=he,N[k++]=xe-q-1,N[k++]=xe-q,io.addAttribute(_,Te,void 0,w),Be=m.fromArray(_,(xe-q-1)*3,Be),Le=m.fromArray(_,he*3,Le),V=m.normalize(m.subtract(Be,Le,V),V),Qh(G,L,V,void 0,w,t),w-=3;Te=m.fromArray(_,he*3,Te),Be=m.subtract(m.fromArray(_,xe*3,Be),Te,Be),Le=m.subtract(m.fromArray(_,(xe-q)*3,Le),Te,Le),V=m.normalize(m.add(Be,Le,V),V),Qh(G,L,V,B,void 0,t),B+=3}else{for(Qh(G,L,V,B,void 0,t),B+=3,he=A,xe=T,q=0;q<ye.length/3;q++)Te=m.fromArray(ye,q*3,Te),N[k++]=he,N[k++]=xe+q,N[k++]=xe+q+1,io.addAttribute(_,Te,B),Be=m.fromArray(_,he*3,Be),Le=m.fromArray(_,(xe+q)*3,Le),V=m.normalize(m.subtract(Be,Le,V),V),Qh(G,L,V,B,void 0,t),B+=3;Te=m.fromArray(_,he*3,Te),Be=m.subtract(m.fromArray(_,(xe+q)*3,Be),Te,Be),Le=m.subtract(m.fromArray(_,xe*3,Le),Te,Le),V=m.normalize(m.negate(m.add(Le,Be,V),V),V),Qh(G,L,V,void 0,w,t),w-=3}for(H=i[v++],ee=i[v++],H.splice(0,3),ee.splice(ee.length-3,3),_.set(H,B),_.set(ee,w-ee.length+1),f=ee.length-3,O+=3,V=m.fromArray(s,O,V),q=0;q<ee.length;q+=3)K=n.geodeticSurfaceNormal(m.fromArray(H,q,S0),S0),te=n.geodeticSurfaceNormal(m.fromArray(ee,f-q,PT),PT),L=m.normalize(m.add(K,te,L),L),Qh(G,L,V,B,w,t),T=B/3,P=T-1,A=(w-2)/3,F=A+1,N[k++]=F,N[k++]=P,N[k++]=A,N[k++]=A,N[k++]=P,N[k++]=T,B+=3,w-=3;B-=3,w+=3}if(L=m.fromArray(a,a.length-3,L),Qh(G,L,V,B,w,t),b){B+=3,w-=3,M=u5,W=m5;let q=r[1];for(p=0;p<Q;p++)M=m.fromArray(q,(x-p-1)*3,M),W=m.fromArray(q,p*3,W),io.addAttribute(_,M,void 0,w),io.addAttribute(_,W,B),Qh(G,L,V,B,w,t),T=B/3,P=T-1,A=(w-2)/3,F=A+1,N[k++]=F,N[k++]=P,N[k++]=A,N[k++]=A,N[k++]=P,N[k++]=T,B+=3,w-=3}if(c.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:_}),t.st){let q=new Float32Array(I/3*2),pe,ye,he=0;if(b){u/=3,h/=3;let xe=Math.PI/(x+1);ye=1/(u-x+1),pe=1/(h-x+1);let Te,Be=x/2;for(p=Be+1;p<x+1;p++)Te=Z.PI_OVER_TWO+xe*p,q[he++]=pe*(1+Math.cos(Te)),q[he++]=.5*(1+Math.sin(Te));for(p=1;p<h-x+1;p++)q[he++]=p*pe,q[he++]=0;for(p=x;p>Be;p--)Te=Z.PI_OVER_TWO-p*xe,q[he++]=1-pe*(1+Math.cos(Te)),q[he++]=.5*(1+Math.sin(Te));for(p=Be;p>0;p--)Te=Z.PI_OVER_TWO-xe*p,q[he++]=1-ye*(1+Math.cos(Te)),q[he++]=.5*(1+Math.sin(Te));for(p=u-x;p>0;p--)q[he++]=p*ye,q[he++]=1;for(p=1;p<Be+1;p++)Te=Z.PI_OVER_TWO+xe*p,q[he++]=ye*(1+Math.cos(Te)),q[he++]=.5*(1+Math.sin(Te))}else{for(u/=3,h/=3,ye=1/(u-1),pe=1/(h-1),p=0;p<h;p++)q[he++]=p*pe,q[he++]=0;for(p=u;p>0;p--)q[he++]=(p-1)*ye,q[he++]=1}c.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:q})}return t.normal&&(c.normal=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:G.normals})),t.tangent&&(c.tangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:G.tangents})),t.bitangent&&(c.bitangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:G.bitangents})),{attributes:c,indices:N}}function rqe(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,h=t.tangent?new Float32Array(s*6):void 0,p=t.bitangent?new Float32Array(s*6):void 0,g=Ehe,f=The,b=u5,x=m5,I=oqe,_=She,E=c;for(d=0;d<s;d+=3){let S=E+c;g=m.fromArray(n,d,g),f=m.fromArray(n,d+s,f),b=m.fromArray(n,(d+3)%s,b),f=m.subtract(f,g,f),b=m.subtract(b,g,b),x=m.normalize(m.cross(f,b,x),x),t.normal&&(io.addAttribute(u,x,S),io.addAttribute(u,x,S+3),io.addAttribute(u,x,E),io.addAttribute(u,x,E+3)),(t.tangent||t.bitangent)&&(_=m.fromArray(i,d,_),t.bitangent&&(io.addAttribute(p,_,S),io.addAttribute(p,_,S+3),io.addAttribute(p,_,E),io.addAttribute(p,_,E+3)),t.tangent&&(I=m.normalize(m.cross(_,x,I),I),io.addAttribute(h,I,S),io.addAttribute(h,I,S+3),io.addAttribute(h,I,E),io.addAttribute(h,I,E+3))),E+=6}if(t.normal){for(u.set(i),d=0;d<s;d+=3)u[d+s]=-i[d],u[d+s+1]=-i[d+1],u[d+s+2]=-i[d+2];e.normal.values=u}else e.normal=void 0;if(t.bitangent?(p.set(o),p.set(o,s),e.bitangent.values=p):e.bitangent=void 0,t.tangent){let S=e.tangent.values;h.set(S),h.set(S,s),e.tangent.values=h}}if(t.st){let u=e.st.values,h=new Float32Array(a*6);h.set(u),h.set(u,a);let p=a*2;for(let g=0;g<2;g++){for(h[p++]=u[0],h[p++]=u[1],d=2;d<a;d+=2){let f=u[d],b=u[d+1];h[p++]=f,h[p++]=b,h[p++]=f,h[p++]=b}h[p++]=u[0],h[p++]=u[1]}e.st.values=h}return e}function kJ(e,t,n){n[t++]=e[0],n[t++]=e[1],n[t++]=e[2];for(let i=3;i<e.length;i+=3){let o=e[i],r=e[i+1],s=e[i+2];n[t++]=o,n[t++]=r,n[t++]=s,n[t++]=o,n[t++]=r,n[t++]=s}return n[t++]=e[0],n[t++]=e[1],n[t++]=e[2],n}function sqe(e,t){let n=new we({position:t.position,normal:t.normal||t.bitangent||e.shadowVolume,tangent:t.tangent,bitangent:t.normal||t.bitangent,st:t.st}),i=e.ellipsoid,o=io.computePositions(e),r=Rhe(o,n,i),s=e.height,a=e.extrudedHeight,c=r.attributes,d=r.indices,u=c.position.values,h=u.length,p=new Float64Array(h*6),g=new Float64Array(h);g.set(u);let f=new Float64Array(h*4);u=_i.scaleToGeodeticHeight(u,s,i),f=kJ(u,0,f),g=_i.scaleToGeodeticHeight(g,a,i),f=kJ(g,h*2,f),p.set(u),p.set(g,h),p.set(f,h*2),c.position.values=p,c=rqe(c,t);let b,x=h/3;if(e.shadowVolume){let F=c.normal.values;h=F.length;let P=new Float32Array(h*6);for(b=0;b<h;b++)F[b]=-F[b];P.set(F,h),P=kJ(F,h*4,P),c.extrudeDirection=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:P}),t.normal||(c.normal=void 0)}if(l(e.offsetAttribute)){let F=new Uint8Array(x*6);if(e.offsetAttribute===pn.TOP)F=F.fill(1,0,x).fill(1,x*2,x*4);else{let P=e.offsetAttribute===pn.NONE?0:1;F=F.fill(P)}c.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:F})}let I=d.length,_=x+x,E=Me.createTypedArray(p.length/3,I*2+_*3);E.set(d);let S=I;for(b=0;b<I;b+=3){let F=d[b],P=d[b+1],A=d[b+2];E[S++]=A+x,E[S++]=P+x,E[S++]=F+x}let R,G,B,w;for(b=0;b<_;b+=2)R=b+_,G=R+_,B=R+1,w=G+1,E[S++]=R,E[S++]=G,E[S++]=B,E[S++]=B,E[S++]=G,E[S++]=w;return{attributes:c,indices:E}}var Ihe=new m,nW=new m,xm=new ge;function _he(e,t,n,i,o,r){let s=m.subtract(t,e,Ihe);m.normalize(s,s);let a=n.geodeticSurfaceNormal(e,nW),c=m.cross(s,a,Ihe);m.multiplyByScalar(c,i,c);let d=o.latitude,u=o.longitude,h=r.latitude,p=r.longitude;m.add(e,c,nW),n.cartesianToCartographic(nW,xm);let g=xm.latitude,f=xm.longitude;d=Math.min(d,g),u=Math.min(u,f),h=Math.max(h,g),p=Math.max(p,f),m.subtract(e,c,nW),n.cartesianToCartographic(nW,xm),g=xm.latitude,f=xm.longitude,d=Math.min(d,g),u=Math.min(u,f),h=Math.max(h,g),p=Math.max(p,f),o.latitude=d,o.longitude=u,r.latitude=h,r.longitude=p}var Cm=new m,iW=new m,fd=new ge,pd=new ge;function Vhe(e,t,n,i,o){e=Lhe(e,t);let r=Xo(e,m.equalsEpsilon),s=r.length;if(s<2||n<=0)return new le;let a=n*.5;fd.latitude=Number.POSITIVE_INFINITY,fd.longitude=Number.POSITIVE_INFINITY,pd.latitude=Number.NEGATIVE_INFINITY,pd.longitude=Number.NEGATIVE_INFINITY;let c,d;if(i===Hi.ROUNDED){let p=r[0];m.subtract(p,r[1],Cm),m.normalize(Cm,Cm),m.multiplyByScalar(Cm,a,Cm),m.add(p,Cm,iW),t.cartesianToCartographic(iW,xm),c=xm.latitude,d=xm.longitude,fd.latitude=Math.min(fd.latitude,c),fd.longitude=Math.min(fd.longitude,d),pd.latitude=Math.max(pd.latitude,c),pd.longitude=Math.max(pd.longitude,d)}for(let p=0;p<s-1;++p)_he(r[p],r[p+1],t,a,fd,pd);let u=r[s-1];m.subtract(u,r[s-2],Cm),m.normalize(Cm,Cm),m.multiplyByScalar(Cm,a,Cm),m.add(u,Cm,iW),_he(u,iW,t,a,fd,pd),i===Hi.ROUNDED&&(t.cartesianToCartographic(iW,xm),c=xm.latitude,d=xm.longitude,fd.latitude=Math.min(fd.latitude,c),fd.longitude=Math.min(fd.longitude,d),pd.latitude=Math.max(pd.latitude,c),pd.longitude=Math.max(pd.longitude,d));let h=l(o)?o:new le;return h.north=pd.latitude,h.south=fd.latitude,h.east=pd.longitude,h.west=fd.longitude,h}function Ag(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.width,i=e.height??0,o=e.extrudedHeight??i;this._positions=t,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._vertexFormat=we.clone(e.vertexFormat??we.DEFAULT),this._width=n,this._height=Math.max(i,o),this._extrudedHeight=Math.min(i,o),this._cornerType=e.cornerType??Hi.ROUNDED,this._granularity=e.granularity??Z.RADIANS_PER_DEGREE,this._shadowVolume=e.shadowVolume??!1,this._workerName="createCorridorGeometry",this._offsetAttribute=e.offsetAttribute,this._rectangle=void 0,this.packedLength=1+t.length*m.packedLength+ie.packedLength+we.packedLength+7}Ag.pack=function(e,t,n){n=n??0;let i=e._positions,o=i.length;t[n++]=o;for(let r=0;r<o;++r,n+=m.packedLength)m.pack(i[r],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,we.pack(e._vertexFormat,t,n),n+=we.packedLength,t[n++]=e._width,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._cornerType,t[n++]=e._granularity,t[n++]=e._shadowVolume?1:0,t[n]=e._offsetAttribute??-1,t};var Ghe=ie.clone(ie.UNIT_SPHERE),Zhe=new we,pg={positions:void 0,ellipsoid:Ghe,vertexFormat:Zhe,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,shadowVolume:void 0,offsetAttribute:void 0};Ag.unpack=function(e,t,n){t=t??0;let i=e[t++],o=new Array(i);for(let f=0;f<i;++f,t+=m.packedLength)o[f]=m.unpack(e,t);let r=ie.unpack(e,t,Ghe);t+=ie.packedLength;let s=we.unpack(e,t,Zhe);t+=we.packedLength;let a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t++]===1,g=e[t];return l(n)?(n._positions=o,n._ellipsoid=ie.clone(r,n._ellipsoid),n._vertexFormat=we.clone(s,n._vertexFormat),n._width=a,n._height=c,n._extrudedHeight=d,n._cornerType=u,n._granularity=h,n._shadowVolume=p,n._offsetAttribute=g===-1?void 0:g,n):(pg.positions=o,pg.width=a,pg.height=c,pg.extrudedHeight=d,pg.cornerType=u,pg.granularity=h,pg.shadowVolume=p,pg.offsetAttribute=g===-1?void 0:g,new Ag(pg))};Ag.computeRectangle=function(e,t){e=e??Y.EMPTY_OBJECT;let n=e.positions,i=e.width,o=e.ellipsoid??ie.default,r=e.cornerType??Hi.ROUNDED;return Vhe(n,o,i,r,t)};Ag.createGeometry=function(e){let t=e._positions,n=e._width,i=e._ellipsoid;t=Lhe(t,i);let o=Xo(t,m.equalsEpsilon);if(o.length<2||n<=0)return;let r=e._height,s=e._extrudedHeight,a=!Z.equalsEpsilon(r,s,0,Z.EPSILON2),c=e._vertexFormat,d={ellipsoid:i,positions:o,width:n,cornerType:e._cornerType,granularity:e._granularity,saveAttributes:!0},u;if(a)d.height=r,d.extrudedHeight=s,d.shadowVolume=e._shadowVolume,d.offsetAttribute=e._offsetAttribute,u=sqe(d,c);else{let g=io.computePositions(d);if(u=Rhe(g,c,i),u.attributes.position.values=_i.scaleToGeodeticHeight(u.attributes.position.values,r,i),l(e._offsetAttribute)){let f=e._offsetAttribute===pn.NONE?0:1,b=u.attributes.position.values.length,x=new Uint8Array(b/3).fill(f);u.attributes.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:x})}}let h=u.attributes,p=ue.fromVertices(h.position.values,void 0,3);return c.position||(u.attributes.position.values=void 0),new pt({attributes:h,indices:u.indices,primitiveType:We.TRIANGLES,boundingSphere:p,offsetAttribute:e._offsetAttribute})};Ag.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new Ag({positions:e._positions,width:e._width,cornerType:e._cornerType,ellipsoid:o,granularity:i,extrudedHeight:r,height:s,vertexFormat:we.POSITION_ONLY,shadowVolume:!0})};Object.defineProperties(Ag.prototype,{rectangle:{get:function(){return l(this._rectangle)||(this._rectangle=Vhe(this._positions,this._ellipsoid,this._width,this._cornerType)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return[0,0,0,1,1,0]}}});var Px=Ag;var Aei=y(C(),1);var Bhe=new m,whe=new m,aqe=new m;function cqe(e,t){for(let n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}function Xhe(e,t){let n=[],i=e.positions,o=e.corners,r=e.endPositions,s=new xn,a,c=0,d=0,u,h=0,p;for(u=0;u<i.length;u+=2)p=i[u].length-3,c+=p,h+=p/3*4,d+=i[u+1].length-3;for(c+=3,d+=3,u=0;u<o.length;u++){a=o[u];let W=o[u].leftPositions;l(W)?(p=W.length,c+=p,h+=p/3*2):(p=o[u].rightPositions.length,d+=p,h+=p/3*2)}let g=l(r),f;g&&(f=r[0].length-3,c+=f,d+=f,f/=3,h+=f*4);let b=c+d,x=new Float64Array(b),I=0,_=b-1,E,S,R,G,B,w,F=f/2,P=Me.createTypedArray(b/3,h+4),A=0;if(P[A++]=I/3,P[A++]=(_-2)/3,g){n.push(I/3),w=Bhe,B=whe;let W=r[0];for(u=0;u<F;u++)w=m.fromArray(W,(F-1-u)*3,w),B=m.fromArray(W,(F+u)*3,B),io.addAttribute(x,B,I),io.addAttribute(x,w,void 0,_),S=I/3,G=S+1,E=(_-2)/3,R=E-1,P[A++]=E,P[A++]=R,P[A++]=S,P[A++]=G,I+=3,_-=3}let T=0,L=i[T++],V=i[T++];for(x.set(L,I),x.set(V,_-V.length+1),p=V.length-3,n.push(I/3,(_-2)/3),u=0;u<p;u+=3)S=I/3,G=S+1,E=(_-2)/3,R=E-1,P[A++]=E,P[A++]=R,P[A++]=S,P[A++]=G,I+=3,_-=3;for(u=0;u<o.length;u++){let W;a=o[u];let M=a.leftPositions,Q=a.rightPositions,N,k=aqe;if(l(M)){for(_-=3,N=R,n.push(G),W=0;W<M.length/3;W++)k=m.fromArray(M,W*3,k),P[A++]=N-W-1,P[A++]=N-W,io.addAttribute(x,k,void 0,_),_-=3;n.push(N-Math.floor(M.length/6)),t===Hi.BEVELED&&n.push((_-2)/3+1),I+=3}else{for(I+=3,N=G,n.push(R),W=0;W<Q.length/3;W++)k=m.fromArray(Q,W*3,k),P[A++]=N+W,P[A++]=N+W+1,io.addAttribute(x,k,I),I+=3;n.push(N+Math.floor(Q.length/6)),t===Hi.BEVELED&&n.push(I/3-1),_-=3}for(L=i[T++],V=i[T++],L.splice(0,3),V.splice(V.length-3,3),x.set(L,I),x.set(V,_-V.length+1),p=V.length-3,W=0;W<V.length;W+=3)G=I/3,S=G-1,R=(_-2)/3,E=R+1,P[A++]=E,P[A++]=R,P[A++]=S,P[A++]=G,I+=3,_-=3;I-=3,_+=3,n.push(I/3,(_-2)/3)}if(g){I+=3,_-=3,w=Bhe,B=whe;let W=r[1];for(u=0;u<F;u++)w=m.fromArray(W,(f-u-1)*3,w),B=m.fromArray(W,u*3,B),io.addAttribute(x,w,void 0,_),io.addAttribute(x,B,I),G=I/3,S=G-1,R=(_-2)/3,E=R+1,P[A++]=E,P[A++]=R,P[A++]=S,P[A++]=G,I+=3,_-=3;n.push(I/3)}else n.push(I/3,(_-2)/3);return P[A++]=I/3,P[A++]=(_-2)/3,s.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:x}),{attributes:s,indices:P,wallIndices:n}}function lqe(e){let t=e.ellipsoid,n=io.computePositions(e),i=Xhe(n,e.cornerType),o=i.wallIndices,r=e.height,s=e.extrudedHeight,a=i.attributes,c=i.indices,d=a.position.values,u=d.length,h=new Float64Array(u);h.set(d);let p=new Float64Array(u*2);if(d=_i.scaleToGeodeticHeight(d,r,t),h=_i.scaleToGeodeticHeight(h,s,t),p.set(d),p.set(h,u),a.position.values=p,u/=3,l(e.offsetAttribute)){let E=new Uint8Array(u*2);if(e.offsetAttribute===pn.TOP)E=E.fill(1,0,u);else{let S=e.offsetAttribute===pn.NONE?0:1;E=E.fill(S)}a.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:E})}let g,f=c.length,b=Me.createTypedArray(p.length/3,(f+o.length)*2);b.set(c);let x=f;for(g=0;g<f;g+=2){let E=c[g],S=c[g+1];b[x++]=E+u,b[x++]=S+u}let I,_;for(g=0;g<o.length;g++)I=o[g],_=I+u,b[x++]=I,b[x++]=_;return{attributes:a,indices:b}}function oW(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.width,i=e.height??0,o=e.extrudedHeight??i;this._positions=t,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._width=n,this._height=Math.max(i,o),this._extrudedHeight=Math.min(i,o),this._cornerType=e.cornerType??Hi.ROUNDED,this._granularity=e.granularity??Z.RADIANS_PER_DEGREE,this._offsetAttribute=e.offsetAttribute,this._workerName="createCorridorOutlineGeometry",this.packedLength=1+t.length*m.packedLength+ie.packedLength+6}oW.pack=function(e,t,n){n=n??0;let i=e._positions,o=i.length;t[n++]=o;for(let r=0;r<o;++r,n+=m.packedLength)m.pack(i[r],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._width,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._cornerType,t[n++]=e._granularity,t[n]=e._offsetAttribute??-1,t};var Whe=ie.clone(ie.UNIT_SPHERE),L0={positions:void 0,ellipsoid:Whe,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,offsetAttribute:void 0};oW.unpack=function(e,t,n){t=t??0;let i=e[t++],o=new Array(i);for(let p=0;p<i;++p,t+=m.packedLength)o[p]=m.unpack(e,t);let r=ie.unpack(e,t,Whe);t+=ie.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t];return l(n)?(n._positions=o,n._ellipsoid=ie.clone(r,n._ellipsoid),n._width=s,n._height=a,n._extrudedHeight=c,n._cornerType=d,n._granularity=u,n._offsetAttribute=h===-1?void 0:h,n):(L0.positions=o,L0.width=s,L0.height=a,L0.extrudedHeight=c,L0.cornerType=d,L0.granularity=u,L0.offsetAttribute=h===-1?void 0:h,new oW(L0))};oW.createGeometry=function(e){let t=e._positions,n=e._width,i=e._ellipsoid;t=cqe(t,i);let o=Xo(t,m.equalsEpsilon);if(o.length<2||n<=0)return;let r=e._height,s=e._extrudedHeight,a=!Z.equalsEpsilon(r,s,0,Z.EPSILON2),c={ellipsoid:i,positions:o,width:n,cornerType:e._cornerType,granularity:e._granularity,saveAttributes:!1},d;if(a)c.height=r,c.extrudedHeight=s,c.offsetAttribute=e._offsetAttribute,d=lqe(c);else{let p=io.computePositions(c);if(d=Xhe(p,c.cornerType),d.attributes.position.values=_i.scaleToGeodeticHeight(d.attributes.position.values,r,i),l(e._offsetAttribute)){let g=d.attributes.position.values.length,f=e._offsetAttribute===pn.NONE?0:1,b=new Uint8Array(g/3).fill(f);d.attributes.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:b})}}let u=d.attributes,h=ue.fromVertices(u.position.values,void 0,3);return new pt({attributes:u,indices:d.indices,primitiveType:We.LINES,boundingSphere:h,offsetAttribute:e._offsetAttribute})};var rW=oW;var Rei=y(C(),1);var dqe=new di(0);function Bl(e){Ci.call(this,e),this._zIndex=0,this._terrainOffsetProperty=void 0}l(Object.create)&&(Bl.prototype=Object.create(Ci.prototype),Bl.prototype.constructor=Bl);Object.defineProperties(Bl.prototype,{zIndex:{get:function(){return this._zIndex}},terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Bl.prototype._isOnTerrain=function(e,t){return this._fillEnabled&&!l(t.height)&&!l(t.extrudedHeight)&&cl.isSupported(this._scene)};Bl.prototype._getIsClosed=function(e){let t=e.height,n=e.extrudedHeight;return t===0||l(n)&&n!==t};Bl.prototype._computeCenter=Ae.throwInstantiationError;Bl.prototype._onEntityPropertyChanged=function(e,t,n,i){if(Ci.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))&&xt(xt.geometryZIndex),this._zIndex=o.zIndex??dqe,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 hh(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new IC(this._scene,a,r,s)}};Bl.prototype.destroy=function(){l(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0),Ci.prototype.destroy.call(this)};Bl.getGeometryHeight=function(e,t){if(!l(e)){t!==et.NONE&&xt(xt.geometryHeightReference);return}return Du(t)?0:e};Bl.getGeometryExtrudedHeight=function(e,t){if(!l(e)){t!==et.NONE&&xt(xt.geometryExtrudedHeightReference);return}return Du(t)?Bl.CLAMP_TO_GROUND:e};Bl.CLAMP_TO_GROUND="clamp";Bl.computeGeometryOffsetAttribute=function(e,t,n,i){(!l(e)||!l(t))&&(t=et.NONE),(!l(n)||!l(i))&&(i=et.NONE);let o=0;if(t!==et.NONE&&o++,i===et.RELATIVE_TO_GROUND&&o++,o===2)return pn.ALL;if(o===1)return pn.TOP};var ii=Bl;var Fhe=new U,Phe=m.ZERO,Mhe=new m,vhe=new le;function uqe(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 Uh(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new uqe(e),geometryPropertyName:"corridor",observedPropertyNames:["availability","corridor"]}),this._onEntityPropertyChanged(e,"corridor",e.corridor,void 0)}l(Object.create)&&(Uh.prototype=Object.create(ii.prototype),Uh.prototype.constructor=Uh);Uh.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:jn.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof qt){let o;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,Fhe)),l(o)||(o=U.WHITE),i.color=tn.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,Phe,Mhe))),new wt({id:t,geometry:new Px(this._options),attributes:i})};Uh.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=z.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,Fhe),o={show:new Vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:tn.fromColor(i),distanceDisplayCondition:jn.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0};return l(this._options.offsetAttribute)&&(o.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,Phe,Mhe))),new wt({id:t,geometry:new rW(this._options),attributes:o})};Uh.prototype._computeCenter=function(e,t){let n=z.getValueOrUndefined(this._entity.corridor.positions,e);if(!(!l(n)||n.length===0))return m.clone(n[Math.floor(n.length/2)],t)};Uh.prototype._isHidden=function(e,t){return!l(t.positions)||!l(t.width)||Ci.prototype._isHidden.call(this,e,t)};Uh.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!z.isConstant(t.height)||!z.isConstant(t.extrudedHeight)||!z.isConstant(t.granularity)||!z.isConstant(t.width)||!z.isConstant(t.outlineWidth)||!z.isConstant(t.cornerType)||!z.isConstant(t.zIndex)||this._onTerrain&&!z.isConstant(this._materialProperty)&&!(this._materialProperty instanceof qt)};Uh.prototype._setStaticOptions=function(e,t){let n=z.getValueOrUndefined(t.height,ze.MINIMUM_VALUE),i=z.getValueOrDefault(t.heightReference,ze.MINIMUM_VALUE,et.NONE),o=z.getValueOrUndefined(t.extrudedHeight,ze.MINIMUM_VALUE),r=z.getValueOrDefault(t.extrudedHeightReference,ze.MINIMUM_VALUE,et.NONE);l(o)&&!l(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof qt?yn.VERTEX_FORMAT:Io.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(ze.MINIMUM_VALUE,s.positions),s.width=t.width.getValue(ze.MINIMUM_VALUE),s.granularity=z.getValueOrUndefined(t.granularity,ze.MINIMUM_VALUE),s.cornerType=z.getValueOrUndefined(t.cornerType,ze.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=Si.getMinimumMaximumHeights(Px.computeRectangle(s,vhe)).minimumTerrainHeight),s.extrudedHeight=o};Uh.DynamicGeometryUpdater=MT;function MT(e,t,n){yi.call(this,e,t,n)}l(Object.create)&&(MT.prototype=Object.create(yi.prototype),MT.prototype.constructor=MT);MT.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.positions)||!l(i.width)||yi.prototype._isHidden.call(this,e,t,n)};MT.prototype._setOptions=function(e,t,n){let i=this._options,o=z.getValueOrUndefined(t.height,n),r=z.getValueOrDefault(t.heightReference,n,et.NONE),s=z.getValueOrUndefined(t.extrudedHeight,n),a=z.getValueOrDefault(t.extrudedHeightReference,n,et.NONE);l(s)&&!l(o)&&(o=0),i.positions=z.getValueOrUndefined(t.positions,n),i.width=z.getValueOrUndefined(t.width,n),i.granularity=z.getValueOrUndefined(t.granularity,n),i.cornerType=z.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=Si.getMinimumMaximumHeights(Px.computeRectangle(i,vhe)).minimumTerrainHeight),i.extrudedHeight=s};var sW=Uh;var Tni=y(C(),1);var eti=y(C(),1);function h5(){Ae.throwInstantiationError()}Object.defineProperties(h5.prototype,{name:{get:Ae.throwInstantiationError},clock:{get:Ae.throwInstantiationError},entities:{get:Ae.throwInstantiationError},isLoading:{get:Ae.throwInstantiationError},changedEvent:{get:Ae.throwInstantiationError},errorEvent:{get:Ae.throwInstantiationError},loadingEvent:{get:Ae.throwInstantiationError},show:{get:Ae.throwInstantiationError},clustering:{get:Ae.throwInstantiationError}});h5.prototype.update=function(e){Ae.throwInstantiationError()};h5.setLoading=function(e,t){e._isLoading!==t&&(t?e._entityCollection.suspendEvents():e._entityCollection.resumeEvents(),e._isLoading=t,e._loading.raiseEvent(e,t))};var cs=h5;var yni=y(C(),1);var ati=y(C(),1);function op(e,t){this._ellipsoid=e,this._cameraPosition=new m,this._cameraPositionInScaledSpace=new m,this._distanceToLimbInScaledSpaceSquared=0,l(t)&&(this.cameraPosition=t)}Object.defineProperties(op.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=m.magnitudeSquared(n)-1;m.clone(e,this._cameraPosition),this._cameraPositionInScaledSpace=n,this._distanceToLimbInScaledSpaceSquared=i}}});var Nhe=new m;op.prototype.isPointVisible=function(e){let n=this._ellipsoid.transformPositionToScaledSpace(e,Nhe);return OJ(n,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};op.prototype.isScaledSpacePointVisible=function(e){return OJ(e,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};var mqe=new m;op.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid=function(e,t){let n=this._ellipsoid,i,o;return l(t)&&t<0&&n.minimumRadius>-t?(o=mqe,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),OJ(e,o,i)};op.prototype.computeHorizonCullingPoint=function(e,t,n){return Uhe(this._ellipsoid,e,t,n)};var Dhe=ie.clone(ie.UNIT_SPHERE);op.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid=function(e,t,n,i){let o=Qhe(this._ellipsoid,n,Dhe);return Uhe(o,e,t,i)};op.prototype.computeHorizonCullingPointFromVertices=function(e,t,n,i,o){return khe(this._ellipsoid,e,t,n,i,o)};op.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid=function(e,t,n,i,o,r){let s=Qhe(this._ellipsoid,o,Dhe);return khe(s,e,t,n,i,r)};var hqe=[];op.prototype.computeHorizonCullingPointFromRectangle=function(e,t,n){let i=le.subsample(e,t,0,hqe),o=ue.fromPoints(i);if(!(m.magnitude(o.center)<.1*t.minimumRadius))return this.computeHorizonCullingPoint(o.center,i,n)};var fqe=new m;function Qhe(e,t,n){if(l(t)&&t<0&&e.minimumRadius>-t){let i=m.fromElements(e.radii.x+t,e.radii.y+t,e.radii.z+t,fqe);e=ie.fromCartesian3(i,n)}return e}function Uhe(e,t,n,i){l(i)||(i=new m);let o=Hhe(e,t),r=0;for(let s=0,a=n.length;s<a;++s){let c=n[s],d=Yhe(e,c,o);if(d<0)return;r=Math.max(r,d)}return Ohe(o,r,i)}var f5=new m;function khe(e,t,n,i,o,r){l(r)||(r=new m),i=i??3,o=o??m.ZERO;let s=Hhe(e,t),a=0;for(let c=0,d=n.length;c<d;c+=i){f5.x=n[c]+o.x,f5.y=n[c+1]+o.y,f5.z=n[c+2]+o.z;let u=Yhe(e,f5,s);if(u<0)return;a=Math.max(a,u)}return Ohe(s,a,r)}function OJ(e,t,n){let i=t,o=n,r=m.subtract(e,i,Nhe),s=-m.dot(r,i);return!(o<0?s>0:s>o&&s*s/m.magnitudeSquared(r)>o)}var pqe=new m,Aqe=new m;function Yhe(e,t,n){let i=e.transformPositionToScaledSpace(t,pqe),o=m.magnitudeSquared(i),r=Math.sqrt(o),s=m.divideByScalar(i,r,Aqe);o=Math.max(1,o),r=Math.max(1,r);let a=m.dot(s,n),c=m.magnitude(m.cross(s,n,s)),d=1/r,u=Math.sqrt(o-1)*d;return 1/(a*d-c*u)}function Ohe(e,t,n){if(!(t<=0||t===1/0||t!==t))return m.multiplyByScalar(e,t,n)}var YJ=new m;function Hhe(e,t){return m.equals(t,m.ZERO)?t:(e.transformPositionToScaledSpace(t,YJ),m.normalize(YJ,YJ))}var gg=op;var Iti=y(C(),1);function Ur(e,t){e=e??Y.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.scaleByDistance,o=e.distanceDisplayCondition;l(n)&&(n=zt.clone(n)),l(i)&&(i=zt.clone(i)),l(o)&&(o=Qt.clone(o)),this._show=e.show??!0,this._position=m.clone(e.position??m.ZERO),this._actualPosition=m.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??Ir.NONE}var zhe=Ur.SHOW_INDEX=0,jhe=Ur.POSITION_INDEX=1,gqe=Ur.COLOR_INDEX=2,bqe=Ur.OUTLINE_COLOR_INDEX=3,yqe=Ur.OUTLINE_WIDTH_INDEX=4,Cqe=Ur.PIXEL_SIZE_INDEX=5,xqe=Ur.SCALE_BY_DISTANCE_INDEX=6,Iqe=Ur.TRANSLUCENCY_BY_DISTANCE_INDEX=7,_qe=Ur.DISTANCE_DISPLAY_CONDITION_INDEX=8,Eqe=Ur.DISABLE_DEPTH_DISTANCE_INDEX=9,Tqe=Ur.SPLIT_DIRECTION_INDEX=10;Ur.NUMBER_OF_PROPERTIES=11;function iu(e,t){let n=e._pointPrimitiveCollection;l(n)&&(n._updatePointPrimitive(e,t),e._dirty=!0)}Object.defineProperties(Ur.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,iu(this,zhe))}},position:{get:function(){return this._position},set:function(e){let t=this._position;m.equals(t,e)||(m.clone(e,t),m.clone(e,this._actualPosition),iu(this,jhe))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;zt.equals(t,e)||(this._scaleByDistance=zt.clone(e,t),iu(this,xqe))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;zt.equals(t,e)||(this._translucencyByDistance=zt.clone(e,t),iu(this,Iqe))}},pixelSize:{get:function(){return this._pixelSize},set:function(e){this._pixelSize!==e&&(this._pixelSize=e,iu(this,Cqe))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),iu(this,gqe))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;U.equals(t,e)||(U.clone(e,t),iu(this,bqe))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,iu(this,yqe))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){Qt.equals(this._distanceDisplayCondition,e)||(this._distanceDisplayCondition=Qt.clone(e,this._distanceDisplayCondition),iu(this,_qe))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,iu(this,Eqe))}},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,iu(this,zhe))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,iu(this,Tqe))}}});Ur.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._collection,id:this._id})),this._pickId};Ur.prototype._getActualPosition=function(){return this._actualPosition};Ur.prototype._setActualPosition=function(e){m.clone(e,this._actualPosition),iu(this,jhe)};var Khe=new ce;Ur._computeActualPosition=function(e,t,n){return t.mode===re.SCENE3D?e:(X.multiplyByPoint(n,e,Khe),to.computeActualEllipsoidPosition(t,Khe))};var Jhe=new ce;Ur._computeScreenSpacePosition=function(e,t,n,i){let o=X.multiplyByVector(e,ce.fromElements(t.x,t.y,t.z,1,Jhe),Jhe);return to.worldToWindowCoordinates(n,o,i)};Ur.prototype.computeScreenSpacePosition=function(e,t){let n=this._pointPrimitiveCollection;l(t)||(t=new D);let i=n.modelMatrix,o=Ur._computeScreenSpacePosition(i,this._actualPosition,e,t);if(l(o))return o.y=e.canvas.clientHeight-o.y,o};Ur.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 Ke),n.x=r,n.y=s,n.width=a,n.height=c,n};Ur.prototype.equals=function(e){return this===e||l(e)&&this._id===e._id&&m.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)&&zt.equals(this._scaleByDistance,e._scaleByDistance)&&zt.equals(this._translucencyByDistance,e._translucencyByDistance)&&Qt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};Ur.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._pointPrimitiveCollection=void 0};var $s=Ur;var $ti=y(C(),1);var Eti=y(C(),1),R0=`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 Sti=y(C(),1),aW=`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; vec4 outlineColor; vec4 pickColor; // compressedAttribute0.z => pickColor.rgb temp = compressedAttribute0.z * SHIFT_RIGHT8; pickColor.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; pickColor.g = (temp - floor(temp)) * SHIFT_LEFT8; pickColor.r = floor(temp); // compressedAttribute0.x => color.rgb temp = compressedAttribute0.x * SHIFT_RIGHT8; color.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; color.g = (temp - floor(temp)) * SHIFT_LEFT8; color.r = floor(temp); // compressedAttribute0.y => outlineColor.rgb temp = compressedAttribute0.y * SHIFT_RIGHT8; outlineColor.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; outlineColor.g = (temp - floor(temp)) * SHIFT_LEFT8; outlineColor.r = floor(temp); // compressedAttribute0.w => color.a, outlineColor.a, pickColor.a temp = compressedAttribute0.w * SHIFT_RIGHT8; pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8; pickColor = pickColor / 255.0; temp = floor(temp) * SHIFT_RIGHT8; outlineColor.a = (temp - floor(temp)) * SHIFT_LEFT8; outlineColor /= 255.0; color.a = floor(temp); color /= 255.0; /////////////////////////////////////////////////////////////////////////// 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 Sqe=$s.SHOW_INDEX,KJ=$s.POSITION_INDEX,qhe=$s.COLOR_INDEX,Lqe=$s.OUTLINE_COLOR_INDEX,Rqe=$s.OUTLINE_WIDTH_INDEX,Vqe=$s.PIXEL_SIZE_INDEX,$he=$s.SCALE_BY_DISTANCE_INDEX,efe=$s.TRANSLUCENCY_BY_DISTANCE_INDEX,tfe=$s.DISTANCE_DISPLAY_CONDITION_INDEX,Gqe=$s.DISABLE_DEPTH_DISTANCE_INDEX,Zqe=$s.SPLIT_DIRECTION_INDEX,JJ=$s.NUMBER_OF_PROPERTIES,kc={positionHighAndSize:0,positionLowAndOutline:1,compressedAttribute0:2,compressedAttribute1:3,scaleByDistance:4,distanceDisplayConditionAndDisableDepthAndSplitDirection:5};function Im(e){e=e??Y.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(JJ),this._maxPixelSize=1,this._baseVolume=new ue,this._baseVolumeWC=new ue,this._baseVolume2D=new ue,this._boundingVolume=new ue,this._boundingVolumeDirty=!1,this._colorCommands=[],this.show=e.show??!0,this.modelMatrix=X.clone(e.modelMatrix??X.IDENTITY),this._modelMatrix=X.clone(X.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.blendOption=e.blendOption??No.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=re.SCENE3D,this._maxTotalPointSize=1,this._buffersUsage=[Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW];let t=this;this._uniforms={u_maxTotalPointSize:function(){return t._maxTotalPointSize}}}Object.defineProperties(Im.prototype,{length:{get:function(){return jJ(this),this._pointPrimitives.length}}});function nfe(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}Im.prototype.add=function(e){let t=new $s(e,this);return t._index=this._pointPrimitives.length,this._pointPrimitives.push(t),this._createVertexArray=!0,t};Im.prototype.remove=function(e){return this.contains(e)?(this._pointPrimitives[e._index]=null,this._pointPrimitivesRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};Im.prototype.removeAll=function(){nfe(this._pointPrimitives),this._pointPrimitives=[],this._pointPrimitivesToUpdate=[],this._pointPrimitivesToUpdateIndex=0,this._pointPrimitivesRemoved=!1,this._createVertexArray=!0};function jJ(e){if(e._pointPrimitivesRemoved){e._pointPrimitivesRemoved=!1;let t=[],n=e._pointPrimitives,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];s&&(s._index=r++,t.push(s))}e._pointPrimitives=t}}Im.prototype._updatePointPrimitive=function(e,t){e._dirty||(this._pointPrimitivesToUpdate[this._pointPrimitivesToUpdateIndex++]=e),++this._propertiesChanged[t]};Im.prototype.contains=function(e){return l(e)&&e._pointPrimitiveCollection===this};Im.prototype.get=function(e){return jJ(this),this._pointPrimitives[e]};Im.prototype.computeNewBuffersUsage=function(){let e=this._buffersUsage,t=!1,n=this._propertiesChanged;for(let i=0;i<JJ;++i){let o=n[i]===0?Ne.STATIC_DRAW:Ne.STREAM_DRAW;t=t||e[i]!==o,e[i]=o}return t};function Bqe(e,t,n){return new zA(e,[{index:kc.positionHighAndSize,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[KJ]},{index:kc.positionLowAndShow,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[KJ]},{index:kc.compressedAttribute0,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[qhe]},{index:kc.compressedAttribute1,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[efe]},{index:kc.scaleByDistance,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[$he]},{index:kc.distanceDisplayConditionAndDisableDepthAndSplitDirection,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:n[tfe]}],t)}var HJ=new ni;function ife(e,t,n,i){let o=i._index,r=i._getActualPosition();e._mode===re.SCENE3D&&(ue.expand(e._baseVolume,r,e._baseVolume),e._boundingVolumeDirty=!0),ni.fromCartesian(r,HJ);let s=i.pixelSize,a=i.outlineWidth;e._maxPixelSize=Math.max(e._maxPixelSize,s+a);let c=n[kc.positionHighAndSize],d=HJ.high;c(o,d.x,d.y,d.z,s);let u=n[kc.positionLowAndOutline],h=HJ.low;u(o,h.x,h.y,h.z,a)}var p5=65536,cW=256;function ofe(e,t,n,i){let o=i._index,r=i.color,s=i.getPickId(t).color,a=i.outlineColor,c=U.floatToByte(r.red),d=U.floatToByte(r.green),u=U.floatToByte(r.blue),h=c*p5+d*cW+u;c=U.floatToByte(a.red),d=U.floatToByte(a.green),u=U.floatToByte(a.blue);let p=c*p5+d*cW+u;c=U.floatToByte(s.red),d=U.floatToByte(s.green),u=U.floatToByte(s.blue);let g=c*p5+d*cW+u,f=U.floatToByte(r.alpha)*p5+U.floatToByte(a.alpha)*cW+U.floatToByte(s.alpha),b=n[kc.compressedAttribute0];b(o,h,p,g,f)}function rfe(e,t,n,i){let o=i._index,r=0,s=1,a=1,c=1,d=i.translucencyByDistance;l(d)&&(r=d.near,s=d.nearValue,a=d.far,c=d.farValue,(s!==1||c!==1)&&(e._shaderTranslucencyByDistance=!0));let u=i.show&&i.clusterShow;i.color.alpha===0&&i.outlineColor.alpha===0&&(u=!1),s=Z.clamp(s,0,1),s=s===1?255:s*255|0;let h=(u?1:0)*cW+s;c=Z.clamp(c,0,1),c=c===1?255:c*255|0;let p=c,g=n[kc.compressedAttribute1];g(o,h,p,r,a)}function sfe(e,t,n,i){let o=i._index,r=n[kc.scaleByDistance],s=0,a=1,c=1,d=1,u=i.scaleByDistance;l(u)&&(s=u.near,a=u.nearValue,c=u.far,d=u.farValue,(a!==1||d!==1)&&(e._shaderScaleByDistance=!0)),r(o,s,a,c,d)}function afe(e,t,n,i){let o=i._index,r=n[kc.distanceDisplayConditionAndDisableDepthAndSplitDirection],s=0,a=Number.MAX_VALUE,c=i.distanceDisplayCondition;l(c)&&(s=c.near,a=c.far,s*=s,a*=a,e._shaderDistanceDisplayCondition=!0);let d=i.disableDepthTestDistance;d*=d,d>0&&(e._shaderDisableDepthDistance=!0,d===Number.POSITIVE_INFINITY&&(d=-1));let u=0,h=i.splitDirection;l(h)&&(u=h),r(o,s,a,d,u)}function wqe(e,t,n,i){ife(e,t,n,i),ofe(e,t,n,i),rfe(e,t,n,i),sfe(e,t,n,i),afe(e,t,n,i)}function zJ(e,t,n,i,o,r){let s;i.mode===re.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let c=0;c<n;++c){let d=t[c],u=d.position,h=$s._computeActualPosition(u,i,o);l(h)&&(d._setActualPosition(h),r?a.push(h):ue.expand(s,h,s))}r&&ue.fromPoints(a,s)}function Xqe(e,t){let n=t.mode,i=e._pointPrimitives,o=e._pointPrimitivesToUpdate,r=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==re.SCENE3D&&!X.equals(r,e.modelMatrix)?(e._mode=n,X.clone(e.modelMatrix,r),e._createVertexArray=!0,(n===re.SCENE3D||n===re.SCENE2D||n===re.COLUMBUS_VIEW)&&zJ(e,i,i.length,t,r,!0)):n===re.MORPHING?zJ(e,i,i.length,t,r,!0):(n===re.SCENE2D||n===re.COLUMBUS_VIEW)&&zJ(e,o,e._pointPrimitivesToUpdateIndex,t,r,!1)}function Wqe(e,t,n){let o=t.camera.getPixelSize(n,t.context.drawingBufferWidth,t.context.drawingBufferHeight)*e._maxPixelSize;n.radius+=o}var Fqe=[];Im.prototype.update=function(e){if(jJ(this),!this.show)return;this._maxTotalPointSize=Kt.maximumAliasedPointSize,Xqe(this,e);let n=this._pointPrimitives.length,i=this._pointPrimitivesToUpdate,o=this._pointPrimitivesToUpdateIndex,r=this._propertiesChanged,s=this._createVertexArray,a,c=e.context,d=e.passes,u=d.pick;if(s||!u&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(let R=0;R<JJ;++R)r[R]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),n>0){this._vaf=Bqe(c,n,this._buffersUsage),a=this._vaf.writers;for(let R=0;R<n;++R){let G=this._pointPrimitives[R];G._dirty=!1,wqe(this,c,a,G)}this._vaf.commit()}this._pointPrimitivesToUpdateIndex=0}else if(o>0){let R=Fqe;R.length=0,(r[KJ]||r[Rqe]||r[Vqe])&&R.push(ife),(r[qhe]||r[Lqe])&&R.push(ofe),(r[Sqe]||r[efe])&&R.push(rfe),r[$he]&&R.push(sfe),(r[tfe]||r[Gqe]||r[Zqe])&&R.push(afe);let G=R.length;if(a=this._vaf.writers,o/n>.1){for(let B=0;B<o;++B){let w=i[B];w._dirty=!1;for(let F=0;F<G;++F)R[F](this,c,a,w)}this._vaf.commit()}else{for(let B=0;B<o;++B){let w=i[B];w._dirty=!1;for(let F=0;F<G;++F)R[F](this,c,a,w);this._vaf.subCommit(w._index,1)}this._vaf.endSubCommits()}this._pointPrimitivesToUpdateIndex=0}if(o>n*1.5&&(i.length=n),!l(this._vaf)||!l(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,ue.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let h,p=X.IDENTITY;e.mode===re.SCENE3D?(p=this.modelMatrix,h=ue.clone(this._baseVolumeWC,this._boundingVolume)):h=ue.clone(this._baseVolume2D,this._boundingVolume),Wqe(this,e,h);let g=this._blendOption!==this.blendOption;this._blendOption=this.blendOption,g&&(this._blendOption===No.OPAQUE||this._blendOption===No.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Qe.fromCache({depthTest:{enabled:!0,func:ne.LEQUAL},depthMask:!0}):this._rsOpaque=void 0,this._blendOption===No.TRANSLUCENT||this._blendOption===No.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Qe.fromCache({depthTest:{enabled:!0,func:ne.LEQUAL},depthMask:!1,blending:bn.ALPHA_BLEND}):this._rsTranslucent=void 0),this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let f,b;(g||this._shaderScaleByDistance&&!this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance&&!this._compiledShaderTranslucencyByDistance||this._shaderDistanceDisplayCondition&&!this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance)&&(f=new Oe({sources:[aW]}),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===No.OPAQUE_AND_TRANSLUCENT&&(b=new Oe({defines:["OPAQUE"],sources:[R0]}),this._sp=ln.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:b,attributeLocations:kc}),b=new Oe({defines:["TRANSLUCENT"],sources:[R0]}),this._spTranslucent=ln.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:b,attributeLocations:kc})),this._blendOption===No.OPAQUE&&(b=new Oe({sources:[R0]}),this._sp=ln.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:b,attributeLocations:kc})),this._blendOption===No.TRANSLUCENT&&(b=new Oe({sources:[R0]}),this._spTranslucent=ln.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:b,attributeLocations:kc})),this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance);let x,I,_,E,S=e.commandList;if(d.render||u){let R=this._colorCommands,G=this._blendOption===No.OPAQUE,B=this._blendOption===No.OPAQUE_AND_TRANSLUCENT;x=this._vaf.va,I=x.length,R.length=I;let w=B?I*2:I;for(E=0;E<w;++E){let F=G||B&&E%2===0;_=R[E],l(_)||(_=R[E]=new ot),_.primitiveType=We.POINTS,_.pass=F||!B?Ge.OPAQUE:Ge.TRANSLUCENT,_.owner=this;let P=B?Math.floor(E/2):E;_.boundingVolume=h,_.modelMatrix=p,_.shaderProgram=F?this._sp:this._spTranslucent,_.uniformMap=this._uniforms,_.vertexArray=x[P].va,_.renderState=F?this._rsOpaque:this._rsTranslucent,_.debugShowBoundingVolume=this.debugShowBoundingVolume,_.pickId="v_pickColor",S.push(_)}}};Im.prototype.isDestroyed=function(){return!1};Im.prototype.destroy=function(){return this._sp=this._sp&&this._sp.destroy(),this._spTranslucent=this._spTranslucent&&this._spTranslucent.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),nfe(this._pointPrimitives),me(this)};var vT=Im;var tni=y(C(),1),cfe=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],qJ=1,lW=8,uW=class e{static from(t){if(!(t instanceof ArrayBuffer))throw new Error("Data must be an instance of ArrayBuffer.");let[n,i]=new Uint8Array(t,0,2);if(n!==219)throw new Error("Data does not appear to be in a KDBush format.");let o=i>>4;if(o!==qJ)throw new Error(`Got v${o} data when expected v${qJ}.`);let r=cfe[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,t)}constructor(t,n=64,i=Float64Array,o){if(isNaN(t)||t<0)throw new Error(`Unpexpected 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 r=cfe.indexOf(this.ArrayType),s=t*2*this.ArrayType.BYTES_PER_ELEMENT,a=t*this.IndexArrayType.BYTES_PER_ELEMENT,c=(8-a%8)%8;if(r<0)throw new Error(`Unexpected typed array class: ${i}.`);o&&o instanceof ArrayBuffer?(this.data=o,this.ids=new this.IndexArrayType(this.data,lW,t),this.coords=new this.ArrayType(this.data,lW+a+c,t*2),this._pos=t*2,this._finished=!0):(this.data=new ArrayBuffer(lW+s+a+c),this.ids=new this.IndexArrayType(this.data,lW,t),this.coords=new this.ArrayType(this.data,lW+a+c,t*2),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,(qJ<<4)+r]),new Uint16Array(this.data,2,1)[0]=n,new Uint32Array(this.data,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 e4(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,c=[0,r.length-1,0],d=[];for(;c.length;){let u=c.pop()||0,h=c.pop()||0,p=c.pop()||0;if(h-p<=a){for(let x=p;x<=h;x++){let I=s[2*x],_=s[2*x+1];I>=t&&I<=i&&_>=n&&_<=o&&d.push(r[x])}continue}let g=p+h>>1,f=s[2*g],b=s[2*g+1];f>=t&&f<=i&&b>=n&&b<=o&&d.push(r[g]),(u===0?t<=f:n<=b)&&(c.push(p),c.push(g-1),c.push(1-u)),(u===0?i>=f:o>=b)&&(c.push(g+1),c.push(h),c.push(1-u))}return d}within(t,n,i){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");let{ids:o,coords:r,nodeSize:s}=this,a=[0,o.length-1,0],c=[],d=i*i;for(;a.length;){let u=a.pop()||0,h=a.pop()||0,p=a.pop()||0;if(h-p<=s){for(let x=p;x<=h;x++)lfe(r[2*x],r[2*x+1],t,n)<=d&&c.push(o[x]);continue}let g=p+h>>1,f=r[2*g],b=r[2*g+1];lfe(f,b,t,n)<=d&&c.push(o[g]),(u===0?t-i<=f:n-i<=b)&&(a.push(p),a.push(g-1),a.push(1-u)),(u===0?t+i>=f:n+i>=b)&&(a.push(g+1),a.push(h),a.push(1-u))}return c}};function e4(e,t,n,i,o,r){if(o-i<=n)return;let s=i+o>>1;dfe(e,t,s,i,o,r),e4(e,t,n,i,s-1,1-r),e4(e,t,n,s+1,o,1-r)}function dfe(e,t,n,i,o,r){for(;o>i;){if(o-i>600){let d=o-i+1,u=n-i+1,h=Math.log(d),p=.5*Math.exp(2*h/3),g=.5*Math.sqrt(h*p*(d-p)/d)*(u-d/2<0?-1:1),f=Math.max(i,Math.floor(n-u*p/d+g)),b=Math.min(o,Math.floor(n+(d-u)*p/d+g));dfe(e,t,n,f,b,r)}let s=t[2*n+r],a=i,c=o;for(dW(e,t,i,n),t[2*o+r]>s&&dW(e,t,i,o);a<c;){for(dW(e,t,a,c),a++,c--;t[2*a+r]<s;)a++;for(;t[2*c+r]>s;)c--}t[2*i+r]===s?dW(e,t,i,c):(c++,dW(e,t,c,o)),c<=n&&(i=c+1),n<=c&&(o=c-1)}}function dW(e,t,n,i){$J(e,n,i),$J(t,2*n,2*i),$J(t,2*n+1,2*i+1)}function $J(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}function lfe(e,t,n,i){let o=e-n,r=t-i;return o*o+r*r}function kh(e){e=e??Y.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 Ce,this.show=e.show??!0}function ufe(e,t){e.x-=t,e.y-=t,e.width+=t*2,e.height+=t*2}var Pqe=new Ke;function mfe(e,t,n,i,o){if(l(e._labelCollection)&&i._clusterLabels?o=p0.getScreenSpaceBoundingBox(e,t,o):l(e._billboardCollection)&&i._clusterBillboards?o=Eo.getScreenSpaceBoundingBox(e,t,o):l(e._pointPrimitiveCollection)&&i._clusterPoints&&(o=$s.getScreenSpaceBoundingBox(e,t,o)),ufe(o,n),i._clusterLabels&&!l(e._labelCollection)&&l(e.id)&&ffe(i,e.id.id)&&l(e.id._label)){let r=i._collectionIndicesByEntity[e.id.id].labelIndex,s=i._labelCollection.get(r),a=p0.getScreenSpaceBoundingBox(s,t,Pqe);ufe(a,n),o=Ke.union(o,a,o)}return o}function Mqe(e,t){if(e.clusterShow=!0,!l(e._labelCollection)&&l(e.id)&&ffe(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 hfe(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 ffe(e,t){return l(e)&&l(e._collectionIndicesByEntity[t])&&l(e._collectionIndicesByEntity[t].labelIndex)}function t4(e,t,n,i,o){if(!l(e))return;let r=e.length;for(let s=0;s<r;++s){let a=e.get(s);if(a.clusterShow=!1,!a.show||o._scene.mode===re.SCENE3D&&!i.isPointVisible(a.position))continue;let c=o._clusterLabels&&l(a._labelCollection),d=o._clusterBillboards&&l(a.id._billboard),u=o._clusterPoints&&l(a.id._point);if(c&&(u||d))continue;let h=a.computeScreenSpacePosition(n);l(h)&&t.push({index:s,collection:e,clustered:!1,coord:h})}}var vqe=new Ke,Nqe=new Ke,Dqe=new Ke;function Qqe(e){return function(t){if(l(t)&&t<.05||!e.enabled)return;let n=e._scene,i=e._labelCollection,o=e._billboardCollection,r=e._pointCollection;if(!l(i)&&!l(o)&&!l(r)||!e._clusterBillboards&&!e._clusterLabels&&!e._clusterPoints)return;let s=e._clusterLabelCollection,a=e._clusterBillboardCollection,c=e._clusterPointCollection;l(s)?s.removeAll():s=e._clusterLabelCollection=new ep({scene:n}),l(a)?a.removeAll():a=e._clusterBillboardCollection=new qd({scene:n}),l(c)?c.removeAll():c=e._clusterPointCollection=new vT;let d=e._pixelRange,u=e._minimumClusterSize,h=e._previousClusters,p=[],g=e._previousHeight,f=n.camera.positionCartographic.height,b=n.ellipsoid,x=n.camera.positionWC,I=new gg(b,x),_=[];e._clusterLabels&&t4(i,_,n,I,e),e._clusterBillboards&&t4(o,_,n,I,e),e._clusterPoints&&t4(r,_,n,I,e);let E,S,R,G,B,w,F,P,A,T,L,V;if(_.length>0){let W=new uW(_.length,64,Uint32Array);for(let M=0;M<_.length;++M)W.add(_[M].coord.x,_[M].coord.y);if(W.finish(),f<g)for(R=h.length,E=0;E<R;++E){let M=h[E];if(!I.isPointVisible(M.position))continue;let Q=Eo._computeScreenSpacePosition(X.IDENTITY,M.position,m.ZERO,D.ZERO,n);if(!l(Q))continue;let N=1-f/g,k=M.width=M.width*N,v=M.height=M.height*N;k=Math.max(k,M.minimumWidth),v=Math.max(v,M.minimumHeight);let O=Q.x-k*.5,H=Q.y-v*.5,ee=Q.x+k,K=Q.y+v;for(B=W.range(O,H,ee,K),w=B.length,T=0,A=[],S=0;S<w;++S)F=B[S],P=_[F],P.clustered||(++T,L=P.collection,V=P.index,A.push(L.get(V).id));if(T>=u)for(hfe(M.position,T,A,e),p.push(M),S=0;S<w;++S)_[B[S]].clustered=!0}for(R=_.length,E=0;E<R;++E){let M=_[E];if(M.clustered)continue;M.clustered=!0,L=M.collection,V=M.index;let Q=L.get(V);G=mfe(Q,M.coord,d,e,vqe);let N=Ke.clone(G,Nqe);B=W.range(G.x,G.y,G.x+G.width,G.y+G.height),w=B.length;let k=m.clone(Q.position);for(T=1,A=[Q.id],S=0;S<w;++S)if(F=B[S],P=_[F],!P.clustered){let v=P.collection.get(P.index),O=mfe(v,P.coord,d,e,Dqe);m.add(v.position,k,k),Ke.union(N,O,N),++T,A.push(v.id)}if(T>=u){let v=m.multiplyByScalar(k,1/T,k);for(hfe(v,T,A,e),p.push({position:v,width:N.width,height:N.height,minimumWidth:G.width,minimumHeight:G.height}),S=0;S<w;++S)_[B[S]].clustered=!0}else Mqe(Q,e)}}s.length===0&&(s.destroy(),e._clusterLabelCollection=void 0),a.length===0&&(a.destroy(),e._clusterBillboardCollection=void 0),c.length===0&&(c.destroy(),e._clusterPointCollection=void 0),e._previousClusters=p,e._previousHeight=f}}kh.prototype._initialize=function(e){this._scene=e;let t=Qqe(this);this._cluster=t,this._removeEventListener=e.camera.changed.addEventListener(t)};Object.defineProperties(kh.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this._enabledDirty=e!==this._enabled,this._enabled=e}},pixelRange:{get:function(){return this._pixelRange},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._pixelRange,this._pixelRange=e}},minimumClusterSize:{get:function(){return this._minimumClusterSize},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._minimumClusterSize,this._minimumClusterSize=e}},clusterEvent:{get:function(){return this._clusterEvent}},clusterBillboards:{get:function(){return this._clusterBillboards},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterBillboards,this._clusterBillboards=e}},clusterLabels:{get:function(){return this._clusterLabels},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterLabels,this._clusterLabels=e}},clusterPoints:{get:function(){return this._clusterPoints},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterPoints,this._clusterPoints=e}},ready:{get:function(){return!this._enabledDirty&&!this._clusterDirty&&(!l(this._billboardCollection)||this._billboardCollection.ready)&&(!l(this._labelCollection)||this._labelCollection.ready)}}});function i4(e,t,n,i){return function(o){let r=this[e];l(this._collectionIndicesByEntity)||(this._collectionIndicesByEntity={});let s=this._collectionIndicesByEntity[o.id];if(l(s)||(s=this._collectionIndicesByEntity[o.id]={billboardIndex:void 0,labelIndex:void 0,pointIndex:void 0}),l(r)&&l(s[i]))return r.get(s[i]);l(r)||(r=this[e]=new t({scene:this._scene}));let a,c,d=this[n];d.length>0?(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 o4(e,t){let n=e._collectionIndicesByEntity[t];!l(n.billboardIndex)&&!l(n.labelIndex)&&!l(n.pointIndex)&&delete e._collectionIndicesByEntity[t]}kh.prototype.getLabel=i4("_labelCollection",ep,"_unusedLabelIndices","labelIndex");kh.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,o4(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};kh.prototype.getBillboard=i4("_billboardCollection",qd,"_unusedBillboardIndices","billboardIndex");kh.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,o4(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};kh.prototype.getPoint=i4("_pointCollection",vT,"_unusedPointIndices","pointIndex");kh.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,o4(this,e.id);let i=this._pointCollection.get(n);i.show=!1,i.id=void 0,this._unusedPointIndices.push(n),this._clusterDirty=!0};function n4(e){if(!l(e))return;let t=e.length;for(let n=0;n<t;++n)e.get(n).clusterShow=!0}function Uqe(e){e.enabled||(l(e._clusterLabelCollection)&&e._clusterLabelCollection.destroy(),l(e._clusterBillboardCollection)&&e._clusterBillboardCollection.destroy(),l(e._clusterPointCollection)&&e._clusterPointCollection.destroy(),e._clusterLabelCollection=void 0,e._clusterBillboardCollection=void 0,e._clusterPointCollection=void 0,n4(e._labelCollection),n4(e._billboardCollection),n4(e._pointCollection))}kh.prototype.update=function(e){if(!this.show)return;let t,n=this._labelCollection;l(n)&&n.length>0&&!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,Uqe(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)};kh.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 ou=kh;function r4(e){this._name=e,this._clock=void 0,this._changed=new Ce,this._error=new Ce,this._isLoading=!1,this._loading=new Ce,this._entityCollection=new Ca(this),this._entityCluster=new ou}Object.defineProperties(r4.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{get:function(){return this._clock},set:function(e){this._clock!==e&&(this._clock=e,this._changed.raiseEvent(this))}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading},set:function(e){cs.setLoading(this,e)}},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}}});r4.prototype.update=function(e){return!0};var mW=r4;var Rii=y(C(),1);var Yni=y(C(),1);var Rni=y(C(),1);var pfe={};pfe.computePositions=function(e,t,n,i,o){let r=e*.5,s=-r,a=i+i,c=o?2*a:a,d=new Float64Array(c*3),u,h=0,p=0,g=o?a*3:0,f=o?(a+i)*3:i*3;for(u=0;u<i;u++){let b=u/i*Z.TWO_PI,x=Math.cos(b),I=Math.sin(b),_=x*n,E=I*n,S=x*t,R=I*t;d[p+g]=_,d[p+g+1]=E,d[p+g+2]=s,d[p+f]=S,d[p+f+1]=R,d[p+f+2]=r,p+=3,o&&(d[h++]=_,d[h++]=E,d[h++]=s,d[h++]=S,d[h++]=R,d[h++]=r)}return d};var Mx=pfe;var s4=new D,kqe=new m,Yqe=new m,Oqe=new m,Hqe=new m;function bg(e){e=e??Y.EMPTY_OBJECT;let t=e.length,n=e.topRadius,i=e.bottomRadius,o=e.vertexFormat??we.DEFAULT,r=e.slices??128;this._length=t,this._topRadius=n,this._bottomRadius=i,this._vertexFormat=we.clone(o),this._slices=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createCylinderGeometry"}bg.packedLength=we.packedLength+5;bg.pack=function(e,t,n){return n=n??0,we.pack(e._vertexFormat,t,n),n+=we.packedLength,t[n++]=e._length,t[n++]=e._topRadius,t[n++]=e._bottomRadius,t[n++]=e._slices,t[n]=e._offsetAttribute??-1,t};var Afe=new we,NT={vertexFormat:Afe,length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,offsetAttribute:void 0};bg.unpack=function(e,t,n){t=t??0;let i=we.unpack(e,t,Afe);t+=we.packedLength;let o=e[t++],r=e[t++],s=e[t++],a=e[t++],c=e[t];return l(n)?(n._vertexFormat=we.clone(i,n._vertexFormat),n._length=o,n._topRadius=r,n._bottomRadius=s,n._slices=a,n._offsetAttribute=c===-1?void 0:c,n):(NT.length=o,NT.topRadius=r,NT.bottomRadius=s,NT.slices=a,NT.offsetAttribute=c===-1?void 0:c,new bg(NT))};bg.createGeometry=function(e){let t=e._length,n=e._topRadius,i=e._bottomRadius,o=e._vertexFormat,r=e._slices;if(t<=0||n<0||i<0||n===0&&i===0)return;let s=r+r,a=r+s,c=s+s,d=Mx.computePositions(t,n,i,r,!0),u=o.st?new Float32Array(c*2):void 0,h=o.normal?new Float32Array(c*3):void 0,p=o.tangent?new Float32Array(c*3):void 0,g=o.bitangent?new Float32Array(c*3):void 0,f,b=o.normal||o.tangent||o.bitangent;if(b){let B=o.tangent||o.bitangent,w=0,F=0,P=0,A=Math.atan2(i-n,t),T=kqe;T.z=Math.sin(A);let L=Math.cos(A),V=Oqe,W=Yqe;for(f=0;f<r;f++){let M=f/r*Z.TWO_PI,Q=L*Math.cos(M),N=L*Math.sin(M);b&&(T.x=Q,T.y=N,B&&(V=m.normalize(m.cross(m.UNIT_Z,T,V),V)),o.normal&&(h[w++]=T.x,h[w++]=T.y,h[w++]=T.z,h[w++]=T.x,h[w++]=T.y,h[w++]=T.z),o.tangent&&(p[F++]=V.x,p[F++]=V.y,p[F++]=V.z,p[F++]=V.x,p[F++]=V.y,p[F++]=V.z),o.bitangent&&(W=m.normalize(m.cross(T,V,W),W),g[P++]=W.x,g[P++]=W.y,g[P++]=W.z,g[P++]=W.x,g[P++]=W.y,g[P++]=W.z))}for(f=0;f<r;f++)o.normal&&(h[w++]=0,h[w++]=0,h[w++]=-1),o.tangent&&(p[F++]=1,p[F++]=0,p[F++]=0),o.bitangent&&(g[P++]=0,g[P++]=-1,g[P++]=0);for(f=0;f<r;f++)o.normal&&(h[w++]=0,h[w++]=0,h[w++]=1),o.tangent&&(p[F++]=1,p[F++]=0,p[F++]=0),o.bitangent&&(g[P++]=0,g[P++]=1,g[P++]=0)}let x=12*r-12,I=Me.createTypedArray(c,x),_=0,E=0;for(f=0;f<r-1;f++)I[_++]=E,I[_++]=E+2,I[_++]=E+3,I[_++]=E,I[_++]=E+3,I[_++]=E+1,E+=2;for(I[_++]=s-2,I[_++]=0,I[_++]=1,I[_++]=s-2,I[_++]=1,I[_++]=s-1,f=1;f<r-1;f++)I[_++]=s+f+1,I[_++]=s+f,I[_++]=s;for(f=1;f<r-1;f++)I[_++]=a,I[_++]=a+f,I[_++]=a+f+1;let S=0;if(o.st){let B=Math.max(n,i);for(f=0;f<c;f++){let w=m.fromArray(d,f*3,Hqe);u[S++]=(w.x+B)/(2*B),u[S++]=(w.y+B)/(2*B)}}let R=new xn;o.position&&(R.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:d})),o.normal&&(R.normal=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:h})),o.tangent&&(R.tangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:p})),o.bitangent&&(R.bitangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:g})),o.st&&(R.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:u})),s4.x=t*.5,s4.y=Math.max(i,n);let G=new ue(m.ZERO,D.magnitude(s4));if(l(e._offsetAttribute)){t=d.length;let B=e._offsetAttribute===pn.NONE?0:1,w=new Uint8Array(t/3).fill(B);R.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:w})}return new pt({attributes:R,indices:I,primitiveType:We.TRIANGLES,boundingSphere:G,offsetAttribute:e._offsetAttribute})};var a4;bg.getUnitCylinder=function(){return l(a4)||(a4=bg.createGeometry(new bg({topRadius:1,bottomRadius:1,length:1,vertexFormat:we.POSITION_ONLY}))),a4};var hW=bg;var sii=y(C(),1);var c4=new D;function DT(e){e=e??Y.EMPTY_OBJECT;let t=e.length,n=e.topRadius,i=e.bottomRadius,o=e.slices??128,r=Math.max(e.numberOfVerticalLines??16,0);this._length=t,this._topRadius=n,this._bottomRadius=i,this._slices=o,this._numberOfVerticalLines=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createCylinderOutlineGeometry"}DT.packedLength=6;DT.pack=function(e,t,n){return n=n??0,t[n++]=e._length,t[n++]=e._topRadius,t[n++]=e._bottomRadius,t[n++]=e._slices,t[n++]=e._numberOfVerticalLines,t[n]=e._offsetAttribute??-1,t};var vx={length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};DT.unpack=function(e,t,n){t=t??0;let i=e[t++],o=e[t++],r=e[t++],s=e[t++],a=e[t++],c=e[t];return l(n)?(n._length=i,n._topRadius=o,n._bottomRadius=r,n._slices=s,n._numberOfVerticalLines=a,n._offsetAttribute=c===-1?void 0:c,n):(vx.length=i,vx.topRadius=o,vx.bottomRadius=r,vx.slices=s,vx.numberOfVerticalLines=a,vx.offsetAttribute=c===-1?void 0:c,new DT(vx))};DT.createGeometry=function(e){let t=e._length,n=e._topRadius,i=e._bottomRadius,o=e._slices,r=e._numberOfVerticalLines;if(t<=0||n<0||i<0||n===0&&i===0)return;let s=o*2,a=Mx.computePositions(t,n,i,o,!1),c=o*2,d;if(r>0){let b=Math.min(r,o);d=Math.round(o/b),c+=b}let u=Me.createTypedArray(s,c*2),h=0,p;for(p=0;p<o-1;p++)u[h++]=p,u[h++]=p+1,u[h++]=p+o,u[h++]=p+1+o;if(u[h++]=o-1,u[h++]=0,u[h++]=o+o-1,u[h++]=o,r>0)for(p=0;p<o;p+=d)u[h++]=p,u[h++]=p+o;let g=new xn;g.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:a}),c4.x=t*.5,c4.y=Math.max(i,n);let f=new ue(m.ZERO,D.magnitude(c4));if(l(e._offsetAttribute)){t=a.length;let b=e._offsetAttribute===pn.NONE?0:1,x=new Uint8Array(t/3).fill(b);g.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:x})}return new pt({attributes:g,indices:u,primitiveType:We.LINES,boundingSphere:f,offsetAttribute:e._offsetAttribute})};var fW=DT;var gfe=m.ZERO,bfe=new m,zqe=new m,yfe=new U;function Kqe(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 ru(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new Kqe(e),geometryPropertyName:"cylinder",observedPropertyNames:["availability","position","orientation","cylinder"]}),this._onEntityPropertyChanged(e,"cylinder",e.cylinder,void 0)}l(Object.create)&&(ru.prototype=Object.create(Ci.prototype),ru.prototype.constructor=ru);Object.defineProperties(ru.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});ru.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=jn.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r,color:void 0,offset:void 0};if(this._materialProperty instanceof qt){let a;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,yfe)),l(a)||(a=U.WHITE),s.color=tn.fromColor(a)}return l(this._options.offsetAttribute)&&(s.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,gfe,bfe))),new wt({id:t,geometry:new hW(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.ellipsoid),attributes:s})};ru.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=z.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,yfe),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:tn.fromColor(i),distanceDisplayCondition:jn.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,gfe,bfe))),new wt({id:t,geometry:new fW(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.ellipsoid),attributes:r})};ru.prototype._computeCenter=function(e,t){return z.getValueOrUndefined(this._entity.position,e,t)};ru.prototype._isHidden=function(e,t){return!l(e.position)||!l(t.length)||!l(t.topRadius)||!l(t.bottomRadius)||Ci.prototype._isHidden.call(this,e,t)};ru.prototype._isDynamic=function(e,t){return!e.position.isConstant||!z.isConstant(e.orientation)||!t.length.isConstant||!t.topRadius.isConstant||!t.bottomRadius.isConstant||!z.isConstant(t.slices)||!z.isConstant(t.outlineWidth)||!z.isConstant(t.numberOfVerticalLines)};ru.prototype._setStaticOptions=function(e,t){let n=z.getValueOrDefault(t.heightReference,ze.MINIMUM_VALUE,et.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof qt?yn.VERTEX_FORMAT:Io.MaterialSupport.TEXTURED.vertexFormat,i.length=t.length.getValue(ze.MINIMUM_VALUE),i.topRadius=t.topRadius.getValue(ze.MINIMUM_VALUE),i.bottomRadius=t.bottomRadius.getValue(ze.MINIMUM_VALUE),i.slices=z.getValueOrUndefined(t.slices,ze.MINIMUM_VALUE),i.numberOfVerticalLines=z.getValueOrUndefined(t.numberOfVerticalLines,ze.MINIMUM_VALUE),i.offsetAttribute=n!==et.NONE?pn.ALL:void 0};ru.prototype._onEntityPropertyChanged=fA;ru.DynamicGeometryUpdater=QT;function QT(e,t,n){yi.call(this,e,t,n)}l(Object.create)&&(QT.prototype=Object.create(yi.prototype),QT.prototype.constructor=QT);QT.prototype._isHidden=function(e,t,n){let i=this._options,o=z.getValueOrUndefined(e.position,n,zqe);return!l(o)||!l(i.length)||!l(i.topRadius)||!l(i.bottomRadius)||yi.prototype._isHidden.call(this,e,t,n)};QT.prototype._setOptions=function(e,t,n){let i=z.getValueOrDefault(t.heightReference,n,et.NONE),o=this._options;o.length=z.getValueOrUndefined(t.length,n),o.topRadius=z.getValueOrUndefined(t.topRadius,n),o.bottomRadius=z.getValueOrUndefined(t.bottomRadius,n),o.slices=z.getValueOrUndefined(t.slices,n),o.numberOfVerticalLines=z.getValueOrUndefined(t.numberOfVerticalLines,n),o.offsetAttribute=i!==et.NONE?pn.ALL:void 0};var pW=ru;var Rci=y(C(),1);var Gii=y(C(),1),Jqe={UNBOUNDED:0,CLAMPED:1,LOOP_STOP:2},ls=Object.freeze(Jqe);var Bii=y(C(),1),jqe={TICK_DEPENDENT:0,SYSTEM_CLOCK_MULTIPLIER:1,SYSTEM_CLOCK:2},Ro=Object.freeze(jqe);var Xii=y(C(),1),qqe={NONE:0,HOLD:1,EXTRAPOLATE:2},su=Object.freeze(qqe);var Fii=y(C(),1),Cfe=y(Bd(),1);function $qe(e){let t=new Cfe.default(e);t.normalize();let n=t.path(),i=n.lastIndexOf("/");return i!==-1&&(n=n.substr(i+1)),n}var yg=$qe;var Nii=y(C(),1);var e$e=Z.factorial;function l4(e,t,n,i,o,r){let s=0,a,c,d;if(i>0){for(c=0;c<o;c++){for(a=!1,d=0;d<r.length&&!a;d++)c===r[d]&&(a=!0);a||(r.push(c),s+=l4(e,t,n,i-1,o,r),r.splice(r.length-1,1))}return s}for(s=1,c=0;c<o;c++){for(a=!1,d=0;d<r.length&&!a;d++)c===r[d]&&(a=!0);a||(s*=e-n[t[c]])}return s}var A5={type:"Hermite"};A5.getRequiredDataPoints=function(e,t){return t=t??0,Math.max(Math.floor((e+1)/(t+1)),2)};A5.interpolateOrderZero=function(e,t,n,i,o){l(o)||(o=new Array(i));let r,s,a,c,d,u,h=t.length,p=new Array(i);for(r=0;r<i;r++){o[r]=0;let x=new Array(h);for(p[r]=x,s=0;s<h;s++)x[s]=[]}let g=h,f=new Array(g);for(r=0;r<g;r++)f[r]=r;let b=h-1;for(c=0;c<i;c++){for(s=0;s<g;s++)u=f[s]*i+c,p[c][0].push(n[u]);for(r=1;r<g;r++){let x=!1;for(s=0;s<g-r;s++){let I=t[f[s]],_=t[f[s+r]],E;_-I<=0?(u=f[s]*i+i*r+c,E=n[u],p[c][r].push(E/e$e(r))):(E=p[c][r-1][s+1]-p[c][r-1][s],p[c][r].push(E/(_-I))),x=x||E!==0}x||(b=r-1)}}for(a=0,d=0;a<=d;a++)for(r=a;r<=b;r++){let x=l4(e,f,t,a,r,[]);for(c=0;c<i;c++){let I=p[c][r][0];o[c+a*i]+=I*x}}return o};var t$e=[];A5.interpolate=function(e,t,n,i,o,r,s){let a=i*(r+1);l(s)||(s=new Array(a));for(let I=0;I<a;I++)s[I]=0;let c=t.length,d=new Array(c*(o+1)),u;for(u=0;u<c;u++)for(let I=0;I<o+1;I++)d[u*(o+1)+I]=u;let h=d.length,p=t$e,g=n$e(p,d,t,n,i,o),f=[],b=h*(h+1)/2,x=Math.min(g,r);for(let I=0;I<=x;I++)for(u=I;u<=g;u++){f.length=0;let _=l4(e,d,t,I,u,f),E=Math.floor(u*(1-u)/2)+h*u;for(let S=0;S<i;S++){let R=Math.floor(S*b),G=p[R+E];s[S+I*i]+=G*_}}return s};function n$e(e,t,n,i,o,r){let s,a,c=-1,d=t.length,u=d*(d+1)/2;for(let h=0;h<o;h++){let p=Math.floor(h*u);for(s=0;s<d;s++)a=t[s]*o*(r+1)+h,e[p+s]=i[a];for(let g=1;g<d;g++){let f=0,b=Math.floor(g*(1-g)/2)+d*g,x=!1;for(s=0;s<d-g;s++){let I=n[t[s]],_=n[t[s+g]],E,S;if(_-I<=0)a=t[s]*o*(r+1)+o*g+h,E=i[a],S=E/Z.factorial(g),e[p+b+f]=S,f++;else{let R=Math.floor((g-1)*(2-g)/2)+d*(g-1);E=e[p+R+s+1]-e[p+R+s],S=E/(_-I),e[p+b+f]=S,f++}x=x||E!==0}x&&(c=Math.max(c,g))}}return c}var AW=A5;var Uii=y(C(),1);var d4={type:"Lagrange"};d4.getRequiredDataPoints=function(e){return Math.max(e+1,2)};d4.interpolateOrderZero=function(e,t,n,i,o){l(o)||(o=new Array(i));let r,s,a=t.length;for(r=0;r<i;r++)o[r]=0;for(r=0;r<a;r++){let c=1;for(s=0;s<a;s++)if(s!==r){let d=t[r]-t[s];c*=(e-t[s])/d}for(s=0;s<i;s++)o[s]+=c*n[r*i+s]}return o};var gW=d4;var Oii=y(C(),1);var u4={type:"Linear"};u4.getRequiredDataPoints=function(e){return 2};u4.interpolateOrderZero=function(e,t,n,i,o){l(o)||(o=new Array(i));let r,s,a,c=t[0],d=t[1];for(r=0;r<i;r++)s=n[r],a=n[r+i],o[r]=((a-s)*e+d*s-c*a)/(d-c);return o};var Nx=u4;var Kii=y(C(),1);function Yc(e,t,n){this.clock=e??0,this.cone=t??0,this.magnitude=n??1}Yc.fromCartesian3=function(e,t){let n=e.x,i=e.y,o=e.z,r=n*n+i*i;return l(t)||(t=new Yc),t.clock=Math.atan2(i,n),t.cone=Math.atan2(Math.sqrt(r),o),t.magnitude=Math.sqrt(r+o*o),t};Yc.clone=function(e,t){if(l(e))return l(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=e.magnitude,t):new Yc(e.clock,e.cone,e.magnitude)};Yc.normalize=function(e,t){return l(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=1,t):new Yc(e.clock,e.cone,1)};Yc.equals=function(e,t){return e===t||l(e)&&l(t)&&e.clock===t.clock&&e.cone===t.cone&&e.magnitude===t.magnitude};Yc.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e.clock-t.clock)<=n&&Math.abs(e.cone-t.cone)<=n&&Math.abs(e.magnitude-t.magnitude)<=n};Yc.prototype.equals=function(e){return Yc.equals(this,e)};Yc.prototype.clone=function(e){return Yc.clone(this,e)};Yc.prototype.equalsEpsilon=function(e,t){return Yc.equalsEpsilon(this,e,t)};Yc.prototype.toString=function(){return`(${this.clock}, ${this.cone}, ${this.magnitude})`};var bW=Yc;var _W=y(Bd(),1);var hoi=y(C(),1);var soi=y(C(),1);var jii=y(C(),1),m4;typeof performance<"u"&&typeof performance.now=="function"&&isFinite(performance.now())?m4=function(){return performance.now()}:m4=function(){return Date.now()};var Fi=m4;function h4(e){e=e??Y.EMPTY_OBJECT;let t=e.currentTime,n=e.startTime,i=e.stopTime;l(t)?t=j.clone(t):l(n)?t=j.clone(n):l(i)?t=j.addDays(i,-1,new j):t=j.now(),l(n)?n=j.clone(n):n=j.clone(t),l(i)?i=j.clone(i):i=j.addDays(n,1,new j),this.startTime=n,this.stopTime=i,this.clockRange=e.clockRange??ls.UNBOUNDED,this.canAnimate=e.canAnimate??!0,this.onTick=new Ce,this.onStop=new Ce,this._currentTime=void 0,this._multiplier=void 0,this._clockStep=void 0,this._shouldAnimate=void 0,this._lastSystemTime=Fi(),this.currentTime=t,this.multiplier=e.multiplier??1,this.shouldAnimate=e.shouldAnimate??!1,this.clockStep=e.clockStep??Ro.SYSTEM_CLOCK_MULTIPLIER}Object.defineProperties(h4.prototype,{currentTime:{get:function(){return this._currentTime},set:function(e){j.equals(this._currentTime,e)||(this._clockStep===Ro.SYSTEM_CLOCK&&(this._clockStep=Ro.SYSTEM_CLOCK_MULTIPLIER),this._currentTime=e)}},multiplier:{get:function(){return this._multiplier},set:function(e){this._multiplier!==e&&(this._clockStep===Ro.SYSTEM_CLOCK&&(this._clockStep=Ro.SYSTEM_CLOCK_MULTIPLIER),this._multiplier=e)}},clockStep:{get:function(){return this._clockStep},set:function(e){e===Ro.SYSTEM_CLOCK&&(this._multiplier=1,this._shouldAnimate=!0,this._currentTime=j.now()),this._clockStep=e}},shouldAnimate:{get:function(){return this._shouldAnimate},set:function(e){this._shouldAnimate!==e&&(this._clockStep===Ro.SYSTEM_CLOCK&&(this._clockStep=Ro.SYSTEM_CLOCK_MULTIPLIER),this._shouldAnimate=e)}}});h4.prototype.tick=function(){let e=Fi(),t=j.clone(this._currentTime);if(this.canAnimate&&this._shouldAnimate){let n=this._clockStep;if(n===Ro.SYSTEM_CLOCK)t=j.now(t);else{let i=this._multiplier;if(n===Ro.TICK_DEPENDENT)t=j.addSeconds(t,i,t);else{let a=e-this._lastSystemTime;t=j.addSeconds(t,i*(a/1e3),t)}let o=this.clockRange,r=this.startTime,s=this.stopTime;if(o===ls.CLAMPED)j.lessThan(t,r)?t=j.clone(r,t):j.greaterThan(t,s)&&(t=j.clone(s,t),this.onStop.raiseEvent(this));else if(o===ls.LOOP_STOP)for(j.lessThan(t,r)&&(t=j.clone(r,t));j.greaterThan(t,s);)t=j.addSeconds(r,j.secondsDifference(t,s),t),this.onStop.raiseEvent(this)}}return this._currentTime=t,this._lastSystemTime=e,this.onTick.raiseEvent(this),t};var Yh=h4;function Dx(){this._definitionChanged=new Ce,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(Dx.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},startTime:ul("startTime"),stopTime:ul("stopTime"),currentTime:ul("currentTime"),clockRange:ul("clockRange"),clockStep:ul("clockStep"),multiplier:ul("multiplier")});Dx.prototype.clone=function(e){return l(e)||(e=new Dx),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};Dx.prototype.equals=function(e){return this===e||l(e)&&j.equals(this.startTime,e.startTime)&&j.equals(this.stopTime,e.stopTime)&&j.equals(this.currentTime,e.currentTime)&&this.clockRange===e.clockRange&&this.clockStep===e.clockStep&&this.multiplier===e.multiplier};Dx.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};Dx.prototype.getValue=function(e){return l(e)||(e=new Yh),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 Oh=Dx;var _oi=y(C(),1);var i$e=U.WHITE,o$e=.1,r$e=new D(8,8),s$e=new D(0,0),a$e=new D(1,1);function UT(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new Ce,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(UT.prototype,{isConstant:{get:function(){return z.isConstant(this._color)&&z.isConstant(this._cellAlpha)&&z.isConstant(this._lineCount)&&z.isConstant(this._lineThickness)&&z.isConstant(this._lineOffset)}},definitionChanged:{get:function(){return this._definitionChanged}},color:fe("color"),cellAlpha:fe("cellAlpha"),lineCount:fe("lineCount"),lineThickness:fe("lineThickness"),lineOffset:fe("lineOffset")});UT.prototype.getType=function(e){return"Grid"};var c$e=new j;UT.prototype.getValue=function(e,t){return l(e)||(e=j.now(c$e)),l(t)||(t={}),t.color=z.getValueOrClonedDefault(this._color,e,i$e,t.color),t.cellAlpha=z.getValueOrDefault(this._cellAlpha,e,o$e),t.lineCount=z.getValueOrClonedDefault(this._lineCount,e,r$e,t.lineCount),t.lineThickness=z.getValueOrClonedDefault(this._lineThickness,e,a$e,t.lineThickness),t.lineOffset=z.getValueOrClonedDefault(this._lineOffset,e,s$e,t.lineOffset),t};UT.prototype.equals=function(e){return this===e||e instanceof UT&&z.equals(this._color,e._color)&&z.equals(this._cellAlpha,e._cellAlpha)&&z.equals(this._lineCount,e._lineCount)&&z.equals(this._lineThickness,e._lineThickness)&&z.equals(this._lineOffset,e._lineOffset)};var kT=UT;var Zoi=y(C(),1);function YT(e){this._definitionChanged=new Ce,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(YT.prototype,{isConstant:{get:function(){return z.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:fe("color")});YT.prototype.getType=function(e){return"PolylineArrow"};var l$e=new j;YT.prototype.getValue=function(e,t){return l(e)||(e=j.now(l$e)),l(t)||(t={}),t.color=z.getValueOrClonedDefault(this._color,e,U.WHITE,t.color),t};YT.prototype.equals=function(e){return this===e||e instanceof YT&&z.equals(this._color,e._color)};var OT=YT;var Noi=y(C(),1);var d$e=U.WHITE,u$e=U.TRANSPARENT,m$e=16,h$e=255;function HT(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new Ce,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(HT.prototype,{isConstant:{get:function(){return z.isConstant(this._color)&&z.isConstant(this._gapColor)&&z.isConstant(this._dashLength)&&z.isConstant(this._dashPattern)}},definitionChanged:{get:function(){return this._definitionChanged}},color:fe("color"),gapColor:fe("gapColor"),dashLength:fe("dashLength"),dashPattern:fe("dashPattern")});HT.prototype.getType=function(e){return"PolylineDash"};var f$e=new j;HT.prototype.getValue=function(e,t){return l(e)||(e=j.now(f$e)),l(t)||(t={}),t.color=z.getValueOrClonedDefault(this._color,e,d$e,t.color),t.gapColor=z.getValueOrClonedDefault(this._gapColor,e,u$e,t.gapColor),t.dashLength=z.getValueOrDefault(this._dashLength,e,m$e,t.dashLength),t.dashPattern=z.getValueOrDefault(this._dashPattern,e,h$e,t.dashPattern),t};HT.prototype.equals=function(e){return this===e||e instanceof HT&&z.equals(this._color,e._color)&&z.equals(this._gapColor,e._gapColor)&&z.equals(this._dashLength,e._dashLength)&&z.equals(this._dashPattern,e._dashPattern)};var zT=HT;var Koi=y(C(),1);var p$e=U.WHITE,A$e=.25,g$e=1;function KT(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new Ce,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(KT.prototype,{isConstant:{get:function(){return z.isConstant(this._color)&&z.isConstant(this._glow)}},definitionChanged:{get:function(){return this._definitionChanged}},color:fe("color"),glowPower:fe("glowPower"),taperPower:fe("taperPower")});KT.prototype.getType=function(e){return"PolylineGlow"};var b$e=new j;KT.prototype.getValue=function(e,t){return l(e)||(e=j.now(b$e)),l(t)||(t={}),t.color=z.getValueOrClonedDefault(this._color,e,p$e,t.color),t.glowPower=z.getValueOrDefault(this._glowPower,e,A$e,t.glowPower),t.taperPower=z.getValueOrDefault(this._taperPower,e,g$e,t.taperPower),t};KT.prototype.equals=function(e){return this===e||e instanceof KT&&z.equals(this._color,e._color)&&z.equals(this._glowPower,e._glowPower)&&z.equals(this._taperPower,e._taperPower)};var JT=KT;var ori=y(C(),1);var y$e=U.WHITE,C$e=U.BLACK,x$e=1;function jT(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new Ce,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(jT.prototype,{isConstant:{get:function(){return z.isConstant(this._color)&&z.isConstant(this._outlineColor)&&z.isConstant(this._outlineWidth)}},definitionChanged:{get:function(){return this._definitionChanged}},color:fe("color"),outlineColor:fe("outlineColor"),outlineWidth:fe("outlineWidth")});jT.prototype.getType=function(e){return"PolylineOutline"};var I$e=new j;jT.prototype.getValue=function(e,t){return l(e)||(e=j.now(I$e)),l(t)||(t={}),t.color=z.getValueOrClonedDefault(this._color,e,y$e,t.color),t.outlineColor=z.getValueOrClonedDefault(this._outlineColor,e,C$e,t.outlineColor),t.outlineWidth=z.getValueOrDefault(this._outlineWidth,e,x$e),t};jT.prototype.equals=function(e){return this===e||e instanceof jT&&z.equals(this._color,e._color)&&z.equals(this._outlineColor,e._outlineColor)&&z.equals(this._outlineWidth,e._outlineWidth)};var V0=jT;var mri=y(C(),1);function Cg(e,t){this._value=void 0,this._definitionChanged=new Ce,this._eventHelper=new Lr,this._referenceFrame=t??eo.FIXED,this.setValue(e)}Object.defineProperties(Cg.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(!z.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var _$e=new j;Cg.prototype.getValue=function(e,t){return l(e)||(e=j.now(_$e)),this.getValueInReferenceFrame(e,eo.FIXED,t)};Cg.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};Cg.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,Cg.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};Cg.prototype.equals=function(e){return this===e||e instanceof Cg&&this._referenceFrame===e._referenceFrame&&z.arrayEquals(this._value,e._value)};Cg.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var xg=Cg;var yri=y(C(),1);function G0(e){this._value=void 0,this._definitionChanged=new Ce,this._eventHelper=new Lr,this.setValue(e)}Object.defineProperties(G0.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(!z.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}}});var E$e=new j;G0.prototype.getValue=function(e,t){l(e)||(e=j.now(E$e));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};G0.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,G0.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};G0.prototype.equals=function(e){return this===e||e instanceof G0&&z.arrayEquals(this._value,e._value)};G0.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var qT=G0;var Tri=y(C(),1);function Qx(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(au.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 au(e,t,n){this._targetCollection=e,this._targetId=t,this._targetPropertyNames=n,this._targetProperty=void 0,this._targetEntity=void 0,this._definitionChanged=new Ce,e.collectionChanged.addEventListener(au.prototype._onCollectionChanged,this)}Object.defineProperties(au.prototype,{isConstant:{get:function(){return z.isConstant(Qx(this))}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){let e=Qx(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 Qx(this)}}});au.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 au(e,n,i)};var T$e=new j;au.prototype.getValue=function(e,t){let n=Qx(this);return l(e)||(e=j.now(T$e)),l(n)?n.getValue(e,t):void 0};au.prototype.getValueInReferenceFrame=function(e,t,n){let i=Qx(this);return l(i)?i.getValueInReferenceFrame(e,t,n):void 0};au.prototype.getType=function(e){let t=Qx(this);return l(t)?t.getType(e):void 0};au.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};au.prototype._onTargetEntityDefinitionChanged=function(e,t,n,i){l(this._targetProperty)&&this._targetPropertyNames[0]===t&&(this._targetProperty=void 0,this._definitionChanged.raiseEvent(this))};au.prototype._onCollectionChanged=function(e,t,n){let i=this._targetEntity;l(i)&&n.indexOf(i)!==-1?(i.definitionChanged.removeEventListener(au.prototype._onTargetEntityDefinitionChanged,this),this._targetEntity=this._targetProperty=void 0):l(i)||(i=Qx(this),l(i)&&this._definitionChanged.raiseEvent(this))};var Ig=au;var Vri=y(C(),1);var S$e={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-Z.TWO_PI,o=a}},unpackInterpolationResult:function(e,t,n,i,o){return o=e[0],o<0?o+Z.TWO_PI:o}},_m=S$e;var Hri=y(C(),1);var Pri=y(C(),1);var xfe={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 Ife(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 _fe(e,t){return e instanceof j?e:typeof e=="string"?j.fromIso8601(e):j.addSeconds(t,e,new j)}var f4=[],p4=[];function g5(e,t,n,i,o){let r=0,s,a,c,d,u,h;for(;r<i.length;){u=_fe(i[r],e),c=Yo(t,u,j.compare);let p=0,g=0;if(c<0){for(c=~c,d=c*o,a=void 0,h=t[c];r<i.length&&(u=_fe(i[r],e),!(l(a)&&j.compare(a,u)>=0||l(h)&&j.compare(u,h)>=0));){for(f4[p++]=u,r=r+1,s=0;s<o;s++)p4[g++]=i[r],r=r+1;a=u}p>0&&(p4.length=g,Ife(n,d,p4),f4.length=p,Ife(t,c,f4))}else{for(s=0;s<o;s++)r++,n[c*o+s]=i[r];r++}}}function Em(e,t){let n=e;n===Number&&(n=xfe);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=xfe);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=Nx,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 Ce,this._derivativeTypes=t,this._innerDerivativeTypes=s,this._inputOrder=r,this._forwardExtrapolationType=su.NONE,this._forwardExtrapolationDuration=0,this._backwardExtrapolationType=su.NONE,this._backwardExtrapolationDuration=0}Object.defineProperties(Em.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 L$e=new j;Em.prototype.getValue=function(e,t){l(e)||(e=j.now(L$e));let n=this._times,i=n.length;if(i===0)return;let o,r=this._innerType,s=this._values,a=Yo(n,e,j.compare);if(a<0){if(a=~a,a===0){let S=n[a];if(o=this._backwardExtrapolationDuration,this._backwardExtrapolationType===su.NONE||o!==0&&j.secondsDifference(S,e)>o)return;if(this._backwardExtrapolationType===su.HOLD)return r.unpack(s,0,t)}if(a>=i){a=i-1;let S=n[a];if(o=this._forwardExtrapolationDuration,this._forwardExtrapolationType===su.NONE||o!==0&&j.secondsDifference(e,S)>o)return;if(this._forwardExtrapolationType===su.HOLD)return a=i-1,r.unpack(s,a*r.packedLength,t)}let c=this._xTable,d=this._yTable,u=this._interpolationAlgorithm,h=this._packedInterpolationLength,p=this._inputOrder;if(this._updateTableLength){this._updateTableLength=!1;let S=Math.min(u.getRequiredDataPoints(this._interpolationDegree,p),i);S!==this._numberOfPoints&&(this._numberOfPoints=S,c.length=S,d.length=S*h)}let g=this._numberOfPoints-1;if(g<1)return;let f=0,b=i-1;if(b-f+1>=g+1){let S=a-(g/2|0)-1;S<f&&(S=f);let R=S+g;R>b&&(R=b,S=R-g,S<f&&(S=f)),f=S,b=R}let I=b-f+1;for(let S=0;S<I;++S)c[S]=j.secondsDifference(n[f+S],n[b]);if(l(r.convertPackedArrayForInterpolation))r.convertPackedArrayForInterpolation(s,f,b,d);else{let S=0,R=this._packedLength,G=f*R,B=(b+1)*R;for(;G<B;)d[S]=s[G],G++,S++}let _=j.secondsDifference(e,n[b]),E;if(p===0||!l(u.interpolate))E=u.interpolateOrderZero(_,c,d,h,this._interpolationResult);else{let S=Math.floor(h/(p+1));E=u.interpolate(_,c,d,S,p,p,this._interpolationResult)}return l(r.unpackInterpolationResult)?r.unpackInterpolationResult(E,s,f,b,t):r.unpack(E,0,t)}return r.unpack(s,a*this._packedLength,t)};Em.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))};Em.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)}g5(void 0,this._times,this._values,s,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};Em.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 h=0;h<u;h++)i[h].pack(d[h],a,a.length)}g5(void 0,this._times,this._values,a,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};Em.prototype.getSample=function(e){let t=this._times,n=t.length;if(l(n))return e<0&&(e+=n),t[e]};Em.prototype.addSamplesPackedArray=function(e,t){g5(t,this._times,this._values,e,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};Em.prototype.removeSample=function(e){let t=Yo(this._times,e,j.compare);return t<0?!1:(Efe(this,t,1),!0)};function Efe(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)}Em.prototype.removeSamples=function(e){let t=this._times,n=Yo(t,e.start,j.compare);n<0?n=~n:e.isStartIncluded||++n;let i=Yo(t,e.stop,j.compare);i<0?i=~i:e.isStopIncluded&&++i,Efe(this,n,i-n)};Em.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(!j.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};Em._mergeNewSamples=g5;var cu=Em;function Tm(e,t){t=t??0;let n;if(t>0){n=new Array(t);for(let i=0;i<t;i++)n[i]=m}this._numberOfDerivatives=t,this._property=new cu(m,n),this._definitionChanged=new Ce,this._referenceFrame=e??eo.FIXED,this._property._definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this)},this)}Object.defineProperties(Tm.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 R$e=new j;Tm.prototype.getValue=function(e,t){return l(e)||(e=j.now(R$e)),this.getValueInReferenceFrame(e,eo.FIXED,t)};Tm.prototype.getValueInReferenceFrame=function(e,t,n){if(n=this._property.getValue(e,n),l(n))return lh.convertToReferenceFrame(e,n,this._referenceFrame,t,n)};Tm.prototype.setInterpolationOptions=function(e){this._property.setInterpolationOptions(e)};Tm.prototype.addSample=function(e,t,n){let i=this._numberOfDerivatives;this._property.addSample(e,t,n)};Tm.prototype.addSamples=function(e,t,n){this._property.addSamples(e,t,n)};Tm.prototype.addSamplesPackedArray=function(e,t){this._property.addSamplesPackedArray(e,t)};Tm.prototype.removeSample=function(e){return this._property.removeSample(e)};Tm.prototype.removeSamples=function(e){this._property.removeSamples(e)};Tm.prototype.equals=function(e){return this===e||e instanceof Tm&&z.equals(this._property,e._property)&&this._referenceFrame===e._referenceFrame};var Oa=Tm;var rsi=y(C(),1);var Kri=y(C(),1),V$e={HORIZONTAL:0,VERTICAL:1},Hh=Object.freeze(V$e);var G$e=Hh.HORIZONTAL,Z$e=U.WHITE,B$e=U.BLACK,w$e=0,X$e=1;function $T(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new Ce,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($T.prototype,{isConstant:{get:function(){return z.isConstant(this._orientation)&&z.isConstant(this._evenColor)&&z.isConstant(this._oddColor)&&z.isConstant(this._offset)&&z.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},orientation:fe("orientation"),evenColor:fe("evenColor"),oddColor:fe("oddColor"),offset:fe("offset"),repeat:fe("repeat")});$T.prototype.getType=function(e){return"Stripe"};var W$e=new j;$T.prototype.getValue=function(e,t){return l(e)||(e=j.now(W$e)),l(t)||(t={}),t.horizontal=z.getValueOrDefault(this._orientation,e,G$e)===Hh.HORIZONTAL,t.evenColor=z.getValueOrClonedDefault(this._evenColor,e,Z$e,t.evenColor),t.oddColor=z.getValueOrClonedDefault(this._oddColor,e,B$e,t.oddColor),t.offset=z.getValueOrDefault(this._offset,e,w$e),t.repeat=z.getValueOrDefault(this._repeat,e,X$e),t};$T.prototype.equals=function(e){return this===e||e instanceof $T&&z.equals(this._orientation,e._orientation)&&z.equals(this._evenColor,e._evenColor)&&z.equals(this._oddColor,e._oddColor)&&z.equals(this._offset,e._offset)&&z.equals(this._repeat,e._repeat)};var eS=$T;var fsi=y(C(),1);function Z0(e){this._definitionChanged=new Ce,this._intervals=new as,this._intervals.changedEvent.addEventListener(Z0.prototype._intervalsChanged,this),this._referenceFrame=e??eo.FIXED}Object.defineProperties(Z0.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 F$e=new j;Z0.prototype.getValue=function(e,t){return l(e)||(e=j.now(F$e)),this.getValueInReferenceFrame(e,eo.FIXED,t)};Z0.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._intervals.findDataForIntervalContainingDate(e);if(l(i))return lh.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};Z0.prototype.equals=function(e){return this===e||e instanceof Z0&&this._intervals.equals(e._intervals,z.equals)&&this._referenceFrame===e._referenceFrame};Z0.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var _g=Z0;var xsi=y(C(),1);function Ux(){this._definitionChanged=new Ce,this._intervals=new as,this._intervals.changedEvent.addEventListener(Ux.prototype._intervalsChanged,this)}Object.defineProperties(Ux.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});var P$e=new j;Ux.prototype.getValue=function(e,t){l(e)||(e=j.now(P$e));let n=this._intervals.findDataForIntervalContainingDate(e);return l(n)&&typeof n.clone=="function"?n.clone(t):n};Ux.prototype.equals=function(e){return this===e||e instanceof Ux&&this._intervals.equals(e._intervals,z.equals)};Ux.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var Eg=Ux;var Nsi=y(C(),1);var Rsi=y(C(),1);function tS(e,t){this._position=void 0,this._subscription=void 0,this._definitionChanged=new Ce,this._normalize=t??!0,this.position=e}Object.defineProperties(tS.prototype,{isConstant:{get:function(){return z.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 M$e=new m,Tfe=new m,Sfe=new j,v$e=new j,A4=1/60;tS.prototype.getValue=function(e,t){return this._getValue(e,t)};tS.prototype._getValue=function(e,t,n){l(e)||(e=j.now(v$e)),l(t)||(t=new m);let i=this._position;if(z.isConstant(i))return this._normalize?void 0:m.clone(m.ZERO,t);let o=i.getValue(e,M$e),r=i.getValue(j.addSeconds(e,A4,Sfe),Tfe);if(!l(o)||!l(r)&&(r=o,o=i.getValue(j.addSeconds(e,-A4,Sfe),Tfe),!l(o)))return;if(m.equals(o,r))return this._normalize?void 0:m.clone(m.ZERO,t);l(n)&&o.clone(n);let s=m.subtract(r,o,t);return this._normalize?m.normalize(s,t):m.divideByScalar(s,A4,t)};tS.prototype.equals=function(e){return this===e||e instanceof tS&&z.equals(this._position,e._position)};var Tg=tS;function yW(e,t){this._velocityVectorProperty=new Tg(e,!0),this._subscription=void 0,this._ellipsoid=void 0,this._definitionChanged=new Ce,this.ellipsoid=t??ie.default;let n=this;this._velocityVectorProperty.definitionChanged.addEventListener(function(){n._definitionChanged.raiseEvent(n)})}Object.defineProperties(yW.prototype,{isConstant:{get:function(){return z.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 Lfe=new m,N$e=new m,Rfe=new $,D$e=new j;yW.prototype.getValue=function(e,t){l(e)||(e=j.now(D$e));let n=this._velocityVectorProperty._getValue(e,N$e,Lfe);if(l(n))return Dt.rotationMatrixFromPositionVelocity(Lfe,n,this._ellipsoid,Rfe),Pe.fromRotationMatrix(Rfe,t)};yW.prototype.equals=function(e){return this===e||e instanceof yW&&z.equals(this._velocityVectorProperty,e._velocityVectorProperty)&&(this._ellipsoid===e._ellipsoid||this._ellipsoid.equals(e._ellipsoid))};var CW=yW;var Usi=y(C(),1);var Sg={COMPLETE:0,BELOW_ELLIPSOID_HORIZON:1,ABOVE_ELLIPSOID_HORIZON:2};Sg.validate=function(e){return e===Sg.COMPLETE||e===Sg.BELOW_ELLIPSOID_HORIZON||e===Sg.ABOVE_ELLIPSOID_HORIZON};Sg.toString=function(e){switch(e){case Sg.COMPLETE:return"COMPLETE";case Sg.BELOW_ELLIPSOID_HORIZON:return"BELOW_ELLIPSOID_HORIZON";case Sg.ABOVE_ELLIPSOID_HORIZON:return"ABOVE_ELLIPSOID_HORIZON";default:throw new Ae("SensorVolumePortionToDisplay value is not valid and cannot be converted to a String.")}};var nS=Sg;function B0(){}B0.packedLength=m.packedLength;B0.unpack=m.unpack;B0.pack=m.pack;var g4;function xW(e,t){return t[0]==="#"&&(t=g4+t),Ig.fromString(e,t)}function Vfe(e,t,n){if(l(n.reference))return xW(t,n.reference);if(l(n.velocityReference)){let i=xW(t,n.velocityReference);switch(e){case m:case B0:return new Tg(i,e===B0);case Pe:return new CW(i)}}throw new de(`${JSON.stringify(n)} is not valid CZML.`)}function Q$e(e,t){return new hh(function(n,i){return t(e.getValue(n,i))},e.isConstant)}var oo=new m,wl=new bW,Oc=new ge,kx=new wn,b5=new Pe;function U$e(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 Gfe(e,t){let n=e.uri??e;return l(t)?t.getDerivedResource({url:n}):Ve.createIfNeeded(n)}function k$e(e){let t=e.wsen;if(l(t))return t;let n=e.wsenDegrees;if(!l(n))return;let i=n.length;if(i===le.packedLength)return[Z.toRadians(n[0]),Z.toRadians(n[1]),Z.toRadians(n[2]),Z.toRadians(n[3])];t=new Array(i);for(let o=0;o<i;o+=5)t[o]=n[o],t[o+1]=Z.toRadians(n[o+1]),t[o+2]=Z.toRadians(n[o+2]),t[o+3]=Z.toRadians(n[o+3]),t[o+4]=Z.toRadians(n[o+4]);return t}function Y$e(e){let t=e.length;if(wl.magnitude=1,t===2)return wl.clock=e[0],wl.cone=e[1],m.fromSpherical(wl,oo),[oo.x,oo.y,oo.z];let n=new Array(t/3*4);for(let i=0,o=0;i<t;i+=3,o+=4)n[o]=e[i],wl.clock=e[i+1],wl.cone=e[i+2],m.fromSpherical(wl,oo),n[o+1]=oo.x,n[o+2]=oo.y,n[o+3]=oo.z;return n}function O$e(e){let t=e.length;if(t===3)return wl.clock=e[0],wl.cone=e[1],wl.magnitude=e[2],m.fromSpherical(wl,oo),[oo.x,oo.y,oo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],wl.clock=e[i+1],wl.cone=e[i+2],wl.magnitude=e[i+3],m.fromSpherical(wl,oo),n[i+1]=oo.x,n[i+2]=oo.y,n[i+3]=oo.z;return n}function H$e(e){let t=e.length;if(t===3)return Oc.longitude=e[0],Oc.latitude=e[1],Oc.height=e[2],ie.default.cartographicToCartesian(Oc,oo),[oo.x,oo.y,oo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],Oc.longitude=e[i+1],Oc.latitude=e[i+2],Oc.height=e[i+3],ie.default.cartographicToCartesian(Oc,oo),n[i+1]=oo.x,n[i+2]=oo.y,n[i+3]=oo.z;return n}function z$e(e){let t=e.length;if(t===3)return Oc.longitude=Z.toRadians(e[0]),Oc.latitude=Z.toRadians(e[1]),Oc.height=e[2],ie.default.cartographicToCartesian(Oc,oo),[oo.x,oo.y,oo.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],Oc.longitude=Z.toRadians(e[i+1]),Oc.latitude=Z.toRadians(e[i+2]),Oc.height=e[i+3],ie.default.cartographicToCartesian(Oc,oo),n[i+1]=oo.x,n[i+2]=oo.y,n[i+3]=oo.z;return n}function b4(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 Y$e(o);let r=e.spherical;if(l(r))return O$e(r);let s=e.cartographicRadians;if(l(s))return H$e(s);let a=e.cartographicDegrees;if(l(a))return z$e(a);throw new de(`${JSON.stringify(e)} is not a valid CZML interval.`)}function Zfe(e,t){m.unpack(e,t,oo),m.normalize(oo,oo),m.pack(oo,e,t)}function K$e(e){let t=b4(e);if(t.length===3)return Zfe(t,0),t;for(let n=1;n<t.length;n+=4)Zfe(t,n);return t}function Bfe(e,t){Pe.unpack(e,t,b5),Pe.normalize(b5,b5),Pe.pack(b5,e,t)}function J$e(e){let t=e.unitQuaternion;if(l(t)){if(t.length===4)return Bfe(t,0),t;for(let n=1;n<t.length;n+=5)Bfe(t,n)}return t}function wfe(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")?Ke:e.hasOwnProperty("cartesian2")?D:e.hasOwnProperty("cartesian")||e.hasOwnProperty("spherical")||e.hasOwnProperty("cartographicRadians")||e.hasOwnProperty("cartographicDegrees")?m:e.hasOwnProperty("unitCartesian")||e.hasOwnProperty("unitSpherical")?B0:e.hasOwnProperty("rgba")||e.hasOwnProperty("rgbaf")?U:e.hasOwnProperty("arcType")?dn:e.hasOwnProperty("classificationType")?$n:e.hasOwnProperty("colorBlendMode")?Fc:e.hasOwnProperty("cornerType")?Hi:e.hasOwnProperty("heightReference")?et:e.hasOwnProperty("horizontalOrigin")?wi:e.hasOwnProperty("date")?j:e.hasOwnProperty("labelStyle")?nr:e.hasOwnProperty("number")?Number:e.hasOwnProperty("nearFarScalar")?zt:e.hasOwnProperty("distanceDisplayCondition")?Qt:e.hasOwnProperty("object")||e.hasOwnProperty("value")?Object:e.hasOwnProperty("unitQuaternion")?Pe:e.hasOwnProperty("shadowMode")?Gn:e.hasOwnProperty("string")?String:e.hasOwnProperty("stripeOrientation")?Hh:e.hasOwnProperty("wsen")||e.hasOwnProperty("wsenDegrees")?le:e.hasOwnProperty("uri")?_W.default:e.hasOwnProperty("verticalOrigin")?kn:Object}function j$e(e,t,n){switch(e){case dn:return dn[t.arcType??t];case Array:return t.array;case Boolean:return t.boolean??t;case Ke:return t.boundingRectangle;case D:return t.cartesian2;case m:return b4(t);case B0:return K$e(t);case U:return U$e(t);case $n:return $n[t.classificationType??t];case Fc:return Fc[t.colorBlendMode??t];case Hi:return Hi[t.cornerType??t];case et:return et[t.heightReference??t];case wi:return wi[t.horizontalOrigin??t];case Image:return Gfe(t,n);case j:return j.fromIso8601(t.date??t);case nr:return nr[t.labelStyle??t];case Number:return t.number??t;case zt:return t.nearFarScalar;case Qt:return t.distanceDisplayCondition;case Object:return t.object??t.value??t;case Pe:return J$e(t);case _m:return t.number??t;case nS:return nS[t.portionToDisplay??t];case Gn:return Gn[t.shadowMode??t.shadows??t];case String:return t.string??t;case Hh:return Hh[t.stripeOrientation??t];case le:return k$e(t);case _W.default:return Gfe(t,n);case kn:return kn[t.verticalOrigin??t];default:throw new de(`Unknown CzmlDataSource interval type: ${e}`)}}var q$e={HERMITE:AW,LAGRANGE:gW,LINEAR:Nx};function y5(e,t){let n=e.interpolationAlgorithm,i=e.interpolationDegree;(l(n)||l(i))&&t.setInterpolationOptions({interpolationAlgorithm:q$e[n],interpolationDegree:i});let o=e.forwardExtrapolationType;l(o)&&(t.forwardExtrapolationType=su[o]);let r=e.forwardExtrapolationDuration;l(r)&&(t.forwardExtrapolationDuration=r);let s=e.backwardExtrapolationType;l(s)&&(t.backwardExtrapolationType=su[s]);let a=e.backwardExtrapolationDuration;l(a)&&(t.backwardExtrapolationDuration=a)}var Xfe={iso8601:void 0};function Rr(e){if(l(e))return Xfe.iso8601=e,wn.fromIso8601(Xfe)}function y4(e){let t=ze.MAXIMUM_INTERVAL.clone();return t.data=e,t}function Wfe(e){let t=new Uc;return t.intervals.addInterval(y4(e)),t}function Ffe(e){let t=new ka(e.referenceFrame);return t.intervals.addInterval(y4(e)),t}function C5(e,t,n,i,o,r,s){let a=Rr(i.interval);l(o)&&(l(a)?a=wn.intersect(a,o,kx):a=o);let c,d,u,h=!l(i.reference)&&!l(i.velocityReference),p=l(a)&&!a.equals(ze.MAXIMUM_INTERVAL);if(i.delete===!0){if(!p){t[n]=void 0;return}return Hfe(t[n],a)}let g=!1;if(h){if(d=j$e(e,i,r),!l(d))return;c=e.packedLength??1,u=d.length??1,g=!l(i.array)&&typeof d!="string"&&u>c&&e!==Object}let f=typeof e.unpack=="function"&&e!==_m;if(!g&&!p){h?t[n]=new di(f?e.unpack(d,0):d):t[n]=Vfe(e,s,i);return}let b=t[n],x,I=i.epoch;if(l(I)&&(x=j.fromIso8601(I)),g&&!p){b instanceof cu||(t[n]=b=new cu(e)),b.addSamplesPackedArray(d,x),y5(i,b);return}let _;if(!g&&p){a=a.clone(),h?a.data=f?e.unpack(d,0):d:a.data=Vfe(e,s,i),l(b)||(t[n]=b=h?new Eg:new Uc),h&&b instanceof Eg?b.intervals.addInterval(a):b instanceof Uc?(h&&(a.data=new di(a.data)),b.intervals.addInterval(a)):(t[n]=b=Wfe(b),h&&(a.data=new di(a.data)),b.intervals.addInterval(a));return}l(b)||(t[n]=b=new Uc),b instanceof Uc||(t[n]=b=Wfe(b));let E=b.intervals;_=E.findInterval(a),(!l(_)||!(_.data instanceof cu))&&(_=a.clone(),_.data=new cu(e),E.addInterval(_)),_.data.addSamplesPackedArray(d,x),y5(i,_.data)}function Hfe(e,t){if(e instanceof cu){e.removeSamples(t);return}else if(e instanceof Eg){e.intervals.removeInterval(t);return}else if(e instanceof Uc){let n=e.intervals;for(let i=0;i<n.length;++i){let o=wn.intersect(n.get(i),t,kx);o.isEmpty||Hfe(o.data,t)}n.removeInterval(t);return}}function Ie(e,t,n,i,o,r,s){if(l(i))if(Array.isArray(i))for(let a=0,c=i.length;a<c;++a)C5(e,t,n,i[a],o,r,s);else C5(e,t,n,i,o,r,s)}function Pfe(e,t,n,i,o,r){let s=Rr(n.interval);l(i)&&(l(s)?s=wn.intersect(s,i,kx):s=i);let a=l(n.cartesianVelocity)?1:0,c=m.packedLength*(a+1),d,u,h=!l(n.reference),p=l(s)&&!s.equals(ze.MAXIMUM_INTERVAL);if(n.delete===!0){if(!p){e[t]=void 0;return}return zfe(e[t],s)}let g,f=!1;if(h&&(l(n.referenceFrame)&&(g=eo[n.referenceFrame]),g=g??eo.FIXED,d=b4(n),u=d.length??1,f=u>c),!f&&!p){h?e[t]=new dl(m.unpack(d),g):e[t]=xW(r,n.reference);return}let b=e[t],x,I=n.epoch;if(l(I)&&(x=j.fromIso8601(I)),f&&!p){(!(b instanceof Oa)||l(g)&&b.referenceFrame!==g)&&(e[t]=b=new Oa(g,a)),b.addSamplesPackedArray(d,x),y5(n,b);return}let _;if(!f&&p){s=s.clone(),h?s.data=m.unpack(d):s.data=xW(r,n.reference),l(b)||(h?b=new _g(g):b=new ka(g),e[t]=b),h&&b instanceof _g&&l(g)&&b.referenceFrame===g?b.intervals.addInterval(s):b instanceof ka?(h&&(s.data=new dl(s.data,g)),b.intervals.addInterval(s)):(e[t]=b=Ffe(b),h&&(s.data=new dl(s.data,g)),b.intervals.addInterval(s));return}l(b)?b instanceof ka||(e[t]=b=Ffe(b)):e[t]=b=new ka(g);let E=b.intervals;_=E.findInterval(s),(!l(_)||!(_.data instanceof Oa)||l(g)&&_.data.referenceFrame!==g)&&(_=s.clone(),_.data=new Oa(g,a),E.addInterval(_)),_.data.addSamplesPackedArray(d,x),y5(n,_.data)}function zfe(e,t){if(e instanceof Oa){e.removeSamples(t);return}else if(e instanceof _g){e.intervals.removeInterval(t);return}else if(e instanceof ka){let n=e.intervals;for(let i=0;i<n.length;++i){let o=wn.intersect(n.get(i),t,kx);o.isEmpty||zfe(o.data,t)}n.removeInterval(t);return}}function Kfe(e,t,n,i,o,r){if(l(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)Pfe(e,t,n[s],i,o,r);else Pfe(e,t,n,i,o,r)}function Mfe(e,t,n,i){l(n.references)?x5(e,t,n.references,n.interval,i,qT,Uc):(l(n.cartesian2)?n.array=D.unpackArray(n.cartesian2):l(n.cartesian)&&(n.array=D.unpackArray(n.cartesian)),l(n.array)&&Ie(Array,e,t,n,void 0,void 0,i))}function vfe(e,t,n,i,o,r){let s=Rr(n.interval);l(i)&&(l(s)?s=wn.intersect(s,i,kx):s=i);let a=e[t],c,d;if(l(s)){a instanceof XT||(a=new XT,e[t]=a);let h=a.intervals;d=h.findInterval({start:s.start,stop:s.stop}),l(d)?c=d.data:(d=s.clone(),h.addInterval(d))}else c=a;let u;l(n.solidColor)?(c instanceof qt||(c=new qt),u=n.solidColor,Ie(U,c,"color",u.color,void 0,void 0,r)):l(n.grid)?(c instanceof kT||(c=new kT),u=n.grid,Ie(U,c,"color",u.color,void 0,o,r),Ie(Number,c,"cellAlpha",u.cellAlpha,void 0,o,r),Ie(D,c,"lineCount",u.lineCount,void 0,o,r),Ie(D,c,"lineThickness",u.lineThickness,void 0,o,r),Ie(D,c,"lineOffset",u.lineOffset,void 0,o,r)):l(n.image)?(c instanceof Lb||(c=new Lb),u=n.image,Ie(Image,c,"image",u.image,void 0,o,r),Ie(D,c,"repeat",u.repeat,void 0,o,r),Ie(U,c,"color",u.color,void 0,o,r),Ie(Boolean,c,"transparent",u.transparent,void 0,o,r)):l(n.stripe)?(c instanceof eS||(c=new eS),u=n.stripe,Ie(Hh,c,"orientation",u.orientation,void 0,o,r),Ie(U,c,"evenColor",u.evenColor,void 0,o,r),Ie(U,c,"oddColor",u.oddColor,void 0,o,r),Ie(Number,c,"offset",u.offset,void 0,o,r),Ie(Number,c,"repeat",u.repeat,void 0,o,r)):l(n.polylineOutline)?(c instanceof V0||(c=new V0),u=n.polylineOutline,Ie(U,c,"color",u.color,void 0,o,r),Ie(U,c,"outlineColor",u.outlineColor,void 0,o,r),Ie(Number,c,"outlineWidth",u.outlineWidth,void 0,o,r)):l(n.polylineGlow)?(c instanceof JT||(c=new JT),u=n.polylineGlow,Ie(U,c,"color",u.color,void 0,o,r),Ie(Number,c,"glowPower",u.glowPower,void 0,o,r),Ie(Number,c,"taperPower",u.taperPower,void 0,o,r)):l(n.polylineArrow)?(c instanceof OT||(c=new OT),u=n.polylineArrow,Ie(U,c,"color",u.color,void 0,void 0,r)):l(n.polylineDash)?(c instanceof zT||(c=new zT),u=n.polylineDash,Ie(U,c,"color",u.color,void 0,void 0,r),Ie(U,c,"gapColor",u.gapColor,void 0,void 0,r),Ie(Number,c,"dashLength",u.dashLength,void 0,o,r),Ie(Number,c,"dashPattern",u.dashPattern,void 0,o,r)):l(n.checkerboard)&&(c instanceof BT||(c=new BT),u=n.checkerboard,Ie(U,c,"evenColor",u.evenColor,void 0,o,r),Ie(U,c,"oddColor",u.oddColor,void 0,o,r),Ie(D,c,"repeat",u.repeat,void 0,o,r)),l(d)?d.data=c:e[t]=c}function lu(e,t,n,i,o,r){if(l(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)vfe(e,t,n[s],i,o,r);else vfe(e,t,n,i,o,r)}function $$e(e,t,n,i){let o=t.name;l(o)&&(e.name=t.name)}function eet(e,t,n,i){let o=t.description;l(o)&&Ie(String,e,"description",o,void 0,i,n)}function tet(e,t,n,i){let o=t.position;l(o)&&Kfe(e,"position",o,void 0,i,n)}function net(e,t,n,i){let o=t.viewFrom;l(o)&&Ie(m,e,"viewFrom",o,void 0,i,n)}function iet(e,t,n,i){let o=t.orientation;l(o)&&Ie(Pe,e,"orientation",o,void 0,i,n)}function oet(e,t,n,i){let o=t.properties;if(l(o)){l(e.properties)||(e.properties=new ml);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)C5(wfe(s[a]),e.properties,r,s[a],void 0,i,n);else C5(wfe(s),e.properties,r,s,void 0,i,n)}}}function x5(e,t,n,i,o,r,s){let a=n.map(function(c){return xW(o,c)});if(l(i)){i=Rr(i);let c=e[t];if(!(c instanceof s)){let d=new s;d.intervals.addInterval(y4(c)),e[t]=c=d}i.data=new r(a),c.intervals.addInterval(i)}else e[t]=new r(a)}function Nfe(e,t,n,i){let o=n.references;l(o)?x5(e,t,o,n.interval,i,qT,Uc):Ie(Array,e,t,n,void 0,void 0,i)}function Dfe(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)Nfe(e,t,n[o],i);else Nfe(e,t,n,i)}function Qfe(e,t,n,i){let o=n.references;l(o)?x5(e,t,o,n.interval,i,xg,ka):(l(n.cartesian)?n.array=m.unpackArray(n.cartesian):l(n.cartographicRadians)?n.array=m.fromRadiansArrayHeights(n.cartographicRadians,ie.default):l(n.cartographicDegrees)&&(n.array=m.fromDegreesArrayHeights(n.cartographicDegrees,ie.default)),l(n.array)&&Ie(Array,e,t,n,void 0,void 0,i))}function EW(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)Qfe(e,t,n[o],i);else Qfe(e,t,n,i)}function ret(e){return m.unpackArray(e)}function set(e){return m.fromRadiansArrayHeights(e,ie.default)}function aet(e){return m.fromDegreesArrayHeights(e,ie.default)}function Ufe(e,t,n,i){let o=n.references;if(l(o)){let r=o.map(function(s){let a={};return x5(a,"positions",s,n.interval,i,xg,ka),a.positions});e[t]=new xg(r)}else l(n.cartesian)?n.array=n.cartesian.map(ret):l(n.cartographicRadians)?n.array=n.cartographicRadians.map(set):l(n.cartographicDegrees)&&(n.array=n.cartographicDegrees.map(aet)),l(n.array)&&Ie(Array,e,t,n,void 0,void 0,i)}function cet(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)Ufe(e,t,n[o],i);else Ufe(e,t,n,i)}function det(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;o++)Mfe(e,t,n[o],i);else Mfe(e,t,n,i)}function uet(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 as),r.addInterval(Rr(o[s]));else r=new as,r.addInterval(Rr(o));e.availability=r}function met(e,t,n,i,o){l(t)&&Ie(B0,e,"alignedAxis",t,n,i,o)}function het(e,t,n,i){let o=t.billboard;if(!l(o))return;let r=Rr(o.interval),s=e.billboard;l(s)||(e.billboard=s=new _c),Ie(Boolean,s,"show",o.show,r,i,n),Ie(Image,s,"image",o.image,r,i,n),Ie(Number,s,"scale",o.scale,r,i,n),Ie(D,s,"pixelOffset",o.pixelOffset,r,i,n),Ie(m,s,"eyeOffset",o.eyeOffset,r,i,n),Ie(wi,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),Ie(kn,s,"verticalOrigin",o.verticalOrigin,r,i,n),Ie(et,s,"heightReference",o.heightReference,r,i,n),Ie(U,s,"color",o.color,r,i,n),Ie(_m,s,"rotation",o.rotation,r,i,n),met(s,o.alignedAxis,r,i,n),Ie(Boolean,s,"sizeInMeters",o.sizeInMeters,r,i,n),Ie(Number,s,"width",o.width,r,i,n),Ie(Number,s,"height",o.height,r,i,n),Ie(zt,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ie(zt,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ie(zt,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),Ie(Ke,s,"imageSubRegion",o.imageSubRegion,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ie(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function fet(e,t,n,i){let o=t.box;if(!l(o))return;let r=Rr(o.interval),s=e.box;l(s)||(e.box=s=new mC),Ie(Boolean,s,"show",o.show,r,i,n),Ie(m,s,"dimensions",o.dimensions,r,i,n),Ie(et,s,"heightReference",o.heightReference,r,i,n),Ie(Boolean,s,"fill",o.fill,r,i,n),lu(s,"material",o.material,r,i,n),Ie(Boolean,s,"outline",o.outline,r,i,n),Ie(U,s,"outlineColor",o.outlineColor,r,i,n),Ie(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ie(Gn,s,"shadows",o.shadows,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function pet(e,t,n,i){let o=t.corridor;if(!l(o))return;let r=Rr(o.interval),s=e.corridor;l(s)||(e.corridor=s=new fC),Ie(Boolean,s,"show",o.show,r,i,n),EW(s,"positions",o.positions,n),Ie(Number,s,"width",o.width,r,i,n),Ie(Number,s,"height",o.height,r,i,n),Ie(et,s,"heightReference",o.heightReference,r,i,n),Ie(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ie(et,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ie(Hi,s,"cornerType",o.cornerType,r,i,n),Ie(Number,s,"granularity",o.granularity,r,i,n),Ie(Boolean,s,"fill",o.fill,r,i,n),lu(s,"material",o.material,r,i,n),Ie(Boolean,s,"outline",o.outline,r,i,n),Ie(U,s,"outlineColor",o.outlineColor,r,i,n),Ie(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ie(Gn,s,"shadows",o.shadows,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ie($n,s,"classificationType",o.classificationType,r,i,n),Ie(Number,s,"zIndex",o.zIndex,r,i,n)}function Aet(e,t,n,i){let o=t.cylinder;if(!l(o))return;let r=Rr(o.interval),s=e.cylinder;l(s)||(e.cylinder=s=new pC),Ie(Boolean,s,"show",o.show,r,i,n),Ie(Number,s,"length",o.length,r,i,n),Ie(Number,s,"topRadius",o.topRadius,r,i,n),Ie(Number,s,"bottomRadius",o.bottomRadius,r,i,n),Ie(et,s,"heightReference",o.heightReference,r,i,n),Ie(Boolean,s,"fill",o.fill,r,i,n),lu(s,"material",o.material,r,i,n),Ie(Boolean,s,"outline",o.outline,r,i,n),Ie(U,s,"outlineColor",o.outlineColor,r,i,n),Ie(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ie(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),Ie(Number,s,"slices",o.slices,r,i,n),Ie(Gn,s,"shadows",o.shadows,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function get(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 de("Cesium only supports CZML version 1.");t._version=n}}if(!l(t._version))throw new de("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 bet(e,t,n,i){let o=t.ellipse;if(!l(o))return;let r=Rr(o.interval),s=e.ellipse;l(s)||(e.ellipse=s=new AC),Ie(Boolean,s,"show",o.show,r,i,n),Ie(Number,s,"semiMajorAxis",o.semiMajorAxis,r,i,n),Ie(Number,s,"semiMinorAxis",o.semiMinorAxis,r,i,n),Ie(Number,s,"height",o.height,r,i,n),Ie(et,s,"heightReference",o.heightReference,r,i,n),Ie(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ie(et,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ie(_m,s,"rotation",o.rotation,r,i,n),Ie(_m,s,"stRotation",o.stRotation,r,i,n),Ie(Number,s,"granularity",o.granularity,r,i,n),Ie(Boolean,s,"fill",o.fill,r,i,n),lu(s,"material",o.material,r,i,n),Ie(Boolean,s,"outline",o.outline,r,i,n),Ie(U,s,"outlineColor",o.outlineColor,r,i,n),Ie(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ie(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),Ie(Gn,s,"shadows",o.shadows,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ie($n,s,"classificationType",o.classificationType,r,i,n),Ie(Number,s,"zIndex",o.zIndex,r,i,n)}function yet(e,t,n,i){let o=t.ellipsoid;if(!l(o))return;let r=Rr(o.interval),s=e.ellipsoid;l(s)||(e.ellipsoid=s=new gC),Ie(Boolean,s,"show",o.show,r,i,n),Ie(m,s,"radii",o.radii,r,i,n),Ie(m,s,"innerRadii",o.innerRadii,r,i,n),Ie(Number,s,"minimumClock",o.minimumClock,r,i,n),Ie(Number,s,"maximumClock",o.maximumClock,r,i,n),Ie(Number,s,"minimumCone",o.minimumCone,r,i,n),Ie(Number,s,"maximumCone",o.maximumCone,r,i,n),Ie(et,s,"heightReference",o.heightReference,r,i,n),Ie(Boolean,s,"fill",o.fill,r,i,n),lu(s,"material",o.material,r,i,n),Ie(Boolean,s,"outline",o.outline,r,i,n),Ie(U,s,"outlineColor",o.outlineColor,r,i,n),Ie(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ie(Number,s,"stackPartitions",o.stackPartitions,r,i,n),Ie(Number,s,"slicePartitions",o.slicePartitions,r,i,n),Ie(Number,s,"subdivisions",o.subdivisions,r,i,n),Ie(Gn,s,"shadows",o.shadows,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function Cet(e,t,n,i){let o=t.label;if(!l(o))return;let r=Rr(o.interval),s=e.label;l(s)||(e.label=s=new dh),Ie(Boolean,s,"show",o.show,r,i,n),Ie(String,s,"text",o.text,r,i,n),Ie(String,s,"font",o.font,r,i,n),Ie(nr,s,"style",o.style,r,i,n),Ie(Number,s,"scale",o.scale,r,i,n),Ie(Boolean,s,"showBackground",o.showBackground,r,i,n),Ie(U,s,"backgroundColor",o.backgroundColor,r,i,n),Ie(D,s,"backgroundPadding",o.backgroundPadding,r,i,n),Ie(D,s,"pixelOffset",o.pixelOffset,r,i,n),Ie(m,s,"eyeOffset",o.eyeOffset,r,i,n),Ie(wi,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),Ie(kn,s,"verticalOrigin",o.verticalOrigin,r,i,n),Ie(et,s,"heightReference",o.heightReference,r,i,n),Ie(U,s,"fillColor",o.fillColor,r,i,n),Ie(U,s,"outlineColor",o.outlineColor,r,i,n),Ie(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ie(zt,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ie(zt,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),Ie(zt,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ie(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function xet(e,t,n,i){let o=t.model;if(!l(o))return;let r=Rr(o.interval),s=e.model;l(s)||(e.model=s=new uA),Ie(Boolean,s,"show",o.show,r,i,n),Ie(_W.default,s,"uri",o.gltf,r,i,n),Ie(Number,s,"scale",o.scale,r,i,n),Ie(Number,s,"minimumPixelSize",o.minimumPixelSize,r,i,n),Ie(Number,s,"maximumScale",o.maximumScale,r,i,n),Ie(Boolean,s,"incrementallyLoadTextures",o.incrementallyLoadTextures,r,i,n),Ie(Boolean,s,"runAnimations",o.runAnimations,r,i,n),Ie(Boolean,s,"clampAnimations",o.clampAnimations,r,i,n),Ie(Gn,s,"shadows",o.shadows,r,i,n),Ie(et,s,"heightReference",o.heightReference,r,i,n),Ie(U,s,"silhouetteColor",o.silhouetteColor,r,i,n),Ie(Number,s,"silhouetteSize",o.silhouetteSize,r,i,n),Ie(U,s,"color",o.color,r,i,n),Ie(Fc,s,"colorBlendMode",o.colorBlendMode,r,i,n),Ie(Number,s,"colorBlendAmount",o.colorBlendAmount,r,i,n),Ie(Qt,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)kfe(s,d[a],r,i,n);else kfe(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)Yfe(s,u[a],r,i,n);else Yfe(s,u,r,i,n)}function kfe(e,t,n,i,o){let r=Rr(t.interval);l(n)&&(l(r)?r=wn.intersect(r,n,kx):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 h=t[u];if(!l(h))continue;l(s)||(e.nodeTransformations=s=new ml),s.hasProperty(u)||s.addProperty(u);let p=s[u];l(p)||(s[u]=p=new bC),Ie(m,p,"translation",h.translation,r,i,o),Ie(Pe,p,"rotation",h.rotation,r,i,o),Ie(m,p,"scale",h.scale,r,i,o)}}function Yfe(e,t,n,i,o){let r=Rr(t.interval);l(n)&&(l(r)?r=wn.intersect(r,n,kx):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 h=t[u];l(h)&&(l(s)||(e.articulations=s=new ml),s.hasProperty(u)||s.addProperty(u),Ie(Number,s,u,h,r,i,o))}}function Iet(e,t,n,i){let o=t.path;if(!l(o))return;let r=Rr(o.interval),s=e.path;l(s)||(e.path=s=new mA),Ie(Boolean,s,"show",o.show,r,i,n),Ie(Number,s,"leadTime",o.leadTime,r,i,n),Ie(Number,s,"trailTime",o.trailTime,r,i,n),Ie(Number,s,"width",o.width,r,i,n),Ie(Number,s,"resolution",o.resolution,r,i,n),lu(s,"material",o.material,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function _et(e,t,n,i){let o=t.point;if(!l(o))return;let r=Rr(o.interval),s=e.point;l(s)||(e.point=s=new CC),Ie(Boolean,s,"show",o.show,r,i,n),Ie(Number,s,"pixelSize",o.pixelSize,r,i,n),Ie(et,s,"heightReference",o.heightReference,r,i,n),Ie(U,s,"color",o.color,r,i,n),Ie(U,s,"outlineColor",o.outlineColor,r,i,n),Ie(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ie(zt,s,"scaleByDistance",o.scaleByDistance,r,i,n),Ie(zt,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ie(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function IW(e){this.polygon=e,this._definitionChanged=new Ce}Object.defineProperties(IW.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}}});IW.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 lc(o)}))),l(t)?(t.positions=n,t.holes=i,t):new lc(n,i)};IW.prototype.equals=function(e){return this===e||e instanceof IW&&z.equals(this.polygon._positions,e.polygon._positions)&&z.equals(this.polygon._holes,e.polygon._holes)};function Eet(e,t,n,i){let o=t.polygon;if(!l(o))return;let r=Rr(o.interval),s=e.polygon;l(s)||(e.polygon=s=new uh),Ie(Boolean,s,"show",o.show,r,i,n),EW(s,"_positions",o.positions,n),cet(s,"_holes",o.holes,n),(l(s._positions)||l(s._holes))&&(s.hierarchy=new IW(s)),Ie(Number,s,"height",o.height,r,i,n),Ie(et,s,"heightReference",o.heightReference,r,i,n),Ie(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ie(et,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ie(_m,s,"stRotation",o.stRotation,r,i,n),Ie(Number,s,"granularity",o.granularity,r,i,n),Ie(Boolean,s,"fill",o.fill,r,i,n),lu(s,"material",o.material,r,i,n),Ie(Boolean,s,"outline",o.outline,r,i,n),Ie(U,s,"outlineColor",o.outlineColor,r,i,n),Ie(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ie(Boolean,s,"perPositionHeight",o.perPositionHeight,r,i,n),Ie(Boolean,s,"closeTop",o.closeTop,r,i,n),Ie(Boolean,s,"closeBottom",o.closeBottom,r,i,n),Ie(dn,s,"arcType",o.arcType,r,i,n),Ie(Gn,s,"shadows",o.shadows,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ie($n,s,"classificationType",o.classificationType,r,i,n),Ie(Number,s,"zIndex",o.zIndex,r,i,n)}function Tet(e){return e?dn.GEODESIC:dn.NONE}function Let(e,t,n,i){let o=t.polyline;if(!l(o))return;let r=Rr(o.interval),s=e.polyline;if(l(s)||(e.polyline=s=new Zc),Ie(Boolean,s,"show",o.show,r,i,n),EW(s,"positions",o.positions,n),Ie(Number,s,"width",o.width,r,i,n),Ie(Number,s,"granularity",o.granularity,r,i,n),lu(s,"material",o.material,r,i,n),lu(s,"depthFailMaterial",o.depthFailMaterial,r,i,n),Ie(dn,s,"arcType",o.arcType,r,i,n),Ie(Boolean,s,"clampToGround",o.clampToGround,r,i,n),Ie(Gn,s,"shadows",o.shadows,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ie($n,s,"classificationType",o.classificationType,r,i,n),Ie(Number,s,"zIndex",o.zIndex,r,i,n),l(o.followSurface)&&!l(o.arcType)){let a={};Ie(Boolean,a,"followSurface",o.followSurface,r,i,n),s.arcType=Q$e(a.followSurface,Tet)}}function Ret(e,t,n,i){let o=t.polylineVolume;if(!l(o))return;let r=Rr(o.interval),s=e.polylineVolume;l(s)||(e.polylineVolume=s=new xC),EW(s,"positions",o.positions,n),det(s,"shape",o.shape,n),Ie(Boolean,s,"show",o.show,r,i,n),Ie(Hi,s,"cornerType",o.cornerType,r,i,n),Ie(Boolean,s,"fill",o.fill,r,i,n),lu(s,"material",o.material,r,i,n),Ie(Boolean,s,"outline",o.outline,r,i,n),Ie(U,s,"outlineColor",o.outlineColor,r,i,n),Ie(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ie(Number,s,"granularity",o.granularity,r,i,n),Ie(Gn,s,"shadows",o.shadows,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function Vet(e,t,n,i){let o=t.rectangle;if(!l(o))return;let r=Rr(o.interval),s=e.rectangle;l(s)||(e.rectangle=s=new mh),Ie(Boolean,s,"show",o.show,r,i,n),Ie(le,s,"coordinates",o.coordinates,r,i,n),Ie(Number,s,"height",o.height,r,i,n),Ie(et,s,"heightReference",o.heightReference,r,i,n),Ie(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Ie(et,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Ie(_m,s,"rotation",o.rotation,r,i,n),Ie(_m,s,"stRotation",o.stRotation,r,i,n),Ie(Number,s,"granularity",o.granularity,r,i,n),Ie(Boolean,s,"fill",o.fill,r,i,n),lu(s,"material",o.material,r,i,n),Ie(Boolean,s,"outline",o.outline,r,i,n),Ie(U,s,"outlineColor",o.outlineColor,r,i,n),Ie(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ie(Gn,s,"shadows",o.shadows,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Ie($n,s,"classificationType",o.classificationType,r,i,n),Ie(Number,s,"zIndex",o.zIndex,r,i,n)}function Get(e,t,n,i){let o=t.tileset;if(!l(o))return;let r=Rr(o.interval),s=e.tileset;l(s)||(e.tileset=s=new yC),Ie(Boolean,s,"show",o.show,r,i,n),Ie(_W.default,s,"uri",o.uri,r,i,n),Ie(Number,s,"maximumScreenSpaceError",o.maximumScreenSpaceError,r,i,n)}function Zet(e,t,n,i){let o=t.wall;if(!l(o))return;let r=Rr(o.interval),s=e.wall;l(s)||(e.wall=s=new hA),Ie(Boolean,s,"show",o.show,r,i,n),EW(s,"positions",o.positions,n),Dfe(s,"minimumHeights",o.minimumHeights,n),Dfe(s,"maximumHeights",o.maximumHeights,n),Ie(Number,s,"granularity",o.granularity,r,i,n),Ie(Boolean,s,"fill",o.fill,r,i,n),lu(s,"material",o.material,r,i,n),Ie(Boolean,s,"outline",o.outline,r,i,n),Ie(U,s,"outlineColor",o.outlineColor,r,i,n),Ie(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Ie(Gn,s,"shadows",o.shadows,r,i,n),Ie(Qt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function Ofe(e,t,n,i,o){let r=e.id;if(l(r)||(r=qn()),g4=r,!l(o._version)&&r!=="document")throw new de("The first CZML packet is required to be the document object.");if(e.delete===!0)t.removeById(r);else if(r==="document")get(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)}g4=void 0}function Bet(e){let t,n=e._documentPacket.clock;if(!l(n)){if(!l(e._clock)){let o=e._entityCollection.computeAvailability();if(!o.start.equals(ze.MINIMUM_VALUE)){let r=o.start,s=o.stop,a=j.secondsDifference(s,r),c=Math.round(a/120);return t=new Oh,t.startTime=j.clone(r),t.stopTime=j.clone(s),t.clockRange=ls.LOOP_STOP,t.multiplier=c,t.currentTime=j.clone(r),t.clockStep=Ro.SYSTEM_CLOCK_MULTIPLIER,e._clock=t,!0}}return!1}l(e._clock)?t=e._clock.clone():(t=new Oh,t.startTime=ze.MINIMUM_VALUE.clone(),t.stopTime=ze.MAXIMUM_VALUE.clone(),t.currentTime=ze.MINIMUM_VALUE.clone(),t.clockRange=ls.LOOP_STOP,t.clockStep=Ro.SYSTEM_CLOCK_MULTIPLIER,t.multiplier=1);let i=Rr(n.interval);return l(i)&&(t.startTime=i.start,t.stopTime=i.stop),l(n.currentTime)&&(t.currentTime=j.fromIso8601(n.currentTime)),l(n.range)&&(t.clockRange=ls[n.range]??ls.LOOP_STOP),l(n.step)&&(t.clockStep=Ro[n.step]??Ro.SYSTEM_CLOCK_MULTIPLIER),l(n.multiplier)&&(t.multiplier=n.multiplier),t.equals(e._clock)?!1:(e._clock=t.clone(e._clock),!0)}function Jfe(e,t,n,i){n=n??Y.EMPTY_OBJECT;let o=t,r=n.sourceUri,s=n.credit;if(typeof s=="string"&&(s=new Gt(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),cs.setLoading(e,!0),Promise.resolve(o).then(function(a){return wet(e,a,r,i)}).catch(function(a){return cs.setLoading(e,!1),e._error.raiseEvent(e,a),console.log(a),Promise.reject(a)})}function wet(e,t,n,i){cs.setLoading(e,!0);let o=e._entityCollection;i&&(e._version=void 0,e._documentPacket=new jfe,o.removeAll()),Ms._processCzml(t,o,n,void 0,e);let r=Bet(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=yg(n.getUrlComponent()),r=!0),cs.setLoading(e,!1),r&&e._changed.raiseEvent(e),e}function jfe(){this.name=void 0,this.clock=void 0}function Ms(e){this._name=e,this._changed=new Ce,this._error=new Ce,this._isLoading=!1,this._loading=new Ce,this._clock=void 0,this._documentPacket=new jfe,this._version=void 0,this._entityCollection=new Ca(this),this._entityCluster=new ou,this._credit=void 0,this._resourceCredits=[]}Ms.load=function(e,t){return new Ms().load(e,t)};Object.defineProperties(Ms.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}}});Ms.updaters=[het,fet,pet,Aet,bet,yet,Cet,xet,$$e,eet,Iet,_et,Eet,Let,Ret,oet,Vet,tet,Get,net,Zet,iet,uet];Ms.registerUpdater=function(e){Ms.updaters.includes(e)||Ms.updaters.push(e)};Ms.unregisterUpdater=function(e){if(Ms.updaters.includes(e)){let t=Ms.updaters.indexOf(e);Ms.updaters.splice(t,1)}};Ms.prototype.process=function(e,t){return Jfe(this,e,t,!1)};Ms.prototype.load=function(e,t){return Jfe(this,e,t,!0)};Ms.prototype.update=function(e){return!0};Ms.processPacketData=Ie;Ms.processPositionPacketData=Kfe;Ms.processMaterialPacketData=lu;Ms._processCzml=function(e,t,n,i,o){if(i=i??Ms.updaters,Array.isArray(e))for(let r=0,s=e.length;r<s;++r)Ofe(e[r],t,i,n,o);else Ofe(e,t,i,n,o)};var TW=Ms;var wci=y(C(),1);function Xl(){this._dataSources=[],this._dataSourceAdded=new Ce,this._dataSourceRemoved=new Ce,this._dataSourceMoved=new Ce}Object.defineProperties(Xl.prototype,{length:{get:function(){return this._dataSources.length}},dataSourceAdded:{get:function(){return this._dataSourceAdded}},dataSourceRemoved:{get:function(){return this._dataSourceRemoved}},dataSourceMoved:{get:function(){return this._dataSourceMoved}}});Xl.prototype.add=function(e){let t=this,n=this._dataSources;return Promise.resolve(e).then(function(i){return n===t._dataSources&&(t._dataSources.push(i),t._dataSourceAdded.raiseEvent(t,i)),i})};Xl.prototype.remove=function(e,t){t=t??!1;let n=this._dataSources.indexOf(e);return n!==-1?(this._dataSources.splice(n,1),this._dataSourceRemoved.raiseEvent(this,e),t&&typeof e.destroy=="function"&&e.destroy(),!0):!1};Xl.prototype.removeAll=function(e){e=e??!1;let t=this._dataSources;for(let n=0,i=t.length;n<i;++n){let o=t[n];this._dataSourceRemoved.raiseEvent(this,o),e&&typeof o.destroy=="function"&&o.destroy()}this._dataSources=[]};Xl.prototype.contains=function(e){return this.indexOf(e)!==-1};Xl.prototype.indexOf=function(e){return this._dataSources.indexOf(e)};Xl.prototype.get=function(e){return this._dataSources[e]};Xl.prototype.getByName=function(e){return this._dataSources.filter(function(t){return t.name===e})};function I5(e,t){return e.indexOf(t)}function qfe(e,t,n){let i=e._dataSources,o=i.length-1;if(t=Z.clamp(t,0,o),n=Z.clamp(n,0,o),t===n)return;let r=i[t];i[t]=i[n],i[n]=r,e.dataSourceMoved.raiseEvent(r,n,t)}Xl.prototype.raise=function(e){let t=I5(this._dataSources,e);qfe(this,t,t+1)};Xl.prototype.lower=function(e){let t=I5(this._dataSources,e);qfe(this,t,t-1)};Xl.prototype.raiseToTop=function(e){let t=I5(this._dataSources,e);t!==this._dataSources.length-1&&(this._dataSources.splice(t,1),this._dataSources.push(e),this.dataSourceMoved.raiseEvent(e,this._dataSources.length-1,t))};Xl.prototype.lowerToBottom=function(e){let t=I5(this._dataSources,e);t!==0&&(this._dataSources.splice(t,1),this._dataSources.splice(0,0,e),this.dataSourceMoved.raiseEvent(e,0,t))};Xl.prototype.isDestroyed=function(){return!1};Xl.prototype.destroy=function(){return this.removeAll(!0),me(this)};var SW=Xl;var qCi=y(C(),1);var Yci=y(C(),1);var Nci=y(C(),1);function Ha(e){e=e??Y.EMPTY_OBJECT,this._primitives=[],this._guid=qn(),this._primitiveAdded=new Ce,this._primitiveRemoved=new Ce,this._zIndex=void 0,this.show=e.show??!0,this.destroyPrimitives=e.destroyPrimitives??!0,this._countReferences=e.countReferences??!1}Object.defineProperties(Ha.prototype,{length:{get:function(){return this._primitives.length}},primitiveAdded:{get:function(){return this._primitiveAdded}},primitiveRemoved:{get:function(){return this._primitiveRemoved}}});Ha.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};Ha.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};Ha.prototype.removeAndDestroy=function(e){let t=this.remove(e);return t&&!this.destroyPrimitives&&e.destroy(),t};Ha.prototype.removeAll=function(){let e=this._primitives,t=e.length;for(let n=0;n<t;++n){let i=e[n];delete i._external._composites[this._guid],this._countReferences&&i._external._referenceCount--,this.destroyPrimitives&&(!this._countReferences||i._external._referenceCount<=0)&&i.destroy(),this._primitiveRemoved.raiseEvent(i)}this._primitives=[]};Ha.prototype.contains=function(e){return!!(l(e)&&e._external&&e._external._composites&&e._external._composites[this._guid])};function _5(e,t){return e._primitives.indexOf(t)}Ha.prototype.raise=function(e){if(l(e)){let t=_5(this,e),n=this._primitives;if(t!==n.length-1){let i=n[t];n[t]=n[t+1],n[t+1]=i}}};Ha.prototype.raiseToTop=function(e){if(l(e)){let t=_5(this,e),n=this._primitives;t!==n.length-1&&(n.splice(t,1),n.push(e))}};Ha.prototype.lower=function(e){if(l(e)){let t=_5(this,e),n=this._primitives;if(t!==0){let i=n[t];n[t]=n[t-1],n[t-1]=i}}};Ha.prototype.lowerToBottom=function(e){if(l(e)){let t=_5(this,e),n=this._primitives;t!==0&&(n.splice(t,1),n.unshift(e))}};Ha.prototype.get=function(e){return this._primitives[e]};Ha.prototype.update=function(e){if(!this.show)return;let t=this._primitives;for(let n=0;n<t.length;++n)t[n].update(e)};Ha.prototype.prePassesUpdate=function(e){let t=this._primitives;for(let n=0;n<t.length;++n){let i=t[n];l(i.prePassesUpdate)&&i.prePassesUpdate(e)}};Ha.prototype.updateForPass=function(e,t){let n=this._primitives;for(let i=0;i<n.length;++i){let o=n[i];l(o.updateForPass)&&o.updateForPass(e,t)}};Ha.prototype.postPassesUpdate=function(e){let t=this._primitives;for(let n=0;n<t.length;++n){let i=t[n];l(i.postPassesUpdate)&&i.postPassesUpdate(e)}};Ha.prototype.isDestroyed=function(){return!1};Ha.prototype.destroy=function(){return this.removeAll(),me(this)};var Wl=Ha;function rp(){this._length=0,this._collections={},this._collectionsArray=[],this.show=!0}Object.defineProperties(rp.prototype,{length:{get:function(){return this._length}}});rp.prototype.add=function(e,t){t=t??0;let n=this._collections[t];if(!l(n)){n=new Wl({destroyPrimitives:!1}),n._zIndex=t,this._collections[t]=n;let i=this._collectionsArray,o=0;for(;o<i.length&&i[o]._zIndex<t;)o++;i.splice(o,0,n)}return n.add(e),this._length++,e._zIndex=t,e};rp.prototype.set=function(e,t){return t===e._zIndex||(this.remove(e,!0),this.add(e,t)),e};rp.prototype.remove=function(e,t){if(this.contains(e)){let n=e._zIndex,i=this._collections[n],o;return t?o=i.remove(e):o=i.removeAndDestroy(e),o&&this._length--,i.length===0&&(this._collectionsArray.splice(this._collectionsArray.indexOf(i),1),this._collections[n]=void 0,i.destroy()),o}return!1};rp.prototype.removeAll=function(){let e=this._collectionsArray;for(let t=0;t<e.length;t++){let n=e[t];n.destroyPrimitives=!0,n.destroy()}this._collections={},this._collectionsArray=[],this._length=0};rp.prototype.contains=function(e){if(!l(e))return!1;let t=this._collections[e._zIndex];return l(t)&&t.contains(e)};rp.prototype.update=function(e){if(!this.show)return;let t=this._collectionsArray;for(let n=0;n<t.length;n++)t[n].update(e)};rp.prototype.isDestroyed=function(){return!1};rp.prototype.destroy=function(){return this.removeAll(),me(this)};var LW=rp;var Vbi=y(C(),1);var Jci=y(C(),1);function iS(e,t){this._primitives=e,this._orderedGroundPrimitives=t,this._dynamicUpdaters=new Bt}iS.prototype.add=function(e,t){this._dynamicUpdaters.set(t.id,t.createDynamicUpdater(this._primitives,this._orderedGroundPrimitives))};iS.prototype.remove=function(e){let t=e.id,n=this._dynamicUpdaters.get(t);l(n)&&(this._dynamicUpdaters.remove(t),n.destroy())};iS.prototype.update=function(e){let t=this._dynamicUpdaters.values;for(let n=0,i=t.length;n<i;n++)t[n].update(e);return!0};iS.prototype.removeAllPrimitives=function(){let e=this._dynamicUpdaters.values;for(let t=0,n=e.length;t<n;t++)e[t].destroy();this._dynamicUpdaters.removeAll()};iS.prototype.getBoundingSphere=function(e,t){return e=this._dynamicUpdaters.get(e.id),l(e)&&l(e.getBoundingSphere)?e.getBoundingSphere(t):At.FAILED};var Yx=iS;var WAi=y(C(),1);var mdi=y(C(),1);var Lli=y(C(),1);var nli=y(C(),1);var x4={},E5=new m,$fe=new m,epe=new Pe,tpe=new $;function oS(e,t,n,i,o,r,s,a,c,d){let u=e+t;m.multiplyByScalar(i,Math.cos(u),E5),m.multiplyByScalar(n,Math.sin(u),$fe),m.add(E5,$fe,E5);let h=Math.cos(e);h=h*h;let p=Math.sin(e);p=p*p;let f=r/Math.sqrt(s*h+o*p)/a;return Pe.fromAxisAngle(E5,f,epe),$.fromQuaternion(epe,tpe),$.multiplyByVector(tpe,c,d),m.normalize(d,d),m.multiplyByScalar(d,a,d),d}var npe=new m,ipe=new m,C4=new m,Xet=new m;x4.raisePositionsToHeight=function(e,t,n){let i=t.ellipsoid,o=t.height,r=t.extrudedHeight,s=n?e.length/3*2:e.length/3,a=new Float64Array(s*3),c=e.length,d=n?c:0;for(let u=0;u<c;u+=3){let h=u+1,p=u+2,g=m.fromArray(e,u,npe);i.scaleToGeodeticSurface(g,g);let f=m.clone(g,ipe),b=i.geodeticSurfaceNormal(g,Xet),x=m.multiplyByScalar(b,o,C4);m.add(g,x,g),n&&(m.multiplyByScalar(b,r,x),m.add(f,x,f),a[u+d]=f.x,a[h+d]=f.y,a[p+d]=f.z),a[u]=g.x,a[h]=g.y,a[p]=g.z}return a};var Wet=new m,Fet=new m,Pet=new m;x4.computeEllipsePositions=function(e,t,n){let i=e.semiMinorAxis,o=e.semiMajorAxis,r=e.rotation,s=e.center,a=e.granularity*8,c=i*i,d=o*o,u=o*i,h=m.magnitude(s),p=m.normalize(s,Wet),g=m.cross(m.UNIT_Z,s,Fet);g=m.normalize(g,g);let f=m.cross(p,g,Pet),b=1+Math.ceil(Z.PI_OVER_TWO/a),x=Z.PI_OVER_TWO/(b-1),I=Z.PI_OVER_TWO-b*x;I<0&&(b-=Math.ceil(Math.abs(I)/x));let _=2*(b*(b+2)),E=t?new Array(_*3):void 0,S=0,R=npe,G=ipe,B=b*4*3,w=B-1,F=0,P=n?new Array(B):void 0,A,T,L,V,W;for(I=Z.PI_OVER_TWO,R=oS(I,r,f,g,c,u,d,h,p,R),t&&(E[S++]=R.x,E[S++]=R.y,E[S++]=R.z),n&&(P[w--]=R.z,P[w--]=R.y,P[w--]=R.x),I=Z.PI_OVER_TWO-x,A=1;A<b+1;++A){if(R=oS(I,r,f,g,c,u,d,h,p,R),G=oS(Math.PI-I,r,f,g,c,u,d,h,p,G),t){for(E[S++]=R.x,E[S++]=R.y,E[S++]=R.z,L=2*A+2,T=1;T<L-1;++T)V=T/(L-1),W=m.lerp(R,G,V,C4),E[S++]=W.x,E[S++]=W.y,E[S++]=W.z;E[S++]=G.x,E[S++]=G.y,E[S++]=G.z}n&&(P[w--]=R.z,P[w--]=R.y,P[w--]=R.x,P[F++]=G.x,P[F++]=G.y,P[F++]=G.z),I=Z.PI_OVER_TWO-(A+1)*x}for(A=b;A>1;--A){if(I=Z.PI_OVER_TWO-(A-1)*x,R=oS(-I,r,f,g,c,u,d,h,p,R),G=oS(I+Math.PI,r,f,g,c,u,d,h,p,G),t){for(E[S++]=R.x,E[S++]=R.y,E[S++]=R.z,L=2*(A-1)+2,T=1;T<L-1;++T)V=T/(L-1),W=m.lerp(R,G,V,C4),E[S++]=W.x,E[S++]=W.y,E[S++]=W.z;E[S++]=G.x,E[S++]=G.y,E[S++]=G.z}n&&(P[w--]=R.z,P[w--]=R.y,P[w--]=R.x,P[F++]=G.x,P[F++]=G.y,P[F++]=G.z)}I=Z.PI_OVER_TWO,R=oS(-I,r,f,g,c,u,d,h,p,R);let M={};return t&&(E[S++]=R.x,E[S++]=R.y,E[S++]=R.z,M.positions=E,M.numPts=b),n&&(P[w--]=R.z,P[w--]=R.y,P[w--]=R.x,M.outerPositions=P),M};var Ad=x4;var rS=new m,I4=new m,_4=new m,ope=new m,ea=new D,rpe=new $,Met=new $,E4=new Pe,spe=new m,ape=new m,cpe=new m,L5=new ge,lpe=new m,dpe=new D,upe=new D;function mpe(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,h=i.st?new Float32Array(d*2):void 0,p=i.normal?new Float32Array(d*3):void 0,g=i.tangent?new Float32Array(d*3):void 0,f=i.bitangent?new Float32Array(d*3):void 0,b=u?new Float32Array(d*3):void 0,x=0,I=spe,_=ape,E=cpe,S=new Di(a),R=S.project(a.cartesianToCartographic(o,L5),lpe),G=a.scaleToGeodeticSurface(o,rS);a.geodeticSurfaceNormal(G,G);let B=rpe,w=Met;if(c!==0){let W=Pe.fromAxisAngle(G,c,E4);B=$.fromQuaternion(W,B),W=Pe.fromAxisAngle(G,-c,E4),w=$.fromQuaternion(W,w)}else B=$.clone($.IDENTITY,B),w=$.clone($.IDENTITY,w);let F=D.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,dpe),P=D.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,upe),A=e.length,T=n?A:0,L=T/3*2;for(let W=0;W<A;W+=3){let M=W+1,Q=W+2,N=m.fromArray(e,W,rS);if(i.st){let k=$.multiplyByVector(B,N,I4),v=S.project(a.cartesianToCartographic(k,L5),_4);m.subtract(v,R,v),ea.x=(v.x+r)/(2*r),ea.y=(v.y+s)/(2*s),F.x=Math.min(ea.x,F.x),F.y=Math.min(ea.y,F.y),P.x=Math.max(ea.x,P.x),P.y=Math.max(ea.y,P.y),n&&(h[x+L]=ea.x,h[x+1+L]=ea.y),h[x++]=ea.x,h[x++]=ea.y}(i.normal||i.tangent||i.bitangent||u)&&(I=a.geodeticSurfaceNormal(N,I),u&&(b[W+T]=-I.x,b[M+T]=-I.y,b[Q+T]=-I.z),(i.normal||i.tangent||i.bitangent)&&((i.tangent||i.bitangent)&&(_=m.normalize(m.cross(m.UNIT_Z,I,_),_),$.multiplyByVector(w,_,_)),i.normal&&(p[W]=I.x,p[M]=I.y,p[Q]=I.z,n&&(p[W+T]=-I.x,p[M+T]=-I.y,p[Q+T]=-I.z)),i.tangent&&(g[W]=_.x,g[M]=_.y,g[Q]=_.z,n&&(g[W+T]=-_.x,g[M+T]=-_.y,g[Q+T]=-_.z)),i.bitangent&&(E=m.normalize(m.cross(I,_,E),E),f[W]=E.x,f[M]=E.y,f[Q]=E.z,n&&(f[W+T]=E.x,f[M+T]=E.y,f[Q+T]=E.z))))}if(i.st){A=h.length;for(let W=0;W<A;W+=2)h[W]=(h[W]-F.x)/(P.x-F.x),h[W+1]=(h[W+1]-F.y)/(P.y-F.y)}let V=new xn;if(i.position){let W=Ad.raisePositionsToHeight(e,t,n);V.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:W})}if(i.st&&(V.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:h})),i.normal&&(V.normal=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:p})),i.tangent&&(V.tangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:g})),i.bitangent&&(V.bitangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:f})),u&&(V.extrudeDirection=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:b})),n&&l(t.offsetAttribute)){let W=new Uint8Array(d);if(t.offsetAttribute===pn.TOP)W=W.fill(1,0,d/2);else{let M=t.offsetAttribute===pn.NONE?0:1;W=W.fill(M)}V.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:W})}return V}function hpe(e){let t=new Array(12*(e*(e+1))-6),n=0,i,o,r,s,a;for(i=0,r=1,s=0;s<3;s++)t[n++]=r++,t[n++]=i,t[n++]=r;for(s=2;s<e+1;++s){for(r=s*(s+1)-1,i=(s-1)*s-1,t[n++]=r++,t[n++]=i,t[n++]=r,o=2*s,a=0;a<o-1;++a)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;t[n++]=r++,t[n++]=i,t[n++]=r}for(o=e*2,++r,++i,s=0;s<o-1;++s)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;for(t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i++,t[n++]=i,++i,s=e-1;s>1;--s){for(t[n++]=i++,t[n++]=i,t[n++]=r,o=2*s,a=0;a<o-1;++a)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;t[n++]=i++,t[n++]=i++,t[n++]=r++}for(s=0;s<3;s++)t[n++]=i++,t[n++]=i,t[n++]=r;return t}var Ox=new m;function vet(e){let t=e.center;Ox=m.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,Ox),e.height,Ox),Ox=m.add(t,Ox,Ox);let n=new ue(Ox,e.semiMajorAxis),i=Ad.computeEllipsePositions(e,!0,!1),o=i.positions,r=i.numPts,s=mpe(o,e,!1),a=hpe(r);return a=Me.createTypedArray(o.length/3,a),{boundingSphere:n,attributes:s,indices:a}}function Net(e,t){let n=t.vertexFormat,i=t.center,o=t.semiMajorAxis,r=t.semiMinorAxis,s=t.ellipsoid,a=t.height,c=t.extrudedHeight,d=t.stRotation,u=e.length/3*2,h=new Float64Array(u*3),p=n.st?new Float32Array(u*2):void 0,g=n.normal?new Float32Array(u*3):void 0,f=n.tangent?new Float32Array(u*3):void 0,b=n.bitangent?new Float32Array(u*3):void 0,x=t.shadowVolume,I=x?new Float32Array(u*3):void 0,_=0,E=spe,S=ape,R=cpe,G=new Di(s),B=G.project(s.cartesianToCartographic(i,L5),lpe),w=s.scaleToGeodeticSurface(i,rS);s.geodeticSurfaceNormal(w,w);let F=Pe.fromAxisAngle(w,d,E4),P=$.fromQuaternion(F,rpe),A=D.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,dpe),T=D.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,upe),L=e.length,V=L/3*2;for(let M=0;M<L;M+=3){let Q=M+1,N=M+2,k=m.fromArray(e,M,rS),v;if(n.st){let H=$.multiplyByVector(P,k,I4),ee=G.project(s.cartesianToCartographic(H,L5),_4);m.subtract(ee,B,ee),ea.x=(ee.x+o)/(2*o),ea.y=(ee.y+r)/(2*r),A.x=Math.min(ea.x,A.x),A.y=Math.min(ea.y,A.y),T.x=Math.max(ea.x,T.x),T.y=Math.max(ea.y,T.y),p[_+V]=ea.x,p[_+1+V]=ea.y,p[_++]=ea.x,p[_++]=ea.y}k=s.scaleToGeodeticSurface(k,k),v=m.clone(k,I4),E=s.geodeticSurfaceNormal(k,E),x&&(I[M+L]=-E.x,I[Q+L]=-E.y,I[N+L]=-E.z);let O=m.multiplyByScalar(E,a,ope);if(k=m.add(k,O,k),O=m.multiplyByScalar(E,c,O),v=m.add(v,O,v),n.position&&(h[M+L]=v.x,h[Q+L]=v.y,h[N+L]=v.z,h[M]=k.x,h[Q]=k.y,h[N]=k.z),n.normal||n.tangent||n.bitangent){R=m.clone(E,R);let H=m.fromArray(e,(M+3)%L,ope);m.subtract(H,k,H);let ee=m.subtract(v,k,_4);E=m.normalize(m.cross(ee,H,E),E),n.normal&&(g[M]=E.x,g[Q]=E.y,g[N]=E.z,g[M+L]=E.x,g[Q+L]=E.y,g[N+L]=E.z),n.tangent&&(S=m.normalize(m.cross(R,E,S),S),f[M]=S.x,f[Q]=S.y,f[N]=S.z,f[M+L]=S.x,f[M+1+L]=S.y,f[M+2+L]=S.z),n.bitangent&&(b[M]=R.x,b[Q]=R.y,b[N]=R.z,b[M+L]=R.x,b[Q+L]=R.y,b[N+L]=R.z)}}if(n.st){L=p.length;for(let M=0;M<L;M+=2)p[M]=(p[M]-A.x)/(T.x-A.x),p[M+1]=(p[M+1]-A.y)/(T.y-A.y)}let W=new xn;if(n.position&&(W.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:h})),n.st&&(W.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:p})),n.normal&&(W.normal=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:g})),n.tangent&&(W.tangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:f})),n.bitangent&&(W.bitangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:b})),x&&(W.extrudeDirection=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:I})),l(t.offsetAttribute)){let M=new Uint8Array(u);if(t.offsetAttribute===pn.TOP)M=M.fill(1,0,u/2);else{let Q=t.offsetAttribute===pn.NONE?0:1;M=M.fill(Q)}W.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:M})}return W}function Det(e){let t=e.length/3,n=Me.createTypedArray(t,t*6),i=0;for(let o=0;o<t;o++){let r=o,s=o+t,a=(r+1)%t,c=a+t;n[i++]=r,n[i++]=s,n[i++]=a,n[i++]=a,n[i++]=s,n[i++]=c}return n}var T5=new ue,S5=new ue;function Qet(e){let t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,rS),e.height,rS);T5.center=m.add(t,o,T5.center),T5.radius=i,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,o),e.extrudedHeight,o),S5.center=m.add(t,o,S5.center),S5.radius=i;let r=Ad.computeEllipsePositions(e,!0,!0),s=r.positions,a=r.numPts,c=r.outerPositions,d=ue.union(T5,S5),u=mpe(s,e,!0),h=hpe(a),p=h.length;h.length=p*2;let g=s.length/3;for(let S=0;S<p;S+=3)h[S+p]=h[S+2]+g,h[S+1+p]=h[S+1]+g,h[S+2+p]=h[S]+g;let f=Me.createTypedArray(g*2/3,h),b=new pt({attributes:u,indices:f,primitiveType:We.TRIANGLES}),x=Net(c,e);h=Det(c);let I=Me.createTypedArray(c.length*2/3,h),_=new pt({attributes:x,indices:I,primitiveType:We.TRIANGLES}),E=Yn.combineInstances([new wt({geometry:b}),new wt({geometry:_})]);return{boundingSphere:d,attributes:E[0].attributes,indices:E[0].indices}}function fpe(e,t,n,i,o,r,s){let c=Ad.computeEllipsePositions({center:e,semiMajorAxis:t,semiMinorAxis:n,rotation:i,granularity:o},!1,!0).outerPositions,d=c.length/3,u=new Array(d);for(let p=0;p<d;++p)u[p]=m.fromArray(c,p*3);let h=le.fromCartesianArray(u,r,s);return h.width>Z.PI&&(h.north=h.north>0?Z.PI_OVER_TWO-Z.EPSILON7:h.north,h.south=h.south<0?Z.EPSILON7-Z.PI_OVER_TWO:h.south,h.east=Z.PI,h.west=-Z.PI),h}function ap(e){e=e??Y.EMPTY_OBJECT;let t=e.center,n=e.ellipsoid??ie.default,i=e.semiMajorAxis,o=e.semiMinorAxis,r=e.granularity??Z.RADIANS_PER_DEGREE,s=e.vertexFormat??we.DEFAULT,a=e.height??0,c=e.extrudedHeight??a;this._center=m.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}ap.packedLength=m.packedLength+ie.packedLength+we.packedLength+9;ap.pack=function(e,t,n){return n=n??0,m.pack(e._center,t,n),n+=m.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 ppe=new m,Ape=new ie,gpe=new we,sp={center:ppe,ellipsoid:Ape,vertexFormat:gpe,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};ap.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,ppe);t+=m.packedLength;let o=ie.unpack(e,t,Ape);t+=ie.packedLength;let r=we.unpack(e,t,gpe);t+=we.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t++],g=e[t++]===1,f=e[t];return l(n)?(n._center=m.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=h,n._extrudedHeight=p,n._shadowVolume=g,n._offsetAttribute=f===-1?void 0:f,n):(sp.height=u,sp.extrudedHeight=p,sp.granularity=h,sp.stRotation=d,sp.rotation=c,sp.semiMajorAxis=s,sp.semiMinorAxis=a,sp.shadowVolume=g,sp.offsetAttribute=f===-1?void 0:f,new ap(sp))};ap.computeRectangle=function(e,t){e=e??Y.EMPTY_OBJECT;let n=e.center,i=e.ellipsoid??ie.default,o=e.semiMajorAxis,r=e.semiMinorAxis,s=e.granularity??Z.RADIANS_PER_DEGREE,a=e.rotation??0;return fpe(n,o,r,a,s,i,t)};ap.createGeometry=function(e){if(e._semiMajorAxis<=0||e._semiMinorAxis<=0)return;let t=e._height,n=e._extrudedHeight,i=!Z.equalsEpsilon(t,n,0,Z.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=Qet(o);else if(r=vet(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 Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new pt({attributes:r.attributes,indices:r.indices,primitiveType:We.TRIANGLES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})};ap.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new ap({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 Uet(e){let t=-e._stRotation;if(t===0)return[0,0,0,1,1,0];let i=Ad.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;c<o;++c)r[c]=m.fromArray(i,c*3);let s=e._ellipsoid,a=e.rectangle;return pt._textureCoordinateRotationPoints(r,t,s,a)}Object.defineProperties(ap.prototype,{rectangle:{get:function(){return l(this._rectangle)||(this._rectangle=fpe(this._center,this._semiMajorAxis,this._semiMinorAxis,this._rotation,this._granularity,this._ellipsoid)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return l(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=Uet(this)),this._textureCoordinateRotationPoints}}});var Fl=ap;var Uli=y(C(),1);var bpe=new m,Hx=new m;function ket(e){let t=e.center;Hx=m.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,Hx),e.height,Hx),Hx=m.add(t,Hx,Hx);let n=new ue(Hx,e.semiMajorAxis),i=Ad.computeEllipsePositions(e,!1,!0).outerPositions,o=new xn({position:new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:Ad.raisePositionsToHeight(i,e,!1)})}),r=i.length/3,s=Me.createTypedArray(r,r*2),a=0;for(let c=0;c<r;++c)s[a++]=c,s[a++]=(c+1)%r;return{boundingSphere:n,attributes:o,indices:s}}var R5=new ue,V5=new ue;function Yet(e){let t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,bpe),e.height,bpe);R5.center=m.add(t,o,R5.center),R5.radius=i,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,o),e.extrudedHeight,o),V5.center=m.add(t,o,V5.center),V5.radius=i;let r=Ad.computeEllipsePositions(e,!1,!0).outerPositions,s=new xn({position:new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:Ad.raisePositionsToHeight(r,e,!0)})});r=s.position.values;let a=ue.union(R5,V5),c=r.length/3;if(l(e.offsetAttribute)){let f=new Uint8Array(c);if(e.offsetAttribute===pn.TOP)f=f.fill(1,0,c/2);else{let b=e.offsetAttribute===pn.NONE?0:1;f=f.fill(b)}s.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:f})}let d=e.numberOfVerticalLines??16;d=Z.clamp(d,0,c/2);let u=Me.createTypedArray(c,c*2+d*2);c/=2;let h=0,p;for(p=0;p<c;++p)u[h++]=p,u[h++]=(p+1)%c,u[h++]=p+c,u[h++]=(p+1)%c+c;let g;if(d>0){let f=Math.min(d,c);g=Math.round(c/f);let b=Math.min(g*d,c);for(p=0;p<b;p+=g)u[h++]=p,u[h++]=p+c}return{boundingSphere:a,attributes:s,indices:u}}function sS(e){e=e??Y.EMPTY_OBJECT;let t=e.center,n=e.ellipsoid??ie.default,i=e.semiMajorAxis,o=e.semiMinorAxis,r=e.granularity??Z.RADIANS_PER_DEGREE,s=e.height??0,a=e.extrudedHeight??s;this._center=m.clone(t),this._semiMajorAxis=i,this._semiMinorAxis=o,this._ellipsoid=ie.clone(n),this._rotation=e.rotation??0,this._height=Math.max(a,s),this._granularity=r,this._extrudedHeight=Math.min(a,s),this._numberOfVerticalLines=Math.max(e.numberOfVerticalLines??16,0),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipseOutlineGeometry"}sS.packedLength=m.packedLength+ie.packedLength+8;sS.pack=function(e,t,n){return n=n??0,m.pack(e._center,t,n),n+=m.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._semiMajorAxis,t[n++]=e._semiMinorAxis,t[n++]=e._rotation,t[n++]=e._height,t[n++]=e._granularity,t[n++]=e._extrudedHeight,t[n++]=e._numberOfVerticalLines,t[n]=e._offsetAttribute??-1,t};var ype=new m,Cpe=new ie,Lg={center:ype,ellipsoid:Cpe,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};sS.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,ype);t+=m.packedLength;let o=ie.unpack(e,t,Cpe);t+=ie.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t];return l(n)?(n._center=m.clone(i,n._center),n._ellipsoid=ie.clone(o,n._ellipsoid),n._semiMajorAxis=r,n._semiMinorAxis=s,n._rotation=a,n._height=c,n._granularity=d,n._extrudedHeight=u,n._numberOfVerticalLines=h,n._offsetAttribute=p===-1?void 0:p,n):(Lg.height=c,Lg.extrudedHeight=u,Lg.granularity=d,Lg.rotation=a,Lg.semiMajorAxis=r,Lg.semiMinorAxis=s,Lg.numberOfVerticalLines=h,Lg.offsetAttribute=p===-1?void 0:p,new sS(Lg))};sS.createGeometry=function(e){if(e._semiMajorAxis<=0||e._semiMinorAxis<=0)return;let t=e._height,n=e._extrudedHeight,i=!Z.equalsEpsilon(t,n,0,Z.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,numberOfVerticalLines:e._numberOfVerticalLines},r;if(i)o.extrudedHeight=n,o.offsetAttribute=e._offsetAttribute,r=Yet(o);else if(r=ket(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 Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new pt({attributes:r.attributes,indices:r.indices,primitiveType:We.LINES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})};var du=sS;var xpe=new U,Ipe=m.ZERO,_pe=new m,Epe=new le;function Oet(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 zh(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new Oet(e),geometryPropertyName:"ellipse",observedPropertyNames:["availability","position","ellipse"]}),this._onEntityPropertyChanged(e,"ellipse",e.ellipse,void 0)}l(Object.create)&&(zh.prototype=Object.create(ii.prototype),zh.prototype.constructor=zh);zh.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:jn.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof qt){let o;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,xpe)),l(o)||(o=U.WHITE),i.color=tn.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,Ipe,_pe))),new wt({id:t,geometry:new Fl(this._options),attributes:i})};zh.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=z.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,xpe),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:tn.fromColor(i),distanceDisplayCondition:jn.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,Ipe,_pe))),new wt({id:t,geometry:new du(this._options),attributes:r})};zh.prototype._computeCenter=function(e,t){return z.getValueOrUndefined(this._entity.position,e,t)};zh.prototype._isHidden=function(e,t){let n=e.position;return!l(n)||!l(t.semiMajorAxis)||!l(t.semiMinorAxis)||Ci.prototype._isHidden.call(this,e,t)};zh.prototype._isDynamic=function(e,t){return!e.position.isConstant||!t.semiMajorAxis.isConstant||!t.semiMinorAxis.isConstant||!z.isConstant(t.rotation)||!z.isConstant(t.height)||!z.isConstant(t.extrudedHeight)||!z.isConstant(t.granularity)||!z.isConstant(t.stRotation)||!z.isConstant(t.outlineWidth)||!z.isConstant(t.numberOfVerticalLines)||!z.isConstant(t.zIndex)||this._onTerrain&&!z.isConstant(this._materialProperty)&&!(this._materialProperty instanceof qt)};zh.prototype._setStaticOptions=function(e,t){let n=z.getValueOrUndefined(t.height,ze.MINIMUM_VALUE),i=z.getValueOrDefault(t.heightReference,ze.MINIMUM_VALUE,et.NONE),o=z.getValueOrUndefined(t.extrudedHeight,ze.MINIMUM_VALUE),r=z.getValueOrDefault(t.extrudedHeightReference,ze.MINIMUM_VALUE,et.NONE);l(o)&&!l(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof qt?yn.VERTEX_FORMAT:Io.MaterialSupport.TEXTURED.vertexFormat,s.center=e.position.getValue(ze.MINIMUM_VALUE,s.center),s.semiMajorAxis=t.semiMajorAxis.getValue(ze.MINIMUM_VALUE,s.semiMajorAxis),s.semiMinorAxis=t.semiMinorAxis.getValue(ze.MINIMUM_VALUE,s.semiMinorAxis),s.rotation=z.getValueOrUndefined(t.rotation,ze.MINIMUM_VALUE),s.granularity=z.getValueOrUndefined(t.granularity,ze.MINIMUM_VALUE),s.stRotation=z.getValueOrUndefined(t.stRotation,ze.MINIMUM_VALUE),s.numberOfVerticalLines=z.getValueOrUndefined(t.numberOfVerticalLines,ze.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=Si.getMinimumMaximumHeights(Fl.computeRectangle(s,Epe)).minimumTerrainHeight),s.extrudedHeight=o};zh.DynamicGeometryUpdater=aS;function aS(e,t,n){yi.call(this,e,t,n)}l(Object.create)&&(aS.prototype=Object.create(yi.prototype),aS.prototype.constructor=aS);aS.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.center)||!l(i.semiMajorAxis)||!l(i.semiMinorAxis)||yi.prototype._isHidden.call(this,e,t,n)};aS.prototype._setOptions=function(e,t,n){let i=this._options,o=z.getValueOrUndefined(t.height,n),r=z.getValueOrDefault(t.heightReference,n,et.NONE),s=z.getValueOrUndefined(t.extrudedHeight,n),a=z.getValueOrDefault(t.extrudedHeightReference,n,et.NONE);l(s)&&!l(o)&&(o=0),i.center=z.getValueOrUndefined(e.position,n,i.center),i.semiMajorAxis=z.getValueOrUndefined(t.semiMajorAxis,n),i.semiMinorAxis=z.getValueOrUndefined(t.semiMinorAxis,n),i.rotation=z.getValueOrUndefined(t.rotation,n),i.granularity=z.getValueOrUndefined(t.granularity,n),i.stRotation=z.getValueOrUndefined(t.stRotation,n),i.numberOfVerticalLines=z.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=Si.getMinimumMaximumHeights(Fl.computeRectangle(i,Epe)).minimumTerrainHeight),i.extrudedHeight=s};var RW=zh;var nui=y(C(),1);var Vdi=y(C(),1);var Het=new m,zet=new m,Ket=new m,Jet=new m,jet=new m,qet=new m(1,1,1),Tpe=Math.cos,Spe=Math.sin;function Rg(e){e=e??Y.EMPTY_OBJECT;let t=e.radii??qet,n=e.innerRadii??t,i=e.minimumClock??0,o=e.maximumClock??Z.TWO_PI,r=e.minimumCone??0,s=e.maximumCone??Z.PI,a=Math.round(e.stackPartitions??64),c=Math.round(e.slicePartitions??64),d=e.vertexFormat??we.DEFAULT;this._radii=m.clone(t),this._innerRadii=m.clone(n),this._minimumClock=i,this._maximumClock=o,this._minimumCone=r,this._maximumCone=s,this._stackPartitions=a,this._slicePartitions=c,this._vertexFormat=we.clone(d),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipsoidGeometry"}Rg.packedLength=2*m.packedLength+we.packedLength+7;Rg.pack=function(e,t,n){return n=n??0,m.pack(e._radii,t,n),n+=m.packedLength,m.pack(e._innerRadii,t,n),n+=m.packedLength,we.pack(e._vertexFormat,t,n),n+=we.packedLength,t[n++]=e._minimumClock,t[n++]=e._maximumClock,t[n++]=e._minimumCone,t[n++]=e._maximumCone,t[n++]=e._stackPartitions,t[n++]=e._slicePartitions,t[n]=e._offsetAttribute??-1,t};var Lpe=new m,Rpe=new m,Vpe=new we,w0={radii:Lpe,innerRadii:Rpe,vertexFormat:Vpe,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,offsetAttribute:void 0};Rg.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,Lpe);t+=m.packedLength;let o=m.unpack(e,t,Rpe);t+=m.packedLength;let r=we.unpack(e,t,Vpe);t+=we.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t];return l(n)?(n._radii=m.clone(i,n._radii),n._innerRadii=m.clone(o,n._innerRadii),n._vertexFormat=we.clone(r,n._vertexFormat),n._minimumClock=s,n._maximumClock=a,n._minimumCone=c,n._maximumCone=d,n._stackPartitions=u,n._slicePartitions=h,n._offsetAttribute=p===-1?void 0:p,n):(w0.minimumClock=s,w0.maximumClock=a,w0.minimumCone=c,w0.maximumCone=d,w0.stackPartitions=u,w0.slicePartitions=h,w0.offsetAttribute=p===-1?void 0:p,new Rg(w0))};Rg.createGeometry=function(e){let t=e._radii;if(t.x<=0||t.y<=0||t.z<=0)return;let n=e._innerRadii;if(n.x<=0||n.y<=0||n.z<=0)return;let i=e._minimumClock,o=e._maximumClock,r=e._minimumCone,s=e._maximumCone,a=e._vertexFormat,c=e._slicePartitions+1,d=e._stackPartitions+1;c=Math.round(c*Math.abs(o-i)/Z.TWO_PI),d=Math.round(d*Math.abs(s-r)/Z.PI),c<2&&(c=2),d<2&&(d=2);let u,h,p=0,g=[r],f=[i];for(u=0;u<d;u++)g.push(r+u*(s-r)/(d-1));for(g.push(s),h=0;h<c;h++)f.push(i+h*(o-i)/(c-1));f.push(o);let b=g.length,x=f.length,I=0,_=1,E=n.x!==t.x||n.y!==t.y||n.z!==t.z,S=!1,R=!1,G=!1;E&&(_=2,r>0&&(S=!0,I+=c-1),s<Math.PI&&(R=!0,I+=c-1),(o-i)%Z.TWO_PI?(G=!0,I+=(d-1)*2+1):I+=1);let B=x*b*_,w=new Float64Array(B*3),F=new Array(B).fill(!1),P=new Array(B).fill(!1),A=c*d*_,T=6*(A+I+1-(c+d)*_),L=Me.createTypedArray(A,T),V=a.normal?new Float32Array(B*3):void 0,W=a.tangent?new Float32Array(B*3):void 0,M=a.bitangent?new Float32Array(B*3):void 0,Q=a.st?new Float32Array(B*2):void 0,N=new Array(b),k=new Array(b);for(u=0;u<b;u++)N[u]=Spe(g[u]),k[u]=Tpe(g[u]);let v=new Array(x),O=new Array(x);for(h=0;h<x;h++)O[h]=Tpe(f[h]),v[h]=Spe(f[h]);for(u=0;u<b;u++)for(h=0;h<x;h++)w[p++]=t.x*N[u]*O[h],w[p++]=t.y*N[u]*v[h],w[p++]=t.z*k[u];let H=B/2;if(E)for(u=0;u<b;u++)for(h=0;h<x;h++)w[p++]=n.x*N[u]*O[h],w[p++]=n.y*N[u]*v[h],w[p++]=n.z*k[u],F[H]=!0,u>0&&u!==b-1&&h!==0&&h!==x-1&&(P[H]=!0),H++;p=0;let ee,K;for(u=1;u<b-2;u++)for(ee=u*x,K=(u+1)*x,h=1;h<x-2;h++)L[p++]=K+h,L[p++]=K+h+1,L[p++]=ee+h+1,L[p++]=K+h,L[p++]=ee+h+1,L[p++]=ee+h;if(E){let je=b*x;for(u=1;u<b-2;u++)for(ee=je+u*x,K=je+(u+1)*x,h=1;h<x-2;h++)L[p++]=K+h,L[p++]=ee+h,L[p++]=ee+h+1,L[p++]=K+h,L[p++]=ee+h+1,L[p++]=K+h+1}let te,q;if(E){if(S)for(q=b*x,u=1;u<x-2;u++)L[p++]=u,L[p++]=u+1,L[p++]=q+u+1,L[p++]=u,L[p++]=q+u+1,L[p++]=q+u;if(R)for(te=b*x-x,q=b*x*_-x,u=1;u<x-2;u++)L[p++]=te+u+1,L[p++]=te+u,L[p++]=q+u,L[p++]=te+u+1,L[p++]=q+u,L[p++]=q+u+1}if(G){for(u=1;u<b-2;u++)q=x*b+x*u,te=x*u,L[p++]=q,L[p++]=te+x,L[p++]=te,L[p++]=q,L[p++]=q+x,L[p++]=te+x;for(u=1;u<b-2;u++)q=x*b+x*(u+1)-1,te=x*(u+1)-1,L[p++]=te+x,L[p++]=q,L[p++]=te,L[p++]=te+x,L[p++]=q+x,L[p++]=q}let pe=new xn;a.position&&(pe.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:w}));let ye=0,he=0,xe=0,Te=0,Be=B/2,Le,De=ie.fromCartesian3(t),Ue=ie.fromCartesian3(n);if(a.st||a.normal||a.tangent||a.bitangent){for(u=0;u<B;u++){Le=F[u]?Ue:De;let je=m.fromArray(w,u*3,Het),it=Le.geodeticSurfaceNormal(je,zet);if(P[u]&&m.negate(it,it),a.st){let nn=D.negate(it,jet);Q[ye++]=Math.atan2(nn.y,nn.x)/Z.TWO_PI+.5,Q[ye++]=Math.asin(it.z)/Math.PI+.5}if(a.normal&&(V[he++]=it.x,V[he++]=it.y,V[he++]=it.z),a.tangent||a.bitangent){let nn=Ket,rt=0,rn;if(F[u]&&(rt=Be),!S&&u>=rt&&u<rt+x*2?rn=m.UNIT_X:rn=m.UNIT_Z,m.cross(rn,it,nn),m.normalize(nn,nn),a.tangent&&(W[xe++]=nn.x,W[xe++]=nn.y,W[xe++]=nn.z),a.bitangent){let Jt=m.cross(it,nn,Jet);m.normalize(Jt,Jt),M[Te++]=Jt.x,M[Te++]=Jt.y,M[Te++]=Jt.z}}}a.st&&(pe.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:Q})),a.normal&&(pe.normal=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:V})),a.tangent&&(pe.tangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:W})),a.bitangent&&(pe.bitangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:M}))}if(l(e._offsetAttribute)){let je=w.length,it=e._offsetAttribute===pn.NONE?0:1,nn=new Uint8Array(je/3).fill(it);pe.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:nn})}return new pt({attributes:pe,indices:L,primitiveType:We.TRIANGLES,boundingSphere:ue.fromEllipsoid(De),offsetAttribute:e._offsetAttribute})};var T4;Rg.getUnitEllipsoid=function(){return l(T4)||(T4=Rg.createGeometry(new Rg({radii:new m(1,1,1),vertexFormat:we.POSITION_ONLY}))),T4};var xa=Rg;var $et=new qt(U.WHITE),S4=m.ZERO,L4=new m,ett=new m,ttt=new m,R4=new U,ntt=new m(1,1,1);function itt(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 uu(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new itt(e),geometryPropertyName:"ellipsoid",observedPropertyNames:["availability","position","orientation","ellipsoid"]}),this._onEntityPropertyChanged(e,"ellipsoid",e.ellipsoid,void 0)}l(Object.create)&&(uu.prototype=Object.create(Ci.prototype),uu.prototype.constructor=uu);Object.defineProperties(uu.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});uu.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=jn.fromDistanceDisplayCondition(a),d={show:s,distanceDisplayCondition:c,color:void 0,offset:void 0};if(this._materialProperty instanceof qt){let u;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||o)&&(u=this._materialProperty.color.getValue(e,R4)),l(u)||(u=U.WHITE),r=tn.fromColor(u),d.color=r}return l(this._options.offsetAttribute)&&(d.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,S4,L4))),new wt({id:i,geometry:new xa(this._options),modelMatrix:t?void 0:i.computeModelMatrixForHeightReference(e,i.ellipsoid.heightReference,this._options.radii.z*.5,this._scene.ellipsoid,n),attributes:d})};uu.prototype.createOutlineGeometryInstance=function(e,t,n){let i=this._entity,o=i.isAvailable(e),r=z.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,R4),s=this._distanceDisplayConditionProperty.getValue(e),a={show:new Vn(o&&i.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:tn.fromColor(r),distanceDisplayCondition:jn.fromDistanceDisplayCondition(s),offset:void 0};return l(this._options.offsetAttribute)&&(a.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,S4,L4))),new wt({id:i,geometry:new nu(this._options),modelMatrix:t?void 0:i.computeModelMatrixForHeightReference(e,i.ellipsoid.heightReference,this._options.radii.z*.5,this._scene.ellipsoid,n),attributes:a})};uu.prototype._computeCenter=function(e,t){return z.getValueOrUndefined(this._entity.position,e,t)};uu.prototype._isHidden=function(e,t){return!l(e.position)||!l(t.radii)||Ci.prototype._isHidden.call(this,e,t)};uu.prototype._isDynamic=function(e,t){return!e.position.isConstant||!z.isConstant(e.orientation)||!t.radii.isConstant||!z.isConstant(t.innerRadii)||!z.isConstant(t.stackPartitions)||!z.isConstant(t.slicePartitions)||!z.isConstant(t.outlineWidth)||!z.isConstant(t.minimumClock)||!z.isConstant(t.maximumClock)||!z.isConstant(t.minimumCone)||!z.isConstant(t.maximumCone)||!z.isConstant(t.subdivisions)};uu.prototype._setStaticOptions=function(e,t){let n=z.getValueOrDefault(t.heightReference,ze.MINIMUM_VALUE,et.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof qt?yn.VERTEX_FORMAT:Io.MaterialSupport.TEXTURED.vertexFormat,i.radii=t.radii.getValue(ze.MINIMUM_VALUE,i.radii),i.innerRadii=z.getValueOrUndefined(t.innerRadii,i.radii),i.minimumClock=z.getValueOrUndefined(t.minimumClock,ze.MINIMUM_VALUE),i.maximumClock=z.getValueOrUndefined(t.maximumClock,ze.MINIMUM_VALUE),i.minimumCone=z.getValueOrUndefined(t.minimumCone,ze.MINIMUM_VALUE),i.maximumCone=z.getValueOrUndefined(t.maximumCone,ze.MINIMUM_VALUE),i.stackPartitions=z.getValueOrUndefined(t.stackPartitions,ze.MINIMUM_VALUE),i.slicePartitions=z.getValueOrUndefined(t.slicePartitions,ze.MINIMUM_VALUE),i.subdivisions=z.getValueOrUndefined(t.subdivisions,ze.MINIMUM_VALUE),i.offsetAttribute=n!==et.NONE?pn.ALL:void 0};uu.prototype._onEntityPropertyChanged=fA;uu.DynamicGeometryUpdater=VW;function VW(e,t,n){yi.call(this,e,t,n),this._scene=e._scene,this._modelMatrix=new X,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 m,this._material={}}l(Object.create)&&(VW.prototype=Object.create(yi.prototype),VW.prototype.constructor=VW);VW.prototype.update=function(e){let t=this._entity,n=t.ellipsoid;if(!t.isShowing||!t.isAvailable(e)||!z.getValueOrDefault(n.show,e,!0)){l(this._primitive)&&(this._primitive.show=!1),l(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1);return}let i=z.getValueOrUndefined(n.radii,e,ett),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=z.getValueOrDefault(n.fill,e,!0),s=z.getValueOrDefault(n.outline,e,!1),a=z.getValueOrClonedDefault(n.outlineColor,e,U.BLACK,R4),c=dr.getValue(e,n.material??$et,this._material),d=z.getValueOrUndefined(n.innerRadii,e,ttt),u=z.getValueOrUndefined(n.minimumClock,e),h=z.getValueOrUndefined(n.maximumClock,e),p=z.getValueOrUndefined(n.minimumCone,e),g=z.getValueOrUndefined(n.maximumCone,e),f=z.getValueOrUndefined(n.stackPartitions,e),b=z.getValueOrUndefined(n.slicePartitions,e),x=z.getValueOrUndefined(n.subdivisions,e),I=z.getValueOrDefault(n.outlineWidth,e,1),_=z.getValueOrDefault(n.heightReference,e,et.NONE),E=_!==et.NONE?pn.ALL:void 0,S=this._scene.mode,R=S===re.SCENE3D&&_===et.NONE,G=this._options,B=this._geometryUpdater.shadowsProperty.getValue(e),F=this._geometryUpdater.distanceDisplayConditionProperty.getValue(e),P=z.getValueOrDefault(this._geometryUpdater.terrainOffsetProperty,e,S4,L4);if(!R||this._lastSceneMode!==S||!l(this._primitive)||G.stackPartitions!==f||G.slicePartitions!==b||l(d)&&!m.equals(G.innerRadii!==d)||G.minimumClock!==u||G.maximumClock!==h||G.minimumCone!==p||G.maximumCone!==g||G.subdivisions!==x||this._lastOutlineWidth!==I||G.offsetAttribute!==E){let T=this._primitives;T.removeAndDestroy(this._primitive),T.removeAndDestroy(this._outlinePrimitive),this._primitive=void 0,this._outlinePrimitive=void 0,this._lastSceneMode=S,this._lastOutlineWidth=I,G.stackPartitions=f,G.slicePartitions=b,G.subdivisions=x,G.offsetAttribute=E,G.radii=m.clone(R?ntt:i,G.radii),l(d)?R?G.innerRadii=m.fromElements(d.x/i.x,d.y/i.y,d.z/i.z,G.innerRadii):G.innerRadii=m.clone(d,G.innerRadii):G.innerRadii=void 0,G.minimumClock=u,G.maximumClock=h,G.minimumCone=p,G.maximumCone=g;let L=new Io({material:c,translucent:c.isTranslucent(),closed:!0});G.vertexFormat=L.vertexFormat;let V=this._geometryUpdater.createFillGeometryInstance(e,R,this._modelMatrix);this._primitive=T.add(new Nn({geometryInstances:V,appearance:L,asynchronous:!1,shadows:B}));let W=this._geometryUpdater.createOutlineGeometryInstance(e,R,this._modelMatrix);this._outlinePrimitive=T.add(new Nn({geometryInstances:W,appearance:new yn({flat:!0,translucent:W.attributes.color.value[3]!==255,renderState:{lineWidth:this._geometryUpdater._scene.clampLineWidth(I)}}),asynchronous:!1,shadows:B})),this._lastShow=r,this._lastOutlineShow=s,this._lastOutlineColor=U.clone(a,this._lastOutlineColor),this._lastDistanceDisplayCondition=F,this._lastOffset=m.clone(P,this._lastOffset)}else if(this._primitive.ready){let T=this._primitive,L=this._outlinePrimitive;T.show=!0,L.show=!0,T.appearance.material=c;let V=this._attributes;l(V)||(V=T.getGeometryInstanceAttributes(t),this._attributes=V),r!==this._lastShow&&(V.show=Vn.toValue(r,V.show),this._lastShow=r);let W=this._outlineAttributes;l(W)||(W=L.getGeometryInstanceAttributes(t),this._outlineAttributes=W),s!==this._lastOutlineShow&&(W.show=Vn.toValue(s,W.show),this._lastOutlineShow=s),U.equals(a,this._lastOutlineColor)||(W.color=tn.toValue(a,W.color),U.clone(a,this._lastOutlineColor)),Qt.equals(F,this._lastDistanceDisplayCondition)||(V.distanceDisplayCondition=jn.toValue(F,V.distanceDisplayCondition),W.distanceDisplayCondition=jn.toValue(F,W.distanceDisplayCondition),Qt.clone(F,this._lastDistanceDisplayCondition)),m.equals(P,this._lastOffset)||(V.offset=mo.toValue(P,V.offset),W.offset=mo.toValue(P,V.offset),m.clone(P,this._lastOffset))}R&&(i.x=Math.max(i.x,.001),i.y=Math.max(i.y,.001),i.z=Math.max(i.z,.001),o=X.multiplyByScale(o,i,o),this._primitive.modelMatrix=o,this._outlinePrimitive.modelMatrix=o)};var GW=uu;var Yui=y(C(),1);var fui=y(C(),1);function cS(e){e=e??Y.EMPTY_OBJECT;let t=e.vertexFormat??we.DEFAULT;this._vertexFormat=t,this._workerName="createPlaneGeometry"}cS.packedLength=we.packedLength;cS.pack=function(e,t,n){return n=n??0,we.pack(e._vertexFormat,t,n),t};var Gpe=new we,ott={vertexFormat:Gpe};cS.unpack=function(e,t,n){t=t??0;let i=we.unpack(e,t,Gpe);return l(n)?(n._vertexFormat=we.clone(i,n._vertexFormat),n):new cS(ott)};var G5=new m(-.5,-.5,0),Z5=new m(.5,.5,0);cS.createGeometry=function(e){let t=e._vertexFormat,n=new xn,i,o;if(t.position){if(o=new Float64Array(12),o[0]=G5.x,o[1]=G5.y,o[2]=0,o[3]=Z5.x,o[4]=G5.y,o[5]=0,o[6]=Z5.x,o[7]=Z5.y,o[8]=0,o[9]=G5.x,o[10]=Z5.y,o[11]=0,n.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:o}),t.normal){let r=new Float32Array(12);r[0]=0,r[1]=0,r[2]=1,r[3]=0,r[4]=0,r[5]=1,r[6]=0,r[7]=0,r[8]=1,r[9]=0,r[10]=0,r[11]=1,n.normal=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:r})}if(t.st){let r=new Float32Array(8);r[0]=0,r[1]=0,r[2]=1,r[3]=0,r[4]=1,r[5]=1,r[6]=0,r[7]=1,n.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:r})}if(t.tangent){let r=new Float32Array(12);r[0]=1,r[1]=0,r[2]=0,r[3]=1,r[4]=0,r[5]=0,r[6]=1,r[7]=0,r[8]=0,r[9]=1,r[10]=0,r[11]=0,n.tangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:r})}if(t.bitangent){let r=new Float32Array(12);r[0]=0,r[1]=1,r[2]=0,r[3]=0,r[4]=1,r[5]=0,r[6]=0,r[7]=1,r[8]=0,r[9]=0,r[10]=1,r[11]=0,n.bitangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:r})}i=new Uint16Array(6),i[0]=0,i[1]=1,i[2]=2,i[3]=0,i[4]=2,i[5]=3}return new pt({attributes:n,indices:i,primitiveType:We.TRIANGLES,boundingSphere:new ue(m.ZERO,Math.sqrt(2))})};var ZW=cS;var Eui=y(C(),1);function lS(){this._workerName="createPlaneOutlineGeometry"}lS.packedLength=0;lS.pack=function(e,t){return t};lS.unpack=function(e,t,n){return l(n)?n:new lS};var X0=new m(-.5,-.5,0),B5=new m(.5,.5,0);lS.createGeometry=function(){let e=new xn,t=new Uint16Array(8),n=new Float64Array(12);return n[0]=X0.x,n[1]=X0.y,n[2]=X0.z,n[3]=B5.x,n[4]=X0.y,n[5]=X0.z,n[6]=B5.x,n[7]=B5.y,n[8]=X0.z,n[9]=X0.x,n[10]=B5.y,n[11]=X0.z,e.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:n}),t[0]=0,t[1]=1,t[2]=1,t[3]=2,t[4]=2,t[5]=3,t[6]=3,t[7]=0,new pt({attributes:e,indices:t,primitiveType:We.LINES,boundingSphere:new ue(m.ZERO,Math.sqrt(2))})};var BW=lS;var rtt=new m,Zpe=new U;function stt(e){this.id=e,this.vertexFormat=void 0,this.plane=void 0,this.dimensions=void 0}function Sm(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new stt(e),geometryPropertyName:"plane",observedPropertyNames:["availability","position","orientation","plane"]}),this._onEntityPropertyChanged(e,"plane",e.plane,void 0)}l(Object.create)&&(Sm.prototype=Object.create(Ci.prototype),Sm.prototype.constructor=Sm);Sm.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=jn.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof qt){let g;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(g=this._materialProperty.color.getValue(e,Zpe)),l(g)||(g=U.WHITE),o=tn.fromColor(g),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};let c=t.plane,d=this._options,u=t.computeModelMatrix(e),h=z.getValueOrDefault(c.plane,e,d.plane),p=z.getValueOrUndefined(c.dimensions,e,d.dimensions);return d.plane=h,d.dimensions=p,u=V4(h,p,u,u),new wt({id:t,geometry:new ZW(this._options),modelMatrix:u,attributes:i})};Sm.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=z.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,Zpe),o=this._distanceDisplayConditionProperty.getValue(e),r=t.plane,s=this._options,a=t.computeModelMatrix(e),c=z.getValueOrDefault(r.plane,e,s.plane),d=z.getValueOrUndefined(r.dimensions,e,s.dimensions);return s.plane=c,s.dimensions=d,a=V4(c,d,a,a),new wt({id:t,geometry:new BW,modelMatrix:a,attributes:{show:new Vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:tn.fromColor(i),distanceDisplayCondition:jn.fromDistanceDisplayCondition(o)}})};Sm.prototype._isHidden=function(e,t){return!l(t.plane)||!l(t.dimensions)||!l(e.position)||Ci.prototype._isHidden.call(this,e,t)};Sm.prototype._getIsClosed=function(e){return!1};Sm.prototype._isDynamic=function(e,t){return!e.position.isConstant||!z.isConstant(e.orientation)||!t.plane.isConstant||!t.dimensions.isConstant||!z.isConstant(t.outlineWidth)};Sm.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof qt,i=this._options;i.vertexFormat=n?yn.VERTEX_FORMAT:Io.MaterialSupport.TEXTURED.vertexFormat,i.plane=t.plane.getValue(ze.MINIMUM_VALUE,i.plane),i.dimensions=t.dimensions.getValue(ze.MINIMUM_VALUE,i.dimensions)};Sm.DynamicGeometryUpdater=dS;function dS(e,t,n){yi.call(this,e,t,n)}l(Object.create)&&(dS.prototype=Object.create(yi.prototype),dS.prototype.constructor=dS);dS.prototype._isHidden=function(e,t,n){let i=this._options,o=z.getValueOrUndefined(e.position,n,rtt);return!l(o)||!l(i.plane)||!l(i.dimensions)||yi.prototype._isHidden.call(this,e,t,n)};dS.prototype._setOptions=function(e,t,n){let i=this._options;i.plane=z.getValueOrDefault(t.plane,n,i.plane),i.dimensions=z.getValueOrUndefined(t.dimensions,n,i.dimensions)};var att=new m,ctt=new m,ltt=new m,dtt=new m,utt=new $,mtt=new $,htt=new X;function V4(e,t,n,i){let o=e.normal,r=e.distance,s=m.multiplyByScalar(o,-r,ltt),a=m.clone(m.UNIT_Z,ctt);Z.equalsEpsilon(Math.abs(m.dot(a,o)),1,Z.EPSILON8)&&(a=m.clone(m.UNIT_Y,a));let c=m.cross(a,o,att);a=m.cross(o,c,a),m.normalize(c,c),m.normalize(a,a);let d=utt;$.setColumn(d,0,c,d),$.setColumn(d,1,a,d),$.setColumn(d,2,o,d);let u=m.fromElements(t.x,t.y,1,dtt),h=$.multiplyByScale(d,u,mtt),p=X.fromRotationTranslation(h,s,htt);return X.multiplyTransformation(n,p,i)}Sm.createPrimitiveMatrix=V4;var wW=Sm;var hhi=y(C(),1);var Ami=y(C(),1);var ftt=new m,ptt=new Ke,Att=new D,gtt=new D,btt=new m,ytt=new m,Ctt=new m,XW=new m,xtt=new m,Itt=new m,Bpe=new Pe,_tt=new $,Ett=new $,Ttt=new m;function Stt(e,t,n,i,o,r,s,a,c){let d=e.positions,u=_i.triangulate(e.positions2D,e.holes);u.length<3&&(u=[0,1,2]);let h=Me.createTypedArray(d.length,u.length);h.set(u);let p=_tt;if(i!==0){let A=Pe.fromAxisAngle(s,i,Bpe);if(p=$.fromQuaternion(A,p),t.tangent||t.bitangent){A=Pe.fromAxisAngle(s,-i,Bpe);let T=$.fromQuaternion(A,Ett);a=m.normalize($.multiplyByVector(T,a,a),a),t.bitangent&&(c=m.normalize(m.cross(s,a,c),c))}}else p=$.clone($.IDENTITY,p);let g=gtt;t.st&&(g.x=n.x,g.y=n.y);let f=d.length,b=f*3,x=new Float64Array(b),I=t.normal?new Float32Array(b):void 0,_=t.tangent?new Float32Array(b):void 0,E=t.bitangent?new Float32Array(b):void 0,S=t.st?new Float32Array(f*2):void 0,R=0,G=0,B=0,w=0,F=0;for(let A=0;A<f;A++){let T=d[A];if(x[R++]=T.x,x[R++]=T.y,x[R++]=T.z,t.st)if(l(o)&&o.positions.length===f)S[F++]=o.positions[A].x,S[F++]=o.positions[A].y;else{let L=$.multiplyByVector(p,T,ftt),V=r(L,Att);D.subtract(V,g,V);let W=Z.clamp(V.x/n.width,0,1),M=Z.clamp(V.y/n.height,0,1);S[F++]=W,S[F++]=M}t.normal&&(I[G++]=s.x,I[G++]=s.y,I[G++]=s.z),t.tangent&&(_[w++]=a.x,_[w++]=a.y,_[w++]=a.z),t.bitangent&&(E[B++]=c.x,E[B++]=c.y,E[B++]=c.z)}let P=new xn;return t.position&&(P.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:x})),t.normal&&(P.normal=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:I})),t.tangent&&(P.tangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:_})),t.bitangent&&(P.bitangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:E})),t.st&&(P.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:S})),new pt({attributes:P,indices:h,primitiveType:We.TRIANGLES})}function zx(e){e=e??Y.EMPTY_OBJECT;let t=e.polygonHierarchy,n=e.textureCoordinates,i=e.vertexFormat??we.DEFAULT;this._vertexFormat=we.clone(i),this._polygonHierarchy=t,this._stRotation=e.stRotation??0,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._workerName="createCoplanarPolygonGeometry",this._textureCoordinates=n,this.packedLength=ti.computeHierarchyPackedLength(t,m)+we.packedLength+ie.packedLength+(l(n)?ti.computeHierarchyPackedLength(n,D):1)+2}zx.fromPositions=function(e){e=e??Y.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions},vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid,textureCoordinates:e.textureCoordinates};return new zx(t)};zx.pack=function(e,t,n){return n=n??0,n=ti.packPolygonHierarchy(e._polygonHierarchy,t,n,m),ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,we.pack(e._vertexFormat,t,n),n+=we.packedLength,t[n++]=e._stRotation,l(e._textureCoordinates)?n=ti.packPolygonHierarchy(e._textureCoordinates,t,n,D):t[n++]=-1,t[n++]=e.packedLength,t};var Ltt=ie.clone(ie.UNIT_SPHERE),Rtt=new we,Vtt={polygonHierarchy:{}};zx.unpack=function(e,t,n){t=t??0;let i=ti.unpackPolygonHierarchy(e,t,m);t=i.startingIndex,delete i.startingIndex;let o=ie.unpack(e,t,Ltt);t+=ie.packedLength;let r=we.unpack(e,t,Rtt);t+=we.packedLength;let s=e[t++],a=e[t]===-1?void 0:ti.unpackPolygonHierarchy(e,t,D);l(a)?(t=a.startingIndex,delete a.startingIndex):t++;let c=e[t++];return l(n)||(n=new zx(Vtt)),n._polygonHierarchy=i,n._ellipsoid=ie.clone(o,n._ellipsoid),n._vertexFormat=we.clone(r,n._vertexFormat),n._stRotation=s,n._textureCoordinates=a,n.packedLength=c,n};zx.createGeometry=function(e){let t=e._vertexFormat,n=e._polygonHierarchy,i=e._stRotation,o=e._textureCoordinates,r=l(o),s=n.positions;if(s=Xo(s,m.equalsEpsilon,!0),s.length<3)return;let a=btt,c=ytt,d=Ctt,u=xtt,h=Itt;if(!sg.computeProjectTo2DArguments(s,XW,u,h))return;if(a=m.cross(u,h,a),a=m.normalize(a,a),!m.equalsEpsilon(XW,m.ZERO,Z.EPSILON6)){let F=e._ellipsoid.geodeticSurfaceNormal(XW,Ttt);m.dot(a,F)<0&&(a=m.negate(a,a),u=m.negate(u,u))}let g=sg.createProjectPointsTo2DFunction(XW,u,h),f=sg.createProjectPointTo2DFunction(XW,u,h);t.tangent&&(c=m.clone(u,c)),t.bitangent&&(d=m.clone(h,d));let b=ti.polygonsFromHierarchy(n,r,g,!1),x=b.hierarchy,I=b.polygons,_=function(F){return F},E=r?ti.polygonsFromHierarchy(o,!0,_,!1).polygons:void 0;if(x.length===0)return;s=x[0].outerRing;let S=ue.fromPoints(s),R=ti.computeBoundingRectangle(a,f,s,i,ptt),G=[];for(let F=0;F<I.length;F++){let P=new wt({geometry:Stt(I[F],t,R,i,r?E[F]:void 0,f,a,c,d)});G.push(P)}let B=Yn.combineInstances(G)[0];B.attributes.position.values=new Float64Array(B.attributes.position.values),B.indices=Me.createTypedArray(B.attributes.position.values.length/3,B.indices);let w=B.attributes;return t.position||delete w.position,new pt({attributes:w,indices:B.indices,primitiveType:B.primitiveType,boundingSphere:S})};var WW=zx;var Mmi=y(C(),1);var wpe=[],w5=[];function Gtt(e,t,n,i,o){let s=gs.fromPoints(t,e).projectPointsOntoPlane(t,wpe);_i.computeWindingOrder2D(s)===ws.CLOCKWISE&&(s.reverse(),t=t.slice().reverse());let c,d,u=t.length,h=0;if(i)for(c=new Float64Array(u*2*3),d=0;d<u;d++){let f=t[d],b=t[(d+1)%u];c[h++]=f.x,c[h++]=f.y,c[h++]=f.z,c[h++]=b.x,c[h++]=b.y,c[h++]=b.z}else{let f=0;if(o===dn.GEODESIC)for(d=0;d<u;d++)f+=ti.subdivideLineCount(t[d],t[(d+1)%u],n);else if(o===dn.RHUMB)for(d=0;d<u;d++)f+=ti.subdivideRhumbLineCount(e,t[d],t[(d+1)%u],n);for(c=new Float64Array(f*3),d=0;d<u;d++){let b;o===dn.GEODESIC?b=ti.subdivideLine(t[d],t[(d+1)%u],n,w5):o===dn.RHUMB&&(b=ti.subdivideRhumbLine(e,t[d],t[(d+1)%u],n,w5));let x=b.length;for(let I=0;I<x;++I)c[h++]=b[I]}}u=c.length/3;let p=u*2,g=Me.createTypedArray(u,p);for(h=0,d=0;d<u-1;d++)g[h++]=d,g[h++]=d+1;return g[h++]=u-1,g[h++]=0,new wt({geometry:new pt({attributes:new xn({position:new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:c})}),indices:g,primitiveType:We.LINES})})}function Ztt(e,t,n,i,o){let s=gs.fromPoints(t,e).projectPointsOntoPlane(t,wpe);_i.computeWindingOrder2D(s)===ws.CLOCKWISE&&(s.reverse(),t=t.slice().reverse());let c,d,u=t.length,h=new Array(u),p=0;if(i)for(c=new Float64Array(u*2*3*2),d=0;d<u;++d){h[d]=p/3;let x=t[d],I=t[(d+1)%u];c[p++]=x.x,c[p++]=x.y,c[p++]=x.z,c[p++]=I.x,c[p++]=I.y,c[p++]=I.z}else{let x=0;if(o===dn.GEODESIC)for(d=0;d<u;d++)x+=ti.subdivideLineCount(t[d],t[(d+1)%u],n);else if(o===dn.RHUMB)for(d=0;d<u;d++)x+=ti.subdivideRhumbLineCount(e,t[d],t[(d+1)%u],n);for(c=new Float64Array(x*3*2),d=0;d<u;++d){h[d]=p/3;let I;o===dn.GEODESIC?I=ti.subdivideLine(t[d],t[(d+1)%u],n,w5):o===dn.RHUMB&&(I=ti.subdivideRhumbLine(e,t[d],t[(d+1)%u],n,w5));let _=I.length;for(let E=0;E<_;++E)c[p++]=I[E]}}u=c.length/6;let g=h.length,f=(u*2+g)*2,b=Me.createTypedArray(u+g,f);for(p=0,d=0;d<u;++d)b[p++]=d,b[p++]=(d+1)%u,b[p++]=d+u,b[p++]=(d+1)%u+u;for(d=0;d<g;d++){let x=h[d];b[p++]=x,b[p++]=x+u}return new wt({geometry:new pt({attributes:new xn({position:new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:c})}),indices:b,primitiveType:We.LINES})})}function Kx(e){let t=e.polygonHierarchy,n=e.ellipsoid??ie.default,i=e.granularity??Z.RADIANS_PER_DEGREE,o=e.perPositionHeight??!1,r=o&&l(e.extrudedHeight),s=e.arcType??dn.GEODESIC,a=e.height??0,c=e.extrudedHeight??a;if(!r){let d=Math.max(a,c);c=Math.min(a,c),a=d}this._ellipsoid=ie.clone(n),this._granularity=i,this._height=a,this._extrudedHeight=c,this._arcType=s,this._polygonHierarchy=t,this._perPositionHeight=o,this._perPositionHeightExtrude=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createPolygonOutlineGeometry",this.packedLength=ti.computeHierarchyPackedLength(t,m)+ie.packedLength+8}Kx.pack=function(e,t,n){return n=n??0,n=ti.packPolygonHierarchy(e._polygonHierarchy,t,n,m),ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._granularity,t[n++]=e._perPositionHeightExtrude?1:0,t[n++]=e._perPositionHeight?1:0,t[n++]=e._arcType,t[n++]=e._offsetAttribute??-1,t[n]=e.packedLength,t};var Btt=ie.clone(ie.UNIT_SPHERE),wtt={polygonHierarchy:{}};Kx.unpack=function(e,t,n){t=t??0;let i=ti.unpackPolygonHierarchy(e,t,m);t=i.startingIndex,delete i.startingIndex;let o=ie.unpack(e,t,Btt);t+=ie.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++]===1,d=e[t++]===1,u=e[t++],h=e[t++],p=e[t];return l(n)||(n=new Kx(wtt)),n._polygonHierarchy=i,n._ellipsoid=ie.clone(o,n._ellipsoid),n._height=r,n._extrudedHeight=s,n._granularity=a,n._perPositionHeight=d,n._perPositionHeightExtrude=c,n._arcType=u,n._offsetAttribute=h===-1?void 0:h,n.packedLength=p,n};Kx.fromPositions=function(e){e=e??Y.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions},height:e.height,extrudedHeight:e.extrudedHeight,ellipsoid:e.ellipsoid,granularity:e.granularity,perPositionHeight:e.perPositionHeight,arcType:e.arcType,offsetAttribute:e.offsetAttribute};return new Kx(t)};Kx.createGeometry=function(e){let t=e._ellipsoid,n=e._granularity,i=e._polygonHierarchy,o=e._perPositionHeight,r=e._arcType,s=ti.polygonOutlinesFromHierarchy(i,!o,t);if(s.length===0)return;let a,c=[],d=Z.chordLength(n,t.maximumRadius),u=e._height,h=e._extrudedHeight,p=e._perPositionHeightExtrude||!Z.equalsEpsilon(u,h,0,Z.EPSILON2),g,f;if(p)for(f=0;f<s.length;f++){if(a=Ztt(t,s[f],d,o,r),a.geometry=ti.scaleToGeodeticHeightExtruded(a.geometry,u,h,t,o),l(e._offsetAttribute)){let I=a.geometry.attributes.position.values.length/3,_=new Uint8Array(I);e._offsetAttribute===pn.TOP?_=_.fill(1,0,I/2):(g=e._offsetAttribute===pn.NONE?0:1,_=_.fill(g)),a.geometry.attributes.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:_})}c.push(a)}else for(f=0;f<s.length;f++){if(a=Gtt(t,s[f],d,o,r),a.geometry.attributes.position.values=_i.scaleToGeodeticHeight(a.geometry.attributes.position.values,u,t,!o),l(e._offsetAttribute)){let I=a.geometry.attributes.position.values.length;g=e._offsetAttribute===pn.NONE?0:1;let _=new Uint8Array(I/3).fill(g);a.geometry.attributes.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:_})}c.push(a)}let b=Yn.combineInstances(c)[0],x=ue.fromVertices(b.attributes.position.values);return new pt({attributes:b.attributes,indices:b.indices,primitiveType:b.primitiveType,boundingSphere:x,offsetAttribute:e._offsetAttribute})};var FW=Kx;var Xpe="Entity polygons cannot have both height and perPositionHeight. height will be ignored",Wpe="heightReference is not supported for entity polygons with perPositionHeight. heightReference will be ignored",Fpe=new U,Ppe=m.ZERO,Mpe=new m,vpe=new le,Xtt=[],Wtt=new D;function Ftt(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 mu(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new Ftt(e),geometryPropertyName:"polygon",observedPropertyNames:["availability","polygon"]}),this._onEntityPropertyChanged(e,"polygon",e.polygon,void 0)}l(Object.create)&&(mu.prototype=Object.create(ii.prototype),mu.prototype.constructor=mu);mu.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:jn.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof qt){let s;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(s=this._materialProperty.color.getValue(e,Fpe)),l(s)||(s=U.WHITE),o.color=tn.fromColor(s)}l(i.offsetAttribute)&&(o.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,Ppe,Mpe)));let r;return i.perPositionHeight&&!l(i.extrudedHeight)?r=new WW(i):r=new VA(i),new wt({id:t,geometry:r,attributes:o})};mu.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=this._options,o=z.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,Fpe),r=this._distanceDisplayConditionProperty.getValue(e),s={show:new Vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:tn.fromColor(o),distanceDisplayCondition:jn.fromDistanceDisplayCondition(r),offset:void 0};l(i.offsetAttribute)&&(s.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,Ppe,Mpe)));let a;return i.perPositionHeight&&!l(i.extrudedHeight)?a=new bm(i):a=new FW(i),new wt({id:t,geometry:a,attributes:s})};mu.prototype._computeCenter=function(e,t){let n=z.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,Xtt),a=s.length,c=0,d=a-1,u=new D;for(let p=0;p<a;d=p++){let g=s[p],f=s[d],b=g.x*f.y-f.x*g.y,x=D.add(g,f,Wtt);x=D.multiplyByScalar(x,b,x),u=D.add(u,x,u),c+=b}let h=1/(c*3);return u=D.multiplyByScalar(u,h,u),r.projectPointOntoEllipsoid(u,t)};mu.prototype._isHidden=function(e,t){return!l(t.hierarchy)||Ci.prototype._isHidden.call(this,e,t)};mu.prototype._isOnTerrain=function(e,t){let n=ii.prototype._isOnTerrain.call(this,e,t),i=t.perPositionHeight,o=l(i)&&(i.isConstant?i.getValue(ze.MINIMUM_VALUE):!0);return n&&!o};mu.prototype._isDynamic=function(e,t){return!t.hierarchy.isConstant||!z.isConstant(t.height)||!z.isConstant(t.extrudedHeight)||!z.isConstant(t.granularity)||!z.isConstant(t.stRotation)||!z.isConstant(t.textureCoordinates)||!z.isConstant(t.outlineWidth)||!z.isConstant(t.perPositionHeight)||!z.isConstant(t.closeTop)||!z.isConstant(t.closeBottom)||!z.isConstant(t.zIndex)||!z.isConstant(t.arcType)||this._onTerrain&&!z.isConstant(this._materialProperty)&&!(this._materialProperty instanceof qt)};mu.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof qt,i=this._options;i.vertexFormat=n?yn.VERTEX_FORMAT:Io.MaterialSupport.TEXTURED.vertexFormat;let o=t.hierarchy.getValue(ze.MINIMUM_VALUE),r=z.getValueOrUndefined(t.height,ze.MINIMUM_VALUE),s=z.getValueOrDefault(t.heightReference,ze.MINIMUM_VALUE,et.NONE),a=z.getValueOrUndefined(t.extrudedHeight,ze.MINIMUM_VALUE),c=z.getValueOrDefault(t.extrudedHeightReference,ze.MINIMUM_VALUE,et.NONE),d=z.getValueOrDefault(t.perPositionHeight,ze.MINIMUM_VALUE,!1);r=ii.getGeometryHeight(r,s);let u;if(d?(l(r)&&(r=void 0,xt(Xpe)),s!==et.NONE&&d&&(r=void 0,xt(Wpe))):(l(a)&&!l(r)&&(r=0),u=ii.computeGeometryOffsetAttribute(r,s,a,c)),i.polygonHierarchy=o,i.granularity=z.getValueOrUndefined(t.granularity,ze.MINIMUM_VALUE),i.stRotation=z.getValueOrUndefined(t.stRotation,ze.MINIMUM_VALUE),i.perPositionHeight=d,i.closeTop=z.getValueOrDefault(t.closeTop,ze.MINIMUM_VALUE,!0),i.closeBottom=z.getValueOrDefault(t.closeBottom,ze.MINIMUM_VALUE,!0),i.offsetAttribute=u,i.height=r,i.arcType=z.getValueOrDefault(t.arcType,ze.MINIMUM_VALUE,dn.GEODESIC),i.textureCoordinates=z.getValueOrUndefined(t.textureCoordinates,ze.MINIMUM_VALUE),a=ii.getGeometryExtrudedHeight(a,c),a===ii.CLAMP_TO_GROUND){let h=VA.computeRectangleFromPositions(i.polygonHierarchy.positions,i.ellipsoid,i.arcType,vpe);a=Si.getMinimumMaximumHeights(h).minimumTerrainHeight}i.extrudedHeight=a};mu.prototype._getIsClosed=function(e){let t=e.height,n=e.extrudedHeight,i=l(n)&&n!==t;return!e.perPositionHeight&&(!i&&t===0||i&&e.closeTop&&e.closeBottom)};mu.DynamicGeometryUpdater=uS;function uS(e,t,n){yi.call(this,e,t,n)}l(Object.create)&&(uS.prototype=Object.create(yi.prototype),uS.prototype.constructor=uS);uS.prototype._isHidden=function(e,t,n){return!l(this._options.polygonHierarchy)||yi.prototype._isHidden.call(this,e,t,n)};uS.prototype._setOptions=function(e,t,n){let i=this._options;i.polygonHierarchy=z.getValueOrUndefined(t.hierarchy,n);let o=z.getValueOrUndefined(t.height,n),r=z.getValueOrDefault(t.heightReference,n,et.NONE),s=z.getValueOrDefault(t.extrudedHeightReference,n,et.NONE),a=z.getValueOrUndefined(t.extrudedHeight,n),c=z.getValueOrUndefined(t.perPositionHeight,n);o=ii.getGeometryHeight(o,s);let d;if(c?(l(o)&&(o=void 0,xt(Xpe)),r!==et.NONE&&c&&(o=void 0,xt(Wpe))):(l(a)&&!l(o)&&(o=0),d=ii.computeGeometryOffsetAttribute(o,r,a,s)),i.granularity=z.getValueOrUndefined(t.granularity,n),i.stRotation=z.getValueOrUndefined(t.stRotation,n),i.textureCoordinates=z.getValueOrUndefined(t.textureCoordinates,n),i.perPositionHeight=z.getValueOrUndefined(t.perPositionHeight,n),i.closeTop=z.getValueOrDefault(t.closeTop,n,!0),i.closeBottom=z.getValueOrDefault(t.closeBottom,n,!0),i.offsetAttribute=d,i.height=o,i.arcType=z.getValueOrDefault(t.arcType,n,dn.GEODESIC),a=ii.getGeometryExtrudedHeight(a,s),a===ii.CLAMP_TO_GROUND){let u=VA.computeRectangleFromPositions(i.polygonHierarchy.positions,i.ellipsoid,i.arcType,vpe);a=Si.getMinimumMaximumHeights(u).minimumTerrainHeight}i.extrudedHeight=a};var PW=mu;var xfi=y(C(),1);var Phi=y(C(),1);function Ptt(e,t,n,i){let o=new xn;i.position&&(o.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:e}));let r=t.length,s=e.length/3,a=(s-r*2)/(r*2),c=_i.triangulate(t),d=(a-1)*r*6+c.length*2,u=Me.createTypedArray(s,d),h,p,g,f,b,x,I=r*2,_=0;for(h=0;h<a-1;h++){for(p=0;p<r-1;p++)g=p*2+h*r*2,x=g+I,f=g+1,b=f+I,u[_++]=f,u[_++]=g,u[_++]=b,u[_++]=b,u[_++]=g,u[_++]=x;g=r*2-2+h*r*2,f=g+1,b=f+I,x=g+I,u[_++]=f,u[_++]=g,u[_++]=b,u[_++]=b,u[_++]=g,u[_++]=x}if(i.st||i.tangent||i.bitangent){let R=new Float32Array(s*2),G=1/(a-1),B=1/n.height,w=n.height/2,F,P,A=0;for(h=0;h<a;h++){for(F=h*G,P=B*(t[0].y+w),R[A++]=F,R[A++]=P,p=1;p<r;p++)P=B*(t[p].y+w),R[A++]=F,R[A++]=P,R[A++]=F,R[A++]=P;P=B*(t[0].y+w),R[A++]=F,R[A++]=P}for(p=0;p<r;p++)F=0,P=B*(t[p].y+w),R[A++]=F,R[A++]=P;for(p=0;p<r;p++)F=(a-1)*G,P=B*(t[p].y+w),R[A++]=F,R[A++]=P;o.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:new Float32Array(R)})}let E=s-r*2;for(h=0;h<c.length;h+=3){let R=c[h]+E,G=c[h+1]+E,B=c[h+2]+E;u[_++]=R,u[_++]=G,u[_++]=B,u[_++]=B+r,u[_++]=G+r,u[_++]=R+r}let S=new pt({attributes:o,indices:u,boundingSphere:ue.fromVertices(e),primitiveType:We.TRIANGLES});if(i.normal&&(S=Yn.computeNormal(S)),i.tangent||i.bitangent){try{S=Yn.computeTangentAndBitangent(S)}catch{xt("polyline-volume-tangent-bitangent","Unable to compute tangents and bitangents for polyline volume geometry")}i.tangent||(S.attributes.tangent=void 0),i.bitangent||(S.attributes.bitangent=void 0),i.st||(S.attributes.st=void 0)}return S}function vW(e){e=e??Y.EMPTY_OBJECT;let t=e.polylinePositions,n=e.shapePositions;this._positions=t,this._shape=n,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._cornerType=e.cornerType??Hi.ROUNDED,this._vertexFormat=we.clone(e.vertexFormat??we.DEFAULT),this._granularity=e.granularity??Z.RADIANS_PER_DEGREE,this._workerName="createPolylineVolumeGeometry";let i=1+t.length*m.packedLength;i+=1+n.length*D.packedLength,this.packedLength=i+ie.packedLength+we.packedLength+2}vW.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._shape;for(r=s.length,t[n++]=r,i=0;i<r;++i,n+=D.packedLength)D.pack(s[i],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,we.pack(e._vertexFormat,t,n),n+=we.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var Npe=ie.clone(ie.UNIT_SPHERE),Dpe=new we,MW={polylinePositions:void 0,shapePositions:void 0,ellipsoid:Npe,vertexFormat:Dpe,cornerType:void 0,granularity:void 0};vW.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=new Array(o);for(i=0;i<o;++i,t+=D.packedLength)s[i]=D.unpack(e,t);let a=ie.unpack(e,t,Npe);t+=ie.packedLength;let c=we.unpack(e,t,Dpe);t+=we.packedLength;let d=e[t++],u=e[t];return l(n)?(n._positions=r,n._shape=s,n._ellipsoid=ie.clone(a,n._ellipsoid),n._vertexFormat=we.clone(c,n._vertexFormat),n._cornerType=d,n._granularity=u,n):(MW.polylinePositions=r,MW.shapePositions=s,MW.cornerType=d,MW.granularity=u,new vW(MW))};var Mtt=new Ke;vW.createGeometry=function(e){let t=e._positions,n=Xo(t,m.equalsEpsilon),i=e._shape;if(i=Dh.removeDuplicatesFromShape(i),n.length<2||i.length<3)return;_i.computeWindingOrder2D(i)===ws.CLOCKWISE&&i.reverse();let o=Ke.fromPoints(i,Mtt),r=Dh.computePositions(n,i,o,e,!0);return Ptt(r,i,o,e._vertexFormat)};var NW=vW;var ofi=y(C(),1);function vtt(e,t){let n=new xn;n.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:e});let i=t.length,o=n.position.values.length/3,s=e.length/3/i,a=Me.createTypedArray(o,2*i*(s+1)),c,d,u=0;c=0;let h=c*i;for(d=0;d<i-1;d++)a[u++]=d+h,a[u++]=d+h+1;for(a[u++]=i-1+h,a[u++]=h,c=s-1,h=c*i,d=0;d<i-1;d++)a[u++]=d+h,a[u++]=d+h+1;for(a[u++]=i-1+h,a[u++]=h,c=0;c<s-1;c++){let g=i*c,f=g+i;for(d=0;d<i;d++)a[u++]=d+g,a[u++]=d+f}return new pt({attributes:n,indices:Me.createTypedArray(o,a),boundingSphere:ue.fromVertices(e),primitiveType:We.LINES})}function QW(e){e=e??Y.EMPTY_OBJECT;let t=e.polylinePositions,n=e.shapePositions;this._positions=t,this._shape=n,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._cornerType=e.cornerType??Hi.ROUNDED,this._granularity=e.granularity??Z.RADIANS_PER_DEGREE,this._workerName="createPolylineVolumeOutlineGeometry";let i=1+t.length*m.packedLength;i+=1+n.length*D.packedLength,this.packedLength=i+ie.packedLength+2}QW.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._shape;for(r=s.length,t[n++]=r,i=0;i<r;++i,n+=D.packedLength)D.pack(s[i],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var Qpe=ie.clone(ie.UNIT_SPHERE),DW={polylinePositions:void 0,shapePositions:void 0,ellipsoid:Qpe,height:void 0,cornerType:void 0,granularity:void 0};QW.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=new Array(o);for(i=0;i<o;++i,t+=D.packedLength)s[i]=D.unpack(e,t);let a=ie.unpack(e,t,Qpe);t+=ie.packedLength;let c=e[t++],d=e[t];return l(n)?(n._positions=r,n._shape=s,n._ellipsoid=ie.clone(a,n._ellipsoid),n._cornerType=c,n._granularity=d,n):(DW.polylinePositions=r,DW.shapePositions=s,DW.cornerType=c,DW.granularity=d,new QW(DW))};var Ntt=new Ke;QW.createGeometry=function(e){let t=e._positions,n=Xo(t,m.equalsEpsilon),i=e._shape;if(i=Dh.removeDuplicatesFromShape(i),n.length<2||i.length<3)return;_i.computeWindingOrder2D(i)===ws.CLOCKWISE&&i.reverse();let o=Ke.fromPoints(i,Ntt),r=Dh.computePositions(n,i,o,e,!1);return vtt(r,i)};var UW=QW;var Upe=new U;function Dtt(e){this.id=e,this.vertexFormat=void 0,this.polylinePositions=void 0,this.shapePositions=void 0,this.cornerType=void 0,this.granularity=void 0}function cp(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new Dtt(e),geometryPropertyName:"polylineVolume",observedPropertyNames:["availability","polylineVolume"]}),this._onEntityPropertyChanged(e,"polylineVolume",e.polylineVolume,void 0)}l(Object.create)&&(cp.prototype=Object.create(Ci.prototype),cp.prototype.constructor=cp);cp.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=jn.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof qt){let c;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(c=this._materialProperty.color.getValue(e,Upe)),l(c)||(c=U.WHITE),o=tn.fromColor(c),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};return new wt({id:t,geometry:new NW(this._options),attributes:i})};cp.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=z.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,Upe),o=this._distanceDisplayConditionProperty.getValue(e);return new wt({id:t,geometry:new UW(this._options),attributes:{show:new Vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:tn.fromColor(i),distanceDisplayCondition:jn.fromDistanceDisplayCondition(o)}})};cp.prototype._isHidden=function(e,t){return!l(t.positions)||!l(t.shape)||Ci.prototype._isHidden.call(this,e,t)};cp.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!t.shape.isConstant||!z.isConstant(t.granularity)||!z.isConstant(t.outlineWidth)||!z.isConstant(t.cornerType)};cp.prototype._setStaticOptions=function(e,t){let n=t.granularity,i=t.cornerType,o=this._options,r=this._materialProperty instanceof qt;o.vertexFormat=r?yn.VERTEX_FORMAT:Io.MaterialSupport.TEXTURED.vertexFormat,o.polylinePositions=t.positions.getValue(ze.MINIMUM_VALUE,o.polylinePositions),o.shapePositions=t.shape.getValue(ze.MINIMUM_VALUE,o.shape),o.granularity=l(n)?n.getValue(ze.MINIMUM_VALUE):void 0,o.cornerType=l(i)?i.getValue(ze.MINIMUM_VALUE):void 0};cp.DynamicGeometryUpdater=mS;function mS(e,t,n){yi.call(this,e,t,n)}l(Object.create)&&(mS.prototype=Object.create(yi.prototype),mS.prototype.constructor=mS);mS.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.polylinePositions)||!l(i.shapePositions)||yi.prototype._isHidden.call(this,e,t,n)};mS.prototype._setOptions=function(e,t,n){let i=this._options;i.polylinePositions=z.getValueOrUndefined(t.positions,n,i.polylinePositions),i.shapePositions=z.getValueOrUndefined(t.shape,n),i.granularity=z.getValueOrUndefined(t.granularity,n),i.cornerType=z.getValueOrUndefined(t.cornerType,n)};var kW=cp;var bpi=y(C(),1);var Hfi=y(C(),1);var G4=new m,Ope=new m,Hpe=new m,zpe=new m,Kpe=new le,Qtt=new D,Utt=new ue,ktt=new ue;function Jpe(e,t){let n=new pt({attributes:new xn,primitiveType:We.TRIANGLES});return n.attributes.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:t.positions}),e.normal&&(n.attributes.normal=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:t.normals})),e.tangent&&(n.attributes.tangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:t.tangents})),e.bitangent&&(n.attributes.bitangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:t.bitangents})),n}function Ytt(e,t,n,i){let o=e.length,r=t.normal?new Float32Array(o):void 0,s=t.tangent?new Float32Array(o):void 0,a=t.bitangent?new Float32Array(o):void 0,c=0,d=zpe,u=Hpe,h=Ope;if(t.normal||t.tangent||t.bitangent)for(let p=0;p<o;p+=3){let g=m.fromArray(e,p,G4),f=c+1,b=c+2;h=n.geodeticSurfaceNormal(g,h),(t.tangent||t.bitangent)&&(m.cross(m.UNIT_Z,h,u),$.multiplyByVector(i,u,u),m.normalize(u,u),t.bitangent&&m.normalize(m.cross(h,u,d),d)),t.normal&&(r[c]=h.x,r[f]=h.y,r[b]=h.z),t.tangent&&(s[c]=u.x,s[f]=u.y,s[b]=u.z),t.bitangent&&(a[c]=d.x,a[f]=d.y,a[b]=d.z),c+=3}return Jpe(t,{positions:e,normals:r,tangents:s,bitangents:a})}var Z4=new m,jpe=new m;function Ott(e,t,n){let i=e.length,o=t.normal?new Float32Array(i):void 0,r=t.tangent?new Float32Array(i):void 0,s=t.bitangent?new Float32Array(i):void 0,a=0,c=0,d=0,u=!0,h=zpe,p=Hpe,g=Ope;if(t.normal||t.tangent||t.bitangent)for(let f=0;f<i;f+=6){let b=m.fromArray(e,f,G4),x=m.fromArray(e,(f+6)%i,Z4);if(u){let I=m.fromArray(e,(f+3)%i,jpe);m.subtract(x,b,x),m.subtract(I,b,I),g=m.normalize(m.cross(I,x,g),g),u=!1}m.equalsEpsilon(x,b,Z.EPSILON10)&&(u=!0),(t.tangent||t.bitangent)&&(h=n.geodeticSurfaceNormal(b,h),t.tangent&&(p=m.normalize(m.cross(h,g,p),p))),t.normal&&(o[a++]=g.x,o[a++]=g.y,o[a++]=g.z,o[a++]=g.x,o[a++]=g.y,o[a++]=g.z),t.tangent&&(r[c++]=p.x,r[c++]=p.y,r[c++]=p.z,r[c++]=p.x,r[c++]=p.y,r[c++]=p.z),t.bitangent&&(s[d++]=h.x,s[d++]=h.y,s[d++]=h.z,s[d++]=h.x,s[d++]=h.y,s[d++]=h.z)}return Jpe(t,{positions:e,normals:o,tangents:r,bitangents:s})}function qpe(e,t){let n=e._vertexFormat,i=e._ellipsoid,o=t.height,r=t.width,s=t.northCap,a=t.southCap,c=0,d=o,u=o,h=0;s&&(c=1,u-=1,h+=1),a&&(d-=1,u-=1,h+=1),h+=r*u;let p=n.position?new Float64Array(h*3):void 0,g=n.st?new Float32Array(h*2):void 0,f=0,b=0,x=G4,I=Qtt,_=Number.MAX_VALUE,E=Number.MAX_VALUE,S=-Number.MAX_VALUE,R=-Number.MAX_VALUE;for(let T=c;T<d;++T)for(let L=0;L<r;++L)js.computePosition(t,i,n.st,T,L,x,I),p[f++]=x.x,p[f++]=x.y,p[f++]=x.z,n.st&&(g[b++]=I.x,g[b++]=I.y,_=Math.min(_,I.x),E=Math.min(E,I.y),S=Math.max(S,I.x),R=Math.max(R,I.y));if(s&&(js.computePosition(t,i,n.st,0,0,x,I),p[f++]=x.x,p[f++]=x.y,p[f++]=x.z,n.st&&(g[b++]=I.x,g[b++]=I.y,_=I.x,E=I.y,S=I.x,R=I.y)),a&&(js.computePosition(t,i,n.st,o-1,0,x,I),p[f++]=x.x,p[f++]=x.y,p[f]=x.z,n.st&&(g[b++]=I.x,g[b]=I.y,_=Math.min(_,I.x),E=Math.min(E,I.y),S=Math.max(S,I.x),R=Math.max(R,I.y))),n.st&&(_<0||E<0||S>1||R>1))for(let T=0;T<g.length;T+=2)g[T]=(g[T]-_)/(S-_),g[T+1]=(g[T+1]-E)/(R-E);let G=Ytt(p,n,i,t.tangentRotationMatrix),B=6*(r-1)*(u-1);s&&(B+=3*(r-1)),a&&(B+=3*(r-1));let w=Me.createTypedArray(h,B),F=0,P=0,A;for(A=0;A<u-1;++A){for(let T=0;T<r-1;++T){let L=F,V=L+r,W=V+1,M=L+1;w[P++]=L,w[P++]=V,w[P++]=M,w[P++]=M,w[P++]=V,w[P++]=W,++F}++F}if(s||a){let T=h-1,L=h-1;s&&a&&(T=h-2);let V,W;if(F=0,s)for(A=0;A<r-1;A++)V=F,W=V+1,w[P++]=T,w[P++]=V,w[P++]=W,++F;if(a)for(F=(u-1)*r,A=0;A<r-1;A++)V=F,W=V+1,w[P++]=V,w[P++]=L,w[P++]=W,++F}return G.indices=w,n.st&&(G.attributes.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:g})),G}function hS(e,t,n,i,o){return e[t++]=i[n],e[t++]=i[n+1],e[t++]=i[n+2],e[t++]=o[n],e[t++]=o[n+1],e[t]=o[n+2],e}function fS(e,t,n,i){return e[t++]=i[n],e[t++]=i[n+1],e[t++]=i[n],e[t]=i[n+1],e}var B4=new we;function Htt(e,t){let n=e._shadowVolume,i=e._offsetAttribute,o=e._vertexFormat,r=e._extrudedHeight,s=e._surfaceHeight,a=e._ellipsoid,c=t.height,d=t.width,u;if(n){let rt=we.clone(o,B4);rt.normal=!0,e._vertexFormat=rt}let h=qpe(e,t);n&&(e._vertexFormat=o);let p=_i.scaleToGeodeticHeight(h.attributes.position.values,s,a,!1);p=new Float64Array(p);let g=p.length,f=g*2,b=new Float64Array(f);b.set(p);let x=_i.scaleToGeodeticHeight(h.attributes.position.values,r,a);b.set(x,g),h.attributes.position.values=b;let I=o.normal?new Float32Array(f):void 0,_=o.tangent?new Float32Array(f):void 0,E=o.bitangent?new Float32Array(f):void 0,S=o.st?new Float32Array(f/3*2):void 0,R,G;if(o.normal){for(G=h.attributes.normal.values,I.set(G),u=0;u<g;u++)G[u]=-G[u];I.set(G,g),h.attributes.normal.values=I}if(n){G=h.attributes.normal.values,o.normal||(h.attributes.normal=void 0);let rt=new Float32Array(f);for(u=0;u<g;u++)G[u]=-G[u];rt.set(G,g),h.attributes.extrudeDirection=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:rt})}let B,w=l(i);if(w){let rt=g/3*2,rn=new Uint8Array(rt);i===pn.TOP?rn=rn.fill(1,0,rt/2):(B=i===pn.NONE?0:1,rn=rn.fill(B)),h.attributes.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:rn})}if(o.tangent){let rt=h.attributes.tangent.values;for(_.set(rt),u=0;u<g;u++)rt[u]=-rt[u];_.set(rt,g),h.attributes.tangent.values=_}if(o.bitangent){let rt=h.attributes.bitangent.values;E.set(rt),E.set(rt,g),h.attributes.bitangent.values=E}o.st&&(R=h.attributes.st.values,S.set(R),S.set(R,g/3*2),h.attributes.st.values=S);let F=h.indices,P=F.length,A=g/3,T=Me.createTypedArray(f/3,P*2);for(T.set(F),u=0;u<P;u+=3)T[u+P]=F[u+2]+A,T[u+1+P]=F[u+1]+A,T[u+2+P]=F[u]+A;h.indices=T;let L=t.northCap,V=t.southCap,W=c,M=2,Q=0,N=4,k=4;L&&(M-=1,W-=1,Q+=1,N-=2,k-=1),V&&(M-=1,W-=1,Q+=1,N-=2,k-=1),Q+=M*d+2*W-N;let v=(Q+k)*2,O=new Float64Array(v*3),H=n?new Float32Array(v*3):void 0,ee=w?new Uint8Array(v):void 0,K=o.st?new Float32Array(v*2):void 0,te=i===pn.TOP;w&&!te&&(B=i===pn.ALL?1:0,ee=ee.fill(B));let q=0,pe=0,ye=0,he=0,xe=d*W,Te;for(u=0;u<xe;u+=d)Te=u*3,O=hS(O,q,Te,p,x),q+=6,o.st&&(K=fS(K,pe,u*2,R),pe+=4),n&&(ye+=3,H[ye++]=G[Te],H[ye++]=G[Te+1],H[ye++]=G[Te+2]),te&&(ee[he++]=1,he+=1);if(V){let rt=L?xe+1:xe;for(Te=rt*3,u=0;u<2;u++)O=hS(O,q,Te,p,x),q+=6,o.st&&(K=fS(K,pe,rt*2,R),pe+=4),n&&(ye+=3,H[ye++]=G[Te],H[ye++]=G[Te+1],H[ye++]=G[Te+2]),te&&(ee[he++]=1,he+=1)}else for(u=xe-d;u<xe;u++)Te=u*3,O=hS(O,q,Te,p,x),q+=6,o.st&&(K=fS(K,pe,u*2,R),pe+=4),n&&(ye+=3,H[ye++]=G[Te],H[ye++]=G[Te+1],H[ye++]=G[Te+2]),te&&(ee[he++]=1,he+=1);for(u=xe-1;u>0;u-=d)Te=u*3,O=hS(O,q,Te,p,x),q+=6,o.st&&(K=fS(K,pe,u*2,R),pe+=4),n&&(ye+=3,H[ye++]=G[Te],H[ye++]=G[Te+1],H[ye++]=G[Te+2]),te&&(ee[he++]=1,he+=1);if(L){let rt=xe;for(Te=rt*3,u=0;u<2;u++)O=hS(O,q,Te,p,x),q+=6,o.st&&(K=fS(K,pe,rt*2,R),pe+=4),n&&(ye+=3,H[ye++]=G[Te],H[ye++]=G[Te+1],H[ye++]=G[Te+2]),te&&(ee[he++]=1,he+=1)}else for(u=d-1;u>=0;u--)Te=u*3,O=hS(O,q,Te,p,x),q+=6,o.st&&(K=fS(K,pe,u*2,R),pe+=4),n&&(ye+=3,H[ye++]=G[Te],H[ye++]=G[Te+1],H[ye++]=G[Te+2]),te&&(ee[he++]=1,he+=1);let Be=Ott(O,o,a);o.st&&(Be.attributes.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:K})),n&&(Be.attributes.extrudeDirection=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:H})),w&&(Be.attributes.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:ee}));let Le=Me.createTypedArray(v,Q*6),De,Ue,je,it;g=O.length/3;let nn=0;for(u=0;u<g-1;u+=2){De=u,it=(De+2)%g;let rt=m.fromArray(O,De*3,Z4),rn=m.fromArray(O,it*3,jpe);m.equalsEpsilon(rt,rn,Z.EPSILON10)||(Ue=(De+1)%g,je=(Ue+2)%g,Le[nn++]=De,Le[nn++]=Ue,Le[nn++]=it,Le[nn++]=it,Le[nn++]=Ue,Le[nn++]=je)}return Be.indices=Le,Be=Yn.combineInstances([new wt({geometry:h}),new wt({geometry:Be})]),Be[0]}var ztt=[new m,new m,new m,new m],$pe=new ge,Ktt=new ge;function w4(e,t,n,i,o){if(n===0)return le.clone(e,o);let r=js.computeOptions(e,t,n,0,Kpe,$pe),s=r.height,a=r.width,c=ztt;return js.computePosition(r,i,!1,0,0,c[0]),js.computePosition(r,i,!1,0,a-1,c[1]),js.computePosition(r,i,!1,s-1,0,c[2]),js.computePosition(r,i,!1,s-1,a-1,c[3]),le.fromCartesianArray(c,i,o)}function lp(e){e=e??Y.EMPTY_OBJECT;let t=e.rectangle,n=e.height??0,i=e.extrudedHeight??n;this._rectangle=le.clone(t),this._granularity=e.granularity??Z.RADIANS_PER_DEGREE,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._surfaceHeight=Math.max(n,i),this._rotation=e.rotation??0,this._stRotation=e.stRotation??0,this._vertexFormat=we.clone(e.vertexFormat??we.DEFAULT),this._extrudedHeight=Math.min(n,i),this._shadowVolume=e.shadowVolume??!1,this._workerName="createRectangleGeometry",this._offsetAttribute=e.offsetAttribute,this._rotatedRectangle=void 0,this._textureCoordinateRotationPoints=void 0}lp.packedLength=le.packedLength+ie.packedLength+we.packedLength+7;lp.pack=function(e,t,n){return n=n??0,le.pack(e._rectangle,t,n),n+=le.packedLength,ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,we.pack(e._vertexFormat,t,n),n+=we.packedLength,t[n++]=e._granularity,t[n++]=e._surfaceHeight,t[n++]=e._rotation,t[n++]=e._stRotation,t[n++]=e._extrudedHeight,t[n++]=e._shadowVolume?1:0,t[n]=e._offsetAttribute??-1,t};var eAe=new le,tAe=ie.clone(ie.UNIT_SPHERE),W0={rectangle:eAe,ellipsoid:tAe,vertexFormat:B4,granularity:void 0,height:void 0,rotation:void 0,stRotation:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};lp.unpack=function(e,t,n){t=t??0;let i=le.unpack(e,t,eAe);t+=le.packedLength;let o=ie.unpack(e,t,tAe);t+=ie.packedLength;let r=we.unpack(e,t,B4);t+=we.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++]===1,p=e[t];return l(n)?(n._rectangle=le.clone(i,n._rectangle),n._ellipsoid=ie.clone(o,n._ellipsoid),n._vertexFormat=we.clone(r,n._vertexFormat),n._granularity=s,n._surfaceHeight=a,n._rotation=c,n._stRotation=d,n._extrudedHeight=u,n._shadowVolume=h,n._offsetAttribute=p===-1?void 0:p,n):(W0.granularity=s,W0.height=a,W0.rotation=c,W0.stRotation=d,W0.extrudedHeight=u,W0.shadowVolume=h,W0.offsetAttribute=p===-1?void 0:p,new lp(W0))};lp.computeRectangle=function(e,t){e=e??Y.EMPTY_OBJECT;let n=e.rectangle,i=e.granularity??Z.RADIANS_PER_DEGREE,o=e.ellipsoid??ie.default,r=e.rotation??0;return w4(n,i,r,o,t)};var Jtt=new $,kpe=new Pe,jtt=new ge;lp.createGeometry=function(e){if(Z.equalsEpsilon(e._rectangle.north,e._rectangle.south,Z.EPSILON10)||Z.equalsEpsilon(e._rectangle.east,e._rectangle.west,Z.EPSILON10))return;let t=e._rectangle,n=e._ellipsoid,i=e._rotation,o=e._stRotation,r=e._vertexFormat,s=js.computeOptions(t,e._granularity,i,o,Kpe,$pe,Ktt),a=Jtt;if(o!==0||i!==0){let g=le.center(t,jtt),f=n.geodeticSurfaceNormalCartographic(g,Z4);Pe.fromAxisAngle(f,-o,kpe),$.fromQuaternion(kpe,a)}else $.clone($.IDENTITY,a);let c=e._surfaceHeight,d=e._extrudedHeight,u=!Z.equalsEpsilon(c,d,0,Z.EPSILON2);s.lonScalar=1/e._rectangle.width,s.latScalar=1/e._rectangle.height,s.tangentRotationMatrix=a;let h,p;if(t=e._rectangle,u){h=Htt(e,s);let g=ue.fromRectangle3D(t,n,c,ktt),f=ue.fromRectangle3D(t,n,d,Utt);p=ue.union(g,f)}else{if(h=qpe(e,s),h.attributes.position.values=_i.scaleToGeodeticHeight(h.attributes.position.values,c,n,!1),l(e._offsetAttribute)){let g=h.attributes.position.values.length,f=e._offsetAttribute===pn.NONE?0:1,b=new Uint8Array(g/3).fill(f);h.attributes.applyOffset=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:1,values:b})}p=ue.fromRectangle3D(t,n,c)}return r.position||delete h.attributes.position,new pt({attributes:h.attributes,indices:h.indices,primitiveType:h.primitiveType,boundingSphere:p,offsetAttribute:e._offsetAttribute})};lp.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new lp({rectangle:e._rectangle,rotation:e._rotation,ellipsoid:o,stRotation:e._stRotation,granularity:i,extrudedHeight:s,height:r,vertexFormat:we.POSITION_ONLY,shadowVolume:!0})};var Ype=new le,qtt=[new D,new D,new D],$tt=new Qi,ent=new ge;function tnt(e){if(e._stRotation===0)return[0,0,0,1,1,0];let t=le.clone(e._rectangle,Ype),n=e._granularity,i=e._ellipsoid,o=e._rotation-e._stRotation,r=w4(t,n,o,i,Ype),s=qtt;s[0].x=r.west,s[0].y=r.south,s[1].x=r.west,s[1].y=r.north,s[2].x=r.east,s[2].y=r.south;let a=e.rectangle,c=Qi.fromRotation(e._stRotation,$tt),d=le.center(a,ent);for(let f=0;f<3;++f){let b=s[f];b.x-=d.longitude,b.y-=d.latitude,Qi.multiplyByVector(c,b,b),b.x+=d.longitude,b.y+=d.latitude,b.x=(b.x-a.west)/a.width,b.y=(b.y-a.south)/a.height}let u=s[0],h=s[1],p=s[2],g=new Array(6);return D.pack(u,g),D.pack(h,g,2),D.pack(p,g,4),g}Object.defineProperties(lp.prototype,{rectangle:{get:function(){return l(this._rotatedRectangle)||(this._rotatedRectangle=w4(this._rectangle,this._granularity,this._rotation,this._ellipsoid)),this._rotatedRectangle}},textureCoordinateRotationPoints:{get:function(){return l(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=tnt(this)),this._textureCoordinateRotationPoints}}});var Jx=lp;var nAe=new U,iAe=m.ZERO,oAe=new m,rAe=new le,nnt=new le,int=new ge;function ont(e){this.id=e,this.vertexFormat=void 0,this.rectangle=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.rotation=void 0,this.offsetAttribute=void 0}function Kh(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new ont(e),geometryPropertyName:"rectangle",observedPropertyNames:["availability","rectangle"]}),this._onEntityPropertyChanged(e,"rectangle",e.rectangle,void 0)}l(Object.create)&&(Kh.prototype=Object.create(ii.prototype),Kh.prototype.constructor=Kh);Kh.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:jn.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof qt){let o;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,nAe)),l(o)||(o=U.WHITE),i.color=tn.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,iAe,oAe))),new wt({id:t,geometry:new Jx(this._options),attributes:i})};Kh.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=z.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,nAe),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:tn.fromColor(i),distanceDisplayCondition:jn.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=mo.fromCartesian3(z.getValueOrDefault(this._terrainOffsetProperty,e,iAe,oAe))),new wt({id:t,geometry:new _x(this._options),attributes:r})};Kh.prototype._computeCenter=function(e,t){let n=z.getValueOrUndefined(this._entity.rectangle.coordinates,e,nnt);if(!l(n))return;let i=le.center(n,int);return ge.toCartesian(i,ie.default,t)};Kh.prototype._isHidden=function(e,t){return!l(t.coordinates)||Ci.prototype._isHidden.call(this,e,t)};Kh.prototype._isDynamic=function(e,t){return!t.coordinates.isConstant||!z.isConstant(t.height)||!z.isConstant(t.extrudedHeight)||!z.isConstant(t.granularity)||!z.isConstant(t.stRotation)||!z.isConstant(t.rotation)||!z.isConstant(t.outlineWidth)||!z.isConstant(t.zIndex)||this._onTerrain&&!z.isConstant(this._materialProperty)&&!(this._materialProperty instanceof qt)};Kh.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof qt,i=z.getValueOrUndefined(t.height,ze.MINIMUM_VALUE),o=z.getValueOrDefault(t.heightReference,ze.MINIMUM_VALUE,et.NONE),r=z.getValueOrUndefined(t.extrudedHeight,ze.MINIMUM_VALUE),s=z.getValueOrDefault(t.extrudedHeightReference,ze.MINIMUM_VALUE,et.NONE);l(r)&&!l(i)&&(i=0);let a=this._options;a.vertexFormat=n?yn.VERTEX_FORMAT:Io.MaterialSupport.TEXTURED.vertexFormat,a.rectangle=t.coordinates.getValue(ze.MINIMUM_VALUE,a.rectangle),a.granularity=z.getValueOrUndefined(t.granularity,ze.MINIMUM_VALUE),a.stRotation=z.getValueOrUndefined(t.stRotation,ze.MINIMUM_VALUE),a.rotation=z.getValueOrUndefined(t.rotation,ze.MINIMUM_VALUE),a.offsetAttribute=ii.computeGeometryOffsetAttribute(i,o,r,s),a.height=ii.getGeometryHeight(i,o),r=ii.getGeometryExtrudedHeight(r,s),r===ii.CLAMP_TO_GROUND&&(r=Si.getMinimumMaximumHeights(Jx.computeRectangle(a,rAe)).minimumTerrainHeight),a.extrudedHeight=r};Kh.DynamicGeometryUpdater=pS;function pS(e,t,n){yi.call(this,e,t,n)}l(Object.create)&&(pS.prototype=Object.create(yi.prototype),pS.prototype.constructor=pS);pS.prototype._isHidden=function(e,t,n){return!l(this._options.rectangle)||yi.prototype._isHidden.call(this,e,t,n)};pS.prototype._setOptions=function(e,t,n){let i=this._options,o=z.getValueOrUndefined(t.height,n),r=z.getValueOrDefault(t.heightReference,n,et.NONE),s=z.getValueOrUndefined(t.extrudedHeight,n),a=z.getValueOrDefault(t.extrudedHeightReference,n,et.NONE);l(s)&&!l(o)&&(o=0),i.rectangle=z.getValueOrUndefined(t.coordinates,n,i.rectangle),i.granularity=z.getValueOrUndefined(t.granularity,n),i.stRotation=z.getValueOrUndefined(t.stRotation,n),i.rotation=z.getValueOrUndefined(t.rotation,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=Si.getMinimumMaximumHeights(Jx.computeRectangle(i,rAe)).minimumTerrainHeight),i.extrudedHeight=s};var YW=Kh;var CAi=y(C(),1);var Qpi=y(C(),1);var Spi=y(C(),1);var sAe={};function rnt(e,t){return Z.equalsEpsilon(e.latitude,t.latitude,Z.EPSILON10)&&Z.equalsEpsilon(e.longitude,t.longitude,Z.EPSILON10)}var snt=new ge,ant=new ge;function cnt(e,t,n,i){t=Xo(t,m.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 h=e.cartesianToCartographic(u,snt);s&&(h.height=n[0]),c[0]=h.height,r?d[0]=i[0]:d[0]=0;let p=c[0],g=d[0],f=p===g,b=1;for(let x=1;x<o;++x){let I=t[x],_=e.cartesianToCartographic(I,ant);s&&(_.height=n[x]),f=f&&_.height===0,rnt(h,_)?h.height<_.height&&(c[b-1]=_.height):(a[b]=I,c[b]=_.height,r?d[b]=i[x]:d[b]=0,f=f&&c[b]===d[b],ge.clone(_,h),++b)}if(!(f||b<2))return a.length=b,c.length=b,d.length=b,{positions:a,topHeights:c,bottomHeights:d}}var lnt=new Array(2),dnt=new Array(2),unt={positions:void 0,height:void 0,granularity:void 0,ellipsoid:void 0};sAe.computePositions=function(e,t,n,i,o,r){let s=cnt(e,t,n,i);if(!l(s))return;t=s.positions,n=s.topHeights,i=s.bottomHeights;let a=t.length,c=a-2,d,u,h=Z.chordLength(o,e.maximumRadius),p=unt;if(p.minDistance=h,p.ellipsoid=e,r){let g=0,f;for(f=0;f<a-1;f++)g+=Oi.numberOfPoints(t[f],t[f+1],h)+1;d=new Float64Array(g*3),u=new Float64Array(g*3);let b=lnt,x=dnt;p.positions=b,p.height=x;let I=0;for(f=0;f<a-1;f++){b[0]=t[f],b[1]=t[f+1],x[0]=n[f],x[1]=n[f+1];let _=Oi.generateArc(p);d.set(_,I),x[0]=i[f],x[1]=i[f+1],u.set(Oi.generateArc(p),I),I+=_.length}}else p.positions=t,p.height=n,d=new Float64Array(Oi.generateArc(p)),p.height=i,u=new Float64Array(Oi.generateArc(p));return{bottomPositions:u,topPositions:d,numCorners:c}};var jx=sAe;var X4=new m,X5=new m,mnt=new m,aAe=new m,hnt=new m,fnt=new m,pnt=new m;function qx(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.maximumHeights,i=e.minimumHeights,o=e.vertexFormat??we.DEFAULT,r=e.granularity??Z.RADIANS_PER_DEGREE,s=e.ellipsoid??ie.default;this._positions=t,this._minimumHeights=i,this._maximumHeights=n,this._vertexFormat=we.clone(o),this._granularity=r,this._ellipsoid=ie.clone(s),this._workerName="createWallGeometry";let a=1+t.length*m.packedLength+2;l(i)&&(a+=i.length),l(n)&&(a+=n.length),this.packedLength=a+ie.packedLength+we.packedLength+1}qx.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._minimumHeights;if(r=l(s)?s.length:0,t[n++]=r,l(s))for(i=0;i<r;++i)t[n++]=s[i];let a=e._maximumHeights;if(r=l(a)?a.length:0,t[n++]=r,l(a))for(i=0;i<r;++i)t[n++]=a[i];return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,we.pack(e._vertexFormat,t,n),n+=we.packedLength,t[n]=e._granularity,t};var cAe=ie.clone(ie.UNIT_SPHERE),lAe=new we,OW={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:cAe,vertexFormat:lAe,granularity:void 0};qx.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s;if(o>0)for(s=new Array(o),i=0;i<o;++i)s[i]=e[t++];o=e[t++];let a;if(o>0)for(a=new Array(o),i=0;i<o;++i)a[i]=e[t++];let c=ie.unpack(e,t,cAe);t+=ie.packedLength;let d=we.unpack(e,t,lAe);t+=we.packedLength;let u=e[t];return l(n)?(n._positions=r,n._minimumHeights=s,n._maximumHeights=a,n._ellipsoid=ie.clone(c,n._ellipsoid),n._vertexFormat=we.clone(d,n._vertexFormat),n._granularity=u,n):(OW.positions=r,OW.minimumHeights=s,OW.maximumHeights=a,OW.granularity=u,new qx(OW))};qx.fromConstantHeights=function(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n,i,o=e.minimumHeight,r=e.maximumHeight,s=l(o),a=l(r);if(s||a){let d=t.length;n=s?new Array(d):void 0,i=a?new Array(d):void 0;for(let u=0;u<d;++u)s&&(n[u]=o),a&&(i[u]=r)}let c={positions:t,maximumHeights:i,minimumHeights:n,ellipsoid:e.ellipsoid,vertexFormat:e.vertexFormat};return new qx(c)};qx.createGeometry=function(e){let t=e._positions,n=e._minimumHeights,i=e._maximumHeights,o=e._vertexFormat,r=e._granularity,s=e._ellipsoid,a=jx.computePositions(s,t,i,n,r,!0);if(!l(a))return;let c=a.bottomPositions,d=a.topPositions,u=a.numCorners,h=d.length,p=h*2,g=o.position?new Float64Array(p):void 0,f=o.normal?new Float32Array(p):void 0,b=o.tangent?new Float32Array(p):void 0,x=o.bitangent?new Float32Array(p):void 0,I=o.st?new Float32Array(p/3*2):void 0,_=0,E=0,S=0,R=0,G=0,B=pnt,w=fnt,F=hnt,P=!0;h/=3;let A,T=0,L=1/(h-u-1);for(A=0;A<h;++A){let N=A*3,k=m.fromArray(d,N,X4),v=m.fromArray(c,N,X5);if(o.position&&(g[_++]=v.x,g[_++]=v.y,g[_++]=v.z,g[_++]=k.x,g[_++]=k.y,g[_++]=k.z),o.st&&(I[G++]=T,I[G++]=0,I[G++]=T,I[G++]=1),o.normal||o.tangent||o.bitangent){let O=m.clone(m.ZERO,aAe),H=m.subtract(k,s.geodeticSurfaceNormal(k,X5),X5);if(A+1<h&&(O=m.fromArray(d,N+3,aAe)),P){let ee=m.subtract(O,k,mnt),K=m.subtract(H,k,X4);B=m.normalize(m.cross(K,ee,B),B),P=!1}m.equalsEpsilon(k,O,Z.EPSILON10)?P=!0:(T+=L,o.tangent&&(w=m.normalize(m.subtract(O,k,w),w)),o.bitangent&&(F=m.normalize(m.cross(B,w,F),F))),o.normal&&(f[E++]=B.x,f[E++]=B.y,f[E++]=B.z,f[E++]=B.x,f[E++]=B.y,f[E++]=B.z),o.tangent&&(b[R++]=w.x,b[R++]=w.y,b[R++]=w.z,b[R++]=w.x,b[R++]=w.y,b[R++]=w.z),o.bitangent&&(x[S++]=F.x,x[S++]=F.y,x[S++]=F.z,x[S++]=F.x,x[S++]=F.y,x[S++]=F.z)}}let V=new xn;o.position&&(V.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:g})),o.normal&&(V.normal=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:f})),o.tangent&&(V.tangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:b})),o.bitangent&&(V.bitangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:x})),o.st&&(V.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:I}));let W=p/3;p-=6*(u+1);let M=Me.createTypedArray(W,p),Q=0;for(A=0;A<W-2;A+=2){let N=A,k=A+2,v=m.fromArray(g,N*3,X4),O=m.fromArray(g,k*3,X5);if(m.equalsEpsilon(v,O,Z.EPSILON10))continue;let H=A+1,ee=A+3;M[Q++]=H,M[Q++]=N,M[Q++]=ee,M[Q++]=ee,M[Q++]=N,M[Q++]=k}return new pt({attributes:V,indices:M,primitiveType:We.TRIANGLES,boundingSphere:new ue.fromVertices(g)})};var HW=qx;var iAi=y(C(),1);var dAe=new m,uAe=new m;function $x(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.maximumHeights,i=e.minimumHeights,o=e.granularity??Z.RADIANS_PER_DEGREE,r=e.ellipsoid??ie.default;this._positions=t,this._minimumHeights=i,this._maximumHeights=n,this._granularity=o,this._ellipsoid=ie.clone(r),this._workerName="createWallOutlineGeometry";let s=1+t.length*m.packedLength+2;l(i)&&(s+=i.length),l(n)&&(s+=n.length),this.packedLength=s+ie.packedLength+1}$x.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._minimumHeights;if(r=l(s)?s.length:0,t[n++]=r,l(s))for(i=0;i<r;++i)t[n++]=s[i];let a=e._maximumHeights;if(r=l(a)?a.length:0,t[n++]=r,l(a))for(i=0;i<r;++i)t[n++]=a[i];return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n]=e._granularity,t};var mAe=ie.clone(ie.UNIT_SPHERE),zW={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:mAe,granularity:void 0};$x.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s;if(o>0)for(s=new Array(o),i=0;i<o;++i)s[i]=e[t++];o=e[t++];let a;if(o>0)for(a=new Array(o),i=0;i<o;++i)a[i]=e[t++];let c=ie.unpack(e,t,mAe);t+=ie.packedLength;let d=e[t];return l(n)?(n._positions=r,n._minimumHeights=s,n._maximumHeights=a,n._ellipsoid=ie.clone(c,n._ellipsoid),n._granularity=d,n):(zW.positions=r,zW.minimumHeights=s,zW.maximumHeights=a,zW.granularity=d,new $x(zW))};$x.fromConstantHeights=function(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n,i,o=e.minimumHeight,r=e.maximumHeight,s=l(o),a=l(r);if(s||a){let d=t.length;n=s?new Array(d):void 0,i=a?new Array(d):void 0;for(let u=0;u<d;++u)s&&(n[u]=o),a&&(i[u]=r)}let c={positions:t,maximumHeights:i,minimumHeights:n,ellipsoid:e.ellipsoid};return new $x(c)};$x.createGeometry=function(e){let t=e._positions,n=e._minimumHeights,i=e._maximumHeights,o=e._granularity,r=e._ellipsoid,s=jx.computePositions(r,t,i,n,o,!1);if(!l(s))return;let a=s.bottomPositions,c=s.topPositions,d=c.length,u=d*2,h=new Float64Array(u),p=0;d/=3;let g;for(g=0;g<d;++g){let _=g*3,E=m.fromArray(c,_,dAe),S=m.fromArray(a,_,uAe);h[p++]=S.x,h[p++]=S.y,h[p++]=S.z,h[p++]=E.x,h[p++]=E.y,h[p++]=E.z}let f=new xn({position:new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:h})}),b=u/3;u=2*b-4+b;let x=Me.createTypedArray(b,u),I=0;for(g=0;g<b-2;g+=2){let _=g,E=g+2,S=m.fromArray(h,_*3,dAe),R=m.fromArray(h,E*3,uAe);if(m.equalsEpsilon(S,R,Z.EPSILON10))continue;let G=g+1,B=g+3;x[I++]=G,x[I++]=_,x[I++]=G,x[I++]=B,x[I++]=_,x[I++]=E}return x[I++]=b-2,x[I++]=b-1,new pt({attributes:f,indices:x,primitiveType:We.LINES,boundingSphere:new ue.fromVertices(h)})};var KW=$x;var hAe=new U;function Ant(e){this.id=e,this.vertexFormat=void 0,this.positions=void 0,this.minimumHeights=void 0,this.maximumHeights=void 0,this.granularity=void 0}function Jh(e,t){Ci.call(this,{entity:e,scene:t,geometryOptions:new Ant(e),geometryPropertyName:"wall",observedPropertyNames:["availability","wall"]}),this._onEntityPropertyChanged(e,"wall",e.wall,void 0)}l(Object.create)&&(Jh.prototype=Object.create(Ci.prototype),Jh.prototype.constructor=Jh);Jh.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=jn.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof qt){let c;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(c=this._materialProperty.color.getValue(e,hAe)),l(c)||(c=U.WHITE),o=tn.fromColor(c),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};return new wt({id:t,geometry:new HW(this._options),attributes:i})};Jh.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=z.getValueOrDefault(this._outlineColorProperty,e,U.BLACK,hAe),o=this._distanceDisplayConditionProperty.getValue(e);return new wt({id:t,geometry:new KW(this._options),attributes:{show:new Vn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:tn.fromColor(i),distanceDisplayCondition:jn.fromDistanceDisplayCondition(o)}})};Jh.prototype._isHidden=function(e,t){return!l(t.positions)||Ci.prototype._isHidden.call(this,e,t)};Jh.prototype._getIsClosed=function(e){return!1};Jh.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!z.isConstant(t.minimumHeights)||!z.isConstant(t.maximumHeights)||!z.isConstant(t.outlineWidth)||!z.isConstant(t.granularity)};Jh.prototype._setStaticOptions=function(e,t){let n=t.minimumHeights,i=t.maximumHeights,o=t.granularity,r=this._materialProperty instanceof qt,s=this._options;s.vertexFormat=r?yn.VERTEX_FORMAT:Io.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(ze.MINIMUM_VALUE,s.positions),s.minimumHeights=l(n)?n.getValue(ze.MINIMUM_VALUE,s.minimumHeights):void 0,s.maximumHeights=l(i)?i.getValue(ze.MINIMUM_VALUE,s.maximumHeights):void 0,s.granularity=l(o)?o.getValue(ze.MINIMUM_VALUE):void 0};Jh.DynamicGeometryUpdater=AS;function AS(e,t,n){yi.call(this,e,t,n)}l(Object.create)&&(AS.prototype=Object.create(yi.prototype),AS.prototype.constructor=AS);AS.prototype._isHidden=function(e,t,n){return!l(this._options.positions)||yi.prototype._isHidden.call(this,e,t,n)};AS.prototype._setOptions=function(e,t,n){let i=this._options;i.positions=z.getValueOrUndefined(t.positions,n,i.positions),i.minimumHeights=z.getValueOrUndefined(t.minimumHeights,n,i.minimumHeights),i.maximumHeights=z.getValueOrUndefined(t.maximumHeights,n,i.maximumHeights),i.granularity=z.getValueOrUndefined(t.granularity,n)};var JW=Jh;var eI=[AZ,pW,sW,RW,GW,wW,PW,kW,YW,JW];function tI(e,t){this.entity=e,this.scene=t;let n=new Array(eI.length),i=new Ce,o=new Lr;for(let r=0;r<n.length;r++){let s=new eI[r](e,t);o.add(s.geometryChanged,a=>{i.raiseEvent(a)}),n[r]=s}this.updaters=n,this.geometryChanged=i,this.eventHelper=o,this._removeEntitySubscription=e.definitionChanged.addEventListener(tI.prototype._onEntityPropertyChanged,this)}tI.prototype._onEntityPropertyChanged=function(e,t,n,i){let o=this.updaters;for(let r=0;r<o.length;r++)o[r]._onEntityPropertyChanged(e,t,n,i)};tI.prototype.forEach=function(e){let t=this.updaters;for(let n=0;n<t.length;n++)e(t[n])};tI.prototype.destroy=function(){this.eventHelper.removeAll();let e=this.updaters;for(let t=0;t<e.length;t++)e[t].destroy();this._removeEntitySubscription(),me(this)};tI.registerUpdater=function(e){eI.includes(e)||eI.push(e)};tI.unregisterUpdater=function(e){if(eI.includes(e)){let t=eI.indexOf(e);eI.splice(t,1)}};var nI=tI;var jAi=y(C(),1);var fAe=new U,gnt=new Qt,bnt=new Qt,ynt=m.ZERO,Cnt=new m;function jh(e,t,n,i,o,r,s){this.translucent=t,this.appearanceType=n,this.depthFailAppearanceType=i,this.depthFailMaterialProperty=o,this.depthFailMaterial=void 0,this.closed=r,this.shadows=s,this.primitives=e,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Bt,this.updaters=new Bt,this.updatersWithAttributes=new Bt,this.attributes=new Bt,this.subscriptions=new Bt,this.showsUpdated=new Bt,this.itemsToRemove=[],this.invalidated=!1;let a;l(o)&&(a=o.definitionChanged.addEventListener(jh.prototype.onMaterialChanged,this)),this.removeMaterialSubscription=a}jh.prototype.onMaterialChanged=function(){this.invalidated=!0};jh.prototype.isMaterial=function(e){let t=this.depthFailMaterialProperty,n=e.depthFailMaterialProperty;return n===t?!0:l(t)?t.equals(n):!1};jh.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),!e.hasConstantFill||!e.fillMaterialProperty.isConstant||!z.isConstant(e.distanceDisplayConditionProperty)||!z.isConstant(e.terrainOffsetProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};jh.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};jh.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0){l(i)&&(l(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i);let c;l(this.depthFailAppearanceType)&&(l(this.depthFailMaterialProperty)&&(this.depthFailMaterial=dr.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial)),c=new this.depthFailAppearanceType({material:this.depthFailMaterial,translucent:this.translucent,closed:this.closed})),i=new Nn({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new this.appearanceType({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 qt)&&(this.depthFailMaterial=dr.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<a;r++){let d=s[r],u=this.geometry.get(d.id),h=this.attributes.get(u.id.id);if(l(h)||(h=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!d.fillMaterialProperty.isConstant||c){let x=d.fillMaterialProperty.color,I=z.getValueOrDefault(x,e,U.WHITE,fAe);U.equals(h._lastColor,I)||(h._lastColor=U.clone(I,h._lastColor),h.color=tn.toValue(I,h.color),(this.translucent&&h.color[3]===255||!this.translucent&&h.color[3]!==255)&&(this.itemsToRemove[n++]=d))}if(l(this.depthFailAppearanceType)&&d.depthFailMaterialProperty instanceof qt&&(!d.depthFailMaterialProperty.isConstant||c)){let x=d.depthFailMaterialProperty.color,I=z.getValueOrDefault(x,e,U.WHITE,fAe);U.equals(h._lastDepthFailColor,I)||(h._lastDepthFailColor=U.clone(I,h._lastDepthFailColor),h.depthFailColor=tn.toValue(I,h.depthFailColor))}let p=d.entity.isShowing&&(d.hasConstantFill||d.isFilled(e)),g=h.show[0]===1;p!==g&&(h.show=Vn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!z.isConstant(f)){let x=z.getValueOrDefault(f,e,bnt,gnt);Qt.equals(x,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Qt.clone(x,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=jn.toValue(x,h.distanceDisplayCondition))}let b=d.terrainOffsetProperty;if(!z.isConstant(b)){let x=z.getValueOrDefault(b,e,ynt,Cnt);m.equals(x,h._lastOffset)||(h._lastOffset=m.clone(x,h._lastOffset),h.offset=mo.toValue(x,h.offset))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};jh.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);l(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=Vn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};jh.prototype.contains=function(e){return this.updaters.contains(e.id)};jh.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return At.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?At.FAILED:(i.boundingSphere.clone(t),At.DONE)};jh.prototype.destroy=function(){let e=this.primitive,t=this.primitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n),l(this.removeMaterialSubscription)&&this.removeMaterialSubscription()};function gS(e,t,n,i,o){this._solidItems=[],this._translucentItems=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=o}gS.prototype.add=function(e,t){let n,i,o=t.createFillGeometryInstance(e);o.attributes.color.value[3]===255?(n=this._solidItems,i=!1):(n=this._translucentItems,i=!0);let r=n.length;for(let a=0;a<r;a++){let c=n[a];if(c.isMaterial(t)){c.add(t,o);return}}let s=new jh(this._primitives,i,this._appearanceType,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);s.add(t,o),n.push(s)};function pAe(e,t){let n=e.length;for(let i=n-1;i>=0;i--){let o=e[i];if(o.remove(t))return o.updaters.length===0&&(e.splice(i,1),o.destroy()),!0}return!1}gS.prototype.remove=function(e){pAe(this._solidItems,e)||pAe(this._translucentItems,e)};function AAe(e,t,n){let i=!1,o=t.length;for(let r=0;r<o;++r){let s=t[r],a=s.itemsToRemove,c=a.length;if(c>0)for(r=0;r<c;r++){let d=a[r];s.remove(d),e.add(n,d),i=!0}}return i}function W5(e,t,n,i){let o=t.length,r;for(r=o-1;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;d<c;d++)e.add(n,a[d]);s.destroy()}}for(o=t.length,r=0;r<o;++r)i=t[r].update(n)&&i;return i}gS.prototype.update=function(e){let t=W5(this,this._solidItems,e,!0);t=W5(this,this._translucentItems,e,t)&&t;let n=AAe(this,this._solidItems,e),i=AAe(this,this._translucentItems,e);return(n||i)&&(t=W5(this,this._solidItems,e,t)&&t,t=W5(this,this._translucentItems,e,t)&&t),t};function gAe(e,t,n){let i=e.length;for(let o=0;o<i;o++){let r=e[o];if(r.contains(t))return r.getBoundingSphere(t,n)}return At.FAILED}gS.prototype.getBoundingSphere=function(e,t){let n=gAe(this._solidItems,e,t);return n===At.FAILED?gAe(this._translucentItems,e,t):n};function bAe(e){let t=e.length;for(let n=0;n<t;n++)e[n].destroy();e.length=0}gS.prototype.removeAllPrimitives=function(){bAe(this._solidItems),bAe(this._translucentItems)};var Lm=gS;var hgi=y(C(),1);var xnt=new Qt,Int=new Qt,_nt=m.ZERO,Ent=new m;function qh(e,t,n,i,o,r,s){this.primitives=e,this.appearanceType=t,this.materialProperty=n,this.depthFailAppearanceType=i,this.depthFailMaterialProperty=o,this.closed=r,this.shadows=s,this.updaters=new Bt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Bt,this.material=void 0,this.depthFailMaterial=void 0,this.updatersWithAttributes=new Bt,this.attributes=new Bt,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(qh.prototype.onMaterialChanged,this),this.subscriptions=new Bt,this.showsUpdated=new Bt}qh.prototype.onMaterialChanged=function(){this.invalidated=!0};qh.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty,i=this.depthFailMaterialProperty,o=e.depthFailMaterialProperty;if(n===t&&o===i)return!0;let r=l(t)&&t.equals(n);return r=(!l(i)&&!l(o)||l(i)&&i.equals(o))&&r,r};qh.prototype.add=function(e,t){let n=t.id;if(this.updaters.set(n,t),this.geometry.set(n,t.createFillGeometryInstance(e)),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!z.isConstant(t.distanceDisplayConditionProperty)||!z.isConstant(t.terrainOffsetProperty))this.updatersWithAttributes.set(n,t);else{let i=this;this.subscriptions.set(n,t.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(t.id,t)}))}this.createPrimitive=!0};qh.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};var Tnt=new U;qh.prototype.update=function(e){let t=!0,n=this.primitive,i=this.primitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0){l(n)&&(l(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=dr.getValue(e,this.materialProperty,this.material);let a;l(this.depthFailMaterialProperty)&&(this.depthFailMaterial=dr.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),a=new this.depthFailAppearanceType({material:this.depthFailMaterial,translucent:this.depthFailMaterial.isTranslucent(),closed:this.closed})),n=new Nn({show:!1,asynchronous:!0,geometryInstances:o.slice(),appearance:new this.appearanceType({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=dr.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material,l(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof qt)&&(this.depthFailMaterial=dr.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);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),h=this.attributes.get(u.id.id);if(l(h)||(h=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),l(this.depthFailAppearanceType)&&this.depthFailMaterialProperty instanceof qt&&!c.depthFailMaterialProperty.isConstant){let x=c.depthFailMaterialProperty.color,I=z.getValueOrDefault(x,e,U.WHITE,Tnt);U.equals(h._lastDepthFailColor,I)||(h._lastDepthFailColor=U.clone(I,h._lastDepthFailColor),h.depthFailColor=tn.toValue(I,h.depthFailColor))}let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),g=h.show[0]===1;p!==g&&(h.show=Vn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!z.isConstant(f)){let x=z.getValueOrDefault(f,e,Int,xnt);Qt.equals(x,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Qt.clone(x,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=jn.toValue(x,h.distanceDisplayCondition))}let b=c.terrainOffsetProperty;if(!z.isConstant(b)){let x=z.getValueOrDefault(b,e,_nt,Ent);m.equals(x,h._lastOffset)||(h._lastOffset=m.clone(x,h._lastOffset),h.offset=mo.toValue(x,h.offset))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};qh.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()};qh.prototype.contains=function(e){return this.updaters.contains(e.id)};qh.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return At.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?At.FAILED:(i.boundingSphere.clone(t),At.DONE)};qh.prototype.destroy=function(){let e=this.primitive,t=this.primitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n),this.removeMaterialSubscription()};function bS(e,t,n,i,o){this._items=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=o}bS.prototype.add=function(e,t){let n=this._items,i=n.length;for(let r=0;r<i;r++){let s=n[r];if(s.isMaterial(t)){s.add(e,t);return}}let o=new qh(this._primitives,this._appearanceType,t.fillMaterialProperty,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);o.add(e,t),n.push(o)};bS.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}}};bS.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};bS.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 At.FAILED};bS.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 Rm=bS;var Xgi=y(C(),1);var xgi=y(C(),1);var bgi=y(C(),1);var pgi=y(C(),1);function F5(e,t,n=0,i=e.length-1,o=Snt){for(;i>n;){if(i-n>600){let c=i-n+1,d=t-n+1,u=Math.log(c),h=.5*Math.exp(2*u/3),p=.5*Math.sqrt(u*h*(c-h)/c)*(d-c/2<0?-1:1),g=Math.max(n,Math.floor(t-d*h/c+p)),f=Math.min(i,Math.floor(t+(c-d)*h/c+p));F5(e,t,g,f,o)}let r=e[t],s=n,a=i;for(jW(e,n,t),o(e[i],r)>0&&jW(e,n,i);s<a;){for(jW(e,s,a),s++,a--;o(e[s],r)<0;)s++;for(;o(e[a],r)>0;)a--}o(e[n],r)===0?jW(e,n,a):(a++,jW(e,a,i)),a<=t&&(n=a+1),t<=a&&(i=a-1)}}function jW(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}function Snt(e,t){return e<t?-1:e>t?1:0}var eF=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(!M5(t,n))return i;let o=this.toBBox,r=[];for(;n;){for(let s=0;s<n.children.length;s++){let a=n.children[s],c=n.leaf?o(a):a;M5(t,c)&&(n.leaf?i.push(a):F4(t,c)?this._all(a,i):r.push(a))}n=r.pop()}return i}collides(t){let n=this.data;if(!M5(t,n))return!1;let i=[];for(;n;){for(let o=0;o<n.children.length;o++){let r=n.children[o],s=n.leaf?this.toBBox(r):r;if(M5(t,s)){if(n.leaf||F4(t,s))return!0;i.push(r)}}n=i.pop()}return!1}load(t){if(!(t&&t.length))return this;if(t.length<this._minEntries){for(let i=0;i<t.length;i++)this.insert(t[i]);return this}let n=this._build(t.slice(),0,t.length-1,0);if(!this.data.children.length)this.data=n;else if(this.data.height===n.height)this._splitRoot(this.data,n);else{if(this.data.height<n.height){let i=this.data;this.data=n,n=i}this._insert(n,this.data.height-n.height-1,!0)}return this}insert(t){return t&&this._insert(t,this.data.height-1),this}clear(){return this.data=CS([]),this}remove(t,n){if(!t)return this;let i=this.data,o=this.toBBox(t),r=[],s=[],a,c,d;for(;i||r.length;){if(i||(i=r.pop(),c=r[r.length-1],a=s.pop(),d=!0),i.leaf){let u=Lnt(t,i.children,n);if(u!==-1)return i.children.splice(u,1),r.push(i),this._condense(r),this}!d&&!i.leaf&&F4(i,o)?(r.push(i),s.push(a),a=0,c=i,i=i.children[0]):c?(a++,i=c.children[a],d=!1):i=null}return this}toBBox(t){return t}compareMinX(t,n){return t.minX-n.minX}compareMinY(t,n){return t.minY-n.minY}toJSON(){return this.data}fromJSON(t){return this.data=t,this}_all(t,n){let i=[];for(;t;)t.leaf?n.push(...t.children):i.push(...t.children),t=i.pop();return n}_build(t,n,i,o){let r=i-n+1,s=this._maxEntries,a;if(r<=s)return a=CS(t.slice(n,i+1)),yS(a,this.toBBox),a;o||(o=Math.ceil(Math.log(r)/Math.log(s)),s=Math.ceil(r/Math.pow(s,o-1))),a=CS([]),a.leaf=!1,a.height=o;let c=Math.ceil(r/s),d=c*Math.ceil(Math.sqrt(s));yAe(t,n,i,d,this.compareMinX);for(let u=n;u<=i;u+=d){let h=Math.min(u+d-1,i);yAe(t,u,h,c,this.compareMinY);for(let p=u;p<=h;p+=c){let g=Math.min(p+c-1,h);a.children.push(this._build(t,p,g,o-1))}}return yS(a,this.toBBox),a}_chooseSubtree(t,n,i,o){for(;o.push(n),!(n.leaf||o.length-1===i);){let r=1/0,s=1/0,a;for(let c=0;c<n.children.length;c++){let d=n.children[c],u=W4(d),h=Gnt(t,d)-u;h<s?(s=h,r=u<r?u:r,a=d):h===s&&u<r&&(r=u,a=d)}n=a||n.children[0]}return n}_insert(t,n,i){let o=i?t:this.toBBox(t),r=[],s=this._chooseSubtree(o,this.data,n,r);for(s.children.push(t),$W(s,o);n>=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=CS(i.children.splice(s,i.children.length-s));a.height=i.height,a.leaf=i.leaf,yS(i,this.toBBox),yS(a,this.toBBox),n?t[n-1].children.push(a):this._splitRoot(i,a)}_splitRoot(t,n){this.data=CS([t,n]),this.data.height=t.height+1,this.data.leaf=!1,yS(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=qW(t,0,a,this.toBBox),d=qW(t,a,i,this.toBBox),u=Znt(c,d),h=W4(c)+W4(d);u<r?(r=u,o=a,s=h<s?h:s):u===r&&h<s&&(s=h,o=a)}return o||i-n}_chooseSplitAxis(t,n,i){let o=t.leaf?this.compareMinX:Rnt,r=t.leaf?this.compareMinY:Vnt,s=this._allDistMargin(t,n,i,o),a=this._allDistMargin(t,n,i,r);s<a&&t.children.sort(o)}_allDistMargin(t,n,i,o){t.children.sort(o);let r=this.toBBox,s=qW(t,0,n,r),a=qW(t,i-n,i,r),c=P5(s)+P5(a);for(let d=n;d<i-n;d++){let u=t.children[d];$W(s,t.leaf?r(u):u),c+=P5(s)}for(let d=i-n-1;d>=n;d--){let u=t.children[d];$W(a,t.leaf?r(u):u),c+=P5(a)}return c}_adjustParentBBoxes(t,n,i){for(let o=i;o>=0;o--)$W(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():yS(t[n],this.toBBox)}};function Lnt(e,t,n){if(!n)return t.indexOf(e);for(let i=0;i<t.length;i++)if(n(e,t[i]))return i;return-1}function yS(e,t){qW(e,0,e.children.length,t,e)}function qW(e,t,n,i,o){o||(o=CS(null)),o.minX=1/0,o.minY=1/0,o.maxX=-1/0,o.maxY=-1/0;for(let r=t;r<n;r++){let s=e.children[r];$W(o,e.leaf?i(s):s)}return o}function $W(e,t){return e.minX=Math.min(e.minX,t.minX),e.minY=Math.min(e.minY,t.minY),e.maxX=Math.max(e.maxX,t.maxX),e.maxY=Math.max(e.maxY,t.maxY),e}function Rnt(e,t){return e.minX-t.minX}function Vnt(e,t){return e.minY-t.minY}function W4(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function P5(e){return e.maxX-e.minX+(e.maxY-e.minY)}function Gnt(e,t){return(Math.max(t.maxX,e.maxX)-Math.min(t.minX,e.minX))*(Math.max(t.maxY,e.maxY)-Math.min(t.minY,e.minY))}function Znt(e,t){let n=Math.max(e.minX,t.minX),i=Math.max(e.minY,t.minY),o=Math.min(e.maxX,t.maxX),r=Math.min(e.maxY,t.maxY);return Math.max(0,o-n)*Math.max(0,r-i)}function F4(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function M5(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function CS(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function yAe(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;F5(e,s,t,n,o),r.push(t,s,s,n)}}function v5(){this._tree=new eF}function iI(){this.minX=0,this.minY=0,this.maxX=0,this.maxY=0,this.id=""}iI.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};v5.prototype.insert=function(e,t){let n=iI.fromRectangleAndId(e,t,new iI);this._tree.insert(n)};function Bnt(e,t){return e.id===t.id}var wnt=new iI;v5.prototype.remove=function(e,t){let n=iI.fromRectangleAndId(e,t,wnt);this._tree.remove(n,Bnt)};var Xnt=new iI;v5.prototype.collides=function(e){let t=iI.fromRectangleAndId("",e,Xnt);return this._tree.collides(t)};var oI=v5;var Wnt=new U,Fnt=new Qt,Pnt=new Qt;function Vg(e,t,n,i){this.primitives=e,this.zIndex=i,this.classificationType=t,this.color=n,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Bt,this.updaters=new Bt,this.updatersWithAttributes=new Bt,this.attributes=new Bt,this.subscriptions=new Bt,this.showsUpdated=new Bt,this.itemsToRemove=[],this.isDirty=!1,this.rectangleCollisionCheck=new oI}Vg.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)};Vg.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),this.rectangleCollisionCheck.insert(n,t.geometry.rectangle),!e.hasConstantFill||!e.fillMaterialProperty.isConstant||!z.isConstant(e.distanceDisplayConditionProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};Vg.prototype.remove=function(e){let t=e.id,n=this.geometry.get(t);if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.rectangleCollisionCheck.remove(t,n.geometry.rectangle),this.updatersWithAttributes.remove(t);let i=this.subscriptions.get(t);return l(i)&&(i(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};Vg.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0)l(i)&&(l(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i),i=new cl({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<a;r++){let d=s[r],u=this.geometry.get(d.id),h=this.attributes.get(u.id.id);if(l(h)||(h=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!d.fillMaterialProperty.isConstant||c){let b=d.fillMaterialProperty.color,x=z.getValueOrDefault(b,e,U.WHITE,Wnt);U.equals(h._lastColor,x)||(h._lastColor=U.clone(x,h._lastColor),h.color=tn.toValue(x,h.color))}let p=d.entity.isShowing&&(d.hasConstantFill||d.isFilled(e)),g=h.show[0]===1;p!==g&&(h.show=Vn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!z.isConstant(f)){let b=z.getValueOrDefault(f,e,Pnt,Fnt);Qt.equals(b,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Qt.clone(b,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=jn.toValue(b,h.distanceDisplayCondition))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};Vg.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);l(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=Vn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};Vg.prototype.contains=function(e){return this.updaters.contains(e.id)};Vg.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return At.PENDING;let i=n.getBoundingSphere(e.entity);return l(i)?(i.clone(t),At.DONE):At.FAILED};Vg.prototype.removeAllPrimitives=function(){let e=this.primitives,t=this.primitive;l(t)&&(e.remove(t),this.primitive=void 0,this.geometry.removeAll(),this.updaters.removeAll());let n=this.oldPrimitive;l(n)&&(e.remove(n),this.oldPrimitive=void 0)};function xS(e,t){this._batches=[],this._primitives=e,this._classificationType=t}xS.prototype.add=function(e,t){let n=t.createFillGeometryInstance(e),i=this._batches,o=z.getValueOrDefault(t.zIndex,0),r,s=i.length;for(let a=0;a<s;++a){let c=i[a];if(c.zIndex===o&&!c.overlapping(n.geometry.rectangle)){r=c;break}}return l(r)||(r=new Vg(this._primitives,this._classificationType,n.attributes.color.value,o),i.push(r)),r.add(t,n),r};xS.prototype.remove=function(e){let t=this._batches,n=t.length;for(let i=0;i<n;++i)if(t[i].remove(e))return};xS.prototype.update=function(e){let t,n,i=!0,o=this._batches,r=o.length;for(t=0;t<r;++t)i=o[t].update(e)&&i;for(t=0;t<r;++t){let s=o[t],a=s.itemsToRemove,c=a.length;for(let d=0;d<c;d++){n=a[d],s.remove(n);let u=this.add(e,n);s.isDirty=!0,u.isDirty=!0}}for(t=r-1;t>=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};xS.prototype.getBoundingSphere=function(e,t){let n=this._batches,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return At.FAILED};xS.prototype.removeAllPrimitives=function(){let e=this._batches,t=e.length;for(let n=0;n<t;++n)e[n].removeAllPrimitives()};var IS=xS;var zgi=y(C(),1);var Mnt=new Qt,vnt=new Qt;function dp(e,t,n,i,o,r){this.primitives=e,this.classificationType=t,this.appearanceType=n,this.materialProperty=i,this.updaters=new Bt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Bt,this.material=void 0,this.updatersWithAttributes=new Bt,this.attributes=new Bt,this.subscriptions=new Bt,this.showsUpdated=new Bt,this.usingSphericalTextureCoordinates=o,this.zIndex=r,this.rectangleCollisionCheck=new oI}dp.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)};dp.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty;return n===t||n instanceof qt&&t instanceof qt?!0:l(t)&&t.equals(n)};dp.prototype.add=function(e,t,n){let i=t.id;if(this.updaters.set(i,t),this.geometry.set(i,n),this.rectangleCollisionCheck.insert(i,n.geometry.rectangle),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!z.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};dp.prototype.remove=function(e){let t=e.id,n=this.geometry.get(t);if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.rectangleCollisionCheck.remove(t,n.geometry.rectangle),this.updatersWithAttributes.remove(t);let i=this.subscriptions.get(t);return l(i)&&(i(),this.subscriptions.remove(t)),!0}return!1};dp.prototype.update=function(e){let t=!0,n=this.primitive,i=this.primitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0)l(n)&&(l(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=dr.getValue(e,this.materialProperty,this.material),n=new cl({show:!1,asynchronous:!0,geometryInstances:o.slice(),appearance:new this.appearanceType({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=dr.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),h=this.attributes.get(u.id.id);l(h)||(h=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h));let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),g=h.show[0]===1;p!==g&&(h.show=Vn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!z.isConstant(f)){let b=z.getValueOrDefault(f,e,vnt,Mnt);Qt.equals(b,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Qt.clone(b,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=jn.toValue(b,h.distanceDisplayCondition))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};dp.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()};dp.prototype.contains=function(e){return this.updaters.contains(e.id)};dp.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return At.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?At.FAILED:(i.boundingSphere.clone(t),At.DONE)};dp.prototype.destroy=function(){let e=this.primitive,t=this.primitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n)};function _S(e,t,n){this._items=[],this._primitives=e,this._classificationType=t,this._appearanceType=n}_S.prototype.add=function(e,t){let n=this._items,i=n.length,o=t.createFillGeometryInstance(e),r=Pd.shouldUseSphericalCoordinates(o.geometry.rectangle),s=z.getValueOrDefault(t.zIndex,0);for(let c=0;c<i;++c){let d=n[c];if(d.isMaterial(t)&&d.usingSphericalTextureCoordinates===r&&d.zIndex===s&&!d.overlapping(o.geometry.rectangle)){d.add(e,t,o);return}}let a=new dp(this._primitives,this._classificationType,this._appearanceType,t.fillMaterialProperty,r,s);a.add(e,t,o),n.push(a)};_S.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0&&!t[i].remove(e);i--);};_S.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;t<n.length;t++)o=n[t].update(e)&&o;return o};_S.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 At.FAILED};_S.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 tF=_S;var lbi=y(C(),1);var Nnt=new U,Dnt=new Qt,Qnt=new Qt,Unt=m.ZERO,knt=new m;function Gg(e,t,n,i){this.translucent=t,this.width=n,this.shadows=i,this.primitives=e,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Bt,this.updaters=new Bt,this.updatersWithAttributes=new Bt,this.attributes=new Bt,this.itemsToRemove=[],this.subscriptions=new Bt,this.showsUpdated=new Bt}Gg.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),!e.hasConstantOutline||!e.outlineColorProperty.isConstant||!z.isConstant(e.distanceDisplayConditionProperty)||!z.isConstant(e.terrainOffsetProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};Gg.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};Gg.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0)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;r<a;r++){let d=s[r],u=this.geometry.get(d.id),h=this.attributes.get(u.id.id);if(l(h)||(h=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!d.outlineColorProperty.isConstant||c){let x=d.outlineColorProperty,I=z.getValueOrDefault(x,e,U.WHITE,Nnt);U.equals(h._lastColor,I)||(h._lastColor=U.clone(I,h._lastColor),h.color=tn.toValue(I,h.color),(this.translucent&&h.color[3]===255||!this.translucent&&h.color[3]!==255)&&(this.itemsToRemove[n++]=d))}let p=d.entity.isShowing&&(d.hasConstantOutline||d.isOutlineVisible(e)),g=h.show[0]===1;p!==g&&(h.show=Vn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!z.isConstant(f)){let x=z.getValueOrDefault(f,e,Qnt,Dnt);Qt.equals(x,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Qt.clone(x,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=jn.toValue(x,h.distanceDisplayCondition))}let b=d.terrainOffsetProperty;if(!z.isConstant(b)){let x=z.getValueOrDefault(b,e,Unt,knt);m.equals(x,h._lastOffset)||(h._lastOffset=m.clone(x,h._lastOffset),h.offset=mo.toValue(x,h.offset))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};Gg.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);l(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=Vn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};Gg.prototype.contains=function(e){return this.updaters.contains(e.id)};Gg.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return At.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?At.FAILED:(i.boundingSphere.clone(t),At.DONE)};Gg.prototype.removeAllPrimitives=function(){let e=this.primitives,t=this.primitive;l(t)&&(e.remove(t),this.primitive=void 0,this.geometry.removeAll(),this.updaters.removeAll());let n=this.oldPrimitive;l(n)&&(e.remove(n),this.oldPrimitive=void 0)};function ES(e,t,n){this._primitives=e,this._scene=t,this._shadows=n,this._solidBatches=new Bt,this._translucentBatches=new Bt}ES.prototype.add=function(e,t){let n=t.createOutlineGeometryInstance(e),i=this._scene.clampLineWidth(t.outlineWidth),o,r;n.attributes.color.value[3]===255?(o=this._solidBatches,r=o.get(i),l(r)||(r=new Gg(this._primitives,!1,i,this._shadows),o.set(i,r)),r.add(t,n)):(o=this._translucentBatches,r=o.get(i),l(r)||(r=new Gg(this._primitives,!0,i,this._shadows),o.set(i,r)),r.add(t,n))};ES.prototype.remove=function(e){let t,n=this._solidBatches.values,i=n.length;for(t=0;t<i;t++)if(n[t].remove(e))return;let o=this._translucentBatches.values,r=o.length;for(t=0;t<r;t++)if(o[t].remove(e))return};ES.prototype.update=function(e){let t,n,i,o,r=this._solidBatches.values,s=r.length,a=this._translucentBatches.values,c=a.length,d,u=!0,h=!1;do{for(h=!1,n=0;n<s;n++){o=r[n],u=o.update(e),d=o.itemsToRemove;let p=d.length;if(p>0)for(h=!0,t=0;t<p;t++)i=d[t],o.remove(i),this.add(e,i)}for(n=0;n<c;n++){o=a[n],u=o.update(e),d=o.itemsToRemove;let p=d.length;if(p>0)for(h=!0,t=0;t<p;t++)i=d[t],o.remove(i),this.add(e,i)}}while(h);return u};ES.prototype.getBoundingSphere=function(e,t){let n,i=this._solidBatches.values,o=i.length;for(n=0;n<o;n++){let a=i[n];if(a.contains(e))return a.getBoundingSphere(e,t)}let r=this._translucentBatches.values,s=r.length;for(n=0;n<s;n++){let a=r[n];if(a.contains(e))return a.getBoundingSphere(e,t)}return At.FAILED};ES.prototype.removeAllPrimitives=function(){let e,t=this._solidBatches.values,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();let i=this._translucentBatches.values,o=i.length;for(e=0;e<o;e++)i[e].removeAllPrimitives()};var TS=ES;var Ynt=[];function gd(e,t,n,i){n=n??e.primitives,i=i??e.groundPrimitives,this._scene=e,this._primitives=n,this._groundPrimitives=i,this._entityCollection=void 0,this._addedObjects=new Bt,this._removedObjects=new Bt,this._changedObjects=new Bt;let o=Gn.NUMBER_OF_SHADOW_MODES;this._outlineBatches=new Array(o*2),this._closedColorBatches=new Array(o*2),this._closedMaterialBatches=new Array(o*2),this._openColorBatches=new Array(o*2),this._openMaterialBatches=new Array(o*2);let r=ur.supportsMaterialsforEntitiesOnTerrain(e);this._supportsMaterialsforEntitiesOnTerrain=r;let s;for(s=0;s<o;++s)this._outlineBatches[s]=new TS(n,e,s,!1),this._outlineBatches[o+s]=new TS(n,e,s,!0),this._closedColorBatches[s]=new Lm(n,yn,void 0,!0,s,!0),this._closedColorBatches[o+s]=new Lm(n,yn,void 0,!0,s,!1),this._closedMaterialBatches[s]=new Rm(n,Io,void 0,!0,s,!0),this._closedMaterialBatches[o+s]=new Rm(n,Io,void 0,!0,s,!1),this._openColorBatches[s]=new Lm(n,yn,void 0,!1,s,!0),this._openColorBatches[o+s]=new Lm(n,yn,void 0,!1,s,!1),this._openMaterialBatches[s]=new Rm(n,Io,void 0,!1,s,!0),this._openMaterialBatches[o+s]=new Rm(n,Io,void 0,!1,s,!1);let a=$n.NUMBER_OF_CLASSIFICATION_TYPES,c=new Array(a),d=[];if(r)for(s=0;s<a;++s)d.push(new tF(i,s,Io)),c[s]=new IS(i,s);else for(s=0;s<a;++s)c[s]=new IS(i,s);this._groundColorBatches=c,this._groundMaterialBatches=d,this._dynamicBatch=new Yx(n,i),this._batches=this._outlineBatches.concat(this._closedColorBatches,this._closedMaterialBatches,this._openColorBatches,this._openMaterialBatches,this._groundColorBatches,this._groundMaterialBatches,this._dynamicBatch),this._subscriptions=new Bt,this._updaterSets=new Bt,this._entityCollection=t,t.collectionChanged.addEventListener(gd.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,Ynt)}gd.registerUpdater=function(e){nI.registerUpdater(e)};gd.unregisterUpdater=function(e){nI.unregisterUpdater(e)};gd.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,h=this;for(a=s.length-1;a>-1;a--)c=s[a],d=c.id,u=this._updaterSets.get(d),u.entity===c?u.forEach(function(b){h._removeUpdater(b),h._insertUpdaterIntoBatch(e,b)}):(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 nI(c,this._scene),this._updaterSets.set(d,u),u.forEach(function(b){h._insertUpdaterIntoBatch(e,b)}),this._subscriptions.set(d,u.geometryChanged.addEventListener(gd._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let p=!0,g=this._batches,f=g.length;for(a=0;a<f;a++)p=g[a].update(e)&&p;return p};var Ont=[],Hnt=new ue;gd.prototype.getBoundingSphere=function(e,t){let n=Ont,i=Hnt,o=0,r=At.DONE,s=this._batches,a=s.length,c=e.id,d=this._updaterSets.get(c).updaters;for(let u=0;u<d.length;u++){let h=d[u];for(let p=0;p<a;p++){if(r=s[p].getBoundingSphere(h,i),r===At.PENDING)return At.PENDING;r===At.DONE&&(n[o]=ue.clone(i,n[o]),o++)}}return o===0?At.FAILED:(n.length=o,ue.fromBoundingSpheres(n,t),At.DONE)};gd.prototype.isDestroyed=function(){return!1};gd.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(gd.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]();this._subscriptions.removeAll();let o=this._updaterSets.values;for(n=o.length,e=0;e<n;e++)o[e].destroy();return this._updaterSets.removeAll(),me(this)};gd.prototype._removeUpdater=function(e){let t=this._batches,n=t.length;for(let i=0;i<n;i++)t[i].remove(e)};gd.prototype._insertUpdaterIntoBatch=function(e,t){if(t.isDynamic){this._dynamicBatch.add(e,t);return}let n;(t.outlineEnabled||t.fillEnabled)&&(n=t.shadowsProperty.getValue(e));let i=Gn.NUMBER_OF_SHADOW_MODES;if(t.outlineEnabled&&(l(t.terrainOffsetProperty)?this._outlineBatches[i+n].add(e,t):this._outlineBatches[n].add(e,t)),t.fillEnabled)if(t.onTerrain){let o=t.classificationTypeProperty.getValue(e);t.fillMaterialProperty instanceof qt?this._groundColorBatches[o].add(e,t):this._groundMaterialBatches[o].add(e,t)}else t.isClosed?t.fillMaterialProperty instanceof qt?l(t.terrainOffsetProperty)?this._closedColorBatches[i+n].add(e,t):this._closedColorBatches[n].add(e,t):l(t.terrainOffsetProperty)?this._closedMaterialBatches[i+n].add(e,t):this._closedMaterialBatches[n].add(e,t):t.fillMaterialProperty instanceof qt?l(t.terrainOffsetProperty)?this._openColorBatches[i+n].add(e,t):this._openColorBatches[n].add(e,t):l(t.terrainOffsetProperty)?this._openMaterialBatches[i+n].add(e,t):this._openMaterialBatches[n].add(e,t)};gd._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)};gd.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 nF=gd;var Ybi=y(C(),1);var znt=1,Knt="30px sans-serif",Jnt=nr.FILL,jnt=U.WHITE,qnt=U.BLACK,$nt=1,eit=!1,tit=new U(.165,.165,.165,.8),nit=new D(7,5),iit=D.ZERO,oit=m.ZERO,rit=et.NONE,sit=wi.CENTER,ait=kn.CENTER,cit=new m,lit=new U,dit=new U,uit=new U,mit=new D,hit=new m,fit=new D,pit=new zt,Ait=new zt,git=new zt,bit=new Qt;function CAe(e){this.entity=e,this.label=void 0,this.index=void 0}function F0(e,t){t.collectionChanged.addEventListener(F0.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Bt,this._onCollectionChanged(t,t.values,[],[])}F0.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._label,c,d=r.label,u=s.isShowing&&s.isAvailable(e)&&z.getValueOrDefault(a._show,e,!0),h;if(u&&(h=z.getValueOrUndefined(s._position,e,cit),c=z.getValueOrUndefined(a._text,e),u=l(h)&&l(c)),!u){P4(r,s,n);continue}z.isConstant(s._position)||(n._clusterDirty=!0);let p=!1,g=z.getValueOrDefault(a._heightReference,e,rit);l(d)||(d=n.getLabel(s),d.id=s,r.label=d,p=m.equals(d.position,h)&&d.heightReference===g),d.show=!0,d.position=h,d.text=c,d.scale=z.getValueOrDefault(a._scale,e,znt),d.font=z.getValueOrDefault(a._font,e,Knt),d.style=z.getValueOrDefault(a._style,e,Jnt),d.fillColor=z.getValueOrDefault(a._fillColor,e,jnt,lit),d.outlineColor=z.getValueOrDefault(a._outlineColor,e,qnt,dit),d.outlineWidth=z.getValueOrDefault(a._outlineWidth,e,$nt),d.showBackground=z.getValueOrDefault(a._showBackground,e,eit),d.backgroundColor=z.getValueOrDefault(a._backgroundColor,e,tit,uit),d.backgroundPadding=z.getValueOrDefault(a._backgroundPadding,e,nit,mit),d.pixelOffset=z.getValueOrDefault(a._pixelOffset,e,iit,fit),d.eyeOffset=z.getValueOrDefault(a._eyeOffset,e,oit,hit),d.heightReference=g,d.horizontalOrigin=z.getValueOrDefault(a._horizontalOrigin,e,sit),d.verticalOrigin=z.getValueOrDefault(a._verticalOrigin,e,ait),d.translucencyByDistance=z.getValueOrUndefined(a._translucencyByDistance,e,pit),d.pixelOffsetScaleByDistance=z.getValueOrUndefined(a._pixelOffsetScaleByDistance,e,Ait),d.scaleByDistance=z.getValueOrUndefined(a._scaleByDistance,e,git),d.distanceDisplayCondition=z.getValueOrUndefined(a._distanceDisplayCondition,e,bit),d.disableDepthTestDistance=z.getValueOrUndefined(a._disableDepthTestDistance,e),p&&d._updateClamping()}return!0};F0.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!l(n)||!l(n.label))return At.FAILED;let i=n.label;return t.center=m.clone(i._clampedPosition??i.position,t.center),t.radius=0,At.DONE};F0.prototype.isDestroyed=function(){return!1};F0.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(F0.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removeLabel(e[t]);return me(this)};F0.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._label)&&l(r._position)&&s.set(r.id,new CAe(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 CAe(r)):(P4(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],P4(s.get(r.id),r,a),s.remove(r.id)};function P4(e,t,n){l(e)&&(e.label=void 0,n.removeLabel(t))}var iF=F0;var u0i=y(C(),1);var yit=1,Cit=!0,xit=0,Iit=!0,_it=!0,Eit=Gn.ENABLED,Tit=et.NONE,Sit=U.RED,Lit=0,Rit=U.WHITE,Vit=Fc.HIGHLIGHT,Git=.5,Zit=new D(1,1),xAe={maximumPositionEpsilon:Number.POSITIVE_INFINITY},Bit=new X,wit=new X,IAe=new U,_Ae=new Array(4),Xit=new m;function P0(e,t){t.collectionChanged.addEventListener(P0.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._modelHash={},this._entitiesToVisualize=new Bt,this._onCollectionChanged(t,t.values,[],[])}async function Wit(e,t,n,i,o){let r=e._primitives,s=e._modelHash;try{let a=await Bh.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}}P0.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)&&z.getValueOrDefault(a._show,e,!0),h;if(u&&(h=s.computeModelMatrix(e,Bit),c=Ve.createIfNeeded(z.getValueOrUndefined(a._uri,e)),u=l(h)&&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:{...xAe}},n[s.id]=d;let f=z.getValueOrDefault(a._incrementallyLoadTextures,e,Iit),b=z.getValueOrDefault(a._environmentMapOptions,e,xAe,d.environmentMapOptionsScratch);Wit(this,s,c,f,b)}let p=d.modelPrimitive;if(!l(p))continue;p.show=!0,p.scale=z.getValueOrDefault(a._scale,e,yit),p.enableVerticalExaggeration=z.getValueOrDefault(a._enableVerticalExaggeration,e,Cit),p.minimumPixelSize=z.getValueOrDefault(a._minimumPixelSize,e,xit),p.maximumScale=z.getValueOrUndefined(a._maximumScale,e),p.modelMatrix=X.clone(h,p.modelMatrix),p.shadows=z.getValueOrDefault(a._shadows,e,Eit),p.heightReference=z.getValueOrDefault(a._heightReference,e,Tit),p.distanceDisplayCondition=z.getValueOrUndefined(a._distanceDisplayCondition,e),p.silhouetteColor=z.getValueOrDefault(a._silhouetteColor,e,Sit,IAe),p.silhouetteSize=z.getValueOrDefault(a._silhouetteSize,e,Lit),p.color=z.getValueOrDefault(a._color,e,Rit,IAe),p.colorBlendMode=z.getValueOrDefault(a._colorBlendMode,e,Vit),p.colorBlendAmount=z.getValueOrDefault(a._colorBlendAmount,e,Git),p.clippingPlanes=z.getValueOrUndefined(a._clippingPlanes,e),p.clampAnimations=z.getValueOrDefault(a._clampAnimations,e,_it),p.imageBasedLighting.imageBasedLightingFactor=z.getValueOrDefault(a._imageBasedLightingFactor,e,Zit);let g=z.getValueOrUndefined(a._lightColor,e);if(l(g)&&(U.pack(g,_Ae,0),g=m.unpack(_Ae,0,Xit)),p.lightColor=g,p.customShader=z.getValueOrUndefined(a._customShader,e),n[s.id].modelUpdated=!0,p.ready){let f=z.getValueOrDefault(a._runAnimations,e,!0);d.animationsRunning!==f&&(f?p.activeAnimations.addAll({loop:od.REPEAT}):p.activeAnimations.removeAll(),d.animationsRunning=f);let b=z.getValueOrUndefined(a._nodeTransformations,e,d.nodeTransformationsScratch);if(l(b)){let _=Object.keys(b);for(let E=0,S=_.length;E<S;++E){let R=_[E],G=b[R];if(!l(G))continue;let B=p.getNode(R);if(!l(B))continue;let w=X.fromTranslationRotationScale(G,wit);B.matrix=X.multiply(B.originalMatrix,w,w)}}let x=!1,I=z.getValueOrUndefined(a._articulations,e,d.articulationsScratch);if(l(I)){let _=Object.keys(I);for(let E=0,S=_.length;E<S;++E){let R=_[E],G=I[R];l(G)&&(x=!0,p.setArticulationStage(R,G))}}x&&p.applyArticulations()}}return!0};P0.prototype.isDestroyed=function(){return!1};P0.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(P0.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._modelHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)M4(this,e[i],t,n);return me(this)};var N5=new m,Fit=new ge;P0.prototype.getBoundingSphere=function(e,t){let n=this._modelHash[e.id];if(!l(n))return At.FAILED;if(n.loadFailed)return At.FAILED;let i=n.modelPrimitive;if(!l(i)||!i.show)return At.PENDING;if(!i.ready||!n.modelUpdated)return At.PENDING;let o=this._scene,r=o.ellipsoid??ie.default;if(i.heightReference!==et.NONE){let a=i.modelMatrix;N5.x=a[12],N5.y=a[13],N5.z=a[14];let c=r.cartesianToCartographic(N5,Fit),d=o.getHeight(c,i.heightReference);return l(d)&&(Du(i.heightReference)?c.height=d:c.height+=d),ue.clone(i.boundingSphere,t),t.center=r.cartographicToCartesian(c),At.DONE}return ue.clone(i.boundingSphere,t),At.DONE};P0.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)?(Pit(r,a),s.set(r.id,r)):(M4(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],M4(this,r,a,c),s.remove(r.id)};function M4(e,t,n,i){let o=n[t.id];l(o)&&(i.removeAndDestroy(o.modelPrimitive),delete n[t.id])}function Pit(e,t){let n=t[e.id];l(n)&&(n.nodeTransformationsScratch={},n.articulationsScratch={})}var oF=P0;var Q0i=y(C(),1);var y0i=y(C(),1);function M0(e){this._definitionChanged=new Ce,this._value=void 0,this._removeSubscription=void 0,this.setValue(e)}Object.defineProperties(M0.prototype,{isConstant:{get:function(){return z.isConstant(this._value)}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return l(this._value)?this._value.referenceFrame:eo.FIXED}}});var Mit=new j;M0.prototype.getValue=function(e,t){return l(e)||(e=j.now(Mit)),this.getValueInReferenceFrame(e,eo.FIXED,t)};M0.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))};M0.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};M0.prototype.equals=function(e){return this===e||e instanceof M0&&this._value===e._value};M0.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var up=M0;var vit=60,Nit=1,TAe=new wn,v4=new wn,N4=new wn;function EAe(e){this.entity=e,this.polyline=void 0,this.index=void 0,this.updater=void 0}function Dit(e,t,n,i,o,r,s,a,c){let d=a,u;u=e.getValueInReferenceFrame(t,r,c[d]),l(u)&&(c[d++]=u);let h=!l(o)||j.lessThanOrEquals(o,t)||j.greaterThanOrEquals(o,n),p=0,g=i.length,f=i[p],b=n,x=!1,I,_,E;for(;p<g;){if(!h&&j.greaterThanOrEquals(f,o)&&(u=e.getValueInReferenceFrame(o,r,c[d]),l(u)&&(c[d++]=u),h=!0),j.greaterThan(f,t)&&j.lessThan(f,b)&&!f.equals(o)&&(u=e.getValueInReferenceFrame(f,r,c[d]),l(u)&&(c[d++]=u)),p<g-1){if(s>0&&!x){let S=i[p+1],R=j.secondsDifference(S,f);x=R>s,x&&(I=Math.ceil(R/s),_=0,E=R/Math.max(I,2),I=Math.max(I-1,1))}if(x&&_<I){f=j.addSeconds(f,E,new j),_++;continue}}x=!1,p++,f=i[p]}return u=e.getValueInReferenceFrame(n,r,c[d]),l(u)&&(c[d++]=u),d}function Qit(e,t,n,i,o,r,s,a){let c,d=0,u=s,h=t,p=!l(i)||j.lessThanOrEquals(i,t)||j.greaterThanOrEquals(i,n);for(;j.lessThan(h,n);)!p&&j.greaterThanOrEquals(h,i)&&(p=!0,c=e.getValueInReferenceFrame(i,o,a[u]),l(c)&&(a[u]=c,u++)),c=e.getValueInReferenceFrame(h,o,a[u]),l(c)&&(a[u]=c,u++),d++,h=j.addSeconds(t,r*d,new j);return c=e.getValueInReferenceFrame(n,o,a[u]),l(c)&&(a[u]=c,u++),u}function Uit(e,t,n,i,o,r,s,a){let c,d=0,u=s,h=t,p=Math.max(r,60),g=!l(i)||j.lessThanOrEquals(i,t)||j.greaterThanOrEquals(i,n);for(;j.lessThan(h,n);)!g&&j.greaterThanOrEquals(h,i)&&(g=!0,c=e.getValueInReferenceFrame(i,o,a[u]),l(c)&&(a[u]=c,u++)),c=e.getValueInReferenceFrame(h,o,a[u]),l(c)&&(a[u]=c,u++),d++,h=j.addSeconds(t,p*d,new j);return c=e.getValueInReferenceFrame(n,o,a[u]),l(c)&&(a[u]=c,u++),u}function kit(e,t,n,i,o,r,s,a){N4.start=t,N4.stop=n;let c=s,d=e.intervals;for(let u=0;u<d.length;u++){let h=d.get(u);if(!wn.intersect(h,N4,TAe).isEmpty){let p=h.start;h.isStartIncluded||(h.isStopIncluded?p=h.stop:p=j.addSeconds(h.start,j.secondsDifference(h.stop,h.start)/2,new j));let g=e.getValueInReferenceFrame(p,o,a[c]);l(g)&&(a[c]=g,c++)}}return c}function Yit(e,t,n,i,o,r,s,a){let c=e.getValueInReferenceFrame(t,o,a[s]);return l(c)&&(a[s++]=c),s}function Oit(e,t,n,i,o,r,s,a){v4.start=t,v4.stop=n;let c=s,d=e.intervals;for(let u=0;u<d.length;u++){let h=d.get(u);if(!wn.intersect(h,v4,TAe).isEmpty){let p=h.start,g=h.stop,f=t;j.greaterThan(p,f)&&(f=p);let b=n;j.lessThan(g,b)&&(b=g),c=SAe(h.data,f,b,i,o,r,c,a)}}return c}function SAe(e,t,n,i,o,r,s,a){for(;e instanceof Ig;)e=e.resolvedProperty;if(e instanceof Oa){let c=e._property._times;s=Dit(e,t,n,c,i,o,r,s,a)}else e instanceof gZ?s=Qit(e,t,n,i,o,r,s,a):e instanceof ka?s=Oit(e,t,n,i,o,r,s,a):e instanceof _g?s=kit(e,t,n,i,o,r,s,a):e instanceof dl||e instanceof up&&z.isConstant(e)?s=Yit(e,t,n,i,o,r,s,a):s=Uit(e,t,n,i,o,r,s,a);return s}function LAe(e,t,n,i,o,r,s){l(s)||(s=[]);let a=SAe(e,t,n,i,o,r,0,s);return s.length=a,s}var Hit=new $;function rF(e,t){this._unusedIndexes=[],this._polylineCollection=new Wh,this._scene=e,this._referenceFrame=t,e.primitives.add(this._polylineCollection)}rF.prototype.update=function(e){if(this._referenceFrame===eo.INERTIAL){let t=Dt.computeIcrfToCentralBodyFixedMatrix(e,Hit);X.fromRotationTranslation(t,m.ZERO,this._polylineCollection.modelMatrix)}};rF.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 h=z.getValueOrUndefined(i._leadTime,e),p=z.getValueOrUndefined(i._trailTime,e),g=n._availability,f=l(g),b=l(h),x=l(p);if(d=f||b&&x,d){if(x&&(r=j.addSeconds(e,-p,new j)),b&&(s=j.addSeconds(e,h,new j)),f){let I=g.start,_=g.stop;(!x||j.greaterThan(I,r))&&(r=I),(!b||j.lessThan(_,s))&&(s=_)}d=j.lessThan(r,s)}}if(!d){l(c)&&(this._unusedIndexes.push(t.index),t.polyline=void 0,c.show=!1,t.index=void 0);return}if(!l(c)){let h=this._unusedIndexes;if(h.length>0){let g=h.pop();c=this._polylineCollection.get(g),t.index=g}else t.index=this._polylineCollection.length,c=this._polylineCollection.add();c.id=n,t.polyline=c}let u=z.getValueOrDefault(i._resolution,e,vit);c.show=!0,c.positions=LAe(o,r,s,e,this._referenceFrame,u,c.positions.slice()),c.material=dr.getValue(e,i._material,c.material),c.width=z.getValueOrDefault(i._width,e,Nit),c.distanceDisplayCondition=z.getValueOrUndefined(i._distanceDisplayCondition,e,c.distanceDisplayCondition)};rF.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)};rF.prototype.destroy=function(){return this._scene.primitives.remove(this._polylineCollection),me(this)};function v0(e,t){t.collectionChanged.addEventListener(v0.prototype._onCollectionChanged,this),this._scene=e,this._updaters={},this._entityCollection=t,this._items=new Bt,this._onCollectionChanged(t,t.values,[],[])}v0.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],a=r.entity._position,c=r.updater,d=eo.FIXED;this._scene.mode===re.SCENE3D&&(d=a.referenceFrame);let u=this._updaters[d];if(c===u&&l(u)){u.updateObject(e,r);continue}l(c)&&c.removeObject(r),l(u)||(u=new rF(this._scene,d),u.update(e),this._updaters[d]=u),r.updater=u,l(u)&&u.updateObject(e,r)}return!0};v0.prototype.isDestroyed=function(){return!1};v0.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(v0.prototype._onCollectionChanged,this);let e=this._updaters;for(let t in e)e.hasOwnProperty(t)&&e[t].destroy();return me(this)};v0.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 EAe(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 EAe(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))};v0._subSample=LAe;var sF=v0;var nyi=y(C(),1);var RAe=U.WHITE,VAe=U.BLACK,GAe=0,ZAe=1,BAe=0,wAe=Ir.NONE,XAe=new U,zit=new m,WAe=new U,FAe=new zt,PAe=new zt,MAe=new Qt;function vAe(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 N0(e,t){t.collectionChanged.addEventListener(N0.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Bt,this._onCollectionChanged(t,t.values,[],[])}N0.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=z.getValueOrDefault(a._heightReference,e,et.NONE),h=s.isShowing&&s.isAvailable(e)&&z.getValueOrDefault(a._show,e,!0),p;if(h&&(p=z.getValueOrUndefined(s._position,e,zit),h=l(p)),!h){aF(r,s,n);continue}z.isConstant(s._position)||(n._clusterDirty=!0);let g=!1,f=!1;if(u!==et.NONE&&!l(d)?(l(c)&&(aF(r,s,n),c=void 0),d=n.getBillboard(s),d.id=s,d.image=void 0,r.billboard=d,g=!0,f=m.equals(d.position,p)&&d.heightReference===u):u===et.NONE&&!l(c)&&(l(d)&&(aF(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=z.getValueOrUndefined(a._scaleByDistance,e,FAe),c.translucencyByDistance=z.getValueOrUndefined(a._translucencyByDistance,e,PAe),c.color=z.getValueOrDefault(a._color,e,RAe,XAe),c.outlineColor=z.getValueOrDefault(a._outlineColor,e,VAe,WAe),c.outlineWidth=z.getValueOrDefault(a._outlineWidth,e,GAe),c.pixelSize=z.getValueOrDefault(a._pixelSize,e,ZAe),c.distanceDisplayCondition=z.getValueOrUndefined(a._distanceDisplayCondition,e,MAe),c.disableDepthTestDistance=z.getValueOrDefault(a._disableDepthTestDistance,e,BAe),c.splitDirection=z.getValueOrDefault(a._splitDirection,e,wAe);else if(l(d)){d.show=!0,d.position=p,d.scaleByDistance=z.getValueOrUndefined(a._scaleByDistance,e,FAe),d.translucencyByDistance=z.getValueOrUndefined(a._translucencyByDistance,e,PAe),d.distanceDisplayCondition=z.getValueOrUndefined(a._distanceDisplayCondition,e,MAe),d.disableDepthTestDistance=z.getValueOrDefault(a._disableDepthTestDistance,e,BAe),d.splitDirection=z.getValueOrDefault(a._splitDirection,e,wAe),d.heightReference=u;let b=z.getValueOrDefault(a._color,e,RAe,XAe),x=z.getValueOrDefault(a._outlineColor,e,VAe,WAe),I=Math.round(z.getValueOrDefault(a._outlineWidth,e,GAe)),_=Math.max(1,Math.round(z.getValueOrDefault(a._pixelSize,e,ZAe)));if(I>0?(d.scale=1,g=g||I!==r.outlineWidth||_!==r.pixelSize||!U.equals(b,r.color)||!U.equals(x,r.outlineColor)):(d.scale=_/50,_=50,g=g||I!==r.outlineWidth||!U.equals(b,r.color)||!U.equals(x,r.outlineColor)),g){r.color=U.clone(b,r.color),r.outlineColor=U.clone(x,r.outlineColor),r.pixelSize=_,r.outlineWidth=I;let E=b.alpha,S=b.toCssColorString(),R=x.toCssColorString(),G=JSON.stringify([S,_,R,I]);d.setImage(G,fx(E,S,R,I,_))}f&&d._updateClamping()}}return!0};N0.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!l(n)||!(l(n.pointPrimitive)||l(n.billboard)))return At.FAILED;if(l(n.pointPrimitive))t.center=m.clone(n.pointPrimitive.position,t.center);else{let i=n.billboard;if(!l(i._clampedPosition))return At.PENDING;t.center=m.clone(i._clampedPosition,t.center)}return t.radius=0,At.DONE};N0.prototype.isDestroyed=function(){return!1};N0.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(N0.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removePoint(e[t]);return me(this)};N0.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 vAe(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 vAe(r)):(aF(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],aF(s.get(r.id),r,a),s.remove(r.id)};function aF(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 cF=N0;var ZCi=y(C(),1);var qyi=y(C(),1);var Iyi=y(C(),1);var kAe=[];function Kit(e,t,n,i,o){let r=kAe;r.length=o;let s,a=n.red,c=n.green,d=n.blue,u=n.alpha,h=i.red,p=i.green,g=i.blue,f=i.alpha;if(U.equals(n,i)){for(s=0;s<o;s++)r[s]=U.clone(n);return r}let b=(h-a)/o,x=(p-c)/o,I=(g-d)/o,_=(f-u)/o;for(s=0;s<o;s++)r[s]=new U(a+s*b,c+s*x,d+s*I,u+s*_);return r}function lF(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.colors,i=e.width??1,o=e.colorsPerVertex??!1;this._positions=t,this._colors=n,this._width=i,this._colorsPerVertex=o,this._vertexFormat=we.clone(e.vertexFormat??we.DEFAULT),this._arcType=e.arcType??dn.GEODESIC,this._granularity=e.granularity??Z.RADIANS_PER_DEGREE,this._ellipsoid=ie.clone(e.ellipsoid??ie.default),this._workerName="createPolylineGeometry";let r=1+t.length*m.packedLength;r+=l(n)?1+n.length*U.packedLength:1,this.packedLength=r+ie.packedLength+we.packedLength+4}lF.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._colors;for(r=l(s)?s.length:0,t[n++]=r,i=0;i<r;++i,n+=U.packedLength)U.pack(s[i],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,we.pack(e._vertexFormat,t,n),n+=we.packedLength,t[n++]=e._width,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t};var YAe=ie.clone(ie.UNIT_SPHERE),OAe=new we,rI={positions:void 0,colors:void 0,ellipsoid:YAe,vertexFormat:OAe,width:void 0,colorsPerVertex:void 0,arcType:void 0,granularity:void 0};lF.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=o>0?new Array(o):void 0;for(i=0;i<o;++i,t+=U.packedLength)s[i]=U.unpack(e,t);let a=ie.unpack(e,t,YAe);t+=ie.packedLength;let c=we.unpack(e,t,OAe);t+=we.packedLength;let d=e[t++],u=e[t++]===1,h=e[t++],p=e[t];return l(n)?(n._positions=r,n._colors=s,n._ellipsoid=ie.clone(a,n._ellipsoid),n._vertexFormat=we.clone(c,n._vertexFormat),n._width=d,n._colorsPerVertex=u,n._arcType=h,n._granularity=p,n):(rI.positions=r,rI.colors=s,rI.width=d,rI.colorsPerVertex=u,rI.arcType=h,rI.granularity=p,new lF(rI))};var NAe=new m,DAe=new m,QAe=new m,UAe=new m;lF.createGeometry=function(e){let t=e._width,n=e._vertexFormat,i=e._colors,o=e._colorsPerVertex,r=e._arcType,s=e._granularity,a=e._ellipsoid,c,d,u,h=[],p=Xo(e._positions,m.equalsEpsilon,!1,h);if(l(i)&&h.length>0){let W=0,M=h[0];i=i.filter(function(Q,N){let k=!1;return o?k=N===M||N===0&&M===1:k=N+1===M,k?(W++,M=h[W],!1):!0})}let g=p.length;if(g<2||t<=0)return;if(r===dn.GEODESIC||r===dn.RHUMB){let W,M;r===dn.GEODESIC?(W=Z.chordLength(s,a.maximumRadius),M=Oi.numberOfPoints):(W=s,M=Oi.numberOfPointsRhumbLine);let Q=Oi.extractHeights(p,a);if(l(i)){let N=1;for(c=0;c<g-1;++c)N+=M(p[c],p[c+1],W);let k=new Array(N),v=0;for(c=0;c<g-1;++c){let O=p[c],H=p[c+1],ee=i[c],K=M(O,H,W);if(o&&c<N){let te=i[c+1],q=Kit(O,H,ee,te,K),pe=q.length;for(d=0;d<pe;++d)k[v++]=q[d]}else for(d=0;d<K;++d)k[v++]=U.clone(ee)}k[v]=U.clone(i[i.length-1]),i=k,kAe.length=0}r===dn.GEODESIC?p=Oi.generateCartesianArc({positions:p,minDistance:W,ellipsoid:a,height:Q}):p=Oi.generateCartesianRhumbArc({positions:p,granularity:W,ellipsoid:a,height:Q})}g=p.length;let f=g*4-4,b=new Float64Array(f*3),x=new Float64Array(f*3),I=new Float64Array(f*3),_=new Float32Array(f*2),E=n.st?new Float32Array(f*2):void 0,S=l(i)?new Uint8Array(f*4):void 0,R=0,G=0,B=0,w=0,F;for(d=0;d<g;++d){d===0?(F=NAe,m.subtract(p[0],p[1],F),m.add(p[0],F,F)):F=p[d-1],m.clone(F,QAe),m.clone(p[d],DAe),d===g-1?(F=NAe,m.subtract(p[g-1],p[g-2],F),m.add(p[g-1],F,F)):F=p[d+1],m.clone(F,UAe);let W,M;l(S)&&(d!==0&&!o?W=i[d-1]:W=i[d],d!==g-1&&(M=i[d]));let Q=d===0?2:0,N=d===g-1?2:4;for(u=Q;u<N;++u){m.pack(DAe,b,R),m.pack(QAe,x,R),m.pack(UAe,I,R),R+=3;let k=u-2<0?-1:1;if(_[G++]=2*(u%2)-1,_[G++]=k*t,n.st&&(E[B++]=d/(g-1),E[B++]=Math.max(_[G-2],0)),l(S)){let v=u<2?W:M;S[w++]=U.floatToByte(v.red),S[w++]=U.floatToByte(v.green),S[w++]=U.floatToByte(v.blue),S[w++]=U.floatToByte(v.alpha)}}}let P=new xn;P.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:b}),P.prevPosition=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:x}),P.nextPosition=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:I}),P.expandAndWidth=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:_}),n.st&&(P.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:E})),l(S)&&(P.color=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:4,values:S,normalize:!0}));let A=Me.createTypedArray(f,g*6-6),T=0,L=0,V=g-1;for(d=0;d<V;++d)A[L++]=T,A[L++]=T+2,A[L++]=T+1,A[L++]=T+1,A[L++]=T+2,A[L++]=T+3,T+=4;return new pt({attributes:P,indices:A,primitiveType:We.TRIANGLES,boundingSphere:ue.fromPoints(p),geometryType:Qu.POLYLINES})};var Zg=lF;var Jit=new di(0),D5={},HAe=new U,jit=new qt(U.WHITE),qit=new di(!0),$it=new di(Gn.DISABLED),eot=new di(new Qt),tot=new di($n.BOTH);function not(){this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function iot(){this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function $h(e,t){this._entity=e,this._scene=t,this._entitySubscription=e.definitionChanged.addEventListener($h.prototype._onEntityPropertyChanged,this),this._fillEnabled=!1,this._dynamic=!1,this._geometryChanged=new Ce,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 not,this._groundGeometryOptions=new iot,this._id=`polyline-${e.id}`,this._clampToGround=!1,this._supportsPolylinesOnTerrain=ur.supportsPolylinesOnTerrain(t),this._zIndex=0,this._onEntityPropertyChanged(e,"polyline",e.polyline,void 0)}Object.defineProperties($h.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)&&z.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}}});$h.prototype.isOutlineVisible=function(e){return!1};$h.prototype.isFilled=function(e){let t=this._entity;return(this._fillEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e))??!1};$h.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=jn.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r},a;return this._materialProperty instanceof qt&&(l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,HAe)),l(a)||(a=U.WHITE),s.color=tn.fromColor(a)),this.clampToGround?new wt({id:t,geometry:new cC(this._groundGeometryOptions),attributes:s}):(l(this._depthFailMaterialProperty)&&this._depthFailMaterialProperty instanceof qt&&(l(this._depthFailMaterialProperty.color)&&(this._depthFailMaterialProperty.color.isConstant||n)&&(a=this._depthFailMaterialProperty.color.getValue(e,HAe)),l(a)||(a=U.WHITE),s.depthFailColor=tn.fromColor(a)),new wt({id:t,geometry:new Zg(this._geometryOptions),attributes:s}))};$h.prototype.createOutlineGeometryInstance=function(e){};$h.prototype.isDestroyed=function(){return!1};$h.prototype.destroy=function(){this._entitySubscription(),me(this)};$h.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(ze.MINIMUM_VALUE)||!l(r)){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let a=o.zIndex,c=o.material??jit,d=c instanceof qt;this._materialProperty=c,this._depthFailMaterialProperty=o.depthFailMaterial,this._showProperty=s??qit,this._shadowsProperty=o.shadows??$it,this._distanceDisplayConditionProperty=o.distanceDisplayCondition??eot,this._classificationTypeProperty=o.classificationType??tot,this._fillEnabled=!0,this._zIndex=a??Jit;let u=o.width,h=o.arcType,p=o.clampToGround,g=o.granularity;if(!r.isConstant||!z.isConstant(u)||!z.isConstant(h)||!z.isConstant(g)||!z.isConstant(p)||!z.isConstant(a))this._dynamic||(this._dynamic=!0,this._geometryChanged.raiseEvent(this));else{let f=this._geometryOptions,b=r.getValue(ze.MINIMUM_VALUE,f.positions);if(!l(b)||b.length<2){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let x;d&&(!l(this._depthFailMaterialProperty)||this._depthFailMaterialProperty instanceof qt)?x=bs.VERTEX_FORMAT:x=Pa.VERTEX_FORMAT,f.vertexFormat=x,f.positions=b,f.width=l(u)?u.getValue(ze.MINIMUM_VALUE):void 0,f.arcType=l(h)?h.getValue(ze.MINIMUM_VALUE):void 0,f.granularity=l(g)?g.getValue(ze.MINIMUM_VALUE):void 0;let I=this._groundGeometryOptions;I.positions=b,I.width=f.width,I.arcType=f.arcType,I.granularity=f.granularity,this._clampToGround=l(p)?p.getValue(ze.MINIMUM_VALUE):!1,!this._clampToGround&&l(a)&&xt("Entity polylines must have clampToGround: true when using zIndex. zIndex will be ignored."),this._dynamic=!1,this._geometryChanged.raiseEvent(this)}};$h.prototype.createDynamicUpdater=function(e,t){return new dF(e,t,this)};var SS={positions:void 0,granularity:void 0,height:void 0,ellipsoid:void 0};function dF(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 zAe(e){if(l(e._line))return e._line;let t=e._primitives,n=e._geometryUpdater._scene.id+t._guid,i=D5[n];!l(i)||i.isDestroyed()?(i=new Wh,D5[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}dF.prototype.update=function(e){let t=this._geometryUpdater,n=t._entity,i=n.polyline,o=i.positions,r=z.getValueOrUndefined(o,e,this._positions);t._clampToGround=z.getValueOrDefault(i._clampToGround,e,!1),t._groundGeometryOptions.positions=r,t._groundGeometryOptions.width=z.getValueOrDefault(i._width,e,1),t._groundGeometryOptions.arcType=z.getValueOrDefault(i._arcType,e,dn.GEODESIC),t._groundGeometryOptions.granularity=z.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)||!z.getValueOrDefault(i._show,e,!0)||!l(r)||r.length<2)return;let h=t.fillMaterialProperty,p;if(h instanceof qt)p=new bs;else{let g=dr.getValue(e,h,this._material);p=new Pa({material:g,translucent:g.isTranslucent()}),this._material=g}this._groundPolylinePrimitive=s.add(new ch({geometryInstances:t.createFillGeometryInstance(e),appearance:p,classificationType:t.classificationTypeProperty.getValue(e),asynchronous:!1}),z.getValueOrUndefined(t.zIndex,e)),l(this._line)&&(this._line.show=!1);return}let a=zAe(this);if(!n.isShowing||!n.isAvailable(e)||!z.getValueOrDefault(i._show,e,!0)){a.show=!1;return}if(!l(r)||r.length<2){a.show=!1;return}let c=dn.GEODESIC;c=z.getValueOrDefault(i._arcType,e,c);let d=t._scene.globe,u=t._scene.ellipsoid;c!==dn.NONE&&l(d)&&(SS.ellipsoid=u,SS.positions=r,SS.granularity=z.getValueOrUndefined(i._granularity,e),SS.height=Oi.extractHeights(r,u),c===dn.GEODESIC?r=Oi.generateCartesianArc(SS):r=Oi.generateCartesianRhumbArc(SS)),a.show=!0,a.positions=r.slice(),a.material=dr.getValue(e,t.fillMaterialProperty,a.material),a.width=z.getValueOrDefault(i._width,e,1),a.distanceDisplayCondition=z.getValueOrUndefined(i._distanceDisplayCondition,e,a.distanceDisplayCondition)};dF.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 ue.clone(n.boundingSphere,e),At.DONE}return l(t)&&!t.ready?At.PENDING:At.DONE}else{let t=zAe(this);if(t.show&&t.positions.length>0)return ue.fromPoints(t.positions,e),At.DONE}return At.FAILED};dF.prototype.isDestroyed=function(){return!1};dF.prototype.destroy=function(){let t=this._geometryUpdater._scene.id+this._primitives._guid,n=D5[t];l(n)&&(n.remove(this._line),n.length===0&&(this._primitives.removeAndDestroy(n),delete D5[t])),l(this._groundPolylinePrimitive)&&this._groundPrimitives.remove(this._groundPolylinePrimitive),me(this)};var uF=$h;var fCi=y(C(),1);var oot=new U,rot=new Qt,sot=new Qt;function ef(e,t,n,i,o){let r;n instanceof qt?r=bs:r=Pa,this.orderedGroundPrimitives=e,this.classificationType=t,this.appearanceType=r,this.materialProperty=n,this.updaters=new Bt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Bt,this.material=void 0,this.updatersWithAttributes=new Bt,this.attributes=new Bt,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(ef.prototype.onMaterialChanged,this),this.subscriptions=new Bt,this.showsUpdated=new Bt,this.zIndex=i,this._asynchronous=o}ef.prototype.onMaterialChanged=function(){this.invalidated=!0};ef.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty;return n===t||n instanceof qt&&t instanceof qt?!0:l(t)&&t.equals(n)};ef.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||!z.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};ef.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)),!0}return!1};ef.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),n=new ch({show:!1,asynchronous:this._asynchronous,geometryInstances:o.slice(),appearance:new this.appearanceType,classificationType:this.classificationType}),this.appearanceType===Pa&&(this.material=dr.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===Pa&&(this.material=dr.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),h=this.attributes.get(u.id.id);if(l(h)||(h=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!c.fillMaterialProperty.isConstant){let b=c.fillMaterialProperty.color,x=z.getValueOrDefault(b,e,U.WHITE,oot);U.equals(h._lastColor,x)||(h._lastColor=U.clone(x,h._lastColor),h.color=tn.toValue(x,h.color))}let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),g=h.show[0]===1;p!==g&&(h.show=Vn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!z.isConstant(f)){let b=z.getValueOrDefault(f,e,sot,rot);Qt.equals(b,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=Qt.clone(b,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=jn.toValue(b,h.distanceDisplayCondition))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};ef.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()};ef.prototype.contains=function(e){return this.updaters.contains(e.id)};ef.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return At.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?At.FAILED:(i.boundingSphere.clone(t),At.DONE)};ef.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 LS(e,t,n){this._items=[],this._orderedGroundPrimitives=e,this._classificationType=t,this._asynchronous=n??!0}LS.prototype.add=function(e,t){let n=this._items,i=n.length,o=t.createFillGeometryInstance(e),r=z.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 ef(this._orderedGroundPrimitives,this._classificationType,t.fillMaterialProperty,r,this._asynchronous);s.add(e,t,o),n.push(s)};LS.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}}};LS.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};LS.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 At.FAILED};LS.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 mF=LS;var aot=[];function KAe(e,t){let n=e._batches,i=n.length;for(let o=0;o<i;o++)n[o].remove(t)}function JAe(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 qt?1:2);let r;l(i)&&(r=i+o*Gn.NUMBER_OF_SHADOW_MODES),n.fillEnabled&&(n.fillMaterialProperty instanceof qt?e._colorBatches[r].add(t,n):e._materialBatches[r].add(t,n))}function mp(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 Bt,this._removedObjects=new Bt,this._changedObjects=new Bt;let o,r=Gn.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 Lm(n,bs,void 0,!1,o),this._materialBatches[o]=new Rm(n,Pa,void 0,!1,o),this._colorBatches[o+r]=new Lm(n,bs,bs,!1,o),this._materialBatches[o+r]=new Rm(n,Pa,bs,!1,o),this._colorBatches[o+r*2]=new Lm(n,bs,Pa,!1,o),this._materialBatches[o+r*2]=new Rm(n,Pa,Pa,!1,o);this._dynamicBatch=new Yx(n,i);let s=$n.NUMBER_OF_CLASSIFICATION_TYPES;for(this._groundBatches=new Array(s),o=0;o<s;++o)this._groundBatches[o]=new mF(i,o);this._batches=this._colorBatches.concat(this._materialBatches,this._dynamicBatch,this._groundBatches),this._subscriptions=new Bt,this._updaters=new Bt,this._entityCollection=t,t.collectionChanged.addEventListener(mp.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,aot)}mp.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?(KAe(this,u),JAe(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),KAe(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 uF(c,this._scene),this._updaters.set(d,u),JAe(this,e,u),this._subscriptions.set(d,u.geometryChanged.addEventListener(mp._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let h=!0,p=this._batches,g=p.length;for(a=0;a<g;a++)h=p[a].update(e)&&h;return h};var cot=[],lot=new ue;mp.prototype.getBoundingSphere=function(e,t){let n=cot,i=lot,o=0,r=At.DONE,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===At.PENDING)return At.PENDING;r===At.DONE&&(n[o]=ue.clone(i,n[o]),o++)}return o===0?At.FAILED:(n.length=o,ue.fromBoundingSpheres(n,t),At.DONE)};mp.prototype.isDestroyed=function(){return!1};mp.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(mp.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)};mp._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)};mp.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 hF=mp;function bd(e){cl.initializeTerrainHeights(),ch.initializeTerrainHeights();let t=e.scene,n=e.dataSourceCollection;this._eventHelper=new Lr,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??bd.defaultVisualizersCallback;let i=!1,o=new Wl,r=new Wl;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 mW;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 RS=[];bd.registerVisualizer=function(e){RS.includes(e)||RS.push(e)};bd.unregisterVisualizer=function(e){if(RS.includes(e)){let t=RS.indexOf(e);RS.splice(t,1)}};bd.defaultVisualizersCallback=function(e,t,n){let i=n.entities;return[new h1(t,i),new nF(e,i,n._primitives,n._groundPrimitives),new iF(t,i),new oF(e,i),new j2(e,i),new cF(t,i),new sF(e,i),new hF(e,i,n._primitives,n._groundPrimitives),...RS.map(o=>new o(e,i))]};Object.defineProperties(bd.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}}});bd.prototype.isDestroyed=function(){return!1};bd.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)};bd.prototype.update=function(e){if(!Si.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};bd.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 dot=[],uot=new ue;bd.prototype.getBoundingSphere=function(e,t,n){if(!this._ready)return At.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 g=p.get(i);if(g.entities.contains(e)){r=g;break}}}if(!l(r))return At.FAILED;let s=dot,a=uot,c=0,d=At.DONE,u=r._visualizers,h=u.length;for(i=0;i<h;i++){let p=u[i];if(l(p.getBoundingSphere)){if(d=u[i].getBoundingSphere(e,a),!t&&d===At.PENDING)return At.PENDING;d===At.DONE&&(s[c]=ue.clone(a,s[c]),c++)}}return c===0?At.FAILED:(s.length=c,ue.fromBoundingSpheres(s,n),At.DONE)};bd.prototype._onDataSourceAdded=function(e,t){let n=this._scene,i=this._primitives,o=this._groundPrimitives,r=i.add(new Wl),s=o.add(new LW);t._primitives=r,t._groundPrimitives=s;let a=t.clustering;a._initialize(n),r.add(a),t._visualizers=this._visualizersCallback(n,a,t)};bd.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};bd.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 fF=bd;var Axi=y(C(),1);var txi=y(C(),1);function D4(e,t,n){this.heading=e??0,this.pitch=t??0,this.range=n??0}D4.clone=function(e,t){if(l(e))return l(t)||(t=new D4),t.heading=e.heading,t.pitch=e.pitch,t.range=e.range,t};var Vm=D4;var jAe=new $,qAe=new $,$Ae=new $,mot=new X,Q5=new m,ege=new m,Q4=new m,U4=new m,tge=new m,nge=new m,hot=new Pe,fot=new m,pot=new $,VS=new j,Aot=1.25;function got(e,t,n,i,o,r,s,a,c,d){let u=e.scene.mode,h=o.getValue(c,e._lastCartesian);if(l(h)){let p=!1,g=!1,f,b,x;if(u===re.SCENE3D){j.addSeconds(c,.001,VS);let B=o.getValue(VS,Q5);if(l(B)||(j.addSeconds(c,-.001,VS),B=o.getValue(VS,Q5),g=!0),l(B)){let w=Dt.computeFixedToIcrfMatrix(c,jAe),F=Dt.computeFixedToIcrfMatrix(VS,qAe),P;!l(w)||!l(F)?(P=Dt.computeTemeToPseudoFixedMatrix(c,$Ae),w=$.transpose(P,jAe),F=Dt.computeTemeToPseudoFixedMatrix(VS,qAe),$.transpose(F,F)):P=$.transpose(w,$Ae);let A=$.multiplyByVector(w,h,tge),T=$.multiplyByVector(F,B,nge);m.subtract(A,T,U4);let L=m.magnitude(U4)*1e3,V=Z.GRAVITATIONALPARAMETER,W=-V/(L*L-2*V/m.magnitude(A));W<0||W>Aot*d.maximumRadius?(f=ege,m.normalize(h,f),m.negate(f,f),x=m.clone(m.UNIT_Z,Q4),b=m.cross(x,f,Q5),m.magnitude(b)>Z.EPSILON7&&(m.normalize(f,f),m.normalize(b,b),x=m.cross(f,b,Q4),m.normalize(x,x),p=!0)):m.equalsEpsilon(h,B,Z.EPSILON7)||(x=ege,m.normalize(A,x),m.normalize(T,T),b=m.cross(x,T,Q4),g&&(b=m.multiplyByScalar(b,-1,b)),m.equalsEpsilon(b,m.ZERO,Z.EPSILON7)||(f=m.cross(b,x,Q5),$.multiplyByVector(P,f,f),$.multiplyByVector(P,b,b),$.multiplyByVector(P,x,x),m.normalize(f,f),m.normalize(b,b),m.normalize(x,x),p=!0))}}l(e.boundingSphere)&&(h=e.boundingSphere.center);let I,_,E;i&&(I=m.clone(t.position,U4),_=m.clone(t.direction,tge),E=m.clone(t.up,nge));let S=mot,R;l(s)&&(R=s.getValue(c,hot));let G=r.getValue(c,fot);if(a===rA.INERTIAL&&l(R))X.fromTranslationQuaternionRotationScale(h,R,m.ONE,S);else if(a===rA.VELOCITY&&l(G)){let B=Dt.rotationMatrixFromPositionVelocity(h,G,d,pot);X.fromRotationTranslation(B,h,S)}else a===rA.ENU||!p?Dt.eastNorthUpToFixedFrame(h,d,S):(S[0]=f.x,S[1]=f.y,S[2]=f.z,S[3]=0,S[4]=b.x,S[5]=b.y,S[6]=b.z,S[7]=0,S[8]=x.x,S[9]=x.y,S[10]=x.z,S[11]=0,S[12]=h.x,S[13]=h.y,S[14]=h.z,S[15]=0);t._setTransform(S),i&&(m.clone(I,t.position),m.clone(_,t.direction),m.clone(E,t.up),m.cross(_,E,t.right))}if(n){let p=u===re.SCENE2D||m.equals(e._offset3D,m.ZERO)?void 0:e._offset3D;t.lookAtTransform(t.transform,p)}}function pF(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 m,this._defaultOffset3D=void 0,this._velocityProperty=new Tg(e.position,!0),this._offset3D=new m}Object.defineProperties(pF,{defaultOffset3D:{get:function(){return this._defaultOffset3D},set:function(e){this._defaultOffset3D=m.clone(e,new m)}}});pF.defaultOffset3D=new m(-14e3,3500,3500);var U5=new Vm,bot=new m;pF.prototype.update=function(e,t){let n=this.scene,i=this.ellipsoid,o=n.mode;if(o===re.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,h=o!==this._mode,p=n.camera,g=u||h,f=!0;if(u){let b=r.viewFrom,x=l(b);if(!x&&l(t)){U5.pitch=-Z.PI_OVER_FOUR,U5.range=0;let I=a.getValue(e,bot);if(l(I)){let _=2-1/Math.max(1,m.magnitude(I)/i.maximumRadius);U5.pitch*=_}p.viewBoundingSphere(t,U5),this.boundingSphere=t,g=!1,f=!1}else(!x||!l(b.getValue(e,this._offset3D)))&&m.clone(pF._defaultOffset3D,this._offset3D)}else!h&&this._mode!==re.SCENE2D&&m.clone(p.position,this._offset3D);this._lastEntity=r,this._mode=o,got(this,p,g,f,a,c,d,s,e,i)};var AF=pF;var zIi=y(C(),1);var _xi=y(C(),1);function bF(){this._cache={}}bF.prototype.fromColor=function(e,t){return k5(void 0,void 0,e,t,this._cache)};bF.prototype.fromUrl=function(e,t,n){return k5(e,void 0,t,n,this._cache)};bF.prototype.fromMakiIconId=function(e,t,n){return k5(hn(`Assets/Textures/maki/${encodeURIComponent(e)}.png`),void 0,t,n,this._cache)};bF.prototype.fromText=function(e,t,n){return k5(void 0,e,t,n,this._cache)};var yot=new U;function Cot(e,t,n){e.save(),e.scale(n/24,n/24),e.fillStyle=t.toCssColorString(),e.strokeStyle=t.brighten(.6,yot).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 ige(e,t,n){let i=n/2.5,o=i,r=i;t.width>t.height?r=i*(t.height/t.width):t.width<t.height&&(o=i*(t.width/t.height));let s=Math.round((n-o)/2),a=Math.round(7/24*n-r/2);e.globalCompositeOperation="destination-out",e.drawImage(t,s-1,a,o,r),e.drawImage(t,s,a-1,o,r),e.drawImage(t,s+1,a,o,r),e.drawImage(t,s,a+1,o,r),e.globalCompositeOperation="destination-over",e.fillStyle=U.BLACK.toCssColorString(),e.fillRect(s-1,a-1,o+2,r+2),e.globalCompositeOperation="destination-out",e.drawImage(t,s,a,o,r),e.globalCompositeOperation="destination-over",e.fillStyle=U.WHITE.toCssColorString(),e.fillRect(s-1,a-2,o+2,r+2)}var gF=new Array(4);function k5(e,t,n,i,o){gF[0]=e,gF[1]=t,gF[2]=n,gF[3]=i;let r=JSON.stringify(gF),s=o[r];if(l(s))return s;let a=document.createElement("canvas");a.width=i,a.height=i;let c=a.getContext("2d");if(Cot(c,n,i),l(e)){let u=Ve.createIfNeeded(e).fetchImage().then(function(h){return ige(c,h,i),o[r]=a,a});return o[r]=u,u}else if(l(t)){let d=Ax(t,{font:`bold ${i}px sans-serif`});ige(c,d,i)}return o[r]=a,a}var Bg=bF;var hIi=y(C());var Zxi=y(C());var Rxi=y(C());var Txi=y(C());function k4(e){return e}function Y5(e){if(e==null)return k4;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,h=new Array(u);for(h[0]=(t+=a[0])*i+r,h[1]=(n+=a[1])*o+s;d<u;)h[d]=a[d],++d;return h}}var Pxi=y(C());var wxi=y(C());function oge(e,t){for(var n,i=e.length,o=i-t;o<--i;)n=e[o],e[o++]=e[i],e[i]=n}function Y4(e,t){return typeof t=="string"&&(t=e.objects[t]),t.type==="GeometryCollection"?{type:"FeatureCollection",features:t.geometries.map(function(n){return rge(e,n)})}:rge(e,t)}function rge(e,t){var n=t.id,i=t.bbox,o=t.properties==null?{}:t.properties,r=O4(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 O4(e,t){var n=Y5(e.transform),i=e.arcs;function o(u,h){h.length&&h.pop();for(var p=i[u<0?~u:u],g=0,f=p.length;g<f;++g)h.push(n(p[g],g));u<0&&oge(h,f)}function r(u){return n(u)}function s(u){for(var h=[],p=0,g=u.length;p<g;++p)o(u[p],h);return h.length<2&&h.push(h[0]),h}function a(u){for(var h=s(u);h.length<4;)h.push(h[0]);return h}function c(u){return u.map(a)}function d(u){var h=u.type,p;switch(h){case"GeometryCollection":return{type:h,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:h,coordinates:p}}return d(t)}var Uxi=y(C());var vxi=y(C());var Hxi=y(C());var $xi=y(C());var Kxi=y(C());var sIi=y(C());var nIi=y(C());function O5(e){return m.fromDegrees(e[0],e[1],e[2])}var H4={"urn:ogc:def:crs:OGC:1.3:CRS84":O5,"EPSG:4326":O5,"urn:ogc:def:crs:EPSG::4326":O5},sge={},age={},z4=48,K4,J4=U.ROYALBLUE,j4=U.YELLOW,q4=2,$4=U.fromBytes(255,255,0,100),ej=!1,Tot={small:24,medium:48,large:64},Sot=["title","description","marker-size","marker-symbol","marker-color","stroke","stroke-opacity","stroke-width","fill","fill-opacity"];function cge(e,t){let n="";for(let i in e)if(e.hasOwnProperty(i)){if(i===t||Sot.indexOf(i)!==-1)continue;let o=e[i];l(o)&&(typeof o=="object"?n+=`<tr><th>${i}</th><td>${cge(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 Lot(e,t,n){let i;return function(o,r){return l(i)||(i=e(t,n)),i}}function Rot(e,t){return new hh(Lot(cge,e,t),!0)}function H5(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 h=u.toLowerCase();if(d>1&&h==="title"){d=1,s=u;break}else d>2&&h==="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 di(c):n(r,s))}return o}function tj(e,t){let n=new Array(e.length);for(let i=0;i<e.length;i++)n[i]=t(e[i]);return n}var lge={Feature:uge,FeatureCollection:Vot,GeometryCollection:mge,LineString:gge,MultiLineString:bge,MultiPoint:pge,MultiPolygon:xge,Point:fge,Polygon:Cge,Topology:Ige},dge={GeometryCollection:mge,LineString:gge,MultiLineString:bge,MultiPoint:pge,MultiPolygon:xge,Point:fge,Polygon:Cge,Topology:Ige};function uge(e,t,n,i,o){if(t.geometry===null){H5(t,e._entityCollection,o.describe);return}if(!l(t.geometry))throw new de("feature.geometry is required.");let r=t.geometry.type,s=dge[r];if(!l(s))throw new de(`Unknown geometry type: ${r}`);s(e,t,t.geometry,i,o)}function Vot(e,t,n,i,o){let r=t.features;for(let s=0,a=r.length;s<a;s++)uge(e,r[s],void 0,i,o)}function mge(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=dge[d];if(!l(u))throw new de(`Unknown geometry type: ${d}`);u(e,t,c,i,o)}}function hge(e,t,n,i,o){let r=o.markerSymbol,s=o.markerColor,a=o.markerSize,c=t.properties;if(l(c)){let g=c["marker-color"];l(g)&&(s=U.fromCssColorString(g)),a=Tot[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 _c;u.verticalOrigin=new di(kn.BOTTOM),i.length===2&&o.clampToGround&&(u.heightReference=et.CLAMP_TO_GROUND);let h=H5(t,e._entityCollection,o.describe);h.billboard=u,h.position=new dl(n(i));let p=Promise.resolve(d).then(function(g){u.image=new di(g)}).catch(function(){u.image=new di(e._pinBuilder.fromColor(s,a))});e._promises.push(p)}function fge(e,t,n,i,o){hge(e,t,i,n.coordinates,o)}function pge(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)hge(e,t,i,r[s],o)}function Age(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 di(u));let h,p=a.stroke;l(p)&&(h=U.fromCssColorString(p));let g=a["stroke-opacity"];l(g)&&g!==1&&(l(h)||(h=r.color.getValue().clone()),h.alpha=g),l(h)&&(r=new qt(h))}let c=H5(t,e._entityCollection,o.describe),d=new Zc;c.polyline=d,d.clampToGround=o.clampToGround,d.material=r,d.width=s,d.positions=new di(tj(i,n)),d.arcType=dn.RHUMB}function gge(e,t,n,i,o){Age(e,t,i,n.coordinates,o)}function bge(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)Age(e,t,i,r[s],o)}function yge(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 g=c["stroke-width"];l(g)&&(a=new di(g));let f,b=c.stroke;l(b)&&(f=U.fromCssColorString(b));let x=c["stroke-opacity"];l(x)&&x!==1&&(l(f)||(f=r.getValue().clone()),f.alpha=x),l(f)&&(r=new di(f));let I,_=c.fill,E=s.color.getValue();l(_)&&(I=U.fromCssColorString(_),I.alpha=E.alpha),x=c["fill-opacity"],l(x)&&x!==E.alpha&&(l(I)||(I=E.clone()),I.alpha=x),l(I)&&(s=new qt(I))}let d=new uh;d.outline=new di(!0),d.outlineColor=r,d.outlineWidth=a,d.material=s,d.arcType=dn.RHUMB;let u=[];for(let g=1,f=i.length;g<f;g++)u.push(new lc(tj(i[g],n)));let h=i[0];d.hierarchy=new di(new lc(tj(h,n),u)),h[0].length>2?d.perPositionHeight=new di(!0):o.clampToGround||(d.height=0);let p=H5(t,e._entityCollection,o.describe);p.polygon=d}function Cge(e,t,n,i,o){yge(e,t,i,n.coordinates,o)}function xge(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)yge(e,t,i,r[s],o)}function Ige(e,t,n,i,o){for(let r in n.objects)if(n.objects.hasOwnProperty(r)){let s=Y4(n,n.objects[r]),a=lge[s.type];a(e,s,s,i,o)}}function D0(e){this._name=e,this._changed=new Ce,this._error=new Ce,this._isLoading=!1,this._loading=new Ce,this._entityCollection=new Ca(this),this._promises=[],this._pinBuilder=new Bg,this._entityCluster=new ou,this._credit=void 0,this._resourceCredits=[]}D0.load=function(e,t){return new D0().load(e,t)};Object.defineProperties(D0,{markerSize:{get:function(){return z4},set:function(e){z4=e}},markerSymbol:{get:function(){return K4},set:function(e){K4=e}},markerColor:{get:function(){return J4},set:function(e){J4=e}},stroke:{get:function(){return j4},set:function(e){j4=e}},strokeWidth:{get:function(){return q4},set:function(e){q4=e}},fill:{get:function(){return $4},set:function(e){$4=e}},clampToGround:{get:function(){return ej},set:function(e){ej=e}},crsNames:{get:function(){return H4}},crsLinkHrefs:{get:function(){return sge}},crsLinkTypes:{get:function(){return age}}});Object.defineProperties(D0.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}}});D0.prototype.load=function(e,t){return _ge(this,e,t,!0)};D0.prototype.process=function(e,t){return _ge(this,e,t,!1)};function _ge(e,t,n,i){cs.setLoading(e,!0),n=n??Y.EMPTY_OBJECT;let o=n.credit;typeof o=="string"&&(o=new Gt(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??Rot,markerSize:n.markerSize??z4,markerSymbol:n.markerSymbol??K4,markerColor:n.markerColor??J4,strokeWidthProperty:new di(n.strokeWidth??q4),strokeMaterialProperty:new qt(n.stroke??j4),fillMaterialProperty:new qt(n.fill??$4),clampToGround:n.clampToGround??ej},Promise.resolve(r).then(function(a){return Got(e,a,n,s,i)}).catch(function(a){throw cs.setLoading(e,!1),e._error.raiseEvent(e,a),a})}D0.prototype.update=function(e){return!0};function Got(e,t,n,i,o){let r;l(i)&&(r=yg(i)),l(r)&&e._name!==r&&(e._name=r,e._changed.raiseEvent(e));let s=lge[t.type];if(!l(s))throw new de(`Unsupported GeoJSON object type: ${t.type}`);let a=t.crs,c=a!==null?O5:null;if(l(a)){if(!l(a.properties))throw new de("crs.properties is undefined.");let d=a.properties;if(a.type==="name"){if(c=H4[d.name],!l(c))throw new de(`Unknown crs name: ${d.name}`)}else if(a.type==="link"){let u=sge[d.href];if(l(u)||(u=age[d.type]),!l(u))throw new de(`Unable to resolve crs link: ${JSON.stringify(d)}`);c=u(d)}else if(a.type==="EPSG"){if(c=H4[`EPSG:${d.code}`],!l(c))throw new de(`Unknown crs EPSG code: ${d.code}`)}else throw new de(`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,cs.setLoading(e,!1),e})})}var Q0=D0;var vTi=y(C(),1);var $Ei=y(C());var PEi=y(C());var JIi=y(C(),1),nj=function(e,t){return nj=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])},nj(e,t)};function hp(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");nj(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var vs=function(){return vs=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},vs.apply(this,arguments)};function Ege(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 Tge(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 qIi=y(C()),Sge="4.1.5";var e_i=y(C()),Lge=Object.prototype.hasOwnProperty;function hu(e){return typeof e=="boolean"}function Rge(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 U0(e,t){for(var n=e.length-1;n>=0;n--)t(e[n])===!0&&e.splice(n,1)}function tf(e){throw new Error("Unhandled case for value: '".concat(e,"'"))}var A_i=y(C());var i_i=y(C());var z5=/\s+/,K5=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(z5):[],o=t.split(z5),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(z5):[],o=t.split(z5),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)Lge.call(t,i)&&n.push(i+'="'+t[i]+'"');return n.join(" ")},e}();var r_i=y(C());function Gge(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=Zot(e);if(s.query){var a=s.query.match(/^(.*?)(?=(\?|#))(.*?)$/i);a&&(s.query=s.query.substr(0,a[1].length),e=Vge(s))}if(e.length<=t||(s.host&&(s.host=s.host.replace(/^www\./,""),e=Vge(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):ij(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+ij(d,u,n)).substr(0,r+i)}else c+=d;if(s.fragment){var h="#"+s.fragment;if((c+h).length>=r){if((c+h).length==t)return(c+h).substr(0,t);var p=r-c.length;return(c+ij(h,p,n)).substr(0,r+i)}else c+=h}if(s.scheme&&s.host){var g=s.scheme+"://";if((c+g).length<r)return(g+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 Zot(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 Vge(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 ij(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 a_i=y(C());function Zge(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 d_i=y(C());function Bge(e,t,n){return Rge(e,t,n)}var wge=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 K5({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"?Gge(t,i):o==="middle"?Zge(t,i):Bge(t,i)},e}();var xEi=y(C());var Z_i=y(C());var b_i=y(C()),fp=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 S_i=y(C());var C_i=y(C());function Xge(e){return e>=0&&e<=31||e==127}function wg(e){return e>=65&&e<=90||e>=97&&e<=122}function Ns(e){return e>=48&&e<=57}function J5(e){return e==34||e==39}function k0(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 nf(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 Wge(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 Fge(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 j5(e){return e<58?e<44?e==33:e==44||e==46:e<63?e>=58&&e<=59:e==63||e==94}function Pge(e){return e<91?e==40:e==91||e==123}function oj(e){return e<93?e==41:e==93||e==125}var I_i=y(C()),Mge=/^(?: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 rj=/https?:\/\//i,vge=new RegExp("^"+rj.source,"i"),Bot=/^(javascript|vbscript):/i,wot=/^[A-Za-z][-.+A-Za-z0-9]*:(\/\/)?([^:/]*)/,Xot=/^(?:\/\/)?([^/#?:]+)/,GS=wg;function sj(e){return wg(e)||Ns(e)||e===43||e===45||e===46}var Xg=nf;function q5(e){return e===95||Xg(e)}function aj(e){return nf(e)||Fge(e)||j5(e)}function $5(e){return e===47||e===63||e===35}function cj(e){return Mge.test(e.toLowerCase())}function Nge(e){if(Bot.test(e))return!1;var t=e.match(wot);if(!t)return!1;var n=!!t[1],i=t[2];return n?!0:!(i.indexOf(".")===-1||!/[A-Za-z]/.test(i))}function Dge(e){var t=e.match(Xot);if(!t)return!1;var n=t[0],i=n.split(".");if(i.length<2)return!1;var o=i[i.length-1];return!!cj(o)}var Wot=/^(?:(?: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]?)$/,Fot=/[:/?#]/;function Qge(e){var t=e.split(Fot,1)[0];return Wot.test(t)}var Pot=/^(https?:\/\/)?(?:www\.)?/i,Mot=/^\/\//,Uge=function(e){hp(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=Dot(n)),this.stripPrefix.scheme&&(n=vot(n)),this.stripPrefix.www&&(n=Not(n)),this.stripTrailingSlash&&(n=Qot(n)),this.decodePercentEncoding&&(n=Uot(n)),n},t}(fp);function vot(e){return e.replace(vge,"")}function Not(e){return e.includes("www.")?e.replace(Pot,"$1"):e}function Dot(e){return e.replace(Mot,"")}function Qot(e){return e.charAt(e.length-1)==="/"&&(e=e.slice(0,-1)),e}function Uot(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 W_i=y(C());var kge=/^mailto:/i,lj=nf;function eU(e){return lj(e)||Wge(e)}function Yge(e){var t=e.split(".").pop();return cj(t)}var v_i=y(C());var Oge=function(e){hp(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}(fp);var Q_i=y(C());function dj(e){return e===95||nf(e)}function Hge(e){return e.length<=140}var zge=["twitter","facebook","instagram","tiktok","youtube"];var H_i=y(C());var Kge=function(e){hp(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:tf(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}(fp);var J_i=y(C());var kot={twitter:/^@\w{1,15}$/,instagram:/^@[_\w]{1,30}$/,soundcloud:/^@[-a-z0-9_]{3,25}$/,tiktok:/^@[.\w]{1,23}[\w]$/,youtube:/^@[-.·\w]{3,30}$/};function uj(e){return e===45||e===46||e===95||wg(e)||Ns(e)}function Jge(e,t){var n=kot[t];return n.test(e)}var jge=["twitter","instagram","soundcloud","tiktok","youtube"];var tEi=y(C());var qge=function(e){hp(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:tf(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}(fp);var iEi=y(C()),Yot=/[-. ()]/,Oot=/(?:(?:(?:(\+)?\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]+#?)*/,Hot=/(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})/,zot=new RegExp("^".concat(Oot.source,"|").concat(Hot.source,"$"));function mj(e){return e===45||e===46||e===32}function tU(e){return e===44||e===59}function $ge(e){var t=e.charAt(0)==="+"||Yot.test(e);return t&&zot.test(e)}var aEi=y(C());var ebe=function(e){hp(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}(fp);var Kot=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),nbe(t)&&this.schemeUrlMachinesCount++},e.prototype.removeMachine=function(t){this._stateMachines=this._stateMachines.filter(function(n){return n!==t}),nbe(t)&&this.schemeUrlMachinesCount--},e.prototype.hasSchemeUrlMachine=function(){return this.schemeUrlMachinesCount>0},e}();function ibe(e,t){for(var n=new Kot(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)nU(n,i,o);else{for(var r=n.stateMachines.length-1;r>=0;r--){var s=n.stateMachines[r];switch(s.state){case 11:trt(n,s,o);break;case 12:nrt(n,s,o);break;case 0:Jot(n,s,o);break;case 1:jot(n,s,o);break;case 2:qot(n,s,o);break;case 3:$ot(n,s,o);break;case 4:ert(n,s,i,o);break;case 5:irt(n,s,o);break;case 6:ort(n,s,i,o);break;case 7:rrt(n,s,i,o);break;case 13:srt(n,s,o);break;case 14:art(n,s,o);break;case 8:crt(n,s,o);break;case 9:lrt(n,s,o);break;case 10:drt(n,s,o);break;case 15:urt(n,s,i,o);break;case 16:mrt(n,s,i,o);break;case 17:hrt(n,s,i,o);break;case 18:frt(n,s,i,o);break;case 19:prt(n,s,i,o);break;case 20:Art(n,s,o);break;case 21:grt(n,s,o);break;case 22:sI(n,s,o);break;case 23:brt(n,s,o);break;case 24:yrt(n,s,o);break;case 25:Crt(n,s,o);break;case 26:xrt(n,s,o);break;case 27:Irt(n,s,o);break;case 28:_rt(n,s,o);break;case 29:Ert(n,s,o);break;case 30:Trt(n,s,o);break;case 31:Srt(n,s,o);break;case 32:Rrt(n,s,i,o);break;case 33:Vrt(n,s,o);break;case 34:Grt(n,s,o);break;case 35:Zrt(n,s,o);break;case 36:Brt(n,s,i,o);break;case 37:Lrt(n,s,i,o);break;case 38:wrt(n,s,i,o);break;case 39:Xrt(n,s,i,o);break;case 40:Wrt(n,s,o);break;case 41:Frt(n,s,o);break;default:tf(s.state)}}if(!n.hasSchemeUrlMachine()&&n.charIdx>0&&GS(o)){var a=n.text.charCodeAt(n.charIdx-1);GS(a)||n.addMachine(iU(n.charIdx,0))}}}for(var c=n.stateMachines.length-1;c>=0;c--)n.stateMachines.forEach(function(d){return ds(n,d)});return n.matches}function nU(e,t,n){var i=e.charIdx;if(n===35)e.addMachine(Drt(i,28));else if(n===64)e.addMachine(Qrt(i,30));else if(n===47)e.addMachine(fj(i,11));else if(n===43)e.addMachine(hj(i,37));else if(n===40)e.addMachine(hj(i,32));else{if(Ns(n)&&(e.addMachine(hj(i,38)),e.addMachine(vrt(i,13))),lj(n)){var o=t.toLowerCase()==="m"?15:22;e.addMachine(Nrt(i,o))}GS(n)&&e.addMachine(iU(i,0)),nf(n)&&e.addMachine(fj(i,5))}}function Jot(e,t,n){n===58?t.state=2:n===45?t.state=1:sj(n)||e.removeMachine(t)}function jot(e,t,n){var i=e.charIdx;n===45||(n===47?(e.removeMachine(t),e.addMachine(fj(i,11))):sj(n)?t.state=0:e.removeMachine(t))}function qot(e,t,n){var i=e.charIdx;n===47?t.state=3:n===46?e.removeMachine(t):Xg(n)?(t.state=5,GS(n)&&e.addMachine(iU(i,0))):e.removeMachine(t)}function $ot(e,t,n){n===47?t.state=4:aj(n)?(t.state=10,t.acceptStateReached=!0):ds(e,t)}function ert(e,t,n,i){i===47?(t.state=10,t.acceptStateReached=!0):Xg(i)?(t.state=5,t.acceptStateReached=!0):e.removeMachine(t)}function trt(e,t,n){n===47?t.state=12:e.removeMachine(t)}function nrt(e,t,n){Xg(n)?t.state=5:e.removeMachine(t)}function irt(e,t,n){n===46?t.state=7:n===45?t.state=6:n===58?t.state=8:$5(n)?t.state=10:q5(n)||ds(e,t)}function ort(e,t,n,i){i===45||(i===46?ds(e,t):Xg(i)?t.state=5:ds(e,t))}function rrt(e,t,n,i){i===46?ds(e,t):Xg(i)?(t.state=5,t.acceptStateReached=!0):ds(e,t)}function srt(e,t,n){n===46?t.state=14:n===58?t.state=8:Ns(n)||($5(n)?t.state=10:nf(n)?e.removeMachine(t):ds(e,t))}function art(e,t,n){Ns(n)?(t.octetsEncountered++,t.octetsEncountered===4&&(t.acceptStateReached=!0),t.state=13):ds(e,t)}function crt(e,t,n){Ns(n)?t.state=9:ds(e,t)}function lrt(e,t,n){Ns(n)||($5(n)?t.state=10:ds(e,t))}function drt(e,t,n){aj(n)||ds(e,t)}function urt(e,t,n,i){n.toLowerCase()==="a"?t.state=16:sI(e,t,i)}function mrt(e,t,n,i){n.toLowerCase()==="i"?t.state=17:sI(e,t,i)}function hrt(e,t,n,i){n.toLowerCase()==="l"?t.state=18:sI(e,t,i)}function frt(e,t,n,i){n.toLowerCase()==="t"?t.state=19:sI(e,t,i)}function prt(e,t,n,i){n.toLowerCase()==="o"?t.state=20:sI(e,t,i)}function Art(e,t,n){n===58?t.state=21:sI(e,t,n)}function grt(e,t,n){eU(n)?t.state=22:e.removeMachine(t)}function sI(e,t,n){n===46?t.state=23:n===64?t.state=24:eU(n)?t.state=22:e.removeMachine(t)}function brt(e,t,n){n===46||n===64?e.removeMachine(t):eU(n)?t.state=22:e.removeMachine(t)}function yrt(e,t,n){Xg(n)?t.state=25:e.removeMachine(t)}function Crt(e,t,n){n===46?t.state=27:n===45?t.state=26:q5(n)||ds(e,t)}function xrt(e,t,n){n===45||n===46?ds(e,t):q5(n)?t.state=25:ds(e,t)}function Irt(e,t,n){n===46||n===45?ds(e,t):Xg(n)?(t.state=25,t.acceptStateReached=!0):ds(e,t)}function _rt(e,t,n){dj(n)?(t.state=29,t.acceptStateReached=!0):e.removeMachine(t)}function Ert(e,t,n){dj(n)||ds(e,t)}function Trt(e,t,n){uj(n)?(t.state=31,t.acceptStateReached=!0):e.removeMachine(t)}function Srt(e,t,n){uj(n)||(nf(n)?e.removeMachine(t):ds(e,t))}function Lrt(e,t,n,i){Ns(i)?t.state=38:(e.removeMachine(t),nU(e,n,i))}function Rrt(e,t,n,i){Ns(i)?t.state=33:e.removeMachine(t),nU(e,n,i)}function Vrt(e,t,n){Ns(n)?t.state=34:e.removeMachine(t)}function Grt(e,t,n){Ns(n)?t.state=35:e.removeMachine(t)}function Zrt(e,t,n){n===41?t.state=36:e.removeMachine(t)}function Brt(e,t,n,i){Ns(i)?t.state=38:mj(i)?t.state=39:e.removeMachine(t)}function wrt(e,t,n,i){var o=e.charIdx;t.acceptStateReached=!0,tU(i)?t.state=40:i===35?t.state=41:Ns(i)||(i===40?t.state=32:mj(i)?t.state=39:(ds(e,t),GS(i)&&e.addMachine(iU(o,0))))}function Xrt(e,t,n,i){Ns(i)?t.state=38:i===40?t.state=32:(ds(e,t),nU(e,n,i))}function Wrt(e,t,n){tU(n)||(n===35?t.state=41:Ns(n)?t.state=38:ds(e,t))}function Frt(e,t,n){tU(n)?t.state=40:Ns(n)?e.removeMachine(t):ds(e,t)}function ds(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 h=t.startIdx,p=i.slice(t.startIdx,o);switch(p=Mrt(p),t.type){case 0:{var g=i.charCodeAt(t.startIdx-1);if(g===64)return;switch(t.matchType){case 0:{var f=rj.exec(p);if(f&&(h=h+f.index,p=p.slice(f.index)),!Nge(p))return;break}case 1:{if(!Dge(p))return;break}case 2:{if(!Qge(p))return;break}default:tf(t)}n.push(new Uge({tagBuilder:r,matchedText:p,offset:h,urlMatchType:Prt(t.matchType),url:p,protocolRelativeMatch:p.slice(0,2)==="//",stripPrefix:s,stripTrailingSlash:a,decodePercentEncoding:c}));break}case 1:{Yge(p)&&n.push(new Oge({tagBuilder:r,matchedText:p,offset:h,email:p.replace(kge,"")}));break}case 2:{Hge(p)&&n.push(new Kge({tagBuilder:r,matchedText:p,offset:h,serviceName:d,hashtag:p.slice(1)}));break}case 3:{Jge(p,u)&&n.push(new qge({tagBuilder:r,matchedText:p,offset:h,serviceName:u,mention:p.slice(1)}));break}case 4:{if(p=p.replace(/ +$/g,""),$ge(p)){var b=p.replace(/[^0-9,;#]/g,"");n.push(new ebe({tagBuilder:r,matchedText:p,offset:h,number:b,plusSign:p.charAt(0)==="+"}))}break}default:tf(t)}}}function Prt(e){switch(e){case 0:return"scheme";case 1:return"tld";case 2:return"ipV4";default:tf(e)}}var tbe={")":"(","}":"{","]":"["};function Mrt(e){for(var t={"(":0,"{":0,"[":0},n=0;n<e.length;n++){var i=e.charAt(n),o=e.charCodeAt(n);Pge(o)?t[i]++:oj(o)&&t[tbe[i]]--}for(var r=e.length-1;r>=0;){var i=e.charAt(r),o=e.charCodeAt(r);if(oj(o)){var s=tbe[i];if(t[s]<0)t[s]++,r--;else break}else if(j5(o))r--;else break}return e.slice(0,r+1)}function iU(e,t){return{type:0,startIdx:e,state:t,acceptStateReached:!1,matchType:0}}function fj(e,t){return{type:0,startIdx:e,state:t,acceptStateReached:!1,matchType:1}}function vrt(e,t){return{type:0,startIdx:e,state:t,acceptStateReached:!1,matchType:2,octetsEncountered:1}}function Nrt(e,t){return{type:1,startIdx:e,state:t,acceptStateReached:!1}}function Drt(e,t){return{type:2,startIdx:e,state:t,acceptStateReached:!1}}function Qrt(e,t){return{type:3,startIdx:e,state:t,acceptStateReached:!1}}function hj(e,t){return{type:4,startIdx:e,state:t,acceptStateReached:!1}}function nbe(e){return e.type===0&&e.matchType===0}var SEi=y(C());var pp=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}(),Aj=new pp,Urt=function(){function e(t,n){this.charIdx=0,this.state=0,this.currentDataIdx=0,this.currentTag=Aj,this.html=t,this.callbacks=n}return e}();function obe(e,t){for(var n=new Urt(e,t),i=e.length;n.charIdx<i;){var o=e.charAt(n.charIdx),r=e.charCodeAt(n.charIdx);switch(n.state){case 0:krt(n,o);break;case 1:Yrt(n,o,r);break;case 2:Hrt(n,o,r);break;case 3:Ort(n,o,r);break;case 4:zrt(n,o,r);break;case 5:Krt(n,o,r);break;case 6:Jrt(n,o,r);break;case 7:jrt(n,o,r);break;case 8:qrt(n,o);break;case 9:$rt(n,o);break;case 10:est(n,o,r);break;case 11:tst(n,o,r);break;case 12:nst(n,o);break;case 13:ist(n);break;case 14:ost(n,o);break;case 15:rst(n,o);break;case 16:sst(n,o);break;case 17:ast(n,o);break;case 18:cst(n,o);break;case 19:lst(n,o);break;case 20:dst(n,o);break;default:tf(n.state)}n.charIdx++}n.currentDataIdx<n.charIdx&&ust(n)}function krt(e,t){t==="<"&&Ap(e)}function Yrt(e,t,n){t==="!"?e.state=13:t==="/"?(e.state=2,e.currentTag=new pp(vs(vs({},e.currentTag),{isClosing:!0}))):t==="<"?Ap(e):wg(n)?(e.state=3,e.currentTag=new pp(vs(vs({},e.currentTag),{isOpening:!0}))):(e.state=0,e.currentTag=Aj)}function Ort(e,t,n){k0(n)?(e.currentTag=new pp(vs(vs({},e.currentTag),{name:pj(e)})),e.state=4):t==="<"?Ap(e):t==="/"?(e.currentTag=new pp(vs(vs({},e.currentTag),{name:pj(e)})),e.state=12):t===">"?(e.currentTag=new pp(vs(vs({},e.currentTag),{name:pj(e)})),gp(e)):!wg(n)&&!Ns(n)&&t!==":"&&Gm(e)}function Hrt(e,t,n){t===">"?Gm(e):wg(n)?e.state=3:Gm(e)}function zrt(e,t,n){k0(n)||(t==="/"?e.state=12:t===">"?gp(e):t==="<"?Ap(e):t==="="||J5(n)||Xge(n)?Gm(e):e.state=5)}function Krt(e,t,n){k0(n)?e.state=6:t==="/"?e.state=12:t==="="?e.state=7:t===">"?gp(e):t==="<"?Ap(e):J5(n)&&Gm(e)}function Jrt(e,t,n){k0(n)||(t==="/"?e.state=12:t==="="?e.state=7:t===">"?gp(e):t==="<"?Ap(e):J5(n)?Gm(e):e.state=5)}function jrt(e,t,n){k0(n)||(t==='"'?e.state=8:t==="'"?e.state=9:/[>=`]/.test(t)?Gm(e):t==="<"?Ap(e):e.state=10)}function qrt(e,t){t==='"'&&(e.state=11)}function $rt(e,t){t==="'"&&(e.state=11)}function est(e,t,n){k0(n)?e.state=4:t===">"?gp(e):t==="<"&&Ap(e)}function tst(e,t,n){k0(n)?e.state=4:t==="/"?e.state=12:t===">"?gp(e):t==="<"?Ap(e):(e.state=4,mst(e))}function nst(e,t){t===">"?(e.currentTag=new pp(vs(vs({},e.currentTag),{isClosing:!0})),gp(e)):Gm(e)}function ist(e){var t=e.html,n=e.charIdx;t.slice(n,n+2)==="--"?(e.charIdx++,e.currentTag=new pp(vs(vs({},e.currentTag),{type:"comment"})),e.state=14):t.slice(n,n+7).toUpperCase()==="DOCTYPE"?(e.charIdx+=6,e.currentTag=new pp(vs(vs({},e.currentTag),{type:"doctype"})),e.state=20):Gm(e)}function ost(e,t){t==="-"?e.state=15:t===">"?Gm(e):e.state=16}function rst(e,t){t==="-"?e.state=18:t===">"?Gm(e):e.state=16}function sst(e,t){t==="-"&&(e.state=17)}function ast(e,t){t==="-"?e.state=18:e.state=16}function cst(e,t){t===">"?gp(e):t==="!"?e.state=19:t==="-"||(e.state=16)}function lst(e,t){t==="-"?e.state=17:t===">"?gp(e):e.state=16}function dst(e,t){t===">"?gp(e):t==="<"&&Ap(e)}function Gm(e){e.state=0,e.currentTag=Aj}function Ap(e){e.state=1,e.currentTag=new pp({idx:e.charIdx})}function gp(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)),Gm(e),e.currentDataIdx=e.charIdx+1}function ust(e){var t=e.html.slice(e.currentDataIdx,e.charIdx);e.callbacks.onText(t,e.currentDataIdx),e.currentDataIdx=e.charIdx+1}function pj(e){var t=e.currentTag.idx+(e.currentTag.isClosing?2:1);return e.html.slice(t,e.charIdx).toLowerCase()}function mst(e){e.charIdx--}var hst=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=fst(t.urls),this.email=hu(t.email)?t.email:this.email,this.phone=hu(t.phone)?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=hu(t.newWindow)?t.newWindow:this.newWindow,this.stripPrefix=pst(t.stripPrefix),this.stripTrailingSlash=hu(t.stripTrailingSlash)?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=hu(t.decodePercentEncoding)?t.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=t.sanitizeHtml||!1;var n=this.mention;if(n!==!1&&jge.indexOf(n)===-1)throw new Error("invalid `mention` cfg '".concat(n,"' - see docs"));var i=this.hashtag;if(i!==!1&&zge.indexOf(i)===-1)throw new Error("invalid `hashtag` cfg '".concat(i,"' - see docs"));this.truncate=Ast(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 obe(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(h,p){if(p%2===0){var g=n.parseText(h,u);r.push.apply(r,Tge([],Ege(g),!1))}u+=h.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(gst);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||U0(t,function(n){return n.getType()==="hashtag"}),this.email||U0(t,function(n){return n.getType()==="email"}),this.phone||U0(t,function(n){return n.getType()==="phone"}),this.mention||U0(t,function(n){return n.getType()==="mention"}),this.urls.schemeMatches||U0(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="scheme"}),this.urls.tldMatches||U0(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="tld"}),this.urls.ipV4Matches||U0(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="ipV4"}),t},e.prototype.parseText=function(t,n){n=n||0;for(var i=ibe(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 K5)return n.toAnchorString();var i=t.buildTag();return i.toAnchorString()},e.prototype.getTagBuilder=function(){var t=this.tagBuilder;return t||(t=this.tagBuilder=new wge({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),t},e.version=Sge,e}(),rbe=hst;function fst(e){return e==null&&(e=!0),hu(e)?{schemeMatches:e,tldMatches:e,ipV4Matches:e}:{schemeMatches:hu(e.schemeMatches)?e.schemeMatches:!0,tldMatches:hu(e.tldMatches)?e.tldMatches:!0,ipV4Matches:hu(e.ipV4Matches)?e.ipV4Matches:!0}}function pst(e){return e==null&&(e=!0),hu(e)?{scheme:e,www:e}:{scheme:hu(e.scheme)?e.scheme:!0,www:hu(e.www)?e.www:!0}}function Ast(e){return typeof e=="number"?{length:e,location:"end"}:vs({length:Number.POSITIVE_INFINITY,location:"end"},e)}function gst(e,t){return e.getOffset()-t.getOffset()}var NEi=y(C());var MEi=y(C());var KEi=y(C());var oU=rbe;var fbe;typeof DOMParser<"u"&&(fbe=new DOMParser);var bst=new oU({stripPrefix:!1,email:!1,replaceFn:function(e,t){return t.urlMatchType==="scheme"||t.urlMatchType==="www"}}),rU=32,sbe=2414016,abe=1,cbe=16093e3,lbe=.1,yst=[null,void 0,"http://www.topografix.com/GPX/1/1"],Do={gpx:yst};function Cst(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 gj(e,t){let n=xF(e,"id");return n=l(n)?n:qn(),t.getOrCreateEntity(n)}function bj(e){let t=dbe(e,"lon"),n=dbe(e,"lat"),i=yF(e,"ele",Do.gpx);return m.fromDegrees(t,n,i)}function dbe(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 xF(e,t){if(!l(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function Y0(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 yj(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 yF(e,t,n){let i=Y0(e,t,n);if(l(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function yd(e,t,n){let i=Y0(e,t,n);if(l(i))return i.textContent.trim()}function pbe(e){let t=new _c;return t.width=rU,t.height=rU,t.scaleByDistance=new zt(sbe,abe,cbe,lbe),t.pixelOffsetScaleByDistance=new zt(sbe,abe,cbe,lbe),t.verticalOrigin=new di(kn.BOTTOM),t.image=e,t}function xst(){let e=new dh;return e.translucencyByDistance=new zt(3e6,1,5e6,0),e.pixelOffset=new D(17,0),e.horizontalOrigin=wi.LEFT,e.font="16px sans-serif",e.style=nr.FILL_AND_OUTLINE,e}function Abe(e){let t=new Zc;return t.width=4,t.material=new V0,t.material.color=l(e)?e:U.RED,t.material.outlineWidth=2,t.material.outlineColor=U.BLACK,t}var ube={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"}},CF;typeof document<"u"&&(CF=document.createElement("div"));function Cj(e,t){let n,i="",o=Object.keys(ube),r=o.length;for(n=0;n<r;n++){let u=o[n],h=ube[u];h.value=yd(e,h.tag,Do.gpx)??"",l(h.value)&&h.value!==""&&(i=`${i}<p>${h.text}: ${h.value}</p>`)}if(!l(i)||i==="")return;i=bst.link(i),CF.innerHTML=i;let s=CF.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+=`${CF.innerHTML}</div>`,CF.innerHTML="",d}function gbe(e,t,n,i){let o=bj(t),r=gj(t,n);r.position=o;let s=l(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",U.RED,rU);r.billboard=pbe(s);let a=yd(t,"name",Do.gpx);r.name=a,r.label=xst(),r.label.text=a,r.description=Cj(t,r),i.clampToGround&&(r.billboard.heightReference=et.CLAMP_TO_GROUND,r.label.heightReference=et.CLAMP_TO_GROUND)}function Ist(e,t,n,i){let o=gj(t,n);o.description=Cj(t,o);let r=yj(t,"rtept",Do.gpx),s=new Array(r.length);for(let a=0;a<r.length;a++)gbe(e,r[a],n,i),s[a]=bj(r[a]);o.polyline=Abe(i.routeColor),i.clampToGround&&(o.polyline.clampToGround=!0),o.polyline.positions=s}function _st(e,t,n,i){let o=gj(t,n);o.description=Cj(t,o);let r=yj(t,"trkseg",Do.gpx),s=[],a=[],c,d=!0,u=new Oa;for(let h=0;h<r.length;h++)c=Est(r[h]),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 h=l(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",U.RED,rU);o.billboard=pbe(h),o.position=u,i.clampToGround&&(o.billboard.heightReference=et.CLAMP_TO_GROUND),o.availability=new as,o.availability.addInterval(new wn({start:a[0],stop:a[a.length-1]}))}o.polyline=Abe(i.trackColor),o.polyline.positions=s,i.clampToGround&&(o.polyline.clampToGround=!0)}function Est(e){let t={positions:[],times:[]},n=yj(e,"trkpt",Do.gpx),i;for(let o=0;o<n.length;o++){let r=bj(n[o]);t.positions.push(r),i=yd(n[o],"time",Do.gpx),l(i)&&t.times.push(j.fromIso8601(i))}return t}function Tst(e){let t=Y0(e,"metadata",Do.gpx);if(l(t)){let n={name:yd(t,"name",Do.gpx),desc:yd(t,"desc",Do.gpx),author:Sst(t),copyright:Rst(t),link:bbe(t),time:yd(t,"time",Do.gpx),keywords:yd(t,"keywords",Do.gpx),bounds:Vst(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 Sst(e){let t=Y0(e,"author",Do.gpx);if(l(t)){let n={name:yd(t,"name",Do.gpx),email:Lst(t),link:bbe(t)};if(l(n.name)||l(n.email)||l(n.link))return n}}function Lst(e){let t=Y0(e,"email",Do.gpx);if(l(t)){let n=yd(t,"id",Do.gpx),i=yd(t,"domain",Do.gpx);return`${n}@${i}`}}function bbe(e){let t=Y0(e,"link",Do.gpx);if(l(t)){let n={href:xF(t,"href"),text:yd(t,"text",Do.gpx),mimeType:yd(t,"type",Do.gpx)};if(l(n.href)||l(n.text)||l(n.mimeType))return n}}function Rst(e){let t=Y0(e,"copyright",Do.gpx);if(l(t)){let n={author:xF(t,"author"),year:yd(t,"year",Do.gpx),license:yd(t,"license",Do.gpx)};if(l(n.author)||l(n.year)||l(n.license))return n}}function Vst(e){let t=Y0(e,"bounds",Do.gpx);if(l(t)){let n={minLat:yF(t,"minlat",Do.gpx),maxLat:yF(t,"maxlat",Do.gpx),minLon:yF(t,"minlon",Do.gpx),maxLon:yF(t,"maxlon",Do.gpx)};if(l(n.minLat)||l(n.maxLat)||l(n.minLon)||l(n.maxLon))return n}}var mbe={wpt:gbe,rte:Ist,trk:_st};function Gst(e,t,n,i){let o=Object.keys(mbe),r=o.length;for(let s=0;s<r;s++){let a=o[s],c=mbe[a],d=t.childNodes,u=d.length;for(let h=0;h<u;h++){let p=d[h];p.localName===a&&Do.gpx.indexOf(p.namespaceURI)!==-1&&c(e,p,n,i)}}}function hbe(e,t,n){let i=e._entityCollection;i.removeAll();let o=t.documentElement,r=xF(o,"version"),s=xF(o,"creator"),a,c=Tst(o);l(c)&&(a=c.name),o.localName==="gpx"?Gst(e,o,i,n):console.log(`GPX - Unsupported node: ${o.localName}`);let d,u=i.computeAvailability(),h=u.start,p=u.stop,g=j.equals(h,ze.MINIMUM_VALUE),f=j.equals(p,ze.MAXIMUM_VALUE);if(!g||!f){let x;g&&(x=new Date,x.setHours(0,0,0,0),h=j.fromDate(x)),f&&(x=new Date,x.setHours(24,0,0,0),p=j.fromDate(x)),d=new Oh,d.startTime=h,d.stopTime=p,d.currentTime=j.clone(h),d.clockRange=ls.LOOP_STOP,d.clockStep=Ro.SYSTEM_CLOCK_MULTIPLIER,d.multiplier=Math.round(Math.min(Math.max(j.secondsDifference(p,h)/60,1),31556900))}let b=!1;return e._name!==a&&(e._name=a,b=!0),e._creator!==s&&(e._creator=s,b=!0),Zst(e._metadata,c)&&(e._metadata=c,b=!0),e._version!==r&&(e._version=r,b=!0),d!==e._clock&&(b=!0,e._clock=d),b&&e._changed.raiseEvent(e),cs.setLoading(e,!1),e}function Zst(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 Bst(e,t,n,i){i=i??Y.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?Cst(r).then(function(s){let a,c;try{a=fbe.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 de(d)}return hbe(e,a,i)}):hbe(e,r,i)}).catch(function(r){return e._error.raiseEvent(e,r),console.log(r),Promise.reject(r)})}function ZS(){this._changed=new Ce,this._error=new Ce,this._loading=new Ce,this._clock=void 0,this._entityCollection=new Ca(this),this._entityCluster=new ou,this._name=void 0,this._version=void 0,this._creator=void 0,this._metadata=void 0,this._isLoading=!1,this._pinBuilder=new Bg}ZS.load=function(e,t){return new ZS().load(e,t)};Object.defineProperties(ZS.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}}});ZS.prototype.update=function(e){return!0};ZS.prototype.load=function(e,t){if(!l(e))throw new Ae("data is required.");t=t??Y.EMPTY_OBJECT,cs.setLoading(this,!0);let n=this._name,i=this;return Bst(this,this._entityCollection,e,t).then(function(){let o,r=i._entityCollection.computeAvailability(),s=r.start,a=r.stop,c=j.equals(s,ze.MINIMUM_VALUE),d=j.equals(a,ze.MAXIMUM_VALUE);if(!c||!d){let h;c&&(h=new Date,h.setHours(0,0,0,0),s=j.fromDate(h)),d&&(h=new Date,h.setHours(24,0,0,0),a=j.fromDate(h)),o=new Oh,o.startTime=s,o.stopTime=a,o.currentTime=j.clone(s),o.clockRange=ls.LOOP_STOP,o.clockStep=Ro.SYSTEM_CLOCK_MULTIPLIER,o.multiplier=Math.round(Math.min(Math.max(j.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),cs.setLoading(i,!1),i}).catch(function(o){return cs.setLoading(i,!1),i._error.raiseEvent(i,o),console.log(o),Promise.reject(o)})};var IF=ZS;var DTi=y(C(),1);function wst(e,t){this.position=e,this.headingPitchRoll=t}var _F=wst;var SRi=y(C(),1);var qF=y(Bd(),1);var WLi=y(C(),1);var UTi=y(C(),1);function mU(e){return hU(e.map(([t,n])=>new Array(t).fill(n,0,t)))}function hU(e){return e.reduce((t,n)=>t.concat(Array.isArray(n)?hU(n):n),[])}var ybe=[0,1,2,3].concat(...mU([[2,4],[2,5],[4,6],[4,7],[8,8],[8,9],[16,10],[16,11],[32,12],[32,13],[64,14],[64,15],[2,0],[1,16],[1,17],[2,18],[2,19],[4,20],[4,21],[8,22],[8,23],[16,24],[16,25],[32,26],[32,27],[64,28],[64,29]]));function Vr(){let e=this;function t(o){let r=e.dyn_tree,s=e.stat_desc.static_tree,a=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,d=e.stat_desc.max_length,u,h,p,g,f,b,x=0;for(g=0;g<=15;g++)o.bl_count[g]=0;for(r[o.heap[o.heap_max]*2+1]=0,u=o.heap_max+1;u<573;u++)h=o.heap[u],g=r[r[h*2+1]*2+1]+1,g>d&&(g=d,x++),r[h*2+1]=g,!(h>e.max_code)&&(o.bl_count[g]++,f=0,h>=c&&(f=a[h-c]),b=r[h*2],o.opt_len+=b*(g+f),s&&(o.static_len+=b*(s[h*2+1]+f)));if(x!==0){do{for(g=d-1;o.bl_count[g]===0;)g--;o.bl_count[g]--,o.bl_count[g+1]+=2,o.bl_count[d]--,x-=2}while(x>0);for(g=d;g!==0;g--)for(h=o.bl_count[g];h!==0;)p=o.heap[--u],!(p>e.max_code)&&(r[p*2+1]!=g&&(o.opt_len+=(g-r[p*2+1])*r[p*2],r[p*2+1]=g),h--)}}function n(o,r){let s=0;do s|=o&1,o>>>=1,s<<=1;while(--r>0);return s>>>1}function i(o,r,s){let a=[],c=0,d,u,h;for(d=1;d<=15;d++)a[d]=c=c+s[d-1]<<1;for(u=0;u<=r;u++)h=o[u*2+1],h!==0&&(o[u*2]=n(a[h]++,h))}e.build_tree=function(o){let r=e.dyn_tree,s=e.stat_desc.static_tree,a=e.stat_desc.elems,c,d,u=-1,h;for(o.heap_len=0,o.heap_max=573,c=0;c<a;c++)r[c*2]!==0?(o.heap[++o.heap_len]=u=c,o.depth[c]=0):r[c*2+1]=0;for(;o.heap_len<2;)h=o.heap[++o.heap_len]=u<2?++u:0,r[h*2]=1,o.depth[h]=0,o.opt_len--,s&&(o.static_len-=s[h*2+1]);for(e.max_code=u,c=Math.floor(o.heap_len/2);c>=1;c--)o.pqdownheap(r,c);h=a;do c=o.heap[1],o.heap[1]=o.heap[o.heap_len--],o.pqdownheap(r,1),d=o.heap[1],o.heap[--o.heap_max]=c,o.heap[--o.heap_max]=d,r[h*2]=r[c*2]+r[d*2],o.depth[h]=Math.max(o.depth[c],o.depth[d])+1,r[c*2+1]=r[d*2+1]=h,o.heap[1]=h++,o.pqdownheap(r,1);while(o.heap_len>=2);o.heap[--o.heap_max]=o.heap[1],t(o),i(r,e.max_code,o.bl_count)}}Vr._length_code=[0,1,2,3,4,5,6,7].concat(...mU([[2,8],[2,9],[2,10],[2,11],[4,12],[4,13],[4,14],[4,15],[8,16],[8,17],[8,18],[8,19],[16,20],[16,21],[16,22],[16,23],[32,24],[32,25],[32,26],[31,27],[1,28]]));Vr.base_length=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0];Vr.base_dist=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576];Vr.d_code=function(e){return e<256?ybe[e]:ybe[256+(e>>>7)]};Vr.extra_lbits=[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];Vr.extra_dbits=[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];Vr.extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];Vr.bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function pc(e,t,n,i,o){let r=this;r.static_tree=e,r.extra_bits=t,r.extra_base=n,r.elems=i,r.max_length=o}var Xst=[12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,19,275,147,403,83,339,211,467,51,307,179,435,115,371,243,499,11,267,139,395,75,331,203,459,43,299,171,427,107,363,235,491,27,283,155,411,91,347,219,475,59,315,187,443,123,379,251,507,7,263,135,391,71,327,199,455,39,295,167,423,103,359,231,487,23,279,151,407,87,343,215,471,55,311,183,439,119,375,247,503,15,271,143,399,79,335,207,463,47,303,175,431,111,367,239,495,31,287,159,415,95,351,223,479,63,319,191,447,127,383,255,511,0,64,32,96,16,80,48,112,8,72,40,104,24,88,56,120,4,68,36,100,20,84,52,116,3,131,67,195,35,163,99,227],Wst=mU([[144,8],[112,9],[24,7],[8,8]]);pc.static_ltree=hU(Xst.map((e,t)=>[e,Wst[t]]));var Fst=[0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23],Pst=mU([[30,5]]);pc.static_dtree=hU(Fst.map((e,t)=>[e,Pst[t]]));pc.static_l_desc=new pc(pc.static_ltree,Vr.extra_lbits,257,286,15);pc.static_d_desc=new pc(pc.static_dtree,Vr.extra_dbits,0,30,15);pc.static_bl_desc=new pc(null,Vr.extra_blbits,0,19,7);var Mst=9,vst=8;function bp(e,t,n,i,o){let r=this;r.good_length=e,r.max_lazy=t,r.nice_length=n,r.max_chain=i,r.func=o}var xbe=0,dU=1,aI=2,of=[new bp(0,0,0,0,xbe),new bp(4,4,8,4,dU),new bp(4,5,16,8,dU),new bp(4,6,32,32,dU),new bp(4,4,16,16,aI),new bp(8,16,32,32,aI),new bp(8,16,128,128,aI),new bp(8,32,128,256,aI),new bp(32,128,258,1024,aI),new bp(32,258,258,4096,aI)],sU=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],Zm=0,aU=1,EF=2,cU=3,Nst=32,xj=42,lU=113,TF=666,Ij=8,Dst=0,_j=1,Qst=2,kr=3,uU=258,fu=uU+kr+1;function Cbe(e,t,n,i){let o=e[t*2],r=e[n*2];return o<r||o==r&&i[t]<=i[n]}function Ust(){let e=this,t,n,i,o,r,s,a,c,d,u,h,p,g,f,b,x,I,_,E,S,R,G,B,w,F,P,A,T,L,V,W,M,Q,N=new Vr,k=new Vr,v=new Vr;e.depth=[];let O,H,ee,K,te,q;e.bl_count=[],e.heap=[],W=[],M=[],Q=[];function pe(){d=2*r,h[g-1]=0;for(let ve=0;ve<g-1;ve++)h[ve]=0;P=of[A].max_lazy,L=of[A].good_length,V=of[A].nice_length,F=of[A].max_chain,R=0,I=0,B=0,_=w=kr-1,S=0,p=0}function ye(){let ve;for(ve=0;ve<286;ve++)W[ve*2]=0;for(ve=0;ve<30;ve++)M[ve*2]=0;for(ve=0;ve<19;ve++)Q[ve*2]=0;W[256*2]=1,e.opt_len=e.static_len=0,H=ee=0}function he(){N.dyn_tree=W,N.stat_desc=pc.static_l_desc,k.dyn_tree=M,k.stat_desc=pc.static_d_desc,v.dyn_tree=Q,v.stat_desc=pc.static_bl_desc,te=0,q=0,K=8,ye()}e.pqdownheap=function(ve,ut){let qe=e.heap,nt=qe[ut],yt=ut<<1;for(;yt<=e.heap_len&&(yt<e.heap_len&&Cbe(ve,qe[yt+1],qe[yt],e.depth)&&yt++,!Cbe(ve,nt,qe[yt],e.depth));)qe[ut]=qe[yt],ut=yt,yt<<=1;qe[ut]=nt};function xe(ve,ut){let qe=-1,nt,yt=ve[1],$t=0,Sn=7,fo=4;yt===0&&(Sn=138,fo=3),ve[(ut+1)*2+1]=65535;for(let uo=0;uo<=ut;uo++)nt=yt,yt=ve[(uo+1)*2+1],!(++$t<Sn&&nt==yt)&&($t<fo?Q[nt*2]+=$t:nt!==0?(nt!=qe&&Q[nt*2]++,Q[32]++):$t<=10?Q[34]++:Q[36]++,$t=0,qe=nt,yt===0?(Sn=138,fo=3):nt==yt?(Sn=6,fo=3):(Sn=7,fo=4))}function Te(){let ve;for(xe(W,N.max_code),xe(M,k.max_code),v.build_tree(e),ve=18;ve>=3&&Q[Vr.bl_order[ve]*2+1]===0;ve--);return e.opt_len+=3*(ve+1)+5+5+4,ve}function Be(ve){e.pending_buf[e.pending++]=ve}function Le(ve){Be(ve&255),Be(ve>>>8&255)}function De(ve){Be(ve>>8&255),Be(ve&255&255)}function Ue(ve,ut){let qe,nt=ut;q>16-nt?(qe=ve,te|=qe<<q&65535,Le(te),te=qe>>>16-q,q+=nt-16):(te|=ve<<q&65535,q+=nt)}function je(ve,ut){let qe=ve*2;Ue(ut[qe]&65535,ut[qe+1]&65535)}function it(ve,ut){let qe,nt=-1,yt,$t=ve[1],Sn=0,fo=7,uo=4;for($t===0&&(fo=138,uo=3),qe=0;qe<=ut;qe++)if(yt=$t,$t=ve[(qe+1)*2+1],!(++Sn<fo&&yt==$t)){if(Sn<uo)do je(yt,Q);while(--Sn!==0);else yt!==0?(yt!=nt&&(je(yt,Q),Sn--),je(16,Q),Ue(Sn-3,2)):Sn<=10?(je(17,Q),Ue(Sn-3,3)):(je(18,Q),Ue(Sn-11,7));Sn=0,nt=yt,$t===0?(fo=138,uo=3):yt==$t?(fo=6,uo=3):(fo=7,uo=4)}}function nn(ve,ut,qe){let nt;for(Ue(ve-257,5),Ue(ut-1,5),Ue(qe-4,4),nt=0;nt<qe;nt++)Ue(Q[Vr.bl_order[nt]*2+1],3);it(W,ve-1),it(M,ut-1)}function rt(){q==16?(Le(te),te=0,q=0):q>=8&&(Be(te&255),te>>>=8,q-=8)}function rn(){Ue(_j<<1,3),je(256,pc.static_ltree),rt(),1+K+10-q<9&&(Ue(_j<<1,3),je(256,pc.static_ltree),rt()),K=7}function Jt(ve,ut){let qe,nt,yt;if(e.dist_buf[H]=ve,e.lc_buf[H]=ut&255,H++,ve===0?W[ut*2]++:(ee++,ve--,W[(Vr._length_code[ut]+256+1)*2]++,M[Vr.d_code(ve)*2]++),(H&8191)===0&&A>2){for(qe=H*8,nt=R-I,yt=0;yt<30;yt++)qe+=M[yt*2]*(5+Vr.extra_dbits[yt]);if(qe>>>=3,ee<Math.floor(H/2)&&qe<Math.floor(nt/2))return!0}return H==O-1}function Xt(ve,ut){let qe,nt,yt=0,$t,Sn;if(H!==0)do qe=e.dist_buf[yt],nt=e.lc_buf[yt],yt++,qe===0?je(nt,ve):($t=Vr._length_code[nt],je($t+256+1,ve),Sn=Vr.extra_lbits[$t],Sn!==0&&(nt-=Vr.base_length[$t],Ue(nt,Sn)),qe--,$t=Vr.d_code(qe),je($t,ut),Sn=Vr.extra_dbits[$t],Sn!==0&&(qe-=Vr.base_dist[$t],Ue(qe,Sn)));while(yt<H);je(256,ve),K=ve[256*2+1]}function Li(){q>8?Le(te):q>0&&Be(te&255),te=0,q=0}function bi(ve,ut,qe){Li(),K=8,qe&&(Le(ut),Le(~ut)),e.pending_buf.set(c.subarray(ve,ve+ut),e.pending),e.pending+=ut}function vt(ve,ut,qe){Ue((Dst<<1)+(qe?1:0),3),bi(ve,ut,!0)}function Rt(ve,ut,qe){let nt,yt,$t=0;A>0?(N.build_tree(e),k.build_tree(e),$t=Te(),nt=e.opt_len+3+7>>>3,yt=e.static_len+3+7>>>3,yt<=nt&&(nt=yt)):nt=yt=ut+5,ut+4<=nt&&ve!=-1?vt(ve,ut,qe):yt==nt?(Ue((_j<<1)+(qe?1:0),3),Xt(pc.static_ltree,pc.static_dtree)):(Ue((Qst<<1)+(qe?1:0),3),nn(N.max_code+1,k.max_code+1,$t+1),Xt(W,M)),ye(),qe&&Li()}function si(ve){Rt(I>=0?I:-1,R-I,ve),I=R,t.flush_pending()}function _t(){let ve,ut,qe,nt;do{if(nt=d-B-R,nt===0&&R===0&&B===0)nt=r;else if(nt==-1)nt--;else if(R>=r+r-fu){c.set(c.subarray(r,r+r),0),G-=r,R-=r,I-=r,ve=g,qe=ve;do ut=h[--qe]&65535,h[qe]=ut>=r?ut-r:0;while(--ve!==0);ve=r,qe=ve;do ut=u[--qe]&65535,u[qe]=ut>=r?ut-r:0;while(--ve!==0);nt+=r}if(t.avail_in===0)return;ve=t.read_buf(c,R+B,nt),B+=ve,B>=kr&&(p=c[R]&255,p=(p<<x^c[R+1]&255)&b)}while(B<fu&&t.avail_in!==0)}function Fo(ve){let ut=65535,qe;for(ut>i-5&&(ut=i-5);;){if(B<=1){if(_t(),B===0&&ve==0)return Zm;if(B===0)break}if(R+=B,B=0,qe=I+ut,(R===0||R>=qe)&&(B=R-qe,R=qe,si(!1),t.avail_out===0)||R-I>=r-fu&&(si(!1),t.avail_out===0))return Zm}return si(ve==4),t.avail_out===0?ve==4?EF:Zm:ve==4?cU:aU}function Uo(ve){let ut=F,qe=R,nt,yt,$t=w,Sn=R>r-fu?R-(r-fu):0,fo=V,uo=a,ra=R+uU,sa=c[qe+$t-1],Hn=c[qe+$t];w>=L&&(ut>>=2),fo>B&&(fo=B);do if(nt=ve,!(c[nt+$t]!=Hn||c[nt+$t-1]!=sa||c[nt]!=c[qe]||c[++nt]!=c[qe+1])){qe+=2,nt++;do;while(c[++qe]==c[++nt]&&c[++qe]==c[++nt]&&c[++qe]==c[++nt]&&c[++qe]==c[++nt]&&c[++qe]==c[++nt]&&c[++qe]==c[++nt]&&c[++qe]==c[++nt]&&c[++qe]==c[++nt]&&qe<ra);if(yt=uU-(ra-qe),qe=ra-uU,yt>$t){if(G=ve,$t=yt,yt>=fo)break;sa=c[qe+$t-1],Hn=c[qe+$t]}}while((ve=u[ve&uo]&65535)>Sn&&--ut!==0);return $t<=B?$t:B}function Va(ve){let ut=0,qe;for(;;){if(B<fu){if(_t(),B<fu&&ve==0)return Zm;if(B===0)break}if(B>=kr&&(p=(p<<x^c[R+(kr-1)]&255)&b,ut=h[p]&65535,u[R&a]=h[p],h[p]=R),ut!==0&&(R-ut&65535)<=r-fu&&T!=2&&(_=Uo(ut)),_>=kr)if(qe=Jt(R-G,_-kr),B-=_,_<=P&&B>=kr){_--;do R++,p=(p<<x^c[R+(kr-1)]&255)&b,ut=h[p]&65535,u[R&a]=h[p],h[p]=R;while(--_!==0);R++}else R+=_,_=0,p=c[R]&255,p=(p<<x^c[R+1]&255)&b;else qe=Jt(0,c[R]&255),B--,R++;if(qe&&(si(!1),t.avail_out===0))return Zm}return si(ve==4),t.avail_out===0?ve==4?EF:Zm:ve==4?cU:aU}function Cr(ve){let ut=0,qe,nt;for(;;){if(B<fu){if(_t(),B<fu&&ve==0)return Zm;if(B===0)break}if(B>=kr&&(p=(p<<x^c[R+(kr-1)]&255)&b,ut=h[p]&65535,u[R&a]=h[p],h[p]=R),w=_,E=G,_=kr-1,ut!==0&&w<P&&(R-ut&65535)<=r-fu&&(T!=2&&(_=Uo(ut)),_<=5&&(T==1||_==kr&&R-G>4096)&&(_=kr-1)),w>=kr&&_<=w){nt=R+B-kr,qe=Jt(R-1-E,w-kr),B-=w-1,w-=2;do++R<=nt&&(p=(p<<x^c[R+(kr-1)]&255)&b,ut=h[p]&65535,u[R&a]=h[p],h[p]=R);while(--w!==0);if(S=0,_=kr-1,R++,qe&&(si(!1),t.avail_out===0))return Zm}else if(S!==0){if(qe=Jt(0,c[R-1]&255),qe&&si(!1),R++,B--,t.avail_out===0)return Zm}else S=1,R++,B--}return S!==0&&(qe=Jt(0,c[R-1]&255),S=0),si(ve==4),t.avail_out===0?ve==4?EF:Zm:ve==4?cU:aU}function wr(ve){return ve.total_in=ve.total_out=0,ve.msg=null,e.pending=0,e.pending_out=0,n=lU,o=0,he(),pe(),0}e.deflateInit=function(ve,ut,qe,nt,yt,$t){return nt||(nt=Ij),yt||(yt=vst),$t||($t=0),ve.msg=null,ut==-1&&(ut=6),yt<1||yt>Mst||nt!=Ij||qe<9||qe>15||ut<0||ut>9||$t<0||$t>2?-2:(ve.dstate=e,s=qe,r=1<<s,a=r-1,f=yt+7,g=1<<f,b=g-1,x=Math.floor((f+kr-1)/kr),c=new Uint8Array(r*2),u=[],h=[],O=1<<yt+6,e.pending_buf=new Uint8Array(O*4),i=O*4,e.dist_buf=new Uint16Array(O),e.lc_buf=new Uint8Array(O),A=ut,T=$t,wr(ve))},e.deflateEnd=function(){return n!=xj&&n!=lU&&n!=TF?-2:(e.lc_buf=null,e.dist_buf=null,e.pending_buf=null,h=null,u=null,c=null,e.dstate=null,n==lU?-3:0)},e.deflateParams=function(ve,ut,qe){let nt=0;return ut==-1&&(ut=6),ut<0||ut>9||qe<0||qe>2?-2:(of[A].func!=of[ut].func&&ve.total_in!==0&&(nt=ve.deflate(1)),A!=ut&&(A=ut,P=of[A].max_lazy,L=of[A].good_length,V=of[A].nice_length,F=of[A].max_chain),T=qe,nt)},e.deflateSetDictionary=function(ve,ut,qe){let nt=qe,yt,$t=0;if(!ut||n!=xj)return-2;if(nt<kr)return 0;for(nt>r-fu&&(nt=r-fu,$t=qe-nt),c.set(ut.subarray($t,$t+nt),0),R=nt,I=nt,p=c[0]&255,p=(p<<x^c[1]&255)&b,yt=0;yt<=nt-kr;yt++)p=(p<<x^c[yt+(kr-1)]&255)&b,u[yt&a]=h[p],h[p]=yt;return 0},e.deflate=function(ve,ut){let qe,nt,yt,$t,Sn;if(ut>4||ut<0)return-2;if(!ve.next_out||!ve.next_in&&ve.avail_in!==0||n==TF&&ut!=4)return ve.msg=sU[4],-2;if(ve.avail_out===0)return ve.msg=sU[7],-5;if(t=ve,$t=o,o=ut,n==xj&&(nt=Ij+(s-8<<4)<<8,yt=(A-1&255)>>1,yt>3&&(yt=3),nt|=yt<<6,R!==0&&(nt|=Nst),nt+=31-nt%31,n=lU,De(nt)),e.pending!==0){if(t.flush_pending(),t.avail_out===0)return o=-1,0}else if(t.avail_in===0&&ut<=$t&&ut!=4)return t.msg=sU[7],-5;if(n==TF&&t.avail_in!==0)return ve.msg=sU[7],-5;if(t.avail_in!==0||B!==0||ut!=0&&n!=TF){switch(Sn=-1,of[A].func){case xbe:Sn=Fo(ut);break;case dU:Sn=Va(ut);break;case aI:Sn=Cr(ut);break;default:}if((Sn==EF||Sn==cU)&&(n=TF),Sn==Zm||Sn==EF)return t.avail_out===0&&(o=-1),0;if(Sn==aU){if(ut==1)rn();else if(vt(0,0,!1),ut==3)for(qe=0;qe<g;qe++)h[qe]=0;if(t.flush_pending(),t.avail_out===0)return o=-1,0}}return ut!=4?0:1}}function Ibe(){let e=this;e.next_in_index=0,e.next_out_index=0,e.avail_in=0,e.total_in=0,e.avail_out=0,e.total_out=0}Ibe.prototype={deflateInit(e,t){let n=this;return n.dstate=new Ust,t||(t=15),n.dstate.deflateInit(n,e,t)},deflate(e){let t=this;return t.dstate?t.dstate.deflate(t,e):-2},deflateEnd(){let e=this;if(!e.dstate)return-2;let t=e.dstate.deflateEnd();return e.dstate=null,t},deflateParams(e,t){let n=this;return n.dstate?n.dstate.deflateParams(n,e,t):-2},deflateSetDictionary(e,t){let n=this;return n.dstate?n.dstate.deflateSetDictionary(n,e,t):-2},read_buf(e,t,n){let i=this,o=i.avail_in;return o>n&&(o=n),o===0?0:(i.avail_in-=o,e.set(i.next_in.subarray(i.next_in_index,i.next_in_index+o),t),i.next_in_index+=o,i.total_in+=o,o)},flush_pending(){let e=this,t=e.dstate.pending;t>e.avail_out&&(t=e.avail_out),t!==0&&(e.next_out.set(e.dstate.pending_buf.subarray(e.dstate.pending_out,e.dstate.pending_out+t),e.next_out_index),e.next_out_index+=t,e.dstate.pending_out+=t,e.total_out+=t,e.avail_out-=t,e.dstate.pending-=t,e.dstate.pending===0&&(e.dstate.pending_out=0))}};function _be(e){let t=this,n=new Ibe,i=kst(e&&e.chunkSize?e.chunkSize:64*1024),o=0,r=new Uint8Array(i),s=e?e.level:-1;typeof s>"u"&&(s=-1),n.deflateInit(s),n.next_out=r,t.append=function(a,c){let d,u,h=0,p=0,g=0,f=[];if(a.length){n.next_in_index=0,n.next_in=a,n.avail_in=a.length;do{if(n.next_out_index=0,n.avail_out=i,d=n.deflate(o),d!=0)throw new Error("deflating: "+n.msg);n.next_out_index&&(n.next_out_index==i?f.push(new Uint8Array(r)):f.push(r.subarray(0,n.next_out_index))),g+=n.next_out_index,c&&n.next_in_index>0&&n.next_in_index!=h&&(c(n.next_in_index),h=n.next_in_index)}while(n.avail_in>0||n.avail_out===0);return f.length>1?(u=new Uint8Array(g),f.forEach(function(b){u.set(b,p),p+=b.length})):u=f[0]?new Uint8Array(f[0]):new Uint8Array,u}},t.flush=function(){let a,c,d=0,u=0,h=[];do{if(n.next_out_index=0,n.avail_out=i,a=n.deflate(4),a!=1&&a!=0)throw new Error("deflating: "+n.msg);i-n.avail_out>0&&h.push(r.slice(0,n.next_out_index)),u+=n.next_out_index}while(n.avail_in>0||n.avail_out===0);return n.deflateEnd(),c=new Uint8Array(u),h.forEach(function(p){c.set(p,d),d+=p.length}),c}}function kst(e){return e+5*(Math.floor(e/16383)+1)}var YTi=y(C(),1);var pu=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],Ube=1440,Yst=0,Ost=4,Hst=9,zst=5,Kst=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],Jst=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],jst=[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,0,0],qst=[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,112,112],$st=[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],eat=[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],O0=15;function Lj(){let e=this,t,n,i,o,r,s;function a(d,u,h,p,g,f,b,x,I,_,E){let S,R,G,B,w,F,P,A,T,L,V,W,M,Q,N;L=0,w=h;do i[d[u+L]]++,L++,w--;while(w!==0);if(i[0]==h)return b[0]=-1,x[0]=0,0;for(A=x[0],F=1;F<=O0&&i[F]===0;F++);for(P=F,A<F&&(A=F),w=O0;w!==0&&i[w]===0;w--);for(G=w,A>w&&(A=w),x[0]=A,Q=1<<F;F<w;F++,Q<<=1)if((Q-=i[F])<0)return-3;if((Q-=i[w])<0)return-3;for(i[w]+=Q,s[1]=F=0,L=1,M=2;--w!==0;)s[M]=F+=i[L],M++,L++;w=0,L=0;do(F=d[u+L])!==0&&(E[s[F]++]=w),L++;while(++w<h);for(h=s[G],s[0]=w=0,L=0,B=-1,W=-A,r[0]=0,V=0,N=0;P<=G;P++)for(S=i[P];S--!==0;){for(;P>W+A;){if(B++,W+=A,N=G-W,N=N>A?A:N,(R=1<<(F=P-W))>S+1&&(R-=S+1,M=P,F<N))for(;++F<N&&!((R<<=1)<=i[++M]);)R-=i[M];if(N=1<<F,_[0]+N>Ube)return-3;r[B]=V=_[0],_[0]+=N,B!==0?(s[B]=w,o[0]=F,o[1]=A,F=w>>>W-A,o[2]=V-r[B-1]-F,I.set(o,(r[B-1]+F)*3)):b[0]=V}for(o[1]=P-W,L>=h?o[0]=192:E[L]<p?(o[0]=E[L]<256?0:96,o[2]=E[L++]):(o[0]=f[E[L]-p]+16+64,o[2]=g[E[L++]-p]),R=1<<P-W,F=w>>>W;F<N;F+=R)I.set(o,(V+F)*3);for(F=1<<P-1;(w&F)!==0;F>>>=1)w^=F;for(w^=F,T=(1<<W)-1;(w&T)!=s[B];)B--,W-=A,T=(1<<W)-1}return Q!==0&&G!=1?-5:0}function c(d){let u;for(t||(t=[],n=[],i=new Int32Array(O0+1),o=[],r=new Int32Array(O0),s=new Int32Array(O0+1)),n.length<d&&(n=[]),u=0;u<d;u++)n[u]=0;for(u=0;u<O0+1;u++)i[u]=0;for(u=0;u<3;u++)o[u]=0;r.set(i.subarray(0,O0),0),s.set(i.subarray(0,O0+1),0)}e.inflate_trees_bits=function(d,u,h,p,g){let f;return c(19),t[0]=0,f=a(d,0,19,19,null,null,h,u,p,t,n),f==-3?g.msg="oversubscribed dynamic bit lengths tree":(f==-5||u[0]===0)&&(g.msg="incomplete dynamic bit lengths tree",f=-3),f},e.inflate_trees_dynamic=function(d,u,h,p,g,f,b,x,I){let _;return c(288),t[0]=0,_=a(h,0,d,257,jst,qst,f,p,x,t,n),_!=0||p[0]===0?(_==-3?I.msg="oversubscribed literal/length tree":_!=-4&&(I.msg="incomplete literal/length tree",_=-3),_):(c(288),_=a(h,d,u,0,$st,eat,b,g,x,t,n),_!=0||g[0]===0&&d>257?(_==-3?I.msg="oversubscribed distance tree":_==-5?(I.msg="incomplete distance tree",_=-3):_!=-4&&(I.msg="empty distance tree with lengths",_=-3),_):0)}}Lj.inflate_trees_fixed=function(e,t,n,i){return e[0]=Hst,t[0]=zst,n[0]=Kst,i[0]=Jst,0};var fU=0,Ebe=1,Tbe=2,Sbe=3,Lbe=4,Rbe=5,Vbe=6,Ej=7,Gbe=8,pU=9;function tat(){let e=this,t,n=0,i,o=0,r=0,s=0,a=0,c=0,d=0,u=0,h,p=0,g,f=0;function b(x,I,_,E,S,R,G,B){let w,F,P,A,T,L,V,W,M,Q,N,k,v,O,H,ee;V=B.next_in_index,W=B.avail_in,T=G.bitb,L=G.bitk,M=G.write,Q=M<G.read?G.read-M-1:G.end-M,N=pu[x],k=pu[I];do{for(;L<20;)W--,T|=(B.read_byte(V++)&255)<<L,L+=8;if(w=T&N,F=_,P=E,ee=(P+w)*3,(A=F[ee])===0){T>>=F[ee+1],L-=F[ee+1],G.win[M++]=F[ee+2],Q--;continue}do{if(T>>=F[ee+1],L-=F[ee+1],(A&16)!==0){for(A&=15,v=F[ee+2]+(T&pu[A]),T>>=A,L-=A;L<15;)W--,T|=(B.read_byte(V++)&255)<<L,L+=8;w=T&k,F=S,P=R,ee=(P+w)*3,A=F[ee];do if(T>>=F[ee+1],L-=F[ee+1],(A&16)!==0){for(A&=15;L<A;)W--,T|=(B.read_byte(V++)&255)<<L,L+=8;if(O=F[ee+2]+(T&pu[A]),T>>=A,L-=A,Q-=v,M>=O)H=M-O,M-H>0&&2>M-H?(G.win[M++]=G.win[H++],G.win[M++]=G.win[H++],v-=2):(G.win.set(G.win.subarray(H,H+2),M),M+=2,H+=2,v-=2);else{H=M-O;do H+=G.end;while(H<0);if(A=G.end-H,v>A){if(v-=A,M-H>0&&A>M-H)do G.win[M++]=G.win[H++];while(--A!==0);else G.win.set(G.win.subarray(H,H+A),M),M+=A,H+=A,A=0;H=0}}if(M-H>0&&v>M-H)do G.win[M++]=G.win[H++];while(--v!==0);else G.win.set(G.win.subarray(H,H+v),M),M+=v,H+=v,v=0;break}else if((A&64)===0)w+=F[ee+2],w+=T&pu[A],ee=(P+w)*3,A=F[ee];else return B.msg="invalid distance code",v=B.avail_in-W,v=L>>3<v?L>>3:v,W+=v,V-=v,L-=v<<3,G.bitb=T,G.bitk=L,B.avail_in=W,B.total_in+=V-B.next_in_index,B.next_in_index=V,G.write=M,-3;while(!0);break}if((A&64)===0){if(w+=F[ee+2],w+=T&pu[A],ee=(P+w)*3,(A=F[ee])===0){T>>=F[ee+1],L-=F[ee+1],G.win[M++]=F[ee+2],Q--;break}}else return(A&32)!==0?(v=B.avail_in-W,v=L>>3<v?L>>3:v,W+=v,V-=v,L-=v<<3,G.bitb=T,G.bitk=L,B.avail_in=W,B.total_in+=V-B.next_in_index,B.next_in_index=V,G.write=M,1):(B.msg="invalid literal/length code",v=B.avail_in-W,v=L>>3<v?L>>3:v,W+=v,V-=v,L-=v<<3,G.bitb=T,G.bitk=L,B.avail_in=W,B.total_in+=V-B.next_in_index,B.next_in_index=V,G.write=M,-3)}while(!0)}while(Q>=258&&W>=10);return v=B.avail_in-W,v=L>>3<v?L>>3:v,W+=v,V-=v,L-=v<<3,G.bitb=T,G.bitk=L,B.avail_in=W,B.total_in+=V-B.next_in_index,B.next_in_index=V,G.write=M,0}e.init=function(x,I,_,E,S,R){t=fU,d=x,u=I,h=_,p=E,g=S,f=R,i=null},e.proc=function(x,I,_){let E,S,R,G=0,B=0,w=0,F,P,A,T;for(w=I.next_in_index,F=I.avail_in,G=x.bitb,B=x.bitk,P=x.write,A=P<x.read?x.read-P-1:x.end-P;;)switch(t){case fU:if(A>=258&&F>=10&&(x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,_=b(d,u,h,p,g,f,x,I),w=I.next_in_index,F=I.avail_in,G=x.bitb,B=x.bitk,P=x.write,A=P<x.read?x.read-P-1:x.end-P,_!=0)){t=_==1?Ej:pU;break}r=d,i=h,o=p,t=Ebe;case Ebe:for(E=r;B<E;){if(F!==0)_=0;else return x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_);F--,G|=(I.read_byte(w++)&255)<<B,B+=8}if(S=(o+(G&pu[E]))*3,G>>>=i[S+1],B-=i[S+1],R=i[S],R===0){s=i[S+2],t=Vbe;break}if((R&16)!==0){a=R&15,n=i[S+2],t=Tbe;break}if((R&64)===0){r=R,o=S/3+i[S+2];break}if((R&32)!==0){t=Ej;break}return t=pU,I.msg="invalid literal/length code",_=-3,x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_);case Tbe:for(E=a;B<E;){if(F!==0)_=0;else return x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_);F--,G|=(I.read_byte(w++)&255)<<B,B+=8}n+=G&pu[E],G>>=E,B-=E,r=u,i=g,o=f,t=Sbe;case Sbe:for(E=r;B<E;){if(F!==0)_=0;else return x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_);F--,G|=(I.read_byte(w++)&255)<<B,B+=8}if(S=(o+(G&pu[E]))*3,G>>=i[S+1],B-=i[S+1],R=i[S],(R&16)!==0){a=R&15,c=i[S+2],t=Lbe;break}if((R&64)===0){r=R,o=S/3+i[S+2];break}return t=pU,I.msg="invalid distance code",_=-3,x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_);case Lbe:for(E=a;B<E;){if(F!==0)_=0;else return x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_);F--,G|=(I.read_byte(w++)&255)<<B,B+=8}c+=G&pu[E],G>>=E,B-=E,t=Rbe;case Rbe:for(T=P-c;T<0;)T+=x.end;for(;n!==0;){if(A===0&&(P==x.end&&x.read!==0&&(P=0,A=P<x.read?x.read-P-1:x.end-P),A===0&&(x.write=P,_=x.inflate_flush(I,_),P=x.write,A=P<x.read?x.read-P-1:x.end-P,P==x.end&&x.read!==0&&(P=0,A=P<x.read?x.read-P-1:x.end-P),A===0)))return x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_);x.win[P++]=x.win[T++],A--,T==x.end&&(T=0),n--}t=fU;break;case Vbe:if(A===0&&(P==x.end&&x.read!==0&&(P=0,A=P<x.read?x.read-P-1:x.end-P),A===0&&(x.write=P,_=x.inflate_flush(I,_),P=x.write,A=P<x.read?x.read-P-1:x.end-P,P==x.end&&x.read!==0&&(P=0,A=P<x.read?x.read-P-1:x.end-P),A===0)))return x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_);_=0,x.win[P++]=s,A--,t=fU;break;case Ej:if(B>7&&(B-=8,F++,w--),x.write=P,_=x.inflate_flush(I,_),P=x.write,A=P<x.read?x.read-P-1:x.end-P,x.read!=x.write)return x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_);t=Gbe;case Gbe:return _=1,x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_);case pU:return _=-3,x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_);default:return _=-2,x.bitb=G,x.bitk=B,I.avail_in=F,I.total_in+=w-I.next_in_index,I.next_in_index=w,x.write=P,x.inflate_flush(I,_)}},e.free=function(){}}var Zbe=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],BS=0,Tj=1,Bbe=2,wbe=3,Xbe=4,Wbe=5,AU=6,gU=7,Fbe=8,cI=9;function nat(e,t){let n=this,i=BS,o=0,r=0,s=0,a,c=[0],d=[0],u=new tat,h=0,p=new Int32Array(Ube*3),g=0,f=new Lj;n.bitk=0,n.bitb=0,n.win=new Uint8Array(t),n.end=t,n.read=0,n.write=0,n.reset=function(b,x){x&&(x[0]=g),i==AU&&u.free(b),i=BS,n.bitk=0,n.bitb=0,n.read=n.write=0},n.reset(e,null),n.inflate_flush=function(b,x){let I,_,E;return _=b.next_out_index,E=n.read,I=(E<=n.write?n.write:n.end)-E,I>b.avail_out&&(I=b.avail_out),I!==0&&x==-5&&(x=0),b.avail_out-=I,b.total_out+=I,b.next_out.set(n.win.subarray(E,E+I),_),_+=I,E+=I,E==n.end&&(E=0,n.write==n.end&&(n.write=0),I=n.write-E,I>b.avail_out&&(I=b.avail_out),I!==0&&x==-5&&(x=0),b.avail_out-=I,b.total_out+=I,b.next_out.set(n.win.subarray(E,E+I),_),_+=I,E+=I),b.next_out_index=_,n.read=E,x},n.proc=function(b,x){let I,_,E,S,R,G,B,w;for(S=b.next_in_index,R=b.avail_in,_=n.bitb,E=n.bitk,G=n.write,B=G<n.read?n.read-G-1:n.end-G;;){let F,P,A,T,L,V,W,M;switch(i){case BS:for(;E<3;){if(R!==0)x=0;else return n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);R--,_|=(b.read_byte(S++)&255)<<E,E+=8}switch(I=_&7,h=I&1,I>>>1){case 0:_>>>=3,E-=3,I=E&7,_>>>=I,E-=I,i=Tj;break;case 1:F=[],P=[],A=[[]],T=[[]],Lj.inflate_trees_fixed(F,P,A,T),u.init(F[0],P[0],A[0],0,T[0],0),_>>>=3,E-=3,i=AU;break;case 2:_>>>=3,E-=3,i=wbe;break;case 3:return _>>>=3,E-=3,i=cI,b.msg="invalid block type",x=-3,n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x)}break;case Tj:for(;E<32;){if(R!==0)x=0;else return n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);R--,_|=(b.read_byte(S++)&255)<<E,E+=8}if((~_>>>16&65535)!=(_&65535))return i=cI,b.msg="invalid stored block lengths",x=-3,n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);o=_&65535,_=E=0,i=o!==0?Bbe:h!==0?gU:BS;break;case Bbe:if(R===0||B===0&&(G==n.end&&n.read!==0&&(G=0,B=G<n.read?n.read-G-1:n.end-G),B===0&&(n.write=G,x=n.inflate_flush(b,x),G=n.write,B=G<n.read?n.read-G-1:n.end-G,G==n.end&&n.read!==0&&(G=0,B=G<n.read?n.read-G-1:n.end-G),B===0)))return n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);if(x=0,I=o,I>R&&(I=R),I>B&&(I=B),n.win.set(b.read_buf(S,I),G),S+=I,R-=I,G+=I,B-=I,(o-=I)!==0)break;i=h!==0?gU:BS;break;case wbe:for(;E<14;){if(R!==0)x=0;else return n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);R--,_|=(b.read_byte(S++)&255)<<E,E+=8}if(r=I=_&16383,(I&31)>29||(I>>5&31)>29)return i=cI,b.msg="too many length or distance symbols",x=-3,n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);if(I=258+(I&31)+(I>>5&31),!a||a.length<I)a=[];else for(w=0;w<I;w++)a[w]=0;_>>>=14,E-=14,s=0,i=Xbe;case Xbe:for(;s<4+(r>>>10);){for(;E<3;){if(R!==0)x=0;else return n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);R--,_|=(b.read_byte(S++)&255)<<E,E+=8}a[Zbe[s++]]=_&7,_>>>=3,E-=3}for(;s<19;)a[Zbe[s++]]=0;if(c[0]=7,I=f.inflate_trees_bits(a,c,d,p,b),I!=0)return x=I,x==-3&&(a=null,i=cI),n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);s=0,i=Wbe;case Wbe:for(;I=r,!(s>=258+(I&31)+(I>>5&31));){let Q,N;for(I=c[0];E<I;){if(R!==0)x=0;else return n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);R--,_|=(b.read_byte(S++)&255)<<E,E+=8}if(I=p[(d[0]+(_&pu[I]))*3+1],N=p[(d[0]+(_&pu[I]))*3+2],N<16)_>>>=I,E-=I,a[s++]=N;else{for(w=N==18?7:N-14,Q=N==18?11:3;E<I+w;){if(R!==0)x=0;else return n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);R--,_|=(b.read_byte(S++)&255)<<E,E+=8}if(_>>>=I,E-=I,Q+=_&pu[w],_>>>=w,E-=w,w=s,I=r,w+Q>258+(I&31)+(I>>5&31)||N==16&&w<1)return a=null,i=cI,b.msg="invalid bit length repeat",x=-3,n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);N=N==16?a[w-1]:0;do a[w++]=N;while(--Q!==0);s=w}}if(d[0]=-1,L=[],V=[],W=[],M=[],L[0]=9,V[0]=6,I=r,I=f.inflate_trees_dynamic(257+(I&31),1+(I>>5&31),a,L,V,W,M,p,b),I!=0)return I==-3&&(a=null,i=cI),x=I,n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);u.init(L[0],V[0],p,W[0],p,M[0]),i=AU;case AU:if(n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,(x=u.proc(n,b,x))!=1)return n.inflate_flush(b,x);if(x=0,u.free(b),S=b.next_in_index,R=b.avail_in,_=n.bitb,E=n.bitk,G=n.write,B=G<n.read?n.read-G-1:n.end-G,h===0){i=BS;break}i=gU;case gU:if(n.write=G,x=n.inflate_flush(b,x),G=n.write,B=G<n.read?n.read-G-1:n.end-G,n.read!=n.write)return n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);i=Fbe;case Fbe:return x=1,n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);case cI:return x=-3,n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x);default:return x=-2,n.bitb=_,n.bitk=E,b.avail_in=R,b.total_in+=S-b.next_in_index,b.next_in_index=S,n.write=G,n.inflate_flush(b,x)}}},n.free=function(b){n.reset(b,null),n.win=null,p=null},n.set_dictionary=function(b,x,I){n.win.set(b.subarray(x,x+I),0),n.read=n.write=I},n.sync_point=function(){return i==Tj?1:0}}var iat=32,oat=8,rat=0,Pbe=1,Mbe=2,vbe=3,Nbe=4,Dbe=5,Sj=6,SF=7,Qbe=12,H0=13,sat=[0,0,255,255];function aat(){let e=this;e.mode=0,e.method=0,e.was=[0],e.need=0,e.marker=0,e.wbits=0;function t(n){return!n||!n.istate?-2:(n.total_in=n.total_out=0,n.msg=null,n.istate.mode=SF,n.istate.blocks.reset(n,null),0)}e.inflateEnd=function(n){return e.blocks&&e.blocks.free(n),e.blocks=null,0},e.inflateInit=function(n,i){return n.msg=null,e.blocks=null,i<8||i>15?(e.inflateEnd(n),-2):(e.wbits=i,n.istate.blocks=new nat(n,1<<i),t(n),0)},e.inflate=function(n,i){let o,r;if(!n||!n.istate||!n.next_in)return-2;let s=n.istate;for(i=i==Ost?-5:0,o=-5;;)switch(s.mode){case rat:if(n.avail_in===0)return o;if(o=i,n.avail_in--,n.total_in++,((s.method=n.read_byte(n.next_in_index++))&15)!=oat){s.mode=H0,n.msg="unknown compression method",s.marker=5;break}if((s.method>>4)+8>s.wbits){s.mode=H0,n.msg="invalid win size",s.marker=5;break}s.mode=Pbe;case Pbe:if(n.avail_in===0)return o;if(o=i,n.avail_in--,n.total_in++,r=n.read_byte(n.next_in_index++)&255,((s.method<<8)+r)%31!==0){s.mode=H0,n.msg="incorrect header check",s.marker=5;break}if((r&iat)===0){s.mode=SF;break}s.mode=Mbe;case Mbe:if(n.avail_in===0)return o;o=i,n.avail_in--,n.total_in++,s.need=(n.read_byte(n.next_in_index++)&255)<<24&4278190080,s.mode=vbe;case vbe:if(n.avail_in===0)return o;o=i,n.avail_in--,n.total_in++,s.need+=(n.read_byte(n.next_in_index++)&255)<<16&16711680,s.mode=Nbe;case Nbe:if(n.avail_in===0)return o;o=i,n.avail_in--,n.total_in++,s.need+=(n.read_byte(n.next_in_index++)&255)<<8&65280,s.mode=Dbe;case Dbe:return n.avail_in===0?o:(o=i,n.avail_in--,n.total_in++,s.need+=n.read_byte(n.next_in_index++)&255,s.mode=Sj,2);case Sj:return s.mode=H0,n.msg="need dictionary",s.marker=0,-2;case SF:if(o=s.blocks.proc(n,o),o==-3){s.mode=H0,s.marker=0;break}if(o==0&&(o=i),o!=1)return o;o=i,s.blocks.reset(n,s.was),s.mode=Qbe;case Qbe:return n.avail_in=0,1;case H0:return-3;default:return-2}},e.inflateSetDictionary=function(n,i,o){let r=0,s=o;if(!n||!n.istate||n.istate.mode!=Sj)return-2;let a=n.istate;return s>=1<<a.wbits&&(s=(1<<a.wbits)-1,r=o-s),a.blocks.set_dictionary(i,r,s),a.mode=SF,0},e.inflateSync=function(n){let i,o,r,s,a;if(!n||!n.istate)return-2;let c=n.istate;if(c.mode!=H0&&(c.mode=H0,c.marker=0),(i=n.avail_in)===0)return-5;for(o=n.next_in_index,r=c.marker;i!==0&&r<4;)n.read_byte(o)==sat[r]?r++:n.read_byte(o)!==0?r=0:r=4-r,o++,i--;return n.total_in+=o-n.next_in_index,n.next_in_index=o,n.avail_in=i,c.marker=r,r!=4?-3:(s=n.total_in,a=n.total_out,t(n),n.total_in=s,n.total_out=a,c.mode=SF,0)},e.inflateSyncPoint=function(n){return!n||!n.istate||!n.istate.blocks?-2:n.istate.blocks.sync_point()}}function kbe(){}kbe.prototype={inflateInit(e){let t=this;return t.istate=new aat,e||(e=15),t.istate.inflateInit(t,e)},inflate(e){let t=this;return t.istate?t.istate.inflate(t,e):-2},inflateEnd(){let e=this;if(!e.istate)return-2;let t=e.istate.inflateEnd(e);return e.istate=null,t},inflateSync(){let e=this;return e.istate?e.istate.inflateSync(e):-2},inflateSetDictionary(e,t){let n=this;return n.istate?n.istate.inflateSetDictionary(n,e,t):-2},read_byte(e){return this.next_in[e]},read_buf(e,t){return this.next_in.subarray(e,e+t)}};function Ybe(e){let t=this,n=new kbe,i=e&&e.chunkSize?Math.floor(e.chunkSize*2):128*1024,o=Yst,r=new Uint8Array(i),s=!1;n.inflateInit(),n.next_out=r,t.append=function(a,c){let d=[],u,h,p=0,g=0,f=0;if(a.length!==0){n.next_in_index=0,n.next_in=a,n.avail_in=a.length;do{if(n.next_out_index=0,n.avail_out=i,n.avail_in===0&&!s&&(n.next_in_index=0,s=!0),u=n.inflate(o),s&&u===-5){if(n.avail_in!==0)throw new Error("inflating: bad input")}else if(u!==0&&u!==1)throw new Error("inflating: "+n.msg);if((s||u===1)&&n.avail_in===a.length)throw new Error("inflating: bad input");n.next_out_index&&(n.next_out_index===i?d.push(new Uint8Array(r)):d.push(r.subarray(0,n.next_out_index))),f+=n.next_out_index,c&&n.next_in_index>0&&n.next_in_index!=p&&(c(n.next_in_index),p=n.next_in_index)}while(n.avail_in>0||n.avail_out===0);return d.length>1?(h=new Uint8Array(f),d.forEach(function(b){h.set(b,g),g+=b.length})):h=d[0]?new Uint8Array(d[0]):new Uint8Array,h}},t.flush=function(){n.inflateEnd()}}var eSi=y(C(),1);var HTi=y(C(),1);var Rj=new Date(2107,11,31),Vj=new Date(1980,0,1),ri=void 0,Au="undefined",Wg="function";var KTi=y(C(),1);var LF=class{constructor(t){return class extends TransformStream{constructor(n,i){let o=new t(i);super({transform(r,s){s.enqueue(o.append(r))},flush(r){let s=o.flush();s&&r.enqueue(s)}})}}}};var cat=64,Obe=2;try{typeof navigator!=Au&&navigator.hardwareConcurrency&&(Obe=navigator.hardwareConcurrency)}catch{}var lat={chunkSize:512*1024,maxWorkers:Obe,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,workerScripts:ri,CompressionStreamNative:typeof CompressionStream!=Au&&CompressionStream,DecompressionStreamNative:typeof DecompressionStream!=Au&&DecompressionStream},K0=Object.assign({},lat);function RF(){return K0}function bU(e){return Math.max(e.chunkSize,cat)}function wS(e){let{baseURL:t,chunkSize:n,maxWorkers:i,terminateWorkerTimeout:o,useCompressionStream:r,useWebWorkers:s,Deflate:a,Inflate:c,CompressionStream:d,DecompressionStream:u,workerScripts:h}=e;if(z0("baseURL",t),z0("chunkSize",n),z0("maxWorkers",i),z0("terminateWorkerTimeout",o),z0("useCompressionStream",r),z0("useWebWorkers",s),a&&(K0.CompressionStream=new LF(a)),c&&(K0.DecompressionStream=new LF(c)),z0("CompressionStream",d),z0("DecompressionStream",u),h!==ri){let{deflate:p,inflate:g}=h;if((p||g)&&(K0.workerScripts||(K0.workerScripts={})),p){if(!Array.isArray(p))throw new Error("workerScripts.deflate must be an array");K0.workerScripts.deflate=p}if(g){if(!Array.isArray(g))throw new Error("workerScripts.inflate must be an array");K0.workerScripts.inflate=g}}}function z0(e,t){t!==ri&&(K0[e]=t)}var nSi=y(C(),1);var zSi=y(C(),1);var vSi=y(C(),1);var FSi=y(C(),1);var aSi=y(C(),1);var oSi=y(C(),1),Hbe=[];for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t&1?t=t>>>1^3988292384:t=t>>>1;Hbe[e]=t}var Fg=class{constructor(t){this.crc=t||-1}append(t){let n=this.crc|0;for(let i=0,o=t.length|0;i<o;i++)n=n>>>8^Hbe[(n^t[i])&255];this.crc=n}get(){return~this.crc}};var VF=class extends TransformStream{constructor(){let t,n=new Fg;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 SSi=y(C(),1);var dSi=y(C(),1);function XS(e){if(typeof TextEncoder==Au){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 mSi=y(C(),1),Pl={concat(e,t){if(e.length===0||t.length===0)return e.concat(t);let n=e[e.length-1],i=Pl.getPartial(n);return i===32?e.concat(t):Pl._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+Pl.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]=Pl.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=Pl.getPartial(o);return i.push(Pl.partial(t+r&31,t+r>32?n:i.pop(),1)),i}},GF={bytes:{fromBits(e){let n=Pl.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(Pl.partial(8*(n&3),i)),t}}},zbe={};zbe.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=GF.utf8String.toBits(e));let n=t._buffer=Pl.concat(t._buffer,e),i=t._length,o=t._length=i+Pl.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=Pl.concat(t,[Pl.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 Gj={};Gj.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 h=s^s<<1^s<<2^s<<3^s<<4;h=h>>8^h&255^99,n[u]=h,i[h]=u,d=o[c=o[a=o[u]]];let p=d*16843009^c*65537^a*257^u*16843008,g=o[h]*257^h*16843008;for(let f=0;f<4;f++)e[f][u]=g=g<<24^g>>>8,t[f][h]=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],h=e[0]^n[0],p=e[t?3:1]^n[1],g=e[2]^n[2],f=e[t?1:3]^n[3],b=4,x,I,_;for(let E=0;E<i;E++)x=s[h>>>24]^a[p>>16&255]^c[g>>8&255]^d[f&255]^n[b],I=s[p>>>24]^a[g>>16&255]^c[f>>8&255]^d[h&255]^n[b+1],_=s[g>>>24]^a[f>>16&255]^c[h>>8&255]^d[p&255]^n[b+2],f=s[f>>>24]^a[h>>16&255]^c[p>>8&255]^d[g&255]^n[b+3],b+=4,h=x,p=I,g=_;for(let E=0;E<4;E++)o[t?3&-E:E]=u[h>>>24]<<24^u[p>>16&255]<<16^u[g>>8&255]<<8^u[f&255]^n[b++],x=h,h=p,p=g,g=f,f=x;return o}};var Kbe={getRandomValues(e){let t=new Uint32Array(e.buffer),n=i=>{let o=987654321,r=4294967295;return function(){return o=36969*(o&65535)+(o>>16)&r,i=18e3*(i&65535)+(i>>16)&r,(((o<<16)+i&r)/4294967296+.5)*(Math.random()>.5?1:-1)}};for(let i=0,o;i<e.length;i+=4){let r=n((o||Math.random())*4294967296);o=r()*987654071,t[i/4]=r()*4294967296|0}return e}},Zj={};Zj.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=Pl.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 Pl.clamp(t,o)}};var J0={importKey(e){return new J0.hmacSha1(GF.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),h=new DataView(u),p=0,g=Pl;for(t=GF.bytes.toBits(t),d=1;p<(o||1);d++){for(r=s=e.encrypt(g.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++)h.setInt32(p,r[a]),p+=4}return u.slice(0,i/8)}};J0.hmacSha1=class{constructor(e){let t=this,n=t._hash=zbe.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 CSi=y(C(),1);var dat=typeof crypto!=Au&&typeof crypto.getRandomValues==Wg,j0="Invalid password",lI="Invalid signature",Pg="zipjs-abort-check-password";function yU(e){return dat?crypto.getRandomValues(e):Kbe.getRandomValues(e)}var WS=16,uat="raw",qbe={name:"PBKDF2"},mat={name:"HMAC"},hat="SHA-1",fat=Object.assign({hash:mat},qbe),Bj=Object.assign({iterations:1e3,hash:{name:hat}},qbe),pat=["deriveBits"],BF=[8,12,16],ZF=[16,24,32],q0=10,Aat=[0,0,0,0],IU=typeof crypto!=Au,WF=IU&&crypto.subtle,$be=IU&&typeof WF!=Au,yp=GF.bytes,gat=Gj.aes,bat=Zj.ctrGladman,yat=J0.hmacSha1,Jbe=IU&&$be&&typeof WF.importKey==Wg,jbe=IU&&$be&&typeof WF.deriveBits==Wg,CU=class extends TransformStream{constructor({password:t,rawPassword:n,signed:i,encryptionStrength:o,checkPasswordOnly:r}){super({start(){Object.assign(this,{ready:new Promise(s=>this.resolveReady=s),password:n0e(t,n),signed:i,strength:o-1,pending:new Uint8Array})},async transform(s,a){let c=this,{password:d,strength:u,resolveReady:h,ready:p}=c;d?(await Cat(c,u,d,Bm(s,0,BF[u]+2)),s=Bm(s,BF[u]+2),r?a.error(new Error(Pg)):h()):await p;let g=new Uint8Array(s.length-q0-(s.length-q0)%WS);a.enqueue(e0e(c,s,g,0,q0,!0))},async flush(s){let{signed:a,ctr:c,hmac:d,pending:u,ready:h}=this;if(d&&c){await h;let p=Bm(u,0,u.length-q0),g=Bm(u,u.length-q0),f=new Uint8Array;if(p.length){let b=XF(yp,p);d.update(b);let x=c.update(b);f=wF(yp,x)}if(a){let b=Bm(wF(yp,d.digest()),0,q0);for(let x=0;x<q0;x++)if(b[x]!=g[x])throw new Error(lI)}s.enqueue(f)}}})}},xU=class extends TransformStream{constructor({password:t,rawPassword:n,encryptionStrength:i}){let o;super({start(){Object.assign(this,{ready:new Promise(r=>this.resolveReady=r),password:n0e(t,n),strength:i-1,pending:new Uint8Array})},async transform(r,s){let a=this,{password:c,strength:d,resolveReady:u,ready:h}=a,p=new Uint8Array;c?(p=await xat(a,d,c),u()):await h;let g=new Uint8Array(p.length+r.length-r.length%WS);g.set(p,0),s.enqueue(e0e(a,r,g,p.length,0))},async flush(r){let{ctr:s,hmac:a,pending:c,ready:d}=this;if(a&&s){await d;let u=new Uint8Array;if(c.length){let h=s.update(XF(yp,c));a.update(h),u=wF(yp,h)}o.signature=wF(yp,a.digest()).slice(0,q0),r.enqueue(wj(u,o.signature))}}}),o=this}};function e0e(e,t,n,i,o,r){let{ctr:s,hmac:a,pending:c}=e,d=t.length-o;c.length&&(t=wj(c,t),n=Eat(n,d-d%WS));let u;for(u=0;u<=d-WS;u+=WS){let h=XF(yp,Bm(t,u,u+WS));r&&a.update(h);let p=s.update(h);r||a.update(p),n.set(wF(yp,p),u+i)}return e.pending=Bm(t,u),n}async function Cat(e,t,n,i){let o=await t0e(e,t,n,Bm(i,0,BF[t])),r=Bm(i,BF[t]);if(o[0]!=r[0]||o[1]!=r[1])throw new Error(j0)}async function xat(e,t,n){let i=yU(new Uint8Array(BF[t])),o=await t0e(e,t,n,i);return wj(i,o)}async function t0e(e,t,n,i){e.password=null;let o=await Iat(uat,n,fat,!1,pat),r=await _at(Object.assign({salt:i},Bj),o,8*(ZF[t]*2+2)),s=new Uint8Array(r),a=XF(yp,Bm(s,0,ZF[t])),c=XF(yp,Bm(s,ZF[t],ZF[t]*2)),d=Bm(s,ZF[t]*2);return Object.assign(e,{keys:{key:a,authentication:c,passwordVerification:d},ctr:new bat(new gat(a),Array.from(Aat)),hmac:new yat(c)}),d}async function Iat(e,t,n,i,o){if(Jbe)try{return await WF.importKey(e,t,n,i,o)}catch{return Jbe=!1,J0.importKey(t)}else return J0.importKey(t)}async function _at(e,t,n){if(jbe)try{return await WF.deriveBits(e,t,n)}catch{return jbe=!1,J0.pbkdf2(t,e.salt,Bj.iterations,n)}else return J0.pbkdf2(t,e.salt,Bj.iterations,n)}function n0e(e,t){return t===ri?XS(e):t}function wj(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 Eat(e,t){if(t&&t>e.length){let n=e;e=new Uint8Array(t),e.set(n,0)}return e}function Bm(e,t,n){return e.subarray(t,n)}function wF(e,t){return e.fromBits(t)}function XF(e,t){return e.toBits(t)}var GSi=y(C(),1);var FS=12,_U=class extends TransformStream{constructor({password:t,passwordVerification:n,checkPasswordOnly:i}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),s0e(this,t)},transform(o,r){let s=this;if(s.password){let a=i0e(s,o.subarray(0,FS));if(s.password=null,a[FS-1]!=s.passwordVerification)throw new Error(j0);o=o.subarray(FS)}i?r.error(new Error(Pg)):r.enqueue(i0e(s,o))}})}},EU=class extends TransformStream{constructor({password:t,passwordVerification:n}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),s0e(this,t)},transform(i,o){let r=this,s,a;if(r.password){r.password=null;let c=yU(new Uint8Array(FS));c[FS-1]=r.passwordVerification,s=new Uint8Array(i.length+c.length),s.set(o0e(r,c),0),a=FS}else s=new Uint8Array(i.length),a=0;s.set(o0e(r,i),a),o.enqueue(s)}})}};function i0e(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=a0e(e)^t[i],Xj(e,n[i]);return n}function o0e(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=a0e(e)^t[i],Xj(e,t[i]);return n}function s0e(e,t){let n=[305419896,591751049,878082192];Object.assign(e,{keys:n,crcKey0:new Fg(n[0]),crcKey2:new Fg(n[2])});for(let i=0;i<t.length;i++)Xj(e,t.charCodeAt(i))}function Xj(e,t){let[n,i,o]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.get(),i=r0e(Math.imul(r0e(i+c0e(n)),134775813)+1),e.crcKey2.append([i>>>24]),o=~e.crcKey2.get(),e.keys=[n,i,o]}function a0e(e){let t=e.keys[2]|2;return c0e(Math.imul(t,t^1)>>>8)}function c0e(e){return e&255}function r0e(e){return e&4294967295}var FF="Invalid uncompressed size",Tat="deflate-raw",TU=class extends TransformStream{constructor(t,{chunkSize:n,CompressionStream:i,CompressionStreamNative:o}){super({});let{compressed:r,encrypted:s,useCompressionStream:a,zipCrypto:c,signed:d,level:u}=t,h=this,p,g,f=super.readable;(!s||c)&&d&&(p=new VF,f=$0(f,p)),r&&(f=d0e(f,a,{level:u,chunkSize:n},o,i)),s&&(c?f=$0(f,new EU(t)):(g=new xU(t),f=$0(f,g))),l0e(h,f,()=>{let b;s&&!c&&(b=g.signature),(!s||c)&&d&&(b=new DataView(p.value.buffer).getUint32(0)),h.signature=b})}},SU=class extends TransformStream{constructor(t,{chunkSize:n,DecompressionStream:i,DecompressionStreamNative:o}){super({});let{zipCrypto:r,encrypted:s,signed:a,signature:c,compressed:d,useCompressionStream:u}=t,h,p,g=super.readable;s&&(r?g=$0(g,new _U(t)):(p=new CU(t),g=$0(g,p))),d&&(g=d0e(g,u,{chunkSize:n},o,i)),(!s||r)&&a&&(h=new VF,g=$0(g,h)),l0e(this,g,()=>{if((!s||r)&&a){let f=new DataView(h.value.buffer);if(c!=f.getUint32(0,!1))throw new Error(lI)}})}};function l0e(e,t,n){t=$0(t,new TransformStream({flush:n})),Object.defineProperty(e,"readable",{get(){return t}})}function d0e(e,t,n,i,o){let r=t&&i?i:o;return $0(e,new r(Tat,n))}function $0(e,t){return e.pipeThrough(t)}var u0e="message",m0e="start",h0e="pull",Wj="data",f0e="ack",Fj="close",VU="deflate",GU="inflate";var LU=class extends TransformStream{constructor(t,n){super({});let i=this,{codecType:o}=t,r;o.startsWith(VU)?r=TU:o.startsWith(GU)&&(r=SU),i.outputSize=0;let s=0,a=new r(t,n),c=super.readable,d=new TransformStream({transform(h,p){h&&h.length&&(s+=h.length,p.enqueue(h))},flush(){Object.assign(i,{inputSize:s})}}),u=new TransformStream({transform(h,p){if(h&&h.length&&(p.enqueue(h),i.outputSize+=h.length,t.outputSize&&i.outputSize>t.outputSize))throw new Error(FF)},flush(){let{signature:h}=a;Object.assign(i,{signature:h,inputSize:s})}});Object.defineProperty(i,"readable",{get(){return c.pipeThrough(d).pipeThrough(a).pipeThrough(u)}})}},RU=class extends TransformStream{constructor(t){let n;super({transform:i,flush(o){n&&n.length&&o.enqueue(n)}});function i(o,r){if(n){let s=new Uint8Array(n.length+o.length);s.set(n),s.set(o,n.length),o=s,n=null}o.length>t?(r.enqueue(o.slice(0,t)),i(o.slice(t),r)):n=o}}};var USi=y(C(),1);var g0e=typeof Worker!=Au;var PS=class{constructor(t,{readable:n,writable:i},{options:o,config:r,streamOptions:s,useWebWorkers:a,transferStreams:c,scripts:d},u){let{signal:h}=s;return Object.assign(t,{busy:!0,readable:n.pipeThrough(new RU(r.chunkSize)).pipeThrough(new Mj(s),{signal:h}),writable:i,options:Object.assign({},o),scripts:d,transferStreams:c,terminate(){return new Promise(p=>{let{worker:g,busy:f}=t;g?(f?t.resolveTerminated=p:(g.terminate(),p()),t.interface=null):p()})},onTaskFinished(){let{resolveTerminated:p}=t;p&&(t.resolveTerminated=null,t.terminated=!0,t.worker.terminate(),p()),t.busy=!1,u(t)}}),(a&&g0e?Sat:b0e)(t,r)}},Mj=class extends TransformStream{constructor({onstart:t,onprogress:n,size:i,onend:o}){let r=0;super({async start(){t&&await Pj(t,i)},async transform(s,a){r+=s.length,n&&await Pj(n,r,i),a.enqueue(s)},async flush(){o&&await Pj(o,r)}})}};async function Pj(e,...t){try{await e(...t)}catch{}}function b0e(e,t){return{run:()=>Lat(e,t)}}function Sat(e,t){let{baseURL:n,chunkSize:i}=t;if(!e.interface){let o;try{o=Gat(e.scripts[0],n,e)}catch{return g0e=!1,b0e(e,t)}Object.assign(e,{worker:o,interface:{run:()=>Rat(e,{chunkSize:i})}})}return e.interface}async function Lat({options:e,readable:t,writable:n,onTaskFinished:i},o){let r;try{r=new LU(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 Rat(e,t){let n,i,o=new Promise((p,g)=>{n=p,i=g});Object.assign(e,{reader:null,writer:null,resolveResult:n,rejectResult:i,result:o});let{readable:r,options:s,scripts:a}=e,{writable:c,closed:d}=Vat(e.writable),u=ZU({type:m0e,scripts:a.slice(1),options:s,config:t,readable:r,writable:c},e);u||Object.assign(e,{reader:r.getReader(),writer:c.getWriter()});let h=await o;return u||await c.getWriter().close(),await d,h}function Vat(e){let t,n=new Promise(o=>t=o);return{writable:new WritableStream({async write(o){let r=e.getWriter();await r.ready,await r.write(o),r.releaseLock()},close(){t()},abort(o){return e.getWriter().abort(o)}}),closed:n}}var p0e=!0,A0e=!0;function Gat(e,t,n){let i={type:"module"},o,r;typeof e==Wg&&(e=e());try{o=new URL(e,t)}catch{o=e}if(p0e)try{r=new Worker(o)}catch{p0e=!1,r=new Worker(o,i)}else r=new Worker(o,i);return r.addEventListener(u0e,s=>Zat(s,n)),r}function ZU(e,{worker:t,writer:n,onTaskFinished:i,transferStreams:o}){try{let{value:r,readable:s,writable:a}=e,c=[];if(r&&(r.byteLength<r.buffer.byteLength?e.value=r.buffer.slice(0,r.byteLength):e.value=r.buffer,c.push(e.value)),o&&A0e?(s&&c.push(s),a&&c.push(a)):e.readable=e.writable=null,c.length)try{return t.postMessage(e,c),!0}catch{A0e=!1,e.readable=e.writable=null,t.postMessage(e)}else t.postMessage(e)}catch(r){throw n&&n.releaseLock(),i(),r}}async function Zat({data:e},t){let{type:n,value:i,messageId:o,result:r,error:s}=e,{reader:a,writer:c,resolveResult:d,rejectResult:u,onTaskFinished:h}=t;try{if(s){let{message:g,stack:f,code:b,name:x,outputSize:I}=s,_=new Error(g);Object.assign(_,{stack:f,code:b,name:x,outputSize:I}),p(_)}else{if(n==h0e){let{value:g,done:f}=await a.read();ZU({type:Wj,value:g,done:f,messageId:o},t)}n==Wj&&(await c.ready,await c.write(new Uint8Array(i)),ZU({type:f0e,messageId:o},t)),n==Fj&&p(null,r)}}catch(g){ZU({type:Fj,messageId:o},t),p(g)}function p(g,f){g?u(g):d(f),c&&c.releaseLock(),h()}}var dI=[],vj=[];var y0e=0;async function BU(e,t){let{options:n,config:i}=t,{transferStreams:o,useWebWorkers:r,useCompressionStream:s,codecType:a,compressed:c,signed:d,encrypted:u}=n,{workerScripts:h,maxWorkers:p}=i;t.transferStreams=o||o===ri;let g=!c&&!d&&!u&&!t.transferStreams;return t.useWebWorkers=!g&&(r||r===ri&&i.useWebWorkers),t.scripts=t.useWebWorkers&&h?h[a]:[],n.useCompressionStream=s||s===ri&&i.useCompressionStream,(await f()).run();async function f(){let x=dI.find(I=>!I.busy);if(x)return C0e(x),new PS(x,e,t,b);if(dI.length<p){let I={indexWorker:y0e};return y0e++,dI.push(I),new PS(I,e,t,b)}else return new Promise(I=>vj.push({resolve:I,stream:e,workerOptions:t}))}function b(x){if(vj.length){let[{resolve:I,stream:_,workerOptions:E}]=vj.splice(0,1);I(new PS(x,_,E,b))}else x.worker?(C0e(x),Bat(x,t)):dI=dI.filter(I=>I!=x)}}function Bat(e,t){let{config:n}=t,{terminateWorkerTimeout:i}=n;Number.isFinite(i)&&i>=0&&(e.terminated?e.terminated=!1:e.terminateTimeout=setTimeout(async()=>{dI=dI.filter(o=>o!=e);try{await e.terminate()}catch{}},i))}function C0e(e){let{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}var qSi=y(C(),1);var wat="Writer iterator completed too soon",Xat="Writer not initialized",Wat="text/plain";var Fat="Content-Type";var Pat=64*1024,Qj="writable",MS=class{constructor(){this.size=0}init(){this.initialized=!0}},wU=class extends MS{get readable(){let t=this,{chunkSize:n=Pat}=t,i=new ReadableStream({start(){this.chunkOffset=0},async pull(o){let{offset:r=0,size:s,diskNumberStart:a}=i,{chunkOffset:c}=this,d=s===ri?n:Math.min(n,s-c),u=await za(t,r+c,d,a);o.enqueue(u),c+n>s||s===ri&&!u.length&&d?o.close():this.chunkOffset+=n}});return i}},Nj=class extends MS{constructor(){super();let t=this,n=new WritableStream({write(i){if(!t.initialized)throw new Error(Xat);return t.writeUint8Array(i)}});Object.defineProperty(t,Qj,{get(){return n}})}writeUint8Array(){}};var XU=class extends Nj{constructor(t){super(),Object.assign(this,{data:"data:"+(t||"")+";base64,",pending:[]})}writeUint8Array(t){let n=this,i=0,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&&(o.length>2?n.data+=btoa(o):n.pending+=o)}getData(){return this.data+btoa(this.pending)}},Mg=class extends wU{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)}},PF=class extends MS{constructor(t){super();let n=this,i=new TransformStream,o=[];t&&o.push([Fat,t]),Object.defineProperty(n,Qj,{get(){return i.writable}}),n.blob=new Response(i.readable,{headers:o}).blob()}getData(){return this.blob}},WU=class extends Mg{constructor(t){super(new Blob([t],{type:Wat}))}},FU=class extends PF{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 Dj=class extends wU{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 i.init(),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 za(d,c,n);else{let h=u-c;s=new Uint8Array(n);let p=await za(d,c,h);s.set(p,0);let g=await o.readUint8Array(t+h,n-h,i);s.set(g,h),p.length+g.length<n&&(s=s.subarray(0,p.length+g.length))}}else s=new Uint8Array;return o.lastDiskNumber=Math.max(a,o.lastDiskNumber),s}},PU=class extends MS{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:h}=i;if(s)u.length>=h?(await c(u.subarray(0,h)),await d(),i.diskOffset+=o.size,i.diskNumber++,s=null,await this.write(u.subarray(h))):await c(u);else{let{value:p,done:g}=await t.next();if(g&&!p)throw new Error(wat);o=p,o.size=0,o.maxSize&&(i.maxSize=o.maxSize),i.availableSize=i.maxSize,await xp(o),r=p.writable,s=r.getWriter(),await this.write(u)}},async close(){await s.ready,await d()}});Object.defineProperty(i,Qj,{get(){return a}});async function c(u){let h=u.length;h&&(await s.ready,await s.write(u),o.size+=h,i.size+=h,i.availableSize-=h)}async function d(){await s.close()}}},uI=class{constructor(t){return Array.isArray(t)&&(t=new Dj(t)),t instanceof ReadableStream&&(t={readable:t}),t}},vS=class{constructor(t){return t.writable===ri&&typeof t.next==Wg&&(t=new PU(t)),t instanceof WritableStream&&(t={writable:t}),t.size===ri&&(t.size=0),t instanceof PU||Object.assign(t,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),t}};async function xp(e,t){if(e.init&&!e.initialized)await e.init(t);else return Promise.resolve()}function za(e,t,n,i){return e.readUint8Array(t,n,i)}var gLi=y(C(),1);var iLi=y(C(),1);var eLi=y(C(),1),x0e="\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 ".split(""),Mat=x0e.length==256;function I0e(e){if(Mat){let t="";for(let n=0;n<e.length;n++)t+=x0e[e[n]];return t}else return new TextDecoder().decode(e)}function MF(e,t){return t&&t.trim().toLowerCase()=="cp437"?I0e(e):new TextDecoder(t).decode(e)}var rLi=y(C(),1),Uj="filename",kj="rawFilename",vF="comment",Yj="rawComment",NF="uncompressedSize",Oj="compressedSize",Hj="offset",MU="diskNumberStart",NS="lastModDate",vU="rawLastModDate",DF="lastAccessDate",_0e="rawLastAccessDate",QF="creationDate",E0e="rawCreationDate",zj="internalFileAttribute",Kj="internalFileAttributes",Jj="externalFileAttribute",jj="externalFileAttributes",qj="msDosCompatible",NU="zip64",$j="encrypted",e8="version",t8="versionMadeBy",n8="zipCrypto",UF="directory",i8="executable",o8="compressionMethod",r8="signature",s8="extraField",vat=[Uj,kj,Oj,NF,NS,vU,vF,Yj,DF,QF,Hj,MU,MU,zj,Kj,Jj,jj,qj,NU,$j,e8,t8,n8,UF,i8,o8,r8,s8,"bitFlag","filenameUTF8","commentUTF8","rawExtraField","extraFieldZip64","extraFieldUnicodePath","extraFieldUnicodeComment","extraFieldAES","extraFieldNTFS","extraFieldExtendedTimestamp"],ey=class{constructor(t){vat.forEach(n=>this[n]=t[n])}};var aLi=y(C(),1),T0e="filenameEncoding",S0e="commentEncoding",L0e="decodeText",R0e="extractPrependedData",V0e="extractAppendedData",DU="password",QU="rawPassword",UU="passThrough",kU="signal",G0e="checkPasswordOnly",Z0e="checkOverlappingEntryOnly",B0e="checkOverlappingEntry",w0e="checkSignature",YU="useWebWorkers",OU="useCompressionStream",X0e="transferStreams",HU="preventClose",W0e="encryptionStrength",F0e="extendedTimestamp",P0e="keepOrder",M0e="level",v0e="bufferedWrite",N0e="dataDescriptorSignature",D0e="useUnicodeFileNames",Q0e="dataDescriptor",a8="supportZip64SplitFile",U0e="encodeText",c8="offset",l8="usdz";var d8="File format is not recognized",kat="End of central directory not found",Yat="End of Zip64 central directory locator not found",Oat="Central directory header not found",Hat="Local file header not found",zat="Zip64 extra field not found",Kat="File contains encrypted entry",Jat="Encryption method not supported",k0e="Compression method not supported",Y0e="Split zip file",jat="Overlapping entry found",O0e="utf-8",H0e="cp437",qat=[[NF,4294967295],[Oj,4294967295],[Hj,4294967295],[MU,65535]],$at={65535:{getValue:Gr,bytes:4},4294967295:{getValue:QS,bytes:8}},kS=class{constructor(t,n={}){Object.assign(this,{reader:new uI(t),options:n,config:RF(),readRanges:[]})}async*getEntriesGenerator(t={}){let n=this,{reader:i}=n,{config:o}=n;if(await xp(i),(i.size===ri||!i.readUint8Array)&&(i=new Mg(await new Response(i.readable).blob()),await xp(i)),i.size<22)throw new Error(d8);i.chunkSize=bU(o);let r=await rct(i,101010256,i.size,22,65535*16);if(!r){let P=await za(i,0,4),A=Yr(P);throw Gr(A)==134695760?new Error(Y0e):new Error(kat)}let s=Yr(r),a=Gr(s,12),c=Gr(s,16),d=r.offset,u=Ka(s,20),h=d+22+u,p=Ka(s,4),g=i.lastDiskNumber||0,f=Ka(s,6),b=Ka(s,8),x=0,I=0;if(c==4294967295||a==4294967295||b==65535||f==65535){let P=await za(i,r.offset-20,20),A=Yr(P);if(Gr(A,0)==117853008){c=QS(A,8);let T=await za(i,c,56,-1),L=Yr(T),V=r.offset-20-56;if(Gr(L,0)!=101075792&&c!=V){let W=c;c=V,c>W&&(x=c-W),T=await za(i,c,56,-1),L=Yr(T)}if(Gr(L,0)!=101075792)throw new Error(Yat);p==65535&&(p=Gr(L,16)),f==65535&&(f=Gr(L,20)),b==65535&&(b=QS(L,32)),a==4294967295&&(a=QS(L,40)),c-=a}}if(c>=i.size&&(x=i.size-c-a-22,c=i.size-a-22),g!=p)throw new Error(Y0e);if(c<0)throw new Error(d8);let _=0,E=await za(i,c,a,f),S=Yr(E);if(a){let P=r.offset-a;if(Gr(S,_)!=33639248&&c!=P){let A=c;c=P,c>A&&(x+=c-A),E=await za(i,c,a,f),S=Yr(E)}}let R=r.offset-c-(i.lastDiskOffset||0);if(a!=R&&R>=0&&(a=R,E=await za(i,c,a,f),S=Yr(E)),c<0||c>=i.size)throw new Error(d8);let G=Ac(n,t,T0e),B=Ac(n,t,S0e);for(let P=0;P<b;P++){let A=new m8(i,o,n.options);if(Gr(S,_)!=33639248)throw new Error(Oat);K0e(A,S,_+6);let T=!!A.bitFlag.languageEncodingFlag,L=_+46,V=L+A.filenameLength,W=V+A.extraFieldLength,M=Ka(S,_+4),Q=M>>8==0,N=M>>8==3,k=E.subarray(L,V),v=Ka(S,_+32),O=W+v,H=E.subarray(W,O),ee=T,K=T,te=Gr(S,_+38),q=Q&&(DS(S,_+38)&16)==16||N&&(te>>16&61440)==16384||k.length&&k[k.length-1]=="/".charCodeAt(0),pe=N&&(te>>16&73)!=0,ye=Gr(S,_+42)+x;Object.assign(A,{versionMadeBy:M,msDosCompatible:Q,compressedSize:0,uncompressedSize:0,commentLength:v,directory:q,offset:ye,diskNumberStart:Ka(S,_+34),internalFileAttributes:Ka(S,_+36),externalFileAttributes:te,rawFilename:k,filenameUTF8:ee,commentUTF8:K,rawExtraField:E.subarray(V,W),executable:pe}),A.internalFileAttribute=A.internalFileAttributes,A.externalFileAttribute=A.externalFileAttributes;let he=Ac(n,t,L0e)||MF,xe=ee?O0e:G||H0e,Te=K?O0e:B||H0e,Be=he(k,xe);Be===ri&&(Be=MF(k,xe));let Le=he(H,Te);Le===ri&&(Le=MF(H,Te)),Object.assign(A,{rawComment:H,filename:Be,comment:Le,directory:q||Be.endsWith("/")}),I=Math.max(ye,I),J0e(A,A,S,_+6),A.zipCrypto=A.encrypted&&!A.extraFieldAES;let De=new ey(A);De.getData=(je,it)=>A.getData(je,De,n.readRanges,it),De.arrayBuffer=async je=>{let it=new TransformStream,[nn]=await Promise.all([new Response(it.readable).arrayBuffer(),A.getData(it,De,n.readRanges,je)]);return nn},_=O;let{onprogress:Ue}=t;if(Ue)try{await Ue(P+1,b,new ey(A))}catch{}yield De}let w=Ac(n,t,R0e),F=Ac(n,t,V0e);return w&&(n.prependedData=I>0?await za(i,0,I):new Uint8Array),n.comment=u?await za(i,d+22,u):new Uint8Array,F&&(n.appendedData=h<i.size?await za(i,h,i.size-h):new Uint8Array),!0}async getEntries(t={}){let n=[];for await(let i of this.getEntriesGenerator(t))n.push(i);return n}async close(){}};var m8=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,offset:a,diskNumberStart:c,extraFieldAES:d,extraFieldZip64:u,compressionMethod:h,config:p,bitFlag:g,signature:f,rawLastModDate:b,uncompressedSize:x,compressedSize:I}=r,{dataDescriptor:_}=g,E=n.localDirectory={},S=await za(s,a,30,c),R=Yr(S),G=Ac(r,o,DU),B=Ac(r,o,QU),w=Ac(r,o,UU);if(G=G&&G.length&&G,B=B&&B.length&&B,d&&d.originalCompressionMethod!=99)throw new Error(k0e);if(h!=0&&h!=8&&!w)throw new Error(k0e);if(Gr(R,0)!=67324752)throw new Error(Hat);K0e(E,R,4);let{extraFieldLength:F,filenameLength:P,lastAccessDate:A,creationDate:T}=E;E.rawExtraField=F?await za(s,a+30+P,F,c):new Uint8Array,J0e(r,E,R,4,!0),Object.assign(n,{lastAccessDate:A,creationDate:T});let L=r.encrypted&&E.encrypted&&!w,V=L&&!d;if(w||(n.zipCrypto=V),L){if(!V&&d.strength===ri)throw new Error(Jat);if(!G&&!B)throw new Error(Kat)}let W=a+30+P+F,M=I,Q=s.readable;Object.assign(Q,{diskNumberStart:c,offset:W,size:M});let N=Ac(r,o,kU),k=Ac(r,o,G0e),v=Ac(r,o,B0e),O=Ac(r,o,Z0e);O&&(v=!0);let{onstart:H,onprogress:ee,onend:K}=o,te={options:{codecType:GU,password:G,rawPassword:B,zipCrypto:V,encryptionStrength:d&&d.strength,signed:Ac(r,o,w0e)&&!w,passwordVerification:V&&(_?b>>>8&255:f>>>24&255),outputSize:x,signature:f,compressed:h!=0&&!w,encrypted:r.encrypted&&!w,useWebWorkers:Ac(r,o,YU),useCompressionStream:Ac(r,o,OU),transferStreams:Ac(r,o,X0e),checkPasswordOnly:k},config:p,streamOptions:{signal:N,size:M,onstart:H,onprogress:ee,onend:K}};v&&await oct({reader:s,fileEntry:n,offset:a,diskNumberStart:c,signature:f,compressedSize:I,uncompressedSize:x,dataOffset:W,dataDescriptor:_||E.bitFlag.dataDescriptor,extraFieldZip64:u||E.extraFieldZip64,readRanges:i});let q;try{if(!O){k&&(t=new WritableStream),t=new vS(t),await xp(t,w?I:x),{writable:q}=t;let{outputSize:pe}=await BU({readable:Q,writable:q},te);if(t.size+=pe,pe!=(w?I:x))throw new Error(FF)}}catch(pe){if(pe.outputSize!==ri&&(t.size+=pe.outputSize),!k||pe.message!=Pg)throw pe}finally{!Ac(r,o,HU)&&q&&!q.locked&&await q.getWriter().close()}return k||O?ri:t.getData?t.getData():q}};function K0e(e,t,n){let i=e.rawBitFlag=Ka(t,n+2),o=(i&1)==1,r=Gr(t,n+6);Object.assign(e,{encrypted:o,version:Ka(t,n),bitFlag:{level:(i&6)>>1,dataDescriptor:(i&8)==8,languageEncodingFlag:(i&2048)==2048},rawLastModDate:r,lastModDate:sct(r),filenameLength:Ka(t,n+22),extraFieldLength:Ka(t,n+24)})}function J0e(e,t,n,i,o){let{rawExtraField:r}=t,s=t.extraField=new Map,a=Yr(new Uint8Array(r)),c=0;try{for(;c<r.length;){let I=Ka(a,c),_=Ka(a,c+2);s.set(I,{type:I,data:r.slice(c+4,c+4+_)}),c+=4+_}}catch{}let d=Ka(n,i+4);Object.assign(t,{signature:Gr(n,i+10),compressedSize:Gr(n,i+14),uncompressedSize:Gr(n,i+18)});let u=s.get(1);u&&(ect(u,t),t.extraFieldZip64=u);let h=s.get(28789);h&&(z0e(h,Uj,kj,t,e),t.extraFieldUnicodePath=h);let p=s.get(25461);p&&(z0e(p,vF,Yj,t,e),t.extraFieldUnicodeComment=p);let g=s.get(39169);g?(tct(g,t,d),t.extraFieldAES=g):t.compressionMethod=d;let f=s.get(10);f&&(nct(f,t),t.extraFieldNTFS=f);let b=s.get(21589);b&&(ict(b,t,o),t.extraFieldExtendedTimestamp=b);let x=s.get(6534);x&&(t.extraFieldUSDZ=x)}function ect(e,t){t.zip64=!0;let n=Yr(e.data),i=qat.filter(([o,r])=>t[o]==r);for(let o=0,r=0;o<i.length;o++){let[s,a]=i[o];if(t[s]==a){let c=$at[a];t[s]=e[s]=c.getValue(n,r),r+=c.bytes}else if(e[s])throw new Error(zat)}}function z0e(e,t,n,i,o){let r=Yr(e.data),s=new Fg;s.append(o[n]);let a=Yr(new Uint8Array(4));a.setUint32(0,s.get(),!0);let c=Gr(r,1);Object.assign(e,{version:DS(r,0),[t]:MF(e.data.subarray(5)),valid:!o.bitFlag.languageEncodingFlag&&c==Gr(a,0)}),e.valid&&(i[t]=e[t],i[t+"UTF8"]=!0)}function tct(e,t,n){let i=Yr(e.data),o=DS(i,4);Object.assign(e,{vendorVersion:DS(i,0),vendorId:DS(i,2),strength:o,originalCompressionMethod:n,compressionMethod:Ka(i,5)}),t.compressionMethod=e.compressionMethod}function nct(e,t){let n=Yr(e.data),i=4,o;try{for(;i<e.data.length&&!o;){let r=Ka(n,i),s=Ka(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=Yr(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=u8(s),u=u8(a),h=u8(c),p={lastModDate:d,lastAccessDate:u,creationDate:h};Object.assign(e,p),Object.assign(t,p)}}catch{}}function ict(e,t,n){let i=Yr(e.data),o=DS(i,0),r=[],s=[];n?((o&1)==1&&(r.push(NS),s.push(vU)),(o&2)==2&&(r.push(DF),s.push(_0e)),(o&4)==4&&(r.push(QF),s.push(E0e))):e.data.length>=5&&(r.push(NS),s.push(vU));let a=1;r.forEach((c,d)=>{if(e.data.length>=a+4){let u=Gr(i,a);t[c]=e[c]=new Date(u*1e3);let h=s[d];e[h]=u}a+=4})}async function oct({reader:e,fileEntry:t,offset:n,diskNumberStart:i,signature:o,compressedSize:r,uncompressedSize:s,dataOffset:a,dataDescriptor:c,extraFieldZip64:d,readRanges:u}){let h=0;if(i)for(let f=0;f<i;f++){let b=e.readers[f];h+=b.size}let p=0;if(c&&(d?p=20:p=12),p){let f=await za(e,a+r,p+4,i);if(Gr(Yr(f),0)==134695760){let x=Gr(Yr(f),4),I,_;d?(I=QS(Yr(f),8),_=QS(Yr(f),16)):(I=Gr(Yr(f),8),_=Gr(Yr(f),12)),(t.encrypted&&!t.zipCrypto||x==o)&&I==r&&_==s&&(p+=4)}}let g={start:h+n,end:h+a+r+p,fileEntry:t};for(let f of u)if(f.fileEntry!=t&&g.start>=f.start&&g.start<f.end){let b=new Error(jat);throw b.overlappingEntry=f.fileEntry,b}u.push(g)}async function rct(e,t,n,i,o){let r=new Uint8Array(4),s=Yr(r);act(s,0,t);let a=i+o;return await c(i)||await c(Math.min(a,n));async function c(d){let u=n-d,h=await za(e,u,d);for(let p=h.length-i;p>=0;p--)if(h[p]==r[0]&&h[p+1]==r[1]&&h[p+2]==r[2]&&h[p+3]==r[3])return{offset:u+p,buffer:h.slice(p,p+i).buffer}}}function Ac(e,t,n){return t[n]===ri?e.options[n]:t[n]}function sct(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 u8(e){return new Date(Number(e/BigInt(1e4)-BigInt(116444736e5)))}function DS(e,t){return e.getUint8(t)}function Ka(e,t){return e.getUint16(t,!0)}function Gr(e,t){return e.getUint32(t,!0)}function QS(e,t){return Number(e.getBigUint64(t,!0))}function act(e,t,n){e.setUint32(t,n,!0)}function Yr(e){return new DataView(e.buffer)}var LLi=y(C(),1);var fct="File already exists",pct="Zip file comment exceeds 64KB",Act="File entry comment exceeds 64KB",gct="File entry name exceeds 64KB",$0e="Version exceeds 65535",bct="The strength must equal 1, 2, or 3",yct="Extra field type exceeds 65535",Cct="Extra field data exceeds 64KB",B8="Zip64 is not supported (make sure 'keepOrder' is set to 'true')",xct="Undefined uncompressed size",Ict="Zip file not empty",eye=new Uint8Array([7,0,2,0,65,69,3,0,0]),V8=0,tye=[],ok=class{constructor(t,n={}){t=new vS(t);let i=t.availableSize!==ri&&t.availableSize>0&&t.availableSize!==1/0&&t.maxSize!==ri&&t.maxSize>0&&t.maxSize!==1/0;Object.assign(this,{writer:t,addSplitZipSignature:i,options:n,config:RF(),files:new Map,filenames:new Set,offset:n[c8]===ri?t.size||t.writable.size||0:n[c8],pendingEntriesSize:0,pendingAddFileCalls:new Set,bufferedWrites:0})}async prependZip(t){if(this.filenames.size)throw new Error(Ict);t=new uI(t);let n=new kS(t.readable),i=await n.getEntries();await n.close(),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,compressionMethod:s,lastModDate:a,lastAccessDate:c,creationDate:d,rawFilename:u,bitFlag:h,encrypted:p,uncompressedSize:g,compressedSize:f,diskOffset:b,diskNumber:x,zip64:I}=o,{rawExtraFieldZip64:_,rawExtraFieldAES:E,rawExtraFieldExtendedTimestamp:S,rawExtraFieldNTFS:R,rawExtraField:G}=o,{level:B,languageEncodingFlag:w,dataDescriptor:F}=h;_=_||new Uint8Array,E=E||new Uint8Array,S=S||new Uint8Array,R=R||new Uint8Array,G=G||new Uint8Array;let P=Ki(_,E,S,R,G),A=I&&g>4294967295,T=I&&f>4294967295,{headerArray:L,headerView:V}=oye({version:r,bitFlag:rye(B,w,F,p,s),compressionMethod:s,uncompressedSize:g,compressedSize:f,lastModDate:a,rawFilename:u,zip64CompressedSize:T,zip64UncompressedSize:A,extraFieldLength:P});return Object.assign(o,{zip64UncompressedSize:A,zip64CompressedSize:T,zip64Offset:I&&this.offset-b>4294967295,zip64DiskNumberStart:I&&x>65535,rawExtraFieldZip64:_,rawExtraFieldAES:E,rawExtraFieldExtendedTimestamp:S,rawExtraFieldNTFS:R,rawExtraField:G,extendedTimestamp:S.length>0||R.length>0,extraFieldExtendedTimestampFlag:1+(c?2:0)+(d?4:0),headerArray:L,headerView:V}),[o.filename,o]}))}async add(t="",n,i={}){let o=this,{pendingAddFileCalls:r,config:s}=o;V8<s.maxWorkers?V8++:await new Promise(c=>tye.push(c));let a;try{if(t=t.trim(),o.filenames.has(t))throw new Error(fct);return o.filenames.add(t),a=_ct(o,t,n,i),r.add(a),await a}catch(c){throw o.filenames.delete(t),c}finally{r.delete(a);let c=tye.shift();c?c():V8--}}remove(t){let{filenames:n,files:i}=this;if(typeof t=="string"&&(t=i.get(t)),t&&t.filename!==ri){let{filename:o}=t;if(n.has(o)&&i.has(o))return n.delete(o),i.delete(o),!0}return!1}async close(t=new Uint8Array,n={}){let i=this,{pendingAddFileCalls:o,writer:r}=this,{writable:s}=r;for(;o.size;)await Promise.allSettled(Array.from(o));return await Zct(this,t,n),co(i,n,HU)||await s.getWriter().close(),r.getData?r.getData():s}};async function _ct(e,t,n,i){t=t.trim();let o=co(e,i,qj),r=co(e,i,t8,o?20:768),s=co(e,i,i8);if(r>65535)throw new Error($0e);let a=co(e,i,jj,0);a===0&&(a=co(e,i,Jj,0)),!i[UF]&&t.endsWith("/")&&(i[UF]=!0),co(e,i,UF)?(t.endsWith("/")||(t+="/"),a===0&&(a=16,o||(a|=16877<<16))):!o&&a===0&&(s?a=493<<16:a=420<<16);let d=co(e,i,U0e,XS),u=d(t);if(u===ri&&(u=XS(t)),Ki(u)>65535)throw new Error(gct);let h=i[vF]||"",p=d(h);if(p===ri&&(p=XS(h)),Ki(p)>65535)throw new Error(Act);let g=co(e,i,e8,20);if(g>65535)throw new Error($0e);let f=co(e,i,NS,new Date),b=co(e,i,DF),x=co(e,i,QF),I=co(e,i,Kj,0);I===0&&(I=co(e,i,zj,0));let _=co(e,i,UU),E,S;_||(E=co(e,i,DU),S=co(e,i,QU));let R=co(e,i,W0e,3),G=co(e,i,n8),B=co(e,i,F0e,!0),w=co(e,i,P0e,!0),F=co(e,i,M0e),P=co(e,i,YU),A=co(e,i,v0e),T=co(e,i,N0e,!1),L=co(e,i,kU),V=co(e,i,D0e,!0),W=co(e,i,OU),M=co(e,i,o8),Q=co(e,i,Q0e);A&&Q===ri&&(Q=!1),(Q===ri||G)&&(Q=!0);let N=co(e,i,NU);if(!G&&(E!==ri||S!==ri)&&!(R>=1&&R<=3))throw new Error(bct);let k=new Uint8Array,v=i[s8];if(v){let nn=0,rt=0;v.forEach(rn=>nn+=4+Ki(rn)),k=new Uint8Array(nn),v.forEach((rn,Jt)=>{if(Jt>65535)throw new Error(yct);if(Ki(rn)>65535)throw new Error(Cct);Ds(k,new Uint16Array([Jt]),rt),Ds(k,new Uint16Array([Ki(rn)]),rt+2),Ds(k,rn,rt+4),rt+=4+Ki(rn)})}let O=0,H=0,ee=0;if(_&&(ee=i[NF],ee===ri))throw new Error(xct);let K=N===!0;n&&(n=new uI(n),await xp(n),_?(i.uncompressedSize=ee,O=iye(ee)):n.size===ri?(Q=!0,(N||N===ri)&&(N=!0,ee=O=4294967296)):(i.uncompressedSize=ee=n.size,O=iye(ee)));let{diskOffset:te,diskNumber:q,maxSize:pe}=e.writer,ye=K||ee>4294967295,he=K||O>4294967295,xe=K||e.offset+e.pendingEntriesSize-te>4294967295,Be=co(e,i,a8,!0)&&K||q+Math.ceil(e.pendingEntriesSize/pe)>65535;if(xe||ye||he||Be){if(N===!1||!w)throw new Error(B8);N=!0}N=N||!1;let Le=co(e,i,$j);i=Object.assign({},i,{rawFilename:u,rawComment:p,version:g,versionMadeBy:r,lastModDate:f,lastAccessDate:b,creationDate:x,rawExtraField:k,zip64:N,zip64UncompressedSize:ye,zip64CompressedSize:he,zip64Offset:xe,zip64DiskNumberStart:Be,password:E,rawPassword:S,level:!W&&e.config.CompressionStream===ri&&e.config.CompressionStreamNative===ri?0:F,useWebWorkers:P,encryptionStrength:R,extendedTimestamp:B,zipCrypto:G,bufferedWrite:A,keepOrder:w,useUnicodeFileNames:V,dataDescriptor:Q,dataDescriptorSignature:T,signal:L,msDosCompatible:o,internalFileAttribute:I,internalFileAttributes:I,externalFileAttribute:a,externalFileAttributes:a,useCompressionStream:W,passThrough:_,encrypted:!!(E&&Ki(E)||S&&Ki(S))||_&&Le,signature:i[r8],compressionMethod:M,uncompressedSize:ee,offset:e.offset-te,diskNumberStart:q});let De=Sct(i),Ue=Rct(i),je=Ki(De.localHeaderArray,Ue.dataDescriptorArray);H=je+O,e.options[l8]&&(H+=H+64),e.pendingEntriesSize+=H;let it;try{it=await Ect(e,t,n,{headerInfo:De,dataDescriptorInfo:Ue,metadataSize:je},i)}finally{e.pendingEntriesSize-=H}return Object.assign(it,{name:t,comment:h,extraField:v}),new ey(it)}async function Ect(e,t,n,i,o){let{files:r,writer:s}=e,{keepOrder:a,dataDescriptor:c,signal:d}=o,{headerInfo:u}=i,h=e.options[l8],p=Array.from(r.values()).pop(),g={},f,b,x,I,_,E,S;r.set(t,g);try{let w;a&&(w=p&&p.lock,R()),(o.bufferedWrite||e.writerLocked||e.bufferedWrites&&a||!c)&&!h?(E=new TransformStream,E.size=0,f=!0,e.bufferedWrites++,await xp(s)):(E=s,await G()),await xp(E);let{writable:F,diskOffset:P}=s;if(e.addSplitZipSignature){delete e.addSplitZipSignature;let W=new Uint8Array(4),M=gc(W);zi(M,0,134695760),await vg(s,W),e.offset+=4}h&&Lct(i,e.offset-P);let{localHeaderView:A,localHeaderArray:T}=u;f||(await w,await B(F));let{diskNumber:L}=s;_=!0,g.diskNumberStart=L,f?S=new Response(E.readable).blob():await vg(E,T),g=await Tct(n,E,g,i,e.config,o);let{zip64:V}=g;if(_=!1,r.set(t,g),g.filename=t,f){let[W]=await Promise.all([S,E.writable.getWriter().close(),w]);await G(),I=!0,g.diskNumberStart=s.diskNumber,g.offset=e.offset-s.diskOffset,V&&nye(g),Gct(g,A,o),await B(F),await vg(s,T),await W.stream().pipeTo(F,{preventClose:!0,preventAbort:!0,signal:d}),s.size+=E.size,I=!1}else g.offset=e.offset-P,V&&nye(g);if(g.offset>4294967295&&!V)throw new Error(B8);return e.offset+=g.size,g}catch(w){if(f&&I||!f&&_){if(e.hasCorruptedEntries=!0,w)try{w.corruptedEntry=!0}catch{}f?e.offset+=E.size:e.offset=E.size}throw r.delete(t),w}finally{f&&e.bufferedWrites--,x&&x(),b&&b()}function R(){g.lock=new Promise(w=>x=w)}async function G(){e.writerLocked=!0;let{lockWriter:w}=e;e.lockWriter=new Promise(F=>b=()=>{e.writerLocked=!1,F()}),await w}async function B(w){Ki(u.localHeaderArray)>s.availableSize&&(s.availableSize=0,await vg(w,new Uint8Array))}}async function Tct(e,t,{diskNumberStart:n,lock:i},o,r,s){let{headerInfo:a,dataDescriptorInfo:c,metadataSize:d}=o,{headerArray:u,headerView:h,lastModDate:p,rawLastModDate:g,encrypted:f,compressed:b,version:x,compressionMethod:I,rawExtraFieldZip64:_,localExtraFieldZip64Length:E,rawExtraFieldExtendedTimestamp:S,extraFieldExtendedTimestampFlag:R,rawExtraFieldNTFS:G,rawExtraFieldAES:B}=a,{dataDescriptorArray:w}=c,{rawFilename:F,lastAccessDate:P,creationDate:A,password:T,rawPassword:L,level:V,zip64:W,zip64UncompressedSize:M,zip64CompressedSize:Q,zip64Offset:N,zip64DiskNumberStart:k,zipCrypto:v,dataDescriptor:O,directory:H,executable:ee,versionMadeBy:K,rawComment:te,rawExtraField:q,useWebWorkers:pe,onstart:ye,onprogress:he,onend:xe,signal:Te,encryptionStrength:Be,extendedTimestamp:Le,msDosCompatible:De,internalFileAttributes:Ue,externalFileAttributes:je,useCompressionStream:it,passThrough:nn}=s,rt={lock:i,versionMadeBy:K,zip64:W,directory:!!H,executable:!!ee,filenameUTF8:!0,rawFilename:F,commentUTF8:!0,rawComment:te,rawExtraFieldZip64:_,localExtraFieldZip64Length:E,rawExtraFieldExtendedTimestamp:S,rawExtraFieldNTFS:G,rawExtraFieldAES:B,rawExtraField:q,extendedTimestamp:Le,msDosCompatible:De,internalFileAttributes:Ue,externalFileAttributes:je,diskNumberStart:n},{signature:rn,uncompressedSize:Jt}=s,Xt=0;nn||(Jt=0);let{writable:Li}=t;if(e){e.chunkSize=bU(r);let bi=e.readable,vt=e.size,Rt={options:{codecType:VU,level:V,rawPassword:L,password:T,encryptionStrength:Be,zipCrypto:f&&v,passwordVerification:f&&v&&g>>8&255,signed:!nn,compressed:b&&!nn,encrypted:f&&!nn,useWebWorkers:pe,useCompressionStream:it,transferStreams:!1},config:r,streamOptions:{signal:Te,size:vt,onstart:ye,onprogress:he,onend:xe}};try{let si=await BU({readable:bi,writable:Li},Rt);Xt=si.outputSize,t.size+=Xt,nn||(Jt=si.inputSize,rn=si.signature)}catch(si){throw si.outputSize!==ri&&(t.size+=si.outputSize),si}}return Vct({signature:rn,compressedSize:Xt,uncompressedSize:Jt,headerInfo:a,dataDescriptorInfo:c},s),O&&await vg(t,w),Object.assign(rt,{uncompressedSize:Jt,compressedSize:Xt,lastModDate:p,rawLastModDate:g,creationDate:A,lastAccessDate:P,encrypted:f,zipCrypto:v,size:d+Xt,compressionMethod:I,version:x,headerArray:u,headerView:h,signature:rn,extraFieldExtendedTimestampFlag:R,zip64UncompressedSize:M,zip64CompressedSize:Q,zip64Offset:N,zip64DiskNumberStart:k}),rt}function Sct(e){let{rawFilename:t,lastModDate:n,lastAccessDate:i,creationDate:o,level:r,zip64:s,zipCrypto:a,useUnicodeFileNames:c,dataDescriptor:d,directory:u,rawExtraField:h,encryptionStrength:p,extendedTimestamp:g,passThrough:f,encrypted:b,zip64UncompressedSize:x,zip64CompressedSize:I,zip64Offset:_,zip64DiskNumberStart:E,uncompressedSize:S,offset:R,diskNumberStart:G}=e,{version:B,compressionMethod:w}=e,F=!u&&(r>0||r===ri&&w!==0),P,A=f||!F,T=s&&(e.bufferedWrite||!x&&!I||A);if(s){let te=4;x&&(te+=8),I&&(te+=8),_&&(te+=8),E&&(te+=4),P=new Uint8Array(te);let q=gc(P);if(Co(q,0,1),Co(q,2,Ki(P)-4),T){let pe=gc(P),ye=4;x&&(ta(pe,ye,BigInt(S)),ye+=8),I&&A&&(ta(pe,ye,BigInt(S)),ye+=8),_&&(ta(pe,ye,BigInt(R)),ye+=8),E&&(zi(pe,ye,G),ye+=4)}}else P=new Uint8Array;let L;if(b&&!a){L=new Uint8Array(Ki(eye)+2);let te=gc(L);Co(te,0,39169),Ds(L,eye,2),Z8(te,8,p)}else L=new Uint8Array;let V,W,M;if(g){W=new Uint8Array(9+(i?4:0)+(o?4:0));let te=gc(W);Co(te,0,21589),Co(te,2,Ki(W)-4),M=1+(i?2:0)+(o?4:0),Z8(te,4,M);let q=5;zi(te,q,Math.floor(n.getTime()/1e3)),q+=4,i&&(zi(te,q,Math.floor(i.getTime()/1e3)),q+=4),o&&zi(te,q,Math.floor(o.getTime()/1e3));try{V=new Uint8Array(36);let pe=gc(V),ye=G8(n);Co(pe,0,10),Co(pe,2,32),Co(pe,8,1),Co(pe,10,24),ta(pe,12,ye),ta(pe,20,G8(i)||ye),ta(pe,28,G8(o)||ye)}catch{V=new Uint8Array}}else V=W=new Uint8Array;w===ri&&(w=F?8:0),s&&(B=B>45?B:45),b&&!a&&(B=B>51?B:51,L[9]=w,w=99);let Q=T?Ki(P):0,N=Q+Ki(L,W,V,h),{headerArray:k,headerView:v,rawLastModDate:O}=oye({version:B,bitFlag:rye(r,c,d,b,w),compressionMethod:w,uncompressedSize:S,lastModDate:n<Vj?Vj:n>Rj?Rj:n,rawFilename:t,zip64CompressedSize:I,zip64UncompressedSize:x,extraFieldLength:N}),H=30,ee=new Uint8Array(H+Ki(t)+N),K=gc(ee);return zi(K,0,67324752),Ds(ee,k,4),Ds(ee,t,H),H+=Ki(t),T&&Ds(ee,P,H),H+=Q,Ds(ee,L,H),H+=Ki(L),Ds(ee,W,H),H+=Ki(W),Ds(ee,V,H),H+=Ki(V),Ds(ee,h,H),d&&(zi(K,18,0),zi(K,22,0)),{localHeaderArray:ee,localHeaderView:K,headerArray:k,headerView:v,lastModDate:n,rawLastModDate:O,encrypted:b,compressed:F,version:B,compressionMethod:w,extraFieldExtendedTimestampFlag:M,rawExtraFieldZip64:P,localExtraFieldZip64Length:Q,rawExtraFieldExtendedTimestamp:W,rawExtraFieldNTFS:V,rawExtraFieldAES:L,extraFieldLength:N}}function Lct(e,t){let{headerInfo:n}=e,{localHeaderArray:i,extraFieldLength:o}=n,r=gc(i),s=64-(t+Ki(i))%64;s<4&&(s+=64);let a=new Uint8Array(s),c=gc(a);Co(c,0,6534),Co(c,2,s-2);let d=i;n.localHeaderArray=i=new Uint8Array(Ki(d)+s),Ds(i,d),Ds(i,a,Ki(d)),r=gc(i),Co(r,28,o+s),e.metadataSize+=s}function Rct({zip64:e,dataDescriptor:t,dataDescriptorSignature:n}){let i=new Uint8Array,o,r=0,s=e?20:12;return n&&(s+=4),t&&(i=new Uint8Array(s),o=gc(i),n&&(r=4,zi(o,0,134695760))),{dataDescriptorArray:i,dataDescriptorView:o,dataDescriptorOffset:r}}function Vct({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:h}=o;(!d||s)&&e!==ri&&(zi(c,10,e),a&&zi(u,h,e)),r?a&&(ta(u,h+4,BigInt(t)),ta(u,h+12,BigInt(n))):(zi(c,14,t),zi(c,18,n),a&&(zi(u,h+4,t),zi(u,h+8,n)))}function Gct({rawFilename:e,encrypted:t,zip64:n,localExtraFieldZip64Length:i,signature:o,compressedSize:r,uncompressedSize:s,offset:a,diskNumberStart:c,zip64UncompressedSize:d,zip64CompressedSize:u,zip64Offset:h,zip64DiskNumberStart:p},g,{dataDescriptor:f}){if(f||(t||zi(g,14,o),n||(zi(g,18,r),zi(g,22,s))),n&&i){let b=30+Ki(e)+4;d&&(ta(g,b,BigInt(s)),b+=8),u&&(ta(g,b,BigInt(r)),b+=8),h&&(ta(g,b,BigInt(a)),b+=8),p&&zi(g,b,c)}}function nye({compressedSize:e,uncompressedSize:t,offset:n,diskNumberStart:i,zip64UncompressedSize:o,zip64CompressedSize:r,zip64Offset:s,zip64DiskNumberStart:a,rawExtraFieldZip64:c}){let d=gc(c),u=4;o&&(ta(d,u,BigInt(t)),u+=8),r&&(ta(d,u,BigInt(e)),u+=8),s&&(ta(d,u,BigInt(n)),u+=8),a&&zi(d,u,i)}async function Zct(e,t,n){let{files:i,writer:o}=e,{diskOffset:r}=o,{diskNumber:s}=o,a=0,c=0,d=e.offset-r,u=i.size;for(let[,S]of i){let{rawFilename:R,rawExtraFieldZip64:G,rawExtraFieldAES:B,rawComment:w,rawExtraFieldNTFS:F,rawExtraField:P,extendedTimestamp:A,extraFieldExtendedTimestampFlag:T,lastModDate:L}=S,V;if(A){V=new Uint8Array(9);let W=gc(V);Co(W,0,21589),Co(W,2,5),Z8(W,4,T),zi(W,5,Math.floor(L.getTime()/1e3))}else V=new Uint8Array;S.rawExtraFieldExtendedTimestamp=V,c+=46+Ki(R,w,G,B,F,V,P)}let h=new Uint8Array(c),p=gc(h);await xp(o);let g=0;for(let[S,R]of Array.from(i.values()).entries()){let{offset:G,rawFilename:B,rawExtraFieldZip64:w,rawExtraFieldAES:F,rawExtraFieldExtendedTimestamp:P,rawExtraFieldNTFS:A,rawExtraField:T,rawComment:L,versionMadeBy:V,headerArray:W,headerView:M,zip64:Q,zip64UncompressedSize:N,zip64CompressedSize:k,zip64DiskNumberStart:v,zip64Offset:O,internalFileAttributes:H,externalFileAttributes:ee,diskNumberStart:K,uncompressedSize:te,compressedSize:q}=R,pe=Ki(w,F,P,A,T);zi(p,a,33639248),Co(p,a+4,V),N||zi(M,18,te),k||zi(M,14,q),Ds(h,W,a+6);let ye=a+30;if(Co(p,ye,pe),ye+=2,Co(p,ye,Ki(L)),ye+=2,Co(p,ye,Q&&v?65535:K),ye+=2,Co(p,ye,H),ye+=2,ee&&zi(p,ye,ee),ye+=4,zi(p,ye,Q&&O?4294967295:G),ye+=4,Ds(h,B,ye),ye+=Ki(B),Ds(h,w,ye),ye+=Ki(w),Ds(h,F,ye),ye+=Ki(F),Ds(h,P,ye),ye+=Ki(P),Ds(h,A,ye),ye+=Ki(A),Ds(h,T,ye),ye+=Ki(T),Ds(h,L,ye),a-g>o.availableSize&&(o.availableSize=0,await vg(o,h.slice(g,a)),g=a),a=ye,n.onprogress)try{await n.onprogress(S+1,i.size,new ey(R))}catch{}}await vg(o,g?h.slice(g):h);let f=o.diskNumber,{availableSize:b}=o;b<22&&f++;let x=co(e,n,NU);if(d>4294967295||c>4294967295||u>65535||f>65535){if(x===!1)throw new Error(B8);x=!0}let I=new Uint8Array(x?98:22),_=gc(I);a=0,x&&(zi(_,0,101075792),ta(_,4,BigInt(44)),Co(_,12,45),Co(_,14,45),zi(_,16,f),zi(_,20,s),ta(_,24,BigInt(u)),ta(_,32,BigInt(u)),ta(_,40,BigInt(c)),ta(_,48,BigInt(d)),zi(_,56,117853008),ta(_,64,BigInt(d)+BigInt(c)),zi(_,72,f+1),co(e,n,a8,!0)&&(f=65535,s=65535),u=65535,d=4294967295,c=4294967295,a+=76),zi(_,a,101010256),Co(_,a+4,f),Co(_,a+6,s),Co(_,a+8,u),Co(_,a+10,u),zi(_,a+12,c),zi(_,a+16,d);let E=Ki(t);if(E)if(E<=65535)Co(_,a+20,E);else throw new Error(pct);await vg(o,I),E&&await vg(o,t)}async function vg(e,t){let{writable:n}=e,i=n.getWriter();try{await i.ready,e.size+=Ki(t),await i.write(t)}finally{i.releaseLock()}}function G8(e){if(e)return(BigInt(e.getTime())+BigInt(116444736e5))*BigInt(1e4)}function co(e,t,n,i){let o=t[n]===ri?e.options[n]:t[n];return o===ri?i:o}function iye(e){return e+5*(Math.floor(e/16383)+1)}function Z8(e,t,n){e.setUint8(t,n)}function Co(e,t,n){e.setUint16(t,n,!0)}function zi(e,t,n){e.setUint32(t,n,!0)}function ta(e,t,n){e.setBigUint64(t,n,!0)}function Ds(e,t,n){e.set(t,n)}function gc(e){return new DataView(e.buffer)}function Ki(...e){let t=0;return e.forEach(n=>n&&(t+=n.length)),t}function oye({version:e,bitFlag:t,compressionMethod:n,uncompressedSize:i,compressedSize:o,lastModDate:r,rawFilename:s,zip64CompressedSize:a,zip64UncompressedSize:c,extraFieldLength:d}){let u=new Uint8Array(26),h=gc(u);Co(h,0,e),Co(h,2,t),Co(h,4,n);let p=new Uint32Array(1),g=gc(p);Co(g,0,(r.getHours()<<6|r.getMinutes())<<5|r.getSeconds()/2),Co(g,2,(r.getFullYear()-1980<<4|r.getMonth()+1)<<5|r.getDate());let f=p[0];return zi(h,6,f),(a||o!==ri)&&zi(h,14,a?4294967295:o),(c||i!==ri)&&zi(h,18,c?4294967295:i),Co(h,22,Ki(s)),Co(h,24,d),{headerArray:u,headerView:h,rawLastModDate:f}}function rye(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}wS({Deflate:_be,Inflate:Ybe});var NLi=y(C(),1);function Bct(e){return typeof e=="string"&&(e=document.getElementById(e)),e}var Dn=Bct;var QLi=y(C(),1);function wct(e,t){this.position=e,this.headingPitchRange=t}var HF=wct;var OLi=y(C(),1);function rk(e,t){this.id=t,this.name=e,this.playlistIndex=0,this.playlist=[],this.tourStart=new Ce,this.tourEnd=new Ce,this.entryStart=new Ce,this.entryEnd=new Ce,this._activeEntries=[]}rk.prototype.addPlaylistEntry=function(e){this.playlist.push(e)};rk.prototype.play=function(e,t){this.tourStart.raiseEvent();let n=this;cye.call(this,e,t,function(i){n.playlistIndex=0,i||aye(n._activeEntries),n.tourEnd.raiseEvent(i)})};rk.prototype.stop=function(){aye(this._activeEntries)};function aye(e){for(let t=e.pop();t!==void 0;t=e.pop())t.stop()}function cye(e,t,n){let i=this.playlist[this.playlistIndex];if(i){let o=Xct.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 Xct(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++,cye.call(this,e,t,n)}}var zF=rk;var l1i=y(C(),1);var i1i=y(C(),1);var e1i=y(C(),1),Ji=Object.freeze({Linear:Object.freeze({None:function(e){return e},In:function(e){return e},Out:function(e){return e},InOut:function(e){return e}}),Quadratic:Object.freeze({In:function(e){return e*e},Out:function(e){return e*(2-e)},InOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)}}),Cubic:Object.freeze({In:function(e){return e*e*e},Out:function(e){return--e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)}}),Quartic:Object.freeze({In:function(e){return e*e*e*e},Out:function(e){return 1- --e*e*e*e},InOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)}}),Quintic:Object.freeze({In:function(e){return e*e*e*e*e},Out:function(e){return--e*e*e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)}}),Sinusoidal:Object.freeze({In:function(e){return 1-Math.sin((1-e)*Math.PI/2)},Out:function(e){return Math.sin(e*Math.PI/2)},InOut:function(e){return .5*(1-Math.sin(Math.PI*(.5-e)))}}),Exponential:Object.freeze({In:function(e){return e===0?0:Math.pow(1024,e-1)},Out:function(e){return e===1?1:1-Math.pow(2,-10*e)},InOut:function(e){return e===0?0:e===1?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)}}),Circular:Object.freeze({In:function(e){return 1-Math.sqrt(1-e*e)},Out:function(e){return Math.sqrt(1- --e*e)},InOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)}}),Elastic:Object.freeze({In:function(e){return e===0?0:e===1?1:-Math.pow(2,10*(e-1))*Math.sin((e-1.1)*5*Math.PI)},Out:function(e){return e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e-.1)*5*Math.PI)+1},InOut:function(e){return e===0?0:e===1?1:(e*=2,e<1?-.5*Math.pow(2,10*(e-1))*Math.sin((e-1.1)*5*Math.PI):.5*Math.pow(2,-10*(e-1))*Math.sin((e-1.1)*5*Math.PI)+1)}}),Back:Object.freeze({In:function(e){var t=1.70158;return e===1?1:e*e*((t+1)*e-t)},Out:function(e){var t=1.70158;return e===0?0:--e*e*((t+1)*e+t)+1},InOut:function(e){var t=2.5949095;return(e*=2)<1?.5*(e*e*((t+1)*e-t)):.5*((e-=2)*e*((t+1)*e+t)+2)}}),Bounce:Object.freeze({In:function(e){return 1-Ji.Bounce.Out(1-e)},Out:function(e){return e<.36363636363636365?7.5625*e*e:e<.7272727272727273?7.5625*(e-=.5454545454545454)*e+.75:e<.9090909090909091?7.5625*(e-=.8181818181818182)*e+.9375:7.5625*(e-=.9545454545454546)*e+.984375},InOut:function(e){return e<.5?Ji.Bounce.In(e*2)*.5:Ji.Bounce.Out(e*2-1)*.5+.5}}),generatePow:function(e){return e===void 0&&(e=4),e=e<Number.EPSILON?Number.EPSILON:e,e=e>1e4?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}}}}),KF=function(){return performance.now()},Wct=function(){function e(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this._tweens={},this._tweensAddedDuringUpdate={},this.add.apply(this,t)}return e.prototype.getAll=function(){var t=this;return Object.keys(this._tweens).map(function(n){return t._tweens[n]})},e.prototype.removeAll=function(){this._tweens={}},e.prototype.add=function(){for(var t,n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];for(var o=0,r=n;o<r.length;o++){var s=r[o];(t=s._group)===null||t===void 0||t.remove(s),s._group=this,this._tweens[s.getId()]=s,this._tweensAddedDuringUpdate[s.getId()]=s}},e.prototype.remove=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var i=0,o=t;i<o.length;i++){var r=o[i];r._group=void 0,delete this._tweens[r.getId()],delete this._tweensAddedDuringUpdate[r.getId()]}},e.prototype.allStopped=function(){return this.getAll().every(function(t){return!t.isPlaying()})},e.prototype.update=function(t,n){t===void 0&&(t=KF()),n===void 0&&(n=!0);var i=Object.keys(this._tweens);if(i.length!==0)for(;i.length>0;){this._tweensAddedDuringUpdate={};for(var o=0;o<i.length;o++){var r=this._tweens[i[o]],s=!n;r&&r.update(t,s)===!1&&!n&&this.remove(r)}i=Object.keys(this._tweensAddedDuringUpdate)}},e}(),YS={Linear:function(e,t){var n=e.length-1,i=n*t,o=Math.floor(i),r=YS.Utils.Linear;return t<0?r(e[0],e[1],i):t>1?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=YS.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=YS.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[n<o+1?n:o+1],e[n<o+2?n:o+2],i-o)},Utils:{Linear:function(e,t,n){return(t-e)*n+e},Bernstein:function(e,t){var n=YS.Utils.Factorial;return n(e)/n(t)/n(e-t)},Factorial:function(){var e=[1];return function(t){var n=1;if(e[t])return e[t];for(var i=t;i>1;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}}},lye=function(){function e(){}return e.nextId=function(){return e._nextId++},e._nextId=0,e}(),w8=new Wct,dye=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=Ji.Linear.None,this._interpolationFunction=YS.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=lye.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=w8,w8.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=KF()),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 h=i[s];if(h.length===0)continue;for(var p=[a],g=0,f=h.length;g<f;g+=1){var b=this._handleRelativeValue(a,h[g]);if(isNaN(b)){u=!1,console.warn("Found invalid interpolation list. Skipping.");break}p.push(b)}u&&(i[s]=p)}if((d==="object"||c)&&a&&!u){n[s]=c?[]:{};var x=a;for(var I in x)n[s][I]=x[I];o[s]=c?[]:{};var h=i[s];if(!this._isDynamic){var _={};for(var I in h)_[I]=h[I];i[s]=h=_}this._setupProperties(x,n[s],h,o[s],r)}else(typeof n[s]>"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=KF()),this._isPaused||!this._isPlaying?this:(this._isPaused=!0,this._pauseStart=t,this)},e.prototype.resume=function(t){return t===void 0&&(t=KF()),!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;t<n;t++)this._chainedTweens[t].stop();return this},e.prototype.group=function(t){return t?(t.add(this),this):(console.warn("tween.group() without args has been removed, use group.add(tween) instead."),this)},e.prototype.remove=function(){var t;return(t=this._group)===null||t===void 0||t.remove(this),this},e.prototype.delay=function(t){return t===void 0&&(t=0),this._delayTime=t,this},e.prototype.repeat=function(t){return t===void 0&&(t=0),this._initialRepeat=t,this._repeat=t,this},e.prototype.repeatDelay=function(t){return this._repeatDelayTime=t,this},e.prototype.yoyo=function(t){return t===void 0&&(t=!1),this._yoyo=t,this},e.prototype.easing=function(t){return t===void 0&&(t=Ji.Linear.None),this._easingFunction=t,this},e.prototype.interpolation=function(t){return t===void 0&&(t=YS.Linear),this._interpolationFunction=t,this},e.prototype.chain=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return this._chainedTweens=t,this},e.prototype.onStart=function(t){return this._onStartCallback=t,this},e.prototype.onEveryStart=function(t){return this._onEveryStartCallback=t,this},e.prototype.onUpdate=function(t){return this._onUpdateCallback=t,this},e.prototype.onRepeat=function(t){return this._onRepeatCallback=t,this},e.prototype.onComplete=function(t){return this._onCompleteCallback=t,this},e.prototype.onStop=function(t){return this._onStopCallback=t,this},e.prototype.update=function(t,n){var i=this,o;if(t===void 0&&(t=KF()),n===void 0&&(n=e.autoStartOnUpdate),this._isPaused)return!0;var r;if(!this._goToEnd&&!this._isPlaying)if(n)this.start(t,!0);else return!1;if(this._goToEnd=!1,t<this._startTime)return!0;this._onStartCallbackFired===!1&&(this._onStartCallback&&this._onStartCallback(this._object),this._onStartCallbackFired=!0),this._onEveryStartCallbackFired===!1&&(this._onEveryStartCallback&&this._onEveryStartCallback(this._object),this._onEveryStartCallbackFired=!0);var s=t-this._startTime,a=this._duration+((o=this._repeatDelayTime)!==null&&o!==void 0?o:this._delayTime),c=this._duration+this._repeat*a,d=function(){if(i._duration===0||s>c)return 1;var b=Math.trunc(s/a),x=s-b*a,I=Math.min(x/i._duration,1);return I===0&&s===i._duration?1:I},u=d(),h=this._easingFunction(u);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,h),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 g=0,f=this._chainedTweens.length;g<f;g++)this._chainedTweens[g].start(this._startTime+this._duration,!1);return this._isPlaying=!1,!1}return!0},e.prototype._updateProperties=function(t,n,i,o){for(var r in i)if(n[r]!==void 0){var s=n[r]||0,a=i[r],c=Array.isArray(t[r]),d=Array.isArray(a),u=!c&&d;u?t[r]=this._interpolationFunction(a,o):typeof a=="object"&&a?this._updateProperties(t[r],s,a,o):(a=this._handleRelativeValue(s,a),typeof a=="number"&&(t[r]=s+(a-s)*o))}},e.prototype._handleRelativeValue=function(t,n){return typeof n!="string"?n:n.charAt(0)==="+"||n.charAt(0)==="-"?t+parseFloat(n):parseFloat(n)},e.prototype._swapEndStartRepeatValues=function(t){var n=this._valuesStartRepeat[t],i=this._valuesEnd[t];typeof i=="string"?this._valuesStartRepeat[t]=this._valuesStartRepeat[t]+parseFloat(i):this._valuesStartRepeat[t]=this._valuesEnd[t],this._valuesEnd[t]=n},e.autoStartOnUpdate=!1,e}();var HLi=lye.nextId,Ip=w8,zLi=Ip.getAll.bind(Ip),KLi=Ip.removeAll.bind(Ip),JLi=Ip.add.bind(Ip),jLi=Ip.remove.bind(Ip),qLi=Ip.update.bind(Ip);var Fct={LINEAR_NONE:Ji.Linear.None,QUADRATIC_IN:Ji.Quadratic.In,QUADRATIC_OUT:Ji.Quadratic.Out,QUADRATIC_IN_OUT:Ji.Quadratic.InOut,CUBIC_IN:Ji.Cubic.In,CUBIC_OUT:Ji.Cubic.Out,CUBIC_IN_OUT:Ji.Cubic.InOut,QUARTIC_IN:Ji.Quartic.In,QUARTIC_OUT:Ji.Quartic.Out,QUARTIC_IN_OUT:Ji.Quartic.InOut,QUINTIC_IN:Ji.Quintic.In,QUINTIC_OUT:Ji.Quintic.Out,QUINTIC_IN_OUT:Ji.Quintic.InOut,SINUSOIDAL_IN:Ji.Sinusoidal.In,SINUSOIDAL_OUT:Ji.Sinusoidal.Out,SINUSOIDAL_IN_OUT:Ji.Sinusoidal.InOut,EXPONENTIAL_IN:Ji.Exponential.In,EXPONENTIAL_OUT:Ji.Exponential.Out,EXPONENTIAL_IN_OUT:Ji.Exponential.InOut,CIRCULAR_IN:Ji.Circular.In,CIRCULAR_OUT:Ji.Circular.Out,CIRCULAR_IN_OUT:Ji.Circular.InOut,ELASTIC_IN:Ji.Elastic.In,ELASTIC_OUT:Ji.Elastic.Out,ELASTIC_IN_OUT:Ji.Elastic.InOut,BACK_IN:Ji.Back.In,BACK_OUT:Ji.Back.Out,BACK_IN_OUT:Ji.Back.InOut,BOUNCE_IN:Ji.Bounce.In,BOUNCE_OUT:Ji.Bounce.Out,BOUNCE_IN_OUT:Ji.Bounce.InOut},ms=Object.freeze(Fct);function sk(e,t,n){this.type="KmlTourFlyTo",this.blocking=!0,this.activeCamera=null,this.activeCallback=null,this.duration=e,this.view=n,this.flyToMode=t}sk.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 ue(this.view.position);t.flyToBoundingSphere(o,i)}};sk.prototype.stop=function(){l(this.activeCamera)&&this.activeCamera.cancelFlight(),l(this.activeCallback)&&this.activeCallback(!0)};sk.prototype.getCameraOptions=function(e){let t={duration:this.duration};return l(this.activeCallback)&&(t.complete=this.activeCallback),this.flyToMode==="smooth"&&(t.easingFunction=ms.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=Lt(t,e)),t};var JF=sk;var m1i=y(C(),1);function X8(e){this.type="KmlTourWait",this.blocking=!0,this.duration=e,this.timeout=null}X8.prototype.play=function(e){let t=this;this.activeCallback=e,this.timeout=setTimeout(function(){delete t.activeCallback,e(!1)},this.duration*1e3)};X8.prototype.stop=function(){clearTimeout(this.timeout),l(this.activeCallback)&&this.activeCallback(!0)};var jF=X8;var Cye={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=Fy(t),Cye[t]}},D8;typeof DOMParser<"u"&&(D8=new DOMParser);var Pct=new oU({stripPrefix:!1,email:!1,replaceFn:function(e){return e.urlMatchType==="scheme"||e.urlMatchType==="www"}}),ny=32,uye=2414016,mye=1,hye=16093e3,fye=.1,pye=[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"],Aye=["http://www.google.com/kml/ext/2.2"],Mct=["http://www.w3.org/2005/Atom"],Fe={kml:pye,gx:Aye,atom:Mct,kmlgx:pye.concat(Aye)},Q8={Document:Gye,Folder:ilt,Placemark:olt,NetworkLink:hlt,GroundOverlay:dlt,PhotoOverlay:wye,ScreenOverlay:llt,Tour:slt};function _p(e){this._dataSource=e,this._deferred=Ol(),this._stack=[],this._promises=[],this._timeoutSet=!1,this._used=!1,this._started=0,this._timeThreshold=1e3}Object.defineProperties(_p.prototype,{dataSource:{get:function(){return this._dataSource}}});_p.prototype.addNodes=function(e,t){this._stack.push({nodes:e,index:0,processingData:t}),this._used=!0};_p.prototype.addPromise=function(e){this._promises.push(e)};_p.prototype.wait=function(){let e=this._deferred;return this._used||e.resolve(),Promise.all([e.promise,Promise.all(this._promises)])};_p.prototype.process=function(){let e=this._stack.length===1;return e&&(this._started=yu._getTimestamp()),this._process(e)};_p.prototype._giveUpTime=function(){if(this._timeoutSet)return;this._timeoutSet=!0,this._timeThreshold=50;let e=this;setTimeout(function(){e._timeoutSet=!1,e._started=yu._getTimestamp(),e._process(!0)},0)};_p.prototype._nextNode=function(){let e=this._stack,t=e[e.length-1],n=t.index,i=t.nodes;if(n!==i.length)return++t.index,i[n]};_p.prototype._pop=function(){let e=this._stack;return e.pop(),e.length===0?(this._deferred.resolve(),!1):!0};_p.prototype._process=function(e){let t=this.dataSource,n=this._stack[this._stack.length-1].processingData,i=this._nextNode();for(;l(i);){let o=Q8[i.localName];if(l(o)&&(Fe.kml.indexOf(i.namespaceURI)!==-1||Fe.gx.indexOf(i.namespaceURI)!==-1)&&(o(t,i,n,this),this._timeoutSet||yu._getTimestamp()>this._started+this._timeThreshold)){this._giveUpTime();return}i=this._nextNode()}this._pop()&&e&&this._process(!0)};function vct(e){let t=e.slice(0,Math.min(4,e.size)),n=Ol(),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 Nct(e){let t=Ol(),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 xye(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 Iye(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}function Dct(e,t){return Promise.resolve(e.getData(new FU)).then(function(n){n=xye(n),n=Iye(n),t.kml=D8.parseFromString(n,"application/xml")})}function W8(e,t){let n=Cye.detectFromFilename(e.filename)??"application/octet-stream";return Promise.resolve(e.getData(new XU(n))).then(function(i){t[e.filename]=i})}function gu(e,t,n,i){let o=i.keys,r=new qF.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 h=new qF.default(d).absoluteTo(r).toString(),p=o.indexOf(h);if(p!==-1){let g=o[p];c.setAttribute(n,i[g]),t==="a"&&c.getAttribute("download")===null&&c.setAttribute("download",g)}}}}function bu(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=U8(a,i);l(c)&&s.setAttribute(n,c.url)}}function _ye(e,t,n){let i=na(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 ur({id:i})),l(o.kml)||(o.addProperty("kml"),o.kml=new glt),o}function $F(e,t){return e==="absolute"||e==="relativeToGround"||t==="relativeToSeaFloor"}function dk(e,t){if(!l(e))return m.fromDegrees(0,0,0,t);let n=e.match(/[^\s,\n]+/g);if(!l(n))return m.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,m.fromDegrees(i,o,r,t)}function ak(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++]=dk(n[s],t);return o}function iy(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 na(e,t){if(!l(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function ji(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 gye(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 rf(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 gi(e,t,n){let i=ji(e,t,n);if(l(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function Qn(e,t,n){let i=ji(e,t,n);if(l(i))return i.textContent.trim()}function sf(e,t,n){let i=ji(e,t,n);if(l(i)){let o=i.textContent.trim();return o==="1"||/^true$/i.test(o)}}function U8(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 qF.default(t.getUrlComponent()),s=new qF.default(e);o=n[s.absoluteTo(r)],l(o)&&(i=new Ve({url:o}))}}return l(i)||(i=t.getDerivedResource({url:e})),i}var Cd={maximumRed:void 0,red:void 0,maximumGreen:void 0,green:void 0,maximumBlue:void 0,blue:void 0};function v8(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?(Cd.maximumRed=r,Cd.red=void 0):(Cd.maximumRed=void 0,Cd.red=0),o>0?(Cd.maximumGreen=o,Cd.green=void 0):(Cd.maximumGreen=void 0,Cd.green=0),i>0?(Cd.maximumBlue=i,Cd.blue=void 0):(Cd.maximumBlue=void 0,Cd.blue=0),Cd.alpha=n,U.fromRandom(Cd)):new U(r,o,i,n)}function fI(e,t,n){let i=Qn(e,t,n);if(l(i))return v8(i,Qn(e,"colorMode",n)==="random")}function Qct(e){let t=ji(e,"TimeStamp",Fe.kmlgx),n=Qn(t,"when",Fe.kmlgx);if(!l(t)||!l(n)||n.length===0)return;let i=j.fromIso8601(n),o=new as;return o.addInterval(new wn({start:i,stop:ze.MAXIMUM_VALUE})),o}function Uct(e){let t=ji(e,"TimeSpan",Fe.kmlgx);if(!l(t))return;let n,i=ji(t,"begin",Fe.kmlgx),o=l(i)?j.fromIso8601(i.textContent):void 0,r=ji(t,"end",Fe.kmlgx),s=l(r)?j.fromIso8601(r.textContent):void 0;if(l(o)&&l(s)){if(j.lessThan(s,o)){let a=o;o=s,s=a}n=new as,n.addInterval(new wn({start:o,stop:s}))}else l(o)?(n=new as,n.addInterval(new wn({start:o,stop:ze.MAXIMUM_VALUE}))):l(s)&&(n=new as,n.addInterval(new wn({start:ze.MINIMUM_VALUE,stop:s})));return n}function Eye(){let e=new _c;return e.width=ny,e.height=ny,e.scaleByDistance=new zt(uye,mye,hye,fye),e.pixelOffsetScaleByDistance=new zt(uye,mye,hye,fye),e}function k8(){let e=new uh;return e.outline=!0,e.outlineColor=U.WHITE,e}function Tye(){let e=new dh;return e.translucencyByDistance=new zt(3e6,1,5e6,0),e.pixelOffset=new D(17,0),e.horizontalOrigin=wi.LEFT,e.font="16px sans-serif",e.style=nr.FILL_AND_OUTLINE,e}function Y8(e,t,n,i,o){let r=Qn(e,"href",Fe.kml);if(!l(r)||r.length===0)return;if(r.indexOf("root://icons/palette-")===0){let a=r.charAt(21),c=gi(e,"x",Fe.gx)??0,d=gi(e,"y",Fe.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=U8(r,n,i);if(o){let a=Qn(e,"refreshMode",Fe.kml),c=Qn(e,"viewRefreshMode",Fe.kml);a==="onInterval"||a==="onExpire"?xt(`kml-refreshMode-${a}`,`KML - Unsupported Icon refreshMode: ${a}`):(c==="onStop"||c==="onRegion")&&xt(`kml-refreshMode-${c}`,`KML - Unsupported Icon viewRefreshMode: ${c}`);let d=Qn(e,"viewBoundScale",Fe.kml)??1,u=c==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",h=Qn(e,"viewFormat",Fe.kml)??u,p=Qn(e,"httpQuery",Fe.kml);l(h)&&s.setQueryParameters(wd(lk(h))),l(p)&&s.setQueryParameters(wd(lk(p)));let g=t._ellipsoid;return H8(s,t.camera,t.canvas,d,t._lastCameraView.bbox,g),s}return s}function kct(e,t,n,i,o){let r=gi(t,"scale",Fe.kml),s=gi(t,"heading",Fe.kml),a=fI(t,"color",Fe.kml),c=ji(t,"Icon",Fe.kml),d=Y8(c,e,i,o,!1);l(c)&&!l(d)&&(d=!1);let u=gi(c,"x",Fe.gx),h=gi(c,"y",Fe.gx),p=gi(c,"w",Fe.gx),g=gi(c,"h",Fe.gx),f=ji(t,"hotSpot",Fe.kml),b=iy(f,"x"),x=iy(f,"y"),I=na(f,"xunits"),_=na(f,"yunits"),E=n.billboard;l(E)||(E=Eye(),n.billboard=E),E.image=d,E.scale=r,E.color=a,(l(u)||l(h)||l(p)||l(g))&&(E.imageSubRegion=new Ke(u,h,p,g)),l(s)&&s!==0&&(E.rotation=Z.toRadians(-s),E.alignedAxis=m.UNIT_Z),r=r??1;let S,R;l(b)&&(I==="pixels"?S=-b*r:I==="insetPixels"?S=(b-ny)*r:I==="fraction"&&(S=-b*ny*r),S+=ny*.5*r),l(x)&&(_==="pixels"?R=x*r:_==="insetPixels"?R=(-x+ny)*r:_==="fraction"&&(R=x*ny*r),R-=ny*.5*r),(l(S)||l(R))&&(E.pixelOffset=new D(S,R))}function ck(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")kct(e,a,n,i,o);else if(a.localName==="LabelStyle"){let c=n.label;l(c)||(c=Tye(),n.label=c),c.scale=gi(a,"scale",Fe.kml)??c.scale,c.fillColor=fI(a,"color",Fe.kml)??c.fillColor,c.text=n.name}else if(a.localName==="LineStyle"){let c=n.polyline;l(c)||(c=new Zc,n.polyline=c),c.width=gi(a,"width",Fe.kml),c.material=fI(a,"color",Fe.kml),l(fI(a,"outerColor",Fe.gx))&&xt("kml-gx:outerColor","KML - gx:outerColor is not supported in a LineStyle"),l(gi(a,"outerWidth",Fe.gx))&&xt("kml-gx:outerWidth","KML - gx:outerWidth is not supported in a LineStyle"),l(gi(a,"physicalWidth",Fe.gx))&&xt("kml-gx:physicalWidth","KML - gx:physicalWidth is not supported in a LineStyle"),l(sf(a,"labelVisibility",Fe.gx))&&xt("kml-gx:labelVisibility","KML - gx:labelVisibility is not supported in a LineStyle")}else if(a.localName==="PolyStyle"){let c=n.polygon;l(c)||(c=k8(),n.polygon=c),c.material=fI(a,"color",Fe.kml)??c.material,c.fill=sf(a,"fill",Fe.kml)??c.fill,c.outline=sf(a,"outline",Fe.kml)??c.outline}else if(a.localName==="BalloonStyle"){let c=v8(Qn(a,"bgColor",Fe.kml))??U.WHITE,d=v8(Qn(a,"textColor",Fe.kml))??U.BLACK,u=Qn(a,"text",Fe.kml);n.addProperty("balloonStyle"),n.balloonStyle={bgColor:c,textColor:d,text:u}}else if(a.localName==="ListStyle"){let c=Qn(a,"listItemType",Fe.kml);(c==="radioFolder"||c==="checkOffOnly")&&xt(`kml-listStyle-${c}`,`KML - Unsupported ListStyle with listItemType: ${c}`)}}}function Yct(e,t,n,i,o){let r=new ur,s,a=-1,c=t.childNodes,d=c.length;for(let h=0;h<d;h++){let p=c[h];(p.localName==="Style"||p.localName==="StyleMap")&&(a=h)}if(a!==-1){let h=c[a];if(h.localName==="Style")ck(e,h,r,i,o);else{let p=rf(h,"Pair",Fe.kml);for(let g=0;g<p.length;g++){let f=p[g],b=Qn(f,"key",Fe.kml);if(b==="normal"){let x=Qn(f,"styleUrl",Fe.kml);if(l(x))s=n.getById(x),l(s)||(s=n.getById(`#${x}`)),l(s)&&r.merge(s);else{let I=ji(f,"Style",Fe.kml);ck(e,I,r,i,o)}}else xt(`kml-styleMap-${b}`,`KML - Unsupported StyleMap key: ${b}`)}}}let u=Qn(t,"styleUrl",Fe.kml);if(l(u)){let h=u;if(u[0]!=="#"&&u.indexOf("#")!==-1){let p=u.split("#"),g=p[0];h=`${i.getDerivedResource({url:g}).getUrlComponent()}#${p[1]}`}s=n.getById(h),l(s)||(s=n.getById(`#${h}`)),l(s)&&r.merge(s)}return r}function Oct(e,t,n){return t.fetchXML().then(function(i){return Sye(e,i,n,t,!0)})}function Sye(e,t,n,i,o,r){let s,a,c,d,u=gye(t,"Style",Fe.kml);if(l(u)){let b=u.length;for(s=0;s<b;s++)d=u[s],a=na(d,"id"),l(a)&&(a=`#${a}`,o&&l(i)&&(a=i.getUrlComponent()+a),l(n.getById(a))||(c=new ur({id:a}),n.add(c),ck(e,d,c,i,r)))}let h=gye(t,"StyleMap",Fe.kml);if(l(h)){let b=h.length;for(s=0;s<b;s++){let x=h[s];if(a=na(x,"id"),l(a)){let I=rf(x,"Pair",Fe.kml);for(let _=0;_<I.length;_++){let E=I[_],S=Qn(E,"key",Fe.kml);if(S==="normal"){if(a=`#${a}`,o&&l(i)&&(a=i.getUrlComponent()+a),!l(n.getById(a))){c=n.getOrCreateEntity(a);let R=Qn(E,"styleUrl",Fe.kml);if(l(R)){R[0]!=="#"&&(R=`#${R}`),o&&l(i)&&(R=i.getUrlComponent()+R);let G=n.getById(R);l(G)&&c.merge(G)}else d=ji(E,"Style",Fe.kml),ck(e,d,c,i,r)}}else xt(`kml-styleMap-${S}`,`KML - Unsupported StyleMap key: ${S}`)}}}}let p=[],g=t.getElementsByTagName("styleUrl"),f=g.length;for(s=0;s<f;s++){let b=g[s].textContent;if(b[0]!=="#"){let x=b.split("#");if(x.length===2){let I=x[0],_=i.getDerivedResource({url:I});p.push(Oct(e,_,n))}}}return p}function O8(e,t,n){let i=new Ig(e,t.id,["position"]),o=new up(t.position);t.polyline=l(n.polyline)?n.polyline.clone():new Zc,t.polyline.positions=new xg([i,o])}function Lye(e,t){return!l(e)&&!l(t)||e==="clampToGround"?et.CLAMP_TO_GROUND:e==="relativeToGround"?et.RELATIVE_TO_GROUND:e==="absolute"?et.NONE:t==="clampToSeaFloor"?(xt("kml-gx:altitudeMode-clampToSeaFloor","KML - <gx:altitudeMode>:clampToSeaFloor is currently not supported, using <kml:altitudeMode>:clampToGround."),et.CLAMP_TO_GROUND):t==="relativeToSeaFloor"?(xt("kml-gx:altitudeMode-relativeToSeaFloor","KML - <gx:altitudeMode>:relativeToSeaFloor is currently not supported, using <kml:altitudeMode>:relativeToGround."),et.RELATIVE_TO_GROUND):(l(e)?xt("kml-altitudeMode-unknown",`KML - Unknown <kml:altitudeMode>:${e}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`):xt("kml-gx:altitudeMode-unknown",`KML - Unknown <gx:altitudeMode>:${t}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`),et.CLAMP_TO_GROUND)}function Hct(e,t,n){return n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround"?e:((l(t)&&t!=="clampToGround"||l(n)&&n!=="clampToSeaFloor")&&xt("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${t??n}`),new up(e))}function zct(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")&&xt("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 uk(e,t,n,i){let o=t.label;l(o)||(o=l(n.label)?n.label.clone():Tye(),t.label=o),o.text=t.name;let r=t.billboard;l(r)||(r=l(n.billboard)?n.billboard.clone():Eye(),t.billboard=r),l(r.image)?r.image.getValue()||(r.image=void 0):r.image=e._pinBuilder.fromColor(U.YELLOW,64);let s=1;l(r.scale)&&(s=r.scale.getValue(),s!==0?o.pixelOffset=new D(s*16+1,0):(o.pixelOffset=void 0,o.horizontalOrigin=void 0)),l(i)&&e._clampToGround&&(r.heightReference=i,o.heightReference=i)}function Rye(e,t){let n=e.path;l(n)||(n=new mA,n.leadTime=0,e.path=n);let i=t.polyline;l(i)&&(n.material=i.material,n.width=i.width)}function Kct(e,t,n,i,o){let r=Qn(n,"coordinates",Fe.kml),s=Qn(n,"altitudeMode",Fe.kml),a=Qn(n,"altitudeMode",Fe.gx),c=sf(n,"extrude",Fe.kml),d=e._ellipsoid,u=dk(r,d);return i.position=u,uk(e,i,o,Lye(s,a)),c&&$F(s,a)&&O8(t,i,o),!0}function bye(e,t,n,i,o){let r=ji(n,"coordinates",Fe.kml),s=Qn(n,"altitudeMode",Fe.kml),a=Qn(n,"altitudeMode",Fe.gx),c=sf(n,"extrude",Fe.kml),d=sf(n,"tessellate",Fe.kml),u=$F(s,a),h=gi(n,"drawOrder",Fe.gx),p=e._ellipsoid,g=ak(r,p),f=o.polyline;if(u&&c){let b=new hA;i.wall=b,b.positions=g;let x=o.polygon;l(x)&&(b.fill=x.fill,b.material=x.material),b.outline=!0,l(f)?(b.outlineColor=l(f.material)?f.material.color:U.WHITE,b.outlineWidth=f.width):l(x)&&(b.outlineColor=l(x.material)?x.material.color:U.WHITE)}else if(e._clampToGround&&!u&&d){let b=new Zc;b.clampToGround=!0,i.polyline=b,b.positions=g,l(f)?(b.material=l(f.material)?f.material.color.getValue(ze.MINIMUM_VALUE):U.WHITE,b.width=f.width??1):(b.material=U.WHITE,b.width=1),b.zIndex=h}else l(h)&&xt("kml-gx:drawOrder","KML - gx:drawOrder is not supported in LineStrings when clampToGround is false"),e._clampToGround&&!d&&xt("kml-line-tesselate","Ignoring clampToGround for KML lines without the tessellate flag."),f=l(f)?f.clone():new Zc,i.polyline=f,f.positions=zct(g,s,a,p),(!d||u)&&(f.arcType=dn.NONE);return!0}function Jct(e,t,n,i,o){let r=ji(n,"outerBoundaryIs",Fe.kml),s=ji(r,"LinearRing",Fe.kml),a=ji(s,"coordinates",Fe.kml),c=e._ellipsoid,d=ak(a,c),u=sf(n,"extrude",Fe.kml),h=Qn(n,"altitudeMode",Fe.kml),p=Qn(n,"altitudeMode",Fe.gx),g=$F(h,p),f=l(o.polygon)?o.polygon.clone():k8(),b=o.polyline;if(l(b)&&(f.outlineColor=l(b.material)?b.material.color:U.WHITE,f.outlineWidth=b.width),i.polygon=f,g?(f.perPositionHeight=!0,f.extrudedHeight=u?0:void 0):e._clampToGround||(f.height=0),l(d)){let x=new lc(d),I=rf(n,"innerBoundaryIs",Fe.kml);for(let _=0;_<I.length;_++){s=rf(I[_],"LinearRing",Fe.kml);for(let E=0;E<s.length;E++)a=ji(s[E],"coordinates",Fe.kml),d=ak(a,c),l(d)&&x.holes.push(new lc(d))}f.hierarchy=x}return!0}function jct(e,t,n,i,o){let r=Qn(n,"altitudeMode",Fe.kml),s=Qn(n,"altitudeMode",Fe.gx),a=rf(n,"coord",Fe.gx),c=rf(n,"angles",Fe.gx),d=rf(n,"when",Fe.kml),u=sf(n,"extrude",Fe.kml),h=$F(r,s),p=e._ellipsoid;c.length>0&&xt("kml-gx:angles","KML - gx:angles are not supported in gx:Tracks");let g=Math.min(a.length,d.length),f=[],b=[];for(let I=0;I<g;I++){let _=dk(a[I].textContent,p);f.push(_),b.push(j.fromIso8601(d[I].textContent))}let x=new Oa;return x.addSamples(b,f),i.position=x,uk(e,i,o,Lye(r,s)),Rye(i,o),i.availability=new as,d.length>0&&i.availability.addInterval(new wn({start:b[0],stop:b[b.length-1]})),h&&u&&O8(t,i,o),!0}function yye(e,t,n,i,o,r,s,a,c){let d=e[0],u=e[e.length-1],h=new Oa;h.addSamples(e,t),n.intervals.addInterval(new wn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c,data:Hct(h,s,a)})),i.addInterval(new wn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c})),o.intervals.addInterval(new wn({start:d,stop:u,isStartIncluded:c,isStopIncluded:c,data:r}))}function qct(e,t,n,i,o){let r=sf(n,"interpolate",Fe.gx),s=rf(n,"Track",Fe.gx),a,c,d,u=!1,h=new Eg,p=new as,g=new ka,f=e._ellipsoid;for(let b=0,x=s.length;b<x;b++){let I=s[b],_=rf(I,"when",Fe.kml),E=rf(I,"coord",Fe.gx),S=Qn(I,"altitudeMode",Fe.kml),R=Qn(I,"altitudeMode",Fe.gx),G=$F(S,R),B=sf(I,"extrude",Fe.kml),w=Math.min(E.length,_.length),F=[];a=[];for(let P=0;P<w;P++){let A=dk(E[P].textContent,f);F.push(A),a.push(j.fromIso8601(_[P].textContent))}r&&(l(c)&&yye([c,a[0]],[d,F[0]],g,p,h,!1,"absolute",void 0,!1),c=a[w-1],d=F[F.length-1]),yye(a,F,g,p,h,G&&B,S,R,!0),u=u||G&&B}return i.availability=p,i.position=g,uk(e,i,o),Rye(i,o),u&&(O8(t,i,o),i.polyline.show=h),!0}var Vye={Point:Kct,LineString:bye,LinearRing:bye,Polygon:Jct,Track:jct,MultiTrack:qct,MultiGeometry:$ct,Model:elt};function $ct(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),h=Vye[u.localName];if(l(h)){let p=_ye(u,t,r);p.parent=i,p.name=i.name,p.availability=i.availability,p.description=i.description,p.kml=i.kml,h(e,t,u,p,o)&&(a=!0)}}return a}function elt(e,t,n,i,o){return xt("kml-unsupportedGeometry",`KML - Unsupported geometry: ${n.localName}`),!1}function tlt(e,t){let n=ji(e,"ExtendedData",Fe.kml);if(!l(n))return;l(ji(n,"SchemaData",Fe.kml))&&xt("kml-schemaData","KML - SchemaData is unsupported"),l(na(n,"xmlns:prefix"))&&xt("kml-extendedData","KML - ExtendedData with xmlns:prefix is unsupported");let i={},o=rf(n,"Data",Fe.kml);if(l(o)){let r=o.length;for(let s=0;s<r;s++){let a=o[s],c=na(a,"name");l(c)&&(i[c]={displayName:Qn(a,"displayName",Fe.kml),value:Qn(a,"value",Fe.kml)})}}t.kml.extendedData=i}var Vo;typeof document<"u"&&(Vo=document.createElement("div"));function nlt(e,t,n,i,o){let r,s,a,c=t.kml,d=c.extendedData,u=Qn(e,"description",Fe.kml),h=t.balloonStyle??n.balloonStyle,p=U.WHITE,g=U.BLACK,f=u;l(h)&&(p=h.bgColor??U.WHITE,g=h.textColor??U.BLACK,f=h.text??u);let b;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 _=f.match(/\$\[.+?\]/g);if(_!==null)for(r=0;r<_.length;r++){let E=_[r],S=E.substr(2,E.length-3),R=/\/displayName$/.test(S);S=S.replace(/\/displayName$/,""),b=d[S],l(b)&&(b=R?b.displayName:b.value),l(b)&&(f=f.replace(E,b??""))}}}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],b=d[s],f+=`<tr><th>${b.displayName??s}</th><td>${b.value??""}</td></tr>`;f+="</tbody></table>"}if(!l(f))return;f=Pct.link(f),Vo.innerHTML=f;let x=Vo.querySelectorAll("a");for(r=0;r<x.length;r++)x[r].setAttribute("target","_blank");l(i)&&i.keys.length>1&&(gu(Vo,"a","href",i),gu(Vo,"link","href",i),gu(Vo,"area","href",i),gu(Vo,"img","src",i),gu(Vo,"iframe","src",i),gu(Vo,"video","src",i),gu(Vo,"audio","src",i),gu(Vo,"source","src",i),gu(Vo,"track","src",i),gu(Vo,"input","src",i),gu(Vo,"embed","src",i),gu(Vo,"script","src",i),gu(Vo,"video","poster",i)),bu(Vo,"a","href",o),bu(Vo,"link","href",o),bu(Vo,"area","href",o),bu(Vo,"img","src",o),bu(Vo,"iframe","src",o),bu(Vo,"video","src",o),bu(Vo,"audio","src",o),bu(Vo,"source","src",o),bu(Vo,"track","src",o),bu(Vo,"input","src",o),bu(Vo,"embed","src",o),bu(Vo,"script","src",o),bu(Vo,"video","poster",o);let I='<div class="cesium-infoBox-description-lighter" style="';I+="overflow:auto;",I+="word-wrap:break-word;",I+=`background-color:${p.toCssColorString()};`,I+=`color:${g.toCssColorString()};`,I+='">',I+=`${Vo.innerHTML}</div>`,Vo.innerHTML="",t.description=I}function mk(e,t,n){let i=n.entityCollection,o=n.parentEntity,r=n.sourceResource,s=n.uriResolver,a=_ye(t,i,n.context),c=a.kml,d=Yct(e,t,n.styleCollection,r,s),u=Qn(t,"name",Fe.kml);a.name=u,a.parent=o;let h=Uct(t);l(h)||(h=Qct(t)),a.availability=h,K8(a);function p(E){return E?E.show&&p(E.parent):!0}let g=sf(t,"visibility",Fe.kml);a.show=p(o)&&(g??!0);let f=ji(t,"author",Fe.atom),b=c.author;b.name=Qn(f,"name",Fe.atom),b.uri=Qn(f,"uri",Fe.atom),b.email=Qn(f,"email",Fe.atom);let x=ji(t,"link",Fe.atom),I=c.link;I.href=na(x,"href"),I.hreflang=na(x,"hreflang"),I.rel=na(x,"rel"),I.type=na(x,"type"),I.title=na(x,"title"),I.length=na(x,"length"),c.address=Qn(t,"address",Fe.kml),c.phoneNumber=Qn(t,"phoneNumber",Fe.kml),c.snippet=Qn(t,"Snippet",Fe.kml),tlt(t,a),nlt(t,a,d,s,r);let _=e._ellipsoid;return Bye(t,a,_),Zye(t,a,_),l(ji(t,"Region",Fe.kml))&&xt("kml-region","KML - Placemark Regions are unsupported"),{entity:a,styleEntity:d}}function Gye(e,t,n,i){i.addNodes(t.childNodes,n),i.process()}function ilt(e,t,n,i){let o=mk(e,t,n),r=ke(n);r.parentEntity=o.entity,Gye(e,t,r,i)}function olt(e,t,n,i){let o=mk(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 h=c.item(d),p=Vye[h.localName];l(p)&&(p(e,n.entityCollection,h,r,s,r.id),a=!0)}a||(r.merge(s),uk(e,r,s))}var rlt={FlyTo:clt,Wait:alt,SoundCue:F8,AnimatedUpdate:F8,TourControl:F8};function slt(e,t,n,i){let o=Qn(t,"name",Fe.kml),r=na(t,"id"),s=new zF(o,r),a=ji(t,"Playlist",Fe.gx);if(a){let c=e._ellipsoid,d=a.childNodes;for(let u=0;u<d.length;u++){let h=d[u];if(h.localName){let p=rlt[h.localName];p?p(s,h,c):console.log(`Unknown KML Tour playlist entry type ${h.localName}`)}}}e._kmlTours.push(s)}function F8(e,t){xt(`KML Tour unsupported node ${t.localName}`)}function alt(e,t){let n=gi(t,"duration",Fe.gx);e.addPlaylistEntry(new jF(n))}function clt(e,t,n){let i=gi(t,"duration",Fe.gx),o=Qn(t,"flyToMode",Fe.gx),r={kml:{}};Bye(t,r,n),Zye(t,r,n);let s=r.kml.lookAt||r.kml.camera,a=new JF(i,o,s);e.addPlaylistEntry(a)}function Zye(e,t,n){let i=ji(e,"Camera",Fe.kml);if(l(i)){let o=gi(i,"longitude",Fe.kml)??0,r=gi(i,"latitude",Fe.kml)??0,s=gi(i,"altitude",Fe.kml)??0,a=gi(i,"heading",Fe.kml)??0,c=gi(i,"tilt",Fe.kml)??0,d=gi(i,"roll",Fe.kml)??0,u=m.fromDegrees(o,r,s,n),h=ic.fromDegrees(a,c-90,d);t.kml.camera=new _F(u,h)}}function Bye(e,t,n){let i=ji(e,"LookAt",Fe.kml);if(l(i)){let o=gi(i,"longitude",Fe.kml)??0,r=gi(i,"latitude",Fe.kml)??0,s=gi(i,"altitude",Fe.kml)??0,a=gi(i,"heading",Fe.kml),c=gi(i,"tilt",Fe.kml),d=gi(i,"range",Fe.kml)??0;c=Z.toRadians(c??0),a=Z.toRadians(a??0);let u=new Vm(a,c-Z.PI_OVER_TWO,d),h=m.fromDegrees(o,r,s,n);t.kml.lookAt=new HF(h,u)}}function llt(e,t,n,i){let o=n.screenOverlayContainer;if(!l(o))return;let r=n.sourceResource,s=n.uriResolver,a=ji(t,"Icon",Fe.kml),c=Y8(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"],h=ji(t,"screenXY",Fe.kml),p=ji(t,"overlayXY",Fe.kml),g=ji(t,"size",Fe.kml),f,b,x,I,_,E;l(g)&&(f=iy(g,"x"),b=iy(g,"y"),x=na(g,"xunits"),I=na(g,"yunits"),l(f)&&f!==-1&&f!==0&&(x==="fraction"?_=`width: ${Math.floor(f*100)}%`:x==="pixels"&&(_=`width: ${f}px`),u.push(_)),l(b)&&b!==-1&&b!==0&&(I==="fraction"?E=`height: ${Math.floor(b*100)}%`:I==="pixels"&&(E=`height: ${b}px`),u.push(E))),d.style=u.join(";");let S=0,R=d.height;l(p)&&(f=iy(p,"x"),b=iy(p,"y"),x=na(p,"xunits"),I=na(p,"yunits"),l(f)&&(x==="fraction"?S=f*d.width:(x==="pixels"||x==="insetPixels")&&(S=f)),l(b)&&(I==="fraction"?R=b*d.height:(I==="pixels"||I==="insetPixels")&&(R=b))),l(h)&&(f=iy(h,"x"),b=iy(h,"y"),x=na(h,"xunits"),I=na(h,"yunits"),l(f)&&(x==="fraction"?_=`left: calc(${Math.floor(f*100)}% - ${S}px)`:x==="pixels"?_=`left: ${f-S}px`:x==="insetPixels"&&(_=`right: ${f-S}px`),u.push(_)),l(b)&&(I==="fraction"?E=`bottom: calc(${Math.floor(b*100)}% - ${R}px)`:I==="pixels"?E=`bottom: ${b-R}px`:I==="insetPixels"&&(E=`top: ${b-R}px`),u.push(E))),d.style=u.join(";")},o.appendChild(d)}function dlt(e,t,n,i){let r=mk(e,t,n).entity,s,a=!1,c=e._ellipsoid,d=ak(ji(t,"LatLonQuad",Fe.gx),c),u=gi(t,"drawOrder",Fe.kml);if(l(d))s=k8(),s.hierarchy=new lc(d),s.zIndex=u,r.polygon=s,a=!0;else{s=new mh,s.zIndex=u,r.rectangle=s;let f=ji(t,"LatLonBox",Fe.kml);if(l(f)){let b=gi(f,"west",Fe.kml),x=gi(f,"south",Fe.kml),I=gi(f,"east",Fe.kml),_=gi(f,"north",Fe.kml);l(b)&&(b=Z.negativePiToPi(Z.toRadians(b))),l(x)&&(x=Z.clampToLatitudeRange(Z.toRadians(x))),l(I)&&(I=Z.negativePiToPi(Z.toRadians(I))),l(_)&&(_=Z.clampToLatitudeRange(Z.toRadians(_))),s.coordinates=new le(b,x,I,_);let E=gi(f,"rotation",Fe.kml);if(l(E)){let S=Z.toRadians(E);s.rotation=S,s.stRotation=S}}}let h=ji(t,"Icon",Fe.kml),p=Y8(h,e,n.sourceResource,n.uriResolver,!0);if(l(p)){a&&xt("kml-gx:LatLonQuad","KML - gx:LatLonQuad Icon does not support texture projection.");let f=gi(h,"x",Fe.gx),b=gi(h,"y",Fe.gx),x=gi(h,"w",Fe.gx),I=gi(h,"h",Fe.gx);(l(f)||l(b)||l(x)||l(I))&&xt("kml-groundOverlay-xywh","KML - gx:x, gx:y, gx:w, gx:h aren't supported for GroundOverlays"),s.material=p,s.material.color=fI(t,"color",Fe.kml),s.material.transparent=!0}else s.material=fI(t,"color",Fe.kml);let g=Qn(t,"altitudeMode",Fe.kml);l(g)?g==="absolute"?(s.height=gi(t,"altitude",Fe.kml),s.zIndex=void 0):g!=="clampToGround"&&xt("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${g}`):(g=Qn(t,"altitudeMode",Fe.gx),g==="relativeToSeaFloor"?(xt("kml-altitudeMode-relativeToSeaFloor","KML - altitudeMode relativeToSeaFloor is currently not supported, treating as absolute."),s.height=gi(t,"altitude",Fe.kml),s.zIndex=void 0):g==="clampToSeaFloor"?xt("kml-altitudeMode-clampToSeaFloor","KML - altitudeMode clampToSeaFloor is currently not supported, treating as clampToGround."):l(g)&&xt("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${g}`))}function wye(e,t,n,i){e._unsupportedNode.raiseEvent(e,n.parentEntity,t,n.entityCollection,n.styleCollection,n.sourceResource,n.uriResolver),xt(`kml-unsupportedFeature-${t.nodeName}`,`KML - Unsupported feature: ${t.nodeName}`)}var oy={INTERVAL:0,EXPIRE:1,STOP:2};function lk(e){if(!l(e)||e.length===0)return"";let t=e[0];return(t==="&"||t==="?")&&(e=e.substring(1)),e}var ult=new le,OS=new ge,P8=new D,mlt=new m;function H8(e,t,n,i,o,r){function s(d){return d<-Z.PI_OVER_TWO?-Z.PI_OVER_TWO:d>Z.PI_OVER_TWO?Z.PI_OVER_TWO:d}function a(d){return d>Z.PI?d-Z.TWO_PI:d<-Z.PI?d+Z.TWO_PI:d}let c=vy(e.queryParameters);if(c=c.replace(/%5B/g,"[").replace(/%5D/g,"]"),l(t)&&t._mode!==re.MORPHING){let d,u;if(o=o??ult,l(n)&&(P8.x=n.clientWidth*.5,P8.y=n.clientHeight*.5,d=t.pickEllipsoid(P8,r,mlt)),l(d)?u=r.cartesianToCartographic(d,OS):(u=le.center(o,OS),d=r.cartographicToCartesian(u)),l(i)&&!Z.equalsEpsilon(i,1,Z.EPSILON9)){let I=o.width*i*.5,_=o.height*i*.5;o=new le(a(u.longitude-I),s(u.latitude-_),a(u.longitude+I),s(u.latitude+_))}c=c.replace("[bboxWest]",Z.toDegrees(o.west).toString()),c=c.replace("[bboxSouth]",Z.toDegrees(o.south).toString()),c=c.replace("[bboxEast]",Z.toDegrees(o.east).toString()),c=c.replace("[bboxNorth]",Z.toDegrees(o.north).toString());let h=Z.toDegrees(u.longitude).toString(),p=Z.toDegrees(u.latitude).toString();c=c.replace("[lookatLon]",h),c=c.replace("[lookatLat]",p),c=c.replace("[lookatTilt]",Z.toDegrees(t.pitch).toString()),c=c.replace("[lookatHeading]",Z.toDegrees(t.heading).toString()),c=c.replace("[lookatRange]",m.distance(t.positionWC,d)),c=c.replace("[lookatTerrainLon]",h),c=c.replace("[lookatTerrainLat]",p),c=c.replace("[lookatTerrainAlt]",u.height.toString()),r.cartesianToCartographic(t.positionWC,OS),c=c.replace("[cameraLon]",Z.toDegrees(OS.longitude).toString()),c=c.replace("[cameraLat]",Z.toDegrees(OS.latitude).toString()),c=c.replace("[cameraAlt]",Z.toDegrees(OS.height).toString());let g=t.frustum,f=g.aspectRatio,b="",x="";if(l(f)){let I=Z.toDegrees(g.fov);f>1?(b=I,x=I/f):(x=I,b=I*f)}c=c.replace("[horizFov]",b.toString()),c=c.replace("[vertFov]",x.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(wd(c))}function hlt(e,t,n,i){let r=mk(e,t,n).entity,s=n.sourceResource,a=n.uriResolver,c=ji(t,"Link",Fe.kml);if(l(c)||(c=ji(t,"Url",Fe.kml)),l(c)){let d=Qn(c,"href",Fe.kml),u,h;if(l(d)){let p=d;if(d=U8(d,s,n.uriResolver),/^data:/.test(d.getUrlComponent()))/\.kmz/i.test(s.getUrlComponent())||(p=s.getDerivedResource({url:p}));else{if(p=d.clone(),u=Qn(c,"viewRefreshMode",Fe.kml),u==="onRegion"){xt("kml-refrehMode-onRegion","KML - Unsupported viewRefreshMode: onRegion");return}h=Qn(c,"viewBoundScale",Fe.kml)??1;let x=u==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",I=Qn(c,"viewFormat",Fe.kml)??x,_=Qn(c,"httpQuery",Fe.kml);l(I)&&d.setQueryParameters(wd(lk(I))),l(_)&&d.setQueryParameters(wd(lk(_)));let E=e._ellipsoid;H8(d,e.camera,e.canvas,h,e._lastCameraView.bbox,E)}let g={sourceUri:p,uriResolver:a,context:r.id,screenOverlayContainer:n.screenOverlayContainer},f=new Ca,b=z8(e,f,d,g).then(function(x){let I=e._entityCollection,_=f.values;I.suspendEvents();for(let R=0;R<_.length;R++){let G=_[R];l(G.parent)||(G.parent=r,K8(G)),I.add(G)}I.resumeEvents();let E=Qn(c,"refreshMode",Fe.kml),S=gi(c,"refreshInterval",Fe.kml)??0;if(E==="onInterval"&&S>0||E==="onExpire"||u==="onStop"){let R=ji(x,"NetworkLinkControl",Fe.kml),G=l(R),B=j.now(),w={id:qn(),href:d,cookie:{},lastUpdated:B,updating:!1,entity:r,viewBoundScale:h,needsUpdate:!1,cameraUpdateTime:B},F=0;if(G&&(w.cookie=wd(Qn(R,"cookie",Fe.kml)??""),F=gi(R,"minRefreshPeriod",Fe.kml)??0),E==="onInterval")G&&(S=Math.max(F,S)),w.refreshMode=oy.INTERVAL,w.time=S;else if(E==="onExpire"){let P;if(G&&(P=Qn(R,"expires",Fe.kml)),l(P))try{let A=j.fromIso8601(P),T=j.secondsDifference(A,B);T>0&&T<F&&j.addSeconds(B,F,A),w.refreshMode=oy.EXPIRE,w.time=A}catch{xt("kml-refreshMode-onInterval-onExpire","KML - NetworkLinkControl expires is not a valid date")}else xt("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element")}else l(e.camera)?(w.refreshMode=oy.STOP,w.time=gi(c,"viewRefreshTime",Fe.kml)??0):xt("kml-refrehMode-onStop-noCamera","A NetworkLink with viewRefreshMode=onStop requires the `camera` property to be defined.");l(w.refreshMode)&&e._networkLinks.set(w.id,w)}}).catch(function(x){xt(`An error occured during loading ${d.url}`),e._error.raiseEvent(e,x)});i.addPromise(b)}}}function flt(e,t,n,i){let o=Q8[t.localName];return l(o)?o(e,t,n,i):wye(e,t,n,i)}function N8(e,t,n,i,o,r,s){t.removeAll();let a=n.documentElement,c=a.localName==="Document"?a:ji(a,"Document",Fe.kml),d=Qn(c,"name",Fe.kml);l(d)||(d=yg(i.getUrlComponent())),l(e._name)||(e._name=d);let u=new yu._DeferredLoading(e),h=new Ca(e);return Promise.all(Sye(e,n,h,i,!1,o)).then(function(){let p=n.documentElement;if(p.localName==="kml"){let f=p.childNodes;for(let b=0;b<f.length;b++){let x=f[b];if(l(Q8[x.localName])){p=x;break}}}let g={parentEntity:void 0,entityCollection:t,styleCollection:h,sourceResource:i,uriResolver:o,context:s,screenOverlayContainer:r};return t.suspendEvents(),flt(e,p,g,u),t.resumeEvents(),u.wait().then(function(){return n.documentElement})})}function plt(e,t,n,i,o){let r=hn("ThirdParty/Workers/z-worker-pako.js");wS({workerScripts:{deflate:[r,"./pako_deflate.min.js"],inflate:[r,"./pako_inflate.min.js"]}});let s=new kS(new Mg(n));return Promise.resolve(s.getEntries()).then(function(a){let c=[],d={},u;for(let h=0;h<a.length;h++){let p=a[h];p.directory||(/\.kml$/i.test(p.filename)&&(!l(u)||!/\//i.test(p.filename))?(l(u)&&c.push(W8(u,d)),u=p):c.push(W8(p,d)))}return l(u)&&c.push(Dct(u,d)),Promise.all(c).then(function(){if(s.close(),!l(d.kml))throw new de("KMZ file does not contain a KML document.");return d.keys=Object.keys(d),N8(e,t,d.kml,i,d,o)})})}function z8(e,t,n,i){i=i??Y.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 h=u.length;for(let p=0;p<h;p++)d.push(u[p])}}else o=o??Ve.DEFAULT.clone();return o=Ve.createIfNeeded(o),l(a)&&(a=Dn(a)),Promise.resolve(c).then(function(d){return d instanceof Blob?vct(d).then(function(u){return u?plt(e,t,d,o,a):Nct(d).then(function(h){h=xye(h),h=Iye(h);let p,g;try{p=D8.parseFromString(h,"application/xml")}catch(f){g=f.toString()}if(l(g)||p.body||p.documentElement.tagName==="parsererror"){let f=l(g)?g:p.documentElement.firstChild.nodeValue;throw f||(f=p.body.innerText),new de(f)}return N8(e,t,p,o,r,a,s)})}):N8(e,t,d,o,r,a,s)}).catch(function(d){return e._error.raiseEvent(e,d),console.log(d),Promise.reject(d)})}function yu(e){e=e??Y.EMPTY_OBJECT;let t=e.camera,n=e.canvas;this._changed=new Ce,this._error=new Ce,this._loading=new Ce,this._refresh=new Ce,this._unsupportedNode=new Ce,this._clock=void 0,this._entityCollection=new Ca(this),this._name=void 0,this._isLoading=!1,this._pinBuilder=new Bg,this._networkLinks=new Bt,this._entityCluster=new ou,this.canvas=n,this.camera=t,this._lastCameraView={position:l(t)?m.clone(t.positionWC):void 0,direction:l(t)?m.clone(t.directionWC):void 0,up:l(t)?m.clone(t.upWC):void 0,bbox:l(t)?t.computeViewRectangle():le.clone(le.MAX_VALUE)},this._ellipsoid=e.ellipsoid??ie.default;let i=e.credit;typeof i=="string"&&(i=new Gt(i)),this._credit=i,this._resourceCredits=[],this._kmlTours=[],this._screenOverlays=[]}yu.load=function(e,t){return t=t??Y.EMPTY_OBJECT,new yu(t).load(e,t)};Object.defineProperties(yu.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},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}},refreshEvent:{get:function(){return this._refresh}},unsupportedNodeEvent:{get:function(){return this._unsupportedNode}},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}},kmlTours:{get:function(){return this._kmlTours}}});yu.prototype.load=function(e,t){t=t??Y.EMPTY_OBJECT,cs.setLoading(this,!0);let n=this._name;this._name=void 0,this._clampToGround=t.clampToGround??!1;let i=this;return z8(this,this._entityCollection,e,t).then(function(){let o,r=i._entityCollection.computeAvailability(),s=r.start,a=r.stop,c=j.equals(s,ze.MINIMUM_VALUE),d=j.equals(a,ze.MAXIMUM_VALUE);if(!c||!d){let h;c&&(h=new Date,h.setHours(0,0,0,0),s=j.fromDate(h)),d&&(h=new Date,h.setHours(24,0,0,0),a=j.fromDate(h)),o=new Oh,o.startTime=s,o.stopTime=a,o.currentTime=j.clone(s),o.clockRange=ls.LOOP_STOP,o.clockStep=Ro.SYSTEM_CLOCK_MULTIPLIER,o.multiplier=Math.round(Math.min(Math.max(j.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),cs.setLoading(i,!1),i}).catch(function(o){return cs.setLoading(i,!1),i._error.raiseEvent(i,o),console.log(o),Promise.reject(o)})};yu.prototype.destroy=function(){for(;this._screenOverlays.length>0;)this._screenOverlays.pop().remove()};function K8(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 Alt(e,t,n,i,o){return function(r){if(!i.contains(t.id))return;let s=!1,a=ji(r,"NetworkLinkControl",Fe.kml),c=l(a),d=0;if(c){if(l(ji(a,"Update",Fe.kml))){xt("kml-networkLinkControl-update","KML - NetworkLinkControl updates aren't supported."),t.updating=!1,i.remove(t.id);return}t.cookie=wd(Qn(a,"cookie",Fe.kml)??""),d=gi(a,"minRefreshPeriod",Fe.kml)??0}let u=j.now(),h=t.refreshMode;if(h===oy.INTERVAL)l(a)&&(t.time=Math.max(d,t.time));else if(h===oy.EXPIRE){let B;if(l(a)&&(B=Qn(a,"expires",Fe.kml)),l(B))try{let w=j.fromIso8601(B),F=j.secondsDifference(w,u);F>0&&F<d&&j.addSeconds(u,d,w),t.time=w}catch{xt("kml-networkLinkControl-expires","KML - NetworkLinkControl expires is not a valid date"),s=!0}else xt("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element"),s=!0}let p=t.entity,g=e._entityCollection,f=n.values;function b(B){g.remove(B);let w=B._children,F=w.length;for(let P=0;P<F;++P)b(w[P])}g.suspendEvents();let x=g.values.slice(),I;for(I=0;I<x.length;++I){let B=x[I];B.parent===p&&(B.parent=void 0,b(B))}for(g.resumeEvents(),g.suspendEvents(),I=0;I<f.length;I++){let B=f[I];l(B.parent)||(B.parent=p,K8(B)),g.add(B)}g.resumeEvents(),s?i.remove(t.id):t.lastUpdated=u;let _=g.computeAvailability(),E=_.start,S=_.stop,R=j.equals(E,ze.MINIMUM_VALUE),G=j.equals(S,ze.MAXIMUM_VALUE);if(!R||!G){let B=e._clock;(B.startTime!==E||B.stopTime!==S)&&(B.startTime=E,B.stopTime=S,e._changed.raiseEvent(e))}t.updating=!1,t.needsUpdate=!1,e._refresh.raiseEvent(e,o.getUrlComponent(!0))}}var M8=new Bt;yu.prototype.update=function(e){let t=this._networkLinks;if(t.length===0)return!0;let n=j.now(),i=this;M8.removeAll();function o(u){let h=u._children,p=h.length;for(let g=0;g<p;++g){let f=h[g];M8.set(f.id,f),o(f)}}let r=!1,s=this._lastCameraView,a=this.camera;l(a)&&!(a.positionWC.equalsEpsilon(s.position,Z.EPSILON7)&&a.directionWC.equalsEpsilon(s.direction,Z.EPSILON7)&&a.upWC.equalsEpsilon(s.up,Z.EPSILON7))&&(s.position=m.clone(a.positionWC),s.direction=m.clone(a.directionWC),s.up=m.clone(a.upWC),s.bbox=a.computeViewRectangle(),r=!0);let c=new Bt,d=!1;return t.values.forEach(function(u){let h=u.entity;if(!M8.contains(h.id)){if(!u.updating){let p=!1;if(u.refreshMode===oy.INTERVAL?j.secondsDifference(n,u.lastUpdated)>u.time&&(p=!0):u.refreshMode===oy.EXPIRE?j.greaterThan(n,u.time)&&(p=!0):u.refreshMode===oy.STOP&&(r&&(u.needsUpdate=!0,u.cameraUpdateTime=n),u.needsUpdate&&j.secondsDifference(n,u.cameraUpdateTime)>=u.time&&(p=!0)),p){o(h),u.updating=!0;let g=new Ca,f=u.href.clone();f.setQueryParameters(u.cookie);let b=i._ellipsoid??ie.default;H8(f,i.camera,i.canvas,u.viewBoundScale,s.bbox,b),z8(i,g,f,{context:h.id}).then(Alt(i,u,g,c,f)).catch(function(x){let I=`NetworkLink ${u.href} refresh failed: ${x}`;console.log(I),i._error.raiseEvent(i,I)}),d=!0}}c.set(u.id,u)}}),d&&(this._networkLinks=c,this._changed.raiseEvent(this)),!0};function glt(){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}yu._DeferredLoading=_p;yu._getTimestamp=Fi;var pI=yu;var VRi=y(C(),1);function eP(){Ae.throwInstantiationError()}eP.prototype.update=Ae.throwInstantiationError;eP.prototype.getBoundingSphere=Ae.throwInstantiationError;eP.prototype.isDestroyed=Ae.throwInstantiationError;eP.prototype.destroy=Ae.throwInstantiationError;var J8=eP;var rVi=y(C(),1);var j8=32,blt="http://www.opengis.net/kml/2.2",cf="http://www.google.com/kml/ext/2.2",ylt="http://www.w3.org/2000/xmlns/";function hk(e){this._files={},this._promises=[],this._count=0,this._modelCallback=e}var Clt=/^data:image\/([^,;]+)/;hk.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(Clt);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 xlt(e,t){return function(n){e._files[t]=n}}hk.prototype.model=function(e,t){let n=this._modelCallback;if(!l(n))throw new de("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(xlt(this,r))}return o};Object.defineProperties(hk.prototype,{promise:{get:function(){return Promise.all(this._promises)}},files:{get:function(){return this._files}}});function fk(e){this._time=e}fk.prototype.get=function(e,t,n){let i;return l(e)&&(i=l(e.getValue)?e.getValue(this._time,n):e),i??t};fk.prototype.getColor=function(e,t){let n=this.get(e,t);if(l(n))return gI(n)};fk.prototype.getMaterialType=function(e){if(l(e))return e.getType(this._time)};function q8(){this._ids={},this._styles={},this._count=0}q8.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};q8.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 Fye(){this._ids={}}Fye.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 $8(e){e=e??Y.EMPTY_OBJECT;let t=e.entities,n=e.kmz??!1,i=$8._createState(e),o=t.values.filter(function(d){return!l(d.parent)}),r=i.kmlDoc,s=r.documentElement;s.setAttributeNS(ylt,"xmlns:gx",cf);let a=r.createElement("Document");s.appendChild(a),Mye(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?Ilt(u,c.files):{kml:u,externalFiles:c.files}})}function Ilt(e,t){let n=hn("ThirdParty/Workers/z-worker-pako.js");wS({workerScripts:{deflate:[n,"./pako_deflate.min.js"],inflate:[n,"./pako_inflate.min.js"]}});let i=new PF,o=new ok(i);return o.add("doc.kml",new WU(e)).then(function(){let r=Object.keys(t);return Pye(o,r,t,0)}).then(function(){return o.close()}).then(function(r){return{kmz:r}})}function Pye(e,t,n,i){if(t.length===i)return;let o=t[i];return e.add(o,new Mg(n[o])).then(function(){return Pye(e,t,n,i+1)})}$8._createState=function(e){let t=e.entities,n=new q8,i=t.computeAvailability(),o=l(e.time)?e.time:i.start,r=e.defaultAvailability??i,s=e.sampleDuration??60;r.start===ze.MINIMUM_VALUE?r.stop===ze.MAXIMUM_VALUE?r=new wn:j.addSeconds(r.stop,-10*s,r.start):r.stop===ze.MAXIMUM_VALUE&&j.addSeconds(r.start,10*s,r.stop);let a=new hk(e.modelCallback);return{kmlDoc:document.implementation.createDocument(blt,"kml"),ellipsoid:e.ellipsoid??ie.default,idManager:new Fye,styleCache:n,externalFileHandler:a,time:o,valueGetter:new fk(o),sampleDuration:s,defaultAvailability:new as([r])}};function Mye(e,t,n){let i=e.kmlDoc,o=e.styleCache,r=e.valueGetter,s=e.idManager,a=n.length,c,d,u;for(let h=0;h<a;++h){let p=n[h];c=[],d=[],u=[],_lt(e,p,d,u),Elt(e,p.polyline,d,u),Wye(e,p.rectangle,d,u,c),Wye(e,p.polygon,d,u,c),Rlt(e,p,p.model,d,u);let g,f=p.availability;l(f)&&(g=i.createElement("TimeSpan"),j.equals(f.start,ze.MINIMUM_VALUE)||g.appendChild(In(i,"begin",j.toIso8601(f.start))),j.equals(f.stop,ze.MAXIMUM_VALUE)||g.appendChild(In(i,"end",j.toIso8601(f.stop))));for(let I=0;I<c.length;++I){let _=c[I];_.setAttribute("id",s.get(p.id)),_.appendChild(In(i,"name",p.name)),_.appendChild(In(i,"visibility",p.show)),_.appendChild(In(i,"description",p.description)),l(g)&&_.appendChild(g),t.appendChild(_)}let b=d.length;if(b>0){let I=i.createElement("Placemark");I.setAttribute("id",s.get(p.id));let _=p.name,E=p.label;if(l(E)){let R=i.createElement("LabelStyle"),G=r.get(E.text);_=l(G)&&G.length>0?G:_;let B=r.getColor(E.fillColor);l(B)&&(R.appendChild(In(i,"color",B)),R.appendChild(In(i,"colorMode","normal")));let w=r.get(E.scale);l(w)&&R.appendChild(In(i,"scale",w)),u.push(R)}I.appendChild(In(i,"name",_)),I.appendChild(In(i,"visibility",p.show)),I.appendChild(In(i,"description",p.description)),l(g)&&I.appendChild(g),t.appendChild(I);let S=u.length;if(S>0){let R=i.createElement("Style");for(let G=0;G<S;++G)R.appendChild(u[G]);I.appendChild(In(i,"styleUrl",o.get(R)))}if(d.length===1)I.appendChild(d[0]);else if(d.length>1){let R=i.createElement("MultiGeometry");for(let G=0;G<b;++G)R.appendChild(d[G]);I.appendChild(R)}}let x=p._children;if(x.length>0){let I=i.createElement("Folder");I.setAttribute("id",s.get(p.id)),I.appendChild(In(i,"name",p.name)),I.appendChild(In(i,"visibility",p.show)),I.appendChild(In(i,"description",p.description)),t.appendChild(I),Mye(e,I,x)}}}var xd=new m,Ml=new ge,af=new j;function _lt(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){vye(e,t,a,n,i);return}s.get(c,void 0,xd);let d=In(o,"coordinates",AI(xd,r)),u=o.createElement("Point"),h=o.createElement("altitudeMode");h.appendChild(bI(e,a.heightReference)),u.appendChild(h),u.appendChild(d),n.push(u);let p=a instanceof _c?Dye(e,a):Nye(e,a);i.push(p)}function vye(e,t,n,i,o){let r=e.kmlDoc,s=e.ellipsoid,a=e.valueGetter,c,d=t.position,u=!0;d instanceof ka?(c=d.intervals,u=!1):c=t.availability??e.defaultAvailability;let h=n instanceof uA,p,g,f,b=[];for(p=0;p<c.length;++p){let I=c.get(p),_=u?d:I.data,E=r.createElement("altitudeMode");_ instanceof up?(_=_._value,E.appendChild(bI(e,et.CLAMP_TO_GROUND))):l(n)?E.appendChild(bI(e,n.heightReference)):E.appendChild(bI(e,et.NONE));let S=[],R=[];if(_.isConstant){a.get(_,void 0,xd);let B=In(r,"coordinates",AI(xd,s));S.push(j.toIso8601(I.start)),R.push(B),S.push(j.toIso8601(I.stop)),R.push(B)}else if(_ instanceof Oa)for(f=_._property._times,g=0;g<f.length;++g)S.push(j.toIso8601(f[g])),_.getValueInReferenceFrame(f[g],eo.FIXED,xd),R.push(AI(xd,s));else if(_ instanceof cu){f=_._times;let B=_._values;for(g=0;g<f.length;++g)S.push(j.toIso8601(f[g])),m.fromArray(B,g*3,xd),R.push(AI(xd,s))}else{let B=e.sampleDuration;I.start.clone(af),I.isStartIncluded||j.addSeconds(af,B,af);let w=I.stop;for(;j.lessThan(af,w);)_.getValue(af,xd),S.push(j.toIso8601(af)),R.push(AI(xd,s)),j.addSeconds(af,B,af);I.isStopIncluded&&j.equals(af,w)&&(_.getValue(af,xd),S.push(j.toIso8601(af)),R.push(AI(xd,s)))}let G=r.createElementNS(cf,"Track");G.appendChild(E);for(let B=0;B<S.length;++B){let w=In(r,"when",S[B]),F=In(r,"coord",R[B],cf);G.appendChild(w),G.appendChild(F)}h&&G.appendChild(Qye(e,n)),b.push(G)}if(b.length===1)i.push(b[0]);else if(b.length>1){let I=r.createElementNS(cf,"MultiTrack");for(p=0;p<b.length;++p)I.appendChild(b[p]);i.push(I)}if(l(n)&&!h){let I=n instanceof _c?Dye(e,n):Nye(e,n);o.push(I)}let x=t.path;if(l(x)){let I=a.get(x.width),_=x.material;if(l(_)||l(I)){let E=r.createElement("LineStyle");l(I)&&E.appendChild(In(r,"width",I)),e7(e,_,E),o.push(E)}}}function Nye(e,t){let n=e.kmlDoc,i=e.valueGetter,o=n.createElement("IconStyle"),r=i.getColor(t.color);l(r)&&(o.appendChild(In(n,"color",r)),o.appendChild(In(n,"colorMode","normal")));let s=i.get(t.pixelSize);return l(s)&&o.appendChild(In(n,"scale",s/j8)),o}function Dye(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(In(n,"href",s));let g=i.get(t.imageSubRegion);l(g)&&(p.appendChild(In(n,"x",g.x,cf)),p.appendChild(In(n,"y",g.y,cf)),p.appendChild(In(n,"w",g.width,cf)),p.appendChild(In(n,"h",g.height,cf))),r.appendChild(p)}let a=i.getColor(t.color);l(a)&&(r.appendChild(In(n,"color",a)),r.appendChild(In(n,"colorMode","normal")));let c=i.get(t.scale);l(c)&&r.appendChild(In(n,"scale",c));let d=i.get(t.pixelOffset);if(l(d)){c=c??1,D.divideByScalar(d,c,d);let p=i.get(t.width,j8),g=i.get(t.height,j8),f=i.get(t.horizontalOrigin,wi.CENTER);f===wi.CENTER?d.x-=p*.5:f===wi.RIGHT&&(d.x-=p);let b=i.get(t.verticalOrigin,kn.CENTER);b===kn.TOP?d.y+=g:b===kn.CENTER&&(d.y+=g*.5);let x=n.createElement("hotSpot");x.setAttribute("x",-d.x),x.setAttribute("y",d.y),x.setAttribute("xunits","pixels"),x.setAttribute("yunits","pixels"),r.appendChild(x)}let u=i.get(t.rotation),h=i.get(t.alignedAxis);return l(u)&&m.equals(m.UNIT_Z,h)&&(u=Z.toDegrees(-u),u===0&&(u=360),r.appendChild(In(n,"heading",u))),r}function Elt(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(In(o,"tessellate",!0)),u=o.createTextNode("clampToGround")):u=o.createTextNode("absolute"),c.appendChild(u),a.appendChild(c);let h=t.positions,p=s.get(h),g=In(o,"coordinates",AI(p,r));a.appendChild(g);let f=s.get(t.zIndex);d&&l(f)&&a.appendChild(In(o,"drawOrder",f,cf)),n.push(a);let b=o.createElement("LineStyle"),x=s.get(t.width);l(x)&&b.appendChild(In(o,"width",x)),e7(e,t.material,b),i.push(b)}function Tlt(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=[le.northeast,le.southeast,le.southwest,le.northwest];for(let g=0;g<4;++g)d[g](a,Ml),c.push(`${Z.toDegrees(Ml.longitude)},${Z.toDegrees(Ml.latitude)},${r}`);let u=In(i,"coordinates",c.join(" ")),h=i.createElement("outerBoundaryIs"),p=i.createElement("LinearRing");return p.appendChild(u),h.appendChild(p),[h]}function Xye(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=[],a=t.length;for(let u=0;u<a;++u)ge.fromCartesian(t[u],r,Ml),s.push(`${Z.toDegrees(Ml.longitude)},${Z.toDegrees(Ml.latitude)},${i?Ml.height:n}`);let c=In(o,"coordinates",s.join(" ")),d=o.createElement("LinearRing");return d.appendChild(c),d}function Slt(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,h=i.createElement("outerBoundaryIs");h.appendChild(Xye(e,u,r,s)),a.push(h);let p=d.holes;if(l(p)){let g=p.length;for(let f=0;f<g;++f){let b=i.createElement("innerBoundaryIs");b.appendChild(Xye(e,p[f].positions,r,s)),a.push(b)}}return a}function Wye(e,t,n,i,o){let r=e.kmlDoc,s=e.valueGetter;if(!l(t))return;let a=t instanceof mh;if(a&&s.getMaterialType(t.material)==="Image"){Llt(e,t,o);return}let c=r.createElement("Polygon"),d=s.get(t.extrudedHeight,0);d>0&&c.appendChild(In(r,"extrude",!0));let u=a?Tlt(e,t,d):Slt(e,t,d),h=u.length;for(let x=0;x<h;++x)c.appendChild(u[x]);let p=r.createElement("altitudeMode");p.appendChild(bI(e,t.heightReference)),c.appendChild(p),n.push(c);let g=r.createElement("PolyStyle"),f=s.get(t.fill,!1);f&&g.appendChild(In(r,"fill",f)),e7(e,t.material,g);let b=s.get(t.outline,!1);if(b){g.appendChild(In(r,"outline",b));let x=r.createElement("LineStyle"),I=s.get(t.outlineWidth,1);x.appendChild(In(r,"width",I));let _=s.getColor(t.outlineColor,U.BLACK);x.appendChild(In(r,"color",_)),x.appendChild(In(r,"colorMode","normal")),i.push(x)}i.push(g)}function Llt(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=e.externalFileHandler,s=i.createElement("GroundOverlay"),a=i.createElement("altitudeMode");a.appendChild(bI(e,t.heightReference)),s.appendChild(a);let c=o.get(t.height);l(c)&&s.appendChild(In(i,"altitude",c));let d=o.get(t.coordinates),u=i.createElement("LatLonBox");u.appendChild(In(i,"north",Z.toDegrees(d.north))),u.appendChild(In(i,"south",Z.toDegrees(d.south))),u.appendChild(In(i,"east",Z.toDegrees(d.east))),u.appendChild(In(i,"west",Z.toDegrees(d.west))),s.appendChild(u);let h=o.get(t.material),p=r.texture(h.image),g=i.createElement("Icon");g.appendChild(In(i,"href",p)),s.appendChild(g);let f=h.color;l(f)&&s.appendChild(In(i,"color",gI(h.color))),n.push(s)}function Qye(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(In(n,"x",s)),d.appendChild(In(n,"y",s)),d.appendChild(In(n,"z",s)),r.appendChild(d)}let a=n.createElement("Link"),c=o.model(t,e.time);return a.appendChild(In(n,"href",c)),r.appendChild(a),r}function Rlt(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){vye(e,t,n,i,o);return}let d=Qye(e,n),u=r.createElement("altitudeMode");u.appendChild(bI(e,n.heightReference)),d.appendChild(u),a.get(c,void 0,xd),ge.fromCartesian(xd,s,Ml);let h=r.createElement("Location");h.appendChild(In(r,"longitude",Z.toDegrees(Ml.longitude))),h.appendChild(In(r,"latitude",Z.toDegrees(Ml.latitude))),h.appendChild(In(r,"altitude",Ml.height)),d.appendChild(h),i.push(d)}function e7(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=gI(U.WHITE);break;case"Color":case"Grid":case"PolylineGlow":case"PolylineArrow":case"PolylineDash":s=gI(r.color);break;case"PolylineOutline":s=gI(r.color),c=gI(r.outlineColor),d=r.outlineWidth,n.appendChild(In(i,"outerColor",c,cf)),n.appendChild(In(i,"outerWidth",d,cf));break;case"Stripe":s=gI(r.oddColor);break}l(s)&&(n.appendChild(In(i,"color",s)),n.appendChild(In(i,"colorMode","normal")))}function bI(e,t){let n=e.kmlDoc,o=e.valueGetter.get(t,et.NONE),r;switch(o){case et.NONE:r=n.createTextNode("absolute");break;case et.CLAMP_TO_GROUND:r=n.createTextNode("clampToGround");break;case et.RELATIVE_TO_GROUND:r=n.createTextNode("relativeToGround");break}return r}function AI(e,t){Array.isArray(e)||(e=[e]);let n=e.length,i=[];for(let o=0;o<n;++o)ge.fromCartesian(e[o],t,Ml),i.push(`${Z.toDegrees(Ml.longitude)},${Z.toDegrees(Ml.latitude)},${Ml.height}`);return i.join(" ")}function In(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 gI(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 t7=$8;var CVi=y(C(),1);var aVi=y(C(),1),yI=`in vec4 position; in vec2 textureCoordinates; out vec2 v_textureCoordinates; void main() { gl_Position = position; v_textureCoordinates = textureCoordinates; } `;function pk(e){this._context=e}var tP,Vlt=new ot({primitiveType:We.TRIANGLES}),Glt=new xi({color:new U(0,0,0,0)});function Zlt(e,t){return new jr({context:e,colorTextures:[t],destroyAttachments:!1})}function Blt(e,t){return ln.fromCache({context:e,vertexShaderSource:yI,fragmentShaderSource:t,attributeLocations:{position:0,textureCoordinates:1}})}function wlt(e,t){return(!l(tP)||tP.viewport.width!==e||tP.viewport.height!==t)&&(tP=Qe.fromCache({viewport:new Ke(0,0,e,t)})),tP}pk.prototype.execute=function(e){l(e.preExecute)&&e.preExecute(e);let t=e.outputTexture,n=t.width,i=t.height,o=this._context,r=l(e.vertexArray)?e.vertexArray:o.getViewportQuadVertexArray(),s=l(e.shaderProgram)?e.shaderProgram:Blt(o,e.fragmentShaderSource),a=Zlt(o,t),c=wlt(n,i),d=e.uniformMap,u=Glt;u.framebuffer=a,u.renderState=c,u.execute(o);let h=Vlt;h.vertexArray=r,h.renderState=c,h.shaderProgram=s,h.uniformMap=d,h.framebuffer=a,h.execute(o),a.destroy(),e.persists||(s.destroy(),l(e.vertexArray)&&r.destroy()),l(e.postExecute)&&e.postExecute(t)};pk.prototype.isDestroyed=function(){return!1};pk.prototype.destroy=function(){return me(this)};var nP=pk;var DGi=y(C(),1);var IVi=y(C(),1);function Xlt(e){this.context=e,this.framebuffer=void 0,this.blendingEnabled=void 0,this.scissorTest=void 0,this.viewport=void 0}var Hc=Xlt;var RVi=y(C(),1);function lf(e){this._context=e,this._shaders={},this._numberOfShaders=0,this._shadersToRelease={}}Object.defineProperties(lf.prototype,{numberOfShaders:{get:function(){return this._numberOfShaders}}});lf.prototype.replaceShaderProgram=function(e){return l(e.shaderProgram)&&e.shaderProgram.destroy(),this.getShaderProgram(e)};function Wlt(e){let t=Object.keys(e).sort();return JSON.stringify(e,t)}lf.prototype.getShaderProgram=function(e){let t=e.vertexShaderSource,n=e.fragmentShaderSource,i=e.attributeLocations;typeof t=="string"&&(t=new Oe({sources:[t]})),typeof n=="string"&&(n=new Oe({sources:[n]}));let o=t.getCacheKey(),r=n.getCacheKey(),s=l(i)?Wlt(i):"",a=`${o}:${r}:${s}`,c;if(l(this._shaders[a]))c=this._shaders[a],delete this._shadersToRelease[a];else{let d=this._context,u=t.createCombinedVertexShader(d),h=n.createCombinedFragmentShader(d),p=new ln({gl:d._gl,logShaderCompilation:d.logShaderCompilation,debugShaders:d.debugShaders,vertexShaderSource:t,vertexShaderText:u,fragmentShaderSource:n,fragmentShaderText:h,attributeLocations:i});c={cache:this,shaderProgram:p,keyword:a,derivedKeywords:[],count:0},p._cachedShader=c,this._shaders[a]=c,++this._numberOfShaders}return++c.count,c.shaderProgram};lf.prototype.replaceDerivedShaderProgram=function(e,t,n){let i=e._cachedShader,o=t+i.keyword,r=this._shaders[o];if(l(r)){n7(this,r);let s=i.derivedKeywords.indexOf(t);s>-1&&i.derivedKeywords.splice(s,1)}return this.createDerivedShaderProgram(e,t,n)};lf.prototype.getDerivedShaderProgram=function(e,t){let n=e._cachedShader,i=t+n.keyword,o=this._shaders[i];if(l(o))return o.shaderProgram};lf.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 Oe({sources:[r]})),typeof s=="string"&&(s=new Oe({sources:[s]}));let c=this._context,d=r.createCombinedVertexShader(c),u=s.createCombinedFragmentShader(c),h=new ln({gl:c._gl,logShaderCompilation:c.logShaderCompilation,debugShaders:c.debugShaders,vertexShaderSource:r,vertexShaderText:d,fragmentShaderSource:s,fragmentShaderText:u,attributeLocations:a}),p={cache:this,shaderProgram:h,keyword:o,derivedKeywords:[],count:0};return i.derivedKeywords.push(t),h._cachedShader=p,this._shaders[o]=p,h};function n7(e,t){let n=t.derivedKeywords,i=n.length;for(let o=0;o<i;++o){let r=n[o]+t.keyword,s=e._shaders[r];n7(e,s)}delete e._shaders[t.keyword],t.shaderProgram.finalDestroy()}lf.prototype.destroyReleasedShaderPrograms=function(){let e=this._shadersToRelease;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];n7(this,n),--this._numberOfShaders}this._shadersToRelease={}};lf.prototype.releaseShaderProgram=function(e){if(l(e)){let t=e._cachedShader;t&&--t.count===0&&(this._shadersToRelease[t.keyword]=t)}};lf.prototype.isDestroyed=function(){return!1};lf.prototype.destroy=function(){let e=this._shaders;for(let t in e)e.hasOwnProperty(t)&&e[t].shaderProgram.finalDestroy();return me(this)};var iP=lf;var BVi=y(C(),1);function CI(){this._textures={},this._numberOfTextures=0,this._texturesToRelease={}}Object.defineProperties(CI.prototype,{numberOfTextures:{get:function(){return this._numberOfTextures}}});CI.prototype.getTexture=function(e){let t=this._textures[e];if(l(t))return delete this._texturesToRelease[e],++t.count,t.texture};CI.prototype.addTexture=function(e,t){let n={texture:t,count:1};t.finalDestroy=t.destroy;let i=this;t.destroy=function(){--n.count===0&&(i._texturesToRelease[e]=n)},this._textures[e]=n,++this._numberOfTextures};CI.prototype.destroyReleasedTextures=function(){let e=this._texturesToRelease;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];delete this._textures[t],n.texture.finalDestroy(),--this._numberOfTextures}this._texturesToRelease={}};CI.prototype.isDestroyed=function(){return!1};CI.prototype.destroy=function(){let e=this._textures;for(let t in e)e.hasOwnProperty(t)&&e[t].texture.finalDestroy();return me(this)};var oP=CI;var dGi=y(C(),1);var DVi=y(C(),1);var i7={};function Flt(e){let t=6.239996+.0172019696544*e;return .001657*Math.sin(t+.01671*Math.sin(t))}var Plt=32.184,Mlt=2451545;function aCe(e,t){t=j.addSeconds(e,Plt,t);let n=j.totalDays(t)-Mlt;return t=j.addSeconds(t,Flt(n),t),t}var Ak=new j(2451545,0,oi.TAI),vlt=1e3,wm=Z.RADIANS_PER_DEGREE,Cu=Z.RADIANS_PER_ARCSECOND,bc=14959787e4,Uye=new $;function cCe(e,t,n,i,o,r,s){n<0&&(n=-n,o+=Z.PI);let a=e*(1-t),c=i-o,d=o,u=Dlt(r-i,t),h=Nlt(t,0);Olt(c,n,d,Uye);let p=a*(1+t),g=Math.cos(u),f=Math.sin(u),b=1+t*g,x=p/b;return l(s)?(s.x=x*g,s.y=x*f,s.z=0):s=new m(x*g,x*f,0),$.multiplyByVector(Uye,s,s)}function Nlt(e,t){return e<=t?"Circular":e<1-t?"Elliptical":e<=1+t?"Parabolic":"Hyperbolic"}function Dlt(e,t){let n=klt(e,t);return Ylt(n,t)}var Qlt=50,Ult=Z.EPSILON8;function klt(e,t){let n=Math.floor(e/Z.TWO_PI);e-=n*Z.TWO_PI;let i=e+t*Math.sin(e)/(1-Math.sin(e+t)+Math.sin(e)),o=Number.MAX_VALUE,r;for(r=0;r<Qlt&&Math.abs(o-i)>Ult;++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*Z.TWO_PI,o}function Ylt(e,t){let n=Math.floor(e/Z.TWO_PI);e-=n*Z.TWO_PI;let i=Math.cos(e)-t,o=Math.sin(e)*Math.sqrt(1-t*t),r=Math.atan2(o,i);return r=Z.zeroToTwoPi(r),e<0&&(r-=Z.TWO_PI),r+=n*Z.TWO_PI,r}function Olt(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 $(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 Hlt=1.0000010178*bc,zlt=100.46645683*wm,Klt=129597742283429e-5*Cu,kye=16002,Yye=21863,Oye=32004,Hye=10931,zye=14529,Kye=16368,Jye=15318,jye=32794,Jlt=64*1e-7*bc,jlt=-152*1e-7*bc,qlt=62*1e-7*bc,$lt=-8*1e-7*bc,edt=32*1e-7*bc,tdt=-41*1e-7*bc,ndt=19*1e-7*bc,idt=-11*1e-7*bc,odt=-150*1e-7*bc,rdt=-46*1e-7*bc,sdt=68*1e-7*bc,adt=54*1e-7*bc,cdt=14*1e-7*bc,ldt=24*1e-7*bc,ddt=-28*1e-7*bc,udt=22*1e-7*bc,qye=10,$ye=16002,eCe=21863,tCe=10931,nCe=1473,iCe=32004,oCe=4387,rCe=73,mdt=-325*1e-7,hdt=-322*1e-7,fdt=-79*1e-7,pdt=232*1e-7,Adt=-52*1e-7,gdt=97*1e-7,bdt=55*1e-7,ydt=-41*1e-7,Cdt=-105*1e-7,xdt=-137*1e-7,Idt=258*1e-7,_dt=35*1e-7,Edt=-116*1e-7,Tdt=-88*1e-7,Sdt=-112*1e-7,Ldt=-80*1e-7,HS=new j(0,0,oi.TAI);function Rdt(e,t){aCe(e,HS);let i=(HS.dayNumber-Ak.dayNumber+(HS.secondsOfDay-Ak.secondsOfDay)/ai.SECONDS_PER_DAY)/(ai.DAYS_PER_JULIAN_CENTURY*10),o=.3595362*i,r=Hlt+Jlt*Math.cos(kye*o)+odt*Math.sin(kye*o)+jlt*Math.cos(Yye*o)+rdt*Math.sin(Yye*o)+qlt*Math.cos(Oye*o)+sdt*Math.sin(Oye*o)+$lt*Math.cos(Hye*o)+adt*Math.sin(Hye*o)+edt*Math.cos(zye*o)+cdt*Math.sin(zye*o)+tdt*Math.cos(Kye*o)+ldt*Math.sin(Kye*o)+ndt*Math.cos(Jye*o)+ddt*Math.sin(Jye*o)+idt*Math.cos(jye*o)+udt*Math.sin(jye*o),s=zlt+Klt*i+mdt*Math.cos(qye*o)+Cdt*Math.sin(qye*o)+hdt*Math.cos($ye*o)+xdt*Math.sin($ye*o)+fdt*Math.cos(eCe*o)+Idt*Math.sin(eCe*o)+pdt*Math.cos(tCe*o)+_dt*Math.sin(tCe*o)+Adt*Math.cos(nCe*o)+Edt*Math.sin(nCe*o)+gdt*Math.cos(iCe*o)+Tdt*Math.sin(iCe*o)+bdt*Math.cos(oCe*o)+Sdt*Math.sin(oCe*o)+ydt*Math.cos(rCe*o)+Ldt*Math.sin(rCe*o),a=.0167086342-.0004203654*i,c=102.93734808*wm+11612.3529*Cu*i,d=469.97289*Cu*i,u=174.87317577*wm-8679.27034*Cu*i;return cCe(r,a,d,c,u,s,t)}function lCe(e,t){aCe(e,HS);let i=(HS.dayNumber-Ak.dayNumber+(HS.secondsOfDay-Ak.secondsOfDay)/ai.SECONDS_PER_DAY)/ai.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*wm,u=-8e-5*i+.02966*o-42e-6*r-13e-8*s,h=83.35324312*wm,p=146434202669e-4*i-38.2702*o-.045047*r+21301e-8*s,g=125.04455501*wm,f=-69679193631e-4*i+6.3602*o+.007625*r-3586e-8*s,b=218.31664563*wm,x=17325593434847e-4*i-6.391*o+.006588*r-3169e-8*s,I=297.85019547*wm+Cu*(1602961601209e-3*i-6.3706*o+.006593*r-3169e-8*s),_=93.27209062*wm+Cu*(17395272628478e-4*i-12.7512*o-.001037*r+417e-8*s),E=134.96340251*wm+Cu*(17179159232178e-4*i+31.8792*o+.051635*r-2447e-7*s),S=357.52910918*wm+Cu*(1295965810481e-4*i-.5532*o+136e-6*r-1149e-8*s),R=310.17137918*wm-Cu*(6967051436e-3*i+6.2068*o+.007618*r-3219e-8*s),G=2*I,B=4*I,w=6*I,F=2*E,P=3*E,A=4*E,T=2*_;a+=3400.4*Math.cos(G)-635.6*Math.cos(G-E)-235.6*Math.cos(E)+218.1*Math.cos(G-S)+181*Math.cos(G+E),c+=.014216*Math.cos(G-E)+.008551*Math.cos(G-F)-.001383*Math.cos(E)+.001356*Math.cos(G+E)-.001147*Math.cos(B-P)-914e-6*Math.cos(B-F)+869e-6*Math.cos(G-S-E)-627e-6*Math.cos(G)-394e-6*Math.cos(B-A)+282e-6*Math.cos(G-S-F)-279e-6*Math.cos(I-E)-236e-6*Math.cos(F)+231e-6*Math.cos(B)+229e-6*Math.cos(w-A)-201e-6*Math.cos(F-T),u+=486.26*Math.cos(G-T)-40.13*Math.cos(G)+37.51*Math.cos(T)+25.73*Math.cos(F-T)+19.97*Math.cos(G-S-T),p+=-55609*Math.sin(G-E)-34711*Math.sin(G-F)-9792*Math.sin(E)+9385*Math.sin(B-P)+7505*Math.sin(B-F)+5318*Math.sin(G+E)+3484*Math.sin(B-A)-3417*Math.sin(G-S-E)-2530*Math.sin(w-A)-2376*Math.sin(G)-2075*Math.sin(G-P)-1883*Math.sin(F)-1736*Math.sin(w-5*E)+1626*Math.sin(S)-1370*Math.sin(w-P),f+=-5392*Math.sin(G-T)-540*Math.sin(S)-441*Math.sin(G)+423*Math.sin(T)-288*Math.sin(F-T),x+=-3332.9*Math.sin(G)+1197.4*Math.sin(G-E)-662.5*Math.sin(S)+396.3*Math.sin(E)-218*Math.sin(G-S);let L=2*R,V=3*R;u+=46.997*Math.cos(R)*i-.614*Math.cos(G-T+R)*i+.614*Math.cos(G-T-R)*i-.0297*Math.cos(L)*o-.0335*Math.cos(R)*o+.0012*Math.cos(G-T+L)*o-16e-5*Math.cos(R)*r+4e-5*Math.cos(V)*r+4e-5*Math.cos(L)*r;let W=2.116*Math.sin(R)*i-.111*Math.sin(G-T-R)*i-.0015*Math.sin(R)*o;p+=W,x+=W,f+=-520.77*Math.sin(R)*i+13.66*Math.sin(G-T+R)*i+1.12*Math.sin(G-R)*i-1.06*Math.sin(T-R)*i+.66*Math.sin(L)*o+.371*Math.sin(R)*o-.035*Math.sin(G-T+L)*o-.015*Math.sin(G-T+R)*o+.0014*Math.sin(R)*r-.0011*Math.sin(V)*r-9e-4*Math.sin(L)*r,a*=vlt;let M=d+u*Cu,Q=h+p*Cu,N=b+x*Cu,k=g+f*Cu;return cCe(a,c,M,Q,k,N,t)}var sCe=.012300034,Vdt=sCe/(sCe+1)*-1;function Gdt(e,t){return t=lCe(e,t),m.multiplyByScalar(t,Vdt,t)}var dCe=new $(1.0000000000000002,5619723173785822e-31,4690511510146299e-34,-5154129427414611e-31,.9174820620691819,-.39777715593191376,-223970096136568e-30,.39777715593191376,.9174820620691819),rP=new m;i7.computeSunPositionInEarthInertialFrame=function(e,t){return l(e)||(e=j.now()),l(t)||(t=new m),rP=Rdt(e,rP),t=m.negate(rP,t),Gdt(e,rP),m.subtract(t,rP,t),$.multiplyByVector(dCe,t,t),t};i7.computeMoonPositionInEarthInertialFrame=function(e,t){return l(e)||(e=j.now()),t=lCe(e,t),$.multiplyByVector(dCe,t,t),t};var ry=i7;var YVi=y(C(),1);function Zdt(e){e=e??Y.EMPTY_OBJECT,this.color=U.clone(e.color??U.WHITE),this.intensity=e.intensity??2}var Ng=Zdt;function zS(){this.globeDepthTexture=void 0,this.gamma=void 0,this._viewport=new Ke,this._viewportCartesian4=new ce,this._viewportDirty=!1,this._viewportOrthographicMatrix=X.clone(X.IDENTITY),this._viewportTransformation=X.clone(X.IDENTITY),this._model=X.clone(X.IDENTITY),this._view=X.clone(X.IDENTITY),this._inverseView=X.clone(X.IDENTITY),this._projection=X.clone(X.IDENTITY),this._infiniteProjection=X.clone(X.IDENTITY),this._entireFrustum=new D,this._currentFrustum=new D,this._frustumPlanes=new ce,this._farDepthFromNearPlusOne=void 0,this._log2FarDepthFromNearPlusOne=void 0,this._oneOverLog2FarDepthFromNearPlusOne=void 0,this._frameState=void 0,this._temeToPseudoFixed=$.clone(X.IDENTITY),this._view3DDirty=!0,this._view3D=new X,this._inverseView3DDirty=!0,this._inverseView3D=new X,this._inverseModelDirty=!0,this._inverseModel=new X,this._inverseTransposeModelDirty=!0,this._inverseTransposeModel=new $,this._viewRotation=new $,this._inverseViewRotation=new $,this._viewRotation3D=new $,this._inverseViewRotation3D=new $,this._inverseProjectionDirty=!0,this._inverseProjection=new X,this._modelViewDirty=!0,this._modelView=new X,this._modelView3DDirty=!0,this._modelView3D=new X,this._modelViewRelativeToEyeDirty=!0,this._modelViewRelativeToEye=new X,this._inverseModelViewDirty=!0,this._inverseModelView=new X,this._inverseModelView3DDirty=!0,this._inverseModelView3D=new X,this._viewProjectionDirty=!0,this._viewProjection=new X,this._inverseViewProjectionDirty=!0,this._inverseViewProjection=new X,this._modelViewProjectionDirty=!0,this._modelViewProjection=new X,this._inverseModelViewProjectionDirty=!0,this._inverseModelViewProjection=new X,this._modelViewProjectionRelativeToEyeDirty=!0,this._modelViewProjectionRelativeToEye=new X,this._modelViewInfiniteProjectionDirty=!0,this._modelViewInfiniteProjection=new X,this._normalDirty=!0,this._normal=new $,this._normal3DDirty=!0,this._normal3D=new $,this._inverseNormalDirty=!0,this._inverseNormal=new $,this._inverseNormal3DDirty=!0,this._inverseNormal3D=new $,this._encodedCameraPositionMCDirty=!0,this._encodedCameraPositionMC=new ni,this._cameraPosition=new m,this._sunPositionWC=new m,this._sunPositionColumbusView=new m,this._sunDirectionWC=new m,this._sunDirectionEC=new m,this._moonDirectionEC=new m,this._lightDirectionWC=new m,this._lightDirectionEC=new m,this._lightColor=new m,this._lightColorHdr=new m,this._pass=void 0,this._mode=void 0,this._mapProjection=void 0,this._ellipsoid=void 0,this._cameraDirection=new m,this._cameraRight=new m,this._cameraUp=new m,this._frustum2DWidth=0,this._eyeHeight=0,this._eyeHeight2D=new D,this._eyeEllipsoidNormalEC=new m,this._eyeEllipsoidCurvature=new D,this._modelToEnu=new X,this._enuToModel=new X,this._pixelRatio=1,this._orthographicIn3D=!1,this._backgroundColor=new U,this._brdfLut=void 0,this._environmentMap=void 0,this._sphericalHarmonicCoefficients=void 0,this._specularEnvironmentMaps=void 0,this._specularEnvironmentMapsMaximumLOD=void 0,this._fogDensity=void 0,this._fogVisualDensityScalar=void 0,this._fogMinimumBrightness=void 0,this._atmosphereHsbShift=void 0,this._atmosphereLightIntensity=void 0,this._atmosphereRayleighCoefficient=new m,this._atmosphereRayleighScaleHeight=new m,this._atmosphereMieCoefficient=new m,this._atmosphereMieScaleHeight=void 0,this._atmosphereMieAnisotropy=void 0,this._atmosphereDynamicLighting=void 0,this._invertClassificationColor=void 0,this._splitPosition=0,this._pixelSizePerMeter=void 0,this._geometricToleranceOverMeter=void 0,this._minimumDisableDepthTestDistance=void 0}Object.defineProperties(zS.prototype,{frameState:{get:function(){return this._frameState}},viewport:{get:function(){return this._viewport},set:function(e){if(!Ke.equals(e,this._viewport)){Ke.clone(e,this._viewport);let t=this._viewport,n=this._viewportCartesian4;n.x=t.x,n.y=t.y,n.z=t.width,n.w=t.height,this._viewportDirty=!0}}},viewportCartesian4:{get:function(){return this._viewportCartesian4}},viewportOrthographic:{get:function(){return mCe(this),this._viewportOrthographicMatrix}},viewportTransformation:{get:function(){return mCe(this),this._viewportTransformation}},model:{get:function(){return this._model},set:function(e){X.clone(e,this._model),this._modelView3DDirty=!0,this._inverseModelView3DDirty=!0,this._inverseModelDirty=!0,this._inverseTransposeModelDirty=!0,this._modelViewDirty=!0,this._inverseModelViewDirty=!0,this._modelViewRelativeToEyeDirty=!0,this._inverseModelViewDirty=!0,this._modelViewProjectionDirty=!0,this._inverseModelViewProjectionDirty=!0,this._modelViewProjectionRelativeToEyeDirty=!0,this._modelViewInfiniteProjectionDirty=!0,this._normalDirty=!0,this._inverseNormalDirty=!0,this._normal3DDirty=!0,this._inverseNormal3DDirty=!0,this._encodedCameraPositionMCDirty=!0}},inverseModel:{get:function(){return this._inverseModelDirty&&(this._inverseModelDirty=!1,X.inverse(this._model,this._inverseModel)),this._inverseModel}},inverseTransposeModel:{get:function(){let e=this._inverseTransposeModel;return this._inverseTransposeModelDirty&&(this._inverseTransposeModelDirty=!1,X.getMatrix3(this.inverseModel,e),$.transpose(e,e)),e}},view:{get:function(){return this._view}},view3D:{get:function(){return r7(this),this._view3D}},viewRotation:{get:function(){return r7(this),this._viewRotation}},viewRotation3D:{get:function(){return r7(this),this._viewRotation3D}},inverseView:{get:function(){return this._inverseView}},inverseView3D:{get:function(){return pCe(this),this._inverseView3D}},inverseViewRotation:{get:function(){return this._inverseViewRotation}},inverseViewRotation3D:{get:function(){return pCe(this),this._inverseViewRotation3D}},projection:{get:function(){return this._projection}},inverseProjection:{get:function(){return Qdt(this),this._inverseProjection}},infiniteProjection:{get:function(){return this._infiniteProjection}},modelView:{get:function(){return Udt(this),this._modelView}},modelView3D:{get:function(){return kdt(this),this._modelView3D}},modelViewRelativeToEye:{get:function(){return Jdt(this),this._modelViewRelativeToEye}},inverseModelView:{get:function(){return Ydt(this),this._inverseModelView}},inverseModelView3D:{get:function(){return Odt(this),this._inverseModelView3D}},viewProjection:{get:function(){return Hdt(this),this._viewProjection}},inverseViewProjection:{get:function(){return zdt(this),this._inverseViewProjection}},modelViewProjection:{get:function(){return Kdt(this),this._modelViewProjection}},inverseModelViewProjection:{get:function(){return jdt(this),this._inverseModelViewProjection}},modelViewProjectionRelativeToEye:{get:function(){return qdt(this),this._modelViewProjectionRelativeToEye}},modelViewInfiniteProjection:{get:function(){return $dt(this),this._modelViewInfiniteProjection}},normal:{get:function(){return eut(this),this._normal}},normal3D:{get:function(){return tut(this),this._normal3D}},inverseNormal:{get:function(){return nut(this),this._inverseNormal}},inverseNormal3D:{get:function(){return iut(this),this._inverseNormal3D}},entireFrustum:{get:function(){return this._entireFrustum}},currentFrustum:{get:function(){return this._currentFrustum}},frustumPlanes:{get:function(){return this._frustumPlanes}},farDepthFromNearPlusOne:{get:function(){return this._farDepthFromNearPlusOne}},log2FarDepthFromNearPlusOne:{get:function(){return this._log2FarDepthFromNearPlusOne}},oneOverLog2FarDepthFromNearPlusOne:{get:function(){return this._oneOverLog2FarDepthFromNearPlusOne}},eyeHeight:{get:function(){return this._eyeHeight}},eyeHeight2D:{get:function(){return this._eyeHeight2D}},eyeEllipsoidNormalEC:{get:function(){return this._eyeEllipsoidNormalEC}},eyeEllipsoidCurvature:{get:function(){return this._eyeEllipsoidCurvature}},modelToEnu:{get:function(){return this._modelToEnu}},enuToModel:{get:function(){return this._enuToModel}},sunPositionWC:{get:function(){return this._sunPositionWC}},sunPositionColumbusView:{get:function(){return this._sunPositionColumbusView}},sunDirectionWC:{get:function(){return this._sunDirectionWC}},sunDirectionEC:{get:function(){return this._sunDirectionEC}},moonDirectionEC:{get:function(){return this._moonDirectionEC}},lightDirectionWC:{get:function(){return this._lightDirectionWC}},lightDirectionEC:{get:function(){return this._lightDirectionEC}},lightColor:{get:function(){return this._lightColor}},lightColorHdr:{get:function(){return this._lightColorHdr}},encodedCameraPositionMCHigh:{get:function(){return fCe(this),this._encodedCameraPositionMC.high}},encodedCameraPositionMCLow:{get:function(){return fCe(this),this._encodedCameraPositionMC.low}},temeToPseudoFixedMatrix:{get:function(){return this._temeToPseudoFixed}},pixelRatio:{get:function(){return this._pixelRatio}},fogDensity:{get:function(){return this._fogDensity}},fogVisualDensityScalar:{get:function(){return this._fogVisualDensityScalar}},fogMinimumBrightness:{get:function(){return this._fogMinimumBrightness}},atmosphereHsbShift:{get:function(){return this._atmosphereHsbShift}},atmosphereLightIntensity:{get:function(){return this._atmosphereLightIntensity}},atmosphereRayleighCoefficient:{get:function(){return this._atmosphereRayleighCoefficient}},atmosphereRayleighScaleHeight:{get:function(){return this._atmosphereRayleighScaleHeight}},atmosphereMieCoefficient:{get:function(){return this._atmosphereMieCoefficient}},atmosphereMieScaleHeight:{get:function(){return this._atmosphereMieScaleHeight}},atmosphereMieAnisotropy:{get:function(){return this._atmosphereMieAnisotropy}},atmosphereDynamicLighting:{get:function(){return this._atmosphereDynamicLighting}},geometricToleranceOverMeter:{get:function(){return this._geometricToleranceOverMeter}},pass:{get:function(){return this._pass}},backgroundColor:{get:function(){return this._backgroundColor}},brdfLut:{get:function(){return this._brdfLut}},environmentMap:{get:function(){return this._environmentMap}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients}},specularEnvironmentMaps:{get:function(){return this._specularEnvironmentMaps}},specularEnvironmentMapsMaximumLOD:{get:function(){return this._specularEnvironmentMapsMaximumLOD}},splitPosition:{get:function(){return this._splitPosition}},minimumDisableDepthTestDistance:{get:function(){return this._minimumDisableDepthTestDistance}},invertClassificationColor:{get:function(){return this._invertClassificationColor}},orthographicIn3D:{get:function(){return this._orthographicIn3D}},ellipsoid:{get:function(){return this._ellipsoid??ie.default}}});function Bdt(e,t){X.clone(t,e._view),X.getMatrix3(t,e._viewRotation),e._view3DDirty=!0,e._inverseView3DDirty=!0,e._modelViewDirty=!0,e._modelView3DDirty=!0,e._modelViewRelativeToEyeDirty=!0,e._inverseModelViewDirty=!0,e._inverseModelView3DDirty=!0,e._viewProjectionDirty=!0,e._inverseViewProjectionDirty=!0,e._modelViewProjectionDirty=!0,e._modelViewProjectionRelativeToEyeDirty=!0,e._modelViewInfiniteProjectionDirty=!0,e._normalDirty=!0,e._inverseNormalDirty=!0,e._normal3DDirty=!0,e._inverseNormal3DDirty=!0}function wdt(e,t){X.clone(t,e._inverseView),X.getMatrix3(t,e._inverseViewRotation)}function Xdt(e,t){X.clone(t,e._projection),e._inverseProjectionDirty=!0,e._viewProjectionDirty=!0,e._inverseViewProjectionDirty=!0,e._modelViewProjectionDirty=!0,e._modelViewProjectionRelativeToEyeDirty=!0}function Wdt(e,t){X.clone(t,e._infiniteProjection),e._modelViewInfiniteProjectionDirty=!0}var uCe=new m,Fdt=new X;function Pdt(e,t){m.clone(t.positionWC,e._cameraPosition),m.clone(t.directionWC,e._cameraDirection),m.clone(t.rightWC,e._cameraRight),m.clone(t.upWC,e._cameraUp);let n=e._ellipsoid,i,o=t.positionCartographic;if(l(o)?(e._eyeHeight=o.height,e._eyeEllipsoidNormalEC=n.geodeticSurfaceNormalCartographic(o,e._eyeEllipsoidNormalEC),i=m.fromRadians(o.longitude,o.latitude,0,n,uCe)):(e._eyeHeight=-n.maximumRadius,m.magnitude(t.positionWC)>0&&(e._eyeEllipsoidNormalEC=m.normalize(t.positionWC,e._eyeEllipsoidNormalEC)),i=n.scaleToGeodeticSurface(t.positionWC,uCe)),e._encodedCameraPositionMCDirty=!0,!l(i))return;e._eyeEllipsoidNormalEC=$.multiplyByVector(e._viewRotation,e._eyeEllipsoidNormalEC,e._eyeEllipsoidNormalEC);let r=Dt.eastNorthUpToFixedFrame(i,n,Fdt);e._enuToModel=X.multiplyTransformation(e.inverseModel,r,e._enuToModel),e._modelToEnu=X.inverseTransformation(e._enuToModel,e._modelToEnu),Z.equalsEpsilon(n._radii.x,n._radii.y,Z.EPSILON15)&&(e._eyeEllipsoidCurvature=n.getLocalCurvature(i,e._eyeEllipsoidCurvature))}var o7=new $,Mdt=new ge;function vdt(e,t){Dt.computeIcrfToCentralBodyFixedMatrix(t.time,o7);let n=ry.computeSunPositionInEarthInertialFrame(t.time,e._sunPositionWC);$.multiplyByVector(o7,n,n),m.normalize(n,e._sunDirectionWC),n=$.multiplyByVector(e.viewRotation3D,n,e._sunDirectionEC),m.normalize(n,n),n=ry.computeMoonPositionInEarthInertialFrame(t.time,e._moonDirectionEC),$.multiplyByVector(o7,n,n),$.multiplyByVector(e.viewRotation3D,n,n),m.normalize(n,n);let i=t.mapProjection,r=i.ellipsoid.cartesianToCartographic(e._sunPositionWC,Mdt);i.project(r,e._sunPositionColumbusView)}zS.prototype.updateCamera=function(e){Bdt(this,e.viewMatrix),wdt(this,e.inverseViewMatrix),Pdt(this,e),this._entireFrustum.x=e.frustum.near,this._entireFrustum.y=e.frustum.far,this.updateFrustum(e.frustum),this._orthographicIn3D=this._mode!==re.SCENE2D&&e.frustum instanceof gn};zS.prototype.updateFrustum=function(e){Xdt(this,e.projectionMatrix),l(e.infiniteProjectionMatrix)&&Wdt(this,e.infiniteProjectionMatrix),this._currentFrustum.x=e.near,this._currentFrustum.y=e.far,this._farDepthFromNearPlusOne=e.far-e.near+1,this._log2FarDepthFromNearPlusOne=Z.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};zS.prototype.updatePass=function(e){this._pass=e};var Ndt=[],Ddt=new Ng;zS.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===re.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),vdt(this,e);let n=e.light??Ddt;n instanceof Ng?(this._lightDirectionWC=m.clone(this._sunDirectionWC,this._lightDirectionWC),this._lightDirectionEC=m.clone(this._sunDirectionEC,this._lightDirectionEC)):(this._lightDirectionWC=m.normalize(m.negate(n.direction,this._lightDirectionWC),this._lightDirectionWC),this._lightDirectionEC=$.multiplyByVector(this.viewRotation3D,this._lightDirectionWC,this._lightDirectionEC));let i=n.color,o=m.fromElements(i.red,i.green,i.blue,this._lightColorHdr);o=m.multiplyByScalar(o,n.intensity,o);let r=m.maximumComponent(o);r>1?m.divideByScalar(o,r,this._lightColor):m.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??Ndt,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=m.fromElements(c.hueShift,c.saturationShift,c.brightnessShift,this._atmosphereHsbShift),this._atmosphereLightIntensity=c.lightIntensity,this._atmosphereRayleighCoefficient=m.clone(c.rayleighCoefficient,this._atmosphereRayleighCoefficient),this._atmosphereRayleighScaleHeight=c.rayleighScaleHeight,this._atmosphereMieCoefficient=m.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=Dt.computeTemeToPseudoFixedMatrix(e.time,this._temeToPseudoFixed),this._splitPosition=e.splitPosition*e.context.drawingBufferWidth;let d=t.frustum.fov,u=this._viewport,h;l(d)?u.height>u.width?h=Math.tan(.5*d)*2/u.height:h=Math.tan(.5*d)*2/u.width:h=1/Math.max(u.width,u.height),this._geometricToleranceOverMeter=h*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 mCe(e){if(e._viewportDirty){let t=e._viewport;X.computeOrthographicOffCenter(t.x,t.x+t.width,t.y,t.y+t.height,0,1,e._viewportOrthographicMatrix),X.computeViewportTransformation(t,0,1,e._viewportTransformation),e._viewportDirty=!1}}function Qdt(e){e._inverseProjectionDirty&&(e._inverseProjectionDirty=!1,e._mode!==re.SCENE2D&&e._mode!==re.MORPHING&&!e._orthographicIn3D?X.inverse(e._projection,e._inverseProjection):X.clone(X.ZERO,e._inverseProjection))}function Udt(e){e._modelViewDirty&&(e._modelViewDirty=!1,X.multiplyTransformation(e._view,e._model,e._modelView))}function kdt(e){e._modelView3DDirty&&(e._modelView3DDirty=!1,X.multiplyTransformation(e.view3D,e._model,e._modelView3D))}function Ydt(e){e._inverseModelViewDirty&&(e._inverseModelViewDirty=!1,X.inverse(e.modelView,e._inverseModelView))}function Odt(e){e._inverseModelView3DDirty&&(e._inverseModelView3DDirty=!1,X.inverse(e.modelView3D,e._inverseModelView3D))}function Hdt(e){e._viewProjectionDirty&&(e._viewProjectionDirty=!1,X.multiply(e._projection,e._view,e._viewProjection))}function zdt(e){e._inverseViewProjectionDirty&&(e._inverseViewProjectionDirty=!1,X.inverse(e.viewProjection,e._inverseViewProjection))}function Kdt(e){e._modelViewProjectionDirty&&(e._modelViewProjectionDirty=!1,X.multiply(e._projection,e.modelView,e._modelViewProjection))}function Jdt(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 jdt(e){e._inverseModelViewProjectionDirty&&(e._inverseModelViewProjectionDirty=!1,X.inverse(e.modelViewProjection,e._inverseModelViewProjection))}function qdt(e){e._modelViewProjectionRelativeToEyeDirty&&(e._modelViewProjectionRelativeToEyeDirty=!1,X.multiply(e._projection,e.modelViewRelativeToEye,e._modelViewProjectionRelativeToEye))}function $dt(e){e._modelViewInfiniteProjectionDirty&&(e._modelViewInfiniteProjectionDirty=!1,X.multiply(e._infiniteProjection,e.modelView,e._modelViewInfiniteProjection))}function eut(e){if(e._normalDirty){e._normalDirty=!1;let t=e._normal;X.getMatrix3(e.inverseModelView,t),$.transpose(t,t)}}function tut(e){if(e._normal3DDirty){e._normal3DDirty=!1;let t=e._normal3D;X.getMatrix3(e.inverseModelView3D,t),$.transpose(t,t)}}function nut(e){if(e._inverseNormalDirty){e._inverseNormalDirty=!1;let t=e._inverseNormal;X.getMatrix3(e.modelView,t),$.transpose(t,t)}}function iut(e){if(e._inverseNormal3DDirty){e._inverseNormal3DDirty=!1;let t=e._inverseNormal3D;X.getMatrix3(e.modelView3D,t),$.transpose(t,t)}}var hCe=new m;function fCe(e){e._encodedCameraPositionMCDirty&&(e._encodedCameraPositionMCDirty=!1,X.multiplyByPoint(e.inverseModel,e._cameraPosition,hCe),ni.fromCartesian(hCe,e._encodedCameraPositionMC))}var out=new m,rut=new m,sut=new m,aut=new m,cut=new ge,lut=new m,dut=new X;function uut(e,t,n,i,o,r,s,a){let c=out;c.x=e.y,c.y=e.z,c.z=e.x;let d=rut;d.x=n.y,d.y=n.z,d.z=n.x;let u=sut;u.x=i.y,u.y=i.z,u.z=i.x;let h=aut;h.x=t.y,h.y=t.z,h.z=t.x,r===re.SCENE2D&&(c.z=o*.5);let p=s.unproject(c,cut);p.longitude=Z.clamp(p.longitude,-Math.PI,Math.PI),p.latitude=Z.clamp(p.latitude,-Z.PI_OVER_TWO,Z.PI_OVER_TWO);let g=s.ellipsoid,f=g.cartographicToCartesian(p,lut),b=Dt.eastNorthUpToFixedFrame(f,g,dut);return X.multiplyByPointAsVector(b,d,d),X.multiplyByPointAsVector(b,u,u),X.multiplyByPointAsVector(b,h,h),l(a)||(a=new X),a[0]=d.x,a[1]=u.x,a[2]=-h.x,a[3]=0,a[4]=d.y,a[5]=u.y,a[6]=-h.y,a[7]=0,a[8]=d.z,a[9]=u.z,a[10]=-h.z,a[11]=0,a[12]=-m.dot(d,f),a[13]=-m.dot(u,f),a[14]=m.dot(h,f),a[15]=1,a}function r7(e){e._view3DDirty&&(e._mode===re.SCENE3D?X.clone(e._view,e._view3D):uut(e._cameraPosition,e._cameraDirection,e._cameraRight,e._cameraUp,e._frustum2DWidth,e._mode,e._mapProjection,e._view3D),X.getMatrix3(e._view3D,e._viewRotation3D),e._view3DDirty=!1)}function pCe(e){e._inverseView3DDirty&&(X.inverseTransformation(e.view3D,e._inverseView3D),X.getMatrix3(e._inverseView3D,e._inverseViewRotation3D),e._inverseView3DDirty=!1)}var sP=zS;function xu(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):mut(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 iP(this),this._textureCache=new oP;let d=s;this._stencilBits=d.getParameter(d.STENCIL_BITS),Kt._maximumCombinedTextureImageUnits=d.getParameter(d.MAX_COMBINED_TEXTURE_IMAGE_UNITS),Kt._maximumCubeMapSize=d.getParameter(d.MAX_CUBE_MAP_TEXTURE_SIZE),Kt._maximumFragmentUniformVectors=d.getParameter(d.MAX_FRAGMENT_UNIFORM_VECTORS),Kt._maximumTextureImageUnits=d.getParameter(d.MAX_TEXTURE_IMAGE_UNITS),Kt._maximumRenderbufferSize=d.getParameter(d.MAX_RENDERBUFFER_SIZE),Kt._maximumTextureSize=d.getParameter(d.MAX_TEXTURE_SIZE),Kt._maximumVaryingVectors=d.getParameter(d.MAX_VARYING_VECTORS),Kt._maximumVertexAttributes=d.getParameter(d.MAX_VERTEX_ATTRIBS),Kt._maximumVertexTextureImageUnits=d.getParameter(d.MAX_VERTEX_TEXTURE_IMAGE_UNITS),Kt._maximumVertexUniformVectors=d.getParameter(d.MAX_VERTEX_UNIFORM_VECTORS),Kt._maximumSamples=this._webgl2?d.getParameter(d.MAX_SAMPLES):0;let u=d.getParameter(d.ALIASED_LINE_WIDTH_RANGE);Kt._minimumAliasedLineWidth=u[0],Kt._maximumAliasedLineWidth=u[1];let h=d.getParameter(d.ALIASED_POINT_SIZE_RANGE);Kt._minimumAliasedPointSize=h[0],Kt._maximumAliasedPointSize=h[1];let p=d.getParameter(d.MAX_VIEWPORT_DIMS);Kt._maximumViewportWidth=p[0],Kt._maximumViewportHeight=p[1];let g=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_FLOAT);Kt._highpFloatSupported=g.precision!==0;let f=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_INT);Kt._highpIntSupported=f.rangeMax!==0,this._antialias=d.getContextAttributes().antialias,this._standardDerivatives=!!Hr(d,["OES_standard_derivatives"]),this._blendMinmax=!!Hr(d,["EXT_blend_minmax"]),this._elementIndexUint=!!Hr(d,["OES_element_index_uint"]),this._depthTexture=!!Hr(d,["WEBGL_depth_texture","WEBKIT_WEBGL_depth_texture"]),this._fragDepth=!!Hr(d,["EXT_frag_depth"]),this._debugShaders=Hr(d,["WEBGL_debug_shaders"]),this._textureFloat=!!Hr(d,["OES_texture_float"]),this._textureHalfFloat=!!Hr(d,["OES_texture_half_float"]),this._textureFloatLinear=!!Hr(d,["OES_texture_float_linear"]),this._textureHalfFloatLinear=!!Hr(d,["OES_texture_half_float_linear"]),this._supportsTextureLod=!!Hr(d,["EXT_shader_texture_lod"]),this._colorBufferFloat=!!Hr(d,["EXT_color_buffer_float","WEBGL_color_buffer_float"]),this._floatBlend=!!Hr(d,["EXT_float_blend"]),this._colorBufferHalfFloat=!!Hr(d,["EXT_color_buffer_half_float"]),this._s3tc=!!Hr(d,["WEBGL_compressed_texture_s3tc","MOZ_WEBGL_compressed_texture_s3tc","WEBKIT_WEBGL_compressed_texture_s3tc"]),this._pvrtc=!!Hr(d,["WEBGL_compressed_texture_pvrtc","WEBKIT_WEBGL_compressed_texture_pvrtc"]),this._astc=!!Hr(d,["WEBGL_compressed_texture_astc"]),this._etc=!!Hr(d,["WEBG_compressed_texture_etc"]),this._etc1=!!Hr(d,["WEBGL_compressed_texture_etc1"]),this._bc7=!!Hr(d,["EXT_texture_compression_bptc"]),Kl.setKTX2SupportedFormats(this._s3tc,this._pvrtc,this._astc,this._etc,this._etc1,this._bc7);let b=r?Hr(d,["EXT_texture_filter_anisotropic","WEBKIT_EXT_texture_filter_anisotropic"]):void 0;this._textureFilterAnisotropic=b,Kt._maximumTextureFilterAnisotropy=l(b)?d.getParameter(b.MAX_TEXTURE_MAX_ANISOTROPY_EXT):1;let x,I,_,E,S,R,G,B,w,F;if(c){let L=this;x=function(){return L._gl.createVertexArray()},I=function(V){L._gl.bindVertexArray(V)},_=function(V){L._gl.deleteVertexArray(V)},E=function(V,W,M,Q,N){d.drawElementsInstanced(V,W,M,Q,N)},S=function(V,W,M,Q){d.drawArraysInstanced(V,W,M,Q)},R=function(V,W){d.vertexAttribDivisor(V,W)},G=function(V){d.drawBuffers(V)}}else B=Hr(d,["OES_vertex_array_object"]),l(B)&&(x=function(){return B.createVertexArrayOES()},I=function(L){B.bindVertexArrayOES(L)},_=function(L){B.deleteVertexArrayOES(L)}),w=Hr(d,["ANGLE_instanced_arrays"]),l(w)&&(E=function(L,V,W,M,Q){w.drawElementsInstancedANGLE(L,V,W,M,Q)},S=function(L,V,W,M){w.drawArraysInstancedANGLE(L,V,W,M)},R=function(L,V){w.vertexAttribDivisorANGLE(L,V)}),F=Hr(d,["WEBGL_draw_buffers"]),l(F)&&(G=function(L){F.drawBuffersWEBGL(L)});this.glCreateVertexArray=x,this.glBindVertexArray=I,this.glDeleteVertexArray=_,this.glDrawElementsInstanced=E,this.glDrawArraysInstanced=S,this.glVertexAttribDivisor=R,this.glDrawBuffers=G,this._vertexArrayObject=!!B,this._instancedArrays=!!w,this._drawBuffers=!!F,Kt._maximumDrawBuffers=this.drawBuffers?d.getParameter(ne.MAX_DRAW_BUFFERS):1,Kt._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 P=new sP,A=new Hc(this),T=Qe.fromCache();this._defaultPassState=A,this._defaultRenderState=T,this._defaultTexture=void 0,this._defaultEmissiveTexture=void 0,this._defaultNormalTexture=void 0,this._defaultCubeMap=void 0,this._us=P,this._currentRenderState=T,this._currentPassState=A,this._currentFramebuffer=void 0,this._maxFrameTextureUnitIndex=0,this._vertexAttribDivisors=[],this._previousDrawInstanced=!1;for(let L=0;L<Kt._maximumVertexAttributes;L++)this._vertexAttribDivisors.push(0);this._pickObjects={},this._nextPickColor=new Uint32Array(1),this.options={getWebGLStub:n,requestWebgl1:i,webgl:o,allowTextureFilterAnisotropic:r},this.cache={},Qe.apply(d,T,A)}function mut(e,t,n){if(typeof WebGLRenderingContext>"u")throw new de("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 de("The browser supports WebGL, but initialization failed.");return r}function hut(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 fut(e,t,n,i){let o=`${hut(e,i)}: ${t.name}(`;for(let r=0;r<n.length;++r)r!==0&&(o+=", "),o+=n[r];return o+=");",o}function put(e,t,n){let i=e.getError();if(i!==e.NO_ERROR)throw new de(fut(e,t,n,i))}function Aut(e,t,n){return{get:function(){let i=e[t];return n(e,`get: ${t}`,i),e[t]},set:function(i){e[t]=i,n(e,`set: ${t}`,i)}}}function gut(e,t){if(!l(t))return e;function n(o){return function(){let r=o.apply(e,arguments);return t(e,o,arguments),r}}let i={};for(let o in e){let r=e[o];r instanceof Function?i[o]=n(r):Object.defineProperty(i,o,Aut(e,o,t))}return i}function Hr(e,t){let n=t.length;for(let i=0;i<n;++i){let o=e.getExtension(t[i]);if(o)return o}}var but={};Object.defineProperties(xu.prototype,{id:{get:function(){return this._id}},webgl2:{get:function(){return this._webgl2}},canvas:{get:function(){return this._canvas}},shaderCache:{get:function(){return this._shaderCache}},textureCache:{get:function(){return this._textureCache}},uniformState:{get:function(){return this._us}},stencilBits:{get:function(){return this._stencilBits}},stencilBuffer:{get:function(){return this._stencilBits>=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=gut(this._originalGLContext,e?put:void 0)}},defaultTexture:{get:function(){return this._defaultTexture===void 0&&(this._defaultTexture=new Wt({context:this,source:{width:1,height:1,arrayBufferView:new Uint8Array([255,255,255,255])},flipY:!1})),this._defaultTexture}},defaultEmissiveTexture:{get:function(){return this._defaultEmissiveTexture===void 0&&(this._defaultEmissiveTexture=new Wt({context:this,pixelFormat:tt.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 Wt({context:this,pixelFormat:tt.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 Pr({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 but}}});function ACe(e,t,n,i){let o=e._currentRenderState,r=e._currentPassState;e._currentRenderState=t,e._currentPassState=n,Qe.partialApply(e._gl,o,t,r,n,i)}var s7;typeof WebGLRenderingContext<"u"&&(s7=[ne.BACK]);function a7(e,t){if(t!==e._currentFramebuffer){e._currentFramebuffer=t;let n=s7;if(l(t))t._bind(),n=t._getActiveColorAttachments();else{let i=e._gl;i.bindFramebuffer(i.FRAMEBUFFER,null)}e.drawBuffers&&e.glDrawBuffers(n)}}var yut=new xi;xu.prototype.clear=function(e,t){e=e??yut,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;ACe(this,a,t,!0);let c=e.framebuffer??t.framebuffer;a7(this,c),n.clear(i)};function Cut(e,t,n,i,o){a7(e,t),ACe(e,o,n,!1),i._bind(),e._maxFrameTextureUnitIndex=Math.max(e._maxFrameTextureUnitIndex,i.maximumTextureUnitIndex)}function xut(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??X.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()}xu.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,Cut(this,o,t,n,r),xut(this,e,n,i)};xu.prototype.beginFrame=function(){};xu.prototype.endFrame=function(){let e=this._gl;e.useProgram(null),this._currentFramebuffer=void 0,e.bindFramebuffer(e.FRAMEBUFFER,null);let t=s7;this.drawBuffers&&this.glDrawBuffers(t);let n=this._maxFrameTextureUnitIndex;this._maxFrameTextureUnitIndex=0;for(let i=0;i<n;++i)e.activeTexture(e.TEXTURE0+i),e.bindTexture(e.TEXTURE_2D,null),e.bindTexture(e.TEXTURE_CUBE_MAP,null)};xu.prototype.readPixels=function(e){let t=this._gl;e=e??Y.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=Ye.UNSIGNED_BYTE;l(s)&&s.numberOfColorAttachments>0&&(a=s.getColorTexture(0).pixelDatatype);let c=tt.createTypedArray(tt.RGBA,a,o,r);return a7(this,s),t.readPixels(n,i,o,r,tt.RGBA,Ye.toWebGLConstant(a,this),c),c};var gCe={position:0,textureCoordinates:1};xu.prototype.getViewportQuadVertexArray=function(){let e=this.cache.viewportQuad_vertexArray;if(!l(e)){let t=new pt({attributes:{position:new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1]}),textureCoordinates:new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:[0,0,1,0,1,1,0,1]})},indices:new Uint16Array([0,1,2,0,2,3]),primitiveType:We.TRIANGLES});e=ui.fromGeometry({context:this,geometry:t,attributeLocations:gCe,bufferUsage:Ne.STATIC_DRAW,interleave:!0}),this.cache.viewportQuad_vertexArray=e}return e};xu.prototype.createViewportQuadCommand=function(e,t){return t=t??Y.EMPTY_OBJECT,new ot({vertexArray:this.getViewportQuadVertexArray(),primitiveType:We.TRIANGLES,renderState:t.renderState,shaderProgram:ln.fromCache({context:this,vertexShaderSource:yI,fragmentShaderSource:e,attributeLocations:gCe}),uniformMap:t.uniformMap,owner:t.owner,framebuffer:t.framebuffer,pass:t.pass})};xu.prototype.getObjectByPickColor=function(e){return this._pickObjects[e.toRgba()]};function c7(e,t,n){this._pickObjects=e,this.key=t,this.color=n}Object.defineProperties(c7.prototype,{object:{get:function(){return this._pickObjects[this.key]},set:function(e){this._pickObjects[this.key]=e}}});c7.prototype.destroy=function(){delete this._pickObjects[this.key]};xu.prototype.createPickId=function(e){++this._nextPickColor[0];let t=this._nextPickColor[0];if(t===0)throw new de("Out of unique Pick IDs.");return this._pickObjects[t]=e,new c7(this._pickObjects,t,U.fromRgba(t))};xu.prototype.isDestroyed=function(){return!1};xu.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 xI=xu;var OGi=y(C(),1);function gk(e){this._autoDestroy=e?.autoDestroy??!0,this._canvas=document.createElement("canvas"),this._context=new xI(this._canvas,ke(e?.contextOptions)),this._canvases=[]}gk.prototype.createSceneContext=function(e){let t=e.getContext("2d",{alpha:!0}),n=this;n._canvases.push(e);let i=!1,o=function(){i=!0;let c=n._canvases.indexOf(e);c!==-1&&(n._canvases.splice(c,1),n._autoDestroy&&n._canvases.length===0&&n.destroy())},r=function(){let c=n._context.canvas,d=this.drawingBufferWidth;c.width<d&&(c.width=d);let u=this.drawingBufferHeight;c.height<u&&(c.height=u)},s=function(){let c=this.drawingBufferWidth,d=this.drawingBufferHeight,u=n._context.canvas.height-d;t.drawImage(n._context.canvas,0,u,c,d,0,0,c,d),n._context.endFrame()};return new Proxy(this._context,{get(c,d,u){if(d==="isDestroyed")return function(){return i};switch(d){case"_canvas":return e;case"destroy":return o;case"drawingBufferWidth":return e.width;case"drawingBufferHeight":return e.height;case"beginFrame":return r;case"endFrame":return s;default:return Reflect.get(c,d,u)}}})};gk.prototype.destroy=function(){this._context.destroy(),me(this)};gk.prototype.isDestroyed=function(){return!1};var aP=gk;var sZi=y(C(),1);function II(e){e=e??Y.EMPTY_OBJECT;let{context:t,source:n,pixelFormat:i=tt.RGBA,pixelDatatype:o=Ye.UNSIGNED_BYTE,flipY:r=!0,skipColorSpaceConversion:s=!1,sampler:a=new sn}=e;if(!t.webgl2)throw new Ae("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 h=e.preMultiplyAlpha||i===tt.RGB||i===tt.LUMINANCE,p=tt.toInternalFormat(i,o,t),g=tt.isCompressedFormat(p),f=t._gl,b=tt.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 m(c,d,u),this._hasMipmap=!1,this._sizeInBytes=b,this._preMultiplyAlpha=h,this._flipY=r,this._initialized=!1,this._sampler=void 0,this._sampler=a,bCe(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 Ae("For Texture3D, options.source.arrayBufferView must be defined");Iut(this,n),this._initialized=!0}else _ut(this);f.bindTexture(this._textureTarget,null)}function Iut(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:h}=e,p=tt.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:g}=t;h&&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,Ye.toWebGLConstant(u,n),g),f>1){let b=s,x=a,I=c;for(let _=0;_<t.mipLevels.length;++_)b=l7(b),x=l7(x),I=l7(I),i.texSubImage3D(o,_+1,0,0,0,b,x,I,d,Ye.toWebGLConstant(u,n),t.mipLevels[_])}}function l7(e){let t=Math.floor(e/2)|0;return Math.max(t,1)}function _ut(e){let t=e._context;t._gl.texImage3D(e._textureTarget,0,e._internalFormat,e._width,e._height,e._depth,0,e._pixelFormat,Ye.toWebGLConstant(e._pixelDatatype,t),null)}II.create=function(e){return new II(e)};Object.defineProperties(II.prototype,{id:{get:function(){return this._id}},sampler:{get:function(){return this._sampler},set:function(e){bCe(this,e),this._sampler=e}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},dimensions:{get:function(){return this._dimensions}},preMultiplyAlpha:{get:function(){return this._preMultiplyAlpha}},flipY:{get:function(){return this._flipY}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},depth:{get:function(){return this._depth}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(this._sizeInBytes*8/7):this._sizeInBytes}},_target:{get:function(){return this._textureTarget}}});function bCe(e,t){let{minificationFilter:n,magnificationFilter:i}=t,o=[en.NEAREST_MIPMAP_NEAREST,en.NEAREST_MIPMAP_LINEAR,en.LINEAR_MIPMAP_NEAREST,en.LINEAR_MIPMAP_LINEAR].includes(n),r=e._context,s=e._pixelFormat,a=e._pixelDatatype;(a===Ye.FLOAT&&!r.textureFloatLinear||a===Ye.HALF_FLOAT&&!r.textureHalfFloatLinear)&&(n=o?en.NEAREST_MIPMAP_NEAREST:en.NEAREST,i=pi.NEAREST),tt.isDepthFormat(s)&&(n=en.NEAREST,i=pi.NEAREST);let c=r._gl,d=e._textureTarget;c.activeTexture(c.TEXTURE0),c.bindTexture(d,e._texture),c.texParameteri(d,c.TEXTURE_MIN_FILTER,n),c.texParameteri(d,c.TEXTURE_MAG_FILTER,i),c.texParameteri(d,c.TEXTURE_WRAP_R,t.wrapR),c.texParameteri(d,c.TEXTURE_WRAP_S,t.wrapS),c.texParameteri(d,c.TEXTURE_WRAP_T,t.wrapT),l(e._textureFilterAnisotropic)&&c.texParameteri(d,e._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,t.maximumAnisotropy),c.bindTexture(d,null)}II.prototype.generateMipmap=function(e){e=e??Yu.DONT_CARE,this._hasMipmap=!0;let t=this._context._gl,n=this._textureTarget;t.hint(t.GENERATE_MIPMAP_HINT,e),t.activeTexture(t.TEXTURE0),t.bindTexture(n,this._texture),t.generateMipmap(n),t.bindTexture(n,null)};II.prototype.isDestroyed=function(){return!1};II.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),me(this)};var d7=II;var dZi=y(C(),1);function Eut(e,t,n){let i={flipY:!0,skipColorSpaceConversion:n,preferImageBitmap:!0},o=[Ve.createIfNeeded(t.positiveX).fetchImage(i),Ve.createIfNeeded(t.negativeX).fetchImage(i),Ve.createIfNeeded(t.positiveY).fetchImage(i),Ve.createIfNeeded(t.negativeY).fetchImage(i),Ve.createIfNeeded(t.positiveZ).fetchImage(i),Ve.createIfNeeded(t.negativeZ).fetchImage(i)];return Promise.all(o).then(function(r){return new Pr({context:e,source:{positiveX:r[0],negativeX:r[1],positiveY:r[2],negativeY:r[3],positiveZ:r[4],negativeZ:r[5]}})})}var cP=Eut;var mZi=y(C(),1),KS=`#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 fZi=y(C(),1),lP=`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); } `;var AZi=y(C(),1),dP=`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 bZi=y(C(),1),uP=`#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 CZi=y(C(),1),mP=`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 IZi=y(C(),1),hP=`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 EZi=y(C(),1),fP=`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 SZi=y(C(),1),pP=`/** * 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; } } `;var RZi=y(C(),1),AP=`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 GZi=y(C(),1),gP=`in vec4 position; out vec4 positionEC; void main() { positionEC = czm_modelView * position; gl_Position = czm_projection * positionEC; czm_vertexLogDepth(); } `;var BZi=y(C(),1),JS=`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 XZi=y(C(),1),jS=`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 FZi=y(C(),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 bP=`/** * @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 MZi=y(C(),1),yP=`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 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 NZi=y(C(),1),CP=`#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) 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 QZi=y(C(),1),qS=`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 kZi=y(C(),1),$S=`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 OZi=y(C(),1),xP=`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 zZi=y(C(),1),IP=`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; } `;var JZi=y(C(),1),_P=`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 qZi=y(C(),1),EP=`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 eBi=y(C(),1),TP=`uniform sampler2D u_texture; in vec2 v_textureCoordinates; void main() { vec4 color = texture(u_texture, v_textureCoordinates); out_FragColor = czm_gammaCorrect(color); } `;var nBi=y(C(),1),SP=`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 oBi=y(C(),1),LP=`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; } `;var sBi=y(C(),1),RP=` 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 mqi=y(C(),1);var CBi=y(C(),1);var fBi=y(C(),1);var lBi=y(C(),1);async function Tut(e,t,n,i){return l(i)||(i=!1),Rut(e,t,n,i)}function Sut(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(CCe(i)):r=o.then(CCe(i)).catch(Vut(i)),e.shift(),t.push(r),!0}function Lut(e){return new Promise(function(t){setTimeout(t,e)})}function u7(e,t,n){return e.length?Sut(e,t,n)?u7(e,t,n):Lut(100).then(()=>u7(e,t,n)):Promise.resolve()}function Rut(e,t,n,i){let o=e.tilingScheme,r,s=[],a={};for(r=0;r<n.length;++r){let d=o.positionToTileXY(n[r],t);if(!l(d))continue;let u=d.toString();if(!a.hasOwnProperty(u)){let h={x:d.x,y:d.y,level:t,tilingScheme:o,terrainProvider:e,positions:[]};a[u]=h,s.push(h)}a[u].positions.push(n[r])}let c=[];return u7(s,c,i).then(function(){return Promise.all(c).then(function(){return n})})}function yCe(e,t,n){let i=t.interpolateHeight(n,e.longitude,e.latitude);return i===void 0?!1:(e.height=i,!0)}function CCe(e){let t=e.positions,n=e.tilingScheme.tileXYToRectangle(e.x,e.y,e.level);return function(i){let o=!1;for(let r=0;r<t.length;++r){let s=t[r];if(!yCe(s,i,n)){o=!0;break}}return o?i.createMesh({tilingScheme:e.tilingScheme,x:e.x,y:e.y,level:e.level,throttle:!1}).then(function(){for(let r=0;r<t.length;++r){let s=t[r];yCe(s,i,n)}}):Promise.resolve()}}function Vut(e){let t=e.positions;return function(){for(let n=0;n<t.length;++n){let i=t[n];i.height=void 0}}}var VP=Tut;var m7=new D;async function xCe(e,t,n){l(n)||(n=!1);let i=[],o=[],r=e.availability,s=[];for(let c=0;c<t.length;++c){let d=t[c],u=r.computeMaximumLevelAtPosition(d);if(o[c]=u,u===0){e.tilingScheme.positionToTileXY(d,1,m7);let p=e.loadTileDataAvailability(m7.x,m7.y,1);l(p)&&s.push(p)}let h=i[u];l(h)||(i[u]=h=[]),h.push(d)}await Promise.all(s),await Promise.all(i.map(function(c,d){if(l(c))return VP(e,d,c,n)}));let a=[];for(let c=0;c<t.length;++c){let d=t[c];r.computeMaximumLevelAtPosition(d)!==o[c]&&a.push(d)}return a.length>0&&await xCe(e,a,n),t}var _I=xCe;async function h7(e,t){let n=t.terrainProvider,i=t.mapProjection,o=i.ellipsoid,r,s=t.camera.getRectangleCameraCoordinates(e);if(t.mode===re.SCENE3D?r=o.cartesianToCartographic(s):r=i.unproject(s),!l(n))return r;let a=n.availability;if(!l(a)||t.mode===re.SCENE2D)return r;let c=[le.center(e),le.southeast(e),le.southwest(e),le.northeast(e),le.northwest(e)],d=await h7._sampleTerrainMostDetailed(n,c),u=!1,h=d.reduce(function(g,f){return l(f.height)?(u=!0,Math.max(f.height,g)):g},-Number.MAX_VALUE),p=r;return u&&(p.height+=h),p}h7._sampleTerrainMostDetailed=_I;var EI=h7;var cFi=y(C(),1);var Rwi=y(C(),1);var ywi=y(C(),1);var IBi=y(C(),1),Gut={NONE:0,LERC:1},Xm=Object.freeze(Gut);var jBi=y(C(),1);var WBi=y(C(),1);var EBi=y(C(),1),Zut={NONE:0,BITS12:1},Ia=Object.freeze(Zut);var TI=new m,But=new m,Wm=new D,bk=new X,wut=new X,Xut=Math.pow(2,12);function zc(e,t,n,i,o,r,s,a,c,d){let u=Ia.NONE,h,p;if(l(t)&&l(n)&&l(i)&&l(o)){let g=t.minimum,f=t.maximum,b=m.subtract(f,g,But),x=i-n;Math.max(m.maximumComponent(b),x)<Xut-1?u=Ia.BITS12:u=Ia.NONE,h=X.inverseTransformation(o,new X);let _=m.negate(g,TI);X.multiply(X.fromTranslation(_,bk),h,h);let E=TI;E.x=1/b.x,E.y=1/b.y,E.z=1/b.z,X.multiply(X.fromScale(E,bk),h,h),p=X.clone(o),X.setTranslation(p,m.ZERO,p),o=X.clone(o,new X);let S=X.fromTranslation(g,bk),R=X.fromScale(b,wut),G=X.multiply(S,R,bk);X.multiply(o,G,o),X.multiply(p,G,p)}this.quantization=u,this.minimumHeight=n,this.maximumHeight=i,this.center=m.clone(e),this.toScaledENU=h,this.fromScaledENU=o,this.matrix=p,this.hasVertexNormals=r,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===Ia.BITS12){n=X.multiplyByPoint(this.toScaledENU,n,TI),n.x=Z.clamp(n.x,0,1),n.y=Z.clamp(n.y,0,1),n.z=Z.clamp(n.z,0,1);let u=this.maximumHeight-this.minimumHeight,h=Z.clamp((o-this.minimumHeight)/u,0,1);D.fromElements(n.x,n.y,Wm);let p=Mn.compressTextureCoordinates(Wm);D.fromElements(n.z,h,Wm);let g=Mn.compressTextureCoordinates(Wm);D.fromElements(c,d,Wm);let f=Mn.compressTextureCoordinates(Wm);if(e[t++]=p,e[t++]=g,e[t++]=f,this.hasWebMercatorT){D.fromElements(s,0,Wm);let b=Mn.compressTextureCoordinates(Wm);e[t++]=b}}else m.subtract(n,this.center,TI),e[t++]=TI.x,e[t++]=TI.y,e[t++]=TI.z,e[t++]=o,e[t++]=c,e[t++]=d,this.hasWebMercatorT&&(e[t++]=s);return this.hasVertexNormals&&(e[t++]=Mn.octPackFloat(r)),this.hasGeodeticSurfaceNormals&&(e[t++]=a.x,e[t++]=a.y,e[t++]=a.z),t};var Wut=new m,ICe=new m;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;s<o;s++){for(let u=0;u<i;u++){let h=s*i+u,p=s*r+u;t[p]=e[h]}let a=this.decodePosition(t,s,Wut),c=n.geodeticSurfaceNormal(a,ICe),d=s*r+this._offsetGeodeticSurfaceNormal;t[d]=c.x,t[d+1]=c.y,t[d+2]=c.z}};zc.prototype.removeGeodeticSurfaceNormals=function(e,t){if(!this.hasGeodeticSurfaceNormals)return;let n=this.stride,i=e.length/n;this.hasGeodeticSurfaceNormals=!1,this._calculateStrideAndOffsets();let o=this.stride;for(let r=0;r<i;r++)for(let s=0;s<o;s++){let a=r*n+s,c=r*o+s;t[c]=e[a]}};zc.prototype.decodePosition=function(e,t,n){if(l(n)||(n=new m),t*=this.stride,this.quantization===Ia.BITS12){let i=Mn.decompressTextureCoordinates(e[t],Wm);n.x=i.x,n.y=i.y;let o=Mn.decompressTextureCoordinates(e[t+1],Wm);return n.z=o.x,X.multiplyByPoint(this.fromScaledENU,n,n)}return n.x=e[t],n.y=e[t+1],n.z=e[t+2],m.add(n,this.center,n)};zc.prototype.getExaggeratedPosition=function(e,t,n){n=this.decodePosition(e,t,n);let i=this.exaggeration,o=this.exaggerationRelativeHeight;if(i!==1&&this.hasGeodeticSurfaceNormals){let s=this.decodeGeodeticSurfaceNormal(e,t,ICe),a=this.decodeHeight(e,t),c=Mr.getHeight(a,i,o)-a;n.x+=s.x*c,n.y+=s.y*c,n.z+=s.z*c}return n};zc.prototype.decodeTextureCoordinates=function(e,t,n){return l(n)||(n=new D),t*=this.stride,this.quantization===Ia.BITS12?Mn.decompressTextureCoordinates(e[t+2],n):D.fromElements(e[t+4],e[t+5],n)};zc.prototype.decodeHeight=function(e,t){return t*=this.stride,this.quantization===Ia.BITS12?Mn.decompressTextureCoordinates(e[t+1],Wm).y*(this.maximumHeight-this.minimumHeight)+this.minimumHeight:e[t+3]};zc.prototype.decodeWebMercatorT=function(e,t){return t*=this.stride,this.quantization===Ia.BITS12?Mn.decompressTextureCoordinates(e[t+3],Wm).x:e[t+6]};zc.prototype.getOctEncodedNormal=function(e,t,n){t=t*this.stride+this._offsetVertexNormal;let i=e[t]/256,o=Math.floor(i),r=(i-o)*256;return D.fromElements(o,r,n)};zc.prototype.decodeGeodeticSurfaceNormal=function(e,t,n){return t=t*this.stride+this._offsetGeodeticSurfaceNormal,n.x=e[t],n.y=e[t+1],n.z=e[t+2],n};zc.prototype._calculateStrideAndOffsets=function(){let e=0;switch(this.quantization){case Ia.BITS12:e+=3;break;default:e+=6}this.hasWebMercatorT&&(e+=1),this.hasVertexNormals&&(this._offsetVertexNormal=e,e+=1),this.hasGeodeticSurfaceNormals&&(this._offsetGeodeticSurfaceNormal=e,e+=3),this.stride=e};var yk={position3DAndHeight:0,textureCoordAndEncodedNormals:1,geodeticSurfaceNormal:2},Ck={compressed0:0,compressed1:1,geodeticSurfaceNormal:2};zc.prototype.getAttributes=function(e){let t=J.FLOAT,n=J.getSizeInBytes(t),i=this.stride*n,o=0,r=[];function s(a,c){r.push({index:a,vertexBuffer:e,componentDatatype:t,componentsPerAttribute:c,offsetInBytes:o,strideInBytes:i}),o+=c*n}if(this.quantization===Ia.NONE){s(yk.position3DAndHeight,4);let a=2;a+=this.hasWebMercatorT?1:0,a+=this.hasVertexNormals?1:0,s(yk.textureCoordAndEncodedNormals,a),this.hasGeodeticSurfaceNormals&&s(yk.geodeticSurfaceNormal,3)}else{let a=this.hasWebMercatorT||this.hasVertexNormals,c=this.hasWebMercatorT&&this.hasVertexNormals;s(Ck.compressed0,a?4:3),c&&s(Ck.compressed1,1),this.hasGeodeticSurfaceNormals&&s(Ck.geodeticSurfaceNormal,3)}return r};zc.prototype.getAttributeLocations=function(){return this.quantization===Ia.NONE?yk:Ck};zc.clone=function(e,t){if(l(e))return l(t)||(t=new zc),t.quantization=e.quantization,t.minimumHeight=e.minimumHeight,t.maximumHeight=e.maximumHeight,t.center=m.clone(e.center),t.toScaledENU=X.clone(e.toScaledENU),t.fromScaledENU=X.clone(e.fromScaledENU),t.matrix=X.clone(e.matrix),t.hasVertexNormals=e.hasVertexNormals,t.hasWebMercatorT=e.hasWebMercatorT,t.hasGeodeticSurfaceNormals=e.hasGeodeticSurfaceNormals,t.exaggeration=e.exaggeration,t.exaggerationRelativeHeight=e.exaggerationRelativeHeight,t._calculateStrideAndOffsets(),t};var Kc=zc;var Ep={};Ep.DEFAULT_STRUCTURE=Object.freeze({heightScale:1,heightOffset:0,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1});var f7=new m,Fut=new X,Put=new m,Mut=new m;Ep.computeVertices=function(e){let t=Math.cos,n=Math.sin,i=Math.sqrt,o=Math.atan,r=Math.exp,s=Z.PI_OVER_TWO,a=Z.toRadians,c=e.heightmap,d=e.width,u=e.height,h=e.skirtHeight,p=h>0,g=e.isGeographic??!0,f=e.ellipsoid??ie.default,b=1/f.maximumRadius,x=le.clone(e.nativeRectangle),I=le.clone(e.rectangle),_,E,S,R;l(I)?(_=I.west,E=I.south,S=I.east,R=I.north):g?(_=a(x.west),E=a(x.south),S=a(x.east),R=a(x.north)):(_=x.west*b,E=s-2*o(r(-x.south*b)),S=x.east*b,R=s-2*o(r(-x.north*b)));let G=e.relativeToCenter,B=l(G);G=B?G:m.ZERO;let w=e.includeWebMercatorT??!1,F=e.exaggeration??1,P=e.exaggerationRelativeHeight??0,T=F!==1,L=e.structure??Ep.DEFAULT_STRUCTURE,V=L.heightScale??Ep.DEFAULT_STRUCTURE.heightScale,W=L.heightOffset??Ep.DEFAULT_STRUCTURE.heightOffset,M=L.elementsPerHeight??Ep.DEFAULT_STRUCTURE.elementsPerHeight,Q=L.stride??Ep.DEFAULT_STRUCTURE.stride,N=L.elementMultiplier??Ep.DEFAULT_STRUCTURE.elementMultiplier,k=L.isBigEndian??Ep.DEFAULT_STRUCTURE.isBigEndian,v=le.computeWidth(x),O=le.computeHeight(x),H=v/(d-1),ee=O/(u-1);g||(v*=b,O*=b);let K=f.radiiSquared,te=K.x,q=K.y,pe=K.z,ye=65536,he=-65536,xe=Dt.eastNorthUpToFixedFrame(G,f),Te=X.inverseTransformation(xe,Fut),Be,Le;w&&(Be=Ui.geodeticLatitudeToMercatorAngle(E),Le=1/(Ui.geodeticLatitudeToMercatorAngle(R)-Be));let De=Put;De.x=Number.POSITIVE_INFINITY,De.y=Number.POSITIVE_INFINITY,De.z=Number.POSITIVE_INFINITY;let Ue=Mut;Ue.x=Number.NEGATIVE_INFINITY,Ue.y=Number.NEGATIVE_INFINITY,Ue.z=Number.NEGATIVE_INFINITY;let je=Number.POSITIVE_INFINITY,it=d*u,nn=h>0?d*2+u*2:0,rt=it+nn,rn=new Array(rt),Jt=new Array(rt),Xt=new Array(rt),Li=w?new Array(rt):[],bi=T?new Array(rt):[],vt=0,Rt=u,si=0,_t=d;p&&(--vt,++Rt,--si,++_t);let Fo=1e-5;for(let nt=vt;nt<Rt;++nt){let yt=nt;yt<0&&(yt=0),yt>=u&&(yt=u-1);let $t=x.north-ee*yt;g?$t=a($t):$t=s-2*o(r(-$t*b));let Sn=($t-E)/(R-E);Sn=Z.clamp(Sn,0,1);let fo=nt===vt,uo=nt===Rt-1;h>0&&(fo?$t+=Fo*O:uo&&($t-=Fo*O));let ra=t($t),sa=n($t),Hn=pe*sa,Ti;w&&(Ti=(Ui.geodeticLatitudeToMercatorAngle($t)-Be)*Le);for(let Rs=si;Rs<_t;++Rs){let Jo=Rs;Jo<0&&(Jo=0),Jo>=d&&(Jo=d-1);let Ga=yt*(d*Q)+Jo*Q,po;if(M===1)po=c[Ga];else{po=0;let Zo;if(k)for(Zo=0;Zo<M;++Zo)po=po*N+c[Ga+Zo];else for(Zo=M-1;Zo>=0;--Zo)po=po*N+c[Ga+Zo]}po=po*V+W,he=Math.max(he,po),ye=Math.min(ye,po);let jo=x.west+H*Jo;g?jo=a(jo):jo=jo*b;let Wu=(jo-_)/(S-_);Wu=Z.clamp(Wu,0,1);let xr=yt*d+Jo;if(h>0){let Zo=Rs===si,mn=Rs===_t-1,Re=fo||uo||Zo||mn;if((fo||uo)&&(Zo||mn))continue;Re&&(po-=h,Zo?(xr=it+(u-yt-1),jo-=Fo*v):uo?xr=it+u+(d-Jo-1):mn?(xr=it+u+d+yt,jo+=Fo*v):fo&&(xr=it+u+d+u+Jo))}let Vs=ra*t(jo),ks=ra*n(jo),Jm=te*Vs,fs=q*ks,nc=1/i(Jm*Vs+fs*ks+Hn*sa),Xr=Jm*nc,kl=fs*nc,Yl=Hn*nc,aa=new m;aa.x=Xr+Vs*po,aa.y=kl+ks*po,aa.z=Yl+sa*po,X.multiplyByPoint(Te,aa,f7),m.minimumByComponent(f7,De,De),m.maximumByComponent(f7,Ue,Ue),je=Math.min(je,po),rn[xr]=aa,Xt[xr]=new D(Wu,Sn),Jt[xr]=po,w&&(Li[xr]=Ti),T&&(bi[xr]=f.geodeticSurfaceNormal(aa))}}let Uo=ue.fromPoints(rn),Va;l(I)&&(Va=vn.fromRectangle(I,ye,he,f));let Cr;B&&(Cr=new gg(f).computeHorizonCullingPointPossiblyUnderEllipsoid(G,rn,ye));let wr=new Ib(De,Ue,G),ve=new Kc(G,wr,je,he,xe,!1,w,T,F,P),ut=new Float32Array(rt*ve.stride),qe=0;for(let nt=0;nt<rt;++nt)qe=ve.encode(ut,qe,rn[nt],Xt[nt],Jt[nt],void 0,Li[nt],bi[nt]);return{vertices:ut,maximumHeight:he,minimumHeight:ye,encoding:ve,boundingSphere3D:Uo,orientedBoundingBox:Va,occludeePointInScaledSpace:Cr}};var eL=Ep;var ewi=y(C(),1);function sy(){Ae.throwInstantiationError()}Object.defineProperties(sy.prototype,{credits:{get:Ae.throwInstantiationError},waterMask:{get:Ae.throwInstantiationError}});sy.prototype.interpolateHeight=Ae.throwInstantiationError;sy.prototype.isChildAvailable=Ae.throwInstantiationError;sy.prototype.createMesh=Ae.throwInstantiationError;sy.prototype.upsample=Ae.throwInstantiationError;sy.prototype.wasCreatedByUpsampling=Ae.throwInstantiationError;sy.maximumAsynchronousTasks=5;var df=sy;var nwi=y(C(),1);function vut(e,t,n,i,o,r,s,a,c,d,u,h,p,g,f,b){this.center=e,this.vertices=t,this.stride=d??6,this.indices=n,this.indexCountWithoutSkirts=i,this.vertexCountWithoutSkirts=o,this.minimumHeight=r,this.maximumHeight=s,this.boundingSphere3D=a,this.occludeePointInScaledSpace=c,this.orientedBoundingBox=u,this.encoding=h,this.westIndicesSouthToNorth=p,this.southIndicesEastToWest=g,this.eastIndicesNorthToSouth=f,this.northIndicesWestToEast=b}var Fm=vut;function Dg(e){this._buffer=e.buffer,this._width=e.width,this._height=e.height,this._childTileMask=e.childTileMask??15,this._encoding=e.encoding??Xm.NONE;let t=eL.DEFAULT_STRUCTURE,n=e.structure;l(n)?n!==t&&(n.heightScale=n.heightScale??t.heightScale,n.heightOffset=n.heightOffset??t.heightOffset,n.elementsPerHeight=n.elementsPerHeight??t.elementsPerHeight,n.stride=n.stride??t.stride,n.elementMultiplier=n.elementMultiplier??t.elementMultiplier,n.isBigEndian=n.isBigEndian??t.isBigEndian):n=t,this._structure=n,this._createdByUpsampling=e.createdByUpsampling??!1,this._waterMask=e.waterMask,this._skirtHeight=void 0,this._bufferType=this._encoding===Xm.LERC?Float32Array:this._buffer.constructor,this._mesh=void 0}Object.defineProperties(Dg.prototype,{credits:{get:function(){}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}}});var _Ce="createVerticesFromHeightmap",Nut=new hi(_Ce),Dut=new hi(_Ce,df.maximumAsynchronousTasks);Dg.prototype.createMesh=function(e){e=e??Y.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.tileXYToNativeRectangle(n,i,o),u=t.tileXYToRectangle(n,i,o),h=c.cartographicToCartesian(le.center(u)),p=this._structure,f=Es.getEstimatedLevelZeroGeometricErrorForAHeightmap(c,this._width,t.getNumberOfXTilesAtLevel(0))/(1<<o);this._skirtHeight=Math.min(f*4,1e3);let x=(a?Dut:Nut).scheduleTask({heightmap:this._buffer,structure:p,includeWebMercatorT:!0,width:this._width,height:this._height,nativeRectangle:d,rectangle:u,relativeToCenter:h,ellipsoid:c,skirtHeight:this._skirtHeight,isGeographic:t.projection instanceof Di,exaggeration:r,exaggerationRelativeHeight:s,encoding:this._encoding});if(!l(x))return;let I=this;return Promise.resolve(x).then(function(_){let E;I._skirtHeight>0?E=Es.getRegularGridAndSkirtIndicesAndEdgeIndices(_.gridWidth,_.gridHeight):E=Es.getRegularGridIndicesAndEdgeIndices(_.gridWidth,_.gridHeight);let S=_.gridWidth*_.gridHeight;return I._mesh=new Fm(h,new Float32Array(_.vertices),E.indices,E.indexCountWithoutSkirts,S,_.minimumHeight,_.maximumHeight,ue.clone(_.boundingSphere3D),m.clone(_.occludeePointInScaledSpace),_.numberOfAttributes,vn.clone(_.orientedBoundingBox),Kc.clone(_.encoding),E.westIndicesSouthToNorth,E.southIndicesEastToWest,E.eastIndicesNorthToSouth,E.northIndicesWestToEast),I._buffer=void 0,I._mesh})};Dg.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(le.center(d)),h=this._structure,g=Es.getEstimatedLevelZeroGeometricErrorForAHeightmap(a,this._width,t.getNumberOfXTilesAtLevel(0))/(1<<o);this._skirtHeight=Math.min(g*4,1e3);let f=eL.computeVertices({heightmap:this._buffer,structure:h,includeWebMercatorT:!0,width:this._width,height:this._height,nativeRectangle:c,rectangle:d,relativeToCenter:u,ellipsoid:a,skirtHeight:this._skirtHeight,isGeographic:t.projection instanceof Di,exaggeration:r,exaggerationRelativeHeight:s});this._buffer=void 0;let b;this._skirtHeight>0?b=Es.getRegularGridAndSkirtIndicesAndEdgeIndices(this._width,this._height):b=Es.getRegularGridIndicesAndEdgeIndices(this._width,this._height);let x=f.gridWidth*f.gridHeight;return this._mesh=new Fm(u,f.vertices,b.indices,b.indexCountWithoutSkirts,x,f.minimumHeight,f.maximumHeight,f.boundingSphere3D,f.occludeePointInScaledSpace,f.encoding.stride,f.orientedBoundingBox,f.encoding,b.westIndicesSouthToNorth,b.southIndicesEastToWest,b.eastIndicesNorthToSouth,b.northIndicesWestToEast),this._mesh};Dg.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,h=r.heightScale,p=l(this._mesh),g=this._encoding===Xm.LERC;if(!p&&g)return;let b;if(p){let x=this._mesh.vertices,I=this._mesh.encoding;b=ECe(x,I,u,h,e,i,o,t,n)}else b=Qut(this._buffer,a,c,s,d,e,i,o,t,n),b=b*h+u;return b};Dg.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,h=u.stride,p=new this._bufferType(c*d*h),g=a.vertices,f=a.encoding,b=e.tileXYToRectangle(t,n,i),x=e.tileXYToRectangle(o,r,s),I=u.heightOffset,_=u.heightScale,E=u.elementsPerHeight,S=u.elementMultiplier,R=u.isBigEndian,G=Math.pow(S,E-1);for(let B=0;B<d;++B){let w=Z.lerp(x.north,x.south,B/(d-1));for(let F=0;F<c;++F){let P=Z.lerp(x.west,x.east,F/(c-1)),A=ECe(g,f,I,_,b,c,d,P,w);A=A<u.lowestEncodedHeight?u.lowestEncodedHeight:A,A=A>u.highestEncodedHeight?u.highestEncodedHeight:A,Uut(p,E,S,G,h,R,B*c+F,A)}}return Promise.resolve(new Dg({buffer:p,width:c,height:d,childTileMask:0,structure:this._structure,createdByUpsampling:!0}))};Dg.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};Dg.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};function Qut(e,t,n,i,o,r,s,a,c,d){let u=(c-r.west)*(s-1)/(r.east-r.west),h=(d-r.south)*(a-1)/(r.north-r.south),p=u|0,g=p+1;g>=s&&(g=s-1,p=s-2);let f=h|0,b=f+1;b>=a&&(b=a-1,f=a-2);let x=u-p,I=h-f;f=a-1-f,b=a-1-b;let _=xk(e,t,n,i,o,f*s+p),E=xk(e,t,n,i,o,f*s+g),S=xk(e,t,n,i,o,b*s+p),R=xk(e,t,n,i,o,b*s+g);return TCe(x,I,_,E,S,R)}function ECe(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),h=d|0,p=h+1;p>=r&&(p=r-1,h=r-2);let g=u|0,f=g+1;f>=s&&(f=s-1,g=s-2);let b=d-h,x=u-g;g=s-1-g,f=s-1-f;let I=(t.decodeHeight(e,g*r+h)-n)/i,_=(t.decodeHeight(e,g*r+p)-n)/i,E=(t.decodeHeight(e,f*r+h)-n)/i,S=(t.decodeHeight(e,f*r+p)-n)/i;return TCe(b,x,I,_,E,S)}function TCe(e,t,n,i,o,r){return t<e?n+e*(i-n)+t*(r-i):n+e*(r-o)+t*(o-n)}function xk(e,t,n,i,o,r){r*=i;let s=0,a;if(o)for(a=0;a<t;++a)s=s*n+e[r+a];else for(a=t-1;a>=0;--a)s=s*n+e[r+a];return s}function Uut(e,t,n,i,o,r,s,a){s*=o;let c;if(r)for(c=0;c<t-1;++c)e[s+c]=a/i|0,a-=e[s+c]*i,i/=n;else for(c=t-1;c>0;--c)e[s+c]=a/i|0,a-=e[s+c]*i,i/=n;e[s+c]=a}var yc=Dg;function tL(e){e=e??Y.EMPTY_OBJECT,this._tilingScheme=e.tilingScheme,l(this._tilingScheme)||(this._tilingScheme=new ao({ellipsoid:e.ellipsoid??ie.default})),this._levelZeroMaximumGeometricError=Es.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,64,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new Ce}Object.defineProperties(tL.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});tL.prototype.requestTileGeometry=function(e,t,n,i){return Promise.resolve(new yc({buffer:new Uint8Array(256),width:16,height:16}))};tL.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};tL.prototype.getTileDataAvailable=function(e,t,n){};tL.prototype.loadTileDataAvailability=function(e,t,n){};var Tp=tL;var Nwi=y(C(),1);var Bwi=y(C(),1);var kut=new D;function Yut(e,t){let n=e.unionClippingRegions,i=e.length,o=Ws.useFloatTexture(t),r=Ws.getTextureResolution(e,t,kut),s=r.x,a=r.y,c=o?zut(s,a):Kut(s,a);return c+=` `,c+=n?Out(i):Hut(i),c}function Out(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; break; } } if (breakAndDiscard) { discard; } return clipAmount; } `}function Hut(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 zut(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}); 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 Kut(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}); 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 Qg=Yut;function Jut(e,t,n,i,o,r){this.numberOfDayTextures=e,this.flags=t,this.material=n,this.shaderProgram=i,this.clippingShaderState=o,this.clippingPolygonShaderState=r}function p7(){this.baseVertexShaderSource=void 0,this.baseFragmentShaderSource=void 0,this._shadersByTexturesFlags=[],this.material=void 0}function jut(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 re.SCENE3D:o=t;break;case re.SCENE2D:case re.COLUMBUS_VIEW:o=n;break;case re.MORPHING:o=i;break}return o}function qut(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 $ut(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 emt(e){return e?"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DMercatorYPositionFraction(textureCoordinates); }":"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DGeographicYPositionFraction(textureCoordinates); }"}p7.prototype.getShaderProgram=function(e){let t=e.frameState,n=e.surfaceTile,i=e.numberOfDayTextures,o=e.applyBrightness,r=e.applyContrast,s=e.applyHue,a=e.applySaturation,c=e.applyGamma,d=e.applyAlpha,u=e.applyDayNightAlpha,h=e.applySplit,p=e.hasWaterMask,g=e.showReflectiveOcean,f=e.showOceanWaves,b=e.enableLighting,x=e.dynamicAtmosphereLighting,I=e.dynamicAtmosphereLightingFromSun,_=e.showGroundAtmosphere,E=e.perFragmentGroundAtmosphere,S=e.hasVertexNormals,R=e.useWebMercatorProjection,G=e.enableFog,B=e.enableClippingPlanes,w=e.clippingPlanes,F=e.enableClippingPolygons,P=e.clippingPolygons,A=e.clippedByBoundaries,T=e.hasImageryLayerCutout,L=e.colorCorrect,V=e.highlightFillTile,W=e.colorToAlpha,M=e.hasGeodeticSurfaceNormals,Q=e.hasExaggeration,N=e.showUndergroundColor,k=e.translucent,v=0,O="",ee=n.renderedMesh.encoding;ee.quantization===Ia.BITS12&&(v=1,O="QUANTIZATION_BITS12");let te=0,q="";A&&(te=1,q="TILE_LIMIT_RECTANGLE");let pe=0,ye="";T&&(pe=1,ye="APPLY_IMAGERY_CUTOUT");let he=t.mode,xe=he|o<<2|r<<3|s<<4|a<<5|c<<6|d<<7|p<<8|g<<9|f<<10|b<<11|x<<12|I<<13|_<<14|E<<15|S<<16|R<<17|G<<18|v<<19|h<<20|B<<21|F<<22|te<<23|pe<<24|L<<25|V<<26|W<<27|M<<28|Q<<29|N<<30|k<<31|u<<32,Te=0;l(w)&&w.length>0&&(Te=B?w.clippingPlanesState:0);let Be=0;l(P)&&P.length>0&&(Be=F?P.clippingPolygonsState:0);let Le=n.surfaceShader;if(l(Le)&&Le.numberOfDayTextures===i&&Le.flags===xe&&Le.material===this.material&&Le.clippingShaderState===Te&&Le.clippingPolygonShaderState===Be)return Le.shaderProgram;let De=this._shadersByTexturesFlags[i];if(l(De)||(De=this._shadersByTexturesFlags[i]=[]),Le=De[xe],!l(Le)||Le.material!==this.material||Le.clippingShaderState!==Te||Le.clippingPolygonShaderState!==Be){let Ue=this.baseVertexShaderSource.clone(),je=this.baseFragmentShaderSource.clone();Te!==0&&je.sources.unshift(Qg(w,t.context)),Be!==0&&(je.sources.unshift(qut(t.context)),Ue.sources.unshift($ut(t.context))),Ue.defines.push(O),je.defines.push(`TEXTURE_UNITS ${i}`,q,ye),o&&je.defines.push("APPLY_BRIGHTNESS"),r&&je.defines.push("APPLY_CONTRAST"),s&&je.defines.push("APPLY_HUE"),a&&je.defines.push("APPLY_SATURATION"),c&&je.defines.push("APPLY_GAMMA"),d&&je.defines.push("APPLY_ALPHA"),u&&je.defines.push("APPLY_DAY_NIGHT_ALPHA"),p&&je.defines.push("HAS_WATER_MASK"),g&&(je.defines.push("SHOW_REFLECTIVE_OCEAN"),Ue.defines.push("SHOW_REFLECTIVE_OCEAN")),f&&je.defines.push("SHOW_OCEAN_WAVES"),W&&je.defines.push("APPLY_COLOR_TO_ALPHA"),N&&(Ue.defines.push("UNDERGROUND_COLOR"),je.defines.push("UNDERGROUND_COLOR")),k&&(Ue.defines.push("TRANSLUCENT"),je.defines.push("TRANSLUCENT")),b&&(S?(Ue.defines.push("ENABLE_VERTEX_LIGHTING"),je.defines.push("ENABLE_VERTEX_LIGHTING")):(Ue.defines.push("ENABLE_DAYNIGHT_SHADING"),je.defines.push("ENABLE_DAYNIGHT_SHADING"))),x&&(Ue.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),je.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),I&&(Ue.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"),je.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"))),_&&(Ue.defines.push("GROUND_ATMOSPHERE"),je.defines.push("GROUND_ATMOSPHERE"),E&&(Ue.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"),je.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"))),Ue.defines.push("INCLUDE_WEB_MERCATOR_Y"),je.defines.push("INCLUDE_WEB_MERCATOR_Y"),G&&(Ue.defines.push("FOG"),je.defines.push("FOG")),h&&je.defines.push("APPLY_SPLIT"),B&&je.defines.push("ENABLE_CLIPPING_PLANES"),F&&(je.defines.push("ENABLE_CLIPPING_POLYGONS"),Ue.defines.push("ENABLE_CLIPPING_POLYGONS"),P.inverse&&je.defines.push("CLIPPING_INVERSE"),je.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${P.extentsCount}`),Ue.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${P.extentsCount}`)),L&&je.defines.push("COLOR_CORRECT"),V&&je.defines.push("HIGHLIGHT_FILL_TILE"),M&&Ue.defines.push("GEODETIC_SURFACE_NORMALS"),Q&&Ue.defines.push("EXAGGERATION");let it=` vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend) { vec4 color = initialColor; `;T&&(it+=` vec4 cutoutAndColorResult; bool texelUnclipped; `);for(let rt=0;rt<i;++rt)T?it+=` cutoutAndColorResult = u_dayTextureCutoutRectangles[${rt}]; texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y; cutoutAndColorResult = sampleAndBlend( `:it+=` color = sampleAndBlend( `,it+=` color, u_dayTextures[${rt}], u_dayTextureUseWebMercatorT[${rt}] ? textureCoordinates.xz : textureCoordinates.xy, u_dayTextureTexCoordsRectangle[${rt}], u_dayTextureTranslationAndScale[${rt}], ${d?`u_dayTextureAlpha[${rt}]`:"1.0"}, ${u?`u_dayTextureNightAlpha[${rt}]`:"1.0"}, ${u?`u_dayTextureDayAlpha[${rt}]`:"1.0"}, ${o?`u_dayTextureBrightness[${rt}]`:"0.0"}, ${r?`u_dayTextureContrast[${rt}]`:"0.0"}, ${s?`u_dayTextureHue[${rt}]`:"0.0"}, ${a?`u_dayTextureSaturation[${rt}]`:"0.0"}, ${c?`u_dayTextureOneOverGamma[${rt}]`:"0.0"}, ${h?`u_dayTextureSplit[${rt}]`:"0.0"}, ${W?`u_colorsToAlpha[${rt}]`:"vec4(0.0)"}, nightBlend); `,T&&(it+=` color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color); `);it+=` return color; }`,je.sources.push(it),Ue.sources.push(jut(he)),Ue.sources.push(emt(R));let nn=ln.fromCache({context:t.context,vertexShaderSource:Ue,fragmentShaderSource:je,attributeLocations:ee.getAttributeLocations()});Le=De[xe]=new Jut(i,xe,this.material,nn,Te,Be)}return n.surfaceShader=Le,Le.shaderProgram};p7.prototype.destroy=function(){let e,t,n=this._shadersByTexturesFlags;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i];if(!l(o))continue;for(e in o)o.hasOwnProperty(e)&&(t=o[e],l(t)&&t.shaderProgram.destroy())}return me(this)};var GP=p7;var H2i=y(C(),1);var Qwi=y(C(),1),tmt={NONE:-1,PARTIAL:0,FULL:1},Zr=Object.freeze(tmt);var xXi=y(C(),1);var kwi=y(C(),1),nmt={START:0,LOADING:1,DONE:2,FAILED:3},_a=Object.freeze(nmt);var Owi=y(C(),1),imt={FAILED:0,UNLOADED:1,RECEIVING:2,RECEIVED:3,TRANSFORMING:4,TRANSFORMED:5,READY:6},So=Object.freeze(imt);function Ar(){this.imagery=[],this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new ce(0,0,1,1),this.terrainData=void 0,this.vertexArray=void 0,this.tileBoundingRegion=void 0,this.occludeePointInScaledSpace=new m,this.boundingVolumeSourceTile=void 0,this.boundingVolumeIsFromMesh=!1,this.terrainState=So.UNLOADED,this.mesh=void 0,this.fill=void 0,this.pickBoundingSphere=new ue,this.surfaceShader=void 0,this.isClipped=!0,this.clippedByBoundaries=!1}Object.defineProperties(Ar.prototype,{eligibleForUnloading:{get:function(){let e=this.terrainState,n=!(e===So.RECEIVING||e===So.TRANSFORMING),i=this.imagery;for(let o=0,r=i.length;n&&o<r;++o){let s=i[o];n=!l(s.loadingImagery)||s.loadingImagery.state!==Jn.TRANSITIONING}return n}},renderedMesh:{get:function(){if(l(this.vertexArray))return this.mesh;if(l(this.fill))return this.fill.mesh}}});var omt=new ge;function A7(e,t,n,i,o,r){let s=e.getExaggeratedPosition(i,o,r);if(l(t)&&t!==re.SCENE3D){let c=n.ellipsoid.cartesianToCartographic(s,omt);s=n.project(c,r),s=m.fromElements(s.z,s.x,s.y,r)}return s}var rmt=new m,smt=new m,amt=new m;Ar.prototype.pick=function(e,t,n,i,o){let r=this.renderedMesh;if(!l(r))return;let s=r.vertices,a=r.indices,c=r.encoding,d=a.length,u=Number.MAX_VALUE;for(let h=0;h<d;h+=3){let p=a[h],g=a[h+1],f=a[h+2],b=A7(c,t,n,s,p,rmt),x=A7(c,t,n,s,g,smt),I=A7(c,t,n,s,f,amt),_=fi.rayTriangleParametric(e,b,x,I,i);l(_)&&_<u&&_>=0&&(u=_)}return u!==Number.MAX_VALUE?En.getPoint(e,u,o):void 0};Ar.prototype.freeResources=function(){l(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0),this.terrainData=void 0,this.terrainState=So.UNLOADED,this.mesh=void 0,this.fill=this.fill&&this.fill.destroy();let e=this.imagery;for(let t=0,n=e.length;t<n;++t)e[t].freeResources();this.imagery.length=0,this.freeVertexArray()};Ar.prototype.freeVertexArray=function(){Ar._freeVertexArray(this.vertexArray),this.vertexArray=void 0,Ar._freeVertexArray(this.wireframeVertexArray),this.wireframeVertexArray=void 0};Ar.initialize=function(e,t,n){let i=e.data;l(i)||(i=e.data=new Ar),e.state===_a.START&&(cmt(e,t,n),e.state=_a.LOADING)};Ar.processStateMachine=function(e,t,n,i,o,r,s){Ar.initialize(e,n,i);let a=e.data;if(e.state===_a.LOADING&&lmt(e,t,n,i,o,r),s)return;let c=e.renderable;e.renderable=l(a.vertexArray);let d=a.terrainState===So.READY;e.upsampledFromParent=l(a.terrainData)&&a.terrainData.wasCreatedByUpsampling();let u=a.processImagery(e,n,t);if(d&&u){let h=e._loadedCallbacks,p={};for(let g in h)h.hasOwnProperty(g)&&(h[g](e)||(p[g]=h[g]));e._loadedCallbacks=p,e.state=_a.DONE}c&&(e.renderable=!0)};Ar.prototype.processImagery=function(e,t,n,i){let o=e.data,r=e.upsampledFromParent,s=!1,a=!0,c=o.imagery,d,u;for(d=0,u=c.length;d<u;++d){let h=c[d];if(!l(h.loadingImagery)){r=!1;continue}if(h.loadingImagery.state===Jn.PLACEHOLDER){let g=h.loadingImagery.imageryLayer;if(g.ready){h.freeResources(),c.splice(d,1),g._createTileImagerySkeletons(e,t,d),--d,u=c.length;continue}else r=!1}let p=h.processStateMachine(e,n,i);a=a&&p,s=s||p||l(h.readyImagery),r=r&&l(h.loadingImagery)&&(h.loadingImagery.state===Jn.FAILED||h.loadingImagery.state===Jn.INVALID)}return e.upsampledFromParent=r,e.renderable=e.renderable&&(s||a),a};function SCe(e,t,n,i){let o=e.renderedMesh,r=o.vertices,s=o.encoding,a=r.length/s.stride,c=Kc.clone(s);c.hasGeodeticSurfaceNormals=t,c=Kc.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?(Ar._freeVertexArray(e.fill.vertexArray),e.fill.vertexArray=Ar._createVertexArrayForMesh(i.context,o)):(Ar._freeVertexArray(e.vertexArray),e.vertexArray=Ar._createVertexArrayForMesh(i.context,o)),Ar._freeVertexArray(e.wireframeVertexArray),e.wireframeVertexArray=void 0}Ar.prototype.addGeodeticSurfaceNormals=function(e,t){SCe(this,!0,e,t)};Ar.prototype.removeGeodeticSurfaceNormals=function(e){SCe(this,!1,void 0,e)};Ar.prototype.updateExaggeration=function(e,t,n){let i=this,o=i.renderedMesh;if(o===void 0)return;let r=t.verticalExaggeration,s=t.verticalExaggerationRelativeHeight,a=r!==1,c=o.encoding,d=c.exaggeration!==r,u=c.exaggerationRelativeHeight!==s;if(d||u){if(d)if(a&&!c.hasGeodeticSurfaceNormals){let h=e.tilingScheme.ellipsoid;i.addGeodeticSurfaceNormals(h,t)}else!a&&c.hasGeodeticSurfaceNormals&&i.removeGeodeticSurfaceNormals(t);if(c.exaggeration=r,c.exaggerationRelativeHeight=s,n!==void 0){n._tileToUpdateHeights.push(e);let h=e.customData,p=h.length;for(let g=0;g<p;g++){let f=h[g];f.level=-1}}}};function cmt(e,t,n){let i=t.getTileDataAvailable(e.x,e.y,e.level);if(!l(i)&&l(e.parent)){let o=e.parent,r=o.data;l(r)&&l(r.terrainData)&&(i=r.terrainData.isChildAvailable(o.x,o.y,e.x,e.y))}i===!1&&(e.data.terrainState=So.FAILED);for(let o=0,r=n.length;o<r;++o){let s=n.get(o);s.show&&s._createTileImagerySkeletons(e,t)}}function lmt(e,t,n,i,o,r){let s=e.data,a=e.parent;if(s.terrainState===So.FAILED&&a!==void 0&&(a.data!==void 0&&a.data.terrainData!==void 0&&a.data.terrainData.canUpsample!==!1||Ar.processStateMachine(a,t,n,i,o,r,!0)),s.terrainState===So.FAILED&&dmt(s,e,t,n,e.x,e.y,e.level),s.terrainState===So.UNLOADED&&umt(s,n,e.x,e.y,e.level),s.terrainState===So.RECEIVED&&hmt(s,t,n,e.x,e.y,e.level),s.terrainState===So.TRANSFORMED&&(fmt(s,t.context,n,e.x,e.y,e.level,r),s.updateExaggeration(e,t,o)),s.terrainState>=So.RECEIVED&&s.waterMaskTexture===void 0&&n.hasWaterMask)if(s.terrainData.waterMask!==void 0)Amt(t.context,s);else{let d=s._findAncestorTileWithTerrainData(e);l(d)&&l(d.data.waterMaskTexture)&&(s.waterMaskTexture=d.data.waterMaskTexture,++s.waterMaskTexture.referenceCount,s._computeWaterMaskTranslationAndScale(e,d,s.waterMaskTranslationAndScale))}}function dmt(e,t,n,i,o,r,s){let a=t.parent;if(!a){t.state=_a.FAILED;return}let c=a.data.terrainData,d=a.x,u=a.y,h=a.level;if(!l(c))return;let p=c.upsample(i.tilingScheme,d,u,h,o,r,s);l(p)&&(e.terrainState=So.RECEIVING,Promise.resolve(p).then(function(g){l(g)&&(e.terrainData=g,e.terrainState=So.RECEIVED)}).catch(function(){e.terrainState=So.FAILED}))}function umt(e,t,n,i,o){function r(c){if(!l(c)){e.terrainState=So.UNLOADED,e.request=void 0;return}e.terrainData=c,e.terrainState=So.RECEIVED,e.request=void 0}function s(c){if(e.request.state===mi.CANCELLED){e.terrainData=void 0,e.terrainState=So.UNLOADED,e.request=void 0;return}e.terrainState=So.FAILED,e.request=void 0;let d=`Failed to obtain terrain tile X: ${n} Y: ${i} Level: ${o}. Error message: "${c}"`;t._requestError=vo.reportError(t._requestError,t,t.errorEvent,d,n,i,o),t._requestError.retry&&a()}function a(){let c=new sr({throttle:!1,throttleByServer:!0,type:Zs.TERRAIN});e.request=c;let d=t.requestTileGeometry(n,i,o,c);l(d)?(e.terrainState=So.RECEIVING,Promise.resolve(d).then(function(u){r(u)}).catch(function(u){s(u)})):(e.terrainState=So.UNLOADED,e.request=void 0)}a()}var mmt={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0,throttle:!0};function hmt(e,t,n,i,o,r){let s=n.tilingScheme,a=mmt;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=So.TRANSFORMING,Promise.resolve(d).then(function(u){e.mesh=u,e.terrainState=So.TRANSFORMED}).catch(function(){e.terrainState=So.FAILED}))}Ar._createVertexArrayForMesh=function(e,t){let n=t.vertices,i=It.createVertexBuffer({context:e,typedArray:n,usage:Ne.STATIC_DRAW}),o=t.encoding.getAttributes(i),r=t.indices.indexBuffers||{},s=r[e.id];if(!l(s)||s.isDestroyed()){let a=t.indices;s=It.createIndexBuffer({context:e,typedArray:a,usage:Ne.STATIC_DRAW,indexDatatype:Me.fromSizeInBytes(a.BYTES_PER_ELEMENT)}),s.vertexArrayDestroyable=!1,s.referenceCount=1,r[e.id]=s,t.indices.indexBuffers=r}else++s.referenceCount;return new ui({context:e,attributes:o,indexBuffer:s})};Ar._freeVertexArray=function(e){if(l(e)){let t=e.indexBuffer;e.isDestroyed()||e.destroy(),l(t)&&!t.isDestroyed()&&l(t.referenceCount)&&(--t.referenceCount,t.referenceCount===0&&t.destroy())}};function fmt(e,t,n,i,o,r,s){e.vertexArray=Ar._createVertexArrayForMesh(t,e.mesh),e.terrainState=So.READY,e.fill=e.fill&&e.fill.destroy(s)}function pmt(e){let t=e.cache.tile_waterMaskData;if(!l(t)){let n=Wt.create({context:e,pixelFormat:tt.LUMINANCE,pixelDatatype:Ye.UNSIGNED_BYTE,source:{arrayBufferView:new Uint8Array([255]),width:1,height:1}});n.referenceCount=1;let i=new sn({wrapS:Ln.CLAMP_TO_EDGE,wrapT:Ln.CLAMP_TO_EDGE,minificationFilter:en.LINEAR,magnificationFilter:pi.LINEAR});t={allWaterTexture:n,sampler:i,destroy:function(){this.allWaterTexture.destroy()}},e.cache.tile_waterMaskData=t}return t}function Amt(e,t){let n=t.terrainData.waterMask,i=pmt(e),o,r=n.length;if(r===1)if(n[0]!==0)o=i.allWaterTexture;else return;else{let s=Math.sqrt(r);o=Wt.create({context:e,pixelFormat:tt.LUMINANCE,pixelDatatype:Ye.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)}Ar.prototype._findAncestorTileWithTerrainData=function(e){let t=e.parent;for(;l(t)&&(!l(t.data)||!l(t.data.terrainData)||t.data.terrainData.wasCreatedByUpsampling());)t=t.parent;return t};Ar.prototype._computeWaterMaskTranslationAndScale=function(e,t,n){let i=t.rectangle,o=e.rectangle,r=o.width,s=o.height,a=r/i.width,c=s/i.height;return n.x=a*(o.west-i.west)/r,n.y=c*(o.south-i.south)/s,n.z=a,n.w=c,n};var Pm=Ar;var HXi=y(C(),1);var _Xi=y(C(),1),gmt={WEST:0,NORTH:1,EAST:2,SOUTH:3,NORTHWEST:4,NORTHEAST:5,SOUTHWEST:6,SOUTHEAST:7},Rn=gmt;var TXi=y(C(),1),LCe={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>=LCe.RENDERED_AND_KICKED},originalResult:function(e){return e&3},kick:function(e){return e|4}},li=LCe;function iL(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}iL.prototype.update=function(e,t,n){this.changedThisFrame&&(XCe(e,t,this.tile,n),this.changedThisFrame=!1)};iL.prototype.destroy=function(e){this._destroyVertexArray(e),l(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0)};iL.prototype._destroyVertexArray=function(e){l(this.vertexArray)&&(l(e)?e.push(this.vertexArray):Pm._freeVertexArray(this.vertexArray),this.vertexArray=void 0)};var bmt=new Jb;iL.updateFillTiles=function(e,t,n,i){let o=e._quadtree,r=o._levelZeroTiles,s=o._lastSelectionFrameNumber,a=bmt;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),h=c.findTileToEast(r),p=c.findTileToNorth(r);ia(e,n,c,d,s,Rn.EAST,!1,a,i),ia(e,n,c,u,s,Rn.NORTH,!1,a,i),ia(e,n,c,h,s,Rn.WEST,!1,a,i),ia(e,n,c,p,s,Rn.SOUTH,!1,a,i);let g=d.findTileToNorth(r),f=d.findTileToSouth(r),b=h.findTileToNorth(r),x=h.findTileToSouth(r);ia(e,n,c,g,s,Rn.SOUTHEAST,!1,a,i),ia(e,n,c,b,s,Rn.SOUTHWEST,!1,a,i),ia(e,n,c,f,s,Rn.NORTHEAST,!1,a,i),ia(e,n,c,x,s,Rn.NORTHWEST,!1,a,i),c=a.dequeue()}};function ia(e,t,n,i,o,r,s,a,c){if(i===void 0)return;let d=i;for(;d&&(d._lastSelectionResultFrame!==o||li.wasKicked(d._lastSelectionResult)||li.originalResult(d._lastSelectionResult)===li.CULLED);){if(s)return;let u=d.parent;if(r>=Rn.NORTHWEST&&u!==void 0)switch(r){case Rn.NORTHWEST:d=d===u.northwestChild?u:void 0;break;case Rn.NORTHEAST:d=d===u.northeastChild?u:void 0;break;case Rn.SOUTHWEST:d=d===u.southwestChild?u:void 0;break;case Rn.SOUTHEAST:d=d===u.southeastChild?u:void 0;break}else d=u}if(d!==void 0){if(d._lastSelectionResult===li.RENDERED){if(l(d.data.vertexArray))return;ymt(e,t,n,d,r,o,a,c);return}if(li.originalResult(i._lastSelectionResult)!==li.CULLED)switch(r){case Rn.WEST:ia(e,t,n,i.northwestChild,o,r,!0,a,c),ia(e,t,n,i.southwestChild,o,r,!0,a,c);break;case Rn.EAST:ia(e,t,n,i.southeastChild,o,r,!0,a,c),ia(e,t,n,i.northeastChild,o,r,!0,a,c);break;case Rn.SOUTH:ia(e,t,n,i.southwestChild,o,r,!0,a,c),ia(e,t,n,i.southeastChild,o,r,!0,a,c);break;case Rn.NORTH:ia(e,t,n,i.northeastChild,o,r,!0,a,c),ia(e,t,n,i.northwestChild,o,r,!0,a,c);break;case Rn.NORTHWEST:ia(e,t,n,i.northwestChild,o,r,!0,a,c);break;case Rn.NORTHEAST:ia(e,t,n,i.northeastChild,o,r,!0,a,c);break;case Rn.SOUTHWEST:ia(e,t,n,i.southwestChild,o,r,!0,a,c);break;case Rn.SOUTHEAST:ia(e,t,n,i.southeastChild,o,r,!0,a,c);break;default:throw new Ae("Invalid edge")}}}function ymt(e,t,n,i,o,r,s,a){let c=i.data;if(c.fill===void 0)c.fill=new iL(i);else if(c.fill.visitedFrame===r)return;c.fill.enqueuedFrame!==r&&(c.fill.enqueuedFrame=r,c.fill.changedThisFrame=!1,s.enqueue(i)),Cmt(e,t,n,i,o,a)}function Cmt(e,t,n,i,o,r){let s=i.data.fill,a,c=n.data.fill;l(c)?(c.visitedFrame=t.frameNumber,c.changedThisFrame&&(XCe(e,t,n,r),c.changedThisFrame=!1),a=n.data.fill.mesh):a=n.data.mesh;let d,u;switch(o){case Rn.WEST:d=s.westMeshes,u=s.westTiles;break;case Rn.SOUTH:d=s.southMeshes,u=s.southTiles;break;case Rn.EAST:d=s.eastMeshes,u=s.eastTiles;break;case Rn.NORTH:d=s.northMeshes,u=s.northTiles;break;case Rn.NORTHWEST:s.changedThisFrame=s.changedThisFrame||s.northwestMesh!==a,s.northwestMesh=a,s.northwestTile=n;return;case Rn.NORTHEAST:s.changedThisFrame=s.changedThisFrame||s.northeastMesh!==a,s.northeastMesh=a,s.northeastTile=n;return;case Rn.SOUTHWEST:s.changedThisFrame=s.changedThisFrame||s.southwestMesh!==a,s.southwestMesh=a,s.southwestTile=n;return;case Rn.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 h,p,g,f,b=n.rectangle,x,I=i.rectangle;switch(o){case Rn.WEST:for(x=(I.north-I.south)*Z.EPSILON5,h=0;h<u.length&&(g=u[h],f=g.rectangle,!Z.greaterThan(b.north,f.south,x));++h);for(p=h;p<u.length&&(g=u[p],f=g.rectangle,!Z.greaterThanOrEquals(b.south,f.north,x));++p);break;case Rn.SOUTH:for(x=(I.east-I.west)*Z.EPSILON5,h=0;h<u.length&&(g=u[h],f=g.rectangle,!Z.lessThan(b.west,f.east,x));++h);for(p=h;p<u.length&&(g=u[p],f=g.rectangle,!Z.lessThanOrEquals(b.east,f.west,x));++p);break;case Rn.EAST:for(x=(I.north-I.south)*Z.EPSILON5,h=0;h<u.length&&(g=u[h],f=g.rectangle,!Z.lessThan(b.south,f.north,x));++h);for(p=h;p<u.length&&(g=u[p],f=g.rectangle,!Z.lessThanOrEquals(b.north,f.south,x));++p);break;case Rn.NORTH:for(x=(I.east-I.west)*Z.EPSILON5,h=0;h<u.length&&(g=u[h],f=g.rectangle,!Z.greaterThan(b.east,f.west,x));++h);for(p=h;p<u.length&&(g=u[p],f=g.rectangle,!Z.greaterThanOrEquals(b.west,f.east,x));++p);break}p-h===1?(s.changedThisFrame=s.changedThisFrame||d[h]!==a,d[h]=a,u[h]=n):(s.changedThisFrame=!0,d.splice(h,p-h,a),u.splice(h,p-h,n))}var SI=new ge,xmt=new ge,nL=new m,C7=new m,g7=new D,b7=new D,Iu=new D;function Rk(){this.height=0,this.encodedNormal=new D}function Ik(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 h=e.tile.data.tileBoundingRegion,p=0,g=0;l(h)&&(p=h.minimumHeight,g=h.maximumHeight),d=(p+g)*.5}return WCe(e,t,n,i,d,c),c}var Imt={minimumHeight:0,maximumHeight:0},_mt=new m,RCe=new Rk,VCe=new Rk,GCe=new Rk,ZCe=new Rk,Emt=typeof Uint8Array<"u"?new Uint8Array(81):void 0,Tmt={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0};function XCe(e,t,n,i){Pm.initialize(n,e.terrainProvider,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,h=Ek(r,u,0,1,r.northwestTile,r.northwestMesh,r.northTiles,r.northMeshes,r.westTiles,r.westMeshes,GCe),p=Ek(r,u,0,0,r.southwestTile,r.southwestMesh,r.westTiles,r.westMeshes,r.southTiles,r.southMeshes,RCe),g=Ek(r,u,1,0,r.southeastTile,r.southeastMesh,r.southTiles,r.southMeshes,r.eastTiles,r.eastMeshes,VCe),f=Ek(r,u,1,1,r.northeastTile,r.northeastMesh,r.eastTiles,r.eastMeshes,r.northTiles,r.northMeshes,ZCe);h=Ik(r,u,0,1,h,p,f,g,GCe),p=Ik(r,u,0,0,p,h,g,f,RCe),g=Ik(r,u,1,1,g,p,f,h,VCe),f=Ik(r,u,1,1,f,g,h,p,ZCe);let b=p.height,x=g.height,I=h.height,_=f.height,E=Math.min(b,x,I,_),S=Math.max(b,x,I,_),R=(E+S)*.5,G,B,w=e.getLevelMaximumGeometricError(n.level),F=u.maximumRadius-w,P=Math.acos(F/u.maximumRadius)*4;if(P*=1.5,s.width>P&&S-E<=w){let L=new yc({width:9,height:9,buffer:Emt,structure:{heightOffset:S}}),V=Tmt;V.tilingScheme=n.tilingScheme,V.x=n.x,V.y=n.y,V.level=n.level,V.exaggeration=a,V.exaggerationRelativeHeight=c,r.mesh=L._createMeshSync(V)}else{let L=d,V=le.center(s,xmt);V.height=R;let W=u.cartographicToCartesian(V,_mt),M=new Kc(W,void 0,void 0,void 0,void 0,!0,!0,L,a,c),Q=5,N;for(N=r.westMeshes,G=0,B=N.length;G<B;++G)Q+=N[G].eastIndicesNorthToSouth.length;for(N=r.southMeshes,G=0,B=N.length;G<B;++G)Q+=N[G].northIndicesWestToEast.length;for(N=r.eastMeshes,G=0,B=N.length;G<B;++G)Q+=N[G].westIndicesSouthToNorth.length;for(N=r.northMeshes,G=0,B=N.length;G<B;++G)Q+=N[G].southIndicesEastToWest.length;let k=Imt;k.minimumHeight=E,k.maximumHeight=S;let v=M.stride,O=new Float32Array(Q*v),H=0,ee=H;H=_k(u,s,M,O,H,0,1,h.height,h.encodedNormal,1,k),H=Sk(r,u,M,O,H,r.westTiles,r.westMeshes,Rn.EAST,k);let K=H;H=_k(u,s,M,O,H,0,0,p.height,p.encodedNormal,0,k),H=Sk(r,u,M,O,H,r.southTiles,r.southMeshes,Rn.NORTH,k);let te=H;H=_k(u,s,M,O,H,1,0,g.height,g.encodedNormal,0,k),H=Sk(r,u,M,O,H,r.eastTiles,r.eastMeshes,Rn.WEST,k);let q=H;H=_k(u,s,M,O,H,1,1,f.height,f.encodedNormal,1,k),H=Sk(r,u,M,O,H,r.northTiles,r.northMeshes,Rn.SOUTH,k),E=k.minimumHeight,S=k.maximumHeight;let pe=vn.fromRectangle(s,E,S,n.tilingScheme.ellipsoid),ye=Ui.geodeticLatitudeToMercatorAngle(s.south),he=1/(Ui.geodeticLatitudeToMercatorAngle(s.north)-ye),xe=(Ui.geodeticLatitudeToMercatorAngle(V.latitude)-ye)*he,Te=u.geodeticSurfaceNormalCartographic(SI,C7),Be=Mn.octEncode(Te,g7),Le=H;M.encode(O,H*v,pe.center,D.fromElements(.5,.5,Iu),R,Be,xe,Te),++H;let De=H,Ue=De<256?1:2,je=(De-1)*3,it=je*Ue,nn=(O.length-De*v)*Float32Array.BYTES_PER_ELEMENT,rt;if(nn>=it){let vt=De*v*Float32Array.BYTES_PER_ELEMENT;rt=De<256?new Uint8Array(O.buffer,vt,je):new Uint16Array(O.buffer,vt,je)}else rt=De<256?new Uint8Array(je):new Uint16Array(je);O=new Float32Array(O.buffer,0,De*v);let rn=0;for(G=0;G<De-2;++G)rt[rn++]=Le,rt[rn++]=G,rt[rn++]=G+1;rt[rn++]=Le,rt[rn++]=G,rt[rn++]=0;let Jt=[];for(G=K;G>=ee;--G)Jt.push(G);let Xt=[];for(G=te;G>=K;--G)Xt.push(G);let Li=[];for(G=q;G>=te;--G)Li.push(G);let bi=[];for(bi.push(0),G=Le-1;G>=q;--G)bi.push(G);r.mesh=new Fm(M.center,O,rt,je,De,E,S,ue.fromOrientedBoundingBox(pe),Bmt(e,pe.center,s,E,S),M.stride,pe,M,Jt,Xt,Li,bi)}let A=t.context;r._destroyVertexArray(i),r.vertexArray=Pm._createVertexArrayForMesh(A,r.mesh),o.processImagery(n,e.terrainProvider,t,!0);let T=r.waterMaskTexture;if(r.waterMaskTexture=void 0,e.terrainProvider.hasWaterMask){let L=o._findAncestorTileWithTerrainData(n);l(L)&&l(L.data.waterMaskTexture)&&(r.waterMaskTexture=L.data.waterMaskTexture,++r.waterMaskTexture.referenceCount,o._computeWaterMaskTranslationAndScale(n,L,r.waterMaskTranslationAndScale))}l(T)&&(--T.referenceCount,T.referenceCount===0&&T.destroy())}function _k(e,t,n,i,o,r,s,a,c,d,u){let h=SI;h.longitude=Z.lerp(t.west,t.east,r),h.latitude=Z.lerp(t.south,t.north,s),h.height=a;let p=e.cartographicToCartesian(h,nL),g;n.hasGeodeticSurfaceNormals&&(g=e.geodeticSurfaceNormal(p,C7));let f=b7;return f.x=r,f.y=s,n.encode(i,o*n.stride,p,f,a,c,d,g),u.minimumHeight=Math.min(u.minimumHeight,a),u.maximumHeight=Math.max(u.maximumHeight,a),o+1}var Lk=new le;function ZP(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=le.clone(e.rectangle,Lk),o.west-=Z.TWO_PI,o.east-=Z.TWO_PI):e.x===0&&n.x===0&&t.x===t.tilingScheme.getNumberOfXTilesAtLevel(t.level)-1&&(o=le.clone(e.rectangle,Lk),o.west+=Z.TWO_PI,o.east+=Z.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,h=(r.north-o.south)/d,p=(n.x-a)/(c-a),g=(n.y-u)/(h-u);return Math.abs(p)<Math.EPSILON5?p=0:Math.abs(p-1)<Math.EPSILON5&&(p=1),Math.abs(g)<Math.EPSILON5?g=0:Math.abs(g-1)<Math.EPSILON5&&(g=1),i.x=p,i.y=g,i}var Smt=new D;function y7(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 Lmt=new D,Rmt=new m;function Vmt(e,t,n,i,o,r,s,a,c,d){let u=i.encoding,h=i.vertices,p=ZP(t,n,u.decodeTextureCoordinates(h,o,Iu),Iu),g=ZP(t,n,u.decodeTextureCoordinates(h,r,b7),b7),f;c?f=(s-p.x)/(g.x-p.x):f=(a-p.y)/(g.y-p.y);let b=u.decodeHeight(h,o),x=u.decodeHeight(h,r),I=n.rectangle;SI.longitude=Z.lerp(I.west,I.east,s),SI.latitude=Z.lerp(I.south,I.north,a),d.height=SI.height=Z.lerp(b,x,f);let _;if(u.hasVertexNormals){let E=u.getOctEncodedNormal(h,o,Smt),S=u.getOctEncodedNormal(h,r,Lmt),R=Mn.octDecode(E.x,E.y,nL),G=Mn.octDecode(S.x,S.y,Rmt);_=m.lerp(R,G,f,nL),m.normalize(_,_),Mn.octEncode(_,d.encodedNormal)}else _=e.geodeticSurfaceNormalCartographic(SI,nL),Mn.octEncode(_,d.encodedNormal)}function WCe(e,t,n,i,o,r){r.height=o;let s=t.geodeticSurfaceNormalCartographic(SI,nL);Mn.octEncode(s,r.encodedNormal)}function Ek(e,t,n,i,o,r,s,a,c,d,u){if(wCe(e,t,a,s,!1,n,i,u)||wCe(e,t,d,c,!0,n,i,u))return u;let p;if(x7(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],y7(r,p,n,i,u),u;let g;if(n===0?i===0?g=Tk(e.westMeshes,e.westTiles,Rn.EAST,e.southMeshes,e.southTiles,Rn.NORTH,n,i):g=Tk(e.northMeshes,e.northTiles,Rn.SOUTH,e.westMeshes,e.westTiles,Rn.EAST,n,i):i===0?g=Tk(e.southMeshes,e.southTiles,Rn.NORTH,e.eastMeshes,e.eastTiles,Rn.WEST,n,i):g=Tk(e.eastMeshes,e.eastTiles,Rn.WEST,e.northMeshes,e.northTiles,Rn.SOUTH,n,i),l(g))return WCe(e,t,n,i,g,u),u}function Tk(e,t,n,i,o,r,s,a){let c=BCe(e,t,!1,n,s,a),d=BCe(i,o,!0,r,s,a);return l(c)&&l(d)?(c+d)*.5:l(c)?c:d}function Sk(e,t,n,i,o,r,s,a,c){for(let d=0;d<r.length;++d)o=Gmt(e,t,n,i,o,r[d],s[d],a,c);return o}function Gmt(e,t,n,i,o,r,s,a,c){let d=r.rectangle;a===Rn.EAST&&e.tile.x===0?(d=le.clone(r.rectangle,Lk),d.west-=Z.TWO_PI,d.east-=Z.TWO_PI):a===Rn.WEST&&r.x===0&&(d=le.clone(r.rectangle,Lk),d.west+=Z.TWO_PI,d.east+=Z.TWO_PI);let u=e.tile.rectangle,h,p;o>0&&(n.decodeTextureCoordinates(i,o-1,Iu),h=Iu.x,p=Iu.y);let g,f;switch(a){case Rn.WEST:g=s.westIndicesSouthToNorth,f=!1;break;case Rn.NORTH:g=s.northIndicesWestToEast,f=!0;break;case Rn.EAST:g=s.eastIndicesNorthToSouth,f=!1;break;case Rn.SOUTH:g=s.southIndicesEastToWest,f=!0;break}let b=r,x=e.tile,I=s.encoding,_=s.vertices,E=n.stride,S,R;I.hasWebMercatorT&&(S=Ui.geodeticLatitudeToMercatorAngle(u.south),R=1/(Ui.geodeticLatitudeToMercatorAngle(u.north)-S));for(let G=0;G<g.length;++G){let B=g[G],w=I.decodeTextureCoordinates(_,B,Iu);ZP(b,x,w,w);let F=w.x,P=w.y,A=f?F:P;if(A<0||A>1||Math.abs(F-h)<Z.EPSILON5&&Math.abs(P-p)<Z.EPSILON5)continue;let T=Math.abs(F)<Z.EPSILON5||Math.abs(F-1)<Z.EPSILON5,L=Math.abs(P)<Z.EPSILON5||Math.abs(P-1)<Z.EPSILON5;if(T&&L)continue;let V=I.decodePosition(_,B,nL),W=I.decodeHeight(_,B),M;I.hasVertexNormals?M=I.getOctEncodedNormal(_,B,g7):(M=g7,M.x=0,M.y=0);let Q=P;if(I.hasWebMercatorT){let k=Z.lerp(u.south,u.north,P);Q=(Ui.geodeticLatitudeToMercatorAngle(k)-S)*R}let N;n.hasGeodeticSurfaceNormals&&(N=t.geodeticSurfaceNormal(V,C7)),n.encode(i,o*E,V,w,W,M,Q,N),c.minimumHeight=Math.min(c.minimumHeight,W),c.maximumHeight=Math.max(c.maximumHeight,W),++o}return o}function BCe(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],h=t[d];if(!x7(h,u))continue;let p;switch(i){case Rn.WEST:p=u.westIndicesSouthToNorth;break;case Rn.SOUTH:p=u.southIndicesEastToWest;break;case Rn.EAST:p=u.eastIndicesNorthToSouth;break;case Rn.NORTH:p=u.northIndicesWestToEast;break}let g=p[n?0:p.length-1];if(l(g))return u.encoding.decodeHeight(u.vertices,g)}}function x7(e,t){return l(t)&&(!l(e.data.fill)||!e.data.fill.changedThisFrame)}function wCe(e,t,n,i,o,r,s,a){let c,d,u,h,p,g=i[o?0:n.length-1],f=n[o?0:n.length-1];if(x7(g,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)){h=o?0:c.length-1,p=c[h],f.encoding.decodeTextureCoordinates(f.vertices,p,Iu);let b=ZP(g,e.tile,Iu,Iu);if(b.x===r&&b.y===s)return y7(f,p,r,s,a),!0;if(h=Yo(c,d?r:s,function(x,I){f.encoding.decodeTextureCoordinates(f.vertices,x,Iu);let _=ZP(g,e.tile,Iu,Iu);return u?d?_.x-r:_.y-s:d?r-_.x:s-_.y}),h<0){if(h=~h,h>0&&h<c.length)return Vmt(t,g,e.tile,f,c[h-1],c[h],r,s,d,a),!0}else return y7(f,c[h],r,s,a),!0}return!1}var Zmt=[new m,new m,new m,new m];function Bmt(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=Zmt;return m.fromRadians(n.west,n.south,o,a,c[0]),m.fromRadians(n.east,n.south,o,a,c[1]),m.fromRadians(n.west,n.north,o,a,c[2]),m.fromRadians(n.east,n.north,o,a,c[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,r)}var oL=iL;function gr(e){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=Gn.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=e.terrainProvider,this._imageryLayers=e.imageryLayers,this._surfaceShaderSet=e.surfaceShaderSet,this._renderState=void 0,this._blendRenderState=void 0,this._disableCullingRenderState=void 0,this._disableCullingBlendRenderState=void 0,this._errorEvent=new Ce,this._removeLayerAddedListener=this._imageryLayers.layerAdded.addEventListener(gr.prototype._onLayerAdded,this),this._removeLayerRemovedListener=this._imageryLayers.layerRemoved.addEventListener(gr.prototype._onLayerRemoved,this),this._removeLayerMovedListener=this._imageryLayers.layerMoved.addEventListener(gr.prototype._onLayerMoved,this),this._removeLayerShownListener=this._imageryLayers.layerShownOrHidden.addEventListener(gr.prototype._onLayerShownOrHidden,this),this._imageryLayersUpdatedEvent=new Ce,this._layerOrderChanged=!1,this._tilesToRenderByTextureCount=[],this._drawCommands=[],this._uniformMaps=[],this._usedDrawCommands=0,this._vertexArraysToDestroy=[],this._debug={wireframe:!1,boundingSphereTile:void 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=le.clone(le.MAX_VALUE),this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1,this._oldVerticalExaggeration=void 0,this._oldVerticalExaggerationRelativeHeight=void 0}Object.defineProperties(gr.prototype,{baseColor:{get:function(){return this._baseColor},set:function(e){this._baseColor=e,this._firstPassInitialColor=ce.fromColor(e,this._firstPassInitialColor)}},quadtree:{get:function(){return this._quadtree},set:function(e){this._quadtree=e}},tilingScheme:{get:function(){if(l(this._terrainProvider))return this._terrainProvider.tilingScheme}},errorEvent:{get:function(){return this._errorEvent}},imageryLayersUpdatedEvent:{get:function(){return this._imageryLayersUpdatedEvent}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){this._terrainProvider!==e&&(this._terrainProvider=e,l(this._quadtree)&&this._quadtree.invalidateAllTiles())}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){Ws.setOwner(e,this,"_clippingPlanes")}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){Ih.setOwner(e,this,"_clippingPolygons")}}});function wmt(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}gr.prototype.update=function(e){this._imageryLayers._update()};function Xmt(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)}}gr.prototype.initialize=function(e){this._imageryLayers.queueReprojectionCommands(e),this._layerOrderChanged&&(this._layerOrderChanged=!1,this._quadtree.forEachLoadedTile(function(i){i.data.imagery.sort(wmt)})),Xmt(this,e);let t=this._vertexArraysToDestroy,n=t.length;for(let i=0;i<n;++i)Pm._freeVertexArray(t[i]);t.length=0};gr.prototype.beginUpdate=function(e){let t=this._tilesToRenderByTextureCount;for(let o=0,r=t.length;o<r;++o){let s=t[o];l(s)&&(s.length=0)}let n=this._clippingPlanes;l(n)&&n.enabled&&n.update(e);let i=this._clippingPolygons;l(i)&&i.enabled&&(i.update(e),i.queueCommands(e)),this._usedDrawCommands=0,this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1};gr.prototype.endUpdate=function(e){if(!l(this._renderState)){this._renderState=Qe.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:Fa.LESS}}),this._blendRenderState=Qe.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:Fa.LESS_OR_EQUAL},blending:bn.ALPHA_BLEND});let s=ke(this._renderState,!0);s.cull.enabled=!1,this._disableCullingRenderState=Qe.fromCache(s),s=ke(this._blendRenderState,!0),s.cull.enabled=!1,this._disableCullingBlendRenderState=Qe.fromCache(s)}this._hasFillTilesThisFrame&&this._hasLoadedTilesThisFrame&&oL.updateFillTiles(this,this._quadtree._tilesToRender,e,this._vertexArraysToDestroy);let t=this.quadtree,n=e.verticalExaggeration,i=e.verticalExaggerationRelativeHeight,o=this._oldVerticalExaggeration!==n||this._oldVerticalExaggerationRelativeHeight!==i;this._oldVerticalExaggeration=n,this._oldVerticalExaggerationRelativeHeight=i,o&&t.forEachLoadedTile(function(s){s.data.updateExaggeration(s,e,t)});let r=this._tilesToRenderByTextureCount;for(let s=0,a=r.length;s<a;++s){let c=r[s];if(l(c))for(let d=0,u=c.length;d<u;++d){let h=c[d],p=h.data.tileBoundingRegion;oht(this,h,e),e.minimumTerrainHeight=Math.min(e.minimumTerrainHeight,p.minimumHeight)}}};function NCe(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)}gr.prototype.updateForPick=function(e){let t=this._drawCommands;for(let n=0,i=this._usedDrawCommands;n<i;++n)NCe(t[n],e)};gr.prototype.cancelReprojections=function(){this._imageryLayers.cancelReprojections()};gr.prototype.getLevelMaximumGeometricError=function(e){return l(this._terrainProvider)?this._terrainProvider.getLevelMaximumGeometricError(e):0};gr.prototype.loadTile=function(e,t){let n=t.data,i=!0,o;l(n)&&(i=n.boundingVolumeSourceTile!==t||t._lastSelectionResult===li.CULLED_BUT_NEEDED,o=n.terrainState),Pm.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,i),n=t.data,i&&o!==t.data.terrainState&&this.computeTileVisibility(t,e,this.quadtree.occluders)!==Zr.NONE&&n.boundingVolumeSourceTile===t&&(i=!1,Pm.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,i))};var Wmt=new ue,DCe=new le,Fmt=new le,Pmt=new ge;function Gk(e,t){if(t.west<t.east)return t;let n=le.clone(t,Fmt);return le.center(e,Pmt).longitude>0?n.east=Z.PI:n.west=-Z.PI,n}function QCe(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||!le.equals(e.cartographicLimitRectangle,le.MAX_VALUE))}gr.prototype.computeTileVisibility=function(e,t,n){let i=this.computeDistanceToTile(e,t);e._distance=i;let o=QCe(this,t);if(t.fog.enabled&&!o&&Z.fog(i,t.fog.density)>=1)return Zr.NONE;let r=e.data,s=r.tileBoundingRegion;if(r.boundingVolumeSourceTile===void 0)return Zr.PARTIAL;let a=t.cullingVolume,c=s.boundingVolume;l(c)||(c=s.boundingSphere),r.clippedByBoundaries=!1;let d=Gk(e.rectangle,this.cartographicLimitRectangle),u=le.simpleIntersection(d,e.rectangle,DCe);if(!l(u))return Zr.NONE;if(le.equals(u,e.rectangle)||(r.clippedByBoundaries=!0),t.mode!==re.SCENE3D&&(c=Wmt,ue.fromRectangleWithHeights2D(e.rectangle,t.mapProjection,s.minimumHeight,s.maximumHeight,c),m.fromElements(c.center.z,c.center.x,c.center.y,c.center),t.mode===re.MORPHING&&l(r.renderedMesh)&&(c=ue.union(s.boundingSphere,c,c))),!l(c))return Zr.PARTIAL;let h=this._clippingPlanes;if(l(h)&&h.enabled){let x=h.computeIntersectionWithBoundingVolume(c);if(e.isClipped=x!==on.INSIDE,x===on.OUTSIDE)return Zr.NONE}let p=this._clippingPolygons;if(l(p)&&p.enabled){let x=p.computeIntersectionWithBoundingVolume(s);e.isClipped=x!==on.OUTSIDE}let g,f=a.computeVisibility(c);if(f===on.OUTSIDE?g=Zr.NONE:f===on.INTERSECTING?g=Zr.PARTIAL:f===on.INSIDE&&(g=Zr.FULL),g===Zr.NONE)return g;let b=t.mode===re.SCENE3D&&t.camera.frustum instanceof gn;if(t.mode===re.SCENE3D&&!b&&l(n)&&!o){let x=r.occludeePointInScaledSpace;return!l(x)||n.ellipsoid.isScaledSpacePointVisiblePossiblyUnderEllipsoid(x,s.minimumHeight)?g:Zr.NONE}return g};gr.prototype.canRefine=function(e){return l(e.data.terrainData)?!0:this.terrainProvider.getTileDataAvailable(e.x*2,e.y*2,e.level+1)!==void 0};var Mmt=[],vmt=[];gr.prototype.canRenderWithoutLosingDetail=function(e,t){let n=e.data,i=Mmt;i.length=this._imageryLayers.length;let o=!1,r=!1,s;l(n)&&(o=n.terrainState===So.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 h=s[a],p=h.loadingImagery,g=!l(p)||p.state===Jn.FAILED||p.state===Jn.INVALID,f=(h.loadingImagery||h.readyImagery).imageryLayer._layerIndex;i[f]=g&&i[f]}let d=this.quadtree._lastSelectionFrameNumber,u=vmt;for(u.length=0,u.push(e.southwestChild,e.southeastChild,e.northwestChild,e.northeastChild);u.length>0;){let h=u.pop(),p=h._lastSelectionResultFrame===d?h._lastSelectionResult:li.NONE;if(p===li.RENDERED){let g=h.data;if(!l(g))continue;if(!o&&h.data.terrainState===So.READY)return!1;let f=h.data.imagery;for(a=0,c=f.length;a<c;++a){let b=f[a],x=b.loadingImagery,I=!l(x)||x.state===Jn.FAILED||x.state===Jn.INVALID,_=(b.loadingImagery||b.readyImagery).imageryLayer._layerIndex;if(I&&!i[_])return!1}}else p===li.REFINED&&u.push(h.southwestChild,h.southeastChild,h.northwestChild,h.northeastChild)}return!0};var Nmt=new m;gr.prototype.computeTileLoadPriority=function(e,t){let n=e.data;if(n===void 0)return 0;let i=n.tileBoundingRegion.boundingVolume;if(i===void 0)return 0;let o=t.camera.positionWC,r=t.camera.directionWC,s=m.subtract(i.center,o,Nmt),a=m.magnitude(s);return a<Z.EPSILON5?0:(m.divideByScalar(s,a,s),(1-m.dot(s,r))*e._distance)};var FCe=new X,Vk=new X,Dmt=new ce,Qmt=new ce,Umt=new ce,kmt=new m,PCe=new m,Ymt=new m,Omt=new m;gr.prototype.showTileThisFrame=function(e,t){let n=0,i=e.data.imagery;for(let a=0,c=i.length;a<c;++a){let d=i[a];l(d.readyImagery)&&d.readyImagery.imageryLayer.alpha!==0&&++n}let o=this._tilesToRenderByTextureCount[n];l(o)||(o=[],this._tilesToRenderByTextureCount[n]=o),o.push(e);let r=e.data;l(r.vertexArray)?this._hasLoadedTilesThisFrame=!0:this._hasFillTilesThisFrame=!0;let s=this._debug;++s.tilesRendered,s.texturesRendered+=n};var Hmt=[new m,new m,new m,new m];function MCe(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=Hmt;return m.fromRadians(n.west,n.south,o,a,c[0]),m.fromRadians(n.east,n.south,o,a,c[1]),m.fromRadians(n.west,n.north,o,a,c[2]),m.fromRadians(n.east,n.north,o,a,c[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,r)}gr.prototype.computeDistanceToTile=function(e,t){zmt(e,this,t);let n=e.data;if(n.boundingVolumeSourceTile===void 0)return 9999999999;let o=n.tileBoundingRegion,r=o.minimumHeight,s=o.maximumHeight;if(n.boundingVolumeSourceTile!==e){let c=t.camera.positionCartographic.height,d=Math.abs(c-r),u=Math.abs(c-s);d>u?(o.minimumHeight=r,o.maximumHeight=r):(o.minimumHeight=s,o.maximumHeight=s)}let a=o.distanceToCamera(t);return o.minimumHeight=r,o.maximumHeight=s,a};function zmt(e,t,n){let i=e.data;i===void 0&&(i=e.data=new Pm);let o=e.tilingScheme.ellipsoid;i.tileBoundingRegion===void 0&&(i.tileBoundingRegion=new tu({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,h=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(h!==void 0&&h._minimumHeight!==void 0&&h._maximumHeight!==void 0)r.minimumHeight=h._minimumHeight,r.maximumHeight=h._maximumHeight;else{r.minimumHeight=Number.NaN,r.maximumHeight=Number.NaN;let p=e.parent;for(;p!==void 0;){let g=p.data;if(g!==void 0){let f=g.mesh,b=g.terrainData;if(f!==void 0&&f.minimumHeight!==void 0&&f.maximumHeight!==void 0){r.minimumHeight=f.minimumHeight,r.maximumHeight=f.maximumHeight;break}else if(b!==void 0&&b._minimumHeight!==void 0&&b._maximumHeight!==void 0){r.minimumHeight=b._minimumHeight,r.maximumHeight=b._maximumHeight;break}}p=p.parent}d=p}if(d!==void 0){let p=n.verticalExaggeration,g=n.verticalExaggerationRelativeHeight;if(p!==1&&(c=!1,r.minimumHeight=Mr.getHeight(r.minimumHeight,p,g),r.maximumHeight=Mr.getHeight(r.maximumHeight,p,g)),c)i.boundingVolumeIsFromMesh||(r._orientedBoundingBox=vn.clone(u.orientedBoundingBox,r._orientedBoundingBox),r._boundingSphere=ue.clone(u.boundingSphere3D,r._boundingSphere),i.occludeePointInScaledSpace=m.clone(u.occludeePointInScaledSpace,i.occludeePointInScaledSpace),l(i.occludeePointInScaledSpace)||(i.occludeePointInScaledSpace=MCe(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace)));else{let b=r._orientedBoundingBox===void 0||r._boundingSphere===void 0;(r.minimumHeight!==s||r.maximumHeight!==a||b)&&(r.computeBoundingVolumes(o),i.occludeePointInScaledSpace=MCe(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}gr.prototype.isDestroyed=function(){return!1};gr.prototype.destroy=function(){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)};function Kmt(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}}gr.prototype._onLayerAdded=function(e,t){if(!this.isDestroyed()&&e.show){let n=this._terrainProvider,i=this,o=this._imageryLayersUpdatedEvent,r=function(){e._imageryCache={},i._quadtree.forEachLoadedTile(function(s){if(l(s._loadedCallbacks[e._layerIndex]))return;let a,c=s.data.imagery,d=c.length,u=-1,h=0;for(a=0;a<d;++a){let g=c[a];if((g.readyImagery??g.loadingImagery).imageryLayer===e)u===-1&&(u=a),++h;else if(u!==-1)break}if(u===-1)return;let p=u+h;e._createTileImagerySkeletons(s,n,p)&&(s._loadedCallbacks[e._layerIndex]=Kmt(h,e,n),s.state=_a.LOADING)})};if(e.ready){let s=e.imageryProvider;s._reload=r}this._quadtree.forEachLoadedTile(function(s){e._createTileImagerySkeletons(s,n)&&(s.state=_a.LOADING,s.level!==0&&(s._lastSelectionResultFrame!==i.quadtree._lastSelectionFrameNumber||s._lastSelectionResult!==li.RENDERED)&&(s.renderable=!1))}),this._layerOrderChanged=!0,o.raiseEvent()}};gr.prototype._onLayerRemoved=function(e,t){this._quadtree.forEachLoadedTile(function(n){let i=n.data.imagery,o=-1,r=0;for(let s=0,a=i.length;s<a;++s){let c=i[s],d=c.loadingImagery;if(l(d)||(d=c.readyImagery),d.imageryLayer===e)o===-1&&(o=s),c.freeResources(),++r;else if(o!==-1)break}o!==-1&&i.splice(o,r)}),l(e.imageryProvider)&&(e.imageryProvider._reload=void 0),this._imageryLayersUpdatedEvent.raiseEvent()};gr.prototype._onLayerMoved=function(e,t,n){this._layerOrderChanged=!0,this._imageryLayersUpdatedEvent.raiseEvent()};gr.prototype._onLayerShownOrHidden=function(e,t,n){n?this._onLayerAdded(e,t):this._onLayerRemoved(e,t)};var Jmt=new X,jmt=new X;function vCe(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=X.multiplyByPoint(i,this.properties.rtc,PCe);return X.setTranslation(i,o,FCe),FCe},u_modifiedModelViewProjection:function(){let i=e.context.uniformState.view,o=e.context.uniformState.projection,r=X.multiplyByPoint(i,this.properties.rtc,PCe);return X.setTranslation(i,r,Vk),X.multiply(o,Vk,Vk),Vk},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)?X.multiply(e.context.uniformState.view,i.modelMatrix,Jmt):X.IDENTITY;return X.inverseTranspose(o,jmt)},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},properties:{initialColor:new ce(0,0,.5,1),fillHighlightColor:new U(0,0,0,0),zoomedOutOceanSpecularIntensity:.5,oceanNormalMap:void 0,lightingFadeDistance:new D(65e5,9e6),nightFadeDistance:new D(1e7,4e7),atmosphereLightIntensity:10,atmosphereRayleighCoefficient:new m(55e-7,13e-6,284e-7),atmosphereMieCoefficient:new m(21e-6,21e-6,21e-6),atmosphereRayleighScaleHeight:1e4,atmosphereMieScaleHeight:3200,atmosphereMieAnisotropy:.9,hsbShift:new m,center3D:void 0,rtc:new m,modifiedModelView:new X,tileRectangle:new ce,verticalExaggerationAndRelativeHeight:new D(1,0),dayTextures:[],dayTextureTranslationAndScale:[],dayTextureTexCoordsRectangle:[],dayTextureUseWebMercatorT:[],dayTextureAlpha:[],dayTextureNightAlpha:[],dayTextureDayAlpha:[],dayTextureBrightness:[],dayTextureContrast:[],dayTextureHue:[],dayTextureSaturation:[],dayTextureOneOverGamma:[],dayTextureSplit:[],dayTextureCutoutRectangles:[],dayIntensity:0,colorsToAlpha:[],southAndNorthLatitude:new D,southMercatorYAndOneOverHeight:new D,waterMask:void 0,waterMaskTranslationAndScale:new ce,minMaxHeight:new D,scaleAndBias:new X,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}};return l(t.materialUniformMap)?Lt(n,t.materialUniformMap):n}function qmt(e,t,n){let i=n.data,o,r;if(l(i.vertexArray)?(o=i.mesh,r=i.vertexArray):l(i.fill)&&l(i.fill.vertexArray)&&(o=i.fill.mesh,r=i.fill.vertexArray),!(!l(o)||!l(r))){if(l(i.wireframeVertexArray)){if(i.wireframeVertexArray.mesh===o)return;i.wireframeVertexArray.destroy(),i.wireframeVertexArray=void 0}i.wireframeVertexArray=$mt(e,r,o),i.wireframeVertexArray.mesh=o}}function $mt(e,t,n){let o={indices:n.indices,primitiveType:We.TRIANGLES};Yn.toWireframe(o);let r=o.indices,s=It.createIndexBuffer({context:e,typedArray:r,usage:Ne.STATIC_DRAW,indexDatatype:Me.fromSizeInBytes(r.BYTES_PER_ELEMENT)});return new ui({context:e,attributes:t._attributes,indexBuffer:s})}var UCe,kCe,Zk;(function(){let e=new wt({geometry:nh.fromDimensions({dimensions:new m(2,2,2)})}),t=new wt({geometry:new cg({radius:1})}),n=new X,i,o;function r(s){return new Nn({geometryInstances:s,appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1})}UCe=function(s,a){return s===i||(Zk(),i=s,n=X.fromRotationTranslation(s.halfAxes,s.center,n),e.modelMatrix=n,e.attributes.color=tn.fromColor(a),o=r(e)),o},kCe=function(s,a){return s===i||(Zk(),i=s,n=X.fromTranslation(s.center,n),n=X.multiplyByUniformScale(n,s.radius,n),t.modelMatrix=n,t.attributes.color=tn.fromColor(a),o=r(t)),o},Zk=function(){l(o)&&(o.destroy(),o=void 0,i=void 0)}})();var eht=new ce(0,0,0,0),tht={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},nht=U.TRANSPARENT,iht=new zt;function oht(e,t,n){let i=t.data;l(i.vertexArray)||(i.fill===void 0&&(i.fill=new oL(t)),i.fill.update(e,n));let o=n.creditDisplay,r=i.terrainData;if(l(r)&&l(r.credits)){let vt=r.credits;for(let Rt=0,si=vt.length;Rt<si;++Rt)o.addCreditToNextFrame(vt[Rt])}let s=Kt.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,h=u.translucent,p=u.frontFaceAlphaByDistance,g=u.backFaceAlphaByDistance,f=u.rectangle,b=e.undergroundColor??nht,x=e.undergroundColorAlphaByDistance??iht,I=QCe(e,n)&&n.mode===re.SCENE3D&&b.alpha>0&&(x.nearValue>0||x.farValue>0),_=e.lambertDiffuseMultiplier,E=e.vertexShadowDarkness,S=e.hasWaterMask&&l(a),R=S&&e.showWaterEffect,G=e.oceanNormalMap,B=R&&l(G),w=e.terrainProvider,F=l(w)&&e.terrainProvider.hasVertexNormals,P=n.fog.enabled&&n.fog.renderable&&!d,A=e.showGroundAtmosphere&&n.mode===re.SCENE3D,T=Gn.castShadows(e.shadows)&&!h,L=Gn.receiveShadows(e.shadows)&&!h,V=e.hueShift,W=e.saturationShift,M=e.brightnessShift,Q=!(Z.equalsEpsilon(V,0,Z.EPSILON7)&&Z.equalsEpsilon(W,0,Z.EPSILON7)&&Z.equalsEpsilon(M,0,Z.EPSILON7)),N=!1;if(A){let vt=m.magnitude(n.camera.positionWC),Rt=e.nightFadeOutDistance;N=vt>Rt}S&&--s,B&&--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 k=i.renderedMesh,v=k.center,O=k.encoding,H=i.tileBoundingRegion,ee=n.verticalExaggeration,K=n.verticalExaggerationRelativeHeight,te=ee!==1,q=O.hasGeodeticSurfaceNormals,pe=Dmt,ye=0,he=0,xe=0,Te=0,Be=!1;if(n.mode!==re.SCENE3D){let vt=n.mapProjection,Rt=vt.project(le.southwest(t.rectangle),Ymt),si=vt.project(le.northeast(t.rectangle),Omt);if(pe.x=Rt.x,pe.y=Rt.y,pe.z=si.x,pe.w=si.y,n.mode!==re.MORPHING&&(v=kmt,v.x=0,v.y=(pe.z+pe.x)*.5,v.z=(pe.w+pe.y)*.5,pe.x-=v.y,pe.y-=v.z,pe.z-=v.y,pe.w-=v.z),n.mode===re.SCENE2D&&O.quantization===Ia.BITS12){let _t=1/(Math.pow(2,12)-1)*.5,Fo=(pe.z-pe.x)*_t,Uo=(pe.w-pe.y)*_t;pe.x-=Fo,pe.y-=Uo,pe.z+=Fo,pe.w+=Uo}vt instanceof Ui&&(ye=t.rectangle.south,he=t.rectangle.north,xe=Ui.geodeticLatitudeToMercatorAngle(ye),Te=1/(Ui.geodeticLatitudeToMercatorAngle(he)-xe),Be=!0)}let Le=tht;Le.frameState=n,Le.surfaceTile=i,Le.hasWaterMask=S,Le.showReflectiveOcean=R,Le.showOceanWaves=B,Le.enableLighting=e.enableLighting,Le.dynamicAtmosphereLighting=e.dynamicAtmosphereLighting,Le.dynamicAtmosphereLightingFromSun=e.dynamicAtmosphereLightingFromSun,Le.showGroundAtmosphere=A,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=N,Le.hasVertexNormals=F,Le.useWebMercatorProjection=Be,Le.clippedByBoundaries=i.clippedByBoundaries,Le.hasGeodeticSurfaceNormals=q,Le.hasExaggeration=te;let De=i.imagery,Ue=0,je=De.length,it=e.showSkirts&&!d&&!h,nn=e.backFaceCulling&&!d&&!h,rt=nn?e._renderState:e._disableCullingRenderState,rn=nn?e._blendRenderState:e._disableCullingBlendRenderState,Jt=rt,Xt=e._firstPassInitialColor,Li=n.context;if(l(e._debug.boundingSphereTile)||Zk(),e._materialUniformMap!==e.materialUniformMap){e._materialUniformMap=e.materialUniformMap;let vt=e._drawCommands.length;for(let Rt=0;Rt<vt;++Rt)e._uniformMaps[Rt]=vCe(n,e)}do{let vt=0,Rt,si;if(e._drawCommands.length<=e._usedDrawCommands?(Rt=new ot,Rt.owner=t,Rt.cull=!1,Rt.boundingVolume=new ue,Rt.orientedBoundingBox=void 0,si=vCe(n,e),e._drawCommands.push(Rt),e._uniformMaps.push(si)):(Rt=e._drawCommands[e._usedDrawCommands],si=e._uniformMaps[e._usedDrawCommands]),Rt.owner=t,++e._usedDrawCommands,t===e._debug.boundingSphereTile){let fs=H.boundingVolume,tc=H.boundingSphere;l(fs)?UCe(fs,U.RED).update(n):l(tc)&&kCe(tc,U.RED).update(n)}let _t=si.properties;ce.clone(Xt,_t.initialColor),_t.oceanNormalMap=G,_t.lightingFadeDistance.x=e.lightingFadeOutDistance,_t.lightingFadeDistance.y=e.lightingFadeInDistance,_t.nightFadeDistance.x=e.nightFadeOutDistance,_t.nightFadeDistance.y=e.nightFadeInDistance,_t.atmosphereLightIntensity=e.atmosphereLightIntensity,_t.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,_t.atmosphereMieCoefficient=e.atmosphereMieCoefficient,_t.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,_t.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,_t.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,_t.zoomedOutOceanSpecularIntensity=e.zoomedOutOceanSpecularIntensity;let Fo=d?g:p,Uo=d?p:g;l(Fo)&&(ce.fromElements(Fo.near,Fo.nearValue,Fo.far,Fo.farValue,_t.frontFaceAlphaByDistance),ce.fromElements(Uo.near,Uo.nearValue,Uo.far,Uo.farValue,_t.backFaceAlphaByDistance)),ce.fromElements(x.near,x.nearValue,x.far,x.farValue,_t.undergroundColorAlphaByDistance),U.clone(b,_t.undergroundColor),_t.lambertDiffuseMultiplier=_,_t.vertexShadowDarkness=E;let Va=!l(i.vertexArray)&&l(e.fillHighlightColor)&&e.fillHighlightColor.alpha>0;Va&&U.clone(e.fillHighlightColor,_t.fillHighlightColor),_t.verticalExaggerationAndRelativeHeight.x=ee,_t.verticalExaggerationAndRelativeHeight.y=K,_t.center3D=k.center,m.clone(v,_t.rtc),ce.clone(pe,_t.tileRectangle),_t.southAndNorthLatitude.x=ye,_t.southAndNorthLatitude.y=he,_t.southMercatorYAndOneOverHeight.x=xe,_t.southMercatorYAndOneOverHeight.y=Te;let Cr=Qmt,wr=Gk(t.rectangle,e.cartographicLimitRectangle),ve=Umt,ut=Gk(t.rectangle,f);m.fromElements(V,W,M,_t.hsbShift);let qe=t.rectangle,nt=1/qe.width,yt=1/qe.height;Cr.x=(wr.west-qe.west)*nt,Cr.y=(wr.south-qe.south)*yt,Cr.z=(wr.east-qe.west)*nt,Cr.w=(wr.north-qe.south)*yt,ce.clone(Cr,_t.localizedCartographicLimitRectangle),ve.x=(ut.west-qe.west)*nt,ve.y=(ut.south-qe.south)*yt,ve.z=(ut.east-qe.west)*nt,ve.w=(ut.north-qe.south)*yt,ce.clone(ve,_t.localizedTranslucencyRectangle);let $t=P&&Z.fog(t._distance,n.fog.density)>Z.EPSILON3;Q=Q&&($t||A);let Sn=!1,fo=!1,uo=!1,ra=!1,sa=!1,Hn=!1,Ti=!1,Rs=!1,Jo=!1,Ga=!1;for(;vt<s&&Ue<je;){let fs=De[Ue],tc=fs.readyImagery;if(++Ue,!l(tc)||tc.imageryLayer.alpha===0)continue;let nc=fs.useWebMercatorT?tc.textureWebMercator:tc.texture,Xr=tc.imageryLayer;l(fs.textureTranslationAndScale)||(fs.textureTranslationAndScale=Xr._calculateTextureTranslationAndScale(t,fs)),_t.dayTextures[vt]=nc,_t.dayTextureTranslationAndScale[vt]=fs.textureTranslationAndScale,_t.dayTextureTexCoordsRectangle[vt]=fs.textureCoordinateRectangle,_t.dayTextureUseWebMercatorT[vt]=fs.useWebMercatorT,_t.dayTextureAlpha[vt]=Xr.alpha,Hn=Hn||_t.dayTextureAlpha[vt]!==1,_t.dayTextureNightAlpha[vt]=Xr.nightAlpha,Ti=Ti||_t.dayTextureNightAlpha[vt]!==1,_t.dayTextureDayAlpha[vt]=Xr.dayAlpha,Ti=Ti||_t.dayTextureDayAlpha[vt]!==1,_t.dayTextureBrightness[vt]=Xr.brightness,Sn=Sn||_t.dayTextureBrightness[vt]!==is.DEFAULT_BRIGHTNESS,_t.dayTextureContrast[vt]=Xr.contrast,fo=fo||_t.dayTextureContrast[vt]!==is.DEFAULT_CONTRAST,_t.dayTextureHue[vt]=Xr.hue,uo=uo||_t.dayTextureHue[vt]!==is.DEFAULT_HUE,_t.dayTextureSaturation[vt]=Xr.saturation,ra=ra||_t.dayTextureSaturation[vt]!==is.DEFAULT_SATURATION,_t.dayTextureOneOverGamma[vt]=1/Xr.gamma,sa=sa||_t.dayTextureOneOverGamma[vt]!==1/is.DEFAULT_GAMMA,_t.dayTextureSplit[vt]=Xr.splitDirection,Rs=Rs||_t.dayTextureSplit[vt]!==0;let kl=_t.dayTextureCutoutRectangles[vt];if(l(kl)||(kl=_t.dayTextureCutoutRectangles[vt]=new ce),ce.clone(ce.ZERO,kl),l(Xr.cutoutRectangle)){let Zo=Gk(qe,Xr.cutoutRectangle),mn=le.simpleIntersection(Zo,qe,DCe);Jo=l(mn)||Jo,kl.x=(Zo.west-qe.west)*nt,kl.y=(Zo.south-qe.south)*yt,kl.z=(Zo.east-qe.west)*nt,kl.w=(Zo.north-qe.south)*yt}let Yl=_t.colorsToAlpha[vt];l(Yl)||(Yl=_t.colorsToAlpha[vt]=new ce);let aa=l(Xr.colorToAlpha)&&Xr.colorToAlphaThreshold>0;if(Ga=Ga||aa,aa){let Zo=Xr.colorToAlpha;Yl.x=Zo.red,Yl.y=Zo.green,Yl.z=Zo.blue,Yl.w=Xr.colorToAlphaThreshold}else Yl.w=-1;if(l(tc.credits)){let Zo=tc.credits;for(let mn=0,Re=Zo.length;mn<Re;++mn)o.addCreditToNextFrame(Zo[mn])}++vt}_t.dayTextures.length=vt,_t.waterMask=a,ce.clone(c,_t.waterMaskTranslationAndScale),_t.minMaxHeight.x=O.minimumHeight,_t.minMaxHeight.y=O.maximumHeight,X.clone(O.matrix,_t.scaleAndBias);let po=e._clippingPlanes,jo=l(po)&&po.enabled&&t.isClipped;jo&&(_t.clippingPlanesEdgeColor=U.clone(po.edgeColor,_t.clippingPlanesEdgeColor),_t.clippingPlanesEdgeWidth=po.edgeWidth);let Wu=e._clippingPolygons,xr=l(Wu)&&Wu.enabled&&t.isClipped;Le.numberOfDayTextures=vt,Le.applyBrightness=Sn,Le.applyContrast=fo,Le.applyHue=uo,Le.applySaturation=ra,Le.applyGamma=sa,Le.applyAlpha=Hn,Le.applyDayNightAlpha=Ti,Le.applySplit=Rs,Le.enableFog=$t,Le.enableClippingPlanes=jo,Le.clippingPlanes=po,Le.enableClippingPolygons=xr,Le.clippingPolygons=Wu,Le.hasImageryLayerCutout=Jo,Le.colorCorrect=Q,Le.highlightFillTile=Va,Le.colorToAlpha=Ga,Le.showUndergroundColor=I,Le.translucent=h;let Vs=i.renderedMesh.indices.length;it||(Vs=i.renderedMesh.indexCountWithoutSkirts),Rt.shaderProgram=e._surfaceShaderSet.getShaderProgram(Le),Rt.castShadows=T,Rt.receiveShadows=L,Rt.renderState=Jt,Rt.primitiveType=We.TRIANGLES,Rt.vertexArray=i.vertexArray||i.fill.vertexArray,Rt.count=Vs,Rt.uniformMap=si,Rt.pass=Ge.GLOBE,e._debug.wireframe&&(qmt(Li,e,t),l(i.wireframeVertexArray)&&(Rt.vertexArray=i.wireframeVertexArray,Rt.primitiveType=We.LINES,Rt.count=Vs*2));let ks=Rt.boundingVolume,Jm=Rt.orientedBoundingBox;n.mode!==re.SCENE3D?(ue.fromRectangleWithHeights2D(t.rectangle,n.mapProjection,H.minimumHeight,H.maximumHeight,ks),m.fromElements(ks.center.z,ks.center.x,ks.center.y,ks.center),n.mode===re.MORPHING&&(ks=ue.union(H.boundingSphere,ks,ks))):(Rt.boundingVolume=ue.clone(H.boundingSphere,ks),Rt.orientedBoundingBox=vn.clone(H.boundingVolume,Jm)),Rt.dirty=!0,h&&u.updateDerivedCommands(Rt,n),NCe(Rt,n),Jt=rn,Xt=eht}while(Ue<je)}var BP=gr;var q2i=y(C(),1);function YCe(){this._enabled=!1,this._frontFaceAlpha=1,this._frontFaceAlphaByDistance=void 0,this._backFaceAlpha=1,this._backFaceAlphaByDistance=void 0,this._rectangle=le.clone(le.MAX_VALUE)}Object.defineProperties(YCe.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=zt.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=zt.clone(e,this._backFaceAlphaByDistance)}},rectangle:{get:function(){return this._rectangle},set:function(e){l(e)||(e=le.clone(le.MAX_VALUE)),le.clone(e,this._rectangle)}}});var wP=YCe;var ZWi=y(C(),1);var nWi=y(C(),1);function OCe(e){this._ellipsoid=new gg(e.ellipsoid,m.ZERO)}Object.defineProperties(OCe.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var XP=OCe;var cWi=y(C(),1);var I7=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)}clear(){this.cache.clear()}},rht=1e3;function Ea(e){this._tilingScheme=e.tilingScheme,this._x=e.x,this._y=e.y,this._level=e.level,this._parent=e.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=[],this._frameUpdated=void 0,this._lastSelectionResult=li.NONE,this._lastSelectionResultFrame=void 0,this._loadedCallbacks={},this._positionCache=new I7(rht),this.state=_a.START,this.renderable=!1,this.upsampledFromParent=!1,this.data=void 0}Ea.createLevelZeroTiles=function(e){let t=e.getNumberOfXTilesAtLevel(0),n=e.getNumberOfYTilesAtLevel(0),i=new Array(t*n),o=0;for(let r=0;r<n;++r)for(let s=0;s<t;++s)i[o++]=new Ea({tilingScheme:e,x:s,y:r,level:0});return i};var sht=256;function aht(e,t,n,i){let o=n.width/sht*i,r=Math.floor(e/o)*o,s=Math.floor(t/o)*o;return`${r.toFixed(10)},${s.toFixed(10)}`}Ea.prototype._getCacheKey=function(e,t){return aht(e.longitude,e.latitude,this._rectangle,t)};Ea.prototype.getPositionCacheEntry=function(e,t){return this._positionCache.get(this._getCacheKey(e,t))};Ea.prototype.setPositionCacheEntry=function(e,t,n){this._positionCache.set(this._getCacheKey(e,t),n)};Ea.prototype.clearPositionCache=function(){this._positionCache.size>0&&this._positionCache.clear()};Ea.prototype._updateCustomData=function(e,t,n){let i=this.customData,o,r,s;if(l(t)&&l(n)){for(i=i.filter(function(a){return n.indexOf(a)===-1}),this._customData=i,s=this._rectangle,o=0;o<t.length;++o)r=t[o],le.contains(s,r.positionCartographic)&&i.push(r);this._frameUpdated=e}else{let a=this._parent;if(l(a)&&this._frameUpdated!==a._frameUpdated){i.length=0,s=this._rectangle;let c=a.customData;for(o=0;o<c.length;++o)r=c[o],le.contains(s,r.positionCartographic)&&i.push(r);this._frameUpdated=a._frameUpdated}}};Object.defineProperties(Ea.prototype,{tilingScheme:{get:function(){return this._tilingScheme}},x:{get:function(){return this._x}},y:{get:function(){return this._y}},level:{get:function(){return this._level}},parent:{get:function(){return this._parent}},rectangle:{get:function(){return this._rectangle}},children:{get:function(){return[this.northwestChild,this.northeastChild,this.southwestChild,this.southeastChild]}},southwestChild:{get:function(){return l(this._southwestChild)||(this._southwestChild=new Ea({tilingScheme:this.tilingScheme,x:this.x*2,y:this.y*2+1,level:this.level+1,parent:this})),this._southwestChild}},southeastChild:{get:function(){return l(this._southeastChild)||(this._southeastChild=new Ea({tilingScheme:this.tilingScheme,x:this.x*2+1,y:this.y*2+1,level:this.level+1,parent:this})),this._southeastChild}},northwestChild:{get:function(){return l(this._northwestChild)||(this._northwestChild=new Ea({tilingScheme:this.tilingScheme,x:this.x*2,y:this.y*2,level:this.level+1,parent:this})),this._northwestChild}},northeastChild:{get:function(){return l(this._northeastChild)||(this._northeastChild=new Ea({tilingScheme:this.tilingScheme,x:this.x*2+1,y:this.y*2,level:this.level+1,parent:this})),this._northeastChild}},customData:{get:function(){return this._customData}},needsLoading:{get:function(){return this.state<_a.DONE}},eligibleForUnloading:{get:function(){let e=!0;return l(this.data)&&(e=this.data.eligibleForUnloading,l(e)||(e=!0)),e}}});Ea.prototype.findLevelZeroTile=function(e,t,n){let i=this.tilingScheme.getNumberOfXTilesAtLevel(0);if(t<0?t+=i:t>=i&&(t-=i),!(n<0||n>=this.tilingScheme.getNumberOfYTilesAtLevel(0)))return e.filter(function(o){return o.x===t&&o.y===n})[0]};Ea.prototype.findTileToWest=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x-1,this.y);if(t.southeastChild===this)return t.southwestChild;if(t.northeastChild===this)return t.northwestChild;let n=t.findTileToWest(e);if(n!==void 0)return t.southwestChild===this?n.southeastChild:n.northeastChild};Ea.prototype.findTileToEast=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x+1,this.y);if(t.southwestChild===this)return t.southeastChild;if(t.northwestChild===this)return t.northeastChild;let n=t.findTileToEast(e);if(n!==void 0)return t.southeastChild===this?n.southwestChild:n.northwestChild};Ea.prototype.findTileToSouth=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x,this.y+1);if(t.northwestChild===this)return t.southwestChild;if(t.northeastChild===this)return t.southeastChild;let n=t.findTileToSouth(e);if(n!==void 0)return t.southwestChild===this?n.northwestChild:n.northeastChild};Ea.prototype.findTileToNorth=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x,this.y-1);if(t.southwestChild===this)return t.northwestChild;if(t.southeastChild===this)return t.northeastChild;let n=t.findTileToNorth(e);if(n!==void 0)return t.northwestChild===this?n.southwestChild:n.southeastChild};Ea.prototype.freeResources=function(){this.clearPositionCache(),this.state=_a.START,this.renderable=!1,this.upsampledFromParent=!1,l(this.data)&&l(this.data.freeResources)&&this.data.freeResources(),Bk(this._southwestChild),this._southwestChild=void 0,Bk(this._southeastChild),this._southeastChild=void 0,Bk(this._northwestChild),this._northwestChild=void 0,Bk(this._northeastChild),this._northeastChild=void 0};function Bk(e){l(e)&&e.freeResources()}var WP=Ea;var uWi=y(C(),1);function wk(){this.head=void 0,this.tail=void 0,this.count=0,this._lastBeforeStartOfFrame=void 0}wk.prototype.markStartOfRenderFrame=function(){this._lastBeforeStartOfFrame=this.head};wk.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(),HCe(this,t)),t=i}};function HCe(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}wk.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))&&HCe(this,e),e.replacementPrevious=void 0,e.replacementNext=t,t.replacementPrevious=e,this.head=e};var FP=wk;function Mm(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._tilesToRender=[],this._tileLoadQueueHigh=[],this._tileLoadQueueMedium=[],this._tileLoadQueueLow=[],this._tileReplacementQueue=new FP,this._levelZeroTiles=void 0,this._loadQueueTimeSlice=5,this._tilesInvalidated=!1,this._addHeightCallbacks=[],this._removeHeightCallbacks=[],this._tileToUpdateHeights=[],this._lastTileIndex=0,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 XP({ellipsoid:n}),this._tileLoadProgressEvent=new Ce,this._lastTileLoadQueueLength=0,this._lastSelectionFrameNumber=void 0}Object.defineProperties(Mm.prototype,{tileProvider:{get:function(){return this._tileProvider}},tileLoadProgressEvent:{get:function(){return this._tileLoadProgressEvent}},occluders:{get:function(){return this._occluders}}});Mm.prototype.invalidateAllTiles=function(){this._tilesInvalidated=!0};function cht(e){let t=e._tileReplacementQueue;t.head=void 0,t.tail=void 0,t.count=0,KCe(e);let n=e._levelZeroTiles;if(l(n))for(let i=0;i<n.length;++i){let r=n[i].customData,s=r.length;for(let a=0;a<s;++a){let c=r[a];c.level=0,e._addHeightCallbacks.push(c)}n[i].freeResources()}e._levelZeroTiles=void 0,e._tileProvider.cancelReprojections()}Mm.prototype.forEachLoadedTile=function(e){let t=this._tileReplacementQueue.head;for(;l(t);)t.state!==_a.START&&e(t),t=t.replacementNext};Mm.prototype.forEachRenderedTile=function(e){let t=this._tilesToRender;for(let n=0,i=t.length;n<i;++n)e(t[n])};Mm.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};Mm.prototype.update=function(e){l(this._tileProvider.update)&&this._tileProvider.update(e)};function KCe(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}Mm.prototype.beginFrame=function(e){e.passes.render&&(this._tilesInvalidated&&(cht(this),this._tilesInvalidated=!1),this._tileProvider.initialize(e),KCe(this),!this._debug.suspendLodUpdate&&this._tileReplacementQueue.markStartOfRenderFrame())};Mm.prototype.render=function(e){let t=e.passes,n=this._tileProvider;t.render&&(n.beginUpdate(e),mht(this,e),Iht(this,e),n.endUpdate(e)),t.pick&&this._tilesToRender.length>0&&n.updateForPick(e)};function lht(e,t){let n=e._tileLoadQueueHigh.length+e._tileLoadQueueMedium.length+e._tileLoadQueueLow.length;if(n!==e._lastTileLoadQueueLength||e._tilesInvalidated){let o=Ce.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))}Mm.prototype.endFrame=function(e){!e.passes.render||e.mode===re.MORPHING||(bht(this,e),xht(this,e),lht(this,e))};Mm.prototype.isDestroyed=function(){return!1};Mm.prototype.destroy=function(){this._tileProvider=this._tileProvider&&this._tileProvider.destroy()};var MP,zCe=new ge;function dht(e,t){let n=le.center(e.rectangle,zCe),i=n.longitude-MP.longitude,o=n.latitude-MP.latitude;n=le.center(t.rectangle,zCe);let r=n.longitude-MP.longitude,s=n.latitude-MP.latitude;return i*i+o*o-(r*r+s*s)}var uht=new m,PP=[];function mht(e,t){let n=e._debug;if(n.suspendLodUpdate)return;let i=e._tilesToRender;i.length=0;let o,r=e._tileProvider;if(!l(e._levelZeroTiles)){let b=r.tilingScheme;if(l(b)){let x=r.tilingScheme;e._levelZeroTiles=WP.createLevelZeroTiles(x);let I=e._levelZeroTiles.length;if(PP.length<I)for(PP=new Array(I),o=0;o<I;++o)PP[o]===void 0&&(PP[o]=new vP)}else return}e._occluders.ellipsoid.cameraPosition=t.camera.positionWC;let s,a=e._levelZeroTiles,c=a.length>1?e._occluders:void 0;MP=t.camera.positionCartographic,a.sort(dht);let d=e._addHeightCallbacks,u=e._removeHeightCallbacks,h=t.frameNumber,p;if(d.length>0||u.length>0){for(o=0,p=a.length;o<p;++o)s=a[o],s._updateCustomData(h,d,u);d.length=0,u.length=0}let g=t.camera;e._cameraPositionCartographic=g.positionCartographic;let f=X.getTranslation(g.transform,uht);for(e._cameraReferenceFrameOriginCartographic=e.tileProvider.tilingScheme.ellipsoid.cartesianToCartographic(f,e._cameraReferenceFrameOriginCartographic),o=0,p=a.length;o<p;++o)s=a[o],e._tileReplacementQueue.markTileRendered(s),s.renderable?Cc(e,s,r,t,c,!1,PP[o]):(Ug(e,e._tileLoadQueueHigh,s,t),++n.tilesWaitingForChildren);e._lastSelectionFrameNumber=h}function Ug(e,t,n,i){n.needsLoading&&(e.tileProvider.computeTileLoadPriority!==void 0&&(n._loadPriority=e.tileProvider.computeTileLoadPriority(n,i)),t.push(n))}function vP(){this.allAreRenderable=!0,this.anyWereRenderedLastFrame=!1,this.notYetRenderableCount=0}function JCe(){this.southwest=new vP,this.southeast=new vP,this.northwest=new vP,this.northeast=new vP}JCe.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 E7=new Array(31);for(let e=0;e<E7.length;++e)E7[e]=new JCe;function hht(e,t,n,i,o){let r=e._debug;++r.tilesVisited,e._tileReplacementQueue.markTileRendered(n),n._updateCustomData(t.frameNumber),n.level>r.maxDepthVisited&&(r.maxDepthVisited=n.level);let s=Aht(e,t,n)<e.maximumScreenSpaceError,a=n.southwestChild,c=n.southeastChild,d=n.northwestChild,u=n.northeastChild,h=e._lastSelectionFrameNumber,p=n._lastSelectionResultFrame===h?n._lastSelectionResult:li.NONE,g=e.tileProvider;if(s||i){let f=li.originalResult(p)===li.RENDERED,b=li.originalResult(p)===li.CULLED||p===li.NONE,x=n.state===_a.DONE,I=f||b||x;if(I||l(g.canRenderWithoutLosingDetail)&&(I=g.canRenderWithoutLosingDetail(n)),I){s&&Ug(e,e._tileLoadQueueMedium,n,t),Xk(e,n),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===li.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=li.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}i=!0,s&&Ug(e,e._tileLoadQueueHigh,n,t)}if(g.canRefine(n)){if(a.upsampledFromParent&&c.upsampledFromParent&&d.upsampledFromParent&&u.upsampledFromParent){Xk(e,n),Ug(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===li.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=li.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=li.REFINED;let b=e._tilesToRender.length,x=e._tileLoadQueueLow.length,I=e._tileLoadQueueMedium.length,_=e._tileLoadQueueHigh.length,E=e._tileToUpdateHeights.length;if(fht(e,a,c,d,u,t,i,o),b!==e._tilesToRender.length){let S=o.allAreRenderable,R=o.anyWereRenderedLastFrame,G=o.notYetRenderableCount,B=!1;if(!S&&!R){let w=e._tilesToRender;for(let P=b;P<w.length;++P){let A=w[P];for(;A!==void 0&&A._lastSelectionResult!==li.KICKED&&A!==n;)A._lastSelectionResult=li.kick(A._lastSelectionResult),A=A.parent}e._tilesToRender.length=b,e._tileToUpdateHeights.length=E,Xk(e,n),n._lastSelectionResult=li.RENDERED;let F=p===li.RENDERED;!F&&G>e.loadingDescendantLimit&&(e._tileLoadQueueLow.length=x,e._tileLoadQueueMedium.length=I,e._tileLoadQueueHigh.length=_,Ug(e,e._tileLoadQueueMedium,n,t),o.notYetRenderableCount=n.renderable?0:1,B=!0),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=F,F||e._tileToUpdateHeights.push(n),++r.tilesWaitingForChildren}e.preloadAncestors&&!B&&Ug(e,e._tileLoadQueueLow,n,t)}return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=li.RENDERED,Xk(e,n),Ug(e,e._tileLoadQueueHigh,n,t),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===li.RENDERED,o.notYetRenderableCount=n.renderable?0:1}function fht(e,t,n,i,o,r,s,a){let c=r.camera.positionCartographic,d=e._tileProvider,u=e._occluders,h=E7[t.level],p=h.southwest,g=h.southeast,f=h.northwest,b=h.northeast;c.longitude<t.rectangle.east?c.latitude<t.rectangle.north?(Cc(e,t,d,r,u,s,p),Cc(e,n,d,r,u,s,g),Cc(e,i,d,r,u,s,f),Cc(e,o,d,r,u,s,b)):(Cc(e,i,d,r,u,s,f),Cc(e,t,d,r,u,s,p),Cc(e,o,d,r,u,s,b),Cc(e,n,d,r,u,s,g)):c.latitude<t.rectangle.north?(Cc(e,n,d,r,u,s,g),Cc(e,t,d,r,u,s,p),Cc(e,o,d,r,u,s,b),Cc(e,i,d,r,u,s,f)):(Cc(e,o,d,r,u,s,b),Cc(e,i,d,r,u,s,f),Cc(e,n,d,r,u,s,g),Cc(e,t,d,r,u,s,p)),h.combine(a)}function pht(e,t){let n=t.rectangle;return l(e._cameraPositionCartographic)&&le.contains(n,e._cameraPositionCartographic)||l(e._cameraReferenceFrameOriginCartographic)&&le.contains(n,e._cameraReferenceFrameOriginCartographic)}function Cc(e,t,n,i,o,r,s){if(n.computeTileVisibility(t,i,o)!==Zr.NONE)return hht(e,i,t,r,s);if(++e._debug.tilesCulled,e._tileReplacementQueue.markTileRendered(t),s.allAreRenderable=!0,s.anyWereRenderedLastFrame=!1,s.notYetRenderableCount=0,pht(e,t)){(!l(t.data)||!l(t.data.vertexArray))&&Ug(e,e._tileLoadQueueMedium,t,i);let a=e._lastSelectionFrameNumber,c=t._lastSelectionResultFrame===a?t._lastSelectionResult:li.NONE;c!==li.CULLED_BUT_NEEDED&&c!==li.RENDERED&&e._tileToUpdateHeights.push(t),t._lastSelectionResult=li.CULLED_BUT_NEEDED}else e.preloadSiblings||t.level===0?(Ug(e,e._tileLoadQueueLow,t,i),t._lastSelectionResult=li.CULLED):t._lastSelectionResult=li.CULLED;t._lastSelectionResultFrame=i.frameNumber}function Aht(e,t,n){if(t.mode===re.SCENE2D||t.camera.frustum instanceof gn||t.camera.frustum instanceof qr)return ght(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-=Z.fog(o,t.fog.density)*t.fog.sse),a/=t.pixelRatio,a}function ght(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),h=d/u;return t.fog.enabled&&t.mode!==re.SCENE2D&&(h-=Z.fog(n._distance,t.fog.density)*t.fog.sse),h/=t.pixelRatio,h}function Xk(e,t){e._tilesToRender.push(t)}function bht(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=Fi()+e._loadQueueTimeSlice,s=e._tileProvider,a=_7(e,t,s,r,n,!1);a=_7(e,t,s,r,i,a),_7(e,t,s,r,o,a)}function yht(e,t){return e._loadPriority-t._loadPriority}function _7(e,t,n,i,o,r){n.computeTileLoadPriority!==void 0&&o.sort(yht);for(let s=0,a=o.length;s<a&&(Fi()<i||!r);++s){let c=o[s];e._tileReplacementQueue.markTileRendered(c),n.loadTile(t,c),r=!0}return r}var rL=new En,Wk=new ge,ay=new m,Cht=[];function xht(e,t){if(!l(e.tileProvider.tilingScheme))return;let n=Cht;n.length=0;let i=e._tileToUpdateHeights,o=Fi(),r=e._updateHeightsTimeSlice,s=o+r,a=t.mode,c=t.mapProjection,d=e.tileProvider.tilingScheme.ellipsoid,u;for(;i.length>0;){let h=i[0];if(!l(h.data)||!l(h.data.mesh)){let b=h._lastSelectionResultFrame===e._lastSelectionFrameNumber?h._lastSelectionResult:li.NONE;(b===li.RENDERED||b===li.CULLED_BUT_NEEDED)&&n.push(h),h.clearPositionCache(),i.shift(),e._lastTileIndex=0;continue}let p=h.customData,g=p.length,f=!1;for(u=e._lastTileIndex;u<g;++u){let b=p[u],x=h.data.terrainData,I=l(x)&&x.wasCreatedByUpsampling();if(h.level>b.level&&!I){let _,E=h.getPositionCacheEntry(b.positionCartographic,e.maximumScreenSpaceError);if(l(E))_=E;else{if(l(b.positionOnEllipsoidSurface)||(b.positionOnEllipsoidSurface=m.fromRadians(b.positionCartographic.longitude,b.positionCartographic.latitude,0,d)),a===re.SCENE3D){let S=d.geodeticSurfaceNormal(b.positionOnEllipsoidSurface,rL.direction),R=d.getSurfaceNormalIntersectionWithZAxis(b.positionOnEllipsoidSurface,11500,rL.origin);if(!l(R)){let G=0;l(h.data.tileBoundingRegion)&&(G=h.data.tileBoundingRegion.minimumHeight);let B=Math.min(G,-11500),w=m.multiplyByScalar(S,Math.abs(B)+1,ay);m.subtract(b.positionOnEllipsoidSurface,w,rL.origin)}}else ge.clone(b.positionCartographic,Wk),Wk.height=-11500,c.project(Wk,ay),m.fromElements(ay.z,ay.x,ay.y,ay),m.clone(ay,rL.origin),m.clone(m.UNIT_X,rL.direction);_=h.data.pick(rL,a,c,!1,ay),l(_)&&h.setPositionCacheEntry(b.positionCartographic,e.maximumScreenSpaceError,_)}if(l(_)){if(l(b.callback)){let S=d.cartesianToCartographic(_,Wk);b.callback(S)}b.level=h.level}}if(Fi()>=s){f=!0;break}}if(f){e._lastTileIndex=u;break}else e._lastTileIndex=0,i.shift()}for(u=0;u<n.length;u++)i.push(n[u])}function Iht(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 NP=Mm;function uf(e){e=e??ie.default;let t=new Tp({ellipsoid:e}),n=new Xx;this._ellipsoid=e,this._imageryLayerCollection=n,this._surfaceShaderSet=new GP,this._material=void 0,this._surface=new NP({tileProvider:new BP({terrainProvider:t,imageryLayers:n,surfaceShaderSet:this._surfaceShaderSet})}),this._terrainProvider=t,this._terrainProviderChanged=new Ce,this._undergroundColor=U.clone(U.BLACK),this._undergroundColorAlphaByDistance=new zt(e.maximumRadius/1e3,0,e.maximumRadius/5,1),this._translucency=new wP,S7(this),this.show=!0,this._oceanNormalMapResourceDirty=!0,this._oceanNormalMapResource=new Ve({url:hn("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 m(55e-7,13e-6,284e-7),this.atmosphereMieCoefficient=new m(21e-6,21e-6,21e-6),this.atmosphereRayleighScaleHeight=1e4,this.atmosphereMieScaleHeight=3200,this.atmosphereMieAnisotropy=.9,this.lightingFadeOutDistance=Z.PI_OVER_TWO*e.minimumRadius,this.lightingFadeInDistance=Z.PI*e.minimumRadius,this.nightFadeOutDistance=Z.PI_OVER_TWO*e.minimumRadius,this.nightFadeInDistance=5*Z.PI_OVER_TWO*e.minimumRadius,this.showWaterEffect=!0,this.depthTestAgainstTerrain=!1,this.shadows=Gn.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(uf.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=le.clone(le.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,this._terrainProviderChanged.raiseEvent(e),l(this._material)&&S7(this))}},terrainProviderChanged:{get:function(){return this._terrainProviderChanged}},tileLoadProgressEvent:{get:function(){return this._surface.tileLoadProgressEvent}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,S7(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=zt.clone(e,this._undergroundColorAlphaByDistance)}},translucency:{get:function(){return this._translucency}}});function S7(e){let t=[],n=l(e._material)&&(l(e._material.shaderSource.match(/slope/))||l(e._material.shaderSource.match("normalEC"))),i=[_h,qS];l(e._material)&&(!n||e._terrainProvider.requestVertexNormals)?(i.push(e._material.shaderSource),t.push("APPLY_MATERIAL"),e._surface._tileProvider.materialUniformMap=e._material._uniforms):e._surface._tileProvider.materialUniformMap=void 0,i.push(yP),e._surfaceShaderSet.baseVertexShaderSource=new Oe({sources:[_h,qS,CP],defines:t}),e._surfaceShaderSet.baseFragmentShaderSource=new Oe({sources:i,defines:t}),e._surfaceShaderSet.material=e._material}function _ht(e){return function(t,n){let i=ue.distanceSquaredTo(t.pickBoundingSphere,e),o=ue.distanceSquaredTo(n.pickBoundingSphere,e);return i-o}}var Eht=[],Tht={start:0,stop:0};uf.prototype.pickWorldCoordinates=function(e,t,n,i){n=n??!0;let o=t.mode,r=t.mapProjection,s=Eht;s.length=0;let a=this._surface._tilesToRender,c=a.length,d,u;for(u=0;u<c;++u){d=a[u];let p=d.data;if(!l(p))continue;let g=p.pickBoundingSphere;if(o!==re.SCENE3D)p.pickBoundingSphere=g=ue.fromRectangleWithHeights2D(d.rectangle,r,p.tileBoundingRegion.minimumHeight,p.tileBoundingRegion.maximumHeight,g),m.fromElements(g.center.z,g.center.x,g.center.y,g.center);else if(l(p.renderedMesh))ue.clone(p.tileBoundingRegion.boundingSphere,g);else continue;let f=fi.raySphere(e,g,Tht);l(f)&&s.push(p)}s.sort(_ht(e.origin));let h;for(c=s.length,u=0;u<c&&(h=s[u].pick(e,t.mode,t.mapProjection,n,i),!l(h));++u);return h};var Sht=new ge;uf.prototype.pick=function(e,t,n){if(n=this.pickWorldCoordinates(e,t,!0,n),l(n)&&t.mode!==re.SCENE3D){n=m.fromElements(n.y,n.z,n.x,n);let i=t.mapProjection.unproject(n,Sht);n=this._ellipsoid.cartographicToCartesian(i,n)}return n};var Lht=new m,jCe=new m,Rht=new ge,Vht=new En;function T7(e,t){return l(e)&&le.contains(e.rectangle,t)?e:void 0}uf.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],!le.contains(n.rectangle,e));++i);if(i>=o)return;let r=n;for(;l(n);)n=T7(n._southwestChild,e)||T7(n._southeastChild,e)||T7(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=m.fromRadians(e.longitude,e.latitude,0,a,Lht),d=Vht,u=a.geodeticSurfaceNormal(c,d.direction),h=a.getSurfaceNormalIntersectionWithZAxis(c,11500,d.origin);if(!l(h)){let g;l(n.data.tileBoundingRegion)&&(g=n.data.tileBoundingRegion.minimumHeight);let f=Math.min(g??0,-11500),b=m.multiplyByScalar(u,Math.abs(f)+1,jCe);m.subtract(c,b,d.origin)}let p=n.data.pick(d,void 0,s,!1,jCe);if(l(p))return a.cartesianToCartographic(p,Rht).height};uf.prototype.update=function(e){this.show&&e.passes.render&&this._surface.update(e)};uf.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 Wt({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===re.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))};uf.prototype.render=function(e){this.show&&(l(this._material)&&this._material.update(e.context),this._surface.render(e))};uf.prototype.endFrame=function(e){this.show&&e.passes.render&&this._surface.endFrame(e)};uf.prototype.isDestroyed=function(){return!1};uf.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 DP=uf;var uPi=y(C(),1);var SFi=y(C(),1);var gFi=y(C(),1);var dFi=y(C(),1);function Ght(e,t,n,i){this.rightAscension=e,this.declination=t,this.rotation=n,this.rotationRate=i}var QP=Ght;var uxe={},Zht=32.184,Bht=2451545,qCe=-.0529921,$Ce=-.1059842,exe=13.0120009,txe=13.3407154,nxe=.9856003,ixe=26.4057084,oxe=13.064993,rxe=.3287146,sxe=1.7484877,axe=-.1589763,cxe=.0036096,lxe=.1643573,dxe=12.9590088,L7=new j;uxe.ComputeMoon=function(e,t){l(e)||(e=j.now()),L7=j.addSeconds(e,Zht,L7);let n=j.totalDays(L7)-Bht,i=n/ai.DAYS_PER_JULIAN_CENTURY,o=(125.045+qCe*n)*Z.RADIANS_PER_DEGREE,r=(250.089+$Ce*n)*Z.RADIANS_PER_DEGREE,s=(260.008+exe*n)*Z.RADIANS_PER_DEGREE,a=(176.625+txe*n)*Z.RADIANS_PER_DEGREE,c=(357.529+nxe*n)*Z.RADIANS_PER_DEGREE,d=(311.589+ixe*n)*Z.RADIANS_PER_DEGREE,u=(134.963+oxe*n)*Z.RADIANS_PER_DEGREE,h=(276.617+rxe*n)*Z.RADIANS_PER_DEGREE,p=(34.226+sxe*n)*Z.RADIANS_PER_DEGREE,g=(15.134+axe*n)*Z.RADIANS_PER_DEGREE,f=(119.743+cxe*n)*Z.RADIANS_PER_DEGREE,b=(239.961+lxe*n)*Z.RADIANS_PER_DEGREE,x=(25.053+dxe*n)*Z.RADIANS_PER_DEGREE,I=Math.sin(o),_=Math.sin(r),E=Math.sin(s),S=Math.sin(a),R=Math.sin(c),G=Math.sin(d),B=Math.sin(u),w=Math.sin(h),F=Math.sin(p),P=Math.sin(g),A=Math.sin(f),T=Math.sin(b),L=Math.sin(x),V=Math.cos(o),W=Math.cos(r),M=Math.cos(s),Q=Math.cos(a),N=Math.cos(c),k=Math.cos(d),v=Math.cos(u),O=Math.cos(h),H=Math.cos(p),ee=Math.cos(g),K=Math.cos(f),te=Math.cos(b),q=Math.cos(x),pe=(269.9949+.0031*i-3.8787*I-.1204*_+.07*E-.0172*S+.0072*G-.0052*P+.0043*L)*Z.RADIANS_PER_DEGREE,ye=(66.5392+.013*i+1.5419*V+.0239*W-.0278*M+.0068*Q-.0029*k+9e-4*v+8e-4*ee-9e-4*q)*Z.RADIANS_PER_DEGREE,he=(38.3213+13.17635815*n-14e-13*n*n+3.561*I+.1208*_-.0642*E+.0158*S+.0252*R-.0066*G-.0047*B-.0046*w+.0028*F+.0052*P+.004*A+.0019*T-.0044*L)*Z.RADIANS_PER_DEGREE,xe=(13.17635815-14e-13*(2*n)+3.561*V*qCe+.1208*W*$Ce-.0642*M*exe+.0158*Q*txe+.0252*N*nxe-.0066*k*ixe-.0047*v*oxe-.0046*O*rxe+.0028*H*sxe+.0052*ee*axe+.004*K*cxe+.0019*te*lxe-.0044*q*dxe)/86400*Z.RADIANS_PER_DEGREE;return l(t)||(t=new QP),t.rightAscension=pe,t.declination=ye,t.rotation=he,t.rotationRate=xe,t};var UP=uxe;function mxe(e){(!l(e)||typeof e!="function")&&(e=UP.ComputeMoon),this._computeFunction=e}var wht=new m,Xht=new m,Wht=new m;function Fht(e,t,n){let i=wht;i.x=Math.cos(e+Z.PI_OVER_TWO),i.y=Math.sin(e+Z.PI_OVER_TWO),i.z=0;let o=Math.cos(t),r=Wht;r.x=o*Math.cos(e),r.y=o*Math.sin(e),r.z=Math.sin(t);let s=m.cross(r,i,Xht);return l(n)||(n=new $),n[0]=i.x,n[1]=s.x,n[2]=r.x,n[3]=i.y,n[4]=s.y,n[5]=r.y,n[6]=i.z,n[7]=s.z,n[8]=r.z,n}var Pht=new $,Mht=new Pe;mxe.prototype.evaluate=function(e,t){l(e)||(e=j.now());let n=this._computeFunction(e),i=Fht(n.rightAscension,n.declination,t),o=Z.zeroToTwoPi(n.rotation),r=Pe.fromAxisAngle(m.UNIT_Z,o,Mht),s=$.fromQuaternion(Pe.conjugate(r,r),Pht);return $.multiply(s,i,i)};var kP=mxe;var JFi=y(C(),1);var R7={position:0};function Fk(e){e=e??Y.EMPTY_OBJECT,this.center=m.clone(e.center??m.ZERO),this._center=new m,this.radii=m.clone(e.radii),this._radii=new m,this._oneOverEllipsoidRadiiSquared=new m,this._boundingSphere=new ue,this.modelMatrix=X.clone(e.modelMatrix??X.IDENTITY),this._modelMatrix=new X,this._computedModelMatrix=new X,this.show=e.show??!0,this.material=e.material??so.fromType(so.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 vht(e){let t=e.cache.ellipsoidPrimitive_vertexArray;if(l(t))return t;let n=sc.createGeometry(sc.fromDimensions({dimensions:new m(2,2,2),vertexFormat:we.POSITION_ONLY}));return t=ui.fromGeometry({context:e,geometry:n,attributeLocations:R7,bufferUsage:Ne.STATIC_DRAW,interleave:!0}),e.cache.ellipsoidPrimitive_vertexArray=t,t}Fk.prototype.update=function(e){if(!this.show||e.mode!==re.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=Qe.fromCache({cull:{enabled:!0,face:Xi.FRONT},depthTest:{enabled:this._depthTestEnabled},depthMask:!n&&t.fragmentDepth,blending:n?bn.ALPHA_BLEND:void 0})),l(this._va)||(this._va=vht(t));let o=!1,r=this.radii;if(!m.equals(this._radii,r)){m.clone(r,this._radii);let b=this._oneOverEllipsoidRadiiSquared;b.x=1/(r.x*r.x),b.y=1/(r.y*r.y),b.z=1/(r.z*r.z),o=!0}(!X.equals(this.modelMatrix,this._modelMatrix)||!m.equals(this.center,this._center))&&(X.clone(this.modelMatrix,this._modelMatrix),m.clone(this.center,this._center),X.multiplyByTranslation(this.modelMatrix,this.center,this._computedModelMatrix),o=!0),o&&(m.clone(m.ZERO,this._boundingSphere.center),this._boundingSphere.radius=m.maximumComponent(r),ue.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,h,p;(s||a||i||d)&&(h=new Oe({sources:[jS]}),p=new Oe({sources:[this.material.shaderSource,JS]}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(h.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._sp=ln.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:h,fragmentShaderSource:p,attributeLocations:R7}),u.vertexArray=this._va,u.renderState=this._rs,u.shaderProgram=this._sp,u.uniformMap=Lt(this._uniforms,this.material._uniforms),u.executeInClosestFrustum=n);let g=e.commandList,f=e.passes;if(f.render&&(u.boundingVolume=this._boundingSphere,u.debugShowBoundingVolume=this.debugShowBoundingVolume,u.modelMatrix=this._computedModelMatrix,u.pass=n?Ge.TRANSLUCENT:Ge.OPAQUE,g.push(u)),f.pick){let b=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)&&(h=new Oe({sources:[jS]}),p=new Oe({sources:[this.material.shaderSource,JS],pickColorQualifier:"uniform"}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(h.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._pickSP=ln.replaceCache({context:t,shaderProgram:this._pickSP,vertexShaderSource:h,fragmentShaderSource:p,attributeLocations:R7}),b.vertexArray=this._va,b.renderState=this._rs,b.shaderProgram=this._pickSP,b.uniformMap=Lt(Lt(this._uniforms,this._pickUniforms),this.material._uniforms),b.executeInClosestFrustum=n),b.boundingVolume=this._boundingSphere,b.modelMatrix=this._computedModelMatrix,b.pass=n?Ge.TRANSLUCENT:Ge.OPAQUE,g.push(b)}};Fk.prototype.isDestroyed=function(){return!1};Fk.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 YP=Fk;function OP(e){e=e??Y.EMPTY_OBJECT;let t=e.textureUrl;l(t)||(t=hn("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 YP({radii:this.ellipsoid.radii,material:so.fromType(so.ImageType),depthTestEnabled:!1,_owner:this}),this._ellipsoidPrimitive.material.translucent=!1,this._axes=new kP}Object.defineProperties(OP.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var Pk=new $,Nht=new $,Dht=new m,Mk=[];OP.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(Dt.computeIcrfToFixedMatrix(n,Pk))||Dt.computeTemeToPseudoFixedMatrix(n,Pk);let i=this._axes.evaluate(n,Nht);$.transpose(i,i),$.multiply(Pk,i,i);let o=ry.computeMoonPositionInEarthInertialFrame(n,Dht);$.multiplyByVector(Pk,o,o),X.fromRotationTranslation(i,o,t.modelMatrix);let r=e.commandList;return e.commandList=Mk,Mk.length=0,t.update(e),e.commandList=r,Mk.length===1?Mk[0]:void 0};OP.prototype.isDestroyed=function(){return!1};OP.prototype.destroy=function(){return this._ellipsoidPrimitive=this._ellipsoidPrimitive&&this._ellipsoidPrimitive.destroy(),me(this)};var HP=OP;var i8i=y(C(),1);var hPi=y(C(),1);var V7=[],G7=[];function Qht(e,t,n,i,o,r){let s=o-i+1,a=r-o,c=V7,d=G7,u,h;for(u=0;u<s;++u)c[u]=e[i+u];for(h=0;h<a;++h)d[h]=e[o+h+1];u=0,h=0;for(let p=i;p<=r;++p){let g=c[u],f=d[h];u<s&&(h>=a||t(g,f,n)<=0)?(e[p]=g,++u):h<a&&(e[p]=f,++h)}}function Z7(e,t,n,i,o){if(i>=o)return;let r=Math.floor((i+o)*.5);Z7(e,t,n,i,r),Z7(e,t,n,r+1,o),Qht(e,t,n,i,r,o)}function Uht(e,t,n){let i=e.length,o=Math.ceil(i*.5);V7.length=o,G7.length=o,Z7(e,t,n,0,i-1),V7.length=0,G7.length=0}var Sp=Uht;var IPi=y(C(),1);function Jc(e,t){this._occluderPosition=m.clone(e.center),this._occluderRadius=e.radius,this._horizonDistance=0,this._horizonPlaneNormal=void 0,this._horizonPlanePosition=void 0,this._cameraPosition=void 0,this.cameraPosition=t}var vk=new m;Object.defineProperties(Jc.prototype,{position:{get:function(){return this._occluderPosition}},radius:{get:function(){return this._occluderRadius}},cameraPosition:{set:function(e){e=m.clone(e,this._cameraPosition);let t=m.subtract(this._occluderPosition,e,vk),n=m.magnitudeSquared(t),i=this._occluderRadius*this._occluderRadius,o,r,s;if(n>i){o=Math.sqrt(n-i),n=1/Math.sqrt(n),r=m.multiplyByScalar(t,n,vk);let a=o*o*n;s=m.add(e,m.multiplyByScalar(r,a,vk),vk)}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)?(m.clone(e.center,n._occluderPosition),n._occluderRadius=e.radius,n.cameraPosition=t,n):new Jc(e,t)};var fxe=new m;Jc.prototype.isPointVisible=function(e){if(this._horizonDistance!==Number.MAX_VALUE){let t=m.subtract(e,this._occluderPosition,fxe),n=this._occluderRadius;if(n=m.magnitudeSquared(t)-n*n,n>0)return n=Math.sqrt(n)+this._horizonDistance,t=m.subtract(e,this._cameraPosition,t),n*n>m.magnitudeSquared(t)}return!1};var kht=new m;Jc.prototype.isBoundingSphereVisible=function(e){let t=m.clone(e.center,kht),n=e.radius;if(this._horizonDistance!==Number.MAX_VALUE){let i=m.subtract(t,this._occluderPosition,fxe),o=this._occluderRadius-n;if(o=m.magnitudeSquared(i)-o*o,n<this._occluderRadius)return o>0?(o=Math.sqrt(o)+this._horizonDistance,i=m.subtract(t,this._cameraPosition,i),o*o+n*n>m.magnitudeSquared(i)):!1;if(o>0){i=m.subtract(t,this._cameraPosition,i);let r=m.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 Yht=new m;Jc.prototype.computeVisibility=function(e){let t=m.clone(e.center),n=e.radius;if(n>this._occluderRadius)return Zr.FULL;if(this._horizonDistance!==Number.MAX_VALUE){let i=m.subtract(t,this._occluderPosition,Yht),o=this._occluderRadius-n,r=m.magnitudeSquared(i);if(o=r-o*o,o>0){o=Math.sqrt(o)+this._horizonDistance,i=m.subtract(t,this._cameraPosition,i);let s=m.magnitudeSquared(i);return o*o+n*n<s?Zr.NONE:(o=this._occluderRadius+n,o=r-o*o,o>0?(o=Math.sqrt(o)+this._horizonDistance,s<o*o+n*n?Zr.FULL:Zr.PARTIAL):(i=m.subtract(t,this._horizonPlanePosition,i),m.dot(i,this._horizonPlaneNormal)>-n?Zr.PARTIAL:Zr.FULL))}}return Zr.NONE};var Nk=new m;Jc.computeOccludeePoint=function(e,t,n){let i=m.clone(t),o=m.clone(e.center),r=e.radius,s=n.length,a=m.normalize(m.subtract(i,o,Nk),Nk),c=-m.dot(a,o),d=Jc._anyRotationVector(o,a,c),u=Jc._horizonToPlaneNormalDotProduct(e,a,c,d,n[0]);if(!u)return;let h;for(let g=1;g<s;++g){if(h=Jc._horizonToPlaneNormalDotProduct(e,a,c,d,n[g]),!h)return;h<u&&(u=h)}if(u<.0017453283658983088)return;let p=r/u;return m.add(o,m.multiplyByScalar(a,p,Nk),Nk)};var Oht=[];Jc.computeOccludeePointFromRectangle=function(e,t){t=t??ie.default;let n=le.subsample(e,t,0,Oht),i=ue.fromPoints(n),o=m.ZERO;if(!m.equals(o,i.center))return Jc.computeOccludeePoint(new ue(o,t.minimumRadius),i.center,n)};var Hht=new m;Jc._anyRotationVector=function(e,t,n){let i=m.abs(t,Hht),o=i.x>i.y?0:1;(o===0&&i.z>i.x||o===1&&i.z>i.y)&&(o=2);let r=new m,s;o===0?(i.x=e.x,i.y=e.y+1,i.z=e.z+1,s=m.UNIT_X):o===1?(i.x=e.x+1,i.y=e.y,i.z=e.z+1,s=m.UNIT_Y):(i.x=e.x+1,i.y=e.y+1,i.z=e.z,s=m.UNIT_Z);let a=(m.dot(t,i)+n)/-m.dot(t,s);return m.normalize(m.subtract(m.add(i,m.multiplyByScalar(s,a,r),i),e,i),i)};var zht=new m;Jc._rotationVector=function(e,t,n,i,o){let r=m.subtract(i,e,zht);if(r=m.normalize(r,r),m.dot(t,r)<.9999999847691291){let s=m.cross(t,r,r);if(m.magnitude(s)>Z.EPSILON13)return m.normalize(s,new m)}return o};var B7=new m,Kht=new m,Dk=new m,hxe=new m;Jc._horizonToPlaneNormalDotProduct=function(e,t,n,i,o){let r=m.clone(o,B7),s=m.clone(e.center,Kht),a=e.radius,c=m.subtract(s,r,Dk),d=m.magnitudeSquared(c),u=a*a;if(d<u)return!1;let h=d-u,p=Math.sqrt(h),f=1/Math.sqrt(d),x=p*f*p;c=m.normalize(c,c);let I=m.add(r,m.multiplyByScalar(c,x,hxe),hxe),_=Math.sqrt(h-x*x),E=this._rotationVector(s,t,n,r,i),S=m.fromElements(E.x*E.x*c.x+(E.x*E.y-E.z)*c.y+(E.x*E.z+E.y)*c.z,(E.x*E.y+E.z)*c.x+E.y*E.y*c.y+(E.y*E.z-E.x)*c.z,(E.x*E.z-E.y)*c.x+(E.y*E.z+E.x)*c.y+E.z*E.z*c.z,B7);S=m.normalize(S,S);let R=m.multiplyByScalar(S,_,B7);E=m.normalize(m.subtract(m.add(I,R,Dk),s,Dk),Dk);let G=m.dot(t,E);E=m.normalize(m.subtract(m.subtract(I,R,E),s,E),E);let B=m.dot(t,E);return G<B?G:B};var zP=Jc;var PPi=y(C(),1);var ZPi=y(C(),1);function Lp(e){e=e??Y.EMPTY_OBJECT,this.left=e.left,this._left=void 0,this.right=e.right,this._right=void 0,this.top=e.top,this._top=void 0,this.bottom=e.bottom,this._bottom=void 0,this.near=e.near??1,this._near=this.near,this.far=e.far??5e8,this._far=this.far,this._cullingVolume=new Xs,this._perspectiveMatrix=new X,this._infinitePerspective=new X}function w7(e){let{top:t,bottom:n,right:i,left:o,near:r,far:s}=e;(t!==e._top||n!==e._bottom||o!==e._left||i!==e._right||r!==e._near||s!==e._far)&&(e._left=o,e._right=i,e._top=t,e._bottom=n,e._near=r,e._far=s,e._perspectiveMatrix=X.computePerspectiveOffCenter(o,i,n,t,r,s,e._perspectiveMatrix),e._infinitePerspective=X.computeInfinitePerspectiveOffCenter(o,i,n,t,r,e._infinitePerspective))}Object.defineProperties(Lp.prototype,{projectionMatrix:{get:function(){return w7(this),this._perspectiveMatrix}},infiniteProjectionMatrix:{get:function(){return w7(this),this._infinitePerspective}}});var Jht=new m,jht=new m,qht=new m,$ht=new m;Lp.prototype.computeCullingVolume=function(e,t,n){let i=this._cullingVolume.planes,o=this.top,r=this.bottom,s=this.right,a=this.left,c=this.near,d=this.far,u=m.cross(t,n,Jht),h=jht;m.multiplyByScalar(t,c,h),m.add(e,h,h);let p=qht;m.multiplyByScalar(t,d,p),m.add(e,p,p);let g=$ht;m.multiplyByScalar(u,a,g),m.add(h,g,g),m.subtract(g,e,g),m.normalize(g,g),m.cross(g,n,g),m.normalize(g,g);let f=i[0];return l(f)||(f=i[0]=new ce),f.x=g.x,f.y=g.y,f.z=g.z,f.w=-m.dot(g,e),m.multiplyByScalar(u,s,g),m.add(h,g,g),m.subtract(g,e,g),m.cross(n,g,g),m.normalize(g,g),f=i[1],l(f)||(f=i[1]=new ce),f.x=g.x,f.y=g.y,f.z=g.z,f.w=-m.dot(g,e),m.multiplyByScalar(n,r,g),m.add(h,g,g),m.subtract(g,e,g),m.cross(u,g,g),m.normalize(g,g),f=i[2],l(f)||(f=i[2]=new ce),f.x=g.x,f.y=g.y,f.z=g.z,f.w=-m.dot(g,e),m.multiplyByScalar(n,o,g),m.add(h,g,g),m.subtract(g,e,g),m.cross(g,u,g),m.normalize(g,g),f=i[3],l(f)||(f=i[3]=new ce),f.x=g.x,f.y=g.y,f.z=g.z,f.w=-m.dot(g,e),f=i[4],l(f)||(f=i[4]=new ce),f.x=t.x,f.y=t.y,f.z=t.z,f.w=-m.dot(t,h),m.negate(t,g),f=i[5],l(f)||(f=i[5]=new ce),f.x=g.x,f.y=g.y,f.z=g.z,f.w=-m.dot(g,p),this._cullingVolume};Lp.prototype.getPixelDimensions=function(e,t,n,i,o){w7(this);let r=1/this.near,s=this.top*r,a=2*i*n*s/t;s=this.right*r;let c=2*i*n*s/e;return o.x=c,o.y=a,o};Lp.prototype.clone=function(e){return l(e)||(e=new Lp),e.right=this.right,e.left=this.left,e.top=this.top,e.bottom=this.bottom,e.near=this.near,e.far=this.far,e._left=void 0,e._right=void 0,e._top=void 0,e._bottom=void 0,e._near=void 0,e._far=void 0,e};Lp.prototype.equals=function(e){return l(e)&&e instanceof Lp&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far};Lp.prototype.equalsEpsilon=function(e,t,n){return e===this||l(e)&&e instanceof Lp&&Z.equalsEpsilon(this.right,e.right,t,n)&&Z.equalsEpsilon(this.left,e.left,t,n)&&Z.equalsEpsilon(this.top,e.top,t,n)&&Z.equalsEpsilon(this.bottom,e.bottom,t,n)&&Z.equalsEpsilon(this.near,e.near,t,n)&&Z.equalsEpsilon(this.far,e.far,t,n)};var vl=Lp;function Id(e){e=e??Y.EMPTY_OBJECT,this._offCenterFrustum=new vl,this.fov=e.fov,this._fov=void 0,this._fovy=void 0,this._sseDenominator=void 0,this.aspectRatio=e.aspectRatio,this._aspectRatio=void 0,this.near=e.near??1,this._near=this.near,this.far=e.far??5e8,this._far=this.far,this.xOffset=e.xOffset??0,this._xOffset=this.xOffset,this.yOffset=e.yOffset??0,this._yOffset=this.yOffset}Id.packedLength=6;Id.pack=function(e,t,n){return n=n??0,t[n++]=e.fov,t[n++]=e.aspectRatio,t[n++]=e.near,t[n++]=e.far,t[n++]=e.xOffset,t[n]=e.yOffset,t};Id.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Id),n.fov=e[t++],n.aspectRatio=e[t++],n.near=e[t++],n.far=e[t++],n.xOffset=e[t++],n.yOffset=e[t],n};function mf(e){if(!(e.fov!==e._fov||e.aspectRatio!==e._aspectRatio||e.near!==e._near||e.far!==e._far||e.xOffset!==e._xOffset||e.yOffset!==e._yOffset))return;e._aspectRatio=e.aspectRatio,e._fov=e.fov,e._fovy=e.aspectRatio<=1?e.fov:Math.atan(Math.tan(e.fov*.5)/e.aspectRatio)*2,e._near=e.near,e._far=e.far,e._sseDenominator=2*Math.tan(.5*e._fovy),e._xOffset=e.xOffset,e._yOffset=e.yOffset;let n=e._offCenterFrustum;n.top=e.near*Math.tan(.5*e._fovy),n.bottom=-n.top,n.right=e.aspectRatio*n.top,n.left=-n.right,n.near=e.near,n.far=e.far,n.right+=e.xOffset,n.left+=e.xOffset,n.top+=e.yOffset,n.bottom+=e.yOffset}Object.defineProperties(Id.prototype,{projectionMatrix:{get:function(){return mf(this),this._offCenterFrustum.projectionMatrix}},infiniteProjectionMatrix:{get:function(){return mf(this),this._offCenterFrustum.infiniteProjectionMatrix}},fovy:{get:function(){return mf(this),this._fovy}},sseDenominator:{get:function(){return mf(this),this._sseDenominator}},offCenterFrustum:{get:function(){return mf(this),this._offCenterFrustum}}});Id.prototype.computeCullingVolume=function(e,t,n){return mf(this),this._offCenterFrustum.computeCullingVolume(e,t,n)};Id.prototype.getPixelDimensions=function(e,t,n,i,o){return mf(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,o)};Id.prototype.clone=function(e){return l(e)||(e=new Id),e.aspectRatio=this.aspectRatio,e.fov=this.fov,e.near=this.near,e.far=this.far,e._aspectRatio=void 0,e._fov=void 0,e._near=void 0,e._far=void 0,this._offCenterFrustum.clone(e._offCenterFrustum),e};Id.prototype.equals=function(e){return!l(e)||!(e instanceof Id)?!1:(mf(this),mf(e),this.fov===e.fov&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))};Id.prototype.equalsEpsilon=function(e,t,n){return!l(e)||!(e instanceof Id)?!1:(mf(this),mf(e),Z.equalsEpsilon(this.fov,e.fov,t,n)&&Z.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var Ni=Id;var KPi=y(C(),1);function KP(){this._colorTexture=void 0,this._drawCommand=void 0}Object.defineProperties(KP.prototype,{colorTexture:{get:function(){return this._colorTexture}}});function eft(e,t,n){let i=t.createViewportQuadCommand(lP,{framebuffer:n,renderState:Qe.fromCache({viewport:new Ke(0,0,256,256)})});e._drawCommand=i}KP.prototype.update=function(e){if(!l(this._colorTexture)){let t=e.context,n=new Wt({context:t,width:256,height:256,pixelFormat:tt.RGBA,pixelDatatype:Ye.UNSIGNED_BYTE,sampler:sn.NEAREST});this._colorTexture=n;let i=new jr({context:t,colorTextures:[n],destroyAttachments:!1});eft(this,t,i),this._drawCommand.execute(t),i.destroy(),this._drawCommand.shaderProgram=this._drawCommand.shaderProgram&&this._drawCommand.shaderProgram.destroy()}};KP.prototype.isDestroyed=function(){return!1};KP.prototype.destroy=function(){return this._colorTexture=this._colorTexture&&this._colorTexture.destroy(),me(this)};var JP=KP;var vMi=y(C(),1);var aMi=y(C(),1);var bxe={};function tft(e,t,n){let i,o,r;if(e instanceof Ni){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 vl)return i=e.near,o=e.top,r=e.right,Math.max(t*i/r,n*i/o);return Math.max(t,n)}var nft=new m,pxe=new m;function yxe(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 Z.lerp(e,-Z.PI_OVER_TWO,p)}let h=(u-r)/c;return Z.lerp(-Z.PI_OVER_TWO,t,1-h)}}return function(o){return Z.lerp(e,t,o)}}function W7(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,h=e.frustum,p=m.subtract(a,c,nft),g=m.magnitude(m.multiplyByScalar(d,m.dot(p,d),pxe)),f=m.magnitude(m.multiplyByScalar(u,m.dot(p,u),pxe));r=Math.min(tft(h,g,f)*.2,1e9)}if(s<r){let d=-Math.pow((r-n)*1e6,.125),u=Math.pow((r-i)*1e6,1/8);return function(h){let p=h*(u-d)+d;return-Math.pow(p,8)/1e6+r}}return function(a){return Z.lerp(n,i,a)}}function jP(e,t){return Z.equalsEpsilon(e,Z.TWO_PI,Z.EPSILON11)&&(e=0),t>e+Math.PI?e+=Z.TWO_PI:t<e-Math.PI&&(e-=Z.TWO_PI),e}var Cxe=new m;function ift(e,t,n,i,o,r,s,a){let c=e.camera,d=m.clone(c.position,Cxe),u=c.pitch,h=jP(c.heading,i),p=jP(c.roll,r),g=W7(c,n,d.z,n.z,s),f=yxe(u,o,g,a);function b(x){let I=x.time/t;c.setView({orientation:{heading:Z.lerp(h,i,I),pitch:f(I),roll:Z.lerp(p,r,I)}}),D.lerp(d,n,I,c.position),c.position.z=g(I)}return b}function oft(e,t){e.longitude<t.longitude?e.longitude+=Z.TWO_PI:t.longitude+=Z.TWO_PI}function rft(e,t){let n=e.longitude-t.longitude;n<-Z.PI?e.longitude+=Z.TWO_PI:n>Z.PI&&(t.longitude+=Z.TWO_PI)}var sft=new ge,aft=new ge;function cft(e,t,n,i,o,r,s,a,c,d){let u=e.camera,p=e.mapProjection.ellipsoid,g=ge.clone(u.positionCartographic,sft),f=u.pitch,b=jP(u.heading,i),x=jP(u.roll,r),I=p.cartesianToCartographic(n,aft);g.longitude=Z.zeroToTwoPi(g.longitude),I.longitude=Z.zeroToTwoPi(I.longitude);let _=!1;if(l(a)){let G=Z.zeroToTwoPi(a),B=Math.min(g.longitude,I.longitude),w=Math.max(g.longitude,I.longitude),F=G>=B&&G<=w;if(l(c)){let P=Math.abs(g.longitude-I.longitude),A=Z.TWO_PI-P;(F?P:A)<(F?A:P)*c&&!F&&(_=!0)}else F||(_=!0)}_?oft(g,I):rft(g,I);let E=W7(u,n,g.height,I.height,s),S=yxe(f,o,E,d);function R(){let G=g.longitude,B=I.longitude,w=g.latitude,F=I.latitude;return function(A){let T=A.time/t,L=m.fromRadians(Z.lerp(G,B,T),Z.lerp(w,F,T),E(T),p);u.setView({destination:L,orientation:{heading:Z.lerp(b,i,T),pitch:S(T),roll:Z.lerp(x,r,T)}})}}return R()}function lft(e,t,n,i,o,r,s){let a=e.camera,c=m.clone(a.position,Cxe),d=jP(a.heading,i),u=a.frustum.right-a.frustum.left,h=W7(a,n,u,n.z,s);function p(g){let f=g.time/t;a.setView({orientation:{heading:Z.lerp(d,i,f)}}),D.lerp(c,n,f,a.position);let b=h(f),x=a.frustum,I=x.top/x.right,_=(b-(x.right-x.left))*.5;x.right+=_,x.left-=_,x.top=I*x.right,x.bottom=-x.top}return p}var Axe=new ge,dft=new m;function X7(e,t){return{startObject:{},stopObject:{},duration:0,complete:e,cancel:t}}function gxe(e,t){function n(){typeof t=="function"&&t(),e.enableInputs=!0}return n}bxe.createTween=function(e,t){t=t??Y.EMPTY_OBJECT;let n=t.destination,i=e.mode;if(i===re.MORPHING)return X7();let o=t.convert??!0,r=e.mapProjection,s=r.ellipsoid,a=t.maximumHeight,c=t.flyOverLongitude,d=t.flyOverLongitudeWeight,u=t.pitchAdjustHeight,h=t.easingFunction;o&&i!==re.SCENE3D&&(s.cartesianToCartographic(n,Axe),n=r.project(Axe,dft));let p=e.camera,g=t.endTransform;l(g)&&p._setTransform(g);let f=t.duration;l(f)||(f=Math.ceil(m.distance(p.position,n)/1e6)+2,f=Math.min(f,3));let b=t.heading??0,x=t.pitch??-Z.PI_OVER_TWO,I=t.roll??0,_=e.screenSpaceCameraController;_.enableInputs=!1;let E=gxe(_,t.complete),S=gxe(_,t.cancel),R=p.frustum,G=e.mode===re.SCENE2D;if(G=G&&D.equalsEpsilon(p.position,n,Z.EPSILON6),G=G&&Z.equalsEpsilon(Math.max(R.right-R.left,R.top-R.bottom),n.z,Z.EPSILON6),G=G||e.mode!==re.SCENE2D&&m.equalsEpsilon(n,p.position,Z.EPSILON10),G=G&&Z.equalsEpsilon(Z.negativePiToPi(b),Z.negativePiToPi(p.heading),Z.EPSILON10)&&Z.equalsEpsilon(Z.negativePiToPi(x),Z.negativePiToPi(p.pitch),Z.EPSILON10)&&Z.equalsEpsilon(Z.negativePiToPi(I),Z.negativePiToPi(p.roll),Z.EPSILON10),G)return X7(E,S);let B=new Array(4);if(B[re.SCENE2D]=lft,B[re.SCENE3D]=cft,B[re.COLUMBUS_VIEW]=ift,f<=0)return X7(function(){B[i](e,1,n,b,x,I,a,c,d,u)({time:1}),typeof E=="function"&&E()},S);let w=B[i](e,f,n,b,x,I,a,c,d,u);if(!l(h)){let F=p.positionCartographic.height,P=i===re.SCENE3D?s.cartesianToCartographic(n).height:n.z;F>P&&F>11500?h=ms.CUBIC_OUT:h=ms.QUINTIC_IN_OUT}return{duration:f,easingFunction:h,startObject:{time:0},stopObject:{time:f},update:w,complete:E,cancel:S}};var qP=bxe;var lMi=y(C(),1),uft={ROTATE:0,INFINITE_SCROLL:1},_d=Object.freeze(uft);function un(e){this._scene=e,this._transform=X.clone(X.IDENTITY),this._invTransform=X.clone(X.IDENTITY),this._actualTransform=X.clone(X.IDENTITY),this._actualInvTransform=X.clone(X.IDENTITY),this._transformChanged=!1,this.position=new m,this._position=new m,this._positionWC=new m,this._positionCartographic=new ge,this._oldPositionWC=void 0,this.positionWCDeltaMagnitude=0,this.positionWCDeltaMagnitudeLastFrame=0,this.timeSinceMoved=0,this._lastMovedTimestamp=0,this.direction=new m,this._direction=new m,this._directionWC=new m,this.up=new m,this._up=new m,this._upWC=new m,this.right=new m,this._right=new m,this._rightWC=new m,this.frustum=new Ni,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=Z.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 Ce,this._moveEnd=new Ce,this._changed=new Ce,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 X,this._invViewMatrix=new X,Rxe(this),this._mode=re.SCENE3D,this._modeChanged=!0;let t=e.mapProjection;this._projection=t,this._maxCoord=t.project(new ge(Math.PI,Z.PI_OVER_TWO)),this._max2Dfrustum=void 0,Nxe(this,un.DEFAULT_VIEW_RECTANGLE,this.position,!0);let n=m.magnitude(this.position);n+=n*un.DEFAULT_VIEW_FACTOR,m.normalize(this.position,this.position),m.multiplyByScalar(this.position,n,this.position)}un.TRANSFORM_2D=new X(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);un.TRANSFORM_2D_INVERSE=X.inverseTransformation(un.TRANSFORM_2D,new X);un.DEFAULT_VIEW_RECTANGLE=le.fromDegrees(-95,-20,-70,90);un.DEFAULT_VIEW_FACTOR=.5;un.DEFAULT_OFFSET=new Vm(0,-Z.PI_OVER_FOUR,0);function Rxe(e){X.computeView(e._position,e._direction,e._up,e._right,e._viewMatrix),X.multiply(e._viewMatrix,e._actualInvTransform,e._viewMatrix),X.inverseTransformation(e._viewMatrix,e._invViewMatrix)}function mft(e){if(!l(e._oldPositionWC))e._oldPositionWC=m.clone(e.positionWC,e._oldPositionWC);else{e.positionWCDeltaMagnitudeLastFrame=e.positionWCDeltaMagnitude;let t=m.subtract(e.positionWC,e._oldPositionWC,e._oldPositionWC);e.positionWCDeltaMagnitude=m.magnitude(t),e._oldPositionWC=m.clone(e.positionWC,e._oldPositionWC),e.positionWCDeltaMagnitude>0?(e.timeSinceMoved=0,e._lastMovedTimestamp=Fi()):e.timeSinceMoved=Math.max(Fi()-e._lastMovedTimestamp,0)/1e3}}un.prototype.canPreloadFlight=function(){return l(this._currentFlight)&&this._mode!==re.SCENE2D};un.prototype._updateCameraChanged=function(){let e=this;if(mft(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)%Z.TWO_PI;i=i>Z.PI?Z.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)%Z.TWO_PI;s=s>Z.PI?Z.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===re.SCENE2D){if(!l(e._changedFrustum)){e._changedPosition=m.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone();return}let p=e.position,g=e._changedPosition,f=e.frustum,b=e._changedFrustum,x=p.x+f.left,I=p.x+f.right,_=g.x+b.left,E=g.x+b.right,S=p.y+f.bottom,R=p.y+f.top,G=g.y+b.bottom,B=g.y+b.top,w=Math.max(x,_),F=Math.min(I,E),P=Math.max(S,G),A=Math.min(R,B),T;if(w>=F||P>=R)T=1;else{let L=b;x<_&&I>E&&S<G&&R>B&&(L=f),T=1-(F-w)*(A-P)/((L.right-L.left)*(L.top-L.bottom))}T>t&&(e._changed.raiseEvent(T),e._changedPosition=m.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone(e._changedFrustum));return}if(!l(e._changedDirection)){e._changedPosition=m.clone(e.positionWC,e._changedPosition),e._changedDirection=m.clone(e.directionWC,e._changedDirection);return}let c=Z.acosClamped(m.dot(e.directionWC,e._changedDirection)),d;l(e.frustum.fovy)?d=c/(e.frustum.fovy*.5):d=c;let h=m.distance(e.positionWC,e._changedPosition)/e.positionCartographic.height;(d>t||h>t)&&(e._changed.raiseEvent(Math.max(d,h)),e._changedPosition=m.clone(e.positionWC,e._changedPosition),e._changedDirection=m.clone(e.directionWC,e._changedDirection))};function hft(e){Dt.basisTo2D(e._projection,e._transform,e._actualTransform)}var fft=new ge,pft=new m,Qk=new m,Aft=new ce,gft=new ce,bft=new ce,yft=new ce,Cft=new ce;function xft(e){let t=e._projection,n=t.ellipsoid,i=X.getColumn(e._transform,3,Aft),o=n.cartesianToCartographic(i,fft),r=t.project(o,pft),s=gft;s.x=r.z,s.y=r.x,s.z=r.y,s.w=1;let a=ce.clone(ce.UNIT_X,Cft),c=ce.add(X.getColumn(e._transform,0,Qk),i,Qk);n.cartesianToCartographic(c,o),t.project(o,r);let d=bft;d.x=r.z,d.y=r.x,d.z=r.y,d.w=0,m.subtract(d,s,d),d.x=0;let u=yft;if(m.magnitudeSquared(d)>Z.EPSILON10)m.cross(a,d,u);else{let h=ce.add(X.getColumn(e._transform,1,Qk),i,Qk);n.cartesianToCartographic(h,o),t.project(o,r),u.x=r.z,u.y=r.x,u.z=r.y,u.w=0,m.subtract(u,s,u),u.x=0,m.magnitudeSquared(u)<Z.EPSILON10&&(ce.clone(ce.UNIT_Y,d),ce.clone(ce.UNIT_Z,u))}m.cross(u,a,d),m.normalize(d,d),m.cross(a,d,u),m.normalize(u,u),X.setColumn(e._actualTransform,0,d,e._actualTransform),X.setColumn(e._actualTransform,1,u,e._actualTransform),X.setColumn(e._actualTransform,2,a,e._actualTransform),X.setColumn(e._actualTransform,3,s,e._actualTransform)}var F7=new m;function qc(e){let t=e._mode,n=!1,i=0;t===re.SCENE2D&&(i=e.frustum.right-e.frustum.left,n=i!==e._positionCartographic.height);let o=e._position,r=!m.equals(o,e.position)||n;r&&(o=m.clone(e.position,e._position));let s=e._direction,a=!m.equals(s,e.direction);a&&(m.normalize(e.direction,e.direction),s=m.clone(e.direction,e._direction));let c=e._up,d=!m.equals(c,e.up);d&&(m.normalize(e.up,e.up),c=m.clone(e.up,e._up));let u=e._right,h=!m.equals(u,e.right);h&&(m.normalize(e.right,e.right),u=m.clone(e.right,e._right));let p=e._transformChanged||e._modeChanged;e._transformChanged=!1,p&&(X.inverseTransformation(e._transform,e._invTransform),e._mode===re.COLUMBUS_VIEW||e._mode===re.SCENE2D?X.equals(X.IDENTITY,e._transform)?X.clone(un.TRANSFORM_2D,e._actualTransform):e._mode===re.COLUMBUS_VIEW?hft(e):xft(e):X.clone(e._transform,e._actualTransform),X.inverseTransformation(e._actualTransform,e._actualInvTransform),e._modeChanged=!1);let g=e._actualTransform;if(r||p)if(e._positionWC=X.multiplyByPoint(g,o,e._positionWC),t===re.SCENE3D||t===re.MORPHING)e._positionCartographic=e._projection.ellipsoid.cartesianToCartographic(e._positionWC,e._positionCartographic);else{let f=F7;f.x=e._positionWC.y,f.y=e._positionWC.z,f.z=e._positionWC.x,t===re.SCENE2D&&(f.z=i),e._projection.unproject(f,e._positionCartographic)}if(a||d||h){let f=m.dot(s,m.cross(c,u,F7));if(Math.abs(1-f)>Z.EPSILON2){let b=1/m.magnitudeSquared(c),x=m.dot(c,s)*b,I=m.multiplyByScalar(s,x,F7);c=m.normalize(m.subtract(c,I,e._up),e._up),m.clone(c,e.up),u=m.cross(s,c,e._right),m.clone(u,e.right)}}(a||p)&&(e._directionWC=X.multiplyByPointAsVector(g,s,e._directionWC),m.normalize(e._directionWC,e._directionWC)),(d||p)&&(e._upWC=X.multiplyByPointAsVector(g,c,e._upWC),m.normalize(e._upWC,e._upWC)),(h||p)&&(e._rightWC=X.multiplyByPointAsVector(g,u,e._rightWC),m.normalize(e._rightWC,e._rightWC)),(r||a||d||h||p)&&Rxe(e)}function Vxe(e,t){let n;return Z.equalsEpsilon(Math.abs(e.z),1,Z.EPSILON3)?n=Math.atan2(t.y,t.x)-Z.PI_OVER_TWO:n=Math.atan2(e.y,e.x)-Z.PI_OVER_TWO,Z.TWO_PI-Z.zeroToTwoPi(n)}function Gxe(e){return Z.PI_OVER_TWO-Z.acosClamped(e.z)}function Zxe(e,t,n){let i=0;return Z.equalsEpsilon(Math.abs(e.z),1,Z.EPSILON3)||(i=Math.atan2(-n.z,t.z),i=Z.zeroToTwoPi(i+Z.TWO_PI)),i}var Yk=new X,Ok=new X;Object.defineProperties(un.prototype,{transform:{get:function(){return this._transform}},inverseTransform:{get:function(){return qc(this),this._invTransform}},viewMatrix:{get:function(){return qc(this),this._viewMatrix}},inverseViewMatrix:{get:function(){return qc(this),this._invViewMatrix}},positionCartographic:{get:function(){return qc(this),this._positionCartographic}},positionWC:{get:function(){return qc(this),this._positionWC}},directionWC:{get:function(){return qc(this),this._directionWC}},upWC:{get:function(){return qc(this),this._upWC}},rightWC:{get:function(){return qc(this),this._rightWC}},heading:{get:function(){if(this._mode!==re.MORPHING){let e=this._projection.ellipsoid,t=X.clone(this._transform,Yk),n=Dt.eastNorthUpToFixedFrame(this.positionWC,e,Ok);this._setTransform(n);let i=Vxe(this.direction,this.up);return this._setTransform(t),i}}},pitch:{get:function(){if(this._mode!==re.MORPHING){let e=this._projection.ellipsoid,t=X.clone(this._transform,Yk),n=Dt.eastNorthUpToFixedFrame(this.positionWC,e,Ok);this._setTransform(n);let i=Gxe(this.direction);return this._setTransform(t),i}}},roll:{get:function(){if(this._mode!==re.MORPHING){let e=this._projection.ellipsoid,t=X.clone(this._transform,Yk),n=Dt.eastNorthUpToFixedFrame(this.positionWC,e,Ok);this._setTransform(n);let i=Zxe(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}}});un.prototype.update=function(e){let t=!1;if(e!==this._mode&&(this._mode=e,this._modeChanged=e!==re.MORPHING,t=this._mode===re.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===re.SCENE2D&&Wxe(this,this.position)};var Ift=new m,_ft=new m,Eft=new m;un.prototype._setTransform=function(e){let t=m.clone(this.positionWC,Ift),n=m.clone(this.upWC,_ft),i=m.clone(this.directionWC,Eft);X.clone(e,this._transform),this._transformChanged=!0,qc(this);let o=this._actualInvTransform;X.multiplyByPoint(o,t,this.position),X.multiplyByPointAsVector(o,i,this.direction),X.multiplyByPointAsVector(o,n,this.up),m.cross(this.direction,this.up,this.right),qc(this)};var Tft=new D,Sft=new En,Lft=new m,Rft=new m;function Bxe(e){if(!X.equals(X.IDENTITY,e.transform))return m.magnitude(e.position);let t=e._scene,n=t.globe,i=Tft;i.x=t.drawingBufferWidth/t.pixelRatio/2,i.y=t.drawingBufferHeight/t.pixelRatio/2;let o;if(l(n)){let a=e.getPickRay(i,Sft);o=n.pickWorldCoordinates(a,t,!0,Lft)}let r;t.pickPositionSupported&&(r=t.pickPositionWorldCoordinates(i,Rft));let s;if(l(o)||l(r)){let a=l(r)?m.distance(r,e.positionWC):Number.POSITIVE_INFINITY,c=l(o)?m.distance(o,e.positionWC):Number.POSITIVE_INFINITY;s=Math.min(a,c)}else s=Math.max(e.positionCartographic.height,0);return s}un.prototype._adjustOrthographicFrustum=function(e){this.frustum instanceof gn&&(!e&&this._positionCartographic.height<15e4||(this.frustum.width=Bxe(this)))};var Hk=new m,D7=new X,Vft=new X,Q7=new Pe,U7=new $,wxe=new ge;function Gft(e,t,n){let i=X.clone(e.transform,D7),o=Dt.eastNorthUpToFixedFrame(t,e._projection.ellipsoid,Vft);e._setTransform(o),m.clone(m.ZERO,e.position),n.heading=n.heading-Z.PI_OVER_TWO;let r=Pe.fromHeadingPitchRoll(n,Q7),s=$.fromQuaternion(r,U7);$.getColumn(s,0,e.direction),$.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right),e._setTransform(i),e._adjustOrthographicFrustum(!0)}function Zft(e,t,n,i){let o=X.clone(e.transform,D7);if(e._setTransform(X.IDENTITY),!m.equals(t,e.positionWC)){if(i){let a=e._projection,c=a.ellipsoid.cartesianToCartographic(t,wxe);t=a.project(c,Hk)}m.clone(t,e.position)}n.heading=n.heading-Z.PI_OVER_TWO;let r=Pe.fromHeadingPitchRoll(n,Q7),s=$.fromQuaternion(r,U7);$.getColumn(s,0,e.direction),$.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right),e._setTransform(o),e._adjustOrthographicFrustum(!0)}function Bft(e,t,n,i){let o=X.clone(e.transform,D7);if(e._setTransform(X.IDENTITY),!m.equals(t,e.positionWC)){if(i){let c=e._projection,d=c.ellipsoid.cartesianToCartographic(t,wxe);t=c.project(d,Hk)}D.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===_d.ROTATE){n.heading=n.heading-Z.PI_OVER_TWO,n.pitch=-Z.PI_OVER_TWO,n.roll=0;let r=Pe.fromHeadingPitchRoll(n,Q7),s=$.fromQuaternion(r,U7);$.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right)}e._setTransform(o)}var wft=new m,Xft=new m,Wft=new m;function Xxe(e,t,n,i){let o=m.clone(n.direction,wft),r=m.clone(n.up,Xft);if(e._scene.mode===re.SCENE3D){let a=e._projection.ellipsoid,c=Dt.eastNorthUpToFixedFrame(t,a,Yk),d=X.inverseTransformation(c,Ok);X.multiplyByPointAsVector(d,o,o),X.multiplyByPointAsVector(d,r,r)}let s=m.cross(o,r,Wft);return i.heading=Vxe(o,r),i.pitch=Gxe(o),i.roll=Zxe(o,r,s),i}var N7={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},sL=new ic;un.prototype.setView=function(e){e=e??Y.EMPTY_OBJECT;let t=e.orientation??Y.EMPTY_OBJECT,n=this._mode;if(n===re.MORPHING)return;l(e.endTransform)&&this._setTransform(e.endTransform);let i=e.convert??!0,o=e.destination??m.clone(this.positionWC,Hk);l(o)&&l(o.west)&&(o=this.getRectangleCameraCoordinates(o,Hk),i=!1),l(t.direction)&&(t=Xxe(this,o,t,N7.orientation)),sL.heading=t.heading??0,sL.pitch=t.pitch??-Z.PI_OVER_TWO,sL.roll=t.roll??0,n===re.SCENE3D?Gft(this,o,sL):n===re.SCENE2D?Bft(this,o,sL,i):Zft(this,o,sL,i)};var Fft=new m;un.prototype.flyHome=function(e){let t=this._mode;if(t===re.MORPHING&&this._scene.completeMorph(),t===re.SCENE2D)this.flyTo({destination:un.DEFAULT_VIEW_RECTANGLE,duration:e,endTransform:X.IDENTITY});else if(t===re.SCENE3D){let n=this.getRectangleCameraCoordinates(un.DEFAULT_VIEW_RECTANGLE),i=m.magnitude(n);i+=i*un.DEFAULT_VIEW_FACTOR,m.normalize(n,n),m.multiplyByScalar(n,i,n),this.flyTo({destination:n,duration:e,endTransform:X.IDENTITY})}else if(t===re.COLUMBUS_VIEW){let n=this._projection.ellipsoid.maximumRadius,i=new m(0,-1,1);i=m.multiplyByScalar(m.normalize(i,i),5*n,i),this.flyTo({destination:i,duration:e,orientation:{heading:0,pitch:-Math.acos(m.normalize(i,Fft).z),roll:0},endTransform:X.IDENTITY,convert:!1})}};un.prototype.worldToCameraCoordinates=function(e,t){return l(t)||(t=new ce),qc(this),X.multiplyByVector(this._actualInvTransform,e,t)};un.prototype.worldToCameraCoordinatesPoint=function(e,t){return l(t)||(t=new m),qc(this),X.multiplyByPoint(this._actualInvTransform,e,t)};un.prototype.worldToCameraCoordinatesVector=function(e,t){return l(t)||(t=new m),qc(this),X.multiplyByPointAsVector(this._actualInvTransform,e,t)};un.prototype.cameraToWorldCoordinates=function(e,t){return l(t)||(t=new ce),qc(this),X.multiplyByVector(this._actualTransform,e,t)};un.prototype.cameraToWorldCoordinatesPoint=function(e,t){return l(t)||(t=new m),qc(this),X.multiplyByPoint(this._actualTransform,e,t)};un.prototype.cameraToWorldCoordinatesVector=function(e,t){return l(t)||(t=new m),qc(this),X.multiplyByPointAsVector(this._actualTransform,e,t)};function Wxe(e,t){let n=e._scene.mapMode2D===_d.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 xxe=new m;un.prototype.move=function(e,t){let n=this.position;m.multiplyByScalar(e,t,xxe),m.add(n,xxe,n),this._mode===re.SCENE2D&&Wxe(this,n),this._adjustOrthographicFrustum(!0)};un.prototype.moveForward=function(e){e=e??this.defaultMoveAmount,this._mode===re.SCENE2D?zk(this,e):this.move(this.direction,e)};un.prototype.moveBackward=function(e){e=e??this.defaultMoveAmount,this._mode===re.SCENE2D?zk(this,-e):this.move(this.direction,-e)};un.prototype.moveUp=function(e){e=e??this.defaultMoveAmount,this.move(this.up,e)};un.prototype.moveDown=function(e){e=e??this.defaultMoveAmount,this.move(this.up,-e)};un.prototype.moveRight=function(e){e=e??this.defaultMoveAmount,this.move(this.right,e)};un.prototype.moveLeft=function(e){e=e??this.defaultMoveAmount,this.move(this.right,-e)};un.prototype.lookLeft=function(e){e=e??this.defaultLookAmount,this._mode!==re.SCENE2D&&this.look(this.up,-e)};un.prototype.lookRight=function(e){e=e??this.defaultLookAmount,this._mode!==re.SCENE2D&&this.look(this.up,e)};un.prototype.lookUp=function(e){e=e??this.defaultLookAmount,this._mode!==re.SCENE2D&&this.look(this.right,-e)};un.prototype.lookDown=function(e){e=e??this.defaultLookAmount,this._mode!==re.SCENE2D&&this.look(this.right,e)};var Pft=new Pe,Mft=new $;un.prototype.look=function(e,t){let n=t??this.defaultLookAmount,i=Pe.fromAxisAngle(e,-n,Pft),o=$.fromQuaternion(i,Mft),r=this.direction,s=this.up,a=this.right;$.multiplyByVector(o,r,r),$.multiplyByVector(o,s,s),$.multiplyByVector(o,a,a)};un.prototype.twistLeft=function(e){e=e??this.defaultLookAmount,this.look(this.direction,e)};un.prototype.twistRight=function(e){e=e??this.defaultLookAmount,this.look(this.direction,-e)};var vft=new Pe,Nft=new $;un.prototype.rotate=function(e,t){let n=t??this.defaultRotateAmount,i=Pe.fromAxisAngle(e,-n,vft),o=$.fromQuaternion(i,Nft);$.multiplyByVector(o,this.position,this.position),$.multiplyByVector(o,this.direction,this.direction),$.multiplyByVector(o,this.up,this.up),m.cross(this.direction,this.up,this.right),m.cross(this.right,this.direction,this.up),this._adjustOrthographicFrustum(!1)};un.prototype.rotateDown=function(e){e=e??this.defaultRotateAmount,Fxe(this,e)};un.prototype.rotateUp=function(e){e=e??this.defaultRotateAmount,Fxe(this,-e)};var Dft=new m,Qft=new m,Uft=new m,Ixe=new m;function Fxe(e,t){let n=e.position;if(l(e.constrainedAxis)&&!m.equalsEpsilon(e.position,m.ZERO,Z.EPSILON2)){let i=m.normalize(n,Dft),o=m.equalsEpsilon(i,e.constrainedAxis,Z.EPSILON2),r=m.equalsEpsilon(i,m.negate(e.constrainedAxis,Ixe),Z.EPSILON2);if(!o&&!r){let s=m.normalize(e.constrainedAxis,Qft),a=m.dot(i,s),c=Z.acosClamped(a);t>0&&t>c&&(t=c-Z.EPSILON4),a=m.dot(i,m.negate(s,Ixe)),c=Z.acosClamped(a),t<0&&-t>c&&(t=-c+Z.EPSILON4);let d=m.cross(s,i,Uft);e.rotate(d,t)}else(o&&t<0||r&&t>0)&&e.rotate(e.right,t)}else e.rotate(e.right,t)}un.prototype.rotateRight=function(e){e=e??this.defaultRotateAmount,Pxe(this,-e)};un.prototype.rotateLeft=function(e){e=e??this.defaultRotateAmount,Pxe(this,e)};function Pxe(e,t){l(e.constrainedAxis)?e.rotate(e.constrainedAxis,t):e.rotate(e.up,t)}function zk(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===_d.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===_d.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 Mxe(e,t){e.move(e.direction,t)}un.prototype.zoomIn=function(e){e=e??this.defaultZoomAmount,this._mode===re.SCENE2D?zk(this,e):Mxe(this,e)};un.prototype.zoomOut=function(e){e=e??this.defaultZoomAmount,this._mode===re.SCENE2D?zk(this,-e):Mxe(this,-e)};un.prototype.getMagnitude=function(){if(this._mode===re.SCENE3D)return m.magnitude(this.position);if(this._mode===re.COLUMBUS_VIEW)return Math.abs(this.position.z);if(this._mode===re.SCENE2D)return Math.max(this.frustum.right-this.frustum.left,this.frustum.top-this.frustum.bottom)};var kft=new X;un.prototype.lookAt=function(e,t){let i=this._scene.ellipsoid??ie.default,o=Dt.eastNorthUpToFixedFrame(e,i,kft);this.lookAtTransform(o,t)};var Yft=new m,Oft=new Pe,Hft=new Pe,zft=new $;function vxe(e,t,n){t=Z.clamp(t,-Z.PI_OVER_TWO,Z.PI_OVER_TWO),e=Z.zeroToTwoPi(e)-Z.PI_OVER_TWO;let i=Pe.fromAxisAngle(m.UNIT_Y,-t,Oft),o=Pe.fromAxisAngle(m.UNIT_Z,-e,Hft),r=Pe.multiply(o,i,o),s=$.fromQuaternion(r,zft),a=m.clone(m.UNIT_X,Yft);return $.multiplyByVector(s,a,a),m.negate(a,a),m.multiplyByScalar(a,n,a),a}un.prototype.lookAtTransform=function(e,t){if(this._setTransform(e),!l(t))return;let n;if(l(t.heading)?n=vxe(t.heading,t.pitch,t.range):n=t,this._mode===re.SCENE2D){D.clone(D.ZERO,this.position),m.negate(n,this.up),this.up.z=0,m.magnitudeSquared(this.up)<Z.EPSILON10&&m.clone(m.UNIT_Y,this.up),m.normalize(this.up,this.up),this._setTransform(X.IDENTITY),m.negate(m.UNIT_Z,this.direction),m.cross(this.direction,this.up,this.right),m.normalize(this.right,this.right);let i=this.frustum,o=i.top/i.right;i.right=m.magnitude(n)*.5,i.left=-i.right,i.top=o*i.right,i.bottom=-i.top,this._setTransform(e);return}m.clone(n,this.position),m.negate(this.position,this.direction),m.normalize(this.direction,this.direction),m.cross(this.direction,m.UNIT_Z,this.right),m.magnitudeSquared(this.right)<Z.EPSILON10&&m.clone(m.UNIT_X,this.right),m.normalize(this.right,this.right),m.cross(this.right,this.direction,this.up),m.normalize(this.up,this.up),this._adjustOrthographicFrustum(!0)};var $P=new ge,Kft=new ge,Jft=new m,jft=new m,qft=new m,$ft=new m,ept=new m,tpt=new m,npt=new m,P7=new m,ipt={direction:new m,right:new m,up:new m},_xe;function jc(e,t,n,i){return Math.abs(m.dot(t,n))/i-m.dot(e,n)}function Nxe(e,t,n,i){let o=e._projection.ellipsoid,r=i?e:ipt,{north:s,south:a,west:c}=t,{east:d}=t;c>d&&(d+=Z.TWO_PI);let u=(c+d)*.5,h;if(a<-Z.PI_OVER_TWO+Z.RADIANS_PER_DEGREE&&s>Z.PI_OVER_TWO-Z.RADIANS_PER_DEGREE)h=0;else{let F=$P;F.longitude=u,F.latitude=s,F.height=0;let P=Kft;P.longitude=u,P.latitude=a,P.height=0;let A=_xe;(!l(A)||A.ellipsoid!==o)&&(_xe=A=new sA(void 0,void 0,o)),A.setEndPoints(F,P),h=A.interpolateUsingFraction(.5,$P).latitude}let p=$P;p.longitude=u,p.latitude=h,p.height=0;let g=o.cartographicToCartesian(p,npt),f=$P;f.longitude=d,f.latitude=s;let b=o.cartographicToCartesian(f,Jft);f.longitude=c;let x=o.cartographicToCartesian(f,qft);f.longitude=u;let I=o.cartographicToCartesian(f,ept);f.latitude=a;let _=o.cartographicToCartesian(f,tpt);f.longitude=d;let E=o.cartographicToCartesian(f,$ft);f.longitude=c;let S=o.cartographicToCartesian(f,jft);m.subtract(x,g,x),m.subtract(E,g,E),m.subtract(b,g,b),m.subtract(S,g,S),m.subtract(I,g,I),m.subtract(_,g,_);let R=o.geodeticSurfaceNormal(g,r.direction);m.negate(R,R);let G=m.cross(R,m.UNIT_Z,r.right);m.normalize(G,G);let B=m.cross(G,R,r.up),w;if(e.frustum instanceof gn){let F=Math.max(m.distance(b,x),m.distance(E,S)),P=Math.max(m.distance(b,E),m.distance(x,S)),A,T,L=e.frustum._offCenterFrustum,V=L.right/L.top,W=P*V;F>W?(A=F,T=A/V):(T=P,A=W),w=Math.max(A,T)}else{let F=Math.tan(e.frustum.fovy*.5),P=e.frustum.aspectRatio*F;if(w=Math.max(jc(R,B,x,F),jc(R,B,E,F),jc(R,B,b,F),jc(R,B,S,F),jc(R,B,I,F),jc(R,B,_,F),jc(R,G,x,P),jc(R,G,E,P),jc(R,G,b,P),jc(R,G,S,P),jc(R,G,I,P),jc(R,G,_,P)),a<0&&s>0){let A=$P;A.longitude=c,A.latitude=0,A.height=0;let T=o.cartographicToCartesian(A,P7);m.subtract(T,g,T),w=Math.max(w,jc(R,B,T,F),jc(R,G,T,P)),A.longitude=d,T=o.cartographicToCartesian(A,P7),m.subtract(T,g,T),w=Math.max(w,jc(R,B,T,F),jc(R,G,T,P))}}return m.add(g,m.multiplyByScalar(R,-w,P7),n)}var opt=new ge,rpt=new m,spt=new m;function apt(e,t,n){let i=e._projection;t.west>t.east&&(t=le.MAX_VALUE);let o=e._actualTransform,r=e._actualInvTransform,s=opt;s.longitude=t.east,s.latitude=t.north;let a=i.project(s,rpt);X.multiplyByPoint(o,a,a),X.multiplyByPoint(r,a,a),s.longitude=t.west,s.latitude=t.south;let c=i.project(s,spt);if(X.multiplyByPoint(o,c,c),X.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 cpt=new ge,lpt=new m,dpt=new m;function upt(e,t,n){let i=e._projection,o=t.east;t.west>t.east&&(e._scene.mapMode2D===_d.INFINITE_SCROLL?o+=Z.TWO_PI:(t=le.MAX_VALUE,o=t.east));let r=cpt;r.longitude=o,r.latitude=t.north;let s=i.project(r,lpt);r.longitude=t.west,r.latitude=t.south;let a=i.project(r,dpt),c=Math.abs(s.x-a.x)*.5,d=Math.abs(s.y-a.y)*.5,u,h,p=e.frustum.right/e.frustum.top,g=d*p;return c>g?(u=c,h=u/p):(h=d,u=g),d=Math.max(2*u,2*h),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}un.prototype.getRectangleCameraCoordinates=function(e,t){let n=this._mode;if(l(t)||(t=new m),n===re.SCENE3D)return Nxe(this,e,t);if(n===re.COLUMBUS_VIEW)return apt(this,e,t);if(n===re.SCENE2D)return upt(this,e,t)};var mpt=new En;function hpt(e,t,n,i){n=n??ie.default;let o=e.getPickRay(t,mpt),r=fi.rayEllipsoid(o,n);if(!r)return;let s=r.start>0?r.start:r.stop;return En.getPoint(o,s,i)}var fpt=new En;function ppt(e,t,n,i){let r=e.getPickRay(t,fpt).origin;r=m.fromElements(r.y,r.z,0,r);let s=n.unproject(r);if(!(s.latitude<-Z.PI_OVER_TWO||s.latitude>Z.PI_OVER_TWO))return n.ellipsoid.cartographicToCartesian(s,i)}var Apt=new En;function gpt(e,t,n,i){let o=e.getPickRay(t,Apt),r=-o.origin.x/o.direction.x;En.getPoint(o,r,i);let s=n.unproject(new m(i.y,i.z,0));if(!(s.latitude<-Z.PI_OVER_TWO||s.latitude>Z.PI_OVER_TWO||s.longitude<-Math.PI||s.longitude>Math.PI))return n.ellipsoid.cartographicToCartesian(s,i)}un.prototype.pickEllipsoid=function(e,t,n){let i=this._scene.canvas;if(!(i.clientWidth===0||i.clientHeight===0)){if(l(n)||(n=new m),t=t??ie.default,this._mode===re.SCENE3D)n=hpt(this,e,t,n);else if(this._mode===re.SCENE2D)n=ppt(this,e,this._projection,n);else if(this._mode===re.COLUMBUS_VIEW)n=gpt(this,e,this._projection,n);else return;return n}};var bpt=new m,ypt=new m,Cpt=new m;function xpt(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,h=e.positionWC;m.clone(h,n.origin);let p=m.multiplyByScalar(e.directionWC,c,bpt);m.add(h,p,p);let g=m.multiplyByScalar(e.rightWC,d*c*a,ypt),f=m.multiplyByScalar(e.upWC,u*c*s,Cpt),b=m.add(p,g,n.direction);return m.add(b,f,b),m.subtract(b,h,b),m.normalize(b,b),n}var Uk=new m;function Ipt(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;return m.clone(e.positionWC,u),m.multiplyByScalar(e.rightWC,c,Uk),m.add(Uk,u,u),m.multiplyByScalar(e.upWC,d,Uk),m.add(Uk,u,u),m.clone(e.directionWC,n.direction),n}un.prototype.getPickRay=function(e,t){l(t)||(t=new En);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)?xpt(this,e,t):Ipt(this,e,t)};var _pt=new m,Ept=new m;un.prototype.distanceToBoundingSphere=function(e){let t=m.subtract(this.positionWC,e.center,_pt),n=m.multiplyByScalar(this.directionWC,m.dot(t,this.directionWC),Ept);return Math.max(0,m.magnitude(n)-e.radius)};var Tpt=new D;un.prototype.getPixelSize=function(e,t,n){let i=this.distanceToBoundingSphere(e),o=this.frustum.getPixelDimensions(t,n,i,this._scene.pixelRatio,Tpt);return Math.max(o.x,o.y)};function Spt(e,t,n,i,o,r){let s=m.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=m.lerp(t,s,c.time,new m);e.worldToCameraCoordinatesPoint(d,e.position)}return{easingFunction:ms.EXPONENTIAL_OUT,startObject:{time:0},stopObject:{time:1},duration:r,update:a}}var Lpt=new m,Exe=new m,Rpt=new m,Vpt=new m;function Gpt(e,t){let n=e.position,i=e.direction,o=e.worldToCameraCoordinatesVector(m.UNIT_X,Lpt),r=-m.dot(o,n)/m.dot(o,i),s=m.add(n,m.multiplyByScalar(i,r,Exe),Exe);e.cameraToWorldCoordinatesPoint(s,s),n=e.cameraToWorldCoordinatesPoint(e.position,Rpt);let a=Math.tan(e.frustum.fovy*.5),c=e.frustum.aspectRatio*a,d=m.magnitude(m.subtract(n,s,Vpt)),u=c*d,h=a*d,p=e._maxCoord.x,g=e._maxCoord.y,f=Math.max(u-p,p),b=Math.max(h-g,g);if(n.z<-f||n.z>f||n.y<-b||n.y>b){let x=s.y<-f||s.y>f,I=s.z<-b||s.z>b;if(x||I)return Spt(e,n,s,f,b,t)}}un.prototype.createCorrectPositionTween=function(e){if(this._mode===re.COLUMBUS_VIEW)return Gpt(this,e)};var Zpt=new m,Ta={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};un.prototype.cancelFlight=function(){l(this._currentFlight)&&(this._currentFlight.cancelTween(),this._currentFlight=void 0)};un.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=Ta.destination,e.orientation.heading=Ta.heading,e.orientation.pitch=Ta.pitch,e.orientation.roll=Ta.roll,this.setView(e),l(this._currentFlight.complete)&&this._currentFlight.complete(),this._currentFlight=void 0}};un.prototype.flyTo=function(e){e=e??Y.EMPTY_OBJECT;let t=e.destination;if(this._mode===re.MORPHING)return;this.cancelFlight();let i=t instanceof le;i&&(t=this.getRectangleCameraCoordinates(t,Zpt));let o=e.orientation??Y.EMPTY_OBJECT;if(l(o.direction)&&(o=Xxe(this,t,o,N7.orientation)),l(e.duration)&&e.duration<=0){let u=N7;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;Ta.destination=t,Ta.heading=o.heading,Ta.pitch=o.pitch,Ta.roll=o.roll,Ta.duration=e.duration,Ta.complete=function(){s===r._currentFlight&&(r._currentFlight=void 0),l(e.complete)&&e.complete()},Ta.cancel=e.cancel,Ta.endTransform=e.endTransform,Ta.convert=i?!1:e.convert,Ta.maximumHeight=e.maximumHeight,Ta.pitchAdjustHeight=e.pitchAdjustHeight,Ta.flyOverLongitude=e.flyOverLongitude,Ta.flyOverLongitudeWeight=e.flyOverLongitudeWeight,Ta.easingFunction=e.easingFunction;let a=this._scene,c=qP.createTween(a,Ta);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!==re.SCENE2D&&(l(d)||(d=un.clone(this)),d.setView({destination:t,orientation:o}),this._scene.preloadFlightCullingVolume=d.frustum.computeCullingVolume(d.positionWC,d.directionWC,d.upWC))};function Bpt(e,t){let n=e.frustum,i=Math.tan(n.fovy*.5),o=n.aspectRatio*i;return Math.max(t/o,t/i)}function wpt(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 Xpt=100;function Dxe(e,t,n){n=Vm.clone(l(n)?n:un.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=Xpt:e.frustum instanceof gn||e._mode===re.SCENE2D?n.range=wpt(e,s):n.range=Bpt(e,s),n.range=Z.clamp(n.range,i,o)}return n}un.prototype.viewBoundingSphere=function(e,t){t=Dxe(this,e,t),this.lookAt(e.center,t)};var Wpt=new X,Fpt=new m,Ppt=new m,Mpt=new m,vpt=new m,Npt=new ce,Dpt=new Pe,Qpt=new $;un.prototype.flyToBoundingSphere=function(e,t){t=t??Y.EMPTY_OBJECT;let n=this._mode===re.SCENE2D||this._mode===re.COLUMBUS_VIEW;this._setTransform(X.IDENTITY);let i=Dxe(this,e,t.offset),o;n?o=m.multiplyByScalar(m.UNIT_Z,i.range,Fpt):o=vxe(i.heading,i.pitch,i.range);let s=this._scene.ellipsoid??ie.default,a=Dt.eastNorthUpToFixedFrame(e.center,s,Wpt);X.multiplyByPoint(a,o,o);let c,d;if(!n){if(c=m.subtract(e.center,o,Ppt),m.normalize(c,c),d=X.multiplyByPointAsVector(a,m.UNIT_Z,Mpt),1-Math.abs(m.dot(c,d))<Z.EPSILON6){let h=Pe.fromAxisAngle(c,i.heading,Dpt),p=$.fromQuaternion(h,Qpt);m.fromCartesian4(X.getColumn(a,1,Npt),d),$.multiplyByVector(p,d,d)}let u=m.cross(c,d,vpt);m.cross(u,c,d),m.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 Txe=new m,Sxe=new m,M7=new m,Lxe=new m,eM=[new m,new m,new m,new m];function Upt(e,t){let n=t.radii,i=e.positionWC,o=m.multiplyComponents(t.oneOverRadii,i,Txe),r=m.magnitude(o),s=m.normalize(o,Sxe),a,c;m.equalsEpsilon(s,m.UNIT_Z,Z.EPSILON10)?(a=new m(0,1,0),c=new m(0,0,1)):(a=m.normalize(m.cross(m.UNIT_Z,s,M7),M7),c=m.normalize(m.cross(s,a,Lxe),Lxe));let d=Math.sqrt(m.magnitudeSquared(o)-1),u=m.multiplyByScalar(s,1/r,Txe),h=d/r,p=m.multiplyByScalar(a,h,Sxe),g=m.multiplyByScalar(c,h,M7),f=m.add(u,g,eM[0]);m.subtract(f,p,f),m.multiplyComponents(n,f,f);let b=m.subtract(u,g,eM[1]);m.subtract(b,p,b),m.multiplyComponents(n,b,b);let x=m.subtract(u,g,eM[2]);m.add(x,p,x),m.multiplyComponents(n,x,x);let I=m.add(u,g,eM[3]);return m.add(I,p,I),m.multiplyComponents(n,I,I),eM}var v7=new D,kpt=new m,cy=[new ge,new ge,new ge,new ge];function kk(e,t,n,i,o,r){v7.x=e,v7.y=t;let s=i.pickEllipsoid(v7,o,kpt);return l(s)?(cy[n]=o.cartesianToCartographic(s,cy[n]),1):(cy[n]=o.cartesianToCartographic(r[n],cy[n]),0)}un.prototype.computeViewRectangle=function(e,t){e=e??ie.default;let n=this.frustum.computeCullingVolume(this.positionWC,this.directionWC,this.upWC),i=new ue(m.ZERO,e.maximumRadius);if(n.computeVisibility(i)===on.OUTSIDE)return;let r=this._scene.canvas,s=r.clientWidth,a=r.clientHeight,c=0,d=Upt(this,e);if(c+=kk(0,0,0,this,e,d),c+=kk(0,a,1,this,e,d),c+=kk(s,a,2,this,e,d),c+=kk(s,0,3,this,e,d),c<2)return le.MAX_VALUE;t=le.fromCartographicArray(cy,t);let u=0,h=cy[3].longitude;for(let p=0;p<4;++p){let g=cy[p].longitude,f=Math.abs(g-h);f>Z.PI?u+=Z.TWO_PI-f:u+=f,h=g}return Z.equalsEpsilon(Math.abs(u),Z.TWO_PI,Z.EPSILON9)&&(t.west=-Z.PI,t.east=Z.PI,cy[0].latitude>=0?t.north=Z.PI_OVER_TWO:t.south=-Z.PI_OVER_TWO),t};un.prototype.switchToPerspectiveFrustum=function(){if(this._mode===re.SCENE2D||this.frustum instanceof Ni)return;let e=this._scene;this.frustum=new Ni,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=Z.toRadians(60)};un.prototype.switchToOrthographicFrustum=function(){if(this._mode===re.SCENE2D||this.frustum instanceof gn)return;let e=Bxe(this),t=this._scene;this.frustum=new gn,this.frustum.aspectRatio=t.drawingBufferWidth/t.drawingBufferHeight,this.frustum.width=e};un.clone=function(e,t){return l(t)||(t=new un(e._scene)),m.clone(e.position,t.position),m.clone(e.direction,t.direction),m.clone(e.up,t.up),m.clone(e.right,t.right),X.clone(e._transform,t.transform),t._transformChanged=!0,t.frustum=e.frustum.clone(),t};var xo=un;var DMi=y(C(),1);function Ypt(e){this.pass=e.pass,this.commandList=e.commandList,this.camera=e.camera,this.cullingVolume=e.cullingVolume,this.ready=!1}var vm=Ypt;var zMi=y(C(),1);var Oxe=y(Bd(),1),Qxe=576,Opt=100,tM="#ffffff",Kk="#48b";function Hxe(e,t){this.credit=e,this.count=t??1}function Hpt(e,t){let n=e.length;for(let i=0;i<n;i++){let o=e[i];if(Gt.equals(o,t))return!0}return!1}function zpt(e){let t=e._previousCesiumCredit,n=e._currentCesiumCredit;Gt.equals(n,t)||(l(t)&&e._cesiumCreditContainer.removeChild(t.element),l(n)&&e._cesiumCreditContainer.appendChild(n.element),e._previousCesiumCredit=n)}var zxe="cesium-credit-delimiter";function Uxe(e){let t=document.createElement("span");return t.textContent=e,t.className=zxe,t}function kxe(e,t){if(l(t)){let n=document.createElement(t);n._creditId=e._creditId,n.appendChild(e),e=n}return e}function Yxe(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(Uxe(n));else{let u=o[d];u.className!==zxe&&e.replaceChild(Uxe(n),u)}}let c=a.element;if(o.length<=r)e.appendChild(kxe(c,i));else{let d=o[r];d._creditId!==a._id&&e.replaceChild(kxe(c,i),d)}}}for(++r;r<o.length;)e.removeChild(o[r])}function Kpt(e){let t=e._lightboxCredits,n=e.viewport.clientWidth,i=e.viewport.clientHeight;n!==e._lastViewportWidth&&(n<Qxe?(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>=Qxe&&i!==e._lastViewportHeight&&(t.style.marginTop=`${Math.floor((i-t.clientHeight)*.5)}px`,e._lastViewportHeight=i)}function Jpt(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: ${tM}; position: relative; min-height: ${Opt}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: ${tM}; } .cesium-credit-lightbox > ul > li a:hover { color: ${Kk}; } .cesium-credit-lightbox.cesium-credit-lightbox-expanded { border: 1px solid #444; border-radius: 5px; max-width: 370px; } .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: ${tM}; } .cesium-credit-lightbox-close:hover { color: ${Kk}; } .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: ${tM}; } .cesium-credit-expand-link:hover { color: ${Kk}; } .cesium-credit-text { color: ${tM}; } .cesium-credit-delimiter { padding: 0 5px; } .cesium-credit-textContainer *, .cesium-credit-logoContainer * { display: inline; } .cesium-credit-textContainer a:hover { color: ${Kk} } .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 Br(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 h=document.createElement("div");h.className="cesium-credit-textContainer",h.style.display="inline",e.appendChild(h);let p=document.createElement("a");p.className="cesium-credit-expand-link",p.onclick=this.showLightbox.bind(this),p.textContent="Data attribution",e.appendChild(p),Jpt(e);let g=Gt.clone(Br.cesiumCredit);this._delimiter=t??"\u2022",this._screenContainer=h,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=g,this._previousCesiumCredit=void 0,this._currentCesiumCredit=g,this._creditDisplayElementPool=[],this._creditDisplayElementIndex=0,this._currentFrameCredits={screenCredits:new Bt,lightboxCredits:new Bt},this._defaultCredit=void 0,this.viewport=n,this.container=e}function Kxe(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 Hxe(n,i),r.push(o)),++e._creditDisplayElementPoolIndex,t.set(n.id,o)}}Br.prototype.addCreditToNextFrame=function(e){if(e.isIon()){l(this._defaultCredit)||(this._defaultCredit=Gt.clone(Jxe())),this._currentCesiumCredit=this._defaultCredit;return}let t;e.showOnScreen?t=this._currentFrameCredits.screenCredits:t=this._currentFrameCredits.lightboxCredits,Kxe(this,t,e)};Br.prototype.addStaticCredit=function(e){let t=this._staticCredits;Hpt(t,e)||t.push(e)};Br.prototype.removeStaticCredit=function(e){let t=this._staticCredits,n=t.indexOf(e);n!==-1&&t.splice(n,1)};Br.prototype.showLightbox=function(){this._lightbox.style.display="block",this._expanded=!0};Br.prototype.hideLightbox=function(){this._lightbox.style.display="none",this._expanded=!1};Br.prototype.update=function(){this._expanded&&Kpt(this)};Br.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()&&Gt.equals(Br.cesiumCredit,this._cesiumCredit)||Kxe(this,s,r,Number.MAX_VALUE)}Gt.equals(Br.cesiumCredit,this._cesiumCredit)||(this._cesiumCredit=Gt.clone(Br.cesiumCredit)),this._currentCesiumCredit=this._cesiumCredit};Br.prototype.endFrame=function(){let e=this._currentFrameCredits.screenCredits.values;Yxe(this._screenContainer,e,this._delimiter,void 0);let t=this._currentFrameCredits.lightboxCredits.values;this._expandLink.style.display=t.length>0?"inline":"none",Yxe(this._creditList,t,void 0,"li"),zpt(this)};Br.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)};Br.prototype.isDestroyed=function(){return!1};Br._cesiumCredit=void 0;Br._cesiumCreditInitialized=!1;var Jk;function Jxe(){if(!l(Jk)){let e=hn("Assets/Images/ion-credit.png");e.indexOf("http://")!==0&&e.indexOf("https://")!==0&&e.indexOf("data:")!==0&&(e=new Oxe.default(e).path()),Jk=new Gt(`<a href="https://cesium.com/" target="_blank"><img src="${e}" style="vertical-align: -7px" title="Cesium ion"/></a>`,!0)}return Br._cesiumCreditInitialized||(Br._cesiumCredit=Jk,Br._cesiumCreditInitialized=!0),Jk}Object.defineProperties(Br,{cesiumCredit:{get:function(){return Jxe(),Br._cesiumCredit},set:function(e){Br._cesiumCredit=e,Br._cesiumCreditInitialized=!0}}});Br.CreditDisplayElement=Hxe;var nM=Br;var kvi=y(C(),1);var uvi=y(C(),1);var jk=0,jpt=1;function LI(e){let t=e.frustum,n=e.orientation,i=e.origin,o=e.vertexFormat??we.DEFAULT,r=e._drawNearPlane??!0,s,a;t instanceof Ni?(s=jk,a=Ni.packedLength):t instanceof gn&&(s=jpt,a=gn.packedLength),this._frustumType=s,this._frustum=t.clone(),this._origin=m.clone(i),this._orientation=Pe.clone(n),this._drawNearPlane=r,this._vertexFormat=o,this._workerName="createFrustumGeometry",this.packedLength=2+a+m.packedLength+Pe.packedLength+we.packedLength}LI.pack=function(e,t,n){n=n??0;let i=e._frustumType,o=e._frustum;return t[n++]=i,i===jk?(Ni.pack(o,t,n),n+=Ni.packedLength):(gn.pack(o,t,n),n+=gn.packedLength),m.pack(e._origin,t,n),n+=m.packedLength,Pe.pack(e._orientation,t,n),n+=Pe.packedLength,we.pack(e._vertexFormat,t,n),n+=we.packedLength,t[n]=e._drawNearPlane?1:0,t};var qpt=new Ni,$pt=new gn,eAt=new Pe,tAt=new m,nAt=new we;LI.unpack=function(e,t,n){t=t??0;let i=e[t++],o;i===jk?(o=Ni.unpack(e,t,qpt),t+=Ni.packedLength):(o=gn.unpack(e,t,$pt),t+=gn.packedLength);let r=m.unpack(e,t,tAt);t+=m.packedLength;let s=Pe.unpack(e,t,eAt);t+=Pe.packedLength;let a=we.unpack(e,t,nAt);t+=we.packedLength;let c=e[t]===1;if(!l(n))return new LI({frustum:o,origin:r,orientation:s,vertexFormat:a,_drawNearPlane:c});let d=i===n._frustumType?n._frustum:void 0;return n._frustum=o.clone(d),n._frustumType=i,n._origin=m.clone(r,n._origin),n._orientation=Pe.clone(s,n._orientation),n._vertexFormat=we.clone(a,n._vertexFormat),n._drawNearPlane=c,n};function aL(e,t,n,i,o,r,s,a){let c=e/3*2;for(let d=0;d<4;++d)l(t)&&(t[e]=r.x,t[e+1]=r.y,t[e+2]=r.z),l(n)&&(n[e]=s.x,n[e+1]=s.y,n[e+2]=s.z),l(i)&&(i[e]=a.x,i[e+1]=a.y,i[e+2]=a.z),e+=3;o[c]=0,o[c+1]=0,o[c+2]=1,o[c+3]=0,o[c+4]=1,o[c+5]=1,o[c+6]=0,o[c+7]=1}var iAt=new $,oAt=new X,k7=new X,jxe=new m,qxe=new m,$xe=new m,rAt=new m,sAt=new m,aAt=new m,ly=new Array(3),iM=new Array(4);iM[0]=new ce(-1,-1,1,1);iM[1]=new ce(1,-1,1,1);iM[2]=new ce(1,1,1,1);iM[3]=new ce(-1,1,1,1);var eIe=new Array(4);for(let e=0;e<4;++e)eIe[e]=new ce;LI._computeNearFarPlanes=function(e,t,n,i,o,r,s,a){let c=$.fromQuaternion(t,iAt),d=r??jxe,u=s??qxe,h=a??$xe;d=$.getColumn(c,0,d),u=$.getColumn(c,1,u),h=$.getColumn(c,2,h),m.normalize(d,d),m.normalize(u,u),m.normalize(h,h),m.negate(d,d);let p=X.computeView(e,h,u,d,oAt),g,f,b=i.projectionMatrix;if(n===jk){let x=X.multiply(b,p,k7);f=X.inverse(x,k7)}else g=X.inverseTransformation(p,k7);l(f)?(ly[0]=i.near,ly[1]=i.far):(ly[0]=0,ly[1]=i.near,ly[2]=i.far);for(let x=0;x<2;++x)for(let I=0;I<4;++I){let _=ce.clone(iM[I],eIe[I]);if(l(f)){_=X.multiplyByVector(f,_,_);let E=1/_.w;m.multiplyByScalar(_,E,_),m.subtract(_,e,_),m.normalize(_,_);let S=m.dot(h,_);m.multiplyByScalar(_,ly[x]/S,_),m.add(_,e,_)}else{let E=i.offCenterFrustum;l(E)&&(i=E);let S=ly[x],R=ly[x+1];_.x=(_.x*(i.right-i.left)+i.left+i.right)*.5,_.y=(_.y*(i.top-i.bottom)+i.bottom+i.top)*.5,_.z=(_.z*(S-R)-S-R)*.5,_.w=1,X.multiplyByVector(g,_,_)}o[12*x+I*3]=_.x,o[12*x+I*3+1]=_.y,o[12*x+I*3+2]=_.z}};LI.createGeometry=function(e){let t=e._frustumType,n=e._frustum,i=e._origin,o=e._orientation,r=e._drawNearPlane,s=e._vertexFormat,a=r?6:5,c=new Float64Array(72);LI._computeNearFarPlanes(i,o,t,n,c);let d=24;c[d]=c[12],c[d+1]=c[13],c[d+2]=c[14],c[d+3]=c[0],c[d+4]=c[1],c[d+5]=c[2],c[d+6]=c[9],c[d+7]=c[10],c[d+8]=c[11],c[d+9]=c[21],c[d+10]=c[22],c[d+11]=c[23],d+=12,c[d]=c[15],c[d+1]=c[16],c[d+2]=c[17],c[d+3]=c[3],c[d+4]=c[4],c[d+5]=c[5],c[d+6]=c[0],c[d+7]=c[1],c[d+8]=c[2],c[d+9]=c[12],c[d+10]=c[13],c[d+11]=c[14],d+=12,c[d]=c[3],c[d+1]=c[4],c[d+2]=c[5],c[d+3]=c[15],c[d+4]=c[16],c[d+5]=c[17],c[d+6]=c[18],c[d+7]=c[19],c[d+8]=c[20],c[d+9]=c[6],c[d+10]=c[7],c[d+11]=c[8],d+=12,c[d]=c[6],c[d+1]=c[7],c[d+2]=c[8],c[d+3]=c[18],c[d+4]=c[19],c[d+5]=c[20],c[d+6]=c[21],c[d+7]=c[22],c[d+8]=c[23],c[d+9]=c[9],c[d+10]=c[10],c[d+11]=c[11],r||(c=c.subarray(12));let u=new xn({position:new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:c})});if(l(s.normal)||l(s.tangent)||l(s.bitangent)||l(s.st)){let p=l(s.normal)?new Float32Array(12*a):void 0,g=l(s.tangent)?new Float32Array(12*a):void 0,f=l(s.bitangent)?new Float32Array(12*a):void 0,b=l(s.st)?new Float32Array(8*a):void 0,x=jxe,I=qxe,_=$xe,E=m.negate(x,rAt),S=m.negate(I,sAt),R=m.negate(_,aAt);d=0,r&&(aL(d,p,g,f,b,R,x,I),d+=12),aL(d,p,g,f,b,_,E,I),d+=12,aL(d,p,g,f,b,E,R,I),d+=12,aL(d,p,g,f,b,S,R,E),d+=12,aL(d,p,g,f,b,x,_,I),d+=12,aL(d,p,g,f,b,I,_,E),l(p)&&(u.normal=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:p})),l(g)&&(u.tangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:g})),l(f)&&(u.bitangent=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:f})),l(b)&&(u.st=new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:2,values:b}))}let h=new Uint16Array(6*a);for(let p=0;p<a;++p){let g=p*6,f=p*4;h[g]=f,h[g+1]=f+1,h[g+2]=f+2,h[g+3]=f,h[g+4]=f+2,h[g+5]=f+3}return new pt({attributes:u,indices:h,primitiveType:We.TRIANGLES,boundingSphere:ue.fromVertices(c)})};var RI=LI;var Tvi=y(C(),1);var Y7=0,cAt=1;function oM(e){let t=e.frustum,n=e.orientation,i=e.origin,o=e._drawNearPlane??!0,r,s;t instanceof Ni?(r=Y7,s=Ni.packedLength):t instanceof gn&&(r=cAt,s=gn.packedLength),this._frustumType=r,this._frustum=t.clone(),this._origin=m.clone(i),this._orientation=Pe.clone(n),this._drawNearPlane=o,this._workerName="createFrustumOutlineGeometry",this.packedLength=2+s+m.packedLength+Pe.packedLength}oM.pack=function(e,t,n){n=n??0;let i=e._frustumType,o=e._frustum;return t[n++]=i,i===Y7?(Ni.pack(o,t,n),n+=Ni.packedLength):(gn.pack(o,t,n),n+=gn.packedLength),m.pack(e._origin,t,n),n+=m.packedLength,Pe.pack(e._orientation,t,n),n+=Pe.packedLength,t[n]=e._drawNearPlane?1:0,t};var lAt=new Ni,dAt=new gn,uAt=new Pe,mAt=new m;oM.unpack=function(e,t,n){t=t??0;let i=e[t++],o;i===Y7?(o=Ni.unpack(e,t,lAt),t+=Ni.packedLength):(o=gn.unpack(e,t,dAt),t+=gn.packedLength);let r=m.unpack(e,t,mAt);t+=m.packedLength;let s=Pe.unpack(e,t,uAt);t+=Pe.packedLength;let a=e[t]===1;if(!l(n))return new oM({frustum:o,origin:r,orientation:s,_drawNearPlane:a});let c=i===n._frustumType?n._frustum:void 0;return n._frustum=o.clone(c),n._frustumType=i,n._origin=m.clone(r,n._origin),n._orientation=Pe.clone(s,n._orientation),n._drawNearPlane=a,n};oM.createGeometry=function(e){let t=e._frustumType,n=e._frustum,i=e._origin,o=e._orientation,r=e._drawNearPlane,s=new Float64Array(24);RI._computeNearFarPlanes(i,o,t,n,s);let a=new xn({position:new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:s})}),c,d,u=r?2:1,h=new Uint16Array(8*(u+1)),p=r?0:1;for(;p<2;++p)c=r?p*8:0,d=p*4,h[c]=d,h[c+1]=d+1,h[c+2]=d+1,h[c+3]=d+2,h[c+4]=d+2,h[c+5]=d+3,h[c+6]=d+3,h[c+7]=d;for(p=0;p<2;++p)c=(u+p)*8,d=p*4,h[c]=d,h[c+1]=d+4,h[c+2]=d+1,h[c+3]=d+5,h[c+4]=d+2,h[c+5]=d+6,h[c+6]=d+3,h[c+7]=d+7;return new pt({attributes:a,indices:h,primitiveType:We.LINES,boundingSphere:ue.fromVertices(s)})};var rM=oM;function qk(e){e=e??Y.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 hAt=new m,fAt=new $,pAt=new Pe,AAt=new Ni,gAt=new vl,bAt=new gn,yAt=new qr,CAt=new U,xAt=[1,1e5];qk.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 Ni?a=AAt:s instanceof vl?a=gAt:s instanceof gn?a=bAt:a=yAt,a=s.clone(a);let c,d=this._frustumSplits;!l(d)||d.length<=1?(d=xAt,d[0]=this._camera.frustum.near,d[1]=this._camera.frustum.far,c=1):c=d.length-1;let u=r.positionWC,h=r.directionWC,p=r.upWC,g=r.rightWC;g=m.negate(g,hAt);let f=fAt;$.setColumn(f,0,g,f),$.setColumn(f,1,p,f),$.setColumn(f,2,h,f);let b=Pe.fromRotationMatrix(f,pAt);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 wt({geometry:new RI({origin:u,orientation:b,frustum:a,_drawNearPlane:i===0}),attributes:{color:tn.fromColor(U.fromAlpha(this._color,.1,CAt))},id:this.id,pickPrimitive:this}),appearance:new yn({translucent:!0,flat:!0}),asynchronous:!1}),n[i]=new Nn({geometryInstances:new wt({geometry:new rM({origin:u,orientation:b,frustum:a,_drawNearPlane:i===0}),attributes:{color:tn.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)};qk.prototype.isDestroyed=function(){return!1};qk.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 Rp=qk;var mNi=y(C(),1);function aM(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 sM=Ht.supportsTypedArrays()?new Float32Array(12):[],tIe=new m,nIe=new m,O7=new m,iIe=new m,$k=new m;function IAt(e,t){let n=e.radii,i=t.camera,o,r,s;if(i.frustum instanceof gn)o=m.ZERO,r=i.rightWC,s=i.upWC;else{let h=i.positionWC,p=m.multiplyComponents(e.oneOverRadii,h,tIe),g=m.normalize(p,nIe),f=m.normalize(m.cross(m.UNIT_Z,p,O7),O7),b=m.normalize(m.cross(g,f,iIe),iIe),x=m.magnitude(p),I=Math.sqrt(x*x-1);o=m.multiplyByScalar(g,1/x,tIe);let _=I/x;r=m.multiplyByScalar(f,_,nIe),s=m.multiplyByScalar(b,_,O7)}let a=m.add(o,s,$k);m.subtract(a,r,a),m.multiplyComponents(n,a,a),m.pack(a,sM,0);let c=m.subtract(o,s,$k);m.subtract(c,r,c),m.multiplyComponents(n,c,c),m.pack(c,sM,3);let d=m.add(o,s,$k);m.add(d,r,d),m.multiplyComponents(n,d,d),m.pack(d,sM,6);let u=m.subtract(o,s,$k);return m.add(u,r,u),m.multiplyComponents(n,u,u),m.pack(u,sM,9),sM}aM.prototype.update=function(e){if(this._mode=e.mode,e.mode!==re.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=Qe.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 ue(m.ZERO,i.maximumRadius),pass:Ge.OPAQUE,owner:this})),!l(this._sp)||this._useLogDepth!==o){this._useLogDepth=o;let s=new Oe({sources:[gP]}),a=new Oe({sources:[AP]});o&&(a.defines.push("LOG_DEPTH"),s.defines.push("LOG_DEPTH")),this._sp=ln.replaceCache({shaderProgram:this._sp,context:t,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:{position:0}}),this._command.shaderProgram=this._sp}let r=IAt(i,e);if(l(this._va))this._va.getAttribute(0).vertexBuffer.copyFromArrayView(r);else{let s=new pt({attributes:{position:new Ze({componentDatatype:J.FLOAT,componentsPerAttribute:3,values:r})},indices:[0,1,2,2,1,3],primitiveType:We.TRIANGLES});this._va=ui.fromGeometry({context:t,geometry:s,attributeLocations:{position:0},bufferUsage:Ne.DYNAMIC_DRAW}),this._command.vertexArray=this._va}};aM.prototype.execute=function(e,t){this._mode===re.SCENE3D&&this._command.execute(e,t)};aM.prototype.isDestroyed=function(){return!1};aM.prototype.destroy=function(){this._sp=this._sp&&this._sp.destroy(),this._va=this._va&&this._va.destroy()};var cM=aM;var xNi=y(C(),1);function lL(){}var _At=/\bgl_FragDepth\b/,EAt=/\bdiscard\b/;function TAt(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(_At.test(r[a])||EAt.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 Oe({sources:[a]})}else if(!o&&s){let a=`void main() { out_FragColor = vec4(1.0); czm_writeLogDepth(); } `;i=new Oe({defines:["LOG_DEPTH"],sources:[a]})}return e.shaderCache.createDerivedShaderProgram(t,"depthOnly",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:i,attributeLocations:t._attributeLocations})}function SAt(e,t){let n=e._depthOnlyRenderStateCache,i=n[t.id];if(l(i))return i;let o=Qe.getState(t);o.depthMask=!0,o.colorMask={red:!1,green:!1,blue:!1,alpha:!1};let r=Qe.fromCache(o);return n[t.id]=r,r}lL.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=TAt(n,t.shaderProgram),i.depthOnlyCommand.renderState=SAt(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.depthOnlyCommand.shaderProgram=o,i.depthOnlyCommand.renderState=r),i};var LAt=/\s+czm_writeLogDepth\(/,RAt=/\s+czm_vertexLogDepth\(/;function VAt(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(RAt.test(c[u])){a=!0;break}if(!a){for(let h=0;h<c.length;++h)c[h]=Oe.replaceMain(c[h],"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)LAt.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]=Oe.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})}lL.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=VAt(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};function GAt(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(g=>g.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,h=new Array(u+1);for(let g=0;g<u;++g)h[g]=Oe.replaceMain(r[g],"czm_non_pick_main");h[u]=d;let p=new Oe({sources:h,defines:s});return e.shaderCache.createDerivedShaderProgram(t,"pick",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:p,attributeLocations:o})}function oIe(e,t){let n=e.picking.pickRenderStateCache,i=n[t.id];if(l(i))return i;let o=Qe.getState(t);o.blending.enabled=!1,o.depthMask=!0;let r=Qe.fromCache(o);return n[t.id]=r,r}lL.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=GAt(n,t.shaderProgram,t.pickId),i.pickCommand.renderState=oIe(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.pickCommand.shaderProgram=o,i.pickCommand.renderState=r),i};function cL(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 rIe(e){return e.isArray?e.arrayLength:bt.getComponentCount(e.type)}function ZAt(e){let t=rIe(e);return e.normalized?t===1?"float":`vec${t}`:t===1?"int":`ivec${t}`}function sIe(e,t,n){return`((${e} - float(${t})) / float(${n}))`}function aIe(e,t){let n=Ut.getMaximum(t);return`(${e}) / float(${n})`}function BAt(e,t){let n="float(value)";if(t.hasValueTransform){let i=t.offset,o=t.scale;n=sIe(n,i,o)}return e.normalized||(n=aIe(n,e.componentType)),n}function wAt(e,t,n){let o=`float(${`value.${n}`})`;if(t.hasValueTransform){let r=t.offset[n],s=t.scale[n];o=sIe(o,r,s)}return e.normalized||(o=aIe(o,e.componentType)),o}function XAt(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=ZAt(d),h=["0.0","0.0","0.0","0.0"],p=rIe(d);if(p===1)h[0]=BAt(d,c);else{let x=["x","y","z","w"];for(let I=0;I<p;I++)h[I]=wAt(d,c,x[I])}let g=t.fragmentShaderSource.defines.slice();g.push(Jd.METADATA_PICKING_ENABLED),cL(g,Jd.METADATA_PICKING_VALUE_TYPE,u),cL(g,Jd.METADATA_PICKING_VALUE_STRING,`metadata.${r}`),cL(g,Jd.METADATA_PICKING_VALUE_COMPONENT_X,h[0]),cL(g,Jd.METADATA_PICKING_VALUE_COMPONENT_Y,h[1]),cL(g,Jd.METADATA_PICKING_VALUE_COMPONENT_Z,h[2]),cL(g,Jd.METADATA_PICKING_VALUE_COMPONENT_W,h[3]);let f=new Oe({sources:t.fragmentShaderSource.sources,defines:g});return e.shaderCache.createDerivedShaderProgram(t,s,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:f,attributeLocations:t._attributeLocations})}lL.createPickMetadataDerivedCommand=function(e,t,n,i){return l(i)||(i={}),i.pickMetadataCommand=ot.shallowClone(t,i.pickMetadataCommand),i.pickMetadataCommand.shaderProgram=XAt(n,t.shaderProgram,t.pickedMetadataInfo),i.pickMetadataCommand.renderState=oIe(e,t.renderState),i.shaderProgramId=t.shaderProgram.id,i};function WAt(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})}lL.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=WAt(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};var Vp=lL;var RNi=y(C(),1);function eY(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=Z.toRadians(o),t._beta=Z.toRadians(i.beta),t._gamma=Z.toRadians(i.gamma)}window.addEventListener("deviceorientation",n,!1),this._removeListener=function(){window.removeEventListener("deviceorientation",n,!1)}}var FAt=new Pe,cIe=new Pe,PAt=new $;function MAt(e,t,n,i){let o=e.direction,r=e.right,s=e.up,a=Pe.fromAxisAngle(o,n,cIe),c=Pe.fromAxisAngle(r,i,FAt),d=Pe.multiply(c,a,c),u=Pe.fromAxisAngle(s,t,cIe);Pe.multiply(u,d,d);let h=$.fromQuaternion(d,PAt);$.multiplyByVector(h,r,r),$.multiplyByVector(h,s,s),$.multiplyByVector(h,o,o)}eY.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;MAt(this._scene.camera,-e,t,n),this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma};eY.prototype.isDestroyed=function(){return!1};eY.prototype.destroy=function(){return this._removeListener(),me(this)};var lM=eY;var XNi=y(C(),1);function H7(){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(H7.prototype,{heightFalloff:{get:function(){return this._heightFalloff},set:function(e){this._heightFalloff=e}}});var vAt=new m;H7.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!==re.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,Z.EPSILON4),-Math.max(this._heightFalloff,0)),s=m.normalize(n.positionWC,vAt),a=Math.abs(m.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 dM=H7;var PNi=y(C(),1);function NAt(e,t,n){this.context=e,this.commandList=[],this.shadowMaps=[],this.brdfLutGenerator=void 0,this.environmentMap=void 0,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this.specularEnvironmentMapsMaximumLOD=void 0,this.mode=re.SCENE3D,this.morphTime=re.getMorphTime(re.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,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}var uM=NAt;var JNi=y(C(),1);var Ja={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},VI=Ja.DERIVED_COMMANDS_MAXIMUM_LENGTH,bIe=["opaqueFrontFaceCommand","opaqueBackFaceCommand","depthOnlyFrontFaceCommand","depthOnlyBackFaceCommand","depthOnlyFrontAndBackFaceCommand","translucentFrontFaceCommand","translucentBackFaceCommand","translucentFrontFaceManualDepthTestCommand","translucentBackFaceManualDepthTestCommand","pickFrontFaceCommand","pickBackFaceCommand"];function GI(){this._frontFaceAlphaByDistance=new zt(0,1,0,1),this._backFaceAlphaByDistance=new zt(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=le.clone(le.MAX_VALUE),this._derivedCommandKey=0,this._derivedCommandsDirty=!1,this._derivedCommandPacks=void 0,this._derivedCommandTypes=new Array(VI),this._derivedBlendCommandTypes=new Array(VI),this._derivedPickCommandTypes=new Array(VI),this._derivedCommandTypesToUpdate=new Array(VI),this._derivedCommandsLength=0,this._derivedBlendCommandsLength=0,this._derivedPickCommandsLength=0,this._derivedCommandsToUpdateLength=0}Object.defineProperties(GI.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}}});GI.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=lIe(t.translucency.enabled,t.translucency.frontFaceAlpha,t.translucency.frontFaceAlphaByDistance,this._frontFaceAlphaByDistance),this._backFaceAlphaByDistance=lIe(t.translucency.enabled,t.translucency.backFaceAlpha,t.translucency.backFaceAlphaByDistance,this._backFaceAlphaByDistance),this._frontFaceTranslucent=dIe(t.translucency.enabled,this._frontFaceAlphaByDistance,t),this._backFaceTranslucent=dIe(t.translucency.enabled,this._backFaceAlphaByDistance,t),this._requiresManualDepthTest=kAt(this,e,t),this._sunVisibleThroughGlobe=DAt(this,e),this._environmentVisible=QAt(this,e),this._useDepthPlane=UAt(this,e),this._numberOfTextureUniforms=YAt(this),this._rectangle=le.clone(t.translucency.rectangle,this._rectangle),OAt(this,e)};function lIe(e,t,n,i){return e?l(n)?(zt.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 dIe(e,t,n){return e&&(n.baseColor.alpha<1||t.nearValue<1||t.farValue<1)}function DAt(e,t){let n=e._frontFaceTranslucent,i=e._backFaceTranslucent;return n&&(t.cameraUnderground||i)}function QAt(e,t){return!t.cameraUnderground||e._frontFaceTranslucent}function UAt(e,t){return!t.cameraUnderground&&!e._frontFaceTranslucent}function kAt(e,t,n){return e._frontFaceTranslucent&&!e._backFaceTranslucent&&!n.depthTestAgainstTerrain&&t.mode!==re.SCENE2D&&t.context.depthTexture}function YAt(e){let t=0;return e._frontFaceTranslucent&&++t,e._requiresManualDepthTest&&++t,t}function OAt(e,t){e._derivedCommandsLength=z7(e,t,!1,!1,e._derivedCommandTypes),e._derivedBlendCommandsLength=z7(e,t,!0,!1,e._derivedBlendCommandTypes),e._derivedPickCommandsLength=z7(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<VI;++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=agt())}function z7(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?Ja.PICK_FRONT_FACE:d?Ja.TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:Ja.TRANSLUCENT_FRONT_FACE,h=i?Ja.PICK_BACK_FACE:d?Ja.TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:Ja.TRANSLUCENT_BACK_FACE;return t.mode===re.SCENE2D?(o[r++]=Ja.DEPTH_ONLY_FRONT_FACE,o[r++]=u,r):(a?(n||(o[r++]=Ja.DEPTH_ONLY_FRONT_AND_BACK_FACE),c?(o[r++]=u,o[r++]=h):(o[r++]=h,o[r++]=u)):c?(n||(o[r++]=Ja.DEPTH_ONLY_BACK_FACE),o[r++]=Ja.OPAQUE_FRONT_FACE,o[r++]=h):(n||(o[r++]=Ja.DEPTH_ONLY_FRONT_FACE),o[r++]=Ja.OPAQUE_BACK_FACE,o[r++]=u),r)}function Nm(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function uIe(e,t){return e.indexOf(t)>-1}function HAt(e,t){Nm(e.defines,"TRANSLUCENT"),Nm(t.defines,"TRANSLUCENT")}function zAt(e,t){Nm(e.defines,"GROUND_ATMOSPHERE"),Nm(t.defines,"GROUND_ATMOSPHERE"),Nm(e.defines,"FOG"),Nm(t.defines,"FOG"),Nm(e.defines,"TRANSLUCENT"),Nm(t.defines,"TRANSLUCENT")}function K7(e,t){if(uIe(t.defines,"TILE_LIMIT_RECTANGLE")||uIe(t.defines,"ENABLE_CLIPPING_PLANES"))return;let n=`void main() { out_FragColor = vec4(1.0); } `;t.sources=[n]}function J7(e,t){let n=t.sources,i=n.length;for(let r=0;r<i;++r)n[r]=Oe.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 yIe(e,t){J7(e,t),Nm(e.defines,"GROUND_ATMOSPHERE"),Nm(t.defines,"GROUND_ATMOSPHERE"),Nm(e.defines,"FOG"),Nm(t.defines,"FOG")}function KAt(e,t){J7(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function JAt(e,t){yIe(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function mIe(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 jAt(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 qAt(e){e.cull.face=Xi.BACK,e.cull.enabled=!0}function $At(e){e.cull.face=Xi.FRONT,e.cull.enabled=!0}function egt(e){e.cull.face=Xi.BACK,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function tgt(e){e.cull.face=Xi.FRONT,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function ngt(e){e.cull.enabled=!1,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function hIe(e){e.cull.face=Xi.BACK,e.cull.enabled=!0,e.depthMask=!1,e.blending=bn.ALPHA_BLEND}function fIe(e){e.cull.face=Xi.FRONT,e.cull.enabled=!0,e.depthMask=!1,e.blending=bn.ALPHA_BLEND}function igt(e){e.cull.face=Xi.BACK,e.cull.enabled=!0,e.blending.enabled=!1}function ogt(e){e.cull.face=Xi.FRONT,e.cull.enabled=!0,e.blending.enabled=!1}function rgt(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=Qe.getState(e);i(s),r=Qe.fromCache(s),o[e.id]=r}return r}function dL(e){return{u_classificationTexture:function(){return e._globeTranslucencyFramebuffer.classificationTexture}}}function sgt(e,t,n,i,o){return l(o)?!i&&l(n)?n:Lt(t,o(e),!1):t}function hf(e){this.pass=e.pass,this.pickOnly=e.pickOnly,this.getShaderProgramFunction=e.getShaderProgramFunction,this.getRenderStateFunction=e.getRenderStateFunction,this.getUniformMapFunction=e.getUniformMapFunction,this.renderStateCache={}}function agt(){return[new hf({pass:Ge.GLOBE,pickOnly:!1,getShaderProgramFunction:HAt,getRenderStateFunction:qAt,getUniformMapFunction:void 0}),new hf({pass:Ge.GLOBE,pickOnly:!1,getShaderProgramFunction:zAt,getRenderStateFunction:$At,getUniformMapFunction:void 0}),new hf({pass:Ge.GLOBE,pickOnly:!1,getShaderProgramFunction:K7,getRenderStateFunction:egt,getUniformMapFunction:void 0}),new hf({pass:Ge.GLOBE,pickOnly:!1,getShaderProgramFunction:K7,getRenderStateFunction:tgt,getUniformMapFunction:void 0}),new hf({pass:Ge.GLOBE,pickOnly:!1,getShaderProgramFunction:K7,getRenderStateFunction:ngt,getUniformMapFunction:void 0}),new hf({pass:Ge.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:J7,getRenderStateFunction:hIe,getUniformMapFunction:dL}),new hf({pass:Ge.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:yIe,getRenderStateFunction:fIe,getUniformMapFunction:dL}),new hf({pass:Ge.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:KAt,getRenderStateFunction:hIe,getUniformMapFunction:dL}),new hf({pass:Ge.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:JAt,getRenderStateFunction:fIe,getUniformMapFunction:dL}),new hf({pass:Ge.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:mIe,getRenderStateFunction:igt,getUniformMapFunction:dL}),new hf({pass:Ge.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:mIe,getRenderStateFunction:ogt,getUniformMapFunction:dL})]}var pIe=new Array(VI),AIe=new Array(VI);GI.prototype.updateDerivedCommands=function(e,t){let n=this._derivedCommandTypesToUpdate,i=this._derivedCommandsToUpdateLength;if(i!==0){for(let o=0;o<i;++o)AIe[o]=this._derivedCommandPacks[n[o]],pIe[o]=bIe[n[o]];cgt(this,e,i,n,pIe,AIe,t)}};function cgt(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,h=a.shaderProgramDirtyFrame??0,p=a.renderStateDirtyFrame??0,g=a.uniformMap!==t.uniformMap,f=a.shaderProgramId!==t.shaderProgram.id,b=a.renderStateId!==t.renderState.id;g&&(a.uniformMapDirtyFrame=d),f&&(a.shaderProgramDirtyFrame=d),b&&(a.renderStateDirtyFrame=d),a.uniformMap=t.uniformMap,a.shaderProgramId=t.shaderProgram.id,a.renderStateId=t.renderState.id;for(let x=0;x<n;++x){let I=r[x],_=i[x],E=o[x],S=a[E],R,G,B;l(S)?(R=S.uniformMap,G=S.shaderProgram,B=S.renderState):(R=void 0,G=void 0,B=void 0),S=ot.shallowClone(t,S),a[E]=S;let w=S.derivedCommands.uniformMapDirtyFrame??0,F=S.derivedCommands.shaderProgramDirtyFrame??0,P=S.derivedCommands.renderStateDirtyFrame??0,A=g||w<u,T=f||F<h,L=b||P<p;A&&(S.derivedCommands.uniformMapDirtyFrame=d),T&&(S.derivedCommands.shaderProgramDirtyFrame=d),L&&(S.derivedCommands.renderStateDirtyFrame=d),S.derivedCommands.type=_,S.pass=I.pass,S.pickOnly=I.pickOnly,S.uniformMap=sgt(e,t.uniformMap,R,A,I.getUniformMapFunction),S.shaderProgram=jAt(s.context,t.shaderProgram,G,T,I.getShaderProgramFunction,E),S.renderState=rgt(t.renderState,B,L,I.getRenderStateFunction,I.renderStateCache)}}}GI.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=bIe[o[a]];n.commandList.push(s[c])}};function CIe(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 gIe(e,t,n,i,o){for(let r=0;r<t;++r)n(e[r],i,o)}var lgt=[Ja.OPAQUE_FRONT_FACE,Ja.OPAQUE_BACK_FACE],dgt=[Ja.DEPTH_ONLY_FRONT_FACE,Ja.DEPTH_ONLY_BACK_FACE,Ja.DEPTH_ONLY_FRONT_AND_BACK_FACE];GI.prototype.executeGlobeCommands=function(e,t,n,i,o){let r=i.context,s=e.commands[Ge.GLOBE],a=e.indices[Ge.GLOBE];a!==0&&(this._globeTranslucencyFramebuffer=n,n.clearClassification(r,o),CIe(s,a,t,i,o,lgt))};GI.prototype.executeGlobeClassificationCommands=function(e,t,n,i,o){let{context:r}=i,{uniformState:s}=r,a=e.commands[Ge.GLOBE],c=e.indices[Ge.GLOBE],d=e.commands[Ge.TERRAIN_CLASSIFICATION],u=e.indices[Ge.TERRAIN_CLASSIFICATION];if(c===0||u===0)return;let h=this._frontFaceTranslucent,p=this._backFaceTranslucent;if((!h||!p)&&gIe(d,u,t,i,o),!h&&!p)return;this._globeTranslucencyFramebuffer=n;let g=s.globeDepthTexture,f=o.framebuffer;if(o.framebuffer=n.classificationFramebuffer,CIe(a,c,t,i,o,dgt),r.depthTexture){let b=n.packDepth(r,o);s.globeDepthTexture=b}gIe(d,u,t,i,o),s.globeDepthTexture=g,o.framebuffer=f};var mM=GI;var g9i=y(C(),1);var qNi=y(C(),1),Ed=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(colorTexture, v_textureCoordinates); } `;function Gp(){this._numSamples=1,this.previousFramebuffer=void 0,this._previousFramebuffer=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this._fbo=new Gi({depthStencil:!0,createDepthAttachments:!1}),this._fboClassified=new Gi({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 xi({color:new U(0,0,0,0),owner:this}),this._clearCommand=new xi({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(Gp.prototype,{unclassifiedCommand:{get:function(){return this._unclassifiedCommand}}});Gp.isTranslucencySupported=function(e){return e.depthTexture&&e.fragmentDepth};var ugt={depthMask:!1,stencilTest:{enabled:!0,frontFunction:ei.EQUAL,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},backFunction:ei.NEVER,reference:0,mask:jt.CLASSIFICATION_MASK},blending:bn.ALPHA_BLEND},mgt={depthMask:!1,stencilTest:{enabled:!0,frontFunction:ei.NOT_EQUAL,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},backFunction:ei.NEVER,reference:0,mask:jt.CLASSIFICATION_MASK},blending:bn.ALPHA_BLEND},hgt={depthMask:!0,depthTest:{enabled:!0},stencilTest:jt.setCesium3DTileBit(),stencilMask:jt.CESIUM_3D_TILE_MASK,blending:bn.ALPHA_BLEND},fgt=`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; } `,pgt=`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 } `;Gp.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 Wt({context:e,width:s,height:a,pixelFormat:tt.DEPTH_STENCIL,pixelDatatype:Ye.UNSIGNED_INT_24_8}),t>1&&(this._depthStencilRenderbuffer=new Hd({context:e,width:s,height:a,format:Tl.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=Qe.fromCache(ugt),this._rsClassified=Qe.fromCache(mgt),this._rsDefault=Qe.fromCache(hgt)),!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)?pgt:fgt,u=new Oe({defines:["UNCLASSIFIED"],sources:[d]}),h=new Oe({sources:[d]});this._unclassifiedCommand=e.createViewportQuadCommand(u,{renderState:l(this._previousFramebuffer)?this._rsUnclassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),this._classifiedCommand=e.createViewportQuadCommand(h,{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(Ed,{renderState:this._rsUnclassified,uniformMap:this._uniformMap,owner:this}))}};Gp.prototype.prepareTextures=function(e,t){this._fbo._numSamples>1&&this._fbo.prepareTextures(e,t)};Gp.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))};Gp.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)};Gp.prototype.executeUnclassified=function(e,t){this._unclassifiedCommand.execute(e,t)};Gp.prototype.isDestroyed=function(){return!1};Gp.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 uL=Gp;var I9i=y(C(),1);function tY(e){this._total=e,this.usedThisFrame=0,this.stolenFromMeThisFrame=0,this.starvedThisFrame=!1,this.starvedLastFrame=!1}Object.defineProperties(tY.prototype,{total:{get:function(){return this._total}}});function dy(e){let t=new Array(uc.NUMBER_OF_JOB_TYPES);t[uc.TEXTURE]=new tY(l(e)?e[uc.TEXTURE]:10),t[uc.PROGRAM]=new tY(l(e)?e[uc.PROGRAM]:10),t[uc.BUFFER]=new tY(l(e)?e[uc.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}dy.getTimestamp=Fi;Object.defineProperties(dy.prototype,{totalBudget:{get:function(){return this._totalBudget}}});dy.prototype.disableThisFrame=function(){this._totalUsedThisFrame=this._totalBudget};dy.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};dy.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=dy.getTimestamp();e.execute();let a=dy.getTimestamp()-s;return this._totalUsedThisFrame+=a,r?r.stolenFromMeThisFrame+=a:i.usedThisFrame+=a,this._executedThisFrame[t]=!0,!0};var hM=dy;var R9i=y(C(),1);function nY(e){e=e??Y.EMPTY_OBJECT;let t=Dn(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=Fi(),this._lastMsSampleTime=Fi(),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(nY.prototype,{throttled:{get:function(){return this._throttled},set:function(e){this._throttled!==e&&(e?this._throttledText.nodeValue="(throttled)":this._throttledText.nodeValue="",this._throttled=e)}}});nY.prototype.update=function(e){let t=Fi(),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}};nY.prototype.destroy=function(){return me(this)};var kg=nY;var RUi=y(C(),1);var D9i=y(C(),1);var ja={};ja.decodeRawMetadataValue=function(e,t,n){switch(e){case Ut.INT8:return t.getInt8(n);case Ut.UINT8:return t.getUint8(n);case Ut.INT16:return t.getInt16(n,!0);case Ut.UINT16:return t.getUint16(n,!0);case Ut.INT32:return t.getInt32(n,!0);case Ut.UINT32:return t.getUint32(n,!0);case Ut.INT64:return t.getBigInt64(n,!0);case Ut.UINT64:return t.getBigUint64(n,!0);case Ut.FLOAT32:return t.getFloat32(n,!0);case Ut.FLOAT64:return t.getFloat64(n,!0)}throw new de(`Invalid component type: ${e}`)};ja.decodeRawMetadataValueComponent=function(e,t,n){let i=e.componentType,o=ja.decodeRawMetadataValue(i,t,n);return e.normalized?Ut.normalize(o,i):o};ja.decodeRawMetadataValueElement=function(e,t,n){let i=e.componentType,o=Ut.getSizeInBytes(i),r=e.type,s=bt.getComponentCount(r),a=o*s;if(s>1){let u=Array(s);for(let h=0;h<s;h++){let p=n*a+h*o,g=ja.decodeRawMetadataValueComponent(e,t,p);u[h]=g}return u}let c=n*a;return ja.decodeRawMetadataValueComponent(e,t,c)};ja.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=ja.decodeRawMetadataValueElement(e,n,s);r[s]=a}return r}return ja.decodeRawMetadataValueElement(e,n,0)};ja.convertToObjectType=function(e,t){if(!l(t)||e===bt.SCALAR||e===bt.STRING||e===bt.BOOLEAN||e===bt.ENUM)return t;let n=t.map(i=>Number(i));switch(e){case bt.VEC2:return D.unpack(n,0,new D);case bt.VEC3:return m.unpack(n,0,new m);case bt.VEC4:return ce.unpack(n,0,new ce);case bt.MAT2:return Qi.unpack(n,0,new Qi);case bt.MAT3:return $.unpack(n,0,new $);case bt.MAT4:return X.unpack(n,0,new X)}throw new de(`Invalid metadata object type: ${e}`)};ja.convertFromObjectType=function(e,t){if(!l(t)||e===bt.SCALAR||e===bt.STRING||e===bt.BOOLEAN||e===bt.ENUM)return t;switch(e){case bt.VEC2:return D.pack(t,Array(2));case bt.VEC3:return m.pack(t,Array(3));case bt.VEC4:return ce.pack(t,Array(4));case bt.MAT2:return Qi.pack(t,Array(4));case bt.MAT3:return $.pack(t,Array(9));case bt.MAT4:return X.pack(t,Array(16))}throw new de(`Invalid metadata object type: ${e}`)};ja.decodeMetadataValues=function(e,t,n){let i=ja.decodeRawMetadataValues(e,n);if(t.hasValueTransform){let r=ja.convertFromObjectType(e.type,t.offset),s=ja.convertFromObjectType(e.type,t.scale);i=Qf.valueTransformInPlace(i,r,s,Ut.applyValueTransform)}if(e.isArray){let r=e.arrayLength,s=Array(r);for(let a=0;a<r;a++){let c=i[a],d=ja.convertToObjectType(e.type,c);s[a]=d}return s}return ja.convertToObjectType(e.type,i)};var fM=Object.freeze(ja);var z9i=y(C(),1);function ZI(){this._framebuffer=new Gi,this._textureToCopy=void 0,this._copyDepthCommand=void 0}Object.defineProperties(ZI.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function Agt(e,t,n){let{width:i,height:o}=n;e._framebuffer.update(t,i,o)}function ggt(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:Qe.fromCache(),uniformMap:{colorTexture:function(){return e._textureToCopy}},owner:e})),e._textureToCopy=n,e._copyDepthCommand.framebuffer=e.framebuffer}ZI.prototype.update=function(e,t){Agt(this,e,t),ggt(this,e,t)};var bgt=new ce,ygt=new ce(1,1/255,1/65025,1/16581375);ZI.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,bgt);return ce.divideByScalar(o,255,o),ce.dot(o,ygt)};ZI.prototype.executeCopyDepth=function(e,t){this._copyDepthCommand.execute(e,t)};ZI.prototype.isDestroyed=function(){return!1};ZI.prototype.destroy=function(){return this._framebuffer.destroy(),l(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=l(this._copyDepthCommand.shaderProgram)&&this._copyDepthCommand.shaderProgram.destroy()),me(this)};var pM=ZI;var nUi=y(C(),1);var j9i=y(C(),1);function Cgt(e,t){this.near=e??0,this.far=t??0;let n=Ge.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 AM=Cgt;var pDi=y(C(),1);var $9i=y(C(),1),uy=`uniform highp sampler2D u_depthTexture; in vec2 v_textureCoordinates; void main() { out_FragColor = czm_packDepth(texture(u_depthTexture, v_textureCoordinates).r); } `;function Zp(){this._picking=!1,this._numSamples=1,this._tempCopyDepthTexture=void 0,this._pickColorFramebuffer=new Gi({depthStencil:!0,supportsDepthTexture:!0}),this._outputFramebuffer=new Gi({depthStencil:!0,supportsDepthTexture:!0}),this._copyDepthFramebuffer=new Gi,this._tempCopyDepthFramebuffer=new Gi,this._updateDepthFramebuffer=new Gi({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 Ke,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(Zp.prototype,{colorFramebufferManager:{get:function(){return 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}}});function xIe(e,t,n,i,o){let r=e._viewport;r.width=n,r.height=i;let s=!Ke.equals(r,o.viewport),a=s!==e._useScissorTest;e._useScissorTest=s,Ke.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=Ke.clone(o.viewport,e._scissorRectangle),a=!0),(!l(e._rs)||!Ke.equals(r,e._rs.viewport)||a)&&(e._rs=Qe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}}),e._rsBlend=Qe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:bn.ALPHA_BLEND}),e._rsUpdate=Qe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:ei.EQUAL,frontOperation:{fail:Ct.KEEP,zFail:Ct.KEEP,zPass:Ct.KEEP},backFunction:ei.NEVER,reference:jt.CESIUM_3D_TILE_MASK,mask:jt.CESIUM_3D_TILE_MASK}})),l(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(uy,{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(Ed,{uniformMap:{colorTexture:function(){return e.colorFramebufferManager.getColorTexture()}},owner:e})),e._copyColorCommand.renderState=e._rs,l(e._tempCopyDepthCommand)||(e._tempCopyDepthCommand=t.createViewportQuadCommand(uy,{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(Ed,{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 xi({color:new U(0,0,0,0),stencil:0,owner:e})),e._clearGlobeColorCommand.framebuffer=e.framebuffer}Zp.prototype.update=function(e,t,n,i,o,r){let{width:s,height:a}=n,c=o?e.halfFloatingPointTexture?Ye.HALF_FLOAT:Ye.FLOAT:Ye.UNSIGNED_BYTE;this._numSamples=i,this.picking?this._pickColorFramebuffer.update(e,s,a):this._outputFramebuffer.update(e,s,a,i,c),this._copyDepthFramebuffer.update(e,s,a),xIe(this,e,s,a,t),e.uniformState.globeDepthTexture=void 0,this._clearGlobeDepth=r};Zp.prototype.prepareColorTextures=function(e,t){!this.picking&&this._numSamples>1&&this._outputFramebuffer.prepareTextures(e,t)};Zp.prototype.executeCopyDepth=function(e,t){l(this._copyDepthCommand)&&(this.prepareColorTextures(e),this._copyDepthCommand.execute(e,t),e.uniformState.globeDepthTexture=this._copyDepthFramebuffer.getColorTexture())};Zp.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),xIe(this,e,s,a,t)}this._tempCopyDepthTexture=i,this._tempCopyDepthCommand.execute(e,t),this._updateDepthCommand.execute(e,t)};Zp.prototype.executeCopyColor=function(e,t){l(this._copyColorCommand)&&this._copyColorCommand.execute(e,t)};Zp.prototype.clear=function(e,t,n){let i=this._clearGlobeColorCommand;l(i)&&(U.clone(n,i.color),this.colorFramebufferManager.clear(e,i,t))};Zp.prototype.isDestroyed=function(){return!1};Zp.prototype.destroy=function(){return this._pickColorFramebuffer.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 gM=Zp;var SDi=y(C(),1);function BI(){this._framebuffer=new Gi({depthStencil:!0,supportsDepthTexture:!0}),this._packedDepthFramebuffer=new Gi,this._renderState=void 0,this._packedDepthCommand=void 0,this._clearCommand=void 0,this._viewport=new Ke,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0}Object.defineProperties(BI.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 xgt(e){e._framebuffer.destroy(),e._packedDepthFramebuffer.destroy()}function Igt(e,t,n,i,o){let r=o?t.halfFloatingPointTexture?Ye.HALF_FLOAT:Ye.FLOAT:Ye.UNSIGNED_BYTE;e._framebuffer.update(t,n,i,1,r),e._packedDepthFramebuffer.update(t,n,i)}function _gt(e,t,n,i,o){e._viewport.width=n,e._viewport.height=i;let r=!Ke.equals(e._viewport,o.viewport),s=r!==e._useScissorTest;e._useScissorTest=r,Ke.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=Ke.clone(o.viewport,e._scissorRectangle),s=!0),(!l(e._renderState)||!Ke.equals(e._viewport,e._renderState.viewport)||s)&&(e._renderState=Qe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),l(e._packedDepthCommand)||(e._packedDepthCommand=t.createViewportQuadCommand(uy,{uniformMap:{u_depthTexture:function(){return e.depthStencilTexture}},owner:e})),l(e._clearCommand)||(e._clearCommand=new xi({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}BI.prototype.updateAndClear=function(e,t,n,i){let o=t.width,r=t.height;Igt(this,n,o,r,e),_gt(this,n,o,r,i),this._useHdr=e};BI.prototype.clearClassification=function(e,t){this._clearCommand.execute(e,t)};BI.prototype.packDepth=function(e,t){return this._packedDepthCommand.execute(e,t),this.packedDepthTexture};BI.prototype.isDestroyed=function(){return!1};BI.prototype.destroy=function(){return xgt(this),me(this)};var bM=BI;var YDi=y(C(),1);function Yg(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 Gi({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._alphaFBO=new Gi({createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._adjustTranslucentFBO=new Gi({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1}),this._adjustAlphaFBO=new Gi({createColorAttachments:!1}),this._opaqueClearCommand=new xi({color:new U(0,0,0,0),owner:this}),this._translucentMRTClearCommand=new xi({color:new U(0,0,0,1),owner:this}),this._translucentMultipassClearCommand=new xi({color:new U(0,0,0,0),owner:this}),this._alphaClearCommand=new xi({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 Ke,this._rs=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHDR=!1}function IIe(e){e._accumulationTexture=e._accumulationTexture&&!e._accumulationTexture.isDestroyed()&&e._accumulationTexture.destroy(),e._revealageTexture=e._revealageTexture&&!e._revealageTexture.isDestroyed()&&e._revealageTexture.destroy()}function j7(e){e._translucentFBO.destroy(),e._alphaFBO.destroy(),e._adjustTranslucentFBO.destroy(),e._adjustAlphaFBO.destroy()}function _Ie(e){IIe(e),j7(e)}function Egt(e,t,n,i){IIe(e),e._accumulationTexture=new Wt({context:t,width:n,height:i,pixelFormat:tt.RGBA,pixelDatatype:Ye.FLOAT}),e._revealageTexture=new Wt({context:t,pixelFormat:tt.RGBA,pixelDatatype:Ye.FLOAT,width:n,height:i,flipY:!1})}function Tgt(e,t){j7(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)&&(j7(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)&&(_Ie(e),e._translucentMultipassSupport=!1,i=!1)}return i}Yg.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,Egt(this,e,r,s)),(!l(this._translucentFBO.framebuffer)||c||d)&&!Tgt(this,e))return;this._useHDR=i;let u=this,h,p;l(this._compositeCommand)||(h=new Oe({sources:[pP]}),this._translucentMRTSupport&&h.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(h,{uniformMap:p,owner:this})),l(this._adjustTranslucentCommand)||(this._translucentMRTSupport?(h=new Oe({defines:["MRT"],sources:[KS]}),p={u_bgColor:function(){return u._translucentMRTClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(h,{uniformMap:p,owner:this})):this._translucentMultipassSupport&&(h=new Oe({sources:[KS]}),p={u_bgColor:function(){return u._translucentMultipassClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(h,{uniformMap:p,owner:this}),p={u_bgColor:function(){return u._alphaClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustAlphaCommand=e.createViewportQuadCommand(h,{uniformMap:p,owner:this}))),this._viewport.width=r,this._viewport.height=s;let g=!Ke.equals(this._viewport,t.viewport),f=g!==this._useScissorTest;this._useScissorTest=g,Ke.equals(this._scissorRectangle,t.viewport)||(this._scissorRectangle=Ke.clone(t.viewport,this._scissorRectangle),f=!0),(!l(this._rs)||!Ke.equals(this._viewport,this._rs.viewport)||f)&&(this._rs=Qe.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 Sgt={enabled:!0,color:new U(0,0,0,0),equationRgb:ac.ADD,equationAlpha:ac.ADD,functionSourceRgb:Po.ONE,functionDestinationRgb:Po.ONE,functionSourceAlpha:Po.ZERO,functionDestinationAlpha:Po.ONE_MINUS_SOURCE_ALPHA},Lgt={enabled:!0,color:new U(0,0,0,0),equationRgb:ac.ADD,equationAlpha:ac.ADD,functionSourceRgb:Po.ONE,functionDestinationRgb:Po.ONE,functionSourceAlpha:Po.ONE,functionDestinationAlpha:Po.ONE},Rgt={enabled:!0,color:new U(0,0,0,0),equationRgb:ac.ADD,equationAlpha:ac.ADD,functionSourceRgb:Po.ZERO,functionDestinationRgb:Po.ONE_MINUS_SOURCE_ALPHA,functionSourceAlpha:Po.ZERO,functionDestinationAlpha:Po.ONE_MINUS_SOURCE_ALPHA};function q7(e,t,n,i){let o=n[i.id];if(!l(o)){let r=Qe.getState(i);r.depthMask=!1,r.blending=t,o=Qe.fromCache(r),n[i.id]=o}return o}function Vgt(e,t,n){return q7(t,Sgt,e._translucentRenderStateCache,n)}function Ggt(e,t,n){return q7(t,Lgt,e._translucentRenderStateCache,n)}function Zgt(e,t,n){return q7(t,Rgt,e._alphaRenderStateCache,n)}var Bgt=` 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); `,wgt=` 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; `,Xgt=` float ai = czm_out_FragColor.a; out_FragColor = vec4(ai); `;function $7(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 Oe.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,`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 h=c[u];d=`layout (location = ${h[1]}) out vec4 ${h[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 Wgt(e,t){return $7(e,t,"translucentMRT",Bgt)}function Fgt(e,t){return $7(e,t,"translucentMultipass",wgt)}function Pgt(e,t){return $7(e,t,"alphaMultipass",Xgt)}Yg.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=Wgt(t,e.shaderProgram),n.translucentCommand.renderState=Vgt(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=Fgt(t,e.shaderProgram),n.translucentCommand.renderState=Ggt(this,t,e.renderState),n.alphaCommand.shaderProgram=Pgt(t,e.shaderProgram),n.alphaCommand.renderState=Zgt(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 Mgt(e,t,n,i,o,r){let{context:s,frameState:a}=t,{useLogDepth:c,shadowState:d}=a,u=t._hdr,h=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 g=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let f=0;f<o.length;++f){let b=o[f];b=c?b.derivedCommands.logDepth.command:b,b=u?b.derivedCommands.hdr.command:b;let x=p&&b.receiveShadows?b.derivedCommands.oit.shadows.translucentCommand:b.derivedCommands.oit.translucentCommand;n(x,t,i,g)}if(l(r)){let f=r.unclassifiedCommand,b=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand;n(b,t,i,g)}i.framebuffer=e._alphaFBO.framebuffer;for(let f=0;f<o.length;++f){let b=o[f];b=c?b.derivedCommands.logDepth.command:b,b=u?b.derivedCommands.hdr.command:b;let x=p&&b.receiveShadows?b.derivedCommands.oit.shadows.alphaCommand:b.derivedCommands.oit.alphaCommand;n(x,t,i,g)}if(l(r)){let f=r.unclassifiedCommand,b=p&&f.receiveShadows?f.derivedCommands.oit.shadows.alphaCommand:f.derivedCommands.oit.alphaCommand;n(b,t,i,g)}i.framebuffer=h}function vgt(e,t,n,i,o,r){let{context:s,frameState:a}=t,{useLogDepth:c,shadowState:d}=a,u=t._hdr,h=i.framebuffer,p=d.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO.framebuffer,e._adjustTranslucentCommand.execute(s,i);let g=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let f=0;f<o.length;++f){let b=o[f];b=c?b.derivedCommands.logDepth.command:b,b=u?b.derivedCommands.hdr.command:b;let x=p&&b.receiveShadows?b.derivedCommands.oit.shadows.translucentCommand:b.derivedCommands.oit.translucentCommand;n(x,t,i,g)}if(l(r)){let f=r.unclassifiedCommand,b=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand;n(b,t,i,g)}i.framebuffer=h}Yg.prototype.executeCommands=function(e,t,n,i,o){if(this._translucentMRTSupport){vgt(this,e,t,n,i,o);return}Mgt(this,e,t,n,i,o)};Yg.prototype.execute=function(e,t){this._compositeCommand.execute(e,t)};Yg.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};Yg.prototype.isSupported=function(){return this._translucentMRTSupport||this._translucentMultipassSupport};Yg.prototype.isDestroyed=function(){return!1};Yg.prototype.destroy=function(){return _Ie(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 yM=Yg;var jDi=y(C(),1);function CM(){this._framebuffer=new Gi({color:!1,depthStencil:!0,supportsDepthTexture:!0}),this._passState=void 0}Object.defineProperties(CM.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function Ngt(e){e._framebuffer.destroy()}function Dgt(e,t){let n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._framebuffer.update(t,n,i);let o=new Hc(t);o.blendingEnabled=!1,o.scissorTest={enabled:!0,rectangle:new Ke},o.viewport=new Ke,e._passState=o}CM.prototype.update=function(e,t,n){let i=n.width,o=n.height;this._framebuffer.isDirty(i,o)&&Dgt(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};CM.prototype.isDestroyed=function(){return!1};CM.prototype.destroy=function(){return Ngt(this),me(this)};var xM=CM;var rQi=y(C(),1);function mL(e){let t=new Hc(e);t.blendingEnabled=!1,t.scissorTest={enabled:!0,rectangle:new Ke},t.viewport=new Ke,this._context=e,this._fb=new Gi({depthStencil:!0}),this._passState=t,this._width=0,this._height=0}mL.prototype.begin=function(e,t){let n=this._context,{width:i,height:o}=t;return Ke.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};var IM=new U;mL.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,framebuffer:this._fb.framebuffer}),r=Math.max(t,n),s=r*r,a=Math.floor(t*.5),c=Math.floor(n*.5),d=0,u=0,h=0,p=-1;for(let g=0;g<s;++g){if(-a<=d&&d<=a&&-c<=u&&u<=c){let f=4*((c-u)*t+d+a);IM.red=U.byteToFloat(o[f]),IM.green=U.byteToFloat(o[f+1]),IM.blue=U.byteToFloat(o[f+2]),IM.alpha=U.byteToFloat(o[f+3]);let b=i.getObjectByPickColor(IM);if(l(b))return b}if(d===u||d<0&&-d===u||d>0&&d===1-u){let f=h;h=-p,p=f}d+=h,u+=p}};mL.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)};mL.prototype.isDestroyed=function(){return!1};mL.prototype.destroy=function(){return this._fb.destroy(),me(this)};var _M=mL;var mQi=y(C(),1);function Og(){this._numSamples=1,this._colorFramebuffer=new Gi({depthStencil:!0,supportsDepthTexture:!0}),this._idFramebuffer=new Gi({depthStencil:!0,supportsDepthTexture:!0}),this._idClearColor=new U(0,0,0,0),this._clearCommand=new xi({color:new U(0,0,0,0),depth:1,owner:this})}function Qgt(e){e._colorFramebuffer.destroy(),e._idFramebuffer.destroy()}Object.defineProperties(Og.prototype,{framebuffer:{get:function(){return this._colorFramebuffer.framebuffer}},idFramebuffer:{get:function(){return this._idFramebuffer.framebuffer}},depthStencilTexture:{get:function(){return this._colorFramebuffer.getDepthStencilTexture()}}});Og.prototype.update=function(e,t,n,i){let o=t.width,r=t.height,s=n?e.halfFloatingPointTexture?Ye.HALF_FLOAT:Ye.FLOAT:Ye.UNSIGNED_BYTE;this._numSamples=i,this._colorFramebuffer.update(e,o,r,i,s),this._idFramebuffer.update(e,o,r)};Og.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)};Og.prototype.getFramebuffer=function(){return this._colorFramebuffer.framebuffer};Og.prototype.getIdFramebuffer=function(){return this._idFramebuffer.framebuffer};Og.prototype.prepareColorTextures=function(e){this._numSamples>1&&this._colorFramebuffer.prepareTextures(e)};Og.prototype.isDestroyed=function(){return!1};Og.prototype.destroy=function(){return Qgt(this),me(this)};var wI=Og;var l5i=y(C(),1);var AQi=y(C(),1);function XI(){}XI.getShadowCastShaderKeyword=function(e,t,n,i){return`castShadow ${e} ${t} ${n} ${i}`};XI.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=Oe.findPositionVarying(e),s=l(r);if(t&&!s){let a=o.length;for(let d=0;d<a;++d)o[d]=Oe.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 Oe({defines:i,sources:o})};XI.createShadowCastFragmentShader=function(e,t,n,i){let o=e.defines.slice(0),r=e.sources.slice(0);o.push("SHADOW_MAP");let s=Oe.findPositionVarying(e),a=l(s);a||(s="v_positionEC");let c=r.length;for(let u=0;u<c;++u)r[u]=Oe.replaceMain(r[u],"czm_shadow_cast_main");let d="";return t&&(a||(d+=`in vec3 v_positionEC; `),d+=`uniform vec4 shadowMap_lightPositionEC; `),i?d+=`void main() { `:d+=`void main() { czm_shadow_cast_main(); if (out_FragColor.a == 0.0) { discard; } `,t?d+=` float distance = length(${s}); if (distance >= shadowMap_lightPositionEC.w) { discard; } distance /= shadowMap_lightPositionEC.w; // radius out_FragColor = czm_packDepth(distance); `:n?d+=` out_FragColor = vec4(1.0); `:d+=` out_FragColor = czm_packDepth(gl_FragCoord.z); `,d+=`} `,r.push(d),new Oe({defines:o,sources:r})};XI.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}`};XI.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 Oe({defines:i,sources:o})};XI.createShadowReceiveFragmentShader=function(e,t,n,i,o){let r=Oe.findNormalVarying(e),s=!i&&l(r)||i&&o,a=Oe.findPositionVarying(e),c=l(a),d=t._usesDepthTexture,u=t._polygonOffsetSupported,h=t._isPointLight,p=t._isSpotLight,g=t._numberOfCascades>1,f=t.debugCascadeColors,b=t.softShadows,x=h?t._pointBias:i?t._terrainBias:t._primitiveBias,I=e.defines.slice(0),_=e.sources.slice(0),E=_.length;for(let G=0;G<E;++G)_[G]=Oe.replaceMain(_[G],"czm_shadow_receive_main");h?I.push("USE_CUBE_MAP_SHADOW"):d&&I.push("USE_SHADOW_DEPTH_TEXTURE"),b&&!h&&I.push("USE_SOFT_SHADOWS"),g&&n&&i&&(s?I.push("ENABLE_VERTEX_LIGHTING"):I.push("ENABLE_DAYNIGHT_SHADING")),n&&x.normalShading&&s&&(I.push("USE_NORMAL_SHADING"),x.normalShadingSmooth>0&&I.push("USE_NORMAL_SHADING_SMOOTH"));let S="";h?S+=`uniform samplerCube shadowMap_textureCube; `:S+=`uniform sampler2D shadowMap_texture; `;let R;return c?R=` return vec4(${a}, 1.0); `:R=`#ifndef LOG_DEPTH return czm_windowToEyeCoordinates(gl_FragCoord); #else return vec4(v_logPositionEC, 1.0); #endif `,S+=`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() { ${R}} vec3 getNormalEC() { ${s?` return normalize(${r}); `:` return vec3(1.0); `}} void applyNormalOffset(inout vec4 positionEC, vec3 normalEC, float nDotL) { ${x.normalOffset&&s?` float normalOffset = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.x; float normalOffsetScale = 1.0 - nDotL; vec3 offset = normalOffset * normalOffsetScale * normalEC; positionEC.xyz += offset; `:""}} `,S+=`void main() { czm_shadow_receive_main(); vec4 positionEC = getPositionEC(); vec3 normalEC = getNormalEC(); float depth = -positionEC.z; `,S+=` czm_shadowParameters shadowParameters; shadowParameters.texelStepSize = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy; shadowParameters.depthBias = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z; shadowParameters.normalShadingSmooth = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w; shadowParameters.darkness = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w; `,i?S+=` shadowParameters.depthBias *= max(depth * 0.01, 1.0); `:u||(S+=` shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015); `),h?S+=` 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?S+=` 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); `:g?S+=` 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); `:""}`:S+=` 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); `,S+=` out_FragColor.rgb *= visibility; } `,_.push(S),new Oe({defines:I,sources:_})};var Bp=XI;function wp(e){e=e??Y.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;(Ht.isInternetExplorer()||Ht.isEdge()||(Ht.isChrome()||Ht.isFirefox())&&Ht.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 X,this._shadowMapTexture=void 0,this._lightDirectionEC=new m,this._lightPositionEC=new ce,this._distance=0,this._lightCamera=e.lightCamera,this._shadowMapCamera=new iY,this._shadowMapCullingVolume=void 0,this._sceneCamera=void 0,this._boundingSphere=new ue,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 D,this._isSpotLight=!1,this._cascadesEnabled?this._shadowMapCamera.frustum=new qr:l(this._lightCamera.frustum.fov)&&(this._isSpotLight=!0),this._cascadeSplits=[new ce,new ce],this._cascadeMatrices=[new X,new X,new X,new X],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 Ugt(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,t6(this),this._clearCommand=new xi({depth:1,color:new U}),this._clearPassState=new Hc(t),this._size=e.size??2048,this.size=this._size}wp.MAXIMUM_DISTANCE=2e4;function Ugt(e){this.camera=new iY,this.passState=new Hc(e),this.framebuffer=void 0,this.textureOffsets=void 0,this.commandList=[],this.cullingVolume=void 0}function e6(e,t){return Qe.fromCache({cull:{enabled:!0,face:Xi.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 t6(e){let t=!e._usesDepthTexture;e._primitiveRenderState=e6(t,e._primitiveBias),e._terrainRenderState=e6(t,e._terrainBias),e._pointRenderState=e6(t,e._pointBias)}wp.prototype.debugCreateRenderStates=function(){t6(this)};Object.defineProperties(wp.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){Kgt(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 n6(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 kgt(e,t){let n=new Hd({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Tl.DEPTH_COMPONENT16}),i=new Wt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:tt.RGBA,pixelDatatype:Ye.UNSIGNED_BYTE,sampler:sn.NEAREST}),o=new jr({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 Ygt(e,t){let n=new Wt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:tt.DEPTH_STENCIL,pixelDatatype:Ye.UNSIGNED_INT_24_8,sampler:sn.NEAREST}),i=new jr({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 Ogt(e,t){let n=new Hd({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Tl.DEPTH_COMPONENT16}),i=new Pr({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:tt.RGBA,pixelDatatype:Ye.UNSIGNED_BYTE,sampler:sn.NEAREST}),o=[i.negativeX,i.negativeY,i.negativeZ,i.positiveX,i.positiveY,i.positiveZ];for(let r=0;r<6;++r){let s=new jr({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 SIe(e,t){e._isPointLight?Ogt(e,t):e._usesDepthTexture?Ygt(e,t):kgt(e,t)}function Hgt(e,t){e._usesDepthTexture&&e._passes[0].framebuffer.status!==ne.FRAMEBUFFER_COMPLETE&&(e._usesDepthTexture=!1,t6(e),n6(e),SIe(e,t))}function zgt(e,t){(!l(e._passes[0].framebuffer)||e._shadowMapTexture.width!==e._textureSize.x)&&(n6(e),SIe(e,t),Hgt(e,t),LIe(e,t))}function LIe(e,t,n){n=n??0,(e._isPointLight||n===0)&&(e._clearCommand.framebuffer=e._passes[n].framebuffer,e._clearCommand.execute(t,e._clearPassState))}function Kgt(e,t){e._size=t;let n=e._passes,i=n.length,o=e._textureSize;if(e._isPointLight){t=Kt.maximumCubeMapSize>=t?t:Kt.maximumCubeMapSize,o.x=t,o.y=t;let r=new Ke(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=Kt.maximumTextureSize>=t?t:Kt.maximumTextureSize,o.x=t,o.y=t,n[0].passState.viewport=new Ke(0,0,t,t)):i===4&&(t=Kt.maximumTextureSize>=t*2?t:Kt.maximumTextureSize/2,o.x=t*2,o.y=t*2,n[0].passState.viewport=new Ke(0,0,t,t),n[1].passState.viewport=new Ke(t,0,t,t),n[2].passState.viewport=new Ke(0,t,t,t),n[3].passState.viewport=new Ke(t,t,t,t));e._clearPassState.viewport=new Ke(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,h=a.height/o.y;s.textureOffsets=new X(u,0,0,c,0,h,0,d,0,0,1,0,0,0,0,1)}}var Jgt=new Ke;function jgt(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=Ge.OVERLAY,i}function qgt(e,t){let n=t.context,i=t.context.drawingBufferWidth,o=t.context.drawingBufferHeight,r=Math.min(i,o)*.3,s=Jgt;s.x=i-r,s.y=0,s.width=r,s.height=r;let a=e._debugShadowViewCommand;l(a)||(a=jgt(e,n),e._debugShadowViewCommand=a),(!l(a.renderState)||!Ke.equals(a.renderState.viewport,s))&&(a.renderState=Qe.fromCache({viewport:Ke.clone(s)})),t.commandList.push(e._debugShadowViewCommand)}var Xp=new Array(8);Xp[0]=new ce(-1,-1,-1,1);Xp[1]=new ce(1,-1,-1,1);Xp[2]=new ce(1,1,-1,1);Xp[3]=new ce(-1,1,-1,1);Xp[4]=new ce(-1,-1,1,1);Xp[5]=new ce(1,-1,1,1);Xp[6]=new ce(1,1,1,1);Xp[7]=new ce(-1,1,1,1);var my=new X,i6=new Array(8);for(let e=0;e<8;++e)i6[e]=new ce;function $gt(e,t){let n=new wt({geometry:new nh({minimum:new m(-.5,-.5,-.5),maximum:new m(.5,.5,.5)}),attributes:{color:tn.fromColor(t)}}),i=new wt({geometry:new cg({radius:.5}),attributes:{color:tn.fromColor(t)}});return new Nn({geometryInstances:[n,i],appearance:new yn({translucent:!1,flat:!0}),asynchronous:!1,modelMatrix:e})}var ebt=[U.RED,U.GREEN,U.BLUE,U.MAGENTA],tbt=new m;function nbt(e,t){qgt(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 Rp({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 Rp({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 Rp({camera:e._passes[i].camera,color:ebt[i],updateOnChange:!1})),e._debugCascadeFrustums[i].update(t)}}else if(e._isPointLight){if(!l(e._debugLightFrustum)||e._needsUpdate){let i=e._shadowMapCamera.positionWC,o=Pe.IDENTITY,r=e._pointLightRadius*2,s=m.fromElements(r,r,r,tbt),a=X.fromTranslationQuaternionRotationScale(i,o,s,my);e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=$gt(a,U.YELLOW)}e._debugLightFrustum.update(t)}else(!l(e._debugLightFrustum)||e._needsUpdate)&&(e._debugLightFrustum=new Rp({camera:e._shadowMapCamera,color:U.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t)}function iY(){this.viewMatrix=new X,this.inverseViewMatrix=new X,this.frustum=void 0,this.positionCartographic=new ge,this.positionWC=new m,this.directionWC=m.clone(m.UNIT_Z),this.upWC=m.clone(m.UNIT_Y),this.rightWC=m.clone(m.UNIT_X),this.viewProjectionMatrix=new X}iY.prototype.clone=function(e){X.clone(e.viewMatrix,this.viewMatrix),X.clone(e.inverseViewMatrix,this.inverseViewMatrix),this.frustum=e.frustum.clone(this.frustum),ge.clone(e.positionCartographic,this.positionCartographic),m.clone(e.positionWC,this.positionWC),m.clone(e.directionWC,this.directionWC),m.clone(e.upWC,this.upWC),m.clone(e.rightWC,this.rightWC)};var ibt=new X(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);iY.prototype.getViewProjection=function(){let e=this.viewMatrix,t=this.frustum.projectionMatrix;return X.multiply(t,e,this.viewProjectionMatrix),X.multiply(ibt,this.viewProjectionMatrix,this.viewProjectionMatrix),this.viewProjectionMatrix};var obt=new Array(5),rbt=new Ni,sbt=new Array(4),RIe=new m,VIe=new m;function abt(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,h=!1;t.shadowState.closestObjectSize<200&&(h=!0,u=.9);let p=sbt,g=obt;for(g[0]=o,g[s]=r,a=0;a<s;++a){let P=(a+1)/s,A=o*Math.pow(d,P),T=o+c*P,L=Z.lerp(T,A,u);g[a+1]=L,p[a]=L-g[a]}if(h){for(a=0;a<s;++a)p[a]=Math.min(p[a],e._maximumCascadeDistances[a]);let P=g[0];for(a=0;a<s-1;++a)P+=p[a],g[a+1]=P}ce.unpack(g,0,e._cascadeSplits[0]),ce.unpack(g,1,e._cascadeSplits[1]),ce.unpack(p,0,e._cascadeDistances);let f=n.frustum,b=f.left,x=f.right,I=f.bottom,_=f.top,E=f.near,S=f.far,R=n.positionWC,G=n.directionWC,B=n.upWC,w=i.frustum.clone(rbt),F=n.getViewProjection();for(a=0;a<s;++a){w.near=g[a],w.far=g[a+1];let P=X.multiply(w.projectionMatrix,i.viewMatrix,my),A=X.inverse(P,my),T=X.multiply(F,A,my),L=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,RIe),V=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,VIe);for(let k=0;k<8;++k){let v=ce.clone(Xp[k],i6[k]);X.multiplyByVector(T,v,v),m.divideByScalar(v,v.w,v),m.minimumByComponent(v,L,L),m.maximumByComponent(v,V,V)}L.x=Math.max(L.x,0),L.y=Math.max(L.y,0),L.z=0,V.x=Math.min(V.x,1),V.y=Math.min(V.y,1),V.z=Math.min(V.z,1);let W=e._passes[a],M=W.camera;M.clone(n);let Q=M.frustum;Q.left=b+L.x*(x-b),Q.right=b+V.x*(x-b),Q.bottom=I+L.y*(_-I),Q.top=I+V.y*(_-I),Q.near=E+L.z*(S-E),Q.far=E+V.z*(S-E),W.cullingVolume=M.frustum.computeCullingVolume(R,G,B);let N=e._cascadeMatrices[a];X.multiply(M.getViewProjection(),i.inverseViewMatrix,N),X.multiply(W.textureOffsets,N,N)}}var cbt=new X,lbt=new m,dbt=new m,EIe=new m;function ubt(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=X.multiply(i.frustum.projectionMatrix,i.viewMatrix,my),r=X.inverse(o,my),s=n.directionWC,a=i.directionWC;m.equalsEpsilon(s,a,Z.EPSILON10)&&(a=i.upWC);let c=m.cross(s,a,lbt);a=m.cross(c,s,dbt),m.normalize(a,a),m.normalize(c,c);let d=m.fromElements(0,0,0,EIe),u=X.computeView(d,s,a,c,cbt),h=X.multiply(u,r,my),p=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,RIe),g=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,VIe);for(let S=0;S<8;++S){let R=ce.clone(Xp[S],i6[S]);X.multiplyByVector(h,R,R),m.divideByScalar(R,R.w,R),m.minimumByComponent(R,p,p),m.maximumByComponent(R,g,g)}g.z+=1e3,p.z-=10;let f=EIe;f.x=-(.5*(p.x+g.x)),f.y=-(.5*(p.y+g.y)),f.z=-g.z;let b=X.fromTranslation(f,my);u=X.multiply(b,u,u);let x=.5*(g.x-p.x),I=.5*(g.y-p.y),_=g.z-p.z,E=n.frustum;E.left=-x,E.right=x,E.bottom=-I,E.top=I,E.near=.01,E.far=_,X.clone(u,n.viewMatrix),X.inverse(u,n.inverseViewMatrix),X.getTranslation(n.inverseViewMatrix,n.positionWC),t.mapProjection.ellipsoid.cartesianToCartographic(n.positionWC,n.positionCartographic),m.clone(s,n.directionWC),m.clone(a,n.upWC),m.clone(c,n.rightWC)}var mbt=[new m(-1,0,0),new m(0,-1,0),new m(0,0,-1),new m(1,0,0),new m(0,1,0),new m(0,0,1)],hbt=[new m(0,-1,0),new m(0,0,-1),new m(0,-1,0),new m(0,-1,0),new m(0,0,1),new m(0,-1,0)],fbt=[new m(0,0,1),new m(1,0,0),new m(-1,0,0),new m(0,0,-1),new m(1,0,0),new m(1,0,0)];function pbt(e,t){let n=new Ni;n.fov=Z.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=mbt[i],o.upWC=hbt[i],o.rightWC=fbt[i],X.computeView(o.positionWC,o.directionWC,o.upWC,o.rightWC,o.viewMatrix),X.inverse(o.viewMatrix,o.inverseViewMatrix),o.frustum=n}}var Abt=new m,gbt=new m,GIe=new ue,TIe=GIe.center;function bbt(e,t){let n=e._sceneCamera,i=e._shadowMapCamera,o=GIe;if(e._cascadesEnabled){if(n.frustum.near>=e.maximumDistance){e._outOfView=!0,e._needsUpdate=!1;return}let r=t.mapProjection.ellipsoid.geodeticSurfaceNormal(n.positionWC,Abt),s=m.negate(i.directionWC,gbt),a=m.dot(r,s);if(e.fadingEnabled){let c=Z.clamp(a/.1,0,1);e._darkness=Z.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)===on.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),ue.clone(o,e._boundingSphere);else{let r=i.frustum.far/2,s=m.add(i.positionWC,m.multiplyByScalar(i.directionWC,r,TIe),TIe);o.center=s,o.radius=r,e._outOfView=t.cullingVolume.computeVisibility(o)===on.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),ue.clone(o,e._boundingSphere)}}function ybt(e,t){let n=t.camera,i=e._lightCamera,o=e._sceneCamera,r=e._shadowMapCamera;e._cascadesEnabled?m.clone(i.directionWC,r.directionWC):e._isPointLight?m.clone(i.positionWC,r.positionWC):r.clone(i);let s=e._lightDirectionEC;X.multiplyByPointAsVector(n.viewMatrix,r.directionWC,s),m.normalize(s,s),m.negate(s,s),X.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=xo.clone(n,o),n.frustum.clone(e._sceneCamera.frustum),e._sceneCamera.frustum.near=a,e._sceneCamera.frustum.far=c,e._distance=c-a,bbt(e,t),!e._outOfViewPrevious&&e._outOfView&&(e._needsUpdate=!0),e._outOfViewPrevious=e._outOfView}wp.prototype.update=function(e){if(ybt(this,e),this._needsUpdate)if(zgt(this,e.context),this._isPointLight&&pbt(this,e),this._cascadesEnabled&&(ubt(this,e),this._numberOfCascades>1&&abt(this,e)),this._isPointLight)this._shadowMapCullingVolume=Xs.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;X.multiply(this._shadowMapCamera.getViewProjection(),t,this._shadowMapMatrix)}this.debugShow&&nbt(this,e)};wp.prototype.updatePass=function(e,t){LIe(this,e,t)};var Cbt=new D;function ZIe(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=Cbt;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 Lt(t,o,!1)}function xbt(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===Ge.GLOBE,h=n.pass!==Ge.TRANSLUCENT,p=e._isPointLight,g=e._usesDepthTexture,f=Bp.getShadowCastShaderKeyword(p,u,g,h);if(s=i.shaderCache.getDerivedShaderProgram(d,f),!l(s)){let x=d.vertexShaderSource,I=d.fragmentShaderSource,_=Bp.createShadowCastVertexShader(x,p,u),E=Bp.createShadowCastFragmentShader(I,p,g,h);s=i.shaderCache.createDerivedShaderProgram(d,f,{vertexShaderSource:_,fragmentShaderSource:E,attributeLocations:d._attributeLocations})}a=e._primitiveRenderState,p?a=e._pointRenderState:u&&(a=e._terrainRenderState),n.renderState.cull.enabled||(a=ke(a,!1),a.cull=ke(a.cull,!1),a.cull.enabled=!1,a=Qe.fromCache(a)),c=ZIe(e,n.uniformMap,u)}return r.shaderProgram=s,r.renderState=a,r.uniformMap=c,r}wp.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===Ge.GLOBE,u=!1;if(d&&(u=t.owner.data.renderedMesh.encoding.hasVertexNormals),t.receiveShadows&&r){let h,p;l(o.receiveCommand)&&(h=o.receiveCommand.shaderProgram,p=o.receiveCommand.uniformMap),o.receiveCommand=ot.shallowClone(t,o.receiveCommand),o.castShadows=!1,o.receiveShadows=!0;let g=o.receiveShaderCastShadows!==t.castShadows,f=o.receiveShaderProgramId!==t.shaderProgram.id;if(!l(h)||f||n||g){let b=Bp.getShadowReceiveShaderKeyword(e[0],t.castShadows,d,u);if(h=i.shaderCache.getDerivedShaderProgram(s,b),!l(h)){let x=Bp.createShadowReceiveVertexShader(a,d,u),I=Bp.createShadowReceiveFragmentShader(c,e[0],t.castShadows,d,u);h=i.shaderCache.createDerivedShaderProgram(s,b,{vertexShaderSource:x,fragmentShaderSource:I,attributeLocations:s._attributeLocations})}p=ZIe(e[0],t.uniformMap,d)}o.receiveCommand.shaderProgram=h,o.receiveCommand.uniformMap=p,o.receiveShaderProgramId=t.shaderProgram.id,o.receiveShaderCastShadows=t.castShadows}return o};wp.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]=xbt(e[c],n,t,i,s,r[c]);o.castShaderProgramId=t.shaderProgram.id}return o};wp.prototype.isDestroyed=function(){return!1};wp.prototype.destroy=function(){n6(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 Hg=wp;var B5i=y(C(),1);var u5i=y(C(),1),WI=`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 Ibt=!1;function hy(e){this._drawClassificationFBO=new Gi({createDepthAttachments:!1}),this._accumulationFBO=new Gi({createDepthAttachments:!1}),this._packFBO=new Gi,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 xi({color:new U(0,0,0,0),owner:this}),this._clearDepthStencilCommand=new xi({depth:1,stencil:0,owner:this}),this._supported=e.depthTexture,this._viewport=new Ke,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(hy.prototype,{hasTranslucentDepth:{get:function(){return this._hasTranslucentDepth}}});function BIe(e){e._textureToComposite=void 0,e._translucentDepthStencilTexture=e._translucentDepthStencilTexture&&!e._translucentDepthStencilTexture.isDestroyed()&&e._translucentDepthStencilTexture.destroy()}function wIe(e){e._drawClassificationFBO.destroy(),e._accumulationFBO.destroy(),e._packFBO.destroy()}function _bt(e,t,n,i){BIe(e),e._translucentDepthStencilTexture=new Wt({context:t,width:n,height:i,pixelFormat:tt.DEPTH_STENCIL,pixelDatatype:Ye.UNSIGNED_INT_24_8,sampler:sn.NEAREST})}function Ebt(e,t,n,i){wIe(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 Tbt(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)&&(_bt(e,t,o,r),Ebt(e,t,o,r));let s,a;if(l(e._packDepthCommand)||(s=new Oe({sources:[fP]}),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 Oe({sources:[WI]}),a={colorTexture:function(){return e._textureToComposite}},Ibt&&(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,h=u.shaderProgram,p=t.shaderCache.createDerivedShaderProgram(h,"pick",{vertexShaderSource:h.vertexShaderSource,fragmentShaderSource:new Oe({sources:s.sources,defines:["PICK"]}),attributeLocations:h._attributeLocations}),g=ot.shallowClone(u);g.shaderProgram=p,u.derivedCommands.pick=g}l(e._copyCommand)||(s=new Oe({sources:[WI]}),a={colorTexture:function(){return e._drawClassificationFBO.getColorTexture()}},e._copyCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),l(e._accumulateCommand)||(s=new Oe({sources:[WI]}),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=!Ke.equals(e._viewport,n.viewport),d=c!==e._useScissorTest;e._useScissorTest=c,Ke.equals(e._scissorRectangle,n.viewport)||(e._scissorRectangle=Ke.clone(n.viewport,e._scissorRectangle),d=!0),(!l(e._rsDepth)||!Ke.equals(e._viewport,e._rsDepth.viewport)||d)&&(e._rsDepth=Qe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),l(e._packDepthCommand)&&(e._packDepthCommand.renderState=e._rsDepth),(!l(e._rsAccumulate)||!Ke.equals(e._viewport,e._rsAccumulate.viewport)||d)&&(e._rsAccumulate=Qe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:ei.EQUAL,reference:jt.CESIUM_3D_TILE_MASK}})),l(e._accumulateCommand)&&(e._accumulateCommand.renderState=e._rsAccumulate),(!l(e._rsComp)||!Ke.equals(e._viewport,e._rsComp.viewport)||d)&&(e._rsComp=Qe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:bn.ALPHA_BLEND})),l(e._compositeCommand)&&(e._compositeCommand.renderState=e._rsComp,e._compositeCommand.derivedCommands.pick.renderState=e._rsComp)}hy.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){Tbt(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}};hy.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(Ge.CESIUM_3D_TILE_CLASSIFICATION);let a=r.globeDepthTexture;r.globeDepthTexture=this._packFBO.getColorTexture();let c=i.commands[Ge.CESIUM_3D_TILE_CLASSIFICATION],d=i.indices[Ge.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)};hy.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),Sbt(this,e,t)};function Sbt(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}hy.prototype.isSupported=function(){return this._supported};hy.prototype.isDestroyed=function(){return!1};hy.prototype.destroy=function(){return BIe(this),wIe(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 EM=hy;function Lbt(){this.command=void 0,this.near=void 0,this.far=void 0}function oY(e,t,n){let i=e.context,o;i.depthTexture&&(o=new gM);let r;e._useOIT&&i.depthTexture&&(r=new yM(i));let s=new Hc(i);s.viewport=Ke.clone(n),this.camera=t,this._cameraClone=xo.clone(t),this._cameraStartFired=!1,this._cameraMovedTime=void 0,this.viewport=n,this.passState=s,this.pickFramebuffer=new _M(i),this.pickDepthFramebuffer=new xM,this.sceneFramebuffer=new wI,this.globeDepth=o,this.globeTranslucencyFramebuffer=new bM,this.oit=r,this.translucentTileClassification=new EM(i),this.pickDepths=[],this.frustumCommandsList=[],this.debugFrustumStatistics=void 0,this._commandExtents=[]}var o6=new m,r6=new m;function Rbt(e,t,n){let i=Math.max(m.maximumComponent(m.abs(e.position,o6)),m.maximumComponent(m.abs(t.position,r6))),o=1/Math.max(1,i);return m.multiplyByScalar(e.position,o,o6),m.multiplyByScalar(t.position,o,r6),m.equalsEpsilon(o6,r6,n)&&m.equalsEpsilon(e.direction,t.direction,n)&&m.equalsEpsilon(e.up,t.up,n)&&m.equalsEpsilon(e.right,t.right,n)&&X.equalsEpsilon(e.transform,t.transform,n)&&e.frustum.equalsEpsilon(t.frustum,n)}oY.prototype.checkForCameraUpdates=function(e){let t=this.camera,n=this._cameraClone;return Rbt(t,n,Z.EPSILON15)?(this._cameraStartFired&&Fi()-this._cameraMovedTime>e.cameraEventWaitTime&&(t.moveEnd.raiseEvent(),this._cameraStartFired=!1),!1):(this._cameraStartFired||(t.moveStart.raiseEvent(),this._cameraStartFired=!0),this._cameraMovedTime=Fi(),xo.clone(t,n),!0)};function Vbt(e,t,n,i){let{frameState:o}=t,{camera:r,useLogDepth:s}=o,a=s?t.logarithmicDepthFarToNearRatio:t.farToNearRatio,c=t.mode===re.SCENE2D,d=t.nearToFarDistance2D;i*=1+Z.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:h}=e;h.length=u;for(let p=0;p<u;++p){let g,f;c?(g=Math.min(i-d,n+p*d),f=Math.min(i,g+d)):(g=Math.max(n,Math.pow(a,p)*n),f=Math.min(i,a*g));let b=h[p];l(b)?(b.near=g,b.far=f):b=h[p]=new AM(g,f)}}function Gbt(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 XIe=new Xs,Zbt=new oc;oY.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 F=0;F<u.length;++F)for(let P=0;P<Ge.NUMBER_OF_PASSES;++P)u[F].indices[P]=0;c.length=0,d.length=0;let h=this._commandExtents,p=h.length,g=0,f=+Number.MAX_VALUE,b=-Number.MAX_VALUE,{shadowsEnabled:x}=o,I=+Number.MAX_VALUE,_=-Number.MAX_VALUE,E=Number.MAX_VALUE,S=t.mode===re.SCENE3D?t.occluder:void 0,{cullingVolume:R}=t,G=XIe.planes;for(let F=0;F<5;++F)G[F]=R.planes[F];R=XIe;for(let F=0;F<i.length;++F){let P=i[F],{pass:A,boundingVolume:T}=P;if(A===Ge.COMPUTE)c.push(P);else if(A===Ge.OVERLAY)d.push(P);else{let L,V;if(l(T)){if(!e.isVisible(R,P,S))continue;let M=T.computePlaneDistances(r,s,Zbt);if(L=M.start,V=M.stop,f=Math.min(f,L),b=Math.max(b,V),x&&P.receiveShadows&&L<Hg.MAXIMUM_DISTANCE&&!(A===Ge.GLOBE&&L<-100&&V>100)){let Q=V-L;A!==Ge.GLOBE&&L<100&&(E=Math.min(E,Q)),I=Math.min(I,L),_=Math.max(_,V)}}else P instanceof xi?(L=a.near,V=a.far):(L=a.near,V=a.far,f=Math.min(f,L),b=Math.max(b,V));let W=h[g];l(W)||(W=h[g]=new Lbt),W.command=P,W.near=L,W.far=V,g++}}x&&(I=Math.min(Math.max(I,a.near),a.far),_=Math.max(Math.min(_,a.far),I),o.nearPlane=I,o.farPlane=_,o.closestObjectSize=E),Vbt(this,e,f,b);for(let F=0;F<g;F++)Gbt(this,e,h[F]);if(g<p)for(let F=g;F<p;F++){let P=h[F];if(!l(P.command))break;P.command=void 0}let B=u.length,{frustumSplits:w}=t;w.length=B+1;for(let F=0;F<B;++F)w[F]=u[F].near,F===B-1&&(w[F+1]=u[F].far)};oY.prototype.destroy=function(){this.pickFramebuffer=this.pickFramebuffer&&this.pickFramebuffer.destroy(),this.pickDepthFramebuffer=this.pickDepthFramebuffer&&this.pickDepthFramebuffer.destroy(),this.sceneFramebuffer=this.sceneFramebuffer&&this.sceneFramebuffer.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 FI=oY;var FIe=.1,Bbt=new vm({pass:zo.MOST_DETAILED_PRELOAD}),wbt=new vm({pass:zo.MOST_DETAILED_PICK}),TM=new vm({pass:zo.PICK});function Sa(e){this._mostDetailedRayPicks=[],this.pickRenderStateCache={},this._pickPositionCache={},this._pickPositionCacheDirty=!1;let t=new Ke(0,0,1,1),n=new xo(e);n.frustum=new gn({width:FIe,aspectRatio:1,near:.1}),this._pickOffscreenView=new FI(e,n,t)}Sa.prototype.update=function(){this._pickPositionCacheDirty=!0};Sa.prototype.getPickDepth=function(e,t){let n=e.view.pickDepths,i=n[t];return l(i)||(i=new pM,n[t]=i),i};var Xbt=new qr,Wbt=new m,rY=new m,Fbt=new D,Pbt=new X;function Mbt(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=X.clone(r.transform,Pbt);r._setTransform(X.IDENTITY);let h=m.clone(r.position,Wbt);m.multiplyByScalar(r.right,c,rY),m.add(rY,h,h),m.multiplyByScalar(r.up,d,rY),m.add(rY,h,h),r._setTransform(u),e.mode===re.SCENE2D&&m.fromElements(h.z,h.x,h.y,h);let p=s.getPixelDimensions(o.width,o.height,1,1,Fbt),g=Xbt;return g.right=p.x*.5,g.left=-g.right,g.top=p.y*.5,g.bottom=-g.top,g.near=s.near,g.far=s.far,g.computeCullingVolume(h,r.directionWC,r.upWC)}var vbt=new vl,Nbt=new D;function Dbt(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,h=2*(o.height-t.y-o.y)/o.height-1,p=u*a*d,g=h*a*c,f=s.getPixelDimensions(o.width,o.height,1,1,Nbt),b=f.x*n*.5,x=f.y*i*.5,I=vbt;return I.top=g+x,I.bottom=g-x,I.right=p+b,I.left=p-b,I.near=a,I.far=s.far,I.computeCullingVolume(r.positionWC,r.directionWC,r.upWC)}function sY(e,t,n,i,o){let r=e.camera.frustum;return r instanceof gn||r instanceof qr?Mbt(e,t,n,i,o):Dbt(e,t,n,i,o)}var aY=new Ke(0,0,3,3),cY=new D,SM=new U(0,0,0,0);function s6(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}Sa.prototype.pick=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=Ke.clone(a,d.viewport);let u=to.transformWindowToDrawingBuffer(e,t,cY),h=s6(o.drawingBufferHeight,u,n,i,aY);e.jobScheduler.disableThisFrame(),e.updateFrameState(),r.cullingVolume=sY(e,u,h.width,h.height,a),r.invertClassification=!1,r.passes.pick=!0,r.tilesetPassState=TM,o.uniformState.update(r),e.updateEnvironment(),d=c.begin(h,a),e.updateAndExecuteCommands(d,SM),e.resolveFramebuffers(d);let p=c.end(h);return o.endFrame(),p};Sa.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=Ke.clone(a,d.viewport);let u=to.transformWindowToDrawingBuffer(e,t,cY),h=s6(o.drawingBufferHeight,u,n,i,aY);e.jobScheduler.disableThisFrame(),e.updateFrameState(),r.cullingVolume=sY(e,u,h.width,h.height,a),r.invertClassification=!1,r.passes.pickVoxel=!0,r.tilesetPassState=TM,o.uniformState.update(r),e.updateEnvironment(),d=c.begin(h,a),e.updateAndExecuteCommands(d,SM),e.resolveFramebuffers(d);let p=c.readCenterPixel(h);return o.endFrame(),p};Sa.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=Ke.clone(s,c.viewport);let d=to.transformWindowToDrawingBuffer(e,t,cY),u=s6(i.drawingBufferHeight,d,1,1,aY);e.jobScheduler.disableThisFrame(),e.updateFrameState(),o.cullingVolume=sY(e,d,u.width,u.height,s),o.invertClassification=!1,o.passes.pick=!0,o.tilesetPassState=TM,o.pickingMetadata=!0,o.pickedMetadataInfo=n,i.uniformState.update(o),e.updateEnvironment(),c=a.begin(u,s),e.updateAndExecuteCommands(c,SM);let h=e._environmentState.useOIT;e._environmentState.useOIT=!1,e.resolveFramebuffers(c),e._environmentState.useOIT=h;let p=a.readCenterPixel(u);return i.endFrame(),o.pickingMetadata=!1,fM.decodeMetadataValues(n.classProperty,n.metadataProperty,p)};function Qbt(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=Ke.clone(s,c.viewport),e.clearPasses(o.passes),o.passes.pick=!0,o.passes.depth=!0,o.cullingVolume=sY(e,t,1,1,s),o.tilesetPassState=TM,e.updateEnvironment(),r.renderTranslucentDepthForPick=!0,c=a.update(i,t,s),e.updateAndExecuteCommands(c,SM),e.resolveFramebuffers(c),i.endFrame()}var Ubt=new Ni,kbt=new vl,Ybt=new gn,Obt=new qr;Sa.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 m.clone(this._pickPositionCache[i],n);let{context:o,frameState:r,camera:s,defaultView:a}=e,{uniformState:c}=o;e.view=a;let d=to.transformWindowToDrawingBuffer(e,t,cY);e.pickTranslucentDepth?Qbt(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(Ubt):l(s.frustum.infiniteProjectionMatrix)?u=s.frustum.clone(kbt):l(s.frustum.width)?u=s.frustum.clone(Ybt):u=s.frustum.clone(Obt);let{frustumCommandsList:h}=a,p=h.length;for(let g=0;g<p;++g){let b=this.getPickDepth(e,g).getDepth(o,d.x,d.y);if(l(b)&&b>0&&b<1){let x=h[g],I;return e.mode===re.SCENE2D?(I=s.position.z,s.position.z=I-x.near+1,u.far=Math.max(1,x.far-x.near),u.near=1,c.update(r),c.updateFrustum(u)):(u.near=x.near*(g!==0?e.opaqueFrustumNearOffset:1),u.far=x.far,c.updateFrustum(u)),n=to.drawingBufferToWorldCoordinates(e,d,b,n),e.mode===re.SCENE2D&&(s.position.z=I,c.update(r)),this._pickPositionCache[i]=m.clone(n),n}}this._pickPositionCache[i]=void 0};var Hbt=new ge;Sa.prototype.pickPosition=function(e,t,n){if(n=this.pickPositionWorldCoordinates(e,t,n),l(n)&&e.mode!==re.SCENE3D){m.fromElements(n.y,n.z,n.x,n);let i=e.mapProjection,o=i.ellipsoid,r=i.unproject(n,Hbt);o.cartographicToCartesian(r,n)}return n};function PIe(e,t){let n,i,o=[],r=[],s=[],a=[];l(e)||(e=Number.MAX_VALUE);let c=t();for(;l(c);){let d=c.object,u=c.position,h=c.exclude;if(l(u)&&!l(d)){o.push(c);break}if(!l(d)||!l(d.primitive)||!h&&(o.push(c),0>=--e))break;let p=d.primitive,g=!1;typeof p.getGeometryInstanceAttributes=="function"&&l(d.id)&&(i=p.getGeometryInstanceAttributes(d.id),l(i)&&l(i.show)&&(g=!0,i.show=Vn.toValue(!1,i.show),s.push(i))),d instanceof ma&&(g=!0,d.show=!1,a.push(d)),g||(p.show=!1,r.push(p)),c=t()}for(n=0;n<r.length;++n)r[n].show=!0;for(n=0;n<s.length;++n)i=s[n],i.show=Vn.toValue(!0,i.show);for(n=0;n<a.length;++n)a[n].show=!0;return o}Sa.prototype.drillPick=function(e,t,n,i,o){let r=this;return PIe(n,function(){let c=r.pick(e,t,i,o);if(l(c))return{object:c,position:void 0,exclude:!1}}).map(function(c){return c.object})};var WIe=new m,zbt=new m;function Kbt(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 MIe(e,t,n,i){let o=t.direction,r=m.mostOrthogonalAxis(o,WIe),s=m.cross(o,r,WIe),a=m.cross(o,s,zbt);return i.position=t.origin,i.direction=o,i.up=a,i.right=s,i.frustum.width=n??FIe,i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC)}function Jbt(e,t,n){let i=t.frameState,{ray:o,width:r,tilesets:s}=n,a=e._pickOffscreenView.camera,c=MIe(e,o,r,a),d=Bbt;d.camera=a,d.cullingVolume=c;let u=!0,h=s.length;for(let p=0;p<h;++p){let g=s[p];g.show&&t.primitives.contains(g)&&(g.updateForPass(i,d),u=u&&d.ready)}return u&&n._completePick(),u}Sa.prototype.updateMostDetailedRayPicks=function(e){let t=this._mostDetailedRayPicks;for(let n=0;n<t.length;++n)Jbt(this,e,t[n])&&t.splice(n--,1)};function vIe(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 Wl&&vIe(o,t,n))}}function lY(e,t,n,i,o,r){let s=[];if(vIe(t.primitives,i,s),s.length===0)return Promise.resolve(r());let a=new Kbt(n,o,s);return e._mostDetailedRayPicks.push(a),a.promise.then(function(){return r()})}function jbt(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 qbt(e,t,n,i,o,r,s){let{context:a,frameState:c}=t,d=a.uniformState,u=e._pickOffscreenView;t.view=u,MIe(e,n,o,u.camera);let h=Ke.clone(u.viewport,aY),p=u.pickFramebuffer.begin(h,u.viewport);t.jobScheduler.disableThisFrame(),t.updateFrameState(),c.invertClassification=!1,c.passes.pick=!0,c.passes.offscreen=!0,s?c.tilesetPassState=wbt:c.tilesetPassState=TM,d.update(c),t.updateEnvironment(),t.updateAndExecuteCommands(p,SM),t.resolveFramebuffers(p);let g,f=u.pickFramebuffer.end(h);if(t.context.depthTexture){let{frustumCommandsList:b}=u,x=b.length;for(let I=0;I<x;++I){let E=e.getPickDepth(t,I).getDepth(a,0,0);if(l(E)&&E>0&&E<1){let S=b[I],R=S.near*(I!==0?t.opaqueFrustumNearOffset:1),G=S.far,B=R+E*(G-R);g=En.getPoint(n,B);break}}}if(t.view=t.defaultView,a.endFrame(),l(f)||l(g))return{object:f,position:g,exclude:!l(g)&&r||jbt(f,i)}}function NIe(e,t,n,i,o,r,s,a){return PIe(i,function(){return qbt(e,t,n,o,r,s,a)})}function hL(e,t,n,i,o,r,s){let a=NIe(e,t,n,1,i,o,r,s);if(a.length>0)return a[0]}function DIe(e,t,n,i,o,r,s,a){return NIe(e,t,n,i,o,r,s,a)}function dY(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)})})}Sa.prototype.pickFromRay=function(e,t,n,i){return hL(this,e,t,n,i,!1,!1)};Sa.prototype.drillPickFromRay=function(e,t,n,i,o){return DIe(this,e,t,n,i,o,!1,!1)};Sa.prototype.pickFromRayMostDetailed=function(e,t,n,i){let o=this;return t=En.clone(t),n=l(n)?n.slice():n,dY(e,lY(o,e,t,n,i,function(){return hL(o,e,t,n,i,!1,!0)}))};Sa.prototype.drillPickFromRayMostDetailed=function(e,t,n,i,o){let r=this;return t=En.clone(t),i=l(i)?i.slice():i,dY(e,lY(r,e,t,i,o,function(){return DIe(r,e,t,n,i,o,!1,!0)}))};var $bt=new m,e0t=new m,t0t=new En,QIe=new ge;function a6(e,t){let n=e.ellipsoid,i=Si._defaultMaxTerrainHeight,o=n.geodeticSurfaceNormalCartographic(t,e0t),r=ge.toCartesian(t,n,$bt),s=t0t;s.origin=r,s.direction=o;let a=new En;return En.getPoint(s,i,a.origin),m.negate(o,a.direction),a}function UIe(e,t){let n=e.ellipsoid,i=ge.fromCartesian(t,n,QIe);return a6(e,i)}function kIe(e,t){let n=e.ellipsoid;return ge.fromCartesian(t,n,QIe).height}function n0t(e,t,n,i,o){let r=a6(t,n);return lY(e,t,r,i,o,function(){let s=hL(e,t,r,i,o,!0,!0);if(l(s))return kIe(t,s.position)})}function i0t(e,t,n,i,o,r){let s=UIe(t,n);return lY(e,t,s,i,o,function(){let a=hL(e,t,s,i,o,!0,!0);if(l(a))return m.clone(a.position,r)})}Sa.prototype.sampleHeight=function(e,t,n,i){let o=a6(e,t),r=hL(this,e,o,n,i,!0,!1);if(l(r))return kIe(e,r.position)};Sa.prototype.clampToHeight=function(e,t,n,i,o){let r=UIe(e,t),s=hL(this,e,r,n,i,!0,!1);if(l(s))return m.clone(s.position,o)};Sa.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]=n0t(this,e,t[s],n,i);return dY(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}))};Sa.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]=i0t(this,e,t[s],n,i,t[s]);return dY(e,Promise.all(r).then(function(s){let a=s.length;for(let c=0;c<a;++c)t[c]=s[c];return t}))};Sa.prototype.destroy=function(){this._pickOffscreenView=this._pickOffscreenView&&this._pickOffscreenView.destroy()};var LM=Sa;var $Yi=y(C(),1);var LYi=y(C(),1);var GUi=y(C(),1),RM=`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 BUi=y(C(),1),VM=`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 XUi=y(C(),1),GM=`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 FUi=y(C(),1),ZM=`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 MUi=y(C(),1),BM=`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 NUi=y(C(),1),wM=`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 QUi=y(C(),1),XM=`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 kUi=y(C(),1),WM=`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 OUi=y(C(),1),FM=`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 zUi=y(C(),1),PM=`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 JUi=y(C(),1),MM=`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 qUi=y(C(),1),vM=`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 eki=y(C(),1),NM=`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 nki=y(C(),1),fy=`#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 oki=y(C(),1),DM=`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 ski=y(C(),1),QM=`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 cki=y(C(),1),UM=`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 dki=y(C(),1),kM=`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 mki=y(C(),1),YM=`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 xki=y(C(),1);function PI(){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 Gi,this._commands=void 0,this._clearCommand=void 0,this._minMaxLuminance=new D,this.enabled=!0,this._enabled=!0,this.minimumLuminance=.1,this.maximumLuminance=10}Object.defineProperties(PI.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 YIe(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 o0t(e,t){YIe(e);let n=e._width,i=e._height,o=t.halfFloatingPointTexture?Ye.HALF_FLOAT:Ye.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 Gi,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 OIe(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 r0t(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 s0t(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 a0t(e,t){OIe(e);let n=e._framebuffers,i=n.length,o=new Array(i);for(let r=0;r<i;++r)o[r]=t.createViewportQuadCommand(s0t(r,i),{framebuffer:n[r].framebuffer,uniformMap:r0t(e,r)});e._commands=o}PI.prototype.clear=function(e){let t=this._framebuffers;if(!l(t))return;let n=this._clearCommand;l(n)||(n=this._clearCommand=new xi({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)};PI.prototype.update=function(e){let t=e.drawingBufferWidth,n=e.drawingBufferHeight;(t!==this._width||n!==this._height)&&(this._width=t,this._height=n,o0t(this,e),a0t(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};PI.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)};PI.prototype.isDestroyed=function(){return!1};PI.prototype.destroy=function(){return YIe(this),OIe(this),me(this)};var OM=PI;var kki=y(C(),1);var _ki=y(C(),1),c0t={NEAREST:0,LINEAR:1},_u=c0t;function MI(e){e=e??Y.EMPTY_OBJECT;let{name:t=qn(),fragmentShader:n,uniforms:i,textureScale:o=1,forcePowerOfTwo:r=!1,sampleMode:s=_u.NEAREST,pixelFormat:a=tt.RGBA,pixelDatatype:c=Ye.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 h=new Hc;h.scissorTest={enabled:!0,rectangle:l(u)?Ke.clone(u):new Ke},this._passState=h,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(MI.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 l0t=/uniform\s+sampler2D\s+depthTexture/g;MI.prototype._isSupported=function(e){return!l0t.test(this._fragmentShader)||e.depthTexture};function d0t(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 Wt&&!l(e._textureCache.getStageByName(n))&&(e._texturesToRelease.push(a),delete s[n],delete s[`${n}Dimensions`]),r instanceof Wt&&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 u0t(e,t){return function(){let n=e._actualUniforms[t];return typeof n=="function"?n():n}}function m0t(e,t){return function(){let n=e[t]();if(l(n))return n.dimensions}}function h0t(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]=u0t(e,r),n[r]=d0t(e,i,r)):(t[r]=i[r],n[r]=i[r]),o[r]=i[r];let s=t[r]();(typeof s=="string"||s instanceof Wt||s instanceof HTMLImageElement||s instanceof HTMLCanvasElement||s instanceof HTMLVideoElement)&&(t[`${r}Dimensions`]=m0t(t,r))}e._uniforms={},Object.defineProperties(e._uniforms,n),e._uniformMap=Lt(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 f0t(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 p0t(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=f0t(n,o)}let i=new Oe({defines:[e._useLogDepth?"LOG_DEPTH":""],sources:[n]});e._command=t.createViewportQuadCommand(i,{uniformMap:e._uniformMap,owner:e})}function A0t(e){let t=e._sampleMode,n,i;t===_u.LINEAR?(n=en.LINEAR,i=pi.LINEAR):(n=en.NEAREST,i=pi.NEAREST);let o=e._sampler;(!l(o)||o.minificationFilter!==n||o.magnificationFilter!==i)&&(e._sampler=new sn({wrapS:Ln.CLAMP_TO_EDGE,wrapT:Ln.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i}))}function g0t(e,t){return function(n){e._texturesToCreate.push({name:t,source:n})}}function b0t(e,t){return function(){return e._textureCache.getOutputTexture(t)}}function y0t(e,t){let n=e._texturesToRelease;for(let a=0;a<n.length;++a){let c=n[a];c=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 Wt({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]=b0t(e,d);else if(typeof d=="string"){let h=new Ve({url:d});s.push(h.fetchImage().then(g0t(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 HIe(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 Wt&&(l(t.getStageByName(n[o]))||r.destroy(),e._dirtyUniforms.push(o))}}function C0t(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 x0t(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 Wt({context:t,pixelFormat:tt.RGBA,pixelDatatype:Ye.UNSIGNED_BYTE,source:{arrayBufferView:s,width:1,height:1},sampler:sn.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 h=c[u].color;r[o]=U.floatToByte(h.red),r[o+1]=U.floatToByte(h.green),r[o+2]=U.floatToByte(h.blue),r[o+3]=U.floatToByte(h.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 Wt({context:t,pixelFormat:tt.RGBA,pixelDatatype:Ye.UNSIGNED_BYTE,source:{arrayBufferView:r,width:i,height:1},sampler:sn.NEAREST})}MI.prototype.update=function(e,t){if(this.enabled!==this._enabled&&!this.enabled&&HIe(this),this._enabled=this.enabled,!this._enabled||(this._logDepthChanged=t!==this._useLogDepth,this._useLogDepth=t,this._selectedDirty=C0t(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,x0t(this,e),h0t(this),y0t(this,e),p0t(this,e),A0t(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=Qe.fromCache({viewport:new Ke(0,0,i.width,i.height)}))),this._command.renderState=o};MI.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,sn.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)};MI.prototype.isDestroyed=function(){return!1};MI.prototype.destroy=function(){return HIe(this),me(this)};var Lo=MI;var Jki=y(C(),1);function vI(e){e=e??Y.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(vI.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}}});vI.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};vI.prototype.get=function(e){return this._stages[e]};function I0t(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}vI.prototype.update=function(e,t){this._selectedDirty=I0t(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)}};vI.prototype.isDestroyed=function(){return!1};vI.prototype.destroy=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return me(this)};var Td=vI;var zr={};function c6(e){let o=`#define USE_STEP_SIZE ${fy}`,r=new Lo({name:`${e}_x_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:0},sampleMode:_u.LINEAR}),s=new Lo({name:`${e}_y_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:1},sampleMode:_u.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 Td({name:e,stages:[r,s],uniforms:a})}zr.createBlurStage=function(){return c6("czm_blur")};zr.createDepthOfFieldStage=function(){let e=c6("czm_depth_of_field_blur"),t=new Lo({name:"czm_depth_of_field_composite",fragmentShader:WM,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 Td({name:"czm_depth_of_field",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};zr.isDepthOfFieldSupported=function(e){return e.context.depthTexture};zr.createEdgeDetectionStage=function(){let e=qn();return new Lo({name:`czm_edge_detection_${e}`,fragmentShader:PM,uniforms:{length:.25,color:U.clone(U.BLACK)}})};zr.isEdgeDetectionSupported=function(e){return e.context.depthTexture};function _0t(e){if(!l(e))return zr.createEdgeDetectionStage();let t=new Td({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 Lo({name:"czm_edge_detection_combine",fragmentShader:r,uniforms:n});return new Td({name:"czm_edge_detection_composite",stages:[t,s]})}zr.createSilhouetteStage=function(e){let t=_0t(e),n=new Lo({name:"czm_silhouette_color_edges",fragmentShader:YM,uniforms:{silhouetteTexture:t.name}});return new Td({name:"czm_silhouette",stages:[t,n],inputPreviousStageTexture:!1,uniforms:t.uniforms})};zr.isSilhouetteSupported=function(e){return e.context.depthTexture};zr.createBloomStage=function(){let e=new Lo({name:"czm_bloom_contrast_bias",fragmentShader:XM,uniforms:{contrast:128,brightness:-.3}}),t=c6("czm_bloom_blur"),n=new Td({name:"czm_bloom_contrast_bias_blur",stages:[e,t]}),i=new Lo({name:"czm_bloom_generate_composite",fragmentShader:BM,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 Td({name:"czm_bloom",stages:[n,i],inputPreviousStageTexture:!1,uniforms:o})};zr.createAmbientOcclusionStage=function(){let e=new Lo({name:"czm_ambient_occlusion_generate",fragmentShader:VM,uniforms:{intensity:3,bias:.1,lengthCap:.26,directionCount:8,stepCount:32,randomTexture:void 0}}),t=new Lo({name:"czm_ambient_occlusion_composite",fragmentShader:GM,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 Td({name:"czm_ambient_occlusion",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};zr.isAmbientOcclusionSupported=function(e){return e.context.depthTexture};var E0t=`#define FXAA_QUALITY_PRESET 39 ${bP} ${NM}`;zr.createFXAAStage=function(){return new Lo({name:"czm_FXAA",fragmentShader:E0t,sampleMode:_u.LINEAR})};zr.createAcesTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=RM,new Lo({name:"czm_aces",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};zr.createFilmicTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=MM,new Lo({name:"czm_filmic",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};zr.createPbrNeutralTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=vM,new Lo({name:"czm_pbr_neutral",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};zr.createReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=kM,new Lo({name:"czm_reinhard",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};zr.createModifiedReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=QM,new Lo({name:"czm_modified_reinhard",fragmentShader:t,uniforms:{white:U.WHITE,autoExposure:void 0,exposure:1}})};zr.createAutoExposureStage=function(){return new OM};zr.createBlackAndWhiteStage=function(){return new Lo({name:"czm_black_and_white",fragmentShader:ZM,uniforms:{gradations:5}})};zr.createBrightnessStage=function(){return new Lo({name:"czm_brightness",fragmentShader:wM,uniforms:{brightness:.5}})};zr.createNightVisionStage=function(){return new Lo({name:"czm_night_vision",fragmentShader:UM})};zr.createDepthViewStage=function(){return new Lo({name:"czm_depth_view",fragmentShader:FM})};zr.createLensFlareStage=function(){return new Lo({name:"czm_lens_flare",fragmentShader:DM,uniforms:{dirtTexture:hn("Assets/Textures/LensFlare/DirtMask.jpg"),starTexture:hn("Assets/Textures/LensFlare/StarBurst.jpg"),intensity:2,distortion:10,ghostDispersal:.4,haloWidth:.4,dirtAmount:.4,earthRadius:ie.WGS84.maximumRadius}})};var Eu=zr;var WYi=y(C(),1);function zg(e){this._collection=e,this._framebuffers=[],this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0,this._updateDependencies=!1}function zM(e){for(;l(e.length);)e=e.get(e.length-1);return e.name}function l6(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[zM(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 h=e.getStageByName(u);l(h)&&(r[zM(h)]=!0)}}}return i.name}function HM(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 h=0;h<c;++h){let p=i.get(h);l(p.length)?a=HM(e,t,n,p,o):a=l6(e,t,n,p,o),s&&(o=a)}let d,u;if(s)for(d=1;d<c;++d)u=zM(i.get(d)),l(n[u])||(n[u]={}),n[u][r]=!0;else for(d=1;d<c;++d){u=zM(i.get(d));let h=n[u];for(let p=0;p<d;++p)h[zM(i.get(p))]=!0}return a}function T0t(e,t){let n={};if(l(e.ambientOcclusion)){let i=e.ambientOcclusion,o=e.bloom,r=e._tonemapping,s=e.fxaa,a=HM(e,t,n,i,void 0);a=HM(e,t,n,o,a),a=l6(e,t,n,r,a),a=HM(e,t,n,e,a),l6(e,t,n,s,a)}else HM(e,t,n,e,void 0);return n}function S0t(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,h,p=e._framebuffers,g=p.length;for(u=0;u<g;++u){if(h=p[u],r!==h.textureScale||s!==h.forcePowerOfTwo||a!==h.pixelFormat||c!==h.pixelDatatype||!U.equals(d,h.clearColor))continue;let f=h.stages,b=f.length,x=!1;for(let I=0;I<b;++I)if(n[f[I]]){x=!0;break}if(!x)break}return l(h)&&u<g?(h.stages.push(t),h):(h={textureScale:r,forcePowerOfTwo:s,pixelFormat:a,pixelDatatype:c,clearColor:d,stages:[t],buffer:new Gi({pixelFormat:a,pixelDatatype:c}),clear:void 0},p.push(h),h)}function L0t(e,t){let n=T0t(e._collection,t);for(let i in n)n.hasOwnProperty(i)&&(e._stageNameToFramebuffer[i]=S0t(e,i,n[i]))}function d6(e){let t=e._framebuffers,n=t.length;for(let i=0;i<n;++i)t[i].buffer.destroy()}function R0t(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),h=Math.min(d,u);a.forcePowerOfTwo&&(Z.isPowerOfTwo(h)||(h=Z.nextPowerOfTwo(h)),d=h,u=h),a.buffer.update(t,d,u),a.clear=new xi({color:a.clearColor,framebuffer:a.buffer.framebuffer})}}zg.prototype.updateDependencies=function(){this._updateDependencies=!0};zg.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)&&(d6(this),this._framebuffers.length=0,this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0),!n&&!a)return;this._framebuffers.length===0&&L0t(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,d6(this),R0t(this,e))};zg.prototype.clear=function(e){let t=this._framebuffers;for(let n=0;n<t.length;++n)t[n].clear.execute(e)};zg.prototype.getStageByName=function(e){return this._collection.getStageByName(e)};zg.prototype.getOutputTexture=function(e){return this._collection.getOutputTexture(e)};zg.prototype.getFramebuffer=function(e){let t=this._stageNameToFramebuffer[e];if(l(t))return t.buffer.framebuffer};zg.prototype.isDestroyed=function(){return!1};zg.prototype.destroy=function(){return d6(this),me(this)};var NI=zg;var PYi=y(C(),1),V0t={REINHARD:"REINHARD",MODIFIED_REINHARD:"MODIFIED_REINHARD",FILMIC:"FILMIC",ACES:"ACES",PBR_NEUTRAL:"PBR_NEUTRAL"};var Kg=Object.freeze(V0t);var u6=[];function Nl(){let e=Eu.createFXAAStage(),t=Eu.createAmbientOcclusionStage(),n=Eu.createBloomStage();this._autoExposureEnabled=!1,this._autoExposure=Eu.createAutoExposureStage(),this._exposure=1,this._tonemapping=void 0,this._tonemapper=void 0,this.tonemapper=Kg.PBR_NEUTRAL;let i=this._tonemapping;e.enabled=!1,t.enabled=!1,n.enabled=!1,i.enabled=!1;let o=new NI(this),r={},s=u6;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(Nl.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 m6(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 Kg.REINHARD:n=Eu.createReinhardTonemappingStage(t);break;case Kg.MODIFIED_REINHARD:n=Eu.createModifiedReinhardTonemappingStage(t);break;case Kg.FILMIC:n=Eu.createFilmicTonemappingStage(t);break;case Kg.PBR_NEUTRAL:n=Eu.createPbrNeutralTonemappingStage(t);break;default:n=Eu.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 m6(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}Nl.prototype.add=function(e){let t=this._stageNames,n=u6;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};Nl.prototype.remove=function(e){if(!this.contains(e))return!1;let t=this._stageNames,n=u6;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};Nl.prototype.contains=function(e){return l(e)&&l(e._index)&&e._textureCache===this._textureCache};Nl.prototype.get=function(e){return m6(this),this._stages[e]};Nl.prototype.removeAll=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)this.remove(e[n]);e.length=0};Nl.prototype.getStageByName=function(e){return this._stageNames[e]};Nl.prototype.update=function(e,t,n){m6(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 I=0;I<r.length;++I){let _=r[I];_.ready&&_.enabled&&_._isSupported(e)&&(o[s++]=_)}o.length=s;let a=s!==i.length;if(!a){for(let I=0;I<s;++I)if(o[I]!==i[I]){a=!0;break}}let c=this._ao,d=this._bloom,u=this._autoExposure,h=this._tonemapping,p=this._fxaa;h.enabled=n;let g=c.enabled&&c._isSupported(e),f=d.enabled&&d._isSupported(e),b=h.enabled&&h._isSupported(e),x=p.enabled&&p._isSupported(e);if((a||this._textureCacheDirty||g!==this._aoEnabled||f!==this._bloomEnabled||b!==this._tonemappingEnabled||x!==this._fxaaEnabled)&&(this._textureCache.updateDependencies(),this._aoEnabled=g,this._bloomEnabled=f,this._tonemappingEnabled=b,this._fxaaEnabled=x,this._textureCacheDirty=!1),l(this._randomTexture)&&!g&&(this._randomTexture.destroy(),this._randomTexture=void 0),!l(this._randomTexture)&&g){let _=new Uint8Array(196608);for(let E=0;E<196608;E+=3)_[E]=Math.floor(Math.random()*255);this._randomTexture=new Wt({context:e,pixelFormat:tt.RGB,pixelDatatype:Ye.UNSIGNED_BYTE,source:{arrayBufferView:_,width:256,height:256},sampler:new sn({wrapS:Ln.REPEAT,wrapT:Ln.REPEAT,minificationFilter:en.NEAREST,magnificationFilter:pi.NEAREST})})}this._textureCache.update(e),p.update(e,t),c.update(e,t),d.update(e,t),h.update(e,t),this._autoExposureEnabled&&u.update(e,t);for(let I=0;I<r.length;++I)r[I].update(e,t);s=0;for(let I=0;I<r.length;++I){let _=r[I];_.ready&&_.enabled&&_._isSupported(e)&&s++}a=s!==o.length,a&&this.update(e,t,n)};Nl.prototype.clear=function(e){this._textureCache.clear(e),this._autoExposureEnabled&&this._autoExposure.clear(e)};function DI(e){for(;l(e.length);)e=e.get(e.length-1);return e.outputTexture}Nl.prototype.getOutputTexture=function(e){let t=this.getStageByName(e);if(l(t))return DI(t)};function Wp(e,t,n,i,o){if(l(e.execute)){e.execute(t,n,i,o);return}if(e.inputPreviousStageTexture){Wp(e.get(0),t,n,i,o);for(let r=1;r<e.length;++r)Wp(e.get(r),t,DI(e.get(r-1)),i,o)}else for(let r=0;r<e.length;++r)Wp(e.get(r),t,n,i,o)}Nl.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,h=a.enabled&&a._isSupported(e),p=c.enabled&&c._isSupported(e),g=this._autoExposureEnabled,f=u.enabled&&u._isSupported(e),b=s.enabled&&s._isSupported(e);if(!b&&!h&&!p&&!f&&r===0)return;let x=t;h&&a.ready&&(Wp(a,e,x,n,i),x=DI(a)),p&&c.ready&&(Wp(c,e,x,n,i),x=DI(c)),g&&d.ready&&Wp(d,e,x,n,i),f&&u.ready&&(Wp(u,e,x,n,i),x=DI(u));let I=x;if(r>0){Wp(o[0],e,x,n,i);for(let _=1;_<r;++_)Wp(o[_],e,DI(o[_-1]),n,i);I=DI(o[r-1])}b&&s.ready&&Wp(s,e,I,n,i)};Nl.prototype.copy=function(e,t){if(!l(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(Ed,{uniformMap:{colorTexture:function(){return n.outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};Nl.prototype.isDestroyed=function(){return!1};Nl.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 KM=Nl;var Z3i=y(C(),1);var h3i=y(C(),1);var t3i=y(C(),1),G0t={SHIFT:0,CTRL:1,ALT:2},La=Object.freeze(G0t);var i3i=y(C(),1),Z0t={LEFT_DOWN:0,LEFT_UP:1,LEFT_CLICK:2,LEFT_DOUBLE_CLICK:3,RIGHT_DOWN:5,RIGHT_UP:6,RIGHT_CLICK:7,MIDDLE_DOWN:10,MIDDLE_UP:11,MIDDLE_CLICK:12,MOUSE_MOVE:15,WHEEL:16,PINCH_START:17,PINCH_END:18,PINCH_MOVE:19},Zn=Object.freeze(Z0t);function py(e,t,n){let i=e._element;if(i===document)return n.x=t.clientX,n.y=t.clientY,n;let o=i.getBoundingClientRect();return n.x=t.clientX-o.left,n.y=t.clientY-o.top,n}function b6(e,t){let n=e;return l(t)&&(n+=`+${t}`),n}function QI(e){if(e.shiftKey)return La.SHIFT;if(e.ctrlKey)return La.CTRL;if(e.altKey)return La.ALT}var hs={LEFT:0,MIDDLE:1,RIGHT:2};function Tu(e,t,n,i){function o(r){i(e,r)}Ht.isInternetExplorer()?n.addEventListener(t,o,!1):n.addEventListener(t,o,{capture:!1,passive:!1}),e._removalFunctions.push(function(){n.removeEventListener(t,o,!1)})}function B0t(e){let t=e._element,n=l(t.disableRootEvents)?t:document;Ht.supportsPointerEvents()?(Tu(e,"pointerdown",t,M0t),Tu(e,"pointerup",t,i_e),Tu(e,"pointermove",t,v0t),Tu(e,"pointercancel",t,i_e)):(Tu(e,"mousedown",t,o_e),Tu(e,"mouseup",n,r_e),Tu(e,"mousemove",n,s_e),Tu(e,"touchstart",t,F0t),Tu(e,"touchend",n,qIe),Tu(e,"touchmove",n,P0t),Tu(e,"touchcancel",n,qIe)),Tu(e,"dblclick",t,X0t);let i;"onwheel"in t?i="wheel":document.onmousewheel!==void 0?i="mousewheel":i="DOMMouseScroll",Tu(e,i,t,W0t)}function w0t(e){let t=e._removalFunctions;for(let n=0;n<t.length;++n)t[n]()}var zIe={position:new D};function y6(e){e._lastSeenTouchEvent=Fi()}function C6(e){return Fi()-e._lastSeenTouchEvent>ff.mouseEmulationIgnoreMilliseconds}function g6(e,t,n){let i=e.x-t.x,o=e.y-t.y;return Math.sqrt(i*i+o*o)<n}function o_e(e,t){if(!C6(e))return;let n=t.button;e._buttonDown[n]=!0;let i;if(n===hs.LEFT)i=Zn.LEFT_DOWN;else if(n===hs.MIDDLE)i=Zn.MIDDLE_DOWN;else if(n===hs.RIGHT)i=Zn.RIGHT_DOWN;else return;let o=py(e,t,e._primaryPosition);D.clone(o,e._primaryStartPosition),D.clone(o,e._primaryPreviousPosition);let r=QI(t),s=e.getInputAction(i,r);l(s)&&(D.clone(o,zIe.position),s(zIe),t.preventDefault())}var KIe={position:new D},JIe={position:new D};function h6(e,t,n,i){let o=QI(i),r=e.getInputAction(t,o),s=e.getInputAction(n,o);if(l(r)||l(s)){let a=py(e,i,e._primaryPosition);if(l(r)&&(D.clone(a,KIe.position),r(KIe)),l(s)){let c=e._primaryStartPosition;g6(c,a,e._clickPixelTolerance)&&(D.clone(a,JIe.position),s(JIe))}}}function r_e(e,t){if(!C6(e))return;let n=t.button;n!==hs.LEFT&&n!==hs.MIDDLE&&n!==hs.RIGHT||(e._buttonDown[hs.LEFT]&&(h6(e,Zn.LEFT_UP,Zn.LEFT_CLICK,t),e._buttonDown[hs.LEFT]=!1),e._buttonDown[hs.MIDDLE]&&(h6(e,Zn.MIDDLE_UP,Zn.MIDDLE_CLICK,t),e._buttonDown[hs.MIDDLE]=!1),e._buttonDown[hs.RIGHT]&&(h6(e,Zn.RIGHT_UP,Zn.RIGHT_CLICK,t),e._buttonDown[hs.RIGHT]=!1))}var f6={startPosition:new D,endPosition:new D};function s_e(e,t){if(!C6(e))return;let n=QI(t),i=py(e,t,e._primaryPosition),o=e._primaryPreviousPosition,r=e.getInputAction(Zn.MOUSE_MOVE,n);l(r)&&(D.clone(o,f6.startPosition),D.clone(i,f6.endPosition),r(f6)),D.clone(i,o),(e._buttonDown[hs.LEFT]||e._buttonDown[hs.MIDDLE]||e._buttonDown[hs.RIGHT])&&t.preventDefault()}var jIe={position:new D};function X0t(e,t){let n=t.button,i;if(n===hs.LEFT)i=Zn.LEFT_DOUBLE_CLICK;else return;let o=QI(t),r=e.getInputAction(i,o);l(r)&&(py(e,t,jIe.position),r(jIe))}function W0t(e,t){let n;if(l(t.deltaY)){let r=t.deltaMode;r===t.DOM_DELTA_PIXEL?n=-t.deltaY:r===t.DOM_DELTA_LINE?n=-t.deltaY*40:n=-t.deltaY*120}else t.detail>0?n=t.detail*-120:n=t.wheelDelta;if(!l(n))return;let i=QI(t),o=e.getInputAction(Zn.WHEEL,i);l(o)&&(o(n),t.preventDefault())}function F0t(e,t){y6(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i)r=n[i],s=r.identifier,a.set(s,py(e,r,new D));uY(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,c.set(s,D.clone(a.get(s)))}function qIe(e,t){y6(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i)r=n[i],s=r.identifier,a.remove(s);uY(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,c.remove(s)}var $Ie={position:new D},p6={position1:new D,position2:new D},e_e={position:new D},t_e={position:new D},n_e={position:new D};function uY(e,t){let n=QI(t),i=e._positions,o=i.length,r,s,a=e._isPinching;if(o!==1&&e._buttonDown[hs.LEFT]){if(e._buttonDown[hs.LEFT]=!1,l(e._touchHoldTimer)&&(clearTimeout(e._touchHoldTimer),e._touchHoldTimer=void 0),r=e.getInputAction(Zn.LEFT_UP,n),l(r)&&(D.clone(e._primaryPosition,e_e.position),r(e_e)),o===0&&!e._isTouchHolding&&(s=e.getInputAction(Zn.LEFT_CLICK,n),l(s))){let c=e._primaryStartPosition,d=e._previousPositions.values[0];g6(c,d,e._clickPixelTolerance)&&(D.clone(e._primaryPosition,t_e.position),s(t_e))}e._isTouchHolding=!1}if(o===0&&a&&(e._isPinching=!1,r=e.getInputAction(Zn.PINCH_END,n),l(r)&&r()),o===1&&!a){let c=i.values[0];D.clone(c,e._primaryPosition),D.clone(c,e._primaryStartPosition),D.clone(c,e._primaryPreviousPosition),e._buttonDown[hs.LEFT]=!0,r=e.getInputAction(Zn.LEFT_DOWN,n),l(r)&&(D.clone(c,$Ie.position),r($Ie)),e._touchHoldTimer=setTimeout(function(){if(!e.isDestroyed()&&(e._touchHoldTimer=void 0,e._isTouchHolding=!0,s=e.getInputAction(Zn.RIGHT_CLICK,n),l(s))){let d=e._primaryStartPosition,u=e._previousPositions.values[0];g6(d,u,e._holdPixelTolerance)&&(D.clone(e._primaryPosition,n_e.position),s(n_e))}},ff.touchHoldDelayMilliseconds),t.preventDefault()}o===2&&!a&&(e._isPinching=!0,r=e.getInputAction(Zn.PINCH_START,n),l(r)&&(D.clone(i.values[0],p6.position1),D.clone(i.values[1],p6.position2),r(p6),t.preventDefault()))}function P0t(e,t){y6(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i){r=n[i],s=r.identifier;let d=a.get(s);l(d)&&py(e,r,d)}a_e(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,D.clone(a.get(s),c.get(s))}var A6={startPosition:new D,endPosition:new D},JM={distance:{startPosition:new D,endPosition:new D},angleAndHeight:{startPosition:new D,endPosition:new D}};function a_e(e,t){let n=QI(t),i=e._positions,o=e._previousPositions,r=i.length,s;if(r===1&&e._buttonDown[hs.LEFT]){let a=i.values[0];D.clone(a,e._primaryPosition);let c=e._primaryPreviousPosition;s=e.getInputAction(Zn.MOUSE_MOVE,n),l(s)&&(D.clone(c,A6.startPosition),D.clone(a,A6.endPosition),s(A6)),D.clone(a,c),t.preventDefault()}else if(r===2&&e._isPinching&&(s=e.getInputAction(Zn.PINCH_MOVE,n),l(s))){let a=i.values[0],c=i.values[1],d=o.values[0],u=o.values[1],h=c.x-a.x,p=c.y-a.y,g=Math.sqrt(h*h+p*p)*.25,f=u.x-d.x,b=u.y-d.y,x=Math.sqrt(f*f+b*b)*.25,I=(c.y+a.y)*.125,_=(u.y+d.y)*.125,E=Math.atan2(p,h),S=Math.atan2(b,f);D.fromElements(0,x,JM.distance.startPosition),D.fromElements(0,g,JM.distance.endPosition),D.fromElements(S,_,JM.angleAndHeight.startPosition),D.fromElements(E,I,JM.angleAndHeight.endPosition),s(JM)}}function M0t(e,t){if(t.target.setPointerCapture(t.pointerId),t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.set(i,py(e,t,new D)),uY(e,t),e._previousPositions.set(i,D.clone(n.get(i)))}else o_e(e,t)}function i_e(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.remove(i),uY(e,t),e._previousPositions.remove(i)}else r_e(e,t)}function v0t(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId,o=n.get(i);if(!l(o))return;py(e,t,o),a_e(e,t);let r=e._previousPositions;D.clone(n.get(i),r.get(i))}else s_e(e,t)}function ff(e){this._inputEvents={},this._buttonDown={[hs.LEFT]:!1,[hs.MIDDLE]:!1,[hs.RIGHT]:!1},this._isPinching=!1,this._isTouchHolding=!1,this._lastSeenTouchEvent=-ff.mouseEmulationIgnoreMilliseconds,this._primaryStartPosition=new D,this._primaryPosition=new D,this._primaryPreviousPosition=new D,this._positions=new Bt,this._previousPositions=new Bt,this._removalFunctions=[],this._touchHoldTimer=void 0,this._clickPixelTolerance=5,this._holdPixelTolerance=25,this._element=e??document,B0t(this)}ff.prototype.setInputAction=function(e,t,n){let i=b6(t,n);this._inputEvents[i]=e};ff.prototype.getInputAction=function(e,t){let n=b6(e,t);return this._inputEvents[n]};ff.prototype.removeInputAction=function(e,t){let n=b6(e,t);delete this._inputEvents[n]};ff.prototype.isDestroyed=function(){return!1};ff.prototype.destroy=function(){return w0t(this),me(this)};ff.mouseEmulationIgnoreMilliseconds=800;ff.touchHoldDelayMilliseconds=1500;var Su=ff;function UI(e){this._scene=e,this._currentTweens=[],this._morphHandler=void 0,this._morphCancelled=!1,this._completeMorph=void 0,this._morphToOrthographic=!1}UI.prototype.completeMorph=function(){l(this._completeMorph)&&this._completeMorph()};UI.prototype.morphTo2D=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;this._previousMode=n.mode,this._morphToOrthographic=n.camera.frustum instanceof gn,!(this._previousMode===re.SCENE2D||this._previousMode===re.MORPHING)&&(this._scene.morphStart.raiseEvent(this,this._previousMode,re.SCENE2D,!0),n._mode=re.MORPHING,n.camera._setTransform(X.IDENTITY),this._previousMode===re.COLUMBUS_VIEW?byt(this,e):Tyt(this,e,t),e===0&&l(this._completeMorph)&&this._completeMorph())};var N0t=new m,D0t=new m,Q0t=new m,U0t=new m,k0t=new m,Y0t=new m,O0t=new m,H0t=new ge,z0t=new X,K0t=new Ni,J0t=new gn,j0t={position:void 0,direction:void 0,up:void 0,position2D:void 0,direction2D:void 0,up2D:void 0,frustum:void 0};UI.prototype.morphToColumbusView=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,this._previousMode===re.COLUMBUS_VIEW||this._previousMode===re.MORPHING)return;this._scene.morphStart.raiseEvent(this,this._previousMode,re.COLUMBUS_VIEW,!0),n.camera._setTransform(X.IDENTITY);let i=N0t,o=D0t,r=Q0t;if(e>0)i.x=0,i.y=-1,i.z=1,i=m.multiplyByScalar(m.normalize(i,i),5*t.maximumRadius,i),m.negate(m.normalize(i,o),o),m.cross(m.UNIT_X,o,r);else{let d=n.camera;if(this._previousMode===re.SCENE2D)m.clone(d.position,i),i.z=d.frustum.right-d.frustum.left,m.negate(m.UNIT_Z,o),m.clone(m.UNIT_Y,r);else{m.clone(d.positionWC,i),m.clone(d.directionWC,o),m.clone(d.upWC,r);let u=t.scaleToGeodeticSurface(i,O0t),h=Dt.eastNorthUpToFixedFrame(u,t,z0t);X.inverseTransformation(h,h),n.mapProjection.project(t.cartesianToCartographic(i,H0t),i),X.multiplyByPointAsVector(h,o,o),X.multiplyByPointAsVector(h,r,r)}}let s;this._morphToOrthographic?(s=J0t,s.width=n.camera.frustum.right-n.camera.frustum.left,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight):(s=K0t,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,s.fov=Z.toRadians(60));let a=j0t;a.position=i,a.direction=o,a.up=r,a.frustum=s;let c=Lyt(a);jM(this,c),this._previousMode===re.SCENE2D?Syt(this,e,a,c):(a.position2D=X.multiplyByPoint(xo.TRANSFORM_2D,i,U0t),a.direction2D=X.multiplyByPointAsVector(xo.TRANSFORM_2D,o,k0t),a.up2D=X.multiplyByPointAsVector(xo.TRANSFORM_2D,r,Y0t),n._mode=re.MORPHING,b_e(this,e,a,c)),e===0&&l(this._completeMorph)&&this._completeMorph()};var _6={position:new m,direction:new m,up:new m,frustum:void 0},l_e=new Ni;UI.prototype.morphTo3D=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,!(this._previousMode===re.SCENE3D||this._previousMode===re.MORPHING)){if(this._scene.morphStart.raiseEvent(this,this._previousMode,re.SCENE3D,!0),n._mode=re.MORPHING,n.camera._setTransform(X.IDENTITY),this._previousMode===re.SCENE2D)cyt(this,e,t);else{let i;e>0?(i=_6,m.fromDegrees(0,0,5*t.maximumRadius,t,i.position),m.negate(i.position,i.direction),m.normalize(i.direction,i.direction),m.clone(m.UNIT_Z,i.up)):i=d_e(this,t);let o,r=n.camera;r.frustum instanceof gn?o=r.frustum.clone():(o=l_e,o.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,o.fov=Z.toRadians(60)),i.frustum=o;let s=C_e(i);jM(this,s),I6(this,e,i,s)}e===0&&l(this._completeMorph)&&this._completeMorph()}};UI.prototype.isDestroyed=function(){return!1};UI.prototype.destroy=function(){return mY(this),me(this)};function jM(e,t){if(e._scene.completeMorphOnUserInput){e._morphHandler=new Su(e._scene.canvas);let n=function(){e._morphCancelled=!0,e._scene.camera.cancelFlight(),t(e)};e._completeMorph=n,e._morphHandler.setInputAction(n,Zn.LEFT_DOWN),e._morphHandler.setInputAction(n,Zn.MIDDLE_DOWN),e._morphHandler.setInputAction(n,Zn.RIGHT_DOWN),e._morphHandler.setInputAction(n,Zn.WHEEL)}}function mY(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 q0t=new ge,$0t=new m,eyt=new X;function d_e(e,t){let n=e._scene,i=n.camera,o=_6,r=o.position,s=o.direction,a=o.up,c=n.mapProjection.unproject(i.position,q0t);t.cartographicToCartesian(c,r);let d=t.scaleToGeodeticSurface(r,$0t),u=Dt.eastNorthUpToFixedFrame(d,t,eyt);return X.multiplyByPointAsVector(u,i.direction,s),X.multiplyByPointAsVector(u,i.up,a),o}var tyt=new m,nyt=new m,iyt=new m,oyt=new m,ryt=new m,syt=new m;function I6(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=m.clone(r.position,tyt),a=m.clone(r.direction,nyt),c=m.clone(r.up,iyt),d=X.multiplyByPoint(xo.TRANSFORM_2D_INVERSE,n.position,oyt),u=X.multiplyByPointAsVector(xo.TRANSFORM_2D_INVERSE,n.direction,ryt),h=X.multiplyByPointAsVector(xo.TRANSFORM_2D_INVERSE,n.up,syt);function p(f){Dm(s,d,f.time,r.position),Dm(a,u,f.time,r.direction),Dm(c,h,f.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right)}let g=o.tweens.add({duration:t,easingFunction:ms.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){y_e(e,o,0,1,t,i)}});e._currentTweens.push(g)}var ayt=new gn,u_e=new m,m_e=new m,h_e=new m,E6=new m,f_e=new m,p_e=new m;function cyt(e,t,n){t/=3;let i=e._scene,o=i.camera,r;t>0?(r=_6,m.fromDegrees(0,0,5*n.maximumRadius,n,r.position),m.negate(r.position,r.direction),m.normalize(r.direction,r.direction),m.clone(m.UNIT_Z,r.up)):(o.position.z=o.frustum.right-o.frustum.left,r=d_e(e,n));let s;e._morphToOrthographic?(s=ayt,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.width=o.frustum.right-o.frustum.left):(s=l_e,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.fov=Z.toRadians(60)),r.frustum=s;let a=C_e(r);jM(e,a);let c;e._morphToOrthographic?c=function(){I6(e,t,r,a)}:c=function(){g_e(e,t,r,function(){I6(e,t,r,a)})},t>0?(i._mode=re.SCENE2D,o.flyTo({duration:t,destination:m.fromDegrees(0,0,5*n.maximumRadius,n,E6),complete:function(){i._mode=re.MORPHING,c()}})):c()}function Dm(e,t,n,i){return m.lerp(e,t,n,i)}function A_e(e,t,n,i,o){let r=e._scene,s=r.camera;if(s.frustum instanceof gn)return;let a=s.frustum.fov,c=Z.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=Z.lerp(a,c,p.time);let g=d/Math.tan(s.frustum.fov*.5);i(s,g)}let h=r.tweens.add({duration:t,easingFunction:ms.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){s.frustum=n.frustum.clone(),o(e)}});e._currentTweens.push(h)}var lyt=new m,dyt=new m,uyt=new m,x6=new m,myt=new m,hyt=new m,fyt=new qr,pyt=new En,Ayt=new m,gyt={position:void 0,direction:void 0,up:void 0,frustum:void 0};function byt(e,t){t*=.5;let n=e._scene,i=n.camera,o=m.clone(i.position,lyt),r=m.clone(i.direction,dyt),s=m.clone(i.up,uyt),a=m.negate(m.UNIT_Z,myt),c=m.clone(m.UNIT_Y,hyt),d=x6;if(t>0)m.clone(m.ZERO,x6),d.z=5*n.ellipsoid.maximumRadius;else{m.clone(o,x6);let x=pyt;X.multiplyByPoint(xo.TRANSFORM_2D,o,x.origin),X.multiplyByPointAsVector(xo.TRANSFORM_2D,r,x.direction);let I=n.globe;if(l(I)){let _=I.pickWorldCoordinates(x,n,!0,Ayt);l(_)&&(X.multiplyByPoint(xo.TRANSFORM_2D_INVERSE,_,d),d.z+=m.distance(o,d))}}let u=fyt;u.right=d.z*.5,u.left=-u.right,u.top=u.right*(n.drawingBufferHeight/n.drawingBufferWidth),u.bottom=-u.top;let h=gyt;h.position=d,h.direction=a,h.up=c,h.frustum=u;let p=x_e(h);jM(e,p);function g(x){Dm(o,d,x.time,i.position),Dm(r,a,x.time,i.direction),Dm(s,c,x.time,i.up),m.cross(i.direction,i.up,i.right),m.normalize(i.right,i.right),i._adjustOrthographicFrustum(!0)}function f(x,I){x.position.z=I}let b=n.tweens.add({duration:t,easingFunction:ms.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:g,complete:function(){A_e(e,t,h,f,p)}});e._currentTweens.push(b)}var c_e=new ge,yyt={position:new m,direction:new m,up:new m,position2D:new m,direction2D:new m,up2D:new m,frustum:new qr},Cyt={position:new m,direction:new m,up:new m,frustum:void 0},xyt=new m,Iyt=new En,_yt=new X,Eyt=new m;function Tyt(e,t,n){t*=.5;let i=e._scene,o=i.camera,r=yyt;if(t>0)m.clone(m.ZERO,r.position),r.position.z=5*n.maximumRadius,m.negate(m.UNIT_Z,r.direction),m.clone(m.UNIT_Y,r.up);else{n.cartesianToCartographic(o.positionWC,c_e),i.mapProjection.project(c_e,r.position),m.negate(m.UNIT_Z,r.direction),m.clone(m.UNIT_Y,r.up);let h=Iyt;m.clone(r.position2D,h.origin);let p=m.clone(o.directionWC,h.direction),g=n.scaleToGeodeticSurface(o.positionWC,Eyt),f=Dt.eastNorthUpToFixedFrame(g,n,_yt);X.inverseTransformation(f,f),X.multiplyByPointAsVector(f,p,p),X.multiplyByPointAsVector(xo.TRANSFORM_2D,p,p);let b=i.globe;if(l(b)){let x=b.pickWorldCoordinates(h,i,!0,xyt);if(l(x)){let I=m.distance(r.position2D,x);x.x+=I,m.clone(x,r.position2D)}}}function s(h,p){h.position.x=p}X.multiplyByPoint(xo.TRANSFORM_2D,r.position,r.position2D),X.multiplyByPointAsVector(xo.TRANSFORM_2D,r.direction,r.direction2D),X.multiplyByPointAsVector(xo.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=Cyt;X.multiplyByPoint(xo.TRANSFORM_2D_INVERSE,r.position2D,c.position),m.clone(r.direction,c.direction),m.clone(r.up,c.up),c.frustum=a;let d=x_e(c);jM(e,d);function u(){A_e(e,t,r,s,d)}b_e(e,t,r,u)}function g_e(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=Z.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=Z.lerp(c,a,p.time),r.position.z=d/Math.tan(r.frustum.fov*.5)}let h=o.tweens.add({duration:t,easingFunction:ms.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){i(e)}});e._currentTweens.push(h)}function Syt(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=m.clone(n.position,E6),a=m.clone(n.direction,f_e),c=m.clone(n.up,p_e);o._mode=re.MORPHING;function d(){r.frustum=n.frustum.clone();let u=m.clone(r.position,u_e),h=m.clone(r.direction,m_e),p=m.clone(r.up,h_e);u.z=s.z;function g(b){Dm(u,s,b.time,r.position),Dm(h,a,b.time,r.direction),Dm(p,c,b.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right)}let f=o.tweens.add({duration:t,easingFunction:ms.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:g,complete:function(){i(e)}});e._currentTweens.push(f)}e._morphToOrthographic?d():g_e(e,0,n,d)}function b_e(e,t,n,i){let o=e._scene,r=o.camera,s=m.clone(r.position,u_e),a=m.clone(r.direction,m_e),c=m.clone(r.up,h_e),d=m.clone(n.position2D,E6),u=m.clone(n.direction2D,f_e),h=m.clone(n.up2D,p_e);function p(f){Dm(s,d,f.time,r.position),Dm(a,u,f.time,r.direction),Dm(c,h,f.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right),r._adjustOrthographicFrustum(!0)}let g=o.tweens.add({duration:t,easingFunction:ms.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){y_e(e,o,1,0,t,i)}});e._currentTweens.push(g)}function y_e(e,t,n,i,o,r){let s={object:t,property:"morphTime",startValue:n,stopValue:i,duration:o,easingFunction:ms.QUARTIC_OUT};l(r)&&(s.complete=function(){r(e)});let a=t.tweens.addProperty(s);e._currentTweens.push(a)}function C_e(e){return function(t){let n=t._scene;n._mode=re.SCENE3D,n.morphTime=re.getMorphTime(re.SCENE3D),mY(t);let i=n.camera;(t._previousMode!==re.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,m.clone(e.position,i.position),m.clone(e.direction,i.direction),m.clone(e.up,i.up),m.cross(i.direction,i.up,i.right),m.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,re.SCENE3D,r)}}function x_e(e){return function(t){let n=t._scene;n._mode=re.SCENE2D,n.morphTime=re.getMorphTime(re.SCENE2D),mY(t);let i=n.camera;m.clone(e.position,i.position),i.position.z=n.ellipsoid.maximumRadius*2,m.clone(e.direction,i.direction),m.clone(e.up,i.up),m.cross(i.direction,i.up,i.right),m.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,re.SCENE2D,o)}}function Lyt(e){return function(t){let n=t._scene;n._mode=re.COLUMBUS_VIEW,n.morphTime=re.getMorphTime(re.COLUMBUS_VIEW),mY(t);let i=n.camera;(t._previousModeMode!==re.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,m.clone(e.position,i.position),m.clone(e.direction,i.direction),m.clone(e.up,i.up),m.cross(i.direction,i.up,i.right),m.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,re.COLUMBUS_VIEW,r)}}var qM=UI;var TOi=y(C(),1);var U3i=y(C(),1);var w3i=y(C(),1),Ryt={LEFT_DRAG:0,RIGHT_DRAG:1,MIDDLE_DRAG:2,WHEEL:3,PINCH:4},qi=Object.freeze(Ryt);function Ra(e,t){let n=`${e}`;return l(t)&&(n+=`+${t}`),n}function Vyt(e,t){D.clone(e.distance.startPosition,t.distance.startPosition),D.clone(e.distance.endPosition,t.distance.endPosition),D.clone(e.angleAndHeight.startPosition,t.angleAndHeight.startPosition),D.clone(e.angleAndHeight.endPosition,t.angleAndHeight.endPosition)}function I_e(e,t,n){let i=Ra(qi.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 D;let d=e._movement[i];l(d)||(d=e._movement[i]={}),d.distance={startPosition:new D,endPosition:new D},d.angleAndHeight={startPosition:new D,endPosition:new D},d.prevAngle=0,e._eventHandler.setInputAction(function(u){e._buttonsDown++,r[i]=!0,a[i]=new Date,D.lerp(u.position1,u.position2,.5,s[i])},Zn.PINCH_START,t),e._eventHandler.setInputAction(function(){e._buttonsDown=Math.max(e._buttonsDown-1,0),r[i]=!1,c[i]=new Date},Zn.PINCH_END,t),e._eventHandler.setInputAction(function(u){if(r[i]){o[i]?(Vyt(u,d),o[i]=!1,d.prevAngle=d.angleAndHeight.startPosition.x):(D.clone(u.distance.endPosition,d.distance.endPosition),D.clone(u.angleAndHeight.endPosition,d.angleAndHeight.endPosition));let h=d.angleAndHeight.endPosition.x,p=d.prevAngle,g=Math.PI*2;for(;h>=p+Math.PI;)h-=g;for(;h<p-Math.PI;)h+=g;d.angleAndHeight.endPosition.x=-h*n.clientWidth/12,d.angleAndHeight.startPosition.x=-p*n.clientWidth/12}},Zn.PINCH_MOVE,t)}function __e(e,t){let n=Ra(qi.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 D,endPosition:new D,valid:!1}),s.startPosition=new D,D.clone(D.ZERO,s.startPosition),s.endPosition=new D,e._eventHandler.setInputAction(function(c){let d=7.5*Z.toRadians(c);i[n]=o[n]=new Date,s.endPosition.x=0,s.endPosition.y=d,D.clone(s.endPosition,a.endPosition),a.valid=!0,r[n]=!1},Zn.WHEEL,t)}function fL(e,t,n){let i=Ra(n,t),o=e._isDown,r=e._eventStartPosition,s=e._pressTime;o[i]=!1,r[i]=new D;let a=e._lastMovement[i];l(a)||(a=e._lastMovement[i]={startPosition:new D,endPosition:new D,valid:!1});let c,d;n===qi.LEFT_DRAG?(c=Zn.LEFT_DOWN,d=Zn.LEFT_UP):n===qi.RIGHT_DRAG?(c=Zn.RIGHT_DOWN,d=Zn.RIGHT_UP):n===qi.MIDDLE_DRAG&&(c=Zn.MIDDLE_DOWN,d=Zn.MIDDLE_UP),e._eventHandler.setInputAction(function(u){e._buttonsDown++,a.valid=!1,o[i]=!0,s[i]=new Date,D.clone(u.position,r[i])},c,t),e._eventHandler.setInputAction(function(){T6(Ra(n,void 0),e);for(let u of Object.values(La)){let h=Ra(n,u);T6(h,e)}},d,t)}function T6(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 E_e(e,t){D.clone(e.startPosition,t.startPosition),D.clone(e.endPosition,t.endPosition)}function Gyt(e,t,n){let i=n._isDown,o=!1,r=Ra(e,t);for(let[c,d]of Object.entries(i))c.startsWith(e)&&d&&c!==r&&(o=!0,T6(c,n));if(!o)return;let s=n._pressTime,a=n._lastMovement[r];l(a)||(a=n._lastMovement[r]={startPosition:new D,endPosition:new D,valid:!1}),n._buttonsDown++,a.valid=!1,i[r]=!0,s[r]=new Date}function T_e(e,t){let n=e._update,i=e._movement,o=e._lastMovement,r=e._isDown;for(let s in qi)if(qi.hasOwnProperty(s)){let a=qi[s];if(l(a)){let c=Ra(a,t);n[c]=!0,l(e._lastMovement[c])||(e._lastMovement[c]={startPosition:new D,endPosition:new D,valid:!1}),l(e._movement[c])||(e._movement[c]={startPosition:new D,endPosition:new D})}}e._eventHandler.setInputAction(function(s){for(let a in qi)if(qi.hasOwnProperty(a)){let c=qi[a];if(l(c)){let d=Ra(c,t);Gyt(c,t,e),r[d]&&(n[d]?(E_e(i[d],o[d]),o[d].valid=!0,E_e(s,i[d]),n[d]=!1):D.clone(s.endPosition,i[d].endPosition))}}D.clone(s.endPosition,e._currentMousePosition)},Zn.MOUSE_MOVE,t)}function Qm(e){this._eventHandler=new Su(e),this._update={},this._movement={},this._lastMovement={},this._isDown={},this._eventStartPosition={},this._pressTime={},this._releaseTime={},this._buttonsDown=0,this._currentMousePosition=new D,__e(this,void 0),I_e(this,void 0,e),fL(this,void 0,qi.LEFT_DRAG),fL(this,void 0,qi.RIGHT_DRAG),fL(this,void 0,qi.MIDDLE_DRAG),T_e(this,void 0);for(let t in La)if(La.hasOwnProperty(t)){let n=La[t];l(n)&&(__e(this,n),I_e(this,n,e),fL(this,n,qi.LEFT_DRAG),fL(this,n,qi.RIGHT_DRAG),fL(this,n,qi.MIDDLE_DRAG),T_e(this,n))}}Object.defineProperties(Qm.prototype,{currentMousePosition:{get:function(){return this._currentMousePosition}},anyButtonDown:{get:function(){let e=!this._update[Ra(qi.WHEEL)]||!this._update[Ra(qi.WHEEL,La.SHIFT)]||!this._update[Ra(qi.WHEEL,La.CTRL)]||!this._update[Ra(qi.WHEEL,La.ALT)];return this._buttonsDown>0||e}}});Qm.prototype.isMoving=function(e,t){let n=Ra(e,t);return!this._update[n]};Qm.prototype.getMovement=function(e,t){let n=Ra(e,t);return this._movement[n]};Qm.prototype.getLastMovement=function(e,t){let n=Ra(e,t),i=this._lastMovement[n];if(i.valid)return i};Qm.prototype.isButtonDown=function(e,t){let n=Ra(e,t);return this._isDown[n]};Qm.prototype.getStartMousePosition=function(e,t){if(e===qi.WHEEL)return this._currentMousePosition;let n=Ra(e,t);return this._eventStartPosition[n]};Qm.prototype.getButtonPressTime=function(e,t){let n=Ra(e,t);return this._pressTime[n]};Qm.prototype.getButtonReleaseTime=function(e,t){let n=Ra(e,t);return this._releaseTime[n]};Qm.prototype.reset=function(){for(let e in this._update)this._update.hasOwnProperty(e)&&(this._update[e]=!0)};Qm.prototype.isDestroyed=function(){return!1};Qm.prototype.destroy=function(){return this._eventHandler=this._eventHandler&&this._eventHandler.destroy(),me(this)};var $M=Qm;var q3i=y(C(),1);function hY(e,t,n,i,o,r,s,a,c,d){this._tweens=e,this._tweenjs=t,this._startObject=ke(n),this._stopObject=ke(i),this._duration=o,this._delay=r,this._easingFunction=s,this._update=a,this._complete=c,this.cancel=d,this.needsStart=!0}Object.defineProperties(hY.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}}});hY.prototype.cancelTween=function(){this._tweens.remove(this)};function pf(){this._tweens=[]}Object.defineProperties(pf.prototype,{length:{get:function(){return this._tweens.length}}});pf.prototype.add=function(e){if(e=e??Y.EMPTY_OBJECT,e.duration===0)return l(e.complete)&&e.complete(),new hY(this);let t=e.duration/ai.SECONDS_PER_MILLISECOND,n=e.delay??0,i=n/ai.SECONDS_PER_MILLISECOND,o=e.easingFunction??ms.LINEAR_NONE,r=e.startObject,s=new dye(r);s.to(ke(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 hY(this,s,e.startObject,e.stopObject,e.duration,n,o,e.update,e.complete,e.cancel);return this._tweens.push(a),a};pf.prototype.addProperty=function(e){e=e??Y.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})};pf.prototype.addAlpha=function(e){e=e??Y.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})};pf.prototype.addOffsetIncrement=function(e){e=e??Y.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})};pf.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};pf.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};pf.prototype.contains=function(e){return l(e)&&this._tweens.indexOf(e)!==-1};pf.prototype.get=function(e){return this._tweens[e]};pf.prototype.update=function(e){let t=this._tweens,n=0;for(e=l(e)?e/ai.SECONDS_PER_MILLISECOND:Fi();n<t.length;){let i=t[n],o=i.tweenjs;i.needsStart?(i.needsStart=!1,o.start(e)):o.update(e)?n++:(o.stop(),t.splice(n,1))}};var kI=pf;function tv(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=qi.LEFT_DRAG,this.zoomEventTypes=[qi.RIGHT_DRAG,qi.WHEEL,qi.PINCH],this.rotateEventTypes=qi.LEFT_DRAG,this.tiltEventTypes=[qi.MIDDLE_DRAG,qi.PINCH,{eventType:qi.LEFT_DRAG,modifier:La.CTRL},{eventType:qi.RIGHT_DRAG,modifier:La.CTRL}],this.lookEventTypes={eventType:qi.LEFT_DRAG,modifier:La.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 $M(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 kI,this._tween=void 0,this._horizontalRotationAxis=void 0,this._tiltCenterMousePosition=new D(-1,-1),this._tiltCenter=new m,this._rotateMousePosition=new D(-1,-1),this._rotateStartPosition=new m,this._strafeStartPosition=new m,this._strafeMousePosition=new D,this._strafeEndMousePosition=new D,this._zoomMouseStart=new D(-1,-1),this._zoomWorldPosition=new m,this._useZoomWorldPosition=!1,this._panLastMousePosition=new D,this._panLastWorldPosition=new m,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 ge(Math.PI,Z.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 Zyt(e,t){if(e<0)return 0;let n=(1-t)*25;return Math.exp(-n*e)}function Byt(e){return D.equalsEpsilon(e.startPosition,e.endPosition,Z.EPSILON14)}var wyt=.4;function Xyt(e,t,n,i,o,r,s){let a=r[s];l(a)||(a=r[s]={startPosition:new D,endPosition:new D,motion:new D,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<wyt){let g=Zyt(p,i),f=e.getLastMovement(t,n);if(!l(f)||Byt(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=D.clone(f.startPosition,a.startPosition),a.endPosition=D.multiplyByScalar(a.motion,g,a.endPosition),a.endPosition=D.add(a.startPosition,a.endPosition,a.endPosition),isNaN(a.endPosition.x)||isNaN(a.endPosition.y)||D.distance(a.startPosition,a.endPosition)<.5))return;if(!e.isButtonDown(t,n)){let b=e.getStartMousePosition(t,n);o(r,b,a)}}}function Wyt(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 S_e=[];function Dl(e,t,n,i,o,r){if(!l(n))return;let s=e._aggregator;Array.isArray(n)||(S_e[0]=n,n=S_e);let a=n.length;for(let c=0;c<a;++c){let d=n[c],u=l(d.eventType)?d.eventType:d,h=d.modifier,p=s.isMoving(u,h)&&s.getMovement(u,h),g=s.getStartMousePosition(u,h);e.enableInputs&&t&&(p?(i(e,g,p),Wyt(e,r)):o<1&&Xyt(s,u,h,o,i,e,r))}}var fY=new En,Fyt=new m,Pyt=new D,Myt=new m,vyt=new D,Nyt=new m,Dyt=new m,Qyt=new m,Uyt=new m,M_e=new m,kyt=new m,Yyt=new m,Oyt=new m,Hyt=new m,zyt=new m,Kyt=new m,Jyt=new m,jyt=new m,qyt=new m,$yt=new m,YI=new m,L_e=new m,R_e=new m,S6={orientation:new ic};function X6(e,t,n,i,o,r){let s=1;l(r)&&(s=Z.clamp(Math.abs(r),.25,1));let a=n.endPosition.y-n.startPosition.y,d=a>0?e.minimumZoomDistance*s:0,u=e.maximumZoomDistance,h=o-d,p=i*h;p=Z.clamp(p,e._minimumZoomRate,e._maximumZoomRate);let g=a/e._scene.canvas.clientHeight;g=Math.min(g,e.maximumMovementRatio);let f=p*g;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 b=e._scene,x=b.camera,I=b.mode,_=S6.orientation;_.heading=x.heading,_.pitch=x.pitch,_.roll=x.roll;let E=n.inertiaEnabled??D.equals(t,e._zoomMouseStart),S=e._zoomingOnVector,R=e._rotatingZoom,G;if(E||(e._zoomMouseStart=D.clone(t,e._zoomMouseStart),l(e._globe)&&I===re.SCENE2D?(G=x.getPickRay(t,fY).origin,G=m.fromElements(G.y,G.z,G.x)):l(e._globe)&&(G=Jg(e,t,Fyt)),l(G)?(e._useZoomWorldPosition=!0,e._zoomWorldPosition=m.clone(G,e._zoomWorldPosition)):e._useZoomWorldPosition=!1,S=e._zoomingOnVector=!1,R=e._rotatingZoom=!1,e._zoomingUnderground=e._cameraUnderground),!e._useZoomWorldPosition){x.zoomIn(f);return}let B=I===re.COLUMBUS_VIEW;if(x.positionCartographic.height<2e6&&(R=!0),!E||R){if(I===re.SCENE2D){let w=e._zoomWorldPosition,F=x.position;if(!m.equals(w,F)&&x.positionCartographic.height<e._maxCoord.x*2){let P=x.position.x,A=m.subtract(w,F,Myt);m.normalize(A,A);let T=m.distance(w,F)*f/(x.getMagnitude()*.5);x.move(A,T*.5),(x.position.x<0&&P>0||x.position.x>0&&P<0)&&(G=x.getPickRay(t,fY).origin,G=m.fromElements(G.y,G.z,G.x),e._zoomWorldPosition=m.clone(G,e._zoomWorldPosition))}}else if(I===re.SCENE3D){let w=m.normalize(x.position,M_e);if(e._cameraUnderground||e._zoomingUnderground||x.positionCartographic.height<3e3&&Math.abs(m.dot(x.direction,w))<.6)B=!0;else{let F=b.canvas,P=vyt;P.x=F.clientWidth/2,P.y=F.clientHeight/2;let A=Jg(e,P,Nyt);if(!l(A))B=!0;else if(x.positionCartographic.height<1e6)if(m.dot(x.direction,w)>=-.5)B=!0;else{let T=Yyt;m.clone(x.position,T);let L=e._zoomWorldPosition,V=kyt;if(V=m.normalize(L,V),m.dot(V,w)<0)return;let W=$yt,M=zyt;m.clone(x.direction,M),m.add(T,m.multiplyByScalar(M,1e3,YI),W);let Q=Kyt,N=Jyt;m.subtract(L,T,Q),m.normalize(Q,N);let k=m.dot(w,N);if(k>=0){e._zoomMouseStart.x=-1;return}let v=Math.acos(-k),O=m.magnitude(T),H=m.magnitude(L),ee=O-f,K=m.magnitude(Q),te=Math.asin(Z.clamp(K/H*Math.sin(v),-1,1)),q=Math.asin(Z.clamp(ee/H*Math.sin(v),-1,1)),pe=te-q+v,ye=Oyt;m.normalize(T,ye);let he=Hyt;he=m.cross(N,ye,he),he=m.normalize(he,he),m.normalize(m.cross(ye,he,YI),M),m.multiplyByScalar(m.normalize(W,YI),m.magnitude(W)-f,W),m.normalize(T,T),m.multiplyByScalar(T,ee,T);let xe=jyt;m.multiplyByScalar(m.add(m.multiplyByScalar(ye,Math.cos(pe)-1,L_e),m.multiplyByScalar(M,Math.sin(pe),R_e),YI),ee,xe),m.add(T,xe,T),m.normalize(W,ye),m.normalize(m.cross(ye,he,YI),M);let Te=qyt;m.multiplyByScalar(m.add(m.multiplyByScalar(ye,Math.cos(pe)-1,L_e),m.multiplyByScalar(M,Math.sin(pe),R_e),YI),m.magnitude(W),Te),m.add(W,Te,W),m.clone(T,x.position),m.normalize(m.subtract(W,T,YI),x.direction),m.clone(x.direction,x.direction),m.cross(x.direction,x.up,x.right),m.cross(x.right,x.direction,x.up),x.setView(S6);return}else{let T=m.normalize(A,Dyt),L=m.normalize(e._zoomWorldPosition,Qyt),V=m.dot(L,T);if(V>0&&V<1){let W=Z.acosClamped(V),M=m.cross(L,T,Uyt),Q=Math.abs(W)>Z.toRadians(20)?x.positionCartographic.height*.75:x.positionCartographic.height-f,N=f/Q;x.rotate(M,W*N)}}}}e._rotatingZoom=!B}if(!E&&B||S){let w,F=to.worldToWindowCoordinates(b,e._zoomWorldPosition,Pyt);I!==re.COLUMBUS_VIEW&&D.equals(t,e._zoomMouseStart)&&l(F)?w=x.getPickRay(F,fY):w=x.getPickRay(t,fY);let P=w.direction;(I===re.COLUMBUS_VIEW||I===re.SCENE2D)&&m.fromElements(P.y,P.z,P.x,P),x.move(P,f),e._zoomingOnVector=!0}else x.zoomIn(f);e._cameraUnderground||x.setView(S6)}var eCt=new En,tCt=new En,nCt=new m;function iCt(e,t,n){let o=e._scene.camera,r=o.getPickRay(n.startPosition,eCt).origin,s=o.getPickRay(n.endPosition,tCt).origin;r=m.fromElements(r.y,r.z,r.x,r),s=m.fromElements(s.y,s.z,s.x,s);let a=m.subtract(r,s,nCt),c=m.magnitude(a);c>0&&(m.normalize(a,a),o.move(a,c))}function V_e(e,t,n){l(n.distance)&&(n=n.distance);let o=e._scene.camera;X6(e,t,n,e.zoomFactor,o.getMagnitude())}var oCt=new D,rCt=new D;function G_e(e,t,n){if(l(n.angleAndHeight)){sCt(e,t,n.angleAndHeight);return}let i=e._scene,o=i.camera,r=i.canvas,s=r.clientWidth,a=r.clientHeight,c=oCt;c.x=2/s*n.startPosition.x-1,c.y=2/a*(a-n.startPosition.y)-1,c=D.normalize(c,c);let d=rCt;d.x=2/s*n.endPosition.x-1,d.y=2/a*(a-n.endPosition.y)-1,d=D.normalize(d,d);let u=Z.acosClamped(c.x);c.y<0&&(u=Z.TWO_PI-u);let h=Z.acosClamped(d.x);d.y<0&&(h=Z.TWO_PI-h);let p=h-u;o.twistRight(p)}function sCt(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 aCt(e){let t=e._scene.mapMode2D===_d.ROTATE;X.equals(X.IDENTITY,e._scene.camera.transform)?(Dl(e,e.enableTranslate,e.translateEventTypes,iCt,e.inertiaTranslate,"_lastInertiaTranslateMovement"),Dl(e,e.enableZoom,e.zoomEventTypes,V_e,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&Dl(e,e.enableRotate,e.tiltEventTypes,G_e,e.inertiaSpin,"_lastInertiaTiltMovement")):(Dl(e,e.enableZoom,e.zoomEventTypes,V_e,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&Dl(e,e.enableRotate,e.translateEventTypes,G_e,e.inertiaSpin,"_lastInertiaSpinMovement"))}var v_e=new En,cCt=new m,lCt=new m;function Jg(e,t,n){let i=e._scene,o=e._globe,r=i.camera,s;if(i.pickPositionSupported&&(s=i.pickPositionWorldCoordinates(t,cCt)),!l(o))return m.clone(s,n);let a=!e._cameraUnderground,c=r.getPickRay(t,v_e),d=o.pickWorldCoordinates(c,i,a,lCt),u=l(s)?m.distance(s,r.positionWC):Number.POSITIVE_INFINITY,h=l(d)?m.distance(d,r.positionWC):Number.POSITIVE_INFINITY;return u<h?m.clone(s,n):m.clone(d,n)}var dCt=new ge;function xY(e){let t=e._ellipsoid,n=e._scene,i=n.camera,o=n.mode,r=0;if(o===re.SCENE3D){let c=t.cartesianToCartographic(i.position,dCt);l(c)&&(r=c.height)}else r=i.position.z;let s=e._scene.globeHeight??0;return Math.abs(s-r)}var uCt=new m;function N_e(e,t){let n=t.origin,i=t.direction,o=xY(e),r=m.normalize(n,uCt),s=Math.abs(m.dot(r,i));return s=Math.max(s,.5)*2,o*s}function D_e(e,t,n,i){let o=m.distance(t.origin,n),r=xY(e),s=Z.clamp(r*5,e._minimumUndergroundPickDistance,e._maximumUndergroundPickDistance);return o>s&&(o=Math.min(o,r/5),o=Math.max(o,100)),En.getPoint(t,o,i)}function Q_e(e,t,n,i){let o;return l(n)?(o=m.distance(t.origin,n),o>e._maximumUndergroundPickDistance&&(o=xY(e))):o=xY(e),En.getPoint(t,o,i)}var mCt=new D;function U_e(e,t){let n=t.endPosition,i=D.subtract(t.endPosition,t.startPosition,mCt),o=e._strafeEndMousePosition;D.add(o,i,o),t.endPosition=o,W6(e,t,e._strafeStartPosition),t.endPosition=n}var Z_e=new En,hCt=new En,L6=new m,fCt=new m,pCt=new m,ACt=new m,gCt=new An(m.UNIT_X,0),bCt=new D,yCt=new D;function CCt(e,t,n){if(m.equals(t,e._translateMousePosition)||(e._looking=!1),m.equals(t,e._strafeMousePosition)||(e._strafing=!1),e._looking){Ru(e,t,n);return}if(e._strafing){U_e(e,n);return}let o=e._scene.camera,r=e._cameraUnderground,s=D.clone(n.startPosition,bCt),a=D.clone(n.endPosition,yCt),c=o.getPickRay(s,Z_e),d=m.clone(m.ZERO,ACt),u=m.UNIT_X,h;if(o.position.z<e._minimumPickingTerrainHeight&&(h=Jg(e,s,L6),l(h)&&(d.x=h.x)),r||d.x>o.position.z&&l(h)){let E=h;r&&(E=Q_e(e,c,h,L6)),D.clone(t,e._strafeMousePosition),D.clone(t,e._strafeEndMousePosition),m.clone(E,e._strafeStartPosition),e._strafing=!0,W6(e,n,e._strafeStartPosition);return}let p=An.fromPointNormal(d,u,gCt);c=o.getPickRay(s,Z_e);let g=fi.rayPlane(c,p,L6),f=o.getPickRay(a,hCt),b=fi.rayPlane(f,p,fCt);if(!l(g)||!l(b)){e._looking=!0,Ru(e,t,n),D.clone(t,e._translateMousePosition);return}let x=m.subtract(g,b,pCt),I=x.x;x.x=x.y,x.y=x.z,x.z=I;let _=m.magnitude(x);_>Z.EPSILON6&&(m.normalize(x,x),o.move(x,_))}var k_e=new D,gY=new En,bY=new m,xCt=new m,Y_e=new X,ICt=new X,_Ct=new m,ECt=new An(m.UNIT_X,0),R6=new m,Z6=new ge,O_e=new X,TCt=new Pe,SCt=new $,yY=new m;function LCt(e,t,n){if(l(n.angleAndHeight)&&(n=n.angleAndHeight),D.equals(t,e._tiltCenterMousePosition)||(e._tiltCVOffMap=!1,e._looking=!1),e._looking){Ru(e,t,n);return}let o=e._scene.camera;e._tiltCVOffMap||!e.onMap()||Math.abs(o.position.z)>e._minimumPickingTerrainHeight?(e._tiltCVOffMap=!0,RCt(e,t,n)):VCt(e,t,n)}function RCt(e,t,n){let i=e._scene,o=i.camera,r=i.canvas,s=k_e;s.x=r.clientWidth/2,s.y=r.clientHeight/2;let a=o.getPickRay(s,gY),c=m.UNIT_X,d=a.origin,u=a.direction,h,p=m.dot(c,u);if(Math.abs(p)>Z.EPSILON6&&(h=-m.dot(c,d)/p),!l(h)||h<=0){e._looking=!0,Ru(e,t,n),D.clone(t,e._tiltCenterMousePosition);return}let g=m.multiplyByScalar(u,h,bY);m.add(d,g,g);let f=i.mapProjection,b=f.ellipsoid;m.fromElements(g.y,g.z,g.x,g);let x=f.unproject(g,Z6);b.cartographicToCartesian(x,g);let I=Dt.eastNorthUpToFixedFrame(g,b,Y_e),_=e._globe,E=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let S=X.clone(o.transform,O_e);o._setTransform(I),Lu(e,t,n,m.UNIT_Z),o._setTransform(S),e._globe=_,e._ellipsoid=E;let R=E.maximumRadius;e._rotateFactor=1/R,e._rotateRateRangeAdjustment=R}function VCt(e,t,n){let i=e._scene,o=i.camera,r=e._cameraUnderground,s,a,c=m.UNIT_X;if(D.equals(t,e._tiltCenterMousePosition))s=m.clone(e._tiltCenter,bY);else{if(o.position.z<e._minimumPickingTerrainHeight&&(s=Jg(e,t,bY)),!l(s)){a=o.getPickRay(t,gY);let A=a.origin,T=a.direction,L,V=m.dot(c,T);if(Math.abs(V)>Z.EPSILON6&&(L=-m.dot(c,A)/V),!l(L)||L<=0){e._looking=!0,Ru(e,t,n),D.clone(t,e._tiltCenterMousePosition);return}s=m.multiplyByScalar(T,L,bY),m.add(A,s,s)}r&&(l(a)||(a=o.getPickRay(t,gY)),D_e(e,a,s,s)),D.clone(t,e._tiltCenterMousePosition),m.clone(s,e._tiltCenter)}let d=i.canvas,u=k_e;u.x=d.clientWidth/2,u.y=e._tiltCenterMousePosition.y,a=o.getPickRay(u,gY);let h=m.clone(m.ZERO,_Ct);h.x=s.x;let p=An.fromPointNormal(h,c,ECt),g=fi.rayPlane(a,p,xCt),f=o._projection,b=f.ellipsoid;m.fromElements(s.y,s.z,s.x,s);let x=f.unproject(s,Z6);b.cartographicToCartesian(x,s);let I=Dt.eastNorthUpToFixedFrame(s,b,Y_e),_;l(g)?(m.fromElements(g.y,g.z,g.x,g),x=f.unproject(g,Z6),b.cartographicToCartesian(x,g),_=Dt.eastNorthUpToFixedFrame(g,b,ICt)):_=I;let E=e._globe,S=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let R=m.UNIT_Z,G=X.clone(o.transform,O_e);o._setTransform(I);let B=m.cross(m.UNIT_Z,m.normalize(o.position,R6),R6),w=m.dot(o.right,B);if(Lu(e,t,n,R,!1,!0),o._setTransform(_),w<0){let A=n.startPosition.y-n.endPosition.y;(r&&A<0||!r&&A>0)&&(R=void 0);let T=o.constrainedAxis;o.constrainedAxis=void 0,Lu(e,t,n,R,!0,!1),o.constrainedAxis=T}else Lu(e,t,n,R,!0,!1);if(l(o.constrainedAxis)){let A=m.cross(o.direction,o.constrainedAxis,yY);m.equalsEpsilon(A,m.ZERO,Z.EPSILON6)||(m.dot(A,o.right)<0&&m.negate(A,A),m.cross(A,o.direction,o.up),m.cross(o.direction,o.up,o.right),m.normalize(o.up,o.up),m.normalize(o.right,o.right))}o._setTransform(G),e._globe=E,e._ellipsoid=S;let F=S.maximumRadius;e._rotateFactor=1/F,e._rotateRateRangeAdjustment=F;let P=m.clone(o.positionWC,R6);if(e.enableCollisionDetection&&M6(e,!0),!m.equals(o.positionWC,P)){o._setTransform(_),o.worldToCameraCoordinatesPoint(P,P);let A=m.magnitudeSquared(P);m.magnitudeSquared(o.position)>A&&(m.normalize(o.position,o.position),m.multiplyByScalar(o.position,Math.sqrt(A),o.position));let T=m.angleBetween(P,o.position),L=m.cross(P,o.position,P);m.normalize(L,L);let V=Pe.fromAxisAngle(L,T,TCt),W=$.fromQuaternion(V,SCt);$.multiplyByVector(W,o.direction,o.direction),$.multiplyByVector(W,o.up,o.up),m.cross(o.direction,o.up,o.right),m.cross(o.right,o.direction,o.up),o._setTransform(G)}}var H_e=new D,z_e=new En,K_e=new m;function GCt(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=H_e,a.x=r.clientWidth/2,a.y=r.clientHeight/2);let c=o.getPickRay(a,z_e),d=c.origin,u=c.direction,h=o.position.z,p;h<e._minimumPickingTerrainHeight&&(p=Jg(e,a,K_e));let g;if(l(p)&&(g=m.distance(d,p)),s){let f=N_e(e,c,h);l(g)?g=Math.min(g,f):g=f}if(!l(g)){let f=m.UNIT_X;g=-m.dot(f,d)/m.dot(f,u)}X6(e,t,n,e.zoomFactor,g)}function ZCt(e){let n=e._scene.camera;if(!X.equals(X.IDENTITY,n.transform))Dl(e,e.enableRotate,e.rotateEventTypes,Lu,e.inertiaSpin,"_lastInertiaSpinMovement"),Dl(e,e.enableZoom,e.zoomEventTypes,j_e,e.inertiaZoom,"_lastInertiaZoomMovement");else{let i=e._tweens;if(e._aggregator.anyButtonDown&&i.removeAll(),Dl(e,e.enableTilt,e.tiltEventTypes,LCt,e.inertiaSpin,"_lastInertiaTiltMovement"),Dl(e,e.enableTranslate,e.translateEventTypes,CCt,e.inertiaTranslate,"_lastInertiaTranslateMovement"),Dl(e,e.enableZoom,e.zoomEventTypes,GCt,e.inertiaZoom,"_lastInertiaZoomMovement"),Dl(e,e.enableLook,e.lookEventTypes,Ru),!e._aggregator.anyButtonDown&&!i.contains(e._tween)){let o=n.createCorrectPositionTween(e.bounceAnimationTime);l(o)&&(e._tween=i.add(o))}i.update()}}var BCt=new En,wCt=new An(m.UNIT_X,0),XCt=new m,WCt=new m;function W6(e,t,n){let i=e._scene,o=i.camera,r=o.getPickRay(t.endPosition,BCt),s=m.clone(o.direction,WCt);i.mode===re.COLUMBUS_VIEW&&m.fromElements(s.z,s.x,s.y,s);let a=An.fromPointNormal(n,s,wCt),c=fi.rayPlane(r,a,XCt);l(c)&&(s=m.subtract(n,c,s),i.mode===re.COLUMBUS_VIEW&&m.fromElements(s.y,s.z,s.x,s),m.add(o.position,s,o.position))}var B_e=new m,J_e=new ge,B6=new m,w6=new ie,FCt=new m,PCt=new m,MCt=new m;function vCt(e,t,n){let o=e._scene.camera,r=e._cameraUnderground,s=e._ellipsoid;if(!X.equals(o.transform,X.IDENTITY)){Lu(e,t,n);return}let a,c,d=s.geodeticSurfaceNormal(o.position,FCt);if(D.equals(t,e._rotateMousePosition)){if(e._looking)Ru(e,t,n,d);else if(e._rotating)Lu(e,t,n);else if(e._strafing)U_e(e,n);else{if(m.magnitude(o.position)<m.magnitude(e._rotateStartPosition))return;a=m.magnitude(e._rotateStartPosition),c=B6,c.x=c.y=c.z=a,s=ie.fromCartesian3(c,w6),G6(e,t,n,s)}return}e._looking=!1,e._rotating=!1,e._strafing=!1;let u=s.cartesianToCartographic(o.positionWC,J_e).height,h=e._globe;if(l(h)&&u<e._minimumPickingTerrainHeight){let p=Jg(e,n.startPosition,MCt);if(l(p)){let g=!1,f=o.getPickRay(n.startPosition,v_e);if(r)g=!0,Q_e(e,f,p,p);else{let b=s.geodeticSurfaceNormal(p,PCt);Math.abs(m.dot(f.direction,b))<.05?g=!0:g=m.magnitude(o.position)<m.magnitude(p)}g?(D.clone(t,e._strafeEndMousePosition),m.clone(p,e._strafeStartPosition),e._strafing=!0,W6(e,n,e._strafeStartPosition)):(a=m.magnitude(p),c=B6,c.x=c.y=c.z=a,s=ie.fromCartesian3(c,w6),G6(e,t,n,s),m.clone(p,e._rotateStartPosition))}else e._looking=!0,Ru(e,t,n,d)}else l(o.pickEllipsoid(n.startPosition,e._ellipsoid,B_e))?(G6(e,t,n,e._ellipsoid),m.clone(B_e,e._rotateStartPosition)):u>e._minimumTrackBallHeight?(e._rotating=!0,Lu(e,t,n)):(e._looking=!0,Ru(e,t,n,d));D.clone(t,e._rotateMousePosition)}function Lu(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=m.magnitude(a.position),h=e._rotateFactor*(u-e._rotateRateRangeAdjustment);h>e._maximumRotateRate&&(h=e._maximumRotateRate),h<e._minimumRotateRate&&(h=e._minimumRotateRate);let p=(n.startPosition.x-n.endPosition.x)/c.clientWidth,g=(n.startPosition.y-n.endPosition.y)/c.clientHeight;p=Math.min(p,e.maximumMovementRatio),g=Math.min(g,e.maximumMovementRatio);let f=h*p*Math.PI*2,b=h*g*Math.PI;if(l(i)&&l(e.maximumTiltAngle)){let x=e.maximumTiltAngle,I=m.dot(a.direction,i),_=Math.PI-Math.acos(I)+b;_>x&&(b-=_-x)}o||a.rotateRight(f),r||a.rotateUp(b),a.constrainedAxis=d}var V6=ce.clone(ce.UNIT_W),w_e=ce.clone(ce.UNIT_W),pY=new m,pL=new m,AY=new m,X_e=new m,NCt=new D,DCt=new D,QCt=new D,UCt=new D,kCt=new En;function G6(e,t,n,i){let o=e._scene,r=o.camera,s=D.clone(n.startPosition,NCt),a=D.clone(n.endPosition,DCt),c=i.cartesianToCartographic(r.positionWC,J_e).height,d,u;if(!n.inertiaEnabled&&c<e._minimumPickingTerrainHeight&&(d=m.clone(e._panLastWorldPosition,V6),!l(e._globe)&&!D.equalsEpsilon(s,e._panLastMousePosition)&&(d=Jg(e,s,V6)),!l(e._globe)&&l(d))){let h=m.subtract(d,r.positionWC,pL),p=m.multiplyByScalar(r.directionWC,m.dot(r.directionWC,h),pL),g=m.magnitude(p),f=r.frustum.getPixelDimensions(o.drawingBufferWidth,o.drawingBufferHeight,g,o.pixelRatio,UCt),b=D.subtract(a,s,QCt),x=m.multiplyByScalar(r.rightWC,b.x*f.x,pL),I=m.normalize(r.positionWC,M_e),_=r.getPickRay(a,kCt).direction,E=m.subtract(_,m.projectVector(_,r.rightWC,AY),AY),S=m.angleBetween(E,r.directionWC),R=1;l(r.frustum.fov)&&(R=Math.max(Math.tan(S),.1));let G=Math.abs(m.dot(r.directionWC,I)),B=-b.y*f.y*2/Math.sqrt(R)*(1-G),w=m.multiplyByScalar(_,B,AY);G=Math.abs(m.dot(r.upWC,I));let F=m.multiplyByScalar(r.upWC,-b.y*(1-G)*f.y,X_e);u=m.add(d,x,w_e),u=m.add(u,w,u),u=m.add(u,F,u),m.clone(u,e._panLastWorldPosition),D.clone(a,e._panLastMousePosition)}if((!l(d)||!l(u))&&(d=r.pickEllipsoid(s,i,V6),u=r.pickEllipsoid(a,i,w_e)),!l(d)||!l(u)){e._rotating=!0,Lu(e,t,n);return}if(d=r.worldToCameraCoordinates(d,d),u=r.worldToCameraCoordinates(u,u),l(r.constrainedAxis)){let h=r.constrainedAxis,p=m.mostOrthogonalAxis(h,pY);m.cross(p,h,p),m.normalize(p,p);let g=m.cross(h,p,pL),f=m.magnitude(d),b=m.dot(h,d),x=Math.acos(b/f),I=m.multiplyByScalar(h,b,AY);m.subtract(d,I,I),m.normalize(I,I);let _=m.magnitude(u),E=m.dot(h,u),S=Math.acos(E/_),R=m.multiplyByScalar(h,E,X_e);m.subtract(u,R,R),m.normalize(R,R);let G=Math.acos(m.dot(I,p));m.dot(I,g)<0&&(G=Z.TWO_PI-G);let B=Math.acos(m.dot(R,p));m.dot(R,g)<0&&(B=Z.TWO_PI-B);let w=G-B,F;m.equalsEpsilon(h,r.position,Z.EPSILON2)?F=r.right:F=m.cross(h,r.position,pY);let P=m.cross(h,F,pY),A=m.dot(P,m.subtract(d,h,pL)),T=m.dot(P,m.subtract(u,h,pL)),L;A>0&&T>0?L=S-x:A>0&&T<=0?m.dot(r.position,h)>0?L=-x-S:L=x+S:L=x-S,r.rotateRight(w),r.rotateUp(L)}else{m.normalize(d,d),m.normalize(u,u);let h=m.dot(d,u),p=m.cross(d,u,pY);if(h<1&&!m.equalsEpsilon(p,m.ZERO,Z.EPSILON14)){let g=Math.acos(h);r.rotate(p,g)}}}var YCt=new m,OCt=new ge,W_e=0;function j_e(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=H_e,d.x=a.clientWidth/2,d.y=a.clientHeight/2);let u=s.getPickRay(d,z_e),h,p=o.cartesianToCartographic(s.position,OCt).height,g=Math.abs(W_e)<e.minimumPickingTerrainDistanceWithInertia;(i?g:p<e._minimumPickingTerrainHeight)&&(h=Jg(e,d,K_e));let b;if(l(h)&&(b=m.distance(u.origin,h),W_e=b),c){let I=N_e(e,u,p);l(b)?b=Math.min(b,I):b=I}l(b)||(b=p);let x=m.normalize(s.position,YCt);X6(e,t,n,e.zoomFactor,b,m.dot(x,s.direction))}var q_e=new D,CY=new En,ev=new m,HCt=new m,$_e=new X,zCt=new X,eEe=new X,KCt=new Pe,JCt=new $,F6=new ge,P6=new m;function jCt(e,t,n){let o=e._scene.camera;if(!X.equals(o.transform,X.IDENTITY))return;if(l(n.angleAndHeight)&&(n=n.angleAndHeight),D.equals(t,e._tiltCenterMousePosition)||(e._tiltOnEllipsoid=!1,e._looking=!1),e._looking){let a=e._ellipsoid.geodeticSurfaceNormal(o.position,P6);Ru(e,t,n,a);return}let s=e._ellipsoid.cartesianToCartographic(o.position,F6);e._tiltOnEllipsoid||s.height>e._minimumCollisionTerrainHeight?(e._tiltOnEllipsoid=!0,$Ct(e,t,n)):ext(e,t,n)}var qCt=new ge;function $Ct(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e.minimumZoomDistance*.25,a=i.cartesianToCartographic(r.positionWC,qCt).height;if(a-s-1<Z.EPSILON3&&n.endPosition.y-n.startPosition.y<0)return;let c=o.canvas,d=q_e;d.x=c.clientWidth/2,d.y=c.clientHeight/2;let u=r.getPickRay(d,CY),h,p=fi.rayEllipsoid(u,i);if(l(p))h=En.getPoint(u,p.start,ev);else if(a>e._minimumTrackBallHeight){let _=fi.grazingAltitudeLocation(u,i);if(!l(_))return;let E=i.cartesianToCartographic(_,F6);E.height=0,h=i.cartographicToCartesian(E,ev)}else{e._looking=!0;let _=e._ellipsoid.geodeticSurfaceNormal(r.position,P6);Ru(e,t,n,_),D.clone(t,e._tiltCenterMousePosition);return}let g=Dt.eastNorthUpToFixedFrame(h,i,$_e),f=e._globe,b=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let x=X.clone(r.transform,eEe);r._setTransform(g),Lu(e,t,n,m.UNIT_Z),r._setTransform(x),e._globe=f,e._ellipsoid=b;let I=b.maximumRadius;e._rotateFactor=1/I,e._rotateRateRangeAdjustment=I}function ext(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e._cameraUnderground,a,c,d;if(D.equals(t,e._tiltCenterMousePosition))a=m.clone(e._tiltCenter,ev);else{if(a=Jg(e,t,ev),!l(a)){if(c=r.getPickRay(t,CY),d=fi.rayEllipsoid(c,i),!l(d)){if(i.cartesianToCartographic(r.position,F6).height<=e._minimumTrackBallHeight){e._looking=!0;let T=e._ellipsoid.geodeticSurfaceNormal(r.position,P6);Ru(e,t,n,T),D.clone(t,e._tiltCenterMousePosition)}return}a=En.getPoint(c,d.start,ev)}s&&(l(c)||(c=r.getPickRay(t,CY)),D_e(e,c,a,a)),D.clone(t,e._tiltCenterMousePosition),m.clone(a,e._tiltCenter)}let u=o.canvas,h=q_e;h.x=u.clientWidth/2,h.y=e._tiltCenterMousePosition.y,c=r.getPickRay(h,CY);let p=m.magnitude(a),g=m.fromElements(p,p,p,B6),f=ie.fromCartesian3(g,w6);if(d=fi.rayEllipsoid(c,f),!l(d))return;let b=m.magnitude(c.origin)>p?d.start:d.stop,x=En.getPoint(c,b,HCt),I=Dt.eastNorthUpToFixedFrame(a,i,$_e),_=Dt.eastNorthUpToFixedFrame(x,f,zCt),E=e._globe,S=e._ellipsoid;e._globe=void 0,e._ellipsoid=ie.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let R=m.UNIT_Z,G=X.clone(r.transform,eEe);r._setTransform(_);let B=m.cross(x,r.positionWC,yY);if(m.dot(r.rightWC,B)<0){let A=n.startPosition.y-n.endPosition.y;(s&&A<0||!s&&A>0)&&(R=void 0);let T=r.constrainedAxis;r.constrainedAxis=void 0,Lu(e,t,n,R,!0,!1),r.constrainedAxis=T}else Lu(e,t,n,R,!0,!1);if(r._setTransform(I),Lu(e,t,n,R,!1,!0),l(r.constrainedAxis)){let A=m.cross(r.direction,r.constrainedAxis,yY);m.equalsEpsilon(A,m.ZERO,Z.EPSILON6)||(m.dot(A,r.right)<0&&m.negate(A,A),m.cross(A,r.direction,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.up,r.up),m.normalize(r.right,r.right))}r._setTransform(G),e._globe=E,e._ellipsoid=S;let F=S.maximumRadius;e._rotateFactor=1/F,e._rotateRateRangeAdjustment=F;let P=m.clone(r.positionWC,yY);if(e.enableCollisionDetection&&M6(e,!0),!m.equals(r.positionWC,P)){r._setTransform(_),r.worldToCameraCoordinatesPoint(P,P);let A=m.magnitudeSquared(P);m.magnitudeSquared(r.position)>A&&(m.normalize(r.position,r.position),m.multiplyByScalar(r.position,Math.sqrt(A),r.position));let T=m.angleBetween(P,r.position),L=m.cross(P,r.position,P);m.normalize(L,L);let V=Pe.fromAxisAngle(L,T,KCt),W=$.fromQuaternion(V,JCt);$.multiplyByVector(W,r.direction,r.direction),$.multiplyByVector(W,r.up,r.up),m.cross(r.direction,r.up,r.right),m.cross(r.right,r.direction,r.up),r._setTransform(G)}}var txt=new D,nxt=new D,F_e=new En,P_e=new En,ixt=new m,oxt=new m;function Ru(e,t,n,i){let r=e._scene.camera,s=txt;s.x=n.startPosition.x,s.y=0;let a=nxt;a.x=n.endPosition.x,a.y=0;let c=r.getPickRay(s,F_e),d=r.getPickRay(a,P_e),u=0,h,p;r.frustum instanceof gn?(h=c.origin,p=d.origin,m.add(r.direction,h,h),m.add(r.direction,p,p),m.subtract(h,r.position,h),m.subtract(p,r.position,p),m.normalize(h,h),m.normalize(p,p)):(h=c.direction,p=d.direction);let g=m.dot(h,p);g<1&&(u=Math.acos(g)),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,F_e),d=r.getPickRay(a,P_e),u=0,r.frustum instanceof gn?(h=c.origin,p=d.origin,m.add(r.direction,h,h),m.add(r.direction,p,p),m.subtract(h,r.position,h),m.subtract(p,r.position,p),m.normalize(h,h),m.normalize(p,p)):(h=c.direction,p=d.direction),g=m.dot(h,p),g<1&&(u=Math.acos(g)),u=n.startPosition.y>n.endPosition.y?-u:u,i=i??f,l(i)){let b=r.direction,x=m.negate(i,ixt),I=m.equalsEpsilon(b,i,Z.EPSILON2),_=m.equalsEpsilon(b,x,Z.EPSILON2);if(!I&&!_){g=m.dot(b,i);let E=Z.acosClamped(g);u>0&&u>E&&(u=E-Z.EPSILON4),g=m.dot(b,x),E=Z.acosClamped(g),u<0&&-u>E&&(u=-E+Z.EPSILON4);let S=m.cross(i,b,oxt);r.look(S,u)}else(I&&u<0||_&&u>0)&&r.look(r.right,-u)}else r.lookUp(u)}function rxt(e){Dl(e,e.enableRotate,e.rotateEventTypes,vCt,e.inertiaSpin,"_lastInertiaSpinMovement"),Dl(e,e.enableZoom,e.zoomEventTypes,j_e,e.inertiaZoom,"_lastInertiaZoomMovement"),Dl(e,e.enableTilt,e.tiltEventTypes,jCt,e.inertiaSpin,"_lastInertiaTiltMovement"),Dl(e,e.enableLook,e.lookEventTypes,Ru)}var sxt=new X,axt=new ge;function M6(e,t){e._adjustedHeightForTerrain=!0;let n=e._scene,i=n.mode;if(i===re.SCENE2D||i===re.MORPHING)return;let o=n.camera,r=n.ellipsoid??ie.WGS84,s=n.mapProjection,a,c;X.equals(o.transform,X.IDENTITY)||(a=X.clone(o.transform,sxt),c=m.magnitude(o.position),o._setTransform(X.IDENTITY));let d=axt;i===re.SCENE3D?r.cartesianToCartographic(o.position,d):s.unproject(o.position,d);let u=!1;if(d.height<e._minimumCollisionTerrainHeight){let h=e._scene.globeHeight;if(l(h)){let p=h+e.minimumZoomDistance,g=h-e._lastGlobeHeight,f=g/e._lastGlobeHeight;d.height<p&&(t||Math.abs(f)<=.1)&&(d.height=p,i===re.SCENE3D?r.cartographicToCartesian(d,o.position):s.project(d,o.position),u=!0),t||Math.abs(f)<=.1?e._lastGlobeHeight=h:e._lastGlobeHeight+=g*.1}}l(a)&&(o._setTransform(a),u&&(m.normalize(o.position,o.position),m.negate(o.position,o.direction),m.multiplyByScalar(o.position,Math.max(c,e.minimumZoomDistance),o.position),m.normalize(o.direction,o.direction),m.cross(o.direction,o.up,o.right),m.cross(o.right,o.direction,o.up)))}tv.prototype.onMap=function(){let e=this._scene,t=e.mode,n=e.camera;return t===re.COLUMBUS_VIEW?Math.abs(n.position.x)-this._maxCoord.x<0&&Math.abs(n.position.y)-this._maxCoord.y<0:!0};var cxt=new m,lxt=new m;tv.prototype.update=function(){let e=this._scene,{camera:t,globe:n,mode:i}=e;X.equals(t.transform,X.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=Mr.getHeight(this.minimumCollisionTerrainHeight,o,r),this._minimumPickingTerrainHeight=Mr.getHeight(this.minimumPickingTerrainHeight,o,r),this._minimumTrackBallHeight=Mr.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=m.clone(t.positionWC,cxt),c=m.clone(t.directionWC,lxt);if(i===re.SCENE2D?aCt(this):i===re.COLUMBUS_VIEW?(this._horizontalRotationAxis=m.UNIT_Z,ZCt(this)):i===re.SCENE3D&&(this._horizontalRotationAxis=void 0,rxt(this)),this.enableCollisionDetection&&!this._adjustedHeightForTerrain){let d=!m.equals(a,t.positionWC)||!m.equals(c,t.directionWC);M6(this,d)}this._aggregator.reset()};tv.prototype.isDestroyed=function(){return!1};tv.prototype.destroy=function(){return this._tweens.removeAll(),this._aggregator=this._aggregator&&this._aggregator.destroy(),me(this)};var nv=tv;var zOi=y(C(),1);var LOi=y(C(),1),iv=`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 VOi=y(C(),1),ov=`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 jg(){this._sceneFramebuffer=new wI;let e=.125,t=new Array(6);t[0]=new Lo({fragmentShader:Ed,textureScale:e,forcePowerOfTwo:!0,sampleMode:_u.LINEAR});let n=t[1]=new Lo({fragmentShader:ov,uniforms:{avgLuminance:.5,threshold:.25,offset:.1},textureScale:e,forcePowerOfTwo:!0}),i=this;this._delta=1,this._sigma=2,this._blurStep=new D,t[2]=new Lo({fragmentShader:fy,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 Lo({fragmentShader:fy,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 Lo({fragmentShader:Ed,sampleMode:_u.LINEAR}),this._uCenter=new D,this._uRadius=void 0,t[5]=new Lo({fragmentShader:iv,uniforms:{center:function(){return i._uCenter},radius:function(){return i._uRadius},colorTexture2:function(){return i._sceneFramebuffer.framebuffer.getColorTexture(0)}}}),this._stages=new Td({stages:t});let o=new NI(this),r=t.length;for(let s=0;s<r;++s)t[s]._textureCache=o;this._textureCache=o,this.length=t.length}jg.prototype.get=function(e){return this._stages.get(e)};jg.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 dxt=new ce,tEe=new D,uxt=new D,nEe=new X;function mxt(e,t,n){let i=t.uniformState,o=i.sunPositionWC,r=i.view,s=i.viewProjection,a=i.projection,c=X.computeViewportTransformation(n,0,1,nEe),d=X.multiplyByPoint(r,o,dxt),u=Dt.pointToGLWindowCoordinates(s,c,o,tEe);d.x+=Z.SOLAR_RADIUS;let h=Dt.pointToGLWindowCoordinates(a,c,d,d),p=D.magnitude(D.subtract(h,u,h))*30*2,g=uxt;g.x=p,g.y=p,e._uCenter=D.clone(u,e._uCenter),e._uRadius=Math.max(g.x,g.y)*.15;let f=t.drawingBufferWidth,b=t.drawingBufferHeight,x=e._stages,I=x.get(0),_=I.outputTexture.width,E=I.outputTexture.height,S=new Ke;S.width=_,S.height=E,c=X.computeViewportTransformation(S,0,1,nEe),u=Dt.pointToGLWindowCoordinates(s,c,o,tEe),g.x*=_/f,g.y*=E/b;let R=I.scissorRectangle;R.x=Math.max(u.x-g.x*.5,0),R.y=Math.max(u.y-g.y*.5,0),R.width=Math.min(g.x,f),R.height=Math.min(g.y,b);for(let G=1;G<4;++G)Ke.clone(R,x.get(G).scissorRectangle)}jg.prototype.clear=function(e,t,n){this._sceneFramebuffer.clear(e,t,n),this._textureCache.clear(e)};jg.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),mxt(this,t,n),o};jg.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)};jg.prototype.copy=function(e,t){if(!l(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(Ed,{uniformMap:{colorTexture:function(){return n._stages.get(n._stages.length-1).outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};jg.prototype.isDestroyed=function(){return!1};jg.prototype.destroy=function(){return this._textureCache.destroy(),this._stages.destroy(),me(this)};var rv=jg;var tHi=y(C(),1);function iEe(){this._cachedShowFrustumsShaders={}}function hxt(e){let t={},n=e.vertexAttributes;for(let i in n)n.hasOwnProperty(i)&&(t[i]=n[i].index);return t}function fxt(e,t){let n=e.context,i=t,o=i.fragmentShaderSource.clone(),r=[];o.sources=o.sources.map(function(u){u=Oe.replaceMain(u,"czm_Debug_main");let h=/out_FragData_(\d+)/g,p;for(;(p=h.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=hxt(i);return ln.fromCache({context:n,vertexShaderSource:i.vertexShaderSource,fragmentShaderSource:o,attributeLocations:d})}var sv=new U;function pxt(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?(sv.red=t.debugOverlappingFrustums&1?1:0,sv.green=t.debugOverlappingFrustums&2?1:0,sv.blue=t.debugOverlappingFrustums&4?1:0,sv.alpha=1,sv):U.WHITE}),n}var Axt=new ot;iEe.prototype.executeDebugShowFrustumsCommand=function(e,t,n){let i=t.shaderProgram.id,o=this._cachedShowFrustumsShaders[i];l(o)||(o=fxt(e,t.shaderProgram),this._cachedShowFrustumsShaders[i]=o);let r=ot.shallowClone(t,Axt);r.shaderProgram=o,r.uniformMap=pxt(e,t),r.execute(e.context,n)};var av=iEe;var aHi=y(C(),1);function OI(e,t,n){this._primitive=e,this._tileIndex=t,this._sampleIndex=n,this._metadata={},this._orientedBoundingBox=new vn}OI.fromKeyframeNode=function(e,t,n,i){let o=new OI(e,t,n),{spatialNode:r,content:s}=i;return o._metadata=gxt(e,s,n),o._orientedBoundingBox=yxt(e,r,n,o._orientedBoundingBox),o};function gxt(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=bt.getComponentCount(o[a]),u=r[a].slice(n*d,(n+1)*d);s[c]=u}return s}var oEe=new m,bxt=new m;function yxt(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=m.fromElements(d,c,s,oEe),h=m.divideComponents(m.subtract(u,e._paddingBefore,oEe),e.dimensions,bxt);return e._shape.computeOrientedBoundingBoxForSample(t,e.dimensions,h,i)}Object.defineProperties(OI.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()}}});OI.prototype.hasProperty=function(e){return l(this._metadata[e])};OI.prototype.getNames=function(){return Object.keys(this._metadata)};OI.prototype.getProperty=function(e){return this._metadata[e]};var cv=OI;var C4i=y(C(),1);var Vzi=y(C(),1);var uzi=y(C(),1);var lHi=y(C(),1),lv=`struct Ray { vec3 pos; vec3 dir; vec3 rawDir; }; #if defined(JITTER) /** * Generate a pseudo-random value for a given 2D screen coordinate. * Similar to https://www.shadertoy.com/view/4djSRW with a modified hashscale. */ float hash(vec2 p) { vec3 p3 = fract(vec3(p.xyx) * 50.0); p3 += dot(p3, p3.yzx + 19.19); return fract((p3.x + p3.y) * p3.z); } #endif 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); } struct PointJacobianT { vec3 point; mat3 jacobianT; }; `;var uHi=y(C(),1),dv=`// See Intersection.glsl for the definition of intersectScene // See IntersectionUtils.glsl for the definition of nextIntersection // See convertUvToBox.glsl, convertUvToCylinder.glsl, or convertUvToEllipsoid.glsl // for the definition of convertUvToShapeUvSpace. The appropriate function is // 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_transformPositionUvToView; uniform mat3 u_transformDirectionViewToLocal; uniform vec3 u_cameraPositionUv; uniform vec3 u_cameraDirectionUv; 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) { // The Jacobian is computed in a space where the shape spans [-1, 1]. // But the ray is marched in a space where the shape fills [0, 1]. // So we need to scale the Jacobian by 2. vec3 gradient = 2.0 * viewRay.rawDir * jacobianT; vec3 sampleSizeAlongRay = getSampleSize(sampleData.tileCoords.w) / gradient; RayShapeIntersection voxelIntersection = getVoxelIntersection(sampleData.tileUv, sampleSizeAlongRay); // Transform normal from shape space to Cartesian space vec3 voxelNormal = normalize(jacobianT * voxelIntersection.entry.xyz); // 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 UV coordinates of the shape. */ Ray getViewRayUv() { vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord); vec3 viewDirUv; vec3 viewPosUv; if (czm_orthographicIn3D == 1.0) { eyeCoordinates.z = 0.0; viewPosUv = (u_transformPositionViewToUv * eyeCoordinates).xyz; viewDirUv = normalize(u_cameraDirectionUv); } else { viewPosUv = u_cameraPositionUv; viewDirUv = normalize(u_transformDirectionViewToLocal * eyeCoordinates.xyz); } #if defined(SHAPE_ELLIPSOID) // viewDirUv has been scaled to a space where the ellipsoid is a sphere. // Undo this scaling to get the raw direction. vec3 rawDir = viewDirUv * u_ellipsoidRadiiUv; return Ray(viewPosUv, viewDirUv, rawDir); #else return Ray(viewPosUv, viewDirUv, viewDirUv); #endif } void main() { Ray viewRayUv = getViewRayUv(); Intersections ix; vec2 screenCoord = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1] RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayUv, 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 positionUv = viewRayUv.pos + currentT * viewRayUv.dir; PointJacobianT pointJacobian = convertUvToShapeUvSpaceDerivative(positionUv); // Traverse the tree from the start position TraversalData traversalData; SampleData sampleDatas[SAMPLE_COUNT]; traverseOctreeFromBeginning(pointJacobian.point, traversalData, sampleDatas); vec4 step = getStepSize(sampleDatas[0], viewRayUv, shapeIntersection, pointJacobian.jacobianT, currentT); #if defined(JITTER) float noise = hash(screenCoord); // [0,1] currentT += noise * step.w; positionUv += noise * step.w * viewRayUv.dir; #endif 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 = vec3(u_transformPositionUvToView * vec4(positionUv, 1.0)); fragmentInput.attributes.normalEC = normalize(czm_normal * step.xyz); fragmentInput.voxel.viewDirUv = viewRayUv.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.00001; } // 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 } positionUv = viewRayUv.pos + currentT * viewRayUv.dir; // 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. pointJacobian = convertUvToShapeUvSpaceDerivative(positionUv); traverseOctreeFromExisting(pointJacobian.point, traversalData, sampleDatas); step = getStepSize(sampleDatas[0], viewRayUv, shapeIntersection, pointJacobian.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 hHi=y(C(),1),uv=`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 pHi=y(C(),1),mv=`/* 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 = intMod(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 gHi=y(C(),1),hv=`// 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 ### */ uniform mat4 u_transformPositionViewToUv; 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; vec3 depthPositionUv = vec3(u_transformPositionViewToUv * eyeCoordinateDepth); entry = dot(depthPositionUv - 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 yHi=y(C(),1),fv=`// 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); } 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, u_clippingPlanesMatrix); 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, u_clippingPlanesMatrix); 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, u_clippingPlanesMatrix); 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 } `;var xHi=y(C(),1),AL=`// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, INF_HIT, // RayShapeIntersection 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] = intersectHalfSpace(ray, minMaxAngle.x, false); intersections[1] = 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); if (hitPositiveHalfPlane(ray, intersection, true)) { intersections[0].entry = -1.0 * farSide; intersections[0].exit = vec4(-1.0 * intersection.xy, 0.0, intersection.w); intersections[1].entry = intersection; intersections[1].exit = farSide; } else { vec4 miss = vec4(normalize(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 RayShapeIntersection(first, last); } else if (!exitFromInside && enterFromOutside) { // Ray starts inside wedge. last is in shadow wedge, and first is actually the entry return RayShapeIntersection(-1.0 * farSide, first); } else if (exitFromInside && !enterFromOutside) { // First intersection was in the shadow wedge, so last is actually the exit return RayShapeIntersection(last, farSide); } else { // !exitFromInside && !enterFromOutside // Both intersections were in the shadow wedge return RayShapeIntersection(miss, miss); } } `;var _Hi=y(C(),1),pv=`// 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 vec3 u_renderMinBounds; uniform vec3 u_renderMaxBounds; RayShapeIntersection intersectBox(in Ray ray, in vec3 minBound, in vec3 maxBound) { // Consider the box as the intersection of the space between 3 pairs of parallel planes // Compute the distance along the ray to each plane vec3 t0 = (minBound - ray.pos) / ray.dir; vec3 t1 = (maxBound - ray.pos) / ray.dir; // Identify candidate entries/exits based on distance from ray.pos vec3 entries = min(t0, t1); vec3 exits = max(t0, t1); vec3 directions = sign(ray.dir); // The actual intersection points are the furthest entry and the closest exit float lastEntry = maxComponent(entries); bvec3 isLastEntry = equal(entries, vec3(lastEntry)); vec3 entryNormal = -1.0 * vec3(isLastEntry) * directions; vec4 entry = vec4(entryNormal, lastEntry); float firstExit = minComponent(exits); bvec3 isFirstExit = equal(exits, vec3(firstExit)); vec3 exitNormal = vec3(isLastEntry) * directions; vec4 exit = vec4(exitNormal, firstExit); if (entry.w > exit.w) { entry.w = NO_HIT; exit.w = NO_HIT; } return RayShapeIntersection(entry, exit); } void intersectShape(in Ray ray, inout Intersections ix) { RayShapeIntersection intersection = intersectBox(ray, u_renderMinBounds, u_renderMaxBounds); setShapeIntersection(ix, BOX_INTERSECTION_INDEX, intersection); } `;var THi=y(C(),1),Av=`// 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; uniform vec2 u_cylinderRenderHeightMinMax; #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE) uniform vec2 u_cylinderRenderAngleMinMax; #endif /** * Find the intersection of a ray with the volume defined by two planes of constant z */ RayShapeIntersection intersectHeightBounds(in Ray ray, in vec2 minMaxHeight, in bool convex) { float zPosition = ray.pos.z; float zDirection = ray.dir.z; float tmin = (minMaxHeight.x - zPosition) / zDirection; float tmax = (minMaxHeight.y - zPosition) / zDirection; // Normals point outside the volume float signFlip = convex ? 1.0 : -1.0; vec4 intersectMin = vec4(0.0, 0.0, -1.0 * signFlip, tmin); vec4 intersectMax = vec4(0.0, 0.0, 1.0 * signFlip, tmax); bool topEntry = zDirection < 0.0; vec4 entry = topEntry ? intersectMax : intersectMin; vec4 exit = topEntry ? intersectMin : intersectMax; return RayShapeIntersection(entry, exit); } /** * 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; vec4 intersect1 = vec4(normalize(position + t1 * direction) * signFlip, 0.0, t1); vec4 intersect2 = vec4(normalize(position + t2 * direction) * signFlip, 0.0, 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 float radius, in vec2 minMaxHeight) { RayShapeIntersection cylinderIntersection = intersectCylinder(ray, radius, true); RayShapeIntersection heightBoundsIntersection = intersectHeightBounds(ray, minMaxHeight, true); return intersectIntersections(ray, cylinderIntersection, heightBoundsIntersection); } void intersectShape(Ray ray, inout Intersections ix) { // Position is converted from [0,1] to [-1,+1] because shape intersections assume unit space is [-1,+1]. // Direction is scaled as well to be in sync with position. ray.pos = ray.pos * 2.0 - 1.0; ray.dir *= 2.0; RayShapeIntersection outerIntersect = intersectBoundedCylinder(ray, u_cylinderRenderRadiusMinMax.y, u_cylinderRenderHeightMinMax); 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 LHi=y(C(),1),gv=`// 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; 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 relativeHeight, 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 = u_ellipsoidRadiiUv / (u_ellipsoidRadiiUv + relativeHeight); 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 * normalize(position + tmin * direction); vec3 d2 = directionScale * normalize(position + tmax * direction); return RayShapeIntersection(vec4(d1, tmin), vec4(d2, 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 = 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]) { // Undo the scaling from ellipsoid to sphere ray.pos = ray.pos * u_ellipsoidRadiiUv; ray.dir = ray.dir * u_ellipsoidRadiiUv; // 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) { // Undo the scaling from ellipsoid to sphere ray.pos = ray.pos * u_ellipsoidRadiiUv; ray.dir = ray.dir * u_ellipsoidRadiiUv; // 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, inout Intersections ix) { // Position is converted from [0,1] to [-1,+1] because shape intersections assume unit space is [-1,+1]. // Direction is scaled as well to be in sync with position. ray.pos = ray.pos * 2.0 - 1.0; ray.dir *= 2.0; // 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 VHi=y(C(),1),HI=`// 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, out Intersections ix) { // Do a ray-shape intersection to find the exact starting and ending points. intersectShape(ray, 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, ray, 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 ZHi=y(C(),1),bv=`/* Box defines (set in Scene/VoxelBoxShape.js) #define BOX_HAS_SHAPE_BOUNDS */ #if defined(BOX_HAS_SHAPE_BOUNDS) uniform vec3 u_boxUvToShapeUvScale; uniform vec3 u_boxUvToShapeUvTranslate; #endif PointJacobianT convertUvToShapeSpaceDerivative(in vec3 positionUv) { // For BOX, UV space = shape space, so we can use positionUv as-is, // and the Jacobian is the identity matrix, except that a step of 1 // only spans half the shape space [-1, 1], so the identity is scaled. return PointJacobianT(positionUv, mat3(0.5)); } vec3 convertShapeToShapeUvSpace(in vec3 positionShape) { #if defined(BOX_HAS_SHAPE_BOUNDS) return positionShape * u_boxUvToShapeUvScale + u_boxUvToShapeUvTranslate; #else return positionShape; #endif } PointJacobianT convertUvToShapeUvSpaceDerivative(in vec3 positionUv) { PointJacobianT pointJacobian = convertUvToShapeSpaceDerivative(positionUv); pointJacobian.point = convertShapeToShapeUvSpace(pointJacobian.point); return pointJacobian; } vec3 convertShapeUvToUvSpace(in vec3 shapeUv) { #if defined(BOX_HAS_SHAPE_BOUNDS) return (shapeUv - u_boxUvToShapeUvTranslate) / u_boxUvToShapeUvScale; #else return shapeUv; #endif } vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) { #if defined(BOX_HAS_SHAPE_BOUNDS) return shapeUv / u_boxUvToShapeUvScale; #else return shapeUv; #endif }`;var wHi=y(C(),1),yv=`/* Cylinder defines (set in Scene/VoxelCylinderShape.js) #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED */ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS) uniform vec2 u_cylinderUvToShapeUvRadius; // x = scale, y = offset #endif #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT) uniform vec2 u_cylinderUvToShapeUvHeight; // x = scale, y = offset #endif #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE) uniform vec2 u_cylinderUvToShapeUvAngle; // x = scale, y = offset #endif #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY) uniform vec2 u_cylinderShapeUvAngleMinMax; #endif #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED) uniform float u_cylinderShapeUvAngleRangeZeroMid; #endif PointJacobianT convertUvToShapeSpaceDerivative(in vec3 positionUv) { // Convert from Cartesian UV space [0, 1] to Cartesian local space [-1, 1] vec3 position = positionUv * 2.0 - 1.0; float radius = length(position.xy); // [0, 1] vec3 radial = normalize(vec3(position.xy, 0.0)); // Shape space height is defined within [0, 1] float height = positionUv.z; // [0, 1] vec3 z = vec3(0.0, 0.0, 1.0); float angle = atan(position.y, position.x); vec3 east = normalize(vec3(-position.y, position.x, 0.0)); vec3 point = vec3(radius, angle, height); mat3 jacobianT = mat3(radial, east / length(position.xy), z); return PointJacobianT(point, jacobianT); } vec3 convertShapeToShapeUvSpace(in vec3 positionShape) { float radius = positionShape.x; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS) radius = radius * u_cylinderUvToShapeUvRadius.x + u_cylinderUvToShapeUvRadius.y; #endif float angle = (positionShape.y + czm_pi) / czm_twoPi; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE) #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED) // Comparing against u_cylinderShapeUvAngleMinMax has precision problems. u_cylinderShapeUvAngleRangeZeroMid is more conservative. angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid); #endif // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle; #elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY) angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle; #endif angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y; #endif float height = positionShape.z; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT) height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y; #endif return vec3(radius, angle, height); } PointJacobianT convertUvToShapeUvSpaceDerivative(in vec3 positionUv) { PointJacobianT pointJacobian = convertUvToShapeSpaceDerivative(positionUv); pointJacobian.point = convertShapeToShapeUvSpace(pointJacobian.point); return pointJacobian; } vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) { float radius = shapeUv.x; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS) radius /= u_cylinderUvToShapeUvRadius.x; #endif float angle = shapeUv.y * czm_twoPi; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE) angle /= u_cylinderUvToShapeUvAngle.x; #endif float height = shapeUv.z; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT) height /= u_cylinderUvToShapeUvHeight.x; #endif return vec3(radius, angle, height); } `;var WHi=y(C(),1),Cv=`/* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js) #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED #define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE */ uniform vec3 u_ellipsoidRadiiUv; // [0,1] uniform vec2 u_evoluteScale; // (radiiUv.x ^ 2 - radiiUv.z ^ 2) * vec2(1.0, -1.0) / radiiUv; uniform vec3 u_ellipsoidInverseRadiiSquaredUv; #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY) || defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY) || defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED) uniform vec3 u_ellipsoidShapeUvLongitudeMinMaxMid; #endif #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE) uniform vec2 u_ellipsoidUvToShapeUvLongitude; // x = scale, y = offset #endif #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE) uniform vec2 u_ellipsoidUvToShapeUvLatitude; // x = scale, y = offset #endif uniform float u_ellipsoidInverseHeightDifferenceUv; // 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)); } PointJacobianT convertUvToShapeSpaceDerivative(in vec3 positionUv) { // Convert from UV space [0, 1] to local space [-1, 1] vec3 position = positionUv * 2.0 - 1.0; // Undo the scaling from ellipsoid to sphere position = position * u_ellipsoidRadiiUv; float longitude = atan(position.y, position.x); 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_ellipsoidRadiiUv.xz); vec2 surfacePoint = surfacePointAndRadius.xy; vec2 normal2d = normalize(surfacePoint * u_ellipsoidInverseRadiiSquaredUv.xz); float latitude = atan(normal2d.y, normal2d.x); 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)); vec3 point = vec3(longitude, latitude, height); mat3 jacobianT = mat3(east / distanceFromZAxis, north / (surfacePointAndRadius.z + height), up); return PointJacobianT(point, jacobianT); } vec3 convertShapeToShapeUvSpace(in vec3 positionShape) { // Longitude: shift & scale to [0, 1] float longitude = (positionShape.x + czm_pi) / czm_twoPi; // Correct the angle when max < min // Technically this should compare against min longitude - but it has precision problems so compare against the middle of empty space. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED) longitude += float(longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z); #endif // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY) longitude = longitude > u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.x : longitude; #endif #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY) longitude = longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.y : longitude; #endif #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE) longitude = longitude * u_ellipsoidUvToShapeUvLongitude.x + u_ellipsoidUvToShapeUvLongitude.y; #endif // Latitude: shift and scale to [0, 1] float latitude = (positionShape.y + czm_piOverTwo) / czm_pi; #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE) latitude = latitude * u_ellipsoidUvToShapeUvLatitude.x + u_ellipsoidUvToShapeUvLatitude.y; #endif // Height: scale to the range [0, 1] float height = 1.0 + positionShape.z * u_ellipsoidInverseHeightDifferenceUv; return vec3(longitude, latitude, height); } PointJacobianT convertUvToShapeUvSpaceDerivative(in vec3 positionUv) { PointJacobianT pointJacobian = convertUvToShapeSpaceDerivative(positionUv); pointJacobian.point = convertShapeToShapeUvSpace(pointJacobian.point); return pointJacobian; } 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_ellipsoidUvToShapeUvLongitude.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_ellipsoidUvToShapeUvLatitude.x; #endif float height = shapeUv.z / u_ellipsoidInverseHeightDifferenceUv; return vec3(longitude, latitude, height); } `;var PHi=y(C(),1),xv=`// 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 SampleData { int megatextureIndex; ivec4 tileCoords; vec3 tileUv; vec3 inputCoordinate; #if (SAMPLE_COUNT > 1) float weight; #endif }; // Integer mod: For WebGL1 only int intMod(in int a, in int b) { return a - (b * (a / b)); } 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 = intMod(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 = intMod(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; } /** * Convert a position in the uv-space of the tileset bounding shape * into the uv-space of a tile within the tileset */ vec3 getTileUv(in vec3 shapePosition, in ivec4 octreeCoords) { // PERFORMANCE_IDEA: use bit-shifting (only in WebGL2) float dimAtLevel = exp2(float(octreeCoords.w)); return shapePosition * dimAtLevel - vec3(octreeCoords.xyz); } vec3 getClampedTileUv(in vec3 shapePosition, in ivec4 octreeCoords) { vec3 tileUv = getTileUv(shapePosition, octreeCoords); return clamp(tileUv, vec3(0.0), vec3(1.0)); } void addSampleCoordinates(in vec3 shapePosition, inout SampleData sampleData) { vec3 tileUv = getClampedTileUv(shapePosition, 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 = float(u_inputDimensions.y) - inputCoordinate.z; inputCoordinate.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(intMod(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 vec3 shapePosition, inout TraversalData traversalData) { float sizeAtLevel = exp2(-1.0 * float(traversalData.octreeCoords.w)); vec3 start = vec3(traversalData.octreeCoords.xyz) * sizeAtLevel; vec3 end = start + vec3(sizeAtLevel); OctreeNodeData childData; for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) { // Find out which octree child contains the position // 0 if before center, 1 if after vec3 center = 0.5 * (start + end); vec3 childCoord = step(center, shapePosition); // Get octree coords for the next level down ivec4 octreeCoords = traversalData.octreeCoords; traversalData.octreeCoords = ivec4(octreeCoords.xyz * 2 + ivec3(childCoord), octreeCoords.w + 1); childData = getOctreeChildData(traversalData.parentOctreeIndex, ivec3(childCoord)); if (childData.flag != OCTREE_FLAG_INTERNAL) { // leaf tile - stop traversing break; } // interior tile - keep going deeper start = mix(start, center, childCoord); end = mix(center, end, childCoord); 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 vec3 shapePosition, 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(shapePosition, traversalData); } #if (SAMPLE_COUNT == 1) getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]); addSampleCoordinates(shapePosition, sampleDatas[0]); #else getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas); addSampleCoordinates(shapePosition, sampleDatas[0]); addSampleCoordinates(shapePosition, sampleDatas[1]); #endif } bool inRange(in vec3 v, in vec3 minVal, in vec3 maxVal) { return clamp(v, minVal, maxVal) == v; } bool insideTile(in vec3 shapePosition, in ivec4 octreeCoords) { vec3 tileUv = getTileUv(shapePosition, octreeCoords); bool inside = inRange(tileUv, vec3(0.0), vec3(1.0)); // Assume (!) the position is always inside the root tile. return inside || octreeCoords.w == 0; } void traverseOctreeFromExisting(in vec3 shapePosition, inout TraversalData traversalData, inout SampleData sampleDatas[SAMPLE_COUNT]) { if (insideTile(shapePosition, traversalData.octreeCoords)) { for (int i = 0; i < SAMPLE_COUNT; i++) { addSampleCoordinates(shapePosition, sampleDatas[i]); } return; } // Go up tree until we find a parent tile containing shapePosition for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) { traversalData.octreeCoords.xyz /= 2; traversalData.octreeCoords.w -= 1; if (insideTile(shapePosition, traversalData.octreeCoords)) { break; } traversalData.parentOctreeIndex = getOctreeParentIndex(traversalData.parentOctreeIndex); } // Go down tree OctreeNodeData nodeData = traverseOctreeDownwards(shapePosition, traversalData); #if (SAMPLE_COUNT == 1) getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]); addSampleCoordinates(shapePosition, sampleDatas[0]); #else getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas); addSampleCoordinates(shapePosition, sampleDatas[0]); addSampleCoordinates(shapePosition, sampleDatas[1]); #endif } `;var vHi=y(C(),1),Iv=`// See Octree.glsl for the definitions of SampleData and intMod /* Megatexture defines (set in Scene/VoxelRenderResources.js) #define SAMPLE_COUNT ### #define NEAREST_SAMPLING #define PADDING */ uniform ivec2 u_megatextureSliceDimensions; // number of slices per tile, in two dimensions uniform ivec2 u_megatextureTileDimensions; // number of tiles per megatexture, in two dimensions uniform vec2 u_megatextureVoxelSizeUv; uniform vec2 u_megatextureSliceSizeUv; uniform vec2 u_megatextureTileSizeUv; // Integer min, max, clamp: For WebGL1 only int intMin(int a, int b) { return a <= b ? a : b; } int intMax(int a, int b) { return a >= b ? a : b; } int intClamp(int v, int minVal, int maxVal) { return intMin(intMax(v, minVal), maxVal); } vec2 index1DTo2DTexcoord(int index, ivec2 dimensions, vec2 uvScale) { int indexX = intMod(index, dimensions.x); int indexY = index / dimensions.x; return vec2(indexX, indexY) * uvScale; } /* How is 3D data stored in a 2D megatexture? In this example there is only one loaded tile and it has 2x2x2 voxels (8 voxels total). The data is sliced by Z. The data at Z = 0 is placed in texels (0,0), (0,1), (1,0), (1,1) and the data at Z = 1 is placed in texels (2,0), (2,1), (3,0), (3,1). Note that there could be empty space in the megatexture because it's a power of two. 0 1 2 3 +---+---+---+---+ | | | | | 3 +---+---+---+---+ | | | | | 2 +-------+-------+ |010|110|011|111| 1 |--- ---|--- ---| |000|100|001|101| 0 +-------+-------+ When doing linear interpolation the megatexture needs to be sampled twice: once for the Z slice above the voxel coordinate and once for the slice below. The two slices are interpolated with fract(coord.z - 0.5). For example, a Z coordinate of 1.0 is halfway between two Z slices so the interpolation factor is 0.5. Below is a side view of the 3D voxel grid with voxel coordinates on the left side. 2 +---+ |001| 1 +-z-+ |000| 0 +---+ When doing nearest neighbor the megatexture only needs to be sampled once at the closest Z slice. */ Properties getPropertiesFromMegatexture(in SampleData sampleData) { int tileIndex = sampleData.megatextureIndex; vec3 voxelCoord = sampleData.inputCoordinate; #if defined(NEAREST_SAMPLING) // Round to the center of the nearest voxel voxelCoord = floor(voxelCoord) + vec3(0.5); #endif // Tile location vec2 tileUvOffset = index1DTo2DTexcoord(tileIndex, u_megatextureTileDimensions, u_megatextureTileSizeUv); // Slice location float slice = voxelCoord.z - 0.5; int sliceIndex = int(floor(slice)); int sliceIndex0 = intClamp(sliceIndex, 0, u_inputDimensions.z - 1); vec2 sliceUvOffset0 = index1DTo2DTexcoord(sliceIndex0, u_megatextureSliceDimensions, u_megatextureSliceSizeUv); // Voxel location vec2 voxelUvOffset = clamp(voxelCoord.xy, vec2(0.5), vec2(u_inputDimensions.xy) - vec2(0.5)) * u_megatextureVoxelSizeUv; // Final location in the megatexture vec2 uv0 = tileUvOffset + sliceUvOffset0 + voxelUvOffset; #if defined(NEAREST_SAMPLING) return getPropertiesFromMegatextureAtUv(uv0); #else float sliceLerp = fract(slice); int sliceIndex1 = intMin(sliceIndex + 1, u_inputDimensions.z - 1); vec2 sliceUvOffset1 = index1DTo2DTexcoord(sliceIndex1, u_megatextureSliceDimensions, u_megatextureSliceSizeUv); vec2 uv1 = tileUvOffset + sliceUvOffset1 + voxelUvOffset; Properties properties0 = getPropertiesFromMegatextureAtUv(uv0); Properties properties1 = getPropertiesFromMegatextureAtUv(uv1); return mixProperties(properties0, properties1, sliceLerp); #endif } // 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 DHi=y(C(),1),Cxt={Z_UP:0,Y_UP:1},Um=Object.freeze(Cxt);function xxt(e){let t=new OA;this.shaderBuilder=t;let n=e._customShader,i=Lt(e._uniformMap,n.uniformMap);e._uniformMap=i;let o=n.uniforms;for(let p in o)if(o.hasOwnProperty(p)){let g=o[p];t.addUniform(g.type,p,be.FRAGMENT)}t.addUniform("sampler2D","u_megatextureTextures[METADATA_COUNT]",be.FRAGMENT),this.uniformMap=i;let r=e._clippingPlanes,s=l(r)&&r.enabled?r.length:0;this.clippingPlanes=r,this.clippingPlanesLength=s,t.addVertexLines([uv]),e.provider.metadataOrder===Um.Y_UP&&t.addDefine("Y_UP_METADATA_ORDER",void 0,be.FRAGMENT);let a=e._provider.shape;a==="BOX"?t.addDefine("SHAPE_BOX",void 0,be.FRAGMENT):a==="CYLINDER"?t.addDefine("SHAPE_CYLINDER",void 0,be.FRAGMENT):a==="ELLIPSOID"&&t.addDefine("SHAPE_ELLIPSOID",void 0,be.FRAGMENT),t.addFragmentLines([n.fragmentShaderText,"#line 0",xv,lv,mv,Iv]),s>0&&(t.addDefine("CLIPPING_PLANES",void 0,be.FRAGMENT),t.addDefine("CLIPPING_PLANES_COUNT",s,be.FRAGMENT),r.unionClippingRegions&&t.addDefine("CLIPPING_PLANES_UNION",void 0,be.FRAGMENT),t.addFragmentLines([fv])),t.addFragmentLines([hv]),e._depthTest&&t.addDefine("DEPTH_TEST",void 0,be.FRAGMENT),a==="BOX"?t.addFragmentLines([bv,pv,HI]):a==="CYLINDER"?t.addFragmentLines([yv,AL,Av,HI]):a==="ELLIPSOID"&&t.addFragmentLines([Cv,AL,gv,HI]),t.addFragmentLines([dv]);let c=e._shape,d=c.shaderDefines;for(let p in d)if(d.hasOwnProperty(p)){let g=d[p];l(g)&&(g=g===!0?void 0:g,t.addDefine(p,g,be.FRAGMENT))}let u=c.shaderMaximumIntersectionsLength;s>0&&(t.addDefine("CLIPPING_PLANES_INTERSECTION_INDEX",u,be.FRAGMENT),s===1?u+=1:r.unionClippingRegions?u+=2:u+=1),e._depthTest&&(t.addDefine("DEPTH_INTERSECTION_INDEX",u,be.FRAGMENT),u+=1),t.addDefine("INTERSECTION_COUNT",u,be.FRAGMENT),(!m.equals(e.paddingBefore,m.ZERO)||!m.equals(e.paddingAfter,m.ZERO))&&t.addDefine("PADDING",void 0,be.FRAGMENT),e._useLogDepth&&t.addDefine("LOG_DEPTH_READ_ONLY",void 0,be.FRAGMENT),e._nearestSampling&&t.addDefine("NEAREST_SAMPLING",void 0,be.FRAGMENT);let h=e._traversal;t.addDefine("SAMPLE_COUNT",`${h._sampleCount}`,be.FRAGMENT)}var _v=xxt;var Azi=y(C(),1);function Ixt(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,be.FRAGMENT),d&&n.addDefine("STATISTICS",void 0,be.FRAGMENT);for(let A=0;A<c;A++){let T=i[A],L=IY(o[A]),V=`PropertyStatistics_${T}`,W=`PropertyStatistics_${T}`;n.addStruct(V,W,be.FRAGMENT),n.addStructField(V,L,"min"),n.addStructField(V,L,"max")}let u="MetadataStatistics",h="MetadataStatistics",p="metadataStatistics";n.addStruct(u,h,be.FRAGMENT);for(let A=0;A<c;A++){let T=i[A],L=`PropertyStatistics_${T}`,V=T;n.addStructField(u,L,V)}let g="Metadata",f="Metadata",b="metadata";n.addStruct(g,f,be.FRAGMENT);for(let A=0;A<c;A++){let T=IY(o[A]);n.addStructField(g,T,i[A])}let x="Attributes",I="Attributes",_="attributes";n.addStruct(x,I,be.FRAGMENT),n.addStructField(x,"vec3","positionEC"),n.addStructField(x,"vec3","normalEC");let E="Voxel",S="Voxel",R="voxel";n.addStruct(E,S,be.FRAGMENT),n.addStructField(E,"vec3","viewDirUv"),n.addStructField(E,"float","travelDistance"),n.addStructField(E,"int","stepCount"),n.addStructField(E,"int","tileIndex"),n.addStructField(E,"int","sampleIndex"),n.addStructField(E,"float","distanceToDepthBuffer");let G="FragmentInput";n.addStruct(G,"FragmentInput",be.FRAGMENT),n.addStructField(G,h,p),n.addStructField(G,f,b),n.addStructField(G,I,_),n.addStructField(G,S,R);let w="Properties",F="Properties",P="properties";n.addStruct(w,F,be.FRAGMENT);for(let A=0;A<c;A++){let T=IY(o[A]);n.addStructField(w,T,i[A])}{let A="clearProperties";n.addFunction(A,`${F} clearProperties()`,be.FRAGMENT),n.addFunctionLines(A,[`${F} ${P};`]);for(let T=0;T<c;T++){let L=IY(o[T],r[T]);n.addFunctionLines(A,[`${P}.${i[T]} = ${L}(0.0);`])}n.addFunctionLines(A,[`return ${P};`])}{let A="sumProperties";n.addFunction(A,`${F} sumProperties(${F} propertiesA, ${F} propertiesB)`,be.FRAGMENT),n.addFunctionLines(A,[`${F} ${P};`]);for(let T=0;T<c;T++){let L=i[T];n.addFunctionLines(A,[`${P}.${L} = propertiesA.${L} + propertiesB.${L};`])}n.addFunctionLines(A,[`return ${P};`])}{let A="scaleProperties";n.addFunction(A,`${F} scaleProperties(${F} ${P}, float scale)`,be.FRAGMENT),n.addFunctionLines(A,[`${F} scaledProperties = ${P};`]);for(let T=0;T<c;T++)n.addFunctionLines(A,[`scaledProperties.${i[T]} *= scale;`]);n.addFunctionLines(A,["return scaledProperties;"])}{let A="mixProperties";n.addFunction(A,`${F} mixProperties(${F} propertiesA, ${F} propertiesB, float mixFactor)`,be.FRAGMENT),n.addFunctionLines(A,[`${F} ${P};`]);for(let T=0;T<c;T++){let L=i[T];n.addFunctionLines(A,[`${P}.${L} = mix(propertiesA.${L}, propertiesB.${L}, mixFactor);`])}n.addFunctionLines(A,[`return ${P};`])}{let A="copyPropertiesToMetadata";n.addFunction(A,`void copyPropertiesToMetadata(in ${F} ${P}, inout ${f} ${b})`,be.FRAGMENT);for(let T=0;T<c;T++){let L=i[T];n.addFunctionLines(A,[`${b}.${L} = ${P}.${L};`])}}if(d){let A="setStatistics";n.addFunction(A,`void setStatistics(inout ${h} ${p})`,be.FRAGMENT);for(let T=0;T<c;T++){let L=i[T],V=o[T],W=bt.getComponentCount(V);for(let M=0;M<W;M++){let Q=Ext(V,M),N=s[T][M],k=a[T][M];!l(N)||!l(k)||n.addFunctionLines(A,[`${p}.${L}.min${Q} = ${rEe(N)};`,`${p}.${L}.max${Q} = ${rEe(k)};`])}}}{let A="getPropertiesFromMegatextureAtUv";n.addFunction(A,`${F} getPropertiesFromMegatextureAtUv(vec2 texcoord)`,be.FRAGMENT),n.addFunctionLines(A,[`${F} ${P};`]);for(let T=0;T<c;T++){let L=o[T],V=r[T],W=_xt(L,V);n.addFunctionLines(A,[`properties.${i[T]} = texture(u_megatextureTextures[${T}], texcoord)${W};`])}n.addFunctionLines(A,[`return ${P};`])}}function IY(e){if(e===bt.SCALAR)return"float";if(e===bt.VEC2)return"vec2";if(e===bt.VEC3)return"vec3";if(e===bt.VEC4)return"vec4"}function _xt(e){if(e===bt.SCALAR)return".r";if(e===bt.VEC2)return".ra";if(e===bt.VEC3)return".rgb";if(e===bt.VEC4)return""}function rEe(e){let t=e.toString();return t.indexOf(".")===-1&&(t=`${e}.0`),t}function Ext(e,t){return e===bt.SCALAR?"":`[${t}]`}var Ev=Ixt;function Txt(e,t){let n=new _v(e);Ev(n,e);let{shaderBuilder:i,clippingPlanes:o,clippingPlanesLength:r}=n;if(r>0){let I="getClippingPlane",_=Qg(o,t),E=0,S=_.indexOf(")")+1,R=_.indexOf("{",S)+1,G=_.indexOf("}",R),B=_.slice(E,S),w=_.slice(R,G);i.addFunction(I,B,be.FRAGMENT),i.addFunctionLines(I,[w])}let s=i.clone();s.addDefine("PICKING",void 0,be.FRAGMENT);let a=i.clone();a.addDefine("PICKING_VOXEL",void 0,be.FRAGMENT);let c=i.buildShaderProgram(t),d=s.buildShaderProgram(t),u=a.buildShaderProgram(t),h=Qe.fromCache({cull:{enabled:!0,face:Xi.BACK},depthTest:{enabled:!1},depthMask:!1,blending:bn.PRE_MULTIPLIED_ALPHA_BLEND}),p=t.getViewportQuadVertexArray(),g=e._depthTest,f=new ot({vertexArray:p,primitiveType:We.TRIANGLES,renderState:h,shaderProgram:c,uniformMap:n.uniformMap,modelMatrix:e._compoundModelMatrix,pass:Ge.VOXELS,executeInClosestFrustum:!0,owner:this,cull:g,occlude:g}),b=ot.shallowClone(f,new ot);b.shaderProgram=d,b.pickOnly=!0;let x=ot.shallowClone(f,new ot);if(x.shaderProgram=u,x.pickOnly=!0,l(e._drawCommand)){let I=e._drawCommand;I.shaderProgram=I.shaderProgram&&I.shaderProgram.destroy()}if(l(e._drawCommandPick)){let I=e._drawCommandPick;I.shaderProgram=I.shaderProgram&&I.shaderProgram.destroy()}if(l(e._drawCommandPickVoxel)){let I=e._drawCommandPickVoxel;I.shaderProgram=I.shaderProgram&&I.shaderProgram.destroy()}e._drawCommand=f,e._drawCommandPick=b,e._drawCommandPickVoxel=x}var Tv=Txt;var eKi=y(C(),1);var Zzi=y(C(),1),Sxt={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"},gL=Object.freeze(Sxt);var kzi=y(C(),1);var wzi=y(C(),1);function Lxt(e,t,n){let i=new Uint8ClampedArray(e.buffer),o=new ImageData(i,t,n),r=document.createElement("canvas");return r.width=t,r.height=n,r.getContext("2d").putImageData(o,0,0),r}var Sv=Lxt;function bL(){this._defaultTexture=void 0,this._textures={},this._loadedImages=[],this._lastUpdatedFrame=-1}bL.prototype.getTexture=function(e){return this._textures[e]};function Rxt(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})}bL.prototype.loadTexture2D=function(e,t){l(t.typedArray)?this._loadedImages.push({id:e,textureUniform:t}):Rxt(this,e,t)};function Vxt(e,t,n){let{id:i,textureUniform:o,image:r}=t,s=n.webgl2?_Y(o,r,n):Gxt(o,r,n),a=e._textures[i];l(a)&&a!==n.defaultTexture&&a.destroy(),e._textures[i]=s}function _Y(e,t,n){let{typedArray:i,sampler:o}=e,r=l(i)?aEe(e,n):new Wt({context:n,source:t,sampler:o});return sEe(o)&&r.generateMipmap(),r}function Gxt(e,t,n){let{typedArray:i,sampler:o}=e,r=sEe(o),s=o.wrapS===Ln.REPEAT||o.wrapS===Ln.MIRRORED_REPEAT||o.wrapT===Ln.REPEAT||o.wrapT===Ln.MIRRORED_REPEAT,{width:a,height:c}=l(i)?e:t,d=[a,c].every(Z.isPowerOfTwo);if((r||s)&&!d)if(l(i)){if(e.pixelDatatype===Ye.UNSIGNED_BYTE){let h=Sv(i,a,c),p=kb(h);return _Y({sampler:o},p,n)}}else{let h=kb(t);return _Y(e,h,n)}else return _Y(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."),aEe(e,n)}function sEe(e){return[en.NEAREST_MIPMAP_NEAREST,en.NEAREST_MIPMAP_LINEAR,en.LINEAR_MIPMAP_NEAREST,en.LINEAR_MIPMAP_LINEAR].includes(e.minificationFilter)}function aEe(e,t){let{pixelFormat:n,pixelDatatype:i,width:o,height:r,typedArray:s,sampler:a}=e;return new Wt({context:t,pixelFormat:n,pixelDatatype:i,source:{arrayBufferView:s,width:o,height:r},sampler:a,flipY:!1})}bL.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];Vxt(this,o,t)}n.length=0};bL.prototype.isDestroyed=function(){return!1};bL.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 Lv=bL;function Rv(e){e=e??Y.EMPTY_OBJECT,this.mode=e.mode??DA.MODIFY_MATERIAL,this.lightingModel=e.lightingModel,this.uniforms=e.uniforms??Y.EMPTY_OBJECT,this.varyings=e.varyings??Y.EMPTY_OBJECT,this.vertexShaderText=e.vertexShaderText,this.fragmentShaderText=e.fragmentShaderText,this.translucencyMode=e.translucencyMode??c0.INHERIT,this._textureManager=new Lv,this._defaultTexture=void 0,this.uniformMap=Zxt(this),this.usedVariablesVertex={attributeSet:{},featureIdSet:{},metadataSet:{}},this.usedVariablesFragment={attributeSet:{},featureIdSet:{},metadataSet:{},materialSet:{}},Xxt(this),Wxt(this)}function Zxt(e){let t=e.uniforms,n={};for(let i in t)if(t.hasOwnProperty(i)){let o=t[i];o.type===gL.SAMPLER_2D?(e._textureManager.loadTexture2D(i,o.value),n[i]=Bxt(e,i)):n[i]=wxt(e,i)}return n}function Bxt(e,t){return function(){return e._textureManager.getTexture(t)??e._defaultTexture}}function wxt(e,t){return function(){return e.uniforms[t].value}}function zI(e,t,n){let i;for(;(i=t.exec(e))!==null;){let o=i[1];n[o]=!0}}function Xxt(e){let t=/[vf]sInput\.attributes\.(\w+)/g,n=/[vf]sInput\.featureIds\.(\w+)/g,i=/[vf]sInput\.metadata.(\w+)/g,o,r=e.vertexShaderText;l(r)&&(o=e.usedVariablesVertex.attributeSet,zI(r,t,o),o=e.usedVariablesVertex.featureIdSet,zI(r,n,o),o=e.usedVariablesVertex.metadataSet,zI(r,i,o));let s=e.fragmentShaderText;if(l(s)){o=e.usedVariablesFragment.attributeSet,zI(s,t,o),o=e.usedVariablesFragment.featureIdSet,zI(s,n,o),o=e.usedVariablesFragment.metadataSet,zI(s,i,o);let a=/material\.(\w+)/g,c=e.usedVariablesFragment.materialSet;zI(s,a,c)}}function cEe(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 $c(e,t,n,i){if(e.hasOwnProperty(t)){let o=`${cEe(t)} is not available in the ${i} shader. Did you mean ${cEe(n)} instead?`;throw new Ae(o)}}function Wxt(e){let t=e.usedVariablesVertex.attributeSet;$c(t,"position","positionMC","vertex"),$c(t,"normal","normalMC","vertex"),$c(t,"tangent","tangentMC","vertex"),$c(t,"bitangent","bitangentMC","vertex"),$c(t,"positionWC","positionMC","vertex"),$c(t,"positionEC","positionMC","vertex"),$c(t,"normalEC","normalMC","vertex"),$c(t,"tangentEC","tangentMC","vertex"),$c(t,"bitangentEC","bitangentMC","vertex");let n=e.usedVariablesFragment.attributeSet;$c(n,"position","positionEC","fragment"),$c(n,"normal","normalEC","fragment"),$c(n,"tangent","tangentEC","fragment"),$c(n,"bitangent","bitangentEC","fragment"),$c(n,"normalMC","normalEC","fragment"),$c(n,"tangentMC","tangentEC","fragment"),$c(n,"bitangentMC","bitangentEC","fragment")}Rv.prototype.setUniform=function(e,t){let n=this.uniforms[e];n.type===gL.SAMPLER_2D?this._textureManager.loadTexture2D(e,t):l(t.clone)?n.value=t.clone(n.value):n.value=t};Rv.prototype.update=function(e){this._defaultTexture=e.context.defaultTexture,this._textureManager.update(e)};Rv.prototype.isDestroyed=function(){return!1};Rv.prototype.destroy=function(){this._textureManager=this._textureManager&&this._textureManager.destroy(),me(this)};var KI=Rv;var cKi=y(C(),1);function qg(e){let{loader:t,metadata:n}=e;this._loader=t,this._metadata=n,this._resourcesLoaded=!1,this._ready=!1}Object.defineProperties(qg.prototype,{ready:{get:function(){return this._ready}},metadata:{get:function(){return this._metadata}}});qg.fromMetadataArray=function(e){return new qg({metadata:e})};qg.fromGltf=async function(e){let t=new Od({gltfResource:e,releaseGltfJson:!1,loadAttributesAsTypedArray:!0});try{await t.load()}catch(n){throw t.destroy(),n}return new qg({loader:t})};qg.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=Fxt(r,i,e),this._ready=!0;return}this._resourcesLoaded=n.process(t)}};function Fxt(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 h=c[o[u]].attribute,p=e.find(x=>x.name===h);if(!l(p))continue;let g=Ut.toComponentDatatype(s[u]),f=bt.getComponentCount(r[u]),b=p.count*f;d[u]=J.createArrayBufferView(g,p.typedArray.buffer,p.typedArray.byteOffset+p.byteOffset,b)}return d}qg.prototype.isDestroyed=function(){return!1};qg.prototype.destroy=function(){return this._loader=this._loader&&this._loader.destroy(),me(this)};var JI=qg;var QKi=y(C(),1);var AKi=y(C(),1);function Fp(){this.orientedBoundingBox=new vn,this.boundingSphere=new ue,this.boundTransform=new X,this.shapeTransform=new X,this._minBounds=Fp.DefaultMinBounds.clone(),this._maxBounds=Fp.DefaultMaxBounds.clone(),this.shaderUniforms={renderMinBounds:new m,renderMaxBounds:new m,boxUvToShapeUvScale:new m,boxUvToShapeUvTranslate:new m},this.shaderDefines={BOX_INTERSECTION_INDEX:void 0,BOX_HAS_SHAPE_BOUNDS:void 0},this.shaderMaximumIntersectionsLength=0}var Pxt=new m,v6=new m,Mxt=new $,vxt=new m,Nxt=new m,Dxt=new m,Qxt=new m,lEe=X.fromRotationTranslation($.fromUniformScale(.5,new $),new m(.5,.5,.5),new X);Fp.prototype.update=function(e,t,n,i,o){i=i??t.clone(vxt),o=o??n.clone(Nxt),t=m.clone(t,this._minBounds),n=m.clone(n,this._maxBounds);let r=m.clamp(t,i,o,Dxt),s=m.clamp(n,i,o,Qxt),a=X.getScale(e,v6);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;this.shapeTransform=X.clone(e,this.shapeTransform),this.orientedBoundingBox=D6(r,s,this.shapeTransform,this.orientedBoundingBox),this.boundTransform=X.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=ue.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let{shaderUniforms:c,shaderDefines:d}=this;for(let g in d)d.hasOwnProperty(g)&&(d[g]=void 0);let u=0;d.BOX_INTERSECTION_INDEX=u,u+=1,c.renderMinBounds=X.multiplyByPoint(lEe,r,c.renderMinBounds),c.renderMaxBounds=X.multiplyByPoint(lEe,s,c.renderMaxBounds),d.BOX_HAS_SHAPE_BOUNDS=!0;let h=t,p=n;return c.boxUvToShapeUvScale=m.fromElements(2/(h.x===p.x?1:p.x-h.x),2/(h.y===p.y?1:p.y-h.y),2/(h.z===p.z?1:p.z-h.z),c.boxUvToShapeUvScale),c.boxUvToShapeUvTranslate=m.fromElements(-c.boxUvToShapeUvScale.x*(h.x*.5+.5),-c.boxUvToShapeUvScale.y*(h.y*.5+.5),-c.boxUvToShapeUvScale.z*(h.z*.5+.5),c.boxUvToShapeUvTranslate),this.shaderMaximumIntersectionsLength=u,!0};var EY=new m,N6=new m;Fp.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=this._minBounds,s=this._maxBounds,a=1/Math.pow(2,e),c=m.fromElements(Z.lerp(r.x,s.x,a*t),Z.lerp(r.y,s.y,a*n),Z.lerp(r.z,s.z,a*i),EY),d=m.fromElements(Z.lerp(r.x,s.x,a*(t+1)),Z.lerp(r.y,s.y,a*(n+1)),Z.lerp(r.z,s.z,a*(i+1)),N6);return D6(c,d,this.shapeTransform,o)};var dEe=new m;Fp.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,dEe),s=m.multiplyByScalar(r,o,dEe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,EY),o,EY),c=m.add(a,s,N6),d=this._minBounds,u=this._maxBounds,h=m.fromElements(Z.lerp(d.x,u.x,a.x),Z.lerp(d.y,u.y,a.y),Z.lerp(d.z,u.z,a.z),EY),p=m.fromElements(Z.lerp(d.x,u.x,c.x),Z.lerp(d.y,u.y,c.y),Z.lerp(d.z,u.z,c.z),N6);return D6(h,p,this.shapeTransform,i)};Fp.DefaultMinBounds=Object.freeze(new m(-1,-1,-1));Fp.DefaultMaxBounds=Object.freeze(new m(1,1,1));function D6(e,t,n,i){let o=Fp.DefaultMinBounds,r=Fp.DefaultMaxBounds;if(m.equals(e,o)&&m.equals(t,r))i.center=X.getTranslation(n,i.center),i.halfAxes=X.getMatrix3(n,i.halfAxes);else{let a=X.getScale(n,v6),c=m.midpoint(e,t,Pxt);i.center=X.multiplyByPoint(n,c,i.center),a=m.fromElements(a.x*.5*(t.x-e.x),a.y*.5*(t.y-e.y),a.z*.5*(t.z-e.z),v6);let d=X.getRotation(n,Mxt);i.halfAxes=$.setScale(d,a,i.halfAxes)}return i}var jI=Fp;var SKi=y(C(),1);function $g(){this.orientedBoundingBox=new vn,this.boundingSphere=new ue,this.boundTransform=new X,this.shapeTransform=new X,this._minBounds=$g.DefaultMinBounds.clone(),this._maxBounds=$g.DefaultMaxBounds.clone(),this.shaderUniforms={cylinderRenderRadiusMinMax:new D,cylinderRenderAngleMinMax:new D,cylinderRenderHeightMinMax:new D,cylinderUvToShapeUvRadius:new D,cylinderUvToShapeUvAngle:new D,cylinderUvToShapeUvHeight:new D,cylinderShapeUvAngleMinMax:new D,cylinderShapeUvAngleRangeZeroMid:0},this.shaderDefines={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_HAS_SHAPE_BOUNDS_RADIUS:void 0,CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED: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}var hEe=new m,Uxt=new m,kxt=new m,Yxt=new m,Oxt=new m;$g.prototype.update=function(e,t,n,i,o){i=i??t.clone(Uxt),o=o??n.clone(kxt),t=m.clone(t,this._minBounds),n=m.clone(n,this._maxBounds);let{DefaultMinBounds:r,DefaultMaxBounds:s}=$g,a=s.y-r.y,c=.5*a,d=Z.EPSILON10,u=Z.EPSILON3,h=Z.EPSILON10;t.x=Math.max(0,t.x),n.x=Math.max(0,n.x),t.y=Z.negativePiToPi(t.y),n.y=Z.negativePiToPi(n.y),i.y=Z.negativePiToPi(i.y),o.y=Z.negativePiToPi(o.y);let p=m.maximumByComponent(t,i,Yxt),g=m.minimumByComponent(n,o,Oxt),f=X.getScale(e,hEe);if(g.x===0||p.x>g.x||p.z>g.z||Z.equalsEpsilon(f.x,0,void 0,d)||Z.equalsEpsilon(f.y,0,void 0,d)||Z.equalsEpsilon(f.z,0,void 0,d))return!1;this.shapeTransform=X.clone(e,this.shapeTransform),this.orientedBoundingBox=k6(p,g,this.shapeTransform,this.orientedBoundingBox),this.boundTransform=X.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=ue.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let b=t.x===r.x&&n.x===s.x,x=n.y<t.y,I=n.y-t.y+x*a,_=I>c+h&&I<a-h,E=I<c-h,S=I>=c-h&&I<=c+h,R=_||E||S,G=Z.equalsEpsilon(t.y,r.y,void 0,u),B=Z.equalsEpsilon(n.y,s.y,void 0,u),w=t.z===r.z&&n.z===s.z,F=p.x===r.x,P=g.y<p.y,A=g.y-p.y+P*a,T=A>=c-h&&A<a-h,L=A>h&&A<c-h,V=A<=h,W=T||L||V,{shaderUniforms:M,shaderDefines:Q}=this;for(let k in Q)Q.hasOwnProperty(k)&&(Q[k]=void 0);let N=0;if(Q.CYLINDER_INTERSECTION_INDEX_RADIUS_MAX=N,N+=1,F||(Q.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN=!0,Q.CYLINDER_INTERSECTION_INDEX_RADIUS_MIN=N,N+=1),M.cylinderRenderRadiusMinMax=D.fromElements(p.x,g.x,M.cylinderRenderRadiusMinMax),p.x===g.x&&(Q.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT=!0),!b){Q.CYLINDER_HAS_SHAPE_BOUNDS_RADIUS=!0;let k=n.x-t.x,v=0,O=1;k!==0&&(v=1/k,O=-t.x/k),M.cylinderUvToShapeUvRadius=D.fromElements(v,O,M.cylinderUvToShapeUvRadius)}if(!w){Q.CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT=!0;let k=n.z-t.z,v=0,O=1;k!==0&&(v=2/k,O=-(t.z+1)/k),M.cylinderUvToShapeUvHeight=D.fromElements(v,O,M.cylinderUvToShapeUvHeight)}if(M.cylinderRenderHeightMinMax=D.fromElements(p.z,g.z,M.cylinderRenderHeightMinMax),x&&(Q.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED=!0),W&&(Q.CYLINDER_HAS_RENDER_BOUNDS_ANGLE=!0,Q.CYLINDER_INTERSECTION_INDEX_ANGLE=N,T?(Q.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF=!0,N+=1):L?(Q.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF=!0,N+=2):V&&(Q.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO=!0,N+=2),M.cylinderRenderAngleMinMax=D.fromElements(p.y,g.y,M.cylinderRenderAngleMinMax)),R){Q.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE=!0,G&&(Q.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY=!0),B&&(Q.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY=!0);let k=(t.y-r.y)/a,v=(n.y-r.y)/a,O=1-I/a;if(M.cylinderShapeUvAngleMinMax=D.fromElements(k,v,M.cylinderShapeUvAngleMinMax),M.cylinderShapeUvAngleRangeZeroMid=(v+.5*O)%1,I<=h)M.cylinderUvToShapeUvAngle=D.fromElements(0,1,M.cylinderUvToShapeUvAngle);else{let H=a/I,ee=-(t.y-r.y)/I;M.cylinderUvToShapeUvAngle=D.fromElements(H,ee,M.cylinderUvToShapeUvAngle)}}return this.shaderMaximumIntersectionsLength=N,!0};var TY=new m,U6=new m;$g.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=this._minBounds,s=this._maxBounds,a=1/Math.pow(2,e),c=m.fromElements(Z.lerp(r.x,s.x,t*a),Z.lerp(r.y,s.y,n*a),Z.lerp(r.z,s.z,i*a),TY),d=m.fromElements(Z.lerp(r.x,s.x,(t+1)*a),Z.lerp(r.y,s.y,(n+1)*a),Z.lerp(r.z,s.z,(i+1)*a),U6);return k6(c,d,this.shapeTransform,o)};var uEe=new m;$g.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,uEe),s=m.multiplyByScalar(r,o,uEe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,TY),o,TY),c=m.add(a,s,U6),d=this._minBounds,u=this._maxBounds,h=m.fromElements(Z.lerp(d.x,u.x,a.x),Z.lerp(d.y,u.y,a.y),Z.lerp(d.z,u.z,a.z),TY),p=m.fromElements(Z.lerp(d.x,u.x,c.x),Z.lerp(d.y,u.y,c.y),Z.lerp(d.z,u.z,c.z),U6);return k6(h,p,this.shapeTransform,i)};$g.DefaultMinBounds=Object.freeze(new m(0,-Z.PI,-1));$g.DefaultMaxBounds=Object.freeze(new m(1,+Z.PI,1));var Hxt=5,zxt=new Array(Hxt),Kxt=new m,Jxt=new $,jxt=new X,qxt=new X,$xt=new X,Q6=new X,eIt=new m,tIt=new m,nIt=new m,fEe=new Array(8);for(let e=0;e<8;e++)fEe[e]=new m;function mEe(e,t,n){return Math.abs(ce.dot(e,t))<n}function iIt(e){let t=X.getColumn(e,0,eIt),n=X.getColumn(e,1,tIt),i=X.getColumn(e,2,nIt),o=Z.EPSILON4;return mEe(t,n,o)&&mEe(n,i,o)}function oIt(e,t){let n=fEe;m.fromElements(-.5,-.5,-.5,n[0]),m.fromElements(-.5,-.5,.5,n[1]),m.fromElements(-.5,.5,-.5,n[2]),m.fromElements(-.5,.5,.5,n[3]),m.fromElements(.5,-.5,-.5,n[4]),m.fromElements(.5,-.5,.5,n[5]),m.fromElements(.5,.5,-.5,n[6]),m.fromElements(.5,.5,.5,n[7]);for(let i=0;i<8;++i)X.multiplyByPoint(e,n[i],n[i]);return vn.fromPoints(n,t)}function k6(e,t,n,i){let o=e.x,r=t.x,s=e.y,a=t.y<s?t.y+Z.TWO_PI:t.y,c=e.z,d=t.z,u=a-s,h=s+u*.5,p=zxt,g=0;p[g++]=s,p[g++]=a,p[g++]=h,u>Z.PI&&(p[g++]=h-Z.PI_OVER_TWO,p[g++]=h+Z.PI_OVER_TWO);let f=Number.POSITIVE_INFINITY,b=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY,I=Number.NEGATIVE_INFINITY;for(let M=0;M<g;++M){let Q=p[M]-h,N=Math.cos(Q),k=Math.sin(Q),v=N*o,O=k*o,H=N*r,ee=k*r;f=Math.min(f,v,H),b=Math.min(b,O,ee),x=Math.max(x,v,H),I=Math.max(I,O,ee)}let _=x-f,E=I-b,S=d-c,R=(f+x)*.5,G=(b+I)*.5,B=(c+d)*.5,w=m.fromElements(R,G,B,Kxt),F=$.fromRotationZ(h,Jxt),P=m.fromElements(_,E,S,hEe),A=X.fromScale(P,$xt),T=X.fromRotation(F,qxt),L=X.fromTranslation(w,jxt),V=X.multiplyTransformation(T,X.multiplyTransformation(L,A,Q6),Q6),W=X.multiplyTransformation(n,V,Q6);return iIt(W)?vn.fromTransformation(W,i):oIt(W,i)}var qI=$g;var PKi=y(C(),1);function eb(){this.orientedBoundingBox=new vn,this.boundingSphere=new ue,this.boundTransform=new X,this.shapeTransform=new X,this._rectangle=new le,this._minimumHeight=eb.DefaultMinBounds.z,this._maximumHeight=eb.DefaultMaxBounds.z,this._ellipsoid=new ie,this._translation=new m,this._rotation=new $,this.shaderUniforms={ellipsoidRadiiUv:new m,eccentricitySquared:0,evoluteScale:new D,ellipsoidInverseRadiiSquaredUv:new m,ellipsoidRenderLongitudeMinMax:new D,ellipsoidShapeUvLongitudeMinMaxMid:new m,ellipsoidUvToShapeUvLongitude:new D,ellipsoidUvToShapeUvLatitude:new D,ellipsoidRenderLatitudeSinMinMax:new D,ellipsoidInverseHeightDifferenceUv:0,clipMinMaxHeight:new D},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_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED: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}var rIt=new m,sIt=new m,aIt=new m,cIt=new m,lIt=new m,dIt=new m,uIt=new m,mIt=new m,hIt=new $,pEe=new m,AEe=new m,fIt=new le;eb.prototype.update=function(e,t,n,i,o){let{DefaultMinBounds:r,DefaultMaxBounds:s}=eb;i=i??r,o=o??s;let a=Z.EPSILON10,c=Z.EPSILON3,d=Z.EPSILON10,u=Z.EPSILON10,h=Z.EPSILON3,p=X.getScale(e,mIt),g=m.clone(r,rIt);g.z=-m.minimumComponent(p);let f=m.clamp(t,g,s,sIt),b=m.clamp(n,g,s,aIt),x=m.clamp(i,g,s,cIt),I=m.clamp(o,g,s,lIt),_=m.maximumByComponent(f,x,dIt),E=m.minimumByComponent(b,I,uIt),S=m.add(p,m.fromElements(b.z,b.z,b.z,pEe),pEe),R=m.maximumComponent(S),G=m.add(p,m.fromElements(E.z,E.z,E.z,AEe),AEe);if(_.y>E.y||_.y===s.y||E.y===r.y||_.z>E.z||Z.equalsEpsilon(G,m.ZERO,void 0,a))return!1;this._rectangle=le.fromRadians(f.x,f.y,b.x,b.y),this._translation=X.getTranslation(e,this._translation),this._rotation=X.getRotation(e,this._rotation),this._ellipsoid=ie.fromCartesian3(p,this._ellipsoid),this._minimumHeight=f.z,this._maximumHeight=b.z;let B=le.fromRadians(_.x,_.y,E.x,E.y,fIt);this.orientedBoundingBox=Y6(B,_.z,E.z,this._ellipsoid,this._translation,this._rotation,this.orientedBoundingBox),this.shapeTransform=X.fromRotationTranslation($.setScale(this._rotation,S,hIt),this._translation,this.shapeTransform),this.boundTransform=X.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=ue.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let w=s.x-r.x,F=.5*w,P=E.x<_.x,A=E.x-_.x+P*w,T=A<=d,L=A>=F-d&&A<w-d,V=A>d&&A<F-d,W=T||L||V,M=b.x<f.x,Q=b.x-f.x+M*w,N=Q>F+d&&Q<w-d,k=Q>=F-d&&Q<=F+d,v=Q<F-d,O=N||k||v,H=E.y<-h,ee=E.y>=-h&&E.y<=+h,K=E.y>+h&&E.y<s.y-u,te=H||ee||K,q=_.y>r.y+u&&_.y<-h,pe=_.y>=-h&&_.y<=+h,ye=_.y>+h,he=q||pe||ye,xe=te||he,Te=b.y-f.y,Be=b.y<-h,Le=b.y>=-h&&b.y<=+h,De=b.y>+h&&b.y<s.y-u,Ue=Be||Le||De,je=f.y>r.y+u&&f.y<-h,it=f.y>=-h&&f.y<=+h,nn=f.y>+h,rn=Ue||(je||it||nn),{shaderUniforms:Jt,shaderDefines:Xt}=this;for(let _t in Xt)Xt.hasOwnProperty(_t)&&(Xt[_t]=void 0);Jt.ellipsoidRadiiUv=m.divideByScalar(S,R,Jt.ellipsoidRadiiUv);let{x:Li,z:bi}=Jt.ellipsoidRadiiUv,vt=bi/Li;Jt.eccentricitySquared=1-vt*vt,Jt.evoluteScale=D.fromElements((Li*Li-bi*bi)/Li,(bi*bi-Li*Li)/bi,Jt.evoluteScale),Jt.ellipsoidInverseRadiiSquaredUv=m.divideComponents(m.ONE,m.multiplyComponents(Jt.ellipsoidRadiiUv,Jt.ellipsoidRadiiUv,Jt.ellipsoidInverseRadiiSquaredUv),Jt.ellipsoidInverseRadiiSquaredUv);let Rt=0;Xt.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX=Rt,Rt+=1,Xt.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN=Rt,Rt+=1,Jt.clipMinMaxHeight=D.fromElements((_.z-b.z)/R,(E.z-b.z)/R,Jt.clipMinMaxHeight);let si=(b.z-f.z)/R;if(Jt.ellipsoidInverseHeightDifferenceUv=1/si,f.z===b.z&&(Jt.ellipsoidInverseHeightDifferenceUv=0),W&&(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE=!0,Xt.ELLIPSOID_INTERSECTION_INDEX_LONGITUDE=Rt,L?(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF=!0,Rt+=1):V?(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF=!0,Rt+=2):T&&(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO=!0,Rt+=2),Jt.ellipsoidRenderLongitudeMinMax=D.fromElements(_.x,E.x,Jt.ellipsoidRenderLongitudeMinMax)),O)if(Xt.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE=!0,b.x<f.x&&(Xt.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED=!0),Q<=d)Jt.ellipsoidUvToShapeUvLongitude=D.fromElements(0,1,Jt.ellipsoidUvToShapeUvLongitude);else{let Fo=w/Q,Uo=-(f.x-r.x)/Q;Jt.ellipsoidUvToShapeUvLongitude=D.fromElements(Fo,Uo,Jt.ellipsoidUvToShapeUvLongitude)}if(W){let _t=Z.equalsEpsilon(_.x,r.x,void 0,c),Fo=Z.equalsEpsilon(E.x,s.x,void 0,c);_t&&(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY=!0),Fo&&(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY=!0);let Uo=(f.x-r.x)/w,Va=(b.x-r.x)/w,Cr=(E.x-r.x)/w,wr=1-A/w,ve=(Cr+.5*wr)%1;Jt.ellipsoidShapeUvLongitudeMinMaxMid=m.fromElements(Uo,Va,ve,Jt.ellipsoidShapeUvLongitudeMinMaxMid)}if(xe&&(he&&(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN=!0,Xt.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN=Rt,q?(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF=!0,Rt+=1):pe?(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF=!0,Rt+=1):ye&&(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF=!0,Rt+=2)),te&&(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX=!0,Xt.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX=Rt,H?(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF=!0,Rt+=2):ee?(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF=!0,Rt+=1):K&&(Xt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF=!0,Rt+=1)),Jt.ellipsoidRenderLatitudeSinMinMax=D.fromElements(Math.sin(_.y),Math.sin(E.y),Jt.ellipsoidRenderLatitudeSinMinMax)),rn)if(Xt.ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE=!0,Te<u)Jt.ellipsoidUvToShapeUvLatitude=D.fromElements(0,1,Jt.ellipsoidUvToShapeUvLatitude);else{let Fo=(s.y-r.y)/Te,Uo=(r.y-f.y)/Te;Jt.ellipsoidUvToShapeUvLatitude=D.fromElements(Fo,Uo,Jt.ellipsoidUvToShapeUvLatitude)}return this.shaderMaximumIntersectionsLength=Rt,!0};var yEe=new le;eb.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,h=(i+1)*r,p=le.subsection(this._rectangle,s,c,a,d,yEe),g=Z.lerp(this._minimumHeight,this._maximumHeight,u),f=Z.lerp(this._minimumHeight,this._maximumHeight,h);return Y6(p,g,f,this._ellipsoid,this._translation,this._rotation,o)};var gEe=new m,bEe=new m,pIt=new m;eb.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,gEe),s=m.multiplyByScalar(r,o,gEe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,bEe),o,bEe),c=m.add(a,s,pIt),d=le.subsection(this._rectangle,a.x,a.y,c.x,c.y,yEe),u=Z.lerp(this._minimumHeight,this._maximumHeight,a.z),h=Z.lerp(this._minimumHeight,this._maximumHeight,c.z);return Y6(d,u,h,this._ellipsoid,this._translation,this._rotation,i)};function Y6(e,t,n,i,o,r,s){return s=vn.fromRectangle(e,t,n,i,s),s.center=m.add(s.center,o,s.center),s.halfAxes=$.multiply(s.halfAxes,r,s.halfAxes),s}eb.DefaultMinBounds=Object.freeze(new m(-Z.PI,-Z.PI_OVER_TWO,-ie.WGS84.minimumRadius));eb.DefaultMaxBounds=Object.freeze(new m(Z.PI,Z.PI_OVER_TWO,10*ie.WGS84.maximumRadius));var $I=eb;var Vu={BOX:"BOX",ELLIPSOID:"ELLIPSOID",CYLINDER:"CYLINDER"};Vu.getMinBounds=function(e){switch(e){case Vu.BOX:return jI.DefaultMinBounds;case Vu.ELLIPSOID:return $I.DefaultMinBounds;case Vu.CYLINDER:return qI.DefaultMinBounds}};Vu.getMaxBounds=function(e){switch(e){case Vu.BOX:return jI.DefaultMaxBounds;case Vu.ELLIPSOID:return $I.DefaultMaxBounds;case Vu.CYLINDER:return qI.DefaultMaxBounds}};Vu.getShapeConstructor=function(e){switch(e){case Vu.BOX:return jI;case Vu.ELLIPSOID:return $I;case Vu.CYLINDER:return qI}};var qa=Object.freeze(Vu);var kJi=y(C(),1);var OKi=y(C(),1);function Af(e){this._comparator=e.comparator,this._maximumLength=e.maximumLength,this._array=l(e.maximumLength)?new Array(e.maximumLength):[],this._length=0}Object.defineProperties(Af.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}}});Af.prototype.clone=function(){let e=this._maximumLength,t=this._comparator,n=this._array,i=this._length,o=new Af({comparator:t,maximumLength:e});o._length=i;for(let r=0;r<i;r++)o._array[r]=n[r];return o};Af.prototype.reset=function(){this._length=0;let e=this._maximumLength;if(l(e))for(let t=0;t<e;t++)this._array[t]=void 0;else this._array.length=0};Af.prototype.resort=function(){let e=this._length;for(let t=0;t<e;t++)CEe(this,t)};Af.prototype.insert=function(e){let t,n=this._maximumLength;if(l(n)){if(n===0)return;if(this._length===n){let o=this._array[0];if(this._comparator(e,o)<=0)return e;t=this.removeMinimum()}}let i=this._length;return this._array[i]=e,this._length++,CEe(this,i),t};Af.prototype.removeMinimum=function(){let e=this._length;if(e===0)return;this._length--;let t=this._array[0];return e>=2&&(this._array[0]=this._array[e-1],xEe(this,0)),this._array[e-1]=void 0,t};Af.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=O6(this,1,2)?1:2;t=this._array[n],this._array[n]=this._array[e-1],e>=4&&xEe(this,n)}return this._array[e-1]=void 0,t};Af.prototype.getMinimum=function(){if(this._length!==0)return this._array[0]};Af.prototype.getMaximum=function(){let e=this._length;if(e!==0)return e<=2?this._array[e-1]:this._array[O6(this,1,2)?1:2]};function SY(e,t,n){let i=e._array,o=i[t];i[t]=i[n],i[n]=o}function Vv(e,t,n){return e._comparator(e._array[t],e._array[n])<0}function O6(e,t,n){return e._comparator(e._array[t],e._array[n])>0}function CEe(e,t){if(t===0)return;let n=Math.floor(Z.log2(t+1))%2===0,i=Math.floor((t-1)/2),o=Vv(e,t,i);for(o!==n&&(SY(e,t,i),t=i);t>=3;){let r=Math.floor((t-3)/4);if(Vv(e,t,r)!==o)break;SY(e,t,r),t=r}}function xEe(e,t){let n=e._length,i=Math.floor(Z.log2(t+1))%2===0,o;for(;(o=2*t+1)<n;){let r=o,s=o+1;if(s<n){Vv(e,s,r)===i&&(r=s);let a=2*o+1,c=Math.max(Math.min(n-a,4),0);for(let d=0;d<c;d++){let u=a+d;Vv(e,u,r)===i&&(r=u)}}if(Vv(e,r,t)===i&&(SY(e,r,t),r!==o&&r!==s)){let a=Math.floor((r-1)/2);O6(e,r,a)===i&&SY(e,r,a)}t=r}}var e_=Af;var zKi=y(C(),1),H6=Object.freeze({UNLOADED:0,RECEIVING:1,PROCESSING:2,LOADED:3,FAILED:4,UNAVAILABLE:5});function Gv(e,t){this.spatialNode=e,this.keyframe=t,this.state=H6.UNLOADED,this.content=void 0,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1}Gv.prototype.unload=function(){this.content=this.content&&this.content.destroy(),this.spatialNode=void 0,this.state=H6.UNLOADED,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1};Gv.priorityComparator=function(e,t){return e.priority-t.priority};Gv.searchComparator=function(e,t){return e.keyframe-t.keyframe};Gv.LoadState=H6;var Go=Gv;var hJi=y(C(),1);function Ay(e,t,n,i,o){if(o=Math.min(o??128*1024*1024,536870912),i===Ut.UNSIGNED_SHORT&&(i=Ut.FLOAT32),i===Ut.FLOAT32&&!e.floatingPointTexture)throw new de("Floating point texture not supported");let s=AIt(i),a=gIt(n,e.webgl2),c=Ut.getSizeInBytes(i),d=bIt(o,n,c),u=Math.ceil(Math.sqrt(t.x)),h=Math.ceil(t.z/u),p=u*t.x,g=h*t.y,f=Math.floor(d/p),b=Math.floor(d/g);if(f===0||b===0)throw new de("Tileset is too large to fit into megatexture");this.channelCount=n,this.componentType=i,this.textureMemoryByteLength=c*n*d**2,this.voxelCountPerTile=m.clone(t,new m),this.maximumTileCount=f*b,this.regionCountPerMegatexture=new D(f,b),this.voxelCountPerRegion=new D(p,g),this.sliceCountPerRegion=new D(u,h),this.voxelSizeUv=new D(1/d,1/d),this.sliceSizeUv=new D(t.x/d,t.y/d),this.regionSizeUv=new D(p/d,g/d),this.texture=new Wt({context:e,pixelFormat:a,pixelDatatype:s,flipY:!1,width:d,height:d,sampler:new sn({wrapS:Ln.CLAMP_TO_EDGE,wrapT:Ln.CLAMP_TO_EDGE,minificationFilter:en.LINEAR,magnificationFilter:pi.LINEAR})});let x=Ut.toComponentDatatype(i);this.tileVoxelDataTemp=J.createTypedArray(x,p*g*n),this.nodes=new Array(this.maximumTileCount);for(let I=0;I<this.maximumTileCount;I++)this.nodes[I]=new yIt(I);for(let I=0;I<this.maximumTileCount;I++){let _=this.nodes[I];_.previousNode=I>0?this.nodes[I-1]:void 0,_.nextNode=I<this.maximumTileCount-1?this.nodes[I+1]:void 0}this.occupiedList=void 0,this.emptyList=this.nodes[0],this.occupiedCount=0}function AIt(e){if(e===Ut.FLOAT32||e===Ut.FLOAT64)return Ye.FLOAT;if(e===Ut.UINT8)return Ye.UNSIGNED_BYTE}function gIt(e,t){if(e===1)return t?tt.RED:tt.LUMINANCE;if(e===2)return t?tt.RG:tt.LUMINANCE_ALPHA;if(e===3)return tt.RGB;if(e===4)return tt.RGBA}function bIt(e,t,n){let i=Math.floor(e/(t*n));return Math.min(Kt.maximumTextureSize,Z.previousPowerOfTwo(Math.floor(Math.sqrt(i))))}function yIt(e){this.index=e,this.nextNode=void 0,this.previousNode=void 0}Ay.prototype.add=function(e){if(this.isFull())throw new Ae("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};Ay.prototype.remove=function(e){if(e<0||e>=this.maximumTileCount)throw new Ae("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--};Ay.prototype.isFull=function(){return this.emptyList===void 0};Ay.getApproximateTextureMemoryByteLength=function(e,t,n,i){i===Ut.UNSIGNED_SHORT&&(i=Ut.FLOAT32);let o=Ut.getSizeInBytes(i),r=e*t.x*t.y*t.z,s=Math.ceil(Math.sqrt(t.x)),a=Math.ceil(t.z/s),c=s*t.x,d=a*t.y,u=Z.previousPowerOfTwo(Math.floor(Math.sqrt(r)));for(;;){let p=Math.floor(u/c),g=Math.floor(u/d);if(p*g>=e)break;u*=2}return u*u*n*o};Ay.prototype.writeDataToTexture=function(e,t){let n=t.constructor===Uint16Array?new Float32Array(t):t,{tileVoxelDataTemp:i,voxelCountPerTile:o,sliceCountPerRegion:r,voxelCountPerRegion:s,channelCount:a,regionCountPerMegatexture:c}=this;for(let g=0;g<o.z;g++){let f=g%r.x*o.x,b=Math.floor(g/r.x)*o.y;for(let x=0;x<o.y;x++){let I=CIt(o,x,g),_=(b+x)*s.x+f;for(let E=0;E<o.x;E++){let S=I+E,R=_+E;for(let G=0;G<a;G++)i[R*a+G]=n[S*a+G]}}}let d=e%c.x*s.x,u=Math.floor(e/c.x)*s.y,p={source:{arrayBufferView:i,width:s.x,height:s.y},xOffset:d,yOffset:u};this.texture.copyFrom(p)};function CIt(e,t,n){let i=e.y*e.x,o=n,r=t;return o*i+r*e.x}Ay.prototype.isDestroyed=function(){return!1};Ay.prototype.destroy=function(){return this.texture=this.texture&&this.texture.destroy(),me(this)};var yL=Ay;var _Ji=y(C(),1);function km(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=m.clone(s),this.keyframeNodes=[],this.renderableKeyframeNodes=[],this.renderableKeyframeNodeLerp=0,this.renderableKeyframeNodePrevious=void 0,this.renderableKeyframeNodeNext=void 0,this.orientedBoundingBox=new vn,this.approximateVoxelSize=0,this.screenSpaceError=0,this.visitedFrameNumber=-1,this.computeBoundingVolumes(r)}var xIt=new m;km.prototype.computeBoundingVolumes=function(e){this.orientedBoundingBox=e.computeOrientedBoundingBoxForTile(this.level,this.x,this.y,this.z,this.orientedBoundingBox);let t=$.getScale(this.orientedBoundingBox.halfAxes,xIt),n=2*m.maximumComponent(t);this.approximateVoxelSize=n/m.minimumComponent(this.dimensions)};km.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,h=t+1,p=[[h,r,s,a],[h,d,s,a],[h,r,c,a],[h,d,c,a],[h,r,s,u],[h,d,s,u],[h,r,c,u],[h,d,c,u]];this.children=p.map(([g,f,b,x])=>new km(g,f,b,x,this,e,this.dimensions))};km.prototype.visibility=function(e,t){let n=this.orientedBoundingBox;return e.cullingVolume.computeVisibilityWithPlaneMask(n,t)};km.prototype.computeScreenSpaceError=function(e,t){let n=this.orientedBoundingBox,i=Math.sqrt(n.distanceSquaredTo(e));i=Math.max(i,Z.EPSILON7);let o=this.approximateVoxelSize,r=t*(o/i);this.screenSpaceError=r};var IEe={keyframe:0};function Zv(e,t){return IEe.keyframe=e,Yo(t,IEe,Go.searchComparator)}km.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:h}=t;if(h.length>=1){let p=IIt(i,h),g=h[p],f=o===i||i<g.keyframe?p:Math.min(p+1,h.length-1),b=h[f],x=i-g.keyframe,I=_Ee(n-t.level,x);I<a&&(a=I,r=g);let _=b.keyframe-o,E=_Ee(n-t.level,_);if(E<c&&(c=E,s=b),x===0&&_===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:Z.clamp((e-d)/(u-d),0,1)};function IIt(e,t){let n=Zv(e,t);return n<0?Z.clamp(~n-1,0,t.length-1):n}function _Ee(e,t){let n=Math.exp(e*4),i=t>=0?1:-200;return e*n+t*i}km.prototype.isVisited=function(e){return this.visitedFrameNumber===e};km.prototype.createKeyframeNode=function(e){let t=Zv(e,this.keyframeNodes);if(t<0){t=~t;let n=new Go(this,e);this.keyframeNodes.splice(t,0,n)}};km.prototype.destroyKeyframeNode=function(e,t){let n=e.keyframe,i=Zv(n,this.keyframeNodes);if(i<0)throw new Ae("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=Zv(n,this.renderableKeyframeNodes);if(o<0)throw new Ae("Renderable keyframe node does not exist.");this.renderableKeyframeNodes.splice(o,1)}e.unload()};km.prototype.addKeyframeNodeToMegatextures=function(e,t){if(e.megatextureIndex!==-1||e.content.metadata.length!==t.length)throw new Ae("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=Zv(e.keyframe,i);if(o>=0)throw new Ae("Keyframe already renderable");o=~o,i.splice(o,0,e)};km.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 Bv=km;function gy(e,t,n,i){let{provider:o,dimensions:r,paddingBefore:s,paddingAfter:a}=e,{types:c,componentTypes:d,metadataOrder:u}=o,h=m.add(r,s,new m);if(m.add(h,a,h),u===Um.Y_UP){let E=h.y;h.y=h.z,h.z=E}!l(i)&&l(o.maximumTileCount)&&(i=WIt(o.maximumTileCount,h,c,d)),this._primitive=e,this.textureMemoryByteLength=0,this.megatextures=new Array(c.length);for(let E=0;E<c.length;E++){let S=c[E],R=bt.getComponentCount(S),G=d[E];this.megatextures[E]=new yL(t,h,R,G,i),this.textureMemoryByteLength+=this.megatextures[E].textureMemoryByteLength}let p=this.megatextures[0].maximumTileCount;this._simultaneousRequestCount=0,this._debugPrint=!1,this._calculateStatistics=this._primitive._calculateStatistics??!1,this._frameNumber=0;let g=e._shape;this.rootNode=new Bv(0,0,0,0,void 0,g,r),this._priorityQueue=new e_({maximumLength:p,comparator:Go.priorityComparator}),this._highPriorityKeyframeNodes=new Array(p),this._highPriorityKeyframeNodeCount=0,this._keyframeNodesInMegatexture=new Array(p),this._keyframeCount=n,this._sampleCount=void 0,this._keyframeLocation=0,this._binaryTreeKeyframeWeighting=new Array(n),this._initialTilesLoaded=!1;let f=this._binaryTreeKeyframeWeighting;f[0]=0,f[n-1]=0,z6(f,1,n-2,0);let b=9,x=2048,I=Math.floor(x/b),_=Math.ceil(p/I);this.internalNodeTexture=new Wt({context:t,pixelFormat:tt.RGBA,pixelDatatype:Ye.UNSIGNED_BYTE,flipY:!1,width:x,height:_,sampler:new sn({minificationFilter:en.NEAREST,magnificationFilter:pi.NEAREST})}),this.internalNodeTilesPerRow=I,this.internalNodeTexelSizeUv=new D(1/x,1/_),this.leafNodeTexture=void 0,this.leafNodeTilesPerRow=void 0,this.leafNodeTexelSizeUv=new D}gy.prototype.findKeyframeNode=function(e){return this._keyframeNodesInMegatexture.find(function(t){return t.megatextureIndex===e})};function z6(e,t,n,i){if(t>n)return;let o=Math.floor((t+n)/2);e[o]=i,z6(e,t,o-1,i+1),z6(e,o+1,n,i+1)}gy.simultaneousRequestCountMaximum=50;gy.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,h=(d?2:1)*(u?2:1);this._sampleCount=h;let p=h>=2;if(p&&!l(this.leafNodeTexture)){let E=Math.floor(512),S=Math.ceil(s/E);this.leafNodeTexture=new Wt({context:r,pixelFormat:tt.RGBA,pixelDatatype:Ye.UNSIGNED_BYTE,flipY:!1,width:1024,height:S,sampler:new sn({minificationFilter:en.NEAREST,magnificationFilter:pi.NEAREST})}),this.leafNodeTexelSizeUv=D.fromElements(1/1024,1/S,this.leafNodeTexelSizeUv),this.leafNodeTilesPerRow=E}else!p&&l(this.leafNodeTexture)&&(this.leafNodeTexture=this.leafNodeTexture.destroy());if(this._keyframeLocation=Z.clamp(t,0,a-1),n&&EEe(this,this.rootNode),i)return;this._frameNumber=e.frameNumber;let g=Fi();TIt(this,e),SIt(this,e);let f=Fi();ZIt(this,h,c);let b=Fi(),x=o.loadProgress.numberOfListeners>0||o.allTilesLoaded.numberOfListeners>0||o.initialTilesLoaded.numberOfListeners>0;if(this._debugPrint||this._calculateStatistics||x){let I=f-g,_=b-f,E=b-g;GIt(this,e,I,_,E)}};gy.prototype.isRenderable=function(e){return e.isRenderable(this._frameNumber)};gy.prototype.isDestroyed=function(){return!1};gy.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 EEe(e,t){if(t.computeBoundingVolumes(e._primitive._shape),l(t.children))for(let n=0;n<8;n++){let i=t.children[n];EEe(e,i)}}function _It(e,t){if(e._simultaneousRequestCount>=gy.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)?Go.LoadState.PROCESSING:Go.LoadState.UNAVAILABLE}function a(u){e._simultaneousRequestCount--,t.state=Go.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=Go.LoadState.RECEIVING,d.then(s).catch(a))}function EIt(e){return e/(1+e)}function TIt(e,t){let n=e._frameNumber,i=e._priorityQueue;i.reset(),TEe(e.rootNode,Xs.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 SIt(e,t){let n=e.megatextures[0],i=n.occupiedCount,o=e._keyframeNodesInMegatexture;o.length=i,o.sort(LIt);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===Go.LoadState.LOADED||u.spatialNode===void 0)&&(u.state===Go.LoadState.UNLOADED&&_It(e,u),u.state===Go.LoadState.PROCESSING)){let{content:h}=u;if(h.update(e._primitive,t),!h.ready)continue;if(!RIt(h.metadata,e)){u.content=void 0,u.state=Go.LoadState.FAILED,e._primitive.tileFailed.raiseEvent();continue}let p=0;if(n.isFull()){p=i-1-a,a++;let g=o[p];e._primitive.tileUnload.raiseEvent(),g.spatialNode.destroyKeyframeNode(g,e.megatextures)}else p=i+c,c++;u.spatialNode.addKeyframeNodeToMegatextures(u,e.megatextures),u.state=Go.LoadState.LOADED,o[p]=u,e._primitive.tileLoad.raiseEvent()}}}function LIt(e,t){return e.highPriorityFrameNumber===t.highPriorityFrameNumber?t.priority-e.priority:t.highPriorityFrameNumber-e.highPriorityFrameNumber}function RIt(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,h=e[o],p=u*s;if(h.length!==p)return!1}return!0}function TEe(e,t,n,i){let{camera:o,context:r,pixelRatio:s,frameNumber:a}=i,{positionWC:c,frustum:d}=o,h=r.drawingBufferHeight/s/d.sseDenominator;if(e.computeScreenSpaceError(c,h),t=e.visibility(i,t),t===Xs.MASK_OUTSIDE)return;e.visitedFrameNumber=a;let p=n._primitive,g=p._shape,f=p.screenSpaceError,b=n._priorityQueue,x=n._keyframeCount,I=Z.clamp(Math.floor(n._keyframeLocation),0,x-2),_=I+1;if(x===1)e.createKeyframeNode(0);else if(e.keyframeNodes.length!==x)for(let B=0;B<x;B++)e.createKeyframeNode(B);let{screenSpaceError:E,keyframeNodes:S}=e,R=EIt(E),G=!1;for(let B=0;B<S.length;B++){let w=S[B];w.priority=10*R+VIt(I,w.keyframe,_,n),w.state!==Go.LoadState.UNAVAILABLE&&w.state!==Go.LoadState.FAILED&&w.priority!==-Number.MAX_VALUE&&b.insert(w),w.state===Go.LoadState.LOADED&&(G=!0)}if(E<f||!G){e.children=void 0;return}l(e.children)||e.constructChildNodes(g);for(let B=0;B<8;B++){let w=e.children[B];TEe(w,t,n,i)}}function VIt(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 Z.lerp(a,s,.15+.85*s)}function GIt(e,t,n,i,o){let r=e._keyframeCount,s=e.rootNode,a=Object.keys(Go.LoadState).length,c=new Array(a),d=new Array(a),u=0;for(let G=0;G<a;G++){let B=new Array(r).fill(0);c[G]=B,d[G]=0}function h(G){let B=G.keyframeNodes;for(let w=0;w<B.length;w++){let F=B[w],P=F.keyframe,A=F.state;c[A][P]+=1,d[A]+=1,u++}if(l(G.children))for(let w=0;w<8;w++){let F=G.children[w];h(F)}}h(s),e._primitive.statistics.numberOfTilesWithContentReady=d[Go.LoadState.LOADED],e._primitive.statistics.visited=u;let p=d[Go.LoadState.RECEIVING],g=d[Go.LoadState.PROCESSING],f=p!==e._primitive.statistics.numberOfPendingRequests||g!==e._primitive.statistics.numberOfTilesProcessing;if(f&&t.afterRender.push(function(){return e._primitive.loadProgress.raiseEvent(p,g),!0}),e._primitive.statistics.numberOfPendingRequests=p,e._primitive.statistics.numberOfTilesProcessing=g,f&&(p===0&&g===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 x=`KEYFRAMES: ${c[Go.LoadState.LOADED]}`,I=`UNLOADED: ${d[Go.LoadState.UNLOADED]} | RECEIVING: ${d[Go.LoadState.RECEIVING]} | PROCESSING: ${d[Go.LoadState.PROCESSING]} | LOADED: ${d[Go.LoadState.LOADED]} | FAILED: ${d[Go.LoadState.FAILED]} | UNAVAILABLE: ${d[Go.LoadState.UNAVAILABLE]} | TOTAL: ${u}`,_=Math.round(n*100)/100,E=Math.round(i*100)/100,S=Math.round(o*100)/100,R=`LOAD: ${_} | OCT: ${E} | ALL: ${S}`;console.log(`${x} || ${I} || ${R}`)}var LY={INTERNAL:0,LEAF:1,PACKED_LEAF_FROM_PARENT:2};function ZIt(e,t,n){let i=e._primitive._screenSpaceError,o=e._keyframeLocation,r=e._frameNumber,s=t>=2,a=0,c=0,d=[],u=[];function h(g,f,b,x,I){let _=!1;if(l(g.children))for(let E=0;E<8;E++){let S=g.children[E];S.computeSurroundingRenderableKeyframeNodes(o),S.isRenderable(r)&&(_=!0)}if(_){d[I]=LY.INTERNAL<<16|f,d[b]=x,a++,x=f,I=x*9+1;for(let E=0;E<8;E++){let S=g.children[E];f=a,b=f*9+0,h(S,f,b,x,I+E)}}else{if(e._primitive.tileVisible.raiseEvent(),s){let E=c*5,S=g.renderableKeyframeNodePrevious,R=g.level-S.spatialNode.level,G=S.spatialNode.parent,B=l(G)?G.renderableKeyframeNodePrevious:S,w=BIt(g,i,n),F=R,P=1,A=S.megatextureIndex,T=B.megatextureIndex;u[E+0]=w,u[E+1]=F,u[E+2]=P,u[E+3]=A,u[E+4]=T,d[I]=LY.LEAF<<16|c}else{let E=g.renderableKeyframeNodePrevious,R=g.level-E.spatialNode.level===0?LY.LEAF:LY.PACKED_LEAF_FROM_PARENT;d[I]=R<<16|E.megatextureIndex}c++}}let p=e.rootNode;p.computeSurroundingRenderableKeyframeNodes(o),p.isRenderable(r)&&h(p,0,0,0,0),wIt(d,9,e.internalNodeTilesPerRow,e.internalNodeTexture),s&&XIt(u,2,e.leafNodeTilesPerRow,e.leafNodeTexture)}function BIt(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 Z.clamp(s,0,1)}function wIt(e,t,n,i){let o=tt.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 h=0;h<e.length;h++){let p=e[h],g=h*o;for(let f=0;f<o;f++)c[g+f]=p>>>f*8&255}let u={source:{arrayBufferView:c,width:s,height:a},xOffset:0,yOffset:0};i.copyFrom(u)}function XIt(e,t,n,i){let o=tt.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 g=e[p*r+0],f=e[p*r+1],b=e[p*r+2],x=e[p*r+3],I=e[p*r+4],_=Z.clamp(Math.floor(65536*g),0,65535);d[p*8+0]=_>>>0&255,d[p*8+1]=_>>>8&255,d[p*8+2]=f&255,d[p*8+3]=b&255,d[p*8+4]=x>>>0&255,d[p*8+5]=x>>>8&255,d[p*8+6]=I>>>0&255,d[p*8+7]=I>>>8&255}let h={source:{arrayBufferView:d,width:a,height:c},xOffset:0,yOffset:0};i.copyFrom(h)}function WIt(e,t,n,i){let o=0,r=n.length;for(let s=0;s<r;s++){let a=n[s],c=i[s],d=bt.getComponentCount(a);o+=yL.getApproximateTextureMemoryByteLength(e,t,d,c)}return o}var wv=gy;function Pp(e){e=e??Y.EMPTY_OBJECT,this._ready=!1,this._provider=e.provider??Pp.DefaultProvider,this._traversal=void 0,this._statistics=new Nh,this._calculateStatistics=e.calculateStatistics??!1,this._shape=void 0,this._shapeVisible=!1,this._dimensions=new m,this._inputDimensions=new m,this._paddingBefore=new m,this._paddingAfter=new m,this._minBounds=new m,this._minBoundsOld=new m,this._maxBounds=new m,this._maxBoundsOld=new m,this._exaggeratedMinBounds=new m,this._exaggeratedMinBoundsOld=new m,this._exaggeratedMaxBounds=new m,this._exaggeratedMaxBoundsOld=new m,this._minClippingBounds=new m,this._minClippingBoundsOld=new m,this._maxClippingBounds=new m,this._maxClippingBoundsOld=new m,this._clippingPlanes=void 0,this._clippingPlanesState=0,this._clippingPlanesEnabled=!1,this._modelMatrix=X.clone(e.modelMatrix??X.IDENTITY),this._exaggeratedModelMatrix=X.clone(this._modelMatrix),this._compoundModelMatrix=new X,this._compoundModelMatrixOld=new X,this._customShader=e.customShader??Pp.DefaultCustomShader,this._customShaderCompilationEvent=new Ce,this._shaderDirty=!0,this._drawCommand=void 0,this._drawCommandPick=void 0,this._pickId=void 0,this._clock=e.clock,this._transformPositionWorldToUv=new X,this._transformDirectionWorldToUv=new $,this._transformPositionUvToWorld=new X,this._transformDirectionWorldToLocal=new $,this._nearestSampling=!1,this._levelBlendFactor=0,this._stepSizeMultiplier=1,this._depthTest=!0,this._useLogDepth=void 0,this._screenSpaceError=4,this._debugPolylines=new Wh,this._debugDraw=!1,this._disableRender=!1,this._disableUpdate=!1,this._uniforms={octreeInternalNodeTexture:void 0,octreeInternalNodeTilesPerRow:0,octreeInternalNodeTexelSizeUv:new D,octreeLeafNodeTexture:void 0,octreeLeafNodeTilesPerRow:0,octreeLeafNodeTexelSizeUv:new D,megatextureTextures:[],megatextureSliceDimensions:new D,megatextureTileDimensions:new D,megatextureVoxelSizeUv:new D,megatextureSliceSizeUv:new D,megatextureTileSizeUv:new D,dimensions:new m,inputDimensions:new m,paddingBefore:new m,paddingAfter:new m,transformPositionViewToUv:new X,transformPositionUvToView:new X,transformDirectionViewToLocal:new $,cameraPositionUv:new m,cameraDirectionUv:new m,ndcSpaceAxisAlignedBoundingBox:new ce,clippingPlanesTexture:void 0,clippingPlanesMatrix:new X,stepSize:0,pickColor:new U},this._shapeDefinesOld={},this._uniformMap={};let t=this._uniforms,n=this._uniformMap;for(let o in t)if(t.hasOwnProperty(o)){let r=`u_${o}`;n[r]=function(){return t[o]}}this.tileLoad=new Ce,this.tileVisible=new Ce,this.tileFailed=new Ce,this.tileUnload=new Ce,this.loadProgress=new Ce,this.allTilesLoaded=new Ce,this.initialTilesLoaded=new Ce;let i=this._provider;FIt(this,i)}function FIt(e,t){let{shape:n,minBounds:i=qa.getMinBounds(n),maxBounds:o=qa.getMaxBounds(n)}=t;e.minBounds=i,e.maxBounds=o,e.minClippingBounds=i.clone(),e.maxClippingBounds=o.clone(),e._exaggeratedMinBounds=m.clone(e._minBounds,e._exaggeratedMinBounds),e._exaggeratedMaxBounds=m.clone(e._maxBounds,e._exaggeratedMaxBounds),e._exaggeratedModelMatrix=X.clone(e._modelMatrix,e._exaggeratedModelMatrix),LEe(e,t);let r=qa.getShapeConstructor(n);e._shape=new r,e._shapeVisible=REe(e,e._shape,t)}Object.defineProperties(Pp.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=X.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&&(this._nearestSampling=e,this._shaderDirty=!0)}},levelBlendFactor:{get:function(){return this._levelBlendFactor},set:function(e){this._levelBlendFactor=Z.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=m.clone(e,this._minBounds)}},maxBounds:{get:function(){return this._maxBounds},set:function(e){this._maxBounds=m.clone(e,this._maxBounds)}},minClippingBounds:{get:function(){return this._minClippingBounds},set:function(e){this._minClippingBounds=m.clone(e,this._minClippingBounds)}},maxClippingBounds:{get:function(){return this._maxClippingBounds},set:function(e){this._maxClippingBounds=m.clone(e,this._maxClippingBounds)}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){Ws.setOwner(e,this,"_clippingPlanes")}},customShader:{get:function(){return this._customShader},set:function(e){if(this._customShader!==e){let t=this._uniformMap,i=this._customShader.uniformMap;for(let o in i)i.hasOwnProperty(o)&&delete t[o];l(e)?this._customShader=e:this._customShader=Pp.DefaultCustomShader,this._shaderDirty=!0}}},customShaderCompilationEvent:{get:function(){return this._customShaderCompilationEvent}},statistics:{get:function(){return this._statistics}}});var PIt=new ce,MIt=new ce,vIt=new X,NIt=new X,DIt=new X,QIt=X.fromRotationTranslation($.fromUniformScale(.5,new $),new m(.5,.5,.5),new X),UIt=X.fromRotationTranslation($.fromUniformScale(2,new $),new m(-1,-1,-1),new X);Pp.prototype.update=function(e){let t=this._provider;this._customShader.update(e);let n=e.context;if(!this._ready){KIt(this,t,n),e.afterRender.push(()=>(this._ready=!0,!0));return}HIt(this,e);let i=LEe(this,t),o=this._shape;if(i&&(this._shapeVisible=REe(this,o,t),jIt(this,o)&&(this._shaderDirty=!0)),!this._shapeVisible)return;let r=qIt(t.timeIntervalCollection,this._clock),s=this._traversal,a=s._sampleCount;if(s.update(e,r,i,this._disableUpdate),a!==s._sampleCount&&(this._shaderDirty=!0),!s.isRenderable(s.rootNode)||(this._debugDraw&&s_t(this,e),this._disableRender))return;this._useLogDepth!==e.useLogDepth&&(this._useLogDepth=e.useLogDepth,this._shaderDirty=!0),$It(this,e)&&(this._shaderDirty=!0);let d=s.leafNodeTexture,u=this._uniforms;l(d)&&(u.octreeLeafNodeTexture=s.leafNodeTexture,u.octreeLeafNodeTexelSizeUv=D.clone(s.leafNodeTexelSizeUv,u.octreeLeafNodeTexelSizeUv),u.octreeLeafNodeTilesPerRow=s.leafNodeTilesPerRow),this._shaderDirty&&(Tv(this,n),this._shaderDirty=!1);let h=n.uniformState.viewProjection,p=o.orientedBoundingBox,g=n_t(p,h,MIt);if(g.x===1||g.y===1||g.z===-1||g.w===-1)return;u.ndcSpaceAxisAlignedBoundingBox=ce.clone(g,u.ndcSpaceAxisAlignedBoundingBox);let b=n.uniformState.inverseView;u.transformPositionViewToUv=X.multiplyTransformation(this._transformPositionWorldToUv,b,u.transformPositionViewToUv);let x=n.uniformState.view;u.transformPositionUvToView=X.multiplyTransformation(x,this._transformPositionUvToWorld,u.transformPositionUvToView);let I=n.uniformState.inverseViewRotation;u.transformDirectionViewToLocal=$.multiply(this._transformDirectionWorldToLocal,I,u.transformDirectionViewToLocal),u.cameraPositionUv=X.multiplyByPoint(this._transformPositionWorldToUv,e.camera.positionWC,u.cameraPositionUv),u.cameraDirectionUv=$.multiplyByVector(this._transformDirectionWorldToUv,e.camera.directionWC,u.cameraDirectionUv),u.cameraDirectionUv=m.normalize(u.cameraDirectionUv,u.cameraDirectionUv),u.stepSize=this._stepSizeMultiplier;let _=e.passes.pick?this._drawCommandPick:e.passes.pickVoxel?this._drawCommandPickVoxel:this._drawCommand;_.boundingVolume=o.boundingSphere,e.commandList.push(_)};var kIt=new m,K6=new m,YIt=new ge,OIt=new m;function HIt(e,t){if(e._exaggeratedMinBounds=m.clone(e._minBounds,e._exaggeratedMinBounds),e._exaggeratedMaxBounds=m.clone(e._maxBounds,e._exaggeratedMaxBounds),e.shape===qa.ELLIPSOID){let n=t.verticalExaggerationRelativeHeight,i=t.verticalExaggeration;e._exaggeratedMinBounds.z=(e._minBounds.z-n)*i+n,e._exaggeratedMaxBounds.z=(e._maxBounds.z-n)*i+n}else{let n=m.fromElements(1,1,t.verticalExaggeration,kIt);e._exaggeratedModelMatrix=X.multiplyByScale(e._modelMatrix,n,e._exaggeratedModelMatrix),e._exaggeratedModelMatrix=X.multiplyByTranslation(e._exaggeratedModelMatrix,zIt(e,t),e._exaggeratedModelMatrix)}}function zIt(e,t){let{shapeTransform:n=X.IDENTITY,globalTransform:i=X.IDENTITY}=e._provider,o=X.getTranslation(n,K6),r=X.multiplyByPoint(e._modelMatrix,o,K6),s=X.multiplyByPoint(i,r,K6),c=ie.WGS84.cartesianToCartographic(s,YIt),d=0;l(c)&&(d=c.height);let u=Mr.getHeight(d,t.verticalExaggeration,t.verticalExaggerationRelativeHeight);return m.fromElements(0,0,(u-d)/t.verticalExaggeration,OIt)}function KIt(e,t,n){let i=e._uniforms;e._pickId=n.createPickId({primitive:e}),i.pickColor=U.clone(e._pickId.color,i.pickColor);let{shaderDefines:o,shaderUniforms:r}=e._shape;e._shapeDefinesOld=ke(o,!0);let s=e._uniformMap;for(let c in r)if(r.hasOwnProperty(c)){let d=`u_${c}`;s[d]=function(){return r[c]}}if(e._dimensions=m.clone(t.dimensions,e._dimensions),i.dimensions=m.clone(e._dimensions,i.dimensions),e._paddingBefore=m.clone(t.paddingBefore??m.ZERO,e._paddingBefore),i.paddingBefore=m.clone(e._paddingBefore,i.paddingBefore),e._paddingAfter=m.clone(t.paddingAfter??m.ZERO,e._paddingAfter),i.paddingAfter=m.clone(e._paddingAfter,i.paddingAfter),e._inputDimensions=m.add(e._dimensions,e._paddingBefore,e._inputDimensions),e._inputDimensions=m.add(e._inputDimensions,e._paddingAfter,e._inputDimensions),t.metadataOrder===Um.Y_UP){let c=e._inputDimensions.y;e._inputDimensions.y=e._inputDimensions.z,e._inputDimensions.z=c}i.inputDimensions=m.clone(e._inputDimensions,i.inputDimensions);let a=t.keyframeCount??1;e._traversal=new wv(e,n,a),e.statistics.texturesByteLength=e._traversal.textureMemoryByteLength,JIt(e._traversal,i)}function LEe(e,t){let n=t.shapeTransform??X.IDENTITY,i=t.globalTransform??X.IDENTITY;return X.multiplyTransformation(i,e._exaggeratedModelMatrix,e._compoundModelMatrix),X.multiplyTransformation(e._compoundModelMatrix,n,e._compoundModelMatrix),t_(e,"_compoundModelMatrix","_compoundModelMatrixOld")+t_(e,"_minBounds","_minBoundsOld")+t_(e,"_maxBounds","_maxBoundsOld")+t_(e,"_exaggeratedMinBounds","_exaggeratedMinBoundsOld")+t_(e,"_exaggeratedMaxBounds","_exaggeratedMaxBoundsOld")+t_(e,"_minClippingBounds","_minClippingBoundsOld")+t_(e,"_maxClippingBounds","_maxClippingBoundsOld")>0}function t_(e,t,n){let i=e[t],o=e[n],r=!i.equals(o);return r&&i.clone(o),r?1:0}function REe(e,t,n){if(!t.update(e._compoundModelMatrix,e._exaggeratedMinBounds,e._exaggeratedMaxBounds,e.minClippingBounds,e.maxClippingBounds))return!1;let o=t.shapeTransform,r=X.inverse(o,vIt);return e._transformPositionWorldToUv=X.multiplyTransformation(QIt,r,e._transformPositionWorldToUv),e._transformDirectionWorldToUv=X.getMatrix3(e._transformPositionWorldToUv,e._transformDirectionWorldToUv),e._transformPositionUvToWorld=X.multiplyTransformation(o,UIt,e._transformPositionUvToWorld),e._transformDirectionWorldToLocal=X.getMatrix3(r,e._transformDirectionWorldToLocal),!0}function JIt(e,t){t.octreeInternalNodeTexture=e.internalNodeTexture,t.octreeInternalNodeTexelSizeUv=D.clone(e.internalNodeTexelSizeUv,t.octreeInternalNodeTexelSizeUv),t.octreeInternalNodeTilesPerRow=e.internalNodeTilesPerRow;let n=e.megatextures,i=n[0],o=n.length;t.megatextureTextures=new Array(o);for(let r=0;r<o;r++)t.megatextureTextures[r]=n[r].texture;t.megatextureSliceDimensions=D.clone(i.sliceCountPerRegion,t.megatextureSliceDimensions),t.megatextureTileDimensions=D.clone(i.regionCountPerMegatexture,t.megatextureTileDimensions),t.megatextureVoxelSizeUv=D.clone(i.voxelSizeUv,t.megatextureVoxelSizeUv),t.megatextureSliceSizeUv=D.clone(i.sliceSizeUv,t.megatextureSliceSizeUv),t.megatextureTileSizeUv=D.clone(i.regionSizeUv,t.megatextureTileSizeUv)}function jIt(e,t){let n=t.shaderDefines,i=Object.keys(n).some(o=>n[o]!==e._shapeDefinesOld[o]);return i&&(e._shapeDefinesOld=ke(n,!0)),i}function qIt(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=j.secondsDifference(i.stop,i.start),a=j.secondsDifference(n,i.start)/r;return o+a}function $It(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=X.transpose(X.multiplyTransformation(X.inverse(n.modelMatrix,r.clippingPlanesMatrix),e._transformPositionUvToWorld,r.clippingPlanesMatrix),r.clippingPlanesMatrix)}return e._clippingPlanesState===i&&e._clippingPlanesEnabled===o?!1:(e._clippingPlanesState=i,e._clippingPlanesEnabled=o,!0)}Pp.prototype.isDestroyed=function(){return!1};Pp.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 SEe=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)),e_t=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),t_t=new Array(new ce,new ce,new ce,new ce,new ce,new ce,new ce,new ce);function n_t(e,t,n){let i=X.fromRotationTranslation(e.halfAxes,e.center,NIt),o=X.multiply(t,i,DIt),r=+Number.MAX_VALUE,s=-Number.MAX_VALUE,a=+Number.MAX_VALUE,c=-Number.MAX_VALUE,d,u=t_t,h=SEe.length;for(d=0;d<h;d++)X.multiplyByVector(o,SEe[d],u[d]);for(d=0;d<h;d++){let p=u[d];if(p.z>=-p.w){let g=p.x/p.w,f=p.y/p.w;r=Math.min(r,g),s=Math.max(s,g),a=Math.min(a,f),c=Math.max(c,f)}else for(let g=0;g<3;g++){let f=e_t[d*3+g],b=u[f];if(b.z>=-b.w){let x=p.z+p.w,I=b.z+b.w,_=x/(x-I),E=ce.lerp(p,b,_,PIt),S=E.x/E.w,R=E.y/E.w;r=Math.min(r,S),s=Math.max(s,S),a=Math.min(a,R),c=Math.max(c,R)}}}return r=Z.clamp(r,-1,1),a=Z.clamp(a,-1,1),s=Z.clamp(s,-1,1),c=Z.clamp(c,-1,1),n=ce.fromElements(r,a,s,c,n),n}var J6=3e7,i_t=new m(J6,0,0),o_t=new m(0,J6,0),r_t=new m(0,0,J6);function s_t(e,t){let n=e._traversal,i=e._debugPolylines;i.removeAll();function o(c,d,u,h){i.add({positions:[c,d],width:h,material:so.fromType("Color",{color:u})})}function r(c,d,u){let h=c.computeCorners();o(h[0],h[1],d,u),o(h[2],h[3],d,u),o(h[4],h[5],d,u),o(h[6],h[7],d,u),o(h[0],h[2],d,u),o(h[4],h[6],d,u),o(h[1],h[3],d,u),o(h[5],h[7],d,u),o(h[0],h[4],d,u),o(h[2],h[6],d,u),o(h[1],h[5],d,u),o(h[3],h[7],d,u)}function s(c){if(!n.isRenderable(c))return;let d=c.level,h=Math.max(1,5/Math.pow(2,d)),g=[U.RED,U.LIME,U.BLUE][d%3];if(r(c.orientedBoundingBox,g,h),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(m.ZERO,i_t,U.RED,a),o(m.ZERO,o_t,U.LIME,a),o(m.ZERO,r_t,U.BLUE,a),i.update(t)}Pp.DefaultCustomShader=new KI({fragmentShaderText:`void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) { material.diffuse = vec3(1.0); material.alpha = 1.0; }`});function VEe(){this.ready=!0,this.shape=qa.BOX,this.dimensions=new m(1,1,1),this.names=["data"],this.types=[bt.SCALAR],this.componentTypes=[Ut.FLOAT32],this.maximumTileCount=1}VEe.prototype.requestData=function(e){if((l(e)?e.tileLevel??0:0)>=1)return;let n=new JI({metadata:[new Float32Array(1)]});return Promise.resolve(n)};Pp.DefaultProvider=new VEe;var by=Pp;var _4i=y(C(),1);function a_t(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 Xv=a_t;var T4i=y(C(),1);function c_t(e,t,n,i,o){this.schemaId=e,this.className=t,this.propertyName=n,this.classProperty=i,this.metadataProperty=o}var Wv=c_t;var R4i=y(C(),1);function l_t(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 Fv=l_t;var VY=function(e){return function(){e.frameState.afterRender.push(function(){e.requestRender()})}};function Ei(e){e=e??Y.EMPTY_OBJECT;let t=e.canvas,n=e.creditContainer,i=e.creditViewport,o=e.contextOptions instanceof aP;if(o)this._context=e.contextOptions.createSceneContext(t);else{let d=ke(e.contextOptions);this._context=new xI(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 hM,this._frameState=new uM(r,new nM(n,"\u2022",i),this._jobScheduler),this._frameState.scene3DOnly=e.scene3DOnly??!1,this._removeCreditContainer=!s,this._creditContainer=n,this._canvas=t,this._computeEngine=new nP(r),this._ellipsoid=e.ellipsoid??ie.default,this._globe=void 0,this._globeTranslucencyState=new mM,this._primitives=new Wl({countReferences:o}),this._groundPrimitives=new Wl({countReferences:o}),this._globeHeight=void 0,this._globeHeightDirty=!0,this._cameraUnderground=!1,this._removeUpdateHeightCallback=void 0,this._logDepthBuffer=Ei.defaultLogDepthBuffer&&r.fragmentDepth,this._logDepthBufferDirty=!0,this._tweens=new kI,this._shaderFrameCount=0,this._sunPostProcess=void 0,this._computeCommandList=[],this._overlayCommandList=[],this._useOIT=e.orderIndependentTranslucency??!0,this._executeOITFunction=void 0,this._depthPlane=new cM(e.depthPlaneEllipsoidOffset),this._clearColorCommand=new xi({color:new U,stencil:0,owner:this}),this._depthClearCommand=new xi({depth:1,owner:this}),this._stencilClearCommand=new xi({stencil:0}),this._classificationStencilClearCommand=new xi({stencil:0,renderState:Qe.fromCache({stencilMask:jt.CLASSIFICATION_MASK})}),this._depthOnlyRenderStateCache={},this._transitioner=new qM(this),this._preUpdate=new Ce,this._postUpdate=new Ce,this._renderError=new Ce,this._preRender=new Ce,this._postRender=new Ce,this._minimumDisableDepthTestDistance=0,this._debugInspector=new av,this._msaaSamples=e.msaaSamples??4,this.rethrowRenderErrors=!1,this.completeMorphOnUserInput=!0,this.morphStart=new Ce,this.morphComplete=new Ce,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=re.SCENE3D,this._mapProjection=l(e.mapProjection)?e.mapProjection:new Di(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 JC,this.fog=new dM,this.fog.enabled=ie.WGS84.equals(this._ellipsoid),ie.WGS84.equals(this._ellipsoid)||(xo.DEFAULT_VIEW_RECTANGLE=le.fromDegrees(-45,-45,45,45)),this._shadowMapCamera=new xo(this),this.shadowMap=new Hg({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 uL,this.focalLength=void 0,this.eyeSeparation=void 0,this.postProcessStages=new KM,this._brdfLutGenerator=new JP,this._performanceDisplay=void 0,this._debugVolume=void 0,this._screenSpaceCameraController=new nv(this),this._cameraUnderground=!1,this._mapMode2D=e.mapMode2D??_d.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=Sc.requestCompletedEvent.addEventListener(VY(this)),this._removeTaskProcessorListenerCallback=hi.taskCompletedEvent.addEventListener(VY(this)),this._removeGlobeCallbacks=[],this._removeTerrainProviderReadyListener=void 0;let a=new Ke(0,0,r.drawingBufferWidth,r.drawingBufferHeight),c=new xo(this);this._logDepthBuffer&&(c.frustum.near=.1,c.frustum.far=1e10),this.preloadFlightCamera=new xo(this),this.preloadFlightCullingVolume=void 0,this._picking=new LM(this),this._defaultView=new FI(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 Ng,WEe(this,0,j.now()),this.updateFrameState(),this.initializeFrame()}Ei.defaultLogDepthBuffer=!0;function d_t(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(VY(e))),n.push(t.terrainProviderChanged.addEventListener(VY(e)))),e._removeGlobeCallbacks=n}Object.defineProperties(Ei.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 Kt.maximumAliasedLineWidth}},maximumCubeMapSize:{get:function(){return Kt.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 ph.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,d_t(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}},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}},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===re.SCENE2D?this.morphTo2D(0):e===re.SCENE3D?this.morphTo3D(0):e===re.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 xo(this),l(this._deviceOrientationCameraController)||(this._deviceOrientationCameraController=new lM(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,Kt.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}}});Ei.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 u_t(e,t){let n=e.pickedMetadataInfo,i=t.pickedMetadataInfo;return n?.schemaId!==i?.schemaId||n?.className!==i?.className||n?.propertyName!==i?.propertyName}function GEe(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=Vp.createPickDerivedCommand(e,t,o,c.picking)),i.pickingMetadata&&t.pickMetadataAllowed&&(t.pickedMetadataInfo=i.pickedMetadataInfo,l(t.pickedMetadataInfo)&&(c.pickingMetadata=Vp.createPickMetadataDerivedCommand(e,t,o,c.pickingMetadata))),t.pickOnly||(c.depth=Vp.createDepthOnlyDerivedCommand(e,t,o,c.depth)),c.originalCommand=t,e._hdr&&(c.hdr=Vp.createHdrCommand(t,o,c.hdr),t=c.hdr.command,c=t.derivedCommands),a&&t.receiveShadows&&(c.shadows=Hg.createReceiveDerivedCommand(s,t,n,o,c.shadows)),t.pass===Ge.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))}Ei.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),h=l(t.originalCommand),p=o&&!d,g=c&&!u,f=(!o||!c)&&!h,b=n.pickingMetadata&&u_t(e,n);if(e.dirty=e.dirty||p||g||f||b,!e.dirty)return;e.dirty=!1;let{shadowsEnabled:x,shadowMaps:I}=i;x&&e.castShadows&&(t.shadows=Hg.createCastDerivedCommand(I,e,s,r,t.shadows)),(d||p)&&(t.logDepth=Vp.createLogDepthCommand(e,r,t.logDepth),GEe(this,t.logDepth.command,s)),(h||f)&&GEe(this,e,s)};var m_t=new vm({pass:zo.RENDER}),j6=new vm({pass:zo.PRELOAD}),q6=new vm({pass:zo.PRELOAD_FLIGHT}),h_t=new vm({pass:zo.REQUEST_RENDER_MODE_DEFER_CHECK}),ZEe=new ue,$6;function f_t(e){if(!(e._mode!==re.SCENE3D||!e.globe?.show||e._cameraUnderground||e._globeTranslucencyState.translucent))return ZEe.radius=e.ellipsoid.minimumRadius+e.frameState.minimumTerrainHeight,$6=zP.fromBoundingSphere(ZEe,e.camera.positionWC,$6),$6}Ei.prototype.clearPasses=function(e){e.render=!1,e.pick=!1,e.pickVoxel=!1,e.depth=!1,e.postProcess=!1,e.offscreen=!1};function WEe(e,t,n){let i=e._frameState;i.frameNumber=t,i.time=j.clone(n,i.time)}Ei.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=f_t(this),t.minimumTerrainHeight=0,t.minimumDisableDepthTestDistance=this._minimumDisableDepthTestDistance,t.invertClassification=this.invertClassification,t.useLogDepth=this._logDepthBuffer&&!(this.camera.frustum instanceof gn||this.camera.frustum instanceof qr),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),uL.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};Ei.prototype.isVisible=function(e,t,n){if(!l(t))return!1;let{boundingVolume:i}=t;return!l(i)||!t.cull?!0:e.computeVisibility(i)===on.OUTSIDE?!1:!l(n)||!t.occlude||!i.isOccluded(n)};var RY=new X(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);RY=X.inverseTransformation(RY,RY);function p_t(e,t,n,i){let o=t._frameState,r=o.context,s=e.boundingVolume;l(t._debugVolume)&&t._debugVolume.destroy();let a=m.clone(s.center);if(o.mode!==re.SCENE3D){a=X.multiplyByPoint(RY,a,a);let f=o.mapProjection,b=f.unproject(a);a=f.ellipsoid.cartographicToCartesian(b)}let c,d,{radius:u}=s;l(u)?(c=xa.createGeometry(new xa({radii:new m(u,u,u),vertexFormat:yn.FLAT_VERTEX_FORMAT})),d=X.fromTranslation(a)):(c=sc.createGeometry(sc.fromDimensions({dimensions:new m(2,2,2),vertexFormat:yn.FLAT_VERTEX_FORMAT})),d=X.fromRotationTranslation(s.halfAxes,a,new X)),t._debugVolume=new Nn({geometryInstances:new wt({geometry:Yn.toWireframe(c),modelMatrix:d,attributes:{color:new tn(1,0,0,1)}}),appearance:new yn({flat:!0,translucent:!1}),asynchronous:!1});let h=o.commandList,p=o.commandList=[];t._debugVolume.update(o),e=p[0],o.useLogDepth&&(e=Vp.createLogDepthCommand(e,r).command);let g;l(i)&&(g=n.framebuffer,n.framebuffer=i),e.execute(r,n),l(g)&&(n.framebuffer=g),o.commandList=h}function gf(e,t,n,i){let o=t._frameState,r=t._context;if(l(t.debugCommandFilter)&&!t.debugCommandFilter(e))return;if(e instanceof xi){e.execute(r,n);return}e.debugShowBoundingVolume&&l(e.boundingVolume)&&p_t(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.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 BEe(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 FEe(e,t,n){return t.boundingVolume.distanceSquaredTo(n)-e.boundingVolume.distanceSquaredTo(n)}var A_t=new m;function wEe(e,t){let n=m.subtract(e,t,A_t),i=Math.max(0,m.magnitude(n));return i*i}function g_t(e,t,n){let i=e.boundingVolume,o=t.boundingVolume;return wEe(o.center,n)-wEe(i.center,n)}function b_t(e,t,n){return e.boundingVolume.distanceSquaredTo(n)-t.boundingVolume.distanceSquaredTo(n)+Z.EPSILON12}function y_t(e,t,n,i,o){Sp(i,FEe,e.camera.positionWC),l(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function C_t(e,t,n,i,o){Sp(i,b_t,e.camera.positionWC),l(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function x_t(e,t,n){e.context.uniformState.updatePass(Ge.VOXELS);let i=n.commands[Ge.VOXELS];i.length=n.indices[Ge.VOXELS],Sp(i,FEe,e.camera.positionWC);for(let o=0;o<i.length;++o)gf(i[o],e,t)}function I_t(e,t,n){e.context.uniformState.updatePass(Ge.GAUSSIAN_SPLATS);let i=n.commands[Ge.GAUSSIAN_SPLATS];i.length=n.indices[Ge.GAUSSIAN_SPLATS],Sp(i,g_t,e.camera.positionWC);for(let o=0;o<i.length;++o)gf(i[o],e,t)}var __t=new Ni,E_t=new vl,T_t=new gn,S_t=new qr;function L_t(e){let{frustum:t}=e;return l(t.fov)?t.clone(__t):l(t.infiniteProjectionMatrix)?t.clone(E_t):l(t.width)?t.clone(T_t):t.clone(S_t)}function R_t(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?y_t:C_t}function V_t(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=R_t(e);o.uniformState.updatePass(Ge.TRANSLUCENT);let u=n.commands[Ge.TRANSLUCENT];u.length=n.indices[Ge.TRANSLUCENT],d(e,gf,t,u,c)}function G_t(e,t,n){let{translucentTileClassification:i,globeDepth:o}=e._view;if(!(n.indices[Ge.CESIUM_3D_TILE_CLASSIFICATION]>0)||!i.isSupported())return;let s=n.commands[Ge.TRANSLUCENT];i.executeTranslucentCommands(e,gf,t,s,o.depthStencilTexture),i.executeClassificationCommands(e,gf,t,n)}function tq(e,t){let{camera:n,context:i,frameState:o}=e,{uniformState:r}=i;r.updateCamera(n);let s=L_t(n);s.near=n.frustum.near,s.far=n.frustum.far;let a=o.passes,c=a.pick||a.pickVoxel;c||Z_t(e,t);let{clearGlobeDepth:d,renderTranslucentDepthForPick:u,useDepthPlane:h,useGlobeDepthFramebuffer:p,useInvertClassification:g,usePostProcessSelected:f}=e._environmentState,{globeDepth:b,globeTranslucencyFramebuffer:x,sceneFramebuffer:I,frustumCommandsList:_}=e._view,E=_.length,S=e._globeTranslucencyState,R=e._depthClearCommand,G=e._stencilClearCommand,B=e._classificationStencilClearCommand,w=e._depthPlane,F=n.position.z;function P(T,L){r.updatePass(L);let V=T.commands[L],W=T.indices[L];for(let M=0;M<W;++M)gf(V[M],e,t);return W}function A(T,L){r.updatePass(L);let V=T.commands[L],W=T.indices[L];for(let M=0;M<W;++M)BEe(V[M],e,t)}for(let T=0;T<E;++T){let L=E-T-1,V=_[L];e.mode===re.SCENE2D?(n.position.z=F-V.near+1,s.far=Math.max(1,V.far-V.near),s.near=1,r.update(o),r.updateFrustum(s)):(s.near=L!==0?V.near*e.opaqueFrustumNearOffset:V.near,s.far=V.far,r.updateFrustum(s)),R.execute(i,t),i.stencilBuffer&&G.execute(i,t),S.translucent?(r.updatePass(Ge.GLOBE),S.executeGlobeCommands(V,gf,x,e,t)):P(V,Ge.GLOBE),p&&b.executeCopyDepth(i,t),u||(S.translucent?(r.updatePass(Ge.TERRAIN_CLASSIFICATION),S.executeGlobeClassificationCommands(V,gf,x,e,t)):P(V,Ge.TERRAIN_CLASSIFICATION)),d&&(R.execute(i,t),h&&w.execute(i,t));let W;if(!g||c||u)W=P(V,Ge.CESIUM_3D_TILE),W>0&&(p&&(b.prepareColorTextures(i,d),b.executeUpdateDepth(i,t,b.depthStencilTexture)),u||(W=P(V,Ge.CESIUM_3D_TILE_CLASSIFICATION)));else{e._invertClassification.clear(i,t);let Q=t.framebuffer;t.framebuffer=e._invertClassification._fbo.framebuffer,W=P(V,Ge.CESIUM_3D_TILE),p&&(e._invertClassification.prepareTextures(i),b.executeUpdateDepth(i,t,e._invertClassification._fbo.getDepthStencilTexture())),W=P(V,Ge.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW),t.framebuffer=Q,e._invertClassification.executeClassified(i,t),o.invertClassificationColor.alpha===1&&e._invertClassification.executeUnclassified(i,t),W>0&&i.stencilBuffer&&B.execute(i,t),W=P(V,Ge.CESIUM_3D_TILE_CLASSIFICATION)}if(W>0&&i.stencilBuffer&&G.execute(i,t),x_t(e,t,V),P(V,Ge.OPAQUE),I_t(e,t,V),L!==0&&e.mode!==re.SCENE2D&&(s.near=V.near,r.updateFrustum(s)),V_t(e,t,V),G_t(e,t,V),i.depthTexture&&e.useDepthPicking&&(p||u)){let Q=e._picking.getPickDepth(e,L);Q.update(i,b.depthStencilTexture),Q.executeCopyDepth(i,t)}if(c||!f)continue;let M=t.framebuffer;t.framebuffer=I.getIdFramebuffer(),s.near=L!==0?V.near*e.opaqueFrustumNearOffset:V.near,s.far=V.far,r.updateFrustum(s),S.translucent?(r.updatePass(Ge.GLOBE),S.executeGlobeCommands(V,BEe,x,e,t)):A(V,Ge.GLOBE),d&&(R.framebuffer=t.framebuffer,R.execute(i,t),R.framebuffer=void 0),d&&h&&w.execute(i,t),A(V,Ge.CESIUM_3D_TILE),A(V,Ge.OPAQUE),A(V,Ge.TRANSLUCENT),t.framebuffer=M}}function Z_t(e,t){let{context:n,environmentState:i,view:o}=e;if(n.uniformState.updatePass(Ge.ENVIRONMENT),l(i.skyBoxCommand)&&gf(i.skyBoxCommand,e,t),i.isSkyAtmosphereVisible&&gf(i.skyAtmosphereCommand,e,t),i.isSunVisible&&(i.sunDrawCommand.execute(n,t),e.sunBloom&&!i.useWebVR)){let r;i.useGlobeDepthFramebuffer?r=o.globeDepth.framebuffer:i.usePostProcess?r=o.sceneFramebuffer.framebuffer:r=i.originalFramebuffer,e._sunPostProcess.execute(n),e._sunPostProcess.copy(n,r),t.framebuffer=r}i.isMoonVisible&&i.moonCommand.execute(n,t)}function PEe(e){e.context.uniformState.updatePass(Ge.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 B_t(e,t){e.context.uniformState.updatePass(Ge.OVERLAY);let n=e.context,i=e._overlayCommandList;for(let o=0;o<i.length;++o)i[o].execute(n,t)}function w_t(e,t,n){let{shadowMapCullingVolume:i,isPointLight:o,passes:r}=n,s=r.length,a=[Ge.GLOBE,Ge.CESIUM_3D_TILE,Ge.OPAQUE,Ge.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 h=s-1;h>=0;--h){let p=r[h].cullingVolume;if(e.isVisible(p,d))r[h].commandList.push(d),u=!0;else if(u)break}}}}function MEe(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;w_t(e,n,c);for(let u=0;u<d.length;++u){let h=c.passes[u],{camera:p,commandList:g}=h;s.updateCamera(p),c.updatePass(r,u);for(let f=0;f<g.length;++f){let b=g[f];s.updatePass(b.pass);let x=b.derivedCommands.shadows.castCommands[a];gf(x,e,h.passState)}}}}var X_t=new m;Ei.prototype.updateAndExecuteCommands=function(e,t){H_t(this,e,t),this._environmentState.useWebVR?W_t(this,e,t):this._frameState.mode!==re.SCENE2D||this._mapMode2D===_d.ROTATE?yy(!0,this,e):k_t(this,e)};function W_t(e,t){let n=e._view,i=n.camera,r=e._environmentState.renderTranslucentDepthForPick;vEe(e),n.createPotentiallyVisibleSet(e),PEe(e),r||MEe(e);let s=t.viewport;s.x=0,s.y=0,s.width=s.width*.5;let a=xo.clone(i,e._cameraVR);a.frustum=i.frustum;let c=i.frustum.near,d=c*(e.focalLength??5),u=e.eyeSeparation??d/30,h=m.multiplyByScalar(a.right,u*.5,X_t);i.frustum.aspectRatio=s.width/s.height;let p=.5*u*c/d;m.add(a.position,h,i.position),i.frustum.xOffset=p,tq(e,t),s.x=s.width,m.subtract(a.position,h,i.position),i.frustum.xOffset=-p,tq(e,t),xo.clone(a,i)}var F_t=new ge(Math.PI,Z.PI_OVER_TWO),P_t=new m,M_t=new m,v_t=new X,N_t=new X,D_t=new m,Q_t=new m,U_t=new Ke;function k_t(e,t){let{frameState:n,camera:i}=e,{uniformState:o}=e.context,r=t.viewport,s=Ke.clone(r,U_t);t.viewport=s;let a=F_t,c=P_t;e.mapProjection.project(a,c);let u=m.clone(i.position,M_t),h=X.clone(i.transform,N_t),p=i.frustum.clone();i._setTransform(X.IDENTITY);let g=X.computeViewportTransformation(s,0,1,v_t),f=i.frustum.projectionMatrix,b=i.positionWC.y,x=m.fromElements(Z.sign(b)*c.x-b,0,-i.positionWC.x,D_t),I=Dt.pointToGLWindowCoordinates(f,g,x,Q_t);I.x=Math.floor(I.x);let _=s.x,E=s.width;if(b===0||I.x<=_||I.x>=_+E)yy(!0,e,t);else if(Math.abs(_+E*.5-I.x)<1)s.width=I.x-s.x,i.position.x*=Z.sign(i.position.x),i.frustum.right=0,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),yy(!0,e,t),s.x=I.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),yy(!1,e,t);else if(I.x>_+E*.5){s.width=I.x-_;let S=i.frustum.right;i.frustum.right=c.x-b,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),yy(!0,e,t),s.x=I.x,s.width=_+E-I.x,i.position.x=-i.position.x,i.frustum.left=-i.frustum.right,i.frustum.right=S-i.frustum.right*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),yy(!1,e,t)}else{s.x=I.x,s.width=_+E-I.x;let S=i.frustum.left;i.frustum.left=-c.x-b,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),yy(!0,e,t),s.x=_,s.width=I.x-_,i.position.x=-i.position.x,i.frustum.right=-i.frustum.left,i.frustum.left=S-i.frustum.left*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),yy(!1,e,t)}i._setTransform(h),m.clone(u,i.position),i.frustum=p.clone(),t.viewport=r}function yy(e,t,n){let i=t._view,{renderTranslucentDepthForPick:o}=t._environmentState;e||(t.frameState.commandList.length=0),vEe(t),i.createPotentiallyVisibleSet(t),e&&(PEe(t),o||MEe(t)),tq(t,n)}var XEe=new Xs;Ei.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!==re.SCENE2D&&t.camera.frustum instanceof gn||!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(GA.fromGlobeFlags(a)),n.isReadyForAtmosphere=n.isReadyForAtmosphere||!a.show||a._surface._tilesToRender.length>0;else{let I=r.dynamicLighting;s.setDynamicLighting(I),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 x=l(this.sun)?this.sun.update(e,t.passState,this._hdr):void 0;n.sunDrawCommand=l(x)?x.drawCommand:void 0,n.sunComputeCommand=l(x)?x.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===re.SCENE2D);(n.useDepthPlane=d&&this.mode===re.SCENE3D&&c.useDepthPlane)&&this._depthPlane.update(e),n.renderTranslucentDepthForPick=!1,n.useWebVR=this._useWebVR&&this.mode!==re.SCENE2D&&!o;let h=e.mode===re.SCENE3D&&!c.sunVisibleThroughGlobe?e.occluder:void 0,p=e.cullingVolume,g=XEe.planes;for(let x=0;x<5;++x)g[x]=p.planes[x];p=XEe,n.isSkyAtmosphereVisible=l(n.skyAtmosphereCommand)&&n.isReadyForAtmosphere,n.isSunVisible=this.isVisible(p,n.sunDrawCommand,h),n.isMoonVisible=this.isVisible(p,n.moonCommand,h);let f=this.specularEnvironmentMaps,b=this._specularEnvironmentCubeMap;l(f)&&b?.url!==f?(b=b&&b.destroy(),this._specularEnvironmentCubeMap=new ph(f)):!l(f)&&l(b)&&(b.destroy(),this._specularEnvironmentCubeMap=void 0),l(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.update(e)};function Y_t(e){let t=e._frameState;e.debugShowFrustumPlanes!==e._debugShowFrustumPlanes&&(e.debugShowFrustumPlanes?e._debugFrustumPlanes=new Rp({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 O_t(e){let t=e._frameState,{passes:n,shadowState:i,shadowMaps:o}=t,r=o.length,s=r>0&&!n.pick&&!n.pickVoxel&&e.mode===re.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 vEe(e){let t=e._frameState;e._groundPrimitives.update(t),e._primitives.update(t),Y_t(e),O_t(e),e._globe&&e._globe.render(t)}function H_t(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);let d=r.useWebVR;r.originalFramebuffer=t.framebuffer,l(e.sun)&&e.sunBloom!==e._sunBloom?(e.sunBloom&&!d?e._sunPostProcess=new rv: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 h=r.useGlobeDepthFramebuffer=l(s.globeDepth);h&&(s.globeDepth.update(i,t,s.viewport,e.msaaSamples,e._hdr,r.clearGlobeDepth),s.globeDepth.clear(i,t,n));let p=s.oit,g=r.useOIT=!c&&l(p)&&p.isSupported();g&&(p.update(i,t,s.globeDepth.colorFramebufferManager,e._hdr,e.msaaSamples),p.clear(i,t,n),r.useOIT=p.isSupported());let f=e.postProcessStages,b=r.usePostProcess=!c&&(e._hdr||f.length>0||f.ambientOcclusion.enabled||f.fxaa.enabled||f.bloom.enabled);if(r.usePostProcessSelected=!1,b&&(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),b=r.usePostProcess=f.ready,r.usePostProcessSelected=b&&f.hasSelected),r.isSunVisible&&e.sunBloom&&!d?(t.framebuffer=e._sunPostProcess.update(t),e._sunPostProcess.clear(i,t,n)):h?t.framebuffer=s.globeDepth.framebuffer:b&&(t.framebuffer=s.sceneFramebuffer.framebuffer),l(t.framebuffer)&&u.execute(i,t),r.useInvertClassification=!c&&l(t.framebuffer)&&e.invertClassification){let I;if(o.invertClassificationColor.alpha===1&&h&&(I=s.globeDepth.framebuffer),l(I)||i.depthTexture){if(e._invertClassification.previousFramebuffer=I,e._invertClassification.update(i,e.msaaSamples,s.globeDepth.colorFramebufferManager),e._invertClassification.clear(i,t),o.invertClassificationColor.alpha<1&&g){let _=e._invertClassification.unclassifiedCommand,E=_.derivedCommands;E.oit=p.createDerivedCommands(_,i,E.oit)}}else r.useInvertClassification=!1}e._globeTranslucencyState.translucent&&s.globeTranslucencyFramebuffer.updateAndClear(e._hdr,s.viewport,i,t)}Ei.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,h=i.sceneFramebuffer._colorFramebuffer,p=i.sceneFramebuffer.idFramebuffer;if(s&&(e.framebuffer=c?h.framebuffer:d,i.oit.execute(t,e)),r.hasTranslucentDepth&&r.isSupported()&&r.execute(this,e),c){i.sceneFramebuffer.prepareColorTextures(t);let g=h;a&&!s&&(g=u);let f=this.postProcessStages,b=g.getColorTexture(0),x=p.getColorTexture(0),I=(u??h).getDepthStencilTexture();f.execute(t,b,I,x),f.copy(t,d)}!s&&!c&&a&&(e.framebuffer=d,o.executeCopyColor(t,e))};function z_t(e){let t=e._frameState.afterRender;for(let n=0;n<t.length;++n)t[n]()&&e.requestRender();t.length=0}function K_t(e){if(e.mode===re.MORPHING)return;let t=e.camera.positionCartographic;return e.getHeight(t)}function NEe(e,t,n){let i=Number.NEGATIVE_INFINITY;if(e instanceof Wl){let o=e.length;for(let r=0;r<o;++r){let s=e.get(r),a=NEe(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}Ei.prototype.getHeight=function(e,t){if(!l(e))return;let n=t===et.CLAMP_TO_TERRAIN||t===et.RELATIVE_TO_TERRAIN,i=t===et.CLAMP_TO_3D_TILE||t===et.RELATIVE_TO_3D_TILE;if(!l(e))return;let o=Number.NEGATIVE_INFINITY;if(!n){let s=NEe(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 eq=new ge;Ei.prototype.updateHeight=function(e,t,n){let i=this._ellipsoid,o=g=>{ge.clone(e,eq);let f;l(g)&&(f=g.height),l(f)||(f=this.getHeight(e,n)),l(f)&&(eq.height=f,t(eq))},r=n===et.CLAMP_TO_TERRAIN||n===et.RELATIVE_TO_TERRAIN,s=n===et.CLAMP_TO_3D_TILE||n===et.RELATIVE_TO_3D_TILE,a;!s&&l(this.globe)&&(a=this.globe._surface.updateHeight(e,o));let c={},d=g=>{if(r||g.isDestroyed()||!g.isCesium3DTileset)return;let f=g.updateHeight(e,o,i);c[g.id]=f};if(!r){let g=this.primitives.length;for(let f=0;f<g;++f){let b=this.primitives.get(f);d(b)}}let u=this.primitives.primitiveAdded.addEventListener(d),h=this.primitives.primitiveRemoved.addEventListener(g=>{g.isDestroyed()||!g.isCesium3DTileset||(l(c[g.id])&&c[g.id](),delete c[g.id])});return()=>{a=a&&a(),Object.values(c).forEach(g=>g()),c={},u(),h()}};function J_t(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===re.SCENE2D||n===re.MORPHING)return!1;let r=e._globeHeight;return l(r)&&o.height<r}Ei.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=K_t(this),this._globeHeightDirty=!1;let e=this.camera.positionCartographic;this._removeUpdateHeightCallback=this.updateHeight(e,t=>{this.isDestroyed()||(this._globeHeight=t.height)})}this._cameraUnderground=J_t(this),this._globeTranslucencyState.update(this),this._screenSpaceCameraController.update(),l(this._deviceOrientationCameraController)&&this._deviceOrientationCameraController.update(),this.camera.update(this._mode),this.camera._updateCameraChanged()};function j_t(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 kg({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 q_t(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 $_t(e){e.primitives.postPassesUpdate(e._frameState),Sc.update()}var eEt=new U;function tEt(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=m_t;let r=e.backgroundColor??U.BLACK;e._hdr&&(r=U.clone(r,eEt),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 Ng?m.negate(i.sunDirectionWC,e._shadowMapCamera.direction):m.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=Ke.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,B_t(e,c),l(e.globe)&&(e.globe.endFrame(t),e.globe.tilesLoaded||(e._renderRequested=!0)),n.endFrame()}function n_(e,t){try{t(e)}catch(n){if(e._renderError.raiseEvent(e,n),e.rethrowRenderErrors)throw n}}function nEt(e){return e._picking.updateMostDetailedRayPicks(e)}Ei.prototype.render=function(e){this._preUpdate.raiseEvent(this,e);let t=this._frameState;t.newFrame=!1,l(e)||(e=j.now());let n=this._view.checkForCameraUpdates(this);n&&(this._globeHeightDirty=!0);let i=!this.requestRenderMode||this._renderRequested||n||this._logDepthBufferDirty||this._hdrDirty||this.mode===re.MORPHING;if(!i&&l(this.maximumRenderTimeChange)&&l(this._lastRenderTime)){let o=Math.abs(j.secondsDifference(this._lastRenderTime,e));i=i||o>this.maximumRenderTimeChange}if(i){this._lastRenderTime=j.clone(e,this._lastRenderTime),this._renderRequested=!1,this._logDepthBufferDirty=!1,this._hdrDirty=!1;let o=Z.incrementWrap(t.frameNumber,15e6,1);WEe(this,o,e),t.newFrame=!0}n_(this,q_t),this.primitives.show&&(n_(this,nEt),n_(this,iEt),n_(this,oEt),i||n_(this,rEt)),this._postUpdate.raiseEvent(this,e),i&&(this._preRender.raiseEvent(this,e),t.creditDisplay.beginFrame(),n_(this,tEt)),j_t(this,i),n_(this,$_t),z_t(this),i&&(this._postRender.raiseEvent(this,e),t.creditDisplay.endFrame())};Ei.prototype.forceRender=function(e){this._renderRequested=!0,this.render(e)};Ei.prototype.requestRender=function(){this._renderRequested=!0};Ei.prototype.clampLineWidth=function(e){return Math.max(Kt.minimumAliasedLineWidth,Math.min(e,Kt.maximumAliasedLineWidth))};Ei.prototype.pick=function(e,t,n){return this._picking.pick(this,e,t,n)};Ei.prototype.pickVoxel=function(e,t,n){let i=this.pick(e,t,n);if(!l(i))return;let o=i.primitive;if(!(o instanceof by))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 cv.fromKeyframeNode(o,s,c,a)};Ei.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=Xv(s,t,n,i);if(!l(a))return;let c=Fv(r,n,i);if(!l(c))return;let d=new Wv(t,n,i,a,c);return this._picking.pickMetadata(this,e,d)};Ei.prototype.pickMetadataSchema=function(e){let t=this.pick(e);return l(t)?t.detail?.model?.structuralMetadata?.schema:void 0};Ei.prototype.pickPositionWorldCoordinates=function(e,t){return this._picking.pickPositionWorldCoordinates(this,e,t)};Ei.prototype.pickPosition=function(e,t){return this._picking.pickPosition(this,e,t)};Ei.prototype.drillPick=function(e,t,n,i){return this._picking.drillPick(this,e,t,n,i)};function iEt(e){let t=e._frameState;j6.camera=t.camera,j6.cullingVolume=t.cullingVolume,e.primitives.updateForPass(t,j6)}function oEt(e){let t=e._frameState;if(!t.camera.canPreloadFlight())return;q6.camera=e.preloadFlightCamera,q6.cullingVolume=e.preloadFlightCullingVolume,e.primitives.updateForPass(t,q6)}function rEt(e){e.primitives.updateForPass(e._frameState,h_t)}Ei.prototype.pickFromRay=function(e,t,n){return this._picking.pickFromRay(this,e,t,n)};Ei.prototype.drillPickFromRay=function(e,t,n,i){return this._picking.drillPickFromRay(this,e,t,n,i)};Ei.prototype.pickFromRayMostDetailed=function(e,t,n){return this._picking.pickFromRayMostDetailed(this,e,t,n)};Ei.prototype.drillPickFromRayMostDetailed=function(e,t,n,i){return this._picking.drillPickFromRayMostDetailed(this,e,t,n,i)};Ei.prototype.sampleHeight=function(e,t,n){return this._picking.sampleHeight(this,e,t,n)};Ei.prototype.clampToHeight=function(e,t,n,i){return this._picking.clampToHeight(this,e,t,n,i)};Ei.prototype.sampleHeightMostDetailed=function(e,t,n){return this._picking.sampleHeightMostDetailed(this,e,t,n)};Ei.prototype.clampToHeightMostDetailed=function(e,t,n){return this._picking.clampToHeightMostDetailed(this,e,t,n)};Ei.prototype.cartesianToCanvasCoordinates=function(e,t){return to.worldToWindowCoordinates(this,e,t)};Ei.prototype.completeMorph=function(){this._transitioner.completeMorph()};Ei.prototype.morphTo2D=function(e){e=e??2,this._transitioner.morphTo2D(e,this._ellipsoid)};Ei.prototype.morphToColumbusView=function(e){e=e??2,this._transitioner.morphToColumbusView(e,this._ellipsoid)};Ei.prototype.morphTo3D=function(e){e=e??2,this._transitioner.morphTo3D(e,this._ellipsoid)};function sEt(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()})}Ei.prototype.setTerrain=function(e){return sEt(this,e),e};Ei.prototype.isDestroyed=function(){return!1};Ei.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 Pv=Ei;var R8i=y(C(),1);function CL(e){e=e??ie.WGS84,this.show=!0,this.perFragmentAtmosphere=!1,this._ellipsoid=e;let t=1.025,n=m.multiplyByScalar(e.radii,t,new m);this._scaleMatrix=X.fromScale(n),this._modelMatrix=new X,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 m(55e-7,13e-6,284e-7),this.atmosphereMieCoefficient=new m(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 m;let i=new m;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(CL.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});CL.prototype.setDynamicLighting=function(e){this._radiiAndDynamicAtmosphereColor.z=e};var nq=new X;CL.prototype.update=function(e,t){if(!this.show)return;let n=e.mode;if(n!==re.SCENE3D&&n!==re.MORPHING||!e.passes.render)return;let i=X.fromRotationTranslation(e.context.uniformState.inverseViewRotation,m.ZERO,nq),o=X.multiplyTransformation(i,ho.Y_UP_TO_Z_UP,nq),r=X.multiply(this._scaleMatrix,o,nq);X.clone(r,this._modelMatrix);let s=e.context,a=aEt(this),c=e.globeTranslucencyState.translucent,d=this.perFragmentAtmosphere||c||!l(t)||!t.show,u=this._command;if(!l(u.vertexArray)){let p=xa.createGeometry(new xa({radii:new m(1,1,1),slicePartitions:256,stackPartitions:256,vertexFormat:we.POSITION_ONLY}));u.vertexArray=ui.fromGeometry({context:s,geometry:p,attributeLocations:Yn.createAttributeLocations(p),bufferUsage:Ne.STATIC_DRAW}),u.renderState=Qe.fromCache({cull:{enabled:!0,face:Xi.FRONT},blending:bn.ALPHA_BLEND,depthMask:!1})}let h=a|d<<2|c<<3;if(h!==this._flags){this._flags=h;let p=[];a&&p.push("COLOR_CORRECT"),d&&p.push("PER_FRAGMENT_ATMOSPHERE"),c&&p.push("GLOBE_TRANSLUCENT");let g=new Oe({defines:p,sources:[_h,$S,IP]}),f=new Oe({defines:p,sources:[_h,$S,xP]});this._spSkyAtmosphere=ln.fromCache({context:s,vertexShaderSource:g,fragmentShaderSource:f}),u.shaderProgram=this._spSkyAtmosphere}return u};function aEt(e){return!(Z.equalsEpsilon(e.hueShift,0,Z.EPSILON7)&&Z.equalsEpsilon(e.saturationShift,0,Z.EPSILON7)&&Z.equalsEpsilon(e.brightnessShift,0,Z.EPSILON7))}CL.prototype.isDestroyed=function(){return!1};CL.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 Mv=CL;var J8i=y(C(),1);function IL(e){this.sources=e.sources,this._sources=void 0,this.show=e.show??!0,this._command=new ot({modelMatrix:X.clone(X.IDENTITY),owner:this}),this._cubeMap=void 0,this._attributeLocations=void 0,this._useHdr=void 0,this._hasError=!1,this._error=void 0}IL.prototype.update=function(e,t){let n=this,{mode:i,passes:o,context:r}=e;if(!this.show||i!==re.SCENE3D&&i!==re.MORPHING||!o.render)return;if(this._hasError){let a=this._error;throw this._hasError=!1,this._error=void 0,a}if(this._sources!==this.sources){this._sources=this.sources;let a=this.sources;typeof a.positiveX=="string"?cP(r,this._sources).then(function(c){n._cubeMap=n._cubeMap&&n._cubeMap.destroy(),n._cubeMap=c}).catch(c=>{this._hasError=!0,this._error=c}):(this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),this._cubeMap=new Pr({context:r,source:a}))}let s=this._command;if(!l(s.vertexArray)){s.uniformMap={u_cubeMap:function(){return n._cubeMap}};let a=sc.createGeometry(sc.fromDimensions({dimensions:new m(2,2,2),vertexFormat:we.POSITION_ONLY})),c=this._attributeLocations=Yn.createAttributeLocations(a);s.vertexArray=ui.fromGeometry({context:r,geometry:a,attributeLocations:c,bufferUsage:Ne.STATIC_DRAW}),s.renderState=Qe.fromCache({blending:bn.ALPHA_BLEND})}if(!l(s.shaderProgram)||this._useHdr!==t){let a=new Oe({defines:[t?"HDR":""],sources:[_P]});s.shaderProgram=ln.fromCache({context:r,vertexShaderSource:EP,fragmentShaderSource:a,attributeLocations:this._attributeLocations}),this._useHdr=t}if(l(this._cubeMap))return s};IL.prototype.isDestroyed=function(){return!1};IL.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)};function xL(e){return hn(`Assets/Textures/SkyBox/tycho2t3_80_${e}.jpg`)}IL.createEarthSkyBox=function(){return new IL({sources:{positiveX:xL("px"),negativeX:xL("mx"),positiveY:xL("py"),negativeY:xL("my"),positiveZ:xL("pz"),negativeZ:xL("mz")}})};var vv=IL;var T7i=y(C(),1);function Dv(){this.show=!0,this._drawCommand=new ot({primitiveType:We.TRIANGLES,boundingVolume:new ue,owner:this}),this._commands={drawCommand:this._drawCommand,computeCommand:void 0},this._boundingVolume=new ue,this._boundingVolume2D=new ue,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(Dv.prototype,{glowFactor:{get:function(){return this._glowFactor},set:function(e){e=Math.max(e,0),this._glowFactor=e,this._glowFactorDirty=!0}}});var cEt=new D,lEt=new D,dEt=new ce,Nv=new ce;Dv.prototype.update=function(e,t,n){if(!this.show)return;let i=e.mode;if(i===re.SCENE2D||i===re.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 S=Math.max(r,s);S=Math.pow(2,Math.ceil(Math.log(S)/Math.log(2))-2),S=Math.max(1,S);let R=n?o.halfFloatingPointTexture?Ye.HALF_FLOAT:Ye.FLOAT:Ye.UNSIGNED_BYTE;this._texture=new Wt({context:o,width:S,height:S,pixelFormat:tt.RGBA,pixelDatatype:R}),this._glowLengthTS=this._glowFactor*5,this._radiusTS=1/(1+2*this._glowLengthTS)*.5;let G=this,B={u_radiusTS:function(){return G._radiusTS}};this._commands.computeCommand=new Il({fragmentShaderSource:SP,outputTexture:this._texture,uniformMap:B,persists:!1,owner:this,postExecute:function(){G._commands.computeCommand=void 0}})}let a=this._drawCommand;if(!l(a.vertexArray)){let S={direction:0},R=new Uint8Array(8);R[0]=0,R[1]=0,R[2]=255,R[3]=0,R[4]=255,R[5]=255,R[6]=0,R[7]=255;let G=It.createVertexBuffer({context:o,typedArray:R,usage:Ne.STATIC_DRAW}),B=[{index:S.direction,vertexBuffer:G,componentsPerAttribute:2,normalize:!0,componentDatatype:J.UNSIGNED_BYTE}],w=It.createIndexBuffer({context:o,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT});a.vertexArray=new ui({context:o,attributes:B,indexBuffer:w}),a.shaderProgram=ln.fromCache({context:o,vertexShaderSource:LP,fragmentShaderSource:TP,attributeLocations:S}),a.renderState=Qe.fromCache({blending:bn.ALPHA_BLEND}),a.uniformMap=this._uniformMap}let c=o.uniformState.sunPositionWC,d=o.uniformState.sunPositionColumbusView,u=this._boundingVolume,h=this._boundingVolume2D;m.clone(c,u.center),h.center.x=d.z,h.center.y=d.x,h.center.z=d.y,u.radius=Z.SOLAR_RADIUS+Z.SOLAR_RADIUS*this._glowLengthTS,h.radius=u.radius,i===re.SCENE3D?ue.clone(u,a.boundingVolume):i===re.COLUMBUS_VIEW&&ue.clone(h,a.boundingVolume);let p=to.computeActualEllipsoidPosition(e,c,Nv),g=m.magnitude(m.subtract(p,e.camera.position,Nv)),f=o.uniformState.projection,b=dEt;b.x=0,b.y=0,b.z=-g,b.w=1;let x=X.multiplyByVector(f,b,Nv),I=to.clipToGLWindowCoordinates(t.viewport,x,cEt);b.x=Z.SOLAR_RADIUS;let _=X.multiplyByVector(f,b,Nv),E=to.clipToGLWindowCoordinates(t.viewport,_,lEt);return this._size=D.magnitude(D.subtract(E,I,Nv)),this._size=2*this._size*(1+2*this._glowLengthTS),this._size=Math.ceil(this._size),this._commands};Dv.prototype.isDestroyed=function(){return!1};Dv.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 Qv=Dv;var G6i=y(C(),1);var m6i=y(C(),1);var UEe=y(T9(),1);var L7i=y(C(),1);function uEt(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 Uv=uEt;var G7i=y(C(),1);var mEt={modifyFragmentShader:function(t){return t=Oe.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}}},_L=mEt;var i_={NEEDS_DECODE:0,DECODING:1,READY:2,FAILED:3};function kv(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=i_.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??Ge.OPAQUE,this._cull=e.cull??!0,this.style=void 0,this._style=void 0,this.styleDirty=!1,this.modelMatrix=X.clone(X.IDENTITY),this._modelMatrix=X.clone(X.IDENTITY),this.time=0,this.shadows=Gn.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??Ir.NONE,this._splittingEnabled=!1,this._error=void 0,hEt(this,e)}Object.defineProperties(kv.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=ue.clone(e,this._boundingSphere)}}});function hEt(e,t){let n=ux.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=bA.getBinaryProperties(n.pointsLength,n.batchTableJson,n.batchTableBinary)),l(n.draco)){let a=n.draco;e._decodingState=i_.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 fEt=new m,pEt=new m,AEt=new m,DEe,GY;function gEt(e){if(!l(GY)){DEe=new UEe.default(0),GY=new Array(e);for(let t=0;t<e;++t)GY[t]=DEe.random()}return GY}function bEt(e){let n=e.length/3,i=Math.min(n,20),o=gEt(20),r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=m.fromElements(r,r,r,fEt),c=m.fromElements(s,s,s,pEt);for(let u=0;u<i;++u){let h=Math.floor(o[u]*n),p=m.unpack(e,h*3,AEt);m.minimumByComponent(a,p,a),m.maximumByComponent(c,p,c)}let d=ue.fromCornerPoints(a,c);return d.radius+=Z.EPSILON2,d}function QEe(e,t){let n=J.fromTypedArray(e);return n===J.INT||n===J.UNSIGNED_INT||n===J.DOUBLE?(xt("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 yEt=new ce,CEt=new ce,xEt=new U,kEe=0,ZY=1,aq=2,YEe=3,IEt=4,iq=new X,_Et=new X;function EEt(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),h=e._isQuantized,p=e._isQuantizedDraco,g=e._isOctEncoded16P,f=e._isOctEncodedDraco,b=e._quantizedRange,x=e._octEncodedRange,I=e._isRGB565,_=e._isTranslucent,E=e._hasColors,S=e._hasNormals,R=e._hasBatchIds,G,B,w=[],F={};if(e._styleableShaderAttributes=F,u){let N=IEt;for(let k in d)if(d.hasOwnProperty(k)){let v=d[k],O=QEe(v.typedArray,k);G=v.componentCount,B=J.fromTypedArray(O);let H=It.createVertexBuffer({context:n,typedArray:O,usage:Ne.STATIC_DRAW});e._geometryByteLength+=H.sizeInBytes;let ee={index:N,vertexBuffer:H,componentsPerAttribute:G,componentDatatype:B,normalize:!1,offsetInBytes:0,strideInBytes:0};w.push(ee),F[k]={location:N,componentCount:G},++N}}let P=It.createVertexBuffer({context:n,typedArray:r.typedArray,usage:Ne.STATIC_DRAW});e._geometryByteLength+=P.sizeInBytes;let A;E&&(A=It.createVertexBuffer({context:n,typedArray:s.typedArray,usage:Ne.STATIC_DRAW}),e._geometryByteLength+=A.sizeInBytes);let T;S&&(T=It.createVertexBuffer({context:n,typedArray:a.typedArray,usage:Ne.STATIC_DRAW}),e._geometryByteLength+=T.sizeInBytes);let L;R&&(c.typedArray=QEe(c.typedArray,"batchIds"),L=It.createVertexBuffer({context:n,typedArray:c.typedArray,usage:Ne.STATIC_DRAW}),e._geometryByteLength+=L.sizeInBytes);let V=[];if(h?B=J.UNSIGNED_SHORT:p?B=b<=255?J.UNSIGNED_BYTE:J.UNSIGNED_SHORT:B=J.FLOAT,V.push({index:kEe,vertexBuffer:P,componentsPerAttribute:3,componentDatatype:B,normalize:!1,offsetInBytes:0,strideInBytes:0}),e._cull&&(h||p?e._boundingSphere=ue.fromCornerPoints(m.ZERO,e._quantizedVolumeScale):e._boundingSphere=bEt(r.typedArray)),E)if(I)V.push({index:ZY,vertexBuffer:A,componentsPerAttribute:1,componentDatatype:J.UNSIGNED_SHORT,normalize:!1,offsetInBytes:0,strideInBytes:0});else{let N=_?4:3;V.push({index:ZY,vertexBuffer:A,componentsPerAttribute:N,componentDatatype:J.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0})}S&&(g?(G=2,B=J.UNSIGNED_BYTE):f?(G=2,B=x<=255?J.UNSIGNED_BYTE:J.UNSIGNED_SHORT):(G=3,B=J.FLOAT),V.push({index:aq,vertexBuffer:T,componentsPerAttribute:G,componentDatatype:B,normalize:!1,offsetInBytes:0,strideInBytes:0})),R&&V.push({index:YEe,vertexBuffer:L,componentsPerAttribute:1,componentDatatype:J.fromTypedArray(c.typedArray),normalize:!1,offsetInBytes:0,strideInBytes:0}),u&&(V=V.concat(w));let W=new ui({context:n,attributes:V}),M={depthTest:{enabled:!0}},Q={depthTest:{enabled:!0},depthMask:!1,blending:bn.ALPHA_BLEND};e._opaquePass===Ge.CESIUM_3D_TILE&&(M.stencilTest=jt.setCesium3DTileBit(),M.stencilMask=jt.CESIUM_3D_TILE_MASK,Q.stencilTest=jt.setCesium3DTileBit(),Q.stencilMask=jt.CESIUM_3D_TILE_MASK),e._opaqueRenderState=Qe.fromCache(M),e._translucentRenderState=Qe.fromCache(Q),e._drawCommand=new ot({boundingVolume:new ue,cull:e._cull,modelMatrix:new X,primitiveType:We.POINTS,vertexArray:W,count:o,shaderProgram:void 0,uniformMap:void 0,renderState:_?e._translucentRenderState:e._opaqueRenderState,pass:_?Ge.TRANSLUCENT:e._opaquePass,owner:e,castShadows:!1,receiveShadows:!1,pickId:e._pickIdLoaded()})}function TEt(e,t){let n=t.context,i=e._isQuantized,o=e._isQuantizedDraco,r=e._isOctEncodedDraco,s={u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier:function(){let a=yEt;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===re.SCENE2D||c instanceof gn?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,xEt);return c.alpha=a.edgeWidth,c},u_clippingPlanesMatrix:function(){let a=e.clippingPlanes;if(!l(a))return X.IDENTITY;let c=e.clippingPlanesOriginMatrix??e._modelMatrix;X.multiply(n.uniformState.view3D,c,iq);let d=X.multiply(iq,a.modelMatrix,iq);return X.inverseTranspose(d,_Et)}};_L.addUniforms(e,s),(i||o||r)&&(s=Lt(s,{u_quantizedVolumeScaleAndOctEncodedRange:function(){let a=CEt;if(l(e._quantizedVolumeScale)){let c=m.clone(e._quantizedVolumeScale,a);m.divideByScalar(c,e._quantizedRange,a)}return a.w=e._octEncodedRange,a}})),l(e._uniformMapLoaded)&&(s=e._uniformMapLoaded(s)),e._drawCommand.uniformMap=s}function oq(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 rq(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 sq(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 SEt={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 LEt(e,t,n){let i,o,r,s=t.context,a=l(n),c=e._isQuantized,d=e._isQuantizedDraco,u=e._isOctEncoded16P,h=e._isOctEncodedDraco,p=e._isRGB565,g=e._isTranslucent,f=e._hasColors,b=e._hasNormals,x=e._hasBatchIds,I=e._backFaceCulling,_=e._normalShading,E=e._drawCommand.vertexArray,S=e.clippingPlanes,R=e._attenuation,G,B,w,F=g,P=ke(SEt),A={},T=e._styleableShaderAttributes;for(o in T)T.hasOwnProperty(o)&&(r=T[o],P[o]=`czm_3dtiles_property_${r.location}`,A[r.location]=r);if(a){let he={translucent:!1},xe="(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)";G=n.getColorShaderFunction(`getColorFromStyle${xe}`,P,he),B=n.getShowShaderFunction(`getShowFromStyle${xe}`,P,he),w=n.getPointSizeShaderFunction(`getPointSizeFromStyle${xe}`,P,he),l(G)&&he.translucent&&(F=!0)}e._styleTranslucent=F;let L=l(G),V=l(B),W=l(w),M=e.isClipped,Q=[],N=[];L&&(oq(G,Q),rq(G,N)),V&&(oq(B,Q),rq(B,N)),W&&(oq(w,Q),rq(w,N));let k=N.indexOf("COLOR")>=0,v=N.indexOf("NORMAL")>=0;if(v&&!b)throw new de("Style references the NORMAL semantic but the point cloud does not have normals");for(o in T)if(T.hasOwnProperty(o)){r=T[o];let he=Q.indexOf(r.location)>=0,xe=sq(E,r.location);xe.enabled=he}let O=f&&(!L||k);if(f){let he=sq(E,ZY);he.enabled=O}let H=b&&(_||I||v);if(b){let he=sq(E,aq);he.enabled=H}let ee={a_position:kEe};O&&(ee.a_color=ZY),H&&(ee.a_normal=aq),x&&(ee.a_batchId=YEe);let K="",te=Q.length;for(i=0;i<te;++i){let he=Q[i];r=A[he];let xe=r.componentCount,Te=`czm_3dtiles_property_${he}`,Be;xe===1?Be="float":Be=`vec${xe}`,K+=`in ${Be} ${Te}; `,ee[Te]=r.location}TEt(e,t);let q=`in vec3 a_position; out vec4 v_color; uniform vec4 u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier; uniform vec4 u_constantColor; uniform vec4 u_highlightColor; `;q+=`float u_pointSize; float tiles3d_tileset_time; `,R&&(q+=`float u_geometricError; float u_depthMultiplier; `),q+=K,O&&(g?q+=`in vec4 a_color; `:p?q+=`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; `:q+=`in vec3 a_color; `),H&&(u||h?q+=`in vec2 a_normal; `:q+=`in vec3 a_normal; `),x&&(q+=`in float a_batchId; `),(c||d||h)&&(q+=`uniform vec4 u_quantizedVolumeScaleAndOctEncodedRange; `),L&&(q+=G),V&&(q+=B),W&&(q+=w),q+=`void main() { u_pointSize = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.x; tiles3d_tileset_time = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.y; `,R&&(q+=` u_geometricError = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.z; u_depthMultiplier = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.w; `),O?g?q+=` vec4 color = a_color; `:p?q+=` 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); `:q+=` vec4 color = vec4(a_color, 1.0); `:q+=` vec4 color = u_constantColor; `,c||d?q+=` vec3 position = a_position * u_quantizedVolumeScaleAndOctEncodedRange.xyz; `:q+=` vec3 position = a_position; `,q+=` vec3 position_absolute = vec3(czm_model * vec4(position, 1.0)); `,H?(u?q+=` vec3 normal = czm_octDecode(a_normal); `:h?q+=` vec3 normal = czm_octDecode(a_normal, u_quantizedVolumeScaleAndOctEncodedRange.w).zxy; `:q+=` vec3 normal = a_normal; `,q+=` vec3 normalEC = czm_normal * normal; `):q+=` vec3 normal = vec3(1.0); `,L&&(q+=` color = getColorFromStyle(position, position_absolute, color, normal); `),V&&(q+=` float show = float(getShowFromStyle(position, position_absolute, color, normal)); `),W?q+=` gl_PointSize = getPointSizeFromStyle(position, position_absolute, color, normal) * czm_pixelRatio; `:R?q+=` vec4 positionEC = czm_modelView * vec4(position, 1.0); float depth = -positionEC.z; gl_PointSize = min((u_geometricError / depth) * u_depthMultiplier, u_pointSize); `:q+=` gl_PointSize = u_pointSize; `,q+=` color = color * u_highlightColor; `,H&&_&&(q+=` float diffuseStrength = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC); diffuseStrength = max(diffuseStrength, 0.4); color.xyz *= diffuseStrength * czm_lightColor; `),q+=` v_color = color; gl_Position = czm_modelViewProjection * vec4(position, 1.0); `,H&&I&&(q+=` float visible = step(-normalEC.z, 0.0); gl_Position *= visible; gl_PointSize *= visible; `),V&&(q+=` gl_Position.w *= float(show); gl_PointSize *= float(show); `),q+=`} `;let pe=`in vec4 v_color; `;M&&(pe+=`uniform highp sampler2D u_clippingPlanes; uniform mat4 u_clippingPlanesMatrix; uniform vec4 u_clippingPlanesEdgeStyle; `,pe+=` `,pe+=Qg(S,s),pe+=` `),pe+=`void main() { out_FragColor = czm_gammaCorrect(v_color); `,M&&(pe+=Uv("u_clippingPlanes","u_clippingPlanesMatrix","u_clippingPlanesEdgeStyle")),pe+=`} `,e.splitDirection!==Ir.NONE&&(pe=_L.modifyFragmentShader(pe)),l(e._vertexShaderLoaded)&&(q=e._vertexShaderLoaded(q)),l(e._fragmentShaderLoaded)&&(pe=e._fragmentShaderLoaded(pe));let ye=e._drawCommand;l(ye.shaderProgram)&&ye.shaderProgram.destroy(),ye.shaderProgram=ln.fromCache({context:s,vertexShaderSource:q,fragmentShaderSource:pe,attributeLocations:ee});try{ye.shaderProgram._bind()}catch{throw new de("Error generating style shader: this may be caused by a type mismatch, index out-of-bounds, or other syntax error.")}}function REt(e,t){if(e._decodingState===i_.READY)return!1;if(e._decodingState===i_.NEEDS_DECODE){let n=e._parsedContent,i=n.draco,o=TA.decodePointCloud(i,t);l(o)&&(e._decodingState=i_.DECODING,o.then(function(r){e._decodingState=i_.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,h=l(s)&&l(r.POSITION.data.quantization),p=l(d)&&l(r.NORMAL.data.quantization);if(h){let x=r.POSITION.data.quantization,I=x.range;e._quantizedVolumeScale=m.fromElements(I,I,I),e._quantizedVolumeOffset=m.unpack(x.minValues),e._quantizedRange=(1<<x.quantizationBits)-1,e._isQuantizedDraco=!0}p&&(e._octEncodedRange=(1<<r.NORMAL.data.quantization.quantizationBits)-1,e._isOctEncodedDraco=!0);let g=n.styleableProperties,f=i.batchTableProperties;for(let x in f)if(f.hasOwnProperty(x)){let I=r[x];l(g)||(g={}),g[x]={typedArray:I.array,componentCount:I.data.componentsPerAttribute}}l(s)&&(n.positions={typedArray:s});let b=c??a;l(b)&&(n.colors={typedArray:b}),l(d)&&(n.normals={typedArray:d}),l(u)&&(n.batchIds={typedArray:u}),n.styleableProperties=g}).catch(function(r){e._decodingState=i_.FAILED,e._error=r}))}return!0}var VEt=new ce,GEt=new m;kv.prototype.update=function(e){let t=e.context;if(l(this._error)){let d=this._error;throw this._error=void 0,d}if(REt(this,t))return;let i=!1,o=!X.equals(this._modelMatrix,this.modelMatrix);if(this._mode!==e.mode&&(this._mode=e.mode,o=!0),l(this._drawCommand)||(EEt(this,e),o=!0,i=!0,this._ready=!0,this._parsedContent=void 0),o){X.clone(this.modelMatrix,this._modelMatrix);let d=this._drawCommand.modelMatrix;if(X.clone(this._modelMatrix,d),l(this._rtcCenter)&&X.multiplyByTranslation(d,this._rtcCenter,d),l(this._quantizedVolumeOffset)&&X.multiplyByTranslation(d,this._quantizedVolumeOffset,d),e.mode!==re.SCENE3D){let h=e.mapProjection,p=X.getColumn(d,3,VEt);ce.equals(p,ce.UNIT_W)||Dt.basisTo2D(h,d,d)}let u=this._drawCommand.boundingVolume;if(ue.clone(this._boundingSphere,u),this._cull){let h=u.center;X.multiplyByPoint(d,h,h);let p=X.getScale(d,GEt);u.radius*=m.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!==Ir.NONE;this._splittingEnabled!==r&&(this._splittingEnabled=r,i=!0),i&&LEt(this,e,this._style),this._drawCommand.castShadows=Gn.castShadows(this.shadows),this._drawCommand.receiveShadows=Gn.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?Ge.TRANSLUCENT:this._opaquePass;let a=e.commandList,c=e.passes;(c.render||c.pick)&&a.push(this._drawCommand)};kv.prototype.isDestroyed=function(){return!1};kv.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 Yv=kv;function r_(e){e=e??Y.EMPTY_OBJECT,this.show=e.show??!0,this.modelMatrix=X.clone(e.modelMatrix??X.IDENTITY),this.shadows=e.shadows??Gn.ENABLED,this.maximumMemoryUsage=e.maximumMemoryUsage??256,this.shading=new Hf(e.shading),this.style=e.style,this.frameFailed=new Ce,this.frameChanged=new Ce,this._clock=e.clock,this._intervals=e.intervals,this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,this._pointCloudEyeDomeLighting=new XA,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(r_.prototype,{clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){Ws.setOwner(e,this,"_clippingPlanes")}},totalMemoryUsageInBytes:{get:function(){return this._totalMemoryUsageInBytes}},boundingSphere:{get:function(){if(l(this._lastRenderedFrame))return this._lastRenderedFrame.pointCloud.boundingSphere}}});function ZEt(e){return`uniform vec4 czm_pickColor; ${e}`}function BEt(e){return function(t){return Lt(t,{czm_pickColor:function(){return e._pickId.color}})}}function wEt(){return"czm_pickColor"}r_.prototype.makeStyleDirty=function(){this._styleDirty=!0};r_.prototype._getAverageLoadTime=function(){return this._runningLength===0?.05:this._runningAverage};var XEt=new j;function lq(e){let t=e._clock,n=t.canAnimate&&t.shouldAnimate,i=t.multiplier;return n?i:0}function o_(e,t){return e._intervals.indexOf(t.start)}function WEt(e,t){let n=e._intervals,i=e._clock,o=lq(e);if(o===0)return;let r=e._getAverageLoadTime(),s=j.addSeconds(i.currentTime,r*o,XEt),a=n.indexOf(s),c=o_(e,t);return a===c&&(o>=0?++a:--a),n.get(a)}function FEt(e){let t=e._intervals,i=e._clock.currentTime,o=t.indexOf(i);return t.get(o)}function PEt(e,t,n){let i=lq(e),o=o_(e,t),r=o_(e,n);return i>=0?o>=r:o<=r}function HEe(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 MEt(e,t,n){let i=o_(e,t),o=e._frames,r=o[i];if(!l(r)){let s=t.data.transform,a=l(s)?X.fromArray(s):void 0,c=t.data.uri;r={pointCloud:void 0,transform:a,timestamp:Fi(),sequential:!0,ready:!1,touchedFrameNumber:n.frameNumber,uri:c},o[i]=r,Ve.fetchArrayBuffer({url:c}).then(function(d){r.pointCloud=new Yv({arrayBuffer:d,cull:!0,fragmentShaderLoaded:ZEt,uniformMapLoaded:BEt(e),pickIdLoaded:wEt})}).catch(HEe(e,c))}return r}function vEt(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 NEt(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(zEe(e,t,n,i),o.ready&&(t.ready=!0,e._totalMemoryUsageInBytes+=o.geometryByteLength,r.length=s,t.sequential)){let a=(Fi()-t.timestamp)/1e3;vEt(e,a)}}t.touchedFrameNumber=i.frameNumber}var DEt=new X;function QEt(e,t){let n=e.shading;return l(n)&&l(n.baseResolution)?n.baseResolution:l(t.boundingSphere)?Z.cbrt(t.boundingSphere.volume()/t.pointsLength):0}function UEt(e){let t=e.shading;return l(t)&&l(t.maximumAttenuation)?t.maximumAttenuation:10}var kEt=new Hf;function zEe(e,t,n,i){let o=e.shading??kEt,r=t.pointCloud,s=t.transform??X.IDENTITY;r.modelMatrix=X.multiplyTransformation(e.modelMatrix,s,DEt),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=QEt(e,r),r.geometricErrorScale=o.geometricErrorScale,r.maximumAttenuation=UEt(e);try{r.update(i)}catch(a){HEe(e,t.uri)(a)}t.touchedFrameNumber=i.frameNumber}function cq(e,t,n,i){let o=MEt(e,t,i);NEt(e,o,n,i)}function YEt(e){return function(t){return t.touchedFrameNumber<e.frameNumber}}function KEe(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 OEt(e,t){let n=o_(e,t),i=e._frames[n];if(l(i)&&i.ready)return i}function OEe(e,t,n,i,o){return l(n)?n.ready?!0:(cq(e,t,i,o),n.ready):!1}function HEt(e,t,n,i,o){let r,s,a,c=e._intervals,d=e._frames,u=o_(e,n),h=o_(e,t);if(u>=h){for(r=u;r>=h;--r)if(s=c.get(r),a=d[r],OEe(e,s,a,i,o))return s}else for(r=u;r<=h;++r)if(s=c.get(r),a=d[r],OEe(e,s,a,i,o))return s;return t}function zEt(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 EL={timeSinceLoad:0,isClipped:!1,clippingPlanesDirty:!1};r_.prototype.update=function(e){if(e.mode===re.MORPHING||!this.show)return;l(this._pickId)||(this._pickId=e.context.createPickId({primitive:this})),l(this._loadTimestamp)||(this._loadTimestamp=j.clone(e.time));let t=Math.max(j.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)&&zEt(this,o,s),EL.timeSinceLoad=t,EL.isClipped=r;let a=this.shading,c=this._pointCloudEyeDomeLighting,d=e.commandList,u=d.length,h=this._previousInterval,p=this._nextInterval,g=FEt(this);if(!l(g))return;let f=!1,b=lq(this),x=b===0;b!==this._clockMultiplier&&(f=!0,this._clockMultiplier=b),(!l(h)||x)&&(h=g),(!l(p)||f||PEt(this,g,p))&&(p=WEt(this,g)),h=HEt(this,h,g,EL,e);let I=OEt(this,h);l(I)||(cq(this,h,EL,e),I=this._lastRenderedFrame),l(I)&&zEe(this,I,EL,e),l(p)&&cq(this,p,EL,e);let _=this;l(I)&&!l(this._lastRenderedFrame)&&e.afterRender.push(function(){return!0}),l(I)&&I!==this._lastRenderedFrame&&_.frameChanged.numberOfListeners>0&&e.afterRender.push(function(){return _.frameChanged.raiseEvent(_),!0}),this._previousInterval=h,this._nextInterval=p,this._lastRenderedFrame=I;let E=this._totalMemoryUsageInBytes,S=this.maximumMemoryUsage*1024*1024;E>S&&KEe(this,YEt(e));let G=d.length-u;l(a)&&a.attenuation&&a.eyeDomeLighting&&G>0&&c.update(e,u,a,this.boundingSphere)};r_.prototype.isDestroyed=function(){return!1};r_.prototype.destroy=function(){return KEe(this),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),me(this)};var TL=r_;function qEe(e,t){if(l(t)){let n=t.clock;l(n)&&n.getValue(e)}}function KEt(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 $Ee(e){let t=e._useBrowserRecommendedResolution?1:window.devicePixelRatio;return t*=e._resolutionScale,l(e._scene)&&(e._scene.pixelRatio=t),t}function eTe(e){let t=e._canvas,n=t.clientWidth,i=t.clientHeight,o=$Ee(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 tTe(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 Qo(e,t){e=Dn(e),t=t??Y.EMPTY_OBJECT;let n=document.createElement("div");n.className="cesium-widget",e.appendChild(n);let i=document.createElement("canvas"),o=Ht.supportsImageRenderingPixelated();this._supportsImageRenderingPixelated=o,o&&(i.style.imageRendering=Ht.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)?Dn(t.creditContainer):n;c.appendChild(a);let d=l(t.creditViewport)?Dn(t.creditViewport):n,u=t.showRenderLoopErrors??!0,h=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=h,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 Ce,this._allowDataSourcesToSuspendAnimation=!0,this._clock=l(t.clock)?t.clock:new Yh,l(t.shouldAnimate)&&(this._clock.shouldAnimate=t.shouldAnimate),eTe(this);try{let p=t.ellipsoid??ie.default,g=new Pv({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=g,g.camera.constrainedAxis=m.UNIT_Z,$Ee(this),tTe(this);let f=t.globe;l(f)||(f=new DP(p)),f!==!1&&(g.globe=f,g.globe.shadows=t.terrainShadows??Gn.RECEIVE_ONLY);let b=t.skyBox;!l(b)&&ie.WGS84.equals(p)&&(b=vv.createEarthSkyBox()),b!==!1&&(g.skyBox=b,g.sun=new Qv,ie.WGS84.equals(p)&&(g.moon=new HP));let x=t.skyAtmosphere;!l(x)&&ie.WGS84.equals(p)&&(x=new Mv(p),x.show=t.globe!==!1&&f.show),x!==!1&&(g.skyAtmosphere=x);let I=t.baseLayer;t.globe!==!1&&I!==!1&&(l(I)||(I=is.fromWorldImagery()),g.imageryLayers.add(I)),l(t.terrainProvider)&&t.globe!==!1&&(g.terrainProvider=t.terrainProvider),l(t.terrain)&&t.globe!==!1&&g.setTerrain(t.terrain),this._screenSpaceEventHandler=new Su(i),l(t.sceneMode)&&(t.sceneMode===re.SCENE2D&&this._scene.morphTo2D(0),t.sceneMode===re.COLUMBUS_VIEW&&this._scene.morphToColumbusView(0)),this._useDefaultRenderLoop=void 0,this.useDefaultRenderLoop=t.useDefaultRenderLoop??!0,this._targetFrameRate=void 0,this.targetFrameRate=t.targetFrameRate;let _=this;this._onRenderError=function(w,F){_._useDefaultRenderLoop=!1,_._renderLoopRunning=!1,_._showRenderLoopErrors&&_.showErrorPanel("An error occurred while rendering. Rendering has stopped.",void 0,F)},g.renderError.addEventListener(this._onRenderError);let E=t.dataSources,S=!1;l(E)||(E=new SW,S=!0);let R=new fF({scene:g,dataSourceCollection:E}),G=new Lr;this._dataSourceChangedListeners={},this._automaticallyTrackDataSourceClocks=t.automaticallyTrackDataSourceClocks??!0,this._dataSourceCollection=E,this._destroyDataSourceCollection=S,this._dataSourceDisplay=R,this._eventHelper=G,this._canAnimateUpdateCallback=this._updateCanAnimate,G.add(this._clock.onTick,Qo.prototype._onTick,this),G.add(g.morphStart,Qo.prototype._clearTrackedObject,this),G.add(E.dataSourceAdded,Qo.prototype._onDataSourceAdded,this),G.add(E.dataSourceRemoved,Qo.prototype._onDataSourceRemoved,this),G.add(g.postRender,Qo.prototype._postRender,this);let B=E.length;for(let w=0;w<B;w++)this._dataSourceAdded(E,E.get(w));this._dataSourceAdded(void 0,R.defaultDataSource),G.add(E.dataSourceAdded,Qo.prototype._dataSourceAdded,this),G.add(E.dataSourceRemoved,Qo.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(Qo.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&&KEt(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,dq(this);let t=this.scene,n=t.mode;!l(e)||!l(e.position)?(this._needTrackedEntityUpdate=!1,(n===re.COLUMBUS_VIEW||n===re.SCENE2D)&&(t.screenSpaceCameraController.enableTranslate=!0),(n===re.COLUMBUS_VIEW||n===re.SCENE3D)&&(t.screenSpaceCameraController.enableTilt=!0),this._entityView=void 0,this.camera.lookAtTransform(X.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,qEe(this.clock,e))}}});Qo.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 g=document.createElement("div");if(g.className="cesium-widget-errorPanel-message",a.appendChild(g),u){let f=Kf(n);d||(typeof n=="string"&&(n=new Error(n)),t=Kf({name:n.name,message:n.message}),f=n.stack),typeof console<"u"&&console.error(`${e} ${t} ${f}`);let b=document.createElement("div");b.className="cesium-widget-errorPanel-message-details collapsed";let x=document.createElement("span");x.className="cesium-widget-errorPanel-more-details",x.appendChild(document.createTextNode("See more...")),b.appendChild(x),b.onclick=function(I){b.removeChild(x),b.appendChild(document.createTextNode(f)),b.className="cesium-widget-errorPanel-message-details",r.className="cesium-widget-errorPanel-content expanded",b.onclick=void 0},a.appendChild(b)}g.innerHTML=`<p>${t}</p>`}let h=document.createElement("div");h.className="cesium-widget-errorPanel-buttonPanel",r.appendChild(h);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)},h.appendChild(p),i.appendChild(o)};Qo.prototype.isDestroyed=function(){return!1};Qo.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)};Qo.prototype.resize=function(){let e=this._canvas;!this._forceResize&&this._canvasClientWidth===e.clientWidth&&this._canvasClientHeight===e.clientHeight&&this._lastDevicePixelRatio===window.devicePixelRatio||(this._forceResize=!1,eTe(this),tTe(this),this._scene.requestRender())};Qo.prototype.render=function(){if(this._canRender){this._scene.initializeFrame();let e=this._clock.tick();this._scene.render(e)}else this._clock.tick()};Qo.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(Qo.prototype._onEntityCollectionChanged,this)};Qo.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(Qo.prototype._onEntityCollectionChanged,this),l(this.trackedEntity)&&n.getById(this.trackedEntity.id)===this.trackedEntity&&(this.trackedEntity=void 0)};Qo.prototype._updateCanAnimate=function(e){this._clock.canAnimate=e};var JEt=new ue;Qo.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??JEt)===At.DONE&&i.update(t)}};Qo.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)}};Qo.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};Qo.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&qEe(this.clock,e)};Qo.prototype._onDataSourceAdded=function(e,t){this._automaticallyTrackDataSourceClocks&&(this.clockTrackedDataSource=t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,Qo.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};Qo.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}};Qo.prototype.zoomTo=function(e,t){return nTe(this,e,{offset:t},!1)};Qo.prototype.flyTo=function(e,t){return nTe(this,e,t,!0)};function nTe(e,t,n,i){dq(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 is){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 EI(a,e.scene)}).then(function(a){e._zoomPromise===o&&(e._zoomTarget=a)});return}if(r instanceof Ps||r instanceof TL||r instanceof by){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 Ov(e){e._zoomPromise=void 0,e._zoomTarget=void 0,e._zoomOptions=void 0}function dq(e){let t=e._zoomPromise;l(t)&&(Ov(e),e._completeZoom(!1))}Qo.prototype._postRender=function(){jEt(this),qEt(this)};var JEe=new ue;function jEt(e){let t=e._zoomTarget;if(!l(t)||e.scene.mode===re.MORPHING)return;let n=e.scene,i=n.camera,o=e._zoomOptions??{},r;function s(u){l(o.offset)||(o.offset=new Vm(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(t.boundingSphere,r):(i.viewBoundingSphere(u,o.offset),i.lookAtTransform(X.IDENTITY),e._completeZoom(!0)),Ov(e)}if(t instanceof TL){if(l(t.boundingSphere)){s(t.boundingSphere);return}let u=t.frameChanged.addEventListener(function(h){s(h.boundingSphere),u()});return}if(t instanceof Ps||t instanceof by){s(t.boundingSphere);return}if(t instanceof ge){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)),Ov(e);return}let a=t,c=[];for(let u=0,h=a.length;u<h;u++){let p=e._dataSourceDisplay.getBoundingSphere(a[u],!1,JEe);if(p===At.PENDING)return;p!==At.FAILED&&c.push(ue.clone(JEe))}if(c.length===0){dq(e);return}e.trackedEntity=void 0;let d=ue.fromBoundingSpheres(c);e._zoomIsFlight?(Ov(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(X.IDENTITY),Ov(e),e._completeZoom(!0))}var jEe=new ue;function qEt(e){if(!e._needTrackedEntityUpdate)return;let t=e._trackedEntity,n=e.clock.currentTime,i=z.getValueOrUndefined(t.position,n);if(!l(i))return;let o=e.scene,r=e._dataSourceDisplay.getBoundingSphere(t,!1,jEe);if(r===At.PENDING)return;let s=o.mode;(s===re.COLUMBUS_VIEW||s===re.SCENE2D)&&(o.screenSpaceCameraController.enableTranslate=!1),(s===re.COLUMBUS_VIEW||s===re.SCENE3D)&&(o.screenSpaceCameraController.enableTilt=!1);let a=r!==At.FAILED?jEe:void 0;e._entityView=new AF(t,o,o.ellipsoid),e._entityView.update(n,a),e._needTrackedEntityUpdate=!1}var Hv=Qo;var vqi=y(C(),1);var bqi=y(C(),1);function RL(e,t){this._tilingScheme=e,this._maximumLevel=t,this._rootNodes=[]}var s_=new le;function $Et(e,t,n,i){let o=i.length;for(let r=0;r<o;++r){let s=i[r];if(s.x===t&&s.y===n&&s.level===e)return!0}return!1}RL.prototype.addAvailableTileRange=function(e,t,n,i,o){let r=this._tilingScheme,s=this._rootNodes;if(e===0)for(let p=n;p<=o;++p)for(let g=t;g<=i;++g)$Et(e,g,p,s)||s.push(new SL(r,void 0,0,g,p));r.tileXYToRectangle(t,n,e,s_);let a=s_.west,c=s_.north;r.tileXYToRectangle(i,o,e,s_);let d=s_.east,u=s_.south,h=new oTt(e,a,u,d,c);for(let p=0;p<s.length;++p){let g=s[p];uq(g.extent,h)&&rTt(this._maximumLevel,g,h)}};RL.prototype.computeMaximumLevelAtPosition=function(e){let t;for(let n=0;n<this._rootNodes.length;++n){let i=this._rootNodes[n];if(LL(i.extent,e)){t=i;break}}return l(t)?zv(void 0,t,e):-1};var eTt=[],tTt=[],nTt=new le,iTt=new le;RL.prototype.computeBestAvailableLevelOverRectangle=function(e){let t=eTt;t.length=0,e.east<e.west?(t.push(le.fromRadians(-Math.PI,e.south,e.east,e.north,nTt)),t.push(le.fromRadians(e.west,e.south,Math.PI,e.north,iTt))):t.push(e);let n=tTt;n.length=0;let i;for(i=0;i<this._rootNodes.length;++i)Kv(n,this._rootNodes[i],t);for(i=n.length-1;i>=0;--i)if(l(n[i])&&n[i].length===0)return i;return 0};var iTe=new ge;RL.prototype.isTileAvailable=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(t,n,e,s_);return le.center(i,iTe),this.computeMaximumLevelAtPosition(iTe)>=e};RL.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 SL(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(SL.prototype,{nw:{get:function(){return this._nw||(this._nw=new SL(this.tilingScheme,this,this.level+1,this.x*2,this.y*2)),this._nw}},ne:{get:function(){return this._ne||(this._ne=new SL(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2)),this._ne}},sw:{get:function(){return this._sw||(this._sw=new SL(this.tilingScheme,this,this.level+1,this.x*2,this.y*2+1)),this._sw}},se:{get:function(){return this._se||(this._se=new SL(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2+1)),this._se}}});function oTt(e,t,n,i,o){this.level=e,this.west=t,this.south=n,this.east=i,this.north=o}function uq(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<r&&n<o}function rTt(e,t,n){for(;t.level<e;)if(BY(t.nw.extent,n))t=t.nw;else if(BY(t.ne.extent,n))t=t.ne;else if(BY(t.sw.extent,n))t=t.sw;else if(BY(t.se.extent,n))t=t.se;else break;if(t.rectangles.length===0||t.rectangles[t.rectangles.length-1].level<=n.level)t.rectangles.push(n);else{let i=Yo(t.rectangles,n.level,sTt);i<0&&(i=~i),t.rectangles.splice(i,0,n)}}function sTt(e,t){return e.level-t}function BY(e,t){return t.west>=e.west&&t.east<=e.east&&t.south>=e.south&&t.north<=e.north}function LL(e,t){return t.longitude>=e.west&&t.longitude<=e.east&&t.latitude>=e.south&&t.latitude<=e.north}function zv(e,t,n){let i=0,o=!1;for(;!o;){let r=t._nw&&LL(t._nw.extent,n),s=t._ne&&LL(t._ne.extent,n),a=t._sw&&LL(t._sw.extent,n),c=t._se&&LL(t._se.extent,n);if(r+s+a+c>1){r&&(i=Math.max(i,zv(t,t._nw,n))),s&&(i=Math.max(i,zv(t,t._ne,n))),a&&(i=Math.max(i,zv(t,t._sw,n))),c&&(i=Math.max(i,zv(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];LL(a,n)&&(i=a.level)}t=t.parent}return i}function Kv(e,t,n){if(!t)return;let i,o=!1;for(i=0;i<n.length;++i)o=o||uq(t.extent,n[i]);if(!o)return;let r=t.rectangles;for(i=0;i<r.length;++i){let s=r[i];e[s.level]||(e[s.level]=n),e[s.level]=aTt(e[s.level],s)}Kv(e,t._nw,n),Kv(e,t._ne,n),Kv(e,t._sw,n),Kv(e,t._se,n)}function aTt(e,t){let n=[];for(let i=0;i<e.length;++i){let o=e[i];uq(o,t)?(o.west<t.west&&n.push(new le(o.west,o.south,t.west,o.north)),o.east>t.east&&n.push(new le(t.east,o.south,o.east,o.north)),o.south<t.south&&n.push(new le(Math.max(t.west,o.west),o.south,Math.min(t.east,o.east),t.south)),o.north>t.north&&n.push(new le(Math.max(t.west,o.west),t.north,Math.min(t.east,o.east),o.north))):n.push(o)}return n}var bf=RL;var cTt=15;function oTe(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}oTe.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 lTt(e,t){let n=t.copyrightText;l(n)&&(e.credit=new Gt(n));let i=t.spatialReference,o=i.latestWkid??i.wkid,r=t.extent,s={ellipsoid:e.ellipsoid};if(o===4326)s.rectangle=le.fromDegrees(r.xmin,r.ymin,r.xmax,r.ymax),e.tilingScheme=new ao(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 D(r.xmin,r.ymin),s.rectangleNortheastInMeters=new D(r.xmax,r.ymax),e.tilingScheme=new _s(s)}else throw new de("Invalid spatial reference");let a=t.tileInfo;if(!l(a))throw new de("tileInfo is required");e.width=a.rows+1,e.height=a.cols+1,e.encoding=a.format==="LERC"?Xm.LERC:Xm.NONE,e.lodCount=a.lods.length-1,(e.hasAvailability=t.capabilities.indexOf("Tilemap")!==-1)&&(e.tilesAvailable=new bf(e.tilingScheme,e.lodCount),e.tilesAvailable.addAvailableTileRange(0,0,0,e.tilingScheme.getNumberOfXTilesAtLevel(0),e.tilingScheme.getNumberOfYTilesAtLevel(0)),e.tilesAvailabilityLoaded=new bf(e.tilingScheme,e.lodCount)),e.levelZeroMaximumGeometricError=Es.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 dTt(e,t,n){try{let i=await t.fetchJson();lTt(e,i)}catch(i){let o=`An error occurred while accessing ${t}.`;throw vo.reportError(void 0,n,l(n)?n._errorEvent:void 0,o),i}}function Cy(e){e=e??Y.EMPTY_OBJECT,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 Ce}Object.defineProperties(Cy.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}}});Cy.fromUrl=async function(e,t){t=t??Y.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 oTe(t);await dTt(o,i);let r=new Cy(t);return o.build(r),r._resource=n,r};Cy.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(mq(this,n+1,e*2,t*2))){let h=rTe(this,n+1,e*2,t*2);s=h.promise,a=h.request}let c=o.fetchArrayBuffer();if(!l(c)||!l(s))return;let d=this,u=this._tilesAvailable;return Promise.all([c,s]).then(function(h){return new yc({buffer:h[0],width:d._width,height:d._height,childTileMask:r?u.computeChildMaskForTile(n,e,t):cTt,structure:d._terrainDataStructure,encoding:d._encoding})}).catch(async function(h){if(l(a)&&a.state===mi.CANCELLED){i.cancel();try{await i.deferred?.promise}catch{}return i.state=mi.CANCELLED,Promise.reject(h)}return Promise.reject(h)})};function mq(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}Cy.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};Cy.prototype.getTileDataAvailable=function(e,t,n){if(!this._hasAvailability)return;let i=mq(this,n,e,t);if(l(i))return i;rTe(this,n,e,t)};Cy.prototype.loadTileDataAvailability=function(e,t,n){};function uTt(e,t,n,i){let o=t-1,r=n-1,s=i[e.y*t+e.x],a=[],c={startX:e.x,startY:e.y,endX:0,endY:0},d=new D(e.x+1,e.y+1),u=!1,h=!1;for(;!(u&&h);){let p=d.x,g=h?d.y+1:d.y;if(!u){for(let f=e.y;f<g;++f)if(i[f*t+d.x]!==s){u=!0;break}u?(a.push(new D(d.x,e.y)),--d.x,--p,c.endX=d.x):d.x===o?(c.endX=d.x,u=!0):++d.x}if(!h){let f=d.y*t;for(let b=e.x;b<=p;++b)if(i[f+b]!==s){h=!0;break}h?(a.push(new D(e.x,d.y)),--d.y,c.endY=d.y):d.y===r?(c.endY=d.y,h=!0):++d.y}}return{endingIndices:a,range:c,value:s}}function mTt(e,t,n,i,o){let r=[];if(o.every(function(c){return c===o[0]}))return o[0]===1&&r.push({startX:e,startY:t,endX:e+n-1,endY:t+i-1}),r;let a=[new D(0,0)];for(;a.length>0;){let c=a.pop(),d=uTt(c,n,i,o);if(d.value===1){let h=d.range;h.startX+=e,h.endX+=e,h.startY+=t,h.endY+=t,r.push(h)}let u=d.endingIndices;u.length>0&&(a=a.concat(u))}return r}function rTe(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<<t,128),a=`tilemap/${t}/${r}/${o}/${s}/${s}`,c=e._availableCache;if(l(c[a]))return c[a];let d=new sr({throttle:!1,throttleByServer:!0,type:Zs.TERRAIN}),h=e._resource.getDerivedResource({url:a,request:d}).fetchJson();return l(h)?(h=h.then(function(p){let g=mTt(o,r,s,s,p.data);e._tilesAvailabilityLoaded.addAvailableTileRange(t,o,r,o+s,r+s);let f=e._tilesAvailable;for(let b=0;b<g.length;++b){let x=g[b];f.addAvailableTileRange(t,x.startX,x.startY,x.endX,x.endY)}return mq(e,t,n,i)}),c[a]={promise:h,request:d},h=h.finally(function(p){return delete c[a],p}),{promise:h,request:d}):{}}var hq=Cy;var Oqi=y(C(),1);var sTe="https://dev.virtualearth.net/REST/v1/Locations";function fq(e){e=e??Y.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:sTe,queryParameters:n}),this._credit=new Gt('<img src="http://dev.virtualearth.net/Branding/logo_powered_by.png"/>',!1)}Object.defineProperties(fq.prototype,{url:{get:function(){return sTe}},key:{get:function(){return this._key}},credit:{get:function(){return this._credit}}});fq.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:le.fromDegrees(a,s,d,c)}})})};var pq=fq;var Kqi=y(C(),1);function Aq(){}Object.defineProperties(Aq.prototype,{credit:{get:function(){}}});Aq.prototype.geocode=function(e){let t=e.match(/[^\s,\n]+/g);if(t.length===2||t.length===3){let n=+t[0],i=+t[1],o=t.length===3?+t[2]:300;if(isNaN(n)&&isNaN(i)){let r=/^(\d+.?\d*)([nsew])/i;for(let s=0;s<t.length;++s){let a=t[s].match(r);r.test(t[s])&&a.length===3&&(/^[ns]/i.test(a[2])?i=/^[n]/i.test(a[2])?+a[1]:-a[1]:/^[ew]/i.test(a[2])&&(n=/^[e]/i.test(a[2])?+a[1]:-a[1]))}}if(!isNaN(n)&&!isNaN(i)&&!isNaN(o)){let r={displayName:e,destination:m.fromDegrees(n,i,o)};return Promise.resolve([r])}}return Promise.resolve([])};var gq=Aq;var o$i=y(C(),1);var hTt=new ce,aTe=new m,VL=new m;function fTt(e){let t=e.points,n=e.times;if(t.length<3){let i=n[0],o=1/(n[1]-i),r=t[0],s=t[1];return function(a,c){l(c)||(c=new m);let d=(a-i)*o;return m.lerp(r,s,d,c)}}return function(i,o){l(o)||(o=new m);let r=e._lastTimeIndex=e.findTimeInterval(i,e._lastTimeIndex),s=(i-n[r])/(n[r+1]-n[r]),a=hTt;a.z=s,a.y=s*s,a.x=a.y*s,a.w=1;let c,d,u,h,p;return r===0?(c=t[0],d=t[1],u=e.firstTangent,h=m.subtract(t[2],c,aTe),m.multiplyByScalar(h,.5,h),p=X.multiplyByVector(o0.hermiteCoefficientMatrix,a,a)):r===t.length-2?(c=t[r],d=t[r+1],h=e.lastTangent,u=m.subtract(d,t[r-1],aTe),m.multiplyByScalar(u,.5,u),p=X.multiplyByVector(o0.hermiteCoefficientMatrix,a,a)):(c=t[r-1],d=t[r],u=t[r+1],h=t[r+2],p=X.multiplyByVector(xy.catmullRomCoefficientMatrix,a,a)),o=m.multiplyByScalar(c,p.x,o),m.multiplyByScalar(d,p.y,VL),m.add(o,VL,o),m.multiplyByScalar(u,p.z,VL),m.add(o,VL,o),m.multiplyByScalar(h,p.w,VL),m.add(o,VL,o)}}var pTt=new m,ATt=new m;function xy(e){e=e??Y.EMPTY_OBJECT;let t=e.points,n=e.times,i=e.firstTangent,o=e.lastTangent;if(t.length>2&&(l(i)||(i=pTt,m.multiplyByScalar(t[1],2,i),m.subtract(i,t[2],i),m.subtract(i,t[0],i),m.multiplyByScalar(i,.5,i)),!l(o))){let r=t.length-1;o=ATt,m.multiplyByScalar(t[r-1],2,o),m.subtract(t[r],o,o),m.add(o,t[r-2],o),m.multiplyByScalar(o,.5,o)}this._times=n,this._points=t,this._firstTangent=m.clone(i),this._lastTangent=m.clone(o),this._evaluateFunction=fTt(this),this._lastTimeIndex=0}Object.defineProperties(xy.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}}});xy.catmullRomCoefficientMatrix=new X(-.5,1,-.5,0,1.5,-2.5,0,1,-1.5,2,.5,0,.5,-.5,0,0);xy.prototype.findTimeInterval=yo.prototype.findTimeInterval;xy.prototype.wrapTime=yo.prototype.wrapTime;xy.prototype.clampTime=yo.prototype.clampTime;xy.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};var bq=xy;var K$i=y(C(),1);var E$i=y(C(),1);var l$i=y(C(),1);var wY={};wY.clipTriangleAtAxisAlignedThreshold=function(e,t,n,i,o,r){l(r)?r.length=0:r=[];let s,a,c;t?(s=n<e,a=i<e,c=o<e):(s=n>e,a=i>e,c=o>e);let d=s+a+c,u,h,p,g,f,b;return d===1?s?(u=(e-n)/(i-n),h=(e-n)/(o-n),r.push(1),r.push(2),h!==1&&(r.push(-1),r.push(0),r.push(2),r.push(h)),u!==1&&(r.push(-1),r.push(0),r.push(1),r.push(u))):a?(p=(e-i)/(o-i),g=(e-i)/(n-i),r.push(2),r.push(0),g!==1&&(r.push(-1),r.push(1),r.push(0),r.push(g)),p!==1&&(r.push(-1),r.push(1),r.push(2),r.push(p))):c&&(f=(e-o)/(n-o),b=(e-o)/(i-o),r.push(0),r.push(1),b!==1&&(r.push(-1),r.push(2),r.push(1),r.push(b)),f!==1&&(r.push(-1),r.push(2),r.push(0),r.push(f))):d===2?!s&&n!==e?(g=(e-i)/(n-i),f=(e-o)/(n-o),r.push(0),r.push(-1),r.push(1),r.push(0),r.push(g),r.push(-1),r.push(2),r.push(0),r.push(f)):!a&&i!==e?(b=(e-o)/(i-o),u=(e-n)/(i-n),r.push(1),r.push(-1),r.push(2),r.push(1),r.push(b),r.push(-1),r.push(0),r.push(1),r.push(u)):!c&&o!==e&&(h=(e-n)/(o-n),p=(e-i)/(o-i),r.push(2),r.push(-1),r.push(0),r.push(2),r.push(h),r.push(-1),r.push(1),r.push(2),r.push(p)):d!==3&&(r.push(0),r.push(1),r.push(2)),r};wY.computeBarycentricCoordinates=function(e,t,n,i,o,r,s,a,c){let d=n-s,u=s-o,h=r-a,p=i-a,g=1/(h*d+u*p),f=t-a,b=e-s,x=(h*b+u*f)*g,I=(-p*b+d*f)*g,_=1-x-I;return l(c)?(c.x=x,c.y=I,c.z=_,c):new m(x,I,_)};wY.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),h=(a-r)*(n-e)-(s-o)*(i-t);if(h===0)return;let p=d/h,g=u/h;if(p>=0&&p<=1&&g>=0&&g<=1)return l(c)||(c=new D),c.x=e+p*(n-e),c.y=t+p*(i-t),c};var tb=wY;function Iy(e){this._quantizedVertices=e.quantizedVertices,this._encodedNormals=e.encodedNormals,this._indices=e.indices,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._boundingSphere=e.boundingSphere,this._orientedBoundingBox=e.orientedBoundingBox,this._horizonOcclusionPoint=e.horizonOcclusionPoint,this._credits=e.credits;let t=this._quantizedVertices.length/3,n=this._uValues=this._quantizedVertices.subarray(0,t),i=this._vValues=this._quantizedVertices.subarray(t,2*t);this._heightValues=this._quantizedVertices.subarray(2*t,3*t);function o(s,a){return i[s]-i[a]}function r(s,a){return n[s]-n[a]}this._westIndices=WY(e.westIndices,o,t),this._southIndices=WY(e.southIndices,r,t),this._eastIndices=WY(e.eastIndices,o,t),this._northIndices=WY(e.northIndices,r,t),this._westSkirtHeight=e.westSkirtHeight,this._southSkirtHeight=e.southSkirtHeight,this._eastSkirtHeight=e.eastSkirtHeight,this._northSkirtHeight=e.northSkirtHeight,this._childTileMask=e.childTileMask??15,this._createdByUpsampling=e.createdByUpsampling??!1,this._waterMask=e.waterMask,this._mesh=void 0}Object.defineProperties(Iy.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}},canUpsample:{get:function(){return l(this._mesh)}}});var XY=[];function WY(e,t,n){XY.length=e.length;let i=!1;for(let o=0,r=e.length;o<r;++o)XY[o]=e[o],i=i||o>0&&t(e[o-1],e[o])>0;return i?(XY.sort(t),Me.createTypedArray(n,XY)):e}var cTe="createVerticesFromQuantizedTerrainMesh",gTt=new hi(cTe),bTt=new hi(cTe,df.maximumAsynchronousTasks);Iy.prototype.createMesh=function(e){e=e??Y.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),h=(a?bTt:gTt).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(h))return;let p=this;return Promise.resolve(h).then(function(g){let f=p._quantizedVertices.length/3,b=f+p._westIndices.length+p._southIndices.length+p._eastIndices.length+p._northIndices.length,x=Me.createTypedArray(b,g.indices),I=new Float32Array(g.vertices),_=g.center,E=g.minimumHeight,S=g.maximumHeight,R=p._boundingSphere,G=p._orientedBoundingBox,B=m.clone(g.occludeePointInScaledSpace)??p._horizonOcclusionPoint,w=g.vertexStride,F=Kc.clone(g.encoding);return p._mesh=new Fm(_,I,x,g.indexCountWithoutSkirts,f,E,S,R,B,w,G,F,g.westIndicesSouthToNorth,g.southIndicesEastToWest,g.eastIndicesNorthToSouth,g.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 yTt=new hi("upsampleQuantizedTerrainMesh",df.maximumAsynchronousTasks);Iy.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,h=e.tileXYToRectangle(o,r,s),p=yTt.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:h,ellipsoid:u});if(!l(p))return;let g=Math.min(this._westSkirtHeight,this._eastSkirtHeight);g=Math.min(g,this._southSkirtHeight),g=Math.min(g,this._northSkirtHeight);let f=c?g*.5:this._westSkirtHeight,b=d?g*.5:this._southSkirtHeight,x=c?this._eastSkirtHeight:g*.5,I=d?this._northSkirtHeight:g*.5,_=this._credits;return Promise.resolve(p).then(function(E){let S=new Uint16Array(E.vertices),R=Me.createTypedArray(S.length/3,E.indices),G;return l(E.encodedNormals)&&(G=new Uint8Array(E.encodedNormals)),new Iy({quantizedVertices:S,indices:R,encodedNormals:G,minimumHeight:E.minimumHeight,maximumHeight:E.maximumHeight,boundingSphere:ue.clone(E.boundingSphere),orientedBoundingBox:vn.clone(E.orientedBoundingBox),horizonOcclusionPoint:m.clone(E.horizonOcclusionPoint),westIndices:E.westIndices,southIndices:E.southIndices,eastIndices:E.eastIndices,northIndices:E.northIndices,westSkirtHeight:f,southSkirtHeight:b,eastSkirtHeight:x,northSkirtHeight:I,childTileMask:0,credits:_,createdByUpsampling:!0})})};var yq=32767,lTe=new m;Iy.prototype.interpolateHeight=function(e,t,n){let i=Z.clamp((t-e.west)/e.width,0,1);i*=yq;let o=Z.clamp((n-e.south)/e.height,0,1);return o*=yq,l(this._mesh)?_Tt(this,i,o):ETt(this,i,o)};function dTe(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),h=Math.max(i,r,a);return e>=c&&e<=d&&t>=u&&t<=h}var CTt=new D,xTt=new D,ITt=new D;function _Tt(e,t,n){let i=e._mesh,o=i.vertices,r=i.encoding,s=i.indices;for(let a=0,c=s.length;a<c;a+=3){let d=s[a],u=s[a+1],h=s[a+2],p=r.decodeTextureCoordinates(o,d,CTt),g=r.decodeTextureCoordinates(o,u,xTt),f=r.decodeTextureCoordinates(o,h,ITt);if(dTe(t,n,p.x,p.y,g.x,g.y,f.x,f.y)){let b=tb.computeBarycentricCoordinates(t,n,p.x,p.y,g.x,g.y,f.x,f.y,lTe);if(b.x>=-1e-15&&b.y>=-1e-15&&b.z>=-1e-15){let x=r.decodeHeight(o,d),I=r.decodeHeight(o,u),_=r.decodeHeight(o,h);return b.x*x+b.y*I+b.z*_}}}}function ETt(e,t,n){let i=e._uValues,o=e._vValues,r=e._heightValues,s=e._indices;for(let a=0,c=s.length;a<c;a+=3){let d=s[a],u=s[a+1],h=s[a+2],p=i[d],g=i[u],f=i[h],b=o[d],x=o[u],I=o[h];if(dTe(t,n,p,b,g,x,f,I)){let _=tb.computeBarycentricCoordinates(t,n,p,b,g,x,f,I,lTe);if(_.x>=-1e-15&&_.y>=-1e-15&&_.z>=-1e-15){let E=_.x*r[d]+_.y*r[u]+_.z*r[h];return Z.lerp(e._minimumHeight,e._maximumHeight,E/yq)}}}}Iy.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};Iy.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var a_=Iy;function TTt(e){this.resource=e.resource,this.version=e.version,this.isHeightmap=e.isHeightmap,this.tileUrlTemplates=e.tileUrlTemplates,this.availability=e.availability,this.hasVertexNormals=e.hasVertexNormals,this.hasWaterMask=e.hasWaterMask,this.hasMetadata=e.hasMetadata,this.availabilityLevels=e.availabilityLevels,this.availabilityTilesLoaded=e.availabilityTilesLoaded,this.littleEndianExtensionSize=e.littleEndianExtensionSize,this.availabilityPromiseCache={}}function mTe(e){this.requestVertexNormals=e.requestVertexNormals??!1,this.requestWaterMask=e.requestWaterMask??!1,this.requestMetadata=e.requestMetadata??!0,this.ellipsoid=e.ellipsoid??ie.default,this.heightmapWidth=65,this.heightmapStructure=void 0,this.hasWaterMask=!1,this.hasMetadata=!1,this.hasVertexNormals=!1,this.scheme=void 0,this.lastResource=void 0,this.layerJsonResource=void 0,this.previousError=void 0,this.availability=void 0,this.tilingScheme=void 0,this.levelZeroMaximumGeometricError=void 0,this.heightmapStructure=void 0,this.layers=[],this.attribution="",this.overallAvailability=[],this.overallMaxZoom=0,this.tileCredits=[]}mTe.prototype.build=function(e){e._heightmapWidth=this.heightmapWidth,e._scheme=this.scheme;let t=l(this.lastResource.credits)?this.lastResource.credits:[];e._tileCredits=t.concat(this.tileCredits),e._availability=this.availability,e._tilingScheme=this.tilingScheme,e._requestWaterMask=this.requestWaterMask,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._heightmapStructure=this.heightmapStructure,e._layers=this.layers,e._hasWaterMask=this.hasWaterMask,e._hasVertexNormals=this.hasVertexNormals,e._hasMetadata=this.hasMetadata};async function hTe(e,t,n){if(!t.format){let b="The tile format is not specified in the layer.json file.";throw e.previousError=vo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,b),new de(b)}if(!t.tiles||t.tiles.length===0){let b="The layer.json file does not specify any tile URL templates.";throw e.previousError=vo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,b),new de(b)}let i=!1,o=!1,r=!1,s=!0,a=!1;if(t.format==="heightmap-1.0")a=!0,l(e.heightmapStructure)||(e.heightmapStructure={heightScale:1/5,heightOffset:-1e3,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1,lowestEncodedHeight:0,highestEncodedHeight:256*256-1}),o=!0,e.requestWaterMask=!0;else if(t.format.indexOf("quantized-mesh-1.")!==0){let b=`The tile format "${t.format}" is invalid or not supported.`;throw e.previousError=vo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,b),new de(b)}let c=t.tiles,d=t.maxzoom;if(e.overallMaxZoom=Math.max(e.overallMaxZoom,d),!t.projection||t.projection==="EPSG:4326")e.tilingScheme=new ao({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else if(t.projection==="EPSG:3857")e.tilingScheme=new _s({numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else{let b=`The projection "${t.projection}" is invalid or not supported.`;throw e.previousError=vo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,b),new de(b)}if(e.levelZeroMaximumGeometricError=Es.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.tilingScheme.ellipsoid,e.heightmapWidth,e.tilingScheme.getNumberOfXTilesAtLevel(0)),!t.scheme||t.scheme==="tms"||t.scheme==="slippyMap")e.scheme=t.scheme;else{let b=`The scheme "${t.scheme}" is invalid or not supported.`;throw e.previousError=vo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,b),new de(b)}let u;l(t.extensions)&&t.extensions.indexOf("octvertexnormals")!==-1?i=!0:l(t.extensions)&&t.extensions.indexOf("vertexnormals")!==-1&&(i=!0,s=!1),l(t.extensions)&&t.extensions.indexOf("watermask")!==-1&&(o=!0),l(t.extensions)&&t.extensions.indexOf("metadata")!==-1&&(r=!0);let h=t.metadataAvailability,p=t.available,g;if(l(p)&&!l(h)){g=new bf(e.tilingScheme,p.length);for(let b=0;b<p.length;++b){let x=p[b],I=e.tilingScheme.getNumberOfYTilesAtLevel(b);l(e.overallAvailability[b])||(e.overallAvailability[b]=[]);for(let _=0;_<x.length;++_){let E=x[_],S=I-E.endY-1,R=I-E.startY-1;e.overallAvailability[b].push([E.startX,S,E.endX,R]),g.addAvailableTileRange(b,E.startX,S,E.endX,R)}}}else l(h)&&(u=new bf(e.tilingScheme,d),g=new bf(e.tilingScheme,d),e.overallAvailability[0]=[[0,0,1,0]],g.addAvailableTileRange(0,0,0,1,0));e.hasWaterMask=e.hasWaterMask||o,e.hasVertexNormals=e.hasVertexNormals||i,e.hasMetadata=e.hasMetadata||r,l(t.attribution)&&(e.attribution.length>0&&(e.attribution+=" "),e.attribution+=t.attribution),e.layers.push(new TTt({resource:e.lastResource,version:t.version,isHeightmap:a,tileUrlTemplates:c,availability:g,hasVertexNormals:i,hasWaterMask:o,hasMetadata:r,availabilityLevels:h,availabilityTilesLoaded:u,littleEndianExtensionSize:s}));let f=t.parentUrl;return l(f)?l(g)?(e.lastResource=e.lastResource.getDerivedResource({url:f}),e.lastResource.appendForwardSlash(),e.layerJsonResource=e.lastResource.getDerivedResource({url:"layer.json"}),await Iq(e),!0):(console.log("A layer.json can't have a parentUrl if it does't have an available array."),!0):!0}function STt(e,t,n){let i=`An error occurred while accessing ${e.layerJsonResource.url}.`;if(l(t)&&(i+=` ${t.message}`),e.previousError=vo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,i),e.previousError.retry)return Iq(e,n);throw new de(i)}async function LTt(e,t,n){await hTe(e,t,n);let i=e.overallAvailability.length;if(i>0){let o=e.availability=new bf(e.tilingScheme,e.overallMaxZoom);for(let r=0;r<i;++r){let s=e.overallAvailability[r];for(let a=0;a<s.length;++a){let c=s[a];o.addAvailableTileRange(r,c[0],c[1],c[2],c[3])}}}if(e.attribution.length>0){let o=new Gt(e.attribution);e.tileCredits.push(o)}return!0}async function Iq(e,t){try{let n=await e.layerJsonResource.fetchJson();return LTt(e,n,t)}catch(n){return l(n)&&n.statusCode===404?(await hTe(e,{tilejson:"2.1.0",format:"heightmap-1.0",version:"1.0.0",scheme:"tms",tiles:["{z}/{x}/{y}.terrain?v={version}"]},t),!0):STt(e,n,t)}}function yf(e){e=e??Y.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 Ce;let t=e.credit;typeof t=="string"&&(t=new Gt(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 Cq={OCT_VERTEX_NORMALS:1,WATER_MASK:2,METADATA:4};function uTe(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 RTt(e,t,n,i,o){let r=new Uint16Array(t,0,e._heightmapWidth*e._heightmapWidth);return new yc({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 VTt(e,t,n,i,o,r){let s=r.littleEndianExtensionSize,a=0,c=3,d=c+1,u=Float64Array.BYTES_PER_ELEMENT*c,h=Float64Array.BYTES_PER_ELEMENT*d,g=Uint16Array.BYTES_PER_ELEMENT*3,f=3,b=Uint16Array.BYTES_PER_ELEMENT,x=b*f,I=new DataView(t),_=new m(I.getFloat64(a,!0),I.getFloat64(a+8,!0),I.getFloat64(a+16,!0));a+=u;let E=I.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let S=I.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let R=new ue(new m(I.getFloat64(a,!0),I.getFloat64(a+8,!0),I.getFloat64(a+16,!0)),I.getFloat64(a+u,!0));a+=h;let G=new m(I.getFloat64(a,!0),I.getFloat64(a+8,!0),I.getFloat64(a+16,!0));a+=u;let B=I.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let w=new Uint16Array(t,a,B*3);a+=B*g,B>64*1024&&(b=Uint32Array.BYTES_PER_ELEMENT,x=b*f);let F=w.subarray(0,B),P=w.subarray(B,2*B),A=w.subarray(B*2,3*B);Mn.zigZagDeltaDecode(F,P,A),a%b!==0&&(a+=b-a%b);let T=I.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let L=Me.createTypedArrayFromArrayBuffer(B,t,a,T*f);a+=T*x;let V=0,W=L.length;for(let he=0;he<W;++he){let xe=L[he];L[he]=V-xe,xe===0&&++V}let M=I.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let Q=Me.createTypedArrayFromArrayBuffer(B,t,a,M);a+=M*b;let N=I.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let k=Me.createTypedArrayFromArrayBuffer(B,t,a,N);a+=N*b;let v=I.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let O=Me.createTypedArrayFromArrayBuffer(B,t,a,v);a+=v*b;let H=I.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let ee=Me.createTypedArrayFromArrayBuffer(B,t,a,H);a+=H*b;let K,te;for(;a<I.byteLength;){let he=I.getUint8(a,!0);a+=Uint8Array.BYTES_PER_ELEMENT;let xe=I.getUint32(a,s);if(a+=Uint32Array.BYTES_PER_ELEMENT,he===Cq.OCT_VERTEX_NORMALS&&e._requestVertexNormals)K=new Uint8Array(t,a,B*2);else if(he===Cq.WATER_MASK&&e._requestWaterMask)te=new Uint8Array(t,a,xe);else if(he===Cq.METADATA&&e._requestMetadata){let Te=I.getUint32(a,!0);if(Te>0){let Le=mr(new Uint8Array(t),a+Uint32Array.BYTES_PER_ELEMENT,Te).available;if(l(Le))for(let De=0;De<Le.length;++De){let Ue=n+De+1,je=Le[De],it=e._tilingScheme.getNumberOfYTilesAtLevel(Ue);for(let nn=0;nn<je.length;++nn){let rt=je[nn],rn=it-rt.endY-1,Jt=it-rt.startY-1;e.availability.addAvailableTileRange(Ue,rt.startX,rn,rt.endX,Jt),r.availability.addAvailableTileRange(Ue,rt.startX,rn,rt.endX,Jt)}}}r.availabilityTilesLoaded.addAvailableTileRange(n,i,o,i,o)}a+=xe}let q=e.getLevelMaximumGeometricError(n)*5,pe=e._tilingScheme.tileXYToRectangle(i,o,n),ye=vn.fromRectangle(pe,E,S,e._tilingScheme.ellipsoid);return new a_({center:_,minimumHeight:E,maximumHeight:S,boundingSphere:R,orientedBoundingBox:ye,horizonOcclusionPoint:G,quantizedVertices:w,encodedNormals:K,indices:L,westIndices:Q,southIndices:k,eastIndices:O,northIndices:ee,westSkirtHeight:q,southSkirtHeight:q,eastSkirtHeight:q,northSkirtHeight:q,childTileMask:e.availability.computeChildMaskForTile(n,i,o),waterMask:te,credits:e._tileCredits})}yf.prototype.requestTileGeometry=function(e,t,n,i){let o=this._layers,r,s=o.length,a=!1,c=Promise.resolve();if(s===1)r=o[0];else for(let d=0;d<s;++d){let u=o[d];if(!l(u.availability)||u.availability.isTileAvailable(n,e,t)){r=u;break}let h=_q(this,e,t,n,u,d===0);h.result&&(a=!0,c=c.then(()=>h.promise))}return!l(r)&&a?c.then(()=>new Promise(d=>{setTimeout(()=>{let u=this.requestTileGeometry(e,t,n,i);d(u)},0)})):fTe(this,e,t,n,r,i)};function fTe(e,t,n,i,o,r){if(!l(o))return Promise.reject(new de("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,h=s[(t+a+i)%s.length],p=o.resource;l(p._ionEndpoint)&&!l(p._ionEndpoint.externalType)?(c.length!==0&&(u={extensions:c.join("-")}),d=uTe(void 0)):d=uTe(c);let g=p.getDerivedResource({url:h,templateValues:{version:o.version,z:i,x:t,y:a},queryParameters:u,headers:d,request:r}).fetchArrayBuffer();if(l(g))return g.then(function(f){return l(f)?l(e._heightmapStructure)?RTt(e,f,i,t,n):VTt(e,f,i,t,n,o):Promise.reject(new de("Mesh buffer doesn't exist."))})}Object.defineProperties(yf.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}}});yf.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};yf.fromIonAssetId=async function(e,t){let n=await Nd.fromAssetId(e);return yf.fromUrl(n,t)};yf.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT,e=await Promise.resolve(e);let n=Ve.createIfNeeded(e);n.appendForwardSlash();let i=new mTe(t);i.lastResource=n,i.layerJsonResource=i.lastResource.getDerivedResource({url:"layer.json"}),await Iq(i);let o=new yf(t);return i.build(o),o};yf.prototype.getTileDataAvailable=function(e,t,n){if(!l(this._availability))return;if(n>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;r<o;++r)if(_q(this,e,t,n,i[r],r===0).result)return;return!1};yf.prototype.loadTileDataAvailability=function(e,t,n){if(!l(this._availability)||n>this._availability._maximumLevel||this._availability.isTileAvailable(n,e,t)||!this._hasMetadata)return;let i=this._layers,o=i.length;for(let r=0;r<o;++r){let s=_q(this,e,t,n,i[r],r===0);if(l(s.promise))return s.promise}};function xq(e,t,n,i){if(i===0)return;let o=e.availabilityLevels,r=i%o===0?i-o:(i/o|0)*o,s=1<<i-r,a=t/s|0,c=n/s|0;return{level:r,x:a,y:c}}function _q(e,t,n,i,o,r){if(!l(o.availabilityLevels))return{result:!1};let s,a=function(){delete o.availabilityPromiseCache[s]},c=o.availabilityTilesLoaded,d=o.availability,u=xq(o,t,n,i);for(;l(u);){if(d.isTileAvailable(u.level,u.x,u.y)&&!c.isTileAvailable(u.level,u.x,u.y)){let h;if(!r&&(s=`${u.level}-${u.x}-${u.y}`,h=o.availabilityPromiseCache[s],!l(h))){let p=new sr({throttle:!1,throttleByServer:!0,type:Zs.TERRAIN});h=fTe(e,u.x,u.y,u.level,o,p),l(h)&&(o.availabilityPromiseCache[s]=h,h.then(a))}return{result:!0,promise:h}}u=xq(o,u.x,u.y,u.level)}return{result:!1}}yf._getAvailabilityTile=xq;var c_=yf;var ieo=y(C(),1);function nb(e){e=e??Y.EMPTY_OBJECT;let t=e.radius,n={center:e.center,semiMajorAxis:t,semiMinorAxis:t,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,vertexFormat:e.vertexFormat,stRotation:e.stRotation,shadowVolume:e.shadowVolume};this._ellipseGeometry=new Fl(n),this._workerName="createCircleGeometry"}nb.packedLength=Fl.packedLength;nb.pack=function(e,t,n){return Fl.pack(e._ellipseGeometry,t,n)};var pTe=new Fl({center:new m,semiMajorAxis:1,semiMinorAxis:1}),xc={center:new m,radius:void 0,ellipsoid:ie.clone(ie.default),height:void 0,extrudedHeight:void 0,granularity:void 0,vertexFormat:new we,stRotation:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0,shadowVolume:void 0};nb.unpack=function(e,t,n){let i=Fl.unpack(e,t,pTe);return xc.center=m.clone(i._center,xc.center),xc.ellipsoid=ie.clone(i._ellipsoid,xc.ellipsoid),xc.ellipsoid=ie.clone(i._ellipsoid,pTe._ellipsoid),xc.height=i._height,xc.extrudedHeight=i._extrudedHeight,xc.granularity=i._granularity,xc.vertexFormat=we.clone(i._vertexFormat,xc.vertexFormat),xc.stRotation=i._stRotation,xc.shadowVolume=i._shadowVolume,l(n)?(xc.semiMajorAxis=i._semiMajorAxis,xc.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new Fl(xc),n):(xc.radius=i._semiMajorAxis,new nb(xc))};nb.createGeometry=function(e){return Fl.createGeometry(e._ellipseGeometry)};nb.createShadowVolume=function(e,t,n){let i=e._ellipseGeometry._granularity,o=e._ellipseGeometry._ellipsoid,r=t(i,o),s=n(i,o);return new nb({center:e._ellipseGeometry._center,radius:e._ellipseGeometry._semiMajorAxis,ellipsoid:o,stRotation:e._ellipseGeometry._stRotation,granularity:i,extrudedHeight:r,height:s,vertexFormat:we.POSITION_ONLY,shadowVolume:!0})};Object.defineProperties(nb.prototype,{rectangle:{get:function(){return this._ellipseGeometry.rectangle}},textureCoordinateRotationPoints:{get:function(){return this._ellipseGeometry.textureCoordinateRotationPoints}}});var Eq=nb;var deo=y(C(),1);function GL(e){e=e??Y.EMPTY_OBJECT;let t=e.radius,n={center:e.center,semiMajorAxis:t,semiMinorAxis:t,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,numberOfVerticalLines:e.numberOfVerticalLines};this._ellipseGeometry=new du(n),this._workerName="createCircleOutlineGeometry"}GL.packedLength=du.packedLength;GL.pack=function(e,t,n){return du.pack(e._ellipseGeometry,t,n)};var GTt=new du({center:new m,semiMajorAxis:1,semiMinorAxis:1}),Gu={center:new m,radius:void 0,ellipsoid:ie.clone(ie.UNIT_SPHERE),height:void 0,extrudedHeight:void 0,granularity:void 0,numberOfVerticalLines:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0};GL.unpack=function(e,t,n){let i=du.unpack(e,t,GTt);return Gu.center=m.clone(i._center,Gu.center),Gu.ellipsoid=ie.clone(i._ellipsoid,Gu.ellipsoid),Gu.height=i._height,Gu.extrudedHeight=i._extrudedHeight,Gu.granularity=i._granularity,Gu.numberOfVerticalLines=i._numberOfVerticalLines,l(n)?(Gu.semiMajorAxis=i._semiMajorAxis,Gu.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new du(Gu),n):(Gu.radius=i._semiMajorAxis,new GL(Gu))};GL.createGeometry=function(e){return du.createGeometry(e._ellipseGeometry)};var Tq=GL;var Ceo=y(C(),1);function ZL(e){e=e??Y.EMPTY_OBJECT,this._callback=e.callback,this._tilingScheme=e.tilingScheme,l(this._tilingScheme)||(this._tilingScheme=new ao({ellipsoid:e.ellipsoid??ie.default})),this._width=e.width,this._height=e.height;let t=Math.max(this._width,this._height);this._levelZeroMaximumGeometricError=Es.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,t,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new Ce;let n=e.credit;typeof n=="string"&&(n=new Gt(n)),this._credit=n}Object.defineProperties(ZL.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(){}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});ZL.prototype.requestTileGeometry=function(e,t,n,i){let o=this._callback(e,t,n);if(!l(o))return;let r=this._width,s=this._height;return Promise.resolve(o).then(function(a){let c=a;return Array.isArray(c)&&(c=new Float64Array(c)),new yc({buffer:c,width:r,height:s})})};ZL.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};ZL.prototype.getTileDataAvailable=function(e,t,n){};ZL.prototype.loadTileDataAvailability=function(e,t,n){};var Sq=ZL;var Ieo=y(C(),1);function ATe(e){this.proxy=e}ATe.prototype.getURL=function(e){let t=this.proxy.indexOf("?")===-1?"?":"";return this.proxy+t+encodeURIComponent(e)};var Lq=ATe;var Eeo=y(C(),1),ZTt={SEARCH:0,AUTOCOMPLETE:1},_y=Object.freeze(ZTt);var Veo=y(C(),1);function FY(){Ae.throwInstantiationError()}Object.defineProperties(FY.prototype,{credit:{get:Ae.throwInstantiationError}});FY.getCreditsFromResult=function(e){if(l(e.attributions))return e.attributions.map(Gt.getIonCredit)};FY.prototype.geocode=Ae.throwInstantiationError;var BL=FY;var Beo=y(C(),1);function gTe(){Ae.throwInstantiationError()}gTe.createGeometry=function(e){Ae.throwInstantiationError()};var Rq=gTe;var qeo=y(C(),1),PTt=y(Vq(),1);var veo=y(C(),1);var Weo=y(C(),1);function BTt(e,t){return(e&t)!==0}var el=BTt;var wTt=[1,2,4,8],bTe=15,XTt=16,WTt=64,FTt=128;function Mp(e,t,n,i,o,r){this._bits=e,this.cnodeVersion=t,this.imageryVersion=n,this.terrainVersion=i,this.imageryProvider=o,this.terrainProvider=r,this.ancestorHasTerrain=!1,this.terrainState=void 0}Mp.clone=function(e,t){return l(t)?(t._bits=e._bits,t.cnodeVersion=e.cnodeVersion,t.imageryVersion=e.imageryVersion,t.terrainVersion=e.terrainVersion,t.imageryProvider=e.imageryProvider,t.terrainProvider=e.terrainProvider):t=new Mp(e._bits,e.cnodeVersion,e.imageryVersion,e.terrainVersion,e.imageryProvider,e.terrainProvider),t.ancestorHasTerrain=e.ancestorHasTerrain,t.terrainState=e.terrainState,t};Mp.prototype.setParent=function(e){this.ancestorHasTerrain=e.ancestorHasTerrain||this.hasTerrain()};Mp.prototype.hasSubtree=function(){return el(this._bits,XTt)};Mp.prototype.hasImagery=function(){return el(this._bits,WTt)};Mp.prototype.hasTerrain=function(){return el(this._bits,FTt)};Mp.prototype.hasChildren=function(){return el(this._bits,bTe)};Mp.prototype.hasChild=function(e){return el(this._bits,wTt[e])};Mp.prototype.getChildBitmask=function(){return this._bits&bTe};var Jv=Mp;function MTt(e){let t=e.length,n=new ArrayBuffer(t),i=new Uint8Array(n);for(let o=0;o<t;++o)i[o]=e.charCodeAt(o);return n}var vTt=MTt(`E\xF4\xBD\vy\xE2jE"\x92,\xCDq\xF8IFgQ\0B%\xC6\xE8a,f)\b\xC64\xDCjb%y wmi\xD6\xF0\x9Ck\x93\xA1\xBDNu\xE0A[\xDF@V\f\xD9\xBBr\x9B\x81|3S\xEEOl\xD4q\xB0{\xC0\x7FEVZ\xADwUe\v3\x92*\xACl5\xC50s\xF83>mF8J\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\xF0<VqH\x82'UfYNe\x98u\xA3aF}a?A\0\x9F\xD7\xB44M\xCE\x87F\xB0\xD5\xB8\x8A'{\x8B\xDC+\xBBMg0\xC8\xD1\xF6\\\x8FP\xFA[/F\x9Bn5/'C.\xEB \f^\xA5s\x1Be4\xE5l.jC'c#U\xA9?q{gC}:\xAF\xCD\xE2TU\x9C\xFDK\xC6\xE2\x9F/(\xED\xCB\\\xC6-f\x07\x88\xA7;/*"N\xB0k.\xDD\r\x95}}G\xBAC\xB2\xB2+>M\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 Zu(e){this.imageryPresent=!0,this.protoImagery=void 0,this.terrainPresent=!0,this.negativeAltitudeExponentBias=32,this.negativeAltitudeThreshold=Z.EPSILON12,this.providers={},this.key=void 0,this._resource=void 0,this._quadPacketVersion=1,this._tileInfo={},this._subtreePromises={}}Object.defineProperties(Zu.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},resource:{get:function(){return this._resource}}});Zu.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 Zu;i._resource=n;try{await NTt(i),await i.getQuadTreePacket("",i._quadPacketVersion)}catch(o){let r=`An error occurred while accessing ${CTe(i,"",1).url}: ${o}`;throw new de(r)}return i};Zu.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<<o,s=0;el(t,r)?el(e,r)&&(s|=1):(s|=2,el(e,r)||(s|=1)),i+=s}return i};Zu.quadKeyToTileXY=function(e){let t=0,n=0,i=e.length-1;for(let o=i;o>=0;--o){let r=1<<o,s=+e[i-o];el(s,2)?el(s,1)||(t|=r):(n|=r,el(s,1)&&(t|=r))}return{x:t,y:n,level:i}};Zu.prototype.isValid=function(e){let t=this.getTileInformationFromQuadKey(e);if(l(t))return t!==null;let n=!0,i=e,o;for(;i.length>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 yTe=new hi("decodeGoogleEarthEnterprisePacket");Zu.prototype.getQuadTreePacket=function(e,t,n){t=t??1,e=e??"";let o=CTe(this,e,t,n).fetchArrayBuffer();if(!l(o))return;let r=this._tileInfo,s=this.key;return o.then(function(a){return yTe.scheduleTask({buffer:a,quadKey:e,type:"Metadata",key:s},[a]).then(function(d){let u,h=-1;if(e!==""){h=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,b){return f.length-b.length});let g=p.length;for(let f=0;f<g;++f){let b=p[f];if(d[b]!==null){let I=Jv.clone(d[b]),_=b.length;if(_===h)I.setParent(u);else if(_>1){let E=r[b.substring(0,b.length-1)];I.setParent(E)}r[b]=I}else r[b]=null}})})};Zu.prototype.populateSubtree=function(e,t,n,i){let o=Zu.tileXYToQuadKey(e,t,n);return Bq(this,o,i)};function Bq(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 sr({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),Bq(e,t,s)});if(!l(r)||!r.hasSubtree())return Promise.reject(new de(`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 sr({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),Bq(e,t,s)}).finally(function(){delete a[o]})}Zu.prototype.getTileInformation=function(e,t,n){let i=Zu.tileXYToQuadKey(e,t,n);return this._tileInfo[i]};Zu.prototype.getTileInformationFromQuadKey=function(e){return this._tileInfo[e]};function CTe(e,t,n,i){return e._resource.getDerivedResource({url:`flatfile?q2-0${t}-q.${n.toString()}`,request:i})}var Gq,Zq;function NTt(e){let t=e._resource.getDerivedResource({url:"dbRoot.v5",queryParameters:{output:"proto"}});if(!l(Zq)){let n=hn("ThirdParty/google-earth-dbroot-parser.js"),i=window.cesiumGoogleEarthDbRootParser;Zq=My(n).then(function(){Gq=window.cesiumGoogleEarthDbRootParser(PTt),l(i)?window.cesiumGoogleEarthDbRootParser=i:delete window.cesiumGoogleEarthDbRootParser})}return Zq.then(function(){return t.fetchArrayBuffer()}).then(function(n){let i=Gq.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 yTe.scheduleTask({buffer:c,type:"DbRoot",key:a},[c])}).then(function(n){let i=Gq.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<s;++a){let c=r[a],d=c.copyrightString;l(d)&&(o[c.providerId]=new Gt(d.value))}}).catch(function(){console.log(`Failed to retrieve ${t.url}. Using defaults.`),e.key=vTt})}var ib=Zu;var pto=y(C(),1);function l_(e){e=e??Y.EMPTY_OBJECT,this._buffer=e.buffer,this._credits=e.credits,this._negativeAltitudeExponentBias=e.negativeAltitudeExponentBias,this._negativeElevationThreshold=e.negativeElevationThreshold;let t=e.childTileMask??15,n=t&3;n|=t&4?8:0,n|=t&8?4:0,this._childTileMask=n,this._createdByUpsampling=e.createdByUpsampling??!1,this._skirtHeight=void 0,this._bufferType=this._buffer.constructor,this._mesh=void 0,this._minimumHeight=void 0,this._maximumHeight=void 0}Object.defineProperties(l_.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){}}});var _Te="createVerticesFromGoogleEarthEnterpriseBuffer",DTt=new hi(_Te),QTt=new hi(_Te,df.maximumAsynchronousTasks),xTe=new le,wq=new le;l_.prototype.createMesh=function(e){e=e??Y.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;t.tileXYToNativeRectangle(n,i,o,xTe),t.tileXYToRectangle(n,i,o,wq);let d=c.cartographicToCartesian(le.center(wq)),h=40075.16/(1<<o);this._skirtHeight=Math.min(h*8,1e3);let g=(a?QTt:DTt).scheduleTask({buffer:this._buffer,nativeRectangle:xTe,rectangle:wq,relativeToCenter:d,ellipsoid:c,skirtHeight:this._skirtHeight,exaggeration:r,exaggerationRelativeHeight:s,includeWebMercatorT:!0,negativeAltitudeExponentBias:this._negativeAltitudeExponentBias,negativeElevationThreshold:this._negativeElevationThreshold});if(!l(g))return;let f=this;return g.then(function(b){return f._mesh=new Fm(d,new Float32Array(b.vertices),new Uint16Array(b.indices),b.indexCountWithoutSkirts,b.vertexCountWithoutSkirts,b.minimumHeight,b.maximumHeight,ue.clone(b.boundingSphere3D),m.clone(b.occludeePointInScaledSpace),b.numberOfAttributes,vn.clone(b.orientedBoundingBox),Kc.clone(b.encoding),b.westIndicesSouthToNorth,b.southIndicesEastToWest,b.eastIndicesNorthToSouth,b.northIndicesWestToEast),f._minimumHeight=b.minimumHeight,f._maximumHeight=b.maximumHeight,f._buffer=void 0,f._mesh})};l_.prototype.interpolateHeight=function(e,t,n){let i=Z.clamp((t-e.west)/e.width,0,1),o=Z.clamp((n-e.south)/e.height,0,1);return l(this._mesh)?HTt(this,i,o):JTt(this,i,o,e)};var UTt=new hi("upsampleQuantizedTerrainMesh",df.maximumAsynchronousTasks);l_.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,h=e.tileXYToRectangle(o,r,s),p=UTt.scheduleTask({vertices:a.vertices,indices:a.indices,indexCountWithoutSkirts:a.indexCountWithoutSkirts,vertexCountWithoutSkirts:a.vertexCountWithoutSkirts,encoding:a.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:c,isNorthChild:d,childRectangle:h,ellipsoid:u});if(!l(p))return;let g=this;return p.then(function(f){let b=new Uint16Array(f.vertices),x=Me.createTypedArray(b.length/3,f.indices),I=g._skirtHeight;return new a_({quantizedVertices:b,indices:x,minimumHeight:f.minimumHeight,maximumHeight:f.maximumHeight,boundingSphere:ue.clone(f.boundingSphere),orientedBoundingBox:vn.clone(f.orientedBoundingBox),horizonOcclusionPoint:m.clone(f.horizonOcclusionPoint),westIndices:f.westIndices,southIndices:f.southIndices,eastIndices:f.eastIndices,northIndices:f.northIndices,westSkirtHeight:I,southSkirtHeight:I,eastSkirtHeight:I,northSkirtHeight:I,childTileMask:0,createdByUpsampling:!0,credits:g._credits})})};l_.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};l_.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var kTt=new D,YTt=new D,OTt=new D,ETe=new m;function HTt(e,t,n){let i=e._mesh,o=i.vertices,r=i.encoding,s=i.indices;for(let a=0,c=s.length;a<c;a+=3){let d=s[a],u=s[a+1],h=s[a+2],p=r.decodeTextureCoordinates(o,d,kTt),g=r.decodeTextureCoordinates(o,u,YTt),f=r.decodeTextureCoordinates(o,h,OTt),b=tb.computeBarycentricCoordinates(t,n,p.x,p.y,g.x,g.y,f.x,f.y,ETe);if(b.x>=-1e-15&&b.y>=-1e-15&&b.z>=-1e-15){let x=r.decodeHeight(o,d),I=r.decodeHeight(o,u),_=r.decodeHeight(o,h);return b.x*x+b.y*I+b.z*_}}}var zTt=Uint16Array.BYTES_PER_ELEMENT,ITe=Uint32Array.BYTES_PER_ELEMENT,Xq=Int32Array.BYTES_PER_ELEMENT,KTt=Float32Array.BYTES_PER_ELEMENT,Wq=Float64Array.BYTES_PER_ELEMENT;function JTt(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 R=0;R<r;++R)d+=c.getUint32(d,!0),d+=ITe;d+=ITe,d+=2*Wq;let u=Z.toRadians(c.getFloat64(d,!0)*180);d+=Wq;let h=Z.toRadians(c.getFloat64(d,!0)*180);d+=Wq;let p=i.width/u/2,g=i.height/h/2,f=c.getInt32(d,!0);d+=Xq;let b=c.getInt32(d,!0)*3;d+=Xq,d+=Xq;let x=new Array(f),I=new Array(f),_=new Array(f),E;for(E=0;E<f;++E)x[E]=s+c.getUint8(d++)*p,I[E]=a+c.getUint8(d++)*g,_[E]=c.getFloat32(d,!0)*6371010,d+=KTt;let S=new Array(b);for(E=0;E<b;++E)S[E]=c.getUint16(d,!0),d+=zTt;for(E=0;E<b;E+=3){let R=S[E],G=S[E+1],B=S[E+2],w=x[R],F=x[G],P=x[B],A=I[R],T=I[G],L=I[B],V=tb.computeBarycentricCoordinates(t,n,w,A,F,T,P,L,ETe);if(V.x>=-1e-15&&V.y>=-1e-15&&V.z>=-1e-15)return V.x*_[R]+V.y*_[G]+V.z*_[B]}}var wL=l_;var wto=y(C(),1);var Ym={UNKNOWN:0,NONE:1,SELF:2,PARENT:3},PY=new j;function MY(){this._terrainCache={},this._lastTidy=j.now()}MY.prototype.add=function(e,t){this._terrainCache[e]={buffer:t,timestamp:j.now()}};MY.prototype.get=function(e){let n=this._terrainCache[e];if(l(n))return delete this._terrainCache[e],n.buffer};MY.prototype.tidy=function(){if(j.now(PY),j.secondsDifference(PY,this._lastTidy)>10){let e=this._terrainCache,t=Object.keys(e),n=t.length;for(let i=0;i<n;++i){let o=t[i],r=e[o];j.secondsDifference(PY,r.timestamp)>10&&delete e[o]}j.clone(PY,this._lastTidy)}};function Ey(e){e=e??Y.EMPTY_OBJECT,this._tilingScheme=new ao({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new le(-Z.PI,-Z.PI,Z.PI,Z.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new Gt(t)),this._credit=t,this._levelZeroMaximumGeometricError=40075.16,this._terrainCache=new MY,this._terrainPromises={},this._terrainRequests={},this._errorEvent=new Ce}Object.defineProperties(Ey.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(){}}});Ey.fromMetadata=function(e,t){if(!e.terrainPresent)throw new de(`The server ${e.url} doesn't have terrain`);let n=new Ey(t);return n._metadata=e,n};var jTt=new hi("decodeGoogleEarthEnterprisePacket");function TTe(e,t,n){let i=t.getChildBitmask();if(t.terrainState===Ym.PARENT){i=0;for(let o=0;o<4;++o){let r=n.getTileInformationFromQuadKey(e+o.toString());l(r)&&r.hasTerrain()&&(i|=1<<o)}}return i}Ey.prototype.requestTileGeometry=function(e,t,n,i){let o=ib.tileXYToQuadKey(e,t,n),r=this._terrainCache,s=this._metadata,a=s.getTileInformationFromQuadKey(o);if(!l(a))return Promise.reject(new de("Terrain tile doesn't exist"));let c=a.terrainState;l(c)||(c=a.terrainState=Ym.UNKNOWN);let d=r.get(o);if(l(d)){let I=s.providers[a.terrainProvider];return Promise.resolve(new wL({buffer:d,childTileMask:TTe(o,a,s),credits:l(I)?[I]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold}))}if(r.tidy(),a.ancestorHasTerrain){if(c===Ym.NONE)return Promise.reject(new de("Terrain tile doesn't exist"))}else return Promise.resolve(new yc({buffer:new Uint8Array(256),width:16,height:16}));let u,h=o,p=-1;switch(c){case Ym.SELF:p=a.terrainVersion;break;case Ym.PARENT:h=h.substring(0,h.length-1),u=s.getTileInformationFromQuadKey(h),p=u.terrainVersion;break;case Ym.UNKNOWN:a.hasTerrain()?p=a.terrainVersion:(h=h.substring(0,h.length-1),u=s.getTileInformationFromQuadKey(h),l(u)&&u.hasTerrain()&&(p=u.terrainVersion));break}if(p<0)return Promise.reject(new de("Terrain tile doesn't exist"));let g=this._terrainPromises,f=this._terrainRequests,b,x;if(l(g[h]))b=g[h],x=f[h];else{x=i;let I=qTt(this,h,p,x).fetchArrayBuffer();if(!l(I))return;b=I.then(function(_){return l(_)?jTt.scheduleTask({buffer:_,type:"Terrain",key:s.key},[_]).then(function(E){let S=s.getTileInformationFromQuadKey(h);S.terrainState=Ym.SELF,r.add(h,E[0]);let R=S.terrainProvider,G=E.length-1;for(let B=0;B<G;++B){let w=h+B.toString(),F=s.getTileInformationFromQuadKey(w);l(F)&&(r.add(w,E[B+1]),F.terrainState=Ym.PARENT,F.terrainProvider===0&&(F.terrainProvider=R))}}):Promise.reject(new de("Failed to load terrain."))}),g[h]=b,f[h]=x,b=b.finally(function(){delete g[h],delete f[h]})}return b.then(function(){let I=r.get(o);if(l(I)){let _=s.providers[a.terrainProvider];return new wL({buffer:I,childTileMask:TTe(o,a,s),credits:l(_)?[_]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold})}return Promise.reject(new de("Failed to load terrain."))}).catch(function(I){return x.state===mi.CANCELLED?(i.state=x.state,Promise.reject(I)):(a.terrainState=Ym.NONE,Promise.reject(I))})};Ey.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};Ey.prototype.getTileDataAvailable=function(e,t,n){let i=this._metadata,o=ib.tileXYToQuadKey(e,t,n),r=i.getTileInformation(e,t,n);if(r===null)return!1;if(l(r)){if(!r.ancestorHasTerrain)return!0;let s=r.terrainState;if(s===Ym.NONE)return!1;if((!l(s)||s===Ym.UNKNOWN)&&(r.terrainState=Ym.UNKNOWN,!r.hasTerrain())){o=o.substring(0,o.length-1);let a=i.getTileInformationFromQuadKey(o);if(!l(a)||!a.hasTerrain())return!1}return!0}if(i.isValid(o)){let s=new sr({throttle:!1,throttleByServer:!0,type:Zs.TERRAIN});i.populateSubtree(e,t,n,s)}return!1};Ey.prototype.loadTileDataAvailability=function(e,t,n){};function qTt(e,t,n,i){return n=l(n)&&n>0?n:1,e._metadata.resource.getDerivedResource({url:`flatfile?f1c-0${t}-t.${n.toString()}`,request:i})}var Fq=Ey;var Nto=y(C(),1);var $Tt="https://maps.googleapis.com/maps/api/geocode/json",STe='<img alt="Google" src="https://assets.ion.cesium.com/google-credit.png" style="vertical-align:-5px">';function Pq(e){e=e??Y.EMPTY_OBJECT;let t=e.key;this._resource=new Ve({url:$Tt,queryParameters:{key:t}}),this._credit=new Gt(STe,!0)}Object.defineProperties(Pq.prototype,{credit:{get:function(){return this._credit}}});Pq.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 de(`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:le.fromDegrees(r.lng,r.lat,s.lng,s.lat),attribution:{html:STe,collapsible:!1}}})};var Mq=Pq;var kto=y(C(),1);var vY={};vY.defaultApiKey=void 0;vY.mapTilesApiEndpoint=new Ve({url:"https://tile.googleapis.com/v1/"});vY.getDefaultCredit=function(){return new Gt('<img src="https://assets.ion.cesium.com/google-credit.png" style="vertical-align: -5px" alt="Google">',!0)};var d_=vY;var Kto=y(C(),1);var Qs={};Qs.ExportStatus=Object.freeze({NotStarted:"NotStarted",InProgress:"InProgress",Complete:"Complete",Invalid:"Invalid"});Qs.ExportType=Object.freeze({IMODEL:"IMODEL",CESIUM:"CESIUM","3DTILES":"3DTILES"});Qs.RealityDataType=Object.freeze({Cesium3DTiles:"Cesium3DTiles",PNTS:"PNTS",RealityMesh3DTiles:"RealityMesh3DTiles",Terrain3DTiles:"Terrain3DTiles",KML:"KML",GeoJSON:"GeoJSON",Unstructured:"Unstructured"});Qs.defaultAccessToken=void 0;Qs.defaultShareKey=void 0;Qs._getAuthorizationHeader=function(){return l(Qs.defaultShareKey)?`Basic ${Qs.defaultShareKey}`:`Bearer ${Qs.defaultAccessToken}`};Qs.apiEndpoint=new Ve({url:"https://api.bentley.com"});Qs.getExports=async function(e,t){let n=new Ve({url:`${Qs.apiEndpoint}mesh-export`,headers:{Authorization:Qs._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json",Prefer:"return=representation"},queryParameters:{iModelId:e,exportType:Qs.ExportType["3DTILES"],$top:"5",client:"CesiumJS"}});typeof CESIUM_VERSION<"u"&&n.appendQueryParameters({clientVersion:CESIUM_VERSION}),l(t)&&t!==""&&n.appendQueryParameters({changesetId:t});try{return await n.fetchJson()}catch(i){let o=JSON.parse(i.response);if(i.statusCode===401){let r=o.error.details?.[0].code??"";throw new de(`Unauthorized, bad token, wrong scopes or headers bad. ${r}`)}else{if(i.statusCode===403)throw console.error(o.error.code,o.error.message),new de("Not allowed, forbidden");if(i.statusCode===422)throw new de(`Unprocessable Entity:${o.error.code} ${o.error.message}`);if(i.statusCode===429)throw new de("Too many requests")}throw new de(`Unknown request failure ${i.statusCode}`)}};Qs.getRealityDataMetadata=async function(e,t){let n=new Ve({url:`${Qs.apiEndpoint}reality-management/reality-data/${t}`,headers:{Authorization:Qs._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{iTwinId:e}});try{return(await n.fetchJson()).realityData}catch(i){let o=JSON.parse(i.response);if(i.statusCode===401){let r=o.error.details?.[0].code??"";throw new de(`Unauthorized, bad token, wrong scopes or headers bad. ${r}`)}else{if(i.statusCode===403)throw console.error(o.error.code,o.error.message),new de("Not allowed, forbidden");if(i.statusCode===404)throw new de(`Reality data not found: ${e}, ${t}`);if(i.statusCode===422)throw new de(`Unprocessable Entity:${o.error.code} ${o.error.message}`);if(i.statusCode===429)throw new de("Too many requests")}throw new de(`Unknown request failure ${i.statusCode}`)}};Qs.getRealityDataURL=async function(e,t,n){let i=new Ve({url:`${Qs.apiEndpoint}reality-management/reality-data/${t}/readaccess`,headers:{Authorization:Qs._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{iTwinId:e}});try{let r=(await i.fetchJson())._links.containerUrl.href,s=new URL(r);return s.pathname=`${s.pathname}/${n}`,s.toString()}catch(o){let r=JSON.parse(o.response);if(o.statusCode===401){let s=r.error.details?.[0].code??"";throw new de(`Unauthorized, bad token, wrong scopes or headers bad. ${s}`)}else{if(o.statusCode===403)throw console.error(r.error.code,r.error.message),new de("Not allowed, forbidden");if(o.statusCode===404)throw new de(`Reality data not found: ${e}, ${t}`);if(o.statusCode===422)throw new de(`Unprocessable Entity:${r.error.code} ${r.error.message}`);if(o.statusCode===429)throw new de("Too many requests")}throw new de(`Unknown request failure ${o.statusCode}`)}};var oa=Qs;var qto=y(C(),1);var jv={};jv.type=void 0;jv.getRequiredDataPoints=Ae.throwInstantiationError;jv.interpolateOrderZero=Ae.throwInstantiationError;jv.interpolate=Ae.throwInstantiationError;var vq=jv;var eno=y(C(),1),eSt={GOOGLE:"GOOGLE",BING:"BING",DEFAULT:"DEFAULT"},ob=Object.freeze(eSt);var gno=y(C(),1);var ano=y(C(),1);function Nq(e){this._url=Ve.createIfNeeded(e),this._url.appendForwardSlash()}Object.defineProperties(Nq.prototype,{url:{get:function(){return this._url}},credit:{get:function(){}}});Nq.prototype.geocode=async function(e,t){return this._url.getDerivedResource({url:t===_y.AUTOCOMPLETE?"autocomplete":"search",queryParameters:{text:e}}).fetchJson().then(function(i){return i.features.map(function(o){let r,s=o.bbox;if(l(s))r=le.fromDegrees(s[0],s[1],s[2],s[3]);else{let a=o.geometry.coordinates[0],c=o.geometry.coordinates[1];r=m.fromDegrees(a,c)}return{displayName:o.properties.label,destination:r,attributions:i.attributions}})})};var qv=Nq;function tSt(e){if(!Object.values(ob).some(t=>t===e))throw new Ae(`Invalid geocodeProviderType: "${e}"`)}var LTe=Object.freeze({[ob.GOOGLE]:"google",[ob.BING]:"bing",[ob.DEFAULT]:void 0});function nSt(e){return LTe[e]}function iSt(e){return Object.entries(LTe).find(t=>t[1]===e)[0]}function Dq(e){e=e??Y.EMPTY_OBJECT;let t=e.geocodeProviderType??ob.DEFAULT,n=e.accessToken??Ah.defaultAccessToken,i=Ve.createIfNeeded(e.server??Ah.defaultServer);i.appendForwardSlash();let o=Ah.getDefaultTokenCredit(n);l(o)&&e.scene.frameState.creditDisplay.addStaticCredit(Gt.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 qv(r),this.geocodeProviderType=t}Object.defineProperties(Dq.prototype,{credit:{get:function(){}},geocodeProviderType:{get:function(){return iSt(this._pelias.url.queryParameters.geocoder)},set:function(e){tSt(e);let t={...this._pelias.url.queryParameters,geocoder:nSt(e)};l(t.geocoder)||delete t.geocoder,this._pelias.url.setQueryParameters(t)}}});Dq.prototype.geocode=async function(e,t){return this._pelias.geocode(e,t)};var u_=Dq;var Cno=y(C(),1);function NY(){Ae.throwInstantiationError()}Object.defineProperties(NY.prototype,{ellipsoid:{get:Ae.throwInstantiationError}});NY.prototype.project=Ae.throwInstantiationError;NY.prototype.unproject=Ae.throwInstantiationError;var Qq=NY;var Tno=y(C(),1);function XL(e){e=e??Y.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(XL.prototype,{times:{get:function(){return this._times}},weights:{get:function(){return this._weights}}});XL.prototype.findTimeInterval=yo.prototype.findTimeInterval;XL.prototype.wrapTime=yo.prototype.wrapTime;XL.prototype.clampTime=yo.prototype.clampTime;XL.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;s<this._count;s++){let a=o*this._count+s;t[s]=n[a]*(1-r)+n[a+this._count]*r}return t};var Uq=XL;var wno=y(C(),1);function kq(e,t,n){e=Ve.createIfNeeded(e),e.appendForwardSlash(),e.setQueryParameters({key:t}),this._url=e,this._params=n??{},this._credit=new Gt('Geodata copyright <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors',!1)}Object.defineProperties(kq.prototype,{url:{get:function(){return this._url}},params:{get:function(){return this._params}},credit:{get:function(){return this._credit}}});kq.prototype.geocode=async function(e){return this._url.getDerivedResource({url:"json",queryParameters:Lt(this._params,{q:e})}).fetchJson().then(function(n){return n.results.map(function(i){let o,r=i.bounds;if(l(r))o=le.fromDegrees(r.southwest.lng,r.southwest.lat,r.northeast.lng,r.northeast.lat);else{let s=i.geometry.lat,a=i.geometry.lng;o=m.fromDegrees(s,a)}return{displayName:i.formatted,destination:o}})})};var Yq=kq;var Fno=y(C(),1);var oSt={packedLength:void 0,pack:Ae.throwInstantiationError,unpack:Ae.throwInstantiationError},Oq=oSt;var vno=y(C(),1);var rSt={packedInterpolationLength:void 0,convertPackedArrayForInterpolation:Ae.throwInstantiationError,unpackInterpolationResult:Ae.throwInstantiationError},Hq=rSt;var Qno=y(C(),1);function RTe(){Ae.throwInstantiationError()}RTe.prototype.getURL=Ae.throwInstantiationError;var zq=RTe;var rio=y(C(),1);function sSt(e,t,n,i,o,r,s){let a=Oi.numberOfPoints(e,t,o),c,d=n.red,u=n.green,h=n.blue,p=n.alpha,g=i.red,f=i.green,b=i.blue,x=i.alpha;if(U.equals(n,i)){for(c=0;c<a;c++)r[s++]=U.floatToByte(d),r[s++]=U.floatToByte(u),r[s++]=U.floatToByte(h),r[s++]=U.floatToByte(p);return s}let I=(g-d)/a,_=(f-u)/a,E=(b-h)/a,S=(x-p)/a,R=s;for(c=0;c<a;c++)r[R++]=U.floatToByte(d+c*I),r[R++]=U.floatToByte(u+c*_),r[R++]=U.floatToByte(h+c*E),r[R++]=U.floatToByte(p+c*S);return R}function $v(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.colors,i=e.colorsPerVertex??!1;this._positions=t,this._colors=n,this._colorsPerVertex=i,this._arcType=e.arcType??dn.GEODESIC,this._granularity=e.granularity??Z.RADIANS_PER_DEGREE,this._ellipsoid=e.ellipsoid??ie.default,this._workerName="createSimplePolylineGeometry";let o=1+t.length*m.packedLength;o+=l(n)?1+n.length*U.packedLength:1,this.packedLength=o+ie.packedLength+3}$v.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._colors;for(r=l(s)?s.length:0,t[n++]=r,i=0;i<r;++i,n+=U.packedLength)U.pack(s[i],t,n);return ie.pack(e._ellipsoid,t,n),n+=ie.packedLength,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t};$v.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=o>0?new Array(o):void 0;for(i=0;i<o;++i,t+=U.packedLength)s[i]=U.unpack(e,t);let a=ie.unpack(e,t);t+=ie.packedLength;let c=e[t++]===1,d=e[t++],u=e[t];return l(n)?(n._positions=r,n._colors=s,n._ellipsoid=a,n._colorsPerVertex=c,n._arcType=d,n._granularity=u,n):new $v({positions:r,colors:s,ellipsoid:a,colorsPerVertex:c,arcType:d,granularity:u})};var DY=new Array(2),QY=new Array(2),aSt={positions:DY,height:QY,ellipsoid:void 0,minDistance:void 0,granularity:void 0};$v.createGeometry=function(e){let t=e._positions,n=e._colors,i=e._colorsPerVertex,o=e._arcType,r=e._granularity,s=e._ellipsoid,a=Z.chordLength(r,s.maximumRadius),c=l(n)&&!i,d,u=t.length,h,p,g,f,b=0;if(o===dn.GEODESIC||o===dn.RHUMB){let S,R,G;o===dn.GEODESIC?(S=Z.chordLength(r,s.maximumRadius),R=Oi.numberOfPoints,G=Oi.generateArc):(S=r,R=Oi.numberOfPointsRhumbLine,G=Oi.generateRhumbArc);let B=Oi.extractHeights(t,s),w=aSt;if(o===dn.GEODESIC?w.minDistance=a:w.granularity=r,w.ellipsoid=s,c){let F=0;for(d=0;d<u-1;d++)F+=R(t[d],t[d+1],S)+1;h=new Float64Array(F*3),g=new Uint8Array(F*4),w.positions=DY,w.height=QY;let P=0;for(d=0;d<u-1;++d){DY[0]=t[d],DY[1]=t[d+1],QY[0]=B[d],QY[1]=B[d+1];let A=G(w);if(l(n)){let T=A.length/3;f=n[d];for(let L=0;L<T;++L)g[P++]=U.floatToByte(f.red),g[P++]=U.floatToByte(f.green),g[P++]=U.floatToByte(f.blue),g[P++]=U.floatToByte(f.alpha)}h.set(A,b),b+=A.length}}else if(w.positions=t,w.height=B,h=new Float64Array(G(w)),l(n)){for(g=new Uint8Array(h.length/3*4),d=0;d<u-1;++d){let P=t[d],A=t[d+1],T=n[d],L=n[d+1];b=sSt(P,A,T,L,a,g,b)}let F=n[u-1];g[b++]=U.floatToByte(F.red),g[b++]=U.floatToByte(F.green),g[b++]=U.floatToByte(F.blue),g[b++]=U.floatToByte(F.alpha)}}else{p=c?u*2-2:u,h=new Float64Array(p*3),g=l(n)?new Uint8Array(p*4):void 0;let S=0,R=0;for(d=0;d<u;++d){let G=t[d];if(c&&d>0&&(m.pack(G,h,S),S+=3,f=n[d-1],g[R++]=U.floatToByte(f.red),g[R++]=U.floatToByte(f.green),g[R++]=U.floatToByte(f.blue),g[R++]=U.floatToByte(f.alpha)),c&&d===u-1)break;m.pack(G,h,S),S+=3,l(n)&&(f=n[d],g[R++]=U.floatToByte(f.red),g[R++]=U.floatToByte(f.green),g[R++]=U.floatToByte(f.blue),g[R++]=U.floatToByte(f.alpha))}}let x=new xn;x.position=new Ze({componentDatatype:J.DOUBLE,componentsPerAttribute:3,values:h}),l(n)&&(x.color=new Ze({componentDatatype:J.UNSIGNED_BYTE,componentsPerAttribute:4,values:g,normalize:!0})),p=h.length/3;let I=(p-1)*2,_=Me.createTypedArray(p,I),E=0;for(d=0;d<p-1;++d)_[E++]=d,_[E++]=d+1;return new pt({attributes:x,indices:_,primitiveType:We.LINES,boundingSphere:ue.fromPoints(t)})};var Kq=$v;var uio=y(C(),1);function WL(e){let t=e.radius??1,i={radii:new m(t,t,t),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,vertexFormat:e.vertexFormat};this._ellipsoidGeometry=new xa(i),this._workerName="createSphereGeometry"}WL.packedLength=xa.packedLength;WL.pack=function(e,t,n){return xa.pack(e._ellipsoidGeometry,t,n)};var cSt=new xa,Ty={radius:void 0,radii:new m,vertexFormat:new we,stackPartitions:void 0,slicePartitions:void 0};WL.unpack=function(e,t,n){let i=xa.unpack(e,t,cSt);return Ty.vertexFormat=we.clone(i._vertexFormat,Ty.vertexFormat),Ty.stackPartitions=i._stackPartitions,Ty.slicePartitions=i._slicePartitions,l(n)?(m.clone(i._radii,Ty.radii),n._ellipsoidGeometry=new xa(Ty),n):(Ty.radius=i._radii.x,new WL(Ty))};WL.createGeometry=function(e){return xa.createGeometry(e._ellipsoidGeometry)};var Jq=WL;var fio=y(C(),1);function Sy(e){}Object.defineProperties(Sy.prototype,{ellipsoid:{get:Ae.throwInstantiationError},rectangle:{get:Ae.throwInstantiationError},projection:{get:Ae.throwInstantiationError}});Sy.prototype.getNumberOfXTilesAtLevel=Ae.throwInstantiationError;Sy.prototype.getNumberOfYTilesAtLevel=Ae.throwInstantiationError;Sy.prototype.rectangleToNativeRectangle=Ae.throwInstantiationError;Sy.prototype.tileXYToNativeRectangle=Ae.throwInstantiationError;Sy.prototype.tileXYToRectangle=Ae.throwInstantiationError;Sy.prototype.positionToTileXY=Ae.throwInstantiationError;var jq=Sy;var Gio=y(C(),1);function lSt(e,t){this.rectangle=e,this.maxLevel=t}function VTe(e){this.ellipsoid=e.ellipsoid??ie.default,this.tilingScheme=void 0,this.heightmapWidth=void 0,this.heightmapHeight=void 0,this.levelZeroMaximumGeometricError=void 0,this.rectangles=[]}VTe.prototype.build=function(e){e._tilingScheme=this.tilingScheme,e._heightmapWidth=this.heightmapWidth,e._heightmapHeight=this.heightmapHeight,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._rectangles=this.rectangles};function dSt(e,t){let n=t.getElementsByTagName("SRS")[0].textContent;if(n==="EPSG:4326")e.tilingScheme=new ao({ellipsoid:e.ellipsoid});else throw new de(`SRS ${n} is not supported`);let i=t.getElementsByTagName("TileFormat")[0];e.heightmapWidth=parseInt(i.getAttribute("width"),10),e.heightmapHeight=parseInt(i.getAttribute("height"),10),e.levelZeroMaximumGeometricError=Es.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.ellipsoid,Math.min(e.heightmapWidth,e.heightmapHeight),e.tilingScheme.getNumberOfXTilesAtLevel(0));let o=t.getElementsByTagName("DataExtent");for(let r=0;r<o.length;++r){let s=o[r],a=Z.toRadians(parseFloat(s.getAttribute("minx"))),c=Z.toRadians(parseFloat(s.getAttribute("miny"))),d=Z.toRadians(parseFloat(s.getAttribute("maxx"))),u=Z.toRadians(parseFloat(s.getAttribute("maxy"))),h=parseInt(s.getAttribute("maxlevel"),10);e.rectangles.push(new lSt(new le(a,c,d,u),h))}}function uSt(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(i=`${i}: ${t.message}`),vo.reportError(void 0,n,l(n)?n._errorEvent:void 0,i),new de(i)}async function mSt(e,t,n){try{let i=await t.fetchXML();dSt(e,i)}catch(i){uSt(t,i,n)}}function Ly(e){e=e??Y.EMPTY_OBJECT,this._errorEvent=new Ce,this._terrainDataStructure={heightScale:1/1e3,heightOffset:-1e3,elementsPerHeight:3,stride:4,elementMultiplier:256,isBigEndian:!0,lowestEncodedHeight:0,highestEncodedHeight:256*256*256-1};let t=e.credit;typeof t=="string"&&(t=new Gt(t)),this._credit=t,this._tilingScheme=void 0,this._rectangles=[]}Object.defineProperties(Ly.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(){}}});Ly.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=new VTe(t),i=Ve.createIfNeeded(e);await mSt(n,i);let o=new Ly(t);return n.build(o),o._resource=i,o};Ly.prototype.requestTileGeometry=function(e,t,n,i){let o=this._tilingScheme.getNumberOfYTilesAtLevel(n),s=this._resource.getDerivedResource({url:`${n}/${e}/${o-t-1}.tif`,queryParameters:{cesium:!0},request:i}).fetchImage({preferImageBitmap:!0});if(!l(s))return;let a=this;return Promise.resolve(s).then(function(c){return new yc({buffer:$m(c),width:a._heightmapWidth,height:a._heightmapHeight,childTileMask:hSt(a,e,t,n),structure:a._terrainDataStructure})})};Ly.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};var GTe=new le;function hSt(e,t,n,i){let o=e._tilingScheme,r=e._rectangles,s=o.tileXYToRectangle(t,n,i),a=0;for(let c=0;c<r.length&&a!==15;++c){let d=r[c];if(d.maxLevel<=i)continue;let u=d.rectangle,h=le.intersection(u,s,GTe);l(h)&&(UY(o,u,t*2,n*2,i+1)&&(a|=4),UY(o,u,t*2+1,n*2,i+1)&&(a|=8),UY(o,u,t*2,n*2+1,i+1)&&(a|=1),UY(o,u,t*2+1,n*2+1,i+1)&&(a|=2))}return a}function UY(e,t,n,i,o){let r=e.tileXYToRectangle(n,i,o);return l(le.intersection(r,t,GTe))}Ly.prototype.getTileDataAvailable=function(e,t,n){};Ly.prototype.loadTileDataAvailability=function(e,t,n){};var qq=Ly;var Pio=y(C(),1);function m_(e){e=e??Y.EMPTY_OBJECT,this._clock=void 0,this._element=void 0,this._clockSubscription=void 0,this._seekFunction=void 0,this._lastPlaybackRate=void 0,this.clock=e.clock,this.element=e.element,this.epoch=e.epoch??ze.MINIMUM_VALUE,this.tolerance=e.tolerance??1,this._seeking=!1,this._seekFunction=void 0,this._firstTickAfterSeek=!1}Object.defineProperties(m_.prototype,{clock:{get:function(){return this._clock},set:function(e){let t=this._clock;t!==e&&(l(t)&&(this._clockSubscription(),this._clockSubscription=void 0),l(e)&&(this._clockSubscription=e.onTick.addEventListener(m_.prototype._onTick,this)),this._clock=e)}},element:{get:function(){return this._element},set:function(e){let t=this._element;t!==e&&(l(t)&&t.removeEventListener("seeked",this._seekFunction,!1),l(e)&&(this._seeking=!1,this._seekFunction=fSt(this),e.addEventListener("seeked",this._seekFunction,!1)),this._element=e,this._seeking=!1,this._firstTickAfterSeek=!1)}}});m_.prototype.destroy=function(){return this.element=void 0,this.clock=void 0,me(this)};m_.prototype.isDestroyed=function(){return!1};m_.prototype._trySetPlaybackRate=function(e){if(this._lastPlaybackRate===e.multiplier)return;let t=this._element;try{t.playbackRate=e.multiplier}catch{t.playbackRate=0}this._lastPlaybackRate=e.multiplier};m_.prototype._onTick=function(e){let t=this._element;if(!l(t)||t.readyState<2)return;let n=t.paused,i=e.shouldAnimate;if(i===n&&(i?t.play():t.pause()),this._seeking||this._firstTickAfterSeek){this._firstTickAfterSeek=!1;return}this._trySetPlaybackRate(e);let o=e.currentTime,r=this.epoch??ze.MINIMUM_VALUE,s=j.secondsDifference(o,r),a=t.duration,c,d=t.currentTime;t.loop?(s=s%a,s<0&&(s=a-s),c=s):s>a?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 fSt(e){return function(){e._seeking=!1,e._firstTickAfterSeek=!0}}var $q=m_;var vio=y(C(),1),pSt={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},e$=Object.freeze(pSt);var Uio=y(C(),1);function ASt(e){return e=e??Y.EMPTY_OBJECT,c_.fromIonAssetId(2426648,{requestVertexNormals:e.requestVertexNormals??!1})}var eN=ASt;var zio=y(C(),1);function gSt(e){return e=e??Y.EMPTY_OBJECT,c_.fromIonAssetId(1,{requestVertexNormals:e.requestVertexNormals??!1,requestWaterMask:e.requestWaterMask??!1,ellipsoid:ie.WGS84})}var h_=gSt;var jio=y(C(),1);var bSt=1953029805,ySt=2917034100;function t$(e,t){if(t$.passThroughDataForTesting)return t;let n=e.byteLength;if(n===0||n%4!==0)throw new de("The length of key must be greater than 0 and a multiple of 4.");let i=new DataView(t),o=i.getUint32(0,!0);if(o===bSt||o===ySt)return t;let r=new DataView(e),s=0,a=t.byteLength,c=a-a%8,d=n,u,h=8;for(;s<c;)for(h=(h+8)%24,u=h;s<c&&u<d;)i.setUint32(s,i.getUint32(s,!0)^r.getUint32(u,!0),!0),i.setUint32(s+4,i.getUint32(s+4,!0)^r.getUint32(u+4,!0),!0),s+=8,u+=24;if(s<a)for(u>=d&&(h=(h+8)%24,u=h);s<a;)i.setUint8(s,i.getUint8(s)^r.getUint8(u)),s++,u++}t$.passThroughDataForTesting=!1;var tN=t$;var too=y(C(),1);function ZTe(e,t){return _r("defaultValue","defaultValue has been deprecated and will be removed in Cesium 1.134. Use the nullish coalescing operator instead: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing"),e??t}Object.defineProperty(ZTe,"EMPTY_OBJECT",{get:function(){return _r("defaultValue.EMPTY_OBJECT","defaultValue.EMPTY_OBJECT has been deprecated and will be removed in Cesium 1.134. Use Frozen.EMPTY_OBJECT instead"),Y.EMPTY_OBJECT}});var n$=ZTe;var soo=y(C(),1);var CSt=new m;function xSt(e,t,n,i){let o=Hy(e,t,n,i,CSt);return l(o)?o.x>0&&o.y>0&&o.z>0:!1}var i$=xSt;var coo=y(C(),1);function ISt(e){return e<=.04045?e*.07739938080495357:Math.pow((e+.055)*.9478672985781991,2.4)}var f_=ISt;var uoo=y(C(),1);function _St(e){switch(e){case ne.FLOAT:return"float";case ne.FLOAT_VEC2:return"vec2";case ne.FLOAT_VEC3:return"vec3";case ne.FLOAT_VEC4:return"vec4";case ne.FLOAT_MAT2:return"mat2";case ne.FLOAT_MAT3:return"mat3";case ne.FLOAT_MAT4:return"mat4";case ne.SAMPLER_2D:return"sampler2D";case ne.BOOL:return"bool"}}var o$=_St;var hoo=y(C(),1);function ESt(e,t,n){return function(){n.apply(e,arguments),t.apply(e,arguments)}}var nN=ESt;var goo=y(C(),1);var TSt=new m(1,1,1);function r$(e){e=e??TSt,this._dimensions=m.clone(e)}Object.defineProperties(r$.prototype,{dimensions:{get:function(){return this._dimensions},set:function(e){m.clone(e,this._dimensions)}}});var SSt=new m;r$.prototype.emit=function(e){let t=this._dimensions,n=m.multiplyByScalar(t,.5,SSt),i=Z.randomBetween(-n.x,n.x),o=Z.randomBetween(-n.y,n.y),r=Z.randomBetween(-n.z,n.z);e.position=m.fromElements(i,o,r,e.position),e.velocity=m.normalize(e.position,e.velocity)};var s$=r$;var Coo=y(C(),1);function vp(){this.featurePropertiesDirty=!1}Object.defineProperties(vp.prototype,{featuresLength:{get:function(){Ae.throwInstantiationError()}},pointsLength:{get:function(){Ae.throwInstantiationError()}},trianglesLength:{get:function(){Ae.throwInstantiationError()}},geometryByteLength:{get:function(){Ae.throwInstantiationError()}},texturesByteLength:{get:function(){Ae.throwInstantiationError()}},batchTableByteLength:{get:function(){Ae.throwInstantiationError()}},innerContents:{get:function(){Ae.throwInstantiationError()}},ready:{get:function(){Ae.throwInstantiationError()}},tileset:{get:function(){Ae.throwInstantiationError()}},tile:{get:function(){Ae.throwInstantiationError()}},url:{get:function(){Ae.throwInstantiationError()}},batchTable:{get:function(){Ae.throwInstantiationError()}},metadata:{get:function(){Ae.throwInstantiationError()},set:function(e){Ae.throwInstantiationError()}},group:{get:function(){Ae.throwInstantiationError()},set:function(e){Ae.throwInstantiationError()}}});vp.prototype.hasProperty=function(e,t){Ae.throwInstantiationError()};vp.prototype.getFeature=function(e){Ae.throwInstantiationError()};vp.prototype.applyDebugSettings=function(e,t){Ae.throwInstantiationError()};vp.prototype.applyStyle=function(e){Ae.throwInstantiationError()};vp.prototype.update=function(e,t){Ae.throwInstantiationError()};vp.prototype.pick=function(e,t,n){Ae.throwInstantiationError()};vp.prototype.isDestroyed=function(){Ae.throwInstantiationError()};vp.prototype.destroy=function(){Ae.throwInstantiationError()};var a$=vp;var Woo=y(C(),1);var Soo=y(C(),1);function FL(e,t){this._conditionsExpression=ke(e,!0),this._conditions=e.conditions,this._runtimeConditions=void 0,RSt(this,t)}Object.defineProperties(FL.prototype,{conditionsExpression:{get:function(){return this._conditionsExpression}}});function LSt(e,t){this.condition=e,this.expression=t}function RSt(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 LSt(new $u(a,t),new $u(c,t)))}e._runtimeConditions=n}FL.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)}};FL.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)}};FL.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};FL.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];ci(e,o.condition.getVariables()),ci(e,o.expression.getVariables())}return e=e.filter(function(i,o,r){return r.indexOf(i)===o}),e};var iN=FL;function Ry(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._colorShaderFunction=void 0,this._showShaderFunction=void 0,this._pointSizeShaderFunction=void 0,this._colorShaderFunctionReady=!1,this._showShaderFunctionReady=!1,this._pointSizeShaderFunctionReady=!1,this._colorShaderTranslucent=!1,VSt(this,e)}function VSt(e,t){t=ke(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;let n={};if(l(t.meta)){let i=t.defines,o=t.meta??Y.EMPTY_OBJECT;for(let r in o)o.hasOwnProperty(r)&&(n[r]=new $u(o[r],i))}e._meta=n,e._ready=!0}function br(e,t){let n=(e._style??Y.EMPTY_OBJECT).defines;if(l(t)){if(typeof t=="boolean"||typeof t=="number")return new $u(String(t));if(typeof t=="string")return new $u(t,n);if(l(t.conditions))return new iN(t,n)}else return;return t}function yr(e){if(l(e)){if(l(e.expression))return e.expression;if(l(e.conditionsExpression))return ke(e.conditionsExpression,!0)}else return;return e}Object.defineProperties(Ry.prototype,{style:{get:function(){return this._style}},show:{get:function(){return this._show},set:function(e){this._show=br(this,e),this._style.show=yr(this._show),this._showShaderFunctionReady=!1}},color:{get:function(){return this._color},set:function(e){this._color=br(this,e),this._style.color=yr(this._color),this._colorShaderFunctionReady=!1}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=br(this,e),this._style.pointSize=yr(this._pointSize),this._pointSizeShaderFunctionReady=!1}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=br(this,e),this._style.pointOutlineColor=yr(this._pointOutlineColor)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=br(this,e),this._style.pointOutlineWidth=yr(this._pointOutlineWidth)}},labelColor:{get:function(){return this._labelColor},set:function(e){this._labelColor=br(this,e),this._style.labelColor=yr(this._labelColor)}},labelOutlineColor:{get:function(){return this._labelOutlineColor},set:function(e){this._labelOutlineColor=br(this,e),this._style.labelOutlineColor=yr(this._labelOutlineColor)}},labelOutlineWidth:{get:function(){return this._labelOutlineWidth},set:function(e){this._labelOutlineWidth=br(this,e),this._style.labelOutlineWidth=yr(this._labelOutlineWidth)}},font:{get:function(){return this._font},set:function(e){this._font=br(this,e),this._style.font=yr(this._font)}},labelStyle:{get:function(){return this._labelStyle},set:function(e){this._labelStyle=br(this,e),this._style.labelStyle=yr(this._labelStyle)}},labelText:{get:function(){return this._labelText},set:function(e){this._labelText=br(this,e),this._style.labelText=yr(this._labelText)}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){this._backgroundColor=br(this,e),this._style.backgroundColor=yr(this._backgroundColor)}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){this._backgroundPadding=br(this,e),this._style.backgroundPadding=yr(this._backgroundPadding)}},backgroundEnabled:{get:function(){return this._backgroundEnabled},set:function(e){this._backgroundEnabled=br(this,e),this._style.backgroundEnabled=yr(this._backgroundEnabled)}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){this._scaleByDistance=br(this,e),this._style.scaleByDistance=yr(this._scaleByDistance)}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){this._translucencyByDistance=br(this,e),this._style.translucencyByDistance=yr(this._translucencyByDistance)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=br(this,e),this._style.distanceDisplayCondition=yr(this._distanceDisplayCondition)}},heightOffset:{get:function(){return this._heightOffset},set:function(e){this._heightOffset=br(this,e),this._style.heightOffset=yr(this._heightOffset)}},anchorLineEnabled:{get:function(){return this._anchorLineEnabled},set:function(e){this._anchorLineEnabled=br(this,e),this._style.anchorLineEnabled=yr(this._anchorLineEnabled)}},anchorLineColor:{get:function(){return this._anchorLineColor},set:function(e){this._anchorLineColor=br(this,e),this._style.anchorLineColor=yr(this._anchorLineColor)}},image:{get:function(){return this._image},set:function(e){this._image=br(this,e),this._style.image=yr(this._image)}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance=br(this,e),this._style.disableDepthTestDistance=yr(this._disableDepthTestDistance)}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin=br(this,e),this._style.horizontalOrigin=yr(this._horizontalOrigin)}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin=br(this,e),this._style.verticalOrigin=yr(this._verticalOrigin)}},labelHorizontalOrigin:{get:function(){return this._labelHorizontalOrigin},set:function(e){this._labelHorizontalOrigin=br(this,e),this._style.labelHorizontalOrigin=yr(this._labelHorizontalOrigin)}},labelVerticalOrigin:{get:function(){return this._labelVerticalOrigin},set:function(e){this._labelVerticalOrigin=br(this,e),this._style.labelVerticalOrigin=yr(this._labelVerticalOrigin)}},meta:{get:function(){return this._meta},set:function(e){this._meta=e}}});Ry.fromUrl=function(e){return Ve.createIfNeeded(e).fetchJson(e).then(function(n){return new Ry(n)})};Ry.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)};Ry.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)};Ry.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)};Ry.prototype.getVariables=function(){let e=[];return l(this.color)&&l(this.color.getVariables)&&ci(e,this.color.getVariables()),l(this.show)&&l(this.show.getVariables)&&ci(e,this.show.getVariables()),l(this.pointSize)&&l(this.pointSize.getVariables)&&ci(e,this.pointSize.getVariables()),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var p_=Ry;var uro=y(C(),1);var voo=y(C(),1);function oN(e){e=e??Y.EMPTY_OBJECT,this._maximumSubtreeCount=e.maximumSubtreeCount??0,this._subtreeRequestCounter=0,this._queue=new e_({comparator:oN.comparator})}oN.prototype.addSubtree=function(e){let t=new GSt(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()};oN.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}};oN.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 GSt(e,t){this.subtree=e,this.stamp=t}var rN=oN;function sN(e){e=e??Y.EMPTY_OBJECT;let{className:t,names:n,types:i,componentTypes:o,shape:r,dimensions:s,paddingBefore:a=m.ZERO.clone(),paddingAfter:c=m.ZERO.clone(),globalTransform:d=X.IDENTITY.clone(),shapeTransform:u=X.IDENTITY.clone(),minBounds:h,maxBounds:p,minimumValues:g,maximumValues:f,maximumTileCount:b}=e;this._shapeTransform=u,this._globalTransform=d,this._shape=r,this._minBounds=h,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===qa.ELLIPSOID?Um.Z_UP:Um.Y_UP,this._minimumValues=g,this._maximumValues=f,this._maximumTileCount=b,this._availableLevels=void 0,this._implicitTileset=void 0,this._subtreeCache=new rN}Object.defineProperties(sN.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}}});sN.fromUrl=async function(e){let t=Ve.createIfNeeded(e),n=await t.fetchJson();BSt(n);let i=vSt(n,t);await i.load();let{root:o}=n,r=Ii(n,"3DTILES_metadata")?n.extensions["3DTILES_metadata"]:n,s=new Gx({metadataJson:r,schema:i.schema}),a=o.content.extensions["3DTILES_content_voxels"],c=a.class,d=NSt(s,c);Object.assign(d,wSt(o)),l(o.transform)?d.globalTransform=X.unpack(o.transform):d.globalTransform=X.clone(X.IDENTITY),d.dimensions=m.unpack(a.dimensions),d.maximumTileCount=ZSt(s),l(a.padding)&&(d.paddingBefore=m.unpack(a.padding.before),d.paddingAfter=m.unpack(a.padding.after));let u=new sN(d),h=new Bx(t,o,i.schema);return u._implicitTileset=h,u._availableLevels=h.availableLevels,Mi.unload(i),u};function ZSt(e){if(l(e.tileset))return e.tileset.getPropertyBySemantic(kC.TILESET_TILE_COUNT)}function BSt(e){let t=e.root;if(!l(t.content))throw new de("Root must have content");if(!Ii(t.content,"3DTILES_content_voxels"))throw new de("Root tile content must have 3DTILES_content_voxels extension");if(!Ii(t,"3DTILES_implicit_tiling")&&!l(t.implicitTiling))throw new de("Root tile must have implicit tiling");if(!l(e.schema)&&!l(e.schemaUri)&&!Ii(e,"3DTILES_metadata"))throw new de("Tileset must have a metadata schema")}function wSt(e){let t=e.boundingVolume;if(l(t.box))return PSt(t.box);if(l(t.region))return XSt(t.region);if(Ii(t,"3DTILES_bounding_volume_cylinder"))return MSt(t.extensions["3DTILES_bounding_volume_cylinder"]);throw new de("Only box, region and 3DTILES_bounding_volume_cylinder are supported in Cesium3DTilesVoxelProvider")}function XSt(e){let t=e[0],n=e[1],i=e[2],o=e[3],r=e[4],s=e[5],a=X.fromScale(ie.WGS84.radii),c=new m(t,n,r),d=new m(i,o,s);return{shape:qa.ELLIPSOID,minBounds:c,maxBounds:d,shapeTransform:a}}var WSt=new m,FSt=new $;function PSt(e){let t=vn.unpack(e),n=$.getScale(t.halfAxes,WSt),i=$.getRotation(t.halfAxes,FSt);return{shape:qa.BOX,minBounds:m.negate(n,new m),maxBounds:m.clone(n),shapeTransform:X.fromRotationTranslation(i,t.center)}}function MSt(e){let{minRadius:t,maxRadius:n,height:i,minAngle:o=-Z.PI,maxAngle:r=Z.PI,translation:s=[0,0,0],rotation:a=[0,0,0,1]}=e,c=-.5*i+s[2],d=.5*i+s[2],u=X.fromTranslationQuaternionRotationScale(m.unpack(s),Pe.unpack(a),m.ONE);return{shape:qa.CYLINDER,minBounds:m.fromElements(t,o,c),maxBounds:m.fromElements(n,r,d),shapeTransform:u}}function vSt(e,t){let{schemaUri:n,schema:i}=e;return l(n)?Mi.getSchemaLoader({resource:t.getDerivedResource({url:n})}):Mi.getSchemaLoader({schema:i})}function NSt(e,t){let{schema:n,statistics:i}=e,o=i?.classes[t],r=n.classes[t].properties,s=Object.entries(r).map(([g,f])=>{let{type:b,componentType:x}=f,I=o?.properties[g].min,_=o?.properties[g].max,E=bt.getComponentCount(b),S=BTe(I,E),R=BTe(_,E);return{id:g,type:b,componentType:x,minValue:S,maxValue:R}}),a=s.map(g=>g.id),c=s.map(g=>g.type),d=s.map(g=>g.componentType),u=s.map(g=>g.minValue),h=s.map(g=>g.maxValue),p=u.some(l);return{className:t,names:a,types:c,componentTypes:d,minimumValues:p?u:void 0,maximumValues:p?h:void 0}}function BTe(e,t){if(!l(e))return;let n=Array.isArray(e)?e:[e];return Array.from({length:t},(i,o)=>n[o])}async function DSt(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=rg(a);return o=await UC.fromSubtreeJson(s,c.jsonPayload,c.binaryPayload,n,t),i.addSubtree(o),o}sN.prototype.requestData=async function(e){e=e??Y.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 wx({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(),h=await DSt(this,d);if(!(c?h.childSubtreeIsAvailableAtCoordinates:h.tileIsAvailableAtCoordinates).call(h,a))return Promise.reject(`Tile is not available at level ${t}, x ${n}, y ${i}, z ${o}.`);let{contentUriTemplates:f,baseResource:b}=s,x=f[0].getDerivedResource({templateValues:a.getTemplateValues()}),I=b.getDerivedResource({url:x.url});return JI.fromGltf(I)};var c$=sN;var pro=y(C(),1);function l$(e){e=e??1,this._radius=e??1}Object.defineProperties(l$.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});l$.prototype.emit=function(e){let t=Z.randomBetween(0,Z.TWO_PI),n=Z.randomBetween(0,this._radius),i=n*Math.cos(t),o=n*Math.sin(t),r=0;e.position=m.fromElements(i,o,r,e.position),e.velocity=m.clone(m.UNIT_Z,e.velocity)};var aN=l$;var rso=y(C(),1);var gro=y(C(),1),d$={CUMULUS:0};d$.validate=function(e){return e===d$.CUMULUS};var PL=Object.freeze(d$);var Ero=y(C(),1);function Cf(e,t){if(e=e??Y.EMPTY_OBJECT,this._show=e.show??!0,this._position=m.clone(e.position??m.ZERO),!l(e.scale)&&l(e.maximumSize))this._maximumSize=m.clone(e.maximumSize),this._scale=new D(this._maximumSize.x,this._maximumSize.y);else{this._scale=D.clone(e.scale??new D(20,12));let n=new m(this._scale.x,this._scale.y,Math.min(this._scale.x,this._scale.y)/1.5);this._maximumSize=m.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 QSt=Cf.SHOW_INDEX=0,USt=Cf.POSITION_INDEX=1,kSt=Cf.SCALE_INDEX=2,YSt=Cf.MAXIMUM_SIZE_INDEX=3,OSt=Cf.SLICE_INDEX=4,HSt=Cf.BRIGHTNESS_INDEX=5,zSt=Cf.COLOR_INDEX=6;Cf.NUMBER_OF_PROPERTIES=7;function A_(e,t){let n=e._cloudCollection;l(n)&&(n._updateCloud(e,t),e._dirty=!0)}Object.defineProperties(Cf.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,A_(this,QSt))}},position:{get:function(){return this._position},set:function(e){let t=this._position;m.equals(t,e)||(m.clone(e,t),A_(this,USt))}},scale:{get:function(){return this._scale},set:function(e){let t=this._scale;D.equals(t,e)||(D.clone(e,t),A_(this,kSt))}},maximumSize:{get:function(){return this._maximumSize},set:function(e){let t=this._maximumSize;m.equals(t,e)||(m.clone(e,t),A_(this,YSt))}},color:{get:function(){return this._color},set:function(e){let t=this._color;U.equals(t,e)||(U.clone(e,t),A_(this,zSt))}},slice:{get:function(){return this._slice},set:function(e){this._slice!==e&&(this._slice=e,A_(this,OSt))}},brightness:{get:function(){return this._brightness},set:function(e){this._brightness!==e&&(this._brightness=e,A_(this,HSt))}}});Cf.prototype._destroy=function(){this._cloudCollection=void 0};var Bu=Cf;var wu,kY=new m,KSt={positionHighAndScaleX:0,positionLowAndScaleY:1,packedAttribute0:2,packedAttribute1:3,color:4},JSt={direction:0,positionHighAndScaleX:1,positionLowAndScaleY:2,packedAttribute0:3,packedAttribute1:4,color:5},jSt=Bu.SHOW_INDEX,qSt=Bu.POSITION_INDEX,$St=Bu.SCALE_INDEX,eLt=Bu.MAXIMUM_SIZE_INDEX,tLt=Bu.SLICE_INDEX,nLt=Bu.BRIGHTNESS_INDEX,iLt=Bu.NUMBER_OF_PROPERTIES,oLt=Bu.COLOR_INDEX;function xf(e){e=e??Y.EMPTY_OBJECT,this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array(iLt),this._noiseTexture=void 0,this._textureSliceWidth=128,this._noiseTextureRows=4,this.noiseDetail=e.noiseDetail??16,this.noiseOffset=m.clone(e.noiseOffset??m.ZERO),this._loading=!1,this._ready=!1;let t=this;this._uniforms={u_noiseTexture:function(){return t._noiseTexture},u_noiseTextureDimensions:wTe(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 wTe(e){return function(){return kY.x=e._textureSliceWidth,kY.y=e._noiseTextureRows,kY.z=1/e._noiseTextureRows,kY}}Object.defineProperties(xf.prototype,{length:{get:function(){return m$(this),this._clouds.length}}});function XTe(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}xf.prototype.add=function(e){e=e??Y.EMPTY_OBJECT;let t=e.cloudType??PL.CUMULUS,n;return t===PL.CUMULUS&&(n=new Bu(e,this),n._index=this._clouds.length,this._clouds.push(n),this._createVertexArray=!0),n};xf.prototype.remove=function(e){return this.contains(e)?(this._clouds[e._index]=void 0,this._cloudsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};xf.prototype.removeAll=function(){XTe(this._clouds),this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!0};function m$(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}}xf.prototype._updateCloud=function(e,t){e._dirty||(this._cloudsToUpdate[this._cloudsToUpdateIndex++]=e),++this._propertiesChanged[t]};xf.prototype.contains=function(e){return l(e)&&e._cloudCollection===this};xf.prototype.get=function(e){return m$(this),this._clouds[e]};var rLt=new Float32Array([-1,-1,1,-1,1,1,-1,1]),sLt=new Uint16Array([0,1,2,0,2,3]);function aLt(e){let t=It.createVertexBuffer({context:e,typedArray:rLt,usage:Ne.STATIC_DRAW}),n=It.createIndexBuffer({context:e,typedArray:sLt,usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT}),i=[{index:0,vertexBuffer:t,componentsPerAttribute:2,componentDatatype:J.FLOAT}];return new ui({context:e,attributes:i,indexBuffer:n})}var h$;function cLt(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=It.createIndexBuffer({context:e,typedArray:o,usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT}),n.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferBatched=n,n}function lLt(e){let t=e.cache.cloudCollection_indexBufferInstanced;return l(t)||(t=It.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferInstanced=t),t}function dLt(e){let t=e.cache.cloudCollection_vertexBufferInstanced;return l(t)||(t=It.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:Ne.STATIC_DRAW}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_vertexBufferInstanced=t),t}function uLt(e,t,n){let i=[{index:wu.positionHighAndScaleX,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:Ne.STATIC_DRAW},{index:wu.positionLowAndScaleY,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:Ne.STATIC_DRAW},{index:wu.packedAttribute0,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:Ne.STATIC_DRAW},{index:wu.packedAttribute1,componentsPerAttribute:4,componentDatatype:J.FLOAT,usage:Ne.STATIC_DRAW},{index:wu.color,componentsPerAttribute:4,componentDatatype:J.UNSIGNED_BYTE,normalize:!0,usage:Ne.STATIC_DRAW}];n&&i.push({index:wu.direction,componentsPerAttribute:2,componentDatatype:J.FLOAT,vertexBuffer:dLt(e)});let o=n?t:4*t;return new zA(e,i,o,n)}var u$=new ni;function WTe(e,t,n,i){let o,r=n[wu.positionHighAndScaleX],s=n[wu.positionLowAndScaleY],a=i.position;ni.fromCartesian(a,u$);let c=i.scale,d=u$.high,u=u$.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 FTe(e,t,n,i){let o,r=n[wu.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 PTe(e,t,n,i){let o,r=n[wu.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 MTe(e,t,n,i){let o,r=n[wu.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 mLt(e,t,n,i){WTe(e,t,n,i),FTe(e,t,n,i),PTe(e,t,n,i),MTe(e,t,n,i)}function hLt(e,t,n,i){let o=e,r=o._textureSliceWidth,s=o._noiseTextureRows,a=t.context;o._vaNoise=aLt(a),o._spNoise=ln.fromCache({context:a,vertexShaderSource:n,fragmentShaderSource:i,attributeLocations:{position:0}});let c=o.noiseDetail,d=o.noiseOffset;o._noiseTexture=new Wt({context:a,width:r*r/s,height:r*s,pixelDatatype:Ye.UNSIGNED_BYTE,pixelFormat:tt.RGBA,sampler:new sn({wrapS:Ln.REPEAT,wrapT:Ln.REPEAT,minificationFilter:en.NEAREST,magnificationFilter:pi.NEAREST})});let u=new Il({vertexArray:o._vaNoise,shaderProgram:o._spNoise,outputTexture:o._noiseTexture,uniformMap:{u_noiseTextureDimensions:wTe(o),u_noiseDetail:function(){return c},u_noiseOffset:function(){return d}},persists:!1,owner:e,postExecute:function(h){o._ready=!0,o._loading=!1}});t.commandList.push(u),o._loading=!0}function fLt(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=uLt(i,r,n._instanced);let s=n._vaf.writers,a;for(a=0;a<r;++a){let c=o[a];mLt(e,t,s,c)}n._vaf.commit(h$(i))}}var pLt=[];function ALt(e,t){let n=t.context,i=e,r=i._clouds.length,s=i._cloudsToUpdate,a=i._cloudsToUpdateIndex,c=i._propertiesChanged,d=pLt;d.length=0,(c[qSt]||c[$St])&&d.push(WTe),(c[jSt]||c[nLt])&&d.push(FTe),(c[eLt]||c[tLt])&&d.push(PTe),c[oLt]&&d.push(MTe);let u=d.length,h=i._vaf.writers,p,g,f;if(a/r>.1){for(p=0;p<a;++p)for(g=s[p],g._dirty=!1,f=0;f<u;++f)d[f](e,t,h,g);i._vaf.commit(h$(n))}else{for(p=0;p<a;++p){for(g=s[p],g._dirty=!1,f=0;f<u;++f)d[f](e,t,h,g);i._instanced?i._vaf.subCommit(g._index,1):i._vaf.subCommit(g._index*4,4)}i._vaf.endSubCommits()}i._cloudsToUpdateIndex=0}function gLt(e,t,n,i){let o=t.context,r=e,s=new Oe({defines:[],sources:[n]});r._instanced&&s.defines.push("INSTANCED");let a=new Oe({defines:[],sources:[i]});r.debugBillboards&&a.defines.push("DEBUG_BILLBOARDS"),r.debugEllipsoids&&a.defines.push("DEBUG_ELLIPSOIDS"),r._sp=ln.replaceCache({context:o,shaderProgram:r._sp,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:wu}),r._rs=Qe.fromCache({depthTest:{enabled:!0,func:ne.LESS},depthMask:!1,blending:bn.ALPHA_BLEND}),r._spCreated=!0,r._compiledDebugBillboards=r.debugBillboards,r._compiledDebugEllipsoids=r.debugEllipsoids}function bLt(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=Ge.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)}}}xf.prototype.update=function(e){if(m$(this),!this.show)return;let t=this.debugBillboards||this.debugEllipsoids;this._ready=t?!0:l(this._noiseTexture),!this._ready&&!this._loading&&!t&&hLt(this,e,hP,mP),this._instanced=e.context.instancedArrays,wu=this._instanced?JSt:KSt,h$=this._instanced?lLt:cLt;let i=this._clouds.length,o=this._cloudsToUpdate,r=this._cloudsToUpdateIndex;this._createVertexArray?fLt(this,e):r>0&&ALt(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)&&gLt(this,e,uP,dP),bLt(this,e))};xf.prototype.isDestroyed=function(){return!1};xf.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(),XTe(this._clouds),me(this)};var f$=xf;var lso=y(C(),1);var yLt=Z.toRadians(30);function p$(e){this._angle=e??yLt}Object.defineProperties(p$.prototype,{angle:{get:function(){return this._angle},set:function(e){this._angle=e}}});p$.prototype.emit=function(e){let t=Math.tan(this._angle),n=Z.randomBetween(0,Z.TWO_PI),i=Z.randomBetween(0,t),o=i*Math.cos(n),r=i*Math.sin(n),s=1;e.velocity=m.fromElements(o,r,s,e.velocity),m.normalize(e.velocity,e.velocity),e.position=m.clone(m.ZERO,e.position)};var A$=p$;var fso=y(C(),1);function cN(e){e=e??Y.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=go.getDefaultRenderState(!1,!1,e.renderState),this._closed=e.closed??!1,this._attributeName=t,this._glslDatatype=i}Object.defineProperties(cN.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}}});cN.prototype.getFragmentShaderSource=go.prototype.getFragmentShaderSource;cN.prototype.isTranslucent=go.prototype.isTranslucent;cN.prototype.getRenderState=go.prototype.getRenderState;var g$=cN;var Lso=y(C(),1);function YY(e){e=e??Y.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=X.clone(e.modelMatrix??X.IDENTITY),this._modelMatrix=new X,this.id=e.id,this._id=void 0,this._primitive=void 0}YY.prototype.update=function(e){if(this.show){if(!l(this._primitive)||!X.equals(this._modelMatrix,this.modelMatrix)||this._length!==this.length||this._width!==this.width||this._id!==this.id){this._modelMatrix=X.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 wt({geometry:new Zg({positions:[m.ZERO,m.UNIT_X],width:this.width,vertexFormat:bs.VERTEX_FORMAT,colors:[U.RED,U.RED],arcType:dn.NONE}),modelMatrix:X.multiplyByUniformScale(this.modelMatrix,this.length,new X),id:this.id,pickPrimitive:this}),n=new wt({geometry:new Zg({positions:[m.ZERO,m.UNIT_Y],width:this.width,vertexFormat:bs.VERTEX_FORMAT,colors:[U.GREEN,U.GREEN],arcType:dn.NONE}),modelMatrix:X.multiplyByUniformScale(this.modelMatrix,this.length,new X),id:this.id,pickPrimitive:this}),i=new wt({geometry:new Zg({positions:[m.ZERO,m.UNIT_Z],width:this.width,vertexFormat:bs.VERTEX_FORMAT,colors:[U.BLUE,U.BLUE],arcType:dn.NONE}),modelMatrix:X.multiplyByUniformScale(this.modelMatrix,this.length,new X),id:this.id,pickPrimitive:this});this._primitive=new Nn({geometryInstances:[t,n,i],appearance:new bs,asynchronous:!1})}this._primitive.update(e)}};YY.prototype.isDestroyed=function(){return!1};YY.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};var lN=YY;var Zso=y(C(),1);function CLt(e){this.direction=m.clone(e.direction),this.color=U.clone(e.color??U.WHITE),this.intensity=e.intensity??1}var b$=CLt;var kso=y(C(),1);var wso=y(C(),1),dN=`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 Wso=y(C(),1),uN=`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 g_(e){e=e??Y.EMPTY_OBJECT;let t=e.translucent??!0,n=e.aboveGround??!1;this.material=l(e.material)?e.material:so.fromType(so.ColorType),this.translucent=e.translucent??!0,this._vertexShaderSource=e.vertexShaderSource??uN,this._fragmentShaderSource=e.fragmentShaderSource??dN,this._renderState=go.getDefaultRenderState(t,!n,e.renderState),this._closed=!1,this._flat=e.flat??!1,this._faceForward=e.faceForward??n,this._aboveGround=n}Object.defineProperties(g_.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 g_.VERTEX_FORMAT}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}},aboveGround:{get:function(){return this._aboveGround}}});g_.VERTEX_FORMAT=we.POSITION_AND_ST;g_.prototype.getFragmentShaderSource=go.prototype.getFragmentShaderSource;g_.prototype.isTranslucent=go.prototype.isTranslucent;g_.prototype.getRenderState=go.prototype.getRenderState;var y$=g_;var jso=y(C(),1);function Sd(e){this._scene=e.scene,this.samplingWindow=e.samplingWindow??Sd.defaultSettings.samplingWindow,this.quietPeriod=e.quietPeriod??Sd.defaultSettings.quietPeriod,this.warmupPeriod=e.warmupPeriod??Sd.defaultSettings.warmupPeriod,this.minimumFrameRateDuringWarmup=e.minimumFrameRateDuringWarmup??Sd.defaultSettings.minimumFrameRateDuringWarmup,this.minimumFrameRateAfterWarmup=e.minimumFrameRateAfterWarmup??Sd.defaultSettings.minimumFrameRateAfterWarmup,this._lowFrameRate=new Ce,this._nominalFrameRate=new Ce,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){xLt(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(){ILt(t)}this._visibilityChangeRemoveListener=void 0,l(n)&&(document.addEventListener(n,i,!1),this._visibilityChangeRemoveListener=function(){document.removeEventListener(n,i,!1)})}Sd.defaultSettings={samplingWindow:5,quietPeriod:2,warmupPeriod:5,minimumFrameRateDuringWarmup:4,minimumFrameRateAfterWarmup:8};Sd.fromScene=function(e){return(!l(e._frameRateMonitor)||e._frameRateMonitor.isDestroyed())&&(e._frameRateMonitor=new Sd({scene:e})),e._frameRateMonitor};Object.defineProperties(Sd.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}}});Sd.prototype.pause=function(){++this._pauseCount,this._pauseCount===1&&(this._frameTimes.length=0,this._lastFramesPerSecond=void 0)};Sd.prototype.unpause=function(){--this._pauseCount,this._pauseCount<=0&&(this._pauseCount=0,this._needsQuietPeriod=!0)};Sd.prototype.isDestroyed=function(){return!1};Sd.prototype.destroy=function(){return this._preUpdateRemoveListener(),l(this._visibilityChangeRemoveListener)&&this._visibilityChangeRemoveListener(),me(this)};function xLt(e,t){if(e._pauseCount>0)return;let n=Fi();if(e._needsQuietPeriod)e._needsQuietPeriod=!1,e._frameTimes.length=0,e._quietPeriodEndTime=n+e.quietPeriod/ai.SECONDS_PER_MILLISECOND,e._warmupPeriodEndTime=e._quietPeriodEndTime+(e.warmupPeriod+e.samplingWindow)/ai.SECONDS_PER_MILLISECOND;else if(n>=e._quietPeriodEndTime){e._frameTimes.push(n);let i=n-e.samplingWindow/ai.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 ILt(e){document[e._hiddenPropertyName]?e.pause():e.unpause()}var mN=Sd;var uao=y(C(),1);var vTe=y(Vq(),1);function C$(){this._image=new Image}C$.prototype.isReady=function(){return!0};C$.prototype.shouldDiscardImage=function(e){return e===this._image};function b_(e){e=e??Y.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 ao({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new le(-Z.PI,-Z.PI,Z.PI,Z.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new Gt(t)),this._credit=t,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=23,l(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new C$),this._errorEvent=new Ce}Object.defineProperties(b_.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}}});b_.fromMetadata=function(e,t){if(!e.imageryPresent)throw new de(`The server ${e.url} doesn't have imagery`);let n=new b_(t);return n._metadata=e,n};b_.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]}};b_.prototype.requestImage=function(e,t,n,i){let o=this._tileDiscardPolicy._image,r=this._metadata,s=ib.tileXYToQuadKey(e,t,n),a=r.getTileInformation(e,t,n);if(!l(a)){if(r.isValid(s)){let d=new sr({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=_Lt(this,a,e,t,n,i).fetchArrayBuffer();if(l(c))return c.then(function(d){tN(r.key,d);let u=new Uint8Array(d),h,p=r.protoImagery;if((!l(p)||!p)&&(h=ELt(u)),!l(h)&&(!l(p)||p)){let g=TLt(u);h=g.imageType,u=g.imageData}return!l(h)||!l(u)?o:FC({uint8Array:u,format:h,flipY:!0})})};b_.prototype.pickFeatures=function(e,t,n,i,o){};function _Lt(e,t,n,i,o,r){let s=ib.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 ELt(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 TLt(e){let t=vTe.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 de("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 x$=b_;var bao=y(C(),1);var SLt=new U(1,1,1,.4),LLt=new U(0,1,0,.05),RLt=new U(0,.5,0,.2);function y_(e){e=e??Y.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 ao({ellipsoid:e.ellipsoid}),this._cells=e.cells??8,this._color=e.color??SLt,this._glowColor=e.glowColor??LLt,this._glowWidth=e.glowWidth??6,this._backgroundColor=e.backgroundColor??RLt,this._errorEvent=new Ce,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._canvasSize=e.canvasSize??256,this._canvas=this._createGridCanvas()}Object.defineProperties(y_.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}}});y_.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()};y_.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};y_.prototype.getTileCredits=function(e,t,n){};y_.prototype.requestImage=function(e,t,n,i){return Promise.resolve(this._canvas)};y_.prototype.pickFeatures=function(e,t,n,i,o){};var I$=y_;var jco=y(C(),1);var _co=y(C(),1);var sco=y(C(),1);var Rao=y(C(),1);function If(){}If._maxDecodingConcurrency=Math.max(Ht.hardwareConcurrency-1,1);If._decodeTaskProcessor=new hi("decodeI3S",If._maxDecodingConcurrency);If._promise=void 0;async function VLt(){if(await If._decodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/draco_decoder.wasm"}))return If._decodeTaskProcessor;throw new de("I3S decoder could not be initialized.")}If.decode=async function(e,t,n,i,o){return l(If._promise)||(If._promise=VLt()),If._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 h=$.fromRotationX(-Z.PI_OVER_TWO),p=new $;$.multiply(h,a,p);let g=ge.fromDegrees(c,d,u),f=ie.WGS84.cartographicToCartesian(g),b={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:g,cartesianCenter:f,parentRotation:p,enableFeatures:n._dataProvider.showFeatures,splitGeometryByColorTransparency:n._dataProvider.adjustMaterialAlphaMode,symbologyData:o,calculateNormals:n._dataProvider.calculateNormals};return r.scheduleTask(b)})};var hN=If;var Bao=y(C(),1);function _$(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(_$.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}}});_$.prototype.load=async function(){return this._data=await _f.loadJson(this._resource),this._data};var fN=_$;var Fao=y(C(),1);function rb(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(rb.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 OY(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 GLt(e){return e==="String"?1:OY(e)}async function ZLt(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)}rb.prototype.load=function(){return l(this._loadPromise)?this._loadPromise:(this._loadPromise=ZLt(this).catch(function(e){console.error(e)}),this._loadPromise)};rb.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}};rb.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};rb.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)}}}};rb.prototype._getBodyOffset=function(e){let t=0;return l(this._storageInfo.attributeValues)?t=OY(this._storageInfo.attributeValues.valueType):l(this._storageInfo.objectIds)&&(t=OY(this._storageInfo.objectIds.valueType)),t>0?Math.ceil(e/t)*t:e};rb.prototype._validateHeader=function(e){let t=0;for(let n=0;n<this._storageInfo.header.length;n++){let i=this._storageInfo.header[n];t+=GLt(i.valueType)}if(e.byteLength<t)throw new de(`Invalid attribute buffer size (field: ${this.name}, header: ${t}, actual: ${e.byteLength})`)};rb.prototype._validateBody=function(e,t){if(!l(this._header.count))throw new de(`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=OY(s.valueType);t+=a*this._header.count}else{if(!l(n))throw new de(`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 de(`Invalid attribute buffer (field: ${this.name}, ${r} is missing)`)}if(e.byteLength<t)throw new de(`Invalid attribute buffer size (field: ${this.name}, expected: ${t}, actual: ${e.byteLength})`)};var pN=rb;var Uao=y(C(),1);function AN(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(AN.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},customAttributes:{get:function(){return this._customAttributes}}});AN.prototype.load=function(){let e=this;return this._dataProvider._loadBinary(this._resource).then(function(t){return e._data=t,t})};var BLt=new m,wLt=new m,XLt=new m,WLt=new m,FLt=new m;function E$(e,t,n,i){let o=m.subtract(i,n,BLt),r=m.cross(o,m.subtract(e,n,wLt),WLt),s=m.cross(o,m.subtract(t,n,XLt),FLt);return m.dot(r,s)>=0}var PLt=new m,MLt=new m,vLt=new m,NLt=new m,DLt=new m,QLt=new m,ULt=new m,kLt=new m,YLt=new m,OLt=new m;AN.prototype.getClosestPointIndexOnTriangle=function(e,t,n){if(l(this._customAttributes)&&l(this._customAttributes.positions)){let i=new m(e,t,n);i.x-=this._customAttributes.cartesianCenter.x,i.y-=this._customAttributes.cartesianCenter.y,i.z-=this._customAttributes.cartesianCenter.z,$.multiplyByVector(this._customAttributes.parentRotation,i,i);let o=Number.MAX_VALUE,r,s,a,c,d=this._customAttributes.positions,u=this._customAttributes.indices,h;l(u)?h=u.length:h=d.length/3;for(let p=0;p<h;p++){let g,f,b;l(u)?(g=u[p],f=u[p+1],b=u[p+2]):(g=p*3,f=p*3+1,b=p*3+2);let x=m.fromElements(d[g*3],d[g*3+1],d[g*3+2],PLt),I=m.fromElements(d[f*3],d[f*3+1],d[f*3+2],MLt),_=new m(d[b*3],d[b*3+1],d[b*3+2],vLt);if(!E$(i,x,I,_)||!E$(i,I,x,_)||!E$(i,_,x,I))continue;let E=m.subtract(I,x,NLt),S=m.subtract(_,x,DLt),R=m.cross(E,S,QLt);if(m.magnitude(R)===0)continue;let G=m.normalize(R,ULt),B=m.subtract(i,x,kLt),w=Math.abs(m.dot(B,G));if(w<o){o=w,r=p;let F=m.magnitudeSquared(m.subtract(i,x,B)),P=m.magnitudeSquared(m.subtract(i,I,YLt)),A=m.magnitudeSquared(m.subtract(i,_,OLt));F<P&&F<A?(a=g,c=x,s=F):P<A?(a=f,c=I,s=P):(a=b,c=_,s=A)}}if(l(r))return{index:a,distanceSquared:s,distance:Math.sqrt(s),queriedPosition:i,closestPosition:m.clone(c)}}return{index:-1,distanceSquared:Number.Infinity,distance:Number.Infinity}};function NTe(e){let t=[],n=e.length;for(let i=0;i<n;i++)i<3?t.push(f_(e[i])):t.push(e[i]);return t}AN.prototype._generateGltf=function(e,t,n,i,o,r,s,a){let c={pbrMetallicRoughness:{metallicFactor:0},doubleSided:!0,name:"Material"},d=!1,u,h="";if(l(this._parent._data.mesh)&&l(this._layer._data.materialDefinitions)){let E=this._parent._data.mesh.material.definition;if(E>=0&&E<this._layer._data.materialDefinitions.length){if(u=this._layer._data.materialDefinitions[E],c=u,l(c.pbrMetallicRoughness)&&l(c.pbrMetallicRoughness.baseColorTexture)){d=!0,c.pbrMetallicRoughness.baseColorTexture.index=0;let S="0";if(l(this._layer._data.textureSetDefinitions))for(let R=0;R<this._layer._data.textureSetDefinitions.length;R++){let G=this._layer._data.textureSetDefinitions[R];for(let B=0;B<G.formats.length;B++){let w=G.formats[B];if(w.format==="jpg"){S=w.name;break}}}l(this._parent._data.mesh)&&this._parent._data.mesh.material.resource>=0&&(h=this._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.material.resource}/textures/${S}`}).url)}l(c.pbrMetallicRoughness)&&l(c.pbrMetallicRoughness.baseColorFactor)&&(c.pbrMetallicRoughness.baseColorFactor=NTe(c.pbrMetallicRoughness.baseColorFactor)),l(c.emissiveFactor)&&(c.emissiveFactor=NTe(c.emissiveFactor))}}else l(this._parent._data.textureData)&&(d=!0,h=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=[],g=[],f=[];d&&(p=[{sampler:0,source:0}],g=[{uri:h}],f=[{magFilter:9729,minFilter:9986,wrapS:10497,wrapT:10497}]);let b=[],x=n.length;for(let _=0;_<x;_++){let E=n[_].primitives,S=E.length;for(let R=0;R<S;R++){let G=E[R];if(l(G.material)){for(;G.material>=b.length;){let w=ke(c,!0);b.push(w)}let B=b[G.material];l(G.extra)&&G.extra.isTransparent?l(B.alphaMode)||(B.alphaMode="BLEND"):B.alphaMode==="BLEND"&&(B.alphaMode="OPAQUE")}}}return{scene:0,scenes:[{nodes:e}],nodes:t,meshes:n,buffers:i,bufferViews:o,accessors:r,materials:b,textures:p,images:g,samplers:f,asset:{version:"2.0"},extensions:s,extensionsUsed:a}};var ML=AN;function tl(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(tl.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}}});tl.prototype.load=async function(){let e=this;function t(){if(!e._isRoot){let o=e._create3DTileDefinition();e._tile=new ym(e._layer._tileset,e._dataProvider.resource,o,e._parent._tile),e._tile._i3sNode=e}}if(!l(this._nodeIndex)){let o=await _f.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 DTe(e,t){let n=new pN(e,t);return e._fields[t.name]=n,n.load()}tl.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(DTe(this,i))}return Promise.all(t)};tl.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 DTe(this,o)}return Promise.resolve()};tl.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)};tl.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};tl.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 tl(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};tl.prototype._loadGeometryData=function(){let e=[];if(l(this._data.geometryData))for(let t=0;t<this._data.geometryData.length;t++){let n=new ML(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 ML(this,n);i._geometryDefinitions=t.definition,i._geometryBufferInfo=t.geometryBufferInfo,this._geometryData.push(i),e.push(i.load())}return Promise.all(e)};tl.prototype._loadFeatureData=function(){let e=[];if(l(this._data.featureData))for(let t=0;t<this._data.featureData.length;t++){let n=new fN(this,this._data.featureData[t].href);this._featureData.push(n),e.push(n.load())}return Promise.all(e)};tl.prototype._clearGeometryData=function(){this._geometryData=[]};tl.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=ge.fromDegrees(e.center[0],e.center[1],e.center[2]):n=ge.fromDegrees(t[0],t[1],t[2]),l(this._dataProvider._geoidDataList)&&l(n))for(let I=0;I<this._dataProvider._geoidDataList.length;I++){let _=this._dataProvider._geoidDataList[I],E=_.projection.project(n);if(E.x>_.nativeExtent.west&&E.x<_.nativeExtent.east&&E.y>_.nativeExtent.south&&E.y<_.nativeExtent.north){n.height+=JLt(E.x,E.y,_);break}}let i={},o,r=0;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 I=Math.sqrt(this._data.lodThreshold/(Math.PI*.25));s=r/I}else if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThreshold"){let I=this._data.lodThreshold;s=r/I}else console.error("Invalid lodSelectionMetricType in Layer");else if(l(this._data.lodSelection))for(let I=0;I<this._data.lodSelection.length;I++)this._data.lodSelection[I].metricType==="maxScreenThreshold"&&(s=r/this._data.lodSelection[I].maxError);s===1/0&&(s=1e5);let a=s*16,c=new ic(0,0,0),d=Dt.headingPitchRollQuaternion(o,c);l(this._data.obb)&&(d=new Pe(this._data.obb.quaternion[0],this._data.obb.quaternion[1],this._data.obb.quaternion[2],this._data.obb.quaternion[3]));let u=$.fromQuaternion(d),h=$.inverse(u,new $),p=new X(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),g=X.inverse(p,new X),f=X.clone(p);l(this._parent._globalTransform)&&X.multiply(p,this._parent._inverseGlobalTransform,f),this._globalTransform=p,this._inverseGlobalTransform=g,this._inverseRotationMatrix=h;let b=[];for(let I=0;I<this._children.length;I++)b.push(this._children[I]._create3DTileDefinition());return{children:b,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}};tl.prototype._loadSymbology=async function(){!l(this._symbologyData)&&l(this._layer._symbology)&&(this._symbologyData=await this._layer._symbology._getSymbology(this))};tl.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 hN.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 HLt(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 zLt(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 QTe(e,t){let n=e._tile.content.batchTable;if(l(n)&&n.featuresLength>0){n.setAllShow(!0);let i=await HLt(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(!zLt(o,e._fields[s.name],s)){n.setShow(o,!1);break}}}t.show=!0}tl.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=QTe(this,t);e.push(n)}return Promise.all(e)};ym.prototype._hookedRequestContent=ym.prototype.requestContent;ym.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(()=>{QTe(e._i3sNode,n)})),e._isLoading=!1,t})}};function KLt(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 HY(e,t,n,i){let o=e+t*n;return i[o]}function JLt(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=HY(s,a,n.width,n.buffer),h=HY(c,a,n.width,n.buffer),p=HY(s,d,n.width,n.buffer),g=HY(c,d,n.width,n.buffer),f=KLt(o,r,u,h,p,g);return f=f*n.scale+n.offset,f}Object.defineProperties(ym.prototype,{i3sNode:{get:function(){return this._i3sNode}}});var vL=tl;var uco=y(C(),1);function zY(e){this._layer=e,this._defaultSymbology=void 0,this._valueFields=[],this._uniqueValueHash=void 0,this._classBreaksHash=void 0,this._parseLayerSymbology()}Object.defineProperties(zY.prototype,{defaultSymbology:{get:function(){return this._defaultSymbology}}});function T$(e,t){let n=[];for(let i=0;i<e.length;i++){let o=U.byteToFloat(e[i]);i<3?n.push(f_(o)):n.push(o)}return n.length===3&&(l(t)?n.push(1-t/100):n.push(1)),n}function NL(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=T$(r.color,r.transparency))):l(s)&&(n.edges={},l(s.color)&&(n.edges.color=T$(s.color,s.transparency))),!t){let a=o.material;l(a)&&(n.material={colorMixMode:a.colorMixMode},l(a.color)&&(n.material.color=T$(a.color,a.transparency)))}break}}return n}function jLt(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=NL(o[r].symbol,t),a=o[r].values;for(let c=0;c<a.length;c++){let d=a[c],u=n;for(let h=0;h<d.length;h++){let p=d[h];h===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]=NL(o.symbol,t)}return n}}function qLt(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(NL(r.symbol,t)))}return i.symbols.push(void 0),i}}zY.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=NL(i.symbol,n):i.type==="uniqueValue"?(this._defaultSymbology=NL(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=jLt(i,n)):i.type==="classBreaks"&&(this._defaultSymbology=NL(i.defaultSymbol,n),this._valueFields.push(i.field),this._classBreaksHash=qLt(i,n))}};function UTe(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?UTe(s,t,n,i):s}}function $Lt(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 e1t(e,t,n){let i=t[n],o=$Lt(e.ranges,i);return e.symbols[o]}zY.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=>UTe(this._uniqueValueHash,i,0,r):l(this._classBreaksHash)&&(o=r=>e1t(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 gN=zY;function Ld(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(Ld.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}}});Ld.prototype.load=async function(e){if(this._data.spatialReference.wkid!==4326)throw new de(`Unsupported spatial reference: ${this._data.spatialReference.wkid}`);if(this._dataProvider.applySymbology&&(this._symbology=new gN(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()};Ld.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)}};Ld.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]}}};Ld.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 vL(this,t,!0)}else this._rootNode=new vL(this,this._data.store.rootNode,!0);return this._rootNode.load(e)};Ld.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]})};Ld._fetchJson=function(e){return e.fetchJson()};Ld.prototype._loadNodePage=function(e){let t=this;if(!l(this._nodePageFetches[e])){let n=this.resource.getDerivedResource({url:`nodepages/${e}/`}),i=Ld._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]};Ld.prototype._computeExtent=function(){l(this._data.fullExtent)?this._extent=le.fromDegrees(this._data.fullExtent.xmin,this._data.fullExtent.ymin,this._data.fullExtent.xmax,this._data.fullExtent.ymax):l(this._data.store.extent)&&(this._extent=le.fromDegrees(this._data.store.extent[0],this._data.store.extent[1],this._data.store.extent[2],this._data.store.extent[3]))};Ld.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)?ke(e):{},e.outlineColor=U.fromCartesian4(ce.fromArray(o))),this._tileset=await Ps.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()})};Ld.prototype._updateVisibility=function(){l(this._tileset)&&(this._tileset.show=this._parent.show)};Ld.prototype.filterByAttributes=function(e){this._filters=l(e)?ke(e,!0):[];let t=this._rootNode;return l(t)?t._filterFeatures():Promise.resolve()};var C_=Ld;var Rco=y(C(),1);function KY(e,t){this._dataProvider=e,this._resource=new Ve({url:t}),this._resource.setQueryParameters(e.resource.queryParameters),this._resource.appendForwardSlash()}Object.defineProperties(KY.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}}});KY.prototype.load=async function(){return this._data=await _f.loadJson(this._resource),this._data};KY.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 bN=KY;var Xco=y(C(),1);function yN(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(yN.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}}});yN._fromData=async function(e,t,n,i){let o=new yN(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=yN._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 _f.loadJson(o._resource),c=new C_(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 CN=yN;var OTe=y(kTe(),1);function Us(e){e=e??Y.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??Y.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(Us.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}}});Us.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)};Us.prototype.isDestroyed=function(){return!1};Us.prototype.update=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.update(e)};Us.prototype.prePassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.prePassesUpdate(e)};Us.prototype.postPassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.postPassesUpdate(e)};Us.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 t1t(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 YTe(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=t1t(e,t.id);if(l(t.sublayers)){let o=[];for(let s=0;s<t.sublayers.length;s++){let a=CN._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 bN(e,o);await r.load(),e._attributeStatistics.push(r)}if(l(t.fullExtent)){let o=le.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 C_(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.`)}Us.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=Ve.createIfNeeded(e);n.setQueryParameters({f:"pjson"},!0);let i=await Us.loadJson(n),o=new Us(t);if(o._resource=n,o._data=i,l(i.layers)){let s=[];for(let a=0;a<i.layers.length;a++){let c=YTe(o,i.layers[a],t);s.push(c)}await Promise.all(s)}else await YTe(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};Us._fetchJson=function(e){return e.fetchJson()};Us.loadJson=async function(e){let t=await Us._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 de(t.error)}return t};Us.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 de(`Failed to load binary: ${e.url}`);return t};Us.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 n1t=new D;function i1t(e,t){let n=e.tilingScheme,i=[],o={},r=e._lodCount,s=ge.fromRadians(t.west,t.north),a=ge.fromRadians(t.east,t.south),c=n.positionToTileXY(s,r),d=n.positionToTileXY(a,r);for(let h=c.x;h<=d.x;h++)for(let p=c.y;p<=d.y;p++){let g=D.fromElements(h,p,n1t),f=g.toString();if(!o.hasOwnProperty(f)){let b={x:g.x,y:g.y,level:r,tilingScheme:n,terrainProvider:e,positions:[]};o[f]=b,i.push(b)}}let u=[];for(let h=0;h<i.length;++h){let p=i[h],g=p.terrainProvider.requestTileGeometry(p.x,p.y,p.level);u.push(g)}return Promise.all(u).then(function(h){let p=[];for(let g=0;g<h.length;g++){let f={tilingScheme:n,x:i[g].x,y:i[g].y,level:i[g].level},b=h[g],x="Geographic";n._projection instanceof Ui&&(x="WebMercator");let I={projectionType:x,projection:n._projection,nativeExtent:n.tileXYToNativeRectangle(f.x,f.y,f.level),height:b._height,width:b._width,scale:b._structure.heightScale,offset:b._structure.heightOffset};if(b._encoding===Xm.LERC){let _=OTe.default.decode(b._buffer);I.buffer=_.pixels[0]}else I.buffer=b._buffer;p.push(I)}return p})}async function o1t(e){let t=e._geoidTiledTerrainProvider;if(l(t))try{let n=await i1t(t,e._extent);e._geoidDataList=n}catch{console.log("Error retrieving Geoid Terrain tiles - no geoid conversion will be performed.")}}Us.prototype.loadGeoidData=async function(){return l(this._geoidDataPromise)?this._geoidDataPromise:(this._geoidDataPromise=o1t(this),this._geoidDataPromise)};Us.prototype._computeExtent=function(){let e;for(let t=0;t<this._layersExtent.length;t++){let n=this._layersExtent[t];l(e)?le.union(e,n,e):e=le.clone(n)}this._extent=e};Us.prototype.getAttributeNames=function(){let e=[];for(let t=0;t<this._attributeStatistics.length;++t)e.push(...this._attributeStatistics[t].names);return e};Us.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[]};Us.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 _f=Us;var alo=y(C(),1);var xN={};xN.createTilesetFromIModelId=async function(e){let t=e;typeof e=="string"&&(t={iModelId:e,tilesetOptions:arguments[1]},_r("ITwinData.createTilesetFromIModelId","The arguments signature for ITwinData functions has changed in 1.132 in favor of a single options object. Please update your code. This fallback will be removed in 1.133"));let{iModelId:n,changesetId:i,tilesetOptions:o}=t,{exports:r}=await oa.getExports(n,i);if(r.length>0&&r.every(u=>u.status===oa.ExportStatus.Invalid))throw new de(`All exports for this iModel are Invalid: ${n}`);let s=r.find(u=>u.status===oa.ExportStatus.Complete);if(!l(s))return;let a=new URL(s._links.mesh.href);a.pathname=`${a.pathname}/tileset.json`;let c=a.toString(),d=new Ve({url:c});return Ps.fromUrl(d,o)};xN.createTilesetForRealityDataId=async function(e){let t=e;typeof e=="string"&&(t={iTwinId:e,realityDataId:arguments[1],type:arguments[2],rootDocument:arguments[3]},_r("ITwinData.createTilesetFromIModelId","The arguments signature for ITwinData functions has changed in 1.132 in favor of a single options object. Please update your code. This fallback will be removed in 1.133"));let{iTwinId:n,realityDataId:i}=t,{type:o,rootDocument:r}=t;if(!l(o)||!l(r)){let c=await oa.getRealityDataMetadata(n,i);r=c.rootDocument,o=c.type}if(![oa.RealityDataType.Cesium3DTiles,oa.RealityDataType.PNTS,oa.RealityDataType.RealityMesh3DTiles,oa.RealityDataType.Terrain3DTiles].includes(o))throw new de(`Reality data type is not a mesh type: ${o}`);let a=await oa.getRealityDataURL(n,i,r);return Ps.fromUrl(a,{maximumScreenSpaceError:4})};xN.createDataSourceForRealityDataId=async function(e){let t=e;typeof e=="string"&&(t={iTwinId:e,realityDataId:arguments[1],type:arguments[2],rootDocument:arguments[3]},_r("ITwinData.createTilesetFromIModelId","The arguments signature for ITwinData functions has changed in 1.132 in favor of a single options object. Please update your code. This fallback will be removed in 1.133"));let{iTwinId:n,realityDataId:i}=t,{type:o,rootDocument:r}=t;if(!l(o)||!l(r)){let c=await oa.getRealityDataMetadata(n,i);r=c.rootDocument,o=c.type}if(![oa.RealityDataType.KML,oa.RealityDataType.GeoJSON].includes(o))throw new de(`Reality data type is not a data source type: ${o}`);let a=await oa.getRealityDataURL(n,i,r);return o===oa.RealityDataType.GeoJSON?Q0.load(a):pI.load(a)};xN.loadGeospatialFeatures=async function(e){let t=e;typeof e=="string"&&(t={iTwinId:e,collectionId:arguments[1],limit:arguments[2]},_r("ITwinData.createTilesetFromIModelId","The arguments signature for ITwinData functions has changed in 1.132 in favor of a single options object. Please update your code. This fallback will be removed in 1.133"));let{iTwinId:n,collectionId:i,limit:o}=t,r=o??1e4,s=`${oa.apiEndpoint}geospatial-features/itwins/${n}/ogc/collections/${i}/items`,a=new Ve({url:s,headers:{Authorization:oa._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{limit:r,client:"CesiumJS"}});return Q0.load(a)};var S$=xN;var dlo=y(C(),1);function HTe(){}Object.defineProperties(HTe.prototype,{color:{get:Ae.throwInstantiationError},intensity:{get:Ae.throwInstantiationError}});var L$=HTe;var glo=y(C(),1);var r1t=/\/$/,zTe=new Gt('© <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 DL(e){e=e??Y.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();r1t.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 Gt(c))):c=zTe,this._resource=i,this._imageryProvider=new hc({url:i,credit:c,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(DL.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}}});DL.prototype.getTileCredits=function(e,t,n){};DL.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};DL.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};DL._defaultCredit=zTe;var R$=DL;var ylo=y(C(),1);function V$(e){}V$.prototype.isReady=function(){return!0};V$.prototype.shouldDiscardImage=function(e){return!1};var G$=V$;var Rlo=y(C(),1);var s1t=new Gt("MapQuest, Open Street Map and contributors, CC-BY-SA");function jY(e){e=e??Y.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 _s({ellipsoid:e.ellipsoid}),i=256,o=256,r=e.minimumLevel??0,s=e.maximumLevel,a=e.rectangle??n.rectangle,c=n.positionToTileXY(le.southwest(a),r),d=n.positionToTileXY(le.northeast(a),r),u=(Math.abs(d.x-c.x)+1)*(Math.abs(d.y-c.y)+1),h=e.credit??s1t;typeof h=="string"&&(h=new Gt(h)),hc.call(this,{url:t,credit:h,tilingScheme:n,tileWidth:i,tileHeight:o,minimumLevel:r,maximumLevel:s,rectangle:a})}l(Object.create)&&(jY.prototype=Object.create(hc.prototype),jY.prototype.constructor=jY);var sb=jY;var Wlo=y(C(),1);var a1t=new D(1,1);function Z$(e){e=e??Y.EMPTY_OBJECT,this.mass=e.mass??1,this.position=m.clone(e.position??m.ZERO),this.velocity=m.clone(e.velocity??m.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=D.clone(e.imageSize??a1t),this._age=0,this._normalizedAge=0,this._billboard=void 0}Object.defineProperties(Z$.prototype,{age:{get:function(){return this._age}},normalizedAge:{get:function(){return this._normalizedAge}}});var KTe=new m;Z$.prototype.update=function(e,t){return m.multiplyByScalar(this.velocity,e,KTe),m.add(this.position,KTe,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 QL=Z$;var Mlo=y(C(),1);function JTe(e){e=e??Y.EMPTY_OBJECT,this.time=e.time??0,this.minimum=e.minimum??0,this.maximum=e.maximum??50,this._complete=!1}Object.defineProperties(JTe.prototype,{complete:{get:function(){return this._complete}}});var B$=JTe;var Dlo=y(C(),1);function jTe(e){}jTe.prototype.emit=function(e){Ae.throwInstantiationError()};var w$=jTe;var ndo=y(C(),1);var qTe=new D(1,1);function IN(e){e=e??Y.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 aN(.5)),this._emitter=t,this._bursts=e.bursts,this._modelMatrix=X.clone(e.modelMatrix??X.IDENTITY),this._emitterModelMatrix=X.clone(e.emitterModelMatrix??X.IDENTITY),this._matrixDirty=!0,this._combinedMatrix=new X,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=D.clone(e.imageSize??e.minimumImageSize??qTe),this._maximumImageSize=D.clone(e.imageSize??e.maximumImageSize??qTe),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 Ce,this._isComplete=!1,this._updateParticlePool=!0,this._particleEstimate=0}Object.defineProperties(IN.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||!X.equals(this._modelMatrix,e),X.clone(e,this._modelMatrix)}},emitterModelMatrix:{get:function(){return this._emitterModelMatrix},set:function(e){this._matrixDirty=this._matrixDirty||!X.equals(this._emitterModelMatrix,e),X.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 c1t(e){let t=e._emissionRate,n=e._maximumParticleLife,i=0,o=e._bursts;if(l(o)){let h=o.length;for(let p=0;p<h;++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 h=0;h<u;++h){let p=new QL;p._billboard=r.add({image:s,show:!1}),d.push(p)}e._particleEstimate=a}function l1t(e){let t=e._particlePool.pop();return l(t)||(t=new QL),t}function d1t(e,t){e._particlePool.push(t)}function u1t(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 m1t(e){l(e._billboard)&&(e._billboard.show=!1)}function $Te(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=Z.lerp(t.startColor.red,t.endColor.red,t.normalizedAge),o=Z.lerp(t.startColor.green,t.endColor.green,t.normalizedAge),r=Z.lerp(t.startColor.blue,t.endColor.blue,t.normalizedAge),s=Z.lerp(t.startColor.alpha,t.endColor.alpha,t.normalizedAge);n.color=new U(i,o,r,s),n.scale=Z.lerp(t.startScale,t.endScale,t.normalizedAge)}function h1t(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=Z.randomBetween(e._minimumParticleLife,e._maximumParticleLife),t.mass=Z.randomBetween(e._minimumMass,e._maximumMass),t.imageSize.x=Z.randomBetween(e._minimumImageSize.x,e._maximumImageSize.x),t.imageSize.y=Z.randomBetween(e._minimumImageSize.y,e._maximumImageSize.y),t._normalizedAge=0,t._age=0;let n=Z.randomBetween(e._minimumSpeed,e._maximumSpeed);m.multiplyByScalar(t.velocity,n,t.velocity),e._particles.push(t)}function f1t(e,t){if(e._isComplete)return 0;t=Z.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+=Z.randomBetween(s.minimum,s.maximum),s._complete=!0)}}return i}var qY=new m;IN.prototype.update=function(e){if(!this.show)return;l(this._billboardCollection)||(this._billboardCollection=new qd),this._updateParticlePool&&(c1t(this),this._updateParticlePool=!1);let t=0;this._previousTime&&(t=j.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)?$Te(this,s):(m1t(s),d1t(this,s),n[r]=n[a-1],--r,--a);n.length=a;let c=f1t(this,t);if(c>0&&l(i)){this._matrixDirty&&(this._combinedMatrix=X.multiply(this.modelMatrix,this.emitterModelMatrix,this._combinedMatrix),this._matrixDirty=!1);let d=this._combinedMatrix;for(r=0;r<c;r++)s=l1t(this),this._emitter.emit(s),m.add(s.position,s.velocity,qY),X.multiplyByPoint(d,qY,qY),s.position=X.multiplyByPoint(d,s.position,s.position),m.subtract(qY,s.position,s.velocity),m.normalize(s.velocity,s.velocity),h1t(this,s),$Te(this,s)}if(this._billboardCollection.update(e),this._previousTime=j.clone(e.time,this._previousTime),this._currentTime+=t,this._lifetime!==Number.MAX_VALUE&&this._currentTime>this._lifetime)if(this.loop){if(this._currentTime=Z.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&&u1t(this)};IN.prototype.isDestroyed=function(){return!1};IN.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),me(this)};var X$=IN;var rdo=y(C(),1);function Xu(){Ae.throwInstantiationError()}Xu.computeDefaultLevelZeroMaximumGeometricError=function(e){return e.ellipsoid.maximumRadius*2*Math.PI*.25/(65*e.getNumberOfXTilesAtLevel(0))};Object.defineProperties(Xu.prototype,{quadtree:{get:Ae.throwInstantiationError,set:Ae.throwInstantiationError},tilingScheme:{get:Ae.throwInstantiationError},errorEvent:{get:Ae.throwInstantiationError}});Xu.prototype.update=Ae.throwInstantiationError;Xu.prototype.beginUpdate=Ae.throwInstantiationError;Xu.prototype.endUpdate=Ae.throwInstantiationError;Xu.prototype.getLevelMaximumGeometricError=Ae.throwInstantiationError;Xu.prototype.loadTile=Ae.throwInstantiationError;Xu.prototype.computeTileVisibility=Ae.throwInstantiationError;Xu.prototype.showTileThisFrame=Ae.throwInstantiationError;Xu.prototype.computeDistanceToTile=Ae.throwInstantiationError;Xu.prototype.isDestroyed=Ae.throwInstantiationError;Xu.prototype.destroy=Ae.throwInstantiationError;var W$=Xu;var ldo=y(C(),1);function F$(e){e=e??1,this._radius=e??1}Object.defineProperties(F$.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});F$.prototype.emit=function(e){let t=Z.randomBetween(0,Z.TWO_PI),n=Z.randomBetween(0,Z.PI),i=Z.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=m.fromElements(o,r,s,e.position),e.velocity=m.normalize(e.position,e.velocity)};var P$=F$;var mdo=y(C(),1);function _N(){}_N.prototype.evaluate=function(e,t){Ae.throwInstantiationError()};_N.prototype.evaluateColor=function(e,t){Ae.throwInstantiationError()};_N.prototype.getShaderFunction=function(e,t,n,i){Ae.throwInstantiationError()};_N.prototype.getVariables=function(){Ae.throwInstantiationError()};var M$=_N;var gdo=y(C(),1);function UL(e){this._ready=!1,this._provider=void 0,this._errorEvent=new Ce,this._readyEvent=new Ce,A1t(this,e)}Object.defineProperties(UL.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}}});UL.fromWorldTerrain=function(e){return new UL(h_(e))};UL.fromWorldBathymetry=function(e){return new UL(eN(e))};function p1t(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function A1t(e,t){let n;try{n=await Promise.resolve(t),e._provider=n,e._ready=!0,e._readyEvent.raiseEvent(n)}catch(i){p1t(e._errorEvent,i)}}var EN=UL;var Cdo=y(C(),1);function kL(){}kL.prototype.boundingVolume=void 0;kL.prototype.boundingSphere=void 0;kL.prototype.distanceToCamera=function(e){Ae.throwInstantiationError()};kL.prototype.intersectPlane=function(e){Ae.throwInstantiationError()};kL.prototype.createDebugVolume=function(e){Ae.throwInstantiationError()};var v$=kL;var Ldo=y(C(),1);function TN(e){e=e??Y.EMPTY_OBJECT,this._tilingScheme=l(e.tilingScheme)?e.tilingScheme:new ao({ellipsoid:e.ellipsoid}),this._color=e.color??U.YELLOW,this._errorEvent=new Ce,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(TN.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}}});TN.prototype.getTileCredits=function(e,t,n){};TN.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)};TN.prototype.pickFeatures=function(e,t,n,i,o){};var SN=TN;var Gdo=y(C(),1);function N$(e){Ae.throwInstantiationError()}N$.prototype.isReady=Ae.throwInstantiationError;N$.prototype.shouldDiscardImage=Ae.throwInstantiationError;var D$=N$;var Bdo=y(C(),1),g1t={START:0,LOADING:1,READY:2,UPSAMPLED_ONLY:3},Q$=Object.freeze(g1t);var kdo=y(C(),1);function $Y(e,t){this.show=!0,l(e)||(e=new Ke),this.rectangle=Ke.clone(e),l(t)||(t=so.fromType(so.ColorType,{color:new U(1,1,1,1)})),this.material=t,this._material=void 0,this._overlayCommand=void 0,this._rs=void 0}$Y.prototype.update=function(e){if(!this.show)return;let t=this._rs;if((!l(t)||!Ke.equals(t.viewport,this.rectangle))&&(this._rs=Qe.fromCache({blending:bn.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 Oe({sources:[this._material.shaderSource,RP]});this._overlayCommand=i.createViewportQuadCommand(o,{renderState:this._rs,uniformMap:this._material._uniforms,owner:this}),this._overlayCommand.pass=Ge.OVERLAY}this._material.update(i),this._overlayCommand.renderState=this._rs,this._overlayCommand.uniformMap=this._material._uniforms,e.commandList.push(this._overlayCommand)}};$Y.prototype.isDestroyed=function(){return!1};$Y.prototype.destroy=function(){return l(this._overlayCommand)&&(this._overlayCommand.shaderProgram=this._overlayCommand.shaderProgram&&this._overlayCommand.shaderProgram.destroy()),me(this)};var U$=$Y;var Hdo=y(C(),1);function k$(){Ae.throwInstantiationError()}Object.defineProperties(k$.prototype,{globalTransform:{get:Ae.throwInstantiationError},shapeTransform:{get:Ae.throwInstantiationError},shape:{get:Ae.throwInstantiationError},minBounds:{get:Ae.throwInstantiationError},maxBounds:{get:Ae.throwInstantiationError},dimensions:{get:Ae.throwInstantiationError},paddingBefore:{get:Ae.throwInstantiationError},paddingAfter:{get:Ae.throwInstantiationError},names:{get:Ae.throwInstantiationError},types:{get:Ae.throwInstantiationError},componentTypes:{get:Ae.throwInstantiationError},minimumValues:{get:Ae.throwInstantiationError},maximumValues:{get:Ae.throwInstantiationError},maximumTileCount:{get:Ae.throwInstantiationError},availableLevels:{get:Ae.throwInstantiationError},keyframeCount:{get:Ae.throwInstantiationError},timeIntervalCollection:{get:Ae.throwInstantiationError}});k$.prototype.requestData=function(e){Ae.throwInstantiationError()};var Y$=k$;var Jdo=y(C(),1);function x_(){Ae.throwInstantiationError()}Object.defineProperties(x_.prototype,{orientedBoundingBox:{get:Ae.throwInstantiationError},boundingSphere:{get:Ae.throwInstantiationError},boundTransform:{get:Ae.throwInstantiationError},shapeTransform:{get:Ae.throwInstantiationError},shaderUniforms:{get:Ae.throwInstantiationError},shaderDefines:{get:Ae.throwInstantiationError},shaderMaximumIntersectionsLength:{get:Ae.throwInstantiationError}});x_.prototype.update=Ae.throwInstantiationError;x_.prototype.computeOrientedBoundingBoxForTile=Ae.throwInstantiationError;x_.prototype.computeOrientedBoundingBoxForSample=Ae.throwInstantiationError;x_.DefaultMinBounds=Ae.throwInstantiationError;x_.DefaultMaxBounds=Ae.throwInstantiationError;var O$=x_;var muo=y(C(),1);var b1t=new U,y1t=new U,C1t=new U,x1t=new U,eSe=new ce,LN=new Uint8Array(4);function tSe(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 e3(e,t){return{height:e,color:U.clone(t)}}function nSe(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 I1t(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 g=s[n],f=Z.clamp(g.height,Rd._minimumHeight,Rd._maximumHeight),b=U.clone(g.color,b1t);b.red*=b.alpha,b.green*=b.alpha,b.blue*=b.alpha,c.push(e3(f,b))}let d=!0,u=!0;for(n=0;n<a-1;n++){let g=c[n+0],f=c[n+1];d=d&&g.height<=f.height,u=u&&g.height>=f.height}u?c=c.reverse():d||Sp(c,function(g,f){return Z.sign(g.height-f.height)});let h=r.extendDownwards??!1,p=r.extendUpwards??!1;c.length===1&&!h&&!p&&(h=!0,p=!0),h&&c.splice(0,0,e3(Rd._minimumHeight,c[0].color)),p&&c.splice(c.length,0,e3(Rd._maximumHeight,c[c.length-1].color)),c=nSe(c),i.push(c)}return i}function _1t(e){let t=I1t(e),n=[],i=[],o;function r(d,u){n.push(e3(d,u))}function s(d,u,h){let p=U.multiplyByScalar(h,1-u.alpha,x1t);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,h=0;i=n,n=[];let p=d.length,g=i.length;for(;u<p||h<g;){let f=u<p?d[u]:void 0,b=u>0?d[u-1]:void 0,x=u<p-1?d[u+1]:void 0,I=h<g?i[h]:void 0,_=h>0?i[h-1]:void 0,E=h<g-1?i[h+1]:void 0;if(l(f)&&l(I)&&f.height===I.height){let S=l(E)&&I.height===E.height,R=!l(_),G=!l(E),B=l(x)&&f.height===x.height,w=!l(b),F=!l(x);S?B?(s(f.height,f.color,I.color),s(f.height,x.color,E.color)):w?(r(f.height,I.color),s(f.height,f.color,E.color)):F?(s(f.height,f.color,I.color),r(f.height,E.color)):(s(f.height,f.color,I.color),s(f.height,f.color,E.color)):R?B?(r(f.height,f.color),s(f.height,x.color,I.color)):F?(r(f.height,f.color),r(f.height,I.color)):(w||r(f.height,f.color),s(f.height,f.color,I.color)):G?B?(s(f.height,f.color,I.color),r(f.height,x.color)):w?(r(f.height,I.color),r(f.height,f.color)):F?s(f.height,f.color,I.color):(s(f.height,f.color,I.color),r(f.height,f.color)):B?(s(f.height,f.color,I.color),s(f.height,x.color,I.color)):w?(r(f.height,I.color),s(f.height,f.color,I.color)):F?(s(f.height,f.color,I.color),r(f.height,I.color)):s(f.height,f.color,I.color),u+=B?2:1,h+=S?2:1}else if(l(f)&&l(I)&&l(_)&&f.height<I.height){let S=tSe(f.height,_,I,C1t);l(b)?l(x)?s(f.height,f.color,S):(s(f.height,f.color,S),r(f.height,S)):(r(f.height,S),s(f.height,f.color,S)),u++}else if(l(I)&&l(f)&&l(b)&&I.height<f.height){let S=tSe(I.height,b,f,y1t);l(_)?l(E)?s(I.height,S,I.color):(s(I.height,S,I.color),r(I.height,S)):(r(I.height,S),s(I.height,S,I.color)),h++}else l(f)&&(!l(I)||f.height<I.height)?(l(I)&&!l(_)&&!l(x)?(r(f.height,f.color),r(f.height,Rd._emptyColor),r(I.height,Rd._emptyColor)):(!l(I)&&l(_)&&!l(b)&&(r(_.height,Rd._emptyColor),r(f.height,Rd._emptyColor)),r(f.height,f.color)),u++):l(I)&&(!l(f)||I.height<f.height)&&(r(I.height,I.color),h++)}}return nSe(n)}function Rd(e){let{scene:t,layers:n}=e??Y.EMPTY_OBJECT,{context:i}=t,o=_1t(n),r=o.length,s,a,c;if(!Rd._useFloatTexture(i)){a=Ye.UNSIGNED_BYTE,c=tt.RGBA,s=new Uint8Array(r*4);for(let g=0;g<r;g++)ce.packFloat(o[g].height,eSe),ce.pack(eSe,s,g*4)}else{a=Ye.FLOAT,c=i.webgl2?tt.RED:tt.LUMINANCE,s=new Float32Array(r);for(let g=0;g<r;g++)s[g]=o[g].height}let u=Wt.create({context:i,pixelFormat:c,pixelDatatype:a,source:{arrayBufferView:s,width:r,height:1},sampler:new sn({wrapS:Ln.CLAMP_TO_EDGE,wrapT:Ln.CLAMP_TO_EDGE,minificationFilter:en.NEAREST,magnificationFilter:pi.NEAREST})}),h=new Uint8Array(r*4);for(let g=0;g<r;g++)o[g].color.toBytes(LN),h[g*4+0]=LN[0],h[g*4+1]=LN[1],h[g*4+2]=LN[2],h[g*4+3]=LN[3];let p=Wt.create({context:i,pixelFormat:tt.RGBA,pixelDatatype:Ye.UNSIGNED_BYTE,source:{arrayBufferView:h,width:r,height:1},sampler:new sn({wrapS:Ln.CLAMP_TO_EDGE,wrapT:Ln.CLAMP_TO_EDGE,minificationFilter:en.LINEAR,magnificationFilter:pi.LINEAR})});return so.fromType("ElevationBand",{heights:u,colors:p})}Rd._useFloatTexture=function(e){return e.floatingPointTexture};Rd._maximumHeight=5906376425472;Rd._minimumHeight=-5906376425472;Rd._emptyColor=new U(0,0,0,0);var H$=Rd;var xuo=y(C(),1);async function E1t(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??Y.EMPTY_OBJECT,e.onlyUsingWithGoogleGeocoder||xt("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??d_.defaultApiKey;if(!l(n))return T1t(t);let i,o=d_.getDefaultCredit();l(o)&&(i=[o]);let r=new Ve({url:`${d_.mapTilesApiEndpoint}3dtiles/root.json`,queryParameters:{key:n},credits:i});return Ps.fromUrl(r,t)}var iSe={};async function T1t(e){let i=iSe[2275207];l(i)||(i=Nd.fromAssetId(2275207),iSe[2275207]=i);let o=await i;return Ps.fromUrl(o,e)}var z$=E1t;var Ruo=y(C(),1);async function S1t(e){let t=await Ps.fromIonAssetId(96188,e);e=e??Y.EMPTY_OBJECT;let n=e.style;if(!l(n)){let i=(e.defaultColor??U.WHITE).toCssColorString();n=new p_({color:`Boolean(\${feature['cesium#color']}) ? color(\${feature['cesium#color']}) : ${i}`})}return t.style=n,t}var K$=S1t;var Muo=y(C(),1);function L1t(e){e=e??Y.EMPTY_OBJECT;let t=[],n=e.geometry;(!l(n.attributes)||!l(n.primitiveType))&&(n=n.constructor.createGeometry(n));let i=n.attributes,o=X.clone(e.modelMatrix??X.IDENTITY),r=e.length??1e4;if(l(i.normal)&&t.push(new wt({geometry:Yn.createLineSegmentsForVectors(n,"normal",r),attributes:{color:new tn(1,0,0,1)},modelMatrix:o})),l(i.tangent)&&t.push(new wt({geometry:Yn.createLineSegmentsForVectors(n,"tangent",r),attributes:{color:new tn(0,1,0,1)},modelMatrix:o})),l(i.bitangent)&&t.push(new wt({geometry:Yn.createLineSegmentsForVectors(n,"bitangent",r),attributes:{color:new tn(0,0,1,1)},modelMatrix:o})),t.length>0)return new Nn({asynchronous:!1,geometryInstances:t,appearance:new yn({flat:!0,translucent:!1})})}var J$=L1t;var Nuo=y(C(),1),j$=`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 zuo=y(C(),1);function R1t(e){e=e??Y.EMPTY_OBJECT,this.typedArray=e.typedArray,this.width=e.width,this.height=e.height,this.pixelFormat=e.pixelFormat??tt.RGBA,this.pixelDatatype=e.pixelDatatype??Ye.UNSIGNED_BYTE;let t=e.url;typeof t=="string"&&(t=Ve.createIfNeeded(t)),this.resource=t;let i=e.repeat??!0?Ln.REPEAT:Ln.CLAMP_TO_EDGE;this.sampler=new sn({wrapS:i,wrapT:i,minificationFilter:e.minificationFilter,magnificationFilter:e.magnificationFilter,maximumAnisotropy:e.maximumAnisotropy})}var q$=R1t;var Juo=y(C(),1),V1t={FLOAT:"float",VEC2:"vec2",VEC3:"vec3",VEC4:"vec4",MAT2:"mat2",MAT3:"mat3",MAT4:"mat4"},$$=Object.freeze(V1t);var quo=y(C(),1),G1t={SIGX:"SIGX",SIGY:"SIGY",SIGZ:"SIGZ",VARX:"VARX",VARY:"VARY",VARZ:"VARZ",SIGR:"VARZ"},eee=Object.freeze(G1t);var tmo=y(C(),1);function Z1t(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: ${Kf(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 tee=Z1t;globalThis.CESIUM_VERSION="1.132";var cPo=y(C(),1);var vBo=y(C(),1);var WBo=y(C(),1);var SBo=y(C(),1),RN;typeof ko<"u"&&(RN=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(A,T){return A===null||typeof A in b?A===T:!1}function d(A,T){var L;return function(){L||(L=f.a.setTimeout(function(){L=e,A()},T))}}function u(A,T){var L;return function(){clearTimeout(L),L=f.a.setTimeout(A,T)}}function h(A,T){T&&T!=="change"?T==="beforeChange"?this.pc(A):this.gb(A,T):this.qc(A)}function p(A,T){T!==null&&T.s&&T.s()}function g(A,T){var L=this.qd,V=L[S];V.ra||(this.Qb&&this.mb[T]?(L.uc(T,A,this.mb[T]),this.mb[T]=null,--this.Qb):V.I[T]||L.uc(T,A,V.J?{da:A}:L.$c(A)),A.Ja&&A.gd())}var f=typeof s<"u"?s:{};f.b=function(A,T){for(var L=A.split("."),V=f,W=0;W<L.length-1;W++)V=V[L[W]];V[L[L.length-1]]=T},f.L=function(A,T,L){A[T]=L},f.version="3.5.1",f.b("version",f.version),f.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1},f.a=function(){function A(K,te){for(var q in K)W.call(K,q)&&te(q,K[q])}function T(K,te){if(te)for(var q in te)W.call(te,q)&&(K[q]=te[q]);return K}function L(K,te){return K.__proto__=te,K}function V(K,te,q,pe){var ye=K[te].match(H)||[];f.a.D(q.match(H),function(he){f.a.Na(ye,he,pe)}),K[te]=ye.join(" ")}var W=Object.prototype.hasOwnProperty,M={__proto__:[]}instanceof Array,Q=typeof Symbol=="function",N={},k={};N[i&&/Firefox\/2/i.test(i.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"],N.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" "),A(N,function(K,te){if(te.length)for(var q=0,pe=te.length;q<pe;q++)k[te[q]]=K});var v={propertychange:!0},O=n&&function(){for(var K=3,te=n.createElement("div"),q=te.getElementsByTagName("i");te.innerHTML="<!--[if gt IE "+ ++K+"]><i></i><![endif]-->",q[0];);return 4<K?K:e}(),H=/\S+/g,ee;return{Jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],D:function(K,te,q){for(var pe=0,ye=K.length;pe<ye;pe++)te.call(q,K[pe],pe,K)},A:typeof Array.prototype.indexOf=="function"?function(K,te){return Array.prototype.indexOf.call(K,te)}:function(K,te){for(var q=0,pe=K.length;q<pe;q++)if(K[q]===te)return q;return-1},Lb:function(K,te,q){for(var pe=0,ye=K.length;pe<ye;pe++)if(te.call(q,K[pe],pe,K))return K[pe];return e},Pa:function(K,te){var q=f.a.A(K,te);0<q?K.splice(q,1):q===0&&K.shift()},wc:function(K){var te=[];return K&&f.a.D(K,function(q){0>f.a.A(te,q)&&te.push(q)}),te},Mb:function(K,te,q){var pe=[];if(K)for(var ye=0,he=K.length;ye<he;ye++)pe.push(te.call(q,K[ye],ye));return pe},jb:function(K,te,q){var pe=[];if(K)for(var ye=0,he=K.length;ye<he;ye++)te.call(q,K[ye],ye)&&pe.push(K[ye]);return pe},Nb:function(K,te){if(te instanceof Array)K.push.apply(K,te);else for(var q=0,pe=te.length;q<pe;q++)K.push(te[q]);return K},Na:function(K,te,q){var pe=f.a.A(f.a.bc(K),te);0>pe?q&&K.push(te):q||K.splice(pe,1)},Ba:M,extend:T,setPrototypeOf:L,Ab:M?L:T,P:A,Ga:function(K,te,q){if(!K)return K;var pe={},ye;for(ye in K)W.call(K,ye)&&(pe[ye]=te.call(q,K[ye],ye,K));return pe},Tb:function(K){for(;K.firstChild;)f.removeNode(K.firstChild)},Yb:function(K){K=f.a.la(K);for(var te=(K[0]&&K[0].ownerDocument||n).createElement("div"),q=0,pe=K.length;q<pe;q++)te.appendChild(f.oa(K[q]));return te},Ca:function(K,te){for(var q=0,pe=K.length,ye=[];q<pe;q++){var he=K[q].cloneNode(!0);ye.push(te?f.oa(he):he)}return ye},va:function(K,te){if(f.a.Tb(K),te)for(var q=0,pe=te.length;q<pe;q++)K.appendChild(te[q])},Xc:function(K,te){var q=K.nodeType?[K]:K;if(0<q.length){for(var pe=q[0],ye=pe.parentNode,he=0,xe=te.length;he<xe;he++)ye.insertBefore(te[he],pe);for(he=0,xe=q.length;he<xe;he++)f.removeNode(q[he])}},Ua:function(K,te){if(K.length){for(te=te.nodeType===8&&te.parentNode||te;K.length&&K[0].parentNode!==te;)K.splice(0,1);for(;1<K.length&&K[K.length-1].parentNode!==te;)K.length--;if(1<K.length){var q=K[0],pe=K[K.length-1];for(K.length=0;q!==pe;)K.push(q),q=q.nextSibling;K.push(pe)}}return K},Zc:function(K,te){7>O?K.setAttribute("selected",te):K.selected=te},Db:function(K){return K===null||K===e?"":K.trim?K.trim():K.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(K,te){return K=K||"",te.length>K.length?!1:K.substring(0,te.length)===te},vd:function(K,te){if(K===te)return!0;if(K.nodeType===11)return!1;if(te.contains)return te.contains(K.nodeType!==1?K.parentNode:K);if(te.compareDocumentPosition)return(te.compareDocumentPosition(K)&16)==16;for(;K&&K!=te;)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(te){throw f.onError&&f.onError(te),te}}:K},setTimeout:function(K,te){return setTimeout(f.a.Ac(K),te)},Gc:function(K){setTimeout(function(){throw f.onError&&f.onError(K),K},0)},B:function(K,te,q){var pe=f.a.Ac(q);if(q=v[te],f.options.useOnlyNativeEvents||q||!o)if(q||typeof K.addEventListener!="function")if(typeof K.attachEvent<"u"){var ye=function(xe){pe.call(K,xe)},he="on"+te;K.attachEvent(he,ye),f.a.K.za(K,function(){K.detachEvent(he,ye)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else K.addEventListener(te,pe,!1);else ee||(ee=typeof o(K).on=="function"?"on":"bind"),o(K)[ee](te,pe)},Fb:function(K,te){if(!K||!K.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var q;if(f.a.R(K)==="input"&&K.type&&te.toLowerCase()=="click"?(q=K.type,q=q=="checkbox"||q=="radio"):q=!1,f.options.useOnlyNativeEvents||!o||q)if(typeof n.createEvent=="function")if(typeof K.dispatchEvent=="function")q=n.createEvent(k[te]||"HTMLEvents"),q.initEvent(te,!0,!0,t,0,0,0,0,0,!1,!1,!1,!1,0,K),K.dispatchEvent(q);else throw Error("The supplied element doesn't support dispatchEvent");else if(q&&K.click)K.click();else if(typeof K.fireEvent<"u")K.fireEvent("on"+te);else throw Error("Browser doesn't support triggering events");else o(K).trigger(te)},f:function(K){return f.O(K)?K():K},bc:function(K){return f.O(K)?K.v():K},Eb:function(K,te,q){var pe;te&&(typeof K.classList=="object"?(pe=K.classList[q?"add":"remove"],f.a.D(te.match(H),function(ye){pe.call(K.classList,ye)})):typeof K.className.baseVal=="string"?V(K.className,"baseVal",te,q):V(K,"className",te,q))},Bb:function(K,te){var q=f.a.f(te);(q===null||q===e)&&(q="");var pe=f.h.firstChild(K);!pe||pe.nodeType!=3||f.h.nextSibling(pe)?f.h.va(K,[K.ownerDocument.createTextNode(q)]):pe.data=q,f.a.Ad(K)},Yc:function(K,te){if(K.name=te,7>=O)try{var q=K.name.replace(/[&<>'"]/g,function(pe){return"&#"+pe.charCodeAt(0)+";"});K.mergeAttributes(n.createElement("<input name='"+q+"'/>"),!1)}catch{}},Ad:function(K){9<=O&&(K=K.nodeType==1?K:K.parentNode,K.style&&(K.style.zoom=K.style.zoom))},wd:function(K){if(O){var te=K.style.width;K.style.width=0,K.style.width=te}},Pd:function(K,te){K=f.a.f(K),te=f.a.f(te);for(var q=[],pe=K;pe<=te;pe++)q.push(pe);return q},la:function(K){for(var te=[],q=0,pe=K.length;q<pe;q++)te.push(K[q]);return te},Da:function(K){return Q?Symbol(K):K},Zd:O===6,$d:O===7,W:O,Lc:function(K,te){for(var q=f.a.la(K.getElementsByTagName("input")).concat(f.a.la(K.getElementsByTagName("textarea"))),pe=typeof te=="string"?function(xe){return xe.name===te}:function(xe){return te.test(xe.name)},ye=[],he=q.length-1;0<=he;he--)pe(q[he])&&ye.push(q[he]);return ye},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,te,q){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),te,q)},Od:function(K,te,q){q=q||{};var pe=q.params||{},ye=q.includeFields||this.Jc,he=K;if(typeof K=="object"&&f.a.R(K)==="form")for(var he=K.action,xe=ye.length-1;0<=xe;xe--)for(var Te=f.a.Lc(K,ye[xe]),Be=Te.length-1;0<=Be;Be--)pe[Te[Be].name]=Te[Be].value;te=f.a.f(te);var Le=n.createElement("form");Le.style.display="none",Le.action=he,Le.method="post";for(var De in te)K=n.createElement("input"),K.type="hidden",K.name=De,K.value=f.a.hc(f.a.f(te[De])),Le.appendChild(K);A(pe,function(Ue,je){var it=n.createElement("input");it.type="hidden",it.name=Ue,it.value=je,Le.appendChild(it)}),n.body.appendChild(Le),q.submitter?q.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(A){var T=this;if(arguments.length===1)return function(){return T.apply(A,arguments)};var L=Array.prototype.slice.call(arguments,1);return function(){var V=L.slice(0);return V.push.apply(V,arguments),T.apply(A,V)}}),f.a.g=new function(){var A=0,T="__ko__"+new Date().getTime(),L={},V,W;return f.a.W?(V=function(M,Q){var N=M[T];if(!N||N==="null"||!L[N]){if(!Q)return e;N=M[T]="ko"+A++,L[N]={}}return L[N]},W=function(M){var Q=M[T];return Q?(delete L[Q],M[T]=null,!0):!1}):(V=function(M,Q){var N=M[T];return!N&&Q&&(N=M[T]={}),N},W=function(M){return M[T]?(delete M[T],!0):!1}),{get:function(M,Q){var N=V(M,!1);return N&&N[Q]},set:function(M,Q,N){(M=V(M,N!==e))&&(M[Q]=N)},Ub:function(M,Q,N){return M=V(M,!0),M[Q]||(M[Q]=N)},clear:W,Z:function(){return A+++T}}},f.b("utils.domData",f.a.g),f.b("utils.domData.clear",f.a.g.clear),f.a.K=new function(){function A(Q,N){var k=f.a.g.get(Q,V);return k===e&&N&&(k=[],f.a.g.set(Q,V,k)),k}function T(Q){var N=A(Q,!1);if(N)for(var N=N.slice(0),k=0;k<N.length;k++)N[k](Q);f.a.g.clear(Q),f.a.K.cleanExternalData(Q),M[Q.nodeType]&&L(Q.childNodes,!0)}function L(Q,N){for(var k=[],v,O=0;O<Q.length;O++)if((!N||Q[O].nodeType===8)&&(T(k[k.length]=v=Q[O]),Q[O]!==v))for(;O--&&f.a.A(k,Q[O])==-1;);}var V=f.a.g.Z(),W={1:!0,8:!0,9:!0},M={1:!0,9:!0};return{za:function(Q,N){if(typeof N!="function")throw Error("Callback must be a function");A(Q,!0).push(N)},yb:function(Q,N){var k=A(Q,!1);k&&(f.a.Pa(k,N),k.length==0&&f.a.g.set(Q,V,e))},oa:function(Q){return f.u.G(function(){W[Q.nodeType]&&(T(Q),M[Q.nodeType]&&L(Q.getElementsByTagName("*")))}),Q},removeNode:function(Q){f.oa(Q),Q.parentNode&&Q.parentNode.removeChild(Q)},cleanExternalData:function(Q){o&&typeof o.cleanData=="function"&&o.cleanData([Q])}}},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 A=[0,"",""],T=[1,"<table>","</table>"],L=[3,"<table><tbody><tr>","</tr></tbody></table>"],V=[1,"<select multiple='multiple'>","</select>"],W={thead:T,tbody:T,tfoot:T,tr:[2,"<table><tbody>","</tbody></table>"],td:L,th:L,option:V,optgroup:V},M=8>=f.a.W;f.a.ua=function(Q,N){var k;if(o){if(o.parseHTML)k=o.parseHTML(Q,N)||[];else if((k=o.clean([Q],N))&&k[0]){for(var v=k[0];v.parentNode&&v.parentNode.nodeType!==11;)v=v.parentNode;v.parentNode&&v.parentNode.removeChild(v)}}else{(k=N)||(k=n);var v=k.parentWindow||k.defaultView||t,O=f.a.Db(Q).toLowerCase(),H=k.createElement("div"),ee;for(ee=(O=O.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&W[O[1]]||A,O=ee[0],ee="ignored<div>"+ee[1]+Q+ee[2]+"</div>",typeof v.innerShiv=="function"?H.appendChild(v.innerShiv(ee)):(M&&k.body.appendChild(H),H.innerHTML=ee,M&&H.parentNode.removeChild(H));O--;)H=H.lastChild;k=f.a.la(H.lastChild.childNodes)}return k},f.a.Md=function(Q,N){var k=f.a.ua(Q,N);return k.length&&k[0].parentElement||f.a.Yb(k)},f.a.fc=function(Q,N){if(f.a.Tb(Q),N=f.a.f(N),N!==null&&N!==e)if(typeof N!="string"&&(N=N.toString()),o)o(Q).html(N);else for(var k=f.a.ua(N,Q.ownerDocument),v=0;v<k.length;v++)Q.appendChild(k[v])}}(),f.b("utils.parseHtmlFragment",f.a.ua),f.b("utils.setHtml",f.a.fc),f.aa=function(){function A(L,V){if(L){if(L.nodeType==8){var W=f.aa.Uc(L.nodeValue);W!=null&&V.push({ud:L,Kd:W})}else if(L.nodeType==1)for(var W=0,M=L.childNodes,Q=M.length;W<Q;W++)A(M[W],V)}}var T={};return{Xb:function(L){if(typeof L!="function")throw Error("You can only pass a function to ko.memoization.memoize()");var V=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);return T[V]=L,"<!--[ko_memo:"+V+"]-->"},bd:function(L,V){var W=T[L];if(W===e)throw Error("Couldn't find any memo with ID "+L+". Perhaps it's already been unmemoized.");try{return W.apply(null,V||[]),!0}finally{delete T[L]}},cd:function(L,V){var W=[];A(L,W);for(var M=0,Q=W.length;M<Q;M++){var N=W[M].ud,k=[N];V&&f.a.Nb(k,V),f.aa.bd(W[M].Kd,k),N.nodeValue="",N.parentNode&&N.parentNode.removeChild(N)}},Uc:function(L){return(L=L.match(/^\[ko_memo\:(.*?)\]$/))?L[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 A(){if(W){for(var N=W,k=0,v;Q<W;)if(v=V[Q++]){if(Q>N){if(5e3<=++k){Q=W,f.a.Gc(Error("'Too much recursion' after processing "+k+" task groups."));break}N=W}try{v()}catch(O){f.a.Gc(O)}}}}function T(){A(),Q=W=V.length=0}var L,V=[],W=0,M=1,Q=0;return t.MutationObserver?L=function(N){var k=n.createElement("div");return new MutationObserver(N).observe(k,{attributes:!0}),function(){k.classList.toggle("foo")}}(T):L=n&&"onreadystatechange"in n.createElement("script")?function(N){var k=n.createElement("script");k.onreadystatechange=function(){k.onreadystatechange=null,n.documentElement.removeChild(k),k=null,N()},n.documentElement.appendChild(k)}:function(N){setTimeout(N,0)},{scheduler:L,zb:function(N){return W||f.na.scheduler(T),V[W++]=N,M++},cancel:function(N){N=N-(M-W),N>=Q&&N<W&&(V[N]=null)},resetForTesting:function(){var N=W-Q;return Q=W=V.length=0,N},Sd:A}}(),f.b("tasks",f.na),f.b("tasks.schedule",f.na.zb),f.b("tasks.runEarly",f.na.Sd),f.Ta={throttle:function(A,T){A.throttleEvaluation=T;var L=null;return f.$({read:A,write:function(V){clearTimeout(L),L=f.a.setTimeout(function(){A(V)},T)}})},rateLimit:function(A,T){var L,V,W;typeof T=="number"?L=T:(L=T.timeout,V=T.method),A.Hb=!1,W=typeof V=="function"?V:V=="notifyWhenChangesStop"?u:d,A.ub(function(M){return W(M,L,T)})},deferred:function(A,T){if(T!==!0)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");A.Hb||(A.Hb=!0,A.ub(function(L){var V,W=!1;return function(){if(!W){f.na.cancel(V),V=f.na.zb(L);try{W=!0,A.notifySubscribers(e,"dirty")}finally{W=!1}}}}))},notify:function(A,T){A.equalityComparer=T=="always"?null:c}};var b={undefined:1,boolean:1,number:1,string:1};f.b("extenders",f.Ta),f.ic=function(A,T,L){this.da=A,this.lc=T,this.mc=L,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(A){this.Jb=A,f.a.K.za(A,this.fb=this.s.bind(this))},f.T=function(){f.a.Ab(this,x),x.qb(this)};var x={qb:function(A){A.U={change:[]},A.sc=1},subscribe:function(A,T,L){var V=this;L=L||"change";var W=new f.ic(V,T?A.bind(T):A,function(){f.a.Pa(V.U[L],W),V.hb&&V.hb(L)});return V.Qa&&V.Qa(L),V.U[L]||(V.U[L]=[]),V.U[L].push(W),W},notifySubscribers:function(A,T){if(T=T||"change",T==="change"&&this.Gb(),this.Wa(T)){var L=T==="change"&&this.ed||this.U[T].slice(0);try{f.u.xc();for(var V=0,W;W=L[V];++V)W.Ib||W.lc(A)}finally{f.u.end()}}},ob:function(){return this.sc},Dd:function(A){return this.ob()!==A},Gb:function(){++this.sc},ub:function(A){var T=this,L=f.O(T),V,W,M,Q,N;T.gb||(T.gb=T.notifySubscribers,T.notifySubscribers=h);var k=A(function(){T.Ja=!1,L&&Q===T&&(Q=T.nc?T.nc():T());var v=W||N&&T.sb(M,Q);N=W=V=!1,v&&T.gb(M=Q)});T.qc=function(v,O){O&&T.Ja||(N=!O),T.ed=T.U.change.slice(0),T.Ja=V=!0,Q=v,k()},T.pc=function(v){V||(M=v,T.gb(v,"beforeChange"))},T.rc=function(){N=!0},T.gd=function(){T.sb(M,T.v(!0))&&(W=!0)}},Wa:function(A){return this.U[A]&&this.U[A].length},Bd:function(A){if(A)return this.U[A]&&this.U[A].length||0;var T=0;return f.a.P(this.U,function(L,V){L!=="dirty"&&(T+=V.length)}),T},sb:function(A,T){return!this.equalityComparer||!this.equalityComparer(A,T)},toString:function(){return"[object Object]"},extend:function(A){var T=this;return A&&f.a.P(A,function(L,V){var W=f.Ta[L];typeof W=="function"&&(T=W(T,V)||T)}),T}};f.L(x,"init",x.qb),f.L(x,"subscribe",x.subscribe),f.L(x,"extend",x.extend),f.L(x,"getSubscriptionsCount",x.Bd),f.a.Ba&&f.a.setPrototypeOf(x,Function.prototype),f.T.fn=x,f.Qc=function(A){return A!=null&&typeof A.subscribe=="function"&&typeof A.notifySubscribers=="function"},f.b("subscribable",f.T),f.b("isSubscribable",f.Qc),f.S=f.u=function(){function A(M){L.push(V),V=M}function T(){V=L.pop()}var L=[],V,W=0;return{xc:A,end:T,cc:function(M){if(V){if(!f.Qc(M))throw Error("Only subscribable things can act as dependencies");V.od.call(V.pd,M,M.fd||(M.fd=++W))}},G:function(M,Q,N){try{return A(),M.apply(Q,N||[])}finally{T()}},qa:function(){if(V)return V.o.qa()},Va:function(){if(V)return V.o.Va()},Ya:function(){if(V)return V.Ya},o:function(){if(V)return V.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 I=f.a.Da("_latestValue");f.ta=function(A){function T(){return 0<arguments.length?(T.sb(T[I],arguments[0])&&(T.ya(),T[I]=arguments[0],T.xa()),this):(f.u.cc(T),T[I])}return T[I]=A,f.a.Ba||f.a.extend(T,f.T.fn),f.T.fn.qb(T),f.a.Ab(T,_),f.options.deferUpdates&&f.Ta.deferred(T,!0),T};var _={equalityComparer:c,v:function(){return this[I]},xa:function(){this.notifySubscribers(this[I],"spectate"),this.notifySubscribers(this[I])},ya:function(){this.notifySubscribers(this[I],"beforeChange")}};f.a.Ba&&f.a.setPrototypeOf(_,f.T.fn);var E=f.ta.Ma="__ko_proto__";_[E]=f.ta,f.O=function(A){if((A=typeof A=="function"&&A[E])&&A!==_[E]&&A!==f.o.fn[E])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!A},f.Za=function(A){return typeof A=="function"&&(A[E]===_[E]||A[E]===f.o.fn[E]&&A.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",_),f.L(_,"peek",_.v),f.L(_,"valueHasMutated",_.xa),f.L(_,"valueWillMutate",_.ya),f.Ha=function(A){if(A=A||[],typeof A!="object"||!("length"in A))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");return A=f.ta(A),f.a.Ab(A,f.Ha.fn),A.extend({trackArrayChanges:!0})},f.Ha.fn={remove:function(A){for(var T=this.v(),L=[],V=typeof A!="function"||f.O(A)?function(Q){return Q===A}:A,W=0;W<T.length;W++){var M=T[W];if(V(M)){if(L.length===0&&this.ya(),T[W]!==M)throw Error("Array modified during remove; cannot remove item");L.push(M),T.splice(W,1),W--}}return L.length&&this.xa(),L},removeAll:function(A){if(A===e){var T=this.v(),L=T.slice(0);return this.ya(),T.splice(0,T.length),this.xa(),L}return A?this.remove(function(V){return 0<=f.a.A(A,V)}):[]},destroy:function(A){var T=this.v(),L=typeof A!="function"||f.O(A)?function(M){return M===A}:A;this.ya();for(var V=T.length-1;0<=V;V--){var W=T[V];L(W)&&(W._destroy=!0)}this.xa()},destroyAll:function(A){return A===e?this.destroy(function(){return!0}):A?this.destroy(function(T){return 0<=f.a.A(A,T)}):[]},indexOf:function(A){var T=this();return f.a.A(T,A)},replace:function(A,T){var L=this.indexOf(A);0<=L&&(this.ya(),this.v()[L]=T,this.xa())},sorted:function(A){var T=this().slice(0);return A?T.sort(A):T.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(A){f.Ha.fn[A]=function(){var T=this.v();this.ya(),this.zc(T,A,arguments);var L=T[A].apply(T,arguments);return this.xa(),L===T?this:L}}),f.a.D(["slice"],function(A){f.Ha.fn[A]=function(){var T=this();return T[A].apply(T,arguments)}}),f.Pc=function(A){return f.O(A)&&typeof A.remove=="function"&&typeof A.push=="function"},f.b("observableArray",f.Ha),f.b("isObservableArray",f.Pc),f.Ta.trackArrayChanges=function(A,T){function L(){function H(){if(N){var ee=[].concat(A.v()||[]),K;A.Wa("arrayChange")&&((!W||1<N)&&(W=f.a.Pb(k,ee,A.Ob)),K=W),k=ee,W=null,N=0,K&&K.length&&A.notifySubscribers(K,"arrayChange")}}V?H():(V=!0,Q=A.subscribe(function(){++N},null,"spectate"),k=[].concat(A.v()||[]),W=null,M=A.subscribe(H))}if(A.Ob={},T&&typeof T=="object"&&f.a.extend(A.Ob,T),A.Ob.sparse=!0,!A.zc){var V=!1,W=null,M,Q,N=0,k,v=A.Qa,O=A.hb;A.Qa=function(H){v&&v.call(A,H),H==="arrayChange"&&L()},A.hb=function(H){O&&O.call(A,H),H!=="arrayChange"||A.Wa("arrayChange")||(M&&M.s(),Q&&Q.s(),Q=M=null,V=!1,k=e)},A.zc=function(H,ee,K){function te(Le,De,Ue){return q[q.length]={status:Le,value:De,index:Ue}}if(V&&!N){var q=[],pe=H.length,ye=K.length,he=0;switch(ee){case"push":he=pe;case"unshift":for(ee=0;ee<ye;ee++)te("added",K[ee],he+ee);break;case"pop":he=pe-1;case"shift":pe&&te("deleted",H[he],he);break;case"splice":ee=Math.min(Math.max(0,0>K[0]?pe+K[0]:K[0]),pe);for(var pe=ye===1?pe:Math.min(ee+(K[1]||0),pe),ye=ee+ye-2,he=Math.max(pe,ye),xe=[],Te=[],Be=2;ee<he;++ee,++Be)ee<pe&&Te.push(te("deleted",H[ee],ee)),ee<ye&&xe.push(te("added",K[Be],ee));f.a.Kc(Te,xe);break;default:return}W=q}}}};var S=f.a.Da("_state");f.o=f.$=function(A,T,L){function V(){if(0<arguments.length){if(typeof W=="function")W.apply(M.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 M.ra||f.u.cc(V),(M.ka||M.J&&V.Xa())&&V.ha(),M.X}if(typeof A=="object"?L=A:(L=L||{},A&&(L.read=A)),typeof L.read!="function")throw Error("Pass a function that returns the value of the ko.computed");var W=L.write,M={X:e,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:L.read,nb:T||L.owner,l:L.disposeWhenNodeIsRemoved||L.l||null,Sa:L.disposeWhen||L.Sa,Rb:null,I:{},V:0,Ic:null};return V[S]=M,V.Nc=typeof W=="function",f.a.Ba||f.a.extend(V,f.T.fn),f.T.fn.qb(V),f.a.Ab(V,R),L.pure?(M.wb=!0,M.J=!0,f.a.extend(V,G)):L.deferEvaluation&&f.a.extend(V,B),f.options.deferUpdates&&f.Ta.deferred(V,!0),M.l&&(M.jc=!0,M.l.nodeType||(M.l=null)),M.J||L.deferEvaluation||V.ha(),M.l&&V.ja()&&f.a.K.za(M.l,M.Rb=function(){V.s()}),V};var R={equalityComparer:c,qa:function(){return this[S].V},Va:function(){var A=[];return f.a.P(this[S].I,function(T,L){A[L.Ka]=L.da}),A},Vb:function(A){if(!this[S].V)return!1;var T=this.Va();return f.a.A(T,A)!==-1?!0:!!f.a.Lb(T,function(L){return L.Vb&&L.Vb(A)})},uc:function(A,T,L){if(this[S].wb&&T===this)throw Error("A 'pure' computed must not be called recursively");this[S].I[A]=L,L.Ka=this[S].V++,L.La=T.ob()},Xa:function(){var A,T,L=this[S].I;for(A in L)if(Object.prototype.hasOwnProperty.call(L,A)&&(T=L[A],this.Ia&&T.da.Ja||T.da.Dd(T.La)))return!0},Jd:function(){this.Ia&&!this[S].rb&&this.Ia(!1)},ja:function(){var A=this[S];return A.ka||0<A.V},Rd:function(){this.Ja?this[S].ka&&(this[S].sa=!0):this.Hc()},$c:function(A){if(A.Hb){var T=A.subscribe(this.Jd,this,"dirty"),L=A.subscribe(this.Rd,this);return{da:A,s:function(){T.s(),L.s()}}}return A.subscribe(this.Hc,this)},Hc:function(){var A=this,T=A.throttleEvaluation;T&&0<=T?(clearTimeout(this[S].Ic),this[S].Ic=f.a.setTimeout(function(){A.ha(!0)},T)):A.Ia?A.Ia(!0):A.ha(!0)},ha:function(A){var T=this[S],L=T.Sa,V=!1;if(!T.rb&&!T.ra){if(T.l&&!f.a.Sb(T.l)||L&&L()){if(!T.jc){this.s();return}}else T.jc=!1;T.rb=!0;try{V=this.zd(A)}finally{T.rb=!1}return V}},zd:function(A){var T=this[S],V=!1,L=T.wb?e:!T.V,V={qd:this,mb:T.I,Qb:T.V};f.u.xc({pd:V,od:g,o:this,Ya:L}),T.I={},T.V=0;var W=this.yd(T,V);return T.V?V=this.sb(T.X,W):(this.s(),V=!0),V&&(T.J?this.Gb():this.notifySubscribers(T.X,"beforeChange"),T.X=W,this.notifySubscribers(T.X,"spectate"),!T.J&&A&&this.notifySubscribers(T.X),this.rc&&this.rc()),L&&this.notifySubscribers(T.X,"awake"),V},yd:function(A,T){try{var L=A.Wc;return A.nb?L.call(A.nb):L()}finally{f.u.end(),T.Qb&&!A.J&&f.a.P(T.mb,p),A.sa=A.ka=!1}},v:function(A){var T=this[S];return(T.ka&&(A||!T.V)||T.J&&this.Xa())&&this.ha(),T.X},ub:function(A){f.T.fn.ub.call(this,A),this.nc=function(){return this[S].J||(this[S].sa?this.ha():this[S].ka=!1),this[S].X},this.Ia=function(T){this.pc(this[S].X),this[S].ka=!0,T&&(this[S].sa=!0),this.qc(this,!T)}},s:function(){var A=this[S];!A.J&&A.I&&f.a.P(A.I,function(T,L){L.s&&L.s()}),A.l&&A.Rb&&f.a.K.yb(A.l,A.Rb),A.I=e,A.V=0,A.ra=!0,A.sa=!1,A.ka=!1,A.J=!1,A.l=e,A.Sa=e,A.Wc=e,this.Nc||(A.nb=e)}},G={Qa:function(A){var T=this,L=T[S];if(!L.ra&&L.J&&A=="change"){if(L.J=!1,L.sa||T.Xa())L.I=null,L.V=0,T.ha()&&T.Gb();else{var V=[];f.a.P(L.I,function(W,M){V[M.Ka]=W}),f.a.D(V,function(W,M){var Q=L.I[W],N=T.$c(Q.da);N.Ka=M,N.La=Q.La,L.I[W]=N}),T.Xa()&&T.ha()&&T.Gb()}L.ra||T.notifySubscribers(L.X,"awake")}},hb:function(A){var T=this[S];T.ra||A!="change"||this.Wa("change")||(f.a.P(T.I,function(L,V){V.s&&(T.I[L]={da:V.da,Ka:V.Ka,La:V.La},V.s())}),T.J=!0,this.notifySubscribers(e,"asleep"))},ob:function(){var A=this[S];return A.J&&(A.sa||this.Xa())&&this.ha(),f.T.fn.ob.call(this)}},B={Qa:function(A){A!="change"&&A!="beforeChange"||this.v()}};f.a.Ba&&f.a.setPrototypeOf(R,f.T.fn);var w=f.ta.Ma;R[w]=f.o,f.Oc=function(A){return typeof A=="function"&&A[w]===R[w]},f.Fd=function(A){return f.Oc(A)&&A[S]&&A[S].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",R),f.L(R,"peek",R.v),f.L(R,"dispose",R.s),f.L(R,"isActive",R.ja),f.L(R,"getDependenciesCount",R.qa),f.L(R,"getDependencies",R.Va),f.xb=function(A,T){return typeof A=="function"?f.o(A,T,{pure:!0}):(A=f.a.extend({},A),A.pure=!0,f.o(A,T))},f.b("pureComputed",f.xb),function(){function A(V,W,M){if(M=M||new L,V=W(V),typeof V!="object"||V===null||V===e||V instanceof RegExp||V instanceof Date||V instanceof String||V instanceof Number||V instanceof Boolean)return V;var Q=V instanceof Array?[]:{};return M.save(V,Q),T(V,function(N){var k=W(V[N]);switch(typeof k){case"boolean":case"number":case"string":case"function":Q[N]=k;break;case"object":case"undefined":var v=M.get(k);Q[N]=v!==e?v:A(k,W,M)}}),Q}function T(V,W){if(V instanceof Array){for(var M=0;M<V.length;M++)W(M);typeof V.toJSON=="function"&&W("toJSON")}else for(M in V)W(M)}function L(){this.keys=[],this.values=[]}f.ad=function(V){if(arguments.length==0)throw Error("When calling ko.toJS, pass the object you want to convert.");return A(V,function(W){for(var M=0;f.O(W)&&10>M;M++)W=W();return W})},f.toJSON=function(V,W,M){return V=f.ad(V),f.a.hc(V,W,M)},L.prototype={constructor:L,save:function(V,W){var M=f.a.A(this.keys,V);0<=M?this.values[M]=W:(this.keys.push(V),this.values.push(W))},get:function(V){return V=f.a.A(this.keys,V),0<=V?this.values[V]:e}}}(),f.b("toJS",f.ad),f.b("toJSON",f.toJSON),f.Wd=function(A,T,L){function V(W){var M=f.xb(A,L).extend({ma:"always"}),Q=M.subscribe(function(N){N&&(Q.s(),W(N))});return M.notifySubscribers(M.v()),Q}return typeof Promise!="function"||T?V(T.bind(L)):new Promise(V)},f.b("when",f.Wd),function(){f.w={M:function(A){switch(f.a.R(A)){case"option":return A.__ko__hasDomDataOptionValue__===!0?f.a.g.get(A,f.c.options.$b):7>=f.a.W?A.getAttributeNode("value")&&A.getAttributeNode("value").specified?A.value:A.text:A.value;case"select":return 0<=A.selectedIndex?f.w.M(A.options[A.selectedIndex]):e;default:return A.value}},cb:function(A,T,L){switch(f.a.R(A)){case"option":typeof T=="string"?(f.a.g.set(A,f.c.options.$b,e),"__ko__hasDomDataOptionValue__"in A&&delete A.__ko__hasDomDataOptionValue__,A.value=T):(f.a.g.set(A,f.c.options.$b,T),A.__ko__hasDomDataOptionValue__=!0,A.value=typeof T=="number"?T:"");break;case"select":(T===""||T===null)&&(T=e);for(var V=-1,W=0,M=A.options.length,Q;W<M;++W)if(Q=f.w.M(A.options[W]),Q==T||Q===""&&T===e){V=W;break}(L||0<=V||T===e&&1<A.size)&&(A.selectedIndex=V,f.a.W===6&&f.a.setTimeout(function(){A.selectedIndex=V},0));break;default:(T===null||T===e)&&(T=""),A.value=T}}}}(),f.b("selectExtensions",f.w),f.b("selectExtensions.readValue",f.w.M),f.b("selectExtensions.writeValue",f.w.cb),f.m=function(){function A(N){N=f.a.Db(N),N.charCodeAt(0)===123&&(N=N.slice(1,-1)),N+=` ,`;var k=[],v=N.match(V),O,H=[],ee=0;if(1<v.length){for(var K=0,te;te=v[K];++K){var q=te.charCodeAt(0);if(q===44){if(0>=ee){k.push(O&&H.length?{key:O,value:H.join("")}:{unknown:O||H.join("")}),O=ee=0,H=[];continue}}else if(q===58){if(!ee&&!O&&H.length===1){O=H.pop();continue}}else{if(q===47&&1<te.length&&(te.charCodeAt(1)===47||te.charCodeAt(1)===42))continue;q===47&&K&&1<te.length?(q=v[K-1].match(W))&&!M[q[0]]&&(N=N.substr(N.indexOf(te)+1),v=N.match(V),K=-1,te="/"):q===40||q===123||q===91?++ee:q===41||q===125||q===93?--ee:O||H.length||q!==34&&q!==39||(te=te.slice(1,-1))}H.push(te)}if(0<ee)throw Error("Unbalanced parentheses, braces, or brackets")}return k}var T=["true","false","null","undefined"],L=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,V=RegExp(`"(?:\\\\.|[^"])*"|'(?:\\\\.|[^'])*'|\`(?:\\\\.|[^\`])*\`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.* |/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,"'\`{}()/:[\\]]*[^\\s,"'\`{}()/:[\\]]|[^\\s]`,"g"),W=/[\])"'A-Za-z0-9_$]+$/,M={in:1,return:1,typeof:1},Q={};return{Ra:[],wa:Q,ac:A,vb:function(N,k){function v(q,pe){var ye;if(!K){var he=f.getBindingHandler(q);if(he&&he.preprocess&&!(pe=he.preprocess(pe,q,v)))return;(he=Q[q])&&(ye=pe,0<=f.a.A(T,ye)?ye=!1:(he=ye.match(L),ye=he===null?!1:he[1]?"Object("+he[1]+")"+he[2]:ye),he=ye),he&&H.push("'"+(typeof Q[q]=="string"?Q[q]:q)+"':function(_z){"+ye+"=_z}")}ee&&(pe="function(){return "+pe+" }"),O.push("'"+q+"':"+pe)}k=k||{};var O=[],H=[],ee=k.valueAccessors,K=k.bindingParams,te=typeof N=="string"?A(N):N;return f.a.D(te,function(q){v(q.key||q.unknown,q.value)}),H.length&&v("_ko_property_writers","{"+H.join(",")+" }"),O.join(",")},Id:function(N,k){for(var v=0;v<N.length;v++)if(N[v].key==k)return!0;return!1},eb:function(N,k,v,O,H){N&&f.O(N)?!f.Za(N)||H&&N.v()===O||N(O):(N=k.get("_ko_property_writers"))&&N[v]&&N[v](O)}}}(),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 A(v){return v.nodeType==8&&M.test(W?v.text:v.nodeValue)}function T(v){return v.nodeType==8&&Q.test(W?v.text:v.nodeValue)}function L(v,O){for(var H=v,ee=1,K=[];H=H.nextSibling;){if(T(H)&&(f.a.g.set(H,k,!0),ee--,ee===0))return K;K.push(H),A(H)&&ee++}if(!O)throw Error("Cannot find closing comment tag to match: "+v.nodeValue);return null}function V(v,O){var H=L(v,O);return H?0<H.length?H[H.length-1].nextSibling:v.nextSibling:null}var W=n&&n.createComment("test").text==="<!--test-->",M=W?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,Q=W?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,N={ul:!0,ol:!0},k="__ko_matchedEndComment__";f.h={ea:{},childNodes:function(v){return A(v)?L(v):v.childNodes},Ea:function(v){if(A(v)){v=f.h.childNodes(v);for(var O=0,H=v.length;O<H;O++)f.removeNode(v[O])}else f.a.Tb(v)},va:function(v,O){if(A(v)){f.h.Ea(v);for(var H=v.nextSibling,ee=0,K=O.length;ee<K;ee++)H.parentNode.insertBefore(O[ee],H)}else f.a.va(v,O)},Vc:function(v,O){var H;A(v)?(H=v.nextSibling,v=v.parentNode):H=v.firstChild,H?O!==H&&v.insertBefore(O,H):v.appendChild(O)},Wb:function(v,O,H){H?(H=H.nextSibling,A(v)&&(v=v.parentNode),H?O!==H&&v.insertBefore(O,H):v.appendChild(O)):f.h.Vc(v,O)},firstChild:function(v){if(A(v))return!v.nextSibling||T(v.nextSibling)?null:v.nextSibling;if(v.firstChild&&T(v.firstChild))throw Error("Found invalid end comment, as the first child of "+v);return v.firstChild},nextSibling:function(v){if(A(v)&&(v=V(v)),v.nextSibling&&T(v.nextSibling)){var O=v.nextSibling;if(T(O)&&!f.a.g.get(O,k))throw Error("Found end comment without a matching opening comment, as child of "+v);return null}return v.nextSibling},Cd:A,Vd:function(v){return(v=(W?v.text:v.nodeValue).match(M))?v[1]:null},Sc:function(v){if(N[f.a.R(v)]){var O=v.firstChild;if(O)do if(O.nodeType===1){var H;H=O.firstChild;var ee=null;if(H)do if(ee)ee.push(H);else if(A(H)){var K=V(H,!0);K?H=K:ee=[H]}else T(H)&&(ee=[H]);while(H=H.nextSibling);if(H=ee)for(ee=O.nextSibling,K=0;K<H.length;K++)ee?v.insertBefore(H[K],ee):v.appendChild(H[K])}while(O=O.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(A){switch(A.nodeType){case 1:return A.getAttribute("data-bind")!=null||f.j.getComponentNameForNode(A);case 8:return f.h.Cd(A);default:return!1}},getBindings:function(A,T){var L=this.getBindingsString(A,T),L=L?this.parseBindingsString(L,T,A):null;return f.j.tc(L,A,T,!1)},getBindingAccessors:function(A,T){var L=this.getBindingsString(A,T),L=L?this.parseBindingsString(L,T,A,{valueAccessors:!0}):null;return f.j.tc(L,A,T,!0)},getBindingsString:function(A){switch(A.nodeType){case 1:return A.getAttribute("data-bind");case 8:return f.h.Vd(A);default:return null}},parseBindingsString:function(A,T,L,V){try{var W=this.nd,M=A+(V&&V.valueAccessors||""),Q;if(!(Q=W[M])){var N,k="with($context){with($data||{}){return{"+f.m.vb(A,V)+"}}}";N=new Function("$context","$element",k),Q=W[M]=N}return Q(T,L)}catch(v){throw v.message=`Unable to parse bindings. Bindings value: `+A+` Message: `+v.message,v}}}),f.ga.instance=new f.ga}(),f.b("bindingProvider",f.ga),function(){function A(he){var xe=(he=f.a.g.get(he,ye))&&he.N;xe&&(he.N=null,xe.Tc())}function T(he,xe,Te){this.node=he,this.yc=xe,this.kb=[],this.H=!1,xe.N||f.a.K.za(he,A),Te&&Te.N&&(Te.N.kb.push(he),this.Kb=Te)}function L(he){return function(){return he}}function V(he){return he()}function W(he){return f.a.Ga(f.u.G(he),function(xe,Te){return function(){return he()[Te]}})}function M(he,xe,Te){return typeof he=="function"?W(he.bind(null,xe,Te)):f.a.Ga(he,L)}function Q(he,xe){return W(this.getBindings.bind(this,he,xe))}function N(he,xe){var Te=f.h.firstChild(xe);if(Te){var Be,Le=f.ga.instance,De=Le.preprocessNode;if(De){for(;Be=Te;)Te=f.h.nextSibling(Be),De.call(Le,Be);Te=f.h.firstChild(xe)}for(;Be=Te;)Te=f.h.nextSibling(Be),k(he,Be)}f.i.ma(xe,f.i.H)}function k(he,xe){var Te=he,Be=xe.nodeType===1;Be&&f.h.Sc(xe),(Be||f.ga.instance.nodeHasBindings(xe))&&(Te=O(xe,null,he).bindingContextForDescendants),Te&&!q[f.a.R(xe)]&&N(Te,xe)}function v(he){var xe=[],Te={},Be=[];return f.a.P(he,function Le(De){if(!Te[De]){var Ue=f.getBindingHandler(De);Ue&&(Ue.after&&(Be.push(De),f.a.D(Ue.after,function(je){if(he[je]){if(f.a.A(Be,je)!==-1)throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+Be.join(", "));Le(je)}}),Be.length--),xe.push({key:De,Mc:Ue})),Te[De]=!0}}),xe}function O(he,xe,Te){var Be=f.a.g.Ub(he,ye,{}),Le=Be.hd;if(!xe){if(Le)throw Error("You cannot apply bindings multiple times to the same element.");Be.hd=!0}Le||(Be.context=Te),Be.Zb||(Be.Zb={});var De;if(xe&&typeof xe!="function")De=xe;else{var Ue=f.ga.instance,je=Ue.getBindingAccessors||Q,it=f.$(function(){return(De=xe?xe(Te,he):je.call(Ue,he,Te))&&(Te[ee]&&Te[ee](),Te[te]&&Te[te]()),De},null,{l:he});De&&it.ja()||(it=null)}var nn=Te,rt;if(De){var rn=function(){return f.a.Ga(it?it():De,V)},Jt=it?function(Xt){return function(){return V(it()[Xt])}}:function(Xt){return De[Xt]};rn.get=function(Xt){return De[Xt]&&V(Jt(Xt))},rn.has=function(Xt){return Xt in De},f.i.H in De&&f.i.subscribe(he,f.i.H,function(){var Xt=(0,De[f.i.H])();if(Xt){var Li=f.h.childNodes(he);Li.length&&Xt(Li,f.Ec(Li[0]))}}),f.i.pa in De&&(nn=f.i.Cb(he,Te),f.i.subscribe(he,f.i.pa,function(){var Xt=(0,De[f.i.pa])();Xt&&f.h.firstChild(he)&&Xt(he)})),Be=v(De),f.a.D(Be,function(Xt){var Li=Xt.Mc.init,bi=Xt.Mc.update,vt=Xt.key;if(he.nodeType===8&&!f.h.ea[vt])throw Error("The binding '"+vt+"' cannot be used with virtual elements");try{typeof Li=="function"&&f.u.G(function(){var Rt=Li(he,Jt(vt),rn,nn.$data,nn);if(Rt&&Rt.controlsDescendantBindings){if(rt!==e)throw Error("Multiple bindings ("+rt+" and "+vt+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");rt=vt}}),typeof bi=="function"&&f.$(function(){bi(he,Jt(vt),rn,nn.$data,nn)},null,{l:he})}catch(Rt){throw Rt.message='Unable to process binding "'+vt+": "+De[vt]+`" Message: `+Rt.message,Rt}})}return Be=rt===e,{shouldBindDescendants:Be,bindingContextForDescendants:Be&&nn}}function H(he,xe){return he&&he instanceof f.fa?he:new f.fa(he,e,e,xe)}var ee=f.a.Da("_subscribable"),K=f.a.Da("_ancestorBindingInfo"),te=f.a.Da("_dataDependency");f.c={};var q={script:!0,textarea:!0,template:!0};f.getBindingHandler=function(he){return f.c[he]};var pe={};f.fa=function(he,xe,Te,Be,Le){function De(){var Jt=nn?it():it,Xt=f.a.f(Jt);return xe?(f.a.extend(Ue,xe),K in xe&&(Ue[K]=xe[K])):(Ue.$parents=[],Ue.$root=Xt,Ue.ko=f),Ue[ee]=rt,je?Xt=Ue.$data:(Ue.$rawData=Jt,Ue.$data=Xt),Te&&(Ue[Te]=Xt),Be&&Be(Ue,xe,Xt),xe&&xe[ee]&&!f.S.o().Vb(xe[ee])&&xe[ee](),rn&&(Ue[te]=rn),Ue.$data}var Ue=this,je=he===pe,it=je?e:he,nn=typeof it=="function"&&!f.O(it),rt,rn=Le&&Le.dataDependency;Le&&Le.exportDependencies?De():(rt=f.xb(De),rt.v(),rt.ja()?rt.equalityComparer=null:Ue[ee]=e)},f.fa.prototype.createChildContext=function(he,xe,Te,Be){if(!Be&&xe&&typeof xe=="object"&&(Be=xe,xe=Be.as,Te=Be.extend),xe&&Be&&Be.noChildContext){var Le=typeof he=="function"&&!f.O(he);return new f.fa(pe,this,null,function(De){Te&&Te(De),De[xe]=Le?he():he},Be)}return new f.fa(he,this,xe,function(De,Ue){De.$parentContext=Ue,De.$parent=Ue.$data,De.$parents=(Ue.$parents||[]).slice(0),De.$parents.unshift(De.$parent),Te&&Te(De)},Be)},f.fa.prototype.extend=function(he,xe){return new f.fa(pe,this,null,function(Te){f.a.extend(Te,typeof he=="function"?he(Te):he)},xe)};var ye=f.a.g.Z();T.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)},T.prototype.sd=function(he){f.a.Pa(this.kb,he),!this.kb.length&&this.H&&this.Cc()},T.prototype.Cc=function(){this.H=!0,this.yc.N&&!this.kb.length&&(this.yc.N=null,f.a.K.yb(this.node,A),f.i.ma(this.node,f.i.pa),this.Tc())},f.i={H:"childrenComplete",pa:"descendantsComplete",subscribe:function(he,xe,Te,Be,Le){var De=f.a.g.Ub(he,ye,{});return De.Fa||(De.Fa=new f.T),Le&&Le.notifyImmediately&&De.Zb[xe]&&f.u.G(Te,Be,[he]),De.Fa.subscribe(Te,Be,xe)},ma:function(he,xe){var Te=f.a.g.get(he,ye);if(Te&&(Te.Zb[xe]=!0,Te.Fa&&Te.Fa.notifySubscribers(he,xe),xe==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(he,xe){var Te=f.a.g.Ub(he,ye,{});return Te.N||(Te.N=new T(he,Te,xe[K])),xe[K]==Te?xe:xe.extend(function(Be){Be[K]=Te})}},f.Td=function(he){return(he=f.a.g.get(he,ye))&&he.context},f.ib=function(he,xe,Te){return he.nodeType===1&&f.h.Sc(he),O(he,xe,H(Te))},f.ld=function(he,xe,Te){return Te=H(Te),f.ib(he,M(xe,Te,he),Te)},f.Oa=function(he,xe){xe.nodeType!==1&&xe.nodeType!==8||N(H(he),xe)},f.vc=function(he,xe,Te){if(!o&&t.jQuery&&(o=t.jQuery),2>arguments.length){if(xe=n.body,!xe)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?")}else if(!xe||xe.nodeType!==1&&xe.nodeType!==8)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");k(H(he,Te),xe)},f.Dc=function(he){return!he||he.nodeType!==1&&he.nodeType!==8?e:f.Td(he)},f.Ec=function(he){return(he=f.Dc(he))?he.$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(A){function T(Q,N){var k=Object.prototype.hasOwnProperty.call(W,Q)?W[Q]:A,v;k?k.subscribe(N):(k=W[Q]=new f.T,k.subscribe(N),L(Q,function(O,H){var ee=!(!H||!H.synchronous);M[Q]={definition:O,Gd:ee},delete W[Q],v||ee?k.notifySubscribers(O):f.na.zb(function(){k.notifySubscribers(O)})}),v=!0)}function L(Q,N){V("getConfig",[Q],function(k){k?V("loadComponent",[Q,k],function(v){N(v,k)}):N(null,null)})}function V(Q,N,k,v){v||(v=f.j.loaders.slice(0));var O=v.shift();if(O){var H=O[Q];if(H){var ee=!1;if(H.apply(O,N.concat(function(K){ee?k(null):K!==null?k(K):V(Q,N,k,v)}))!==A&&(ee=!0,!O.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.")}else V(Q,N,k,v)}else k(null)}var W={},M={};f.j={get:function(Q,N){var k=Object.prototype.hasOwnProperty.call(M,Q)?M[Q]:A;k?k.Gd?f.u.G(function(){N(k.definition)}):f.na.zb(function(){N(k.definition)}):T(Q,N)},Bc:function(Q){delete M[Q]},oc:V},f.j.loaders=[],f.b("components",f.j),f.b("components.get",f.j.get),f.b("components.clearCachedDefinition",f.j.Bc)}(),function(){function A(k,v,O,H){function ee(){--te===0&&H(K)}var K={},te=2,q=O.template;O=O.viewModel,q?W(v,q,function(pe){f.j.oc("loadTemplate",[k,pe],function(ye){K.template=ye,ee()})}):ee(),O?W(v,O,function(pe){f.j.oc("loadViewModel",[k,pe],function(ye){K[N]=ye,ee()})}):ee()}function T(k,v,O){if(typeof v=="function")O(function(ee){return new v(ee)});else if(typeof v[N]=="function")O(v[N]);else if("instance"in v){var H=v.instance;O(function(){return H})}else"viewModel"in v?T(k,v.viewModel,O):k("Unknown viewModel value: "+v)}function L(k){switch(f.a.R(k)){case"script":return f.a.ua(k.text);case"textarea":return f.a.ua(k.value);case"template":if(V(k.content))return f.a.Ca(k.content.childNodes)}return f.a.Ca(k.childNodes)}function V(k){return t.DocumentFragment?k instanceof DocumentFragment:k&&k.nodeType===11}function W(k,v,O){typeof v.require=="string"?a||t.require?(a||t.require)([v.require],function(H){H&&typeof H=="object"&&H.Xd&&H.default&&(H=H.default),O(H)}):k("Uses require, but no AMD loader is present"):O(v)}function M(k){return function(v){throw Error("Component '"+k+"': "+v)}}var Q={};f.j.register=function(k,v){if(!v)throw Error("Invalid configuration for "+k);if(f.j.tb(k))throw Error("Component "+k+" is already registered");Q[k]=v},f.j.tb=function(k){return Object.prototype.hasOwnProperty.call(Q,k)},f.j.unregister=function(k){delete Q[k],f.j.Bc(k)},f.j.Fc={getConfig:function(k,v){v(f.j.tb(k)?Q[k]:null)},loadComponent:function(k,v,O){var H=M(k);W(H,v,function(ee){A(k,H,ee,O)})},loadTemplate:function(k,v,O){if(k=M(k),typeof v=="string")O(f.a.ua(v));else if(v instanceof Array)O(v);else if(V(v))O(f.a.la(v.childNodes));else if(v.element)if(v=v.element,t.HTMLElement?v instanceof HTMLElement:v&&v.tagName&&v.nodeType===1)O(L(v));else if(typeof v=="string"){var H=n.getElementById(v);H?O(L(H)):k("Cannot find element with ID "+v)}else k("Unknown element type: "+v);else k("Unknown template value: "+v)},loadViewModel:function(k,v,O){T(M(k),v,O)}};var N="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=Q}(),function(){function A(L,V){var W=L.getAttribute("params");if(W){var W=T.parseBindingsString(W,V,L,{valueAccessors:!0,bindingParams:!0}),W=f.a.Ga(W,function(N){return f.o(N,null,{l:L})}),M=f.a.Ga(W,function(N){var k=N.v();return N.ja()?f.o({read:function(){return f.a.f(N())},write:f.Za(k)&&function(v){N()(v)},l:L}):k});return Object.prototype.hasOwnProperty.call(M,"$raw")||(M.$raw=W),M}return{$raw:{}}}f.j.getComponentNameForNode=function(L){var V=f.a.R(L);if(f.j.tb(V)&&(V.indexOf("-")!=-1||""+L=="[object HTMLUnknownElement]"||8>=f.a.W&&L.tagName===V))return V},f.j.tc=function(L,V,W,M){if(V.nodeType===1){var Q=f.j.getComponentNameForNode(V);if(Q){if(L=L||{},L.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var N={name:Q,params:A(V,W)};L.component=M?function(){return N}:N}}return L};var T=new f.ga;9>f.a.W&&(f.j.register=function(L){return function(V){return L.apply(this,arguments)}}(f.j.register),n.createDocumentFragment=function(L){return function(){var V=L(),W=f.j.dd,M;for(M in W);return V}}(n.createDocumentFragment))}(),function(){function A(V,W,M){if(W=W.template,!W)throw Error("Component '"+V+"' has no template");V=f.a.Ca(W),f.h.va(M,V)}function T(V,W,M){var Q=V.createViewModel;return Q?Q.call(V,W,M):W}var L=0;f.c.component={init:function(V,W,M,Q,N){function k(){var K=v&&v.dispose;typeof K=="function"&&K.call(v),H&&H.s(),O=v=H=null}var v,O,H,ee=f.a.la(f.h.childNodes(V));return f.h.Ea(V),f.a.K.za(V,k),f.o(function(){var K=f.a.f(W()),te,q;if(typeof K=="string"?te=K:(te=f.a.f(K.name),q=f.a.f(K.params)),!te)throw Error("No component name specified");var pe=f.i.Cb(V,N),ye=O=++L;f.j.get(te,function(he){if(O===ye){if(k(),!he)throw Error("Unknown component '"+te+"'");A(te,he,V);var xe=T(he,q,{element:V,templateNodes:ee});he=pe.createChildContext(xe,{extend:function(Te){Te.$component=xe,Te.$componentTemplateNodes=ee}}),xe&&xe.koDescendantsComplete&&(H=f.i.subscribe(V,f.i.pa,xe.koDescendantsComplete,xe)),v=xe,f.Oa(he,V)}})},null,{l:V}),{controlsDescendantBindings:!0}}},f.h.ea.component=!0}();var F={class:"className",for:"htmlFor"};f.c.attr={update:function(A,T){var L=f.a.f(T())||{};f.a.P(L,function(V,W){W=f.a.f(W);var M=V.indexOf(":"),M="lookupNamespaceURI"in A&&0<M&&A.lookupNamespaceURI(V.substr(0,M)),Q=W===!1||W===null||W===e;Q?M?A.removeAttributeNS(M,V):A.removeAttribute(V):W=W.toString(),8>=f.a.W&&V in F?(V=F[V],Q?A.removeAttribute(V):A[V]=W):Q||(M?A.setAttributeNS(M,V,W):A.setAttribute(V,W)),V==="name"&&f.a.Yc(A,Q?"":W)})}},function(){f.c.checked={after:["value","attr"],init:function(A,T,L){function V(){var K=A.checked,te=M();if(!f.S.Ya()&&(K||!N&&!f.S.qa())){var q=f.u.G(T);if(v){var pe=O?q.v():q,ye=ee;ee=te,ye!==te?K&&(f.a.Na(pe,te,!0),f.a.Na(pe,ye,!1)):f.a.Na(pe,te,K),O&&f.Za(q)&&q(pe)}else Q&&(te===e?te=K:K||(te=e)),f.m.eb(q,L,"checked",te,!0)}}function W(){var K=f.a.f(T()),te=M();v?(A.checked=0<=f.a.A(K,te),ee=te):A.checked=Q&&te===e?!!K:M()===K}var M=f.xb(function(){if(L.has("checkedValue"))return f.a.f(L.get("checkedValue"));if(H)return L.has("value")?f.a.f(L.get("value")):A.value}),Q=A.type=="checkbox",N=A.type=="radio";if(Q||N){var k=T(),v=Q&&f.a.f(k)instanceof Array,O=!(v&&k.push&&k.splice),H=N||v,ee=v?M():e;N&&!A.name&&f.c.uniqueName.init(A,function(){return!0}),f.o(V,null,{l:A}),f.a.B(A,"click",V),f.o(W,null,{l:A}),k=e}}},f.m.wa.checked=!0,f.c.checkedValue={update:function(A,T){A.value=f.a.f(T())}}}(),f.c.class={update:function(A,T){var L=f.a.Db(f.a.f(T()));f.a.Eb(A,A.__ko__cssValue,!1),A.__ko__cssValue=L,f.a.Eb(A,L,!0)}},f.c.css={update:function(A,T){var L=f.a.f(T());L!==null&&typeof L=="object"?f.a.P(L,function(V,W){W=f.a.f(W),f.a.Eb(A,V,W)}):f.c.class.update(A,T)}},f.c.enable={update:function(A,T){var L=f.a.f(T());L&&A.disabled?A.removeAttribute("disabled"):L||A.disabled||(A.disabled=!0)}},f.c.disable={update:function(A,T){f.c.enable.update(A,function(){return!f.a.f(T())})}},f.c.event={init:function(A,T,L,V,W){var M=T()||{};f.a.P(M,function(Q){typeof Q=="string"&&f.a.B(A,Q,function(N){var k,v=T()[Q];if(v){try{var O=f.a.la(arguments);V=W.$data,O.unshift(V),k=v.apply(V,O)}finally{k!==!0&&(N.preventDefault?N.preventDefault():N.returnValue=!1)}L.get(Q+"Bubble")===!1&&(N.cancelBubble=!0,N.stopPropagation&&N.stopPropagation())}})})}},f.c.foreach={Rc:function(A){return function(){var T=A(),L=f.a.bc(T);return!L||typeof L.length=="number"?{foreach:T,templateEngine:f.ba.Ma}:(f.a.f(T),{foreach:L.data,as:L.as,noChildContext:L.noChildContext,includeDestroyed:L.includeDestroyed,afterAdd:L.afterAdd,beforeRemove:L.beforeRemove,afterRender:L.afterRender,beforeMove:L.beforeMove,afterMove:L.afterMove,templateEngine:f.ba.Ma})}},init:function(A,T){return f.c.template.init(A,f.c.foreach.Rc(T))},update:function(A,T,L,V,W){return f.c.template.update(A,f.c.foreach.Rc(T),L,V,W)}},f.m.Ra.foreach=!1,f.h.ea.foreach=!0,f.c.hasfocus={init:function(A,T,L){function V(Q){A.__ko_hasfocusUpdating=!0;var N=A.ownerDocument;if("activeElement"in N){var k;try{k=N.activeElement}catch{k=N.body}Q=k===A}N=T(),f.m.eb(N,L,"hasfocus",Q,!0),A.__ko_hasfocusLastValue=Q,A.__ko_hasfocusUpdating=!1}var W=V.bind(null,!0),M=V.bind(null,!1);f.a.B(A,"focus",W),f.a.B(A,"focusin",W),f.a.B(A,"blur",M),f.a.B(A,"focusout",M),A.__ko_hasfocusLastValue=!1},update:function(A,T){var L=!!f.a.f(T());A.__ko_hasfocusUpdating||A.__ko_hasfocusLastValue===L||(L?A.focus():A.blur(),!L&&A.__ko_hasfocusLastValue&&A.ownerDocument.body.focus(),f.u.G(f.a.Fb,null,[A,L?"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(A,T){f.a.fc(A,T())}},function(){function A(T,L,V){f.c[T]={init:function(W,M,Q,N,k){var v,O,H={},ee,K,te;if(L){N=Q.get("as");var q=Q.get("noChildContext");te=!(N&&q),H={as:N,noChildContext:q,exportDependencies:te}}return K=(ee=Q.get("completeOn")=="render")||Q.has(f.i.pa),f.o(function(){var pe=f.a.f(M()),ye=!V!=!pe,he=!O,xe;(te||ye!==v)&&(K&&(k=f.i.Cb(W,k)),ye&&((!L||te)&&(H.dataDependency=f.S.o()),xe=L?k.createChildContext(typeof pe=="function"?pe:M,H):f.S.qa()?k.extend(null,H):k),he&&f.S.qa()&&(O=f.a.Ca(f.h.childNodes(W),!0)),ye?(he||f.h.va(W,f.a.Ca(O)),f.Oa(xe,W)):(f.h.Ea(W),ee||f.i.ma(W,f.i.H)),v=ye)},null,{l:W}),{controlsDescendantBindings:!0}}},f.m.Ra[T]=!1,f.h.ea[T]=!0}A("if"),A("ifnot",!1,!0),A("with",!0)}(),f.c.let={init:function(A,T,L,V,W){return T=W.extend(T),f.Oa(T,A),{controlsDescendantBindings:!0}}},f.h.ea.let=!0;var P={};f.c.options={init:function(A){if(f.a.R(A)!=="select")throw Error("options binding applies only to SELECT elements");for(;0<A.length;)A.remove(0);return{controlsDescendantBindings:!0}},update:function(A,T,L){function V(){return f.a.jb(A.options,function(q){return q.selected})}function W(q,pe,ye){var he=typeof pe;return he=="function"?pe(q):he=="string"?q[pe]:ye}function M(q,pe){if(K&&v)f.i.ma(A,f.i.H);else if(ee.length){var ye=0<=f.a.A(ee,f.w.M(pe[0]));f.a.Zc(pe[0],ye),K&&!ye&&f.u.G(f.a.Fb,null,[A,"change"])}}var Q=A.multiple,N=A.length!=0&&Q?A.scrollTop:null,k=f.a.f(T()),v=L.get("valueAllowUnset")&&L.has("value"),O=L.get("optionsIncludeDestroyed");T={};var H,ee=[];v||(Q?ee=f.a.Mb(V(),f.w.M):0<=A.selectedIndex&&ee.push(f.w.M(A.options[A.selectedIndex]))),k&&(typeof k.length>"u"&&(k=[k]),H=f.a.jb(k,function(q){return O||q===e||q===null||!f.a.f(q._destroy)}),L.has("optionsCaption")&&(k=f.a.f(L.get("optionsCaption")),k!==null&&k!==e&&H.unshift(P)));var K=!1;if(T.beforeRemove=function(q){A.removeChild(q)},k=M,L.has("optionsAfterRender")&&typeof L.get("optionsAfterRender")=="function"&&(k=function(q,pe){M(0,pe),f.u.G(L.get("optionsAfterRender"),null,[pe[0],q!==P?q:e])}),f.a.ec(A,H,function(q,pe,ye){return ye.length&&(ee=!v&&ye[0].selected?[f.w.M(ye[0])]:[],K=!0),pe=A.ownerDocument.createElement("option"),q===P?(f.a.Bb(pe,L.get("optionsCaption")),f.w.cb(pe,e)):(ye=W(q,L.get("optionsValue"),q),f.w.cb(pe,f.a.f(ye)),q=W(q,L.get("optionsText"),ye),f.a.Bb(pe,q)),[pe]},T,k),!v){var te;Q?te=ee.length&&V().length<ee.length:te=ee.length&&0<=A.selectedIndex?f.w.M(A.options[A.selectedIndex])!==ee[0]:ee.length||0<=A.selectedIndex,te&&f.u.G(f.a.Fb,null,[A,"change"])}(v||f.S.Ya())&&f.i.ma(A,f.i.H),f.a.wd(A),N&&20<Math.abs(N-A.scrollTop)&&(A.scrollTop=N)}},f.c.options.$b=f.a.g.Z(),f.c.selectedOptions={init:function(A,T,L){function V(){var Q=T(),N=[];f.a.D(A.getElementsByTagName("option"),function(k){k.selected&&N.push(f.w.M(k))}),f.m.eb(Q,L,"selectedOptions",N)}function W(){var Q=f.a.f(T()),N=A.scrollTop;Q&&typeof Q.length=="number"&&f.a.D(A.getElementsByTagName("option"),function(k){var v=0<=f.a.A(Q,f.w.M(k));k.selected!=v&&f.a.Zc(k,v)}),A.scrollTop=N}if(f.a.R(A)!="select")throw Error("selectedOptions binding applies only to SELECT elements");var M;f.i.subscribe(A,f.i.H,function(){M?V():(f.a.B(A,"change",V),M=f.o(W,null,{l:A}))},null,{notifyImmediately:!0})},update:function(){}},f.m.wa.selectedOptions=!0,f.c.style={update:function(A,T){var L=f.a.f(T()||{});f.a.P(L,function(V,W){if(W=f.a.f(W),(W===null||W===e||W===!1)&&(W=""),o)o(A).css(V,W);else if(/^--/.test(V))A.style.setProperty(V,W);else{V=V.replace(/-(\w)/g,function(Q,N){return N.toUpperCase()});var M=A.style[V];A.style[V]=W,W===M||A.style[V]!=M||isNaN(W)||(A.style[V]=W+"px")}})}},f.c.submit={init:function(A,T,L,V,W){if(typeof T()!="function")throw Error("The value for a submit binding must be a function");f.a.B(A,"submit",function(M){var Q,N=T();try{Q=N.call(W.$data,A)}finally{Q!==!0&&(M.preventDefault?M.preventDefault():M.returnValue=!1)}})}},f.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(A,T){f.a.Bb(A,T())}},f.h.ea.text=!0,function(){if(t&&t.navigator){var A=function(H){if(H)return parseFloat(H[1])},T=t.navigator.userAgent,L,V,W,M,Q;(L=t.opera&&t.opera.version&&parseInt(t.opera.version()))||(Q=A(T.match(/Edge\/([^ ]+)$/)))||A(T.match(/Chrome\/([^ ]+)/))||(V=A(T.match(/Version\/([^ ]+) Safari/)))||(W=A(T.match(/Firefox\/([^ ]+)/)))||(M=f.a.W||A(T.match(/MSIE ([^ ]+)/)))||(M=A(T.match(/rv:([^ )]+)/)))}if(8<=M&&10>M)var N=f.a.g.Z(),k=f.a.g.Z(),v=function(H){var ee=this.activeElement;(ee=ee&&f.a.g.get(ee,k))&&ee(H)},O=function(H,ee){var K=H.ownerDocument;f.a.g.get(K,N)||(f.a.g.set(K,N,!0),f.a.B(K,"selectionchange",v)),f.a.g.set(H,k,ee)};f.c.textInput={init:function(H,ee,K){function te(De,Ue){f.a.B(H,De,Ue)}function q(){var De=f.a.f(ee());(De===null||De===e)&&(De=""),Te!==e&&De===Te?f.a.setTimeout(q,4):H.value!==De&&(Le=!0,H.value=De,Le=!1,he=H.value)}function pe(){xe||(Te=H.value,xe=f.a.setTimeout(ye,4))}function ye(){clearTimeout(xe),Te=xe=e;var De=H.value;he!==De&&(he=De,f.m.eb(ee(),K,"textInput",De))}var he=H.value,xe,Te,Be=f.a.W==9?pe:ye,Le=!1;M&&te("keypress",ye),11>M&&te("propertychange",function(De){Le||De.propertyName!=="value"||Be(De)}),M==8&&(te("keyup",ye),te("keydown",ye)),O&&(O(H,Be),te("dragend",pe)),(!M||9<=M)&&te("input",Be),5>V&&f.a.R(H)==="textarea"?(te("keydown",pe),te("paste",pe),te("cut",pe)):11>L?te("keydown",pe):4>W?(te("DOMAutoComplete",ye),te("dragdrop",ye),te("drop",ye)):Q&&H.type==="number"&&te("keydown",pe),te("change",ye),te("blur",ye),f.o(q,null,{l:H})}},f.m.wa.textInput=!0,f.c.textinput={preprocess:function(H,ee,K){K("textInput",H)}}}(),f.c.uniqueName={init:function(A,T){if(T()){var L="ko_unique_"+ ++f.c.uniqueName.rd;f.a.Yc(A,L)}}},f.c.uniqueName.rd=0,f.c.using={init:function(A,T,L,V,W){var M;return L.has("as")&&(M={as:L.get("as"),noChildContext:L.get("noChildContext")}),T=W.createChildContext(T,M),f.Oa(T,A),{controlsDescendantBindings:!0}}},f.h.ea.using=!0,f.c.value={init:function(A,T,L){var V=f.a.R(A),W=V=="input";if(!W||A.type!="checkbox"&&A.type!="radio"){var M=[],Q=L.get("valueUpdate"),N=!1,k=null;Q&&(typeof Q=="string"?M=[Q]:M=f.a.wc(Q),f.a.Pa(M,"change"));var v=function(){k=null,N=!1;var ee=T(),K=f.w.M(A);f.m.eb(ee,L,"value",K)};!f.a.W||!W||A.type!="text"||A.autocomplete=="off"||A.form&&A.form.autocomplete=="off"||f.a.A(M,"propertychange")!=-1||(f.a.B(A,"propertychange",function(){N=!0}),f.a.B(A,"focus",function(){N=!1}),f.a.B(A,"blur",function(){N&&v()})),f.a.D(M,function(ee){var K=v;f.a.Ud(ee,"after")&&(K=function(){k=f.w.M(A),f.a.setTimeout(v,0)},ee=ee.substring(5)),f.a.B(A,ee,K)});var O;if(O=W&&A.type=="file"?function(){var ee=f.a.f(T());ee===null||ee===e||ee===""?A.value="":f.u.G(v)}:function(){var ee=f.a.f(T()),K=f.w.M(A);k!==null&&ee===k?f.a.setTimeout(O,0):(ee!==K||K===e)&&(V==="select"?(K=L.get("valueAllowUnset"),f.w.cb(A,ee,K),K||ee===f.w.M(A)||f.u.G(v)):f.w.cb(A,ee))},V==="select"){var H;f.i.subscribe(A,f.i.H,function(){H?L.get("valueAllowUnset")?O():v():(f.a.B(A,"change",v),H=f.o(O,null,{l:A}))},null,{notifyImmediately:!0})}else f.a.B(A,"change",v),f.o(O,null,{l:A})}else f.ib(A,{checkedValue:T})},update:function(){}},f.m.wa.value=!0,f.c.visible={update:function(A,T){var L=f.a.f(T()),V=A.style.display!="none";L&&!V?A.style.display="":!L&&V&&(A.style.display="none")}},f.c.hidden={update:function(A,T){f.c.visible.update(A,function(){return!f.a.f(T())})}},function(A){f.c[A]={init:function(T,L,V,W,M){return f.c.event.init.call(this,T,function(){var Q={};return Q[A]=L(),Q},V,W,M)}}}("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(A,T){if(typeof A=="string"){T=T||n;var L=T.getElementById(A);if(!L)throw Error("Cannot find template with ID "+A);return new f.C.F(L)}if(A.nodeType==1||A.nodeType==8)return new f.C.ia(A);throw Error("Unknown template type: "+A)},f.ca.prototype.renderTemplate=function(A,T,L,V){return A=this.makeTemplateSource(A,V),this.renderTemplateSource(A,T,L,V)},f.ca.prototype.isTemplateRewritten=function(A,T){return this.allowTemplateRewriting===!1?!0:this.makeTemplateSource(A,T).data("isRewritten")},f.ca.prototype.rewriteTemplate=function(A,T,L){A=this.makeTemplateSource(A,L),T=T(A.text()),A.text(T),A.data("isRewritten",!0)},f.b("templateEngine",f.ca),f.kc=function(){function A(V,W,M,Q){V=f.m.ac(V);for(var N=f.m.Ra,k=0;k<V.length;k++){var v=V[k].key;if(Object.prototype.hasOwnProperty.call(N,v)){var O=N[v];if(typeof O=="function"){if(v=O(V[k].value))throw Error(v)}else if(!O)throw Error("This template engine does not support the '"+v+"' binding within its templates")}}return M="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+f.m.vb(V,{valueAccessors:!0})+" } })()},'"+M.toLowerCase()+"')",Q.createJavaScriptEvaluatorBlock(M)+W}var T=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,L=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(V,W,M){W.isTemplateRewritten(V,M)||W.rewriteTemplate(V,function(Q){return f.kc.Ld(Q,W)},M)},Ld:function(V,W){return V.replace(T,function(M,Q,N,k,v){return A(v,Q,N,W)}).replace(L,function(M,Q){return A(Q,"<!-- ko -->","#comment",W)})},md:function(V,W){return f.aa.Xb(function(M,Q){var N=M.nextSibling;N&&N.nodeName.toLowerCase()===W&&f.ib(N,V,Q)})}}}(),f.b("__tr_ambtns",f.kc.md),function(){f.C={},f.C.F=function(L){if(this.F=L){var V=f.a.R(L);this.ab=V==="script"?1:V==="textarea"?2:V=="template"&&L.content&&L.content.nodeType===11?3:4}},f.C.F.prototype.text=function(){var L=this.ab===1?"text":this.ab===2?"value":"innerHTML";if(arguments.length==0)return this.F[L];var V=arguments[0];L==="innerHTML"?f.a.fc(this.F,V):this.F[L]=V};var A=f.a.g.Z()+"_";f.C.F.prototype.data=function(L){if(arguments.length===1)return f.a.g.get(this.F,A+L);f.a.g.set(this.F,A+L,arguments[1])};var T=f.a.g.Z();f.C.F.prototype.nodes=function(){var L=this.F;if(arguments.length==0){var V=f.a.g.get(L,T)||{},W=V.lb||(this.ab===3?L.content:this.ab===4?L:e);if(!W||V.jd){var M=this.text();M&&M!==V.bb&&(W=f.a.Md(M,L.ownerDocument),f.a.g.set(L,T,{lb:W,bb:M,jd:!0}))}return W}V=arguments[0],this.ab!==e&&this.text(""),f.a.g.set(L,T,{lb:V})},f.C.ia=function(L){this.F=L},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 L=f.a.g.get(this.F,T)||{};return L.bb===e&&L.lb&&(L.bb=L.lb.innerHTML),L.bb}f.a.g.set(this.F,T,{bb:arguments[0]})},f.b("templateSources",f.C),f.b("templateSources.domElement",f.C.F),f.b("templateSources.anonymousTemplate",f.C.ia)}(),function(){function A(k,v,O){var H;for(v=f.h.nextSibling(v);k&&(H=k)!==v;)k=f.h.nextSibling(H),O(H,k)}function T(k,v){if(k.length){var O=k[0],H=k[k.length-1],ee=O.parentNode,K=f.ga.instance,te=K.preprocessNode;if(te){if(A(O,H,function(q,pe){var ye=q.previousSibling,he=te.call(K,q);he&&(q===O&&(O=he[0]||pe),q===H&&(H=he[he.length-1]||ye))}),k.length=0,!O)return;O===H?k.push(O):(k.push(O,H),f.a.Ua(k,ee))}A(O,H,function(q){q.nodeType!==1&&q.nodeType!==8||f.vc(v,q)}),A(O,H,function(q){q.nodeType!==1&&q.nodeType!==8||f.aa.cd(q,[v])}),f.a.Ua(k,ee)}}function L(k){return k.nodeType?k:0<k.length?k[0]:null}function V(k,v,O,H,ee){ee=ee||{};var K=(k&&L(k)||O||{}).ownerDocument,te=ee.templateEngine||M;if(f.kc.xd(O,te,K),O=te.renderTemplate(O,H,ee,K),typeof O.length!="number"||0<O.length&&typeof O[0].nodeType!="number")throw Error("Template engine must return an array of DOM nodes");switch(K=!1,v){case"replaceChildren":f.h.va(k,O),K=!0;break;case"replaceNode":f.a.Xc(k,O),K=!0;break;case"ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+v)}return K&&(T(O,H),ee.afterRender&&f.u.G(ee.afterRender,null,[O,H[ee.as||"$data"]]),v=="replaceChildren"&&f.i.ma(k,f.i.H)),O}function W(k,v,O){return f.O(k)?k():typeof k=="function"?k(v,O):k}var M;f.gc=function(k){if(k!=e&&!(k instanceof f.ca))throw Error("templateEngine must inherit from ko.templateEngine");M=k},f.dc=function(k,v,O,H,ee){if(O=O||{},(O.templateEngine||M)==e)throw Error("Set a template engine before calling renderTemplate");if(ee=ee||"replaceChildren",H){var K=L(H);return f.$(function(){var q=v&&v instanceof f.fa?v:new f.fa(v,null,null,null,{exportDependencies:!0}),te=W(k,q.$data,q),q=V(H,ee,te,q,O);ee=="replaceNode"&&(H=q,K=L(H))},null,{Sa:function(){return!K||!f.a.Sb(K)},l:K&&ee=="replaceNode"?K.parentNode:K})}return f.aa.Xb(function(te){f.dc(k,v,O,te,"replaceNode")})},f.Qd=function(k,v,O,H,ee){function K(Te,Be){f.u.G(f.a.ec,null,[H,Te,q,O,te,Be]),f.i.ma(H,f.i.H)}function te(Te,Be){T(Be,pe),O.afterRender&&O.afterRender(Be,Te),pe=null}function q(Te,Be){pe=ee.createChildContext(Te,{as:ye,noChildContext:O.noChildContext,extend:function(De){De.$index=Be,ye&&(De[ye+"Index"]=Be)}});var Le=W(k,Te,pe);return V(H,"ignoreTargetNode",Le,pe,O)}var pe,ye=O.as,he=O.includeDestroyed===!1||f.options.foreachHidesDestroyed&&!O.includeDestroyed;if(he||O.beforeRemove||!f.Pc(v))return f.$(function(){var Te=f.a.f(v)||[];typeof Te.length>"u"&&(Te=[Te]),he&&(Te=f.a.jb(Te,function(Be){return Be===e||Be===null||!f.a.f(Be._destroy)})),K(Te)},null,{l:H});K(v.v());var xe=v.subscribe(function(Te){K(v(),Te)},null,"arrayChange");return xe.l(H),xe};var Q=f.a.g.Z(),N=f.a.g.Z();f.c.template={init:function(k,v){var O=f.a.f(v());if(typeof O=="string"||"name"in O)f.h.Ea(k);else if("nodes"in O){if(O=O.nodes||[],f.O(O))throw Error('The "nodes" option must be a plain, non-observable array.');var H=O[0]&&O[0].parentNode;H&&f.a.g.get(H,N)||(H=f.a.Yb(O),f.a.g.set(H,N,!0)),new f.C.ia(k).nodes(H)}else if(O=f.h.childNodes(k),0<O.length)H=f.a.Yb(O),new f.C.ia(k).nodes(H);else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:function(k,v,O,H,ee){var K=v();v=f.a.f(K),O=!0,H=null,typeof v=="string"?v={}:(K="name"in v?v.name:k,"if"in v&&(O=f.a.f(v.if)),O&&"ifnot"in v&&(O=!f.a.f(v.ifnot)),O&&!K&&(O=!1)),"foreach"in v?H=f.Qd(K,O&&v.foreach||[],v,k,ee):O?(O=ee,"data"in v&&(O=ee.createChildContext(v.data,{as:v.as,noChildContext:v.noChildContext,exportDependencies:!0})),H=f.dc(K,O,v,k)):f.h.Ea(k),ee=H,(v=f.a.g.get(k,Q))&&typeof v.s=="function"&&v.s(),f.a.g.set(k,Q,!ee||ee.ja&&!ee.ja()?e:ee)}},f.m.Ra.template=function(k){return k=f.m.ac(k),k.length==1&&k[0].unknown||f.m.Id(k,"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(A,T,L){if(A.length&&T.length){var V,W,M,Q,N;for(V=W=0;(!L||V<L)&&(Q=A[W]);++W){for(M=0;N=T[M];++M)if(Q.value===N.value){Q.moved=N.index,N.moved=Q.index,T.splice(M,1),V=M=0;break}V+=M}}},f.a.Pb=function(){function A(T,L,V,W,M){var Q=Math.min,N=Math.max,k=[],v,O=T.length,H,ee=L.length,K=ee-O||1,te=O+ee+1,q,pe,ye;for(v=0;v<=O;v++)for(pe=q,k.push(q=[]),ye=Q(ee,v+K),H=N(0,v-1);H<=ye;H++)q[H]=H?v?T[v-1]===L[H-1]?pe[H-1]:Q(pe[H]||te,q[H-1]||te)+1:H+1:v+1;for(Q=[],N=[],K=[],v=O,H=ee;v||H;)ee=k[v][H]-1,H&&ee===k[v][H-1]?N.push(Q[Q.length]={status:V,value:L[--H],index:H}):v&&ee===k[v-1][H]?K.push(Q[Q.length]={status:W,value:T[--v],index:v}):(--H,--v,M.sparse||Q.push({status:"retained",value:L[H]}));return f.a.Kc(K,N,!M.dontLimitMoves&&10*O),Q.reverse()}return function(T,L,V){return V=typeof V=="boolean"?{dontLimitMoves:V}:V||{},T=T||[],L=L||[],T.length<L.length?A(T,L,"added","deleted",V):A(L,T,"deleted","added",V)}}(),f.b("utils.compareArrays",f.a.Pb),function(){function A(V,W,M,Q,N){var k=[],v=f.$(function(){var O=W(M,N,f.a.Ua(k,V))||[];0<k.length&&(f.a.Xc(k,O),Q&&f.u.G(Q,null,[M,O,N])),k.length=0,f.a.Nb(k,O)},null,{l:V,Sa:function(){return!f.a.kd(k)}});return{Y:k,$:v.ja()?v:e}}var T=f.a.g.Z(),L=f.a.g.Z();f.a.ec=function(V,W,M,Q,N,k){function v(Xt){Le={Aa:Xt,pb:f.ta(pe++)},te.push(Le),K||Be.push(Le)}function O(Xt){Le=ee[Xt],pe!==Le.pb.v()&&Te.push(Le),Le.pb(pe++),f.a.Ua(Le.Y,V),te.push(Le)}function H(Xt,Li){if(Xt)for(var bi=0,vt=Li.length;bi<vt;bi++)f.a.D(Li[bi].Y,function(Rt){Xt(Rt,bi,Li[bi].Aa)})}W=W||[],typeof W.length>"u"&&(W=[W]),Q=Q||{};var ee=f.a.g.get(V,T),K=!ee,te=[],q=0,pe=0,ye=[],he=[],xe=[],Te=[],Be=[],Le,De=0;if(K)f.a.D(W,v);else{if(!k||ee&&ee._countWaitingForRemove){var Ue=f.a.Mb(ee,function(Xt){return Xt.Aa});k=f.a.Pb(Ue,W,{dontLimitMoves:Q.dontLimitMoves,sparse:!0})}for(var Ue=0,je,it,nn;je=k[Ue];Ue++)switch(it=je.moved,nn=je.index,je.status){case"deleted":for(;q<nn;)O(q++);it===e&&(Le=ee[q],Le.$&&(Le.$.s(),Le.$=e),f.a.Ua(Le.Y,V).length&&(Q.beforeRemove&&(te.push(Le),De++,Le.Aa===L?Le=null:xe.push(Le)),Le&&ye.push.apply(ye,Le.Y))),q++;break;case"added":for(;pe<nn;)O(q++);it!==e?(he.push(te.length),O(it)):v(je.value)}for(;pe<W.length;)O(q++);te._countWaitingForRemove=De}f.a.g.set(V,T,te),H(Q.beforeMove,Te),f.a.D(ye,Q.beforeRemove?f.oa:f.removeNode);var rt,rn,Jt;try{Jt=V.ownerDocument.activeElement}catch{}if(he.length)for(;(Ue=he.shift())!=e;){for(Le=te[Ue],rt=e;Ue;)if((rn=te[--Ue].Y)&&rn.length){rt=rn[rn.length-1];break}for(W=0;q=Le.Y[W];rt=q,W++)f.h.Wb(V,q,rt)}for(Ue=0;Le=te[Ue];Ue++){for(Le.Y||f.a.extend(Le,A(V,M,Le.Aa,N,Le.pb)),W=0;q=Le.Y[W];rt=q,W++)f.h.Wb(V,q,rt);!Le.Ed&&N&&(N(Le.Aa,Le.Y,Le.pb),Le.Ed=!0,rt=Le.Y[Le.Y.length-1])}for(Jt&&V.ownerDocument.activeElement!=Jt&&Jt.focus(),H(Q.beforeRemove,xe),Ue=0;Ue<xe.length;++Ue)xe[Ue].Aa=L;H(Q.afterMove,Te),H(Q.afterAdd,Be)}}(),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(A,T,L,V){return(T=!(9>f.a.W)&&A.nodes?A.nodes():null)?f.a.la(T.cloneNode(!0).childNodes):(A=A.text(),f.a.ua(A,V))},f.ba.Ma=new f.ba,f.gc(f.ba.Ma),f.b("nativeTemplateEngine",f.ba),function(){f.$a=function(){var T=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(L,V,W,M){if(M=M||n,W=W||{},2>T)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var Q=L.data("precompiled");return Q||(Q=L.text()||"",Q=o.template(null,"{{ko_with $item.koBindingContext}}"+Q+"{{/ko_with}}"),L.data("precompiled",Q)),L=[V.$data],V=o.extend({koBindingContext:V},W.templateOptions),V=o.tmpl(Q,L,V),V.appendTo(M.createElement("div")),o.fragments={},V},this.createJavaScriptEvaluatorBlock=function(L){return"{{ko_code ((function() { return "+L+" })()) }}"},this.addTemplate=function(L,V){n.write("<script type='text/html' id='"+L+"'>"+V+"<\/script>")},0<T&&(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 A=new f.$a;0<A.Hd&&f.gc(A),f.b("jqueryTmplTemplateEngine",f.$a)}()})})()})()})();var B1t=ko;typeof window<"u"?(ko=window.ko,typeof RN<"u"?window.ko=RN:delete window.ko):(ko=global.ko,typeof RN<"u"?global.ko=RN:delete global.ko);var I_=B1t;var RBo=y(C(),1);/** * @license * Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5 * Copyright (c) Steve Sanderson * MIT license */var nee="__knockoutObservables",iee="__knockoutSubscribable";function oSe(e,t){if(!e)throw new Error("When calling ko.track, you must pass an object as the first parameter.");var n=this,i=rSe(e,!0);return t=t||Object.getOwnPropertyNames(e),t.forEach(function(o){if(!(o===nee||o===iee)&&!(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&&X1t(n,a)}}),e}function rSe(e,t){var n=e[nee];return!n&&t&&(n={},Object.defineProperty(e,nee,{value:n})),n}function w1t(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),oSe.call(i,e,[t]),e}function X1t(e,t){var n=null;e.computed(function(){n&&(n.dispose(),n=null);var i=t();i instanceof Array&&(n=W1t(e,t,i))})}function W1t(e,t,n){var i=F1t(e,n);return i.subscribe(t)}function F1t(e,t){var n=t[iee];if(!n){n=new e.subscribable,Object.defineProperty(t,iee,{value:n});var i={};P1t(t,n,i),M1t(e,t,n,i)}return n}function P1t(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 M1t(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 sSe(e,t){if(!e)return null;var n=rSe(e,!1);return n&&n[t]||null}function v1t(e,t){var n=sSe(e,t);n&&n.valueHasMutated()}function N1t(e){e.track=oSe,e.getObservable=sSe,e.valueHasMutated=v1t,e.defineProperty=w1t}var VN={attachToKo:N1t};var GBo=y(C(),1),aSe="http://www.w3.org/2000/svg",cSe="cesium-svgPath-svg",D1t={register:function(e){e.bindingHandlers.cesiumSvgPath={init:function(t,n){let i=document.createElementNS(aSe,"svg:svg");i.setAttribute("class",cSe);let o=document.createElementNS(aSe,"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",`${cSe} ${e.unwrap(r.css)}`)},disposeWhenNodeIsRemoved:t}),{controlsDescendantBindings:!0}}},e.virtualElements.allowedBindings.cesiumSvgPath=!0}},GN=D1t;VN.attachToKo(I_);GN.register(I_);var Ee=I_;function ZN(e){l(e)||(e=new Yh),this._clock=e,this._eventHelper=new Lr,this._eventHelper.add(e.onTick,this.synchronize,this),this.systemTime=Ee.observable(j.now()),this.systemTime.equalityComparer=j.equals,this.startTime=Ee.observable(e.startTime),this.startTime.equalityComparer=j.equals,this.startTime.subscribe(function(t){e.startTime=t,this.synchronize()},this),this.stopTime=Ee.observable(e.stopTime),this.stopTime.equalityComparer=j.equals,this.stopTime.subscribe(function(t){e.stopTime=t,this.synchronize()},this),this.currentTime=Ee.observable(e.currentTime),this.currentTime.equalityComparer=j.equals,this.currentTime.subscribe(function(t){e.currentTime=t,this.synchronize()},this),this.multiplier=Ee.observable(e.multiplier),this.multiplier.subscribe(function(t){e.multiplier=t,this.synchronize()},this),this.clockStep=Ee.observable(e.clockStep),this.clockStep.subscribe(function(t){e.clockStep=t,this.synchronize()},this),this.clockRange=Ee.observable(e.clockRange),this.clockRange.subscribe(function(t){e.clockRange=t,this.synchronize()},this),this.canAnimate=Ee.observable(e.canAnimate),this.canAnimate.subscribe(function(t){e.canAnimate=t,this.synchronize()},this),this.shouldAnimate=Ee.observable(e.shouldAnimate),this.shouldAnimate.subscribe(function(t){e.shouldAnimate=t,this.synchronize()},this),Ee.track(this,["systemTime","startTime","stopTime","currentTime","multiplier","clockStep","clockRange","canAnimate","shouldAnimate"])}Object.defineProperties(ZN.prototype,{clock:{get:function(){return this._clock}}});ZN.prototype.synchronize=function(){let e=this._clock;this.systemTime=j.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};ZN.prototype.isDestroyed=function(){return!1};ZN.prototype.destroy=function(){this._eventHelper.removeAll(),me(this)};var BN=ZN;var QBo=y(C(),1);function Q1t(){this.canExecute=void 0,this.beforeExecute=void 0,this.afterExecute=void 0,Ae.throwInstantiationError()}var oee=Q1t;var OBo=y(C(),1);var YL={};YL.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};YL.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};YL.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};YL.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};YL.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 Vd=YL;var qBo=y(C(),1);function lSe(e,t){this._command=e,t=t??Y.EMPTY_OBJECT,this.toggled=t.toggled??!1,this.tooltip=t.tooltip??"",Ee.track(this,["toggled","tooltip"])}Object.defineProperties(lSe.prototype,{command:{get:function(){return this._command}}});var Vy=lSe;var owo=y(C(),1);function U1t(e,t){t=t??!0;let n=new Ce,i=new Ce;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,Ee.track(o,["canExecute"]),Object.defineProperties(o,{beforeExecute:{value:n},afterExecute:{value:i}}),o}var Xn=U1t;var awo=y(C(),1);function k1t(e,t,n,i,o){return n.call(i,e[t]),Ee.getObservable(e,t).subscribe(n,i,o)}var $a=k1t;var mwo=y(C(),1);var __="http://www.w3.org/2000/svg",mSe="http://www.w3.org/1999/xlink",t3,wN=U.fromCssColorString("rgba(247,250,255,0.384)"),n3=U.fromCssColorString("rgba(143,191,255,0.216)"),ree=U.fromCssColorString("rgba(153,197,255,0.098)"),i3=U.fromCssColorString("rgba(255,255,255,0.086)"),Y1t=U.fromCssColorString("rgba(255,255,255,0.267)"),O1t=U.fromCssColorString("rgba(255,255,255,0)"),dSe=U.fromCssColorString("rgba(66,67,68,0.3)"),uSe=U.fromCssColorString("rgba(0,0,0,0.5)");function Gy(e){return U.fromCssColorString(window.getComputedStyle(e).getPropertyValue("color"))}var XN={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 Ef(e){let t=document.createElementNS(__,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(Ef(e.children[o]))}else n.indexOf("xlink:")===0?t.setAttributeNS(mSe,n.substring(6),e[n]):n==="textContent"?t.textContent=e[n]:t.setAttribute(n,e[n]);return t}function see(e,t,n){let i=document.createElementNS(__,"text");i.setAttribute("x",e),i.setAttribute("y",t),i.setAttribute("class","cesium-animation-svgText");let o=document.createElementNS(__,"tspan");return o.textContent=n,i.appendChild(o),i}function H1t(e,t,n){e.setAttribute("transform",`translate(100,100) rotate(${n})`),t.setAttribute("transform",`rotate(${n})`)}var o3=new U;function Ss(e,t){let n=t.alpha,i=1-n;return o3.red=e.red*i+t.red*n,o3.green=e.green*i+t.green*n,o3.blue=e.blue*i+t.blue*n,o3.toCssColorString()}function aee(e,t,n){let i=XN[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 Ef(o)}function z1t(e,t,n){let i=XN[n],o=XN.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 Ef(r)}function K1t(e,t){let n=e._viewModel,i=n.shuttleRingDragging;if(!(i&&t3!==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(),h=c-o-a.left,p=d-r-a.top,g=Math.atan2(p,h)*180/Math.PI+90;g>180&&(g-=360);let f=n.shuttleRingAngle;i||c<u.right&&c>u.left&&d>u.top&&d<u.bottom?(t3=e,n.shuttleRingDragging=!0,n.shuttleRingAngle=g):g<f?n.slower():g>f&&n.faster(),t.preventDefault()}else e===t3&&(t3=void 0),n.shuttleRingDragging=!1}function ab(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=[$a(t,"toggled",this.setToggled,this),$a(t,"tooltip",this.setTooltip,this),$a(t.command,"canExecute",this.setEnabled,this)]}ab.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)};ab.prototype.isDestroyed=function(){return!1};ab.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")}};ab.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")))};ab.prototype.setTooltip=function(e){this.svgElement.getElementsByTagName("title")[0].textContent=e};function OL(e,t){e=Dn(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(__,"svg:svg");this._svgNode=r,r.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink",mSe);let s=document.createElementNS(__,"g");this._topG=s,this._realtimeSVG=new ab(z1t(3,4,"animation_pathClock"),t.playRealtimeViewModel),this._playReverseSVG=new ab(aee(44,99,"animation_pathPlayReverse"),t.playReverseViewModel),this._playForwardSVG=new ab(aee(124,99,"animation_pathPlay"),t.playForwardViewModel),this._pauseSVG=new ab(aee(84,99,"animation_pathPause"),t.pauseViewModel);let a=document.createElementNS(__,"g");a.appendChild(this._realtimeSVG.svgElement),a.appendChild(this._playReverseSVG.svgElement),a.appendChild(this._playForwardSVG.svgElement),a.appendChild(this._pauseSVG.svgElement);let c=Ef({tagName:"circle",class:"cesium-animation-shuttleRingBack",cx:100,cy:100,r:99});this._shuttleRingBackPanel=c;let d=XN.animation_pathSwooshFX,u=XN.animation_pathPointer,h=Ef({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=h,this._shuttleRingPointer=Ef({class:"cesium-animation-shuttleRingPointer",id:"animation_pathPointer",tagName:u.tagName,d:u.d});let p=Ef({tagName:"g",transform:"translate(100,100)"});this._knobOuter=Ef({tagName:"circle",class:"cesium-animation-knobOuter",cx:0,cy:0,r:71});let g=61,f=Ef({tagName:"circle",class:"cesium-animation-knobInner",cx:0,cy:0,r:g});this._knobDate=see(0,-24,""),this._knobTime=see(0,-7,""),this._knobStatus=see(0,-41,"");let b=Ef({tagName:"circle",class:"cesium-animation-blank",cx:0,cy:0,r:g}),x=document.createElementNS(__,"g");x.setAttribute("class","cesium-animation-shuttleRingG"),e.appendChild(o),s.appendChild(x),s.appendChild(p),s.appendChild(a),x.appendChild(c),x.appendChild(h),x.appendChild(this._shuttleRingPointer),p.appendChild(this._knobOuter),p.appendChild(f),p.appendChild(this._knobDate),p.appendChild(this._knobTime),p.appendChild(this._knobStatus),p.appendChild(b),r.appendChild(s),e.appendChild(r);let I=this;function _(B){K1t(I,B)}this._mouseCallback=_,c.addEventListener("mousedown",_,!0),c.addEventListener("touchstart",_,!0),h.addEventListener("mousedown",_,!0),h.addEventListener("touchstart",_,!0),n.addEventListener("mousemove",_,!0),n.addEventListener("touchmove",_,!0),n.addEventListener("mouseup",_,!0),n.addEventListener("touchend",_,!0),n.addEventListener("touchcancel",_,!0),this._shuttleRingPointer.addEventListener("mousedown",_,!0),this._shuttleRingPointer.addEventListener("touchstart",_,!0),this._knobOuter.addEventListener("mousedown",_,!0),this._knobOuter.addEventListener("touchstart",_,!0);let E=this._knobTime.childNodes[0],S=this._knobDate.childNodes[0],R=this._knobStatus.childNodes[0],G;this._subscriptions=[$a(t.pauseViewModel,"toggled",function(B){G!==B&&(G=B,G?I._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPausePointer"):I._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPointer"))}),$a(t,"shuttleRingAngle",function(B){H1t(I._shuttleRingPointer,I._knobOuter,B)}),$a(t,"dateLabel",function(B){S.textContent!==B&&(S.textContent=B)}),$a(t,"timeLabel",function(B){E.textContent!==B&&(E.textContent=B)}),$a(t,"multiplierLabel",function(B){R.textContent!==B&&(R.textContent=B)})],this.applyThemeChanges(),this.resize()}Object.defineProperties(OL.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});OL.prototype.isDestroyed=function(){return!1};OL.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)};OL.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};OL.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=Gy(this._themeNormal),n=Gy(this._themeHover),i=Gy(this._themeSelect),o=Gy(this._themeDisabled),r=Gy(this._themeKnob),s=Gy(this._themePointer),a=Gy(this._themeSwoosh),c=Gy(this._themeSwooshHover),d=Ef({tagName:"defs",children:[{id:"animation_buttonNormal",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ss(t,wN)},{tagName:"stop",offset:"12%","stop-color":Ss(t,n3)},{tagName:"stop",offset:"46%","stop-color":Ss(t,ree)},{tagName:"stop",offset:"81%","stop-color":Ss(t,i3)}]},{id:"animation_buttonHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ss(n,wN)},{tagName:"stop",offset:"12%","stop-color":Ss(n,n3)},{tagName:"stop",offset:"46%","stop-color":Ss(n,ree)},{tagName:"stop",offset:"81%","stop-color":Ss(n,i3)}]},{id:"animation_buttonToggled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ss(i,wN)},{tagName:"stop",offset:"12%","stop-color":Ss(i,n3)},{tagName:"stop",offset:"46%","stop-color":Ss(i,ree)},{tagName:"stop",offset:"81%","stop-color":Ss(i,i3)}]},{id:"animation_buttonDisabled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Ss(o,Y1t)},{tagName:"stop",offset:"75%","stop-color":Ss(o,O1t)}]},{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":Ss(s,uSe)},{tagName:"stop",offset:"100%","stop-color":Ss(s,uSe)}]},{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":Ss(r,wN)},{tagName:"stop",offset:"60%","stop-color":Ss(r,dSe)},{tagName:"stop",offset:"85%","stop-color":Ss(r,n3)}]},{id:"animation_knobInner",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":Ss(r,dSe)},{tagName:"stop",offset:"60%","stop-color":Ss(r,wN)},{tagName:"stop",offset:"85%","stop-color":Ss(r,i3)}]}]});l(this._defsElement)?this._svgNode.replaceChild(d,this._defsElement):this._svgNode.appendChild(d),this._defsElement=d};var WN=OL;var Cwo=y(C(),1);var J1t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Zy=15,HL=105;function hSe(e,t){return e-t}function cee(e,t){let n=Yo(t,e,hSe);return n<0?~n:n}function j1t(e,t){if(Math.abs(e)<=Zy)return e/Zy;let n=Zy,i=HL,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 q1t(e,t,n){if(n.clockStep===Ro.SYSTEM_CLOCK)return Zy;if(Math.abs(e)<=1)return e*Zy;let i=t[t.length-1];e>i?e=i:e<-i&&(e=-i);let o=Zy,r=HL,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 Om(e){let t=this;this._clockViewModel=e,this._allShuttleRingTicks=[],this._dateFormatter=Om.defaultDateFormatter,this._timeFormatter=Om.defaultTimeFormatter,this.shuttleRingDragging=!1,this.snapToTicks=!1,Ee.track(this,["_allShuttleRingTicks","_dateFormatter","_timeFormatter","shuttleRingDragging","snapToTicks"]),this._sortedFilteredPositiveTicks=[],this.setShuttleRingTicks(Om.defaultTicks),this.timeLabel=void 0,Ee.defineProperty(this,"timeLabel",function(){return t._timeFormatter(t._clockViewModel.currentTime,t)}),this.dateLabel=void 0,Ee.defineProperty(this,"dateLabel",function(){return t._dateFormatter(t._clockViewModel.currentTime,t)}),this.multiplierLabel=void 0,Ee.defineProperty(this,"multiplierLabel",function(){let s=t._clockViewModel;if(s.clockStep===Ro.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,Ee.defineProperty(this,"shuttleRingAngle",{get:function(){return q1t(e.multiplier,t._allShuttleRingTicks,e)},set:function(s){s=Math.max(Math.min(s,HL),-HL);let a=t._allShuttleRingTicks,c=t._clockViewModel;if(c.clockStep=Ro.SYSTEM_CLOCK_MULTIPLIER,Math.abs(s)===HL){c.multiplier=s>0?a[a.length-1]:a[0];return}let d=j1t(s,a);if(t.snapToTicks)d=a[cee(d,a)];else if(d!==0){let u=Math.abs(d);if(u>100){let h=u.toFixed(0).length-2,p=Math.pow(10,h);d=Math.round(d/p)*p|0}else u>Zy?d=Math.round(d):u>1?d=+d.toFixed(1):u>0&&(d=+d.toFixed(2))}c.multiplier=d}}),this._canAnimate=void 0,Ee.defineProperty(this,"_canAnimate",function(){let s=t._clockViewModel,a=s.clockRange;if(t.shuttleRingDragging||a===ls.UNBOUNDED)return!0;let c=s.multiplier,d=s.currentTime,u=s.startTime,h=!1;if(a===ls.LOOP_STOP)h=j.greaterThan(d,u)||d.equals(u)&&c>0;else{let p=s.stopTime;h=j.greaterThan(d,u)&&j.lessThan(d,p)||d.equals(u)&&c>0||d.equals(p)&&c<0}return h||(s.shouldAnimate=!1),h}),this._isSystemTimeAvailable=void 0,Ee.defineProperty(this,"_isSystemTimeAvailable",function(){let s=t._clockViewModel;if(s.clockRange===ls.UNBOUNDED)return!0;let c=s.systemTime;return j.greaterThanOrEquals(c,s.startTime)&&j.lessThanOrEquals(c,s.stopTime)}),this._isAnimating=void 0,Ee.defineProperty(this,"_isAnimating",function(){return t._clockViewModel.shouldAnimate&&(t._canAnimate||t.shuttleRingDragging)});let n=Xn(function(){let s=t._clockViewModel;s.shouldAnimate?s.shouldAnimate=!1:t._canAnimate&&(s.shouldAnimate=!0)});this._pauseViewModel=new Vy(n,{toggled:Ee.computed(function(){return!t._isAnimating}),tooltip:"Pause"});let i=Xn(function(){let s=t._clockViewModel,a=s.multiplier;a>0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playReverseViewModel=new Vy(i,{toggled:Ee.computed(function(){return t._isAnimating&&e.multiplier<0}),tooltip:"Play Reverse"});let o=Xn(function(){let s=t._clockViewModel,a=s.multiplier;a<0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playForwardViewModel=new Vy(o,{toggled:Ee.computed(function(){return t._isAnimating&&e.multiplier>0&&e.clockStep!==Ro.SYSTEM_CLOCK}),tooltip:"Play Forward"});let r=Xn(function(){t._clockViewModel.clockStep=Ro.SYSTEM_CLOCK},Ee.getObservable(this,"_isSystemTimeAvailable"));this._playRealtimeViewModel=new Vy(r,{toggled:Ee.computed(function(){return e.clockStep===Ro.SYSTEM_CLOCK}),tooltip:Ee.computed(function(){return t._isSystemTimeAvailable?"Today (real-time)":"Current time not in range"})}),this._slower=Xn(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,c=s.multiplier,d=cee(c,a)-1;d>=0&&(s.multiplier=a[d])}),this._faster=Xn(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,c=s.multiplier,d=cee(c,a)+1;d<a.length&&(s.multiplier=a[d])})}Om.defaultDateFormatter=function(e,t){let n=j.toGregorianDate(e);return`${J1t[n.month-1]} ${n.day} ${n.year}`};Om.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];Om.defaultTimeFormatter=function(e,t){let n=j.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`};Om.prototype.getShuttleRingTicks=function(){return this._sortedFilteredPositiveTicks.slice(0)};Om.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(hSe);let s=[];for(n=r.length,t=n-1;t>=0;--t)i=r[t],i!==0&&s.push(-i);ci(s,r),this._allShuttleRingTicks=s};Object.defineProperties(Om.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}}});Om._maxShuttleRingAngle=HL;Om._realtimeShuttleRingAngle=Zy;var FN=Om;var wwo=y(C(),1);var Swo=y(C(),1);function fSe(e){e=e??Y.EMPTY_OBJECT;let t=e.globe,n=e.imageryProviderViewModels??Y.EMPTY_ARRAY,i=e.terrainProviderViewModels??Y.EMPTY_ARRAY;this._globe=t,this.imageryProviderViewModels=n.slice(0),this.terrainProviderViewModels=i.slice(0),this.dropDownVisible=!1,Ee.track(this,["imageryProviderViewModels","terrainProviderViewModels","dropDownVisible"]);let o=Ee.getObservable(this,"imageryProviderViewModels"),r=Ee.pureComputed(function(){let h=o(),p={},g;for(g=0;g<h.length;g++){let x=h[g],I=x.category;l(p[I])?p[I].push(x):p[I]=[x]}let f=Object.keys(p),b=[];for(g=0;g<f.length;g++){let x=f[g];b.push({name:x,providers:p[x]})}return b});this._imageryProviders=r;let s=Ee.getObservable(this,"terrainProviderViewModels"),a=Ee.pureComputed(function(){let h=s(),p={},g;for(g=0;g<h.length;g++){let x=h[g],I=x.category;l(p[I])?p[I].push(x):p[I]=[x]}let f=Object.keys(p),b=[];for(g=0;g<f.length;g++){let x=f[g];b.push({name:x,providers:p[x]})}return b});this._terrainProviders=a,this.buttonTooltip=void 0,Ee.defineProperty(this,"buttonTooltip",function(){let h=this.selectedImagery,p=this.selectedTerrain,g=l(h)?h.name:void 0,f=l(p)?p.name:void 0;return l(g)&&l(f)?`${g} ${f}`:l(g)?g:f}),this.buttonImageUrl=void 0,Ee.defineProperty(this,"buttonImageUrl",function(){let h=this.selectedImagery;if(l(h))return h.iconUrl}),this.selectedImagery=void 0;let c=Ee.observable();this._currentImageryLayers=[],Ee.defineProperty(this,"selectedImagery",{get:function(){return c()},set:function(h){if(c()===h){this.dropDownVisible=!1;return}let p,g=this._currentImageryLayers,f=g.length,b=this._globe.imageryLayers,x=!1;for(p=0;p<f;p++){let I=b.length;for(let _=0;_<I;_++){let E=b.get(_);if(E===g[p]){b.remove(E),x=!0;break}}}if(l(h)){let I=h.creationCommand();if(Array.isArray(I)){let _=I.length;for(this._currentImageryLayers=[],p=_-1;p>=0;p--){let E=is.fromProviderAsync(I[p]);b.add(E,0),this._currentImageryLayers.push(E)}}else{this._currentImageryLayers=[];let _=is.fromProviderAsync(I);if(_.name=h.name,x)b.add(_,0);else{let E=b.get(0);l(E)&&b.remove(E),b.add(_,0)}this._currentImageryLayers.push(_)}}c(h),this.dropDownVisible=!1}}),this.selectedTerrain=void 0;let d=Ee.observable();Ee.defineProperty(this,"selectedTerrain",{get:function(){return d()},set:function(h){if(d()===h){this.dropDownVisible=!1;return}let p;if(l(h)&&(p=h.creationCommand()),l(p)&&!l(p.then))this._globe.depthTestAgainstTerrain=!(p instanceof Tp),this._globe.terrainProvider=p;else if(l(p)){let g=!1,f=this._globe.terrainProviderChanged.addEventListener(()=>{g=!0,f()}),x=new EN(p).readyEvent.addEventListener(I=>{g||(this._globe.depthTestAgainstTerrain=!(I instanceof Tp),this._globe.terrainProvider=I,x())})}d(h),this.dropDownVisible=!1}});let u=this;this._toggleDropDown=Xn(function(){u.dropDownVisible=!u.dropDownVisible}),this.selectedImagery=e.selectedImageryProviderViewModel??n[0],this.selectedTerrain=e.selectedTerrainProviderViewModel}Object.defineProperties(fSe.prototype,{toggleDropDown:{get:function(){return this._toggleDropDown}},globe:{get:function(){return this._globe}}});var PN=fSe;function r3(e,t){e=Dn(e);let n=new PN(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 h=document.createElement("div");h.className="cesium-baseLayerPicker-item",h.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(h);let p=document.createElement("img");p.className="cesium-baseLayerPicker-itemIcon",p.setAttribute("data-bind","attr: { src: iconUrl }"),p.setAttribute("draggable","false"),h.appendChild(p);let g=document.createElement("div");g.className="cesium-baseLayerPicker-itemLabel",g.setAttribute("data-bind","text: name"),h.appendChild(g);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 b=document.createElement("div");b.className="cesium-baseLayerPicker-section",b.setAttribute("data-bind","foreach: _terrainProviders"),r.appendChild(b);let x=document.createElement("div");x.className="cesium-baseLayerPicker-category",b.appendChild(x);let I=document.createElement("div");I.className="cesium-baseLayerPicker-categoryTitle",I.setAttribute("data-bind","text: name"),x.appendChild(I);let _=document.createElement("div");_.className="cesium-baseLayerPicker-choices",_.setAttribute("data-bind","foreach: providers"),x.appendChild(_);let E=document.createElement("div");E.className="cesium-baseLayerPicker-item",E.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedTerrain },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedTerrain = $data; }'),_.appendChild(E);let S=document.createElement("img");S.className="cesium-baseLayerPicker-itemIcon",S.setAttribute("data-bind","attr: { src: iconUrl }"),S.setAttribute("draggable","false"),E.appendChild(S);let R=document.createElement("div");R.className="cesium-baseLayerPicker-itemLabel",R.setAttribute("data-bind","text: name"),E.appendChild(R),Ee.applyBindings(n,i),Ee.applyBindings(n,r),this._viewModel=n,this._container=e,this._element=i,this._dropPanel=r,this._closeDropDown=function(G){i.contains(G.target)||r.contains(G.target)||(n.dropDownVisible=!1)},Ht.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(r3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});r3.prototype.isDestroyed=function(){return!1};r3.prototype.destroy=function(){return Ht.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ee.cleanNode(this._element),Ee.cleanNode(this._dropPanel),this._container.removeChild(this._element),this._container.removeChild(this._dropPanel),me(this)};var MN=r3;var vwo=y(C(),1);function pSe(e){let t=e.creationFunction;l(t.canExecute)||(t=Xn(t)),this._creationCommand=t,this.name=e.name,this.tooltip=e.tooltip,this.iconUrl=e.iconUrl,this._category=e.category??"",Ee.track(this,["name","tooltip","iconUrl"])}Object.defineProperties(pSe.prototype,{creationCommand:{get:function(){return this._creationCommand}},category:{get:function(){return this._category}}});var Ls=pSe;var Uwo=y(C(),1);function $1t(){let e=[],t=devicePixelRatio>=2;return e.push(new Ls({name:"Bing Maps Aerial",iconUrl:hn("Widgets/Images/ImageryProviders/bingAerial.png"),tooltip:"Bing Maps aerial imagery, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return YA({style:kA.AERIAL})}})),e.push(new Ls({name:"Bing Maps Aerial with Labels",iconUrl:hn("Widgets/Images/ImageryProviders/bingAerialLabels.png"),tooltip:"Bing Maps aerial imagery with labels, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return YA({style:kA.AERIAL_WITH_LABELS})}})),e.push(new Ls({name:"Bing Maps Roads",iconUrl:hn("Widgets/Images/ImageryProviders/bingRoads.png"),tooltip:"Bing Maps standard road maps, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return YA({style:kA.ROAD})}})),e.push(new Ls({name:"ArcGIS World Imagery",iconUrl:hn("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 QA.fromBasemapType(Gh.SATELLITE,{enablePickFeatures:!1})}})),e.push(new Ls({name:"ArcGIS World Hillshade",iconUrl:hn("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 QA.fromBasemapType(Gh.HILLSHADE,{enablePickFeatures:!1})}})),e.push(new Ls({name:"Esri World Ocean",iconUrl:hn("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 QA.fromBasemapType(Gh.OCEANS,{enablePickFeatures:!1})}})),e.push(new Ls({name:"Open\xADStreet\xADMap",iconUrl:hn("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 sb({url:"https://tile.openstreetmap.org/"})}})),e.push(new Ls({name:"Stadia x Stamen Watercolor",iconUrl:hn("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 sb({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 Ls({name:"Stadia x Stamen Toner",iconUrl:hn("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 sb({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 Ls({name:"Stadia Alidade Smooth",iconUrl:hn("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 sb({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 Ls({name:"Stadia Alidade Smooth Dark",iconUrl:hn("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 sb({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 Ls({name:"Sentinel-2",iconUrl:hn("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 UA.fromAssetId(3954)}})),e.push(new Ls({name:"Blue Marble",iconUrl:hn("Widgets/Images/ImageryProviders/blueMarble.png"),tooltip:"Blue Marble Next Generation July, 2004 imagery from NASA.",category:"Cesium ion",creationFunction:function(){return UA.fromAssetId(3845)}})),e.push(new Ls({name:"Earth at night",iconUrl:hn("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 UA.fromAssetId(3812)}})),e.push(new Ls({name:"Natural Earth\xA0II",iconUrl:hn("Widgets/Images/ImageryProviders/naturalEarthII.png"),tooltip:`Natural Earth II, darkened for contrast. http://www.naturalearthdata.com/`,category:"Cesium ion",creationFunction:function(){return u0.fromUrl(hn("Assets/Textures/NaturalEarthII"))}})),e}var vN=$1t;var Hwo=y(C(),1);function eRt(){let e=[];return e.push(new Ls({name:"WGS84 Ellipsoid",iconUrl:hn("Widgets/Images/TerrainProviders/Ellipsoid.png"),tooltip:"WGS84 standard ellipsoid, also known as EPSG:4326",category:"Cesium ion",creationFunction:function(){return new Tp({ellipsoid:ie.WGS84})}})),e.push(new Ls({name:"Cesium World Terrain",iconUrl:hn("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 h_({requestWaterMask:!0,requestVertexNormals:!0})}})),e}var NN=eRt;var rXo=y(C(),1);var qwo=y(C(),1);function tRt(e){return function(t){let n=e._scene.pick(t.position);l(n)&&n.primitive instanceof Ps&&(e.tileset=n.primitive),e.pickActive=!1}}function gSe(e,t){t?e._eventHandler.setInputAction(function(n){let i=e._scene.pick(n.endPosition);l(i)&&i.primitive instanceof Ps&&(e.tileset=i.primitive)},Zn.MOUSE_MOVE):(e._eventHandler.removeInputAction(Zn.MOUSE_MOVE),e.picking=e.picking)}var nRt={maximumFractionDigits:3};function DN(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,nRt):Math.round(t).toLocaleString()}function QN(e,t){if(!l(e))return"";let n=t?e._statisticsPerPass[zo.PICK]:e._statisticsPerPass[zo.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>${DN(n.geometryByteLength)}</li><li><strong>Texture Memory (MB): </strong>${DN(n.texturesByteLength)}</li><li><strong>Batch Table Memory (MB): </strong>${DN(n.batchTableByteLength)}</li>`,i+="</ul>"),i}function bSe(){let e=Mi.statistics;return` <ul class="cesium-cesiumInspector-statistics"> <li><strong>Geometry Memory (MB): </strong>${DN(e.geometryByteLength)}</li> <li><strong>Texture Memory (MB): </strong>${DN(e.texturesByteLength)}</li> </ul> `}var iRt=[{text:"Highlight",value:ed.HIGHLIGHT},{text:"Replace",value:ed.REPLACE},{text:"Mix",value:ed.MIX}],ASe=new U(1,1,0,.4),oRt=new U,s3=new U;function ec(e,t){let n=this,i=e.canvas;this._eventHandler=new Su(i),this._scene=e,this._performanceContainer=t,this._canvas=i,this._performanceDisplay=new kg({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,Ee.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=Ee.observable({}),this.properties=[],Ee.defineProperty(this,"properties",function(){let v=[],O=n._properties();for(let H in O)O.hasOwnProperty(H)&&v.push(H);return v});let o=Ee.observable();Ee.defineProperty(this,"dynamicScreenSpaceError",{get:function(){return o()},set:function(v){o(v),l(n._tileset)&&(n._tileset.dynamicScreenSpaceError=v)}}),this.dynamicScreenSpaceError=!1;let r=Ee.observable();Ee.defineProperty(this,"colorBlendMode",{get:function(){return r()},set:function(v){r(v),l(n._tileset)&&(n._tileset.colorBlendMode=v,n._scene.requestRender())}}),this.colorBlendMode=ed.HIGHLIGHT;let s=Ee.observable(),a=Ee.observable();Ee.defineProperty(this,"picking",{get:function(){return a()},set:function(v){a(v),v?n._eventHandler.setInputAction(function(O){let H=e.pick(O.endPosition);if(H instanceof ma?(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 ee;e.pickPositionSupported&&(ee=e.pickPosition(O.endPosition),l(ee)&&(n._tileset.debugPickPosition=ee)),n._tileset.debugPickedTile=H.content.tile}else n._tileset.debugPickedTile=void 0;n._scene.requestRender()}},Zn.MOUSE_MOVE):(n.feature=void 0,n.tile=void 0,n._eventHandler.removeInputAction(Zn.MOUSE_MOVE))}}),this.picking=!0;let c=Ee.observable();Ee.defineProperty(this,"colorize",{get:function(){return c()},set:function(v){c(v),l(n._tileset)&&(n._tileset.debugColorizeTiles=v,n._scene.requestRender())}}),this.colorize=!1;let d=Ee.observable();Ee.defineProperty(this,"wireframe",{get:function(){return d()},set:function(v){d(v),l(n._tileset)&&(n._tileset.debugWireframe=v,n._scene.requestRender())}}),this.wireframe=!1;let u=Ee.observable();Ee.defineProperty(this,"showBoundingVolumes",{get:function(){return u()},set:function(v){u(v),l(n._tileset)&&(n._tileset.debugShowBoundingVolume=v,n._scene.requestRender())}}),this.showBoundingVolumes=!1;let h=Ee.observable();Ee.defineProperty(this,"showContentBoundingVolumes",{get:function(){return h()},set:function(v){h(v),l(n._tileset)&&(n._tileset.debugShowContentBoundingVolume=v,n._scene.requestRender())}}),this.showContentBoundingVolumes=!1;let p=Ee.observable();Ee.defineProperty(this,"showRequestVolumes",{get:function(){return p()},set:function(v){p(v),l(n._tileset)&&(n._tileset.debugShowViewerRequestVolume=v,n._scene.requestRender())}}),this.showRequestVolumes=!1;let g=Ee.observable();Ee.defineProperty(this,"freezeFrame",{get:function(){return g()},set:function(v){g(v),l(n._tileset)&&(n._tileset.debugFreezeFrame=v,n._scene.debugShowFrustumPlanes=v,n._scene.requestRender())}}),this.freezeFrame=!1,Ee.defineProperty(this,"showOnlyPickedTileDebugLabel",{get:function(){return s()},set:function(v){s(v),l(n._tileset)&&(n._tileset.debugPickedTileLabelOnly=v,n._scene.requestRender())}}),this.showOnlyPickedTileDebugLabel=!1;let f=Ee.observable();Ee.defineProperty(this,"showGeometricError",{get:function(){return f()},set:function(v){f(v),l(n._tileset)&&(n._tileset.debugShowGeometricError=v,n._scene.requestRender())}}),this.showGeometricError=!1;let b=Ee.observable();Ee.defineProperty(this,"showRenderingStatistics",{get:function(){return b()},set:function(v){b(v),l(n._tileset)&&(n._tileset.debugShowRenderingStatistics=v,n._scene.requestRender())}}),this.showRenderingStatistics=!1;let x=Ee.observable();Ee.defineProperty(this,"showMemoryUsage",{get:function(){return x()},set:function(v){x(v),l(n._tileset)&&(n._tileset.debugShowMemoryUsage=v,n._scene.requestRender())}}),this.showMemoryUsage=!1;let I=Ee.observable();Ee.defineProperty(this,"showUrl",{get:function(){return I()},set:function(v){I(v),l(n._tileset)&&(n._tileset.debugShowUrl=v,n._scene.requestRender())}}),this.showUrl=!1;let _=Ee.observable();Ee.defineProperty(this,"maximumScreenSpaceError",{get:function(){return _()},set:function(v){v=Number(v),isNaN(v)||(_(v),l(n._tileset)&&(n._tileset.maximumScreenSpaceError=v))}}),this.maximumScreenSpaceError=16;let E=Ee.observable();Ee.defineProperty(this,"dynamicScreenSpaceErrorDensity",{get:function(){return E()},set:function(v){v=Number(v),isNaN(v)||(E(v),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=v))}}),this.dynamicScreenSpaceErrorDensity=2e-4,this.dynamicScreenSpaceErrorDensitySliderValue=void 0,Ee.defineProperty(this,"dynamicScreenSpaceErrorDensitySliderValue",{get:function(){return Math.pow(E(),1/6)},set:function(v){let O=Math.pow(v,6);E(O),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=O)}});let S=Ee.observable();Ee.defineProperty(this,"dynamicScreenSpaceErrorFactor",{get:function(){return S()},set:function(v){v=Number(v),isNaN(v)||(S(v),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorFactor=v))}}),this.dynamicScreenSpaceErrorFactor=24;let R=tRt(this),G=Ee.observable();Ee.defineProperty(this,"pickActive",{get:function(){return G()},set:function(v){G(v),v?n._eventHandler.setInputAction(R,Zn.LEFT_CLICK):n._eventHandler.removeInputAction(Zn.LEFT_CLICK)}});let B=Ee.observable();Ee.defineProperty(this,"pointCloudShading",{get:function(){return B()},set:function(v){B(v),l(n._tileset)&&(n._tileset.pointCloudShading.attenuation=v)}}),this.pointCloudShading=!1;let w=Ee.observable();Ee.defineProperty(this,"geometricErrorScale",{get:function(){return w()},set:function(v){v=Number(v),isNaN(v)||(w(v),l(n._tileset)&&(n._tileset.pointCloudShading.geometricErrorScale=v))}}),this.geometricErrorScale=1;let F=Ee.observable();Ee.defineProperty(this,"maximumAttenuation",{get:function(){return F()},set:function(v){v=Number(v),isNaN(v)||(F(v),l(n._tileset)&&(n._tileset.pointCloudShading.maximumAttenuation=v===0?void 0:v))}}),this.maximumAttenuation=0;let P=Ee.observable();Ee.defineProperty(this,"baseResolution",{get:function(){return P()},set:function(v){v=Number(v),isNaN(v)||(P(v),l(n._tileset)&&(n._tileset.pointCloudShading.baseResolution=v===0?void 0:v))}}),this.baseResolution=0;let A=Ee.observable();Ee.defineProperty(this,"eyeDomeLighting",{get:function(){return A()},set:function(v){A(v),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLighting=v)}}),this.eyeDomeLighting=!1;let T=Ee.observable();Ee.defineProperty(this,"eyeDomeLightingStrength",{get:function(){return T()},set:function(v){v=Number(v),isNaN(v)||(T(v),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingStrength=v))}}),this.eyeDomeLightingStrength=1;let L=Ee.observable();Ee.defineProperty(this,"eyeDomeLightingRadius",{get:function(){return L()},set:function(v){v=Number(v),isNaN(v)||(L(v),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingRadius=v))}}),this.eyeDomeLightingRadius=1,this.pickActive=!1;let V=Ee.observable();Ee.defineProperty(this,"skipLevelOfDetail",{get:function(){return V()},set:function(v){V(v),l(n._tileset)&&(n._tileset.skipLevelOfDetail=v)}}),this.skipLevelOfDetail=!0;let W=Ee.observable();Ee.defineProperty(this,"skipScreenSpaceErrorFactor",{get:function(){return W()},set:function(v){v=Number(v),isNaN(v)||(W(v),l(n._tileset)&&(n._tileset.skipScreenSpaceErrorFactor=v))}}),this.skipScreenSpaceErrorFactor=16;let M=Ee.observable();Ee.defineProperty(this,"baseScreenSpaceError",{get:function(){return M()},set:function(v){v=Number(v),isNaN(v)||(M(v),l(n._tileset)&&(n._tileset.baseScreenSpaceError=v))}}),this.baseScreenSpaceError=1024;let Q=Ee.observable();Ee.defineProperty(this,"skipLevels",{get:function(){return Q()},set:function(v){v=Number(v),isNaN(v)||(Q(v),l(n._tileset)&&(n._tileset.skipLevels=v))}}),this.skipLevels=1;let N=Ee.observable();Ee.defineProperty(this,"immediatelyLoadDesiredLevelOfDetail",{get:function(){return N()},set:function(v){N(v),l(n._tileset)&&(n._tileset.immediatelyLoadDesiredLevelOfDetail=v)}}),this.immediatelyLoadDesiredLevelOfDetail=!1;let k=Ee.observable();Ee.defineProperty(this,"loadSiblings",{get:function(){return k()},set:function(v){k(v),l(n._tileset)&&(n._tileset.loadSiblings=v)}}),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)||gSe(this,!0)}Object.defineProperties(ec.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 iRt}},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=QN(e,!1),this._pickStatisticsText=QN(e,!0),this._resourceCacheStatisticsText=bSe(),gSe(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,oRt):U.WHITE:t.color=s3,this._scene.requestRender()),l(e)&&(U.clone(e.color,s3),e.color=ASe,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()&&!lee(t.content)&&(t.color=s3,this._scene.requestRender()),l(e)&&!lee(e.content)&&(U.clone(e.color,s3),e.color=ASe,this._scene.requestRender()),this._tile=e}}});function lee(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(!lee(t[i]))return!1;return!0}return!1}ec.prototype.togglePickTileset=function(){this.pickActive=!this.pickActive};ec.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};ec.prototype.toggleTileset=function(){this.tilesetVisible=!this.tilesetVisible};ec.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};ec.prototype.toggleUpdate=function(){this.updateVisible=!this.updateVisible};ec.prototype.toggleLogging=function(){this.loggingVisible=!this.loggingVisible};ec.prototype.toggleStyle=function(){this.styleVisible=!this.styleVisible};ec.prototype.toggleTileDebugLabels=function(){this.tileDebugLabelsVisible=!this.tileDebugLabelsVisible};ec.prototype.toggleOptimization=function(){this.optimizationVisible=!this.optimizationVisible};ec.prototype.trimTilesCache=function(){l(this._tileset)&&this._tileset.trimLoadedTiles()};ec.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 p_(JSON.parse(this.styleString)),this._shouldStyle=!0,this._scene.requestRender()}catch(t){this._editorError=t.toString()}this.feature=this._feature,this.tile=this._tile}};ec.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};ec.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=QN(e,!1),this._pickStatisticsText=QN(e,!0),this._resourceCacheStatisticsText=bSe())};ec.prototype.isDestroyed=function(){return!1};ec.prototype.destroy=function(){this._eventHandler.destroy(),this._removePostRenderEvent();let e=this;return this._definedProperties.forEach(function(t){Ee.getObservable(e,t).dispose()}),me(this)};ec.getStatistics=QN;var UN=ec;function a3(e,t){e=Dn(e);let n=document.createElement("div"),i=document.createElement("div");i.setAttribute("data-bind","visible: performance");let o=new UN(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=Vd.createSection,c=Vd.createCheckbox,d=Vd.createRangeInput,u=Vd.createButton,h=a(s,"Tileset","tilesetVisible","toggleTileset"),p=a(s,"Display","displayVisible","toggleDisplay"),g=a(s,"Update","updateVisible","toggleUpdate"),f=a(s,"Logging","loggingVisible","toggleLogging"),b=a(s,"Tile Debug Labels","tileDebugLabelsVisible","toggleTileDebugLabels"),x=a(s,"Style","styleVisible","toggleStyle"),I=a(s,"Optimization","optimizationVisible","toggleOptimization"),_=document.createElement("div");_.className="field-group";let E=document.createElement("label");E.className="field-label",E.appendChild(document.createTextNode("Properties: "));let S=document.createElement("div");S.setAttribute("data-bind","text: properties"),_.appendChild(E),_.appendChild(S),h.appendChild(_),h.appendChild(u("Pick Tileset","togglePickTileset","pickActive")),h.appendChild(u("Trim Tiles Cache","trimTilesCache")),h.appendChild(c("Enable Picking","picking")),p.appendChild(c("Colorize","colorize"));let R=p.appendChild(c("Wireframe","wireframe","_tileset === undefined || hasEnabledWireframe")),G=document.createElement("p");G.setAttribute("data-bind","visible: _tileset !== undefined && !hasEnabledWireframe"),G.setAttribute("class","cesium-3DTilesInspector-disabledElementsInfo"),G.innerText="Set enableDebugWireframe to true in the tileset constructor to enable this option.",R.appendChild(G),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 B=document.createElement("div");B.setAttribute("data-bind","visible: pointCloudShading"),B.appendChild(d("Geometric Error Scale","geometricErrorScale",0,2,.01)),B.appendChild(d("Maximum Attenuation","maximumAttenuation",0,32,1)),B.appendChild(d("Base Resolution","baseResolution",0,1,.01)),B.appendChild(c("Eye Dome Lighting (EDL)","eyeDomeLighting")),p.appendChild(B);let w=document.createElement("div");w.setAttribute("data-bind","visible: eyeDomeLighting"),w.appendChild(d("EDL Strength","eyeDomeLightingStrength",0,2,.1)),w.appendChild(d("EDL Radius","eyeDomeLightingRadius",0,4,.1)),B.appendChild(w),g.appendChild(c("Freeze Frame","freezeFrame")),g.appendChild(c("Dynamic Screen Space Error","dynamicScreenSpaceError"));let F=document.createElement("div");F.appendChild(d("Maximum Screen Space Error","maximumScreenSpaceError",0,128,1)),g.appendChild(F);let P=document.createElement("div");P.setAttribute("data-bind","visible: dynamicScreenSpaceError"),P.appendChild(d("Screen Space Error Density","dynamicScreenSpaceErrorDensitySliderValue",0,1,.005,"dynamicScreenSpaceErrorDensity")),P.appendChild(d("Screen Space Error Factor","dynamicScreenSpaceErrorFactor",1,32,.1)),g.appendChild(P),f.appendChild(c("Performance","performance")),f.appendChild(i),f.appendChild(c("Statistics","showStatistics"));let A=document.createElement("div");A.className="cesium-3dTilesInspector-statistics",A.setAttribute("data-bind","html: statisticsText, visible: showStatistics"),f.appendChild(A),f.appendChild(c("Pick Statistics","showPickStatistics"));let T=document.createElement("div");T.className="cesium-3dTilesInspector-statistics",T.setAttribute("data-bind","html: pickStatisticsText, visible: showPickStatistics"),f.appendChild(T),f.appendChild(c("Resource Cache Statistics","showResourceCacheStatistics"));let L=document.createElement("div");L.className="cesium-3dTilesInspector-statistics",L.setAttribute("data-bind","html: resourceCacheStatisticsText, visible: showResourceCacheStatistics"),f.appendChild(L);let V=document.createElement("div");x.appendChild(V),V.appendChild(document.createTextNode("Color Blend Mode: "));let W=document.createElement("select");W.setAttribute("data-bind",'options: colorBlendModes, optionsText: "text", optionsValue: "value", value: colorBlendMode'),V.appendChild(W);let M=document.createElement("textarea");M.setAttribute("data-bind","textInput: styleString, event: { keydown: styleEditorKeyPress }"),V.className="cesium-cesiumInspector-styleEditor",V.appendChild(M);let Q=u("Compile (Ctrl+Enter)","compileStyle");V.appendChild(Q);let N=document.createElement("div");N.className="cesium-cesiumInspector-error",N.setAttribute("data-bind","text: editorError"),V.appendChild(N),b.appendChild(c("Show Picked Only","showOnlyPickedTileDebugLabel")),b.appendChild(c("Geometric Error","showGeometricError")),b.appendChild(c("Rendering Statistics","showRenderingStatistics")),b.appendChild(c("Memory Usage (MB)","showMemoryUsage")),b.appendChild(c("Url","showUrl")),I.appendChild(c("Skip Tile LODs","skipLevelOfDetail"));let k=document.createElement("div");k.appendChild(d("Skip SSE Factor","skipScreenSpaceErrorFactor",1,50,1)),I.appendChild(k);let v=document.createElement("div");v.appendChild(d("SSE before skipping LOD","baseScreenSpaceError",0,4096,1)),I.appendChild(v);let O=document.createElement("div");O.appendChild(d("Min. levels to skip","skipLevels",0,10,1)),I.appendChild(O),I.appendChild(c("Load only tiles that meet the max SSE.","immediatelyLoadDesiredLevelOfDetail")),I.appendChild(c("Load siblings of visible tiles","loadSiblings")),Ee.applyBindings(o,n)}Object.defineProperties(a3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});a3.prototype.isDestroyed=function(){return!1};a3.prototype.destroy=function(){return Ee.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),me(this)};var kN=a3;var yXo=y(C(),1);var uXo=y(C(),1);function rRt(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 dee(e,t,n){let i=Math.min(n,t);return i=Math.max(i,e),i}var sRt=new En,aRt=new m;function YN(e,t){let n=this,i=e.canvas,o=new Su(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="",Ee.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=Xn(function(){n.dropDownVisible=!n.dropDownVisible}),this._toggleGeneral=Xn(function(){n.generalVisible=!n.generalVisible}),this._togglePrimitives=Xn(function(){n.primitivesVisible=!n.primitivesVisible}),this._toggleTerrain=Xn(function(){n.terrainVisible=!n.terrainVisible}),this._frustumsSubscription=Ee.getObservable(this,"frustums").subscribe(function(d){n._scene.debugShowFrustums=d,n._scene.requestRender()}),this._frustumPlanesSubscription=Ee.getObservable(this,"frustumPlanes").subscribe(function(d){n._scene.debugShowFrustumPlanes=d,n._scene.requestRender()}),this._performanceSubscription=Ee.getObservable(this,"performance").subscribe(function(d){d?n._performanceDisplay=new kg({container:n._performanceContainer}):n._performanceContainer.innerHTML=""}),this._showPrimitiveBoundingSphere=Xn(function(){return n._primitive.debugShowBoundingVolume=n.primitiveBoundingSphere,n._scene.requestRender(),!0}),this._primitiveBoundingSphereSubscription=Ee.getObservable(this,"primitiveBoundingSphere").subscribe(function(){n._showPrimitiveBoundingSphere()}),this._showPrimitiveReferenceFrame=Xn(function(){if(n.primitiveReferenceFrame){let d=n._primitive.modelMatrix;n._modelMatrixPrimitive=new lN({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=Ee.getObservable(this,"primitiveReferenceFrame").subscribe(function(){n._showPrimitiveReferenceFrame()}),this._doFilterPrimitive=Xn(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=Ee.getObservable(this,"filterPrimitive").subscribe(function(){n._doFilterPrimitive(),n._scene.requestRender()}),this._wireframeSubscription=Ee.getObservable(this,"wireframe").subscribe(function(d){r._surface.tileProvider._debug.wireframe=d,n._scene.requestRender()}),this._depthFrustumSubscription=Ee.getObservable(this,"depthFrustum").subscribe(function(d){n._scene.debugShowDepthFrustum=d,n._scene.requestRender()}),this._incrementDepthFrustum=Xn(function(){let d=n.depthFrustum+1;return n.depthFrustum=dee(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._decrementDepthFrustum=Xn(function(){let d=n.depthFrustum-1;return n.depthFrustum=dee(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._suspendUpdatesSubscription=Ee.getObservable(this,"suspendUpdates").subscribe(function(d){r._surface._debug.suspendLodUpdate=d,d||(n.filterTile=!1)});let s;this._showTileCoordinates=Xn(function(){return n.tileCoordinates&&!l(s)?s=e.imageryLayers.addImageryProvider(new SN({tilingScheme:e.terrainProvider.tilingScheme})):!n.tileCoordinates&&l(s)&&(e.imageryLayers.remove(s),s=void 0),!0}),this._tileCoordinatesSubscription=Ee.getObservable(this,"tileCoordinates").subscribe(function(){n._showTileCoordinates(),n._scene.requestRender()}),this._tileBoundingSphereSubscription=Ee.getObservable(this,"tileBoundingSphere").subscribe(function(){n._showTileBoundingSphere(),n._scene.requestRender()}),this._showTileBoundingSphere=Xn(function(){return n.tileBoundingSphere?r._surface.tileProvider._debug.boundingSphereTile=n._tile:r._surface.tileProvider._debug.boundingSphereTile=void 0,n._scene.requestRender(),!0}),this._doFilterTile=Xn(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=Ee.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=Xn(function(){n.pickPrimitiveActive=!n.pickPrimitiveActive}),this._pickPrimitiveActiveSubscription=Ee.getObservable(this,"pickPrimitiveActive").subscribe(function(d){d?o.setInputAction(a,Zn.LEFT_CLICK):o.removeInputAction(Zn.LEFT_CLICK)});function c(d){let u,h=r.ellipsoid,p=n._scene.camera.getPickRay(d.position,sRt),g=r.pick(p,n._scene,aRt);if(l(g)){let f=h.cartesianToCartographic(g),b=r._surface.tileProvider._tilesToRenderByTextureCount;for(let x=0;!u&&x<b.length;++x){let I=b[x];if(l(I))for(let _=0;!u&&_<I.length;++_){let E=I[_];le.contains(E.rectangle,f)&&(u=E)}}}n.tile=u,n.pickTileActive=!1}this._pickTile=Xn(function(){n.pickTileActive=!n.pickTileActive}),this._pickTileActiveSubscription=Ee.getObservable(this,"pickTileActive").subscribe(function(d){d?o.setInputAction(c,Zn.LEFT_CLICK):o.removeInputAction(Zn.LEFT_CLICK)}),this._removePostRenderEvent=e.postRender.addEventListener(function(){n._update()})}Object.defineProperties(YN.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 Xn(function(){e.tile=e.tile.parent})}},selectNW:{get:function(){let e=this;return Xn(function(){e.tile=e.tile.northwestChild})}},selectNE:{get:function(){let e=this;return Xn(function(){e.tile=e.tile.northeastChild})}},selectSW:{get:function(){let e=this;return Xn(function(){e.tile=e.tile.southwestChild})}},selectSE:{get:function(){let e=this;return Xn(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}}});YN.prototype._update=function(){this.frustums&&(this.frustumStatisticText=rRt(this._scene.debugFrustumStatistics));let e=this._scene.numberOfFrustums;this._numberOfFrustums=e,this.depthFrustum=dee(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}`};YN.prototype.isDestroyed=function(){return!1};YN.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 ON=YN;function c3(e,t){e=Dn(e);let n=document.createElement("div"),i=new ON(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=Vd.createSection,c=Vd.createCheckbox,d=a(s,"General","generalVisible","toggleGeneral"),u=c("Show Frustums","frustums"),h=document.createElement("div");h.className="cesium-cesiumInspector-frustumStatistics",h.setAttribute("data-bind","visible: frustums, html: frustumStatisticText"),u.appendChild(h),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 g=document.createElement("div");d.appendChild(g);let f=document.createElement("span");f.setAttribute("data-bind",'html: "     Frustum:"'),g.appendChild(f);let b=document.createElement("span");b.setAttribute("data-bind","text: depthFrustumText"),g.appendChild(b);let x=document.createElement("input");x.type="button",x.value="-",x.className="cesium-cesiumInspector-pickButton",x.setAttribute("data-bind","click: decrementDepthFrustum"),g.appendChild(x);let I=document.createElement("input");I.type="button",I.value="+",I.className="cesium-cesiumInspector-pickButton",I.setAttribute("data-bind","click: incrementDepthFrustum"),g.appendChild(I);let _=a(s,"Primitives","primitivesVisible","togglePrimitives"),E=document.createElement("div");E.className="cesium-cesiumInspector-pickSection",_.appendChild(E);let S=document.createElement("input");S.type="button",S.value="Pick a primitive",S.className="cesium-cesiumInspector-pickButton",S.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickPrimitiveActive}, click: pickPrimitive');let R=document.createElement("div");R.className="cesium-cesiumInspector-center",R.appendChild(S),E.appendChild(R),E.appendChild(c("Show bounding sphere","primitiveBoundingSphere","hasPickedPrimitive")),E.appendChild(c("Show reference frame","primitiveReferenceFrame","hasPickedPrimitive")),this._primitiveOnly=c("Show only selected","filterPrimitive","hasPickedPrimitive"),E.appendChild(this._primitiveOnly);let G=a(s,"Terrain","terrainVisible","toggleTerrain"),B=document.createElement("div");B.className="cesium-cesiumInspector-pickSection",G.appendChild(B);let w=document.createElement("input");w.type="button",w.value="Pick a tile",w.className="cesium-cesiumInspector-pickButton",w.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickTileActive}, click: pickTile'),R=document.createElement("div"),R.appendChild(w),R.className="cesium-cesiumInspector-center",B.appendChild(R);let F=document.createElement("div");B.appendChild(F);let P=document.createElement("input");P.type="button",P.value="Parent",P.className="cesium-cesiumInspector-pickButton",P.setAttribute("data-bind","click: selectParent");let A=document.createElement("input");A.type="button",A.value="NW",A.className="cesium-cesiumInspector-pickButton",A.setAttribute("data-bind","click: selectNW");let T=document.createElement("input");T.type="button",T.value="NE",T.className="cesium-cesiumInspector-pickButton",T.setAttribute("data-bind","click: selectNE");let L=document.createElement("input");L.type="button",L.value="SW",L.className="cesium-cesiumInspector-pickButton",L.setAttribute("data-bind","click: selectSW");let V=document.createElement("input");V.type="button",V.value="SE",V.className="cesium-cesiumInspector-pickButton",V.setAttribute("data-bind","click: selectSE");let W=document.createElement("div");W.className="cesium-cesiumInspector-tileText",F.className="cesium-cesiumInspector-frustumStatistics",F.appendChild(W),F.setAttribute("data-bind","visible: hasPickedTile"),W.setAttribute("data-bind","html: tileText");let M=document.createElement("div");M.className="cesium-cesiumInspector-relativeText",M.textContent="Select relative:",F.appendChild(M);let Q=document.createElement("table"),N=document.createElement("tr"),k=document.createElement("tr"),v=document.createElement("td");v.appendChild(P);let O=document.createElement("td");O.appendChild(A);let H=document.createElement("td");H.appendChild(T),N.appendChild(v),N.appendChild(O),N.appendChild(H);let ee=document.createElement("td"),K=document.createElement("td");K.appendChild(L);let te=document.createElement("td");te.appendChild(V),k.appendChild(ee),k.appendChild(K),k.appendChild(te),Q.appendChild(N),Q.appendChild(k),F.appendChild(Q),B.appendChild(c("Show bounding volume","tileBoundingSphere","hasPickedTile")),B.appendChild(c("Show only selected","filterTile","hasPickedTile")),G.appendChild(c("Wireframe","wireframe")),G.appendChild(c("Suspend LOD update","suspendUpdates")),G.appendChild(c("Show tile coordinates","tileCoordinates")),Ee.applyBindings(i,this._element)}Object.defineProperties(c3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});c3.prototype.isDestroyed=function(){return!1};c3.prototype.destroy=function(){return Ee.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),me(this)};var HN=c3;var BXo=y(C(),1);var TXo=y(C(),1);function l3(e,t){l(t)||(t=document.body),t=Dn(t);let n=this,i=Ee.observable(Wr.fullscreen),o=Ee.observable(Wr.enabled),r=t.ownerDocument;this.isFullscreen=void 0,Ee.defineProperty(this,"isFullscreen",{get:function(){return i()}}),this.isFullscreenEnabled=void 0,Ee.defineProperty(this,"isFullscreenEnabled",{get:function(){return o()},set:function(s){o(s&&Wr.enabled)}}),this.tooltip=void 0,Ee.defineProperty(this,"tooltip",function(){return this.isFullscreenEnabled?i()?"Exit full screen":"Full screen":"Full screen unavailable"}),this._command=Xn(function(){Wr.fullscreen?Wr.exitFullscreen():Wr.requestFullscreen(n._fullscreenElement)},Ee.getObservable(this,"isFullscreenEnabled")),this._fullscreenElement=Dn(e)??r.body,this._callback=function(){i(Wr.fullscreen)},r.addEventListener(Wr.changeEventName,this._callback)}Object.defineProperties(l3.prototype,{fullscreenElement:{get:function(){return this._fullscreenElement},set:function(e){this._fullscreenElement=e}},command:{get:function(){return this._command}}});l3.prototype.isDestroyed=function(){return!1};l3.prototype.destroy=function(){document.removeEventListener(Wr.changeEventName,this._callback),me(this)};var zN=l3;var cRt="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",lRt="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 d3(e,t){e=Dn(e);let n=new zN(t,e);n._exitFullScreenPath=lRt,n._enterFullScreenPath=cRt;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),Ee.applyBindings(n,i),this._container=e,this._viewModel=n,this._element=i}Object.defineProperties(d3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});d3.prototype.isDestroyed=function(){return!1};d3.prototype.destroy=function(){return this._viewModel.destroy(),Ee.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var KN=d3;var YXo=y(C(),1);var MXo=y(C(),1);var ySe=1e3;function Hm(e){l(e.geocoderServices)?this._geocoderServices=e.geocoderServices:this._geocoderServices=[new u_({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 Ce,this._suggestions=[],this._selectedSuggestion=void 0,this._showSuggestions=!0,this._handleArrowDown=xSe,this._handleArrowUp=CSe;let t=this;this._suggestionsVisible=Ee.pureComputed(function(){let o=Ee.getObservable(t,"_suggestions")().length>0,r=Ee.getObservable(t,"_showSuggestions")();return o&&r}),this._searchCommand=Xn(function(i){if(i=i??_y.SEARCH,t._focusTextbox=!1,l(t._selectedSuggestion))return t.activateSuggestion(t._selectedSuggestion),!1;if(t.hideSuggestions(),t.isSearchInProgress)pRt(t);else return hRt(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?CSe(t):r?xSe(t):a&&t._searchCommand(),!0},this.activateSuggestion=function(i){t.hideSuggestions(),t._searchText=i.displayName;let o=i.destination;ESe(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??Hm.flyToDestination,this._focusTextbox=!1,Ee.track(this,["_searchText","_isSearchInProgress","keepExpanded","_suggestions","_selectedSuggestion","_showSuggestions","_focusTextbox"]);let n=Ee.getObservable(this,"_searchText");n.extend({rateLimit:{timeout:500}}),this._suggestionSubscription=n.subscribe(function(){Hm._updateSearchSuggestions(t)}),this.isSearchInProgress=void 0,Ee.defineProperty(this,"isSearchInProgress",{get:function(){return this._isSearchInProgress}}),this.searchText=void 0,Ee.defineProperty(this,"searchText",{get:function(){return this.isSearchInProgress?"Searching...":this._searchText},set:function(i){this._searchText=i}}),this.flightDuration=void 0,Ee.defineProperty(this,"flightDuration",{get:function(){return this._flightDuration},set:function(i){this._flightDuration=i}})}Object.defineProperties(Hm.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}}});Hm.prototype.destroy=function(){this._suggestionSubscription.dispose()};function CSe(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],Hm._adjustSuggestionsScroll(e,n)}function xSe(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],Hm._adjustSuggestionsScroll(e,i)}function dRt(e,t){let n=l(t)?t.availability:void 0;return l(n)?_I(t,[e]).then(function(i){return e=i[0],e.height+=ySe,e}):(e.height+=ySe,Promise.resolve(e))}function uRt(e,t){let n=e._scene,i=n.ellipsoid,o=n.camera,r=n.terrainProvider,s=t,a;return t instanceof le?Z.equalsEpsilon(t.south,t.north,Z.EPSILON7)&&Z.equalsEpsilon(t.east,t.west,Z.EPSILON7)?t=le.center(t):a=EI(t,n):t=i.cartesianToCartographic(t),l(a)||(a=dRt(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:X.IDENTITY})})}async function mRt(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 hRt(e,t,n){let i=e._searchText;if(_Se(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 mRt(t[o],i,n),l(r)&&r.state==="fulfilled"&&r.value.length>0)break}if(e._wasGeocodeCancelled)return;e._isSearchInProgress=!1,mee(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=ISe(e,BL.getCreditsFromResult(s[0]));l(a)||uee(e,t[o].credit);return}e._searchText=`${i} (not found)`}function uee(e,t){l(t)&&!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&(e._scene.frameState.creditDisplay.addStaticCredit(t),e._previousCredits.push(t))}function ISe(e,t){return l(t)&&t.forEach(n=>uee(e,n)),t}function mee(e){!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&e._previousCredits.forEach(t=>{e._scene.frameState.creditDisplay.removeStaticCredit(t)}),e._previousCredits.length=0}function fRt(e,t){let n=Dn(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 pRt(e){e._isSearchInProgress&&(e._isSearchInProgress=!1,e._wasGeocodeCancelled=!0)}function _Se(e){return/^\s*$/.test(e)}function ESe(e){Ee.getObservable(e,"_suggestions").removeAll()}async function ARt(e){if(!e.autoComplete)return;let t=e._searchText;if(ESe(e),mee(e),!_Se(t))for(let n of e._geocoderServices){let i=await n.geocode(t,_y.AUTOCOMPLETE);if(e._suggestions=e._suggestions.concat(i),i.length>0){let o=!0;i.forEach(r=>{let s=BL.getCreditsFromResult(r);o=o&&!l(s),ISe(e,s)}),o&&uee(e,n.credit)}if(e._suggestions.length>=5)return}}Hm.flyToDestination=uRt;Hm._updateSearchSuggestions=ARt;Hm._adjustSuggestionsScroll=fRt;Hm.prototype.isDestroyed=function(){return!1};Hm.prototype.destroy=function(){return mee(this),me(this)};var JN=Hm;var gRt="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",bRt="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 u3(e){let t=Dn(e.container),n=new JN(e);n._startSearchPath=gRt,n._stopSearchPath=bRt;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),Ee.applyBindings(n,i),Ee.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()},Ht.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(u3.prototype,{container:{get:function(){return this._container}},searchSuggestionsContainer:{get:function(){return this._searchSuggestionsContainer}},viewModel:{get:function(){return this._viewModel}}});u3.prototype.isDestroyed=function(){return!1};u3.prototype.destroy=function(){let e=this._container;return Ht.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(),Ee.cleanNode(this._form),Ee.cleanNode(this._searchSuggestionsContainer),e.removeChild(this._form),e.removeChild(this._searchSuggestionsContainer),this._textBox.removeEventListener("focus",this._onTextBoxFocus,!1),me(this)};var jN=u3;var n2o=y(C(),1);var KXo=y(C(),1);function TSe(e,t){this._scene=e,this._duration=t;let n=this;this._command=Xn(function(){n._scene.camera.flyHome(n._duration)}),this.tooltip="View Home",Ee.track(this,["tooltip"])}Object.defineProperties(TSe.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 qN=TSe;function m3(e,t,n){e=Dn(e);let i=new qN(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),Ee.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(m3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});m3.prototype.isDestroyed=function(){return!1};m3.prototype.destroy=function(){return Ee.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var $N=m3;var m2o=y(C(),1);var s2o=y(C(),1);function yRt(e,t){t.currentTarget.parentElement.parentElement.querySelector(`#${e.name}-expander`).classList.toggle("active"),t.currentTarget.textContent=t.currentTarget.textContent==="+"?"-":"+"}function LSe(e,t){Ee.track(e);for(let n=0;n<e.sublayers.length;n++)LSe(e.sublayers[n],t)}function h3(e){return e.modelName==="FullModel"}function RSe(e){return e.modelName==="Overview"}function VSe(e){return RSe(e)||h3(e)}function SSe(e,t){if(VSe(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:Ee.observable(!1),index:t.sublayers.length};return t.topLayers.push(n),t.sublayers.push(e),n}}function CRt(e,t){if(VSe(e)){t.sublayers.forEach(i=>i.visibility=!1),t.sublayers[e.index].visibility=!0;let n=document.getElementById("bsl-wrapper");h3(e)?(t.currentLevel=t.selectedLevel,n.style.display="block"):(t.selectedLevel=t.currentLevel,t.currentLevel="All",n.style.display="none")}}async function xRt(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 IRt(e){let t=this;this.levels=[],this.viewModel={sublayers:[],levels:this.levels,currentLevel:Ee.observable(),selectedLevel:"All",topLayers:[{name:"Select a layer to explore...",disable:Ee.observable(!0),index:-1}],currentLayer:Ee.observable(),expandClickHandler:yRt,setOptionDisable:function(i,o){Ee.applyBindingsToNode(i,{disable:o.disable},o)},defaultLayer:void 0},this.viewModel.currentLayer.subscribe(function(i){CRt(i,t.viewModel)});let n=e.sublayers;for(let i=0;i<n.length;i++){LSe(n[i],this.viewModel);let o=SSe(n[i],this.viewModel);l(o)&&(RSe(o)||!l(this.viewModel.defaultLayer)&&h3(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=SSe(i,this.viewModel),this.viewModel.currentLayer.subscribe(function(o){e.show=h3(o)})}else this.viewModel.topLayers.length===1&&(this.viewModel.topLayers[0].name="Building layers not found");return xRt(e,this.levels),this.viewModel.currentLevel.subscribe(function(i){i!=="All"?e.filterByAttributes([{name:"BldgLevel",values:[i]}]):e.filterByAttributes()}),this.viewModel}var e9=IRt;function _Rt(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 e9(t);Ee.track(o),Ee.applyBindings(o,n),l(o.defaultLayer)&&(o.currentLayer=o.defaultLayer)}var hee=_Rt;var _2o=y(C(),1);var A2o=y(C(),1);var ERt="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",TRt="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 fee(){this._cameraClicked=new Ce,this._closeClicked=new Ce,this.maxHeight=500,this.enableCamera=!1,this.isCameraTracking=!1,this.showInfo=!1,this.titleText="",this.description="",Ee.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,Ee.defineProperty(this,"cameraIconPath",{get:function(){return!this.enableCamera||this.isCameraTracking?TRt:ERt}}),Ee.defineProperty(this,"_bodyless",{get:function(){return!l(this.description)||this.description.length===0}})}fee.prototype.maxHeightOffset=function(e){return`${this.maxHeight-e}px`};Object.defineProperties(fee.prototype,{cameraClicked:{get:function(){return this._cameraClicked}},closeClicked:{get:function(){return this._closeClicked}}});var t9=fee;function f3(e){e=Dn(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 t9;Ee.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=hn("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=$a(s,"description",function(h){r.style.height="5px",u.innerHTML=h;let p=null,g=u.firstElementChild;if(g!==null&&u.childNodes.length===1){let b=window.getComputedStyle(g);if(b!==null){let x=b["background-color"],I=U.fromCssColorString(x);l(I)&&I.alpha!==0&&(p=b["background-color"])}}t.style["background-color"]=p;let f=u.getBoundingClientRect().height;r.style.height=`${f}px`})}),r.setAttribute("src","about:blank")}Object.defineProperties(f3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}},frame:{get:function(){return this._frame}}});f3.prototype.isDestroyed=function(){return!1};f3.prototype.destroy=function(){let e=this._container;return Ee.cleanNode(this._element),e.removeChild(this._element),l(this._descriptionSubscription)&&this._descriptionSubscription.dispose(),me(this)};var n9=f3;var X2o=y(C(),1);var L2o=y(C(),1);function GSe(){this.showInstructions=!1;let e=this;this._command=Xn(function(){e.showInstructions=!e.showInstructions}),this._showClick=Xn(function(){e._touch=!1}),this._showTouch=Xn(function(){e._touch=!0}),this._touch=!1,this.tooltip="Navigation Instructions",Ee.track(this,["tooltip","showInstructions","_touch"])}Object.defineProperties(GSe.prototype,{command:{get:function(){return this._command}},showClick:{get:function(){return this._showClick}},showTouch:{get:function(){return this._showTouch}}});var i9=GSe;function p3(e){let t=Dn(e.container),n=new i9,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=hn("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=hn("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 h=document.createElement("div");h.className="cesium-click-navigation-help cesium-navigation-help-instructions",h.setAttribute("data-bind",'css: { "cesium-click-navigation-help-visible" : !_touch}'),h.innerHTML=` <table> <tr> <td><img src="${hn("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="${hn("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="${hn("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(h);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="${hn("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="${hn("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="${hn("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="${hn("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),Ee.applyBindings(n,o),this._container=t,this._viewModel=n,this._wrapper=o,this._closeInstructions=function(g){o.contains(g.target)||(n.showInstructions=!1)},Ht.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeInstructions,!0):(document.addEventListener("mousedown",this._closeInstructions,!0),document.addEventListener("touchstart",this._closeInstructions,!0))}Object.defineProperties(p3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});p3.prototype.isDestroyed=function(){return!1};p3.prototype.destroy=function(){return Ht.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeInstructions,!0):(document.removeEventListener("mousedown",this._closeInstructions,!0),document.removeEventListener("touchstart",this._closeInstructions,!0)),Ee.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),me(this)};var o9=p3;var z2o=y(C(),1);var D2o=y(C(),1);function pee(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,Ee.track(this,["lowFrameRateMessage","lowFrameRateMessageDismissed","showingLowFrameRateMessage"]);let t=this;this._dismissMessage=Xn(function(){t.showingLowFrameRateMessage=!1,t.lowFrameRateMessageDismissed=!0});let n=mN.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(pee.prototype,{scene:{get:function(){return this._scene}},dismissMessage:{get:function(){return this._dismissMessage}}});pee.prototype.destroy=function(){return this._unsubscribeLowFrameRate(),this._unsubscribeNominalFrameRate(),me(this)};var r9=pee;function A3(e){let t=Dn(e.container),n=new r9(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),Ee.applyBindings(n,i),this._container=t,this._viewModel=n,this._element=i}Object.defineProperties(A3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});A3.prototype.isDestroyed=function(){return!1};A3.prototype.destroy=function(){return this._viewModel.destroy(),Ee.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var s9=A3;var aWo=y(C(),1);var eWo=y(C(),1);function g3(e){this._scene=e,this._orthographic=e.camera.frustum instanceof gn,this._flightInProgress=!1,this.dropDownVisible=!1,this.tooltipPerspective="Perspective Projection",this.tooltipOrthographic="Orthographic Projection",this.selectedTooltip=void 0,this.sceneMode=e.mode,Ee.track(this,["_orthographic","_flightInProgress","sceneMode","dropDownVisible","tooltipPerspective","tooltipOrthographic"]);let t=this;Ee.defineProperty(this,"selectedTooltip",function(){return t._orthographic?t.tooltipOrthographic:t.tooltipPerspective}),this._toggleDropDown=Xn(function(){t.sceneMode===re.SCENE2D||t._flightInProgress||(t.dropDownVisible=!t.dropDownVisible)}),this._eventHelper=new Lr,this._eventHelper.add(e.morphComplete,function(n,i,o,r){t.sceneMode=o,t._orthographic=o===re.SCENE2D||t._scene.camera.frustum instanceof gn}),this._eventHelper.add(e.preRender,function(){t._flightInProgress=l(e.camera._currentFlight)}),this._switchToPerspective=Xn(function(){t.sceneMode!==re.SCENE2D&&(t._scene.camera.switchToPerspectiveFrustum(),t._orthographic=!1,t.dropDownVisible=!1)}),this._switchToOrthographic=Xn(function(){t.sceneMode!==re.SCENE2D&&(t._scene.camera.switchToOrthographicFrustum(),t._orthographic=!0,t.dropDownVisible=!1)}),this._sceneMode=re}Object.defineProperties(g3.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}}});g3.prototype.isDestroyed=function(){return!1};g3.prototype.destroy=function(){this._eventHelper.removeAll(),me(this)};var a9=g3;var SRt="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",LRt="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 b3(e,t){e=Dn(e);let n=new a9(t);n._perspectivePath=SRt,n._orthographicPath=LRt;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),Ee.applyBindings(n,i),this._viewModel=n,this._container=e,this._wrapper=i,this._closeDropDown=function(a){i.contains(a.target)||(n.dropDownVisible=!1)},Ht.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(b3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});b3.prototype.isDestroyed=function(){return!1};b3.prototype.destroy=function(){return this._viewModel.destroy(),Ht.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ee.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),me(this)};var c9=b3;var xWo=y(C(),1);var fWo=y(C(),1);function y3(e,t){this._scene=e;let n=this,i=function(o,r,s,a){n.sceneMode=s,n.dropDownVisible=!1};this._eventHelper=new Lr,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",Ee.track(this,["sceneMode","dropDownVisible","tooltip2D","tooltip3D","tooltipColumbusView"]),this.selectedTooltip=void 0,Ee.defineProperty(this,"selectedTooltip",function(){let o=n.sceneMode;return o===re.SCENE2D?n.tooltip2D:o===re.SCENE3D?n.tooltip3D:n.tooltipColumbusView}),this._toggleDropDown=Xn(function(){n.dropDownVisible=!n.dropDownVisible}),this._morphTo2D=Xn(function(){e.morphTo2D(n._duration)}),this._morphTo3D=Xn(function(){e.morphTo3D(n._duration)}),this._morphToColumbusView=Xn(function(){e.morphToColumbusView(n._duration)}),this._sceneMode=re}Object.defineProperties(y3.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}}});y3.prototype.isDestroyed=function(){return!1};y3.prototype.destroy=function(){this._eventHelper.removeAll(),me(this)};var l9=y3;var RRt="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",VRt="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",GRt="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 C3(e,t,n){e=Dn(e);let i=new l9(t,n);i._globePath=RRt,i._flatMapPath=VRt,i._columbusViewPath=GRt;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),Ee.applyBindings(i,o),this._viewModel=i,this._container=e,this._wrapper=o,this._closeDropDown=function(d){o.contains(d.target)||(i.dropDownVisible=!1)},Ht.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(C3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});C3.prototype.isDestroyed=function(){return!1};C3.prototype.destroy=function(){return this._viewModel.destroy(),Ht.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Ee.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),me(this)};var d9=C3;var wWo=y(C(),1);var SWo=y(C(),1);var ZRt=new D,x3="-1000px";function u9(e,t,n){this._scene=e,this._screenPositionX=x3,this._screenPositionY=x3,this._tweens=e.tweens,this._container=n??document.body,this._selectionIndicatorElement=t,this._scale=1,this.position=void 0,this.showSelection=!1,Ee.track(this,["position","_screenPositionX","_screenPositionY","_scale","showSelection"]),this.isVisible=void 0,Ee.defineProperty(this,"isVisible",{get:function(){return this.showSelection&&l(this.position)}}),Ee.defineProperty(this,"_transform",{get:function(){return`scale(${this._scale})`}}),this.computeScreenSpacePosition=function(i,o){return to.worldToWindowCoordinates(e,i,o)}}u9.prototype.update=function(){if(this.showSelection&&l(this.position)){let e=this.computeScreenSpacePosition(this.position,ZRt);if(!l(e))this._screenPositionX=x3,this._screenPositionY=x3;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`}}};u9.prototype.animateAppear=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:2,stopValue:1,duration:.8,easingFunction:ms.EXPONENTIAL_OUT})};u9.prototype.animateDepart=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:this._scale,stopValue:1.5,duration:.8,easingFunction:ms.EXPONENTIAL_OUT})};Object.defineProperties(u9.prototype,{container:{get:function(){return this._container}},selectionIndicatorElement:{get:function(){return this._selectionIndicatorElement}},scene:{get:function(){return this._scene}}});var m9=u9;function I3(e,t){e=Dn(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 m9(t,this._element,this._container);this._viewModel=c,Ee.applyBindings(this._viewModel,this._element)}Object.defineProperties(I3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});I3.prototype.isDestroyed=function(){return!1};I3.prototype.destroy=function(){let e=this._container;return Ee.cleanNode(this._element),e.removeChild(this._element),me(this)};var h9=I3;var YWo=y(C(),1);var FWo=y(C(),1);function E_(e,t,n){this._color=e,this._height=t,this._base=n??0}E_.prototype.getHeight=function(){return this._height};E_.prototype.getBase=function(){return this._base};E_.prototype.getStartTime=function(){return this._start};E_.prototype.getStopTime=function(){return this._stop};E_.prototype.setRange=function(e,t){this._start=e,this._stop=t};E_.prototype.render=function(e){let t="";if(this._start&&this._stop&&this._color){let n=j.secondsDifference(this._start,e.epochJulian),i=Math.round(e.timeBarWidth*e.getAlpha(n)),o=j.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 f9=E_;var vWo=y(C(),1);function ZSe(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)}ZSe.prototype.render=function(e,t){let n=this.interval.start,i=this.interval.stop,o=t.startJulian,r=j.addSeconds(t.startJulian,t.duration,new j);if(j.lessThan(n,o)&&j.greaterThan(i,r))e.fillStyle=this.color.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height);else if(j.lessThanOrEquals(n,r)&&j.greaterThanOrEquals(i,o)){let s,a,c;for(s=0;s<t.timeBarWidth;++s){let d=j.addSeconds(t.startJulian,s/t.timeBarWidth*t.duration,new j);!l(a)&&j.greaterThanOrEquals(d,n)?a=s:!l(c)&&j.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 p9=ZSe;var Aee=1e12,zm={none:0,scrub:1,slide:2,zoom:3,touchOnly:4},Ql={none:0,scrub:1,slideZoom:2,singleTap:3,ignore:4},By=[.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],BRt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function Ul(e,t){e=Dn(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=zm.none,this._touchMode=Ql.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=wRt(this),this._onMouseUp=XRt(this),this._onMouseMove=WRt(this),this._onMouseWheel=FRt(this),this._onTouchStart=PRt(this),this._onTouchMove=vRt(this),this._onTouchEnd=MRt(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()}Ul.prototype.addEventListener=function(e,t,n){this._topDiv.addEventListener(e,t,n)};Ul.prototype.removeEventListener=function(e,t,n){this._topDiv.removeEventListener(e,t,n)};Ul.prototype.isDestroyed=function(){return!1};Ul.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)};Ul.prototype.addHighlightRange=function(e,t,n){let i=new f9(e,t,n);return this._highlightRanges.push(i),this.resize(),i};Ul.prototype.addTrack=function(e,t,n,i){let o=new p9(e,t,n,i);return this._trackList.push(o),this._lastHeight=void 0,this.resize(),o};Ul.prototype.zoomTo=function(e,t){if(this._startJulian=e,this._endJulian=t,this._timeBarSecondsSpan=j.secondsDifference(t,e),this._clock&&this._clock.clockRange!==ls.UNBOUNDED){let i=this._clock.startTime,o=this._clock.stopTime,r=j.secondsDifference(o,i),s=j.secondsDifference(i,this._startJulian),a=j.secondsDifference(o,this._endJulian);this._timeBarSecondsSpan>=r?(this._timeBarSecondsSpan=r,this._startJulian=this._clock.startTime,this._endJulian=this._clock.stopTime):s>0?(this._endJulian=j.addSeconds(this._endJulian,s,new j),this._startJulian=i,this._timeBarSecondsSpan=j.secondsDifference(this._endJulian,this._startJulian)):a<0&&(this._startJulian=j.addSeconds(this._startJulian,a,new j),this._endJulian=o,this._timeBarSecondsSpan=j.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)};Ul.prototype.zoomFrom=function(e){let t=j.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(j.addSeconds(this._startJulian,t-t*e,new j),j.addSeconds(this._endJulian,n*e-n,new j))};function gee(e){return e<10?`0${e.toString()}`:e.toString()}Ul.prototype.makeLabel=function(e){let t=j.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`${BRt[t.month-1]} ${t.day} ${t.year} ${gee(t.hour)}:${gee(t.minute)}:${gee(t.second)}${i}`};Ul.prototype.smallestTicInPixels=7;Ul.prototype._makeTics=function(){let e=this._timeBarEle,t=j.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,h=this._timeBarSecondsSpan;h<a?(h=a,this._timeBarSecondsSpan=a,this._endJulian=j.addSeconds(this._startJulian,a,new j)):h>c&&(h=c,this._timeBarSecondsSpan=c,this._endJulian=j.addSeconds(this._startJulian,c,new j));let p=this._timeBarEle.clientWidth;p<10&&(p=10);let g=this._startJulian,f=Math.min(h/p*1e-5,.4),b,x=j.toGregorianDate(g);h>31536e4?b=j.fromDate(new Date(Date.UTC(Math.floor(x.year/100)*100,0))):h>31536e3?b=j.fromDate(new Date(Date.UTC(Math.floor(x.year/10)*10,0))):h>86400?b=j.fromDate(new Date(Date.UTC(x.year,0))):b=j.fromDate(new Date(Date.UTC(x.year,x.month,x.day)));let I=j.secondsDifference(this._startJulian,j.addSeconds(b,f,new j)),_=I+h;this._epochJulian=b;function E(v){return Math.floor(I/v)*v}function S(v,O){return Math.ceil(v/O+.5)*O}function R(v){return(v-I)/h}function G(v,O){return v-O*Math.round(v/O)}this._rulerEle.innerHTML=this.makeLabel(j.addSeconds(this._endJulian,-a,new j));let B=this._rulerEle.offsetWidth+20;B<30&&(B=180);let w=u;u-=d;let F={startTime:I,startJulian:g,epochJulian:b,duration:h,timeBarWidth:p,getAlpha:R};this._highlightRanges.forEach(function(v){s+=v.render(F)});let P=0,A=0,T=0,L=B/p;L>1&&(L=1),L*=this._timeBarSecondsSpan;let V=-1,W=-1,M=By.length,Q;for(Q=0;Q<M;++Q){let v=By[Q];if(++V,P=v,v>L&&v>u)break;W<0&&p*(v/this._timeBarSecondsSpan)>=this.smallestTicInPixels&&(W=V)}if(V>0){for(;V>0;)if(--V,Math.abs(G(P,By[V]))<1e-5){By[V]>=u&&(A=By[V]);break}if(W>=0)for(;W<V;){if(Math.abs(G(A,By[W]))<1e-5&&By[W]>=u){T=By[W];break}++W}}u=w,u>d&&T<1e-5&&Math.abs(u-P)>d&&(T=u,u<=P+d&&(A=0));let N=-999999,k;if(p*(T/this._timeBarSecondsSpan)>=3)for(o=E(T);o<=_;o=S(o,T))s+=`<span class="cesium-timeline-ticTiny" style="left: ${Math.round(p*R(o)).toString()}px;"></span>`;if(p*(A/this._timeBarSecondsSpan)>=3)for(o=E(A);o<=_;o=S(o,A))s+=`<span class="cesium-timeline-ticSub" style="left: ${Math.round(p*R(o)).toString()}px;"></span>`;if(p*(P/this._timeBarSecondsSpan)>=2){this._mainTicSpan=P,_+=P,o=E(P);let v=j.computeTaiMinusUtc(b);for(;o<=_;){let O=j.addSeconds(g,o-I,new j);if(P>2.1){let te=j.computeTaiMinusUtc(O);Math.abs(te-v)>.1&&(o+=te-v,O=j.addSeconds(g,o-I,new j))}let H=Math.round(p*R(o)),ee=this.makeLabel(O);this._rulerEle.innerHTML=ee,k=this._rulerEle.offsetWidth,k<10&&(k=B);let K=H-(k/2-1);K>N?(N=K+k+5,s+=`<span class="cesium-timeline-ticMain" style="left: ${H.toString()}px;"></span><span class="cesium-timeline-ticLabel" style="left: ${K.toString()}px;">${ee}</span>`):s+=`<span class="cesium-timeline-ticSub" style="left: ${H.toString()}px;"></span>`,o=S(o,P)}}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),F.y=0,this._trackList.forEach(function(v){v.render(r._context,F),F.y+=v.height})};Ul.prototype.updateFromClock=function(){this._scrubJulian=this._clock.currentTime;let e=this._scrubElement;if(l(this._scrubElement)){let t=j.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(j.addSeconds(this._startJulian,this._timelineDrag,new j),j.addSeconds(this._endJulian,this._timelineDrag,new j)))};Ul.prototype._setTimeBarTime=function(e,t){if(e=Math.round(e),this._scrubJulian=j.addSeconds(this._startJulian,t,new j),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 wRt(e){return function(t){e._mouseMode!==zm.touchOnly&&(t.button===0?(e._mouseMode=zm.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition="-16px 0"),e._onMouseMove(t)):(e._mouseX=t.clientX,t.button===2?e._mouseMode=zm.zoom:e._mouseMode=zm.slide)),t.preventDefault()}}function XRt(e){return function(t){e._mouseMode=zm.none,e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0"),e._timelineDrag=0,e._timelineDragLocation=void 0}}function WRt(e){return function(t){let n;if(e._mouseMode===zm.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===zm.slide){if(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0){let i=n*e._timeBarSecondsSpan/e._topDiv.clientWidth;e.zoomTo(j.addSeconds(e._startJulian,i,new j),j.addSeconds(e._endJulian,i,new j))}}else e._mouseMode===zm.zoom&&(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0&&e.zoomFrom(Math.pow(1.01,n)))}}function FRt(e){return function(t){let n=t.wheelDeltaY||t.wheelDelta||-t.detail;Aee=Math.max(Math.min(Math.abs(n),Aee),1),n/=Aee,e.zoomFrom(Math.pow(1.05,-n))}}function PRt(e){return function(t){let n=t.touches.length,i,o,r=e._topDiv.getBoundingClientRect().left;t.preventDefault(),e._mouseMode=zm.touchOnly,n===1?(i=j.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=Ql.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition=n===1?"-16px 0":"0 0")):(e._touchMode=Ql.singleTap,e._touchState.centerX=t.touches[0].clientX-r)):n===2?(e._touchMode=Ql.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=Ql.ignore}}function MRt(e){return function(t){let n=t.touches.length,i=e._topDiv.getBoundingClientRect().left;e._touchMode===Ql.singleTap?(e._touchMode=Ql.scrub,e._onTouchMove(t)):e._touchMode===Ql.scrub&&e._onTouchMove(t),e._mouseMode=zm.touchOnly,n!==1?e._touchMode=n>0?Ql.ignore:Ql.none:e._touchMode===Ql.slideZoom&&(e._touchState.centerX=t.touches[0].clientX-i),e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0")}}function vRt(e){return function(t){let n,i,o,r,s,a,c=1,d=e._topDiv.getBoundingClientRect().left;e._touchMode===Ql.singleTap&&(e._touchMode=Ql.slideZoom),e._mouseMode=zm.touchOnly,e._touchMode===Ql.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===Ql.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=j.addSeconds(e._startJulian,(e._touchState.centerX*e._timeBarSecondsSpan-r*e._timeBarSecondsSpan*c)/e._topDiv.clientWidth,new j)):(n=e._touchState.centerX-r,a=j.addSeconds(e._startJulian,n*e._timeBarSecondsSpan/e._topDiv.clientWidth,new j)),e.zoomTo(a,j.addSeconds(a,e._timeBarSecondsSpan*c,new j)),e._touchState.centerX=r,e._touchState.spanX=s))}}Ul.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 A9=Ul;var cFo=y(C(),1);var tFo=y(C(),1);var FSe=y(WSe(),1);function QRt(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 PSe(){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 URt(e,t,n,i){i()||(n()?(t.useWebVR=!1,e._locked&&(PSe(),e._locked=!1),e._noSleep.disable(),Wr.exitFullscreen(),n(!1)):(Wr.fullscreen||Wr.requestFullscreen(e._vrElement),e._noSleep.enable(),e._locked||(e._locked=QRt("landscape")),t.useWebVR=!0,n(!0)))}function _3(e,t){let n=this,i=Ee.observable(Wr.enabled),o=Ee.observable(!1);this.isVRMode=void 0,Ee.defineProperty(this,"isVRMode",{get:function(){return o()}}),this.isVREnabled=void 0,Ee.defineProperty(this,"isVREnabled",{get:function(){return i()},set:function(s){i(s&&Wr.enabled)}}),this.tooltip=void 0,Ee.defineProperty(this,"tooltip",function(){return i()?o()?"Exit VR mode":"Enter VR mode":"VR mode is unavailable"});let r=Ee.observable(!1);this._isOrthographic=void 0,Ee.defineProperty(this,"_isOrthographic",{get:function(){return r()}}),this._eventHelper=new Lr,this._eventHelper.add(e.preRender,function(){r(e.camera.frustum instanceof gn)}),this._locked=!1,this._noSleep=new FSe.default,this._command=Xn(function(){URt(n,e,o,r)},Ee.getObservable(this,"isVREnabled")),this._vrElement=Dn(t)??document.body,this._callback=function(){!Wr.fullscreen&&o()&&(e.useWebVR=!1,n._locked&&(PSe(),n._locked=!1),n._noSleep.disable(),o(!1))},document.addEventListener(Wr.changeEventName,this._callback)}Object.defineProperties(_3.prototype,{vrElement:{get:function(){return this._vrElement},set:function(e){this._vrElement=e}},command:{get:function(){return this._command}}});_3.prototype.isDestroyed=function(){return!1};_3.prototype.destroy=function(){this._eventHelper.removeAll(),document.removeEventListener(Wr.changeEventName,this._callback),me(this)};var g9=_3;var kRt="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",YRt="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 E3(e,t,n){e=Dn(e);let i=new g9(t,n);i._exitVRPath=YRt,i._enterVRPath=kRt;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),Ee.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(E3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});E3.prototype.isDestroyed=function(){return!1};E3.prototype.destroy=function(){return this._viewModel.destroy(),Ee.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var b9=E3;var VFo=y(C(),1);var MSe=new ue;function DSe(e){let t=e.clock;t.currentTime=e.timeJulian,t.shouldAnimate=!1}function ORt(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 HRt(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 vSe(e,t){let n=e.scene.pick(t.position);if(l(n)){let i=n.id??n.primitive.id;if(i instanceof ur)return i;if(n instanceof ma)return new ur({name:HRt(n),description:ORt(n),feature:n})}if(l(e.scene.globe))return JRt(e,t.position)}var zRt=new j;function xee(e,t){if(l(t)){let n=t.clock;if(l(n)&&l(e)){let i=n.startTime,o=n.stopTime;j.equals(i,o)&&(o=j.addSeconds(i,Z.EPSILON2,zRt)),e.updateFromClock(),e.zoomTo(i,o)}}}var KRt=new m;function JRt(e,t){let n=e.scene,i=n.camera.getPickRay(t),o=n.imageryLayers.pickImageryLayerFeatures(i,n);if(!l(o))return;let r=new ur({id:"Loading...",description:"Loading feature information..."});return o.then(function(s){if(e.selectedEntity!==r)return;if(!l(s)||s.length===0){e.selectedEntity=NSe();return}let a=s[0],c=new ur({id:a.name,description:a.description});if(l(a.position)){let d=e.scene.ellipsoid.cartographicToCartesian(a.position,KRt);c.position=new dl(d)}e.selectedEntity=c},function(){e.selectedEntity===r&&(e.selectedEntity=NSe())}),r}function NSe(){return new ur({id:"None",description:"No features found."})}function jRt(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,h=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(h)&&(h.container.style.visibility=p),e._container){let g=t||!l(d)?0:d.container.clientWidth;e._vrButton.container.style.right=`${g}px`,e.forceResize()}}function lo(e,t){e=Dn(e),t=t??Y.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 Yh,d=new BN(c),u=!0);let h=new Hv(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=h.scene,g=new Lr;g.add(c.onTick,lo.prototype._onTick,this);let f;if(!l(t.selectionIndicator)||t.selectionIndicator!==!1){let O=document.createElement("div");O.className="cesium-viewer-selectionIndicatorContainer",o.appendChild(O),f=new h9(O,p)}let b;if(!l(t.infoBox)||t.infoBox!==!1){let O=document.createElement("div");O.className="cesium-viewer-infoBoxContainer",o.appendChild(O),b=new n9(O);let H=b.viewModel;g.add(H.cameraClicked,lo.prototype._onInfoBoxCameraClicked,this),g.add(H.closeClicked,lo.prototype._onInfoBoxClockClicked,this)}let x=document.createElement("div");x.className="cesium-viewer-toolbar",o.appendChild(x);let I;if(!l(t.geocoder)||t.geocoder!==!1){let O=document.createElement("div");O.className="cesium-viewer-geocoderContainer",x.appendChild(O);let H;typeof t.geocoder=="string"?H=[new u_({scene:p,geocodeProviderType:t.geocoder})]:l(t.geocoder)&&typeof t.geocoder!="boolean"&&(H=Array.isArray(t.geocoder)?t.geocoder:[t.geocoder]),I=new jN({container:O,geocoderServices:H,scene:p}),g.add(I.viewModel.search.beforeExecute,lo.prototype._clearObjects,this)}let _;(!l(t.homeButton)||t.homeButton!==!1)&&(_=new $N(x,p),l(I)&&g.add(_.viewModel.command.afterExecute,function(){let O=I.viewModel;O.searchText="",O.isSearchInProgress&&O.search()}),g.add(_.viewModel.command.beforeExecute,lo.prototype._clearTrackedObject,this));let E;!a&&(!l(t.sceneModePicker)||t.sceneModePicker!==!1)&&(E=new d9(x,p));let S;t.projectionPicker&&(S=new c9(x,p));let R,G;if(n){let O=t.imageryProviderViewModels??vN(),H=t.terrainProviderViewModels??NN();R=new MN(x,{globe:p.globe,imageryProviderViewModels:O,selectedImageryProviderViewModel:t.selectedImageryProviderViewModel,terrainProviderViewModels:H,selectedTerrainProviderViewModel:t.selectedTerrainProviderViewModel}),G=x.getElementsByClassName("cesium-baseLayerPicker-dropDown")[0]}l(t.baseLayer)&&t.baseLayer!==!1&&(n&&(R.viewModel.selectedImagery=void 0),p.imageryLayers.removeAll(),p.imageryLayers.add(t.baseLayer)),l(t.terrainProvider)&&(n&&(R.viewModel.selectedTerrain=void 0),p.terrainProvider=t.terrainProvider),l(t.terrain)&&(n&&(p.globe.depthTestAgainstTerrain=!0),p.setTerrain(t.terrain));let B;if(!l(t.navigationHelpButton)||t.navigationHelpButton!==!1){let O=!0;try{if(l(window.localStorage)){let H=window.localStorage.getItem("cesium-hasSeenNavHelp");l(H)&&H?O=!1:window.localStorage.setItem("cesium-hasSeenNavHelp","true")}}catch{}B=new o9({container:x,instructionsInitiallyVisible:t.navigationInstructionsInitiallyVisible??O})}let w;if(!l(t.animation)||t.animation!==!1){let O=document.createElement("div");O.className="cesium-viewer-animationContainer",o.appendChild(O),w=new WN(O,new FN(d))}let F;if(!l(t.timeline)||t.timeline!==!1){let O=document.createElement("div");O.className="cesium-viewer-timelineContainer",o.appendChild(O),F=new A9(O,c),F.addEventListener("settime",DSe,!1),F.zoomTo(c.startTime,c.stopTime)}let P,A,T;(!l(t.fullscreenButton)||t.fullscreenButton!==!1)&&(T=document.createElement("div"),T.className="cesium-viewer-fullscreenContainer",o.appendChild(T),P=new KN(T,t.fullscreenElement),A=$a(P.viewModel,"isFullscreenEnabled",function(O){T.style.display=O?"block":"none",l(F)&&(F.container.style.right=`${T.clientWidth}px`,F.resize())}));let L,V,W;if(t.vrButton){let O=document.createElement("div");O.className="cesium-viewer-vrContainer",o.appendChild(O),L=new b9(O,p,t.fullScreenElement),V=$a(L.viewModel,"isVREnabled",function(H){O.style.display=H?"block":"none",l(P)&&(O.style.right=`${T.clientWidth}px`),l(F)&&(F.container.style.right=`${O.clientWidth}px`,F.resize())}),W=$a(L.viewModel,"isVRMode",function(H){jRt(i,H)})}this._baseLayerPickerDropDown=G,this._fullscreenSubscription=A,this._vrSubscription=V,this._vrModeSubscription=W,this._dataSourceChangedListeners={},this._container=e,this._bottomContainer=s,this._element=o,this._cesiumWidget=h,this._selectionIndicator=f,this._infoBox=b,this._clockViewModel=d,this._destroyClockViewModel=u,this._toolbar=x,this._homeButton=_,this._sceneModePicker=E,this._projectionPicker=S,this._baseLayerPicker=R,this._navigationHelpButton=B,this._animation=w,this._timeline=F,this._fullscreenButton=P,this._vrButton=L,this._geocoder=I,this._eventHelper=g,this._lastWidth=0,this._lastHeight=0,this._enableInfoOrSelection=l(b)||l(f),this._selectedEntity=void 0,this._selectedEntityChanged=new Ce;let M=this._cesiumWidget.dataSources,Q=this._cesiumWidget.dataSourceDisplay;g.add(M.dataSourceAdded,lo.prototype._onDataSourceAdded,this),g.add(M.dataSourceRemoved,lo.prototype._onDataSourceRemoved,this),g.add(p.postUpdate,lo.prototype.resize,this);let N=M.length;for(let O=0;O<N;O++)this._dataSourceAdded(M,M.get(O));this._dataSourceAdded(void 0,Q.defaultDataSource),g.add(M.dataSourceAdded,lo.prototype._dataSourceAdded,this),g.add(M.dataSourceRemoved,lo.prototype._dataSourceRemoved,this);function k(O){let H=vSe(i,O);l(H)?z.getValueOrUndefined(H.position,i.clock.currentTime)?i.trackedEntity=H:i.zoomTo(H):l(i.trackedEntity)&&(i.trackedEntity=void 0)}function v(O){i.selectedEntity=vSe(i,O)}h.screenSpaceEventHandler.setInputAction(v,Zn.LEFT_CLICK),h.screenSpaceEventHandler.setInputAction(k,Zn.LEFT_DOUBLE_CLICK),h._canAnimateUpdateCallback=this._updateCanAnimate(this)}Object.defineProperties(lo.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,xee(this._timeline,e))}}});lo.prototype.extend=function(e,t){e(this,t)};lo.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,h=5,p=3,g=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())),h=u+5}if(r&&window.getComputedStyle(this._timeline.container).visibility!=="hidden"){let f=this._fullscreenButton,b=this._vrButton,x=c.container,I=x.style;p=x.clientHeight+3,I.left=`${u}px`;let _=0;l(f)&&(_+=f.container.clientWidth),l(b)&&(_+=b.container.clientWidth),I.right=`${_}px`,c.resize()}!r&&l(this._fullscreenButton)&&(g=this._fullscreenButton.container.clientWidth),this._bottomContainer.style.left=`${h}px`,this._bottomContainer.style.bottom=`${p}px`,this._bottomContainer.style.right=`${g}px`,this._lastWidth=n,this._lastHeight=i};lo.prototype.forceResize=function(){this._lastWidth=0,this.resize()};lo.prototype.render=function(){this._cesiumWidget.render()};lo.prototype.isDestroyed=function(){return!1};lo.prototype.destroy=function(){return l(this.screenSpaceEventHandler)&&!this.screenSpaceEventHandler.isDestroyed()&&(this.screenSpaceEventHandler.removeInputAction(Zn.LEFT_CLICK),this.screenSpaceEventHandler.removeInputAction(Zn.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",DSe,!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)};lo.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(lo.prototype._onEntityCollectionChanged,this)};lo.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(lo.prototype._onEntityCollectionChanged,this),l(this.selectedEntity)&&n.getById(this.selectedEntity.id)===this.selectedEntity&&(this.selectedEntity=void 0)};lo.prototype._updateCanAnimate=function(e){return function(t){e._clockViewModel.canAnimate=t}};lo.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,MSe)!==At.FAILED?n=MSe.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=m.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=z.getValueOrDefault(o.description,t,"")):(a.titleText="",a.description=""))};lo.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)}};lo.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)}};lo.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};lo.prototype._onInfoBoxClockClicked=function(e){this.selectedEntity=void 0};lo.prototype._clearObjects=function(){this.trackedEntity=void 0,this.selectedEntity=void 0};lo.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&xee(this.timeline,e)};lo.prototype._onDataSourceAdded=function(e,t){this._cesiumWidget._automaticallyTrackDataSourceClocks&&t===this.clockTrackedDataSource&&xee(this._timeline,t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,lo.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};lo.prototype._onDataSourceRemoved=function(e,t){let n=t.entities.id;this._dataSourceChangedListeners[n](),this._dataSourceChangedListeners[n]=void 0};lo.prototype.zoomTo=function(e,t){return this._cesiumWidget.zoomTo(e,t)};lo.prototype.flyTo=function(e,t){return this._cesiumWidget.flyTo(e,t)};var Iee=lo;var BFo=y(C(),1);function qRt(e){let t=document.createElement("div");t.className="cesium-viewer-cesium3DTilesInspectorContainer",e.container.appendChild(t);let n=new kN(t,e.scene);Object.defineProperties(e,{cesium3DTilesInspector:{get:function(){return n}}})}var _ee=qRt;var WFo=y(C(),1);function $Rt(e){let t=document.createElement("div");t.className="cesium-viewer-cesiumInspectorContainer",e.container.appendChild(t);let n=new HN(t,e.scene);Object.defineProperties(e,{cesiumInspector:{get:function(){return n}}})}var Eee=$Rt;var vFo=y(C(),1);function eVt(e,t){t=t??Y.EMPTY_OBJECT;let n=!0,i=t.flyToOnDrop??!0,o=new Ce,r=t.clearOnDrop??!0,s=t.dropTarget??e.container,a=t.clampToGround??!0,c=t.proxy;s=Dn(s),Object.defineProperties(e,{dropTarget:{get:function(){return s},set:function(u){QSe(s,d),s=u,Tee(s,d)}},dropEnabled:{get:function(){return n},set:function(u){u!==n&&(u?Tee(s,d):QSe(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){T_(u),r&&(e.entities.removeAll(),e.dataSources.removeAll());let h=u.dataTransfer.files,p=h.length;for(let g=0;g<p;g++){let f=h[g],b=new FileReader;b.onload=tVt(e,f,c,a),b.onerror=nVt(e,f),b.readAsText(f)}}Tee(s,d),e.destroy=nN(e,e.destroy,function(){e.dropEnabled=!1}),e._handleDrop=d}function T_(e){e.stopPropagation(),e.preventDefault()}function QSe(e,t){let n=e;l(n)&&(n.removeEventListener("drop",t,!1),n.removeEventListener("dragenter",T_,!1),n.removeEventListener("dragover",T_,!1),n.removeEventListener("dragexit",T_,!1))}function Tee(e,t){e.addEventListener("drop",t,!1),e.addEventListener("dragenter",T_,!1),e.addEventListener("dragover",T_,!1),e.addEventListener("dragexit",T_,!1)}function tVt(e,t,n,i){let o=e.scene;return function(r){let s=t.name;try{let a;if(/\.czml$/i.test(s))a=TW.load(JSON.parse(r.target.result),{sourceUri:s});else if(/\.geojson$/i.test(s)||/\.json$/i.test(s)||/\.topojson$/i.test(s))a=Q0.load(JSON.parse(r.target.result),{sourceUri:s,clampToGround:i});else if(/\.(kml|kmz)$/i.test(s))a=pI.load(t,{sourceUri:s,proxy:n,camera:o.camera,canvas:o.canvas,clampToGround:i,screenOverlayContainer:e.container});else if(/\.gpx$/i.test(s))a=IF.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 nVt(e,t){return function(n){e.dropError.raiseEvent(e,t.name,n.target.error)}}var See=eVt;var YFo=y(C(),1);function iVt(e,t){t=t??Y.EMPTY_OBJECT;let n=new s9({scene:e.scene,container:e.bottomContainer,lowFrameRateMessage:t.lowFrameRateMessage});Object.defineProperties(e,{performanceWatchdog:{get:function(){return n}}})}var Lee=iVt;var sPo=y(C(),1);var iPo=y(C(),1);var JFo=y(C(),1);function USe(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 Km(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=Ee.observable();return Ee.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=USe(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===qa.BOX}}),n({name:"shapeIsEllipsoid",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsEllipsoid=o===qa.ELLIPSOID}}),n({name:"shapeIsCylinder",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsCylinder=o===qa.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:-Z.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLongitudeMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingEllipsoidMaxLongitudeMax",initialValue:Z.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:-Z.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMinLongitudeMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingEllipsoidMinLongitudeMax",initialValue:Z.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:-Z.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLatitudeMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingEllipsoidMaxLatitudeMax",initialValue:Z.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:-Z.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMinLatitudeMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingEllipsoidMinLatitudeMax",initialValue:Z.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:-Z.PI,getPrimitiveFunction:function(){t.clippingCylinderMaxAngleMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingCylinderMaxAngleMax",initialValue:Z.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:-Z.PI}),n({name:"clippingCylinderMinAngleMax",initialValue:Z.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&&Np(t)},getPrimitiveFunction:function(){t.translationX=X.getTranslation(t._voxelPrimitive.modelMatrix,new m).x}}),n({name:"translationY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&Np(t)},getPrimitiveFunction:function(){t.translationY=X.getTranslation(t._voxelPrimitive.modelMatrix,new m).y}}),n({name:"translationZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&Np(t)},getPrimitiveFunction:function(){t.translationZ=X.getTranslation(t._voxelPrimitive.modelMatrix,new m).z}}),n({name:"scaleX",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&Np(t)},getPrimitiveFunction:function(){t.scaleX=X.getScale(t._voxelPrimitive.modelMatrix,new m).x}}),n({name:"scaleY",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&Np(t)},getPrimitiveFunction:function(){t.scaleY=X.getScale(t._voxelPrimitive.modelMatrix,new m).y}}),n({name:"scaleZ",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&Np(t)},getPrimitiveFunction:function(){t.scaleZ=X.getScale(t._voxelPrimitive.modelMatrix,new m).z}}),n({name:"angleX",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&Np(t)}}),n({name:"angleY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&Np(t)}}),n({name:"angleZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&Np(t)}})}var oVt=new m,rVt=new m,sVt=new ic,aVt=new $;function Np(e){let t=m.fromElements(e.translationX,e.translationY,e.translationZ,oVt),n=m.fromElements(e.scaleX,e.scaleY,e.scaleZ,rVt),i=sVt;i.heading=e.angleX,i.pitch=e.angleY,i.roll=e.angleZ;let o=$.fromHeadingPitchRoll(i,aVt),r=$.multiplyByScale(o,n,o);e._voxelPrimitive.modelMatrix=X.fromRotationTranslation(r,t,e._voxelPrimitive.modelMatrix)}Object.defineProperties(Km.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=USe(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,Np(t)}}});Km.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};Km.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};Km.prototype.toggleTransform=function(){this.transformVisible=!this.transformVisible};Km.prototype.toggleBounds=function(){this.boundsVisible=!this.boundsVisible};Km.prototype.toggleClipping=function(){this.clippingVisible=!this.clippingVisible};Km.prototype.toggleShader=function(){this.shaderVisible=!this.shaderVisible};Km.prototype.compileShader=function(){l(this._voxelPrimitive)&&(this._voxelPrimitive.customShader=new KI({fragmentShaderText:this.shaderString,uniforms:this._voxelPrimitive.customShader.uniforms}))};Km.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};Km.prototype.isDestroyed=function(){return!1};Km.prototype.destroy=function(){let e=this;return this._definedProperties.forEach(function(t){Ee.getObservable(e,t).dispose()}),me(this)};var y9=Km;function T3(e,t){e=Dn(e);let n=document.createElement("div"),i=new y9(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}=Vd,u=s(r,"Display","displayVisible","toggleDisplay"),h=s(r,"Transform","transformVisible","toggleTransform"),p=s(r,"Clipping","clippingVisible","toggleClipping"),g=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,b=10,x=Z.PI;h.appendChild(c("Translation X","translationX",-f,+f)),h.appendChild(c("Translation Y","translationY",-f,+f)),h.appendChild(c("Translation Z","translationZ",-f,+f)),h.appendChild(c("Scale X","scaleX",0,+b)),h.appendChild(c("Scale Y","scaleY",0,+b)),h.appendChild(c("Scale Z","scaleZ",0,+b)),h.appendChild(c("Heading","angleX",-x,+x)),h.appendChild(c("Pitch","angleY",-x,+x)),h.appendChild(c("Roll","angleZ",-x,+x)),Ree("Max X","Min X","Max Y","Min Y","Max Z","Min Z","clippingBoxMaxX","clippingBoxMinX","clippingBoxMaxY","clippingBoxMinY","clippingBoxMaxZ","clippingBoxMinZ","shapeIsBox",p),Ree("Max Longitude","Min Longitude","Max Latitude","Min Latitude","Max Height","Min Height","clippingEllipsoidMaxLongitude","clippingEllipsoidMinLongitude","clippingEllipsoidMaxLatitude","clippingEllipsoidMinLatitude","clippingEllipsoidMaxHeight","clippingEllipsoidMinHeight","shapeIsEllipsoid",p),Ree("Max Radius","Min Radius","Max Angle","Min Angle","Max Height","Min Height","clippingCylinderMaxRadius","clippingCylinderMinRadius","clippingCylinderMaxAngle","clippingCylinderMinAngle","clippingCylinderMaxHeight","clippingCylinderMinHeight","shapeIsCylinder",p);let I=document.createElement("div");g.appendChild(I);let _=document.createElement("textarea");_.setAttribute("data-bind","textInput: shaderString, event: { keydown: shaderEditorKeyPress }"),I.className="cesium-cesiumInspector-styleEditor",I.appendChild(_);let E=d("Compile (Ctrl+Enter)","compileShader");I.appendChild(E);let S=document.createElement("label");S.style.display="block",S.setAttribute("data-bind","text: shaderCompilationMessage, style: {color: shaderCompilationSuccess ? 'green' : 'red'}"),I.appendChild(S),Ee.applyBindings(i,n)}Object.defineProperties(T3.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});T3.prototype.isDestroyed=function(){return!1};T3.prototype.destroy=function(){return Ee.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),me(this)};function Ree(e,t,n,i,o,r,s,a,c,d,u,h,p,g){let f=Vd.createRangeInputWithDynamicMinMax,b=g.appendChild(document.createElement("div"));b.setAttribute("data-bind",`if: ${p}`),b.appendChild(f(e,s)),b.appendChild(f(t,a)),b.appendChild(f(n,c)),b.appendChild(f(i,d)),b.appendChild(f(o,u)),b.appendChild(f(r,h))}var C9=T3;function cVt(e){let t=document.createElement("div");t.className="cesium-viewer-voxelInspectorContainer",e.container.appendChild(t);let n=new C9(t,e.scene);Object.defineProperties(e,{voxelInspector:{get:function(){return n}}})}var Vee=cVt;globalThis.CESIUM_VERSION="1.132";var lVt="1.132";return $Se(dVt);})();